diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..ae2f73b --- /dev/null +++ b/Readme.md @@ -0,0 +1,55 @@ +# Gameplay + +## Witches + +Before the game starts, the player can choose two witches between the 8 available. The first one is used on normal mode, the second on focused mode. Each witch has unique properties and sometimes a special effect. + +## Modes + +There are two gameplay modes: +1. Normal +2. Focused + +The "focus" mode is triggered by pressing `KEY_OPTN`. The effect disapears when the key is released. Focus mode with speed divided by two, some bullets are ineffective, and usually a fire power focused on a single stream. They may have a special effect + +Speeds are in px/s (play area is 270×224). + +| Id | Name | Spe | Pow |Special | +|----|-----------------|-----|-----|-----------------------------------------| +| 0 | Reimu Hakurei | 194 | 130 | +10% power when focused | +| 1 | Marisa Kirisame | 208 | 130 | Attract bonus when on top of the screen | +| 2 | Sariel | 241 | | Do not attract bullets when not focused | +| 3 | Koakuma | | | +15% chance of getting a powerup | +| 4 | Iku Nagae | | | Start with 4 bombs instead of 3 | +| 5 | Sumireko Usami | | | Wider fire angle when not focused | +| 6 | Hina Kagiyama | | | +10% power when not focused | +| 7 | Kurumi | | | | + +## Power & fire + +Power can go from 1 to + +A `bullet_t` is always launched by the player. Else it's an `enemy_t` (even if it's an enemy bullet) + +## Powerups + +There are 2 kinds of powerups: small ones and big ones. Small ones increase power by 1, big ones by 5. + + +# Code architecture + +## Global vars + +- `uint32_t us_elapsed`: μs elapsed during the last frame +- `uint32_t frame`: number of frames elapsed since the beginning of the game +- `player_t *player`: general information about player +- `difficulty_t difficulty`: the chosen difficulty of the game +- `bullet_t *bullets`: the bullets sent by player + +## Objects + +`object_t` is an object linked to physic or an updater. This means that an enemy as well as a bullet can be objects. + +### Object updater + +An object updater is a function applied to an object. Its protoype must follow this: `void f(object_t*)`. Due to the complexity of the game, it may use `frame`, `us_elapsed`; but it could also use `player`, `difficulty` or other global variables.