phantasia

Phantasia - 2D SDL3 RPG prototype.
git clone git://git.beep.wimdupont.com/phantasia.git
Log | Files | Refs | README | LICENSE

commit 0b33409cb0defb788ceb0a21f5ba77457ce0c01b
parent 7da4c330667c2712cba7cc96f2b6d5dc92a2a219
Author: beep <beep@wimdupont.com>
Date:   Sat,  4 Apr 2026 17:15:33 +0000

Fix player down-facing sprite frame

Diffstat:
Msrc/game/main.c | 30+++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/game/main.c b/src/game/main.c @@ -195,22 +195,26 @@ ph_draw_sprite(SDL_Renderer *renderer, SDL_Texture *texture, SDL_RenderTextureRotated(renderer, texture, &src, &dst, 0.0, NULL, flip); } -static int -ph_player_sprite_row(const PhEntity *entity) +static void +ph_player_sprite_frame(const PhEntityDef *def, const PhEntity *entity, + int *sprite_tile_x, int *sprite_tile_y, SDL_FlipMode *flip) { if (entity->facing_y > 0) { - return 2; + *sprite_tile_x = def->sprite_tile_x + 4; + *sprite_tile_y = 0; + *flip = SDL_FLIP_NONE; + return; } if (entity->facing_y < 0) { - return 0; + *sprite_tile_x = def->sprite_tile_x; + *sprite_tile_y = 0; + *flip = SDL_FLIP_NONE; + return; } - return 1; -} -static SDL_FlipMode -ph_player_sprite_flip(const PhEntity *entity) -{ - return entity->facing_x > 0 ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE; + *sprite_tile_x = def->sprite_tile_x; + *sprite_tile_y = 1; + *flip = entity->facing_x > 0 ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE; } static void @@ -291,6 +295,7 @@ ph_draw_entities(SDL_Renderer *renderer, const PhAssets *assets, const PhWorld * if (def->sprite_tile_x >= 0 && def->sprite_tile_y >= 0 && (def->kind == PH_ENTITY_PLAYER || def->kind == PH_ENTITY_MONSTER)) { SDL_Texture *sheet = def->kind == PH_ENTITY_PLAYER ? assets->hero : assets->critters; + int sprite_tile_x = def->sprite_tile_x; int sprite_tile_y = def->sprite_tile_y; SDL_FlipMode flip = SDL_FLIP_NONE; @@ -300,10 +305,9 @@ ph_draw_entities(SDL_Renderer *renderer, const PhAssets *assets, const PhWorld * rect.h = 16.0f; if (def->kind == PH_ENTITY_PLAYER) { - sprite_tile_y = ph_player_sprite_row(entity); - flip = ph_player_sprite_flip(entity); + ph_player_sprite_frame(def, entity, &sprite_tile_x, &sprite_tile_y, &flip); } - ph_draw_sprite(renderer, sheet, def->sprite_tile_x, sprite_tile_y, rect, flip); + ph_draw_sprite(renderer, sheet, sprite_tile_x, sprite_tile_y, rect, flip); } else { rect.x = entity->pos.x - world->camera.pos.x - 7.0f; rect.y = entity->pos.y - world->camera.pos.y - 12.0f;