# 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.