From c433875956afda985e0b3003dcf54b9323b4e325 Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Wed, 19 Aug 2026 17:06:17 -0700 Subject: [PATCH] Decomp 42 small dungeon-mode functions in overlay_29 Landed as one batch after verifying every function individually, rather than in groups of ten. Five clusters: - Sound and effect veneers that tail-call a shared helper with fixed ids: PlaySeByIdIfShouldDisplayEntity, PlayEffectAnimationPos, PlayEffectAnimationPixelPos, ChangeMonsterAnimation and ov29_022E67E4. - Four DoMoveDamage__* wrappers plus DoMoveVacuumCut, all `return DealDamage(...) != 0`. - DoMoveExpose, DoMoveSport, DoMoveMirrorMove, DoMoveMiracleEye, DoMoveNightmare, DoMoveSureShot, DoMoveFeint and DoMoveRockPolish, which branch or sequence two calls rather than forwarding once. - Minimap byte accessors over GetMinimapData, and GetTileTerrain. - Wrappers whose argument setup evidences the callee arity: ShouldDisplayEntityWrapper, UseSingleUseItemSelf, CalcSpeedStageWrapper, GenerateCleanItem and three ov29_* forwarders. Eight further candidates were prepared and are deliberately NOT included: DoMoveHealOrder, DoMoveScreech, DoMoveCharm, DoMoveGrowl, DoMoveLowerDefense1, DoMoveFakeTears, DoMoveFeatherDance and DoMoveMetalSound. Each passes a constant on the stack to a six-argument stat helper, and each differs from the target only in instruction *order*: retail loads the stat global before materialising the constant, the candidate after. Same instructions, same count. They stay in asm. Authored by Claude (Opus 5) under human direction. All 42 verified at score 0 individually before landing; confirmed together by a single matching build: build/pmdsky.us/pmdsky.us.nds: OK. None carries a region conditional, so US alone is sufficient. Co-Authored-By: Claude Opus 5 --- asm/include/overlay_29_022DC65C.inc | 78 - asm/include/overlay_29_022DC694.inc | 78 + asm/include/overlay_29_022E1AD4.inc | 4 +- asm/include/overlay_29_022E37DC.inc | 93 +- asm/include/overlay_29_022E41F0.inc | 3 + asm/include/overlay_29_022E45CC.inc | 3 + asm/include/overlay_29_022E46D0.inc | 3 + asm/include/overlay_29_022E4714.inc | 5 + asm/include/overlay_29_022E4BB4.inc | 5 + asm/include/overlay_29_022E5650.inc | 41 + asm/include/overlay_29_022E66D8.inc | 3 + asm/include/overlay_29_022E6798.inc | 8 + asm/include/overlay_29_022E6928.inc | 59 + asm/include/overlay_29_022E7EC4.inc | 40 +- asm/include/overlay_29_022E86A4.inc | 51 + asm/include/overlay_29_022F52B0.inc | 40 - asm/include/overlay_29_022F52CC.inc | 41 + ...9_022FFF4C.inc => overlay_29_022FFF5C.inc} | 5 +- asm/include/overlay_29_02320788.inc | 36 +- asm/include/overlay_29_0232124C.inc | 2 + asm/include/overlay_29_02321288.inc | 12 + asm/include/overlay_29_02325644.inc | 17 - asm/include/overlay_29_02325DE4.inc | 14 + asm/include/overlay_29_02325F74.inc | 4 + asm/include/overlay_29_023268CC.inc | 23 - asm/include/overlay_29_0232692C.inc | 23 + asm/include/overlay_29_02326CC8.inc | 1 - asm/include/overlay_29_02327940.inc | 18 - asm/include/overlay_29_023279E4.inc | 17 + asm/include/overlay_29_02329898.inc | 3 - asm/include/overlay_29_02329FE0.inc | 5 + ...9_0232A500.inc => overlay_29_0232A524.inc} | 0 ...9_0232CE50.inc => overlay_29_0232CE7C.inc} | 2 - ...9_0232DD88.inc => overlay_29_0232DDAC.inc} | 0 ...9_0232E0F8.inc => overlay_29_0232E130.inc} | 1 - asm/include/overlay_29_0232E2B8.inc | 3 - ...9_0232B8B0.inc => overlay_29_0232E400.inc} | 1 + asm/include/overlay_29_0232E4A0.inc | 1 - asm/include/overlay_29_02339138.inc | 44 +- asm/include/overlay_29_0233A248.inc | 58 + asm/include/overlay_29_0233AE84.inc | 22 + asm/include/overlay_29_02344B1C.inc | 48 +- asm/include/overlay_29_02344BF8.inc | 50 + asm/overlay_29_022DC65C.s | 2732 ------ asm/overlay_29_022DC694.s | 2727 ++++++ asm/overlay_29_022E1AD4.s | 18 - asm/overlay_29_022E37DC.s | 4524 ---------- asm/overlay_29_022E41F0.s | 322 + asm/overlay_29_022E45CC.s | 101 + asm/overlay_29_022E46D0.s | 29 + asm/overlay_29_022E4714.s | 384 + asm/overlay_29_022E4BB4.s | 825 ++ asm/overlay_29_022E5650.s | 1311 +++ asm/overlay_29_022E66D8.s | 50 + asm/overlay_29_022E6798.s | 94 + asm/overlay_29_022E6928.s | 1278 +++ asm/overlay_29_022E7EC4.s | 797 -- asm/overlay_29_022E86A4.s | 795 ++ asm/overlay_29_022F52B0.s | 531 -- asm/overlay_29_022F52CC.s | 526 ++ ...ay_29_022FFF4C.s => overlay_29_022FFF5C.s} | 11 +- asm/overlay_29_02320788.s | 173 - asm/overlay_29_0232124C.s | 24 + asm/overlay_29_02321288.s | 137 + asm/overlay_29_02325644.s | 160 - asm/overlay_29_02325DE4.s | 111 + asm/overlay_29_02325F74.s | 25 + asm/overlay_29_023268CC.s | 299 - asm/overlay_29_0232692C.s | 290 + asm/overlay_29_02326CC8.s | 16 - asm/overlay_29_02327940.s | 189 - asm/overlay_29_023279E4.s | 174 + asm/overlay_29_02329898.s | 50 - asm/overlay_29_02329FE0.s | 37 + ...ay_29_0232A500.s => overlay_29_0232A524.s} | 15 +- asm/overlay_29_0232B8B0.s | 17 - asm/overlay_29_0232CE50.s | 35 - asm/overlay_29_0232CE7C.s | 19 + ...ay_29_0232DD88.s => overlay_29_0232DDAC.s} | 15 +- ...ay_29_0232E0F8.s => overlay_29_0232E130.s} | 20 +- asm/overlay_29_0232E2B8.s | 57 - asm/overlay_29_0232E400.s | 45 + asm/overlay_29_0232E4A0.s | 17 - asm/overlay_29_02339138.s | 7729 ----------------- asm/overlay_29_0233A248.s | 897 ++ asm/overlay_29_0233AE84.s | 6802 +++++++++++++++ asm/overlay_29_02344B1C.s | 783 -- asm/overlay_29_02344BF8.s | 777 ++ include/overlay_29_022DC684.h | 10 + include/overlay_29_022E272C.h | 11 + include/overlay_29_022E41CC.h | 12 + include/overlay_29_022E45B8.h | 10 + include/overlay_29_022E46C0.h | 10 + include/overlay_29_022E4704.h | 10 + include/overlay_29_022E4B8C.h | 11 + include/overlay_29_022E563C.h | 10 + include/overlay_29_022E66C4.h | 10 + include/overlay_29_022E6770.h | 11 + include/overlay_29_022E68BC.h | 13 + include/overlay_29_022E869C.h | 10 + include/overlay_29_022F52BC.h | 10 + include/overlay_29_022FFF28.h | 1 + include/overlay_29_02321238.h | 10 + include/overlay_29_02321274.h | 10 + include/overlay_29_02325DC0.h | 10 + include/overlay_29_02325F3C.h | 10 + include/overlay_29_02326908.h | 10 + include/overlay_29_02326E04.h | 1 + include/overlay_29_023279AC.h | 10 + include/overlay_29_02329FB4.h | 10 + include/overlay_29_0232A4E8.h | 1 + include/overlay_29_0232B8A0.h | 1 + include/overlay_29_0232CE40.h | 1 + include/overlay_29_0232DD78.h | 1 + include/overlay_29_0232E0E4.h | 1 + include/overlay_29_0232E3D0.h | 10 + include/overlay_29_0232E734.h | 1 + include/overlay_29_0233A218.h | 12 + include/overlay_29_0233AE78.h | 10 + include/overlay_29_02344BE4.h | 10 + main.lsf | 58 +- src/overlay_29_022DC684.c | 8 + src/overlay_29_022E272C.c | 13 + src/overlay_29_022E41CC.c | 24 + src/overlay_29_022E45B8.c | 8 + src/overlay_29_022E46C0.c | 8 + src/overlay_29_022E4704.c | 8 + src/overlay_29_022E4B8C.c | 13 + src/overlay_29_022E563C.c | 8 + src/overlay_29_022E66C4.c | 8 + src/overlay_29_022E6770.c | 13 + src/overlay_29_022E68BC.c | 23 + src/overlay_29_022E869C.c | 6 + src/overlay_29_022F52BC.c | 8 + src/overlay_29_022FFF28.c | 7 + src/overlay_29_02321238.c | 8 + src/overlay_29_02321274.c | 8 + src/overlay_29_02325DC0.c | 8 + src/overlay_29_02325F3C.c | 14 + src/overlay_29_02326908.c | 13 + src/overlay_29_02326E04.c | 9 + src/overlay_29_023279AC.c | 14 + src/overlay_29_02329FB4.c | 14 + src/overlay_29_0232A4E8.c | 7 + src/overlay_29_0232B8A0.c | 7 + src/overlay_29_0232CE40.c | 9 + src/overlay_29_0232DD78.c | 7 + src/overlay_29_0232E0E4.c | 15 + src/overlay_29_0232E3D0.c | 13 + src/overlay_29_0232E734.c | 8 + src/overlay_29_0233A218.c | 18 + src/overlay_29_0233AE78.c | 6 + src/overlay_29_02344BE4.c | 8 + 153 files changed, 18991 insertions(+), 18599 deletions(-) create mode 100644 asm/include/overlay_29_022DC694.inc create mode 100644 asm/include/overlay_29_022E41F0.inc create mode 100644 asm/include/overlay_29_022E45CC.inc create mode 100644 asm/include/overlay_29_022E46D0.inc create mode 100644 asm/include/overlay_29_022E4714.inc create mode 100644 asm/include/overlay_29_022E4BB4.inc create mode 100644 asm/include/overlay_29_022E5650.inc create mode 100644 asm/include/overlay_29_022E66D8.inc create mode 100644 asm/include/overlay_29_022E6798.inc create mode 100644 asm/include/overlay_29_022E6928.inc create mode 100644 asm/include/overlay_29_022E86A4.inc create mode 100644 asm/include/overlay_29_022F52CC.inc rename asm/include/{overlay_29_022FFF4C.inc => overlay_29_022FFF5C.inc} (94%) create mode 100644 asm/include/overlay_29_0232124C.inc create mode 100644 asm/include/overlay_29_02321288.inc create mode 100644 asm/include/overlay_29_02325DE4.inc create mode 100644 asm/include/overlay_29_02325F74.inc create mode 100644 asm/include/overlay_29_0232692C.inc create mode 100644 asm/include/overlay_29_023279E4.inc create mode 100644 asm/include/overlay_29_02329FE0.inc rename asm/include/{overlay_29_0232A500.inc => overlay_29_0232A524.inc} (100%) rename asm/include/{overlay_29_0232CE50.inc => overlay_29_0232CE7C.inc} (57%) rename asm/include/{overlay_29_0232DD88.inc => overlay_29_0232DDAC.inc} (100%) rename asm/include/{overlay_29_0232E0F8.inc => overlay_29_0232E130.inc} (91%) rename asm/include/{overlay_29_0232B8B0.inc => overlay_29_0232E400.inc} (53%) create mode 100644 asm/include/overlay_29_0233A248.inc create mode 100644 asm/include/overlay_29_0233AE84.inc create mode 100644 asm/include/overlay_29_02344BF8.inc create mode 100644 asm/overlay_29_022DC694.s create mode 100644 asm/overlay_29_022E41F0.s create mode 100644 asm/overlay_29_022E45CC.s create mode 100644 asm/overlay_29_022E46D0.s create mode 100644 asm/overlay_29_022E4714.s create mode 100644 asm/overlay_29_022E4BB4.s create mode 100644 asm/overlay_29_022E5650.s create mode 100644 asm/overlay_29_022E66D8.s create mode 100644 asm/overlay_29_022E6798.s create mode 100644 asm/overlay_29_022E6928.s create mode 100644 asm/overlay_29_022E86A4.s create mode 100644 asm/overlay_29_022F52CC.s rename asm/{overlay_29_022FFF4C.s => overlay_29_022FFF5C.s} (89%) create mode 100644 asm/overlay_29_0232124C.s create mode 100644 asm/overlay_29_02321288.s create mode 100644 asm/overlay_29_02325DE4.s create mode 100644 asm/overlay_29_02325F74.s create mode 100644 asm/overlay_29_0232692C.s create mode 100644 asm/overlay_29_023279E4.s create mode 100644 asm/overlay_29_02329FE0.s rename asm/{overlay_29_0232A500.s => overlay_29_0232A524.s} (97%) delete mode 100644 asm/overlay_29_0232B8B0.s delete mode 100644 asm/overlay_29_0232CE50.s create mode 100644 asm/overlay_29_0232CE7C.s rename asm/{overlay_29_0232DD88.s => overlay_29_0232DDAC.s} (94%) rename asm/{overlay_29_0232E0F8.s => overlay_29_0232E130.s} (80%) create mode 100644 asm/overlay_29_0232E400.s create mode 100644 asm/overlay_29_0233A248.s create mode 100644 asm/overlay_29_0233AE84.s create mode 100644 asm/overlay_29_02344BF8.s create mode 100644 include/overlay_29_022DC684.h create mode 100644 include/overlay_29_022E272C.h create mode 100644 include/overlay_29_022E41CC.h create mode 100644 include/overlay_29_022E45B8.h create mode 100644 include/overlay_29_022E46C0.h create mode 100644 include/overlay_29_022E4704.h create mode 100644 include/overlay_29_022E4B8C.h create mode 100644 include/overlay_29_022E563C.h create mode 100644 include/overlay_29_022E66C4.h create mode 100644 include/overlay_29_022E6770.h create mode 100644 include/overlay_29_022E68BC.h create mode 100644 include/overlay_29_022E869C.h create mode 100644 include/overlay_29_022F52BC.h create mode 100644 include/overlay_29_02321238.h create mode 100644 include/overlay_29_02321274.h create mode 100644 include/overlay_29_02325DC0.h create mode 100644 include/overlay_29_02325F3C.h create mode 100644 include/overlay_29_02326908.h create mode 100644 include/overlay_29_023279AC.h create mode 100644 include/overlay_29_02329FB4.h create mode 100644 include/overlay_29_0232E3D0.h create mode 100644 include/overlay_29_0233A218.h create mode 100644 include/overlay_29_0233AE78.h create mode 100644 include/overlay_29_02344BE4.h create mode 100644 src/overlay_29_022DC684.c create mode 100644 src/overlay_29_022E272C.c create mode 100644 src/overlay_29_022E41CC.c create mode 100644 src/overlay_29_022E45B8.c create mode 100644 src/overlay_29_022E46C0.c create mode 100644 src/overlay_29_022E4704.c create mode 100644 src/overlay_29_022E4B8C.c create mode 100644 src/overlay_29_022E563C.c create mode 100644 src/overlay_29_022E66C4.c create mode 100644 src/overlay_29_022E6770.c create mode 100644 src/overlay_29_022E68BC.c create mode 100644 src/overlay_29_022E869C.c create mode 100644 src/overlay_29_022F52BC.c create mode 100644 src/overlay_29_02321238.c create mode 100644 src/overlay_29_02321274.c create mode 100644 src/overlay_29_02325DC0.c create mode 100644 src/overlay_29_02325F3C.c create mode 100644 src/overlay_29_02326908.c create mode 100644 src/overlay_29_023279AC.c create mode 100644 src/overlay_29_02329FB4.c create mode 100644 src/overlay_29_0232E3D0.c create mode 100644 src/overlay_29_0233A218.c create mode 100644 src/overlay_29_0233AE78.c create mode 100644 src/overlay_29_02344BE4.c diff --git a/asm/include/overlay_29_022DC65C.inc b/asm/include/overlay_29_022DC65C.inc index c59bb1c6..327aba51 100644 --- a/asm/include/overlay_29_022DC65C.inc +++ b/asm/include/overlay_29_022DC65C.inc @@ -1,82 +1,4 @@ #pragma once -.public _s32_div_f -.public AddSimpleObjToOam -.public ChangeSimpleObjTexture -.public DirectoryFileMngr_OpenDirectoryFile -.public DrawTeamStats -.public DUNGEON_PTR -.public FillPaletteInitInfo -.public FreeMapAndTeam -.public FreeTeamStats -.public GetDefaultTileTextureId -.public HandleSir0Translation -.public IsBackgroundTileset -.public LoadObjPalette -.public MemAlloc -.public MemFree -.public MemZero -.public OBJ_GRAPHICS_CONTROLS_PTR -.public ov10_022C0814 -.public ov10_022C096C -.public ov10_022C0998 -.public ov10_022C0F6C -.public ov10_022C11D8 -.public ov10_022C14D0 -.public ov10_022C159C -.public ov10_022C22A0 .public ov29_022DC2B8 .public ov29_022DC33C -.public ov29_02350F88 -.public ov29_02350F8C -.public ov29_02350F90 -.public ov29_0235109C -.public ov29_023510B8 -.public ov29_023510BC -.public ov29_02353518 -.public ov29_0235351C -.public ov29_02353524 -.public ov29_0235352C -.public ov29_02353530 -.public ov29_02353534 .public ov29_023538B4 -.public ov29_0236CEF0 -.public ov29_0236D5EC -.public ov29_023735EC -.public ov29_023735F0 -.public ov29_023735F4 -.public ov29_023735F8 -.public ov29_023735FC -.public ov29_0237360C -.public ov29_0237368C -.public ov29_02373690 -.public ov29_0237C6D4 -.public ov29_0237C714 -.public sub_01FF9BA0 -.public sub_01FF9E14 -.public sub_01FF9F80 -.public sub_02008BF4 -.public sub_0200A2CC -.public sub_0200A2F4 -.public sub_0200A544 -.public sub_0200B330 -.public sub_0200B3D4 -.public sub_0201BCCC -.public sub_0201BCF4 -.public sub_0201BD1C -.public sub_020275C0 -.public sub_020275DC -.public sub_020519D0 -.public sub_02051B44 -.public sub_02051C24 -.public sub_02051D68 -.public sub_02051DD0 -.public sub_02051E60 -.public sub_02051ED4 -.public sub_02051EF0 -.public sub_02063628 -.public sub_0206367C -.public sub_02063734 -.public sub_02063770 -.public sub_02063830 -.public UnloadFile -.public UpdateTeamStats diff --git a/asm/include/overlay_29_022DC694.inc b/asm/include/overlay_29_022DC694.inc new file mode 100644 index 00000000..1a31129e --- /dev/null +++ b/asm/include/overlay_29_022DC694.inc @@ -0,0 +1,78 @@ +#pragma once +.public AddSimpleObjToOam +.public ChangeSimpleObjTexture +.public DUNGEON_PTR +.public DirectoryFileMngr_OpenDirectoryFile +.public DrawTeamStats +.public FillPaletteInitInfo +.public FreeMapAndTeam +.public FreeTeamStats +.public GetDefaultTileTextureId +.public HandleSir0Translation +.public IsBackgroundTileset +.public LoadObjPalette +.public MemAlloc +.public MemFree +.public MemZero +.public OBJ_GRAPHICS_CONTROLS_PTR +.public UnloadFile +.public UpdateTeamStats +.public _s32_div_f +.public ov10_022C0814 +.public ov10_022C096C +.public ov10_022C0F6C +.public ov10_022C11D8 +.public ov10_022C14D0 +.public ov10_022C159C +.public ov10_022C22A0 +.public ov29_02350F88 +.public ov29_02350F8C +.public ov29_02350F90 +.public ov29_0235109C +.public ov29_023510B8 +.public ov29_023510BC +.public ov29_02353518 +.public ov29_0235351C +.public ov29_02353524 +.public ov29_0235352C +.public ov29_02353530 +.public ov29_02353534 +.public ov29_0236CEF0 +.public ov29_0236D5EC +.public ov29_023735EC +.public ov29_023735F0 +.public ov29_023735F4 +.public ov29_023735F8 +.public ov29_023735FC +.public ov29_0237360C +.public ov29_0237368C +.public ov29_02373690 +.public ov29_0237C6D4 +.public ov29_0237C714 +.public sub_01FF9BA0 +.public sub_01FF9E14 +.public sub_01FF9F80 +.public sub_02008BF4 +.public sub_0200A2CC +.public sub_0200A2F4 +.public sub_0200A544 +.public sub_0200B330 +.public sub_0200B3D4 +.public sub_0201BCCC +.public sub_0201BCF4 +.public sub_0201BD1C +.public sub_020275C0 +.public sub_020275DC +.public sub_020519D0 +.public sub_02051B44 +.public sub_02051C24 +.public sub_02051D68 +.public sub_02051DD0 +.public sub_02051E60 +.public sub_02051ED4 +.public sub_02051EF0 +.public sub_02063628 +.public sub_0206367C +.public sub_02063734 +.public sub_02063770 +.public sub_02063830 diff --git a/asm/include/overlay_29_022E1AD4.inc b/asm/include/overlay_29_022E1AD4.inc index 4e6c9b71..f64eab0b 100644 --- a/asm/include/overlay_29_022E1AD4.inc +++ b/asm/include/overlay_29_022E1AD4.inc @@ -9,6 +9,8 @@ .public HasDropeyeStatus .public HiddenStairsPresent .public IsPositionActuallyInSight +.public PopulateActiveMonsterPtrs +.public SECONDARY_TERRAIN_TYPES .public ov29_022DE954 .public ov29_022DE9F8 .public ov29_022DEA10 @@ -18,5 +20,3 @@ .public ov29_02304830 .public ov29_0237C754 .public ov29_0237C79C -.public PopulateActiveMonsterPtrs -.public SECONDARY_TERRAIN_TYPES diff --git a/asm/include/overlay_29_022E37DC.inc b/asm/include/overlay_29_022E37DC.inc index 9ba044ce..e89d0733 100644 --- a/asm/include/overlay_29_022E37DC.inc +++ b/asm/include/overlay_29_022E37DC.inc @@ -1,90 +1,12 @@ #pragma once .public AdvanceFrame .public AnimationHasMoreFrames -.public CanMonsterSpawn -.public ChangeDungeonMusic -.public ChangeMonsterAnimation -.public CheckActiveChallengeRequest -.public CheckSpawnThreshold -.public DIRECTIONS_XY -.public DisplayAnimatedNumbers .public DUNGEON_PTR -.public DungeonFloorToGroupFloor -.public DungeonGetTotalSpriteFileSize -.public DungeonGoesUp -.public DungeonRandInt -.public DungeonRngSetPrimary -.public DungeonRngSetSecondary .public EntityIsValid__022E37B8 -.public FloorNumberIsEven .public GetEffectAnimationField0x19 -.public GetFloorType -.public GetLeader -.public GetMonsterGenderVeneer -.public GetMonsterIdFromSpawnEntry -.public GetMonsterLevelFromSpawnEntry -.public GetNbFloorsPlusOne -.public GetNbPrecedingFloors -.public GetNbRecruited -.public GetSecondFormIfValid -.public GetSpriteFileSize -.public HandleSir0Translation .public InitOamAdjustmentInfo -.public IsBossFight -.public IsCurrentFixedRoomBossFight -.public IsCurrentMissionType -.public IsDestinationFloorWithFixedRoom -.public IsDestinationFloorWithMonster -.public IsDojoDungeon -.public IsFullFloorFixedRoom -.public IsInSpawnList -.public IsItemForSpecialSpawnInBag -.public LoadFileFromRom -.public LoadFixedRoom -.public LogMessageByIdWithPopup -.public MemAlloc -.public MemFree -.public MonsterIsType -.public NeedsItemToSpawn -.public ov10_022BDC68 -.public ov10_022BDE50 -.public ov10_022BEC08 -.public ov10_022BEC94 -.public ov10_022BEFD8 -.public ov10_022BF274 -.public ov10_022BF2B4 -.public ov10_022BF45C -.public ov10_022BF9CC -.public ov10_022BFB6C -.public ov29_022DE5D8 -.public ov29_022DE5F0 -.public ov29_022E2CA0 -.public ov29_022EA370 -.public ov29_022ED0F4 -.public ov29_0230D618 -.public ov29_02339148 -.public ov29_02349378 -.public ov29_0234B1A4 -.public ov29_0235118C -.public ov29_02351194 -.public ov29_0235119C -.public ov29_023511A4 -.public ov29_023511B0 -.public ov29_023511DC -.public ov29_0235122C -.public ov29_0235124C -.public ov29_02351464 -.public ov29_02351584 -.public ov29_02351594 -.public ov29_023515B0 -.public ov29_023515CC -.public ov29_0235354C .public PlayEffectAnimationEntity -.public PlayMeByIdIfNot998 -.public PlaySeByIdIfNotSilence -.public RandIntSafe -.public SetMonsterId -.public ShouldDisplayEntityWrapper +.public PlaySeByIdIfShouldDisplayEntity .public STATUS_ICON_ARRAY_BIDE .public STATUS_ICON_ARRAY_BLINDED .public STATUS_ICON_ARRAY_BURN @@ -100,7 +22,12 @@ .public STATUS_ICON_ARRAY_REFLECT .public STATUS_ICON_ARRAY_SLEEP .public STATUS_ICON_ARRAY_SURE_SHOT -.public sub_0201CF90 -.public sub_0201D034 -.public SubstitutePlaceholderStringTags -.public UnloadFile +.public ov10_022BDC68 +.public ov10_022BF274 +.public ov10_022BF2B4 +.public ov10_022BF9CC +.public ov29_022DE5D8 +.public ov29_022DE5F0 +.public ov29_022E6E40 +.public ov29_022ED0F4 +.public ov29_0235354C diff --git a/asm/include/overlay_29_022E41F0.inc b/asm/include/overlay_29_022E41F0.inc new file mode 100644 index 00000000..264700b1 --- /dev/null +++ b/asm/include/overlay_29_022E41F0.inc @@ -0,0 +1,3 @@ +#pragma once +.public GetEffectAnimationField0x19 +.public PlayEffectAnimationEntity diff --git a/asm/include/overlay_29_022E45CC.inc b/asm/include/overlay_29_022E45CC.inc new file mode 100644 index 00000000..264700b1 --- /dev/null +++ b/asm/include/overlay_29_022E45CC.inc @@ -0,0 +1,3 @@ +#pragma once +.public GetEffectAnimationField0x19 +.public PlayEffectAnimationEntity diff --git a/asm/include/overlay_29_022E46D0.inc b/asm/include/overlay_29_022E46D0.inc new file mode 100644 index 00000000..d2625c79 --- /dev/null +++ b/asm/include/overlay_29_022E46D0.inc @@ -0,0 +1,3 @@ +#pragma once +.public DisplayAnimatedNumbers +.public ShouldDisplayEntityAdvanced diff --git a/asm/include/overlay_29_022E4714.inc b/asm/include/overlay_29_022E4714.inc new file mode 100644 index 00000000..aa03e10e --- /dev/null +++ b/asm/include/overlay_29_022E4714.inc @@ -0,0 +1,5 @@ +#pragma once +.public GetEffectAnimationField0x19 +.public MonsterIsType +.public PlayEffectAnimationEntity +.public PlaySeByIdIfShouldDisplayEntity diff --git a/asm/include/overlay_29_022E4BB4.inc b/asm/include/overlay_29_022E4BB4.inc new file mode 100644 index 00000000..9c7e98d1 --- /dev/null +++ b/asm/include/overlay_29_022E4BB4.inc @@ -0,0 +1,5 @@ +#pragma once +.public DUNGEON_PTR +.public GetEffectAnimationField0x19 +.public PlayEffectAnimationEntity +.public ov29_0230D618 diff --git a/asm/include/overlay_29_022E5650.inc b/asm/include/overlay_29_022E5650.inc new file mode 100644 index 00000000..f8110de5 --- /dev/null +++ b/asm/include/overlay_29_022E5650.inc @@ -0,0 +1,41 @@ +#pragma once +.public AdvanceFrame +.public AnimationHasMoreFrames +.public ChangeDungeonMusic +.public ChangeMonsterAnimation +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DungeonGoesUp +.public EntityIsValid__022E37B8 +.public GetEffectAnimationField0x19 +.public GetFloorType +.public GetLeader +.public InitOamAdjustmentInfo +.public IsCurrentFixedRoomBossFight +.public LogMessageByIdWithPopup +.public PlayEffectAnimationEntity +.public PlayEffectAnimationPixelPos +.public PlayEffectAnimationPos +.public PlayMeByIdIfNot998 +.public PlaySeByIdIfNotSilence +.public ShouldDisplayEntityWrapper +.public SubstitutePlaceholderStringTags +.public ov10_022BDC68 +.public ov10_022BEC08 +.public ov10_022BEC94 +.public ov10_022BF274 +.public ov10_022BF2B4 +.public ov10_022BF45C +.public ov29_022E2CA0 +.public ov29_022E6A00 +.public ov29_022E6C08 +.public ov29_022E6CE0 +.public ov29_022EA370 +.public ov29_02339148 +.public ov29_0234B1A4 +.public ov29_02351194 +.public ov29_0235119C +.public ov29_023511DC +.public ov29_0235122C +.public ov29_0235124C +.public sub_0201D034 diff --git a/asm/include/overlay_29_022E66D8.inc b/asm/include/overlay_29_022E66D8.inc new file mode 100644 index 00000000..264700b1 --- /dev/null +++ b/asm/include/overlay_29_022E66D8.inc @@ -0,0 +1,3 @@ +#pragma once +.public GetEffectAnimationField0x19 +.public PlayEffectAnimationEntity diff --git a/asm/include/overlay_29_022E6798.inc b/asm/include/overlay_29_022E6798.inc new file mode 100644 index 00000000..66c3d8bf --- /dev/null +++ b/asm/include/overlay_29_022E6798.inc @@ -0,0 +1,8 @@ +#pragma once +.public AdvanceFrame +.public AnimationDelayOrSomething +.public DUNGEON_PTR +.public GetEffectAnimationField0x19 +.public PlayEffectAnimationEntity +.public ShouldDisplayEntityAdvanced +.public ov29_022EA370 diff --git a/asm/include/overlay_29_022E6928.inc b/asm/include/overlay_29_022E6928.inc new file mode 100644 index 00000000..0ee19b86 --- /dev/null +++ b/asm/include/overlay_29_022E6928.inc @@ -0,0 +1,59 @@ +#pragma once +.public AdvanceFrame +.public AnimationHasMoreFrames +.public CanMonsterSpawn +.public CheckActiveChallengeRequest +.public CheckSpawnThreshold +.public DUNGEON_PTR +.public DungeonFloorToGroupFloor +.public DungeonGetTotalSpriteFileSize +.public DungeonRandInt +.public DungeonRngSetPrimary +.public DungeonRngSetSecondary +.public FloorNumberIsEven +.public GetEffectAnimationField0x19 +.public GetLeader +.public GetMonsterGenderVeneer +.public GetMonsterIdFromSpawnEntry +.public GetMonsterLevelFromSpawnEntry +.public GetNbFloorsPlusOne +.public GetNbPrecedingFloors +.public GetNbRecruited +.public GetSecondFormIfValid +.public GetSpriteFileSize +.public HandleSir0Translation +.public IsBossFight +.public IsCurrentMissionType +.public IsDestinationFloorWithFixedRoom +.public IsDestinationFloorWithMonster +.public IsDojoDungeon +.public IsFullFloorFixedRoom +.public IsInSpawnList +.public IsItemForSpecialSpawnInBag +.public LoadFileFromRom +.public LoadFixedRoom +.public MemAlloc +.public MemFree +.public NeedsItemToSpawn +.public PlayEffectAnimationEntity +.public RandIntSafe +.public SetMonsterId +.public UnloadFile +.public ov10_022BDC68 +.public ov10_022BDE50 +.public ov10_022BEFD8 +.public ov10_022BF274 +.public ov10_022BF2B4 +.public ov10_022BF45C +.public ov10_022BFB6C +.public ov29_02349378 +.public ov29_0235118C +.public ov29_023511A4 +.public ov29_023511B0 +.public ov29_02351464 +.public ov29_02351584 +.public ov29_02351594 +.public ov29_023515B0 +.public ov29_023515CC +.public ov29_0235354C +.public sub_0201CF90 diff --git a/asm/include/overlay_29_022E7EC4.inc b/asm/include/overlay_29_022E7EC4.inc index c9fbf5af..92130689 100644 --- a/asm/include/overlay_29_022E7EC4.inc +++ b/asm/include/overlay_29_022E7EC4.inc @@ -1,27 +1,27 @@ #pragma once -.public CloseTextBox2 -.public CreateTextBox -.public DrawTextInWindow -.public DUNGEON_CONTROLS_MENU_PTR -.public DUNGEON_CONTROLS_MENU_WINDOW_PARAMS .public DUNGEON_FRAMES_PASSED .public DUNGEON_PTR +.public DungeonChangeTopScreenType .public DungeonGetSpriteIndex +.public FreeDungeonControlsMenu +.public FreeTopScreen .public GetIdleAnimationId .public GetPlayerGender .public GetTopScreenOption -.public InitPreprocessorArgs +.public InitDungeonControlsMenu .public IsTeamStatsOnTopScreen .public MemAlloc .public MemFree .public MemZero -.public ov10_022C1DE0 +.public SetMinimapDataE447 +.public SetMinimapDataE448 +.public TOP_SCREEN_STATUS_PTR +.public UpdateMinimap .public ov10_022C1E50 .public ov10_022C1E80 .public ov10_022C21D8 .public ov10_022C2278 .public ov10_022C22A0 -.public ov29_022DC684 .public ov29_022DC694 .public ov29_022DC6D0 .public ov29_022DC6DC @@ -31,29 +31,19 @@ .public ov29_022DC76C .public ov29_022DC778 .public ov29_022DC77C -.public ov29_0230027C +.public ov29_022E8708 +.public ov29_022E8CE8 +.public ov29_022E8F78 +.public ov29_022E8FCC +.public ov29_022E8FF8 +.public ov29_022E9008 +.public ov29_022E9014 .public ov29_02339138 .public ov29_02339D7C .public ov29_0233A0E8 .public ov29_0233A1BC .public ov29_0234B4E0 -.public ov29_0234C70C -.public ov29_0234F25C -.public ov29_0234F278 -.public ov29_0234F290 -.public ov29_0234F2B8 -.public ov29_023515E8 -.public ov29_0235352C -.public SetMinimapDataE447 -.public SetMinimapDataE448 -.public StartFadeDungeonWrapper -.public StringFromId -.public sub_0200B330 -.public sub_0200B3D4 .public sub_02048384 .public sub_020483B8 .public sub_020483D8 .public sub_02048400 -.public TOP_SCREEN_STATUS_PTR -.public UpdateMinimap -.public UpdateWindow diff --git a/asm/include/overlay_29_022E86A4.inc b/asm/include/overlay_29_022E86A4.inc new file mode 100644 index 00000000..63d333f5 --- /dev/null +++ b/asm/include/overlay_29_022E86A4.inc @@ -0,0 +1,51 @@ +#pragma once +.public CloseTextBox2 +.public CreateTextBox +.public DUNGEON_CONTROLS_MENU_PTR +.public DUNGEON_CONTROLS_MENU_WINDOW_PARAMS +.public DUNGEON_PTR +.public DrawTextInWindow +.public FreeDungeonControlsMenuWithBg +.public FreeTeamStatsWrapper +.public GetIdleAnimationId +.public GetTopScreenOption +.public InitDungeonControlsMenuWithBg +.public InitPreprocessorArgs +.public InitializeTeamStats +.public MemAlloc +.public MemFree +.public MemZero +.public StartFadeDungeonWrapper +.public StringFromId +.public TOP_SCREEN_STATUS_PTR +.public UpdateTeamStatsWrapper +.public UpdateWindow +.public ov10_022C1DE0 +.public ov10_022C2278 +.public ov29_022DC684 +.public ov29_022E7F94 +.public ov29_022E8018 +.public ov29_022E8054 +.public ov29_022E80D0 +.public ov29_022E8104 +.public ov29_022E81C8 +.public ov29_022E81F8 +.public ov29_022E840C +.public ov29_022E847C +.public ov29_022E84B0 +.public ov29_022E854C +.public ov29_022E85A8 +.public ov29_022E85F4 +.public ov29_022E8630 +.public ov29_022E8650 +.public ov29_022E869C +.public ov29_0230027C +.public ov29_0234C70C +.public ov29_0234F25C +.public ov29_0234F278 +.public ov29_0234F290 +.public ov29_0234F2B8 +.public ov29_023515E8 +.public ov29_0235352C +.public sub_0200B330 +.public sub_0200B3D4 diff --git a/asm/include/overlay_29_022F52B0.inc b/asm/include/overlay_29_022F52B0.inc index 76e637be..6b0e6b3c 100644 --- a/asm/include/overlay_29_022F52B0.inc +++ b/asm/include/overlay_29_022F52B0.inc @@ -1,42 +1,2 @@ #pragma once -.public ApplyItemEffect -.public CanMonsterUseItem -.public ChangeMonsterAnimation -.public ChangeMonsterAnimationToIdle -.public DecrementStackItem -.public DUNGEON_PTR -.public DungeonRandInt -.public EntityIsValid__022F528C -.public ExclusiveItemEffectFlagTest -.public GetItemCategoryVeneer -.public GetItemToUse -.public GetMessageLogPreprocessorArgs -.public HandleCurvedProjectileThrow -.public HandleRegularProjectileThrow -.public IqSkillIsEnabled -.public ItemIsActive__022F5994 -.public ItemZInit -.public LogItemBlockedByEmbargo -.public LogMessageByIdWithPopupCheckUser -.public MonsterHasEmbargoStatus -.public ov29_022E5728 -.public ov29_022E9A9C -.public ov29_022EA370 -.public ov29_022EB378 -.public ov29_022F3B8C -.public ov29_0230F9A4 .public ov29_02343D30 -.public ov29_02346FB8 -.public ov29_02347000 -.public PlaySeByIdIfShouldDisplayEntity -.public PrepareItemForPrinting__02345728 -.public PrepareItemForPrinting__02345754 -.public RemoveEmptyItemsInBagWrapper -.public RemoveEquivItemNoHole -.public RemoveGroundItem -.public RemoveUsedItem -.public SetPreprocessorArgsStringToName -.public ShouldDisplayEntityWrapper -.public ShouldMonsterRunAwayAndShowEffect -.public SpawnItem -.public TryTriggerMonsterHouse diff --git a/asm/include/overlay_29_022F52CC.inc b/asm/include/overlay_29_022F52CC.inc new file mode 100644 index 00000000..b1f1f16a --- /dev/null +++ b/asm/include/overlay_29_022F52CC.inc @@ -0,0 +1,41 @@ +#pragma once +.public ApplyItemEffect +.public CanMonsterUseItem +.public ChangeMonsterAnimation +.public ChangeMonsterAnimationToIdle +.public DUNGEON_PTR +.public DecrementStackItem +.public DungeonRandInt +.public EntityIsValid__022F528C +.public ExclusiveItemEffectFlagTest +.public GetItemCategoryVeneer +.public GetItemToUse +.public GetMessageLogPreprocessorArgs +.public HandleCurvedProjectileThrow +.public HandleRegularProjectileThrow +.public IqSkillIsEnabled +.public ItemIsActive__022F5994 +.public ItemZInit +.public LogItemBlockedByEmbargo +.public LogMessageByIdWithPopupCheckUser +.public MonsterHasEmbargoStatus +.public PlaySeByIdIfShouldDisplayEntity +.public PrepareItemForPrinting__02345728 +.public PrepareItemForPrinting__02345754 +.public RemoveEmptyItemsInBagWrapper +.public RemoveEquivItemNoHole +.public RemoveGroundItem +.public RemoveUsedItem +.public SetPreprocessorArgsStringToName +.public ShouldDisplayEntityWrapper +.public ShouldMonsterRunAwayAndShowEffect +.public SpawnItem +.public TryTriggerMonsterHouse +.public ov29_022E5728 +.public ov29_022E9A9C +.public ov29_022EA370 +.public ov29_022EB378 +.public ov29_022F3B8C +.public ov29_0230F9A4 +.public ov29_02346FB8 +.public ov29_02347000 diff --git a/asm/include/overlay_29_022FFF4C.inc b/asm/include/overlay_29_022FFF5C.inc similarity index 94% rename from asm/include/overlay_29_022FFF4C.inc rename to asm/include/overlay_29_022FFF5C.inc index 05a105b1..5f23736a 100644 --- a/asm/include/overlay_29_022FFF4C.inc +++ b/asm/include/overlay_29_022FFF5C.inc @@ -1,13 +1,12 @@ #pragma once .public AbilityIsActive -.public CalcSpeedStage -.public EntityIsValid__023000E4 .public EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST +.public EntityIsValid__023000E4 .public ExclusiveItemEffectIsActive__022FFF28 .public GetApparentWeather .public GetExclusiveItemWithEffectFromBag .public LogMessageByIdWithPopupCheckUser -.public ov29_022E655C .public PrepareItemForPrinting__02345728 .public SubstitutePlaceholderStringTags .public UpdateStateFlags +.public ov29_022E655C diff --git a/asm/include/overlay_29_02320788.inc b/asm/include/overlay_29_02320788.inc index 3ccfb2f6..d5c0752d 100644 --- a/asm/include/overlay_29_02320788.inc +++ b/asm/include/overlay_29_02320788.inc @@ -3,22 +3,19 @@ .public AdvanceFrame .public AreTileJumpsAllowed .public CalcDamageFixedNoCategory -.public CanMonsterUseMove .public CannotStandOnTile__02300384 .public CannotStandOnTile__023006C8 .public ChangeMonsterAnimationToIdle -.public DetermineTileWalkableNeighbors -.public DiscoverMinimap .public DUNGEON_FRAMES_PASSED .public DUNGEON_PTR +.public DetermineTileWalkableNeighbors +.public DiscoverMinimap .public EntityIsValid__02320764 -.public EntityIsValid__02321438 .public ExclusiveItemEffectIsActiveWithLogging .public FindClosestUnoccupiedTileWithin2 .public FindUnoccupiedTileWithin3 .public GetApparentWeather .public GetLeader -.public GetMonsterInFront .public GetRandomTile .public GetTileSafe .public InitMove @@ -26,24 +23,8 @@ .public LogMessageByIdWithPopupCheckUserTarget .public MonsterIsType .public MoveMonsterToPos -.public ov29_022E4C84 -.public ov29_022E4CD4 -.public ov29_022E5560 -.public ov29_022E55F0 -.public ov29_022E5650 -.public ov29_022F42F8 -.public ov29_022F62CC -.public ov29_022F9C74 -.public ov29_022FAA04 -.public ov29_02305814 -.public ov29_02322374 -.public ov29_023247B4 -.public ov29_02336694 -.public ov29_023529B8 -.public ov29_02353700 .public RemoveGroundItem .public ShouldDisplayEntityWrapper -.public sub_01FFB62C .public SubstitutePlaceholderStringTags .public TryEndPetrifiedOrSleepStatus .public TryInflictPetrifiedStatus @@ -51,5 +32,16 @@ .public UpdateCamera .public UpdateEntityPixelPos .public UpdateMinimap -.public UpdateMovePp .public UpdateTrapsVisibility +.public ov29_022E5560 +.public ov29_022E55F0 +.public ov29_022E5650 +.public ov29_022F42F8 +.public ov29_022F62CC +.public ov29_022F9C74 +.public ov29_02305814 +.public ov29_02321238 +.public ov29_02336694 +.public ov29_023529B8 +.public ov29_02353700 +.public sub_01FFB62C diff --git a/asm/include/overlay_29_0232124C.inc b/asm/include/overlay_29_0232124C.inc new file mode 100644 index 00000000..9e00281a --- /dev/null +++ b/asm/include/overlay_29_0232124C.inc @@ -0,0 +1,2 @@ +#pragma once +.public ov29_0232119C diff --git a/asm/include/overlay_29_02321288.inc b/asm/include/overlay_29_02321288.inc new file mode 100644 index 00000000..128ed35e --- /dev/null +++ b/asm/include/overlay_29_02321288.inc @@ -0,0 +1,12 @@ +#pragma once +.public CanMonsterUseMove +.public EntityIsValid__02321438 +.public GetMonsterInFront +.public LogMessageByIdWithPopupCheckUserTarget +.public SubstitutePlaceholderStringTags +.public UpdateMovePp +.public ov29_022E4C84 +.public ov29_022E4CD4 +.public ov29_022FAA04 +.public ov29_02322374 +.public ov29_023247B4 diff --git a/asm/include/overlay_29_02325644.inc b/asm/include/overlay_29_02325644.inc index 03228bb3..7cb95afa 100644 --- a/asm/include/overlay_29_02325644.inc +++ b/asm/include/overlay_29_02325644.inc @@ -1,34 +1,17 @@ #pragma once -.public ATK_STAT_IDX .public AdvanceFrame .public AnimationHasMoreFrames -.public CalcStatusDuration -.public DealDamage -.public DungeonRandOutcomeUserTargetInteraction .public EntityIsValid__02325620 .public GetApparentWeather .public GetEffectAnimation .public GetMoveAnimation .public GetTileAtEntity -.public IRON_TAIL_LOWER_DEFENSE_CHANCE .public IsChargingTwoTurnMove .public IsMonsterSleeping .public IsTileGround -.public LowerDefensiveStat -.public MORNING_SUN_HP_RESTORATION_TABLE -.public NIGHTMARE_TURN_RANGE -.public ROLLOUT_DAMAGE_MULT_TABLE -.public ROLLOUT_ICE_BALL_MISSED -.public ROLLOUT_ICE_BALL_SUCCESSIVE_HITS -.public SLEEP_TURN_RANGE .public ShouldDisplayEntityAdvanced -.public TryIncreaseHp -.public TryInflictNightmareStatus -.public TryInflictSleepStatus -.public TryInflictYawningStatus .public UnkMapRelatedFunc .public WaitUntilAlertBoxPauseIsOver -.public YAWN_TURN_RANGE .public ov10_022BED90 .public ov10_022BF160 .public ov10_022BFC5C diff --git a/asm/include/overlay_29_02325DE4.inc b/asm/include/overlay_29_02325DE4.inc new file mode 100644 index 00000000..43b78535 --- /dev/null +++ b/asm/include/overlay_29_02325DE4.inc @@ -0,0 +1,14 @@ +#pragma once +.public ATK_STAT_IDX +.public CalcStatusDuration +.public DealDamage +.public DungeonRandOutcomeUserTargetInteraction +.public IRON_TAIL_LOWER_DEFENSE_CHANCE +.public LowerDefensiveStat +.public ROLLOUT_DAMAGE_MULT_TABLE +.public ROLLOUT_ICE_BALL_MISSED +.public ROLLOUT_ICE_BALL_SUCCESSIVE_HITS +.public SLEEP_TURN_RANGE +.public TryInflictSleepStatus +.public TryInflictYawningStatus +.public YAWN_TURN_RANGE diff --git a/asm/include/overlay_29_02325F74.inc b/asm/include/overlay_29_02325F74.inc new file mode 100644 index 00000000..56a1307f --- /dev/null +++ b/asm/include/overlay_29_02325F74.inc @@ -0,0 +1,4 @@ +#pragma once +.public GetApparentWeather +.public MORNING_SUN_HP_RESTORATION_TABLE +.public TryIncreaseHp diff --git a/asm/include/overlay_29_023268CC.inc b/asm/include/overlay_29_023268CC.inc index 300757db..82e22404 100644 --- a/asm/include/overlay_29_023268CC.inc +++ b/asm/include/overlay_29_023268CC.inc @@ -1,27 +1,4 @@ #pragma once -.public ATK_STAT_IDX -.public AURORA_BEAM_LOWER_ATTACK_CHANCE -.public ApplyOffensiveStatMultiplier -.public BoostOffensiveStat -.public CalcDamageFixedWrapper .public CalcStatusDuration -.public DealDamage -.public DungeonRandOutcomeUserAction -.public DungeonRandOutcomeUserTargetInteraction -.public EndFrozenStatus -.public GetDamageSourceWrapper -.public GetFlashFireStatus -.public GetMoveCategory -.public GetMoveType -.public LogMessageByIdWithPopupCheckUserTarget -.public LowerHitChanceStat -.public OCTAZOOKA_LOWER_ACCURACY_CHANCE .public SMOKESCREEN_TURN_RANGE -.public SPATK_STAT_IDX -.public SubstitutePlaceholderStringTags -.public TryInflictBurnStatus -.public TryInflictConfusedStatus -.public TryInflictMirrorMoveStatus .public TryInflictWhifferStatus -.public ov10_022C4C0C -.public ov10_022C4C0E diff --git a/asm/include/overlay_29_0232692C.inc b/asm/include/overlay_29_0232692C.inc new file mode 100644 index 00000000..bfe7e3b8 --- /dev/null +++ b/asm/include/overlay_29_0232692C.inc @@ -0,0 +1,23 @@ +#pragma once +.public ATK_STAT_IDX +.public AURORA_BEAM_LOWER_ATTACK_CHANCE +.public ApplyOffensiveStatMultiplier +.public BoostOffensiveStat +.public CalcDamageFixedWrapper +.public DealDamage +.public DungeonRandOutcomeUserAction +.public DungeonRandOutcomeUserTargetInteraction +.public EndFrozenStatus +.public GetDamageSourceWrapper +.public GetFlashFireStatus +.public GetMoveCategory +.public GetMoveType +.public LogMessageByIdWithPopupCheckUserTarget +.public LowerHitChanceStat +.public OCTAZOOKA_LOWER_ACCURACY_CHANCE +.public SPATK_STAT_IDX +.public SubstitutePlaceholderStringTags +.public TryInflictBurnStatus +.public TryInflictConfusedStatus +.public ov10_022C4C0C +.public ov10_022C4C0E diff --git a/asm/include/overlay_29_02326CC8.inc b/asm/include/overlay_29_02326CC8.inc index 0f410d13..6e872552 100644 --- a/asm/include/overlay_29_02326CC8.inc +++ b/asm/include/overlay_29_02326CC8.inc @@ -5,4 +5,3 @@ .public FLAMETHROWER_BURN_CHANCE .public FLAME_WHEEL_BURN_CHANCE .public TryInflictBurnStatus -.public TryInflictExposedStatus diff --git a/asm/include/overlay_29_02327940.inc b/asm/include/overlay_29_02327940.inc index 827e0a88..de044242 100644 --- a/asm/include/overlay_29_02327940.inc +++ b/asm/include/overlay_29_02327940.inc @@ -1,22 +1,4 @@ #pragma once -.public ATK_STAT_IDX -.public BeginChargedMove -.public BoostDefensiveStat -.public BoostOffensiveStat -.public CalcStatusDuration .public DealDamage .public DungeonRandOutcomeUserAction -.public DungeonRandOutcomeUserTargetInteraction -.public EndTwoTurnMove -.public IsChargingTwoTurnMove -.public METEOR_MASH_BOOST_ATTACK_CHANCE -.public POWDER_SNOW_FREEZE_CHANCE .public RAPID_SPIN_BINDING_REMOVAL -.public SKY_ATTACK_CRINGE_CHANCE -.public SKY_ATTACK_DAMAGE_MULTIPLIER -.public SPATK_STAT_IDX -.public SURE_SHOT_TURN_RANGE -.public StringFromId -.public TryInflictCringeStatus -.public TryInflictFrozenStatus -.public TryInflictSureShotStatus diff --git a/asm/include/overlay_29_023279E4.inc b/asm/include/overlay_29_023279E4.inc new file mode 100644 index 00000000..21af7959 --- /dev/null +++ b/asm/include/overlay_29_023279E4.inc @@ -0,0 +1,17 @@ +#pragma once +.public ATK_STAT_IDX +.public BeginChargedMove +.public BoostDefensiveStat +.public BoostOffensiveStat +.public DealDamage +.public DungeonRandOutcomeUserTargetInteraction +.public EndTwoTurnMove +.public IsChargingTwoTurnMove +.public METEOR_MASH_BOOST_ATTACK_CHANCE +.public POWDER_SNOW_FREEZE_CHANCE +.public SKY_ATTACK_CRINGE_CHANCE +.public SKY_ATTACK_DAMAGE_MULTIPLIER +.public SPATK_STAT_IDX +.public StringFromId +.public TryInflictCringeStatus +.public TryInflictFrozenStatus diff --git a/asm/include/overlay_29_02329898.inc b/asm/include/overlay_29_02329898.inc index e89387c4..848e20fd 100644 --- a/asm/include/overlay_29_02329898.inc +++ b/asm/include/overlay_29_02329898.inc @@ -1,7 +1,5 @@ #pragma once -.public ATK_STAT_IDX .public AbilityIsActiveVeneer -.public ActivateSportCondition .public AddHeldItemToBag .public BOUNCE_DAMAGE_MULTIPLIER .public BOUNCE_PARALYZE_CHANCE @@ -18,7 +16,6 @@ .public GetMoveTypeForMonster .public IsChargingTwoTurnMove .public LogMessageByIdWithPopupCheckUserTarget -.public LowerHitChanceStat .public POISON_FANG_POISON_CHANCE .public POISON_STING_POISON_CHANCE .public RemoveEmptyItemsInBagWrapper diff --git a/asm/include/overlay_29_02329FE0.inc b/asm/include/overlay_29_02329FE0.inc new file mode 100644 index 00000000..b1c4a52a --- /dev/null +++ b/asm/include/overlay_29_02329FE0.inc @@ -0,0 +1,5 @@ +#pragma once +.public ATK_STAT_IDX +.public DealDamage +.public DungeonRandOutcomeUserTargetInteraction +.public LowerHitChanceStat diff --git a/asm/include/overlay_29_0232A500.inc b/asm/include/overlay_29_0232A524.inc similarity index 100% rename from asm/include/overlay_29_0232A500.inc rename to asm/include/overlay_29_0232A524.inc diff --git a/asm/include/overlay_29_0232CE50.inc b/asm/include/overlay_29_0232CE7C.inc similarity index 57% rename from asm/include/overlay_29_0232CE50.inc rename to asm/include/overlay_29_0232CE7C.inc index 20dc1319..20666bdb 100644 --- a/asm/include/overlay_29_0232CE50.inc +++ b/asm/include/overlay_29_0232CE7C.inc @@ -1,4 +1,2 @@ #pragma once .public LogMessageByIdWithPopupCheckUserTarget -.public ov10_022C456C -.public ov29_02332F18 diff --git a/asm/include/overlay_29_0232DD88.inc b/asm/include/overlay_29_0232DDAC.inc similarity index 100% rename from asm/include/overlay_29_0232DD88.inc rename to asm/include/overlay_29_0232DDAC.inc diff --git a/asm/include/overlay_29_0232E0F8.inc b/asm/include/overlay_29_0232E130.inc similarity index 91% rename from asm/include/overlay_29_0232E0F8.inc rename to asm/include/overlay_29_0232E130.inc index cadecb59..1ef62658 100644 --- a/asm/include/overlay_29_0232E0F8.inc +++ b/asm/include/overlay_29_0232E130.inc @@ -4,7 +4,6 @@ .public DealDamage .public DungeonRandOutcomeUserTargetInteraction .public EndFrozenStatus -.public EndProtectStatus .public EntityIsValidMoveEffects__0232E250 .public FLARE_BLITZ_BURN_CHANCE .public TryInflictBurnStatus diff --git a/asm/include/overlay_29_0232E2B8.inc b/asm/include/overlay_29_0232E2B8.inc index 698f97c9..6404f315 100644 --- a/asm/include/overlay_29_0232E2B8.inc +++ b/asm/include/overlay_29_0232E2B8.inc @@ -3,13 +3,10 @@ .public DungeonRandOutcomeUserTargetInteraction .public EndFrozenStatus .public EndNegativeStatusConditionWrapper -.public EndSleepClassStatus .public FIRE_FANG_CRINGE_CHANCE .public FLARE_BLITZ_BURN_CHANCE .public HEALING_WISH_HP_RESTORATION -.public ResetHitChanceStat .public RestoreAllMovePP .public TryIncreaseHp .public TryInflictBurnStatus .public TryInflictCringeStatus -.public TryInflictMiracleEyeStatus diff --git a/asm/include/overlay_29_0232B8B0.inc b/asm/include/overlay_29_0232E400.inc similarity index 53% rename from asm/include/overlay_29_0232B8B0.inc rename to asm/include/overlay_29_0232E400.inc index 279327cf..4fde3b4c 100644 --- a/asm/include/overlay_29_0232B8B0.inc +++ b/asm/include/overlay_29_0232E400.inc @@ -1,2 +1,3 @@ #pragma once .public DealDamage +.public EndSleepClassStatus diff --git a/asm/include/overlay_29_0232E4A0.inc b/asm/include/overlay_29_0232E4A0.inc index 20181d22..206133a0 100644 --- a/asm/include/overlay_29_0232E4A0.inc +++ b/asm/include/overlay_29_0232E4A0.inc @@ -1,6 +1,5 @@ #pragma once .public AbilityIsActiveVeneer -.public BoostSpeedOneStage .public CalcRecoilDamageFixed .public DealDamage .public DefenderAbilityIsActiveMoveEffects__0232DE20 diff --git a/asm/include/overlay_29_02339138.inc b/asm/include/overlay_29_02339138.inc index 8aa6df47..3ca76dfa 100644 --- a/asm/include/overlay_29_02339138.inc +++ b/asm/include/overlay_29_02339138.inc @@ -1,70 +1,32 @@ #pragma once .public AddSimpleObjToOam -.public CORNER_CARDINAL_NEIGHBOR_IS_OPEN -.public ConvertWallsToChasms -.public DIRECTIONS_XY .public DUNGEON_PTR -.public DungeonRandInt -.public DungeonRandRange -.public FLOOR_GENERATION_STATUS -.public GenerateSecondaryTerrainFormations .public GetBottomScreenOption -.public GetFinalKecleonShopSpawnChance .public GetFloorType -.public GetHiddenStairsType -.public GetKecleonIdToSpawnByFloor .public GetMinimapData -.public GetNextFixedRoomAction .public GetTile -.public GetTileSafe .public GetTopScreenOption .public GetTrapInfo -.public HIDDEN_STAIRS_SPAWN_BLOCKED +.public InitMinimapDisplayTile .public IsBehaviorLoneOutlaw -.public IsCurrentMissionType -.public IsCurrentMissionTypeExact -.public IsCurrentTilesetBackground -.public IsDestinationFloorWithMonster .public IsExperienceLocked -.public IsGoldenChamber -.public IsHiddenStairsFloor .public IsMapShownOnEitherScreen -.public IsOutlawMonsterHouseFloor -.public LoadFixedRoomData -.public MAP_COLOR_TABLE -.public MarkEnemySpawns -.public MarkNonEnemySpawns -.public MarkShopkeeperSpawn .public MemZero .public Memcpy32 .public OBJ_GRAPHICS_CONTROLS_PTR -.public PlaceFixedRoomTile -.public PosIsOutOfBounds -.public ResetHiddenStairsSpawn -.public ResetImportantSpawnPositions -.public ResetInnerBoundaryTileRows -.public SECONDARY_TERRAIN_TYPES .public ShouldMinimapDisplayEntity -.public StairsAlwaysReachable .public TILESET_PROPERTIES -.public _s32_div_f -.public abs .public ov10_022BFD20 .public ov29_022E7F7C .public ov29_022EA408 .public ov29_0233900C -.public ov29_0234217C -.public ov29_02342594 -.public ov29_023427E4 -.public ov29_02343DC4 -.public ov29_02343DD8 +.public ov29_0233A470 +.public ov29_0233A548 .public ov29_02352FCC .public ov29_02352FF4 .public ov29_0235352C .public ov29_0235376C .public ov29_0235377C .public ov29_0237CFB8 -.public sub_0200A174 .public sub_0200B330 .public sub_0200B3FC -.public sub_0200C008 diff --git a/asm/include/overlay_29_0233A248.inc b/asm/include/overlay_29_0233A248.inc new file mode 100644 index 00000000..ec176c21 --- /dev/null +++ b/asm/include/overlay_29_0233A248.inc @@ -0,0 +1,58 @@ +#pragma once +.public ConvertSecondaryTerrainToChasms +.public ConvertWallsToChasms +.public DUNGEON_PTR +.public DungeonRand100 +.public DungeonRandInt +.public DungeonRandRange +.public EnsureImpassableTilesAreWalls +.public FLOOR_GENERATION_STATUS +.public FinalizeJunctions +.public FlagHallwayJunctions +.public GenerateBeetleFloor +.public GenerateCrossFloor +.public GenerateCrossroadsFloor +.public GenerateFixedRoom +.public GenerateLineFloor +.public GenerateOneRoomMonsterHouseFloor +.public GenerateOuterRingFloor +.public GenerateOuterRoomsFloor +.public GenerateSecondaryTerrainFormations +.public GenerateStandardFloor +.public GenerateTwoRoomsWithMonsterHouseFloor +.public GetFinalKecleonShopSpawnChance +.public GetFloorType +.public GetHiddenStairsType +.public GetKecleonIdToSpawnByFloor +.public GetMinimapData +.public GetTile +.public GetTileTerrain +.public IsCurrentMissionType +.public IsCurrentMissionTypeExact +.public IsGoldenChamber +.public IsHiddenStairsFloor +.public IsNotFullFloorFixedRoom +.public IsOutlawMonsterHouseFloor +.public LoadFixedRoomData +.public MAP_COLOR_TABLE +.public MarkEnemySpawns +.public MarkNonEnemySpawns +.public MarkShopkeeperSpawn +.public ResetFloor +.public ResetHiddenStairsSpawn +.public ResetImportantSpawnPositions +.public ResetInnerBoundaryTileRows +.public ResolveInvalidSpawns +.public SECONDARY_TERRAIN_TYPES +.public StairsAlwaysReachable +.public _s32_div_f +.public abs +.public ov29_0233A0E8 +.public ov29_023427E4 +.public ov29_02343DC4 +.public ov29_02343DD8 +.public ov29_0235352C +.public ov29_0235376C +.public ov29_0235377C +.public sub_0200A174 +.public sub_0200C008 diff --git a/asm/include/overlay_29_0233AE84.inc b/asm/include/overlay_29_0233AE84.inc new file mode 100644 index 00000000..7f621056 --- /dev/null +++ b/asm/include/overlay_29_0233AE84.inc @@ -0,0 +1,22 @@ +#pragma once +.public CORNER_CARDINAL_NEIGHBOR_IS_OPEN +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DungeonRandInt +.public DungeonRandRange +.public FLOOR_GENERATION_STATUS +.public GetFloorType +.public GetNextFixedRoomAction +.public GetTile +.public GetTileSafe +.public HIDDEN_STAIRS_SPAWN_BLOCKED +.public IsCurrentTilesetBackground +.public IsDestinationFloorWithMonster +.public IsOutlawMonsterHouseFloor +.public PlaceFixedRoomTile +.public PosIsOutOfBounds +.public ResetHiddenStairsSpawn +.public _s32_div_f +.public abs +.public ov29_0234217C +.public ov29_02342594 diff --git a/asm/include/overlay_29_02344B1C.inc b/asm/include/overlay_29_02344B1C.inc index d94c727c..51f7144c 100644 --- a/asm/include/overlay_29_02344B1C.inc +++ b/asm/include/overlay_29_02344B1C.inc @@ -1,51 +1,7 @@ #pragma once -.public _s32_div_f -.public AddItemToBagNoHeld -.public AddMoneyCarried -.public AdvanceFrame -.public DisplayItemTip -.public DUNGEON_PTR -.public DungeonRand16Bit -.public DungeonRandInt -.public DungeonRandRange -.public DungeonRngSetPrimary -.public DungeonRngSetSecondary -.public EntityIsValid__02345698 .public GenerateItem -.public GetActualBuyPrice -.public GetActualSellPrice -.public GetCurrentBagCapacity -.public GetItemAtIdx -.public GetItemCategoryVeneer -.public GetItemIdToSpawn -.public GetItemInfo -.public GetItemToRetrieve -.public GetLeader -.public GetMoneyQuantity -.public GetTile -.public GetTileSafe -.public IqSkillIsEnabled -.public IsDestinationFloorWithItem -.public IsShoppableItem -.public LogMessageByIdWithPopupCheckUser -.public MemAlloc -.public MemFree -.public ov29_022FB920 -.public ov29_02347040 -.public ov29_02348D3C -.public ov29_02348DD8 -.public ov29_02348ECC -.public ov29_023531A0 +.public SetPreprocessorArgsIdVal +.public SubstitutePlaceholderItemTags .public ov29_023531A4 .public ov29_023531BC -.public ov29_023531CC .public ov29_023537B0 -.public PlaySeByIdIfNotSilence -.public RemoveEmptyItemsInBag -.public RemoveEquivItemNoHole -.public RemoveGroundItem -.public SetPreprocessorArgsIdVal -.public ShouldMonsterRunAwayAndShowEffect -.public SpawnItemEntity -.public SubstitutePlaceholderItemTags -.public SubstitutePlaceholderStringTags diff --git a/asm/include/overlay_29_02344BF8.inc b/asm/include/overlay_29_02344BF8.inc new file mode 100644 index 00000000..f1197714 --- /dev/null +++ b/asm/include/overlay_29_02344BF8.inc @@ -0,0 +1,50 @@ +#pragma once +.public AddItemToBagNoHeld +.public AddMoneyCarried +.public AdvanceFrame +.public DUNGEON_PTR +.public DisplayItemTip +.public DungeonRand16Bit +.public DungeonRandInt +.public DungeonRandRange +.public DungeonRngSetPrimary +.public DungeonRngSetSecondary +.public EntityIsValid__02345698 +.public GenerateItem +.public GetActualBuyPrice +.public GetActualSellPrice +.public GetCurrentBagCapacity +.public GetItemAtIdx +.public GetItemCategoryVeneer +.public GetItemIdToSpawn +.public GetItemInfo +.public GetItemToRetrieve +.public GetLeader +.public GetMoneyQuantity +.public GetTile +.public GetTileSafe +.public IqSkillIsEnabled +.public IsDestinationFloorWithItem +.public IsShoppableItem +.public LogMessageByIdWithPopupCheckUser +.public MemAlloc +.public MemFree +.public PlaySeByIdIfNotSilence +.public RemoveEmptyItemsInBag +.public RemoveEquivItemNoHole +.public RemoveGroundItem +.public SetPreprocessorArgsIdVal +.public ShouldMonsterRunAwayAndShowEffect +.public SpawnItemEntity +.public SubstitutePlaceholderItemTags +.public SubstitutePlaceholderStringTags +.public _s32_div_f +.public ov29_022FB920 +.public ov29_02347040 +.public ov29_02348D3C +.public ov29_02348DD8 +.public ov29_02348ECC +.public ov29_023531A0 +.public ov29_023531BC +.public ov29_023531CC +.public ov29_023537B0 diff --git a/asm/overlay_29_022DC65C.s b/asm/overlay_29_022DC65C.s index eeb1df16..7a77b702 100644 --- a/asm/overlay_29_022DC65C.s +++ b/asm/overlay_29_022DC65C.s @@ -22,2735 +22,3 @@ ov29_022DC670: ; 0x022DC670 _022DC67C: .word ov29_022DC33C _022DC680: .word ov29_023538B4 arm_func_end ov29_022DC670 - - arm_func_start ov29_022DC684 -ov29_022DC684: ; 0x022DC684 - ldr ip, _022DC690 ; =ov10_022C0998 - mov r1, #1 - bx ip - .align 2, 0 -_022DC690: .word ov10_022C0998 - arm_func_end ov29_022DC684 - - arm_func_start ov29_022DC694 -ov29_022DC694: ; 0x022DC694 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x14 - mov r5, r0 - add r0, sp, #0 - mov r4, r1 - bl ov10_022C22A0 - add r0, sp, #0 - mov r1, r4 - bl ov10_022C0814 - mov r0, r5 - mov r1, #0 - mov r2, #1 - bl DrawTeamStats - add sp, sp, #0x14 - ldmia sp!, {r4, r5, pc} - arm_func_end ov29_022DC694 - - arm_func_start ov29_022DC6D0 -ov29_022DC6D0: ; 0x022DC6D0 - ldr ip, _022DC6D8 ; =UpdateTeamStats - bx ip - .align 2, 0 -_022DC6D8: .word UpdateTeamStats - arm_func_end ov29_022DC6D0 - - arm_func_start ov29_022DC6DC -ov29_022DC6DC: ; 0x022DC6DC - ldr ip, _022DC6E4 ; =ov10_022C11D8 - bx ip - .align 2, 0 -_022DC6E4: .word ov10_022C11D8 - arm_func_end ov29_022DC6DC - - arm_func_start ov29_022DC6E8 -ov29_022DC6E8: ; 0x022DC6E8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x18 - ldrb r4, [sp, #0x20] - ldrsh ip, [sp, #0x24] - ldrsh lr, [sp, #0x28] - stmia sp, {r4, ip} - str lr, [sp, #8] - ldrsh ip, [sp, #0x2c] - ldrsh lr, [sp, #0x30] - str ip, [sp, #0xc] - ldrb ip, [sp, #0x34] - str lr, [sp, #0x10] - str ip, [sp, #0x14] - bl ov10_022C0F6C - add sp, sp, #0x18 - ldmia sp!, {r4, pc} - arm_func_end ov29_022DC6E8 - - arm_func_start ov29_022DC728 -ov29_022DC728: ; 0x022DC728 - stmdb sp!, {r3, lr} - bl FreeTeamStats - bl ov10_022C096C - ldmia sp!, {r3, pc} - arm_func_end ov29_022DC728 - - arm_func_start ov29_022DC738 -ov29_022DC738: ; 0x022DC738 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x14 - mov r5, r0 - add r0, sp, #0 - mov r4, r1 - bl ov10_022C22A0 - add r0, sp, #0 - mov r1, r4 - bl ov10_022C0814 - mov r0, r5 - bl ov10_022C14D0 - add sp, sp, #0x14 - ldmia sp!, {r4, r5, pc} - arm_func_end ov29_022DC738 - - arm_func_start ov29_022DC76C -ov29_022DC76C: ; 0x022DC76C - ldr ip, _022DC774 ; =ov10_022C159C - bx ip - .align 2, 0 -_022DC774: .word ov10_022C159C - arm_func_end ov29_022DC76C - - arm_func_start ov29_022DC778 -ov29_022DC778: ; 0x022DC778 - bx lr - arm_func_end ov29_022DC778 - - arm_func_start ov29_022DC77C -ov29_022DC77C: ; 0x022DC77C - stmdb sp!, {r3, lr} - bl FreeMapAndTeam - bl ov10_022C096C - ldmia sp!, {r3, pc} - arm_func_end ov29_022DC77C - - arm_func_start ov29_022DC78C -ov29_022DC78C: ; 0x022DC78C - stmdb sp!, {r4, lr} - ldr r1, _022DC7E0 ; =ov29_02353518 - mov lr, #0 - ldr r4, [r1] - mov r1, #0x50 - b _022DC7D0 -_022DC7A4: - mul ip, lr, r1 - add r3, r4, ip - ldrb r2, [r3, #4] - cmp r2, #0 - beq _022DC7CC - ldr r2, [r3, #8] - cmp r0, r2 - addeq r0, r4, #4 - addeq r0, r0, ip - ldmeqia sp!, {r4, pc} -_022DC7CC: - add lr, lr, #1 -_022DC7D0: - cmp lr, #0x16 - blt _022DC7A4 - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_022DC7E0: .word ov29_02353518 - arm_func_end ov29_022DC78C - -; https://decomp.me/scratch/qiwjF - arm_func_start ov29_022DC7E4 -ov29_022DC7E4: ; 0x022DC7E4 - stmdb sp!, {r3, lr} - mov lr, #0 - mov r3, lr - mov r2, lr - b _022DC80C -_022DC7F8: - mov r0, r0, lsr #1 - mov ip, r1, lsr #1 - orr r0, r0, r1, lsl #31 - mov r1, ip - add lr, lr, #1 -_022DC80C: - cmp r1, r3 - cmpeq r0, r2 - bne _022DC7F8 - mov r0, lr - ldmia sp!, {r3, pc} - arm_func_end ov29_022DC7E4 - - arm_func_start ov29_022DC820 -ov29_022DC820: ; 0x022DC820 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x3c - mov r8, r1 - mov r1, #0xc - mul r1, r8, r1 - mov sb, r0 - ldr r0, [sb, #0x10] - add r4, sb, #0x2c - ldr r3, [sb, #0xc] - cmp r0, #0 - add r4, r4, r1 - mov r5, #0 - cmpeq r3, #0 - streq r5, [r4] - str r2, [sp, #0xc] - streq r5, [r4, #4] - beq _022DD084 - ldr r0, [r4, #4] - ldr r2, [r4] - cmp r0, r5 - cmpeq r2, r5 - streq r5, [r4, #8] - ldr r0, [r4, #8] - moveq r5, #1 - cmp r0, #0 - bgt _022DC99C - add r0, sb, #0x2c - cmp r8, #0 - add r0, r0, r1 - moveq r1, #1 - streq r1, [sp, #0x10] - moveq r1, #0 - streq r1, [sp, #0x14] - movne r1, #0 - strne r1, [sp, #0x10] - movne r1, #1 - strne r1, [sp, #0x14] - cmp r8, #0 - ldr r1, [sb, #0x10] - moveq sl, #0x80000000 - str r1, [sp, #0x1c] - ldr r1, [sb, #0xc] - moveq lr, #0 - str r1, [sp, #0x18] - ldr r1, [sp, #0x1c] - movne sl, #0 - movne lr, #1 - cmp r8, #0 - moveq ip, #0x20 - movne ip, #1 - cmp r1, #0 - ldr r1, [sp, #0x18] - cmpeq r1, #0 - mov r1, #0 - moveq r7, r1 - moveq r6, r1 - beq _022DC978 - ldr r6, [r0, #4] - ldr r7, [r0] - cmp r6, r1 - cmpeq r7, r1 - mov r3, #0 - ldreq r7, [sp, #0x10] - ldreq r6, [sp, #0x14] - mov r1, r3 - b _022DC968 -_022DC928: - mov r6, r6, lsl #1 - orr r6, r6, r7, lsr #31 - mov r7, r7, lsl #1 - cmp r6, lr - cmpeq r7, sl - ldrhi r6, [sp, #0x14] - ldr r0, [sp, #0x1c] - ldrhi r7, [sp, #0x10] - and r2, r0, r6 - mov r0, #0 - cmp r2, r0 - ldr r0, [sp, #0x18] - and r0, r0, r7 - cmpeq r0, r1 - bne _022DC978 - add r3, r3, #1 -_022DC968: - cmp r3, ip - blt _022DC928 - mov r7, #0 - mov r6, r7 -_022DC978: - ldr r0, [r4, #4] - ldr r1, [r4] - cmp r0, r6 - cmpeq r1, r7 - strne r7, [r4] - strne r6, [r4, #4] - mov r0, #0x3c - str r0, [r4, #8] - b _022DC9A4 -_022DC99C: - sub r0, r0, #1 - str r0, [r4, #8] -_022DC9A4: - ldrb r0, [sb, #0x14] - cmp r0, #0 - beq _022DCA0C - ldmia r4, {r0, r1} - cmp r1, #0 - cmpeq r0, #0 - beq _022DCA0C - bl ov29_022DC7E4 - ldr r1, _022DD08C ; =ov29_02353518 - mov r0, r0, lsl #0x10 - ldr r2, [r1] - mov r1, r0, asr #0x10 - ldrb r0, [r2, #0x6e8] - cmp r0, #0 - beq _022DCA0C - ldr r0, [sp, #0xc] - add r2, sb, #0x16 - str r0, [sp] - ldrb r3, [sb, #0x15] - add r0, sb, #0x1a - str r3, [sp, #4] - ldr r6, [sb, #4] - add r3, r0, r8, lsl #2 - str r6, [sp, #8] - ldrsh r0, [sb, #8] - bl ov29_022DD0A4 -_022DCA0C: - ldrb r0, [sb, #0x44] - cmp r0, #0 - beq _022DD084 - ldmia r4, {r0, r1} - cmp r1, #0 - cmpeq r0, #0 - mov r6, #0 - beq _022DD084 - bl ov29_022DC7E4 - mov r0, r0, lsl #0x10 - cmp r5, #0 - mov r7, r0, asr #0x10 - movne r6, #1 - bne _022DCB24 - ldr r0, _022DD090 ; =ov29_02350F8C - ldr r0, [r0, r7, lsl #3] - cmp r0, #0x10 - addls pc, pc, r0, lsl #2 - b _022DCB24 -_022DCA58: ; jump table - b _022DCB24 ; case 0 - b _022DCA9C ; case 1 - b _022DCA9C ; case 2 - b _022DCA9C ; case 3 - b _022DCA9C ; case 4 - b _022DCABC ; case 5 - b _022DCABC ; case 6 - b _022DCABC ; case 7 - b _022DCABC ; case 8 - b _022DCAE0 ; case 9 - b _022DCAE0 ; case 10 - b _022DCAE0 ; case 11 - b _022DCAE0 ; case 12 - b _022DCB04 ; case 13 - b _022DCB04 ; case 14 - b _022DCB04 ; case 15 - b _022DCB04 ; case 16 -_022DCA9C: - ldr r0, _022DD08C ; =ov29_02353518 - ldr r0, [r0] - ldr r0, [r0] - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #30 - adds r0, r1, r0, ror #30 - moveq r6, #1 - b _022DCB24 -_022DCABC: - ldr r0, _022DD08C ; =ov29_02353518 - ldr r0, [r0] - ldr r0, [r0] - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #30 - add r0, r1, r0, ror #30 - cmp r0, #1 - moveq r6, #1 - b _022DCB24 -_022DCAE0: - ldr r0, _022DD08C ; =ov29_02353518 - ldr r0, [r0] - ldr r0, [r0] - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #30 - add r0, r1, r0, ror #30 - cmp r0, #2 - moveq r6, #1 - b _022DCB24 -_022DCB04: - ldr r0, _022DD08C ; =ov29_02353518 - ldr r0, [r0] - ldr r0, [r0] - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #30 - add r0, r1, r0, ror #30 - cmp r0, #3 - moveq r6, #1 -_022DCB24: - cmp r6, #0 - beq _022DCC3C - ldmia r4, {r0, r1} - bl ov29_022DC7E4 - ldr r2, _022DD090 ; =ov29_02350F8C - ldr r1, _022DD08C ; =ov29_02353518 - ldr r2, [r2, r7, lsl #3] - ldr r3, [r1] - mov r1, #0xc - ldr r5, [r3, #0x6f4] - mul r6, r2, r1 - ldr sl, [r5, #4] - ldr r1, _022DD094 ; =ov29_02350F90 - add r4, sl, r6 - ldr r0, [r1, r0, lsl #3] - ldr r3, [r3] - ldrb sl, [sl, r6] - ldrb r6, [r4, #1] - mov r2, r3, asr #1 - add r2, r3, r2, lsr #30 - smulbb r6, sl, r6 - mov r0, r0, lsl #0x10 - str r0, [sp, #0x20] - ldrsh r1, [r4, #8] - ldrh sl, [sb, #0x4a] - mov r3, r8, lsl #0x10 - mov fp, r6, lsl #5 - mov r0, r2, asr #2 - mov r6, r3, lsr #0x10 - bl _s32_div_f - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - ldr r2, [r4, #4] - ldr r0, _022DD098 ; =OBJ_GRAPHICS_CONTROLS_PTR - mla r1, fp, r1, r2 - mov r2, sl, lsl #0x11 - mov r2, r2, asr #0xe - add r2, r2, #0x50 - ldr r0, [r0] - ldr r4, [r5, #0xc] - add r2, r2, r6, lsl #2 - mov r2, r2, lsl #0x10 - mov r3, fp - add r0, r0, #0x70 - add r1, r4, r1 - mov r2, r2, asr #0x10 - bl ChangeSimpleObjTexture - add r0, r6, sl, lsl #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - add r0, r0, #4 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r2, [r5, #0x14] - ldr r1, [sp, #0x20] - add r0, sp, #0x2c - add r1, r2, r1, lsr #10 - mov r2, #0 - mov r3, #0x10 - bl FillPaletteInitInfo - ldr r0, _022DD098 ; =OBJ_GRAPHICS_CONTROLS_PTR - ldrh r2, [sp, #0x34] - ldr r0, [r0] - add r1, sp, #0x2c - add r0, r0, #0x70 - bl LoadObjPalette -_022DCC3C: - ldr r6, _022DD08C ; =ov29_02353518 - ldr r2, _022DD090 ; =ov29_02350F8C - ldr r1, [r6] - ldr r3, [r2, r7, lsl #3] - ldr r1, [r1, #0x6f4] - ldrh r4, [r6, #0xc] - ldrsh r0, [sb, #0x4a] - add r2, r2, r7, lsl #3 - ldr r2, [r2, #4] - ldr r1, [r1, #4] - bic r4, r4, #0x100 - strh r4, [r6, #0xc] - ldrh r4, [r6, #0xc] - mov fp, r0, lsl #1 - mov sl, #0xc - bic r4, r4, #0x200 - strh r4, [r6, #0xc] - ldrh r4, [r6, #0xc] - mov r0, r0, lsl #3 - mla r1, r3, sl, r1 - bic r4, r4, #0xc00 - strh r4, [r6, #0xc] - ldrh r5, [r6, #0xc] - add fp, fp, #4 - str r2, [sp, #0x28] - bic r5, r5, #0x1000 - strh r5, [r6, #0xc] - ldrh sl, [r6, #0xc] - mov r5, r8, lsl #0x10 - add r5, fp, r5, asr #16 - bic sl, sl, #0x2000 - strh sl, [r6, #0xc] - ldrh sl, [r6, #0x10] - mov fp, r5, lsl #0x10 - add r0, r0, #0x50 - bic r5, sl, #0xc00 - strh r5, [r6, #0x10] - ldrh sl, [r6, #0x12] - mov r4, #0 - add r8, r0, r8, lsl #2 - bic sl, sl, #1 - strh sl, [r6, #0x12] - ldrh sl, [r6, #0x12] - mov r5, r4 - str r3, [sp, #0x24] - bic r2, sl, #2 - strh r2, [r6, #0x12] - ldrh r2, [r6, #0xe] - cmp r3, #0x10 - mov r0, fp, asr #0x10 - bic r2, r2, #0x3e00 - strh r2, [r6, #0xe] - addls pc, pc, r3, lsl #2 - b _022DCFAC -_022DCD14: ; jump table - b _022DCFAC ; case 0 - b _022DCD58 ; case 1 - b _022DCE14 ; case 2 - b _022DCE14 ; case 3 - b _022DCF50 ; case 4 - b _022DCEE0 ; case 5 - b _022DCE14 ; case 6 - b _022DCE14 ; case 7 - b _022DCDB0 ; case 8 - b _022DCE14 ; case 9 - b _022DCE14 ; case 10 - b _022DCE14 ; case 11 - b _022DCD58 ; case 12 - b _022DCE14 ; case 13 - b _022DCD58 ; case 14 - b _022DCE14 ; case 15 - b _022DCE78 ; case 16 -_022DCD58: - ldrh r2, [r6, #0xc] - bic r2, r2, #0xc000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xe] - bic r2, r2, #0xc000 - strh r2, [r6, #0xe] - ldrb r2, [r1, #1] - ldrb r4, [r1] - ldrsh r3, [sb, #0x24] - mov r1, r2, lsl #3 - mov r4, r4, lsl #3 - add r1, r1, r1, lsr #31 - sub r1, r3, r1, asr #1 - sub r1, r1, #0x10 - mov r2, r1, lsl #0x10 - ldrsh r3, [sb, #0x22] - add r1, r4, r4, lsr #31 - mov r4, r2, asr #0x10 - sub r1, r3, r1, asr #1 - mov r1, r1, lsl #0x10 - mov r5, r1, asr #0x10 - b _022DCFAC -_022DCDB0: - ldrh r2, [r6, #0xc] - bic r2, r2, #0xc000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xc] - orr r2, r2, #0x8000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xe] - bic r2, r2, #0xc000 - strh r2, [r6, #0xe] - ldrb r2, [r1, #1] - ldrb r4, [r1] - ldrsh r3, [sb, #0x24] - mov r1, r2, lsl #3 - mov r4, r4, lsl #3 - add r1, r1, r1, lsr #31 - sub r1, r3, r1, asr #1 - sub r1, r1, #0x10 - mov r2, r1, lsl #0x10 - ldrsh r3, [sb, #0x22] - add r1, r4, r4, lsr #31 - mov r4, r2, asr #0x10 - sub r1, r3, r1, asr #1 - mov r1, r1, lsl #0x10 - mov r5, r1, asr #0x10 - b _022DCFAC -_022DCE14: - ldrh r2, [r6, #0xc] - bic r2, r2, #0xc000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xe] - bic r2, r2, #0xc000 - strh r2, [r6, #0xe] - ldrh r2, [r6, #0xe] - orr r2, r2, #0x4000 - strh r2, [r6, #0xe] - ldrb r2, [r1, #1] - ldrb r4, [r1] - ldrsh r3, [sb, #0x24] - mov r1, r2, lsl #3 - mov r4, r4, lsl #3 - add r1, r1, r1, lsr #31 - sub r1, r3, r1, asr #1 - sub r1, r1, #0x10 - mov r2, r1, lsl #0x10 - ldrsh r3, [sb, #0x22] - add r1, r4, r4, lsr #31 - mov r4, r2, asr #0x10 - sub r1, r3, r1, asr #1 - mov r1, r1, lsl #0x10 - mov r5, r1, asr #0x10 - b _022DCFAC -_022DCE78: - ldrh r2, [r6, #0xc] - bic r2, r2, #0xc000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xe] - bic r2, r2, #0xc000 - strh r2, [r6, #0xe] - ldrh r2, [r6, #0xe] - orr r2, r2, #0x4000 - strh r2, [r6, #0xe] - ldrb r2, [r1] - ldrb r1, [r1, #1] - ldrsh r4, [sb, #0x22] - mov r3, r2, lsl #3 - mov r2, r1, lsl #3 - add r1, r3, r3, lsr #31 - sub r1, r4, r1, asr #1 - add r1, r1, #8 - mov r1, r1, lsl #0x10 - ldrsh r3, [sb, #0x24] - add r2, r2, r2, lsr #31 - mov r5, r1, asr #0x10 - sub r1, r3, r2, asr #1 - sub r1, r1, #0x10 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 - b _022DCFAC -_022DCEE0: - ldrh r2, [r6, #0xc] - bic r2, r2, #0xc000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xc] - orr r2, r2, #0x4000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xe] - bic r2, r2, #0xc000 - strh r2, [r6, #0xe] - ldrh r2, [r6, #0xe] - orr r2, r2, #0x8000 - strh r2, [r6, #0xe] - ldrb r2, [r1, #1] - ldrb r4, [r1] - ldrsh r3, [sb, #0x24] - mov r1, r2, lsl #3 - mov r4, r4, lsl #3 - add r1, r1, r1, lsr #31 - sub r1, r3, r1, asr #1 - sub r1, r1, #0x10 - mov r2, r1, lsl #0x10 - ldrsh r3, [sb, #0x22] - add r1, r4, r4, lsr #31 - mov r4, r2, asr #0x10 - sub r1, r3, r1, asr #1 - mov r1, r1, lsl #0x10 - mov r5, r1, asr #0x10 - b _022DCFAC -_022DCF50: - ldrh r2, [r6, #0xc] - bic r2, r2, #0xc000 - strh r2, [r6, #0xc] - ldrh r2, [r6, #0xe] - bic r2, r2, #0xc000 - strh r2, [r6, #0xe] - ldrh r2, [r6, #0xe] - orr r2, r2, #0x8000 - strh r2, [r6, #0xe] - ldrb r2, [r1] - ldrb r1, [r1, #1] - ldrsh r4, [sb, #0x26] - mov r3, r2, lsl #3 - mov r2, r1, lsl #3 - add r1, r3, r3, lsr #31 - sub r1, r4, r1, asr #1 - mov r1, r1, lsl #0x10 - ldrsh r3, [sb, #0x28] - add r2, r2, r2, lsr #31 - mov r5, r1, asr #0x10 - sub r1, r3, r2, asr #1 - mov r1, r1, lsl #0x10 - mov r4, r1, asr #0x10 -_022DCFAC: - ldr r3, _022DD08C ; =ov29_02353518 - mov r1, #0x400 - ldrh r6, [r3, #0x10] - rsb r1, r1, #0 - and r2, r8, r1, lsr #22 - and r6, r6, r1 - strh r6, [r3, #0x10] - ldrh r8, [r3, #0x10] - mov r6, r0, lsl #0x1c - cmp r7, #0x20 - orr r2, r8, r2 - strh r2, [r3, #0x10] - ldrh r8, [r3, #0x10] - add r0, r1, #0x200 - ldr r2, _022DD09C ; =0xFFFF000F - bic r7, r8, #0xf000 - strh r7, [r3, #0x10] - ldrh r7, [r3, #0x10] - orr r6, r7, r6, lsr #16 - strh r6, [r3, #0x10] - ldrh r6, [r3, #0xe] - ldrsh r7, [sb, #0x46] - and r0, r6, r0 - strh r0, [r3, #0xe] - add r0, r7, r5 - ldrh r6, [r3, #0xe] - and r0, r0, r1, lsr #23 - orr r0, r6, r0 - strh r0, [r3, #0xe] - ldrh r0, [r3, #0x12] - ldrsh r5, [sb, #0x48] - and r0, r0, r2 - strh r0, [r3, #0x12] - add r0, r5, r4 - ldrh r1, [r3, #0x12] - mov r0, r0, lsl #0x14 - orr r0, r1, r0, lsr #16 - strh r0, [r3, #0x12] - ldrneh r0, [r3, #6] - bicne r0, r0, #0x3e00 - strneh r0, [r3, #6] - bne _022DD06C - ldrh r0, [r3, #0xe] - bic r0, r0, #0x3e00 - strh r0, [r3, #0xe] - ldrh r0, [r3, #0xe] - orr r0, r0, #0x2000 - strh r0, [r3, #0xe] -_022DD06C: - ldr r0, _022DD098 ; =OBJ_GRAPHICS_CONTROLS_PTR - ldr r1, _022DD0A0 ; =ov29_02353524 - ldr r0, [r0] - mov r2, #1 - add r0, r0, #0x70 - bl AddSimpleObjToOam -_022DD084: - add sp, sp, #0x3c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022DD08C: .word ov29_02353518 -_022DD090: .word ov29_02350F8C -_022DD094: .word ov29_02350F90 -_022DD098: .word OBJ_GRAPHICS_CONTROLS_PTR -_022DD09C: .word 0xFFFF000F -_022DD0A0: .word ov29_02353524 - arm_func_end ov29_022DC820 - - arm_func_start ov29_022DD0A4 -ov29_022DD0A4: ; 0x022DD0A4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - ldr sb, _022DD500 ; =ov29_02350F8C - ldr r6, _022DD504 ; =ov29_02353518 - ldr r0, [sb, r1, lsl #3] - mov lr, #0xc - ldr r4, [r6] - mul r7, r0, lr - ldr r5, [r4, #0x6f4] - ldrh r4, [r6, #8] - ldr r8, [r5, #4] - add r5, sb, r1, lsl #3 - add sb, r8, r7 - ldr sl, [r5, #4] - ldrsh fp, [sb, #0xa] - bic r4, r4, #0xc00 - ldr ip, [sp, #0x30] - strh r4, [r6, #8] - ldr r4, [sp, #0x34] - ldrh r5, [r6, #8] - mov r4, r4, lsl #0x1e - str r0, [sp] - orr r4, r5, r4, lsr #20 - strh r4, [r6, #8] - ldrb r5, [r8, r7] - ldrb r4, [sb, #1] - ldrsh sb, [r2] - mov r7, r5, lsl #3 - mov r5, r4, lsl #3 - add r4, r7, r7, lsr #31 - sub sb, sb, r4, asr #1 - ldrsh r8, [ip] - ldrsh r7, [r2, #2] - add r5, r5, r5, lsr #31 - sub r8, sb, r8 - ldrsh sb, [r3] - sub r5, r7, r5, asr #1 - ldrsh r4, [ip, #2] - ldrsh r3, [r3, #2] - str sl, [sp, #4] - sub r4, r5, r4 - add r4, r3, r4 - add r5, sb, r8 - sub r3, lr, #0x2c - cmp r5, r3 - subge r8, lr, #0x2c - add r7, fp, #0x190 - sub r3, r4, #0x10 - cmpge r4, r8 - blt _022DD4F8 - cmp r5, #0xff - cmplt r4, #0xc0 - bge _022DD4F8 - ldrh r8, [r6, #4] - cmp r0, #0x10 - bic r8, r8, #0x2000 - strh r8, [r6, #4] - ldrh r8, [r6, #4] - orr r8, r8, #0x2000 - strh r8, [r6, #4] - addls pc, pc, r0, lsl #2 - b _022DD468 -_022DD19C: ; jump table - b _022DD468 ; case 0 - b _022DD1E0 ; case 1 - b _022DD2AC ; case 2 - b _022DD2AC ; case 3 - b _022DD400 ; case 4 - b _022DD388 ; case 5 - b _022DD2AC ; case 6 - b _022DD2AC ; case 7 - b _022DD240 ; case 8 - b _022DD2AC ; case 9 - b _022DD2AC ; case 10 - b _022DD2AC ; case 11 - b _022DD1E0 ; case 12 - b _022DD2AC ; case 13 - b _022DD1E0 ; case 14 - b _022DD2AC ; case 15 - b _022DD318 ; case 16 -_022DD1E0: - ldrh r8, [r6, #4] - ldr r4, _022DD508 ; =0x000001FF - sub r0, lr, #0x20c - bic r8, r8, #0xc000 - strh r8, [r6, #4] - ldrh r8, [r6, #6] - and r5, r5, r4 - ldr r4, _022DD50C ; =0xFFFF000F - bic r8, r8, #0xc000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - mov r3, r3, lsl #0x14 - and r0, r8, r0 - strh r0, [r6, #6] - ldrh r0, [r6, #6] - orr r0, r0, r5 - strh r0, [r6, #6] - ldrh r0, [r6, #0xa] - and r0, r0, r4 - strh r0, [r6, #0xa] - ldrh r0, [r6, #0xa] - orr r0, r0, r3, lsr #16 - strh r0, [r6, #0xa] - b _022DD468 -_022DD240: - ldrh r8, [r6, #4] - ldr r4, _022DD508 ; =0x000001FF - sub r0, lr, #0x20c - bic r8, r8, #0xc000 - strh r8, [r6, #4] - ldrh r8, [r6, #4] - and r5, r5, r4 - ldr r4, _022DD50C ; =0xFFFF000F - orr r8, r8, #0x8000 - strh r8, [r6, #4] - ldrh r8, [r6, #6] - mov r3, r3, lsl #0x14 - bic r8, r8, #0xc000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - and r0, r8, r0 - strh r0, [r6, #6] - ldrh r0, [r6, #6] - orr r0, r0, r5 - strh r0, [r6, #6] - ldrh r0, [r6, #0xa] - and r0, r0, r4 - strh r0, [r6, #0xa] - ldrh r0, [r6, #0xa] - orr r0, r0, r3, lsr #16 - strh r0, [r6, #0xa] - b _022DD468 -_022DD2AC: - ldrh r8, [r6, #4] - ldr r4, _022DD508 ; =0x000001FF - sub r0, lr, #0x20c - bic r8, r8, #0xc000 - strh r8, [r6, #4] - ldrh r8, [r6, #6] - and r5, r5, r4 - ldr r4, _022DD50C ; =0xFFFF000F - bic r8, r8, #0xc000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - mov r3, r3, lsl #0x14 - orr r8, r8, #0x4000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - and r0, r8, r0 - strh r0, [r6, #6] - ldrh r0, [r6, #6] - orr r0, r0, r5 - strh r0, [r6, #6] - ldrh r0, [r6, #0xa] - and r0, r0, r4 - strh r0, [r6, #0xa] - ldrh r0, [r6, #0xa] - orr r0, r0, r3, lsr #16 - strh r0, [r6, #0xa] - b _022DD468 -_022DD318: - ldrh r8, [r6, #4] - sub r0, lr, #0x20c - ldr r4, _022DD508 ; =0x000001FF - bic r8, r8, #0xc000 - strh r8, [r6, #4] - ldrh r8, [r6, #6] - add r5, r5, #8 - and r5, r5, r4 - bic r4, r8, #0xc000 - strh r4, [r6, #6] - ldrh r8, [r6, #6] - ldr r4, _022DD50C ; =0xFFFF000F - mov r3, r3, lsl #0x14 - orr r8, r8, #0x4000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - and r0, r8, r0 - strh r0, [r6, #6] - ldrh r0, [r6, #6] - orr r0, r0, r5 - strh r0, [r6, #6] - ldrh r0, [r6, #0xa] - and r0, r0, r4 - strh r0, [r6, #0xa] - ldrh r0, [r6, #0xa] - orr r0, r0, r3, lsr #16 - strh r0, [r6, #0xa] - b _022DD468 -_022DD388: - ldrh r8, [r6, #4] - ldr r4, _022DD508 ; =0x000001FF - sub r0, lr, #0x20c - bic r8, r8, #0xc000 - strh r8, [r6, #4] - ldrh r8, [r6, #4] - and r5, r5, r4 - ldr r4, _022DD50C ; =0xFFFF000F - orr r8, r8, #0x4000 - strh r8, [r6, #4] - ldrh r8, [r6, #6] - mov r3, r3, lsl #0x14 - bic r8, r8, #0xc000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - orr r8, r8, #0x8000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - and r0, r8, r0 - strh r0, [r6, #6] - ldrh r0, [r6, #6] - orr r0, r0, r5 - strh r0, [r6, #6] - ldrh r0, [r6, #0xa] - and r0, r0, r4 - strh r0, [r6, #0xa] - ldrh r0, [r6, #0xa] - orr r0, r0, r3, lsr #16 - strh r0, [r6, #0xa] - b _022DD468 -_022DD400: - ldrh r8, [r6, #4] - ldr r3, _022DD508 ; =0x000001FF - sub r0, lr, #0x20c - bic r8, r8, #0xc000 - strh r8, [r6, #4] - ldrh r8, [r6, #6] - and r5, r5, r3 - ldr r3, _022DD50C ; =0xFFFF000F - bic r8, r8, #0xc000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - mov r4, r4, lsl #0x14 - orr r8, r8, #0x8000 - strh r8, [r6, #6] - ldrh r8, [r6, #6] - and r0, r8, r0 - strh r0, [r6, #6] - ldrh r0, [r6, #6] - orr r0, r0, r5 - strh r0, [r6, #6] - ldrh r0, [r6, #0xa] - and r0, r0, r3 - strh r0, [r6, #0xa] - ldrh r0, [r6, #0xa] - orr r0, r0, r4, lsr #16 - strh r0, [r6, #0xa] -_022DD468: - ldr r3, _022DD504 ; =ov29_02353518 - mov r0, #0x400 - ldrh r5, [r3, #8] - rsb r0, r0, #0 - ldr r4, [sp, #4] - and r5, r5, r0 - strh r5, [r3, #8] - ldrh r6, [r3, #8] - and r5, r7, r0, lsr #22 - mov r0, r4, lsl #0x1c - orr r4, r6, r5 - strh r4, [r3, #8] - ldrh r4, [r3, #8] - cmp r1, #0x20 - bic r1, r4, #0xf000 - strh r1, [r3, #8] - ldrh r1, [r3, #8] - orr r0, r1, r0, lsr #16 - strh r0, [r3, #8] - ldrh r0, [r3, #6] - ldr r1, _022DD510 ; =ov29_0235351C - biceq r0, r0, #0x3e00 - streqh r0, [r3, #6] - ldreqh r0, [r3, #6] - orreq r0, r0, #0x2000 - bicne r0, r0, #0x3e00 - strh r0, [r3, #6] - ldrsh r3, [r2, #2] - ldrsh r0, [ip, #2] - ldr r2, _022DD514 ; =OBJ_GRAPHICS_CONTROLS_PTR - sub r0, r3, r0 - add r0, r0, r0, lsr #31 - mov r3, r0, asr #1 - ldr r0, [r2] - add r2, r3, #1 - bl AddSimpleObjToOam -_022DD4F8: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022DD500: .word ov29_02350F8C -_022DD504: .word ov29_02353518 -_022DD508: .word 0x000001FF -_022DD50C: .word 0xFFFF000F -_022DD510: .word ov29_0235351C -_022DD514: .word OBJ_GRAPHICS_CONTROLS_PTR - arm_func_end ov29_022DD0A4 - - arm_func_start ov29_022DD518 -ov29_022DD518: ; 0x022DD518 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - ldr r2, _022DD5AC ; =ov29_02353518 - mov r1, #0xc - ldr r3, [r2] - mul r2, r0, r1 - ldr r5, [r3, #0x6f4] - ldr r1, [r3] - ldr r3, [r5, #4] - mov r0, r1, asr #1 - add r4, r3, r2 - add r0, r1, r0, lsr #30 - ldrb r3, [r3, r2] - ldrb r2, [r4, #1] - ldrsh r1, [r4, #8] - mov r0, r0, asr #2 - smulbb r2, r3, r2 - mov r6, r2, lsl #5 - bl _s32_div_f - mov r0, #1 - str r0, [sp] - mov r0, #0xe - str r0, [sp, #4] - ldr r3, [r4, #4] - ldrsh r2, [r4, #0xa] - ldr r0, _022DD5B0 ; =OBJ_GRAPHICS_CONTROLS_PTR - mla r4, r6, r1, r3 - add r1, r2, #0x190 - ldr r5, [r5, #0xc] - mov r2, r1, lsl #0x10 - ldr r0, [r0] - mov r3, r6 - add r1, r5, r4 - mov r2, r2, asr #0x10 - bl ChangeSimpleObjTexture - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022DD5AC: .word ov29_02353518 -_022DD5B0: .word OBJ_GRAPHICS_CONTROLS_PTR - arm_func_end ov29_022DD518 - - arm_func_start ov29_022DD5B4 -ov29_022DD5B4: ; 0x022DD5B4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - ldr r2, _022DD758 ; =ov29_02353518 - ldr r0, [r2] - cmp r0, #0 - bne _022DD60C - ldr r0, _022DD75C ; =ov29_0236CEF0 - ldr r1, _022DD760 ; =0x000006FC - str r0, [r2] - bl MemZero - ldr r0, _022DD764 ; =ov29_0236D5EC - mov r1, #0x6000 - bl MemZero - ldr r0, _022DD764 ; =ov29_0236D5EC - ldr r1, _022DD768 ; =ov29_0235109C - bl sub_02008BF4 - ldr r0, _022DD758 ; =ov29_02353518 - ldr r1, _022DD764 ; =ov29_0236D5EC - ldr r0, [r0] - add r0, r0, #0x2f4 - add r0, r0, #0x400 - bl HandleSir0Translation -_022DD60C: - ldr r0, _022DD758 ; =ov29_02353518 - mov r2, #1 - ldr r1, [r0] - mov sb, #0 - strb r2, [r1, #0x6e8] - ldr r1, [r0] - ldr r4, _022DD76C ; =OBJ_GRAPHICS_CONTROLS_PTR - str sb, [r1] - ldr r0, [r0] - mov r8, #0xe0 - ldr sl, [r0, #0x6f4] - mov r7, #0xff - add r6, sp, #8 - mov r5, r2 - mov fp, #0x10 -_022DD648: - str r8, [sp] - str r7, [sp, #4] - ldr r1, [sl, #0x14] - mov r0, r6 - mov r2, r5 - mov r3, fp - add r1, r1, sb, lsl #6 - bl FillPaletteInitInfo - mov r2, sb, lsl #0x10 - ldr r0, [r4] - mov r1, r6 - mov r2, r2, lsr #0x10 - bl LoadObjPalette - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 - cmp sb, #0x10 - blt _022DD648 - mov r0, #1 - mov r1, #0 - bl ov29_022DD518 - mov r0, #2 - mov r1, #0 - bl ov29_022DD518 - mov r0, #3 - mov r1, #0 - bl ov29_022DD518 - mov r0, #4 - mov r1, #0 - bl ov29_022DD518 - mov r0, #5 - mov r1, #0 - bl ov29_022DD518 - mov r0, #6 - mov r1, #0 - bl ov29_022DD518 - mov r0, #7 - mov r1, #0 - bl ov29_022DD518 - mov r0, #8 - mov r1, #0 - bl ov29_022DD518 - mov r0, #9 - mov r1, #0 - bl ov29_022DD518 - mov r0, #0xa - mov r1, #0 - bl ov29_022DD518 - mov r0, #0xb - mov r1, #0 - bl ov29_022DD518 - mov r0, #0xc - mov r1, #0 - bl ov29_022DD518 - mov r0, #0xd - mov r1, #0 - bl ov29_022DD518 - mov r0, #0xe - mov r1, #0 - bl ov29_022DD518 - mov r0, #0xf - mov r1, #0 - bl ov29_022DD518 - mov r0, #0x10 - mov r1, #0 - bl ov29_022DD518 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022DD758: .word ov29_02353518 -_022DD75C: .word ov29_0236CEF0 -_022DD760: .word 0x000006FC -_022DD764: .word ov29_0236D5EC -_022DD768: .word ov29_0235109C -_022DD76C: .word OBJ_GRAPHICS_CONTROLS_PTR - arm_func_end ov29_022DD5B4 - - arm_func_start ov29_022DD770 -ov29_022DD770: ; 0x022DD770 - stmdb sp!, {r3, lr} - ldr r0, _022DD7A8 ; =ov29_02353518 - mov r1, #8 - ldr r0, [r0] - add r0, r0, #0x2ec - add r0, r0, #0x400 - bl MemZero - ldr r0, _022DD7A8 ; =ov29_02353518 - mov r2, #0 - ldr r1, [r0] - str r2, [r1, #0x6f4] - ldr r0, [r0] - str r2, [r0, #0x6f8] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DD7A8: .word ov29_02353518 - arm_func_end ov29_022DD770 - - arm_func_start ov29_022DD7AC -ov29_022DD7AC: ; 0x022DD7AC - stmdb sp!, {r3, lr} - ldr r0, _022DD7D4 ; =ov29_02353518 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl ov29_022DD770 - ldr r0, _022DD7D4 ; =ov29_02353518 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DD7D4: .word ov29_02353518 - arm_func_end ov29_022DD7AC - - arm_func_start ov29_022DD7D8 -ov29_022DD7D8: ; 0x022DD7D8 - stmdb sp!, {r4, r5, r6, lr} - ldr ip, _022DD824 ; =ov29_02353518 - mov r6, r1 - ldr r1, [ip] - mov r5, r2 - mov r4, r3 - cmp r1, #0 - ldmeqia sp!, {r4, r5, r6, pc} - bl ov29_022DC78C - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - strh r6, [r0, #8] - str r5, [r0, #0xc] - ldrb r2, [sp, #0x10] - str r4, [r0, #0x10] - mov r1, #0 - strb r2, [r0, #0x14] - strb r1, [r0, #0x44] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022DD824: .word ov29_02353518 - arm_func_end ov29_022DD7D8 - - arm_func_start ov29_022DD828 -ov29_022DD828: ; 0x022DD828 - ldr r1, _022DD838 ; =ov29_02353518 - ldr r1, [r1] - strb r0, [r1, #0x6e8] - bx lr - .align 2, 0 -_022DD838: .word ov29_02353518 - arm_func_end ov29_022DD828 - - arm_func_start ov29_022DD83C -ov29_022DD83C: ; 0x022DD83C - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _022DD8B0 ; =ov29_02353518 - ldr r4, [sp, #0x14] - ldr r1, [r1] - mov r6, r2 - mov r5, r3 - cmp r1, #0 - ldmeqia sp!, {r4, r5, r6, pc} - bl ov29_022DC78C - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r1, r6, lsl #0x10 - mov r2, #1 - strb r2, [r0, #0x44] - mov r1, r1, asr #0x10 - strh r1, [r0, #0x4a] - strh r1, [r0, #0x4c] - ldr r1, [sp, #0x10] - strh r5, [r0, #0x46] - strh r1, [r0, #0x48] - ldrh r1, [r4] - strh r1, [r0, #0x22] - ldrh r1, [r4, #2] - strh r1, [r0, #0x24] - ldrh r1, [r4, #0xc] - strh r1, [r0, #0x26] - ldrh r1, [r4, #0xe] - strh r1, [r0, #0x28] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022DD8B0: .word ov29_02353518 - arm_func_end ov29_022DD83C - - arm_func_start ov29_022DD8B4 -ov29_022DD8B4: ; 0x022DD8B4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _022DDA50 ; =ov29_02353518 - mov r4, r0 - ldr r0, [r1] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r0, [r0] - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #30 - add r0, r1, r0, ror #30 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _022DD9C4 -_022DD8E8: ; jump table - b _022DD8F8 ; case 0 - b _022DD92C ; case 1 - b _022DD960 ; case 2 - b _022DD994 ; case 3 -_022DD8F8: - mov r0, #1 - mov r1, r0 - bl ov29_022DD518 - mov r0, #2 - mov r1, #1 - bl ov29_022DD518 - mov r0, #3 - mov r1, #1 - bl ov29_022DD518 - mov r0, #4 - mov r1, #1 - bl ov29_022DD518 - b _022DD9C4 -_022DD92C: - mov r0, #5 - mov r1, #1 - bl ov29_022DD518 - mov r0, #6 - mov r1, #1 - bl ov29_022DD518 - mov r0, #7 - mov r1, #1 - bl ov29_022DD518 - mov r0, #8 - mov r1, #1 - bl ov29_022DD518 - b _022DD9C4 -_022DD960: - mov r0, #9 - mov r1, #1 - bl ov29_022DD518 - mov r0, #0xa - mov r1, #1 - bl ov29_022DD518 - mov r0, #0xb - mov r1, #1 - bl ov29_022DD518 - mov r0, #0xc - mov r1, #1 - bl ov29_022DD518 - b _022DD9C4 -_022DD994: - mov r0, #0xd - mov r1, #1 - bl ov29_022DD518 - mov r0, #0xe - mov r1, #1 - bl ov29_022DD518 - mov r0, #0xf - mov r1, #1 - bl ov29_022DD518 - mov r0, #0x10 - mov r1, #1 - bl ov29_022DD518 -_022DD9C4: - mov sb, #0 - ldr r6, _022DDA50 ; =ov29_02353518 - mov r8, sb - mov fp, #1 - mov r7, sb - mov r5, #0x50 -_022DD9DC: - mul r1, sb, r5 - ldr r2, [r6] - add r0, r2, r1 - ldrb r0, [r0, #4] - cmp r0, #0 - beq _022DDA20 - add r0, r2, #4 - add sl, r0, r1 - mov r0, sl - mov r1, r8 - mov r2, r4 - bl ov29_022DC820 - mov r0, sl - mov r1, fp - mov r2, r4 - bl ov29_022DC820 - strb r7, [sl, #0x44] -_022DDA20: - add sb, sb, #1 - cmp sb, #0x16 - blt _022DD9DC - ldr r0, _022DDA50 ; =ov29_02353518 - mov r2, #0 - ldr r1, [r0] - str r2, [r1, #0x6e4] - ldr r1, [r0] - ldr r0, [r1] - add r0, r0, #1 - str r0, [r1] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022DDA50: .word ov29_02353518 - arm_func_end ov29_022DD8B4 - - arm_func_start ov29_022DDA54 -ov29_022DDA54: ; 0x022DDA54 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r4, _022DDB60 ; =ov29_02353518 - mov r7, r0 - ldr ip, [r4] - mov r6, r1 - mov r5, r2 - mov r4, r3 - cmp ip, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - bl ov29_022DC78C - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, _022DDB60 ; =ov29_02353518 - mov r3, #0 - ldr ip, [r0] - mov r0, #0x50 - b _022DDAB8 -_022DDA98: - mul r2, r3, r0 - add r1, ip, r2 - ldrb r1, [r1, #4] - cmp r1, #0 - addeq r0, ip, #4 - addeq r1, r0, r2 - beq _022DDAC4 - add r3, r3, #1 -_022DDAB8: - cmp r3, #0x16 - blt _022DDA98 - mov r1, #0 -_022DDAC4: - cmp r1, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, #1 - strb r0, [r1] - str r7, [r1, #4] - strh r6, [r1, #8] - mov r0, #0 - str r0, [r1, #0xc] - str r0, [r1, #0x10] - ldrh r3, [r5] - ldr r2, _022DDB64 ; =ov29_02350F88 - strh r3, [r1, #0x16] - ldrh r3, [r5, #2] - strh r3, [r1, #0x18] - strb r4, [r1, #0x15] - ldrh r3, [r2, #2] - ldrh r4, [r2] - strh r3, [sp, #2] - mov r3, r3 - strh r4, [r1, #0x1e] - strh r3, [r1, #0x20] - ldrh r2, [r1, #0x1e] - strh r4, [sp] - strh r2, [r1, #0x1a] - ldrh r2, [r1, #0x20] - strh r2, [r1, #0x1c] - strh r4, [r1, #0x26] - strh r3, [r1, #0x28] - ldrh r2, [r1, #0x26] - strh r2, [r1, #0x22] - ldrh r2, [r1, #0x28] - strh r2, [r1, #0x24] - str r0, [r1, #0x2c] - str r0, [r1, #0x30] - str r0, [r1, #0x34] - str r0, [r1, #0x38] - str r0, [r1, #0x3c] - str r0, [r1, #0x40] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022DDB60: .word ov29_02353518 -_022DDB64: .word ov29_02350F88 - arm_func_end ov29_022DDA54 - - arm_func_start ov29_022DDB68 -ov29_022DDB68: ; 0x022DDB68 - stmdb sp!, {r3, lr} - ldr r1, _022DDB94 ; =ov29_02353518 - ldr r1, [r1] - cmp r1, #0 - ldmeqia sp!, {r3, pc} - bl ov29_022DC78C - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r1, #0x50 - bl MemZero - ldmia sp!, {r3, pc} - .align 2, 0 -_022DDB94: .word ov29_02353518 - arm_func_end ov29_022DDB68 - - arm_func_start ov29_022DDB98 -ov29_022DDB98: ; 0x022DDB98 - stmdb sp!, {r4, r5, r6, lr} - ldr r4, _022DDBFC ; =ov29_02353518 - mov r6, r1 - ldr r1, [r4] - mov r4, r2 - mov r5, r3 - cmp r1, #0 - ldmeqia sp!, {r4, r5, r6, pc} - bl ov29_022DC78C - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldrh r1, [r6] - strh r1, [r0, #0x16] - ldrh r1, [r6, #2] - strh r1, [r0, #0x18] - strb r5, [r0, #0x15] - ldrh r1, [r4] - strh r1, [r0, #0x1a] - ldrh r1, [r4, #2] - strh r1, [r0, #0x1c] - ldrh r1, [r4, #0xc] - strh r1, [r0, #0x1e] - ldrh r1, [r4, #0xe] - strh r1, [r0, #0x20] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022DDBFC: .word ov29_02353518 - arm_func_end ov29_022DDB98 - - arm_func_start ov29_022DDC00 -ov29_022DDC00: ; 0x022DDC00 - stmdb sp!, {r3, lr} - ldr r0, _022DDC8C ; =0x027E0068 - mov r1, #0x2000 - bl MemZero - ldr r1, _022DDC8C ; =0x027E0068 - ldr r0, _022DDC90 ; =ov29_023735EC - ldr r3, _022DDC94 ; =ov29_02373690 - ldr r2, _022DDC98 ; =ov29_023735FC - mov lr, #1 - str r1, [r0, #0x10] -_022DDC28: - sub r0, lr, #1 - add r0, r0, r0, lsl #1 - add r1, lr, #1 - add ip, r3, r0, lsl #12 - mov r0, r1, lsl #0x10 - str ip, [r2, lr, lsl #2] - mov lr, r0, asr #0x10 - cmp lr, #4 - blt _022DDC28 - mov r0, #0 - ldr r2, _022DDC9C ; =ov29_0237360C - mov r1, r0 -_022DDC58: - add r0, r0, #1 - mov r0, r0, lsl #0x10 - str r1, [r2] - mov r0, r0, asr #0x10 - str r1, [r2, #4] - cmp r0, #4 - add r2, r2, #0x20 - blt _022DDC58 - ldr r0, _022DDC90 ; =ov29_023735EC - str r1, [r0, #0xc] - str r1, [r0, #8] - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DDC8C: .word 0x027E0068 -_022DDC90: .word ov29_023735EC -_022DDC94: .word ov29_02373690 -_022DDC98: .word ov29_023735FC -_022DDC9C: .word ov29_0237360C - arm_func_end ov29_022DDC00 - - arm_func_start ov29_022DDCA0 -ov29_022DDCA0: ; 0x022DDCA0 - bx lr - arm_func_end ov29_022DDCA0 - - arm_func_start ov29_022DDCA4 -ov29_022DDCA4: ; 0x022DDCA4 - stmdb sp!, {r4, r5, r6, lr} - ldr r4, _022DDD40 ; =ov29_023735FC - ldr r6, _022DDD44 ; =ov29_0237360C - ldr r5, [r4, r0, lsl #2] - add r4, r6, r0, lsl #5 - stmib r4, {r1, r5} - cmp r0, #0 - ldreq r5, _022DDD48 ; =0x00001FFC - ldr ip, _022DDD40 ; =ov29_023735FC - ldrne r5, _022DDD4C ; =0x00002FFC - mov lr, #0xff - str r5, [r4, #0x14] - ldr r5, [ip, r0, lsl #2] - cmp r2, #0 - strb lr, [r5] - ldr r6, [ip, r0, lsl #2] - ldr r5, [r4, #0x14] - add r5, r6, r5 - strb lr, [r5, #3] - ldr r6, [ip, r0, lsl #2] - ldr r5, [r4, #0x14] - add r5, r6, r5 - strb lr, [r5, #2] - ldr ip, [ip, r0, lsl #2] - ldr r0, [r4, #0x14] - add r0, ip, r0 - strb lr, [r0, #1] - ldr ip, [r4, #8] - ldr r0, [r4, #0x14] - add r0, ip, r0 - str r0, [r4, #0xc] - str r1, [r4, #0x10] - str r2, [r4, #0x18] - str r3, [r4, #0x1c] - beq _022DDD34 - blx r2 -_022DDD34: - mov r0, #1 - str r0, [r4] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022DDD40: .word ov29_023735FC -_022DDD44: .word ov29_0237360C -_022DDD48: .word 0x00001FFC -_022DDD4C: .word 0x00002FFC - arm_func_end ov29_022DDCA4 - - arm_func_start ov29_022DDD50 -ov29_022DDD50: ; 0x022DDD50 - stmdb sp!, {r3, lr} - mov r3, r2 - movs lr, r0 - mov ip, r1 - ldmeqia sp!, {r3, pc} - ldr r0, _022DDDA0 ; =ov29_0237360C - mvn r1, #0 - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - rsb r0, r0, #0 - cmp r0, r1 - ldmeqia sp!, {r3, pc} - mov r1, lr - mov r2, ip - bl ov29_022DDCA4 - ldmia sp!, {r3, pc} - .align 2, 0 -_022DDDA0: .word ov29_0237360C - arm_func_end ov29_022DDD50 - - arm_func_start ov29_022DDDA4 -ov29_022DDDA4: ; 0x022DDDA4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - movs r4, r0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r7, #0 - ldr r6, _022DDDFC ; =ov29_0237360C - mov r5, r7 -_022DDDBC: - ldr r0, [r6, #4] - cmp r0, r4 - bne _022DDDE0 - ldr r0, [r6, #0x1c] - cmp r0, #0 - beq _022DDDD8 - blx r0 -_022DDDD8: - str r5, [r6] - str r5, [r6, #4] -_022DDDE0: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #4 - add r6, r6, #0x20 - blt _022DDDBC - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022DDDFC: .word ov29_0237360C - arm_func_end ov29_022DDDA4 - - arm_func_start ov29_022DDE00 -ov29_022DDE00: ; 0x022DDE00 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, #0 - b _022DDE18 -_022DDE10: - bl ov29_022DDEF8 - add r4, r4, #1 -_022DDE18: - cmp r4, r5 - blt _022DDE10 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_022DDE00 - - arm_func_start ov29_022DDE24 -ov29_022DDE24: ; 0x022DDE24 - ldr ip, _022DDE2C ; =ov29_022DDE30 - bx ip - .align 2, 0 -_022DDE2C: .word ov29_022DDE30 - arm_func_end ov29_022DDE24 - - arm_func_start ov29_022DDE30 -ov29_022DDE30: ; 0x022DDE30 - stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr} - ldr r0, _022DDEDC ; =ov29_023735F8 - mov r1, sp - str r1, [r0] - ldr r1, _022DDEE0 ; =ov29_023735EC - mov r2, #0 - str r2, [r1] - ldr r3, _022DDEE4 ; =ov29_023510B8 - ldr r4, [r3] - ldr r3, _022DDEE8 ; =ov29_0237360C -_022DDE58: - ldrh r5, [r3] - cmp r5, #1 - beq _022DDE7C - cmp r5, #2 - beq _022DDE7C - add r2, r2, #1 - add r3, r3, #0x20 - cmp r2, r4 - blt _022DDE58 -_022DDE7C: - str r2, [r1] - cmp r2, r4 - bge _022DDED8 - ldr r4, _022DDEEC ; =ov29_0237368C - str r2, [r4] - ldr r6, _022DDEF0 ; =ov29_023735F4 - ldr r7, [r3, #0xc] - str r7, [r6] - ldr r6, _022DDEF4 ; =ov29_023735F0 - ldr r7, [r3, #0x10] - str r7, [r6] - cmp r5, #2 - bne _022DDEC0 - ldr r6, _022DDEF0 ; =ov29_023735F4 - ldr sp, [r6] - ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} -_022DDEBC: - b _022DDED8 -_022DDEC0: - ldr r6, _022DDEF0 ; =ov29_023735F4 - ldr sp, [r6] - ldr r7, _022DDEF4 ; =ov29_023735F0 - ldr r2, [r7] - bx r2 -_022DDED4: - b _022DDED8 -_022DDED8: - ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} - .align 2, 0 -_022DDEDC: .word ov29_023735F8 -_022DDEE0: .word ov29_023735EC -_022DDEE4: .word ov29_023510B8 -_022DDEE8: .word ov29_0237360C -_022DDEEC: .word ov29_0237368C -_022DDEF0: .word ov29_023735F4 -_022DDEF4: .word ov29_023735F0 - arm_func_end ov29_022DDE30 - - arm_func_start ov29_022DDEF8 -ov29_022DDEF8: ; 0x022DDEF8 - stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr} - ldr r0, _022DDFD8 ; =ov29_023735F4 - str sp, [r0] - mov r1, #0x20 - ldr r3, _022DDFDC ; =ov29_023735EC - ldr r2, [r3] - mul r1, r1, r2 - ldr r3, _022DDFE0 ; =ov29_0237360C - add r4, r3, r1 - ldrh r5, [r4] - cmp r5, #1 - bne _022DDF30 - mov r5, #2 - str r5, [r4] -_022DDF30: - ldr r5, [r0] - str r5, [r4, #0xc] - ldr r5, _022DDFE4 ; =ov29_023735F0 - ldr r5, [r5] - str r5, [r4, #0x10] - mov r3, r4 - ldr r1, _022DDFE8 ; =ov29_023510B8 - ldr r4, [r1] -_022DDF50: - add r2, r2, #1 - add r3, r3, #0x20 - cmp r2, r4 - bge _022DDF78 - ldrh r5, [r3] - cmp r5, #1 - beq _022DDF78 - cmp r5, #2 - beq _022DDF78 - b _022DDF50 -_022DDF78: - ldr r6, _022DDFDC ; =ov29_023735EC - str r2, [r6] - cmp r2, r4 - bge _022DDFCC - ldr r6, _022DDFD8 ; =ov29_023735F4 - ldr r7, [r3, #0xc] - str r7, [r6] - ldr r6, _022DDFE4 ; =ov29_023735F0 - ldr r7, [r3, #0x10] - str r7, [r6] - cmp r5, #2 - bne _022DDFB8 - ldr r6, _022DDFD8 ; =ov29_023735F4 - ldr sp, [r6] - ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} -_022DDFB4: - b _022DDFCC -_022DDFB8: - ldr r6, _022DDFD8 ; =ov29_023735F4 - ldr sp, [r6] - ldr r7, _022DDFE4 ; =ov29_023735F0 - ldr r2, [r7] - bx r2 -_022DDFCC: - ldr r0, _022DDFEC ; =ov29_023735F8 - ldr sp, [r0] - ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} - .align 2, 0 -_022DDFD8: .word ov29_023735F4 -_022DDFDC: .word ov29_023735EC -_022DDFE0: .word ov29_0237360C -_022DDFE4: .word ov29_023735F0 -_022DDFE8: .word ov29_023510B8 -_022DDFEC: .word ov29_023735F8 - arm_func_end ov29_022DDEF8 - - arm_func_start ov29_022DDFF0 -ov29_022DDFF0: ; 0x022DDFF0 - ldr ip, _022DDFF8 ; =sub_020519D0 - bx ip - .align 2, 0 -_022DDFF8: .word sub_020519D0 - arm_func_end ov29_022DDFF0 - - arm_func_start ov29_022DDFFC -ov29_022DDFFC: ; 0x022DDFFC - stmdb sp!, {r3, lr} - mov r0, #0x44 - mov r1, #0 - bl MemAlloc - ldr r2, _022DE064 ; =ov29_0235352C - mov r1, #0x44 - str r0, [r2] - bl MemZero - ldr r0, _022DE064 ; =ov29_0235352C - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x20 - bl ov29_022DE22C - ldr r0, _022DE064 ; =ov29_0235352C - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x2c - bl ov29_022DE22C - mov r0, #0 - bl sub_02051ED4 - mov r1, r0 - ldr r0, _022DE064 ; =ov29_0235352C - mov r2, #0x20 - ldr r0, [r0] - bl sub_02063628 - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE064: .word ov29_0235352C - arm_func_end ov29_022DDFFC - - arm_func_start ov29_022DE068 -ov29_022DE068: ; 0x022DE068 - stmdb sp!, {r3, lr} - ldr r0, _022DE09C ; =ov29_0235352C - ldr r0, [r0] - add r0, r0, #0x20 - bl ov29_022DE274 - ldr r0, _022DE09C ; =ov29_0235352C - ldr r0, [r0] - add r0, r0, #0x2c - bl ov29_022DE274 - ldr r0, _022DE09C ; =ov29_0235352C - ldr r0, [r0] - bl sub_0206367C - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE09C: .word ov29_0235352C - arm_func_end ov29_022DE068 - - arm_func_start ov29_022DE0A0 -ov29_022DE0A0: ; 0x022DE0A0 - stmdb sp!, {r3, lr} - bl ov29_022DE068 - bl sub_02051B44 - ldr r0, _022DE0C8 ; =ov29_0235352C - ldr r0, [r0] - bl MemFree - ldr r0, _022DE0C8 ; =ov29_0235352C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE0C8: .word ov29_0235352C - arm_func_end ov29_022DE0A0 - - arm_func_start ov29_022DE0CC -ov29_022DE0CC: ; 0x022DE0CC - stmdb sp!, {r3, lr} - ldr r0, _022DE0E8 ; =ov29_0235352C - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_02051C24 - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE0E8: .word ov29_0235352C - arm_func_end ov29_022DE0CC - - arm_func_start ov29_022DE0EC -ov29_022DE0EC: ; 0x022DE0EC - stmdb sp!, {r4, lr} - ldr r2, _022DE118 ; =ov29_0235352C - mov r4, r0 - ldr r0, [r2] - mov r2, r1 - mov r1, r4 - bl sub_02063734 - ldr r0, _022DE118 ; =ov29_0235352C - ldr r0, [r0] - str r4, [r0, #0x18] - ldmia sp!, {r4, pc} - .align 2, 0 -_022DE118: .word ov29_0235352C - arm_func_end ov29_022DE0EC - - arm_func_start ov29_022DE11C -ov29_022DE11C: ; 0x022DE11C - ldr r0, _022DE12C ; =ov29_0235352C - ldr ip, _022DE130 ; =sub_02063770 - ldr r0, [r0] - bx ip - .align 2, 0 -_022DE12C: .word ov29_0235352C -_022DE130: .word sub_02063770 - arm_func_end ov29_022DE11C - - arm_func_start ov29_022DE134 -ov29_022DE134: ; 0x022DE134 - stmdb sp!, {r3, lr} - ldr ip, _022DE158 ; =ov29_0235352C - str r3, [sp] - mov r2, r0 - mov r3, r1 - ldr r0, [ip] - mov r1, #0 - bl sub_02063830 - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE158: .word ov29_0235352C - arm_func_end ov29_022DE134 - - arm_func_start ov29_022DE15C -ov29_022DE15C: ; 0x022DE15C - stmdb sp!, {r3, lr} - mov r0, #0 - mov r1, r0 - bl sub_02051DD0 - mov r0, #1 - mov r1, #0 - bl sub_02051DD0 - mov r0, #0 - mov r1, #1 - bl sub_02051DD0 - mov r0, #1 - mov r1, r0 - bl sub_02051DD0 - mov r0, #0 - mov r1, r0 - bl sub_02051E60 - mov r0, #1 - mov r1, #0 - bl sub_02051E60 - mov r0, #0 - mov r1, #1 - bl sub_02051E60 - mov r0, #1 - mov r1, r0 - bl sub_02051E60 - mov r0, #0 - bl ov29_022DE1E4 - mov r0, #1 - bl ov29_022DE1E4 - mov r0, #0 - bl ov29_022DE208 - mov r0, #1 - bl ov29_022DE208 - ldmia sp!, {r3, pc} - arm_func_end ov29_022DE15C - - arm_func_start ov29_022DE1E4 -ov29_022DE1E4: ; 0x022DE1E4 - ldr r2, _022DE200 ; =ov29_0235352C - mov r1, #0xc - ldr r2, [r2] - ldr ip, _022DE204 ; =sub_0200B3D4 - mla r1, r0, r1, r2 - ldr r0, [r1, #0x24] - bx ip - .align 2, 0 -_022DE200: .word ov29_0235352C -_022DE204: .word sub_0200B3D4 - arm_func_end ov29_022DE1E4 - - arm_func_start ov29_022DE208 -ov29_022DE208: ; 0x022DE208 - ldr r2, _022DE224 ; =ov29_0235352C - mov r1, #0xc - ldr r2, [r2] - ldr ip, _022DE228 ; =sub_0200B330 - mla r1, r0, r1, r2 - ldr r0, [r1, #0x24] - bx ip - .align 2, 0 -_022DE224: .word ov29_0235352C -_022DE228: .word sub_0200B330 - arm_func_end ov29_022DE208 - - arm_func_start ov29_022DE22C -ov29_022DE22C: ; 0x022DE22C - stmdb sp!, {r3, lr} - mov r3, r0 - cmp r1, #0 - bne _022DE254 - ldr r2, _022DE26C ; =0x06005000 - add r0, r3, #4 - add r1, r3, #8 - str r2, [r3] - bl sub_020275C0 - ldmia sp!, {r3, pc} -_022DE254: - ldr r2, _022DE270 ; =0x06205000 - add r0, r3, #4 - add r1, r3, #8 - str r2, [r3] - bl sub_020275DC - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE26C: .word 0x06005000 -_022DE270: .word 0x06205000 - arm_func_end ov29_022DE22C - - arm_func_start ov29_022DE274 -ov29_022DE274: ; 0x022DE274 - mov r1, #0 - str r1, [r0] - str r1, [r0, #4] - str r1, [r0, #8] - bx lr - arm_func_end ov29_022DE274 - - arm_func_start ov29_022DE288 -ov29_022DE288: ; 0x022DE288 - ldr r0, [r0] - bx lr - arm_func_end ov29_022DE288 - - arm_func_start ov29_022DE290 -ov29_022DE290: ; 0x022DE290 - strh r1, [r0, #0xa] - mov r2, #0 - strb r2, [r0, #0xc] - strb r2, [r0, #0xd] - strb r2, [r0, #0xe] - ldr r1, _022DE2C4 ; =DUNGEON_PTR - strb r2, [r0, #0xf] - ldr r2, [r1] - mov r1, #1 - add r2, r2, #0x1e0 - str r2, [r0, #0x10] - strb r1, [r0, #8] - bx lr - .align 2, 0 -_022DE2C4: .word DUNGEON_PTR - arm_func_end ov29_022DE290 - - arm_func_start ov29_022DE2C8 -ov29_022DE2C8: ; 0x022DE2C8 - str r2, [r0, #0x14] - strh r1, [r0, #0xa] - mov r2, #0 - strb r2, [r0, #0xc] - strb r2, [r0, #0xd] - strb r2, [r0, #0xe] - ldr r1, _022DE2FC ; =DUNGEON_PTR - strb r2, [r0, #0xf] - ldr r1, [r1] - add r1, r1, #0x1e0 - str r1, [r0, #0x10] - strb r2, [r0, #8] - bx lr - .align 2, 0 -_022DE2FC: .word DUNGEON_PTR - arm_func_end ov29_022DE2C8 - - arm_func_start InitDungeonPaletteStruct -InitDungeonPaletteStruct: ; 0x022DE300 - stmdb sp!, {r3, lr} - mov r0, #0x74 - mov r1, #0 - bl MemAlloc - ldr r2, _022DE410 ; =ov29_02353530 - mov r1, #0x74 - str r0, [r2] - bl MemZero - ldr r0, _022DE410 ; =ov29_02353530 - mov r2, #0x100 - ldr r1, [r0] - strh r2, [r1, #4] - ldr r1, [r0] - strh r2, [r1, #2] - ldr r2, [r0] - ldrsh r1, [r2, #2] - strh r1, [r2, #6] - ldr r2, [r0] - ldrsh r1, [r2, #4] - strh r1, [r2, #8] - ldr r0, [r0] - add r0, r0, #0xc - bl sub_0200A2CC - ldr r1, _022DE410 ; =ov29_02353530 - mov r0, #0 - ldr r1, [r1] - strb r0, [r1, #0x4c] - strb r0, [r1, #0x4d] - strb r0, [r1, #0x4e] - strb r0, [r1, #0x4f] - bl sub_02051ED4 - ldr r2, [r0, #0x14] - ldr r1, _022DE410 ; =ov29_02353530 - mov r0, #0 - ldr r1, [r1] - str r2, [r1, #0x34] - bl sub_0201BCCC - ldr r2, [r0, #0x14] - ldr r1, _022DE410 ; =ov29_02353530 - mov r0, #0 - ldr r1, [r1] - str r2, [r1, #0x38] - bl sub_0201BCF4 - ldr r3, [r0, #0x14] - ldr r1, _022DE410 ; =ov29_02353530 - mov r0, #1 - ldr r2, [r1] - mov r1, #0 - str r3, [r2, #0x3c] - bl sub_0201BD1C - mov r0, #4 - ldr r1, _022DE414 ; =0x0000040A - ldr r2, _022DE410 ; =ov29_02353530 - mov r3, #0 - ldr r2, [r2] - add r2, r2, #0x40 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r0, _022DE410 ; =ov29_02353530 - ldr r1, [r0] - add r0, r1, #0x48 - ldr r1, [r1, #0x40] - bl HandleSir0Translation - ldr r0, _022DE410 ; =ov29_02353530 - mov r1, #0x20 - ldr r0, [r0] - add r0, r0, #0x51 - bl MemZero - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE410: .word ov29_02353530 -#ifdef JAPAN -_022DE414: .word 0x000003FE -#else -_022DE414: .word 0x0000040A -#endif - arm_func_end InitDungeonPaletteStruct - - arm_func_start ov29_022DE418 -ov29_022DE418: ; 0x022DE418 - stmdb sp!, {r3, lr} - ldr r0, _022DE478 ; =ov29_02353530 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #0 - bl sub_02051ED4 - ldr r1, _022DE478 ; =ov29_02353530 - ldr r1, [r1] - ldr r1, [r1, #0x34] - str r1, [r0, #0x14] - mov r0, #0 - bl sub_0201BCCC - ldr r1, _022DE478 ; =ov29_02353530 - ldr r1, [r1] - ldr r1, [r1, #0x38] - str r1, [r0, #0x14] - mov r0, #0 - bl sub_0201BCF4 - ldr r1, _022DE478 ; =ov29_02353530 - ldr r1, [r1] - ldr r1, [r1, #0x3c] - str r1, [r0, #0x14] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE478: .word ov29_02353530 - arm_func_end ov29_022DE418 - - arm_func_start ov29_022DE47C -ov29_022DE47C: ; 0x022DE47C - ldr r2, _022DE494 ; =ov29_02353530 - ldr r2, [r2] - cmp r2, #0 - addne r0, r2, r0 - strneb r1, [r0, #0x51] - bx lr - .align 2, 0 -_022DE494: .word ov29_02353530 - arm_func_end ov29_022DE47C - - arm_func_start ov29_022DE498 -ov29_022DE498: ; 0x022DE498 - stmdb sp!, {r3, lr} - ldr r0, _022DE4F8 ; =ov29_02353530 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl ov29_022DE418 - ldr r0, _022DE4F8 ; =ov29_02353530 - ldr r0, [r0] - add r0, r0, #0x40 - bl UnloadFile - mov r0, #0 - mov r1, r0 - bl sub_0201BD1C - ldr r0, _022DE4F8 ; =ov29_02353530 - ldr r0, [r0] - add r0, r0, #0xc - bl sub_0200A2F4 - ldr r0, _022DE4F8 ; =ov29_02353530 - ldr r0, [r0] - bl MemFree - ldr r0, _022DE4F8 ; =ov29_02353530 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE4F8: .word ov29_02353530 - arm_func_end ov29_022DE498 - - arm_func_start ov29_022DE4FC -ov29_022DE4FC: ; 0x022DE4FC - stmdb sp!, {r4, lr} - ldr r1, _022DE55C ; =ov29_02353530 - mov r0, #0 - ldr r1, [r1] - ldrh r4, [r1, #4] - bl sub_02051ED4 - ldr r2, _022DE560 ; =sub_01FF9BA0 - mov r1, r4 - bl ov29_022DE2C8 - mov r0, #0 - bl sub_0201BCCC - ldr r1, _022DE55C ; =ov29_02353530 - ldr r2, _022DE564 ; =sub_01FF9E14 - ldr r1, [r1] - ldrh r1, [r1, #2] - bl ov29_022DE2C8 - mov r0, #0 - bl sub_0201BCF4 - ldr r1, _022DE55C ; =ov29_02353530 - ldr r2, _022DE568 ; =sub_01FF9F80 - ldr r1, [r1] - ldrh r1, [r1, #2] - bl ov29_022DE2C8 - ldmia sp!, {r4, pc} - .align 2, 0 -_022DE55C: .word ov29_02353530 -_022DE560: .word sub_01FF9BA0 -_022DE564: .word sub_01FF9E14 -_022DE568: .word sub_01FF9F80 - arm_func_end ov29_022DE4FC - - arm_func_start ov29_022DE56C -ov29_022DE56C: ; 0x022DE56C - stmdb sp!, {r4, r5, r6, lr} - mov r6, r1 - mov r4, r0 - cmp r6, #1 - bne _022DE598 - mov r0, #0 - bl sub_02051ED4 - mov r1, r4, lsl #0x10 - mov r1, r1, lsr #0x10 - bl ov29_022DE290 - b _022DE5C0 -_022DE598: - mov r0, r4, lsl #0x10 - mov r5, r0, lsr #0x10 - mov r0, #0 - bl sub_0201BCCC - mov r1, r5 - bl ov29_022DE290 - mov r0, #0 - bl sub_0201BCF4 - mov r1, r5 - bl ov29_022DE290 -_022DE5C0: - ldr r0, _022DE5D4 ; =ov29_02353530 - ldr r0, [r0] - add r0, r0, r6, lsl #1 - strh r4, [r0, #2] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022DE5D4: .word ov29_02353530 - arm_func_end ov29_022DE56C - - arm_func_start ov29_022DE5D8 -ov29_022DE5D8: ; 0x022DE5D8 - ldr r2, _022DE5EC ; =ov29_02353530 - ldr r2, [r2] - add r1, r2, r1, lsl #1 - strh r0, [r1, #2] - bx lr - .align 2, 0 -_022DE5EC: .word ov29_02353530 - arm_func_end ov29_022DE5D8 - - arm_func_start ov29_022DE5F0 -ov29_022DE5F0: ; 0x022DE5F0 - ldr r1, _022DE604 ; =ov29_02353530 - ldr r1, [r1] - add r0, r1, r0, lsl #1 - ldrsh r0, [r0, #2] - bx lr - .align 2, 0 -_022DE604: .word ov29_02353530 - arm_func_end ov29_022DE5F0 - - arm_func_start ov29_022DE608 -ov29_022DE608: ; 0x022DE608 - ldr r0, _022DE61C ; =ov29_02353530 - mov r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x50] - bx lr - .align 2, 0 -_022DE61C: .word ov29_02353530 - arm_func_end ov29_022DE608 - - arm_func_start GetWeatherColorTable -GetWeatherColorTable: ; 0x022DE620 - ldr r1, _022DE634 ; =ov29_02353530 - ldr r1, [r1] - ldr r1, [r1, #0x48] - add r0, r1, r0, lsl #10 - bx lr - .align 2, 0 -_022DE634: .word ov29_02353530 - arm_func_end GetWeatherColorTable - - arm_func_start ov29_022DE638 -ov29_022DE638: ; 0x022DE638 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _022DE844 ; =DUNGEON_PTR - mov r5, r0 - ldr r0, [r1] - mov r4, #0 - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - bl IsBackgroundTileset - cmp r0, #0 - mov r1, r4 - bne _022DE754 - ldr r0, _022DE848 ; =ov29_023510BC - mov r2, r5 - mov r3, r1 - str r1, [sp] - bl sub_02051EF0 - mov r0, r4 - bl sub_02051D68 - mov r3, #1 - mov r1, r4 - str r3, [sp] - ldr r0, _022DE848 ; =ov29_023510BC - mov r2, r5 - mov r3, r1 - bl sub_02051EF0 - mov r0, #1 - bl sub_02051D68 - bl GetDefaultTileTextureId - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r7, #0 - add sb, r0, #4 - add r4, r4, #1 - mov r8, #1 - mov r6, r7 -_022DE6C4: - mov r1, r4, lsl #0x10 - mov r0, sb - mov r2, r5 - mov r3, r7 - mov r1, r1, asr #0x10 - str r7, [sp] - bl sub_02051EF0 - mov r0, r6 - bl sub_02051D68 - add r8, r8, #1 - cmp r8, #0xd0 - add sb, sb, #4 - add r4, r4, #1 - blt _022DE6C4 - mov sb, #0 - ldr r8, _022DE84C ; =ov29_0237C6D4 - mov r7, #0xd0 - mov r6, sb - mov r4, sb -_022DE710: - mov r1, r7, lsl #0x10 - mov r0, r8 - mov r2, r5 - mov r3, r6 - mov r1, r1, asr #0x10 - str r6, [sp] - bl sub_02051EF0 - mov r0, r4 - bl sub_02051D68 - add r7, r7, #1 - cmp r7, #0xe0 - add sb, sb, #1 - addeq r7, r7, #0x10 - add r8, r8, #4 - cmp sb, #0x20 - blt _022DE710 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_022DE754: - ldr r0, _022DE848 ; =ov29_023510BC - mov r2, r5 - mov r3, r1 - str r1, [sp] - bl sub_02051EF0 - mov r0, r4 - bl sub_02051D68 - mov r3, #1 - mov r1, r4 - str r3, [sp] - ldr r0, _022DE848 ; =ov29_023510BC - mov r2, r5 - mov r3, r1 - bl sub_02051EF0 - mov r0, #1 - bl sub_02051D68 - bl GetDefaultTileTextureId - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r7, #0 - add r8, r0, #4 - add r4, r4, #1 - mov sb, #1 - mov r6, r7 -_022DE7B4: - mov r1, r4, lsl #0x10 - mov r0, r8 - mov r2, r5 - mov r3, r7 - mov r1, r1, asr #0x10 - str r7, [sp] - bl sub_02051EF0 - mov r0, r6 - bl sub_02051D68 - add sb, sb, #1 - cmp sb, #0xe0 - add r8, r8, #4 - add r4, r4, #1 - blt _022DE7B4 - ldr r8, _022DE850 ; =ov29_0237C714 - mov r7, #0xf0 - cmp r8, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov sb, #0 - mov r6, sb - mov r4, sb -_022DE808: - mov r1, r7, lsl #0x10 - mov r0, r8 - mov r2, r5 - mov r3, r6 - mov r1, r1, asr #0x10 - str r6, [sp] - bl sub_02051EF0 - mov r0, r4 - bl sub_02051D68 - add sb, sb, #1 - cmp sb, #0x10 - add r8, r8, #4 - add r7, r7, #1 - blt _022DE808 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_022DE844: .word DUNGEON_PTR -_022DE848: .word ov29_023510BC -_022DE84C: .word ov29_0237C6D4 -_022DE850: .word ov29_0237C714 - arm_func_end ov29_022DE638 - - arm_func_start ov29_022DE854 -ov29_022DE854: ; 0x022DE854 - stmdb sp!, {r3, lr} - mov r0, #0 - bl sub_02051ED4 - bl sub_0200A544 - ldmia sp!, {r3, pc} - arm_func_end ov29_022DE854 - - arm_func_start ov29_022DE868 -ov29_022DE868: ; 0x022DE868 - stmdb sp!, {r3, lr} - ldr r0, _022DE900 ; =ov29_02353530 - ldr r2, [r0] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrb r0, [r2, #0x50] - cmp r0, #0 - ldreqsh r1, [r2, #4] - ldreqsh r0, [r2, #8] - cmpeq r1, r0 - beq _022DE8B0 - ldrsh r0, [r2, #4] - mov r1, #1 - bl ov29_022DE56C - ldr r0, _022DE900 ; =ov29_02353530 - ldr r1, [r0] - ldrsh r0, [r1, #4] - strh r0, [r1, #8] -_022DE8B0: - ldr r0, _022DE900 ; =ov29_02353530 - ldr r2, [r0] - ldrb r0, [r2, #0x50] - cmp r0, #0 - ldreqsh r1, [r2, #2] - ldreqsh r0, [r2, #6] - cmpeq r1, r0 - beq _022DE8EC - ldrsh r0, [r2, #2] - mov r1, #0 - bl ov29_022DE56C - ldr r0, _022DE900 ; =ov29_02353530 - ldr r1, [r0] - ldrsh r0, [r1, #2] - strh r0, [r1, #6] -_022DE8EC: - ldr r0, _022DE900 ; =ov29_02353530 - mov r1, #0 - ldr r0, [r0] - strb r1, [r0, #0x50] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE900: .word ov29_02353530 - arm_func_end ov29_022DE868 - - arm_func_start ov29_022DE904 -ov29_022DE904: ; 0x022DE904 - stmdb sp!, {r3, lr} - mov r0, #0x20 - mov r1, #0 - bl MemAlloc - ldr r2, _022DE92C ; =ov29_02353534 - mov r1, #0x20 - str r0, [r2] - bl MemZero - bl ov29_022DEA34 - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE92C: .word ov29_02353534 - arm_func_end ov29_022DE904 - - arm_func_start ov29_022DE930 -ov29_022DE930: ; 0x022DE930 - stmdb sp!, {r3, lr} - ldr r0, _022DE950 ; =ov29_02353534 - ldr r0, [r0] - bl MemFree - ldr r0, _022DE950 ; =ov29_02353534 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_022DE950: .word ov29_02353534 - arm_func_end ov29_022DE930 - - arm_func_start ov29_022DE954 -ov29_022DE954: ; 0x022DE954 - cmp r0, #0x10 - movge r0, #1 - movlt r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end ov29_022DE954 - - arm_func_start ov29_022DE968 -ov29_022DE968: ; 0x022DE968 - cmp r0, #0 - beq _022DE984 - cmp r0, #1 - beq _022DE990 - cmp r0, #2 - beq _022DE99C - b _022DE9A8 -_022DE984: - mov r0, #0 - mov r3, #1 - b _022DE9B0 -_022DE990: - mov r0, #0x1b - mov r3, #4 - b _022DE9B0 -_022DE99C: - mov r0, #1 - mov r3, #0x14 - b _022DE9B0 -_022DE9A8: - mov r3, #0 - mov r0, r3 -_022DE9B0: - ldr r1, _022DE9F4 ; =ov29_02353534 - mov r2, #0 - ldr ip, [r1] - b _022DE9E4 -_022DE9C0: - ldrb r1, [ip, r0] - cmp r1, #0 - bxeq lr - add r2, r2, #1 - add r1, r0, #1 - mov r0, r2, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r2, r0, asr #0x10 - mov r0, r1, asr #0x10 -_022DE9E4: - cmp r2, r3 - blt _022DE9C0 - mvn r0, #0 - bx lr - .align 2, 0 -_022DE9F4: .word ov29_02353534 - arm_func_end ov29_022DE968 - - arm_func_start ov29_022DE9F8 -ov29_022DE9F8: ; 0x022DE9F8 - ldr r1, _022DEA0C ; =ov29_02353534 - mov r2, #1 - ldr r1, [r1] - strb r2, [r1, r0] - bx lr - .align 2, 0 -_022DEA0C: .word ov29_02353534 - arm_func_end ov29_022DE9F8 - - arm_func_start ov29_022DEA10 -ov29_022DEA10: ; 0x022DEA10 - ldr ip, _022DEA18 ; =ov29_022DE968 - bx ip - .align 2, 0 -_022DEA18: .word ov29_022DE968 - arm_func_end ov29_022DEA10 - - arm_func_start ov29_022DEA1C -ov29_022DEA1C: ; 0x022DEA1C - ldr r1, _022DEA30 ; =ov29_02353534 - mov r2, #0 - ldr r1, [r1] - strb r2, [r1, r0] - bx lr - .align 2, 0 -_022DEA30: .word ov29_02353534 - arm_func_end ov29_022DEA1C - - arm_func_start ov29_022DEA34 -ov29_022DEA34: ; 0x022DEA34 - mov r3, #0 - ldr r0, _022DEA58 ; =ov29_02353534 - mov r2, r3 -_022DEA40: - ldr r1, [r0] - strb r2, [r1, r3] - add r3, r3, #1 - cmp r3, #0x20 - blt _022DEA40 - bx lr - .align 2, 0 -_022DEA58: .word ov29_02353534 - arm_func_end ov29_022DEA34 diff --git a/asm/overlay_29_022DC694.s b/asm/overlay_29_022DC694.s new file mode 100644 index 00000000..6073fe18 --- /dev/null +++ b/asm/overlay_29_022DC694.s @@ -0,0 +1,2727 @@ + .include "asm/macros.inc" + .include "overlay_29_022DC694.inc" + + .text + + arm_func_start ov29_022DC694 +ov29_022DC694: ; 0x022DC694 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r5, r0 + add r0, sp, #0 + mov r4, r1 + bl ov10_022C22A0 + add r0, sp, #0 + mov r1, r4 + bl ov10_022C0814 + mov r0, r5 + mov r1, #0 + mov r2, #1 + bl DrawTeamStats + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + arm_func_end ov29_022DC694 + + arm_func_start ov29_022DC6D0 +ov29_022DC6D0: ; 0x022DC6D0 + ldr ip, _022DC6D8 ; =UpdateTeamStats + bx ip + .align 2, 0 +_022DC6D8: .word UpdateTeamStats + arm_func_end ov29_022DC6D0 + + arm_func_start ov29_022DC6DC +ov29_022DC6DC: ; 0x022DC6DC + ldr ip, _022DC6E4 ; =ov10_022C11D8 + bx ip + .align 2, 0 +_022DC6E4: .word ov10_022C11D8 + arm_func_end ov29_022DC6DC + + arm_func_start ov29_022DC6E8 +ov29_022DC6E8: ; 0x022DC6E8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x18 + ldrb r4, [sp, #0x20] + ldrsh ip, [sp, #0x24] + ldrsh lr, [sp, #0x28] + stmia sp, {r4, ip} + str lr, [sp, #8] + ldrsh ip, [sp, #0x2c] + ldrsh lr, [sp, #0x30] + str ip, [sp, #0xc] + ldrb ip, [sp, #0x34] + str lr, [sp, #0x10] + str ip, [sp, #0x14] + bl ov10_022C0F6C + add sp, sp, #0x18 + ldmia sp!, {r4, pc} + arm_func_end ov29_022DC6E8 + + arm_func_start ov29_022DC728 +ov29_022DC728: ; 0x022DC728 + stmdb sp!, {r3, lr} + bl FreeTeamStats + bl ov10_022C096C + ldmia sp!, {r3, pc} + arm_func_end ov29_022DC728 + + arm_func_start ov29_022DC738 +ov29_022DC738: ; 0x022DC738 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r5, r0 + add r0, sp, #0 + mov r4, r1 + bl ov10_022C22A0 + add r0, sp, #0 + mov r1, r4 + bl ov10_022C0814 + mov r0, r5 + bl ov10_022C14D0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + arm_func_end ov29_022DC738 + + arm_func_start ov29_022DC76C +ov29_022DC76C: ; 0x022DC76C + ldr ip, _022DC774 ; =ov10_022C159C + bx ip + .align 2, 0 +_022DC774: .word ov10_022C159C + arm_func_end ov29_022DC76C + + arm_func_start ov29_022DC778 +ov29_022DC778: ; 0x022DC778 + bx lr + arm_func_end ov29_022DC778 + + arm_func_start ov29_022DC77C +ov29_022DC77C: ; 0x022DC77C + stmdb sp!, {r3, lr} + bl FreeMapAndTeam + bl ov10_022C096C + ldmia sp!, {r3, pc} + arm_func_end ov29_022DC77C + + arm_func_start ov29_022DC78C +ov29_022DC78C: ; 0x022DC78C + stmdb sp!, {r4, lr} + ldr r1, _022DC7E0 ; =ov29_02353518 + mov lr, #0 + ldr r4, [r1] + mov r1, #0x50 + b _022DC7D0 +_022DC7A4: + mul ip, lr, r1 + add r3, r4, ip + ldrb r2, [r3, #4] + cmp r2, #0 + beq _022DC7CC + ldr r2, [r3, #8] + cmp r0, r2 + addeq r0, r4, #4 + addeq r0, r0, ip + ldmeqia sp!, {r4, pc} +_022DC7CC: + add lr, lr, #1 +_022DC7D0: + cmp lr, #0x16 + blt _022DC7A4 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_022DC7E0: .word ov29_02353518 + arm_func_end ov29_022DC78C + +; https://decomp.me/scratch/qiwjF + arm_func_start ov29_022DC7E4 +ov29_022DC7E4: ; 0x022DC7E4 + stmdb sp!, {r3, lr} + mov lr, #0 + mov r3, lr + mov r2, lr + b _022DC80C +_022DC7F8: + mov r0, r0, lsr #1 + mov ip, r1, lsr #1 + orr r0, r0, r1, lsl #31 + mov r1, ip + add lr, lr, #1 +_022DC80C: + cmp r1, r3 + cmpeq r0, r2 + bne _022DC7F8 + mov r0, lr + ldmia sp!, {r3, pc} + arm_func_end ov29_022DC7E4 + + arm_func_start ov29_022DC820 +ov29_022DC820: ; 0x022DC820 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x3c + mov r8, r1 + mov r1, #0xc + mul r1, r8, r1 + mov sb, r0 + ldr r0, [sb, #0x10] + add r4, sb, #0x2c + ldr r3, [sb, #0xc] + cmp r0, #0 + add r4, r4, r1 + mov r5, #0 + cmpeq r3, #0 + streq r5, [r4] + str r2, [sp, #0xc] + streq r5, [r4, #4] + beq _022DD084 + ldr r0, [r4, #4] + ldr r2, [r4] + cmp r0, r5 + cmpeq r2, r5 + streq r5, [r4, #8] + ldr r0, [r4, #8] + moveq r5, #1 + cmp r0, #0 + bgt _022DC99C + add r0, sb, #0x2c + cmp r8, #0 + add r0, r0, r1 + moveq r1, #1 + streq r1, [sp, #0x10] + moveq r1, #0 + streq r1, [sp, #0x14] + movne r1, #0 + strne r1, [sp, #0x10] + movne r1, #1 + strne r1, [sp, #0x14] + cmp r8, #0 + ldr r1, [sb, #0x10] + moveq sl, #0x80000000 + str r1, [sp, #0x1c] + ldr r1, [sb, #0xc] + moveq lr, #0 + str r1, [sp, #0x18] + ldr r1, [sp, #0x1c] + movne sl, #0 + movne lr, #1 + cmp r8, #0 + moveq ip, #0x20 + movne ip, #1 + cmp r1, #0 + ldr r1, [sp, #0x18] + cmpeq r1, #0 + mov r1, #0 + moveq r7, r1 + moveq r6, r1 + beq _022DC978 + ldr r6, [r0, #4] + ldr r7, [r0] + cmp r6, r1 + cmpeq r7, r1 + mov r3, #0 + ldreq r7, [sp, #0x10] + ldreq r6, [sp, #0x14] + mov r1, r3 + b _022DC968 +_022DC928: + mov r6, r6, lsl #1 + orr r6, r6, r7, lsr #31 + mov r7, r7, lsl #1 + cmp r6, lr + cmpeq r7, sl + ldrhi r6, [sp, #0x14] + ldr r0, [sp, #0x1c] + ldrhi r7, [sp, #0x10] + and r2, r0, r6 + mov r0, #0 + cmp r2, r0 + ldr r0, [sp, #0x18] + and r0, r0, r7 + cmpeq r0, r1 + bne _022DC978 + add r3, r3, #1 +_022DC968: + cmp r3, ip + blt _022DC928 + mov r7, #0 + mov r6, r7 +_022DC978: + ldr r0, [r4, #4] + ldr r1, [r4] + cmp r0, r6 + cmpeq r1, r7 + strne r7, [r4] + strne r6, [r4, #4] + mov r0, #0x3c + str r0, [r4, #8] + b _022DC9A4 +_022DC99C: + sub r0, r0, #1 + str r0, [r4, #8] +_022DC9A4: + ldrb r0, [sb, #0x14] + cmp r0, #0 + beq _022DCA0C + ldmia r4, {r0, r1} + cmp r1, #0 + cmpeq r0, #0 + beq _022DCA0C + bl ov29_022DC7E4 + ldr r1, _022DD08C ; =ov29_02353518 + mov r0, r0, lsl #0x10 + ldr r2, [r1] + mov r1, r0, asr #0x10 + ldrb r0, [r2, #0x6e8] + cmp r0, #0 + beq _022DCA0C + ldr r0, [sp, #0xc] + add r2, sb, #0x16 + str r0, [sp] + ldrb r3, [sb, #0x15] + add r0, sb, #0x1a + str r3, [sp, #4] + ldr r6, [sb, #4] + add r3, r0, r8, lsl #2 + str r6, [sp, #8] + ldrsh r0, [sb, #8] + bl ov29_022DD0A4 +_022DCA0C: + ldrb r0, [sb, #0x44] + cmp r0, #0 + beq _022DD084 + ldmia r4, {r0, r1} + cmp r1, #0 + cmpeq r0, #0 + mov r6, #0 + beq _022DD084 + bl ov29_022DC7E4 + mov r0, r0, lsl #0x10 + cmp r5, #0 + mov r7, r0, asr #0x10 + movne r6, #1 + bne _022DCB24 + ldr r0, _022DD090 ; =ov29_02350F8C + ldr r0, [r0, r7, lsl #3] + cmp r0, #0x10 + addls pc, pc, r0, lsl #2 + b _022DCB24 +_022DCA58: ; jump table + b _022DCB24 ; case 0 + b _022DCA9C ; case 1 + b _022DCA9C ; case 2 + b _022DCA9C ; case 3 + b _022DCA9C ; case 4 + b _022DCABC ; case 5 + b _022DCABC ; case 6 + b _022DCABC ; case 7 + b _022DCABC ; case 8 + b _022DCAE0 ; case 9 + b _022DCAE0 ; case 10 + b _022DCAE0 ; case 11 + b _022DCAE0 ; case 12 + b _022DCB04 ; case 13 + b _022DCB04 ; case 14 + b _022DCB04 ; case 15 + b _022DCB04 ; case 16 +_022DCA9C: + ldr r0, _022DD08C ; =ov29_02353518 + ldr r0, [r0] + ldr r0, [r0] + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #30 + adds r0, r1, r0, ror #30 + moveq r6, #1 + b _022DCB24 +_022DCABC: + ldr r0, _022DD08C ; =ov29_02353518 + ldr r0, [r0] + ldr r0, [r0] + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #30 + add r0, r1, r0, ror #30 + cmp r0, #1 + moveq r6, #1 + b _022DCB24 +_022DCAE0: + ldr r0, _022DD08C ; =ov29_02353518 + ldr r0, [r0] + ldr r0, [r0] + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #30 + add r0, r1, r0, ror #30 + cmp r0, #2 + moveq r6, #1 + b _022DCB24 +_022DCB04: + ldr r0, _022DD08C ; =ov29_02353518 + ldr r0, [r0] + ldr r0, [r0] + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #30 + add r0, r1, r0, ror #30 + cmp r0, #3 + moveq r6, #1 +_022DCB24: + cmp r6, #0 + beq _022DCC3C + ldmia r4, {r0, r1} + bl ov29_022DC7E4 + ldr r2, _022DD090 ; =ov29_02350F8C + ldr r1, _022DD08C ; =ov29_02353518 + ldr r2, [r2, r7, lsl #3] + ldr r3, [r1] + mov r1, #0xc + ldr r5, [r3, #0x6f4] + mul r6, r2, r1 + ldr sl, [r5, #4] + ldr r1, _022DD094 ; =ov29_02350F90 + add r4, sl, r6 + ldr r0, [r1, r0, lsl #3] + ldr r3, [r3] + ldrb sl, [sl, r6] + ldrb r6, [r4, #1] + mov r2, r3, asr #1 + add r2, r3, r2, lsr #30 + smulbb r6, sl, r6 + mov r0, r0, lsl #0x10 + str r0, [sp, #0x20] + ldrsh r1, [r4, #8] + ldrh sl, [sb, #0x4a] + mov r3, r8, lsl #0x10 + mov fp, r6, lsl #5 + mov r0, r2, asr #2 + mov r6, r3, lsr #0x10 + bl _s32_div_f + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + ldr r2, [r4, #4] + ldr r0, _022DD098 ; =OBJ_GRAPHICS_CONTROLS_PTR + mla r1, fp, r1, r2 + mov r2, sl, lsl #0x11 + mov r2, r2, asr #0xe + add r2, r2, #0x50 + ldr r0, [r0] + ldr r4, [r5, #0xc] + add r2, r2, r6, lsl #2 + mov r2, r2, lsl #0x10 + mov r3, fp + add r0, r0, #0x70 + add r1, r4, r1 + mov r2, r2, asr #0x10 + bl ChangeSimpleObjTexture + add r0, r6, sl, lsl #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + add r0, r0, #4 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + str r0, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r2, [r5, #0x14] + ldr r1, [sp, #0x20] + add r0, sp, #0x2c + add r1, r2, r1, lsr #10 + mov r2, #0 + mov r3, #0x10 + bl FillPaletteInitInfo + ldr r0, _022DD098 ; =OBJ_GRAPHICS_CONTROLS_PTR + ldrh r2, [sp, #0x34] + ldr r0, [r0] + add r1, sp, #0x2c + add r0, r0, #0x70 + bl LoadObjPalette +_022DCC3C: + ldr r6, _022DD08C ; =ov29_02353518 + ldr r2, _022DD090 ; =ov29_02350F8C + ldr r1, [r6] + ldr r3, [r2, r7, lsl #3] + ldr r1, [r1, #0x6f4] + ldrh r4, [r6, #0xc] + ldrsh r0, [sb, #0x4a] + add r2, r2, r7, lsl #3 + ldr r2, [r2, #4] + ldr r1, [r1, #4] + bic r4, r4, #0x100 + strh r4, [r6, #0xc] + ldrh r4, [r6, #0xc] + mov fp, r0, lsl #1 + mov sl, #0xc + bic r4, r4, #0x200 + strh r4, [r6, #0xc] + ldrh r4, [r6, #0xc] + mov r0, r0, lsl #3 + mla r1, r3, sl, r1 + bic r4, r4, #0xc00 + strh r4, [r6, #0xc] + ldrh r5, [r6, #0xc] + add fp, fp, #4 + str r2, [sp, #0x28] + bic r5, r5, #0x1000 + strh r5, [r6, #0xc] + ldrh sl, [r6, #0xc] + mov r5, r8, lsl #0x10 + add r5, fp, r5, asr #16 + bic sl, sl, #0x2000 + strh sl, [r6, #0xc] + ldrh sl, [r6, #0x10] + mov fp, r5, lsl #0x10 + add r0, r0, #0x50 + bic r5, sl, #0xc00 + strh r5, [r6, #0x10] + ldrh sl, [r6, #0x12] + mov r4, #0 + add r8, r0, r8, lsl #2 + bic sl, sl, #1 + strh sl, [r6, #0x12] + ldrh sl, [r6, #0x12] + mov r5, r4 + str r3, [sp, #0x24] + bic r2, sl, #2 + strh r2, [r6, #0x12] + ldrh r2, [r6, #0xe] + cmp r3, #0x10 + mov r0, fp, asr #0x10 + bic r2, r2, #0x3e00 + strh r2, [r6, #0xe] + addls pc, pc, r3, lsl #2 + b _022DCFAC +_022DCD14: ; jump table + b _022DCFAC ; case 0 + b _022DCD58 ; case 1 + b _022DCE14 ; case 2 + b _022DCE14 ; case 3 + b _022DCF50 ; case 4 + b _022DCEE0 ; case 5 + b _022DCE14 ; case 6 + b _022DCE14 ; case 7 + b _022DCDB0 ; case 8 + b _022DCE14 ; case 9 + b _022DCE14 ; case 10 + b _022DCE14 ; case 11 + b _022DCD58 ; case 12 + b _022DCE14 ; case 13 + b _022DCD58 ; case 14 + b _022DCE14 ; case 15 + b _022DCE78 ; case 16 +_022DCD58: + ldrh r2, [r6, #0xc] + bic r2, r2, #0xc000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xe] + bic r2, r2, #0xc000 + strh r2, [r6, #0xe] + ldrb r2, [r1, #1] + ldrb r4, [r1] + ldrsh r3, [sb, #0x24] + mov r1, r2, lsl #3 + mov r4, r4, lsl #3 + add r1, r1, r1, lsr #31 + sub r1, r3, r1, asr #1 + sub r1, r1, #0x10 + mov r2, r1, lsl #0x10 + ldrsh r3, [sb, #0x22] + add r1, r4, r4, lsr #31 + mov r4, r2, asr #0x10 + sub r1, r3, r1, asr #1 + mov r1, r1, lsl #0x10 + mov r5, r1, asr #0x10 + b _022DCFAC +_022DCDB0: + ldrh r2, [r6, #0xc] + bic r2, r2, #0xc000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xc] + orr r2, r2, #0x8000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xe] + bic r2, r2, #0xc000 + strh r2, [r6, #0xe] + ldrb r2, [r1, #1] + ldrb r4, [r1] + ldrsh r3, [sb, #0x24] + mov r1, r2, lsl #3 + mov r4, r4, lsl #3 + add r1, r1, r1, lsr #31 + sub r1, r3, r1, asr #1 + sub r1, r1, #0x10 + mov r2, r1, lsl #0x10 + ldrsh r3, [sb, #0x22] + add r1, r4, r4, lsr #31 + mov r4, r2, asr #0x10 + sub r1, r3, r1, asr #1 + mov r1, r1, lsl #0x10 + mov r5, r1, asr #0x10 + b _022DCFAC +_022DCE14: + ldrh r2, [r6, #0xc] + bic r2, r2, #0xc000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xe] + bic r2, r2, #0xc000 + strh r2, [r6, #0xe] + ldrh r2, [r6, #0xe] + orr r2, r2, #0x4000 + strh r2, [r6, #0xe] + ldrb r2, [r1, #1] + ldrb r4, [r1] + ldrsh r3, [sb, #0x24] + mov r1, r2, lsl #3 + mov r4, r4, lsl #3 + add r1, r1, r1, lsr #31 + sub r1, r3, r1, asr #1 + sub r1, r1, #0x10 + mov r2, r1, lsl #0x10 + ldrsh r3, [sb, #0x22] + add r1, r4, r4, lsr #31 + mov r4, r2, asr #0x10 + sub r1, r3, r1, asr #1 + mov r1, r1, lsl #0x10 + mov r5, r1, asr #0x10 + b _022DCFAC +_022DCE78: + ldrh r2, [r6, #0xc] + bic r2, r2, #0xc000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xe] + bic r2, r2, #0xc000 + strh r2, [r6, #0xe] + ldrh r2, [r6, #0xe] + orr r2, r2, #0x4000 + strh r2, [r6, #0xe] + ldrb r2, [r1] + ldrb r1, [r1, #1] + ldrsh r4, [sb, #0x22] + mov r3, r2, lsl #3 + mov r2, r1, lsl #3 + add r1, r3, r3, lsr #31 + sub r1, r4, r1, asr #1 + add r1, r1, #8 + mov r1, r1, lsl #0x10 + ldrsh r3, [sb, #0x24] + add r2, r2, r2, lsr #31 + mov r5, r1, asr #0x10 + sub r1, r3, r2, asr #1 + sub r1, r1, #0x10 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 + b _022DCFAC +_022DCEE0: + ldrh r2, [r6, #0xc] + bic r2, r2, #0xc000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xc] + orr r2, r2, #0x4000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xe] + bic r2, r2, #0xc000 + strh r2, [r6, #0xe] + ldrh r2, [r6, #0xe] + orr r2, r2, #0x8000 + strh r2, [r6, #0xe] + ldrb r2, [r1, #1] + ldrb r4, [r1] + ldrsh r3, [sb, #0x24] + mov r1, r2, lsl #3 + mov r4, r4, lsl #3 + add r1, r1, r1, lsr #31 + sub r1, r3, r1, asr #1 + sub r1, r1, #0x10 + mov r2, r1, lsl #0x10 + ldrsh r3, [sb, #0x22] + add r1, r4, r4, lsr #31 + mov r4, r2, asr #0x10 + sub r1, r3, r1, asr #1 + mov r1, r1, lsl #0x10 + mov r5, r1, asr #0x10 + b _022DCFAC +_022DCF50: + ldrh r2, [r6, #0xc] + bic r2, r2, #0xc000 + strh r2, [r6, #0xc] + ldrh r2, [r6, #0xe] + bic r2, r2, #0xc000 + strh r2, [r6, #0xe] + ldrh r2, [r6, #0xe] + orr r2, r2, #0x8000 + strh r2, [r6, #0xe] + ldrb r2, [r1] + ldrb r1, [r1, #1] + ldrsh r4, [sb, #0x26] + mov r3, r2, lsl #3 + mov r2, r1, lsl #3 + add r1, r3, r3, lsr #31 + sub r1, r4, r1, asr #1 + mov r1, r1, lsl #0x10 + ldrsh r3, [sb, #0x28] + add r2, r2, r2, lsr #31 + mov r5, r1, asr #0x10 + sub r1, r3, r2, asr #1 + mov r1, r1, lsl #0x10 + mov r4, r1, asr #0x10 +_022DCFAC: + ldr r3, _022DD08C ; =ov29_02353518 + mov r1, #0x400 + ldrh r6, [r3, #0x10] + rsb r1, r1, #0 + and r2, r8, r1, lsr #22 + and r6, r6, r1 + strh r6, [r3, #0x10] + ldrh r8, [r3, #0x10] + mov r6, r0, lsl #0x1c + cmp r7, #0x20 + orr r2, r8, r2 + strh r2, [r3, #0x10] + ldrh r8, [r3, #0x10] + add r0, r1, #0x200 + ldr r2, _022DD09C ; =0xFFFF000F + bic r7, r8, #0xf000 + strh r7, [r3, #0x10] + ldrh r7, [r3, #0x10] + orr r6, r7, r6, lsr #16 + strh r6, [r3, #0x10] + ldrh r6, [r3, #0xe] + ldrsh r7, [sb, #0x46] + and r0, r6, r0 + strh r0, [r3, #0xe] + add r0, r7, r5 + ldrh r6, [r3, #0xe] + and r0, r0, r1, lsr #23 + orr r0, r6, r0 + strh r0, [r3, #0xe] + ldrh r0, [r3, #0x12] + ldrsh r5, [sb, #0x48] + and r0, r0, r2 + strh r0, [r3, #0x12] + add r0, r5, r4 + ldrh r1, [r3, #0x12] + mov r0, r0, lsl #0x14 + orr r0, r1, r0, lsr #16 + strh r0, [r3, #0x12] + ldrneh r0, [r3, #6] + bicne r0, r0, #0x3e00 + strneh r0, [r3, #6] + bne _022DD06C + ldrh r0, [r3, #0xe] + bic r0, r0, #0x3e00 + strh r0, [r3, #0xe] + ldrh r0, [r3, #0xe] + orr r0, r0, #0x2000 + strh r0, [r3, #0xe] +_022DD06C: + ldr r0, _022DD098 ; =OBJ_GRAPHICS_CONTROLS_PTR + ldr r1, _022DD0A0 ; =ov29_02353524 + ldr r0, [r0] + mov r2, #1 + add r0, r0, #0x70 + bl AddSimpleObjToOam +_022DD084: + add sp, sp, #0x3c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022DD08C: .word ov29_02353518 +_022DD090: .word ov29_02350F8C +_022DD094: .word ov29_02350F90 +_022DD098: .word OBJ_GRAPHICS_CONTROLS_PTR +_022DD09C: .word 0xFFFF000F +_022DD0A0: .word ov29_02353524 + arm_func_end ov29_022DC820 + + arm_func_start ov29_022DD0A4 +ov29_022DD0A4: ; 0x022DD0A4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + ldr sb, _022DD500 ; =ov29_02350F8C + ldr r6, _022DD504 ; =ov29_02353518 + ldr r0, [sb, r1, lsl #3] + mov lr, #0xc + ldr r4, [r6] + mul r7, r0, lr + ldr r5, [r4, #0x6f4] + ldrh r4, [r6, #8] + ldr r8, [r5, #4] + add r5, sb, r1, lsl #3 + add sb, r8, r7 + ldr sl, [r5, #4] + ldrsh fp, [sb, #0xa] + bic r4, r4, #0xc00 + ldr ip, [sp, #0x30] + strh r4, [r6, #8] + ldr r4, [sp, #0x34] + ldrh r5, [r6, #8] + mov r4, r4, lsl #0x1e + str r0, [sp] + orr r4, r5, r4, lsr #20 + strh r4, [r6, #8] + ldrb r5, [r8, r7] + ldrb r4, [sb, #1] + ldrsh sb, [r2] + mov r7, r5, lsl #3 + mov r5, r4, lsl #3 + add r4, r7, r7, lsr #31 + sub sb, sb, r4, asr #1 + ldrsh r8, [ip] + ldrsh r7, [r2, #2] + add r5, r5, r5, lsr #31 + sub r8, sb, r8 + ldrsh sb, [r3] + sub r5, r7, r5, asr #1 + ldrsh r4, [ip, #2] + ldrsh r3, [r3, #2] + str sl, [sp, #4] + sub r4, r5, r4 + add r4, r3, r4 + add r5, sb, r8 + sub r3, lr, #0x2c + cmp r5, r3 + subge r8, lr, #0x2c + add r7, fp, #0x190 + sub r3, r4, #0x10 + cmpge r4, r8 + blt _022DD4F8 + cmp r5, #0xff + cmplt r4, #0xc0 + bge _022DD4F8 + ldrh r8, [r6, #4] + cmp r0, #0x10 + bic r8, r8, #0x2000 + strh r8, [r6, #4] + ldrh r8, [r6, #4] + orr r8, r8, #0x2000 + strh r8, [r6, #4] + addls pc, pc, r0, lsl #2 + b _022DD468 +_022DD19C: ; jump table + b _022DD468 ; case 0 + b _022DD1E0 ; case 1 + b _022DD2AC ; case 2 + b _022DD2AC ; case 3 + b _022DD400 ; case 4 + b _022DD388 ; case 5 + b _022DD2AC ; case 6 + b _022DD2AC ; case 7 + b _022DD240 ; case 8 + b _022DD2AC ; case 9 + b _022DD2AC ; case 10 + b _022DD2AC ; case 11 + b _022DD1E0 ; case 12 + b _022DD2AC ; case 13 + b _022DD1E0 ; case 14 + b _022DD2AC ; case 15 + b _022DD318 ; case 16 +_022DD1E0: + ldrh r8, [r6, #4] + ldr r4, _022DD508 ; =0x000001FF + sub r0, lr, #0x20c + bic r8, r8, #0xc000 + strh r8, [r6, #4] + ldrh r8, [r6, #6] + and r5, r5, r4 + ldr r4, _022DD50C ; =0xFFFF000F + bic r8, r8, #0xc000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + mov r3, r3, lsl #0x14 + and r0, r8, r0 + strh r0, [r6, #6] + ldrh r0, [r6, #6] + orr r0, r0, r5 + strh r0, [r6, #6] + ldrh r0, [r6, #0xa] + and r0, r0, r4 + strh r0, [r6, #0xa] + ldrh r0, [r6, #0xa] + orr r0, r0, r3, lsr #16 + strh r0, [r6, #0xa] + b _022DD468 +_022DD240: + ldrh r8, [r6, #4] + ldr r4, _022DD508 ; =0x000001FF + sub r0, lr, #0x20c + bic r8, r8, #0xc000 + strh r8, [r6, #4] + ldrh r8, [r6, #4] + and r5, r5, r4 + ldr r4, _022DD50C ; =0xFFFF000F + orr r8, r8, #0x8000 + strh r8, [r6, #4] + ldrh r8, [r6, #6] + mov r3, r3, lsl #0x14 + bic r8, r8, #0xc000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + and r0, r8, r0 + strh r0, [r6, #6] + ldrh r0, [r6, #6] + orr r0, r0, r5 + strh r0, [r6, #6] + ldrh r0, [r6, #0xa] + and r0, r0, r4 + strh r0, [r6, #0xa] + ldrh r0, [r6, #0xa] + orr r0, r0, r3, lsr #16 + strh r0, [r6, #0xa] + b _022DD468 +_022DD2AC: + ldrh r8, [r6, #4] + ldr r4, _022DD508 ; =0x000001FF + sub r0, lr, #0x20c + bic r8, r8, #0xc000 + strh r8, [r6, #4] + ldrh r8, [r6, #6] + and r5, r5, r4 + ldr r4, _022DD50C ; =0xFFFF000F + bic r8, r8, #0xc000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + mov r3, r3, lsl #0x14 + orr r8, r8, #0x4000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + and r0, r8, r0 + strh r0, [r6, #6] + ldrh r0, [r6, #6] + orr r0, r0, r5 + strh r0, [r6, #6] + ldrh r0, [r6, #0xa] + and r0, r0, r4 + strh r0, [r6, #0xa] + ldrh r0, [r6, #0xa] + orr r0, r0, r3, lsr #16 + strh r0, [r6, #0xa] + b _022DD468 +_022DD318: + ldrh r8, [r6, #4] + sub r0, lr, #0x20c + ldr r4, _022DD508 ; =0x000001FF + bic r8, r8, #0xc000 + strh r8, [r6, #4] + ldrh r8, [r6, #6] + add r5, r5, #8 + and r5, r5, r4 + bic r4, r8, #0xc000 + strh r4, [r6, #6] + ldrh r8, [r6, #6] + ldr r4, _022DD50C ; =0xFFFF000F + mov r3, r3, lsl #0x14 + orr r8, r8, #0x4000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + and r0, r8, r0 + strh r0, [r6, #6] + ldrh r0, [r6, #6] + orr r0, r0, r5 + strh r0, [r6, #6] + ldrh r0, [r6, #0xa] + and r0, r0, r4 + strh r0, [r6, #0xa] + ldrh r0, [r6, #0xa] + orr r0, r0, r3, lsr #16 + strh r0, [r6, #0xa] + b _022DD468 +_022DD388: + ldrh r8, [r6, #4] + ldr r4, _022DD508 ; =0x000001FF + sub r0, lr, #0x20c + bic r8, r8, #0xc000 + strh r8, [r6, #4] + ldrh r8, [r6, #4] + and r5, r5, r4 + ldr r4, _022DD50C ; =0xFFFF000F + orr r8, r8, #0x4000 + strh r8, [r6, #4] + ldrh r8, [r6, #6] + mov r3, r3, lsl #0x14 + bic r8, r8, #0xc000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + orr r8, r8, #0x8000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + and r0, r8, r0 + strh r0, [r6, #6] + ldrh r0, [r6, #6] + orr r0, r0, r5 + strh r0, [r6, #6] + ldrh r0, [r6, #0xa] + and r0, r0, r4 + strh r0, [r6, #0xa] + ldrh r0, [r6, #0xa] + orr r0, r0, r3, lsr #16 + strh r0, [r6, #0xa] + b _022DD468 +_022DD400: + ldrh r8, [r6, #4] + ldr r3, _022DD508 ; =0x000001FF + sub r0, lr, #0x20c + bic r8, r8, #0xc000 + strh r8, [r6, #4] + ldrh r8, [r6, #6] + and r5, r5, r3 + ldr r3, _022DD50C ; =0xFFFF000F + bic r8, r8, #0xc000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + mov r4, r4, lsl #0x14 + orr r8, r8, #0x8000 + strh r8, [r6, #6] + ldrh r8, [r6, #6] + and r0, r8, r0 + strh r0, [r6, #6] + ldrh r0, [r6, #6] + orr r0, r0, r5 + strh r0, [r6, #6] + ldrh r0, [r6, #0xa] + and r0, r0, r3 + strh r0, [r6, #0xa] + ldrh r0, [r6, #0xa] + orr r0, r0, r4, lsr #16 + strh r0, [r6, #0xa] +_022DD468: + ldr r3, _022DD504 ; =ov29_02353518 + mov r0, #0x400 + ldrh r5, [r3, #8] + rsb r0, r0, #0 + ldr r4, [sp, #4] + and r5, r5, r0 + strh r5, [r3, #8] + ldrh r6, [r3, #8] + and r5, r7, r0, lsr #22 + mov r0, r4, lsl #0x1c + orr r4, r6, r5 + strh r4, [r3, #8] + ldrh r4, [r3, #8] + cmp r1, #0x20 + bic r1, r4, #0xf000 + strh r1, [r3, #8] + ldrh r1, [r3, #8] + orr r0, r1, r0, lsr #16 + strh r0, [r3, #8] + ldrh r0, [r3, #6] + ldr r1, _022DD510 ; =ov29_0235351C + biceq r0, r0, #0x3e00 + streqh r0, [r3, #6] + ldreqh r0, [r3, #6] + orreq r0, r0, #0x2000 + bicne r0, r0, #0x3e00 + strh r0, [r3, #6] + ldrsh r3, [r2, #2] + ldrsh r0, [ip, #2] + ldr r2, _022DD514 ; =OBJ_GRAPHICS_CONTROLS_PTR + sub r0, r3, r0 + add r0, r0, r0, lsr #31 + mov r3, r0, asr #1 + ldr r0, [r2] + add r2, r3, #1 + bl AddSimpleObjToOam +_022DD4F8: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022DD500: .word ov29_02350F8C +_022DD504: .word ov29_02353518 +_022DD508: .word 0x000001FF +_022DD50C: .word 0xFFFF000F +_022DD510: .word ov29_0235351C +_022DD514: .word OBJ_GRAPHICS_CONTROLS_PTR + arm_func_end ov29_022DD0A4 + + arm_func_start ov29_022DD518 +ov29_022DD518: ; 0x022DD518 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr r2, _022DD5AC ; =ov29_02353518 + mov r1, #0xc + ldr r3, [r2] + mul r2, r0, r1 + ldr r5, [r3, #0x6f4] + ldr r1, [r3] + ldr r3, [r5, #4] + mov r0, r1, asr #1 + add r4, r3, r2 + add r0, r1, r0, lsr #30 + ldrb r3, [r3, r2] + ldrb r2, [r4, #1] + ldrsh r1, [r4, #8] + mov r0, r0, asr #2 + smulbb r2, r3, r2 + mov r6, r2, lsl #5 + bl _s32_div_f + mov r0, #1 + str r0, [sp] + mov r0, #0xe + str r0, [sp, #4] + ldr r3, [r4, #4] + ldrsh r2, [r4, #0xa] + ldr r0, _022DD5B0 ; =OBJ_GRAPHICS_CONTROLS_PTR + mla r4, r6, r1, r3 + add r1, r2, #0x190 + ldr r5, [r5, #0xc] + mov r2, r1, lsl #0x10 + ldr r0, [r0] + mov r3, r6 + add r1, r5, r4 + mov r2, r2, asr #0x10 + bl ChangeSimpleObjTexture + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022DD5AC: .word ov29_02353518 +_022DD5B0: .word OBJ_GRAPHICS_CONTROLS_PTR + arm_func_end ov29_022DD518 + + arm_func_start ov29_022DD5B4 +ov29_022DD5B4: ; 0x022DD5B4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + ldr r2, _022DD758 ; =ov29_02353518 + ldr r0, [r2] + cmp r0, #0 + bne _022DD60C + ldr r0, _022DD75C ; =ov29_0236CEF0 + ldr r1, _022DD760 ; =0x000006FC + str r0, [r2] + bl MemZero + ldr r0, _022DD764 ; =ov29_0236D5EC + mov r1, #0x6000 + bl MemZero + ldr r0, _022DD764 ; =ov29_0236D5EC + ldr r1, _022DD768 ; =ov29_0235109C + bl sub_02008BF4 + ldr r0, _022DD758 ; =ov29_02353518 + ldr r1, _022DD764 ; =ov29_0236D5EC + ldr r0, [r0] + add r0, r0, #0x2f4 + add r0, r0, #0x400 + bl HandleSir0Translation +_022DD60C: + ldr r0, _022DD758 ; =ov29_02353518 + mov r2, #1 + ldr r1, [r0] + mov sb, #0 + strb r2, [r1, #0x6e8] + ldr r1, [r0] + ldr r4, _022DD76C ; =OBJ_GRAPHICS_CONTROLS_PTR + str sb, [r1] + ldr r0, [r0] + mov r8, #0xe0 + ldr sl, [r0, #0x6f4] + mov r7, #0xff + add r6, sp, #8 + mov r5, r2 + mov fp, #0x10 +_022DD648: + str r8, [sp] + str r7, [sp, #4] + ldr r1, [sl, #0x14] + mov r0, r6 + mov r2, r5 + mov r3, fp + add r1, r1, sb, lsl #6 + bl FillPaletteInitInfo + mov r2, sb, lsl #0x10 + ldr r0, [r4] + mov r1, r6 + mov r2, r2, lsr #0x10 + bl LoadObjPalette + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 + cmp sb, #0x10 + blt _022DD648 + mov r0, #1 + mov r1, #0 + bl ov29_022DD518 + mov r0, #2 + mov r1, #0 + bl ov29_022DD518 + mov r0, #3 + mov r1, #0 + bl ov29_022DD518 + mov r0, #4 + mov r1, #0 + bl ov29_022DD518 + mov r0, #5 + mov r1, #0 + bl ov29_022DD518 + mov r0, #6 + mov r1, #0 + bl ov29_022DD518 + mov r0, #7 + mov r1, #0 + bl ov29_022DD518 + mov r0, #8 + mov r1, #0 + bl ov29_022DD518 + mov r0, #9 + mov r1, #0 + bl ov29_022DD518 + mov r0, #0xa + mov r1, #0 + bl ov29_022DD518 + mov r0, #0xb + mov r1, #0 + bl ov29_022DD518 + mov r0, #0xc + mov r1, #0 + bl ov29_022DD518 + mov r0, #0xd + mov r1, #0 + bl ov29_022DD518 + mov r0, #0xe + mov r1, #0 + bl ov29_022DD518 + mov r0, #0xf + mov r1, #0 + bl ov29_022DD518 + mov r0, #0x10 + mov r1, #0 + bl ov29_022DD518 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022DD758: .word ov29_02353518 +_022DD75C: .word ov29_0236CEF0 +_022DD760: .word 0x000006FC +_022DD764: .word ov29_0236D5EC +_022DD768: .word ov29_0235109C +_022DD76C: .word OBJ_GRAPHICS_CONTROLS_PTR + arm_func_end ov29_022DD5B4 + + arm_func_start ov29_022DD770 +ov29_022DD770: ; 0x022DD770 + stmdb sp!, {r3, lr} + ldr r0, _022DD7A8 ; =ov29_02353518 + mov r1, #8 + ldr r0, [r0] + add r0, r0, #0x2ec + add r0, r0, #0x400 + bl MemZero + ldr r0, _022DD7A8 ; =ov29_02353518 + mov r2, #0 + ldr r1, [r0] + str r2, [r1, #0x6f4] + ldr r0, [r0] + str r2, [r0, #0x6f8] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DD7A8: .word ov29_02353518 + arm_func_end ov29_022DD770 + + arm_func_start ov29_022DD7AC +ov29_022DD7AC: ; 0x022DD7AC + stmdb sp!, {r3, lr} + ldr r0, _022DD7D4 ; =ov29_02353518 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl ov29_022DD770 + ldr r0, _022DD7D4 ; =ov29_02353518 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DD7D4: .word ov29_02353518 + arm_func_end ov29_022DD7AC + + arm_func_start ov29_022DD7D8 +ov29_022DD7D8: ; 0x022DD7D8 + stmdb sp!, {r4, r5, r6, lr} + ldr ip, _022DD824 ; =ov29_02353518 + mov r6, r1 + ldr r1, [ip] + mov r5, r2 + mov r4, r3 + cmp r1, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl ov29_022DC78C + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + strh r6, [r0, #8] + str r5, [r0, #0xc] + ldrb r2, [sp, #0x10] + str r4, [r0, #0x10] + mov r1, #0 + strb r2, [r0, #0x14] + strb r1, [r0, #0x44] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022DD824: .word ov29_02353518 + arm_func_end ov29_022DD7D8 + + arm_func_start ov29_022DD828 +ov29_022DD828: ; 0x022DD828 + ldr r1, _022DD838 ; =ov29_02353518 + ldr r1, [r1] + strb r0, [r1, #0x6e8] + bx lr + .align 2, 0 +_022DD838: .word ov29_02353518 + arm_func_end ov29_022DD828 + + arm_func_start ov29_022DD83C +ov29_022DD83C: ; 0x022DD83C + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _022DD8B0 ; =ov29_02353518 + ldr r4, [sp, #0x14] + ldr r1, [r1] + mov r6, r2 + mov r5, r3 + cmp r1, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl ov29_022DC78C + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r1, r6, lsl #0x10 + mov r2, #1 + strb r2, [r0, #0x44] + mov r1, r1, asr #0x10 + strh r1, [r0, #0x4a] + strh r1, [r0, #0x4c] + ldr r1, [sp, #0x10] + strh r5, [r0, #0x46] + strh r1, [r0, #0x48] + ldrh r1, [r4] + strh r1, [r0, #0x22] + ldrh r1, [r4, #2] + strh r1, [r0, #0x24] + ldrh r1, [r4, #0xc] + strh r1, [r0, #0x26] + ldrh r1, [r4, #0xe] + strh r1, [r0, #0x28] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022DD8B0: .word ov29_02353518 + arm_func_end ov29_022DD83C + + arm_func_start ov29_022DD8B4 +ov29_022DD8B4: ; 0x022DD8B4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r1, _022DDA50 ; =ov29_02353518 + mov r4, r0 + ldr r0, [r1] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [r0] + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #30 + add r0, r1, r0, ror #30 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _022DD9C4 +_022DD8E8: ; jump table + b _022DD8F8 ; case 0 + b _022DD92C ; case 1 + b _022DD960 ; case 2 + b _022DD994 ; case 3 +_022DD8F8: + mov r0, #1 + mov r1, r0 + bl ov29_022DD518 + mov r0, #2 + mov r1, #1 + bl ov29_022DD518 + mov r0, #3 + mov r1, #1 + bl ov29_022DD518 + mov r0, #4 + mov r1, #1 + bl ov29_022DD518 + b _022DD9C4 +_022DD92C: + mov r0, #5 + mov r1, #1 + bl ov29_022DD518 + mov r0, #6 + mov r1, #1 + bl ov29_022DD518 + mov r0, #7 + mov r1, #1 + bl ov29_022DD518 + mov r0, #8 + mov r1, #1 + bl ov29_022DD518 + b _022DD9C4 +_022DD960: + mov r0, #9 + mov r1, #1 + bl ov29_022DD518 + mov r0, #0xa + mov r1, #1 + bl ov29_022DD518 + mov r0, #0xb + mov r1, #1 + bl ov29_022DD518 + mov r0, #0xc + mov r1, #1 + bl ov29_022DD518 + b _022DD9C4 +_022DD994: + mov r0, #0xd + mov r1, #1 + bl ov29_022DD518 + mov r0, #0xe + mov r1, #1 + bl ov29_022DD518 + mov r0, #0xf + mov r1, #1 + bl ov29_022DD518 + mov r0, #0x10 + mov r1, #1 + bl ov29_022DD518 +_022DD9C4: + mov sb, #0 + ldr r6, _022DDA50 ; =ov29_02353518 + mov r8, sb + mov fp, #1 + mov r7, sb + mov r5, #0x50 +_022DD9DC: + mul r1, sb, r5 + ldr r2, [r6] + add r0, r2, r1 + ldrb r0, [r0, #4] + cmp r0, #0 + beq _022DDA20 + add r0, r2, #4 + add sl, r0, r1 + mov r0, sl + mov r1, r8 + mov r2, r4 + bl ov29_022DC820 + mov r0, sl + mov r1, fp + mov r2, r4 + bl ov29_022DC820 + strb r7, [sl, #0x44] +_022DDA20: + add sb, sb, #1 + cmp sb, #0x16 + blt _022DD9DC + ldr r0, _022DDA50 ; =ov29_02353518 + mov r2, #0 + ldr r1, [r0] + str r2, [r1, #0x6e4] + ldr r1, [r0] + ldr r0, [r1] + add r0, r0, #1 + str r0, [r1] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022DDA50: .word ov29_02353518 + arm_func_end ov29_022DD8B4 + + arm_func_start ov29_022DDA54 +ov29_022DDA54: ; 0x022DDA54 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r4, _022DDB60 ; =ov29_02353518 + mov r7, r0 + ldr ip, [r4] + mov r6, r1 + mov r5, r2 + mov r4, r3 + cmp ip, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + bl ov29_022DC78C + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, _022DDB60 ; =ov29_02353518 + mov r3, #0 + ldr ip, [r0] + mov r0, #0x50 + b _022DDAB8 +_022DDA98: + mul r2, r3, r0 + add r1, ip, r2 + ldrb r1, [r1, #4] + cmp r1, #0 + addeq r0, ip, #4 + addeq r1, r0, r2 + beq _022DDAC4 + add r3, r3, #1 +_022DDAB8: + cmp r3, #0x16 + blt _022DDA98 + mov r1, #0 +_022DDAC4: + cmp r1, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, #1 + strb r0, [r1] + str r7, [r1, #4] + strh r6, [r1, #8] + mov r0, #0 + str r0, [r1, #0xc] + str r0, [r1, #0x10] + ldrh r3, [r5] + ldr r2, _022DDB64 ; =ov29_02350F88 + strh r3, [r1, #0x16] + ldrh r3, [r5, #2] + strh r3, [r1, #0x18] + strb r4, [r1, #0x15] + ldrh r3, [r2, #2] + ldrh r4, [r2] + strh r3, [sp, #2] + mov r3, r3 + strh r4, [r1, #0x1e] + strh r3, [r1, #0x20] + ldrh r2, [r1, #0x1e] + strh r4, [sp] + strh r2, [r1, #0x1a] + ldrh r2, [r1, #0x20] + strh r2, [r1, #0x1c] + strh r4, [r1, #0x26] + strh r3, [r1, #0x28] + ldrh r2, [r1, #0x26] + strh r2, [r1, #0x22] + ldrh r2, [r1, #0x28] + strh r2, [r1, #0x24] + str r0, [r1, #0x2c] + str r0, [r1, #0x30] + str r0, [r1, #0x34] + str r0, [r1, #0x38] + str r0, [r1, #0x3c] + str r0, [r1, #0x40] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022DDB60: .word ov29_02353518 +_022DDB64: .word ov29_02350F88 + arm_func_end ov29_022DDA54 + + arm_func_start ov29_022DDB68 +ov29_022DDB68: ; 0x022DDB68 + stmdb sp!, {r3, lr} + ldr r1, _022DDB94 ; =ov29_02353518 + ldr r1, [r1] + cmp r1, #0 + ldmeqia sp!, {r3, pc} + bl ov29_022DC78C + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r1, #0x50 + bl MemZero + ldmia sp!, {r3, pc} + .align 2, 0 +_022DDB94: .word ov29_02353518 + arm_func_end ov29_022DDB68 + + arm_func_start ov29_022DDB98 +ov29_022DDB98: ; 0x022DDB98 + stmdb sp!, {r4, r5, r6, lr} + ldr r4, _022DDBFC ; =ov29_02353518 + mov r6, r1 + ldr r1, [r4] + mov r4, r2 + mov r5, r3 + cmp r1, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl ov29_022DC78C + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldrh r1, [r6] + strh r1, [r0, #0x16] + ldrh r1, [r6, #2] + strh r1, [r0, #0x18] + strb r5, [r0, #0x15] + ldrh r1, [r4] + strh r1, [r0, #0x1a] + ldrh r1, [r4, #2] + strh r1, [r0, #0x1c] + ldrh r1, [r4, #0xc] + strh r1, [r0, #0x1e] + ldrh r1, [r4, #0xe] + strh r1, [r0, #0x20] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022DDBFC: .word ov29_02353518 + arm_func_end ov29_022DDB98 + + arm_func_start ov29_022DDC00 +ov29_022DDC00: ; 0x022DDC00 + stmdb sp!, {r3, lr} + ldr r0, _022DDC8C ; =0x027E0068 + mov r1, #0x2000 + bl MemZero + ldr r1, _022DDC8C ; =0x027E0068 + ldr r0, _022DDC90 ; =ov29_023735EC + ldr r3, _022DDC94 ; =ov29_02373690 + ldr r2, _022DDC98 ; =ov29_023735FC + mov lr, #1 + str r1, [r0, #0x10] +_022DDC28: + sub r0, lr, #1 + add r0, r0, r0, lsl #1 + add r1, lr, #1 + add ip, r3, r0, lsl #12 + mov r0, r1, lsl #0x10 + str ip, [r2, lr, lsl #2] + mov lr, r0, asr #0x10 + cmp lr, #4 + blt _022DDC28 + mov r0, #0 + ldr r2, _022DDC9C ; =ov29_0237360C + mov r1, r0 +_022DDC58: + add r0, r0, #1 + mov r0, r0, lsl #0x10 + str r1, [r2] + mov r0, r0, asr #0x10 + str r1, [r2, #4] + cmp r0, #4 + add r2, r2, #0x20 + blt _022DDC58 + ldr r0, _022DDC90 ; =ov29_023735EC + str r1, [r0, #0xc] + str r1, [r0, #8] + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DDC8C: .word 0x027E0068 +_022DDC90: .word ov29_023735EC +_022DDC94: .word ov29_02373690 +_022DDC98: .word ov29_023735FC +_022DDC9C: .word ov29_0237360C + arm_func_end ov29_022DDC00 + + arm_func_start ov29_022DDCA0 +ov29_022DDCA0: ; 0x022DDCA0 + bx lr + arm_func_end ov29_022DDCA0 + + arm_func_start ov29_022DDCA4 +ov29_022DDCA4: ; 0x022DDCA4 + stmdb sp!, {r4, r5, r6, lr} + ldr r4, _022DDD40 ; =ov29_023735FC + ldr r6, _022DDD44 ; =ov29_0237360C + ldr r5, [r4, r0, lsl #2] + add r4, r6, r0, lsl #5 + stmib r4, {r1, r5} + cmp r0, #0 + ldreq r5, _022DDD48 ; =0x00001FFC + ldr ip, _022DDD40 ; =ov29_023735FC + ldrne r5, _022DDD4C ; =0x00002FFC + mov lr, #0xff + str r5, [r4, #0x14] + ldr r5, [ip, r0, lsl #2] + cmp r2, #0 + strb lr, [r5] + ldr r6, [ip, r0, lsl #2] + ldr r5, [r4, #0x14] + add r5, r6, r5 + strb lr, [r5, #3] + ldr r6, [ip, r0, lsl #2] + ldr r5, [r4, #0x14] + add r5, r6, r5 + strb lr, [r5, #2] + ldr ip, [ip, r0, lsl #2] + ldr r0, [r4, #0x14] + add r0, ip, r0 + strb lr, [r0, #1] + ldr ip, [r4, #8] + ldr r0, [r4, #0x14] + add r0, ip, r0 + str r0, [r4, #0xc] + str r1, [r4, #0x10] + str r2, [r4, #0x18] + str r3, [r4, #0x1c] + beq _022DDD34 + blx r2 +_022DDD34: + mov r0, #1 + str r0, [r4] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022DDD40: .word ov29_023735FC +_022DDD44: .word ov29_0237360C +_022DDD48: .word 0x00001FFC +_022DDD4C: .word 0x00002FFC + arm_func_end ov29_022DDCA4 + + arm_func_start ov29_022DDD50 +ov29_022DDD50: ; 0x022DDD50 + stmdb sp!, {r3, lr} + mov r3, r2 + movs lr, r0 + mov ip, r1 + ldmeqia sp!, {r3, pc} + ldr r0, _022DDDA0 ; =ov29_0237360C + mvn r1, #0 + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + rsb r0, r0, #0 + cmp r0, r1 + ldmeqia sp!, {r3, pc} + mov r1, lr + mov r2, ip + bl ov29_022DDCA4 + ldmia sp!, {r3, pc} + .align 2, 0 +_022DDDA0: .word ov29_0237360C + arm_func_end ov29_022DDD50 + + arm_func_start ov29_022DDDA4 +ov29_022DDDA4: ; 0x022DDDA4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + movs r4, r0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r7, #0 + ldr r6, _022DDDFC ; =ov29_0237360C + mov r5, r7 +_022DDDBC: + ldr r0, [r6, #4] + cmp r0, r4 + bne _022DDDE0 + ldr r0, [r6, #0x1c] + cmp r0, #0 + beq _022DDDD8 + blx r0 +_022DDDD8: + str r5, [r6] + str r5, [r6, #4] +_022DDDE0: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #4 + add r6, r6, #0x20 + blt _022DDDBC + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022DDDFC: .word ov29_0237360C + arm_func_end ov29_022DDDA4 + + arm_func_start ov29_022DDE00 +ov29_022DDE00: ; 0x022DDE00 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, #0 + b _022DDE18 +_022DDE10: + bl ov29_022DDEF8 + add r4, r4, #1 +_022DDE18: + cmp r4, r5 + blt _022DDE10 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_022DDE00 + + arm_func_start ov29_022DDE24 +ov29_022DDE24: ; 0x022DDE24 + ldr ip, _022DDE2C ; =ov29_022DDE30 + bx ip + .align 2, 0 +_022DDE2C: .word ov29_022DDE30 + arm_func_end ov29_022DDE24 + + arm_func_start ov29_022DDE30 +ov29_022DDE30: ; 0x022DDE30 + stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr} + ldr r0, _022DDEDC ; =ov29_023735F8 + mov r1, sp + str r1, [r0] + ldr r1, _022DDEE0 ; =ov29_023735EC + mov r2, #0 + str r2, [r1] + ldr r3, _022DDEE4 ; =ov29_023510B8 + ldr r4, [r3] + ldr r3, _022DDEE8 ; =ov29_0237360C +_022DDE58: + ldrh r5, [r3] + cmp r5, #1 + beq _022DDE7C + cmp r5, #2 + beq _022DDE7C + add r2, r2, #1 + add r3, r3, #0x20 + cmp r2, r4 + blt _022DDE58 +_022DDE7C: + str r2, [r1] + cmp r2, r4 + bge _022DDED8 + ldr r4, _022DDEEC ; =ov29_0237368C + str r2, [r4] + ldr r6, _022DDEF0 ; =ov29_023735F4 + ldr r7, [r3, #0xc] + str r7, [r6] + ldr r6, _022DDEF4 ; =ov29_023735F0 + ldr r7, [r3, #0x10] + str r7, [r6] + cmp r5, #2 + bne _022DDEC0 + ldr r6, _022DDEF0 ; =ov29_023735F4 + ldr sp, [r6] + ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} +_022DDEBC: + b _022DDED8 +_022DDEC0: + ldr r6, _022DDEF0 ; =ov29_023735F4 + ldr sp, [r6] + ldr r7, _022DDEF4 ; =ov29_023735F0 + ldr r2, [r7] + bx r2 +_022DDED4: + b _022DDED8 +_022DDED8: + ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} + .align 2, 0 +_022DDEDC: .word ov29_023735F8 +_022DDEE0: .word ov29_023735EC +_022DDEE4: .word ov29_023510B8 +_022DDEE8: .word ov29_0237360C +_022DDEEC: .word ov29_0237368C +_022DDEF0: .word ov29_023735F4 +_022DDEF4: .word ov29_023735F0 + arm_func_end ov29_022DDE30 + + arm_func_start ov29_022DDEF8 +ov29_022DDEF8: ; 0x022DDEF8 + stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr} + ldr r0, _022DDFD8 ; =ov29_023735F4 + str sp, [r0] + mov r1, #0x20 + ldr r3, _022DDFDC ; =ov29_023735EC + ldr r2, [r3] + mul r1, r1, r2 + ldr r3, _022DDFE0 ; =ov29_0237360C + add r4, r3, r1 + ldrh r5, [r4] + cmp r5, #1 + bne _022DDF30 + mov r5, #2 + str r5, [r4] +_022DDF30: + ldr r5, [r0] + str r5, [r4, #0xc] + ldr r5, _022DDFE4 ; =ov29_023735F0 + ldr r5, [r5] + str r5, [r4, #0x10] + mov r3, r4 + ldr r1, _022DDFE8 ; =ov29_023510B8 + ldr r4, [r1] +_022DDF50: + add r2, r2, #1 + add r3, r3, #0x20 + cmp r2, r4 + bge _022DDF78 + ldrh r5, [r3] + cmp r5, #1 + beq _022DDF78 + cmp r5, #2 + beq _022DDF78 + b _022DDF50 +_022DDF78: + ldr r6, _022DDFDC ; =ov29_023735EC + str r2, [r6] + cmp r2, r4 + bge _022DDFCC + ldr r6, _022DDFD8 ; =ov29_023735F4 + ldr r7, [r3, #0xc] + str r7, [r6] + ldr r6, _022DDFE4 ; =ov29_023735F0 + ldr r7, [r3, #0x10] + str r7, [r6] + cmp r5, #2 + bne _022DDFB8 + ldr r6, _022DDFD8 ; =ov29_023735F4 + ldr sp, [r6] + ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} +_022DDFB4: + b _022DDFCC +_022DDFB8: + ldr r6, _022DDFD8 ; =ov29_023735F4 + ldr sp, [r6] + ldr r7, _022DDFE4 ; =ov29_023735F0 + ldr r2, [r7] + bx r2 +_022DDFCC: + ldr r0, _022DDFEC ; =ov29_023735F8 + ldr sp, [r0] + ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc} + .align 2, 0 +_022DDFD8: .word ov29_023735F4 +_022DDFDC: .word ov29_023735EC +_022DDFE0: .word ov29_0237360C +_022DDFE4: .word ov29_023735F0 +_022DDFE8: .word ov29_023510B8 +_022DDFEC: .word ov29_023735F8 + arm_func_end ov29_022DDEF8 + + arm_func_start ov29_022DDFF0 +ov29_022DDFF0: ; 0x022DDFF0 + ldr ip, _022DDFF8 ; =sub_020519D0 + bx ip + .align 2, 0 +_022DDFF8: .word sub_020519D0 + arm_func_end ov29_022DDFF0 + + arm_func_start ov29_022DDFFC +ov29_022DDFFC: ; 0x022DDFFC + stmdb sp!, {r3, lr} + mov r0, #0x44 + mov r1, #0 + bl MemAlloc + ldr r2, _022DE064 ; =ov29_0235352C + mov r1, #0x44 + str r0, [r2] + bl MemZero + ldr r0, _022DE064 ; =ov29_0235352C + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x20 + bl ov29_022DE22C + ldr r0, _022DE064 ; =ov29_0235352C + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x2c + bl ov29_022DE22C + mov r0, #0 + bl sub_02051ED4 + mov r1, r0 + ldr r0, _022DE064 ; =ov29_0235352C + mov r2, #0x20 + ldr r0, [r0] + bl sub_02063628 + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE064: .word ov29_0235352C + arm_func_end ov29_022DDFFC + + arm_func_start ov29_022DE068 +ov29_022DE068: ; 0x022DE068 + stmdb sp!, {r3, lr} + ldr r0, _022DE09C ; =ov29_0235352C + ldr r0, [r0] + add r0, r0, #0x20 + bl ov29_022DE274 + ldr r0, _022DE09C ; =ov29_0235352C + ldr r0, [r0] + add r0, r0, #0x2c + bl ov29_022DE274 + ldr r0, _022DE09C ; =ov29_0235352C + ldr r0, [r0] + bl sub_0206367C + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE09C: .word ov29_0235352C + arm_func_end ov29_022DE068 + + arm_func_start ov29_022DE0A0 +ov29_022DE0A0: ; 0x022DE0A0 + stmdb sp!, {r3, lr} + bl ov29_022DE068 + bl sub_02051B44 + ldr r0, _022DE0C8 ; =ov29_0235352C + ldr r0, [r0] + bl MemFree + ldr r0, _022DE0C8 ; =ov29_0235352C + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE0C8: .word ov29_0235352C + arm_func_end ov29_022DE0A0 + + arm_func_start ov29_022DE0CC +ov29_022DE0CC: ; 0x022DE0CC + stmdb sp!, {r3, lr} + ldr r0, _022DE0E8 ; =ov29_0235352C + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl sub_02051C24 + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE0E8: .word ov29_0235352C + arm_func_end ov29_022DE0CC + + arm_func_start ov29_022DE0EC +ov29_022DE0EC: ; 0x022DE0EC + stmdb sp!, {r4, lr} + ldr r2, _022DE118 ; =ov29_0235352C + mov r4, r0 + ldr r0, [r2] + mov r2, r1 + mov r1, r4 + bl sub_02063734 + ldr r0, _022DE118 ; =ov29_0235352C + ldr r0, [r0] + str r4, [r0, #0x18] + ldmia sp!, {r4, pc} + .align 2, 0 +_022DE118: .word ov29_0235352C + arm_func_end ov29_022DE0EC + + arm_func_start ov29_022DE11C +ov29_022DE11C: ; 0x022DE11C + ldr r0, _022DE12C ; =ov29_0235352C + ldr ip, _022DE130 ; =sub_02063770 + ldr r0, [r0] + bx ip + .align 2, 0 +_022DE12C: .word ov29_0235352C +_022DE130: .word sub_02063770 + arm_func_end ov29_022DE11C + + arm_func_start ov29_022DE134 +ov29_022DE134: ; 0x022DE134 + stmdb sp!, {r3, lr} + ldr ip, _022DE158 ; =ov29_0235352C + str r3, [sp] + mov r2, r0 + mov r3, r1 + ldr r0, [ip] + mov r1, #0 + bl sub_02063830 + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE158: .word ov29_0235352C + arm_func_end ov29_022DE134 + + arm_func_start ov29_022DE15C +ov29_022DE15C: ; 0x022DE15C + stmdb sp!, {r3, lr} + mov r0, #0 + mov r1, r0 + bl sub_02051DD0 + mov r0, #1 + mov r1, #0 + bl sub_02051DD0 + mov r0, #0 + mov r1, #1 + bl sub_02051DD0 + mov r0, #1 + mov r1, r0 + bl sub_02051DD0 + mov r0, #0 + mov r1, r0 + bl sub_02051E60 + mov r0, #1 + mov r1, #0 + bl sub_02051E60 + mov r0, #0 + mov r1, #1 + bl sub_02051E60 + mov r0, #1 + mov r1, r0 + bl sub_02051E60 + mov r0, #0 + bl ov29_022DE1E4 + mov r0, #1 + bl ov29_022DE1E4 + mov r0, #0 + bl ov29_022DE208 + mov r0, #1 + bl ov29_022DE208 + ldmia sp!, {r3, pc} + arm_func_end ov29_022DE15C + + arm_func_start ov29_022DE1E4 +ov29_022DE1E4: ; 0x022DE1E4 + ldr r2, _022DE200 ; =ov29_0235352C + mov r1, #0xc + ldr r2, [r2] + ldr ip, _022DE204 ; =sub_0200B3D4 + mla r1, r0, r1, r2 + ldr r0, [r1, #0x24] + bx ip + .align 2, 0 +_022DE200: .word ov29_0235352C +_022DE204: .word sub_0200B3D4 + arm_func_end ov29_022DE1E4 + + arm_func_start ov29_022DE208 +ov29_022DE208: ; 0x022DE208 + ldr r2, _022DE224 ; =ov29_0235352C + mov r1, #0xc + ldr r2, [r2] + ldr ip, _022DE228 ; =sub_0200B330 + mla r1, r0, r1, r2 + ldr r0, [r1, #0x24] + bx ip + .align 2, 0 +_022DE224: .word ov29_0235352C +_022DE228: .word sub_0200B330 + arm_func_end ov29_022DE208 + + arm_func_start ov29_022DE22C +ov29_022DE22C: ; 0x022DE22C + stmdb sp!, {r3, lr} + mov r3, r0 + cmp r1, #0 + bne _022DE254 + ldr r2, _022DE26C ; =0x06005000 + add r0, r3, #4 + add r1, r3, #8 + str r2, [r3] + bl sub_020275C0 + ldmia sp!, {r3, pc} +_022DE254: + ldr r2, _022DE270 ; =0x06205000 + add r0, r3, #4 + add r1, r3, #8 + str r2, [r3] + bl sub_020275DC + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE26C: .word 0x06005000 +_022DE270: .word 0x06205000 + arm_func_end ov29_022DE22C + + arm_func_start ov29_022DE274 +ov29_022DE274: ; 0x022DE274 + mov r1, #0 + str r1, [r0] + str r1, [r0, #4] + str r1, [r0, #8] + bx lr + arm_func_end ov29_022DE274 + + arm_func_start ov29_022DE288 +ov29_022DE288: ; 0x022DE288 + ldr r0, [r0] + bx lr + arm_func_end ov29_022DE288 + + arm_func_start ov29_022DE290 +ov29_022DE290: ; 0x022DE290 + strh r1, [r0, #0xa] + mov r2, #0 + strb r2, [r0, #0xc] + strb r2, [r0, #0xd] + strb r2, [r0, #0xe] + ldr r1, _022DE2C4 ; =DUNGEON_PTR + strb r2, [r0, #0xf] + ldr r2, [r1] + mov r1, #1 + add r2, r2, #0x1e0 + str r2, [r0, #0x10] + strb r1, [r0, #8] + bx lr + .align 2, 0 +_022DE2C4: .word DUNGEON_PTR + arm_func_end ov29_022DE290 + + arm_func_start ov29_022DE2C8 +ov29_022DE2C8: ; 0x022DE2C8 + str r2, [r0, #0x14] + strh r1, [r0, #0xa] + mov r2, #0 + strb r2, [r0, #0xc] + strb r2, [r0, #0xd] + strb r2, [r0, #0xe] + ldr r1, _022DE2FC ; =DUNGEON_PTR + strb r2, [r0, #0xf] + ldr r1, [r1] + add r1, r1, #0x1e0 + str r1, [r0, #0x10] + strb r2, [r0, #8] + bx lr + .align 2, 0 +_022DE2FC: .word DUNGEON_PTR + arm_func_end ov29_022DE2C8 + + arm_func_start InitDungeonPaletteStruct +InitDungeonPaletteStruct: ; 0x022DE300 + stmdb sp!, {r3, lr} + mov r0, #0x74 + mov r1, #0 + bl MemAlloc + ldr r2, _022DE410 ; =ov29_02353530 + mov r1, #0x74 + str r0, [r2] + bl MemZero + ldr r0, _022DE410 ; =ov29_02353530 + mov r2, #0x100 + ldr r1, [r0] + strh r2, [r1, #4] + ldr r1, [r0] + strh r2, [r1, #2] + ldr r2, [r0] + ldrsh r1, [r2, #2] + strh r1, [r2, #6] + ldr r2, [r0] + ldrsh r1, [r2, #4] + strh r1, [r2, #8] + ldr r0, [r0] + add r0, r0, #0xc + bl sub_0200A2CC + ldr r1, _022DE410 ; =ov29_02353530 + mov r0, #0 + ldr r1, [r1] + strb r0, [r1, #0x4c] + strb r0, [r1, #0x4d] + strb r0, [r1, #0x4e] + strb r0, [r1, #0x4f] + bl sub_02051ED4 + ldr r2, [r0, #0x14] + ldr r1, _022DE410 ; =ov29_02353530 + mov r0, #0 + ldr r1, [r1] + str r2, [r1, #0x34] + bl sub_0201BCCC + ldr r2, [r0, #0x14] + ldr r1, _022DE410 ; =ov29_02353530 + mov r0, #0 + ldr r1, [r1] + str r2, [r1, #0x38] + bl sub_0201BCF4 + ldr r3, [r0, #0x14] + ldr r1, _022DE410 ; =ov29_02353530 + mov r0, #1 + ldr r2, [r1] + mov r1, #0 + str r3, [r2, #0x3c] + bl sub_0201BD1C + mov r0, #4 + ldr r1, _022DE414 ; =0x0000040A + ldr r2, _022DE410 ; =ov29_02353530 + mov r3, #0 + ldr r2, [r2] + add r2, r2, #0x40 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r0, _022DE410 ; =ov29_02353530 + ldr r1, [r0] + add r0, r1, #0x48 + ldr r1, [r1, #0x40] + bl HandleSir0Translation + ldr r0, _022DE410 ; =ov29_02353530 + mov r1, #0x20 + ldr r0, [r0] + add r0, r0, #0x51 + bl MemZero + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE410: .word ov29_02353530 +#ifdef JAPAN +_022DE414: .word 0x000003FE +#else +_022DE414: .word 0x0000040A +#endif + arm_func_end InitDungeonPaletteStruct + + arm_func_start ov29_022DE418 +ov29_022DE418: ; 0x022DE418 + stmdb sp!, {r3, lr} + ldr r0, _022DE478 ; =ov29_02353530 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #0 + bl sub_02051ED4 + ldr r1, _022DE478 ; =ov29_02353530 + ldr r1, [r1] + ldr r1, [r1, #0x34] + str r1, [r0, #0x14] + mov r0, #0 + bl sub_0201BCCC + ldr r1, _022DE478 ; =ov29_02353530 + ldr r1, [r1] + ldr r1, [r1, #0x38] + str r1, [r0, #0x14] + mov r0, #0 + bl sub_0201BCF4 + ldr r1, _022DE478 ; =ov29_02353530 + ldr r1, [r1] + ldr r1, [r1, #0x3c] + str r1, [r0, #0x14] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE478: .word ov29_02353530 + arm_func_end ov29_022DE418 + + arm_func_start ov29_022DE47C +ov29_022DE47C: ; 0x022DE47C + ldr r2, _022DE494 ; =ov29_02353530 + ldr r2, [r2] + cmp r2, #0 + addne r0, r2, r0 + strneb r1, [r0, #0x51] + bx lr + .align 2, 0 +_022DE494: .word ov29_02353530 + arm_func_end ov29_022DE47C + + arm_func_start ov29_022DE498 +ov29_022DE498: ; 0x022DE498 + stmdb sp!, {r3, lr} + ldr r0, _022DE4F8 ; =ov29_02353530 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl ov29_022DE418 + ldr r0, _022DE4F8 ; =ov29_02353530 + ldr r0, [r0] + add r0, r0, #0x40 + bl UnloadFile + mov r0, #0 + mov r1, r0 + bl sub_0201BD1C + ldr r0, _022DE4F8 ; =ov29_02353530 + ldr r0, [r0] + add r0, r0, #0xc + bl sub_0200A2F4 + ldr r0, _022DE4F8 ; =ov29_02353530 + ldr r0, [r0] + bl MemFree + ldr r0, _022DE4F8 ; =ov29_02353530 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE4F8: .word ov29_02353530 + arm_func_end ov29_022DE498 + + arm_func_start ov29_022DE4FC +ov29_022DE4FC: ; 0x022DE4FC + stmdb sp!, {r4, lr} + ldr r1, _022DE55C ; =ov29_02353530 + mov r0, #0 + ldr r1, [r1] + ldrh r4, [r1, #4] + bl sub_02051ED4 + ldr r2, _022DE560 ; =sub_01FF9BA0 + mov r1, r4 + bl ov29_022DE2C8 + mov r0, #0 + bl sub_0201BCCC + ldr r1, _022DE55C ; =ov29_02353530 + ldr r2, _022DE564 ; =sub_01FF9E14 + ldr r1, [r1] + ldrh r1, [r1, #2] + bl ov29_022DE2C8 + mov r0, #0 + bl sub_0201BCF4 + ldr r1, _022DE55C ; =ov29_02353530 + ldr r2, _022DE568 ; =sub_01FF9F80 + ldr r1, [r1] + ldrh r1, [r1, #2] + bl ov29_022DE2C8 + ldmia sp!, {r4, pc} + .align 2, 0 +_022DE55C: .word ov29_02353530 +_022DE560: .word sub_01FF9BA0 +_022DE564: .word sub_01FF9E14 +_022DE568: .word sub_01FF9F80 + arm_func_end ov29_022DE4FC + + arm_func_start ov29_022DE56C +ov29_022DE56C: ; 0x022DE56C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r4, r0 + cmp r6, #1 + bne _022DE598 + mov r0, #0 + bl sub_02051ED4 + mov r1, r4, lsl #0x10 + mov r1, r1, lsr #0x10 + bl ov29_022DE290 + b _022DE5C0 +_022DE598: + mov r0, r4, lsl #0x10 + mov r5, r0, lsr #0x10 + mov r0, #0 + bl sub_0201BCCC + mov r1, r5 + bl ov29_022DE290 + mov r0, #0 + bl sub_0201BCF4 + mov r1, r5 + bl ov29_022DE290 +_022DE5C0: + ldr r0, _022DE5D4 ; =ov29_02353530 + ldr r0, [r0] + add r0, r0, r6, lsl #1 + strh r4, [r0, #2] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022DE5D4: .word ov29_02353530 + arm_func_end ov29_022DE56C + + arm_func_start ov29_022DE5D8 +ov29_022DE5D8: ; 0x022DE5D8 + ldr r2, _022DE5EC ; =ov29_02353530 + ldr r2, [r2] + add r1, r2, r1, lsl #1 + strh r0, [r1, #2] + bx lr + .align 2, 0 +_022DE5EC: .word ov29_02353530 + arm_func_end ov29_022DE5D8 + + arm_func_start ov29_022DE5F0 +ov29_022DE5F0: ; 0x022DE5F0 + ldr r1, _022DE604 ; =ov29_02353530 + ldr r1, [r1] + add r0, r1, r0, lsl #1 + ldrsh r0, [r0, #2] + bx lr + .align 2, 0 +_022DE604: .word ov29_02353530 + arm_func_end ov29_022DE5F0 + + arm_func_start ov29_022DE608 +ov29_022DE608: ; 0x022DE608 + ldr r0, _022DE61C ; =ov29_02353530 + mov r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x50] + bx lr + .align 2, 0 +_022DE61C: .word ov29_02353530 + arm_func_end ov29_022DE608 + + arm_func_start GetWeatherColorTable +GetWeatherColorTable: ; 0x022DE620 + ldr r1, _022DE634 ; =ov29_02353530 + ldr r1, [r1] + ldr r1, [r1, #0x48] + add r0, r1, r0, lsl #10 + bx lr + .align 2, 0 +_022DE634: .word ov29_02353530 + arm_func_end GetWeatherColorTable + + arm_func_start ov29_022DE638 +ov29_022DE638: ; 0x022DE638 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _022DE844 ; =DUNGEON_PTR + mov r5, r0 + ldr r0, [r1] + mov r4, #0 + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + bl IsBackgroundTileset + cmp r0, #0 + mov r1, r4 + bne _022DE754 + ldr r0, _022DE848 ; =ov29_023510BC + mov r2, r5 + mov r3, r1 + str r1, [sp] + bl sub_02051EF0 + mov r0, r4 + bl sub_02051D68 + mov r3, #1 + mov r1, r4 + str r3, [sp] + ldr r0, _022DE848 ; =ov29_023510BC + mov r2, r5 + mov r3, r1 + bl sub_02051EF0 + mov r0, #1 + bl sub_02051D68 + bl GetDefaultTileTextureId + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r7, #0 + add sb, r0, #4 + add r4, r4, #1 + mov r8, #1 + mov r6, r7 +_022DE6C4: + mov r1, r4, lsl #0x10 + mov r0, sb + mov r2, r5 + mov r3, r7 + mov r1, r1, asr #0x10 + str r7, [sp] + bl sub_02051EF0 + mov r0, r6 + bl sub_02051D68 + add r8, r8, #1 + cmp r8, #0xd0 + add sb, sb, #4 + add r4, r4, #1 + blt _022DE6C4 + mov sb, #0 + ldr r8, _022DE84C ; =ov29_0237C6D4 + mov r7, #0xd0 + mov r6, sb + mov r4, sb +_022DE710: + mov r1, r7, lsl #0x10 + mov r0, r8 + mov r2, r5 + mov r3, r6 + mov r1, r1, asr #0x10 + str r6, [sp] + bl sub_02051EF0 + mov r0, r4 + bl sub_02051D68 + add r7, r7, #1 + cmp r7, #0xe0 + add sb, sb, #1 + addeq r7, r7, #0x10 + add r8, r8, #4 + cmp sb, #0x20 + blt _022DE710 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_022DE754: + ldr r0, _022DE848 ; =ov29_023510BC + mov r2, r5 + mov r3, r1 + str r1, [sp] + bl sub_02051EF0 + mov r0, r4 + bl sub_02051D68 + mov r3, #1 + mov r1, r4 + str r3, [sp] + ldr r0, _022DE848 ; =ov29_023510BC + mov r2, r5 + mov r3, r1 + bl sub_02051EF0 + mov r0, #1 + bl sub_02051D68 + bl GetDefaultTileTextureId + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r7, #0 + add r8, r0, #4 + add r4, r4, #1 + mov sb, #1 + mov r6, r7 +_022DE7B4: + mov r1, r4, lsl #0x10 + mov r0, r8 + mov r2, r5 + mov r3, r7 + mov r1, r1, asr #0x10 + str r7, [sp] + bl sub_02051EF0 + mov r0, r6 + bl sub_02051D68 + add sb, sb, #1 + cmp sb, #0xe0 + add r8, r8, #4 + add r4, r4, #1 + blt _022DE7B4 + ldr r8, _022DE850 ; =ov29_0237C714 + mov r7, #0xf0 + cmp r8, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov sb, #0 + mov r6, sb + mov r4, sb +_022DE808: + mov r1, r7, lsl #0x10 + mov r0, r8 + mov r2, r5 + mov r3, r6 + mov r1, r1, asr #0x10 + str r6, [sp] + bl sub_02051EF0 + mov r0, r4 + bl sub_02051D68 + add sb, sb, #1 + cmp sb, #0x10 + add r8, r8, #4 + add r7, r7, #1 + blt _022DE808 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_022DE844: .word DUNGEON_PTR +_022DE848: .word ov29_023510BC +_022DE84C: .word ov29_0237C6D4 +_022DE850: .word ov29_0237C714 + arm_func_end ov29_022DE638 + + arm_func_start ov29_022DE854 +ov29_022DE854: ; 0x022DE854 + stmdb sp!, {r3, lr} + mov r0, #0 + bl sub_02051ED4 + bl sub_0200A544 + ldmia sp!, {r3, pc} + arm_func_end ov29_022DE854 + + arm_func_start ov29_022DE868 +ov29_022DE868: ; 0x022DE868 + stmdb sp!, {r3, lr} + ldr r0, _022DE900 ; =ov29_02353530 + ldr r2, [r0] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrb r0, [r2, #0x50] + cmp r0, #0 + ldreqsh r1, [r2, #4] + ldreqsh r0, [r2, #8] + cmpeq r1, r0 + beq _022DE8B0 + ldrsh r0, [r2, #4] + mov r1, #1 + bl ov29_022DE56C + ldr r0, _022DE900 ; =ov29_02353530 + ldr r1, [r0] + ldrsh r0, [r1, #4] + strh r0, [r1, #8] +_022DE8B0: + ldr r0, _022DE900 ; =ov29_02353530 + ldr r2, [r0] + ldrb r0, [r2, #0x50] + cmp r0, #0 + ldreqsh r1, [r2, #2] + ldreqsh r0, [r2, #6] + cmpeq r1, r0 + beq _022DE8EC + ldrsh r0, [r2, #2] + mov r1, #0 + bl ov29_022DE56C + ldr r0, _022DE900 ; =ov29_02353530 + ldr r1, [r0] + ldrsh r0, [r1, #2] + strh r0, [r1, #6] +_022DE8EC: + ldr r0, _022DE900 ; =ov29_02353530 + mov r1, #0 + ldr r0, [r0] + strb r1, [r0, #0x50] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE900: .word ov29_02353530 + arm_func_end ov29_022DE868 + + arm_func_start ov29_022DE904 +ov29_022DE904: ; 0x022DE904 + stmdb sp!, {r3, lr} + mov r0, #0x20 + mov r1, #0 + bl MemAlloc + ldr r2, _022DE92C ; =ov29_02353534 + mov r1, #0x20 + str r0, [r2] + bl MemZero + bl ov29_022DEA34 + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE92C: .word ov29_02353534 + arm_func_end ov29_022DE904 + + arm_func_start ov29_022DE930 +ov29_022DE930: ; 0x022DE930 + stmdb sp!, {r3, lr} + ldr r0, _022DE950 ; =ov29_02353534 + ldr r0, [r0] + bl MemFree + ldr r0, _022DE950 ; =ov29_02353534 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_022DE950: .word ov29_02353534 + arm_func_end ov29_022DE930 + + arm_func_start ov29_022DE954 +ov29_022DE954: ; 0x022DE954 + cmp r0, #0x10 + movge r0, #1 + movlt r0, #0 + and r0, r0, #0xff + bx lr + arm_func_end ov29_022DE954 + + arm_func_start ov29_022DE968 +ov29_022DE968: ; 0x022DE968 + cmp r0, #0 + beq _022DE984 + cmp r0, #1 + beq _022DE990 + cmp r0, #2 + beq _022DE99C + b _022DE9A8 +_022DE984: + mov r0, #0 + mov r3, #1 + b _022DE9B0 +_022DE990: + mov r0, #0x1b + mov r3, #4 + b _022DE9B0 +_022DE99C: + mov r0, #1 + mov r3, #0x14 + b _022DE9B0 +_022DE9A8: + mov r3, #0 + mov r0, r3 +_022DE9B0: + ldr r1, _022DE9F4 ; =ov29_02353534 + mov r2, #0 + ldr ip, [r1] + b _022DE9E4 +_022DE9C0: + ldrb r1, [ip, r0] + cmp r1, #0 + bxeq lr + add r2, r2, #1 + add r1, r0, #1 + mov r0, r2, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r0, asr #0x10 + mov r0, r1, asr #0x10 +_022DE9E4: + cmp r2, r3 + blt _022DE9C0 + mvn r0, #0 + bx lr + .align 2, 0 +_022DE9F4: .word ov29_02353534 + arm_func_end ov29_022DE968 + + arm_func_start ov29_022DE9F8 +ov29_022DE9F8: ; 0x022DE9F8 + ldr r1, _022DEA0C ; =ov29_02353534 + mov r2, #1 + ldr r1, [r1] + strb r2, [r1, r0] + bx lr + .align 2, 0 +_022DEA0C: .word ov29_02353534 + arm_func_end ov29_022DE9F8 + + arm_func_start ov29_022DEA10 +ov29_022DEA10: ; 0x022DEA10 + ldr ip, _022DEA18 ; =ov29_022DE968 + bx ip + .align 2, 0 +_022DEA18: .word ov29_022DE968 + arm_func_end ov29_022DEA10 + + arm_func_start ov29_022DEA1C +ov29_022DEA1C: ; 0x022DEA1C + ldr r1, _022DEA30 ; =ov29_02353534 + mov r2, #0 + ldr r1, [r1] + strb r2, [r1, r0] + bx lr + .align 2, 0 +_022DEA30: .word ov29_02353534 + arm_func_end ov29_022DEA1C + + arm_func_start ov29_022DEA34 +ov29_022DEA34: ; 0x022DEA34 + mov r3, #0 + ldr r0, _022DEA58 ; =ov29_02353534 + mov r2, r3 +_022DEA40: + ldr r1, [r0] + strb r2, [r1, r3] + add r3, r3, #1 + cmp r3, #0x20 + blt _022DEA40 + bx lr + .align 2, 0 +_022DEA58: .word ov29_02353534 + arm_func_end ov29_022DEA34 diff --git a/asm/overlay_29_022E1AD4.s b/asm/overlay_29_022E1AD4.s index 1acca1d5..94a41c22 100644 --- a/asm/overlay_29_022E1AD4.s +++ b/asm/overlay_29_022E1AD4.s @@ -1050,21 +1050,3 @@ _022E271C: _022E2724: .word DUNGEON_PTR _022E2728: .word 0x0001A224 + SHOULD_DISPLAY_ENTITY_OFFSET arm_func_end ShouldDisplayEntity - - arm_func_start ShouldDisplayEntityWrapper -ShouldDisplayEntityWrapper: ; 0x022E272C - ldr ip, _022E2738 ; =ShouldDisplayEntity - mov r1, #0 - bx ip - .align 2, 0 -_022E2738: .word ShouldDisplayEntity - arm_func_end ShouldDisplayEntityWrapper - - arm_func_start ov29_022E273C -ov29_022E273C: ; 0x022E273C - ldr ip, _022E2748 ; =ShouldDisplayEntity - mov r1, #1 - bx ip - .align 2, 0 -_022E2748: .word ShouldDisplayEntity - arm_func_end ov29_022E273C diff --git a/asm/overlay_29_022E37DC.s b/asm/overlay_29_022E37DC.s index c3336da2..68d4d84b 100644 --- a/asm/overlay_29_022E37DC.s +++ b/asm/overlay_29_022E37DC.s @@ -806,4527 +806,3 @@ ov29_022E4160: ; 0x022E4160 ov29_022E41AC: ; 0x022E41AC bx lr arm_func_end ov29_022E41AC - - arm_func_start ov29_022E41B0 -ov29_022E41B0: ; 0x022E41B0 - stmdb sp!, {r3, lr} - cmp r1, #0 - ldmeqia sp!, {r3, pc} - ldr r1, _022E41C8 ; =0x00000221 - bl PlaySeByIdIfShouldDisplayEntity - ldmia sp!, {r3, pc} - .align 2, 0 -_022E41C8: .word 0x00000221 - arm_func_end ov29_022E41B0 - - arm_func_start ov29_022E41CC -ov29_022E41CC: ; 0x022E41CC - ldr ip, _022E41D8 ; =PlaySeByIdIfShouldDisplayEntity - mov r1, #0x310 - bx ip - .align 2, 0 -_022E41D8: .word PlaySeByIdIfShouldDisplayEntity - arm_func_end ov29_022E41CC - - arm_func_start ov29_022E41DC -ov29_022E41DC: ; 0x022E41DC - ldr ip, _022E41EC ; =ChangeMonsterAnimation - mov r1, #0xa - mov r2, #8 - bx ip - .align 2, 0 -_022E41EC: .word ChangeMonsterAnimation - arm_func_end ov29_022E41DC - - arm_func_start ov29_022E41F0 -ov29_022E41F0: ; 0x022E41F0 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E423C ; =0x000001A7 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E423C ; =0x000001A7 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E423C: .word 0x000001A7 - arm_func_end ov29_022E41F0 - - arm_func_start PlayParalysisEffect -PlayParalysisEffect: ; 0x022E4240 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E428C ; =0x000001A7 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E428C ; =0x000001A7 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E428C: .word 0x000001A7 - arm_func_end PlayParalysisEffect - - arm_func_start ov29_022E4290 -ov29_022E4290: ; 0x022E4290 - bx lr - arm_func_end ov29_022E4290 - - arm_func_start ov29_022E4294 -ov29_022E4294: ; 0x022E4294 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x4c - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x4c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E4294 - - arm_func_start ov29_022E42E0 -ov29_022E42E0: ; 0x022E42E0 - bx lr - arm_func_end ov29_022E42E0 - - arm_func_start ov29_022E42E4 -ov29_022E42E4: ; 0x022E42E4 - bx lr - arm_func_end ov29_022E42E4 - - arm_func_start PlayEffectAnimationEntityStandard -PlayEffectAnimationEntityStandard: ; 0x022E42E8 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0x10 - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r5 - mov r1, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end PlayEffectAnimationEntityStandard - - arm_func_start ov29_022E4338 -ov29_022E4338: ; 0x022E4338 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4384 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4384 ; =0x000001A9 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4384: .word 0x000001A9 - arm_func_end ov29_022E4338 - - arm_func_start ov29_022E4388 -ov29_022E4388: ; 0x022E4388 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E43D4 ; =0x0000013A - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x138 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E43D4: .word 0x0000013A - arm_func_end ov29_022E4388 - - arm_func_start ov29_022E43D8 -ov29_022E43D8: ; 0x022E43D8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4424 ; =0x0000013A - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x138 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4424: .word 0x0000013A - arm_func_end ov29_022E43D8 - - arm_func_start ov29_022E4428 -ov29_022E4428: ; 0x022E4428 - bx lr - arm_func_end ov29_022E4428 - - arm_func_start ov29_022E442C -ov29_022E442C: ; 0x022E442C - bx lr - arm_func_end ov29_022E442C - - arm_func_start ov29_022E4430 -ov29_022E4430: ; 0x022E4430 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E447C ; =0x00000171 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E447C ; =0x00000171 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E447C: .word 0x00000171 - arm_func_end ov29_022E4430 - - arm_func_start ov29_022E4480 -ov29_022E4480: ; 0x022E4480 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #7 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #7 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E4480 - - arm_func_start PlaySpeedUpEffect -PlaySpeedUpEffect: ; 0x022E44CC - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4518 ; =0x0000018B - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4518 ; =0x0000018B - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4518: .word 0x0000018B - arm_func_end PlaySpeedUpEffect - - arm_func_start PlaySpeedDownEffect -PlaySpeedDownEffect: ; 0x022E451C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4568 ; =0x0000018A - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x188 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4568: .word 0x0000018A - arm_func_end PlaySpeedDownEffect - - arm_func_start ov29_022E456C -ov29_022E456C: ; 0x022E456C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #5 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #5 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E456C - - arm_func_start ov29_022E45B8 -ov29_022E45B8: ; 0x022E45B8 - ldr ip, _022E45C4 ; =PlaySeByIdIfShouldDisplayEntity - ldr r1, _022E45C8 ; =0x00000227 - bx ip - .align 2, 0 -_022E45C4: .word PlaySeByIdIfShouldDisplayEntity -_022E45C8: .word 0x00000227 - arm_func_end ov29_022E45B8 - - arm_func_start ov29_022E45CC -ov29_022E45CC: ; 0x022E45CC - bx lr - arm_func_end ov29_022E45CC - - arm_func_start ov29_022E45D0 -ov29_022E45D0: ; 0x022E45D0 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0x10 - mov r5, r0 - mov r0, #0x2f - mov r4, r1 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x2f - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - mov r0, #0x30 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r1, #2 - str r1, [sp] - mov r2, #0 - str r2, [sp, #4] - sub r1, r2, #1 - str r1, [sp, #8] - str r2, [sp, #0xc] - mov r0, r5 - mov r1, #0x30 - mov r2, #1 - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_022E45D0 - - arm_func_start ov29_022E465C -ov29_022E465C: ; 0x022E465C - bx lr - arm_func_end ov29_022E465C - - arm_func_start ov29_022E4660 -ov29_022E4660: ; 0x022E4660 - bx lr - arm_func_end ov29_022E4660 - - arm_func_start ov29_022E4664 -ov29_022E4664: ; 0x022E4664 - bx lr - arm_func_end ov29_022E4664 - - arm_func_start ov29_022E4668 -ov29_022E4668: ; 0x022E4668 - bx lr - arm_func_end ov29_022E4668 - - arm_func_start ov29_022E466C -ov29_022E466C: ; 0x022E466C - bx lr - arm_func_end ov29_022E466C - - arm_func_start ov29_022E4670 -ov29_022E4670: ; 0x022E4670 - bx lr - arm_func_end ov29_022E4670 - - arm_func_start ov29_022E4674 -ov29_022E4674: ; 0x022E4674 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x21 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x21 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E4674 - - arm_func_start ov29_022E46C0 -ov29_022E46C0: ; 0x022E46C0 - ldr ip, _022E46CC ; =PlaySeByIdIfShouldDisplayEntity - mov r1, #0x30c - bx ip - .align 2, 0 -_022E46CC: .word PlaySeByIdIfShouldDisplayEntity - arm_func_end ov29_022E46C0 - - arm_func_start ov29_022E46D0 -ov29_022E46D0: ; 0x022E46D0 - bx lr - arm_func_end ov29_022E46D0 - - arm_func_start DisplayStockpileNumbers -DisplayStockpileNumbers: ; 0x022E46D4 - stmdb sp!, {r4, lr} - mov r4, r0 - bl ShouldDisplayEntityAdvanced - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r4, #0xb4] - mov r1, r4 -#ifdef JAPAN - ldrb r0, [r0, #0x11a] -#else - ldrb r0, [r0, #0x11e] -#endif - mov r2, #1 - mov r3, #0xb - bl DisplayAnimatedNumbers - ldmia sp!, {r4, pc} - arm_func_end DisplayStockpileNumbers - - arm_func_start PlayInvisifySeIfShouldDisplayEntity -PlayInvisifySeIfShouldDisplayEntity: ; 0x022E4704 - ldr ip, _022E4710 ; =PlaySeByIdIfShouldDisplayEntity - mov r1, #0x21c - bx ip - .align 2, 0 -_022E4710: .word PlaySeByIdIfShouldDisplayEntity - arm_func_end PlayInvisifySeIfShouldDisplayEntity - - arm_func_start ov29_022E4714 -ov29_022E4714: ; 0x022E4714 - bx lr - arm_func_end ov29_022E4714 - - arm_func_start ov29_022E4718 -ov29_022E4718: ; 0x022E4718 - bx lr - arm_func_end ov29_022E4718 - - arm_func_start ov29_022E471C -ov29_022E471C: ; 0x022E471C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4768 ; =0x00000131 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4768 ; =0x00000131 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4768: .word 0x00000131 - arm_func_end ov29_022E471C - - arm_func_start ov29_022E476C -ov29_022E476C: ; 0x022E476C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x30 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x30 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E476C - - arm_func_start ov29_022E47B8 -ov29_022E47B8: ; 0x022E47B8 - bx lr - arm_func_end ov29_022E47B8 - - arm_func_start ov29_022E47BC -ov29_022E47BC: ; 0x022E47BC - bx lr - arm_func_end ov29_022E47BC - - arm_func_start ov29_022E47C0 -ov29_022E47C0: ; 0x022E47C0 - bx lr - arm_func_end ov29_022E47C0 - - arm_func_start ov29_022E47C4 -ov29_022E47C4: ; 0x022E47C4 - bx lr - arm_func_end ov29_022E47C4 - - arm_func_start ov29_022E47C8 -ov29_022E47C8: ; 0x022E47C8 - bx lr - arm_func_end ov29_022E47C8 - - arm_func_start ov29_022E47CC -ov29_022E47CC: ; 0x022E47CC - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0x10 - mov r5, r1 - mov r1, #0xe - mov r4, r0 - bl MonsterIsType - cmp r0, #0 - beq _022E4828 - mov r0, r5 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, r5 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E4860 -_022E4828: - mov r0, #0xe - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0xe - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E4860: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_022E47CC - - arm_func_start ov29_022E4868 -ov29_022E4868: ; 0x022E4868 - bx lr - arm_func_end ov29_022E4868 - - arm_func_start ov29_022E486C -ov29_022E486C: ; 0x022E486C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x41 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x41 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E486C - - arm_func_start ov29_022E48B8 -ov29_022E48B8: ; 0x022E48B8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4910 ; =0x0000011E - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x11c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - mov r0, r4 - mov r1, #0x20c - bl PlaySeByIdIfShouldDisplayEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4910: .word 0x0000011E - arm_func_end ov29_022E48B8 - - arm_func_start ov29_022E4914 -ov29_022E4914: ; 0x022E4914 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4960 ; =0x000001AE - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x1ac - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4960: .word 0x000001AE - arm_func_end ov29_022E4914 - - arm_func_start ShowPpRestoreEffect -ShowPpRestoreEffect: ; 0x022E4964 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E49B0 ; =0x000001B1 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E49B0 ; =0x000001B1 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E49B0: .word 0x000001B1 - arm_func_end ShowPpRestoreEffect - - arm_func_start ov29_022E49B4 -ov29_022E49B4: ; 0x022E49B4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4A00 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4A00 ; =0x000001A9 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4A00: .word 0x000001A9 - arm_func_end ov29_022E49B4 - - arm_func_start ov29_022E4A04 -ov29_022E4A04: ; 0x022E4A04 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4A50 ; =0x00000192 - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x190 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4A50: .word 0x00000192 - arm_func_end ov29_022E4A04 - - arm_func_start ov29_022E4A54 -ov29_022E4A54: ; 0x022E4A54 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4AA0 ; =0x0000018E - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x18c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4AA0: .word 0x0000018E - arm_func_end ov29_022E4A54 - - arm_func_start ov29_022E4AA4 -ov29_022E4AA4: ; 0x022E4AA4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x190 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x190 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E4AA4 - - arm_func_start ov29_022E4AF0 -ov29_022E4AF0: ; 0x022E4AF0 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x15 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x15 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E4AF0 - - arm_func_start ov29_022E4B3C -ov29_022E4B3C: ; 0x022E4B3C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4B88 ; =0x00000171 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4B88 ; =0x00000171 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4B88: .word 0x00000171 - arm_func_end ov29_022E4B3C - - arm_func_start ov29_022E4B8C -ov29_022E4B8C: ; 0x022E4B8C - ldr ip, _022E4B98 ; =PlaySeByIdIfShouldDisplayEntity - ldr r1, _022E4B9C ; =0x0000030E - bx ip - .align 2, 0 -_022E4B98: .word PlaySeByIdIfShouldDisplayEntity -_022E4B9C: .word 0x0000030E - arm_func_end ov29_022E4B8C - - arm_func_start ov29_022E4BA0 -ov29_022E4BA0: ; 0x022E4BA0 - ldr ip, _022E4BAC ; =PlaySeByIdIfShouldDisplayEntity - ldr r1, _022E4BB0 ; =0x0000030E - bx ip - .align 2, 0 -_022E4BAC: .word PlaySeByIdIfShouldDisplayEntity -_022E4BB0: .word 0x0000030E - arm_func_end ov29_022E4BA0 - - arm_func_start ov29_022E4BB4 -ov29_022E4BB4: ; 0x022E4BB4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x15 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x15 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E4BB4 - - arm_func_start ov29_022E4C00 -ov29_022E4C00: ; 0x022E4C00 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0xf - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0xf - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E4C00 - - arm_func_start ov29_022E4C4C -ov29_022E4C4C: ; 0x022E4C4C - stmdb sp!, {r3, lr} - sub sp, sp, #0x10 - mov r1, #2 - mov ip, #0 - stmia sp, {r1, ip} - sub r1, ip, #1 - str r1, [sp, #8] - mov r1, #0x15 - mov r2, #1 - mov r3, #3 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E4C4C - - arm_func_start ov29_022E4C84 -ov29_022E4C84: ; 0x022E4C84 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4CD0 ; =0x000001F7 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4CD0 ; =0x000001F7 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4CD0: .word 0x000001F7 - arm_func_end ov29_022E4C84 - - arm_func_start ov29_022E4CD4 -ov29_022E4CD4: ; 0x022E4CD4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E4D20 ; =0x000001F9 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4D20 ; =0x000001F9 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E4D20: .word 0x000001F9 - arm_func_end ov29_022E4CD4 - - arm_func_start ov29_022E4D24 -ov29_022E4D24: ; 0x022E4D24 - bx lr - arm_func_end ov29_022E4D24 - - arm_func_start PlayOffensiveStatDownEffect -PlayOffensiveStatDownEffect: ; 0x022E4D28 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E4D80 - mov r0, #0x194 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x194 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E4DB8 -_022E4D80: - ldr r0, _022E4DC8 ; =0x00000193 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4DC8 ; =0x00000193 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E4DB8: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E4DC8: .word 0x00000193 - arm_func_end PlayOffensiveStatDownEffect - - arm_func_start PlayDefensiveStatDownEffect -PlayDefensiveStatDownEffect: ; 0x022E4DCC - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E4E24 - ldr r0, _022E4E6C ; =0x0000018F - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4E6C ; =0x0000018F - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E4E5C -_022E4E24: - ldr r0, _022E4E70 ; =0x00000191 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4E70 ; =0x00000191 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E4E5C: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E4E6C: .word 0x0000018F -_022E4E70: .word 0x00000191 - arm_func_end PlayDefensiveStatDownEffect - - arm_func_start PlayOffensiveStatUpEffect -PlayOffensiveStatUpEffect: ; 0x022E4E74 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E4ECC - ldr r0, _022E4F14 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E4F14 ; =0x000001A9 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E4F04 -_022E4ECC: - ldr r0, _022E4F18 ; =0x00000192 - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x190 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E4F04: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E4F14: .word 0x000001A9 -_022E4F18: .word 0x00000192 - arm_func_end PlayOffensiveStatUpEffect - - arm_func_start PlayDefensiveStatUpEffect -PlayDefensiveStatUpEffect: ; 0x022E4F1C - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E4F74 - ldr r0, _022E4FBC ; =0x0000018E - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x18c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E4FAC -_022E4F74: - mov r0, #0x190 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x190 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E4FAC: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E4FBC: .word 0x0000018E - arm_func_end PlayDefensiveStatUpEffect - - arm_func_start PlayOffensiveStatMultiplierUpEffect -PlayOffensiveStatMultiplierUpEffect: ; 0x022E4FC0 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E5018 - ldr r0, _022E5060 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E5060 ; =0x000001A9 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E5050 -_022E5018: - ldr r0, _022E5064 ; =0x00000192 - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x190 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E5050: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E5060: .word 0x000001A9 -_022E5064: .word 0x00000192 - arm_func_end PlayOffensiveStatMultiplierUpEffect - - arm_func_start PlayOffensiveStatMultiplierDownEffect -PlayOffensiveStatMultiplierDownEffect: ; 0x022E5068 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E50C0 - mov r0, #0x194 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x194 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E50F8 -_022E50C0: - ldr r0, _022E5108 ; =0x00000193 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E5108 ; =0x00000193 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E50F8: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E5108: .word 0x00000193 - arm_func_end PlayOffensiveStatMultiplierDownEffect - - arm_func_start PlayDefensiveStatMultiplierUpEffect -PlayDefensiveStatMultiplierUpEffect: ; 0x022E510C - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E5164 - ldr r0, _022E51AC ; =0x0000018E - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x18c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E519C -_022E5164: - mov r0, #0x190 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x190 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E519C: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E51AC: .word 0x0000018E - arm_func_end PlayDefensiveStatMultiplierUpEffect - - arm_func_start PlayDefensiveStatMultiplierDownEffect -PlayDefensiveStatMultiplierDownEffect: ; 0x022E51B0 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E5208 - ldr r0, _022E5250 ; =0x0000018F - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E5250 ; =0x0000018F - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E5240 -_022E5208: - ldr r0, _022E5254 ; =0x00000191 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E5254 ; =0x00000191 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E5240: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E5250: .word 0x0000018F -_022E5254: .word 0x00000191 - arm_func_end PlayDefensiveStatMultiplierDownEffect - - arm_func_start PlayHitChanceUpEffect -PlayHitChanceUpEffect: ; 0x022E5258 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E52B0 - mov r0, #0x18c - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x18c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E52E8 -_022E52B0: - mov r0, #0xd - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0xd - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E52E8: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - arm_func_end PlayHitChanceUpEffect - - arm_func_start PlayHitChanceDownEffect -PlayHitChanceDownEffect: ; 0x022E52F8 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r1, [sp, #0x1c] - mov r4, r0 - cmp r1, #0 - bne _022E5350 - ldr r0, _022E5398 ; =0x0000018D - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E5398 ; =0x0000018D - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E5388 -_022E5350: - mov r0, #0xe - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0xe - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E5388: - add sp, sp, #0x10 - ldmia sp!, {r4, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_022E5398: .word 0x0000018D - arm_func_end PlayHitChanceDownEffect - - arm_func_start PlayExclamationPointEffect__022E5D4C -PlayExclamationPointEffect__022E5D4C: ; 0x022E539C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E53E8 ; =0x00000143 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E53E8 ; =0x00000143 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E53E8: .word 0x00000143 - arm_func_end PlayExclamationPointEffect__022E5D4C - - arm_func_start ov29_022E53EC -ov29_022E53EC: ; 0x022E53EC - bx lr - arm_func_end ov29_022E53EC - - arm_func_start ov29_022E53F0 -ov29_022E53F0: ; 0x022E53F0 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x19 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x19 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E53F0 - - arm_func_start ov29_022E543C -ov29_022E543C: ; 0x022E543C - stmdb sp!, {r3, lr} - sub sp, sp, #0x10 - mov r1, #2 - mov ip, #0 - stmia sp, {r1, ip} - sub r1, ip, #1 - str r1, [sp, #8] - mov r1, #0x15 - mov r2, #1 - mov r3, #3 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E543C - - arm_func_start ov29_022E5474 -ov29_022E5474: ; 0x022E5474 - bx lr - arm_func_end ov29_022E5474 - - arm_func_start ov29_022E5478 -ov29_022E5478: ; 0x022E5478 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r2, _022E5508 ; =DUNGEON_PTR - mov r4, r0 - ldr r2, [r2] - ldr r0, [r1, #8] - ldrb r1, [r2, #0x1c5] - cmp r1, #0 - beq _022E54A0 - bl ov29_0230D618 -_022E54A0: - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _022E54BC -_022E54AC: ; jump table - b _022E54BC ; case 0 - b _022E54C4 ; case 1 - b _022E54CC ; case 2 - b _022E54D4 ; case 3 -_022E54BC: - mov r1, #8 - b _022E54D8 -_022E54C4: - mov r1, #9 - b _022E54D8 -_022E54CC: - mov r1, #0xa - b _022E54D8 -_022E54D4: - mov r1, #0xb -_022E54D8: - mov ip, #0 - mov r2, #1 - str ip, [sp] - str r2, [sp, #4] - sub r0, r2, #2 - str r0, [sp, #8] - mov r0, r4 - mov r3, #3 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E5508: .word DUNGEON_PTR - arm_func_end ov29_022E5478 - - arm_func_start ov29_022E550C -ov29_022E550C: ; 0x022E550C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E5558 ; =0x0000013E - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x13c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E5558: .word 0x0000013E - arm_func_end ov29_022E550C - - arm_func_start ov29_022E555C -ov29_022E555C: ; 0x022E555C - bx lr - arm_func_end ov29_022E555C - - arm_func_start ov29_022E5560 -ov29_022E5560: ; 0x022E5560 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r1 - cmp r2, #1 - bne _022E55B0 - mov r0, #0xf8 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0xf8 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E55E8 -_022E55B0: - mov r0, #0xf9 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0xf9 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E55E8: - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E5560 - - arm_func_start ov29_022E55F0 -ov29_022E55F0: ; 0x022E55F0 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r0, #0x2a - mov r4, r1 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x2a - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E55F0 - - arm_func_start ov29_022E563C -ov29_022E563C: ; 0x022E563C - ldr ip, _022E564C ; =PlayEffectAnimationPixelPos - mov r1, #0x90 - mov r2, #1 - bx ip - .align 2, 0 -_022E564C: .word PlayEffectAnimationPixelPos - arm_func_end ov29_022E563C - - arm_func_start ov29_022E5650 -ov29_022E5650: ; 0x022E5650 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r0, _022E569C ; =0x00000167 - mov r4, r1 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E569C ; =0x00000167 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E569C: .word 0x00000167 - arm_func_end ov29_022E5650 - - arm_func_start PlaySeByIdIfShouldDisplayEntity -PlaySeByIdIfShouldDisplayEntity: ; 0x022E56A0 - stmdb sp!, {r4, lr} - mov r4, r1 - cmp r0, #0 - bne _022E56BC - mov r0, r4 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r4, pc} -_022E56BC: - bl ShouldDisplayEntityAdvanced - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r4, pc} - arm_func_end PlaySeByIdIfShouldDisplayEntity - - arm_func_start ov29_022E56D4 -ov29_022E56D4: ; 0x022E56D4 - stmdb sp!, {r4, lr} - mov r4, r1 - bl ov29_022E2CA0 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r4, pc} - arm_func_end ov29_022E56D4 - - arm_func_start ov29_022E56F4 -ov29_022E56F4: ; 0x022E56F4 - stmdb sp!, {r4, lr} - mov r4, r1 - cmp r0, #0 - bne _022E5710 - mov r0, r4 - bl PlayMeByIdIfNot998 - ldmia sp!, {r4, pc} -_022E5710: - bl ShouldDisplayEntityAdvanced - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r4, pc} - arm_func_end ov29_022E56F4 - - arm_func_start ov29_022E5728 -ov29_022E5728: ; 0x022E5728 - stmdb sp!, {r3, lr} - cmp r1, #0 - bne _022E5740 - ldr r0, _022E5760 ; =0x0000130E - bl PlaySeByIdIfNotSilence - ldmia sp!, {r3, pc} -_022E5740: - cmp r1, #1 - bne _022E5754 - ldr r0, _022E5764 ; =0x0000130D - bl PlaySeByIdIfNotSilence - ldmia sp!, {r3, pc} -_022E5754: - ldr r0, _022E5768 ; =0x0000130C - bl PlaySeByIdIfNotSilence - ldmia sp!, {r3, pc} - .align 2, 0 -_022E5760: .word 0x0000130E -_022E5764: .word 0x0000130D -_022E5768: .word 0x0000130C - arm_func_end ov29_022E5728 - - arm_func_start PlayMissSfx__022E611C -PlayMissSfx__022E611C: ; 0x022E576C - stmdb sp!, {r3, lr} - ldr r0, [r1, #0xb4] - ldrb r0, [r0, #6] - cmp r0, #0 - beq _022E578C - ldr r0, _022E5798 ; =0x00001306 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r3, pc} -_022E578C: - ldr r0, _022E579C ; =0x00001307 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r3, pc} - .align 2, 0 -_022E5798: .word 0x00001306 -_022E579C: .word 0x00001307 - arm_func_end PlayMissSfx__022E611C - - arm_func_start PlayMissSfx__022E6150 -PlayMissSfx__022E6150: ; 0x022E57A0 - stmdb sp!, {r3, lr} - ldr r0, [r0, #0xb4] - ldrb r0, [r0, #6] - cmp r0, #0 - beq _022E57C0 - ldr r0, _022E57CC ; =0x00001306 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r3, pc} -_022E57C0: - ldr r0, _022E57D0 ; =0x00001307 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r3, pc} - .align 2, 0 -_022E57CC: .word 0x00001306 -_022E57D0: .word 0x00001307 - arm_func_end PlayMissSfx__022E6150 - - arm_func_start ov29_022E57D4 -ov29_022E57D4: ; 0x022E57D4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E585C ; =0x0000025A - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x258 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - ldr r0, _022E5860 ; =0x0000025B - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r1, #2 - str r1, [sp] - mov r2, #0 - str r2, [sp, #4] - sub r1, r2, #1 - str r1, [sp, #8] - str r2, [sp, #0xc] - ldr r1, _022E5860 ; =0x0000025B - mov r0, r4 - mov r2, #1 - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E585C: .word 0x0000025A -_022E5860: .word 0x0000025B - arm_func_end ov29_022E57D4 - - arm_func_start ov29_022E5864 -ov29_022E5864: ; 0x022E5864 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x16 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x16 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E5864 - - arm_func_start ov29_022E58B0 -ov29_022E58B0: ; 0x022E58B0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, r2 - mov sl, r0 - mov r5, r1 - cmp r4, #0x11 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, r5 - bl ov29_022E2CA0 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrsh r0, [r5] - mov r2, #0x18 - add r1, sp, #0 - smulbb r0, r0, r2 - add r0, r0, #0xc - mov r0, r0, lsl #8 - mov r0, r0, asr #8 - strh r0, [sp] - ldrsh r3, [r5, #2] - mov r0, r4 - smulbb r2, r3, r2 - add r2, r2, #0x10 - mov r2, r2, lsl #8 - mov r2, r2, asr #8 - strh r2, [sp, #2] - bl ov10_022BEC08 - cmp r4, #4 - mov r6, r0 - cmpne r4, #0x18 - bne _022E5944 - mov r0, #0 - mov r1, #0x308 - bl PlaySeByIdIfShouldDisplayEntity - mov r0, #0x28 - mov r1, #0x33 - bl ov29_022EA370 - b _022E59C4 -_022E5944: - cmp r4, #8 - bne _022E59B8 - ldr sb, [sl, #0xb4] - mov r7, #0 - mov r0, r6, lsl #0x10 - ldrb r8, [sb, #0x4c] - mov r4, r0, asr #0x10 - mov r5, r7 - mov fp, #2 - b _022E59A4 -_022E596C: - sub r0, r8, #1 - and r8, r0, #7 - mov r0, sl - mov r1, r5 - mov r2, r8 - bl ChangeMonsterAnimation - mov r0, fp - mov r1, #0x33 - bl ov29_022EA370 - mov r0, r4 - bl AnimationHasMoreFrames - cmp r0, #0 - beq _022E59AC - add r7, r7, #2 -_022E59A4: - cmp r7, #0x3e8 - blt _022E596C -_022E59AC: - and r0, r8, #7 - strb r0, [sb, #0x4c] - b _022E59C4 -_022E59B8: - mov r0, #0x28 - mov r1, #0x33 - bl ov29_022EA370 -_022E59C4: - mov r0, r6, lsl #0x10 - mov r7, #0 - mov r4, r0, asr #0x10 - mov r5, #0x42 - b _022E59F4 -_022E59D8: - mov r0, r5 - bl AdvanceFrame - mov r0, r4 - bl AnimationHasMoreFrames - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - add r7, r7, #1 -_022E59F4: - cmp r7, #0x3e8 - blt _022E59D8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov29_022E58B0 - - arm_func_start ov29_022E5A00 -ov29_022E5A00: ; 0x022E5A00 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x18 - mov r5, r0 - mov r4, r1 - bl ShouldDisplayEntityAdvanced - cmp r0, #0 - beq _022E5AD4 - ldrb r0, [r4] - ldr r1, [r5, #0xc] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r4, #0 - ldreqsh r4, [r4, #4] - mov r1, r1, asr #8 - ldr r0, _022E5ADC ; =DUNGEON_PTR - strh r1, [sp, #4] - ldr r2, [r5, #0x10] - ldr r1, [r0] - mov r0, r2, asr #8 - strh r0, [sp, #6] - ldr r0, _022E5AE0 ; =0x0001A226 - ldrsh r3, [sp, #6] - ldrsh r1, [r1, r0] - add r0, sp, #8 - add r2, r5, #0x2c - sub r1, r3, r1 - add r1, r1, r1, lsr #31 - mov r3, r1, asr #1 - mov r1, #4 - add r5, r3, #1 - bl sub_0201D034 - add r1, sp, #4 - add r2, sp, #8 - mov r0, r4 - mov r3, #0 - str r5, [sp] - bl ov10_022BEC94 - mov r0, r0, lsl #0x10 - mov r6, #0 - mov r4, r0, asr #0x10 - mov r5, #0x42 - b _022E5ACC -_022E5AB0: - mov r0, r5 - bl AdvanceFrame - mov r0, r4 - bl AnimationHasMoreFrames - cmp r0, #0 - beq _022E5AD4 - add r6, r6, #1 -_022E5ACC: - cmp r6, #0x3e8 - blt _022E5AB0 -_022E5AD4: - add sp, sp, #0x18 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022E5ADC: .word DUNGEON_PTR -#ifdef JAPAN -_022E5AE0: .word 0x0001A182 -#else -_022E5AE0: .word 0x0001A226 -#endif - arm_func_end ov29_022E5A00 - - arm_func_start ov29_022E5AE4 -ov29_022E5AE4: ; 0x022E5AE4 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x18 - mov r5, r0 - mov r4, r1 - bl ShouldDisplayEntityAdvanced - cmp r0, #0 - beq _022E5BC8 - ldrb r0, [r4] - ldr r1, [r5, #0xc] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r4, #0 - ldreqsh r4, [r4, #4] - mov r1, r1, asr #8 - ldr r0, _022E5BD0 ; =DUNGEON_PTR - strh r1, [sp, #4] - ldr r2, [r5, #0x10] - ldr r1, [r0] - mov r0, r2, asr #8 - strh r0, [sp, #6] - ldr r0, _022E5BD4 ; =0x0001A226 - ldrsh r3, [sp, #6] - ldrsh r1, [r1, r0] - add r0, sp, #8 - add r2, r5, #0x2c - sub r1, r3, r1 - add r1, r1, r1, lsr #31 - mov r1, r1, asr #1 - add r1, r1, #1 - mov r3, r1, lsl #0x10 - mov r1, #4 - mov r5, r3, asr #0x10 - bl sub_0201D034 - add r1, sp, #4 - add r2, sp, #8 - mov r0, r4 - mov r3, #1 - str r5, [sp] - bl ov10_022BEC94 - mov r0, r0, lsl #0x10 - mov r6, #0 - mov r4, r0, asr #0x10 - mov r5, #0x42 - b _022E5BC0 -_022E5B9C: - mov r0, r5 - bl AdvanceFrame - mov r0, r4 - bl AnimationHasMoreFrames - cmp r0, #0 - beq _022E5BC8 - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_022E5BC0: - cmp r6, #0x3e8 - blt _022E5B9C -_022E5BC8: - add sp, sp, #0x18 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022E5BD0: .word DUNGEON_PTR -#ifdef JAPAN -_022E5BD4: .word 0x0001A182 -#else -_022E5BD4: .word 0x0001A226 -#endif - arm_func_end ov29_022E5AE4 - - arm_func_start ov29_022E5BD8 -ov29_022E5BD8: ; 0x022E5BD8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x40 - mov r5, r0 - bl ShouldDisplayEntityWrapper - cmp r0, #0 - beq _022E5D4C - ldr r1, [r5, #0xb4] - ldr r0, [r5, #0xc] - ldrb r4, [r1, #0x4c] - mov r1, r0, asr #8 - ldr r0, _022E5D58 ; =DUNGEON_PTR - strh r1, [sp, #0x10] - ldr r2, [r5, #0x10] - ldr r1, [r0] - mov r0, r2, asr #8 - strh r0, [sp, #0x12] - ldr r0, _022E5D5C ; =0x0001A226 - ldrsh r2, [sp, #0x12] - ldrsh r1, [r1, r0] - add r0, sp, #0x14 - sub r1, r2, r1 - add r1, r1, r1, lsr #31 - mov sl, r1, asr #1 - bl ov10_022BF274 - mov r5, #0 - ldrsh r3, [sp, #0x10] - ldrsh r2, [sp, #0x12] - ldr r6, _022E5D60 ; =0x00000165 - sub r1, r5, #1 - add r0, sp, #0x30 - str r6, [sp, #0x14] - str r5, [sp, #0x18] - str r4, [sp, #0x1c] - strh r3, [sp, #0x20] - strh r2, [sp, #0x22] - strh r5, [sp, #0x24] - strh r5, [sp, #0x26] - strb r1, [sp, #0x28] - str sl, [sp, #0x2c] - bl InitOamAdjustmentInfo - add r0, sp, #0x14 - mov r1, r5 - bl ov10_022BF2B4 - ldr r2, _022E5D64 ; =DIRECTIONS_XY - mov sb, r5 - add r1, r2, r4, lsl #2 - mov r3, r4, lsl #2 - ldrh r2, [r2, r3] - ldrh r1, [r1, #2] - mov r0, r0, lsl #0x10 - strh r2, [sp, #0xc] - strh r1, [sp, #0xe] - ldrsh r8, [sp, #0xc] - ldrsh r7, [sp, #0xe] - ldr r4, _022E5D58 ; =DUNGEON_PTR - ldr fp, _022E5D5C ; =0x0001A226 - mov r5, r0, asr #0x10 - mov r6, sb -_022E5CC0: - mov r0, r5 - add r1, sp, #0x10 - mov r2, r6 - mov r3, sl - str r6, [sp] - bl ov10_022BF45C - mov r0, #0x42 - bl AdvanceFrame - ldrsh r0, [sp, #0x12] - ldrsh r1, [sp, #0x10] - add sb, sb, #1 - add r0, r0, r7, lsl #2 - add r1, r1, r8, lsl #2 - strh r0, [sp, #0x12] - strh r1, [sp, #0x10] - ldr r0, [r4] - ldrsh r1, [sp, #0x12] - ldrsh r0, [r0, fp] - cmp sb, #6 - sub r0, r1, r0 - add r0, r0, r0, lsr #31 - mov sl, r0, asr #1 - blt _022E5CC0 - bl ov10_022BDC68 - ldrsh r2, [sp, #0x10] - ldrsh r1, [sp, #0x12] - add r0, sp, #4 - mov r4, r2, lsl #8 - mov r3, r1, lsl #8 - mov r1, #0x1a0 - mov r2, #1 - str r4, [sp, #4] - str r3, [sp, #8] - bl PlayEffectAnimationPixelPos - b _022E5D50 -_022E5D4C: - mvn r0, #0 -_022E5D50: - add sp, sp, #0x40 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022E5D58: .word DUNGEON_PTR -#ifdef JAPAN -_022E5D5C: .word 0x0001A182 -#else -_022E5D5C: .word 0x0001A226 -#endif -_022E5D60: .word 0x00000165 -_022E5D64: .word DIRECTIONS_XY - arm_func_end ov29_022E5BD8 - - arm_func_start PlayStairsSfx -PlayStairsSfx: ; 0x022E5D68 - stmdb sp!, {r4, lr} - mov r4, #0x3f00 - bl GetFloorType - cmp r0, #0 - beq _022E5D88 - cmp r0, #1 - cmpne r0, #2 - beq _022E5DA4 -_022E5D88: - ldr r0, _022E5DB0 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - bl DungeonGoesUp - cmp r0, #0 - ldrne r4, _022E5DB4 ; =0x0000130A - ldreq r4, _022E5DB8 ; =0x00001309 -_022E5DA4: - mov r0, r4 - bl PlaySeByIdIfNotSilence - ldmia sp!, {r4, pc} - .align 2, 0 -_022E5DB0: .word DUNGEON_PTR -_022E5DB4: .word 0x0000130A -_022E5DB8: .word 0x00001309 - arm_func_end PlayStairsSfx - - arm_func_start ov29_022E5DBC -ov29_022E5DBC: ; 0x022E5DBC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - cmp r4, #3 - bne _022E5DD8 - mov r0, #0 - bl ChangeDungeonMusic -_022E5DD8: - cmp r5, #4 - beq _022E5E10 - cmp r4, #3 - bne _022E5DFC - ldr r0, _022E5E7C ; =ov29_0235119C - mov r1, r4, lsl #1 - ldrh r0, [r0, r1] - bl PlaySeByIdIfNotSilence - b _022E5E3C -_022E5DFC: - ldr r0, _022E5E7C ; =ov29_0235119C - mov r1, r4, lsl #1 - ldrh r0, [r0, r1] - bl PlayMeByIdIfNot998 - b _022E5E3C -_022E5E10: - cmp r4, #3 - bne _022E5E2C - ldr r0, _022E5E80 ; =ov29_02351194 - mov r1, r4, lsl #1 - ldrh r0, [r0, r1] - bl PlaySeByIdIfNotSilence - b _022E5E3C -_022E5E2C: - ldr r0, _022E5E7C ; =ov29_0235119C - mov r1, r4, lsl #1 - ldrh r0, [r0, r1] - bl PlayMeByIdIfNot998 -_022E5E3C: - mov r0, r5 - mov r1, r4 - mov r2, #0x80 - bl ov29_022E6A00 - mov r4, #0x46 - b _022E5E5C -_022E5E54: - mov r0, r4 - bl AdvanceFrame -_022E5E5C: - bl ov29_022E6C08 - cmp r0, #0 - bne _022E5E54 - bl ov29_022E6CE0 - bl ov29_02339148 - mov r0, #1 - bl ov29_0234B1A4 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_022E5E7C: .word ov29_0235119C -_022E5E80: .word ov29_02351194 - arm_func_end ov29_022E5DBC - - arm_func_start ov29_022E5E84 -ov29_022E5E84: ; 0x022E5E84 - stmdb sp!, {r4, r5, r6, lr} - mov r1, #8 - mov r2, r1 - mov r6, r0 - bl ChangeMonsterAnimation - mov r5, #0 - mov r4, #0x51 - b _022E5EC4 -_022E5EA4: - mov r0, r4 - bl AdvanceFrame - ldr r0, [r6, #0x58] - tst r0, #3 - ldreqb r0, [r6, #0xaf] - cmpeq r0, #8 - ldmneia sp!, {r4, r5, r6, pc} - add r5, r5, #1 -_022E5EC4: - cmp r5, #0x64 - blt _022E5EA4 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end ov29_022E5E84 - - arm_func_start ShouldDisplayEntityAdvanced -ShouldDisplayEntityAdvanced: ; 0x022E5ED0 - stmdb sp!, {r3, lr} - ldrb r1, [r0, #0x20] - cmp r1, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - ldr r1, _022E5F1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 -#ifdef JAPAN - ldrb r2, [r1, #0x19a] - cmp r2, #0 - beq _022E5F14 - ldr r1, [r1, #0x188] -#else - ldrb r2, [r1, #0x23e] - cmp r2, #0 - beq _022E5F14 - ldr r1, [r1, #0x22c] -#endif - cmp r1, r0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} -_022E5F14: - bl ShouldDisplayEntityWrapper - ldmia sp!, {r3, pc} - .align 2, 0 -_022E5F1C: .word DUNGEON_PTR - arm_func_end ShouldDisplayEntityAdvanced - - arm_func_start ov29_022E5F20 -ov29_022E5F20: ; 0x022E5F20 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - ldr r0, _022E5FDC ; =0x00000199 - mov r8, #0 - ldr fp, _022E5FE0 ; =DUNGEON_PTR - rsb r4, r0, #0x198 - mov r7, r8 - mov r6, #2 - mov r5, r8 -_022E5F44: - ldr r0, [fp] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xad4] -#else - ldr sb, [r0, #0xb78] -#endif - mov r0, sb - bl EntityIsValid__022E37B8 - cmp r0, #0 - ldrne sl, [sb, #0xb4] - ldrneb r0, [sl, #0xfc] - cmpne r0, #0 - beq _022E5FC8 - ldr r0, _022E5FDC ; =0x00000199 - strb r7, [sl, #0xfc] - bl GetEffectAnimationField0x19 - str r6, [sp] - str r5, [sp, #4] - str r4, [sp, #8] - and r3, r0, #0xff - ldr r1, _022E5FDC ; =0x00000199 - str r5, [sp, #0xc] - mov r0, sb - mov r2, r5 - bl PlayEffectAnimationEntity - ldrb r0, [sl, #6] - cmp r0, #0 - bne _022E5FC8 - mov r0, #0 - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _022E5FE4 ; =0x00000B92 - mov r0, sb - bl LogMessageByIdWithPopup -_022E5FC8: - add r8, r8, #1 - cmp r8, #0x14 - blt _022E5F44 - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022E5FDC: .word 0x00000199 -_022E5FE0: .word DUNGEON_PTR -#ifdef JAPAN -_022E5FE4: .word 0x000008A4 -#else -_022E5FE4: .word 0x00000B92 -#endif - arm_func_end ov29_022E5F20 - - arm_func_start ov29_022E5FE8 -ov29_022E5FE8: ; 0x022E5FE8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - ldr r2, _022E60D4 ; =DUNGEON_PTR - mov r6, r0 - ldr r0, [r2] - mov r5, r1 - add r0, r0, #0x1a000 -#ifdef JAPAN - ldr r4, [r0, #0x188] -#else - ldr r4, [r0, #0x22c] -#endif - cmp r4, #0 - bne _022E6018 - bl GetLeader - mov r4, r0 -_022E6018: - ldr r0, _022E60D8 ; =ov29_023511DC - mov r1, r6, lsl #1 - ldrh r1, [r0, r1] - cmp r1, #0x3f00 - beq _022E6034 - mov r0, r4 - bl PlaySeByIdIfShouldDisplayEntity -_022E6034: - ldr r0, _022E60DC ; =ov29_0235122C - ldr r7, [r0, r6, lsl #2] - cmp r7, #0 - blt _022E60CC - cmp r5, #0 - beq _022E6090 - bl IsCurrentFixedRoomBossFight - cmp r0, #0 - bne _022E6090 - mov r0, r7 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, r7 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - b _022E60CC -_022E6090: - ldr r0, _022E60E0 ; =ov29_0235124C - ldr r5, [r0, r6, lsl #2] - mov r0, r5 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, r5 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity -_022E60CC: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022E60D4: .word DUNGEON_PTR -_022E60D8: .word ov29_023511DC -_022E60DC: .word ov29_0235122C -_022E60E0: .word ov29_0235124C - arm_func_end ov29_022E5FE8 - - arm_func_start ov29_022E60E4 -ov29_022E60E4: ; 0x022E60E4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x29 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x29 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E60E4 - - arm_func_start PlayEffectAnimation0x1A9__022E6130 -PlayEffectAnimation0x1A9__022E6130: ; 0x022E6130 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E6178 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - ldr r1, _022E6178 ; =0x000001A9 - mov r0, r4 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E6178: .word 0x000001A9 - arm_func_end PlayEffectAnimation0x1A9__022E6130 - - arm_func_start PlayEffectAnimation0x1A9__022E617C -PlayEffectAnimation0x1A9__022E617C: ; 0x022E617C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E61C4 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - ldr r1, _022E61C4 ; =0x000001A9 - mov r0, r4 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E61C4: .word 0x000001A9 - arm_func_end PlayEffectAnimation0x1A9__022E617C - - arm_func_start PlayEffectAnimation0x1A9__022E61C8 -PlayEffectAnimation0x1A9__022E61C8: ; 0x022E61C8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E6210 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - ldr r1, _022E6210 ; =0x000001A9 - mov r0, r4 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E6210: .word 0x000001A9 - arm_func_end PlayEffectAnimation0x1A9__022E61C8 - - arm_func_start PlayEffectAnimation0x1A9__022E6214 -PlayEffectAnimation0x1A9__022E6214: ; 0x022E6214 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E625C ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - ldr r1, _022E625C ; =0x000001A9 - mov r0, r4 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E625C: .word 0x000001A9 - arm_func_end PlayEffectAnimation0x1A9__022E6214 - - arm_func_start ov29_022E6260 -ov29_022E6260: ; 0x022E6260 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x1a8 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x1a8 - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E6260 - - arm_func_start PlayEffectAnimation0x29 -PlayEffectAnimation0x29: ; 0x022E62A8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x29 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x29 - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end PlayEffectAnimation0x29 - - arm_func_start ov29_022E62F0 -ov29_022E62F0: ; 0x022E62F0 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x48 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x48 - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E62F0 - - arm_func_start ov29_022E6338 -ov29_022E6338: ; 0x022E6338 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E6384 ; =0x000001A6 - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x1a4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E6384: .word 0x000001A6 - arm_func_end ov29_022E6338 - - arm_func_start ov29_022E6388 -ov29_022E6388: ; 0x022E6388 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E63D4 ; =0x00000297 - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E63D4 ; =0x00000297 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E63D4: .word 0x00000297 - arm_func_end ov29_022E6388 - - arm_func_start PlayEffectAnimation0x18E -PlayEffectAnimation0x18E: ; 0x022E63D8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E6420 ; =0x0000018E - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r2, #0 - mov r1, #2 - stmia sp, {r1, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r4 - add r1, r1, #0x18c - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E6420: .word 0x0000018E - arm_func_end PlayEffectAnimation0x18E - - arm_func_start ov29_022E6424 -ov29_022E6424: ; 0x022E6424 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x1b0 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x1b0 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - mov r0, #0xa - mov r1, #0x42 - bl ov29_022EA370 - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E6424 - - arm_func_start ov29_022E647C -ov29_022E647C: ; 0x022E647C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x1a8 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x1a8 - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E647C - - arm_func_start PlayEffectAnimation0x1A9__022E64C4 -PlayEffectAnimation0x1A9__022E64C4: ; 0x022E64C4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E650C ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - ldr r1, _022E650C ; =0x000001A9 - mov r0, r4 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E650C: .word 0x000001A9 - arm_func_end PlayEffectAnimation0x1A9__022E64C4 - - arm_func_start PlayEffectAnimation0x1A9__022E6510 -PlayEffectAnimation0x1A9__022E6510: ; 0x022E6510 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E6558 ; =0x000001A9 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - ldr r1, _022E6558 ; =0x000001A9 - mov r0, r4 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E6558: .word 0x000001A9 - arm_func_end PlayEffectAnimation0x1A9__022E6510 - - arm_func_start ov29_022E655C -ov29_022E655C: ; 0x022E655C - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E65A4 ; =0x000001AB - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - ldr r1, _022E65A4 ; =0x000001AB - mov r0, r4 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E65A4: .word 0x000001AB - arm_func_end ov29_022E655C - - arm_func_start ov29_022E65A8 -ov29_022E65A8: ; 0x022E65A8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #4 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E65A8 - - arm_func_start ov29_022E65F4 -ov29_022E65F4: ; 0x022E65F4 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E6640 ; =0x0000011E - bl GetEffectAnimationField0x19 - mov r2, r0 - mov ip, #0 - mov r1, #2 - stmia sp, {r1, ip} - sub r0, ip, #1 - str r0, [sp, #8] - and r3, r2, #0xff - mov r0, r4 - add r1, r1, #0x11c - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E6640: .word 0x0000011E - arm_func_end ov29_022E65F4 - - arm_func_start ov29_022E6644 -ov29_022E6644: ; 0x022E6644 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E6690 ; =0x0000011D - bl GetEffectAnimationField0x19 - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E6690 ; =0x0000011D - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E6690: .word 0x0000011D - arm_func_end ov29_022E6644 - - arm_func_start PlayKeyDoorUnlockEffect -PlayKeyDoorUnlockEffect: ; 0x022E6694 - stmdb sp!, {r4, lr} - mov r4, r1 - ldr r1, _022E66C0 ; =0x0000019E - mov r2, #1 - bl PlayEffectAnimationPos - cmp r4, #0 - ldmeqia sp!, {r4, pc} - mov r0, #0 - mov r1, #9 - bl ov29_022E56F4 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E66C0: .word 0x0000019E - arm_func_end PlayKeyDoorUnlockEffect - - arm_func_start ov29_022E66C4 -ov29_022E66C4: ; 0x022E66C4 - ldr ip, _022E66D4 ; =PlayEffectAnimationPos - mov r1, #0x36 - mov r2, #1 - bx ip - .align 2, 0 -_022E66D4: .word PlayEffectAnimationPos - arm_func_end ov29_022E66C4 - - arm_func_start ov29_022E66D8 -ov29_022E66D8: ; 0x022E66D8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x15 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x15 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E66D8 - - arm_func_start ov29_022E6724 -ov29_022E6724: ; 0x022E6724 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x1b4 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x1b4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E6724 - - arm_func_start ov29_022E6770 -ov29_022E6770: ; 0x022E6770 - ldr ip, _022E6780 ; =PlayEffectAnimationPos - mov r1, #0x37 - mov r2, #1 - bx ip - .align 2, 0 -_022E6780: .word PlayEffectAnimationPos - arm_func_end ov29_022E6770 - - arm_func_start ov29_022E6784 -ov29_022E6784: ; 0x022E6784 - ldr ip, _022E6794 ; =PlayEffectAnimationPos - mov r1, #0x29 - mov r2, #1 - bx ip - .align 2, 0 -_022E6794: .word PlayEffectAnimationPos - arm_func_end ov29_022E6784 - - arm_func_start ov29_022E6798 -ov29_022E6798: ; 0x022E6798 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x18 - bl GetEffectAnimationField0x19 - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x18 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end ov29_022E6798 - - arm_func_start ov29_022E67E4 -ov29_022E67E4: ; 0x022E67E4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x10 - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r4, r2 - mov r5, #0x200 - bl ShouldDisplayEntityAdvanced - cmp r0, #0 - beq _022E68AC - mov r0, r7 - bl GetEffectAnimationField0x19 - mov r3, r0 - mov r0, #2 - mov r2, #0 - stmia sp, {r0, r2} - sub r0, r2, #1 - str r0, [sp, #8] - mov r0, r6 - mov r1, r7 - and r3, r3, #0xff - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - mov r0, r4 - mov r1, #0x42 - bl ov29_022EA370 - mov r4, #0x42 - ldr sb, _022E68B4 ; =DUNGEON_PTR - ldr r7, _022E68B8 ; =0x0001A226 - mvn r8, #7 - b _022E6894 -_022E6860: - mov r0, r4 - bl AdvanceFrame - ldr r0, [r6, #0x1c] - add r2, r0, r5 - str r2, [r6, #0x1c] - ldr r0, [sb] - ldr r1, [r6, #0x10] - ldrsh r0, [r0, r7] - sub r1, r1, r2 - add r5, r5, #0x100 - rsb r0, r0, r1, asr #8 - cmp r0, r8 - blt _022E68A0 -_022E6894: - ldr r0, [r6, #0x1c] - cmp r0, #0xc800 - blt _022E6860 -_022E68A0: - mov r0, #0 - strb r0, [r6, #0x20] - bl AnimationDelayOrSomething -_022E68AC: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_022E68B4: .word DUNGEON_PTR -#ifdef JAPAN -_022E68B8: .word 0x0001A182 -#else -_022E68B8: .word 0x0001A226 -#endif - arm_func_end ov29_022E67E4 - - arm_func_start ov29_022E68BC -ov29_022E68BC: ; 0x022E68BC - ldr ip, _022E68D0 ; =ov29_022E67E4 - mov r1, r0 - ldr r0, _022E68D4 ; =0x0000013E - mov r2, #5 - bx ip - .align 2, 0 -_022E68D0: .word ov29_022E67E4 -_022E68D4: .word 0x0000013E - arm_func_end ov29_022E68BC - - arm_func_start ov29_022E68D8 -ov29_022E68D8: ; 0x022E68D8 - ldr ip, _022E68EC ; =ov29_022E67E4 - mov r1, r0 - mov r0, #0x1bc - mov r2, #0xe - bx ip - .align 2, 0 -_022E68EC: .word ov29_022E67E4 - arm_func_end ov29_022E68D8 - - arm_func_start ov29_022E68F0 -ov29_022E68F0: ; 0x022E68F0 - ldr ip, _022E6904 ; =ov29_022E67E4 - mov r1, r0 - ldr r0, _022E6908 ; =0x0000013E - mov r2, #5 - bx ip - .align 2, 0 -_022E6904: .word ov29_022E67E4 -_022E6908: .word 0x0000013E - arm_func_end ov29_022E68F0 - - arm_func_start ov29_022E690C -ov29_022E690C: ; 0x022E690C - ldr ip, _022E6920 ; =ov29_022E67E4 - mov r1, r0 - ldr r0, _022E6924 ; =0x0000013E - mov r2, #5 - bx ip - .align 2, 0 -_022E6920: .word ov29_022E67E4 -_022E6924: .word 0x0000013E - arm_func_end ov29_022E690C - - arm_func_start PlayStairSensorArrowEffect -PlayStairSensorArrowEffect: ; 0x022E6928 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0x1c - ldr r3, _022E69F8 ; =ov29_023511B0 - mov r4, r1 - add r2, sp, #0x10 - mov r5, r0 - mov r1, #6 -_022E6944: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E6944 - ldr r0, _022E69FC ; =0x0000027A - bl GetEffectAnimationField0x19 - mov r3, #2 - mov r1, r4, lsr #0x1f - mov ip, r0 - rsb r0, r1, r4, lsl #29 - add r0, r1, r0, ror #29 - mov r0, r0, lsl #0x10 - str r3, [sp] - mov r2, #0 - add r1, r3, #0x278 - str r2, [sp, #4] - mov r0, r0, asr #0x10 - str r0, [sp, #8] - add r4, sp, #0x10 - mov r0, r5 - and r3, ip, #0xff - str r4, [sp, #0xc] - bl PlayEffectAnimationEntity - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - mov r6, #0 - mov r4, #0x42 - b _022E69D8 -_022E69B4: - mov r0, r5 - bl AnimationHasMoreFrames - cmp r0, #0 - beq _022E69E0 - mov r0, r4 - bl AdvanceFrame - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_022E69D8: - cmp r6, #0x64 - blt _022E69B4 -_022E69E0: - cmp r5, #0 - blt _022E69F0 - mov r0, r5 - bl ov10_022BDE50 -_022E69F0: - add sp, sp, #0x1c - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_022E69F8: .word ov29_023511B0 -_022E69FC: .word 0x0000027A - arm_func_end PlayStairSensorArrowEffect - - arm_func_start ov29_022E6A00 -ov29_022E6A00: ; 0x022E6A00 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x38 - mov r8, r0 - mov r7, r1 - mov r4, r2 - mov r5, #0 - bl GetLeader - mov r6, r0 - mov r0, #0xcc - mov r1, #7 - bl MemAlloc - ldr r1, _022E6BF8 ; =ov29_0235354C - add r2, r7, #1 - str r0, [r1, #4] - str r8, [r0] - ldr r0, [r1, #4] - mov r2, r2, lsl #2 - str r2, [r0, #8] - ldr r0, [r1, #4] - ldr r3, _022E6BFC ; =ov29_023511A4 - str r4, [r0, #4] - add r2, sp, #0 - mov r4, r5 - mov r1, #6 -_022E6A60: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E6A60 - b _022E6BDC -_022E6A74: - add r0, sp, #0xc - bl ov10_022BF274 - ldr r0, _022E6BF8 ; =ov29_0235354C - ldr r2, _022E6C00 ; =ov29_02351464 - ldr r7, [r0, #4] - mov r0, #0x18 - ldr r3, [r7] - mov r1, #0 - mla r0, r3, r0, r2 - mov r2, r5, lsl #3 - ldrsh r0, [r2, r0] - str r4, [sp, #0x10] - str r1, [sp, #0x14] - str r0, [sp, #0xc] - ldr r1, [r6, #0xc] - mov r0, #2 - mov r1, r1, asr #8 - strh r1, [sp, #0x18] - ldr r1, [r6, #0x10] - mov r1, r1, asr #8 - strh r1, [sp, #0x1a] - bl RandIntSafe - ldr r3, [r7] - ldr r2, _022E6C00 ; =ov29_02351464 - mov r1, #0x18 - mla r1, r3, r1, r2 - add r1, r1, r5, lsl #3 - ldr r2, [r1, #4] - add r1, r7, r4, lsl #2 - add r2, r0, r2, lsl #1 - mov r0, #0xff - str r2, [r1, #0x4c] - bl RandIntSafe - ldr r1, _022E6BF8 ; =ov29_0235354C - mov r2, r4, lsl #1 - ldr r1, [r1, #4] - add r3, r0, #0x9f - add r1, r1, r4, lsl #2 - add r0, r2, #8 - strh r3, [r1, #0x8c] - bl RandIntSafe - mov r2, r4, lsr #0x1f - rsb r1, r2, r4, lsl #30 - add r2, r2, r1, ror #30 - mov r1, #0x28 - mul r7, r2, r1 - rsb r2, r7, #0x18 - ldr r3, _022E6BF8 ; =ov29_0235354C - add r2, r2, r0 - ldr r1, [r3, #4] - mov r7, #4 - add r0, r1, r4, lsl #2 - strh r2, [r0, #0x8e] - ldr r1, [r3, #4] - ldr r0, _022E6C04 ; =0x0000FFFF - add r2, r1, r4, lsl #2 - ldrsh r1, [r2, #0x8c] - add r3, sp, #0 - strh r1, [sp, #0x1c] - ldrsh ip, [r2, #0x8e] - add r2, sp, #0x28 - mov r1, #6 - strh ip, [sp, #0x1e] - strb r7, [sp, #0x20] - str r0, [sp, #0x24] -_022E6B78: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E6B78 - add r0, sp, #0xc - mov r1, #0 - bl ov10_022BF2B4 - ldr r1, _022E6BF8 ; =ov29_0235354C - add r5, r5, #1 - ldr r2, [r1, #4] - cmp r5, #3 - add r2, r2, r4, lsl #2 - str r0, [r2, #0xc] - bge _022E6BD4 - ldr r0, [r1, #4] - ldr r1, _022E6C00 ; =ov29_02351464 - ldr r2, [r0] - mov r0, #0x18 - mla r0, r2, r0, r1 - mov r1, r5, lsl #3 - ldrsh r0, [r1, r0] - cmp r0, #0 - bne _022E6BD8 -_022E6BD4: - mov r5, #0 -_022E6BD8: - add r4, r4, #1 -_022E6BDC: - ldr r0, _022E6BF8 ; =ov29_0235354C - ldr r0, [r0, #4] - ldr r0, [r0, #8] - cmp r4, r0 - blt _022E6A74 - add sp, sp, #0x38 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_022E6BF8: .word ov29_0235354C -_022E6BFC: .word ov29_023511A4 -_022E6C00: .word ov29_02351464 -_022E6C04: .word 0x0000FFFF - arm_func_end ov29_022E6A00 - - arm_func_start ov29_022E6C08 -ov29_022E6C08: ; 0x022E6C08 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - ldr r0, _022E6CDC ; =ov29_0235354C - mov sl, #0 - ldr r1, [r0, #4] - mov sb, #0 - ldr r0, [r1, #4] - mov r6, #1 - cmp r0, #0 - subne r0, r0, #1 - strne r0, [r1, #4] - movne sb, #1 - mvn r7, #0x9e - mov r8, #0x9f - mov r5, sl - ldr r4, _022E6CDC ; =ov29_0235354C - b _022E6CC0 -_022E6C4C: - ldr r0, [r4, #4] - add r2, r0, sl, lsl #2 - ldrsh r1, [r2, #0x8c] - ldr r0, [r2, #0x4c] - sub r0, r1, r0 - strh r0, [r2, #0x8c] - ldr r2, [r4, #4] - add r1, r2, sl, lsl #2 - ldrsh r0, [r1, #0x8c] - cmp r0, r7 - bgt _022E6C8C - ldr r0, [r2, #4] - cmp r0, #0 - strgth r8, [r1, #0x8c] - strleh r7, [r1, #0x8c] - b _022E6C90 -_022E6C8C: - mov sb, r6 -_022E6C90: - ldr r2, [r4, #4] - mov r1, r5 - str r5, [sp] - add r0, r2, sl, lsl #2 - ldr r0, [r0, #0xc] - add r2, r2, #0x8c - mov r0, r0, lsl #0x10 - mov r3, r5 - mov r0, r0, asr #0x10 - add r2, r2, sl, lsl #2 - bl ov10_022BF45C - add sl, sl, #1 -_022E6CC0: - ldr r0, [r4, #4] - ldr r0, [r0, #8] - cmp sl, r0 - blt _022E6C4C - mov r0, sb - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_022E6CDC: .word ov29_0235354C - arm_func_end ov29_022E6C08 - - arm_func_start ov29_022E6CE0 -ov29_022E6CE0: ; 0x022E6CE0 - stmdb sp!, {r3, r4, r5, lr} - ldr r5, _022E6D64 ; =ov29_0235354C - ldr r0, [r5, #4] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r4, #0 - b _022E6D34 -_022E6CFC: - add r0, r1, r4, lsl #2 - ldr r0, [r0, #0xc] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl AnimationHasMoreFrames - cmp r0, #0 - beq _022E6D30 - ldr r0, [r5, #4] - add r0, r0, r4, lsl #2 - ldr r0, [r0, #0xc] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl ov10_022BDE50 -_022E6D30: - add r4, r4, #1 -_022E6D34: - ldr r1, [r5, #4] - ldr r0, [r1, #8] - cmp r4, r0 - blt _022E6CFC - bl ov10_022BDC68 - ldr r0, _022E6D64 ; =ov29_0235354C - ldr r0, [r0, #4] - bl MemFree - ldr r0, _022E6D64 ; =ov29_0235354C - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_022E6D64: .word ov29_0235354C - arm_func_end ov29_022E6CE0 - - arm_func_start ov29_022E6D68 -ov29_022E6D68: ; 0x022E6D68 - stmdb sp!, {r3, r4, r5, lr} - ldr r3, _022E6DCC ; =DUNGEON_PTR - mov r4, #0 - ldr r3, [r3] - add r3, r3, #0x218 - add lr, r3, #0x400 - mvn r3, #0 - b _022E6DC0 -_022E6D88: - ldr ip, [lr, r4, lsl #4] - add r5, lr, r4, lsl #4 - cmp ip, r3 - bne _022E6DBC - str r0, [r5] - str r1, [r5, #0xc] - str r2, [r5, #4] - ldr r0, [r5] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl ov10_022BEFD8 - strb r0, [r5, #8] - ldmia sp!, {r3, r4, r5, pc} -_022E6DBC: - add r4, r4, #1 -_022E6DC0: - cmp r4, #3 - blt _022E6D88 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_022E6DCC: .word DUNGEON_PTR - arm_func_end ov29_022E6D68 - - arm_func_start ov29_022E6DD0 -ov29_022E6DD0: ; 0x022E6DD0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov sb, #0 - ldr r4, _022E6E3C ; =DUNGEON_PTR - mov r7, sb - mov r8, #1 - mvn r6, #0 - mov r5, sb -_022E6DEC: - ldr r0, [r4] - add r0, r0, #0x218 - add r0, r0, #0x400 - ldr r1, [r0, sb, lsl #4] - add sl, r0, sb, lsl #4 - cmp r1, #0 - movge r0, r8 - movlt r0, r7 - tst r0, #0xff - beq _022E6E2C - mov r0, r1, lsl #0x10 - mov r0, r0, asr #0x10 - bl AnimationHasMoreFrames - cmp r0, #0 - streq r6, [sl] - streq r5, [sl, #0xc] -_022E6E2C: - add sb, sb, #1 - cmp sb, #3 - blt _022E6DEC - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_022E6E3C: .word DUNGEON_PTR - arm_func_end ov29_022E6DD0 - - arm_func_start ov29_022E6E40 -ov29_022E6E40: ; 0x022E6E40 - mov ip, #0 - ldr r1, _022E6E7C ; =DUNGEON_PTR - mvn r3, #0 - mov r2, ip -_022E6E50: - ldr r0, [r1] - add r0, r0, #0x218 - add r0, r0, #0x400 - str r3, [r0, ip, lsl #4] - add r0, r0, ip, lsl #4 - str r2, [r0, #4] - add ip, ip, #1 - str r2, [r0, #0xc] - cmp ip, #3 - blt _022E6E50 - bx lr - .align 2, 0 -_022E6E7C: .word DUNGEON_PTR - arm_func_end ov29_022E6E40 - - arm_func_start ov29_022E6E80 -ov29_022E6E80: ; 0x022E6E80 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - ldr r2, _022E6F8C ; =ov29_0235118C - mov sl, r0 - ldrh r5, [r2, #4] - ldrh r4, [r2, #6] - ldrh r3, [r2] - ldrh r0, [r2, #2] - strh r5, [sp, #0x10] - strh r4, [sp, #0x12] - strh r0, [sp, #0xe] - strh r3, [sp, #0xc] - mvn r0, #0 - ldrh r6, [sp, #0x10] - ldrh r5, [sp, #0x12] - ldrh r4, [sp, #0xc] - ldrh fp, [sp, #0xe] - str r1, [sp, #4] - mov r7, #0 - str r0, [sp, #8] -_022E6ED0: - ldr r0, _022E6F90 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x218 - add r0, r0, #0x400 - add r8, r0, r7, lsl #4 - ldr r0, [r0, r7, lsl #4] - cmp r0, #0 - movge r0, #1 - movlt r0, #0 - tst r0, #0xff - beq _022E6F78 - ldr r0, [r8, #0xc] - cmp r0, sl - bne _022E6F78 - strh r6, [sp, #0x18] - strh r5, [sp, #0x1a] - ldr r0, [sl, #0xc] - mov r0, r0, asr #8 - strh r0, [sp, #0x18] - ldr r0, [sl, #0x10] - mov r0, r0, asr #8 - strh r0, [sp, #0x1a] - strh r4, [sp, #0x14] - strh fp, [sp, #0x16] - ldrsb r1, [r8, #8] - ldr r0, [sp, #8] - ldr sb, [sl, #0xb4] - cmp r1, r0 - beq _022E6F54 - and r2, r1, #0xff - add r0, sp, #0x14 - add r1, sl, #0x2c - bl sub_0201CF90 -_022E6F54: - ldrb r0, [sb, #0x4c] - ldr r3, [sp, #4] - add r1, sp, #0x18 - str r0, [sp] - ldr r0, [r8] - add r2, sp, #0x14 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl ov10_022BFB6C -_022E6F78: - add r7, r7, #1 - cmp r7, #3 - blt _022E6ED0 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022E6F8C: .word ov29_0235118C -_022E6F90: .word DUNGEON_PTR - arm_func_end ov29_022E6E80 - - arm_func_start ov29_022E6F94 -ov29_022E6F94: ; 0x022E6F94 - ldr r1, _022E6FB8 ; =DUNGEON_PTR - mov r2, #0xff - ldr r0, [r1] - add r0, r0, #0x28000 -#ifdef JAPAN - strb r2, [r0, #0x60c] - ldr r0, [r1] - add r0, r0, #0x28000 - strb r2, [r0, #0x60d] -#else - strb r2, [r0, #0x6b0] - ldr r0, [r1] - add r0, r0, #0x28000 - strb r2, [r0, #0x6b1] -#endif - bx lr - .align 2, 0 -_022E6FB8: .word DUNGEON_PTR - arm_func_end ov29_022E6F94 - - arm_func_start LoadMappaFileAttributes -LoadMappaFileAttributes: ; 0x022E6FBC -#ifdef JAPAN -#define LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -0xA4 -#else -#define LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x50 - ldr r3, _022E79E4 ; =DUNGEON_PTR - ldr r4, _022E79E8 ; =ov29_02351584 - ldr r6, [r3] - ldr r7, [r4, #0xc] - ldr r8, [r4, #8] - add r3, r6, #0x4a - str r1, [sp] - add r4, r6, #0x348 - mov r5, r0 - add r1, r4, #0x400 - add r0, r3, #0x700 - mov r4, r2 - str r8, [sp, #0x48] - str r7, [sp, #0x4c] - bl DungeonFloorToGroupFloor - ldr r1, _022E79E4 ; =DUNGEON_PTR - ldr r3, [r1] - ldrb r2, [r3, #0x74a] - add r0, r3, #0x28000 - strb r2, [r0, #0x6b0 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - ldrb r2, [r3, #0x74b] - strb r2, [r0, #0x6b1 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - ldr r0, [r1] - ldrb r0, [r0, #0x748] - bl GetNbPrecedingFloors - ldr r1, _022E79E4 ; =DUNGEON_PTR - mov r6, #0 - ldr r2, [r1] - strh r0, [r2, #0x20] - ldr r0, [r1] - strh r6, [r0, #0x1e] - ldr r3, [r1] - ldrsh r2, [r3, #0x20] - ldrsh r0, [r3, #0x1e] - add r0, r2, r0 - strh r0, [r3, #0x22] - ldr r0, [r1] - str r6, [sp, #0x28] - ldr r0, [r0, #0x7cc] - mov r2, #0xf - cmp r0, #1 - bne _022E707C - ldr r1, _022E79EC ; =ov29_02351594 - add r0, sp, #0x48 - bl LoadFileFromRom - b _022E709C -_022E707C: - cmp r0, #2 - add r0, sp, #0x48 - bne _022E7094 - ldr r1, _022E79F0 ; =ov29_023515B0 - bl LoadFileFromRom - b _022E709C -_022E7094: - ldr r1, _022E79F4 ; =ov29_023515CC - bl LoadFileFromRom -_022E709C: - mov r0, #0x65 - bl AdvanceFrame - ldr r1, [sp, #0x48] - add r0, sp, #0x28 - bl HandleSir0Translation - mov r0, #0x65 - ldr sb, [sp, #0x28] - bl AdvanceFrame - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldr r6, [sb] - ldr r7, [r0] - mov r1, #0x12 - add r0, r7, #0x28000 - ldrb r3, [r0, #0x6b0 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - ldrb r2, [r0, #0x6b1 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - ldrb r0, [r7, #0x748] - ldr r3, [r6, r3, lsl #2] - mla r6, r2, r1, r3 - bl GetNbFloorsPlusOne - ldr r2, _022E79E4 ; =DUNGEON_PTR - ldr r1, [r2] - add r1, r1, #0x2c000 - strb r0, [r1, #0xaf4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - ldr r0, [r2] - ldrb r0, [r0, #0x748] - cmp r0, #0xae - moveq r0, #1 - movne r0, #0 - tst r0, #0xff - beq _022E7138 - bl CheckActiveChallengeRequest - cmp r0, #0 - bne _022E7138 - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x2c000 - ldrb r1, [r0, #0xaf4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - sub r1, r1, #1 - strb r1, [r0, #0xaf4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] -_022E7138: - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldrsh r2, [r6] - ldr r3, [sb, #4] - ldr r1, [r0] - add r7, r3, r2, lsl #5 - ldr r0, _022E79F8 ; =0x000286B2 - mov r2, #0x10 - add r3, r1, r0 -_022E7158: - ldrh r0, [r7], #2 - subs r2, r2, #1 - strh r0, [r3], #2 - bne _022E7158 -#ifdef JAPAN - ldr r0, _022E79FC ; =0x000286CE - ldr r2, _022E7A00 ; =0x0002CB08 - ldrsh r3, [r1, r0] - mov r0, #0 - strh r3, [r1, r2] - ldr r2, _022E79E4 ; =DUNGEON_PTR -_022E7184: - ldrsh r3, [r6, #4] - ldr r7, [sb, #0x10] - ldr r1, [r2] - ldr r7, [r7, r3, lsl #2] - mov r3, r0, lsl #1 - ldrh r3, [r7, r3] - add r1, r1, r0, lsl #1 - add r1, r1, #0x2c800 - add r0, r0, #1 - strh r3, [r1, #0x8e] -#else - ldr r2, _022E79FC ; =0x000286CE - ldr r3, _022E7A00 ; =0x0002CB08 - ldrsh r7, [r1, r2] - mov r0, #0 - strh r7, [r1, r3] - rsb r1, r2, #0x55000 - ldr r2, _022E79E4 ; =DUNGEON_PTR -_022E7184: - ldrsh r7, [r6, #4] - ldr r8, [sb, #0x10] - ldr r3, [r2] - ldr r8, [r8, r7, lsl #2] - mov r7, r0, lsl #1 - ldrh r7, [r8, r7] - add r3, r3, r0, lsl #1 - add r0, r0, #1 - strh r7, [r3, r1] -#endif - cmp r0, #0x19 - blt _022E7184 - cmp r4, #0 - beq _022E71C0 - mov r0, r5 - blx r4 -_022E71C0: - cmp r5, #0 - bne _022E7674 - ldr r0, _022E79E8 ; =ov29_02351584 - mov r4, #0 - ldrh r2, [r0] - ldrh r1, [r0, #2] - mov r0, r4 - mov r8, r4 - str r4, [sp, #0xc] - str r4, [sp, #4] - strh r2, [sp, #0x44] - strh r1, [sp, #0x46] - mov fp, #1 - bl DungeonRngSetSecondary - bl IsDestinationFloorWithMonster - str r0, [sp, #0x10] - ldr r3, _022E7A04 ; =0x0000FFFF - ldr r1, _022E79E4 ; =DUNGEON_PTR - ldr r0, _022E7A08 ; =0x0002C9EA - mov r5, r4 -_022E7210: - ldr r2, [r1] - add r2, r2, r5, lsl #1 - strh r3, [r2, r0] - add r5, r5, #1 - cmp r5, #0x10 - blt _022E7210 - bl IsItemForSpecialSpawnInBag - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #4] - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - bl IsDojoDungeon - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #4] - ldr r0, _022E7A0C ; =0x00000906 - mov r1, #0xf - bl MemAlloc - str r0, [sp, #0x18] - bl GetNbRecruited - mov r0, #0x100 - mov r1, #0xf - bl MemAlloc - mov r7, r0 - ldr r0, _022E7A10 ; =0x00000229 - mov sl, #0 - sub r0, r0, #0xaa - str r0, [sp, #0x20] - ldr r0, _022E7A10 ; =0x00000229 - rsb r0, r0, #0x600 - str r0, [sp, #0x24] -_022E7294: - mov r0, #0 - str r0, [sp, #8] - ldrsh r0, [r6, #2] - ldr r1, [sb, #0xc] - ldr r0, [r1, r0, lsl #2] - add r0, r0, sl, lsl #3 - bl GetMonsterIdFromSpawnEntry - movs r5, r0 - beq _022E73B0 - ldr r1, _022E7A10 ; =0x00000229 - cmp r5, r1 - streqh sl, [sp, #0x44] - beq _022E7398 - ldr r1, [sp, #0x20] - cmp r5, r1 - ldrne r1, [sp, #0x24] - cmpne r5, r1 - streqh sl, [sp, #0x46] - beq _022E7398 - bl CanMonsterSpawn - cmp r0, #0 - addeq sl, sl, #1 - beq _022E7294 - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x28000 - ldrb r0, [r0, #0x6c4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - bl IsBossFight - cmp r0, #0 - bne _022E7398 - mov r0, r5 - bl CheckSpawnThreshold - cmp r0, #0 - beq _022E7398 - mov r0, r5 - bl NeedsItemToSpawn - cmp r0, #0 - beq _022E7390 - ldr r0, _022E79E4 ; =DUNGEON_PTR - mov r1, r5 - ldr r0, [r0] - add r0, r0, #0x7d0 - bl IsInSpawnList - cmp r0, #0 - ldreq r0, [sp, #0x10] - cmpeq r0, #0 - ldreq r0, [sp, #0x18] - moveq r1, r5, lsl #1 - ldreqsh r0, [r0, r1] - cmpeq r0, #0 - bne _022E7398 - ldr r0, [sp, #4] - cmp r0, #0 - beq _022E7398 - ldrsh r0, [r6, #2] - ldr r1, [sb, #0xc] - mov r8, r5 - ldr r0, [r1, r0, lsl #2] - add r0, r0, sl, lsl #3 - bl GetMonsterLevelFromSpawnEntry - and r0, r0, #0xff - str r0, [sp, #0xc] - b _022E7398 -_022E7390: - mov r0, #1 - str r0, [sp, #8] -_022E7398: - ldr r0, [sp, #8] - cmp r0, #0 - strne sl, [r7, r4, lsl #2] - addne r4, r4, #1 - add sl, sl, #1 - b _022E7294 -_022E73B0: - bl FloorNumberIsEven - cmp r0, #0 - ldreq r0, _022E79E4 ; =DUNGEON_PTR - ldreq r0, [r0] - addeq r0, r0, #0x700 - streqh r8, [r0, #0xa8] - beq _022E73E4 - mov r0, r8 - bl GetSecondFormIfValid - ldr r1, _022E79E4 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x700 - strh r0, [r1, #0xa8] -_022E73E4: - ldr r1, _022E79E4 ; =DUNGEON_PTR - mov r0, #0x10 - ldr r2, [r1] - ldr r1, [sp, #0xc] - strb r1, [r2, #0x7aa] - bl DungeonRandInt - add r0, r0, #1 - str r0, [sp, #0x14] - sub r0, r4, #1 - mov sl, #0 - str r0, [sp, #0x1c] - b _022E7448 -_022E7414: - mov r5, #0 - b _022E7438 -_022E741C: - mov r0, r4 - bl DungeonRandInt - ldr r2, [r7, r5, lsl #2] - ldr r1, [r7, r0, lsl #2] - str r1, [r7, r5, lsl #2] - str r2, [r7, r0, lsl #2] - add r5, r5, #1 -_022E7438: - ldr r0, [sp, #0x1c] - cmp r5, r0 - blt _022E741C - add sl, sl, #1 -_022E7448: - ldr r0, [sp, #0x14] - cmp sl, r0 - blt _022E7414 - ldr r0, [sp] - cmp r0, #0 - movne r4, #0 - bne _022E746C - cmp r4, #0xe - movge r4, #0xe -_022E746C: - ldr r0, _022E7A10 ; =0x00000229 - bl GetSpriteFileSize - add r5, r0, #0 - ldr r0, _022E7A14 ; =0x0000017F - bl GetSpriteFileSize - ldr r1, [sp, #0x10] - add r5, r5, r0 - cmp r1, #0 - beq _022E749C - bl ov29_02349378 - add r5, r5, r0 - b _022E74B0 -_022E749C: - cmp r8, #0 - beq _022E74B0 - mov r0, r8 - bl GetSpriteFileSize - add r5, r5, r0 -_022E74B0: - mov r8, #0 - b _022E7528 -_022E74B8: - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldr r2, [r7, r8, lsl #2] - ldr r0, [r0] - add r1, r0, r8, lsl #1 - ldr r0, _022E7A08 ; =0x0002C9EA - strh r2, [r1, r0] - ldrsh r1, [r6, #2] - ldr r2, [sb, #0xc] - ldr r0, [r7, r8, lsl #2] - ldr r1, [r2, r1, lsl #2] - add r2, sp, #0x3c - add r3, r1, r0, lsl #3 - mov r1, #4 -_022E74EC: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E74EC - add r0, sp, #0x3c - bl GetMonsterIdFromSpawnEntry - mov sl, r0 - add r0, sp, #0x3c - bl GetMonsterLevelFromSpawnEntry - cmp fp, r0 - movlt fp, r0 - mov r0, sl - bl DungeonGetTotalSpriteFileSize - add r5, r5, r0 - add r8, r8, #1 -_022E7528: - cmp r8, r4 - blt _022E74B8 - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldr r1, _022E7A18 ; =0x0002C9E6 - ldr r0, [r0] - cmp r5, #0x58000 - strh fp, [r0, r1] - bls _022E75C4 - sub sl, r4, #1 - mov r8, #0 - add fp, r1, #4 - b _022E75B8 -_022E7558: - ldrsh r1, [r6, #2] - ldr r2, [sb, #0xc] - ldr r0, [r7, sl, lsl #2] - ldr r1, [r2, r1, lsl #2] - add r2, sp, #0x34 - add r3, r1, r0, lsl #3 - mov r1, #4 -_022E7574: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E7574 - add r0, sp, #0x34 - bl GetMonsterIdFromSpawnEntry - bl DungeonGetTotalSpriteFileSize - sub r5, r5, r0 - ldr r1, _022E79E4 ; =DUNGEON_PTR - ldr r0, _022E7A04 ; =0x0000FFFF - ldr r1, [r1] - cmp r5, #0x58000 - add r1, r1, sl, lsl #1 - strh r0, [r1, fp] - add r8, r8, #1 - blo _022E75C0 - sub sl, sl, #1 -_022E75B8: - cmp sl, #0 - bge _022E7558 -_022E75C0: - sub r4, r4, r8 -_022E75C4: - ldrh r2, [sp, #0x44] - ldr r0, _022E7A04 ; =0x0000FFFF - cmp r2, r0 - beq _022E75EC - ldr r1, _022E79E4 ; =DUNGEON_PTR - ldr r0, _022E7A08 ; =0x0002C9EA - ldr r1, [r1] - add r1, r1, r4, lsl #1 - strh r2, [r1, r0] - add r4, r4, #1 -_022E75EC: - ldrh r2, [sp, #0x46] - ldr r0, _022E7A04 ; =0x0000FFFF - ldr r3, _022E79E4 ; =DUNGEON_PTR - cmp r2, r0 - ldrne r1, _022E79E4 ; =DUNGEON_PTR - ldrne r0, _022E7A08 ; =0x0002C9EA - ldrne r1, [r1] - addne r1, r1, r4, lsl #1 - strneh r2, [r1, r0] - ldr r2, _022E7A08 ; =0x0002C9EA - mov r1, #0 -_022E7618: - mov r0, r1 - b _022E764C -_022E7620: - ldr r4, [r3] - add r5, r4, r0, lsl #1 - add r4, r4, r1, lsl #1 - ldrh r8, [r5, r2] - ldrh r5, [r4, r2] - cmp r5, r8 - strhih r8, [r4, r2] - ldrhi r4, [r3] - addhi r4, r4, r0, lsl #1 - strhih r5, [r4, r2] - add r0, r0, #1 -_022E764C: - cmp r0, #0x10 - blt _022E7620 - add r1, r1, #1 - cmp r1, #0xf - blt _022E7618 - ldr r0, [sp, #0x18] - bl MemFree - mov r0, r7 - bl MemFree - bl DungeonRngSetPrimary -_022E7674: - mov r4, #0 - bl FloorNumberIsEven - cmp r0, #0 - ldr r0, _022E79E4 ; =DUNGEON_PTR - mov r5, #0 - ldr r0, [r0] - movne r4, #1 - ldrb r0, [r0, #0x748] - mov r8, r5 - cmp r0, #0x3d - moveq r4, #1 - bl IsDestinationFloorWithFixedRoom - cmp r0, #0 - beq _022E76D0 - mov r0, #0xb - bl IsCurrentMissionType - cmp r0, #0 - bne _022E76CC - mov r0, #0xa - bl IsCurrentMissionType - cmp r0, #0 - beq _022E76D0 -_022E76CC: - mov r5, #1 -_022E76D0: - mov sl, #0 - b _022E77CC -_022E76D8: - ldr r1, _022E79E4 ; =DUNGEON_PTR - ldr r0, _022E7A08 ; =0x0002C9EA - ldr r2, [r1] - ldr r1, _022E7A04 ; =0x0000FFFF - add r2, r2, sl, lsl #1 - ldrh r3, [r2, r0] - cmp r3, r1 - beq _022E77D4 - ldrsh r0, [r6, #2] - ldr r1, [sb, #0xc] - add r2, sp, #0x2c - ldr r0, [r1, r0, lsl #2] - mov r1, #4 - add r3, r0, r3, lsl #3 -_022E7710: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E7710 - add r0, sp, #0x2c - bl GetMonsterIdFromSpawnEntry - cmp r5, #0 - ldrne r2, _022E7A10 ; =0x00000229 - cmpne r0, r2 - subne r1, r2, #0xaa - cmpne r0, r1 - rsbne r1, r2, #0x600 - cmpne r0, r1 - bne _022E77C8 - ldr r1, _022E79E4 ; =DUNGEON_PTR - add r7, sp, #0x2c - ldr r1, [r1] - mov r2, #4 - add r1, r1, r8, lsl #3 -#ifdef JAPAN - add r1, r1, #0x8c0 - add r3, r1, #0x2c000 -#else - add r1, r1, #0x164 - add r3, r1, #0x2c800 -#endif -_022E7764: - ldrh r1, [r7], #2 - subs r2, r2, #1 - strh r1, [r3], #2 - bne _022E7764 - cmp r4, #0 - ldrne r1, _022E7A10 ; =0x00000229 - cmpne r0, r1 - beq _022E77C4 - cmp r0, #0x258 - bge _022E77C4 - add r7, r0, #0x258 - mov r0, r7, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetMonsterGenderVeneer - cmp r0, #2 - bne _022E77C4 - ldr r1, _022E79E4 ; =DUNGEON_PTR - mov r0, r7, lsl #0x10 - ldr r2, [r1] - mov r1, r0, asr #0x10 -#ifdef JAPAN - add r0, r2, #0x8c0 - add r0, r0, #0x2c000 -#else - add r0, r2, #0x164 - add r0, r0, #0x2c800 -#endif - add r0, r0, r8, lsl #3 - bl SetMonsterId -_022E77C4: - add r8, r8, #1 -_022E77C8: - add sl, sl, #1 -_022E77CC: - cmp sl, #0x10 - blt _022E76D8 -_022E77D4: - bl IsFullFloorFixedRoom - cmp r0, #0 - beq _022E782C - ldr r0, _022E79E4 ; =DUNGEON_PTR - ldr r3, _022E7A18 ; =0x0002C9E6 - ldr r4, [r0] - rsb r1, r8, #0x10 - add r2, r4, #0x4000 -#ifdef JAPAN - add r0, r4, #0x8c0 - add r0, r0, #0x2c000 -#else - add r0, r4, #0x164 - add r0, r0, #0x2c800 -#endif - ldrb r2, [r2, #0xda + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - ldrsh r3, [r4, r3] - add r0, r0, r8, lsl #3 - bl LoadFixedRoom - ldr r2, _022E79E4 ; =DUNGEON_PTR - ldr r1, [r2] - add r1, r1, #0x12000 - str r0, [r1, #0xb20 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - ldr r0, [r2] - add r0, r0, #0x12000 - ldr r0, [r0, #0xb20 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] - add r8, r8, r0 -_022E782C: - ldr r4, _022E79E4 ; =DUNGEON_PTR - ldr r0, _022E7A1C ; =0x0002C9E4 - ldr r1, [r4] - mov r5, #0 - strh r8, [r1, r0] - b _022E7860 -_022E7844: - ldr r0, [r4] - mov r1, r5 -#ifdef JAPAN - add r0, r0, #0x8c0 - add r0, r0, #0x2c000 -#else - add r0, r0, #0x164 - add r0, r0, #0x2c800 -#endif - add r0, r0, r8, lsl #3 - bl SetMonsterId - add r8, r8, #1 -_022E7860: - cmp r8, #0x10 - blt _022E7844 - mov r0, #0xb10 - mov r1, #0 - bl MemAlloc - ldr r2, _022E79E4 ; =DUNGEON_PTR - ldr r1, _022E7A20 ; =0x0002C9E8 - ldr r2, [r2] - mov r4, #0 - strh r4, [r2, r1] -_022E7888: - add r1, r6, r4, lsl #1 - ldrsh r2, [r1, #6] - ldr r5, [sb, #8] - mov r1, #0 - ldr r2, [r5, r2, lsl #2] - ldr r5, _022E7A24 ; =0xFFFF8AD0 - mov r3, r1 - mov sl, r1 - rsb r7, r5, #0 - b _022E7908 -_022E78B0: - mov r8, r1, lsl #1 - ldrh fp, [r2, r8] - cmp fp, r5, lsr #16 - moveq r8, r3, lsl #1 - streqh fp, [r0, r8] - addeq r3, r3, #1 - beq _022E7904 - cmp fp, r7 - blo _022E78F8 - add fp, fp, r5 - b _022E78EC -_022E78DC: - mov r8, r3, lsl #1 - strh sl, [r0, r8] - add r3, r3, #1 - sub fp, fp, #1 -_022E78EC: - cmp fp, #0 - bne _022E78DC - b _022E7904 -_022E78F8: - mov r8, r3, lsl #1 - strh fp, [r0, r8] - add r3, r3, #1 -_022E7904: - add r1, r1, #1 -_022E7908: - cmp r3, #0x17c - blt _022E78B0 - mov r1, #0xb10 - mul r1, r4, r1 - mov r2, #0 - ldr r7, _022E79E4 ; =DUNGEON_PTR - ldr r5, _022E7A28 ; =0x000286D2 - mov r3, r2 -_022E7928: - mov sl, r2, lsl #1 - ldr r8, [r7] - ldrh sl, [r0, sl] - add r8, r1, r8 - add r8, r8, r2, lsl #1 - add r3, r3, #1 - strh sl, [r8, r5] - cmp r3, #0x10 - add r2, r2, #1 - blt _022E7928 - ldr r7, _022E79E4 ; =DUNGEON_PTR - ldr r5, _022E7A2C ; =0x000286F2 - mov r3, #0 -_022E795C: - mov sl, r2, lsl #1 - ldr r8, [r7] - ldrh sl, [r0, sl] - add r8, r1, r8 - add r8, r8, r3, lsl #1 - add r3, r3, #1 - strh sl, [r8, r5] - cmp r3, #0x16c - add r2, r2, #1 - blt _022E795C - add r4, r4, #1 - cmp r4, #6 - blt _022E7888 - mov r8, #0 - ldr r2, _022E7A2C ; =0x000286F2 - ldr r4, _022E79E4 ; =DUNGEON_PTR - ldr r1, _022E7A20 ; =0x0002C9E8 - ldr r3, _022E7A04 ; =0x0000FFFF - mov r6, r8 -_022E79A8: - ldr r5, [r4] - add r7, r5, r8, lsl #1 - ldrh r5, [r7, r2] - cmp r5, r3 - streqh r6, [r7, r2] - ldreq r5, [r4] - streqh r8, [r5, r1] - add r8, r8, #1 - cmp r8, #0x16c - blt _022E79A8 - bl MemFree - add r0, sp, #0x48 - bl UnloadFile - add sp, sp, #0x50 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022E79E4: .word DUNGEON_PTR -_022E79E8: .word ov29_02351584 -_022E79EC: .word ov29_02351594 -_022E79F0: .word ov29_023515B0 -_022E79F4: .word ov29_023515CC -_022E79F8: .word 0x000286B2 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E79FC: .word 0x000286CE + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E7A00: .word 0x0002CB08 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E7A04: .word 0x0000FFFF -_022E7A08: .word 0x0002C9EA + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E7A0C: .word 0x00000906 -_022E7A10: .word 0x00000229 -_022E7A14: .word 0x0000017F -_022E7A18: .word 0x0002C9E6 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E7A1C: .word 0x0002C9E4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E7A20: .word 0x0002C9E8 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E7A24: .word 0xFFFF8AD0 -_022E7A28: .word 0x000286D2 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -_022E7A2C: .word 0x000286F2 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET - arm_func_end LoadMappaFileAttributes diff --git a/asm/overlay_29_022E41F0.s b/asm/overlay_29_022E41F0.s new file mode 100644 index 00000000..69acdc9e --- /dev/null +++ b/asm/overlay_29_022E41F0.s @@ -0,0 +1,322 @@ + .include "asm/macros.inc" + .include "overlay_29_022E41F0.inc" + + .text + + arm_func_start ov29_022E41F0 +ov29_022E41F0: ; 0x022E41F0 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E423C ; =0x000001A7 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E423C ; =0x000001A7 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E423C: .word 0x000001A7 + arm_func_end ov29_022E41F0 + + arm_func_start PlayParalysisEffect +PlayParalysisEffect: ; 0x022E4240 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E428C ; =0x000001A7 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E428C ; =0x000001A7 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E428C: .word 0x000001A7 + arm_func_end PlayParalysisEffect + + arm_func_start ov29_022E4290 +ov29_022E4290: ; 0x022E4290 + bx lr + arm_func_end ov29_022E4290 + + arm_func_start ov29_022E4294 +ov29_022E4294: ; 0x022E4294 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x4c + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x4c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E4294 + + arm_func_start ov29_022E42E0 +ov29_022E42E0: ; 0x022E42E0 + bx lr + arm_func_end ov29_022E42E0 + + arm_func_start ov29_022E42E4 +ov29_022E42E4: ; 0x022E42E4 + bx lr + arm_func_end ov29_022E42E4 + + arm_func_start PlayEffectAnimationEntityStandard +PlayEffectAnimationEntityStandard: ; 0x022E42E8 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0x10 + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r5 + mov r1, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end PlayEffectAnimationEntityStandard + + arm_func_start ov29_022E4338 +ov29_022E4338: ; 0x022E4338 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4384 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4384 ; =0x000001A9 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4384: .word 0x000001A9 + arm_func_end ov29_022E4338 + + arm_func_start ov29_022E4388 +ov29_022E4388: ; 0x022E4388 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E43D4 ; =0x0000013A + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x138 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E43D4: .word 0x0000013A + arm_func_end ov29_022E4388 + + arm_func_start ov29_022E43D8 +ov29_022E43D8: ; 0x022E43D8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4424 ; =0x0000013A + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x138 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4424: .word 0x0000013A + arm_func_end ov29_022E43D8 + + arm_func_start ov29_022E4428 +ov29_022E4428: ; 0x022E4428 + bx lr + arm_func_end ov29_022E4428 + + arm_func_start ov29_022E442C +ov29_022E442C: ; 0x022E442C + bx lr + arm_func_end ov29_022E442C + + arm_func_start ov29_022E4430 +ov29_022E4430: ; 0x022E4430 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E447C ; =0x00000171 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E447C ; =0x00000171 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E447C: .word 0x00000171 + arm_func_end ov29_022E4430 + + arm_func_start ov29_022E4480 +ov29_022E4480: ; 0x022E4480 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #7 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #7 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E4480 + + arm_func_start PlaySpeedUpEffect +PlaySpeedUpEffect: ; 0x022E44CC + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4518 ; =0x0000018B + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4518 ; =0x0000018B + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4518: .word 0x0000018B + arm_func_end PlaySpeedUpEffect + + arm_func_start PlaySpeedDownEffect +PlaySpeedDownEffect: ; 0x022E451C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4568 ; =0x0000018A + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x188 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4568: .word 0x0000018A + arm_func_end PlaySpeedDownEffect + + arm_func_start ov29_022E456C +ov29_022E456C: ; 0x022E456C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #5 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #5 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E456C diff --git a/asm/overlay_29_022E45CC.s b/asm/overlay_29_022E45CC.s new file mode 100644 index 00000000..4ade9eb8 --- /dev/null +++ b/asm/overlay_29_022E45CC.s @@ -0,0 +1,101 @@ + .include "asm/macros.inc" + .include "overlay_29_022E45CC.inc" + + .text + + arm_func_start ov29_022E45CC +ov29_022E45CC: ; 0x022E45CC + bx lr + arm_func_end ov29_022E45CC + + arm_func_start ov29_022E45D0 +ov29_022E45D0: ; 0x022E45D0 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0x10 + mov r5, r0 + mov r0, #0x2f + mov r4, r1 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x2f + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + mov r0, #0x30 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r1, #2 + str r1, [sp] + mov r2, #0 + str r2, [sp, #4] + sub r1, r2, #1 + str r1, [sp, #8] + str r2, [sp, #0xc] + mov r0, r5 + mov r1, #0x30 + mov r2, #1 + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_022E45D0 + + arm_func_start ov29_022E465C +ov29_022E465C: ; 0x022E465C + bx lr + arm_func_end ov29_022E465C + + arm_func_start ov29_022E4660 +ov29_022E4660: ; 0x022E4660 + bx lr + arm_func_end ov29_022E4660 + + arm_func_start ov29_022E4664 +ov29_022E4664: ; 0x022E4664 + bx lr + arm_func_end ov29_022E4664 + + arm_func_start ov29_022E4668 +ov29_022E4668: ; 0x022E4668 + bx lr + arm_func_end ov29_022E4668 + + arm_func_start ov29_022E466C +ov29_022E466C: ; 0x022E466C + bx lr + arm_func_end ov29_022E466C + + arm_func_start ov29_022E4670 +ov29_022E4670: ; 0x022E4670 + bx lr + arm_func_end ov29_022E4670 + + arm_func_start ov29_022E4674 +ov29_022E4674: ; 0x022E4674 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x21 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x21 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E4674 diff --git a/asm/overlay_29_022E46D0.s b/asm/overlay_29_022E46D0.s new file mode 100644 index 00000000..d6a97f5c --- /dev/null +++ b/asm/overlay_29_022E46D0.s @@ -0,0 +1,29 @@ + .include "asm/macros.inc" + .include "overlay_29_022E46D0.inc" + + .text + + arm_func_start ov29_022E46D0 +ov29_022E46D0: ; 0x022E46D0 + bx lr + arm_func_end ov29_022E46D0 + + arm_func_start DisplayStockpileNumbers +DisplayStockpileNumbers: ; 0x022E46D4 + stmdb sp!, {r4, lr} + mov r4, r0 + bl ShouldDisplayEntityAdvanced + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0xb4] + mov r1, r4 +#ifdef JAPAN + ldrb r0, [r0, #0x11a] +#else + ldrb r0, [r0, #0x11e] +#endif + mov r2, #1 + mov r3, #0xb + bl DisplayAnimatedNumbers + ldmia sp!, {r4, pc} + arm_func_end DisplayStockpileNumbers diff --git a/asm/overlay_29_022E4714.s b/asm/overlay_29_022E4714.s new file mode 100644 index 00000000..061766ec --- /dev/null +++ b/asm/overlay_29_022E4714.s @@ -0,0 +1,384 @@ + .include "asm/macros.inc" + .include "overlay_29_022E4714.inc" + + .text + + arm_func_start ov29_022E4714 +ov29_022E4714: ; 0x022E4714 + bx lr + arm_func_end ov29_022E4714 + + arm_func_start ov29_022E4718 +ov29_022E4718: ; 0x022E4718 + bx lr + arm_func_end ov29_022E4718 + + arm_func_start ov29_022E471C +ov29_022E471C: ; 0x022E471C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4768 ; =0x00000131 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4768 ; =0x00000131 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4768: .word 0x00000131 + arm_func_end ov29_022E471C + + arm_func_start ov29_022E476C +ov29_022E476C: ; 0x022E476C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x30 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x30 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E476C + + arm_func_start ov29_022E47B8 +ov29_022E47B8: ; 0x022E47B8 + bx lr + arm_func_end ov29_022E47B8 + + arm_func_start ov29_022E47BC +ov29_022E47BC: ; 0x022E47BC + bx lr + arm_func_end ov29_022E47BC + + arm_func_start ov29_022E47C0 +ov29_022E47C0: ; 0x022E47C0 + bx lr + arm_func_end ov29_022E47C0 + + arm_func_start ov29_022E47C4 +ov29_022E47C4: ; 0x022E47C4 + bx lr + arm_func_end ov29_022E47C4 + + arm_func_start ov29_022E47C8 +ov29_022E47C8: ; 0x022E47C8 + bx lr + arm_func_end ov29_022E47C8 + + arm_func_start ov29_022E47CC +ov29_022E47CC: ; 0x022E47CC + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0x10 + mov r5, r1 + mov r1, #0xe + mov r4, r0 + bl MonsterIsType + cmp r0, #0 + beq _022E4828 + mov r0, r5 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, r5 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E4860 +_022E4828: + mov r0, #0xe + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0xe + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E4860: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_022E47CC + + arm_func_start ov29_022E4868 +ov29_022E4868: ; 0x022E4868 + bx lr + arm_func_end ov29_022E4868 + + arm_func_start ov29_022E486C +ov29_022E486C: ; 0x022E486C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x41 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x41 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E486C + + arm_func_start ov29_022E48B8 +ov29_022E48B8: ; 0x022E48B8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4910 ; =0x0000011E + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x11c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + mov r0, r4 + mov r1, #0x20c + bl PlaySeByIdIfShouldDisplayEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4910: .word 0x0000011E + arm_func_end ov29_022E48B8 + + arm_func_start ov29_022E4914 +ov29_022E4914: ; 0x022E4914 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4960 ; =0x000001AE + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x1ac + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4960: .word 0x000001AE + arm_func_end ov29_022E4914 + + arm_func_start ShowPpRestoreEffect +ShowPpRestoreEffect: ; 0x022E4964 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E49B0 ; =0x000001B1 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E49B0 ; =0x000001B1 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E49B0: .word 0x000001B1 + arm_func_end ShowPpRestoreEffect + + arm_func_start ov29_022E49B4 +ov29_022E49B4: ; 0x022E49B4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4A00 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4A00 ; =0x000001A9 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4A00: .word 0x000001A9 + arm_func_end ov29_022E49B4 + + arm_func_start ov29_022E4A04 +ov29_022E4A04: ; 0x022E4A04 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4A50 ; =0x00000192 + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x190 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4A50: .word 0x00000192 + arm_func_end ov29_022E4A04 + + arm_func_start ov29_022E4A54 +ov29_022E4A54: ; 0x022E4A54 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4AA0 ; =0x0000018E + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x18c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4AA0: .word 0x0000018E + arm_func_end ov29_022E4A54 + + arm_func_start ov29_022E4AA4 +ov29_022E4AA4: ; 0x022E4AA4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x190 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x190 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E4AA4 + + arm_func_start ov29_022E4AF0 +ov29_022E4AF0: ; 0x022E4AF0 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x15 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x15 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E4AF0 + + arm_func_start ov29_022E4B3C +ov29_022E4B3C: ; 0x022E4B3C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4B88 ; =0x00000171 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4B88 ; =0x00000171 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4B88: .word 0x00000171 + arm_func_end ov29_022E4B3C diff --git a/asm/overlay_29_022E4BB4.s b/asm/overlay_29_022E4BB4.s new file mode 100644 index 00000000..c9e55853 --- /dev/null +++ b/asm/overlay_29_022E4BB4.s @@ -0,0 +1,825 @@ + .include "asm/macros.inc" + .include "overlay_29_022E4BB4.inc" + + .text + + arm_func_start ov29_022E4BB4 +ov29_022E4BB4: ; 0x022E4BB4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x15 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x15 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E4BB4 + + arm_func_start ov29_022E4C00 +ov29_022E4C00: ; 0x022E4C00 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0xf + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0xf + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E4C00 + + arm_func_start ov29_022E4C4C +ov29_022E4C4C: ; 0x022E4C4C + stmdb sp!, {r3, lr} + sub sp, sp, #0x10 + mov r1, #2 + mov ip, #0 + stmia sp, {r1, ip} + sub r1, ip, #1 + str r1, [sp, #8] + mov r1, #0x15 + mov r2, #1 + mov r3, #3 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E4C4C + + arm_func_start ov29_022E4C84 +ov29_022E4C84: ; 0x022E4C84 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4CD0 ; =0x000001F7 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4CD0 ; =0x000001F7 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4CD0: .word 0x000001F7 + arm_func_end ov29_022E4C84 + + arm_func_start ov29_022E4CD4 +ov29_022E4CD4: ; 0x022E4CD4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E4D20 ; =0x000001F9 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4D20 ; =0x000001F9 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E4D20: .word 0x000001F9 + arm_func_end ov29_022E4CD4 + + arm_func_start ov29_022E4D24 +ov29_022E4D24: ; 0x022E4D24 + bx lr + arm_func_end ov29_022E4D24 + + arm_func_start PlayOffensiveStatDownEffect +PlayOffensiveStatDownEffect: ; 0x022E4D28 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E4D80 + mov r0, #0x194 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x194 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E4DB8 +_022E4D80: + ldr r0, _022E4DC8 ; =0x00000193 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4DC8 ; =0x00000193 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E4DB8: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E4DC8: .word 0x00000193 + arm_func_end PlayOffensiveStatDownEffect + + arm_func_start PlayDefensiveStatDownEffect +PlayDefensiveStatDownEffect: ; 0x022E4DCC + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E4E24 + ldr r0, _022E4E6C ; =0x0000018F + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4E6C ; =0x0000018F + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E4E5C +_022E4E24: + ldr r0, _022E4E70 ; =0x00000191 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4E70 ; =0x00000191 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E4E5C: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E4E6C: .word 0x0000018F +_022E4E70: .word 0x00000191 + arm_func_end PlayDefensiveStatDownEffect + + arm_func_start PlayOffensiveStatUpEffect +PlayOffensiveStatUpEffect: ; 0x022E4E74 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E4ECC + ldr r0, _022E4F14 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E4F14 ; =0x000001A9 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E4F04 +_022E4ECC: + ldr r0, _022E4F18 ; =0x00000192 + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x190 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E4F04: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E4F14: .word 0x000001A9 +_022E4F18: .word 0x00000192 + arm_func_end PlayOffensiveStatUpEffect + + arm_func_start PlayDefensiveStatUpEffect +PlayDefensiveStatUpEffect: ; 0x022E4F1C + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E4F74 + ldr r0, _022E4FBC ; =0x0000018E + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x18c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E4FAC +_022E4F74: + mov r0, #0x190 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x190 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E4FAC: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E4FBC: .word 0x0000018E + arm_func_end PlayDefensiveStatUpEffect + + arm_func_start PlayOffensiveStatMultiplierUpEffect +PlayOffensiveStatMultiplierUpEffect: ; 0x022E4FC0 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E5018 + ldr r0, _022E5060 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E5060 ; =0x000001A9 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E5050 +_022E5018: + ldr r0, _022E5064 ; =0x00000192 + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x190 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E5050: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E5060: .word 0x000001A9 +_022E5064: .word 0x00000192 + arm_func_end PlayOffensiveStatMultiplierUpEffect + + arm_func_start PlayOffensiveStatMultiplierDownEffect +PlayOffensiveStatMultiplierDownEffect: ; 0x022E5068 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E50C0 + mov r0, #0x194 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x194 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E50F8 +_022E50C0: + ldr r0, _022E5108 ; =0x00000193 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E5108 ; =0x00000193 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E50F8: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E5108: .word 0x00000193 + arm_func_end PlayOffensiveStatMultiplierDownEffect + + arm_func_start PlayDefensiveStatMultiplierUpEffect +PlayDefensiveStatMultiplierUpEffect: ; 0x022E510C + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E5164 + ldr r0, _022E51AC ; =0x0000018E + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x18c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E519C +_022E5164: + mov r0, #0x190 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x190 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E519C: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E51AC: .word 0x0000018E + arm_func_end PlayDefensiveStatMultiplierUpEffect + + arm_func_start PlayDefensiveStatMultiplierDownEffect +PlayDefensiveStatMultiplierDownEffect: ; 0x022E51B0 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E5208 + ldr r0, _022E5250 ; =0x0000018F + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E5250 ; =0x0000018F + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E5240 +_022E5208: + ldr r0, _022E5254 ; =0x00000191 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E5254 ; =0x00000191 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E5240: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E5250: .word 0x0000018F +_022E5254: .word 0x00000191 + arm_func_end PlayDefensiveStatMultiplierDownEffect + + arm_func_start PlayHitChanceUpEffect +PlayHitChanceUpEffect: ; 0x022E5258 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E52B0 + mov r0, #0x18c + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x18c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E52E8 +_022E52B0: + mov r0, #0xd + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0xd + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E52E8: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + arm_func_end PlayHitChanceUpEffect + + arm_func_start PlayHitChanceDownEffect +PlayHitChanceDownEffect: ; 0x022E52F8 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r1, [sp, #0x1c] + mov r4, r0 + cmp r1, #0 + bne _022E5350 + ldr r0, _022E5398 ; =0x0000018D + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E5398 ; =0x0000018D + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E5388 +_022E5350: + mov r0, #0xe + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0xe + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E5388: + add sp, sp, #0x10 + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_022E5398: .word 0x0000018D + arm_func_end PlayHitChanceDownEffect + + arm_func_start PlayExclamationPointEffect__022E5D4C +PlayExclamationPointEffect__022E5D4C: ; 0x022E539C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E53E8 ; =0x00000143 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E53E8 ; =0x00000143 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E53E8: .word 0x00000143 + arm_func_end PlayExclamationPointEffect__022E5D4C + + arm_func_start ov29_022E53EC +ov29_022E53EC: ; 0x022E53EC + bx lr + arm_func_end ov29_022E53EC + + arm_func_start ov29_022E53F0 +ov29_022E53F0: ; 0x022E53F0 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x19 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x19 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E53F0 + + arm_func_start ov29_022E543C +ov29_022E543C: ; 0x022E543C + stmdb sp!, {r3, lr} + sub sp, sp, #0x10 + mov r1, #2 + mov ip, #0 + stmia sp, {r1, ip} + sub r1, ip, #1 + str r1, [sp, #8] + mov r1, #0x15 + mov r2, #1 + mov r3, #3 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E543C + + arm_func_start ov29_022E5474 +ov29_022E5474: ; 0x022E5474 + bx lr + arm_func_end ov29_022E5474 + + arm_func_start ov29_022E5478 +ov29_022E5478: ; 0x022E5478 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r2, _022E5508 ; =DUNGEON_PTR + mov r4, r0 + ldr r2, [r2] + ldr r0, [r1, #8] + ldrb r1, [r2, #0x1c5] + cmp r1, #0 + beq _022E54A0 + bl ov29_0230D618 +_022E54A0: + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _022E54BC +_022E54AC: ; jump table + b _022E54BC ; case 0 + b _022E54C4 ; case 1 + b _022E54CC ; case 2 + b _022E54D4 ; case 3 +_022E54BC: + mov r1, #8 + b _022E54D8 +_022E54C4: + mov r1, #9 + b _022E54D8 +_022E54CC: + mov r1, #0xa + b _022E54D8 +_022E54D4: + mov r1, #0xb +_022E54D8: + mov ip, #0 + mov r2, #1 + str ip, [sp] + str r2, [sp, #4] + sub r0, r2, #2 + str r0, [sp, #8] + mov r0, r4 + mov r3, #3 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E5508: .word DUNGEON_PTR + arm_func_end ov29_022E5478 + + arm_func_start ov29_022E550C +ov29_022E550C: ; 0x022E550C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E5558 ; =0x0000013E + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x13c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E5558: .word 0x0000013E + arm_func_end ov29_022E550C + + arm_func_start ov29_022E555C +ov29_022E555C: ; 0x022E555C + bx lr + arm_func_end ov29_022E555C + + arm_func_start ov29_022E5560 +ov29_022E5560: ; 0x022E5560 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r1 + cmp r2, #1 + bne _022E55B0 + mov r0, #0xf8 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0xf8 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E55E8 +_022E55B0: + mov r0, #0xf9 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0xf9 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E55E8: + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E5560 + + arm_func_start ov29_022E55F0 +ov29_022E55F0: ; 0x022E55F0 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r0, #0x2a + mov r4, r1 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x2a + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E55F0 diff --git a/asm/overlay_29_022E5650.s b/asm/overlay_29_022E5650.s new file mode 100644 index 00000000..e04ea6a8 --- /dev/null +++ b/asm/overlay_29_022E5650.s @@ -0,0 +1,1311 @@ + .include "asm/macros.inc" + .include "overlay_29_022E5650.inc" + + .text + + arm_func_start ov29_022E5650 +ov29_022E5650: ; 0x022E5650 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r0, _022E569C ; =0x00000167 + mov r4, r1 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E569C ; =0x00000167 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E569C: .word 0x00000167 + arm_func_end ov29_022E5650 + + arm_func_start PlaySeByIdIfShouldDisplayEntity +PlaySeByIdIfShouldDisplayEntity: ; 0x022E56A0 + stmdb sp!, {r4, lr} + mov r4, r1 + cmp r0, #0 + bne _022E56BC + mov r0, r4 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r4, pc} +_022E56BC: + bl ShouldDisplayEntityAdvanced + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r4, pc} + arm_func_end PlaySeByIdIfShouldDisplayEntity + + arm_func_start ov29_022E56D4 +ov29_022E56D4: ; 0x022E56D4 + stmdb sp!, {r4, lr} + mov r4, r1 + bl ov29_022E2CA0 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r4, pc} + arm_func_end ov29_022E56D4 + + arm_func_start ov29_022E56F4 +ov29_022E56F4: ; 0x022E56F4 + stmdb sp!, {r4, lr} + mov r4, r1 + cmp r0, #0 + bne _022E5710 + mov r0, r4 + bl PlayMeByIdIfNot998 + ldmia sp!, {r4, pc} +_022E5710: + bl ShouldDisplayEntityAdvanced + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r4, pc} + arm_func_end ov29_022E56F4 + + arm_func_start ov29_022E5728 +ov29_022E5728: ; 0x022E5728 + stmdb sp!, {r3, lr} + cmp r1, #0 + bne _022E5740 + ldr r0, _022E5760 ; =0x0000130E + bl PlaySeByIdIfNotSilence + ldmia sp!, {r3, pc} +_022E5740: + cmp r1, #1 + bne _022E5754 + ldr r0, _022E5764 ; =0x0000130D + bl PlaySeByIdIfNotSilence + ldmia sp!, {r3, pc} +_022E5754: + ldr r0, _022E5768 ; =0x0000130C + bl PlaySeByIdIfNotSilence + ldmia sp!, {r3, pc} + .align 2, 0 +_022E5760: .word 0x0000130E +_022E5764: .word 0x0000130D +_022E5768: .word 0x0000130C + arm_func_end ov29_022E5728 + + arm_func_start PlayMissSfx__022E611C +PlayMissSfx__022E611C: ; 0x022E576C + stmdb sp!, {r3, lr} + ldr r0, [r1, #0xb4] + ldrb r0, [r0, #6] + cmp r0, #0 + beq _022E578C + ldr r0, _022E5798 ; =0x00001306 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r3, pc} +_022E578C: + ldr r0, _022E579C ; =0x00001307 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r3, pc} + .align 2, 0 +_022E5798: .word 0x00001306 +_022E579C: .word 0x00001307 + arm_func_end PlayMissSfx__022E611C + + arm_func_start PlayMissSfx__022E6150 +PlayMissSfx__022E6150: ; 0x022E57A0 + stmdb sp!, {r3, lr} + ldr r0, [r0, #0xb4] + ldrb r0, [r0, #6] + cmp r0, #0 + beq _022E57C0 + ldr r0, _022E57CC ; =0x00001306 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r3, pc} +_022E57C0: + ldr r0, _022E57D0 ; =0x00001307 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r3, pc} + .align 2, 0 +_022E57CC: .word 0x00001306 +_022E57D0: .word 0x00001307 + arm_func_end PlayMissSfx__022E6150 + + arm_func_start ov29_022E57D4 +ov29_022E57D4: ; 0x022E57D4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E585C ; =0x0000025A + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x258 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + ldr r0, _022E5860 ; =0x0000025B + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r1, #2 + str r1, [sp] + mov r2, #0 + str r2, [sp, #4] + sub r1, r2, #1 + str r1, [sp, #8] + str r2, [sp, #0xc] + ldr r1, _022E5860 ; =0x0000025B + mov r0, r4 + mov r2, #1 + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E585C: .word 0x0000025A +_022E5860: .word 0x0000025B + arm_func_end ov29_022E57D4 + + arm_func_start ov29_022E5864 +ov29_022E5864: ; 0x022E5864 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x16 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x16 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E5864 + + arm_func_start ov29_022E58B0 +ov29_022E58B0: ; 0x022E58B0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, r2 + mov sl, r0 + mov r5, r1 + cmp r4, #0x11 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, r5 + bl ov29_022E2CA0 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrsh r0, [r5] + mov r2, #0x18 + add r1, sp, #0 + smulbb r0, r0, r2 + add r0, r0, #0xc + mov r0, r0, lsl #8 + mov r0, r0, asr #8 + strh r0, [sp] + ldrsh r3, [r5, #2] + mov r0, r4 + smulbb r2, r3, r2 + add r2, r2, #0x10 + mov r2, r2, lsl #8 + mov r2, r2, asr #8 + strh r2, [sp, #2] + bl ov10_022BEC08 + cmp r4, #4 + mov r6, r0 + cmpne r4, #0x18 + bne _022E5944 + mov r0, #0 + mov r1, #0x308 + bl PlaySeByIdIfShouldDisplayEntity + mov r0, #0x28 + mov r1, #0x33 + bl ov29_022EA370 + b _022E59C4 +_022E5944: + cmp r4, #8 + bne _022E59B8 + ldr sb, [sl, #0xb4] + mov r7, #0 + mov r0, r6, lsl #0x10 + ldrb r8, [sb, #0x4c] + mov r4, r0, asr #0x10 + mov r5, r7 + mov fp, #2 + b _022E59A4 +_022E596C: + sub r0, r8, #1 + and r8, r0, #7 + mov r0, sl + mov r1, r5 + mov r2, r8 + bl ChangeMonsterAnimation + mov r0, fp + mov r1, #0x33 + bl ov29_022EA370 + mov r0, r4 + bl AnimationHasMoreFrames + cmp r0, #0 + beq _022E59AC + add r7, r7, #2 +_022E59A4: + cmp r7, #0x3e8 + blt _022E596C +_022E59AC: + and r0, r8, #7 + strb r0, [sb, #0x4c] + b _022E59C4 +_022E59B8: + mov r0, #0x28 + mov r1, #0x33 + bl ov29_022EA370 +_022E59C4: + mov r0, r6, lsl #0x10 + mov r7, #0 + mov r4, r0, asr #0x10 + mov r5, #0x42 + b _022E59F4 +_022E59D8: + mov r0, r5 + bl AdvanceFrame + mov r0, r4 + bl AnimationHasMoreFrames + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r7, r7, #1 +_022E59F4: + cmp r7, #0x3e8 + blt _022E59D8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov29_022E58B0 + + arm_func_start ov29_022E5A00 +ov29_022E5A00: ; 0x022E5A00 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x18 + mov r5, r0 + mov r4, r1 + bl ShouldDisplayEntityAdvanced + cmp r0, #0 + beq _022E5AD4 + ldrb r0, [r4] + ldr r1, [r5, #0xc] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + movne r4, #0 + ldreqsh r4, [r4, #4] + mov r1, r1, asr #8 + ldr r0, _022E5ADC ; =DUNGEON_PTR + strh r1, [sp, #4] + ldr r2, [r5, #0x10] + ldr r1, [r0] + mov r0, r2, asr #8 + strh r0, [sp, #6] + ldr r0, _022E5AE0 ; =0x0001A226 + ldrsh r3, [sp, #6] + ldrsh r1, [r1, r0] + add r0, sp, #8 + add r2, r5, #0x2c + sub r1, r3, r1 + add r1, r1, r1, lsr #31 + mov r3, r1, asr #1 + mov r1, #4 + add r5, r3, #1 + bl sub_0201D034 + add r1, sp, #4 + add r2, sp, #8 + mov r0, r4 + mov r3, #0 + str r5, [sp] + bl ov10_022BEC94 + mov r0, r0, lsl #0x10 + mov r6, #0 + mov r4, r0, asr #0x10 + mov r5, #0x42 + b _022E5ACC +_022E5AB0: + mov r0, r5 + bl AdvanceFrame + mov r0, r4 + bl AnimationHasMoreFrames + cmp r0, #0 + beq _022E5AD4 + add r6, r6, #1 +_022E5ACC: + cmp r6, #0x3e8 + blt _022E5AB0 +_022E5AD4: + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022E5ADC: .word DUNGEON_PTR +#ifdef JAPAN +_022E5AE0: .word 0x0001A182 +#else +_022E5AE0: .word 0x0001A226 +#endif + arm_func_end ov29_022E5A00 + + arm_func_start ov29_022E5AE4 +ov29_022E5AE4: ; 0x022E5AE4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x18 + mov r5, r0 + mov r4, r1 + bl ShouldDisplayEntityAdvanced + cmp r0, #0 + beq _022E5BC8 + ldrb r0, [r4] + ldr r1, [r5, #0xc] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + movne r4, #0 + ldreqsh r4, [r4, #4] + mov r1, r1, asr #8 + ldr r0, _022E5BD0 ; =DUNGEON_PTR + strh r1, [sp, #4] + ldr r2, [r5, #0x10] + ldr r1, [r0] + mov r0, r2, asr #8 + strh r0, [sp, #6] + ldr r0, _022E5BD4 ; =0x0001A226 + ldrsh r3, [sp, #6] + ldrsh r1, [r1, r0] + add r0, sp, #8 + add r2, r5, #0x2c + sub r1, r3, r1 + add r1, r1, r1, lsr #31 + mov r1, r1, asr #1 + add r1, r1, #1 + mov r3, r1, lsl #0x10 + mov r1, #4 + mov r5, r3, asr #0x10 + bl sub_0201D034 + add r1, sp, #4 + add r2, sp, #8 + mov r0, r4 + mov r3, #1 + str r5, [sp] + bl ov10_022BEC94 + mov r0, r0, lsl #0x10 + mov r6, #0 + mov r4, r0, asr #0x10 + mov r5, #0x42 + b _022E5BC0 +_022E5B9C: + mov r0, r5 + bl AdvanceFrame + mov r0, r4 + bl AnimationHasMoreFrames + cmp r0, #0 + beq _022E5BC8 + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_022E5BC0: + cmp r6, #0x3e8 + blt _022E5B9C +_022E5BC8: + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022E5BD0: .word DUNGEON_PTR +#ifdef JAPAN +_022E5BD4: .word 0x0001A182 +#else +_022E5BD4: .word 0x0001A226 +#endif + arm_func_end ov29_022E5AE4 + + arm_func_start ov29_022E5BD8 +ov29_022E5BD8: ; 0x022E5BD8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x40 + mov r5, r0 + bl ShouldDisplayEntityWrapper + cmp r0, #0 + beq _022E5D4C + ldr r1, [r5, #0xb4] + ldr r0, [r5, #0xc] + ldrb r4, [r1, #0x4c] + mov r1, r0, asr #8 + ldr r0, _022E5D58 ; =DUNGEON_PTR + strh r1, [sp, #0x10] + ldr r2, [r5, #0x10] + ldr r1, [r0] + mov r0, r2, asr #8 + strh r0, [sp, #0x12] + ldr r0, _022E5D5C ; =0x0001A226 + ldrsh r2, [sp, #0x12] + ldrsh r1, [r1, r0] + add r0, sp, #0x14 + sub r1, r2, r1 + add r1, r1, r1, lsr #31 + mov sl, r1, asr #1 + bl ov10_022BF274 + mov r5, #0 + ldrsh r3, [sp, #0x10] + ldrsh r2, [sp, #0x12] + ldr r6, _022E5D60 ; =0x00000165 + sub r1, r5, #1 + add r0, sp, #0x30 + str r6, [sp, #0x14] + str r5, [sp, #0x18] + str r4, [sp, #0x1c] + strh r3, [sp, #0x20] + strh r2, [sp, #0x22] + strh r5, [sp, #0x24] + strh r5, [sp, #0x26] + strb r1, [sp, #0x28] + str sl, [sp, #0x2c] + bl InitOamAdjustmentInfo + add r0, sp, #0x14 + mov r1, r5 + bl ov10_022BF2B4 + ldr r2, _022E5D64 ; =DIRECTIONS_XY + mov sb, r5 + add r1, r2, r4, lsl #2 + mov r3, r4, lsl #2 + ldrh r2, [r2, r3] + ldrh r1, [r1, #2] + mov r0, r0, lsl #0x10 + strh r2, [sp, #0xc] + strh r1, [sp, #0xe] + ldrsh r8, [sp, #0xc] + ldrsh r7, [sp, #0xe] + ldr r4, _022E5D58 ; =DUNGEON_PTR + ldr fp, _022E5D5C ; =0x0001A226 + mov r5, r0, asr #0x10 + mov r6, sb +_022E5CC0: + mov r0, r5 + add r1, sp, #0x10 + mov r2, r6 + mov r3, sl + str r6, [sp] + bl ov10_022BF45C + mov r0, #0x42 + bl AdvanceFrame + ldrsh r0, [sp, #0x12] + ldrsh r1, [sp, #0x10] + add sb, sb, #1 + add r0, r0, r7, lsl #2 + add r1, r1, r8, lsl #2 + strh r0, [sp, #0x12] + strh r1, [sp, #0x10] + ldr r0, [r4] + ldrsh r1, [sp, #0x12] + ldrsh r0, [r0, fp] + cmp sb, #6 + sub r0, r1, r0 + add r0, r0, r0, lsr #31 + mov sl, r0, asr #1 + blt _022E5CC0 + bl ov10_022BDC68 + ldrsh r2, [sp, #0x10] + ldrsh r1, [sp, #0x12] + add r0, sp, #4 + mov r4, r2, lsl #8 + mov r3, r1, lsl #8 + mov r1, #0x1a0 + mov r2, #1 + str r4, [sp, #4] + str r3, [sp, #8] + bl PlayEffectAnimationPixelPos + b _022E5D50 +_022E5D4C: + mvn r0, #0 +_022E5D50: + add sp, sp, #0x40 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022E5D58: .word DUNGEON_PTR +#ifdef JAPAN +_022E5D5C: .word 0x0001A182 +#else +_022E5D5C: .word 0x0001A226 +#endif +_022E5D60: .word 0x00000165 +_022E5D64: .word DIRECTIONS_XY + arm_func_end ov29_022E5BD8 + + arm_func_start PlayStairsSfx +PlayStairsSfx: ; 0x022E5D68 + stmdb sp!, {r4, lr} + mov r4, #0x3f00 + bl GetFloorType + cmp r0, #0 + beq _022E5D88 + cmp r0, #1 + cmpne r0, #2 + beq _022E5DA4 +_022E5D88: + ldr r0, _022E5DB0 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x748] + bl DungeonGoesUp + cmp r0, #0 + ldrne r4, _022E5DB4 ; =0x0000130A + ldreq r4, _022E5DB8 ; =0x00001309 +_022E5DA4: + mov r0, r4 + bl PlaySeByIdIfNotSilence + ldmia sp!, {r4, pc} + .align 2, 0 +_022E5DB0: .word DUNGEON_PTR +_022E5DB4: .word 0x0000130A +_022E5DB8: .word 0x00001309 + arm_func_end PlayStairsSfx + + arm_func_start ov29_022E5DBC +ov29_022E5DBC: ; 0x022E5DBC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + cmp r4, #3 + bne _022E5DD8 + mov r0, #0 + bl ChangeDungeonMusic +_022E5DD8: + cmp r5, #4 + beq _022E5E10 + cmp r4, #3 + bne _022E5DFC + ldr r0, _022E5E7C ; =ov29_0235119C + mov r1, r4, lsl #1 + ldrh r0, [r0, r1] + bl PlaySeByIdIfNotSilence + b _022E5E3C +_022E5DFC: + ldr r0, _022E5E7C ; =ov29_0235119C + mov r1, r4, lsl #1 + ldrh r0, [r0, r1] + bl PlayMeByIdIfNot998 + b _022E5E3C +_022E5E10: + cmp r4, #3 + bne _022E5E2C + ldr r0, _022E5E80 ; =ov29_02351194 + mov r1, r4, lsl #1 + ldrh r0, [r0, r1] + bl PlaySeByIdIfNotSilence + b _022E5E3C +_022E5E2C: + ldr r0, _022E5E7C ; =ov29_0235119C + mov r1, r4, lsl #1 + ldrh r0, [r0, r1] + bl PlayMeByIdIfNot998 +_022E5E3C: + mov r0, r5 + mov r1, r4 + mov r2, #0x80 + bl ov29_022E6A00 + mov r4, #0x46 + b _022E5E5C +_022E5E54: + mov r0, r4 + bl AdvanceFrame +_022E5E5C: + bl ov29_022E6C08 + cmp r0, #0 + bne _022E5E54 + bl ov29_022E6CE0 + bl ov29_02339148 + mov r0, #1 + bl ov29_0234B1A4 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_022E5E7C: .word ov29_0235119C +_022E5E80: .word ov29_02351194 + arm_func_end ov29_022E5DBC + + arm_func_start ov29_022E5E84 +ov29_022E5E84: ; 0x022E5E84 + stmdb sp!, {r4, r5, r6, lr} + mov r1, #8 + mov r2, r1 + mov r6, r0 + bl ChangeMonsterAnimation + mov r5, #0 + mov r4, #0x51 + b _022E5EC4 +_022E5EA4: + mov r0, r4 + bl AdvanceFrame + ldr r0, [r6, #0x58] + tst r0, #3 + ldreqb r0, [r6, #0xaf] + cmpeq r0, #8 + ldmneia sp!, {r4, r5, r6, pc} + add r5, r5, #1 +_022E5EC4: + cmp r5, #0x64 + blt _022E5EA4 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end ov29_022E5E84 + + arm_func_start ShouldDisplayEntityAdvanced +ShouldDisplayEntityAdvanced: ; 0x022E5ED0 + stmdb sp!, {r3, lr} + ldrb r1, [r0, #0x20] + cmp r1, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + ldr r1, _022E5F1C ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x1a000 +#ifdef JAPAN + ldrb r2, [r1, #0x19a] + cmp r2, #0 + beq _022E5F14 + ldr r1, [r1, #0x188] +#else + ldrb r2, [r1, #0x23e] + cmp r2, #0 + beq _022E5F14 + ldr r1, [r1, #0x22c] +#endif + cmp r1, r0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} +_022E5F14: + bl ShouldDisplayEntityWrapper + ldmia sp!, {r3, pc} + .align 2, 0 +_022E5F1C: .word DUNGEON_PTR + arm_func_end ShouldDisplayEntityAdvanced + + arm_func_start ov29_022E5F20 +ov29_022E5F20: ; 0x022E5F20 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + ldr r0, _022E5FDC ; =0x00000199 + mov r8, #0 + ldr fp, _022E5FE0 ; =DUNGEON_PTR + rsb r4, r0, #0x198 + mov r7, r8 + mov r6, #2 + mov r5, r8 +_022E5F44: + ldr r0, [fp] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xad4] +#else + ldr sb, [r0, #0xb78] +#endif + mov r0, sb + bl EntityIsValid__022E37B8 + cmp r0, #0 + ldrne sl, [sb, #0xb4] + ldrneb r0, [sl, #0xfc] + cmpne r0, #0 + beq _022E5FC8 + ldr r0, _022E5FDC ; =0x00000199 + strb r7, [sl, #0xfc] + bl GetEffectAnimationField0x19 + str r6, [sp] + str r5, [sp, #4] + str r4, [sp, #8] + and r3, r0, #0xff + ldr r1, _022E5FDC ; =0x00000199 + str r5, [sp, #0xc] + mov r0, sb + mov r2, r5 + bl PlayEffectAnimationEntity + ldrb r0, [sl, #6] + cmp r0, #0 + bne _022E5FC8 + mov r0, #0 + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _022E5FE4 ; =0x00000B92 + mov r0, sb + bl LogMessageByIdWithPopup +_022E5FC8: + add r8, r8, #1 + cmp r8, #0x14 + blt _022E5F44 + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022E5FDC: .word 0x00000199 +_022E5FE0: .word DUNGEON_PTR +#ifdef JAPAN +_022E5FE4: .word 0x000008A4 +#else +_022E5FE4: .word 0x00000B92 +#endif + arm_func_end ov29_022E5F20 + + arm_func_start ov29_022E5FE8 +ov29_022E5FE8: ; 0x022E5FE8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x10 + ldr r2, _022E60D4 ; =DUNGEON_PTR + mov r6, r0 + ldr r0, [r2] + mov r5, r1 + add r0, r0, #0x1a000 +#ifdef JAPAN + ldr r4, [r0, #0x188] +#else + ldr r4, [r0, #0x22c] +#endif + cmp r4, #0 + bne _022E6018 + bl GetLeader + mov r4, r0 +_022E6018: + ldr r0, _022E60D8 ; =ov29_023511DC + mov r1, r6, lsl #1 + ldrh r1, [r0, r1] + cmp r1, #0x3f00 + beq _022E6034 + mov r0, r4 + bl PlaySeByIdIfShouldDisplayEntity +_022E6034: + ldr r0, _022E60DC ; =ov29_0235122C + ldr r7, [r0, r6, lsl #2] + cmp r7, #0 + blt _022E60CC + cmp r5, #0 + beq _022E6090 + bl IsCurrentFixedRoomBossFight + cmp r0, #0 + bne _022E6090 + mov r0, r7 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, r7 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + b _022E60CC +_022E6090: + ldr r0, _022E60E0 ; =ov29_0235124C + ldr r5, [r0, r6, lsl #2] + mov r0, r5 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, r5 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity +_022E60CC: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022E60D4: .word DUNGEON_PTR +_022E60D8: .word ov29_023511DC +_022E60DC: .word ov29_0235122C +_022E60E0: .word ov29_0235124C + arm_func_end ov29_022E5FE8 + + arm_func_start ov29_022E60E4 +ov29_022E60E4: ; 0x022E60E4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x29 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x29 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E60E4 + + arm_func_start PlayEffectAnimation0x1A9__022E6130 +PlayEffectAnimation0x1A9__022E6130: ; 0x022E6130 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E6178 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + ldr r1, _022E6178 ; =0x000001A9 + mov r0, r4 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E6178: .word 0x000001A9 + arm_func_end PlayEffectAnimation0x1A9__022E6130 + + arm_func_start PlayEffectAnimation0x1A9__022E617C +PlayEffectAnimation0x1A9__022E617C: ; 0x022E617C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E61C4 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + ldr r1, _022E61C4 ; =0x000001A9 + mov r0, r4 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E61C4: .word 0x000001A9 + arm_func_end PlayEffectAnimation0x1A9__022E617C + + arm_func_start PlayEffectAnimation0x1A9__022E61C8 +PlayEffectAnimation0x1A9__022E61C8: ; 0x022E61C8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E6210 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + ldr r1, _022E6210 ; =0x000001A9 + mov r0, r4 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E6210: .word 0x000001A9 + arm_func_end PlayEffectAnimation0x1A9__022E61C8 + + arm_func_start PlayEffectAnimation0x1A9__022E6214 +PlayEffectAnimation0x1A9__022E6214: ; 0x022E6214 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E625C ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + ldr r1, _022E625C ; =0x000001A9 + mov r0, r4 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E625C: .word 0x000001A9 + arm_func_end PlayEffectAnimation0x1A9__022E6214 + + arm_func_start ov29_022E6260 +ov29_022E6260: ; 0x022E6260 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x1a8 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x1a8 + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E6260 + + arm_func_start PlayEffectAnimation0x29 +PlayEffectAnimation0x29: ; 0x022E62A8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x29 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x29 + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end PlayEffectAnimation0x29 + + arm_func_start ov29_022E62F0 +ov29_022E62F0: ; 0x022E62F0 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x48 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x48 + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E62F0 + + arm_func_start ov29_022E6338 +ov29_022E6338: ; 0x022E6338 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E6384 ; =0x000001A6 + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x1a4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E6384: .word 0x000001A6 + arm_func_end ov29_022E6338 + + arm_func_start ov29_022E6388 +ov29_022E6388: ; 0x022E6388 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E63D4 ; =0x00000297 + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E63D4 ; =0x00000297 + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E63D4: .word 0x00000297 + arm_func_end ov29_022E6388 + + arm_func_start PlayEffectAnimation0x18E +PlayEffectAnimation0x18E: ; 0x022E63D8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E6420 ; =0x0000018E + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r2, #0 + mov r1, #2 + stmia sp, {r1, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r4 + add r1, r1, #0x18c + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E6420: .word 0x0000018E + arm_func_end PlayEffectAnimation0x18E + + arm_func_start ov29_022E6424 +ov29_022E6424: ; 0x022E6424 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x1b0 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x1b0 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + mov r0, #0xa + mov r1, #0x42 + bl ov29_022EA370 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E6424 + + arm_func_start ov29_022E647C +ov29_022E647C: ; 0x022E647C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x1a8 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x1a8 + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E647C + + arm_func_start PlayEffectAnimation0x1A9__022E64C4 +PlayEffectAnimation0x1A9__022E64C4: ; 0x022E64C4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E650C ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + ldr r1, _022E650C ; =0x000001A9 + mov r0, r4 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E650C: .word 0x000001A9 + arm_func_end PlayEffectAnimation0x1A9__022E64C4 + + arm_func_start PlayEffectAnimation0x1A9__022E6510 +PlayEffectAnimation0x1A9__022E6510: ; 0x022E6510 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E6558 ; =0x000001A9 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + ldr r1, _022E6558 ; =0x000001A9 + mov r0, r4 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E6558: .word 0x000001A9 + arm_func_end PlayEffectAnimation0x1A9__022E6510 + + arm_func_start ov29_022E655C +ov29_022E655C: ; 0x022E655C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E65A4 ; =0x000001AB + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + ldr r1, _022E65A4 ; =0x000001AB + mov r0, r4 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E65A4: .word 0x000001AB + arm_func_end ov29_022E655C + + arm_func_start ov29_022E65A8 +ov29_022E65A8: ; 0x022E65A8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #4 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E65A8 + + arm_func_start ov29_022E65F4 +ov29_022E65F4: ; 0x022E65F4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E6640 ; =0x0000011E + bl GetEffectAnimationField0x19 + mov r2, r0 + mov ip, #0 + mov r1, #2 + stmia sp, {r1, ip} + sub r0, ip, #1 + str r0, [sp, #8] + and r3, r2, #0xff + mov r0, r4 + add r1, r1, #0x11c + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E6640: .word 0x0000011E + arm_func_end ov29_022E65F4 + + arm_func_start ov29_022E6644 +ov29_022E6644: ; 0x022E6644 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, _022E6690 ; =0x0000011D + bl GetEffectAnimationField0x19 + mov r2, r0 + and r3, r2, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + ldr r1, _022E6690 ; =0x0000011D + mov r0, r4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E6690: .word 0x0000011D + arm_func_end ov29_022E6644 + + arm_func_start PlayKeyDoorUnlockEffect +PlayKeyDoorUnlockEffect: ; 0x022E6694 + stmdb sp!, {r4, lr} + mov r4, r1 + ldr r1, _022E66C0 ; =0x0000019E + mov r2, #1 + bl PlayEffectAnimationPos + cmp r4, #0 + ldmeqia sp!, {r4, pc} + mov r0, #0 + mov r1, #9 + bl ov29_022E56F4 + ldmia sp!, {r4, pc} + .align 2, 0 +_022E66C0: .word 0x0000019E + arm_func_end PlayKeyDoorUnlockEffect diff --git a/asm/overlay_29_022E66D8.s b/asm/overlay_29_022E66D8.s new file mode 100644 index 00000000..37a5f5a2 --- /dev/null +++ b/asm/overlay_29_022E66D8.s @@ -0,0 +1,50 @@ + .include "asm/macros.inc" + .include "overlay_29_022E66D8.inc" + + .text + + arm_func_start ov29_022E66D8 +ov29_022E66D8: ; 0x022E66D8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x15 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x15 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E66D8 + + arm_func_start ov29_022E6724 +ov29_022E6724: ; 0x022E6724 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x1b4 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x1b4 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E6724 diff --git a/asm/overlay_29_022E6798.s b/asm/overlay_29_022E6798.s new file mode 100644 index 00000000..7b127ab7 --- /dev/null +++ b/asm/overlay_29_022E6798.s @@ -0,0 +1,94 @@ + .include "asm/macros.inc" + .include "overlay_29_022E6798.inc" + + .text + + arm_func_start ov29_022E6798 +ov29_022E6798: ; 0x022E6798 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r0, #0x18 + bl GetEffectAnimationField0x19 + mov r1, r0 + and r3, r1, #0xff + mov r0, #2 + mov ip, #0 + stmia sp, {r0, ip} + sub r0, ip, #1 + str r0, [sp, #8] + mov r0, r4 + mov r1, #0x18 + mov r2, #1 + str ip, [sp, #0xc] + bl PlayEffectAnimationEntity + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + arm_func_end ov29_022E6798 + + arm_func_start ov29_022E67E4 +ov29_022E67E4: ; 0x022E67E4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x10 + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r4, r2 + mov r5, #0x200 + bl ShouldDisplayEntityAdvanced + cmp r0, #0 + beq _022E68AC + mov r0, r7 + bl GetEffectAnimationField0x19 + mov r3, r0 + mov r0, #2 + mov r2, #0 + stmia sp, {r0, r2} + sub r0, r2, #1 + str r0, [sp, #8] + mov r0, r6 + mov r1, r7 + and r3, r3, #0xff + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + mov r0, r4 + mov r1, #0x42 + bl ov29_022EA370 + mov r4, #0x42 + ldr sb, _022E68B4 ; =DUNGEON_PTR + ldr r7, _022E68B8 ; =0x0001A226 + mvn r8, #7 + b _022E6894 +_022E6860: + mov r0, r4 + bl AdvanceFrame + ldr r0, [r6, #0x1c] + add r2, r0, r5 + str r2, [r6, #0x1c] + ldr r0, [sb] + ldr r1, [r6, #0x10] + ldrsh r0, [r0, r7] + sub r1, r1, r2 + add r5, r5, #0x100 + rsb r0, r0, r1, asr #8 + cmp r0, r8 + blt _022E68A0 +_022E6894: + ldr r0, [r6, #0x1c] + cmp r0, #0xc800 + blt _022E6860 +_022E68A0: + mov r0, #0 + strb r0, [r6, #0x20] + bl AnimationDelayOrSomething +_022E68AC: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_022E68B4: .word DUNGEON_PTR +#ifdef JAPAN +_022E68B8: .word 0x0001A182 +#else +_022E68B8: .word 0x0001A226 +#endif + arm_func_end ov29_022E67E4 diff --git a/asm/overlay_29_022E6928.s b/asm/overlay_29_022E6928.s new file mode 100644 index 00000000..e84ecbf1 --- /dev/null +++ b/asm/overlay_29_022E6928.s @@ -0,0 +1,1278 @@ + .include "asm/macros.inc" + .include "overlay_29_022E6928.inc" + + .text + + arm_func_start PlayStairSensorArrowEffect +PlayStairSensorArrowEffect: ; 0x022E6928 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0x1c + ldr r3, _022E69F8 ; =ov29_023511B0 + mov r4, r1 + add r2, sp, #0x10 + mov r5, r0 + mov r1, #6 +_022E6944: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _022E6944 + ldr r0, _022E69FC ; =0x0000027A + bl GetEffectAnimationField0x19 + mov r3, #2 + mov r1, r4, lsr #0x1f + mov ip, r0 + rsb r0, r1, r4, lsl #29 + add r0, r1, r0, ror #29 + mov r0, r0, lsl #0x10 + str r3, [sp] + mov r2, #0 + add r1, r3, #0x278 + str r2, [sp, #4] + mov r0, r0, asr #0x10 + str r0, [sp, #8] + add r4, sp, #0x10 + mov r0, r5 + and r3, ip, #0xff + str r4, [sp, #0xc] + bl PlayEffectAnimationEntity + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + mov r6, #0 + mov r4, #0x42 + b _022E69D8 +_022E69B4: + mov r0, r5 + bl AnimationHasMoreFrames + cmp r0, #0 + beq _022E69E0 + mov r0, r4 + bl AdvanceFrame + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_022E69D8: + cmp r6, #0x64 + blt _022E69B4 +_022E69E0: + cmp r5, #0 + blt _022E69F0 + mov r0, r5 + bl ov10_022BDE50 +_022E69F0: + add sp, sp, #0x1c + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_022E69F8: .word ov29_023511B0 +_022E69FC: .word 0x0000027A + arm_func_end PlayStairSensorArrowEffect + + arm_func_start ov29_022E6A00 +ov29_022E6A00: ; 0x022E6A00 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x38 + mov r8, r0 + mov r7, r1 + mov r4, r2 + mov r5, #0 + bl GetLeader + mov r6, r0 + mov r0, #0xcc + mov r1, #7 + bl MemAlloc + ldr r1, _022E6BF8 ; =ov29_0235354C + add r2, r7, #1 + str r0, [r1, #4] + str r8, [r0] + ldr r0, [r1, #4] + mov r2, r2, lsl #2 + str r2, [r0, #8] + ldr r0, [r1, #4] + ldr r3, _022E6BFC ; =ov29_023511A4 + str r4, [r0, #4] + add r2, sp, #0 + mov r4, r5 + mov r1, #6 +_022E6A60: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _022E6A60 + b _022E6BDC +_022E6A74: + add r0, sp, #0xc + bl ov10_022BF274 + ldr r0, _022E6BF8 ; =ov29_0235354C + ldr r2, _022E6C00 ; =ov29_02351464 + ldr r7, [r0, #4] + mov r0, #0x18 + ldr r3, [r7] + mov r1, #0 + mla r0, r3, r0, r2 + mov r2, r5, lsl #3 + ldrsh r0, [r2, r0] + str r4, [sp, #0x10] + str r1, [sp, #0x14] + str r0, [sp, #0xc] + ldr r1, [r6, #0xc] + mov r0, #2 + mov r1, r1, asr #8 + strh r1, [sp, #0x18] + ldr r1, [r6, #0x10] + mov r1, r1, asr #8 + strh r1, [sp, #0x1a] + bl RandIntSafe + ldr r3, [r7] + ldr r2, _022E6C00 ; =ov29_02351464 + mov r1, #0x18 + mla r1, r3, r1, r2 + add r1, r1, r5, lsl #3 + ldr r2, [r1, #4] + add r1, r7, r4, lsl #2 + add r2, r0, r2, lsl #1 + mov r0, #0xff + str r2, [r1, #0x4c] + bl RandIntSafe + ldr r1, _022E6BF8 ; =ov29_0235354C + mov r2, r4, lsl #1 + ldr r1, [r1, #4] + add r3, r0, #0x9f + add r1, r1, r4, lsl #2 + add r0, r2, #8 + strh r3, [r1, #0x8c] + bl RandIntSafe + mov r2, r4, lsr #0x1f + rsb r1, r2, r4, lsl #30 + add r2, r2, r1, ror #30 + mov r1, #0x28 + mul r7, r2, r1 + rsb r2, r7, #0x18 + ldr r3, _022E6BF8 ; =ov29_0235354C + add r2, r2, r0 + ldr r1, [r3, #4] + mov r7, #4 + add r0, r1, r4, lsl #2 + strh r2, [r0, #0x8e] + ldr r1, [r3, #4] + ldr r0, _022E6C04 ; =0x0000FFFF + add r2, r1, r4, lsl #2 + ldrsh r1, [r2, #0x8c] + add r3, sp, #0 + strh r1, [sp, #0x1c] + ldrsh ip, [r2, #0x8e] + add r2, sp, #0x28 + mov r1, #6 + strh ip, [sp, #0x1e] + strb r7, [sp, #0x20] + str r0, [sp, #0x24] +_022E6B78: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _022E6B78 + add r0, sp, #0xc + mov r1, #0 + bl ov10_022BF2B4 + ldr r1, _022E6BF8 ; =ov29_0235354C + add r5, r5, #1 + ldr r2, [r1, #4] + cmp r5, #3 + add r2, r2, r4, lsl #2 + str r0, [r2, #0xc] + bge _022E6BD4 + ldr r0, [r1, #4] + ldr r1, _022E6C00 ; =ov29_02351464 + ldr r2, [r0] + mov r0, #0x18 + mla r0, r2, r0, r1 + mov r1, r5, lsl #3 + ldrsh r0, [r1, r0] + cmp r0, #0 + bne _022E6BD8 +_022E6BD4: + mov r5, #0 +_022E6BD8: + add r4, r4, #1 +_022E6BDC: + ldr r0, _022E6BF8 ; =ov29_0235354C + ldr r0, [r0, #4] + ldr r0, [r0, #8] + cmp r4, r0 + blt _022E6A74 + add sp, sp, #0x38 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_022E6BF8: .word ov29_0235354C +_022E6BFC: .word ov29_023511A4 +_022E6C00: .word ov29_02351464 +_022E6C04: .word 0x0000FFFF + arm_func_end ov29_022E6A00 + + arm_func_start ov29_022E6C08 +ov29_022E6C08: ; 0x022E6C08 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + ldr r0, _022E6CDC ; =ov29_0235354C + mov sl, #0 + ldr r1, [r0, #4] + mov sb, #0 + ldr r0, [r1, #4] + mov r6, #1 + cmp r0, #0 + subne r0, r0, #1 + strne r0, [r1, #4] + movne sb, #1 + mvn r7, #0x9e + mov r8, #0x9f + mov r5, sl + ldr r4, _022E6CDC ; =ov29_0235354C + b _022E6CC0 +_022E6C4C: + ldr r0, [r4, #4] + add r2, r0, sl, lsl #2 + ldrsh r1, [r2, #0x8c] + ldr r0, [r2, #0x4c] + sub r0, r1, r0 + strh r0, [r2, #0x8c] + ldr r2, [r4, #4] + add r1, r2, sl, lsl #2 + ldrsh r0, [r1, #0x8c] + cmp r0, r7 + bgt _022E6C8C + ldr r0, [r2, #4] + cmp r0, #0 + strgth r8, [r1, #0x8c] + strleh r7, [r1, #0x8c] + b _022E6C90 +_022E6C8C: + mov sb, r6 +_022E6C90: + ldr r2, [r4, #4] + mov r1, r5 + str r5, [sp] + add r0, r2, sl, lsl #2 + ldr r0, [r0, #0xc] + add r2, r2, #0x8c + mov r0, r0, lsl #0x10 + mov r3, r5 + mov r0, r0, asr #0x10 + add r2, r2, sl, lsl #2 + bl ov10_022BF45C + add sl, sl, #1 +_022E6CC0: + ldr r0, [r4, #4] + ldr r0, [r0, #8] + cmp sl, r0 + blt _022E6C4C + mov r0, sb + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_022E6CDC: .word ov29_0235354C + arm_func_end ov29_022E6C08 + + arm_func_start ov29_022E6CE0 +ov29_022E6CE0: ; 0x022E6CE0 + stmdb sp!, {r3, r4, r5, lr} + ldr r5, _022E6D64 ; =ov29_0235354C + ldr r0, [r5, #4] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r4, #0 + b _022E6D34 +_022E6CFC: + add r0, r1, r4, lsl #2 + ldr r0, [r0, #0xc] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl AnimationHasMoreFrames + cmp r0, #0 + beq _022E6D30 + ldr r0, [r5, #4] + add r0, r0, r4, lsl #2 + ldr r0, [r0, #0xc] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl ov10_022BDE50 +_022E6D30: + add r4, r4, #1 +_022E6D34: + ldr r1, [r5, #4] + ldr r0, [r1, #8] + cmp r4, r0 + blt _022E6CFC + bl ov10_022BDC68 + ldr r0, _022E6D64 ; =ov29_0235354C + ldr r0, [r0, #4] + bl MemFree + ldr r0, _022E6D64 ; =ov29_0235354C + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_022E6D64: .word ov29_0235354C + arm_func_end ov29_022E6CE0 + + arm_func_start ov29_022E6D68 +ov29_022E6D68: ; 0x022E6D68 + stmdb sp!, {r3, r4, r5, lr} + ldr r3, _022E6DCC ; =DUNGEON_PTR + mov r4, #0 + ldr r3, [r3] + add r3, r3, #0x218 + add lr, r3, #0x400 + mvn r3, #0 + b _022E6DC0 +_022E6D88: + ldr ip, [lr, r4, lsl #4] + add r5, lr, r4, lsl #4 + cmp ip, r3 + bne _022E6DBC + str r0, [r5] + str r1, [r5, #0xc] + str r2, [r5, #4] + ldr r0, [r5] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl ov10_022BEFD8 + strb r0, [r5, #8] + ldmia sp!, {r3, r4, r5, pc} +_022E6DBC: + add r4, r4, #1 +_022E6DC0: + cmp r4, #3 + blt _022E6D88 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_022E6DCC: .word DUNGEON_PTR + arm_func_end ov29_022E6D68 + + arm_func_start ov29_022E6DD0 +ov29_022E6DD0: ; 0x022E6DD0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov sb, #0 + ldr r4, _022E6E3C ; =DUNGEON_PTR + mov r7, sb + mov r8, #1 + mvn r6, #0 + mov r5, sb +_022E6DEC: + ldr r0, [r4] + add r0, r0, #0x218 + add r0, r0, #0x400 + ldr r1, [r0, sb, lsl #4] + add sl, r0, sb, lsl #4 + cmp r1, #0 + movge r0, r8 + movlt r0, r7 + tst r0, #0xff + beq _022E6E2C + mov r0, r1, lsl #0x10 + mov r0, r0, asr #0x10 + bl AnimationHasMoreFrames + cmp r0, #0 + streq r6, [sl] + streq r5, [sl, #0xc] +_022E6E2C: + add sb, sb, #1 + cmp sb, #3 + blt _022E6DEC + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_022E6E3C: .word DUNGEON_PTR + arm_func_end ov29_022E6DD0 + + arm_func_start ov29_022E6E40 +ov29_022E6E40: ; 0x022E6E40 + mov ip, #0 + ldr r1, _022E6E7C ; =DUNGEON_PTR + mvn r3, #0 + mov r2, ip +_022E6E50: + ldr r0, [r1] + add r0, r0, #0x218 + add r0, r0, #0x400 + str r3, [r0, ip, lsl #4] + add r0, r0, ip, lsl #4 + str r2, [r0, #4] + add ip, ip, #1 + str r2, [r0, #0xc] + cmp ip, #3 + blt _022E6E50 + bx lr + .align 2, 0 +_022E6E7C: .word DUNGEON_PTR + arm_func_end ov29_022E6E40 + + arm_func_start ov29_022E6E80 +ov29_022E6E80: ; 0x022E6E80 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + ldr r2, _022E6F8C ; =ov29_0235118C + mov sl, r0 + ldrh r5, [r2, #4] + ldrh r4, [r2, #6] + ldrh r3, [r2] + ldrh r0, [r2, #2] + strh r5, [sp, #0x10] + strh r4, [sp, #0x12] + strh r0, [sp, #0xe] + strh r3, [sp, #0xc] + mvn r0, #0 + ldrh r6, [sp, #0x10] + ldrh r5, [sp, #0x12] + ldrh r4, [sp, #0xc] + ldrh fp, [sp, #0xe] + str r1, [sp, #4] + mov r7, #0 + str r0, [sp, #8] +_022E6ED0: + ldr r0, _022E6F90 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x218 + add r0, r0, #0x400 + add r8, r0, r7, lsl #4 + ldr r0, [r0, r7, lsl #4] + cmp r0, #0 + movge r0, #1 + movlt r0, #0 + tst r0, #0xff + beq _022E6F78 + ldr r0, [r8, #0xc] + cmp r0, sl + bne _022E6F78 + strh r6, [sp, #0x18] + strh r5, [sp, #0x1a] + ldr r0, [sl, #0xc] + mov r0, r0, asr #8 + strh r0, [sp, #0x18] + ldr r0, [sl, #0x10] + mov r0, r0, asr #8 + strh r0, [sp, #0x1a] + strh r4, [sp, #0x14] + strh fp, [sp, #0x16] + ldrsb r1, [r8, #8] + ldr r0, [sp, #8] + ldr sb, [sl, #0xb4] + cmp r1, r0 + beq _022E6F54 + and r2, r1, #0xff + add r0, sp, #0x14 + add r1, sl, #0x2c + bl sub_0201CF90 +_022E6F54: + ldrb r0, [sb, #0x4c] + ldr r3, [sp, #4] + add r1, sp, #0x18 + str r0, [sp] + ldr r0, [r8] + add r2, sp, #0x14 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl ov10_022BFB6C +_022E6F78: + add r7, r7, #1 + cmp r7, #3 + blt _022E6ED0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022E6F8C: .word ov29_0235118C +_022E6F90: .word DUNGEON_PTR + arm_func_end ov29_022E6E80 + + arm_func_start ov29_022E6F94 +ov29_022E6F94: ; 0x022E6F94 + ldr r1, _022E6FB8 ; =DUNGEON_PTR + mov r2, #0xff + ldr r0, [r1] + add r0, r0, #0x28000 +#ifdef JAPAN + strb r2, [r0, #0x60c] + ldr r0, [r1] + add r0, r0, #0x28000 + strb r2, [r0, #0x60d] +#else + strb r2, [r0, #0x6b0] + ldr r0, [r1] + add r0, r0, #0x28000 + strb r2, [r0, #0x6b1] +#endif + bx lr + .align 2, 0 +_022E6FB8: .word DUNGEON_PTR + arm_func_end ov29_022E6F94 + + arm_func_start LoadMappaFileAttributes +LoadMappaFileAttributes: ; 0x022E6FBC +#ifdef JAPAN +#define LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET -0xA4 +#else +#define LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x50 + ldr r3, _022E79E4 ; =DUNGEON_PTR + ldr r4, _022E79E8 ; =ov29_02351584 + ldr r6, [r3] + ldr r7, [r4, #0xc] + ldr r8, [r4, #8] + add r3, r6, #0x4a + str r1, [sp] + add r4, r6, #0x348 + mov r5, r0 + add r1, r4, #0x400 + add r0, r3, #0x700 + mov r4, r2 + str r8, [sp, #0x48] + str r7, [sp, #0x4c] + bl DungeonFloorToGroupFloor + ldr r1, _022E79E4 ; =DUNGEON_PTR + ldr r3, [r1] + ldrb r2, [r3, #0x74a] + add r0, r3, #0x28000 + strb r2, [r0, #0x6b0 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + ldrb r2, [r3, #0x74b] + strb r2, [r0, #0x6b1 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + ldr r0, [r1] + ldrb r0, [r0, #0x748] + bl GetNbPrecedingFloors + ldr r1, _022E79E4 ; =DUNGEON_PTR + mov r6, #0 + ldr r2, [r1] + strh r0, [r2, #0x20] + ldr r0, [r1] + strh r6, [r0, #0x1e] + ldr r3, [r1] + ldrsh r2, [r3, #0x20] + ldrsh r0, [r3, #0x1e] + add r0, r2, r0 + strh r0, [r3, #0x22] + ldr r0, [r1] + str r6, [sp, #0x28] + ldr r0, [r0, #0x7cc] + mov r2, #0xf + cmp r0, #1 + bne _022E707C + ldr r1, _022E79EC ; =ov29_02351594 + add r0, sp, #0x48 + bl LoadFileFromRom + b _022E709C +_022E707C: + cmp r0, #2 + add r0, sp, #0x48 + bne _022E7094 + ldr r1, _022E79F0 ; =ov29_023515B0 + bl LoadFileFromRom + b _022E709C +_022E7094: + ldr r1, _022E79F4 ; =ov29_023515CC + bl LoadFileFromRom +_022E709C: + mov r0, #0x65 + bl AdvanceFrame + ldr r1, [sp, #0x48] + add r0, sp, #0x28 + bl HandleSir0Translation + mov r0, #0x65 + ldr sb, [sp, #0x28] + bl AdvanceFrame + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldr r6, [sb] + ldr r7, [r0] + mov r1, #0x12 + add r0, r7, #0x28000 + ldrb r3, [r0, #0x6b0 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + ldrb r2, [r0, #0x6b1 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + ldrb r0, [r7, #0x748] + ldr r3, [r6, r3, lsl #2] + mla r6, r2, r1, r3 + bl GetNbFloorsPlusOne + ldr r2, _022E79E4 ; =DUNGEON_PTR + ldr r1, [r2] + add r1, r1, #0x2c000 + strb r0, [r1, #0xaf4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + ldr r0, [r2] + ldrb r0, [r0, #0x748] + cmp r0, #0xae + moveq r0, #1 + movne r0, #0 + tst r0, #0xff + beq _022E7138 + bl CheckActiveChallengeRequest + cmp r0, #0 + bne _022E7138 + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x2c000 + ldrb r1, [r0, #0xaf4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + sub r1, r1, #1 + strb r1, [r0, #0xaf4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] +_022E7138: + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldrsh r2, [r6] + ldr r3, [sb, #4] + ldr r1, [r0] + add r7, r3, r2, lsl #5 + ldr r0, _022E79F8 ; =0x000286B2 + mov r2, #0x10 + add r3, r1, r0 +_022E7158: + ldrh r0, [r7], #2 + subs r2, r2, #1 + strh r0, [r3], #2 + bne _022E7158 +#ifdef JAPAN + ldr r0, _022E79FC ; =0x000286CE + ldr r2, _022E7A00 ; =0x0002CB08 + ldrsh r3, [r1, r0] + mov r0, #0 + strh r3, [r1, r2] + ldr r2, _022E79E4 ; =DUNGEON_PTR +_022E7184: + ldrsh r3, [r6, #4] + ldr r7, [sb, #0x10] + ldr r1, [r2] + ldr r7, [r7, r3, lsl #2] + mov r3, r0, lsl #1 + ldrh r3, [r7, r3] + add r1, r1, r0, lsl #1 + add r1, r1, #0x2c800 + add r0, r0, #1 + strh r3, [r1, #0x8e] +#else + ldr r2, _022E79FC ; =0x000286CE + ldr r3, _022E7A00 ; =0x0002CB08 + ldrsh r7, [r1, r2] + mov r0, #0 + strh r7, [r1, r3] + rsb r1, r2, #0x55000 + ldr r2, _022E79E4 ; =DUNGEON_PTR +_022E7184: + ldrsh r7, [r6, #4] + ldr r8, [sb, #0x10] + ldr r3, [r2] + ldr r8, [r8, r7, lsl #2] + mov r7, r0, lsl #1 + ldrh r7, [r8, r7] + add r3, r3, r0, lsl #1 + add r0, r0, #1 + strh r7, [r3, r1] +#endif + cmp r0, #0x19 + blt _022E7184 + cmp r4, #0 + beq _022E71C0 + mov r0, r5 + blx r4 +_022E71C0: + cmp r5, #0 + bne _022E7674 + ldr r0, _022E79E8 ; =ov29_02351584 + mov r4, #0 + ldrh r2, [r0] + ldrh r1, [r0, #2] + mov r0, r4 + mov r8, r4 + str r4, [sp, #0xc] + str r4, [sp, #4] + strh r2, [sp, #0x44] + strh r1, [sp, #0x46] + mov fp, #1 + bl DungeonRngSetSecondary + bl IsDestinationFloorWithMonster + str r0, [sp, #0x10] + ldr r3, _022E7A04 ; =0x0000FFFF + ldr r1, _022E79E4 ; =DUNGEON_PTR + ldr r0, _022E7A08 ; =0x0002C9EA + mov r5, r4 +_022E7210: + ldr r2, [r1] + add r2, r2, r5, lsl #1 + strh r3, [r2, r0] + add r5, r5, #1 + cmp r5, #0x10 + blt _022E7210 + bl IsItemForSpecialSpawnInBag + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #4] + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x748] + bl IsDojoDungeon + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #4] + ldr r0, _022E7A0C ; =0x00000906 + mov r1, #0xf + bl MemAlloc + str r0, [sp, #0x18] + bl GetNbRecruited + mov r0, #0x100 + mov r1, #0xf + bl MemAlloc + mov r7, r0 + ldr r0, _022E7A10 ; =0x00000229 + mov sl, #0 + sub r0, r0, #0xaa + str r0, [sp, #0x20] + ldr r0, _022E7A10 ; =0x00000229 + rsb r0, r0, #0x600 + str r0, [sp, #0x24] +_022E7294: + mov r0, #0 + str r0, [sp, #8] + ldrsh r0, [r6, #2] + ldr r1, [sb, #0xc] + ldr r0, [r1, r0, lsl #2] + add r0, r0, sl, lsl #3 + bl GetMonsterIdFromSpawnEntry + movs r5, r0 + beq _022E73B0 + ldr r1, _022E7A10 ; =0x00000229 + cmp r5, r1 + streqh sl, [sp, #0x44] + beq _022E7398 + ldr r1, [sp, #0x20] + cmp r5, r1 + ldrne r1, [sp, #0x24] + cmpne r5, r1 + streqh sl, [sp, #0x46] + beq _022E7398 + bl CanMonsterSpawn + cmp r0, #0 + addeq sl, sl, #1 + beq _022E7294 + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x28000 + ldrb r0, [r0, #0x6c4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + bl IsBossFight + cmp r0, #0 + bne _022E7398 + mov r0, r5 + bl CheckSpawnThreshold + cmp r0, #0 + beq _022E7398 + mov r0, r5 + bl NeedsItemToSpawn + cmp r0, #0 + beq _022E7390 + ldr r0, _022E79E4 ; =DUNGEON_PTR + mov r1, r5 + ldr r0, [r0] + add r0, r0, #0x7d0 + bl IsInSpawnList + cmp r0, #0 + ldreq r0, [sp, #0x10] + cmpeq r0, #0 + ldreq r0, [sp, #0x18] + moveq r1, r5, lsl #1 + ldreqsh r0, [r0, r1] + cmpeq r0, #0 + bne _022E7398 + ldr r0, [sp, #4] + cmp r0, #0 + beq _022E7398 + ldrsh r0, [r6, #2] + ldr r1, [sb, #0xc] + mov r8, r5 + ldr r0, [r1, r0, lsl #2] + add r0, r0, sl, lsl #3 + bl GetMonsterLevelFromSpawnEntry + and r0, r0, #0xff + str r0, [sp, #0xc] + b _022E7398 +_022E7390: + mov r0, #1 + str r0, [sp, #8] +_022E7398: + ldr r0, [sp, #8] + cmp r0, #0 + strne sl, [r7, r4, lsl #2] + addne r4, r4, #1 + add sl, sl, #1 + b _022E7294 +_022E73B0: + bl FloorNumberIsEven + cmp r0, #0 + ldreq r0, _022E79E4 ; =DUNGEON_PTR + ldreq r0, [r0] + addeq r0, r0, #0x700 + streqh r8, [r0, #0xa8] + beq _022E73E4 + mov r0, r8 + bl GetSecondFormIfValid + ldr r1, _022E79E4 ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x700 + strh r0, [r1, #0xa8] +_022E73E4: + ldr r1, _022E79E4 ; =DUNGEON_PTR + mov r0, #0x10 + ldr r2, [r1] + ldr r1, [sp, #0xc] + strb r1, [r2, #0x7aa] + bl DungeonRandInt + add r0, r0, #1 + str r0, [sp, #0x14] + sub r0, r4, #1 + mov sl, #0 + str r0, [sp, #0x1c] + b _022E7448 +_022E7414: + mov r5, #0 + b _022E7438 +_022E741C: + mov r0, r4 + bl DungeonRandInt + ldr r2, [r7, r5, lsl #2] + ldr r1, [r7, r0, lsl #2] + str r1, [r7, r5, lsl #2] + str r2, [r7, r0, lsl #2] + add r5, r5, #1 +_022E7438: + ldr r0, [sp, #0x1c] + cmp r5, r0 + blt _022E741C + add sl, sl, #1 +_022E7448: + ldr r0, [sp, #0x14] + cmp sl, r0 + blt _022E7414 + ldr r0, [sp] + cmp r0, #0 + movne r4, #0 + bne _022E746C + cmp r4, #0xe + movge r4, #0xe +_022E746C: + ldr r0, _022E7A10 ; =0x00000229 + bl GetSpriteFileSize + add r5, r0, #0 + ldr r0, _022E7A14 ; =0x0000017F + bl GetSpriteFileSize + ldr r1, [sp, #0x10] + add r5, r5, r0 + cmp r1, #0 + beq _022E749C + bl ov29_02349378 + add r5, r5, r0 + b _022E74B0 +_022E749C: + cmp r8, #0 + beq _022E74B0 + mov r0, r8 + bl GetSpriteFileSize + add r5, r5, r0 +_022E74B0: + mov r8, #0 + b _022E7528 +_022E74B8: + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldr r2, [r7, r8, lsl #2] + ldr r0, [r0] + add r1, r0, r8, lsl #1 + ldr r0, _022E7A08 ; =0x0002C9EA + strh r2, [r1, r0] + ldrsh r1, [r6, #2] + ldr r2, [sb, #0xc] + ldr r0, [r7, r8, lsl #2] + ldr r1, [r2, r1, lsl #2] + add r2, sp, #0x3c + add r3, r1, r0, lsl #3 + mov r1, #4 +_022E74EC: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _022E74EC + add r0, sp, #0x3c + bl GetMonsterIdFromSpawnEntry + mov sl, r0 + add r0, sp, #0x3c + bl GetMonsterLevelFromSpawnEntry + cmp fp, r0 + movlt fp, r0 + mov r0, sl + bl DungeonGetTotalSpriteFileSize + add r5, r5, r0 + add r8, r8, #1 +_022E7528: + cmp r8, r4 + blt _022E74B8 + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldr r1, _022E7A18 ; =0x0002C9E6 + ldr r0, [r0] + cmp r5, #0x58000 + strh fp, [r0, r1] + bls _022E75C4 + sub sl, r4, #1 + mov r8, #0 + add fp, r1, #4 + b _022E75B8 +_022E7558: + ldrsh r1, [r6, #2] + ldr r2, [sb, #0xc] + ldr r0, [r7, sl, lsl #2] + ldr r1, [r2, r1, lsl #2] + add r2, sp, #0x34 + add r3, r1, r0, lsl #3 + mov r1, #4 +_022E7574: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _022E7574 + add r0, sp, #0x34 + bl GetMonsterIdFromSpawnEntry + bl DungeonGetTotalSpriteFileSize + sub r5, r5, r0 + ldr r1, _022E79E4 ; =DUNGEON_PTR + ldr r0, _022E7A04 ; =0x0000FFFF + ldr r1, [r1] + cmp r5, #0x58000 + add r1, r1, sl, lsl #1 + strh r0, [r1, fp] + add r8, r8, #1 + blo _022E75C0 + sub sl, sl, #1 +_022E75B8: + cmp sl, #0 + bge _022E7558 +_022E75C0: + sub r4, r4, r8 +_022E75C4: + ldrh r2, [sp, #0x44] + ldr r0, _022E7A04 ; =0x0000FFFF + cmp r2, r0 + beq _022E75EC + ldr r1, _022E79E4 ; =DUNGEON_PTR + ldr r0, _022E7A08 ; =0x0002C9EA + ldr r1, [r1] + add r1, r1, r4, lsl #1 + strh r2, [r1, r0] + add r4, r4, #1 +_022E75EC: + ldrh r2, [sp, #0x46] + ldr r0, _022E7A04 ; =0x0000FFFF + ldr r3, _022E79E4 ; =DUNGEON_PTR + cmp r2, r0 + ldrne r1, _022E79E4 ; =DUNGEON_PTR + ldrne r0, _022E7A08 ; =0x0002C9EA + ldrne r1, [r1] + addne r1, r1, r4, lsl #1 + strneh r2, [r1, r0] + ldr r2, _022E7A08 ; =0x0002C9EA + mov r1, #0 +_022E7618: + mov r0, r1 + b _022E764C +_022E7620: + ldr r4, [r3] + add r5, r4, r0, lsl #1 + add r4, r4, r1, lsl #1 + ldrh r8, [r5, r2] + ldrh r5, [r4, r2] + cmp r5, r8 + strhih r8, [r4, r2] + ldrhi r4, [r3] + addhi r4, r4, r0, lsl #1 + strhih r5, [r4, r2] + add r0, r0, #1 +_022E764C: + cmp r0, #0x10 + blt _022E7620 + add r1, r1, #1 + cmp r1, #0xf + blt _022E7618 + ldr r0, [sp, #0x18] + bl MemFree + mov r0, r7 + bl MemFree + bl DungeonRngSetPrimary +_022E7674: + mov r4, #0 + bl FloorNumberIsEven + cmp r0, #0 + ldr r0, _022E79E4 ; =DUNGEON_PTR + mov r5, #0 + ldr r0, [r0] + movne r4, #1 + ldrb r0, [r0, #0x748] + mov r8, r5 + cmp r0, #0x3d + moveq r4, #1 + bl IsDestinationFloorWithFixedRoom + cmp r0, #0 + beq _022E76D0 + mov r0, #0xb + bl IsCurrentMissionType + cmp r0, #0 + bne _022E76CC + mov r0, #0xa + bl IsCurrentMissionType + cmp r0, #0 + beq _022E76D0 +_022E76CC: + mov r5, #1 +_022E76D0: + mov sl, #0 + b _022E77CC +_022E76D8: + ldr r1, _022E79E4 ; =DUNGEON_PTR + ldr r0, _022E7A08 ; =0x0002C9EA + ldr r2, [r1] + ldr r1, _022E7A04 ; =0x0000FFFF + add r2, r2, sl, lsl #1 + ldrh r3, [r2, r0] + cmp r3, r1 + beq _022E77D4 + ldrsh r0, [r6, #2] + ldr r1, [sb, #0xc] + add r2, sp, #0x2c + ldr r0, [r1, r0, lsl #2] + mov r1, #4 + add r3, r0, r3, lsl #3 +_022E7710: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _022E7710 + add r0, sp, #0x2c + bl GetMonsterIdFromSpawnEntry + cmp r5, #0 + ldrne r2, _022E7A10 ; =0x00000229 + cmpne r0, r2 + subne r1, r2, #0xaa + cmpne r0, r1 + rsbne r1, r2, #0x600 + cmpne r0, r1 + bne _022E77C8 + ldr r1, _022E79E4 ; =DUNGEON_PTR + add r7, sp, #0x2c + ldr r1, [r1] + mov r2, #4 + add r1, r1, r8, lsl #3 +#ifdef JAPAN + add r1, r1, #0x8c0 + add r3, r1, #0x2c000 +#else + add r1, r1, #0x164 + add r3, r1, #0x2c800 +#endif +_022E7764: + ldrh r1, [r7], #2 + subs r2, r2, #1 + strh r1, [r3], #2 + bne _022E7764 + cmp r4, #0 + ldrne r1, _022E7A10 ; =0x00000229 + cmpne r0, r1 + beq _022E77C4 + cmp r0, #0x258 + bge _022E77C4 + add r7, r0, #0x258 + mov r0, r7, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetMonsterGenderVeneer + cmp r0, #2 + bne _022E77C4 + ldr r1, _022E79E4 ; =DUNGEON_PTR + mov r0, r7, lsl #0x10 + ldr r2, [r1] + mov r1, r0, asr #0x10 +#ifdef JAPAN + add r0, r2, #0x8c0 + add r0, r0, #0x2c000 +#else + add r0, r2, #0x164 + add r0, r0, #0x2c800 +#endif + add r0, r0, r8, lsl #3 + bl SetMonsterId +_022E77C4: + add r8, r8, #1 +_022E77C8: + add sl, sl, #1 +_022E77CC: + cmp sl, #0x10 + blt _022E76D8 +_022E77D4: + bl IsFullFloorFixedRoom + cmp r0, #0 + beq _022E782C + ldr r0, _022E79E4 ; =DUNGEON_PTR + ldr r3, _022E7A18 ; =0x0002C9E6 + ldr r4, [r0] + rsb r1, r8, #0x10 + add r2, r4, #0x4000 +#ifdef JAPAN + add r0, r4, #0x8c0 + add r0, r0, #0x2c000 +#else + add r0, r4, #0x164 + add r0, r0, #0x2c800 +#endif + ldrb r2, [r2, #0xda + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + ldrsh r3, [r4, r3] + add r0, r0, r8, lsl #3 + bl LoadFixedRoom + ldr r2, _022E79E4 ; =DUNGEON_PTR + ldr r1, [r2] + add r1, r1, #0x12000 + str r0, [r1, #0xb20 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + ldr r0, [r2] + add r0, r0, #0x12000 + ldr r0, [r0, #0xb20 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET] + add r8, r8, r0 +_022E782C: + ldr r4, _022E79E4 ; =DUNGEON_PTR + ldr r0, _022E7A1C ; =0x0002C9E4 + ldr r1, [r4] + mov r5, #0 + strh r8, [r1, r0] + b _022E7860 +_022E7844: + ldr r0, [r4] + mov r1, r5 +#ifdef JAPAN + add r0, r0, #0x8c0 + add r0, r0, #0x2c000 +#else + add r0, r0, #0x164 + add r0, r0, #0x2c800 +#endif + add r0, r0, r8, lsl #3 + bl SetMonsterId + add r8, r8, #1 +_022E7860: + cmp r8, #0x10 + blt _022E7844 + mov r0, #0xb10 + mov r1, #0 + bl MemAlloc + ldr r2, _022E79E4 ; =DUNGEON_PTR + ldr r1, _022E7A20 ; =0x0002C9E8 + ldr r2, [r2] + mov r4, #0 + strh r4, [r2, r1] +_022E7888: + add r1, r6, r4, lsl #1 + ldrsh r2, [r1, #6] + ldr r5, [sb, #8] + mov r1, #0 + ldr r2, [r5, r2, lsl #2] + ldr r5, _022E7A24 ; =0xFFFF8AD0 + mov r3, r1 + mov sl, r1 + rsb r7, r5, #0 + b _022E7908 +_022E78B0: + mov r8, r1, lsl #1 + ldrh fp, [r2, r8] + cmp fp, r5, lsr #16 + moveq r8, r3, lsl #1 + streqh fp, [r0, r8] + addeq r3, r3, #1 + beq _022E7904 + cmp fp, r7 + blo _022E78F8 + add fp, fp, r5 + b _022E78EC +_022E78DC: + mov r8, r3, lsl #1 + strh sl, [r0, r8] + add r3, r3, #1 + sub fp, fp, #1 +_022E78EC: + cmp fp, #0 + bne _022E78DC + b _022E7904 +_022E78F8: + mov r8, r3, lsl #1 + strh fp, [r0, r8] + add r3, r3, #1 +_022E7904: + add r1, r1, #1 +_022E7908: + cmp r3, #0x17c + blt _022E78B0 + mov r1, #0xb10 + mul r1, r4, r1 + mov r2, #0 + ldr r7, _022E79E4 ; =DUNGEON_PTR + ldr r5, _022E7A28 ; =0x000286D2 + mov r3, r2 +_022E7928: + mov sl, r2, lsl #1 + ldr r8, [r7] + ldrh sl, [r0, sl] + add r8, r1, r8 + add r8, r8, r2, lsl #1 + add r3, r3, #1 + strh sl, [r8, r5] + cmp r3, #0x10 + add r2, r2, #1 + blt _022E7928 + ldr r7, _022E79E4 ; =DUNGEON_PTR + ldr r5, _022E7A2C ; =0x000286F2 + mov r3, #0 +_022E795C: + mov sl, r2, lsl #1 + ldr r8, [r7] + ldrh sl, [r0, sl] + add r8, r1, r8 + add r8, r8, r3, lsl #1 + add r3, r3, #1 + strh sl, [r8, r5] + cmp r3, #0x16c + add r2, r2, #1 + blt _022E795C + add r4, r4, #1 + cmp r4, #6 + blt _022E7888 + mov r8, #0 + ldr r2, _022E7A2C ; =0x000286F2 + ldr r4, _022E79E4 ; =DUNGEON_PTR + ldr r1, _022E7A20 ; =0x0002C9E8 + ldr r3, _022E7A04 ; =0x0000FFFF + mov r6, r8 +_022E79A8: + ldr r5, [r4] + add r7, r5, r8, lsl #1 + ldrh r5, [r7, r2] + cmp r5, r3 + streqh r6, [r7, r2] + ldreq r5, [r4] + streqh r8, [r5, r1] + add r8, r8, #1 + cmp r8, #0x16c + blt _022E79A8 + bl MemFree + add r0, sp, #0x48 + bl UnloadFile + add sp, sp, #0x50 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022E79E4: .word DUNGEON_PTR +_022E79E8: .word ov29_02351584 +_022E79EC: .word ov29_02351594 +_022E79F0: .word ov29_023515B0 +_022E79F4: .word ov29_023515CC +_022E79F8: .word 0x000286B2 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E79FC: .word 0x000286CE + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E7A00: .word 0x0002CB08 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E7A04: .word 0x0000FFFF +_022E7A08: .word 0x0002C9EA + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E7A0C: .word 0x00000906 +_022E7A10: .word 0x00000229 +_022E7A14: .word 0x0000017F +_022E7A18: .word 0x0002C9E6 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E7A1C: .word 0x0002C9E4 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E7A20: .word 0x0002C9E8 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E7A24: .word 0xFFFF8AD0 +_022E7A28: .word 0x000286D2 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET +_022E7A2C: .word 0x000286F2 + LOAD_MAPPA_FILE_ATTRIBUTES_OFFSET + arm_func_end LoadMappaFileAttributes diff --git a/asm/overlay_29_022E7EC4.s b/asm/overlay_29_022E7EC4.s index cd94a357..0d24373a 100644 --- a/asm/overlay_29_022E7EC4.s +++ b/asm/overlay_29_022E7EC4.s @@ -655,800 +655,3 @@ ov29_022E8650: ; 0x022E8650 .align 2, 0 _022E8698: .word TOP_SCREEN_STATUS_PTR arm_func_end ov29_022E8650 - - arm_func_start ov29_022E869C -ov29_022E869C: ; 0x022E869C - mov r0, #1 - bx lr - arm_func_end ov29_022E869C - - arm_func_start ov29_022E86A4 -ov29_022E86A4: ; 0x022E86A4 - bx lr - arm_func_end ov29_022E86A4 - - arm_func_start ov29_022E86A8 -ov29_022E86A8: ; 0x022E86A8 - stmdb sp!, {r3, lr} - ldr r0, _022E86C4 ; =TOP_SCREEN_STATUS_PTR - ldr r0, [r0] - add r0, r0, #0x80 - bl ov10_022C2278 - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E86C4: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E86A8 - - arm_func_start AssignTopScreenHandlers -AssignTopScreenHandlers: ; 0x022E86C8 - str r1, [r0] - ldr r1, [sp] - stmib r0, {r2, r3} - str r1, [r0, #0xc] - mov r1, #1 - strb r1, [r0, #0x10] - bx lr - arm_func_end AssignTopScreenHandlers - - arm_func_start ov29_022E86E4 -ov29_022E86E4: ; 0x022E86E4 - stmdb sp!, {r3, lr} - ldr r0, _022E8704 ; =TOP_SCREEN_STATUS_PTR - ldr r0, [r0] - ldr r0, [r0, #0x18] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - blx r0 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E8704: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E86E4 - - arm_func_start ov29_022E8708 -ov29_022E8708: ; 0x022E8708 - stmdb sp!, {r3, lr} - bl GetTopScreenOption - cmp r0, #3 - bne _022E8724 - mov r0, #3 - bl DungeonChangeTopScreenType - ldmia sp!, {r3, pc} -_022E8724: - cmp r0, #2 - bne _022E8738 - mov r0, #0 - bl DungeonChangeTopScreenType - ldmia sp!, {r3, pc} -_022E8738: - cmp r0, #0 - bne _022E874C - mov r0, #2 - bl DungeonChangeTopScreenType - ldmia sp!, {r3, pc} -_022E874C: - cmp r0, #4 - bne _022E8760 - mov r0, #4 - bl DungeonChangeTopScreenType - ldmia sp!, {r3, pc} -_022E8760: - bl ov29_022E81F8 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E8708 - - arm_func_start ov29_022E8768 -ov29_022E8768: ; 0x022E8768 - ldr ip, _022E8774 ; =DungeonChangeTopScreenType - mov r0, #5 - bx ip - .align 2, 0 -_022E8774: .word DungeonChangeTopScreenType - arm_func_end ov29_022E8768 - - arm_func_start ov29_022E8778 -ov29_022E8778: ; 0x022E8778 - stmdb sp!, {r3, lr} - ldr r0, _022E87B0 ; =TOP_SCREEN_STATUS_PTR - mov r3, #3 - ldr r2, [r0] - sub r1, r3, #4 - str r3, [r2, #0xc] - ldr r0, [r0] - strh r1, [r0, #0x10] - bl ov29_022E8104 - ldr r0, _022E87B0 ; =TOP_SCREEN_STATUS_PTR - ldr r1, [r0] - ldrsh r0, [r1, #0x10] - strh r0, [r1, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_022E87B0: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E8778 - - arm_func_start ov29_022E87B4 -ov29_022E87B4: ; 0x022E87B4 - ldr r1, _022E87D8 ; =TOP_SCREEN_STATUS_PTR - ldr r2, [r1] - ldrsh r1, [r2, #8] - cmp r1, r0 - ldreq r0, [r2, #4] - cmpeq r0, #5 - moveq r0, #1 - movne r0, #0 - bx lr - .align 2, 0 -_022E87D8: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E87B4 - - arm_func_start ov29_022E87DC -ov29_022E87DC: ; 0x022E87DC - stmdb sp!, {r3, lr} - bl GetTopScreenOption - ldr r1, _022E87F8 ; =ov29_023515E8 - mov r0, r0, lsl #1 - ldrsh r0, [r1, r0] - bl ov29_022E87B4 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E87F8: .word ov29_023515E8 - arm_func_end ov29_022E87DC - - arm_func_start ov29_022E87FC -ov29_022E87FC: ; 0x022E87FC - ldr r1, _022E880C ; =TOP_SCREEN_STATUS_PTR - ldr r1, [r1] - strb r0, [r1, #0x2b] - bx lr - .align 2, 0 -_022E880C: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E87FC - - arm_func_start ov29_022E8810 -ov29_022E8810: ; 0x022E8810 - ldr r0, _022E8830 ; =TOP_SCREEN_STATUS_PTR - ldr r0, [r0] - ldr r0, [r0, #4] - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_022E8830: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E8810 - - arm_func_start ov29_022E8834 -ov29_022E8834: ; 0x022E8834 - ldr r1, _022E8844 ; =TOP_SCREEN_STATUS_PTR - ldr r1, [r1] - strb r0, [r1, #0x2c] - bx lr - .align 2, 0 -_022E8844: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E8834 - - arm_func_start ov29_022E8848 -ov29_022E8848: ; 0x022E8848 - ldr r0, _022E8868 ; =TOP_SCREEN_STATUS_PTR - ldr r0, [r0] - ldr r0, [r0, #4] - cmp r0, #3 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_022E8868: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E8848 - - arm_func_start HandleTopScreenFades -HandleTopScreenFades: ; 0x022E886C - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - ldr r5, [r0] - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r1, [r5, #4] - cmp r1, #6 - addls pc, pc, r1, lsl #2 - ldmia sp!, {r3, r4, r5, pc} -_022E8890: ; jump table - ldmia sp!, {r3, r4, r5, pc} ; case 0 - b _022E88AC ; case 1 - b _022E88C0 ; case 2 - b _022E8A80 ; case 3 - b _022E8AC8 ; case 4 - b _022E8B00 ; case 5 - b _022E8B5C ; case 6 -_022E88AC: - ldrb r0, [r5, #0x2b] - cmp r0, #0 - moveq r0, #2 - streq r0, [r5, #4] - ldmia sp!, {r3, r4, r5, pc} -_022E88C0: - ldrb r0, [r5, #2] - cmp r0, #0 - beq _022E88EC - mov r0, #1 - bl ov29_0234C70C - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - mov r1, #5 - ldr r0, [r0] - str r1, [r0, #4] -_022E88EC: - bl FreeTopScreen - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - ldr r4, [r0] - ldrsh r0, [r4, #0x10] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _022E89DC -_022E8908: ; jump table - b _022E8920 ; case 0 - b _022E8940 ; case 1 - b _022E8960 ; case 2 - b _022E8980 ; case 3 - b _022E89A0 ; case 4 - b _022E89C0 ; case 5 -_022E8920: - ldr ip, _022E8BA4 ; =ov29_022E84B0 - ldr r1, _022E8BA8 ; =ov29_022E840C - ldr r3, _022E8BAC ; =ov29_022E847C - add r0, r4, #0x14 - mov r2, #0 - str ip, [sp] - bl AssignTopScreenHandlers - b _022E89DC -_022E8940: - ldr ip, _022E8BB0 ; =FreeTeamStatsWrapper - ldr r1, _022E8BB4 ; =InitializeTeamStats - ldr r2, _022E8BB8 ; =UpdateTeamStatsWrapper - ldr r3, _022E8BBC ; =ov29_022E81C8 - add r0, r4, #0x14 - str ip, [sp] - bl AssignTopScreenHandlers - b _022E89DC -_022E8960: - ldr ip, _022E8BC0 ; =FreeDungeonControlsMenuWithBg - ldr r1, _022E8BC4 ; =InitDungeonControlsMenuWithBg - ldr r3, _022E8BC8 ; =ov29_022E854C - add r0, r4, #0x14 - mov r2, #0 - str ip, [sp] - bl AssignTopScreenHandlers - b _022E89DC -_022E8980: - ldr ip, _022E8BCC ; =ov29_022E80D0 - ldr r1, _022E8BD0 ; =ov29_022E7F94 - ldr r2, _022E8BD4 ; =ov29_022E8018 - ldr r3, _022E8BD8 ; =ov29_022E8054 - add r0, r4, #0x14 - str ip, [sp] - bl AssignTopScreenHandlers - b _022E89DC -_022E89A0: - ldr ip, _022E8BDC ; =ov29_022E8630 - ldr r1, _022E8BE0 ; =ov29_022E85A8 - ldr r3, _022E8BE4 ; =ov29_022E85F4 - add r0, r4, #0x14 - mov r2, #0 - str ip, [sp] - bl AssignTopScreenHandlers - b _022E89DC -_022E89C0: - ldr ip, _022E8BE8 ; =ov29_022E86A8 - ldr r1, _022E8BEC ; =ov29_022E8650 - ldr r2, _022E8BF0 ; =ov29_022E869C - ldr r3, _022E8BF4 ; =ov29_022E86A4 - add r0, r4, #0x14 - str ip, [sp] - bl AssignTopScreenHandlers -_022E89DC: - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - ldrsh r1, [r4, #0x10] - ldr r0, [r0] - strh r1, [r0, #8] - ldr r0, [r4, #0x14] - cmp r0, #0 - beq _022E8A20 - ldr r0, _022E8BF8 ; =ov29_0235352C - ldr r0, [r0] - ldr r0, [r0, #0x30] - bl sub_0200B3D4 - ldr r0, _022E8BF8 ; =ov29_0235352C - ldr r0, [r0] - ldr r0, [r0, #0x30] - bl sub_0200B330 - ldr r0, [r4, #0x14] - blx r0 -_022E8A20: - mov r1, #0 - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - str r1, [r5, #0xc] - ldr r2, [r0] - ldrb r1, [r2, #0x2c] - cmp r1, #0 - movne r0, #3 - strne r0, [r2, #4] - ldmneia sp!, {r3, r4, r5, pc} - mov r1, #5 - str r1, [r2, #4] - ldr r0, [r0] - ldrb r0, [r0, #2] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #1 - mov r2, r0 - mov r1, #0x4000 - bl StartFadeDungeonWrapper - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - mov r1, #4 - ldr r0, [r0] - str r1, [r0, #4] - ldmia sp!, {r3, r4, r5, pc} -_022E8A80: - ldrb r1, [r5, #0x2c] - cmp r1, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r1, #5 - str r1, [r5, #4] - ldr r0, [r0] - ldrb r0, [r0, #2] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #1 - mov r2, r0 - mov r1, #0x4000 - bl StartFadeDungeonWrapper - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - mov r1, #4 - ldr r0, [r0] - str r1, [r0, #4] - ldmia sp!, {r3, r4, r5, pc} -_022E8AC8: - bl ov29_022E86E4 - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - ldr r0, [r0] - ldrb r0, [r0, #2] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #1 - bl ov29_0234C70C - cmp r0, #0 - ldreq r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - moveq r1, #5 - ldreq r0, [r0] - streq r1, [r0, #4] - ldmia sp!, {r3, r4, r5, pc} -_022E8B00: - bl ov29_022E86E4 - ldr r0, [r5, #0xc] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - ldr r2, [r0] - ldrb r1, [r2, #1] - strb r1, [r2, #2] - ldr r1, [r0] - ldrb r0, [r1, #2] - cmp r0, #0 - moveq r0, #6 - streq r0, [r1, #4] - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #2 - mov r1, #0x4000 - mov r2, #1 - bl StartFadeDungeonWrapper - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - mov r1, #6 - ldr r0, [r0] - str r1, [r0, #4] - ldmia sp!, {r3, r4, r5, pc} -_022E8B5C: - ldrb r0, [r5, #2] - cmp r0, #0 - beq _022E8B78 - mov r0, #1 - bl ov29_0234C70C - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} -_022E8B78: - bl FreeTopScreen - ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x2b] - cmp r0, #0 - movne r0, #1 - strne r0, [r1, #4] - moveq r0, #2 - streq r0, [r1, #4] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_022E8BA0: .word TOP_SCREEN_STATUS_PTR -_022E8BA4: .word ov29_022E84B0 -_022E8BA8: .word ov29_022E840C -_022E8BAC: .word ov29_022E847C -_022E8BB0: .word FreeTeamStatsWrapper -_022E8BB4: .word InitializeTeamStats -_022E8BB8: .word UpdateTeamStatsWrapper -_022E8BBC: .word ov29_022E81C8 -_022E8BC0: .word FreeDungeonControlsMenuWithBg -_022E8BC4: .word InitDungeonControlsMenuWithBg -_022E8BC8: .word ov29_022E854C -_022E8BCC: .word ov29_022E80D0 -_022E8BD0: .word ov29_022E7F94 -_022E8BD4: .word ov29_022E8018 -_022E8BD8: .word ov29_022E8054 -_022E8BDC: .word ov29_022E8630 -_022E8BE0: .word ov29_022E85A8 -_022E8BE4: .word ov29_022E85F4 -_022E8BE8: .word ov29_022E86A8 -_022E8BEC: .word ov29_022E8650 -_022E8BF0: .word ov29_022E869C -_022E8BF4: .word ov29_022E86A4 -_022E8BF8: .word ov29_0235352C - arm_func_end HandleTopScreenFades - - arm_func_start ov29_022E8BFC -ov29_022E8BFC: ; 0x022E8BFC - ldr r1, _022E8C0C ; =TOP_SCREEN_STATUS_PTR - ldr r1, [r1] - strb r0, [r1, #1] - bx lr - .align 2, 0 -_022E8C0C: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E8BFC - - arm_func_start ov29_022E8C10 -ov29_022E8C10: ; 0x022E8C10 - stmdb sp!, {r3, lr} - ldr r0, _022E8C48 ; =TOP_SCREEN_STATUS_PTR - ldr r2, [r0] - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldrb r0, [r2, #0x2a] - cmp r0, #0 - ldmneia sp!, {r3, pc} - ldr r1, [r2, #0x1c] - cmp r1, #0 - ldmeqia sp!, {r3, pc} - add r0, r2, #0x14 - blx r1 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E8C48: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E8C10 - - arm_func_start FreeTopScreen -FreeTopScreen: ; 0x022E8C4C - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _022E8CA4 ; =TOP_SCREEN_STATUS_PTR - ldr r4, [r0] - ldr r0, [r4, #0x20] - cmp r0, #0 - beq _022E8C98 - mov r0, #0 - str r0, [r4, #0x1c] - ldr r0, [r4, #0x20] - blx r0 - movs r5, r0 - beq _022E8C9C - mov r1, #0 - mov r2, r1 - mov r3, r1 - add r0, r4, #0x14 - str r1, [sp] - bl AssignTopScreenHandlers - b _022E8C9C -_022E8C98: - mov r5, #1 -_022E8C9C: - mov r0, r5 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_022E8CA4: .word TOP_SCREEN_STATUS_PTR - arm_func_end FreeTopScreen - - arm_func_start DungeonChangeTopScreenType -DungeonChangeTopScreenType: ; 0x022E8CA8 - ldr r1, _022E8CE4 ; =TOP_SCREEN_STATUS_PTR - ldr r3, [r1] - ldrsh r2, [r3, #8] - cmp r2, r0 - ldrne r2, [r3, #0xc] - cmpne r2, #1 - bxeq lr - mov r2, #1 - str r2, [r3, #0xc] - ldr r3, [r1] - mov r2, #0 - strh r0, [r3, #0x10] - ldr r0, [r1] - strb r2, [r0, #0x28] - bx lr - .align 2, 0 -_022E8CE4: .word TOP_SCREEN_STATUS_PTR - arm_func_end DungeonChangeTopScreenType - - arm_func_start ov29_022E8CE8 -ov29_022E8CE8: ; 0x022E8CE8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x54 - mov sb, #0 - ldr fp, _022E8E54 ; =0x000003E7 - mov r8, sb -_022E8CFC: - ldr r0, _022E8E58 ; =DUNGEON_PTR - ldr r1, [r0] - add r0, r1, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - cmp r0, #0 - moveq r0, #0 - beq _022E8D30 - ldr r0, [r0] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_022E8D30: - cmp r0, #0 - beq _022E8DE4 - add r0, r1, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r6, [r0, #0xa84] -#else - ldr r6, [r0, #0xb28] -#endif - ldr r0, _022E8E5C ; =TOP_SCREEN_STATUS_PTR - ldr r7, [r6, #0xb4] - ldr r0, [r0] - add r5, r0, #0xb8 - mov r0, #0x5c - smulbb r4, sb, r0 -#ifdef JAPAN - ldrb r0, [r7, #0x161] -#else - ldrb r0, [r7, #0x165] -#endif - cmp r0, #0 - bne _022E8DE4 - add r0, sp, #0x14 - mov r1, r7 - mov r2, #0 - bl ov29_0230027C - ldrsh r1, [r7, #0x12] - ldrsh r0, [r7, #0x16] - add sl, r1, r0 - cmp sl, fp - mov r0, r6 - movgt sl, fp - bl GetIdleAnimationId - ldrb r3, [r7, #0xa] - mov r1, sl, lsl #0x10 - mov r1, r1, asr #0x10 - str r3, [sp] - ldrsh r3, [r7, #0x10] - add r2, sp, #0x14 - str r3, [sp, #4] - str r1, [sp, #8] - ldrsh r1, [r6, #0xa8] - str r1, [sp, #0xc] - str r0, [sp, #0x10] - ldr r1, [r7, #0xb0] - ldrsh r3, [r7, #4] - mov r1, r1, lsl #0x10 - add r0, r5, r4 - mov r1, r1, asr #0x10 - bl ov10_022C1DE0 - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov sb, r0, asr #0x10 -_022E8DE4: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #4 - blt _022E8CFC - mov r0, #0x5c - smulbb r4, sb, r0 - mov r3, #0 - ldr r1, _022E8E5C ; =TOP_SCREEN_STATUS_PTR - b _022E8E24 -_022E8E0C: - ldr r2, [r1] - add r0, sb, #1 - add r2, r4, r2 - mov r0, r0, lsl #0x10 - strb r3, [r2, #0xb8] - mov sb, r0, asr #0x10 -_022E8E24: - cmp sb, #4 - blt _022E8E0C - ldr r0, _022E8E5C ; =TOP_SCREEN_STATUS_PTR - ldr r0, [r0] - add r0, r0, #0xb8 - bl ov29_022DC684 - ldr r0, _022E8E5C ; =TOP_SCREEN_STATUS_PTR - mov r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x228] - add sp, sp, #0x54 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022E8E54: .word 0x000003E7 -_022E8E58: .word DUNGEON_PTR -_022E8E5C: .word TOP_SCREEN_STATUS_PTR - arm_func_end ov29_022E8CE8 - - arm_func_start DrawDungeonControlsText -DrawDungeonControlsText: ; 0x022E8E60 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _022E8E90 ; =0x00003FCB - bl StringFromId - mov r1, #0 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - mov r0, r4 - bl UpdateWindow - ldmia sp!, {r4, pc} - .align 2, 0 -#if defined(EUROPE) -_022E8E90: .word 0x00003FCD -#elif defined(JAPAN) -_022E8E90: .word 0x000049CE -#else -_022E8E90: .word 0x00003FCB -#endif - arm_func_end DrawDungeonControlsText - - arm_func_start InitDungeonControlsMenu -InitDungeonControlsMenu: ; 0x022E8E94 - stmdb sp!, {r3, lr} - sub sp, sp, #0x10 - ldr r0, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR - ldr r0, [r0] - cmp r0, #0 - movne r0, #0 - bne _022E8F14 - mov r0, #0x54 - mov r1, #8 - bl MemAlloc - ldr r2, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR - mov r1, #0x54 - str r0, [r2] - bl MemZero - ldr r0, _022E8F20 ; =DUNGEON_CONTROLS_MENU_WINDOW_PARAMS - add ip, sp, #0 - ldmia r0, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - ldr r1, _022E8F24 ; =DrawDungeonControlsText - mov r0, ip - bl CreateTextBox - ldr r1, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR - ldr r2, [r1] - strb r0, [r2] - ldr r0, [r1] - add r0, r0, #4 - bl InitPreprocessorArgs - ldr r0, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR - mov r2, #0x10000 - ldr r1, [r0] - mov r0, #1 - str r2, [r1, #0x50] -_022E8F14: - add sp, sp, #0x10 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E8F1C: .word DUNGEON_CONTROLS_MENU_PTR -_022E8F20: .word DUNGEON_CONTROLS_MENU_WINDOW_PARAMS -_022E8F24: .word DrawDungeonControlsText - arm_func_end InitDungeonControlsMenu - - arm_func_start FreeDungeonControlsMenu -FreeDungeonControlsMenu: ; 0x022E8F28 - stmdb sp!, {r3, lr} - ldr r0, _022E8F74 ; =DUNGEON_CONTROLS_MENU_PTR - ldr r0, [r0] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - ldrsb r0, [r0] - bl CloseTextBox2 - ldr r0, _022E8F74 ; =DUNGEON_CONTROLS_MENU_PTR - mvn r2, #1 - ldr r1, [r0] - strb r2, [r1] - ldr r0, [r0] - bl MemFree - ldr r0, _022E8F74 ; =DUNGEON_CONTROLS_MENU_PTR - mov r1, #0 - str r1, [r0] - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E8F74: .word DUNGEON_CONTROLS_MENU_PTR - arm_func_end FreeDungeonControlsMenu - - arm_func_start ov29_022E8F78 -ov29_022E8F78: ; 0x022E8F78 - stmdb sp!, {r4, lr} - ldrb r1, [r0] - cmp r1, #0 - ldmeqia sp!, {r4, pc} - mov r1, #0 - strb r1, [r0] - ldr r1, _022E8FC4 ; =DUNGEON_CONTROLS_MENU_PTR - ldr r0, _022E8FC8 ; =0x00003FCB - ldr r1, [r1] - ldrsb r4, [r1] - bl StringFromId - mov r1, #0 - mov r3, r0 - mov r0, r4 - mov r2, r1 - bl DrawTextInWindow - mov r0, r4 - bl UpdateWindow - ldmia sp!, {r4, pc} - .align 2, 0 -_022E8FC4: .word DUNGEON_CONTROLS_MENU_PTR -#if defined(EUROPE) -_022E8FC8: .word 0x00003FCD -#elif defined(JAPAN) -_022E8FC8: .word 0x000049CE -#else -_022E8FC8: .word 0x00003FCB -#endif - arm_func_end ov29_022E8F78 - - arm_func_start ov29_022E8FCC -ov29_022E8FCC: ; 0x022E8FCC - stmdb sp!, {r3, lr} - ldr r0, _022E8FF4 ; =DUNGEON_PTR - ldr r1, [r0] - add r0, r1, #0x700 - ldrsb r0, [r0, #0x98] - ldrb r1, [r1, #0x748] - bl ov29_0234F25C - bl ov29_0234F278 - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E8FF4: .word DUNGEON_PTR - arm_func_end ov29_022E8FCC - - arm_func_start ov29_022E8FF8 -ov29_022E8FF8: ; 0x022E8FF8 - stmdb sp!, {r3, lr} - bl ov29_0234F2B8 - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E8FF8 - - arm_func_start ov29_022E9008 -ov29_022E9008: ; 0x022E9008 - ldr ip, _022E9010 ; =ov29_0234F290 - bx ip - .align 2, 0 -_022E9010: .word ov29_0234F290 - arm_func_end ov29_022E9008 - - arm_func_start ov29_022E9014 -ov29_022E9014: ; 0x022E9014 - ldrb r0, [r0] - cmp r0, #0 - bx lr - arm_func_end ov29_022E9014 diff --git a/asm/overlay_29_022E86A4.s b/asm/overlay_29_022E86A4.s new file mode 100644 index 00000000..bd16808d --- /dev/null +++ b/asm/overlay_29_022E86A4.s @@ -0,0 +1,795 @@ + .include "asm/macros.inc" + .include "overlay_29_022E86A4.inc" + + .text + + arm_func_start ov29_022E86A4 +ov29_022E86A4: ; 0x022E86A4 + bx lr + arm_func_end ov29_022E86A4 + + arm_func_start ov29_022E86A8 +ov29_022E86A8: ; 0x022E86A8 + stmdb sp!, {r3, lr} + ldr r0, _022E86C4 ; =TOP_SCREEN_STATUS_PTR + ldr r0, [r0] + add r0, r0, #0x80 + bl ov10_022C2278 + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E86C4: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E86A8 + + arm_func_start AssignTopScreenHandlers +AssignTopScreenHandlers: ; 0x022E86C8 + str r1, [r0] + ldr r1, [sp] + stmib r0, {r2, r3} + str r1, [r0, #0xc] + mov r1, #1 + strb r1, [r0, #0x10] + bx lr + arm_func_end AssignTopScreenHandlers + + arm_func_start ov29_022E86E4 +ov29_022E86E4: ; 0x022E86E4 + stmdb sp!, {r3, lr} + ldr r0, _022E8704 ; =TOP_SCREEN_STATUS_PTR + ldr r0, [r0] + ldr r0, [r0, #0x18] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + blx r0 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E8704: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E86E4 + + arm_func_start ov29_022E8708 +ov29_022E8708: ; 0x022E8708 + stmdb sp!, {r3, lr} + bl GetTopScreenOption + cmp r0, #3 + bne _022E8724 + mov r0, #3 + bl DungeonChangeTopScreenType + ldmia sp!, {r3, pc} +_022E8724: + cmp r0, #2 + bne _022E8738 + mov r0, #0 + bl DungeonChangeTopScreenType + ldmia sp!, {r3, pc} +_022E8738: + cmp r0, #0 + bne _022E874C + mov r0, #2 + bl DungeonChangeTopScreenType + ldmia sp!, {r3, pc} +_022E874C: + cmp r0, #4 + bne _022E8760 + mov r0, #4 + bl DungeonChangeTopScreenType + ldmia sp!, {r3, pc} +_022E8760: + bl ov29_022E81F8 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E8708 + + arm_func_start ov29_022E8768 +ov29_022E8768: ; 0x022E8768 + ldr ip, _022E8774 ; =DungeonChangeTopScreenType + mov r0, #5 + bx ip + .align 2, 0 +_022E8774: .word DungeonChangeTopScreenType + arm_func_end ov29_022E8768 + + arm_func_start ov29_022E8778 +ov29_022E8778: ; 0x022E8778 + stmdb sp!, {r3, lr} + ldr r0, _022E87B0 ; =TOP_SCREEN_STATUS_PTR + mov r3, #3 + ldr r2, [r0] + sub r1, r3, #4 + str r3, [r2, #0xc] + ldr r0, [r0] + strh r1, [r0, #0x10] + bl ov29_022E8104 + ldr r0, _022E87B0 ; =TOP_SCREEN_STATUS_PTR + ldr r1, [r0] + ldrsh r0, [r1, #0x10] + strh r0, [r1, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_022E87B0: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E8778 + + arm_func_start ov29_022E87B4 +ov29_022E87B4: ; 0x022E87B4 + ldr r1, _022E87D8 ; =TOP_SCREEN_STATUS_PTR + ldr r2, [r1] + ldrsh r1, [r2, #8] + cmp r1, r0 + ldreq r0, [r2, #4] + cmpeq r0, #5 + moveq r0, #1 + movne r0, #0 + bx lr + .align 2, 0 +_022E87D8: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E87B4 + + arm_func_start ov29_022E87DC +ov29_022E87DC: ; 0x022E87DC + stmdb sp!, {r3, lr} + bl GetTopScreenOption + ldr r1, _022E87F8 ; =ov29_023515E8 + mov r0, r0, lsl #1 + ldrsh r0, [r1, r0] + bl ov29_022E87B4 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E87F8: .word ov29_023515E8 + arm_func_end ov29_022E87DC + + arm_func_start ov29_022E87FC +ov29_022E87FC: ; 0x022E87FC + ldr r1, _022E880C ; =TOP_SCREEN_STATUS_PTR + ldr r1, [r1] + strb r0, [r1, #0x2b] + bx lr + .align 2, 0 +_022E880C: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E87FC + + arm_func_start ov29_022E8810 +ov29_022E8810: ; 0x022E8810 + ldr r0, _022E8830 ; =TOP_SCREEN_STATUS_PTR + ldr r0, [r0] + ldr r0, [r0, #4] + cmp r0, #1 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_022E8830: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E8810 + + arm_func_start ov29_022E8834 +ov29_022E8834: ; 0x022E8834 + ldr r1, _022E8844 ; =TOP_SCREEN_STATUS_PTR + ldr r1, [r1] + strb r0, [r1, #0x2c] + bx lr + .align 2, 0 +_022E8844: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E8834 + + arm_func_start ov29_022E8848 +ov29_022E8848: ; 0x022E8848 + ldr r0, _022E8868 ; =TOP_SCREEN_STATUS_PTR + ldr r0, [r0] + ldr r0, [r0, #4] + cmp r0, #3 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_022E8868: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E8848 + + arm_func_start HandleTopScreenFades +HandleTopScreenFades: ; 0x022E886C + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + ldr r5, [r0] + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r1, [r5, #4] + cmp r1, #6 + addls pc, pc, r1, lsl #2 + ldmia sp!, {r3, r4, r5, pc} +_022E8890: ; jump table + ldmia sp!, {r3, r4, r5, pc} ; case 0 + b _022E88AC ; case 1 + b _022E88C0 ; case 2 + b _022E8A80 ; case 3 + b _022E8AC8 ; case 4 + b _022E8B00 ; case 5 + b _022E8B5C ; case 6 +_022E88AC: + ldrb r0, [r5, #0x2b] + cmp r0, #0 + moveq r0, #2 + streq r0, [r5, #4] + ldmia sp!, {r3, r4, r5, pc} +_022E88C0: + ldrb r0, [r5, #2] + cmp r0, #0 + beq _022E88EC + mov r0, #1 + bl ov29_0234C70C + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + mov r1, #5 + ldr r0, [r0] + str r1, [r0, #4] +_022E88EC: + bl FreeTopScreen + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + ldr r4, [r0] + ldrsh r0, [r4, #0x10] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _022E89DC +_022E8908: ; jump table + b _022E8920 ; case 0 + b _022E8940 ; case 1 + b _022E8960 ; case 2 + b _022E8980 ; case 3 + b _022E89A0 ; case 4 + b _022E89C0 ; case 5 +_022E8920: + ldr ip, _022E8BA4 ; =ov29_022E84B0 + ldr r1, _022E8BA8 ; =ov29_022E840C + ldr r3, _022E8BAC ; =ov29_022E847C + add r0, r4, #0x14 + mov r2, #0 + str ip, [sp] + bl AssignTopScreenHandlers + b _022E89DC +_022E8940: + ldr ip, _022E8BB0 ; =FreeTeamStatsWrapper + ldr r1, _022E8BB4 ; =InitializeTeamStats + ldr r2, _022E8BB8 ; =UpdateTeamStatsWrapper + ldr r3, _022E8BBC ; =ov29_022E81C8 + add r0, r4, #0x14 + str ip, [sp] + bl AssignTopScreenHandlers + b _022E89DC +_022E8960: + ldr ip, _022E8BC0 ; =FreeDungeonControlsMenuWithBg + ldr r1, _022E8BC4 ; =InitDungeonControlsMenuWithBg + ldr r3, _022E8BC8 ; =ov29_022E854C + add r0, r4, #0x14 + mov r2, #0 + str ip, [sp] + bl AssignTopScreenHandlers + b _022E89DC +_022E8980: + ldr ip, _022E8BCC ; =ov29_022E80D0 + ldr r1, _022E8BD0 ; =ov29_022E7F94 + ldr r2, _022E8BD4 ; =ov29_022E8018 + ldr r3, _022E8BD8 ; =ov29_022E8054 + add r0, r4, #0x14 + str ip, [sp] + bl AssignTopScreenHandlers + b _022E89DC +_022E89A0: + ldr ip, _022E8BDC ; =ov29_022E8630 + ldr r1, _022E8BE0 ; =ov29_022E85A8 + ldr r3, _022E8BE4 ; =ov29_022E85F4 + add r0, r4, #0x14 + mov r2, #0 + str ip, [sp] + bl AssignTopScreenHandlers + b _022E89DC +_022E89C0: + ldr ip, _022E8BE8 ; =ov29_022E86A8 + ldr r1, _022E8BEC ; =ov29_022E8650 + ldr r2, _022E8BF0 ; =ov29_022E869C + ldr r3, _022E8BF4 ; =ov29_022E86A4 + add r0, r4, #0x14 + str ip, [sp] + bl AssignTopScreenHandlers +_022E89DC: + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + ldrsh r1, [r4, #0x10] + ldr r0, [r0] + strh r1, [r0, #8] + ldr r0, [r4, #0x14] + cmp r0, #0 + beq _022E8A20 + ldr r0, _022E8BF8 ; =ov29_0235352C + ldr r0, [r0] + ldr r0, [r0, #0x30] + bl sub_0200B3D4 + ldr r0, _022E8BF8 ; =ov29_0235352C + ldr r0, [r0] + ldr r0, [r0, #0x30] + bl sub_0200B330 + ldr r0, [r4, #0x14] + blx r0 +_022E8A20: + mov r1, #0 + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + str r1, [r5, #0xc] + ldr r2, [r0] + ldrb r1, [r2, #0x2c] + cmp r1, #0 + movne r0, #3 + strne r0, [r2, #4] + ldmneia sp!, {r3, r4, r5, pc} + mov r1, #5 + str r1, [r2, #4] + ldr r0, [r0] + ldrb r0, [r0, #2] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #1 + mov r2, r0 + mov r1, #0x4000 + bl StartFadeDungeonWrapper + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + mov r1, #4 + ldr r0, [r0] + str r1, [r0, #4] + ldmia sp!, {r3, r4, r5, pc} +_022E8A80: + ldrb r1, [r5, #0x2c] + cmp r1, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r1, #5 + str r1, [r5, #4] + ldr r0, [r0] + ldrb r0, [r0, #2] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #1 + mov r2, r0 + mov r1, #0x4000 + bl StartFadeDungeonWrapper + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + mov r1, #4 + ldr r0, [r0] + str r1, [r0, #4] + ldmia sp!, {r3, r4, r5, pc} +_022E8AC8: + bl ov29_022E86E4 + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + ldr r0, [r0] + ldrb r0, [r0, #2] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #1 + bl ov29_0234C70C + cmp r0, #0 + ldreq r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + moveq r1, #5 + ldreq r0, [r0] + streq r1, [r0, #4] + ldmia sp!, {r3, r4, r5, pc} +_022E8B00: + bl ov29_022E86E4 + ldr r0, [r5, #0xc] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + ldr r2, [r0] + ldrb r1, [r2, #1] + strb r1, [r2, #2] + ldr r1, [r0] + ldrb r0, [r1, #2] + cmp r0, #0 + moveq r0, #6 + streq r0, [r1, #4] + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #2 + mov r1, #0x4000 + mov r2, #1 + bl StartFadeDungeonWrapper + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + mov r1, #6 + ldr r0, [r0] + str r1, [r0, #4] + ldmia sp!, {r3, r4, r5, pc} +_022E8B5C: + ldrb r0, [r5, #2] + cmp r0, #0 + beq _022E8B78 + mov r0, #1 + bl ov29_0234C70C + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} +_022E8B78: + bl FreeTopScreen + ldr r0, _022E8BA0 ; =TOP_SCREEN_STATUS_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x2b] + cmp r0, #0 + movne r0, #1 + strne r0, [r1, #4] + moveq r0, #2 + streq r0, [r1, #4] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_022E8BA0: .word TOP_SCREEN_STATUS_PTR +_022E8BA4: .word ov29_022E84B0 +_022E8BA8: .word ov29_022E840C +_022E8BAC: .word ov29_022E847C +_022E8BB0: .word FreeTeamStatsWrapper +_022E8BB4: .word InitializeTeamStats +_022E8BB8: .word UpdateTeamStatsWrapper +_022E8BBC: .word ov29_022E81C8 +_022E8BC0: .word FreeDungeonControlsMenuWithBg +_022E8BC4: .word InitDungeonControlsMenuWithBg +_022E8BC8: .word ov29_022E854C +_022E8BCC: .word ov29_022E80D0 +_022E8BD0: .word ov29_022E7F94 +_022E8BD4: .word ov29_022E8018 +_022E8BD8: .word ov29_022E8054 +_022E8BDC: .word ov29_022E8630 +_022E8BE0: .word ov29_022E85A8 +_022E8BE4: .word ov29_022E85F4 +_022E8BE8: .word ov29_022E86A8 +_022E8BEC: .word ov29_022E8650 +_022E8BF0: .word ov29_022E869C +_022E8BF4: .word ov29_022E86A4 +_022E8BF8: .word ov29_0235352C + arm_func_end HandleTopScreenFades + + arm_func_start ov29_022E8BFC +ov29_022E8BFC: ; 0x022E8BFC + ldr r1, _022E8C0C ; =TOP_SCREEN_STATUS_PTR + ldr r1, [r1] + strb r0, [r1, #1] + bx lr + .align 2, 0 +_022E8C0C: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E8BFC + + arm_func_start ov29_022E8C10 +ov29_022E8C10: ; 0x022E8C10 + stmdb sp!, {r3, lr} + ldr r0, _022E8C48 ; =TOP_SCREEN_STATUS_PTR + ldr r2, [r0] + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldrb r0, [r2, #0x2a] + cmp r0, #0 + ldmneia sp!, {r3, pc} + ldr r1, [r2, #0x1c] + cmp r1, #0 + ldmeqia sp!, {r3, pc} + add r0, r2, #0x14 + blx r1 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E8C48: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E8C10 + + arm_func_start FreeTopScreen +FreeTopScreen: ; 0x022E8C4C + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _022E8CA4 ; =TOP_SCREEN_STATUS_PTR + ldr r4, [r0] + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _022E8C98 + mov r0, #0 + str r0, [r4, #0x1c] + ldr r0, [r4, #0x20] + blx r0 + movs r5, r0 + beq _022E8C9C + mov r1, #0 + mov r2, r1 + mov r3, r1 + add r0, r4, #0x14 + str r1, [sp] + bl AssignTopScreenHandlers + b _022E8C9C +_022E8C98: + mov r5, #1 +_022E8C9C: + mov r0, r5 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_022E8CA4: .word TOP_SCREEN_STATUS_PTR + arm_func_end FreeTopScreen + + arm_func_start DungeonChangeTopScreenType +DungeonChangeTopScreenType: ; 0x022E8CA8 + ldr r1, _022E8CE4 ; =TOP_SCREEN_STATUS_PTR + ldr r3, [r1] + ldrsh r2, [r3, #8] + cmp r2, r0 + ldrne r2, [r3, #0xc] + cmpne r2, #1 + bxeq lr + mov r2, #1 + str r2, [r3, #0xc] + ldr r3, [r1] + mov r2, #0 + strh r0, [r3, #0x10] + ldr r0, [r1] + strb r2, [r0, #0x28] + bx lr + .align 2, 0 +_022E8CE4: .word TOP_SCREEN_STATUS_PTR + arm_func_end DungeonChangeTopScreenType + + arm_func_start ov29_022E8CE8 +ov29_022E8CE8: ; 0x022E8CE8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x54 + mov sb, #0 + ldr fp, _022E8E54 ; =0x000003E7 + mov r8, sb +_022E8CFC: + ldr r0, _022E8E58 ; =DUNGEON_PTR + ldr r1, [r0] + add r0, r1, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + cmp r0, #0 + moveq r0, #0 + beq _022E8D30 + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_022E8D30: + cmp r0, #0 + beq _022E8DE4 + add r0, r1, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r6, [r0, #0xa84] +#else + ldr r6, [r0, #0xb28] +#endif + ldr r0, _022E8E5C ; =TOP_SCREEN_STATUS_PTR + ldr r7, [r6, #0xb4] + ldr r0, [r0] + add r5, r0, #0xb8 + mov r0, #0x5c + smulbb r4, sb, r0 +#ifdef JAPAN + ldrb r0, [r7, #0x161] +#else + ldrb r0, [r7, #0x165] +#endif + cmp r0, #0 + bne _022E8DE4 + add r0, sp, #0x14 + mov r1, r7 + mov r2, #0 + bl ov29_0230027C + ldrsh r1, [r7, #0x12] + ldrsh r0, [r7, #0x16] + add sl, r1, r0 + cmp sl, fp + mov r0, r6 + movgt sl, fp + bl GetIdleAnimationId + ldrb r3, [r7, #0xa] + mov r1, sl, lsl #0x10 + mov r1, r1, asr #0x10 + str r3, [sp] + ldrsh r3, [r7, #0x10] + add r2, sp, #0x14 + str r3, [sp, #4] + str r1, [sp, #8] + ldrsh r1, [r6, #0xa8] + str r1, [sp, #0xc] + str r0, [sp, #0x10] + ldr r1, [r7, #0xb0] + ldrsh r3, [r7, #4] + mov r1, r1, lsl #0x10 + add r0, r5, r4 + mov r1, r1, asr #0x10 + bl ov10_022C1DE0 + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, asr #0x10 +_022E8DE4: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #4 + blt _022E8CFC + mov r0, #0x5c + smulbb r4, sb, r0 + mov r3, #0 + ldr r1, _022E8E5C ; =TOP_SCREEN_STATUS_PTR + b _022E8E24 +_022E8E0C: + ldr r2, [r1] + add r0, sb, #1 + add r2, r4, r2 + mov r0, r0, lsl #0x10 + strb r3, [r2, #0xb8] + mov sb, r0, asr #0x10 +_022E8E24: + cmp sb, #4 + blt _022E8E0C + ldr r0, _022E8E5C ; =TOP_SCREEN_STATUS_PTR + ldr r0, [r0] + add r0, r0, #0xb8 + bl ov29_022DC684 + ldr r0, _022E8E5C ; =TOP_SCREEN_STATUS_PTR + mov r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x228] + add sp, sp, #0x54 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022E8E54: .word 0x000003E7 +_022E8E58: .word DUNGEON_PTR +_022E8E5C: .word TOP_SCREEN_STATUS_PTR + arm_func_end ov29_022E8CE8 + + arm_func_start DrawDungeonControlsText +DrawDungeonControlsText: ; 0x022E8E60 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _022E8E90 ; =0x00003FCB + bl StringFromId + mov r1, #0 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + mov r0, r4 + bl UpdateWindow + ldmia sp!, {r4, pc} + .align 2, 0 +#if defined(EUROPE) +_022E8E90: .word 0x00003FCD +#elif defined(JAPAN) +_022E8E90: .word 0x000049CE +#else +_022E8E90: .word 0x00003FCB +#endif + arm_func_end DrawDungeonControlsText + + arm_func_start InitDungeonControlsMenu +InitDungeonControlsMenu: ; 0x022E8E94 + stmdb sp!, {r3, lr} + sub sp, sp, #0x10 + ldr r0, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR + ldr r0, [r0] + cmp r0, #0 + movne r0, #0 + bne _022E8F14 + mov r0, #0x54 + mov r1, #8 + bl MemAlloc + ldr r2, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR + mov r1, #0x54 + str r0, [r2] + bl MemZero + ldr r0, _022E8F20 ; =DUNGEON_CONTROLS_MENU_WINDOW_PARAMS + add ip, sp, #0 + ldmia r0, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + ldr r1, _022E8F24 ; =DrawDungeonControlsText + mov r0, ip + bl CreateTextBox + ldr r1, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR + ldr r2, [r1] + strb r0, [r2] + ldr r0, [r1] + add r0, r0, #4 + bl InitPreprocessorArgs + ldr r0, _022E8F1C ; =DUNGEON_CONTROLS_MENU_PTR + mov r2, #0x10000 + ldr r1, [r0] + mov r0, #1 + str r2, [r1, #0x50] +_022E8F14: + add sp, sp, #0x10 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E8F1C: .word DUNGEON_CONTROLS_MENU_PTR +_022E8F20: .word DUNGEON_CONTROLS_MENU_WINDOW_PARAMS +_022E8F24: .word DrawDungeonControlsText + arm_func_end InitDungeonControlsMenu + + arm_func_start FreeDungeonControlsMenu +FreeDungeonControlsMenu: ; 0x022E8F28 + stmdb sp!, {r3, lr} + ldr r0, _022E8F74 ; =DUNGEON_CONTROLS_MENU_PTR + ldr r0, [r0] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + ldrsb r0, [r0] + bl CloseTextBox2 + ldr r0, _022E8F74 ; =DUNGEON_CONTROLS_MENU_PTR + mvn r2, #1 + ldr r1, [r0] + strb r2, [r1] + ldr r0, [r0] + bl MemFree + ldr r0, _022E8F74 ; =DUNGEON_CONTROLS_MENU_PTR + mov r1, #0 + str r1, [r0] + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E8F74: .word DUNGEON_CONTROLS_MENU_PTR + arm_func_end FreeDungeonControlsMenu + + arm_func_start ov29_022E8F78 +ov29_022E8F78: ; 0x022E8F78 + stmdb sp!, {r4, lr} + ldrb r1, [r0] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + mov r1, #0 + strb r1, [r0] + ldr r1, _022E8FC4 ; =DUNGEON_CONTROLS_MENU_PTR + ldr r0, _022E8FC8 ; =0x00003FCB + ldr r1, [r1] + ldrsb r4, [r1] + bl StringFromId + mov r1, #0 + mov r3, r0 + mov r0, r4 + mov r2, r1 + bl DrawTextInWindow + mov r0, r4 + bl UpdateWindow + ldmia sp!, {r4, pc} + .align 2, 0 +_022E8FC4: .word DUNGEON_CONTROLS_MENU_PTR +#if defined(EUROPE) +_022E8FC8: .word 0x00003FCD +#elif defined(JAPAN) +_022E8FC8: .word 0x000049CE +#else +_022E8FC8: .word 0x00003FCB +#endif + arm_func_end ov29_022E8F78 + + arm_func_start ov29_022E8FCC +ov29_022E8FCC: ; 0x022E8FCC + stmdb sp!, {r3, lr} + ldr r0, _022E8FF4 ; =DUNGEON_PTR + ldr r1, [r0] + add r0, r1, #0x700 + ldrsb r0, [r0, #0x98] + ldrb r1, [r1, #0x748] + bl ov29_0234F25C + bl ov29_0234F278 + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E8FF4: .word DUNGEON_PTR + arm_func_end ov29_022E8FCC + + arm_func_start ov29_022E8FF8 +ov29_022E8FF8: ; 0x022E8FF8 + stmdb sp!, {r3, lr} + bl ov29_0234F2B8 + mov r0, #1 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E8FF8 + + arm_func_start ov29_022E9008 +ov29_022E9008: ; 0x022E9008 + ldr ip, _022E9010 ; =ov29_0234F290 + bx ip + .align 2, 0 +_022E9010: .word ov29_0234F290 + arm_func_end ov29_022E9008 + + arm_func_start ov29_022E9014 +ov29_022E9014: ; 0x022E9014 + ldrb r0, [r0] + cmp r0, #0 + bx lr + arm_func_end ov29_022E9014 diff --git a/asm/overlay_29_022F52B0.s b/asm/overlay_29_022F52B0.s index 5d027f27..46e11c0e 100644 --- a/asm/overlay_29_022F52B0.s +++ b/asm/overlay_29_022F52B0.s @@ -10,534 +10,3 @@ ov29_022F52B0: ; 0x022F52B0 .align 2, 0 _022F52B8: .word ov29_02343D30 arm_func_end ov29_022F52B0 - - arm_func_start UseSingleUseItemSelf -UseSingleUseItemSelf: ; 0x022F52BC - ldr ip, _022F52C8 ; =UseSingleUseItem - mov r1, r0 - bx ip - .align 2, 0 -_022F52C8: .word UseSingleUseItem - arm_func_end UseSingleUseItemSelf - - arm_func_start UseSingleUseItemWrapper -UseSingleUseItemWrapper: ; 0x022F52CC - ldr r2, [r0, #0xb4] - ldr r1, _022F52F0 ; =DUNGEON_PTR - ldrb r2, [r2, #0x54] - ldr r1, [r1] - ldr ip, _022F52F4 ; =UseSingleUseItem - add r1, r1, r2, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - bx ip - .align 2, 0 -_022F52F0: .word DUNGEON_PTR -_022F52F4: .word UseSingleUseItem - arm_func_end UseSingleUseItemWrapper - - arm_func_start UseSingleUseItem -UseSingleUseItem: ; 0x022F52F8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x10 - mov r8, r1 - mov sb, r0 - mov r0, r8 - ldr r5, [r8, #0xb4] - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _022F5334 - mov r0, r8 - bl LogItemBlockedByEmbargo - mov r0, #0x14 - mov r1, #9 - bl ov29_022EA370 - b _022F54B0 -_022F5334: - mov r0, sb - bl ov29_022F3B8C - mov r0, sb - mov r1, #0 - mov r2, #8 - bl GetItemToUse - mov r4, r0 - mov r1, r4 - mov r0, #0 - bl PrepareItemForPrinting__02345728 - bl GetMessageLogPreprocessorArgs - mov r2, r5 - mov r1, #0 - str r1, [sp] - mov r3, r1 - bl SetPreprocessorArgsStringToName - mov r0, r8 - mov r1, r4 - bl CanMonsterUseItem - cmp r0, #0 - beq _022F54B0 - mov r0, r4 - bl ov29_022EB378 - mov r1, r0 - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser - ldrh r2, [r4] - mov r0, sb - mov r1, #0 - strh r2, [sp, #8] - ldrh r3, [r4, #2] - mov r2, #0x66 - strh r3, [sp, #0xa] - ldrh r3, [r4, #4] - strh r3, [sp, #0xc] - bl RemoveUsedItem - mov r0, #0x1e - mov r1, #0x11 - bl ov29_022EA370 - mov r0, #0 - str r8, [sp] - add r1, sp, #8 - str r1, [sp, #4] - mov r1, r0 - mov r2, r0 - mov r3, r8 - bl ApplyItemEffect - mov r0, r8 - bl EntityIsValid__022F528C - cmp r0, #0 - ldrne r0, [r8, #0xb4] - ldrneb r0, [r0, #7] - cmpne r0, #0 - beq _022F5498 - mov r0, r8 - mov r1, #0x33 - bl IqSkillIsEnabled - cmp r0, #0 - beq _022F5498 - ldrsh r0, [sp, #0xc] - bl ov29_02347000 - cmp r0, #0 - beq _022F5498 - mov r7, #0 - ldr r4, _022F54B8 ; =DUNGEON_PTR - add r6, sp, #8 - mov r5, r7 -_022F5440: - ldr r0, [r4] - add r0, r0, r7, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sl, [r0, #0xa84] -#else - ldr sl, [r0, #0xb28] -#endif - cmp sl, r8 - beq _022F5484 - mov r0, sl - bl EntityIsValid__022F528C - cmp r0, #0 - beq _022F5484 - str sl, [sp] - mov r0, r5 - mov r1, r5 - mov r2, r5 - mov r3, r8 - str r6, [sp, #4] - bl ApplyItemEffect -_022F5484: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #4 - blt _022F5440 -_022F5498: - ldr r1, _022F54B8 ; =DUNGEON_PTR - mov r0, sb - ldr r1, [r1] - add r1, r1, #0x4000 -#ifdef JAPAN - ldrb r1, [r1, #0x20] -#else - ldrb r1, [r1, #0xc4] -#endif - bl TryTriggerMonsterHouse -_022F54B0: - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_022F54B8: .word DUNGEON_PTR - arm_func_end UseSingleUseItem - - arm_func_start UseThrowableItem -UseThrowableItem: ; 0x022F54BC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x14 - mov sb, r0 - ldr r8, [sb, #0xb4] - bl ov29_022F3B8C - mov r0, sb - mov r1, #0 - mov r2, #9 - bl GetItemToUse - mov r4, r0 - mov r0, sb - bl MonsterHasEmbargoStatus - cmp r0, #0 - beq _022F550C - mov r0, sb - bl LogItemBlockedByEmbargo - mov r0, #0x14 - mov r1, #9 - bl ov29_022EA370 - b _022F5978 -_022F550C: - ldrb r0, [r8, #0x4e] - cmp r0, #0x81 - bne _022F5558 - ldrb r0, [r4] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _022F5558 - mov r1, r4 - mov r0, #0 - bl PrepareItemForPrinting__02345728 - ldr r1, _022F5980 ; =0x00000BAE - mov r0, sb - bl LogMessageByIdWithPopupCheckUser - mov r0, #0x14 - mov r1, #0x4c - bl ov29_022EA370 - b _022F5978 -_022F5558: - ldrsh r0, [r4, #4] - bl GetItemCategoryVeneer - cmp r0, #0 - beq _022F5578 - ldrsh r0, [r4, #4] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _022F55B8 -_022F5578: - ldrb r0, [r4] - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _022F55B8 - mov r1, r4 - mov r0, #0 - bl PrepareItemForPrinting__02345728 - ldr r1, _022F5980 ; =0x00000BAE - mov r0, sb - bl LogMessageByIdWithPopupCheckUser - mov r0, #0x14 - mov r1, #0x4c - bl ov29_022EA370 - b _022F5978 -_022F55B8: - mov r0, sb - mov r1, #1 - bl ShouldMonsterRunAwayAndShowEffect - cmp r0, #0 - beq _022F55E8 - ldr r1, _022F5984 ; =0x00000BBE - mov r0, sb - bl LogMessageByIdWithPopupCheckUser - mov r0, #0x14 - mov r1, #0x4c - bl ov29_022EA370 - b _022F5978 -_022F55E8: - ldrh r0, [r4] - mov r2, #0 - add r1, sp, #0xc - strh r0, [sp, #0xc] - ldrh r5, [r4, #2] - ldrb r3, [sp, #0xc] - mov r0, sb - strh r5, [sp, #0xe] - ldrh r5, [r4, #4] - bic r3, r3, #0x10 - strh r5, [sp, #0x10] - strb r3, [sp, #0xc] - strb r2, [sp, #0xd] - bl ov29_0230F9A4 - ldrb r0, [r8, #0x4e] - cmp r0, #0x80 - bne _022F563C - add r0, r8, #0x50 - mov r1, #1 - mov r4, #0 - bl RemoveGroundItem -_022F563C: - ldrsh r0, [sp, #0x10] - mov r5, #1 - bl GetItemCategoryVeneer - cmp r0, #0 - beq _022F5660 - ldrsh r0, [sp, #0x10] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _022F566C -_022F5660: - ldrh r0, [sp, #0xe] - cmp r0, #1 - movhi r5, #0 -_022F566C: - cmp r5, #0 - ldrb r0, [r8, #0x4e] - beq _022F56A8 - cmp r0, #0x80 - beq _022F56F4 - mov r0, r4 - bl ov29_02346FB8 - cmp r0, #0 - blt _022F5698 - mov r0, r4 - bl RemoveEquivItemNoHole -_022F5698: - mov r0, r4 - bl ItemZInit - bl RemoveEmptyItemsInBagWrapper - b _022F56F4 -_022F56A8: - cmp r0, #0x80 - bne _022F56D0 - ldrh r2, [sp, #0xe] - add r1, sp, #0xc - add r0, r8, #0x50 - sub r3, r2, #1 - mov r2, #1 - strh r3, [sp, #0xe] - bl SpawnItem - b _022F56F4 -_022F56D0: - mov r0, r4 - bl ov29_02346FB8 - cmp r0, #0 - blt _022F56E8 - mov r0, r4 - bl DecrementStackItem -_022F56E8: - ldrh r0, [r4, #2] - sub r0, r0, #1 - strh r0, [r4, #2] -_022F56F4: - mov r0, sb - mov r1, #0x30 - bl ItemIsActive__022F5994 - cmp r0, #0 - beq _022F5714 - mov r0, #8 - bl DungeonRandInt - strb r0, [r8, #0x4c] -_022F5714: - mov r0, sb - bl ShouldDisplayEntityWrapper - cmp r0, #0 - beq _022F577C - ldr r1, _022F5988 ; =0x00000103 - mov r0, sb - ldrb r7, [r8, #0x4c] - bl PlaySeByIdIfShouldDisplayEntity - mov r6, #0 - mov r5, r6 - mov r4, #2 - mov sl, #0x15 -_022F5744: - sub r0, r7, #1 - and r7, r0, #7 - mov r0, sb - mov r1, r5 - mov r2, r7 - bl ChangeMonsterAnimation - mov r0, r4 - mov r1, sl - bl ov29_022EA370 - add r6, r6, #1 - cmp r6, #8 - blt _022F5744 - mov r0, #4 -#ifdef JAPAN - strb r0, [r8, #0x175] -#else - strb r0, [r8, #0x179] -#endif -_022F577C: - ldrsh r0, [sp, #0x10] - bl GetItemCategoryVeneer - cmp r0, #0 - beq _022F579C - ldrsh r0, [sp, #0x10] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _022F57A4 -_022F579C: - mov r0, #1 - strh r0, [sp, #0xe] -_022F57A4: - add r1, sp, #0xc - mov r0, #0 - bl PrepareItemForPrinting__02345754 - bl GetMessageLogPreprocessorArgs - mov r1, #0 - mov r2, r8 - mov r3, r1 - str r1, [sp] - bl SetPreprocessorArgsStringToName - ldrsh r0, [sp, #0x10] - bl GetItemCategoryVeneer - cmp r0, #0 - bne _022F57E8 -#ifdef JAPAN - ldr r1, _022F6F84 ; =0x000008FF - mov r0, sb -#else - mov r0, sb - mov r1, #0xbc0 -#endif - bl LogMessageByIdWithPopupCheckUser - b _022F57F4 -_022F57E8: - ldr r1, _022F598C ; =0x00000BBF - mov r0, sb - bl LogMessageByIdWithPopupCheckUser -_022F57F4: - ldrsh r0, [sp, #0x10] - bl GetItemCategoryVeneer - mov r1, r0 - mov r0, sb - bl ov29_022E5728 - mov r0, sb - mov r1, #0x2e - bl ItemIsActive__022F5994 - cmp r0, #0 - movne r0, #1 - strneb r0, [sp, #9] - moveq r0, #0 - streqb r0, [sp, #9] - ldrb r0, [r8, #0xee] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _022F5880 -_022F5838: ; jump table - b _022F5848 ; case 0 - b _022F585C ; case 1 - b _022F5870 ; case 2 - b _022F5880 ; case 3 -_022F5848: - mov r1, #0 - mov r0, #0xa - strb r1, [sp, #8] - strh r0, [sp, #0xa] - b _022F5880 -_022F585C: - mov r1, #0 - mov r0, #0x63 - strb r1, [sp, #8] - strh r0, [sp, #0xa] - b _022F5880 -_022F5870: - mov r1, #1 - mov r0, #0x63 - strb r1, [sp, #8] - strh r0, [sp, #0xa] -_022F5880: - ldr r1, [sb, #0xb4] - ldrb r0, [r1, #6] - cmp r0, #0 - movne r0, #0 - bne _022F58A0 -#ifdef JAPAN - add r0, r1, #0x224 -#else - add r0, r1, #0x228 -#endif - mov r1, #0x24 - bl ExclusiveItemEffectFlagTest -_022F58A0: - cmp r0, #0 - movne r1, #0 - movne r0, #0x63 - strneb r1, [sp, #8] - strneh r0, [sp, #0xa] - mov r0, sb - mov r1, #0x16 - bl ItemIsActive__022F5994 - cmp r0, #0 - bne _022F58DC - mov r0, sb - mov r1, #0x42 - bl IqSkillIsEnabled - cmp r0, #0 - beq _022F58EC -_022F58DC: - mov r1, #1 - mov r0, #0x63 - strb r1, [sp, #8] - strh r0, [sp, #0xa] -_022F58EC: - ldrsh r0, [sp, #0x10] - bl GetItemCategoryVeneer - cmp r0, #1 - bne _022F5928 - add r0, sp, #4 - mov r1, sb - bl ov29_022E9A9C - add r4, sp, #8 - add r1, sp, #0xc - add r3, sp, #4 - mov r0, sb - add r2, sb, #4 - str r4, [sp] - bl HandleCurvedProjectileThrow - b _022F5944 -_022F5928: - add r0, sp, #8 - str r0, [sp] - ldrb r3, [r8, #0x4c] - add r1, sp, #0xc - mov r0, sb - add r2, sb, #4 - bl HandleRegularProjectileThrow -_022F5944: - mov r0, sb - bl EntityIsValid__022F528C - cmp r0, #0 - beq _022F5978 - ldrb r1, [r8, #0x4c] - mov r0, sb - bl ChangeMonsterAnimationToIdle - ldr r1, _022F5990 ; =DUNGEON_PTR - mov r0, sb - ldr r1, [r1] - add r1, r1, #0x4000 -#ifdef JAPAN - ldrb r1, [r1, #0x20] -#else - ldrb r1, [r1, #0xc4] -#endif - bl TryTriggerMonsterHouse -_022F5978: - add sp, sp, #0x14 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -#ifdef JAPAN -#define USE_THROWABLE_ITEM_OFFSET -0x2C1 -#else -#define USE_THROWABLE_ITEM_OFFSET 0 -#endif -_022F5980: .word 0x00000BAE + USE_THROWABLE_ITEM_OFFSET -_022F5984: .word 0x00000BBE + USE_THROWABLE_ITEM_OFFSET -_022F5988: .word 0x00000103 -#ifdef JAPAN -_022F6F84: .word 0x000008FF -#endif -_022F598C: .word 0x00000BBF + USE_THROWABLE_ITEM_OFFSET -_022F5990: .word DUNGEON_PTR - arm_func_end UseThrowableItem diff --git a/asm/overlay_29_022F52CC.s b/asm/overlay_29_022F52CC.s new file mode 100644 index 00000000..296b4f27 --- /dev/null +++ b/asm/overlay_29_022F52CC.s @@ -0,0 +1,526 @@ + .include "asm/macros.inc" + .include "overlay_29_022F52CC.inc" + + .text + + arm_func_start UseSingleUseItemWrapper +UseSingleUseItemWrapper: ; 0x022F52CC + ldr r2, [r0, #0xb4] + ldr r1, _022F52F0 ; =DUNGEON_PTR + ldrb r2, [r2, #0x54] + ldr r1, [r1] + ldr ip, _022F52F4 ; =UseSingleUseItem + add r1, r1, r2, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa84] +#else + ldr r1, [r1, #0xb28] +#endif + bx ip + .align 2, 0 +_022F52F0: .word DUNGEON_PTR +_022F52F4: .word UseSingleUseItem + arm_func_end UseSingleUseItemWrapper + + arm_func_start UseSingleUseItem +UseSingleUseItem: ; 0x022F52F8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x10 + mov r8, r1 + mov sb, r0 + mov r0, r8 + ldr r5, [r8, #0xb4] + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _022F5334 + mov r0, r8 + bl LogItemBlockedByEmbargo + mov r0, #0x14 + mov r1, #9 + bl ov29_022EA370 + b _022F54B0 +_022F5334: + mov r0, sb + bl ov29_022F3B8C + mov r0, sb + mov r1, #0 + mov r2, #8 + bl GetItemToUse + mov r4, r0 + mov r1, r4 + mov r0, #0 + bl PrepareItemForPrinting__02345728 + bl GetMessageLogPreprocessorArgs + mov r2, r5 + mov r1, #0 + str r1, [sp] + mov r3, r1 + bl SetPreprocessorArgsStringToName + mov r0, r8 + mov r1, r4 + bl CanMonsterUseItem + cmp r0, #0 + beq _022F54B0 + mov r0, r4 + bl ov29_022EB378 + mov r1, r0 + mov r0, r8 + bl LogMessageByIdWithPopupCheckUser + ldrh r2, [r4] + mov r0, sb + mov r1, #0 + strh r2, [sp, #8] + ldrh r3, [r4, #2] + mov r2, #0x66 + strh r3, [sp, #0xa] + ldrh r3, [r4, #4] + strh r3, [sp, #0xc] + bl RemoveUsedItem + mov r0, #0x1e + mov r1, #0x11 + bl ov29_022EA370 + mov r0, #0 + str r8, [sp] + add r1, sp, #8 + str r1, [sp, #4] + mov r1, r0 + mov r2, r0 + mov r3, r8 + bl ApplyItemEffect + mov r0, r8 + bl EntityIsValid__022F528C + cmp r0, #0 + ldrne r0, [r8, #0xb4] + ldrneb r0, [r0, #7] + cmpne r0, #0 + beq _022F5498 + mov r0, r8 + mov r1, #0x33 + bl IqSkillIsEnabled + cmp r0, #0 + beq _022F5498 + ldrsh r0, [sp, #0xc] + bl ov29_02347000 + cmp r0, #0 + beq _022F5498 + mov r7, #0 + ldr r4, _022F54B8 ; =DUNGEON_PTR + add r6, sp, #8 + mov r5, r7 +_022F5440: + ldr r0, [r4] + add r0, r0, r7, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sl, [r0, #0xa84] +#else + ldr sl, [r0, #0xb28] +#endif + cmp sl, r8 + beq _022F5484 + mov r0, sl + bl EntityIsValid__022F528C + cmp r0, #0 + beq _022F5484 + str sl, [sp] + mov r0, r5 + mov r1, r5 + mov r2, r5 + mov r3, r8 + str r6, [sp, #4] + bl ApplyItemEffect +_022F5484: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #4 + blt _022F5440 +_022F5498: + ldr r1, _022F54B8 ; =DUNGEON_PTR + mov r0, sb + ldr r1, [r1] + add r1, r1, #0x4000 +#ifdef JAPAN + ldrb r1, [r1, #0x20] +#else + ldrb r1, [r1, #0xc4] +#endif + bl TryTriggerMonsterHouse +_022F54B0: + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_022F54B8: .word DUNGEON_PTR + arm_func_end UseSingleUseItem + + arm_func_start UseThrowableItem +UseThrowableItem: ; 0x022F54BC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x14 + mov sb, r0 + ldr r8, [sb, #0xb4] + bl ov29_022F3B8C + mov r0, sb + mov r1, #0 + mov r2, #9 + bl GetItemToUse + mov r4, r0 + mov r0, sb + bl MonsterHasEmbargoStatus + cmp r0, #0 + beq _022F550C + mov r0, sb + bl LogItemBlockedByEmbargo + mov r0, #0x14 + mov r1, #9 + bl ov29_022EA370 + b _022F5978 +_022F550C: + ldrb r0, [r8, #0x4e] + cmp r0, #0x81 + bne _022F5558 + ldrb r0, [r4] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _022F5558 + mov r1, r4 + mov r0, #0 + bl PrepareItemForPrinting__02345728 + ldr r1, _022F5980 ; =0x00000BAE + mov r0, sb + bl LogMessageByIdWithPopupCheckUser + mov r0, #0x14 + mov r1, #0x4c + bl ov29_022EA370 + b _022F5978 +_022F5558: + ldrsh r0, [r4, #4] + bl GetItemCategoryVeneer + cmp r0, #0 + beq _022F5578 + ldrsh r0, [r4, #4] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _022F55B8 +_022F5578: + ldrb r0, [r4] + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _022F55B8 + mov r1, r4 + mov r0, #0 + bl PrepareItemForPrinting__02345728 + ldr r1, _022F5980 ; =0x00000BAE + mov r0, sb + bl LogMessageByIdWithPopupCheckUser + mov r0, #0x14 + mov r1, #0x4c + bl ov29_022EA370 + b _022F5978 +_022F55B8: + mov r0, sb + mov r1, #1 + bl ShouldMonsterRunAwayAndShowEffect + cmp r0, #0 + beq _022F55E8 + ldr r1, _022F5984 ; =0x00000BBE + mov r0, sb + bl LogMessageByIdWithPopupCheckUser + mov r0, #0x14 + mov r1, #0x4c + bl ov29_022EA370 + b _022F5978 +_022F55E8: + ldrh r0, [r4] + mov r2, #0 + add r1, sp, #0xc + strh r0, [sp, #0xc] + ldrh r5, [r4, #2] + ldrb r3, [sp, #0xc] + mov r0, sb + strh r5, [sp, #0xe] + ldrh r5, [r4, #4] + bic r3, r3, #0x10 + strh r5, [sp, #0x10] + strb r3, [sp, #0xc] + strb r2, [sp, #0xd] + bl ov29_0230F9A4 + ldrb r0, [r8, #0x4e] + cmp r0, #0x80 + bne _022F563C + add r0, r8, #0x50 + mov r1, #1 + mov r4, #0 + bl RemoveGroundItem +_022F563C: + ldrsh r0, [sp, #0x10] + mov r5, #1 + bl GetItemCategoryVeneer + cmp r0, #0 + beq _022F5660 + ldrsh r0, [sp, #0x10] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _022F566C +_022F5660: + ldrh r0, [sp, #0xe] + cmp r0, #1 + movhi r5, #0 +_022F566C: + cmp r5, #0 + ldrb r0, [r8, #0x4e] + beq _022F56A8 + cmp r0, #0x80 + beq _022F56F4 + mov r0, r4 + bl ov29_02346FB8 + cmp r0, #0 + blt _022F5698 + mov r0, r4 + bl RemoveEquivItemNoHole +_022F5698: + mov r0, r4 + bl ItemZInit + bl RemoveEmptyItemsInBagWrapper + b _022F56F4 +_022F56A8: + cmp r0, #0x80 + bne _022F56D0 + ldrh r2, [sp, #0xe] + add r1, sp, #0xc + add r0, r8, #0x50 + sub r3, r2, #1 + mov r2, #1 + strh r3, [sp, #0xe] + bl SpawnItem + b _022F56F4 +_022F56D0: + mov r0, r4 + bl ov29_02346FB8 + cmp r0, #0 + blt _022F56E8 + mov r0, r4 + bl DecrementStackItem +_022F56E8: + ldrh r0, [r4, #2] + sub r0, r0, #1 + strh r0, [r4, #2] +_022F56F4: + mov r0, sb + mov r1, #0x30 + bl ItemIsActive__022F5994 + cmp r0, #0 + beq _022F5714 + mov r0, #8 + bl DungeonRandInt + strb r0, [r8, #0x4c] +_022F5714: + mov r0, sb + bl ShouldDisplayEntityWrapper + cmp r0, #0 + beq _022F577C + ldr r1, _022F5988 ; =0x00000103 + mov r0, sb + ldrb r7, [r8, #0x4c] + bl PlaySeByIdIfShouldDisplayEntity + mov r6, #0 + mov r5, r6 + mov r4, #2 + mov sl, #0x15 +_022F5744: + sub r0, r7, #1 + and r7, r0, #7 + mov r0, sb + mov r1, r5 + mov r2, r7 + bl ChangeMonsterAnimation + mov r0, r4 + mov r1, sl + bl ov29_022EA370 + add r6, r6, #1 + cmp r6, #8 + blt _022F5744 + mov r0, #4 +#ifdef JAPAN + strb r0, [r8, #0x175] +#else + strb r0, [r8, #0x179] +#endif +_022F577C: + ldrsh r0, [sp, #0x10] + bl GetItemCategoryVeneer + cmp r0, #0 + beq _022F579C + ldrsh r0, [sp, #0x10] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _022F57A4 +_022F579C: + mov r0, #1 + strh r0, [sp, #0xe] +_022F57A4: + add r1, sp, #0xc + mov r0, #0 + bl PrepareItemForPrinting__02345754 + bl GetMessageLogPreprocessorArgs + mov r1, #0 + mov r2, r8 + mov r3, r1 + str r1, [sp] + bl SetPreprocessorArgsStringToName + ldrsh r0, [sp, #0x10] + bl GetItemCategoryVeneer + cmp r0, #0 + bne _022F57E8 +#ifdef JAPAN + ldr r1, _022F6F84 ; =0x000008FF + mov r0, sb +#else + mov r0, sb + mov r1, #0xbc0 +#endif + bl LogMessageByIdWithPopupCheckUser + b _022F57F4 +_022F57E8: + ldr r1, _022F598C ; =0x00000BBF + mov r0, sb + bl LogMessageByIdWithPopupCheckUser +_022F57F4: + ldrsh r0, [sp, #0x10] + bl GetItemCategoryVeneer + mov r1, r0 + mov r0, sb + bl ov29_022E5728 + mov r0, sb + mov r1, #0x2e + bl ItemIsActive__022F5994 + cmp r0, #0 + movne r0, #1 + strneb r0, [sp, #9] + moveq r0, #0 + streqb r0, [sp, #9] + ldrb r0, [r8, #0xee] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _022F5880 +_022F5838: ; jump table + b _022F5848 ; case 0 + b _022F585C ; case 1 + b _022F5870 ; case 2 + b _022F5880 ; case 3 +_022F5848: + mov r1, #0 + mov r0, #0xa + strb r1, [sp, #8] + strh r0, [sp, #0xa] + b _022F5880 +_022F585C: + mov r1, #0 + mov r0, #0x63 + strb r1, [sp, #8] + strh r0, [sp, #0xa] + b _022F5880 +_022F5870: + mov r1, #1 + mov r0, #0x63 + strb r1, [sp, #8] + strh r0, [sp, #0xa] +_022F5880: + ldr r1, [sb, #0xb4] + ldrb r0, [r1, #6] + cmp r0, #0 + movne r0, #0 + bne _022F58A0 +#ifdef JAPAN + add r0, r1, #0x224 +#else + add r0, r1, #0x228 +#endif + mov r1, #0x24 + bl ExclusiveItemEffectFlagTest +_022F58A0: + cmp r0, #0 + movne r1, #0 + movne r0, #0x63 + strneb r1, [sp, #8] + strneh r0, [sp, #0xa] + mov r0, sb + mov r1, #0x16 + bl ItemIsActive__022F5994 + cmp r0, #0 + bne _022F58DC + mov r0, sb + mov r1, #0x42 + bl IqSkillIsEnabled + cmp r0, #0 + beq _022F58EC +_022F58DC: + mov r1, #1 + mov r0, #0x63 + strb r1, [sp, #8] + strh r0, [sp, #0xa] +_022F58EC: + ldrsh r0, [sp, #0x10] + bl GetItemCategoryVeneer + cmp r0, #1 + bne _022F5928 + add r0, sp, #4 + mov r1, sb + bl ov29_022E9A9C + add r4, sp, #8 + add r1, sp, #0xc + add r3, sp, #4 + mov r0, sb + add r2, sb, #4 + str r4, [sp] + bl HandleCurvedProjectileThrow + b _022F5944 +_022F5928: + add r0, sp, #8 + str r0, [sp] + ldrb r3, [r8, #0x4c] + add r1, sp, #0xc + mov r0, sb + add r2, sb, #4 + bl HandleRegularProjectileThrow +_022F5944: + mov r0, sb + bl EntityIsValid__022F528C + cmp r0, #0 + beq _022F5978 + ldrb r1, [r8, #0x4c] + mov r0, sb + bl ChangeMonsterAnimationToIdle + ldr r1, _022F5990 ; =DUNGEON_PTR + mov r0, sb + ldr r1, [r1] + add r1, r1, #0x4000 +#ifdef JAPAN + ldrb r1, [r1, #0x20] +#else + ldrb r1, [r1, #0xc4] +#endif + bl TryTriggerMonsterHouse +_022F5978: + add sp, sp, #0x14 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +#ifdef JAPAN +#define USE_THROWABLE_ITEM_OFFSET -0x2C1 +#else +#define USE_THROWABLE_ITEM_OFFSET 0 +#endif +_022F5980: .word 0x00000BAE + USE_THROWABLE_ITEM_OFFSET +_022F5984: .word 0x00000BBE + USE_THROWABLE_ITEM_OFFSET +_022F5988: .word 0x00000103 +#ifdef JAPAN +_022F6F84: .word 0x000008FF +#endif +_022F598C: .word 0x00000BBF + USE_THROWABLE_ITEM_OFFSET +_022F5990: .word DUNGEON_PTR + arm_func_end UseThrowableItem diff --git a/asm/overlay_29_022FFF4C.s b/asm/overlay_29_022FFF5C.s similarity index 89% rename from asm/overlay_29_022FFF4C.s rename to asm/overlay_29_022FFF5C.s index c908dc60..3e2c414d 100644 --- a/asm/overlay_29_022FFF4C.s +++ b/asm/overlay_29_022FFF5C.s @@ -1,17 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_022FFF4C.inc" + .include "overlay_29_022FFF5C.inc" .text - arm_func_start CalcSpeedStageWrapper -CalcSpeedStageWrapper: ; 0x022FFF4C - ldr ip, _022FFF58 ; =CalcSpeedStage - mov r1, #1 - bx ip - .align 2, 0 -_022FFF58: .word CalcSpeedStage - arm_func_end CalcSpeedStageWrapper - arm_func_start GetNumberOfAttacks GetNumberOfAttacks: ; 0x022FFF5C stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} diff --git a/asm/overlay_29_02320788.s b/asm/overlay_29_02320788.s index e8cf12b4..cfd62a32 100644 --- a/asm/overlay_29_02320788.s +++ b/asm/overlay_29_02320788.s @@ -828,176 +828,3 @@ _02321210: .align 2, 0 _02321234: .word DUNGEON_PTR arm_func_end ov29_0232119C - - arm_func_start ov29_02321238 -ov29_02321238: ; 0x02321238 - ldr ip, _02321248 ; =ov29_0232119C - mov r1, #0 - mov r2, #1 - bx ip - .align 2, 0 -_02321248: .word ov29_0232119C - arm_func_end ov29_02321238 - - arm_func_start ov29_0232124C -ov29_0232124C: ; 0x0232124C - ldr ip, _0232125C ; =ov29_0232119C - mov r1, #1 - mov r2, r1 - bx ip - .align 2, 0 -_0232125C: .word ov29_0232119C - arm_func_end ov29_0232124C - - arm_func_start ov29_02321260 -ov29_02321260: ; 0x02321260 - ldr ip, _02321270 ; =ov29_0232119C - mov r1, #0 - mov r2, r1 - bx ip - .align 2, 0 -_02321270: .word ov29_0232119C - arm_func_end ov29_02321260 - - arm_func_start ov29_02321274 -ov29_02321274: ; 0x02321274 - ldr ip, _02321284 ; =ov29_0232119C - mov r1, #1 - mov r2, #0 - bx ip - .align 2, 0 -_02321284: .word ov29_0232119C - arm_func_end ov29_02321274 - - arm_func_start ov29_02321288 -ov29_02321288: ; 0x02321288 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x10 - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r7, r3 - ldr r6, [sp, #0x34] - ldr r5, [sl, #0xb4] - bl GetMonsterInFront - movs r4, r0 - bne _023212E0 - mov r0, sl - mov r1, r6 - bl ov29_022FAA04 - ldrh r2, [r6, #2] - mov r0, sl - mov r1, #1 - orr r2, r2, #8 - strh r2, [r6, #2] - bl UpdateMovePp - mov r0, #0 - b _02321428 -_023212E0: - add r2, sp, #8 - mov r3, r6 - mov r1, #4 -_023212EC: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _023212EC - mov r0, r4 - bl ov29_023247B4 - strh r0, [sp, #0xc] - ldrh r0, [sp, #0xc] - cmp r0, #0 - bne _02321360 - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02321430 ; =0x00000F11 - mov r0, sl - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, sl - mov r1, r6 - bl ov29_022FAA04 - ldrh r2, [r6, #2] - mov r0, sl - mov r1, #1 - orr r2, r2, #8 - strh r2, [r6, #2] - bl UpdateMovePp - mov r0, #0 - b _02321428 -_02321360: - mov r0, sl - mov r1, r6 - mov r2, #1 - bl CanMonsterUseMove - cmp r0, #0 - beq _023213E4 - mov r0, r4 - bl ov29_022E4C84 - mov r0, sl - bl ov29_022E4CD4 - mov r0, #1 -#ifdef JAPAN - strb r0, [r5, #0x21d] -#else - strb r0, [r5, #0x221] -#endif - mov r0, #0 - mov r1, sl - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02321434 ; =0x00000F12 - mov r1, r4 - mov r0, sl - bl LogMessageByIdWithPopupCheckUserTarget - ldr r4, [sp, #0x30] - add r0, sp, #8 - str r4, [sp] - str r0, [sp, #4] - mov r1, sb - mov r2, r8 - mov r3, r7 - mov r0, sl - bl ov29_02322374 - mov r4, r0 - mov r0, #0 -#ifdef JAPAN - strb r0, [r5, #0x21d] -#else - strb r0, [r5, #0x221] -#endif - b _02321408 -_023213E4: - ldr r1, [sp, #0x30] - mov r0, sl - str r1, [sp] - mov r1, sb - mov r2, r8 - mov r3, r7 - str r6, [sp, #4] - bl ov29_02322374 - mov r4, r0 -_02321408: - mov r0, sl - bl EntityIsValid__02321438 - cmp r0, #0 - beq _02321424 - mov r0, sl - mov r1, r6 - bl ov29_022FAA04 -_02321424: - mov r0, r4 -_02321428: - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -#ifdef JAPAN -_02321430: .word 0x00000C53 -_02321434: .word 0x00000C54 -#else -_02321430: .word 0x00000F11 -_02321434: .word 0x00000F12 -#endif - arm_func_end ov29_02321288 diff --git a/asm/overlay_29_0232124C.s b/asm/overlay_29_0232124C.s new file mode 100644 index 00000000..e1aa0431 --- /dev/null +++ b/asm/overlay_29_0232124C.s @@ -0,0 +1,24 @@ + .include "asm/macros.inc" + .include "overlay_29_0232124C.inc" + + .text + + arm_func_start ov29_0232124C +ov29_0232124C: ; 0x0232124C + ldr ip, _0232125C ; =ov29_0232119C + mov r1, #1 + mov r2, r1 + bx ip + .align 2, 0 +_0232125C: .word ov29_0232119C + arm_func_end ov29_0232124C + + arm_func_start ov29_02321260 +ov29_02321260: ; 0x02321260 + ldr ip, _02321270 ; =ov29_0232119C + mov r1, #0 + mov r2, r1 + bx ip + .align 2, 0 +_02321270: .word ov29_0232119C + arm_func_end ov29_02321260 diff --git a/asm/overlay_29_02321288.s b/asm/overlay_29_02321288.s new file mode 100644 index 00000000..0be1217c --- /dev/null +++ b/asm/overlay_29_02321288.s @@ -0,0 +1,137 @@ + .include "asm/macros.inc" + .include "overlay_29_02321288.inc" + + .text + + arm_func_start ov29_02321288 +ov29_02321288: ; 0x02321288 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x10 + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r7, r3 + ldr r6, [sp, #0x34] + ldr r5, [sl, #0xb4] + bl GetMonsterInFront + movs r4, r0 + bne _023212E0 + mov r0, sl + mov r1, r6 + bl ov29_022FAA04 + ldrh r2, [r6, #2] + mov r0, sl + mov r1, #1 + orr r2, r2, #8 + strh r2, [r6, #2] + bl UpdateMovePp + mov r0, #0 + b _02321428 +_023212E0: + add r2, sp, #8 + mov r3, r6 + mov r1, #4 +_023212EC: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _023212EC + mov r0, r4 + bl ov29_023247B4 + strh r0, [sp, #0xc] + ldrh r0, [sp, #0xc] + cmp r0, #0 + bne _02321360 + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02321430 ; =0x00000F11 + mov r0, sl + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, sl + mov r1, r6 + bl ov29_022FAA04 + ldrh r2, [r6, #2] + mov r0, sl + mov r1, #1 + orr r2, r2, #8 + strh r2, [r6, #2] + bl UpdateMovePp + mov r0, #0 + b _02321428 +_02321360: + mov r0, sl + mov r1, r6 + mov r2, #1 + bl CanMonsterUseMove + cmp r0, #0 + beq _023213E4 + mov r0, r4 + bl ov29_022E4C84 + mov r0, sl + bl ov29_022E4CD4 + mov r0, #1 +#ifdef JAPAN + strb r0, [r5, #0x21d] +#else + strb r0, [r5, #0x221] +#endif + mov r0, #0 + mov r1, sl + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02321434 ; =0x00000F12 + mov r1, r4 + mov r0, sl + bl LogMessageByIdWithPopupCheckUserTarget + ldr r4, [sp, #0x30] + add r0, sp, #8 + str r4, [sp] + str r0, [sp, #4] + mov r1, sb + mov r2, r8 + mov r3, r7 + mov r0, sl + bl ov29_02322374 + mov r4, r0 + mov r0, #0 +#ifdef JAPAN + strb r0, [r5, #0x21d] +#else + strb r0, [r5, #0x221] +#endif + b _02321408 +_023213E4: + ldr r1, [sp, #0x30] + mov r0, sl + str r1, [sp] + mov r1, sb + mov r2, r8 + mov r3, r7 + str r6, [sp, #4] + bl ov29_02322374 + mov r4, r0 +_02321408: + mov r0, sl + bl EntityIsValid__02321438 + cmp r0, #0 + beq _02321424 + mov r0, sl + mov r1, r6 + bl ov29_022FAA04 +_02321424: + mov r0, r4 +_02321428: + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +#ifdef JAPAN +_02321430: .word 0x00000C53 +_02321434: .word 0x00000C54 +#else +_02321430: .word 0x00000F11 +_02321434: .word 0x00000F12 +#endif + arm_func_end ov29_02321288 diff --git a/asm/overlay_29_02325644.s b/asm/overlay_29_02325644.s index 19ad9d10..28aec64e 100644 --- a/asm/overlay_29_02325644.s +++ b/asm/overlay_29_02325644.s @@ -554,163 +554,3 @@ ov29_02325D7C: ; 0x02325D7C bl AdvanceFrame ldmia sp!, {r4, pc} arm_func_end ov29_02325D7C - - arm_func_start DoMoveDamage__02325DC0 -DoMoveDamage__02325DC0: ; 0x02325DC0 - stmdb sp!, {r3, lr} - str r3, [sp] - mov r3, #0x100 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end DoMoveDamage__02325DC0 - - arm_func_start DoMoveIronTail -DoMoveIronTail: ; 0x02325DE4 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02325E50 - ldr r1, _02325E5C ; =IRON_TAIL_LOWER_DEFENSE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02325E50 - ldr r0, _02325E60 ; =ATK_STAT_IDX - mov r3, r4 - ldr r2, [r0] - mov r0, r6 - mov r1, r5 - str r3, [sp] - mov ip, #0 - str ip, [sp, #4] - bl LowerDefensiveStat -_02325E50: - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02325E5C: .word IRON_TAIL_LOWER_DEFENSE_CHANCE -_02325E60: .word ATK_STAT_IDX - arm_func_end DoMoveIronTail - - arm_func_start DoMoveDamageMultihitUntilMiss -DoMoveDamageMultihitUntilMiss: ; 0x02325E64 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - ldr ip, _02325EB8 ; =ROLLOUT_ICE_BALL_SUCCESSIVE_HITS - str r3, [sp] - ldr ip, [ip] - ldr r3, _02325EBC ; =ROLLOUT_DAMAGE_MULT_TABLE - mov r4, #0 - ldr r3, [r3, ip, lsl #2] - bl DealDamage - cmp r0, #0 - ldreq r0, _02325EC0 ; =ROLLOUT_ICE_BALL_MISSED - moveq r1, #1 - streqb r1, [r0] - ldr r1, _02325EB8 ; =ROLLOUT_ICE_BALL_SUCCESSIVE_HITS - movne r4, #1 - ldr r2, [r1] - mov r0, r4 - add r2, r2, #1 - str r2, [r1] - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_02325EB8: .word ROLLOUT_ICE_BALL_SUCCESSIVE_HITS -_02325EBC: .word ROLLOUT_DAMAGE_MULT_TABLE -_02325EC0: .word ROLLOUT_ICE_BALL_MISSED - arm_func_end DoMoveDamageMultihitUntilMiss - - arm_func_start DoMoveYawn -DoMoveYawn: ; 0x02325EC4 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - ldr r1, _02325EFC ; =YAWN_TURN_RANGE - mov r0, r4 - mov r2, #1 - bl CalcStatusDuration - mov r2, r0 - mov r0, r5 - mov r1, r4 - add r2, r2, #1 - bl TryInflictYawningStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02325EFC: .word YAWN_TURN_RANGE - arm_func_end DoMoveYawn - - arm_func_start DoMoveSleep -DoMoveSleep: ; 0x02325F00 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - ldr r1, _02325F38 ; =SLEEP_TURN_RANGE - mov r0, r4 - mov r2, #1 - bl CalcStatusDuration - mov r2, r0 - mov r0, r5 - mov r1, r4 - mov r3, #1 - bl TryInflictSleepStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02325F38: .word SLEEP_TURN_RANGE - arm_func_end DoMoveSleep - - arm_func_start DoMoveNightmare -DoMoveNightmare: ; 0x02325F3C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - ldr r1, _02325F70 ; =NIGHTMARE_TURN_RANGE - mov r0, r4 - mov r2, #1 - bl CalcStatusDuration - mov r2, r0 - mov r0, r5 - mov r1, r4 - bl TryInflictNightmareStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02325F70: .word NIGHTMARE_TURN_RANGE - arm_func_end DoMoveNightmare - - arm_func_start DoMoveMorningSun -DoMoveMorningSun: ; 0x02325F74 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl GetApparentWeather - mov ip, #1 - ldr r1, _02325FB0 ; =MORNING_SUN_HP_RESTORATION_TABLE - mov r0, r0, lsl #1 - ldrsh r2, [r1, r0] - mov r0, r5 - mov r1, r4 - mov r3, #0 - str ip, [sp] - bl TryIncreaseHp - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02325FB0: .word MORNING_SUN_HP_RESTORATION_TABLE - arm_func_end DoMoveMorningSun diff --git a/asm/overlay_29_02325DE4.s b/asm/overlay_29_02325DE4.s new file mode 100644 index 00000000..6d20a9a5 --- /dev/null +++ b/asm/overlay_29_02325DE4.s @@ -0,0 +1,111 @@ + .include "asm/macros.inc" + .include "overlay_29_02325DE4.inc" + + .text + + arm_func_start DoMoveIronTail +DoMoveIronTail: ; 0x02325DE4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02325E50 + ldr r1, _02325E5C ; =IRON_TAIL_LOWER_DEFENSE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02325E50 + ldr r0, _02325E60 ; =ATK_STAT_IDX + mov r3, r4 + ldr r2, [r0] + mov r0, r6 + mov r1, r5 + str r3, [sp] + mov ip, #0 + str ip, [sp, #4] + bl LowerDefensiveStat +_02325E50: + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02325E5C: .word IRON_TAIL_LOWER_DEFENSE_CHANCE +_02325E60: .word ATK_STAT_IDX + arm_func_end DoMoveIronTail + + arm_func_start DoMoveDamageMultihitUntilMiss +DoMoveDamageMultihitUntilMiss: ; 0x02325E64 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + ldr ip, _02325EB8 ; =ROLLOUT_ICE_BALL_SUCCESSIVE_HITS + str r3, [sp] + ldr ip, [ip] + ldr r3, _02325EBC ; =ROLLOUT_DAMAGE_MULT_TABLE + mov r4, #0 + ldr r3, [r3, ip, lsl #2] + bl DealDamage + cmp r0, #0 + ldreq r0, _02325EC0 ; =ROLLOUT_ICE_BALL_MISSED + moveq r1, #1 + streqb r1, [r0] + ldr r1, _02325EB8 ; =ROLLOUT_ICE_BALL_SUCCESSIVE_HITS + movne r4, #1 + ldr r2, [r1] + mov r0, r4 + add r2, r2, #1 + str r2, [r1] + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_02325EB8: .word ROLLOUT_ICE_BALL_SUCCESSIVE_HITS +_02325EBC: .word ROLLOUT_DAMAGE_MULT_TABLE +_02325EC0: .word ROLLOUT_ICE_BALL_MISSED + arm_func_end DoMoveDamageMultihitUntilMiss + + arm_func_start DoMoveYawn +DoMoveYawn: ; 0x02325EC4 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + ldr r1, _02325EFC ; =YAWN_TURN_RANGE + mov r0, r4 + mov r2, #1 + bl CalcStatusDuration + mov r2, r0 + mov r0, r5 + mov r1, r4 + add r2, r2, #1 + bl TryInflictYawningStatus + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02325EFC: .word YAWN_TURN_RANGE + arm_func_end DoMoveYawn + + arm_func_start DoMoveSleep +DoMoveSleep: ; 0x02325F00 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + ldr r1, _02325F38 ; =SLEEP_TURN_RANGE + mov r0, r4 + mov r2, #1 + bl CalcStatusDuration + mov r2, r0 + mov r0, r5 + mov r1, r4 + mov r3, #1 + bl TryInflictSleepStatus + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02325F38: .word SLEEP_TURN_RANGE + arm_func_end DoMoveSleep diff --git a/asm/overlay_29_02325F74.s b/asm/overlay_29_02325F74.s new file mode 100644 index 00000000..25b397b8 --- /dev/null +++ b/asm/overlay_29_02325F74.s @@ -0,0 +1,25 @@ + .include "asm/macros.inc" + .include "overlay_29_02325F74.inc" + + .text + + arm_func_start DoMoveMorningSun +DoMoveMorningSun: ; 0x02325F74 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl GetApparentWeather + mov ip, #1 + ldr r1, _02325FB0 ; =MORNING_SUN_HP_RESTORATION_TABLE + mov r0, r0, lsl #1 + ldrsh r2, [r1, r0] + mov r0, r5 + mov r1, r4 + mov r3, #0 + str ip, [sp] + bl TryIncreaseHp + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02325FB0: .word MORNING_SUN_HP_RESTORATION_TABLE + arm_func_end DoMoveMorningSun diff --git a/asm/overlay_29_023268CC.s b/asm/overlay_29_023268CC.s index 566feedf..f6d4d761 100644 --- a/asm/overlay_29_023268CC.s +++ b/asm/overlay_29_023268CC.s @@ -22,302 +22,3 @@ DoMoveSmokescreen: ; 0x023268CC .align 2, 0 _02326904: .word SMOKESCREEN_TURN_RANGE arm_func_end DoMoveSmokescreen - - arm_func_start DoMoveMirrorMove -DoMoveMirrorMove: ; 0x02326908 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl EndFrozenStatus - mov r0, r5 - mov r1, r4 - bl TryInflictMirrorMoveStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DoMoveMirrorMove - - arm_func_start DoMoveOverheat -DoMoveOverheat: ; 0x0232692C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov sb, r0 - mov r8, r1 - mov r7, r2 - ldr r5, [sb, #0xb4] - mov r6, r3 - mov r4, #0 - bl EndFrozenStatus - mov r0, sb - mov r1, r8 - mov r2, r7 - mov r3, #0x100 - str r6, [sp] - bl DealDamage - cmp r0, #0 - beq _02326988 - mov r1, r4 - mov r0, sb - mov r4, #1 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - movne r0, r4 -#ifdef JAPAN - strneb r0, [r5, #0x15b] -#else - strneb r0, [r5, #0x15f] -#endif -_02326988: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end DoMoveOverheat - - arm_func_start DoMoveAuroraBeam -DoMoveAuroraBeam: ; 0x02326990 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023269F8 - ldr r1, _02326A04 ; =AURORA_BEAM_LOWER_ATTACK_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023269F8 - ldr r0, _02326A08 ; =ATK_STAT_IDX - mov ip, #0 - ldr r2, [r0] - mov r0, r6 - mov r1, r5 - mov r3, #0x80 - str ip, [sp] - bl ApplyOffensiveStatMultiplier -_023269F8: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02326A04: .word AURORA_BEAM_LOWER_ATTACK_CHANCE -_02326A08: .word ATK_STAT_IDX - arm_func_end DoMoveAuroraBeam - - arm_func_start DoMoveMemento -DoMoveMemento: ; 0x02326A0C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - ldr r2, _02326A6C ; =ATK_STAT_IDX - ldr r4, [r6, #0xb4] - mov ip, #1 - strh ip, [r4, #0x10] - ldr r2, [r2] - mov r3, #0x40 - mov r5, r1 - str ip, [sp] - bl ApplyOffensiveStatMultiplier - ldr r0, _02326A70 ; =SPATK_STAT_IDX - mov ip, #1 - ldr r2, [r0] - mov r0, r6 - mov r1, r5 - mov r3, #0x40 - str ip, [sp] - bl ApplyOffensiveStatMultiplier - mov r0, #1 -#ifdef JAPAN - strb r0, [r4, #0x15a] -#else - strb r0, [r4, #0x15e] -#endif - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02326A6C: .word ATK_STAT_IDX -_02326A70: .word SPATK_STAT_IDX - arm_func_end DoMoveMemento - - arm_func_start DoMoveOctazooka -DoMoveOctazooka: ; 0x02326A74 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02326AD4 - ldr r1, _02326AE0 ; =OCTAZOOKA_LOWER_ACCURACY_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02326AD4 - ldr r1, _02326AE4 ; =ATK_STAT_IDX - mov r0, r6 - ldr r2, [r1] - mov r1, r5 - mov r3, #0 - bl LowerHitChanceStat -_02326AD4: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02326AE0: .word OCTAZOOKA_LOWER_ACCURACY_CHANCE -_02326AE4: .word ATK_STAT_IDX - arm_func_end DoMoveOctazooka - - arm_func_start DoMoveFlatter -DoMoveFlatter: ; 0x02326AE8 - stmdb sp!, {r3, r4, r5, lr} - mov r2, #1 - mov r3, #0 - mov r5, r0 - mov r4, r1 - bl TryInflictConfusedStatus - ldr r1, _02326B20 ; =SPATK_STAT_IDX - mov r0, r5 - ldr r2, [r1] - mov r1, r4 - mov r3, #1 - bl BoostOffensiveStat - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02326B20: .word SPATK_STAT_IDX - arm_func_end DoMoveFlatter - - arm_func_start DoMoveWillOWisp -DoMoveWillOWisp: ; 0x02326B24 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - mov r5, r1 - bl GetFlashFireStatus - movs r4, r0 - beq _02326B94 - ldr r3, [r5, #0xb4] -#ifdef JAPAN - ldrb r0, [r3, #0x158] -#else - ldrb r0, [r3, #0x15c] -#endif - cmp r0, #0 - bne _02326BAC - mov r0, #1 - mov r1, r5 - mov r2, #0 -#ifdef JAPAN - strb r0, [r3, #0x158] -#else - strb r0, [r3, #0x15c] -#endif - bl SubstitutePlaceholderStringTags - cmp r4, #1 - bne _02326B80 - ldr r2, _02326BB8 ; =0x00000CDD - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02326BAC -_02326B80: - ldr r2, _02326BBC ; =0x00000CDC - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02326BAC -_02326B94: - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, #1 - str r2, [sp] - bl TryInflictBurnStatus -_02326BAC: - mov r0, #1 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_02326BB8: .word 0x00000A1D -_02326BBC: .word 0x00000A1C -#else -_02326BB8: .word 0x00000CDD -_02326BBC: .word 0x00000CDC -#endif - arm_func_end DoMoveWillOWisp - - arm_func_start DoMoveReturn -DoMoveReturn: ; 0x02326BC0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x20 - mov sb, r0 - mov r4, r3 - mov r8, r1 - mov r7, r2 - ldr lr, [sb, #0xb4] - mov r6, #1 - mov ip, #0 - ldr r3, _02326C98 ; =ov10_022C4C0C - ldr r0, _02326C9C ; =0x000003E7 - b _02326C18 -_02326BF0: - mov r5, ip, lsl #2 - ldrsh r2, [r3, r5] - cmp r2, #0 - blt _02326C20 - ldrsh r1, [lr, #0xe] - cmp r1, r2 - ldrlt r0, _02326CA0 ; =ov10_022C4C0E - ldrltsh r6, [r0, r5] - blt _02326C20 - add ip, ip, #1 -_02326C18: - cmp ip, r0 - blt _02326BF0 -_02326C20: - mov r0, r7 - bl GetMoveType - mov r5, r0 - ldrh r0, [r7, #4] - bl GetMoveCategory - mov r1, r4 - mov r4, r0 - mov r0, r7 - bl GetDamageSourceWrapper - add r3, sp, #0x1c - stmia sp, {r3, r5} - str r4, [sp, #8] - mov r2, r6 - str r0, [sp, #0xc] - mov r6, #0 - str r6, [sp, #0x10] - mov r3, #1 - str r3, [sp, #0x14] - mov r1, r8 - mov r0, sb - str r6, [sp, #0x18] - bl CalcDamageFixedWrapper - ldrb r0, [sp, #0x1c] - cmp r0, #0 - moveq r0, #1 - movne r0, r6 - strb r0, [sp, #0x1c] - and r0, r0, #0xff - add sp, sp, #0x20 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02326C98: .word ov10_022C4C0C -_02326C9C: .word 0x000003E7 -_02326CA0: .word ov10_022C4C0E - arm_func_end DoMoveReturn diff --git a/asm/overlay_29_0232692C.s b/asm/overlay_29_0232692C.s new file mode 100644 index 00000000..d118743d --- /dev/null +++ b/asm/overlay_29_0232692C.s @@ -0,0 +1,290 @@ + .include "asm/macros.inc" + .include "overlay_29_0232692C.inc" + + .text + + arm_func_start DoMoveOverheat +DoMoveOverheat: ; 0x0232692C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov sb, r0 + mov r8, r1 + mov r7, r2 + ldr r5, [sb, #0xb4] + mov r6, r3 + mov r4, #0 + bl EndFrozenStatus + mov r0, sb + mov r1, r8 + mov r2, r7 + mov r3, #0x100 + str r6, [sp] + bl DealDamage + cmp r0, #0 + beq _02326988 + mov r1, r4 + mov r0, sb + mov r4, #1 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + movne r0, r4 +#ifdef JAPAN + strneb r0, [r5, #0x15b] +#else + strneb r0, [r5, #0x15f] +#endif +_02326988: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end DoMoveOverheat + + arm_func_start DoMoveAuroraBeam +DoMoveAuroraBeam: ; 0x02326990 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023269F8 + ldr r1, _02326A04 ; =AURORA_BEAM_LOWER_ATTACK_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023269F8 + ldr r0, _02326A08 ; =ATK_STAT_IDX + mov ip, #0 + ldr r2, [r0] + mov r0, r6 + mov r1, r5 + mov r3, #0x80 + str ip, [sp] + bl ApplyOffensiveStatMultiplier +_023269F8: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02326A04: .word AURORA_BEAM_LOWER_ATTACK_CHANCE +_02326A08: .word ATK_STAT_IDX + arm_func_end DoMoveAuroraBeam + + arm_func_start DoMoveMemento +DoMoveMemento: ; 0x02326A0C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + ldr r2, _02326A6C ; =ATK_STAT_IDX + ldr r4, [r6, #0xb4] + mov ip, #1 + strh ip, [r4, #0x10] + ldr r2, [r2] + mov r3, #0x40 + mov r5, r1 + str ip, [sp] + bl ApplyOffensiveStatMultiplier + ldr r0, _02326A70 ; =SPATK_STAT_IDX + mov ip, #1 + ldr r2, [r0] + mov r0, r6 + mov r1, r5 + mov r3, #0x40 + str ip, [sp] + bl ApplyOffensiveStatMultiplier + mov r0, #1 +#ifdef JAPAN + strb r0, [r4, #0x15a] +#else + strb r0, [r4, #0x15e] +#endif + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02326A6C: .word ATK_STAT_IDX +_02326A70: .word SPATK_STAT_IDX + arm_func_end DoMoveMemento + + arm_func_start DoMoveOctazooka +DoMoveOctazooka: ; 0x02326A74 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02326AD4 + ldr r1, _02326AE0 ; =OCTAZOOKA_LOWER_ACCURACY_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02326AD4 + ldr r1, _02326AE4 ; =ATK_STAT_IDX + mov r0, r6 + ldr r2, [r1] + mov r1, r5 + mov r3, #0 + bl LowerHitChanceStat +_02326AD4: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02326AE0: .word OCTAZOOKA_LOWER_ACCURACY_CHANCE +_02326AE4: .word ATK_STAT_IDX + arm_func_end DoMoveOctazooka + + arm_func_start DoMoveFlatter +DoMoveFlatter: ; 0x02326AE8 + stmdb sp!, {r3, r4, r5, lr} + mov r2, #1 + mov r3, #0 + mov r5, r0 + mov r4, r1 + bl TryInflictConfusedStatus + ldr r1, _02326B20 ; =SPATK_STAT_IDX + mov r0, r5 + ldr r2, [r1] + mov r1, r4 + mov r3, #1 + bl BoostOffensiveStat + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02326B20: .word SPATK_STAT_IDX + arm_func_end DoMoveFlatter + + arm_func_start DoMoveWillOWisp +DoMoveWillOWisp: ; 0x02326B24 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + mov r5, r1 + bl GetFlashFireStatus + movs r4, r0 + beq _02326B94 + ldr r3, [r5, #0xb4] +#ifdef JAPAN + ldrb r0, [r3, #0x158] +#else + ldrb r0, [r3, #0x15c] +#endif + cmp r0, #0 + bne _02326BAC + mov r0, #1 + mov r1, r5 + mov r2, #0 +#ifdef JAPAN + strb r0, [r3, #0x158] +#else + strb r0, [r3, #0x15c] +#endif + bl SubstitutePlaceholderStringTags + cmp r4, #1 + bne _02326B80 + ldr r2, _02326BB8 ; =0x00000CDD + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _02326BAC +_02326B80: + ldr r2, _02326BBC ; =0x00000CDC + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _02326BAC +_02326B94: + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, #1 + str r2, [sp] + bl TryInflictBurnStatus +_02326BAC: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_02326BB8: .word 0x00000A1D +_02326BBC: .word 0x00000A1C +#else +_02326BB8: .word 0x00000CDD +_02326BBC: .word 0x00000CDC +#endif + arm_func_end DoMoveWillOWisp + + arm_func_start DoMoveReturn +DoMoveReturn: ; 0x02326BC0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x20 + mov sb, r0 + mov r4, r3 + mov r8, r1 + mov r7, r2 + ldr lr, [sb, #0xb4] + mov r6, #1 + mov ip, #0 + ldr r3, _02326C98 ; =ov10_022C4C0C + ldr r0, _02326C9C ; =0x000003E7 + b _02326C18 +_02326BF0: + mov r5, ip, lsl #2 + ldrsh r2, [r3, r5] + cmp r2, #0 + blt _02326C20 + ldrsh r1, [lr, #0xe] + cmp r1, r2 + ldrlt r0, _02326CA0 ; =ov10_022C4C0E + ldrltsh r6, [r0, r5] + blt _02326C20 + add ip, ip, #1 +_02326C18: + cmp ip, r0 + blt _02326BF0 +_02326C20: + mov r0, r7 + bl GetMoveType + mov r5, r0 + ldrh r0, [r7, #4] + bl GetMoveCategory + mov r1, r4 + mov r4, r0 + mov r0, r7 + bl GetDamageSourceWrapper + add r3, sp, #0x1c + stmia sp, {r3, r5} + str r4, [sp, #8] + mov r2, r6 + str r0, [sp, #0xc] + mov r6, #0 + str r6, [sp, #0x10] + mov r3, #1 + str r3, [sp, #0x14] + mov r1, r8 + mov r0, sb + str r6, [sp, #0x18] + bl CalcDamageFixedWrapper + ldrb r0, [sp, #0x1c] + cmp r0, #0 + moveq r0, #1 + movne r0, r6 + strb r0, [sp, #0x1c] + and r0, r0, #0xff + add sp, sp, #0x20 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02326C98: .word ov10_022C4C0C +_02326C9C: .word 0x000003E7 +_02326CA0: .word ov10_022C4C0E + arm_func_end DoMoveReturn diff --git a/asm/overlay_29_02326CC8.s b/asm/overlay_29_02326CC8.s index bde2fe45..d547ff16 100644 --- a/asm/overlay_29_02326CC8.s +++ b/asm/overlay_29_02326CC8.s @@ -82,19 +82,3 @@ _02326DC8: .align 2, 0 _02326DD4: .word FLAMETHROWER_BURN_CHANCE arm_func_end DoMoveDamageBurn10 - - arm_func_start DoMoveExpose -DoMoveExpose: ; 0x02326DD8 - stmdb sp!, {r3, lr} - ldrh r3, [r2, #4] - ldr r2, _02326E00 ; =0x0000013B - cmp r3, r2 - moveq r2, #0x7a - movne r2, #0x51 - mov r3, #0 - bl TryInflictExposedStatus - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02326E00: .word 0x0000013B - arm_func_end DoMoveExpose diff --git a/asm/overlay_29_02327940.s b/asm/overlay_29_02327940.s index 108d8b41..932f5919 100644 --- a/asm/overlay_29_02327940.s +++ b/asm/overlay_29_02327940.s @@ -39,192 +39,3 @@ _023279A0: .align 2, 0 _023279A8: .word RAPID_SPIN_BINDING_REMOVAL arm_func_end DoMoveRapidSpin - - arm_func_start DoMoveSureShot -DoMoveSureShot: ; 0x023279AC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - ldr r1, _023279E0 ; =SURE_SHOT_TURN_RANGE - mov r0, r4 - mov r2, #0 - bl CalcStatusDuration - mov r2, r0 - mov r0, r5 - mov r1, r4 - bl TryInflictSureShotStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023279E0: .word SURE_SHOT_TURN_RANGE - arm_func_end DoMoveSureShot - - arm_func_start DoMoveCosmicPower -DoMoveCosmicPower: ; 0x023279E4 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _02327A20 ; =ATK_STAT_IDX - mov r3, #1 - ldr r2, [r2] - mov r5, r0 - mov r4, r1 - bl BoostDefensiveStat - ldr r1, _02327A24 ; =SPATK_STAT_IDX - mov r0, r5 - ldr r2, [r1] - mov r1, r4 - mov r3, #1 - bl BoostDefensiveStat - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02327A20: .word ATK_STAT_IDX -_02327A24: .word SPATK_STAT_IDX - arm_func_end DoMoveCosmicPower - - arm_func_start DoMoveSkyAttack -DoMoveSkyAttack: ; 0x02327A28 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r6, r2 - mov r7, r1 - mov r1, r6 - mov r8, r0 - mov r5, r3 - mov r4, #0 - bl IsChargingTwoTurnMove - cmp r0, #0 - beq _02327AB8 - ldr r1, _02327AE8 ; =SKY_ATTACK_DAMAGE_MULTIPLIER - mov r0, r8 - ldr r3, [r1] - mov r1, r7 - mov r2, r6 - str r5, [sp] - bl DealDamage - cmp r0, #0 - beq _02327AAC - ldr r1, _02327AEC ; =SKY_ATTACK_CRINGE_CHANCE - mov r0, r8 - ldrsh r2, [r1] - mov r1, r7 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327AAC - mov r2, #0 - mov r0, r8 - mov r1, r7 - mov r3, r2 - bl TryInflictCringeStatus -_02327AAC: - mov r0, r8 - bl EndTwoTurnMove - b _02327ADC -_02327AB8: - ldr r0, _02327AF0 ; =0x00000CD1 - bl StringFromId - str r0, [sp] - mov r0, r8 - mov r1, r8 - mov r3, r6 - mov r2, #3 - bl BeginChargedMove - mov r4, #1 -_02327ADC: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02327AE8: .word SKY_ATTACK_DAMAGE_MULTIPLIER -_02327AEC: .word SKY_ATTACK_CRINGE_CHANCE -#ifdef JAPAN -_02327AF0: .word 0x00000A11 -#else -_02327AF0: .word 0x00000CD1 -#endif - arm_func_end DoMoveSkyAttack - - arm_func_start DoMoveDamageFreeze15 -DoMoveDamageFreeze15: ; 0x02327AF4 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327B4C - ldr r1, _02327B58 ; =POWDER_SNOW_FREEZE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327B4C - mov r0, r6 - mov r1, r5 - mov r2, #0 - bl TryInflictFrozenStatus -_02327B4C: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327B58: .word POWDER_SNOW_FREEZE_CHANCE - arm_func_end DoMoveDamageFreeze15 - - arm_func_start DoMoveMeteorMash -DoMoveMeteorMash: ; 0x02327B5C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 -#ifdef EUROPE - mov r5, r1 -#endif - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327BCC - ldr r1, _02327BD8 ; =METEOR_MASH_BOOST_ATTACK_CHANCE - mov r0, r6 - ldrsh r2, [r1] -#ifdef EUROPE - mov r1, r5 -#else - mov r1, r6 -#endif - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327BCC - ldr r0, _02327BDC ; =ATK_STAT_IDX - ldr r5, [r6, #0xb4] - ldr r2, [r0] - mov r0, r6 - mov r1, r6 - mov r3, r4 - bl BoostOffensiveStat -#ifdef JAPAN - ldrb r0, [r5, #0x107] - cmp r0, #1 - movlo r0, r4 - strlob r0, [r5, #0x107] -#else - ldrb r0, [r5, #0x108] - cmp r0, #1 - movlo r0, r4 - strlob r0, [r5, #0x108] -#endif -_02327BCC: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327BD8: .word METEOR_MASH_BOOST_ATTACK_CHANCE -_02327BDC: .word ATK_STAT_IDX - arm_func_end DoMoveMeteorMash diff --git a/asm/overlay_29_023279E4.s b/asm/overlay_29_023279E4.s new file mode 100644 index 00000000..12e8693b --- /dev/null +++ b/asm/overlay_29_023279E4.s @@ -0,0 +1,174 @@ + .include "asm/macros.inc" + .include "overlay_29_023279E4.inc" + + .text + + arm_func_start DoMoveCosmicPower +DoMoveCosmicPower: ; 0x023279E4 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _02327A20 ; =ATK_STAT_IDX + mov r3, #1 + ldr r2, [r2] + mov r5, r0 + mov r4, r1 + bl BoostDefensiveStat + ldr r1, _02327A24 ; =SPATK_STAT_IDX + mov r0, r5 + ldr r2, [r1] + mov r1, r4 + mov r3, #1 + bl BoostDefensiveStat + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02327A20: .word ATK_STAT_IDX +_02327A24: .word SPATK_STAT_IDX + arm_func_end DoMoveCosmicPower + + arm_func_start DoMoveSkyAttack +DoMoveSkyAttack: ; 0x02327A28 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r6, r2 + mov r7, r1 + mov r1, r6 + mov r8, r0 + mov r5, r3 + mov r4, #0 + bl IsChargingTwoTurnMove + cmp r0, #0 + beq _02327AB8 + ldr r1, _02327AE8 ; =SKY_ATTACK_DAMAGE_MULTIPLIER + mov r0, r8 + ldr r3, [r1] + mov r1, r7 + mov r2, r6 + str r5, [sp] + bl DealDamage + cmp r0, #0 + beq _02327AAC + ldr r1, _02327AEC ; =SKY_ATTACK_CRINGE_CHANCE + mov r0, r8 + ldrsh r2, [r1] + mov r1, r7 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327AAC + mov r2, #0 + mov r0, r8 + mov r1, r7 + mov r3, r2 + bl TryInflictCringeStatus +_02327AAC: + mov r0, r8 + bl EndTwoTurnMove + b _02327ADC +_02327AB8: + ldr r0, _02327AF0 ; =0x00000CD1 + bl StringFromId + str r0, [sp] + mov r0, r8 + mov r1, r8 + mov r3, r6 + mov r2, #3 + bl BeginChargedMove + mov r4, #1 +_02327ADC: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02327AE8: .word SKY_ATTACK_DAMAGE_MULTIPLIER +_02327AEC: .word SKY_ATTACK_CRINGE_CHANCE +#ifdef JAPAN +_02327AF0: .word 0x00000A11 +#else +_02327AF0: .word 0x00000CD1 +#endif + arm_func_end DoMoveSkyAttack + + arm_func_start DoMoveDamageFreeze15 +DoMoveDamageFreeze15: ; 0x02327AF4 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327B4C + ldr r1, _02327B58 ; =POWDER_SNOW_FREEZE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327B4C + mov r0, r6 + mov r1, r5 + mov r2, #0 + bl TryInflictFrozenStatus +_02327B4C: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327B58: .word POWDER_SNOW_FREEZE_CHANCE + arm_func_end DoMoveDamageFreeze15 + + arm_func_start DoMoveMeteorMash +DoMoveMeteorMash: ; 0x02327B5C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 +#ifdef EUROPE + mov r5, r1 +#endif + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327BCC + ldr r1, _02327BD8 ; =METEOR_MASH_BOOST_ATTACK_CHANCE + mov r0, r6 + ldrsh r2, [r1] +#ifdef EUROPE + mov r1, r5 +#else + mov r1, r6 +#endif + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327BCC + ldr r0, _02327BDC ; =ATK_STAT_IDX + ldr r5, [r6, #0xb4] + ldr r2, [r0] + mov r0, r6 + mov r1, r6 + mov r3, r4 + bl BoostOffensiveStat +#ifdef JAPAN + ldrb r0, [r5, #0x107] + cmp r0, #1 + movlo r0, r4 + strlob r0, [r5, #0x107] +#else + ldrb r0, [r5, #0x108] + cmp r0, #1 + movlo r0, r4 + strlob r0, [r5, #0x108] +#endif +_02327BCC: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327BD8: .word METEOR_MASH_BOOST_ATTACK_CHANCE +_02327BDC: .word ATK_STAT_IDX + arm_func_end DoMoveMeteorMash diff --git a/asm/overlay_29_02329898.s b/asm/overlay_29_02329898.s index d502ec21..b9a272fe 100644 --- a/asm/overlay_29_02329898.s +++ b/asm/overlay_29_02329898.s @@ -558,53 +558,3 @@ DoMoveTripleKick: ; 0x02329F78 .align 2, 0 _02329FB0: .word TRIPLE_KICK_SUCCESSIVE_HITS arm_func_end DoMoveTripleKick - - arm_func_start DoMoveSport -DoMoveSport: ; 0x02329FB4 - stmdb sp!, {r3, lr} - ldrh r0, [r2, #4] - cmp r0, #0xd4 - bne _02329FD0 - mov r0, #0 - bl ActivateSportCondition - b _02329FD8 -_02329FD0: - mov r0, #1 - bl ActivateSportCondition -_02329FD8: - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveSport - - arm_func_start DoMoveMudSlap -DoMoveMudSlap: ; 0x02329FE0 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _0232A03C - mov r2, r4 - mov r0, r6 - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _0232A03C - ldr r1, _0232A048 ; =ATK_STAT_IDX - mov r0, r6 - ldr r2, [r1] - mov r1, r5 - mov r3, #0 - bl LowerHitChanceStat -_0232A03C: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_0232A048: .word ATK_STAT_IDX - arm_func_end DoMoveMudSlap diff --git a/asm/overlay_29_02329FE0.s b/asm/overlay_29_02329FE0.s new file mode 100644 index 00000000..20decb8a --- /dev/null +++ b/asm/overlay_29_02329FE0.s @@ -0,0 +1,37 @@ + .include "asm/macros.inc" + .include "overlay_29_02329FE0.inc" + + .text + + arm_func_start DoMoveMudSlap +DoMoveMudSlap: ; 0x02329FE0 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _0232A03C + mov r2, r4 + mov r0, r6 + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _0232A03C + ldr r1, _0232A048 ; =ATK_STAT_IDX + mov r0, r6 + ldr r2, [r1] + mov r1, r5 + mov r3, #0 + bl LowerHitChanceStat +_0232A03C: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_0232A048: .word ATK_STAT_IDX + arm_func_end DoMoveMudSlap diff --git a/asm/overlay_29_0232A500.s b/asm/overlay_29_0232A524.s similarity index 97% rename from asm/overlay_29_0232A500.s rename to asm/overlay_29_0232A524.s index 0173bc8d..73f56518 100644 --- a/asm/overlay_29_0232A500.s +++ b/asm/overlay_29_0232A524.s @@ -1,21 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_0232A500.inc" + .include "overlay_29_0232A524.inc" .text - arm_func_start DoMoveDamage__0232A500 -DoMoveDamage__0232A500: ; 0x0232A500 - stmdb sp!, {r3, lr} - str r3, [sp] - mov r3, #0x100 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end DoMoveDamage__0232A500 - arm_func_start DoMoveSuperpower DoMoveSuperpower: ; 0x0232A524 stmdb sp!, {r4, r5, lr} diff --git a/asm/overlay_29_0232B8B0.s b/asm/overlay_29_0232B8B0.s deleted file mode 100644 index bb8a0de6..00000000 --- a/asm/overlay_29_0232B8B0.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_29_0232B8B0.inc" - - .text - - arm_func_start DoMoveDamage__0232B8B0 -DoMoveDamage__0232B8B0: ; 0x0232B8B0 - stmdb sp!, {r3, lr} - str r3, [sp] - mov r3, #0x100 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end DoMoveDamage__0232B8B0 diff --git a/asm/overlay_29_0232CE50.s b/asm/overlay_29_0232CE50.s deleted file mode 100644 index 9812fd64..00000000 --- a/asm/overlay_29_0232CE50.s +++ /dev/null @@ -1,35 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_29_0232CE50.inc" - - .text - - arm_func_start DoMoveVacuumCut -DoMoveVacuumCut: ; 0x0232CE50 - stmdb sp!, {r3, lr} - ldr ip, _0232CE78 ; =ov10_022C456C - str r3, [sp] - ldrsh r3, [ip] - bl ov29_02332F18 - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - .align 2, 0 -_0232CE78: .word ov10_022C456C - arm_func_end DoMoveVacuumCut - - arm_func_start DoMoveReviver -DoMoveReviver: ; 0x0232CE7C - stmdb sp!, {r3, lr} - ldr r2, _0232CE90 ; =0x00000F09 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -#ifdef JAPAN -_0232CE90: .word 0x00000C4B -#else -_0232CE90: .word 0x00000F09 -#endif - arm_func_end DoMoveReviver diff --git a/asm/overlay_29_0232CE7C.s b/asm/overlay_29_0232CE7C.s new file mode 100644 index 00000000..3a90606f --- /dev/null +++ b/asm/overlay_29_0232CE7C.s @@ -0,0 +1,19 @@ + .include "asm/macros.inc" + .include "overlay_29_0232CE7C.inc" + + .text + + arm_func_start DoMoveReviver +DoMoveReviver: ; 0x0232CE7C + stmdb sp!, {r3, lr} + ldr r2, _0232CE90 ; =0x00000F09 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +#ifdef JAPAN +_0232CE90: .word 0x00000C4B +#else +_0232CE90: .word 0x00000F09 +#endif + arm_func_end DoMoveReviver diff --git a/asm/overlay_29_0232DD88.s b/asm/overlay_29_0232DDAC.s similarity index 94% rename from asm/overlay_29_0232DD88.s rename to asm/overlay_29_0232DDAC.s index 6a789f96..68eff086 100644 --- a/asm/overlay_29_0232DD88.s +++ b/asm/overlay_29_0232DDAC.s @@ -1,21 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_0232DD88.inc" + .include "overlay_29_0232DDAC.inc" .text - arm_func_start DoMoveDamage__0232DD88 -DoMoveDamage__0232DD88: ; 0x0232DD88 - stmdb sp!, {r3, lr} - str r3, [sp] - mov r3, #0x100 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end DoMoveDamage__0232DD88 - arm_func_start DoMoveWorrySeed DoMoveWorrySeed: ; 0x0232DDAC stmdb sp!, {r4, r5, r6, lr} diff --git a/asm/overlay_29_0232E0F8.s b/asm/overlay_29_0232E130.s similarity index 80% rename from asm/overlay_29_0232E0F8.s rename to asm/overlay_29_0232E130.s index 76479611..0ffe67f2 100644 --- a/asm/overlay_29_0232E0F8.s +++ b/asm/overlay_29_0232E130.s @@ -1,26 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_0232E0F8.inc" + .include "overlay_29_0232E130.inc" .text - arm_func_start DoMoveFeint -DoMoveFeint: ; 0x0232E0F8 - stmdb sp!, {r3, r4, r5, lr} - str r3, [sp] - mov r3, #0x100 - mov r5, r0 - mov r4, r1 - bl DealDamage - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl EndProtectStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DoMoveFeint - arm_func_start DoMoveFlareBlitz DoMoveFlareBlitz: ; 0x0232E130 stmdb sp!, {r3, r4, r5, r6, r7, lr} diff --git a/asm/overlay_29_0232E2B8.s b/asm/overlay_29_0232E2B8.s index 55c88e9c..3f077b55 100644 --- a/asm/overlay_29_0232E2B8.s +++ b/asm/overlay_29_0232E2B8.s @@ -84,60 +84,3 @@ DoMoveLunarDance: ; 0x0232E368 _0232E3C8: .word HEALING_WISH_HP_RESTORATION _0232E3CC: .word 0x000003E7 arm_func_end DoMoveLunarDance - - arm_func_start DoMoveMiracleEye -DoMoveMiracleEye: ; 0x0232E3D0 - stmdb sp!, {r3, r4, r5, lr} - mov r2, #0 - mov r5, r0 - mov r4, r1 - bl TryInflictMiracleEyeStatus - mov r2, #1 - mov r0, r5 - mov r1, r4 - mov r3, r2 - bl ResetHitChanceStat - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DoMoveMiracleEye - - arm_func_start DoMoveWakeUpSlap -DoMoveWakeUpSlap: ; 0x0232E400 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r5, r1 - ldr ip, [r5, #0xb4] - mov r6, r0 - ldrb ip, [ip, #0xbd] - cmp ip, #1 - cmpne ip, #3 - cmpne ip, #5 - str r3, [sp] - bne _0232E468 - mov r0, r6 - mov r1, r5 - mov r3, #0x200 - bl DealDamage - cmp r0, #0 - movne r4, #1 - moveq r4, #0 - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, #1 - str r2, [sp] - and r4, r4, #0xff - bl EndSleepClassStatus - b _0232E480 -_0232E468: - mov r3, #0x100 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r4, r0, #0xff -_0232E480: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - arm_func_end DoMoveWakeUpSlap diff --git a/asm/overlay_29_0232E400.s b/asm/overlay_29_0232E400.s new file mode 100644 index 00000000..136ca6d8 --- /dev/null +++ b/asm/overlay_29_0232E400.s @@ -0,0 +1,45 @@ + .include "asm/macros.inc" + .include "overlay_29_0232E400.inc" + + .text + + arm_func_start DoMoveWakeUpSlap +DoMoveWakeUpSlap: ; 0x0232E400 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r5, r1 + ldr ip, [r5, #0xb4] + mov r6, r0 + ldrb ip, [ip, #0xbd] + cmp ip, #1 + cmpne ip, #3 + cmpne ip, #5 + str r3, [sp] + bne _0232E468 + mov r0, r6 + mov r1, r5 + mov r3, #0x200 + bl DealDamage + cmp r0, #0 + movne r4, #1 + moveq r4, #0 + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, #1 + str r2, [sp] + and r4, r4, #0xff + bl EndSleepClassStatus + b _0232E480 +_0232E468: + mov r3, #0x100 + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r4, r0, #0xff +_0232E480: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + arm_func_end DoMoveWakeUpSlap diff --git a/asm/overlay_29_0232E4A0.s b/asm/overlay_29_0232E4A0.s index bb4ddade..9c09c346 100644 --- a/asm/overlay_29_0232E4A0.s +++ b/asm/overlay_29_0232E4A0.s @@ -180,20 +180,3 @@ _0232E6D4: .align 2, 0 _0232E6DC: .word SPATK_STAT_IDX arm_func_end DoMoveDracoMeteor - - arm_func_start DoMoveRockPolish -DoMoveRockPolish: ; 0x0232E6E0 - stmdb sp!, {r3, r4, r5, lr} - mov r2, #0 - mov r5, r0 - mov r4, r1 - mov r3, r2 - bl BoostSpeedOneStage - mov r0, r5 - mov r1, r4 - mov r2, #0 - mov r3, #1 - bl BoostSpeedOneStage - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DoMoveRockPolish diff --git a/asm/overlay_29_02339138.s b/asm/overlay_29_02339138.s index de5f328d..a5d8643c 100644 --- a/asm/overlay_29_02339138.s +++ b/asm/overlay_29_02339138.s @@ -1264,7732 +1264,3 @@ _0233A1DC: bl ov29_02339F64 ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} arm_func_end ov29_0233A1BC - - arm_func_start SetMinimapDataE447 -SetMinimapDataE447: ; 0x0233A218 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetMinimapData - add r0, r0, #0xe000 - strb r4, [r0, #0x447] - ldmia sp!, {r4, pc} - arm_func_end SetMinimapDataE447 - -#ifdef EUROPE - arm_func_start GetMinimapDataE447 -GetMinimapDataE447: ; 0x0233AE00 - stmdb sp!, {r3, lr} - bl GetMinimapData - add r0, r0, #0xe000 - ldrb r0, [r0, #0x447] - ldmia sp!, {r3, pc} - arm_func_end GetMinimapDataE447 -#endif - - arm_func_start SetMinimapDataE448 -SetMinimapDataE448: ; 0x0233A230 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetMinimapData - add r0, r0, #0xe000 - strb r4, [r0, #0x448] - ldmia sp!, {r4, pc} - arm_func_end SetMinimapDataE448 - - arm_func_start ov29_0233A248 -ov29_0233A248: ; 0x0233A248 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r1, r4 - mov r0, #0 - bl ov29_0233A0E8 - cmp r4, #0 - bne _0233A274 - bl GetMinimapData - add r0, r0, #0xe000 - mov r1, #0 - strb r1, [r0, #0x447] -_0233A274: - cmp r4, #1 - ldmneia sp!, {r4, pc} - bl GetMinimapData - add r0, r0, #0xe000 - mov r1, #0 - strb r1, [r0, #0x448] - ldmia sp!, {r4, pc} - arm_func_end ov29_0233A248 - - arm_func_start InitWeirdMinimapMatrix -InitWeirdMinimapMatrix: ; 0x0233A290 - stmdb sp!, {r3, r4, r5, lr} - bl GetMinimapData - add r1, r0, #0xe000 - ldrb r1, [r1, #0x446] - cmp r1, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r4, #0 - mov r3, r4 - mov ip, r4 - mov r2, #0x1c -_0233A2B8: - mla r5, r4, r2, r0 - mov lr, ip -_0233A2C0: - add r1, r5, lr - add r1, r1, #0xe000 - add lr, lr, #1 - strb r3, [r1] - cmp lr, #0x38 - blt _0233A2C0 - add r4, r4, #1 - cmp r4, #0x20 - blt _0233A2B8 - add r0, r0, #0xe000 - strb r3, [r0, #0x446] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end InitWeirdMinimapMatrix - - arm_func_start InitMinimapDisplayTile -InitMinimapDisplayTile: ; 0x0233A2F0 - ldr r3, [r0] - ldmia r1, {r2, ip} - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0] - ldr r3, [r0, #4] - ldr r2, [r1, #8] - ldr ip, [r1, #0xc] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #4] - ldr r3, [r0, #8] - ldr r2, [r1, #0x10] - ldr ip, [r1, #0x14] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #8] - ldr r3, [r0, #0xc] - ldr r2, [r1, #0x18] - ldr ip, [r1, #0x1c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0xc] - ldr r3, [r0, #0x10] - ldr r2, [r1, #0x20] - ldr ip, [r1, #0x24] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x10] - ldr r3, [r0, #0x14] - ldr r2, [r1, #0x28] - ldr ip, [r1, #0x2c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x14] - ldr r3, [r0, #0x18] - ldr r2, [r1, #0x30] - ldr ip, [r1, #0x34] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x18] - ldr r3, [r0, #0x1c] - ldr r2, [r1, #0x38] - ldr ip, [r1, #0x3c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x1c] - ldr r3, [r0, #0x20] - ldr r2, [r1, #0x40] - ldr ip, [r1, #0x44] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x20] - ldr r3, [r0, #0x24] - ldr r2, [r1, #0x48] - ldr ip, [r1, #0x4c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x24] - ldr r3, [r0, #0x28] - ldr r2, [r1, #0x50] - ldr ip, [r1, #0x54] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x28] - ldr r3, [r0, #0x2c] - ldr r2, [r1, #0x58] - ldr ip, [r1, #0x5c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x2c] - ldr r3, [r0, #0x30] - ldr r2, [r1, #0x60] - ldr ip, [r1, #0x64] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x30] - ldr r3, [r0, #0x34] - ldr r2, [r1, #0x68] - ldr ip, [r1, #0x6c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x34] - ldr r3, [r0, #0x38] - ldr r2, [r1, #0x70] - ldr ip, [r1, #0x74] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x38] - ldr r3, [r0, #0x3c] - ldr r2, [r1, #0x78] - ldr ip, [r1, #0x7c] - and r1, r3, r2 - orr r1, ip, r1 - str r1, [r0, #0x3c] - bx lr - arm_func_end InitMinimapDisplayTile - - arm_func_start ov29_0233A470 -ov29_0233A470: ; 0x0233A470 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r4, #0 - add r2, r0, #0x21c0 - add r5, r0, #0xe000 - add ip, r2, #0xc000 - ldr r0, _0233A544 ; =ov29_0235377C - mov r6, r4 - b _0233A534 -_0233A490: - add lr, ip, r4, lsl #4 - add r2, lr, r1, lsl #2 - ldr r3, [r2, #4] - ldr sb, [ip, r4, lsl #4] - ldr r8, [r0, r1, lsl #2] - ldr r7, [r3] - add r2, sb, r8 - str r7, [sb, r8] - ldr r7, [r3, #4] - add r4, r4, #1 - str r7, [r2, #4] - ldr r7, [r3, #8] - str r7, [r2, #8] - ldr r7, [r3, #0xc] - str r7, [r2, #0xc] - ldr r7, [r3, #0x10] - str r7, [r2, #0x10] - ldr r7, [r3, #0x14] - str r7, [r2, #0x14] - ldr r7, [r3, #0x18] - str r7, [r2, #0x18] - ldr r7, [r3, #0x1c] - str r7, [r2, #0x1c] - ldr r7, [r3, #0x20] - str r7, [r2, #0x20] - ldr r7, [r3, #0x24] - str r7, [r2, #0x24] - ldr r7, [r3, #0x28] - str r7, [r2, #0x28] - ldr r7, [r3, #0x2c] - str r7, [r2, #0x2c] - ldr r7, [r3, #0x30] - str r7, [r2, #0x30] - ldr r7, [r3, #0x34] - str r7, [r2, #0x34] - ldr r7, [r3, #0x38] - str r7, [r2, #0x38] - ldr r3, [r3, #0x3c] - str r3, [r2, #0x3c] - ldr r2, [lr, #0xc] - strb r6, [r2] -_0233A534: - ldr r2, [r5, #0x440] - cmp r4, r2 - blt _0233A490 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0233A544: .word ov29_0235377C - arm_func_end ov29_0233A470 - - arm_func_start ov29_0233A548 -ov29_0233A548: ; 0x0233A548 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _0233A5E0 ; =MAP_COLOR_TABLE - ldr r7, _0233A5E4 ; =ov29_0235376C - mov r6, r1 - add r5, r2, r0, lsl #2 - mov r4, #0 -_0233A560: - cmp r4, #7 - bne _0233A5B0 - cmp r6, #0 - bne _0233A58C - add r0, r4, #0x100 - mov r1, r0, lsl #0x10 - mov r0, r5 - mov r2, r6 - mov r1, r1, asr #0x10 - bl ov29_0233A5E8 - b _0233A5D0 -_0233A58C: - ldr r1, [r7, #8] - add r0, r4, #0x100 - ldr r3, [r1, #4] - mov r1, r0, lsl #0x10 - mov r2, r6 - add r0, r3, r4, lsl #2 - mov r1, r1, asr #0x10 - bl ov29_0233A5E8 - b _0233A5D0 -_0233A5B0: - ldr r1, [r7, #8] - add r0, r4, #0x100 - ldr r3, [r1, #4] - mov r1, r0, lsl #0x10 - mov r2, r6 - add r0, r3, r4, lsl #2 - mov r1, r1, asr #0x10 - bl ov29_0233A5E8 -_0233A5D0: - add r4, r4, #1 - cmp r4, #0x10 - blt _0233A560 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233A5E0: .word MAP_COLOR_TABLE -_0233A5E4: .word ov29_0235376C - arm_func_end ov29_0233A548 - - arm_func_start ov29_0233A5E8 -ov29_0233A5E8: ; 0x0233A5E8 - stmdb sp!, {r4, lr} - ldr ip, _0233A620 ; =ov29_0235352C - mov r3, #0xc - ldr ip, [ip] - mov lr, r0 - add r0, ip, #0x20 - mla r4, r2, r3, r0 - ldr r0, [r4, #8] - mov r2, r1 - mov r1, lr - bl sub_0200C008 - ldr r0, [r4, #8] - bl sub_0200A174 - ldmia sp!, {r4, pc} - .align 2, 0 -_0233A620: .word ov29_0235352C - arm_func_end ov29_0233A5E8 - - arm_func_start LoadFixedRoomDataVeneer -LoadFixedRoomDataVeneer: ; 0x0233A624 - ldr ip, _0233A62C ; =LoadFixedRoomData - bx ip - .align 2, 0 -_0233A62C: .word LoadFixedRoomData - arm_func_end LoadFixedRoomDataVeneer - - arm_func_start UnloadFixedRoomData -UnloadFixedRoomData: ; 0x0233A630 - stmdb sp!, {r3, lr} - bl ov29_02343DD8 - ldr r0, _0233A650 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x12000 -#ifdef JAPAN - str r1, [r0, #0xa00] -#else - str r1, [r0, #0xaa4] -#endif - ldmia sp!, {r3, pc} - .align 2, 0 -_0233A650: .word DUNGEON_PTR - arm_func_end UnloadFixedRoomData - - arm_func_start IsNormalFloor -IsNormalFloor: ; 0x0233A654 - stmdb sp!, {r3, lr} - bl IsHiddenStairsFloor - cmp r0, #0 - bne _0233A6C4 - bl IsGoldenChamber - cmp r0, #0 - bne _0233A6C4 - mov r0, #0xb - bl IsCurrentMissionType - cmp r0, #0 - bne _0233A6C4 - mov r0, #0xa - mov r1, #6 - bl IsCurrentMissionTypeExact - cmp r0, #0 - bne _0233A6C4 - mov r0, #0xc - bl IsCurrentMissionType - cmp r0, #0 - bne _0233A6C4 - ldr r0, _0233A6D4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrb r0, [r0, #0x36] -#else - ldrb r0, [r0, #0xda] -#endif - cmp r0, #0 - beq _0233A6CC - cmp r0, #0xa5 - bhs _0233A6CC -_0233A6C4: - mov r0, #0 - ldmia sp!, {r3, pc} -_0233A6CC: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0233A6D4: .word DUNGEON_PTR - arm_func_end IsNormalFloor - - arm_func_start GenerateFloor -GenerateFloor: ; 0x0233A6D8 -#ifdef JAPAN -#define GENERATE_FLOOR_OFFSET -0xA4 -#else -#define GENERATE_FLOOR_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x54 - ldr r2, _0233AE64 ; =DUNGEON_PTR - mov r8, #0 - ldr r3, [r2] - ldr r0, _0233AE68 ; =0x000286B2 - add r1, r3, #0x12000 - str r8, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] - ldr r1, [r2] - add sb, r3, r0 - add r0, r1, #0x3f00 - strh r8, [r0, #0xc2 + GENERATE_FLOOR_OFFSET] - bl LoadFixedRoomDataVeneer - bl ov29_02343DC4 - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r1, [r1] - mov r3, r8 - add r1, r1, #0x12000 - str r0, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] - strb r3, [r2, #3] - strb r3, [r2, #1] - strb r3, [r2, #7] - bl ResetHiddenStairsSpawn - bl IsOutlawMonsterHouseFloor - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r3, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r2, [r1] - mov r1, sb - add r2, r2, #0xc4 + GENERATE_FLOOR_OFFSET - strb r0, [r3, #8] - add r0, r2, #0x4000 - bl GetHiddenStairsType - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r1, [r1] - str r0, [r2, #0x2c] - add r0, r1, #0x4000 - ldrsh r1, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] - ldr r0, _0233AE70 ; =SECONDARY_TERRAIN_TYPES - ldrb r0, [r0, r1] - mov r1, #0xff - cmp r0, #2 - moveq r2, #1 - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - movne r2, r8 - strb r2, [r0, #4] - strb r1, [r0, #2] - mov r1, #0 - strb r1, [r0, #6] - ldrb r0, [sb, #7] - bl GetFinalKecleonShopSpawnChance - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - strh r0, [r1, #0xc] - ldrb r0, [sb, #8] - strh r0, [r1, #0x10] - ldrb r0, [r1, #8] - cmp r0, #0 - movne r0, #0x64 - strneh r0, [r1, #0x10] - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r1, #1 - strb r1, [r0] - sub r1, r1, #2 - str r1, [r0, #0x30] - str r1, [r0, #0x38] - str r1, [r0, #0x34] - str r1, [r0, #0x3c] - bl ResetFloor - bl IsNormalFloor - cmp r0, #0 - bne _0233A810 - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x700 - strh r1, [r0, #0x86] - b _0233A828 -_0233A810: - ldrb r0, [sb, #6] - bl abs - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x700 - strh r0, [r1, #0x86] -_0233A828: - ldr r3, _0233AE64 ; =DUNGEON_PTR - mov r7, #0 - ldr r0, [r3] - ldr r1, _0233AE74 ; =0x00012AFA - add r0, r0, #0x4000 - strb r7, [r0, #0xc5 + GENERATE_FLOOR_OFFSET] - ldr r0, [r3] - ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS - add r0, r0, #0x4000 - strb r7, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] - ldr r0, [r3] - strh r7, [r0, r1] - ldr r0, [r3] - add r0, r0, #0x4000 - str r7, [r0, #0xcc + GENERATE_FLOOR_OFFSET] - ldrb r0, [sb, #0xc] - str r0, [r2, #0x18] - b _0233AD3C -_0233A870: - ldr r1, _0233AE64 ; =DUNGEON_PTR - mov r0, #0 - str r0, [sp] - ldr r0, [r1] - add r0, r0, #0xc4 + GENERATE_FLOOR_OFFSET - add r0, r0, #0x4000 - bl ResetImportantSpawnPositions - mov r6, #0 - mvn r5, #0 - ldr r4, _0233AE64 ; =DUNGEON_PTR - b _0233AC50 -_0233A89C: - ldr r0, [sp] - cmp r0, #0 - beq _0233A8C8 - ldr r0, [r4] - add r0, r0, #0x4000 - ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] - bl IsNotFullFloorFixedRoom - cmp r0, #0 - beq _0233AC58 - mov r0, #0 - str r0, [sp] -_0233A8C8: - ldr r0, [r4] - cmp r6, #1 - add r0, r0, #0x4000 - strh r6, [r0, #0xde + GENERATE_FLOOR_OFFSET] - ldrge r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - movge r1, #0 - strge r1, [r0, #0x18] - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r1, #0 - strb r1, [r0, #5] - strh r5, [r0, #0x20] - strh r5, [r0, #0x22] - bl ResetFloor - ldr r0, [r4] - add r0, r0, #0xcc00 - strh r5, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] - ldr r0, [r4] - add r0, r0, #0xcc00 - strh r5, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] - ldr r0, [r4] - add r1, r0, #0x4000 - mov r0, #0 - strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] - ldr r0, [r4] - add r0, r0, #0x4000 - ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] - cmp r0, #0 - beq _0233A954 - mov r1, sb - bl GenerateFixedRoom - cmp r0, #0 - bne _0233AC58 - mov r0, #1 - str r0, [sp] - b _0233AB78 -_0233A954: - mov r0, #2 - ldrb sl, [sb] - mov fp, #0x20 - str r0, [sp, #4] - str r0, [sp, #8] - b _0233A9DC -_0233A96C: - cmp sl, #8 - mov r0, #2 - beq _0233A998 - mov r1, #9 - bl DungeonRandRange - str r0, [sp, #8] - mov r0, #2 - mov r1, #8 - bl DungeonRandRange - str r0, [sp, #4] - b _0233A9B4 -_0233A998: - mov r1, #5 - bl DungeonRandRange - str r0, [sp, #8] - mov r0, #2 - mov r1, #4 - bl DungeonRandRange - str r0, [sp, #4] -_0233A9B4: - ldr r0, [sp, #8] - cmp r0, #6 - ldrle r0, [sp, #4] - cmple r0, #4 - ble _0233A9E4 - subs fp, fp, #1 - moveq r0, #4 - streq r0, [sp, #8] - streq r0, [sp, #4] - beq _0233A9E4 -_0233A9DC: - cmp fp, #0 - bne _0233A96C -_0233A9E4: - ldr r1, [sp, #8] - mov r0, #0x38 - bl _s32_div_f - cmp r0, #7 - movle r0, #1 - strle r0, [sp, #8] - ldr r1, [sp, #4] - mov r0, #0x20 - bl _s32_div_f - ldr r1, [r4] - cmp r0, #7 - add r2, r1, #0x4000 - mov r1, #0 - strb r1, [r2, #0xc4 + GENERATE_FLOOR_OFFSET] - ldr r1, [r4] - movle r0, #1 - add r2, r1, #0x4000 - mov r1, #0xff - strb r1, [r2, #0xc9 + GENERATE_FLOOR_OFFSET] - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - strle r0, [sp, #4] - and r0, sl, #0xf - cmp r0, #0xb - str sl, [r1, #0x28] - addls pc, pc, r0, lsl #2 - b _0233AAD4 -_0233AA4C: ; jump table - b _0233AAD4 ; case 0 - b _0233AA7C ; case 1 - b _0233AAEC ; case 2 - b _0233AB04 ; case 3 - b _0233AB14 ; case 4 - b _0233AB24 ; case 5 - b _0233AB3C ; case 6 - b _0233AB4C ; case 7 - b _0233AAD4 ; case 8 - b _0233AB58 ; case 9 - b _0233AB64 ; case 10 - b _0233AAA8 ; case 11 -_0233AA7C: - mov r0, #2 - bl DungeonRandInt - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r2, #1 - strb r2, [r1, #6] - add r1, r0, #2 - mov r0, #4 - mov r2, sb - bl GenerateStandardFloor - mov r8, #1 - b _0233AB78 -_0233AAA8: - mov r0, #2 - bl DungeonRandInt - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r2, #2 - strb r2, [r1, #6] - add r1, r0, #2 - mov r0, #4 - mov r2, sb - bl GenerateStandardFloor - mov r8, #1 - b _0233AB78 -_0233AAD4: - ldr r0, [sp, #8] - ldr r1, [sp, #4] - mov r2, sb - bl GenerateStandardFloor - mov r8, #1 - b _0233AB78 -_0233AAEC: - bl GenerateOneRoomMonsterHouseFloor - ldr r0, [r4] - add r1, r0, #0x4000 - mov r0, #1 - strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] - b _0233AB78 -_0233AB04: - mov r0, sb - bl GenerateOuterRingFloor - mov r8, #1 - b _0233AB78 -_0233AB14: - mov r0, sb - bl GenerateCrossroadsFloor - mov r8, #1 - b _0233AB78 -_0233AB24: - bl GenerateTwoRoomsWithMonsterHouseFloor - ldr r0, [r4] - add r1, r0, #0x4000 - mov r0, #1 - strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] - b _0233AB78 -_0233AB3C: - mov r0, sb - bl GenerateLineFloor - mov r8, #1 - b _0233AB78 -_0233AB4C: - mov r0, sb - bl GenerateCrossFloor - b _0233AB78 -_0233AB58: - mov r0, sb - bl GenerateBeetleFloor - b _0233AB78 -_0233AB64: - ldr r0, [sp, #8] - ldr r1, [sp, #4] - mov r2, sb - bl GenerateOuterRoomsFloor - mov r8, #1 -_0233AB78: - bl ResetInnerBoundaryTileRows - bl EnsureImpassableTilesAreWalls - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #5] - cmp r0, #0 - bne _0233AC4C - mov sl, #0 - mov r2, sl -_0233AB98: - mov r1, #0 - add r0, sp, #0x14 - strb r1, [r0, r2] - add r2, r2, #1 - cmp r2, #0x40 - blt _0233AB98 - mov r0, r1 - str r0, [sp, #0xc] -_0233ABB8: - mov fp, #0 -_0233ABBC: - ldr r0, [sp, #0xc] - mov r1, fp - bl GetTile - str r0, [sp, #0x10] - bl GetTileTerrain - cmp r0, #1 - bne _0233ABFC - ldr r0, [sp, #0x10] - ldrb r2, [r0, #7] - cmp r2, #0xf0 - bhi _0233ABFC - cmp r2, #0x40 - movlo r1, #1 - addlo r0, sp, #0x14 - add sl, sl, #1 - strlob r1, [r0, r2] -_0233ABFC: - add fp, fp, #1 - cmp fp, #0x20 - blt _0233ABBC - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x38 - blt _0233ABB8 - mov r1, #0 - mov r2, r1 -_0233AC24: - add r0, sp, #0x14 - ldrb r0, [r0, r2] - add r2, r2, #1 - cmp r0, #0 - addne r1, r1, #1 - cmp r2, #0x40 - blt _0233AC24 - cmp sl, #0x1e - cmpge r1, #2 - bge _0233AC58 -_0233AC4C: - add r6, r6, #1 -_0233AC50: - cmp r6, #0xa - blt _0233A89C -_0233AC58: - cmp r6, #0xa - bne _0233AC88 - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mvn r1, #0 - strh r1, [r0, #0x20] - strh r1, [r0, #0x22] - bl GenerateOneRoomMonsterHouseFloor - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x4000 - strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] -_0233AC88: - bl FinalizeJunctions - cmp r8, #0 - beq _0233ACA0 - mov r1, sb - mov r0, #1 - bl GenerateSecondaryTerrainFormations -_0233ACA0: - bl DungeonRand100 - ldrb r1, [sb, #0x19] - cmp r0, r1 - movlt r0, #1 - movge r0, #0 - and r4, r0, #0xff - mov r0, sb - mov r1, r4 - bl MarkNonEnemySpawns - mov r0, sb - mov r1, r4 - bl MarkEnemySpawns - bl ResolveInvalidSpawns - ldr r0, _0233AE64 ; =DUNGEON_PTR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrsh r2, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] - cmp r2, r1 - ldrnesh r0, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] - cmpne r0, r1 - beq _0233AD38 - bl GetFloorType - cmp r0, #1 - beq _0233AD44 - ldr r0, _0233AE64 ; =DUNGEON_PTR - mvn r2, #0 - ldr r0, [r0] - add r1, r0, #0xcc00 - ldrsh r0, [r1, #0xe4 + GENERATE_FLOOR_OFFSET] - cmp r0, r2 - ldrnesh r1, [r1, #0xe6 + GENERATE_FLOOR_OFFSET] - cmpne r1, r2 - beq _0233AD38 - mov r2, #0 - bl StairsAlwaysReachable - cmp r0, #0 - bne _0233AD44 -_0233AD38: - add r7, r7, #1 -_0233AD3C: - cmp r7, #0xa - blt _0233A870 -_0233AD44: - cmp r7, #0xa - bne _0233AD98 - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mvn r1, #0 - strh r1, [r0, #0x20] - strh r1, [r0, #0x22] - bl ResetFloor - bl GenerateOneRoomMonsterHouseFloor - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x4000 - strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] - bl FinalizeJunctions - mov r0, sb - mov r1, #0 - bl MarkNonEnemySpawns - mov r0, sb - mov r1, #0 - bl MarkEnemySpawns - bl ResolveInvalidSpawns -_0233AD98: - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldrsh r1, [r0, #0x20] - cmp r1, #0 - ldrgesh r0, [r0, #0x22] - cmpge r0, #0 - blt _0233ADCC - bl GetKecleonIdToSpawnByFloor - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r2, r0 - ldrsh r0, [r1, #0x20] - ldrsh r1, [r1, #0x22] - mov r3, #0 - bl MarkShopkeeperSpawn -_0233ADCC: - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x30] - cmp r0, #0 - ldrlt r0, _0233AE64 ; =DUNGEON_PTR - movlt r1, #0 - blt _0233ADF4 - mov r0, sb - bl ov29_023427E4 - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #1 -_0233ADF4: - ldr r0, [r0] - mov r2, #0x38 - add r0, r0, #0x4000 - strb r1, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] - mov r0, #0 - mov r1, r0 - mov r3, #0x20 - bl FlagHallwayJunctions - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #4] - cmp r0, #0 - beq _0233AE28 - bl ConvertSecondaryTerrainToChasms -_0233AE28: - ldr r0, _0233AE64 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 - ldrsh r0, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] - sub r0, r0, #0x1a - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - bhi _0233AE58 - bl ConvertWallsToChasms -_0233AE58: - bl UnloadFixedRoomData - add sp, sp, #0x54 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233AE64: .word DUNGEON_PTR -_0233AE68: .word 0x000286B2 + GENERATE_FLOOR_OFFSET -_0233AE6C: .word FLOOR_GENERATION_STATUS -_0233AE70: .word SECONDARY_TERRAIN_TYPES -_0233AE74: .word 0x00012AFA + GENERATE_FLOOR_OFFSET - arm_func_end GenerateFloor - - arm_func_start GetTileTerrain -GetTileTerrain: ; 0x0233AE78 - ldrh r0, [r0] - and r0, r0, #3 - bx lr - arm_func_end GetTileTerrain - - arm_func_start DungeonRand100 -DungeonRand100: ; 0x0233AE84 - ldr ip, _0233AE90 ; =DungeonRandInt - mov r0, #0x64 - bx ip - .align 2, 0 -_0233AE90: .word DungeonRandInt - arm_func_end DungeonRand100 - - arm_func_start ClearHiddenStairs -ClearHiddenStairs: ; 0x0233AE94 - stmdb sp!, {r3, lr} - ldr r0, _0233AF04 ; =HIDDEN_STAIRS_SPAWN_BLOCKED - ldrb r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS - mvn r2, #0 - ldrsh r0, [r1, #0x1c] - cmp r0, r2 - ldrnesh r1, [r1, #0x1e] - cmpne r1, r2 - beq _0233AEFC - bl GetTileSafe - mov r2, #0 - strh r2, [r0] - ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS - strh r2, [r0, #2] - ldrsh r0, [r1, #0x1c] - ldrsh r1, [r1, #0x1e] - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233AEFC: - bl ResetHiddenStairsSpawn - ldmia sp!, {r3, pc} - .align 2, 0 -_0233AF04: .word HIDDEN_STAIRS_SPAWN_BLOCKED -_0233AF08: .word FLOOR_GENERATION_STATUS - arm_func_end ClearHiddenStairs - - arm_func_start FlagHallwayJunctions -FlagHallwayJunctions: ; 0x0233AF0C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov fp, r1 - mov sb, r2 - mov r8, r3 - b _0233B01C -_0233AF24: - mov r7, fp - sub r6, sl, #1 - b _0233B010 -_0233AF30: - mov r0, sl - mov r1, r7 - mov r4, #0 - bl GetTileSafe - mov r5, r0 - ldrh r0, [r5] - bic r0, r0, #4 - strh r0, [r5] - ldrb r0, [r5, #7] - cmp r0, #0xff - ldreqh r0, [r5] - andeq r0, r0, #3 - cmpeq r0, #1 - bne _0233B00C - cmp sl, #0 - ble _0233AF90 - mov r0, r6 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, r4 - addeq r4, r0, #1 -_0233AF90: - cmp r7, #0 - ble _0233AFB4 - mov r0, sl - sub r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - addeq r4, r4, #1 -_0233AFB4: - cmp sl, #0x36 - bge _0233AFD8 - mov r1, r7 - add r0, sl, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - addeq r4, r4, #1 -_0233AFD8: - cmp sl, #0x1e - bge _0233AFFC - mov r0, sl - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - addeq r4, r4, #1 -_0233AFFC: - cmp r4, #3 - ldrgeh r0, [r5] - orrge r0, r0, #8 - strgeh r0, [r5] -_0233B00C: - add r7, r7, #1 -_0233B010: - cmp r7, r8 - blt _0233AF30 - add sl, sl, #1 -_0233B01C: - cmp sl, sb - blt _0233AF24 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end FlagHallwayJunctions - - arm_func_start GenerateStandardFloor -GenerateStandardFloor: ; 0x0233B028 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r5, r1 - mov r6, r0 - mov r4, r2 - add r0, sp, #0x44 - add r1, sp, #8 - mov r2, r6 - mov r3, r5 - bl GetGridPositions - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl InitDungeonGrid - ldrsb r3, [r4, #1] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl AssignRooms - add r1, sp, #8 - str r1, [sp] - ldrb r3, [r4, #0xd] - add r0, sp, #0x80 - mov r1, r6 - str r3, [sp, #4] - mov r2, r5 - add r3, sp, #0x44 - bl CreateRoomsAndAnchors - mov r0, r6 - bl DungeonRandInt - mov r7, r0 - mov r0, r5 - bl DungeonRandInt - stmia sp, {r0, r4} - mov r3, r7 - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl AssignGridCellConnections - add r1, sp, #8 - str r1, [sp] - mov r0, #0 - str r0, [sp, #4] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - add r3, sp, #0x44 - bl CreateGridCellConnections - add r1, sp, #8 - str r1, [sp] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - add r3, sp, #0x44 - bl EnsureConnectedGrid - ldrb r3, [r4, #9] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateMazeRoom - ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0xc] - mov r1, r6 - mov r2, r5 - bl GenerateKecleonShop - ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0x10] - mov r1, r6 - mov r2, r5 - bl GenerateMonsterHouse - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateExtraHallways - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateRoomImperfections - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateSecondaryStructures - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233B18C: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateStandardFloor - - arm_func_start GenerateOuterRingFloor -GenerateOuterRingFloor: ; 0x0233B190 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2f4 - sub sp, sp, #0x1800 - mov r1, #5 - mov r2, #0x1c - add r3, r2, #0x33 - add r3, r3, r3, lsr #31 - mov r8, r3, asr #1 - mov fp, #0x33 - mov sl, #0x38 - mov r7, #2 - mov r6, #7 - mov r5, #0x10 - mov r3, #0x1e - str r2, [sp, #0x64] - add r4, r1, #0x1c - str r0, [sp, #8] - add r0, r4, r4, lsr #31 - mov sb, r0, asr #1 - mov r0, #0 - mov r4, #0x19 - str r0, [sp, #0x58] - str r1, [sp, #0x5c] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - str fp, [sp, #0x6c] - str sl, [sp, #0x70] - str sb, [sp, #0x60] - str r8, [sp, #0x68] - str r7, [sp, #0x1c] - str r6, [sp, #0x20] - str r5, [sp, #0x24] - str r4, [sp, #0x28] - str r3, [sp, #0x2c] - bl InitDungeonGrid - mov r3, #0 - ldr r0, _0233B614 ; =0x000001C2 - add r1, sp, #0x94 - mov r4, r3 -_0233B230: - mla r2, r3, r0, r1 - strb r4, [r2, #0xa] - add r3, r3, #1 - strb r4, [r2, #0x64] - cmp r3, #6 - blt _0233B230 - add r2, sp, #0x94 - mov r1, #0 - mov r0, #0x1e -_0233B254: - mla r3, r4, r0, r2 - strb r1, [r3, #0xa] - add r4, r4, #1 - strb r1, [r3, #0x8d4] - cmp r4, #4 - blt _0233B254 - mov r7, #1 - ldr r1, _0233B614 ; =0x000001C2 - mov r3, r7 - mov r5, r7 - add r4, sp, #0x94 - mov r0, #0x1e -_0233B284: - mla r6, r7, r1, r4 - mov r8, r5 -_0233B28C: - mla r2, r8, r0, r6 - add r8, r8, #1 - strb r3, [r2, #0xa] - cmp r8, #3 - blt _0233B28C - add r7, r7, #1 - cmp r7, #5 - blt _0233B284 - mov sl, #0 - str sl, [sp, #0xc] -_0233B2B4: - add r1, sp, #0x94 - mov r0, #0x1e - mla r7, sl, r0, r1 - add r0, sp, #0x1c - add r0, r0, sl, lsl #2 - mov sb, #0 - str r0, [sp, #0x10] -_0233B2D0: - ldr r0, _0233B614 ; =0x000001C2 - mla r0, sb, r0, r7 - ldrb r0, [r0, #0xa] - cmp r0, #0 - add r0, sp, #0x58 - add r1, r0, sb, lsl #2 - beq _0233B3F8 - ldr r8, [r0, sb, lsl #2] - add r0, sp, #0x1c - ldr r1, [r1, #4] - ldr r4, [r0, sl, lsl #2] - sub r0, r1, r8 - sub r5, r0, #3 - ldr r0, [sp, #0x10] - ldr r1, [r0, #4] - mov r0, #5 - sub r1, r1, r4 - sub r6, r1, #3 - mov r1, r5 - bl DungeonRandRange - mov fp, r0 - mov r0, #4 - mov r1, r6 - bl DungeonRandRange - str r0, [sp, #0x14] - sub r0, r5, fp - bl DungeonRandInt - add r1, r8, #2 - add r8, r1, r0 - ldr r0, [sp, #0x14] - sub r0, r6, r0 - bl DungeonRandInt - add r1, r4, #2 - add r4, r1, r0 - ldr r0, [sp, #0x14] - add fp, r8, fp - add r5, r4, r0 - ldr r0, _0233B614 ; =0x000001C2 - mul r0, sb, r0 - strh r8, [r7, r0] - add r0, r7, r0 - strh fp, [r0, #4] - strh r4, [r0, #2] - strh r5, [r0, #6] - ldr r0, [sp, #0xc] - and r0, r0, #0xff - str r0, [sp, #0x18] - b _0233B3E0 -_0233B390: - mov r6, r4 - b _0233B3D4 -_0233B398: - mov r0, r8 - mov r1, r6 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r6 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r8 - bl GetTileSafe - ldr r1, [sp, #0x18] - add r6, r6, #1 - strb r1, [r0, #7] -_0233B3D4: - cmp r6, r5 - blt _0233B398 - add r8, r8, #1 -_0233B3E0: - cmp r8, fp - blt _0233B390 - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - b _0233B4A0 -_0233B3F8: - ldr r2, [r0, sb, lsl #2] - ldr r1, [r1, #4] - add r0, r2, #1 - sub r1, r1, r2 - add r2, sp, #0x1c - ldr r3, [r2, sl, lsl #2] - ldr r2, [sp, #0x10] - sub r1, r1, #3 - ldr r2, [r2, #4] - add r1, r0, r1 - sub r2, r2, r3 - add r4, r3, #1 - sub r5, r2, #3 - bl DungeonRandRange - add r1, r4, r5 - mov r5, r0 - mov r0, r4 - bl DungeonRandRange - mov r4, r0 - ldr r0, _0233B614 ; =0x000001C2 - mul r0, sb, r0 - strh r5, [r7, r0] - add r1, r7, r0 - add r0, r5, #1 - strh r0, [r1, #4] - strh r4, [r1, #2] - add r0, r4, #1 - strh r0, [r1, #6] - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - mov r1, #0xff - strb r1, [r0, #7] -_0233B4A0: - add sb, sb, #1 - cmp sb, #6 - blt _0233B2D0 - add sl, sl, #1 - cmp sl, #4 - blt _0233B2B4 - mov r1, #1 - mov r0, #6 - strb r1, [sp, #0xaa] - strb r1, [sp, #0x26b] - strb r1, [sp, #0x26c] - strb r1, [sp, #0x42d] - strb r1, [sp, #0x42e] - strb r1, [sp, #0x5ef] - strb r1, [sp, #0x5f0] - strb r1, [sp, #0x7b1] - strb r1, [sp, #0x7b2] - strb r1, [sp, #0x973] - strb r1, [sp, #0xa8] - strb r1, [sp, #0xc5] - strb r1, [sp, #0xc6] - strb r1, [sp, #0xe3] - strb r1, [sp, #0xe4] - strb r1, [sp, #0x101] - strb r1, [sp, #0x104] - strb r1, [sp, #0x2c5] - strb r1, [sp, #0x2c6] - strb r1, [sp, #0x487] - strb r1, [sp, #0x488] - strb r1, [sp, #0x649] - strb r1, [sp, #0x64a] - strb r1, [sp, #0x80b] - strb r1, [sp, #0x80c] - strb r1, [sp, #0x9cd] - strb r1, [sp, #0x972] - strb r1, [sp, #0x98f] - strb r1, [sp, #0x990] - strb r1, [sp, #0x9ad] - strb r1, [sp, #0x9ae] - strb r1, [sp, #0x9cb] - bl DungeonRandInt - mov r4, r0 - mov r0, #4 - bl DungeonRandInt - mov r3, r4 - str r0, [sp] - ldr r4, [sp, #8] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - str r4, [sp, #4] - bl AssignGridCellConnections - add r1, sp, #0x1c - str r1, [sp] - mov r0, #0 - str r0, [sp, #4] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - add r3, sp, #0x58 - bl CreateGridCellConnections - add r1, sp, #0x1c - str r1, [sp] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - add r3, sp, #0x58 - bl EnsureConnectedGrid - ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x94 - ldrsh r3, [r1, #0xc] - mov r1, #6 - mov r2, #4 - bl GenerateKecleonShop - ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x94 - ldrsh r3, [r1, #0x10] - mov r1, #6 - mov r2, #4 - bl GenerateMonsterHouse - ldr r0, [sp, #8] - mov r1, #6 - ldrb r3, [r0, #0x13] - add r0, sp, #0x94 - mov r2, #4 - bl GenerateExtraHallways - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - bl GenerateRoomImperfections - add sp, sp, #0x2f4 - add sp, sp, #0x1800 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233B614: .word 0x000001C2 -_0233B618: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateOuterRingFloor - - arm_func_start GenerateCrossroadsFloor -GenerateCrossroadsFloor: ; 0x0233B61C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2f8 - sub sp, sp, #0x1800 - mov r1, #0 - mov r2, #0xb - str r0, [sp, #8] - mov fp, #0x16 - mov sl, #0x21 - mov sb, #0x2c - mov r8, #0x38 - mov r7, #1 - mov r6, #9 - mov r5, #0x10 - mov r4, #0x17 - mov r3, #0x1f - str r1, [sp, #0x5c] - str r2, [sp, #0x60] - add r0, sp, #0x98 - mov r1, #5 - mov r2, #4 - str fp, [sp, #0x64] - str sl, [sp, #0x68] - str sb, [sp, #0x6c] - str r8, [sp, #0x70] - str r7, [sp, #0x20] - str r6, [sp, #0x24] - str r5, [sp, #0x28] - str r4, [sp, #0x2c] - str r3, [sp, #0x30] - bl InitDungeonGrid - ldr r0, _0233BA74 ; =0x000001C2 - mov r4, #0 - add r2, sp, #0x98 - mov r1, r7 -_0233B6A4: - mla r3, r4, r0, r2 - strb r1, [r3, #0xa] - add r4, r4, #1 - strb r1, [r3, #0x64] - cmp r4, #5 - blt _0233B6A4 - mov r3, #0 - add r1, sp, #0x98 - mov r7, #1 - mov r0, #0x1e -_0233B6CC: - mla r2, r3, r0, r1 - strb r7, [r2, #0xa] - add r3, r3, #1 - strb r7, [r2, #0x712] - cmp r3, #4 - blt _0233B6CC - ldr r1, _0233BA74 ; =0x000001C2 - mov r4, #0 - mov r5, #1 - add r3, sp, #0x98 - mov r0, #0x1e -_0233B6F8: - mla r6, r7, r1, r3 - mov r8, r5 -_0233B700: - mla r2, r8, r0, r6 - add r8, r8, #1 - strb r4, [r2, #0xa] - cmp r8, #3 - blt _0233B700 - add r7, r7, #1 - cmp r7, #4 - blt _0233B6F8 - mov r0, #1 - mov sl, r4 - strb r0, [sp, #0xa0] - strb r0, [sp, #0x7a8] - strb r0, [sp, #0xfa] - strb r0, [sp, #0x802] -_0233B738: - add r1, sp, #0x98 - mov r0, #0x1e - mla r7, sl, r0, r1 - add r0, sp, #0x20 - add r0, r0, sl, lsl #2 - mov sb, #0 - str r0, [sp, #0x10] -_0233B754: - ldr r0, _0233BA74 ; =0x000001C2 - mla r1, sb, r0, r7 - ldrb r0, [r1, #8] - cmp r0, #0 - bne _0233B938 - ldrb r0, [r1, #0xa] - cmp r0, #0 - add r0, sp, #0x5c - add r1, r0, sb, lsl #2 - beq _0233B890 - ldr r8, [r0, sb, lsl #2] - add r0, sp, #0x20 - ldr r1, [r1, #4] - ldr r5, [r0, sl, lsl #2] - sub r0, r1, r8 - sub r6, r0, #3 - ldr r0, [sp, #0x10] - ldr r1, [r0, #4] - mov r0, #5 - sub r1, r1, r5 - sub fp, r1, #3 - mov r1, r6 - bl DungeonRandRange - str r0, [sp, #0x14] - mov r0, #4 - mov r1, fp - bl DungeonRandRange - str r0, [sp, #0x18] - ldr r0, [sp, #0x14] - sub r0, r6, r0 - bl DungeonRandInt - add r1, r8, #2 - add r8, r1, r0 - ldr r0, [sp, #0x18] - sub r0, fp, r0 - bl DungeonRandInt - add r1, r5, #2 - add r5, r1, r0 - ldr r0, [sp, #0x14] - add r0, r8, r0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x18] - add fp, r5, r0 - ldr r0, _0233BA74 ; =0x000001C2 - mul r0, sb, r0 - strh r8, [r7, r0] - add r1, r7, r0 - ldr r0, [sp, #0xc] - strh r0, [r1, #4] - strh r5, [r1, #2] - and r0, r4, #0xff - strh fp, [r1, #6] - str r0, [sp, #0x1c] - b _0233B87C -_0233B82C: - mov r6, r5 - b _0233B870 -_0233B834: - mov r0, r8 - mov r1, r6 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r6 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r8 - bl GetTileSafe - ldr r1, [sp, #0x1c] - add r6, r6, #1 - strb r1, [r0, #7] -_0233B870: - cmp r6, fp - blt _0233B834 - add r8, r8, #1 -_0233B87C: - ldr r0, [sp, #0xc] - cmp r8, r0 - blt _0233B82C - add r4, r4, #1 - b _0233B938 -_0233B890: - ldr r2, [r0, sb, lsl #2] - ldr r1, [r1, #4] - add r0, r2, #1 - sub r1, r1, r2 - add r2, sp, #0x20 - ldr r3, [r2, sl, lsl #2] - ldr r2, [sp, #0x10] - sub r1, r1, #3 - ldr r2, [r2, #4] - add r1, r0, r1 - sub r2, r2, r3 - add r5, r3, #1 - sub r6, r2, #3 - bl DungeonRandRange - add r1, r5, r6 - mov r6, r0 - mov r0, r5 - bl DungeonRandRange - mov r5, r0 - ldr r0, _0233BA74 ; =0x000001C2 - mul r0, sb, r0 - strh r6, [r7, r0] - add r1, r7, r0 - add r0, r6, #1 - strh r0, [r1, #4] - strh r5, [r1, #2] - add r0, r5, #1 - strh r0, [r1, #6] - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r5 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r6 - bl GetTileSafe - mov r1, #0xff - strb r1, [r0, #7] -_0233B938: - add sb, sb, #1 - cmp sb, #5 - blt _0233B754 - add sl, sl, #1 - cmp sl, #4 - blt _0233B738 - mov r7, #1 - ldr r2, _0233BA74 ; =0x000001C2 - mov r0, r7 - mov r5, #0 - add r4, sp, #0x98 - mov r1, #0x1e -_0233B968: - mla r6, r7, r2, r4 - mov r8, r5 -_0233B970: - mla r3, r8, r1, r6 - strb r0, [r3, #0x14] - add r8, r8, #1 - strb r0, [r3, #0x31] - cmp r8, #3 - blt _0233B970 - add r7, r7, #1 - cmp r7, #4 - blt _0233B968 - ldr r1, _0233BA74 ; =0x000001C2 - mov r4, #1 - mov r6, #0 - add r5, sp, #0x98 - mov r2, #0x1e -_0233B9A8: - mla r7, r0, r2, r5 - mov r8, r6 -_0233B9B0: - mla r3, r8, r1, r7 - strb r4, [r3, #0x16] - add r8, r8, #1 - strb r4, [r3, #0x1d7] - cmp r8, #4 - blt _0233B9B0 - add r0, r0, #1 - cmp r0, #3 - blt _0233B9A8 - add r1, sp, #0x20 - str r1, [sp] - add r0, sp, #0x98 - add r3, sp, #0x5c - mov r1, #5 - mov r2, #4 - str r4, [sp, #4] - bl CreateGridCellConnections - add r4, sp, #0x20 - add r0, sp, #0x98 - add r3, sp, #0x5c - mov r1, #5 - mov r2, #4 - str r4, [sp] - bl EnsureConnectedGrid - ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x98 - ldrsh r3, [r1, #0xc] - mov r1, #5 - mov r2, #4 - bl GenerateKecleonShop - ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x98 - ldrsh r3, [r1, #0x10] - mov r1, #5 - mov r2, #4 - bl GenerateMonsterHouse - ldr r0, [sp, #8] - mov r1, #5 - ldrb r3, [r0, #0x13] - add r0, sp, #0x98 - mov r2, #4 - bl GenerateExtraHallways - add r0, sp, #0x98 - mov r1, #5 - mov r2, #4 - bl GenerateRoomImperfections - add sp, sp, #0x2f8 - add sp, sp, #0x1800 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233BA74: .word 0x000001C2 -_0233BA78: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateCrossroadsFloor - - arm_func_start GenerateLineFloor -GenerateLineFloor: ; 0x0233BA7C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r7, #0 - mov r6, #0xb - mov lr, #0x16 - mov ip, #0x21 - mov r5, #0x2c - mov r3, #0x38 - mov r2, #4 - mov r1, #0xf - mov r4, r0 - str r2, [sp, #8] - str r1, [sp, #0xc] - add r0, sp, #0x80 - str r7, [sp, #0x44] - str r6, [sp, #0x48] - str lr, [sp, #0x4c] - str ip, [sp, #0x50] - str r5, [sp, #0x54] - str r3, [sp, #0x58] - mov r1, #5 - mov r2, #1 - bl InitDungeonGrid - ldrsb r3, [r4, #1] - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl AssignRooms - add r1, sp, #8 - str r1, [sp] - ldrb r2, [r4, #0xd] - add r0, sp, #0x80 - add r3, sp, #0x44 - str r2, [sp, #4] - mov r1, #5 - mov r2, #1 - bl CreateRoomsAndAnchors - mov r0, #5 - bl DungeonRandInt - mov r5, r0 - mov r0, #1 - bl DungeonRandInt - stmia sp, {r0, r4} - mov r3, r5 - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl AssignGridCellConnections - add r0, sp, #8 - mov r2, #1 - stmia sp, {r0, r2} - add r0, sp, #0x80 - mov r1, #5 - add r3, sp, #0x44 - bl CreateGridCellConnections - add r1, sp, #8 - str r1, [sp] - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - add r3, sp, #0x44 - bl EnsureConnectedGrid - ldr r3, _0233BBD8 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0xc] - mov r1, #5 - mov r2, #1 - bl GenerateKecleonShop - ldr r1, _0233BBD8 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r1, #0x10] - mov r1, #5 - mov r2, #1 - bl GenerateMonsterHouse - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl GenerateExtraHallways - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl GenerateRoomImperfections - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233BBD8: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateLineFloor - - arm_func_start GenerateCrossFloor -GenerateCrossFloor: ; 0x0233BBDC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r1, #3 - mov r8, #0xb - mov r4, r0 - mov r7, #0x16 - mov r6, #0x21 - mov r5, #0x2c - mov lr, #2 - mov ip, #0x14 - mov r3, #0x1e - add r0, sp, #0x80 - mov r2, r1 - str r8, [sp, #0x44] - str r7, [sp, #0x48] - str r6, [sp, #0x4c] - str r5, [sp, #0x50] - str lr, [sp, #8] - str r8, [sp, #0xc] - str ip, [sp, #0x10] - str r3, [sp, #0x14] - bl InitDungeonGrid - mov r5, #0 - ldr r1, _0233BD6C ; =0x000001C2 - mov r3, #1 - mov lr, r5 - add ip, sp, #0x80 - mov r0, #0x1e -_0233BC50: - mla r7, r5, r1, ip - mov r6, lr -_0233BC58: - mla r2, r6, r0, r7 - add r6, r6, #1 - strb r3, [r2, #0xa] - cmp r6, #3 - blt _0233BC58 - add r5, r5, #1 - cmp r5, #3 - blt _0233BC50 - add r0, sp, #8 - strb r3, [sp, #0x88] - strb r3, [sp, #0x40c] - mov r1, #3 - strb r3, [sp, #0xc4] - strb r3, [sp, #0x448] - str r0, [sp] - ldrb ip, [r4, #0xd] - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateRoomsAndAnchors - mov ip, #1 - mov r1, #3 - add r0, sp, #8 - strb ip, [sp, #0xb4] - strb ip, [sp, #0x275] - strb ip, [sp, #0x276] - strb ip, [sp, #0x437] - strb ip, [sp, #0x256] - strb ip, [sp, #0x273] - strb ip, [sp, #0x274] - strb ip, [sp, #0x291] - str r0, [sp] - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateGridCellConnections - mov r1, #3 - add ip, sp, #8 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp] - bl EnsureConnectedGrid - ldr r1, _0233BD70 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r1, #0xc] - mov r1, #3 - mov r2, r1 - bl GenerateKecleonShop - ldr r3, _0233BD70 ; =FLOOR_GENERATION_STATUS - mov r1, #3 - ldrsh r3, [r3, #0x10] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateMonsterHouse - mov r1, #3 - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateExtraHallways - mov r1, #3 - add r0, sp, #0x80 - mov r2, r1 - bl GenerateRoomImperfections - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0233BD6C: .word 0x000001C2 -_0233BD70: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateCrossFloor - - arm_func_start GenerateBeetleFloor -GenerateBeetleFloor: ; 0x0233BD74 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r1, #3 - mov r4, r0 - mov sb, #5 - mov r8, #0xf - mov r7, #0x23 - mov r6, #0x32 - mov r5, #2 - mov lr, #0xb - mov ip, #0x14 - mov r3, #0x1e - add r0, sp, #0x80 - mov r2, r1 - str sb, [sp, #0x44] - str r8, [sp, #0x48] - str r7, [sp, #0x4c] - str r6, [sp, #0x50] - str r5, [sp, #8] - str lr, [sp, #0xc] - str ip, [sp, #0x10] - str r3, [sp, #0x14] - bl InitDungeonGrid - mov r5, #0 - ldr r1, _0233BF28 ; =0x000001C2 - mov r3, #1 - mov lr, r5 - add ip, sp, #0x80 - mov r0, #0x1e -_0233BDEC: - mla r7, r5, r1, ip - mov r6, lr -_0233BDF4: - mla r2, r6, r0, r7 - add r6, r6, #1 - strb r3, [r2, #0xa] - cmp r6, #3 - blt _0233BDF4 - add r5, r5, #1 - cmp r5, #3 - blt _0233BDEC - add r0, sp, #8 - str r0, [sp] - ldrb ip, [r4, #0xd] - mov r1, #3 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateRoomsAndAnchors - mov r3, #0 - add r0, sp, #0x80 - mov ip, #1 - mov r1, #0x1e -_0233BE48: - mla r2, r3, r1, r0 - strb ip, [r2, #0x16] - strb ip, [r2, #0x1d7] - strb ip, [r2, #0x1d8] - add r3, r3, #1 - strb ip, [r2, #0x399] - cmp r3, #3 - blt _0233BE48 - add r2, sp, #8 - str r2, [sp] - mov r1, #3 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateGridCellConnections - mov r0, #1 - add r3, sp, #0x80 - mov r2, r0 - mov r1, #0 - bl MergeRoomsVertically - add r3, sp, #0x80 - mov r0, #1 - mov r1, #0 - mov r2, #2 - bl MergeRoomsVertically - add r1, sp, #8 - str r1, [sp] - mov r1, #3 - add r0, sp, #0x80 - mov r2, r1 - add r3, sp, #0x44 - bl EnsureConnectedGrid - ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS - mov r1, #3 - ldrsh r3, [r3, #0xc] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateKecleonShop - ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS - mov r1, #3 - ldrsh r3, [r3, #0x10] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateMonsterHouse - mov r1, #3 - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateExtraHallways - mov r1, #3 - add r0, sp, #0x80 - mov r2, r1 - bl GenerateRoomImperfections - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0233BF28: .word 0x000001C2 -_0233BF2C: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateBeetleFloor - - arm_func_start MergeRoomsVertically -MergeRoomsVertically: ; 0x0233BF30 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - mov r5, #0x1e - add r4, r5, #0x1a4 - add r2, r1, r2 - mul r7, r0, r4 - mov sl, r3 - mul r8, r2, r5 - add fp, sl, r7 - ldrsh r0, [fp, r8] - mul r6, r1, r5 - str r0, [sp] - ldrsh r0, [fp, r6] - ldr r1, [sp] - cmp r0, r1 - add r1, sl, #4 - add r1, r1, r7 - strlt r0, [sp] - str r1, [sp, #0x14] - ldrsh r2, [r1, r8] - ldrsh sb, [r1, r6] - add r1, sl, #2 - add r1, r1, r7 - str r1, [sp, #0x10] - ldrsh r1, [r1, r6] - cmp sb, r2 - movle sb, r2 - str r1, [sp, #8] - add r1, sl, #6 - add r1, r1, r7 - str r1, [sp, #4] - ldr r2, [sp, #4] - ldr r1, [sp, #8] - ldrsh r2, [r2, r8] - str r2, [sp, #0xc] - bl GetTile - ldrb r0, [r0, #7] - ldr r5, [sp] - and r0, r0, #0xff - str r0, [sp, #0x18] - b _0233C01C -_0233BFD4: - ldr r4, [sp, #8] - b _0233C00C -_0233BFDC: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x18] - strb r1, [r0, #7] -_0233C00C: - ldr r0, [sp, #0xc] - cmp r4, r0 - blt _0233BFDC - add r5, r5, #1 -_0233C01C: - cmp r5, sb - blt _0233BFD4 - ldr r0, [sp] - add r3, sl, #0x12 - strh r0, [fp, r6] - ldr r0, [sp, #0x14] - add r2, sl, r7 - strh sb, [r0, r6] - ldr r1, [sp, #8] - ldr r0, [sp, #0x10] - strh r1, [r0, r6] - ldr r1, [sp, #0xc] - ldr r0, [sp, #4] - strh r1, [r0, r6] - add r0, r3, r7 - mov r3, #1 - strb r3, [r0, r8] - strb r3, [r0, r6] - add r0, r2, r8 - mov r1, #0 - strb r1, [r0, #0xb] - strb r3, [r0, #0x11] - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end MergeRoomsVertically - - arm_func_start GenerateOuterRoomsFloor -GenerateOuterRoomsFloor: ; 0x0233C07C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r5, r1 - mov r6, r0 - mov r4, r2 - add r0, sp, #0x44 - add r1, sp, #8 - mov r2, r6 - mov r3, r5 - bl GetGridPositions - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl InitDungeonGrid - mov sb, #0 - mov r3, #1 - mov r8, sb - add r7, sp, #0x80 - mov r0, #0x1e - ldr r1, _0233C308 ; =0x000001C2 - b _0233C0F8 -_0233C0D4: - mla fp, sb, r1, r7 - mov sl, r8 - b _0233C0EC -_0233C0E0: - mla r2, sl, r0, fp - strb r3, [r2, #0xa] - add sl, sl, #1 -_0233C0EC: - cmp sl, r5 - blt _0233C0E0 - add sb, sb, #1 -_0233C0F8: - cmp sb, r6 - blt _0233C0D4 - mov fp, #1 - sub r3, r5, #1 - sub r2, r6, #1 - mov r8, fp - mov lr, fp - add sb, sp, #0x80 - mov r0, #0x1e - ldr r1, _0233C308 ; =0x000001C2 - b _0233C148 -_0233C124: - mla sl, fp, r1, sb - mov ip, lr - b _0233C13C -_0233C130: - mla r7, ip, r0, sl - strb r8, [r7, #8] - add ip, ip, #1 -_0233C13C: - cmp ip, r3 - blt _0233C130 - add fp, fp, #1 -_0233C148: - cmp fp, r2 - blt _0233C124 - add r1, sp, #8 - str r1, [sp] - ldrb r7, [r4, #0xd] - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r1, r6 - mov r2, r5 - str r7, [sp, #4] - bl CreateRoomsAndAnchors - mov r2, #1 - add r3, sp, #0x80 - sub r1, r5, #1 - mov r0, #0x1e - mla r7, r1, r0, r3 - mov r8, #0 - sub r1, r6, #2 - sub r0, r6, #1 - mov fp, r2 - ldr sb, _0233C308 ; =0x000001C2 - b _0233C1D4 -_0233C1A0: - cmp r8, #0 - mulne ip, r8, sb - addne sl, r3, ip - strneb r2, [sl, #0x16] - addne sl, r7, ip - strneb r2, [sl, #0x16] - cmp r8, r1 - mullt ip, r8, sb - addlt sl, r3, ip - strltb fp, [sl, #0x1d7] - addlt sl, r7, ip - strltb fp, [sl, #0x1d7] - add r8, r8, #1 -_0233C1D4: - cmp r8, r0 - blt _0233C1A0 - ldr r2, _0233C308 ; =0x000001C2 - add r1, sp, #0x80 - mla r2, r0, r2, r1 - mov r0, #1 - mov ip, #0x1e - mov r3, #0 - sub sl, r5, #2 - sub lr, r5, #1 - mov r8, r0 - mov fp, ip - b _0233C23C -_0233C208: - cmp r3, #0 - mulne sb, r3, ip - addne r7, r1, sb - strneb r0, [r7, #0x13] - addne r7, r2, sb - strneb r0, [r7, #0x13] - cmp r3, sl - mullt sb, r3, fp - addlt r7, r1, sb - strltb r8, [r7, #0x14] - addlt r7, r2, sb - strltb r8, [r7, #0x14] - add r3, r3, #1 -_0233C23C: - cmp r3, lr - blt _0233C208 - add r7, sp, #8 - str r7, [sp] - mov r7, #0 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r1, r6 - mov r2, r5 - str r7, [sp, #4] - bl CreateGridCellConnections - add r7, sp, #8 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r1, r6 - mov r2, r5 - str r7, [sp] - bl EnsureConnectedGrid - ldrb r3, [r4, #9] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateMazeRoom - ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0xc] - mov r1, r6 - mov r2, r5 - bl GenerateKecleonShop - ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0x10] - mov r1, r6 - mov r2, r5 - bl GenerateMonsterHouse - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateExtraHallways - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateRoomImperfections - mov r1, r6 - mov r2, r5 - add r0, sp, #0x80 - bl GenerateSecondaryStructures - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233C308: .word 0x000001C2 -_0233C30C: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateOuterRoomsFloor - - arm_func_start IsNotFullFloorFixedRoom -IsNotFullFloorFixedRoom: ; 0x0233C310 - cmp r0, #0 - ble _0233C324 - cmp r0, #0xa5 - movlt r0, #0 - bxlt lr -_0233C324: - mov r0, #1 - bx lr - arm_func_end IsNotFullFloorFixedRoom - - arm_func_start GenerateFixedRoom -GenerateFixedRoom: ; 0x0233C32C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2f8 - sub sp, sp, #0x1800 - ldr r2, _0233C764 ; =DUNGEON_PTR - str r1, [sp, #0x10] - ldr r2, [r2] - mov sl, r0 - add r1, r2, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa00] -#else - ldr r1, [r1, #0xaa4] -#endif - ldr r1, [r1, sl, lsl #2] - ldrh r4, [r1] - ldrh r5, [r1, #2] - cmp r4, #0 - cmpne r5, #0 - bne _0233C374 - bl GenerateOneRoomMonsterHouseFloor - mov r0, #0 - b _0233C758 -_0233C374: - bl IsNotFullFloorFixedRoom - cmp r0, #0 - bne _0233C590 - ldr r0, _0233C764 ; =DUNGEON_PTR -#ifdef JAPAN - ldr r2, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED - ldr r4, [r0] - ldr r1, _0233C76C ; =FLOOR_GENERATION_STATUS - add r0, r4, #0x12000 - ldr r3, [r0, #0xa00] - add r4, r4, #0xcc00 - ldr r5, [r3, sl, lsl #2] - mov r3, #0 - ldrh r7, [r5] - ldrh r6, [r5, #2] - mov sb, #5 - add fp, r7, #5 - strh r7, [r4, #0x90] - strh r6, [r4, #0x92] - ldr r0, [r0, #0xa00] - ldr r0, [r0, sl, lsl #2] - add r0, r0, #6 - str r0, [r2, #4] - add r0, r6, #5 - strh r3, [r1, #0xa] - str r0, [sp, #0x1c] -#else - ldr r4, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED - ldr r0, [r0] - ldr r3, _0233C76C ; =FLOOR_GENERATION_STATUS - add r2, r0, #0x12000 - ldr r5, [r2, #0xaa4] - add r1, r0, #0xcd00 - ldr r6, [r5, sl, lsl #2] - add r0, r0, #0xcc00 - ldrh r7, [r6] - ldrh r6, [r6, #2] - mov r5, #0 - mov sb, #5 - strh r7, [r1, #0x34] - strh r6, [r1, #0x36] - ldr r1, [r2, #0xaa4] - add fp, r6, #5 - ldr r1, [r1, sl, lsl #2] - str r0, [sp, #0x1c] - add r1, r1, #6 - str r1, [r4, #4] - strh r5, [r3, #0xa] - add r4, r7, #5 -#endif - b _0233C450 -_0233C3E0: - mov r0, sb, lsl #0x10 - mov r8, #5 - mov r5, r0, asr #0x10 - b _0233C444 -_0233C3F0: - bl GetNextFixedRoomAction - str r0, [sp, #0x18] - mov r0, r8 - mov r1, sb - bl GetTileSafe - ldrh ip, [r0] - ldr r1, [sp, #0x18] - mov r2, r8 - orr ip, ip, #0x100 - strh ip, [r0] - mov ip, #0 - strb ip, [r0, #6] - mov ip, #1 - mov r3, sb - str ip, [sp] - bl PlaceFixedRoomTile - cmp r0, #0 -#ifdef JAPAN - strneh r8, [r4, #0x40] - strneh r5, [r4, #0x42] -#else - ldrne r0, [sp, #0x1c] - strneh r8, [r0, #0xe4] - strneh r5, [r0, #0xe6] -#endif - add r8, r8, #1 -_0233C444: -#ifdef JAPAN - cmp r8, fp -#else - cmp r8, r4 -#endif - blt _0233C3F0 - add sb, sb, #1 -_0233C450: -#ifdef JAPAN - ldr r0, [sp, #0x1c] - cmp sb, r0 -#else - cmp sb, fp -#endif - blt _0233C3E0 - mov r8, #0 - add r4, r6, #5 - ldr sb, _0233C76C ; =FLOOR_GENERATION_STATUS - add r5, r7, #5 - mov r6, r8 -_0233C46C: - mov r7, r6 -_0233C470: - cmp r7, #5 - blt _0233C490 - cmp r7, r5 - bge _0233C490 - cmp r8, #5 - blt _0233C490 - cmp r8, r4 - blt _0233C4D4 -_0233C490: - mov r0, r7 - mov r1, r8 - bl GetTileSafe - ldrh r1, [r0] - orr r1, r1, #0x10 - strh r1, [r0] - ldrb r1, [sb, #4] - cmp r1, #0 - ldrh r1, [r0] - biceq r1, r1, #3 - streqh r1, [r0] - beq _0233C4D4 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #3 - strh r1, [r0] -_0233C4D4: - add r7, r7, #1 - cmp r7, #0x38 - blt _0233C470 - add r8, r8, #1 - cmp r8, #0x20 - blt _0233C46C - cmp sl, #4 - bne _0233C534 - mov r5, #5 - mov r4, #2 -_0233C4FC: - mov r6, r4 -_0233C500: - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - add r6, r6, #1 - cmp r6, #5 - orr r1, r1, #0x10 - bic r1, r1, #3 - strh r1, [r0] - blt _0233C500 - add r5, r5, #1 - cmp r5, #0x10 - ble _0233C4FC -_0233C534: - bl IsCurrentTilesetBackground - cmp r0, #0 - beq _0233C584 - mov r6, #0 - mov r4, r6 -_0233C548: - mov r5, r4 -_0233C54C: - mov r0, r5 - mov r1, r6 - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - tst r1, #3 - ldreqh r1, [r0] - orreq r1, r1, #0x10 - streqh r1, [r0] - cmp r5, #0x38 - blt _0233C54C - add r6, r6, #1 - cmp r6, #0x20 - blt _0233C548 -_0233C584: - bl FinalizeJunctions - mov r0, #1 - b _0233C758 -_0233C590: - add r1, r4, #4 - mov r0, #0x38 - bl _s32_div_f - mov r6, r0 - cmp r6, #2 - add r1, r5, #4 - mov r0, #0x20 - movlt r6, #1 - bl _s32_div_f - mov r7, r0 - cmp r7, #2 - movlt r7, #1 - mov r1, #0 - str r1, [sp, #0x14] - add r0, sp, #0x20 - add r1, sp, #0x5c - mov r2, r6 - mov r3, r7 - ldr r8, [sp, #0x14] - bl GetGridPositions - add r0, sp, #0x98 - mov r1, r6 - mov r2, r7 - bl InitDungeonGrid - ldr r3, [sp, #0x10] - add r0, sp, #0x98 - ldrsb r3, [r3, #1] - mov r1, r6 - mov r2, r7 - bl AssignRooms - mov sb, #0 - mov r3, #1 - mov lr, sb - add fp, sp, #0x98 - mov r0, #0x1e - ldr r1, _0233C770 ; =0x000001C2 - b _0233C648 -_0233C624: - mla ip, sb, r1, fp - mov r8, lr - b _0233C63C -_0233C630: - mla r2, r8, r0, ip - strb r3, [r2, #0x1b] - add r8, r8, #1 -_0233C63C: - cmp r8, r7 - blt _0233C630 - add sb, sb, #1 -_0233C648: - cmp sb, r6 - blt _0233C624 - mov fp, #0 - b _0233C69C -_0233C658: - mov r0, r6 - bl DungeonRandInt - mov sb, r0 - mov r0, r7 - bl DungeonRandInt - mov r8, r0 - ldr r1, _0233C770 ; =0x000001C2 - add r0, sp, #0x98 - mla r1, sb, r1, r0 - mov r0, #0x1e - mla r0, r8, r0, r1 - ldrb r1, [r0, #0xa] - mla r0, r6, r8, sb - str r0, [sp, #0x14] - cmp r1, #0 - bne _0233C6A4 - add fp, fp, #1 -_0233C69C: - cmp fp, #0x40 - blt _0233C658 -_0233C6A4: - add r1, sp, #0x5c - str r1, [sp] - ldr r1, [sp, #0x14] - add r0, sp, #0x98 - stmib sp, {r1, r4} - add r3, sp, #0x20 - mov r1, r6 - mov r2, r7 - str r5, [sp, #0xc] - bl ov29_0234217C - cmp r6, #1 - cmpeq r7, #1 - beq _0233C738 - ldr r4, [sp, #0x10] - str r8, [sp] - add r0, sp, #0x98 - mov r1, r6 - mov r2, r7 - mov r3, sb - str r4, [sp, #4] - bl AssignGridCellConnections - add r4, sp, #0x5c - str r4, [sp] - mov r4, #1 - add r0, sp, #0x98 - add r3, sp, #0x20 - mov r1, r6 - mov r2, r7 - str r4, [sp, #4] - bl CreateGridCellConnections - add r0, sp, #0x5c - str r0, [sp] - mov r1, r6 - add r0, sp, #0x98 - mov r2, r7 - add r3, sp, #0x20 - bl EnsureConnectedGrid -_0233C738: - ldr r0, _0233C770 ; =0x000001C2 - add r2, sp, #0x98 - mla r0, sb, r0, r2 - mov r1, #0x1e - mla r0, r8, r1, r0 - mov r1, sl - bl ov29_02342594 - mov r0, #0 -_0233C758: - add sp, sp, #0x2f8 - add sp, sp, #0x1800 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233C764: .word DUNGEON_PTR -_0233C768: .word HIDDEN_STAIRS_SPAWN_BLOCKED -_0233C76C: .word FLOOR_GENERATION_STATUS -_0233C770: .word 0x000001C2 - arm_func_end GenerateFixedRoom - - arm_func_start GenerateOneRoomMonsterHouseFloor -GenerateOneRoomMonsterHouseFloor: ; 0x0233C774 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0xa60 - sub sp, sp, #0x1000 - mov r1, #1 - add r0, sp, #0 - mov r2, r1 - bl InitDungeonGrid - mov r5, #2 - mov r1, #1 - mov r0, #0 - mov r3, #0x36 - mov r2, #0x1e - strh r5, [sp] - strh r3, [sp, #4] - strh r5, [sp, #2] - strh r2, [sp, #6] - strb r1, [sp, #0xa] - strb r1, [sp, #0xb] - strb r0, [sp, #8] - mov r6, r0 - b _0233C818 -_0233C7C8: - ldrsh r4, [sp, #2] - b _0233C808 -_0233C7D0: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - strb r6, [r0, #7] - add r4, r4, #1 -_0233C808: - ldrsh r0, [sp, #6] - cmp r4, r0 - blt _0233C7D0 - add r5, r5, #1 -_0233C818: - ldrsh r0, [sp, #4] - cmp r5, r0 - blt _0233C7C8 - mov r1, #1 - add r0, sp, #0 - mov r2, r1 - rsb r3, r1, #0x3e8 - bl GenerateMonsterHouse - add sp, sp, #0xa60 - add sp, sp, #0x1000 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end GenerateOneRoomMonsterHouseFloor - - arm_func_start GenerateTwoRoomsWithMonsterHouseFloor -GenerateTwoRoomsWithMonsterHouseFloor: ; 0x0233C844 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2e4 - sub sp, sp, #0x1800 - mov r1, #2 - mov r5, #0x1c - mov r4, #0x36 - mov r3, #0x1e - str r5, [sp, #0x4c] - add r0, sp, #0x84 - mov r2, #1 - str r1, [sp, #0x48] - str r4, [sp, #0x50] - str r1, [sp, #0xc] - str r3, [sp, #0x10] - mov r5, #0 - bl InitDungeonGrid - mov r6, r5 -_0233C888: - add r1, sp, #0x48 - add r0, r1, r6, lsl #2 - ldr sb, [r1, r6, lsl #2] - ldr r1, [r0, #4] - ldr sl, [sp, #0xc] - ldr r0, [sp, #0x10] - sub r1, r1, sb - sub r7, r1, #3 - sub r0, r0, sl - sub r8, r0, #3 - mov r1, r7 - mov r0, #0xa - bl DungeonRandRange - mov r4, r0 - mov r1, r8 - mov r0, #0x10 - bl DungeonRandRange - mov fp, r0 - sub r0, r7, r4 - bl DungeonRandInt - add r1, sb, #1 - add r7, r1, r0 - sub r0, r8, fp - bl DungeonRandInt - ldr r1, _0233C9E4 ; =0x000001C2 - add r2, sl, #1 - add r8, r2, r0 - mul r1, r6, r1 - add r0, sp, #0x84 - add r2, r0, r1 - mov r0, #1 - strb r0, [r2, #0xa] - add r0, sp, #0x84 - strh r7, [r0, r1] - add r0, r7, r4 - strh r0, [r2, #4] - strh r8, [r2, #2] - add sb, r8, fp - str r0, [sp, #8] - strh sb, [r2, #6] - and r4, r5, #0xff - b _0233C97C -_0233C930: - mov sl, r8 - b _0233C970 -_0233C938: - mov r0, r7 - mov r1, sl - bl GetTileSafe - ldrh r2, [r0] - mov r1, sl - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r7 - bl GetTileSafe - strb r4, [r0, #7] - add sl, sl, #1 -_0233C970: - cmp sl, sb - blt _0233C938 - add r7, r7, #1 -_0233C97C: - ldr r0, [sp, #8] - cmp r7, r0 - blt _0233C930 - add r6, r6, #1 - cmp r6, #2 - add r5, r5, #1 - blt _0233C888 - mov r2, #1 - add r1, sp, #0xc - strb r2, [sp, #0x9a] - strb r2, [sp, #0x25b] - str r1, [sp] - mov r4, #0 - add r0, sp, #0x84 - add r3, sp, #0x48 - mov r1, #2 - str r4, [sp, #4] - bl CreateGridCellConnections - mov r2, #1 - add r0, sp, #0x84 - rsb r3, r2, #0x3e8 - mov r1, #2 - bl GenerateMonsterHouse - add sp, sp, #0x2e4 - add sp, sp, #0x1800 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233C9E4: .word 0x000001C2 - arm_func_end GenerateTwoRoomsWithMonsterHouseFloor - - arm_func_start GenerateExtraHallways -GenerateExtraHallways: ; 0x0233C9E8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - movs sl, r3 - str r0, [sp] - str r1, [sp, #4] - str r2, [sp, #8] - beq _0233CF70 - mov r5, #0 - b _0233CF68 -_0233CA0C: - ldr r0, [sp, #4] - bl DungeonRandInt - mov r4, r0 - ldr r0, [sp, #8] - bl DungeonRandInt - mov sb, r0 - ldr r1, _0233CF78 ; =0x000001C2 - ldr r0, [sp] - mla r1, r4, r1, r0 - mov r0, #0x1e - mla r6, sb, r0, r1 - ldrb r0, [r6, #0xa] - cmp r0, #0 - ldrneb r0, [r6, #0xb] - cmpne r0, #0 - beq _0233CF64 - ldrb r0, [r6, #8] - cmp r0, #0 - ldreqb r0, [r6, #0x10] - cmpeq r0, #0 - bne _0233CF64 - ldrsh r0, [r6] - ldrsh r1, [r6, #4] - bl DungeonRandRange - mov r8, r0 - ldrsh r0, [r6, #2] - ldrsh r1, [r6, #6] - bl DungeonRandRange - mov r7, r0 - mov r0, #4 - bl DungeonRandInt - mov r6, r0, lsl #1 - ldr r0, [sp, #8] - mov ip, #0 - sub fp, r0, #1 - ldr r0, [sp, #4] - mov r3, #2 - sub r2, r0, #1 - mov r1, #4 - mov r0, #6 - mov lr, ip -_0233CAB0: - cmp r6, #0 - bne _0233CAC0 - cmp sb, fp - movge r6, r3 -_0233CAC0: - cmp r6, #2 - bne _0233CAD0 - cmp r4, r2 - movge r6, r1 -_0233CAD0: - cmp r6, #4 - bne _0233CAE0 - cmp sb, #0 - movle r6, r0 -_0233CAE0: - cmp r6, #6 - bne _0233CAF0 - cmp r4, #0 - movle r6, lr -_0233CAF0: - add ip, ip, #1 - cmp ip, #3 - blt _0233CAB0 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrb sb, [r0, #7] - ldr r0, _0233CF7C ; =DIRECTIONS_XY - mov r4, r6, lsl #2 - add fp, r0, r6, lsl #2 -_0233CB18: - mov r0, r8 - mov r1, r7 - bl GetTile - ldrb r0, [r0, #7] - cmp sb, r0 - ldreq r0, _0233CF7C ; =DIRECTIONS_XY - ldreqsh r1, [r0, r4] - ldreqsh r0, [fp, #2] - addeq r8, r8, r1 - addeq r7, r7, r0 - beq _0233CB18 - ldr fp, _0233CF7C ; =DIRECTIONS_XY - mov sb, r6, lsl #2 - add r4, fp, r6, lsl #2 -_0233CB50: - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - ldreqsh r1, [fp, sb] - ldreqsh r0, [r4, #2] - addeq r8, r8, r1 - addeq r7, r7, r0 - beq _0233CB50 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #2 - beq _0233CF64 - sub sb, r8, #2 - mov r4, #0 - add r1, r7, #2 - sub r3, r7, #2 - add r0, r8, #2 - mov r2, #1 - b _0233CBFC -_0233CBB4: - mov fp, r3 - b _0233CBE8 -_0233CBBC: - cmp sb, #0 - blt _0233CBDC - cmp sb, #0x38 - bge _0233CBDC - cmp fp, #0 - blt _0233CBDC - cmp fp, #0x20 - blt _0233CBE4 -_0233CBDC: - mov r4, r2 - b _0233CBF0 -_0233CBE4: - add fp, fp, #1 -_0233CBE8: - cmp fp, r1 - ble _0233CBBC -_0233CBF0: - cmp r4, #0 - bne _0233CC04 - add sb, sb, #1 -_0233CBFC: - cmp sb, r0 - ble _0233CBB4 -_0233CC04: - cmp r4, #0 - bne _0233CF64 - add r0, r6, #2 - and r0, r0, #6 - ldr r1, _0233CF7C ; =DIRECTIONS_XY - mov r2, r0, lsl #2 - add r0, r1, r0, lsl #2 - ldrsh r2, [r1, r2] - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - sub r0, r6, #2 - and r0, r0, #6 - ldr r1, _0233CF7C ; =DIRECTIONS_XY - mov r2, r0, lsl #2 - add r0, r1, r0, lsl #2 - ldrsh r2, [r1, r2] - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - mov r0, #3 - bl DungeonRandInt - ldr r4, _0233CF7C ; =DIRECTIONS_XY - add sb, r0, #3 -_0233CC8C: - cmp r8, #1 - cmpgt r7, #1 - ble _0233CF64 - cmp r8, #0x37 - cmplt r7, #0x1f - bge _0233CF64 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - tst r0, #0x10 - bne _0233CF64 - mov r0, #1 - str r0, [sp, #0xc] - add r0, r8, #1 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD38 - add r0, r8, #1 - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD38 - mov r0, r8 - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CD38: - add r0, r8, #1 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD94 - sub fp, r7, #1 - add r0, r8, #1 - mov r1, fp - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD94 - mov r1, fp - mov r0, r8 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CD94: - sub fp, r8, #1 - mov r0, fp - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CDF0 - mov r0, fp - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CDF0 - mov r0, r8 - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CDF0: - mov r0, fp - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CE4C - mov r0, fp - sub fp, r7, #1 - mov r1, fp - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CE4C - mov r1, fp - mov r0, r8 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CE4C: - ldr r0, [sp, #0xc] - cmp r0, #0 - beq _0233CE7C - mov r0, r8 - mov r1, r7 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233CE7C: - add r0, r6, #2 - and r1, r0, #6 - mov r0, r1, lsl #2 - ldrsh r2, [r4, r0] - add r0, r4, r1, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - sub r0, r6, #2 - and r1, r0, #6 - mov r0, r1, lsl #2 - ldrsh r2, [r4, r0] - add r0, r4, r1, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - subs sb, sb, #1 - bne _0233CF48 - mov r0, #3 - bl DungeonRandInt - add sb, r0, #3 - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x32 - addlt r6, r6, #2 - subge r6, r6, #2 - cmp r8, #0x20 - and r6, r6, #6 - blt _0233CF2C - ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #6] - cmp r0, #1 - cmpeq r6, #2 - beq _0233CF64 -_0233CF2C: - cmp r8, #0x30 - blt _0233CF48 - ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #6] - cmp r0, #2 - cmpeq r6, #2 - beq _0233CF64 -_0233CF48: - mov r0, r6, lsl #2 - ldrsh r1, [r4, r0] - add r0, r4, r6, lsl #2 - ldrsh r0, [r0, #2] - add r8, r8, r1 - add r7, r7, r0 - b _0233CC8C -_0233CF64: - add r5, r5, #1 -_0233CF68: - cmp r5, sl - blt _0233CA0C -_0233CF70: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233CF78: .word 0x000001C2 -_0233CF7C: .word DIRECTIONS_XY -_0233CF80: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateExtraHallways - - arm_func_start GetGridPositions -GetGridPositions: ; 0x0233CF84 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r7, r3 - mov r6, r4 - mov r5, #0x38 - b _0233CFC0 -_0233CFA8: - mov r0, r5 - mov r1, r8 - str r4, [sl, r6, lsl #2] - bl _s32_div_f - add r4, r4, r0 - add r6, r6, #1 -_0233CFC0: - cmp r6, r8 - blt _0233CFA8 - mov r6, #0 - str r4, [sl, r8, lsl #2] - mov r5, r6 - mov r4, #0x20 - b _0233CFF4 -_0233CFDC: - mov r0, r4 - mov r1, r7 - str r6, [sb, r5, lsl #2] - bl _s32_div_f - add r6, r6, r0 - add r5, r5, #1 -_0233CFF4: - cmp r5, r7 - blt _0233CFDC - str r6, [sb, r7, lsl #2] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end GetGridPositions - - arm_func_start InitDungeonGrid -InitDungeonGrid: ; 0x0233D004 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - add r5, r1, r1, lsl #1 - mov r4, r5, asr #1 - add r3, r1, r1, lsr #31 - add ip, r5, r4, lsr #30 - mov r7, #0 - b _0233D0F0 -_0233D020: - ldr r4, _0233D0FC ; =0x000001C2 - mov r8, #0 - mla sb, r7, r4, r0 - mov r5, #1 - mov r4, r8 - mov r6, r5 - mov lr, r8 - b _0233D0E4 -_0233D040: - ldr sl, _0233D100 ; =FLOOR_GENERATION_STATUS - ldrb sl, [sl, #6] - cmp sl, #1 - bne _0233D064 - cmp r7, r3, asr #1 - movge sl, #0x1e - mlage sl, r8, sl, sb - strgeb r6, [sl, #8] - bge _0233D08C -_0233D064: - cmp sl, #2 - bne _0233D080 - cmp r7, ip, asr #2 - movge sl, #0x1e - mlage sl, r8, sl, sb - strgeb r5, [sl, #8] - bge _0233D08C -_0233D080: - mov sl, #0x1e - mla sl, r8, sl, sb - strb r4, [sl, #8] -_0233D08C: - mov fp, #1 - strb fp, [sl, #0xa] - strb lr, [sl, #0xb] - strb lr, [sl, #0xf] - and fp, lr, #0xff - strb fp, [sl, #0xe] - strb fp, [sl, #0xc] - strb lr, [sl, #0x16] - strb fp, [sl, #0x15] - strb fp, [sl, #0x14] - strb fp, [sl, #0x13] - strb lr, [sl, #0x1a] - strb fp, [sl, #0x19] - strb fp, [sl, #0x18] - strb fp, [sl, #0x17] - strb lr, [sl, #9] - strb lr, [sl, #0x11] - strb lr, [sl, #0x10] - strb lr, [sl, #0x12] - strb lr, [sl, #0x1c] - strb lr, [sl, #0x1d] - add r8, r8, #1 -_0233D0E4: - cmp r8, r2 - blt _0233D040 - add r7, r7, #1 -_0233D0F0: - cmp r7, r1 - blt _0233D020 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233D0FC: .word 0x000001C2 -_0233D100: .word FLOOR_GENERATION_STATUS - arm_func_end InitDungeonGrid - - arm_func_start AssignRooms -AssignRooms: ; 0x0233D104 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x104 - mov sl, r0 - mov r4, r3 - mov r0, #3 - mov sb, r1 - mov r8, r2 - bl DungeonRandInt - cmp r4, #0 - rsblt r4, r4, #0 - addge r4, r4, r0 - mov r2, #0 - mov r1, #1 - add r0, sp, #4 - b _0233D148 -_0233D140: - strb r1, [r0, r2] - add r2, r2, #1 -_0233D148: - cmp r2, r4 - blt _0233D140 - mov r1, #0 - add r0, sp, #4 - b _0233D164 -_0233D15C: - strb r1, [r0, r2] - add r2, r2, #1 -_0233D164: - cmp r2, #0x100 - blt _0233D15C - mul r7, sb, r8 - mov r6, #0 - add r4, sp, #4 -_0233D178: - mov r0, r7 - bl DungeonRandInt - mov r5, r0 - mov r0, r7 - bl DungeonRandInt - add r6, r6, #1 - ldrb r2, [r4, r5] - ldrb r1, [r4, r0] - cmp r6, #0x40 - strb r1, [r4, r5] - strb r2, [r4, r0] - blt _0233D178 - ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS - mov fp, #0 - sub r1, sb, #1 - str fp, [r0, #0x14] - mov r3, fp - and r5, sb, #1 - add r0, r1, r1, lsr #31 - mov r2, fp - add lr, sp, #4 - b _0233D25C -_0233D1D0: - ldr r1, _0233D314 ; =0x000001C2 - mov r4, #0 - mla r6, r3, r1, sl - ldr r1, _0233D310 ; =FLOOR_GENERATION_STATUS - b _0233D250 -_0233D1E4: - mov r7, #0x1e - mla r7, r4, r7, r6 - ldrb ip, [r7, #8] - cmp ip, #0 - bne _0233D24C - ldr ip, [r1, #0x14] - cmp ip, #0x20 - strgeb r2, [r7, #0xa] - ldrb ip, [lr, fp] - cmp ip, #0 - beq _0233D240 - mov ip, #1 - strb ip, [r7, #0xa] - ldr ip, [r1, #0x14] - cmp r5, #0 - add ip, ip, #1 - str ip, [r1, #0x14] - beq _0233D248 - cmp r3, r0, asr #1 - cmpeq r4, #1 - moveq ip, #0 - streqb ip, [r7, #0xa] - b _0233D248 -_0233D240: - mov ip, #0 - strb ip, [r7, #0xa] -_0233D248: - add fp, fp, #1 -_0233D24C: - add r4, r4, #1 -_0233D250: - cmp r4, r8 - blt _0233D1E4 - add r3, r3, #1 -_0233D25C: - cmp r3, sb - blt _0233D1D0 - ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x14] - cmp r0, #2 - bge _0233D308 - mov r4, #0 - b _0233D2F4 -_0233D27C: - mov r0, #0 - str r0, [sp] - mov r6, r0 - b _0233D2DC -_0233D28C: - ldr r0, _0233D314 ; =0x000001C2 - mov r7, #0 - mla fp, r6, r0, sl - b _0233D2D0 -_0233D29C: - mov r0, #0x1e - mla r5, r7, r0, fp - ldrb r0, [r5, #8] - cmp r0, #0 - bne _0233D2CC - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x3c - movlt r0, #1 - strlt r0, [sp] - strltb r0, [r5, #0xa] - blt _0233D2E4 -_0233D2CC: - add r7, r7, #1 -_0233D2D0: - cmp r7, r8 - blt _0233D29C - add r6, r6, #1 -_0233D2DC: - cmp r6, sb - blt _0233D28C -_0233D2E4: - ldr r0, [sp] - cmp r0, #0 - bne _0233D2FC - add r4, r4, #1 -_0233D2F4: - cmp r4, #0xc8 - blt _0233D27C -_0233D2FC: - ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS - mov r1, #0 - strb r1, [r0] -_0233D308: - add sp, sp, #0x104 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233D310: .word FLOOR_GENERATION_STATUS -_0233D314: .word 0x000001C2 - arm_func_end AssignRooms - - arm_func_start CreateRoomsAndAnchors -CreateRoomsAndAnchors: ; 0x0233D318 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - ldr r5, [sp, #0x5c] - str r0, [sp] - and r0, r5, #4 - str r0, [sp, #0x14] - ldr r0, [sp, #0x58] - mov r4, #0 - str r4, [sp, #0x1c] - str r1, [sp, #4] - str r2, [sp, #8] - str r3, [sp, #0xc] - str r0, [sp, #0x58] - b _0233D658 -_0233D350: - ldr r0, [sp] - mov r1, #0x1e - mla sb, r4, r1, r0 - ldr r0, [sp, #4] - mov sl, #0 - sub r0, r0, #1 - str r0, [sp, #0x28] - ldr r0, [sp, #8] - sub r0, r0, #1 - str r0, [sp, #0x2c] - ldr r0, [sp, #0x58] - add r0, r0, r4, lsl #2 - str r0, [sp, #0x20] - b _0233D648 -_0233D388: - ldr r0, [sp, #0xc] - ldr r3, [r0, sl, lsl #2] - ldr r0, [sp, #0x58] - add fp, r3, #2 - ldr r2, [r0, r4, lsl #2] - add r0, r2, #2 - str r0, [sp, #0x18] - ldr r0, [sp, #0xc] - add r0, r0, sl, lsl #2 - ldr r1, [r0, #4] - ldr r0, [sp, #0x20] - sub r1, r1, r3 - ldr r0, [r0, #4] - sub r5, r1, #4 - sub r0, r0, r2 - sub r6, r0, #3 - ldr r0, _0233D66C ; =0x000001C2 - mla r0, sl, r0, sb - str r0, [sp, #0x10] - ldrb r0, [r0, #8] - cmp r0, #0 - bne _0233D644 - ldr r0, [sp, #0x10] - ldrb r0, [r0, #0xa] - cmp r0, #0 - beq _0233D580 - mov r0, #5 - mov r1, r5 - bl DungeonRandRange - mov r7, r0 - mov r0, #4 - mov r1, r6 - bl DungeonRandRange - mov r8, r0 - orr r0, r7, #1 - cmp r0, r5 - movlt r7, r0 - orr r0, r8, #1 - cmp r0, r6 - movlt r8, r0 - add r0, r8, r8, lsl #1 - add r0, r0, r0, lsr #31 - cmp r7, r0, asr #1 - mov r0, r0, asr #1 - movgt r7, r0 - add r0, r7, r7, lsl #1 - add r0, r0, r0, lsr #31 - cmp r8, r0, asr #1 - mov r0, r0, asr #1 - movgt r8, r0 - sub r0, r5, r7 - bl DungeonRandInt - add r5, fp, r0 - sub r0, r6, r8 - bl DungeonRandInt - ldr r1, [sp, #0x18] - add fp, r5, r7 - add r6, r1, r0 - ldr r0, _0233D66C ; =0x000001C2 - add r7, r6, r8 - mul r0, sl, r0 - strh r5, [sb, r0] - add r0, sb, r0 - strh fp, [r0, #4] - strh r6, [r0, #2] - strh r7, [r0, #6] - ldr r0, [sp, #0x1c] - and r0, r0, #0xff - str r0, [sp, #0x24] - b _0233D4F0 -_0233D4A0: - mov r8, r6 - b _0233D4E4 -_0233D4A8: - mov r0, r5 - mov r1, r8 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r8 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - ldr r1, [sp, #0x24] - add r8, r8, #1 - strb r1, [r0, #7] -_0233D4E4: - cmp r8, r7 - blt _0233D4A8 - add r5, r5, #1 -_0233D4F0: - cmp r5, fp - blt _0233D4A0 - mov r5, #1 - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x50 - movlt r0, r5 - movge r0, #0 - and r6, r0, #0xff - ldr r0, _0233D670 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - ldr r0, [sp, #0x14] - moveq r6, #0 - cmp r0, #0 - moveq r5, #0 - cmp r5, #0 - cmpne r6, #0 - beq _0233D550 - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x32 - movlt r5, #0 - movge r6, #0 -_0233D550: - cmp r5, #0 - ldrne r0, [sp, #0x10] - movne r1, #1 - strneb r1, [r0, #0x1c] - cmp r6, #0 - ldrne r0, [sp, #0x10] - movne r1, #1 - strneb r1, [r0, #0x1d] - ldr r0, [sp, #0x1c] - add r0, r0, #1 - str r0, [sp, #0x1c] - b _0233D644 -_0233D580: - mov r2, #2 - ldr r0, [sp, #0x28] - mov r8, r2 - cmp sl, #0 - moveq r2, #1 - cmp r4, #0 - moveq r8, #1 - cmp sl, r0 - mov r1, #4 - mov r7, r1 - ldr r0, [sp, #0x2c] - moveq r1, #2 - cmp r4, r0 - add r0, fp, r2 - add r2, fp, r5 - sub r1, r2, r1 - moveq r7, #2 - bl DungeonRandRange - ldr r1, [sp, #0x18] - add r1, r1, r6 - mov r6, r0 - ldr r0, [sp, #0x18] - sub r1, r1, r7 - add r0, r0, r8 - bl DungeonRandRange - mov r5, r0 - ldr r0, _0233D66C ; =0x000001C2 - mul r0, sl, r0 - strh r6, [sb, r0] - add r1, sb, r0 - add r0, r6, #1 - strh r0, [r1, #4] - strh r5, [r1, #2] - add r0, r5, #1 - strh r0, [r1, #6] - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r5 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r6 - bl GetTileSafe - mov r1, #0xfe - strb r1, [r0, #7] -_0233D644: - add sl, sl, #1 -_0233D648: - ldr r0, [sp, #4] - cmp sl, r0 - blt _0233D388 - add r4, r4, #1 -_0233D658: - ldr r0, [sp, #8] - cmp r4, r0 - blt _0233D350 - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233D66C: .word 0x000001C2 -_0233D670: .word FLOOR_GENERATION_STATUS - arm_func_end CreateRoomsAndAnchors - - arm_func_start GenerateSecondaryStructures -GenerateSecondaryStructures: ; 0x0233D674 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - mov sl, r0 - mov r0, #0 - str r1, [sp] - str r2, [sp, #4] - str r0, [sp, #0x20] - b _0233E03C -_0233D694: - ldr r0, [sp, #0x20] - mov r1, #0x1e - mul r7, r0, r1 - mov r0, #0 - add r6, sl, r7 - str r0, [sp, #0x24] - b _0233E020 -_0233D6B0: - ldr r1, [sp, #0x24] - ldr r0, _0233E054 ; =0x000001C2 - mul sb, r1, r0 - add r8, r6, sb - ldrb r0, [r8, #8] - cmp r0, #0 - ldreqb r0, [r8, #0xe] - cmpeq r0, #0 - ldreqb r0, [r8, #0x12] - cmpeq r0, #0 - bne _0233E014 - ldrb r0, [r8, #0xa] - cmp r0, #0 - beq _0233E014 - ldrb r0, [r8, #0x1c] - cmp r0, #0 - bne _0233E014 - ldrb r0, [r8, #0x1d] - cmp r0, #0 - beq _0233E014 - mov r0, #6 - bl DungeonRandInt - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0233E014 -_0233D714: ; jump table - b _0233E014 ; case 0 - b _0233DE94 ; case 1 - b _0233DDC8 ; case 2 - b _0233DC9C ; case 3 - b _0233D938 ; case 4 - b _0233D72C ; case 5 -_0233D72C: - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - mov r0, #2 - bl DungeonRandInt - cmp r0, #0 - mov r0, #0 - beq _0233D850 - str r0, [sp, #0x10] - mov r4, r8 - ldrsh r1, [r6, sb] - ldrsh r0, [r4, #4] - ldrsh r5, [r4, #2] - add r0, r1, r0 - add r0, r0, r0, lsr #31 - mov fp, r0, asr #1 - b _0233D7AC -_0233D78C: - mov r0, fp - mov r1, r5 - bl IsNextToHallway - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x10] - bne _0233D7B8 - add r5, r5, #1 -_0233D7AC: - ldrsh r0, [r4, #6] - cmp r5, r0 - blt _0233D78C -_0233D7B8: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233E014 - ldrsh r5, [r4, #2] - b _0233D7F4 -_0233D7CC: - mov r0, fp - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233D7F4: - ldrsh r0, [r4, #6] - cmp r5, r0 - blt _0233D7CC - ldrsh sb, [r4] - b _0233D83C -_0233D808: - ldrsh r5, [r4, #2] - b _0233D82C -_0233D810: - mov r0, sb - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - orr r1, r1, #0x80 - strh r1, [r0] -_0233D82C: - ldrsh r0, [r4, #6] - cmp r5, r0 - blt _0233D810 - add sb, sb, #1 -_0233D83C: - cmp sb, fp - blt _0233D808 - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233D850: - str r0, [sp, #0x14] - mov r4, r8 - ldrsh r1, [r4, #2] - ldrsh r0, [r4, #6] - ldrsh r5, [r6, sb] - add r0, r1, r0 - add r0, r0, r0, lsr #31 - mov fp, r0, asr #1 - b _0233D894 -_0233D874: - mov r0, r5 - mov r1, fp - bl IsNextToHallway - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x14] - bne _0233D8A0 - add r5, r5, #1 -_0233D894: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233D874 -_0233D8A0: - ldr r0, [sp, #0x14] - cmp r0, #0 - bne _0233E014 - ldrsh r5, [r4] - b _0233D8DC -_0233D8B4: - mov r0, r5 - mov r1, fp - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233D8DC: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233D8B4 - ldrsh sb, [r4, #2] - b _0233D924 -_0233D8F0: - ldrsh r5, [r4] - b _0233D914 -_0233D8F8: - mov r0, r5 - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - orr r1, r1, #0x80 - strh r1, [r0] -_0233D914: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233D8F8 - add sb, sb, #1 -_0233D924: - cmp sb, fp - blt _0233D8F0 - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233D938: - mov r1, r8 - ldrsh r4, [r6, sb] - ldrsh r3, [r1, #4] - sub r0, r3, r4 - cmp r0, #6 - ldrgesh r2, [r1, #2] - ldrgesh r1, [r1, #6] - subge r0, r1, r2 - cmpge r0, #6 - blt _0233E014 - add r0, r4, r3 - add r0, r0, r0, lsr #31 - mov r5, r0, asr #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - add r1, r2, r1 - ldr r0, [r0, #0x18] - add r1, r1, r1, lsr #31 - mov r4, r1, asr #1 - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - sub r0, r4, #2 - str r0, [sp, #0xc] - sub r0, r5, #2 - ldr r1, [sp, #0xc] - str r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - sub fp, r5, #1 - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0] - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0] - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r1, [r0] - sub sb, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #6 - strh r1, [r0] - ldr r0, [sp, #8] - mov r1, sb - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - ldr r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - ldr r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - ldr r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - mov r0, fp - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - ldrh r2, [r0] - add r1, r4, #1 - orr r2, r2, #4 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0] - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r2, [r0] - mov r1, sb - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r2, [r0] - mov r1, sb - orr r2, r2, #6 - strh r2, [r0] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #4 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #0x40 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #2 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #2 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #2 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #0x10 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #0x10 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #0x10 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r1, [r0, #2] - orr r1, r1, #0x10 - strh r1, [r0, #2] - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233DC9C: - mov r4, r8 - ldrsh r3, [r6, sb] - ldrsh r2, [r4, #4] - sub r0, r2, r3 - cmp r0, #5 - ldrgesh r1, [r4, #6] - ldrgesh r0, [r4, #2] - subge r0, r1, r0 - cmpge r0, #5 - blt _0233E014 - add r0, r3, #2 - sub r1, r2, #3 - bl DungeonRandRange - ldrsh r1, [r4, #6] - str r0, [sp, #0x28] - mov r5, r0 - ldrsh r0, [r4, #2] - sub r1, r1, #3 - add r0, r0, #2 - bl DungeonRandRange - str r0, [sp, #0x18] - ldrsh r0, [r4] - ldrsh r1, [r4, #4] - add r0, r0, #2 - sub r1, r1, #3 - bl DungeonRandRange - str r0, [sp, #0x1c] - ldrsh r0, [r4, #2] - ldrsh r1, [r4, #6] - add r0, r0, #2 - sub r1, r1, #3 - bl DungeonRandRange - mov fp, r0 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - ldr r1, [sp, #0x28] - ldr r0, [sp, #0x1c] - cmp r1, r0 - movgt r5, r0 - movgt r0, r1 - strgt r0, [sp, #0x1c] - ldr r0, [sp, #0x18] - cmp r0, fp - strgt fp, [sp, #0x18] - movgt fp, r0 - b _0233DDB0 -_0233DD74: - ldr r4, [sp, #0x18] - b _0233DDA4 -_0233DD7C: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233DDA4: - cmp r4, fp - ble _0233DD7C - add r5, r5, #1 -_0233DDB0: - ldr r0, [sp, #0x1c] - cmp r5, r0 - ble _0233DD74 - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233DDC8: - mov r2, r8 - ldrsh r1, [r2, #4] - ldrsh r0, [r6, sb] - sub r0, r1, r0 - tst r0, #1 - beq _0233E014 - ldrsh r1, [r2, #6] - ldrsh r0, [r2, #2] - sub r0, r1, r0 - tst r0, #1 - ldrne r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldrne r0, [r0, #0x18] - cmpne r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - mov r5, #0 -_0233DE1C: - ldrsh r1, [r8, #4] - ldrsh r0, [r8] - sub r0, r1, r0 - bl DungeonRandInt - mov r4, r0 - ldrsh r1, [r8, #6] - ldrsh r0, [r8, #2] - sub r0, r1, r0 - bl DungeonRandInt - mov r2, r0 - add r0, r4, r2 - tst r0, #1 - beq _0233DE7C - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r0, r4 - add r1, r1, r2 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233DE7C: - add r5, r5, #1 - cmp r5, #0x40 - blt _0233DE1C - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233DE94: - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - mov r0, r8 - ldrsh r2, [r0, #4] - ldrsh r1, [r6, sb] - sub r3, r2, r1 - tst r3, #1 - beq _0233DEDC - ldrsh r2, [r0, #6] - ldrsh r1, [r0, #2] - sub r1, r2, r1 - tst r1, #1 - bne _0233DFF4 -_0233DEDC: - cmp r3, #5 - ldrsh r4, [r0] - ldrsh r3, [r0, #4] - ldrsh r2, [r0, #6] - ldrsh r1, [r0, #2] - add r0, r4, r3 - add r0, r0, r0, lsr #31 - mov r4, r0, asr #1 - add r0, r1, r2 - add r0, r0, r0, lsr #31 - mov r5, r0, asr #1 - subge r0, r2, r1 - cmpge r0, #5 - blt _0233DFCC - add r0, r4, #1 - mov r1, r5 - bl GetTileSafe - ldrh r2, [r0] - add r1, r5, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - mov r0, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r5 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - sub r0, r4, #1 - bl GetTileSafe - ldrh r2, [r0] - sub r1, r5, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - mov r0, r4 - bl GetTileSafe - mov r1, r5 - ldrh r2, [r0] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - mov r0, r4 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - b _0233E00C -_0233DFCC: - mov r0, r4 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - b _0233E00C -_0233DFF4: - add r4, sl, sb - add r0, r4, r7 - bl SetSpawnFlag5 - add r0, r4, r7 - mov r1, #1 - bl GenerateMaze -_0233E00C: - mov r0, #1 - strb r0, [r8, #9] -_0233E014: - ldr r0, [sp, #0x24] - add r0, r0, #1 - str r0, [sp, #0x24] -_0233E020: - ldr r1, [sp, #0x24] - ldr r0, [sp] - cmp r1, r0 - blt _0233D6B0 - ldr r0, [sp, #0x20] - add r0, r0, #1 - str r0, [sp, #0x20] -_0233E03C: - ldr r1, [sp, #0x20] - ldr r0, [sp, #4] - cmp r1, r0 - blt _0233D694 - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233E054: .word 0x000001C2 -_0233E058: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateSecondaryStructures - - arm_func_start AssignGridCellConnections -AssignGridCellConnections: ; 0x0233E05C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - ldr r4, [sp, #0x3c] - mov r8, r1 - mov r1, r4 - ldrb r1, [r1, #5] - mov sb, r0 - mov r0, #4 - str r4, [sp, #0x3c] - mov fp, r2 - mov r7, r3 - ldr r5, [sp, #0x38] - str r1, [sp, #4] - bl DungeonRandInt - mov r6, r0 - mov sl, #0 - b _0233E208 -_0233E0A0: - mov r0, #8 - bl DungeonRandInt - mov r4, r0 - mov r0, #4 - bl DungeonRandInt - mov lr, #1 - cmp r4, #4 - movlt r6, r0 - sub r1, r8, #1 - sub r0, fp, #1 - mov ip, lr - mov r3, #0 -_0233E0D0: - and r2, r6, #3 - mov r4, r3 - cmp r2, #3 - addls pc, pc, r2, lsl #2 - b _0233E130 -_0233E0E4: ; jump table - b _0233E0F4 ; case 0 - b _0233E104 ; case 1 - b _0233E114 ; case 2 - b _0233E124 ; case 3 -_0233E0F4: - cmp r7, r1 - movlt r4, ip - addge r6, r6, #1 - b _0233E130 -_0233E104: - cmp r5, #0 - movgt r4, lr - addle r6, r6, #1 - b _0233E130 -_0233E114: - cmp r7, #0 - movgt r4, #1 - addle r6, r6, #1 - b _0233E130 -_0233E124: - cmp r5, r0 - movlt r4, #1 - addge r6, r6, #1 -_0233E130: - cmp r4, #0 - beq _0233E0D0 - and r0, r6, #3 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233E204 -_0233E148: ; jump table - b _0233E158 ; case 0 - b _0233E184 ; case 1 - b _0233E1B0 ; case 2 - b _0233E1DC ; case 3 -_0233E158: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x16] - streqb r0, [r1, #0x1d7] - addeq r7, r7, #1 - b _0233E204 -_0233E184: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #-0x16] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x13] - streqb r0, [r1, #-0xa] - subeq r5, r5, #1 - b _0233E204 -_0233E1B0: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #-0x1ba] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x15] - streqb r0, [r1, #-0x1ac] - subeq r7, r7, #1 - b _0233E204 -_0233E1DC: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #0x26] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x14] - streqb r0, [r1, #0x31] - addeq r5, r5, #1 -_0233E204: - add sl, sl, #1 -_0233E208: - ldr r0, [sp, #4] - cmp sl, r0 - blt _0233E0A0 - ldr r0, [sp, #0x3c] - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _0233E430 -_0233E224: - sub r0, r8, #1 - mov r6, #0 - str r0, [sp, #8] - sub r0, fp, #1 - str r6, [sp] - str r0, [sp, #0xc] - b _0233E41C -_0233E240: - ldr r0, _0233E438 ; =0x000001C2 - mov r7, #0 - mla sl, r6, r0, sb - b _0233E410 -_0233E250: - mov r1, #0x1e - mla r5, r7, r1, sl - ldrb r1, [r5, #8] - mov r0, #0 - cmp r1, #0 - ldreqb r1, [r5, #0xa] - cmpeq r1, #0 - bne _0233E40C - ldrb r1, [r5, #0x13] - cmp r1, #0 - ldrb r1, [r5, #0x14] - addne r0, r0, #1 - cmp r1, #0 - ldrb r1, [r5, #0x15] - addne r0, r0, #1 - cmp r1, #0 - ldrb r1, [r5, #0x16] - addne r0, r0, #1 - cmp r1, #0 - addne r0, r0, #1 - cmp r0, #1 - bne _0233E40C - mov r4, #0 - mov r0, #4 - bl DungeonRandInt - mov r1, r4 - b _0233E370 -_0233E2BC: - and r2, r0, #3 - mov r4, #0 - cmp r2, #3 - addls pc, pc, r2, lsl #2 - b _0233E364 -_0233E2D0: ; jump table - b _0233E2E0 ; case 0 - b _0233E304 ; case 1 - b _0233E324 ; case 2 - b _0233E344 ; case 3 -_0233E2E0: - ldr r2, [sp, #8] - cmp r6, r2 - bge _0233E2FC - ldrb r2, [r5, #0x16] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E2FC: - add r0, r0, #1 - b _0233E364 -_0233E304: - cmp r7, #0 - ble _0233E31C - ldrb r2, [r5, #0x13] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E31C: - add r0, r0, #1 - b _0233E364 -_0233E324: - cmp r6, #0 - ble _0233E33C - ldrb r2, [r5, #0x15] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E33C: - add r0, r0, #1 - b _0233E364 -_0233E344: - ldr r2, [sp, #0xc] - cmp r7, r2 - bge _0233E360 - ldrb r2, [r5, #0x14] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E360: - add r0, r0, #1 -_0233E364: - cmp r4, #0 - bne _0233E378 - add r1, r1, #1 -_0233E370: - cmp r1, #8 - blt _0233E2BC -_0233E378: - cmp r4, #0 - beq _0233E40C - and r0, r0, #3 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233E40C -_0233E390: ; jump table - b _0233E3A0 ; case 0 - b _0233E3BC ; case 1 - b _0233E3D8 ; case 2 - b _0233E3F4 ; case 3 -_0233E3A0: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x16] - streqb r0, [r5, #0x1d7] - streq r0, [sp] - b _0233E40C -_0233E3BC: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x13] - streqb r0, [r5, #-0xa] - streq r0, [sp] - b _0233E40C -_0233E3D8: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x15] - streqb r0, [r5, #-0x1ac] - streq r0, [sp] - b _0233E40C -_0233E3F4: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x14] - streqb r0, [r5, #0x31] - streq r0, [sp] -_0233E40C: - add r7, r7, #1 -_0233E410: - cmp r7, fp - blt _0233E250 - add r6, r6, #1 -_0233E41C: - cmp r6, r8 - blt _0233E240 - ldr r0, [sp] - cmp r0, #0 - bne _0233E224 -_0233E430: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233E438: .word 0x000001C2 - arm_func_end AssignGridCellConnections - - arm_func_start CreateGridCellConnections -CreateGridCellConnections: ; 0x0233E43C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x48 - str r0, [sp, #0xc] - str r1, [sp, #0x10] - str r2, [sp, #0x14] - mov sb, r3 - ldr r8, [sp, #0x70] - mov r5, #0 - b _0233E510 -_0233E460: - ldr r1, _0233ED30 ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r6, #0 - mla r7, r5, r1, r0 - ldr r0, [sp, #0x10] - mov r3, r6 - sub r1, r0, #1 - ldr r0, [sp, #0x14] - mov r2, r6 - sub r0, r0, #1 - mov ip, r6 - mov lr, r6 - mov r4, r6 - b _0233E500 -_0233E498: - mov sl, #0x1e - mla sl, r6, sl, r7 - ldrb fp, [sl, #8] - cmp fp, #0 - strneb r4, [sl, #0x17] - strneb r4, [sl, #0x18] - strneb r4, [sl, #0x19] - strneb r4, [sl, #0x1a] - bne _0233E4FC - cmp r5, #0 - strleb r3, [sl, #0x15] - cmp r6, #0 - strleb r2, [sl, #0x13] - cmp r5, r1 - strgeb ip, [sl, #0x16] - cmp r6, r0 - strgeb lr, [sl, #0x14] - ldrb fp, [sl, #0x13] - strb fp, [sl, #0x17] - ldrb fp, [sl, #0x14] - strb fp, [sl, #0x18] - ldrb fp, [sl, #0x15] - strb fp, [sl, #0x19] - ldrb fp, [sl, #0x16] - strb fp, [sl, #0x1a] -_0233E4FC: - add r6, r6, #1 -_0233E500: - ldr sl, [sp, #0x14] - cmp r6, sl - blt _0233E498 - add r5, r5, #1 -_0233E510: - ldr r0, [sp, #0x10] - cmp r5, r0 - blt _0233E460 - mov r6, #0 - b _0233E800 -_0233E524: - ldr r1, _0233ED30 ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r7, #0 - mla r4, r6, r1, r0 - add r0, sb, r6, lsl #2 - str r0, [sp, #0x2c] - b _0233E7F0 -_0233E540: - mov r0, #0x1e - mla r5, r7, r0, r4 - ldrb r0, [r5, #8] - cmp r0, #0 - bne _0233E7EC - ldrb r0, [r5, #0xa] - cmp r0, #0 - ldreqsh fp, [r5] - ldreqsh sl, [r5, #2] - beq _0233E598 - ldrsh r0, [r5] - ldrsh r1, [r5, #4] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov fp, r0 - ldrsh r0, [r5, #2] - ldrsh r1, [r5, #6] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov sl, r0 -_0233E598: - ldrb r0, [r5, #0x17] - cmp r0, #0 - beq _0233E624 - ldrb r0, [r5, #-0x16] - cmp r0, #0 - bne _0233E60C - ldrb r0, [r5, #-0x14] - cmp r0, #0 - ldreqsh r2, [r5, #-0x1e] - beq _0233E5D8 - ldrsh r0, [r5, #-0x1e] - ldrsh r1, [r5, #-0x1a] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov r2, r0 -_0233E5D8: - mov r0, #1 - str r0, [sp] - mov r0, #0x1e - mla r3, r7, r0, r4 - ldr r1, [sb, r6, lsl #2] - mov r0, fp - str r1, [sp, #4] - ldr r1, [r8, r7, lsl #2] - str r1, [sp, #8] - ldrsh r1, [r3, #2] - ldrsh r3, [r3, #-0x18] - sub r3, r3, #1 - bl CreateHallway -_0233E60C: - mov r0, #0 - strb r0, [r5, #0x17] - strb r0, [r5, #-6] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #-0x13] -_0233E624: - ldrb r0, [r5, #0x18] - cmp r0, #0 - beq _0233E6B8 - ldrb r0, [r5, #0x26] - cmp r0, #0 - bne _0233E6A0 - ldrb r0, [r5, #0x28] - cmp r0, #0 - ldreqsh r2, [r5, #0x1e] - beq _0233E664 - ldrsh r0, [r5, #0x1e] - ldrsh r1, [r5, #0x22] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov r2, r0 -_0233E664: - mov r1, #1 - str r1, [sp] - mov r0, fp - mov r1, #0x1e - ldr fp, [sb, r6, lsl #2] - mla r1, r7, r1, r4 - add r3, r8, r7, lsl #2 - str fp, [sp, #4] - ldr r3, [r3, #4] - sub r3, r3, #1 - str r3, [sp, #8] - ldrsh fp, [r1, #6] - ldrsh r3, [r1, #0x20] - sub r1, fp, #1 - bl CreateHallway -_0233E6A0: - mov r0, #0 - strb r0, [r5, #0x18] - strb r0, [r5, #0x35] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #0x29] -_0233E6B8: - ldrb r0, [r5, #0x19] - cmp r0, #0 - beq _0233E750 - ldrb r0, [r5, #-0x1ba] - cmp r0, #0 - bne _0233E738 - ldrb r0, [r5, #-0x1b8] - cmp r0, #0 - sub r0, r5, #0x100 - ldreqsh r3, [r0, #-0xc0] - beq _0233E6FC - ldrsh r1, [r0, #-0xbc] - ldrsh r2, [r0, #-0xc0] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233E6FC: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - mul r0, r7, r0 - ldr fp, [sb, r6, lsl #2] - add r1, r4, r0 - str fp, [sp, #4] - ldr fp, [r8, r7, lsl #2] - sub r2, r1, #0x100 - str fp, [sp, #8] - ldrsh r2, [r2, #-0xc2] - ldrsh r0, [r4, r0] - mov r1, sl - sub r2, r2, #1 - bl CreateHallway -_0233E738: - mov r0, #0 - strb r0, [r5, #0x19] - strb r0, [r5, #-0x1a8] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #-0x1b7] -_0233E750: - ldrb r0, [r5, #0x1a] - cmp r0, #0 - beq _0233E7EC - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - bne _0233E7D4 - ldrb r0, [r5, #0x1cc] - cmp r0, #0 - add r0, r5, #0x100 - ldreqsh r3, [r0, #0xc4] - beq _0233E794 - ldrsh r1, [r0, #0xc8] - ldrsh r2, [r0, #0xc4] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233E794: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - ldr r2, [sp, #0x2c] - mov r1, sl - ldr sl, [r2, #4] - mla r0, r7, r0, r4 - sub sl, sl, #1 - str sl, [sp, #4] - ldr sl, [r8, r7, lsl #2] - add r2, r0, #0x100 - str sl, [sp, #8] - ldrsh r0, [r0, #4] - ldrsh r2, [r2, #0xc2] - sub r0, r0, #1 - bl CreateHallway -_0233E7D4: - mov r0, #0 - strb r0, [r5, #0x1a] - strb r0, [r5, #0x1db] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #0x1cd] -_0233E7EC: - add r7, r7, #1 -_0233E7F0: - ldr r0, [sp, #0x14] - cmp r7, r0 - blt _0233E540 - add r6, r6, #1 -_0233E800: - ldr r0, [sp, #0x10] - cmp r6, r0 - blt _0233E524 - ldrb r0, [sp, #0x74] - cmp r0, #0 - bne _0233ED28 - mov r7, #0 - b _0233ED1C -_0233E820: - ldr r1, _0233ED30 ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r8, #0 - mla r0, r7, r1, r0 - str r0, [sp, #0x20] - ldr r0, [sp, #0x14] - sub r0, r0, #2 - str r0, [sp, #0x40] - ldr r0, [sp, #0x10] - sub r0, r0, #2 - str r0, [sp, #0x38] - b _0233ED0C -_0233E850: - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #5 - bge _0233ED08 - ldr r0, [sp, #0x20] - mov r1, #0x1e - mla r6, r8, r1, r0 - ldrb r0, [r6, #8] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0xb] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x12] - cmp r0, #0 - ldreqb r0, [r6, #9] - cmpeq r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0xa] - cmp r0, #0 - beq _0233ED08 - mov r0, #4 - bl DungeonRandInt - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233ED08 -_0233E8B8: ; jump table - b _0233E8C8 ; case 0 - b _0233E9DC ; case 1 - b _0233EAE4 ; case 2 - b _0233EBFC ; case 3 -_0233E8C8: - cmp r7, #1 - blt _0233ED08 - ldrb r0, [r6, #-0x1b7] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x1ba] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #-0x1b8] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x1b9] - cmp r0, #0 - ldreqb r0, [r6, #-0x1b0] - cmpeq r0, #0 - bne _0233ED08 - sub r1, r6, #0x100 - ldrsh r0, [r1, #-0xc2] - ldrsh fp, [r1, #-0xc0] - ldrsh r1, [r6, #2] - str r0, [sp, #0x28] - sub r0, r6, #0x100 - ldrsh sb, [r0, #-0xbc] - ldrsh r2, [r6, #6] - cmp fp, r1 - movge fp, r1 - cmp sb, r2 - ldrsh r0, [r6] - ldrsh sl, [r6, #4] - movle sb, r2 - bl GetTile - ldrb r0, [r0, #7] - ldr r5, [sp, #0x28] - and r0, r0, #0xff - str r0, [sp, #0x30] - b _0233E99C -_0233E958: - mov r4, fp - b _0233E990 -_0233E960: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x30] - strb r1, [r0, #7] -_0233E990: - cmp r4, sb - blt _0233E960 - add r5, r5, #1 -_0233E99C: - cmp r5, sl - blt _0233E958 - ldr r0, [sp, #0x28] - sub r1, r6, #0x100 - strh r0, [r1, #-0xc2] - strh sl, [r1, #-0xbe] - strh fp, [r1, #-0xc0] - strh sb, [r1, #-0xbc] - mov r0, #1 - strb r0, [r6, #0x12] - strb r0, [r6, #-0x1b0] - mov r0, #0 - strb r0, [r6, #0xb] - mov r0, #1 - strb r0, [r6, #0x11] - b _0233ED08 -_0233E9DC: - cmp r8, #1 - blt _0233ED08 - ldrb r0, [r6, #-0x13] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x16] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #-0x14] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x15] - cmp r0, #0 - ldreqb r0, [r6, #-0xc] - cmpeq r0, #0 - bne _0233ED08 - ldrsh r1, [r6, #-0x1c] - ldrsh r0, [r6] - ldrsh fp, [r6, #-0x1e] - str r1, [sp, #0x24] - ldrsh r1, [r6, #4] - ldrsh sb, [r6, #-0x1a] - cmp fp, r0 - movge fp, r0 - cmp sb, r1 - movle sb, r1 - ldrsh r1, [r6, #2] - ldrsh sl, [r6, #6] - bl GetTile - ldrb r0, [r0, #7] - mov r5, fp - and r0, r0, #0xff - str r0, [sp, #0x34] - b _0233EAA8 -_0233EA64: - ldr r4, [sp, #0x24] - b _0233EA9C -_0233EA6C: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x34] - strb r1, [r0, #7] -_0233EA9C: - cmp r4, sl - blt _0233EA6C - add r5, r5, #1 -_0233EAA8: - cmp r5, sb - blt _0233EA64 - strh fp, [r6, #-0x1e] - ldr r0, [sp, #0x24] - strh sb, [r6, #-0x1a] - strh r0, [r6, #-0x1c] - strh sl, [r6, #-0x18] - mov r0, #1 - strb r0, [r6, #0x12] - strb r0, [r6, #-0xc] - mov r0, #0 - strb r0, [r6, #0xb] - mov r0, #1 - strb r0, [r6, #0x11] - b _0233ED08 -_0233EAE4: - ldr r0, [sp, #0x38] - cmp r7, r0 - bgt _0233ED08 - ldrb r0, [r6, #0x1cd] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x1ca] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0x1cc] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x1cb] - cmp r0, #0 - ldreqb r0, [r6, #0x1d4] - cmpeq r0, #0 - bne _0233ED08 - add r0, r6, #0x100 - ldrsh sl, [r6] - ldrsh r0, [r0, #0xc4] - str r0, [sp, #0x1c] - ldrsh r1, [r6, #2] - mov r0, r0 - cmp r1, r0 - strlt r1, [sp, #0x1c] - add r0, r6, #0x100 - ldrsh fp, [r0, #0xc6] - ldrsh r0, [r0, #0xc8] - ldrsh sb, [r6, #6] - cmp sb, r0 - movle sb, r0 - mov r0, sl - bl GetTile - ldrb r0, [r0, #7] - mov r5, sl - and r0, r0, #0xff - str r0, [sp, #0x3c] - b _0233EBC0 -_0233EB7C: - ldr r4, [sp, #0x1c] - b _0233EBB4 -_0233EB84: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x3c] - strb r1, [r0, #7] -_0233EBB4: - cmp r4, sb - blt _0233EB84 - add r5, r5, #1 -_0233EBC0: - cmp r5, fp - blt _0233EB7C - strh sl, [r6] - strh fp, [r6, #4] - ldr r0, [sp, #0x1c] - strh r0, [r6, #2] - strh sb, [r6, #6] - mov r0, #1 - strb r0, [r6, #0x1d4] - strb r0, [r6, #0x12] - mov r0, #0 - strb r0, [r6, #0x1cd] - mov r0, #1 - strb r0, [r6, #0x1d3] - b _0233ED08 -_0233EBFC: - ldr r0, [sp, #0x40] - cmp r8, r0 - bgt _0233ED08 - ldrb r0, [r6, #0x29] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x26] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0x28] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x27] - cmp r0, #0 - ldreqb r0, [r6, #0x30] - cmpeq r0, #0 - bne _0233ED08 - ldrsh r0, [r6, #0x1e] - str r0, [sp, #0x18] - ldrsh r0, [r6] - ldr r1, [sp, #0x18] - cmp r0, r1 - strlt r0, [sp, #0x18] - ldrsh sl, [r6, #2] - ldrsh r1, [r6, #0x22] - ldrsh sb, [r6, #4] - ldrsh fp, [r6, #0x24] - cmp sb, r1 - movle sb, r1 - mov r1, sl - bl GetTile - ldrb r0, [r0, #7] - ldr r5, [sp, #0x18] - and r0, r0, #0xff - str r0, [sp, #0x44] - b _0233ECD0 -_0233EC8C: - mov r4, sl - b _0233ECC4 -_0233EC94: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x44] - strb r1, [r0, #7] -_0233ECC4: - cmp r4, fp - blt _0233EC94 - add r5, r5, #1 -_0233ECD0: - cmp r5, sb - blt _0233EC8C - ldr r0, [sp, #0x18] - strh r0, [r6] - strh sb, [r6, #4] - strh sl, [r6, #2] - strh fp, [r6, #6] - mov r0, #1 - strb r0, [r6, #0x30] - strb r0, [r6, #0x12] - mov r0, #0 - strb r0, [r6, #0x29] - mov r0, #1 - strb r0, [r6, #0x2f] -_0233ED08: - add r8, r8, #1 -_0233ED0C: - ldr r0, [sp, #0x14] - cmp r8, r0 - blt _0233E850 - add r7, r7, #1 -_0233ED1C: - ldr r0, [sp, #0x10] - cmp r7, r0 - blt _0233E820 -_0233ED28: - add sp, sp, #0x48 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233ED30: .word 0x000001C2 - arm_func_end CreateGridCellConnections - - arm_func_start GenerateRoomImperfections -GenerateRoomImperfections: ; 0x0233ED34 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x34 - str r0, [sp] - str r1, [sp, #4] - str r2, [sp, #8] - mov fp, #0 - b _0233F100 -_0233ED50: - ldr r1, _0233F114 ; =0x000001C2 - ldr r0, [sp] - mov sl, #0 - mla r0, fp, r1, r0 - str r0, [sp, #0xc] - mvn r0, #0 - str r0, [sp, #0x30] - b _0233F0F0 -_0233ED70: - ldr r0, [sp, #0xc] - mov r1, #0x1e - mla sb, sl, r1, r0 - ldrb r0, [sb, #8] - cmp r0, #0 - ldreqb r0, [sb, #0x11] - cmpeq r0, #0 - ldreqb r0, [sb, #0x12] - cmpeq r0, #0 - bne _0233F0EC - ldrb r0, [sb, #0xb] - cmp r0, #0 - ldrneb r0, [sb, #0xa] - cmpne r0, #0 - beq _0233F0EC - ldrb r0, [sb, #9] - cmp r0, #0 - ldreqb r0, [sb, #0x10] - cmpeq r0, #0 - bne _0233F0EC - ldrb r0, [sb, #0x1c] - cmp r0, #0 - beq _0233F0EC - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x3c - blt _0233F0EC - ldrsh r3, [sb, #4] - ldrsh r2, [sb] - ldrsh r1, [sb, #6] - ldrsh r0, [sb, #2] - sub r2, r3, r2 - sub r0, r1, r0 - add r1, r2, r0 - mov r0, r1, asr #1 - add r0, r1, r0, lsr #30 - movs r0, r0, asr #2 - str r0, [sp, #0x24] - moveq r0, #1 - streq r0, [sp, #0x24] - mov r0, #0 - str r0, [sp, #0x2c] - b _0233F0DC -_0233EE1C: - mov r4, #0 -_0233EE20: - mov r0, #4 - bl DungeonRandInt - str r0, [sp, #0x20] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233EE48 -_0233EE38: ; jump table - b _0233EE48 ; case 0 - b _0233EE70 ; case 1 - b _0233EE9C ; case 2 - b _0233EECC ; case 3 -_0233EE48: - cmp r4, #0 - movne r0, #1 - strne r0, [sp, #0x28] - movne r5, #0 - moveq r0, #0 - ldrsh r8, [sb] - ldrsh r7, [sb, #2] - streq r0, [sp, #0x28] - moveq r5, #1 - b _0233EEF4 -_0233EE70: - ldrsh r0, [sb, #4] - cmp r4, #0 - movne r5, #1 - sub r8, r0, #1 - movne r0, #0 - strne r0, [sp, #0x28] - ldreq r0, [sp, #0x30] - ldrsh r7, [sb, #2] - streq r0, [sp, #0x28] - moveq r5, #0 - b _0233EEF4 -_0233EE9C: - ldrsh r0, [sb, #6] - cmp r4, #0 - ldrsh r1, [sb, #4] - sub r7, r0, #1 - ldrne r0, [sp, #0x30] - movne r5, #0 - strne r0, [sp, #0x28] - moveq r0, #0 - sub r8, r1, #1 - streq r0, [sp, #0x28] - ldreq r5, [sp, #0x30] - b _0233EEF4 -_0233EECC: - ldrsh r0, [sb, #6] - cmp r4, #0 - ldrne r5, [sp, #0x30] - sub r7, r0, #1 - movne r0, #0 - strne r0, [sp, #0x28] - moveq r0, #1 - ldrsh r8, [sb] - streq r0, [sp, #0x28] - moveq r5, #0 -_0233EEF4: - mov r6, #0 - b _0233F0BC -_0233EEFC: - ldrsh r0, [sb] - cmp r8, r0 - blt _0233F0C4 - ldrsh r0, [sb, #4] - cmp r8, r0 - bge _0233F0C4 - ldrsh r0, [sb, #2] - cmp r7, r0 - blt _0233F0C4 - ldrsh r0, [sb, #6] - cmp r7, r0 - bge _0233F0C4 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233F0AC - mov r5, #0 - b _0233F014 -_0233EF50: - ldr r0, _0233F118 ; =DIRECTIONS_XY - mov r1, r5, lsl #2 - ldrsh r2, [r0, r1] - add r0, r0, r5, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - str r0, [sp, #0x1c] - mov r0, #0 - str r0, [sp, #0x10] - add r0, r7, r1 - str r0, [sp, #0x18] - ldr r6, [sp, #0x30] - b _0233EFFC -_0233EF84: - ldr r0, [sp, #0x30] - str r0, [sp, #0x14] - b _0233EFE0 -_0233EF90: - ldr r1, [sp, #0x1c] - ldr r0, [sp, #0x14] - add r0, r1, r0 - ldr r1, [sp, #0x18] - add r1, r1, r6 - bl GetTile - ldrh r1, [r0] - and r1, r1, #3 - cmp r1, #1 - bne _0233EFD4 - ldrb r0, [r0, #7] - cmp r0, #0xff - moveq r0, #1 - streq r0, [sp, #0x10] - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233EFEC -_0233EFD4: - ldr r0, [sp, #0x14] - add r0, r0, #1 - str r0, [sp, #0x14] -_0233EFE0: - ldr r0, [sp, #0x14] - cmp r0, #1 - ble _0233EF90 -_0233EFEC: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233F004 - add r6, r6, #1 -_0233EFFC: - cmp r6, #1 - ble _0233EF84 -_0233F004: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233F01C - add r5, r5, #1 -_0233F014: - cmp r5, #8 - blt _0233EF50 -_0233F01C: - cmp r5, #8 - bne _0233F0C4 - ldr r1, _0233F11C ; =CORNER_CARDINAL_NEIGHBOR_IS_OPEN - ldr r0, [sp, #0x20] - mov r5, #0 - add r6, r1, r0, lsl #3 - b _0233F080 -_0233F038: - ldr r0, _0233F118 ; =DIRECTIONS_XY - mov r1, r5, lsl #2 - ldrsh r2, [r0, r1] - add r0, r0, r5, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r1, r0, #0xff - ldrb r0, [r5, r6] - cmp r1, r0 - bne _0233F088 - add r5, r5, #2 -_0233F080: - cmp r5, #8 - blt _0233F038 -_0233F088: - cmp r5, #8 - bne _0233F0C4 - mov r0, r8 - mov r1, r7 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - b _0233F0C4 -_0233F0AC: - ldr r0, [sp, #0x28] - add r7, r7, r5 - add r8, r8, r0 - add r6, r6, #1 -_0233F0BC: - cmp r6, #0xa - blt _0233EEFC -_0233F0C4: - add r4, r4, #1 - cmp r4, #2 - blt _0233EE20 - ldr r0, [sp, #0x2c] - add r0, r0, #1 - str r0, [sp, #0x2c] -_0233F0DC: - ldr r1, [sp, #0x2c] - ldr r0, [sp, #0x24] - cmp r1, r0 - blt _0233EE1C -_0233F0EC: - add sl, sl, #1 -_0233F0F0: - ldr r0, [sp, #8] - cmp sl, r0 - blt _0233ED70 - add fp, fp, #1 -_0233F100: - ldr r0, [sp, #4] - cmp fp, r0 - blt _0233ED50 - add sp, sp, #0x34 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233F114: .word 0x000001C2 -_0233F118: .word DIRECTIONS_XY -_0233F11C: .word CORNER_CARDINAL_NEIGHBOR_IS_OPEN - arm_func_end GenerateRoomImperfections - - arm_func_start CreateHallway -CreateHallway: ; 0x0233F120 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldrb r6, [sp, #0x28] - mov sl, r0 - ldr r0, [sp, #0x30] - mov sb, r1 - cmp r6, #0 - mov r8, r2 - mov r7, r3 - mov r4, sl - mov r5, sb - ldr fp, [sp, #0x2c] - str r0, [sp, #0x30] - mov r6, #0 - beq _0233F328 - b _0233F1C4 -_0233F15C: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F1AC - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F1B4 -_0233F1AC: - cmp sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F1B4: - ldr r0, [sp, #0x30] - cmp sb, r0 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F1C4: - ldr r0, [sp, #0x30] - cmp sb, r0 - bne _0233F15C - mov r6, #0 - b _0233F240 -_0233F1D8: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F228 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F234 -_0233F228: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F234: - cmp sl, r8 - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F240: - cmp sl, r8 - bne _0233F1D8 - mov r6, #0 - b _0233F2B8 -_0233F250: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F2A0 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F2AC -_0233F2A0: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F2AC: - cmp sb, r7 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F2B8: - cmp sb, r7 - bne _0233F250 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F2C4: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F314 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F31C -_0233F314: - cmp sl, r4 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F31C: - cmp sl, fp - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F328: - cmp sl, fp - bne _0233F2C4 - mov r6, #0 - b _0233F3A0 -_0233F338: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F388 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F394 -_0233F388: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F394: - cmp sb, r7 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F3A0: - cmp sb, r7 - bne _0233F338 - mov r6, #0 - b _0233F418 -_0233F3B0: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F400 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F40C -_0233F400: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F40C: - cmp sl, r8 - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F418: - cmp sl, r8 - bne _0233F3B0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end CreateHallway - - arm_func_start EnsureConnectedGrid -EnsureConnectedGrid: ; 0x0233F424 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - str r0, [sp, #0xc] - mov r7, r1 - mov fp, r2 - mov r6, r3 - ldr r5, [sp, #0x50] - mov r8, #0 - b _0233F818 -_0233F448: - ldr r1, _0233F8FC ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r4, #0 - mla sb, r8, r1, r0 - sub r0, fp, #1 - str r0, [sp, #0x20] - add r0, r6, r8, lsl #2 - str r0, [sp, #0x28] - sub r0, r7, #1 - str r0, [sp, #0x24] - b _0233F80C -_0233F474: - mov r0, #0x1e - mla sl, r4, r0, sb - ldrb r0, [sl, #8] - cmp r0, #0 - ldreqb r0, [sl, #0x11] - cmpeq r0, #0 - ldreqb r0, [sl, #0xb] - cmpeq r0, #0 - bne _0233F808 - ldrb r0, [sl, #0xa] - cmp r0, #0 - beq _0233F7CC - ldrb r0, [sl, #9] - cmp r0, #0 - bne _0233F7CC - ldrsh r0, [sl] - ldrsh r1, [sl, #4] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x1c] - ldrsh r0, [sl, #2] - ldrsh r1, [sl, #6] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x18] - cmp r4, #0 - ble _0233F590 - ldrb r0, [sl, #-0x16] - cmp r0, #0 - ldreqb r0, [sl, #-0xc] - cmpeq r0, #0 - bne _0233F590 - ldrb r0, [sl, #-0x13] - cmp r0, #0 - beq _0233F590 - ldrb r0, [sl, #-0x14] - cmp r0, #0 - ldrsh r0, [sl, #-0x1e] - streq r0, [sp, #0x14] - beq _0233F544 - ldrsh r1, [sl, #-0x1a] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x14] - ldrsh r0, [sl, #-0x1c] - ldrsh r1, [sl, #-0x18] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange -_0233F544: - mov r1, #1 - str r1, [sp] - mov r1, #0x1e - mla sl, r4, r1, sb - ldr r1, [r6, r8, lsl #2] - ldr r0, [sp, #0x1c] - str r1, [sp, #4] - ldr r1, [r5, r4, lsl #2] - ldr r2, [sp, #0x14] - str r1, [sp, #8] - ldrsh r3, [sl, #-0x18] - ldrsh r1, [sl, #2] - sub r3, r3, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x13] - strb r0, [sl, #-0xa] - b _0233F808 -_0233F590: - ldr r0, [sp, #0x20] - cmp r4, r0 - bge _0233F64C - ldrb r0, [sl, #0x26] - cmp r0, #0 - ldreqb r0, [sl, #0x30] - cmpeq r0, #0 - bne _0233F64C - ldrb r0, [sl, #0x29] - cmp r0, #0 - beq _0233F64C - ldrb r0, [sl, #0x28] - cmp r0, #0 - ldrsh r0, [sl, #0x1e] - streq r0, [sp, #0x10] - beq _0233F5F8 - ldrsh r1, [sl, #0x22] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x10] - ldrsh r0, [sl, #0x20] - ldrsh r1, [sl, #0x24] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange -_0233F5F8: - mov r1, #1 - str r1, [sp] - mov r1, #0x1e - mla sl, r4, r1, sb - ldr r3, [r6, r8, lsl #2] - add r1, r5, r4, lsl #2 - str r3, [sp, #4] - ldr r1, [r1, #4] - ldr r0, [sp, #0x1c] - sub r1, r1, #1 - str r1, [sp, #8] - ldrsh r1, [sl, #6] - ldrsh r3, [sl, #0x20] - ldr r2, [sp, #0x10] - sub r1, r1, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x14] - strb r0, [sl, #0x31] - b _0233F808 -_0233F64C: - cmp r8, #0 - ble _0233F708 - ldrb r0, [sl, #-0x1ba] - cmp r0, #0 - ldreqb r0, [sl, #-0x1b0] - cmpeq r0, #0 - bne _0233F708 - ldrb r0, [sl, #-0x1b7] - cmp r0, #0 - beq _0233F708 - ldrb r0, [sl, #-0x1b8] - cmp r0, #0 - sub r0, sl, #0x100 - ldreqsh r3, [r0, #-0xc0] - beq _0233F6B8 - ldrsh r1, [r0, #-0xbe] - ldrsh r2, [r0, #-0xc2] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - sub r0, sl, #0x100 - ldrsh r1, [r0, #-0xbc] - ldrsh r2, [r0, #-0xc0] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233F6B8: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - mul r0, r4, r0 - ldr ip, [r6, r8, lsl #2] - add sl, sb, r0 - str ip, [sp, #4] - ldr ip, [r5, r4, lsl #2] - sub r2, sl, #0x100 - str ip, [sp, #8] - ldrsh r2, [r2, #-0xc2] - ldrsh r0, [sb, r0] - ldr r1, [sp, #0x18] - sub r2, r2, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x15] - strb r0, [sl, #-0x1ac] - b _0233F808 -_0233F708: - ldr r0, [sp, #0x24] - cmp r8, r0 - bge _0233F808 - ldrb r0, [sl, #0x1ca] - cmp r0, #0 - ldreqb r0, [sl, #0x1d4] - cmpeq r0, #0 - bne _0233F808 - ldrb r0, [sl, #0x1cd] - cmp r0, #0 - beq _0233F808 - ldrb r0, [sl, #0x1cc] - cmp r0, #0 - add r0, sl, #0x100 - ldreqsh r3, [r0, #0xc4] - beq _0233F778 - ldrsh r1, [r0, #0xc6] - ldrsh r2, [r0, #0xc2] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - add r0, sl, #0x100 - ldrsh r1, [r0, #0xc8] - ldrsh r2, [r0, #0xc4] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233F778: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - mla sl, r4, r0, sb - ldr r0, [sp, #0x28] - ldr r1, [sp, #0x18] - ldr r2, [r0, #4] - add r0, sl, #0x100 - sub r2, r2, #1 - str r2, [sp, #4] - ldr r2, [r5, r4, lsl #2] - str r2, [sp, #8] - ldrsh r2, [r0, #0xc2] - ldrsh r0, [sl, #4] - sub r0, r0, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x16] - strb r0, [sl, #0x1d7] - b _0233F808 -_0233F7CC: - ldrsh r0, [sl] - ldrsh r1, [sl, #2] - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #1 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #2 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] -_0233F808: - add r4, r4, #1 -_0233F80C: - cmp r4, fp - blt _0233F474 - add r8, r8, #1 -_0233F818: - cmp r8, r7 - blt _0233F448 - mov r8, #0 - b _0233F8EC -_0233F828: - ldr r1, _0233F8FC ; =0x000001C2 - ldr r0, [sp, #0xc] - mov sb, #0 - mla sl, r8, r1, r0 - b _0233F8E0 -_0233F83C: - mov r0, #0x1e - mla r5, sb, r0, sl - ldrb r0, [r5, #8] - cmp r0, #0 - ldreqb r0, [r5, #0x11] - cmpeq r0, #0 - ldreqb r0, [r5, #0xb] - cmpeq r0, #0 - ldreqb r0, [r5, #0xf] - cmpeq r0, #0 - bne _0233F8DC - ldrsh r6, [r5] - b _0233F8D0 -_0233F870: - ldrsh r4, [r5, #2] - b _0233F8C0 -_0233F878: - mov r0, r6 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #2 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #1 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] - mov r1, #0xff - strb r1, [r0, #7] -_0233F8C0: - ldrsh r0, [r5, #6] - cmp r4, r0 - blt _0233F878 - add r6, r6, #1 -_0233F8D0: - ldrsh r0, [r5, #4] - cmp r6, r0 - blt _0233F870 -_0233F8DC: - add sb, sb, #1 -_0233F8E0: - cmp sb, fp - blt _0233F83C - add r8, r8, #1 -_0233F8EC: - cmp r8, r7 - blt _0233F828 - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233F8FC: .word 0x000001C2 - arm_func_end EnsureConnectedGrid - - arm_func_start SetTerrainObstacleChecked -SetTerrainObstacleChecked: ; 0x0233F900 - ldrh r3, [r0] - cmp r1, #0 - bic r1, r3, #3 - strh r1, [r0] - bxeq lr - ldrb r1, [r0, #7] - cmp r1, r2 - bxne lr - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - bx lr - arm_func_end SetTerrainObstacleChecked - - arm_func_start FinalizeJunctions -FinalizeJunctions: ; 0x0233F93C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r4, #0 -_0233F944: - sub r5, r4, #1 - mov r6, #0 - mov r7, #0xff -_0233F950: - mov r0, r4 - mov r1, r6 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233FAFC - mov r0, r4 - mov r1, r6 - bl GetTile - ldrb r0, [r0, #7] - cmp r0, #0xff - bne _0233FAD4 - cmp r4, #0 - ble _0233F9D4 - mov r0, r5 - mov r1, r6 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233F9D4 - ldrh r1, [r0] - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233F9D4 - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233F9D4: - cmp r6, #0 - ble _0233FA28 - mov r0, r4 - sub r1, r6, #1 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233FA28 - ldrh r1, [r0] - orr r1, r1, #8 - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233FA28 - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233FA28: - cmp r6, #0x1f - bge _0233FA7C - mov r0, r4 - add r1, r6, #1 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233FA7C - ldrh r1, [r0] - orr r1, r1, #8 - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233FA7C - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233FA7C: - cmp r4, #0x37 - bge _0233FAFC - mov r1, r6 - add r0, r4, #1 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233FAFC - ldrh r1, [r0] - orr r1, r1, #8 - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233FAFC - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233FAFC -_0233FAD4: - mov r0, r4 - mov r1, r6 - bl GetTile - ldrb r0, [r0, #7] - cmp r0, #0xfe - bne _0233FAFC - mov r0, r4 - mov r1, r6 - bl GetTileSafe - strb r7, [r0, #7] -_0233FAFC: - add r6, r6, #1 - cmp r6, #0x20 - blt _0233F950 - add r4, r4, #1 - cmp r4, #0x38 - blt _0233F944 - bl ov29_0233FB1C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end FinalizeJunctions - - arm_func_start ov29_0233FB1C -ov29_0233FB1C: ; 0x0233FB1C -#ifdef JAPAN -#define OV29_0233FB1C_OFFSET 0x5C -#else -#define OV29_0233FB1C_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r0, _0233FBE4 ; =DUNGEON_PTR - mov r1, #0 - ldr r6, [r0] - mov r7, r1 -_0233FB30: - add r0, r6, r1, lsl #1 -#ifdef JAPAN - add r0, r0, #0xf100 -#else - add r0, r0, #0xf200 -#endif - add r1, r1, #1 - strh r7, [r0, #0x68 + OV29_0233FB1C_OFFSET] - cmp r1, #0x20 - blt _0233FB30 -_0233FB48: - mov r0, r7, lsl #0x10 - mov r5, #0 - mov r4, r0, asr #0x10 -_0233FB54: - mov r0, r7 - mov r1, r5 - bl GetTile - ldrh r0, [r0] - tst r0, #8 - beq _0233FBC8 - mov r0, r7 - mov r1, r5 - bl GetTile - ldrb r2, [r0, #7] - cmp r2, #0 - blt _0233FBC8 - cmp r2, #0x20 - addlt r0, r6, r2, lsl #1 -#ifdef JAPAN - addlt r1, r0, #0xf100 -#else - addlt r1, r0, #0xf200 -#endif - ldrltsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] - cmplt r0, #0x20 - bge _0233FBC8 - add r2, r6, r2, lsl #7 - add r0, r2, r0, lsl #2 - add r0, r0, #0xf200 -#ifdef JAPAN - strh r4, [r0, #4] -#else - strh r4, [r0, #0xa8] -#endif - ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] - add r0, r2, r0, lsl #2 - add r0, r0, #0xf200 -#ifdef JAPAN - strh r5, [r0, #6] -#else - strh r5, [r0, #0xaa] -#endif - ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] - add r0, r0, #1 - strh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] -_0233FBC8: - add r5, r5, #1 - cmp r5, #0x20 - blt _0233FB54 - add r7, r7, #1 - cmp r7, #0x38 - blt _0233FB48 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233FBE4: .word DUNGEON_PTR - arm_func_end ov29_0233FB1C - - arm_func_start GenerateKecleonShop -GenerateKecleonShop: ; 0x0233FBE8 -#ifdef JAPAN -#define GENERATE_KECLEON_SHOP_OFFSET -0xA4 -#else -#define GENERATE_KECLEON_SHOP_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x44 - ldr r5, _0233FF8C ; =DUNGEON_PTR - ldr r4, _0233FF90 ; =FLOOR_GENERATION_STATUS - mvn r7, #0 - ldr r6, [r5] - strh r7, [r4, #0x20] - strh r7, [r4, #0x22] - ldrb r4, [r4, #1] - mov sl, r0 - str r1, [sp] - str r2, [sp, #4] - mov r5, r3 - cmp r4, #0 - bne _0233FF84 - bl GetFloorType - cmp r0, #2 - cmpne r5, #0 - beq _0233FF84 - mov r0, #0x64 - bl DungeonRandInt - cmp r5, r0 - ble _0233FF84 - mov r4, #0 - add r2, sp, #0x26 - add r1, sp, #8 -_0233FC50: - mov r0, r4, lsl #0x10 - mov r3, r4, lsl #1 - mov r0, r0, asr #0x10 - add r4, r4, #1 - strh r0, [r2, r3] - strh r0, [r1, r3] - cmp r4, #0xf - blt _0233FC50 - mov r7, #0xf - mov r8, #0 - mov r5, r7 - add r4, sp, #0x26 -_0233FC80: - mov r0, r7 - bl DungeonRandInt - mov sb, r0 - mov r0, r5 - bl DungeonRandInt - mov r3, sb, lsl #1 - mov r1, r0, lsl #1 - add r8, r8, #1 - ldrsh r2, [r4, r3] - ldrsh r0, [r4, r1] - cmp r8, #0xc8 - strh r0, [r4, r3] - strh r2, [r4, r1] - blt _0233FC80 - mov r7, #0xf - mov r8, #0 - mov r5, r7 - add r4, sp, #8 -_0233FCC8: - mov r0, r7 - bl DungeonRandInt - mov sb, r0 - mov r0, r5 - bl DungeonRandInt - mov r3, sb, lsl #1 - mov r1, r0, lsl #1 - add r8, r8, #1 - ldrsh r2, [r4, r3] - ldrsh r0, [r4, r1] - cmp r8, #0xc8 - strh r0, [r4, r3] - strh r2, [r4, r1] - blt _0233FCC8 - mov r4, #0 - b _0233FF7C -_0233FD08: - add r0, sp, #0x26 - mov r1, r4, lsl #1 - ldrsh r1, [r0, r1] - ldr r0, [sp] - cmp r1, r0 - bge _0233FF78 - ldr r0, _0233FF94 ; =0x000001C2 - mov r5, #0 - mul fp, r1, r0 - add sb, sl, fp - b _0233FF70 -_0233FD34: - mov r1, r5, lsl #1 - add r0, sp, #8 - ldrsh r1, [r0, r1] - ldr r0, [sp, #4] - cmp r1, r0 - bge _0233FF6C - mov r0, #0x1e - mul r7, r1, r0 - add r8, sb, r7 - ldrb r0, [r8, #8] - cmp r0, #0 - ldreqb r0, [r8, #0x11] - cmpeq r0, #0 - ldreqb r0, [r8, #0x12] - cmpeq r0, #0 - bne _0233FF6C - ldrb r0, [r8, #0xb] - cmp r0, #0 - ldrneb r0, [r8, #0xa] - cmpne r0, #0 - beq _0233FF6C - ldrb r0, [r8, #9] - cmp r0, #0 - ldreqb r0, [r8, #0x10] - cmpeq r0, #0 - ldreqb r0, [r8, #0x1d] - cmpeq r0, #0 - bne _0233FF6C - ldrsh r1, [r8, #4] - ldrsh r0, [r8] - sub r0, r1, r0 - bl abs - cmp r0, #5 - blt _0233FF6C - ldrsh r1, [r8, #6] - ldrsh r0, [r8, #2] - sub r0, r1, r0 - bl abs - cmp r0, #4 - blt _0233FF6C - ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS - add r1, sl, fp - mov r3, #1 - strb r3, [r0, #3] - add r2, r1, r7 - strb r3, [r2, #0xc] - ldrsh r1, [sb, r7] - add r1, r1, #1 - str r1, [r0, #0x30] - ldrsh r1, [r2, #4] - sub r1, r1, #1 - str r1, [r0, #0x38] - ldrsh r1, [r2, #2] - add r3, r1, #1 - str r3, [r0, #0x34] - ldrsh r1, [r2, #6] - sub r2, r1, #1 - sub r1, r2, r3 - cmp r1, #3 - str r2, [r0, #0x3c] - addlt r1, r2, #1 - strlt r1, [r0, #0x3c] - ldr r1, _0233FF98 ; =0x0000270F - add r0, r6, #0xc000 - str r1, [r0, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] - str r1, [r0, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] - rsb r2, r1, #0 - str r2, [r0, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] - ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS - str r2, [r0, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] - ldr r4, [r1, #0x30] - b _0233FED8 -_0233FE54: - ldr sl, _0233FF90 ; =FLOOR_GENERATION_STATUS - add r8, r6, #0xc000 - ldr r5, [sl, #0x34] - b _0233FEC8 -_0233FE64: - mov r0, r4 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - orr r1, r1, #0x20 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #8 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #1 - strh r1, [r0, #2] - ldr r0, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r4 - strgt r4, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] - ldr r0, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r5 - strgt r5, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] - ldr r0, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r4 - strlt r4, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] - ldr r0, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r5 - strlt r5, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] - add r5, r5, #1 -_0233FEC8: - ldr r0, [sl, #0x3c] - cmp r5, r0 - blt _0233FE64 - add r4, r4, #1 -_0233FED8: - ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x38] - cmp r4, r0 - blt _0233FE54 - add r4, sb, r7 - ldrsh r5, [sb, r7] - b _0233FF28 -_0233FEF4: - ldrsh r6, [r4, #2] - b _0233FF18 -_0233FEFC: - mov r0, r5 - mov r1, r6 - bl GetTileSafe - ldrh r1, [r0, #2] - add r6, r6, #1 - orr r1, r1, #0x10 - strh r1, [r0, #2] -_0233FF18: - ldrsh r0, [r4, #6] - cmp r6, r0 - blt _0233FEFC - add r5, r5, #1 -_0233FF28: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233FEF4 - ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS - ldr r2, [r1, #0x30] - ldr r0, [r1, #0x38] - add r0, r2, r0 - add r0, r0, r0, lsr #31 - mov r0, r0, asr #1 - strh r0, [r1, #0x20] - ldr r2, [r1, #0x34] - ldr r0, [r1, #0x3c] - add r0, r2, r0 - add r0, r0, r0, lsr #31 - mov r0, r0, asr #1 - strh r0, [r1, #0x22] - b _0233FF84 -_0233FF6C: - add r5, r5, #1 -_0233FF70: - cmp r5, #0xf - blt _0233FD34 -_0233FF78: - add r4, r4, #1 -_0233FF7C: - cmp r4, #0xf - blt _0233FD08 -_0233FF84: - add sp, sp, #0x44 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233FF8C: .word DUNGEON_PTR -_0233FF90: .word FLOOR_GENERATION_STATUS -_0233FF94: .word 0x000001C2 -_0233FF98: .word 0x0000270F - arm_func_end GenerateKecleonShop - - arm_func_start GenerateMonsterHouse -GenerateMonsterHouse: ; 0x0233FF9C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x100 - ldr r4, _02340218 ; =DUNGEON_PTR - movs r5, r3 - mov sl, r0 - mov sb, r1 - mov r8, r2 - ldr r6, [r4] - beq _02340210 - mov r0, #0x64 - bl DungeonRandInt - cmp r5, r0 - ble _02340210 - ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #3] - cmp r0, #0 - bne _02340210 - bl IsOutlawMonsterHouseFloor - cmp r0, #0 - bne _0233FFF8 - bl IsDestinationFloorWithMonster - cmp r0, #0 - bne _02340210 -_0233FFF8: - bl GetFloorType - cmp r0, #0 - bne _02340210 - mov r5, #0 - mov r2, r5 - mov r1, r5 - b _02340088 -_02340014: - ldr r0, _02340220 ; =0x000001C2 - mov r3, r1 - mla r4, r2, r0, sl - mov r7, #0x1e - b _0234007C -_02340028: - mla r0, r3, r7, r4 - ldrb fp, [r0, #8] - cmp fp, #0 - ldreqb fp, [r0, #0x11] - cmpeq fp, #0 - bne _02340078 - ldrb fp, [r0, #0xb] - cmp fp, #0 - ldrneb fp, [r0, #0xa] - cmpne fp, #0 - beq _02340078 - ldrb fp, [r0, #0xc] - cmp fp, #0 - ldreqb fp, [r0, #0xf] - cmpeq fp, #0 - ldreqb fp, [r0, #0x10] - cmpeq fp, #0 - ldreqb r0, [r0, #9] - cmpeq r0, #0 - addeq r5, r5, #1 -_02340078: - add r3, r3, #1 -_0234007C: - cmp r3, r8 - blt _02340028 - add r2, r2, #1 -_02340088: - cmp r2, sb - blt _02340014 - cmp r5, #0 - beq _02340210 - mov r1, #0 - mov r7, r1 - add r0, sp, #0 -_023400A4: - strb r7, [r0, r1] - add r1, r1, #1 - cmp r1, #0x100 - blt _023400A4 - mov r0, #1 - strb r0, [sp] - add fp, sp, #0 -_023400C0: - mov r0, r5 - bl DungeonRandInt - mov r4, r0 - mov r0, r5 - bl DungeonRandInt - add r7, r7, #1 - ldrb r2, [fp, r4] - ldrb r1, [fp, r0] - cmp r7, #0x40 - strb r1, [fp, r4] - strb r2, [fp, r0] - blt _023400C0 - mov r7, #0 - mov r4, r7 - add fp, sp, #0 - b _02340208 -_02340100: - ldr r0, _02340220 ; =0x000001C2 - mov r5, #0 - mul r3, r4, r0 - add r2, sl, r3 - mov lr, #0x1e - b _023401FC -_02340118: - mul r1, r5, lr - add r0, r2, r1 - ldrb ip, [r0, #8] - cmp ip, #0 - ldreqb ip, [r0, #0x11] - cmpeq ip, #0 - bne _023401F8 - ldrb ip, [r0, #0xb] - cmp ip, #0 - ldrneb ip, [r0, #0xa] - cmpne ip, #0 - beq _023401F8 - ldrb ip, [r0, #0xc] - cmp ip, #0 - ldreqb ip, [r0, #0xf] - cmpeq ip, #0 - ldreqb ip, [r0, #0x10] - cmpeq ip, #0 - ldreqb r0, [r0, #9] - cmpeq r0, #0 - bne _023401F8 - ldrb r0, [fp, r7] - cmp r0, #0 - beq _023401F4 - ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS - add r2, sl, r3 - mov r3, #1 - strb r3, [r0, #1] - add r7, r2, r1 - strb r3, [r7, #0xe] - ldrsh r5, [r2, r1] - add r6, r6, #0x4000 - b _023401E4 -_0234019C: - ldrsh r4, [r7, #2] - b _023401D4 -_023401A4: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - orr r2, r2, #0x40 - strh r2, [r0] - mov r0, r5 - bl GetTile - ldrb r0, [r0, #7] - add r4, r4, #1 -#ifdef JAPAN - strb r0, [r6, #0x25] -#else - strb r0, [r6, #0xc9] -#endif -_023401D4: - ldrsh r0, [r7, #6] - cmp r4, r0 - blt _023401A4 - add r5, r5, #1 -_023401E4: - ldrsh r0, [r7, #4] - cmp r5, r0 - blt _0234019C - b _02340210 -_023401F4: - add r7, r7, #1 -_023401F8: - add r5, r5, #1 -_023401FC: - cmp r5, r8 - blt _02340118 - add r4, r4, #1 -_02340208: - cmp r4, sb - blt _02340100 -_02340210: - add sp, sp, #0x100 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02340218: .word DUNGEON_PTR -_0234021C: .word FLOOR_GENERATION_STATUS -_02340220: .word 0x000001C2 - arm_func_end GenerateMonsterHouse - - arm_func_start GenerateMazeRoom -GenerateMazeRoom: ; 0x02340224 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x100 - ldr r7, _02340450 ; =DUNGEON_PTR - movs r8, r3 - mov r6, r0 - mov r5, r1 - mov r4, r2 - ldr r7, [r7] - beq _02340448 - mov r0, #0x64 - bl DungeonRandInt - cmp r8, r0 - ble _02340448 - add r0, r7, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x3a] -#else - ldrsh r0, [r0, #0xde] -#endif - cmp r0, #0 - bge _02340448 - mov sb, #0 - mov r1, sb - b _02340310 -_02340274: - ldr r0, _02340454 ; =0x000001C2 - mov r2, #0 - mla r3, r1, r0, r6 - mov r7, #0x1e - b _02340304 -_02340288: - mla r0, r2, r7, r3 - ldrb r8, [r0, #8] - cmp r8, #0 - ldreqb r8, [r0, #0x11] - cmpeq r8, #0 - bne _02340300 - ldrb r8, [r0, #0xb] - cmp r8, #0 - ldrneb r8, [r0, #0xa] - cmpne r8, #0 - beq _02340300 - ldrb r8, [r0, #0xc] - cmp r8, #0 - ldreqb r8, [r0, #0xf] - cmpeq r8, #0 - ldreqb r8, [r0, #0xe] - cmpeq r8, #0 - ldreqb r8, [r0, #9] - cmpeq r8, #0 - bne _02340300 - ldrsh sl, [r0, #4] - ldrsh r8, [r0] - sub r8, sl, r8 - tst r8, #1 - beq _02340300 - ldrsh r8, [r0, #6] - ldrsh r0, [r0, #2] - sub r0, r8, r0 - tst r0, #1 - addne sb, sb, #1 -_02340300: - add r2, r2, #1 -_02340304: - cmp r2, r4 - blt _02340288 - add r1, r1, #1 -_02340310: - cmp r1, r5 - blt _02340274 - cmp sb, #0 - beq _02340448 - mov r1, #0 - mov sl, r1 - add r0, sp, #0 -_0234032C: - strb sl, [r0, r1] - add r1, r1, #1 - cmp r1, #0x100 - blt _0234032C - mov r0, #1 - strb r0, [sp] - add r7, sp, #0 -_02340348: - mov r0, sb - bl DungeonRandInt - mov r8, r0 - mov r0, sb - bl DungeonRandInt - add sl, sl, #1 - ldrb r2, [r7, r8] - ldrb r1, [r7, r0] - cmp sl, #0x40 - strb r1, [r7, r8] - strb r2, [r7, r0] - blt _02340348 - mov r7, #0 - mov r2, r7 - b _02340440 -_02340384: - ldr r0, _02340454 ; =0x000001C2 - mov r3, #0 - mla r1, r2, r0, r6 - add sl, sp, #0 - mov r8, #0x1e - b _02340434 -_0234039C: - mla r0, r3, r8, r1 - ldrb sb, [r0, #8] - cmp sb, #0 - ldreqb sb, [r0, #0x11] - cmpeq sb, #0 - bne _02340430 - ldrb sb, [r0, #0xb] - cmp sb, #0 - ldrneb sb, [r0, #0xa] - cmpne sb, #0 - beq _02340430 - ldrb sb, [r0, #0xc] - cmp sb, #0 - ldreqb sb, [r0, #0xf] - cmpeq sb, #0 - ldreqb sb, [r0, #0xe] - cmpeq sb, #0 - ldreqb sb, [r0, #9] - cmpeq sb, #0 - bne _02340430 - ldrsh ip, [r0, #4] - ldrsh sb, [r0] - sub sb, ip, sb - tst sb, #1 - beq _02340430 - ldrsh ip, [r0, #6] - ldrsh sb, [r0, #2] - sub sb, ip, sb - tst sb, #1 - beq _02340430 - ldrb sb, [sl, r7] - cmp sb, #0 - beq _0234042C - mov r1, #0 - bl GenerateMaze - b _02340448 -_0234042C: - add r7, r7, #1 -_02340430: - add r3, r3, #1 -_02340434: - cmp r3, r4 - blt _0234039C - add r2, r2, #1 -_02340440: - cmp r2, r5 - blt _02340384 -_02340448: - add sp, sp, #0x100 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02340450: .word DUNGEON_PTR -_02340454: .word 0x000001C2 - arm_func_end GenerateMazeRoom - - arm_func_start GenerateMaze -GenerateMaze: ; 0x02340458 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x10 - ldr r2, _023406D0 ; =FLOOR_GENERATION_STATUS - mov r3, #1 - mov r5, r0 - strb r3, [r2, #7] - strb r3, [r5, #0x10] - mov r4, r1 - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - bl GetTile - ldrsh r1, [r5] - ldrb r7, [r0, #7] - add r6, r1, #1 - b _023404DC -_02340494: - ldrsh r1, [r5, #2] - mov r0, r6 - sub r1, r1, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _023404D8 - ldrsh r3, [r5, #2] - ldrsh r2, [r5, #4] - mov r0, r6 - sub r1, r3, #1 - str r2, [sp] - ldrsh r2, [r5, #6] - stmib sp, {r2, r4, r7} - ldrsh r2, [r5] - bl GenerateMazeLine -_023404D8: - add r6, r6, #2 -_023404DC: - ldrsh r0, [r5, #4] - sub r0, r0, #1 - cmp r6, r0 - blt _02340494 - ldrsh r0, [r5, #2] - add r6, r0, #1 - b _02340538 -_023404F8: - ldrsh r0, [r5, #4] - mov r1, r6 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _02340534 - ldrsh r0, [r5, #4] - mov r1, r6 - str r0, [sp] - ldrsh r2, [r5, #6] - stmib sp, {r2, r4, r7} - ldrsh r2, [r5] - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_02340534: - add r6, r6, #2 -_02340538: - ldrsh r0, [r5, #6] - sub r0, r0, #1 - cmp r6, r0 - blt _023404F8 - ldrsh r0, [r5] - add r6, r0, #1 - b _02340594 -_02340554: - ldrsh r1, [r5, #6] - mov r0, r6 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _02340590 - ldrsh r1, [r5, #6] - ldrsh r2, [r5, #4] - mov r0, r6 - str r2, [sp] - stmib sp, {r1, r4, r7} - ldrsh r2, [r5] - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_02340590: - add r6, r6, #2 -_02340594: - ldrsh r0, [r5, #4] - sub r0, r0, #1 - cmp r6, r0 - blt _02340554 - ldrsh r0, [r5, #2] - add r6, r0, #1 - b _023405F8 -_023405B0: - ldrsh r0, [r5] - mov r1, r6 - sub r0, r0, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _023405F4 - ldrsh r2, [r5] - ldrsh r3, [r5, #4] - mov r1, r6 - sub r0, r2, #1 - str r3, [sp] - ldrsh r3, [r5, #6] - stmib sp, {r3, r4, r7} - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_023405F4: - add r6, r6, #2 -_023405F8: - ldrsh r0, [r5, #6] - sub r0, r0, #1 - cmp r6, r0 - blt _023405B0 - ldrsh r0, [r5] - add r8, r0, #3 - b _023406B8 -_02340614: - ldrsh r0, [r5, #2] - sub r6, r8, #1 - add sb, r0, #3 - b _023406A4 -_02340624: - mov r0, r8 - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _023406A0 - cmp r4, #0 - mov r0, r6 - mov r1, sb - beq _0234066C - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - b _02340678 -_0234066C: - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 -_02340678: - strh r1, [r0] - ldrsh r2, [r5, #4] - mov r0, r8 - mov r1, sb - str r2, [sp] - ldrsh r2, [r5, #6] - stmib sp, {r2, r4, r7} - ldrsh r2, [r5] - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_023406A0: - add sb, sb, #2 -_023406A4: - ldrsh r0, [r5, #6] - sub r0, r0, #3 - cmp sb, r0 - blt _02340624 - add r8, r8, #2 -_023406B8: - ldrsh r0, [r5, #4] - sub r0, r0, #3 - cmp r8, r0 - blt _02340614 - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_023406D0: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateMaze - - arm_func_start GenerateMazeLine -GenerateMazeLine: ; 0x023406D4 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - ldr r4, [sp, #0x34] - ldr fp, [sp, #0x30] - ldr r7, [sp, #0x38] - ldr r6, [sp, #0x3c] - str r4, [sp, #0x34] - mov sb, r0 - mov r8, r1 - str r2, [sp] - str r3, [sp, #4] -_02340700: - mov r0, #4 - bl DungeonRandInt - mov r4, r0 - mov r0, sb - mov r1, r8 - mov sl, #0 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - mvn r0, #1 - str r0, [sp, #8] -_02340730: - and r5, r4, #3 - cmp r5, #3 - addls pc, pc, r5, lsl #2 - b _02340774 -_02340740: ; jump table - b _02340750 ; case 0 - b _0234075C ; case 1 - b _02340768 ; case 2 - b _02340774 ; case 3 -_02340750: - mov r0, #2 - mov r2, #0 - b _0234077C -_0234075C: - mov r0, #0 - ldr r2, [sp, #8] - b _0234077C -_02340768: - ldr r0, [sp, #8] - mov r2, #0 - b _0234077C -_02340774: - mov r0, #0 - mov r2, #2 -_0234077C: - ldr r1, [sp] - add r0, sb, r0 - cmp r1, r0 - bgt _023407C4 - cmp fp, r0 - ble _023407C4 - add r1, r8, r2 - ldr r2, [sp, #4] - cmp r2, r1 - bgt _023407C4 - ldr r2, [sp, #0x34] - cmp r2, r1 - ble _023407C4 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _023407D8 -_023407C4: - add r4, r4, #1 - add sl, sl, #1 - cmp sl, #4 - blt _02340730 - b _02340874 -_023407D8: - cmp r5, #3 - addls pc, pc, r5, lsl #2 - b _02340700 -_023407E4: ; jump table - b _023407F4 ; case 0 - b _02340814 ; case 1 - b _02340834 ; case 2 - b _02340854 ; case 3 -_023407F4: - mov r1, r8 - add r0, sb, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - add sb, sb, #2 - b _02340700 -_02340814: - mov r0, sb - sub r1, r8, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - sub r8, r8, #2 - b _02340700 -_02340834: - mov r1, r8 - sub r0, sb, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - sub sb, sb, #2 - b _02340700 -_02340854: - mov r0, sb - add r1, r8, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - add r8, r8, #2 - b _02340700 -_02340874: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end GenerateMazeLine - - arm_func_start SetSpawnFlag5 -SetSpawnFlag5: ; 0x0234087C - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldrsh r5, [r6] - b _023408C0 -_0234088C: - ldrsh r4, [r6, #2] - b _023408B0 -_02340894: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0, #2] - add r4, r4, #1 - orr r1, r1, #0x20 - strh r1, [r0, #2] -_023408B0: - ldrsh r0, [r6, #6] - cmp r4, r0 - blt _02340894 - add r5, r5, #1 -_023408C0: - ldrsh r0, [r6, #4] - cmp r5, r0 - blt _0234088C - ldmia sp!, {r4, r5, r6, pc} - arm_func_end SetSpawnFlag5 - - arm_func_start IsNextToHallway -IsNextToHallway: ; 0x023408D0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mvn r5, #0 - mov sl, r0 - mov sb, r1 - mov r4, r5 - b _02340964 -_023408E8: - adds r8, sl, r5 - bmi _02340960 - cmp r8, #0x38 - bge _0234096C - mov r6, r4 - b _02340958 -_02340900: - adds r7, sb, r6 - bmi _02340954 - cmp r7, #0x20 - bge _02340960 - cmp r5, #0 - cmpne r6, #0 - bne _02340954 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _02340954 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrb r0, [r0, #7] - cmp r0, #0xff - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_02340954: - add r6, r6, #1 -_02340958: - cmp r6, #1 - ble _02340900 -_02340960: - add r5, r5, #1 -_02340964: - cmp r5, #1 - ble _023408E8 -_0234096C: - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end IsNextToHallway - - arm_func_start ResolveInvalidSpawns -ResolveInvalidSpawns: ; 0x02340974 - stmdb sp!, {r3, r4, r5, lr} - mov r5, #0 -_0234097C: - mov r4, #0 -_02340980: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - and r1, r1, #3 - cmp r1, #1 - beq _023409BC - ldrh r1, [r0] - tst r1, #0x110 - ldrneh r1, [r0, #2] - bicne r1, r1, #2 - strneh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] -_023409BC: - ldrh r1, [r0, #2] - tst r1, #1 - beq _023409E0 - ldrh r1, [r0] - orr r1, r1, #0x200 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] -_023409E0: - ldrh r1, [r0, #2] - add r4, r4, #1 - tst r1, #2 - bicne r1, r1, #4 - strneh r1, [r0, #2] - cmp r4, #0x20 - blt _02340980 - add r5, r5, #1 - cmp r5, #0x38 - blt _0234097C - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ResolveInvalidSpawns - - arm_func_start ConvertSecondaryTerrainToChasms -ConvertSecondaryTerrainToChasms: ; 0x02340A0C - stmdb sp!, {r4, r5, r6, lr} - mov r6, #0 - mov r4, r6 -_02340A18: - mov r5, r4 -_02340A1C: - mov r0, r6 - mov r1, r5 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #2 - bne _02340A5C - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #3 - strh r1, [r0] -_02340A5C: - add r5, r5, #1 - cmp r5, #0x20 - blt _02340A1C - add r6, r6, #1 - cmp r6, #0x38 - blt _02340A18 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end ConvertSecondaryTerrainToChasms - - arm_func_start EnsureImpassableTilesAreWalls -EnsureImpassableTilesAreWalls: ; 0x02340A78 - stmdb sp!, {r4, r5, r6, lr} - mov r6, #0 - mov r4, r6 -_02340A84: - mov r5, r4 -_02340A88: - mov r0, r6 - mov r1, r5 - bl GetTile - ldrh r0, [r0] - tst r0, #0x10 - beq _02340AB8 - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] -_02340AB8: - add r5, r5, #1 - cmp r5, #0x20 - blt _02340A88 - add r6, r6, #1 - cmp r6, #0x38 - blt _02340A84 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end EnsureImpassableTilesAreWalls - - arm_func_start InitializeTile -InitializeTile: ; 0x02340AD4 - mov r2, #0 - strh r2, [r0] - strh r2, [r0, #2] - mov r1, #0xff - strb r1, [r0, #7] - strh r2, [r0, #4] - strb r2, [r0, #8] - strb r2, [r0, #9] - strb r2, [r0, #0xa] - strb r2, [r0, #0xb] - strb r2, [r0, #6] - str r2, [r0, #0xc] - str r2, [r0, #0x10] - bx lr - arm_func_end InitializeTile - - arm_func_start ResetFloor -ResetFloor: ; 0x02340B0C -#ifdef JAPAN -#define RESET_FLOOR_OFFSET -0xA4 -#else -#define RESET_FLOOR_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r6, #0 - mov r4, r6 -_02340B18: - mov r5, r4 - sub r7, r6, #1 -_02340B20: - mov r0, r6 - mov r1, r5 - bl GetTileSafe - bl InitializeTile - sub r8, r5, #1 - mov r0, r6 - mov r1, r8 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r1, r8 - add r0, r6, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r1, r8 - add r0, r6, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - add r0, r6, #1 - add r1, r5, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r6 - add r1, r5, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r7 - add r1, r5, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r7 - mov r1, r5 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r7 - mov r1, r8 - bl PosIsOutOfBounds - cmp r0, #0 - beq _02340BEC -_02340BD4: - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - orr r1, r1, #0x10 - strh r1, [r0] -_02340BEC: - add r5, r5, #1 - cmp r5, #0x20 - blt _02340B20 - add r6, r6, #1 - cmp r6, #0x38 - blt _02340B18 - ldr r6, _02340CA8 ; =DUNGEON_PTR - mov sb, #0 - ldr r0, [r6] - mvn r1, #0 - add r0, r0, #0xcc00 - strh r1, [r0, #0xe4 + RESET_FLOOR_OFFSET] - ldr r0, [r6] - mov r7, sb - add r0, r0, #0xcc00 - strh r1, [r0, #0xe6 + RESET_FLOOR_OFFSET] - mov r4, #0x14 - mov r5, #0xa0 -_02340C34: - mul r8, sb, r5 - mov sl, r7 -_02340C3C: - ldr r0, [r6] -#ifdef JAPAN - add r0, r0, #0xbc - add r0, r0, #0xcc00 -#else - add r0, r0, #0xd60 - add r0, r0, #0xc000 -#endif - add r0, r0, r8 - mla r0, sl, r4, r0 - bl InitializeTile - add sl, sl, #1 - cmp sl, #8 - blt _02340C3C - add sb, sb, #1 - cmp sb, #8 - blt _02340C34 - ldr r1, _02340CA8 ; =DUNGEON_PTR - mov r3, #0 - ldr r0, [r1] - mov r2, r3 - add r0, r0, #0x3f00 - strh r3, [r0, #0xc0 + RESET_FLOOR_OFFSET] -_02340C84: - ldr r0, [r1] - add r0, r0, r3, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xcc8 + RESET_FLOOR_OFFSET] - add r3, r3, #1 - str r2, [r0] - cmp r3, #0x40 - blt _02340C84 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02340CA8: .word DUNGEON_PTR - arm_func_end ResetFloor diff --git a/asm/overlay_29_0233A248.s b/asm/overlay_29_0233A248.s new file mode 100644 index 00000000..97560cfb --- /dev/null +++ b/asm/overlay_29_0233A248.s @@ -0,0 +1,897 @@ + .include "asm/macros.inc" + .include "overlay_29_0233A248.inc" + + .text + + arm_func_start ov29_0233A248 +ov29_0233A248: ; 0x0233A248 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r1, r4 + mov r0, #0 + bl ov29_0233A0E8 + cmp r4, #0 + bne _0233A274 + bl GetMinimapData + add r0, r0, #0xe000 + mov r1, #0 + strb r1, [r0, #0x447] +_0233A274: + cmp r4, #1 + ldmneia sp!, {r4, pc} + bl GetMinimapData + add r0, r0, #0xe000 + mov r1, #0 + strb r1, [r0, #0x448] + ldmia sp!, {r4, pc} + arm_func_end ov29_0233A248 + + arm_func_start InitWeirdMinimapMatrix +InitWeirdMinimapMatrix: ; 0x0233A290 + stmdb sp!, {r3, r4, r5, lr} + bl GetMinimapData + add r1, r0, #0xe000 + ldrb r1, [r1, #0x446] + cmp r1, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r4, #0 + mov r3, r4 + mov ip, r4 + mov r2, #0x1c +_0233A2B8: + mla r5, r4, r2, r0 + mov lr, ip +_0233A2C0: + add r1, r5, lr + add r1, r1, #0xe000 + add lr, lr, #1 + strb r3, [r1] + cmp lr, #0x38 + blt _0233A2C0 + add r4, r4, #1 + cmp r4, #0x20 + blt _0233A2B8 + add r0, r0, #0xe000 + strb r3, [r0, #0x446] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end InitWeirdMinimapMatrix + + arm_func_start InitMinimapDisplayTile +InitMinimapDisplayTile: ; 0x0233A2F0 + ldr r3, [r0] + ldmia r1, {r2, ip} + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0] + ldr r3, [r0, #4] + ldr r2, [r1, #8] + ldr ip, [r1, #0xc] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #4] + ldr r3, [r0, #8] + ldr r2, [r1, #0x10] + ldr ip, [r1, #0x14] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #8] + ldr r3, [r0, #0xc] + ldr r2, [r1, #0x18] + ldr ip, [r1, #0x1c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0xc] + ldr r3, [r0, #0x10] + ldr r2, [r1, #0x20] + ldr ip, [r1, #0x24] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x10] + ldr r3, [r0, #0x14] + ldr r2, [r1, #0x28] + ldr ip, [r1, #0x2c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x14] + ldr r3, [r0, #0x18] + ldr r2, [r1, #0x30] + ldr ip, [r1, #0x34] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x18] + ldr r3, [r0, #0x1c] + ldr r2, [r1, #0x38] + ldr ip, [r1, #0x3c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x1c] + ldr r3, [r0, #0x20] + ldr r2, [r1, #0x40] + ldr ip, [r1, #0x44] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x20] + ldr r3, [r0, #0x24] + ldr r2, [r1, #0x48] + ldr ip, [r1, #0x4c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x24] + ldr r3, [r0, #0x28] + ldr r2, [r1, #0x50] + ldr ip, [r1, #0x54] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x28] + ldr r3, [r0, #0x2c] + ldr r2, [r1, #0x58] + ldr ip, [r1, #0x5c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x2c] + ldr r3, [r0, #0x30] + ldr r2, [r1, #0x60] + ldr ip, [r1, #0x64] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x30] + ldr r3, [r0, #0x34] + ldr r2, [r1, #0x68] + ldr ip, [r1, #0x6c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x34] + ldr r3, [r0, #0x38] + ldr r2, [r1, #0x70] + ldr ip, [r1, #0x74] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x38] + ldr r3, [r0, #0x3c] + ldr r2, [r1, #0x78] + ldr ip, [r1, #0x7c] + and r1, r3, r2 + orr r1, ip, r1 + str r1, [r0, #0x3c] + bx lr + arm_func_end InitMinimapDisplayTile + + arm_func_start ov29_0233A470 +ov29_0233A470: ; 0x0233A470 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r4, #0 + add r2, r0, #0x21c0 + add r5, r0, #0xe000 + add ip, r2, #0xc000 + ldr r0, _0233A544 ; =ov29_0235377C + mov r6, r4 + b _0233A534 +_0233A490: + add lr, ip, r4, lsl #4 + add r2, lr, r1, lsl #2 + ldr r3, [r2, #4] + ldr sb, [ip, r4, lsl #4] + ldr r8, [r0, r1, lsl #2] + ldr r7, [r3] + add r2, sb, r8 + str r7, [sb, r8] + ldr r7, [r3, #4] + add r4, r4, #1 + str r7, [r2, #4] + ldr r7, [r3, #8] + str r7, [r2, #8] + ldr r7, [r3, #0xc] + str r7, [r2, #0xc] + ldr r7, [r3, #0x10] + str r7, [r2, #0x10] + ldr r7, [r3, #0x14] + str r7, [r2, #0x14] + ldr r7, [r3, #0x18] + str r7, [r2, #0x18] + ldr r7, [r3, #0x1c] + str r7, [r2, #0x1c] + ldr r7, [r3, #0x20] + str r7, [r2, #0x20] + ldr r7, [r3, #0x24] + str r7, [r2, #0x24] + ldr r7, [r3, #0x28] + str r7, [r2, #0x28] + ldr r7, [r3, #0x2c] + str r7, [r2, #0x2c] + ldr r7, [r3, #0x30] + str r7, [r2, #0x30] + ldr r7, [r3, #0x34] + str r7, [r2, #0x34] + ldr r7, [r3, #0x38] + str r7, [r2, #0x38] + ldr r3, [r3, #0x3c] + str r3, [r2, #0x3c] + ldr r2, [lr, #0xc] + strb r6, [r2] +_0233A534: + ldr r2, [r5, #0x440] + cmp r4, r2 + blt _0233A490 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0233A544: .word ov29_0235377C + arm_func_end ov29_0233A470 + + arm_func_start ov29_0233A548 +ov29_0233A548: ; 0x0233A548 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _0233A5E0 ; =MAP_COLOR_TABLE + ldr r7, _0233A5E4 ; =ov29_0235376C + mov r6, r1 + add r5, r2, r0, lsl #2 + mov r4, #0 +_0233A560: + cmp r4, #7 + bne _0233A5B0 + cmp r6, #0 + bne _0233A58C + add r0, r4, #0x100 + mov r1, r0, lsl #0x10 + mov r0, r5 + mov r2, r6 + mov r1, r1, asr #0x10 + bl ov29_0233A5E8 + b _0233A5D0 +_0233A58C: + ldr r1, [r7, #8] + add r0, r4, #0x100 + ldr r3, [r1, #4] + mov r1, r0, lsl #0x10 + mov r2, r6 + add r0, r3, r4, lsl #2 + mov r1, r1, asr #0x10 + bl ov29_0233A5E8 + b _0233A5D0 +_0233A5B0: + ldr r1, [r7, #8] + add r0, r4, #0x100 + ldr r3, [r1, #4] + mov r1, r0, lsl #0x10 + mov r2, r6 + add r0, r3, r4, lsl #2 + mov r1, r1, asr #0x10 + bl ov29_0233A5E8 +_0233A5D0: + add r4, r4, #1 + cmp r4, #0x10 + blt _0233A560 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233A5E0: .word MAP_COLOR_TABLE +_0233A5E4: .word ov29_0235376C + arm_func_end ov29_0233A548 + + arm_func_start ov29_0233A5E8 +ov29_0233A5E8: ; 0x0233A5E8 + stmdb sp!, {r4, lr} + ldr ip, _0233A620 ; =ov29_0235352C + mov r3, #0xc + ldr ip, [ip] + mov lr, r0 + add r0, ip, #0x20 + mla r4, r2, r3, r0 + ldr r0, [r4, #8] + mov r2, r1 + mov r1, lr + bl sub_0200C008 + ldr r0, [r4, #8] + bl sub_0200A174 + ldmia sp!, {r4, pc} + .align 2, 0 +_0233A620: .word ov29_0235352C + arm_func_end ov29_0233A5E8 + + arm_func_start LoadFixedRoomDataVeneer +LoadFixedRoomDataVeneer: ; 0x0233A624 + ldr ip, _0233A62C ; =LoadFixedRoomData + bx ip + .align 2, 0 +_0233A62C: .word LoadFixedRoomData + arm_func_end LoadFixedRoomDataVeneer + + arm_func_start UnloadFixedRoomData +UnloadFixedRoomData: ; 0x0233A630 + stmdb sp!, {r3, lr} + bl ov29_02343DD8 + ldr r0, _0233A650 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x12000 +#ifdef JAPAN + str r1, [r0, #0xa00] +#else + str r1, [r0, #0xaa4] +#endif + ldmia sp!, {r3, pc} + .align 2, 0 +_0233A650: .word DUNGEON_PTR + arm_func_end UnloadFixedRoomData + + arm_func_start IsNormalFloor +IsNormalFloor: ; 0x0233A654 + stmdb sp!, {r3, lr} + bl IsHiddenStairsFloor + cmp r0, #0 + bne _0233A6C4 + bl IsGoldenChamber + cmp r0, #0 + bne _0233A6C4 + mov r0, #0xb + bl IsCurrentMissionType + cmp r0, #0 + bne _0233A6C4 + mov r0, #0xa + mov r1, #6 + bl IsCurrentMissionTypeExact + cmp r0, #0 + bne _0233A6C4 + mov r0, #0xc + bl IsCurrentMissionType + cmp r0, #0 + bne _0233A6C4 + ldr r0, _0233A6D4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrb r0, [r0, #0x36] +#else + ldrb r0, [r0, #0xda] +#endif + cmp r0, #0 + beq _0233A6CC + cmp r0, #0xa5 + bhs _0233A6CC +_0233A6C4: + mov r0, #0 + ldmia sp!, {r3, pc} +_0233A6CC: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0233A6D4: .word DUNGEON_PTR + arm_func_end IsNormalFloor + + arm_func_start GenerateFloor +GenerateFloor: ; 0x0233A6D8 +#ifdef JAPAN +#define GENERATE_FLOOR_OFFSET -0xA4 +#else +#define GENERATE_FLOOR_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x54 + ldr r2, _0233AE64 ; =DUNGEON_PTR + mov r8, #0 + ldr r3, [r2] + ldr r0, _0233AE68 ; =0x000286B2 + add r1, r3, #0x12000 + str r8, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] + ldr r1, [r2] + add sb, r3, r0 + add r0, r1, #0x3f00 + strh r8, [r0, #0xc2 + GENERATE_FLOOR_OFFSET] + bl LoadFixedRoomDataVeneer + bl ov29_02343DC4 + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r1, [r1] + mov r3, r8 + add r1, r1, #0x12000 + str r0, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] + strb r3, [r2, #3] + strb r3, [r2, #1] + strb r3, [r2, #7] + bl ResetHiddenStairsSpawn + bl IsOutlawMonsterHouseFloor + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r3, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r2, [r1] + mov r1, sb + add r2, r2, #0xc4 + GENERATE_FLOOR_OFFSET + strb r0, [r3, #8] + add r0, r2, #0x4000 + bl GetHiddenStairsType + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r1, [r1] + str r0, [r2, #0x2c] + add r0, r1, #0x4000 + ldrsh r1, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] + ldr r0, _0233AE70 ; =SECONDARY_TERRAIN_TYPES + ldrb r0, [r0, r1] + mov r1, #0xff + cmp r0, #2 + moveq r2, #1 + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + movne r2, r8 + strb r2, [r0, #4] + strb r1, [r0, #2] + mov r1, #0 + strb r1, [r0, #6] + ldrb r0, [sb, #7] + bl GetFinalKecleonShopSpawnChance + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + strh r0, [r1, #0xc] + ldrb r0, [sb, #8] + strh r0, [r1, #0x10] + ldrb r0, [r1, #8] + cmp r0, #0 + movne r0, #0x64 + strneh r0, [r1, #0x10] + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r1, #1 + strb r1, [r0] + sub r1, r1, #2 + str r1, [r0, #0x30] + str r1, [r0, #0x38] + str r1, [r0, #0x34] + str r1, [r0, #0x3c] + bl ResetFloor + bl IsNormalFloor + cmp r0, #0 + bne _0233A810 + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x700 + strh r1, [r0, #0x86] + b _0233A828 +_0233A810: + ldrb r0, [sb, #6] + bl abs + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x700 + strh r0, [r1, #0x86] +_0233A828: + ldr r3, _0233AE64 ; =DUNGEON_PTR + mov r7, #0 + ldr r0, [r3] + ldr r1, _0233AE74 ; =0x00012AFA + add r0, r0, #0x4000 + strb r7, [r0, #0xc5 + GENERATE_FLOOR_OFFSET] + ldr r0, [r3] + ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS + add r0, r0, #0x4000 + strb r7, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] + ldr r0, [r3] + strh r7, [r0, r1] + ldr r0, [r3] + add r0, r0, #0x4000 + str r7, [r0, #0xcc + GENERATE_FLOOR_OFFSET] + ldrb r0, [sb, #0xc] + str r0, [r2, #0x18] + b _0233AD3C +_0233A870: + ldr r1, _0233AE64 ; =DUNGEON_PTR + mov r0, #0 + str r0, [sp] + ldr r0, [r1] + add r0, r0, #0xc4 + GENERATE_FLOOR_OFFSET + add r0, r0, #0x4000 + bl ResetImportantSpawnPositions + mov r6, #0 + mvn r5, #0 + ldr r4, _0233AE64 ; =DUNGEON_PTR + b _0233AC50 +_0233A89C: + ldr r0, [sp] + cmp r0, #0 + beq _0233A8C8 + ldr r0, [r4] + add r0, r0, #0x4000 + ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] + bl IsNotFullFloorFixedRoom + cmp r0, #0 + beq _0233AC58 + mov r0, #0 + str r0, [sp] +_0233A8C8: + ldr r0, [r4] + cmp r6, #1 + add r0, r0, #0x4000 + strh r6, [r0, #0xde + GENERATE_FLOOR_OFFSET] + ldrge r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + movge r1, #0 + strge r1, [r0, #0x18] + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r1, #0 + strb r1, [r0, #5] + strh r5, [r0, #0x20] + strh r5, [r0, #0x22] + bl ResetFloor + ldr r0, [r4] + add r0, r0, #0xcc00 + strh r5, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] + ldr r0, [r4] + add r0, r0, #0xcc00 + strh r5, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] + ldr r0, [r4] + add r1, r0, #0x4000 + mov r0, #0 + strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] + ldr r0, [r4] + add r0, r0, #0x4000 + ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] + cmp r0, #0 + beq _0233A954 + mov r1, sb + bl GenerateFixedRoom + cmp r0, #0 + bne _0233AC58 + mov r0, #1 + str r0, [sp] + b _0233AB78 +_0233A954: + mov r0, #2 + ldrb sl, [sb] + mov fp, #0x20 + str r0, [sp, #4] + str r0, [sp, #8] + b _0233A9DC +_0233A96C: + cmp sl, #8 + mov r0, #2 + beq _0233A998 + mov r1, #9 + bl DungeonRandRange + str r0, [sp, #8] + mov r0, #2 + mov r1, #8 + bl DungeonRandRange + str r0, [sp, #4] + b _0233A9B4 +_0233A998: + mov r1, #5 + bl DungeonRandRange + str r0, [sp, #8] + mov r0, #2 + mov r1, #4 + bl DungeonRandRange + str r0, [sp, #4] +_0233A9B4: + ldr r0, [sp, #8] + cmp r0, #6 + ldrle r0, [sp, #4] + cmple r0, #4 + ble _0233A9E4 + subs fp, fp, #1 + moveq r0, #4 + streq r0, [sp, #8] + streq r0, [sp, #4] + beq _0233A9E4 +_0233A9DC: + cmp fp, #0 + bne _0233A96C +_0233A9E4: + ldr r1, [sp, #8] + mov r0, #0x38 + bl _s32_div_f + cmp r0, #7 + movle r0, #1 + strle r0, [sp, #8] + ldr r1, [sp, #4] + mov r0, #0x20 + bl _s32_div_f + ldr r1, [r4] + cmp r0, #7 + add r2, r1, #0x4000 + mov r1, #0 + strb r1, [r2, #0xc4 + GENERATE_FLOOR_OFFSET] + ldr r1, [r4] + movle r0, #1 + add r2, r1, #0x4000 + mov r1, #0xff + strb r1, [r2, #0xc9 + GENERATE_FLOOR_OFFSET] + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + strle r0, [sp, #4] + and r0, sl, #0xf + cmp r0, #0xb + str sl, [r1, #0x28] + addls pc, pc, r0, lsl #2 + b _0233AAD4 +_0233AA4C: ; jump table + b _0233AAD4 ; case 0 + b _0233AA7C ; case 1 + b _0233AAEC ; case 2 + b _0233AB04 ; case 3 + b _0233AB14 ; case 4 + b _0233AB24 ; case 5 + b _0233AB3C ; case 6 + b _0233AB4C ; case 7 + b _0233AAD4 ; case 8 + b _0233AB58 ; case 9 + b _0233AB64 ; case 10 + b _0233AAA8 ; case 11 +_0233AA7C: + mov r0, #2 + bl DungeonRandInt + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r2, #1 + strb r2, [r1, #6] + add r1, r0, #2 + mov r0, #4 + mov r2, sb + bl GenerateStandardFloor + mov r8, #1 + b _0233AB78 +_0233AAA8: + mov r0, #2 + bl DungeonRandInt + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r2, #2 + strb r2, [r1, #6] + add r1, r0, #2 + mov r0, #4 + mov r2, sb + bl GenerateStandardFloor + mov r8, #1 + b _0233AB78 +_0233AAD4: + ldr r0, [sp, #8] + ldr r1, [sp, #4] + mov r2, sb + bl GenerateStandardFloor + mov r8, #1 + b _0233AB78 +_0233AAEC: + bl GenerateOneRoomMonsterHouseFloor + ldr r0, [r4] + add r1, r0, #0x4000 + mov r0, #1 + strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] + b _0233AB78 +_0233AB04: + mov r0, sb + bl GenerateOuterRingFloor + mov r8, #1 + b _0233AB78 +_0233AB14: + mov r0, sb + bl GenerateCrossroadsFloor + mov r8, #1 + b _0233AB78 +_0233AB24: + bl GenerateTwoRoomsWithMonsterHouseFloor + ldr r0, [r4] + add r1, r0, #0x4000 + mov r0, #1 + strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] + b _0233AB78 +_0233AB3C: + mov r0, sb + bl GenerateLineFloor + mov r8, #1 + b _0233AB78 +_0233AB4C: + mov r0, sb + bl GenerateCrossFloor + b _0233AB78 +_0233AB58: + mov r0, sb + bl GenerateBeetleFloor + b _0233AB78 +_0233AB64: + ldr r0, [sp, #8] + ldr r1, [sp, #4] + mov r2, sb + bl GenerateOuterRoomsFloor + mov r8, #1 +_0233AB78: + bl ResetInnerBoundaryTileRows + bl EnsureImpassableTilesAreWalls + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #5] + cmp r0, #0 + bne _0233AC4C + mov sl, #0 + mov r2, sl +_0233AB98: + mov r1, #0 + add r0, sp, #0x14 + strb r1, [r0, r2] + add r2, r2, #1 + cmp r2, #0x40 + blt _0233AB98 + mov r0, r1 + str r0, [sp, #0xc] +_0233ABB8: + mov fp, #0 +_0233ABBC: + ldr r0, [sp, #0xc] + mov r1, fp + bl GetTile + str r0, [sp, #0x10] + bl GetTileTerrain + cmp r0, #1 + bne _0233ABFC + ldr r0, [sp, #0x10] + ldrb r2, [r0, #7] + cmp r2, #0xf0 + bhi _0233ABFC + cmp r2, #0x40 + movlo r1, #1 + addlo r0, sp, #0x14 + add sl, sl, #1 + strlob r1, [r0, r2] +_0233ABFC: + add fp, fp, #1 + cmp fp, #0x20 + blt _0233ABBC + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #0x38 + blt _0233ABB8 + mov r1, #0 + mov r2, r1 +_0233AC24: + add r0, sp, #0x14 + ldrb r0, [r0, r2] + add r2, r2, #1 + cmp r0, #0 + addne r1, r1, #1 + cmp r2, #0x40 + blt _0233AC24 + cmp sl, #0x1e + cmpge r1, #2 + bge _0233AC58 +_0233AC4C: + add r6, r6, #1 +_0233AC50: + cmp r6, #0xa + blt _0233A89C +_0233AC58: + cmp r6, #0xa + bne _0233AC88 + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mvn r1, #0 + strh r1, [r0, #0x20] + strh r1, [r0, #0x22] + bl GenerateOneRoomMonsterHouseFloor + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x4000 + strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] +_0233AC88: + bl FinalizeJunctions + cmp r8, #0 + beq _0233ACA0 + mov r1, sb + mov r0, #1 + bl GenerateSecondaryTerrainFormations +_0233ACA0: + bl DungeonRand100 + ldrb r1, [sb, #0x19] + cmp r0, r1 + movlt r0, #1 + movge r0, #0 + and r4, r0, #0xff + mov r0, sb + mov r1, r4 + bl MarkNonEnemySpawns + mov r0, sb + mov r1, r4 + bl MarkEnemySpawns + bl ResolveInvalidSpawns + ldr r0, _0233AE64 ; =DUNGEON_PTR + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0xcc00 + ldrsh r2, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] + cmp r2, r1 + ldrnesh r0, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] + cmpne r0, r1 + beq _0233AD38 + bl GetFloorType + cmp r0, #1 + beq _0233AD44 + ldr r0, _0233AE64 ; =DUNGEON_PTR + mvn r2, #0 + ldr r0, [r0] + add r1, r0, #0xcc00 + ldrsh r0, [r1, #0xe4 + GENERATE_FLOOR_OFFSET] + cmp r0, r2 + ldrnesh r1, [r1, #0xe6 + GENERATE_FLOOR_OFFSET] + cmpne r1, r2 + beq _0233AD38 + mov r2, #0 + bl StairsAlwaysReachable + cmp r0, #0 + bne _0233AD44 +_0233AD38: + add r7, r7, #1 +_0233AD3C: + cmp r7, #0xa + blt _0233A870 +_0233AD44: + cmp r7, #0xa + bne _0233AD98 + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mvn r1, #0 + strh r1, [r0, #0x20] + strh r1, [r0, #0x22] + bl ResetFloor + bl GenerateOneRoomMonsterHouseFloor + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x4000 + strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] + bl FinalizeJunctions + mov r0, sb + mov r1, #0 + bl MarkNonEnemySpawns + mov r0, sb + mov r1, #0 + bl MarkEnemySpawns + bl ResolveInvalidSpawns +_0233AD98: + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldrsh r1, [r0, #0x20] + cmp r1, #0 + ldrgesh r0, [r0, #0x22] + cmpge r0, #0 + blt _0233ADCC + bl GetKecleonIdToSpawnByFloor + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r2, r0 + ldrsh r0, [r1, #0x20] + ldrsh r1, [r1, #0x22] + mov r3, #0 + bl MarkShopkeeperSpawn +_0233ADCC: + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x30] + cmp r0, #0 + ldrlt r0, _0233AE64 ; =DUNGEON_PTR + movlt r1, #0 + blt _0233ADF4 + mov r0, sb + bl ov29_023427E4 + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #1 +_0233ADF4: + ldr r0, [r0] + mov r2, #0x38 + add r0, r0, #0x4000 + strb r1, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] + mov r0, #0 + mov r1, r0 + mov r3, #0x20 + bl FlagHallwayJunctions + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #4] + cmp r0, #0 + beq _0233AE28 + bl ConvertSecondaryTerrainToChasms +_0233AE28: + ldr r0, _0233AE64 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x4000 + ldrsh r0, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] + sub r0, r0, #0x1a + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + bhi _0233AE58 + bl ConvertWallsToChasms +_0233AE58: + bl UnloadFixedRoomData + add sp, sp, #0x54 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233AE64: .word DUNGEON_PTR +_0233AE68: .word 0x000286B2 + GENERATE_FLOOR_OFFSET +_0233AE6C: .word FLOOR_GENERATION_STATUS +_0233AE70: .word SECONDARY_TERRAIN_TYPES +_0233AE74: .word 0x00012AFA + GENERATE_FLOOR_OFFSET + arm_func_end GenerateFloor diff --git a/asm/overlay_29_0233AE84.s b/asm/overlay_29_0233AE84.s new file mode 100644 index 00000000..06d5a229 --- /dev/null +++ b/asm/overlay_29_0233AE84.s @@ -0,0 +1,6802 @@ + .include "asm/macros.inc" + .include "overlay_29_0233AE84.inc" + + .text + + arm_func_start DungeonRand100 +DungeonRand100: ; 0x0233AE84 + ldr ip, _0233AE90 ; =DungeonRandInt + mov r0, #0x64 + bx ip + .align 2, 0 +_0233AE90: .word DungeonRandInt + arm_func_end DungeonRand100 + + arm_func_start ClearHiddenStairs +ClearHiddenStairs: ; 0x0233AE94 + stmdb sp!, {r3, lr} + ldr r0, _0233AF04 ; =HIDDEN_STAIRS_SPAWN_BLOCKED + ldrb r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS + mvn r2, #0 + ldrsh r0, [r1, #0x1c] + cmp r0, r2 + ldrnesh r1, [r1, #0x1e] + cmpne r1, r2 + beq _0233AEFC + bl GetTileSafe + mov r2, #0 + strh r2, [r0] + ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS + strh r2, [r0, #2] + ldrsh r0, [r1, #0x1c] + ldrsh r1, [r1, #0x1e] + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233AEFC: + bl ResetHiddenStairsSpawn + ldmia sp!, {r3, pc} + .align 2, 0 +_0233AF04: .word HIDDEN_STAIRS_SPAWN_BLOCKED +_0233AF08: .word FLOOR_GENERATION_STATUS + arm_func_end ClearHiddenStairs + + arm_func_start FlagHallwayJunctions +FlagHallwayJunctions: ; 0x0233AF0C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov fp, r1 + mov sb, r2 + mov r8, r3 + b _0233B01C +_0233AF24: + mov r7, fp + sub r6, sl, #1 + b _0233B010 +_0233AF30: + mov r0, sl + mov r1, r7 + mov r4, #0 + bl GetTileSafe + mov r5, r0 + ldrh r0, [r5] + bic r0, r0, #4 + strh r0, [r5] + ldrb r0, [r5, #7] + cmp r0, #0xff + ldreqh r0, [r5] + andeq r0, r0, #3 + cmpeq r0, #1 + bne _0233B00C + cmp sl, #0 + ble _0233AF90 + mov r0, r6 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, r4 + addeq r4, r0, #1 +_0233AF90: + cmp r7, #0 + ble _0233AFB4 + mov r0, sl + sub r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + addeq r4, r4, #1 +_0233AFB4: + cmp sl, #0x36 + bge _0233AFD8 + mov r1, r7 + add r0, sl, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + addeq r4, r4, #1 +_0233AFD8: + cmp sl, #0x1e + bge _0233AFFC + mov r0, sl + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + addeq r4, r4, #1 +_0233AFFC: + cmp r4, #3 + ldrgeh r0, [r5] + orrge r0, r0, #8 + strgeh r0, [r5] +_0233B00C: + add r7, r7, #1 +_0233B010: + cmp r7, r8 + blt _0233AF30 + add sl, sl, #1 +_0233B01C: + cmp sl, sb + blt _0233AF24 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end FlagHallwayJunctions + + arm_func_start GenerateStandardFloor +GenerateStandardFloor: ; 0x0233B028 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r5, r1 + mov r6, r0 + mov r4, r2 + add r0, sp, #0x44 + add r1, sp, #8 + mov r2, r6 + mov r3, r5 + bl GetGridPositions + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl InitDungeonGrid + ldrsb r3, [r4, #1] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl AssignRooms + add r1, sp, #8 + str r1, [sp] + ldrb r3, [r4, #0xd] + add r0, sp, #0x80 + mov r1, r6 + str r3, [sp, #4] + mov r2, r5 + add r3, sp, #0x44 + bl CreateRoomsAndAnchors + mov r0, r6 + bl DungeonRandInt + mov r7, r0 + mov r0, r5 + bl DungeonRandInt + stmia sp, {r0, r4} + mov r3, r7 + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl AssignGridCellConnections + add r1, sp, #8 + str r1, [sp] + mov r0, #0 + str r0, [sp, #4] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + add r3, sp, #0x44 + bl CreateGridCellConnections + add r1, sp, #8 + str r1, [sp] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + add r3, sp, #0x44 + bl EnsureConnectedGrid + ldrb r3, [r4, #9] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateMazeRoom + ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0xc] + mov r1, r6 + mov r2, r5 + bl GenerateKecleonShop + ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0x10] + mov r1, r6 + mov r2, r5 + bl GenerateMonsterHouse + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateExtraHallways + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateRoomImperfections + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateSecondaryStructures + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233B18C: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateStandardFloor + + arm_func_start GenerateOuterRingFloor +GenerateOuterRingFloor: ; 0x0233B190 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2f4 + sub sp, sp, #0x1800 + mov r1, #5 + mov r2, #0x1c + add r3, r2, #0x33 + add r3, r3, r3, lsr #31 + mov r8, r3, asr #1 + mov fp, #0x33 + mov sl, #0x38 + mov r7, #2 + mov r6, #7 + mov r5, #0x10 + mov r3, #0x1e + str r2, [sp, #0x64] + add r4, r1, #0x1c + str r0, [sp, #8] + add r0, r4, r4, lsr #31 + mov sb, r0, asr #1 + mov r0, #0 + mov r4, #0x19 + str r0, [sp, #0x58] + str r1, [sp, #0x5c] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + str fp, [sp, #0x6c] + str sl, [sp, #0x70] + str sb, [sp, #0x60] + str r8, [sp, #0x68] + str r7, [sp, #0x1c] + str r6, [sp, #0x20] + str r5, [sp, #0x24] + str r4, [sp, #0x28] + str r3, [sp, #0x2c] + bl InitDungeonGrid + mov r3, #0 + ldr r0, _0233B614 ; =0x000001C2 + add r1, sp, #0x94 + mov r4, r3 +_0233B230: + mla r2, r3, r0, r1 + strb r4, [r2, #0xa] + add r3, r3, #1 + strb r4, [r2, #0x64] + cmp r3, #6 + blt _0233B230 + add r2, sp, #0x94 + mov r1, #0 + mov r0, #0x1e +_0233B254: + mla r3, r4, r0, r2 + strb r1, [r3, #0xa] + add r4, r4, #1 + strb r1, [r3, #0x8d4] + cmp r4, #4 + blt _0233B254 + mov r7, #1 + ldr r1, _0233B614 ; =0x000001C2 + mov r3, r7 + mov r5, r7 + add r4, sp, #0x94 + mov r0, #0x1e +_0233B284: + mla r6, r7, r1, r4 + mov r8, r5 +_0233B28C: + mla r2, r8, r0, r6 + add r8, r8, #1 + strb r3, [r2, #0xa] + cmp r8, #3 + blt _0233B28C + add r7, r7, #1 + cmp r7, #5 + blt _0233B284 + mov sl, #0 + str sl, [sp, #0xc] +_0233B2B4: + add r1, sp, #0x94 + mov r0, #0x1e + mla r7, sl, r0, r1 + add r0, sp, #0x1c + add r0, r0, sl, lsl #2 + mov sb, #0 + str r0, [sp, #0x10] +_0233B2D0: + ldr r0, _0233B614 ; =0x000001C2 + mla r0, sb, r0, r7 + ldrb r0, [r0, #0xa] + cmp r0, #0 + add r0, sp, #0x58 + add r1, r0, sb, lsl #2 + beq _0233B3F8 + ldr r8, [r0, sb, lsl #2] + add r0, sp, #0x1c + ldr r1, [r1, #4] + ldr r4, [r0, sl, lsl #2] + sub r0, r1, r8 + sub r5, r0, #3 + ldr r0, [sp, #0x10] + ldr r1, [r0, #4] + mov r0, #5 + sub r1, r1, r4 + sub r6, r1, #3 + mov r1, r5 + bl DungeonRandRange + mov fp, r0 + mov r0, #4 + mov r1, r6 + bl DungeonRandRange + str r0, [sp, #0x14] + sub r0, r5, fp + bl DungeonRandInt + add r1, r8, #2 + add r8, r1, r0 + ldr r0, [sp, #0x14] + sub r0, r6, r0 + bl DungeonRandInt + add r1, r4, #2 + add r4, r1, r0 + ldr r0, [sp, #0x14] + add fp, r8, fp + add r5, r4, r0 + ldr r0, _0233B614 ; =0x000001C2 + mul r0, sb, r0 + strh r8, [r7, r0] + add r0, r7, r0 + strh fp, [r0, #4] + strh r4, [r0, #2] + strh r5, [r0, #6] + ldr r0, [sp, #0xc] + and r0, r0, #0xff + str r0, [sp, #0x18] + b _0233B3E0 +_0233B390: + mov r6, r4 + b _0233B3D4 +_0233B398: + mov r0, r8 + mov r1, r6 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r6 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r8 + bl GetTileSafe + ldr r1, [sp, #0x18] + add r6, r6, #1 + strb r1, [r0, #7] +_0233B3D4: + cmp r6, r5 + blt _0233B398 + add r8, r8, #1 +_0233B3E0: + cmp r8, fp + blt _0233B390 + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + b _0233B4A0 +_0233B3F8: + ldr r2, [r0, sb, lsl #2] + ldr r1, [r1, #4] + add r0, r2, #1 + sub r1, r1, r2 + add r2, sp, #0x1c + ldr r3, [r2, sl, lsl #2] + ldr r2, [sp, #0x10] + sub r1, r1, #3 + ldr r2, [r2, #4] + add r1, r0, r1 + sub r2, r2, r3 + add r4, r3, #1 + sub r5, r2, #3 + bl DungeonRandRange + add r1, r4, r5 + mov r5, r0 + mov r0, r4 + bl DungeonRandRange + mov r4, r0 + ldr r0, _0233B614 ; =0x000001C2 + mul r0, sb, r0 + strh r5, [r7, r0] + add r1, r7, r0 + add r0, r5, #1 + strh r0, [r1, #4] + strh r4, [r1, #2] + add r0, r4, #1 + strh r0, [r1, #6] + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + mov r1, #0xff + strb r1, [r0, #7] +_0233B4A0: + add sb, sb, #1 + cmp sb, #6 + blt _0233B2D0 + add sl, sl, #1 + cmp sl, #4 + blt _0233B2B4 + mov r1, #1 + mov r0, #6 + strb r1, [sp, #0xaa] + strb r1, [sp, #0x26b] + strb r1, [sp, #0x26c] + strb r1, [sp, #0x42d] + strb r1, [sp, #0x42e] + strb r1, [sp, #0x5ef] + strb r1, [sp, #0x5f0] + strb r1, [sp, #0x7b1] + strb r1, [sp, #0x7b2] + strb r1, [sp, #0x973] + strb r1, [sp, #0xa8] + strb r1, [sp, #0xc5] + strb r1, [sp, #0xc6] + strb r1, [sp, #0xe3] + strb r1, [sp, #0xe4] + strb r1, [sp, #0x101] + strb r1, [sp, #0x104] + strb r1, [sp, #0x2c5] + strb r1, [sp, #0x2c6] + strb r1, [sp, #0x487] + strb r1, [sp, #0x488] + strb r1, [sp, #0x649] + strb r1, [sp, #0x64a] + strb r1, [sp, #0x80b] + strb r1, [sp, #0x80c] + strb r1, [sp, #0x9cd] + strb r1, [sp, #0x972] + strb r1, [sp, #0x98f] + strb r1, [sp, #0x990] + strb r1, [sp, #0x9ad] + strb r1, [sp, #0x9ae] + strb r1, [sp, #0x9cb] + bl DungeonRandInt + mov r4, r0 + mov r0, #4 + bl DungeonRandInt + mov r3, r4 + str r0, [sp] + ldr r4, [sp, #8] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + str r4, [sp, #4] + bl AssignGridCellConnections + add r1, sp, #0x1c + str r1, [sp] + mov r0, #0 + str r0, [sp, #4] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + add r3, sp, #0x58 + bl CreateGridCellConnections + add r1, sp, #0x1c + str r1, [sp] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + add r3, sp, #0x58 + bl EnsureConnectedGrid + ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x94 + ldrsh r3, [r1, #0xc] + mov r1, #6 + mov r2, #4 + bl GenerateKecleonShop + ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x94 + ldrsh r3, [r1, #0x10] + mov r1, #6 + mov r2, #4 + bl GenerateMonsterHouse + ldr r0, [sp, #8] + mov r1, #6 + ldrb r3, [r0, #0x13] + add r0, sp, #0x94 + mov r2, #4 + bl GenerateExtraHallways + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + bl GenerateRoomImperfections + add sp, sp, #0x2f4 + add sp, sp, #0x1800 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233B614: .word 0x000001C2 +_0233B618: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateOuterRingFloor + + arm_func_start GenerateCrossroadsFloor +GenerateCrossroadsFloor: ; 0x0233B61C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2f8 + sub sp, sp, #0x1800 + mov r1, #0 + mov r2, #0xb + str r0, [sp, #8] + mov fp, #0x16 + mov sl, #0x21 + mov sb, #0x2c + mov r8, #0x38 + mov r7, #1 + mov r6, #9 + mov r5, #0x10 + mov r4, #0x17 + mov r3, #0x1f + str r1, [sp, #0x5c] + str r2, [sp, #0x60] + add r0, sp, #0x98 + mov r1, #5 + mov r2, #4 + str fp, [sp, #0x64] + str sl, [sp, #0x68] + str sb, [sp, #0x6c] + str r8, [sp, #0x70] + str r7, [sp, #0x20] + str r6, [sp, #0x24] + str r5, [sp, #0x28] + str r4, [sp, #0x2c] + str r3, [sp, #0x30] + bl InitDungeonGrid + ldr r0, _0233BA74 ; =0x000001C2 + mov r4, #0 + add r2, sp, #0x98 + mov r1, r7 +_0233B6A4: + mla r3, r4, r0, r2 + strb r1, [r3, #0xa] + add r4, r4, #1 + strb r1, [r3, #0x64] + cmp r4, #5 + blt _0233B6A4 + mov r3, #0 + add r1, sp, #0x98 + mov r7, #1 + mov r0, #0x1e +_0233B6CC: + mla r2, r3, r0, r1 + strb r7, [r2, #0xa] + add r3, r3, #1 + strb r7, [r2, #0x712] + cmp r3, #4 + blt _0233B6CC + ldr r1, _0233BA74 ; =0x000001C2 + mov r4, #0 + mov r5, #1 + add r3, sp, #0x98 + mov r0, #0x1e +_0233B6F8: + mla r6, r7, r1, r3 + mov r8, r5 +_0233B700: + mla r2, r8, r0, r6 + add r8, r8, #1 + strb r4, [r2, #0xa] + cmp r8, #3 + blt _0233B700 + add r7, r7, #1 + cmp r7, #4 + blt _0233B6F8 + mov r0, #1 + mov sl, r4 + strb r0, [sp, #0xa0] + strb r0, [sp, #0x7a8] + strb r0, [sp, #0xfa] + strb r0, [sp, #0x802] +_0233B738: + add r1, sp, #0x98 + mov r0, #0x1e + mla r7, sl, r0, r1 + add r0, sp, #0x20 + add r0, r0, sl, lsl #2 + mov sb, #0 + str r0, [sp, #0x10] +_0233B754: + ldr r0, _0233BA74 ; =0x000001C2 + mla r1, sb, r0, r7 + ldrb r0, [r1, #8] + cmp r0, #0 + bne _0233B938 + ldrb r0, [r1, #0xa] + cmp r0, #0 + add r0, sp, #0x5c + add r1, r0, sb, lsl #2 + beq _0233B890 + ldr r8, [r0, sb, lsl #2] + add r0, sp, #0x20 + ldr r1, [r1, #4] + ldr r5, [r0, sl, lsl #2] + sub r0, r1, r8 + sub r6, r0, #3 + ldr r0, [sp, #0x10] + ldr r1, [r0, #4] + mov r0, #5 + sub r1, r1, r5 + sub fp, r1, #3 + mov r1, r6 + bl DungeonRandRange + str r0, [sp, #0x14] + mov r0, #4 + mov r1, fp + bl DungeonRandRange + str r0, [sp, #0x18] + ldr r0, [sp, #0x14] + sub r0, r6, r0 + bl DungeonRandInt + add r1, r8, #2 + add r8, r1, r0 + ldr r0, [sp, #0x18] + sub r0, fp, r0 + bl DungeonRandInt + add r1, r5, #2 + add r5, r1, r0 + ldr r0, [sp, #0x14] + add r0, r8, r0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x18] + add fp, r5, r0 + ldr r0, _0233BA74 ; =0x000001C2 + mul r0, sb, r0 + strh r8, [r7, r0] + add r1, r7, r0 + ldr r0, [sp, #0xc] + strh r0, [r1, #4] + strh r5, [r1, #2] + and r0, r4, #0xff + strh fp, [r1, #6] + str r0, [sp, #0x1c] + b _0233B87C +_0233B82C: + mov r6, r5 + b _0233B870 +_0233B834: + mov r0, r8 + mov r1, r6 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r6 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r8 + bl GetTileSafe + ldr r1, [sp, #0x1c] + add r6, r6, #1 + strb r1, [r0, #7] +_0233B870: + cmp r6, fp + blt _0233B834 + add r8, r8, #1 +_0233B87C: + ldr r0, [sp, #0xc] + cmp r8, r0 + blt _0233B82C + add r4, r4, #1 + b _0233B938 +_0233B890: + ldr r2, [r0, sb, lsl #2] + ldr r1, [r1, #4] + add r0, r2, #1 + sub r1, r1, r2 + add r2, sp, #0x20 + ldr r3, [r2, sl, lsl #2] + ldr r2, [sp, #0x10] + sub r1, r1, #3 + ldr r2, [r2, #4] + add r1, r0, r1 + sub r2, r2, r3 + add r5, r3, #1 + sub r6, r2, #3 + bl DungeonRandRange + add r1, r5, r6 + mov r6, r0 + mov r0, r5 + bl DungeonRandRange + mov r5, r0 + ldr r0, _0233BA74 ; =0x000001C2 + mul r0, sb, r0 + strh r6, [r7, r0] + add r1, r7, r0 + add r0, r6, #1 + strh r0, [r1, #4] + strh r5, [r1, #2] + add r0, r5, #1 + strh r0, [r1, #6] + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r5 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r6 + bl GetTileSafe + mov r1, #0xff + strb r1, [r0, #7] +_0233B938: + add sb, sb, #1 + cmp sb, #5 + blt _0233B754 + add sl, sl, #1 + cmp sl, #4 + blt _0233B738 + mov r7, #1 + ldr r2, _0233BA74 ; =0x000001C2 + mov r0, r7 + mov r5, #0 + add r4, sp, #0x98 + mov r1, #0x1e +_0233B968: + mla r6, r7, r2, r4 + mov r8, r5 +_0233B970: + mla r3, r8, r1, r6 + strb r0, [r3, #0x14] + add r8, r8, #1 + strb r0, [r3, #0x31] + cmp r8, #3 + blt _0233B970 + add r7, r7, #1 + cmp r7, #4 + blt _0233B968 + ldr r1, _0233BA74 ; =0x000001C2 + mov r4, #1 + mov r6, #0 + add r5, sp, #0x98 + mov r2, #0x1e +_0233B9A8: + mla r7, r0, r2, r5 + mov r8, r6 +_0233B9B0: + mla r3, r8, r1, r7 + strb r4, [r3, #0x16] + add r8, r8, #1 + strb r4, [r3, #0x1d7] + cmp r8, #4 + blt _0233B9B0 + add r0, r0, #1 + cmp r0, #3 + blt _0233B9A8 + add r1, sp, #0x20 + str r1, [sp] + add r0, sp, #0x98 + add r3, sp, #0x5c + mov r1, #5 + mov r2, #4 + str r4, [sp, #4] + bl CreateGridCellConnections + add r4, sp, #0x20 + add r0, sp, #0x98 + add r3, sp, #0x5c + mov r1, #5 + mov r2, #4 + str r4, [sp] + bl EnsureConnectedGrid + ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x98 + ldrsh r3, [r1, #0xc] + mov r1, #5 + mov r2, #4 + bl GenerateKecleonShop + ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x98 + ldrsh r3, [r1, #0x10] + mov r1, #5 + mov r2, #4 + bl GenerateMonsterHouse + ldr r0, [sp, #8] + mov r1, #5 + ldrb r3, [r0, #0x13] + add r0, sp, #0x98 + mov r2, #4 + bl GenerateExtraHallways + add r0, sp, #0x98 + mov r1, #5 + mov r2, #4 + bl GenerateRoomImperfections + add sp, sp, #0x2f8 + add sp, sp, #0x1800 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233BA74: .word 0x000001C2 +_0233BA78: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateCrossroadsFloor + + arm_func_start GenerateLineFloor +GenerateLineFloor: ; 0x0233BA7C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r7, #0 + mov r6, #0xb + mov lr, #0x16 + mov ip, #0x21 + mov r5, #0x2c + mov r3, #0x38 + mov r2, #4 + mov r1, #0xf + mov r4, r0 + str r2, [sp, #8] + str r1, [sp, #0xc] + add r0, sp, #0x80 + str r7, [sp, #0x44] + str r6, [sp, #0x48] + str lr, [sp, #0x4c] + str ip, [sp, #0x50] + str r5, [sp, #0x54] + str r3, [sp, #0x58] + mov r1, #5 + mov r2, #1 + bl InitDungeonGrid + ldrsb r3, [r4, #1] + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl AssignRooms + add r1, sp, #8 + str r1, [sp] + ldrb r2, [r4, #0xd] + add r0, sp, #0x80 + add r3, sp, #0x44 + str r2, [sp, #4] + mov r1, #5 + mov r2, #1 + bl CreateRoomsAndAnchors + mov r0, #5 + bl DungeonRandInt + mov r5, r0 + mov r0, #1 + bl DungeonRandInt + stmia sp, {r0, r4} + mov r3, r5 + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl AssignGridCellConnections + add r0, sp, #8 + mov r2, #1 + stmia sp, {r0, r2} + add r0, sp, #0x80 + mov r1, #5 + add r3, sp, #0x44 + bl CreateGridCellConnections + add r1, sp, #8 + str r1, [sp] + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + add r3, sp, #0x44 + bl EnsureConnectedGrid + ldr r3, _0233BBD8 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0xc] + mov r1, #5 + mov r2, #1 + bl GenerateKecleonShop + ldr r1, _0233BBD8 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r1, #0x10] + mov r1, #5 + mov r2, #1 + bl GenerateMonsterHouse + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl GenerateExtraHallways + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl GenerateRoomImperfections + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233BBD8: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateLineFloor + + arm_func_start GenerateCrossFloor +GenerateCrossFloor: ; 0x0233BBDC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r1, #3 + mov r8, #0xb + mov r4, r0 + mov r7, #0x16 + mov r6, #0x21 + mov r5, #0x2c + mov lr, #2 + mov ip, #0x14 + mov r3, #0x1e + add r0, sp, #0x80 + mov r2, r1 + str r8, [sp, #0x44] + str r7, [sp, #0x48] + str r6, [sp, #0x4c] + str r5, [sp, #0x50] + str lr, [sp, #8] + str r8, [sp, #0xc] + str ip, [sp, #0x10] + str r3, [sp, #0x14] + bl InitDungeonGrid + mov r5, #0 + ldr r1, _0233BD6C ; =0x000001C2 + mov r3, #1 + mov lr, r5 + add ip, sp, #0x80 + mov r0, #0x1e +_0233BC50: + mla r7, r5, r1, ip + mov r6, lr +_0233BC58: + mla r2, r6, r0, r7 + add r6, r6, #1 + strb r3, [r2, #0xa] + cmp r6, #3 + blt _0233BC58 + add r5, r5, #1 + cmp r5, #3 + blt _0233BC50 + add r0, sp, #8 + strb r3, [sp, #0x88] + strb r3, [sp, #0x40c] + mov r1, #3 + strb r3, [sp, #0xc4] + strb r3, [sp, #0x448] + str r0, [sp] + ldrb ip, [r4, #0xd] + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateRoomsAndAnchors + mov ip, #1 + mov r1, #3 + add r0, sp, #8 + strb ip, [sp, #0xb4] + strb ip, [sp, #0x275] + strb ip, [sp, #0x276] + strb ip, [sp, #0x437] + strb ip, [sp, #0x256] + strb ip, [sp, #0x273] + strb ip, [sp, #0x274] + strb ip, [sp, #0x291] + str r0, [sp] + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateGridCellConnections + mov r1, #3 + add ip, sp, #8 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp] + bl EnsureConnectedGrid + ldr r1, _0233BD70 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r1, #0xc] + mov r1, #3 + mov r2, r1 + bl GenerateKecleonShop + ldr r3, _0233BD70 ; =FLOOR_GENERATION_STATUS + mov r1, #3 + ldrsh r3, [r3, #0x10] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateMonsterHouse + mov r1, #3 + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateExtraHallways + mov r1, #3 + add r0, sp, #0x80 + mov r2, r1 + bl GenerateRoomImperfections + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0233BD6C: .word 0x000001C2 +_0233BD70: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateCrossFloor + + arm_func_start GenerateBeetleFloor +GenerateBeetleFloor: ; 0x0233BD74 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r1, #3 + mov r4, r0 + mov sb, #5 + mov r8, #0xf + mov r7, #0x23 + mov r6, #0x32 + mov r5, #2 + mov lr, #0xb + mov ip, #0x14 + mov r3, #0x1e + add r0, sp, #0x80 + mov r2, r1 + str sb, [sp, #0x44] + str r8, [sp, #0x48] + str r7, [sp, #0x4c] + str r6, [sp, #0x50] + str r5, [sp, #8] + str lr, [sp, #0xc] + str ip, [sp, #0x10] + str r3, [sp, #0x14] + bl InitDungeonGrid + mov r5, #0 + ldr r1, _0233BF28 ; =0x000001C2 + mov r3, #1 + mov lr, r5 + add ip, sp, #0x80 + mov r0, #0x1e +_0233BDEC: + mla r7, r5, r1, ip + mov r6, lr +_0233BDF4: + mla r2, r6, r0, r7 + add r6, r6, #1 + strb r3, [r2, #0xa] + cmp r6, #3 + blt _0233BDF4 + add r5, r5, #1 + cmp r5, #3 + blt _0233BDEC + add r0, sp, #8 + str r0, [sp] + ldrb ip, [r4, #0xd] + mov r1, #3 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateRoomsAndAnchors + mov r3, #0 + add r0, sp, #0x80 + mov ip, #1 + mov r1, #0x1e +_0233BE48: + mla r2, r3, r1, r0 + strb ip, [r2, #0x16] + strb ip, [r2, #0x1d7] + strb ip, [r2, #0x1d8] + add r3, r3, #1 + strb ip, [r2, #0x399] + cmp r3, #3 + blt _0233BE48 + add r2, sp, #8 + str r2, [sp] + mov r1, #3 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateGridCellConnections + mov r0, #1 + add r3, sp, #0x80 + mov r2, r0 + mov r1, #0 + bl MergeRoomsVertically + add r3, sp, #0x80 + mov r0, #1 + mov r1, #0 + mov r2, #2 + bl MergeRoomsVertically + add r1, sp, #8 + str r1, [sp] + mov r1, #3 + add r0, sp, #0x80 + mov r2, r1 + add r3, sp, #0x44 + bl EnsureConnectedGrid + ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS + mov r1, #3 + ldrsh r3, [r3, #0xc] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateKecleonShop + ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS + mov r1, #3 + ldrsh r3, [r3, #0x10] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateMonsterHouse + mov r1, #3 + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateExtraHallways + mov r1, #3 + add r0, sp, #0x80 + mov r2, r1 + bl GenerateRoomImperfections + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0233BF28: .word 0x000001C2 +_0233BF2C: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateBeetleFloor + + arm_func_start MergeRoomsVertically +MergeRoomsVertically: ; 0x0233BF30 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov r5, #0x1e + add r4, r5, #0x1a4 + add r2, r1, r2 + mul r7, r0, r4 + mov sl, r3 + mul r8, r2, r5 + add fp, sl, r7 + ldrsh r0, [fp, r8] + mul r6, r1, r5 + str r0, [sp] + ldrsh r0, [fp, r6] + ldr r1, [sp] + cmp r0, r1 + add r1, sl, #4 + add r1, r1, r7 + strlt r0, [sp] + str r1, [sp, #0x14] + ldrsh r2, [r1, r8] + ldrsh sb, [r1, r6] + add r1, sl, #2 + add r1, r1, r7 + str r1, [sp, #0x10] + ldrsh r1, [r1, r6] + cmp sb, r2 + movle sb, r2 + str r1, [sp, #8] + add r1, sl, #6 + add r1, r1, r7 + str r1, [sp, #4] + ldr r2, [sp, #4] + ldr r1, [sp, #8] + ldrsh r2, [r2, r8] + str r2, [sp, #0xc] + bl GetTile + ldrb r0, [r0, #7] + ldr r5, [sp] + and r0, r0, #0xff + str r0, [sp, #0x18] + b _0233C01C +_0233BFD4: + ldr r4, [sp, #8] + b _0233C00C +_0233BFDC: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x18] + strb r1, [r0, #7] +_0233C00C: + ldr r0, [sp, #0xc] + cmp r4, r0 + blt _0233BFDC + add r5, r5, #1 +_0233C01C: + cmp r5, sb + blt _0233BFD4 + ldr r0, [sp] + add r3, sl, #0x12 + strh r0, [fp, r6] + ldr r0, [sp, #0x14] + add r2, sl, r7 + strh sb, [r0, r6] + ldr r1, [sp, #8] + ldr r0, [sp, #0x10] + strh r1, [r0, r6] + ldr r1, [sp, #0xc] + ldr r0, [sp, #4] + strh r1, [r0, r6] + add r0, r3, r7 + mov r3, #1 + strb r3, [r0, r8] + strb r3, [r0, r6] + add r0, r2, r8 + mov r1, #0 + strb r1, [r0, #0xb] + strb r3, [r0, #0x11] + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end MergeRoomsVertically + + arm_func_start GenerateOuterRoomsFloor +GenerateOuterRoomsFloor: ; 0x0233C07C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r5, r1 + mov r6, r0 + mov r4, r2 + add r0, sp, #0x44 + add r1, sp, #8 + mov r2, r6 + mov r3, r5 + bl GetGridPositions + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl InitDungeonGrid + mov sb, #0 + mov r3, #1 + mov r8, sb + add r7, sp, #0x80 + mov r0, #0x1e + ldr r1, _0233C308 ; =0x000001C2 + b _0233C0F8 +_0233C0D4: + mla fp, sb, r1, r7 + mov sl, r8 + b _0233C0EC +_0233C0E0: + mla r2, sl, r0, fp + strb r3, [r2, #0xa] + add sl, sl, #1 +_0233C0EC: + cmp sl, r5 + blt _0233C0E0 + add sb, sb, #1 +_0233C0F8: + cmp sb, r6 + blt _0233C0D4 + mov fp, #1 + sub r3, r5, #1 + sub r2, r6, #1 + mov r8, fp + mov lr, fp + add sb, sp, #0x80 + mov r0, #0x1e + ldr r1, _0233C308 ; =0x000001C2 + b _0233C148 +_0233C124: + mla sl, fp, r1, sb + mov ip, lr + b _0233C13C +_0233C130: + mla r7, ip, r0, sl + strb r8, [r7, #8] + add ip, ip, #1 +_0233C13C: + cmp ip, r3 + blt _0233C130 + add fp, fp, #1 +_0233C148: + cmp fp, r2 + blt _0233C124 + add r1, sp, #8 + str r1, [sp] + ldrb r7, [r4, #0xd] + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r1, r6 + mov r2, r5 + str r7, [sp, #4] + bl CreateRoomsAndAnchors + mov r2, #1 + add r3, sp, #0x80 + sub r1, r5, #1 + mov r0, #0x1e + mla r7, r1, r0, r3 + mov r8, #0 + sub r1, r6, #2 + sub r0, r6, #1 + mov fp, r2 + ldr sb, _0233C308 ; =0x000001C2 + b _0233C1D4 +_0233C1A0: + cmp r8, #0 + mulne ip, r8, sb + addne sl, r3, ip + strneb r2, [sl, #0x16] + addne sl, r7, ip + strneb r2, [sl, #0x16] + cmp r8, r1 + mullt ip, r8, sb + addlt sl, r3, ip + strltb fp, [sl, #0x1d7] + addlt sl, r7, ip + strltb fp, [sl, #0x1d7] + add r8, r8, #1 +_0233C1D4: + cmp r8, r0 + blt _0233C1A0 + ldr r2, _0233C308 ; =0x000001C2 + add r1, sp, #0x80 + mla r2, r0, r2, r1 + mov r0, #1 + mov ip, #0x1e + mov r3, #0 + sub sl, r5, #2 + sub lr, r5, #1 + mov r8, r0 + mov fp, ip + b _0233C23C +_0233C208: + cmp r3, #0 + mulne sb, r3, ip + addne r7, r1, sb + strneb r0, [r7, #0x13] + addne r7, r2, sb + strneb r0, [r7, #0x13] + cmp r3, sl + mullt sb, r3, fp + addlt r7, r1, sb + strltb r8, [r7, #0x14] + addlt r7, r2, sb + strltb r8, [r7, #0x14] + add r3, r3, #1 +_0233C23C: + cmp r3, lr + blt _0233C208 + add r7, sp, #8 + str r7, [sp] + mov r7, #0 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r1, r6 + mov r2, r5 + str r7, [sp, #4] + bl CreateGridCellConnections + add r7, sp, #8 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r1, r6 + mov r2, r5 + str r7, [sp] + bl EnsureConnectedGrid + ldrb r3, [r4, #9] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateMazeRoom + ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0xc] + mov r1, r6 + mov r2, r5 + bl GenerateKecleonShop + ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0x10] + mov r1, r6 + mov r2, r5 + bl GenerateMonsterHouse + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateExtraHallways + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateRoomImperfections + mov r1, r6 + mov r2, r5 + add r0, sp, #0x80 + bl GenerateSecondaryStructures + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233C308: .word 0x000001C2 +_0233C30C: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateOuterRoomsFloor + + arm_func_start IsNotFullFloorFixedRoom +IsNotFullFloorFixedRoom: ; 0x0233C310 + cmp r0, #0 + ble _0233C324 + cmp r0, #0xa5 + movlt r0, #0 + bxlt lr +_0233C324: + mov r0, #1 + bx lr + arm_func_end IsNotFullFloorFixedRoom + + arm_func_start GenerateFixedRoom +GenerateFixedRoom: ; 0x0233C32C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2f8 + sub sp, sp, #0x1800 + ldr r2, _0233C764 ; =DUNGEON_PTR + str r1, [sp, #0x10] + ldr r2, [r2] + mov sl, r0 + add r1, r2, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa00] +#else + ldr r1, [r1, #0xaa4] +#endif + ldr r1, [r1, sl, lsl #2] + ldrh r4, [r1] + ldrh r5, [r1, #2] + cmp r4, #0 + cmpne r5, #0 + bne _0233C374 + bl GenerateOneRoomMonsterHouseFloor + mov r0, #0 + b _0233C758 +_0233C374: + bl IsNotFullFloorFixedRoom + cmp r0, #0 + bne _0233C590 + ldr r0, _0233C764 ; =DUNGEON_PTR +#ifdef JAPAN + ldr r2, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED + ldr r4, [r0] + ldr r1, _0233C76C ; =FLOOR_GENERATION_STATUS + add r0, r4, #0x12000 + ldr r3, [r0, #0xa00] + add r4, r4, #0xcc00 + ldr r5, [r3, sl, lsl #2] + mov r3, #0 + ldrh r7, [r5] + ldrh r6, [r5, #2] + mov sb, #5 + add fp, r7, #5 + strh r7, [r4, #0x90] + strh r6, [r4, #0x92] + ldr r0, [r0, #0xa00] + ldr r0, [r0, sl, lsl #2] + add r0, r0, #6 + str r0, [r2, #4] + add r0, r6, #5 + strh r3, [r1, #0xa] + str r0, [sp, #0x1c] +#else + ldr r4, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED + ldr r0, [r0] + ldr r3, _0233C76C ; =FLOOR_GENERATION_STATUS + add r2, r0, #0x12000 + ldr r5, [r2, #0xaa4] + add r1, r0, #0xcd00 + ldr r6, [r5, sl, lsl #2] + add r0, r0, #0xcc00 + ldrh r7, [r6] + ldrh r6, [r6, #2] + mov r5, #0 + mov sb, #5 + strh r7, [r1, #0x34] + strh r6, [r1, #0x36] + ldr r1, [r2, #0xaa4] + add fp, r6, #5 + ldr r1, [r1, sl, lsl #2] + str r0, [sp, #0x1c] + add r1, r1, #6 + str r1, [r4, #4] + strh r5, [r3, #0xa] + add r4, r7, #5 +#endif + b _0233C450 +_0233C3E0: + mov r0, sb, lsl #0x10 + mov r8, #5 + mov r5, r0, asr #0x10 + b _0233C444 +_0233C3F0: + bl GetNextFixedRoomAction + str r0, [sp, #0x18] + mov r0, r8 + mov r1, sb + bl GetTileSafe + ldrh ip, [r0] + ldr r1, [sp, #0x18] + mov r2, r8 + orr ip, ip, #0x100 + strh ip, [r0] + mov ip, #0 + strb ip, [r0, #6] + mov ip, #1 + mov r3, sb + str ip, [sp] + bl PlaceFixedRoomTile + cmp r0, #0 +#ifdef JAPAN + strneh r8, [r4, #0x40] + strneh r5, [r4, #0x42] +#else + ldrne r0, [sp, #0x1c] + strneh r8, [r0, #0xe4] + strneh r5, [r0, #0xe6] +#endif + add r8, r8, #1 +_0233C444: +#ifdef JAPAN + cmp r8, fp +#else + cmp r8, r4 +#endif + blt _0233C3F0 + add sb, sb, #1 +_0233C450: +#ifdef JAPAN + ldr r0, [sp, #0x1c] + cmp sb, r0 +#else + cmp sb, fp +#endif + blt _0233C3E0 + mov r8, #0 + add r4, r6, #5 + ldr sb, _0233C76C ; =FLOOR_GENERATION_STATUS + add r5, r7, #5 + mov r6, r8 +_0233C46C: + mov r7, r6 +_0233C470: + cmp r7, #5 + blt _0233C490 + cmp r7, r5 + bge _0233C490 + cmp r8, #5 + blt _0233C490 + cmp r8, r4 + blt _0233C4D4 +_0233C490: + mov r0, r7 + mov r1, r8 + bl GetTileSafe + ldrh r1, [r0] + orr r1, r1, #0x10 + strh r1, [r0] + ldrb r1, [sb, #4] + cmp r1, #0 + ldrh r1, [r0] + biceq r1, r1, #3 + streqh r1, [r0] + beq _0233C4D4 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #3 + strh r1, [r0] +_0233C4D4: + add r7, r7, #1 + cmp r7, #0x38 + blt _0233C470 + add r8, r8, #1 + cmp r8, #0x20 + blt _0233C46C + cmp sl, #4 + bne _0233C534 + mov r5, #5 + mov r4, #2 +_0233C4FC: + mov r6, r4 +_0233C500: + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + add r6, r6, #1 + cmp r6, #5 + orr r1, r1, #0x10 + bic r1, r1, #3 + strh r1, [r0] + blt _0233C500 + add r5, r5, #1 + cmp r5, #0x10 + ble _0233C4FC +_0233C534: + bl IsCurrentTilesetBackground + cmp r0, #0 + beq _0233C584 + mov r6, #0 + mov r4, r6 +_0233C548: + mov r5, r4 +_0233C54C: + mov r0, r5 + mov r1, r6 + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + tst r1, #3 + ldreqh r1, [r0] + orreq r1, r1, #0x10 + streqh r1, [r0] + cmp r5, #0x38 + blt _0233C54C + add r6, r6, #1 + cmp r6, #0x20 + blt _0233C548 +_0233C584: + bl FinalizeJunctions + mov r0, #1 + b _0233C758 +_0233C590: + add r1, r4, #4 + mov r0, #0x38 + bl _s32_div_f + mov r6, r0 + cmp r6, #2 + add r1, r5, #4 + mov r0, #0x20 + movlt r6, #1 + bl _s32_div_f + mov r7, r0 + cmp r7, #2 + movlt r7, #1 + mov r1, #0 + str r1, [sp, #0x14] + add r0, sp, #0x20 + add r1, sp, #0x5c + mov r2, r6 + mov r3, r7 + ldr r8, [sp, #0x14] + bl GetGridPositions + add r0, sp, #0x98 + mov r1, r6 + mov r2, r7 + bl InitDungeonGrid + ldr r3, [sp, #0x10] + add r0, sp, #0x98 + ldrsb r3, [r3, #1] + mov r1, r6 + mov r2, r7 + bl AssignRooms + mov sb, #0 + mov r3, #1 + mov lr, sb + add fp, sp, #0x98 + mov r0, #0x1e + ldr r1, _0233C770 ; =0x000001C2 + b _0233C648 +_0233C624: + mla ip, sb, r1, fp + mov r8, lr + b _0233C63C +_0233C630: + mla r2, r8, r0, ip + strb r3, [r2, #0x1b] + add r8, r8, #1 +_0233C63C: + cmp r8, r7 + blt _0233C630 + add sb, sb, #1 +_0233C648: + cmp sb, r6 + blt _0233C624 + mov fp, #0 + b _0233C69C +_0233C658: + mov r0, r6 + bl DungeonRandInt + mov sb, r0 + mov r0, r7 + bl DungeonRandInt + mov r8, r0 + ldr r1, _0233C770 ; =0x000001C2 + add r0, sp, #0x98 + mla r1, sb, r1, r0 + mov r0, #0x1e + mla r0, r8, r0, r1 + ldrb r1, [r0, #0xa] + mla r0, r6, r8, sb + str r0, [sp, #0x14] + cmp r1, #0 + bne _0233C6A4 + add fp, fp, #1 +_0233C69C: + cmp fp, #0x40 + blt _0233C658 +_0233C6A4: + add r1, sp, #0x5c + str r1, [sp] + ldr r1, [sp, #0x14] + add r0, sp, #0x98 + stmib sp, {r1, r4} + add r3, sp, #0x20 + mov r1, r6 + mov r2, r7 + str r5, [sp, #0xc] + bl ov29_0234217C + cmp r6, #1 + cmpeq r7, #1 + beq _0233C738 + ldr r4, [sp, #0x10] + str r8, [sp] + add r0, sp, #0x98 + mov r1, r6 + mov r2, r7 + mov r3, sb + str r4, [sp, #4] + bl AssignGridCellConnections + add r4, sp, #0x5c + str r4, [sp] + mov r4, #1 + add r0, sp, #0x98 + add r3, sp, #0x20 + mov r1, r6 + mov r2, r7 + str r4, [sp, #4] + bl CreateGridCellConnections + add r0, sp, #0x5c + str r0, [sp] + mov r1, r6 + add r0, sp, #0x98 + mov r2, r7 + add r3, sp, #0x20 + bl EnsureConnectedGrid +_0233C738: + ldr r0, _0233C770 ; =0x000001C2 + add r2, sp, #0x98 + mla r0, sb, r0, r2 + mov r1, #0x1e + mla r0, r8, r1, r0 + mov r1, sl + bl ov29_02342594 + mov r0, #0 +_0233C758: + add sp, sp, #0x2f8 + add sp, sp, #0x1800 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233C764: .word DUNGEON_PTR +_0233C768: .word HIDDEN_STAIRS_SPAWN_BLOCKED +_0233C76C: .word FLOOR_GENERATION_STATUS +_0233C770: .word 0x000001C2 + arm_func_end GenerateFixedRoom + + arm_func_start GenerateOneRoomMonsterHouseFloor +GenerateOneRoomMonsterHouseFloor: ; 0x0233C774 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0xa60 + sub sp, sp, #0x1000 + mov r1, #1 + add r0, sp, #0 + mov r2, r1 + bl InitDungeonGrid + mov r5, #2 + mov r1, #1 + mov r0, #0 + mov r3, #0x36 + mov r2, #0x1e + strh r5, [sp] + strh r3, [sp, #4] + strh r5, [sp, #2] + strh r2, [sp, #6] + strb r1, [sp, #0xa] + strb r1, [sp, #0xb] + strb r0, [sp, #8] + mov r6, r0 + b _0233C818 +_0233C7C8: + ldrsh r4, [sp, #2] + b _0233C808 +_0233C7D0: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + strb r6, [r0, #7] + add r4, r4, #1 +_0233C808: + ldrsh r0, [sp, #6] + cmp r4, r0 + blt _0233C7D0 + add r5, r5, #1 +_0233C818: + ldrsh r0, [sp, #4] + cmp r5, r0 + blt _0233C7C8 + mov r1, #1 + add r0, sp, #0 + mov r2, r1 + rsb r3, r1, #0x3e8 + bl GenerateMonsterHouse + add sp, sp, #0xa60 + add sp, sp, #0x1000 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end GenerateOneRoomMonsterHouseFloor + + arm_func_start GenerateTwoRoomsWithMonsterHouseFloor +GenerateTwoRoomsWithMonsterHouseFloor: ; 0x0233C844 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2e4 + sub sp, sp, #0x1800 + mov r1, #2 + mov r5, #0x1c + mov r4, #0x36 + mov r3, #0x1e + str r5, [sp, #0x4c] + add r0, sp, #0x84 + mov r2, #1 + str r1, [sp, #0x48] + str r4, [sp, #0x50] + str r1, [sp, #0xc] + str r3, [sp, #0x10] + mov r5, #0 + bl InitDungeonGrid + mov r6, r5 +_0233C888: + add r1, sp, #0x48 + add r0, r1, r6, lsl #2 + ldr sb, [r1, r6, lsl #2] + ldr r1, [r0, #4] + ldr sl, [sp, #0xc] + ldr r0, [sp, #0x10] + sub r1, r1, sb + sub r7, r1, #3 + sub r0, r0, sl + sub r8, r0, #3 + mov r1, r7 + mov r0, #0xa + bl DungeonRandRange + mov r4, r0 + mov r1, r8 + mov r0, #0x10 + bl DungeonRandRange + mov fp, r0 + sub r0, r7, r4 + bl DungeonRandInt + add r1, sb, #1 + add r7, r1, r0 + sub r0, r8, fp + bl DungeonRandInt + ldr r1, _0233C9E4 ; =0x000001C2 + add r2, sl, #1 + add r8, r2, r0 + mul r1, r6, r1 + add r0, sp, #0x84 + add r2, r0, r1 + mov r0, #1 + strb r0, [r2, #0xa] + add r0, sp, #0x84 + strh r7, [r0, r1] + add r0, r7, r4 + strh r0, [r2, #4] + strh r8, [r2, #2] + add sb, r8, fp + str r0, [sp, #8] + strh sb, [r2, #6] + and r4, r5, #0xff + b _0233C97C +_0233C930: + mov sl, r8 + b _0233C970 +_0233C938: + mov r0, r7 + mov r1, sl + bl GetTileSafe + ldrh r2, [r0] + mov r1, sl + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r7 + bl GetTileSafe + strb r4, [r0, #7] + add sl, sl, #1 +_0233C970: + cmp sl, sb + blt _0233C938 + add r7, r7, #1 +_0233C97C: + ldr r0, [sp, #8] + cmp r7, r0 + blt _0233C930 + add r6, r6, #1 + cmp r6, #2 + add r5, r5, #1 + blt _0233C888 + mov r2, #1 + add r1, sp, #0xc + strb r2, [sp, #0x9a] + strb r2, [sp, #0x25b] + str r1, [sp] + mov r4, #0 + add r0, sp, #0x84 + add r3, sp, #0x48 + mov r1, #2 + str r4, [sp, #4] + bl CreateGridCellConnections + mov r2, #1 + add r0, sp, #0x84 + rsb r3, r2, #0x3e8 + mov r1, #2 + bl GenerateMonsterHouse + add sp, sp, #0x2e4 + add sp, sp, #0x1800 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233C9E4: .word 0x000001C2 + arm_func_end GenerateTwoRoomsWithMonsterHouseFloor + + arm_func_start GenerateExtraHallways +GenerateExtraHallways: ; 0x0233C9E8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + movs sl, r3 + str r0, [sp] + str r1, [sp, #4] + str r2, [sp, #8] + beq _0233CF70 + mov r5, #0 + b _0233CF68 +_0233CA0C: + ldr r0, [sp, #4] + bl DungeonRandInt + mov r4, r0 + ldr r0, [sp, #8] + bl DungeonRandInt + mov sb, r0 + ldr r1, _0233CF78 ; =0x000001C2 + ldr r0, [sp] + mla r1, r4, r1, r0 + mov r0, #0x1e + mla r6, sb, r0, r1 + ldrb r0, [r6, #0xa] + cmp r0, #0 + ldrneb r0, [r6, #0xb] + cmpne r0, #0 + beq _0233CF64 + ldrb r0, [r6, #8] + cmp r0, #0 + ldreqb r0, [r6, #0x10] + cmpeq r0, #0 + bne _0233CF64 + ldrsh r0, [r6] + ldrsh r1, [r6, #4] + bl DungeonRandRange + mov r8, r0 + ldrsh r0, [r6, #2] + ldrsh r1, [r6, #6] + bl DungeonRandRange + mov r7, r0 + mov r0, #4 + bl DungeonRandInt + mov r6, r0, lsl #1 + ldr r0, [sp, #8] + mov ip, #0 + sub fp, r0, #1 + ldr r0, [sp, #4] + mov r3, #2 + sub r2, r0, #1 + mov r1, #4 + mov r0, #6 + mov lr, ip +_0233CAB0: + cmp r6, #0 + bne _0233CAC0 + cmp sb, fp + movge r6, r3 +_0233CAC0: + cmp r6, #2 + bne _0233CAD0 + cmp r4, r2 + movge r6, r1 +_0233CAD0: + cmp r6, #4 + bne _0233CAE0 + cmp sb, #0 + movle r6, r0 +_0233CAE0: + cmp r6, #6 + bne _0233CAF0 + cmp r4, #0 + movle r6, lr +_0233CAF0: + add ip, ip, #1 + cmp ip, #3 + blt _0233CAB0 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrb sb, [r0, #7] + ldr r0, _0233CF7C ; =DIRECTIONS_XY + mov r4, r6, lsl #2 + add fp, r0, r6, lsl #2 +_0233CB18: + mov r0, r8 + mov r1, r7 + bl GetTile + ldrb r0, [r0, #7] + cmp sb, r0 + ldreq r0, _0233CF7C ; =DIRECTIONS_XY + ldreqsh r1, [r0, r4] + ldreqsh r0, [fp, #2] + addeq r8, r8, r1 + addeq r7, r7, r0 + beq _0233CB18 + ldr fp, _0233CF7C ; =DIRECTIONS_XY + mov sb, r6, lsl #2 + add r4, fp, r6, lsl #2 +_0233CB50: + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + ldreqsh r1, [fp, sb] + ldreqsh r0, [r4, #2] + addeq r8, r8, r1 + addeq r7, r7, r0 + beq _0233CB50 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #2 + beq _0233CF64 + sub sb, r8, #2 + mov r4, #0 + add r1, r7, #2 + sub r3, r7, #2 + add r0, r8, #2 + mov r2, #1 + b _0233CBFC +_0233CBB4: + mov fp, r3 + b _0233CBE8 +_0233CBBC: + cmp sb, #0 + blt _0233CBDC + cmp sb, #0x38 + bge _0233CBDC + cmp fp, #0 + blt _0233CBDC + cmp fp, #0x20 + blt _0233CBE4 +_0233CBDC: + mov r4, r2 + b _0233CBF0 +_0233CBE4: + add fp, fp, #1 +_0233CBE8: + cmp fp, r1 + ble _0233CBBC +_0233CBF0: + cmp r4, #0 + bne _0233CC04 + add sb, sb, #1 +_0233CBFC: + cmp sb, r0 + ble _0233CBB4 +_0233CC04: + cmp r4, #0 + bne _0233CF64 + add r0, r6, #2 + and r0, r0, #6 + ldr r1, _0233CF7C ; =DIRECTIONS_XY + mov r2, r0, lsl #2 + add r0, r1, r0, lsl #2 + ldrsh r2, [r1, r2] + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + sub r0, r6, #2 + and r0, r0, #6 + ldr r1, _0233CF7C ; =DIRECTIONS_XY + mov r2, r0, lsl #2 + add r0, r1, r0, lsl #2 + ldrsh r2, [r1, r2] + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + mov r0, #3 + bl DungeonRandInt + ldr r4, _0233CF7C ; =DIRECTIONS_XY + add sb, r0, #3 +_0233CC8C: + cmp r8, #1 + cmpgt r7, #1 + ble _0233CF64 + cmp r8, #0x37 + cmplt r7, #0x1f + bge _0233CF64 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + tst r0, #0x10 + bne _0233CF64 + mov r0, #1 + str r0, [sp, #0xc] + add r0, r8, #1 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD38 + add r0, r8, #1 + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD38 + mov r0, r8 + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CD38: + add r0, r8, #1 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD94 + sub fp, r7, #1 + add r0, r8, #1 + mov r1, fp + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD94 + mov r1, fp + mov r0, r8 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CD94: + sub fp, r8, #1 + mov r0, fp + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CDF0 + mov r0, fp + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CDF0 + mov r0, r8 + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CDF0: + mov r0, fp + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CE4C + mov r0, fp + sub fp, r7, #1 + mov r1, fp + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CE4C + mov r1, fp + mov r0, r8 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CE4C: + ldr r0, [sp, #0xc] + cmp r0, #0 + beq _0233CE7C + mov r0, r8 + mov r1, r7 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233CE7C: + add r0, r6, #2 + and r1, r0, #6 + mov r0, r1, lsl #2 + ldrsh r2, [r4, r0] + add r0, r4, r1, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + sub r0, r6, #2 + and r1, r0, #6 + mov r0, r1, lsl #2 + ldrsh r2, [r4, r0] + add r0, r4, r1, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + subs sb, sb, #1 + bne _0233CF48 + mov r0, #3 + bl DungeonRandInt + add sb, r0, #3 + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x32 + addlt r6, r6, #2 + subge r6, r6, #2 + cmp r8, #0x20 + and r6, r6, #6 + blt _0233CF2C + ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #6] + cmp r0, #1 + cmpeq r6, #2 + beq _0233CF64 +_0233CF2C: + cmp r8, #0x30 + blt _0233CF48 + ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #6] + cmp r0, #2 + cmpeq r6, #2 + beq _0233CF64 +_0233CF48: + mov r0, r6, lsl #2 + ldrsh r1, [r4, r0] + add r0, r4, r6, lsl #2 + ldrsh r0, [r0, #2] + add r8, r8, r1 + add r7, r7, r0 + b _0233CC8C +_0233CF64: + add r5, r5, #1 +_0233CF68: + cmp r5, sl + blt _0233CA0C +_0233CF70: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233CF78: .word 0x000001C2 +_0233CF7C: .word DIRECTIONS_XY +_0233CF80: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateExtraHallways + + arm_func_start GetGridPositions +GetGridPositions: ; 0x0233CF84 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r7, r3 + mov r6, r4 + mov r5, #0x38 + b _0233CFC0 +_0233CFA8: + mov r0, r5 + mov r1, r8 + str r4, [sl, r6, lsl #2] + bl _s32_div_f + add r4, r4, r0 + add r6, r6, #1 +_0233CFC0: + cmp r6, r8 + blt _0233CFA8 + mov r6, #0 + str r4, [sl, r8, lsl #2] + mov r5, r6 + mov r4, #0x20 + b _0233CFF4 +_0233CFDC: + mov r0, r4 + mov r1, r7 + str r6, [sb, r5, lsl #2] + bl _s32_div_f + add r6, r6, r0 + add r5, r5, #1 +_0233CFF4: + cmp r5, r7 + blt _0233CFDC + str r6, [sb, r7, lsl #2] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end GetGridPositions + + arm_func_start InitDungeonGrid +InitDungeonGrid: ; 0x0233D004 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + add r5, r1, r1, lsl #1 + mov r4, r5, asr #1 + add r3, r1, r1, lsr #31 + add ip, r5, r4, lsr #30 + mov r7, #0 + b _0233D0F0 +_0233D020: + ldr r4, _0233D0FC ; =0x000001C2 + mov r8, #0 + mla sb, r7, r4, r0 + mov r5, #1 + mov r4, r8 + mov r6, r5 + mov lr, r8 + b _0233D0E4 +_0233D040: + ldr sl, _0233D100 ; =FLOOR_GENERATION_STATUS + ldrb sl, [sl, #6] + cmp sl, #1 + bne _0233D064 + cmp r7, r3, asr #1 + movge sl, #0x1e + mlage sl, r8, sl, sb + strgeb r6, [sl, #8] + bge _0233D08C +_0233D064: + cmp sl, #2 + bne _0233D080 + cmp r7, ip, asr #2 + movge sl, #0x1e + mlage sl, r8, sl, sb + strgeb r5, [sl, #8] + bge _0233D08C +_0233D080: + mov sl, #0x1e + mla sl, r8, sl, sb + strb r4, [sl, #8] +_0233D08C: + mov fp, #1 + strb fp, [sl, #0xa] + strb lr, [sl, #0xb] + strb lr, [sl, #0xf] + and fp, lr, #0xff + strb fp, [sl, #0xe] + strb fp, [sl, #0xc] + strb lr, [sl, #0x16] + strb fp, [sl, #0x15] + strb fp, [sl, #0x14] + strb fp, [sl, #0x13] + strb lr, [sl, #0x1a] + strb fp, [sl, #0x19] + strb fp, [sl, #0x18] + strb fp, [sl, #0x17] + strb lr, [sl, #9] + strb lr, [sl, #0x11] + strb lr, [sl, #0x10] + strb lr, [sl, #0x12] + strb lr, [sl, #0x1c] + strb lr, [sl, #0x1d] + add r8, r8, #1 +_0233D0E4: + cmp r8, r2 + blt _0233D040 + add r7, r7, #1 +_0233D0F0: + cmp r7, r1 + blt _0233D020 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233D0FC: .word 0x000001C2 +_0233D100: .word FLOOR_GENERATION_STATUS + arm_func_end InitDungeonGrid + + arm_func_start AssignRooms +AssignRooms: ; 0x0233D104 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x104 + mov sl, r0 + mov r4, r3 + mov r0, #3 + mov sb, r1 + mov r8, r2 + bl DungeonRandInt + cmp r4, #0 + rsblt r4, r4, #0 + addge r4, r4, r0 + mov r2, #0 + mov r1, #1 + add r0, sp, #4 + b _0233D148 +_0233D140: + strb r1, [r0, r2] + add r2, r2, #1 +_0233D148: + cmp r2, r4 + blt _0233D140 + mov r1, #0 + add r0, sp, #4 + b _0233D164 +_0233D15C: + strb r1, [r0, r2] + add r2, r2, #1 +_0233D164: + cmp r2, #0x100 + blt _0233D15C + mul r7, sb, r8 + mov r6, #0 + add r4, sp, #4 +_0233D178: + mov r0, r7 + bl DungeonRandInt + mov r5, r0 + mov r0, r7 + bl DungeonRandInt + add r6, r6, #1 + ldrb r2, [r4, r5] + ldrb r1, [r4, r0] + cmp r6, #0x40 + strb r1, [r4, r5] + strb r2, [r4, r0] + blt _0233D178 + ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS + mov fp, #0 + sub r1, sb, #1 + str fp, [r0, #0x14] + mov r3, fp + and r5, sb, #1 + add r0, r1, r1, lsr #31 + mov r2, fp + add lr, sp, #4 + b _0233D25C +_0233D1D0: + ldr r1, _0233D314 ; =0x000001C2 + mov r4, #0 + mla r6, r3, r1, sl + ldr r1, _0233D310 ; =FLOOR_GENERATION_STATUS + b _0233D250 +_0233D1E4: + mov r7, #0x1e + mla r7, r4, r7, r6 + ldrb ip, [r7, #8] + cmp ip, #0 + bne _0233D24C + ldr ip, [r1, #0x14] + cmp ip, #0x20 + strgeb r2, [r7, #0xa] + ldrb ip, [lr, fp] + cmp ip, #0 + beq _0233D240 + mov ip, #1 + strb ip, [r7, #0xa] + ldr ip, [r1, #0x14] + cmp r5, #0 + add ip, ip, #1 + str ip, [r1, #0x14] + beq _0233D248 + cmp r3, r0, asr #1 + cmpeq r4, #1 + moveq ip, #0 + streqb ip, [r7, #0xa] + b _0233D248 +_0233D240: + mov ip, #0 + strb ip, [r7, #0xa] +_0233D248: + add fp, fp, #1 +_0233D24C: + add r4, r4, #1 +_0233D250: + cmp r4, r8 + blt _0233D1E4 + add r3, r3, #1 +_0233D25C: + cmp r3, sb + blt _0233D1D0 + ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x14] + cmp r0, #2 + bge _0233D308 + mov r4, #0 + b _0233D2F4 +_0233D27C: + mov r0, #0 + str r0, [sp] + mov r6, r0 + b _0233D2DC +_0233D28C: + ldr r0, _0233D314 ; =0x000001C2 + mov r7, #0 + mla fp, r6, r0, sl + b _0233D2D0 +_0233D29C: + mov r0, #0x1e + mla r5, r7, r0, fp + ldrb r0, [r5, #8] + cmp r0, #0 + bne _0233D2CC + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x3c + movlt r0, #1 + strlt r0, [sp] + strltb r0, [r5, #0xa] + blt _0233D2E4 +_0233D2CC: + add r7, r7, #1 +_0233D2D0: + cmp r7, r8 + blt _0233D29C + add r6, r6, #1 +_0233D2DC: + cmp r6, sb + blt _0233D28C +_0233D2E4: + ldr r0, [sp] + cmp r0, #0 + bne _0233D2FC + add r4, r4, #1 +_0233D2F4: + cmp r4, #0xc8 + blt _0233D27C +_0233D2FC: + ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS + mov r1, #0 + strb r1, [r0] +_0233D308: + add sp, sp, #0x104 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233D310: .word FLOOR_GENERATION_STATUS +_0233D314: .word 0x000001C2 + arm_func_end AssignRooms + + arm_func_start CreateRoomsAndAnchors +CreateRoomsAndAnchors: ; 0x0233D318 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x30 + ldr r5, [sp, #0x5c] + str r0, [sp] + and r0, r5, #4 + str r0, [sp, #0x14] + ldr r0, [sp, #0x58] + mov r4, #0 + str r4, [sp, #0x1c] + str r1, [sp, #4] + str r2, [sp, #8] + str r3, [sp, #0xc] + str r0, [sp, #0x58] + b _0233D658 +_0233D350: + ldr r0, [sp] + mov r1, #0x1e + mla sb, r4, r1, r0 + ldr r0, [sp, #4] + mov sl, #0 + sub r0, r0, #1 + str r0, [sp, #0x28] + ldr r0, [sp, #8] + sub r0, r0, #1 + str r0, [sp, #0x2c] + ldr r0, [sp, #0x58] + add r0, r0, r4, lsl #2 + str r0, [sp, #0x20] + b _0233D648 +_0233D388: + ldr r0, [sp, #0xc] + ldr r3, [r0, sl, lsl #2] + ldr r0, [sp, #0x58] + add fp, r3, #2 + ldr r2, [r0, r4, lsl #2] + add r0, r2, #2 + str r0, [sp, #0x18] + ldr r0, [sp, #0xc] + add r0, r0, sl, lsl #2 + ldr r1, [r0, #4] + ldr r0, [sp, #0x20] + sub r1, r1, r3 + ldr r0, [r0, #4] + sub r5, r1, #4 + sub r0, r0, r2 + sub r6, r0, #3 + ldr r0, _0233D66C ; =0x000001C2 + mla r0, sl, r0, sb + str r0, [sp, #0x10] + ldrb r0, [r0, #8] + cmp r0, #0 + bne _0233D644 + ldr r0, [sp, #0x10] + ldrb r0, [r0, #0xa] + cmp r0, #0 + beq _0233D580 + mov r0, #5 + mov r1, r5 + bl DungeonRandRange + mov r7, r0 + mov r0, #4 + mov r1, r6 + bl DungeonRandRange + mov r8, r0 + orr r0, r7, #1 + cmp r0, r5 + movlt r7, r0 + orr r0, r8, #1 + cmp r0, r6 + movlt r8, r0 + add r0, r8, r8, lsl #1 + add r0, r0, r0, lsr #31 + cmp r7, r0, asr #1 + mov r0, r0, asr #1 + movgt r7, r0 + add r0, r7, r7, lsl #1 + add r0, r0, r0, lsr #31 + cmp r8, r0, asr #1 + mov r0, r0, asr #1 + movgt r8, r0 + sub r0, r5, r7 + bl DungeonRandInt + add r5, fp, r0 + sub r0, r6, r8 + bl DungeonRandInt + ldr r1, [sp, #0x18] + add fp, r5, r7 + add r6, r1, r0 + ldr r0, _0233D66C ; =0x000001C2 + add r7, r6, r8 + mul r0, sl, r0 + strh r5, [sb, r0] + add r0, sb, r0 + strh fp, [r0, #4] + strh r6, [r0, #2] + strh r7, [r0, #6] + ldr r0, [sp, #0x1c] + and r0, r0, #0xff + str r0, [sp, #0x24] + b _0233D4F0 +_0233D4A0: + mov r8, r6 + b _0233D4E4 +_0233D4A8: + mov r0, r5 + mov r1, r8 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r8 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + ldr r1, [sp, #0x24] + add r8, r8, #1 + strb r1, [r0, #7] +_0233D4E4: + cmp r8, r7 + blt _0233D4A8 + add r5, r5, #1 +_0233D4F0: + cmp r5, fp + blt _0233D4A0 + mov r5, #1 + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x50 + movlt r0, r5 + movge r0, #0 + and r6, r0, #0xff + ldr r0, _0233D670 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + ldr r0, [sp, #0x14] + moveq r6, #0 + cmp r0, #0 + moveq r5, #0 + cmp r5, #0 + cmpne r6, #0 + beq _0233D550 + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x32 + movlt r5, #0 + movge r6, #0 +_0233D550: + cmp r5, #0 + ldrne r0, [sp, #0x10] + movne r1, #1 + strneb r1, [r0, #0x1c] + cmp r6, #0 + ldrne r0, [sp, #0x10] + movne r1, #1 + strneb r1, [r0, #0x1d] + ldr r0, [sp, #0x1c] + add r0, r0, #1 + str r0, [sp, #0x1c] + b _0233D644 +_0233D580: + mov r2, #2 + ldr r0, [sp, #0x28] + mov r8, r2 + cmp sl, #0 + moveq r2, #1 + cmp r4, #0 + moveq r8, #1 + cmp sl, r0 + mov r1, #4 + mov r7, r1 + ldr r0, [sp, #0x2c] + moveq r1, #2 + cmp r4, r0 + add r0, fp, r2 + add r2, fp, r5 + sub r1, r2, r1 + moveq r7, #2 + bl DungeonRandRange + ldr r1, [sp, #0x18] + add r1, r1, r6 + mov r6, r0 + ldr r0, [sp, #0x18] + sub r1, r1, r7 + add r0, r0, r8 + bl DungeonRandRange + mov r5, r0 + ldr r0, _0233D66C ; =0x000001C2 + mul r0, sl, r0 + strh r6, [sb, r0] + add r1, sb, r0 + add r0, r6, #1 + strh r0, [r1, #4] + strh r5, [r1, #2] + add r0, r5, #1 + strh r0, [r1, #6] + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r5 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r6 + bl GetTileSafe + mov r1, #0xfe + strb r1, [r0, #7] +_0233D644: + add sl, sl, #1 +_0233D648: + ldr r0, [sp, #4] + cmp sl, r0 + blt _0233D388 + add r4, r4, #1 +_0233D658: + ldr r0, [sp, #8] + cmp r4, r0 + blt _0233D350 + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233D66C: .word 0x000001C2 +_0233D670: .word FLOOR_GENERATION_STATUS + arm_func_end CreateRoomsAndAnchors + + arm_func_start GenerateSecondaryStructures +GenerateSecondaryStructures: ; 0x0233D674 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + mov sl, r0 + mov r0, #0 + str r1, [sp] + str r2, [sp, #4] + str r0, [sp, #0x20] + b _0233E03C +_0233D694: + ldr r0, [sp, #0x20] + mov r1, #0x1e + mul r7, r0, r1 + mov r0, #0 + add r6, sl, r7 + str r0, [sp, #0x24] + b _0233E020 +_0233D6B0: + ldr r1, [sp, #0x24] + ldr r0, _0233E054 ; =0x000001C2 + mul sb, r1, r0 + add r8, r6, sb + ldrb r0, [r8, #8] + cmp r0, #0 + ldreqb r0, [r8, #0xe] + cmpeq r0, #0 + ldreqb r0, [r8, #0x12] + cmpeq r0, #0 + bne _0233E014 + ldrb r0, [r8, #0xa] + cmp r0, #0 + beq _0233E014 + ldrb r0, [r8, #0x1c] + cmp r0, #0 + bne _0233E014 + ldrb r0, [r8, #0x1d] + cmp r0, #0 + beq _0233E014 + mov r0, #6 + bl DungeonRandInt + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0233E014 +_0233D714: ; jump table + b _0233E014 ; case 0 + b _0233DE94 ; case 1 + b _0233DDC8 ; case 2 + b _0233DC9C ; case 3 + b _0233D938 ; case 4 + b _0233D72C ; case 5 +_0233D72C: + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + mov r0, #2 + bl DungeonRandInt + cmp r0, #0 + mov r0, #0 + beq _0233D850 + str r0, [sp, #0x10] + mov r4, r8 + ldrsh r1, [r6, sb] + ldrsh r0, [r4, #4] + ldrsh r5, [r4, #2] + add r0, r1, r0 + add r0, r0, r0, lsr #31 + mov fp, r0, asr #1 + b _0233D7AC +_0233D78C: + mov r0, fp + mov r1, r5 + bl IsNextToHallway + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x10] + bne _0233D7B8 + add r5, r5, #1 +_0233D7AC: + ldrsh r0, [r4, #6] + cmp r5, r0 + blt _0233D78C +_0233D7B8: + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233E014 + ldrsh r5, [r4, #2] + b _0233D7F4 +_0233D7CC: + mov r0, fp + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233D7F4: + ldrsh r0, [r4, #6] + cmp r5, r0 + blt _0233D7CC + ldrsh sb, [r4] + b _0233D83C +_0233D808: + ldrsh r5, [r4, #2] + b _0233D82C +_0233D810: + mov r0, sb + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + orr r1, r1, #0x80 + strh r1, [r0] +_0233D82C: + ldrsh r0, [r4, #6] + cmp r5, r0 + blt _0233D810 + add sb, sb, #1 +_0233D83C: + cmp sb, fp + blt _0233D808 + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233D850: + str r0, [sp, #0x14] + mov r4, r8 + ldrsh r1, [r4, #2] + ldrsh r0, [r4, #6] + ldrsh r5, [r6, sb] + add r0, r1, r0 + add r0, r0, r0, lsr #31 + mov fp, r0, asr #1 + b _0233D894 +_0233D874: + mov r0, r5 + mov r1, fp + bl IsNextToHallway + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x14] + bne _0233D8A0 + add r5, r5, #1 +_0233D894: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233D874 +_0233D8A0: + ldr r0, [sp, #0x14] + cmp r0, #0 + bne _0233E014 + ldrsh r5, [r4] + b _0233D8DC +_0233D8B4: + mov r0, r5 + mov r1, fp + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233D8DC: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233D8B4 + ldrsh sb, [r4, #2] + b _0233D924 +_0233D8F0: + ldrsh r5, [r4] + b _0233D914 +_0233D8F8: + mov r0, r5 + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + orr r1, r1, #0x80 + strh r1, [r0] +_0233D914: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233D8F8 + add sb, sb, #1 +_0233D924: + cmp sb, fp + blt _0233D8F0 + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233D938: + mov r1, r8 + ldrsh r4, [r6, sb] + ldrsh r3, [r1, #4] + sub r0, r3, r4 + cmp r0, #6 + ldrgesh r2, [r1, #2] + ldrgesh r1, [r1, #6] + subge r0, r1, r2 + cmpge r0, #6 + blt _0233E014 + add r0, r4, r3 + add r0, r0, r0, lsr #31 + mov r5, r0, asr #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + add r1, r2, r1 + ldr r0, [r0, #0x18] + add r1, r1, r1, lsr #31 + mov r4, r1, asr #1 + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + sub r0, r4, #2 + str r0, [sp, #0xc] + sub r0, r5, #2 + ldr r1, [sp, #0xc] + str r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + sub fp, r5, #1 + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0] + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0] + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r1, [r0] + sub sb, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #6 + strh r1, [r0] + ldr r0, [sp, #8] + mov r1, sb + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + ldr r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + ldr r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + ldr r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + mov r0, fp + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + ldrh r2, [r0] + add r1, r4, #1 + orr r2, r2, #4 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0] + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r2, [r0] + mov r1, sb + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r2, [r0] + mov r1, sb + orr r2, r2, #6 + strh r2, [r0] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #4 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #0x40 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #2 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #2 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #2 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #0x10 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #0x10 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #0x10 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r1, [r0, #2] + orr r1, r1, #0x10 + strh r1, [r0, #2] + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233DC9C: + mov r4, r8 + ldrsh r3, [r6, sb] + ldrsh r2, [r4, #4] + sub r0, r2, r3 + cmp r0, #5 + ldrgesh r1, [r4, #6] + ldrgesh r0, [r4, #2] + subge r0, r1, r0 + cmpge r0, #5 + blt _0233E014 + add r0, r3, #2 + sub r1, r2, #3 + bl DungeonRandRange + ldrsh r1, [r4, #6] + str r0, [sp, #0x28] + mov r5, r0 + ldrsh r0, [r4, #2] + sub r1, r1, #3 + add r0, r0, #2 + bl DungeonRandRange + str r0, [sp, #0x18] + ldrsh r0, [r4] + ldrsh r1, [r4, #4] + add r0, r0, #2 + sub r1, r1, #3 + bl DungeonRandRange + str r0, [sp, #0x1c] + ldrsh r0, [r4, #2] + ldrsh r1, [r4, #6] + add r0, r0, #2 + sub r1, r1, #3 + bl DungeonRandRange + mov fp, r0 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + ldr r1, [sp, #0x28] + ldr r0, [sp, #0x1c] + cmp r1, r0 + movgt r5, r0 + movgt r0, r1 + strgt r0, [sp, #0x1c] + ldr r0, [sp, #0x18] + cmp r0, fp + strgt fp, [sp, #0x18] + movgt fp, r0 + b _0233DDB0 +_0233DD74: + ldr r4, [sp, #0x18] + b _0233DDA4 +_0233DD7C: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233DDA4: + cmp r4, fp + ble _0233DD7C + add r5, r5, #1 +_0233DDB0: + ldr r0, [sp, #0x1c] + cmp r5, r0 + ble _0233DD74 + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233DDC8: + mov r2, r8 + ldrsh r1, [r2, #4] + ldrsh r0, [r6, sb] + sub r0, r1, r0 + tst r0, #1 + beq _0233E014 + ldrsh r1, [r2, #6] + ldrsh r0, [r2, #2] + sub r0, r1, r0 + tst r0, #1 + ldrne r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldrne r0, [r0, #0x18] + cmpne r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + mov r5, #0 +_0233DE1C: + ldrsh r1, [r8, #4] + ldrsh r0, [r8] + sub r0, r1, r0 + bl DungeonRandInt + mov r4, r0 + ldrsh r1, [r8, #6] + ldrsh r0, [r8, #2] + sub r0, r1, r0 + bl DungeonRandInt + mov r2, r0 + add r0, r4, r2 + tst r0, #1 + beq _0233DE7C + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r0, r4 + add r1, r1, r2 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233DE7C: + add r5, r5, #1 + cmp r5, #0x40 + blt _0233DE1C + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233DE94: + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + mov r0, r8 + ldrsh r2, [r0, #4] + ldrsh r1, [r6, sb] + sub r3, r2, r1 + tst r3, #1 + beq _0233DEDC + ldrsh r2, [r0, #6] + ldrsh r1, [r0, #2] + sub r1, r2, r1 + tst r1, #1 + bne _0233DFF4 +_0233DEDC: + cmp r3, #5 + ldrsh r4, [r0] + ldrsh r3, [r0, #4] + ldrsh r2, [r0, #6] + ldrsh r1, [r0, #2] + add r0, r4, r3 + add r0, r0, r0, lsr #31 + mov r4, r0, asr #1 + add r0, r1, r2 + add r0, r0, r0, lsr #31 + mov r5, r0, asr #1 + subge r0, r2, r1 + cmpge r0, #5 + blt _0233DFCC + add r0, r4, #1 + mov r1, r5 + bl GetTileSafe + ldrh r2, [r0] + add r1, r5, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + mov r0, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r5 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + sub r0, r4, #1 + bl GetTileSafe + ldrh r2, [r0] + sub r1, r5, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + mov r0, r4 + bl GetTileSafe + mov r1, r5 + ldrh r2, [r0] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + mov r0, r4 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + b _0233E00C +_0233DFCC: + mov r0, r4 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + b _0233E00C +_0233DFF4: + add r4, sl, sb + add r0, r4, r7 + bl SetSpawnFlag5 + add r0, r4, r7 + mov r1, #1 + bl GenerateMaze +_0233E00C: + mov r0, #1 + strb r0, [r8, #9] +_0233E014: + ldr r0, [sp, #0x24] + add r0, r0, #1 + str r0, [sp, #0x24] +_0233E020: + ldr r1, [sp, #0x24] + ldr r0, [sp] + cmp r1, r0 + blt _0233D6B0 + ldr r0, [sp, #0x20] + add r0, r0, #1 + str r0, [sp, #0x20] +_0233E03C: + ldr r1, [sp, #0x20] + ldr r0, [sp, #4] + cmp r1, r0 + blt _0233D694 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233E054: .word 0x000001C2 +_0233E058: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateSecondaryStructures + + arm_func_start AssignGridCellConnections +AssignGridCellConnections: ; 0x0233E05C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + ldr r4, [sp, #0x3c] + mov r8, r1 + mov r1, r4 + ldrb r1, [r1, #5] + mov sb, r0 + mov r0, #4 + str r4, [sp, #0x3c] + mov fp, r2 + mov r7, r3 + ldr r5, [sp, #0x38] + str r1, [sp, #4] + bl DungeonRandInt + mov r6, r0 + mov sl, #0 + b _0233E208 +_0233E0A0: + mov r0, #8 + bl DungeonRandInt + mov r4, r0 + mov r0, #4 + bl DungeonRandInt + mov lr, #1 + cmp r4, #4 + movlt r6, r0 + sub r1, r8, #1 + sub r0, fp, #1 + mov ip, lr + mov r3, #0 +_0233E0D0: + and r2, r6, #3 + mov r4, r3 + cmp r2, #3 + addls pc, pc, r2, lsl #2 + b _0233E130 +_0233E0E4: ; jump table + b _0233E0F4 ; case 0 + b _0233E104 ; case 1 + b _0233E114 ; case 2 + b _0233E124 ; case 3 +_0233E0F4: + cmp r7, r1 + movlt r4, ip + addge r6, r6, #1 + b _0233E130 +_0233E104: + cmp r5, #0 + movgt r4, lr + addle r6, r6, #1 + b _0233E130 +_0233E114: + cmp r7, #0 + movgt r4, #1 + addle r6, r6, #1 + b _0233E130 +_0233E124: + cmp r5, r0 + movlt r4, #1 + addge r6, r6, #1 +_0233E130: + cmp r4, #0 + beq _0233E0D0 + and r0, r6, #3 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233E204 +_0233E148: ; jump table + b _0233E158 ; case 0 + b _0233E184 ; case 1 + b _0233E1B0 ; case 2 + b _0233E1DC ; case 3 +_0233E158: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x16] + streqb r0, [r1, #0x1d7] + addeq r7, r7, #1 + b _0233E204 +_0233E184: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #-0x16] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x13] + streqb r0, [r1, #-0xa] + subeq r5, r5, #1 + b _0233E204 +_0233E1B0: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #-0x1ba] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x15] + streqb r0, [r1, #-0x1ac] + subeq r7, r7, #1 + b _0233E204 +_0233E1DC: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #0x26] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x14] + streqb r0, [r1, #0x31] + addeq r5, r5, #1 +_0233E204: + add sl, sl, #1 +_0233E208: + ldr r0, [sp, #4] + cmp sl, r0 + blt _0233E0A0 + ldr r0, [sp, #0x3c] + ldrb r0, [r0, #0xb] + cmp r0, #0 + bne _0233E430 +_0233E224: + sub r0, r8, #1 + mov r6, #0 + str r0, [sp, #8] + sub r0, fp, #1 + str r6, [sp] + str r0, [sp, #0xc] + b _0233E41C +_0233E240: + ldr r0, _0233E438 ; =0x000001C2 + mov r7, #0 + mla sl, r6, r0, sb + b _0233E410 +_0233E250: + mov r1, #0x1e + mla r5, r7, r1, sl + ldrb r1, [r5, #8] + mov r0, #0 + cmp r1, #0 + ldreqb r1, [r5, #0xa] + cmpeq r1, #0 + bne _0233E40C + ldrb r1, [r5, #0x13] + cmp r1, #0 + ldrb r1, [r5, #0x14] + addne r0, r0, #1 + cmp r1, #0 + ldrb r1, [r5, #0x15] + addne r0, r0, #1 + cmp r1, #0 + ldrb r1, [r5, #0x16] + addne r0, r0, #1 + cmp r1, #0 + addne r0, r0, #1 + cmp r0, #1 + bne _0233E40C + mov r4, #0 + mov r0, #4 + bl DungeonRandInt + mov r1, r4 + b _0233E370 +_0233E2BC: + and r2, r0, #3 + mov r4, #0 + cmp r2, #3 + addls pc, pc, r2, lsl #2 + b _0233E364 +_0233E2D0: ; jump table + b _0233E2E0 ; case 0 + b _0233E304 ; case 1 + b _0233E324 ; case 2 + b _0233E344 ; case 3 +_0233E2E0: + ldr r2, [sp, #8] + cmp r6, r2 + bge _0233E2FC + ldrb r2, [r5, #0x16] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E2FC: + add r0, r0, #1 + b _0233E364 +_0233E304: + cmp r7, #0 + ble _0233E31C + ldrb r2, [r5, #0x13] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E31C: + add r0, r0, #1 + b _0233E364 +_0233E324: + cmp r6, #0 + ble _0233E33C + ldrb r2, [r5, #0x15] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E33C: + add r0, r0, #1 + b _0233E364 +_0233E344: + ldr r2, [sp, #0xc] + cmp r7, r2 + bge _0233E360 + ldrb r2, [r5, #0x14] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E360: + add r0, r0, #1 +_0233E364: + cmp r4, #0 + bne _0233E378 + add r1, r1, #1 +_0233E370: + cmp r1, #8 + blt _0233E2BC +_0233E378: + cmp r4, #0 + beq _0233E40C + and r0, r0, #3 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233E40C +_0233E390: ; jump table + b _0233E3A0 ; case 0 + b _0233E3BC ; case 1 + b _0233E3D8 ; case 2 + b _0233E3F4 ; case 3 +_0233E3A0: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x16] + streqb r0, [r5, #0x1d7] + streq r0, [sp] + b _0233E40C +_0233E3BC: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x13] + streqb r0, [r5, #-0xa] + streq r0, [sp] + b _0233E40C +_0233E3D8: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x15] + streqb r0, [r5, #-0x1ac] + streq r0, [sp] + b _0233E40C +_0233E3F4: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x14] + streqb r0, [r5, #0x31] + streq r0, [sp] +_0233E40C: + add r7, r7, #1 +_0233E410: + cmp r7, fp + blt _0233E250 + add r6, r6, #1 +_0233E41C: + cmp r6, r8 + blt _0233E240 + ldr r0, [sp] + cmp r0, #0 + bne _0233E224 +_0233E430: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233E438: .word 0x000001C2 + arm_func_end AssignGridCellConnections + + arm_func_start CreateGridCellConnections +CreateGridCellConnections: ; 0x0233E43C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x48 + str r0, [sp, #0xc] + str r1, [sp, #0x10] + str r2, [sp, #0x14] + mov sb, r3 + ldr r8, [sp, #0x70] + mov r5, #0 + b _0233E510 +_0233E460: + ldr r1, _0233ED30 ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r6, #0 + mla r7, r5, r1, r0 + ldr r0, [sp, #0x10] + mov r3, r6 + sub r1, r0, #1 + ldr r0, [sp, #0x14] + mov r2, r6 + sub r0, r0, #1 + mov ip, r6 + mov lr, r6 + mov r4, r6 + b _0233E500 +_0233E498: + mov sl, #0x1e + mla sl, r6, sl, r7 + ldrb fp, [sl, #8] + cmp fp, #0 + strneb r4, [sl, #0x17] + strneb r4, [sl, #0x18] + strneb r4, [sl, #0x19] + strneb r4, [sl, #0x1a] + bne _0233E4FC + cmp r5, #0 + strleb r3, [sl, #0x15] + cmp r6, #0 + strleb r2, [sl, #0x13] + cmp r5, r1 + strgeb ip, [sl, #0x16] + cmp r6, r0 + strgeb lr, [sl, #0x14] + ldrb fp, [sl, #0x13] + strb fp, [sl, #0x17] + ldrb fp, [sl, #0x14] + strb fp, [sl, #0x18] + ldrb fp, [sl, #0x15] + strb fp, [sl, #0x19] + ldrb fp, [sl, #0x16] + strb fp, [sl, #0x1a] +_0233E4FC: + add r6, r6, #1 +_0233E500: + ldr sl, [sp, #0x14] + cmp r6, sl + blt _0233E498 + add r5, r5, #1 +_0233E510: + ldr r0, [sp, #0x10] + cmp r5, r0 + blt _0233E460 + mov r6, #0 + b _0233E800 +_0233E524: + ldr r1, _0233ED30 ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r7, #0 + mla r4, r6, r1, r0 + add r0, sb, r6, lsl #2 + str r0, [sp, #0x2c] + b _0233E7F0 +_0233E540: + mov r0, #0x1e + mla r5, r7, r0, r4 + ldrb r0, [r5, #8] + cmp r0, #0 + bne _0233E7EC + ldrb r0, [r5, #0xa] + cmp r0, #0 + ldreqsh fp, [r5] + ldreqsh sl, [r5, #2] + beq _0233E598 + ldrsh r0, [r5] + ldrsh r1, [r5, #4] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov fp, r0 + ldrsh r0, [r5, #2] + ldrsh r1, [r5, #6] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov sl, r0 +_0233E598: + ldrb r0, [r5, #0x17] + cmp r0, #0 + beq _0233E624 + ldrb r0, [r5, #-0x16] + cmp r0, #0 + bne _0233E60C + ldrb r0, [r5, #-0x14] + cmp r0, #0 + ldreqsh r2, [r5, #-0x1e] + beq _0233E5D8 + ldrsh r0, [r5, #-0x1e] + ldrsh r1, [r5, #-0x1a] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov r2, r0 +_0233E5D8: + mov r0, #1 + str r0, [sp] + mov r0, #0x1e + mla r3, r7, r0, r4 + ldr r1, [sb, r6, lsl #2] + mov r0, fp + str r1, [sp, #4] + ldr r1, [r8, r7, lsl #2] + str r1, [sp, #8] + ldrsh r1, [r3, #2] + ldrsh r3, [r3, #-0x18] + sub r3, r3, #1 + bl CreateHallway +_0233E60C: + mov r0, #0 + strb r0, [r5, #0x17] + strb r0, [r5, #-6] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #-0x13] +_0233E624: + ldrb r0, [r5, #0x18] + cmp r0, #0 + beq _0233E6B8 + ldrb r0, [r5, #0x26] + cmp r0, #0 + bne _0233E6A0 + ldrb r0, [r5, #0x28] + cmp r0, #0 + ldreqsh r2, [r5, #0x1e] + beq _0233E664 + ldrsh r0, [r5, #0x1e] + ldrsh r1, [r5, #0x22] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov r2, r0 +_0233E664: + mov r1, #1 + str r1, [sp] + mov r0, fp + mov r1, #0x1e + ldr fp, [sb, r6, lsl #2] + mla r1, r7, r1, r4 + add r3, r8, r7, lsl #2 + str fp, [sp, #4] + ldr r3, [r3, #4] + sub r3, r3, #1 + str r3, [sp, #8] + ldrsh fp, [r1, #6] + ldrsh r3, [r1, #0x20] + sub r1, fp, #1 + bl CreateHallway +_0233E6A0: + mov r0, #0 + strb r0, [r5, #0x18] + strb r0, [r5, #0x35] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #0x29] +_0233E6B8: + ldrb r0, [r5, #0x19] + cmp r0, #0 + beq _0233E750 + ldrb r0, [r5, #-0x1ba] + cmp r0, #0 + bne _0233E738 + ldrb r0, [r5, #-0x1b8] + cmp r0, #0 + sub r0, r5, #0x100 + ldreqsh r3, [r0, #-0xc0] + beq _0233E6FC + ldrsh r1, [r0, #-0xbc] + ldrsh r2, [r0, #-0xc0] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233E6FC: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + mul r0, r7, r0 + ldr fp, [sb, r6, lsl #2] + add r1, r4, r0 + str fp, [sp, #4] + ldr fp, [r8, r7, lsl #2] + sub r2, r1, #0x100 + str fp, [sp, #8] + ldrsh r2, [r2, #-0xc2] + ldrsh r0, [r4, r0] + mov r1, sl + sub r2, r2, #1 + bl CreateHallway +_0233E738: + mov r0, #0 + strb r0, [r5, #0x19] + strb r0, [r5, #-0x1a8] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #-0x1b7] +_0233E750: + ldrb r0, [r5, #0x1a] + cmp r0, #0 + beq _0233E7EC + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + bne _0233E7D4 + ldrb r0, [r5, #0x1cc] + cmp r0, #0 + add r0, r5, #0x100 + ldreqsh r3, [r0, #0xc4] + beq _0233E794 + ldrsh r1, [r0, #0xc8] + ldrsh r2, [r0, #0xc4] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233E794: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + ldr r2, [sp, #0x2c] + mov r1, sl + ldr sl, [r2, #4] + mla r0, r7, r0, r4 + sub sl, sl, #1 + str sl, [sp, #4] + ldr sl, [r8, r7, lsl #2] + add r2, r0, #0x100 + str sl, [sp, #8] + ldrsh r0, [r0, #4] + ldrsh r2, [r2, #0xc2] + sub r0, r0, #1 + bl CreateHallway +_0233E7D4: + mov r0, #0 + strb r0, [r5, #0x1a] + strb r0, [r5, #0x1db] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #0x1cd] +_0233E7EC: + add r7, r7, #1 +_0233E7F0: + ldr r0, [sp, #0x14] + cmp r7, r0 + blt _0233E540 + add r6, r6, #1 +_0233E800: + ldr r0, [sp, #0x10] + cmp r6, r0 + blt _0233E524 + ldrb r0, [sp, #0x74] + cmp r0, #0 + bne _0233ED28 + mov r7, #0 + b _0233ED1C +_0233E820: + ldr r1, _0233ED30 ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r8, #0 + mla r0, r7, r1, r0 + str r0, [sp, #0x20] + ldr r0, [sp, #0x14] + sub r0, r0, #2 + str r0, [sp, #0x40] + ldr r0, [sp, #0x10] + sub r0, r0, #2 + str r0, [sp, #0x38] + b _0233ED0C +_0233E850: + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #5 + bge _0233ED08 + ldr r0, [sp, #0x20] + mov r1, #0x1e + mla r6, r8, r1, r0 + ldrb r0, [r6, #8] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0xb] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x12] + cmp r0, #0 + ldreqb r0, [r6, #9] + cmpeq r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0xa] + cmp r0, #0 + beq _0233ED08 + mov r0, #4 + bl DungeonRandInt + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233ED08 +_0233E8B8: ; jump table + b _0233E8C8 ; case 0 + b _0233E9DC ; case 1 + b _0233EAE4 ; case 2 + b _0233EBFC ; case 3 +_0233E8C8: + cmp r7, #1 + blt _0233ED08 + ldrb r0, [r6, #-0x1b7] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x1ba] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #-0x1b8] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x1b9] + cmp r0, #0 + ldreqb r0, [r6, #-0x1b0] + cmpeq r0, #0 + bne _0233ED08 + sub r1, r6, #0x100 + ldrsh r0, [r1, #-0xc2] + ldrsh fp, [r1, #-0xc0] + ldrsh r1, [r6, #2] + str r0, [sp, #0x28] + sub r0, r6, #0x100 + ldrsh sb, [r0, #-0xbc] + ldrsh r2, [r6, #6] + cmp fp, r1 + movge fp, r1 + cmp sb, r2 + ldrsh r0, [r6] + ldrsh sl, [r6, #4] + movle sb, r2 + bl GetTile + ldrb r0, [r0, #7] + ldr r5, [sp, #0x28] + and r0, r0, #0xff + str r0, [sp, #0x30] + b _0233E99C +_0233E958: + mov r4, fp + b _0233E990 +_0233E960: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x30] + strb r1, [r0, #7] +_0233E990: + cmp r4, sb + blt _0233E960 + add r5, r5, #1 +_0233E99C: + cmp r5, sl + blt _0233E958 + ldr r0, [sp, #0x28] + sub r1, r6, #0x100 + strh r0, [r1, #-0xc2] + strh sl, [r1, #-0xbe] + strh fp, [r1, #-0xc0] + strh sb, [r1, #-0xbc] + mov r0, #1 + strb r0, [r6, #0x12] + strb r0, [r6, #-0x1b0] + mov r0, #0 + strb r0, [r6, #0xb] + mov r0, #1 + strb r0, [r6, #0x11] + b _0233ED08 +_0233E9DC: + cmp r8, #1 + blt _0233ED08 + ldrb r0, [r6, #-0x13] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x16] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #-0x14] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x15] + cmp r0, #0 + ldreqb r0, [r6, #-0xc] + cmpeq r0, #0 + bne _0233ED08 + ldrsh r1, [r6, #-0x1c] + ldrsh r0, [r6] + ldrsh fp, [r6, #-0x1e] + str r1, [sp, #0x24] + ldrsh r1, [r6, #4] + ldrsh sb, [r6, #-0x1a] + cmp fp, r0 + movge fp, r0 + cmp sb, r1 + movle sb, r1 + ldrsh r1, [r6, #2] + ldrsh sl, [r6, #6] + bl GetTile + ldrb r0, [r0, #7] + mov r5, fp + and r0, r0, #0xff + str r0, [sp, #0x34] + b _0233EAA8 +_0233EA64: + ldr r4, [sp, #0x24] + b _0233EA9C +_0233EA6C: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x34] + strb r1, [r0, #7] +_0233EA9C: + cmp r4, sl + blt _0233EA6C + add r5, r5, #1 +_0233EAA8: + cmp r5, sb + blt _0233EA64 + strh fp, [r6, #-0x1e] + ldr r0, [sp, #0x24] + strh sb, [r6, #-0x1a] + strh r0, [r6, #-0x1c] + strh sl, [r6, #-0x18] + mov r0, #1 + strb r0, [r6, #0x12] + strb r0, [r6, #-0xc] + mov r0, #0 + strb r0, [r6, #0xb] + mov r0, #1 + strb r0, [r6, #0x11] + b _0233ED08 +_0233EAE4: + ldr r0, [sp, #0x38] + cmp r7, r0 + bgt _0233ED08 + ldrb r0, [r6, #0x1cd] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x1ca] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0x1cc] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x1cb] + cmp r0, #0 + ldreqb r0, [r6, #0x1d4] + cmpeq r0, #0 + bne _0233ED08 + add r0, r6, #0x100 + ldrsh sl, [r6] + ldrsh r0, [r0, #0xc4] + str r0, [sp, #0x1c] + ldrsh r1, [r6, #2] + mov r0, r0 + cmp r1, r0 + strlt r1, [sp, #0x1c] + add r0, r6, #0x100 + ldrsh fp, [r0, #0xc6] + ldrsh r0, [r0, #0xc8] + ldrsh sb, [r6, #6] + cmp sb, r0 + movle sb, r0 + mov r0, sl + bl GetTile + ldrb r0, [r0, #7] + mov r5, sl + and r0, r0, #0xff + str r0, [sp, #0x3c] + b _0233EBC0 +_0233EB7C: + ldr r4, [sp, #0x1c] + b _0233EBB4 +_0233EB84: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x3c] + strb r1, [r0, #7] +_0233EBB4: + cmp r4, sb + blt _0233EB84 + add r5, r5, #1 +_0233EBC0: + cmp r5, fp + blt _0233EB7C + strh sl, [r6] + strh fp, [r6, #4] + ldr r0, [sp, #0x1c] + strh r0, [r6, #2] + strh sb, [r6, #6] + mov r0, #1 + strb r0, [r6, #0x1d4] + strb r0, [r6, #0x12] + mov r0, #0 + strb r0, [r6, #0x1cd] + mov r0, #1 + strb r0, [r6, #0x1d3] + b _0233ED08 +_0233EBFC: + ldr r0, [sp, #0x40] + cmp r8, r0 + bgt _0233ED08 + ldrb r0, [r6, #0x29] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x26] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0x28] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x27] + cmp r0, #0 + ldreqb r0, [r6, #0x30] + cmpeq r0, #0 + bne _0233ED08 + ldrsh r0, [r6, #0x1e] + str r0, [sp, #0x18] + ldrsh r0, [r6] + ldr r1, [sp, #0x18] + cmp r0, r1 + strlt r0, [sp, #0x18] + ldrsh sl, [r6, #2] + ldrsh r1, [r6, #0x22] + ldrsh sb, [r6, #4] + ldrsh fp, [r6, #0x24] + cmp sb, r1 + movle sb, r1 + mov r1, sl + bl GetTile + ldrb r0, [r0, #7] + ldr r5, [sp, #0x18] + and r0, r0, #0xff + str r0, [sp, #0x44] + b _0233ECD0 +_0233EC8C: + mov r4, sl + b _0233ECC4 +_0233EC94: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x44] + strb r1, [r0, #7] +_0233ECC4: + cmp r4, fp + blt _0233EC94 + add r5, r5, #1 +_0233ECD0: + cmp r5, sb + blt _0233EC8C + ldr r0, [sp, #0x18] + strh r0, [r6] + strh sb, [r6, #4] + strh sl, [r6, #2] + strh fp, [r6, #6] + mov r0, #1 + strb r0, [r6, #0x30] + strb r0, [r6, #0x12] + mov r0, #0 + strb r0, [r6, #0x29] + mov r0, #1 + strb r0, [r6, #0x2f] +_0233ED08: + add r8, r8, #1 +_0233ED0C: + ldr r0, [sp, #0x14] + cmp r8, r0 + blt _0233E850 + add r7, r7, #1 +_0233ED1C: + ldr r0, [sp, #0x10] + cmp r7, r0 + blt _0233E820 +_0233ED28: + add sp, sp, #0x48 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233ED30: .word 0x000001C2 + arm_func_end CreateGridCellConnections + + arm_func_start GenerateRoomImperfections +GenerateRoomImperfections: ; 0x0233ED34 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x34 + str r0, [sp] + str r1, [sp, #4] + str r2, [sp, #8] + mov fp, #0 + b _0233F100 +_0233ED50: + ldr r1, _0233F114 ; =0x000001C2 + ldr r0, [sp] + mov sl, #0 + mla r0, fp, r1, r0 + str r0, [sp, #0xc] + mvn r0, #0 + str r0, [sp, #0x30] + b _0233F0F0 +_0233ED70: + ldr r0, [sp, #0xc] + mov r1, #0x1e + mla sb, sl, r1, r0 + ldrb r0, [sb, #8] + cmp r0, #0 + ldreqb r0, [sb, #0x11] + cmpeq r0, #0 + ldreqb r0, [sb, #0x12] + cmpeq r0, #0 + bne _0233F0EC + ldrb r0, [sb, #0xb] + cmp r0, #0 + ldrneb r0, [sb, #0xa] + cmpne r0, #0 + beq _0233F0EC + ldrb r0, [sb, #9] + cmp r0, #0 + ldreqb r0, [sb, #0x10] + cmpeq r0, #0 + bne _0233F0EC + ldrb r0, [sb, #0x1c] + cmp r0, #0 + beq _0233F0EC + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x3c + blt _0233F0EC + ldrsh r3, [sb, #4] + ldrsh r2, [sb] + ldrsh r1, [sb, #6] + ldrsh r0, [sb, #2] + sub r2, r3, r2 + sub r0, r1, r0 + add r1, r2, r0 + mov r0, r1, asr #1 + add r0, r1, r0, lsr #30 + movs r0, r0, asr #2 + str r0, [sp, #0x24] + moveq r0, #1 + streq r0, [sp, #0x24] + mov r0, #0 + str r0, [sp, #0x2c] + b _0233F0DC +_0233EE1C: + mov r4, #0 +_0233EE20: + mov r0, #4 + bl DungeonRandInt + str r0, [sp, #0x20] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233EE48 +_0233EE38: ; jump table + b _0233EE48 ; case 0 + b _0233EE70 ; case 1 + b _0233EE9C ; case 2 + b _0233EECC ; case 3 +_0233EE48: + cmp r4, #0 + movne r0, #1 + strne r0, [sp, #0x28] + movne r5, #0 + moveq r0, #0 + ldrsh r8, [sb] + ldrsh r7, [sb, #2] + streq r0, [sp, #0x28] + moveq r5, #1 + b _0233EEF4 +_0233EE70: + ldrsh r0, [sb, #4] + cmp r4, #0 + movne r5, #1 + sub r8, r0, #1 + movne r0, #0 + strne r0, [sp, #0x28] + ldreq r0, [sp, #0x30] + ldrsh r7, [sb, #2] + streq r0, [sp, #0x28] + moveq r5, #0 + b _0233EEF4 +_0233EE9C: + ldrsh r0, [sb, #6] + cmp r4, #0 + ldrsh r1, [sb, #4] + sub r7, r0, #1 + ldrne r0, [sp, #0x30] + movne r5, #0 + strne r0, [sp, #0x28] + moveq r0, #0 + sub r8, r1, #1 + streq r0, [sp, #0x28] + ldreq r5, [sp, #0x30] + b _0233EEF4 +_0233EECC: + ldrsh r0, [sb, #6] + cmp r4, #0 + ldrne r5, [sp, #0x30] + sub r7, r0, #1 + movne r0, #0 + strne r0, [sp, #0x28] + moveq r0, #1 + ldrsh r8, [sb] + streq r0, [sp, #0x28] + moveq r5, #0 +_0233EEF4: + mov r6, #0 + b _0233F0BC +_0233EEFC: + ldrsh r0, [sb] + cmp r8, r0 + blt _0233F0C4 + ldrsh r0, [sb, #4] + cmp r8, r0 + bge _0233F0C4 + ldrsh r0, [sb, #2] + cmp r7, r0 + blt _0233F0C4 + ldrsh r0, [sb, #6] + cmp r7, r0 + bge _0233F0C4 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233F0AC + mov r5, #0 + b _0233F014 +_0233EF50: + ldr r0, _0233F118 ; =DIRECTIONS_XY + mov r1, r5, lsl #2 + ldrsh r2, [r0, r1] + add r0, r0, r5, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + str r0, [sp, #0x1c] + mov r0, #0 + str r0, [sp, #0x10] + add r0, r7, r1 + str r0, [sp, #0x18] + ldr r6, [sp, #0x30] + b _0233EFFC +_0233EF84: + ldr r0, [sp, #0x30] + str r0, [sp, #0x14] + b _0233EFE0 +_0233EF90: + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x14] + add r0, r1, r0 + ldr r1, [sp, #0x18] + add r1, r1, r6 + bl GetTile + ldrh r1, [r0] + and r1, r1, #3 + cmp r1, #1 + bne _0233EFD4 + ldrb r0, [r0, #7] + cmp r0, #0xff + moveq r0, #1 + streq r0, [sp, #0x10] + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233EFEC +_0233EFD4: + ldr r0, [sp, #0x14] + add r0, r0, #1 + str r0, [sp, #0x14] +_0233EFE0: + ldr r0, [sp, #0x14] + cmp r0, #1 + ble _0233EF90 +_0233EFEC: + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233F004 + add r6, r6, #1 +_0233EFFC: + cmp r6, #1 + ble _0233EF84 +_0233F004: + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233F01C + add r5, r5, #1 +_0233F014: + cmp r5, #8 + blt _0233EF50 +_0233F01C: + cmp r5, #8 + bne _0233F0C4 + ldr r1, _0233F11C ; =CORNER_CARDINAL_NEIGHBOR_IS_OPEN + ldr r0, [sp, #0x20] + mov r5, #0 + add r6, r1, r0, lsl #3 + b _0233F080 +_0233F038: + ldr r0, _0233F118 ; =DIRECTIONS_XY + mov r1, r5, lsl #2 + ldrsh r2, [r0, r1] + add r0, r0, r5, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #1 + movne r0, #0 + and r1, r0, #0xff + ldrb r0, [r5, r6] + cmp r1, r0 + bne _0233F088 + add r5, r5, #2 +_0233F080: + cmp r5, #8 + blt _0233F038 +_0233F088: + cmp r5, #8 + bne _0233F0C4 + mov r0, r8 + mov r1, r7 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + b _0233F0C4 +_0233F0AC: + ldr r0, [sp, #0x28] + add r7, r7, r5 + add r8, r8, r0 + add r6, r6, #1 +_0233F0BC: + cmp r6, #0xa + blt _0233EEFC +_0233F0C4: + add r4, r4, #1 + cmp r4, #2 + blt _0233EE20 + ldr r0, [sp, #0x2c] + add r0, r0, #1 + str r0, [sp, #0x2c] +_0233F0DC: + ldr r1, [sp, #0x2c] + ldr r0, [sp, #0x24] + cmp r1, r0 + blt _0233EE1C +_0233F0EC: + add sl, sl, #1 +_0233F0F0: + ldr r0, [sp, #8] + cmp sl, r0 + blt _0233ED70 + add fp, fp, #1 +_0233F100: + ldr r0, [sp, #4] + cmp fp, r0 + blt _0233ED50 + add sp, sp, #0x34 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233F114: .word 0x000001C2 +_0233F118: .word DIRECTIONS_XY +_0233F11C: .word CORNER_CARDINAL_NEIGHBOR_IS_OPEN + arm_func_end GenerateRoomImperfections + + arm_func_start CreateHallway +CreateHallway: ; 0x0233F120 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldrb r6, [sp, #0x28] + mov sl, r0 + ldr r0, [sp, #0x30] + mov sb, r1 + cmp r6, #0 + mov r8, r2 + mov r7, r3 + mov r4, sl + mov r5, sb + ldr fp, [sp, #0x2c] + str r0, [sp, #0x30] + mov r6, #0 + beq _0233F328 + b _0233F1C4 +_0233F15C: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F1AC + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F1B4 +_0233F1AC: + cmp sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F1B4: + ldr r0, [sp, #0x30] + cmp sb, r0 + addlt sb, sb, #1 + subge sb, sb, #1 +_0233F1C4: + ldr r0, [sp, #0x30] + cmp sb, r0 + bne _0233F15C + mov r6, #0 + b _0233F240 +_0233F1D8: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F228 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F234 +_0233F228: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F234: + cmp sl, r8 + addlt sl, sl, #1 + subge sl, sl, #1 +_0233F240: + cmp sl, r8 + bne _0233F1D8 + mov r6, #0 + b _0233F2B8 +_0233F250: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F2A0 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F2AC +_0233F2A0: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F2AC: + cmp sb, r7 + addlt sb, sb, #1 + subge sb, sb, #1 +_0233F2B8: + cmp sb, r7 + bne _0233F250 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F2C4: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F314 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F31C +_0233F314: + cmp sl, r4 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F31C: + cmp sl, fp + addlt sl, sl, #1 + subge sl, sl, #1 +_0233F328: + cmp sl, fp + bne _0233F2C4 + mov r6, #0 + b _0233F3A0 +_0233F338: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F388 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F394 +_0233F388: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F394: + cmp sb, r7 + addlt sb, sb, #1 + subge sb, sb, #1 +_0233F3A0: + cmp sb, r7 + bne _0233F338 + mov r6, #0 + b _0233F418 +_0233F3B0: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F400 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F40C +_0233F400: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F40C: + cmp sl, r8 + addlt sl, sl, #1 + subge sl, sl, #1 +_0233F418: + cmp sl, r8 + bne _0233F3B0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end CreateHallway + + arm_func_start EnsureConnectedGrid +EnsureConnectedGrid: ; 0x0233F424 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + str r0, [sp, #0xc] + mov r7, r1 + mov fp, r2 + mov r6, r3 + ldr r5, [sp, #0x50] + mov r8, #0 + b _0233F818 +_0233F448: + ldr r1, _0233F8FC ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r4, #0 + mla sb, r8, r1, r0 + sub r0, fp, #1 + str r0, [sp, #0x20] + add r0, r6, r8, lsl #2 + str r0, [sp, #0x28] + sub r0, r7, #1 + str r0, [sp, #0x24] + b _0233F80C +_0233F474: + mov r0, #0x1e + mla sl, r4, r0, sb + ldrb r0, [sl, #8] + cmp r0, #0 + ldreqb r0, [sl, #0x11] + cmpeq r0, #0 + ldreqb r0, [sl, #0xb] + cmpeq r0, #0 + bne _0233F808 + ldrb r0, [sl, #0xa] + cmp r0, #0 + beq _0233F7CC + ldrb r0, [sl, #9] + cmp r0, #0 + bne _0233F7CC + ldrsh r0, [sl] + ldrsh r1, [sl, #4] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x1c] + ldrsh r0, [sl, #2] + ldrsh r1, [sl, #6] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x18] + cmp r4, #0 + ble _0233F590 + ldrb r0, [sl, #-0x16] + cmp r0, #0 + ldreqb r0, [sl, #-0xc] + cmpeq r0, #0 + bne _0233F590 + ldrb r0, [sl, #-0x13] + cmp r0, #0 + beq _0233F590 + ldrb r0, [sl, #-0x14] + cmp r0, #0 + ldrsh r0, [sl, #-0x1e] + streq r0, [sp, #0x14] + beq _0233F544 + ldrsh r1, [sl, #-0x1a] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x14] + ldrsh r0, [sl, #-0x1c] + ldrsh r1, [sl, #-0x18] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange +_0233F544: + mov r1, #1 + str r1, [sp] + mov r1, #0x1e + mla sl, r4, r1, sb + ldr r1, [r6, r8, lsl #2] + ldr r0, [sp, #0x1c] + str r1, [sp, #4] + ldr r1, [r5, r4, lsl #2] + ldr r2, [sp, #0x14] + str r1, [sp, #8] + ldrsh r3, [sl, #-0x18] + ldrsh r1, [sl, #2] + sub r3, r3, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x13] + strb r0, [sl, #-0xa] + b _0233F808 +_0233F590: + ldr r0, [sp, #0x20] + cmp r4, r0 + bge _0233F64C + ldrb r0, [sl, #0x26] + cmp r0, #0 + ldreqb r0, [sl, #0x30] + cmpeq r0, #0 + bne _0233F64C + ldrb r0, [sl, #0x29] + cmp r0, #0 + beq _0233F64C + ldrb r0, [sl, #0x28] + cmp r0, #0 + ldrsh r0, [sl, #0x1e] + streq r0, [sp, #0x10] + beq _0233F5F8 + ldrsh r1, [sl, #0x22] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x10] + ldrsh r0, [sl, #0x20] + ldrsh r1, [sl, #0x24] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange +_0233F5F8: + mov r1, #1 + str r1, [sp] + mov r1, #0x1e + mla sl, r4, r1, sb + ldr r3, [r6, r8, lsl #2] + add r1, r5, r4, lsl #2 + str r3, [sp, #4] + ldr r1, [r1, #4] + ldr r0, [sp, #0x1c] + sub r1, r1, #1 + str r1, [sp, #8] + ldrsh r1, [sl, #6] + ldrsh r3, [sl, #0x20] + ldr r2, [sp, #0x10] + sub r1, r1, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x14] + strb r0, [sl, #0x31] + b _0233F808 +_0233F64C: + cmp r8, #0 + ble _0233F708 + ldrb r0, [sl, #-0x1ba] + cmp r0, #0 + ldreqb r0, [sl, #-0x1b0] + cmpeq r0, #0 + bne _0233F708 + ldrb r0, [sl, #-0x1b7] + cmp r0, #0 + beq _0233F708 + ldrb r0, [sl, #-0x1b8] + cmp r0, #0 + sub r0, sl, #0x100 + ldreqsh r3, [r0, #-0xc0] + beq _0233F6B8 + ldrsh r1, [r0, #-0xbe] + ldrsh r2, [r0, #-0xc2] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + sub r0, sl, #0x100 + ldrsh r1, [r0, #-0xbc] + ldrsh r2, [r0, #-0xc0] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233F6B8: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + mul r0, r4, r0 + ldr ip, [r6, r8, lsl #2] + add sl, sb, r0 + str ip, [sp, #4] + ldr ip, [r5, r4, lsl #2] + sub r2, sl, #0x100 + str ip, [sp, #8] + ldrsh r2, [r2, #-0xc2] + ldrsh r0, [sb, r0] + ldr r1, [sp, #0x18] + sub r2, r2, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x15] + strb r0, [sl, #-0x1ac] + b _0233F808 +_0233F708: + ldr r0, [sp, #0x24] + cmp r8, r0 + bge _0233F808 + ldrb r0, [sl, #0x1ca] + cmp r0, #0 + ldreqb r0, [sl, #0x1d4] + cmpeq r0, #0 + bne _0233F808 + ldrb r0, [sl, #0x1cd] + cmp r0, #0 + beq _0233F808 + ldrb r0, [sl, #0x1cc] + cmp r0, #0 + add r0, sl, #0x100 + ldreqsh r3, [r0, #0xc4] + beq _0233F778 + ldrsh r1, [r0, #0xc6] + ldrsh r2, [r0, #0xc2] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + add r0, sl, #0x100 + ldrsh r1, [r0, #0xc8] + ldrsh r2, [r0, #0xc4] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233F778: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + mla sl, r4, r0, sb + ldr r0, [sp, #0x28] + ldr r1, [sp, #0x18] + ldr r2, [r0, #4] + add r0, sl, #0x100 + sub r2, r2, #1 + str r2, [sp, #4] + ldr r2, [r5, r4, lsl #2] + str r2, [sp, #8] + ldrsh r2, [r0, #0xc2] + ldrsh r0, [sl, #4] + sub r0, r0, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x16] + strb r0, [sl, #0x1d7] + b _0233F808 +_0233F7CC: + ldrsh r0, [sl] + ldrsh r1, [sl, #2] + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #1 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #2 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] +_0233F808: + add r4, r4, #1 +_0233F80C: + cmp r4, fp + blt _0233F474 + add r8, r8, #1 +_0233F818: + cmp r8, r7 + blt _0233F448 + mov r8, #0 + b _0233F8EC +_0233F828: + ldr r1, _0233F8FC ; =0x000001C2 + ldr r0, [sp, #0xc] + mov sb, #0 + mla sl, r8, r1, r0 + b _0233F8E0 +_0233F83C: + mov r0, #0x1e + mla r5, sb, r0, sl + ldrb r0, [r5, #8] + cmp r0, #0 + ldreqb r0, [r5, #0x11] + cmpeq r0, #0 + ldreqb r0, [r5, #0xb] + cmpeq r0, #0 + ldreqb r0, [r5, #0xf] + cmpeq r0, #0 + bne _0233F8DC + ldrsh r6, [r5] + b _0233F8D0 +_0233F870: + ldrsh r4, [r5, #2] + b _0233F8C0 +_0233F878: + mov r0, r6 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #2 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #1 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] + mov r1, #0xff + strb r1, [r0, #7] +_0233F8C0: + ldrsh r0, [r5, #6] + cmp r4, r0 + blt _0233F878 + add r6, r6, #1 +_0233F8D0: + ldrsh r0, [r5, #4] + cmp r6, r0 + blt _0233F870 +_0233F8DC: + add sb, sb, #1 +_0233F8E0: + cmp sb, fp + blt _0233F83C + add r8, r8, #1 +_0233F8EC: + cmp r8, r7 + blt _0233F828 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233F8FC: .word 0x000001C2 + arm_func_end EnsureConnectedGrid + + arm_func_start SetTerrainObstacleChecked +SetTerrainObstacleChecked: ; 0x0233F900 + ldrh r3, [r0] + cmp r1, #0 + bic r1, r3, #3 + strh r1, [r0] + bxeq lr + ldrb r1, [r0, #7] + cmp r1, r2 + bxne lr + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + bx lr + arm_func_end SetTerrainObstacleChecked + + arm_func_start FinalizeJunctions +FinalizeJunctions: ; 0x0233F93C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r4, #0 +_0233F944: + sub r5, r4, #1 + mov r6, #0 + mov r7, #0xff +_0233F950: + mov r0, r4 + mov r1, r6 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233FAFC + mov r0, r4 + mov r1, r6 + bl GetTile + ldrb r0, [r0, #7] + cmp r0, #0xff + bne _0233FAD4 + cmp r4, #0 + ble _0233F9D4 + mov r0, r5 + mov r1, r6 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233F9D4 + ldrh r1, [r0] + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233F9D4 + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233F9D4: + cmp r6, #0 + ble _0233FA28 + mov r0, r4 + sub r1, r6, #1 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233FA28 + ldrh r1, [r0] + orr r1, r1, #8 + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233FA28 + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233FA28: + cmp r6, #0x1f + bge _0233FA7C + mov r0, r4 + add r1, r6, #1 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233FA7C + ldrh r1, [r0] + orr r1, r1, #8 + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233FA7C + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233FA7C: + cmp r4, #0x37 + bge _0233FAFC + mov r1, r6 + add r0, r4, #1 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233FAFC + ldrh r1, [r0] + orr r1, r1, #8 + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233FAFC + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233FAFC +_0233FAD4: + mov r0, r4 + mov r1, r6 + bl GetTile + ldrb r0, [r0, #7] + cmp r0, #0xfe + bne _0233FAFC + mov r0, r4 + mov r1, r6 + bl GetTileSafe + strb r7, [r0, #7] +_0233FAFC: + add r6, r6, #1 + cmp r6, #0x20 + blt _0233F950 + add r4, r4, #1 + cmp r4, #0x38 + blt _0233F944 + bl ov29_0233FB1C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end FinalizeJunctions + + arm_func_start ov29_0233FB1C +ov29_0233FB1C: ; 0x0233FB1C +#ifdef JAPAN +#define OV29_0233FB1C_OFFSET 0x5C +#else +#define OV29_0233FB1C_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _0233FBE4 ; =DUNGEON_PTR + mov r1, #0 + ldr r6, [r0] + mov r7, r1 +_0233FB30: + add r0, r6, r1, lsl #1 +#ifdef JAPAN + add r0, r0, #0xf100 +#else + add r0, r0, #0xf200 +#endif + add r1, r1, #1 + strh r7, [r0, #0x68 + OV29_0233FB1C_OFFSET] + cmp r1, #0x20 + blt _0233FB30 +_0233FB48: + mov r0, r7, lsl #0x10 + mov r5, #0 + mov r4, r0, asr #0x10 +_0233FB54: + mov r0, r7 + mov r1, r5 + bl GetTile + ldrh r0, [r0] + tst r0, #8 + beq _0233FBC8 + mov r0, r7 + mov r1, r5 + bl GetTile + ldrb r2, [r0, #7] + cmp r2, #0 + blt _0233FBC8 + cmp r2, #0x20 + addlt r0, r6, r2, lsl #1 +#ifdef JAPAN + addlt r1, r0, #0xf100 +#else + addlt r1, r0, #0xf200 +#endif + ldrltsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] + cmplt r0, #0x20 + bge _0233FBC8 + add r2, r6, r2, lsl #7 + add r0, r2, r0, lsl #2 + add r0, r0, #0xf200 +#ifdef JAPAN + strh r4, [r0, #4] +#else + strh r4, [r0, #0xa8] +#endif + ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] + add r0, r2, r0, lsl #2 + add r0, r0, #0xf200 +#ifdef JAPAN + strh r5, [r0, #6] +#else + strh r5, [r0, #0xaa] +#endif + ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] + add r0, r0, #1 + strh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] +_0233FBC8: + add r5, r5, #1 + cmp r5, #0x20 + blt _0233FB54 + add r7, r7, #1 + cmp r7, #0x38 + blt _0233FB48 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233FBE4: .word DUNGEON_PTR + arm_func_end ov29_0233FB1C + + arm_func_start GenerateKecleonShop +GenerateKecleonShop: ; 0x0233FBE8 +#ifdef JAPAN +#define GENERATE_KECLEON_SHOP_OFFSET -0xA4 +#else +#define GENERATE_KECLEON_SHOP_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x44 + ldr r5, _0233FF8C ; =DUNGEON_PTR + ldr r4, _0233FF90 ; =FLOOR_GENERATION_STATUS + mvn r7, #0 + ldr r6, [r5] + strh r7, [r4, #0x20] + strh r7, [r4, #0x22] + ldrb r4, [r4, #1] + mov sl, r0 + str r1, [sp] + str r2, [sp, #4] + mov r5, r3 + cmp r4, #0 + bne _0233FF84 + bl GetFloorType + cmp r0, #2 + cmpne r5, #0 + beq _0233FF84 + mov r0, #0x64 + bl DungeonRandInt + cmp r5, r0 + ble _0233FF84 + mov r4, #0 + add r2, sp, #0x26 + add r1, sp, #8 +_0233FC50: + mov r0, r4, lsl #0x10 + mov r3, r4, lsl #1 + mov r0, r0, asr #0x10 + add r4, r4, #1 + strh r0, [r2, r3] + strh r0, [r1, r3] + cmp r4, #0xf + blt _0233FC50 + mov r7, #0xf + mov r8, #0 + mov r5, r7 + add r4, sp, #0x26 +_0233FC80: + mov r0, r7 + bl DungeonRandInt + mov sb, r0 + mov r0, r5 + bl DungeonRandInt + mov r3, sb, lsl #1 + mov r1, r0, lsl #1 + add r8, r8, #1 + ldrsh r2, [r4, r3] + ldrsh r0, [r4, r1] + cmp r8, #0xc8 + strh r0, [r4, r3] + strh r2, [r4, r1] + blt _0233FC80 + mov r7, #0xf + mov r8, #0 + mov r5, r7 + add r4, sp, #8 +_0233FCC8: + mov r0, r7 + bl DungeonRandInt + mov sb, r0 + mov r0, r5 + bl DungeonRandInt + mov r3, sb, lsl #1 + mov r1, r0, lsl #1 + add r8, r8, #1 + ldrsh r2, [r4, r3] + ldrsh r0, [r4, r1] + cmp r8, #0xc8 + strh r0, [r4, r3] + strh r2, [r4, r1] + blt _0233FCC8 + mov r4, #0 + b _0233FF7C +_0233FD08: + add r0, sp, #0x26 + mov r1, r4, lsl #1 + ldrsh r1, [r0, r1] + ldr r0, [sp] + cmp r1, r0 + bge _0233FF78 + ldr r0, _0233FF94 ; =0x000001C2 + mov r5, #0 + mul fp, r1, r0 + add sb, sl, fp + b _0233FF70 +_0233FD34: + mov r1, r5, lsl #1 + add r0, sp, #8 + ldrsh r1, [r0, r1] + ldr r0, [sp, #4] + cmp r1, r0 + bge _0233FF6C + mov r0, #0x1e + mul r7, r1, r0 + add r8, sb, r7 + ldrb r0, [r8, #8] + cmp r0, #0 + ldreqb r0, [r8, #0x11] + cmpeq r0, #0 + ldreqb r0, [r8, #0x12] + cmpeq r0, #0 + bne _0233FF6C + ldrb r0, [r8, #0xb] + cmp r0, #0 + ldrneb r0, [r8, #0xa] + cmpne r0, #0 + beq _0233FF6C + ldrb r0, [r8, #9] + cmp r0, #0 + ldreqb r0, [r8, #0x10] + cmpeq r0, #0 + ldreqb r0, [r8, #0x1d] + cmpeq r0, #0 + bne _0233FF6C + ldrsh r1, [r8, #4] + ldrsh r0, [r8] + sub r0, r1, r0 + bl abs + cmp r0, #5 + blt _0233FF6C + ldrsh r1, [r8, #6] + ldrsh r0, [r8, #2] + sub r0, r1, r0 + bl abs + cmp r0, #4 + blt _0233FF6C + ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS + add r1, sl, fp + mov r3, #1 + strb r3, [r0, #3] + add r2, r1, r7 + strb r3, [r2, #0xc] + ldrsh r1, [sb, r7] + add r1, r1, #1 + str r1, [r0, #0x30] + ldrsh r1, [r2, #4] + sub r1, r1, #1 + str r1, [r0, #0x38] + ldrsh r1, [r2, #2] + add r3, r1, #1 + str r3, [r0, #0x34] + ldrsh r1, [r2, #6] + sub r2, r1, #1 + sub r1, r2, r3 + cmp r1, #3 + str r2, [r0, #0x3c] + addlt r1, r2, #1 + strlt r1, [r0, #0x3c] + ldr r1, _0233FF98 ; =0x0000270F + add r0, r6, #0xc000 + str r1, [r0, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] + str r1, [r0, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] + rsb r2, r1, #0 + str r2, [r0, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] + ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS + str r2, [r0, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] + ldr r4, [r1, #0x30] + b _0233FED8 +_0233FE54: + ldr sl, _0233FF90 ; =FLOOR_GENERATION_STATUS + add r8, r6, #0xc000 + ldr r5, [sl, #0x34] + b _0233FEC8 +_0233FE64: + mov r0, r4 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + orr r1, r1, #0x20 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #8 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #1 + strh r1, [r0, #2] + ldr r0, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r4 + strgt r4, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] + ldr r0, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r5 + strgt r5, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] + ldr r0, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r4 + strlt r4, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] + ldr r0, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r5 + strlt r5, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] + add r5, r5, #1 +_0233FEC8: + ldr r0, [sl, #0x3c] + cmp r5, r0 + blt _0233FE64 + add r4, r4, #1 +_0233FED8: + ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x38] + cmp r4, r0 + blt _0233FE54 + add r4, sb, r7 + ldrsh r5, [sb, r7] + b _0233FF28 +_0233FEF4: + ldrsh r6, [r4, #2] + b _0233FF18 +_0233FEFC: + mov r0, r5 + mov r1, r6 + bl GetTileSafe + ldrh r1, [r0, #2] + add r6, r6, #1 + orr r1, r1, #0x10 + strh r1, [r0, #2] +_0233FF18: + ldrsh r0, [r4, #6] + cmp r6, r0 + blt _0233FEFC + add r5, r5, #1 +_0233FF28: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233FEF4 + ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS + ldr r2, [r1, #0x30] + ldr r0, [r1, #0x38] + add r0, r2, r0 + add r0, r0, r0, lsr #31 + mov r0, r0, asr #1 + strh r0, [r1, #0x20] + ldr r2, [r1, #0x34] + ldr r0, [r1, #0x3c] + add r0, r2, r0 + add r0, r0, r0, lsr #31 + mov r0, r0, asr #1 + strh r0, [r1, #0x22] + b _0233FF84 +_0233FF6C: + add r5, r5, #1 +_0233FF70: + cmp r5, #0xf + blt _0233FD34 +_0233FF78: + add r4, r4, #1 +_0233FF7C: + cmp r4, #0xf + blt _0233FD08 +_0233FF84: + add sp, sp, #0x44 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233FF8C: .word DUNGEON_PTR +_0233FF90: .word FLOOR_GENERATION_STATUS +_0233FF94: .word 0x000001C2 +_0233FF98: .word 0x0000270F + arm_func_end GenerateKecleonShop + + arm_func_start GenerateMonsterHouse +GenerateMonsterHouse: ; 0x0233FF9C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x100 + ldr r4, _02340218 ; =DUNGEON_PTR + movs r5, r3 + mov sl, r0 + mov sb, r1 + mov r8, r2 + ldr r6, [r4] + beq _02340210 + mov r0, #0x64 + bl DungeonRandInt + cmp r5, r0 + ble _02340210 + ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #3] + cmp r0, #0 + bne _02340210 + bl IsOutlawMonsterHouseFloor + cmp r0, #0 + bne _0233FFF8 + bl IsDestinationFloorWithMonster + cmp r0, #0 + bne _02340210 +_0233FFF8: + bl GetFloorType + cmp r0, #0 + bne _02340210 + mov r5, #0 + mov r2, r5 + mov r1, r5 + b _02340088 +_02340014: + ldr r0, _02340220 ; =0x000001C2 + mov r3, r1 + mla r4, r2, r0, sl + mov r7, #0x1e + b _0234007C +_02340028: + mla r0, r3, r7, r4 + ldrb fp, [r0, #8] + cmp fp, #0 + ldreqb fp, [r0, #0x11] + cmpeq fp, #0 + bne _02340078 + ldrb fp, [r0, #0xb] + cmp fp, #0 + ldrneb fp, [r0, #0xa] + cmpne fp, #0 + beq _02340078 + ldrb fp, [r0, #0xc] + cmp fp, #0 + ldreqb fp, [r0, #0xf] + cmpeq fp, #0 + ldreqb fp, [r0, #0x10] + cmpeq fp, #0 + ldreqb r0, [r0, #9] + cmpeq r0, #0 + addeq r5, r5, #1 +_02340078: + add r3, r3, #1 +_0234007C: + cmp r3, r8 + blt _02340028 + add r2, r2, #1 +_02340088: + cmp r2, sb + blt _02340014 + cmp r5, #0 + beq _02340210 + mov r1, #0 + mov r7, r1 + add r0, sp, #0 +_023400A4: + strb r7, [r0, r1] + add r1, r1, #1 + cmp r1, #0x100 + blt _023400A4 + mov r0, #1 + strb r0, [sp] + add fp, sp, #0 +_023400C0: + mov r0, r5 + bl DungeonRandInt + mov r4, r0 + mov r0, r5 + bl DungeonRandInt + add r7, r7, #1 + ldrb r2, [fp, r4] + ldrb r1, [fp, r0] + cmp r7, #0x40 + strb r1, [fp, r4] + strb r2, [fp, r0] + blt _023400C0 + mov r7, #0 + mov r4, r7 + add fp, sp, #0 + b _02340208 +_02340100: + ldr r0, _02340220 ; =0x000001C2 + mov r5, #0 + mul r3, r4, r0 + add r2, sl, r3 + mov lr, #0x1e + b _023401FC +_02340118: + mul r1, r5, lr + add r0, r2, r1 + ldrb ip, [r0, #8] + cmp ip, #0 + ldreqb ip, [r0, #0x11] + cmpeq ip, #0 + bne _023401F8 + ldrb ip, [r0, #0xb] + cmp ip, #0 + ldrneb ip, [r0, #0xa] + cmpne ip, #0 + beq _023401F8 + ldrb ip, [r0, #0xc] + cmp ip, #0 + ldreqb ip, [r0, #0xf] + cmpeq ip, #0 + ldreqb ip, [r0, #0x10] + cmpeq ip, #0 + ldreqb r0, [r0, #9] + cmpeq r0, #0 + bne _023401F8 + ldrb r0, [fp, r7] + cmp r0, #0 + beq _023401F4 + ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS + add r2, sl, r3 + mov r3, #1 + strb r3, [r0, #1] + add r7, r2, r1 + strb r3, [r7, #0xe] + ldrsh r5, [r2, r1] + add r6, r6, #0x4000 + b _023401E4 +_0234019C: + ldrsh r4, [r7, #2] + b _023401D4 +_023401A4: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + orr r2, r2, #0x40 + strh r2, [r0] + mov r0, r5 + bl GetTile + ldrb r0, [r0, #7] + add r4, r4, #1 +#ifdef JAPAN + strb r0, [r6, #0x25] +#else + strb r0, [r6, #0xc9] +#endif +_023401D4: + ldrsh r0, [r7, #6] + cmp r4, r0 + blt _023401A4 + add r5, r5, #1 +_023401E4: + ldrsh r0, [r7, #4] + cmp r5, r0 + blt _0234019C + b _02340210 +_023401F4: + add r7, r7, #1 +_023401F8: + add r5, r5, #1 +_023401FC: + cmp r5, r8 + blt _02340118 + add r4, r4, #1 +_02340208: + cmp r4, sb + blt _02340100 +_02340210: + add sp, sp, #0x100 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02340218: .word DUNGEON_PTR +_0234021C: .word FLOOR_GENERATION_STATUS +_02340220: .word 0x000001C2 + arm_func_end GenerateMonsterHouse + + arm_func_start GenerateMazeRoom +GenerateMazeRoom: ; 0x02340224 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x100 + ldr r7, _02340450 ; =DUNGEON_PTR + movs r8, r3 + mov r6, r0 + mov r5, r1 + mov r4, r2 + ldr r7, [r7] + beq _02340448 + mov r0, #0x64 + bl DungeonRandInt + cmp r8, r0 + ble _02340448 + add r0, r7, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x3a] +#else + ldrsh r0, [r0, #0xde] +#endif + cmp r0, #0 + bge _02340448 + mov sb, #0 + mov r1, sb + b _02340310 +_02340274: + ldr r0, _02340454 ; =0x000001C2 + mov r2, #0 + mla r3, r1, r0, r6 + mov r7, #0x1e + b _02340304 +_02340288: + mla r0, r2, r7, r3 + ldrb r8, [r0, #8] + cmp r8, #0 + ldreqb r8, [r0, #0x11] + cmpeq r8, #0 + bne _02340300 + ldrb r8, [r0, #0xb] + cmp r8, #0 + ldrneb r8, [r0, #0xa] + cmpne r8, #0 + beq _02340300 + ldrb r8, [r0, #0xc] + cmp r8, #0 + ldreqb r8, [r0, #0xf] + cmpeq r8, #0 + ldreqb r8, [r0, #0xe] + cmpeq r8, #0 + ldreqb r8, [r0, #9] + cmpeq r8, #0 + bne _02340300 + ldrsh sl, [r0, #4] + ldrsh r8, [r0] + sub r8, sl, r8 + tst r8, #1 + beq _02340300 + ldrsh r8, [r0, #6] + ldrsh r0, [r0, #2] + sub r0, r8, r0 + tst r0, #1 + addne sb, sb, #1 +_02340300: + add r2, r2, #1 +_02340304: + cmp r2, r4 + blt _02340288 + add r1, r1, #1 +_02340310: + cmp r1, r5 + blt _02340274 + cmp sb, #0 + beq _02340448 + mov r1, #0 + mov sl, r1 + add r0, sp, #0 +_0234032C: + strb sl, [r0, r1] + add r1, r1, #1 + cmp r1, #0x100 + blt _0234032C + mov r0, #1 + strb r0, [sp] + add r7, sp, #0 +_02340348: + mov r0, sb + bl DungeonRandInt + mov r8, r0 + mov r0, sb + bl DungeonRandInt + add sl, sl, #1 + ldrb r2, [r7, r8] + ldrb r1, [r7, r0] + cmp sl, #0x40 + strb r1, [r7, r8] + strb r2, [r7, r0] + blt _02340348 + mov r7, #0 + mov r2, r7 + b _02340440 +_02340384: + ldr r0, _02340454 ; =0x000001C2 + mov r3, #0 + mla r1, r2, r0, r6 + add sl, sp, #0 + mov r8, #0x1e + b _02340434 +_0234039C: + mla r0, r3, r8, r1 + ldrb sb, [r0, #8] + cmp sb, #0 + ldreqb sb, [r0, #0x11] + cmpeq sb, #0 + bne _02340430 + ldrb sb, [r0, #0xb] + cmp sb, #0 + ldrneb sb, [r0, #0xa] + cmpne sb, #0 + beq _02340430 + ldrb sb, [r0, #0xc] + cmp sb, #0 + ldreqb sb, [r0, #0xf] + cmpeq sb, #0 + ldreqb sb, [r0, #0xe] + cmpeq sb, #0 + ldreqb sb, [r0, #9] + cmpeq sb, #0 + bne _02340430 + ldrsh ip, [r0, #4] + ldrsh sb, [r0] + sub sb, ip, sb + tst sb, #1 + beq _02340430 + ldrsh ip, [r0, #6] + ldrsh sb, [r0, #2] + sub sb, ip, sb + tst sb, #1 + beq _02340430 + ldrb sb, [sl, r7] + cmp sb, #0 + beq _0234042C + mov r1, #0 + bl GenerateMaze + b _02340448 +_0234042C: + add r7, r7, #1 +_02340430: + add r3, r3, #1 +_02340434: + cmp r3, r4 + blt _0234039C + add r2, r2, #1 +_02340440: + cmp r2, r5 + blt _02340384 +_02340448: + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02340450: .word DUNGEON_PTR +_02340454: .word 0x000001C2 + arm_func_end GenerateMazeRoom + + arm_func_start GenerateMaze +GenerateMaze: ; 0x02340458 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x10 + ldr r2, _023406D0 ; =FLOOR_GENERATION_STATUS + mov r3, #1 + mov r5, r0 + strb r3, [r2, #7] + strb r3, [r5, #0x10] + mov r4, r1 + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + bl GetTile + ldrsh r1, [r5] + ldrb r7, [r0, #7] + add r6, r1, #1 + b _023404DC +_02340494: + ldrsh r1, [r5, #2] + mov r0, r6 + sub r1, r1, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _023404D8 + ldrsh r3, [r5, #2] + ldrsh r2, [r5, #4] + mov r0, r6 + sub r1, r3, #1 + str r2, [sp] + ldrsh r2, [r5, #6] + stmib sp, {r2, r4, r7} + ldrsh r2, [r5] + bl GenerateMazeLine +_023404D8: + add r6, r6, #2 +_023404DC: + ldrsh r0, [r5, #4] + sub r0, r0, #1 + cmp r6, r0 + blt _02340494 + ldrsh r0, [r5, #2] + add r6, r0, #1 + b _02340538 +_023404F8: + ldrsh r0, [r5, #4] + mov r1, r6 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _02340534 + ldrsh r0, [r5, #4] + mov r1, r6 + str r0, [sp] + ldrsh r2, [r5, #6] + stmib sp, {r2, r4, r7} + ldrsh r2, [r5] + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_02340534: + add r6, r6, #2 +_02340538: + ldrsh r0, [r5, #6] + sub r0, r0, #1 + cmp r6, r0 + blt _023404F8 + ldrsh r0, [r5] + add r6, r0, #1 + b _02340594 +_02340554: + ldrsh r1, [r5, #6] + mov r0, r6 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _02340590 + ldrsh r1, [r5, #6] + ldrsh r2, [r5, #4] + mov r0, r6 + str r2, [sp] + stmib sp, {r1, r4, r7} + ldrsh r2, [r5] + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_02340590: + add r6, r6, #2 +_02340594: + ldrsh r0, [r5, #4] + sub r0, r0, #1 + cmp r6, r0 + blt _02340554 + ldrsh r0, [r5, #2] + add r6, r0, #1 + b _023405F8 +_023405B0: + ldrsh r0, [r5] + mov r1, r6 + sub r0, r0, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _023405F4 + ldrsh r2, [r5] + ldrsh r3, [r5, #4] + mov r1, r6 + sub r0, r2, #1 + str r3, [sp] + ldrsh r3, [r5, #6] + stmib sp, {r3, r4, r7} + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_023405F4: + add r6, r6, #2 +_023405F8: + ldrsh r0, [r5, #6] + sub r0, r0, #1 + cmp r6, r0 + blt _023405B0 + ldrsh r0, [r5] + add r8, r0, #3 + b _023406B8 +_02340614: + ldrsh r0, [r5, #2] + sub r6, r8, #1 + add sb, r0, #3 + b _023406A4 +_02340624: + mov r0, r8 + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _023406A0 + cmp r4, #0 + mov r0, r6 + mov r1, sb + beq _0234066C + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + b _02340678 +_0234066C: + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 +_02340678: + strh r1, [r0] + ldrsh r2, [r5, #4] + mov r0, r8 + mov r1, sb + str r2, [sp] + ldrsh r2, [r5, #6] + stmib sp, {r2, r4, r7} + ldrsh r2, [r5] + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_023406A0: + add sb, sb, #2 +_023406A4: + ldrsh r0, [r5, #6] + sub r0, r0, #3 + cmp sb, r0 + blt _02340624 + add r8, r8, #2 +_023406B8: + ldrsh r0, [r5, #4] + sub r0, r0, #3 + cmp r8, r0 + blt _02340614 + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_023406D0: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateMaze + + arm_func_start GenerateMazeLine +GenerateMazeLine: ; 0x023406D4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r4, [sp, #0x34] + ldr fp, [sp, #0x30] + ldr r7, [sp, #0x38] + ldr r6, [sp, #0x3c] + str r4, [sp, #0x34] + mov sb, r0 + mov r8, r1 + str r2, [sp] + str r3, [sp, #4] +_02340700: + mov r0, #4 + bl DungeonRandInt + mov r4, r0 + mov r0, sb + mov r1, r8 + mov sl, #0 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + mvn r0, #1 + str r0, [sp, #8] +_02340730: + and r5, r4, #3 + cmp r5, #3 + addls pc, pc, r5, lsl #2 + b _02340774 +_02340740: ; jump table + b _02340750 ; case 0 + b _0234075C ; case 1 + b _02340768 ; case 2 + b _02340774 ; case 3 +_02340750: + mov r0, #2 + mov r2, #0 + b _0234077C +_0234075C: + mov r0, #0 + ldr r2, [sp, #8] + b _0234077C +_02340768: + ldr r0, [sp, #8] + mov r2, #0 + b _0234077C +_02340774: + mov r0, #0 + mov r2, #2 +_0234077C: + ldr r1, [sp] + add r0, sb, r0 + cmp r1, r0 + bgt _023407C4 + cmp fp, r0 + ble _023407C4 + add r1, r8, r2 + ldr r2, [sp, #4] + cmp r2, r1 + bgt _023407C4 + ldr r2, [sp, #0x34] + cmp r2, r1 + ble _023407C4 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _023407D8 +_023407C4: + add r4, r4, #1 + add sl, sl, #1 + cmp sl, #4 + blt _02340730 + b _02340874 +_023407D8: + cmp r5, #3 + addls pc, pc, r5, lsl #2 + b _02340700 +_023407E4: ; jump table + b _023407F4 ; case 0 + b _02340814 ; case 1 + b _02340834 ; case 2 + b _02340854 ; case 3 +_023407F4: + mov r1, r8 + add r0, sb, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + add sb, sb, #2 + b _02340700 +_02340814: + mov r0, sb + sub r1, r8, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + sub r8, r8, #2 + b _02340700 +_02340834: + mov r1, r8 + sub r0, sb, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + sub sb, sb, #2 + b _02340700 +_02340854: + mov r0, sb + add r1, r8, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + add r8, r8, #2 + b _02340700 +_02340874: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end GenerateMazeLine + + arm_func_start SetSpawnFlag5 +SetSpawnFlag5: ; 0x0234087C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldrsh r5, [r6] + b _023408C0 +_0234088C: + ldrsh r4, [r6, #2] + b _023408B0 +_02340894: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0, #2] + add r4, r4, #1 + orr r1, r1, #0x20 + strh r1, [r0, #2] +_023408B0: + ldrsh r0, [r6, #6] + cmp r4, r0 + blt _02340894 + add r5, r5, #1 +_023408C0: + ldrsh r0, [r6, #4] + cmp r5, r0 + blt _0234088C + ldmia sp!, {r4, r5, r6, pc} + arm_func_end SetSpawnFlag5 + + arm_func_start IsNextToHallway +IsNextToHallway: ; 0x023408D0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mvn r5, #0 + mov sl, r0 + mov sb, r1 + mov r4, r5 + b _02340964 +_023408E8: + adds r8, sl, r5 + bmi _02340960 + cmp r8, #0x38 + bge _0234096C + mov r6, r4 + b _02340958 +_02340900: + adds r7, sb, r6 + bmi _02340954 + cmp r7, #0x20 + bge _02340960 + cmp r5, #0 + cmpne r6, #0 + bne _02340954 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _02340954 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrb r0, [r0, #7] + cmp r0, #0xff + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02340954: + add r6, r6, #1 +_02340958: + cmp r6, #1 + ble _02340900 +_02340960: + add r5, r5, #1 +_02340964: + cmp r5, #1 + ble _023408E8 +_0234096C: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end IsNextToHallway + + arm_func_start ResolveInvalidSpawns +ResolveInvalidSpawns: ; 0x02340974 + stmdb sp!, {r3, r4, r5, lr} + mov r5, #0 +_0234097C: + mov r4, #0 +_02340980: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + and r1, r1, #3 + cmp r1, #1 + beq _023409BC + ldrh r1, [r0] + tst r1, #0x110 + ldrneh r1, [r0, #2] + bicne r1, r1, #2 + strneh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] +_023409BC: + ldrh r1, [r0, #2] + tst r1, #1 + beq _023409E0 + ldrh r1, [r0] + orr r1, r1, #0x200 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] +_023409E0: + ldrh r1, [r0, #2] + add r4, r4, #1 + tst r1, #2 + bicne r1, r1, #4 + strneh r1, [r0, #2] + cmp r4, #0x20 + blt _02340980 + add r5, r5, #1 + cmp r5, #0x38 + blt _0234097C + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ResolveInvalidSpawns + + arm_func_start ConvertSecondaryTerrainToChasms +ConvertSecondaryTerrainToChasms: ; 0x02340A0C + stmdb sp!, {r4, r5, r6, lr} + mov r6, #0 + mov r4, r6 +_02340A18: + mov r5, r4 +_02340A1C: + mov r0, r6 + mov r1, r5 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #2 + bne _02340A5C + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #3 + strh r1, [r0] +_02340A5C: + add r5, r5, #1 + cmp r5, #0x20 + blt _02340A1C + add r6, r6, #1 + cmp r6, #0x38 + blt _02340A18 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end ConvertSecondaryTerrainToChasms + + arm_func_start EnsureImpassableTilesAreWalls +EnsureImpassableTilesAreWalls: ; 0x02340A78 + stmdb sp!, {r4, r5, r6, lr} + mov r6, #0 + mov r4, r6 +_02340A84: + mov r5, r4 +_02340A88: + mov r0, r6 + mov r1, r5 + bl GetTile + ldrh r0, [r0] + tst r0, #0x10 + beq _02340AB8 + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] +_02340AB8: + add r5, r5, #1 + cmp r5, #0x20 + blt _02340A88 + add r6, r6, #1 + cmp r6, #0x38 + blt _02340A84 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end EnsureImpassableTilesAreWalls + + arm_func_start InitializeTile +InitializeTile: ; 0x02340AD4 + mov r2, #0 + strh r2, [r0] + strh r2, [r0, #2] + mov r1, #0xff + strb r1, [r0, #7] + strh r2, [r0, #4] + strb r2, [r0, #8] + strb r2, [r0, #9] + strb r2, [r0, #0xa] + strb r2, [r0, #0xb] + strb r2, [r0, #6] + str r2, [r0, #0xc] + str r2, [r0, #0x10] + bx lr + arm_func_end InitializeTile + + arm_func_start ResetFloor +ResetFloor: ; 0x02340B0C +#ifdef JAPAN +#define RESET_FLOOR_OFFSET -0xA4 +#else +#define RESET_FLOOR_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r6, #0 + mov r4, r6 +_02340B18: + mov r5, r4 + sub r7, r6, #1 +_02340B20: + mov r0, r6 + mov r1, r5 + bl GetTileSafe + bl InitializeTile + sub r8, r5, #1 + mov r0, r6 + mov r1, r8 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r1, r8 + add r0, r6, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r1, r8 + add r0, r6, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + add r0, r6, #1 + add r1, r5, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r6 + add r1, r5, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r7 + add r1, r5, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r7 + mov r1, r5 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r7 + mov r1, r8 + bl PosIsOutOfBounds + cmp r0, #0 + beq _02340BEC +_02340BD4: + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + orr r1, r1, #0x10 + strh r1, [r0] +_02340BEC: + add r5, r5, #1 + cmp r5, #0x20 + blt _02340B20 + add r6, r6, #1 + cmp r6, #0x38 + blt _02340B18 + ldr r6, _02340CA8 ; =DUNGEON_PTR + mov sb, #0 + ldr r0, [r6] + mvn r1, #0 + add r0, r0, #0xcc00 + strh r1, [r0, #0xe4 + RESET_FLOOR_OFFSET] + ldr r0, [r6] + mov r7, sb + add r0, r0, #0xcc00 + strh r1, [r0, #0xe6 + RESET_FLOOR_OFFSET] + mov r4, #0x14 + mov r5, #0xa0 +_02340C34: + mul r8, sb, r5 + mov sl, r7 +_02340C3C: + ldr r0, [r6] +#ifdef JAPAN + add r0, r0, #0xbc + add r0, r0, #0xcc00 +#else + add r0, r0, #0xd60 + add r0, r0, #0xc000 +#endif + add r0, r0, r8 + mla r0, sl, r4, r0 + bl InitializeTile + add sl, sl, #1 + cmp sl, #8 + blt _02340C3C + add sb, sb, #1 + cmp sb, #8 + blt _02340C34 + ldr r1, _02340CA8 ; =DUNGEON_PTR + mov r3, #0 + ldr r0, [r1] + mov r2, r3 + add r0, r0, #0x3f00 + strh r3, [r0, #0xc0 + RESET_FLOOR_OFFSET] +_02340C84: + ldr r0, [r1] + add r0, r0, r3, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xcc8 + RESET_FLOOR_OFFSET] + add r3, r3, #1 + str r2, [r0] + cmp r3, #0x40 + blt _02340C84 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02340CA8: .word DUNGEON_PTR + arm_func_end ResetFloor diff --git a/asm/overlay_29_02344B1C.s b/asm/overlay_29_02344B1C.s index e619fd12..cd8ef9d0 100644 --- a/asm/overlay_29_02344B1C.s +++ b/asm/overlay_29_02344B1C.s @@ -87,786 +87,3 @@ GenerateStandardItem: ; 0x02344BD0 .align 2, 0 _02344BE0: .word GenerateItem arm_func_end GenerateStandardItem - - arm_func_start GenerateCleanItem -GenerateCleanItem: ; 0x02344BE4 - ldr ip, _02344BF4 ; =GenerateItem - mov r2, #0 - mov r3, #2 - bx ip - .align 2, 0 -_02344BF4: .word GenerateItem - arm_func_end GenerateCleanItem - - arm_func_start ov29_02344BF8 -ov29_02344BF8: ; 0x02344BF8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x48 - ldr r3, _02344C48 ; =ov29_023531CC - add r2, sp, #0 - mov r4, r0 - mov r1, #0x24 -_02344C10: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _02344C10 - bl DungeonRand16Bit - mov r1, #0xc - bl _s32_div_f - add r2, sp, #0 - mov r0, #6 - smlabb r0, r1, r0, r2 - mov r1, r4, lsl #1 - ldrsh r0, [r1, r0] - add sp, sp, #0x48 - ldmia sp!, {r4, pc} - .align 2, 0 -_02344C48: .word ov29_023531CC - arm_func_end ov29_02344BF8 - - arm_func_start ov29_02344C4C -ov29_02344C4C: ; 0x02344C4C -#ifdef JAPAN -#define OV29_02344C4C_OFFSET -0xA4 -#else -#define OV29_02344C4C_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x20 - mov sb, #0 - str sb, [sp, #8] - mov r8, sb - bl IsDestinationFloorWithItem - cmp r0, #0 - ldr r1, _02344E7C ; =DUNGEON_PTR - ldr r0, _02344E80 ; =0x0002C9E8 - ldr r1, [r1] - movne sb, #1 - ldrsh r0, [r1, r0] - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #8] - mov r0, #0x38 - bl DungeonRandInt - mov r6, r0 - mov r0, #0x20 - bl DungeonRandInt - ldr r1, _02344E7C ; =DUNGEON_PTR - mov r5, #0 - ldr r1, [r1] - ldr r2, _02344E84 ; =ov29_023531A0 - add r1, r1, #0x3f00 - strh r5, [r1, #0xc0 + OV29_02344C4C_OFFSET] - ldrh r3, [r2] - ldrh r1, [r2, #2] - mov r7, r0 - strh r3, [sp, #0x10] - strh r1, [sp, #0x12] -_02344CC8: - add r7, r7, #1 - cmp r7, #0x20 - moveq r7, #0 - mov r0, r7, lsl #0x10 - mov r0, r0, asr #0x10 - mov r4, #0 - str r0, [sp, #0xc] -_02344CE4: - add r6, r6, #1 - cmp r6, #0x38 - mov r0, #0 - moveq r6, #0 - str r0, [sp, #4] - mov r0, r6 - mov r1, r7 - bl GetTile - ldrh r1, [r0] - tst r1, #0x200 - bne _02344E40 - ldrh r1, [r0, #2] - tst r1, #2 - beq _02344E40 - ldr r1, [sp, #0xc] - strh r6, [sp, #0x1a] - strh r1, [sp, #0x1c] - ldrh r0, [r0] - tst r0, #0x20 - movne r0, #1 - strne r0, [sp] - movne sl, r0 - bne _02344D80 - tst r0, #3 - moveq r0, #0 - streq r0, [sp] - moveq sl, #3 - beq _02344D80 - tst r0, #0x40 - mov r0, #0 - strne r0, [sp] - movne sl, #2 - bne _02344D80 - cmp sb, #0 - cmpeq r8, #0 - str r0, [sp] - mov sl, r0 - addeq r8, r8, #1 - beq _02344E40 -_02344D80: - cmp sl, #0 - bne _02344DB0 - cmp sb, #0 - beq _02344DB0 - cmp r8, #0 - bne _02344DB0 - bl GetItemToRetrieve - mov fp, r0 - mov r0, #2 - mov sb, #0 - str r0, [sp, #4] - b _02344DEC -_02344DB0: - cmp sl, #0 - bne _02344DE0 - ldr r0, [sp, #8] - cmp r0, #0 - beq _02344DE0 - ldr r0, _02344E7C ; =DUNGEON_PTR - ldr r1, [r0] - mov r0, #0 - str r0, [sp, #8] - ldr r0, _02344E80 ; =0x0002C9E8 - ldrsh fp, [r1, r0] - b _02344DEC -_02344DE0: - mov r0, sl - bl GetItemIdToSpawn - mov fp, r0 -_02344DEC: - mov r0, fp - bl IsShoppableItem - cmp r0, #0 - moveq r0, #0 - streq r0, [sp] - ldr r3, [sp, #4] - mov r1, fp - add r0, sp, #0x14 - mov r2, #0 - bl GenerateItem - ldr r0, [sp] - add r1, sp, #0x14 - cmp r0, #0 - ldrneb r0, [sp, #0x14] - mov r2, #1 - orrne r0, r0, #2 - strneb r0, [sp, #0x14] - add r0, sp, #0x1a - bl SpawnItem - cmp sl, #0 - addeq r8, r8, #1 -_02344E40: - add r4, r4, #1 - cmp r4, #0x38 - blt _02344CE4 - add r5, r5, #1 - cmp r5, #0x20 - blt _02344CC8 - ldr r0, _02344E7C ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x3f00 - ldrsh r2, [r0, #0xc0 + OV29_02344C4C_OFFSET] - ldrsh r1, [r0, #0xc2 + OV29_02344C4C_OFFSET] - add r1, r2, r1 - strh r1, [r0, #0xc0 + OV29_02344C4C_OFFSET] - add sp, sp, #0x20 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02344E7C: .word DUNGEON_PTR -_02344E80: .word 0x0002C9E8 + OV29_02344C4C_OFFSET -_02344E84: .word ov29_023531A0 - arm_func_end ov29_02344C4C - - arm_func_start ov29_02344E88 -ov29_02344E88: ; 0x02344E88 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - mov r4, r0 - mov r0, #2 - bl DungeonRngSetSecondary - ldrsh r0, [r4] - ldrsh r1, [r4, #2] - bl DungeonRandRange - mov r8, r0 - cmp r8, #0 - ble _02344FF8 - mov r4, #0 - mov r1, r4 - mov r0, #0x1c00 - bl MemAlloc - mov sl, r0 - mov sb, r4 - mov r6, r4 -_02344ED0: - mov r0, sb, lsl #0x10 - mov r7, r6 - mov r5, r0, asr #0x10 -_02344EDC: - mov r0, r7 - mov r1, sb - bl GetTile - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _02344F2C - ldrh r1, [r0] - tst r1, #0x200 - bne _02344F2C - tst r1, #1 - beq _02344F2C - ldr r1, [r0, #0xc] - cmp r1, #0 - ldreq r0, [r0, #0x10] - cmpeq r0, #0 - moveq r1, r4, lsl #2 - addeq r0, sl, r4, lsl #2 - streqh r7, [sl, r1] - streqh r5, [r0, #2] - addeq r4, r4, #1 -_02344F2C: - add r7, r7, #1 - cmp r7, #0x38 - blt _02344EDC - add sb, sb, #1 - cmp sb, #0x20 - blt _02344ED0 - sub r6, r4, #1 - mov r5, #0 - b _02344F9C -_02344F50: - mov r0, r4 - bl DungeonRandInt - mov fp, r5, lsl #2 - add r1, sl, r5, lsl #2 - mov sb, r0, lsl #2 - ldrh r7, [sl, fp] - ldrh r3, [r1, #2] - ldrh r2, [sl, sb] - strh r7, [sp] - strh r3, [sp, #2] - strh r2, [sl, fp] - add r7, sl, r0, lsl #2 - ldrh r3, [r7, #2] - ldrh r2, [sp] - ldrh r0, [sp, #2] - strh r3, [r1, #2] - strh r2, [sl, sb] - strh r0, [r7, #2] - add r5, r5, #1 -_02344F9C: - cmp r5, r6 - blt _02344F50 - mov sb, #0 - add r7, sp, #4 - mov r6, #0xb7 - mov r5, sb - mov r4, #2 - mov fp, #1 - b _02344FE8 -_02344FC0: - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - bl GenerateItem - mov r1, r7 - mov r2, fp - add r0, sl, sb, lsl #2 - bl SpawnItem - add sb, sb, #1 -_02344FE8: - cmp sb, r8 - blt _02344FC0 - mov r0, sl - bl MemFree -_02344FF8: - bl DungeonRngSetPrimary - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov29_02344E88 - - arm_func_start ov29_02345004 -ov29_02345004: ; 0x02345004 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldrb r0, [r5] - mov r4, #0 - tst r0, #0x80 - bicne r0, r0, #0x80 - strneb r0, [r5] - mov r0, r5 - movne r4, #1 - bl AddItemToBagNoHeld - cmp r0, #0 - beq _02345050 - cmp r4, #0 - ldrneb r0, [r5] - orrne r0, r0, #0x80 - strneb r0, [r5] -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} -_02345050: - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_02345004 - - arm_func_start TryLeaderItemPickUp -TryLeaderItemPickUp: ; 0x02345058 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x198 - mov sl, r0 - mov sb, r1 - bl GetLeader - mov r4, r0 - ldrsh r0, [sl] - ldrsh r1, [sl, #2] - ldr r7, [r4, #0xb4] - bl GetTile - ldr r0, [r0, #0x10] - cmp r0, #0 - beq _02345508 - ldr r1, [r0] - cmp r1, #3 - bne _02345508 - bl GetItemInfo - ldrb r1, [r7, #0x4e] - mov r5, r0 - mov r0, r4 - cmp r1, #0 - bne _02345108 - mov r1, r5 - mov r2, sb - bl ov29_02348DD8 - cmp r0, #0 - bne _02345508 - cmp sb, #0 - beq _02345508 - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345510 ; =ov29_023531BC - mov r1, r5 - mov r0, #0 - bl SubstitutePlaceholderItemTags - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _02345514 ; =0x00000BD2 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02345508 -_02345108: - mov r1, #1 - bl ShouldMonsterRunAwayAndShowEffect - cmp r0, #0 - beq _0234515C - cmp sb, #0 - beq _02345508 - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345510 ; =ov29_023531BC - mov r1, r5 - mov r0, #0 - bl SubstitutePlaceholderItemTags - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _02345518 ; =0x00000BD3 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02345508 -_0234515C: - ldrsh r0, [r5, #4] - bl GetItemCategoryVeneer - cmp r0, #6 - bne _023451EC - mov r0, r4 - mov r1, #0x1b - bl IqSkillIsEnabled - cmp r0, #0 - ldrneb r0, [r5] - orrne r0, r0, #0x20 - strneb r0, [r5] - mov r0, r5 - bl GetMoneyQuantity - mov r6, r0 - ldr r0, _0234551C ; =0x00001308 - bl PlaySeByIdIfNotSilence - mov r0, #0x62 - bl AdvanceFrame - mov r0, r6 - bl AddMoneyCarried - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345510 ; =ov29_023531BC - mov r0, #0 - mov r1, r5 - bl SubstitutePlaceholderItemTags - mov r0, sl - mov r1, #1 - bl RemoveGroundItem - ldr r1, _02345520 ; =0x00000BD6 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - ldrsh r0, [r5, #4] - bl DisplayItemTip - b _02345508 -_023451EC: - ldr r0, _02345524 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x75b] - cmp r0, #0 - beq _02345238 - mov r8, #0 - add r6, sp, #0 - add fp, sp, #0xcc -_0234520C: - mov r0, r8, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetItemAtIdx - str r0, [r6, r8, lsl #2] - str r8, [fp, r8, lsl #2] - add r8, r8, #1 - cmp r8, #0x32 - blt _0234520C - bl GetCurrentBagCapacity - mov r6, r0 - b _0234524C -_02345238: - add r1, r7, #0x62 - mvn r0, #0 - str r1, [sp] - str r0, [sp, #0xcc] - mov r6, #1 -_0234524C: - ldrsh ip, [r5, #4] - cmp ip, #0xb - bge _02345378 - ldrb r0, [r5] - tst r0, #2 - bne _02345378 - mvn r8, #0 - mov fp, r8 - mov lr, #0 - and r0, r0, #8 - b _023452D8 -_02345278: - add r1, sp, #0 - ldr r1, [r1, lr, lsl #2] - ldrb r1, [r1] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _023452D4 - add r1, sp, #0 - ldr r3, [r1, lr, lsl #2] - ldrb r2, [r3] - tst r2, #2 - ldreqsh r1, [r3, #4] - cmpeq ip, r1 - andeq r1, r2, #8 - cmpeq r0, r1 - bne _023452D4 - ldrh r1, [r3, #2] - cmp r1, #0x63 - beq _023452D4 - cmp fp, r1 - movlt fp, r1 - movlt r8, lr -_023452D4: - add lr, lr, #1 -_023452D8: - cmp lr, r6 - blt _02345278 - mvn r0, #0 - cmp r8, r0 - beq _02345378 - add r1, sp, #0 - ldr r2, [r1, r8, lsl #2] - ldrh r0, [r5, #2] - ldrh r1, [r2, #2] - add r0, r1, r0 - cmp r0, #0x63 - movge r0, #0x63 - strh r0, [r2, #2] - bl ov29_02347040 - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345510 ; =ov29_023531BC - mov r1, r5 - mov r0, #0 - bl SubstitutePlaceholderItemTags - mov r0, sl - mov r1, #1 - bl RemoveGroundItem - ldr r0, _02345528 ; =0x00001304 - bl PlaySeByIdIfNotSilence - add r0, sp, #0xcc - ldr r0, [r0, r8, lsl #2] - cmp r0, #0 - bge _02345360 - ldr r1, _0234552C ; =0x00000BD4 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _0234536C -_02345360: - ldr r1, _02345530 ; =0x00000BD5 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser -_0234536C: - ldrsh r0, [r5, #4] - bl DisplayItemTip - b _02345508 -_02345378: - mov r8, #0 - add r3, sp, #0 - mov r0, r8 - mov r1, #1 - b _023453AC -_0234538C: - ldr r2, [r3, r8, lsl #2] - ldrb r2, [r2] - tst r2, #1 - movne r2, r1 - moveq r2, r0 - tst r2, #0xff - beq _023453B4 - add r8, r8, #1 -_023453AC: - cmp r8, r6 - blt _0234538C -_023453B4: - mov r0, r4 - mov r1, r5 - mov r2, sb - bl ov29_02348DD8 - cmp r0, #0 - bne _02345508 - cmp r8, r6 - bne _02345418 - cmp sb, #0 - beq _02345508 - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345510 ; =ov29_023531BC - mov r1, r5 - mov r0, #0 - bl SubstitutePlaceholderItemTags - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _02345514 ; =0x00000BD2 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02345508 -_02345418: - ldr r0, _02345528 ; =0x00001304 - bl PlaySeByIdIfNotSilence - add r0, sp, #0xcc - ldr r0, [r0, r8, lsl #2] - cmp r0, #0 - bge _02345480 - ldrh r2, [r5] - mov r0, #0 - mov r1, #0x40000 - strh r2, [r7, #0x62] - ldrh r2, [r5, #2] - strh r2, [r7, #0x64] - ldrh r2, [r5, #4] - strh r2, [r7, #0x66] - bl SetPreprocessorArgsIdVal - ldr r2, _02345510 ; =ov29_023531BC - mov r1, r5 - mov r0, #0 - bl SubstitutePlaceholderItemTags - mov r0, sl - mov r1, #1 - bl RemoveGroundItem - ldr r1, _0234552C ; =0x00000BD4 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02345500 -_02345480: - mov r0, r5 - bl ov29_02348D3C - mov r6, r0 - mov r0, r5 - bl ov29_02345004 - cmp r0, #0 - mov r0, #0 - beq _023454BC - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _02345534 ; =0x00000BD7 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - b _02345500 -_023454BC: - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345510 ; =ov29_023531BC - mov r1, r5 - mov r0, #0 - bl SubstitutePlaceholderItemTags - mov r0, sl - mov r1, #1 - bl RemoveGroundItem - ldr r1, _02345530 ; =0x00000BD5 - mov r0, r4 - bl LogMessageByIdWithPopupCheckUser - mov r0, r5 - mov r1, r6 - bl ov29_02348ECC - cmp r0, #0 - bne _02345508 -_02345500: - ldrsh r0, [r5, #4] - bl DisplayItemTip -_02345508: - add sp, sp, #0x198 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_LEADER_ITEM_PICK_UP_OFFSET -0x2C1 -#else -#define TRY_LEADER_ITEM_PICK_UP_OFFSET 0 -#endif -_02345510: .word ov29_023531BC -_02345514: .word 0x00000BD2 + TRY_LEADER_ITEM_PICK_UP_OFFSET -_02345518: .word 0x00000BD3 + TRY_LEADER_ITEM_PICK_UP_OFFSET -_0234551C: .word 0x00001308 -_02345520: .word 0x00000BD6 + TRY_LEADER_ITEM_PICK_UP_OFFSET -_02345524: .word DUNGEON_PTR -_02345528: .word 0x00001304 -_0234552C: .word 0x00000BD4 + TRY_LEADER_ITEM_PICK_UP_OFFSET -_02345530: .word 0x00000BD5 + TRY_LEADER_ITEM_PICK_UP_OFFSET -_02345534: .word 0x00000BD7 + TRY_LEADER_ITEM_PICK_UP_OFFSET - arm_func_end TryLeaderItemPickUp - - arm_func_start SpawnItem -SpawnItem: ; 0x02345538 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl SpawnItemEntity - movs r4, r0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldrh r0, [r6] - ldr r1, [r4, #0xb4] - strh r0, [r1] - ldrh r0, [r6, #2] - strh r0, [r1, #2] - ldrh r0, [r6, #4] - strh r0, [r1, #4] - ldr r1, [r4, #0xb4] - ldrb r0, [r1] - bic r0, r0, #0x10 - strb r0, [r1] - ldr r1, [r4, #0xb4] - ldrb r0, [r1] - bic r0, r0, #0x20 - strb r0, [r1] - ldrb r0, [r6, #1] - cmp r0, #0 - beq _023455A8 - mov r0, r6 - bl RemoveEquivItemNoHole -_023455A8: - mov r0, #1 - strb r0, [r4, #0x20] - ldrsh r0, [r7] - ldrsh r1, [r7, #2] - bl GetTileSafe - ldr r1, _02345690 ; =ov29_023537B0 - str r4, [r0, #0x10] - ldrb r1, [r1] - cmp r1, #0 - bne _0234563C - ldrh r0, [r0] - tst r0, #0x20 - beq _0234563C - ldrsh r0, [r6, #4] - bl IsShoppableItem - cmp r0, #0 - beq _0234563C - ldrb r0, [r6] - tst r0, #2 - beq _02345620 - cmp r5, #0 - beq _0234563C - mov r0, r6 - bl GetActualBuyPrice - ldr r1, _02345694 ; =DUNGEON_PTR - ldr r2, [r1] - ldr r1, [r2, #0x7bc] - add r0, r1, r0 - str r0, [r2, #0x7bc] - b _0234563C -_02345620: - mov r0, r6 - bl GetActualSellPrice - ldr r1, _02345694 ; =DUNGEON_PTR - ldr r2, [r1] - ldr r1, [r2, #0x7c0] - add r0, r1, r0 - str r0, [r2, #0x7c0] -_0234563C: - mov r4, #0 - ldr r5, _02345694 ; =DUNGEON_PTR - mov r6, r4 -_02345648: - ldr r0, [r5] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xb24] -#else - ldr r0, [r0, #0xbc8] -#endif - bl EntityIsValid__02345698 - cmp r0, #0 - addne r4, r6, #1 - add r6, r6, #1 - cmp r6, #0x40 - blt _02345648 - ldr r0, _02345694 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x3f00 -#ifdef JAPAN - strh r4, [r0, #0x1c] -#else - strh r4, [r0, #0xc0] -#endif - bl RemoveEmptyItemsInBag -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02345690: .word ov29_023537B0 -_02345694: .word DUNGEON_PTR - arm_func_end SpawnItem diff --git a/asm/overlay_29_02344BF8.s b/asm/overlay_29_02344BF8.s new file mode 100644 index 00000000..d308e4f7 --- /dev/null +++ b/asm/overlay_29_02344BF8.s @@ -0,0 +1,777 @@ + .include "asm/macros.inc" + .include "overlay_29_02344BF8.inc" + + .text + + arm_func_start ov29_02344BF8 +ov29_02344BF8: ; 0x02344BF8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x48 + ldr r3, _02344C48 ; =ov29_023531CC + add r2, sp, #0 + mov r4, r0 + mov r1, #0x24 +_02344C10: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _02344C10 + bl DungeonRand16Bit + mov r1, #0xc + bl _s32_div_f + add r2, sp, #0 + mov r0, #6 + smlabb r0, r1, r0, r2 + mov r1, r4, lsl #1 + ldrsh r0, [r1, r0] + add sp, sp, #0x48 + ldmia sp!, {r4, pc} + .align 2, 0 +_02344C48: .word ov29_023531CC + arm_func_end ov29_02344BF8 + + arm_func_start ov29_02344C4C +ov29_02344C4C: ; 0x02344C4C +#ifdef JAPAN +#define OV29_02344C4C_OFFSET -0xA4 +#else +#define OV29_02344C4C_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x20 + mov sb, #0 + str sb, [sp, #8] + mov r8, sb + bl IsDestinationFloorWithItem + cmp r0, #0 + ldr r1, _02344E7C ; =DUNGEON_PTR + ldr r0, _02344E80 ; =0x0002C9E8 + ldr r1, [r1] + movne sb, #1 + ldrsh r0, [r1, r0] + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #8] + mov r0, #0x38 + bl DungeonRandInt + mov r6, r0 + mov r0, #0x20 + bl DungeonRandInt + ldr r1, _02344E7C ; =DUNGEON_PTR + mov r5, #0 + ldr r1, [r1] + ldr r2, _02344E84 ; =ov29_023531A0 + add r1, r1, #0x3f00 + strh r5, [r1, #0xc0 + OV29_02344C4C_OFFSET] + ldrh r3, [r2] + ldrh r1, [r2, #2] + mov r7, r0 + strh r3, [sp, #0x10] + strh r1, [sp, #0x12] +_02344CC8: + add r7, r7, #1 + cmp r7, #0x20 + moveq r7, #0 + mov r0, r7, lsl #0x10 + mov r0, r0, asr #0x10 + mov r4, #0 + str r0, [sp, #0xc] +_02344CE4: + add r6, r6, #1 + cmp r6, #0x38 + mov r0, #0 + moveq r6, #0 + str r0, [sp, #4] + mov r0, r6 + mov r1, r7 + bl GetTile + ldrh r1, [r0] + tst r1, #0x200 + bne _02344E40 + ldrh r1, [r0, #2] + tst r1, #2 + beq _02344E40 + ldr r1, [sp, #0xc] + strh r6, [sp, #0x1a] + strh r1, [sp, #0x1c] + ldrh r0, [r0] + tst r0, #0x20 + movne r0, #1 + strne r0, [sp] + movne sl, r0 + bne _02344D80 + tst r0, #3 + moveq r0, #0 + streq r0, [sp] + moveq sl, #3 + beq _02344D80 + tst r0, #0x40 + mov r0, #0 + strne r0, [sp] + movne sl, #2 + bne _02344D80 + cmp sb, #0 + cmpeq r8, #0 + str r0, [sp] + mov sl, r0 + addeq r8, r8, #1 + beq _02344E40 +_02344D80: + cmp sl, #0 + bne _02344DB0 + cmp sb, #0 + beq _02344DB0 + cmp r8, #0 + bne _02344DB0 + bl GetItemToRetrieve + mov fp, r0 + mov r0, #2 + mov sb, #0 + str r0, [sp, #4] + b _02344DEC +_02344DB0: + cmp sl, #0 + bne _02344DE0 + ldr r0, [sp, #8] + cmp r0, #0 + beq _02344DE0 + ldr r0, _02344E7C ; =DUNGEON_PTR + ldr r1, [r0] + mov r0, #0 + str r0, [sp, #8] + ldr r0, _02344E80 ; =0x0002C9E8 + ldrsh fp, [r1, r0] + b _02344DEC +_02344DE0: + mov r0, sl + bl GetItemIdToSpawn + mov fp, r0 +_02344DEC: + mov r0, fp + bl IsShoppableItem + cmp r0, #0 + moveq r0, #0 + streq r0, [sp] + ldr r3, [sp, #4] + mov r1, fp + add r0, sp, #0x14 + mov r2, #0 + bl GenerateItem + ldr r0, [sp] + add r1, sp, #0x14 + cmp r0, #0 + ldrneb r0, [sp, #0x14] + mov r2, #1 + orrne r0, r0, #2 + strneb r0, [sp, #0x14] + add r0, sp, #0x1a + bl SpawnItem + cmp sl, #0 + addeq r8, r8, #1 +_02344E40: + add r4, r4, #1 + cmp r4, #0x38 + blt _02344CE4 + add r5, r5, #1 + cmp r5, #0x20 + blt _02344CC8 + ldr r0, _02344E7C ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x3f00 + ldrsh r2, [r0, #0xc0 + OV29_02344C4C_OFFSET] + ldrsh r1, [r0, #0xc2 + OV29_02344C4C_OFFSET] + add r1, r2, r1 + strh r1, [r0, #0xc0 + OV29_02344C4C_OFFSET] + add sp, sp, #0x20 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02344E7C: .word DUNGEON_PTR +_02344E80: .word 0x0002C9E8 + OV29_02344C4C_OFFSET +_02344E84: .word ov29_023531A0 + arm_func_end ov29_02344C4C + + arm_func_start ov29_02344E88 +ov29_02344E88: ; 0x02344E88 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov r4, r0 + mov r0, #2 + bl DungeonRngSetSecondary + ldrsh r0, [r4] + ldrsh r1, [r4, #2] + bl DungeonRandRange + mov r8, r0 + cmp r8, #0 + ble _02344FF8 + mov r4, #0 + mov r1, r4 + mov r0, #0x1c00 + bl MemAlloc + mov sl, r0 + mov sb, r4 + mov r6, r4 +_02344ED0: + mov r0, sb, lsl #0x10 + mov r7, r6 + mov r5, r0, asr #0x10 +_02344EDC: + mov r0, r7 + mov r1, sb + bl GetTile + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _02344F2C + ldrh r1, [r0] + tst r1, #0x200 + bne _02344F2C + tst r1, #1 + beq _02344F2C + ldr r1, [r0, #0xc] + cmp r1, #0 + ldreq r0, [r0, #0x10] + cmpeq r0, #0 + moveq r1, r4, lsl #2 + addeq r0, sl, r4, lsl #2 + streqh r7, [sl, r1] + streqh r5, [r0, #2] + addeq r4, r4, #1 +_02344F2C: + add r7, r7, #1 + cmp r7, #0x38 + blt _02344EDC + add sb, sb, #1 + cmp sb, #0x20 + blt _02344ED0 + sub r6, r4, #1 + mov r5, #0 + b _02344F9C +_02344F50: + mov r0, r4 + bl DungeonRandInt + mov fp, r5, lsl #2 + add r1, sl, r5, lsl #2 + mov sb, r0, lsl #2 + ldrh r7, [sl, fp] + ldrh r3, [r1, #2] + ldrh r2, [sl, sb] + strh r7, [sp] + strh r3, [sp, #2] + strh r2, [sl, fp] + add r7, sl, r0, lsl #2 + ldrh r3, [r7, #2] + ldrh r2, [sp] + ldrh r0, [sp, #2] + strh r3, [r1, #2] + strh r2, [sl, sb] + strh r0, [r7, #2] + add r5, r5, #1 +_02344F9C: + cmp r5, r6 + blt _02344F50 + mov sb, #0 + add r7, sp, #4 + mov r6, #0xb7 + mov r5, sb + mov r4, #2 + mov fp, #1 + b _02344FE8 +_02344FC0: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl GenerateItem + mov r1, r7 + mov r2, fp + add r0, sl, sb, lsl #2 + bl SpawnItem + add sb, sb, #1 +_02344FE8: + cmp sb, r8 + blt _02344FC0 + mov r0, sl + bl MemFree +_02344FF8: + bl DungeonRngSetPrimary + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov29_02344E88 + + arm_func_start ov29_02345004 +ov29_02345004: ; 0x02345004 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldrb r0, [r5] + mov r4, #0 + tst r0, #0x80 + bicne r0, r0, #0x80 + strneb r0, [r5] + mov r0, r5 + movne r4, #1 + bl AddItemToBagNoHeld + cmp r0, #0 + beq _02345050 + cmp r4, #0 + ldrneb r0, [r5] + orrne r0, r0, #0x80 + strneb r0, [r5] +#ifdef EUROPE + mov r0, #0 +#endif + bl ov29_022FB920 + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} +_02345050: + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_02345004 + + arm_func_start TryLeaderItemPickUp +TryLeaderItemPickUp: ; 0x02345058 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x198 + mov sl, r0 + mov sb, r1 + bl GetLeader + mov r4, r0 + ldrsh r0, [sl] + ldrsh r1, [sl, #2] + ldr r7, [r4, #0xb4] + bl GetTile + ldr r0, [r0, #0x10] + cmp r0, #0 + beq _02345508 + ldr r1, [r0] + cmp r1, #3 + bne _02345508 + bl GetItemInfo + ldrb r1, [r7, #0x4e] + mov r5, r0 + mov r0, r4 + cmp r1, #0 + bne _02345108 + mov r1, r5 + mov r2, sb + bl ov29_02348DD8 + cmp r0, #0 + bne _02345508 + cmp sb, #0 + beq _02345508 + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345510 ; =ov29_023531BC + mov r1, r5 + mov r0, #0 + bl SubstitutePlaceholderItemTags + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _02345514 ; =0x00000BD2 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02345508 +_02345108: + mov r1, #1 + bl ShouldMonsterRunAwayAndShowEffect + cmp r0, #0 + beq _0234515C + cmp sb, #0 + beq _02345508 + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345510 ; =ov29_023531BC + mov r1, r5 + mov r0, #0 + bl SubstitutePlaceholderItemTags + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _02345518 ; =0x00000BD3 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02345508 +_0234515C: + ldrsh r0, [r5, #4] + bl GetItemCategoryVeneer + cmp r0, #6 + bne _023451EC + mov r0, r4 + mov r1, #0x1b + bl IqSkillIsEnabled + cmp r0, #0 + ldrneb r0, [r5] + orrne r0, r0, #0x20 + strneb r0, [r5] + mov r0, r5 + bl GetMoneyQuantity + mov r6, r0 + ldr r0, _0234551C ; =0x00001308 + bl PlaySeByIdIfNotSilence + mov r0, #0x62 + bl AdvanceFrame + mov r0, r6 + bl AddMoneyCarried + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345510 ; =ov29_023531BC + mov r0, #0 + mov r1, r5 + bl SubstitutePlaceholderItemTags + mov r0, sl + mov r1, #1 + bl RemoveGroundItem + ldr r1, _02345520 ; =0x00000BD6 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + ldrsh r0, [r5, #4] + bl DisplayItemTip + b _02345508 +_023451EC: + ldr r0, _02345524 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x75b] + cmp r0, #0 + beq _02345238 + mov r8, #0 + add r6, sp, #0 + add fp, sp, #0xcc +_0234520C: + mov r0, r8, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetItemAtIdx + str r0, [r6, r8, lsl #2] + str r8, [fp, r8, lsl #2] + add r8, r8, #1 + cmp r8, #0x32 + blt _0234520C + bl GetCurrentBagCapacity + mov r6, r0 + b _0234524C +_02345238: + add r1, r7, #0x62 + mvn r0, #0 + str r1, [sp] + str r0, [sp, #0xcc] + mov r6, #1 +_0234524C: + ldrsh ip, [r5, #4] + cmp ip, #0xb + bge _02345378 + ldrb r0, [r5] + tst r0, #2 + bne _02345378 + mvn r8, #0 + mov fp, r8 + mov lr, #0 + and r0, r0, #8 + b _023452D8 +_02345278: + add r1, sp, #0 + ldr r1, [r1, lr, lsl #2] + ldrb r1, [r1] + tst r1, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _023452D4 + add r1, sp, #0 + ldr r3, [r1, lr, lsl #2] + ldrb r2, [r3] + tst r2, #2 + ldreqsh r1, [r3, #4] + cmpeq ip, r1 + andeq r1, r2, #8 + cmpeq r0, r1 + bne _023452D4 + ldrh r1, [r3, #2] + cmp r1, #0x63 + beq _023452D4 + cmp fp, r1 + movlt fp, r1 + movlt r8, lr +_023452D4: + add lr, lr, #1 +_023452D8: + cmp lr, r6 + blt _02345278 + mvn r0, #0 + cmp r8, r0 + beq _02345378 + add r1, sp, #0 + ldr r2, [r1, r8, lsl #2] + ldrh r0, [r5, #2] + ldrh r1, [r2, #2] + add r0, r1, r0 + cmp r0, #0x63 + movge r0, #0x63 + strh r0, [r2, #2] + bl ov29_02347040 + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345510 ; =ov29_023531BC + mov r1, r5 + mov r0, #0 + bl SubstitutePlaceholderItemTags + mov r0, sl + mov r1, #1 + bl RemoveGroundItem + ldr r0, _02345528 ; =0x00001304 + bl PlaySeByIdIfNotSilence + add r0, sp, #0xcc + ldr r0, [r0, r8, lsl #2] + cmp r0, #0 + bge _02345360 + ldr r1, _0234552C ; =0x00000BD4 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _0234536C +_02345360: + ldr r1, _02345530 ; =0x00000BD5 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser +_0234536C: + ldrsh r0, [r5, #4] + bl DisplayItemTip + b _02345508 +_02345378: + mov r8, #0 + add r3, sp, #0 + mov r0, r8 + mov r1, #1 + b _023453AC +_0234538C: + ldr r2, [r3, r8, lsl #2] + ldrb r2, [r2] + tst r2, #1 + movne r2, r1 + moveq r2, r0 + tst r2, #0xff + beq _023453B4 + add r8, r8, #1 +_023453AC: + cmp r8, r6 + blt _0234538C +_023453B4: + mov r0, r4 + mov r1, r5 + mov r2, sb + bl ov29_02348DD8 + cmp r0, #0 + bne _02345508 + cmp r8, r6 + bne _02345418 + cmp sb, #0 + beq _02345508 + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345510 ; =ov29_023531BC + mov r1, r5 + mov r0, #0 + bl SubstitutePlaceholderItemTags + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _02345514 ; =0x00000BD2 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02345508 +_02345418: + ldr r0, _02345528 ; =0x00001304 + bl PlaySeByIdIfNotSilence + add r0, sp, #0xcc + ldr r0, [r0, r8, lsl #2] + cmp r0, #0 + bge _02345480 + ldrh r2, [r5] + mov r0, #0 + mov r1, #0x40000 + strh r2, [r7, #0x62] + ldrh r2, [r5, #2] + strh r2, [r7, #0x64] + ldrh r2, [r5, #4] + strh r2, [r7, #0x66] + bl SetPreprocessorArgsIdVal + ldr r2, _02345510 ; =ov29_023531BC + mov r1, r5 + mov r0, #0 + bl SubstitutePlaceholderItemTags + mov r0, sl + mov r1, #1 + bl RemoveGroundItem + ldr r1, _0234552C ; =0x00000BD4 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02345500 +_02345480: + mov r0, r5 + bl ov29_02348D3C + mov r6, r0 + mov r0, r5 + bl ov29_02345004 + cmp r0, #0 + mov r0, #0 + beq _023454BC + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _02345534 ; =0x00000BD7 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + b _02345500 +_023454BC: + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345510 ; =ov29_023531BC + mov r1, r5 + mov r0, #0 + bl SubstitutePlaceholderItemTags + mov r0, sl + mov r1, #1 + bl RemoveGroundItem + ldr r1, _02345530 ; =0x00000BD5 + mov r0, r4 + bl LogMessageByIdWithPopupCheckUser + mov r0, r5 + mov r1, r6 + bl ov29_02348ECC + cmp r0, #0 + bne _02345508 +_02345500: + ldrsh r0, [r5, #4] + bl DisplayItemTip +_02345508: + add sp, sp, #0x198 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_LEADER_ITEM_PICK_UP_OFFSET -0x2C1 +#else +#define TRY_LEADER_ITEM_PICK_UP_OFFSET 0 +#endif +_02345510: .word ov29_023531BC +_02345514: .word 0x00000BD2 + TRY_LEADER_ITEM_PICK_UP_OFFSET +_02345518: .word 0x00000BD3 + TRY_LEADER_ITEM_PICK_UP_OFFSET +_0234551C: .word 0x00001308 +_02345520: .word 0x00000BD6 + TRY_LEADER_ITEM_PICK_UP_OFFSET +_02345524: .word DUNGEON_PTR +_02345528: .word 0x00001304 +_0234552C: .word 0x00000BD4 + TRY_LEADER_ITEM_PICK_UP_OFFSET +_02345530: .word 0x00000BD5 + TRY_LEADER_ITEM_PICK_UP_OFFSET +_02345534: .word 0x00000BD7 + TRY_LEADER_ITEM_PICK_UP_OFFSET + arm_func_end TryLeaderItemPickUp + + arm_func_start SpawnItem +SpawnItem: ; 0x02345538 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl SpawnItemEntity + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldrh r0, [r6] + ldr r1, [r4, #0xb4] + strh r0, [r1] + ldrh r0, [r6, #2] + strh r0, [r1, #2] + ldrh r0, [r6, #4] + strh r0, [r1, #4] + ldr r1, [r4, #0xb4] + ldrb r0, [r1] + bic r0, r0, #0x10 + strb r0, [r1] + ldr r1, [r4, #0xb4] + ldrb r0, [r1] + bic r0, r0, #0x20 + strb r0, [r1] + ldrb r0, [r6, #1] + cmp r0, #0 + beq _023455A8 + mov r0, r6 + bl RemoveEquivItemNoHole +_023455A8: + mov r0, #1 + strb r0, [r4, #0x20] + ldrsh r0, [r7] + ldrsh r1, [r7, #2] + bl GetTileSafe + ldr r1, _02345690 ; =ov29_023537B0 + str r4, [r0, #0x10] + ldrb r1, [r1] + cmp r1, #0 + bne _0234563C + ldrh r0, [r0] + tst r0, #0x20 + beq _0234563C + ldrsh r0, [r6, #4] + bl IsShoppableItem + cmp r0, #0 + beq _0234563C + ldrb r0, [r6] + tst r0, #2 + beq _02345620 + cmp r5, #0 + beq _0234563C + mov r0, r6 + bl GetActualBuyPrice + ldr r1, _02345694 ; =DUNGEON_PTR + ldr r2, [r1] + ldr r1, [r2, #0x7bc] + add r0, r1, r0 + str r0, [r2, #0x7bc] + b _0234563C +_02345620: + mov r0, r6 + bl GetActualSellPrice + ldr r1, _02345694 ; =DUNGEON_PTR + ldr r2, [r1] + ldr r1, [r2, #0x7c0] + add r0, r1, r0 + str r0, [r2, #0x7c0] +_0234563C: + mov r4, #0 + ldr r5, _02345694 ; =DUNGEON_PTR + mov r6, r4 +_02345648: + ldr r0, [r5] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xb24] +#else + ldr r0, [r0, #0xbc8] +#endif + bl EntityIsValid__02345698 + cmp r0, #0 + addne r4, r6, #1 + add r6, r6, #1 + cmp r6, #0x40 + blt _02345648 + ldr r0, _02345694 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x3f00 +#ifdef JAPAN + strh r4, [r0, #0x1c] +#else + strh r4, [r0, #0xc0] +#endif + bl RemoveEmptyItemsInBag +#ifdef EUROPE + mov r0, #0 +#endif + bl ov29_022FB920 + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02345690: .word ov29_023537B0 +_02345694: .word DUNGEON_PTR + arm_func_end SpawnItem diff --git a/include/overlay_29_022DC684.h b/include/overlay_29_022DC684.h new file mode 100644 index 00000000..5d4e602c --- /dev/null +++ b/include/overlay_29_022DC684.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022DC684_H +#define PMDSKY_OVERLAY_29_022DC684_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022DC684(s32 a); + +#endif diff --git a/include/overlay_29_022E272C.h b/include/overlay_29_022E272C.h new file mode 100644 index 00000000..94f7aac8 --- /dev/null +++ b/include/overlay_29_022E272C.h @@ -0,0 +1,11 @@ +#ifndef PMDSKY_OVERLAY_29_022E272C_H +#define PMDSKY_OVERLAY_29_022E272C_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 ShouldDisplayEntityWrapper(struct entity *entity); +bool8 ov29_022E273C(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E41CC.h b/include/overlay_29_022E41CC.h new file mode 100644 index 00000000..254af54e --- /dev/null +++ b/include/overlay_29_022E41CC.h @@ -0,0 +1,12 @@ +#ifndef PMDSKY_OVERLAY_29_022E41CC_H +#define PMDSKY_OVERLAY_29_022E41CC_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E41B0(struct entity *entity, s32 a); +void ov29_022E41CC(struct entity *entity); +void ov29_022E41DC(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E45B8.h b/include/overlay_29_022E45B8.h new file mode 100644 index 00000000..065cb9a7 --- /dev/null +++ b/include/overlay_29_022E45B8.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022E45B8_H +#define PMDSKY_OVERLAY_29_022E45B8_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E45B8(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E46C0.h b/include/overlay_29_022E46C0.h new file mode 100644 index 00000000..2cf89d40 --- /dev/null +++ b/include/overlay_29_022E46C0.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022E46C0_H +#define PMDSKY_OVERLAY_29_022E46C0_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E46C0(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E4704.h b/include/overlay_29_022E4704.h new file mode 100644 index 00000000..fe370904 --- /dev/null +++ b/include/overlay_29_022E4704.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022E4704_H +#define PMDSKY_OVERLAY_29_022E4704_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void PlayInvisifySeIfShouldDisplayEntity(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E4B8C.h b/include/overlay_29_022E4B8C.h new file mode 100644 index 00000000..557947bd --- /dev/null +++ b/include/overlay_29_022E4B8C.h @@ -0,0 +1,11 @@ +#ifndef PMDSKY_OVERLAY_29_022E4B8C_H +#define PMDSKY_OVERLAY_29_022E4B8C_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E4B8C(struct entity *entity); +void ov29_022E4BA0(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E563C.h b/include/overlay_29_022E563C.h new file mode 100644 index 00000000..ec985ecf --- /dev/null +++ b/include/overlay_29_022E563C.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022E563C_H +#define PMDSKY_OVERLAY_29_022E563C_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E563C(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E66C4.h b/include/overlay_29_022E66C4.h new file mode 100644 index 00000000..fe14943a --- /dev/null +++ b/include/overlay_29_022E66C4.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022E66C4_H +#define PMDSKY_OVERLAY_29_022E66C4_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E66C4(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E6770.h b/include/overlay_29_022E6770.h new file mode 100644 index 00000000..19df05fc --- /dev/null +++ b/include/overlay_29_022E6770.h @@ -0,0 +1,11 @@ +#ifndef PMDSKY_OVERLAY_29_022E6770_H +#define PMDSKY_OVERLAY_29_022E6770_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E6770(struct entity *entity); +void ov29_022E6784(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E68BC.h b/include/overlay_29_022E68BC.h new file mode 100644 index 00000000..d80c5f32 --- /dev/null +++ b/include/overlay_29_022E68BC.h @@ -0,0 +1,13 @@ +#ifndef PMDSKY_OVERLAY_29_022E68BC_H +#define PMDSKY_OVERLAY_29_022E68BC_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_022E68BC(struct entity *entity); +void ov29_022E68D8(struct entity *entity); +void ov29_022E68F0(struct entity *entity); +void ov29_022E690C(struct entity *entity); + +#endif diff --git a/include/overlay_29_022E869C.h b/include/overlay_29_022E869C.h new file mode 100644 index 00000000..412b49dc --- /dev/null +++ b/include/overlay_29_022E869C.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022E869C_H +#define PMDSKY_OVERLAY_29_022E869C_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 ov29_022E869C(void); + +#endif diff --git a/include/overlay_29_022F52BC.h b/include/overlay_29_022F52BC.h new file mode 100644 index 00000000..db6a577a --- /dev/null +++ b/include/overlay_29_022F52BC.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022F52BC_H +#define PMDSKY_OVERLAY_29_022F52BC_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void UseSingleUseItemSelf(struct entity *entity); + +#endif diff --git a/include/overlay_29_022FFF28.h b/include/overlay_29_022FFF28.h index ddb97711..2092092b 100644 --- a/include/overlay_29_022FFF28.h +++ b/include/overlay_29_022FFF28.h @@ -6,5 +6,6 @@ // Checks if a monster is a team member under the effects of a certain exclusive item effect. bool8 ExclusiveItemEffectIsActive__022FFF28(struct entity *entity, enum exclusive_item_effect_id effect_id); +s32 CalcSpeedStageWrapper(struct entity *entity); #endif //PMDSKY_OVERLAY_29_022FFF28_H diff --git a/include/overlay_29_02321238.h b/include/overlay_29_02321238.h new file mode 100644 index 00000000..2423fd8d --- /dev/null +++ b/include/overlay_29_02321238.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02321238_H +#define PMDSKY_OVERLAY_29_02321238_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_02321238(struct entity *entity); + +#endif diff --git a/include/overlay_29_02321274.h b/include/overlay_29_02321274.h new file mode 100644 index 00000000..55de7dd0 --- /dev/null +++ b/include/overlay_29_02321274.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02321274_H +#define PMDSKY_OVERLAY_29_02321274_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void ov29_02321274(struct entity *entity); + +#endif diff --git a/include/overlay_29_02325DC0.h b/include/overlay_29_02325DC0.h new file mode 100644 index 00000000..2fb8a58d --- /dev/null +++ b/include/overlay_29_02325DC0.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02325DC0_H +#define PMDSKY_OVERLAY_29_02325DC0_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveDamage__02325DC0(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02325F3C.h b/include/overlay_29_02325F3C.h new file mode 100644 index 00000000..ed471c12 --- /dev/null +++ b/include/overlay_29_02325F3C.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02325F3C_H +#define PMDSKY_OVERLAY_29_02325F3C_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveNightmare(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02326908.h b/include/overlay_29_02326908.h new file mode 100644 index 00000000..5c0c561a --- /dev/null +++ b/include/overlay_29_02326908.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02326908_H +#define PMDSKY_OVERLAY_29_02326908_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveMirrorMove(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02326E04.h b/include/overlay_29_02326E04.h index 204496e4..4ee27982 100644 --- a/include/overlay_29_02326E04.h +++ b/include/overlay_29_02326E04.h @@ -5,6 +5,7 @@ #include "item.h" #include "move.h" +bool8 DoMoveExpose(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); bool8 DoMoveDoubleTeam(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_023279AC.h b/include/overlay_29_023279AC.h new file mode 100644 index 00000000..525e2262 --- /dev/null +++ b/include/overlay_29_023279AC.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_023279AC_H +#define PMDSKY_OVERLAY_29_023279AC_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveSureShot(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02329FB4.h b/include/overlay_29_02329FB4.h new file mode 100644 index 00000000..f32d4252 --- /dev/null +++ b/include/overlay_29_02329FB4.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02329FB4_H +#define PMDSKY_OVERLAY_29_02329FB4_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveSport(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_0232A4E8.h b/include/overlay_29_0232A4E8.h index cc3e18ea..512545cb 100644 --- a/include/overlay_29_0232A4E8.h +++ b/include/overlay_29_0232A4E8.h @@ -6,5 +6,6 @@ #include "move.h" bool8 DoMoveCurse(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveDamage__0232A500(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_0232B8A0.h b/include/overlay_29_0232B8A0.h index c1290f3d..9f9f2143 100644 --- a/include/overlay_29_0232B8A0.h +++ b/include/overlay_29_0232B8A0.h @@ -6,5 +6,6 @@ #include "move.h" bool8 DoMoveDestinyBond(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveDamage__0232B8B0(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_0232CE40.h b/include/overlay_29_0232CE40.h index 2a877f05..934019bd 100644 --- a/include/overlay_29_0232CE40.h +++ b/include/overlay_29_0232CE40.h @@ -6,5 +6,6 @@ #include "move.h" bool8 DoMoveHpGauge(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveVacuumCut(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_0232DD78.h b/include/overlay_29_0232DD78.h index f1047b8e..3ce554b0 100644 --- a/include/overlay_29_0232DD78.h +++ b/include/overlay_29_0232DD78.h @@ -6,5 +6,6 @@ #include "move.h" bool8 DoMoveTrickRoom(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveDamage__0232DD88(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_0232E0E4.h b/include/overlay_29_0232E0E4.h index 49b3a878..a61f80d8 100644 --- a/include/overlay_29_0232E0E4.h +++ b/include/overlay_29_0232E0E4.h @@ -6,5 +6,6 @@ #include "move.h" bool8 DoMovePowerTrick(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveFeint(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_0232E3D0.h b/include/overlay_29_0232E3D0.h new file mode 100644 index 00000000..8d7efb45 --- /dev/null +++ b/include/overlay_29_0232E3D0.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_0232E3D0_H +#define PMDSKY_OVERLAY_29_0232E3D0_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveMiracleEye(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_0232E734.h b/include/overlay_29_0232E734.h index f97821e8..2d1d0be2 100644 --- a/include/overlay_29_0232E734.h +++ b/include/overlay_29_0232E734.h @@ -5,6 +5,7 @@ #include "item.h" #include "move.h" +bool8 DoMoveRockPolish(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); bool8 DoMoveNastyPlot(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); bool8 DoMoveTag0x1AB(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); diff --git a/include/overlay_29_0233A218.h b/include/overlay_29_0233A218.h new file mode 100644 index 00000000..6d944e96 --- /dev/null +++ b/include/overlay_29_0233A218.h @@ -0,0 +1,12 @@ +#ifndef PMDSKY_OVERLAY_29_0233A218_H +#define PMDSKY_OVERLAY_29_0233A218_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void SetMinimapDataE447(u8 value); +u8 GetMinimapDataE447(void); +void SetMinimapDataE448(u8 value); + +#endif diff --git a/include/overlay_29_0233AE78.h b/include/overlay_29_0233AE78.h new file mode 100644 index 00000000..fcbfe44c --- /dev/null +++ b/include/overlay_29_0233AE78.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_0233AE78_H +#define PMDSKY_OVERLAY_29_0233AE78_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +u16 GetTileTerrain(struct tile *tile); + +#endif diff --git a/include/overlay_29_02344BE4.h b/include/overlay_29_02344BE4.h new file mode 100644 index 00000000..1a898de1 --- /dev/null +++ b/include/overlay_29_02344BE4.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02344BE4_H +#define PMDSKY_OVERLAY_29_02344BE4_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +void GenerateCleanItem(struct item *item, enum item_id item_id); + +#endif diff --git a/main.lsf b/main.lsf index 5f9aaa9b..e72c8a5a 100644 --- a/main.lsf +++ b/main.lsf @@ -747,6 +747,8 @@ Overlay OVY_29 Object asm/overlay_29_022DC314.o Object src/overlay_29_022DC61C.o Object asm/overlay_29_022DC65C.o + Object src/overlay_29_022DC684.o + Object asm/overlay_29_022DC694.o Object src/overlay_29_022DEAB0.o Object asm/overlay_29_022DEBA4.o Object src/dg.o @@ -761,6 +763,7 @@ Overlay OVY_29 Object asm/overlay_29_022E1640.o Object src/dg_object.o Object asm/overlay_29_022E1AD4.o + Object src/overlay_29_022E272C.o Object src/dungeon_visibility.o Object asm/overlay_29_022E28D4.o Object src/dungeon_util_2.o @@ -769,10 +772,30 @@ Overlay OVY_29 Object asm/overlay_29_022E335C.o Object src/dg_effect.o Object asm/overlay_29_022E37DC.o + Object src/overlay_29_022E41CC.o + Object asm/overlay_29_022E41F0.o + Object src/overlay_29_022E45B8.o + Object asm/overlay_29_022E45CC.o + Object src/overlay_29_022E46C0.o + Object asm/overlay_29_022E46D0.o + Object src/overlay_29_022E4704.o + Object asm/overlay_29_022E4714.o + Object src/overlay_29_022E4B8C.o + Object asm/overlay_29_022E4BB4.o + Object src/overlay_29_022E563C.o + Object asm/overlay_29_022E5650.o + Object src/overlay_29_022E66C4.o + Object asm/overlay_29_022E66D8.o + Object src/overlay_29_022E6770.o + Object asm/overlay_29_022E6798.o + Object src/overlay_29_022E68BC.o + Object asm/overlay_29_022E6928.o Object src/random_trap.o Object src/spawn_1.o Object src/spawn_2.o Object asm/overlay_29_022E7EC4.o + Object src/overlay_29_022E869C.o + Object asm/overlay_29_022E86A4.o Object src/position_util.o Object asm/overlay_29_rodata_02351628.o Object src/dungeon_range.o @@ -827,6 +850,8 @@ Overlay OVY_29 Object asm/overlay_29_022F2B3C.o Object src/overlay_29_022F528C.o Object asm/overlay_29_022F52B0.o + Object src/overlay_29_022F52BC.o + Object asm/overlay_29_022F52CC.o Object src/overlay_29_022F5994.o Object asm/overlay_29_022F59C4.o Object src/overlay_29_022F62A8.o @@ -870,7 +895,7 @@ Overlay OVY_29 Object src/dungeon_logic_8.o Object asm/overlay_29_022FF958.o Object src/overlay_29_022FFF28.o - Object asm/overlay_29_022FFF4C.o + Object asm/overlay_29_022FFF5C.o Object src/overlay_29_023000E4.o Object asm/overlay_29_0230027C.o Object src/dungeon_logic.o @@ -989,6 +1014,10 @@ Overlay OVY_29 Object asm/overlay_29_023201A0.o Object src/overlay_29_02320764.o Object asm/overlay_29_02320788.o + Object src/overlay_29_02321238.o + Object asm/overlay_29_0232124C.o + Object src/overlay_29_02321274.o + Object asm/overlay_29_02321288.o Object src/overlay_29_02321438.o Object asm/overlay_29_0232145C.o Object src/overlay_29_02322DB8.o @@ -1002,6 +1031,10 @@ Overlay OVY_29 Object asm/overlay_29_02324BE8.o Object src/overlay_29_02325620.o Object asm/overlay_29_02325644.o + Object src/overlay_29_02325DC0.o + Object asm/overlay_29_02325DE4.o + Object src/overlay_29_02325F3C.o + Object asm/overlay_29_02325F74.o Object src/overlay_29_02325FB4.o Object asm/overlay_29_02325FC4.o Object src/overlay_29_02326088.o @@ -1014,6 +1047,8 @@ Overlay OVY_29 Object asm/overlay_29_02326568.o Object src/overlay_29_023268BC.o Object asm/overlay_29_023268CC.o + Object src/overlay_29_02326908.o + Object asm/overlay_29_0232692C.o Object src/overlay_29_02326CB4.o Object asm/overlay_29_02326CC8.o Object src/overlay_29_02326E04.o @@ -1024,6 +1059,8 @@ Overlay OVY_29 Object asm/overlay_29_0232776C.o Object src/overlay_29_02327928.o Object asm/overlay_29_02327940.o + Object src/overlay_29_023279AC.o + Object asm/overlay_29_023279E4.o Object src/overlay_29_02327BE0.o Object asm/overlay_29_02327C08.o Object src/overlay_29_02327DD0.o @@ -1052,6 +1089,8 @@ Overlay OVY_29 Object asm/overlay_29_02329710.o Object src/overlay_29_02329854.o Object asm/overlay_29_02329898.o + Object src/overlay_29_02329FB4.o + Object asm/overlay_29_02329FE0.o Object src/overlay_29_0232A04C.o Object asm/overlay_29_0232A078.o Object src/overlay_29_0232A2AC.o @@ -1061,7 +1100,7 @@ Overlay OVY_29 Object src/overlay_29_0232A480.o Object asm/overlay_29_0232A490.o Object src/overlay_29_0232A4E8.o - Object asm/overlay_29_0232A500.o + Object asm/overlay_29_0232A524.o Object src/overlay_29_0232AC44.o Object asm/overlay_29_0232AC54.o Object src/overlay_29_0232AD08.o @@ -1077,7 +1116,6 @@ Overlay OVY_29 Object src/overlay_29_0232B7C0.o Object asm/overlay_29_0232B820.o Object src/overlay_29_0232B8A0.o - Object asm/overlay_29_0232B8B0.o Object src/overlay_29_0232B8D4.o Object asm/overlay_29_0232B8E4.o Object src/overlay_29_0232B928.o @@ -1101,7 +1139,7 @@ Overlay OVY_29 Object src/overlay_29_0232CD90.o Object asm/overlay_29_0232CDA4.o Object src/overlay_29_0232CE40.o - Object asm/overlay_29_0232CE50.o + Object asm/overlay_29_0232CE7C.o Object src/overlay_29_0232CE94.o Object asm/overlay_29_0232CEAC.o Object src/overlay_29_0232CF74.o @@ -1121,11 +1159,13 @@ Overlay OVY_29 Object src/overlay_29_0232DC54.o Object asm/overlay_29_0232DC64.o Object src/overlay_29_0232DD78.o - Object asm/overlay_29_0232DD88.o + Object asm/overlay_29_0232DDAC.o Object src/overlay_29_0232E0E4.o - Object asm/overlay_29_0232E0F8.o + Object asm/overlay_29_0232E130.o Object src/overlay_29_0232E250.o Object asm/overlay_29_0232E2B8.o + Object src/overlay_29_0232E3D0.o + Object asm/overlay_29_0232E400.o Object src/overlay_29_0232E48C.o Object asm/overlay_29_0232E4A0.o Object src/overlay_29_0232E734.o @@ -1163,6 +1203,10 @@ Overlay OVY_29 Object asm/overlay_29_023388B0.o Object src/overlay_29_02339118.o Object asm/overlay_29_02339138.o + Object src/overlay_29_0233A218.o + Object asm/overlay_29_0233A248.o + Object src/overlay_29_0233AE78.o + Object asm/overlay_29_0233AE84.o Object src/overlay_29_02340CAC.o Object asm/overlay_29_02340CE4.o Object src/dungeon_generation.o @@ -1171,6 +1215,8 @@ Overlay OVY_29 Object asm/overlay_29_02344178.o Object src/overlay_29_02344AF8.o Object asm/overlay_29_02344B1C.o + Object src/overlay_29_02344BE4.o + Object asm/overlay_29_02344BF8.o Object src/overlay_29_02345698.o Object asm/overlay_29_023456BC.o Object src/dungeon_items.o diff --git a/src/overlay_29_022DC684.c b/src/overlay_29_022DC684.c new file mode 100644 index 00000000..da4834ed --- /dev/null +++ b/src/overlay_29_022DC684.c @@ -0,0 +1,8 @@ +#include "overlay_29_022DC684.h" + +extern void ov10_022C0998(s32 a, s32 b); + +void ov29_022DC684(s32 a) +{ + ov10_022C0998(a, 1); +} diff --git a/src/overlay_29_022E272C.c b/src/overlay_29_022E272C.c new file mode 100644 index 00000000..c2b6fdb5 --- /dev/null +++ b/src/overlay_29_022E272C.c @@ -0,0 +1,13 @@ +#include "overlay_29_022E272C.h" + +extern bool8 ShouldDisplayEntity(struct entity *entity, s32 a); + +bool8 ShouldDisplayEntityWrapper(struct entity *entity) +{ + return ShouldDisplayEntity(entity, FALSE); +} + +bool8 ov29_022E273C(struct entity *entity) +{ + return ShouldDisplayEntity(entity, TRUE); +} diff --git a/src/overlay_29_022E41CC.c b/src/overlay_29_022E41CC.c new file mode 100644 index 00000000..f14343b4 --- /dev/null +++ b/src/overlay_29_022E41CC.c @@ -0,0 +1,24 @@ +#include "overlay_29_022E41CC.h" + +extern void ChangeMonsterAnimation(struct entity *entity, s32 animation_id, s32 direction); + +extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id); + +void ov29_022E41B0(struct entity *entity, s32 a) +{ + if (a == 0) { + return; + } + + PlaySeByIdIfShouldDisplayEntity(entity, 0x221); +} + +void ov29_022E41CC(struct entity *entity) +{ + PlaySeByIdIfShouldDisplayEntity(entity, 0x310); +} + +void ov29_022E41DC(struct entity *entity) +{ + ChangeMonsterAnimation(entity, 0xA, 8); +} diff --git a/src/overlay_29_022E45B8.c b/src/overlay_29_022E45B8.c new file mode 100644 index 00000000..fce7b34a --- /dev/null +++ b/src/overlay_29_022E45B8.c @@ -0,0 +1,8 @@ +#include "overlay_29_022E45B8.h" + +extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id); + +void ov29_022E45B8(struct entity *entity) +{ + PlaySeByIdIfShouldDisplayEntity(entity, 0x227); +} diff --git a/src/overlay_29_022E46C0.c b/src/overlay_29_022E46C0.c new file mode 100644 index 00000000..45eb087c --- /dev/null +++ b/src/overlay_29_022E46C0.c @@ -0,0 +1,8 @@ +#include "overlay_29_022E46C0.h" + +extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id); + +void ov29_022E46C0(struct entity *entity) +{ + PlaySeByIdIfShouldDisplayEntity(entity, 0x30C); +} diff --git a/src/overlay_29_022E4704.c b/src/overlay_29_022E4704.c new file mode 100644 index 00000000..a32f339a --- /dev/null +++ b/src/overlay_29_022E4704.c @@ -0,0 +1,8 @@ +#include "overlay_29_022E4704.h" + +extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id); + +void PlayInvisifySeIfShouldDisplayEntity(struct entity *entity) +{ + PlaySeByIdIfShouldDisplayEntity(entity, 0x21C); +} diff --git a/src/overlay_29_022E4B8C.c b/src/overlay_29_022E4B8C.c new file mode 100644 index 00000000..535da8ae --- /dev/null +++ b/src/overlay_29_022E4B8C.c @@ -0,0 +1,13 @@ +#include "overlay_29_022E4B8C.h" + +extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id); + +void ov29_022E4B8C(struct entity *entity) +{ + PlaySeByIdIfShouldDisplayEntity(entity, 0x30E); +} + +void ov29_022E4BA0(struct entity *entity) +{ + PlaySeByIdIfShouldDisplayEntity(entity, 0x30E); +} diff --git a/src/overlay_29_022E563C.c b/src/overlay_29_022E563C.c new file mode 100644 index 00000000..74bb5178 --- /dev/null +++ b/src/overlay_29_022E563C.c @@ -0,0 +1,8 @@ +#include "overlay_29_022E563C.h" + +extern void PlayEffectAnimationPixelPos(struct entity *entity, s32 effect_id, s32 a); + +void ov29_022E563C(struct entity *entity) +{ + PlayEffectAnimationPixelPos(entity, 0x90, 1); +} diff --git a/src/overlay_29_022E66C4.c b/src/overlay_29_022E66C4.c new file mode 100644 index 00000000..07436f69 --- /dev/null +++ b/src/overlay_29_022E66C4.c @@ -0,0 +1,8 @@ +#include "overlay_29_022E66C4.h" + +extern void PlayEffectAnimationPos(struct entity *entity, s32 effect_id, s32 a); + +void ov29_022E66C4(struct entity *entity) +{ + PlayEffectAnimationPos(entity, 0x36, 1); +} diff --git a/src/overlay_29_022E6770.c b/src/overlay_29_022E6770.c new file mode 100644 index 00000000..70f9bc51 --- /dev/null +++ b/src/overlay_29_022E6770.c @@ -0,0 +1,13 @@ +#include "overlay_29_022E6770.h" + +extern void PlayEffectAnimationPos(struct entity *entity, s32 effect_id, s32 a); + +void ov29_022E6770(struct entity *entity) +{ + PlayEffectAnimationPos(entity, 0x37, 1); +} + +void ov29_022E6784(struct entity *entity) +{ + PlayEffectAnimationPos(entity, 0x29, 1); +} diff --git a/src/overlay_29_022E68BC.c b/src/overlay_29_022E68BC.c new file mode 100644 index 00000000..141a3fcd --- /dev/null +++ b/src/overlay_29_022E68BC.c @@ -0,0 +1,23 @@ +#include "overlay_29_022E68BC.h" + +extern void ov29_022E67E4(s32 a, struct entity *entity, s32 b); + +void ov29_022E68BC(struct entity *entity) +{ + ov29_022E67E4(0x13E, entity, 5); +} + +void ov29_022E68D8(struct entity *entity) +{ + ov29_022E67E4(0x1BC, entity, 0xE); +} + +void ov29_022E68F0(struct entity *entity) +{ + ov29_022E67E4(0x13E, entity, 5); +} + +void ov29_022E690C(struct entity *entity) +{ + ov29_022E67E4(0x13E, entity, 5); +} diff --git a/src/overlay_29_022E869C.c b/src/overlay_29_022E869C.c new file mode 100644 index 00000000..0bda856c --- /dev/null +++ b/src/overlay_29_022E869C.c @@ -0,0 +1,6 @@ +#include "overlay_29_022E869C.h" + +bool8 ov29_022E869C(void) +{ + return TRUE; +} diff --git a/src/overlay_29_022F52BC.c b/src/overlay_29_022F52BC.c new file mode 100644 index 00000000..26e74f10 --- /dev/null +++ b/src/overlay_29_022F52BC.c @@ -0,0 +1,8 @@ +#include "overlay_29_022F52BC.h" + +extern void UseSingleUseItem(struct entity *user, struct entity *target); + +void UseSingleUseItemSelf(struct entity *entity) +{ + UseSingleUseItem(entity, entity); +} diff --git a/src/overlay_29_022FFF28.c b/src/overlay_29_022FFF28.c index ff8f125c..dae28909 100644 --- a/src/overlay_29_022FFF28.c +++ b/src/overlay_29_022FFF28.c @@ -1,4 +1,6 @@ #include "overlay_29_022FFF28.h" + +extern s32 CalcSpeedStage(struct entity *entity, s32 a); #include "dungeon_util_static.h" #include "exclusive_item.h" @@ -10,3 +12,8 @@ bool8 ExclusiveItemEffectIsActive__022FFF28(struct entity *entity, enum exclusiv return FALSE; } + +s32 CalcSpeedStageWrapper(struct entity *entity) +{ + return CalcSpeedStage(entity, TRUE); +} diff --git a/src/overlay_29_02321238.c b/src/overlay_29_02321238.c new file mode 100644 index 00000000..cf848d10 --- /dev/null +++ b/src/overlay_29_02321238.c @@ -0,0 +1,8 @@ +#include "overlay_29_02321238.h" + +extern void ov29_0232119C(struct entity *entity, s32 a, s32 b); + +void ov29_02321238(struct entity *entity) +{ + ov29_0232119C(entity, 0, 1); +} diff --git a/src/overlay_29_02321274.c b/src/overlay_29_02321274.c new file mode 100644 index 00000000..52dd5fb8 --- /dev/null +++ b/src/overlay_29_02321274.c @@ -0,0 +1,8 @@ +#include "overlay_29_02321274.h" + +extern void ov29_0232119C(struct entity *entity, s32 a, s32 b); + +void ov29_02321274(struct entity *entity) +{ + ov29_0232119C(entity, 1, 0); +} diff --git a/src/overlay_29_02325DC0.c b/src/overlay_29_02325DC0.c new file mode 100644 index 00000000..5fd5cfed --- /dev/null +++ b/src/overlay_29_02325DC0.c @@ -0,0 +1,8 @@ +#include "overlay_29_02325DC0.h" + +extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id); + +bool8 DoMoveDamage__02325DC0(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + return DealDamage(attacker, defender, move, 0x100, item_id) != 0; +} diff --git a/src/overlay_29_02325F3C.c b/src/overlay_29_02325F3C.c new file mode 100644 index 00000000..70259712 --- /dev/null +++ b/src/overlay_29_02325F3C.c @@ -0,0 +1,14 @@ +#include "overlay_29_02325F3C.h" + +extern s32 NIGHTMARE_TURN_RANGE; + +extern s32 CalcStatusDuration(struct entity *target, s32 *turn_range, s32 a); + +extern void TryInflictNightmareStatus(struct entity *user, struct entity *target, s32 turns); + +bool8 DoMoveNightmare(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictNightmareStatus(attacker, defender, CalcStatusDuration(defender, &NIGHTMARE_TURN_RANGE, TRUE)); + + return TRUE; +} diff --git a/src/overlay_29_02326908.c b/src/overlay_29_02326908.c new file mode 100644 index 00000000..84a291ac --- /dev/null +++ b/src/overlay_29_02326908.c @@ -0,0 +1,13 @@ +#include "overlay_29_02326908.h" + +extern void EndFrozenStatus(struct entity *user, struct entity *target); + +extern void TryInflictMirrorMoveStatus(struct entity *user, struct entity *target); + +bool8 DoMoveMirrorMove(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + EndFrozenStatus(attacker, defender); + TryInflictMirrorMoveStatus(attacker, defender); + + return TRUE; +} diff --git a/src/overlay_29_02326E04.c b/src/overlay_29_02326E04.c index c0d71a8c..59c9c0bd 100644 --- a/src/overlay_29_02326E04.c +++ b/src/overlay_29_02326E04.c @@ -1,6 +1,15 @@ #include "overlay_29_02326E04.h" + +extern void TryInflictExposedStatus(struct entity *user, struct entity *target, s32 a, s32 b); #include "move_orb_effects.h" +bool8 DoMoveExpose(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictExposedStatus(attacker, defender, move->id == 0x13B ? 0x7A : 0x51, 0); + + return TRUE; +} + extern struct StatIndex ATK_STAT_IDX; extern struct StatIndex SPATK_STAT_IDX; diff --git a/src/overlay_29_023279AC.c b/src/overlay_29_023279AC.c new file mode 100644 index 00000000..49a11dd9 --- /dev/null +++ b/src/overlay_29_023279AC.c @@ -0,0 +1,14 @@ +#include "overlay_29_023279AC.h" + +extern s32 SURE_SHOT_TURN_RANGE; + +extern s32 CalcStatusDuration(struct entity *target, s32 *turn_range, s32 a); + +extern void TryInflictSureShotStatus(struct entity *user, struct entity *target, s32 turns); + +bool8 DoMoveSureShot(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictSureShotStatus(attacker, defender, CalcStatusDuration(defender, &SURE_SHOT_TURN_RANGE, FALSE)); + + return TRUE; +} diff --git a/src/overlay_29_02329FB4.c b/src/overlay_29_02329FB4.c new file mode 100644 index 00000000..f8255421 --- /dev/null +++ b/src/overlay_29_02329FB4.c @@ -0,0 +1,14 @@ +#include "overlay_29_02329FB4.h" + +extern void ActivateSportCondition(bool8 water_sport); + +bool8 DoMoveSport(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + if (move->id == 0xD4) { + ActivateSportCondition(FALSE); + } else { + ActivateSportCondition(TRUE); + } + + return TRUE; +} diff --git a/src/overlay_29_0232A4E8.c b/src/overlay_29_0232A4E8.c index c8cd56fb..35b1df1f 100644 --- a/src/overlay_29_0232A4E8.c +++ b/src/overlay_29_0232A4E8.c @@ -1,5 +1,7 @@ #include "overlay_29_0232A4E8.h" +extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id); + extern void TryInflictCurseStatus(struct entity *user, struct entity *target, bool8 displayMessage, bool8 onlyCheck); bool8 DoMoveCurse(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) @@ -8,3 +10,8 @@ bool8 DoMoveCurse(struct entity* attacker, struct entity* defender, struct move* return TRUE; } + +bool8 DoMoveDamage__0232A500(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + return DealDamage(attacker, defender, move, 0x100, item_id) != 0; +} diff --git a/src/overlay_29_0232B8A0.c b/src/overlay_29_0232B8A0.c index 44979fb5..870976d1 100644 --- a/src/overlay_29_0232B8A0.c +++ b/src/overlay_29_0232B8A0.c @@ -1,5 +1,7 @@ #include "overlay_29_0232B8A0.h" +extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id); + extern void TryInflictDestinyBondStatus(struct entity *user, struct entity *target); bool8 DoMoveDestinyBond(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) @@ -8,3 +10,8 @@ bool8 DoMoveDestinyBond(struct entity* attacker, struct entity* defender, struct return TRUE; } + +bool8 DoMoveDamage__0232B8B0(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + return DealDamage(attacker, defender, move, 0x100, item_id) != 0; +} diff --git a/src/overlay_29_0232CE40.c b/src/overlay_29_0232CE40.c index 61842e0d..3b920a72 100644 --- a/src/overlay_29_0232CE40.c +++ b/src/overlay_29_0232CE40.c @@ -1,5 +1,9 @@ #include "overlay_29_0232CE40.h" +extern s16 ov10_022C456C; + +extern s32 ov29_02332F18(struct entity *attacker, struct entity *defender, struct move *move, s16 a, enum item_id item_id); + extern void TryActivateIdentifyCondition(struct entity *user, struct entity *target); bool8 DoMoveHpGauge(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) @@ -8,3 +12,8 @@ bool8 DoMoveHpGauge(struct entity* attacker, struct entity* defender, struct mov return TRUE; } + +bool8 DoMoveVacuumCut(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + return ov29_02332F18(attacker, defender, move, ov10_022C456C, item_id) != 0; +} diff --git a/src/overlay_29_0232DD78.c b/src/overlay_29_0232DD78.c index 33d92d7a..df59eb83 100644 --- a/src/overlay_29_0232DD78.c +++ b/src/overlay_29_0232DD78.c @@ -1,5 +1,7 @@ #include "overlay_29_0232DD78.h" +extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id); + extern void BoostOrLowerSpeed(struct entity *user, struct entity *target); bool8 DoMoveTrickRoom(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) @@ -8,3 +10,8 @@ bool8 DoMoveTrickRoom(struct entity* attacker, struct entity* defender, struct m return TRUE; } + +bool8 DoMoveDamage__0232DD88(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + return DealDamage(attacker, defender, move, 0x100, item_id) != 0; +} diff --git a/src/overlay_29_0232E0E4.c b/src/overlay_29_0232E0E4.c index 0ba2d6fe..5e382413 100644 --- a/src/overlay_29_0232E0E4.c +++ b/src/overlay_29_0232E0E4.c @@ -1,5 +1,9 @@ #include "overlay_29_0232E0E4.h" +extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id); + +extern void EndProtectStatus(struct entity *user, struct entity *target); + extern void SwapUserAtkAndDefModifiers(struct entity *user, struct entity *target, s32); bool8 DoMovePowerTrick(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) @@ -8,3 +12,14 @@ bool8 DoMovePowerTrick(struct entity* attacker, struct entity* defender, struct return TRUE; } + +bool8 DoMoveFeint(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + if (DealDamage(attacker, defender, move, 0x100, item_id) == 0) { + return FALSE; + } + + EndProtectStatus(attacker, defender); + + return TRUE; +} diff --git a/src/overlay_29_0232E3D0.c b/src/overlay_29_0232E3D0.c new file mode 100644 index 00000000..f692f123 --- /dev/null +++ b/src/overlay_29_0232E3D0.c @@ -0,0 +1,13 @@ +#include "overlay_29_0232E3D0.h" + +extern void TryInflictMiracleEyeStatus(struct entity *user, struct entity *target, s32 a); + +extern void ResetHitChanceStat(struct entity *user, struct entity *target, s32 a, s32 b); + +bool8 DoMoveMiracleEye(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictMiracleEyeStatus(attacker, defender, 0); + ResetHitChanceStat(attacker, defender, 1, 1); + + return TRUE; +} diff --git a/src/overlay_29_0232E734.c b/src/overlay_29_0232E734.c index acd25f8c..df891be0 100644 --- a/src/overlay_29_0232E734.c +++ b/src/overlay_29_0232E734.c @@ -1,6 +1,14 @@ #include "overlay_29_0232E734.h" #include "move_orb_effects.h" +bool8 DoMoveRockPolish(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + BoostSpeedOneStage(attacker, defender, 0, 0); + BoostSpeedOneStage(attacker, defender, 0, 1); + + return TRUE; +} + extern struct StatIndex ATK_STAT_IDX; extern struct StatIndex SPATK_STAT_IDX; diff --git a/src/overlay_29_0233A218.c b/src/overlay_29_0233A218.c new file mode 100644 index 00000000..9e045e1d --- /dev/null +++ b/src/overlay_29_0233A218.c @@ -0,0 +1,18 @@ +#include "overlay_29_0233A218.h" + +extern u8 *GetMinimapData(void); + +void SetMinimapDataE447(u8 value) +{ + GetMinimapData()[0xE447] = value; +} + +u8 GetMinimapDataE447(void) +{ + return GetMinimapData()[0xE447]; +} + +void SetMinimapDataE448(u8 value) +{ + GetMinimapData()[0xE448] = value; +} diff --git a/src/overlay_29_0233AE78.c b/src/overlay_29_0233AE78.c new file mode 100644 index 00000000..45a4e716 --- /dev/null +++ b/src/overlay_29_0233AE78.c @@ -0,0 +1,6 @@ +#include "overlay_29_0233AE78.h" + +u16 GetTileTerrain(struct tile *tile) +{ + return tile->terrain_flags & 3; +} diff --git a/src/overlay_29_02344BE4.c b/src/overlay_29_02344BE4.c new file mode 100644 index 00000000..4ae42d94 --- /dev/null +++ b/src/overlay_29_02344BE4.c @@ -0,0 +1,8 @@ +#include "overlay_29_02344BE4.h" + +extern void GenerateItem(struct item *item, enum item_id item_id, s32 quantity, s32 sticky); + +void GenerateCleanItem(struct item *item, enum item_id item_id) +{ + GenerateItem(item, item_id, 0, 2); +}