From 3302e441f3ba3569f1547e9e566c3c0ca32b8317 Mon Sep 17 00:00:00 2001 From: slaw-22 <> Date: Fri, 3 Oct 2025 20:13:57 +0000 Subject: [PATCH] Decomp IsOutlaw --- asm/include/overlay_29_022EFA6C.inc | 10 - asm/include/overlay_29_022EFB04.inc | 12 + asm/include/overlay_29_022F7768.inc | 2 +- asm/include/overlay_29_022FBB1C.inc | 43 +- asm/include/overlay_29_022FBDF0.inc | 40 ++ asm/include/overlay_29_022FC9C0.inc | 2 +- asm/include/overlay_29_02301FBC.inc | 2 +- asm/include/overlay_29_02308FE0.inc | 2 +- asm/include/overlay_29_0232C524.inc | 2 +- asm/include/overlay_29_0233861C.inc | 2 +- asm/overlay_29_022EFA6C.s | 774 ----------------------- asm/overlay_29_022EFB04.s | 767 +++++++++++++++++++++++ asm/overlay_29_022F7768.s | 2 +- asm/overlay_29_022FBB1C.s | 923 ---------------------------- asm/overlay_29_022FBDF0.s | 918 +++++++++++++++++++++++++++ asm/overlay_29_022FC9C0.s | 4 +- asm/overlay_29_02301FBC.s | 2 +- asm/overlay_29_02308FE0.s | 4 +- asm/overlay_29_0232C524.s | 2 +- asm/overlay_29_0233861C.s | 2 +- include/dungeon_logic_6.h | 9 + include/dungeon_logic_7.h | 9 + main.lsf | 4 + src/dungeon_logic_6.c | 17 + src/dungeon_logic_7.c | 10 + src/dungeon_recruitment.c | 4 +- 26 files changed, 1804 insertions(+), 1764 deletions(-) create mode 100644 asm/include/overlay_29_022EFB04.inc create mode 100644 asm/include/overlay_29_022FBDF0.inc create mode 100644 asm/overlay_29_022EFB04.s create mode 100644 asm/overlay_29_022FBDF0.s create mode 100644 include/dungeon_logic_6.h create mode 100644 include/dungeon_logic_7.h create mode 100644 src/dungeon_logic_6.c create mode 100644 src/dungeon_logic_7.c diff --git a/asm/include/overlay_29_022EFA6C.inc b/asm/include/overlay_29_022EFA6C.inc index 77b8c8ce..d315d5a0 100644 --- a/asm/include/overlay_29_022EFA6C.inc +++ b/asm/include/overlay_29_022EFA6C.inc @@ -1,14 +1,4 @@ #pragma once .public BoostIQ .public DUNGEON_PTR -.public EntityIsValid__022F0590 -.public ov29_022DE5F0 -.public ov29_022EA370 -.public ov29_0234B1A4 -.public ov29_0234BA54 -.public ov29_0234D630 -.public ov29_0234D8A0 -.public ov29_023535A4 -.public ov29_0237C9A0 -.public sub_0201D198 .public TeamMemberHasItemActive diff --git a/asm/include/overlay_29_022EFB04.inc b/asm/include/overlay_29_022EFB04.inc new file mode 100644 index 00000000..7eb7bd74 --- /dev/null +++ b/asm/include/overlay_29_022EFB04.inc @@ -0,0 +1,12 @@ +#pragma once +.public DUNGEON_PTR +.public EntityIsValid__022F0590 +.public ov29_022DE5F0 +.public ov29_022EA370 +.public ov29_0234B1A4 +.public ov29_0234BA54 +.public ov29_0234D630 +.public ov29_0234D8A0 +.public ov29_023535A4 +.public ov29_0237C9A0 +.public sub_0201D198 diff --git a/asm/include/overlay_29_022F7768.inc b/asm/include/overlay_29_022F7768.inc index 6bb56cf8..2534301c 100644 --- a/asm/include/overlay_29_022F7768.inc +++ b/asm/include/overlay_29_022F7768.inc @@ -49,7 +49,7 @@ .public ov29_022EA370 .public ov29_022ECDE4 .public ov29_022EF7C4 -.public ov29_022EFAE8 +.public IsLoneOutlaw .public ov29_022F9B8C .public ov29_022FE048 .public ov29_022FFB90 diff --git a/asm/include/overlay_29_022FBB1C.inc b/asm/include/overlay_29_022FBB1C.inc index 5c195559..12a88476 100644 --- a/asm/include/overlay_29_022FBB1C.inc +++ b/asm/include/overlay_29_022FBB1C.inc @@ -1,50 +1,11 @@ #pragma once -.public _s32_div_f -.public CopySpawnEntriesMaster .public DUNGEON_PTR -.public DungeonRngSetPrimary -.public DungeonRngSetSecondary -.public EnableAllLearnableIqSkills .public EntityIsValid__022F7364 -.public EntityIsValid__022FC99C -.public FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE -.public GetActiveTeamMember .public GetBodySize -.public GetDefensiveStatAtLevel -.public GetExp -.public GetExplorerMazeMonster .public GetIdleAnimationId -.public GetMaxHpAtLevel -.public GetMonsterIdFromSpawnEntry -.public GetMonsterLevelFromSpawnEntry -.public GetMonsterMoves -.public GetOffensiveStatAtLevel -.public GetOutlawSpawnData -.public GetTile .public GetTileSafe -.public GetTurnLimit -.public GroundToDungeonMoveset .public InitAnimationControlWithSet__0201C0CC -.public InitMoveCheckId -.public InitTeamMember -.public IQ_SKILLS -.public IsCurrentMissionType -.public IsDestinationFloorWithFixedRoom -.public IsDestinationFloorWithMonster -.public IsFullFloorFixedRoom -.public IsInvalidSpawnTile .public IsMonster__022F9720 -.public IsSecretBazaarNpcBehavior -.public JoinedAtRangeCheck2Veneer -.public LoadWazaP2 -.public ov29_022DDA54 -.public ov29_022EFAE8 -.public ov29_022FB83C -.public ov29_022FCD04 -.public ov29_023021F0 -.public ov29_02304830 -.public ov29_02351E28 -.public SetMonsterLevelAndId .public SetSpriteIdForAnimationControl -.public sub_0200F9B4 -.public UnloadCurrentWazaP +.public ov29_022DDA54 +.public ov29_02304830 diff --git a/asm/include/overlay_29_022FBDF0.inc b/asm/include/overlay_29_022FBDF0.inc new file mode 100644 index 00000000..18daf0c0 --- /dev/null +++ b/asm/include/overlay_29_022FBDF0.inc @@ -0,0 +1,40 @@ +#pragma once +.public CopySpawnEntriesMaster +.public DUNGEON_PTR +.public DungeonRngSetPrimary +.public DungeonRngSetSecondary +.public EnableAllLearnableIqSkills +.public EntityIsValid__022FC99C +.public FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE +.public GetActiveTeamMember +.public GetDefensiveStatAtLevel +.public GetExp +.public GetExplorerMazeMonster +.public GetMaxHpAtLevel +.public GetMonsterIdFromSpawnEntry +.public GetMonsterLevelFromSpawnEntry +.public GetMonsterMoves +.public GetOffensiveStatAtLevel +.public GetOutlawSpawnData +.public GetTile +.public GetTurnLimit +.public GroundToDungeonMoveset +.public IQ_SKILLS +.public InitMoveCheckId +.public InitTeamMember +.public IsCurrentMissionType +.public IsDestinationFloorWithFixedRoom +.public IsDestinationFloorWithMonster +.public IsFullFloorFixedRoom +.public IsInvalidSpawnTile +.public IsSecretBazaarNpcBehavior +.public JoinedAtRangeCheck2Veneer +.public LoadWazaP2 +.public SetMonsterLevelAndId +.public UnloadCurrentWazaP +.public _s32_div_f +.public ov29_022FB83C +.public ov29_022FCD04 +.public ov29_023021F0 +.public ov29_02351E28 +.public sub_0200F9B4 diff --git a/asm/include/overlay_29_022FC9C0.inc b/asm/include/overlay_29_022FC9C0.inc index d9bd9dd2..421e08d1 100644 --- a/asm/include/overlay_29_022FC9C0.inc +++ b/asm/include/overlay_29_022FC9C0.inc @@ -75,7 +75,7 @@ .public ov29_022E2018 .public ov29_022E2DFC .public ov29_022E6644 -.public ov29_022EFAE8 +.public IsLoneOutlaw .public ov29_022F9EA0 .public ov29_022FA1D8 .public ov29_022FB83C diff --git a/asm/include/overlay_29_02301FBC.inc b/asm/include/overlay_29_02301FBC.inc index 21a65f0e..c4bf296f 100644 --- a/asm/include/overlay_29_02301FBC.inc +++ b/asm/include/overlay_29_02301FBC.inc @@ -10,4 +10,4 @@ .public IqSkillFlagTest .public MIN_IQ_EXCLUSIVE_MOVE_USER .public MIN_IQ_ITEM_MASTER -.public ov29_022FBDE0 +.public IsLoneOutlawVeneer diff --git a/asm/include/overlay_29_02308FE0.inc b/asm/include/overlay_29_02308FE0.inc index 942c0ccc..31be6ac9 100644 --- a/asm/include/overlay_29_02308FE0.inc +++ b/asm/include/overlay_29_02308FE0.inc @@ -93,7 +93,7 @@ .public ov29_022F9AF4 .public ov29_022FB98C .public ov29_022FBD24 -.public ov29_022FBDE0 +.public IsLoneOutlawVeneer .public ov29_02303E0C .public ov29_02304830 .public ov29_02304A48 diff --git a/asm/include/overlay_29_0232C524.inc b/asm/include/overlay_29_0232C524.inc index e775b523..638b4a0c 100644 --- a/asm/include/overlay_29_0232C524.inc +++ b/asm/include/overlay_29_0232C524.inc @@ -74,7 +74,7 @@ .public ov29_022E6784 .public ov29_022E8104 .public ov29_022E81F8 -.public ov29_022FBDE0 +.public IsLoneOutlawVeneer .public ov29_022FBDF0 .public ov29_022FD7A0 .public ov29_0230D874 diff --git a/asm/include/overlay_29_0233861C.inc b/asm/include/overlay_29_0233861C.inc index b6ee7c40..0c4d4488 100644 --- a/asm/include/overlay_29_0233861C.inc +++ b/asm/include/overlay_29_0233861C.inc @@ -51,7 +51,7 @@ .public ov29_022E3580 .public ov29_022E7F7C .public ov29_022EA408 -.public ov29_022EFAE8 +.public IsLoneOutlaw .public ov29_0234217C .public ov29_02342594 .public ov29_023427E4 diff --git a/asm/overlay_29_022EFA6C.s b/asm/overlay_29_022EFA6C.s index cf18b9b6..605bbd89 100644 --- a/asm/overlay_29_022EFA6C.s +++ b/asm/overlay_29_022EFA6C.s @@ -49,777 +49,3 @@ _022EFAE4: .word 0x0002862C _022EFAE4: .word 0x000286D0 #endif arm_func_end TryActivateIqBooster - - arm_func_start ov29_022EFAE8 -ov29_022EFAE8: ; 0x022EFAE8 - add r0, r0, #0xff - and r0, r0, #0xff - cmp r0, #3 - movls r0, #1 - movhi r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov29_022EFAE8 - - arm_func_start IsSecretBazaarNpcBehavior -IsSecretBazaarNpcBehavior: ; 0x022EFB04 - add r0, r0, #0xf0 - and r0, r0, #0xff - cmp r0, #4 - movls r0, #1 - movhi r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end IsSecretBazaarNpcBehavior - - arm_func_start ov29_022EFB20 -ov29_022EFB20: ; 0x022EFB20 - stmdb sp!, {r3, lr} - cmp r0, #0 - beq _022EFB48 - mov r0, #0xa - bl ov29_0234BA54 - mov r0, #0 - bl ov29_0234B1A4 - mov r0, #0xa - mov r1, #0x62 - bl ov29_022EA370 -_022EFB48: - bl ov29_0234D630 - ldr r1, _022EFB7C ; =ov29_023535A4 - mvn r2, #1 - mov r0, #1 - strb r2, [r1] - bl ov29_022DE5F0 - ldr r1, _022EFB80 ; =ov29_0237C9A0 - strh r0, [r1, #2] - mov r0, #0 - bl ov29_022DE5F0 - ldr r1, _022EFB80 ; =ov29_0237C9A0 - strh r0, [r1] - ldmia sp!, {r3, pc} - .align 2, 0 -_022EFB7C: .word ov29_023535A4 -_022EFB80: .word ov29_0237C9A0 - arm_func_end ov29_022EFB20 - - arm_func_start ov29_022EFB84 -ov29_022EFB84: ; 0x022EFB84 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0 - bl ov29_0234D8A0 - cmp r4, #0 - ldmeqia sp!, {r4, pc} - mov r0, #0xa - mov r1, #0x62 - bl ov29_022EA370 - ldmia sp!, {r4, pc} - arm_func_end ov29_022EFB84 - - arm_func_start ov29_022EFBAC -ov29_022EFBAC: ; 0x022EFBAC - ldr r1, _022F04E4 ; =0x000001FE - cmp r0, r1 - bgt _022F0314 - bge _022F04C4 - cmp r0, #0x1d4 - bgt _022F024C - bge _022F04C4 - sub r2, r1, #0x53 - cmp r0, r2 - bgt _022F01E4 - sub r1, r1, #0xe9 - subs r1, r0, r1 - addpl pc, pc, r1, lsl #2 - b _022EFE40 -_022EFBE4: ; jump table - b _022F04C4 ; case 0 - b _022F04C4 ; case 1 - b _022F04C4 ; case 2 - b _022F04CC ; case 3 - b _022F04DC ; case 4 - b _022F04DC ; case 5 - b _022F04DC ; case 6 - b _022F04DC ; case 7 - b _022F04DC ; case 8 - b _022F04DC ; case 9 - b _022F04DC ; case 10 - b _022F04DC ; case 11 - b _022F04CC ; case 12 - b _022F04CC ; case 13 - b _022F04DC ; case 14 - b _022F04DC ; case 15 - b _022F04DC ; case 16 - b _022F04DC ; case 17 - b _022F04C4 ; case 18 - b _022F04DC ; case 19 - b _022F04C4 ; case 20 - b _022F04DC ; case 21 - b _022F04DC ; case 22 - b _022F04DC ; case 23 - b _022F04DC ; case 24 - b _022F04DC ; case 25 - b _022F04DC ; case 26 - b _022F04DC ; case 27 - b _022F04DC ; case 28 - b _022F04C4 ; case 29 - b _022F04C4 ; case 30 - b _022F04DC ; case 31 - b _022F04DC ; case 32 - b _022F04DC ; case 33 - b _022F04DC ; case 34 - b _022F04C4 ; case 35 - b _022F04DC ; case 36 - b _022F04DC ; case 37 - b _022F04DC ; case 38 - b _022F04DC ; case 39 - b _022F04DC ; case 40 - b _022F04DC ; case 41 - b _022F04C4 ; case 42 - b _022F04C4 ; case 43 - b _022F04DC ; case 44 - b _022F04DC ; case 45 - b _022F04DC ; case 46 - b _022F04DC ; case 47 - b _022F04DC ; case 48 - b _022F04DC ; case 49 - b _022F04DC ; case 50 - b _022F04DC ; case 51 - b _022F04CC ; case 52 - b _022F04DC ; case 53 - b _022F04DC ; case 54 - b _022F04DC ; case 55 - b _022F04DC ; case 56 - b _022F04DC ; case 57 - b _022F04C4 ; case 58 - b _022F04DC ; case 59 - b _022F04DC ; case 60 - b _022F04DC ; case 61 - b _022F04DC ; case 62 - b _022F04DC ; case 63 - b _022F04CC ; case 64 - b _022F04CC ; case 65 - b _022F04DC ; case 66 - b _022F04DC ; case 67 - b _022F04DC ; case 68 - b _022F04C4 ; case 69 - b _022F04C4 ; case 70 - b _022F04C4 ; case 71 - b _022F04C4 ; case 72 - b _022F04DC ; case 73 - b _022F04DC ; case 74 - b _022F04DC ; case 75 - b _022F04C4 ; case 76 - b _022F04DC ; case 77 - b _022F04DC ; case 78 - b _022F04DC ; case 79 - b _022F04CC ; case 80 - b _022F04C4 ; case 81 - b _022F04DC ; case 82 - b _022F04DC ; case 83 - b _022F04C4 ; case 84 - b _022F04CC ; case 85 - b _022F04CC ; case 86 - b _022F04DC ; case 87 - b _022F04C4 ; case 88 - b _022F04C4 ; case 89 - b _022F04C4 ; case 90 - b _022F04C4 ; case 91 - b _022F04DC ; case 92 - b _022F04DC ; case 93 - b _022F04C4 ; case 94 - b _022F04C4 ; case 95 - b _022F04DC ; case 96 - b _022F04DC ; case 97 - b _022F04DC ; case 98 - b _022F04DC ; case 99 - b _022F04C4 ; case 100 - b _022F04DC ; case 101 - b _022F04C4 ; case 102 - b _022F04C4 ; case 103 - b _022F04C4 ; case 104 - b _022F04C4 ; case 105 - b _022F04DC ; case 106 - b _022F04DC ; case 107 - b _022F04C4 ; case 108 - b _022F04DC ; case 109 - b _022F04C4 ; case 110 - b _022F04DC ; case 111 - b _022F04DC ; case 112 - b _022F04DC ; case 113 - b _022F04DC ; case 114 - b _022F04DC ; case 115 - b _022F04DC ; case 116 - b _022F04C4 ; case 117 - b _022F04CC ; case 118 - b _022F04DC ; case 119 - b _022F04DC ; case 120 - b _022F04CC ; case 121 - b _022F04C4 ; case 122 - b _022F04C4 ; case 123 - b _022F04C4 ; case 124 - b _022F04C4 ; case 125 - b _022F04DC ; case 126 - b _022F04DC ; case 127 - b _022F04CC ; case 128 - b _022F04C4 ; case 129 - b _022F04C4 ; case 130 - b _022F04DC ; case 131 - b _022F04DC ; case 132 - b _022F04C4 ; case 133 - b _022F04DC ; case 134 - b _022F04C4 ; case 135 - b _022F04C4 ; case 136 - b _022F04C4 ; case 137 - b _022F04DC ; case 138 - b _022F04C4 ; case 139 - b _022F04C4 ; case 140 - b _022F04C4 ; case 141 - b _022F04C4 ; case 142 - b _022F04C4 ; case 143 - b _022F04C4 ; case 144 - b _022F04DC ; case 145 - b _022F04DC ; case 146 - b _022F04DC ; case 147 - b _022F04CC ; case 148 - b _022F04CC ; case 149 - b _022F04CC ; case 150 -_022EFE40: - cmp r0, #0xee - bgt _022F0194 - subs r1, r0, #0x29 - addpl pc, pc, r1, lsl #2 - b _022F016C -_022EFE54: ; jump table - b _022F04C4 ; case 0 - b _022F04C4 ; case 1 - b _022F04DC ; case 2 - b _022F04DC ; case 3 - b _022F04DC ; case 4 - b _022F04DC ; case 5 - b _022F04DC ; case 6 - b _022F04DC ; case 7 - b _022F04C4 ; case 8 - b _022F04CC ; case 9 - b _022F04CC ; case 10 - b _022F04DC ; case 11 - b _022F04CC ; case 12 - b _022F04DC ; case 13 - b _022F04DC ; case 14 - b _022F04DC ; case 15 - b _022F04DC ; case 16 - b _022F04CC ; case 17 - b _022F04CC ; case 18 - b _022F04DC ; case 19 - b _022F04DC ; case 20 - b _022F04DC ; case 21 - b _022F04DC ; case 22 - b _022F04DC ; case 23 - b _022F04D4 ; case 24 - b _022F04DC ; case 25 - b _022F04DC ; case 26 - b _022F04DC ; case 27 - b _022F04DC ; case 28 - b _022F04DC ; case 29 - b _022F04DC ; case 30 - b _022F04C4 ; case 31 - b _022F04C4 ; case 32 - b _022F04C4 ; case 33 - b _022F04DC ; case 34 - b _022F04DC ; case 35 - b _022F04DC ; case 36 - b _022F04DC ; case 37 - b _022F04DC ; case 38 - b _022F04DC ; case 39 - b _022F04C4 ; case 40 - b _022F04C4 ; case 41 - b _022F04DC ; case 42 - b _022F04DC ; case 43 - b _022F04DC ; case 44 - b _022F04DC ; case 45 - b _022F04DC ; case 46 - b _022F04DC ; case 47 - b _022F04DC ; case 48 - b _022F04DC ; case 49 - b _022F04C4 ; case 50 - b _022F04C4 ; case 51 - b _022F04C4 ; case 52 - b _022F04DC ; case 53 - b _022F04DC ; case 54 - b _022F04DC ; case 55 - b _022F04DC ; case 56 - b _022F04CC ; case 57 - b _022F04CC ; case 58 - b _022F04DC ; case 59 - b _022F04DC ; case 60 - b _022F04DC ; case 61 - b _022F04DC ; case 62 - b _022F04DC ; case 63 - b _022F04DC ; case 64 - b _022F04DC ; case 65 - b _022F04DC ; case 66 - b _022F04DC ; case 67 - b _022F04C4 ; case 68 - b _022F04C4 ; case 69 - b _022F04DC ; case 70 - b _022F04DC ; case 71 - b _022F04DC ; case 72 - b _022F04DC ; case 73 - b _022F04DC ; case 74 - b _022F04C4 ; case 75 - b _022F04C4 ; case 76 - b _022F04C4 ; case 77 - b _022F04C4 ; case 78 - b _022F04DC ; case 79 - b _022F04DC ; case 80 - b _022F04DC ; case 81 - b _022F04DC ; case 82 - b _022F04DC ; case 83 - b _022F04DC ; case 84 - b _022F04DC ; case 85 - b _022F04DC ; case 86 - b _022F04DC ; case 87 - b _022F04C4 ; case 88 - b _022F04C4 ; case 89 - b _022F04DC ; case 90 - b _022F04CC ; case 91 - b _022F04C4 ; case 92 - b _022F04CC ; case 93 - b _022F04CC ; case 94 - b _022F04DC ; case 95 - b _022F04C4 ; case 96 - b _022F04DC ; case 97 - b _022F04DC ; case 98 - b _022F04DC ; case 99 - b _022F04DC ; case 100 - b _022F04C4 ; case 101 - b _022F04DC ; case 102 - b _022F04C4 ; case 103 - b _022F04C4 ; case 104 - b _022F04C4 ; case 105 - b _022F04DC ; case 106 - b _022F04DC ; case 107 - b _022F04DC ; case 108 - b _022F04C4 ; case 109 - b _022F04C4 ; case 110 - b _022F04DC ; case 111 - b _022F04DC ; case 112 - b _022F04DC ; case 113 - b _022F04DC ; case 114 - b _022F04DC ; case 115 - b _022F04DC ; case 116 - b _022F04DC ; case 117 - b _022F04DC ; case 118 - b _022F04DC ; case 119 - b _022F04CC ; case 120 - b _022F04CC ; case 121 - b _022F04CC ; case 122 - b _022F04CC ; case 123 - b _022F04C4 ; case 124 - b _022F04C4 ; case 125 - b _022F04DC ; case 126 - b _022F04DC ; case 127 - b _022F04C4 ; case 128 - b _022F04C4 ; case 129 - b _022F04C4 ; case 130 - b _022F04DC ; case 131 - b _022F04DC ; case 132 - b _022F04DC ; case 133 - b _022F04DC ; case 134 - b _022F04DC ; case 135 - b _022F04DC ; case 136 - b _022F04DC ; case 137 - b _022F04DC ; case 138 - b _022F04DC ; case 139 - b _022F04DC ; case 140 - b _022F04DC ; case 141 - b _022F04DC ; case 142 - b _022F04DC ; case 143 - b _022F04DC ; case 144 - b _022F04DC ; case 145 - b _022F04C4 ; case 146 - b _022F04C4 ; case 147 - b _022F04C4 ; case 148 - b _022F04C4 ; case 149 - b _022F04C4 ; case 150 - b _022F04DC ; case 151 - b _022F04C4 ; case 152 - b _022F04DC ; case 153 - b _022F04DC ; case 154 - b _022F04DC ; case 155 - b _022F04DC ; case 156 - b _022F04CC ; case 157 - b _022F04DC ; case 158 - b _022F04C4 ; case 159 - b _022F04C4 ; case 160 - b _022F04C4 ; case 161 - b _022F04C4 ; case 162 - b _022F04C4 ; case 163 - b _022F04C4 ; case 164 - b _022F04C4 ; case 165 - b _022F04C4 ; case 166 - b _022F04C4 ; case 167 - b _022F04C4 ; case 168 - b _022F04C4 ; case 169 - b _022F04C4 ; case 170 - b _022F04C4 ; case 171 - b _022F04C4 ; case 172 - b _022F04C4 ; case 173 - b _022F04C4 ; case 174 - b _022F04C4 ; case 175 - b _022F04C4 ; case 176 - b _022F04C4 ; case 177 - b _022F04C4 ; case 178 - b _022F04C4 ; case 179 - b _022F04C4 ; case 180 - b _022F04C4 ; case 181 - b _022F04C4 ; case 182 - b _022F04C4 ; case 183 - b _022F04C4 ; case 184 - b _022F04C4 ; case 185 - b _022F04C4 ; case 186 - b _022F04C4 ; case 187 - b _022F04DC ; case 188 - b _022F04DC ; case 189 - b _022F04DC ; case 190 - b _022F04C4 ; case 191 - b _022F04DC ; case 192 - b _022F04C4 ; case 193 - b _022F04DC ; case 194 - b _022F04DC ; case 195 - b _022F04DC ; case 196 - b _022F04C4 ; case 197 -_022F016C: - cmp r0, #0xf - bgt _022F0188 - cmp r0, #0xc - blt _022F04DC - cmpne r0, #0xf - beq _022F04C4 - b _022F04DC -_022F0188: - cmp r0, #0x16 - beq _022F04C4 - b _022F04DC -_022F0194: - cmp r0, #0x104 - bgt _022F01D4 - subs r1, r0, #0xfa - addpl pc, pc, r1, lsl #2 - b _022F04DC -_022F01A8: ; jump table - b _022F04C4 ; case 0 - b _022F04DC ; case 1 - b _022F04DC ; case 2 - b _022F04C4 ; case 3 - b _022F04CC ; case 4 - b _022F04DC ; case 5 - b _022F04DC ; case 6 - b _022F04C4 ; case 7 - b _022F04DC ; case 8 - b _022F04DC ; case 9 - b _022F04C4 ; case 10 -_022F01D4: - ldr r1, _022F04E8 ; =0x00000112 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F01E4: - sub r2, r1, #0x37 - cmp r0, r2 - bgt _022F0220 - bge _022F04C4 - sub r2, r1, #0x39 - cmp r0, r2 - bgt _022F0210 - sub r1, r1, #0x39 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F0210: - sub r1, r1, #0x38 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F0220: - sub r2, r1, #0x2c - cmp r0, r2 - bgt _022F023C - sub r1, r1, #0x2c - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F023C: - sub r1, r1, #0x2b - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F024C: - sub r2, r1, #0x14 - cmp r0, r2 - bgt _022F02BC - bge _022F04CC - sub r2, r1, #0x20 - cmp r0, r2 - bgt _022F0294 - bge _022F04C4 - sub r2, r1, #0x27 - cmp r0, r2 - bgt _022F0288 - sub r1, r1, #0x27 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F0288: - cmp r0, #0x1d8 - beq _022F04CC - b _022F04DC -_022F0294: - sub r2, r1, #0x1f - cmp r0, r2 - bgt _022F02B0 - sub r1, r1, #0x1f - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F02B0: - cmp r0, #0x1e4 - beq _022F04C4 - b _022F04DC -_022F02BC: - sub r2, r1, #0xb - cmp r0, r2 - bgt _022F02F8 - bge _022F04C4 - sub r2, r1, #0xd - cmp r0, r2 - bgt _022F02E8 - sub r1, r1, #0xd - cmp r0, r1 - beq _022F04CC - b _022F04DC -_022F02E8: - sub r1, r1, #0xc - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F02F8: - cmp r0, #0x1f4 - bgt _022F0308 - beq _022F04C4 - b _022F04DC -_022F0308: - cmp r0, #0x1f8 - beq _022F04C4 - b _022F04DC -_022F0314: - add r2, r1, #0x9b - cmp r0, r2 - bgt _022F03FC - bge _022F04D4 - add r2, r1, #0x10 - cmp r0, r2 - bgt _022F0398 - bge _022F04CC - cmp r0, #0x204 - bgt _022F036C - bge _022F04C4 - add r2, r1, #1 - cmp r0, r2 - bgt _022F035C - add r1, r1, #1 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F035C: - add r1, r1, #4 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F036C: - add r2, r1, #0xb - cmp r0, r2 - bgt _022F0388 - add r1, r1, #0xb - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F0388: - add r1, r1, #0xf - cmp r0, r1 - beq _022F04CC - b _022F04DC -_022F0398: - add r2, r1, #0x17 - cmp r0, r2 - bgt _022F03D0 - bge _022F04C4 - add r2, r1, #0x15 - cmp r0, r2 - bgt _022F03C4 - add r1, r1, #0x15 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F03C4: - cmp r0, #0x214 - beq _022F04C4 - b _022F04DC -_022F03D0: - add r2, r1, #0x37 - cmp r0, r2 - bgt _022F03EC - add r1, r1, #0x37 - cmp r0, r1 - beq _022F04CC - b _022F04DC -_022F03EC: - add r1, r1, #0x38 - cmp r0, r1 - beq _022F04CC - b _022F04DC -_022F03FC: - ldr r2, _022F04EC ; =0x0000037F - cmp r0, r2 - bgt _022F0464 - bge _022F04C4 - sub r1, r2, #0x82 - cmp r0, r1 - bgt _022F0440 - bge _022F04C4 - sub r1, r2, #0xa6 - cmp r0, r1 - bgt _022F0430 - beq _022F04C4 - b _022F04DC -_022F0430: - sub r1, r2, #0xa5 - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F0440: - sub r1, r2, #0x81 - cmp r0, r1 - bgt _022F0454 - beq _022F04C4 - b _022F04DC -_022F0454: - sub r1, r2, #0x61 - cmp r0, r1 - beq _022F04CC - b _022F04DC -_022F0464: - add r1, r2, #0x9f - cmp r0, r1 - bgt _022F0498 - bge _022F04C4 - add r1, r2, #0x5a - cmp r0, r1 - bgt _022F0488 - beq _022F04C4 - b _022F04DC -_022F0488: - add r1, r2, #0x6a - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F0498: - add r1, r2, #0xcb - cmp r0, r1 - bgt _022F04B8 - bge _022F04C4 - add r1, r2, #0xab - cmp r0, r1 - beq _022F04C4 - b _022F04DC -_022F04B8: - add r1, r2, #0xcc - cmp r0, r1 - bne _022F04DC -_022F04C4: - mov r0, #0 - bx lr -_022F04CC: - mov r0, #1 - bx lr -_022F04D4: - mov r0, #0 - bx lr -_022F04DC: - mov r0, #1 - bx lr - .align 2, 0 -_022F04E4: .word 0x000001FE -_022F04E8: .word 0x00000112 -_022F04EC: .word 0x0000037F - arm_func_end ov29_022EFBAC - - arm_func_start ov29_022F04F0 -ov29_022F04F0: ; 0x022F04F0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5, #0xb4] - ldrsh r0, [r4, #4] - bl ov29_022EFBAC - cmp r0, #0 - movne r0, #1 - strneb r0, [r5, #0xb3] -#ifdef JAPAN - strneb r0, [r4, #0x16d] -#else - strneb r0, [r4, #0x171] -#endif - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_022F04F0 - - arm_func_start ov29_022F0518 -ov29_022F0518: ; 0x022F0518 - ldr r2, [r0, #0xb4] - mov r1, #0 - ldr ip, _022F0530 ; =sub_0201D198 - add r0, r0, #0x2c -#ifdef JAPAN - strb r1, [r2, #0x16d] -#else - strb r1, [r2, #0x171] -#endif - bx ip - .align 2, 0 -_022F0530: .word sub_0201D198 - arm_func_end ov29_022F0518 - - arm_func_start ov29_022F0534 -ov29_022F0534: ; 0x022F0534 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r4, _022F058C ; =DUNGEON_PTR - mov r7, r0 - mov r5, #0 -_022F0544: - ldr r0, [r4] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r6, [r0, #0xad4] -#else - ldr r6, [r0, #0xb78] -#endif - mov r0, r6 - bl EntityIsValid__022F0590 - cmp r0, #0 - beq _022F057C - cmp r7, #0 - mov r0, r6 - bne _022F0578 - bl ov29_022F0518 - b _022F057C -_022F0578: - bl ov29_022F04F0 -_022F057C: - add r5, r5, #1 - cmp r5, #0x14 - blt _022F0544 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022F058C: .word DUNGEON_PTR - arm_func_end ov29_022F0534 diff --git a/asm/overlay_29_022EFB04.s b/asm/overlay_29_022EFB04.s new file mode 100644 index 00000000..025245f5 --- /dev/null +++ b/asm/overlay_29_022EFB04.s @@ -0,0 +1,767 @@ + .include "asm/macros.inc" + .include "overlay_29_022EFB04.inc" + + .text + + arm_func_start IsSecretBazaarNpcBehavior +IsSecretBazaarNpcBehavior: ; 0x022EFB04 + add r0, r0, #0xf0 + and r0, r0, #0xff + cmp r0, #4 + movls r0, #1 + movhi r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end IsSecretBazaarNpcBehavior + + arm_func_start ov29_022EFB20 +ov29_022EFB20: ; 0x022EFB20 + stmdb sp!, {r3, lr} + cmp r0, #0 + beq _022EFB48 + mov r0, #0xa + bl ov29_0234BA54 + mov r0, #0 + bl ov29_0234B1A4 + mov r0, #0xa + mov r1, #0x62 + bl ov29_022EA370 +_022EFB48: + bl ov29_0234D630 + ldr r1, _022EFB7C ; =ov29_023535A4 + mvn r2, #1 + mov r0, #1 + strb r2, [r1] + bl ov29_022DE5F0 + ldr r1, _022EFB80 ; =ov29_0237C9A0 + strh r0, [r1, #2] + mov r0, #0 + bl ov29_022DE5F0 + ldr r1, _022EFB80 ; =ov29_0237C9A0 + strh r0, [r1] + ldmia sp!, {r3, pc} + .align 2, 0 +_022EFB7C: .word ov29_023535A4 +_022EFB80: .word ov29_0237C9A0 + arm_func_end ov29_022EFB20 + + arm_func_start ov29_022EFB84 +ov29_022EFB84: ; 0x022EFB84 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + bl ov29_0234D8A0 + cmp r4, #0 + ldmeqia sp!, {r4, pc} + mov r0, #0xa + mov r1, #0x62 + bl ov29_022EA370 + ldmia sp!, {r4, pc} + arm_func_end ov29_022EFB84 + + arm_func_start ov29_022EFBAC +ov29_022EFBAC: ; 0x022EFBAC + ldr r1, _022F04E4 ; =0x000001FE + cmp r0, r1 + bgt _022F0314 + bge _022F04C4 + cmp r0, #0x1d4 + bgt _022F024C + bge _022F04C4 + sub r2, r1, #0x53 + cmp r0, r2 + bgt _022F01E4 + sub r1, r1, #0xe9 + subs r1, r0, r1 + addpl pc, pc, r1, lsl #2 + b _022EFE40 +_022EFBE4: ; jump table + b _022F04C4 ; case 0 + b _022F04C4 ; case 1 + b _022F04C4 ; case 2 + b _022F04CC ; case 3 + b _022F04DC ; case 4 + b _022F04DC ; case 5 + b _022F04DC ; case 6 + b _022F04DC ; case 7 + b _022F04DC ; case 8 + b _022F04DC ; case 9 + b _022F04DC ; case 10 + b _022F04DC ; case 11 + b _022F04CC ; case 12 + b _022F04CC ; case 13 + b _022F04DC ; case 14 + b _022F04DC ; case 15 + b _022F04DC ; case 16 + b _022F04DC ; case 17 + b _022F04C4 ; case 18 + b _022F04DC ; case 19 + b _022F04C4 ; case 20 + b _022F04DC ; case 21 + b _022F04DC ; case 22 + b _022F04DC ; case 23 + b _022F04DC ; case 24 + b _022F04DC ; case 25 + b _022F04DC ; case 26 + b _022F04DC ; case 27 + b _022F04DC ; case 28 + b _022F04C4 ; case 29 + b _022F04C4 ; case 30 + b _022F04DC ; case 31 + b _022F04DC ; case 32 + b _022F04DC ; case 33 + b _022F04DC ; case 34 + b _022F04C4 ; case 35 + b _022F04DC ; case 36 + b _022F04DC ; case 37 + b _022F04DC ; case 38 + b _022F04DC ; case 39 + b _022F04DC ; case 40 + b _022F04DC ; case 41 + b _022F04C4 ; case 42 + b _022F04C4 ; case 43 + b _022F04DC ; case 44 + b _022F04DC ; case 45 + b _022F04DC ; case 46 + b _022F04DC ; case 47 + b _022F04DC ; case 48 + b _022F04DC ; case 49 + b _022F04DC ; case 50 + b _022F04DC ; case 51 + b _022F04CC ; case 52 + b _022F04DC ; case 53 + b _022F04DC ; case 54 + b _022F04DC ; case 55 + b _022F04DC ; case 56 + b _022F04DC ; case 57 + b _022F04C4 ; case 58 + b _022F04DC ; case 59 + b _022F04DC ; case 60 + b _022F04DC ; case 61 + b _022F04DC ; case 62 + b _022F04DC ; case 63 + b _022F04CC ; case 64 + b _022F04CC ; case 65 + b _022F04DC ; case 66 + b _022F04DC ; case 67 + b _022F04DC ; case 68 + b _022F04C4 ; case 69 + b _022F04C4 ; case 70 + b _022F04C4 ; case 71 + b _022F04C4 ; case 72 + b _022F04DC ; case 73 + b _022F04DC ; case 74 + b _022F04DC ; case 75 + b _022F04C4 ; case 76 + b _022F04DC ; case 77 + b _022F04DC ; case 78 + b _022F04DC ; case 79 + b _022F04CC ; case 80 + b _022F04C4 ; case 81 + b _022F04DC ; case 82 + b _022F04DC ; case 83 + b _022F04C4 ; case 84 + b _022F04CC ; case 85 + b _022F04CC ; case 86 + b _022F04DC ; case 87 + b _022F04C4 ; case 88 + b _022F04C4 ; case 89 + b _022F04C4 ; case 90 + b _022F04C4 ; case 91 + b _022F04DC ; case 92 + b _022F04DC ; case 93 + b _022F04C4 ; case 94 + b _022F04C4 ; case 95 + b _022F04DC ; case 96 + b _022F04DC ; case 97 + b _022F04DC ; case 98 + b _022F04DC ; case 99 + b _022F04C4 ; case 100 + b _022F04DC ; case 101 + b _022F04C4 ; case 102 + b _022F04C4 ; case 103 + b _022F04C4 ; case 104 + b _022F04C4 ; case 105 + b _022F04DC ; case 106 + b _022F04DC ; case 107 + b _022F04C4 ; case 108 + b _022F04DC ; case 109 + b _022F04C4 ; case 110 + b _022F04DC ; case 111 + b _022F04DC ; case 112 + b _022F04DC ; case 113 + b _022F04DC ; case 114 + b _022F04DC ; case 115 + b _022F04DC ; case 116 + b _022F04C4 ; case 117 + b _022F04CC ; case 118 + b _022F04DC ; case 119 + b _022F04DC ; case 120 + b _022F04CC ; case 121 + b _022F04C4 ; case 122 + b _022F04C4 ; case 123 + b _022F04C4 ; case 124 + b _022F04C4 ; case 125 + b _022F04DC ; case 126 + b _022F04DC ; case 127 + b _022F04CC ; case 128 + b _022F04C4 ; case 129 + b _022F04C4 ; case 130 + b _022F04DC ; case 131 + b _022F04DC ; case 132 + b _022F04C4 ; case 133 + b _022F04DC ; case 134 + b _022F04C4 ; case 135 + b _022F04C4 ; case 136 + b _022F04C4 ; case 137 + b _022F04DC ; case 138 + b _022F04C4 ; case 139 + b _022F04C4 ; case 140 + b _022F04C4 ; case 141 + b _022F04C4 ; case 142 + b _022F04C4 ; case 143 + b _022F04C4 ; case 144 + b _022F04DC ; case 145 + b _022F04DC ; case 146 + b _022F04DC ; case 147 + b _022F04CC ; case 148 + b _022F04CC ; case 149 + b _022F04CC ; case 150 +_022EFE40: + cmp r0, #0xee + bgt _022F0194 + subs r1, r0, #0x29 + addpl pc, pc, r1, lsl #2 + b _022F016C +_022EFE54: ; jump table + b _022F04C4 ; case 0 + b _022F04C4 ; case 1 + b _022F04DC ; case 2 + b _022F04DC ; case 3 + b _022F04DC ; case 4 + b _022F04DC ; case 5 + b _022F04DC ; case 6 + b _022F04DC ; case 7 + b _022F04C4 ; case 8 + b _022F04CC ; case 9 + b _022F04CC ; case 10 + b _022F04DC ; case 11 + b _022F04CC ; case 12 + b _022F04DC ; case 13 + b _022F04DC ; case 14 + b _022F04DC ; case 15 + b _022F04DC ; case 16 + b _022F04CC ; case 17 + b _022F04CC ; case 18 + b _022F04DC ; case 19 + b _022F04DC ; case 20 + b _022F04DC ; case 21 + b _022F04DC ; case 22 + b _022F04DC ; case 23 + b _022F04D4 ; case 24 + b _022F04DC ; case 25 + b _022F04DC ; case 26 + b _022F04DC ; case 27 + b _022F04DC ; case 28 + b _022F04DC ; case 29 + b _022F04DC ; case 30 + b _022F04C4 ; case 31 + b _022F04C4 ; case 32 + b _022F04C4 ; case 33 + b _022F04DC ; case 34 + b _022F04DC ; case 35 + b _022F04DC ; case 36 + b _022F04DC ; case 37 + b _022F04DC ; case 38 + b _022F04DC ; case 39 + b _022F04C4 ; case 40 + b _022F04C4 ; case 41 + b _022F04DC ; case 42 + b _022F04DC ; case 43 + b _022F04DC ; case 44 + b _022F04DC ; case 45 + b _022F04DC ; case 46 + b _022F04DC ; case 47 + b _022F04DC ; case 48 + b _022F04DC ; case 49 + b _022F04C4 ; case 50 + b _022F04C4 ; case 51 + b _022F04C4 ; case 52 + b _022F04DC ; case 53 + b _022F04DC ; case 54 + b _022F04DC ; case 55 + b _022F04DC ; case 56 + b _022F04CC ; case 57 + b _022F04CC ; case 58 + b _022F04DC ; case 59 + b _022F04DC ; case 60 + b _022F04DC ; case 61 + b _022F04DC ; case 62 + b _022F04DC ; case 63 + b _022F04DC ; case 64 + b _022F04DC ; case 65 + b _022F04DC ; case 66 + b _022F04DC ; case 67 + b _022F04C4 ; case 68 + b _022F04C4 ; case 69 + b _022F04DC ; case 70 + b _022F04DC ; case 71 + b _022F04DC ; case 72 + b _022F04DC ; case 73 + b _022F04DC ; case 74 + b _022F04C4 ; case 75 + b _022F04C4 ; case 76 + b _022F04C4 ; case 77 + b _022F04C4 ; case 78 + b _022F04DC ; case 79 + b _022F04DC ; case 80 + b _022F04DC ; case 81 + b _022F04DC ; case 82 + b _022F04DC ; case 83 + b _022F04DC ; case 84 + b _022F04DC ; case 85 + b _022F04DC ; case 86 + b _022F04DC ; case 87 + b _022F04C4 ; case 88 + b _022F04C4 ; case 89 + b _022F04DC ; case 90 + b _022F04CC ; case 91 + b _022F04C4 ; case 92 + b _022F04CC ; case 93 + b _022F04CC ; case 94 + b _022F04DC ; case 95 + b _022F04C4 ; case 96 + b _022F04DC ; case 97 + b _022F04DC ; case 98 + b _022F04DC ; case 99 + b _022F04DC ; case 100 + b _022F04C4 ; case 101 + b _022F04DC ; case 102 + b _022F04C4 ; case 103 + b _022F04C4 ; case 104 + b _022F04C4 ; case 105 + b _022F04DC ; case 106 + b _022F04DC ; case 107 + b _022F04DC ; case 108 + b _022F04C4 ; case 109 + b _022F04C4 ; case 110 + b _022F04DC ; case 111 + b _022F04DC ; case 112 + b _022F04DC ; case 113 + b _022F04DC ; case 114 + b _022F04DC ; case 115 + b _022F04DC ; case 116 + b _022F04DC ; case 117 + b _022F04DC ; case 118 + b _022F04DC ; case 119 + b _022F04CC ; case 120 + b _022F04CC ; case 121 + b _022F04CC ; case 122 + b _022F04CC ; case 123 + b _022F04C4 ; case 124 + b _022F04C4 ; case 125 + b _022F04DC ; case 126 + b _022F04DC ; case 127 + b _022F04C4 ; case 128 + b _022F04C4 ; case 129 + b _022F04C4 ; case 130 + b _022F04DC ; case 131 + b _022F04DC ; case 132 + b _022F04DC ; case 133 + b _022F04DC ; case 134 + b _022F04DC ; case 135 + b _022F04DC ; case 136 + b _022F04DC ; case 137 + b _022F04DC ; case 138 + b _022F04DC ; case 139 + b _022F04DC ; case 140 + b _022F04DC ; case 141 + b _022F04DC ; case 142 + b _022F04DC ; case 143 + b _022F04DC ; case 144 + b _022F04DC ; case 145 + b _022F04C4 ; case 146 + b _022F04C4 ; case 147 + b _022F04C4 ; case 148 + b _022F04C4 ; case 149 + b _022F04C4 ; case 150 + b _022F04DC ; case 151 + b _022F04C4 ; case 152 + b _022F04DC ; case 153 + b _022F04DC ; case 154 + b _022F04DC ; case 155 + b _022F04DC ; case 156 + b _022F04CC ; case 157 + b _022F04DC ; case 158 + b _022F04C4 ; case 159 + b _022F04C4 ; case 160 + b _022F04C4 ; case 161 + b _022F04C4 ; case 162 + b _022F04C4 ; case 163 + b _022F04C4 ; case 164 + b _022F04C4 ; case 165 + b _022F04C4 ; case 166 + b _022F04C4 ; case 167 + b _022F04C4 ; case 168 + b _022F04C4 ; case 169 + b _022F04C4 ; case 170 + b _022F04C4 ; case 171 + b _022F04C4 ; case 172 + b _022F04C4 ; case 173 + b _022F04C4 ; case 174 + b _022F04C4 ; case 175 + b _022F04C4 ; case 176 + b _022F04C4 ; case 177 + b _022F04C4 ; case 178 + b _022F04C4 ; case 179 + b _022F04C4 ; case 180 + b _022F04C4 ; case 181 + b _022F04C4 ; case 182 + b _022F04C4 ; case 183 + b _022F04C4 ; case 184 + b _022F04C4 ; case 185 + b _022F04C4 ; case 186 + b _022F04C4 ; case 187 + b _022F04DC ; case 188 + b _022F04DC ; case 189 + b _022F04DC ; case 190 + b _022F04C4 ; case 191 + b _022F04DC ; case 192 + b _022F04C4 ; case 193 + b _022F04DC ; case 194 + b _022F04DC ; case 195 + b _022F04DC ; case 196 + b _022F04C4 ; case 197 +_022F016C: + cmp r0, #0xf + bgt _022F0188 + cmp r0, #0xc + blt _022F04DC + cmpne r0, #0xf + beq _022F04C4 + b _022F04DC +_022F0188: + cmp r0, #0x16 + beq _022F04C4 + b _022F04DC +_022F0194: + cmp r0, #0x104 + bgt _022F01D4 + subs r1, r0, #0xfa + addpl pc, pc, r1, lsl #2 + b _022F04DC +_022F01A8: ; jump table + b _022F04C4 ; case 0 + b _022F04DC ; case 1 + b _022F04DC ; case 2 + b _022F04C4 ; case 3 + b _022F04CC ; case 4 + b _022F04DC ; case 5 + b _022F04DC ; case 6 + b _022F04C4 ; case 7 + b _022F04DC ; case 8 + b _022F04DC ; case 9 + b _022F04C4 ; case 10 +_022F01D4: + ldr r1, _022F04E8 ; =0x00000112 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F01E4: + sub r2, r1, #0x37 + cmp r0, r2 + bgt _022F0220 + bge _022F04C4 + sub r2, r1, #0x39 + cmp r0, r2 + bgt _022F0210 + sub r1, r1, #0x39 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F0210: + sub r1, r1, #0x38 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F0220: + sub r2, r1, #0x2c + cmp r0, r2 + bgt _022F023C + sub r1, r1, #0x2c + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F023C: + sub r1, r1, #0x2b + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F024C: + sub r2, r1, #0x14 + cmp r0, r2 + bgt _022F02BC + bge _022F04CC + sub r2, r1, #0x20 + cmp r0, r2 + bgt _022F0294 + bge _022F04C4 + sub r2, r1, #0x27 + cmp r0, r2 + bgt _022F0288 + sub r1, r1, #0x27 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F0288: + cmp r0, #0x1d8 + beq _022F04CC + b _022F04DC +_022F0294: + sub r2, r1, #0x1f + cmp r0, r2 + bgt _022F02B0 + sub r1, r1, #0x1f + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F02B0: + cmp r0, #0x1e4 + beq _022F04C4 + b _022F04DC +_022F02BC: + sub r2, r1, #0xb + cmp r0, r2 + bgt _022F02F8 + bge _022F04C4 + sub r2, r1, #0xd + cmp r0, r2 + bgt _022F02E8 + sub r1, r1, #0xd + cmp r0, r1 + beq _022F04CC + b _022F04DC +_022F02E8: + sub r1, r1, #0xc + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F02F8: + cmp r0, #0x1f4 + bgt _022F0308 + beq _022F04C4 + b _022F04DC +_022F0308: + cmp r0, #0x1f8 + beq _022F04C4 + b _022F04DC +_022F0314: + add r2, r1, #0x9b + cmp r0, r2 + bgt _022F03FC + bge _022F04D4 + add r2, r1, #0x10 + cmp r0, r2 + bgt _022F0398 + bge _022F04CC + cmp r0, #0x204 + bgt _022F036C + bge _022F04C4 + add r2, r1, #1 + cmp r0, r2 + bgt _022F035C + add r1, r1, #1 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F035C: + add r1, r1, #4 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F036C: + add r2, r1, #0xb + cmp r0, r2 + bgt _022F0388 + add r1, r1, #0xb + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F0388: + add r1, r1, #0xf + cmp r0, r1 + beq _022F04CC + b _022F04DC +_022F0398: + add r2, r1, #0x17 + cmp r0, r2 + bgt _022F03D0 + bge _022F04C4 + add r2, r1, #0x15 + cmp r0, r2 + bgt _022F03C4 + add r1, r1, #0x15 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F03C4: + cmp r0, #0x214 + beq _022F04C4 + b _022F04DC +_022F03D0: + add r2, r1, #0x37 + cmp r0, r2 + bgt _022F03EC + add r1, r1, #0x37 + cmp r0, r1 + beq _022F04CC + b _022F04DC +_022F03EC: + add r1, r1, #0x38 + cmp r0, r1 + beq _022F04CC + b _022F04DC +_022F03FC: + ldr r2, _022F04EC ; =0x0000037F + cmp r0, r2 + bgt _022F0464 + bge _022F04C4 + sub r1, r2, #0x82 + cmp r0, r1 + bgt _022F0440 + bge _022F04C4 + sub r1, r2, #0xa6 + cmp r0, r1 + bgt _022F0430 + beq _022F04C4 + b _022F04DC +_022F0430: + sub r1, r2, #0xa5 + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F0440: + sub r1, r2, #0x81 + cmp r0, r1 + bgt _022F0454 + beq _022F04C4 + b _022F04DC +_022F0454: + sub r1, r2, #0x61 + cmp r0, r1 + beq _022F04CC + b _022F04DC +_022F0464: + add r1, r2, #0x9f + cmp r0, r1 + bgt _022F0498 + bge _022F04C4 + add r1, r2, #0x5a + cmp r0, r1 + bgt _022F0488 + beq _022F04C4 + b _022F04DC +_022F0488: + add r1, r2, #0x6a + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F0498: + add r1, r2, #0xcb + cmp r0, r1 + bgt _022F04B8 + bge _022F04C4 + add r1, r2, #0xab + cmp r0, r1 + beq _022F04C4 + b _022F04DC +_022F04B8: + add r1, r2, #0xcc + cmp r0, r1 + bne _022F04DC +_022F04C4: + mov r0, #0 + bx lr +_022F04CC: + mov r0, #1 + bx lr +_022F04D4: + mov r0, #0 + bx lr +_022F04DC: + mov r0, #1 + bx lr + .align 2, 0 +_022F04E4: .word 0x000001FE +_022F04E8: .word 0x00000112 +_022F04EC: .word 0x0000037F + arm_func_end ov29_022EFBAC + + arm_func_start ov29_022F04F0 +ov29_022F04F0: ; 0x022F04F0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5, #0xb4] + ldrsh r0, [r4, #4] + bl ov29_022EFBAC + cmp r0, #0 + movne r0, #1 + strneb r0, [r5, #0xb3] +#ifdef JAPAN + strneb r0, [r4, #0x16d] +#else + strneb r0, [r4, #0x171] +#endif + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_022F04F0 + + arm_func_start ov29_022F0518 +ov29_022F0518: ; 0x022F0518 + ldr r2, [r0, #0xb4] + mov r1, #0 + ldr ip, _022F0530 ; =sub_0201D198 + add r0, r0, #0x2c +#ifdef JAPAN + strb r1, [r2, #0x16d] +#else + strb r1, [r2, #0x171] +#endif + bx ip + .align 2, 0 +_022F0530: .word sub_0201D198 + arm_func_end ov29_022F0518 + + arm_func_start ov29_022F0534 +ov29_022F0534: ; 0x022F0534 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r4, _022F058C ; =DUNGEON_PTR + mov r7, r0 + mov r5, #0 +_022F0544: + ldr r0, [r4] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r6, [r0, #0xad4] +#else + ldr r6, [r0, #0xb78] +#endif + mov r0, r6 + bl EntityIsValid__022F0590 + cmp r0, #0 + beq _022F057C + cmp r7, #0 + mov r0, r6 + bne _022F0578 + bl ov29_022F0518 + b _022F057C +_022F0578: + bl ov29_022F04F0 +_022F057C: + add r5, r5, #1 + cmp r5, #0x14 + blt _022F0544 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022F058C: .word DUNGEON_PTR + arm_func_end ov29_022F0534 diff --git a/asm/overlay_29_022F7768.s b/asm/overlay_29_022F7768.s index 5950df1e..b7f7e0db 100644 --- a/asm/overlay_29_022F7768.s +++ b/asm/overlay_29_022F7768.s @@ -1115,7 +1115,7 @@ _022F83B4: cmpne sb, r0 beq _022F83F4 ldrb r0, [r7, #0xbc] - bl ov29_022EFAE8 + bl IsLoneOutlaw cmp r0, #0 beq _022F83F4 mov r0, #1 diff --git a/asm/overlay_29_022FBB1C.s b/asm/overlay_29_022FBB1C.s index 0b63d2a4..f12e7af9 100644 --- a/asm/overlay_29_022FBB1C.s +++ b/asm/overlay_29_022FBB1C.s @@ -264,926 +264,3 @@ _022FBDD4: _022FBDDC: .word DUNGEON_PTR arm_func_end ov29_022FBD80 #endif - - arm_func_start ov29_022FBDE0 -ov29_022FBDE0: ; 0x022FBDE0 - ldr ip, _022FBDEC ; =ov29_022EFAE8 - ldrb r0, [r0, #0xbc] - bx ip - .align 2, 0 -_022FBDEC: .word ov29_022EFAE8 - arm_func_end ov29_022FBDE0 - - arm_func_start ov29_022FBDF0 -ov29_022FBDF0: ; 0x022FBDF0 - ldr r0, [r0, #0xb4] - ldr ip, _022FBE00 ; =IsSecretBazaarNpcBehavior - ldrb r0, [r0, #0xbc] - bx ip - .align 2, 0 -_022FBE00: .word IsSecretBazaarNpcBehavior - arm_func_end ov29_022FBDF0 - - arm_func_start ov29_022FBE04 -ov29_022FBE04: ; 0x022FBE04 - stmdb sp!, {r3, lr} - ldrb r0, [r0, #6] - cmp r0, #0 - bne _022FBE4C - ldr r0, _022FBE54 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - bl GetTurnLimit - ldr r1, _022FBE54 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x700 - ldrsh r1, [r1, #0x84] - cmp r1, r0 - bne _022FBE4C - bl IsFullFloorFixedRoom - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} -_022FBE4C: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_022FBE54: .word DUNGEON_PTR - arm_func_end ov29_022FBE04 - - arm_func_start InitOtherMonsterData -InitOtherMonsterData: ; 0x022FBE58 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r4, r0 - ldr ip, [r4, #0xb4] - mov r6, #1 - strb r6, [ip, #0x100] - ldrsh r5, [ip, #0x12] - ldrsh r3, [ip, #0x16] - ldr r7, _022FBF04 ; =FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE - mov r0, #0xc - add r5, r5, r3 - smlabb r3, r1, r0, r7 - rsb lr, r6, #0x3e8 - cmp r5, lr - movgt r5, lr - strh r5, [ip, #0x14] - mov r0, #0 - strh r0, [ip, #0x16] - strh r0, [ip, #0x18] - ldrsh r5, [r3, #2] - add lr, ip, #0x100 - add r0, ip, #0x90 - strh r5, [ip, #0x12] - ldrsh r5, [r3, #2] - strh r5, [ip, #0x10] - ldrb r5, [r3, #6] - strb r5, [ip, #0x1a] - ldrb r5, [r3, #7] - strb r5, [ip, #0x1b] - ldrb r5, [r3, #8] - strb r5, [ip, #0x1c] - ldrb r3, [r3, #9] - strb r3, [ip, #0x1d] -#ifdef JAPAN - strh r1, [lr, #0x64] - strb r2, [ip, #0x166] -#else - strh r1, [lr, #0x68] - strb r2, [ip, #0x16a] -#endif - ldrsh r1, [ip, #2] - ldrsh r2, [ip, #0xe] - bl EnableAllLearnableIqSkills - mov r0, r4 - bl ov29_023021F0 - mov r0, r4 - mov r1, #1 - bl ov29_022FB83C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022FBF04: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE - arm_func_end InitOtherMonsterData - - arm_func_start ov29_022FBF08 -ov29_022FBF08: ; 0x022FBF08 - stmdb sp!, {r3, lr} - ldr r0, _022FBF2C ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x7cc] - sub r0, r0, #1 - cmp r0, #1 - ldmhiia sp!, {r3, pc} - bl LoadWazaP2 - ldmia sp!, {r3, pc} - .align 2, 0 -_022FBF2C: .word DUNGEON_PTR - arm_func_end ov29_022FBF08 - - arm_func_start ov29_022FBF30 -ov29_022FBF30: ; 0x022FBF30 - stmdb sp!, {r3, lr} - ldr r0, _022FBF54 ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x7cc] - sub r0, r0, #1 - cmp r0, #1 - ldmhiia sp!, {r3, pc} - bl UnloadCurrentWazaP - ldmia sp!, {r3, pc} - .align 2, 0 -_022FBF54: .word DUNGEON_PTR - arm_func_end ov29_022FBF30 - - arm_func_start InitEnemySpawnStats -InitEnemySpawnStats: ; 0x022FBF58 -#ifdef JAPAN -#define INIT_ENEMY_SPAWN_STATS_OFFSET -0x50 -#else -#define INIT_ENEMY_SPAWN_STATS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x218 - ldr r1, _022FC230 ; =DUNGEON_PTR - mov r0, #0 - ldr r1, [r1] - add r1, r1, #0xf4 + INIT_ENEMY_SPAWN_STATS_OFFSET - add r5, r1, #0x3400 - bl DungeonRngSetSecondary - bl ov29_022FBF08 - add r0, sp, #0x16 - mov r1, #0 - bl CopySpawnEntriesMaster - mov r4, r0 - mov r6, #0 - b _022FC028 -_022FBF94: - add r0, sp, #0x16 - add r7, r0, r6, lsl #3 - mov r0, r7 - bl GetMonsterIdFromSpawnEntry - strh r0, [r5] - mov r0, r7 - bl GetMonsterLevelFromSpawnEntry - strh r0, [r5, #2] - ldrsh r1, [r5] - ldrsh r2, [r5, #2] - add r0, r5, #4 - bl GetMonsterMoves - ldrh r0, [r5, #4] - cmp r0, #0 - moveq r0, #0x170 - streqh r0, [r5, #4] - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - bl GetMaxHpAtLevel - strh r0, [r5, #0xc] - mov r7, #0 -_022FBFE8: - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - mov r2, r7 - add r8, r5, r7 - bl GetOffensiveStatAtLevel - strb r0, [r8, #0xe] - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - mov r2, r7 - bl GetDefensiveStatAtLevel - add r7, r7, #1 - strb r0, [r8, #0x10] - cmp r7, #2 - blt _022FBFE8 - add r5, r5, #0x12 - add r6, r6, #1 -_022FC028: - cmp r6, r4 - blt _022FBF94 - mov r0, #0 - b _022FC040 -_022FC038: - strh r0, [r5], #0x12 - add r6, r6, #1 -_022FC040: - cmp r6, #0x40 - blt _022FC038 - cmp r4, #0x40 - bge _022FC0A8 - bl IsDestinationFloorWithFixedRoom - cmp r0, #0 - bne _022FC0A8 - bl IsDestinationFloorWithMonster - cmp r0, #0 - beq _022FC0A8 - mov r0, #0xa - bl IsCurrentMissionType - cmp r0, #0 - bne _022FC088 - mov r0, #9 - bl IsCurrentMissionType - cmp r0, #0 - beq _022FC0A8 -_022FC088: - add r0, sp, #8 - bl GetOutlawSpawnData - add r0, sp, #0x16 - ldrsh r1, [sp, #0xc] - ldrsh r2, [sp, #8] - add r0, r0, r4, lsl #3 - bl SetMonsterLevelAndId - add r4, r4, #1 -_022FC0A8: - cmp r4, #0x40 - bge _022FC0E0 - ldr r0, _022FC230 ; =DUNGEON_PTR - ldr r2, [r0] - add r0, r2, #0x700 - ldrsh r1, [r0, #0xa8] - cmp r1, #0 - beq _022FC0E0 - ldrb r1, [r2, #0x7aa] - ldrsh r2, [r0, #0xa8] - add r3, sp, #0x16 - add r0, r3, r4, lsl #3 - bl SetMonsterLevelAndId - add r4, r4, #1 -_022FC0E0: - mov r2, #0 - ldr r1, _022FC230 ; =DUNGEON_PTR - mov sl, r2 -_022FC0EC: - ldr r0, [r1] - add r0, r0, r2 - add r0, r0, #0x3000 - add r2, r2, #1 - strb sl, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] - cmp r2, #0x258 - blt _022FC0EC - mvn r0, #0 - mov r5, #1 - str r0, [sp] - b _022FC1E8 -_022FC118: - ldr r6, [sp] - mov r8, #0 - mov r7, r6 - b _022FC194 -_022FC128: - add r0, sp, #0x16 - add sb, r0, r8, lsl #3 - mov r0, sb - bl GetMonsterIdFromSpawnEntry - mov fp, r0 - mov r0, sb - bl GetMonsterLevelFromSpawnEntry - str r0, [sp, #4] - mov r0, fp - mov r1, #0x258 - bl _s32_div_f - ldr r0, _022FC230 ; =DUNGEON_PTR - mov r1, r1, lsl #0x10 - ldr r0, [r0] - mov sb, r1, asr #0x10 - add r0, r0, r1, asr #16 - add r0, r0, #0x3000 - ldrb r0, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] - cmp r0, #0 - bne _022FC190 - ldr r1, [sp, #4] - mov r0, sb - bl GetExp - cmp r7, r0 - movlt r7, r0 - movlt r6, sb -_022FC190: - add r8, r8, #1 -_022FC194: - cmp r8, r4 - blt _022FC128 - cmp r6, #0 - blt _022FC1F0 - cmp r5, #0x100 - ble _022FC1C8 - ldr r0, _022FC230 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r6 - add r1, r0, #0x3000 - mov r0, #1 - strb r0, [r1, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] - b _022FC1E4 -_022FC1C8: - ldr r0, _022FC230 ; =DUNGEON_PTR - rsb r1, r5, #0x100 - ldr r0, [r0] - add r5, r5, #2 - add r0, r0, r6 - add r0, r0, #0x3000 - strb r1, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] -_022FC1E4: - add sl, sl, #1 -_022FC1E8: - cmp sl, r4 - blt _022FC118 -_022FC1F0: - ldr r1, _022FC230 ; =DUNGEON_PTR - mov r4, #0 - mov r2, #1 -_022FC1FC: - ldr r0, [r1] - add r0, r0, r4 - add r0, r0, #0x3000 - ldrb r3, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] - add r4, r4, #1 - cmp r3, #0 - streqb r2, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] - cmp r4, #0x258 - blt _022FC1FC - bl ov29_022FBF30 - bl DungeonRngSetPrimary - add sp, sp, #0x218 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022FC230: .word DUNGEON_PTR - arm_func_end InitEnemySpawnStats - - arm_func_start InitEnemyStatsAndMoves -InitEnemyStatsAndMoves: ; 0x022FC234 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sl, r0 - ldrsh r0, [sp, #0x30] - mov sb, r1 - mov r1, #0x258 - mov r8, r2 - mov r7, r3 - ldr r6, [sp, #0x34] - bl _s32_div_f - mov r0, r1, lsl #0x10 - ldr r2, _022FC464 ; =DUNGEON_PTR - mov r4, r0, asr #0x10 - ldr r1, [r2] - mov fp, #0 -#ifdef JAPAN - add r0, r1, #0xa4 -#else - add r0, r1, #0xf4 -#endif - add r5, r0, #0x3400 - mov r3, r5 - mov r0, #0x12 - b _022FC314 -_022FC284: - mul r2, fp, r0 - ldrsh r1, [r3, r2] - add r5, r3, r2 - cmp r1, #0 - beq _022FC31C - cmp r1, r4 - ldreqsh r1, [r5, #2] - cmpeq r1, r6 - bne _022FC310 - mov r1, r4 - mov r2, r6 - add r0, r5, #4 - bl GetMonsterMoves - mov r4, #0 -_022FC2BC: - add r0, r5, r4, lsl #1 - ldrh r1, [r0, #4] - add r0, sl, r4, lsl #3 - bl InitMoveCheckId - add r4, r4, #1 - cmp r4, #4 - blt _022FC2BC - ldrsh r0, [r5, #0xc] - mov r2, #0 - strh r0, [sb] -_022FC2E4: - add r1, r5, r2 - ldrb r0, [r1, #0xe] - strb r0, [r8, r2] - ldrb r0, [r1, #0x10] - strb r0, [r7, r2] - add r2, r2, #1 - cmp r2, #2 - blt _022FC2E4 - mov r0, #0 - strb r0, [sl, #0x20] - b _022FC45C -_022FC310: - add fp, fp, #1 -_022FC314: - cmp fp, #0x40 - blt _022FC284 -_022FC31C: - cmp fp, #0x40 - bne _022FC3A4 - add r0, sp, #0 - mov r1, r4 - mov r2, r6 - bl GetMonsterMoves - mov r5, #0 - add fp, sp, #0 -_022FC33C: - mov r0, r5, lsl #1 - ldrh r1, [fp, r0] - add r0, sl, r5, lsl #3 - bl InitMoveCheckId - add r5, r5, #1 - cmp r5, #4 - blt _022FC33C - mov r0, r4 - mov r1, r6 - bl GetMaxHpAtLevel - strh r0, [sb] - mov r5, #0 -_022FC36C: - mov r0, r4 - mov r1, r6 - mov r2, r5 - bl GetOffensiveStatAtLevel - strb r0, [r8, r5] - mov r0, r4 - mov r1, r6 - mov r2, r5 - bl GetDefensiveStatAtLevel - strb r0, [r7, r5] - add r5, r5, #1 - cmp r5, #2 - blt _022FC36C - b _022FC454 -_022FC3A4: - strh r4, [r5] - mov r1, r4 - mov r2, r6 - strh r6, [r5, #2] - add r0, r5, #4 - bl GetMonsterMoves - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - bl GetMaxHpAtLevel - strh r0, [r5, #0xc] - mov r6, #0 -_022FC3D0: - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - mov r2, r6 - add r4, r5, r6 - bl GetOffensiveStatAtLevel - strb r0, [r4, #0xe] - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - mov r2, r6 - bl GetDefensiveStatAtLevel - add r6, r6, #1 - strb r0, [r4, #0x10] - cmp r6, #2 - blt _022FC3D0 - mov r4, #0 -_022FC40C: - add r0, r5, r4, lsl #1 - ldrh r1, [r0, #4] - add r0, sl, r4, lsl #3 - bl InitMoveCheckId - add r4, r4, #1 - cmp r4, #4 - blt _022FC40C - ldrsh r0, [r5, #0xc] - mov r2, #0 - strh r0, [sb] -_022FC434: - add r1, r5, r2 - ldrb r0, [r1, #0xe] - strb r0, [r8, r2] - ldrb r0, [r1, #0x10] - strb r0, [r7, r2] - add r2, r2, #1 - cmp r2, #2 - blt _022FC434 -_022FC454: - mov r0, #0 - strb r0, [sl, #0x20] -_022FC45C: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022FC464: .word DUNGEON_PTR - arm_func_end InitEnemyStatsAndMoves - - arm_func_start ov29_022FC468 -ov29_022FC468: ; 0x022FC468 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r4, [sp, #0x24] - mov sb, r0 - cmp r4, #0xb - mov r0, #0 - cmp r4, #0xc - moveq r0, #1 - cmp r4, #0xd - moveq r0, #2 - cmp r4, #0xe - moveq r0, #3 - mov r8, r1 - mov r7, r2 - mov r6, r3 - ldr r5, [sp, #0x20] - bl GetExplorerMazeMonster - mov r4, r0 - mov r0, sb - add r1, r4, #0x22 - bl GroundToDungeonMoveset - ldrsh r0, [r4, #0xa] - mov r2, #0 - strh r0, [r8] -_022FC4C4: - add r1, r4, r2 - ldrb r0, [r1, #0xc] - strb r0, [r7, r2] - ldrb r0, [r1, #0xe] - strb r0, [r6, r2] - add r2, r2, #1 - cmp r2, #2 - blt _022FC4C4 - ldrsh r1, [r4, #8] - ldr r0, _022FC508 ; =IQ_SKILLS - ldr r0, [r0, #0x20] - strh r1, [r5] - cmp r1, r0 - strlth r0, [r5] - mov r0, #0 - strb r0, [sb, #0x20] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_022FC508: .word IQ_SKILLS - arm_func_end ov29_022FC468 - - arm_func_start SpawnTeam -SpawnTeam: ; 0x022FC50C -#ifdef JAPAN -#define SPAWN_TEAM_OFFSET -0xA4 -#else -#define SPAWN_TEAM_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x44 - mov sl, r0 - mov r0, #0 - bl DungeonRngSetSecondary - ldr r0, _022FC98C ; =DUNGEON_PTR - ldr r0, [r0] - add r1, r0, #0xcc00 - ldrsh r0, [r1, #0xe0 + SPAWN_TEAM_OFFSET] - ldrsh r1, [r1, #0xe2 + SPAWN_TEAM_OFFSET] - bl GetTile - ldrb fp, [r0, #7] - mov r4, #0 -_022FC540: - mov r0, r4 - bl GetActiveTeamMember - add r1, r4, #1 - mov r1, r1, lsl #0x10 - strh r4, [r0, #0xa] - mov r4, r1, asr #0x10 - cmp r4, #4 - blt _022FC540 - mov r7, #0 - mov r6, #1 - mov r8, r7 - mov r5, r7 - mov sb, r6 - add r4, sp, #0x34 -_022FC578: - mov r0, r8 - bl GetActiveTeamMember - ldrb r1, [r0] - tst r1, #1 - movne r2, r6 - moveq r2, r5 - tst r2, #0xff - beq _022FC5B0 - tst r1, #2 - movne r1, sb - moveq r1, #0 - tst r1, #0xff - strne r0, [r4, r7, lsl #2] - addne r7, r7, #1 -_022FC5B0: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #4 - blt _022FC578 - mov r1, #0 - add r0, sp, #0x34 - b _022FC5D8 -_022FC5D0: - str r1, [r0, r7, lsl #2] - add r7, r7, #1 -_022FC5D8: - cmp r7, #4 - blt _022FC5D0 - mov r8, #0 - mov r7, r8 - mov r3, r8 - mov r4, #1 - mov r2, r8 - add r5, sp, #0x34 - add r1, sp, #0x24 -_022FC5FC: - ldr r6, [r5, r7, lsl #2] - cmp r6, #0 - beq _022FC628 - ldrb r0, [r6, #1] - cmp r0, #0 - movne r0, r4 - moveq r0, r3 - tst r0, #0xff - strne r6, [r1, r8, lsl #2] - strne r2, [r5, r7, lsl #2] - addne r8, r8, #1 -_022FC628: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #4 - blt _022FC5FC - ldr r0, _022FC98C ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75c] - cmp r0, #0 - bne _022FC698 - mov r7, #0 - mov r4, r7 - add r5, sp, #0x34 - add sb, sp, #0x24 -_022FC660: - ldr r6, [r5, r7, lsl #2] - cmp r6, #0 - beq _022FC684 - ldrb r0, [r6, #3] - bl JoinedAtRangeCheck2Veneer - cmp r0, #0 - strne r6, [sb, r8, lsl #2] - strne r4, [r5, r7, lsl #2] - addne r8, r8, #1 -_022FC684: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #4 - blt _022FC660 -_022FC698: - mov r4, #0 - mov r2, r4 - add r1, sp, #0x24 - add r3, sp, #0x34 -_022FC6A8: - ldr r0, [r3, r4, lsl #2] - cmp r0, #0 - strne r0, [r1, r8, lsl #2] - add r0, r4, #1 - mov r0, r0, lsl #0x10 - strne r2, [r3, r4, lsl #2] - mov r4, r0, asr #0x10 - addne r8, r8, #1 - cmp r4, #4 - blt _022FC6A8 - mov r1, #0 - add r0, sp, #0x24 - b _022FC6E4 -_022FC6DC: - str r1, [r0, r8, lsl #2] - add r8, r8, #1 -_022FC6E4: - cmp r8, #4 - blt _022FC6DC - mov sb, #0 -_022FC6F0: - add r0, sp, #0x24 - ldr r5, [r0, sb, lsl #2] - mov r6, #0 - cmp r5, #0 - beq _022FC8BC - ldrsh r1, [r5, #0xc] - sub r0, r1, #0x17c - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #2 - ldrls r0, _022FC990 ; =0x0000017B - strlsh r0, [r5, #0xc] - bls _022FC74C - sub r0, r1, #0x3d4 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #2 - ldrls r0, _022FC994 ; =0x000003D3 - strlsh r0, [r5, #0xc] -_022FC74C: - mov r4, #0 -_022FC750: - ldr r0, _022FC998 ; =ov29_02351E28 - mov r1, r4, lsl #2 - ldrh r1, [r0, r1] - add r0, r0, r4, lsl #2 - ldrh r0, [r0, #2] - strh r1, [sp, #0x1e] - ldrsh r8, [sp, #0x1e] - strh r0, [sp, #0x20] - cmp r8, #0x63 - beq _022FC808 - ldr r0, _022FC98C ; =DUNGEON_PTR - ldrsh r7, [sp, #0x20] - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET] - ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET] - add r1, r7, r1 - add r0, r8, r2 - bl GetTile - mov r1, r0 - ldrb r0, [r1, #7] - cmp r0, fp - bne _022FC800 - ldrsh r0, [r5, #0xc] - bl IsInvalidSpawnTile - cmp r0, #0 - bne _022FC800 - ldr r0, _022FC98C ; =DUNGEON_PTR - mov r1, #0 - ldr r2, [r0] - mov r0, #1 - str r1, [sp] - stmib sp, {r0, r1, sl} - str r1, [sp, #0x10] - add r0, r2, #0xcc00 - ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET] - ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET] - ldrsh r0, [r5, #0xc] - mov r3, r5 - add r1, r8, r1 - add r2, r7, r2 - bl InitTeamMember - mov r6, #1 - b _022FC808 -_022FC800: - add r4, r4, #1 - b _022FC750 -_022FC808: - cmp r6, #0 - bne _022FC8BC - ldr r8, _022FC998 ; =ov29_02351E28 - mov r7, #0 -_022FC818: - mov r0, r7, lsl #2 - ldrh r1, [r8, r0] - add r0, r8, r7, lsl #2 - ldrh r0, [r0, #2] - strh r1, [sp, #0x14] - ldrsh r6, [sp, #0x14] - strh r0, [sp, #0x16] - cmp r6, #0x63 - beq _022FC8BC - ldr r0, _022FC98C ; =DUNGEON_PTR - ldrsh r4, [sp, #0x16] - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET] - ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET] - add r1, r4, r1 - add r0, r6, r2 - bl GetTile - mov r1, r0 - ldrsh r0, [r5, #0xc] - bl IsInvalidSpawnTile - cmp r0, #0 - bne _022FC8B4 - ldr r0, _022FC98C ; =DUNGEON_PTR - mov r1, #0 - ldr r2, [r0] - mov r0, #1 - str r1, [sp] - stmib sp, {r0, r1, sl} - str r1, [sp, #0x10] - add r0, r2, #0xcc00 - ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET] - ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET] - ldrsh r0, [r5, #0xc] - mov r3, r5 - add r1, r6, r1 - add r2, r4, r2 - bl InitTeamMember - b _022FC8BC -_022FC8B4: - add r7, r7, #1 - b _022FC818 -_022FC8BC: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #4 - blt _022FC6F0 - bl ov29_022FCD04 - mov r2, #0 -#ifdef JAPAN - mov sb, r2 -#else - mov r8, r2 -#endif - add r1, sp, #0x18 -_022FC8E0: - add r0, r2, #1 - mov r0, r0, lsl #0x10 -#ifdef JAPAN - strb sb, [r1, r2] -#else - strb r8, [r1, r2] -#endif - mov r2, r0, asr #0x10 - cmp r2, #5 - blt _022FC8E0 -#ifdef JAPAN - ldr r5, _022FC98C ; =DUNGEON_PTR - mov r7, #0 - mov r8, #1 - add r6, sp, #0x18 - mov r4, #0x23c -_022FC908: - ldr r0, [r5] - add r0, r0, sb, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xa84] -#else - ldr r4, _022FC98C ; =DUNGEON_PTR - mov r6, #0 - mov r7, #1 - add r5, sp, #0x18 -_022FC908: - ldr r0, [r4] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xb28] -#endif - bl EntityIsValid__022FC99C - cmp r0, #0 - beq _022FC964 -#ifdef JAPAN - mul r1, sb, r4 - ldr r0, [r5] - add r0, r0, #0x56 - add r2, r0, #0x800 - ldrb r0, [r2, r1] - add r2, r2, r1 - tst r0, #1 - movne r0, r8 - moveq r0, r7 -#else - ldr r0, [r4] - add r1, r8, r8, lsl #3 - add r0, r0, #0x56 - add r2, r0, #0x800 - ldrb r0, [r2, r1, lsl #6] - add r2, r2, r1, lsl #6 - tst r0, #1 - movne r0, r7 - moveq r0, r6 -#endif - tst r0, #0xff - ldrneb r1, [r2, #1] - cmpne r1, #0 -#ifdef JAPAN - addne r0, sb, #1 - andne r0, r0, #0xff - strneb r0, [r6, r1] - strneb r0, [r2, #1] -_022FC964: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #4 -#else - addne r0, r8, #1 - andne r0, r0, #0xff - strneb r0, [r5, r1] - strneb r0, [r2, #1] -_022FC964: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #4 -#endif - blt _022FC908 - add r0, sp, #0x18 - bl sub_0200F9B4 - bl DungeonRngSetPrimary - add sp, sp, #0x44 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022FC98C: .word DUNGEON_PTR -_022FC990: .word 0x0000017B -_022FC994: .word 0x000003D3 -_022FC998: .word ov29_02351E28 - arm_func_end SpawnTeam diff --git a/asm/overlay_29_022FBDF0.s b/asm/overlay_29_022FBDF0.s new file mode 100644 index 00000000..1dd2e689 --- /dev/null +++ b/asm/overlay_29_022FBDF0.s @@ -0,0 +1,918 @@ + .include "asm/macros.inc" + .include "overlay_29_022FBDF0.inc" + + .text + + arm_func_start ov29_022FBDF0 +ov29_022FBDF0: ; 0x022FBDF0 + ldr r0, [r0, #0xb4] + ldr ip, _022FBE00 ; =IsSecretBazaarNpcBehavior + ldrb r0, [r0, #0xbc] + bx ip + .align 2, 0 +_022FBE00: .word IsSecretBazaarNpcBehavior + arm_func_end ov29_022FBDF0 + + arm_func_start ov29_022FBE04 +ov29_022FBE04: ; 0x022FBE04 + stmdb sp!, {r3, lr} + ldrb r0, [r0, #6] + cmp r0, #0 + bne _022FBE4C + ldr r0, _022FBE54 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x748] + bl GetTurnLimit + ldr r1, _022FBE54 ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x700 + ldrsh r1, [r1, #0x84] + cmp r1, r0 + bne _022FBE4C + bl IsFullFloorFixedRoom + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, pc} +_022FBE4C: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_022FBE54: .word DUNGEON_PTR + arm_func_end ov29_022FBE04 + + arm_func_start InitOtherMonsterData +InitOtherMonsterData: ; 0x022FBE58 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r4, r0 + ldr ip, [r4, #0xb4] + mov r6, #1 + strb r6, [ip, #0x100] + ldrsh r5, [ip, #0x12] + ldrsh r3, [ip, #0x16] + ldr r7, _022FBF04 ; =FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE + mov r0, #0xc + add r5, r5, r3 + smlabb r3, r1, r0, r7 + rsb lr, r6, #0x3e8 + cmp r5, lr + movgt r5, lr + strh r5, [ip, #0x14] + mov r0, #0 + strh r0, [ip, #0x16] + strh r0, [ip, #0x18] + ldrsh r5, [r3, #2] + add lr, ip, #0x100 + add r0, ip, #0x90 + strh r5, [ip, #0x12] + ldrsh r5, [r3, #2] + strh r5, [ip, #0x10] + ldrb r5, [r3, #6] + strb r5, [ip, #0x1a] + ldrb r5, [r3, #7] + strb r5, [ip, #0x1b] + ldrb r5, [r3, #8] + strb r5, [ip, #0x1c] + ldrb r3, [r3, #9] + strb r3, [ip, #0x1d] +#ifdef JAPAN + strh r1, [lr, #0x64] + strb r2, [ip, #0x166] +#else + strh r1, [lr, #0x68] + strb r2, [ip, #0x16a] +#endif + ldrsh r1, [ip, #2] + ldrsh r2, [ip, #0xe] + bl EnableAllLearnableIqSkills + mov r0, r4 + bl ov29_023021F0 + mov r0, r4 + mov r1, #1 + bl ov29_022FB83C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022FBF04: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE + arm_func_end InitOtherMonsterData + + arm_func_start ov29_022FBF08 +ov29_022FBF08: ; 0x022FBF08 + stmdb sp!, {r3, lr} + ldr r0, _022FBF2C ; =DUNGEON_PTR + ldr r0, [r0] + ldr r0, [r0, #0x7cc] + sub r0, r0, #1 + cmp r0, #1 + ldmhiia sp!, {r3, pc} + bl LoadWazaP2 + ldmia sp!, {r3, pc} + .align 2, 0 +_022FBF2C: .word DUNGEON_PTR + arm_func_end ov29_022FBF08 + + arm_func_start ov29_022FBF30 +ov29_022FBF30: ; 0x022FBF30 + stmdb sp!, {r3, lr} + ldr r0, _022FBF54 ; =DUNGEON_PTR + ldr r0, [r0] + ldr r0, [r0, #0x7cc] + sub r0, r0, #1 + cmp r0, #1 + ldmhiia sp!, {r3, pc} + bl UnloadCurrentWazaP + ldmia sp!, {r3, pc} + .align 2, 0 +_022FBF54: .word DUNGEON_PTR + arm_func_end ov29_022FBF30 + + arm_func_start InitEnemySpawnStats +InitEnemySpawnStats: ; 0x022FBF58 +#ifdef JAPAN +#define INIT_ENEMY_SPAWN_STATS_OFFSET -0x50 +#else +#define INIT_ENEMY_SPAWN_STATS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x218 + ldr r1, _022FC230 ; =DUNGEON_PTR + mov r0, #0 + ldr r1, [r1] + add r1, r1, #0xf4 + INIT_ENEMY_SPAWN_STATS_OFFSET + add r5, r1, #0x3400 + bl DungeonRngSetSecondary + bl ov29_022FBF08 + add r0, sp, #0x16 + mov r1, #0 + bl CopySpawnEntriesMaster + mov r4, r0 + mov r6, #0 + b _022FC028 +_022FBF94: + add r0, sp, #0x16 + add r7, r0, r6, lsl #3 + mov r0, r7 + bl GetMonsterIdFromSpawnEntry + strh r0, [r5] + mov r0, r7 + bl GetMonsterLevelFromSpawnEntry + strh r0, [r5, #2] + ldrsh r1, [r5] + ldrsh r2, [r5, #2] + add r0, r5, #4 + bl GetMonsterMoves + ldrh r0, [r5, #4] + cmp r0, #0 + moveq r0, #0x170 + streqh r0, [r5, #4] + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + bl GetMaxHpAtLevel + strh r0, [r5, #0xc] + mov r7, #0 +_022FBFE8: + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + mov r2, r7 + add r8, r5, r7 + bl GetOffensiveStatAtLevel + strb r0, [r8, #0xe] + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + mov r2, r7 + bl GetDefensiveStatAtLevel + add r7, r7, #1 + strb r0, [r8, #0x10] + cmp r7, #2 + blt _022FBFE8 + add r5, r5, #0x12 + add r6, r6, #1 +_022FC028: + cmp r6, r4 + blt _022FBF94 + mov r0, #0 + b _022FC040 +_022FC038: + strh r0, [r5], #0x12 + add r6, r6, #1 +_022FC040: + cmp r6, #0x40 + blt _022FC038 + cmp r4, #0x40 + bge _022FC0A8 + bl IsDestinationFloorWithFixedRoom + cmp r0, #0 + bne _022FC0A8 + bl IsDestinationFloorWithMonster + cmp r0, #0 + beq _022FC0A8 + mov r0, #0xa + bl IsCurrentMissionType + cmp r0, #0 + bne _022FC088 + mov r0, #9 + bl IsCurrentMissionType + cmp r0, #0 + beq _022FC0A8 +_022FC088: + add r0, sp, #8 + bl GetOutlawSpawnData + add r0, sp, #0x16 + ldrsh r1, [sp, #0xc] + ldrsh r2, [sp, #8] + add r0, r0, r4, lsl #3 + bl SetMonsterLevelAndId + add r4, r4, #1 +_022FC0A8: + cmp r4, #0x40 + bge _022FC0E0 + ldr r0, _022FC230 ; =DUNGEON_PTR + ldr r2, [r0] + add r0, r2, #0x700 + ldrsh r1, [r0, #0xa8] + cmp r1, #0 + beq _022FC0E0 + ldrb r1, [r2, #0x7aa] + ldrsh r2, [r0, #0xa8] + add r3, sp, #0x16 + add r0, r3, r4, lsl #3 + bl SetMonsterLevelAndId + add r4, r4, #1 +_022FC0E0: + mov r2, #0 + ldr r1, _022FC230 ; =DUNGEON_PTR + mov sl, r2 +_022FC0EC: + ldr r0, [r1] + add r0, r0, r2 + add r0, r0, #0x3000 + add r2, r2, #1 + strb sl, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] + cmp r2, #0x258 + blt _022FC0EC + mvn r0, #0 + mov r5, #1 + str r0, [sp] + b _022FC1E8 +_022FC118: + ldr r6, [sp] + mov r8, #0 + mov r7, r6 + b _022FC194 +_022FC128: + add r0, sp, #0x16 + add sb, r0, r8, lsl #3 + mov r0, sb + bl GetMonsterIdFromSpawnEntry + mov fp, r0 + mov r0, sb + bl GetMonsterLevelFromSpawnEntry + str r0, [sp, #4] + mov r0, fp + mov r1, #0x258 + bl _s32_div_f + ldr r0, _022FC230 ; =DUNGEON_PTR + mov r1, r1, lsl #0x10 + ldr r0, [r0] + mov sb, r1, asr #0x10 + add r0, r0, r1, asr #16 + add r0, r0, #0x3000 + ldrb r0, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] + cmp r0, #0 + bne _022FC190 + ldr r1, [sp, #4] + mov r0, sb + bl GetExp + cmp r7, r0 + movlt r7, r0 + movlt r6, sb +_022FC190: + add r8, r8, #1 +_022FC194: + cmp r8, r4 + blt _022FC128 + cmp r6, #0 + blt _022FC1F0 + cmp r5, #0x100 + ble _022FC1C8 + ldr r0, _022FC230 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r6 + add r1, r0, #0x3000 + mov r0, #1 + strb r0, [r1, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] + b _022FC1E4 +_022FC1C8: + ldr r0, _022FC230 ; =DUNGEON_PTR + rsb r1, r5, #0x100 + ldr r0, [r0] + add r5, r5, #2 + add r0, r0, r6 + add r0, r0, #0x3000 + strb r1, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] +_022FC1E4: + add sl, sl, #1 +_022FC1E8: + cmp sl, r4 + blt _022FC118 +_022FC1F0: + ldr r1, _022FC230 ; =DUNGEON_PTR + mov r4, #0 + mov r2, #1 +_022FC1FC: + ldr r0, [r1] + add r0, r0, r4 + add r0, r0, #0x3000 + ldrb r3, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] + add r4, r4, #1 + cmp r3, #0 + streqb r2, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET] + cmp r4, #0x258 + blt _022FC1FC + bl ov29_022FBF30 + bl DungeonRngSetPrimary + add sp, sp, #0x218 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022FC230: .word DUNGEON_PTR + arm_func_end InitEnemySpawnStats + + arm_func_start InitEnemyStatsAndMoves +InitEnemyStatsAndMoves: ; 0x022FC234 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + mov sl, r0 + ldrsh r0, [sp, #0x30] + mov sb, r1 + mov r1, #0x258 + mov r8, r2 + mov r7, r3 + ldr r6, [sp, #0x34] + bl _s32_div_f + mov r0, r1, lsl #0x10 + ldr r2, _022FC464 ; =DUNGEON_PTR + mov r4, r0, asr #0x10 + ldr r1, [r2] + mov fp, #0 +#ifdef JAPAN + add r0, r1, #0xa4 +#else + add r0, r1, #0xf4 +#endif + add r5, r0, #0x3400 + mov r3, r5 + mov r0, #0x12 + b _022FC314 +_022FC284: + mul r2, fp, r0 + ldrsh r1, [r3, r2] + add r5, r3, r2 + cmp r1, #0 + beq _022FC31C + cmp r1, r4 + ldreqsh r1, [r5, #2] + cmpeq r1, r6 + bne _022FC310 + mov r1, r4 + mov r2, r6 + add r0, r5, #4 + bl GetMonsterMoves + mov r4, #0 +_022FC2BC: + add r0, r5, r4, lsl #1 + ldrh r1, [r0, #4] + add r0, sl, r4, lsl #3 + bl InitMoveCheckId + add r4, r4, #1 + cmp r4, #4 + blt _022FC2BC + ldrsh r0, [r5, #0xc] + mov r2, #0 + strh r0, [sb] +_022FC2E4: + add r1, r5, r2 + ldrb r0, [r1, #0xe] + strb r0, [r8, r2] + ldrb r0, [r1, #0x10] + strb r0, [r7, r2] + add r2, r2, #1 + cmp r2, #2 + blt _022FC2E4 + mov r0, #0 + strb r0, [sl, #0x20] + b _022FC45C +_022FC310: + add fp, fp, #1 +_022FC314: + cmp fp, #0x40 + blt _022FC284 +_022FC31C: + cmp fp, #0x40 + bne _022FC3A4 + add r0, sp, #0 + mov r1, r4 + mov r2, r6 + bl GetMonsterMoves + mov r5, #0 + add fp, sp, #0 +_022FC33C: + mov r0, r5, lsl #1 + ldrh r1, [fp, r0] + add r0, sl, r5, lsl #3 + bl InitMoveCheckId + add r5, r5, #1 + cmp r5, #4 + blt _022FC33C + mov r0, r4 + mov r1, r6 + bl GetMaxHpAtLevel + strh r0, [sb] + mov r5, #0 +_022FC36C: + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl GetOffensiveStatAtLevel + strb r0, [r8, r5] + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl GetDefensiveStatAtLevel + strb r0, [r7, r5] + add r5, r5, #1 + cmp r5, #2 + blt _022FC36C + b _022FC454 +_022FC3A4: + strh r4, [r5] + mov r1, r4 + mov r2, r6 + strh r6, [r5, #2] + add r0, r5, #4 + bl GetMonsterMoves + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + bl GetMaxHpAtLevel + strh r0, [r5, #0xc] + mov r6, #0 +_022FC3D0: + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + mov r2, r6 + add r4, r5, r6 + bl GetOffensiveStatAtLevel + strb r0, [r4, #0xe] + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + mov r2, r6 + bl GetDefensiveStatAtLevel + add r6, r6, #1 + strb r0, [r4, #0x10] + cmp r6, #2 + blt _022FC3D0 + mov r4, #0 +_022FC40C: + add r0, r5, r4, lsl #1 + ldrh r1, [r0, #4] + add r0, sl, r4, lsl #3 + bl InitMoveCheckId + add r4, r4, #1 + cmp r4, #4 + blt _022FC40C + ldrsh r0, [r5, #0xc] + mov r2, #0 + strh r0, [sb] +_022FC434: + add r1, r5, r2 + ldrb r0, [r1, #0xe] + strb r0, [r8, r2] + ldrb r0, [r1, #0x10] + strb r0, [r7, r2] + add r2, r2, #1 + cmp r2, #2 + blt _022FC434 +_022FC454: + mov r0, #0 + strb r0, [sl, #0x20] +_022FC45C: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022FC464: .word DUNGEON_PTR + arm_func_end InitEnemyStatsAndMoves + + arm_func_start ov29_022FC468 +ov29_022FC468: ; 0x022FC468 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r4, [sp, #0x24] + mov sb, r0 + cmp r4, #0xb + mov r0, #0 + cmp r4, #0xc + moveq r0, #1 + cmp r4, #0xd + moveq r0, #2 + cmp r4, #0xe + moveq r0, #3 + mov r8, r1 + mov r7, r2 + mov r6, r3 + ldr r5, [sp, #0x20] + bl GetExplorerMazeMonster + mov r4, r0 + mov r0, sb + add r1, r4, #0x22 + bl GroundToDungeonMoveset + ldrsh r0, [r4, #0xa] + mov r2, #0 + strh r0, [r8] +_022FC4C4: + add r1, r4, r2 + ldrb r0, [r1, #0xc] + strb r0, [r7, r2] + ldrb r0, [r1, #0xe] + strb r0, [r6, r2] + add r2, r2, #1 + cmp r2, #2 + blt _022FC4C4 + ldrsh r1, [r4, #8] + ldr r0, _022FC508 ; =IQ_SKILLS + ldr r0, [r0, #0x20] + strh r1, [r5] + cmp r1, r0 + strlth r0, [r5] + mov r0, #0 + strb r0, [sb, #0x20] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_022FC508: .word IQ_SKILLS + arm_func_end ov29_022FC468 + + arm_func_start SpawnTeam +SpawnTeam: ; 0x022FC50C +#ifdef JAPAN +#define SPAWN_TEAM_OFFSET -0xA4 +#else +#define SPAWN_TEAM_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x44 + mov sl, r0 + mov r0, #0 + bl DungeonRngSetSecondary + ldr r0, _022FC98C ; =DUNGEON_PTR + ldr r0, [r0] + add r1, r0, #0xcc00 + ldrsh r0, [r1, #0xe0 + SPAWN_TEAM_OFFSET] + ldrsh r1, [r1, #0xe2 + SPAWN_TEAM_OFFSET] + bl GetTile + ldrb fp, [r0, #7] + mov r4, #0 +_022FC540: + mov r0, r4 + bl GetActiveTeamMember + add r1, r4, #1 + mov r1, r1, lsl #0x10 + strh r4, [r0, #0xa] + mov r4, r1, asr #0x10 + cmp r4, #4 + blt _022FC540 + mov r7, #0 + mov r6, #1 + mov r8, r7 + mov r5, r7 + mov sb, r6 + add r4, sp, #0x34 +_022FC578: + mov r0, r8 + bl GetActiveTeamMember + ldrb r1, [r0] + tst r1, #1 + movne r2, r6 + moveq r2, r5 + tst r2, #0xff + beq _022FC5B0 + tst r1, #2 + movne r1, sb + moveq r1, #0 + tst r1, #0xff + strne r0, [r4, r7, lsl #2] + addne r7, r7, #1 +_022FC5B0: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #4 + blt _022FC578 + mov r1, #0 + add r0, sp, #0x34 + b _022FC5D8 +_022FC5D0: + str r1, [r0, r7, lsl #2] + add r7, r7, #1 +_022FC5D8: + cmp r7, #4 + blt _022FC5D0 + mov r8, #0 + mov r7, r8 + mov r3, r8 + mov r4, #1 + mov r2, r8 + add r5, sp, #0x34 + add r1, sp, #0x24 +_022FC5FC: + ldr r6, [r5, r7, lsl #2] + cmp r6, #0 + beq _022FC628 + ldrb r0, [r6, #1] + cmp r0, #0 + movne r0, r4 + moveq r0, r3 + tst r0, #0xff + strne r6, [r1, r8, lsl #2] + strne r2, [r5, r7, lsl #2] + addne r8, r8, #1 +_022FC628: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #4 + blt _022FC5FC + ldr r0, _022FC98C ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75c] + cmp r0, #0 + bne _022FC698 + mov r7, #0 + mov r4, r7 + add r5, sp, #0x34 + add sb, sp, #0x24 +_022FC660: + ldr r6, [r5, r7, lsl #2] + cmp r6, #0 + beq _022FC684 + ldrb r0, [r6, #3] + bl JoinedAtRangeCheck2Veneer + cmp r0, #0 + strne r6, [sb, r8, lsl #2] + strne r4, [r5, r7, lsl #2] + addne r8, r8, #1 +_022FC684: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #4 + blt _022FC660 +_022FC698: + mov r4, #0 + mov r2, r4 + add r1, sp, #0x24 + add r3, sp, #0x34 +_022FC6A8: + ldr r0, [r3, r4, lsl #2] + cmp r0, #0 + strne r0, [r1, r8, lsl #2] + add r0, r4, #1 + mov r0, r0, lsl #0x10 + strne r2, [r3, r4, lsl #2] + mov r4, r0, asr #0x10 + addne r8, r8, #1 + cmp r4, #4 + blt _022FC6A8 + mov r1, #0 + add r0, sp, #0x24 + b _022FC6E4 +_022FC6DC: + str r1, [r0, r8, lsl #2] + add r8, r8, #1 +_022FC6E4: + cmp r8, #4 + blt _022FC6DC + mov sb, #0 +_022FC6F0: + add r0, sp, #0x24 + ldr r5, [r0, sb, lsl #2] + mov r6, #0 + cmp r5, #0 + beq _022FC8BC + ldrsh r1, [r5, #0xc] + sub r0, r1, #0x17c + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #2 + ldrls r0, _022FC990 ; =0x0000017B + strlsh r0, [r5, #0xc] + bls _022FC74C + sub r0, r1, #0x3d4 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #2 + ldrls r0, _022FC994 ; =0x000003D3 + strlsh r0, [r5, #0xc] +_022FC74C: + mov r4, #0 +_022FC750: + ldr r0, _022FC998 ; =ov29_02351E28 + mov r1, r4, lsl #2 + ldrh r1, [r0, r1] + add r0, r0, r4, lsl #2 + ldrh r0, [r0, #2] + strh r1, [sp, #0x1e] + ldrsh r8, [sp, #0x1e] + strh r0, [sp, #0x20] + cmp r8, #0x63 + beq _022FC808 + ldr r0, _022FC98C ; =DUNGEON_PTR + ldrsh r7, [sp, #0x20] + ldr r0, [r0] + add r0, r0, #0xcc00 + ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET] + ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET] + add r1, r7, r1 + add r0, r8, r2 + bl GetTile + mov r1, r0 + ldrb r0, [r1, #7] + cmp r0, fp + bne _022FC800 + ldrsh r0, [r5, #0xc] + bl IsInvalidSpawnTile + cmp r0, #0 + bne _022FC800 + ldr r0, _022FC98C ; =DUNGEON_PTR + mov r1, #0 + ldr r2, [r0] + mov r0, #1 + str r1, [sp] + stmib sp, {r0, r1, sl} + str r1, [sp, #0x10] + add r0, r2, #0xcc00 + ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET] + ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET] + ldrsh r0, [r5, #0xc] + mov r3, r5 + add r1, r8, r1 + add r2, r7, r2 + bl InitTeamMember + mov r6, #1 + b _022FC808 +_022FC800: + add r4, r4, #1 + b _022FC750 +_022FC808: + cmp r6, #0 + bne _022FC8BC + ldr r8, _022FC998 ; =ov29_02351E28 + mov r7, #0 +_022FC818: + mov r0, r7, lsl #2 + ldrh r1, [r8, r0] + add r0, r8, r7, lsl #2 + ldrh r0, [r0, #2] + strh r1, [sp, #0x14] + ldrsh r6, [sp, #0x14] + strh r0, [sp, #0x16] + cmp r6, #0x63 + beq _022FC8BC + ldr r0, _022FC98C ; =DUNGEON_PTR + ldrsh r4, [sp, #0x16] + ldr r0, [r0] + add r0, r0, #0xcc00 + ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET] + ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET] + add r1, r4, r1 + add r0, r6, r2 + bl GetTile + mov r1, r0 + ldrsh r0, [r5, #0xc] + bl IsInvalidSpawnTile + cmp r0, #0 + bne _022FC8B4 + ldr r0, _022FC98C ; =DUNGEON_PTR + mov r1, #0 + ldr r2, [r0] + mov r0, #1 + str r1, [sp] + stmib sp, {r0, r1, sl} + str r1, [sp, #0x10] + add r0, r2, #0xcc00 + ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET] + ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET] + ldrsh r0, [r5, #0xc] + mov r3, r5 + add r1, r6, r1 + add r2, r4, r2 + bl InitTeamMember + b _022FC8BC +_022FC8B4: + add r7, r7, #1 + b _022FC818 +_022FC8BC: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #4 + blt _022FC6F0 + bl ov29_022FCD04 + mov r2, #0 +#ifdef JAPAN + mov sb, r2 +#else + mov r8, r2 +#endif + add r1, sp, #0x18 +_022FC8E0: + add r0, r2, #1 + mov r0, r0, lsl #0x10 +#ifdef JAPAN + strb sb, [r1, r2] +#else + strb r8, [r1, r2] +#endif + mov r2, r0, asr #0x10 + cmp r2, #5 + blt _022FC8E0 +#ifdef JAPAN + ldr r5, _022FC98C ; =DUNGEON_PTR + mov r7, #0 + mov r8, #1 + add r6, sp, #0x18 + mov r4, #0x23c +_022FC908: + ldr r0, [r5] + add r0, r0, sb, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xa84] +#else + ldr r4, _022FC98C ; =DUNGEON_PTR + mov r6, #0 + mov r7, #1 + add r5, sp, #0x18 +_022FC908: + ldr r0, [r4] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xb28] +#endif + bl EntityIsValid__022FC99C + cmp r0, #0 + beq _022FC964 +#ifdef JAPAN + mul r1, sb, r4 + ldr r0, [r5] + add r0, r0, #0x56 + add r2, r0, #0x800 + ldrb r0, [r2, r1] + add r2, r2, r1 + tst r0, #1 + movne r0, r8 + moveq r0, r7 +#else + ldr r0, [r4] + add r1, r8, r8, lsl #3 + add r0, r0, #0x56 + add r2, r0, #0x800 + ldrb r0, [r2, r1, lsl #6] + add r2, r2, r1, lsl #6 + tst r0, #1 + movne r0, r7 + moveq r0, r6 +#endif + tst r0, #0xff + ldrneb r1, [r2, #1] + cmpne r1, #0 +#ifdef JAPAN + addne r0, sb, #1 + andne r0, r0, #0xff + strneb r0, [r6, r1] + strneb r0, [r2, #1] +_022FC964: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #4 +#else + addne r0, r8, #1 + andne r0, r0, #0xff + strneb r0, [r5, r1] + strneb r0, [r2, #1] +_022FC964: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #4 +#endif + blt _022FC908 + add r0, sp, #0x18 + bl sub_0200F9B4 + bl DungeonRngSetPrimary + add sp, sp, #0x44 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022FC98C: .word DUNGEON_PTR +_022FC990: .word 0x0000017B +_022FC994: .word 0x000003D3 +_022FC998: .word ov29_02351E28 + arm_func_end SpawnTeam diff --git a/asm/overlay_29_022FC9C0.s b/asm/overlay_29_022FC9C0.s index 0659a15d..04e20263 100644 --- a/asm/overlay_29_022FC9C0.s +++ b/asm/overlay_29_022FC9C0.s @@ -553,7 +553,7 @@ SpawnMonster: ; 0x022FD084 strh r1, [r5, #0xe] bl ov29_023021F0 ldrb r0, [r7, #2] - bl ov29_022EFAE8 + bl IsLoneOutlaw cmp r0, #0 beq _022FD154 mov r0, #9 @@ -616,7 +616,7 @@ _022FD1E8: strb r0, [r5, #8] _022FD1F0: ldrb r0, [r7, #2] - bl ov29_022EFAE8 + bl IsLoneOutlaw cmp r0, #0 beq _022FD224 ldr r0, _022FD30C ; =ov10_022C45A4 diff --git a/asm/overlay_29_02301FBC.s b/asm/overlay_29_02301FBC.s index fdce701a..4f88d3b4 100644 --- a/asm/overlay_29_02301FBC.s +++ b/asm/overlay_29_02301FBC.s @@ -54,7 +54,7 @@ _02302034: bl DisableIqSkill _02302068: mov r0, r4 - bl ov29_022FBDE0 + bl IsLoneOutlawVeneer cmp r0, #0 bne _0230208C ldr r0, _023021EC ; =MIN_IQ_ITEM_MASTER diff --git a/asm/overlay_29_02308FE0.s b/asm/overlay_29_02308FE0.s index 0564aa0b..47054a69 100644 --- a/asm/overlay_29_02308FE0.s +++ b/asm/overlay_29_02308FE0.s @@ -2679,7 +2679,7 @@ _0230B04C: cmp r0, #0 beq _0230B0B4 mov r0, r7 - bl ov29_022FBDE0 + bl IsLoneOutlawVeneer cmp r0, #0 beq _0230B0B4 ldrb r0, [r7, #0x62] @@ -3283,7 +3283,7 @@ _0230A5E0: cmp r0, #0 beq _0230A648 mov r0, r4 - bl ov29_022FBDE0 + bl IsLoneOutlawVeneer cmp r0, #0 beq _0230A648 ldrb r0, [r4, #0x62] diff --git a/asm/overlay_29_0232C524.s b/asm/overlay_29_0232C524.s index 9fdcab20..f91269dc 100644 --- a/asm/overlay_29_0232C524.s +++ b/asm/overlay_29_0232C524.s @@ -326,7 +326,7 @@ _0232C8E4: cmp r0, #0 beq _0232C96C mov r0, r7 - bl ov29_022FBDE0 + bl IsLoneOutlawVeneer cmp r0, #0 bne _0232C96C ldrb r0, [r7, #6] diff --git a/asm/overlay_29_0233861C.s b/asm/overlay_29_0233861C.s index db6e2bf4..96bfe18d 100644 --- a/asm/overlay_29_0233861C.s +++ b/asm/overlay_29_0233861C.s @@ -1185,7 +1185,7 @@ _023393DC: cmp r0, #2 moveq r0, r5 beq _02339410 - bl ov29_022EFAE8 + bl IsLoneOutlaw _02339410: cmp r0, #0 movne r5, #0xc diff --git a/include/dungeon_logic_6.h b/include/dungeon_logic_6.h new file mode 100644 index 00000000..128c5068 --- /dev/null +++ b/include/dungeon_logic_6.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_DUNGEON_LOGIC_6_H +#define PMDSKY_DUNGEON_LOGIC_6_H + +#include "dungeon_mode.h" +#include "util.h" + +bool8 IsLoneOutlaw(enum monster_behavior behavior); + +#endif //PMDSKY_DUNGEON_LOGIC_6_H diff --git a/include/dungeon_logic_7.h b/include/dungeon_logic_7.h new file mode 100644 index 00000000..39615f72 --- /dev/null +++ b/include/dungeon_logic_7.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_DUNGEON_LOGIC_7_H +#define PMDSKY_DUNGEON_LOGIC_7_H + +#include "dungeon_mode.h" +#include "util.h" + +bool8 IsLoneOutlawVeneer(struct monster* monster_info); + +#endif //PMDSKY_DUNGEON_LOGIC_7_H diff --git a/main.lsf b/main.lsf index f6c65563..ec6b97cd 100644 --- a/main.lsf +++ b/main.lsf @@ -394,6 +394,8 @@ Overlay OVY_29 Object src/dungeon_util.o Object asm/overlay_29_rodata_0235173C.o Object asm/overlay_29_022EFA6C.o + Object src/dungeon_logic_6.o + Object asm/overlay_29_022EFB04.o Object src/overlay_29_022F0590.o Object asm/overlay_29_022F05B4.o Object src/overlay_29_022F528C.o @@ -419,6 +421,8 @@ Overlay OVY_29 Object asm/overlay_29_022FB678.o Object src/joined_at_checks.o Object asm/overlay_29_022FBB1C.o + Object src/dungeon_logic_7.o + Object asm/overlay_29_022FBDF0.o Object src/overlay_29_022FC99C.o Object asm/overlay_29_022FC9C0.o Object src/overlay_29_022FEEB8_eu.o diff --git a/src/dungeon_logic_6.c b/src/dungeon_logic_6.c new file mode 100644 index 00000000..9d9f209b --- /dev/null +++ b/src/dungeon_logic_6.c @@ -0,0 +1,17 @@ +#include "dungeon_logic_6.h" + +#include "dungeon_mode.h" +#include "util.h" + +bool8 IsLoneOutlaw(enum monster_behavior behavior) +{ + bool8 result; + + // If behavior is 1, 2 or 3 + if ((u32) (u8) (behavior + 0xFF) <= BEHAVIOR_FLEEING_OUTLAW) { + result = TRUE; + } else { + result = FALSE; + } + return result; +} diff --git a/src/dungeon_logic_7.c b/src/dungeon_logic_7.c new file mode 100644 index 00000000..8831c4ee --- /dev/null +++ b/src/dungeon_logic_7.c @@ -0,0 +1,10 @@ +#include "dungeon_logic_7.h" + +#include "dungeon_logic_6.h" +#include "dungeon_mode.h" +#include "util.h" + +bool8 IsLoneOutlawVeneer(struct monster* monster_info) +{ + return IsLoneOutlaw(monster_info->monster_behavior); +} diff --git a/src/dungeon_recruitment.c b/src/dungeon_recruitment.c index 10fb1370..e7ebabb4 100644 --- a/src/dungeon_recruitment.c +++ b/src/dungeon_recruitment.c @@ -9,13 +9,13 @@ #include "dg_random.h" #include "main_0205283C.h" // GetRecruitRate1 and GetRecruitRate2 #include "overlay_29_0230E578.h" // ItemIsActive__0230E578 +#include "dungeon_logic_7.h" extern bool8 IsRecruitingAllowed(u8 dungeon_id); extern bool8 IsFullFloorFixedRoom(void); extern bool8 IsLegendaryChallengeFloor(void); extern bool8 IsCurrentMissionTypeExact(u32 mission_type, u32 mission_subtype); extern bool8 IsMonsterOnTeam(s16 monsterId, s32 checkType); -extern bool8 ov29_022FBDE0(struct monster* stats); extern void ov29_022E1B28(s32); extern void ov29_022E81F8(void); extern bool8 HasPlayedOldGame(void); @@ -122,7 +122,7 @@ bool8 RecruitCheck(struct entity* leader, struct entity* target) return FALSE; } - if (ov29_022FBDE0(target_monster_info)) + if (IsLoneOutlawVeneer(target_monster_info)) return FALSE; if (!SpecificRecruitCheck(target_monster_info->id))