From 8c39cbea58b66225948ada108a5bfb173175d7b7 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 24 Aug 2026 11:01:39 -0700 Subject: [PATCH] more decomp --- asm/overlay_30.s | 1025 ---------------------------------------- include/dungeon_mode.h | 37 +- include/overlay_30.h | 6 + src/overlay_30_init.c | 391 ++++++++++++++- 4 files changed, 392 insertions(+), 1067 deletions(-) diff --git a/asm/overlay_30.s b/asm/overlay_30.s index c2a685c1..bcd7fe6a 100644 --- a/asm/overlay_30.s +++ b/asm/overlay_30.s @@ -3,1031 +3,6 @@ .text - arm_func_start ov30_02382E94 -ov30_02382E94: ; 0x02382E94 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sl, r0 - mov r2, #0 - mov r1, #0xff - add r0, sp, #0 -_02382EAC: - strb r1, [r0, r2] - add r2, r2, #1 - cmp r2, #7 - blt _02382EAC - ldr r1, _02382FB0 ; =OVERLAY30_JP_STRING_1 - mov r0, sl - bl ov30_02385CE0 - mov sb, #0 - mov r5, #1 - ldr r4, _02382FB4 ; =DUNGEON_PTR - mov fp, r5 - mov r7, sb -_02382EDC: - ldr r0, [r4] - mov r1, r7 - add r0, r0, sb, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r8, [r0, #0xc24] -#else - ldr r8, [r0, #0xcc8] -#endif - cmp r8, #0 - beq _02382F84 - ldr r0, [r8] - cmp r0, #2 - bne _02382F84 - mov r0, r8 - bl GetTrapInfo - mov r6, r0 - mov r0, sl - mov r1, r6 - mov r2, r5 - bl ov30_02385C54 - mov r0, sl - add r1, r6, #1 - mov r2, fp - bl ov30_02385C54 - mov r0, sl - add r1, r6, #2 - mov r2, #1 - bl ov30_02385C54 - add r1, r6, #3 - mov r0, sl - mov r2, #1 - bl ov30_02385C54 - mov r0, sl - add r1, r8, #0x20 - mov r2, #1 - bl ov30_02385C54 - mov r0, sl - add r1, r8, #4 - mov r2, #1 - bl ov30_02385C54 - add r1, r8, #6 - mov r0, sl - mov r2, #1 - bl ov30_02385C54 - mov r1, #1 -_02382F84: - cmp r1, #0 - bne _02382F9C - mov r0, sl - add r1, sp, #0 - mov r2, #7 - bl ov30_02385C54 -_02382F9C: - add sb, sb, #1 - cmp sb, #0x40 - blt _02382EDC - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02382FB0: .word OVERLAY30_JP_STRING_1 -_02382FB4: .word DUNGEON_PTR - arm_func_end ov30_02382E94 - - arm_func_start ov30_02382FB8 -ov30_02382FB8: ; 0x02382FB8 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _0238307C ; =DUNGEON_PTR - ldr r1, _02383080 ; =OVERLAY30_JP_STRING_1 - ldr r2, [r2] - mov r5, r0 -#ifdef JAPAN - add r2, r2, #0x388 - add r4, r2, #0x19400 -#else - add r2, r2, #0x2c - add r4, r2, #0x19800 -#endif - bl ov30_02385CE0 - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r4] - mov r2, #1 - cmp r0, #5 - bne _02383034 - add r1, sp, #1 - mov r0, r5 - strb r2, [sp, #1] - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #0x20 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #4 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #6 - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} -_02383034: - mov r3, #0 - add r1, sp, #0 - mov r0, r5 - strb r3, [sp] - bl ov30_02385C54 - add r1, sp, #0 - mov r0, r5 - mov r2, #1 - bl ov30_02385C54 - add r1, sp, #0 - mov r0, r5 - mov r2, #1 - bl ov30_02385C54 - add r1, sp, #0 - mov r0, r5 - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0238307C: .word DUNGEON_PTR -_02383080: .word OVERLAY30_JP_STRING_1 - arm_func_end ov30_02382FB8 - - arm_func_start ov30_02383084 -ov30_02383084: ; 0x02383084 -#ifdef JAPAN -#define OV30_02383084_OFFSET -0xA4 -#else -#define OV30_02383084_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _023831E0 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CE0 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldr r1, [r1, #0xe2c + OV30_02383084_OFFSET] - bl ov30_02385D74 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldr r1, [r1, #0xe30 + OV30_02383084_OFFSET] - bl ov30_02385D74 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe34 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe35 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe36 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe37 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe38 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe39 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe3c + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0x3d00 - ldrh r1, [r1, #0x96] -#else - add r1, r1, #0x3e00 - ldrh r1, [r1, #0x3a + OV30_02383084_OFFSET] -#endif - bl ov30_02385D14 - ldr r5, _023831E4 ; =DUNGEON_PTR - mov r6, #0 -_0238318C: - ldr r1, [r5] - mov r0, r4 - add r1, r1, r6, lsl #2 - add r1, r1, #0x12000 - ldr r1, [r1, #0xb28 + OV30_02383084_OFFSET] - bl ov30_023831E8 - add r6, r6, #1 - cmp r6, #4 - blt _0238318C - ldr r5, _023831E4 ; =DUNGEON_PTR - mov r6, #0 -_023831B8: - ldr r1, [r5] - mov r0, r4 - add r1, r1, r6, lsl #2 - add r1, r1, #0x12000 - ldr r1, [r1, #0xb38 + OV30_02383084_OFFSET] - bl ov30_023831E8 - add r6, r6, #1 - cmp r6, #0x10 - blt _023831B8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023831E0: .word OVERLAY30_JP_STRING_1 -_023831E4: .word DUNGEON_PTR - arm_func_end ov30_02383084 - - arm_func_start ov30_023831E8 -ov30_023831E8: ; 0x023831E8 -#ifdef JAPAN -#define OV30_023831E8_OFFSET -4 -#else -#define OV30_023831E8_OFFSET 0 -#endif -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, r7, r8, lr} -#else - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} -#endif - sub sp, sp, #0x25c + OV30_023831E8_OFFSET - mov r4, r1 - mov r3, #0 - mov r2, #1 - mov r8, r0 - mov r1, #0xaa - str r3, [sp, #0x18] - str r2, [sp, #0x14] - bl ov30_02385D54 - mov r0, r8 - mov r1, #0x55 - bl ov30_02385D54 - cmp r4, #0 - moveq r0, #0 - beq _0238323C - ldr r0, [r4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_0238323C: - cmp r0, #0 - beq _0238329C - add r1, sp, #0x14 - mov r0, r8 - mov r2, #1 - ldr r6, [r4, #0xb4] - bl ov30_02385C54 - mov r0, r8 - add r1, r4, #4 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r4, #6 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r4, #0x20 - mov r2, #1 - bl ov30_02385C54 - add r1, r4, #0x26 - mov r0, r8 - mov r2, #2 - bl ov30_02385C54 - b _02383300 -_0238329C: - add r0, sp, #0x1c - mov r1, #0 - mov r2, #0x240 + OV30_023831E8_OFFSET - bl memset - add r1, sp, #0x18 - mov r0, r8 - mov r2, #1 - add r6, sp, #0x1c - bl ov30_02385C54 - add r1, sp, #0x18 - mov r0, r8 - mov r2, #1 - bl ov30_02385C54 - add r1, sp, #0x18 - mov r0, r8 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, sp, #0x18 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, sp, #0x18 - mov r2, #2 - bl ov30_02385C54 -_02383300: - ldrh r1, [r6] - mov r0, r8 - bl ov30_02385D14 - ldrsh r2, [r6, #4] - add r1, sp, #0xc - mov r0, r8 - strh r2, [sp, #0xc] - mov r2, #2 - bl ov30_02385C54 - ldrsh r2, [r6, #2] - add r1, sp, #0xa - mov r0, r8 - strh r2, [sp, #0xa] - mov r2, #2 - bl ov30_02385C54 - ldrb r1, [r6, #6] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #7] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #8] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #9] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xa] - mov r0, r8 - bl ov30_02385D54 - ldrsh r1, [r6, #0xc] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - ldrb r1, [r6, #0x48] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x49] - mov r0, r8 - bl ov30_02385D54 - ldrsh r1, [r6, #0xe] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x10] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x12] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x16] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x14] - mov r0, r8 - bl ov30_02385D34 - ldrb r1, [r6, #0x1a] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x1b] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x1c] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x1d] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0x20] - mov r0, r8 - bl ov30_02385D74 - ldrsh r1, [r6, #0x24] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x26] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x28] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x2a] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x2c] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x2e] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x30] - mov r0, r8 - bl ov30_02385D34 - ldr r1, [r6, #0x34] - mov r0, r8 - bl ov30_02385DB4 - ldr r1, [r6, #0x38] - mov r0, r8 - bl ov30_02385DB4 - ldr r1, [r6, #0x3c] - mov r0, r8 - bl ov30_02385DB4 - ldr r1, [r6, #0x40] - mov r0, r8 - bl ov30_02385DB4 - mov r0, r8 - add r1, r6, #0x4c - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x5a - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x5c - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x5e] - mov r0, r8 - add r1, sp, #7 - strb r2, [sp, #7] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x5f] - mov r0, r8 - add r1, sp, #6 - strb r2, [sp, #6] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x60] - mov r0, r8 - add r1, sp, #5 - strb r2, [sp, #5] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x61] - mov r0, r8 - add r1, sp, #4 - strb r2, [sp, #4] - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x62 - bl ov30_02384268 - ldrsh r2, [r6, #0x68] - mov r0, r8 - add r1, sp, #8 - strh r2, [sp, #8] - mov r2, #2 - bl ov30_02385C54 - mov r5, #0 - add r4, r6, #0x6a -_02383558: - mov r0, r8 - add r1, r4, r5, lsl #2 - bl ov30_02385DF8 - add r5, r5, #1 - cmp r5, #4 - blt _02383558 - mov r0, r8 - add r1, r6, #0x7c - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0x7d] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #0x7e] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #0x7f] - mov r0, r8 - bl ov30_02385DD4 - ldrh r1, [r6, #0x80] - mov r0, r8 - bl ov30_02385D14 - mov r0, r8 - add r1, r6, #0x8c - bl ov30_02385DF8 - mov r0, r8 - add r1, r6, #0x90 - mov r2, #0x45 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x9c - mov r2, #0x45 - bl ov30_02385C54 - ldrb r2, [r6, #0xa8] - mov r0, r8 - add r1, sp, #3 - strb r2, [sp, #3] - mov r2, #1 - bl ov30_02385C54 - ldrsh r1, [r6, #0x44] - mov r0, r8 - bl ov30_02385D34 - ldrb r2, [r6, #0x46] - mov r0, r8 - add r1, sp, #2 - strb r2, [sp, #2] - mov r2, #1 - bl ov30_02385C54 - ldr r1, [r6, #0xb0] - mov r0, r8 - bl ov30_02385D74 - ldr r1, [r6, #0xb4] - mov r0, r8 - bl ov30_02385D74 - ldr r1, [r6, #0xb8] - mov r0, r8 - bl ov30_02385D74 - mov r0, r8 - add r1, r6, #0xbd - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xbe] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xbf - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xc0] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xc1] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xc2] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xc4 - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xcc] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xcd] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0xc8] - mov r0, r8 - bl ov30_02385D74 - mov r0, r8 - add r1, r6, #0xd0 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd1] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xd2 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd3] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xd4] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xd5 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd6] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xd7] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xd8 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd9] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xda] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xdb] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xdc] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xe0 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldr r1, [r6, #0xe4] - bl ov30_02385D74 - mov r0, r8 - ldrb r1, [r6, #0xe8] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xe9] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xea] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xec - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xed] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xee - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0xef - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xf0] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf2] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf3 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf4] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf5 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf6] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf7 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf8] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xf9] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfa] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfb] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfc] - bl ov30_02385DD4 - mov r0, r8 -#ifdef JAPAN - ldrb r1, [r6, #0xfd] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x107] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xfe] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xff] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x100] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x103] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x104] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x108] - bl ov30_02385DD4 - ldrb r1, [r6, #0x105] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x106] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x109] - mov r0, r8 - bl ov30_02385D54 - ldrb r2, [r6, #0x10a] - add r1, sp, #1 - mov r0, r8 - strb r2, [sp, #1] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x10b] - mov r0, r8 - add r1, sp, #0 - strb r2, [sp] - mov r2, #1 - bl ov30_02385C54 - ldr r1, [r6, #0x10c] - mov r0, r8 - str r1, [sp, #0x10] - add r1, sp, #0x10 - mov r2, #4 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x110 - mov r2, #5 - bl ov30_02385EB8 - add r1, r6, #0x15 - mov r0, r8 - add r1, r1, #0x100 - mov r2, #5 - bl ov30_02385EB8 - ldrb r1, [r6, #0x11a] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x11b] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0x11c] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - mov r7, #0 - add r5, r6, #0x120 -#else - ldrb r1, [r6, #0x103] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfd] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x108] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xfe] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xff] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x100] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x104] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x105] - bl ov30_02385D54 - ldrb r1, [r6, #0x109] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #0x106] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x107] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x10a] - mov r0, r8 - bl ov30_02385D54 - ldrb r2, [r6, #0x10b] - mov r0, r8 - add r1, sp, #1 - strb r2, [sp, #1] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x10c] - mov r0, r8 - add r1, sp, #0 - strb r2, [sp] - mov r2, #1 - bl ov30_02385C54 - ldr r1, [r6, #0x110] - mov r0, r8 - str r1, [sp, #0x10] - add r1, sp, #0x10 - mov r2, #4 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x114 - mov r2, #5 - bl ov30_02385EB8 - add r1, r6, #0x19 - mov r0, r8 - add r1, r1, #0x100 - mov r2, #5 - bl ov30_02385EB8 - ldrb r1, [r6, #0x11e] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x11f] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0x120] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - mov r7, #0 - add r5, r6, #0x124 -#endif - mov r4, #2 -_023839C4: - add r0, r6, r7, lsl #3 - ldrb r1, [r0, #0x124 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r0, r6, r7, lsl #3 - add r0, r0, #0x100 - ldrh r1, [r0, #0x26 + OV30_023831E8_OFFSET] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - add r1, r5, r7, lsl #3 - mov r0, r8 - mov r2, r4 - add r1, r1, #4 - bl ov30_02385C54 - add r0, r6, r7, lsl #3 - ldrb r1, [r0, #0x12a + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, r7, lsl #3 - ldrb r1, [r1, #0x12b + OV30_023831E8_OFFSET] - bl ov30_02385D54 - add r7, r7, #1 - cmp r7, #4 - blt _023839C4 - ldrb r1, [r6, #0x144 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x46 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x48 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x4a + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x4c + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - ldrb r1, [r6, #0x14e + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x14f + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x151 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x150 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x152 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x153 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x154 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x155 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x156 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - add r1, r6, #0x100 - ldrh r1, [r1, #0x58 + OV30_023831E8_OFFSET] - bl ov30_02385D14 - mov r0, r8 - add r1, r6, #0x100 - ldrh r1, [r1, #0x5a + OV30_023831E8_OFFSET] - bl ov30_02385D14 - mov r0, r8 - ldrb r1, [r6, #0x15c + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x15d + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x15e + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x15f + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x160 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x177 + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x178 + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x179 + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x17a + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x17b + OV30_023831E8_OFFSET] - bl ov30_02385D54 - ldrb r1, [r6, #0x17c + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r1, r6, #0x7e + OV30_023831E8_OFFSET - mov r0, r8 - add r1, r1, #0x100 - bl ov30_02385DF8 - ldr r1, [r6, #0x188 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385DB4 - add r0, r6, #0x100 - ldrh r1, [r0, #0x92 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D14 - ldr r1, [r6, #0x18c + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D94 - add r0, r6, #0x100 - ldrh r1, [r0, #0x90 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D14 - add r1, r6, #0x200 - ldrsh r1, [r1, #0x10 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r1, r6, #0x200 - ldrsh r1, [r1, #0x12 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - ldr r1, [r6, #0x214 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D74 - ldrb r1, [r6, #0xbc] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x166 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x167 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r1, r6, #0x100 - ldrsh r1, [r1, #0x68 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0xac] - mov r0, r8 - bl ov30_02385D34 - ldrb r1, [r6, #0x16a + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - mov r4, #0 -_02383C4C: - add r0, r6, r4 - ldrb r1, [r0, #0x16b + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r4, r4, #1 - cmp r4, #5 - blt _02383C4C - add sp, sp, #0x25c + OV30_023831E8_OFFSET -#ifdef JAPAN - ldmia sp!, {r4, r5, r6, r7, r8, pc} -#else - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} -#endif - arm_func_end ov30_023831E8 - arm_func_start ov30_02383C70 ov30_02383C70: ; 0x02383C70 #ifdef JAPAN diff --git a/include/dungeon_mode.h b/include/dungeon_mode.h index 1a01c122..4c8d5ccd 100644 --- a/include/dungeon_mode.h +++ b/include/dungeon_mode.h @@ -270,8 +270,7 @@ struct monster { s16 iq; // 0xE s16 hp; // 0x10: Current HP s16 max_hp_stat; // 0x12: Add to max_hp_boost for the actual max HP - u8 field_0x14; - u8 field_0x15; + s16 field_0x14; s16 max_hp_boost; // 0x16: From Life Seeds, Sitrus Berries, etc. u8 field_0x18; u8 field_0x19; @@ -292,7 +291,7 @@ struct monster { struct item held_item; // 0x62 // 0x68: Previous held item. Used for whenever taking the X-Ray Specs or Y-Ray Specs on or off // in order to update the camera and minimap. Changed to held_item.id after checking. - enum item_id previous_held_item_id; + s16 previous_held_item_id; // Previous position data is used by the AI struct position prev_pos[NUM_PREV_POS]; // 0x6A: Position X turns ago struct ai_target ai_target; // 0x7A @@ -309,8 +308,7 @@ struct monster { // and restored to entity::types after statuses::roost ends. enum type_id original_types[2]; // 0xAC: The move id to be used if statuses::bide is 1. - u8 bide_move_id; - u8 field_0xad; + s16 bide_move_id; u8 field_0xae; u8 field_0xaf; // 0xB0: Unique number given to the monster when spawning to differentiate it from other @@ -468,18 +466,13 @@ struct monster { // 0x167: Set to true when the monster receives a critical hit. If true when the monster // attacks, Anger Point will activate. Set to false after the monster attacks. bool8 anger_point_flag; - u8 field_0x168; - u8 field_0x169; + s16 field_0x168; // 0x16A: When not DIR_NONE, monster will turn in the specified direction and // its AI will be forced to target the tile next to it in that direction. // Used to prevent bosses from turning towards team members the moment the boss fight // starts (which would override their intended starting facing direction). - enum direction_id force_turn : 8; - u8 field_0x16b; - u8 field_0x16c; - u8 field_0x16d; - u8 field_0x16e; - u8 field_0x16f; + u8 force_turn; + u8 unk16B[5]; // 0x170: Set to make the monster disappear when using the move U-turn. bool8 uturn_hide_monster_flag; // 0x171: Some kind of visual flag? Gets set to 0 temporarily when changing Shaymin form @@ -495,9 +488,9 @@ struct monster { u8 field_0x175; u8 field_0x176; // 0x177: Appears to be the direction for using sleep talk? Set to DIR_NONE when awake. - enum direction_id sleep_talk_direction : 8; + u8 sleep_talk_direction; // 0x178: Appears to be the direction for using snore? Set to DIR_NONE when awake. - enum direction_id snore_direction : 8; + u8 snore_direction; // 0x179: Seems to be set to 4 when the monster initally throws something and probably // related to direction somehow. Checked in a loop for every monster. u8 field_0x179; @@ -511,10 +504,7 @@ struct monster { struct position pixel_pos; // 0x182: The monster's graphical position on screen? u8 field_0x186; u8 field_0x187; - u8 field_0x188; - u8 field_0x189; - u8 field_0x18a; - u8 field_0x18b; + u32 field_0x188; // 0x18C: Bitflags that cause non-damaging exclusive items to trigger on the // attacker after they have completed their move. For example, the Eclipse Robe // (Darkrai exclusive item) may afflict attacking enemies with the nightmare @@ -648,8 +638,7 @@ struct monster { u8 field_0x20d; u8 field_0x20e; u8 field_0x20f; - u8 hp_fractional; // 0x210: 200 * fractional_part(HP) - u8 field_0x211; + s16 hp_fractional; // 0x210: 200 * fractional_part(HP) // 0x212: When a Pokémon can pass through walls in a hallway, this counts up to 200 before the Pokémon turns in a random direction. s16 mobile_turn_timer; // 0x214: Somehow related to gaining exp through a joy ribbon. Set to 0 after @@ -1142,9 +1131,9 @@ struct trap { u8 team; // 0x2: flags: 1-byte bitfield - //u8 flags; - bool8 f_unbreakable : 1; // If true, the trap can't be broken (for example, using a Trapbust Orb) - u8 flags_unk1 : 7; + u8 flags; + //bool8 f_unbreakable : 1; // If true, the trap can't be broken (for example, using a Trapbust Orb) + //u8 flags_unk1 : 7; u8 field_0x3; }; diff --git a/include/overlay_30.h b/include/overlay_30.h index b6d873e6..25baa944 100644 --- a/include/overlay_30.h +++ b/include/overlay_30.h @@ -1,6 +1,8 @@ #ifndef PMD_SKY_OVERLAY_30_H #define PMD_SKY_OVERLAY_30_H +#include "dungeon_mode.h" + void ov30_02382820(s32 arg0, s32 arg1, s32 isGameModeRescue); s32 ov30_02382874(void); u8 ov30_0238298C(void); @@ -10,6 +12,10 @@ s32 ov30_02382A34(void); void ov30_02382C30(void); void WriteQuicksaveData(void *buffer, s32 size); void ov30_02382D80(void *buffer); +void ov30_02382E94(void *buffer); +void ov30_02382FB8(void *buffer); +void ov30_02383084(void *buffer); +void ov30_023831E8(void *arg0, struct entity* arg1); #endif // PMD_SKY_OVERLAY_30_H diff --git a/src/overlay_30_init.c b/src/overlay_30_init.c index e266e2c7..4c7329ea 100644 --- a/src/overlay_30_init.c +++ b/src/overlay_30_init.c @@ -139,6 +139,9 @@ asm void ov30_023829CC(s32 arg0, s32 arg1, s8 arg2) ldmia sp!, {r4, r5, r6, pc} } +extern u8 OVERLAY30_JP_STRING_1[0xC]; // みさき様 +extern u8 OVERLAY30_JP_STRING_2[0xC]; // やよい様 + s32 NoteSaveBase(s32); s32 WriteQuickSaveInfo(s32, s32); void sub_02003B94(); @@ -146,7 +149,31 @@ void sub_02003BC8(); void sub_02029F88(s32, s32, s32); void sub_02029FBC(); s32 sub_02048DC4(s32); -void sub_02034D0C(); +void sub_02034D0C(void); +void ov30_02382D80(void*); +void ov30_02382E94(void*); +void ov30_02382FB8(void*); +void ov30_02383084(void*); +void ov30_02383C70(void*); +void ov30_0238409C(void*); +void ov30_02384208(void*); +void ov30_02385C3C(void*, void*, s32); +void ov30_02385C54(void*, void*, s32); +void ov30_02385CDC(void*); +void ov30_02385CE0(void*, void*); +void ov30_02385D14(void*, u16); +void ov30_02385D34(void*, s16); +struct trap* GetTrapInfo(struct entity*); +void ov30_023831E8(void *, struct entity*); +void ov30_02385D74(void *, s32); +void ov30_02385DD4(void *, u8); +void ov30_02385D54(void*, u8); /* extern */ +void memset(void*, s32, s32); /* extern */ +void ov30_02384268(void*, void*); /* extern */ +void ov30_02385D94(void*, s32); /* extern */ +void ov30_02385DB4(void*, s32); /* extern */ +void ov30_02385DF8(void*, void*); /* extern */ +void ov30_02385EB8(void*, void*, s32); /* extern */ s32 ov30_02382A34(void) { @@ -241,23 +268,6 @@ void ov30_02382C30(void) } } -extern u8 OVERLAY30_JP_STRING_1[0xC]; // みさき様 -extern u8 OVERLAY30_JP_STRING_2[0xC]; // やよい様 - -void ov30_02382D80(void*); -void ov30_02382E94(void*); -void ov30_02382FB8(void*); -void ov30_02383084(void*); -void ov30_02383C70(void*); -void ov30_0238409C(void*); -void ov30_02384208(void*); -void ov30_02385C3C(void*, void*, s32); -void ov30_02385C54(void*, void*, s32); -void ov30_02385CDC(void*); -void ov30_02385CE0(void*, void*); -void ov30_02385D14(void*, u16); -void ov30_02385D34(void*, s16); - void WriteQuicksaveData(void *buffer, s32 size) { u8 sp4[0xC]; @@ -318,3 +328,348 @@ void ov30_02382D80(void *buffer) } } } + +void ov30_02382E94(void *buffer) +{ + u8 zeroes[7]; + bool32 var_r1; + struct trap* trap; + struct entity* entity; + + for(int index1 = 0; index1 < 7; index1++) + { + zeroes[index1] = -1; + } + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + for(int index2 = 0; index2 < 0x40; index2++) + { + entity = DUNGEON_PTR->trap_ptrs[index2]; + var_r1 = FALSE; + if ((entity != NULL) && (entity->type == ENTITY_TRAP)) { + trap = GetTrapInfo(entity); + ov30_02385C54(buffer, &trap->id, 1); + ov30_02385C54(buffer, &trap->team, 1); + ov30_02385C54(buffer, &trap->flags, 1); + ov30_02385C54(buffer, &trap->field_0x3, 1); + ov30_02385C54(buffer, &entity->is_visible, 1); + ov30_02385C54(buffer, &entity->pos.x, 1); + ov30_02385C54(buffer, &entity->pos.y, 1); + var_r1 = TRUE; + } + if (var_r1 == FALSE) { + ov30_02385C54(buffer, &zeroes, 7); + } + } +} + +void ov30_02382FB8(void *buffer) +{ + u8 sp1; + u8 sp0; + struct entity* entity; + + entity = &DUNGEON_PTR->entities[148]; + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + if (entity == NULL) { + return; + } + if (entity->type == ENTITY_HIDDEN_STAIRS) { + sp1 = 1; + ov30_02385C54(buffer, (void*)&sp1, 1); + ov30_02385C54(buffer, &entity->is_visible, 1); + ov30_02385C54(buffer, &entity->pos.x, 1); + ov30_02385C54(buffer, &entity->pos.y, 1); + } + else + { + sp0 = 0; + ov30_02385C54(buffer, (void*)&sp0, 1); + ov30_02385C54(buffer, (void*)&sp0, 1); + ov30_02385C54(buffer, (void*)&sp0, 1); + ov30_02385C54(buffer, (void*)&sp0, 1); + } +} + +void ov30_02383084(void *buffer) +{ + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + ov30_02385D74(buffer, DUNGEON_PTR->monster_unique_id_counter); + ov30_02385D74(buffer, DUNGEON_PTR->monster_unique_wrap_counter); + ov30_02385DD4(buffer, DUNGEON_PTR->plus_is_active[0]); + ov30_02385DD4(buffer, DUNGEON_PTR->plus_is_active[1]); + ov30_02385DD4(buffer, DUNGEON_PTR->minus_is_active[0]); + ov30_02385DD4(buffer, DUNGEON_PTR->minus_is_active[1]); + ov30_02385DD4(buffer, DUNGEON_PTR->decoy_is_active); + ov30_02385DD4(buffer, DUNGEON_PTR->mew_cannot_spawn); + ov30_02385DD4(buffer, DUNGEON_PTR->shaymin_sky_form_loaded); + ov30_02385D14(buffer, DUNGEON_PTR->deoxys_floor_id); + for(int var_r6 = 0; var_r6 < MAX_TEAM_MEMBERS; var_r6++) + { + ov30_023831E8(buffer, DUNGEON_PTR->monster_slots.party_members[var_r6]); + } + for(int var_r6_2 = 0; var_r6_2 < DUNGEON_MAX_WILD_POKEMON; var_r6_2++) + { + ov30_023831E8(buffer, DUNGEON_PTR->monster_slots.wild_pokemon[var_r6_2]); + } +} + +void ov30_023831E8(void *arg0, struct entity* arg1) +{ + struct monster sp1C; + s32 sp18; + s32 sp14; + s32 sp10; + s16 spC; + s16 spA; + s16 sp8; + u8 sp7; + u8 sp6; + u8 sp5; + u8 sp4; + u8 sp3; + u8 sp2; + u8 sp1; + u8 sp0; + struct monster* var_r6; + s32 var_r5; + u8 var_r0; + u8 var_r0_2; + + sp18 = 0; + sp14 = 1; + ov30_02385D54(arg0, 0xAA); + ov30_02385D54(arg0, 0x55); + if (arg1 == NULL) { + var_r0 = 0; + } else { + if (arg1->type != 0) { + var_r0_2 = 1; + } else { + var_r0_2 = 0; + } + var_r0 = var_r0_2; + } + if (var_r0 != 0) { + var_r6 = (struct monster *)arg1->info; + ov30_02385C54(arg0, &sp14, 1); + ov30_02385C54(arg0, &arg1->pos.x, 1); + ov30_02385C54(arg0, &arg1->pos.y, 1); + ov30_02385C54(arg0, &arg1->is_visible, 1); + ov30_02385C54(arg0, &arg1->spawn_genid, 2); + } else { + memset(&sp1C, 0, sizeof(struct monster)); + var_r6 = &sp1C; + ov30_02385C54(arg0, &sp18, 1); + ov30_02385C54(arg0, &sp18, 1); + ov30_02385C54(arg0, &sp18, 1); + ov30_02385C54(arg0, &sp18, 1); + ov30_02385C54(arg0, &sp18, 2); + } + ov30_02385D14(arg0, var_r6->flags); + spC = var_r6->apparent_id; + ov30_02385C54(arg0, (s32* ) &spC, 2); + spA = var_r6->id; + ov30_02385C54(arg0, (s32* ) &spA, 2); + ov30_02385DD4(arg0, var_r6->is_not_team_member); + ov30_02385DD4(arg0, var_r6->is_team_leader); + ov30_02385DD4(arg0, var_r6->is_ally); + ov30_02385D54(arg0, var_r6->shopkeeper); + ov30_02385D54(arg0, var_r6->level); + ov30_02385D54(arg0, (u8) var_r6->team_index); + ov30_02385D54(arg0, var_r6->joined_at); + ov30_02385D54(arg0, var_r6->joined_at_floor); + ov30_02385D34(arg0, var_r6->iq); + ov30_02385D34(arg0, var_r6->hp); + ov30_02385D34(arg0, var_r6->max_hp_stat); + ov30_02385D34(arg0, var_r6->max_hp_boost); + ov30_02385D34(arg0, var_r6->field_0x14); + ov30_02385D54(arg0, var_r6->offensive_stats[0]); + ov30_02385D54(arg0, var_r6->offensive_stats[1]); + ov30_02385D54(arg0, var_r6->defensive_stats[0]); + ov30_02385D54(arg0, var_r6->defensive_stats[1]); + ov30_02385D74(arg0, var_r6->exp); + ov30_02385D34(arg0, var_r6->stat_modifiers.offensive_stages[0]); + ov30_02385D34(arg0, var_r6->stat_modifiers.offensive_stages[1]); + ov30_02385D34(arg0, var_r6->stat_modifiers.defensive_stages[0]); + ov30_02385D34(arg0, var_r6->stat_modifiers.defensive_stages[1]); + ov30_02385D34(arg0, var_r6->stat_modifiers.hit_chance_stages[0]); + ov30_02385D34(arg0, var_r6->stat_modifiers.hit_chance_stages[1]); + ov30_02385D34(arg0, var_r6->stat_modifiers.flash_fire_boost); + ov30_02385DB4(arg0, var_r6->stat_modifiers.offensive_multipliers[0]); + ov30_02385DB4(arg0, var_r6->stat_modifiers.offensive_multipliers[1]); + ov30_02385DB4(arg0, var_r6->stat_modifiers.defensive_multipliers[0]); + ov30_02385DB4(arg0, var_r6->stat_modifiers.defensive_multipliers[1]); + ov30_02385C54(arg0, &var_r6->action.direction, 1); + ov30_02385C54(arg0, &var_r6->action.item_target_position.x, 1); + ov30_02385C54(arg0, &var_r6->action.item_target_position.y, 1); + sp7 = var_r6->types[0]; + ov30_02385C54(arg0, (s32* ) &sp7, 1); + sp6 = var_r6->types[1]; + ov30_02385C54(arg0, (s32* ) &sp6, 1); + sp5 = var_r6->abilities[0]; + ov30_02385C54(arg0, (s32* ) &sp5, 1); + sp4 = var_r6->abilities[1]; + ov30_02385C54(arg0, (s32* ) &sp4, 1); + ov30_02384268(arg0, &var_r6->held_item); + sp8 = var_r6->previous_held_item_id; + ov30_02385C54(arg0, (s32* ) &sp8, 2); + + for(var_r5 = 0; var_r5 < NUM_PREV_POS; var_r5++) + { + ov30_02385DF8(arg0, &var_r6->prev_pos[var_r5]); + } + + ov30_02385C54(arg0, &var_r6->ai_target.ai_objective, 1); + ov30_02385DD4(arg0, var_r6->ai_target.ai_not_next_to_target); + ov30_02385DD4(arg0, var_r6->ai_target.ai_targeting_enemy); + ov30_02385DD4(arg0, var_r6->ai_target.ai_turning_around); + ov30_02385D14(arg0, var_r6->ai_target.ai_target_spawn_genid); + ov30_02385DF8(arg0, &var_r6->ai_target.ai_target_pos); + + ov30_02385C54(arg0, &var_r6->iq_skill_menu_flags, 0x45); + ov30_02385C54(arg0, &var_r6->iq_skill_flags, 0x45); + + sp3 = var_r6->tactic; + ov30_02385C54(arg0, (s32* ) &sp3, 1); + ov30_02385D34(arg0, var_r6->hidden_power_base_power); + sp2 = var_r6->hidden_power_type; + ov30_02385C54(arg0, (s32* ) &sp2, 1); + ov30_02385D74(arg0, var_r6->unique_id); + ov30_02385D74(arg0, var_r6->wrap_pair_unique_id); + ov30_02385D74(arg0, var_r6->bide_damage_tally); + ov30_02385C54(arg0, &var_r6->sleep_class_status.sleep, 1); + ov30_02385D54(arg0, var_r6->sleep_class_status.sleep_turns); + ov30_02385C54(arg0, &var_r6->burn_class_status.burn, 1); + ov30_02385D54(arg0, var_r6->burn_class_status.burn_turns); + ov30_02385D54(arg0, var_r6->burn_class_status.burn_damage_countdown); + ov30_02385D54(arg0, var_r6->burn_class_status.badly_poisoned_damage_count); + ov30_02385C54(arg0, &var_r6->frozen_class_status.freeze, 1); + ov30_02385D54(arg0, var_r6->frozen_class_status.freeze_turns); + ov30_02385D54(arg0, var_r6->frozen_class_status.freeze_damage_countdown); + ov30_02385D74(arg0, var_r6->frozen_class_status.constriction_animation); + ov30_02385C54(arg0, &var_r6->cringe_class_status.cringe, 1); + ov30_02385D54(arg0, var_r6->cringe_class_status.cringe_turns); + ov30_02385C54(arg0, &var_r6->bide_class_status.bide, 1); + ov30_02385D54(arg0, var_r6->bide_class_status.bide_turns); + ov30_02385D54(arg0, var_r6->bide_class_status.bide_move_slot); + ov30_02385C54(arg0, &var_r6->reflect_class_status.reflect, 1); + ov30_02385D54(arg0, var_r6->reflect_class_status.reflect_turns); + ov30_02385D54(arg0, var_r6->reflect_class_status.reflect_damage_countdown); + + ov30_02385C54(arg0, &var_r6->curse_class_status.curse, 1); + ov30_02385DD4(arg0, var_r6->curse_class_status.curse_applier_non_team_member_flag); + ov30_02385DD4(arg0, var_r6->curse_class_status.dec); + ov30_02385D54(arg0, var_r6->curse_class_status.curse_turns); + ov30_02385D54(arg0, var_r6->curse_class_status.curse_damage_countdown); + + ov30_02385C54(arg0, &var_r6->leech_seed_class_status.leech_seed, 1); + ov30_02385D74(arg0, var_r6->leech_seed_class_status.statuses_applier_id); + ov30_02385D54(arg0, var_r6->leech_seed_class_status.leech_seed_source_monster_index); + ov30_02385D54(arg0, var_r6->leech_seed_class_status.leech_seed_turns); + ov30_02385D54(arg0, var_r6->leech_seed_class_status.leech_seed_damage_countdown); + + ov30_02385C54(arg0, &var_r6->sure_shot_class_status.sure_shot, 1); + ov30_02385D54(arg0, var_r6->sure_shot_class_status.sure_shot_turns); + + ov30_02385C54(arg0, &var_r6->long_toss_class_status.status, 1); + + + ov30_02385C54(arg0, &var_r6->invisible_class_status.status, 1); + ov30_02385D54(arg0, var_r6->invisible_class_status.turns); + ov30_02385C54(arg0, &var_r6->blinker_class_status.blinded, 1); + ov30_02385D54(arg0, var_r6->blinker_class_status.blinded_turns); + ov30_02385C54(arg0, &var_r6->muzzled, 1); + ov30_02385D54(arg0, var_r6->muzzled_turns); + ov30_02385C54(arg0, &var_r6->miracle_eye, 1); + ov30_02385D54(arg0, var_r6->miracle_eye_turns); + ov30_02385C54(arg0, &var_r6->magnet_rise, 1); + ov30_02385D54(arg0, var_r6->magnet_rise_turns); + ov30_02385DD4(arg0, var_r6->power_ears); + ov30_02385DD4(arg0, var_r6->scanning); + ov30_02385DD4(arg0, var_r6->stair_spotter); + ov30_02385DD4(arg0, var_r6->pickup_flag); +#ifndef JAPAN + ov30_02385DD4(arg0, var_r6->in_action); +#endif + ov30_02385DD4(arg0, var_r6->grudge); + ov30_02385D54(arg0, var_r6->exp_yield); + ov30_02385DD4(arg0, var_r6->exposed); + ov30_02385DD4(arg0, var_r6->type_changed); + ov30_02385DD4(arg0, var_r6->boss_flag); + ov30_02385D54(arg0, var_r6->terrified); + ov30_02385D54(arg0, var_r6->terrified_turns); + ov30_02385DD4(arg0, var_r6->use_held_item); + ov30_02385D54(arg0, var_r6->perish_song_turns); + ov30_02385D54(arg0, var_r6->no_slip_cap_counter); + ov30_02385D54(arg0, var_r6->field_0x10a); + sp1 = var_r6->two_turn_move_invincible; + ov30_02385C54(arg0, (s32* ) &sp1, 1); + sp0 = var_r6->decoy_ai_tracker; + ov30_02385C54(arg0, (s32* ) &sp0, 1); + sp10 = var_r6->speed_stage; + ov30_02385C54(arg0, &sp10, 4); + ov30_02385EB8(arg0, var_r6->speed_up_counters, 5); + ov30_02385EB8(arg0, var_r6->speed_down_counters, 5); + ov30_02385D54(arg0, var_r6->stockpile_stage); + ov30_02385D54(arg0, var_r6->field_0x11f); + ov30_02385D54(arg0, (u8) var_r6->random_movement); + + // moves + for(int move_index = 0; move_index < MAX_MON_MOVES; move_index++) + { + struct move *move = &var_r6->moves.moves[move_index]; + ov30_02385D54(arg0, var_r6->moves.moves[move_index].flags0); + ov30_02385D54(arg0, var_r6->moves.moves[move_index].flags2); + ov30_02385C54(arg0, &move->id, 2); + ov30_02385D54(arg0, var_r6->moves.moves[move_index].pp); + ov30_02385D54(arg0, var_r6->moves.moves[move_index].ginseng); + } + + ov30_02385D54(arg0, var_r6->moves.struggle_move_flags); + ov30_02385D34(arg0, var_r6->belly.integer); + ov30_02385D34(arg0, var_r6->belly.fractional); + ov30_02385D34(arg0, var_r6->max_belly.integer); + ov30_02385D34(arg0, var_r6->max_belly.fractional); + ov30_02385DD4(arg0, var_r6->ai_ally_skip); + ov30_02385DD4(arg0, var_r6->ai_next_to_target); + ov30_02385DD4(arg0, var_r6->waiting); + ov30_02385DD4(arg0, var_r6->famished); + ov30_02385DD4(arg0, var_r6->already_acted); + ov30_02385DD4(arg0, var_r6->should_evolve); + ov30_02385DD4(arg0, var_r6->using_charged_move); + ov30_02385DD4(arg0, var_r6->hit_grudge_monster); + ov30_02385DD4(arg0, var_r6->field_0x156); + ov30_02385D14(arg0, var_r6->state_flags); + ov30_02385D14(arg0, var_r6->prev_state_flags); + ov30_02385DD4(arg0, var_r6->apply_flash_fire_boost); + ov30_02385D54(arg0, var_r6->rollout_hit_counter); + ov30_02385DD4(arg0, var_r6->memento_warp_flag); + ov30_02385DD4(arg0, var_r6->overheat_special_attack_drop_flag); + ov30_02385DD4(arg0, var_r6->display_shadow); + ov30_02385D54(arg0, var_r6->sleep_talk_direction); + ov30_02385D54(arg0, var_r6->snore_direction); + ov30_02385D54(arg0, var_r6->field_0x179); + ov30_02385D54(arg0, var_r6->field_0x17a); + ov30_02385D54(arg0, var_r6->field_0x17b); + ov30_02385D54(arg0, var_r6->field_0x17c); + ov30_02385DF8(arg0, &var_r6->target_pos); + ov30_02385DB4(arg0, var_r6->field_0x188); + ov30_02385D14(arg0, var_r6->contact_ability_trigger_bitflags); + ov30_02385D94(arg0, var_r6->exclusive_item_trigger_bitflags); + ov30_02385D14(arg0, var_r6->field_0x190); + ov30_02385D34(arg0, var_r6->hp_fractional); + ov30_02385D34(arg0, var_r6->mobile_turn_timer); + ov30_02385D74(arg0, var_r6->unk_exp_tracker); + ov30_02385D54(arg0, var_r6->monster_behavior); + ov30_02385D54(arg0, var_r6->practice_swinger_flag); + ov30_02385D54(arg0, var_r6->anger_point_flag); + ov30_02385D34(arg0, var_r6->field_0x168); + ov30_02385D34(arg0, var_r6->bide_move_id); + ov30_02385D54(arg0, var_r6->force_turn); + + for(int var_r4 = 0; var_r4 < 5; var_r4++) + { + ov30_02385D54(arg0, var_r6->unk16B[var_r4]); + } +} +