56 lines
2.3 KiB
Markdown
56 lines
2.3 KiB
Markdown
|
# 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.
|