Add height zones, jetpack boost particles, and TigerStyle guidelines

Level generator: add vertical variety with tall levels (46 tiles).
Segment generators accept ground_row parameter, SEG_CLIMB connects
height zones, transitions inherit predecessor ground row to prevent
walkability gaps. Climb segments respect traversal direction.

Jetpack boost: add blue flame particles during dash (burst + trail)
and continuous idle glow from player back while boost timer is active.

Camera: add 30px vertical look-ahead when player velocity exceeds
50 px/s.

Fix flame vent pedestal in gen_pit to use ground-relative position
instead of map bottom (broken in tall HIGH-zone levels).

Add TigerStyle coding guidelines to AGENTS.md adapted for C11.
Add tall_test.lvl (40x46) for height zone validation.
This commit is contained in:
Thomas
2026-03-01 14:57:53 +00:00
parent 9d828c47b1
commit ad2d68a8b4
8 changed files with 813 additions and 192 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -288,6 +288,11 @@ void player_update(Entity *self, float dt, const Tilemap *map) {
);
particle_emit_jetpack_trail(exhaust_pos, pd->dash_dir);
/* Blue flame trail when boost is active */
if (pd->jetpack_boost_timer > 0) {
particle_emit_jetpack_boost_trail(exhaust_pos, pd->dash_dir);
}
/* Skip normal movement during dash */
physics_update(body, dt, map);
animation_update(&self->anim, dt);
@@ -330,10 +335,28 @@ void player_update(Entity *self, float dt, const Tilemap *map) {
);
particle_emit_jetpack_burst(exhaust_pos, pd->dash_dir);
/* Blue flame accents when boost powerup is active */
if (pd->jetpack_boost_timer > 0) {
particle_emit_jetpack_boost_burst(exhaust_pos, pd->dash_dir);
}
audio_play_sound(s_sfx_dash, 96);
return;
}
/* ── Jetpack boost idle glow ─────────────── */
/* Ambient blue flame from the player's back while boost is active
* and not dashing. Emits from the rear center of the sprite. */
if (pd->jetpack_boost_timer > 0) {
bool facing_left = (self->flags & ENTITY_FACING_LEFT) != 0;
Vec2 back_pos = vec2(
facing_left ? body->pos.x + body->size.x - 1.0f
: body->pos.x + 1.0f,
body->pos.y + body->size.y * 0.45f
);
particle_emit_jetpack_boost_idle(back_pos, facing_left);
}
/* ── Horizontal movement ─────────────────── */
float target_vx = 0.0f;
if (hold_left) target_vx -= PLAYER_SPEED;