diff --git a/asm/include/overlay_29_022E2978.inc b/asm/include/overlay_29_022E34A8.inc similarity index 72% rename from asm/include/overlay_29_022E2978.inc rename to asm/include/overlay_29_022E34A8.inc index cb9b3204..d15ff07c 100644 --- a/asm/include/overlay_29_022E2978.inc +++ b/asm/include/overlay_29_022E34A8.inc @@ -1,18 +1,18 @@ #pragma once -.public abs .public CanSeeInvisibleMonsters -.public DrawMinimapTile .public DUNGEON_PTR +.public DrawMinimapTile .public EntityIsValid__022E1A1C .public EntityIsValid__022E32E8 .public GetForcedLossReason -.public GetMessageLogPreprocessorArgs -.public GetMonsterName -.public GetTrapName .public HasDropeyeStatus .public IsBlinded .public IsPositionActuallyInSight .public ItemIsActive__022E330C +.public TeamMemberHasEnabledIqSkill +.public UpdateMinimap +.public UpdateTrapsVisibility +.public abs .public ov29_022E34C8 .public ov29_022E3534 .public ov29_022E3A58 @@ -21,13 +21,5 @@ .public ov29_0233711C .public ov29_023372A4 .public ov29_0237C84C -.public PrepareItemForPrinting2 -.public SetPreprocessorArgsStringToName -.public strcpy -.public StringFromId .public sub_02009194 .public sub_020091B0 -.public SubstitutePlaceholderTrapTags -.public TeamMemberHasEnabledIqSkill -.public UpdateMinimap -.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_022E37DC.inc b/asm/include/overlay_29_022E37DC.inc index c9c9dd4e..69dd29be 100644 --- a/asm/include/overlay_29_022E37DC.inc +++ b/asm/include/overlay_29_022E37DC.inc @@ -3,8 +3,8 @@ .public AnimationHasMoreFrames .public DUNGEON_PTR .public EntityIsValid__022E37B8 -.public GetEffectAnimationWanOffset .public InitOamAdjustmentInfo +.public UpdateStatusIconFlags .public ov10_022BDC68 .public ov10_022BF274 .public ov10_022BF2B4 @@ -14,20 +14,3 @@ .public ov29_022E6E40 .public ov29_022ED0F4 .public ov29_0235354C -.public PlayEffectAnimationEntity -.public PlaySeByIdIfShouldDisplayEntity -.public STATUS_ICON_ARRAY_BIDE -.public STATUS_ICON_ARRAY_BLINDED -.public STATUS_ICON_ARRAY_BURN -.public STATUS_ICON_ARRAY_CRINGE -.public STATUS_ICON_ARRAY_CURSE -.public STATUS_ICON_ARRAY_FREEZE -.public STATUS_ICON_ARRAY_INVISIBLE -.public STATUS_ICON_ARRAY_LEECH_SEED -.public STATUS_ICON_ARRAY_LONG_TOSS -.public STATUS_ICON_ARRAY_MAGNET_RISE -.public STATUS_ICON_ARRAY_MIRACLE_EYE -.public STATUS_ICON_ARRAY_MUZZLED -.public STATUS_ICON_ARRAY_REFLECT -.public STATUS_ICON_ARRAY_SLEEP -.public STATUS_ICON_ARRAY_SURE_SHOT diff --git a/asm/include/overlay_29_022EC62C.inc b/asm/include/overlay_29_022EC62C.inc index 6dd6860b..cb6adc71 100644 --- a/asm/include/overlay_29_022EC62C.inc +++ b/asm/include/overlay_29_022EC62C.inc @@ -1,29 +1,12 @@ #pragma once -.public _s32_div_f .public AbilityIsActiveVeneer -.public AdvanceFrame -.public ChangeDungeonMusic -.public DisplayActions .public DUNGEON_PTR .public EntityIsValid__022EC608 -.public EntityIsValid__022ECDC0 .public ExecuteMonsterAction -.public GetForcedLossReason .public GetLeader -.public GetMonsterName -.public HandleFaint +.public IsFloorOver .public IsFloorOver2 -.public LogMessageByIdWithPopupCheckUser -.public ov10_022C6320 -.public ov29_022E5DBC -.public ov29_022EAEF0 -.public ov29_022F2FE4 -.public ov29_023522B6 -.public ov29_02352380 -.public ov29_02352390 -.public ov29_02353598 -.public ov29_0237C974 .public RunMonsterAi .public TryForcedLoss -.public TryPointCameraToMonster .public TrySpawnMonsterAndTickSpawnCounter +.public ov29_023522B6 diff --git a/asm/include/overlay_29_022EC85C.inc b/asm/include/overlay_29_022EC85C.inc new file mode 100644 index 00000000..8b4ecf50 --- /dev/null +++ b/asm/include/overlay_29_022EC85C.inc @@ -0,0 +1,22 @@ +#pragma once +.public AdvanceFrame +.public ChangeDungeonMusic +.public DUNGEON_PTR +.public DisplayActions +.public EntityIsValid__022ECDC0 +.public GetForcedLossReason +.public GetLeader +.public GetMonsterName +.public HandleFaint +.public IsFloorOver +.public LogMessageByIdWithPopupCheckUser +.public TryPointCameraToMonster +.public _s32_div_f +.public ov10_022C6320 +.public ov29_022E5DBC +.public ov29_022EAEF0 +.public ov29_022F2FE4 +.public ov29_02352380 +.public ov29_02352390 +.public ov29_02353598 +.public ov29_0237C974 diff --git a/asm/include/overlay_29_02305C28.inc b/asm/include/overlay_29_02305C28.inc index 12f8e7fd..1884fbb1 100644 --- a/asm/include/overlay_29_02305C28.inc +++ b/asm/include/overlay_29_02305C28.inc @@ -1,68 +1,32 @@ #pragma once -.public abs -.public AdvanceFrame .public ApplyDamageAndEffectsWrapper .public CalcSpeedStageWrapper .public CalcStatusDuration .public ChangeMonsterAnimationToIdle -.public DUNGEON_PTR -.public DungeonGetSpriteIndex .public EndNegativeStatusCondition -.public EnsureCanStandCurrentTile .public EntityIsValid__02305C04 -.public EntityIsValid__02307EF8 -.public FreeOtherWrappedMonsters -.public GetIdleAnimationId -.public GetMonsterApparentId -.public GetType -.public HandleShopTransaction .public IsProtectedFromNegativeStatus -.public ItemIsActive__02307F1C -.public LogMessageByIdWithPopupCheckUser .public LogMessageByIdWithPopupCheckUserTarget .public MonsterHasNegativeStatus +.public SafeguardIsActive +.public SubInitMonster +.public SubstitutePlaceholderStringTags +.public TransferNegativeBlinkerClassStatus +.public TryIncreaseHp +.public TryInflictExposedStatus +.public TryInflictPerishSongStatus +.public TryInflictSleepStatus +.public UpdateStatusIconFlags .public ov10_022C45A0 .public ov10_022C45A8 .public ov10_022C4868 .public ov29_022E543C -.public ov29_022E65F4 -.public ov29_022E6798 -.public ov29_022FA1D8 -.public ov29_022FB984 -.public ov29_02304830 -.public ov29_02311C28 -.public ov29_02321134 -.public SafeguardIsActive -.public SubInitMonster -.public SubstitutePlaceholderStringTags -.public TryIncreaseHp -.public TryInflictBadlyPoisonedStatus -.public TryInflictBlinkerStatus -.public TryInflictBurnStatus -.public TryInflictConfusedStatus -.public TryInflictConstrictionStatus -.public TryInflictCoweringStatus -.public TryInflictCringeStatus -.public TryInflictCrossEyedStatus -.public TryInflictDecoyStatus -.public TryInflictDropeyeStatus -.public TryInflictEmbargoStatus -.public TryInflictEncoreStatus -.public TryInflictExposedStatus -.public TryInflictGastroAcidStatus -.public TryInflictHealBlockStatus -.public TryInflictInfatuatedStatus -.public TryInflictLeechSeedStatus -.public TryInflictMiracleEyeStatus -.public TryInflictMuzzledStatus -.public TryInflictParalysisStatus -.public TryInflictPausedStatus -.public TryInflictPerishSongStatus -.public TryInflictPoisonedStatus -.public TryInflictShadowHoldStatus -.public TryInflictSleepStatus -.public TryInflictTauntStatus -.public TryInflictWhifferStatus -.public UpdateMinimap -.public UpdateStatusIconFlags -.public UpdateTrapsVisibility +.public ov29_02306DCC +.public ov29_02306F00 +.public ov29_02307078 +.public ov29_02307198 +.public ov29_0230737C +.public ov29_023076C0 +.public ov29_023077FC +.public ov29_02307A2C +.public ov29_02307B0C diff --git a/asm/include/overlay_29_02306258.inc b/asm/include/overlay_29_02306258.inc new file mode 100644 index 00000000..8b70d54f --- /dev/null +++ b/asm/include/overlay_29_02306258.inc @@ -0,0 +1,12 @@ +#pragma once +.public CalcSpeedStageWrapper +.public DUNGEON_PTR +.public EntityIsValid__02305C04 +.public FreeOtherWrappedMonsters +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserTarget +.public ResetTypeChanges +.public SubstitutePlaceholderStringTags +.public UpdateStatusIconFlags +.public ov29_022E65F4 +.public ov29_022E6798 diff --git a/asm/include/overlay_29_023068C4.inc b/asm/include/overlay_29_023068C4.inc new file mode 100644 index 00000000..110ef79d --- /dev/null +++ b/asm/include/overlay_29_023068C4.inc @@ -0,0 +1,55 @@ +#pragma once +.public AdvanceFrame +.public CalcSpeedStageWrapper +.public ChangeMonsterAnimationToIdle +.public DUNGEON_PTR +.public DungeonGetSpriteIndex +.public EndCurseClassStatus +.public EndFrozenClassStatus +.public EndReflectClassStatus +.public EndSleepClassStatus +.public EnsureCanStandCurrentTile +.public EntityIsValid__02305C04 +.public EntityIsValid__02307EF8 +.public GetIdleAnimationId +.public GetMonsterApparentId +.public GetType +.public ItemIsActive__02307F1C +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserTarget +.public SubstitutePlaceholderStringTags +.public TryInflictBadlyPoisonedStatus +.public TryInflictBlinkerStatus +.public TryInflictBurnStatus +.public TryInflictConfusedStatus +.public TryInflictConstrictionStatus +.public TryInflictCoweringStatus +.public TryInflictCringeStatus +.public TryInflictCrossEyedStatus +.public TryInflictDecoyStatus +.public TryInflictDropeyeStatus +.public TryInflictEmbargoStatus +.public TryInflictEncoreStatus +.public TryInflictGastroAcidStatus +.public TryInflictHealBlockStatus +.public TryInflictInfatuatedStatus +.public TryInflictLeechSeedStatus +.public TryInflictMiracleEyeStatus +.public TryInflictMuzzledStatus +.public TryInflictParalysisStatus +.public TryInflictPausedStatus +.public TryInflictPoisonedStatus +.public TryInflictShadowHoldStatus +.public TryInflictTauntStatus +.public TryInflictWhifferStatus +.public TryRemoveSnatchedMonsterFromDungeonStruct +.public UpdateMinimap +.public UpdateStatusIconFlags +.public UpdateTrapsVisibility +.public abs +.public HandleShopTransaction +.public ov29_022FA1D8 +.public ov29_022FB984 +.public ov29_02304830 +.public ov29_02311C28 +.public ov29_02321134 diff --git a/asm/include/overlay_29_02336450.inc b/asm/include/overlay_29_02336450.inc index 0479cc9a..856ecc31 100644 --- a/asm/include/overlay_29_02336450.inc +++ b/asm/include/overlay_29_02336450.inc @@ -1,24 +1,16 @@ #pragma once -.public CannotStandOnTileNoMonsterCheck -.public CanSeePosition -.public Debug_Print0 .public DEFAULT_TILE -.public DetermineMonsterShadow -.public DIRECTIONS_XY -.public DrawMinimapTile .public DUNGEON_PTR -.public EntityIsValid__02337CA8 +.public Debug_Print0 .public FloorSecondaryTerrainIsChasm .public GetBgRegionArea -.public GetGridsOption -.public GetLeader .public GetTile .public GetTileSafe -.public GetVisibilityRange .public InitTilesetBuffer .public IsCurrentFixedRoomBossFight -.public IsSecretBazaar .public MOBILITY_TYPE_TO_DUNGEON_MOBILITY_TYPE +.public RandIntSafe +.public SECONDARY_TERRAIN_TYPES .public ov10_022C2588 .public ov10_022C25EC .public ov10_022C2638 @@ -26,17 +18,10 @@ .public ov10_022C26A0 .public ov10_022C2720 .public ov29_022DE0EC -.public ov29_022E66C4 .public ov29_022E9F80 .public ov29_02352B60 .public ov29_02352B74 .public ov29_02352B88 -.public ov29_02352B9C -.public ov29_02352D58 .public ov29_02352F14 .public ov29_0237CAA0 .public ov29_0237CAAC -.public RandIntSafe -.public SECONDARY_TERRAIN_TYPES -.public sub_02051D8C -.public sub_02051E60 diff --git a/asm/include/overlay_29_0233711C.inc b/asm/include/overlay_29_0233711C.inc new file mode 100644 index 00000000..b735e51e --- /dev/null +++ b/asm/include/overlay_29_0233711C.inc @@ -0,0 +1,23 @@ +#pragma once +.public CanSeePosition +.public CannotStandOnTileNoMonsterCheck +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DetermineMonsterShadow +.public DetermineTileWalkableNeighbors +.public DrawMinimapTile +.public EntityIsValid__02337CA8 +.public GetGridsOption +.public GetLeader +.public GetTile +.public GetTileSafe +.public GetVisibilityRange +.public IsSecretBazaar +.public UpdateTrapsVisibility +.public ov29_022E66C4 +.public ov29_02336694 +.public ov29_02336DB0 +.public ov29_02352B9C +.public ov29_02352D58 +.public sub_02051D8C +.public sub_02051E60 diff --git a/asm/include/overlay_29_0233ED34.inc b/asm/include/overlay_29_0233F424.inc similarity index 81% rename from asm/include/overlay_29_0233ED34.inc rename to asm/include/overlay_29_0233F424.inc index 8964d136..9dd55e52 100644 --- a/asm/include/overlay_29_0233ED34.inc +++ b/asm/include/overlay_29_0233F424.inc @@ -1,6 +1,5 @@ #pragma once -.public CORNER_CARDINAL_NEIGHBOR_IS_OPEN -.public DIRECTIONS_XY +.public CreateHallway .public DUNGEON_PTR .public DungeonRandInt .public DungeonRandRange diff --git a/asm/include/overlay_29_023456BC.inc b/asm/include/overlay_29_023456BC.inc index 34730a3f..85d361ab 100644 --- a/asm/include/overlay_29_023456BC.inc +++ b/asm/include/overlay_29_023456BC.inc @@ -1,53 +1,17 @@ #pragma once -.public _s32_div_f .public AddSimpleObjToOam -.public AdvanceFrame -.public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST -.public DISPLACEMENTS_WITHIN_3 -.public DisplayMessage2 -.public DrawMinimapTile .public DUNGEON_PTR -.public DungeonRandInt -.public DungeonRandOutcome__022EAB20 .public EntityIsValid__02345698 -.public GenerateItem .public GetActualBuyPrice .public GetActualSellPrice -.public GetExclusiveItem .public GetItemInfo .public GetItemSpriteId -.public GetMissionRank__0204FAE0 .public GetTile .public GetTileSafe -.public GetTreasureBoxChances -.public IncrementEntityPixelPosXY -.public IsCurrentFixedRoomBossFight -.public IsMarowakTrainingMaze .public IsShoppableItem -.public IsUnown -.public LogMessageByIdQuiet -.public LogMessageByIdWithPopupCheckUser -.public LogMessageByIdWithPopupCheckUserUnknown .public OBJ_GRAPHICS_CONTROLS_PTR -.public ov10_022C44C8 -.public ov10_022C48EC -.public ov29_022E563C -.public ov29_022FB51C -.public ov29_02344BF8 -.public ov29_02347378 -.public ov29_023531BC +.public ShouldDisplayEntityWrapper .public ov29_023537B4 .public ov29_023537BC .public ov29_0237C864 -.public PlayDungeonTipSound__022EB66C -.public RetrieveFromItemList1 -.public RevealAttackedTile -.public SECONDARY_TERRAIN_TYPES -.public SetEntityPixelPosXY -.public SetPreprocessorArgsIdVal -.public ShouldDisplayEntityWrapper -.public SinAbs4096 -.public SpawnItem .public sub_0200D1FC -.public SubstitutePlaceholderItemTags -.public UNOWN_STONE_DROP_CHANCE diff --git a/asm/include/overlay_29_02345AD8.inc b/asm/include/overlay_29_02345AD8.inc new file mode 100644 index 00000000..68cc3363 --- /dev/null +++ b/asm/include/overlay_29_02345AD8.inc @@ -0,0 +1,41 @@ +#pragma once +.public AdvanceFrame +.public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST +.public DISPLACEMENTS_WITHIN_3 +.public DUNGEON_PTR +.public DisplayItem +.public DisplayMessage2 +.public DrawMinimapTile +.public DungeonRandInt +.public DungeonRandOutcome__022EAB20 +.public EntityIsValid__02345698 +.public GenerateItem +.public GetExclusiveItem +.public GetMissionRank__0204FAE0 +.public GetTile +.public GetTreasureBoxChances +.public IncrementEntityPixelPosXY +.public IsCurrentFixedRoomBossFight +.public IsMarowakTrainingMaze +.public IsUnown +.public LogMessageByIdQuiet +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserUnknown +.public PlayDungeonTipSound__022EB66C +.public RetrieveFromItemList1 +.public RevealAttackedTile +.public SECONDARY_TERRAIN_TYPES +.public SetEntityPixelPosXY +.public SetPreprocessorArgsIdVal +.public SinAbs4096 +.public SpawnItem +.public SubstitutePlaceholderItemTags +.public UNOWN_STONE_DROP_CHANCE +.public _s32_div_f +.public ov10_022C44C8 +.public ov10_022C48EC +.public ov29_022E563C +.public ov29_022FB51C +.public ov29_02344BF8 +.public ov29_02347378 +.public ov29_023531BC diff --git a/asm/overlay_29_022E2978.s b/asm/overlay_29_022E34A8.s similarity index 77% rename from asm/overlay_29_022E2978.s rename to asm/overlay_29_022E34A8.s index 69b51462..c1468a67 100644 --- a/asm/overlay_29_022E2978.s +++ b/asm/overlay_29_022E34A8.s @@ -1,182 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_022E2978.inc" + .include "overlay_29_022E34A8.inc" .text - arm_func_start PopulateActiveMonsterPtrs -PopulateActiveMonsterPtrs: ; 0x022E2978 -#ifdef JAPAN -#define OV29_022E2978_OFFSET -0xA4 -#else -#define OV29_022E2978_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, #0 - ldr r6, _022E2A34 ; =DUNGEON_PTR - mov r4, r5 -_022E2988: - ldr r0, [r6] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb28 + OV29_022E2978_OFFSET] - mov r0, r7 - bl EntityIsValid__022E1A1C - cmp r0, #0 - ldrne r0, [r6] - add r4, r4, #1 - addne r0, r0, r5, lsl #2 - addne r0, r0, #0x12000 - strne r7, [r0, #0xb78 + OV29_022E2978_OFFSET] - addne r5, r5, #1 - cmp r4, #4 - blt _022E2988 - ldr r6, _022E2A34 ; =DUNGEON_PTR - mov r4, #0 -_022E29CC: - ldr r0, [r6] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 - ldr r7, [r0, #0xb38 + OV29_022E2978_OFFSET] - mov r0, r7 - bl EntityIsValid__022E1A1C - cmp r0, #0 - ldrne r0, [r6] - add r4, r4, #1 - addne r0, r0, r5, lsl #2 - addne r0, r0, #0x12000 - strne r7, [r0, #0xb78 + OV29_022E2978_OFFSET] - addne r5, r5, #1 - cmp r4, #0x10 - blt _022E29CC - mov r2, #0 - ldr r1, _022E2A34 ; =DUNGEON_PTR - b _022E2A28 -_022E2A14: - ldr r0, [r1] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 - str r2, [r0, #0xb78 + OV29_022E2978_OFFSET] - add r5, r5, #1 -_022E2A28: - cmp r5, #0x14 - blt _022E2A14 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022E2A34: .word DUNGEON_PTR - arm_func_end PopulateActiveMonsterPtrs - - arm_func_start GetTeamMemberIndex -GetTeamMemberIndex: ; 0x022E2A38 - ldr r1, _022E2A74 ; =DUNGEON_PTR - mov r2, #0 - ldr r3, [r1] - b _022E2A64 -_022E2A48: - add r1, r3, r2, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - cmp r0, r1 - moveq r0, r2 - bxeq lr - add r2, r2, #1 -_022E2A64: - cmp r2, #4 - blt _022E2A48 - mvn r0, #0 - bx lr - .align 2, 0 -_022E2A74: .word DUNGEON_PTR - arm_func_end GetTeamMemberIndex - - arm_func_start GetMonsterOrTrapName -GetMonsterOrTrapName: ; 0x022E2A78 - stmdb sp!, {r4, lr} - ldr r2, [r1] - mov r4, r0 - cmp r2, #1 - beq _022E2AA0 - cmp r2, #2 - beq _022E2AAC - cmp r2, #3 - ldmeqia sp!, {r4, pc} - b _022E2ABC -_022E2AA0: - ldr r1, [r1, #0xb4] - bl GetMonsterName - ldmia sp!, {r4, pc} -_022E2AAC: - ldr r1, [r1, #0xb4] - ldrb r1, [r1] - bl GetTrapName - ldmia sp!, {r4, pc} -_022E2ABC: - ldr r0, _022E2AD4 ; =0x00000A42 - bl StringFromId - mov r1, r0 - mov r0, r4 - bl strcpy - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -_022E2AD4: .word 0x00000B42 -#else -_022E2AD4: .word 0x00000A42 -#endif - arm_func_end GetMonsterOrTrapName - - arm_func_start SubstitutePlaceholderStringTags -SubstitutePlaceholderStringTags: ; 0x022E2AD8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r5, r2 - bl GetMessageLogPreprocessorArgs - ldr r1, [r6] - mov r4, r0 - cmp r1, #1 - beq _022E2B10 - cmp r1, #2 - beq _022E2B3C - cmp r1, #3 - beq _022E2B2C - b _022E2B50 -_022E2B10: - mov r1, #0 - str r1, [sp] - ldr r2, [r6, #0xb4] - mov r1, r7 - mov r3, r5 - bl SetPreprocessorArgsStringToName - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022E2B2C: - ldr r2, [r6, #0xb4] - mov r1, r7 - bl PrepareItemForPrinting2 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022E2B3C: - ldr r2, [r6, #0xb4] - mov r1, r7 - ldrb r2, [r2] - bl SubstitutePlaceholderTrapTags - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022E2B50: - ldr r0, _022E2B64 ; =0x00000A42 - bl StringFromId - add r1, r4, r7, lsl #2 - str r0, [r1, #0x38] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -_022E2B64: .word 0x00000B42 -#else -_022E2B64: .word 0x00000A42 -#endif - arm_func_end SubstitutePlaceholderStringTags - #ifdef EUROPE arm_func_start ov29_022E34A8_EU ov29_022E34A8_EU: ; 0x022E34A8 diff --git a/asm/overlay_29_022E37DC.s b/asm/overlay_29_022E37DC.s index ee84a0dc..65c27938 100644 --- a/asm/overlay_29_022E37DC.s +++ b/asm/overlay_29_022E37DC.s @@ -243,319 +243,3 @@ _022E3AA0: .align 2, 0 _022E3AB0: .word DUNGEON_PTR arm_func_end ov29_022E3A58 - - arm_func_start UpdateStatusIconFlags -UpdateStatusIconFlags: ; 0x022E3AB4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, r0 - bl EntityIsValid__022E37B8 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r2, [r4, #0xb4] - mov r1, #0 - ldrsh r4, [r2, #2] - mov r5, #1 - mov r0, r1 - cmp r4, #0xb9 - addne r3, r5, #0x310 - cmpne r4, r3 - bne _022E3AF8 - ldrb r3, [r2, #0xbe] - cmp r3, #0x7f - moveq r5, #0 -_022E3AF8: - cmp r5, #0 - beq _022E3B1C - ldrb r5, [r2, #0xbd] - ldr r4, _022E3D94 ; =STATUS_ICON_ARRAY_SLEEP - add r3, r4, r5, lsl #3 - ldr r4, [r4, r5, lsl #3] - ldr r3, [r3, #4] - orr r1, r1, r4 - orr r0, r0, r3 -_022E3B1C: - ldrb r7, [r2, #0xbf] - ldr r4, _022E3D98 ; =STATUS_ICON_ARRAY_BURN - ldrb r6, [r2, #0xc4] - ldr r3, _022E3D9C ; =STATUS_ICON_ARRAY_FREEZE - add r5, r4, r7, lsl #3 - add ip, r3, r6, lsl #3 - ldr r4, [r4, r7, lsl #3] - ldr lr, [r5, #4] - ldrb sl, [r2, #0xd0] - ldr r8, _022E3DA0 ; =STATUS_ICON_ARRAY_CRINGE - ldrb r7, [r2, #0xd2] - ldr r5, _022E3DA4 ; =STATUS_ICON_ARRAY_BIDE - add fp, r8, sl, lsl #3 - add sb, r5, r7, lsl #3 - orr r0, r0, lr - ldr lr, [ip, #4] - ldrb ip, [r2, #0xd5] - orr r1, r1, r4 - ldr r4, _022E3DA8 ; =STATUS_ICON_ARRAY_REFLECT - ldr r3, [r3, r6, lsl #3] - add r6, r4, ip, lsl #3 - orr r0, r0, lr - ldr lr, [fp, #4] - ldrb fp, [r2, #0xd8] - orr r1, r1, r3 - ldr r3, _022E3DAC ; =STATUS_ICON_ARRAY_CURSE - ldr r8, [r8, sl, lsl #3] - add sl, r3, fp, lsl #3 - orr r0, r0, lr - ldr lr, [sb, #4] - ldrb sb, [r2, #0xe0] - orr r1, r1, r8 - ldr r8, _022E3DB0 ; =STATUS_ICON_ARRAY_LEECH_SEED - ldr r5, [r5, r7, lsl #3] - add r7, r8, sb, lsl #3 - orr r0, r0, lr - ldr lr, [r6, #4] - ldrb r6, [r2, #0xec] - orr r1, r1, r5 - ldr r5, _022E3DB4 ; =STATUS_ICON_ARRAY_SURE_SHOT - ldr ip, [r4, ip, lsl #3] - add r4, r5, r6, lsl #3 - orr r0, r0, lr - ldr sl, [sl, #4] - ldrb lr, [r2, #0xee] - orr r1, r1, ip - ldr ip, _022E3DB8 ; =STATUS_ICON_ARRAY_LONG_TOSS - ldr fp, [r3, fp, lsl #3] - add r3, ip, lr, lsl #3 - orr r0, r0, sl - ldr sl, [r7, #4] - ldrb r7, [r2, #0xef] - orr fp, r1, fp - ldr r1, _022E3DBC ; =STATUS_ICON_ARRAY_INVISIBLE - ldr sb, [r8, sb, lsl #3] - add r8, r1, r7, lsl #3 - orr r0, r0, sl - ldr sl, [r4, #4] - ldrb r4, [r2, #0xf1] - orr fp, fp, sb - ldr sb, _022E3DC0 ; =STATUS_ICON_ARRAY_BLINDED - ldr r6, [r5, r6, lsl #3] - add r5, sb, r4, lsl #3 - orr r0, r0, sl - ldr sl, [r3, #4] - ldrb r3, [r2, #0xf3] - orr r6, fp, r6 - ldr fp, _022E3DC4 ; =STATUS_ICON_ARRAY_MUZZLED - ldr ip, [ip, lr, lsl #3] - add lr, fp, r3, lsl #3 - orr sl, r0, sl - ldr r0, [r8, #4] - ldr r1, [r1, r7, lsl #3] - orr r7, r6, ip - ldr r6, [sb, r4, lsl #3] - orr r8, r7, r1 - ldr r4, [r5, #4] - orr r7, sl, r0 - ldr r1, [fp, r3, lsl #3] - orr r5, r8, r6 - ldr r0, [lr, #4] - orr r3, r7, r4 - orr r0, r3, r0 - orr r8, r5, r1 - ldrb r7, [r2, #0xf5] - ldr r6, _022E3DC8 ; =STATUS_ICON_ARRAY_MIRACLE_EYE - ldrb r5, [r2, #0xf7] - ldr r4, _022E3DCC ; =STATUS_ICON_ARRAY_MAGNET_RISE - add r1, r6, r7, lsl #3 - add r3, r4, r5, lsl #3 - ldr r7, [r6, r7, lsl #3] - ldr r6, [r1, #4] - ldrb r1, [r2, #0xfd] - ldr r4, [r4, r5, lsl #3] - ldr r3, [r3, #4] - orr r0, r0, r6 - orr r0, r0, r3 - cmp r1, #0 - orr r5, r8, r7 - orr r1, r5, r4 - ldrb r3, [r2, #0xfe] - orrne r0, r0, #0 - orrne r1, r1, #0x1000000 - cmp r3, #0 - ldrb r3, [r2, #6] - orrne r0, r0, #0 - orrne r1, r1, #0x2000000 - cmp r3, #0 - bne _022E3D00 - ldrsh r5, [r2, #0x12] - ldrsh r4, [r2, #0x16] - ldr r3, _022E3DD0 ; =0x000003E7 - add r5, r5, r4 - cmp r5, r3 - movgt r5, r3 - mov r3, r5, asr #1 - ldrsh r4, [r2, #0x10] - add r3, r5, r3, lsr #30 - cmp r4, r3, asr #2 - orrlt r0, r0, #0 - orrlt r1, r1, #0x2000 -_022E3D00: - ldr r3, _022E3DD4 ; =DUNGEON_PTR - ldr r3, [r3] - ldrb r3, [r3, #0x78d] - cmp r3, #0 - beq _022E3D30 - ldrb r3, [r2, #0x62] - tst r3, #1 - movne r3, #1 - moveq r3, #0 - tst r3, #0xff - orrne r0, r0, #0 - orrne r1, r1, #0x2000 -_022E3D30: - ldr r3, [r2, #0x34] - cmp r3, #0x100 - ldrge r3, [r2, #0x38] - cmpge r3, #0x100 - ldrge r3, [r2, #0x3c] - cmpge r3, #0x100 - ldrge r3, [r2, #0x40] - cmpge r3, #0x100 - ldrgesh r3, [r2, #0x24] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x26] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x28] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x2a] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x2c] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x2e] - cmpge r3, #0xa - orrlt r1, r1, #0x8000000 - orrlt r0, r0, #0 -#ifdef JAPAN - str r1, [r2, #0x214] - str r0, [r2, #0x218] -#else - str r1, [r2, #0x218] - str r0, [r2, #0x21c] -#endif - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022E3D94: .word STATUS_ICON_ARRAY_SLEEP -_022E3D98: .word STATUS_ICON_ARRAY_BURN -_022E3D9C: .word STATUS_ICON_ARRAY_FREEZE -_022E3DA0: .word STATUS_ICON_ARRAY_CRINGE -_022E3DA4: .word STATUS_ICON_ARRAY_BIDE -_022E3DA8: .word STATUS_ICON_ARRAY_REFLECT -_022E3DAC: .word STATUS_ICON_ARRAY_CURSE -_022E3DB0: .word STATUS_ICON_ARRAY_LEECH_SEED -_022E3DB4: .word STATUS_ICON_ARRAY_SURE_SHOT -_022E3DB8: .word STATUS_ICON_ARRAY_LONG_TOSS -_022E3DBC: .word STATUS_ICON_ARRAY_INVISIBLE -_022E3DC0: .word STATUS_ICON_ARRAY_BLINDED -_022E3DC4: .word STATUS_ICON_ARRAY_MUZZLED -_022E3DC8: .word STATUS_ICON_ARRAY_MIRACLE_EYE -_022E3DCC: .word STATUS_ICON_ARRAY_MAGNET_RISE -_022E3DD0: .word 0x000003E7 -_022E3DD4: .word DUNGEON_PTR - arm_func_end UpdateStatusIconFlags - - arm_func_start PlayQuestionMarkEffect -PlayQuestionMarkEffect: ; 0x022E3DD8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x144 - bl GetEffectAnimationWanOffset - 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, #0x144 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end PlayQuestionMarkEffect - - arm_func_start PlayExclamationPointEffect__022E47D4 -PlayExclamationPointEffect__022E47D4: ; 0x022E3E24 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E3E70 ; =0x00000143 - bl GetEffectAnimationWanOffset - 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, _022E3E70 ; =0x00000143 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E3E70: .word 0x00000143 - arm_func_end PlayExclamationPointEffect__022E47D4 - - arm_func_start ov29_022E3E74 -ov29_022E3E74: ; 0x022E3E74 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x25 - bl GetEffectAnimationWanOffset - 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, #0x25 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - ldr r1, _022E3ECC ; =0x0000030E - mov r0, r4 - bl PlaySeByIdIfShouldDisplayEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E3ECC: .word 0x0000030E - arm_func_end ov29_022E3E74 - - arm_func_start PlayExclamationPointEffect__022E4880 -PlayExclamationPointEffect__022E4880: ; 0x022E3ED0 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E3F1C ; =0x00000143 - bl GetEffectAnimationWanOffset - 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, _022E3F1C ; =0x00000143 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E3F1C: .word 0x00000143 - arm_func_end PlayExclamationPointEffect__022E4880 diff --git a/asm/overlay_29_022EC62C.s b/asm/overlay_29_022EC62C.s index defbead2..dec53715 100644 --- a/asm/overlay_29_022EC62C.s +++ b/asm/overlay_29_022EC62C.s @@ -142,480 +142,3 @@ _022EC7C8: _022EC7E0: .word DUNGEON_PTR _022EC7E4: .word ov29_023522B6 arm_func_end TrySpawnMonsterAndActivatePlusMinus - - arm_func_start IsFloorOver -IsFloorOver: ; 0x022EC7E8 - stmdb sp!, {r3, lr} - ldr r0, _022EC858 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #8] - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} - bl GetLeader - cmp r0, #0 - ldreq r1, _022EC858 ; =DUNGEON_PTR - moveq r0, #1 - ldreq r1, [r1] - streqb r0, [r1, #0x758] - ldmeqia sp!, {r3, pc} - ldr r0, _022EC858 ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #6] - cmp r0, #1 - moveq r0, #2 - streqb r0, [r1, #0x758] - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r0, #2 - moveq r0, #2 - streqb r0, [r1, #0x758] - moveq r0, #1 - movne r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_022EC858: .word DUNGEON_PTR - arm_func_end IsFloorOver - - arm_func_start ov29_022EC85C -ov29_022EC85C: ; 0x022EC85C - stmdb sp!, {r3, lr} - bl GetForcedLossReason - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} - bl IsFloorOver - ldmia sp!, {r3, pc} - arm_func_end ov29_022EC85C - - arm_func_start ov29_022EC878 -ov29_022EC878: ; 0x022EC878 - mov r2, #0 - strb r2, [r0] - strb r2, [r0, #1] - strb r2, [r0, #2] - strb r2, [r0, #3] - strb r2, [r0, #4] - ldr r1, _022EC8A4 ; =ov29_02353598 - strb r2, [r0, #5] - mov r0, #1 - strb r0, [r1] - bx lr - .align 2, 0 -_022EC8A4: .word ov29_02353598 - arm_func_end ov29_022EC878 - - arm_func_start ov29_022EC8A8 -ov29_022EC8A8: ; 0x022EC8A8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r6, r0 - mov r5, r1 - mov r0, r2 - mov r1, #0x30 - mov r4, r3 - bl _s32_div_f - mov r3, r1, lsl #1 - and r0, r3, #0xff - mov r2, r0, lsr #1 - ldr r1, _022EC998 ; =ov29_02352390 - mov r0, #0xc0 - strb r3, [r6, #4] - add r2, r2, #1 - strb r2, [r6, #2] - add r4, r4, #2 - smlabb r5, r5, r0, r1 - b _022EC96C -_022EC8F0: - strb r4, [r6, #3] - mov r8, #0x63 - ldr r7, _022EC99C ; =DUNGEON_PTR - b _022EC93C -_022EC900: - ldrb r1, [r6, #3] - mov r0, r8 - sub r1, r1, #1 - strb r1, [r6, #3] - ldrb r1, [r6, #5] - eor r1, r1, #1 - strb r1, [r6, #5] - ldrb r3, [r6, #4] - and r2, r1, #0xff - ldr r1, [r7] - add r2, r3, r2 - ldr r2, [r5, r2, lsl #2] - add r1, r1, #0x1a000 -#ifdef JAPAN - str r2, [r1, #0x18c] -#else - str r2, [r1, #0x230] -#endif - bl AdvanceFrame -_022EC93C: - ldrb r0, [r6, #3] - cmp r0, #0 - bne _022EC900 - ldrb r0, [r6, #4] - cmp r0, #0 - subne r0, r0, #2 - strneb r0, [r6, #4] - mov r0, #0 - strb r0, [r6, #5] - ldrb r0, [r6, #2] - sub r0, r0, #1 - strb r0, [r6, #2] -_022EC96C: - ldrb r0, [r6, #2] - cmp r0, #0 - bne _022EC8F0 - ldr r0, _022EC99C ; =DUNGEON_PTR - mov r2, #0 - ldr r0, [r0] - ldr r1, _022EC9A0 ; =ov29_02353598 - add r0, r0, #0x1a000 -#ifdef JAPAN - str r2, [r0, #0x18c] -#else - str r2, [r0, #0x230] -#endif - strb r2, [r1] - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_022EC998: .word ov29_02352390 -_022EC99C: .word DUNGEON_PTR -_022EC9A0: .word ov29_02353598 - arm_func_end ov29_022EC8A8 - - arm_func_start ov29_022EC9A4 -ov29_022EC9A4: ; 0x022EC9A4 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - mov r3, #0xc -#ifdef JAPAN - smulbb r4, r1, r3 - ldr r1, _022ECAD8 ; =ov10_022C6320 - mov r6, r0 - ldrb r4, [r1, r4] -#else - smulbb r3, r1, r3 - ldr r1, _022ECAD8 ; =ov10_022C6320 - mov r6, r0 - ldrb r4, [r1, r3] -#endif - mov r5, r2 - cmp r4, #5 - beq _022ECA28 - cmp r5, #0 - bne _022EC9E0 -#ifdef JAPAN - add r1, r3, #0x930 -#else - ldr r1, _022ECADC ; =0x00000BFD -#endif - bl LogMessageByIdWithPopupCheckUser - b _022ECA18 -_022EC9E0: - cmp r5, #1 - bne _022EC9F4 - ldr r1, _022ECAE0 ; =0x00000BFE - bl LogMessageByIdWithPopupCheckUser - b _022ECA18 -_022EC9F4: - cmp r5, #2 - bne _022ECA08 - ldr r1, _022ECAE4 ; =0x00000BFF - bl LogMessageByIdWithPopupCheckUser - b _022ECA18 -_022ECA08: - cmp r5, #3 - bne _022ECA18 -#ifdef JAPAN - ldr r1, _022EE14C ; =0x0000093F -#else - mov r1, #0xc00 -#endif - bl LogMessageByIdWithPopupCheckUser -_022ECA18: - mov r0, r4 - mov r1, #0 - bl ov29_022E5DBC - b _022ECAD0 -_022ECA28: - bl ov29_022EAEF0 - mov r4, r0 - cmp r5, #0 - bne _022ECA48 -#ifdef JAPAN - mov r0, r6 - mov r1, #0x940 -#else - ldr r1, _022ECAE8 ; =0x00000C01 - mov r0, r6 -#endif - bl LogMessageByIdWithPopupCheckUser - b _022ECA8C -_022ECA48: - cmp r5, #1 - bne _022ECA60 - ldr r1, _022ECAEC ; =0x00000C02 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser - b _022ECA8C -_022ECA60: - cmp r5, #2 - bne _022ECA78 - ldr r1, _022ECAF0 ; =0x00000C03 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser - b _022ECA8C -_022ECA78: - cmp r5, #3 - bne _022ECA8C - ldr r1, _022ECAF4 ; =0x00000C04 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser -_022ECA8C: - add r0, sp, #0 - bl ov29_022EC878 - ldr r0, _022ECAF8 ; =ov29_02352380 - ldr r0, [r0, r5, lsl #2] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl ChangeDungeonMusic - mov r0, r5, lsl #2 - add r0, r0, #8 - mov r2, r0, lsl #0x10 - mov r3, r2, asr #0x10 - add r0, sp, #0 - mov r1, r5 - mov r2, #0x10 - bl ov29_022EC8A8 - mov r0, r4 - bl ChangeDungeonMusic -_022ECAD0: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022ECAD8: .word ov10_022C6320 -#ifdef JAPAN -_022ECAE0: .word 0x0000093D -_022ECAE4: .word 0x0000093E -_022EE14C: .word 0x0000093F -_022ECAEC: .word 0x00000941 -_022ECAF0: .word 0x00000942 -_022ECAF4: .word 0x00000943 -#else -_022ECADC: .word 0x00000BFD -_022ECAE0: .word 0x00000BFE -_022ECAE4: .word 0x00000BFF -_022ECAE8: .word 0x00000C01 -_022ECAEC: .word 0x00000C02 -_022ECAF0: .word 0x00000C03 -_022ECAF4: .word 0x00000C04 -#endif -_022ECAF8: .word ov29_02352380 - arm_func_end ov29_022EC9A4 - - arm_func_start ov29_022ECAFC -ov29_022ECAFC: ; 0x022ECAFC - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl ov29_022EC878 - mov r0, r4, lsl #2 - add r0, r0, #2 - mov r2, r0, lsl #0x10 - mov r3, r2, asr #0x10 - add r0, sp, #0 - mov r1, r4 - mov r2, #8 - bl ov29_022EC8A8 - add sp, sp, #8 - ldmia sp!, {r4, pc} - arm_func_end ov29_022ECAFC - - arm_func_start ov29_022ECB38 -ov29_022ECB38: ; 0x022ECB38 - ldr r0, _022ECB44 ; =ov29_02353598 - ldrb r0, [r0] - bx lr - .align 2, 0 -_022ECB44: .word ov29_02353598 - arm_func_end ov29_022ECB38 - - arm_func_start DecrementWindCounter -DecrementWindCounter: ; 0x022ECB48 -#ifdef JAPAN -#define DECREMENT_WIND_COUNTER_OFFSET -0xA4 -#else -#define DECREMENT_WIND_COUNTER_OFFSET 0 -#endif - stmdb sp!, {r4, lr} - bl GetLeader - movs r4, r0 - moveq r0, #0 - beq _022ECB70 - ldr r0, [r4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_022ECB70: - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x700 - ldrsh r1, [r0, #0x84] - cmp r1, #0 - subgt r1, r1, #1 - strgth r1, [r0, #0x84] - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r1, [r0] - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - cmp r0, #1 - movlt r0, #3 - strltb r0, [r1, #0x79a] - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x79a] - cmp r0, #0 - bne _022ECC2C - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - cmp r0, #0xfa - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x79a] - ldmia sp!, {r4, pc} -_022ECC2C: - cmp r0, #1 - bne _022ECC9C - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - cmp r0, #0x96 - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - mov r1, #2 - ldr r0, [r0] - strb r1, [r0, #0x79a] - ldmia sp!, {r4, pc} -_022ECC9C: - cmp r0, #2 - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - bne _022ECD0C - cmp r0, #0x32 - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - mov r1, #3 - ldr r0, [r0] - strb r1, [r0, #0x79a] - ldmia sp!, {r4, pc} -_022ECD0C: - cmp r0, #1 - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r1, _022ECD80 ; =0x0000025D - ldr r3, [r0] - mov ip, #4 - mov r0, r4 - mov r2, r4 - strb ip, [r3, #0x79a] - bl HandleFaint - ldmia sp!, {r4, pc} - .align 2, 0 -_022ECD7C: .word DUNGEON_PTR -_022ECD80: .word 0x0000025D - arm_func_end DecrementWindCounter - - arm_func_start ov29_022ECD84 -ov29_022ECD84: ; 0x022ECD84 - stmdb sp!, {r4, lr} - mov r4, r0 - bl EntityIsValid__022ECDC0 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r4] - cmp r0, #1 - ldmneia sp!, {r4, pc} - ldr r1, [r4, #0xb4] - cmp r1, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _022ECDBC ; =ov29_0237C974 - bl GetMonsterName - ldmia sp!, {r4, pc} - .align 2, 0 -_022ECDBC: .word ov29_0237C974 - arm_func_end ov29_022ECD84 diff --git a/asm/overlay_29_022EC85C.s b/asm/overlay_29_022EC85C.s new file mode 100644 index 00000000..8a5da291 --- /dev/null +++ b/asm/overlay_29_022EC85C.s @@ -0,0 +1,447 @@ + .include "asm/macros.inc" + .include "overlay_29_022EC85C.inc" + + .text + + arm_func_start ov29_022EC85C +ov29_022EC85C: ; 0x022EC85C + stmdb sp!, {r3, lr} + bl GetForcedLossReason + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, pc} + bl IsFloorOver + ldmia sp!, {r3, pc} + arm_func_end ov29_022EC85C + + arm_func_start ov29_022EC878 +ov29_022EC878: ; 0x022EC878 + mov r2, #0 + strb r2, [r0] + strb r2, [r0, #1] + strb r2, [r0, #2] + strb r2, [r0, #3] + strb r2, [r0, #4] + ldr r1, _022EC8A4 ; =ov29_02353598 + strb r2, [r0, #5] + mov r0, #1 + strb r0, [r1] + bx lr + .align 2, 0 +_022EC8A4: .word ov29_02353598 + arm_func_end ov29_022EC878 + + arm_func_start ov29_022EC8A8 +ov29_022EC8A8: ; 0x022EC8A8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, r0 + mov r5, r1 + mov r0, r2 + mov r1, #0x30 + mov r4, r3 + bl _s32_div_f + mov r3, r1, lsl #1 + and r0, r3, #0xff + mov r2, r0, lsr #1 + ldr r1, _022EC998 ; =ov29_02352390 + mov r0, #0xc0 + strb r3, [r6, #4] + add r2, r2, #1 + strb r2, [r6, #2] + add r4, r4, #2 + smlabb r5, r5, r0, r1 + b _022EC96C +_022EC8F0: + strb r4, [r6, #3] + mov r8, #0x63 + ldr r7, _022EC99C ; =DUNGEON_PTR + b _022EC93C +_022EC900: + ldrb r1, [r6, #3] + mov r0, r8 + sub r1, r1, #1 + strb r1, [r6, #3] + ldrb r1, [r6, #5] + eor r1, r1, #1 + strb r1, [r6, #5] + ldrb r3, [r6, #4] + and r2, r1, #0xff + ldr r1, [r7] + add r2, r3, r2 + ldr r2, [r5, r2, lsl #2] + add r1, r1, #0x1a000 +#ifdef JAPAN + str r2, [r1, #0x18c] +#else + str r2, [r1, #0x230] +#endif + bl AdvanceFrame +_022EC93C: + ldrb r0, [r6, #3] + cmp r0, #0 + bne _022EC900 + ldrb r0, [r6, #4] + cmp r0, #0 + subne r0, r0, #2 + strneb r0, [r6, #4] + mov r0, #0 + strb r0, [r6, #5] + ldrb r0, [r6, #2] + sub r0, r0, #1 + strb r0, [r6, #2] +_022EC96C: + ldrb r0, [r6, #2] + cmp r0, #0 + bne _022EC8F0 + ldr r0, _022EC99C ; =DUNGEON_PTR + mov r2, #0 + ldr r0, [r0] + ldr r1, _022EC9A0 ; =ov29_02353598 + add r0, r0, #0x1a000 +#ifdef JAPAN + str r2, [r0, #0x18c] +#else + str r2, [r0, #0x230] +#endif + strb r2, [r1] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_022EC998: .word ov29_02352390 +_022EC99C: .word DUNGEON_PTR +_022EC9A0: .word ov29_02353598 + arm_func_end ov29_022EC8A8 + + arm_func_start ov29_022EC9A4 +ov29_022EC9A4: ; 0x022EC9A4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r3, #0xc +#ifdef JAPAN + smulbb r4, r1, r3 + ldr r1, _022ECAD8 ; =ov10_022C6320 + mov r6, r0 + ldrb r4, [r1, r4] +#else + smulbb r3, r1, r3 + ldr r1, _022ECAD8 ; =ov10_022C6320 + mov r6, r0 + ldrb r4, [r1, r3] +#endif + mov r5, r2 + cmp r4, #5 + beq _022ECA28 + cmp r5, #0 + bne _022EC9E0 +#ifdef JAPAN + add r1, r3, #0x930 +#else + ldr r1, _022ECADC ; =0x00000BFD +#endif + bl LogMessageByIdWithPopupCheckUser + b _022ECA18 +_022EC9E0: + cmp r5, #1 + bne _022EC9F4 + ldr r1, _022ECAE0 ; =0x00000BFE + bl LogMessageByIdWithPopupCheckUser + b _022ECA18 +_022EC9F4: + cmp r5, #2 + bne _022ECA08 + ldr r1, _022ECAE4 ; =0x00000BFF + bl LogMessageByIdWithPopupCheckUser + b _022ECA18 +_022ECA08: + cmp r5, #3 + bne _022ECA18 +#ifdef JAPAN + ldr r1, _022EE14C ; =0x0000093F +#else + mov r1, #0xc00 +#endif + bl LogMessageByIdWithPopupCheckUser +_022ECA18: + mov r0, r4 + mov r1, #0 + bl ov29_022E5DBC + b _022ECAD0 +_022ECA28: + bl ov29_022EAEF0 + mov r4, r0 + cmp r5, #0 + bne _022ECA48 +#ifdef JAPAN + mov r0, r6 + mov r1, #0x940 +#else + ldr r1, _022ECAE8 ; =0x00000C01 + mov r0, r6 +#endif + bl LogMessageByIdWithPopupCheckUser + b _022ECA8C +_022ECA48: + cmp r5, #1 + bne _022ECA60 + ldr r1, _022ECAEC ; =0x00000C02 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser + b _022ECA8C +_022ECA60: + cmp r5, #2 + bne _022ECA78 + ldr r1, _022ECAF0 ; =0x00000C03 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser + b _022ECA8C +_022ECA78: + cmp r5, #3 + bne _022ECA8C + ldr r1, _022ECAF4 ; =0x00000C04 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser +_022ECA8C: + add r0, sp, #0 + bl ov29_022EC878 + ldr r0, _022ECAF8 ; =ov29_02352380 + ldr r0, [r0, r5, lsl #2] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl ChangeDungeonMusic + mov r0, r5, lsl #2 + add r0, r0, #8 + mov r2, r0, lsl #0x10 + mov r3, r2, asr #0x10 + add r0, sp, #0 + mov r1, r5 + mov r2, #0x10 + bl ov29_022EC8A8 + mov r0, r4 + bl ChangeDungeonMusic +_022ECAD0: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022ECAD8: .word ov10_022C6320 +#ifdef JAPAN +_022ECAE0: .word 0x0000093D +_022ECAE4: .word 0x0000093E +_022EE14C: .word 0x0000093F +_022ECAEC: .word 0x00000941 +_022ECAF0: .word 0x00000942 +_022ECAF4: .word 0x00000943 +#else +_022ECADC: .word 0x00000BFD +_022ECAE0: .word 0x00000BFE +_022ECAE4: .word 0x00000BFF +_022ECAE8: .word 0x00000C01 +_022ECAEC: .word 0x00000C02 +_022ECAF0: .word 0x00000C03 +_022ECAF4: .word 0x00000C04 +#endif +_022ECAF8: .word ov29_02352380 + arm_func_end ov29_022EC9A4 + + arm_func_start ov29_022ECAFC +ov29_022ECAFC: ; 0x022ECAFC + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl ov29_022EC878 + mov r0, r4, lsl #2 + add r0, r0, #2 + mov r2, r0, lsl #0x10 + mov r3, r2, asr #0x10 + add r0, sp, #0 + mov r1, r4 + mov r2, #8 + bl ov29_022EC8A8 + add sp, sp, #8 + ldmia sp!, {r4, pc} + arm_func_end ov29_022ECAFC + + arm_func_start ov29_022ECB38 +ov29_022ECB38: ; 0x022ECB38 + ldr r0, _022ECB44 ; =ov29_02353598 + ldrb r0, [r0] + bx lr + .align 2, 0 +_022ECB44: .word ov29_02353598 + arm_func_end ov29_022ECB38 + + arm_func_start DecrementWindCounter +DecrementWindCounter: ; 0x022ECB48 +#ifdef JAPAN +#define DECREMENT_WIND_COUNTER_OFFSET -0xA4 +#else +#define DECREMENT_WIND_COUNTER_OFFSET 0 +#endif + stmdb sp!, {r4, lr} + bl GetLeader + movs r4, r0 + moveq r0, #0 + beq _022ECB70 + ldr r0, [r4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_022ECB70: + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x700 + ldrsh r1, [r0, #0x84] + cmp r1, #0 + subgt r1, r1, #1 + strgth r1, [r0, #0x84] + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r1, [r0] + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + cmp r0, #1 + movlt r0, #3 + strltb r0, [r1, #0x79a] + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x79a] + cmp r0, #0 + bne _022ECC2C + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + cmp r0, #0xfa + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x79a] + ldmia sp!, {r4, pc} +_022ECC2C: + cmp r0, #1 + bne _022ECC9C + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + cmp r0, #0x96 + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + mov r1, #2 + ldr r0, [r0] + strb r1, [r0, #0x79a] + ldmia sp!, {r4, pc} +_022ECC9C: + cmp r0, #2 + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + bne _022ECD0C + cmp r0, #0x32 + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + mov r1, #3 + ldr r0, [r0] + strb r1, [r0, #0x79a] + ldmia sp!, {r4, pc} +_022ECD0C: + cmp r0, #1 + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r1, _022ECD80 ; =0x0000025D + ldr r3, [r0] + mov ip, #4 + mov r0, r4 + mov r2, r4 + strb ip, [r3, #0x79a] + bl HandleFaint + ldmia sp!, {r4, pc} + .align 2, 0 +_022ECD7C: .word DUNGEON_PTR +_022ECD80: .word 0x0000025D + arm_func_end DecrementWindCounter + + arm_func_start ov29_022ECD84 +ov29_022ECD84: ; 0x022ECD84 + stmdb sp!, {r4, lr} + mov r4, r0 + bl EntityIsValid__022ECDC0 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4] + cmp r0, #1 + ldmneia sp!, {r4, pc} + ldr r1, [r4, #0xb4] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _022ECDBC ; =ov29_0237C974 + bl GetMonsterName + ldmia sp!, {r4, pc} + .align 2, 0 +_022ECDBC: .word ov29_0237C974 + arm_func_end ov29_022ECD84 diff --git a/asm/overlay_29_02305C28.s b/asm/overlay_29_02305C28.s index e932355e..823fd7a3 100644 --- a/asm/overlay_29_02305C28.s +++ b/asm/overlay_29_02305C28.s @@ -429,2309 +429,3 @@ _0230619C: .word ov10_022C45A0 _023061A0: .word ov10_022C4868 _023061A4: .word 0x00000C91 + END_SLEEP_CLASS_STATUS_OFFSET arm_func_end EndSleepClassStatus - - arm_func_start EndBurnClassStatus -EndBurnClassStatus: ; 0x023061A8 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xbf] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02306238 -_023061E8: ; jump table - b _02306238 ; case 0 - b _02306228 ; case 1 - b _02306200 ; case 2 - b _02306200 ; case 3 - b _02306214 ; case 4 - b _02306238 ; case 5 -_02306200: - ldr r2, _0230624C ; =0x00000C9E - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306238 -_02306214: - ldr r2, _02306250 ; =0x00000C9C - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306238 -_02306228: - ldr r2, _02306254 ; =0x00000C9D - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_02306238: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xbf] - bl UpdateStatusIconFlags - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_0230624C: .word 0x000009DE -_02306250: .word 0x000009DC -_02306254: .word 0x000009DD -#else -_0230624C: .word 0x00000C9E -_02306250: .word 0x00000C9C -_02306254: .word 0x00000C9D -#endif - arm_func_end EndBurnClassStatus - - arm_func_start EndFrozenClassStatus -EndFrozenClassStatus: ; 0x02306258 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - mov r4, #0 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r4 - ldr r5, [r7, #0xb4] - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r5, #0xc4] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _02306398 -_023062A0: ; jump table - b _02306398 ; case 0 - b _023062C4 ; case 1 - b _02306300 ; case 2 - b _02306338 ; case 3 - b _0230635C ; case 4 -#ifdef JAPAN - b _02306300 ; case 5 -#else - b _0230631C ; case 5 -#endif - b _02306380 ; case 6 - b _023062E4 ; case 7 - b _02306398 ; case 8 -_023062C4: - cmp r6, #0 - beq _023062DC - ldr r2, _023063BC ; =0x00000C9F - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_023062DC: - mov r4, #1 - b _02306398 -_023062E4: - cmp r6, #0 - beq _02306398 - ldr r2, _023063C0 ; =0x00000C99 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306398 -_02306300: - cmp r6, #0 - beq _02306398 - ldr r2, _023063C4 ; =0x00000C9A - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306398 -#ifndef JAPAN -_0230631C: - cmp r6, #0 - beq _02306398 - ldr r2, _023063C8 ; =0x00000C9B - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306398 -#endif -_02306338: - cmp r6, #0 - beq _02306350 - ldr r2, _023063CC ; =0x00000C98 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02306350: - ldr r0, [r5, #0xb4] - bl FreeOtherWrappedMonsters - b _02306398 -_0230635C: - cmp r6, #0 - beq _02306374 - ldr r2, _023063CC ; =0x00000C98 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02306374: - ldr r0, [r5, #0xb4] - bl FreeOtherWrappedMonsters - b _02306398 -_02306380: - cmp r6, #0 - beq _02306398 - ldr r2, _023063D0 ; =0x00000CBB - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02306398: - mov r1, #0 - mov r0, r7 - strb r1, [r5, #0xc4] - bl UpdateStatusIconFlags - cmp r4, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r7 - bl ov29_022E6798 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define END_FROZEN_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_FROZEN_CLASS_STATUS_OFFSET 0 -#endif -_023063BC: .word 0x00000C9F + END_FROZEN_CLASS_STATUS_OFFSET -_023063C0: .word 0x00000C99 + END_FROZEN_CLASS_STATUS_OFFSET -_023063C4: .word 0x00000C9A + END_FROZEN_CLASS_STATUS_OFFSET -#ifndef JAPAN -_023063C8: .word 0x00000C9B -#endif -_023063CC: .word 0x00000C98 + END_FROZEN_CLASS_STATUS_OFFSET -_023063D0: .word 0x00000CBB + END_FROZEN_CLASS_STATUS_OFFSET - arm_func_end EndFrozenClassStatus - - arm_func_start EndCringeClassStatus -EndCringeClassStatus: ; 0x023063D4 -#ifdef JAPAN -#define END_CRINGE_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_CRINGE_CLASS_STATUS_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xd0] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _023064C0 -_02306414: ; jump table - b _023064C0 ; case 0 - b _023064B0 ; case 1 - b _02306438 ; case 2 - b _02306474 ; case 3 - b _0230644C ; case 4 - b _02306460 ; case 5 - b _0230649C ; case 6 - b _02306488 ; case 7 - b _023064C0 ; case 8 -_02306438: - ldr r2, _023064DC ; =0x00000C97 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_0230644C: - ldr r2, _023064E0 ; =0x00000CA4 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_02306460: - ldr r2, _023064E4 ; =0x00000CA7 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_02306474: - ldr r2, _023064E8 ; =0x00000CBD - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_02306488: - ldr r2, _023064EC ; =0x00000CB7 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_0230649C: - mov r0, r6 - mov r1, r5 - mov r2, #0xcb0 + END_CRINGE_CLASS_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_023064B0: - ldr r2, _023064F0 ; =0x00000CBC - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_023064C0: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xd0] - bl UpdateStatusIconFlags - mov r0, r5 - bl CalcSpeedStageWrapper - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023064DC: .word 0x00000C97 + END_CRINGE_CLASS_STATUS_OFFSET -_023064E0: .word 0x00000CA4 + END_CRINGE_CLASS_STATUS_OFFSET -_023064E4: .word 0x00000CA7 + END_CRINGE_CLASS_STATUS_OFFSET -_023064E8: .word 0x00000CBD + END_CRINGE_CLASS_STATUS_OFFSET -_023064EC: .word 0x00000CB7 + END_CRINGE_CLASS_STATUS_OFFSET -_023064F0: .word 0x00000CBC + END_CRINGE_CLASS_STATUS_OFFSET - arm_func_end EndCringeClassStatus - - arm_func_start EndReflectClassStatus -EndReflectClassStatus: ; 0x023064F4 -#ifdef JAPAN -#define END_REFLECT_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_REFLECT_CLASS_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xd5] - cmp r0, #0x12 - addls pc, pc, r0, lsl #2 - b _02306688 -_02306530: ; jump table - b _02306688 ; case 0 - b _0230657C ; case 1 - b _0230658C ; case 2 - b _0230659C ; case 3 - b _023065AC ; case 4 - b _023065BC ; case 5 - b _023065CC ; case 6 - b _023065DC ; case 7 - b _023065EC ; case 8 - b _023065FC ; case 9 - b _023065AC ; case 10 - b _0230660C ; case 11 - b _0230661C ; case 12 - b _0230663C ; case 13 - b _0230664C ; case 14 - b _0230665C ; case 15 - b _0230666C ; case 16 - b _0230667C ; case 17 - b _02306688 ; case 18 -_0230657C: - ldr r1, _0230669C ; =0x00000C87 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230658C: - ldr r1, _023066A0 ; =0x00000C8A - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230659C: - ldr r1, _023066A4 ; =0x00000C88 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065AC: - ldr r1, _023066A8 ; =0x00000C89 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065BC: - ldr r1, _023066AC ; =0x00000C8B - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065CC: - ldr r1, _023066B0 ; =0x00000C8C - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065DC: - ldr r1, _023066B4 ; =0x00000CA6 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065EC: - ldr r1, _023066B8 ; =0x00000CAE - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065FC: - ldr r1, _023066BC ; =0x00000CB1 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230660C: - ldr r1, _023066C0 ; =0x00000CB2 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230661C: - ldr r1, _023066C4 ; =0x00000CB3 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - mov r0, r5 - bl ov29_022E65F4 - mov r0, r5 - bl ResetTypeChanges - b _02306688 -_0230663C: - ldr r1, _023066C8 ; =0x00000CB4 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230664C: - ldr r1, _023066CC ; =0x00000CB5 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230665C: - ldr r1, _023066D0 ; =0x00000CBE - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230666C: - mov r0, r5 - mov r1, #0xcc0 + END_REFLECT_CLASS_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230667C: - ldr r1, _023066D4 ; =0x00000CC1 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306688: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xd5] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0230669C: .word 0x00000C87 + END_REFLECT_CLASS_STATUS_OFFSET -_023066A0: .word 0x00000C8A + END_REFLECT_CLASS_STATUS_OFFSET -_023066A4: .word 0x00000C88 + END_REFLECT_CLASS_STATUS_OFFSET -_023066A8: .word 0x00000C89 + END_REFLECT_CLASS_STATUS_OFFSET -_023066AC: .word 0x00000C8B + END_REFLECT_CLASS_STATUS_OFFSET -_023066B0: .word 0x00000C8C + END_REFLECT_CLASS_STATUS_OFFSET -_023066B4: .word 0x00000CA6 + END_REFLECT_CLASS_STATUS_OFFSET -_023066B8: .word 0x00000CAE + END_REFLECT_CLASS_STATUS_OFFSET -_023066BC: .word 0x00000CB1 + END_REFLECT_CLASS_STATUS_OFFSET -_023066C0: .word 0x00000CB2 + END_REFLECT_CLASS_STATUS_OFFSET -_023066C4: .word 0x00000CB3 + END_REFLECT_CLASS_STATUS_OFFSET -_023066C8: .word 0x00000CB4 + END_REFLECT_CLASS_STATUS_OFFSET -_023066CC: .word 0x00000CB5 + END_REFLECT_CLASS_STATUS_OFFSET -_023066D0: .word 0x00000CBE + END_REFLECT_CLASS_STATUS_OFFSET -_023066D4: .word 0x00000CC1 + END_REFLECT_CLASS_STATUS_OFFSET - arm_func_end EndReflectClassStatus - - arm_func_start TryRemoveSnatchedMonsterFromDungeonStruct -TryRemoveSnatchedMonsterFromDungeonStruct: ; 0x023066D8 - stmdb sp!, {r4, lr} - mov r4, r1 - mov r0, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r4, #0xb4] - ldrb r0, [r0, #0xd8] - cmp r0, #3 - ldmneia sp!, {r4, pc} - ldr r1, _02306724 ; =DUNGEON_PTR - mov r2, #0 - ldr r0, [r1] - add r0, r0, #0x19000 -#ifdef JAPAN - str r2, [r0, #0x860] - ldr r0, [r1] - add r0, r0, #0x19000 - str r2, [r0, #0x868] -#else - str r2, [r0, #0x904] - ldr r0, [r1] - add r0, r0, #0x19000 - str r2, [r0, #0x90c] -#endif - ldmia sp!, {r4, pc} - .align 2, 0 -_02306724: .word DUNGEON_PTR - arm_func_end TryRemoveSnatchedMonsterFromDungeonStruct - - arm_func_start EndCurseClassStatus -EndCurseClassStatus: ; 0x02306728 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - mov r5, r3 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, #0 - ldr r4, [r7, #0xb4] - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xd8] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _02306894 -_02306770: ; jump table - b _02306894 ; case 0 - b _02306790 ; case 1 - b _023067D4 ; case 2 - b _023067AC ; case 3 - b _02306830 ; case 4 - b _02306868 ; case 5 - b _02306880 ; case 6 - b _02306894 ; case 7 -_02306790: - cmp r6, #1 - cmpne r5, #0 - beq _02306894 - ldr r1, _023068A8 ; =0x00000C95 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser - b _02306894 -_023067AC: - cmp r6, #3 - cmpne r5, #0 - beq _023067C4 - ldr r1, _023068AC ; =0x00000C96 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser -_023067C4: - mov r0, r8 - mov r1, r7 - bl TryRemoveSnatchedMonsterFromDungeonStruct - b _02306894 -_023067D4: - mov r1, #0 - mov r0, r7 - strb r1, [r4, #0xd8] - bl GetIdleAnimationId - mov r1, r0 - mov r0, r7 - bl ov29_02304830 - ldr r1, _023068B0 ; =DUNGEON_PTR - mov r0, #0 - ldr r1, [r1] - cmp r6, #2 - add r1, r1, #0x3000 -#ifdef JAPAN - strb r0, [r1, #0xd94] -#else - strb r0, [r1, #0xe38] -#endif - beq _02306894 - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - cmp r5, #0 - beq _02306894 - ldr r1, _023068B4 ; =0x00000CA5 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser - b _02306894 -_02306830: - mov r1, #0 - mov r0, r7 - strb r1, [r4, #0xd8] - bl ov29_022FB984 - cmp r5, #0 - beq _02306854 - ldr r1, _023068B8 ; =0x00000CBF - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser -_02306854: - ldr r0, _023068B0 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - strb r1, [r0, #0xe] - b _02306894 -_02306868: - cmp r5, #0 - beq _02306894 - ldr r1, _023068BC ; =0x00000CC2 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser - b _02306894 -_02306880: - cmp r5, #0 - beq _02306894 - ldr r1, _023068C0 ; =0x00000CC3 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser -_02306894: - mov r1, #0 - mov r0, r7 - strb r1, [r4, #0xd8] - bl UpdateStatusIconFlags - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define END_CURSE_CLASS_OFFSET -0x2C0 -#else -#define END_CURSE_CLASS_OFFSET 0 -#endif -_023068A8: .word 0x00000C95 + END_CURSE_CLASS_OFFSET -_023068AC: .word 0x00000C96 + END_CURSE_CLASS_OFFSET -_023068B0: .word DUNGEON_PTR -_023068B4: .word 0x00000CA5 + END_CURSE_CLASS_OFFSET -_023068B8: .word 0x00000CBF + END_CURSE_CLASS_OFFSET -_023068BC: .word 0x00000CC2 + END_CURSE_CLASS_OFFSET -_023068C0: .word 0x00000CC3 + END_CURSE_CLASS_OFFSET - arm_func_end EndCurseClassStatus - - arm_func_start EndLeechSeedClassStatus -EndLeechSeedClassStatus: ; 0x023068C4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xe0] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0230692C -_02306900: ; jump table - b _0230692C ; case 0 - b _02306910 ; case 1 - b _02306920 ; case 2 - b _0230692C ; case 3 -_02306910: - ldr r1, _02306948 ; =0x00000C94 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _0230692C -_02306920: - ldr r1, _0230694C ; =0x00000CAF - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_0230692C: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xe0] - mov r1, #0xff - strb r1, [r4, #0xe8] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02306948: .word 0x000009D4 -_0230694C: .word 0x000009EF -#else -_02306948: .word 0x00000C94 -_0230694C: .word 0x00000CAF -#endif - arm_func_end EndLeechSeedClassStatus - - arm_func_start EndSureShotClassStatus -EndSureShotClassStatus: ; 0x02306950 -#ifdef JAPAN -#define END_SURE_SHOT_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_SURE_SHOT_CLASS_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xec] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _023069E0 -_0230698C: ; jump table - b _023069E0 ; case 0 - b _023069A4 ; case 1 - b _023069B4 ; case 2 - b _023069C4 ; case 3 - b _023069D4 ; case 4 - b _023069E0 ; case 5 -_023069A4: - mov r0, r5 - mov r1, #0xca0 + END_SURE_SHOT_CLASS_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUser - b _023069E0 -_023069B4: - ldr r1, _023069F4 ; =0x00000CA1 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _023069E0 -_023069C4: - ldr r1, _023069F8 ; =0x00000CA2 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _023069E0 -_023069D4: - ldr r1, _023069FC ; =0x00000CA3 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_023069E0: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xec] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023069F4: .word 0x00000CA1 + END_SURE_SHOT_CLASS_STATUS_OFFSET -_023069F8: .word 0x00000CA2 + END_SURE_SHOT_CLASS_STATUS_OFFSET -_023069FC: .word 0x00000CA3 + END_SURE_SHOT_CLASS_STATUS_OFFSET - arm_func_end EndSureShotClassStatus - - arm_func_start EndInvisibleClassStatus -EndInvisibleClassStatus: ; 0x02306A00 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r1 - mov r4, #0 - mov r0, r8 - mov r7, r2 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r4 - ldr r6, [r8, #0xb4] - mov r1, r8 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xef] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02306ADC -_02306A48: ; jump table - b _02306ADC ; case 0 - b _02306A60 ; case 1 - b _02306A84 ; case 2 - b _02306A74 ; case 3 - b _02306AC4 ; case 4 - b _02306ADC ; case 5 -_02306A60: - ldr r1, _02306B18 ; =0x00000CA8 - mov r0, r8 - mov r4, #1 - bl LogMessageByIdWithPopupCheckUser - b _02306ADC -_02306A74: - ldr r1, _02306B1C ; =0x00000CB8 - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser - b _02306ADC -_02306A84: - ldrsh r1, [r6, #2] - mov r0, r8 - bl GetMonsterApparentId - strh r0, [r6, #4] - ldrsh r0, [r6, #4] - bl DungeonGetSpriteIndex - strh r0, [r8, #0xa8] - mov r0, r8 - bl GetIdleAnimationId - mov r1, r0 - mov r0, r8 - bl ov29_02304830 - ldr r1, _02306B20 ; =0x00000CB6 - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser - b _02306ADC -_02306AC4: - cmp r7, #0 - bne _02306AD8 - ldr r1, _02306B24 ; =0x00000CAC - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser -_02306AD8: - mov r5, #1 -_02306ADC: - mov r1, #0 - mov r0, r8 - strb r1, [r6, #0xef] - bl UpdateStatusIconFlags - cmp r4, #0 - beq _02306AFC - mov r0, #1 - bl HandleShopTransaction -_02306AFC: - cmp r7, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - cmp r5, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r8 - bl EnsureCanStandCurrentTile - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define END_INVISIBLE_CLASS_OFFSET -0x2C0 -#else -#define END_INVISIBLE_CLASS_OFFSET 0 -#endif -_02306B18: .word 0x00000CA8 + END_INVISIBLE_CLASS_OFFSET -_02306B1C: .word 0x00000CB8 + END_INVISIBLE_CLASS_OFFSET -_02306B20: .word 0x00000CB6 + END_INVISIBLE_CLASS_OFFSET -_02306B24: .word 0x00000CAC + END_INVISIBLE_CLASS_OFFSET - arm_func_end EndInvisibleClassStatus - - arm_func_start EndBlinkerClassStatus -EndBlinkerClassStatus: ; 0x02306B28 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xf1] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02306BB8 -_02306B64: ; jump table - b _02306BB8 ; case 0 - b _02306B7C ; case 1 - b _02306B8C ; case 2 - b _02306B9C ; case 3 - b _02306BAC ; case 4 - b _02306BB8 ; case 5 -_02306B7C: - ldr r1, _02306BE8 ; =0x00000CA9 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306BB8 -_02306B8C: - ldr r1, _02306BEC ; =0x00000CAA - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306BB8 -_02306B9C: - ldr r1, _02306BF0 ; =0x00000CAB - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306BB8 -_02306BAC: - ldr r1, _02306BF4 ; =0x00000CAD - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306BB8: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xf1] - bl UpdateStatusIconFlags - ldrb r0, [r4, #7] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0x31 - bl AdvanceFrame - bl UpdateTrapsVisibility - bl UpdateMinimap - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -#define END_BLINKER_CLASS_OFFSET -0x2C0 -#else -#define END_BLINKER_CLASS_OFFSET 0 -#endif -_02306BE8: .word 0x00000CA9 + END_BLINKER_CLASS_OFFSET -_02306BEC: .word 0x00000CAA + END_BLINKER_CLASS_OFFSET -_02306BF0: .word 0x00000CAB + END_BLINKER_CLASS_OFFSET -_02306BF4: .word 0x00000CAD + END_BLINKER_CLASS_OFFSET - arm_func_end EndBlinkerClassStatus - - arm_func_start EndMuzzledStatus -EndMuzzledStatus: ; 0x02306BF8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xf3] - cmp r0, #0 - beq _02306C4C - cmp r0, #1 - beq _02306C40 - cmp r0, #2 - b _02306C4C -_02306C40: - ldr r1, _02306C60 ; =0x00000CB9 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306C4C: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xf3] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02306C60: .word 0x000009F9 -#else -_02306C60: .word 0x00000CB9 -#endif - arm_func_end EndMuzzledStatus - - arm_func_start EndMiracleEyeStatus -EndMiracleEyeStatus: ; 0x02306C64 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xf5] - cmp r0, #0 - beq _02306CB8 - cmp r0, #1 - beq _02306CAC - cmp r0, #2 - b _02306CB8 -_02306CAC: - ldr r1, _02306CCC ; =0x00000CC4 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306CB8: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xf5] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02306CCC: .word 0x00000A04 -#else -_02306CCC: .word 0x00000CC4 -#endif - arm_func_end EndMiracleEyeStatus - - arm_func_start EndMagnetRiseStatus -EndMagnetRiseStatus: ; 0x02306CD0 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r1 - mov r0, r6 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r4, #0 - ldr r5, [r6, #0xb4] - mov r0, r4 - mov r1, r6 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r5, #0xf7] - cmp r0, #0 - beq _02306D2C - cmp r0, #1 - beq _02306D1C - cmp r0, #2 - b _02306D2C -_02306D1C: - ldr r1, _02306D50 ; =0x00000CC5 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser - mov r4, #1 -_02306D2C: - mov r1, #0 - mov r0, r6 - strb r1, [r5, #0xf7] - bl UpdateStatusIconFlags - cmp r4, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, r6 - bl ov29_02321134 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_02306D50: .word 0x00000A05 -#else -_02306D50: .word 0x00000CC5 -#endif - arm_func_end EndMagnetRiseStatus - - arm_func_start ov29_02306D54 -ov29_02306D54: ; 0x02306D54 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, #0 - ldr r4, _02306DC8 ; =DUNGEON_PTR - mov sb, r0 - mov r5, r8 - mov r6, #1 - mov r7, r8 -_02306D70: - ldr r0, [r4] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r1, [r0, #0xad4] -#else - ldr r1, [r0, #0xb78] -#endif - cmp r1, #0 - moveq r0, r7 - beq _02306DA0 - ldr r0, [r1] - cmp r0, #1 - moveq r0, r6 - movne r0, r5 - and r0, r0, #0xff -_02306DA0: - cmp r0, #0 - beq _02306DB0 - mov r0, sb - bl EndMagnetRiseStatus -_02306DB0: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #0x14 - blt _02306D70 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02306DC8: .word DUNGEON_PTR - arm_func_end ov29_02306D54 - - arm_func_start ov29_02306DCC -ov29_02306DCC: ; 0x02306DCC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov r8, r1 - mov r4, #0 - mov sb, r0 - mov r0, r8 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - beq _02306EF8 - mov r1, sb - mov r2, r0 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xbd] - cmp r0, #0 - moveq r0, r4 - beq _02306EF8 - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _02306E9C -_02306E3C: ; jump table - b _02306E9C ; case 0 - b _02306E58 ; case 1 - b _02306E9C ; case 2 - b _02306E58 ; case 3 - b _02306E58 ; case 4 - b _02306E7C ; case 5 - b _02306E9C ; case 6 -_02306E58: - mov r2, #1 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r4, [sp] - bl ov29_02311C28 - mov sl, r0 - mov r4, #1 - b _02306E9C -_02306E7C: - mov r2, r4 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r2, [sp] - bl ov29_02311C28 - mov sl, r0 - mov r4, #1 -_02306E9C: - cmp sl, #0 - beq _02306EBC - ldrb r1, [r6, #0xbd] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xbd] - ldrb r0, [r6, #0xbe] - strb r0, [r7, #0xbe] -_02306EBC: - cmp r4, #0 - orrne r1, r5, #1 - movne r0, #0 - strneb r0, [r6, #0xbd] - andne r5, r1, #0xff - cmp r4, #0 - beq _02306EE4 - mov r0, sb - mov r1, #0x378 - bl ChangeMonsterAnimationToIdle -_02306EE4: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 -_02306EF8: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02306DCC - - arm_func_start ov29_02306F00 -ov29_02306F00: ; 0x02306F00 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov sl, #0 - mov sb, r0 - mov r8, r1 - mov r4, sl - mov r5, sl - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, sl - beq _02307070 - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, sl - beq _02307070 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r0, [r6, #0xbf] - cmp r0, #0 - mov r0, sl - beq _02307070 - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, sl - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xbf] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0230701C -_02306F84: ; jump table - b _0230701C ; case 0 - b _02306FFC ; case 1 - b _02306F9C ; case 2 - b _02306FBC ; case 3 - b _02306FDC ; case 4 - b _0230701C ; case 5 -_02306F9C: - mov r0, sb - mov r1, r8 - mov r2, sl - mov r3, #1 - bl TryInflictPoisonedStatus - mov sl, r0 - mov r4, #1 - b _0230701C -_02306FBC: - mov r0, sb - mov r1, r8 - mov r2, sl - mov r3, #1 - bl TryInflictBadlyPoisonedStatus - mov sl, r0 - mov r4, #1 - b _0230701C -_02306FDC: - mov r0, sb - mov r1, r8 - mov r2, sl - mov r3, #1 - bl TryInflictParalysisStatus - mov sl, r0 - mov r4, #1 - b _0230701C -_02306FFC: - mov r2, sl - mov r4, #1 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r4, [sp] - bl TryInflictBurnStatus - mov sl, r0 -_0230701C: - cmp sl, #0 - beq _02307048 - add r3, r6, #0xbf - add r2, r7, #0xbf - mov r1, #4 -_02307030: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02307030 - orr r0, r5, #0x11 - and r5, r0, #0xff -_02307048: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xbf] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 -_02307070: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02306F00 - - arm_func_start ov29_02307078 -ov29_02307078: ; 0x02307078 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r1, [r6, #0xc4] - cmp r1, #3 - cmpne r1, #4 - beq _023070E0 - ldrb r0, [r7, #0xc4] - add r0, r0, #0xfd - and r0, r0, #0xff - cmp r0, #1 - bhi _023070E8 -_023070E0: - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_023070E8: - cmp r1, #7 - addls pc, pc, r1, lsl #2 - b _0230714C -_023070F4: ; jump table - b _0230714C ; case 0 - b _0230714C ; case 1 - b _02307114 ; case 2 - b _0230714C ; case 3 - b _0230714C ; case 4 - b _0230714C ; case 5 - b _0230714C ; case 6 - b _02307130 ; case 7 -_02307114: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictShadowHoldStatus - mov sl, r0 - mov r4, #1 - b _0230714C -_02307130: - mov r0, sb - mov r1, r8 - mov r2, #0x7e - mov r3, #1 - bl TryInflictConstrictionStatus - mov sl, r0 - mov r4, #1 -_0230714C: - cmp sl, #0 - beq _0230716C - add r0, r6, #0xc4 - add r7, r7, #0xc4 - ldmia r0, {r0, r1, r2} - orr r3, r5, #0x11 - stmia r7, {r0, r1, r2} - and r5, r3, #0xff -_0230716C: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xc4] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307078 - - arm_func_start ov29_02307198 -ov29_02307198: ; 0x02307198 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - beq _02307374 - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - beq _02307374 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r0, [r6, #0xd0] - cmp r0, #0 - mov r0, r4 - beq _02307374 - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xd0] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _0230731C -_0230721C: ; jump table - b _0230731C ; case 0 - b _02307300 ; case 1 - b _02307240 ; case 2 - b _0230729C ; case 3 - b _02307260 ; case 4 - b _02307280 ; case 5 - b _023072E4 ; case 6 - b _023072C4 ; case 7 - b _0230731C ; case 8 -_02307240: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictConfusedStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_02307260: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictCoweringStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_02307280: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictTauntStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_0230729C: - mov r3, r4 - mov r0, sb - mov r1, r8 - str r3, [sp] - mov r2, #1 - str r2, [sp, #4] - bl TryInflictPausedStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_023072C4: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictInfatuatedStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_023072E4: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictEncoreStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_02307300: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictCringeStatus - mov sl, r0 - mov r4, #1 -_0230731C: - cmp sl, #0 - beq _0230733C - ldrb r1, [r6, #0xd0] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xd0] - ldrb r0, [r6, #0xd1] - strb r0, [r7, #0xd1] -_0230733C: - cmp r4, #0 - movne r0, #0 - orrne r1, r5, #1 - strneb r0, [r6, #0xd0] - mov r0, sb - andne r5, r1, #0xff - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, sb - bl CalcSpeedStageWrapper - mov r0, r8 - bl CalcSpeedStageWrapper - mov r0, r5 -_02307374: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307198 - - arm_func_start ov29_0230737C -ov29_0230737C: ; 0x0230737C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov r5, r4 - mov r6, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - beq _023076B4 - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - beq _023076B4 - mov r1, sb - mov r2, r0 - ldr r7, [sb, #0xb4] - ldr sl, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r7, #0xd8] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _0230749C -_023073F0: ; jump table - b _0230749C ; case 0 - b _02307410 ; case 1 - b _0230741C ; case 2 - b _0230749C ; case 3 - b _02307440 ; case 4 - b _02307460 ; case 5 - b _02307480 ; case 6 - b _0230749C ; case 7 -_02307410: - mov r5, #1 - mov r4, r5 - b _0230749C -_0230741C: - mov r2, r4 - mov r4, #1 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r4, [sp] - bl TryInflictDecoyStatus - mov r5, r0 - b _0230749C -_02307440: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictGastroAcidStatus - mov r5, r0 - mov r4, #1 - b _0230749C -_02307460: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictHealBlockStatus - mov r5, r0 - mov r4, #1 - b _0230749C -_02307480: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictEmbargoStatus - mov r5, r0 - mov r4, #1 -_0230749C: - ldrb r0, [r7, #0xd8] - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _023076A0 -_023074AC: ; jump table - b _023076A0 ; case 0 - b _023074C8 ; case 1 - b _02307528 ; case 2 - b _023076A0 ; case 3 - b _02307554 ; case 4 - b _023075D4 ; case 5 - b _0230763C ; case 6 -_023074C8: - cmp r5, #0 - beq _02307500 - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_023074E8: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _023074E8 - orr r0, r6, #0x11 - and r6, r0, #0xff -_02307500: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #1 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff - b _023076A0 -_02307528: - cmp r5, #0 - beq _023076A0 - mov r3, #0 - mov r0, sb - mov r1, r8 - mov r2, #1 - str r3, [sp] - bl TryInflictDecoyStatus - orr r0, r6, #0x11 - and r6, r0, #0xff - b _023076A0 -_02307554: - cmp r5, #0 - beq _023075AC - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_02307574: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02307574 - ldr r1, _023076BC ; =DUNGEON_PTR - mov r0, r8 - ldr r1, [r1] - mov r2, #1 - strb r2, [r1, #0xe] - bl ov29_022FB984 - mov r0, r8 - bl UpdateStatusIconFlags - orr r0, r6, #0x11 - and r6, r0, #0xff -_023075AC: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #4 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff - b _023076A0 -_023075D4: - cmp r5, #0 - beq _02307614 - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_023075F4: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _023075F4 - mov r0, r8 - bl UpdateStatusIconFlags - orr r0, r6, #0x11 - and r6, r0, #0xff -_02307614: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #5 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff - b _023076A0 -_0230763C: - cmp r5, #0 - beq _0230767C - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_0230765C: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _0230765C - mov r0, r8 - bl UpdateStatusIconFlags - orr r0, r6, #0x11 - and r6, r0, #0xff -_0230767C: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #6 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff -_023076A0: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r6 -_023076B4: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_023076BC: .word DUNGEON_PTR - arm_func_end ov29_0230737C - - arm_func_start ov29_023076C0 -ov29_023076C0: ; 0x023076C0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r0, [r6, #0xe0] - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xe0] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0230776C -_02307740: ; jump table - b _0230776C ; case 0 - b _02307750 ; case 1 - b _0230776C ; case 2 - b _0230776C ; case 3 -_02307750: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictLeechSeedStatus - mov sl, r0 - mov r4, #1 -_0230776C: - cmp sl, #0 - beq _023077CC - add r0, r6, #0xe0 - add r3, r7, #0xe0 - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #0xff - strb r0, [r7, #0xe8] - ldr r2, _023077F8 ; =DUNGEON_PTR - mov r0, #0 -_02307794: - ldr r1, [r2] - add r1, r1, r0, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xad4] -#else - ldr r1, [r1, #0xb78] -#endif - cmp sb, r1 - streqb r0, [r7, #0xe8] - ldreq r1, [sb, #0xb4] - add r0, r0, #1 - ldreq r1, [r1, #0xb0] - streq r1, [r7, #0xe4] - cmp r0, #0x14 - blt _02307794 - orr r0, r5, #0x11 - and r5, r0, #0xff -_023077CC: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xe0] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_023077F8: .word DUNGEON_PTR - arm_func_end ov29_023076C0 - - arm_func_start ov29_023077FC -ov29_023077FC: ; 0x023077FC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sb - mov r2, r0 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xec] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _023078A0 -_0230786C: ; jump table - b _023078A0 ; case 0 - b _023078A0 ; case 1 - b _02307884 ; case 2 - b _023078A0 ; case 3 - b _023078A0 ; case 4 - b _023078A0 ; case 5 -_02307884: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictWhifferStatus - mov sl, r0 - mov r4, #1 -_023078A0: - cmp sl, #0 - beq _023078C0 - ldrb r1, [r6, #0xec] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xec] - ldrb r0, [r6, #0xed] - strb r0, [r7, #0xed] -_023078C0: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xec] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_023077FC - - arm_func_start TransferNegativeBlinkerClassStatus -TransferNegativeBlinkerClassStatus: ; 0x023078EC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sb - mov r2, r0 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xf1] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _023079C4 -_0230795C: ; jump table - b _023079C4 ; case 0 - b _02307974 ; case 1 - b _02307994 ; case 2 - b _023079C4 ; case 3 - b _023079B0 ; case 4 - b _023079C4 ; case 5 -_02307974: - mov r0, sb - mov r1, r8 - mov r2, #1 - mov r3, r4 - bl TryInflictBlinkerStatus - mov sl, r0 - mov r4, #1 - b _023079C4 -_02307994: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictCrossEyedStatus - mov sl, r0 - mov r4, #1 - b _023079C4 -_023079B0: - mov r0, sb - mov r1, r8 - bl TryInflictDropeyeStatus - mov sl, r0 - mov r4, #1 -_023079C4: - cmp sl, #0 - beq _023079E4 - ldrb r1, [r6, #0xf1] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xf1] - ldrb r0, [r6, #0xf2] - strb r0, [r7, #0xf2] -_023079E4: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xf1] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - ldrb r0, [r6, #7] - cmp r0, #0 - beq _02307A24 - mov r0, #0x31 - bl AdvanceFrame - bl UpdateTrapsVisibility - bl UpdateMinimap -_02307A24: - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end TransferNegativeBlinkerClassStatus - - arm_func_start ov29_02307A2C -ov29_02307A2C: ; 0x02307A2C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sl, r0 - mov sb, r1 - mov r5, r4 - mov r6, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, sb - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sl - mov r2, r0 - ldr r7, [sl, #0xb4] - ldr r8, [sb, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, sb - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r7, #0xf3] - cmp r0, #0 - beq _02307AC0 - cmp r0, #1 - beq _02307AA8 - cmp r0, #2 - b _02307AC0 -_02307AA8: - mov r0, sl - mov r1, sb - mov r2, #1 - bl TryInflictMuzzledStatus - mov r5, r0 - mov r4, #1 -_02307AC0: - cmp r5, #0 - beq _02307AE0 - ldrb r1, [r7, #0xf3] - orr r0, r6, #0x11 - and r6, r0, #0xff - strb r1, [r8, #0xf3] - ldrb r0, [r7, #0xf4] - strb r0, [r8, #0xf4] -_02307AE0: - cmp r4, #0 - orrne r0, r6, #1 - movne r1, #0 - andne r6, r0, #0xff - mov r0, sl - strneb r1, [r7, #0xf3] - bl UpdateStatusIconFlags - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r6 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307A2C - - arm_func_start ov29_02307B0C -ov29_02307B0C: ; 0x02307B0C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sl, r0 - mov sb, r1 - mov r5, r4 - mov r6, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, sb - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sl - mov r2, r0 - ldr r7, [sl, #0xb4] - ldr r8, [sb, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, sb - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r7, #0xf5] - cmp r0, #1 - bne _02307B90 - mov r0, sl - mov r1, sb - mov r2, #1 - bl TryInflictMiracleEyeStatus - mov r5, r0 - mov r4, #1 -_02307B90: - cmp r5, #0 - beq _02307BB0 - ldrb r1, [r7, #0xf5] - orr r0, r6, #0x11 - and r6, r0, #0xff - strb r1, [r8, #0xf5] - ldrb r0, [r7, #0xf6] - strb r0, [r8, #0xf6] -_02307BB0: - cmp r4, #0 - orrne r0, r6, #1 - movne r1, #0 - andne r6, r0, #0xff - mov r0, sl - strneb r1, [r7, #0xf5] - bl UpdateStatusIconFlags - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r6 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307B0C - - arm_func_start TryEndPetrifiedOrSleepStatus -TryEndPetrifiedOrSleepStatus: ; 0x02307BDC - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r5, r1 - ldr r4, [r5, #0xb4] - mov r6, r0 - ldrb r2, [r4, #0xc4] - mov r3, #0 - cmp r2, #6 - bne _02307C0C - mov r2, #1 - bl EndFrozenClassStatus - mov r3, #1 -_02307C0C: - ldrb r0, [r4, #0xbd] - cmp r0, #1 - ldreqb r0, [r4, #0xbe] - cmpeq r0, #0x7f - bne _02307C3C - mov r3, #1 - mov r0, r6 - mov r1, r5 - mov r2, #0 - str r3, [sp] - bl EndSleepClassStatus - mov r3, #1 -_02307C3C: - mov r0, r3 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - arm_func_end TryEndPetrifiedOrSleepStatus - - arm_func_start ov29_02307C48 -ov29_02307C48: ; 0x02307C48 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr ip, [r4, #0xb4] - mov r3, #0 - mov r1, #1 - strb r3, [ip, #0xbd] - mov r2, r1 - strb r3, [ip, #0xbe] - bl ov29_022FA1D8 - mov r0, r4 - bl UpdateStatusIconFlags - ldmia sp!, {r4, pc} - arm_func_end ov29_02307C48 - - arm_func_start EndFrozenStatus -EndFrozenStatus: ; 0x02307C78 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r3, [r4, #0xb4] - ldrb r0, [r3, #0xc4] - cmp r0, #1 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, #0 - strb r0, [r3, #0xc4] - strb r0, [r3, #0xcc] - mov r1, r4 - mov r2, r0 - strb r0, [r3, #0xcd] - bl SubstitutePlaceholderStringTags - ldr r2, _02307CDC ; =0x00000C9F - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r4 - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02307CDC: .word 0x000009DF -#else -_02307CDC: .word 0x00000C9F -#endif - arm_func_end EndFrozenStatus - - arm_func_start ResetTypeChanges -ResetTypeChanges: ; 0x02307CE0 - stmdb sp!, {r4, lr} - ldr r4, [r0, #0xb4] - mov r1, #0 - bl TryRestoreRoostTyping - mov r1, #0 - strb r1, [r4, #0xff] - ldrsh r0, [r4, #2] - bl GetType - strb r0, [r4, #0x5e] - ldrsh r0, [r4, #2] - mov r1, #1 - bl GetType - strb r0, [r4, #0x5f] - ldmia sp!, {r4, pc} - arm_func_end ResetTypeChanges - - arm_func_start EndProtectStatus -EndProtectStatus: ; 0x02307D18 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r4, #0xb4] - ldrb r0, [r0, #0xd5] - cmp r0, #7 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl EndReflectClassStatus - ldmia sp!, {r3, r4, r5, pc} - arm_func_end EndProtectStatus - - arm_func_start TryRestoreRoostTyping -TryRestoreRoostTyping: ; 0x02307D54 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldrne r2, [r5, #0xb4] - ldrneb r0, [r2, #0xa9] - cmpne r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - strb r0, [r2, #0xa9] - ldrb r1, [r2, #0xaa] - cmp r4, #0 - strb r1, [r2, #0x5e] - ldrb r1, [r2, #0xab] - strb r1, [r2, #0x5f] - strb r0, [r2, #0xaa] - strb r0, [r2, #0xab] - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _02307DBC ; =0x00000CC8 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02307DBC: .word 0x00000A08 -#else -_02307DBC: .word 0x00000CC8 -#endif - arm_func_end TryRestoreRoostTyping - - arm_func_start ov29_02307DC0 -ov29_02307DC0: ; 0x02307DC0 -#ifdef JAPAN - ldr r1, [r0, #0xb4] - mov r0, #0 - strb r0, [r1, #0x103] - strb r0, [r1, #0x104] -#else - mov r1, #0 - strb r1, [r0, #0x104] - strb r1, [r0, #0x105] -#endif - bx lr - arm_func_end ov29_02307DC0 - - arm_func_start ov29_02307DD0 -ov29_02307DD0: ; 0x02307DD0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, #0 -_02307DD8: - ldr r0, _02307EF4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r6, [r0, #0xa94] -#else - ldr r6, [r0, #0xb38] -#endif - mov r0, r6 - bl EntityIsValid__02307EF8 - cmp r0, #0 - beq _02307EE4 - ldr r1, [r6, #0xb4] - ldrb r0, [r1, #0xbd] - cmp r0, #1 - ldreqb r0, [r1, #0xbe] - cmpeq r0, #0x7f - bne _02307EE4 - mov r8, #0 - mov r7, r8 - mov r5, r8 - ldrb sl, [r6, #0x25] - ldr fp, _02307EF4 ; =DUNGEON_PTR - b _02307EBC -_02307E2C: - ldr r0, [fp] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa84] -#else - ldr sb, [r0, #0xb28] -#endif - mov r0, sb - bl EntityIsValid__02307EF8 - cmp r0, #0 - beq _02307EB8 - mov r0, sb - mov r1, #0x1f - bl ItemIsActive__02307F1C - cmp r0, #0 - bne _02307EB8 - ldrsh r1, [sb, #4] - ldrsh r0, [r6, #4] - sub r0, r1, r0 - bl abs - cmp r0, #1 - bgt _02307E94 - ldrsh r1, [sb, #6] - ldrsh r0, [r6, #6] - sub r0, r1, r0 - bl abs - cmp r0, #1 - movle r8, #1 - ble _02307EC4 -_02307E94: - mov r0, sb - mov r1, #0x24 - bl ItemIsActive__02307F1C - cmp r0, #0 - beq _02307EB8 - ldrb r0, [sb, #0x25] - cmp sl, r0 - moveq r7, #1 - beq _02307EC4 -_02307EB8: - add r5, r5, #1 -_02307EBC: - cmp r5, #4 - blt _02307E2C -_02307EC4: - cmp r7, #0 - bne _02307ED4 - cmp r8, #0 - movne r7, #1 -_02307ED4: - cmp r7, #0 - beq _02307EE4 - mov r0, r6 - bl ov29_02307C48 -_02307EE4: - add r4, r4, #1 - cmp r4, #0x10 - blt _02307DD8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02307EF4: .word DUNGEON_PTR - arm_func_end ov29_02307DD0 diff --git a/asm/overlay_29_02306258.s b/asm/overlay_29_02306258.s new file mode 100644 index 00000000..9e491225 --- /dev/null +++ b/asm/overlay_29_02306258.s @@ -0,0 +1,401 @@ + .include "asm/macros.inc" + .include "overlay_29_02306258.inc" + + .text + + arm_func_start EndFrozenClassStatus +EndFrozenClassStatus: ; 0x02306258 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r1 + mov r8, r0 + mov r0, r7 + mov r6, r2 + mov r4, #0 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r4 + ldr r5, [r7, #0xb4] + mov r1, r7 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r5, #0xc4] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _02306398 +_023062A0: ; jump table + b _02306398 ; case 0 + b _023062C4 ; case 1 + b _02306300 ; case 2 + b _02306338 ; case 3 + b _0230635C ; case 4 +#ifdef JAPAN + b _02306300 ; case 5 +#else + b _0230631C ; case 5 +#endif + b _02306380 ; case 6 + b _023062E4 ; case 7 + b _02306398 ; case 8 +_023062C4: + cmp r6, #0 + beq _023062DC + ldr r2, _023063BC ; =0x00000C9F + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_023062DC: + mov r4, #1 + b _02306398 +_023062E4: + cmp r6, #0 + beq _02306398 + ldr r2, _023063C0 ; =0x00000C99 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02306398 +_02306300: + cmp r6, #0 + beq _02306398 + ldr r2, _023063C4 ; =0x00000C9A + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02306398 +#ifndef JAPAN +_0230631C: + cmp r6, #0 + beq _02306398 + ldr r2, _023063C8 ; =0x00000C9B + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02306398 +#endif +_02306338: + cmp r6, #0 + beq _02306350 + ldr r2, _023063CC ; =0x00000C98 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02306350: + ldr r0, [r5, #0xb4] + bl FreeOtherWrappedMonsters + b _02306398 +_0230635C: + cmp r6, #0 + beq _02306374 + ldr r2, _023063CC ; =0x00000C98 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02306374: + ldr r0, [r5, #0xb4] + bl FreeOtherWrappedMonsters + b _02306398 +_02306380: + cmp r6, #0 + beq _02306398 + ldr r2, _023063D0 ; =0x00000CBB + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02306398: + mov r1, #0 + mov r0, r7 + strb r1, [r5, #0xc4] + bl UpdateStatusIconFlags + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r7 + bl ov29_022E6798 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +#define END_FROZEN_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_FROZEN_CLASS_STATUS_OFFSET 0 +#endif +_023063BC: .word 0x00000C9F + END_FROZEN_CLASS_STATUS_OFFSET +_023063C0: .word 0x00000C99 + END_FROZEN_CLASS_STATUS_OFFSET +_023063C4: .word 0x00000C9A + END_FROZEN_CLASS_STATUS_OFFSET +#ifndef JAPAN +_023063C8: .word 0x00000C9B +#endif +_023063CC: .word 0x00000C98 + END_FROZEN_CLASS_STATUS_OFFSET +_023063D0: .word 0x00000CBB + END_FROZEN_CLASS_STATUS_OFFSET + arm_func_end EndFrozenClassStatus + + arm_func_start EndCringeClassStatus +EndCringeClassStatus: ; 0x023063D4 +#ifdef JAPAN +#define END_CRINGE_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_CRINGE_CLASS_STATUS_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + mov r6, r0 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xd0] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _023064C0 +_02306414: ; jump table + b _023064C0 ; case 0 + b _023064B0 ; case 1 + b _02306438 ; case 2 + b _02306474 ; case 3 + b _0230644C ; case 4 + b _02306460 ; case 5 + b _0230649C ; case 6 + b _02306488 ; case 7 + b _023064C0 ; case 8 +_02306438: + ldr r2, _023064DC ; =0x00000C97 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_0230644C: + ldr r2, _023064E0 ; =0x00000CA4 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_02306460: + ldr r2, _023064E4 ; =0x00000CA7 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_02306474: + ldr r2, _023064E8 ; =0x00000CBD + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_02306488: + ldr r2, _023064EC ; =0x00000CB7 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_0230649C: + mov r0, r6 + mov r1, r5 + mov r2, #0xcb0 + END_CRINGE_CLASS_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_023064B0: + ldr r2, _023064F0 ; =0x00000CBC + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_023064C0: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xd0] + bl UpdateStatusIconFlags + mov r0, r5 + bl CalcSpeedStageWrapper + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023064DC: .word 0x00000C97 + END_CRINGE_CLASS_STATUS_OFFSET +_023064E0: .word 0x00000CA4 + END_CRINGE_CLASS_STATUS_OFFSET +_023064E4: .word 0x00000CA7 + END_CRINGE_CLASS_STATUS_OFFSET +_023064E8: .word 0x00000CBD + END_CRINGE_CLASS_STATUS_OFFSET +_023064EC: .word 0x00000CB7 + END_CRINGE_CLASS_STATUS_OFFSET +_023064F0: .word 0x00000CBC + END_CRINGE_CLASS_STATUS_OFFSET + arm_func_end EndCringeClassStatus + + arm_func_start EndReflectClassStatus +EndReflectClassStatus: ; 0x023064F4 +#ifdef JAPAN +#define END_REFLECT_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_REFLECT_CLASS_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xd5] + cmp r0, #0x12 + addls pc, pc, r0, lsl #2 + b _02306688 +_02306530: ; jump table + b _02306688 ; case 0 + b _0230657C ; case 1 + b _0230658C ; case 2 + b _0230659C ; case 3 + b _023065AC ; case 4 + b _023065BC ; case 5 + b _023065CC ; case 6 + b _023065DC ; case 7 + b _023065EC ; case 8 + b _023065FC ; case 9 + b _023065AC ; case 10 + b _0230660C ; case 11 + b _0230661C ; case 12 + b _0230663C ; case 13 + b _0230664C ; case 14 + b _0230665C ; case 15 + b _0230666C ; case 16 + b _0230667C ; case 17 + b _02306688 ; case 18 +_0230657C: + ldr r1, _0230669C ; =0x00000C87 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230658C: + ldr r1, _023066A0 ; =0x00000C8A + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230659C: + ldr r1, _023066A4 ; =0x00000C88 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065AC: + ldr r1, _023066A8 ; =0x00000C89 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065BC: + ldr r1, _023066AC ; =0x00000C8B + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065CC: + ldr r1, _023066B0 ; =0x00000C8C + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065DC: + ldr r1, _023066B4 ; =0x00000CA6 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065EC: + ldr r1, _023066B8 ; =0x00000CAE + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065FC: + ldr r1, _023066BC ; =0x00000CB1 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230660C: + ldr r1, _023066C0 ; =0x00000CB2 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230661C: + ldr r1, _023066C4 ; =0x00000CB3 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + mov r0, r5 + bl ov29_022E65F4 + mov r0, r5 + bl ResetTypeChanges + b _02306688 +_0230663C: + ldr r1, _023066C8 ; =0x00000CB4 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230664C: + ldr r1, _023066CC ; =0x00000CB5 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230665C: + ldr r1, _023066D0 ; =0x00000CBE + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230666C: + mov r0, r5 + mov r1, #0xcc0 + END_REFLECT_CLASS_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230667C: + ldr r1, _023066D4 ; =0x00000CC1 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306688: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xd5] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0230669C: .word 0x00000C87 + END_REFLECT_CLASS_STATUS_OFFSET +_023066A0: .word 0x00000C8A + END_REFLECT_CLASS_STATUS_OFFSET +_023066A4: .word 0x00000C88 + END_REFLECT_CLASS_STATUS_OFFSET +_023066A8: .word 0x00000C89 + END_REFLECT_CLASS_STATUS_OFFSET +_023066AC: .word 0x00000C8B + END_REFLECT_CLASS_STATUS_OFFSET +_023066B0: .word 0x00000C8C + END_REFLECT_CLASS_STATUS_OFFSET +_023066B4: .word 0x00000CA6 + END_REFLECT_CLASS_STATUS_OFFSET +_023066B8: .word 0x00000CAE + END_REFLECT_CLASS_STATUS_OFFSET +_023066BC: .word 0x00000CB1 + END_REFLECT_CLASS_STATUS_OFFSET +_023066C0: .word 0x00000CB2 + END_REFLECT_CLASS_STATUS_OFFSET +_023066C4: .word 0x00000CB3 + END_REFLECT_CLASS_STATUS_OFFSET +_023066C8: .word 0x00000CB4 + END_REFLECT_CLASS_STATUS_OFFSET +_023066CC: .word 0x00000CB5 + END_REFLECT_CLASS_STATUS_OFFSET +_023066D0: .word 0x00000CBE + END_REFLECT_CLASS_STATUS_OFFSET +_023066D4: .word 0x00000CC1 + END_REFLECT_CLASS_STATUS_OFFSET + arm_func_end EndReflectClassStatus + + arm_func_start TryRemoveSnatchedMonsterFromDungeonStruct +TryRemoveSnatchedMonsterFromDungeonStruct: ; 0x023066D8 + stmdb sp!, {r4, lr} + mov r4, r1 + mov r0, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0xb4] + ldrb r0, [r0, #0xd8] + cmp r0, #3 + ldmneia sp!, {r4, pc} + ldr r1, _02306724 ; =DUNGEON_PTR + mov r2, #0 + ldr r0, [r1] + add r0, r0, #0x19000 +#ifdef JAPAN + str r2, [r0, #0x860] + ldr r0, [r1] + add r0, r0, #0x19000 + str r2, [r0, #0x868] +#else + str r2, [r0, #0x904] + ldr r0, [r1] + add r0, r0, #0x19000 + str r2, [r0, #0x90c] +#endif + ldmia sp!, {r4, pc} + .align 2, 0 +_02306724: .word DUNGEON_PTR + arm_func_end TryRemoveSnatchedMonsterFromDungeonStruct diff --git a/asm/overlay_29_023068C4.s b/asm/overlay_29_023068C4.s new file mode 100644 index 00000000..b8b7d82c --- /dev/null +++ b/asm/overlay_29_023068C4.s @@ -0,0 +1,1726 @@ + .include "asm/macros.inc" + .include "overlay_29_023068C4.inc" + + .text + + arm_func_start EndLeechSeedClassStatus +EndLeechSeedClassStatus: ; 0x023068C4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xe0] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0230692C +_02306900: ; jump table + b _0230692C ; case 0 + b _02306910 ; case 1 + b _02306920 ; case 2 + b _0230692C ; case 3 +_02306910: + ldr r1, _02306948 ; =0x00000C94 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _0230692C +_02306920: + ldr r1, _0230694C ; =0x00000CAF + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_0230692C: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xe0] + mov r1, #0xff + strb r1, [r4, #0xe8] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02306948: .word 0x000009D4 +_0230694C: .word 0x000009EF +#else +_02306948: .word 0x00000C94 +_0230694C: .word 0x00000CAF +#endif + arm_func_end EndLeechSeedClassStatus + + arm_func_start EndSureShotClassStatus +EndSureShotClassStatus: ; 0x02306950 +#ifdef JAPAN +#define END_SURE_SHOT_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_SURE_SHOT_CLASS_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xec] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _023069E0 +_0230698C: ; jump table + b _023069E0 ; case 0 + b _023069A4 ; case 1 + b _023069B4 ; case 2 + b _023069C4 ; case 3 + b _023069D4 ; case 4 + b _023069E0 ; case 5 +_023069A4: + mov r0, r5 + mov r1, #0xca0 + END_SURE_SHOT_CLASS_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUser + b _023069E0 +_023069B4: + ldr r1, _023069F4 ; =0x00000CA1 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _023069E0 +_023069C4: + ldr r1, _023069F8 ; =0x00000CA2 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _023069E0 +_023069D4: + ldr r1, _023069FC ; =0x00000CA3 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_023069E0: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xec] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023069F4: .word 0x00000CA1 + END_SURE_SHOT_CLASS_STATUS_OFFSET +_023069F8: .word 0x00000CA2 + END_SURE_SHOT_CLASS_STATUS_OFFSET +_023069FC: .word 0x00000CA3 + END_SURE_SHOT_CLASS_STATUS_OFFSET + arm_func_end EndSureShotClassStatus + + arm_func_start EndInvisibleClassStatus +EndInvisibleClassStatus: ; 0x02306A00 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r1 + mov r4, #0 + mov r0, r8 + mov r7, r2 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r4 + ldr r6, [r8, #0xb4] + mov r1, r8 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xef] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _02306ADC +_02306A48: ; jump table + b _02306ADC ; case 0 + b _02306A60 ; case 1 + b _02306A84 ; case 2 + b _02306A74 ; case 3 + b _02306AC4 ; case 4 + b _02306ADC ; case 5 +_02306A60: + ldr r1, _02306B18 ; =0x00000CA8 + mov r0, r8 + mov r4, #1 + bl LogMessageByIdWithPopupCheckUser + b _02306ADC +_02306A74: + ldr r1, _02306B1C ; =0x00000CB8 + mov r0, r8 + bl LogMessageByIdWithPopupCheckUser + b _02306ADC +_02306A84: + ldrsh r1, [r6, #2] + mov r0, r8 + bl GetMonsterApparentId + strh r0, [r6, #4] + ldrsh r0, [r6, #4] + bl DungeonGetSpriteIndex + strh r0, [r8, #0xa8] + mov r0, r8 + bl GetIdleAnimationId + mov r1, r0 + mov r0, r8 + bl ov29_02304830 + ldr r1, _02306B20 ; =0x00000CB6 + mov r0, r8 + bl LogMessageByIdWithPopupCheckUser + b _02306ADC +_02306AC4: + cmp r7, #0 + bne _02306AD8 + ldr r1, _02306B24 ; =0x00000CAC + mov r0, r8 + bl LogMessageByIdWithPopupCheckUser +_02306AD8: + mov r5, #1 +_02306ADC: + mov r1, #0 + mov r0, r8 + strb r1, [r6, #0xef] + bl UpdateStatusIconFlags + cmp r4, #0 + beq _02306AFC + mov r0, #1 + bl HandleShopTransaction +_02306AFC: + cmp r7, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + cmp r5, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r8 + bl EnsureCanStandCurrentTile + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +#define END_INVISIBLE_CLASS_OFFSET -0x2C0 +#else +#define END_INVISIBLE_CLASS_OFFSET 0 +#endif +_02306B18: .word 0x00000CA8 + END_INVISIBLE_CLASS_OFFSET +_02306B1C: .word 0x00000CB8 + END_INVISIBLE_CLASS_OFFSET +_02306B20: .word 0x00000CB6 + END_INVISIBLE_CLASS_OFFSET +_02306B24: .word 0x00000CAC + END_INVISIBLE_CLASS_OFFSET + arm_func_end EndInvisibleClassStatus + + arm_func_start EndBlinkerClassStatus +EndBlinkerClassStatus: ; 0x02306B28 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xf1] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _02306BB8 +_02306B64: ; jump table + b _02306BB8 ; case 0 + b _02306B7C ; case 1 + b _02306B8C ; case 2 + b _02306B9C ; case 3 + b _02306BAC ; case 4 + b _02306BB8 ; case 5 +_02306B7C: + ldr r1, _02306BE8 ; =0x00000CA9 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306BB8 +_02306B8C: + ldr r1, _02306BEC ; =0x00000CAA + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306BB8 +_02306B9C: + ldr r1, _02306BF0 ; =0x00000CAB + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306BB8 +_02306BAC: + ldr r1, _02306BF4 ; =0x00000CAD + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306BB8: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xf1] + bl UpdateStatusIconFlags + ldrb r0, [r4, #7] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0x31 + bl AdvanceFrame + bl UpdateTrapsVisibility + bl UpdateMinimap + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +#define END_BLINKER_CLASS_OFFSET -0x2C0 +#else +#define END_BLINKER_CLASS_OFFSET 0 +#endif +_02306BE8: .word 0x00000CA9 + END_BLINKER_CLASS_OFFSET +_02306BEC: .word 0x00000CAA + END_BLINKER_CLASS_OFFSET +_02306BF0: .word 0x00000CAB + END_BLINKER_CLASS_OFFSET +_02306BF4: .word 0x00000CAD + END_BLINKER_CLASS_OFFSET + arm_func_end EndBlinkerClassStatus + + arm_func_start EndMuzzledStatus +EndMuzzledStatus: ; 0x02306BF8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xf3] + cmp r0, #0 + beq _02306C4C + cmp r0, #1 + beq _02306C40 + cmp r0, #2 + b _02306C4C +_02306C40: + ldr r1, _02306C60 ; =0x00000CB9 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306C4C: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xf3] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02306C60: .word 0x000009F9 +#else +_02306C60: .word 0x00000CB9 +#endif + arm_func_end EndMuzzledStatus + + arm_func_start EndMiracleEyeStatus +EndMiracleEyeStatus: ; 0x02306C64 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xf5] + cmp r0, #0 + beq _02306CB8 + cmp r0, #1 + beq _02306CAC + cmp r0, #2 + b _02306CB8 +_02306CAC: + ldr r1, _02306CCC ; =0x00000CC4 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306CB8: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xf5] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02306CCC: .word 0x00000A04 +#else +_02306CCC: .word 0x00000CC4 +#endif + arm_func_end EndMiracleEyeStatus + + arm_func_start EndMagnetRiseStatus +EndMagnetRiseStatus: ; 0x02306CD0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r0, r6 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r4, #0 + ldr r5, [r6, #0xb4] + mov r0, r4 + mov r1, r6 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r5, #0xf7] + cmp r0, #0 + beq _02306D2C + cmp r0, #1 + beq _02306D1C + cmp r0, #2 + b _02306D2C +_02306D1C: + ldr r1, _02306D50 ; =0x00000CC5 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser + mov r4, #1 +_02306D2C: + mov r1, #0 + mov r0, r6 + strb r1, [r5, #0xf7] + bl UpdateStatusIconFlags + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + bl ov29_02321134 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_02306D50: .word 0x00000A05 +#else +_02306D50: .word 0x00000CC5 +#endif + arm_func_end EndMagnetRiseStatus + + arm_func_start ov29_02306D54 +ov29_02306D54: ; 0x02306D54 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, #0 + ldr r4, _02306DC8 ; =DUNGEON_PTR + mov sb, r0 + mov r5, r8 + mov r6, #1 + mov r7, r8 +_02306D70: + ldr r0, [r4] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r1, [r0, #0xad4] +#else + ldr r1, [r0, #0xb78] +#endif + cmp r1, #0 + moveq r0, r7 + beq _02306DA0 + ldr r0, [r1] + cmp r0, #1 + moveq r0, r6 + movne r0, r5 + and r0, r0, #0xff +_02306DA0: + cmp r0, #0 + beq _02306DB0 + mov r0, sb + bl EndMagnetRiseStatus +_02306DB0: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #0x14 + blt _02306D70 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02306DC8: .word DUNGEON_PTR + arm_func_end ov29_02306D54 + + arm_func_start ov29_02306DCC +ov29_02306DCC: ; 0x02306DCC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov r8, r1 + mov r4, #0 + mov sb, r0 + mov r0, r8 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + beq _02306EF8 + mov r1, sb + mov r2, r0 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xbd] + cmp r0, #0 + moveq r0, r4 + beq _02306EF8 + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _02306E9C +_02306E3C: ; jump table + b _02306E9C ; case 0 + b _02306E58 ; case 1 + b _02306E9C ; case 2 + b _02306E58 ; case 3 + b _02306E58 ; case 4 + b _02306E7C ; case 5 + b _02306E9C ; case 6 +_02306E58: + mov r2, #1 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r4, [sp] + bl ov29_02311C28 + mov sl, r0 + mov r4, #1 + b _02306E9C +_02306E7C: + mov r2, r4 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r2, [sp] + bl ov29_02311C28 + mov sl, r0 + mov r4, #1 +_02306E9C: + cmp sl, #0 + beq _02306EBC + ldrb r1, [r6, #0xbd] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xbd] + ldrb r0, [r6, #0xbe] + strb r0, [r7, #0xbe] +_02306EBC: + cmp r4, #0 + orrne r1, r5, #1 + movne r0, #0 + strneb r0, [r6, #0xbd] + andne r5, r1, #0xff + cmp r4, #0 + beq _02306EE4 + mov r0, sb + mov r1, #0x378 + bl ChangeMonsterAnimationToIdle +_02306EE4: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 +_02306EF8: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02306DCC + + arm_func_start ov29_02306F00 +ov29_02306F00: ; 0x02306F00 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov sl, #0 + mov sb, r0 + mov r8, r1 + mov r4, sl + mov r5, sl + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, sl + beq _02307070 + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, sl + beq _02307070 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r0, [r6, #0xbf] + cmp r0, #0 + mov r0, sl + beq _02307070 + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, sl + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xbf] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0230701C +_02306F84: ; jump table + b _0230701C ; case 0 + b _02306FFC ; case 1 + b _02306F9C ; case 2 + b _02306FBC ; case 3 + b _02306FDC ; case 4 + b _0230701C ; case 5 +_02306F9C: + mov r0, sb + mov r1, r8 + mov r2, sl + mov r3, #1 + bl TryInflictPoisonedStatus + mov sl, r0 + mov r4, #1 + b _0230701C +_02306FBC: + mov r0, sb + mov r1, r8 + mov r2, sl + mov r3, #1 + bl TryInflictBadlyPoisonedStatus + mov sl, r0 + mov r4, #1 + b _0230701C +_02306FDC: + mov r0, sb + mov r1, r8 + mov r2, sl + mov r3, #1 + bl TryInflictParalysisStatus + mov sl, r0 + mov r4, #1 + b _0230701C +_02306FFC: + mov r2, sl + mov r4, #1 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r4, [sp] + bl TryInflictBurnStatus + mov sl, r0 +_0230701C: + cmp sl, #0 + beq _02307048 + add r3, r6, #0xbf + add r2, r7, #0xbf + mov r1, #4 +_02307030: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02307030 + orr r0, r5, #0x11 + and r5, r0, #0xff +_02307048: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xbf] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 +_02307070: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02306F00 + + arm_func_start ov29_02307078 +ov29_02307078: ; 0x02307078 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r1, [r6, #0xc4] + cmp r1, #3 + cmpne r1, #4 + beq _023070E0 + ldrb r0, [r7, #0xc4] + add r0, r0, #0xfd + and r0, r0, #0xff + cmp r0, #1 + bhi _023070E8 +_023070E0: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_023070E8: + cmp r1, #7 + addls pc, pc, r1, lsl #2 + b _0230714C +_023070F4: ; jump table + b _0230714C ; case 0 + b _0230714C ; case 1 + b _02307114 ; case 2 + b _0230714C ; case 3 + b _0230714C ; case 4 + b _0230714C ; case 5 + b _0230714C ; case 6 + b _02307130 ; case 7 +_02307114: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictShadowHoldStatus + mov sl, r0 + mov r4, #1 + b _0230714C +_02307130: + mov r0, sb + mov r1, r8 + mov r2, #0x7e + mov r3, #1 + bl TryInflictConstrictionStatus + mov sl, r0 + mov r4, #1 +_0230714C: + cmp sl, #0 + beq _0230716C + add r0, r6, #0xc4 + add r7, r7, #0xc4 + ldmia r0, {r0, r1, r2} + orr r3, r5, #0x11 + stmia r7, {r0, r1, r2} + and r5, r3, #0xff +_0230716C: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xc4] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307078 + + arm_func_start ov29_02307198 +ov29_02307198: ; 0x02307198 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + beq _02307374 + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + beq _02307374 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r0, [r6, #0xd0] + cmp r0, #0 + mov r0, r4 + beq _02307374 + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xd0] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _0230731C +_0230721C: ; jump table + b _0230731C ; case 0 + b _02307300 ; case 1 + b _02307240 ; case 2 + b _0230729C ; case 3 + b _02307260 ; case 4 + b _02307280 ; case 5 + b _023072E4 ; case 6 + b _023072C4 ; case 7 + b _0230731C ; case 8 +_02307240: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictConfusedStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_02307260: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictCoweringStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_02307280: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictTauntStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_0230729C: + mov r3, r4 + mov r0, sb + mov r1, r8 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + bl TryInflictPausedStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_023072C4: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictInfatuatedStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_023072E4: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictEncoreStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_02307300: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictCringeStatus + mov sl, r0 + mov r4, #1 +_0230731C: + cmp sl, #0 + beq _0230733C + ldrb r1, [r6, #0xd0] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xd0] + ldrb r0, [r6, #0xd1] + strb r0, [r7, #0xd1] +_0230733C: + cmp r4, #0 + movne r0, #0 + orrne r1, r5, #1 + strneb r0, [r6, #0xd0] + mov r0, sb + andne r5, r1, #0xff + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, sb + bl CalcSpeedStageWrapper + mov r0, r8 + bl CalcSpeedStageWrapper + mov r0, r5 +_02307374: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307198 + + arm_func_start ov29_0230737C +ov29_0230737C: ; 0x0230737C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov r5, r4 + mov r6, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + beq _023076B4 + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + beq _023076B4 + mov r1, sb + mov r2, r0 + ldr r7, [sb, #0xb4] + ldr sl, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r7, #0xd8] + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _0230749C +_023073F0: ; jump table + b _0230749C ; case 0 + b _02307410 ; case 1 + b _0230741C ; case 2 + b _0230749C ; case 3 + b _02307440 ; case 4 + b _02307460 ; case 5 + b _02307480 ; case 6 + b _0230749C ; case 7 +_02307410: + mov r5, #1 + mov r4, r5 + b _0230749C +_0230741C: + mov r2, r4 + mov r4, #1 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r4, [sp] + bl TryInflictDecoyStatus + mov r5, r0 + b _0230749C +_02307440: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictGastroAcidStatus + mov r5, r0 + mov r4, #1 + b _0230749C +_02307460: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictHealBlockStatus + mov r5, r0 + mov r4, #1 + b _0230749C +_02307480: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictEmbargoStatus + mov r5, r0 + mov r4, #1 +_0230749C: + ldrb r0, [r7, #0xd8] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _023076A0 +_023074AC: ; jump table + b _023076A0 ; case 0 + b _023074C8 ; case 1 + b _02307528 ; case 2 + b _023076A0 ; case 3 + b _02307554 ; case 4 + b _023075D4 ; case 5 + b _0230763C ; case 6 +_023074C8: + cmp r5, #0 + beq _02307500 + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_023074E8: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _023074E8 + orr r0, r6, #0x11 + and r6, r0, #0xff +_02307500: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #1 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff + b _023076A0 +_02307528: + cmp r5, #0 + beq _023076A0 + mov r3, #0 + mov r0, sb + mov r1, r8 + mov r2, #1 + str r3, [sp] + bl TryInflictDecoyStatus + orr r0, r6, #0x11 + and r6, r0, #0xff + b _023076A0 +_02307554: + cmp r5, #0 + beq _023075AC + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_02307574: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02307574 + ldr r1, _023076BC ; =DUNGEON_PTR + mov r0, r8 + ldr r1, [r1] + mov r2, #1 + strb r2, [r1, #0xe] + bl ov29_022FB984 + mov r0, r8 + bl UpdateStatusIconFlags + orr r0, r6, #0x11 + and r6, r0, #0xff +_023075AC: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #4 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff + b _023076A0 +_023075D4: + cmp r5, #0 + beq _02307614 + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_023075F4: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _023075F4 + mov r0, r8 + bl UpdateStatusIconFlags + orr r0, r6, #0x11 + and r6, r0, #0xff +_02307614: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #5 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff + b _023076A0 +_0230763C: + cmp r5, #0 + beq _0230767C + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_0230765C: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _0230765C + mov r0, r8 + bl UpdateStatusIconFlags + orr r0, r6, #0x11 + and r6, r0, #0xff +_0230767C: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #6 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff +_023076A0: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r6 +_023076B4: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_023076BC: .word DUNGEON_PTR + arm_func_end ov29_0230737C + + arm_func_start ov29_023076C0 +ov29_023076C0: ; 0x023076C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r0, [r6, #0xe0] + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xe0] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0230776C +_02307740: ; jump table + b _0230776C ; case 0 + b _02307750 ; case 1 + b _0230776C ; case 2 + b _0230776C ; case 3 +_02307750: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictLeechSeedStatus + mov sl, r0 + mov r4, #1 +_0230776C: + cmp sl, #0 + beq _023077CC + add r0, r6, #0xe0 + add r3, r7, #0xe0 + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #0xff + strb r0, [r7, #0xe8] + ldr r2, _023077F8 ; =DUNGEON_PTR + mov r0, #0 +_02307794: + ldr r1, [r2] + add r1, r1, r0, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xad4] +#else + ldr r1, [r1, #0xb78] +#endif + cmp sb, r1 + streqb r0, [r7, #0xe8] + ldreq r1, [sb, #0xb4] + add r0, r0, #1 + ldreq r1, [r1, #0xb0] + streq r1, [r7, #0xe4] + cmp r0, #0x14 + blt _02307794 + orr r0, r5, #0x11 + and r5, r0, #0xff +_023077CC: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xe0] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_023077F8: .word DUNGEON_PTR + arm_func_end ov29_023076C0 + + arm_func_start ov29_023077FC +ov29_023077FC: ; 0x023077FC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sb + mov r2, r0 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xec] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _023078A0 +_0230786C: ; jump table + b _023078A0 ; case 0 + b _023078A0 ; case 1 + b _02307884 ; case 2 + b _023078A0 ; case 3 + b _023078A0 ; case 4 + b _023078A0 ; case 5 +_02307884: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictWhifferStatus + mov sl, r0 + mov r4, #1 +_023078A0: + cmp sl, #0 + beq _023078C0 + ldrb r1, [r6, #0xec] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xec] + ldrb r0, [r6, #0xed] + strb r0, [r7, #0xed] +_023078C0: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xec] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_023077FC + + arm_func_start TransferNegativeBlinkerClassStatus +TransferNegativeBlinkerClassStatus: ; 0x023078EC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sb + mov r2, r0 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xf1] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _023079C4 +_0230795C: ; jump table + b _023079C4 ; case 0 + b _02307974 ; case 1 + b _02307994 ; case 2 + b _023079C4 ; case 3 + b _023079B0 ; case 4 + b _023079C4 ; case 5 +_02307974: + mov r0, sb + mov r1, r8 + mov r2, #1 + mov r3, r4 + bl TryInflictBlinkerStatus + mov sl, r0 + mov r4, #1 + b _023079C4 +_02307994: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictCrossEyedStatus + mov sl, r0 + mov r4, #1 + b _023079C4 +_023079B0: + mov r0, sb + mov r1, r8 + bl TryInflictDropeyeStatus + mov sl, r0 + mov r4, #1 +_023079C4: + cmp sl, #0 + beq _023079E4 + ldrb r1, [r6, #0xf1] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xf1] + ldrb r0, [r6, #0xf2] + strb r0, [r7, #0xf2] +_023079E4: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xf1] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + ldrb r0, [r6, #7] + cmp r0, #0 + beq _02307A24 + mov r0, #0x31 + bl AdvanceFrame + bl UpdateTrapsVisibility + bl UpdateMinimap +_02307A24: + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end TransferNegativeBlinkerClassStatus + + arm_func_start ov29_02307A2C +ov29_02307A2C: ; 0x02307A2C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sl, r0 + mov sb, r1 + mov r5, r4 + mov r6, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, sb + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sl + mov r2, r0 + ldr r7, [sl, #0xb4] + ldr r8, [sb, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, sb + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r7, #0xf3] + cmp r0, #0 + beq _02307AC0 + cmp r0, #1 + beq _02307AA8 + cmp r0, #2 + b _02307AC0 +_02307AA8: + mov r0, sl + mov r1, sb + mov r2, #1 + bl TryInflictMuzzledStatus + mov r5, r0 + mov r4, #1 +_02307AC0: + cmp r5, #0 + beq _02307AE0 + ldrb r1, [r7, #0xf3] + orr r0, r6, #0x11 + and r6, r0, #0xff + strb r1, [r8, #0xf3] + ldrb r0, [r7, #0xf4] + strb r0, [r8, #0xf4] +_02307AE0: + cmp r4, #0 + orrne r0, r6, #1 + movne r1, #0 + andne r6, r0, #0xff + mov r0, sl + strneb r1, [r7, #0xf3] + bl UpdateStatusIconFlags + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r6 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307A2C + + arm_func_start ov29_02307B0C +ov29_02307B0C: ; 0x02307B0C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sl, r0 + mov sb, r1 + mov r5, r4 + mov r6, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, sb + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sl + mov r2, r0 + ldr r7, [sl, #0xb4] + ldr r8, [sb, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, sb + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r7, #0xf5] + cmp r0, #1 + bne _02307B90 + mov r0, sl + mov r1, sb + mov r2, #1 + bl TryInflictMiracleEyeStatus + mov r5, r0 + mov r4, #1 +_02307B90: + cmp r5, #0 + beq _02307BB0 + ldrb r1, [r7, #0xf5] + orr r0, r6, #0x11 + and r6, r0, #0xff + strb r1, [r8, #0xf5] + ldrb r0, [r7, #0xf6] + strb r0, [r8, #0xf6] +_02307BB0: + cmp r4, #0 + orrne r0, r6, #1 + movne r1, #0 + andne r6, r0, #0xff + mov r0, sl + strneb r1, [r7, #0xf5] + bl UpdateStatusIconFlags + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r6 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307B0C + + arm_func_start TryEndPetrifiedOrSleepStatus +TryEndPetrifiedOrSleepStatus: ; 0x02307BDC + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r5, r1 + ldr r4, [r5, #0xb4] + mov r6, r0 + ldrb r2, [r4, #0xc4] + mov r3, #0 + cmp r2, #6 + bne _02307C0C + mov r2, #1 + bl EndFrozenClassStatus + mov r3, #1 +_02307C0C: + ldrb r0, [r4, #0xbd] + cmp r0, #1 + ldreqb r0, [r4, #0xbe] + cmpeq r0, #0x7f + bne _02307C3C + mov r3, #1 + mov r0, r6 + mov r1, r5 + mov r2, #0 + str r3, [sp] + bl EndSleepClassStatus + mov r3, #1 +_02307C3C: + mov r0, r3 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + arm_func_end TryEndPetrifiedOrSleepStatus + + arm_func_start ov29_02307C48 +ov29_02307C48: ; 0x02307C48 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr ip, [r4, #0xb4] + mov r3, #0 + mov r1, #1 + strb r3, [ip, #0xbd] + mov r2, r1 + strb r3, [ip, #0xbe] + bl ov29_022FA1D8 + mov r0, r4 + bl UpdateStatusIconFlags + ldmia sp!, {r4, pc} + arm_func_end ov29_02307C48 + + arm_func_start EndFrozenStatus +EndFrozenStatus: ; 0x02307C78 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r3, [r4, #0xb4] + ldrb r0, [r3, #0xc4] + cmp r0, #1 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, #0 + strb r0, [r3, #0xc4] + strb r0, [r3, #0xcc] + mov r1, r4 + mov r2, r0 + strb r0, [r3, #0xcd] + bl SubstitutePlaceholderStringTags + ldr r2, _02307CDC ; =0x00000C9F + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r4 + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02307CDC: .word 0x000009DF +#else +_02307CDC: .word 0x00000C9F +#endif + arm_func_end EndFrozenStatus + + arm_func_start ResetTypeChanges +ResetTypeChanges: ; 0x02307CE0 + stmdb sp!, {r4, lr} + ldr r4, [r0, #0xb4] + mov r1, #0 + bl TryRestoreRoostTyping + mov r1, #0 + strb r1, [r4, #0xff] + ldrsh r0, [r4, #2] + bl GetType + strb r0, [r4, #0x5e] + ldrsh r0, [r4, #2] + mov r1, #1 + bl GetType + strb r0, [r4, #0x5f] + ldmia sp!, {r4, pc} + arm_func_end ResetTypeChanges + + arm_func_start EndProtectStatus +EndProtectStatus: ; 0x02307D18 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, [r4, #0xb4] + ldrb r0, [r0, #0xd5] + cmp r0, #7 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl EndReflectClassStatus + ldmia sp!, {r3, r4, r5, pc} + arm_func_end EndProtectStatus + + arm_func_start TryRestoreRoostTyping +TryRestoreRoostTyping: ; 0x02307D54 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldrne r2, [r5, #0xb4] + ldrneb r0, [r2, #0xa9] + cmpne r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + strb r0, [r2, #0xa9] + ldrb r1, [r2, #0xaa] + cmp r4, #0 + strb r1, [r2, #0x5e] + ldrb r1, [r2, #0xab] + strb r1, [r2, #0x5f] + strb r0, [r2, #0xaa] + strb r0, [r2, #0xab] + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _02307DBC ; =0x00000CC8 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02307DBC: .word 0x00000A08 +#else +_02307DBC: .word 0x00000CC8 +#endif + arm_func_end TryRestoreRoostTyping + + arm_func_start ov29_02307DC0 +ov29_02307DC0: ; 0x02307DC0 +#ifdef JAPAN + ldr r1, [r0, #0xb4] + mov r0, #0 + strb r0, [r1, #0x103] + strb r0, [r1, #0x104] +#else + mov r1, #0 + strb r1, [r0, #0x104] + strb r1, [r0, #0x105] +#endif + bx lr + arm_func_end ov29_02307DC0 + + arm_func_start ov29_02307DD0 +ov29_02307DD0: ; 0x02307DD0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, #0 +_02307DD8: + ldr r0, _02307EF4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r6, [r0, #0xa94] +#else + ldr r6, [r0, #0xb38] +#endif + mov r0, r6 + bl EntityIsValid__02307EF8 + cmp r0, #0 + beq _02307EE4 + ldr r1, [r6, #0xb4] + ldrb r0, [r1, #0xbd] + cmp r0, #1 + ldreqb r0, [r1, #0xbe] + cmpeq r0, #0x7f + bne _02307EE4 + mov r8, #0 + mov r7, r8 + mov r5, r8 + ldrb sl, [r6, #0x25] + ldr fp, _02307EF4 ; =DUNGEON_PTR + b _02307EBC +_02307E2C: + ldr r0, [fp] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa84] +#else + ldr sb, [r0, #0xb28] +#endif + mov r0, sb + bl EntityIsValid__02307EF8 + cmp r0, #0 + beq _02307EB8 + mov r0, sb + mov r1, #0x1f + bl ItemIsActive__02307F1C + cmp r0, #0 + bne _02307EB8 + ldrsh r1, [sb, #4] + ldrsh r0, [r6, #4] + sub r0, r1, r0 + bl abs + cmp r0, #1 + bgt _02307E94 + ldrsh r1, [sb, #6] + ldrsh r0, [r6, #6] + sub r0, r1, r0 + bl abs + cmp r0, #1 + movle r8, #1 + ble _02307EC4 +_02307E94: + mov r0, sb + mov r1, #0x24 + bl ItemIsActive__02307F1C + cmp r0, #0 + beq _02307EB8 + ldrb r0, [sb, #0x25] + cmp sl, r0 + moveq r7, #1 + beq _02307EC4 +_02307EB8: + add r5, r5, #1 +_02307EBC: + cmp r5, #4 + blt _02307E2C +_02307EC4: + cmp r7, #0 + bne _02307ED4 + cmp r8, #0 + movne r7, #1 +_02307ED4: + cmp r7, #0 + beq _02307EE4 + mov r0, r6 + bl ov29_02307C48 +_02307EE4: + add r4, r4, #1 + cmp r4, #0x10 + blt _02307DD8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02307EF4: .word DUNGEON_PTR + arm_func_end ov29_02307DD0 diff --git a/asm/overlay_29_02336450.s b/asm/overlay_29_02336450.s index 2d5b4000..696a87c9 100644 --- a/asm/overlay_29_02336450.s +++ b/asm/overlay_29_02336450.s @@ -817,1016 +817,3 @@ _02336F2C: .align 2, 0 _02336F48: .word ov29_02352F14 arm_func_end ov29_02336DB0 - - arm_func_start UpdateTrapsVisibility -UpdateTrapsVisibility: ; 0x02336F4C -#ifdef JAPAN -#define UPDATE_TRAPS_VISIBILITY_OFFSET -0xA4 -#else -#define UPDATE_TRAPS_VISIBILITY_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - ldr r0, _02337108 ; =DUNGEON_PTR - ldr sl, [r0] - add r1, sl, #0x1a000 - ldrb r0, [r1, #0x245 + UPDATE_TRAPS_VISIBILITY_OFFSET] - str r0, [sp, #0x18] - ldrb fp, [r1, #0x244 + UPDATE_TRAPS_VISIBILITY_OFFSET] - bl IsSecretBazaar - ldr r1, _0233710C ; =0x0001A224 - ldr r2, _02337110 ; =ov29_02352B9C - ldrsh r3, [sl, r1] - ldr r1, _02337114 ; =ov29_02352D58 - mov sb, r3, asr #3 - str r0, [sp, #0x14] - add r0, sb, #0x1e - mov r0, r0, lsl #1 - ldrsh r7, [r2, r0] - ldrsh r5, [r1, r0] - mov r0, #0 - str r0, [sp, #0x10] -_02336FA0: - ldr r0, _02337118 ; =0x0001A226 - add r1, sl, #0xc4 + UPDATE_TRAPS_VISIBILITY_OFFSET - ldrsh r3, [sl, r0] - ldr r0, _02337110 ; =ov29_02352B9C - mov r2, r5, lsl #0x10 - mov r3, r3, asr #3 - sub r4, r3, #1 - add r3, r0, r4, lsl #1 - ldr r0, _02337114 ; =ov29_02352D58 - ldrsh r8, [r3, #0x3c] - add r0, r0, r4, lsl #1 - ldrsh r6, [r0, #0x3c] - add r0, r1, #0x4000 - add r3, r8, r8, lsl #1 - mov r1, r2, asr #0x10 - add r2, r7, r3 - mov r2, r2, lsl #0x10 - str fp, [sp] - mov r3, r2, asr #0x10 - ldr r2, [sp, #0x18] - and sb, sb, #0x3f - str r2, [sp, #4] - ldr r2, [sp, #0x14] - str r2, [sp, #8] - mov r2, r6, lsl #0x10 - mov r2, r2, asr #0x10 - bl ov29_02336DB0 - str r0, [sp, #0x1c] - mov r0, #0 - str r0, [sp, #0xc] - mov r0, r5, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x24] - add r0, sl, #0xc4 + UPDATE_TRAPS_VISIBILITY_OFFSET - str r0, [sp, #0x2c] - mov r0, r7, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x28] - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x20] -_02337044: - mov r0, #0 - str r0, [sp] - ldr r3, [sp, #0x1c] - and r4, r4, #0x1f - ldrh r2, [r3], #6 - str r3, [sp, #0x1c] - ldr r0, [sp, #0x20] - mov r1, r4 - mov r3, #1 - bl sub_02051D8C - add r8, r8, #1 - add r4, r4, #1 - cmp r8, #3 - bne _023370B8 - str fp, [sp] - ldr r0, [sp, #0x18] - add r6, r6, #1 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - mov r2, r6, lsl #0x10 - str r0, [sp, #8] - ldr r0, [sp, #0x2c] - ldr r1, [sp, #0x24] - ldr r3, [sp, #0x28] - add r0, r0, #0x4000 - mov r2, r2, asr #0x10 - mov r8, #0 - bl ov29_02336DB0 - str r0, [sp, #0x1c] -_023370B8: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x1b - blt _02337044 - ldr r0, [sp, #0x10] - add r7, r7, #1 - add r0, r0, #1 - cmp r7, #3 - add sb, sb, #1 - addeq r5, r5, #1 - moveq r7, #0 - str r0, [sp, #0x10] - cmp r0, #0x21 - blt _02336FA0 - mov r0, #1 - mov r1, #0 - bl sub_02051E60 - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337108: .word DUNGEON_PTR -_0233710C: .word 0x0001A224 + UPDATE_TRAPS_VISIBILITY_OFFSET -_02337110: .word ov29_02352B9C -_02337114: .word ov29_02352D58 -_02337118: .word 0x0001A226 + UPDATE_TRAPS_VISIBILITY_OFFSET - arm_func_end UpdateTrapsVisibility - - arm_func_start ov29_0233711C -ov29_0233711C: ; 0x0233711C -#ifdef JAPAN -#define OV29_0233711C_OFFSET -0xA4 -#else -#define OV29_0233711C_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - ldr r2, _02337294 ; =DUNGEON_PTR - mov r4, r1 - ldr sl, [r2] - mov r5, r0 - add r1, sl, #0x1a000 - ldrb r0, [r1, #0x245 + OV29_0233711C_OFFSET] - str r0, [sp, #0x18] - ldrb fp, [r1, #0x244 + OV29_0233711C_OFFSET] - bl IsSecretBazaar - ldr r2, _02337298 ; =0x0001A224 - ldr r1, _0233729C ; =ov29_02352B9C - add r3, r2, #2 - ldrsh r6, [sl, r2] - ldrsh r2, [sl, r3] - add r3, r6, r5 - str r0, [sp, #0x14] - add r0, r2, r4 - mov r0, r0, asr #3 - sub sb, r0, #1 - add r0, sb, #0x1e - mov r2, r0, lsl #1 - str fp, [sp] - ldr r0, [sp, #0x18] - mov r8, r3, asr #3 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - ldrsh r7, [r1, r2] - str r0, [sp, #8] - add r0, r8, #0x1e - mov r3, r0, lsl #1 - ldrsh r6, [r1, r3] - ldr r1, _023372A0 ; =ov29_02352D58 - add r0, sl, #0xc4 + OV29_0233711C_OFFSET - ldrsh r4, [r1, r3] - ldrsh r5, [r1, r2] - add r3, r7, r7, lsl #1 - add r3, r6, r3 - mov r1, r4, lsl #0x10 - mov r2, r5, lsl #0x10 - mov r3, r3, lsl #0x10 - add r0, r0, #0x4000 - mov r1, r1, asr #0x10 - mov r2, r2, asr #0x10 - mov r3, r3, asr #0x10 - bl ov29_02336DB0 - str r0, [sp, #0x10] - mov r0, #0 - str r0, [sp, #0xc] - mov r0, r4, lsl #0x10 - mov r1, r6, lsl #0x10 - add r4, sl, #0xc4 + OV29_0233711C_OFFSET - mov r6, r0, asr #0x10 - mov sl, r1, asr #0x10 -_023371F8: - mov r0, #0 - ldr r3, [sp, #0x10] - str r0, [sp] - ldrh r2, [r3], #6 - and r8, r8, #0x3f - and sb, sb, #0x1f - str r3, [sp, #0x10] - mov r0, r8 - mov r1, sb - mov r3, #1 - bl sub_02051D8C - add r7, r7, #1 - add sb, sb, #1 - cmp r7, #3 - bne _0233726C - str fp, [sp] - ldr r0, [sp, #0x18] - add r5, r5, #1 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - mov r2, r5, lsl #0x10 - str r0, [sp, #8] - add r0, r4, #0x4000 - mov r1, r6 - mov r2, r2, asr #0x10 - mov r3, sl - mov r7, #0 - bl ov29_02336DB0 - str r0, [sp, #0x10] -_0233726C: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x1b - blt _023371F8 - mov r0, #1 - mov r1, #0 - bl sub_02051E60 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337294: .word DUNGEON_PTR -_02337298: .word 0x0001A224 + OV29_0233711C_OFFSET -_0233729C: .word ov29_02352B9C -_023372A0: .word ov29_02352D58 - arm_func_end ov29_0233711C - - arm_func_start ov29_023372A4 -ov29_023372A4: ; 0x023372A4 -#ifdef JAPAN -#define OV29_023372A4_OFFSET -0xA4 -#else -#define OV29_023372A4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - ldr r2, _02337418 ; =DUNGEON_PTR - mov r4, r1 - ldr sl, [r2] - mov r5, r0 - add r1, sl, #0x1a000 - ldrb r0, [r1, #0x245 + OV29_023372A4_OFFSET] - str r0, [sp, #0x18] - ldrb fp, [r1, #0x244 + OV29_023372A4_OFFSET] - bl IsSecretBazaar - ldr r2, _0233741C ; =0x0001A224 - ldr r1, _02337420 ; =ov29_02352B9C - add r3, r2, #2 - ldrsh r6, [sl, r2] - ldrsh r2, [sl, r3] - add r3, r6, r5 - str r0, [sp, #0x14] - add r0, r2, r4 - mov r8, r0, asr #3 - add r0, r8, #0x1e - mov r7, r3, asr #3 - str fp, [sp] - mov r2, r0, lsl #1 - ldr r0, [sp, #0x18] - ldr r3, _02337424 ; =ov29_02352D58 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - ldrsh r5, [r3, r2] - str r0, [sp, #8] - add r0, r7, #0x1e - mov r4, r0, lsl #1 - ldrsh r6, [r1, r4] - ldrsh r1, [r1, r2] - add r0, sl, #0xc4 + OV29_023372A4_OFFSET - mov r2, r5, lsl #0x10 - ldrsh r4, [r3, r4] - add sb, r1, r1, lsl #1 - add r3, r6, sb - mov r1, r4, lsl #0x10 - mov r3, r3, lsl #0x10 - add r0, r0, #0x4000 - mov r1, r1, asr #0x10 - mov r2, r2, asr #0x10 - mov r3, r3, asr #0x10 - bl ov29_02336DB0 - str r0, [sp, #0x10] - mov r0, #0 - str r0, [sp, #0xc] - mov r0, r5, lsl #0x10 - mov r1, sb, lsl #0x10 - add r5, sl, #0xc4 + OV29_023372A4_OFFSET - mov sb, r0, asr #0x10 - mov sl, r1, asr #0x10 -_0233737C: - mov r0, #0 - ldr r3, [sp, #0x10] - str r0, [sp] - ldrh r2, [r3], #2 - and r7, r7, #0x3f - and r8, r8, #0x1f - str r3, [sp, #0x10] - mov r0, r7 - mov r1, r8 - mov r3, #1 - bl sub_02051D8C - add r6, r6, #1 - add r7, r7, #1 - cmp r6, #3 - bne _023373F0 - str fp, [sp] - ldr r0, [sp, #0x18] - add r4, r4, #1 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - mov r1, r4, lsl #0x10 - str r0, [sp, #8] - add r0, r5, #0x4000 - mov r1, r1, asr #0x10 - mov r2, sb - mov r3, sl - mov r6, #0 - bl ov29_02336DB0 - str r0, [sp, #0x10] -_023373F0: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x21 - blt _0233737C - mov r0, #1 - mov r1, #0 - bl sub_02051E60 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337418: .word DUNGEON_PTR -_0233741C: .word 0x0001A224 + OV29_023372A4_OFFSET -_02337420: .word ov29_02352B9C -_02337424: .word ov29_02352D58 - arm_func_end ov29_023372A4 - - arm_func_start DrawTileGrid -DrawTileGrid: ; 0x02337428 -#ifdef JAPAN -#define DRAW_TILE_GRID_OFFSET -0xA4 -#else -#define DRAW_TILE_GRID_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x44 - ldr r5, _02337780 ; =DUNGEON_PTR - str r2, [sp, #4] - mov r4, r0 - mov r7, r1 - mov r6, r3 - ldr r5, [r5] - bl GetLeader - ldr r1, _02337784 ; =0x0001A224 - ldr r2, _02337780 ; =DUNGEON_PTR - ldrsh r8, [r5, r1] - ldr r1, [r2] - ldr r2, _02337788 ; =DIRECTIONS_XY - add r1, r1, #0x1a000 - strb r6, [r1, #0x251 + DRAW_TILE_GRID_OFFSET] - mov r3, r7, lsl #2 - add r1, r2, r7, lsl #2 - ldrsh r3, [r2, r3] - ldrsh sl, [r1, #2] - ldrsh r6, [r4] - ldrsh r7, [r4, #2] - str r0, [sp, #0x20] - mov sb, r8, asr #3 - mov r2, #0 - add r1, sp, #0x2c -_02337490: - mov r0, r2, lsl #2 - strh r6, [r1, r0] - add r0, r1, r2, lsl #2 - add r2, r2, #1 - strh r7, [r0, #2] - cmp r2, #6 - add r6, r6, r3 - add r7, r7, sl - blt _02337490 - add r0, sb, #0x1e - mov r2, r0, lsl #1 - ldr r1, _0233778C ; =ov29_02352B9C - ldr r0, _02337790 ; =ov29_02352D58 - ldrsh r8, [r1, r2] - ldrsh r6, [r0, r2] - mov r0, #0 - str r0, [sp, #0xc] -_023374D4: - ldr r0, _02337794 ; =0x0001A226 - ldr r2, _0233778C ; =ov29_02352B9C - ldrsh r3, [r5, r0] - ldr r0, [sp, #4] - ldr r1, _02337790 ; =ov29_02352D58 - mov fp, r3, asr #3 - cmp r0, #0 - add r0, r2, fp, lsl #1 - add r1, r1, fp, lsl #1 - ldrsh r0, [r0, #0x3c] - ldrsh r7, [r1, #0x3c] - strh r6, [sp, #0x28] - str r0, [sp, #0x1c] - add r0, r0, r0, lsl #1 - strh r7, [sp, #0x2a] - add sl, r8, r0 - beq _02337544 - ldrsh r0, [r4] - cmp r6, r0 - ldreqsh r0, [r4, #2] - cmpeq r7, r0 - addeq r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET - addeq r0, r0, #0x12000 - addeq sl, r0, sl, lsl #1 - addne r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET - addne r0, r0, #0x12000 - addne sl, r0, sl, lsl #1 - b _023375E8 -_02337544: - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CannotStandOnTileNoMonsterCheck - cmp r0, #0 - bne _023375DC - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CanSeePosition - cmp r0, #0 - beq _023375DC - mov r0, #0 - add r2, sp, #0x2c - b _02337598 -_02337578: - mov r3, r0, lsl #2 - ldrsh r1, [r2, r3] - cmp r6, r1 - addeq r1, r2, r3 - ldreqsh r1, [r1, #2] - cmpeq r7, r1 - beq _023375A0 - add r0, r0, #1 -_02337598: - cmp r0, #6 - blt _02337578 -_023375A0: - cmp r0, #6 - bne _023375CC - bl GetGridsOption - cmp r0, #0 -#ifdef JAPAN - addne r0, r5, #0x9a - addne r0, r0, #0x12000 -#else - ldrne r0, _02337798 ; =0x0001213E - addne r0, r5, r0 -#endif - addne sl, r0, sl, lsl #1 - addeq r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET - addeq r0, r0, #0x12000 - addeq sl, r0, sl, lsl #1 - b _023375E8 -_023375CC: - add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET - add r0, r0, #0x12000 - add sl, r0, sl, lsl #1 - b _023375E8 -_023375DC: - add r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET - add r0, r0, #0x12000 - add sl, r0, sl, lsl #1 -_023375E8: - add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET - add r0, r0, #0x12000 - add r0, r0, r8, lsl #1 -#ifdef JAPAN - add r1, r5, #0x88 - str r0, [sp, #0x18] - add r0, r1, #0x12000 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x14] - mov r0, #0 - str r0, [sp, #8] - add r0, r5, #0x9a - add r0, r0, #0x12000 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x10] -#else - ldr r1, _02337798 ; =0x0001213E - str r0, [sp, #0x18] - add r0, r5, r1 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x10] - mov r0, #0 - str r0, [sp, #8] - add r0, r5, #0x12c - add r0, r0, #0x12000 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x14] -#endif - mov r0, r6, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x24] -_0233762C: - mov r0, #0 - str r0, [sp] - ldrh r2, [sl], #6 - and sb, sb, #0x3f - and fp, fp, #0x1f - mov r0, sb - mov r1, fp - mov r3, #0 - bl sub_02051D8C - ldr r0, [sp, #0x1c] - add fp, fp, #1 - add r0, r0, #1 - str r0, [sp, #0x1c] - cmp r0, #3 - bne _02337730 - ldr r0, [sp, #0x24] - add r7, r7, #1 - strh r0, [sp, #0x28] - ldr r0, [sp, #4] - cmp r0, #0 - mov r0, #0 - str r0, [sp, #0x1c] - strh r7, [sp, #0x2a] - beq _023376A8 - ldrsh r0, [r4] - cmp r6, r0 - ldreqsh r0, [r4, #2] - cmpeq r7, r0 - ldreq sl, [sp, #0x18] - ldrne sl, [sp, #0x14] - b _02337730 -_023376A8: - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CannotStandOnTileNoMonsterCheck - cmp r0, #0 - bne _0233772C - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CanSeePosition - cmp r0, #0 - beq _0233772C - mov r0, #0 - b _02337700 -_023376D8: - mov r2, r0, lsl #2 - add r1, sp, #0x2c - ldrsh r1, [r1, r2] - cmp r6, r1 - addeq r1, sp, #0x2c - addeq r1, r1, r2 - ldreqsh r1, [r1, #2] - cmpeq r7, r1 - beq _02337708 - add r0, r0, #1 -_02337700: - cmp r0, #6 - blt _023376D8 -_02337708: - cmp r0, #6 - bne _02337724 - bl GetGridsOption - cmp r0, #0 - ldrne sl, [sp, #0x10] - ldreq sl, [sp, #0x14] - b _02337730 -_02337724: - ldr sl, [sp, #0x18] - b _02337730 -_0233772C: - ldr sl, [sp, #0x14] -_02337730: - ldr r0, [sp, #8] - add r0, r0, #1 - str r0, [sp, #8] - cmp r0, #0x19 - blt _0233762C - ldr r0, [sp, #0xc] - add r8, r8, #1 - add r0, r0, #1 - cmp r8, #3 - add sb, sb, #1 - addeq r6, r6, #1 - moveq r8, #0 - str r0, [sp, #0xc] - cmp r0, #0x21 - blt _023374D4 - mov r0, #0 - mov r1, r0 - bl sub_02051E60 - add sp, sp, #0x44 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337780: .word DUNGEON_PTR -_02337784: .word 0x0001A224 + DRAW_TILE_GRID_OFFSET -_02337788: .word DIRECTIONS_XY -_0233778C: .word ov29_02352B9C -_02337790: .word ov29_02352D58 -_02337794: .word 0x0001A226 + DRAW_TILE_GRID_OFFSET -#ifndef JAPAN -_02337798: .word 0x0001213E -#endif - arm_func_end DrawTileGrid - - arm_func_start HideTileGrid -HideTileGrid: ; 0x0233779C - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r8, #0 - mov r5, r8 - mov r6, r8 -_023377B0: - mov r0, r8, lsl #0x10 - mov r7, r6 - mov r4, r0, asr #0x10 -_023377BC: - mov r0, r7, lsl #0x10 - mov r1, r4 - mov r2, r5 - mov r3, r5 - mov r0, r0, asr #0x10 - str r5, [sp] - bl sub_02051D8C - add r7, r7, #1 - cmp r7, #0x20 - blt _023377BC - add r8, r8, #1 - cmp r8, #0x20 - blt _023377B0 - mov r0, #0 - mov r1, r0 - bl sub_02051E60 - ldr r0, _02337818 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1a000 -#ifdef JAPAN - strb r1, [r0, #0x1ad] -#else - strb r1, [r0, #0x251] -#endif - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02337818: .word DUNGEON_PTR - arm_func_end HideTileGrid - - arm_func_start ov29_0233781C -ov29_0233781C: ; 0x0233781C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, #0 - mov r4, r7 - mov r5, r7 -_0233782C: - mov r6, r5 -_02337830: - mov r0, r6 - mov r1, r7 - bl GetTileSafe - add r6, r6, #1 - strh r4, [r0, #2] - cmp r6, #0x38 - blt _02337830 - add r7, r7, #1 - cmp r7, #0x20 - blt _0233782C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov29_0233781C - - arm_func_start ov29_0233785C -ov29_0233785C: ; 0x0233785C -#ifdef JAPAN -#define OV29_0233785C_OFFSET -0xA4 -#else -#define OV29_0233785C_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _02337A34 ; =0x0000270F - mov r3, #0 - ldr r6, _02337A38 ; =DUNGEON_PTR - mov sb, r3 - rsb r0, r1, #0 - mov r4, #0x1c -_02337878: - mul r2, r3, r4 - ldr r5, [r6] - add r3, r3, #1 - add r5, r5, r2 - add r5, r5, #0xe000 - strb sb, [r5, #0xee8 + OV29_0233785C_OFFSET] - ldr r5, [r6] - cmp r3, #0x20 - add r5, r5, r2 - add r5, r5, #0xe000 - strb sb, [r5, #0xee9 + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r5, r5, r2 - add r5, r5, #0xee00 - strh r1, [r5, #0xea + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r5, r5, r2 - add r5, r5, #0xee00 - strh r1, [r5, #0xec + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r5, r5, r2 - add r5, r5, #0xee00 - strh r0, [r5, #0xee + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r2, r5, r2 - add r2, r2, #0xee00 - strh r0, [r2, #0xf0 + OV29_0233785C_OFFSET] - blt _02337878 - mov sl, sb -_023378EC: - add r5, sl, #1 - mov r0, sl, lsl #0x10 - mov r1, r5, lsl #0x10 - ldr fp, _02337A38 ; =DUNGEON_PTR - mov r8, #0 - mov r6, r0, asr #0x10 - mov r4, r1, asr #0x10 - mov r7, #1 -_0233790C: - mov r0, r8 - mov r1, sl - bl GetTile - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233797C - mov r0, #0x1c - mul r2, r1, r0 - ldr r0, [fp] - add r0, r0, #0x2e8 + OV29_0233785C_OFFSET - add r0, r0, #0xec00 - strb r7, [r0, r2] - add r0, r0, r2 - ldrsh r2, [r0, #2] - cmp r2, r8 - strgth r8, [r0, #2] - ldrsh r2, [r0, #4] - cmp r2, sl - strgth r6, [r0, #4] - ldrsh r3, [r0, #6] - add r2, r8, #1 - cmp r3, r2 - strlth r2, [r0, #6] - ldrsh r2, [r0, #8] - cmp r2, r5 - strlth r4, [r0, #8] - cmp sb, r1 - andlt sb, r1, #0xff -_0233797C: - add r8, r8, #1 - cmp r8, #0x38 - blt _0233790C - add sl, sl, #1 - cmp sl, #0x20 - blt _023378EC - mov r2, #0x18 - ldr r7, _02337A38 ; =DUNGEON_PTR - mov r1, #0 - mov r3, r2 - mov r4, r2 - mov r5, r2 - mov r6, #0x1c -_023379B0: - mul sl, r1, r6 - ldr r0, [r7] - add r0, r0, #0x2e8 + OV29_0233785C_OFFSET - add r0, r0, #0xec00 - ldrb r8, [r0, sl] - add r0, r0, sl - cmp r8, #0 - beq _02337A10 - ldrsh r8, [r0, #2] - sub r8, r8, #1 - mul sl, r8, r2 - str sl, [r0, #0xc] - ldrsh r8, [r0, #4] - sub r8, r8, #1 - mul sl, r8, r3 - str sl, [r0, #0x10] - ldrsh r8, [r0, #6] - add r8, r8, #1 - mul sl, r8, r4 - str sl, [r0, #0x14] - ldrsh r8, [r0, #8] - add r8, r8, #1 - mul sl, r8, r5 - str sl, [r0, #0x18] -_02337A10: - add r1, r1, #1 - cmp r1, #0x20 - blt _023379B0 - ldr r0, _02337A38 ; =DUNGEON_PTR - add r1, sb, #1 - ldr r0, [r0] - add r0, r0, #0xe000 - strb r1, [r0, #0xee4 + OV29_0233785C_OFFSET] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337A34: .word 0x0000270F -_02337A38: .word DUNGEON_PTR - arm_func_end ov29_0233785C - - arm_func_start DiscoverMinimap -DiscoverMinimap: ; 0x02337A3C -#ifdef JAPAN -#define DISCOVER_MINIMAP_OFFSET -0xA4 -#else -#define DISCOVER_MINIMAP_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r0 - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - bl GetTile - ldrb r4, [r0, #7] - bl GetVisibilityRange - ldr r1, _02337B28 ; =DUNGEON_PTR - ldr r3, [r1] - add r1, r3, #0x1a000 - ldrb r2, [r1, #0x23e + DISCOVER_MINIMAP_OFFSET] - cmp r2, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - ldrb r1, [r1, #0x250 + DISCOVER_MINIMAP_OFFSET] - cmp r1, #0 - bne _02337A84 - cmp r4, #0xff - bne _02337AA0 -_02337A84: - ldrsh r2, [r5] - ldrsh r1, [r5, #2] - sub r4, r2, r0 - sub r7, r1, r0 - add r5, r2, r0 - add r6, r1, r0 - b _02337B1C -_02337AA0: - add r0, r3, #0x2e8 + DISCOVER_MINIMAP_OFFSET - add r1, r0, #0xec00 - mov r0, #0x1c - mla r2, r4, r0, r1 - ldrb r0, [r2, #1] - cmp r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, #1 - strb r0, [r2, #1] - ldrsh r1, [r2, #2] - ldrsh r0, [r2, #4] - ldrsh r5, [r2, #6] - ldrsh r6, [r2, #8] - sub r4, r1, #1 - sub r7, r0, #1 - b _02337B1C -_02337AE0: - mov r8, r4 - b _02337B10 -_02337AE8: - mov r0, r8 - mov r1, r7 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r7 - orr r2, r2, #3 - strh r2, [r0, #2] - mov r0, r8 - bl DrawMinimapTile - add r8, r8, #1 -_02337B10: - cmp r8, r5 - ble _02337AE8 - add r7, r7, #1 -_02337B1C: - cmp r7, r6 - ble _02337AE0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02337B28: .word DUNGEON_PTR - arm_func_end DiscoverMinimap - - arm_func_start PositionHasItem -PositionHasItem: ; 0x02337B2C - stmdb sp!, {r3, lr} - mov r1, r0 - ldrsh r0, [r1] - ldrsh r1, [r1, #2] - bl GetTile - ldr r0, [r0, #0x10] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - ldr r0, [r0] - cmp r0, #3 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end PositionHasItem - - arm_func_start PositionHasMonster -PositionHasMonster: ; 0x02337B68 - stmdb sp!, {r3, lr} - mov r1, r0 - ldrsh r0, [r1] - ldrsh r1, [r1, #2] - bl GetTile - ldr r0, [r0, #0xc] - cmp r0, #0 - beq _02337B94 - ldr r1, [r0] - cmp r1, #1 - ldmeqia sp!, {r3, pc} -_02337B94: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end PositionHasMonster - - arm_func_start TrySmashWall -TrySmashWall: ; 0x02337B9C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - mov r5, #0 - bl GetTileSafe - ldrh r1, [r0] - tst r1, #3 - bne _02337C4C - ldrh r1, [r0] - tst r1, #0x100 - bne _02337C4C - tst r1, #0x10 - bne _02337C4C - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - mov r5, #1 - sub r7, r5, #2 - orr r1, r1, #1 - strh r1, [r0] - mov r4, r7 -_02337BF4: - mov r6, r4 -_02337BF8: - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r6, r0 - add r1, r7, r1 - bl ov29_02336694 - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r6, r0 - add r1, r7, r1 - bl DetermineTileWalkableNeighbors - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r6, r0 - add r1, r7, r1 - bl DrawMinimapTile - add r6, r6, #1 - cmp r6, #1 - ble _02337BF8 - add r7, r7, #1 - cmp r7, #1 - ble _02337BF4 -_02337C4C: - cmp r5, #0 - beq _02337C9C - ldr r4, _02337CA4 ; =DUNGEON_PTR - mov r6, #0 -_02337C5C: - ldr r0, [r4] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xad4] -#else - ldr r7, [r0, #0xb78] -#endif - mov r0, r7 - bl EntityIsValid__02337CA8 - cmp r0, #0 - beq _02337C84 - mov r0, r7 - bl DetermineMonsterShadow -_02337C84: - add r6, r6, #1 - cmp r6, #0x14 - blt _02337C5C - bl UpdateTrapsVisibility - mov r0, r8 - bl ov29_022E66C4 -_02337C9C: - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02337CA4: .word DUNGEON_PTR - arm_func_end TrySmashWall diff --git a/asm/overlay_29_0233711C.s b/asm/overlay_29_0233711C.s new file mode 100644 index 00000000..1bee35a9 --- /dev/null +++ b/asm/overlay_29_0233711C.s @@ -0,0 +1,888 @@ + .include "asm/macros.inc" + .include "overlay_29_0233711C.inc" + + .text + + arm_func_start ov29_0233711C +ov29_0233711C: ; 0x0233711C +#ifdef JAPAN +#define OV29_0233711C_OFFSET -0xA4 +#else +#define OV29_0233711C_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + ldr r2, _02337294 ; =DUNGEON_PTR + mov r4, r1 + ldr sl, [r2] + mov r5, r0 + add r1, sl, #0x1a000 + ldrb r0, [r1, #0x245 + OV29_0233711C_OFFSET] + str r0, [sp, #0x18] + ldrb fp, [r1, #0x244 + OV29_0233711C_OFFSET] + bl IsSecretBazaar + ldr r2, _02337298 ; =0x0001A224 + ldr r1, _0233729C ; =ov29_02352B9C + add r3, r2, #2 + ldrsh r6, [sl, r2] + ldrsh r2, [sl, r3] + add r3, r6, r5 + str r0, [sp, #0x14] + add r0, r2, r4 + mov r0, r0, asr #3 + sub sb, r0, #1 + add r0, sb, #0x1e + mov r2, r0, lsl #1 + str fp, [sp] + ldr r0, [sp, #0x18] + mov r8, r3, asr #3 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + ldrsh r7, [r1, r2] + str r0, [sp, #8] + add r0, r8, #0x1e + mov r3, r0, lsl #1 + ldrsh r6, [r1, r3] + ldr r1, _023372A0 ; =ov29_02352D58 + add r0, sl, #0xc4 + OV29_0233711C_OFFSET + ldrsh r4, [r1, r3] + ldrsh r5, [r1, r2] + add r3, r7, r7, lsl #1 + add r3, r6, r3 + mov r1, r4, lsl #0x10 + mov r2, r5, lsl #0x10 + mov r3, r3, lsl #0x10 + add r0, r0, #0x4000 + mov r1, r1, asr #0x10 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + bl ov29_02336DB0 + str r0, [sp, #0x10] + mov r0, #0 + str r0, [sp, #0xc] + mov r0, r4, lsl #0x10 + mov r1, r6, lsl #0x10 + add r4, sl, #0xc4 + OV29_0233711C_OFFSET + mov r6, r0, asr #0x10 + mov sl, r1, asr #0x10 +_023371F8: + mov r0, #0 + ldr r3, [sp, #0x10] + str r0, [sp] + ldrh r2, [r3], #6 + and r8, r8, #0x3f + and sb, sb, #0x1f + str r3, [sp, #0x10] + mov r0, r8 + mov r1, sb + mov r3, #1 + bl sub_02051D8C + add r7, r7, #1 + add sb, sb, #1 + cmp r7, #3 + bne _0233726C + str fp, [sp] + ldr r0, [sp, #0x18] + add r5, r5, #1 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + mov r2, r5, lsl #0x10 + str r0, [sp, #8] + add r0, r4, #0x4000 + mov r1, r6 + mov r2, r2, asr #0x10 + mov r3, sl + mov r7, #0 + bl ov29_02336DB0 + str r0, [sp, #0x10] +_0233726C: + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #0x1b + blt _023371F8 + mov r0, #1 + mov r1, #0 + bl sub_02051E60 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337294: .word DUNGEON_PTR +_02337298: .word 0x0001A224 + OV29_0233711C_OFFSET +_0233729C: .word ov29_02352B9C +_023372A0: .word ov29_02352D58 + arm_func_end ov29_0233711C + + arm_func_start ov29_023372A4 +ov29_023372A4: ; 0x023372A4 +#ifdef JAPAN +#define OV29_023372A4_OFFSET -0xA4 +#else +#define OV29_023372A4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + ldr r2, _02337418 ; =DUNGEON_PTR + mov r4, r1 + ldr sl, [r2] + mov r5, r0 + add r1, sl, #0x1a000 + ldrb r0, [r1, #0x245 + OV29_023372A4_OFFSET] + str r0, [sp, #0x18] + ldrb fp, [r1, #0x244 + OV29_023372A4_OFFSET] + bl IsSecretBazaar + ldr r2, _0233741C ; =0x0001A224 + ldr r1, _02337420 ; =ov29_02352B9C + add r3, r2, #2 + ldrsh r6, [sl, r2] + ldrsh r2, [sl, r3] + add r3, r6, r5 + str r0, [sp, #0x14] + add r0, r2, r4 + mov r8, r0, asr #3 + add r0, r8, #0x1e + mov r7, r3, asr #3 + str fp, [sp] + mov r2, r0, lsl #1 + ldr r0, [sp, #0x18] + ldr r3, _02337424 ; =ov29_02352D58 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + ldrsh r5, [r3, r2] + str r0, [sp, #8] + add r0, r7, #0x1e + mov r4, r0, lsl #1 + ldrsh r6, [r1, r4] + ldrsh r1, [r1, r2] + add r0, sl, #0xc4 + OV29_023372A4_OFFSET + mov r2, r5, lsl #0x10 + ldrsh r4, [r3, r4] + add sb, r1, r1, lsl #1 + add r3, r6, sb + mov r1, r4, lsl #0x10 + mov r3, r3, lsl #0x10 + add r0, r0, #0x4000 + mov r1, r1, asr #0x10 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + bl ov29_02336DB0 + str r0, [sp, #0x10] + mov r0, #0 + str r0, [sp, #0xc] + mov r0, r5, lsl #0x10 + mov r1, sb, lsl #0x10 + add r5, sl, #0xc4 + OV29_023372A4_OFFSET + mov sb, r0, asr #0x10 + mov sl, r1, asr #0x10 +_0233737C: + mov r0, #0 + ldr r3, [sp, #0x10] + str r0, [sp] + ldrh r2, [r3], #2 + and r7, r7, #0x3f + and r8, r8, #0x1f + str r3, [sp, #0x10] + mov r0, r7 + mov r1, r8 + mov r3, #1 + bl sub_02051D8C + add r6, r6, #1 + add r7, r7, #1 + cmp r6, #3 + bne _023373F0 + str fp, [sp] + ldr r0, [sp, #0x18] + add r4, r4, #1 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + mov r1, r4, lsl #0x10 + str r0, [sp, #8] + add r0, r5, #0x4000 + mov r1, r1, asr #0x10 + mov r2, sb + mov r3, sl + mov r6, #0 + bl ov29_02336DB0 + str r0, [sp, #0x10] +_023373F0: + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #0x21 + blt _0233737C + mov r0, #1 + mov r1, #0 + bl sub_02051E60 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337418: .word DUNGEON_PTR +_0233741C: .word 0x0001A224 + OV29_023372A4_OFFSET +_02337420: .word ov29_02352B9C +_02337424: .word ov29_02352D58 + arm_func_end ov29_023372A4 + + arm_func_start DrawTileGrid +DrawTileGrid: ; 0x02337428 +#ifdef JAPAN +#define DRAW_TILE_GRID_OFFSET -0xA4 +#else +#define DRAW_TILE_GRID_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x44 + ldr r5, _02337780 ; =DUNGEON_PTR + str r2, [sp, #4] + mov r4, r0 + mov r7, r1 + mov r6, r3 + ldr r5, [r5] + bl GetLeader + ldr r1, _02337784 ; =0x0001A224 + ldr r2, _02337780 ; =DUNGEON_PTR + ldrsh r8, [r5, r1] + ldr r1, [r2] + ldr r2, _02337788 ; =DIRECTIONS_XY + add r1, r1, #0x1a000 + strb r6, [r1, #0x251 + DRAW_TILE_GRID_OFFSET] + mov r3, r7, lsl #2 + add r1, r2, r7, lsl #2 + ldrsh r3, [r2, r3] + ldrsh sl, [r1, #2] + ldrsh r6, [r4] + ldrsh r7, [r4, #2] + str r0, [sp, #0x20] + mov sb, r8, asr #3 + mov r2, #0 + add r1, sp, #0x2c +_02337490: + mov r0, r2, lsl #2 + strh r6, [r1, r0] + add r0, r1, r2, lsl #2 + add r2, r2, #1 + strh r7, [r0, #2] + cmp r2, #6 + add r6, r6, r3 + add r7, r7, sl + blt _02337490 + add r0, sb, #0x1e + mov r2, r0, lsl #1 + ldr r1, _0233778C ; =ov29_02352B9C + ldr r0, _02337790 ; =ov29_02352D58 + ldrsh r8, [r1, r2] + ldrsh r6, [r0, r2] + mov r0, #0 + str r0, [sp, #0xc] +_023374D4: + ldr r0, _02337794 ; =0x0001A226 + ldr r2, _0233778C ; =ov29_02352B9C + ldrsh r3, [r5, r0] + ldr r0, [sp, #4] + ldr r1, _02337790 ; =ov29_02352D58 + mov fp, r3, asr #3 + cmp r0, #0 + add r0, r2, fp, lsl #1 + add r1, r1, fp, lsl #1 + ldrsh r0, [r0, #0x3c] + ldrsh r7, [r1, #0x3c] + strh r6, [sp, #0x28] + str r0, [sp, #0x1c] + add r0, r0, r0, lsl #1 + strh r7, [sp, #0x2a] + add sl, r8, r0 + beq _02337544 + ldrsh r0, [r4] + cmp r6, r0 + ldreqsh r0, [r4, #2] + cmpeq r7, r0 + addeq r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET + addeq r0, r0, #0x12000 + addeq sl, r0, sl, lsl #1 + addne r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET + addne r0, r0, #0x12000 + addne sl, r0, sl, lsl #1 + b _023375E8 +_02337544: + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CannotStandOnTileNoMonsterCheck + cmp r0, #0 + bne _023375DC + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CanSeePosition + cmp r0, #0 + beq _023375DC + mov r0, #0 + add r2, sp, #0x2c + b _02337598 +_02337578: + mov r3, r0, lsl #2 + ldrsh r1, [r2, r3] + cmp r6, r1 + addeq r1, r2, r3 + ldreqsh r1, [r1, #2] + cmpeq r7, r1 + beq _023375A0 + add r0, r0, #1 +_02337598: + cmp r0, #6 + blt _02337578 +_023375A0: + cmp r0, #6 + bne _023375CC + bl GetGridsOption + cmp r0, #0 +#ifdef JAPAN + addne r0, r5, #0x9a + addne r0, r0, #0x12000 +#else + ldrne r0, _02337798 ; =0x0001213E + addne r0, r5, r0 +#endif + addne sl, r0, sl, lsl #1 + addeq r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET + addeq r0, r0, #0x12000 + addeq sl, r0, sl, lsl #1 + b _023375E8 +_023375CC: + add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET + add r0, r0, #0x12000 + add sl, r0, sl, lsl #1 + b _023375E8 +_023375DC: + add r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET + add r0, r0, #0x12000 + add sl, r0, sl, lsl #1 +_023375E8: + add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET + add r0, r0, #0x12000 + add r0, r0, r8, lsl #1 +#ifdef JAPAN + add r1, r5, #0x88 + str r0, [sp, #0x18] + add r0, r1, #0x12000 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x14] + mov r0, #0 + str r0, [sp, #8] + add r0, r5, #0x9a + add r0, r0, #0x12000 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x10] +#else + ldr r1, _02337798 ; =0x0001213E + str r0, [sp, #0x18] + add r0, r5, r1 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x10] + mov r0, #0 + str r0, [sp, #8] + add r0, r5, #0x12c + add r0, r0, #0x12000 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x14] +#endif + mov r0, r6, lsl #0x10 + mov r0, r0, asr #0x10 + str r0, [sp, #0x24] +_0233762C: + mov r0, #0 + str r0, [sp] + ldrh r2, [sl], #6 + and sb, sb, #0x3f + and fp, fp, #0x1f + mov r0, sb + mov r1, fp + mov r3, #0 + bl sub_02051D8C + ldr r0, [sp, #0x1c] + add fp, fp, #1 + add r0, r0, #1 + str r0, [sp, #0x1c] + cmp r0, #3 + bne _02337730 + ldr r0, [sp, #0x24] + add r7, r7, #1 + strh r0, [sp, #0x28] + ldr r0, [sp, #4] + cmp r0, #0 + mov r0, #0 + str r0, [sp, #0x1c] + strh r7, [sp, #0x2a] + beq _023376A8 + ldrsh r0, [r4] + cmp r6, r0 + ldreqsh r0, [r4, #2] + cmpeq r7, r0 + ldreq sl, [sp, #0x18] + ldrne sl, [sp, #0x14] + b _02337730 +_023376A8: + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CannotStandOnTileNoMonsterCheck + cmp r0, #0 + bne _0233772C + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CanSeePosition + cmp r0, #0 + beq _0233772C + mov r0, #0 + b _02337700 +_023376D8: + mov r2, r0, lsl #2 + add r1, sp, #0x2c + ldrsh r1, [r1, r2] + cmp r6, r1 + addeq r1, sp, #0x2c + addeq r1, r1, r2 + ldreqsh r1, [r1, #2] + cmpeq r7, r1 + beq _02337708 + add r0, r0, #1 +_02337700: + cmp r0, #6 + blt _023376D8 +_02337708: + cmp r0, #6 + bne _02337724 + bl GetGridsOption + cmp r0, #0 + ldrne sl, [sp, #0x10] + ldreq sl, [sp, #0x14] + b _02337730 +_02337724: + ldr sl, [sp, #0x18] + b _02337730 +_0233772C: + ldr sl, [sp, #0x14] +_02337730: + ldr r0, [sp, #8] + add r0, r0, #1 + str r0, [sp, #8] + cmp r0, #0x19 + blt _0233762C + ldr r0, [sp, #0xc] + add r8, r8, #1 + add r0, r0, #1 + cmp r8, #3 + add sb, sb, #1 + addeq r6, r6, #1 + moveq r8, #0 + str r0, [sp, #0xc] + cmp r0, #0x21 + blt _023374D4 + mov r0, #0 + mov r1, r0 + bl sub_02051E60 + add sp, sp, #0x44 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337780: .word DUNGEON_PTR +_02337784: .word 0x0001A224 + DRAW_TILE_GRID_OFFSET +_02337788: .word DIRECTIONS_XY +_0233778C: .word ov29_02352B9C +_02337790: .word ov29_02352D58 +_02337794: .word 0x0001A226 + DRAW_TILE_GRID_OFFSET +#ifndef JAPAN +_02337798: .word 0x0001213E +#endif + arm_func_end DrawTileGrid + + arm_func_start HideTileGrid +HideTileGrid: ; 0x0233779C + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r8, #0 + mov r5, r8 + mov r6, r8 +_023377B0: + mov r0, r8, lsl #0x10 + mov r7, r6 + mov r4, r0, asr #0x10 +_023377BC: + mov r0, r7, lsl #0x10 + mov r1, r4 + mov r2, r5 + mov r3, r5 + mov r0, r0, asr #0x10 + str r5, [sp] + bl sub_02051D8C + add r7, r7, #1 + cmp r7, #0x20 + blt _023377BC + add r8, r8, #1 + cmp r8, #0x20 + blt _023377B0 + mov r0, #0 + mov r1, r0 + bl sub_02051E60 + ldr r0, _02337818 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1a000 +#ifdef JAPAN + strb r1, [r0, #0x1ad] +#else + strb r1, [r0, #0x251] +#endif + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02337818: .word DUNGEON_PTR + arm_func_end HideTileGrid + + arm_func_start ov29_0233781C +ov29_0233781C: ; 0x0233781C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, #0 + mov r4, r7 + mov r5, r7 +_0233782C: + mov r6, r5 +_02337830: + mov r0, r6 + mov r1, r7 + bl GetTileSafe + add r6, r6, #1 + strh r4, [r0, #2] + cmp r6, #0x38 + blt _02337830 + add r7, r7, #1 + cmp r7, #0x20 + blt _0233782C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov29_0233781C + + arm_func_start ov29_0233785C +ov29_0233785C: ; 0x0233785C +#ifdef JAPAN +#define OV29_0233785C_OFFSET -0xA4 +#else +#define OV29_0233785C_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r1, _02337A34 ; =0x0000270F + mov r3, #0 + ldr r6, _02337A38 ; =DUNGEON_PTR + mov sb, r3 + rsb r0, r1, #0 + mov r4, #0x1c +_02337878: + mul r2, r3, r4 + ldr r5, [r6] + add r3, r3, #1 + add r5, r5, r2 + add r5, r5, #0xe000 + strb sb, [r5, #0xee8 + OV29_0233785C_OFFSET] + ldr r5, [r6] + cmp r3, #0x20 + add r5, r5, r2 + add r5, r5, #0xe000 + strb sb, [r5, #0xee9 + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r5, r5, r2 + add r5, r5, #0xee00 + strh r1, [r5, #0xea + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r5, r5, r2 + add r5, r5, #0xee00 + strh r1, [r5, #0xec + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r5, r5, r2 + add r5, r5, #0xee00 + strh r0, [r5, #0xee + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r2, r5, r2 + add r2, r2, #0xee00 + strh r0, [r2, #0xf0 + OV29_0233785C_OFFSET] + blt _02337878 + mov sl, sb +_023378EC: + add r5, sl, #1 + mov r0, sl, lsl #0x10 + mov r1, r5, lsl #0x10 + ldr fp, _02337A38 ; =DUNGEON_PTR + mov r8, #0 + mov r6, r0, asr #0x10 + mov r4, r1, asr #0x10 + mov r7, #1 +_0233790C: + mov r0, r8 + mov r1, sl + bl GetTile + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233797C + mov r0, #0x1c + mul r2, r1, r0 + ldr r0, [fp] + add r0, r0, #0x2e8 + OV29_0233785C_OFFSET + add r0, r0, #0xec00 + strb r7, [r0, r2] + add r0, r0, r2 + ldrsh r2, [r0, #2] + cmp r2, r8 + strgth r8, [r0, #2] + ldrsh r2, [r0, #4] + cmp r2, sl + strgth r6, [r0, #4] + ldrsh r3, [r0, #6] + add r2, r8, #1 + cmp r3, r2 + strlth r2, [r0, #6] + ldrsh r2, [r0, #8] + cmp r2, r5 + strlth r4, [r0, #8] + cmp sb, r1 + andlt sb, r1, #0xff +_0233797C: + add r8, r8, #1 + cmp r8, #0x38 + blt _0233790C + add sl, sl, #1 + cmp sl, #0x20 + blt _023378EC + mov r2, #0x18 + ldr r7, _02337A38 ; =DUNGEON_PTR + mov r1, #0 + mov r3, r2 + mov r4, r2 + mov r5, r2 + mov r6, #0x1c +_023379B0: + mul sl, r1, r6 + ldr r0, [r7] + add r0, r0, #0x2e8 + OV29_0233785C_OFFSET + add r0, r0, #0xec00 + ldrb r8, [r0, sl] + add r0, r0, sl + cmp r8, #0 + beq _02337A10 + ldrsh r8, [r0, #2] + sub r8, r8, #1 + mul sl, r8, r2 + str sl, [r0, #0xc] + ldrsh r8, [r0, #4] + sub r8, r8, #1 + mul sl, r8, r3 + str sl, [r0, #0x10] + ldrsh r8, [r0, #6] + add r8, r8, #1 + mul sl, r8, r4 + str sl, [r0, #0x14] + ldrsh r8, [r0, #8] + add r8, r8, #1 + mul sl, r8, r5 + str sl, [r0, #0x18] +_02337A10: + add r1, r1, #1 + cmp r1, #0x20 + blt _023379B0 + ldr r0, _02337A38 ; =DUNGEON_PTR + add r1, sb, #1 + ldr r0, [r0] + add r0, r0, #0xe000 + strb r1, [r0, #0xee4 + OV29_0233785C_OFFSET] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337A34: .word 0x0000270F +_02337A38: .word DUNGEON_PTR + arm_func_end ov29_0233785C + + arm_func_start DiscoverMinimap +DiscoverMinimap: ; 0x02337A3C +#ifdef JAPAN +#define DISCOVER_MINIMAP_OFFSET -0xA4 +#else +#define DISCOVER_MINIMAP_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, r0 + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + bl GetTile + ldrb r4, [r0, #7] + bl GetVisibilityRange + ldr r1, _02337B28 ; =DUNGEON_PTR + ldr r3, [r1] + add r1, r3, #0x1a000 + ldrb r2, [r1, #0x23e + DISCOVER_MINIMAP_OFFSET] + cmp r2, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldrb r1, [r1, #0x250 + DISCOVER_MINIMAP_OFFSET] + cmp r1, #0 + bne _02337A84 + cmp r4, #0xff + bne _02337AA0 +_02337A84: + ldrsh r2, [r5] + ldrsh r1, [r5, #2] + sub r4, r2, r0 + sub r7, r1, r0 + add r5, r2, r0 + add r6, r1, r0 + b _02337B1C +_02337AA0: + add r0, r3, #0x2e8 + DISCOVER_MINIMAP_OFFSET + add r1, r0, #0xec00 + mov r0, #0x1c + mla r2, r4, r0, r1 + ldrb r0, [r2, #1] + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, #1 + strb r0, [r2, #1] + ldrsh r1, [r2, #2] + ldrsh r0, [r2, #4] + ldrsh r5, [r2, #6] + ldrsh r6, [r2, #8] + sub r4, r1, #1 + sub r7, r0, #1 + b _02337B1C +_02337AE0: + mov r8, r4 + b _02337B10 +_02337AE8: + mov r0, r8 + mov r1, r7 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r7 + orr r2, r2, #3 + strh r2, [r0, #2] + mov r0, r8 + bl DrawMinimapTile + add r8, r8, #1 +_02337B10: + cmp r8, r5 + ble _02337AE8 + add r7, r7, #1 +_02337B1C: + cmp r7, r6 + ble _02337AE0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02337B28: .word DUNGEON_PTR + arm_func_end DiscoverMinimap + + arm_func_start PositionHasItem +PositionHasItem: ; 0x02337B2C + stmdb sp!, {r3, lr} + mov r1, r0 + ldrsh r0, [r1] + ldrsh r1, [r1, #2] + bl GetTile + ldr r0, [r0, #0x10] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + ldr r0, [r0] + cmp r0, #3 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end PositionHasItem + + arm_func_start PositionHasMonster +PositionHasMonster: ; 0x02337B68 + stmdb sp!, {r3, lr} + mov r1, r0 + ldrsh r0, [r1] + ldrsh r1, [r1, #2] + bl GetTile + ldr r0, [r0, #0xc] + cmp r0, #0 + beq _02337B94 + ldr r1, [r0] + cmp r1, #1 + ldmeqia sp!, {r3, pc} +_02337B94: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end PositionHasMonster + + arm_func_start TrySmashWall +TrySmashWall: ; 0x02337B9C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + mov r5, #0 + bl GetTileSafe + ldrh r1, [r0] + tst r1, #3 + bne _02337C4C + ldrh r1, [r0] + tst r1, #0x100 + bne _02337C4C + tst r1, #0x10 + bne _02337C4C + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + mov r5, #1 + sub r7, r5, #2 + orr r1, r1, #1 + strh r1, [r0] + mov r4, r7 +_02337BF4: + mov r6, r4 +_02337BF8: + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r6, r0 + add r1, r7, r1 + bl ov29_02336694 + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r6, r0 + add r1, r7, r1 + bl DetermineTileWalkableNeighbors + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r6, r0 + add r1, r7, r1 + bl DrawMinimapTile + add r6, r6, #1 + cmp r6, #1 + ble _02337BF8 + add r7, r7, #1 + cmp r7, #1 + ble _02337BF4 +_02337C4C: + cmp r5, #0 + beq _02337C9C + ldr r4, _02337CA4 ; =DUNGEON_PTR + mov r6, #0 +_02337C5C: + ldr r0, [r4] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xad4] +#else + ldr r7, [r0, #0xb78] +#endif + mov r0, r7 + bl EntityIsValid__02337CA8 + cmp r0, #0 + beq _02337C84 + mov r0, r7 + bl DetermineMonsterShadow +_02337C84: + add r6, r6, #1 + cmp r6, #0x14 + blt _02337C5C + bl UpdateTrapsVisibility + mov r0, r8 + bl ov29_022E66C4 +_02337C9C: + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02337CA4: .word DUNGEON_PTR + arm_func_end TrySmashWall diff --git a/asm/overlay_29_0233ED34.s b/asm/overlay_29_0233F424.s similarity index 78% rename from asm/overlay_29_0233ED34.s rename to asm/overlay_29_0233F424.s index 0ff8745b..10c3b2d3 100644 --- a/asm/overlay_29_0233ED34.s +++ b/asm/overlay_29_0233F424.s @@ -1,516 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_0233ED34.inc" + .include "overlay_29_0233F424.inc" .text - 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} diff --git a/asm/overlay_29_023456BC.s b/asm/overlay_29_023456BC.s index 1080f952..4a571746 100644 --- a/asm/overlay_29_023456BC.s +++ b/asm/overlay_29_023456BC.s @@ -260,996 +260,3 @@ _02345A30: .word ov29_023537B4 _02345A34: .word 0xFFFF000F _02345A38: .word OBJ_GRAPHICS_CONTROLS_PTR arm_func_end DisplayItem - - arm_func_start SpawnDroppedItemWrapper -SpawnDroppedItemWrapper: ; 0x02345A3C - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0xc0 - mov r5, r2 - mov r4, #0 - mov r6, #3 - mov r2, #1 - str r6, [sp, #8] - strb r2, [sp, #0x28] - str r5, [sp, #0xbc] - strb r4, [sp, #0x2c] - strb r4, [sp, #0x2a] - ldrh r4, [r1] - mov r6, r0 - mov r2, #0x18 - strh r4, [sp, #0xc] - ldrh ip, [r1, #2] - mov r4, r3 - add r0, sp, #8 - strh ip, [sp, #0xe] - ldrsh r3, [r1] - ldrsh r1, [r1, #2] - smulbb r3, r3, r2 - smulbb r1, r1, r2 - add r2, r1, #4 - add r3, r3, #4 - mov r1, r3, lsl #8 - mov r2, r2, lsl #8 - bl SetEntityPixelPosXY - mov r0, #0 - strh r0, [sp, #0x2e] - str r0, [sp] - add r1, sp, #8 - mov r0, r6 - mov r2, r5 - mov r3, #1 - str r4, [sp, #4] - bl SpawnDroppedItem - add sp, sp, #0xc0 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end SpawnDroppedItemWrapper - - arm_func_start SpawnDroppedItem -SpawnDroppedItem: ; 0x02345AD8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - mov r8, r1 - mov sb, r0 - ldrsh r0, [r8, #4] - ldrsh r1, [r8, #6] - mov r7, r2 - mov r4, r3 - ldr r6, [sp, #0x38] - bl GetTile - ldr r0, [r0, #0x10] - mov r5, #0 - cmp r0, #0 - beq _02345B5C - ldr r0, [r0] - cmp r0, #2 - bne _02345B5C - ldrb r2, [sp, #0x3c] - mov r0, r8 - add r1, r8, #4 - bl ov29_02347378 - add r0, r8, #4 - bl RevealAttackedTile - ldr r1, _02345D64 ; =0x00000BD8 - mov r0, sb - bl LogMessageByIdWithPopupCheckUser - ldrb r0, [r7] - tst r0, #1 - movne r0, #1 - moveq r0, r5 - tst r0, #0xff - moveq r0, #0 - beq _02345D5C -_02345B5C: - ldrsh r0, [r8, #4] - cmp r4, #0 - movne r4, #0 - strh r0, [sp, #0xc] - ldrsh r0, [r8, #6] - ldrh r1, [sp, #0xc] - ldr fp, _02345D68 ; =DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST - strh r0, [sp, #0xe] - ldrh r0, [sp, #0xe] - strh r1, [sp, #8] - moveq r4, #1 - strh r0, [sp, #0xa] -_02345B8C: - mov r0, r4, lsl #2 - ldrsh r3, [fp, r0] - cmp r3, #0x63 - moveq r5, #0 - beq _02345C44 - ldrsh r2, [r8, #4] - add r0, fp, r0 - ldrsh r1, [r0, #2] - add r0, r2, r3 - strh r0, [sp, #0xc] - ldrsh r2, [r8, #6] - ldrsh r0, [sp, #0xc] - add r1, r2, r1 - strh r1, [sp, #0xe] - ldrsh r1, [sp, #0xe] - bl GetTile - mov sl, r0 - ldrh r0, [sl] - tst r0, #3 - beq _02345C3C - tst r0, #0x200 - ldreq r0, [sl, #0x10] - cmpeq r0, #0 - bne _02345C3C - ldrb r2, [sp, #0x3c] - add r1, sp, #0xc - mov r0, r8 - bl ov29_02347378 - ldrh r0, [sl] - ldrh r2, [sp, #0xc] - ldrh r1, [sp, #0xe] - and r0, r0, #3 - cmp r0, #3 - strh r2, [sp, #8] - strh r1, [sp, #0xa] - moveq r5, #1 - beq _02345C44 - add r0, sp, #0xc - mov r1, r7 - mov r2, #1 - bl SpawnItem - cmp r0, #0 - movne r5, #1 - b _02345C44 -_02345C3C: - add r4, r4, #1 - b _02345B8C -_02345C44: - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345D6C ; =ov29_023531BC - mov r1, r7 - mov r0, #0 - bl SubstitutePlaceholderItemTags - cmp r5, #0 - beq _02345CF4 - ldrsh r0, [sp, #0xc] - ldrsh r1, [sp, #0xe] - bl DrawMinimapTile - ldrsh r0, [sp, #0xc] - ldrsh r1, [sp, #0xe] - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _02345D58 -_02345C94: ; jump table - b _02345CCC ; case 0 - b _02345CA4 ; case 1 - b _02345CB8 ; case 2 - b _02345CE0 ; case 3 -_02345CA4: - ldr r2, _02345D70 ; =0x00000BD9 - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CB8: - ldr r2, _02345D74 ; =0x00000BDA - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CCC: - ldr r2, _02345D78 ; =0x00000BDB - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CE0: - ldr r2, _02345D7C ; =0x00000BDF - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CF4: - ldrsh r2, [sp, #8] - ldrsh r1, [sp, #0xa] - mov r0, #0x18 - smulbb r2, r2, r0 - smulbb r0, r1, r0 - add r1, r2, #0xc - add r0, r0, #0xc - mov r2, r1, lsl #8 - mov r1, r0, lsl #8 - str r2, [sp] - str r1, [sp, #4] - cmp r6, #0 - beq _02345D40 - ldrsh r0, [r6] - add r0, r2, r0, lsl #8 - str r0, [sp] - ldrsh r0, [r6, #2] - add r0, r1, r0, lsl #8 - str r0, [sp, #4] -_02345D40: - add r0, sp, #0 - bl ov29_022E563C - ldr r2, _02345D80 ; =0x00000BDC - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown -_02345D58: - mov r0, r5 -_02345D5C: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define SPAWN_DROPPED_ITEM_OFFSET -0x2C1 -#else -#define SPAWN_DROPPED_ITEM_OFFSET 0 -#endif -_02345D64: .word 0x00000BD8 + SPAWN_DROPPED_ITEM_OFFSET -_02345D68: .word DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST -_02345D6C: .word ov29_023531BC -_02345D70: .word 0x00000BD9 + SPAWN_DROPPED_ITEM_OFFSET -_02345D74: .word 0x00000BDA + SPAWN_DROPPED_ITEM_OFFSET -_02345D78: .word 0x00000BDB + SPAWN_DROPPED_ITEM_OFFSET -_02345D7C: .word 0x00000BDF + SPAWN_DROPPED_ITEM_OFFSET -_02345D80: .word 0x00000BDC + SPAWN_DROPPED_ITEM_OFFSET - arm_func_end SpawnDroppedItem - - arm_func_start ov29_02345D84 -ov29_02345D84: ; 0x02345D84 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - mov sl, r1 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - str r2, [sp, #4] - mov sb, r3 - bl GetTile - ldr r0, _02346048 ; =DUNGEON_PTR - mov r4, #0 - ldr r0, [r0] - ldr r1, _0234604C ; =SECONDARY_TERRAIN_TYPES - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - mov r7, r4 - mov r8, r4 - ldrb r0, [r1, r0] - mov r6, #1 - mov fp, #0 - cmp r0, #1 - ldrsh r0, [sl, #4] - moveq r7, #1 - ldr r5, _02346050 ; =DISPLACEMENTS_WITHIN_3 - strh r0, [sp, #0x14] - ldrsh r0, [sl, #6] - ldrh r1, [sp, #0x14] - strh r0, [sp, #0x16] - ldrh r0, [sp, #0x16] - strh r1, [sp, #0x10] - strh r0, [sp, #0x12] - b _02345F74 -_02345E00: - mov r0, r6, lsl #2 - ldrsh r0, [r5, r0] - ldrsh r3, [sl, #4] - cmp r0, #0x63 - moveq r6, fp - mov r0, r6, lsl #2 - ldrsh r2, [r5, r0] - add r0, r5, r6, lsl #2 - ldrsh r1, [r0, #2] - add r0, r3, r2 - strh r0, [sp, #0x14] - ldrsh r2, [sl, #6] - ldrsh r0, [sp, #0x14] - moveq r8, #1 - add r1, r2, r1 - strh r1, [sp, #0x16] - ldrsh r1, [sp, #0x16] - bl GetTile - ldrh r1, [r0] - ands r2, r1, #3 - beq _02345F70 - tst r1, #0x200 - bne _02345F70 - ldr r0, [r0, #0x10] - cmp r0, #0 - bne _02345F64 - ldrh r1, [sp, #0x14] - ldrh r0, [sp, #0x16] - cmp r2, #3 - strh r1, [sp, #0x10] - strh r0, [sp, #0x12] - beq _02345F70 - cmp r7, #0 - beq _02345E90 - cmp r2, #2 - beq _02345F70 -_02345E90: - ldr r0, _02346048 ; =DUNGEON_PTR - ldrsh r2, [sp, #0x14] - ldr r3, [r0] - mov r0, #0x18 - ldrsh r1, [sp, #0x16] - smulbb r2, r2, r0 - smulbb r1, r1, r0 - add r0, r3, #0x1a000 - add r2, r2, #4 - add r1, r1, #4 -#ifdef JAPAN - ldrb fp, [r0, #0x1a1] -#else - ldrb fp, [r0, #0x245] -#endif - mov r5, #0x10000 - mov r7, r2, lsl #8 - mov r8, r1, lsl #8 - mov r0, sl - mov r1, r7 - mov r2, r8 - str r5, [sl, #0x1c] - bl SetEntityPixelPosXY - mov r6, #0 -_02345EE0: - sub r5, r5, #0x800 - mov r2, #0 - str r5, [sl, #0x1c] - mov r0, sl - mov r1, fp - mov r3, r2 - str r2, [sp] - bl DisplayItem - mov r0, #0x13 - bl AdvanceFrame - add r6, r6, #1 - cmp r6, #0x20 - blt _02345EE0 - mov r0, sl - mov r1, r7 - mov r2, r8 - bl SetEntityPixelPosXY - mov r2, #0 - str r2, [sl, #0x1c] - mov r0, sl - mov r1, fp - mov r3, r2 - str r2, [sp] - bl DisplayItem - mov r0, #0x13 - bl AdvanceFrame - ldr r1, [sp, #4] - add r0, sp, #0x14 - mov r2, #1 - bl SpawnItem - cmp r0, #0 - movne r4, #1 - b _02345F7C -_02345F64: - cmp r8, #0 - movne r4, #0 - bne _02345F7C -_02345F70: - add r6, r6, #1 -_02345F74: - cmp r8, #0 - beq _02345E00 -_02345F7C: - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02346054 ; =ov29_023531BC - ldr r1, [sp, #4] - mov r0, #0 - bl SubstitutePlaceholderItemTags - cmp r4, #0 - beq _02345FC4 - bl PlayDungeonTipSound__022EB66C - ldr r1, _02346058 ; =0x00000B74 - mov r0, #0 - mov r2, #1 - bl DisplayMessage2 - ldr r1, _02346058 ; =0x00000B74 - mov r0, #0 - bl LogMessageByIdQuiet - b _0234603C -_02345FC4: - ldrsh r2, [sp, #0x10] - ldrsh r1, [sp, #0x12] - mov r0, #0x18 - smulbb r2, r2, r0 - smulbb r0, r1, r0 - add r1, r2, #0xc - add r0, r0, #0xc - mov r2, r1, lsl #8 - mov r1, r0, lsl #8 - str r2, [sp, #8] - str r1, [sp, #0xc] - cmp sb, #0 - beq _02346010 - ldrsh r0, [sb] - add r0, r2, r0, lsl #8 - str r0, [sp, #8] - ldrsh r0, [sb, #2] - add r0, r1, r0, lsl #8 - str r0, [sp, #0xc] -_02346010: - add r0, sp, #8 - bl ov29_022E563C - ldr r1, _0234605C ; =0x00000B75 - mov r0, #0 - mov r2, #1 - bl DisplayMessage2 - ldr r1, _0234605C ; =0x00000B75 - mov r0, #0 - bl LogMessageByIdQuiet - mov r0, #0 - b _02346040 -_0234603C: - mov r0, #1 -_02346040: - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02346048: .word DUNGEON_PTR -_0234604C: .word SECONDARY_TERRAIN_TYPES -_02346050: .word DISPLACEMENTS_WITHIN_3 -_02346054: .word ov29_023531BC -#ifdef JAPAN -_02346058: .word 0x00000885 -_0234605C: .word 0x00000886 -#else -_02346058: .word 0x00000B74 -_0234605C: .word 0x00000B75 -#endif - arm_func_end ov29_02345D84 - - arm_func_start TryGenerateUnownStoneDrop -TryGenerateUnownStoneDrop: ; 0x02346060 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - mov r5, r1 - bl IsMarowakTrainingMaze - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - bl IsUnown - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, _023460D8 ; =UNOWN_STONE_DROP_CHANCE - ldrsh r0, [r0] - bl DungeonRandOutcome__022EAB20 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - sub r0, r5, #0xc9 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - add r0, r0, #0x190 - mov r1, r0, lsl #0x10 - mov r0, r4 - mov r1, r1, asr #0x10 - mov r2, #0 - mov r3, #2 - bl GenerateItem - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023460D8: .word UNOWN_STONE_DROP_CHANCE - arm_func_end TryGenerateUnownStoneDrop - - arm_func_start ov29_023460DC -ov29_023460DC: ; 0x023460DC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x18 - mov r7, r0 - mov r4, r1 - mov r6, r2 - mov r5, r3 - bl ov29_022FB51C - cmp r0, #0 - beq _02346134 - bl IsCurrentFixedRoomBossFight - cmp r0, #0 - bne _02346134 - bl IsMarowakTrainingMaze - cmp r0, #0 - bne _02346134 - mov r0, r4 - bl EntityIsValid__02345698 - cmp r0, #0 - beq _02346134 - ldr r0, [r4] - cmp r0, #1 - beq _0234613C -_02346134: - mov r0, #0 - b _02346330 -_0234613C: - ldr r4, [r4, #0xb4] - add r1, sp, #0 - ldrsh r0, [r4, #2] - bl GetTreasureBoxChances - cmp r5, #0 - ble _02346184 - ldr r1, _02346338 ; =ov10_022C48EC - mov lr, #0 - add r3, sp, #0 -_02346160: - mov ip, lr, lsl #1 - ldrsh r2, [r3, ip] - add lr, lr, #1 - cmp r2, #0 - ldrnesh r0, [r1, ip] - mlane r0, r5, r0, r2 - strneh r0, [r3, ip] - cmp lr, #4 - blt _02346160 -_02346184: - mov r2, #0 - mov r1, r2 - add r0, sp, #8 -_02346190: - str r1, [r0, r2, lsl #2] - add r2, r2, #1 - cmp r2, #4 - blt _02346190 - ldrsh r0, [sp] - mov ip, #1 - add r5, sp, #0 - str r0, [sp, #8] - add r2, sp, #8 -_023461B4: - mov r3, ip, lsl #1 - add r1, r2, ip, lsl #2 - ldrsh r3, [r5, r3] - ldr r1, [r1, #-4] - add r1, r1, r3 - str r1, [r2, ip, lsl #2] - add ip, ip, #1 - cmp ip, #4 - add r0, r0, r3 - blt _023461B4 - bl DungeonRandInt - ldr r1, [sp, #8] - cmp r1, #0 - beq _023461F4 - cmp r0, r1 - bge _023461FC -_023461F4: - mov r0, #0 - b _02346330 -_023461FC: - ldr r1, [sp, #0xc] - cmp r0, r1 - bge _0234626C - mov r5, #0 - mov r4, r5 - cmp r6, #0 - beq _02346230 - mov r0, #0x64 - bl DungeonRandInt - ldr r1, _0234633C ; =ov10_022C44C8 - ldrsh r1, [r1] - cmp r1, r0 - movlt r5, #1 -_02346230: - cmp r5, #0 - movne r5, #0x67 - bne _02346310 - ldr r0, _02346340 ; =DUNGEON_PTR - ldr r0, [r0] - add r5, r0, #0x348 - add r0, r5, #0x400 - bl GetMissionRank__0204FAE0 - mov r1, r0 - cmp r1, #0xf - movgt r1, #0xf - add r0, r5, #0x400 - bl RetrieveFromItemList1 - mov r5, r0 - b _02346310 -_0234626C: - ldr r1, [sp, #0x10] - cmp r0, r1 - ldrsh r0, [r4, #2] - bge _023462C8 - mov r1, #0 - bl GetExclusiveItem - movs r5, r0 - mov r4, #1 - bne _02346310 - ldr r0, _02346340 ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x7cc] - cmp r0, #0 - moveq r0, #0x6e - movne r0, #0x6a - bl DungeonRandInt - mov r0, r0, lsl #0x12 - mov r0, r0, asr #0x10 - add r0, r0, #0x3e - add r0, r0, #0x200 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - b _02346310 -_023462C8: - mov r1, #1 - bl GetExclusiveItem - movs r5, r0 - mov r4, #2 - bne _02346310 - ldr r0, _02346340 ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x7cc] - cmp r0, #0 - moveq r0, #0x6e - movne r0, #0x6a - bl DungeonRandInt - mov r0, r0, lsl #0x12 - mov r0, r0, asr #0x10 - add r0, r0, #0x3f - add r0, r0, #0x200 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 -_02346310: - mov r0, r4 - bl ov29_02344BF8 - mov r1, r0 - mov r0, r7 - mov r2, r5 - mov r3, #2 - bl GenerateItem - mov r0, #1 -_02346330: - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02346338: .word ov10_022C48EC -_0234633C: .word ov10_022C44C8 -_02346340: .word DUNGEON_PTR - arm_func_end ov29_023460DC - - arm_func_start ov29_02346344 -ov29_02346344: ; 0x02346344 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x3ec - sub sp, sp, #0x400 - mov r4, #0 - str r0, [sp, #4] - str r1, [sp, #8] - ldr sb, [sp, #0x810] - ldr r8, [sp, #0x814] - ldr r7, [sp, #0x818] - mov fp, r2 - mov sl, r3 - mov r1, r4 - mov r6, r4 - add r0, sp, #0x24 -_0234637C: - strb r6, [r0, r1] - add r1, r1, #1 - cmp r1, #0x1e - blt _0234637C - b _0234647C -_02346390: - ldrsh r1, [fp] - ldrsh r0, [fp, #2] - mov r5, #0 - strh r1, [sp, #0x20] - str r5, [sp, #0x14] - strh r0, [sp, #0x22] -_023463A8: - cmp r5, #0x1e - bge _02346454 - mov r2, r5, lsl #2 - ldrsh r0, [r8, r2] - cmp r0, #0x63 - beq _02346454 - add r1, sp, #0x24 - ldrb r1, [r1, r5] - cmp r1, #0 - bne _0234644C - add r1, r8, r2 - ldrsh r1, [r1, #2] - ldrsh r3, [fp] - ldrsh r2, [fp, #2] - add r3, r3, r0 - add r0, r2, r1 - strh r3, [sp, #0x20] - strh r0, [sp, #0x22] - ldrsh r0, [sp, #0x20] - ldrsh r1, [sp, #0x22] - bl GetTile - ldrh r1, [r0] - tst r1, #3 - beq _0234644C - tst r1, #0x200 - ldreq r0, [r0, #0x10] - cmpeq r0, #0 - bne _0234644C - ldrh r1, [sp, #0x20] - add r0, sp, #0x42 - mov r2, r6, lsl #2 - strh r1, [r0, r2] - mov r1, #1 - ldrh r3, [sp, #0x22] - str r1, [sp, #0x14] - mov r2, r1 - add r1, sp, #0x24 - add r0, r0, r6, lsl #2 - strb r2, [r1, r5] - strh r3, [r0, #2] - b _02346454 -_0234644C: - add r5, r5, #1 - b _023463A8 -_02346454: - ldr r0, [sp, #0x14] - cmp r0, #0 - bne _02346478 - add r0, sp, #0x42 - mov r1, r6, lsl #2 - mvn r2, #0 - strh r2, [r0, r1] - add r0, r0, r6, lsl #2 - strh r2, [r0, #2] -_02346478: - add r6, r6, #1 -_0234647C: - cmp r6, sb - blt _02346390 - mov r1, #0 - mov r5, r1 - mov r8, r1 - add fp, sp, #0x42 - b _023465B4 -_02346498: - mov r0, r8, lsl #2 - ldrsh r2, [fp, r0] - cmp r2, #0 - bge _023464C4 - mov r0, #0xb8 - mul r3, r8, r0 - mov r2, #0 - add r0, sp, #0xbc - str r2, [r0, r3] - mov r5, #1 - b _023465B0 -_023464C4: - mov r1, #0xb8 - mul r3, r8, r1 - add r1, sp, #0xbc - mov r2, #3 - str r2, [r1, r3] - add r6, r1, r3 - mov r1, #0 - strb r1, [r6, #0x24] - mov r1, #1 - strb r1, [r6, #0x20] - mov r1, #0 - strb r1, [r6, #0x22] - mov r1, #6 - mla r1, r8, r1, sl - str r1, [r6, #0xb4] - add r1, fp, r0 - ldrh r2, [fp, r0] - ldrh r1, [r1, #2] - mov r0, r6 - strh r2, [r6, #4] - strh r1, [r6, #6] - ldr r1, [sp, #8] - ldrsh r2, [r1] - ldrsh r3, [r1, #2] - mov r1, #0x18 - smulbb r1, r2, r1 - mov r2, #0x18 - smulbb r2, r3, r2 - add r1, r1, #4 - add r2, r2, #4 - mov r1, r1, lsl #8 - mov r2, r2, lsl #8 - bl SetEntityPixelPosXY - mov r0, #0 - strh r0, [r6, #0x26] - mov r0, r8, lsl #2 - ldrsh r3, [fp, r0] - mov r1, #0x18 - mov r0, r1 - smulbb r0, r3, r0 - ldr r2, [r6, #0xc] - add r0, r0, #4 - rsb r0, r2, r0, lsl #8 - bl _s32_div_f - add r1, sp, #0x6c - str r0, [r1, r8, lsl #3] - add r0, fp, r8, lsl #2 - ldrsh r3, [r0, #2] - mov r1, #0x18 - mov r0, r1 - smulbb r0, r3, r0 - ldr r2, [r6, #0x10] - add r0, r0, #4 - rsb r0, r2, r0, lsl #8 - bl _s32_div_f - add r1, sp, #0x6c - add r1, r1, r8, lsl #3 - str r0, [r1, #4] - mov r1, #1 -_023465B0: - add r8, r8, #1 -_023465B4: - cmp r8, sb - blt _02346498 - cmp r1, #0 - bne _02346614 - cmp r7, #0 - beq _0234660C - cmp sb, #2 - blt _023465E4 - ldr r1, _023467D0 ; =0x00000BDD - ldr r0, [sp, #4] - bl LogMessageByIdWithPopupCheckUser - b _0234660C -_023465E4: - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _023467D4 ; =ov29_023531BC - mov r1, sl - mov r0, #0 - bl SubstitutePlaceholderItemTags - ldr r1, _023467D8 ; =0x00000BDC - ldr r0, [sp, #4] - bl LogMessageByIdWithPopupCheckUser -_0234660C: - mov r0, #0 - b _023467C4 -_02346614: - cmp r5, #0 - cmpne r7, #0 - beq _0234662C - ldr r1, _023467DC ; =0x00000BDE - ldr r0, [sp, #4] - bl LogMessageByIdWithPopupCheckUser -_0234662C: - ldr r0, _023467E0 ; =DUNGEON_PTR - mov r6, #0 - ldr r0, [r0] - mov fp, r6 - add r0, r0, #0x1a000 -#ifdef JAPAN - ldrb r0, [r0, #0x1a1] -#else - ldrb r0, [r0, #0x245] -#endif - mov r5, r6 - str r0, [sp, #0x10] -_0234664C: - and r0, r6, #0xff - mov r8, #0 - str r0, [sp, #0x1c] - b _023466E4 -_0234665C: - mov r0, #0xb8 - mul r0, r8, r0 - add r1, sp, #0xbc - str r0, [sp, #0x18] - add r0, r1, r0 - bl EntityIsValid__02345698 - cmp r0, #0 - beq _023466E0 - mov r1, #0xb8 - add r0, sp, #0xbc - mla r0, r8, r1, r0 - add r2, sp, #0x6c - add r1, sp, #0x6c - add r2, r2, r8, lsl #3 - ldr r1, [r1, r8, lsl #3] - ldr r2, [r2, #4] - str r0, [sp, #0xc] - bl IncrementEntityPixelPosXY - mov r0, fp - bl SinAbs4096 - mov r1, #0xc - mul r1, r0, r1 - ldr r0, [sp, #0xc] - ldr r3, [sp, #0x1c] - str r1, [r0, #0x1c] - ldr r0, [sp, #0x18] - add r1, sp, #0xbc - add r0, r1, r0 - mov r1, #0 - str r1, [sp] - ldr r1, [sp, #0x10] - mov r2, #1 - bl DisplayItem -_023466E0: - add r8, r8, #1 -_023466E4: - cmp r8, sb - blt _0234665C - mov r0, #0x13 - bl AdvanceFrame - tst r5, #3 - addeq r6, r6, #1 - add r5, r5, #1 - add fp, fp, #0x55 - and r6, r6, #7 - cmp r5, #0x18 - blt _0234664C - mov r8, #0 - add r6, sp, #0x42 - mov fp, r8 - mov r5, #6 - b _023467B8 -_02346724: - mov r1, r8, lsl #2 - ldrsh r0, [r6, r1] - cmp r0, #0 - blt _023467B4 - add r1, r6, r1 - ldrsh r1, [r1, #2] - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #3 - bne _02346784 - cmp r7, #0 - beq _023467B4 - mov r0, fp - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _023467D4 ; =ov29_023531BC - mov r0, #0 - mov r1, sl - bl SubstitutePlaceholderItemTags - ldr r0, [sp, #4] - ldr r1, _023467D8 ; =0x00000BDC - bl LogMessageByIdWithPopupCheckUser - b _023467B4 -_02346784: - mla r1, r8, r5, sl - add r0, r6, r8, lsl #2 - mov r2, #1 - bl SpawnItem -#ifndef JAPAN - mov r0, r8, lsl #2 - add r1, r6, r8, lsl #2 - ldrsh r0, [r6, r0] - ldrsh r1, [r1, #2] - bl DrawMinimapTile -#endif - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 -_023467B4: - add r8, r8, #1 -_023467B8: - cmp r8, sb - blt _02346724 - mov r0, r4 -_023467C4: - add sp, sp, #0x3ec - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV29_02346344_OFFSET -0x2C1 -#else -#define OV29_02346344_OFFSET 0 -#endif -_023467D0: .word 0x00000BDD + OV29_02346344_OFFSET -_023467D4: .word ov29_023531BC -_023467D8: .word 0x00000BDC + OV29_02346344_OFFSET -_023467DC: .word 0x00000BDE + OV29_02346344_OFFSET -_023467E0: .word DUNGEON_PTR - arm_func_end ov29_02346344 diff --git a/asm/overlay_29_02345AD8.s b/asm/overlay_29_02345AD8.s new file mode 100644 index 00000000..0aa727fa --- /dev/null +++ b/asm/overlay_29_02345AD8.s @@ -0,0 +1,954 @@ + .include "asm/macros.inc" + .include "overlay_29_02345AD8.inc" + + .text + + arm_func_start SpawnDroppedItem +SpawnDroppedItem: ; 0x02345AD8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + mov r8, r1 + mov sb, r0 + ldrsh r0, [r8, #4] + ldrsh r1, [r8, #6] + mov r7, r2 + mov r4, r3 + ldr r6, [sp, #0x38] + bl GetTile + ldr r0, [r0, #0x10] + mov r5, #0 + cmp r0, #0 + beq _02345B5C + ldr r0, [r0] + cmp r0, #2 + bne _02345B5C + ldrb r2, [sp, #0x3c] + mov r0, r8 + add r1, r8, #4 + bl ov29_02347378 + add r0, r8, #4 + bl RevealAttackedTile + ldr r1, _02345D64 ; =0x00000BD8 + mov r0, sb + bl LogMessageByIdWithPopupCheckUser + ldrb r0, [r7] + tst r0, #1 + movne r0, #1 + moveq r0, r5 + tst r0, #0xff + moveq r0, #0 + beq _02345D5C +_02345B5C: + ldrsh r0, [r8, #4] + cmp r4, #0 + movne r4, #0 + strh r0, [sp, #0xc] + ldrsh r0, [r8, #6] + ldrh r1, [sp, #0xc] + ldr fp, _02345D68 ; =DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST + strh r0, [sp, #0xe] + ldrh r0, [sp, #0xe] + strh r1, [sp, #8] + moveq r4, #1 + strh r0, [sp, #0xa] +_02345B8C: + mov r0, r4, lsl #2 + ldrsh r3, [fp, r0] + cmp r3, #0x63 + moveq r5, #0 + beq _02345C44 + ldrsh r2, [r8, #4] + add r0, fp, r0 + ldrsh r1, [r0, #2] + add r0, r2, r3 + strh r0, [sp, #0xc] + ldrsh r2, [r8, #6] + ldrsh r0, [sp, #0xc] + add r1, r2, r1 + strh r1, [sp, #0xe] + ldrsh r1, [sp, #0xe] + bl GetTile + mov sl, r0 + ldrh r0, [sl] + tst r0, #3 + beq _02345C3C + tst r0, #0x200 + ldreq r0, [sl, #0x10] + cmpeq r0, #0 + bne _02345C3C + ldrb r2, [sp, #0x3c] + add r1, sp, #0xc + mov r0, r8 + bl ov29_02347378 + ldrh r0, [sl] + ldrh r2, [sp, #0xc] + ldrh r1, [sp, #0xe] + and r0, r0, #3 + cmp r0, #3 + strh r2, [sp, #8] + strh r1, [sp, #0xa] + moveq r5, #1 + beq _02345C44 + add r0, sp, #0xc + mov r1, r7 + mov r2, #1 + bl SpawnItem + cmp r0, #0 + movne r5, #1 + b _02345C44 +_02345C3C: + add r4, r4, #1 + b _02345B8C +_02345C44: + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345D6C ; =ov29_023531BC + mov r1, r7 + mov r0, #0 + bl SubstitutePlaceholderItemTags + cmp r5, #0 + beq _02345CF4 + ldrsh r0, [sp, #0xc] + ldrsh r1, [sp, #0xe] + bl DrawMinimapTile + ldrsh r0, [sp, #0xc] + ldrsh r1, [sp, #0xe] + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _02345D58 +_02345C94: ; jump table + b _02345CCC ; case 0 + b _02345CA4 ; case 1 + b _02345CB8 ; case 2 + b _02345CE0 ; case 3 +_02345CA4: + ldr r2, _02345D70 ; =0x00000BD9 + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CB8: + ldr r2, _02345D74 ; =0x00000BDA + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CCC: + ldr r2, _02345D78 ; =0x00000BDB + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CE0: + ldr r2, _02345D7C ; =0x00000BDF + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CF4: + ldrsh r2, [sp, #8] + ldrsh r1, [sp, #0xa] + mov r0, #0x18 + smulbb r2, r2, r0 + smulbb r0, r1, r0 + add r1, r2, #0xc + add r0, r0, #0xc + mov r2, r1, lsl #8 + mov r1, r0, lsl #8 + str r2, [sp] + str r1, [sp, #4] + cmp r6, #0 + beq _02345D40 + ldrsh r0, [r6] + add r0, r2, r0, lsl #8 + str r0, [sp] + ldrsh r0, [r6, #2] + add r0, r1, r0, lsl #8 + str r0, [sp, #4] +_02345D40: + add r0, sp, #0 + bl ov29_022E563C + ldr r2, _02345D80 ; =0x00000BDC + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown +_02345D58: + mov r0, r5 +_02345D5C: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define SPAWN_DROPPED_ITEM_OFFSET -0x2C1 +#else +#define SPAWN_DROPPED_ITEM_OFFSET 0 +#endif +_02345D64: .word 0x00000BD8 + SPAWN_DROPPED_ITEM_OFFSET +_02345D68: .word DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST +_02345D6C: .word ov29_023531BC +_02345D70: .word 0x00000BD9 + SPAWN_DROPPED_ITEM_OFFSET +_02345D74: .word 0x00000BDA + SPAWN_DROPPED_ITEM_OFFSET +_02345D78: .word 0x00000BDB + SPAWN_DROPPED_ITEM_OFFSET +_02345D7C: .word 0x00000BDF + SPAWN_DROPPED_ITEM_OFFSET +_02345D80: .word 0x00000BDC + SPAWN_DROPPED_ITEM_OFFSET + arm_func_end SpawnDroppedItem + + arm_func_start ov29_02345D84 +ov29_02345D84: ; 0x02345D84 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + mov sl, r1 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + str r2, [sp, #4] + mov sb, r3 + bl GetTile + ldr r0, _02346048 ; =DUNGEON_PTR + mov r4, #0 + ldr r0, [r0] + ldr r1, _0234604C ; =SECONDARY_TERRAIN_TYPES + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + mov r7, r4 + mov r8, r4 + ldrb r0, [r1, r0] + mov r6, #1 + mov fp, #0 + cmp r0, #1 + ldrsh r0, [sl, #4] + moveq r7, #1 + ldr r5, _02346050 ; =DISPLACEMENTS_WITHIN_3 + strh r0, [sp, #0x14] + ldrsh r0, [sl, #6] + ldrh r1, [sp, #0x14] + strh r0, [sp, #0x16] + ldrh r0, [sp, #0x16] + strh r1, [sp, #0x10] + strh r0, [sp, #0x12] + b _02345F74 +_02345E00: + mov r0, r6, lsl #2 + ldrsh r0, [r5, r0] + ldrsh r3, [sl, #4] + cmp r0, #0x63 + moveq r6, fp + mov r0, r6, lsl #2 + ldrsh r2, [r5, r0] + add r0, r5, r6, lsl #2 + ldrsh r1, [r0, #2] + add r0, r3, r2 + strh r0, [sp, #0x14] + ldrsh r2, [sl, #6] + ldrsh r0, [sp, #0x14] + moveq r8, #1 + add r1, r2, r1 + strh r1, [sp, #0x16] + ldrsh r1, [sp, #0x16] + bl GetTile + ldrh r1, [r0] + ands r2, r1, #3 + beq _02345F70 + tst r1, #0x200 + bne _02345F70 + ldr r0, [r0, #0x10] + cmp r0, #0 + bne _02345F64 + ldrh r1, [sp, #0x14] + ldrh r0, [sp, #0x16] + cmp r2, #3 + strh r1, [sp, #0x10] + strh r0, [sp, #0x12] + beq _02345F70 + cmp r7, #0 + beq _02345E90 + cmp r2, #2 + beq _02345F70 +_02345E90: + ldr r0, _02346048 ; =DUNGEON_PTR + ldrsh r2, [sp, #0x14] + ldr r3, [r0] + mov r0, #0x18 + ldrsh r1, [sp, #0x16] + smulbb r2, r2, r0 + smulbb r1, r1, r0 + add r0, r3, #0x1a000 + add r2, r2, #4 + add r1, r1, #4 +#ifdef JAPAN + ldrb fp, [r0, #0x1a1] +#else + ldrb fp, [r0, #0x245] +#endif + mov r5, #0x10000 + mov r7, r2, lsl #8 + mov r8, r1, lsl #8 + mov r0, sl + mov r1, r7 + mov r2, r8 + str r5, [sl, #0x1c] + bl SetEntityPixelPosXY + mov r6, #0 +_02345EE0: + sub r5, r5, #0x800 + mov r2, #0 + str r5, [sl, #0x1c] + mov r0, sl + mov r1, fp + mov r3, r2 + str r2, [sp] + bl DisplayItem + mov r0, #0x13 + bl AdvanceFrame + add r6, r6, #1 + cmp r6, #0x20 + blt _02345EE0 + mov r0, sl + mov r1, r7 + mov r2, r8 + bl SetEntityPixelPosXY + mov r2, #0 + str r2, [sl, #0x1c] + mov r0, sl + mov r1, fp + mov r3, r2 + str r2, [sp] + bl DisplayItem + mov r0, #0x13 + bl AdvanceFrame + ldr r1, [sp, #4] + add r0, sp, #0x14 + mov r2, #1 + bl SpawnItem + cmp r0, #0 + movne r4, #1 + b _02345F7C +_02345F64: + cmp r8, #0 + movne r4, #0 + bne _02345F7C +_02345F70: + add r6, r6, #1 +_02345F74: + cmp r8, #0 + beq _02345E00 +_02345F7C: + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02346054 ; =ov29_023531BC + ldr r1, [sp, #4] + mov r0, #0 + bl SubstitutePlaceholderItemTags + cmp r4, #0 + beq _02345FC4 + bl PlayDungeonTipSound__022EB66C + ldr r1, _02346058 ; =0x00000B74 + mov r0, #0 + mov r2, #1 + bl DisplayMessage2 + ldr r1, _02346058 ; =0x00000B74 + mov r0, #0 + bl LogMessageByIdQuiet + b _0234603C +_02345FC4: + ldrsh r2, [sp, #0x10] + ldrsh r1, [sp, #0x12] + mov r0, #0x18 + smulbb r2, r2, r0 + smulbb r0, r1, r0 + add r1, r2, #0xc + add r0, r0, #0xc + mov r2, r1, lsl #8 + mov r1, r0, lsl #8 + str r2, [sp, #8] + str r1, [sp, #0xc] + cmp sb, #0 + beq _02346010 + ldrsh r0, [sb] + add r0, r2, r0, lsl #8 + str r0, [sp, #8] + ldrsh r0, [sb, #2] + add r0, r1, r0, lsl #8 + str r0, [sp, #0xc] +_02346010: + add r0, sp, #8 + bl ov29_022E563C + ldr r1, _0234605C ; =0x00000B75 + mov r0, #0 + mov r2, #1 + bl DisplayMessage2 + ldr r1, _0234605C ; =0x00000B75 + mov r0, #0 + bl LogMessageByIdQuiet + mov r0, #0 + b _02346040 +_0234603C: + mov r0, #1 +_02346040: + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02346048: .word DUNGEON_PTR +_0234604C: .word SECONDARY_TERRAIN_TYPES +_02346050: .word DISPLACEMENTS_WITHIN_3 +_02346054: .word ov29_023531BC +#ifdef JAPAN +_02346058: .word 0x00000885 +_0234605C: .word 0x00000886 +#else +_02346058: .word 0x00000B74 +_0234605C: .word 0x00000B75 +#endif + arm_func_end ov29_02345D84 + + arm_func_start TryGenerateUnownStoneDrop +TryGenerateUnownStoneDrop: ; 0x02346060 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + mov r5, r1 + bl IsMarowakTrainingMaze + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + bl IsUnown + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, _023460D8 ; =UNOWN_STONE_DROP_CHANCE + ldrsh r0, [r0] + bl DungeonRandOutcome__022EAB20 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + sub r0, r5, #0xc9 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + add r0, r0, #0x190 + mov r1, r0, lsl #0x10 + mov r0, r4 + mov r1, r1, asr #0x10 + mov r2, #0 + mov r3, #2 + bl GenerateItem + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023460D8: .word UNOWN_STONE_DROP_CHANCE + arm_func_end TryGenerateUnownStoneDrop + + arm_func_start ov29_023460DC +ov29_023460DC: ; 0x023460DC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x18 + mov r7, r0 + mov r4, r1 + mov r6, r2 + mov r5, r3 + bl ov29_022FB51C + cmp r0, #0 + beq _02346134 + bl IsCurrentFixedRoomBossFight + cmp r0, #0 + bne _02346134 + bl IsMarowakTrainingMaze + cmp r0, #0 + bne _02346134 + mov r0, r4 + bl EntityIsValid__02345698 + cmp r0, #0 + beq _02346134 + ldr r0, [r4] + cmp r0, #1 + beq _0234613C +_02346134: + mov r0, #0 + b _02346330 +_0234613C: + ldr r4, [r4, #0xb4] + add r1, sp, #0 + ldrsh r0, [r4, #2] + bl GetTreasureBoxChances + cmp r5, #0 + ble _02346184 + ldr r1, _02346338 ; =ov10_022C48EC + mov lr, #0 + add r3, sp, #0 +_02346160: + mov ip, lr, lsl #1 + ldrsh r2, [r3, ip] + add lr, lr, #1 + cmp r2, #0 + ldrnesh r0, [r1, ip] + mlane r0, r5, r0, r2 + strneh r0, [r3, ip] + cmp lr, #4 + blt _02346160 +_02346184: + mov r2, #0 + mov r1, r2 + add r0, sp, #8 +_02346190: + str r1, [r0, r2, lsl #2] + add r2, r2, #1 + cmp r2, #4 + blt _02346190 + ldrsh r0, [sp] + mov ip, #1 + add r5, sp, #0 + str r0, [sp, #8] + add r2, sp, #8 +_023461B4: + mov r3, ip, lsl #1 + add r1, r2, ip, lsl #2 + ldrsh r3, [r5, r3] + ldr r1, [r1, #-4] + add r1, r1, r3 + str r1, [r2, ip, lsl #2] + add ip, ip, #1 + cmp ip, #4 + add r0, r0, r3 + blt _023461B4 + bl DungeonRandInt + ldr r1, [sp, #8] + cmp r1, #0 + beq _023461F4 + cmp r0, r1 + bge _023461FC +_023461F4: + mov r0, #0 + b _02346330 +_023461FC: + ldr r1, [sp, #0xc] + cmp r0, r1 + bge _0234626C + mov r5, #0 + mov r4, r5 + cmp r6, #0 + beq _02346230 + mov r0, #0x64 + bl DungeonRandInt + ldr r1, _0234633C ; =ov10_022C44C8 + ldrsh r1, [r1] + cmp r1, r0 + movlt r5, #1 +_02346230: + cmp r5, #0 + movne r5, #0x67 + bne _02346310 + ldr r0, _02346340 ; =DUNGEON_PTR + ldr r0, [r0] + add r5, r0, #0x348 + add r0, r5, #0x400 + bl GetMissionRank__0204FAE0 + mov r1, r0 + cmp r1, #0xf + movgt r1, #0xf + add r0, r5, #0x400 + bl RetrieveFromItemList1 + mov r5, r0 + b _02346310 +_0234626C: + ldr r1, [sp, #0x10] + cmp r0, r1 + ldrsh r0, [r4, #2] + bge _023462C8 + mov r1, #0 + bl GetExclusiveItem + movs r5, r0 + mov r4, #1 + bne _02346310 + ldr r0, _02346340 ; =DUNGEON_PTR + ldr r0, [r0] + ldr r0, [r0, #0x7cc] + cmp r0, #0 + moveq r0, #0x6e + movne r0, #0x6a + bl DungeonRandInt + mov r0, r0, lsl #0x12 + mov r0, r0, asr #0x10 + add r0, r0, #0x3e + add r0, r0, #0x200 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + b _02346310 +_023462C8: + mov r1, #1 + bl GetExclusiveItem + movs r5, r0 + mov r4, #2 + bne _02346310 + ldr r0, _02346340 ; =DUNGEON_PTR + ldr r0, [r0] + ldr r0, [r0, #0x7cc] + cmp r0, #0 + moveq r0, #0x6e + movne r0, #0x6a + bl DungeonRandInt + mov r0, r0, lsl #0x12 + mov r0, r0, asr #0x10 + add r0, r0, #0x3f + add r0, r0, #0x200 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 +_02346310: + mov r0, r4 + bl ov29_02344BF8 + mov r1, r0 + mov r0, r7 + mov r2, r5 + mov r3, #2 + bl GenerateItem + mov r0, #1 +_02346330: + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02346338: .word ov10_022C48EC +_0234633C: .word ov10_022C44C8 +_02346340: .word DUNGEON_PTR + arm_func_end ov29_023460DC + + arm_func_start ov29_02346344 +ov29_02346344: ; 0x02346344 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x3ec + sub sp, sp, #0x400 + mov r4, #0 + str r0, [sp, #4] + str r1, [sp, #8] + ldr sb, [sp, #0x810] + ldr r8, [sp, #0x814] + ldr r7, [sp, #0x818] + mov fp, r2 + mov sl, r3 + mov r1, r4 + mov r6, r4 + add r0, sp, #0x24 +_0234637C: + strb r6, [r0, r1] + add r1, r1, #1 + cmp r1, #0x1e + blt _0234637C + b _0234647C +_02346390: + ldrsh r1, [fp] + ldrsh r0, [fp, #2] + mov r5, #0 + strh r1, [sp, #0x20] + str r5, [sp, #0x14] + strh r0, [sp, #0x22] +_023463A8: + cmp r5, #0x1e + bge _02346454 + mov r2, r5, lsl #2 + ldrsh r0, [r8, r2] + cmp r0, #0x63 + beq _02346454 + add r1, sp, #0x24 + ldrb r1, [r1, r5] + cmp r1, #0 + bne _0234644C + add r1, r8, r2 + ldrsh r1, [r1, #2] + ldrsh r3, [fp] + ldrsh r2, [fp, #2] + add r3, r3, r0 + add r0, r2, r1 + strh r3, [sp, #0x20] + strh r0, [sp, #0x22] + ldrsh r0, [sp, #0x20] + ldrsh r1, [sp, #0x22] + bl GetTile + ldrh r1, [r0] + tst r1, #3 + beq _0234644C + tst r1, #0x200 + ldreq r0, [r0, #0x10] + cmpeq r0, #0 + bne _0234644C + ldrh r1, [sp, #0x20] + add r0, sp, #0x42 + mov r2, r6, lsl #2 + strh r1, [r0, r2] + mov r1, #1 + ldrh r3, [sp, #0x22] + str r1, [sp, #0x14] + mov r2, r1 + add r1, sp, #0x24 + add r0, r0, r6, lsl #2 + strb r2, [r1, r5] + strh r3, [r0, #2] + b _02346454 +_0234644C: + add r5, r5, #1 + b _023463A8 +_02346454: + ldr r0, [sp, #0x14] + cmp r0, #0 + bne _02346478 + add r0, sp, #0x42 + mov r1, r6, lsl #2 + mvn r2, #0 + strh r2, [r0, r1] + add r0, r0, r6, lsl #2 + strh r2, [r0, #2] +_02346478: + add r6, r6, #1 +_0234647C: + cmp r6, sb + blt _02346390 + mov r1, #0 + mov r5, r1 + mov r8, r1 + add fp, sp, #0x42 + b _023465B4 +_02346498: + mov r0, r8, lsl #2 + ldrsh r2, [fp, r0] + cmp r2, #0 + bge _023464C4 + mov r0, #0xb8 + mul r3, r8, r0 + mov r2, #0 + add r0, sp, #0xbc + str r2, [r0, r3] + mov r5, #1 + b _023465B0 +_023464C4: + mov r1, #0xb8 + mul r3, r8, r1 + add r1, sp, #0xbc + mov r2, #3 + str r2, [r1, r3] + add r6, r1, r3 + mov r1, #0 + strb r1, [r6, #0x24] + mov r1, #1 + strb r1, [r6, #0x20] + mov r1, #0 + strb r1, [r6, #0x22] + mov r1, #6 + mla r1, r8, r1, sl + str r1, [r6, #0xb4] + add r1, fp, r0 + ldrh r2, [fp, r0] + ldrh r1, [r1, #2] + mov r0, r6 + strh r2, [r6, #4] + strh r1, [r6, #6] + ldr r1, [sp, #8] + ldrsh r2, [r1] + ldrsh r3, [r1, #2] + mov r1, #0x18 + smulbb r1, r2, r1 + mov r2, #0x18 + smulbb r2, r3, r2 + add r1, r1, #4 + add r2, r2, #4 + mov r1, r1, lsl #8 + mov r2, r2, lsl #8 + bl SetEntityPixelPosXY + mov r0, #0 + strh r0, [r6, #0x26] + mov r0, r8, lsl #2 + ldrsh r3, [fp, r0] + mov r1, #0x18 + mov r0, r1 + smulbb r0, r3, r0 + ldr r2, [r6, #0xc] + add r0, r0, #4 + rsb r0, r2, r0, lsl #8 + bl _s32_div_f + add r1, sp, #0x6c + str r0, [r1, r8, lsl #3] + add r0, fp, r8, lsl #2 + ldrsh r3, [r0, #2] + mov r1, #0x18 + mov r0, r1 + smulbb r0, r3, r0 + ldr r2, [r6, #0x10] + add r0, r0, #4 + rsb r0, r2, r0, lsl #8 + bl _s32_div_f + add r1, sp, #0x6c + add r1, r1, r8, lsl #3 + str r0, [r1, #4] + mov r1, #1 +_023465B0: + add r8, r8, #1 +_023465B4: + cmp r8, sb + blt _02346498 + cmp r1, #0 + bne _02346614 + cmp r7, #0 + beq _0234660C + cmp sb, #2 + blt _023465E4 + ldr r1, _023467D0 ; =0x00000BDD + ldr r0, [sp, #4] + bl LogMessageByIdWithPopupCheckUser + b _0234660C +_023465E4: + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _023467D4 ; =ov29_023531BC + mov r1, sl + mov r0, #0 + bl SubstitutePlaceholderItemTags + ldr r1, _023467D8 ; =0x00000BDC + ldr r0, [sp, #4] + bl LogMessageByIdWithPopupCheckUser +_0234660C: + mov r0, #0 + b _023467C4 +_02346614: + cmp r5, #0 + cmpne r7, #0 + beq _0234662C + ldr r1, _023467DC ; =0x00000BDE + ldr r0, [sp, #4] + bl LogMessageByIdWithPopupCheckUser +_0234662C: + ldr r0, _023467E0 ; =DUNGEON_PTR + mov r6, #0 + ldr r0, [r0] + mov fp, r6 + add r0, r0, #0x1a000 +#ifdef JAPAN + ldrb r0, [r0, #0x1a1] +#else + ldrb r0, [r0, #0x245] +#endif + mov r5, r6 + str r0, [sp, #0x10] +_0234664C: + and r0, r6, #0xff + mov r8, #0 + str r0, [sp, #0x1c] + b _023466E4 +_0234665C: + mov r0, #0xb8 + mul r0, r8, r0 + add r1, sp, #0xbc + str r0, [sp, #0x18] + add r0, r1, r0 + bl EntityIsValid__02345698 + cmp r0, #0 + beq _023466E0 + mov r1, #0xb8 + add r0, sp, #0xbc + mla r0, r8, r1, r0 + add r2, sp, #0x6c + add r1, sp, #0x6c + add r2, r2, r8, lsl #3 + ldr r1, [r1, r8, lsl #3] + ldr r2, [r2, #4] + str r0, [sp, #0xc] + bl IncrementEntityPixelPosXY + mov r0, fp + bl SinAbs4096 + mov r1, #0xc + mul r1, r0, r1 + ldr r0, [sp, #0xc] + ldr r3, [sp, #0x1c] + str r1, [r0, #0x1c] + ldr r0, [sp, #0x18] + add r1, sp, #0xbc + add r0, r1, r0 + mov r1, #0 + str r1, [sp] + ldr r1, [sp, #0x10] + mov r2, #1 + bl DisplayItem +_023466E0: + add r8, r8, #1 +_023466E4: + cmp r8, sb + blt _0234665C + mov r0, #0x13 + bl AdvanceFrame + tst r5, #3 + addeq r6, r6, #1 + add r5, r5, #1 + add fp, fp, #0x55 + and r6, r6, #7 + cmp r5, #0x18 + blt _0234664C + mov r8, #0 + add r6, sp, #0x42 + mov fp, r8 + mov r5, #6 + b _023467B8 +_02346724: + mov r1, r8, lsl #2 + ldrsh r0, [r6, r1] + cmp r0, #0 + blt _023467B4 + add r1, r6, r1 + ldrsh r1, [r1, #2] + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #3 + bne _02346784 + cmp r7, #0 + beq _023467B4 + mov r0, fp + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _023467D4 ; =ov29_023531BC + mov r0, #0 + mov r1, sl + bl SubstitutePlaceholderItemTags + ldr r0, [sp, #4] + ldr r1, _023467D8 ; =0x00000BDC + bl LogMessageByIdWithPopupCheckUser + b _023467B4 +_02346784: + mla r1, r8, r5, sl + add r0, r6, r8, lsl #2 + mov r2, #1 + bl SpawnItem +#ifndef JAPAN + mov r0, r8, lsl #2 + add r1, r6, r8, lsl #2 + ldrsh r0, [r6, r0] + ldrsh r1, [r1, #2] + bl DrawMinimapTile +#endif + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 +_023467B4: + add r8, r8, #1 +_023467B8: + cmp r8, sb + blt _02346724 + mov r0, r4 +_023467C4: + add sp, sp, #0x3ec + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV29_02346344_OFFSET -0x2C1 +#else +#define OV29_02346344_OFFSET 0 +#endif +_023467D0: .word 0x00000BDD + OV29_02346344_OFFSET +_023467D4: .word ov29_023531BC +_023467D8: .word 0x00000BDC + OV29_02346344_OFFSET +_023467DC: .word 0x00000BDE + OV29_02346344_OFFSET +_023467E0: .word DUNGEON_PTR + arm_func_end ov29_02346344 diff --git a/include/dungeon_util_2.h b/include/dungeon_util_2.h index 0ae3c635..d5615404 100644 --- a/include/dungeon_util_2.h +++ b/include/dungeon_util_2.h @@ -5,5 +5,9 @@ // Checks if a monster can target a position. This function just calls IsPositionInSight using the position of the user as the origin. bool8 CanTargetPosition(struct entity *monster, struct position *position); +void PopulateActiveMonsterPtrs(void); +s32 GetTeamMemberIndex(struct entity *entity); +void GetMonsterOrTrapName(char *buf, struct entity *entity, u32 param_3); +void SubstitutePlaceholderStringTags(s32 pos, struct entity* entity, u32 param_3); #endif //PMDSKY_DUNGEON_UTIL_2_H diff --git a/include/overlay_29_022E3F20.h b/include/overlay_29_022E3F20.h index aa0064c4..48de6756 100644 --- a/include/overlay_29_022E3F20.h +++ b/include/overlay_29_022E3F20.h @@ -3,6 +3,11 @@ #include "dungeon_mode.h" +void UpdateStatusIconFlags(struct entity *entity); +void PlayQuestionMarkEffect(struct entity *entity); +void PlayExclamationPointEffect__022E47D4(struct entity *entity); +void ov29_022E3E74(struct entity *entity); +void PlayExclamationPointEffect__022E4880(struct entity *entity); void ov29_022E3F20(void); void ov29_022E3F24(struct entity *entity); void ov29_022E3F74(void); diff --git a/include/overlay_29_022EC7E8.h b/include/overlay_29_022EC7E8.h new file mode 100644 index 00000000..7487d4b8 --- /dev/null +++ b/include/overlay_29_022EC7E8.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_022EC7E8_H +#define PMDSKY_OVERLAY_29_022EC7E8_H + +#include "dungeon_mode.h" + +bool8 IsFloorOver(void); + +#endif //PMDSKY_OVERLAY_29_022EC7E8_H diff --git a/include/overlay_29_023061A8.h b/include/overlay_29_023061A8.h new file mode 100644 index 00000000..8c9397d3 --- /dev/null +++ b/include/overlay_29_023061A8.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_023061A8_H +#define PMDSKY_OVERLAY_29_023061A8_H + +#include "dungeon_mode.h" + +void EndBurnClassStatus(struct entity *user, struct entity *target); + +#endif //PMDSKY_OVERLAY_29_023061A8_H diff --git a/include/overlay_29_02306728.h b/include/overlay_29_02306728.h new file mode 100644 index 00000000..13011eaa --- /dev/null +++ b/include/overlay_29_02306728.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_02306728_H +#define PMDSKY_OVERLAY_29_02306728_H + +#include "dungeon_mode.h" + +void EndCurseClassStatus(struct entity *user, struct entity *target, u8 next_curse_class_status_being_applied, bool8 log_message); + +#endif //PMDSKY_OVERLAY_29_02306728_H diff --git a/include/overlay_29_02336F4C.h b/include/overlay_29_02336F4C.h new file mode 100644 index 00000000..980aefd1 --- /dev/null +++ b/include/overlay_29_02336F4C.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_02336F4C_H +#define PMDSKY_OVERLAY_29_02336F4C_H + +#include "dungeon_mode.h" + +void UpdateTrapsVisibility(void); + +#endif //PMDSKY_OVERLAY_29_02336F4C_H diff --git a/include/overlay_29_0233E43C.h b/include/overlay_29_0233E43C.h index 16a08bd2..dfa103b9 100644 --- a/include/overlay_29_0233E43C.h +++ b/include/overlay_29_0233E43C.h @@ -3,9 +3,10 @@ #include "overlay_29_0233C9E8.h" -void CreateHallway(s32 arg1, s32 arg2, s32 arg3, s32 arg4, bool8 arg5, s32 arg6, s32 arg7); void CreateGridCellConnections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y, s32 *arg4, s32 *arg5, bool8 arg6); +void GenerateRoomImperfections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y); +void CreateHallway(s32 x, s32 y, s32 end_x, s32 end_y, bool8 vertical, s32 turn_x, s32 turn_y); #endif //PMDSKY_OVERLAY_29_0233E43C_H diff --git a/include/overlay_29_02345A3C.h b/include/overlay_29_02345A3C.h new file mode 100644 index 00000000..e6151dfa --- /dev/null +++ b/include/overlay_29_02345A3C.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_02345A3C_H +#define PMDSKY_OVERLAY_29_02345A3C_H + +#include "dungeon_mode.h" + +bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 param_4); + +#endif //PMDSKY_OVERLAY_29_02345A3C_H diff --git a/main.lsf b/main.lsf index 5732f772..2da6b02e 100644 --- a/main.lsf +++ b/main.lsf @@ -802,7 +802,7 @@ Overlay OVY_29 Object src/overlay_29_022E272C.o Object src/dungeon_visibility.o Object src/dungeon_util_2.o - Object asm/overlay_29_022E2978.o + Object asm/overlay_29_022E34A8.o Object src/dg_camera.o Object asm/overlay_29_022E335C.o Object src/dg_effect.o @@ -862,6 +862,8 @@ Overlay OVY_29 Object asm/overlay_29_022EBCE8.o Object src/overlay_29_022EC608.o Object asm/overlay_29_022EC62C.o + Object src/overlay_29_022EC7E8.o + Object asm/overlay_29_022EC85C.o Object src/overlay_29_022ECDC0.o Object asm/overlay_29_022ECDE4.o Object src/overlay_29_022ECF44.o @@ -967,6 +969,10 @@ Overlay OVY_29 Object asm/overlay_29_023055B0.o Object src/overlay_29_02305C04.o Object asm/overlay_29_02305C28.o + Object src/overlay_29_023061A8.o + Object asm/overlay_29_02306258.o + Object src/overlay_29_02306728.o + Object asm/overlay_29_023068C4.o Object src/overlay_29_02307EF8.o Object asm/overlay_29_02307F4C.o Object src/dungeon_ai_leader.o @@ -1205,6 +1211,8 @@ Overlay OVY_29 Object asm/overlay_29_02336224.o Object src/overlay_29_02336428.o Object asm/overlay_29_02336450.o + Object src/overlay_29_02336F4C.o + Object asm/overlay_29_0233711C.o Object src/overlay_29_02337CA8.o Object asm/overlay_29_02337CCC.o Object src/dungeon_map_access_1.o @@ -1229,7 +1237,7 @@ Overlay OVY_29 Object src/overlay_29_0233C9E8.o Object asm/overlay_29_0233CF84.o Object src/overlay_29_0233E43C.o - Object asm/overlay_29_0233ED34.o + Object asm/overlay_29_0233F424.o Object src/overlay_29_02340CAC.o Object asm/overlay_29_02340CE4.o Object src/dungeon_generation.o @@ -1245,6 +1253,8 @@ Overlay OVY_29 Object asm/overlay_29_02344BF8.o Object src/overlay_29_02345698.o Object asm/overlay_29_023456BC.o + Object src/overlay_29_02345A3C.o + Object asm/overlay_29_02345AD8.o Object src/dungeon_items.o Object asm/overlay_29_02346834.o Object src/dungeon_projectile_throw.o diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index ee47a624..05abac36 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -15,6 +15,7 @@ #include "overlay_29_022FB538.h" #include "status_checks.h" #include "targeting.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define CANNOT_USE_ITEM_MESSAGE 0xB2D @@ -27,7 +28,6 @@ extern struct dungeon *DUNGEON_PTR[]; extern void EndFrozenClassStatus(struct entity *user, struct entity *target, bool8 log); -extern void SubstitutePlaceholderStringTags(s32 slot, struct entity *entity, u32 param_3); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); void RunMonsterAi(struct entity *monster, u32 unused) diff --git a/src/dungeon_projectile_throw.c b/src/dungeon_projectile_throw.c index dd89c843..058b1cea 100644 --- a/src/dungeon_projectile_throw.c +++ b/src/dungeon_projectile_throw.c @@ -11,6 +11,7 @@ #include "MSL_C/stdlib.h" #include "moves_1.h" #include "overlay_29_02344AF8.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define CURVED_PROJECTILE_LOG_MESSAGE_1 0x920 @@ -32,11 +33,10 @@ extern bool8 DisplayItem(struct entity *item, bool8 hallucinate, u8 on_floor, u8 extern void AdvanceFrame(u32 param_1); extern bool8 TwoTurnMoveForcedMiss(struct entity *target, struct move *move); extern bool8 DoesProjectileHitTarget(struct entity *user, struct entity *target); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void ChangeMonsterAnimationToHurt(struct entity *monster, u32 direction); extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *user, struct entity *target); -extern void SpawnDroppedItem(struct entity *entity, struct entity *item_entity, struct item *item, bool8 param_4, struct position *dir_xy, u32 param_6); +extern bool8 SpawnDroppedItem(struct entity *entity, struct entity *item_entity, struct item *item, bool8 param_4, struct position *dir_xy, u32 param_6); bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id) { diff --git a/src/dungeon_util_2.c b/src/dungeon_util_2.c index f7926c55..06609577 100644 --- a/src/dungeon_util_2.c +++ b/src/dungeon_util_2.c @@ -1,8 +1,110 @@ #include "dungeon_util_2.h" #include "dungeon_pokemon_attributes_1.h" #include "dungeon_range.h" +#include "dungeon.h" +#include "dg_object.h" +#include "main_0200C4FC.h" +#include "main_0202593C.h" +#include "overlay_29_023000E4.h" +#include "overlay_29_0234B024.h" + +extern struct dungeon *DUNGEON_PTR; +extern u8 *strcpy(u8 *dest, const u8 *src); +extern void GetTrapName(char *buf, enum trap_id trap_id); +extern void PrepareItemForPrinting2(struct preprocessor_args *preprocessor_args, s32 pos, struct item *item); +extern void SubstitutePlaceholderTrapTags(struct preprocessor_args *preprocessor_args, s32 pos, u32 trap_id); +extern void SetPreprocessorArgsStringToName(struct preprocessor_args *preprocessor_args, s32 pos, struct monster *monster, u32 param_4, u8 name_type); bool8 CanTargetPosition(struct entity *monster, struct position *position) { return IsPositionInSight(&monster->pos, position, HasDropeyeStatus(monster)); } + +void PopulateActiveMonsterPtrs(void) +{ + s32 i; + s32 n; + struct entity *entity; + + n = 0; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) + { + entity = DUNGEON_PTR->monster_slots.party_members[i]; + if (EntityIsValid__022E1A1C(entity)) + { + DUNGEON_PTR->active_monster_ptrs[n] = entity; + n++; + } + } + for (i = 0; i < DUNGEON_MAX_WILD_POKEMON; i++) + { + entity = DUNGEON_PTR->monster_slots.wild_pokemon[i]; + if (EntityIsValid__022E1A1C(entity)) + { + DUNGEON_PTR->active_monster_ptrs[n] = entity; + n++; + } + } + for (; n < DUNGEON_MAX_POKEMON; n++) + { + DUNGEON_PTR->active_monster_ptrs[n] = NULL; + } +} + +s32 GetTeamMemberIndex(struct entity *entity) +{ + s32 i; + + for (i = 0; i < MAX_TEAM_MEMBERS; i++) + { + if (entity == DUNGEON_PTR->monster_slots.party_members[i]) + return i; + } + return -1; +} + +void GetMonsterOrTrapName(char *buf, struct entity *entity, u32 param_3) +{ + switch (entity->type) + { + case ENTITY_MONSTER: + GetMonsterName(buf, (struct monster *)entity->info); + break; + case ENTITY_TRAP: + GetTrapName(buf, ((struct trap *)entity->info)->id); + break; + case ENTITY_ITEM: + break; + default: +#ifdef JAPAN + strcpy((u8 *)buf, StringFromId(0xB42)); +#else + strcpy((u8 *)buf, StringFromId(0xA42)); +#endif + break; + } +} + +void SubstitutePlaceholderStringTags(s32 pos, struct entity* entity, u32 param_3) +{ + struct preprocessor_args* args = GetMessageLogPreprocessorArgs(); + + switch (entity->type) { + case ENTITY_MONSTER: + SetPreprocessorArgsStringToName(args, pos, entity->info, param_3, 0); + break; + case ENTITY_ITEM: + PrepareItemForPrinting2(args, pos, entity->info); + break; + case ENTITY_TRAP: + SubstitutePlaceholderTrapTags(args, pos, ((struct trap*)entity->info)->id); + break; + default: +#ifdef JAPAN + args->strings[pos] = (char*)StringFromId(0xB42); +#else + args->strings[pos] = (char*)StringFromId(0xA42); +#endif + break; + } +} diff --git a/src/move_orb_effects.c b/src/move_orb_effects.c index bac7c63f..282bf3ce 100644 --- a/src/move_orb_effects.c +++ b/src/move_orb_effects.c @@ -9,12 +9,13 @@ #include "overlay_29_023118B4.h" #include "overlay_29_02311BF8.h" #include "overlay_29_02344AF8.h" +#include "dungeon_util_2.h" +#include "overlay_29_022E3F20.h" extern u8* AllocateTemp1024ByteBufferFromPool(void); extern void CopyStringFromId(u8* buf, u32 string_id); extern void SetMessageLogPreprocessorArgsString(u32 a, u8 *buf); extern bool8 IsProtectedFromStatDrops(struct entity *user, struct entity *target, bool8 log_message); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void PlayOffensiveStatUpEffect(struct entity *entity, struct StatIndex stat_index); extern void PlayDefensiveStatDownEffect(struct entity *entity, struct StatIndex stat_index); extern void PlayDefensiveStatUpEffect(struct entity *entity, struct StatIndex stat_index); @@ -26,7 +27,6 @@ extern void PlayDefensiveStatMultiplierUpEffect(struct entity *entity, struct St extern void PlayHitChanceUpEffect(struct entity *entity, struct StatIndex stat_index); extern void PlayHitChanceDownEffect(struct entity *entity, struct StatIndex stat_index); extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); -extern void UpdateStatusIconFlags(struct entity *entity); extern void ov29_022E4338(struct entity *); extern void PlayExclamationPointEffect__022E5D4C(struct entity *entity); extern void PlayParalysisEffect(struct entity *entity); @@ -40,7 +40,7 @@ extern void TryActivateQuickFeet(struct entity *attacker ,struct entity *defende extern s32 CalcStatusDuration(struct entity *entity, const s16 *turn_range, bool8 iq_skill_effects); extern bool8 GetExclusiveItemWithEffectFromBag(struct entity *, enum exclusive_item_effect_id effect_id, struct item *item); extern struct preprocessor_args* GetMessageLogPreprocessorArgs(void); -extern void SetPreprocessorArgsStringToName(struct preprocessor_args* preprocessor_args, u8 pos, struct monster* monster, u8 param_4, u8 name_type); +extern void SetPreprocessorArgsStringToName(struct preprocessor_args* preprocessor_args, s32 pos, struct monster* monster, u32 param_4, u8 name_type); extern int CalcSpeedStageWrapper(struct entity* entity); extern int CalcSpeedStage(struct entity *entity, s32 counter_weight); diff --git a/src/overlay_29_022E3F20.c b/src/overlay_29_022E3F20.c index 0b363074..407d012a 100644 --- a/src/overlay_29_022E3F20.c +++ b/src/overlay_29_022E3F20.c @@ -1,10 +1,123 @@ #include "overlay_29_022E3F20.h" +#include "dungeon.h" +#include "dungeon_util_static.h" +#include "dg_effect.h" + +extern struct dungeon *DUNGEON_PTR[]; + +extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id); extern s32 GetEffectAnimationWanOffset(s32 id); extern void PlayEffectAnimationEntity(struct entity *entity, s32 id, s32 a, u8 b, s32 c, s32 d, s32 e, s32 f); +extern const u64 STATUS_ICON_ARRAY_SLEEP[]; +extern const u64 STATUS_ICON_ARRAY_BURN[]; +extern const u64 STATUS_ICON_ARRAY_FREEZE[]; +extern const u64 STATUS_ICON_ARRAY_CRINGE[]; +extern const u64 STATUS_ICON_ARRAY_BIDE[]; +extern const u64 STATUS_ICON_ARRAY_REFLECT[]; +extern const u64 STATUS_ICON_ARRAY_CURSE[]; +extern const u64 STATUS_ICON_ARRAY_LEECH_SEED[]; +extern const u64 STATUS_ICON_ARRAY_SURE_SHOT[]; +extern const u64 STATUS_ICON_ARRAY_LONG_TOSS[]; +extern const u64 STATUS_ICON_ARRAY_INVISIBLE[]; +extern const u64 STATUS_ICON_ARRAY_BLINDED[]; +extern const u64 STATUS_ICON_ARRAY_MUZZLED[]; +extern const u64 STATUS_ICON_ARRAY_MIRACLE_EYE[]; +extern const u64 STATUS_ICON_ARRAY_MAGNET_RISE[]; + +void UpdateStatusIconFlags(struct entity *entity) +{ + struct monster *info; + u64 icons; + bool32 show_sleep; + s32 max_hp; + + if (!EntityIsValid__022E37B8(entity)) + return; + + info = GetEntInfo(entity); + icons = 0; + show_sleep = TRUE; + if (info->id == MONSTER_SUDOWOODO || info->id == MONSTER_SUDOWOODO_SECONDARY) { + if (info->sleep_class_status.sleep_turns == 0x7f) + show_sleep = FALSE; + } + if (show_sleep) + icons = icons | STATUS_ICON_ARRAY_SLEEP[info->sleep_class_status.sleep]; + + icons = icons | STATUS_ICON_ARRAY_BURN[info->burn_class_status.burn]; + icons = icons | STATUS_ICON_ARRAY_FREEZE[info->frozen_class_status.freeze]; + icons = icons | STATUS_ICON_ARRAY_CRINGE[info->cringe_class_status.cringe]; + icons = icons | STATUS_ICON_ARRAY_BIDE[info->bide_class_status.bide]; + icons = icons | STATUS_ICON_ARRAY_REFLECT[info->reflect_class_status.reflect]; + icons = icons | STATUS_ICON_ARRAY_CURSE[info->curse_class_status.curse]; + icons = icons | STATUS_ICON_ARRAY_LEECH_SEED[info->leech_seed_class_status.leech_seed]; + icons = icons | STATUS_ICON_ARRAY_SURE_SHOT[info->sure_shot_class_status.sure_shot]; + icons = icons | STATUS_ICON_ARRAY_LONG_TOSS[info->long_toss_class_status.status]; + icons = icons | STATUS_ICON_ARRAY_INVISIBLE[info->invisible_class_status.status]; + icons = icons | STATUS_ICON_ARRAY_BLINDED[info->blinker_class_status.blinded]; + icons = icons | STATUS_ICON_ARRAY_MUZZLED[info->muzzled]; + icons = icons | STATUS_ICON_ARRAY_MIRACLE_EYE[info->miracle_eye]; + icons = icons | STATUS_ICON_ARRAY_MAGNET_RISE[info->magnet_rise]; + + if (info->grudge) + icons |= 0x1000000; + if (info->exposed) + icons |= 0x2000000; + if (!info->is_not_team_member) { + max_hp = info->max_hp_stat + info->max_hp_boost; + if (max_hp > MAX_HP_LIMIT) + max_hp = MAX_HP_LIMIT; + if (info->hp < max_hp / 4) + icons |= 0x2000; + } + if (DUNGEON_PTR[0]->identify_orb_flag) { + if (ItemExists(info->held_item.flags)) + icons |= 0x2000; + } + if (info->stat_modifiers.offensive_multipliers[0] < 0x100 || + info->stat_modifiers.offensive_multipliers[1] < 0x100 || + info->stat_modifiers.defensive_multipliers[0] < 0x100 || + info->stat_modifiers.defensive_multipliers[1] < 0x100 || + info->stat_modifiers.offensive_stages[0] < DEFAULT_STAT_STAGE || + info->stat_modifiers.offensive_stages[1] < DEFAULT_STAT_STAGE || + info->stat_modifiers.defensive_stages[0] < DEFAULT_STAT_STAGE || + info->stat_modifiers.defensive_stages[1] < DEFAULT_STAT_STAGE || + info->stat_modifiers.hit_chance_stages[0] < DEFAULT_STAT_STAGE || + info->stat_modifiers.hit_chance_stages[1] < DEFAULT_STAT_STAGE) + icons |= 0x8000000; + + *(u64 *)&info->status_icons = icons; +} + +void PlayQuestionMarkEffect(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x144, 1, GetEffectAnimationWanOffset(0x144), + 2, 0, -1, 0); +} + +void PlayExclamationPointEffect__022E47D4(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x143, 1, GetEffectAnimationWanOffset(0x143), + 2, 0, -1, 0); +} + +void ov29_022E3E74(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x25, 1, GetEffectAnimationWanOffset(0x25), + 2, 0, -1, 0); + PlaySeByIdIfShouldDisplayEntity(entity, 0x30E); +} + +void PlayExclamationPointEffect__022E4880(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x143, 1, GetEffectAnimationWanOffset(0x143), + 2, 0, -1, 0); +} + void ov29_022E3F20(void) { diff --git a/src/overlay_29_022EC7E8.c b/src/overlay_29_022EC7E8.c new file mode 100644 index 00000000..55931ce3 --- /dev/null +++ b/src/overlay_29_022EC7E8.c @@ -0,0 +1,28 @@ +#include "overlay_29_022EC7E8.h" +#include "dungeon.h" +#include "dg_uty.h" + +extern struct dungeon *DUNGEON_PTR[]; + +bool8 IsFloorOver(void) +{ + if (DUNGEON_PTR[0]->end_floor_no_death_check_flag != 0) + return TRUE; + + if (GetLeader() == NULL) { + DUNGEON_PTR[0]->floor_loop_status = FLOOR_LOOP_LEADER_FAINTED; + return TRUE; + } + + if (DUNGEON_PTR[0]->end_floor_flag == 1) { + DUNGEON_PTR[0]->floor_loop_status = FLOOR_LOOP_NEXT_FLOOR; + return TRUE; + } + + if (DUNGEON_PTR[0]->end_floor_flag == 2) { + DUNGEON_PTR[0]->floor_loop_status = FLOOR_LOOP_NEXT_FLOOR; + return TRUE; + } + + return FALSE; +} diff --git a/src/overlay_29_022F0EDC.c b/src/overlay_29_022F0EDC.c index 715a30e4..74dec6e3 100644 --- a/src/overlay_29_022F0EDC.c +++ b/src/overlay_29_022F0EDC.c @@ -17,6 +17,8 @@ #include "overlay_29_0234928C.h" #include "overlay_29_022FB538.h" #include "position_util.h" +#include "dungeon_util_2.h" +#include "overlay_29_022EC7E8.h" #ifdef JAPAN #define SET_LEADER_ACTION_DATA_OFFSET -0x2C1 @@ -57,10 +59,8 @@ extern s32 GetEntityTouchscreenArea(); extern s32 GetIdleAnimationId(); extern struct entity *GetMonsterInFront(); extern void GetPressedButtons(u32 param_1, u16 *pressed); -extern s32 GetTeamMemberIndex(); extern s32 HasStatusThatPreventsLeaderActing(); extern s32 HideTileGrid(); -extern s32 IsFloorOver(); extern s32 LogItemBlockedByEmbargo(); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); extern s32 MonsterHasEmbargoStatus(); diff --git a/src/overlay_29_023061A8.c b/src/overlay_29_023061A8.c new file mode 100644 index 00000000..a862fef3 --- /dev/null +++ b/src/overlay_29_023061A8.c @@ -0,0 +1,41 @@ +#include "overlay_29_023061A8.h" +#include "overlay_29_02305C04.h" +#include "dungeon_util_2.h" +#include "overlay_29_022E3F20.h" +#include "dungeon_util_static.h" + +#ifdef JAPAN +#define JPN_MSG_OFFSET -0x2C0 +#else +#define JPN_MSG_OFFSET 0 +#endif + +extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); + +void EndBurnClassStatus(struct entity *user, struct entity *target) +{ + struct monster *entityInfo; + + if (!EntityIsValid__02305C04(target)) + return; + + entityInfo = GetEntInfo(target); + SubstitutePlaceholderStringTags(0, target, 0); + switch (entityInfo->burn_class_status.burn) { + case STATUS_BURN_NONE: + case 5: + break; + case STATUS_BURN_POISONED: + case STATUS_BURN_BADLY_POISONED: + LogMessageByIdWithPopupCheckUserTarget(user, target, 0xc9e + JPN_MSG_OFFSET); + break; + case STATUS_BURN_PARALYSIS: + LogMessageByIdWithPopupCheckUserTarget(user, target, 0xc9c + JPN_MSG_OFFSET); + break; + case STATUS_BURN_BURN: + LogMessageByIdWithPopupCheckUserTarget(user, target, 0xc9d + JPN_MSG_OFFSET); + break; + } + entityInfo->burn_class_status.burn = STATUS_BURN_NONE; + UpdateStatusIconFlags(target); +} diff --git a/src/overlay_29_02306728.c b/src/overlay_29_02306728.c new file mode 100644 index 00000000..931980a0 --- /dev/null +++ b/src/overlay_29_02306728.c @@ -0,0 +1,74 @@ +#include "overlay_29_02306728.h" +#include "overlay_29_02305C04.h" +#include "dungeon_util_2.h" +#include "overlay_29_022E3F20.h" +#include "dungeon.h" +#include "dungeon_util_static.h" + +extern struct dungeon *DUNGEON_PTR[]; + +extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); +extern s32 GetIdleAnimationId(struct entity *entity); +extern int ov29_02304830(); +extern void TryRemoveSnatchedMonsterFromDungeonStruct(struct entity *user, struct entity *target); +extern void ov29_022FB984(struct entity *entity); + +#ifdef JAPAN +#define JPN_MSG_OFFSET -0x2C0 +#else +#define JPN_MSG_OFFSET 0 +#endif + +void EndCurseClassStatus(struct entity *user, struct entity *target, u8 next_curse_class_status_being_applied, bool8 log_message) +{ + struct monster *entityInfo; + + if (!EntityIsValid__02305C04(target)) + return; + + entityInfo = GetEntInfo(target); + SubstitutePlaceholderStringTags(0, target, 0); + + switch (entityInfo->curse_class_status.curse) { + case STATUS_CURSE_NONE: + case 7: + break; + case STATUS_CURSE_CURSED: + if (next_curse_class_status_being_applied != STATUS_CURSE_CURSED && log_message) + LogMessageByIdWithPopupCheckUser(target, 0xc95 + JPN_MSG_OFFSET); + break; + case STATUS_CURSE_SNATCH: + if (next_curse_class_status_being_applied != STATUS_CURSE_SNATCH && log_message) + LogMessageByIdWithPopupCheckUser(target, 0xc96 + JPN_MSG_OFFSET); + TryRemoveSnatchedMonsterFromDungeonStruct(user, target); + break; + case STATUS_CURSE_DECOY: + entityInfo->curse_class_status.curse = STATUS_CURSE_NONE; + ov29_02304830(target, GetIdleAnimationId(target)); + DUNGEON_PTR[0]->decoy_is_active = FALSE; + if (next_curse_class_status_being_applied != STATUS_CURSE_DECOY) { + SubstitutePlaceholderStringTags(0, target, 0); + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xca5 + JPN_MSG_OFFSET); + } + break; + case STATUS_CURSE_GASTRO_ACID: + entityInfo->curse_class_status.curse = STATUS_CURSE_NONE; + ov29_022FB984(target); + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xcbf + JPN_MSG_OFFSET); + DUNGEON_PTR[0]->activate_artificial_weather_flag = TRUE; + break; + case STATUS_CURSE_HEAL_BLOCK: + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xcc2 + JPN_MSG_OFFSET); + break; + case STATUS_CURSE_EMBARGO: + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xcc3 + JPN_MSG_OFFSET); + break; + } + + entityInfo->curse_class_status.curse = STATUS_CURSE_NONE; + UpdateStatusIconFlags(target); +} diff --git a/src/overlay_29_02308FBC.c b/src/overlay_29_02308FBC.c index ce16d975..07b0f9da 100644 --- a/src/overlay_29_02308FBC.c +++ b/src/overlay_29_02308FBC.c @@ -43,6 +43,10 @@ #include "overlay_29_022E3F20.h" #include "overlay_29_022E406C.h" #include "overlay_29_0233836C.h" +#include "dungeon_util_2.h" +#include "overlay_29_02345A3C.h" +#include "overlay_29_02306728.h" +#include "overlay_29_02336F4C.h" struct unk_023535DC { u8 field_0x0; @@ -96,7 +100,6 @@ extern bool8 AftermathCheck(struct entity *attacker, struct entity *defender, s3 extern void ChangeMonsterAnimation(struct entity *entity, s32 animation_id, s32 direction); extern void ChangeMonsterAnimationToIdle(struct entity* monster, enum direction_id direction); extern void DisplayAnimatedNumbers(s32 amount, struct entity *entity, bool8 display_sign, s32 number_color); -extern void EndCurseClassStatus(struct entity* user, struct entity* target, u8 next_curse_class_status_being_applied, bool8 log_message); extern void EndInvisibleClassStatus(struct entity* user, struct entity* target, bool8 no_slip_message); extern int EndLeechSeedStatusForAllTargets(); extern bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity* user, struct entity* target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id); @@ -118,17 +121,13 @@ extern int PlayMissSfx__022E6150(); extern void RemoveHolderForItemInBag(struct item* item); extern void RestorePpAllMovesSetFlags(struct entity* entity); extern void RestoreRandomMovePP(struct entity* user, struct entity* target, s32 pp, bool8 log_message); -extern bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 param_4); extern void SubInitMonster(struct monster* monster, bool8 flag); -extern void SubstitutePlaceholderStringTags(s32 slot, struct entity *entity, u32 param_3); extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *user, struct entity *target); extern void TryIncreaseHp(struct entity *user, struct entity *target, s32 hp, s32 a, bool8 b); extern bool8 TryRecruit(struct entity *user, struct entity *recruit, void *recruit_info); extern void TrySpawnEnemyItemDrop(struct entity* attacker, struct entity* defender); extern void UnfreezeAnim(struct entity *e); extern void UpdateShopkeeperModeAfterAttack(struct entity* attacker, struct entity* defender); -extern void UpdateStatusIconFlags(struct entity *); -extern void UpdateTrapsVisibility(void); extern s32 abs(s32 n); extern int ov10_022BDC68(); extern int TerminateEffectWrapper(); diff --git a/src/overlay_29_0230BBAC.c b/src/overlay_29_0230BBAC.c index 64439fc4..fb6d1431 100644 --- a/src/overlay_29_0230BBAC.c +++ b/src/overlay_29_0230BBAC.c @@ -24,6 +24,7 @@ #include "run_dungeon_1.h" #include "type_effectiveness.h" #include "weather.h" +#include "dungeon_util_2.h" extern struct dungeon *DUNGEON_PTR; extern u8 GetMonsterGenderVeneer(s16 monster_id); @@ -47,7 +48,6 @@ extern void MultiplyFixedPoint64(struct fixed_point_64 *out, const struct fixed_ extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); extern bool8 UpdateStateFlags(struct monster *info, s32 flag, bool8 value); extern void ResetDamageData(struct unk_02308FE0 *damage_data); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity *user, struct entity *target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id); extern const u8 ov29_02352984[]; extern const u8 ov29_02352990[]; diff --git a/src/overlay_29_02311010.c b/src/overlay_29_02311010.c index d0d38c5d..85c39318 100644 --- a/src/overlay_29_02311010.c +++ b/src/overlay_29_02311010.c @@ -20,6 +20,9 @@ #include "overlay_29_0233836C.h" #include "overlay_29_0234B024.h" #include "weather.h" +#include "dungeon_util_2.h" +#include "overlay_29_022EC7E8.h" +#include "overlay_29_023061A8.h" #ifdef JAPAN #define MESSAGE_DE6 0xB26 @@ -49,13 +52,11 @@ extern bool8 ov29_022E34A8_EU(struct entity *entity); #endif extern void ApplyDamageAndEffectsWrapper(struct entity *entity, s32 damage, s32 a, s32 b); -extern s32 IsFloorOver(); extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *user, struct entity *target); extern bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity *user, struct entity *target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); extern void TryIncreaseHp(struct entity *user, struct entity *target, s32 hp, s32 a, bool8 b); extern void TryWarp(struct entity *user, struct entity *target, s32 a, s32 b); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void MultiplyFixedPoint64(struct fixed_point_64 *out, const struct fixed_point_64 *a, const struct fixed_point_64 *b); extern void EndNegativeStatusConditionWrapper(struct entity *user, struct entity *target, bool8 displayMessage, bool8 fromMove); extern void ov29_022EA370(s32 a, s32 b); @@ -70,7 +71,6 @@ extern void PlayEffectAnimationEntityStandard(struct entity *entity, s32 anim_id extern void ov29_022F42F8(struct entity *entity); extern void EndMagnetRiseStatus(struct entity *user, struct entity *target); extern void TickNoSlipCap(struct entity *entity); -extern void EndBurnClassStatus(struct entity *user, struct entity *target); extern void ov29_022EC62C(struct entity *entity); extern void ov29_022FB718(struct entity *entity); extern void TryActivateBadDreams(struct entity *entity); diff --git a/src/overlay_29_0231CBC8.c b/src/overlay_29_0231CBC8.c index a961a270..118439f9 100644 --- a/src/overlay_29_0231CBC8.c +++ b/src/overlay_29_0231CBC8.c @@ -10,6 +10,8 @@ #include "overlay_29_022EAC7C.h" #include "overlay_29_02344AF8.h" #include "overlay_29_0234BA54.h" +#include "dungeon_util_2.h" +#include "overlay_29_02345A3C.h" #ifdef JAPAN #define MESSAGE_BE6 0x925 @@ -35,10 +37,8 @@ extern void ov29_022FB920(bool8 a); #endif extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void TryIncreaseHp(struct entity *user, struct entity *target, s32 hp, s32 a, bool8 b); extern void EndNegativeStatusConditionWrapper(struct entity *user, struct entity *target, bool8 displayMessage, bool8 fromMove); -extern bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 a); extern void TryWarp(struct entity *user, struct entity *target, s32 a, s32 b); extern void BoostIQ(struct entity *entity, s16 iq, bool8 a); extern void UpdateShopkeeperModeAfterAttack(struct entity *attacker, struct entity *defender); diff --git a/src/overlay_29_0232D368.c b/src/overlay_29_0232D368.c index 93fbb945..938f5173 100644 --- a/src/overlay_29_0232D368.c +++ b/src/overlay_29_0232D368.c @@ -1,4 +1,5 @@ #include "overlay_29_0232D368.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define GUARD_SWAP_LOG_MESSAGE 0x2495 @@ -7,7 +8,6 @@ #endif extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void SwapDefensiveStages(struct entity *attacker, struct entity *defender, s32 log_message); extern void SwapDefensiveMultipliers(struct entity *attacker, struct entity *defender, s32 log_message); extern void TryInflictLuckyChantStatus(struct entity *user, struct entity *target); diff --git a/src/overlay_29_02336F4C.c b/src/overlay_29_02336F4C.c new file mode 100644 index 00000000..626d62a5 --- /dev/null +++ b/src/overlay_29_02336F4C.c @@ -0,0 +1,65 @@ +#include "overlay_29_02336F4C.h" +#include "dungeon.h" +#include "overlay_29_02338604.h" + +extern struct dungeon *DUNGEON_PTR[]; +extern const s16 ov29_02352B9C[222]; +extern const s16 ov29_02352D58[222]; +extern u16 *ov29_02336DB0(struct dungeon_generation_info *a, s16 x, s16 y, s16 idx, bool8 can_see_traps, bool8 hallucinating, bool8 bazaar); +extern void sub_02051D8C(s16 x, s16 y, u16 val, s32 a, s32 b); +extern void sub_02051E60(s32, s32); + +void UpdateTrapsVisibility(void) +{ + struct dungeon *dungeon; + u16 *src; + s32 y; + s32 mapx; + s32 mapy; + s32 tx; + s32 ty; + s32 x; + bool8 hallucinating; + bool8 can_see_traps; + bool8 bazaar; + s32 i; + s32 j; + s32 k; + + dungeon = DUNGEON_PTR[0]; + hallucinating = dungeon->display_data.hallucinating; + can_see_traps = dungeon->display_data.can_see_traps; + bazaar = IsSecretBazaar(); + x = dungeon->display_data.camera_pixel_pos.x >> 3; + k = 30 + x; + tx = ov29_02352B9C[k]; + mapx = ov29_02352D58[k]; + for (i = 0; i < 33; i++) { + y = (dungeon->display_data.camera_pixel_pos.y >> 3) - 1; + x &= 0x3F; + ty = ov29_02352B9C[30 + y]; + mapy = ov29_02352D58[30 + y]; + src = ov29_02336DB0(&dungeon->gen_info, mapx, mapy, tx + ty * 3, can_see_traps, + hallucinating, bazaar); + for (j = 0; j < 27; j++) { + y &= 0x1F; + sub_02051D8C(x, y, *src, 1, 0); + src += 3; + y++; + ty++; + if (ty == 3) { + ty = 0; + mapy++; + src = ov29_02336DB0(&dungeon->gen_info, mapx, mapy, tx, can_see_traps, + hallucinating, bazaar); + } + } + x++; + tx++; + if (tx == 3) { + tx = 0; + mapx++; + } + } + sub_02051E60(1, 0); +} diff --git a/src/overlay_29_0233E43C.c b/src/overlay_29_0233E43C.c index 87b0c2e4..a1fa5961 100644 --- a/src/overlay_29_0233E43C.c +++ b/src/overlay_29_0233E43C.c @@ -1,7 +1,12 @@ #include "overlay_29_0233E43C.h" #include "overlay_29_0233C9E8.h" #include "dg_random.h" +#include "dungeon.h" #include "dungeon_map_access.h" +#include "dungeon_util.h" +#include "dungeon_util_static.h" + +extern const bool8 CORNER_CARDINAL_NEIGHBOR_IS_OPEN[4][NUM_DIRECTIONS]; void CreateGridCellConnections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y, s32 *arg4, s32 *arg5, bool8 arg6) { @@ -281,3 +286,292 @@ void CreateGridCellConnections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, } + +void GenerateRoomImperfections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y) +{ + s32 x; + s32 y; + s32 counter; + s32 move_x; + s32 move_y; + s32 length; + s32 i; + s32 v; + s32 corner; + s32 dir; + s32 next_x; + s32 next_y; + s32 off_x; + s32 off_y; + s32 found; + const struct tile *tile; + bool8 is_open; + s32 pt_y; + s32 pt_x; + + for (x = 0; x < grid_size_x; x++) { + for (y = 0; y < grid_size_y; y++) { + if (grid[x][y].field_0x8 != 0 || grid[x][y].field_0x11[0] != 0 + || grid[x][y].field_0x11[1] != 0) { + continue; + } + if (grid[x][y].field_0xb == 0 || grid[x][y].field_0xa == 0) { + continue; + } + if (grid[x][y].field_0x9 != 0 || grid[x][y].field_0x10 != 0) { + continue; + } + if (grid[x][y].field_0x11[0xb] == 0) { + continue; + } + if (DungeonRandInt(100) < 60) { + continue; + } + + length = (grid[x][y].field_0x4 - grid[x][y].field_0x0) + + (grid[x][y].field_0x6 - grid[x][y].field_0x2); + length /= 4; + if (length == 0) { + length = 1; + } + + for (counter = 0; counter < length; counter++) { + for (i = 0; i < 2; i++) { + corner = DungeonRandInt(4); + + switch (corner) { + case 0: + default: + pt_x = grid[x][y].field_0x0; + pt_y = grid[x][y].field_0x2; + if (i != 0) { + move_x = 1; + move_y = 0; + } else { + move_x = 0; + move_y = 1; + } + break; + case 1: + pt_x = grid[x][y].field_0x4 - 1; + pt_y = grid[x][y].field_0x2; + if (i != 0) { + move_x = 0; + move_y = 1; + } else { + move_x = -1; + move_y = 0; + } + break; + case 2: + pt_x = grid[x][y].field_0x4 - 1; + pt_y = grid[x][y].field_0x6 - 1; + if (i != 0) { + move_x = -1; + move_y = 0; + } else { + move_x = 0; + move_y = -1; + } + break; + case 3: + pt_x = grid[x][y].field_0x0; + pt_y = grid[x][y].field_0x6 - 1; + if (i != 0) { + move_x = 0; + move_y = -1; + } else { + move_x = 1; + move_y = 0; + } + break; + } + + for (v = 0; v < 10; v++) { + if (pt_x < grid[x][y].field_0x0 || pt_x >= grid[x][y].field_0x4) { + break; + } + if (pt_y < grid[x][y].field_0x2 || pt_y >= grid[x][y].field_0x6) { + break; + } + + if (GetTerrainType(GetTile(pt_x, pt_y)) == TERRAIN_TYPE_NORMAL) { + dir = 0; + while (dir < NUM_DIRECTIONS) { + next_x = pt_x + DIRECTIONS_XY[dir].x; + next_y = pt_y + DIRECTIONS_XY[dir].y; + found = FALSE; + + for (off_y = -1; off_y <= 1; off_y++) { + for (off_x = -1; off_x <= 1; off_x++) { + tile = GetTile(next_x + off_x, next_y + off_y); + + if (GetTerrainType(tile) != TERRAIN_TYPE_NORMAL) { + continue; + } + if (tile->room == CORRIDOR_ROOM) { + found = TRUE; + } + if (found) { + break; + } + } + if (found) { + break; + } + } + if (found) { + break; + } + dir++; + } + + if (dir == NUM_DIRECTIONS) { + dir = 0; + while (dir < NUM_DIRECTIONS) { + next_x = DIRECTIONS_XY[dir].x; + next_y = DIRECTIONS_XY[dir].y; + is_open = (GetTerrainType(GetTile(pt_x + next_x, pt_y + next_y)) + == TERRAIN_TYPE_NORMAL); + + if (CORNER_CARDINAL_NEIGHBOR_IS_OPEN[corner][dir] != is_open) { + break; + } + dir += 2; + } + if (dir == NUM_DIRECTIONS) { + GetTileSafe(pt_x, pt_y)->terrain_flags &= + ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + } + } + break; + } else { + pt_x += move_x; + pt_y += move_y; + } + } + } + } + } + } +} + +void CreateHallway(s32 x, s32 y, s32 end_x, s32 end_y, bool8 vertical, s32 turn_x, s32 turn_y) +{ + s32 start_x = x; + s32 start_y = y; + s32 i; + struct tile *t; + + if (vertical) { + i = 0; + while (y != turn_y) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (y < turn_y) { + y++; + } else { + y--; + } + } + i = 0; + while (x != end_x) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (x < end_x) { + x++; + } else { + x--; + } + } + i = 0; + while (y != end_y) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (y < end_y) { + y++; + } else { + y--; + } + } + } else { + i = 0; + while (x != turn_x) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (x < turn_x) { + x++; + } else { + x--; + } + } + i = 0; + while (y != end_y) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (y < end_y) { + y++; + } else { + y--; + } + } + i = 0; + while (x != end_x) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (x < end_x) { + x++; + } else { + x--; + } + } + } +} diff --git a/src/overlay_29_02345A3C.c b/src/overlay_29_02345A3C.c new file mode 100644 index 00000000..927c2540 --- /dev/null +++ b/src/overlay_29_02345A3C.c @@ -0,0 +1,20 @@ +#include "overlay_29_02345A3C.h" +#include "dg_object.h" + +extern bool8 SpawnDroppedItem(struct entity *entity, struct entity *item_entity, struct item *item, bool8 param_4, struct position *dir_xy, u32 param_6); + +bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 param_4) +{ + struct entity item_entity; + + item_entity.type = ENTITY_ITEM; + item_entity.field_0x24 = 0; + item_entity.is_visible = TRUE; + item_entity.transparent = 0; + item_entity.info = item; + item_entity.pos = *pos; + + SetEntityPixelPosXY(&item_entity, (pos->x * 24 + 4) << 8, (pos->y * 24 + 4) << 8); + item_entity.spawn_genid = 0; + return SpawnDroppedItem(entity, &item_entity, item, TRUE, NULL, param_4); +} diff --git a/src/overlay_31_02382820.c b/src/overlay_31_02382820.c index 57ae4806..b13811da 100644 --- a/src/overlay_31_02382820.c +++ b/src/overlay_31_02382820.c @@ -8,6 +8,7 @@ #include "main_02001188.h" #include "window.h" #include "main_02027AF0.h" +#include "dungeon_util_2.h" extern struct dungeon *DUNGEON_PTR[]; @@ -31,8 +32,6 @@ extern void* MemAlloc(u32 size, u32 nmemb); extern u32 GetMoneyCarried(void); extern u32 sub_0204F9E0(void); -extern void GetMonsterOrTrapName(u8*, void*, u32); // The third argument isn't actually used in the - // function (../asm/overlay_29_022E1A40.s#L1378) extern u8* StringFromId(u32); extern void PreprocessString(u8* dst, u32 dsize, const u8* src, u32 flags, struct PPStrValues* ptr); extern void DrawTextInWindow(s32, u32, u32, u8*); diff --git a/src/status_checks.c b/src/status_checks.c index c2bb54a1..5fb496e2 100644 --- a/src/status_checks.c +++ b/src/status_checks.c @@ -5,6 +5,7 @@ #include "dungeon_capabilities_3.h" #include "dungeon_statuses.h" #include "dungeon_util_static.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET -0x2C1 @@ -19,7 +20,6 @@ #define INFATUATED_MESSAGE (0xC2C + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET) #define BIDE_MESSAGE (0xC2D + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET) -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); bool8 HasStatusThatPreventsActing(struct entity *monster)