diff --git a/asm/overlay_30.s b/asm/overlay_30.s index bcd7fe6a..ee808156 100644 --- a/asm/overlay_30.s +++ b/asm/overlay_30.s @@ -3,1355 +3,7 @@ .text - arm_func_start ov30_02383C70 -ov30_02383C70: ; 0x02383C70 -#ifdef JAPAN -#define OV30_02383C70_OFFSET -0xA4 -#else -#define OV30_02383C70_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _02384090 ; =OVERLAY30_JP_STRING_1 - mov sl, r0 - bl ov30_02385CE0 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc4 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc5 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc6 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc7 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc8 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc9 + OV30_02383C70_OFFSET] - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xca + OV30_02383C70_OFFSET] - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldr r1, [r1, #0xcc + OV30_02383C70_OFFSET] - and r1, r1, #0xff - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldr r1, [r1, #0xd0 + OV30_02383C70_OFFSET] - and r1, r1, #0xff - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xd4 + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xd6 + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xd8 + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xda + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xde + OV30_02383C70_OFFSET] - bl ov30_02385D34 - mov r8, #0 - ldr r6, _02384094 ; =DUNGEON_PTR - mov fp, r8 - mov r4, #0x14 - mov r5, #0x460 -_02383DEC: - mul sb, r8, r5 - mov r7, fp -_02383DF4: - ldr r1, [r6] - mov r0, sl - add r1, r1, #0xe0 + OV30_02383C70_OFFSET - add r1, r1, #0x4000 - add r1, r1, sb - mla r1, r7, r4, r1 - bl ov30_023842B0 - add r7, r7, #1 - cmp r7, #0x38 - blt _02383DF4 - add r8, r8, #1 - cmp r8, #0x20 - blt _02383DEC - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0x3c - add r1, r1, #0xcc00 -#else - add r1, r1, #0xce0 - add r1, r1, #0xc000 -#endif - bl ov30_02385DF8 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc40 - add r1, r1, #0xc000 -#else - add r1, r1, #0xe4 - add r1, r1, #0xcc00 -#endif - bl ov30_02385DF8 - ldr r0, _02384094 ; =DUNGEON_PTR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrh r2, [r0, #0xe8 + OV30_02383C70_OFFSET] - strh r2, [sp] - ldrh r2, [r0, #0xea + OV30_02383C70_OFFSET] - ldrsh r0, [sp] - strh r2, [sp, #2] - cmp r0, r1 - moveq r0, #0xff - streqh r0, [sp] - ldrsh r1, [sp, #2] - mvn r0, #0 - cmp r1, r0 - moveq r0, #0xff - streqh r0, [sp, #2] - add r1, sp, #0 - mov r0, sl - bl ov30_02385DF8 - ldr r4, _02384094 ; =DUNGEON_PTR - mov r5, #0 -_02383EB0: - ldr r1, [r4] - mov r0, sl - add r1, r1, #0xec + OV30_02383C70_OFFSET - add r1, r1, #0xcc00 - add r1, r1, r5, lsl #2 - bl ov30_02385E20 - add r5, r5, #1 - cmp r5, #8 - blt _02383EB0 - ldr r4, _02384094 ; =DUNGEON_PTR - mov r5, #0 -_02383EDC: - ldr r1, [r4] - mov r0, sl - add r1, r1, r5 - add r1, r1, #0xc000 - ldrb r1, [r1, #0xd0c + OV30_02383C70_OFFSET] - bl ov30_02385D54 - add r5, r5, #1 - cmp r5, #8 - blt _02383EDC - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc70 - add r1, r1, #0xc000 -#else - add r1, r1, #0x114 - add r1, r1, #0xcc00 -#endif - bl ov30_02385E48 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc80 - add r1, r1, #0xc000 -#else - add r1, r1, #0x124 - add r1, r1, #0xcc00 -#endif - bl ov30_02385E48 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc90 - add r1, r1, #0xc000 -#else - add r1, r1, #0x134 - add r1, r1, #0xcc00 -#endif - bl ov30_02385E90 - mov r8, #0 - ldr r6, _02384094 ; =DUNGEON_PTR - mov fp, r8 - mov r4, #0x14 - mov r5, #0xa0 -_02383F5C: - mul r7, r8, r5 - mov sb, fp -_02383F64: - ldr r1, [r6] - mov r0, sl -#ifdef JAPAN - add r1, r1, #0xbc - add r1, r1, #0xcc00 -#else - add r1, r1, #0xd60 - add r1, r1, #0xc000 -#endif - add r1, r1, r7 - mla r1, sb, r4, r1 - bl ov30_023842B0 - ldr r1, [r6] - mov r0, sl - add r1, r1, r8, lsl #4 - add r1, r1, sb, lsl #1 -#ifdef JAPAN - add r1, r1, #0xd100 - ldrsh r1, [r1, #0xbc] -#else - add r1, r1, #0xd200 - ldrsh r1, [r1, #0x60] -#endif - bl ov30_02385D34 - add sb, sb, #1 - cmp sb, #8 - blt _02383F64 - add r8, r8, #1 - cmp r8, #8 - blt _02383F5C - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - mov r2, #1 - add r1, r1, #0x138 + OV30_02383C70_OFFSET - add r4, r1, #0xcc00 - mov r1, r4 - bl ov30_02385C54 - mov r0, sl - add r1, r4, #1 - mov r2, #1 - bl ov30_02385C54 - mov r5, #0 -_02383FE8: - add r0, r4, r5, lsl #1 - ldrh r1, [r0, #2] - mov r0, sl - bl ov30_02385D14 - add r0, r4, r5, lsl #1 - ldrh r1, [r0, #0x12] - mov r0, sl - bl ov30_02385D14 - add r5, r5, #1 - cmp r5, #8 - blt _02383FE8 - ldrb r1, [r4, #0x22] - mov r0, sl - bl ov30_02385D54 - ldrb r1, [r4, #0x23] - mov r0, sl - bl ov30_02385D54 - ldrb r1, [r4, #0x24] - mov r0, sl - bl ov30_02385D54 - ldrb r1, [r4, #0x25] - mov r0, sl - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - mov r2, #1 - add r1, r1, #0x2fc + OV30_02383C70_OFFSET - add r4, r1, #0x12800 - mov r1, r4 - bl ov30_02385C54 - add r1, r4, #1 - mov r0, sl - mov r2, #1 - bl ov30_02385C54 - mov r0, sl - ldr r2, _02384094 ; =DUNGEON_PTR - ldr r1, _02384098 ; =0x00012AFE - ldr r2, [r2] - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02384090: .word OVERLAY30_JP_STRING_1 -_02384094: .word DUNGEON_PTR -_02384098: .word 0x00012AFE + OV30_02383C70_OFFSET - arm_func_end ov30_02383C70 - - arm_func_start ov30_0238409C -ov30_0238409C: ; 0x0238409C -#ifdef JAPAN -#define OV30_0238409C_OFFSET -0xA4 -#else -#define OV30_0238409C_OFFSET 0 -#endif - stmdb sp!, {r4, lr} - ldr r1, _02384200 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CE0 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23c + OV30_0238409C_OFFSET] - bl ov30_02385D54 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23d + OV30_0238409C_OFFSET] - bl ov30_02385D54 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23e + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23f + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x240 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x242 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x24f + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x243 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x24e + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x250 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x244 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x245 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x246 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x248 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldmia sp!, {r4, pc} - .align 2, 0 -_02384200: .word OVERLAY30_JP_STRING_1 -_02384204: .word DUNGEON_PTR - arm_func_end ov30_0238409C - - arm_func_start ov30_02384208 -ov30_02384208: ; 0x02384208 - stmdb sp!, {r4, lr} - ldr r2, _02384258 ; =DUNGEON_PTR - ldr r1, _0238425C ; =0x0002CB02 - ldr r2, [r2] - mov r4, r0 - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldr r0, _02384258 ; =DUNGEON_PTR - ldr r1, _02384260 ; =0x0002CB04 - ldr r2, [r0] - mov r0, r4 - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldr r0, _02384258 ; =DUNGEON_PTR - ldr r1, _02384264 ; =0x0002CB06 - ldr r2, [r0] - mov r0, r4 - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -#define OV30_02384208_OFFSET -0xA4 -#else -#define OV30_02384208_OFFSET 0 -#endif -_02384258: .word DUNGEON_PTR -_0238425C: .word 0x0002CB02 + OV30_02384208_OFFSET -_02384260: .word 0x0002CB04 + OV30_02384208_OFFSET -_02384264: .word 0x0002CB06 + OV30_02384208_OFFSET - arm_func_end ov30_02384208 - - arm_func_start ov30_02384268 -ov30_02384268: ; 0x02384268 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #2 - mov r2, #2 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #4 - mov r2, #2 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02384268 - - arm_func_start ov30_023842B0 -ov30_023842B0: ; 0x023842B0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - ldrh r1, [r4] - mov r5, r0 - bl ov30_02385D14 - ldrh r1, [r4, #2] - mov r0, r5 - bl ov30_02385D14 - mov r0, r5 - add r1, r4, #7 - 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} - arm_func_end ov30_023842B0 - - arm_func_start ov30_023842F4 -ov30_023842F4: ; 0x023842F4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - mov r3, r0 - mov r2, r1 - add r0, sp, #4 - mov r1, r3 - bl ov30_02385C8C - add r0, sp, #4 - add r1, sp, #0 - mov r2, #4 - bl ov30_02385CA4 - ldr r1, _023843F0 ; =OVERLAY30_JP_STRING_1 - add r0, sp, #4 - bl ov30_02385CF0 - ldr r1, _023843F4 ; =DUNGEON_PTR - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0xac - add r1, r1, #0x348 - add r1, r1, #0x400 - bl ov30_02385CA4 - ldr r1, _023843F0 ; =OVERLAY30_JP_STRING_1 - add r0, sp, #4 - bl ov30_02385CF0 - add r0, sp, #4 - bl ov30_02385EDC - ldr r6, _023843F4 ; =DUNGEON_PTR - ldr r1, _023843F8 ; =0x0002C9E6 - ldr r2, [r6] - mov r4, #0 - strh r0, [r2, r1] - add r5, r1, #4 - add r7, sp, #4 -_02384378: - mov r0, r7 - bl ov30_02385EC4 - ldr r1, [r6] - add r1, r1, r4, lsl #1 - add r4, r4, #1 - strh r0, [r1, r5] - cmp r4, #0x10 - blt _02384378 - add r0, sp, #4 - bl ov30_02384400 - add r0, sp, #4 - bl ov30_023848A0 - add r0, sp, #4 - bl ov30_02384A20 - add r0, sp, #4 - bl ov30_02384A94 - add r0, sp, #4 - bl ov30_02384B84 - add r0, sp, #4 - bl ov30_02384C6C - add r0, sp, #4 - bl ov30_02384CD4 - ldr r1, _023843FC ; =OVERLAY30_JP_STRING_2 - add r0, sp, #4 - bl ov30_02385CF0 - add r0, sp, #4 - bl ov30_02385CDC -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_023843F0: .word OVERLAY30_JP_STRING_1 -_023843F4: .word DUNGEON_PTR -#ifdef JAPAN -_023843F8: .word 0x0002C942 -#else -_023843F8: .word 0x0002C9E6 -#endif -_023843FC: .word OVERLAY30_JP_STRING_2 - arm_func_end ov30_023842F4 - - arm_func_start ov30_02384400 -ov30_02384400: ; 0x02384400 -#ifdef JAPAN -#define OV30_02384400_OFFSET -0xA4 -#else -#define OV30_02384400_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _02384830 ; =OVERLAY30_JP_STRING_1 - mov sl, r0 - bl ov30_02385CF0 - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc4 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc5 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc6 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc7 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc8 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc9 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xca + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - str r0, [r1, #0xcc + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - str r0, [r1, #0xd0 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strh r0, [r1, #0xd4 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strh r0, [r1, #0xd6 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strh r0, [r1, #0xd8 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xda + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r6, _02384834 ; =DUNGEON_PTR - mov r8, #0 - ldr r1, [r6] - mov fp, r8 - add r1, r1, #0x4000 - strh r0, [r1, #0xde + OV30_02384400_OFFSET] - mov r4, #0x14 - mov r5, #0x460 -_02384570: - mul sb, r8, r5 - mov r7, fp -_02384578: - ldr r1, [r6] - mov r0, sl - add r1, r1, #0xe0 + OV30_02384400_OFFSET - add r1, r1, #0x4000 - add r1, r1, sb - mla r1, r7, r4, r1 - bl ov30_0238483C - add r7, r7, #1 - cmp r7, #0x38 - blt _02384578 - add r8, r8, #1 - cmp r8, #0x20 - blt _02384570 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0x3c - add r1, r1, #0xcc00 -#else - add r1, r1, #0xce0 - add r1, r1, #0xc000 -#endif - bl ov30_02385F7C - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc40 - add r1, r1, #0xc000 -#else - add r1, r1, #0xe4 - add r1, r1, #0xcc00 -#endif - bl ov30_02385F7C - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0xe8 + OV30_02384400_OFFSET - add r1, r1, #0xcc00 - bl ov30_02385F7C - ldr r0, _02384834 ; =DUNGEON_PTR - ldr r4, _02384834 ; =DUNGEON_PTR - ldr r0, [r0] - mov r5, #0 - add r0, r0, #0xcc00 - ldrsh r1, [r0, #0xe8 + OV30_02384400_OFFSET] - cmp r1, #0xff - mvneq r1, #0 - streqh r1, [r0, #0xe8 + OV30_02384400_OFFSET] - ldr r0, _02384834 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrsh r1, [r0, #0xea + OV30_02384400_OFFSET] - cmp r1, #0xff - mvneq r1, #0 - streqh r1, [r0, #0xea + OV30_02384400_OFFSET] -_02384634: - ldr r1, [r4] - mov r0, sl - add r1, r1, #0xec + OV30_02384400_OFFSET - add r1, r1, #0xcc00 - add r1, r1, r5, lsl #2 - bl ov30_02385FB0 - add r5, r5, #1 - cmp r5, #8 - blt _02384634 - ldr r4, _02384834 ; =DUNGEON_PTR - mov r5, #0 -_02384660: - mov r0, sl - bl ov30_02385EF4 - ldr r1, [r4] - add r1, r1, r5 - add r1, r1, #0xc000 - add r5, r5, #1 - strb r0, [r1, #0xd0c + OV30_02384400_OFFSET] - cmp r5, #8 - blt _02384660 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc70 - add r1, r1, #0xc000 -#else - add r1, r1, #0x114 - add r1, r1, #0xcc00 -#endif - bl ov30_02385FE4 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc80 - add r1, r1, #0xc000 -#else - add r1, r1, #0x124 - add r1, r1, #0xcc00 -#endif - bl ov30_02385FE4 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc90 - add r1, r1, #0xc000 -#else - add r1, r1, #0x134 - add r1, r1, #0xcc00 -#endif - bl ov30_02386040 - mov r8, #0 - ldr r6, _02384834 ; =DUNGEON_PTR - mov fp, r8 - mov r4, #0x14 - mov r5, #0xa0 -_023846E0: - mul r7, r8, r5 - mov sb, fp -_023846E8: - ldr r1, [r6] - mov r0, sl -#ifdef JAPAN - add r1, r1, #0xbc - add r1, r1, #0xcc00 -#else - add r1, r1, #0xd60 - add r1, r1, #0xc000 -#endif - add r1, r1, r7 - mla r1, sb, r4, r1 - bl ov30_0238483C - mov r0, sl - bl ov30_02385EDC - ldr r1, [r6] - add r1, r1, r8, lsl #4 - add r1, r1, sb, lsl #1 -#ifdef JAPAN - add r1, r1, #0xd100 - add sb, sb, #1 - strh r0, [r1, #0xbc] -#else - add r1, r1, #0xd200 - add sb, sb, #1 - strh r0, [r1, #0x60] -#endif - cmp sb, #8 - blt _023846E8 - add r8, r8, #1 - cmp r8, #8 - blt _023846E0 - ldr r0, _02384834 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - mov r2, #0x26 - add r0, r0, #0x138 + OV30_02384400_OFFSET - add r4, r0, #0xcc00 - mov r0, r4 - bl memset - mov r0, sl - mov r1, r4 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - add r1, r4, #1 - mov r2, #1 - bl ov30_02385CA4 - mov r5, #0 -_0238477C: - mov r0, sl - bl ov30_02385EC4 - add r1, r4, r5, lsl #1 - strh r0, [r1, #2] - mov r0, sl - bl ov30_02385EC4 - add r1, r4, r5, lsl #1 - add r5, r5, #1 - strh r0, [r1, #0x12] - cmp r5, #8 - blt _0238477C - mov r0, sl - bl ov30_02385EF4 - strb r0, [r4, #0x22] - mov r0, sl - bl ov30_02385EF4 - strb r0, [r4, #0x23] - mov r0, sl - bl ov30_02385EF4 - strb r0, [r4, #0x24] - mov r0, sl - bl ov30_02385F54 - strb r0, [r4, #0x25] - ldr r0, _02384834 ; =DUNGEON_PTR - mov r1, #2 - ldr r0, [r0] - add r0, r0, #0x2fc + OV30_02384400_OFFSET - add r4, r0, #0x12800 - mov r0, r4 - bl MemZero - mov r0, sl - mov r1, r4 - mov r2, #1 - bl ov30_02385CA4 - add r1, r4, #1 - mov r0, sl - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EDC - ldr r2, _02384834 ; =DUNGEON_PTR - ldr r1, _02384838 ; =0x00012AFE - ldr r2, [r2] - strh r0, [r2, r1] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02384830: .word OVERLAY30_JP_STRING_1 -_02384834: .word DUNGEON_PTR -_02384838: .word 0x00012AFE + OV30_02384400_OFFSET - arm_func_end ov30_02384400 - - arm_func_start ov30_0238483C -ov30_0238483C: ; 0x0238483C - - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r1, #0 - mov r2, #0x14 - bl memset - mov r0, r5 - bl ov30_02385EC4 - strh r0, [r4] - mov r0, r5 - bl ov30_02385EC4 - strh r0, [r4, #2] - mov r0, r5 - add r1, r4, #7 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #6 - mov r2, #1 - bl ov30_02385CA4 - mov r0, #0 - str r0, [r4, #0xc] - str r0, [r4, #0x10] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_0238483C - - arm_func_start ov30_023848A0 -ov30_023848A0: ; 0x023848A0 -#ifdef JAPAN -#define OV30_023848A0_OFFSET -0xA4 -#else -#define OV30_023848A0_OFFSET 0 -#endif - stmdb sp!, {r4, lr} - ldr r1, _02384A18 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CF0 - ldr r1, _02384A1C ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0 - add r1, r1, #0x1a000 - str r2, [r1, #0x22c + OV30_023848A0_OFFSET] - bl ov30_02385EF4 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23c + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385EF4 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23d + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23e + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23f + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x240 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x242 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x24f + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x243 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x24e + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x250 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x244 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x245 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x246 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x248 + OV30_023848A0_OFFSET] - ldmia sp!, {r4, pc} - .align 2, 0 -_02384A18: .word OVERLAY30_JP_STRING_1 -_02384A1C: .word DUNGEON_PTR - arm_func_end ov30_023848A0 - - arm_func_start ov30_02384A20 -ov30_02384A20: ; 0x02384A20 - stmdb sp!, {r4, lr} - mov r4, r0 - bl ov30_02385EDC - ldr r2, _02384A80 ; =DUNGEON_PTR - ldr r1, _02384A84 ; =0x0002CB02 - ldr r2, [r2] - strh r0, [r2, r1] - mov r0, r4 - bl ov30_02385EDC - ldr r2, _02384A80 ; =DUNGEON_PTR - ldr r1, _02384A88 ; =0x0002CB04 - ldr r2, [r2] - strh r0, [r2, r1] - mov r0, r4 - bl ov30_02385EDC - ldr r2, _02384A80 ; =DUNGEON_PTR - ldr r1, _02384A8C ; =0x0002CB06 - ldr ip, [r2] - ldr r3, _02384A90 ; =0x000003E7 - strh r0, [ip, r1] - ldr r2, [r2] - sub r0, r1, #2 - strh r3, [r2, r0] - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -#define OV30_02384A20_OFFSET -0xA4 -#else -#define OV30_02384A20_OFFSET 0 -#endif -_02384A80: .word DUNGEON_PTR -_02384A84: .word 0x0002CB02 + OV30_02384A20_OFFSET -_02384A88: .word 0x0002CB04 + OV30_02384A20_OFFSET -_02384A8C: .word 0x0002CB06 + OV30_02384A20_OFFSET -_02384A90: .word 0x000003E7 - arm_func_end ov30_02384A20 - - arm_func_start ov30_02384A94 -ov30_02384A94: ; 0x02384A94 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0xc - mov r7, r0 - bl ov29_02344B1C - ldr r1, _02384B20 ; =OVERLAY30_JP_STRING_1 - mov r0, r7 - bl ov30_02385CF0 - mov r6, #0 - mov sb, r6 - mov sl, #1 - add r4, sp, #0 - add r5, sp, #4 - mov r8, r6 -_02384AC8: - mov r0, r7 - mov r1, r5 - bl ov30_02384B24 - mov r0, r7 - mov r1, r4 - bl ov30_02385F7C - ldrb r0, [sp, #4] - tst r0, #1 - movne r0, sl - moveq r0, sb - tst r0, #0xff - beq _02384B08 - mov r0, r4 - mov r1, r5 - mov r2, r8 - bl SpawnItem -_02384B08: - add r6, r6, #1 - cmp r6, #0x40 - blt _02384AC8 - bl ov29_02344B30 - add sp, sp, #0xc - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02384B20: .word OVERLAY30_JP_STRING_1 - arm_func_end ov30_02384A94 - - arm_func_start ov30_02384B24 -ov30_02384B24: ; 0x02384B24 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r1, #0 - mov r2, #6 - bl memset - mov r0, r5 - mov r1, r4 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #1 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #2 - mov r2, #2 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #4 - mov r2, #2 - bl ov30_02385CA4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02384B24 - - arm_func_start ov30_02384B84 -ov30_02384B84: ; 0x02384B84 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - ldr r1, _02384C68 ; =OVERLAY30_JP_STRING_1 - mov sl, r0 - bl ov30_02385CF0 - mov sb, #0 - mov r8, #6 - mov r7, sb - add r6, sp, #3 - mov fp, #1 -_02384BAC: - mov r0, sl - mov r1, r6 - mov r2, fp - strb r8, [sp, #3] - strb r7, [sp, #2] - strb r7, [sp, #1] - bl ov30_02385CA4 - mov r0, sl - add r1, sp, #2 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - add r1, sp, #1 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - add r1, sp, #0 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385F54 - mov r5, r0 - mov r0, sl - add r1, sp, #4 - bl ov30_02385F7C - ldrb r0, [sp, #3] - cmp r0, #0xff - beq _02384C54 - ldrsh r0, [sp, #4] - ldrsh r1, [sp, #6] - bl GetTileSafe - mov r4, r0 - ldrb r0, [sp, #3] - ldrb r2, [sp, #2] - add r1, sp, #4 - mov r3, #0 - bl SpawnTrap - movs r1, r0 - beq _02384C54 - mov r0, r4 - mov r2, r5 - bl BindTrapToTile -_02384C54: - add sb, sb, #1 - cmp sb, #0x40 - blt _02384BAC - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02384C68: .word OVERLAY30_JP_STRING_1 - arm_func_end ov30_02384B84 - - arm_func_start ov30_02384C6C -ov30_02384C6C: ; 0x02384C6C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr r1, _02384CCC ; =OVERLAY30_JP_STRING_1 - mov r6, r0 - bl ov30_02385CF0 - mov r0, r6 - bl ov30_02385F54 - mov r5, r0 - mov r0, r6 - bl ov30_02385F54 - mov r4, r0 - add r1, sp, #0 - mov r0, r6 - bl ov30_02385F7C - cmp r5, #0 - beq _02384CC4 - add r0, sp, #0 - bl ov29_02338768 - ldr r0, _02384CD0 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x19000 -#ifdef JAPAN - strb r4, [r0, #0x7a8] -#else - strb r4, [r0, #0x84c] -#endif -_02384CC4: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02384CCC: .word OVERLAY30_JP_STRING_1 -_02384CD0: .word DUNGEON_PTR - arm_func_end ov30_02384C6C - - arm_func_start ov30_02384CD4 -ov30_02384CD4: ; 0x02384CD4 -#ifdef JAPAN -#define OV30_02384CD4_OFFSET -0xA4 -#else -#define OV30_02384CD4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _02384E20 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CF0 - mov r0, r4 - bl ov30_02385F0C - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - str r0, [r1, #0xe2c + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F0C - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - str r0, [r1, #0xe30 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe34 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe35 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe36 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe37 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe38 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe39 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe3c + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385EC4 - ldr r1, _02384E24 ; =DUNGEON_PTR - mov r6, #0 - ldr r1, [r1] - mov r5, #1 -#ifdef JAPAN - add r1, r1, #0x3d00 - strh r0, [r1, #0x96] -#else - add r1, r1, #0x3e00 - strh r0, [r1, #0x3a] -#endif -_02384DDC: - mov r0, r4 - mov r1, r5 - mov r2, r6 - bl ov30_02384E28 - add r6, r6, #1 - cmp r6, #4 - blt _02384DDC - mov r6, #0 - mov r5, r6 -_02384E00: - mov r0, r4 - mov r1, r5 - mov r2, r6 - bl ov30_02384E28 - add r6, r6, #1 - cmp r6, #0x10 - blt _02384E00 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02384E20: .word OVERLAY30_JP_STRING_1 -_02384E24: .word DUNGEON_PTR - arm_func_end ov30_02384CD4 + .public ov30_02384B24 arm_func_start ov30_02384E28 ov30_02384E28: ; 0x02384E28 diff --git a/include/dungeon.h b/include/dungeon.h index c2de3edb..b35fff5d 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -100,8 +100,7 @@ struct dungeon_generation_info { // 0x8C24: Position of the Hidden Stairs spawn, or (-1, -1) if no Hidden Stairs struct position hidden_stairs_pos; // 0x8C28: Spawn position of each of the team members - struct position individual_team_spawn_positions[4]; - // There's another 6 words that look like spawn positions right after these 4 + struct position individual_team_spawn_positions[8]; }; // Thresholds are ascending cumulative weights (0-10000) @@ -1259,23 +1258,7 @@ struct dungeon { u8 field_0x3fc3; struct trap traps[64]; // 0x3FC4: Info for all the traps on the floor struct dungeon_generation_info gen_info; // 0x40C4: Stuff involved with dungeon generation - u8 field_0xccfc; - u8 field_0xccfd; - u8 field_0xccfe; - u8 field_0xccff; - u8 field_0xcd00; - u8 field_0xcd01; - u8 field_0xcd02; - u8 field_0xcd03; - u8 field_0xcd04; - u8 field_0xcd05; - u8 field_0xcd06; - u8 field_0xcd07; - u8 field_0xcd08; - u8 field_0xcd09; - u8 field_0xcd0a; - u8 field_0xcd0b; - // 0xCD0C: Appears to be an array for the team. Likely only the first 4 entries are used. + // 0xCD0C: Appears to be an array for the team. Likely only the first 4 entries are used. // Possibly related to dungeon_generation_info::individual_team_spawn_positions? Possibly the // direction to spawn each team member in? enum direction_id unk_team_direction_array[8]; @@ -1297,134 +1280,7 @@ struct dungeon { struct weather weather; // 0xCD38 // 0xCD60: Seems to be tile data for tiles within fixed rooms struct tile fixed_room_tiles[8][8]; - u8 field_0xd260; - u8 field_0xd261; - u8 field_0xd262; - u8 field_0xd263; - u8 field_0xd264; - u8 field_0xd265; - u8 field_0xd266; - u8 field_0xd267; - u8 field_0xd268; - u8 field_0xd269; - u8 field_0xd26a; - u8 field_0xd26b; - u8 field_0xd26c; - u8 field_0xd26d; - u8 field_0xd26e; - u8 field_0xd26f; - u8 field_0xd270; - u8 field_0xd271; - u8 field_0xd272; - u8 field_0xd273; - u8 field_0xd274; - u8 field_0xd275; - u8 field_0xd276; - u8 field_0xd277; - u8 field_0xd278; - u8 field_0xd279; - u8 field_0xd27a; - u8 field_0xd27b; - u8 field_0xd27c; - u8 field_0xd27d; - u8 field_0xd27e; - u8 field_0xd27f; - u8 field_0xd280; - u8 field_0xd281; - u8 field_0xd282; - u8 field_0xd283; - u8 field_0xd284; - u8 field_0xd285; - u8 field_0xd286; - u8 field_0xd287; - u8 field_0xd288; - u8 field_0xd289; - u8 field_0xd28a; - u8 field_0xd28b; - u8 field_0xd28c; - u8 field_0xd28d; - u8 field_0xd28e; - u8 field_0xd28f; - u8 field_0xd290; - u8 field_0xd291; - u8 field_0xd292; - u8 field_0xd293; - u8 field_0xd294; - u8 field_0xd295; - u8 field_0xd296; - u8 field_0xd297; - u8 field_0xd298; - u8 field_0xd299; - u8 field_0xd29a; - u8 field_0xd29b; - u8 field_0xd29c; - u8 field_0xd29d; - u8 field_0xd29e; - u8 field_0xd29f; - u8 field_0xd2a0; - u8 field_0xd2a1; - u8 field_0xd2a2; - u8 field_0xd2a3; - u8 field_0xd2a4; - u8 field_0xd2a5; - u8 field_0xd2a6; - u8 field_0xd2a7; - u8 field_0xd2a8; - u8 field_0xd2a9; - u8 field_0xd2aa; - u8 field_0xd2ab; - u8 field_0xd2ac; - u8 field_0xd2ad; - u8 field_0xd2ae; - u8 field_0xd2af; - u8 field_0xd2b0; - u8 field_0xd2b1; - u8 field_0xd2b2; - u8 field_0xd2b3; - u8 field_0xd2b4; - u8 field_0xd2b5; - u8 field_0xd2b6; - u8 field_0xd2b7; - u8 field_0xd2b8; - u8 field_0xd2b9; - u8 field_0xd2ba; - u8 field_0xd2bb; - u8 field_0xd2bc; - u8 field_0xd2bd; - u8 field_0xd2be; - u8 field_0xd2bf; - u8 field_0xd2c0; - u8 field_0xd2c1; - u8 field_0xd2c2; - u8 field_0xd2c3; - u8 field_0xd2c4; - u8 field_0xd2c5; - u8 field_0xd2c6; - u8 field_0xd2c7; - u8 field_0xd2c8; - u8 field_0xd2c9; - u8 field_0xd2ca; - u8 field_0xd2cb; - u8 field_0xd2cc; - u8 field_0xd2cd; - u8 field_0xd2ce; - u8 field_0xd2cf; - u8 field_0xd2d0; - u8 field_0xd2d1; - u8 field_0xd2d2; - u8 field_0xd2d3; - u8 field_0xd2d4; - u8 field_0xd2d5; - u8 field_0xd2d6; - u8 field_0xd2d7; - u8 field_0xd2d8; - u8 field_0xd2d9; - u8 field_0xd2da; - u8 field_0xd2db; - u8 field_0xd2dc; - u8 field_0xd2dd; - u8 field_0xd2de; - u8 field_0xd2df; + s16 field_0xd260[8][8]; // 0xD2E0: Appears to keep track of what tiles are the fixed room tiles when generating // a fixed room that isn't the whole floor. u8 fixed_room_room_index; diff --git a/include/overlay_30.h b/include/overlay_30.h index 25baa944..0b49fcd9 100644 --- a/include/overlay_30.h +++ b/include/overlay_30.h @@ -15,7 +15,21 @@ 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); - +void ov30_023831E8(void *buffer, struct entity* entity); +void ov30_02383C70(void *buffer); +void ov30_0238409C(void *buffer); +void ov30_02384208(void *buffer); +void ov30_02384268(void *buffer, struct item *item); +void ov30_023842B0(void *buffer, struct tile* tile); +void ov30_023842F4(void *buffer, s32 arg1); +void ov30_02384400(void *buffer); +void ov30_0238483C(void *buffer, struct tile* tile); +void ov30_023848A0(void *buffer); +void ov30_02384A20(void *buffer); +void ov30_02384A94(void *buffer); +void ov30_02384B24(void *buffer, struct item *item); +void ov30_02384B84(void *buffer); +void ov30_02384C6C(void *buffer); +void ov30_02384CD4(void *buffer); #endif // PMD_SKY_OVERLAY_30_H diff --git a/src/overlay_30_init.c b/src/overlay_30_init.c index 4c7329ea..228ccf55 100644 --- a/src/overlay_30_init.c +++ b/src/overlay_30_init.c @@ -1,6 +1,8 @@ #include "overlay_30.h" #include "dungeon.h" #include "overlay_29_022E1610.h" +#include "overlay_29_02344AF8.h" +#include "dungeon_map_access.h" extern struct dungeon *DUNGEON_PTR; @@ -150,13 +152,6 @@ void sub_02029F88(s32, s32, s32); void sub_02029FBC(); s32 sub_02048DC4(s32); 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*); @@ -164,16 +159,17 @@ 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 */ +void ov30_02385E20(void *, void *); +void ov30_02385E48(void *, void *); +void ov30_02385E90(void *, void *); s32 ov30_02382A34(void) { @@ -413,9 +409,9 @@ void ov30_02383084(void *buffer) } } -void ov30_023831E8(void *arg0, struct entity* arg1) +void ov30_023831E8(void *buffer, struct entity* entity) { - struct monster sp1C; + struct monster monster; s32 sp18; s32 sp14; s32 sp10; @@ -430,246 +426,677 @@ void ov30_023831E8(void *arg0, struct entity* arg1) u8 sp2; u8 sp1; u8 sp0; - struct monster* var_r6; + struct monster* monster_ptr; s32 var_r5; - u8 var_r0; - u8 var_r0_2; + bool8 valid_entity; + bool8 valid_entity_type; sp18 = 0; sp14 = 1; - ov30_02385D54(arg0, 0xAA); - ov30_02385D54(arg0, 0x55); - if (arg1 == NULL) { - var_r0 = 0; + ov30_02385D54(buffer, 0xAA); + ov30_02385D54(buffer, 0x55); + if (entity == NULL) { + valid_entity = FALSE; } else { - if (arg1->type != 0) { - var_r0_2 = 1; + if (entity->type != ENTITY_NOTHING) { + valid_entity_type = TRUE; } else { - var_r0_2 = 0; + valid_entity_type = FALSE; } - var_r0 = var_r0_2; + valid_entity = valid_entity_type; } - 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); + if (valid_entity) { + monster_ptr = (struct monster *)entity->info; + ov30_02385C54(buffer, &sp14, 1); + ov30_02385C54(buffer, &entity->pos.x, 1); + ov30_02385C54(buffer, &entity->pos.y, 1); + ov30_02385C54(buffer, &entity->is_visible, 1); + ov30_02385C54(buffer, &entity->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); + memset(&monster, 0, sizeof(struct monster)); + monster_ptr = &monster; + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &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); + ov30_02385D14(buffer, monster_ptr->flags); + spC = monster_ptr->apparent_id; + ov30_02385C54(buffer, (s32* ) &spC, 2); + spA = monster_ptr->id; + ov30_02385C54(buffer, (s32* ) &spA, 2); + ov30_02385DD4(buffer, monster_ptr->is_not_team_member); + ov30_02385DD4(buffer, monster_ptr->is_team_leader); + ov30_02385DD4(buffer, monster_ptr->is_ally); + ov30_02385D54(buffer, monster_ptr->shopkeeper); + ov30_02385D54(buffer, monster_ptr->level); + ov30_02385D54(buffer, (u8) monster_ptr->team_index); + ov30_02385D54(buffer, monster_ptr->joined_at); + ov30_02385D54(buffer, monster_ptr->joined_at_floor); + ov30_02385D34(buffer, monster_ptr->iq); + ov30_02385D34(buffer, monster_ptr->hp); + ov30_02385D34(buffer, monster_ptr->max_hp_stat); + ov30_02385D34(buffer, monster_ptr->max_hp_boost); + ov30_02385D34(buffer, monster_ptr->field_0x14); + ov30_02385D54(buffer, monster_ptr->offensive_stats[0]); + ov30_02385D54(buffer, monster_ptr->offensive_stats[1]); + ov30_02385D54(buffer, monster_ptr->defensive_stats[0]); + ov30_02385D54(buffer, monster_ptr->defensive_stats[1]); + ov30_02385D74(buffer, monster_ptr->exp); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.offensive_stages[0]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.offensive_stages[1]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.defensive_stages[0]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.defensive_stages[1]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.hit_chance_stages[0]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.hit_chance_stages[1]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.flash_fire_boost); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.offensive_multipliers[0]); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.offensive_multipliers[1]); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.defensive_multipliers[0]); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.defensive_multipliers[1]); + ov30_02385C54(buffer, &monster_ptr->action.direction, 1); + ov30_02385C54(buffer, &monster_ptr->action.item_target_position.x, 1); + ov30_02385C54(buffer, &monster_ptr->action.item_target_position.y, 1); + sp7 = monster_ptr->types[0]; + ov30_02385C54(buffer, (s32* ) &sp7, 1); + sp6 = monster_ptr->types[1]; + ov30_02385C54(buffer, (s32* ) &sp6, 1); + sp5 = monster_ptr->abilities[0]; + ov30_02385C54(buffer, (s32* ) &sp5, 1); + sp4 = monster_ptr->abilities[1]; + ov30_02385C54(buffer, (s32* ) &sp4, 1); + ov30_02384268(buffer, &monster_ptr->held_item); + sp8 = monster_ptr->previous_held_item_id; + ov30_02385C54(buffer, (s32* ) &sp8, 2); for(var_r5 = 0; var_r5 < NUM_PREV_POS; var_r5++) { - ov30_02385DF8(arg0, &var_r6->prev_pos[var_r5]); + ov30_02385DF8(buffer, &monster_ptr->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(buffer, &monster_ptr->ai_target.ai_objective, 1); + ov30_02385DD4(buffer, monster_ptr->ai_target.ai_not_next_to_target); + ov30_02385DD4(buffer, monster_ptr->ai_target.ai_targeting_enemy); + ov30_02385DD4(buffer, monster_ptr->ai_target.ai_turning_around); + ov30_02385D14(buffer, monster_ptr->ai_target.ai_target_spawn_genid); + ov30_02385DF8(buffer, &monster_ptr->ai_target.ai_target_pos); - ov30_02385C54(arg0, &var_r6->iq_skill_menu_flags, 0x45); - ov30_02385C54(arg0, &var_r6->iq_skill_flags, 0x45); + ov30_02385C54(buffer, &monster_ptr->iq_skill_menu_flags, 0x45); + ov30_02385C54(buffer, &monster_ptr->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); + sp3 = monster_ptr->tactic; + ov30_02385C54(buffer, (s32* ) &sp3, 1); + ov30_02385D34(buffer, monster_ptr->hidden_power_base_power); + sp2 = monster_ptr->hidden_power_type; + ov30_02385C54(buffer, (s32* ) &sp2, 1); + ov30_02385D74(buffer, monster_ptr->unique_id); + ov30_02385D74(buffer, monster_ptr->wrap_pair_unique_id); + ov30_02385D74(buffer, monster_ptr->bide_damage_tally); + ov30_02385C54(buffer, &monster_ptr->sleep_class_status.sleep, 1); + ov30_02385D54(buffer, monster_ptr->sleep_class_status.sleep_turns); + ov30_02385C54(buffer, &monster_ptr->burn_class_status.burn, 1); + ov30_02385D54(buffer, monster_ptr->burn_class_status.burn_turns); + ov30_02385D54(buffer, monster_ptr->burn_class_status.burn_damage_countdown); + ov30_02385D54(buffer, monster_ptr->burn_class_status.badly_poisoned_damage_count); + ov30_02385C54(buffer, &monster_ptr->frozen_class_status.freeze, 1); + ov30_02385D54(buffer, monster_ptr->frozen_class_status.freeze_turns); + ov30_02385D54(buffer, monster_ptr->frozen_class_status.freeze_damage_countdown); + ov30_02385D74(buffer, monster_ptr->frozen_class_status.constriction_animation); + ov30_02385C54(buffer, &monster_ptr->cringe_class_status.cringe, 1); + ov30_02385D54(buffer, monster_ptr->cringe_class_status.cringe_turns); + ov30_02385C54(buffer, &monster_ptr->bide_class_status.bide, 1); + ov30_02385D54(buffer, monster_ptr->bide_class_status.bide_turns); + ov30_02385D54(buffer, monster_ptr->bide_class_status.bide_move_slot); + ov30_02385C54(buffer, &monster_ptr->reflect_class_status.reflect, 1); + ov30_02385D54(buffer, monster_ptr->reflect_class_status.reflect_turns); + ov30_02385D54(buffer, monster_ptr->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(buffer, &monster_ptr->curse_class_status.curse, 1); + ov30_02385DD4(buffer, monster_ptr->curse_class_status.curse_applier_non_team_member_flag); + ov30_02385DD4(buffer, monster_ptr->curse_class_status.dec); + ov30_02385D54(buffer, monster_ptr->curse_class_status.curse_turns); + ov30_02385D54(buffer, monster_ptr->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(buffer, &monster_ptr->leech_seed_class_status.leech_seed, 1); + ov30_02385D74(buffer, monster_ptr->leech_seed_class_status.statuses_applier_id); + ov30_02385D54(buffer, monster_ptr->leech_seed_class_status.leech_seed_source_monster_index); + ov30_02385D54(buffer, monster_ptr->leech_seed_class_status.leech_seed_turns); + ov30_02385D54(buffer, monster_ptr->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(buffer, &monster_ptr->sure_shot_class_status.sure_shot, 1); + ov30_02385D54(buffer, monster_ptr->sure_shot_class_status.sure_shot_turns); - ov30_02385C54(arg0, &var_r6->long_toss_class_status.status, 1); + ov30_02385C54(buffer, &monster_ptr->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); + ov30_02385C54(buffer, &monster_ptr->invisible_class_status.status, 1); + ov30_02385D54(buffer, monster_ptr->invisible_class_status.turns); + ov30_02385C54(buffer, &monster_ptr->blinker_class_status.blinded, 1); + ov30_02385D54(buffer, monster_ptr->blinker_class_status.blinded_turns); + ov30_02385C54(buffer, &monster_ptr->muzzled, 1); + ov30_02385D54(buffer, monster_ptr->muzzled_turns); + ov30_02385C54(buffer, &monster_ptr->miracle_eye, 1); + ov30_02385D54(buffer, monster_ptr->miracle_eye_turns); + ov30_02385C54(buffer, &monster_ptr->magnet_rise, 1); + ov30_02385D54(buffer, monster_ptr->magnet_rise_turns); + ov30_02385DD4(buffer, monster_ptr->power_ears); + ov30_02385DD4(buffer, monster_ptr->scanning); + ov30_02385DD4(buffer, monster_ptr->stair_spotter); + ov30_02385DD4(buffer, monster_ptr->pickup_flag); #ifndef JAPAN - ov30_02385DD4(arg0, var_r6->in_action); + ov30_02385DD4(buffer, monster_ptr->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); + ov30_02385DD4(buffer, monster_ptr->grudge); + ov30_02385D54(buffer, monster_ptr->exp_yield); + ov30_02385DD4(buffer, monster_ptr->exposed); + ov30_02385DD4(buffer, monster_ptr->type_changed); + ov30_02385DD4(buffer, monster_ptr->boss_flag); + ov30_02385D54(buffer, monster_ptr->terrified); + ov30_02385D54(buffer, monster_ptr->terrified_turns); + ov30_02385DD4(buffer, monster_ptr->use_held_item); + ov30_02385D54(buffer, monster_ptr->perish_song_turns); + ov30_02385D54(buffer, monster_ptr->no_slip_cap_counter); + ov30_02385D54(buffer, monster_ptr->field_0x10a); + sp1 = monster_ptr->two_turn_move_invincible; + ov30_02385C54(buffer, (s32* ) &sp1, 1); + sp0 = monster_ptr->decoy_ai_tracker; + ov30_02385C54(buffer, (s32* ) &sp0, 1); + sp10 = monster_ptr->speed_stage; + ov30_02385C54(buffer, &sp10, 4); + ov30_02385EB8(buffer, monster_ptr->speed_up_counters, 5); + ov30_02385EB8(buffer, monster_ptr->speed_down_counters, 5); + ov30_02385D54(buffer, monster_ptr->stockpile_stage); + ov30_02385D54(buffer, monster_ptr->field_0x11f); + ov30_02385D54(buffer, (u8) monster_ptr->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); + struct move *move = &monster_ptr->moves.moves[move_index]; + ov30_02385D54(buffer, monster_ptr->moves.moves[move_index].flags0); + ov30_02385D54(buffer, monster_ptr->moves.moves[move_index].flags2); + ov30_02385C54(buffer, &move->id, 2); + ov30_02385D54(buffer, monster_ptr->moves.moves[move_index].pp); + ov30_02385D54(buffer, monster_ptr->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); + ov30_02385D54(buffer, monster_ptr->moves.struggle_move_flags); + ov30_02385D34(buffer, monster_ptr->belly.integer); + ov30_02385D34(buffer, monster_ptr->belly.fractional); + ov30_02385D34(buffer, monster_ptr->max_belly.integer); + ov30_02385D34(buffer, monster_ptr->max_belly.fractional); + ov30_02385DD4(buffer, monster_ptr->ai_ally_skip); + ov30_02385DD4(buffer, monster_ptr->ai_next_to_target); + ov30_02385DD4(buffer, monster_ptr->waiting); + ov30_02385DD4(buffer, monster_ptr->famished); + ov30_02385DD4(buffer, monster_ptr->already_acted); + ov30_02385DD4(buffer, monster_ptr->should_evolve); + ov30_02385DD4(buffer, monster_ptr->using_charged_move); + ov30_02385DD4(buffer, monster_ptr->hit_grudge_monster); + ov30_02385DD4(buffer, monster_ptr->field_0x156); + ov30_02385D14(buffer, monster_ptr->state_flags); + ov30_02385D14(buffer, monster_ptr->prev_state_flags); + ov30_02385DD4(buffer, monster_ptr->apply_flash_fire_boost); + ov30_02385D54(buffer, monster_ptr->rollout_hit_counter); + ov30_02385DD4(buffer, monster_ptr->memento_warp_flag); + ov30_02385DD4(buffer, monster_ptr->overheat_special_attack_drop_flag); + ov30_02385DD4(buffer, monster_ptr->display_shadow); + ov30_02385D54(buffer, monster_ptr->sleep_talk_direction); + ov30_02385D54(buffer, monster_ptr->snore_direction); + ov30_02385D54(buffer, monster_ptr->field_0x179); + ov30_02385D54(buffer, monster_ptr->field_0x17a); + ov30_02385D54(buffer, monster_ptr->field_0x17b); + ov30_02385D54(buffer, monster_ptr->field_0x17c); + ov30_02385DF8(buffer, &monster_ptr->target_pos); + ov30_02385DB4(buffer, monster_ptr->field_0x188); + ov30_02385D14(buffer, monster_ptr->contact_ability_trigger_bitflags); + ov30_02385D94(buffer, monster_ptr->exclusive_item_trigger_bitflags); + ov30_02385D14(buffer, monster_ptr->field_0x190); + ov30_02385D34(buffer, monster_ptr->hp_fractional); + ov30_02385D34(buffer, monster_ptr->mobile_turn_timer); + ov30_02385D74(buffer, monster_ptr->unk_exp_tracker); + ov30_02385D54(buffer, monster_ptr->monster_behavior); + ov30_02385D54(buffer, monster_ptr->practice_swinger_flag); + ov30_02385D54(buffer, monster_ptr->anger_point_flag); + ov30_02385D34(buffer, monster_ptr->field_0x168); + ov30_02385D34(buffer, monster_ptr->bide_move_id); + ov30_02385D54(buffer, monster_ptr->force_turn); for(int var_r4 = 0; var_r4 < 5; var_r4++) { - ov30_02385D54(arg0, var_r6->unk16B[var_r4]); + ov30_02385D54(buffer, monster_ptr->unk16B[var_r4]); } } +void ov30_02383C70(void *buffer) +{ + struct position pos; + struct weather* weather; + void* gravity; + + int tile_index_x; + int tile_index_y; + + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.force_create_monster_house); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.locked_door_opened); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.kecleon_shop_spawned); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.unk_one_room_flag); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.dough_seed_extra_poke_flag); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.monster_house_room); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.unk_fixed_room_static_monster_tracker); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.hidden_stairs_type); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.hidden_floor_type); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.tileset_id); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.music_table_idx); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.staircase_visual_idx); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.fixed_room_id); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.floor_generation_attempts); + + for(tile_index_y = 0; tile_index_y < DUNGEON_MAX_SIZE_Y; tile_index_y++) + { + for(tile_index_x = 0; tile_index_x < DUNGEON_MAX_SIZE_X; tile_index_x++) + { + ov30_023842B0(buffer, &DUNGEON_PTR->gen_info.tiles[tile_index_y][tile_index_x]); + } + } + + ov30_02385DF8(buffer, &DUNGEON_PTR->gen_info.team_spawn_pos); + ov30_02385DF8(buffer, &DUNGEON_PTR->gen_info.stairs_pos); + + pos = DUNGEON_PTR->gen_info.hidden_stairs_pos; + if (pos.x == -1) { + pos.x = 0xFF; + } + if (pos.y == -1) { + pos.y = 0xFF; + } + ov30_02385DF8(buffer, &pos); + + for(int var_r5 = 0; var_r5 < 8; var_r5++) + { + ov30_02385E20(buffer, &DUNGEON_PTR->gen_info.individual_team_spawn_positions[var_r5]); + } + + for(int var_r5_2 = 0; var_r5_2 < 8; var_r5_2++) + { + ov30_02385D54(buffer, DUNGEON_PTR->unk_team_direction_array[var_r5_2]); + } + + ov30_02385E48(buffer, &DUNGEON_PTR->kecleon_shop_min_x); + ov30_02385E48(buffer, &DUNGEON_PTR->fixed_room_min_x); + ov30_02385E90(buffer, &DUNGEON_PTR->fixed_room_width); + + for(tile_index_y = 0; tile_index_y < 8; tile_index_y++) + { + for(tile_index_x = 0; tile_index_x < 8; tile_index_x++) + { + ov30_023842B0(buffer, &DUNGEON_PTR->fixed_room_tiles[tile_index_y][tile_index_x]); + ov30_02385D34(buffer, DUNGEON_PTR->field_0xd260[tile_index_y][tile_index_x]); + } + } + + weather = &DUNGEON_PTR->weather; + ov30_02385C54(buffer, &weather->weather, 1); + ov30_02385C54(buffer, &weather->natural_weather, 1); + + for(int weather_index = 0; weather_index < 8; weather_index++) + { + ov30_02385D14(buffer, (weather->weather_turns[weather_index])); + ov30_02385D14(buffer, (weather->artificial_permaweather_turns[weather_index])); + } + + ov30_02385D54(buffer, weather->weather_damage_counter); + ov30_02385D54(buffer, weather->mud_sport_turns); + ov30_02385D54(buffer, weather->water_sport_turns); + ov30_02385DD4(buffer, weather->nullify_weather); + + gravity = &DUNGEON_PTR->gravity; + ov30_02385C54(buffer, gravity, 1); + ov30_02385C54(buffer, gravity + 1, 1); + + ov30_02385D34(buffer, DUNGEON_PTR->victory_counter); +} + +void ov30_0238409C(void *buffer) +{ + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + ov30_02385D54(buffer, DUNGEON_PTR->display_data.field_0x20); + ov30_02385D54(buffer, DUNGEON_PTR->display_data.visibility_range); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.blinded); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.luminous); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.natural_lighting); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_enemies); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x33); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_items); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x32); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x34); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_traps); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.hallucinating); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_stairs); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x2C); +} + +void ov30_02384208(void *buffer) +{ + ov30_02385D34(buffer, DUNGEON_PTR->field_0x2cb02); + ov30_02385D34(buffer, DUNGEON_PTR->field_0x2cb04); + ov30_02385D34(buffer, DUNGEON_PTR->dungeon_music_playing_id); +} + +void ov30_02384268(void *buffer, struct item *item) +{ + ov30_02385C54(buffer, &item->flags, 1); + ov30_02385C54(buffer, &item->held_by, 1); + ov30_02385C54(buffer, &item->quantity, 2); + ov30_02385C54(buffer, &item->id, 2); +} + +void ov30_023842B0(void *buffer, struct tile* tile) +{ + ov30_02385D14(buffer, tile->terrain_flags); + ov30_02385D14(buffer, tile->spawn_or_visibility_flags.spawn); + ov30_02385C54(buffer, &tile->room, 1); + ov30_02385C54(buffer, &tile->field_0x6, 1); +} + +#ifndef EUROPE +void ov29_022FB920(); +#else +void ov29_022FB920(s32); +#endif + +void ov30_02384C6C(void*); +void ov30_02384CD4(void*); +void ov30_02385C8C(void*, void *, s32); +void ov30_02385CA4(void*, void*, s32); +void ov30_02385CF0(void*, u8*); +s16 ov30_02385EC4(void*); +s16 ov30_02385EDC(void*); +void SpawnItem(void*, struct item*, s32); +void MemZero(void*, s32); +s8 ov30_02385EF4(void *); /* extern */ +s8 ov30_02385F54(void *); /* extern */ +void ov30_02385F7C(void *, struct position*); +void ov30_02385FB0(void *, void*); /* extern */ +void ov30_02385FE4(void *, void*); /* extern */ +void ov30_02386040(void *, void*); /* extern */ +void BindTrapToTile(struct tile*, struct trap*, s32); +struct trap *SpawnTrap(u8, struct position*, u8, s32); +void ov29_02338768(struct position*); +s32 ov30_02385F0C(void *); +void ov30_02384E28(void *, s32, s32); + +void ov30_023842F4(void *buffer, s32 arg1) +{ + u8 sp4[0xA]; + u32 sp0; + + ov30_02385C8C(&sp4, buffer, arg1); + ov30_02385CA4(&sp4, &sp0, 4); + ov30_02385CF0(&sp4, OVERLAY30_JP_STRING_1); + ov30_02385CA4(&sp4, &DUNGEON_PTR->id, 0xAC); + ov30_02385CF0(&sp4, OVERLAY30_JP_STRING_1); + + DUNGEON_PTR->highest_enemy_level = ov30_02385EDC(&sp4); + + for(int var_r4 = 0; var_r4 < 0x10; var_r4++) + { + DUNGEON_PTR->spawn_table_entries_chosen[var_r4] = ov30_02385EC4(&sp4); + } + + ov30_02384400(&sp4); + ov30_023848A0(&sp4); + ov30_02384A20(&sp4); + ov30_02384A94(&sp4); + ov30_02384B84(&sp4); + ov30_02384C6C(&sp4); + ov30_02384CD4(&sp4); + ov30_02385CF0(&sp4, OVERLAY30_JP_STRING_2); + ov30_02385CDC(&sp4); +#ifdef EUROPE + ov29_022FB920(0); +#else + ov29_022FB920(); +#endif +} + +void ov30_02384400(void *buffer) { + + struct weather* weather; + void* temp_r4_2; + s32 tile_index_y; + s32 tile_index_x; + + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + DUNGEON_PTR->gen_info.force_create_monster_house = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.locked_door_opened = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.kecleon_shop_spawned = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.unk_one_room_flag = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.dough_seed_extra_poke_flag = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.monster_house_room = ov30_02385EF4(buffer); + DUNGEON_PTR->gen_info.unk_fixed_room_static_monster_tracker = ov30_02385EF4(buffer); + DUNGEON_PTR->gen_info.hidden_stairs_type = (enum hidden_stairs_type) ov30_02385EF4(buffer); + DUNGEON_PTR->gen_info.hidden_floor_type = (enum hidden_stairs_type) ov30_02385EF4(buffer); + + DUNGEON_PTR->gen_info.tileset_id = ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.music_table_idx = ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.staircase_visual_idx = ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.fixed_room_id = (enum fixed_room_id) ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.floor_generation_attempts = ov30_02385EDC(buffer); + + for(tile_index_x = 0; tile_index_x < DUNGEON_MAX_SIZE_Y; tile_index_x++) + { + for(tile_index_y = 0; tile_index_y < DUNGEON_MAX_SIZE_X; tile_index_y++) + { + ov30_0238483C(buffer, &DUNGEON_PTR->gen_info.tiles[tile_index_x][tile_index_y]); + } + } + + ov30_02385F7C(buffer, &DUNGEON_PTR->gen_info.team_spawn_pos); + ov30_02385F7C(buffer, &DUNGEON_PTR->gen_info.stairs_pos); + ov30_02385F7C(buffer, &DUNGEON_PTR->gen_info.hidden_stairs_pos); + + + if (DUNGEON_PTR->gen_info.hidden_stairs_pos.x == 0xFF) { + DUNGEON_PTR->gen_info.hidden_stairs_pos.x = -1; + } + if (DUNGEON_PTR->gen_info.hidden_stairs_pos.y == 0xFF) { + DUNGEON_PTR->gen_info.hidden_stairs_pos.y = -1; + } + + for(int var_r5_2 = 0; var_r5_2 < 8; var_r5_2++) + { + ov30_02385FB0(buffer, &DUNGEON_PTR->gen_info.individual_team_spawn_positions[var_r5_2]); + } + + for(int var_r5_2 = 0; var_r5_2 < 8; var_r5_2++) + { + DUNGEON_PTR->unk_team_direction_array[var_r5_2] = (enum direction_id) ov30_02385EF4(buffer); + } + + ov30_02385FE4(buffer, &DUNGEON_PTR->kecleon_shop_min_x); + ov30_02385FE4(buffer, &DUNGEON_PTR->fixed_room_min_x); + ov30_02386040(buffer, &DUNGEON_PTR->fixed_room_width); + + + + for(tile_index_x = 0; tile_index_x < 8; tile_index_x++) + { + for(tile_index_y = 0; tile_index_y < 8; tile_index_y++) + { + ov30_0238483C(buffer, &DUNGEON_PTR->fixed_room_tiles[tile_index_x][tile_index_y]); + DUNGEON_PTR->field_0xd260[tile_index_x][tile_index_y] = ov30_02385EDC(buffer); + } + } + + + // weather + weather = &DUNGEON_PTR->weather; + memset(weather, 0, sizeof(struct weather)); + ov30_02385CA4(buffer, &weather->weather, 1); + ov30_02385CA4(buffer, &weather->natural_weather, 1); + + + for(int weather_index = 0; weather_index < 8; weather_index++) + { + weather->weather_turns[weather_index] = ov30_02385EC4(buffer); + weather->artificial_permaweather_turns[weather_index] = ov30_02385EC4(buffer); + } + + weather->weather_damage_counter = ov30_02385EF4(buffer); + weather->mud_sport_turns = ov30_02385EF4(buffer); + weather->water_sport_turns = ov30_02385EF4(buffer); + weather->nullify_weather = ov30_02385F54(buffer); + + temp_r4_2 = &DUNGEON_PTR->gravity; + MemZero(temp_r4_2, 2); + ov30_02385CA4(buffer, temp_r4_2, 1); + ov30_02385CA4(buffer, temp_r4_2 + 1, 1); + DUNGEON_PTR->victory_counter = ov30_02385EDC(buffer); +} + +void ov30_0238483C(void *buffer, struct tile* tile) +{ + memset(tile, 0, sizeof(struct tile)); + tile->terrain_flags = ov30_02385EC4(buffer); + tile->spawn_or_visibility_flags.spawn = ov30_02385EC4(buffer); + ov30_02385CA4(buffer, &tile->room, 1); + ov30_02385CA4(buffer, &tile->field_0x6, 1); + tile->monster = NULL; + tile->object = NULL; +} + + +void ov30_023848A0(void *buffer) +{ + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + + DUNGEON_PTR->display_data.camera_target = NULL; + DUNGEON_PTR->display_data.field_0x20 = ov30_02385EF4(buffer); + DUNGEON_PTR->display_data.visibility_range = ov30_02385EF4(buffer); + DUNGEON_PTR->display_data.blinded = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.luminous = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.natural_lighting = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_enemies = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x33 = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_items = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x32 = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x34 = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_traps = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.hallucinating = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_stairs = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x2C = ov30_02385F54(buffer); +} + +void ov30_02384A20(void *buffer) +{ + DUNGEON_PTR->field_0x2cb02 = ov30_02385EDC(buffer); + DUNGEON_PTR->field_0x2cb04 = ov30_02385EDC(buffer); + DUNGEON_PTR->dungeon_music_playing_id = (enum music_id) ov30_02385EDC(buffer); + DUNGEON_PTR->field_0x2cb04 = 0x3E7; +} + +void ov30_02384A94(void *buffer) +{ + struct item item; + struct position sp0; + bool32 var_r0; + + ov29_02344B1C(); + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + for(int var_r6 = 0; var_r6 < 0x40; var_r6++) + { + ov30_02384B24(buffer, &item); + ov30_02385F7C(buffer, &sp0); + var_r0 = (item.flags & ITEM_FLAG_EXISTS) ? TRUE : FALSE; + if (var_r0 & 0xFF) { + SpawnItem(&sp0, &item, 0); + } + } + ov29_02344B30(); +} + +void ov30_02384B24(void *buffer, struct item *item) +{ + memset(item, 0, sizeof(struct item)); + ov30_02385CA4(buffer, &item->flags, 1); + ov30_02385CA4(buffer, &item->held_by, 1); + ov30_02385CA4(buffer, &item->quantity, 2); + ov30_02385CA4(buffer, &item->id, 2); +} + +void ov30_02384B84(void *buffer) +{ + struct position pos; + u8 sp3; + u8 sp2; + u8 sp1; + u8 sp0; + struct trap* trap; + struct tile* tile; + s32 temp_r5; + + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + for(int trap_index = 0; trap_index < 0x40; trap_index++) + { + sp3 = 6; + sp2 = 0; + sp1 = 0; + ov30_02385CA4(buffer, &sp3, 1); + ov30_02385CA4(buffer, &sp2, 1); + ov30_02385CA4(buffer, &sp1, 1); + ov30_02385CA4(buffer, &sp0, 1); + temp_r5 = ov30_02385F54(buffer); + ov30_02385F7C(buffer, &pos); + if (sp3 != 0xFF) { + tile = GetTileSafe(pos.x, pos.y); + trap = SpawnTrap(sp3, &pos, sp2, 0); + if (trap != 0) { + BindTrapToTile(tile, trap, temp_r5); + } + } + } +} + +void ov30_02384C6C(void *buffer) +{ + struct position sp0; + s8 temp_r4; + s8 temp_r5; + + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + temp_r5 = ov30_02385F54(buffer); + temp_r4 = ov30_02385F54(buffer); + ov30_02385F7C(buffer, &sp0); + if (temp_r5 != 0) { + ov29_02338768(&sp0); + DUNGEON_PTR->entities[148].is_visible = temp_r4; + } +} + +void ov30_02384CD4(void *buffer) +{ + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + DUNGEON_PTR->monster_unique_id_counter = ov30_02385F0C(buffer); + DUNGEON_PTR->monster_unique_wrap_counter = ov30_02385F0C(buffer); + DUNGEON_PTR->plus_is_active[0] = ov30_02385F54(buffer); + DUNGEON_PTR->plus_is_active[1] = ov30_02385F54(buffer); + DUNGEON_PTR->minus_is_active[0] = ov30_02385F54(buffer); + DUNGEON_PTR->minus_is_active[1] = ov30_02385F54(buffer); + DUNGEON_PTR->decoy_is_active = ov30_02385F54(buffer); + DUNGEON_PTR->mew_cannot_spawn = ov30_02385F54(buffer); + DUNGEON_PTR->shaymin_sky_form_loaded = ov30_02385F54(buffer); + DUNGEON_PTR->deoxys_floor_id = (enum monster_id) ov30_02385EC4(buffer); + + for(int var_r6 = 0; var_r6 < MAX_TEAM_MEMBERS; var_r6++) + { + ov30_02384E28(buffer, 1, var_r6); + } + + for(int var_r6_2 = 0; var_r6_2 < DUNGEON_MAX_WILD_POKEMON; var_r6_2++) + { + ov30_02384E28(buffer, 0, var_r6_2); + } +}