mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-28 21:31:17 -05:00
Decompile 48 more callees; clear four asm files entirely
Every function of four whole asm files now matches, so all four objects leave main.lsf and the .s/.inc files go: asm/overlay_29_023055B0.s 4 functions asm/overlay_29_02314810.s 9 functions asm/overlay_29_022E7EC4.s 25 functions asm/main_0202AB94.s 10 functions struct unk_0202AAA8 gains four members carved out of existing byte padding: a u32 at 0x0, the third menu kind's flag word plus its initial selected index at 0xFC/0x100, a u8 * at 0x160, and a signed s32 at 0x1A8. Offsets and sizeof are unchanged (0x1C8), proven by compiling one offsetof assertion per member with mwccarm and reading the folded constant back; the check carries a negative control that correctly fails, so "all as expected" is an outcome it could have missed. Nothing in the tree read any of the four offsets. struct struct_2 moves from include/overlay_31_02382820.h to include/window.h so a src/main_* file can reach it. CreateSimpleMenuInternal copies it whole (0x98 bytes), so its size is load-bearing. It is a pure move; the name is pre-existing and unchanged. window.h rather than main_0202AAA8.h because the latter drags main_0202AB40.h's prototypes into overlay_31_02382820.c, where they collide with that file's own declarations. Four data symbols declared `extern s32` from a call site whose parameter was void * are given their real types: _0209C85C and ov11_02322CC8 are WindowTemplate (each measures exactly 0x10 to the next symbol, and WindowTemplate is 16 bytes), _0209C86C and ov11_02322CF0 are struct unk_0202A5CC[] (8-byte records, matching the element counts the call sites pass). Each had exactly one user. The (s32) cast at overlay_11_02307334.c's call site goes with them -- field_0x1c is already a struct struct_2. Region arms, all message ids: overlay_29_0230558C.c gains a JPN_MSG_OFFSET block for five ids; move_orb_effects.c reuses its existing one and adds MESSAGE_ED0 / MESSAGE_ED1 for the two that shift by -0x2BE rather than the file's flat -0x2C0; overlay_29_02315118.c gains five named defines because it has no offset constant of its own. Every other region delta in these four files is a header-driven field displacement and needs nothing. Nine call-site-derived declarations across six files are replaced by an include of the owning header. Four declared void where the function returns bool8; two declared an s8 return where it is s32; three took an s8 parameter where it is s32. One was the fifth extern on a single physical line, which a line-oriented grep does not see. Authored by Claude (Opus 5) under human direction. Confirmed by matching builds in all three regions: build/pmdsky.us/pmdsky.us.nds: OK, build/pmdsky.eu/pmdsky.eu.nds: OK, build/pmdsky.jp/pmdsky.jp.nds: OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,36 +0,0 @@
|
||||
#pragma once
|
||||
.public CalcMenuHeightDiv8__02031AA4
|
||||
.public GetPageItemYOffset
|
||||
.public GetSelectedMenuItemIdx
|
||||
.public GetTotalNumMenuItems
|
||||
.public GetWindowContents
|
||||
.public GetWindowRectangle
|
||||
.public InitWindowInput
|
||||
.public IsEmptyString
|
||||
.public IsMenuOptionActive
|
||||
.public MemAlloc
|
||||
.public NewWindowScreenCheck
|
||||
.public PlayWindowInputSound
|
||||
.public PreprocessStringFromId
|
||||
.public SIMPLE_MENU_DEFAULT_WINDOW_PARAMS
|
||||
.public sub_020263C8
|
||||
.public sub_020265A8
|
||||
.public sub_02027B1C
|
||||
.public sub_0202810C
|
||||
.public sub_0202812C
|
||||
.public sub_0202830C
|
||||
.public sub_02028948
|
||||
.public sub_0202A03C
|
||||
.public sub_02031A5C
|
||||
.public sub_02031C74
|
||||
.public sub_02031C84
|
||||
.public sub_02031C98
|
||||
.public sub_02032070
|
||||
.public sub_02032160
|
||||
.public sub_020323F8
|
||||
.public sub_0203250C
|
||||
.public sub_02032684
|
||||
.public sub_02032984
|
||||
.public sub_02033758
|
||||
.public UpdateSimpleMenu
|
||||
.public UpdateWindow
|
||||
@@ -1,49 +0,0 @@
|
||||
#pragma once
|
||||
.public DUNGEON_FRAMES_PASSED
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonChangeTopScreenType
|
||||
.public DungeonGetSpriteIndex
|
||||
.public FreeDungeonControlsMenu
|
||||
.public FreeTopScreen
|
||||
.public GetIdleAnimationId
|
||||
.public GetPlayerGender
|
||||
.public GetTopScreenOption
|
||||
.public InitDungeonControlsMenu
|
||||
.public IsTeamStatsOnTopScreen
|
||||
.public MemAlloc
|
||||
.public MemFree
|
||||
.public MemZero
|
||||
.public ov10_022C1E50
|
||||
.public ov10_022C1E80
|
||||
.public ov10_022C21D8
|
||||
.public ov10_022C2278
|
||||
.public ov10_022C22A0
|
||||
.public ov29_022DC694
|
||||
.public ov29_022DC6D0
|
||||
.public ov29_022DC6DC
|
||||
.public ov29_022DC6E8
|
||||
.public ov29_022DC728
|
||||
.public ov29_022DC738
|
||||
.public ov29_022DC76C
|
||||
.public ov29_022DC778
|
||||
.public ov29_022DC77C
|
||||
.public ov29_022E8708
|
||||
.public ov29_022E8CE8
|
||||
.public ov29_022E8F78
|
||||
.public ov29_022E8FCC
|
||||
.public ov29_022E8FF8
|
||||
.public ov29_022E9008
|
||||
.public ov29_022E9014
|
||||
.public ov29_02339138
|
||||
.public ov29_02339D7C
|
||||
.public ov29_0233A0E8
|
||||
.public ov29_0233A1BC
|
||||
.public ov29_0234B4E0
|
||||
.public SetMinimapDataE447
|
||||
.public SetMinimapDataE448
|
||||
.public sub_02048384
|
||||
.public sub_020483B8
|
||||
.public sub_020483D8
|
||||
.public sub_02048400
|
||||
.public TOP_SCREEN_STATUS_PTR
|
||||
.public UpdateMinimap
|
||||
@@ -1,52 +0,0 @@
|
||||
#pragma once
|
||||
.public AbilityIsActiveVeneer
|
||||
.public CalcSpeedStageWrapper
|
||||
.public ChangeMonsterAnimation
|
||||
.public CheckVariousStatuses2__02301244
|
||||
.public DUNGEON_PTR
|
||||
.public EndBlinkerClassStatus
|
||||
.public EndBurnClassStatus
|
||||
.public EndCringeClassStatus
|
||||
.public EndCurseClassStatus
|
||||
.public EndFrozenClassStatus
|
||||
.public EndLeechSeedClassStatus
|
||||
.public EndMiracleEyeStatus
|
||||
.public EndMuzzledStatus
|
||||
.public EndSleepClassStatus
|
||||
.public EndSureShotClassStatus
|
||||
.public EntityIsValid__0230558C
|
||||
.public EntityIsValid__02305C04
|
||||
.public GetDirectionTowardsPosition
|
||||
.public GetIdleAnimationId
|
||||
.public GetLeader
|
||||
.public GetTileAtEntity
|
||||
.public GetTrapInfo
|
||||
.public HasHeldItem
|
||||
.public IqSkillIsEnabled
|
||||
.public IsFloorOver
|
||||
.public IsMonsterDrowsy
|
||||
.public IsMonsterMuzzled
|
||||
.public IsMonsterVisuallyImpaired
|
||||
.public IsTeamMemberOnFirstTurnInFixedRoom
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public MonsterHasAttackInterferingStatus
|
||||
.public MonsterHasImmobilizingStatus
|
||||
.public MonsterHasLeechSeedStatus
|
||||
.public MonsterHasMiracleEyeStatus
|
||||
.public MonsterHasNegativeStatus
|
||||
.public MonsterHasNonvolatileNonsleepStatus
|
||||
.public MonsterHasSkillInterferingStatus
|
||||
.public MonsterHasWhifferStatus
|
||||
.public ov29_022E2CA0
|
||||
.public ov29_022E3A58
|
||||
.public ov29_022E543C
|
||||
.public ov29_022EA370
|
||||
.public ov29_02337D68
|
||||
.public ov29_02353318
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TryNonLeaderItemPickUp
|
||||
.public TryTriggerMonsterHouse
|
||||
.public TryTriggerTrap
|
||||
.public UpdateStatusIconFlags
|
||||
.public UpdateTrapsVisibility
|
||||
@@ -1,31 +0,0 @@
|
||||
#pragma once
|
||||
.public AbilityIsActiveVeneer
|
||||
.public BoostSpeed
|
||||
.public CalcSpeedStage
|
||||
.public CalcSpeedStageWrapper
|
||||
.public CalcStatusDuration
|
||||
.public CONFUSED_TURN_RANGE
|
||||
.public DungeonRandInt
|
||||
.public DungeonRandOutcome__022EAB20
|
||||
.public EntityIsValid__023118B4
|
||||
.public EntityIsValid__02315118
|
||||
.public ExclusiveItemEffectIsActive__023147EC
|
||||
.public GetExclusiveItemWithEffectFromBag
|
||||
.public IsProtectedFromNegativeStatus
|
||||
.public ItemIsActive__0231513C
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public LowerSpeed
|
||||
.public ov10_022C4618
|
||||
.public ov29_022E41CC
|
||||
.public ov29_022E543C
|
||||
.public ov29_022E60E4
|
||||
.public ov29_02353318
|
||||
.public PlaySpeedDownEffect
|
||||
.public PlaySpeedUpEffect
|
||||
.public PrepareItemForPrinting__02345728
|
||||
.public SafeguardIsActive
|
||||
.public SetPreprocessorArgsIdVal
|
||||
.public SPEED_BOOST_TURN_RANGE
|
||||
.public SPEED_LOWER_TURN_RANGE
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public UpdateStatusIconFlags
|
||||
@@ -1,687 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_0202AB94.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_0202AB94
|
||||
sub_0202AB94: ; 0x0202AB94
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r1
|
||||
bl GetWindowContents
|
||||
mov r1, r4
|
||||
add r0, r0, #4
|
||||
bl sub_02032684
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end sub_0202AB94
|
||||
|
||||
arm_func_start GetSimpleMenuResult__0202AEA4
|
||||
GetSimpleMenuResult__0202AEA4: ; 0x0202ABB0
|
||||
stmdb sp!, {r4, lr}
|
||||
bl GetWindowContents
|
||||
ldrb r1, [r0, #0x1a0]
|
||||
ldr r4, [r0, #0x198]
|
||||
cmp r1, #0
|
||||
beq _0202ABF4
|
||||
ldrb r1, [r0, #0x1a1]
|
||||
add r0, r0, #4
|
||||
cmp r1, #0
|
||||
beq _0202ABE0
|
||||
bl GetTotalNumMenuItems
|
||||
b _0202ABE4
|
||||
_0202ABE0:
|
||||
bl GetSelectedMenuItemIdx
|
||||
_0202ABE4:
|
||||
add r0, r0, r0, lsl #6
|
||||
add r0, r4, r0, lsl #2
|
||||
ldr r0, [r0, #0x100]
|
||||
ldmia sp!, {r4, pc}
|
||||
_0202ABF4:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end GetSimpleMenuResult__0202AEA4
|
||||
|
||||
arm_func_start UpdateParentMenu
|
||||
UpdateParentMenu: ; 0x0202ABFC
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #0x30
|
||||
mov r6, r0
|
||||
ldr r4, [r6, #0xc]
|
||||
ldr r0, [r4, #0x19c]
|
||||
cmp r0, #7
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _0202AF6C
|
||||
_0202AC1C: ; jump table
|
||||
b _0202AC3C ; case 0
|
||||
b _0202AC5C ; case 1
|
||||
b _0202AC78 ; case 2
|
||||
b _0202ACDC ; case 3
|
||||
b _0202AD3C ; case 4
|
||||
b _0202AEE8 ; case 5
|
||||
b _0202AEF8 ; case 6
|
||||
b _0202AF40 ; case 7
|
||||
_0202AC3C:
|
||||
ldrsb r0, [r6, #0x10]
|
||||
bl sub_0202810C
|
||||
cmp r0, #0
|
||||
beq _0202AF6C
|
||||
ldr r1, [r4, #0x1a8]
|
||||
mov r0, #2
|
||||
str r1, [r4, #0x1ac]
|
||||
str r0, [r4, #0x19c]
|
||||
_0202AC5C:
|
||||
ldr r0, [r4, #0x19c]
|
||||
cmp r0, #1
|
||||
ldreq r1, [r4, #0x1a8]
|
||||
moveq r0, #2
|
||||
streq r1, [r4, #0x1ac]
|
||||
streq r0, [r4, #0x19c]
|
||||
beq _0202AF6C
|
||||
_0202AC78:
|
||||
ldr r0, [r4, #0x1a8]
|
||||
cmp r0, #0
|
||||
ble _0202ACD4
|
||||
ldr r0, [r4, #0x1ac]
|
||||
mov r1, #0x4000000
|
||||
cmp r0, #0
|
||||
subgt r0, r0, #1
|
||||
strgt r0, [r4, #0x1ac]
|
||||
ldr r0, [r4, #0x1ac]
|
||||
cmp r0, #0
|
||||
add r0, r4, #4
|
||||
ble _0202ACD0
|
||||
bl sub_02031C74
|
||||
mov r1, #0
|
||||
strb r1, [r4, #0x1a0]
|
||||
strb r1, [r4, #0x1a1]
|
||||
str r1, [r4, #0x1a4]
|
||||
sub r1, r1, #1
|
||||
mov r0, r6
|
||||
str r1, [r6, #0xb8]
|
||||
bl sub_0202AF78
|
||||
b _0202AF6C
|
||||
_0202ACD0:
|
||||
bl sub_02031C84
|
||||
_0202ACD4:
|
||||
mov r0, #3
|
||||
str r0, [r4, #0x19c]
|
||||
_0202ACDC:
|
||||
mov r0, r6
|
||||
bl sub_0202AF78
|
||||
ldr r0, [r4, #0xfc]
|
||||
tst r0, #0x800000
|
||||
beq _0202AD18
|
||||
mov r0, #9
|
||||
str r0, [r4, #0x19c]
|
||||
mov r1, #1
|
||||
mov r0, #0
|
||||
strb r1, [r4, #0x1a0]
|
||||
strb r0, [r4, #0x1a1]
|
||||
str r0, [r4, #0x1a4]
|
||||
sub r0, r0, #4
|
||||
str r0, [r6, #0xb8]
|
||||
b _0202AF6C
|
||||
_0202AD18:
|
||||
mov r1, #4
|
||||
mov r0, #0
|
||||
str r1, [r4, #0x19c]
|
||||
strb r0, [r4, #0x1a0]
|
||||
strb r0, [r4, #0x1a1]
|
||||
str r0, [r4, #0x1a4]
|
||||
sub r0, r0, #1
|
||||
str r0, [r6, #0xb8]
|
||||
b _0202AF6C
|
||||
_0202AD3C:
|
||||
add r1, sp, #8
|
||||
add r2, sp, #0xc
|
||||
add r0, r4, #4
|
||||
mov r3, #1
|
||||
bl sub_02031C98
|
||||
ldr r1, [sp, #8]
|
||||
mov r5, r0
|
||||
cmp r1, #0
|
||||
bne _0202ADAC
|
||||
ldr r0, [r4, #0xfc]
|
||||
tst r0, #1
|
||||
beq _0202ADAC
|
||||
mov r3, #0
|
||||
ldr r2, _0202AF74 ; =0x00000408
|
||||
add r1, sp, #0xc
|
||||
str r3, [sp]
|
||||
mov ip, #1
|
||||
add r0, r4, #4
|
||||
str ip, [sp, #4]
|
||||
bl sub_02032160
|
||||
movs r1, r0
|
||||
bmi _0202ADAC
|
||||
add r0, r4, #4
|
||||
bl sub_02032684
|
||||
ldr r0, [sp, #8]
|
||||
mov r5, #1
|
||||
orr r0, r0, #1
|
||||
str r0, [sp, #8]
|
||||
_0202ADAC:
|
||||
ldr r0, [sp, #8]
|
||||
cmp r0, #0
|
||||
bne _0202ADCC
|
||||
add r1, sp, #8
|
||||
add r2, sp, #0xc
|
||||
add r0, r4, #4
|
||||
bl sub_02033758
|
||||
orr r5, r5, r0
|
||||
_0202ADCC:
|
||||
add r0, r4, #4
|
||||
bl GetSelectedMenuItemIdx
|
||||
mov r2, r0
|
||||
ldr r1, [sp, #8]
|
||||
add r0, r4, #4
|
||||
mov r3, #0
|
||||
bl sub_020323F8
|
||||
orrs r0, r5, r0
|
||||
beq _0202ADF8
|
||||
mov r0, r6
|
||||
bl sub_0202AF78
|
||||
_0202ADF8:
|
||||
ldr r1, [sp, #8]
|
||||
tst r1, #1
|
||||
beq _0202AE68
|
||||
add r0, r4, #4
|
||||
bl IsMenuOptionActive
|
||||
cmp r0, #0
|
||||
beq _0202AE58
|
||||
ldr r0, [r4, #0xfc]
|
||||
tst r0, #0x80000000
|
||||
bne _0202AE2C
|
||||
add r0, r4, #4
|
||||
mov r1, #0
|
||||
bl PlayWindowInputSound
|
||||
_0202AE2C:
|
||||
mov r1, #1
|
||||
mov r0, #0
|
||||
strb r1, [r4, #0x1a0]
|
||||
strb r0, [r4, #0x1a1]
|
||||
ldr r1, [sp, #8]
|
||||
sub r0, r0, #4
|
||||
str r1, [r4, #0x1a4]
|
||||
str r0, [r6, #0xb8]
|
||||
mov r0, #5
|
||||
str r0, [r4, #0x19c]
|
||||
b _0202AED8
|
||||
_0202AE58:
|
||||
add r0, r4, #4
|
||||
mov r1, #2
|
||||
bl PlayWindowInputSound
|
||||
b _0202AED8
|
||||
_0202AE68:
|
||||
tst r1, #2
|
||||
add r0, r4, #4
|
||||
beq _0202AEA4
|
||||
mov r1, #1
|
||||
bl PlayWindowInputSound
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x1a0]
|
||||
strb r0, [r4, #0x1a1]
|
||||
ldr r1, [sp, #8]
|
||||
sub r0, r0, #6
|
||||
str r1, [r4, #0x1a4]
|
||||
str r0, [r6, #0xb8]
|
||||
mov r0, #5
|
||||
str r0, [r4, #0x19c]
|
||||
b _0202AED8
|
||||
_0202AEA4:
|
||||
bl sub_0203250C
|
||||
cmp r0, #0
|
||||
beq _0202AED8
|
||||
mov r1, #1
|
||||
mov r0, #0
|
||||
strb r1, [r4, #0x1a0]
|
||||
strb r0, [r4, #0x1a1]
|
||||
ldr r1, [sp, #8]
|
||||
sub r0, r0, #4
|
||||
str r1, [r4, #0x1a4]
|
||||
str r0, [r6, #0xb8]
|
||||
mov r0, #5
|
||||
str r0, [r4, #0x19c]
|
||||
_0202AED8:
|
||||
ldrsb r0, [r6, #0x10]
|
||||
add r1, r4, #4
|
||||
bl sub_02028948
|
||||
b _0202AF6C
|
||||
_0202AEE8:
|
||||
add r0, r4, #4
|
||||
bl sub_02032070
|
||||
cmp r0, #0
|
||||
bne _0202AF6C
|
||||
_0202AEF8:
|
||||
ldrb r0, [r4, #0x1a1]
|
||||
cmp r0, #0
|
||||
bne _0202AF24
|
||||
ldr r0, [r4, #0xfc]
|
||||
tst r0, #0x400000
|
||||
beq _0202AF38
|
||||
mov r0, r6
|
||||
bl sub_0202AF78
|
||||
mov r0, #9
|
||||
str r0, [r4, #0x19c]
|
||||
b _0202AF6C
|
||||
_0202AF24:
|
||||
ldrb r0, [r4, #0x1b0]
|
||||
cmp r0, #0
|
||||
movne r0, #9
|
||||
strne r0, [r4, #0x19c]
|
||||
bne _0202AF6C
|
||||
_0202AF38:
|
||||
mov r0, #7
|
||||
str r0, [r4, #0x19c]
|
||||
_0202AF40:
|
||||
ldrsb r0, [r6, #0x10]
|
||||
bl sub_0202812C
|
||||
cmp r0, #0
|
||||
beq _0202AF6C
|
||||
ldrb r0, [r4, #0x1a1]
|
||||
cmp r0, #0
|
||||
mvnne r0, #4
|
||||
mvneq r0, #3
|
||||
str r0, [r6, #0xb8]
|
||||
mov r0, #8
|
||||
str r0, [r4, #0x19c]
|
||||
_0202AF6C:
|
||||
add sp, sp, #0x30
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0202AF74: .word 0x00000408
|
||||
arm_func_end UpdateParentMenu
|
||||
|
||||
arm_func_start sub_0202AF78
|
||||
sub_0202AF78: ; 0x0202AF78
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov sl, r0
|
||||
ldr r5, [sl, #0xc]
|
||||
mov r7, #0
|
||||
ldr r0, [r5, #0xfc]
|
||||
ldr r6, [r5, #0x198]
|
||||
tst r0, #0x200
|
||||
ldrne r8, [r5, #0x160]
|
||||
ldrsb r0, [sl, #0x10]
|
||||
moveq r8, #0
|
||||
bl sub_02027B1C
|
||||
mov fp, #1
|
||||
mov r4, r7
|
||||
b _0202B008
|
||||
_0202AFB0:
|
||||
mov r1, r4
|
||||
cmp r8, #0
|
||||
beq _0202AFCC
|
||||
ldrb r0, [r8]
|
||||
add r8, r8, #1
|
||||
tst r0, #2
|
||||
movne r1, fp
|
||||
_0202AFCC:
|
||||
cmp r1, #0
|
||||
movne sb, #0x42
|
||||
moveq sb, #0x44
|
||||
mov r1, r7
|
||||
add r0, r5, #4
|
||||
bl GetPageItemYOffset
|
||||
and r1, sb, #0xff
|
||||
str r1, [sp]
|
||||
mov r2, r0
|
||||
ldrsb r0, [sl, #0x10]
|
||||
mov r1, #0xd
|
||||
mov r3, r6
|
||||
bl sub_020263C8
|
||||
add r7, r7, #1
|
||||
add r6, r6, #0x104
|
||||
_0202B008:
|
||||
mov r0, r6
|
||||
bl IsEmptyString
|
||||
cmp r0, #0
|
||||
beq _0202AFB0
|
||||
ldrsb r1, [sl, #0x10]
|
||||
add r0, r5, #4
|
||||
bl sub_0202A03C
|
||||
ldrsb r0, [sl, #0x10]
|
||||
bl UpdateWindow
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
arm_func_end sub_0202AF78
|
||||
|
||||
arm_func_start sub_0202B030
|
||||
sub_0202B030: ; 0x0202B030
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
bl GetWindowContents
|
||||
mov r4, r0
|
||||
add r0, r4, #4
|
||||
bl IsMenuOptionActive
|
||||
cmp r0, #0
|
||||
beq _0202B094
|
||||
ldr r0, [r4, #0xfc]
|
||||
tst r0, #0x80000000
|
||||
bne _0202B068
|
||||
add r0, r4, #4
|
||||
mov r1, #0
|
||||
bl PlayWindowInputSound
|
||||
_0202B068:
|
||||
mov r2, #1
|
||||
mov r1, #0
|
||||
strb r2, [r4, #0x1a0]
|
||||
strb r1, [r4, #0x1a1]
|
||||
mov r0, r5
|
||||
sub r1, r1, #4
|
||||
str r2, [r4, #0x1a4]
|
||||
bl sub_0202830C
|
||||
mov r0, #6
|
||||
str r0, [r4, #0x19c]
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_0202B094:
|
||||
add r0, r4, #4
|
||||
mov r1, #2
|
||||
bl PlayWindowInputSound
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end sub_0202B030
|
||||
|
||||
arm_func_start sub_0202B0A4
|
||||
sub_0202B0A4: ; 0x0202B0A4
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r1
|
||||
bl GetWindowContents
|
||||
mov r4, r0
|
||||
cmp r5, #0
|
||||
add r0, r4, #4
|
||||
mov r1, #0xb000000
|
||||
beq _0202B0D8
|
||||
bl sub_02031C74
|
||||
add r0, r4, #4
|
||||
mov r1, #0x10
|
||||
bl sub_02031C84
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_0202B0D8:
|
||||
bl sub_02031C84
|
||||
add r0, r4, #4
|
||||
mov r1, #0x10
|
||||
bl sub_02031C74
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end sub_0202B0A4
|
||||
|
||||
arm_func_start CreateSimpleMenuFromStringIds
|
||||
CreateSimpleMenuFromStringIds: ; 0x0202B0EC
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov r7, r3
|
||||
mov sb, r1
|
||||
mov r8, r2
|
||||
mov sl, r0
|
||||
mov r1, r7
|
||||
mov r2, #0
|
||||
b _0202B114
|
||||
_0202B10C:
|
||||
add r1, r1, #8
|
||||
add r2, r2, #1
|
||||
_0202B114:
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #0
|
||||
bne _0202B10C
|
||||
add r0, r2, #1
|
||||
add r0, r0, r0, lsl #6
|
||||
mov r0, r0, lsl #2
|
||||
mov r1, #8
|
||||
bl MemAlloc
|
||||
mov r5, r0
|
||||
mov r6, r5
|
||||
mov r4, #0
|
||||
mov fp, #0x100
|
||||
b _0202B16C
|
||||
_0202B148:
|
||||
ldr r3, _0202B1A8 ; =0x0000C402
|
||||
mov r0, r6
|
||||
mov r1, fp
|
||||
str r4, [sp]
|
||||
bl PreprocessStringFromId
|
||||
ldr r0, [r7, #4]
|
||||
add r7, r7, #8
|
||||
str r0, [r6, #0x100]
|
||||
add r6, r6, #0x104
|
||||
_0202B16C:
|
||||
ldrh r2, [r7]
|
||||
cmp r2, #0
|
||||
bne _0202B148
|
||||
mov r0, #0
|
||||
strb r0, [r6]
|
||||
ldr r0, [r7, #4]
|
||||
ldr r4, [sp, #0x28]
|
||||
str r0, [r6, #0x100]
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r2, r8
|
||||
mov r3, r5
|
||||
str r4, [sp]
|
||||
bl CreateSimpleMenuInternal
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0202B1A8: .word 0x0000C402
|
||||
arm_func_end CreateSimpleMenuFromStringIds
|
||||
|
||||
arm_func_start CreateSimpleMenu
|
||||
CreateSimpleMenu: ; 0x0202B1AC
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
||||
sub sp, sp, #4
|
||||
mov r6, r3
|
||||
mov sb, r0
|
||||
mov r8, r1
|
||||
mov r7, r2
|
||||
mov r4, r6
|
||||
mov r5, #0
|
||||
b _0202B1D8
|
||||
_0202B1D0:
|
||||
add r4, r4, #0x104
|
||||
add r5, r5, #1
|
||||
_0202B1D8:
|
||||
mov r0, r4
|
||||
bl IsEmptyString
|
||||
cmp r0, #0
|
||||
beq _0202B1D0
|
||||
add r0, r5, #1
|
||||
add r0, r0, r0, lsl #6
|
||||
mov r0, r0, lsl #2
|
||||
mov r1, #8
|
||||
bl MemAlloc
|
||||
mov r4, r0
|
||||
mov r5, r4
|
||||
b _0202B234
|
||||
_0202B208:
|
||||
mov sl, r6
|
||||
mov ip, r5
|
||||
add r6, r6, #0x104
|
||||
add r5, r5, #0x104
|
||||
mov lr, #0x10
|
||||
_0202B21C:
|
||||
ldmia sl!, {r0, r1, r2, r3}
|
||||
stmia ip!, {r0, r1, r2, r3}
|
||||
subs lr, lr, #1
|
||||
bne _0202B21C
|
||||
ldr r0, [sl]
|
||||
str r0, [ip]
|
||||
_0202B234:
|
||||
mov r0, r6
|
||||
bl IsEmptyString
|
||||
cmp r0, #0
|
||||
beq _0202B208
|
||||
mov ip, #0x10
|
||||
_0202B248:
|
||||
ldmia r6!, {r0, r1, r2, r3}
|
||||
stmia r5!, {r0, r1, r2, r3}
|
||||
subs ip, ip, #1
|
||||
bne _0202B248
|
||||
ldr r0, [r6]
|
||||
ldr r6, [sp, #0x28]
|
||||
str r0, [r5]
|
||||
mov r0, sb
|
||||
mov r1, r8
|
||||
mov r2, r7
|
||||
mov r3, r4
|
||||
str r6, [sp]
|
||||
bl CreateSimpleMenuInternal
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
arm_func_end CreateSimpleMenu
|
||||
|
||||
arm_func_start CreateSimpleMenuInternal
|
||||
CreateSimpleMenuInternal: ; 0x0202B284
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0x2c
|
||||
mov r6, r0
|
||||
mov sl, r1
|
||||
mov r0, #0x1b4
|
||||
mov r1, #8
|
||||
mov sb, r2
|
||||
mov r8, r3
|
||||
bl MemAlloc
|
||||
tst sl, #0x20
|
||||
ldrne r7, [sb]
|
||||
mov fp, #0
|
||||
moveq r7, #0
|
||||
cmp r6, #0
|
||||
str fp, [sp, #8]
|
||||
mov r4, r0
|
||||
addne ip, sp, #0x1c
|
||||
ldmneia r6, {r0, r1, r2, r3}
|
||||
stmneia ip, {r0, r1, r2, r3}
|
||||
ldrne r0, _0202B488 ; =UpdateSimpleMenu
|
||||
mov r5, r8
|
||||
orr sl, sl, #0x8000
|
||||
strne r0, [sp, #0x1c]
|
||||
bne _0202B2F8
|
||||
ldr r0, _0202B48C ; =SIMPLE_MENU_DEFAULT_WINDOW_PARAMS
|
||||
add r6, sp, #0x1c
|
||||
ldmia r0, {r0, r1, r2, r3}
|
||||
stmia r6, {r0, r1, r2, r3}
|
||||
orr sl, sl, #0x300000
|
||||
_0202B2F8:
|
||||
ldrb r0, [sp, #0x22]
|
||||
str r4, [sp, #0x28]
|
||||
cmp r0, #0
|
||||
bne _0202B348
|
||||
mov r6, #0
|
||||
b _0202B324
|
||||
_0202B310:
|
||||
mov r0, r5
|
||||
bl sub_020265A8
|
||||
cmp r0, r6
|
||||
movgt r6, r0
|
||||
add r5, r5, #0x104
|
||||
_0202B324:
|
||||
mov r0, r5
|
||||
bl IsEmptyString
|
||||
cmp r0, #0
|
||||
beq _0202B310
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
add r2, r6, #0x10
|
||||
bl sub_02031A5C
|
||||
strb r0, [sp, #0x22]
|
||||
_0202B348:
|
||||
mov r5, r8
|
||||
b _0202B36C
|
||||
_0202B350:
|
||||
ldr r0, [r5, #0x100]
|
||||
add r5, r5, #0x104
|
||||
cmp r0, r7
|
||||
ldr r0, [sp, #8]
|
||||
ldreq fp, [sp, #8]
|
||||
add r0, r0, #1
|
||||
str r0, [sp, #8]
|
||||
_0202B36C:
|
||||
mov r0, r5
|
||||
bl IsEmptyString
|
||||
cmp r0, #0
|
||||
beq _0202B350
|
||||
ldr r0, [sp, #0x50]
|
||||
add r2, sp, #8
|
||||
cmp r0, #0
|
||||
ldrle r0, [sp, #8]
|
||||
add r3, sp, #0x50
|
||||
strle r0, [sp, #0x50]
|
||||
ldrb r0, [sp, #0x23]
|
||||
cmp r0, #0
|
||||
mov r0, sl
|
||||
bne _0202B3B4
|
||||
mov r1, sb
|
||||
bl CalcMenuHeightDiv8__02031AA4
|
||||
strb r0, [sp, #0x23]
|
||||
b _0202B3BC
|
||||
_0202B3B4:
|
||||
mov r1, sb
|
||||
bl CalcMenuHeightDiv8__02031AA4
|
||||
_0202B3BC:
|
||||
tst sl, #0x200000
|
||||
ldrneb r1, [sp, #0x20]
|
||||
ldrneb r0, [sp, #0x22]
|
||||
subne r0, r1, r0
|
||||
strneb r0, [sp, #0x20]
|
||||
tst sl, #0x100000
|
||||
ldrneb r1, [sp, #0x21]
|
||||
ldrneb r0, [sp, #0x23]
|
||||
subne r0, r1, r0
|
||||
strneb r0, [sp, #0x21]
|
||||
ldr r0, _0202B488 ; =UpdateSimpleMenu
|
||||
cmp sb, #0
|
||||
str r0, [r4]
|
||||
str sl, [r4, #0xfc]
|
||||
beq _0202B418
|
||||
add r6, r4, #0x100
|
||||
mov r5, #9
|
||||
_0202B400:
|
||||
ldmia sb!, {r0, r1, r2, r3}
|
||||
stmia r6!, {r0, r1, r2, r3}
|
||||
subs r5, r5, #1
|
||||
bne _0202B400
|
||||
ldmia sb, {r0, r1}
|
||||
stmia r6, {r0, r1}
|
||||
_0202B418:
|
||||
str fp, [r4, #0x100]
|
||||
str r8, [r4, #0x198]
|
||||
mov r2, #0
|
||||
str r2, [r4, #0x19c]
|
||||
strb r2, [r4, #0x1a0]
|
||||
strb r2, [r4, #0x1a1]
|
||||
str r2, [r4, #0x1a4]
|
||||
str r2, [r4, #0x1ac]
|
||||
str r2, [r4, #0x1b0]
|
||||
add r0, sp, #0x1c
|
||||
mov r1, #3
|
||||
strb r2, [sp, #0x24]
|
||||
bl NewWindowScreenCheck
|
||||
add r1, sp, #0xc
|
||||
mov r6, r0
|
||||
bl GetWindowRectangle
|
||||
ldr r0, [sp, #8]
|
||||
add r3, sp, #0xc
|
||||
str r0, [sp]
|
||||
ldr r5, [sp, #0x50]
|
||||
mov r1, sl
|
||||
add r0, r4, #4
|
||||
add r2, r4, #0x100
|
||||
str r5, [sp, #4]
|
||||
bl InitWindowInput
|
||||
mov r0, r6
|
||||
add sp, sp, #0x2c
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0202B488: .word UpdateSimpleMenu
|
||||
_0202B48C: .word SIMPLE_MENU_DEFAULT_WINDOW_PARAMS
|
||||
arm_func_end CreateSimpleMenuInternal
|
||||
|
||||
arm_func_start ResumeSimpleMenu
|
||||
ResumeSimpleMenu: ; 0x0202B490
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetWindowContents
|
||||
mov r1, #1
|
||||
str r1, [r0, #0x19c]
|
||||
mov r1, #0
|
||||
strb r1, [r0, #0x1a0]
|
||||
strb r1, [r0, #0x1a1]
|
||||
ldr r1, [r0, #0xfc]
|
||||
bic r1, r1, #0x800000
|
||||
str r1, [r0, #0xfc]
|
||||
add r0, r0, #4
|
||||
bl sub_02032984
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ResumeSimpleMenu
|
||||
@@ -1,657 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_022E7EC4.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start AllocTopScreenStatus
|
||||
AllocTopScreenStatus: ; 0x022E7EC4
|
||||
stmdb sp!, {r3, lr}
|
||||
mov r0, #0x230
|
||||
mov r1, #0
|
||||
bl MemAlloc
|
||||
ldr r2, _022E7F40 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r1, #0x230
|
||||
str r0, [r2]
|
||||
bl MemZero
|
||||
ldr r0, _022E7F40 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r2, #0
|
||||
ldr r1, [r0]
|
||||
strb r2, [r1]
|
||||
ldr r1, [r0]
|
||||
strb r2, [r1, #0x29]
|
||||
ldr r1, [r0]
|
||||
strb r2, [r1, #0x2c]
|
||||
ldr r1, [r0]
|
||||
strb r2, [r1, #0x2b]
|
||||
ldr r1, [r0]
|
||||
str r2, [r1, #4]
|
||||
ldr r0, [r0]
|
||||
strb r2, [r0, #0x228]
|
||||
bl ov29_022E8708
|
||||
ldr r0, _022E7F40 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r3, #2
|
||||
ldr r2, [r0]
|
||||
mov r1, #0
|
||||
str r3, [r2, #4]
|
||||
ldr r0, [r0]
|
||||
strb r1, [r0, #0x229]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E7F40: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end AllocTopScreenStatus
|
||||
|
||||
arm_func_start FreeTopScreenStatus
|
||||
FreeTopScreenStatus: ; 0x022E7F44
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E7F78 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
bl FreeTopScreen
|
||||
ldr r0, _022E7F78 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
bl MemFree
|
||||
ldr r0, _022E7F78 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r1, #0
|
||||
str r1, [r0]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E7F78: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end FreeTopScreenStatus
|
||||
|
||||
arm_func_start ov29_022E7F7C
|
||||
ov29_022E7F7C: ; 0x022E7F7C
|
||||
ldr r0, _022E7F90 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
strb r1, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_022E7F90: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E7F7C
|
||||
|
||||
arm_func_start ov29_022E7F94
|
||||
ov29_022E7F94: ; 0x022E7F94
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E8014 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r3, #0
|
||||
ldr r2, [r0]
|
||||
mov r1, #1
|
||||
strb r3, [r2, #0x228]
|
||||
ldr r0, [r0]
|
||||
strb r1, [r0]
|
||||
bl ov29_02339138
|
||||
mov r0, #1
|
||||
mov r1, r0
|
||||
bl ov29_02339D7C
|
||||
bl UpdateMinimap
|
||||
mov r0, #0
|
||||
bl SetMinimapDataE447
|
||||
ldr r1, _022E8014 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r0, #1
|
||||
ldr r1, [r1]
|
||||
strb r0, [r1]
|
||||
bl SetMinimapDataE448
|
||||
bl ov29_022E8104
|
||||
bl GetPlayerGender
|
||||
cmp r0, #2
|
||||
ldr r0, _022E8014 ; =TOP_SCREEN_STATUS_PTR
|
||||
moveq r1, #1
|
||||
ldr r0, [r0]
|
||||
movne r1, #0
|
||||
and r1, r1, #0xff
|
||||
add r0, r0, #0xb8
|
||||
bl ov29_022DC738
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E8014: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E7F94
|
||||
|
||||
arm_func_start ov29_022E8018
|
||||
ov29_022E8018: ; 0x022E8018
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E8050 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, #0x228]
|
||||
cmp r0, #0
|
||||
beq _022E8048
|
||||
bl ov29_022DC76C
|
||||
bl ov29_022DC778
|
||||
ldr r0, _022E8050 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
strb r1, [r0, #0x228]
|
||||
_022E8048:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E8050: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E8018
|
||||
|
||||
arm_func_start ov29_022E8054
|
||||
ov29_022E8054: ; 0x022E8054
|
||||
stmdb sp!, {r3, lr}
|
||||
ldrb r1, [r0, #0x10]
|
||||
cmp r1, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
mov r1, #0
|
||||
strb r1, [r0, #0x10]
|
||||
bl GetTopScreenOption
|
||||
cmp r0, #3
|
||||
ldrne r0, _022E80CC ; =TOP_SCREEN_STATUS_PTR
|
||||
movne r1, #0
|
||||
ldrne r0, [r0]
|
||||
strneb r1, [r0]
|
||||
ldmneia sp!, {r3, pc}
|
||||
ldr r0, _022E80CC ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, pc}
|
||||
bl ov29_02339138
|
||||
mov r0, #0
|
||||
mov r1, #1
|
||||
bl ov29_0233A0E8
|
||||
mov r0, #1
|
||||
mov r1, #0
|
||||
bl ov29_02339D7C
|
||||
ldr r0, _022E80CC ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r1, #1
|
||||
ldr r0, [r0]
|
||||
strb r1, [r0]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E80CC: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E8054
|
||||
|
||||
arm_func_start ov29_022E80D0
|
||||
ov29_022E80D0: ; 0x022E80D0
|
||||
stmdb sp!, {r3, lr}
|
||||
bl ov29_022DC77C
|
||||
ldr r1, _022E8100 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r0, #0
|
||||
ldr r1, [r1]
|
||||
strb r0, [r1]
|
||||
bl SetMinimapDataE448
|
||||
mov r0, #1
|
||||
bl ov29_0233A1BC
|
||||
bl ov29_02339138
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E8100: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E80D0
|
||||
|
||||
arm_func_start ov29_022E8104
|
||||
ov29_022E8104: ; 0x022E8104
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E812C ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r2, #0
|
||||
ldr r1, [r0]
|
||||
strb r2, [r1, #0x228]
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0xb8
|
||||
bl ov10_022C1E50
|
||||
bl ov29_022E8CE8
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E812C: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E8104
|
||||
|
||||
arm_func_start InitializeTeamStats
|
||||
InitializeTeamStats: ; 0x022E8130
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E818C ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r2, #0
|
||||
ldr r1, [r0]
|
||||
strb r2, [r1, #0x228]
|
||||
ldr r0, [r0]
|
||||
strb r2, [r0, #0x229]
|
||||
bl ov29_022E8104
|
||||
ldr r0, _022E818C ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r1, #1
|
||||
ldr r0, [r0]
|
||||
strb r1, [r0, #0x24]
|
||||
bl GetPlayerGender
|
||||
cmp r0, #2
|
||||
ldr r0, _022E818C ; =TOP_SCREEN_STATUS_PTR
|
||||
moveq r1, #1
|
||||
ldr r0, [r0]
|
||||
movne r1, #0
|
||||
and r1, r1, #0xff
|
||||
add r0, r0, #0xb8
|
||||
bl ov29_022DC694
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E818C: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end InitializeTeamStats
|
||||
|
||||
arm_func_start UpdateTeamStatsWrapper
|
||||
UpdateTeamStatsWrapper: ; 0x022E8190
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E81C4 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, #0x228]
|
||||
cmp r0, #0
|
||||
beq _022E81BC
|
||||
bl ov29_022DC6D0
|
||||
ldr r0, _022E81C4 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
strb r1, [r0, #0x228]
|
||||
_022E81BC:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E81C4: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end UpdateTeamStatsWrapper
|
||||
|
||||
arm_func_start ov29_022E81C8
|
||||
ov29_022E81C8: ; 0x022E81C8
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl ov29_022DC6DC
|
||||
ldrb r0, [r4, #0x10]
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
strneb r0, [r4, #0x10]
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end ov29_022E81C8
|
||||
|
||||
arm_func_start FreeTeamStatsWrapper
|
||||
FreeTeamStatsWrapper: ; 0x022E81E8
|
||||
stmdb sp!, {r3, lr}
|
||||
bl ov29_022DC728
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end FreeTeamStatsWrapper
|
||||
|
||||
arm_func_start ov29_022E81F8
|
||||
ov29_022E81F8: ; 0x022E81F8
|
||||
stmdb sp!, {r3, lr}
|
||||
bl IsTeamStatsOnTopScreen
|
||||
cmp r0, #0
|
||||
bne _022E8210
|
||||
bl ov29_022E8104
|
||||
ldmia sp!, {r3, pc}
|
||||
_022E8210:
|
||||
bl GetTopScreenOption
|
||||
cmp r0, #1
|
||||
bne _022E8238
|
||||
ldr r0, _022E8240 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
ldrsh r0, [r0, #8]
|
||||
cmp r0, #1
|
||||
beq _022E8238
|
||||
mov r0, #1
|
||||
bl DungeonChangeTopScreenType
|
||||
_022E8238:
|
||||
bl ov29_022E8CE8
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E8240: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E81F8
|
||||
|
||||
arm_func_start ov29_022E8244
|
||||
ov29_022E8244: ; 0x022E8244
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetTopScreenOption
|
||||
cmp r0, #4
|
||||
ldreq r0, _022E826C ; =TOP_SCREEN_STATUS_PTR
|
||||
ldreq r0, [r0]
|
||||
ldreqsh r0, [r0, #8]
|
||||
cmpeq r0, #4
|
||||
ldmneia sp!, {r3, pc}
|
||||
bl ov29_022E9008
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E826C: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E8244
|
||||
|
||||
arm_func_start DisplayTeamStatsSprite
|
||||
DisplayTeamStatsSprite: ; 0x022E8270
|
||||
#ifdef JAPAN
|
||||
#define OV29_022E8270_OFFSET -0xA4
|
||||
#else
|
||||
#define OV29_022E8270_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0x1c
|
||||
ldr r3, _022E83FC ; =TOP_SCREEN_STATUS_PTR
|
||||
mov sl, r0
|
||||
ldr r3, [r3]
|
||||
mov sb, r1
|
||||
mov fp, r2
|
||||
cmp r3, #0
|
||||
beq _022E83F4
|
||||
ldr r8, [sl, #0xb4]
|
||||
bl GetIdleAnimationId
|
||||
ldr r1, _022E8400 ; =DUNGEON_PTR
|
||||
mov r4, r0
|
||||
ldr r1, [r1]
|
||||
mov r5, #0
|
||||
add r1, r1, #0x1a000
|
||||
ldr r0, [r1, #0x22c + OV29_022E8270_OFFSET]
|
||||
mov r6, r5
|
||||
cmp r0, sl
|
||||
ldrsh r0, [sl, #0xa8]
|
||||
mov r7, r5
|
||||
str r0, [sp, #0x18]
|
||||
moveq r0, r5
|
||||
ldrneb r0, [r1, #0x245 + OV29_022E8270_OFFSET]
|
||||
cmp r0, #0
|
||||
bne _022E82E4
|
||||
ldrb r0, [r8, #0xd8]
|
||||
cmp r0, #2
|
||||
bne _022E82F0
|
||||
_022E82E4:
|
||||
ldr r0, _022E8404 ; =0x00000229
|
||||
bl DungeonGetSpriteIndex
|
||||
str r0, [sp, #0x18]
|
||||
_022E82F0:
|
||||
ldrb r0, [r8, #0xc4]
|
||||
cmp r0, #1
|
||||
cmpne r0, #6
|
||||
beq _022E8364
|
||||
ldr r0, _022E8400 ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, #0x78b]
|
||||
cmp r0, #0
|
||||
beq _022E832C
|
||||
bl ov29_0234B4E0
|
||||
cmp r0, #0
|
||||
addeq r0, r5, #2
|
||||
moveq r0, r0, lsl #0x10
|
||||
moveq r5, r0, asr #0x10
|
||||
beq _022E8354
|
||||
_022E832C:
|
||||
ldrb r0, [sl, #0xaf]
|
||||
cmp r0, #0
|
||||
cmpne r0, #7
|
||||
bne _022E8354
|
||||
ldr r0, [sl, #0xb4]
|
||||
#ifdef JAPAN
|
||||
ldr r0, [r0, #0x10c]
|
||||
#else
|
||||
ldr r0, [r0, #0x110]
|
||||
#endif
|
||||
cmp r0, #1
|
||||
addgt r0, r5, #1
|
||||
movgt r0, r0, lsl #0x10
|
||||
movgt r5, r0, asr #0x10
|
||||
_022E8354:
|
||||
add r0, r5, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r5, r0, asr #0x10
|
||||
b _022E8368
|
||||
_022E8364:
|
||||
mov r5, #0
|
||||
_022E8368:
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r8, #0x10a]
|
||||
#else
|
||||
ldrb r0, [r8, #0x10b]
|
||||
#endif
|
||||
cmp r0, #2
|
||||
beq _022E83A4
|
||||
ldrb r1, [r8, #0xc4]
|
||||
cmp r1, #6
|
||||
ldrneb r0, [r8, #0xbf]
|
||||
cmpne r0, #4
|
||||
cmpne r1, #2
|
||||
bne _022E83A4
|
||||
ldr r0, _022E8408 ; =DUNGEON_FRAMES_PASSED
|
||||
ldr r0, [r0]
|
||||
and r0, r0, #2
|
||||
add r0, r6, r0
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r6, r0, asr #0x10
|
||||
_022E83A4:
|
||||
ldrb r0, [r8, #0xef]
|
||||
cmp r0, #1
|
||||
ldreq r0, _022E8400 ; =DUNGEON_PTR
|
||||
ldreq r0, [r0]
|
||||
addeq r0, r0, #0x1a000
|
||||
ldreqb r0, [r0, #0x244 + OV29_022E8270_OFFSET]
|
||||
cmpeq r0, #0
|
||||
moveq r7, #1
|
||||
cmp r4, #0xff
|
||||
beq _022E83F4
|
||||
mov r0, #1
|
||||
stmia sp, {r0, sb, fp}
|
||||
str r5, [sp, #0xc]
|
||||
str r6, [sp, #0x10]
|
||||
str r7, [sp, #0x14]
|
||||
ldrsh r1, [r8, #4]
|
||||
ldr r3, [r8, #0xb0]
|
||||
ldr r0, [sp, #0x18]
|
||||
mov r2, r4
|
||||
bl ov29_022DC6E8
|
||||
_022E83F4:
|
||||
add sp, sp, #0x1c
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_022E83FC: .word TOP_SCREEN_STATUS_PTR
|
||||
_022E8400: .word DUNGEON_PTR
|
||||
_022E8404: .word 0x00000229
|
||||
_022E8408: .word DUNGEON_FRAMES_PASSED
|
||||
arm_func_end DisplayTeamStatsSprite
|
||||
|
||||
arm_func_start ov29_022E840C
|
||||
ov29_022E840C: ; 0x022E840C
|
||||
stmdb sp!, {lr}
|
||||
sub sp, sp, #0x14
|
||||
ldr r0, _022E8478 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, #0x29]
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
bne _022E8470
|
||||
add r0, sp, #0
|
||||
bl ov10_022C22A0
|
||||
ldr r0, _022E8478 ; =TOP_SCREEN_STATUS_PTR
|
||||
add r1, sp, #0
|
||||
ldr r0, [r0]
|
||||
mov r2, #0
|
||||
add r0, r0, #0x80
|
||||
mov r3, #1
|
||||
bl ov10_022C1E80
|
||||
bl sub_02048400
|
||||
cmp r0, #0
|
||||
beq _022E8460
|
||||
bl sub_02048384
|
||||
_022E8460:
|
||||
ldr r1, _022E8478 ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r0, #1
|
||||
ldr r1, [r1]
|
||||
strb r0, [r1, #0x29]
|
||||
_022E8470:
|
||||
add sp, sp, #0x14
|
||||
ldmia sp!, {pc}
|
||||
.align 2, 0
|
||||
_022E8478: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E840C
|
||||
|
||||
arm_func_start ov29_022E847C
|
||||
ov29_022E847C: ; 0x022E847C
|
||||
stmdb sp!, {r3, lr}
|
||||
ldrb r1, [r0, #0x10]
|
||||
cmp r1, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
mov r1, #0
|
||||
strb r1, [r0, #0x10]
|
||||
bl sub_020483B8
|
||||
ldr r0, _022E84AC ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C21D8
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E84AC: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E847C
|
||||
|
||||
arm_func_start ov29_022E84B0
|
||||
ov29_022E84B0: ; 0x022E84B0
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E84FC ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r1, [r0]
|
||||
ldrb r0, [r1, #0x29]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
add r0, r1, #0x80
|
||||
bl ov10_022C2278
|
||||
bl sub_02048400
|
||||
cmp r0, #0
|
||||
beq _022E84E4
|
||||
bl sub_020483D8
|
||||
_022E84E4:
|
||||
ldr r0, _022E84FC ; =TOP_SCREEN_STATUS_PTR
|
||||
mov r2, #0
|
||||
ldr r1, [r0]
|
||||
mov r0, #1
|
||||
strb r2, [r1, #0x29]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E84FC: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E84B0
|
||||
|
||||
arm_func_start InitDungeonControlsMenuWithBg
|
||||
InitDungeonControlsMenuWithBg: ; 0x022E8500
|
||||
stmdb sp!, {lr}
|
||||
sub sp, sp, #0x14
|
||||
add r0, sp, #0
|
||||
bl ov10_022C22A0
|
||||
ldr r0, _022E8548 ; =TOP_SCREEN_STATUS_PTR
|
||||
add r1, sp, #0
|
||||
ldr r0, [r0]
|
||||
mov r2, #0
|
||||
add r0, r0, #0x80
|
||||
mov r3, #1
|
||||
bl ov10_022C1E80
|
||||
ldr r0, _022E8548 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C21D8
|
||||
bl InitDungeonControlsMenu
|
||||
add sp, sp, #0x14
|
||||
ldmia sp!, {pc}
|
||||
.align 2, 0
|
||||
_022E8548: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end InitDungeonControlsMenuWithBg
|
||||
|
||||
arm_func_start ov29_022E854C
|
||||
ov29_022E854C: ; 0x022E854C
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
ldrb r0, [r4, #0x10]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
add r0, r4, #0x10
|
||||
bl ov29_022E8F78
|
||||
ldr r0, _022E8584 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C21D8
|
||||
mov r0, #0
|
||||
strb r0, [r4, #0x10]
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022E8584: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E854C
|
||||
|
||||
arm_func_start FreeDungeonControlsMenuWithBg
|
||||
FreeDungeonControlsMenuWithBg: ; 0x022E8588
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E85A4 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C2278
|
||||
bl FreeDungeonControlsMenu
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E85A4: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end FreeDungeonControlsMenuWithBg
|
||||
|
||||
arm_func_start ov29_022E85A8
|
||||
ov29_022E85A8: ; 0x022E85A8
|
||||
stmdb sp!, {lr}
|
||||
sub sp, sp, #0x14
|
||||
add r0, sp, #0
|
||||
bl ov10_022C22A0
|
||||
ldr r0, _022E85F0 ; =TOP_SCREEN_STATUS_PTR
|
||||
add r1, sp, #0
|
||||
ldr r0, [r0]
|
||||
mov r2, #0
|
||||
add r0, r0, #0x80
|
||||
mov r3, #1
|
||||
bl ov10_022C1E80
|
||||
ldr r0, _022E85F0 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C21D8
|
||||
bl ov29_022E8FCC
|
||||
add sp, sp, #0x14
|
||||
ldmia sp!, {pc}
|
||||
.align 2, 0
|
||||
_022E85F0: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E85A8
|
||||
|
||||
arm_func_start ov29_022E85F4
|
||||
ov29_022E85F4: ; 0x022E85F4
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
ldrb r0, [r4, #0x10]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
add r0, r4, #0x10
|
||||
bl ov29_022E9014
|
||||
ldr r0, _022E862C ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C21D8
|
||||
mov r0, #0
|
||||
strb r0, [r4, #0x10]
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022E862C: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E85F4
|
||||
|
||||
arm_func_start ov29_022E8630
|
||||
ov29_022E8630: ; 0x022E8630
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _022E864C ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C2278
|
||||
bl ov29_022E8FF8
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E864C: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E8630
|
||||
|
||||
arm_func_start ov29_022E8650
|
||||
ov29_022E8650: ; 0x022E8650
|
||||
stmdb sp!, {lr}
|
||||
sub sp, sp, #0x14
|
||||
add r0, sp, #0
|
||||
bl ov10_022C22A0
|
||||
ldr r0, _022E8698 ; =TOP_SCREEN_STATUS_PTR
|
||||
add r1, sp, #0
|
||||
ldr r0, [r0]
|
||||
mov r2, #0
|
||||
add r0, r0, #0x80
|
||||
mov r3, #1
|
||||
bl ov10_022C1E80
|
||||
ldr r0, _022E8698 ; =TOP_SCREEN_STATUS_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x80
|
||||
bl ov10_022C21D8
|
||||
mov r0, #1
|
||||
add sp, sp, #0x14
|
||||
ldmia sp!, {pc}
|
||||
.align 2, 0
|
||||
_022E8698: .word TOP_SCREEN_STATUS_PTR
|
||||
arm_func_end ov29_022E8650
|
||||
@@ -1,491 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_023055B0.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ov29_023055B0
|
||||
ov29_023055B0: ; 0x023055B0
|
||||
#ifdef JAPAN
|
||||
#define OV29_023055B0_OFFSET -4
|
||||
#else
|
||||
#define OV29_023055B0_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
mov r6, #0
|
||||
mov r5, #1
|
||||
ldr r4, _02305690 ; =DUNGEON_PTR
|
||||
b _02305684
|
||||
_023055C4:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r6, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r7, [r0, #0xad4]
|
||||
#else
|
||||
ldr r7, [r0, #0xb78]
|
||||
#endif
|
||||
mov r0, r7
|
||||
bl EntityIsValid__0230558C
|
||||
cmp r0, #0
|
||||
beq _02305680
|
||||
ldr r8, [r7, #0xb4]
|
||||
ldrb r0, [r8, #7]
|
||||
cmp r0, #0
|
||||
bne _02305680
|
||||
mov r0, r8
|
||||
bl IsTeamMemberOnFirstTurnInFixedRoom
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
add r0, r8, #0x100
|
||||
ldrsh r1, [r0, #0x7e + OV29_023055B0_OFFSET]
|
||||
cmp r1, #0
|
||||
ldreqsh r0, [r0, #0x80 + OV29_023055B0_OFFSET]
|
||||
cmpeq r0, #0
|
||||
beq _02305680
|
||||
ldrsh r0, [r7, #4]
|
||||
cmp r1, r0
|
||||
addeq r0, r8, #0x100
|
||||
ldreqsh r1, [r0, #0x80 + OV29_023055B0_OFFSET]
|
||||
ldreqsh r0, [r7, #6]
|
||||
cmpeq r1, r0
|
||||
beq _02305680
|
||||
mov r0, r7
|
||||
mov r1, r5
|
||||
bl CheckVariousStatuses2__02301244
|
||||
cmp r0, #0
|
||||
bne _02305680
|
||||
add r1, r8, #0x7e + OV29_023055B0_OFFSET
|
||||
add r0, r7, #4
|
||||
add r1, r1, #0x100
|
||||
bl GetDirectionTowardsPosition
|
||||
mov sb, r0
|
||||
and r1, sb, #7
|
||||
mov r0, r7
|
||||
strb r1, [r8, #0x4c]
|
||||
bl GetIdleAnimationId
|
||||
mov r1, r0
|
||||
mov r0, r7
|
||||
mov r2, sb
|
||||
bl ChangeMonsterAnimation
|
||||
_02305680:
|
||||
add r6, r6, #1
|
||||
_02305684:
|
||||
cmp r6, #0x14
|
||||
blt _023055C4
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_02305690: .word DUNGEON_PTR
|
||||
arm_func_end ov29_023055B0
|
||||
|
||||
arm_func_start CheckNonLeaderTile
|
||||
CheckNonLeaderTile: ; 0x02305694
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
mov sb, r0
|
||||
ldr r8, [sb, #0xb4]
|
||||
bl EntityIsValid__0230558C
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
mov r0, sb
|
||||
bl GetTileAtEntity
|
||||
mov r4, r0
|
||||
mov r0, sb
|
||||
mov r1, #0xd
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
ldrneb r0, [r8, #0xef]
|
||||
cmpne r0, #3
|
||||
beq _02305708
|
||||
mov r0, sb
|
||||
mov r1, #0x6f
|
||||
bl AbilityIsActiveVeneer
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
bne _023056F8
|
||||
mov r0, sb
|
||||
mov r1, #0x10
|
||||
bl HasHeldItem
|
||||
_023056F8:
|
||||
cmp r0, #0
|
||||
bne _02305708
|
||||
add r0, sb, #4
|
||||
bl ov29_02337D68
|
||||
_02305708:
|
||||
ldr r4, [r4, #0x10]
|
||||
cmp r4, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
ldr r0, [r4]
|
||||
cmp r0, #6
|
||||
addls pc, pc, r0, lsl #2
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_02305724: ; jump table
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} ; case 0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} ; case 1
|
||||
b _02305740 ; case 2
|
||||
b _02305808 ; case 3
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} ; case 4
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} ; case 5
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} ; case 6
|
||||
_02305740:
|
||||
mov r0, r4
|
||||
bl GetTrapInfo
|
||||
ldrb r1, [r8, #6]
|
||||
mov r6, #0
|
||||
mov r5, r0
|
||||
mov r7, r6
|
||||
cmp r1, #0
|
||||
bne _02305790
|
||||
mov r0, sb
|
||||
mov r1, #0x13
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
beq _02305790
|
||||
ldrb r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
bne _02305790
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x20]
|
||||
bl UpdateTrapsVisibility
|
||||
mov r7, #1
|
||||
_02305790:
|
||||
ldrb r0, [r5, #1]
|
||||
cmp r0, #0
|
||||
bne _023057B8
|
||||
ldrb r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
beq _023057E0
|
||||
ldrb r0, [r8, #6]
|
||||
cmp r0, #0
|
||||
moveq r6, #1
|
||||
b _023057E0
|
||||
_023057B8:
|
||||
cmp r0, #1
|
||||
bne _023057D0
|
||||
ldrb r0, [r8, #6]
|
||||
cmp r0, #0
|
||||
movne r6, #1
|
||||
b _023057E0
|
||||
_023057D0:
|
||||
cmp r0, #2
|
||||
ldreqb r0, [r8, #6]
|
||||
cmpeq r0, #0
|
||||
moveq r6, #1
|
||||
_023057E0:
|
||||
cmp r6, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
cmp r7, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
mov r0, sb
|
||||
add r1, sb, #4
|
||||
mov r2, #0
|
||||
mov r3, #1
|
||||
bl TryTriggerTrap
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_02305808:
|
||||
mov r0, sb
|
||||
bl TryNonLeaderItemPickUp
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
arm_func_end CheckNonLeaderTile
|
||||
|
||||
arm_func_start ov29_02305814
|
||||
ov29_02305814: ; 0x02305814
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__0230558C
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldr r0, [r5, #0xb4]
|
||||
ldrb r0, [r0, #6]
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
bl IsFloorOver
|
||||
cmp r0, #0
|
||||
ldreq r0, _023058BC ; =DUNGEON_PTR
|
||||
ldreq r0, [r0]
|
||||
ldreqb r0, [r0, #0x793]
|
||||
cmpeq r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r5
|
||||
bl GetTileAtEntity
|
||||
ldrh r0, [r0]
|
||||
tst r0, #0x40
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
bl GetLeader
|
||||
ldr r1, _023058C0 ; =0x00000C82
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
ldr r1, _023058BC ; =DUNGEON_PTR
|
||||
mov r0, r5
|
||||
ldr r2, [r1]
|
||||
mov r3, #1
|
||||
mov r1, r4
|
||||
strb r3, [r2, #0x794]
|
||||
bl TryTriggerMonsterHouse
|
||||
mov r0, #0
|
||||
bl ov29_022E3A58
|
||||
add r0, r5, #4
|
||||
bl ov29_022E2CA0
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, #0x78
|
||||
mov r1, #0x39
|
||||
bl ov29_022EA370
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_023058BC: .word DUNGEON_PTR
|
||||
#ifdef JAPAN
|
||||
_023058C0: .word 0x000009C2
|
||||
#else
|
||||
_023058C0: .word 0x00000C82
|
||||
#endif
|
||||
arm_func_end ov29_02305814
|
||||
|
||||
arm_func_start EndNegativeStatusCondition
|
||||
EndNegativeStatusCondition: ; 0x023058C4
|
||||
#ifdef JAPAN
|
||||
#define END_NEGATIVE_STATUS_CONDITION_OFFSET -4
|
||||
#else
|
||||
#define END_NEGATIVE_STATUS_CONDITION_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov r4, #0
|
||||
mov sb, r1
|
||||
mov sl, r0
|
||||
mov r0, sb
|
||||
mov r8, r2
|
||||
mov r7, r3
|
||||
mov r5, r4
|
||||
bl EntityIsValid__02305C04
|
||||
cmp r0, #0
|
||||
moveq r0, r4
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
mov r0, sb
|
||||
mov r1, r4
|
||||
ldr r6, [sb, #0xb4]
|
||||
bl MonsterHasNegativeStatus
|
||||
cmp r0, #0
|
||||
beq _02305AD8
|
||||
mov r0, sb
|
||||
mov r4, #1
|
||||
bl IsMonsterDrowsy
|
||||
cmp r0, #0
|
||||
beq _0230593C
|
||||
mov r2, r5
|
||||
mov fp, r4
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r3, r2
|
||||
str fp, [sp]
|
||||
bl EndSleepClassStatus
|
||||
_0230593C:
|
||||
mov r0, sb
|
||||
bl EntityIsValid__02305C04
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
mov r0, sb
|
||||
bl MonsterHasNonvolatileNonsleepStatus
|
||||
cmp r0, #0
|
||||
beq _0230596C
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl EndBurnClassStatus
|
||||
_0230596C:
|
||||
ldrb r0, [sp, #0x28]
|
||||
cmp r0, #0
|
||||
mov r0, sb
|
||||
beq _0230599C
|
||||
bl MonsterHasImmobilizingStatus
|
||||
cmp r0, #0
|
||||
beq _023059C0
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r2, #1
|
||||
bl EndFrozenClassStatus
|
||||
b _023059C0
|
||||
_0230599C:
|
||||
bl MonsterHasImmobilizingStatus
|
||||
cmp r0, #0
|
||||
ldrneb r0, [r6, #0xc4]
|
||||
cmpne r0, #3
|
||||
beq _023059C0
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r2, #1
|
||||
bl EndFrozenClassStatus
|
||||
_023059C0:
|
||||
mov r0, sb
|
||||
bl MonsterHasAttackInterferingStatus
|
||||
cmp r0, #0
|
||||
beq _023059DC
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl EndCringeClassStatus
|
||||
_023059DC:
|
||||
mov r0, sb
|
||||
bl MonsterHasSkillInterferingStatus
|
||||
cmp r0, #0
|
||||
beq _02305A00
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r2, #0
|
||||
mov r3, #1
|
||||
bl EndCurseClassStatus
|
||||
_02305A00:
|
||||
mov r0, sb
|
||||
bl MonsterHasLeechSeedStatus
|
||||
cmp r0, #0
|
||||
beq _02305A1C
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl EndLeechSeedClassStatus
|
||||
_02305A1C:
|
||||
mov r0, sb
|
||||
bl MonsterHasWhifferStatus
|
||||
cmp r0, #0
|
||||
beq _02305A38
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl EndSureShotClassStatus
|
||||
_02305A38:
|
||||
mov r0, sb
|
||||
mov r1, #0
|
||||
bl IsMonsterVisuallyImpaired
|
||||
cmp r0, #0
|
||||
beq _02305A58
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl EndBlinkerClassStatus
|
||||
_02305A58:
|
||||
mov r0, sb
|
||||
bl IsMonsterMuzzled
|
||||
cmp r0, #0
|
||||
beq _02305A74
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl EndMuzzledStatus
|
||||
_02305A74:
|
||||
mov r0, sb
|
||||
bl MonsterHasMiracleEyeStatus
|
||||
cmp r0, #0
|
||||
beq _02305A90
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl EndMiracleEyeStatus
|
||||
_02305A90:
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r6, #0x105]
|
||||
#else
|
||||
ldrb r0, [r6, #0x106]
|
||||
#endif
|
||||
cmp r0, #0
|
||||
beq _02305AB4
|
||||
ldr r2, _02305BF0 ; =0x00000C83
|
||||
mov r3, #0
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
#ifdef JAPAN
|
||||
strb r3, [r6, #0x105]
|
||||
#else
|
||||
strb r3, [r6, #0x106]
|
||||
#endif
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02305AB4:
|
||||
ldrb r0, [r6, #0xfe]
|
||||
cmp r0, #0
|
||||
beq _02305AD8
|
||||
ldr r2, _02305BF4 ; =0x00000C84
|
||||
mov r3, #0
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
strb r3, [r6, #0xfe]
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02305AD8:
|
||||
mov r0, sb
|
||||
bl CalcSpeedStageWrapper
|
||||
mov r2, #0
|
||||
mov fp, r0
|
||||
mov r1, r2
|
||||
_02305AEC:
|
||||
add r0, r6, r2
|
||||
add r2, r2, #1
|
||||
strb r1, [r0, #0x119 + END_NEGATIVE_STATUS_CONDITION_OFFSET]
|
||||
cmp r2, #5
|
||||
blt _02305AEC
|
||||
mov r0, sb
|
||||
bl CalcSpeedStageWrapper
|
||||
cmp fp, r0
|
||||
beq _02305B40
|
||||
mov r0, #0
|
||||
mov r1, sb
|
||||
mov r2, r0
|
||||
mov r4, #1
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldr r1, [r6, #0x110 + END_NEGATIVE_STATUS_CONDITION_OFFSET]
|
||||
ldr r0, _02305BF8 ; =ov29_02353318
|
||||
mov r1, r1, lsl #1
|
||||
ldrh r2, [r0, r1]
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02305B40:
|
||||
mov fp, #0
|
||||
mov r1, #1
|
||||
add r2, r6, #0x124 + END_NEGATIVE_STATUS_CONDITION_OFFSET
|
||||
mov r0, fp
|
||||
mov ip, r1
|
||||
_02305B54:
|
||||
ldrb r6, [r2, fp, lsl #3]
|
||||
add r3, r2, fp, lsl #3
|
||||
tst r6, #1
|
||||
movne r6, r1
|
||||
moveq r6, r0
|
||||
tst r6, #0xff
|
||||
beq _02305B88
|
||||
ldrh r6, [r3, #2]
|
||||
tst r6, #1
|
||||
bicne r6, r6, #1
|
||||
movne r4, ip
|
||||
movne r5, ip
|
||||
strneh r6, [r3, #2]
|
||||
_02305B88:
|
||||
add fp, fp, #1
|
||||
cmp fp, #4
|
||||
blt _02305B54
|
||||
cmp r4, #0
|
||||
beq _02305BC8
|
||||
cmp r8, #0
|
||||
beq _02305BAC
|
||||
mov r0, sb
|
||||
bl ov29_022E543C
|
||||
_02305BAC:
|
||||
cmp r5, #0
|
||||
beq _02305BE0
|
||||
ldr r2, _02305BFC ; =0x00000C85
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _02305BE0
|
||||
_02305BC8:
|
||||
cmp r7, #0
|
||||
bne _02305BE0
|
||||
ldr r2, _02305C00 ; =0x00000C86
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02305BE0:
|
||||
mov r0, sb
|
||||
bl UpdateStatusIconFlags
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
#define END_NEGATIVE_STATUS_CONDITION_DATA_OFFSET -0x2C0
|
||||
#else
|
||||
#define END_NEGATIVE_STATUS_CONDITION_DATA_OFFSET 0
|
||||
#endif
|
||||
_02305BF0: .word 0x00000C83 + END_NEGATIVE_STATUS_CONDITION_DATA_OFFSET
|
||||
_02305BF4: .word 0x00000C84 + END_NEGATIVE_STATUS_CONDITION_DATA_OFFSET
|
||||
_02305BF8: .word ov29_02353318
|
||||
_02305BFC: .word 0x00000C85 + END_NEGATIVE_STATUS_CONDITION_DATA_OFFSET
|
||||
_02305C00: .word 0x00000C86 + END_NEGATIVE_STATUS_CONDITION_DATA_OFFSET
|
||||
arm_func_end EndNegativeStatusCondition
|
||||
@@ -1,524 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_02314810.inc"
|
||||
|
||||
.text
|
||||
|
||||
|
||||
arm_func_start TrySealMove
|
||||
TrySealMove: ; 0x02314ABC
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
|
||||
sub sp, sp, #0x14
|
||||
mov r5, #0
|
||||
movs r7, r1
|
||||
mov r8, r0
|
||||
mov r6, r2
|
||||
moveq r0, r5
|
||||
beq _02314C18
|
||||
mov r2, #1
|
||||
bl SafeguardIsActive
|
||||
cmp r0, #0
|
||||
movne r0, r5
|
||||
bne _02314C18
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, #1
|
||||
bl IsProtectedFromNegativeStatus
|
||||
cmp r0, #0
|
||||
movne r0, r5
|
||||
bne _02314C18
|
||||
ldr r0, [r7, #0xb4]
|
||||
mov r4, r5
|
||||
#ifdef JAPAN
|
||||
add ip, r0, #0x120
|
||||
#else
|
||||
add ip, r0, #0x124
|
||||
#endif
|
||||
mov lr, r4
|
||||
mov r2, r5
|
||||
mov r3, #1
|
||||
add r0, sp, #4
|
||||
_02314B28:
|
||||
ldrb r1, [ip, lr, lsl #3]
|
||||
add sb, ip, lr, lsl #3
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
beq _02314B54
|
||||
ldrh r1, [sb, #2]
|
||||
tst r1, #1
|
||||
streq sb, [r0, r4, lsl #2]
|
||||
addeq r4, r4, #1
|
||||
_02314B54:
|
||||
add lr, lr, #1
|
||||
cmp lr, #4
|
||||
blt _02314B28
|
||||
cmp r6, #0
|
||||
beq _02314B74
|
||||
cmp r4, #0
|
||||
moveq r0, #0
|
||||
beq _02314C18
|
||||
_02314B74:
|
||||
cmp r4, #0
|
||||
beq _02314BE8
|
||||
ldr r3, _02314C20 ; =0x00000DBE
|
||||
mov r5, #8
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, #1
|
||||
str r5, [sp]
|
||||
bl ExclusiveItemEffectIsActiveWithLogging
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
bne _02314C18
|
||||
cmp r6, #0
|
||||
movne r0, #1
|
||||
bne _02314C18
|
||||
mov r0, r4
|
||||
bl DungeonRandInt
|
||||
add r1, sp, #4
|
||||
ldr r2, [r1, r0, lsl #2]
|
||||
mov r0, #0
|
||||
ldrh r1, [r2, #2]
|
||||
orr r1, r1, #1
|
||||
strh r1, [r2, #2]
|
||||
ldrh r1, [r2, #4]
|
||||
bl SetPreprocessorArgsIdVal
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r5, #1
|
||||
bl TryActivateQuickFeet
|
||||
_02314BE8:
|
||||
cmp r5, #0
|
||||
beq _02314C04
|
||||
ldr r2, _02314C24 ; =0x00000DE3
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _02314C14
|
||||
_02314C04:
|
||||
ldr r2, _02314C28 ; =0x00000DE4
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02314C14:
|
||||
mov r0, #1
|
||||
_02314C18:
|
||||
add sp, sp, #0x14
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_02314C20: .word 0x00000AFE
|
||||
_02314C24: .word 0x00000B23
|
||||
_02314C28: .word 0x00000B24
|
||||
#else
|
||||
_02314C20: .word 0x00000DBE
|
||||
_02314C24: .word 0x00000DE3
|
||||
_02314C28: .word 0x00000DE4
|
||||
#endif
|
||||
arm_func_end TrySealMove
|
||||
|
||||
arm_func_start BoostOrLowerSpeed
|
||||
BoostOrLowerSpeed: ; 0x02314C2C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r1
|
||||
mov r5, r0
|
||||
mov r0, r4
|
||||
bl EntityIsValid__023118B4
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, #0x32
|
||||
bl DungeonRandOutcome__022EAB20
|
||||
cmp r0, #0
|
||||
mov r2, #1
|
||||
mov r0, r5
|
||||
beq _02314C74
|
||||
mov r1, r4
|
||||
mov r3, r2
|
||||
bl LowerSpeed
|
||||
b _02314C84
|
||||
_02314C74:
|
||||
mov r1, r4
|
||||
mov r3, #0
|
||||
str r2, [sp]
|
||||
bl BoostSpeed
|
||||
_02314C84:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end BoostOrLowerSpeed
|
||||
|
||||
arm_func_start ResetHitChanceStat
|
||||
ResetHitChanceStat: ; 0x02314C8C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r5, r1
|
||||
mov r6, r0
|
||||
mov r0, r5
|
||||
mov r8, r2
|
||||
mov r4, r3
|
||||
mov r7, #0
|
||||
bl EntityIsValid__023118B4
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
ldr r0, [r5, #0xb4]
|
||||
add r1, r0, r8, lsl #1
|
||||
ldrsh r0, [r1, #0x2c]
|
||||
cmp r0, #0xa
|
||||
movne r0, #0xa
|
||||
movne r7, #1
|
||||
strneh r0, [r1, #0x2c]
|
||||
cmp r7, #0
|
||||
beq _02314CE4
|
||||
mov r0, r5
|
||||
bl ov29_022E543C
|
||||
b _02314CF4
|
||||
_02314CE4:
|
||||
cmp r4, #0
|
||||
beq _02314CF4
|
||||
mov r0, r5
|
||||
bl ov29_022E543C
|
||||
_02314CF4:
|
||||
mov r0, #0
|
||||
mov r1, r5
|
||||
mov r2, r0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
cmp r7, #0
|
||||
beq _02314D20
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
#ifdef JAPAN
|
||||
mov r2, #0xaa0
|
||||
#else
|
||||
mov r2, #0xd60
|
||||
#endif
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _02314D30
|
||||
_02314D20:
|
||||
ldr r2, _02314D3C ; =0x00000D61
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02314D30:
|
||||
mov r0, r5
|
||||
bl UpdateStatusIconFlags
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_02314D3C: .word 0x00000AA1
|
||||
#else
|
||||
_02314D3C: .word 0x00000D61
|
||||
#endif
|
||||
arm_func_end ResetHitChanceStat
|
||||
|
||||
arm_func_start ExclusiveItemEffectIsActiveWithLogging
|
||||
ExclusiveItemEffectIsActiveWithLogging: ; 0x02314D40
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #8
|
||||
mov r6, r1
|
||||
ldrb r1, [sp, #0x20]
|
||||
mov r7, r0
|
||||
mov r0, r6
|
||||
mov r5, r2
|
||||
mov r4, r3
|
||||
bl ExclusiveItemEffectIsActive__023147EC
|
||||
cmp r0, #0
|
||||
beq _02314DB8
|
||||
cmp r5, #0
|
||||
beq _02314DB0
|
||||
mov r0, #0
|
||||
mov r1, r6
|
||||
mov r2, r0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldrb r1, [sp, #0x20]
|
||||
add r2, sp, #0
|
||||
mov r0, r6
|
||||
bl GetExclusiveItemWithEffectFromBag
|
||||
add r1, sp, #0
|
||||
mov r0, #1
|
||||
bl PrepareItemForPrinting__02345728
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
mov r2, r4
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02314DB0:
|
||||
mov r0, #1
|
||||
b _02314DBC
|
||||
_02314DB8:
|
||||
mov r0, #0
|
||||
_02314DBC:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
arm_func_end ExclusiveItemEffectIsActiveWithLogging
|
||||
|
||||
arm_func_start LogMessageWithTargetAndExclusiveItemName
|
||||
LogMessageWithTargetAndExclusiveItemName: ; 0x02314DC4
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #8
|
||||
mov r7, r0
|
||||
mov r0, #0
|
||||
mov r5, r2
|
||||
mov r2, r0
|
||||
mov r6, r1
|
||||
mov r4, r3
|
||||
bl SubstitutePlaceholderStringTags
|
||||
add r2, sp, #0
|
||||
mov r0, r6
|
||||
mov r1, r4
|
||||
bl GetExclusiveItemWithEffectFromBag
|
||||
add r1, sp, #0
|
||||
mov r0, #1
|
||||
bl PrepareItemForPrinting__02345728
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
arm_func_end LogMessageWithTargetAndExclusiveItemName
|
||||
|
||||
arm_func_start TryActivateQuickFeet
|
||||
TryActivateQuickFeet: ; 0x02314E1C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r1
|
||||
mov r5, r0
|
||||
mov r0, r4
|
||||
mov r1, #0x6d
|
||||
bl AbilityIsActiveVeneer
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r3, #0
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
mov r2, #1
|
||||
str r3, [sp]
|
||||
bl BoostSpeed
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end TryActivateQuickFeet
|
||||
|
||||
arm_func_start TryInflictTerrifiedStatus
|
||||
TryInflictTerrifiedStatus: ; 0x02314E60
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr r2, _02314EB0 ; =ov10_022C4618
|
||||
mov r4, r1
|
||||
ldr ip, [r4, #0xb4]
|
||||
mov r3, #1
|
||||
mov r5, r0
|
||||
ldrsh r1, [r2]
|
||||
#ifdef JAPAN
|
||||
strb r3, [ip, #0x103]
|
||||
mov r0, r4
|
||||
strb r1, [ip, #0x104]
|
||||
#else
|
||||
strb r3, [ip, #0x104]
|
||||
mov r0, r4
|
||||
strb r1, [ip, #0x105]
|
||||
#endif
|
||||
bl ov29_022E60E4
|
||||
mov r0, #0
|
||||
mov r1, r4
|
||||
mov r2, r0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldr r2, _02314EB4 ; =0x00000DE5
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_02314EB0: .word ov10_022C4618
|
||||
#ifdef JAPAN
|
||||
_02314EB4: .word 0x00000B25
|
||||
#else
|
||||
_02314EB4: .word 0x00000DE5
|
||||
#endif
|
||||
arm_func_end TryInflictTerrifiedStatus
|
||||
|
||||
arm_func_start TryInflictGrudgeStatus
|
||||
TryInflictGrudgeStatus: ; 0x02314EB8
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r7, r1
|
||||
ldr r5, [r7, #0xb4]
|
||||
mov r8, r0
|
||||
mov r4, #0
|
||||
mov r6, r2
|
||||
mov r2, r4
|
||||
mov r0, #1
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldrb r0, [r5, #0xfd]
|
||||
cmp r0, #0
|
||||
beq _02314F04
|
||||
cmp r6, #0
|
||||
beq _02314F2C
|
||||
ldr r2, _02314F34 ; =0x00000ED1
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _02314F2C
|
||||
_02314F04:
|
||||
mov r4, #1
|
||||
mov r0, r7
|
||||
strb r4, [r5, #0xfd]
|
||||
bl UpdateStatusIconFlags
|
||||
cmp r6, #0
|
||||
beq _02314F2C
|
||||
#ifdef JAPAN
|
||||
ldr r2, _0231640C ; =0x00000C12
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
#else
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, #0xed0
|
||||
#endif
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02314F2C:
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_02314F34: .word 0x00000C13
|
||||
_0231640C: .word 0x00000C12
|
||||
#else
|
||||
_02314F34: .word 0x00000ED1
|
||||
#endif
|
||||
arm_func_end TryInflictGrudgeStatus
|
||||
|
||||
arm_func_start TryInflictConfusedStatus
|
||||
TryInflictConfusedStatus: ; 0x02314F38
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r6, r1
|
||||
mov r7, r0
|
||||
mov r0, r6
|
||||
mov r5, r2
|
||||
mov r4, r3
|
||||
bl EntityIsValid__02315118
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
bl SafeguardIsActive
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
bl IsProtectedFromNegativeStatus
|
||||
cmp r0, #0
|
||||
mov r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
mov r1, r6
|
||||
mov r2, r0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
mov r0, r6
|
||||
mov r1, #0x19
|
||||
bl ItemIsActive__0231513C
|
||||
cmp r0, #0
|
||||
beq _02314FD8
|
||||
cmp r5, #0
|
||||
beq _02314FD0
|
||||
ldr r2, _02315100 ; =0x00000DAF
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02314FD0:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_02314FD8:
|
||||
mov ip, #2
|
||||
ldr r3, _02315104 ; =0x00000DBA
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
str ip, [sp]
|
||||
bl ExclusiveItemEffectIsActiveWithLogging
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
cmp r7, r6
|
||||
beq _02315048
|
||||
cmp r7, #0
|
||||
moveq r0, #0
|
||||
beq _02315028
|
||||
ldr r0, [r7]
|
||||
cmp r0, #1
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
_02315028:
|
||||
cmp r0, #0
|
||||
beq _02315048
|
||||
mov r0, r7
|
||||
mov r1, #0x53
|
||||
bl AbilityIsActiveVeneer
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
bne _02315054
|
||||
_02315048:
|
||||
mov r0, r6
|
||||
mov r1, #0x40
|
||||
bl AbilityIsActiveVeneer
|
||||
_02315054:
|
||||
cmp r0, #0
|
||||
beq _0231507C
|
||||
cmp r5, #0
|
||||
beq _02315074
|
||||
ldr r2, _02315108 ; =0x00000DA7
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_02315074:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_0231507C:
|
||||
cmp r4, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
mov r0, r6
|
||||
bl ov29_022E41CC
|
||||
ldr r4, [r6, #0xb4]
|
||||
ldrb r0, [r4, #0xd0]
|
||||
cmp r0, #2
|
||||
beq _023150E0
|
||||
ldr r1, _0231510C ; =CONFUSED_TURN_RANGE
|
||||
mov r3, #2
|
||||
mov r0, r6
|
||||
mov r2, #1
|
||||
strb r3, [r4, #0xd0]
|
||||
bl CalcStatusDuration
|
||||
add r3, r0, #1
|
||||
ldr r2, _02315110 ; =0x00000CFE
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
strb r3, [r4, #0xd1]
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
bl TryActivateQuickFeet
|
||||
b _023150F0
|
||||
_023150E0:
|
||||
ldr r2, _02315114 ; =0x00000CFF
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_023150F0:
|
||||
mov r0, r6
|
||||
bl UpdateStatusIconFlags
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET -0x2C0
|
||||
#else
|
||||
#define TRY_INFLICT_CONFUSED_STATUS_OFFSET 0
|
||||
#endif
|
||||
_02315100: .word 0x00000DAF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
||||
_02315104: .word 0x00000DBA + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
||||
_02315108: .word 0x00000DA7 + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
||||
_0231510C: .word CONFUSED_TURN_RANGE
|
||||
_02315110: .word 0x00000CFE + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
||||
_02315114: .word 0x00000CFF + TRY_INFLICT_CONFUSED_STATUS_OFFSET
|
||||
arm_func_end TryInflictConfusedStatus
|
||||
@@ -5,7 +5,8 @@
|
||||
#include "main_02028080.h"
|
||||
|
||||
struct unk_0202AAA8 {
|
||||
u8 field_0x0[8];
|
||||
u32 field_0x0;
|
||||
u8 field_0x4[4];
|
||||
u8 field_0x8;
|
||||
u8 field_0x9[0x17];
|
||||
u16 field_0x20;
|
||||
@@ -13,16 +14,19 @@ struct unk_0202AAA8 {
|
||||
s32 field_0xA0;
|
||||
u8 field_0xA4[0x54];
|
||||
u32 field_0xF8;
|
||||
u8 field_0xFC[8];
|
||||
u32 field_0xFC;
|
||||
s32 field_0x100;
|
||||
u32 field_0x104;
|
||||
u8 field_0x108[0x90];
|
||||
u8 field_0x108[0x58];
|
||||
u8 *field_0x160;
|
||||
u8 field_0x164[0x34];
|
||||
void *field_0x198;
|
||||
s32 field_0x19C;
|
||||
u8 field_0x1A0;
|
||||
u8 field_0x1A1;
|
||||
u8 field_0x1A2[2];
|
||||
s32 field_0x1A4;
|
||||
u8 field_0x1A8[4];
|
||||
s32 field_0x1A8;
|
||||
s32 field_0x1AC;
|
||||
s32 field_0x1B0;
|
||||
u8 field_0x1B4[8];
|
||||
|
||||
@@ -2,9 +2,15 @@
|
||||
#define PMDSKY_MAIN_0202AB40_H
|
||||
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
|
||||
u32 IsParentMenuActive(s32 window_id);
|
||||
bool8 CheckParentMenuField0x1A0(s32 window_id);
|
||||
s32 GetWindowIdSelectedItemOnPage(s32 window_id);
|
||||
void sub_0202AB94(s32 window_id, s32 a);
|
||||
s32 GetSimpleMenuResult__0202AEA4(s32 window_id);
|
||||
void UpdateParentMenu(struct Window *w);
|
||||
void sub_0202AF78(struct Window *w);
|
||||
void sub_0202B030(s32 window_id);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,7 +2,14 @@
|
||||
#define PMDSKY_MAIN_0202B4C4_H
|
||||
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
#include "main_0202A66C.h"
|
||||
|
||||
void sub_0202B0A4(s32 window_id, s32 a);
|
||||
s32 CreateSimpleMenuFromStringIds(WindowTemplate *params, u32 flags, struct struct_2 *cfg, struct unk_0202A5CC *items, s32 n);
|
||||
s32 CreateSimpleMenu(WindowTemplate *params, u32 flags, struct struct_2 *cfg, struct unk_0202A75C *items, s32 n);
|
||||
s32 CreateSimpleMenuInternal(WindowTemplate *params, u32 flags, struct struct_2 *cfg, struct unk_0202A75C *items, s32 n);
|
||||
void ResumeSimpleMenu(s32 window_id);
|
||||
void CloseSimpleMenu(s32 window_id);
|
||||
u32 IsSimpleMenuActive(s32 window_id);
|
||||
bool8 CheckSimpleMenuField0x1A0(s32 window_id);
|
||||
|
||||
@@ -39,5 +39,13 @@ bool8 ExclusiveItemEffectIsActive__023147EC(struct entity *entity, enum exclusiv
|
||||
void BoostSpeed(struct entity *user, struct entity *target, s32 n_stages, s32 turns, bool8 log_failure);
|
||||
void BoostSpeedOneStage(struct entity *user, struct entity *target, s32 turns, bool8 log_failure);
|
||||
void LowerSpeed(struct entity *user, struct entity *target, s32 n_stages, bool8 log_failure);
|
||||
bool8 TrySealMove(struct entity *user, struct entity *target, bool8 check_only);
|
||||
bool8 BoostOrLowerSpeed(struct entity *user, struct entity *target);
|
||||
void ResetHitChanceStat(struct entity *user, struct entity *target, s32 stat_idx, s32 play_effect_anyway);
|
||||
bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity *user, struct entity *target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id);
|
||||
void LogMessageWithTargetAndExclusiveItemName(struct entity *user, struct entity *target, s32 message_id, enum exclusive_item_effect_id effect_id);
|
||||
bool8 TryActivateQuickFeet(struct entity *user, struct entity *target);
|
||||
void TryInflictTerrifiedStatus(struct entity *user, struct entity *target);
|
||||
bool8 TryInflictGrudgeStatus(struct entity *user, struct entity *target, bool8 log_message);
|
||||
|
||||
#endif //PMDSKY_MOVE_ORB_EFFECTS_H
|
||||
|
||||
@@ -1,10 +1,60 @@
|
||||
#ifndef PMDSKY_OVERLAY_29_022E869C_H
|
||||
#define PMDSKY_OVERLAY_29_022E869C_H
|
||||
|
||||
#include "dungeon.h"
|
||||
#include "dungeon_mode.h"
|
||||
#include "item.h"
|
||||
#include "move.h"
|
||||
|
||||
struct unk_02353554 {
|
||||
u8 field_0x0;
|
||||
u8 field_0x1[3];
|
||||
s32 field_0x4;
|
||||
s16 field_0x8;
|
||||
u8 field_0xa[0x1a];
|
||||
u8 field_0x24;
|
||||
u8 field_0x25[4];
|
||||
u8 field_0x29;
|
||||
u8 field_0x2a;
|
||||
u8 field_0x2b;
|
||||
u8 field_0x2c;
|
||||
u8 field_0x2d[0x53];
|
||||
u8 field_0x80[0x38];
|
||||
u8 field_0xb8[0x170];
|
||||
u8 field_0x228;
|
||||
u8 field_0x229;
|
||||
u8 field_0x22a[6];
|
||||
};
|
||||
|
||||
struct unk_022E8054 {
|
||||
u8 field_0x0[0x10];
|
||||
u8 field_0x10;
|
||||
};
|
||||
|
||||
void FreeTopScreenStatus(void);
|
||||
void ov29_022E7F7C(void);
|
||||
bool8 ov29_022E7F94(void);
|
||||
bool8 ov29_022E8018(void);
|
||||
void ov29_022E8054(struct unk_022E8054 *a);
|
||||
bool8 ov29_022E80D0(void);
|
||||
void ov29_022E8104(void);
|
||||
bool8 InitializeTeamStats(void);
|
||||
bool8 UpdateTeamStatsWrapper(void);
|
||||
void ov29_022E81C8(struct unk_022E8054 *a);
|
||||
bool8 FreeTeamStatsWrapper(void);
|
||||
void ov29_022E81F8(void);
|
||||
void ov29_022E8244(void);
|
||||
void DisplayTeamStatsSprite(struct entity *entity, s16 a, s16 b);
|
||||
bool8 ov29_022E840C(void);
|
||||
void ov29_022E847C(struct unk_022E8054 *a);
|
||||
bool8 ov29_022E84B0(void);
|
||||
bool8 InitDungeonControlsMenuWithBg(void);
|
||||
void ov29_022E854C(struct unk_022E8054 *a);
|
||||
bool8 FreeDungeonControlsMenuWithBg(void);
|
||||
bool8 ov29_022E85A8(void);
|
||||
void ov29_022E85F4(struct unk_022E8054 *a);
|
||||
bool8 ov29_022E8630(void);
|
||||
bool8 ov29_022E8650(void);
|
||||
bool8 ov29_022E869C(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,5 +5,9 @@
|
||||
|
||||
// Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity).
|
||||
bool8 EntityIsValid__0230558C(struct entity *entity);
|
||||
void ov29_023055B0(s32 a);
|
||||
void CheckNonLeaderTile(struct entity *entity);
|
||||
void ov29_02305814(struct entity *entity, bool8 a);
|
||||
s32 EndNegativeStatusCondition(struct entity *user, struct entity *target, bool8 a, bool8 b, bool8 c);
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_0230558C_H
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
bool8 TryInflictConfusedStatus(struct entity *user, struct entity *target, bool8 log_failure, bool8 check_only);
|
||||
// Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity).
|
||||
bool8 EntityIsValid__02315118(struct entity *entity);
|
||||
// Checks if a monster is holding a certain item that isn't disabled by Klutz.
|
||||
|
||||
@@ -34,13 +34,6 @@ void EntryOverlay31(void);
|
||||
void DrawDungeonMenuStatusWindow(s32 window_id);
|
||||
void DungeonMenuSwitch(s32 window_id);
|
||||
|
||||
struct struct_2 {
|
||||
u32 b; // 0x0
|
||||
u8 PAD1[92];
|
||||
u8* c; // 0x60
|
||||
u8 PAD2[50];
|
||||
};
|
||||
|
||||
struct struct_3 {
|
||||
s8 e[4]; // 0x0
|
||||
u32 f; // 0x4
|
||||
|
||||
@@ -6,5 +6,6 @@
|
||||
s32 GetMonsterIdToSpawn(s32 weight_type_idx);
|
||||
s32 GetMonsterLevelToSpawn(s32 monster_id);
|
||||
s32 IsOnMonsterSpawnList(s32 monster_id);
|
||||
void AllocTopScreenStatus(void);
|
||||
|
||||
#endif //PMDSKY_SPAWN_2_H
|
||||
|
||||
@@ -4,6 +4,13 @@
|
||||
#include "enums.h"
|
||||
#include "util.h"
|
||||
|
||||
struct struct_2 {
|
||||
u32 b; // 0x0
|
||||
u8 PAD1[92];
|
||||
u8* c; // 0x60
|
||||
u8 PAD2[50];
|
||||
};
|
||||
|
||||
// Represents the state of a portrait to be displayed inside a window
|
||||
typedef struct {
|
||||
enum monster_id monster_id; // 0x0: The species id, or the set index inside kaomado.kao
|
||||
|
||||
4
main.lsf
4
main.lsf
@@ -164,7 +164,6 @@ Static main
|
||||
Object asm/main_0202A690.o
|
||||
Object src/main_0202AAA8.o
|
||||
Object src/main_0202AB40.o
|
||||
Object asm/main_0202AB94.o
|
||||
Object src/main_0202B4C4.o
|
||||
Object src/main_0202B558.o
|
||||
Object asm/main_0202B5C8.o
|
||||
@@ -824,7 +823,6 @@ Overlay OVY_29
|
||||
Object src/random_trap.o
|
||||
Object src/spawn_1.o
|
||||
Object src/spawn_2.o
|
||||
Object asm/overlay_29_022E7EC4.o
|
||||
Object src/overlay_29_022E869C.o
|
||||
Object asm/overlay_29_022E86A4.o
|
||||
Object src/position_util.o
|
||||
@@ -957,7 +955,6 @@ Overlay OVY_29
|
||||
Object src/overlay_29_023047B8.o
|
||||
Object asm/overlay_29_023047DC.o
|
||||
Object src/overlay_29_0230558C.o
|
||||
Object asm/overlay_29_023055B0.o
|
||||
Object src/overlay_29_02305C04.o
|
||||
Object asm/overlay_29_02305C3C.o
|
||||
Object src/overlay_29_023061A8.o
|
||||
@@ -996,7 +993,6 @@ Overlay OVY_29
|
||||
Object src/overlay_29_02311BF8.o
|
||||
Object asm/overlay_29_02311C28.o
|
||||
Object src/move_orb_effects.o
|
||||
Object asm/overlay_29_02314810.o
|
||||
Object src/overlay_29_02315118.o
|
||||
Object asm/overlay_29_0231516C.o
|
||||
Object src/dungeon_statuses.o
|
||||
|
||||
@@ -1,6 +1,28 @@
|
||||
#include "main_0202AB40.h"
|
||||
#include "main_0202A66C.h"
|
||||
#include "main_0202AAA8.h"
|
||||
#include "main_02027AF0.h"
|
||||
#include "main_020282F4.h"
|
||||
#include "main_0203258C.h"
|
||||
#include "main_020327CC.h"
|
||||
#include "main_02032558.h"
|
||||
#include "window.h"
|
||||
|
||||
extern void sub_02032684(struct unk_02032558 *p, s32 a);
|
||||
extern void sub_02031C74(struct unk_02032558 *p, u32 mask);
|
||||
extern void sub_02031C84(struct unk_02032558 *p, u32 mask);
|
||||
extern s32 sub_02031C98(struct unk_02032558 *p, u32 *buttons, s32 *state, s32 a);
|
||||
extern s32 sub_02032160(struct unk_02032558 *p, s32 *state, s32 a, s32 b, s32 c, s32 d);
|
||||
extern s32 sub_02033758(struct unk_02032558 *p, u32 *buttons, s32 *state);
|
||||
extern s32 sub_020323F8(struct unk_02032558 *p, u32 buttons, s32 idx, s32 a);
|
||||
extern bool8 IsMenuOptionActive(struct unk_02032558 *p);
|
||||
extern s32 sub_02032070(struct unk_02032558 *p);
|
||||
extern s32 sub_0203250C(struct unk_02032558 *p, u32 buttons);
|
||||
extern void PlayWindowInputSound(struct unk_02032558 *p, s32 sound);
|
||||
extern void sub_02028948(s32 window_id, struct unk_02032558 *p);
|
||||
extern void sub_020263C8(s32 window_id, s32 a, s32 y, u8 *str, u8 colour);
|
||||
extern s32 sub_020265A8(u8 *str);
|
||||
extern void sub_0202A03C(struct unk_02032558 *p, s32 window_id);
|
||||
|
||||
u32 IsParentMenuActive(s32 window_id)
|
||||
{
|
||||
@@ -21,3 +43,215 @@ s32 GetWindowIdSelectedItemOnPage(s32 window_id)
|
||||
{
|
||||
return GetSelectedItemOnPage(GetWindowContents(window_id) + 4);
|
||||
}
|
||||
|
||||
void sub_0202AB94(s32 window_id, s32 a)
|
||||
{
|
||||
sub_02032684(GetWindowContents(window_id) + 4, a);
|
||||
}
|
||||
|
||||
s32 GetSimpleMenuResult__0202AEA4(s32 window_id)
|
||||
{
|
||||
struct unk_0202AAA8 *menu = GetWindowContents(window_id);
|
||||
struct unk_0202A75C *items = menu->field_0x198;
|
||||
s32 idx;
|
||||
|
||||
if (menu->field_0x1A0 != 0) {
|
||||
if (menu->field_0x1A1 != 0) {
|
||||
idx = GetTotalNumMenuItems((void *)menu + 4);
|
||||
} else {
|
||||
idx = GetSelectedMenuItemIdx((void *)menu + 4);
|
||||
}
|
||||
return items[idx].field_0x100;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UpdateParentMenu(struct Window *w)
|
||||
{
|
||||
struct unk_0202AAA8 *menu;
|
||||
u32 buttons;
|
||||
s32 state[9];
|
||||
s32 changed;
|
||||
s32 r;
|
||||
|
||||
menu = (struct unk_0202AAA8 *)w->template.unk0C;
|
||||
switch (menu->field_0x19C) {
|
||||
case 0:
|
||||
if (!sub_0202810C(w->id)) {
|
||||
break;
|
||||
}
|
||||
menu->field_0x1AC = menu->field_0x1A8;
|
||||
menu->field_0x19C = 2;
|
||||
case 1:
|
||||
if (menu->field_0x19C == 1) {
|
||||
menu->field_0x1AC = menu->field_0x1A8;
|
||||
menu->field_0x19C = 2;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
if (menu->field_0x1A8 > 0) {
|
||||
if (menu->field_0x1AC > 0) {
|
||||
menu->field_0x1AC--;
|
||||
}
|
||||
if (menu->field_0x1AC > 0) {
|
||||
sub_02031C74((void *)menu + 4, 0x4000000);
|
||||
menu->field_0x1A0 = 0;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0x1A4 = 0;
|
||||
w->unkB8 = -1;
|
||||
sub_0202AF78(w);
|
||||
break;
|
||||
}
|
||||
sub_02031C84((void *)menu + 4, 0x4000000);
|
||||
}
|
||||
menu->field_0x19C = 3;
|
||||
case 3:
|
||||
sub_0202AF78(w);
|
||||
if (menu->field_0xFC & 0x800000) {
|
||||
menu->field_0x19C = 9;
|
||||
menu->field_0x1A0 = 1;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0x1A4 = 0;
|
||||
w->unkB8 = -4;
|
||||
break;
|
||||
}
|
||||
menu->field_0x19C = 4;
|
||||
menu->field_0x1A0 = 0;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0x1A4 = 0;
|
||||
w->unkB8 = -1;
|
||||
break;
|
||||
case 4:
|
||||
changed = sub_02031C98((void *)menu + 4, &buttons, state, 1);
|
||||
if (buttons == 0 && (menu->field_0xFC & 1)) {
|
||||
r = sub_02032160((void *)menu + 4, state, 0x408, 0, 0, 1);
|
||||
if (r >= 0) {
|
||||
sub_02032684((void *)menu + 4, r);
|
||||
changed = 1;
|
||||
buttons |= 1;
|
||||
}
|
||||
}
|
||||
if (buttons == 0) {
|
||||
changed |= sub_02033758((void *)menu + 4, &buttons, state);
|
||||
}
|
||||
if ((changed | sub_020323F8((void *)menu + 4, buttons,
|
||||
GetSelectedMenuItemIdx((void *)menu + 4),
|
||||
0)) != 0) {
|
||||
sub_0202AF78(w);
|
||||
}
|
||||
if (buttons & 1) {
|
||||
if (IsMenuOptionActive((void *)menu + 4)) {
|
||||
if (!(menu->field_0xFC & 0x80000000)) {
|
||||
PlayWindowInputSound((void *)menu + 4, 0);
|
||||
}
|
||||
menu->field_0x1A0 = 1;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0x1A4 = buttons;
|
||||
w->unkB8 = -4;
|
||||
menu->field_0x19C = 5;
|
||||
} else {
|
||||
PlayWindowInputSound((void *)menu + 4, 2);
|
||||
}
|
||||
} else if (buttons & 2) {
|
||||
PlayWindowInputSound((void *)menu + 4, 1);
|
||||
menu->field_0x1A0 = 1;
|
||||
menu->field_0x1A1 = 1;
|
||||
menu->field_0x1A4 = buttons;
|
||||
w->unkB8 = -5;
|
||||
menu->field_0x19C = 5;
|
||||
} else if (sub_0203250C((void *)menu + 4, buttons)) {
|
||||
menu->field_0x1A0 = 1;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0x1A4 = buttons;
|
||||
w->unkB8 = -4;
|
||||
menu->field_0x19C = 5;
|
||||
}
|
||||
sub_02028948(w->id, (void *)menu + 4);
|
||||
break;
|
||||
case 5:
|
||||
if (sub_02032070((void *)menu + 4)) {
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
if (menu->field_0x1A1 == 0) {
|
||||
if (menu->field_0xFC & 0x400000) {
|
||||
sub_0202AF78(w);
|
||||
menu->field_0x19C = 9;
|
||||
break;
|
||||
}
|
||||
} else if (*(u8 *)&menu->field_0x1B0 != 0) {
|
||||
menu->field_0x19C = 9;
|
||||
break;
|
||||
}
|
||||
menu->field_0x19C = 7;
|
||||
case 7:
|
||||
if (!sub_0202812C(w->id)) {
|
||||
break;
|
||||
}
|
||||
if (menu->field_0x1A1 != 0) {
|
||||
w->unkB8 = -5;
|
||||
} else {
|
||||
w->unkB8 = -4;
|
||||
}
|
||||
menu->field_0x19C = 8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0202AF78(struct Window *w)
|
||||
{
|
||||
struct unk_0202AAA8 *menu;
|
||||
struct unk_0202A75C *item;
|
||||
s32 i;
|
||||
u8 *p;
|
||||
s32 highlight;
|
||||
s32 colour;
|
||||
|
||||
menu = (struct unk_0202AAA8 *)w->template.unk0C;
|
||||
item = menu->field_0x198;
|
||||
if (menu->field_0xFC & 0x200) {
|
||||
p = menu->field_0x160;
|
||||
} else {
|
||||
p = NULL;
|
||||
}
|
||||
i = 0;
|
||||
sub_02027B1C(w->id);
|
||||
while (!IsEmptyString(item->field_0x0)) {
|
||||
highlight = 0;
|
||||
if (p != NULL) {
|
||||
if (*p & 2) {
|
||||
highlight = 1;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
if (highlight) {
|
||||
colour = 0x42;
|
||||
} else {
|
||||
colour = 0x44;
|
||||
}
|
||||
sub_020263C8(w->id, 13, GetPageItemYOffset((void *)menu + 4, i),
|
||||
item->field_0x0, colour);
|
||||
i++;
|
||||
item++;
|
||||
}
|
||||
sub_0202A03C((void *)menu + 4, w->id);
|
||||
UpdateWindow(w->id);
|
||||
}
|
||||
|
||||
void sub_0202B030(s32 window_id)
|
||||
{
|
||||
struct unk_0202AAA8 *menu = GetWindowContents(window_id);
|
||||
|
||||
if (IsMenuOptionActive((void *)menu + 4)) {
|
||||
if (!(menu->field_0xFC & 0x80000000)) {
|
||||
PlayWindowInputSound((void *)menu + 4, 0);
|
||||
}
|
||||
menu->field_0x1A0 = 1;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0x1A4 = 1;
|
||||
sub_0202830C(window_id, -4);
|
||||
menu->field_0x19C = 6;
|
||||
} else {
|
||||
PlayWindowInputSound((void *)menu + 4, 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,197 @@
|
||||
#include "main_0202B4C4.h"
|
||||
#include "main_02032558.h"
|
||||
|
||||
extern s32 GetCurrentPage(struct unk_02032558 *p);
|
||||
|
||||
extern void *GetWindowContents(s32 window_id);
|
||||
|
||||
extern s32 GetSelectedItemOnPage(struct unk_02032558 *p);
|
||||
#include "main_0202A66C.h"
|
||||
#include "main_0202AAA8.h"
|
||||
#include "main_02001188.h"
|
||||
#include "main_02027648.h"
|
||||
#include "main_02028284.h"
|
||||
#include "main_020282F4.h"
|
||||
#include "main_02032558.h"
|
||||
#include "window.h"
|
||||
|
||||
extern s32 GetCurrentPage(struct unk_02032558 *p);
|
||||
extern void *GetWindowContents(s32 window_id);
|
||||
extern s32 GetSelectedItemOnPage(struct unk_02032558 *p);
|
||||
|
||||
extern WindowTemplate SIMPLE_MENU_DEFAULT_WINDOW_PARAMS;
|
||||
|
||||
extern void UpdateSimpleMenu(struct Window *w);
|
||||
extern void sub_02031C74(struct unk_02032558 *p, u32 mask);
|
||||
extern void sub_02031C84(struct unk_02032558 *p, u32 mask);
|
||||
extern bool8 IsMenuOptionActive(struct unk_02032558 *p);
|
||||
extern void PlayWindowInputSound(struct unk_02032558 *p, s32 sound);
|
||||
extern void sub_02032984(struct unk_02032558 *p);
|
||||
extern s32 sub_020265A8(u8 *str);
|
||||
extern u8 sub_02031A5C(u32 flags, struct struct_2 *cfg, s32 width);
|
||||
extern u8 CalcMenuHeightDiv8__02031AA4(u32 flags, struct struct_2 *cfg, s32 *count, s32 *n);
|
||||
extern void InitWindowInput(struct unk_02032558 *p, u32 flags, struct struct_2 *cfg,
|
||||
struct unk_02028284 *rect, s32 count, s32 n);
|
||||
extern s32 PreprocessStringFromId(u8 *output, s32 output_size, s32 string_id,
|
||||
s32 flags, void *args);
|
||||
|
||||
void sub_0202B0A4(s32 window_id, s32 a)
|
||||
{
|
||||
struct unk_0202AAA8 *menu = GetWindowContents(window_id);
|
||||
|
||||
if (a != 0) {
|
||||
sub_02031C74((void *)menu + 4, 0xB000000);
|
||||
sub_02031C84((void *)menu + 4, 0x10);
|
||||
} else {
|
||||
sub_02031C84((void *)menu + 4, 0xB000000);
|
||||
sub_02031C74((void *)menu + 4, 0x10);
|
||||
}
|
||||
}
|
||||
|
||||
s32 CreateSimpleMenuFromStringIds(WindowTemplate *params, u32 flags,
|
||||
struct struct_2 *cfg,
|
||||
struct unk_0202A5CC *items, s32 n)
|
||||
{
|
||||
struct unk_0202A5CC *p;
|
||||
struct unk_0202A75C *buf;
|
||||
struct unk_0202A75C *q;
|
||||
s32 count;
|
||||
|
||||
p = items;
|
||||
count = 0;
|
||||
while (p->field_0x0 != 0) {
|
||||
p++;
|
||||
count++;
|
||||
}
|
||||
|
||||
buf = MemAlloc((count + 1) * sizeof(struct unk_0202A75C), 8);
|
||||
q = buf;
|
||||
while (items->field_0x0 != 0) {
|
||||
PreprocessStringFromId(q->field_0x0, 0x100, items->field_0x0, 0xC402,
|
||||
NULL);
|
||||
q->field_0x100 = items->field_0x4;
|
||||
items++;
|
||||
q++;
|
||||
}
|
||||
q->field_0x0[0] = 0;
|
||||
q->field_0x100 = items->field_0x4;
|
||||
return CreateSimpleMenuInternal(params, flags, cfg, buf, n);
|
||||
}
|
||||
|
||||
s32 CreateSimpleMenu(WindowTemplate *params, u32 flags, struct struct_2 *cfg,
|
||||
struct unk_0202A75C *items, s32 n)
|
||||
{
|
||||
struct unk_0202A75C *p;
|
||||
struct unk_0202A75C *buf;
|
||||
struct unk_0202A75C *q;
|
||||
s32 count;
|
||||
|
||||
p = items;
|
||||
count = 0;
|
||||
while (!IsEmptyString(p->field_0x0)) {
|
||||
p++;
|
||||
count++;
|
||||
}
|
||||
|
||||
buf = MemAlloc((count + 1) * sizeof(struct unk_0202A75C), 8);
|
||||
q = buf;
|
||||
while (!IsEmptyString(items->field_0x0)) {
|
||||
*q++ = *items++;
|
||||
}
|
||||
*q = *items;
|
||||
return CreateSimpleMenuInternal(params, flags, cfg, buf, n);
|
||||
}
|
||||
|
||||
s32 CreateSimpleMenuInternal(WindowTemplate *params, u32 flags,
|
||||
struct struct_2 *cfg, struct unk_0202A75C *items,
|
||||
s32 n)
|
||||
{
|
||||
WindowTemplate tmpl;
|
||||
struct unk_02028284 rect;
|
||||
s32 count;
|
||||
struct unk_0202AAA8 *menu;
|
||||
struct unk_0202A75C *p;
|
||||
s32 target;
|
||||
s32 sel;
|
||||
s32 width;
|
||||
s32 item_width;
|
||||
s32 window_id;
|
||||
|
||||
menu = MemAlloc(0x1B4, 8);
|
||||
if (flags & 0x20) {
|
||||
target = cfg->b;
|
||||
} else {
|
||||
target = 0;
|
||||
}
|
||||
sel = 0;
|
||||
count = 0;
|
||||
p = items;
|
||||
flags |= 0x8000;
|
||||
if (params == NULL) {
|
||||
tmpl = SIMPLE_MENU_DEFAULT_WINDOW_PARAMS;
|
||||
flags |= 0x300000;
|
||||
} else {
|
||||
tmpl = *params;
|
||||
tmpl.unk00 = (u32)UpdateSimpleMenu;
|
||||
}
|
||||
tmpl.unk0C = (u32)menu;
|
||||
if (tmpl.width == 0) {
|
||||
width = 0;
|
||||
while (!IsEmptyString(p->field_0x0)) {
|
||||
item_width = sub_020265A8(p->field_0x0);
|
||||
if (item_width > width) {
|
||||
width = item_width;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
tmpl.width = sub_02031A5C(flags, cfg, width + 0x10);
|
||||
}
|
||||
p = items;
|
||||
while (!IsEmptyString(p->field_0x0)) {
|
||||
if (p->field_0x100 == target) {
|
||||
sel = count;
|
||||
}
|
||||
p++;
|
||||
count++;
|
||||
}
|
||||
if (n <= 0) {
|
||||
n = count;
|
||||
}
|
||||
if (tmpl.height == 0) {
|
||||
tmpl.height = CalcMenuHeightDiv8__02031AA4(flags, cfg, &count, &n);
|
||||
} else {
|
||||
CalcMenuHeightDiv8__02031AA4(flags, cfg, &count, &n);
|
||||
}
|
||||
if (flags & 0x200000) {
|
||||
tmpl.x -= tmpl.width;
|
||||
}
|
||||
if (flags & 0x100000) {
|
||||
tmpl.y -= tmpl.height;
|
||||
}
|
||||
menu->field_0x0 = (u32)UpdateSimpleMenu;
|
||||
menu->field_0xFC = flags;
|
||||
if (cfg != NULL) {
|
||||
*(struct struct_2 *)&menu->field_0x100 = *cfg;
|
||||
}
|
||||
menu->field_0x100 = sel;
|
||||
menu->field_0x198 = items;
|
||||
menu->field_0x19C = 0;
|
||||
menu->field_0x1A0 = 0;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0x1A4 = 0;
|
||||
menu->field_0x1AC = 0;
|
||||
menu->field_0x1B0 = 0;
|
||||
tmpl.bg_id = 0;
|
||||
window_id = NewWindowScreenCheck((s32)&tmpl, 3);
|
||||
GetWindowRectangle(window_id, &rect);
|
||||
InitWindowInput((void *)menu + 4, flags,
|
||||
(struct struct_2 *)&menu->field_0x100, &rect, count, n);
|
||||
return window_id;
|
||||
}
|
||||
|
||||
void ResumeSimpleMenu(s32 window_id)
|
||||
{
|
||||
struct unk_0202AAA8 *menu = GetWindowContents(window_id);
|
||||
|
||||
menu->field_0x19C = 1;
|
||||
menu->field_0x1A0 = 0;
|
||||
menu->field_0x1A1 = 0;
|
||||
menu->field_0xFC &= ~0x800000;
|
||||
sub_02032984((void *)menu + 4);
|
||||
}
|
||||
|
||||
void CloseSimpleMenu(s32 window_id)
|
||||
{
|
||||
|
||||
@@ -69,10 +69,8 @@ struct unk_020AFE74 {
|
||||
extern struct unk_020AFE74 *MISSION_REWARD_STRUCT_MAIN_PTR;
|
||||
|
||||
extern void MaybeGetColoredFormattedItemName(void*, struct item*, void*);
|
||||
extern s8 CreateSimpleMenuFromStringIds(void*, s32, s32, void*, s32);
|
||||
extern void GetNameWithGender(char *dst, s16 monster_id, char color_id);
|
||||
extern void GetNameRaw(unsigned char *, s32);
|
||||
extern s32 GetSimpleMenuResult__0202AEA4(s8);
|
||||
extern void InitPreprocessorArgs(struct preprocessor_args* args);
|
||||
extern bool8 IsMonsterIllegalForMissions(enum monster_id);
|
||||
extern void sub_02046BE8(s32 a, s32 b, struct preprocessor_args *c);
|
||||
@@ -108,8 +106,8 @@ extern void ov11_02310BDC(void);
|
||||
extern const u8 _0209C844[2];
|
||||
extern const u16 _0209C846[4];
|
||||
extern s32 _0209C850;
|
||||
extern s32 _0209C85C;
|
||||
extern s32 _0209C86C;
|
||||
extern WindowTemplate _0209C85C;
|
||||
extern struct unk_0202A5CC _0209C86C[];
|
||||
extern s32 _0209C884;
|
||||
|
||||
#ifdef JAPAN
|
||||
@@ -336,7 +334,7 @@ s32 sub_0203D538(void)
|
||||
break;
|
||||
case 16:
|
||||
if (sub_02046C78() != 0) {
|
||||
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a0 = CreateSimpleMenuFromStringIds(&_0209C85C, 0x300011, 0, &_0209C86C, 2);
|
||||
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a0 = CreateSimpleMenuFromStringIds(&_0209C85C, 0x300011, 0, _0209C86C, 2);
|
||||
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x11;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "overlay_29_022E3F20.h"
|
||||
#include "overlay_29_0234B340.h"
|
||||
#include "dungeon_logic_2.h"
|
||||
#include "dg_random.h"
|
||||
|
||||
extern u8* AllocateTemp1024ByteBufferFromPool(void);
|
||||
extern void CopyStringFromId(u8* buf, u32 string_id);
|
||||
@@ -37,23 +38,30 @@ extern void PlaySpeedDownEffect(struct entity *entity);
|
||||
extern fx32_8 MultiplyByFixedPoint(fx32_8 x, fx32_8 mult_fp);
|
||||
extern bool8 SafeguardIsActive(struct entity *user ,struct entity *target, bool8 log_message);
|
||||
extern void TryActivateSteadfast(struct entity *attacker, struct entity *defender);
|
||||
extern void TryActivateQuickFeet(struct entity *attacker ,struct entity *defender);
|
||||
extern s32 CalcStatusDuration(struct entity *entity, const s16 *turn_range, bool8 iq_skill_effects);
|
||||
extern struct preprocessor_args* GetMessageLogPreprocessorArgs(void);
|
||||
extern void SetPreprocessorArgsStringToName(struct preprocessor_args* preprocessor_args, s32 pos, struct monster* monster, u32 param_4, u8 name_type);
|
||||
extern int CalcSpeedStageWrapper(struct entity* entity);
|
||||
extern int CalcSpeedStage(struct entity *entity, s32 counter_weight);
|
||||
extern void SetPreprocessorArgsIdVal(s32 pos, u32 val);
|
||||
extern void ov29_022E543C(struct entity *entity);
|
||||
extern void ov29_022E60E4(struct entity *entity);
|
||||
|
||||
extern const s16 CRINGE_TURN_RANGE[];
|
||||
extern const s16 PARALYSIS_TURN_RANGE[];
|
||||
extern const s16 SPEED_LOWER_TURN_RANGE[];
|
||||
extern const s16 SPEED_BOOST_TURN_RANGE[];
|
||||
extern const u16 ov29_02353318[];
|
||||
extern const s16 ov10_022C4618;
|
||||
|
||||
#ifdef JAPAN
|
||||
#define JPN_MSG_OFFSET -0x2C0
|
||||
#define MESSAGE_ED0 0xC12
|
||||
#define MESSAGE_ED1 0xC13
|
||||
#else
|
||||
#define JPN_MSG_OFFSET 0
|
||||
#define MESSAGE_ED0 0xED0
|
||||
#define MESSAGE_ED1 0xED1
|
||||
#endif // JAPAN
|
||||
|
||||
void LowerOffensiveStat(struct entity *user, struct entity *target, struct StatIndex stat, s32 n_stages, bool8 check_is_protected_from_stat_drops, bool8 log_message_if_protected_from_stat_drops)
|
||||
@@ -793,4 +801,169 @@ void LowerSpeed(struct entity *user, struct entity *target, s32 n_stages, bool8
|
||||
UpdateStatusIconFlags(target);
|
||||
}
|
||||
|
||||
bool8 TrySealMove(struct entity *user, struct entity *target, bool8 check_only)
|
||||
{
|
||||
struct monster *entityInfo;
|
||||
struct move *sealableMoves[MAX_MON_MOVES];
|
||||
s32 nSealable;
|
||||
s32 i;
|
||||
bool8 sealed = FALSE;
|
||||
|
||||
if (target == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (SafeguardIsActive(user, target, TRUE))
|
||||
return FALSE;
|
||||
|
||||
if (IsProtectedFromNegativeStatus(user, target, TRUE))
|
||||
return FALSE;
|
||||
|
||||
entityInfo = GetEntInfo(target);
|
||||
nSealable = 0;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++) {
|
||||
struct move *move = &entityInfo->moves.moves[i];
|
||||
if (MoveExists(move)) {
|
||||
if (!(move->flags2 & MOVE_FLAG_SEALED)) {
|
||||
sealableMoves[nSealable] = move;
|
||||
nSealable++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (check_only && nSealable == 0)
|
||||
return FALSE;
|
||||
|
||||
if (nSealable != 0) {
|
||||
struct move *move;
|
||||
|
||||
if (ExclusiveItemEffectIsActiveWithLogging(user, target, TRUE, 0xdbe + JPN_MSG_OFFSET, EXCLUSIVE_EFF_NO_MOVE_DISABLING))
|
||||
return FALSE;
|
||||
|
||||
if (check_only)
|
||||
return TRUE;
|
||||
|
||||
move = sealableMoves[DungeonRandInt(nSealable)];
|
||||
move->flags2 |= MOVE_FLAG_SEALED;
|
||||
SetPreprocessorArgsIdVal(0, move->id);
|
||||
sealed = TRUE;
|
||||
TryActivateQuickFeet(user, target);
|
||||
}
|
||||
|
||||
if (sealed)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xde3 + JPN_MSG_OFFSET);
|
||||
else
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xde4 + JPN_MSG_OFFSET);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 BoostOrLowerSpeed(struct entity *user, struct entity *target)
|
||||
{
|
||||
if (!EntityIsValid__023118B4(target))
|
||||
return FALSE;
|
||||
|
||||
if (DungeonRandOutcome__022EAB20(50))
|
||||
LowerSpeed(user, target, 1, TRUE);
|
||||
else
|
||||
BoostSpeed(user, target, 1, 0, TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ResetHitChanceStat(struct entity *user, struct entity *target, s32 stat_idx, s32 play_effect_anyway)
|
||||
{
|
||||
struct monster *entityInfo;
|
||||
bool8 changed = FALSE;
|
||||
|
||||
if (!EntityIsValid__023118B4(target))
|
||||
return;
|
||||
|
||||
entityInfo = GetEntInfo(target);
|
||||
if (entityInfo->stat_modifiers.hit_chance_stages[stat_idx] != 10) {
|
||||
entityInfo->stat_modifiers.hit_chance_stages[stat_idx] = 10;
|
||||
changed = TRUE;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
ov29_022E543C(target);
|
||||
else if (play_effect_anyway)
|
||||
ov29_022E543C(target);
|
||||
|
||||
SubstitutePlaceholderStringTags(0, target, 0);
|
||||
if (changed)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xd60 + JPN_MSG_OFFSET);
|
||||
else
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xd61 + JPN_MSG_OFFSET);
|
||||
|
||||
UpdateStatusIconFlags(target);
|
||||
}
|
||||
|
||||
bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity *user, struct entity *target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id)
|
||||
{
|
||||
struct item item;
|
||||
|
||||
if (ExclusiveItemEffectIsActive__023147EC(target, effect_id)) {
|
||||
if (should_log) {
|
||||
SubstitutePlaceholderStringTags(0, target, 0);
|
||||
GetExclusiveItemWithEffectFromBag(target, effect_id, &item);
|
||||
PrepareItemForPrinting__02345728(1, &item);
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, message_id);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void LogMessageWithTargetAndExclusiveItemName(struct entity *user, struct entity *target, s32 message_id, enum exclusive_item_effect_id effect_id)
|
||||
{
|
||||
struct item item;
|
||||
|
||||
SubstitutePlaceholderStringTags(0, target, 0);
|
||||
GetExclusiveItemWithEffectFromBag(target, effect_id, &item);
|
||||
PrepareItemForPrinting__02345728(1, &item);
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, message_id);
|
||||
}
|
||||
|
||||
bool8 TryActivateQuickFeet(struct entity *user, struct entity *target)
|
||||
{
|
||||
if (!AbilityIsActiveVeneer(target, ABILITY_QUICK_FEET))
|
||||
return FALSE;
|
||||
|
||||
BoostSpeed(user, target, 1, 0, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TryInflictTerrifiedStatus(struct entity *user, struct entity *target)
|
||||
{
|
||||
struct monster *entityInfo = GetEntInfo(target);
|
||||
|
||||
entityInfo->terrified = 1;
|
||||
entityInfo->terrified_turns = ov10_022C4618;
|
||||
ov29_022E60E4(target);
|
||||
SubstitutePlaceholderStringTags(0, target, 0);
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xde5 + JPN_MSG_OFFSET);
|
||||
}
|
||||
|
||||
bool8 TryInflictGrudgeStatus(struct entity *user, struct entity *target, bool8 log_message)
|
||||
{
|
||||
bool8 inflicted = FALSE;
|
||||
struct monster *entityInfo = GetEntInfo(target);
|
||||
|
||||
SubstitutePlaceholderStringTags(1, target, 0);
|
||||
if (entityInfo->grudge) {
|
||||
if (log_message)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, MESSAGE_ED1);
|
||||
}
|
||||
else {
|
||||
entityInfo->grudge = TRUE;
|
||||
inflicted = TRUE;
|
||||
UpdateStatusIconFlags(target);
|
||||
if (log_message)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, MESSAGE_ED0);
|
||||
}
|
||||
|
||||
return inflicted;
|
||||
}
|
||||
|
||||
// If Red's file boundaries are anything to go by, this file should end just before TryInflictConfusedStatus.
|
||||
|
||||
@@ -100,7 +100,6 @@ extern void CreateMonsterSummaryFromTeamMember(struct monster_summary *monster_s
|
||||
extern s32 GetKeyboardStatus();
|
||||
extern int PreprocessString(char* output, int output_size, const char* format, u16 flags, struct preprocessor_args* args);
|
||||
extern void ShowKeyboard(s32 mode, u8 *, s32, u8 *);
|
||||
extern void sub_0202B030(s8);
|
||||
extern s32 sub_02037468();
|
||||
extern void sub_0203909C(u8 *name);
|
||||
extern s32 sub_02039218();
|
||||
@@ -190,17 +189,16 @@ extern s32 ov11_02322C88;
|
||||
extern s32 ov11_02322C98;
|
||||
extern s32 ov11_02322CA8;
|
||||
extern s32 ov11_02322CB8;
|
||||
extern s32 ov11_02322CC8;
|
||||
extern WindowTemplate ov11_02322CC8;
|
||||
extern struct unk_0202A5CC ov11_02322CD8[];
|
||||
extern s32 ov11_02322CF0;
|
||||
extern struct unk_0202A5CC ov11_02322CF0[];
|
||||
extern struct unk_0202A5CC ov11_02322D10[];
|
||||
extern struct unk_0202A5CC ov11_02322D60[];
|
||||
extern struct unk_0202A5CC ov11_02322D88[];
|
||||
extern u8 ov11_02322DB0[];
|
||||
|
||||
extern void CloseScrollBox(s8); extern void CloseTextBox2(s8);extern s8 CreateScrollBoxSingle(void *, s32, s32, s32, void *, s32, void *); extern s8 CreateSimpleMenuFromStringIds(void *, s32, s32, void *, s32); extern s8 CreateTextBox(void *, void *);
|
||||
extern void CloseScrollBox(s8); extern void CloseTextBox2(s8);extern s8 CreateScrollBoxSingle(void *, s32, s32, s32, void *, s32, void *); extern s8 CreateTextBox(void *, void *);
|
||||
extern void GetPressedButtons(u32, u16 *);
|
||||
extern s32 GetSimpleMenuResult__0202AEA4(s8);
|
||||
extern void InitPreprocessorArgs(struct preprocessor_args *);
|
||||
extern s32 IsScrollBoxActive(s8); extern void ShowDialogueBox(s8); extern void ShowStringIdInDialogueBox(s8, s32, s32, void *); extern void ov11_022DC504(void);
|
||||
extern u8 *strcpy(u8 *dest, const u8 *src);
|
||||
@@ -659,7 +657,8 @@ s32 ov11_02307334(void)
|
||||
}
|
||||
case 31: {
|
||||
ov11_02324D8C->field_0x1c.b = 1;
|
||||
ov11_02324D8C->field_0xc = CreateSimpleMenuFromStringIds(&ov11_02322CC8, 0x33, (s32)&ov11_02324D8C->field_0x1c, &ov11_02322CF0, 3);
|
||||
ov11_02324D8C->field_0xc = CreateSimpleMenuFromStringIds(&ov11_02322CC8, 0x33, &ov11_02324D8C->field_0x1c,
|
||||
ov11_02322CF0, 3);
|
||||
ov11_02324D8C->field_0x0 = 0x20;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,328 @@
|
||||
#include "overlay_29_022E869C.h"
|
||||
#include "main_02001188.h"
|
||||
#include "main_020483B8.h"
|
||||
#include "options.h"
|
||||
#include "overlay_29_022DC684.h"
|
||||
#include "overlay_29_022F7364.h"
|
||||
#include "overlay_29_0233A218.h"
|
||||
|
||||
extern struct unk_02353554 *TOP_SCREEN_STATUS_PTR;
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
extern u32 DUNGEON_FRAMES_PASSED;
|
||||
|
||||
extern void ov10_022C1E50(void *a);
|
||||
extern void ov10_022C1E80(void *a, struct unk_022DC694 *b, s32 c, s32 d);
|
||||
extern void ov10_022C21D8(void *a);
|
||||
extern void ov10_022C2278(void *a);
|
||||
extern void ov10_022C22A0(struct unk_022DC694 *p);
|
||||
|
||||
extern void ov29_022E8CE8(void);
|
||||
extern void ov29_022E8F78(u8 *a);
|
||||
extern bool8 ov29_022E8FCC(void);
|
||||
extern bool8 ov29_022E8FF8(void);
|
||||
extern void ov29_022E9008(void);
|
||||
extern void ov29_022E9014(u8 *a);
|
||||
extern void ov29_02339138(void);
|
||||
extern void ov29_02339D7C(s32 a, s32 b);
|
||||
extern void ov29_0233A0E8(s32 a, s32 b);
|
||||
extern void ov29_0233A1BC(s32 a);
|
||||
extern u8 ov29_0234B4E0(void);
|
||||
|
||||
extern s32 GetIdleAnimationId(struct entity *entity);
|
||||
extern int GetPlayerGender(void);
|
||||
extern void FreeTopScreen(void);
|
||||
extern void DungeonChangeTopScreenType(s16 type);
|
||||
extern bool8 InitDungeonControlsMenu(void);
|
||||
extern bool8 FreeDungeonControlsMenu(void);
|
||||
extern void sub_02048384(void);
|
||||
extern void UpdateMinimap(void);
|
||||
|
||||
void FreeTopScreenStatus(void)
|
||||
{
|
||||
if (TOP_SCREEN_STATUS_PTR == NULL) {
|
||||
return;
|
||||
}
|
||||
FreeTopScreen();
|
||||
MemFree(TOP_SCREEN_STATUS_PTR);
|
||||
TOP_SCREEN_STATUS_PTR = NULL;
|
||||
}
|
||||
|
||||
void ov29_022E7F7C(void)
|
||||
{
|
||||
TOP_SCREEN_STATUS_PTR->field_0x0 = 0;
|
||||
}
|
||||
|
||||
bool8 ov29_022E7F94(void)
|
||||
{
|
||||
bool8 female;
|
||||
|
||||
TOP_SCREEN_STATUS_PTR->field_0x228 = 0;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x0 = 1;
|
||||
ov29_02339138();
|
||||
ov29_02339D7C(1, 1);
|
||||
UpdateMinimap();
|
||||
SetMinimapDataE447(0);
|
||||
TOP_SCREEN_STATUS_PTR->field_0x0 = 1;
|
||||
SetMinimapDataE448(1);
|
||||
ov29_022E8104();
|
||||
female = GetPlayerGender() == 2;
|
||||
ov29_022DC738((s32) TOP_SCREEN_STATUS_PTR->field_0xb8, female);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 ov29_022E8018(void)
|
||||
{
|
||||
if (TOP_SCREEN_STATUS_PTR->field_0x228 != 0) {
|
||||
ov29_022DC76C();
|
||||
ov29_022DC778();
|
||||
TOP_SCREEN_STATUS_PTR->field_0x228 = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ov29_022E8054(struct unk_022E8054 *a)
|
||||
{
|
||||
if (a->field_0x10 == 0) {
|
||||
return;
|
||||
}
|
||||
a->field_0x10 = 0;
|
||||
if (GetTopScreenOption() != 3) {
|
||||
TOP_SCREEN_STATUS_PTR->field_0x0 = 0;
|
||||
return;
|
||||
}
|
||||
if (TOP_SCREEN_STATUS_PTR->field_0x0 != 0) {
|
||||
return;
|
||||
}
|
||||
ov29_02339138();
|
||||
ov29_0233A0E8(0, 1);
|
||||
ov29_02339D7C(1, 0);
|
||||
TOP_SCREEN_STATUS_PTR->field_0x0 = 1;
|
||||
}
|
||||
|
||||
bool8 ov29_022E80D0(void)
|
||||
{
|
||||
ov29_022DC77C();
|
||||
TOP_SCREEN_STATUS_PTR->field_0x0 = 0;
|
||||
SetMinimapDataE448(0);
|
||||
ov29_0233A1BC(1);
|
||||
ov29_02339138();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ov29_022E8104(void)
|
||||
{
|
||||
TOP_SCREEN_STATUS_PTR->field_0x228 = 0;
|
||||
ov10_022C1E50(TOP_SCREEN_STATUS_PTR->field_0xb8);
|
||||
ov29_022E8CE8();
|
||||
}
|
||||
|
||||
bool8 InitializeTeamStats(void)
|
||||
{
|
||||
bool8 female;
|
||||
|
||||
TOP_SCREEN_STATUS_PTR->field_0x228 = 0;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x229 = 0;
|
||||
ov29_022E8104();
|
||||
TOP_SCREEN_STATUS_PTR->field_0x24 = 1;
|
||||
female = GetPlayerGender() == 2;
|
||||
ov29_022DC694((s32) TOP_SCREEN_STATUS_PTR->field_0xb8, female);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 UpdateTeamStatsWrapper(void)
|
||||
{
|
||||
if (TOP_SCREEN_STATUS_PTR->field_0x228 != 0) {
|
||||
ov29_022DC6D0();
|
||||
TOP_SCREEN_STATUS_PTR->field_0x228 = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ov29_022E81C8(struct unk_022E8054 *a)
|
||||
{
|
||||
ov29_022DC6DC();
|
||||
if (a->field_0x10 != 0) {
|
||||
a->field_0x10 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 FreeTeamStatsWrapper(void)
|
||||
{
|
||||
ov29_022DC728();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ov29_022E81F8(void)
|
||||
{
|
||||
if (!IsTeamStatsOnTopScreen()) {
|
||||
ov29_022E8104();
|
||||
return;
|
||||
}
|
||||
if (GetTopScreenOption() == 1 && TOP_SCREEN_STATUS_PTR->field_0x8 != 1) {
|
||||
DungeonChangeTopScreenType(1);
|
||||
}
|
||||
ov29_022E8CE8();
|
||||
}
|
||||
|
||||
void ov29_022E8244(void)
|
||||
{
|
||||
if (GetTopScreenOption() == 4 && TOP_SCREEN_STATUS_PTR->field_0x8 == 4) {
|
||||
ov29_022E9008();
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayTeamStatsSprite(struct entity *entity, s16 a, s16 b)
|
||||
{
|
||||
s32 sprite;
|
||||
s32 anim;
|
||||
s16 c;
|
||||
s16 d;
|
||||
u8 e;
|
||||
struct monster *monster;
|
||||
|
||||
if (TOP_SCREEN_STATUS_PTR == NULL) {
|
||||
return;
|
||||
}
|
||||
monster = entity->info;
|
||||
anim = GetIdleAnimationId(entity);
|
||||
c = 0;
|
||||
d = 0;
|
||||
e = 0;
|
||||
sprite = (s16) entity->sprite_index;
|
||||
if ((DUNGEON_PTR[0]->display_data.camera_target == entity
|
||||
? 0 : DUNGEON_PTR[0]->display_data.hallucinating)
|
||||
|| monster->curse_class_status.curse == 2) {
|
||||
sprite = DungeonGetSpriteIndex(0x229);
|
||||
}
|
||||
if (monster->frozen_class_status.freeze != 1 && monster->frozen_class_status.freeze != 6) {
|
||||
if (DUNGEON_PTR[0]->leader_running && ov29_0234B4E0() == 0) {
|
||||
c += 2;
|
||||
}
|
||||
else if (entity->animation_group_id_mirror == 0 || entity->animation_group_id_mirror == 7) {
|
||||
if (((struct monster *) entity->info)->speed_stage > 1) {
|
||||
c += 1;
|
||||
}
|
||||
}
|
||||
c += 1;
|
||||
}
|
||||
else {
|
||||
c = 0;
|
||||
}
|
||||
if (monster->two_turn_move_invincible != 2
|
||||
&& (monster->frozen_class_status.freeze == 6 || monster->burn_class_status.burn == 4
|
||||
|| monster->frozen_class_status.freeze == 2)) {
|
||||
d += DUNGEON_FRAMES_PASSED & 2;
|
||||
}
|
||||
if (monster->invisible_class_status.status == 1
|
||||
&& DUNGEON_PTR[0]->display_data.can_see_traps == 0) {
|
||||
e = 1;
|
||||
}
|
||||
if (anim == 0xff) {
|
||||
return;
|
||||
}
|
||||
ov29_022DC6E8(sprite, monster->apparent_id, anim, monster->unique_id, 1, a, b, c, d, e);
|
||||
}
|
||||
|
||||
bool8 ov29_022E840C(void)
|
||||
{
|
||||
struct unk_022DC694 s;
|
||||
|
||||
if (TOP_SCREEN_STATUS_PTR->field_0x29 != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
ov10_022C22A0(&s);
|
||||
ov10_022C1E80(TOP_SCREEN_STATUS_PTR->field_0x80, &s, 0, 1);
|
||||
if (sub_02048400()) {
|
||||
sub_02048384();
|
||||
}
|
||||
TOP_SCREEN_STATUS_PTR->field_0x29 = 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ov29_022E847C(struct unk_022E8054 *a)
|
||||
{
|
||||
if (a->field_0x10 == 0) {
|
||||
return;
|
||||
}
|
||||
a->field_0x10 = 0;
|
||||
sub_020483B8();
|
||||
ov10_022C21D8(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
}
|
||||
|
||||
bool8 ov29_022E84B0(void)
|
||||
{
|
||||
if (TOP_SCREEN_STATUS_PTR->field_0x29 == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
ov10_022C2278(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
if (sub_02048400()) {
|
||||
sub_020483D8();
|
||||
}
|
||||
TOP_SCREEN_STATUS_PTR->field_0x29 = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 InitDungeonControlsMenuWithBg(void)
|
||||
{
|
||||
struct unk_022DC694 s;
|
||||
|
||||
ov10_022C22A0(&s);
|
||||
ov10_022C1E80(TOP_SCREEN_STATUS_PTR->field_0x80, &s, 0, 1);
|
||||
ov10_022C21D8(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
return InitDungeonControlsMenu();
|
||||
}
|
||||
|
||||
void ov29_022E854C(struct unk_022E8054 *a)
|
||||
{
|
||||
if (a->field_0x10 == 0) {
|
||||
return;
|
||||
}
|
||||
ov29_022E8F78(&a->field_0x10);
|
||||
ov10_022C21D8(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
a->field_0x10 = 0;
|
||||
}
|
||||
|
||||
bool8 FreeDungeonControlsMenuWithBg(void)
|
||||
{
|
||||
ov10_022C2278(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
return FreeDungeonControlsMenu();
|
||||
}
|
||||
|
||||
bool8 ov29_022E85A8(void)
|
||||
{
|
||||
struct unk_022DC694 s;
|
||||
|
||||
ov10_022C22A0(&s);
|
||||
ov10_022C1E80(TOP_SCREEN_STATUS_PTR->field_0x80, &s, 0, 1);
|
||||
ov10_022C21D8(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
return ov29_022E8FCC();
|
||||
}
|
||||
|
||||
void ov29_022E85F4(struct unk_022E8054 *a)
|
||||
{
|
||||
if (a->field_0x10 == 0) {
|
||||
return;
|
||||
}
|
||||
ov29_022E9014(&a->field_0x10);
|
||||
ov10_022C21D8(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
a->field_0x10 = 0;
|
||||
}
|
||||
|
||||
bool8 ov29_022E8630(void)
|
||||
{
|
||||
ov10_022C2278(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
return ov29_022E8FF8();
|
||||
}
|
||||
|
||||
bool8 ov29_022E8650(void)
|
||||
{
|
||||
struct unk_022DC694 s;
|
||||
|
||||
ov10_022C22A0(&s);
|
||||
ov10_022C1E80(TOP_SCREEN_STATUS_PTR->field_0x80, &s, 0, 1);
|
||||
ov10_022C21D8(TOP_SCREEN_STATUS_PTR->field_0x80);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 ov29_022E869C(void)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,53 @@
|
||||
#include "overlay_29_0230558C.h"
|
||||
#include "dg_uty.h"
|
||||
#include "dungeon_capabilities.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_logic_7.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "dungeon_pokemon_attributes_1.h"
|
||||
#include "dungeon_util_1.h"
|
||||
#include "dungeon_util_2.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "overlay_29_022E3F20.h"
|
||||
#include "overlay_29_022EC7E8.h"
|
||||
#include "overlay_29_022FFF28.h"
|
||||
#include "overlay_29_02305C04.h"
|
||||
#include "overlay_29_023061A8.h"
|
||||
#include "overlay_29_02306728.h"
|
||||
#include "overlay_29_0230F810.h"
|
||||
#include "overlay_29_02336F4C.h"
|
||||
#include "overlay_29_0234B104.h"
|
||||
#include "overlay_29_0234B340.h"
|
||||
#include "position_util.h"
|
||||
|
||||
#ifdef JAPAN
|
||||
#define JPN_MSG_OFFSET -0x2C0
|
||||
#else
|
||||
#define JPN_MSG_OFFSET 0
|
||||
#endif
|
||||
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
extern const u16 ov29_02353318[];
|
||||
|
||||
extern s32 GetIdleAnimationId(struct entity *entity);
|
||||
extern void ChangeMonsterAnimation(struct entity *entity, s32 animation_id, s32 direction);
|
||||
extern void ov29_02337D68(struct position *pos);
|
||||
extern struct trap *GetTrapInfo(struct entity *entity);
|
||||
extern void TryTriggerTrap(struct entity *entity, struct position *pos, s32 a, s32 b);
|
||||
extern void TryTriggerMonsterHouse(struct entity *entity, bool8 a);
|
||||
extern void ov29_022E3A58(bool8 a);
|
||||
extern bool8 ov29_022E2CA0(struct position *pos);
|
||||
extern void ov29_022EA370(s32 a, s32 b);
|
||||
extern void EndSleepClassStatus(struct entity *user, struct entity *target, bool8 a, bool8 b, bool8 c);
|
||||
extern void EndFrozenClassStatus(struct entity *user, struct entity *target, bool8 log);
|
||||
extern void EndCringeClassStatus(struct entity *user, struct entity *target);
|
||||
extern void EndLeechSeedClassStatus(struct entity *user, struct entity *target);
|
||||
extern void EndSureShotClassStatus(struct entity *user, struct entity *target);
|
||||
extern void EndBlinkerClassStatus(struct entity *user, struct entity *target);
|
||||
extern void EndMuzzledStatus(struct entity *user, struct entity *target);
|
||||
extern void EndMiracleEyeStatus(struct entity *user, struct entity *target);
|
||||
extern void ov29_022E543C(struct entity *entity);
|
||||
|
||||
bool8 EntityIsValid__0230558C(struct entity *entity)
|
||||
{
|
||||
@@ -8,3 +56,223 @@ bool8 EntityIsValid__0230558C(struct entity *entity)
|
||||
|
||||
return GetEntityType(entity) != ENTITY_NOTHING;
|
||||
}
|
||||
|
||||
void ov29_023055B0(s32 a)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < DUNGEON_MAX_POKEMON; i++) {
|
||||
struct entity *entity = DUNGEON_PTR[0]->active_monster_ptrs[i];
|
||||
if (EntityIsValid__0230558C(entity)) {
|
||||
struct monster *monster = GetEntInfo(entity);
|
||||
if (!monster->is_team_leader) {
|
||||
if (IsTeamMemberOnFirstTurnInFixedRoom(monster))
|
||||
return;
|
||||
|
||||
if (monster->target_pos.x != 0 || monster->target_pos.y != 0) {
|
||||
if (monster->target_pos.x != entity->pos.x ||
|
||||
monster->target_pos.y != entity->pos.y) {
|
||||
if (!CheckVariousStatuses2__02301244(entity, TRUE)) {
|
||||
s32 direction =
|
||||
GetDirectionTowardsPosition(&entity->pos, &monster->target_pos);
|
||||
monster->action.direction = direction & DIRECTION_MASK;
|
||||
ChangeMonsterAnimation(entity, GetIdleAnimationId(entity), direction);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckNonLeaderTile(struct entity *entity)
|
||||
{
|
||||
struct monster *monster = GetEntInfo(entity);
|
||||
struct tile *tile;
|
||||
struct entity *object;
|
||||
|
||||
if (!EntityIsValid__0230558C(entity))
|
||||
return;
|
||||
|
||||
tile = GetTileAtEntity(entity);
|
||||
if (IqSkillIsEnabled(entity, IQ_ABSOLUTE_MOVER) &&
|
||||
monster->invisible_class_status.status != STATUS_INVISIBLE_MOBILE) {
|
||||
bool8 item_active;
|
||||
if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ))
|
||||
item_active = FALSE;
|
||||
else
|
||||
item_active = HasHeldItem(entity, ITEM_MOBILE_SCARF);
|
||||
|
||||
if (!item_active)
|
||||
ov29_02337D68(&entity->pos);
|
||||
}
|
||||
|
||||
object = tile->object;
|
||||
if (object == NULL)
|
||||
return;
|
||||
|
||||
switch (object->type) {
|
||||
case ENTITY_NOTHING:
|
||||
case ENTITY_MONSTER:
|
||||
break;
|
||||
case ENTITY_TRAP: {
|
||||
struct trap *trap = GetTrapInfo(object);
|
||||
bool8 trigger = FALSE;
|
||||
bool8 revealed = FALSE;
|
||||
|
||||
if (!monster->is_not_team_member && IqSkillIsEnabled(entity, IQ_TRAP_SEER) &&
|
||||
!object->is_visible) {
|
||||
object->is_visible = TRUE;
|
||||
UpdateTrapsVisibility();
|
||||
revealed = TRUE;
|
||||
}
|
||||
|
||||
if (trap->team == 0) {
|
||||
if (object->is_visible && !monster->is_not_team_member)
|
||||
trigger = TRUE;
|
||||
}
|
||||
else if (trap->team == 1) {
|
||||
if (monster->is_not_team_member)
|
||||
trigger = TRUE;
|
||||
}
|
||||
else if (trap->team == 2) {
|
||||
if (!monster->is_not_team_member)
|
||||
trigger = TRUE;
|
||||
}
|
||||
|
||||
if (trigger && !revealed)
|
||||
TryTriggerTrap(entity, &entity->pos, FALSE, TRUE);
|
||||
break;
|
||||
}
|
||||
case ENTITY_ITEM:
|
||||
TryNonLeaderItemPickUp(entity);
|
||||
break;
|
||||
case ENTITY_HIDDEN_STAIRS:
|
||||
case ENTITY_TEMPORARY:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ov29_02305814(struct entity *entity, bool8 a)
|
||||
{
|
||||
if (!EntityIsValid__0230558C(entity))
|
||||
return;
|
||||
|
||||
if (GetEntInfo(entity)->is_not_team_member)
|
||||
return;
|
||||
|
||||
if (IsFloorOver() || DUNGEON_PTR[0]->monster_house_triggered)
|
||||
return;
|
||||
|
||||
if (!(GetTileAtEntity(entity)->terrain_flags & TERRAIN_TYPE_IN_MONSTER_HOUSE))
|
||||
return;
|
||||
|
||||
LogMessageByIdWithPopupCheckUser(GetLeader(), 0xC82 + JPN_MSG_OFFSET);
|
||||
DUNGEON_PTR[0]->monster_house_triggered_event = TRUE;
|
||||
TryTriggerMonsterHouse(entity, a);
|
||||
ov29_022E3A58(FALSE);
|
||||
if (ov29_022E2CA0(&entity->pos))
|
||||
ov29_022EA370(0x78, 0x39);
|
||||
}
|
||||
|
||||
s32 EndNegativeStatusCondition(struct entity *user, struct entity *target, bool8 a, bool8 b,
|
||||
bool8 c)
|
||||
{
|
||||
struct monster *monster;
|
||||
s32 result = FALSE;
|
||||
s32 speed_stage;
|
||||
s32 log_sealed = FALSE;
|
||||
s32 i;
|
||||
|
||||
if (!EntityIsValid__02305C04(target))
|
||||
return result;
|
||||
|
||||
monster = GetEntInfo(target);
|
||||
if (MonsterHasNegativeStatus(target, FALSE)) {
|
||||
result = TRUE;
|
||||
if (IsMonsterDrowsy(target))
|
||||
EndSleepClassStatus(user, target, FALSE, FALSE, TRUE);
|
||||
|
||||
if (!EntityIsValid__02305C04(target))
|
||||
return FALSE;
|
||||
|
||||
if (MonsterHasNonvolatileNonsleepStatus(target))
|
||||
EndBurnClassStatus(user, target);
|
||||
|
||||
if (c) {
|
||||
if (MonsterHasImmobilizingStatus(target))
|
||||
EndFrozenClassStatus(user, target, TRUE);
|
||||
}
|
||||
else if (MonsterHasImmobilizingStatus(target) &&
|
||||
monster->frozen_class_status.freeze != STATUS_FROZEN_WRAP) {
|
||||
EndFrozenClassStatus(user, target, TRUE);
|
||||
}
|
||||
|
||||
if (MonsterHasAttackInterferingStatus(target))
|
||||
EndCringeClassStatus(user, target);
|
||||
|
||||
if (MonsterHasSkillInterferingStatus(target))
|
||||
EndCurseClassStatus(user, target, 0, TRUE);
|
||||
|
||||
if (MonsterHasLeechSeedStatus(target))
|
||||
EndLeechSeedClassStatus(user, target);
|
||||
|
||||
if (MonsterHasWhifferStatus(target))
|
||||
EndSureShotClassStatus(user, target);
|
||||
|
||||
if (IsMonsterVisuallyImpaired(target, FALSE))
|
||||
EndBlinkerClassStatus(user, target);
|
||||
|
||||
if (IsMonsterMuzzled(target))
|
||||
EndMuzzledStatus(user, target);
|
||||
|
||||
if (MonsterHasMiracleEyeStatus(target))
|
||||
EndMiracleEyeStatus(user, target);
|
||||
|
||||
if (monster->perish_song_turns != 0) {
|
||||
monster->perish_song_turns = 0;
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xC83 + JPN_MSG_OFFSET);
|
||||
}
|
||||
|
||||
if (monster->exposed) {
|
||||
monster->exposed = FALSE;
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xC84 + JPN_MSG_OFFSET);
|
||||
}
|
||||
}
|
||||
|
||||
speed_stage = CalcSpeedStageWrapper(target);
|
||||
for (i = 0; i < NUM_SPEED_COUNTERS; i++)
|
||||
monster->speed_down_counters[i] = 0;
|
||||
|
||||
if (speed_stage != CalcSpeedStageWrapper(target)) {
|
||||
result = TRUE;
|
||||
SubstitutePlaceholderStringTags(0, target, 0);
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target,
|
||||
ov29_02353318[monster->speed_stage]);
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++) {
|
||||
struct move *move = &monster->moves.moves[i];
|
||||
if (MoveExists(move)) {
|
||||
if (move->flags2 & MOVE_FLAG_SEALED) {
|
||||
result = TRUE;
|
||||
log_sealed = TRUE;
|
||||
move->flags2 &= ~MOVE_FLAG_SEALED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
if (a)
|
||||
ov29_022E543C(target);
|
||||
|
||||
if (log_sealed)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xC85 + JPN_MSG_OFFSET);
|
||||
}
|
||||
else if (!b) {
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, 0xC86 + JPN_MSG_OFFSET);
|
||||
}
|
||||
|
||||
UpdateStatusIconFlags(target);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,86 @@
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "dungeon_logic_2.h"
|
||||
#include "dungeon_util_2.h"
|
||||
#include "move_orb_effects.h"
|
||||
#include "overlay_29_022E3F20.h"
|
||||
#include "overlay_29_022E41CC.h"
|
||||
#include "overlay_29_0234B340.h"
|
||||
|
||||
extern bool8 SafeguardIsActive(struct entity *user ,struct entity *target, bool8 log_message);
|
||||
extern s32 CalcStatusDuration(struct entity *entity, const s16 *turn_range, bool8 iq_skill_effects);
|
||||
|
||||
extern const s16 CONFUSED_TURN_RANGE[];
|
||||
|
||||
#ifdef JAPAN
|
||||
#define MESSAGE_CFE 0xA3E
|
||||
#define MESSAGE_CFF 0xA3F
|
||||
#define MESSAGE_DA7 0xAE7
|
||||
#define MESSAGE_DAF 0xAEF
|
||||
#define MESSAGE_DBA 0xAFA
|
||||
#else
|
||||
#define MESSAGE_CFE 0xCFE
|
||||
#define MESSAGE_CFF 0xCFF
|
||||
#define MESSAGE_DA7 0xDA7
|
||||
#define MESSAGE_DAF 0xDAF
|
||||
#define MESSAGE_DBA 0xDBA
|
||||
#endif
|
||||
|
||||
bool8 TryInflictConfusedStatus(struct entity *user, struct entity *target, bool8 log_failure, bool8 check_only)
|
||||
{
|
||||
struct monster *entityInfo;
|
||||
bool8 ownTempo;
|
||||
|
||||
if (!EntityIsValid__02315118(target))
|
||||
return FALSE;
|
||||
|
||||
if (SafeguardIsActive(user, target, log_failure))
|
||||
return FALSE;
|
||||
|
||||
if (IsProtectedFromNegativeStatus(user, target, log_failure))
|
||||
return FALSE;
|
||||
|
||||
SubstitutePlaceholderStringTags(0, target, 0);
|
||||
|
||||
if (ItemIsActive__0231513C(target, ITEM_PERSIM_BAND)) {
|
||||
if (log_failure)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, MESSAGE_DAF);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (ExclusiveItemEffectIsActiveWithLogging(user, target, log_failure, MESSAGE_DBA, EXCLUSIVE_EFF_NO_CONFUSION))
|
||||
return FALSE;
|
||||
|
||||
if (user != target && (user == NULL ? FALSE : (bool8)(GetEntityType(user) == ENTITY_MONSTER)) && AbilityIsActiveVeneer(user, ABILITY_MOLD_BREAKER))
|
||||
ownTempo = FALSE;
|
||||
else
|
||||
ownTempo = AbilityIsActiveVeneer(target, ABILITY_OWN_TEMPO);
|
||||
|
||||
if (ownTempo) {
|
||||
if (log_failure)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, MESSAGE_DA7);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (check_only)
|
||||
return TRUE;
|
||||
|
||||
ov29_022E41CC(target);
|
||||
entityInfo = GetEntInfo(target);
|
||||
if (entityInfo->cringe_class_status.cringe != STATUS_CRINGE_CONFUSED) {
|
||||
entityInfo->cringe_class_status.cringe = STATUS_CRINGE_CONFUSED;
|
||||
entityInfo->cringe_class_status.cringe_turns = CalcStatusDuration(target, CONFUSED_TURN_RANGE, TRUE) + 1;
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, MESSAGE_CFE);
|
||||
TryActivateQuickFeet(user, target);
|
||||
}
|
||||
else {
|
||||
LogMessageByIdWithPopupCheckUserTarget(user, target, MESSAGE_CFF);
|
||||
}
|
||||
|
||||
UpdateStatusIconFlags(target);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 EntityIsValid__02315118(struct entity *entity)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "overlay_29_0231CBC8.h"
|
||||
#include "overlay_29_02315118.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "dungeon_capabilities_1.h"
|
||||
#include "dungeon_pokemon_attributes_1.h"
|
||||
@@ -43,7 +44,6 @@ extern void TryIncreaseHp(struct entity *user, struct entity *target, s32 hp, s3
|
||||
extern void TryWarp(struct entity *user, struct entity *target, s32 a, s32 b);
|
||||
extern void BoostIQ(struct entity *entity, s16 iq, bool8 a);
|
||||
extern void UpdateShopkeeperModeAfterAttack(struct entity *attacker, struct entity *defender);
|
||||
extern void TryInflictConfusedStatus(struct entity *user, struct entity *target, bool8 a, bool8 b);
|
||||
extern void TryInflictInvisibleStatus(struct entity *user, struct entity *target);
|
||||
extern void TryInflictPetrifiedStatus(struct entity *user, struct entity *target);
|
||||
extern void TryInflictSleeplessStatus(struct entity *user, struct entity *target);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "overlay_29_023293E4.h"
|
||||
#include "overlay_29_02315118.h"
|
||||
|
||||
extern void TryInflictConfusedStatus(struct entity *user, struct entity *target, bool8 displayMessage, bool8 onlyCheck);
|
||||
|
||||
bool8 DoMoveConfuse(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#include "overlay_29_0232DD78.h"
|
||||
#include "move_orb_effects.h"
|
||||
|
||||
extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id);
|
||||
|
||||
extern void BoostOrLowerSpeed(struct entity *user, struct entity *target);
|
||||
|
||||
bool8 DoMoveTrickRoom(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
#include "dg_random.h"
|
||||
#include "dungeon.h"
|
||||
#include "main_02001188.h"
|
||||
#include "main_0200330C.h"
|
||||
#include "overlay_29_022E869C.h"
|
||||
#include "overlay_29_022F73B4.h"
|
||||
#include "spawn_2.h"
|
||||
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
extern struct unk_02353554 *TOP_SCREEN_STATUS_PTR;
|
||||
|
||||
extern void ov29_022E8708(void);
|
||||
|
||||
extern s32 GetMonsterIdFromSpawnEntry(struct monster_spawn_entry *);
|
||||
extern s32 GetMonsterLevelFromSpawnEntry(struct monster_spawn_entry *);
|
||||
@@ -58,3 +64,18 @@ s32 GetMonsterLevelToSpawn(s32 monster_id) {
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void AllocTopScreenStatus(void)
|
||||
{
|
||||
TOP_SCREEN_STATUS_PTR = MemAlloc(0x230, 0);
|
||||
MemZero((u8 *) TOP_SCREEN_STATUS_PTR, 0x230);
|
||||
TOP_SCREEN_STATUS_PTR->field_0x0 = 0;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x29 = 0;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x2c = 0;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x2b = 0;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x4 = 0;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x228 = 0;
|
||||
ov29_022E8708();
|
||||
TOP_SCREEN_STATUS_PTR->field_0x4 = 2;
|
||||
TOP_SCREEN_STATUS_PTR->field_0x229 = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user