Skills - UQdeco2800/2022-studio-2 GitHub Wiki
- Skill Tree UI
- Testing Plan
- PlayerSkillComponent
- Dash
- Teleport
- Block
- Dodge
- Bleed
- Root
- Charge
- Push
- Projectiles
As a team we have agreed that skills are a vital part of customisable gameplay inherent to the rogue-lite genre. This is due to the repeatable deaths as a part of the genre requiring a coherent sense of progression each time the player restarts. One of the design considerations that fits with this is an implementation of in-game upgrades to elements of the run to change the player experience, however one of the less considered aspects of this gameplay framework is in allowing the player to experiment with the way they enjoy playing the game with a variety of differing game experiences each run. This process of seeing something interesting, trying it out, and seeing how it might interact with other player decisions throughout any given 'run' of the game allows for a sense of personal progression, as the player seeks what they find the most enjoyable/effective out of a large set of possible player decisions. These two design decisions underpin our approach to skills within the game, as we aim to allow for a variety of player experiences, customisable gameplay and a sense of player progression.
One aspect of player interaction with the game environment which skills can serve to fulfil is the movement of the player in unique ways around the map. This design aims to allow players to feel like they are nimbly dodging enemy actions or repositioning themselves for a more effective plan of attack. It's especially worth considering that our design philosophy in regards to movement skills is that they should also always be supplemented with attack/defence skills to engage the player with the feeling of variety (where there is a perceivably enormous number of permutations of any non-trivial set of unique attacks and unique movement pattern pairing). Considering then that we want the player to be able to use multiple skills in combination, we had to design this scalability into the game code from the beginning to accommodate for future design iterations. This is outlined below.
Considering the possibility of having multiple movement-altering skills active at the same time, we decided to have a function that takes the player's base movement vector and sequentially adds vector alterations to this movement per active skill which then directs the player's movement. As such the base movement speed of the player can still be altered, and the skills movement alterations reduce to a simple set of operations on this base movement speed. This gives the code modularity and decouples the skills directly from any alterations on player movement (such as effects of modifiers or potion effects) while still allowing for these effects to take place. This gives a black box effect as below, which further aids in the testing of player movement degeneration as the input and output can be isolated as a set of vector additions combined from each skill activation:
When designing defense skills, the design idea of having these defense skills give you extra bonuses when you use them correctly was to encourage players to time their defense skills with enemy attacks. This was implemented through the use of a damage trigger which should be checked for before player health is taken away. There is an important distinction between isInvulnerable() which checks for an invulnerable skill state, and skillDamageTrigger(), which also triggers any abilities that are a result of mitigating damage from a skill.
One of the key player movement options is an implementation of a dash function.
This design decision was inspired by other games which have a similar function (either a roll or a dash which fit functionally the same purpose), within the rogue-lite genre, with some popular examples including hades or enter the dungeon.
This design was underpinned by an aim of the skills team to allow the player variety in the way they play the game and interact with the environment - with one of the major modes of interaction being controlling the player's movement within the map environment and around enemies.
As a further consideration of this, the skills team is considering having the dash function always available to the player and on a short cooldown. This would satisfy the team goals and provide players with a more fulfilling game experience by offering them variety in the way they move around the environment and interact with enemies, even if the other chosen skill does not provide in-built movement.
When designing the dash a key consideration of design was to allow players to move during the dash to avoid obstacles/correct their movement direction. This is as opposed to locking the player in the direction of the dash.
This will hopefully add further utility to this skill as a way for players to dodge moving enemies or attacks, add to the player's arsenal and make them feel more in control.
The implementation of this involved vector addition with the regular walk speed and the dash speed of the player, so that during the dash using the movement keys (WASD) also changes the direction of the player.
In order to better show the effect of the skills implemented by our group, we would like to further improve the visual display of the Skills feature through pixel design. In Sprint 1, we will design different icons for different skills and animate the teleport skill to fit the theme better. To increase their usability, we will also conduct user testing in the future. And in sprint 2, we have added some other skills, such as projectile and ultimate skill, and refined the animation of the previous skills like the animation of dodging, blocking and dashing.