decomp more dungeon pokemon sprite funcs

This commit is contained in:
Seth Barberee
2024-08-16 19:11:31 -07:00
parent f2ae584416
commit 941efe4d27
2 changed files with 52 additions and 75 deletions

View File

@@ -1417,78 +1417,4 @@ _0800F8C0:
_0800F8CC: .4byte gDungeonPokemonSprites
thumb_func_end sub_800F7D0
thumb_func_start AddPokemonDungeonSprite
@ void AddPokemonDungeonSprite(int id, short species, Position *pos, ?)
AddPokemonDungeonSprite:
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r5, r0, 0
adds r7, r2, 0
mov r8, r3
lsls r1, 16
asrs r6, r1, 16
ldr r0, _0800F92C
ldr r0, [r0]
cmp r0, 0
beq _0800F920
adds r0, r5, 0
bl GetDungeonPokemonSprite
adds r4, r0, 0
cmp r4, 0
bne _0800F920
bl NewDungeonPokemonSprite
adds r1, r0, 0
cmp r1, 0
beq _0800F920
movs r0, 0x1
strb r0, [r1]
str r5, [r1, 0x4]
strh r6, [r1, 0x8]
str r4, [r1, 0xC]
ldr r0, [r7]
str r0, [r1, 0x14]
mov r0, r8
strb r0, [r1, 0x11]
ldr r0, _0800F930
ldr r0, [r0]
str r0, [r1, 0x1C]
str r0, [r1, 0x18]
str r4, [r1, 0x28]
str r4, [r1, 0x2C]
str r4, [r1, 0x30]
str r4, [r1, 0x34]
_0800F920:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800F92C: .4byte gDungeonPokemonSprites
_0800F930: .4byte gUnknown_80D3564
thumb_func_end AddPokemonDungeonSprite
thumb_func_start DeletePokemonDungeonSprite
@ void DeletePokemonDungeonSprite(int id)
DeletePokemonDungeonSprite:
push {lr}
adds r1, r0, 0
ldr r0, _0800F954
ldr r0, [r0]
cmp r0, 0
beq _0800F950
adds r0, r1, 0
bl GetDungeonPokemonSprite
cmp r0, 0
beq _0800F950
movs r1, 0x40
bl MemoryClear8
_0800F950:
pop {r0}
bx r0
.align 2, 0
_0800F954: .4byte gDungeonPokemonSprites
thumb_func_end DeletePokemonDungeonSprite
.align 2,0

View File

@@ -1,10 +1,61 @@
#include "global.h"
#include "code_800F958.h"
#include "memory.h"
extern DungeonPokemonSprites *gDungeonPokemonSprites;
extern DungeonPokemonSprite *NewDungeonPokemonSprite(void);
extern DungeonPokemonSprite* GetDungeonPokemonSprite(s32 id);
extern Position gUnknown_80D3564;
void AddPokemonDungeonSprite(s32 id, s16 species, Position *pos, u32 r3) {
DungeonPokemonSprite *dSprite;
DungeonPokemonSprite *newSprite;
Position newPos;
s32 species_s32;
species_s32 = species;
if(gDungeonPokemonSprites == NULL)
return;
dSprite = GetDungeonPokemonSprite(id);
if(dSprite != NULL)
return;
newSprite = NewDungeonPokemonSprite();
if(newSprite == NULL)
return;
newSprite->exists = 1;
newSprite->id = id;
newSprite->species = species_s32;
newSprite->status = 0;
newSprite->pos = *pos;
newSprite->unk11 = r3;
newPos = gUnknown_80D3564;
newSprite->statusOffsets[1] = newPos;
newSprite->statusOffsets[0] = newPos;
newSprite->statusSprites[0].status = 0;
newSprite->statusSprites[0].frame = 0;
newSprite->statusSprites[1].status = 0;
newSprite->statusSprites[1].frame = 0;
}
void DeletePokemonDungeonSprite(s32 id)
{
DungeonPokemonSprite *dSprite;
if(gDungeonPokemonSprites == NULL)
return;
dSprite = GetDungeonPokemonSprite(id);
if(dSprite == NULL)
return;
MemoryClear8((u8 *)dSprite, sizeof(DungeonPokemonSprite));
}
void sub_800F958(s32 dungeonSpriteID, Position *pos, Position *statusOffsets, u32 a3)
{
DungeonPokemonSprite *dSprite;