diff --git a/asm/include/overlay_29_022E08A0.inc b/asm/include/overlay_29_022E08F4.inc similarity index 100% rename from asm/include/overlay_29_022E08A0.inc rename to asm/include/overlay_29_022E08F4.inc diff --git a/asm/include/overlay_29_022EAB50.inc b/asm/include/overlay_29_022EAB50.inc index bd42ff8a..67a83fdd 100644 --- a/asm/include/overlay_29_022EAB50.inc +++ b/asm/include/overlay_29_022EAB50.inc @@ -1,41 +1,20 @@ #pragma once -.public _s32_div_f .public AbilityIsActiveVeneer .public AdvanceFrame +.public ChangeDungeonMusic .public DUNGEON_PRNG_STATE .public DUNGEON_PTR .public DungeonRandInt .public DungeonRandRange .public FIXED_ROOM_PROPERTIES_TABLE -.public GetFloorType -.public GetLeaderMonster .public IqSkillIsEnabled .public IsCurrentFixedRoomBossFight -.public LogMessageByIdWithPopupCheckUserTarget -.public MoveMonsterToPos .public MUSIC_ID_TABLE -.public ov29_022E555C -.public ov29_02321260 -.public ov29_023516E8 -.public ov29_02352030 -.public ov29_02352032 -.public ov29_02352070 -.public ov29_0237C91C -.public ov29_0237C91E -.public PlayBgmByIdVeneer -.public PlayBgmByIdVolumeVeneer .public RANDOM_MUSIC_ID_TABLE .public RoundUpDiv256 -.public strcmp -.public StringFromId -.public sub_0200D208 -.public sub_02017ACC +.public _s32_div_f +.public ov29_022EAE40 .public sub_02017B18 -.public sub_02017B70 -.public sub_02017B7C .public sub_02017C50 .public sub_02017C68 .public sub_02017C74 -.public sub_02017D80 -.public SubstitutePlaceholderStringTags -.public UpdateEntityPixelPos diff --git a/asm/include/overlay_29_022EAE40.inc b/asm/include/overlay_29_022EAE40.inc new file mode 100644 index 00000000..eba206f6 --- /dev/null +++ b/asm/include/overlay_29_022EAE40.inc @@ -0,0 +1,4 @@ +#pragma once +.public DUNGEON_PTR +.public sub_02017ACC +.public sub_02017D80 diff --git a/asm/include/overlay_29_022EAF48.inc b/asm/include/overlay_29_022EAF48.inc new file mode 100644 index 00000000..8d823231 --- /dev/null +++ b/asm/include/overlay_29_022EAF48.inc @@ -0,0 +1,26 @@ +#pragma once +.public AbilityIsActiveVeneer +.public DUNGEON_PTR +.public GetFloorType +.public GetLeaderMonster +.public LogMessageByIdWithPopupCheckUserTarget +.public MoveMonsterToPos +.public MusicTableIdxToMusicId +.public PlayBgmByIdVeneer +.public PlayBgmByIdVolumeVeneer +.public StringFromId +.public SubstitutePlaceholderStringTags +.public UpdateEntityPixelPos +.public ov29_022E555C +.public ov29_022EAE40 +.public ov29_02321260 +.public ov29_023516E8 +.public ov29_02352030 +.public ov29_02352032 +.public ov29_02352070 +.public ov29_0237C91C +.public ov29_0237C91E +.public strcmp +.public sub_0200D208 +.public sub_02017B70 +.public sub_02017B7C diff --git a/asm/include/overlay_29_022ECDE4.inc b/asm/include/overlay_29_022ECDE4.inc index f5f05ea7..46839cd4 100644 --- a/asm/include/overlay_29_022ECDE4.inc +++ b/asm/include/overlay_29_022ECDE4.inc @@ -4,7 +4,6 @@ .public EntityIsValid__022ECDC0 .public GetMonsterName .public GetStringFromFileVeneer -.public MemZero .public memset .public ov29_0237C974 .public strcpy diff --git a/asm/include/overlay_29_0234969C.inc b/asm/include/overlay_29_022ECF78.inc similarity index 67% rename from asm/include/overlay_29_0234969C.inc rename to asm/include/overlay_29_022ECF78.inc index a00f434c..385d1c66 100644 --- a/asm/include/overlay_29_0234969C.inc +++ b/asm/include/overlay_29_022ECF78.inc @@ -1,2 +1,3 @@ #pragma once .public DUNGEON_PTR +.public MemZero diff --git a/asm/include/overlay_29_0233861C.inc b/asm/include/overlay_29_0233861C.inc index adf5add9..1e4d20c4 100644 --- a/asm/include/overlay_29_0233861C.inc +++ b/asm/include/overlay_29_0233861C.inc @@ -1,11 +1,3 @@ #pragma once .public DUNGEON_PTR -.public DrawMinimapTile -.public GetLeader -.public GetTileSafe -.public IsSecretBazaar -.public LogMessageByIdWithPopupCheckUser -.public PlayEffectAnimationPos .public TeamMemberHasExclusiveItemEffectActive -.public UpdateTrapsVisibility -.public ov29_022E2418 diff --git a/asm/include/overlay_29_02338684.inc b/asm/include/overlay_29_02338684.inc new file mode 100644 index 00000000..37ed5649 --- /dev/null +++ b/asm/include/overlay_29_02338684.inc @@ -0,0 +1,11 @@ +#pragma once +.public DUNGEON_PTR +.public DrawMinimapTile +.public GetLeader +.public GetTileSafe +.public IsSecretBazaar +.public IsSecretRoom +.public LogMessageByIdWithPopupCheckUser +.public PlayEffectAnimationPos +.public UpdateTrapsVisibility +.public ov29_022E2418 diff --git a/asm/overlay_29_022E08A0.s b/asm/overlay_29_022E08F4.s similarity index 69% rename from asm/overlay_29_022E08A0.s rename to asm/overlay_29_022E08F4.s index b8efa592..399f58b0 100644 --- a/asm/overlay_29_022E08A0.s +++ b/asm/overlay_29_022E08F4.s @@ -1,44 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_022E08A0.inc" + .include "overlay_29_022E08F4.inc" .text - arm_func_start IsMarowakTrainingMaze -IsMarowakTrainingMaze: ; 0x022E08A0 - ldr r0, _022E08C8 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - cmp r0, #0xb4 - blo _022E08C0 - cmp r0, #0xbe - movls r0, #1 - bxls lr -_022E08C0: - mov r0, #0 - bx lr - .align 2, 0 -_022E08C8: .word DUNGEON_PTR - arm_func_end IsMarowakTrainingMaze - - arm_func_start FixedRoomIsSubstituteRoom -FixedRoomIsSubstituteRoom: ; 0x022E08CC - ldr r0, _022E08F0 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrb r0, [r0, #0x36] -#else - ldrb r0, [r0, #0xda] -#endif - cmp r0, #0x6e - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_022E08F0: .word DUNGEON_PTR - arm_func_end FixedRoomIsSubstituteRoom - arm_func_start ov29_022E08F4 ov29_022E08F4: ; 0x022E08F4 ldr r0, _022E0924 ; =DUNGEON_PTR diff --git a/asm/overlay_29_022EAB50.s b/asm/overlay_29_022EAB50.s index 5d9a363c..bd345d7b 100644 --- a/asm/overlay_29_022EAB50.s +++ b/asm/overlay_29_022EAB50.s @@ -246,511 +246,3 @@ _022EAE08: .word 0x00001410 _022EAE0C: .word DUNGEON_PTR _022EAE10: .word FIXED_ROOM_PROPERTIES_TABLE arm_func_end ov29_022EAD68 - - arm_func_start ChangeDungeonMusic -ChangeDungeonMusic: ; 0x022EAE14 - ldr r3, _022EAE38 ; =DUNGEON_PTR - ldr r1, _022EAE3C ; =0x0002CB06 - ldr ip, [r3] - sub r2, r1, #6 - strh r0, [ip, r1] - ldr r0, [r3] - mov r1, #0 - strh r1, [r0, r2] - bx lr - .align 2, 0 -_022EAE38: .word DUNGEON_PTR -#ifdef JAPAN -_022EAE3C: .word 0x0002CA62 -#else -_022EAE3C: .word 0x0002CB06 -#endif - arm_func_end ChangeDungeonMusic - - arm_func_start ov29_022EAE40 -ov29_022EAE40: ; 0x022EAE40 - stmdb sp!, {r4, lr} - ldr lr, _022EAEA0 ; =DUNGEON_PTR - ldr r2, _022EAEA4 ; =0x0002CB02 - ldr r4, [lr] - ldr r1, _022EAEA8 ; =0x000003E7 - add r3, r2, #4 - strh r1, [r4, r2] - ldr r4, [lr] - add ip, r2, #2 - strh r0, [r4, r3] - ldr r4, [lr] - mov r3, #4 - strh r0, [r4, ip] - ldr r0, [lr] - sub r2, r2, #2 - add r0, r0, #0x2c000 -#ifdef JAPAN - str r3, [r0, #0xa54] -#else - str r3, [r0, #0xaf8] -#endif - ldr r0, [lr] - mov r3, #0 - strh r3, [r0, r2] - ldr r0, [lr] - add r0, r0, #0x700 - strh r1, [r0, #0x96] - ldmia sp!, {r4, pc} - .align 2, 0 -_022EAEA0: .word DUNGEON_PTR -#ifdef JAPAN -_022EAEA4: .word 0x0002CA5E -#else -_022EAEA4: .word 0x0002CB02 -#endif -_022EAEA8: .word 0x000003E7 - arm_func_end ov29_022EAE40 - - arm_func_start ov29_022EAEAC -ov29_022EAEAC: ; 0x022EAEAC - stmdb sp!, {r3, lr} - bl sub_02017ACC - ldr r0, _022EAEE4 ; =0x0002CB02 - ldr r2, _022EAEE8 ; =DUNGEON_PTR - ldr ip, _022EAEEC ; =0x000003E7 - ldr r3, [r2] - add r1, r0, #2 - strh ip, [r3, r0] - ldr r3, [r2] - add r0, r0, #4 - strh ip, [r3, r1] - ldr r1, [r2] - strh ip, [r1, r0] - ldmia sp!, {r3, pc} - .align 2, 0 -#ifdef JAPAN -_022EAEE4: .word 0x0002CA5E -#else -_022EAEE4: .word 0x0002CB02 -#endif -_022EAEE8: .word DUNGEON_PTR -_022EAEEC: .word 0x000003E7 - arm_func_end ov29_022EAEAC - - arm_func_start ov29_022EAEF0 -ov29_022EAEF0: ; 0x022EAEF0 - ldr ip, _022EAEF8 ; =sub_02017D80 - bx ip - .align 2, 0 -_022EAEF8: .word sub_02017D80 - arm_func_end ov29_022EAEF0 - - arm_func_start ov29_022EAEFC -ov29_022EAEFC: ; 0x022EAEFC - ldr r0, _022EAF1C ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x792] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_022EAF1C: .word DUNGEON_PTR - arm_func_end ov29_022EAEFC - - arm_func_start ov29_022EAF20 -ov29_022EAF20: ; 0x022EAF20 - ldr r0, _022EAF30 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x792] - bx lr - .align 2, 0 -_022EAF30: .word DUNGEON_PTR - arm_func_end ov29_022EAF20 - - arm_func_start SetUnkMusicFlag -SetUnkMusicFlag: ; 0x022EAF34 - ldr r1, _022EAF44 ; =DUNGEON_PTR - ldr r1, [r1] - strb r0, [r1, #0x792] - bx lr - .align 2, 0 -_022EAF44: .word DUNGEON_PTR - arm_func_end SetUnkMusicFlag - - arm_func_start ov29_022EAF48 -ov29_022EAF48: ; 0x022EAF48 - stmdb sp!, {r4, lr} - ldr ip, _022EAFA8 ; =DUNGEON_PTR - mov r4, #0 - ldr r3, [ip] - ldr lr, _022EAFAC ; =0x000003E7 -#ifdef JAPAN - add r2, r3, #0x254 - add r3, r3, #0x2c000 - str r4, [r3, #0xa54] -#else - add r2, r3, #0x2f8 - add r3, r3, #0x2c000 - str r4, [r3, #0xaf8] -#endif - add r3, r2, #0x2c800 - str r4, [r3, #4] - ldr r2, [ip] - cmp r1, #0 - add r1, r2, #0x700 - strh lr, [r1, #0x96] - bne _022EAF8C - cmp r0, lr - bne _022EAFA0 -_022EAF8C: - ldr r0, _022EAFAC ; =0x000003E7 - strh r0, [r3, #0xa] - strh r0, [r3, #0xc] - strh r0, [r3, #0xe] - ldmia sp!, {r4, pc} -_022EAFA0: - bl ov29_022EAE40 - ldmia sp!, {r4, pc} - .align 2, 0 -_022EAFA8: .word DUNGEON_PTR -_022EAFAC: .word 0x000003E7 - arm_func_end ov29_022EAF48 - - arm_func_start ov29_022EAFB0 -ov29_022EAFB0: ; 0x022EAFB0 - stmdb sp!, {r4, lr} - ldr r0, _022EB168 ; =DUNGEON_PTR - ldr r3, [r0] - cmp r3, #0 - ldmeqia sp!, {r4, pc} - add r0, r3, #0x700 - ldrh r0, [r0, #0x96] - ldr r2, _022EB16C ; =0x000003E7 -#ifdef JAPAN - add r1, r3, #0x254 -#else - add r1, r3, #0x2f8 -#endif - cmp r0, r2 - add r4, r1, #0x2c800 - bne _022EB034 - ldrb r1, [r3, #0x792] - cmp r1, #0 - beq _022EB004 - ldr r0, _022EB170 ; =ov29_023516E8 - ldr r0, [r0, r1, lsl #2] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl MusicTableIdxToMusicId - b _022EB034 -_022EB004: - ldrb r0, [r3, #0x791] - cmp r0, #0 - movne r0, #0xd - bne _022EB034 - ldrb r0, [r3, #0x794] - cmp r0, #0 - movne r0, #0xb - bne _022EB034 - ldrb r0, [r3, #0x7c9] - cmp r0, #0 - movne r0, #0xc - ldreqh r0, [r4, #0xe] -_022EB034: - ldr r1, [r4] - cmp r1, #4 - bne _022EB058 - ldrh r1, [r4, #0xc] - cmp r0, r1 - movne r1, #2 - strne r1, [r4] - strneh r0, [r4, #0xa] - b _022EB078 -_022EB058: - ldr r1, _022EB16C ; =0x000003E7 - cmp r0, r1 - beq _022EB078 - ldrh r2, [r4, #0xa] - cmp r2, r1 - moveq r1, #1 - streq r1, [r4] - streqh r0, [r4, #0xa] -_022EB078: - ldr r0, [r4] - cmp r0, #4 - addls pc, pc, r0, lsl #2 - ldmia sp!, {r4, pc} -_022EB088: ; jump table - ldmia sp!, {r4, pc} ; case 0 - b _022EB09C ; case 1 - b _022EB108 ; case 2 - b _022EB124 ; case 3 - ldmia sp!, {r4, pc} ; case 4 -_022EB09C: - ldrh r2, [r4, #0xa] - ldr r0, _022EB16C ; =0x000003E7 - cmp r2, r0 - moveq r0, #0 - streq r0, [r4] - beq _022EB0FC - tst r2, #0x8000 - ldr r0, _022EB174 ; =0x00007FFF - beq _022EB0D4 - and r0, r2, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl PlayBgmByIdVeneer - b _022EB0EC -_022EB0D4: - and r0, r2, r0 - mov r0, r0, lsl #0x10 - ldrh r1, [r4, #8] - mov r0, r0, lsr #0x10 - mov r2, #0x100 - bl PlayBgmByIdVolumeVeneer -_022EB0EC: - ldrh r1, [r4, #0xa] - mov r0, #4 - strh r1, [r4, #0xc] - str r0, [r4] -_022EB0FC: - ldr r0, _022EB16C ; =0x000003E7 - strh r0, [r4, #0xa] - ldmia sp!, {r4, pc} -_022EB108: - mov r0, #0x1e - bl sub_02017B7C - mov r0, #0x1e - str r0, [r4, #4] - mov r0, #3 - str r0, [r4] - ldmia sp!, {r4, pc} -_022EB124: - ldr r0, [r4, #4] - cmp r0, #0 - subne r0, r0, #1 - strne r0, [r4, #4] - ldr r0, [r4, #4] - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldrh r1, [r4, #0xa] - ldr r0, _022EB16C ; =0x000003E7 - cmp r1, r0 - movne r0, #1 - strne r0, [r4] - ldmneia sp!, {r4, pc} - bl sub_02017B70 - mov r0, #0 - str r0, [r4] - ldmia sp!, {r4, pc} - .align 2, 0 -_022EB168: .word DUNGEON_PTR -_022EB16C: .word 0x000003E7 -_022EB170: .word ov29_023516E8 -_022EB174: .word 0x00007FFF - arm_func_end ov29_022EAFB0 - - arm_func_start TrySwitchPlace -TrySwitchPlace: ; 0x022EB178 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r4, r1 - mov r1, #0xe - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _022EB1BC - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _022EB2C4 ; =0x00000B76 - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - b _022EB2BC -_022EB1BC: - cmp r5, r4 - beq _022EB204 - cmp r5, #0 - moveq r0, #0 - beq _022EB1E4 - ldr r0, [r5] - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff -_022EB1E4: - cmp r0, #0 - beq _022EB204 - mov r0, r5 - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - bne _022EB210 -_022EB204: - mov r0, r4 - mov r1, #0xe - bl AbilityIsActiveVeneer -_022EB210: - cmp r0, #0 - beq _022EB23C - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _022EB2C4 ; =0x00000B76 - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - b _022EB2BC -_022EB23C: - ldrsh r1, [r5, #4] - add r0, sp, #4 - strh r1, [sp, #4] - ldrsh r1, [r5, #6] - strh r1, [sp, #6] - ldrsh r1, [r4, #4] - strh r1, [sp] - ldrsh r1, [r4, #6] - strh r1, [sp, #2] - bl ov29_022E555C - add r0, sp, #0 - bl ov29_022E555C - ldrsh r1, [sp] - ldrsh r2, [sp, #2] - mov r0, r5 - mov r3, #1 - bl MoveMonsterToPos - ldrsh r1, [sp, #4] - ldrsh r2, [sp, #6] - mov r0, r4 - mov r3, #1 - bl MoveMonsterToPos - mov r0, r5 - mov r1, #0 - bl UpdateEntityPixelPos - mov r0, r4 - mov r1, #0 - bl UpdateEntityPixelPos - mov r0, r5 - bl ov29_02321260 - mov r0, r4 - bl ov29_02321260 -_022EB2BC: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_022EB2C4: .word 0x00000887 -#else -_022EB2C4: .word 0x00000B76 -#endif - arm_func_end TrySwitchPlace - - arm_func_start ov29_022EB2C8 -ov29_022EB2C8: ; 0x022EB2C8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, r0 - ldr r0, _022EB360 ; =ov29_0237C91C - mov r2, r5, lsl #3 - ldrh r6, [r0, r2] - mov r4, r1 - cmp r6, #0x26 - bne _022EB2F8 - bl GetFloorType - cmp r0, #2 - ldreq r0, _022EB364 ; =0x000009C9 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} -_022EB2F8: -#ifdef JAPAN - add r0, r6, #0x57 - add r0, r0, #0x2300 -#else - add r0, r6, #0x87 - add r0, r0, #0x900 -#endif - mov r0, r0, lsl #0x10 - mov r7, r0, lsr #0x10 - mov r0, r7 - bl StringFromId - ldr r1, _022EB368 ; =ov29_02352070 - bl strcmp - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - tst r0, #0xff - beq _022EB34C - ldr r0, _022EB36C ; =ov29_0237C91E - mov r1, r5, lsl #3 - ldrsh r0, [r0, r1] - bl sub_0200D208 - ldr r1, _022EB370 ; =ov29_02352032 - mov r0, r0, lsl #2 - ldrh r0, [r1, r0] - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022EB34C: - cmp r4, #1 - cmpeq r6, #0x1a - ldreq r0, _022EB374 ; =0x000009CA - movne r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022EB360: .word ov29_0237C91C -#ifdef JAPAN -_022EB364: .word 0x00002399 -#else -_022EB364: .word 0x000009C9 -#endif -_022EB368: .word ov29_02352070 -_022EB36C: .word ov29_0237C91E -_022EB370: .word ov29_02352032 -#ifdef JAPAN -_022EB374: .word 0x0000239A -#else -_022EB374: .word 0x000009CA -#endif - arm_func_end ov29_022EB2C8 - - arm_func_start ov29_022EB378 -ov29_022EB378: ; 0x022EB378 - stmdb sp!, {r3, lr} - ldrsh r0, [r0, #4] - bl sub_0200D208 - ldr r1, _022EB394 ; =ov29_02352030 - mov r0, r0, lsl #2 - ldrh r0, [r1, r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_022EB394: .word ov29_02352030 - arm_func_end ov29_022EB378 - - arm_func_start ResetLeaderActionFields -ResetLeaderActionFields: ; 0x022EB398 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetLeaderMonster - mov r1, #0 - strh r1, [r0, #0x4a] - cmp r4, #0 - strneb r1, [r0, #0x4e] - strneb r1, [r0, #0x54] - subne r1, r1, #1 - strneh r1, [r0, #0x5a] - strneh r1, [r0, #0x5c] - ldmia sp!, {r4, pc} - arm_func_end ResetLeaderActionFields - - arm_func_start SetLeaderActionFields -SetLeaderActionFields: ; 0x022EB3C8 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetLeaderMonster - mov r1, #0 - strh r4, [r0, #0x4a] - strb r1, [r0, #0x4e] - strb r1, [r0, #0x54] - sub r1, r1, #1 - strh r1, [r0, #0x5a] - strh r1, [r0, #0x5c] - ldmia sp!, {r4, pc} - arm_func_end SetLeaderActionFields diff --git a/asm/overlay_29_022EAE40.s b/asm/overlay_29_022EAE40.s new file mode 100644 index 00000000..04f458d9 --- /dev/null +++ b/asm/overlay_29_022EAE40.s @@ -0,0 +1,78 @@ + .include "asm/macros.inc" + .include "overlay_29_022EAE40.inc" + + .text + + arm_func_start ov29_022EAE40 +ov29_022EAE40: ; 0x022EAE40 + stmdb sp!, {r4, lr} + ldr lr, _022EAEA0 ; =DUNGEON_PTR + ldr r2, _022EAEA4 ; =0x0002CB02 + ldr r4, [lr] + ldr r1, _022EAEA8 ; =0x000003E7 + add r3, r2, #4 + strh r1, [r4, r2] + ldr r4, [lr] + add ip, r2, #2 + strh r0, [r4, r3] + ldr r4, [lr] + mov r3, #4 + strh r0, [r4, ip] + ldr r0, [lr] + sub r2, r2, #2 + add r0, r0, #0x2c000 +#ifdef JAPAN + str r3, [r0, #0xa54] +#else + str r3, [r0, #0xaf8] +#endif + ldr r0, [lr] + mov r3, #0 + strh r3, [r0, r2] + ldr r0, [lr] + add r0, r0, #0x700 + strh r1, [r0, #0x96] + ldmia sp!, {r4, pc} + .align 2, 0 +_022EAEA0: .word DUNGEON_PTR +#ifdef JAPAN +_022EAEA4: .word 0x0002CA5E +#else +_022EAEA4: .word 0x0002CB02 +#endif +_022EAEA8: .word 0x000003E7 + arm_func_end ov29_022EAE40 + + arm_func_start ov29_022EAEAC +ov29_022EAEAC: ; 0x022EAEAC + stmdb sp!, {r3, lr} + bl sub_02017ACC + ldr r0, _022EAEE4 ; =0x0002CB02 + ldr r2, _022EAEE8 ; =DUNGEON_PTR + ldr ip, _022EAEEC ; =0x000003E7 + ldr r3, [r2] + add r1, r0, #2 + strh ip, [r3, r0] + ldr r3, [r2] + add r0, r0, #4 + strh ip, [r3, r1] + ldr r1, [r2] + strh ip, [r1, r0] + ldmia sp!, {r3, pc} + .align 2, 0 +#ifdef JAPAN +_022EAEE4: .word 0x0002CA5E +#else +_022EAEE4: .word 0x0002CB02 +#endif +_022EAEE8: .word DUNGEON_PTR +_022EAEEC: .word 0x000003E7 + arm_func_end ov29_022EAEAC + + arm_func_start ov29_022EAEF0 +ov29_022EAEF0: ; 0x022EAEF0 + ldr ip, _022EAEF8 ; =sub_02017D80 + bx ip + .align 2, 0 +_022EAEF8: .word sub_02017D80 + arm_func_end ov29_022EAEF0 diff --git a/asm/overlay_29_022EAF48.s b/asm/overlay_29_022EAF48.s new file mode 100644 index 00000000..fbe8908d --- /dev/null +++ b/asm/overlay_29_022EAF48.s @@ -0,0 +1,384 @@ + .include "asm/macros.inc" + .include "overlay_29_022EAF48.inc" + + .text + + arm_func_start ov29_022EAF48 +ov29_022EAF48: ; 0x022EAF48 + stmdb sp!, {r4, lr} + ldr ip, _022EAFA8 ; =DUNGEON_PTR + mov r4, #0 + ldr r3, [ip] + ldr lr, _022EAFAC ; =0x000003E7 +#ifdef JAPAN + add r2, r3, #0x254 + add r3, r3, #0x2c000 + str r4, [r3, #0xa54] +#else + add r2, r3, #0x2f8 + add r3, r3, #0x2c000 + str r4, [r3, #0xaf8] +#endif + add r3, r2, #0x2c800 + str r4, [r3, #4] + ldr r2, [ip] + cmp r1, #0 + add r1, r2, #0x700 + strh lr, [r1, #0x96] + bne _022EAF8C + cmp r0, lr + bne _022EAFA0 +_022EAF8C: + ldr r0, _022EAFAC ; =0x000003E7 + strh r0, [r3, #0xa] + strh r0, [r3, #0xc] + strh r0, [r3, #0xe] + ldmia sp!, {r4, pc} +_022EAFA0: + bl ov29_022EAE40 + ldmia sp!, {r4, pc} + .align 2, 0 +_022EAFA8: .word DUNGEON_PTR +_022EAFAC: .word 0x000003E7 + arm_func_end ov29_022EAF48 + + arm_func_start ov29_022EAFB0 +ov29_022EAFB0: ; 0x022EAFB0 + stmdb sp!, {r4, lr} + ldr r0, _022EB168 ; =DUNGEON_PTR + ldr r3, [r0] + cmp r3, #0 + ldmeqia sp!, {r4, pc} + add r0, r3, #0x700 + ldrh r0, [r0, #0x96] + ldr r2, _022EB16C ; =0x000003E7 +#ifdef JAPAN + add r1, r3, #0x254 +#else + add r1, r3, #0x2f8 +#endif + cmp r0, r2 + add r4, r1, #0x2c800 + bne _022EB034 + ldrb r1, [r3, #0x792] + cmp r1, #0 + beq _022EB004 + ldr r0, _022EB170 ; =ov29_023516E8 + ldr r0, [r0, r1, lsl #2] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl MusicTableIdxToMusicId + b _022EB034 +_022EB004: + ldrb r0, [r3, #0x791] + cmp r0, #0 + movne r0, #0xd + bne _022EB034 + ldrb r0, [r3, #0x794] + cmp r0, #0 + movne r0, #0xb + bne _022EB034 + ldrb r0, [r3, #0x7c9] + cmp r0, #0 + movne r0, #0xc + ldreqh r0, [r4, #0xe] +_022EB034: + ldr r1, [r4] + cmp r1, #4 + bne _022EB058 + ldrh r1, [r4, #0xc] + cmp r0, r1 + movne r1, #2 + strne r1, [r4] + strneh r0, [r4, #0xa] + b _022EB078 +_022EB058: + ldr r1, _022EB16C ; =0x000003E7 + cmp r0, r1 + beq _022EB078 + ldrh r2, [r4, #0xa] + cmp r2, r1 + moveq r1, #1 + streq r1, [r4] + streqh r0, [r4, #0xa] +_022EB078: + ldr r0, [r4] + cmp r0, #4 + addls pc, pc, r0, lsl #2 + ldmia sp!, {r4, pc} +_022EB088: ; jump table + ldmia sp!, {r4, pc} ; case 0 + b _022EB09C ; case 1 + b _022EB108 ; case 2 + b _022EB124 ; case 3 + ldmia sp!, {r4, pc} ; case 4 +_022EB09C: + ldrh r2, [r4, #0xa] + ldr r0, _022EB16C ; =0x000003E7 + cmp r2, r0 + moveq r0, #0 + streq r0, [r4] + beq _022EB0FC + tst r2, #0x8000 + ldr r0, _022EB174 ; =0x00007FFF + beq _022EB0D4 + and r0, r2, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl PlayBgmByIdVeneer + b _022EB0EC +_022EB0D4: + and r0, r2, r0 + mov r0, r0, lsl #0x10 + ldrh r1, [r4, #8] + mov r0, r0, lsr #0x10 + mov r2, #0x100 + bl PlayBgmByIdVolumeVeneer +_022EB0EC: + ldrh r1, [r4, #0xa] + mov r0, #4 + strh r1, [r4, #0xc] + str r0, [r4] +_022EB0FC: + ldr r0, _022EB16C ; =0x000003E7 + strh r0, [r4, #0xa] + ldmia sp!, {r4, pc} +_022EB108: + mov r0, #0x1e + bl sub_02017B7C + mov r0, #0x1e + str r0, [r4, #4] + mov r0, #3 + str r0, [r4] + ldmia sp!, {r4, pc} +_022EB124: + ldr r0, [r4, #4] + cmp r0, #0 + subne r0, r0, #1 + strne r0, [r4, #4] + ldr r0, [r4, #4] + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldrh r1, [r4, #0xa] + ldr r0, _022EB16C ; =0x000003E7 + cmp r1, r0 + movne r0, #1 + strne r0, [r4] + ldmneia sp!, {r4, pc} + bl sub_02017B70 + mov r0, #0 + str r0, [r4] + ldmia sp!, {r4, pc} + .align 2, 0 +_022EB168: .word DUNGEON_PTR +_022EB16C: .word 0x000003E7 +_022EB170: .word ov29_023516E8 +_022EB174: .word 0x00007FFF + arm_func_end ov29_022EAFB0 + + arm_func_start TrySwitchPlace +TrySwitchPlace: ; 0x022EB178 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + mov r4, r1 + mov r1, #0xe + mov r5, r0 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _022EB1BC + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _022EB2C4 ; =0x00000B76 + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + b _022EB2BC +_022EB1BC: + cmp r5, r4 + beq _022EB204 + cmp r5, #0 + moveq r0, #0 + beq _022EB1E4 + ldr r0, [r5] + cmp r0, #1 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff +_022EB1E4: + cmp r0, #0 + beq _022EB204 + mov r0, r5 + mov r1, #0x53 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, #0 + bne _022EB210 +_022EB204: + mov r0, r4 + mov r1, #0xe + bl AbilityIsActiveVeneer +_022EB210: + cmp r0, #0 + beq _022EB23C + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _022EB2C4 ; =0x00000B76 + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + b _022EB2BC +_022EB23C: + ldrsh r1, [r5, #4] + add r0, sp, #4 + strh r1, [sp, #4] + ldrsh r1, [r5, #6] + strh r1, [sp, #6] + ldrsh r1, [r4, #4] + strh r1, [sp] + ldrsh r1, [r4, #6] + strh r1, [sp, #2] + bl ov29_022E555C + add r0, sp, #0 + bl ov29_022E555C + ldrsh r1, [sp] + ldrsh r2, [sp, #2] + mov r0, r5 + mov r3, #1 + bl MoveMonsterToPos + ldrsh r1, [sp, #4] + ldrsh r2, [sp, #6] + mov r0, r4 + mov r3, #1 + bl MoveMonsterToPos + mov r0, r5 + mov r1, #0 + bl UpdateEntityPixelPos + mov r0, r4 + mov r1, #0 + bl UpdateEntityPixelPos + mov r0, r5 + bl ov29_02321260 + mov r0, r4 + bl ov29_02321260 +_022EB2BC: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_022EB2C4: .word 0x00000887 +#else +_022EB2C4: .word 0x00000B76 +#endif + arm_func_end TrySwitchPlace + + arm_func_start ov29_022EB2C8 +ov29_022EB2C8: ; 0x022EB2C8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, r0 + ldr r0, _022EB360 ; =ov29_0237C91C + mov r2, r5, lsl #3 + ldrh r6, [r0, r2] + mov r4, r1 + cmp r6, #0x26 + bne _022EB2F8 + bl GetFloorType + cmp r0, #2 + ldreq r0, _022EB364 ; =0x000009C9 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} +_022EB2F8: +#ifdef JAPAN + add r0, r6, #0x57 + add r0, r0, #0x2300 +#else + add r0, r6, #0x87 + add r0, r0, #0x900 +#endif + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 + mov r0, r7 + bl StringFromId + ldr r1, _022EB368 ; =ov29_02352070 + bl strcmp + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + tst r0, #0xff + beq _022EB34C + ldr r0, _022EB36C ; =ov29_0237C91E + mov r1, r5, lsl #3 + ldrsh r0, [r0, r1] + bl sub_0200D208 + ldr r1, _022EB370 ; =ov29_02352032 + mov r0, r0, lsl #2 + ldrh r0, [r1, r0] + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022EB34C: + cmp r4, #1 + cmpeq r6, #0x1a + ldreq r0, _022EB374 ; =0x000009CA + movne r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022EB360: .word ov29_0237C91C +#ifdef JAPAN +_022EB364: .word 0x00002399 +#else +_022EB364: .word 0x000009C9 +#endif +_022EB368: .word ov29_02352070 +_022EB36C: .word ov29_0237C91E +_022EB370: .word ov29_02352032 +#ifdef JAPAN +_022EB374: .word 0x0000239A +#else +_022EB374: .word 0x000009CA +#endif + arm_func_end ov29_022EB2C8 + + arm_func_start ov29_022EB378 +ov29_022EB378: ; 0x022EB378 + stmdb sp!, {r3, lr} + ldrsh r0, [r0, #4] + bl sub_0200D208 + ldr r1, _022EB394 ; =ov29_02352030 + mov r0, r0, lsl #2 + ldrh r0, [r1, r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_022EB394: .word ov29_02352030 + arm_func_end ov29_022EB378 + + arm_func_start ResetLeaderActionFields +ResetLeaderActionFields: ; 0x022EB398 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetLeaderMonster + mov r1, #0 + strh r1, [r0, #0x4a] + cmp r4, #0 + strneb r1, [r0, #0x4e] + strneb r1, [r0, #0x54] + subne r1, r1, #1 + strneh r1, [r0, #0x5a] + strneh r1, [r0, #0x5c] + ldmia sp!, {r4, pc} + arm_func_end ResetLeaderActionFields + + arm_func_start SetLeaderActionFields +SetLeaderActionFields: ; 0x022EB3C8 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetLeaderMonster + mov r1, #0 + strh r4, [r0, #0x4a] + strb r1, [r0, #0x4e] + strb r1, [r0, #0x54] + sub r1, r1, #1 + strh r1, [r0, #0x5a] + strh r1, [r0, #0x5c] + ldmia sp!, {r4, pc} + arm_func_end SetLeaderActionFields diff --git a/asm/overlay_29_022ECDE4.s b/asm/overlay_29_022ECDE4.s index e36fb85b..a340028e 100644 --- a/asm/overlay_29_022ECDE4.s +++ b/asm/overlay_29_022ECDE4.s @@ -108,81 +108,3 @@ _022ECF3C: .word 0x00000A41 #endif _022ECF40: .word 0x000003E7 arm_func_end CreateMonsterSummaryFromEntityOuter - - arm_func_start IsDungeonEndReasonFailure -IsDungeonEndReasonFailure: ; 0x022ECF44 - ldr r1, _022ECF6C ; =DUNGEON_PTR - ldr r0, _022ECF70 ; =0x0002CA66 - ldr r2, [r1] - ldr r1, _022ECF74 ; =0x00000279 - ldrsh r0, [r2, r0] - cmp r0, r1 - movlt r0, #1 - movge r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_022ECF6C: .word DUNGEON_PTR -#ifdef JAPAN -_022ECF70: .word 0x0002C9C2 -#else -_022ECF70: .word 0x0002CA66 -#endif -_022ECF74: .word 0x00000279 - arm_func_end IsDungeonEndReasonFailure - - arm_func_start ov29_022ECF78 -ov29_022ECF78: ; 0x022ECF78 - ldr r1, _022ECFAC ; =DUNGEON_PTR - ldr r0, _022ECFB0 ; =0x0002CA66 - ldr r2, [r1] - ldr r1, _022ECFB4 ; =0x0000027A - ldrsh r2, [r2, r0] - cmp r2, r1 - addne r0, r1, #3 - cmpne r2, r0 - addne r0, r1, #1 - cmpne r2, r0 - moveq r0, #1 - movne r0, #0 - bx lr - .align 2, 0 -_022ECFAC: .word DUNGEON_PTR -#ifdef JAPAN -_022ECFB0: .word 0x0002C9C2 -#else -_022ECFB0: .word 0x0002CA66 -#endif -_022ECFB4: .word 0x0000027A - arm_func_end ov29_022ECF78 - - arm_func_start ov29_022ECFB8 -ov29_022ECFB8: ; 0x022ECFB8 - stmdb sp!, {r4, lr} - ldr r1, _022ED004 ; =DUNGEON_PTR - mov r4, r0 - ldr r1, [r1] - cmp r1, #0 - beq _022ECFF8 -#ifdef JAPAN - add r0, r1, #0x168 -#else - add r0, r1, #0x20c -#endif - add lr, r0, #0x2c800 - mov ip, #0xe -_022ECFDC: - ldmia lr!, {r0, r1, r2, r3} - stmia r4!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _022ECFDC - ldmia lr, {r0, r1} - stmia r4, {r0, r1} - ldmia sp!, {r4, pc} -_022ECFF8: - mov r1, #0xe8 - bl MemZero - ldmia sp!, {r4, pc} - .align 2, 0 -_022ED004: .word DUNGEON_PTR - arm_func_end ov29_022ECFB8 diff --git a/asm/overlay_29_022ECF78.s b/asm/overlay_29_022ECF78.s new file mode 100644 index 00000000..9adc89d8 --- /dev/null +++ b/asm/overlay_29_022ECF78.s @@ -0,0 +1,60 @@ + .include "asm/macros.inc" + .include "overlay_29_022ECF78.inc" + + .text + + arm_func_start ov29_022ECF78 +ov29_022ECF78: ; 0x022ECF78 + ldr r1, _022ECFAC ; =DUNGEON_PTR + ldr r0, _022ECFB0 ; =0x0002CA66 + ldr r2, [r1] + ldr r1, _022ECFB4 ; =0x0000027A + ldrsh r2, [r2, r0] + cmp r2, r1 + addne r0, r1, #3 + cmpne r2, r0 + addne r0, r1, #1 + cmpne r2, r0 + moveq r0, #1 + movne r0, #0 + bx lr + .align 2, 0 +_022ECFAC: .word DUNGEON_PTR +#ifdef JAPAN +_022ECFB0: .word 0x0002C9C2 +#else +_022ECFB0: .word 0x0002CA66 +#endif +_022ECFB4: .word 0x0000027A + arm_func_end ov29_022ECF78 + + arm_func_start ov29_022ECFB8 +ov29_022ECFB8: ; 0x022ECFB8 + stmdb sp!, {r4, lr} + ldr r1, _022ED004 ; =DUNGEON_PTR + mov r4, r0 + ldr r1, [r1] + cmp r1, #0 + beq _022ECFF8 +#ifdef JAPAN + add r0, r1, #0x168 +#else + add r0, r1, #0x20c +#endif + add lr, r0, #0x2c800 + mov ip, #0xe +_022ECFDC: + ldmia lr!, {r0, r1, r2, r3} + stmia r4!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _022ECFDC + ldmia lr, {r0, r1} + stmia r4, {r0, r1} + ldmia sp!, {r4, pc} +_022ECFF8: + mov r1, #0xe8 + bl MemZero + ldmia sp!, {r4, pc} + .align 2, 0 +_022ED004: .word DUNGEON_PTR + arm_func_end ov29_022ECFB8 diff --git a/asm/overlay_29_0233861C.s b/asm/overlay_29_0233861C.s index a38a4f13..0607c406 100644 --- a/asm/overlay_29_0233861C.s +++ b/asm/overlay_29_0233861C.s @@ -31,197 +31,3 @@ UpdateShouldBoostHiddenStairsSpawnChance: ; 0x0233861C .align 2, 0 _02338658: .word DUNGEON_PTR arm_func_end UpdateShouldBoostHiddenStairsSpawnChance - - arm_func_start IsSecretRoom -IsSecretRoom: ; 0x0233865C - ldr r0, _02338680 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrb r0, [r0, #0x36] -#else - ldrb r0, [r0, #0xda] -#endif - cmp r0, #0x71 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02338680: .word DUNGEON_PTR - arm_func_end IsSecretRoom - - arm_func_start IsSecretFloor -IsSecretFloor: ; 0x02338684 - stmdb sp!, {r3, lr} - bl IsSecretBazaar - cmp r0, #0 - bne _023386A0 - bl IsSecretRoom - cmp r0, #0 - beq _023386A8 -_023386A0: - mov r0, #1 - ldmia sp!, {r3, pc} -_023386A8: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsSecretFloor - - arm_func_start GetCurrentHiddenStairsType -GetCurrentHiddenStairsType: ; 0x023386B0 - stmdb sp!, {r3, lr} - bl IsSecretBazaar - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} - bl IsSecretRoom - cmp r0, #0 - movne r0, #2 - moveq r0, #0 - ldmia sp!, {r3, pc} - arm_func_end GetCurrentHiddenStairsType - - arm_func_start HiddenStairsPresent -HiddenStairsPresent: ; 0x023386D8 - ldr r0, _02338704 ; =DUNGEON_PTR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0xcc00 -#ifdef JAPAN - ldrsh r2, [r0, #0x44] - cmp r2, r1 - ldrnesh r0, [r0, #0x46] -#else - ldrsh r2, [r0, #0xe8] - cmp r2, r1 - ldrnesh r0, [r0, #0xea] -#endif - cmpne r0, r1 - moveq r0, #0 - movne r0, #1 - bx lr - .align 2, 0 -_02338704: .word DUNGEON_PTR - arm_func_end HiddenStairsPresent - - arm_func_start PositionIsOnHiddenStairs -PositionIsOnHiddenStairs: ; 0x02338708 - ldr r1, _02338738 ; =DUNGEON_PTR - ldrsh r2, [r0] - ldr r1, [r1] - add r1, r1, #0xcc00 -#ifdef JAPAN - ldrsh r3, [r1, #0x44] - cmp r3, r2 - ldreqsh r1, [r1, #0x46] -#else - ldrsh r3, [r1, #0xe8] - cmp r3, r2 - ldreqsh r1, [r1, #0xea] -#endif - ldreqsh r0, [r0, #2] - cmpeq r1, r0 - moveq r0, #1 - movne r0, #0 - bx lr - .align 2, 0 -_02338738: .word DUNGEON_PTR - arm_func_end PositionIsOnHiddenStairs - - arm_func_start ov29_0233873C -ov29_0233873C: ; 0x0233873C - stmdb sp!, {r3, lr} - bl HiddenStairsPresent - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r0, _02338764 ; =DUNGEON_PTR - ldr r0, [r0] -#ifdef JAPAN - add r0, r0, #0x44 -#else - add r0, r0, #0xe8 -#endif - add r0, r0, #0xcc00 - bl ov29_02338768 - ldmia sp!, {r3, pc} - .align 2, 0 -_02338764: .word DUNGEON_PTR - arm_func_end ov29_0233873C - - arm_func_start ov29_02338768 -ov29_02338768: ; 0x02338768 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl ov29_022E2418 - mov r4, r0 - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - bl GetTileSafe - str r4, [r0, #0x10] - mov r0, #0 - strb r0, [r4, #0x20] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_02338768 - - arm_func_start HiddenStairsTrigger -HiddenStairsTrigger: ; 0x02338794 -#ifdef JAPAN -#define HIDDEN_STAIRS_TRIGGER_OFFSET -0xA4 -#else -#define HIDDEN_STAIRS_TRIGGER_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl HiddenStairsPresent - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, _02338848 ; =DUNGEON_PTR - ldr r0, [r0] - add r1, r0, #0xcc00 - ldrsh r0, [r1, #0xe8 + HIDDEN_STAIRS_TRIGGER_OFFSET] - ldrsh r1, [r1, #0xea + HIDDEN_STAIRS_TRIGGER_OFFSET] - bl GetTileSafe - mov r4, r0 - ldr r0, [r4, #0x10] - ldrb r0, [r0, #0x20] - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - ldr r0, _02338848 ; =DUNGEON_PTR - ldr r2, [r0] - add r0, r2, #0x1a000 - ldrb r1, [r0, #0x246 + HIDDEN_STAIRS_TRIGGER_OFFSET] - cmp r1, #0 - ldreqb r0, [r0, #0x244 + HIDDEN_STAIRS_TRIGGER_OFFSET] - cmpeq r0, #0 - bne _0233881C - cmp r5, #0 - beq _0233881C - add r0, r2, #0xe8 + HIDDEN_STAIRS_TRIGGER_OFFSET - add r0, r0, #0xcc00 - mov r1, #0x41 - mov r2, #1 - bl PlayEffectAnimationPos - bl GetLeader - ldr r1, _0233884C ; =0x00000F31 - bl LogMessageByIdWithPopupCheckUser -_0233881C: - ldr r1, [r4, #0x10] - mov r2, #1 - ldr r0, _02338848 ; =DUNGEON_PTR - strb r2, [r1, #0x20] - ldr r0, [r0] - add r1, r0, #0xcc00 - ldrsh r0, [r1, #0xe8 + HIDDEN_STAIRS_TRIGGER_OFFSET] - ldrsh r1, [r1, #0xea + HIDDEN_STAIRS_TRIGGER_OFFSET] - bl DrawMinimapTile - bl UpdateTrapsVisibility - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02338848: .word DUNGEON_PTR -#ifdef JAPAN -_0233884C: .word 0x000008A8 -#else -_0233884C: .word 0x00000F31 -#endif - arm_func_end HiddenStairsTrigger diff --git a/asm/overlay_29_02338684.s b/asm/overlay_29_02338684.s new file mode 100644 index 00000000..ed970938 --- /dev/null +++ b/asm/overlay_29_02338684.s @@ -0,0 +1,179 @@ + .include "asm/macros.inc" + .include "overlay_29_02338684.inc" + + .text + + arm_func_start IsSecretFloor +IsSecretFloor: ; 0x02338684 + stmdb sp!, {r3, lr} + bl IsSecretBazaar + cmp r0, #0 + bne _023386A0 + bl IsSecretRoom + cmp r0, #0 + beq _023386A8 +_023386A0: + mov r0, #1 + ldmia sp!, {r3, pc} +_023386A8: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end IsSecretFloor + + arm_func_start GetCurrentHiddenStairsType +GetCurrentHiddenStairsType: ; 0x023386B0 + stmdb sp!, {r3, lr} + bl IsSecretBazaar + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, pc} + bl IsSecretRoom + cmp r0, #0 + movne r0, #2 + moveq r0, #0 + ldmia sp!, {r3, pc} + arm_func_end GetCurrentHiddenStairsType + + arm_func_start HiddenStairsPresent +HiddenStairsPresent: ; 0x023386D8 + ldr r0, _02338704 ; =DUNGEON_PTR + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0xcc00 +#ifdef JAPAN + ldrsh r2, [r0, #0x44] + cmp r2, r1 + ldrnesh r0, [r0, #0x46] +#else + ldrsh r2, [r0, #0xe8] + cmp r2, r1 + ldrnesh r0, [r0, #0xea] +#endif + cmpne r0, r1 + moveq r0, #0 + movne r0, #1 + bx lr + .align 2, 0 +_02338704: .word DUNGEON_PTR + arm_func_end HiddenStairsPresent + + arm_func_start PositionIsOnHiddenStairs +PositionIsOnHiddenStairs: ; 0x02338708 + ldr r1, _02338738 ; =DUNGEON_PTR + ldrsh r2, [r0] + ldr r1, [r1] + add r1, r1, #0xcc00 +#ifdef JAPAN + ldrsh r3, [r1, #0x44] + cmp r3, r2 + ldreqsh r1, [r1, #0x46] +#else + ldrsh r3, [r1, #0xe8] + cmp r3, r2 + ldreqsh r1, [r1, #0xea] +#endif + ldreqsh r0, [r0, #2] + cmpeq r1, r0 + moveq r0, #1 + movne r0, #0 + bx lr + .align 2, 0 +_02338738: .word DUNGEON_PTR + arm_func_end PositionIsOnHiddenStairs + + arm_func_start ov29_0233873C +ov29_0233873C: ; 0x0233873C + stmdb sp!, {r3, lr} + bl HiddenStairsPresent + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldr r0, _02338764 ; =DUNGEON_PTR + ldr r0, [r0] +#ifdef JAPAN + add r0, r0, #0x44 +#else + add r0, r0, #0xe8 +#endif + add r0, r0, #0xcc00 + bl ov29_02338768 + ldmia sp!, {r3, pc} + .align 2, 0 +_02338764: .word DUNGEON_PTR + arm_func_end ov29_0233873C + + arm_func_start ov29_02338768 +ov29_02338768: ; 0x02338768 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl ov29_022E2418 + mov r4, r0 + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + bl GetTileSafe + str r4, [r0, #0x10] + mov r0, #0 + strb r0, [r4, #0x20] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_02338768 + + arm_func_start HiddenStairsTrigger +HiddenStairsTrigger: ; 0x02338794 +#ifdef JAPAN +#define HIDDEN_STAIRS_TRIGGER_OFFSET -0xA4 +#else +#define HIDDEN_STAIRS_TRIGGER_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl HiddenStairsPresent + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, _02338848 ; =DUNGEON_PTR + ldr r0, [r0] + add r1, r0, #0xcc00 + ldrsh r0, [r1, #0xe8 + HIDDEN_STAIRS_TRIGGER_OFFSET] + ldrsh r1, [r1, #0xea + HIDDEN_STAIRS_TRIGGER_OFFSET] + bl GetTileSafe + mov r4, r0 + ldr r0, [r4, #0x10] + ldrb r0, [r0, #0x20] + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + ldr r0, _02338848 ; =DUNGEON_PTR + ldr r2, [r0] + add r0, r2, #0x1a000 + ldrb r1, [r0, #0x246 + HIDDEN_STAIRS_TRIGGER_OFFSET] + cmp r1, #0 + ldreqb r0, [r0, #0x244 + HIDDEN_STAIRS_TRIGGER_OFFSET] + cmpeq r0, #0 + bne _0233881C + cmp r5, #0 + beq _0233881C + add r0, r2, #0xe8 + HIDDEN_STAIRS_TRIGGER_OFFSET + add r0, r0, #0xcc00 + mov r1, #0x41 + mov r2, #1 + bl PlayEffectAnimationPos + bl GetLeader + ldr r1, _0233884C ; =0x00000F31 + bl LogMessageByIdWithPopupCheckUser +_0233881C: + ldr r1, [r4, #0x10] + mov r2, #1 + ldr r0, _02338848 ; =DUNGEON_PTR + strb r2, [r1, #0x20] + ldr r0, [r0] + add r1, r0, #0xcc00 + ldrsh r0, [r1, #0xe8 + HIDDEN_STAIRS_TRIGGER_OFFSET] + ldrsh r1, [r1, #0xea + HIDDEN_STAIRS_TRIGGER_OFFSET] + bl DrawMinimapTile + bl UpdateTrapsVisibility + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02338848: .word DUNGEON_PTR +#ifdef JAPAN +_0233884C: .word 0x000008A8 +#else +_0233884C: .word 0x00000F31 +#endif + arm_func_end HiddenStairsTrigger diff --git a/asm/overlay_29_0234969C.s b/asm/overlay_29_0234969C.s deleted file mode 100644 index eb9e819c..00000000 --- a/asm/overlay_29_0234969C.s +++ /dev/null @@ -1,24 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_29_0234969C.inc" - - .text - - arm_func_start ov29_0234969C -ov29_0234969C: ; 0x0234969C - ldr r1, _023496AC ; =DUNGEON_PTR - ldr r1, [r1] - strb r0, [r1, #2] - bx lr - .align 2, 0 -_023496AC: .word DUNGEON_PTR - arm_func_end ov29_0234969C - - arm_func_start ov29_023496B0 -ov29_023496B0: ; 0x023496B0 - ldr r0, _023496C0 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #2] - bx lr - .align 2, 0 -_023496C0: .word DUNGEON_PTR - arm_func_end ov29_023496B0 diff --git a/include/overlay_29_022EAE14.h b/include/overlay_29_022EAE14.h new file mode 100644 index 00000000..ce447523 --- /dev/null +++ b/include/overlay_29_022EAE14.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_022EAE14_H +#define PMDSKY_OVERLAY_29_022EAE14_H + +#include "dungeon.h" +#include "util.h" + +void ChangeDungeonMusic(enum music_id music); + +#endif diff --git a/include/overlay_29_022EAEFC.h b/include/overlay_29_022EAEFC.h new file mode 100644 index 00000000..2d851237 --- /dev/null +++ b/include/overlay_29_022EAEFC.h @@ -0,0 +1,11 @@ +#ifndef PMDSKY_OVERLAY_29_022EAEFC_H +#define PMDSKY_OVERLAY_29_022EAEFC_H + +#include "dungeon.h" +#include "util.h" + +bool8 ov29_022EAEFC(void); +u8 ov29_022EAF20(void); +void SetUnkMusicFlag(u8 value); + +#endif diff --git a/include/overlay_29_022ECF44.h b/include/overlay_29_022ECF44.h new file mode 100644 index 00000000..4246e515 --- /dev/null +++ b/include/overlay_29_022ECF44.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_022ECF44_H +#define PMDSKY_OVERLAY_29_022ECF44_H + +#include "dungeon.h" +#include "util.h" + +bool8 IsDungeonEndReasonFailure(void); + +#endif diff --git a/include/overlay_29_0233865C.h b/include/overlay_29_0233865C.h new file mode 100644 index 00000000..d9eff306 --- /dev/null +++ b/include/overlay_29_0233865C.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_0233865C_H +#define PMDSKY_OVERLAY_29_0233865C_H + +#include "dungeon.h" +#include "util.h" + +bool8 IsSecretRoom(void); + +#endif diff --git a/include/overlay_29_02349688.h b/include/overlay_29_02349688.h index 19e0443b..1f5e8141 100644 --- a/include/overlay_29_02349688.h +++ b/include/overlay_29_02349688.h @@ -5,5 +5,7 @@ #include "util.h" void ov29_02349688(bool8 value); +void ov29_0234969C(bool8 value); +bool8 ov29_023496B0(void); #endif diff --git a/include/run_dungeon_1.h b/include/run_dungeon_1.h index 03054409..005bc5dc 100644 --- a/include/run_dungeon_1.h +++ b/include/run_dungeon_1.h @@ -6,5 +6,7 @@ bool8 IsBossFight(enum fixed_room_id fixed_room_id); bool8 IsCurrentFixedRoomBossFight(); +bool8 IsMarowakTrainingMaze(void); +bool8 FixedRoomIsSubstituteRoom(void); #endif //PMDSKY_RUN_DUNGEON_1_H diff --git a/main.lsf b/main.lsf index 53e87bce..f9a03114 100644 --- a/main.lsf +++ b/main.lsf @@ -752,7 +752,7 @@ Overlay OVY_29 Object src/dg.o Object asm/overlay_29_022E0378.o Object src/run_dungeon_1.o - Object asm/overlay_29_022E08A0.o + Object asm/overlay_29_022E08F4.o Object src/overlay_29_022E0A04.o Object asm/overlay_29_022E0A18.o Object src/overlay_29_022E1610.o @@ -783,6 +783,10 @@ Overlay OVY_29 Object asm/overlay_29_022E9618.o Object src/dg_random.o Object asm/overlay_29_022EAB50.o + Object src/overlay_29_022EAE14.o + Object asm/overlay_29_022EAE40.o + Object src/overlay_29_022EAEFC.o + Object asm/overlay_29_022EAF48.o Object src/dungeon_action.o Object asm/overlay_29_022EB44C.o Object src/overlay_29_022EBC50.o @@ -793,6 +797,8 @@ Overlay OVY_29 Object asm/overlay_29_022EC62C.o Object src/overlay_29_022ECDC0.o Object asm/overlay_29_022ECDE4.o + Object src/overlay_29_022ECF44.o + Object asm/overlay_29_022ECF78.o Object src/overlay_29_022ED01C.o Object asm/overlay_29_022ED030.o Object src/overlay_29_022ED868.o @@ -1024,6 +1030,8 @@ Overlay OVY_29 Object src/overlay_29_02338560.o Object src/overlay_29_02338604.o Object asm/overlay_29_0233861C.o + Object src/overlay_29_0233865C.o + Object asm/overlay_29_02338684.o Object src/overlay_29_02338850.o Object asm/overlay_29_023388B0.o Object src/overlay_29_02339118.o @@ -1059,7 +1067,6 @@ Overlay OVY_29 Object src/overlay_29_02349620.o Object asm/overlay_29_02349658.o Object src/overlay_29_02349688.o - Object asm/overlay_29_0234969C.o Object src/overlay_29_023496D8.o Object asm/overlay_29_023496EC.o Object src/overlay_29_0234987C.o diff --git a/src/overlay_29_022EAE14.c b/src/overlay_29_022EAE14.c new file mode 100644 index 00000000..79799dc0 --- /dev/null +++ b/src/overlay_29_022EAE14.c @@ -0,0 +1,10 @@ +#include "overlay_29_022EAE14.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +void ChangeDungeonMusic(enum music_id music) +{ + DUNGEON_PTR->dungeon_music_playing_id = music; + DUNGEON_PTR->field_0x2cb00 = 0; +} diff --git a/src/overlay_29_022EAEFC.c b/src/overlay_29_022EAEFC.c new file mode 100644 index 00000000..817216a7 --- /dev/null +++ b/src/overlay_29_022EAEFC.c @@ -0,0 +1,19 @@ +#include "overlay_29_022EAEFC.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +bool8 ov29_022EAEFC(void) +{ + return DUNGEON_PTR->unk_music_flag == 0; +} + +u8 ov29_022EAF20(void) +{ + return DUNGEON_PTR->unk_music_flag; +} + +void SetUnkMusicFlag(u8 value) +{ + DUNGEON_PTR->unk_music_flag = value; +} diff --git a/src/overlay_29_022ECF44.c b/src/overlay_29_022ECF44.c new file mode 100644 index 00000000..cb7dbaff --- /dev/null +++ b/src/overlay_29_022ECF44.c @@ -0,0 +1,9 @@ +#include "overlay_29_022ECF44.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +bool8 IsDungeonEndReasonFailure(void) +{ + return (s16) DUNGEON_PTR->fainted_monster_dungeon_end_reason.other < DAMAGE_SOURCE_ESCAPE; +} diff --git a/src/overlay_29_0233865C.c b/src/overlay_29_0233865C.c new file mode 100644 index 00000000..389f66c2 --- /dev/null +++ b/src/overlay_29_0233865C.c @@ -0,0 +1,9 @@ +#include "overlay_29_0233865C.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +bool8 IsSecretRoom(void) +{ + return DUNGEON_PTR->gen_info.fixed_room_id == FIXED_SECRET_ROOM; +} diff --git a/src/overlay_29_02349688.c b/src/overlay_29_02349688.c index 47cedfea..43e3b390 100644 --- a/src/overlay_29_02349688.c +++ b/src/overlay_29_02349688.c @@ -14,3 +14,13 @@ void ov29_02349688(bool8 value) { DUNGEON_PTR->target_enemy_defeated_message = value; } + +void ov29_0234969C(bool8 value) +{ + DUNGEON_PTR->hidden_outlaw_defeated_message = value; +} + +bool8 ov29_023496B0(void) +{ + return DUNGEON_PTR->hidden_outlaw_defeated_message; +} diff --git a/src/run_dungeon_1.c b/src/run_dungeon_1.c index 213b6d70..52dcf7d9 100644 --- a/src/run_dungeon_1.c +++ b/src/run_dungeon_1.c @@ -15,3 +15,18 @@ bool8 IsCurrentFixedRoomBossFight() { IsBossFight(DUNGEON_PTR[0]->gen_info.fixed_room_id); } + +bool8 IsMarowakTrainingMaze(void) +{ + enum dungeon_id id = DUNGEON_PTR[0]->id; + + if (id >= DUNGEON_NORMAL_FLY_MAZE && id <= DUNGEON_EXPLORER_MAZE) { + return TRUE; + } + return FALSE; +} + +bool8 FixedRoomIsSubstituteRoom(void) +{ + return DUNGEON_PTR[0]->gen_info.fixed_room_id == FIXED_SUBSTITUTE_ROOM; +}