From d0a0285f75fb5df8d3cdf8e114d2a465112e718f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 28 Dec 2024 13:34:06 -0800 Subject: [PATCH] match sub_800F7D0 thanks to @DizzyEggg --- asm/code_800ED38.s | 125 ------------------------------ include/dungeon_pokemon_sprites.h | 4 +- src/code_800F958.c | 47 +++++++++++ 3 files changed, 49 insertions(+), 127 deletions(-) diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index 4889218e0..49ee41eda 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -1153,129 +1153,4 @@ _0800F7C6: _0800F7CC: .4byte gDungeonPokemonSprites thumb_func_end sub_800F794 - thumb_func_start sub_800F7D0 -sub_800F7D0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - ldr r0, _0800F800 - ldr r0, [r0] - cmp r0, 0 - beq _0800F8C0 - ldr r1, [r0] - adds r0, r1, 0 - cmp r1, 0 - bge _0800F7EA - adds r0, r1, 0x3 -_0800F7EA: - asrs r0, 2 - lsls r0, 2 - subs r0, r1, r0 - cmp r0, 0x1 - beq _0800F82A - cmp r0, 0x1 - bgt _0800F804 - cmp r0, 0 - beq _0800F80E - b _0800F888 - .align 2, 0 -_0800F800: .4byte gDungeonPokemonSprites -_0800F804: - cmp r0, 0x2 - beq _0800F846 - cmp r0, 0x3 - beq _0800F868 - b _0800F888 -_0800F80E: - movs r0, 0x1 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x2 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x3 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x4 - b _0800F860 -_0800F82A: - movs r0, 0x5 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x6 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x7 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x8 - b _0800F860 -_0800F846: - movs r0, 0x9 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xA - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xB - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xC -_0800F860: - movs r1, 0x1 - bl LoadStatusGraphics - b _0800F888 -_0800F868: - movs r0, 0xD - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xE - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xF - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x10 - movs r1, 0x1 - bl LoadStatusGraphics -_0800F888: - movs r5, 0 - movs r6, 0x4 -_0800F88C: - ldr r7, _0800F8CC - ldr r4, [r7] - lsls r0, r5, 6 - adds r0, r4, r0 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _0800F8B0 - adds r4, r6 - adds r0, r4, 0 - movs r1, 0 - mov r2, r8 - bl sub_800F2EC - adds r0, r4, 0 - movs r1, 0x1 - mov r2, r8 - bl sub_800F2EC -_0800F8B0: - adds r6, 0x40 - adds r5, 0x1 - cmp r5, 0x15 - ble _0800F88C - ldr r1, [r7] - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0800F8C0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F8CC: .4byte gDungeonPokemonSprites - thumb_func_end sub_800F7D0 - .align 2,0 diff --git a/include/dungeon_pokemon_sprites.h b/include/dungeon_pokemon_sprites.h index b013ba9ab..8e345aa64 100644 --- a/include/dungeon_pokemon_sprites.h +++ b/include/dungeon_pokemon_sprites.h @@ -33,10 +33,10 @@ typedef struct DungeonPokemonSprite // size: 0x584 typedef struct DungeonPokemonSprites { - /* 0x0 */ u32 frame; + /* 0x0 */ s32 frame; /* 0x4 */ DungeonPokemonSprite sprites[22]; } DungeonPokemonSprites; extern DungeonPokemonSprites *gDungeonPokemonSprites; -#endif // GUARD_DUNGEON_POKEMON_SPRITES_H \ No newline at end of file +#endif // GUARD_DUNGEON_POKEMON_SPRITES_H diff --git a/src/code_800F958.c b/src/code_800F958.c index 212267bdf..da605ba7b 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -8,6 +8,53 @@ extern DungeonPokemonSprite* GetDungeonPokemonSprite(s32 id); extern DungeonPos gUnknown_80D3564; +void LoadStatusGraphics(s32, s32); +void sub_800F2EC(DungeonPokemonSprite *, s32, s16 *); + +void sub_800F7D0(s16 *r0) +{ + s32 index; + + if (gDungeonPokemonSprites == NULL) + return; + + switch(gDungeonPokemonSprites->frame % 4) { + case 0: + LoadStatusGraphics(1, 1); + LoadStatusGraphics(2, 1); + LoadStatusGraphics(3, 1); + LoadStatusGraphics(4, 1); + break; + case 1: + LoadStatusGraphics(5, 1); + LoadStatusGraphics(6, 1); + LoadStatusGraphics(7, 1); + LoadStatusGraphics(8, 1); + break; + case 2: + LoadStatusGraphics(9, 1); + LoadStatusGraphics(0xA, 1); + LoadStatusGraphics(0xB, 1); + LoadStatusGraphics(0xC, 1); + break; + case 3: + LoadStatusGraphics(0xD, 1); + LoadStatusGraphics(0xE, 1); + LoadStatusGraphics(0xF, 1); + LoadStatusGraphics(0x10, 1); + break; + } + + for (index = 0; index < 22; index++) { + if (gDungeonPokemonSprites->sprites[index].exists) { + DungeonPokemonSprite *spritePtr = &gDungeonPokemonSprites->sprites[index]; + sub_800F2EC(spritePtr, 0, r0); + sub_800F2EC(spritePtr, 1, r0); + } + } + gDungeonPokemonSprites->frame++; +} + void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32 r3) { DungeonPokemonSprite *dSprite; DungeonPokemonSprite *newSprite;