From fb923dae6fb9e2355a71cfd621cb68c093c4da9f Mon Sep 17 00:00:00 2001 From: slaw-22 <> Date: Tue, 19 May 2026 20:29:51 +0000 Subject: [PATCH] Decomp CopySpawnEntriesMaster --- asm/overlay_29_022E37DC.s | 49 --------------------------------------- include/spawn_1.h | 1 + src/spawn_1.c | 14 +++++++++++ 3 files changed, 15 insertions(+), 49 deletions(-) diff --git a/asm/overlay_29_022E37DC.s b/asm/overlay_29_022E37DC.s index 2e042a94..98b7d0aa 100644 --- a/asm/overlay_29_022E37DC.s +++ b/asm/overlay_29_022E37DC.s @@ -5501,52 +5501,3 @@ ov29_022E7BD0: ; 0x022E7BD0 moveq r0, #0x46 ldmia sp!, {r3, pc} arm_func_end ov29_022E7BD0 - - arm_func_start CopySpawnEntriesMaster -CopySpawnEntriesMaster: ; 0x022E7BE8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r0 - mov r5, r1 - mov r4, #0 - ldr r7, _022E7C5C ; =DUNGEON_PTR - b _022E7C4C -_022E7C00: - ldr r0, [r7] -#ifdef JAPAN - add r0, r0, #0x8c0 - add r0, r0, #0x2c000 -#else - add r0, r0, #0x164 - add r0, r0, #0x2c800 -#endif - add r0, r0, r4, lsl #3 - bl GetMonsterIdFromSpawnEntry - cmp r0, #0 - beq _022E7C54 - ldr r0, [r7] - add r2, r6, r5, lsl #3 - add r0, r0, r4, lsl #3 -#ifdef JAPAN - add r0, r0, #0x8c0 - add r3, r0, #0x2c000 -#else - add r0, r0, #0x164 - add r3, r0, #0x2c800 -#endif - mov r1, #4 -_022E7C34: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E7C34 - add r5, r5, #1 - add r4, r4, #1 -_022E7C4C: - cmp r4, #0x10 - blt _022E7C00 -_022E7C54: - mov r0, r5 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022E7C5C: .word DUNGEON_PTR - arm_func_end CopySpawnEntriesMaster diff --git a/include/spawn_1.h b/include/spawn_1.h index 9cb5d3b3..2f4a1634 100644 --- a/include/spawn_1.h +++ b/include/spawn_1.h @@ -1,6 +1,7 @@ #ifndef PMDSKY_SPAWN_1_H #define PMDSKY_SPAWN_1_H +s32 CopySpawnEntriesMaster(struct monster_spawn_entry out[], s32 idx_out); s32 MonsterSpawnListPartialCopy(struct monster_spawn_entry entry_out[], s32 idx_out); void CopySpawnEntriesOnce(); diff --git a/src/spawn_1.c b/src/spawn_1.c index 14eae936..976c3be1 100644 --- a/src/spawn_1.c +++ b/src/spawn_1.c @@ -6,6 +6,20 @@ extern s32 GetMonsterIdFromSpawnEntry(struct monster_spawn_entry*); extern u32 GetSpriteSize(s32); extern struct dungeon *DUNGEON_PTR; +s32 CopySpawnEntriesMaster(struct monster_spawn_entry out[], s32 idx_out) { + for(s32 i = 0; i < 16; i++) { + s32 monster_id = GetMonsterIdFromSpawnEntry(&(DUNGEON_PTR->spawn_entries_master[i])); + if(monster_id == 0) { + break; + } + + out[idx_out] = DUNGEON_PTR->spawn_entries_master[i]; + idx_out++; + } + + return idx_out; +} + s32 MonsterSpawnListPartialCopy(struct monster_spawn_entry entry_out[], s32 idx_out) { for(s32 i = 0; i < 16; i++) { s32 monster_id = GetMonsterIdFromSpawnEntry(&(DUNGEON_PTR->spawn_entries_master[i]));