diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index 396d54a29..5a0d7dc16 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -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 diff --git a/src/code_800F958.c b/src/code_800F958.c index dbd9a1e5c..a76e80e9c 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -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;