diff --git a/asm/include/itcm.inc b/asm/include/itcm.inc index 54774049..c9799fb9 100644 --- a/asm/include/itcm.inc +++ b/asm/include/itcm.inc @@ -81,7 +81,7 @@ .public SetMonsterActionFields .public ShouldMonsterFollowLeader .public ShouldMonsterHeadToStairs -.public ShouldMonsterRunAwayVariation +.public ShouldMonsterRunAwayAndShowEffect .public sub_0201BD50 .public sub_0201BD80 .public sub_0202760C diff --git a/asm/include/main_0207B854.inc b/asm/include/main_0207B854.inc index 2e3df2f0..6f70f09b 100644 --- a/asm/include/main_0207B854.inc +++ b/asm/include/main_0207B854.inc @@ -1,23 +1 @@ #pragma once -.public _022B99A8 -.public _022B99D0 -.public _022B99D4 -.public _022B99D8 -.public ArrayCopy16 -.public EnableIrqFlag -.public GetTimer0Control -.public MemcpyFast -.public OS_GetLockID -.public SetIrqFlag -.public sub_01FF97CC -.public sub_02078900 -.public sub_02078C3C -.public sub_02078CC8 -.public sub_0207C164 -.public sub_0207D9A4 -.public sub_0207DAB0 -.public sub_0207DAFC -.public sub_0207DB20 -.public sub_02083434 -.public SVC_WaitByLoop -.public WaitForever2 diff --git a/asm/include/main_0207B87C.inc b/asm/include/main_0207B87C.inc new file mode 100644 index 00000000..cfd3cebe --- /dev/null +++ b/asm/include/main_0207B87C.inc @@ -0,0 +1,21 @@ +#pragma once +.public ArrayCopy16 +.public EnableIrqFlag +.public GetTimer0Control +.public MemcpyFast +.public OS_GetLockID +.public SetIrqFlag +.public WaitForever2 +.public _022B99A8 +.public _022B99D0 +.public _022B99D4 +.public _022B99D8 +.public sub_01FF97CC +.public sub_02078C3C +.public sub_02078CC8 +.public sub_0207C164 +.public sub_0207D9A4 +.public sub_0207DAB0 +.public sub_0207DAFC +.public sub_0207DB20 +.public sub_02083434 diff --git a/asm/include/overlay_29_022F05B4.inc b/asm/include/overlay_29_022F05B4.inc index 0ea5e688..dcde4209 100644 --- a/asm/include/overlay_29_022F05B4.inc +++ b/asm/include/overlay_29_022F05B4.inc @@ -177,7 +177,7 @@ .public SetLeaderActionFields .public SetMonsterActionFields .public ShouldMonsterRunAway -.public ShouldMonsterRunAwayVariation +.public ShouldMonsterRunAwayAndShowEffect .public SpawnItem .public sub_02001AB0 .public sub_02006B70 diff --git a/asm/include/overlay_29_022F52B0.inc b/asm/include/overlay_29_022F52B0.inc index 25286e66..5668c003 100644 --- a/asm/include/overlay_29_022F52B0.inc +++ b/asm/include/overlay_29_022F52B0.inc @@ -37,6 +37,6 @@ .public RemoveGroundItem .public RemoveUsedItem .public ShouldDisplayEntityWrapper -.public ShouldMonsterRunAwayVariation +.public ShouldMonsterRunAwayAndShowEffect .public SpawnItem .public TryTriggerMonsterHouse diff --git a/asm/include/overlay_29_02300D00.inc b/asm/include/overlay_29_02300D00.inc index e5cedaee..4cb9677d 100644 --- a/asm/include/overlay_29_02300D00.inc +++ b/asm/include/overlay_29_02300D00.inc @@ -1,3 +1,2 @@ #pragma once .public CheckVariousStatuses -.public ShouldMonsterRunAway diff --git a/asm/include/overlay_29_02300FCC.inc b/asm/include/overlay_29_02300FCC.inc index 14959f08..00690046 100644 --- a/asm/include/overlay_29_02300FCC.inc +++ b/asm/include/overlay_29_02300FCC.inc @@ -1,18 +1,10 @@ #pragma once .public DIRECTIONS_XY -.public DUNGEON_PTR -.public DungeonRandInt .public GetDirectionalMobilityType .public GetMobilityTypeCheckSlipAndFloating .public GetTile -.public GetTreatmentBetweenMonsters .public IqSkillIsEnabled .public IsCurrentTilesetBackground -.public IsTacticSet .public ItemIsActive__022FF898 -.public ov29_02352770 -.public ov29_02352778 -.public ov29_02352780 .public ov29_02352788 .public ov29_02352790 -.public SECONDARY_TERRAIN_TYPES diff --git a/asm/include/overlay_29_02301158.inc b/asm/include/overlay_29_02301158.inc new file mode 100644 index 00000000..c1ea79d5 --- /dev/null +++ b/asm/include/overlay_29_02301158.inc @@ -0,0 +1,16 @@ +#pragma once +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DungeonRandInt +.public GetDirectionalMobilityType +.public GetMobilityTypeCheckSlipAndFloating +.public GetTile +.public GetTreatmentBetweenMonsters +.public IqSkillIsEnabled +.public IsCurrentTilesetBackground +.public IsTacticSet +.public ItemIsActive__022FF898 +.public SECONDARY_TERRAIN_TYPES +.public ov29_02352770 +.public ov29_02352778 +.public ov29_02352780 diff --git a/asm/include/overlay_29_023016A8.inc b/asm/include/overlay_29_023016D8.inc similarity index 54% rename from asm/include/overlay_29_023016A8.inc rename to asm/include/overlay_29_023016D8.inc index ce71f221..f8427fbc 100644 --- a/asm/include/overlay_29_023016A8.inc +++ b/asm/include/overlay_29_023016D8.inc @@ -1,5 +1,4 @@ #pragma once .public AbilityIsActive -.public ov29_022E62A8 -.public ShouldMonsterRunAway .public UpdateStateFlags +.public PlayEffectAnimation0x29 diff --git a/asm/include/overlay_29_0230F02C.inc b/asm/include/overlay_29_0230F02C.inc index 2b2d4679..d0d2a931 100644 --- a/asm/include/overlay_29_0230F02C.inc +++ b/asm/include/overlay_29_0230F02C.inc @@ -33,7 +33,7 @@ .public ov29_02348DD8 .public ov29_02348ECC .public RemoveGroundItem -.public ShouldMonsterRunAwayVariation +.public ShouldMonsterRunAwayAndShowEffect .public sub_0200D8AC .public SubstitutePlaceholderStringTags .public UseThrowableItem diff --git a/asm/include/overlay_29_02340CE4.inc b/asm/include/overlay_29_02340CE4.inc index 5419c829..7b2a85c0 100644 --- a/asm/include/overlay_29_02340CE4.inc +++ b/asm/include/overlay_29_02340CE4.inc @@ -1,31 +1,20 @@ #pragma once -.public _s32_div_f -.public abs -.public CountStickyItemsInBag -.public DetermineAllTilesWalkableNeighbors .public DUNGEON_PTR +.public DetermineAllTilesWalkableNeighbors .public DungeonRand16Bit .public DungeonRandInt .public DungeonRandRange .public DungeonRngSetPrimary .public DungeonRngSetSecondary -.public EntityIsValid__02344AF8 .public FIRST_DUNGEON_WITH_MONSTER_HOUSE_TRAPS .public FIXED_ROOM_DATA_PTR .public FIXED_ROOM_ENTITY_SPAWN_TABLE .public FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE .public FLOOR_GENERATION_STATUS -.public GenerateCleanItem -.public GenerateStandardItem -.public GetActiveTeamMember -.public GetDungeonMode -.public GetExclusiveItem +.public GenerateAndSpawnItem .public GetExplorerMazeMonster .public GetFloorType -.public GetItemCategoryVeneer -.public GetMissionEnemyMinionGroup -.public GetMissionTargetEnemy -.public GetMoneyCarried +.public GetMatchingMonsterId .public GetMonsterIdFromSpawnEntry .public GetMonsterLevelToSpawn .public GetOutlawLeaderLevel @@ -35,88 +24,59 @@ .public GetSpecialTargetItem .public GetTile .public GetTileSafe -.public HandleSir0Translation .public HIDDEN_STAIRS_SPAWN_BLOCKED .public HIDDEN_STAIRS_SPAWN_CHANCE_MULTIPLIER -.public InitializeTile +.public HandleSir0Translation .public InitOtherMonsterData -.public InitStandardItem -.public IsBagFull +.public InitializeTile .public IsCurrentMissionType .public IsDestinationFloor .public IsFullFloorFixedRoom .public IsGoldenChamber -.public IsItemInBag -.public IsSecretBazaar .public IsSecretRoom .public IsTreasureBox .public KECLEON_SHOP_BOOST_CHANCE_MULTIPLIER .public LoadFileFromRom -.public LoadScriptVariableValue .public LogMessageByIdWithPopupCheckUser +.public MONSTER_HOUSE_MAX_MONSTER_SPAWNS +.public MONSTER_HOUSE_MAX_NON_MONSTER_SPAWNS .public MemAlloc .public MemFree .public MemZero -.public MONSTER_HOUSE_MAX_MONSTER_SPAWNS -.public MONSTER_HOUSE_MAX_NON_MONSTER_SPAWNS .public MultiplyByFixedPoint +.public PointsToZero +.public PosIsOutOfBounds +.public SHOP_ITEM_CHANCES +.public SetMonsterLevelAndId +.public SetShouldBoostHiddenStairsSpawnChance +.public SetShouldBoostKecleonShopSpawnChance +.public ShouldBoostHiddenStairsSpawnChance +.public ShouldBoostKecleonShopSpawnChance +.public SpawnEnemyTrapAtPos +.public SpawnMonster +.public TREASURE_BOX_1_ITEM_IDS +.public UnloadFile +.public UpdateMinimap +.public UpdateTrapsVisibility +.public ZInit8 +.public _s32_div_f +.public abs .public ov10_022C4B34 -.public ov10_022C6C74 .public ov10_022C6C75 -.public ov10_022C6C76 .public ov10_022C6C77 .public ov10_022C6C78 .public ov10_022C6C79 .public ov29_022E6694 -.public ov29_022E7BB8 .public ov29_022E7BD0 .public ov29_022EA370 -.public ov29_022EFB20 -.public ov29_022EFB84 -.public ov29_022F05B4 -.public ov29_022F05E4 -.public ov29_022F0604 -.public ov29_022F0618 -.public ov29_022F062C -.public ov29_022F0654 -.public ov29_022F067C -.public ov29_022F0780 -.public ov29_022F07BC -.public ov29_022F07D8 -.public ov29_022F0848 .public ov29_023365E8 .public ov29_02336694 -.public ov29_02344B9C -.public ov29_02345004 +.public ov29_023442B8 .public ov29_02348BE8 -.public ov29_0234B09C -.public ov29_0234B1A4 -.public ov29_0234C738 .public ov29_023502F0 .public ov29_023502F4 .public ov29_02353030 .public ov29_02353050 .public ov29_02353110 .public ov29_023534F0 -.public ov29_02353798 .public ov29_0237CFC0 -.public ov29_0237CFFC -.public PointsToZero -.public PosIsOutOfBounds -.public SetMonsterLevelAndId -.public SetShouldBoostHiddenStairsSpawnChance -.public SetShouldBoostKecleonShopSpawnChance -.public SHOP_ITEM_CHANCES -.public ShouldBoostHiddenStairsSpawnChance -.public ShouldBoostKecleonShopSpawnChance -.public SpawnEnemyTrapAtPos -.public SpawnItem -.public SpawnMonster -.public StartFadeDungeonWrapper -.public sub_02056880 -.public SubstitutePlaceholderStringTags -.public TREASURE_BOX_1_ITEM_IDS -.public UnloadFile -.public UpdateMinimap -.public UpdateTrapsVisibility -.public ZInit8 diff --git a/asm/include/overlay_29_02344178.inc b/asm/include/overlay_29_02344178.inc new file mode 100644 index 00000000..f6fed190 --- /dev/null +++ b/asm/include/overlay_29_02344178.inc @@ -0,0 +1,47 @@ +#pragma once +.public CountStickyItemsInBag +.public DUNGEON_PTR +.public DungeonRandInt +.public EntityIsValid__02344AF8 +.public GenerateCleanItem +.public GenerateStandardItem +.public GetActiveTeamMember +.public GetDungeonMode +.public GetExclusiveItem +.public GetItemCategoryVeneer +.public GetMissionEnemyMinionGroup +.public GetMissionTargetEnemy +.public GetMoneyCarried +.public InitStandardItem +.public IsBagFull +.public IsItemInBag +.public IsSecretBazaar +.public IsSecretRoom +.public LoadScriptVariableValue +.public MemZero +.public SpawnItem +.public StartFadeDungeonWrapper +.public SubstitutePlaceholderStringTags +.public ov10_022C6C74 +.public ov29_022E7BB8 +.public ov29_022EFB20 +.public ov29_022EFB84 +.public ov29_022F05B4 +.public ov29_022F05E4 +.public ov29_022F0604 +.public ov29_022F0618 +.public ov29_022F062C +.public ov29_022F0654 +.public ov29_022F067C +.public ov29_022F0780 +.public ov29_022F07BC +.public ov29_022F07D8 +.public ov29_022F0848 +.public ov29_02344B9C +.public ov29_02345004 +.public ov29_0234B09C +.public ov29_0234B1A4 +.public ov29_0234C738 +.public ov29_02353798 +.public ov29_0237CFFC +.public sub_02056880 diff --git a/asm/include/overlay_29_02344B1C.inc b/asm/include/overlay_29_02344B1C.inc index 949942ed..d6fa441f 100644 --- a/asm/include/overlay_29_02344B1C.inc +++ b/asm/include/overlay_29_02344B1C.inc @@ -44,7 +44,7 @@ .public RemoveEmptyItemsInBag .public RemoveEquivItemNoHole .public RemoveGroundItem -.public ShouldMonsterRunAwayVariation +.public ShouldMonsterRunAwayAndShowEffect .public SpawnItemEntity .public sub_0200D8AC .public sub_02024FE8 diff --git a/asm/itcm.s b/asm/itcm.s index d01b9ea6..ba07977f 100644 --- a/asm/itcm.s +++ b/asm/itcm.s @@ -2792,12 +2792,12 @@ _01FFA37C: _01FFA38C: .word ov29_02353530 arm_func_end sub_01FF9F80 - arm_func_start ShouldMonsterRunAwayVariationOutlawCheck -ShouldMonsterRunAwayVariationOutlawCheck: ; 0x01FFA390 + arm_func_start ShouldMonsterRunAwayAndShowEffectOutlawCheck +ShouldMonsterRunAwayAndShowEffectOutlawCheck: ; 0x01FFA390 stmdb sp!, {r3, r4, r5, lr} mov r4, #0 mov r5, r0 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 movne r4, #1 bne _01FFA3BC @@ -2808,7 +2808,7 @@ ShouldMonsterRunAwayVariationOutlawCheck: ; 0x01FFA390 _01FFA3BC: mov r0, r4 ldmia sp!, {r3, r4, r5, pc} - arm_func_end ShouldMonsterRunAwayVariationOutlawCheck + arm_func_end ShouldMonsterRunAwayAndShowEffectOutlawCheck arm_func_start AiMovement AiMovement: ; 0x01FFA3C4 @@ -2894,7 +2894,7 @@ _01FFA494: _01FFA4D4: ldr r1, [sp] mov r0, r4 - bl ShouldMonsterRunAwayVariationOutlawCheck + bl ShouldMonsterRunAwayAndShowEffectOutlawCheck cmp r0, #0 beq _01FFA9A8 ldr sb, [r4, #0xb4] @@ -3775,7 +3775,7 @@ _01FFB16C: movne sl, #5 mov r0, r4 moveq sl, #3 - bl ShouldMonsterRunAwayVariationOutlawCheck + bl ShouldMonsterRunAwayAndShowEffectOutlawCheck cmp r0, #0 ldreqb r0, [sb, #0x7f] mov r8, #1 @@ -4169,7 +4169,7 @@ ChooseAiMove: ; 0x01FFB658 bne _01FFBD0C mov r0, sl mov r1, #1 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 bne _01FFBD0C ldr r0, [sl, #0xb4] diff --git a/asm/main_0207B854.s b/asm/main_0207B854.s index 7f6872d9..eecf2e02 100644 --- a/asm/main_0207B854.s +++ b/asm/main_0207B854.s @@ -3,308 +3,10 @@ .text +; https://decomp.me/scratch/5f50V arm_func_start sub_0207B854 sub_0207B854: ; 0x0207B854 subs r0, r0, #4 bhs sub_0207B854 bx lr arm_func_end sub_0207B854 - - arm_func_start sub_0207B860 -sub_0207B860: ; 0x0207B860 - stmdb sp!, {r3, lr} - mov r0, #1 - blx SVC_WaitByLoop - mov r0, #1 - mov r1, r0 - bl sub_02078900 - ldmia sp!, {r3, pc} - arm_func_end sub_0207B860 - - arm_func_start sub_0207B87C -sub_0207B87C: ; 0x0207B87C - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _0207B8C8 ; =_022B99D0 - ldrh r1, [r0, #2] - cmp r1, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r1, #1 - strh r1, [r0, #2] - bl sub_0207D9A4 - mov r5, #0xc - mov r4, #1 -_0207B8A4: - mov r0, r5 - mov r1, r4 - bl sub_0207DAFC - cmp r0, #0 - beq _0207B8A4 - ldr r1, _0207B8CC ; =sub_0207B8D0 - mov r0, #0xc - bl sub_0207DAB0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0207B8C8: .word _022B99D0 -_0207B8CC: .word sub_0207B8D0 - arm_func_end sub_0207B87C - - arm_func_start sub_0207B8D0 -sub_0207B8D0: ; 0x0207B8D0 - stmdb sp!, {r3, lr} - and r0, r1, #0x7f00 - mov r0, r0, lsl #8 - mov r0, r0, lsr #0x10 - cmp r0, #0x10 - bne _0207B8F8 - ldr r0, _0207B900 ; =_022B99D0 - mov r1, #1 - strh r1, [r0] - ldmia sp!, {r3, pc} -_0207B8F8: - bl WaitForever2 - ldmia sp!, {r3, pc} - .align 2, 0 -_0207B900: .word _022B99D0 - arm_func_end sub_0207B8D0 - - arm_func_start sub_0207B904 -sub_0207B904: ; 0x0207B904 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0, lsl #8 - mov r5, #0xc - mov r4, #0 -_0207B914: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl sub_0207DB20 - cmp r0, #0 - bne _0207B914 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_0207B904 - - arm_func_start sub_0207B930 -sub_0207B930: ; 0x0207B930 - stmdb sp!, {r4, lr} - ldr r1, _0207B9C0 ; =0x027FFC40 - mov r4, r0 - ldrh r0, [r1] - cmp r0, #2 - moveq r0, #1 - movne r0, #0 - cmp r0, #0 - beq _0207B958 - bl WaitForever2 -_0207B958: - bl OS_GetLockID - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl sub_02083434 - ldr r0, _0207B9C4 ; =0x00000000 - bl sub_0207C164 - ldr r0, _0207B9C8 ; =0x00000001 - bl sub_0207C164 - ldr r0, _0207B9CC ; =0x00000002 - bl sub_0207C164 - ldr r0, _0207B9D0 ; =0x00000003 - bl sub_0207C164 - ldr r0, _0207B9D4 ; =0x00040000 - bl sub_02078C3C - ldr r0, _0207B9D8 ; =0xFFFBFFFF - bl sub_02078CC8 - ldr r1, _0207B9DC ; =0x027FFC20 - ldr r0, _0207B9E0 ; =0x00000010 - str r4, [r1] - bl sub_0207B904 - ldr r0, _0207B9E4 ; =0x027E3F80 - ldr r1, _0207B9E8 ; =0x00000800 - sub r0, r0, r1 - mov sp, r0 - bl sub_01FF97CC - ldmia sp!, {r4, pc} - .align 2, 0 -_0207B9C0: .word 0x027FFC40 -_0207B9C4: .word 0x00000000 -_0207B9C8: .word 0x00000001 -_0207B9CC: .word 0x00000002 -_0207B9D0: .word 0x00000003 -_0207B9D4: .word 0x00040000 -_0207B9D8: .word 0xFFFBFFFF -_0207B9DC: .word 0x027FFC20 -_0207B9E0: .word 0x00000010 -_0207B9E4: .word 0x027E3F80 -_0207B9E8: .word 0x00000800 - arm_func_end sub_0207B930 - - arm_func_start sub_0207B9EC -sub_0207B9EC: ; 0x0207B9EC - ldr ip, _0207BA00 ; =MemcpyFast - mov r1, r0 - ldr r0, _0207BA04 ; =0x027FFCF4 - mov r2, #6 - bx ip - .align 2, 0 -_0207BA00: .word MemcpyFast -_0207BA04: .word 0x027FFCF4 - arm_func_end sub_0207B9EC - - arm_func_start GetDsFirmwareUserSettings -GetDsFirmwareUserSettings: ; 0x0207BA08 - stmdb sp!, {r4, lr} - ldr ip, _0207BA88 ; =0x027FFC80 - mov r4, r0 - ldrh r2, [ip, #0x64] - add r0, ip, #6 - add r1, r4, #4 - mov r2, r2, lsl #0x1d - mov r2, r2, lsr #0x1d - strb r2, [r4] - ldrb r3, [ip, #2] - mov r2, #0x14 - mov r3, r3, lsl #0x1c - mov r3, r3, lsr #0x1c - strb r3, [r4, #1] - ldrb r3, [ip, #3] - strb r3, [r4, #2] - ldrb r3, [ip, #4] - strb r3, [r4, #3] - ldrb r3, [ip, #0x1a] - strh r3, [r4, #0x1a] - ldrb r3, [ip, #0x50] - strh r3, [r4, #0x52] - bl ArrayCopy16 - ldr r0, _0207BA88 ; =0x027FFC80 - add r1, r4, #0x1c - add r0, r0, #0x1c - mov r2, #0x34 - bl ArrayCopy16 - mov r0, #0 - strh r0, [r4, #0x18] - strh r0, [r4, #0x50] - ldmia sp!, {r4, pc} - .align 2, 0 -_0207BA88: .word 0x027FFC80 - arm_func_end GetDsFirmwareUserSettings - - arm_func_start CountLeadingZeros -CountLeadingZeros: ; 0x0207BA8C - clz r0, r0 - bx lr - arm_func_end CountLeadingZeros - - arm_func_start sub_0207BA94 -sub_0207BA94: ; 0x0207BA94 - ldr r0, _0207BAC0 ; =_022B99D4 - mov r3, #0 - str r3, [r0] - ldr r0, _0207BAC4 ; =_022B99D8 - mov r2, r3 -_0207BAA8: - mov r1, r3, lsl #1 - add r3, r3, #1 - strh r2, [r0, r1] - cmp r3, #9 - blt _0207BAA8 - bx lr - .align 2, 0 -_0207BAC0: .word _022B99D4 -_0207BAC4: .word _022B99D8 - arm_func_end sub_0207BA94 - - arm_func_start sub_0207BAC8 -sub_0207BAC8: ; 0x0207BAC8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r5, r0 - mov sl, r1 - bl EnableIrqFlag - ldr r4, _0207BB44 ; =_022B99D4 - ldr r1, _0207BB48 ; =0x000001FF - ldr r2, [r4] - mov sb, r0 - and r0, r5, r2 - ldr r6, _0207BB4C ; =_022B99D8 - and r8, r0, r1 - mov r7, #1 - mov r5, #0 -_0207BAFC: - mov r0, r8 - bl CountLeadingZeros - rsbs r2, r0, #0x1f - bmi _0207BB38 - mov r1, r2, lsl #1 - ldrh r0, [r6, r1] - mvn r2, r7, lsl r2 - cmp sl, r0 - and r8, r8, r2 - bne _0207BAFC - ldr r0, [r4] - strh r5, [r6, r1] - and r0, r0, r2 - str r0, [r4] - b _0207BAFC -_0207BB38: - mov r0, sb - bl SetIrqFlag - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0207BB44: .word _022B99D4 -_0207BB48: .word 0x000001FF -_0207BB4C: .word _022B99D8 - arm_func_end sub_0207BAC8 - - arm_func_start sub_0207BB50 -sub_0207BB50: ; 0x0207BB50 - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _0207BC10 ; =0x04000006 - mov r5, r0 - ldrh r6, [r1] - ldr r4, _0207BC14 ; =0x027FFC00 - bl GetTimer0Control - orr r0, r0, r6, lsl #16 - str r0, [r5] - ldr r1, _0207BC18 ; =_022B99A8 - ldrh ip, [r4, #0xf8] - ldr r3, [r1] - ldr r2, [r1, #4] - mov r0, r4 - eor r2, r3, ip, lsl #16 - str r2, [r5, #4] - ldr r2, [r1] - ldr r3, [r0, #0x3c] - ldr r2, [r1, #4] - ldr r1, [r4, #0xf4] - ldr ip, _0207BC1C ; =0x04000600 - eor r1, r2, r1 - eor r2, r3, r1 - str r2, [r5, #8] - ldr r1, [ip] - eor r1, r2, r1 - str r1, [r5, #8] - ldr r2, [r0, #0x1e8] - add r1, r0, #0x300 - str r2, [r5, #0xc] - ldr r3, [r0, #0x1ec] - sub r2, ip, #0x4d0 - str r3, [r5, #0x10] - ldr r3, [r0, #0x390] - ldrh r4, [r1, #0x94] - add r0, r0, #0x3a8 - eor r3, r3, r4, lsl #16 - str r3, [r5, #0x14] - ldrh r4, [r1, #0xaa] - ldrh r3, [r1, #0xac] - orr r3, r3, r4, lsl #16 - str r3, [r5, #0x18] - ldrh r2, [r2] - ldrh r0, [r0] - ldrh r1, [r1, #0x98] - orr r0, r2, r0 - orr r0, r0, r1, lsl #16 - str r0, [r5, #0x1c] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0207BC10: .word 0x04000006 -_0207BC14: .word 0x027FFC00 -_0207BC18: .word _022B99A8 -_0207BC1C: .word 0x04000600 - arm_func_end sub_0207BB50 diff --git a/asm/main_0207B87C.s b/asm/main_0207B87C.s new file mode 100644 index 00000000..b7019fa3 --- /dev/null +++ b/asm/main_0207B87C.s @@ -0,0 +1,292 @@ + .include "asm/macros.inc" + .include "main_0207B87C.inc" + + .text + + arm_func_start sub_0207B87C +sub_0207B87C: ; 0x0207B87C + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _0207B8C8 ; =_022B99D0 + ldrh r1, [r0, #2] + cmp r1, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r1, #1 + strh r1, [r0, #2] + bl sub_0207D9A4 + mov r5, #0xc + mov r4, #1 +_0207B8A4: + mov r0, r5 + mov r1, r4 + bl sub_0207DAFC + cmp r0, #0 + beq _0207B8A4 + ldr r1, _0207B8CC ; =sub_0207B8D0 + mov r0, #0xc + bl sub_0207DAB0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0207B8C8: .word _022B99D0 +_0207B8CC: .word sub_0207B8D0 + arm_func_end sub_0207B87C + + arm_func_start sub_0207B8D0 +sub_0207B8D0: ; 0x0207B8D0 + stmdb sp!, {r3, lr} + and r0, r1, #0x7f00 + mov r0, r0, lsl #8 + mov r0, r0, lsr #0x10 + cmp r0, #0x10 + bne _0207B8F8 + ldr r0, _0207B900 ; =_022B99D0 + mov r1, #1 + strh r1, [r0] + ldmia sp!, {r3, pc} +_0207B8F8: + bl WaitForever2 + ldmia sp!, {r3, pc} + .align 2, 0 +_0207B900: .word _022B99D0 + arm_func_end sub_0207B8D0 + + arm_func_start sub_0207B904 +sub_0207B904: ; 0x0207B904 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0, lsl #8 + mov r5, #0xc + mov r4, #0 +_0207B914: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl sub_0207DB20 + cmp r0, #0 + bne _0207B914 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_0207B904 + + arm_func_start sub_0207B930 +sub_0207B930: ; 0x0207B930 + stmdb sp!, {r4, lr} + ldr r1, _0207B9C0 ; =0x027FFC40 + mov r4, r0 + ldrh r0, [r1] + cmp r0, #2 + moveq r0, #1 + movne r0, #0 + cmp r0, #0 + beq _0207B958 + bl WaitForever2 +_0207B958: + bl OS_GetLockID + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02083434 + ldr r0, _0207B9C4 ; =0x00000000 + bl sub_0207C164 + ldr r0, _0207B9C8 ; =0x00000001 + bl sub_0207C164 + ldr r0, _0207B9CC ; =0x00000002 + bl sub_0207C164 + ldr r0, _0207B9D0 ; =0x00000003 + bl sub_0207C164 + ldr r0, _0207B9D4 ; =0x00040000 + bl sub_02078C3C + ldr r0, _0207B9D8 ; =0xFFFBFFFF + bl sub_02078CC8 + ldr r1, _0207B9DC ; =0x027FFC20 + ldr r0, _0207B9E0 ; =0x00000010 + str r4, [r1] + bl sub_0207B904 + ldr r0, _0207B9E4 ; =0x027E3F80 + ldr r1, _0207B9E8 ; =0x00000800 + sub r0, r0, r1 + mov sp, r0 + bl sub_01FF97CC + ldmia sp!, {r4, pc} + .align 2, 0 +_0207B9C0: .word 0x027FFC40 +_0207B9C4: .word 0x00000000 +_0207B9C8: .word 0x00000001 +_0207B9CC: .word 0x00000002 +_0207B9D0: .word 0x00000003 +_0207B9D4: .word 0x00040000 +_0207B9D8: .word 0xFFFBFFFF +_0207B9DC: .word 0x027FFC20 +_0207B9E0: .word 0x00000010 +_0207B9E4: .word 0x027E3F80 +_0207B9E8: .word 0x00000800 + arm_func_end sub_0207B930 + + arm_func_start sub_0207B9EC +sub_0207B9EC: ; 0x0207B9EC + ldr ip, _0207BA00 ; =MemcpyFast + mov r1, r0 + ldr r0, _0207BA04 ; =0x027FFCF4 + mov r2, #6 + bx ip + .align 2, 0 +_0207BA00: .word MemcpyFast +_0207BA04: .word 0x027FFCF4 + arm_func_end sub_0207B9EC + + arm_func_start GetDsFirmwareUserSettings +GetDsFirmwareUserSettings: ; 0x0207BA08 + stmdb sp!, {r4, lr} + ldr ip, _0207BA88 ; =0x027FFC80 + mov r4, r0 + ldrh r2, [ip, #0x64] + add r0, ip, #6 + add r1, r4, #4 + mov r2, r2, lsl #0x1d + mov r2, r2, lsr #0x1d + strb r2, [r4] + ldrb r3, [ip, #2] + mov r2, #0x14 + mov r3, r3, lsl #0x1c + mov r3, r3, lsr #0x1c + strb r3, [r4, #1] + ldrb r3, [ip, #3] + strb r3, [r4, #2] + ldrb r3, [ip, #4] + strb r3, [r4, #3] + ldrb r3, [ip, #0x1a] + strh r3, [r4, #0x1a] + ldrb r3, [ip, #0x50] + strh r3, [r4, #0x52] + bl ArrayCopy16 + ldr r0, _0207BA88 ; =0x027FFC80 + add r1, r4, #0x1c + add r0, r0, #0x1c + mov r2, #0x34 + bl ArrayCopy16 + mov r0, #0 + strh r0, [r4, #0x18] + strh r0, [r4, #0x50] + ldmia sp!, {r4, pc} + .align 2, 0 +_0207BA88: .word 0x027FFC80 + arm_func_end GetDsFirmwareUserSettings + + arm_func_start CountLeadingZeros +CountLeadingZeros: ; 0x0207BA8C + clz r0, r0 + bx lr + arm_func_end CountLeadingZeros + + arm_func_start sub_0207BA94 +sub_0207BA94: ; 0x0207BA94 + ldr r0, _0207BAC0 ; =_022B99D4 + mov r3, #0 + str r3, [r0] + ldr r0, _0207BAC4 ; =_022B99D8 + mov r2, r3 +_0207BAA8: + mov r1, r3, lsl #1 + add r3, r3, #1 + strh r2, [r0, r1] + cmp r3, #9 + blt _0207BAA8 + bx lr + .align 2, 0 +_0207BAC0: .word _022B99D4 +_0207BAC4: .word _022B99D8 + arm_func_end sub_0207BA94 + + arm_func_start sub_0207BAC8 +sub_0207BAC8: ; 0x0207BAC8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r5, r0 + mov sl, r1 + bl EnableIrqFlag + ldr r4, _0207BB44 ; =_022B99D4 + ldr r1, _0207BB48 ; =0x000001FF + ldr r2, [r4] + mov sb, r0 + and r0, r5, r2 + ldr r6, _0207BB4C ; =_022B99D8 + and r8, r0, r1 + mov r7, #1 + mov r5, #0 +_0207BAFC: + mov r0, r8 + bl CountLeadingZeros + rsbs r2, r0, #0x1f + bmi _0207BB38 + mov r1, r2, lsl #1 + ldrh r0, [r6, r1] + mvn r2, r7, lsl r2 + cmp sl, r0 + and r8, r8, r2 + bne _0207BAFC + ldr r0, [r4] + strh r5, [r6, r1] + and r0, r0, r2 + str r0, [r4] + b _0207BAFC +_0207BB38: + mov r0, sb + bl SetIrqFlag + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0207BB44: .word _022B99D4 +_0207BB48: .word 0x000001FF +_0207BB4C: .word _022B99D8 + arm_func_end sub_0207BAC8 + + arm_func_start sub_0207BB50 +sub_0207BB50: ; 0x0207BB50 + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _0207BC10 ; =0x04000006 + mov r5, r0 + ldrh r6, [r1] + ldr r4, _0207BC14 ; =0x027FFC00 + bl GetTimer0Control + orr r0, r0, r6, lsl #16 + str r0, [r5] + ldr r1, _0207BC18 ; =_022B99A8 + ldrh ip, [r4, #0xf8] + ldr r3, [r1] + ldr r2, [r1, #4] + mov r0, r4 + eor r2, r3, ip, lsl #16 + str r2, [r5, #4] + ldr r2, [r1] + ldr r3, [r0, #0x3c] + ldr r2, [r1, #4] + ldr r1, [r4, #0xf4] + ldr ip, _0207BC1C ; =0x04000600 + eor r1, r2, r1 + eor r2, r3, r1 + str r2, [r5, #8] + ldr r1, [ip] + eor r1, r2, r1 + str r1, [r5, #8] + ldr r2, [r0, #0x1e8] + add r1, r0, #0x300 + str r2, [r5, #0xc] + ldr r3, [r0, #0x1ec] + sub r2, ip, #0x4d0 + str r3, [r5, #0x10] + ldr r3, [r0, #0x390] + ldrh r4, [r1, #0x94] + add r0, r0, #0x3a8 + eor r3, r3, r4, lsl #16 + str r3, [r5, #0x14] + ldrh r4, [r1, #0xaa] + ldrh r3, [r1, #0xac] + orr r3, r3, r4, lsl #16 + str r3, [r5, #0x18] + ldrh r2, [r2] + ldrh r0, [r0] + ldrh r1, [r1, #0x98] + orr r0, r2, r0 + orr r0, r0, r1, lsl #16 + str r0, [r5, #0x1c] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0207BC10: .word 0x04000006 +_0207BC14: .word 0x027FFC00 +_0207BC18: .word _022B99A8 +_0207BC1C: .word 0x04000600 + arm_func_end sub_0207BB50 diff --git a/asm/overlay_10_rodata_022C490C.s b/asm/overlay_10_rodata_022C490C.s index 4b835625..b9bc503b 100644 --- a/asm/overlay_10_rodata_022C490C.s +++ b/asm/overlay_10_rodata_022C490C.s @@ -1043,8 +1043,6 @@ ov10_022C6C74: .global ov10_022C6C75 ov10_022C6C75: .byte 0x01 - .global ov10_022C6C76 -ov10_022C6C76: .byte 0x01 .global ov10_022C6C77 ov10_022C6C77: diff --git a/asm/overlay_29_022E37DC.s b/asm/overlay_29_022E37DC.s index 067c1752..6eecc30b 100644 --- a/asm/overlay_29_022E37DC.s +++ b/asm/overlay_29_022E37DC.s @@ -3516,8 +3516,8 @@ ov29_022E6260: ; 0x022E6260 ldmia sp!, {r4, pc} arm_func_end ov29_022E6260 - arm_func_start ov29_022E62A8 -ov29_022E62A8: ; 0x022E62A8 + arm_func_start PlayEffectAnimation0x29 +PlayEffectAnimation0x29: ; 0x022E62A8 stmdb sp!, {r4, lr} sub sp, sp, #0x10 mov r4, r0 @@ -3536,7 +3536,7 @@ ov29_022E62A8: ; 0x022E62A8 bl PlayEffectAnimationEntity add sp, sp, #0x10 ldmia sp!, {r4, pc} - arm_func_end ov29_022E62A8 + arm_func_end PlayEffectAnimation0x29 arm_func_start ov29_022E62F0 ov29_022E62F0: ; 0x022E62F0 diff --git a/asm/overlay_29_022F05B4.s b/asm/overlay_29_022F05B4.s index 1dbae5c9..1f7684f4 100644 --- a/asm/overlay_29_022F05B4.s +++ b/asm/overlay_29_022F05B4.s @@ -814,7 +814,7 @@ _022F0F58: _022F0FAC: bl GetLeader mov r1, #1 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 bne _022F1000 mov r0, #0xa @@ -1545,7 +1545,7 @@ _022F19DC: _022F1A64: mov r0, r6 mov r1, #1 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 beq _022F1AA0 ldr r1, _022F1DF4 ; =0x00000B9A @@ -2648,7 +2648,7 @@ _022F2A00: beq _022F2A70 bl GetLeader mov r1, #1 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 bne _022F2A70 mov r0, #4 diff --git a/asm/overlay_29_022F52B0.s b/asm/overlay_29_022F52B0.s index d8c53fb8..c5c5d1fe 100644 --- a/asm/overlay_29_022F52B0.s +++ b/asm/overlay_29_022F52B0.s @@ -242,7 +242,7 @@ _022F5578: _022F55B8: mov r0, sb mov r1, #1 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 beq _022F55E8 ldr r1, _022F5984 ; =0x00000BBE diff --git a/asm/overlay_29_02300D00.s b/asm/overlay_29_02300D00.s index 6fe5688b..5738d079 100644 --- a/asm/overlay_29_02300D00.s +++ b/asm/overlay_29_02300D00.s @@ -66,51 +66,3 @@ ov29_02300DC0: ; 0x02300DC0 .align 2, 0 _02300DC8: .word ov29_02300D50 arm_func_end ov29_02300DC0 - - arm_func_start MonsterCannotAttack -MonsterCannotAttack: ; 0x02300DCC - stmdb sp!, {r3, lr} - cmp r1, #0 - ldr r2, [r0, #0xb4] - bne _02300DF4 - ldrb r1, [r2, #0xbd] - cmp r1, #2 - cmpne r1, #4 - cmpne r1, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} -_02300DF4: - ldrb r1, [r2, #0xc4] - cmp r1, #1 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r1, #3 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r1, #4 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r1, #6 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - ldrb r1, [r2, #0xd0] - cmp r1, #1 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r1, #3 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r1, #7 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - ldrb r1, [r2, #0xbf] - cmp r1, #4 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - bl ShouldMonsterRunAway - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end MonsterCannotAttack diff --git a/asm/overlay_29_02300FCC.s b/asm/overlay_29_02300FCC.s index b4d28557..64d95eba 100644 --- a/asm/overlay_29_02300FCC.s +++ b/asm/overlay_29_02300FCC.s @@ -133,481 +133,3 @@ _0230110C: .word DIRECTIONS_XY _02301110: .word DIRECTIONS_XY + 2 _02301114: .word ov29_02352788 arm_func_end ov29_0230105C - - arm_func_start IsMonsterCornered -IsMonsterCornered: ; 0x02301118 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, #0 - b _02301148 -_02301128: - mov r0, r5 - mov r1, r4 - bl ov29_02301158 - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} - add r0, r4, #1 - and r4, r0, #0xff -_02301148: - cmp r4, #8 - blo _02301128 - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end IsMonsterCornered - - arm_func_start ov29_02301158 -ov29_02301158: ; 0x02301158 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldr r2, [r6, #0xb4] - mov r5, r1 - ldrsh r1, [r2, #2] - bl GetMobilityTypeCheckSlipAndFloating - ldr r2, _02301228 ; =DIRECTIONS_XY - mov ip, r5, lsl #2 - ldr r1, _0230122C ; =DIRECTIONS_XY + 2 - ldrsh r3, [r2, ip] - ldrsh lr, [r6, #4] - mov r4, r0 - ldrsh r2, [r6, #6] - ldrsh r1, [r1, ip] - add r0, lr, r3 - add r1, r2, r1 - bl GetTile - ldrh r1, [r0] - tst r1, #0x10 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - ldr r1, [r0, #0xc] - cmp r1, #0 - beq _023011E0 - ldr r0, [r1] - cmp r0, #1 - bne _023011E0 - mov r0, r6 - mov r2, #1 - mov r3, #0 - bl GetTreatmentBetweenMonsters - cmp r0, #1 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} -_023011E0: -#ifdef JAPAN - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _02302654 - ldr r0, [r6, #0xb4] - ldrb r0, [r0, #0xef] - cmp r0, #3 - moveq r4, #3 - beq _02302654 - mov r0, r6 - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r4, #3 - bne _02302654 - mov r0, r6 - mov r1, #0xc - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #2 - bne _02302654 - mov r0, r6 - mov r1, #0xd - bl IqSkillIsEnabled - cmp r0, #0 - beq _02302654 - tst r5, #1 - movne r4, #2 - moveq r4, #3 -_02302654: -#else - mov r0, r6 - mov r1, r4 - and r2, r5, #0xff - bl GetDirectionalMobilityType - mov r4, r0 -#endif - ldrsh r0, [r6, #4] - ldrsh r1, [r6, #6] - bl GetTile - add r0, r0, r4 - ldr r1, _02301230 ; =ov29_02352780 - and r2, r5, #7 - ldrb r1, [r1, r2] - ldrb r0, [r0, #8] - tst r1, r0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02301228: .word DIRECTIONS_XY -_0230122C: .word DIRECTIONS_XY + 2 -_02301230: .word ov29_02352780 - arm_func_end ov29_02301158 - - arm_func_start CanAttackInDirection -CanAttackInDirection: ; 0x02301234 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldr r2, [r6, #0xb4] - mov r5, r1 - ldrsh r1, [r2, #2] - bl GetMobilityTypeCheckSlipAndFloating - mov r4, r0 - ldr r1, _023012EC ; =DIRECTIONS_XY - mov ip, r5, lsl #2 - cmp r4, #1 - ldr r0, _023012F0 ; =DIRECTIONS_XY + 2 - ldrsh r3, [r1, ip] - ldrsh lr, [r6, #4] - ldrsh r1, [r0, ip] - ldrsh r2, [r6, #6] - add r0, lr, r3 - movls r4, #2 - add r1, r2, r1 - bl GetTile - ldrh r1, [r0] - tst r1, #0x10 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - ldr r0, [r0, #0xc] - cmp r0, #0 - ldrne r0, [r0] - cmpne r0, #1 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} -#ifdef JAPAN - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _02302778 - ldr r0, [r6, #0xb4] - ldrb r0, [r0, #0xef] - cmp r0, #3 - moveq r4, #3 - beq _02302778 - mov r0, r6 - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r4, #3 - bne _02302778 - mov r0, r6 - mov r1, #0xc - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #2 - bne _02302778 - mov r0, r6 - mov r1, #0xd - bl IqSkillIsEnabled - cmp r0, #0 - beq _02302778 - tst r5, #1 - movne r4, #2 - moveq r4, #3 -_02302778: -#else - mov r0, r6 - mov r1, r4 - and r2, r5, #0xff - bl GetDirectionalMobilityType - mov r4, r0 -#endif - ldrsh r0, [r6, #4] - ldrsh r1, [r6, #6] - bl GetTile - add r0, r0, r4 - ldr r1, _023012F4 ; =ov29_02352778 - and r2, r5, #7 - ldrb r1, [r1, r2] - ldrb r0, [r0, #8] - tst r1, r0 -#ifdef JAPAN - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -#else - moveq r0, #0 - movne r0, #1 -#endif - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023012EC: .word DIRECTIONS_XY -_023012F0: .word DIRECTIONS_XY + 2 -_023012F4: .word ov29_02352778 - arm_func_end CanAttackInDirection - - arm_func_start CanAiMonsterMoveInDirection -CanAiMonsterMoveInDirection: ; 0x023012F8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - ldr r3, [r8, #0xb4] - mov r7, r1 - ldrsh r1, [r3, #2] - mov r6, r2 - bl GetMobilityTypeCheckSlipAndFloating - mov r1, #0 - strb r1, [r6] - ldr r2, _02301484 ; =DIRECTIONS_XY - mov r4, r7, lsl #2 - ldr r1, _02301488 ; =DIRECTIONS_XY + 2 - ldrsh r3, [r2, r4] - ldrsh ip, [r8, #4] - mov r5, r0 - ldrsh r2, [r8, #6] - ldrsh r1, [r1, r4] - add r0, ip, r3 - add r1, r2, r1 - bl GetTile - mov r4, r0 - ldrh r0, [r4] - tst r0, #0x10 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - tst r0, #0x40 - beq _02301390 - ldr r0, _0230148C ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x793] - cmp r0, #0 - bne _02301390 - mov r0, r8 - mov r1, #0xf - bl IqSkillIsEnabled - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} -_02301390: - ldr r0, [r4, #0x10] - cmp r0, #0 - beq _023013E4 - mov r0, r8 - mov r1, #0xe - bl IqSkillIsEnabled - cmp r0, #0 - beq _023013E4 - ldr r1, [r4, #0x10] - ldr r0, [r1] - cmp r0, #2 - bne _023013E4 - ldrb r0, [r1, #0x20] - cmp r0, #0 - bne _023013DC - ldr r0, [r8, #0xb4] - ldrb r0, [r0, #0xf1] - cmp r0, #3 - bne _023013E4 -_023013DC: - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_023013E4: - ldrh r0, [r4] - and r0, r0, #3 - cmp r0, #2 - bne _0230142C - ldr r0, _0230148C ; =DUNGEON_PTR - ldr r1, _02301490 ; =SECONDARY_TERRAIN_TYPES - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - ldrb r0, [r1, r0] - cmp r0, #1 - bne _0230142C - mov r0, r8 - mov r1, #0x14 - bl IqSkillIsEnabled - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} -_0230142C: -#ifdef JAPAN - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _0230295C - ldr r0, [r8, #0xb4] - ldrb r0, [r0, #0xef] - cmp r0, #3 - moveq r5, #3 - beq _0230295C - mov r0, r8 - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r5, #3 - bne _0230295C - mov r0, r8 - mov r1, #0xc - bl IqSkillIsEnabled - cmp r0, #0 - movne r5, #2 - bne _0230295C - mov r0, r8 - mov r1, #0xd - bl IqSkillIsEnabled - cmp r0, #0 - beq _0230295C - tst r7, #1 - movne r5, #2 - moveq r5, #3 -_0230295C: -#else - mov r0, r8 - mov r1, r5 - and r2, r7, #0xff - bl GetDirectionalMobilityType - mov r5, r0 -#endif - ldrsh r0, [r8, #4] - ldrsh r1, [r8, #6] - bl GetTile - add r0, r0, r5 - ldr r1, _02301494 ; =ov29_02352770 - and r2, r7, #7 - ldrb r1, [r1, r2] - ldrb r0, [r0, #8] - tst r1, r0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r0, [r4, #0xc] - cmp r0, #0 - mov r0, #1 - strneb r0, [r6] - movne r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02301484: .word DIRECTIONS_XY -_02301488: .word DIRECTIONS_XY + 2 -_0230148C: .word DUNGEON_PTR -_02301490: .word SECONDARY_TERRAIN_TYPES -_02301494: .word ov29_02352770 - arm_func_end CanAiMonsterMoveInDirection - - arm_func_start ov29_02301498 -ov29_02301498: ; 0x02301498 -#ifdef JAPAN -#define OV29_02301498_OFFSET -4 -#else -#define OV29_02301498_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r1, [r5, #0xb4] - ldrsh r1, [r1, #2] - bl GetMobilityTypeCheckSlipAndFloating -#ifdef JAPAN - mov r4, r0 - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _02302A30_JP - ldr r0, [r5, #0xb4] - ldrb r0, [r0, #0xef] - cmp r0, #3 - moveq r4, #3 - beq _02302A30_JP - mov r0, r5 - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r4, #3 - bne _02302A30_JP - mov r0, r5 - mov r1, #0xc - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #2 - bne _02302A30_JP - mov r0, r5 - mov r1, #0xd - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #3 -_02302A30_JP: -#else - mov r1, r0 - mov r0, r5 - mov r2, #0xff - bl GetDirectionalMobilityType - mov r4, r0 -#endif - cmp r4, #3 - bne _023014FC - ldr r4, [r5, #0xb4] - mov r0, #0x64 - bl DungeonRandInt - add r1, r4, #0x200 - ldrsh r2, [r1, #0x12 + OV29_02301498_OFFSET] - add r0, r2, r0 - strh r0, [r1, #0x12 + OV29_02301498_OFFSET] - ldrsh r0, [r1, #0x12 + OV29_02301498_OFFSET] - cmp r0, #0xc8 - mov r0, #0 - strgeh r0, [r1, #0x12 + OV29_02301498_OFFSET] - movge r0, #1 - ldmia sp!, {r3, r4, r5, pc} -_023014FC: - ldr r0, _0230158C ; =DUNGEON_PTR - ldr r1, _02301590 ; =SECONDARY_TERRAIN_TYPES - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - ldrb r0, [r1, r0] - cmp r0, #1 - cmpeq r4, #1 - bne _02301534 - mov r0, r5 - mov r1, #0x14 - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #0 -_02301534: - ldrsh r0, [r5, #4] - ldrsh r1, [r5, #6] - bl GetTile - add r0, r0, r4 - ldrb r0, [r0, #8] - cmp r0, #0x54 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #0x51 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #0x45 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #0x15 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #0x55 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0230158C: .word DUNGEON_PTR -_02301590: .word SECONDARY_TERRAIN_TYPES - arm_func_end ov29_02301498 - - arm_func_start ov29_02301594 -ov29_02301594: ; 0x02301594 - stmdb sp!, {r4, lr} - mov r4, r1 - mov r1, #3 - bl IsTacticSet - cmp r0, #0 - cmpne r4, #0 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r4, pc} - arm_func_end ov29_02301594 diff --git a/asm/overlay_29_02301158.s b/asm/overlay_29_02301158.s new file mode 100644 index 00000000..ad9abea9 --- /dev/null +++ b/asm/overlay_29_02301158.s @@ -0,0 +1,460 @@ + .include "asm/macros.inc" + .include "overlay_29_02301158.inc" + + .text + + arm_func_start ov29_02301158 +ov29_02301158: ; 0x02301158 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r2, [r6, #0xb4] + mov r5, r1 + ldrsh r1, [r2, #2] + bl GetMobilityTypeCheckSlipAndFloating + ldr r2, _02301228 ; =DIRECTIONS_XY + mov ip, r5, lsl #2 + ldr r1, _0230122C ; =DIRECTIONS_XY + 2 + ldrsh r3, [r2, ip] + ldrsh lr, [r6, #4] + mov r4, r0 + ldrsh r2, [r6, #6] + ldrsh r1, [r1, ip] + add r0, lr, r3 + add r1, r2, r1 + bl GetTile + ldrh r1, [r0] + tst r1, #0x10 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, [r0, #0xc] + cmp r1, #0 + beq _023011E0 + ldr r0, [r1] + cmp r0, #1 + bne _023011E0 + mov r0, r6 + mov r2, #1 + mov r3, #0 + bl GetTreatmentBetweenMonsters + cmp r0, #1 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} +_023011E0: +#ifdef JAPAN + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _02302654 + ldr r0, [r6, #0xb4] + ldrb r0, [r0, #0xef] + cmp r0, #3 + moveq r4, #3 + beq _02302654 + mov r0, r6 + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r4, #3 + bne _02302654 + mov r0, r6 + mov r1, #0xc + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #2 + bne _02302654 + mov r0, r6 + mov r1, #0xd + bl IqSkillIsEnabled + cmp r0, #0 + beq _02302654 + tst r5, #1 + movne r4, #2 + moveq r4, #3 +_02302654: +#else + mov r0, r6 + mov r1, r4 + and r2, r5, #0xff + bl GetDirectionalMobilityType + mov r4, r0 +#endif + ldrsh r0, [r6, #4] + ldrsh r1, [r6, #6] + bl GetTile + add r0, r0, r4 + ldr r1, _02301230 ; =ov29_02352780 + and r2, r5, #7 + ldrb r1, [r1, r2] + ldrb r0, [r0, #8] + tst r1, r0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02301228: .word DIRECTIONS_XY +_0230122C: .word DIRECTIONS_XY + 2 +_02301230: .word ov29_02352780 + arm_func_end ov29_02301158 + + arm_func_start CanAttackInDirection +CanAttackInDirection: ; 0x02301234 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r2, [r6, #0xb4] + mov r5, r1 + ldrsh r1, [r2, #2] + bl GetMobilityTypeCheckSlipAndFloating + mov r4, r0 + ldr r1, _023012EC ; =DIRECTIONS_XY + mov ip, r5, lsl #2 + cmp r4, #1 + ldr r0, _023012F0 ; =DIRECTIONS_XY + 2 + ldrsh r3, [r1, ip] + ldrsh lr, [r6, #4] + ldrsh r1, [r0, ip] + ldrsh r2, [r6, #6] + add r0, lr, r3 + movls r4, #2 + add r1, r2, r1 + bl GetTile + ldrh r1, [r0] + tst r1, #0x10 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + ldr r0, [r0, #0xc] + cmp r0, #0 + ldrne r0, [r0] + cmpne r0, #1 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} +#ifdef JAPAN + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _02302778 + ldr r0, [r6, #0xb4] + ldrb r0, [r0, #0xef] + cmp r0, #3 + moveq r4, #3 + beq _02302778 + mov r0, r6 + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r4, #3 + bne _02302778 + mov r0, r6 + mov r1, #0xc + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #2 + bne _02302778 + mov r0, r6 + mov r1, #0xd + bl IqSkillIsEnabled + cmp r0, #0 + beq _02302778 + tst r5, #1 + movne r4, #2 + moveq r4, #3 +_02302778: +#else + mov r0, r6 + mov r1, r4 + and r2, r5, #0xff + bl GetDirectionalMobilityType + mov r4, r0 +#endif + ldrsh r0, [r6, #4] + ldrsh r1, [r6, #6] + bl GetTile + add r0, r0, r4 + ldr r1, _023012F4 ; =ov29_02352778 + and r2, r5, #7 + ldrb r1, [r1, r2] + ldrb r0, [r0, #8] + tst r1, r0 +#ifdef JAPAN + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +#else + moveq r0, #0 + movne r0, #1 +#endif + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023012EC: .word DIRECTIONS_XY +_023012F0: .word DIRECTIONS_XY + 2 +_023012F4: .word ov29_02352778 + arm_func_end CanAttackInDirection + + arm_func_start CanAiMonsterMoveInDirection +CanAiMonsterMoveInDirection: ; 0x023012F8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + ldr r3, [r8, #0xb4] + mov r7, r1 + ldrsh r1, [r3, #2] + mov r6, r2 + bl GetMobilityTypeCheckSlipAndFloating + mov r1, #0 + strb r1, [r6] + ldr r2, _02301484 ; =DIRECTIONS_XY + mov r4, r7, lsl #2 + ldr r1, _02301488 ; =DIRECTIONS_XY + 2 + ldrsh r3, [r2, r4] + ldrsh ip, [r8, #4] + mov r5, r0 + ldrsh r2, [r8, #6] + ldrsh r1, [r1, r4] + add r0, ip, r3 + add r1, r2, r1 + bl GetTile + mov r4, r0 + ldrh r0, [r4] + tst r0, #0x10 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + tst r0, #0x40 + beq _02301390 + ldr r0, _0230148C ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x793] + cmp r0, #0 + bne _02301390 + mov r0, r8 + mov r1, #0xf + bl IqSkillIsEnabled + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_02301390: + ldr r0, [r4, #0x10] + cmp r0, #0 + beq _023013E4 + mov r0, r8 + mov r1, #0xe + bl IqSkillIsEnabled + cmp r0, #0 + beq _023013E4 + ldr r1, [r4, #0x10] + ldr r0, [r1] + cmp r0, #2 + bne _023013E4 + ldrb r0, [r1, #0x20] + cmp r0, #0 + bne _023013DC + ldr r0, [r8, #0xb4] + ldrb r0, [r0, #0xf1] + cmp r0, #3 + bne _023013E4 +_023013DC: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_023013E4: + ldrh r0, [r4] + and r0, r0, #3 + cmp r0, #2 + bne _0230142C + ldr r0, _0230148C ; =DUNGEON_PTR + ldr r1, _02301490 ; =SECONDARY_TERRAIN_TYPES + ldr r0, [r0] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + ldrb r0, [r1, r0] + cmp r0, #1 + bne _0230142C + mov r0, r8 + mov r1, #0x14 + bl IqSkillIsEnabled + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_0230142C: +#ifdef JAPAN + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _0230295C + ldr r0, [r8, #0xb4] + ldrb r0, [r0, #0xef] + cmp r0, #3 + moveq r5, #3 + beq _0230295C + mov r0, r8 + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r5, #3 + bne _0230295C + mov r0, r8 + mov r1, #0xc + bl IqSkillIsEnabled + cmp r0, #0 + movne r5, #2 + bne _0230295C + mov r0, r8 + mov r1, #0xd + bl IqSkillIsEnabled + cmp r0, #0 + beq _0230295C + tst r7, #1 + movne r5, #2 + moveq r5, #3 +_0230295C: +#else + mov r0, r8 + mov r1, r5 + and r2, r7, #0xff + bl GetDirectionalMobilityType + mov r5, r0 +#endif + ldrsh r0, [r8, #4] + ldrsh r1, [r8, #6] + bl GetTile + add r0, r0, r5 + ldr r1, _02301494 ; =ov29_02352770 + and r2, r7, #7 + ldrb r1, [r1, r2] + ldrb r0, [r0, #8] + tst r1, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [r4, #0xc] + cmp r0, #0 + mov r0, #1 + strneb r0, [r6] + movne r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02301484: .word DIRECTIONS_XY +_02301488: .word DIRECTIONS_XY + 2 +_0230148C: .word DUNGEON_PTR +_02301490: .word SECONDARY_TERRAIN_TYPES +_02301494: .word ov29_02352770 + arm_func_end CanAiMonsterMoveInDirection + + arm_func_start ov29_02301498 +ov29_02301498: ; 0x02301498 +#ifdef JAPAN +#define OV29_02301498_OFFSET -4 +#else +#define OV29_02301498_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r1, [r5, #0xb4] + ldrsh r1, [r1, #2] + bl GetMobilityTypeCheckSlipAndFloating +#ifdef JAPAN + mov r4, r0 + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _02302A30_JP + ldr r0, [r5, #0xb4] + ldrb r0, [r0, #0xef] + cmp r0, #3 + moveq r4, #3 + beq _02302A30_JP + mov r0, r5 + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r4, #3 + bne _02302A30_JP + mov r0, r5 + mov r1, #0xc + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #2 + bne _02302A30_JP + mov r0, r5 + mov r1, #0xd + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #3 +_02302A30_JP: +#else + mov r1, r0 + mov r0, r5 + mov r2, #0xff + bl GetDirectionalMobilityType + mov r4, r0 +#endif + cmp r4, #3 + bne _023014FC + ldr r4, [r5, #0xb4] + mov r0, #0x64 + bl DungeonRandInt + add r1, r4, #0x200 + ldrsh r2, [r1, #0x12 + OV29_02301498_OFFSET] + add r0, r2, r0 + strh r0, [r1, #0x12 + OV29_02301498_OFFSET] + ldrsh r0, [r1, #0x12 + OV29_02301498_OFFSET] + cmp r0, #0xc8 + mov r0, #0 + strgeh r0, [r1, #0x12 + OV29_02301498_OFFSET] + movge r0, #1 + ldmia sp!, {r3, r4, r5, pc} +_023014FC: + ldr r0, _0230158C ; =DUNGEON_PTR + ldr r1, _02301590 ; =SECONDARY_TERRAIN_TYPES + ldr r0, [r0] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + ldrb r0, [r1, r0] + cmp r0, #1 + cmpeq r4, #1 + bne _02301534 + mov r0, r5 + mov r1, #0x14 + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #0 +_02301534: + ldrsh r0, [r5, #4] + ldrsh r1, [r5, #6] + bl GetTile + add r0, r0, r4 + ldrb r0, [r0, #8] + cmp r0, #0x54 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, pc} + cmp r0, #0x51 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, pc} + cmp r0, #0x45 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, pc} + cmp r0, #0x15 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, pc} + cmp r0, #0x55 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0230158C: .word DUNGEON_PTR +_02301590: .word SECONDARY_TERRAIN_TYPES + arm_func_end ov29_02301498 + + arm_func_start ov29_02301594 +ov29_02301594: ; 0x02301594 + stmdb sp!, {r4, lr} + mov r4, r1 + mov r1, #3 + bl IsTacticSet + cmp r0, #0 + cmpne r4, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, pc} + arm_func_end ov29_02301594 diff --git a/asm/overlay_29_023016A8.s b/asm/overlay_29_023016D8.s similarity index 57% rename from asm/overlay_29_023016A8.s rename to asm/overlay_29_023016D8.s index 77a3fccb..3fe2e0be 100644 --- a/asm/overlay_29_023016A8.s +++ b/asm/overlay_29_023016D8.s @@ -1,26 +1,10 @@ .include "asm/macros.inc" - .include "overlay_29_023016A8.inc" + .include "overlay_29_023016D8.inc" .text - arm_func_start ShouldMonsterRunAwayVariation -ShouldMonsterRunAwayVariation: ; 0x023016A8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl ShouldMonsterRunAway - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl ov29_023016D8 - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ShouldMonsterRunAwayVariation - - arm_func_start ov29_023016D8 -ov29_023016D8: ; 0x023016D8 + arm_func_start DisplayRunAwayIfTriggered +DisplayRunAwayIfTriggered: ; 0x023016D8 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 ldr r4, [r6, #0xb4] @@ -51,8 +35,8 @@ ov29_023016D8: ; 0x023016D8 cmpne r0, #0 ldmeqia sp!, {r4, r5, r6, pc} mov r0, r6 - bl ov29_022E62A8 + bl PlayEffectAnimation0x29 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _02301758: .word 0x000003E7 - arm_func_end ov29_023016D8 + arm_func_end DisplayRunAwayIfTriggered diff --git a/asm/overlay_29_0230F02C.s b/asm/overlay_29_0230F02C.s index 13cfe0d1..bd64ab7d 100644 --- a/asm/overlay_29_0230F02C.s +++ b/asm/overlay_29_0230F02C.s @@ -86,7 +86,7 @@ _0230F22C: beq _0230F624 mov r0, r8 mov r1, #1 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 beq _0230F274 mov r1, r4 diff --git a/asm/overlay_29_02340CE4.s b/asm/overlay_29_02340CE4.s index deefa851..32c3b568 100644 --- a/asm/overlay_29_02340CE4.s +++ b/asm/overlay_29_02340CE4.s @@ -3892,747 +3892,3 @@ AreLateGameTrapsEnabled: ; 0x02344148 .align 2, 0 _0234415C: .word ov10_022C6C75 arm_func_end AreLateGameTrapsEnabled - - arm_func_start AreMovesEnabled -AreMovesEnabled: ; 0x02344160 - mov r1, #0xc - mul r1, r0, r1 - ldr r0, _02344174 ; =ov10_022C6C76 - ldrb r0, [r0, r1] - bx lr - .align 2, 0 -_02344174: .word ov10_022C6C76 - arm_func_end AreMovesEnabled - - arm_func_start IsRoomIlluminated -IsRoomIlluminated: ; 0x02344178 - mov r1, #0xc - mul r1, r0, r1 - ldr r0, _0234418C ; =ov10_022C6C74 - ldrb r0, [r0, r1] - bx lr - .align 2, 0 -_0234418C: .word ov10_022C6C74 - arm_func_end IsRoomIlluminated - - arm_func_start GetMatchingMonsterId -GetMatchingMonsterId: ; 0x02344190 - stmdb sp!, {r4, lr} - cmp r0, #0 - ldrne r2, _023442A4 ; =0x00000483 - mov r4, #0 - cmpne r0, r2 - beq _0234429C - add r1, r2, #1 - cmp r0, r1 - bne _023441C0 - bl GetMissionTargetEnemy - mov r4, r0 - b _0234429C -_023441C0: - add r1, r2, #2 - cmp r0, r1 - bne _023441DC - mov r0, r4 - bl GetMissionEnemyMinionGroup - mov r4, r0 - b _0234429C -_023441DC: - add r1, r2, #3 - cmp r0, r1 - bne _023441F4 - bl GetMissionTargetEnemy - mov r4, r0 - b _0234429C -_023441F4: - add r1, r2, #4 - cmp r0, r1 - bne _02344210 - mov r0, r4 - bl GetMissionEnemyMinionGroup - mov r4, r0 - b _0234429C -_02344210: - add r1, r2, #5 - cmp r0, r1 - bne _0234422C - mov r0, #1 - bl GetMissionEnemyMinionGroup - mov r4, r0 - b _0234429C -_0234422C: - sub r1, r2, #0x274 - cmp r0, r1 - bne _02344254 - mov r0, r4 - mov r1, #0x5d - bl LoadScriptVariableValue - tst r0, #0xff - ldrne r4, _023442A8 ; =0x00000467 - ldreq r4, _023442AC ; =0x0000020F - b _0234429C -_02344254: - rsb r1, r2, #0x690 - cmp r0, r1 - bne _02344298 - ldr r0, _023442B0 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x700 - ldrsb r1, [r0, #0x98] - cmp r1, #0 - bne _02344288 - ldrsh r0, [r0, #0x4c] - bl GetDungeonMode - cmp r0, #1 - moveq r4, #1 -_02344288: - cmp r4, #0 - movne r4, #0x228 - ldreq r4, _023442B4 ; =0x0000020D - b _0234429C -_02344298: - mov r4, r0 -_0234429C: - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_023442A4: .word 0x00000483 -_023442A8: .word 0x00000467 -_023442AC: .word 0x0000020F -_023442B0: .word DUNGEON_PTR -_023442B4: .word 0x0000020D - arm_func_end GetMatchingMonsterId - - arm_func_start ov29_023442B8 -ov29_023442B8: ; 0x023442B8 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - mov r2, r4 - mov r0, #0 - b _023442DC -_023442CC: - add r0, r0, #1 - mov r0, r0, lsl #0x10 - add r2, r2, #2 - mov r0, r0, asr #0x10 -_023442DC: - ldrsh r1, [r2] - cmp r1, #0 - bne _023442CC - bl DungeonRandInt - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - mov r0, r5, lsl #1 - ldrsh r0, [r4, r0] - cmp r0, #0 - moveq r0, #0x49 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r1, _023443B0 ; =0x00000579 - cmp r0, r1 - ldmltia sp!, {r3, r4, r5, pc} - add r1, r1, #3 - cmp r0, r1 - ldmgtia sp!, {r3, r4, r5, pc} - bl sub_02056880 - bl GetActiveTeamMember - mov r1, r5, lsl #1 - ldrsh r3, [r4, r1] - ldr r2, _023443B0 ; =0x00000579 - mov r4, r0 - cmp r3, r2 - mov r1, #0 - bne _02344354 - ldrsh r0, [r4, #0xc] - bl GetExclusiveItem - mov r1, r0 - b _02344390 -_02344354: - add r0, r2, #1 - cmp r3, r0 - bne _02344374 - ldrsh r0, [r4, #0xc] - mov r1, #1 - bl GetExclusiveItem - mov r1, r0 - b _02344390 -_02344374: - add r0, r2, #2 - cmp r3, r0 - bne _02344390 - ldrsh r0, [r4, #0xc] - mov r1, #2 - bl GetExclusiveItem - mov r1, r0 -_02344390: - cmp r1, #0 - bne _023443A8 - ldrsh r0, [r4, #0xc] - mov r1, #3 - bl GetExclusiveItem - mov r1, r0 -_023443A8: - mov r0, r1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023443B0: .word 0x00000579 - arm_func_end ov29_023442B8 - - arm_func_start GenerateItemExplicit -GenerateItemExplicit: ; 0x023443B4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r5, r2 - mov r4, r3 - bl GetItemCategoryVeneer - cmp r0, #6 - bne _02344400 - cmp r5, #0 - mov r0, r7 - mov r1, r6 - ble _023443F8 - mov r2, #0 - bl InitStandardItem - strh r5, [r7, #2] - b _02344420 -_023443F8: - bl GenerateCleanItem - b _02344420 -_02344400: - mov r0, r7 - mov r1, r6 - mov r2, #0 - bl InitStandardItem - cmp r5, #0 - strgth r5, [r7, #2] - movle r0, #0 - strleh r0, [r7, #2] -_02344420: - ldrb r0, [r7] - orr r0, r0, r4 - strb r0, [r7] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end GenerateItemExplicit - - arm_func_start GenerateAndSpawnItem -GenerateAndSpawnItem: ; 0x02344430 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - ldrb ip, [sp, #0x1c] - mov r5, r0 - mov r4, r3 - strh r1, [sp] - strh r2, [sp, #2] - cmp ip, #0 - beq _0234448C - bl IsItemInBag - cmp r0, #0 - add r0, sp, #4 - beq _02344478 - ldr r3, [sp, #0x18] - mov r2, r4 - mov r1, #0x49 - bl GenerateItemExplicit - b _023444A0 -_02344478: - ldr r3, [sp, #0x18] - mov r1, r5 - mov r2, r4 - bl GenerateItemExplicit - b _023444A0 -_0234448C: - ldr r3, [sp, #0x18] - add r0, sp, #4 - mov r1, r5 - mov r2, r4 - bl GenerateItemExplicit -_023444A0: - add r0, sp, #0 - add r1, sp, #4 - mov r2, #1 - bl SpawnItem - ldr r0, _023444D0 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x3f00 -#ifdef JAPAN - ldrsh r1, [r0, #0x1e] - add r1, r1, #1 - strh r1, [r0, #0x1e] -#else - ldrsh r1, [r0, #0xc2] - add r1, r1, #1 - strh r1, [r0, #0xc2] -#endif - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_023444D0: .word DUNGEON_PTR - arm_func_end GenerateAndSpawnItem - - arm_func_start ov29_023444D4 -ov29_023444D4: ; 0x023444D4 - stmdb sp!, {r3, lr} - ldr r0, _02344508 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x7e - add r0, r0, #0x700 - bl MemZero - bl IsSecretBazaar - cmp r0, #0 - ldmeqia sp!, {r3, pc} - mov r0, #0 - bl ov29_022F07D8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02344508: .word DUNGEON_PTR - arm_func_end ov29_023444D4 - - arm_func_start IsHiddenStairsFloor -IsHiddenStairsFloor: ; 0x0234450C - stmdb sp!, {r3, lr} - bl IsSecretBazaar - cmp r0, #0 - bne _02344528 - bl IsSecretRoom - cmp r0, #0 - beq _02344530 -_02344528: - mov r0, #1 - ldmia sp!, {r3, pc} -_02344530: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsHiddenStairsFloor - - arm_func_start IsSecretBazaarVeneer -IsSecretBazaarVeneer: ; 0x02344538 - ldr ip, _02344540 ; =IsSecretBazaar - bx ip - .align 2, 0 -_02344540: .word IsSecretBazaar - arm_func_end IsSecretBazaarVeneer - - arm_func_start ov29_02344544 -ov29_02344544: ; 0x02344544 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - mov r5, r0 - mov r4, r1 - bl EntityIsValid__02344AF8 - cmp r0, #0 - beq _02344A58 - mov r0, r4 - bl EntityIsValid__02344AF8 - cmp r0, #0 - beq _02344A58 - ldr r6, [r4, #0xb4] - mov r0, #1 - bl ov29_022EFB20 - mov r0, r5 - mov r1, r4 - mov r2, #1 - bl ov29_022F05B4 - ldrb r0, [r6, #0xbc] - sub r0, r0, #0x10 - cmp r0, #4 - addls pc, pc, r0, lsl #2 - b _02344A34 -_023445A0: ; jump table - b _023445B4 ; case 0 - b _023445E0 ; case 1 - b _0234471C ; case 2 - b _0234485C ; case 3 - b _02344950 ; case 4 -_023445B4: - ldr r2, _02344A60 ; =ov29_0237CFFC - mov r3, #0 - mov r0, r4 - mov r1, r5 - str r3, [r2] - bl ov29_022F0654 - ldr r0, _02344A64 ; =0x00000F32 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_023445E0: - ldr r2, _02344A60 ; =ov29_0237CFFC - mov r3, #1 - mov r0, r4 - mov r1, r5 - str r3, [r2] - bl ov29_022F0654 - ldr r0, _02344A68 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x77e] - cmp r0, #0 - beq _02344620 - ldr r0, _02344A6C ; =0x00000F4C - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_02344620: - mov r0, #0 - mov r1, #0x64 - bl ov29_0234B09C - ldr r0, _02344A70 ; =0x00000F4A - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - ldr r1, _02344A74 ; =ov29_02353798 - ldr r0, _02344A78 ; =0x00000F4B - ldr r3, [r1, #4] - mov r1, r4 - mov r2, #0 - bl ov29_022F062C - cmp r0, #0 - bne _02344670 - ldr r0, _02344A7C ; =0x00000F4D - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_02344670: - bl GetMoneyCarried - cmp r0, #0x64 - bge _02344690 - ldr r0, _02344A80 ; =0x00000F4E - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_02344690: - mov r0, #0x64 - bl ov29_022F07BC - ldr r0, _02344A84 ; =0x00000F4F - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - bl ov29_022F05E4 - mov r0, #4 - mov r1, #0x4000 - mov r2, #0 - bl StartFadeDungeonWrapper - mov r0, #0 - bl ov29_0234C738 - mov r0, #4 - mov r1, #0x4000 - mov r2, #0 - bl StartFadeDungeonWrapper - mov r0, #0 - bl ov29_0234C738 - mov r0, r4 - mov r1, #0 - ldr r2, _02344A88 ; =0x000001A7 - bl ov29_022F067C - bl ov29_022F05E4 - ldr r0, _02344A8C ; =0x00000F51 - bl ov29_022F0780 - mov r3, #1 - ldr r1, _02344A68 ; =DUNGEON_PTR -#ifdef JAPAN - ldr r0, _02345E54 ; =0x000008C7 -#else - mov r0, #0xf50 -#endif - ldr r2, [r1] - mov r1, r4 - strb r3, [r2, #0x77e] - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_0234471C: - ldr r2, _02344A60 ; =ov29_0237CFFC - mov r3, #2 - mov r0, r4 - mov r1, r5 - str r3, [r2] - bl ov29_022F0654 - mov r0, #0 - mov r1, #0x64 - bl ov29_0234B09C - ldr r0, _02344A90 ; =0x00000F33 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - ldr r0, _02344A94 ; =0x00000F34 - mov r1, r4 - mov r2, #0 - ldr r3, _02344A74 ; =ov29_02353798 - ldr r3, [r3, #8] - bl ov29_022F062C - cmp r0, #0 - bne _02344784 - ldr r0, _02344A98 ; =0x00000F35 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_02344784: - bl IsBagFull - cmp r0, #0 - beq _023447A4 - ldr r0, _02344A9C ; =0x00000F37 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_023447A4: - bl GetMoneyCarried - cmp r0, #0x64 - bge _023447C4 - ldr r0, _02344AA0 ; =0x00000F36 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_023447C4: - mov r0, #0x64 - bl ov29_022F07BC - ldr r0, _02344AA4 ; =0x00000F38 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - bl ov29_022F05E4 - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x32 - movlt r6, #0x46 - blt _023447FC - bl ov29_022E7BB8 - mov r6, r0 -_023447FC: - mov r1, r5 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags - mov r1, r6 - mov r0, #0 - bl ov29_02344B9C - add r0, sp, #0 - mov r1, r6 - mov r2, #2 - bl GenerateStandardItem - add r0, sp, #0 - bl ov29_02345004 - ldr r0, _02344AA8 ; =0x00000F3A - bl ov29_022F0780 - ldr r0, _02344AAC ; =0x00000F3B - bl ov29_022F0780 - ldr r0, _02344AB0 ; =0x00000F3C - bl ov29_022F0780 -#ifdef JAPAN - mov r0, #0x8b0 -#else - ldr r0, _02344AB4 ; =0x00000F39 -#endif - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_0234485C: - ldr r2, _02344A60 ; =ov29_0237CFFC - mov r3, #3 - mov r0, r4 - mov r1, r5 - str r3, [r2] - bl ov29_022F0654 - mov r0, #0 - mov r1, #0x64 - bl ov29_0234B09C - ldr r0, _02344AB8 ; =0x00000F54 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - ldr r0, _02344ABC ; =0x00000F55 - mov r1, r4 - mov r2, #0 - ldr r3, _02344A74 ; =ov29_02353798 - ldr r3, [r3, #0xc] - bl ov29_022F062C - cmp r0, #0 - bne _023448C4 - ldr r0, _02344AC0 ; =0x00000F56 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_023448C4: - bl CountStickyItemsInBag - cmp r0, #0 - bne _023448E4 - ldr r0, _02344AC4 ; =0x00000F58 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_023448E4: - bl GetMoneyCarried - cmp r0, #0x64 - bge _02344904 - ldr r0, _02344AC8 ; =0x00000F57 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_02344904: - mov r0, #0x64 - bl ov29_022F07BC -#ifdef JAPAN - mov r1, r4 - mov r0, #0x8d0 -#else - ldr r0, _02344ACC ; =0x00000F59 - mov r1, r4 -#endif - mov r2, #0 - bl ov29_022F0604 - bl ov29_022F05E4 - ldr r2, _02344AD0 ; =0x000001A6 - mov r0, r4 - mov r1, r5 - bl ov29_022F067C - bl ov29_022F05E4 - ldr r0, _02344AD4 ; =0x00000F5D - bl ov29_022F0780 - ldr r0, _02344AD8 ; =0x00000F5A - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_02344950: - ldr r2, _02344A60 ; =ov29_0237CFFC - mov r3, #4 - mov r0, r4 - mov r1, r5 - str r3, [r2] - bl ov29_022F0654 - mov r0, #0 - mov r1, #0x64 - bl ov29_0234B09C - ldr r0, _02344ADC ; =0x00000F3F - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 -#ifdef JAPAN - ldr r0, _02345EA0 ; =0x000008B7 -#else - mov r0, #0xf40 -#endif - mov r1, r4 - mov r2, #0 - ldr r3, _02344A74 ; =ov29_02353798 - ldr r3, [r3, #0x10] - bl ov29_022F062C - cmp r0, #0 - bne _023449B8 - ldr r0, _02344AE0 ; =0x00000F41 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_023449B8: - bl GetMoneyCarried - cmp r0, #0x64 - mov r2, #0 - bge _023449D8 - ldr r0, _02344AE4 ; =0x00000F42 - mov r1, r4 - bl ov29_022F0604 - b _02344A34 -_023449D8: - ldr r1, _02344A74 ; =ov29_02353798 - ldr r0, _02344AE8 ; =0x00000F43 - ldr r3, [r1, #0x14] - mov r1, r4 - bl ov29_022F0618 - cmp r0, #0 - bne _02344A08 - ldr r0, _02344AEC ; =0x00000F44 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - b _02344A34 -_02344A08: - mov r0, #0x64 - bl ov29_022F07BC - ldr r0, _02344AF0 ; =0x00000F45 - mov r1, r4 - mov r2, #0 - bl ov29_022F0604 - bl ov29_022F05E4 - ldr r2, _02344AF4 ; =0x000001A5 - mov r0, r4 - mov r1, r5 - bl ov29_022F067C -_02344A34: - mov r0, #1 - bl ov29_0234B1A4 - mov r0, r5 - mov r1, r4 - mov r2, #0 - bl ov29_022F05B4 - mov r0, #0 - bl ov29_022EFB84 - bl ov29_022F0848 -_02344A58: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -#define OV29_02344544_OFFSET -0x689 -#else -#define OV29_02344544_OFFSET 0 -#endif -_02344A60: .word ov29_0237CFFC -_02344A64: .word 0x00000F32 + OV29_02344544_OFFSET -_02344A68: .word DUNGEON_PTR -_02344A6C: .word 0x00000F4C + OV29_02344544_OFFSET -_02344A70: .word 0x00000F4A + OV29_02344544_OFFSET -_02344A74: .word ov29_02353798 -_02344A78: .word 0x00000F4B + OV29_02344544_OFFSET -_02344A7C: .word 0x00000F4D + OV29_02344544_OFFSET -_02344A80: .word 0x00000F4E + OV29_02344544_OFFSET -_02344A84: .word 0x00000F4F + OV29_02344544_OFFSET -_02344A88: .word 0x000001A7 -_02344A8C: .word 0x00000F51 + OV29_02344544_OFFSET -#ifdef JAPAN -_02345E54: .word 0x000008C7 -#endif -_02344A90: .word 0x00000F33 + OV29_02344544_OFFSET -_02344A94: .word 0x00000F34 + OV29_02344544_OFFSET -_02344A98: .word 0x00000F35 + OV29_02344544_OFFSET -_02344A9C: .word 0x00000F37 + OV29_02344544_OFFSET -_02344AA0: .word 0x00000F36 + OV29_02344544_OFFSET -_02344AA4: .word 0x00000F38 + OV29_02344544_OFFSET -_02344AA8: .word 0x00000F3A + OV29_02344544_OFFSET -_02344AAC: .word 0x00000F3B + OV29_02344544_OFFSET -_02344AB0: .word 0x00000F3C + OV29_02344544_OFFSET -#ifndef JAPAN -_02344AB4: .word 0x00000F39 -#endif -_02344AB8: .word 0x00000F54 + OV29_02344544_OFFSET -_02344ABC: .word 0x00000F55 + OV29_02344544_OFFSET -_02344AC0: .word 0x00000F56 + OV29_02344544_OFFSET -_02344AC4: .word 0x00000F58 + OV29_02344544_OFFSET -_02344AC8: .word 0x00000F57 + OV29_02344544_OFFSET -#ifndef JAPAN -_02344ACC: .word 0x00000F59 -#endif -_02344AD0: .word 0x000001A6 -_02344AD4: .word 0x00000F5D + OV29_02344544_OFFSET -_02344AD8: .word 0x00000F5A + OV29_02344544_OFFSET -_02344ADC: .word 0x00000F3F + OV29_02344544_OFFSET -#ifdef JAPAN -_02345EA0: .word 0x000008B7 -#endif -_02344AE0: .word 0x00000F41 + OV29_02344544_OFFSET -_02344AE4: .word 0x00000F42 + OV29_02344544_OFFSET -_02344AE8: .word 0x00000F43 + OV29_02344544_OFFSET -_02344AEC: .word 0x00000F44 + OV29_02344544_OFFSET -_02344AF0: .word 0x00000F45 + OV29_02344544_OFFSET -_02344AF4: .word 0x000001A5 - arm_func_end ov29_02344544 diff --git a/asm/overlay_29_02344178.s b/asm/overlay_29_02344178.s new file mode 100644 index 00000000..f09b4ff9 --- /dev/null +++ b/asm/overlay_29_02344178.s @@ -0,0 +1,737 @@ + .include "asm/macros.inc" + .include "overlay_29_02344178.inc" + + .text + + arm_func_start IsRoomIlluminated +IsRoomIlluminated: ; 0x02344178 + mov r1, #0xc + mul r1, r0, r1 + ldr r0, _0234418C ; =ov10_022C6C74 + ldrb r0, [r0, r1] + bx lr + .align 2, 0 +_0234418C: .word ov10_022C6C74 + arm_func_end IsRoomIlluminated + + arm_func_start GetMatchingMonsterId +GetMatchingMonsterId: ; 0x02344190 + stmdb sp!, {r4, lr} + cmp r0, #0 + ldrne r2, _023442A4 ; =0x00000483 + mov r4, #0 + cmpne r0, r2 + beq _0234429C + add r1, r2, #1 + cmp r0, r1 + bne _023441C0 + bl GetMissionTargetEnemy + mov r4, r0 + b _0234429C +_023441C0: + add r1, r2, #2 + cmp r0, r1 + bne _023441DC + mov r0, r4 + bl GetMissionEnemyMinionGroup + mov r4, r0 + b _0234429C +_023441DC: + add r1, r2, #3 + cmp r0, r1 + bne _023441F4 + bl GetMissionTargetEnemy + mov r4, r0 + b _0234429C +_023441F4: + add r1, r2, #4 + cmp r0, r1 + bne _02344210 + mov r0, r4 + bl GetMissionEnemyMinionGroup + mov r4, r0 + b _0234429C +_02344210: + add r1, r2, #5 + cmp r0, r1 + bne _0234422C + mov r0, #1 + bl GetMissionEnemyMinionGroup + mov r4, r0 + b _0234429C +_0234422C: + sub r1, r2, #0x274 + cmp r0, r1 + bne _02344254 + mov r0, r4 + mov r1, #0x5d + bl LoadScriptVariableValue + tst r0, #0xff + ldrne r4, _023442A8 ; =0x00000467 + ldreq r4, _023442AC ; =0x0000020F + b _0234429C +_02344254: + rsb r1, r2, #0x690 + cmp r0, r1 + bne _02344298 + ldr r0, _023442B0 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x700 + ldrsb r1, [r0, #0x98] + cmp r1, #0 + bne _02344288 + ldrsh r0, [r0, #0x4c] + bl GetDungeonMode + cmp r0, #1 + moveq r4, #1 +_02344288: + cmp r4, #0 + movne r4, #0x228 + ldreq r4, _023442B4 ; =0x0000020D + b _0234429C +_02344298: + mov r4, r0 +_0234429C: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_023442A4: .word 0x00000483 +_023442A8: .word 0x00000467 +_023442AC: .word 0x0000020F +_023442B0: .word DUNGEON_PTR +_023442B4: .word 0x0000020D + arm_func_end GetMatchingMonsterId + + arm_func_start ov29_023442B8 +ov29_023442B8: ; 0x023442B8 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + mov r2, r4 + mov r0, #0 + b _023442DC +_023442CC: + add r0, r0, #1 + mov r0, r0, lsl #0x10 + add r2, r2, #2 + mov r0, r0, asr #0x10 +_023442DC: + ldrsh r1, [r2] + cmp r1, #0 + bne _023442CC + bl DungeonRandInt + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + mov r0, r5, lsl #1 + ldrsh r0, [r4, r0] + cmp r0, #0 + moveq r0, #0x49 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r1, _023443B0 ; =0x00000579 + cmp r0, r1 + ldmltia sp!, {r3, r4, r5, pc} + add r1, r1, #3 + cmp r0, r1 + ldmgtia sp!, {r3, r4, r5, pc} + bl sub_02056880 + bl GetActiveTeamMember + mov r1, r5, lsl #1 + ldrsh r3, [r4, r1] + ldr r2, _023443B0 ; =0x00000579 + mov r4, r0 + cmp r3, r2 + mov r1, #0 + bne _02344354 + ldrsh r0, [r4, #0xc] + bl GetExclusiveItem + mov r1, r0 + b _02344390 +_02344354: + add r0, r2, #1 + cmp r3, r0 + bne _02344374 + ldrsh r0, [r4, #0xc] + mov r1, #1 + bl GetExclusiveItem + mov r1, r0 + b _02344390 +_02344374: + add r0, r2, #2 + cmp r3, r0 + bne _02344390 + ldrsh r0, [r4, #0xc] + mov r1, #2 + bl GetExclusiveItem + mov r1, r0 +_02344390: + cmp r1, #0 + bne _023443A8 + ldrsh r0, [r4, #0xc] + mov r1, #3 + bl GetExclusiveItem + mov r1, r0 +_023443A8: + mov r0, r1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023443B0: .word 0x00000579 + arm_func_end ov29_023442B8 + + arm_func_start GenerateItemExplicit +GenerateItemExplicit: ; 0x023443B4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r5, r2 + mov r4, r3 + bl GetItemCategoryVeneer + cmp r0, #6 + bne _02344400 + cmp r5, #0 + mov r0, r7 + mov r1, r6 + ble _023443F8 + mov r2, #0 + bl InitStandardItem + strh r5, [r7, #2] + b _02344420 +_023443F8: + bl GenerateCleanItem + b _02344420 +_02344400: + mov r0, r7 + mov r1, r6 + mov r2, #0 + bl InitStandardItem + cmp r5, #0 + strgth r5, [r7, #2] + movle r0, #0 + strleh r0, [r7, #2] +_02344420: + ldrb r0, [r7] + orr r0, r0, r4 + strb r0, [r7] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end GenerateItemExplicit + + arm_func_start GenerateAndSpawnItem +GenerateAndSpawnItem: ; 0x02344430 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + ldrb ip, [sp, #0x1c] + mov r5, r0 + mov r4, r3 + strh r1, [sp] + strh r2, [sp, #2] + cmp ip, #0 + beq _0234448C + bl IsItemInBag + cmp r0, #0 + add r0, sp, #4 + beq _02344478 + ldr r3, [sp, #0x18] + mov r2, r4 + mov r1, #0x49 + bl GenerateItemExplicit + b _023444A0 +_02344478: + ldr r3, [sp, #0x18] + mov r1, r5 + mov r2, r4 + bl GenerateItemExplicit + b _023444A0 +_0234448C: + ldr r3, [sp, #0x18] + add r0, sp, #4 + mov r1, r5 + mov r2, r4 + bl GenerateItemExplicit +_023444A0: + add r0, sp, #0 + add r1, sp, #4 + mov r2, #1 + bl SpawnItem + ldr r0, _023444D0 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x3f00 +#ifdef JAPAN + ldrsh r1, [r0, #0x1e] + add r1, r1, #1 + strh r1, [r0, #0x1e] +#else + ldrsh r1, [r0, #0xc2] + add r1, r1, #1 + strh r1, [r0, #0xc2] +#endif + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_023444D0: .word DUNGEON_PTR + arm_func_end GenerateAndSpawnItem + + arm_func_start ov29_023444D4 +ov29_023444D4: ; 0x023444D4 + stmdb sp!, {r3, lr} + ldr r0, _02344508 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x7e + add r0, r0, #0x700 + bl MemZero + bl IsSecretBazaar + cmp r0, #0 + ldmeqia sp!, {r3, pc} + mov r0, #0 + bl ov29_022F07D8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02344508: .word DUNGEON_PTR + arm_func_end ov29_023444D4 + + arm_func_start IsHiddenStairsFloor +IsHiddenStairsFloor: ; 0x0234450C + stmdb sp!, {r3, lr} + bl IsSecretBazaar + cmp r0, #0 + bne _02344528 + bl IsSecretRoom + cmp r0, #0 + beq _02344530 +_02344528: + mov r0, #1 + ldmia sp!, {r3, pc} +_02344530: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end IsHiddenStairsFloor + + arm_func_start IsSecretBazaarVeneer +IsSecretBazaarVeneer: ; 0x02344538 + ldr ip, _02344540 ; =IsSecretBazaar + bx ip + .align 2, 0 +_02344540: .word IsSecretBazaar + arm_func_end IsSecretBazaarVeneer + + arm_func_start ov29_02344544 +ov29_02344544: ; 0x02344544 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r5, r0 + mov r4, r1 + bl EntityIsValid__02344AF8 + cmp r0, #0 + beq _02344A58 + mov r0, r4 + bl EntityIsValid__02344AF8 + cmp r0, #0 + beq _02344A58 + ldr r6, [r4, #0xb4] + mov r0, #1 + bl ov29_022EFB20 + mov r0, r5 + mov r1, r4 + mov r2, #1 + bl ov29_022F05B4 + ldrb r0, [r6, #0xbc] + sub r0, r0, #0x10 + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _02344A34 +_023445A0: ; jump table + b _023445B4 ; case 0 + b _023445E0 ; case 1 + b _0234471C ; case 2 + b _0234485C ; case 3 + b _02344950 ; case 4 +_023445B4: + ldr r2, _02344A60 ; =ov29_0237CFFC + mov r3, #0 + mov r0, r4 + mov r1, r5 + str r3, [r2] + bl ov29_022F0654 + ldr r0, _02344A64 ; =0x00000F32 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_023445E0: + ldr r2, _02344A60 ; =ov29_0237CFFC + mov r3, #1 + mov r0, r4 + mov r1, r5 + str r3, [r2] + bl ov29_022F0654 + ldr r0, _02344A68 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x77e] + cmp r0, #0 + beq _02344620 + ldr r0, _02344A6C ; =0x00000F4C + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_02344620: + mov r0, #0 + mov r1, #0x64 + bl ov29_0234B09C + ldr r0, _02344A70 ; =0x00000F4A + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + ldr r1, _02344A74 ; =ov29_02353798 + ldr r0, _02344A78 ; =0x00000F4B + ldr r3, [r1, #4] + mov r1, r4 + mov r2, #0 + bl ov29_022F062C + cmp r0, #0 + bne _02344670 + ldr r0, _02344A7C ; =0x00000F4D + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_02344670: + bl GetMoneyCarried + cmp r0, #0x64 + bge _02344690 + ldr r0, _02344A80 ; =0x00000F4E + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_02344690: + mov r0, #0x64 + bl ov29_022F07BC + ldr r0, _02344A84 ; =0x00000F4F + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + bl ov29_022F05E4 + mov r0, #4 + mov r1, #0x4000 + mov r2, #0 + bl StartFadeDungeonWrapper + mov r0, #0 + bl ov29_0234C738 + mov r0, #4 + mov r1, #0x4000 + mov r2, #0 + bl StartFadeDungeonWrapper + mov r0, #0 + bl ov29_0234C738 + mov r0, r4 + mov r1, #0 + ldr r2, _02344A88 ; =0x000001A7 + bl ov29_022F067C + bl ov29_022F05E4 + ldr r0, _02344A8C ; =0x00000F51 + bl ov29_022F0780 + mov r3, #1 + ldr r1, _02344A68 ; =DUNGEON_PTR +#ifdef JAPAN + ldr r0, _02345E54 ; =0x000008C7 +#else + mov r0, #0xf50 +#endif + ldr r2, [r1] + mov r1, r4 + strb r3, [r2, #0x77e] + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_0234471C: + ldr r2, _02344A60 ; =ov29_0237CFFC + mov r3, #2 + mov r0, r4 + mov r1, r5 + str r3, [r2] + bl ov29_022F0654 + mov r0, #0 + mov r1, #0x64 + bl ov29_0234B09C + ldr r0, _02344A90 ; =0x00000F33 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + ldr r0, _02344A94 ; =0x00000F34 + mov r1, r4 + mov r2, #0 + ldr r3, _02344A74 ; =ov29_02353798 + ldr r3, [r3, #8] + bl ov29_022F062C + cmp r0, #0 + bne _02344784 + ldr r0, _02344A98 ; =0x00000F35 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_02344784: + bl IsBagFull + cmp r0, #0 + beq _023447A4 + ldr r0, _02344A9C ; =0x00000F37 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_023447A4: + bl GetMoneyCarried + cmp r0, #0x64 + bge _023447C4 + ldr r0, _02344AA0 ; =0x00000F36 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_023447C4: + mov r0, #0x64 + bl ov29_022F07BC + ldr r0, _02344AA4 ; =0x00000F38 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + bl ov29_022F05E4 + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x32 + movlt r6, #0x46 + blt _023447FC + bl ov29_022E7BB8 + mov r6, r0 +_023447FC: + mov r1, r5 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags + mov r1, r6 + mov r0, #0 + bl ov29_02344B9C + add r0, sp, #0 + mov r1, r6 + mov r2, #2 + bl GenerateStandardItem + add r0, sp, #0 + bl ov29_02345004 + ldr r0, _02344AA8 ; =0x00000F3A + bl ov29_022F0780 + ldr r0, _02344AAC ; =0x00000F3B + bl ov29_022F0780 + ldr r0, _02344AB0 ; =0x00000F3C + bl ov29_022F0780 +#ifdef JAPAN + mov r0, #0x8b0 +#else + ldr r0, _02344AB4 ; =0x00000F39 +#endif + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_0234485C: + ldr r2, _02344A60 ; =ov29_0237CFFC + mov r3, #3 + mov r0, r4 + mov r1, r5 + str r3, [r2] + bl ov29_022F0654 + mov r0, #0 + mov r1, #0x64 + bl ov29_0234B09C + ldr r0, _02344AB8 ; =0x00000F54 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + ldr r0, _02344ABC ; =0x00000F55 + mov r1, r4 + mov r2, #0 + ldr r3, _02344A74 ; =ov29_02353798 + ldr r3, [r3, #0xc] + bl ov29_022F062C + cmp r0, #0 + bne _023448C4 + ldr r0, _02344AC0 ; =0x00000F56 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_023448C4: + bl CountStickyItemsInBag + cmp r0, #0 + bne _023448E4 + ldr r0, _02344AC4 ; =0x00000F58 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_023448E4: + bl GetMoneyCarried + cmp r0, #0x64 + bge _02344904 + ldr r0, _02344AC8 ; =0x00000F57 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_02344904: + mov r0, #0x64 + bl ov29_022F07BC +#ifdef JAPAN + mov r1, r4 + mov r0, #0x8d0 +#else + ldr r0, _02344ACC ; =0x00000F59 + mov r1, r4 +#endif + mov r2, #0 + bl ov29_022F0604 + bl ov29_022F05E4 + ldr r2, _02344AD0 ; =0x000001A6 + mov r0, r4 + mov r1, r5 + bl ov29_022F067C + bl ov29_022F05E4 + ldr r0, _02344AD4 ; =0x00000F5D + bl ov29_022F0780 + ldr r0, _02344AD8 ; =0x00000F5A + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_02344950: + ldr r2, _02344A60 ; =ov29_0237CFFC + mov r3, #4 + mov r0, r4 + mov r1, r5 + str r3, [r2] + bl ov29_022F0654 + mov r0, #0 + mov r1, #0x64 + bl ov29_0234B09C + ldr r0, _02344ADC ; =0x00000F3F + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 +#ifdef JAPAN + ldr r0, _02345EA0 ; =0x000008B7 +#else + mov r0, #0xf40 +#endif + mov r1, r4 + mov r2, #0 + ldr r3, _02344A74 ; =ov29_02353798 + ldr r3, [r3, #0x10] + bl ov29_022F062C + cmp r0, #0 + bne _023449B8 + ldr r0, _02344AE0 ; =0x00000F41 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_023449B8: + bl GetMoneyCarried + cmp r0, #0x64 + mov r2, #0 + bge _023449D8 + ldr r0, _02344AE4 ; =0x00000F42 + mov r1, r4 + bl ov29_022F0604 + b _02344A34 +_023449D8: + ldr r1, _02344A74 ; =ov29_02353798 + ldr r0, _02344AE8 ; =0x00000F43 + ldr r3, [r1, #0x14] + mov r1, r4 + bl ov29_022F0618 + cmp r0, #0 + bne _02344A08 + ldr r0, _02344AEC ; =0x00000F44 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + b _02344A34 +_02344A08: + mov r0, #0x64 + bl ov29_022F07BC + ldr r0, _02344AF0 ; =0x00000F45 + mov r1, r4 + mov r2, #0 + bl ov29_022F0604 + bl ov29_022F05E4 + ldr r2, _02344AF4 ; =0x000001A5 + mov r0, r4 + mov r1, r5 + bl ov29_022F067C +_02344A34: + mov r0, #1 + bl ov29_0234B1A4 + mov r0, r5 + mov r1, r4 + mov r2, #0 + bl ov29_022F05B4 + mov r0, #0 + bl ov29_022EFB84 + bl ov29_022F0848 +_02344A58: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +#define OV29_02344544_OFFSET -0x689 +#else +#define OV29_02344544_OFFSET 0 +#endif +_02344A60: .word ov29_0237CFFC +_02344A64: .word 0x00000F32 + OV29_02344544_OFFSET +_02344A68: .word DUNGEON_PTR +_02344A6C: .word 0x00000F4C + OV29_02344544_OFFSET +_02344A70: .word 0x00000F4A + OV29_02344544_OFFSET +_02344A74: .word ov29_02353798 +_02344A78: .word 0x00000F4B + OV29_02344544_OFFSET +_02344A7C: .word 0x00000F4D + OV29_02344544_OFFSET +_02344A80: .word 0x00000F4E + OV29_02344544_OFFSET +_02344A84: .word 0x00000F4F + OV29_02344544_OFFSET +_02344A88: .word 0x000001A7 +_02344A8C: .word 0x00000F51 + OV29_02344544_OFFSET +#ifdef JAPAN +_02345E54: .word 0x000008C7 +#endif +_02344A90: .word 0x00000F33 + OV29_02344544_OFFSET +_02344A94: .word 0x00000F34 + OV29_02344544_OFFSET +_02344A98: .word 0x00000F35 + OV29_02344544_OFFSET +_02344A9C: .word 0x00000F37 + OV29_02344544_OFFSET +_02344AA0: .word 0x00000F36 + OV29_02344544_OFFSET +_02344AA4: .word 0x00000F38 + OV29_02344544_OFFSET +_02344AA8: .word 0x00000F3A + OV29_02344544_OFFSET +_02344AAC: .word 0x00000F3B + OV29_02344544_OFFSET +_02344AB0: .word 0x00000F3C + OV29_02344544_OFFSET +#ifndef JAPAN +_02344AB4: .word 0x00000F39 +#endif +_02344AB8: .word 0x00000F54 + OV29_02344544_OFFSET +_02344ABC: .word 0x00000F55 + OV29_02344544_OFFSET +_02344AC0: .word 0x00000F56 + OV29_02344544_OFFSET +_02344AC4: .word 0x00000F58 + OV29_02344544_OFFSET +_02344AC8: .word 0x00000F57 + OV29_02344544_OFFSET +#ifndef JAPAN +_02344ACC: .word 0x00000F59 +#endif +_02344AD0: .word 0x000001A6 +_02344AD4: .word 0x00000F5D + OV29_02344544_OFFSET +_02344AD8: .word 0x00000F5A + OV29_02344544_OFFSET +_02344ADC: .word 0x00000F3F + OV29_02344544_OFFSET +#ifdef JAPAN +_02345EA0: .word 0x000008B7 +#endif +_02344AE0: .word 0x00000F41 + OV29_02344544_OFFSET +_02344AE4: .word 0x00000F42 + OV29_02344544_OFFSET +_02344AE8: .word 0x00000F43 + OV29_02344544_OFFSET +_02344AEC: .word 0x00000F44 + OV29_02344544_OFFSET +_02344AF0: .word 0x00000F45 + OV29_02344544_OFFSET +_02344AF4: .word 0x000001A5 + arm_func_end ov29_02344544 diff --git a/asm/overlay_29_02344B1C.s b/asm/overlay_29_02344B1C.s index 048cd440..43fa5fdd 100644 --- a/asm/overlay_29_02344B1C.s +++ b/asm/overlay_29_02344B1C.s @@ -469,7 +469,7 @@ TryLeaderItemPickUp: ; 0x02345058 b _02345508 _02345108: mov r1, #1 - bl ShouldMonsterRunAwayVariation + bl ShouldMonsterRunAwayAndShowEffect cmp r0, #0 beq _0234515C cmp sb, #0 diff --git a/include/dungeon_ai_targeting.h b/include/dungeon_ai_targeting.h index 596c9bcd..4018a351 100644 --- a/include/dungeon_ai_targeting.h +++ b/include/dungeon_ai_targeting.h @@ -6,5 +6,10 @@ // Checks if a monster should run away from other monsters // return: True if the monster should run away, false otherwise bool8 ShouldMonsterRunAway(struct entity *monster); +// Calls ShouldMonsterRunAway and returns its result. It also calls DisplayRunAwayIfTriggered if the result was true. +// monster: Entity pointer +// show_run_away_effect: Boolean value. If true, display a visual "poof" effect if the Run Away ability caused the monster to run away. +// return: Result of the call to ShouldMonsterRunAway +bool8 ShouldMonsterRunAwayAndShowEffect(struct entity *monster, bool8 show_run_away_effect); #endif //PMDSKY_DUNGEON_AI_TARGETING_H diff --git a/include/dungeon_logic_3.h b/include/dungeon_logic_3.h index 18d48d2d..c8e52089 100644 --- a/include/dungeon_logic_3.h +++ b/include/dungeon_logic_3.h @@ -3,6 +3,11 @@ #include "dungeon_mode.h" +// Returns false if the entity has any of these conditions: sleep, nightmare, napping, frozen, wrapped/wrapping, petrified, cringe, paused, infatuated, paralysis. Also returns false if ShouldMonsterRunAway returns true. +// pokemon: Entity pointer +// skip_sleep: If true, ignore sleep conditions (sleep, nightmare, napping) when checking if the entity cannot attack. +// return: bool +bool8 MonsterCannotAttack(struct entity *pokemon, bool8 skip_sleep); // Checks if the given monster can move in the specified direction // Returns false if any monster is standing on the target tile bool8 CanMonsterMoveInDirection(struct entity *monster, u16 direction); diff --git a/include/fixed_room_data.h b/include/fixed_room_data.h new file mode 100644 index 00000000..0b8ec5b6 --- /dev/null +++ b/include/fixed_room_data.h @@ -0,0 +1,34 @@ +#ifndef PMDSKY_FIXED_ROOM_DATA_H +#define PMDSKY_FIXED_ROOM_DATA_H + +#include "dungeon_mode.h" + +// Entry in the fixed room properties table +struct fixed_room_properties_entry { + // 0x0: If MUSIC_NONE_0x0, the music will be taken from the mappa file for the floor + u16 music; + u8 field_0x2; + u8 field_0x3; + bool8 illuminated; // 0x4: Floor will be fully illuminated (darkness level 0) + bool8 enable_lategame_traps; // 0x5: Allows Summon, Pitfall, and Pokémon traps to work + // 0x6: Monsters can use moves on this floor. Does not affect the regular attack. + // If false, NPCs won't use any moves at all (not even the regular attack) + bool8 moves_enabled; + bool8 orbs_allowed; // 0x7: Orbs can be used. Ignored for IDs past FIXED_SEALED_CHAMBER. + // 0x8: Warping, being blown away, and leaping are allowed on this floor. + // Ignored for IDs past FIXED_SEALED_CHAMBER. + bool8 tile_jumps_allowed; + // 0x9: Trawl Orbs work on this floor. Ignored for IDs past FIXED_SEALED_CHAMBER. + bool8 trawl_orbs_allowed; + // 0xA: This floor will be exited immediately after all enemies have been defeated. + // If false, the fixed room must have stairs placed somewhere to be considered valid. + bool8 exit_after_enemies_defeated; + u8 field_0xb; +}; + +extern struct fixed_room_properties_entry FIXED_ROOM_PROPERTIES_TABLE[]; + +// Checks if moves (excluding the regular attack) are usable in the given fixed room. +bool8 AreMovesEnabled(enum fixed_room_id fixed_room_id); + +#endif //PMDSKY_FIXED_ROOM_DATA_H diff --git a/include/main_0207B860.h b/include/main_0207B860.h new file mode 100644 index 00000000..459c585a --- /dev/null +++ b/include/main_0207B860.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0207B860_H +#define PMDSKY_MAIN_0207B860_H + +void sub_0207B860(); + +#endif //PMDSKY_MAIN_0207B860_H diff --git a/include/overlay_29_02301118.h b/include/overlay_29_02301118.h new file mode 100644 index 00000000..a83a0ced --- /dev/null +++ b/include/overlay_29_02301118.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_02301118_H +#define PMDSKY_OVERLAY_29_02301118_H + +#include "dungeon_mode.h" + +// True if the given monster is cornered (it can't move in any direction) +bool8 IsMonsterCornered(struct entity *monster); + +#endif //PMDSKY_OVERLAY_29_02301118_H diff --git a/main.lsf b/main.lsf index 14df9627..3f30bbf8 100644 --- a/main.lsf +++ b/main.lsf @@ -64,6 +64,8 @@ Static main Object asm/main_02075600.o Object src/main_0207B848.o Object asm/main_0207B854.o + Object src/main_0207B860.o + Object asm/main_0207B87C.o Object src/main_0207BC20.o Object asm/main_0207BC3C.o Object src/main_0207F3E4.o @@ -344,8 +346,10 @@ Overlay OVY_29 Object asm/overlay_29_02300D00.o Object src/dungeon_logic_3.o Object asm/overlay_29_02300FCC.o + Object src/overlay_29_02301118.o + Object asm/overlay_29_02301158.o Object src/dungeon_ai_targeting.o - Object asm/overlay_29_023016A8.o + Object asm/overlay_29_023016D8.o Object src/dungeon_ai_targeting_1.o Object asm/overlay_29_rodata_023527C0.o Object asm/overlay_29_023018AC.o @@ -471,6 +475,8 @@ Overlay OVY_29 Object asm/overlay_29_0233861C.o Object src/overlay_29_02340CAC.o Object asm/overlay_29_02340CE4.o + Object src/fixed_room_data.o + Object asm/overlay_29_02344178.o Object src/overlay_29_02344AF8.o Object asm/overlay_29_02344B1C.o Object src/overlay_29_02345698.o diff --git a/src/dungeon_ai_itcm.c b/src/dungeon_ai_itcm.c index e52b99c1..53a30e47 100644 --- a/src/dungeon_ai_itcm.c +++ b/src/dungeon_ai_itcm.c @@ -2,10 +2,14 @@ #include "dg_random.h" #include "direction.h" #include "dungeon_action.h" +#include "dungeon_ai_targeting.h" +#include "dungeon_logic_3.h" #include "dungeon_parameters.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_pokemon_attributes_1.h" #include "dungeon_util_static.h" +#include "fixed_room_data.h" +#include "overlay_29_02301118.h" #define REGULAR_ATTACK_INDEX 4 @@ -13,17 +17,13 @@ const s16 AI_REGULAR_ATTACK_WEIGHTS[5] = { 100, 20, 30, 40, 50 }; extern struct dungeon *DUNGEON_PTR[]; -extern bool8 AreMovesEnabled(enum fixed_room_id fixed_room_id); -extern bool8 MonsterCannotAttack(struct entity *pokemon, bool8 skip_sleep); -extern u32 ShouldMonsterRunAwayVariation(struct entity *monster, u32 param_2); -extern bool8 IsMonsterCornered(struct entity *monster); extern bool8 IsChargingTwoTurnMove(struct entity *user, struct move *move); extern void SetActionUseMoveAi(struct action_data *monster_action, s16 move_index, u8 direction); extern void UpdateAiTargetPos(struct entity *monster); extern void InitMove(struct move *move, enum move_id move_id); extern u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *monster, struct move *move); extern bool8 ov29_02338350(struct entity *monster); -extern bool8 TargetRegularAttack(struct entity *pokemon, u32 *target_dir, bool8 check_petrified); +extern bool8 TargetRegularAttack(struct entity *pokemon, u32 *target_dir, bool8 skip_petrified); extern void SetActionRegularAttack(struct action_data *monster_action, u8 direction); extern void SetActionStruggle(struct action_data *monster_action, u8 direction); extern bool8 CanAiUseMove(struct entity *monster, u32 move_index, bool8 extra_checks); @@ -38,7 +38,7 @@ void ChooseAiMove(struct entity *monster) if (!AreMovesEnabled(DUNGEON_PTR[0]->gen_info.fixed_room_id) || MonsterCannotAttack(monster, FALSE) || - ShouldMonsterRunAwayVariation(monster, TRUE) || + ShouldMonsterRunAwayAndShowEffect(monster, TRUE) || GetEntInfo(monster)->monster_behavior == BEHAVIOR_FLEEING_OUTLAW && IsMonsterCornered(monster) || IsTacticSet(monster, TACTIC_KEEP_YOUR_DISTANCE) || (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_CONFUSED && DungeonRandOutcome__022EAB20(AI_CONFUSED_NO_ATTACK_CHANCE))) diff --git a/src/dungeon_ai_targeting.c b/src/dungeon_ai_targeting.c index ff8dc49c..ba14ec30 100644 --- a/src/dungeon_ai_targeting.c +++ b/src/dungeon_ai_targeting.c @@ -4,6 +4,8 @@ #include "dungeon_util_static.h" #include "overlay_29_023000E4.h" +extern void DisplayRunAwayIfTriggered(struct entity *monster, bool8 show_run_away_effect); + bool8 ShouldMonsterRunAway(struct entity *monster) { if (!EntityIsValid__023000E4(monster)) @@ -42,3 +44,14 @@ bool8 ShouldMonsterRunAway(struct entity *monster) } return FALSE; } + +bool8 ShouldMonsterRunAwayAndShowEffect(struct entity *monster, bool8 show_run_away_effect) +{ + if (ShouldMonsterRunAway(monster)) + { + DisplayRunAwayIfTriggered(monster, show_run_away_effect); + return TRUE; + } + + return FALSE; +} diff --git a/src/dungeon_logic_3.c b/src/dungeon_logic_3.c index e5f71b77..3bfae410 100644 --- a/src/dungeon_logic_3.c +++ b/src/dungeon_logic_3.c @@ -1,4 +1,5 @@ #include "dungeon_logic_3.h" +#include "dungeon_ai_targeting.h" #include "dungeon_map_access.h" #include "dungeon_mobility.h" #include "dungeon_pokemon_attributes_1.h" @@ -9,6 +10,48 @@ static const u8 DIRECTIONAL_BIT_MASKS[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +bool8 MonsterCannotAttack(struct entity *pokemon, bool8 skip_sleep) +{ + struct monster *pokemon_info = GetEntInfo(pokemon); + + if (!skip_sleep) + { + if (pokemon_info->sleep_class_status.sleep != STATUS_SLEEP_SLEEPLESS && + pokemon_info->sleep_class_status.sleep != STATUS_SLEEP_YAWNING && + pokemon_info->sleep_class_status.sleep != STATUS_SLEEP_NONE) + return TRUE; + } + + if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_FROZEN) + return TRUE; + + if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_WRAP) + return TRUE; + + if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_WRAPPED) + return TRUE; + + if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_PETRIFIED) + return TRUE; + + if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_CRINGE) + return TRUE; + + if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_PAUSED) + return TRUE; + + if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_INFATUATED) + return TRUE; + + if (pokemon_info->burn_class_status.burn == STATUS_BURN_PARALYSIS) + return TRUE; + + if (ShouldMonsterRunAway(pokemon)) + return TRUE; + + return FALSE; +} + bool8 CanMonsterMoveInDirection(struct entity *monster, u16 direction) { struct monster *monster_info = GetEntInfo(monster); diff --git a/src/fixed_room_data.c b/src/fixed_room_data.c new file mode 100644 index 00000000..77ac931c --- /dev/null +++ b/src/fixed_room_data.c @@ -0,0 +1,6 @@ +#include "fixed_room_data.h" + +bool8 AreMovesEnabled(enum fixed_room_id fixed_room_id) +{ + return FIXED_ROOM_PROPERTIES_TABLE[fixed_room_id].moves_enabled; +} diff --git a/src/main_0207B860.c b/src/main_0207B860.c new file mode 100644 index 00000000..0c48f91d --- /dev/null +++ b/src/main_0207B860.c @@ -0,0 +1,10 @@ +#include "main_0207B860.h" + +void SVC_WaitByLoop(s32); +void sub_02078900(s32, s32); + +void sub_0207B860() +{ + SVC_WaitByLoop(1); + sub_02078900(1, 1); +} diff --git a/src/overlay_29_02301118.c b/src/overlay_29_02301118.c new file mode 100644 index 00000000..ed3f0009 --- /dev/null +++ b/src/overlay_29_02301118.c @@ -0,0 +1,16 @@ +#include "overlay_29_02301118.h" +#include "direction.h" + +extern bool8 ov29_02301158(struct entity *monster, s32 direction); + +bool8 IsMonsterCornered(struct entity *monster) +{ + for (u8 i = 0; i < NUM_DIRECTIONS; i++) + { + if (ov29_02301158(monster, i)) + { + return TRUE; + } + } + return FALSE; +} diff --git a/src/overlay_31_02382820.c b/src/overlay_31_02382820.c index a517000f..f8f7d863 100644 --- a/src/overlay_31_02382820.c +++ b/src/overlay_31_02382820.c @@ -1,4 +1,5 @@ #include "overlay_31_02382820.h" +#include "dungeon_ai_targeting.h" #include "number_util.h" extern struct dungeon* DUNGEON_PTR[]; @@ -36,7 +37,6 @@ extern u8* AllocateTemp1024ByteBufferFromPool(void); extern struct Window* GetWindow(struct Window*); extern s32 sub_020265A8(u8*); // Measures the text's width in pixels -extern u32 ShouldMonsterRunAwayVariation(struct entity*, u32); extern u32 Arm9LoadUnkFieldNa0x2029EC8(u32, u8*); extern u8 CreateParentMenuFromStringIds(u32*, u32, struct struct_2*, u32*); extern u8 CreateTextBox(u32*, void (*fun)(struct Window*)); @@ -44,7 +44,6 @@ extern u32 IsParentMenuActive(s8); extern u32 sub_0202AB80(s8); extern void Arm9StoreUnkFieldNa0x2029ED8(u32, u8); extern u32 GetPressedButtons(u32, u16*); -extern u32 ShouldMonsterRunAwayVariation(struct entity*, u32); extern void sub_0202AB94(s8, u32); extern void sub_0202B030(s8); extern void sub_0202F954(s8); @@ -173,7 +172,7 @@ u32 ov31_02382B54(void) OVERLAY31_UNKNOWN_POINTER__NA_238A260[0]->b[i] = 0; } leader = GetLeader(); - if (ShouldMonsterRunAwayVariation(leader, 1)) { + if (ShouldMonsterRunAwayAndShowEffect(leader, 1)) { OVERLAY31_UNKNOWN_POINTER__NA_238A260[0]->b[0] = 3; OVERLAY31_UNKNOWN_POINTER__NA_238A260[0]->b[1] = 3; OVERLAY31_UNKNOWN_POINTER__NA_238A260[0]->b[2] = 3; @@ -201,7 +200,7 @@ u32 ov31_02382B54(void) struct entity* leader = GetLeader(); - if (ShouldMonsterRunAwayVariation(leader, 1)) + if (ShouldMonsterRunAwayAndShowEffect(leader, 1)) break; sub_0202AB94(OVERLAY31_UNKNOWN_POINTER__NA_238A260[0]->f[0], 0);