Decompile 16 callees of the combat and dungeon-generation functions

Every function was verified at score 0 against its NORTH_AMERICA, EUROPE and
JAPAN targets before landing, with the target's address walk closing exactly in
each region, and by a matching US build after landing.

  overlay_29_0233E43C.c   GenerateRoomImperfections, CreateHallway
  overlay_29_022E3F20.c   UpdateStatusIconFlags, PlayQuestionMarkEffect,
                          PlayExclamationPointEffect__022E47D4,
                          PlayExclamationPointEffect__022E4880, ov29_022E3E74
  dungeon_util_2.c        PopulateActiveMonsterPtrs, GetTeamMemberIndex,
                          GetMonsterOrTrapName, SubstitutePlaceholderStringTags
  overlay_29_022EC7E8.c   IsFloorOver                      (new file)
  overlay_29_02345A3C.c   SpawnDroppedItemWrapper          (new file)
  overlay_29_023061A8.c   EndBurnClassStatus               (new file)
  overlay_29_02306728.c   EndCurseClassStatus              (new file)
  overlay_29_02336F4C.c   UpdateTrapsVisibility            (new file)

Eleven were landed at a file boundary by first decompiling the functions between
them and the nearest end of their .s, so they merge into the adjacent source file
instead of splitting it. The other five sit too far from either end to make that
worthwhile and split their .s as usual.

CreateHallway closes a provisional declaration: CreateGridCellConnections had
declared it from the call site as (s32 arg1 .. s32 arg7), and that guessed
prototype is now replaced by the real one in the same header.

Eighteen pre-existing declarations of these functions, written from call sites in
other translation units, are replaced by an include of the owning header. Three
of them disagreed with the real signature, and no build could have caught any of
them because two declarations of one function never meet in a single translation
unit:

  IsFloorOver            declared `extern s32` in two files; it returns bool8.
  SpawnDroppedItem       declared `void`; SpawnDroppedItemWrapper returns its
                         value. Corrected in src/dungeon_projectile_throw.c.
  SetPreprocessorArgsStringToName
                         declared with `u8 pos` / `u8 param_4`. Every existing
                         call site passes literal constants, where the narrowing
                         is invisible; SubstitutePlaceholderStringTags passes
                         variables, and the narrow form emits two `and rX,#0xff`
                         rows the target does not have. Widened to s32/u32.

GetMonsterOrTrapName is landed with three parameters rather than two. Both score
0 -- an ignored third argument costs the callee nothing, so the callee's bytes
cannot distinguish them -- but src/overlay_31_02382820.c has always called it
with three, which is evidence about the caller that the callee cannot supply.

pret/pmd-red was used as a structural reference where it has an equivalent
function. It supplied the shape and never the spelling: it is a different game
built by a different compiler. IsFloorOver is the clearest case -- translating
its nested form literally scored 1525, and flattening to four independent early
returns scored 0.

Authored by Claude (Opus 5) under human direction. Confirmed by a matching
build: build/pmdsky.us/pmdsky.us.nds: OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-09-12 17:16:58 -07:00
parent dae72255ff
commit 3fd44e5988
52 changed files with 5423 additions and 5976 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -1,6 +1,5 @@
#pragma once
.public CORNER_CARDINAL_NEIGHBOR_IS_OPEN
.public DIRECTIONS_XY
.public CreateHallway
.public DUNGEON_PTR
.public DungeonRandInt
.public DungeonRandRange

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

447
asm/overlay_29_022EC85C.s Normal file
View File

@@ -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

File diff suppressed because it is too large Load Diff

401
asm/overlay_29_02306258.s Normal file
View File

@@ -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

1726
asm/overlay_29_023068C4.s Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

888
asm/overlay_29_0233711C.s Normal file
View File

@@ -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

View File

@@ -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}

View File

@@ -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

954
asm/overlay_29_02345AD8.s Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
{

View File

@@ -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;
}
}

View File

@@ -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);

View File

@@ -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)
{

28
src/overlay_29_022EC7E8.c Normal file
View File

@@ -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;
}

View File

@@ -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();

41
src/overlay_29_023061A8.c Normal file
View File

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

74
src/overlay_29_02306728.c Normal file
View File

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

View File

@@ -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();

View File

@@ -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[];

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

65
src/overlay_29_02336F4C.c Normal file
View File

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

View File

@@ -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--;
}
}
}
}

20
src/overlay_29_02345A3C.c Normal file
View File

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

View File

@@ -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*);

View File

@@ -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)