Darks 9ca4fd1d37 | ||
---|---|---|
assets-cg | ||
assets-fx | ||
assets-raw | ||
include | ||
src | ||
.gitignore | ||
Makefile | ||
Readme.md | ||
Touhou.g3a | ||
assets.py | ||
project.cfg |
Readme.md
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:
- Normal
- 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 frameuint32_t frame
: number of frames elapsed since the beginning of the gameplayer_t *player
: general information about playerdifficulty_t difficulty
: the chosen difficulty of the gamebullet_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.