Game Project Implementation - DevLog
Game Implementation:
The current version of “Codename: Rune Caster” game overall differs notably from the specifications written in the concept document particularly in terms of the mechanics, animation, level length, level blocking/art, enemy diversity, and puzzles. Below are included listed envisioned versus to-date product comparisons based on the categories just mentioned.
1. Game mechanics:
1.1 Attacking
In the concept document it was specified the implementation of a close quarters combat mechanic to battle particular types of enemies that could only be damaged this way and are impervious to magical attacks. The current version of the game only includes one type of ranged attack which is the instantiation of electrical runes that damage every type of devised enemy. The implementation of different types of attacks, two physical (punching and kicking) and three magical runes (electricity, water and savia/plant based), would have required individual scripted behaviours inheriting from an attack class that would be called on different keyboard inputs. Given some time constraints and further time needed to implement mechanics this was not possible. However, UI elements, animations and assets were created and available for future upgrades to match desired specifications.
The original concept suggested the possibility of implementing a base character that could collect upgrades or perks that improved persistently the strength of the magic and physical attacks, jumping height, among other characteristics. The implementation of such variety of perks requires development of a higher diversity of levels and obstacles, full scripted attack behaviours, multiple enemies, and inventory systems. The current product does not include upgrading systems due to time constraints and scripting efficiency but again, assets that include inventory systems and potential upgrades were created and are available now for future progress.
2. Animation
2.1 Player movement animations:
The current version of the game includes most different types of planned movement animations for jumping and running on desired input. However, smooth transitions between the character accelerating and decelerating these actions for a more realistic appearance were not possible to achieve with my current coding skills.
2.2 Player attack animations:
All rune instantiation animations in an eight-way style were created but not those related to physical attacks. At the current stage, only a forward magical attack animation was implemented for horizontal axis as I found challenging and time-consuming matching the mouse position input to the angle. In future development sessions this project will include such animation assets to make the project more visually appealing. An intended visual effect for rune selection, which is included in the settings menu as a background animation, is adding a short magic casting animation to give the player the sensation of selecting a different weapon. As no other types of attacks were incorporated in the current version of the project this asset was not applied to the player state machine.
3. Level length
Originally, three to four short levels were planned but only two short levels could be implemented in the given timeframe. The successfully designed levels offer different challenge experiences and different backgrounds to depict novel areas to the player. The planned stages in the concept possibly expanded this concept to alternative ecosystems including desert and coastal zones but unfortunately only a woodland ecosystem was viable in the current context.
4. Level blocking and art
The intended tile maps and art overall matched the style of devised concept: pixel-based frame drawings. As stated before, the planned landscapes included desert and coastal zones, so extra tiles depicting sand, puddles, arid vegetation and fauna are missing in the current version of the project. Also, background images of respective areas with cartoon effect to simulate the hand-drawn style were created for implemented zones and can be easily created for pending ones.
5. Enemy diversity
A particular amount of enemy types in the game was not defined in the concept, only three base types of enemies were created with slight resistance difference, movement patterns and AI, and attack structure. For an additional fun factor, and as part of the elemental susceptibility concept, it was intended to create at least seven different types of enemies with very strong unique plant characteristics. The idea was to create at least two enemies that had a single element weakness and one type that could not withstand close quarters attacks. In the current version, two enemies have unique characteristics (Pisum and Solanum) but are equally susceptible to spark attack while the last one (Rosa) is impervious to all types of attacks and only induces contact damage to the player.
6. Puzzles
The only type of mental challenge to the player at this stage is to beat platforming challenges in both levels. Not exact puzzles were mentioned in the concept document, but it was intended to create small cause-effect puzzles to unlock areas and eliminate obstacles or enemies. In future updates of the project planning, the puzzle factor is to be done and will likely include tripwire ray casting effects as core scripted behaviour.
Feedback Summary: During a peer game testing session, the most notable element to be improved was fixing a jumping issue related to ground tag detection. This issue occurred when player landed or touched untagged game objects as the scripted behaviour triggered via a switch that enabled a single jump mechanic. This fix was very easy to solve as all needed was to inspect for game objects in scene that would collide with the player and select the appropriate tag accordingly. Additional comments based on peer testing included the lack of restorative tokens for health and spark gauges that greatly limited the possibility to beat the level. To address this issue, additional tokens in the world space were duplicated and scattered throughout the scene which eased the level’s challenge. Finally in terms of level design, the platform velocity was an important complaint from testers, so using the animation curve component attached to these I simply modified the public variable from the inspector and adjusted the colliders and sprite scales, so platforms were more easily navigable and higher room for action was achievable to fight the enemies floating. All these adjustments helped me to deliver a more stable product that had a decent introductory level of challenge
Assets list
In the table below are included all assets used in this version of the project with a brief description and role in the game:
Animations folder | ||
Asset name | Description | Role in game |
PeaHurt | Hurt animation for Pisum | When Pisum is impacted triggers animation |
PeaMovL | Movement animation for Pisum | Simulates movement of Pisum body parts |
TomatoAttackL and R | Attack animation for Solanum | Plays when Solanum instantiates projectiles |
TomatoDying | Death animation for Solanum | When enemy health <= 0 this animation is reproduced once. |
TomatoHurt | Hurt animation for Solanum | When Solanum is impacted triggers animation |
TomatoMovL | Movement animation for Solanum | Simulates movement of Solanum body parts |
BatteryShine | Eye-catching effect for ammo token spark rune | Shiny effect on battery rune. |
GoalFlag | Animation for end of the level token | Shows “waving flag” that indicates the end of the level. |
heartBeating | Eye-catching effect for health token heart | Beating effect on heart token |
PlantTShine (Unused) | Eye-catching effect for ammo token savia rune | Shiny effect on plant in pot. |
WaterRuneShine (Unused) | Eye-catching effect for ammo token water rune | Shiny effect on water rune. |
SparkRuneBullet | Spark rune bullet expansion effect | Simulates energy movement in spark projectile |
SparkSettings | Spark rune bullet expansion effect for settings | Simulates energy movement in spark projectile for settings. |
TomatoSeedBreaking (Unused) | Solanum seed breaking effect | Simulates seed cracking on collision with RigidBody |
Soldier Hurt Left and Right | Simulates flinch effect from player in both left and right orientations. | When player is hurt by projectile or enemy contact it plays based on its orientation. |
SoldierBreathing and L | Idle state from player when stationary. | When player is stationary a breathing animation is played based on its orientation. |
SoldierDying Left and Right | Death animation for the player based on its orientation | When players health <= 0 a death state plays once. |
Soldier Jumping and Left | Jump animation for the player based on its orientation | On input, the jumping animation state will trigger |
SoldierMagicShoot_E | Spark rune shooting animation for player | On input, if ammo is available, player will shoot in the facing direction. |
SoldierMagicShoot_N,NE,NW,SE,SW (Unused) | Spark rune shooting animations for cardinal directions for player | On input and on specific mouse position, reproduces 7-way shooting animations. |
SoldierMoving Left and Right | Movement animations for player based on orientation. | On input, soldier running animations will reproduce. |
SummonRune (Used for Settings only) | Animation for rune type selection (spark, savia or water) | On input, possibly mouse wheel will reproduce to indicate rune weapon changes |
BatteryShineCtrl | State machine controllers for respective animation and transitions. | Will control desired animation transitions based on scripted behaviour and stated parameter conditions. |
PisumController | ||
PlantTShineCtrl | ||
SolanumController | ||
SoldierController | ||
WaterRuneShineCtrl | ||
GoalA | ||
heartImage1 | ||
SparkRuneBulletCtroller | ||
SummonB | ||
Assets folder | ||
Asset name | Description | Role in game |
CastleWall | Cartoon image of stones tile for tile palette. | Tiles that simulate castle walls for Level2 blocking. |
DryVegAnimTile | Scriptable tile of dry grass for tile palette. | Scriptable tiles that simulate dry grass movement for Levels blocking. |
FlowerAnimTile | Scriptable tile of flowers for tile palette. | Scriptable tiles that simulate moving flowers for levels blocking. |
Gap 1 and 2 | Black tiles for tile palette | Tiles that simulate dark areas or pits for levels blocking. |
GrassAnimTiles and UpgrTiles | Scriptable tile of live grass for tile palette | Scriptable tiles that simulate live grass moving. |
GrassSprites and B and GrassSpritesUpgrade A and B | Still vegetation sprite atlas for tile palette | Tiles that simulate live and dry vegetation for level blocking. |
Hollow log | Bark-like sprite used as obstacle gameObject | Sprite simulating bark from a fallen dead tree. |
Rocks | Rock-like sprites used as obstacle gameObject | Sprite simulating Rock blockade. |
SoilFill 1,2,3,4,5 and 6 | Still ground and ground vegetation tiles for tile palette. | Tiles used in ground and filling tilemap for character landing and moving through. |
UndergroundDecor | Background tiles for underground areas for tile palette. | Tiles used for level background in underground areas. |
WaitingSign | Sign-like sprite used for showing text gameObject. | Sprite simulating a sign that displays a particular message to player. |
TomatoSeedBreaking1 - 8 | Sprite atlas for seed cracking animation. | Sprites used to create seed cracking animation for enemy projectile. |
PeaSeedBullet | Sprite for Pisum enemy projectile. | Sprite used as projectile for Pisum enemy. |
TomatoSeedBullet | Sprite for Solanum enemy projectile | Sprite used as projectile for Solanum enemy. |
Pea 1- 5 | Sprite atlas for Pisum enemy animation. | Sprites used to create Pisum movement animation. |
PeaHurt 1-3 | Sprite atlas for Pisum enemy animation. | Sprites used to create Pisum flinch animation. |
RoseA | Sprite for Rosa enemy game Object. | Sprite used for Rosa enemy/ obstacle. |
Tomato1_A-D | Sprite atlas for Solanum enemy. | Sprites used to create Solanum movement animation. |
Tomato1_AttackA-D | Sprite atlas for Solanum enemy. | Sprites used to create Solanum attacking animation. |
tomatoDying A-E | Sprite atlas for Solanum enemy. | Sprites used to create Solanum dying animation. |
heartImage1-5 | Sprite atlas for health token. | Sprites used to create the heart beating animation in health token. |
Tokens_Items1-9 | Sprite atlas for rune tokens. | Sprites used to create all rune types shining animations. |
GoalA-I | Sprite atlas for goal token. | Sprites used to create the flag waving animation. |
GrndAndMechPlatform | Sprites for platforms in levels. | Sprites used to create cosmetics for level platforms in game. |
Level1Profile | Global Postprocessing profile for level 1. | Uses a faint bloom effect to simulate a sunny environment. |
DarkArea Profile | Local Postprocessing profile for level 1. | Uses colour grading effect to reduce the gamma parameter and simulate darkness. |
AttackMagicA,B,C,D,E,F (N,NW,NE,E,SE,SW) and Transitions | Sprite atlas for player 7-way shooting. | Sprites used to simulate all possible shooting directions for player. |
SoldierDied 1-4 and Left 1-4 | Sprite atlas for player death animations. | Sprites used for player death animation depending on orientation. |
SoldierHurtA-C Left and Right | Sprite atlas for player flinch animations. | Sprites used for player hurt. |
SoldierIddle Left and Right | Sprites for player breathing animation. | Sprites used for player idle animation depending on orientation. |
JumpingA-C Left and Right | Sprites for player jumping animation. | Sprites used for player jumping depending on orientation. |
SoldierMoving Left and B-D | Sprite atlas for player movement. | Sprites used for player’s Left and right movement. |
Summon A-I | Sprite atlas for player attack selection animation. | Sprites used to represent rune/weapon change selection. |
Free 2D Pixel Trees Kit asset bundle (Tree_01,04 and 07) | Free pixel art assets for level decoration (See references below) | 3 different tree assets used to decorate Level 1 scene. |
Prefabs Folder | ||
Asset name | Description | |
BatteryT | Prefab for spark token. | |
DeathZone | Prefab for areas where player can die from fall. | |
GrandPisumBullet | Prefab for Level 1 boss. | |
GroundPalette | Prefab for Tile palette settings. | |
HealthToken | Prefab for hearth token. | |
Log | Prefab for fallen tree obstacle. | |
PeaSeedBullet | Prefab for Pisum projectile. | |
PisumEnemy | Prefab for Pisum enemy. | |
PlantT (Unused) | Prefab for savia token. | |
PlatformGrass | Prefab for platform using grass sprite. | |
PlatformMech | Prefab for platform using mech sprite. | |
Player | Prefab for Soldier player Game object. | |
Rocks | Prefab for rock obstacles. | |
SolanumEnemy | Prefab for Solanum enemy. | |
SparkBullet | Prefab for spark rune bullet. | |
SparkRuneParticle | Prefab for spark rune bullet particle system. | |
tomatoSeedBullet | Prefab for Solanum seed projectile | |
WaterRune (Unused) | Prefab for water rune token. | |
Background art | ||
Asset name | Description | |
BackgroundLevel1 | Painting filter effect of a real landscape photograph from Hobart city. | |
Level2Bkgrnd | Image from a castle taken online and a painting filter effect for real sky photograph used for Level 2 background design. | |
Skylevel2Bkgrnd | ||
TitleScreenBkgrnd | Painting filter effect of a real rural landscape and hand-drawn art of game cover and title screen. | |
TitleScreenImg | ||
GoalBkgrndImg | Painting filter effect of a real night landscape and hand-drawn art of game end scene. | |
GoalSceneImg | ||
Sound effects and music | ||
Asset name | Description | Role in game |
Aguas Claras | Music for level (See references below) | Background music for Level 1 |
BatteryTSound | Token sound Clip | Spark token collection sound |
cuatroVientos | Music for Title Screen (See references below) | Background music for Title screen and settings. |
DeathByAttack (Unused) | Player’s death sound Clip | Player death by damage sound effect |
DeathByFall | Player’s death sound Clip | Player death sound effect when falling in a pit. |
EnemyHurtSound | Enemy damage sound Clip |
|
HealthSoundFX | Token sound Clip | Heart token collection sound effect. |
HurtSound_B | Player’s hurt sound Clip | Player damage sound effect |
Ilalo | Music for Level (See references below) | Background music for Level 2. |
PeaHurt | Enemy damage sound Clip | Pisum damage sound effect. |
RuneShot | Rune instantiation sound Clip | Spark rune shooting sound effect. |
SoldierGruntJump | Player’s Jumping Sound Clip | Player jumping sound effect. |
C# Scripts | ||
Asset name | Description | Role in Game |
AttachPlatformToPlayer | Behaviour set to platform prefab. | Used in platforms to affect hierarchy order and make player child of platform. |
BasicPlatformLeftRight | Behaviour set to platform prefab. | Used to harness the animation curve component to modulate horizontal movement. |
BasicPlatformUpDown | Behaviour set to platform prefab. | Used to harness the animation curve component to modulate vertical movement. |
CreateBulletCrashParticle | Behaviour set to SparkBullet prefab. | This will instantiate onDestroy a prefab particle system for bullet collision cosmetics |
DestroyEnemyProjectilesOnCollision | Behaviour set to tomato and pea seed prefabs. | This script will direct instantiated enemy projectiles to destroy themselves on collision. |
fadeController | Behaviour set to canvas gameObject. | Allows a pivotal control for fade out effect on scene load. |
FadeInOutScript | Behaviour set to canvas gameObject. | This allows to control the alpha value of CanvasGroup class given desired time intervals. |
GameOverScreen | Behaviour set to canvas gameObject. | Sets active an otherwise disabled canvas image that contains buttons and restart options when player dies. |
GoalSceneSwitch | Behaviour set to flag token gameObject. | Uses the SceneManager to load the GoalScene. |
HealthTokenCollection | Behaviour set to Health Token prefab. | This behaviour detects collisions with player, will access the health slider and increase by 1 its current value and reproduces a sound effect. |
PlayerDeathZone | Behaviour set to DeathZone prefab. | Will destroy player gameobject on exit and sets active the gameOver Screen. |
RuneInstantiator | Behaviour set to player’s grandchild: bulletInstantiator | Controls projectile instantiation, shooting sound effect, ammo, and shooting intervals. |
RuneShooterScript | Behaviour set to player’s child: RuneShooter. | This behaviour controls the rotation of the instantiator object so it rotates around the player. |
RuneTokenCollection | Behaviour set to Battery T prefab. | This behaviour detects collisions with player, will access the spark slider and increases by 4 its current value and reproduces a sound effect. |
SceneSwitcher | Behaviour set to an OnClick or collision event. | When assigned to UI buttons, controls the next scene to be loaded. |
SoldierDamageScript | Behaviour set to player gameObject. | Used to trigger hurt animation, sound effect, and reduce health by 1 when collides with enemy or its projectiles. |
SoldierHealth | Behaviour set to player gameObject. | This script holds information of the health slider on player and sets its value to 10. |
SoldierMovement | Behaviour set to player gameObject. | Behaviour that uses Input manager to reproduce animation changes based on floating point parameter changes. Includes jumping mechanic. |
VolumePrefs | Behaviour set to an OnClick event in the settings scene. | This script is set to a preferences controller that manages the user input and translates it to the AudioListener class. |
EnemyDamageScript | Behaviour set to enemy prefabs. | This script controls the hurt animation display, sound effect, and accesses the enemy’s health reducing it by 1 when collision with sparkBullet occurs. |
EnemyFacing AndAttacking | Behaviour set to Solanum enemy prefab. | Once player is within detection distance, the enemy will change its local scale towards it and start seed instantiation. |
EnemyHealth | Behaviour set to enemy prefabs. | This script holds information of the health slider on enemy and sets its value to 5. |
EnemyPatrollingLeftRight | Behaviour set to Solanum enemy prefab. | Basic enemy AI patrolling for Solanum. Uses child object to detect collision in front of object and change its scale and velocity when this occurs. |
EnemySpawner | Behaviour set to enemy prefabs. | This script is used for spawning region attached to camera that will instantiate indefinite enemies in a defined interval. |
GrandPisumDetectionAttack | Behaviour set to Pisum enemy prefab. | This is a modified version of EnemyFacingAndAttcking Script for Grand Pisum boss in Level 1. |
References:
The following are references for external resources that were used as assets in this project:
Pngegg (n.d). Blue and white burst illustration. https://www.pngegg.com/en/png-zhynt/download
MoreBBlakeyyy. (2022, October 20). 2D Jump in Unity in Under 1 Minute. [Video]. YouTube. https://www.youtube.com/watch?v=QXB4EAyYD8w
LeftyRighty. (2016, January 17). How to make and object move up and down on a loop. Unity Community Discussion. https://forum.unity.com/threads/how-to-make-an-object-move-up-and-down-on-a-loop.380159/
GameDev With Mark. (2022, March 5). How to make the enemy face & follow the player in Unity. [Video]. YouTube. https://www.youtube.com/watch?v=eZBm-VNAYDA
Ardyana Types (2022) Nortune-Black. DaFont. https://www.dafont.com/nortune.font#null
Envato Elements. (n.d). Sci fi engine short start. Mixkit. https://mixkit.co/free-sound-effects/electricity/
GameAssetWorld. (2023, January 13). Unity How to Fade in/out while changing scene (2023 Tutorial).[Video]. Youtube. https://www.youtube.com/watch?v=Ox0JCbVIMCQ
Envato Elements. (n.d). Cartoon bubbles popping. Mixkit. https://mixkit.co/free-sound-effects/bubbles/
Envato Elements. (n.d). Aggressive beast roar. Mixkit. https://mixkit.co/free-sound-effects/monster/
Envato Elements. (n.d). Creature cry or hurt. Mixkit. https://mixkit.co/free-sound-effects/monster/
El Búho. (2018, December 14). Aguas Claras. [Video]. YouTube. https://www.youtube.com/watch?v=xbJwhGpGdwk&list=RD2YSWikOL1nI&index=2
Kingman Mateo. (2018, May 9). Chancha Via Circuito – Ilaló (Ft. Mateo Kingman). [Video]. YouTube. https://www.youtube.com/watch?v=ALO40b-qldQ
Treubig Danit. (2017, January 1). Cuatro Vientos. [Video]. YouTube. https://www.youtube.com/watch?v=7UgVqlakdAw
Stevika. (2023, May 8). Free 2D Pixel Trees Kit. Unity Asset Store. https://assetstore.unity.com/?q=free%202d%20pixel%20trees%20&orderBy=1
SpeedTutor (2021, June 1). Unity Audio: How To Make a UI Volume Slider (Saving &Loading).[Video]. YouTube. https://www.youtube.com/watch?v=k2vOeTK0z2g
Newman Martin (n.d). The Castle Walls Bath Towel. Pixels. https://pixels.com/featured/the-castle-walls-martin-newman.html?product=bath-towel
Files
Get Codename: Rune Caster
Codename: Rune Caster
Status | In development |
Author | Alejandro Correa |
Genre | Platformer |
More posts
- DevLog5: UI ElementsOct 08, 2023
- Game Testing formOct 04, 2023
- DevLog4: Presentation and GraphicsSep 30, 2023
- DevLog3: Basic enemy AI and Enemy interactionSep 22, 2023
- DevLog2: Level blocking and designSep 14, 2023
- DevLog1: Main Player Movement and jump mechanicsSep 06, 2023
- KIT109 Assignment2: Codename: Rune Caster ConceptAug 27, 2023
Leave a comment
Log in with itch.io to leave a comment.