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); +}