refactor: optimize snake sprite rendering using preloaded directional assets and implement HUD caching

This commit is contained in:
phillip committed 2026-10-01 22:00:55 +02:00
1 parent db9013c9c5
commit 60740a53c2
5 files changed
+268 -152

No files matched your search

+20 -8
View File
@@ -47,7 +47,7 @@ AudioContext audioContext;
RenderAssets renderAssets;
const void * get_sprite_pointer(uint16 spriteIndex) {
const void * get_sprite_pointer(uint16_t spriteIndex) {
return &tilemapTiles[spriteIndex*16];
}
@@ -69,16 +69,27 @@ void setup() {
renderAssets.gfx_segment = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_segment_small = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_head = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_head_h = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_head_v = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_apple = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_apple_blink = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_tail_h[0] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_tail_h[1] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_tail_v[0] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_tail_v[1] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_apple_rotten = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_apple_cursed = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
renderAssets.gfx_tail = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
dmaCopy(get_sprite_pointer(1), renderAssets.gfx_segment, 64);
dmaCopy(get_sprite_pointer(2), renderAssets.gfx_segment_small, 64);
dmaCopy(get_sprite_pointer(3), renderAssets.gfx_head, 64);
dmaCopy(get_sprite_pointer(3), renderAssets.gfx_head_h, 64);
dmaCopy(get_sprite_pointer(4), renderAssets.gfx_head_v, 64);
dmaCopy(get_sprite_pointer(5), renderAssets.gfx_apple, 64);
dmaCopy(get_sprite_pointer(6), renderAssets.gfx_apple_blink, 64);
dmaCopy(get_sprite_pointer(7), renderAssets.gfx_tail_h[0], 64);
dmaCopy(get_sprite_pointer(8), renderAssets.gfx_tail_h[1], 64);
dmaCopy(get_sprite_pointer(9), renderAssets.gfx_tail_v[0], 64);
dmaCopy(get_sprite_pointer(10), renderAssets.gfx_tail_v[1], 64);
dmaCopy(get_sprite_pointer(11), renderAssets.gfx_apple_rotten, 64);
consoleSelect(&topScreen);
@@ -118,7 +129,7 @@ void handle_vblank() {
frame++;
if (gameState.scene == Scene::Playing) {
consoleSelect(&topScreen);
draw_stats(gameState, internals, audio_is_music_enabled(audioContext), frame);
draw_stats(gameState, renderAssets, internals, audio_is_music_enabled(audioContext), frame);
}
oamUpdate(&oamSub);
//flashy_colors();
@@ -155,7 +166,6 @@ void do_tick() {
audio_stop_music();
audio_play_fail(audioContext);
}
blink_apples(gameState, renderAssets.gfx_apple);
//consoleSelect(&bottomScreen);
draw_game(gameState, renderAssets);
}
@@ -179,9 +189,10 @@ void init_game() {
gameState.cursed_apples.clear();
consoleSelect(&topScreen);
consoleClear();
invalidate_hud(renderAssets);
consoleSelect(&bottomScreen);
consoleClear();
oamClear(&oamSub,0,0);
oamClear(&oamSub,0,128);
audio_start_music(audioContext);
}
else
@@ -198,9 +209,10 @@ void init_game() {
gameState.cursed_apples.clear();
consoleSelect(&topScreen);
consoleClear();
invalidate_hud(renderAssets);
consoleSelect(&bottomScreen);
consoleClear();
oamClear(&oamSub,0,0);
oamClear(&oamSub,0,128);
audio_start_music(audioContext);
}