This commit is contained in:
AnonymousRandomPerson 2025-11-07 21:38:10 -05:00
commit 684201c7de
13 changed files with 402 additions and 441 deletions

View File

@ -8,17 +8,15 @@
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public MemcpySimple
.public RandInt
.public SCRIPT_VARS_VALUES
.public SaveScriptVariableValue
.public SaveScriptVariableValueAtIndex
.public ScenarioFlagBackup
.public ZinitScriptVariable
.public _0209CEAC
.public _0209CF28
.public EVENT_FLAG_PROG_POS_INFO
.public _0209CF48
.public _0209CF64
.public _0209CF84
.public _0209DFA0
.public _s32_div_f
.public FlagCalc
.public sub_0204CBE8

View File

@ -4,20 +4,29 @@
.public CalcStatusDuration
.public ChangeShayminForme
.public CopyStringFromId
.public DefenderAbilityIsActive__02311B94
.public DIRECTIONS_XY
.public DUNGEON_PTR
.public DefenderAbilityIsActive__02311B94
.public EntityIsValid__023118B4
.public ExclusiveItemEffectIsActiveWithLogging
.public GetMessageLogPreprocessorArgs
.public GetTile
.public GetTileAtEntity
.public GetTreatmentBetweenMonstersIgnoreStatus
.public IsProtectedFromNegativeStatus
.public IsProtectedFromSleepClassStatus
.public IsProtectedFromStatDrops
.public ItemIsActive__02311BF8
.public LogMessageByIdWithPopupCheckUserTarget
.public MonsterIsType
.public SECONDARY_TERRAIN_TYPES
.public SafeguardIsActive
.public SetMessageLogPreprocessorArgsString
.public SetPreprocessorArgsIdVal
.public SetPreprocessorArgsStringToName
.public SubstitutePlaceholderStringTags
.public TryActivateQuickFeet
.public UpdateStatusIconFlags
.public ov10_022C4728
.public ov10_022C479C
.public ov10_022C47A0
@ -45,18 +54,6 @@
.public ov29_022E4C4C
.public ov29_022E4D24
.public ov29_022E4D28
.public ov29_022E4DCC
.public ov29_022E4E74
.public ov29_022E4F1C
.public ov29_022E53EC
.public GetTreatmentBetweenMonstersIgnoreStatus
.public ov29_02304A48
.public ov29_02304A84
.public SafeguardIsActive
.public SECONDARY_TERRAIN_TYPES
.public SetMessageLogPreprocessorArgsString
.public SetPreprocessorArgsIdVal
.public SetPreprocessorArgsStringToName
.public SubstitutePlaceholderStringTags
.public TryActivateQuickFeet
.public UpdateStatusIconFlags

View File

@ -0,0 +1,11 @@
#pragma once
.public AbilityIsActiveVeneer
.public AllocateTemp1024ByteBufferFromPool
.public CopyStringFromId
.public EntityIsValid__023118B4
.public LogMessageByIdWithPopupCheckUserTarget
.public SetMessageLogPreprocessorArgsString
.public SubstitutePlaceholderStringTags
.public UpdateStatusIconFlags
.public ov29_022E4E74
.public ov29_022E4F1C

View File

@ -1,87 +1,8 @@
.include "asm/macros.inc"
.include "main_0204BCAC.inc"
.include "main_0204BD98.inc"
.text
arm_func_start sub_0204BCAC
sub_0204BCAC: ; 0x0204BCAC
stmdb sp!, {r3, lr}
sub sp, sp, #8
cmp r2, #0xb
addls pc, pc, r2, lsl #2
b _0204BD68
_0204BCC0: ; jump table
b _0204BCF0 ; case 0
b _0204BCF8 ; case 1
b _0204BD00 ; case 2
b _0204BD08 ; case 3
b _0204BD14 ; case 4
b _0204BD1C ; case 5
b _0204BD28 ; case 6
b _0204BD30 ; case 7
b _0204BD38 ; case 8
b _0204BD40 ; case 9
b _0204BD4C ; case 10
b _0204BD5C ; case 11
_0204BCF0:
mov r0, r1
b _0204BD88
_0204BCF8:
sub r0, r0, r1
b _0204BD88
_0204BD00:
add r0, r0, r1
b _0204BD88
_0204BD08:
mul r1, r0, r1
mov r0, r1
b _0204BD88
_0204BD14:
bl _s32_div_f
b _0204BD88
_0204BD1C:
bl _s32_div_f
mov r0, r1
b _0204BD88
_0204BD28:
and r0, r0, r1
b _0204BD88
_0204BD30:
orr r0, r0, r1
b _0204BD88
_0204BD38:
eor r0, r0, r1
b _0204BD88
_0204BD40:
mov r2, #1
orr r0, r0, r2, lsl r1
b _0204BD88
_0204BD4C:
mov r2, #1
mvn r1, r2, lsl r1
and r0, r0, r1
b _0204BD88
_0204BD5C:
mov r0, r1
bl RandInt
b _0204BD88
_0204BD68:
ldr r1, _0204BD90 ; =_0209CEAC
add r0, sp, #0
ldr r3, [r1, #4]
ldr ip, [r1]
ldr r1, _0204BD94 ; =_0209CF28
str ip, [sp]
str r3, [sp, #4]
bl Debug_FatalError
_0204BD88:
add sp, sp, #8
ldmia sp!, {r3, pc}
.align 2, 0
_0204BD90: .word _0209CEAC
_0204BD94: .word _0209CF28
arm_func_end sub_0204BCAC
arm_func_start sub_0204BD98
sub_0204BD98: ; 0x0204BD98
stmdb sp!, {r3, lr}
@ -162,7 +83,7 @@ _0204BE88:
and r0, r2, #0xff
b _0204BEBC
_0204BE9C:
ldr r1, _0204BEC4 ; =_0209CEAC
ldr r1, _0204BEC4 ; =EVENT_FLAG_PROG_POS_INFO
add r0, sp, #0
ldr r3, [r1, #0xc]
ldr ip, [r1, #8]
@ -174,16 +95,16 @@ _0204BEBC:
add sp, sp, #8
ldmia sp!, {r3, pc}
.align 2, 0
_0204BEC4: .word _0209CEAC
_0204BEC4: .word EVENT_FLAG_PROG_POS_INFO
_0204BEC8: .word _0209CF48
arm_func_end sub_0204BD98
arm_func_start sub_0204BECC
sub_0204BECC: ; 0x0204BECC
ldr ip, _0204BED4 ; =sub_0204BCAC
ldr ip, _0204BED4 ; =FlagCalc
bx ip
.align 2, 0
_0204BED4: .word sub_0204BCAC
_0204BED4: .word FlagCalc
arm_func_end sub_0204BECC
arm_func_start sub_0204BED8
@ -196,7 +117,7 @@ sub_0204BED8: ; 0x0204BED8
bl LoadScriptVariableValue
mov r1, r5
mov r2, r4
bl sub_0204BCAC
bl FlagCalc
mov r2, r0
mov r0, r7
mov r1, r6
@ -219,7 +140,7 @@ sub_0204BF10: ; 0x0204BF10
mov r1, r0
mov r0, r4
mov r2, r5
bl sub_0204BCAC
bl FlagCalc
mov r2, r0
mov r0, r8
mov r1, r7

View File

@ -8179,8 +8179,8 @@ _0209CE9C:
.global _0209CEA4
_0209CEA4:
.byte 0x4C, 0x4F, 0x43, 0x41, 0x4C, 0x31, 0x00, 0x00
.global _0209CEAC
_0209CEAC:
.global EVENT_FLAG_PROG_POS_INFO
EVENT_FLAG_PROG_POS_INFO:
.word _0209CEBC
.byte 0xE9, 0x03, 0x00, 0x00
.word _0209CEBC
@ -8208,8 +8208,8 @@ _0209CF0C:
.byte 0x45, 0x76, 0x65, 0x6E, 0x74, 0x46, 0x6C, 0x61
.byte 0x67, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x25, 0x30, 0x34, 0x78, 0x2F, 0x25, 0x30, 0x34, 0x78, 0x0A
.byte 0x00, 0x00, 0x00, 0x00
.global _0209CF28
_0209CF28:
.global EVENT_FLAG_EXPANSION_ERROR
EVENT_FLAG_EXPANSION_ERROR:
.byte 0x65, 0x76, 0x65, 0x6E, 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x65
.byte 0x78, 0x70, 0x61, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x25
.byte 0x64, 0x00, 0x00, 0x00

View File

@ -2135,336 +2135,3 @@ _02313808: .word 0x00000DCC + LOWER_OFFENSIVE_STAT_OFFSET
_0231380C: .word 0x00000D91 + LOWER_OFFENSIVE_STAT_OFFSET
_02313810: .word 0x00000DD9 + LOWER_OFFENSIVE_STAT_OFFSET
arm_func_end LowerOffensiveStat
arm_func_start LowerDefensiveStat
LowerDefensiveStat: ; 0x02313814
#ifdef JAPAN
#define LOWER_DEFENSIVE_STAT_OFFSET -0x2C0
#else
#define LOWER_DEFENSIVE_STAT_OFFSET 0
#endif
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r7, r1
mov r5, r3
mov r8, r0
bl AllocateTemp1024ByteBufferFromPool
mov r6, r0
bl AllocateTemp1024ByteBufferFromPool
mov r4, r0
mov r1, r5, lsl #0x10
mov r0, r7
mov r5, r1, asr #0x10
bl EntityIsValid__023118B4
cmp r0, #0
beq _0231397C
ldr r0, [sp, #0x20]
cmp r0, #0
beq _02313878
ldr r1, _02313988 ; =0x00000DC9
mov r0, r6
bl CopyStringFromId
mov r1, r6
mov r0, #1
bl SetMessageLogPreprocessorArgsString
b _02313890
_02313878:
ldr r1, _0231398C ; =0x00000DC8
mov r0, r6
bl CopyStringFromId
mov r1, r6
mov r0, #1
bl SetMessageLogPreprocessorArgsString
_02313890:
ldrb r0, [sp, #0x28]
cmp r0, #0
beq _023138B4
ldrb r2, [sp, #0x2c]
mov r0, r8
mov r1, r7
bl IsProtectedFromStatDrops
cmp r0, #0
bne _0231397C
_023138B4:
mov r0, #0
mov r1, r7
mov r2, r0
ldr r6, [r7, #0xb4]
bl SubstitutePlaceholderStringTags
add r1, sp, #0x20
ldr r1, [r1]
mov r0, r7
bl ov29_022E4DCC
mov r0, r7
mov r1, #0x61
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, r5, lsl #0x11
movne r5, r0, asr #0x10
cmp r5, #1
bne _02313914
ldr r1, _02313990 ; =0x00000DCD
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #2
bl SetMessageLogPreprocessorArgsString
b _0231392C
_02313914:
ldr r1, _02313994 ; =0x00000DCC
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #2
bl SetMessageLogPreprocessorArgsString
_0231392C:
ldr r1, [sp, #0x20]
add r0, r6, r1, lsl #1
ldrsh r0, [r0, #0x28]
subs r4, r0, r5
movmi r4, #0
cmp r4, r0
beq _02313964
add r3, r6, r1, lsl #1
mov r0, r8
mov r1, r7
mov r2, #0xd90 + LOWER_DEFENSIVE_STAT_OFFSET
strh r4, [r3, #0x28]
bl LogMessageByIdWithPopupCheckUserTarget
b _02313974
_02313964:
ldr r2, _02313998 ; =0x00000DD7
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
_02313974:
mov r0, r7
bl UpdateStatusIconFlags
_0231397C:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
_02313988: .word 0x00000DC9 + LOWER_DEFENSIVE_STAT_OFFSET
_0231398C: .word 0x00000DC8 + LOWER_DEFENSIVE_STAT_OFFSET
_02313990: .word 0x00000DCD + LOWER_DEFENSIVE_STAT_OFFSET
_02313994: .word 0x00000DCC + LOWER_DEFENSIVE_STAT_OFFSET
_02313998: .word 0x00000DD7 + LOWER_DEFENSIVE_STAT_OFFSET
arm_func_end LowerDefensiveStat
arm_func_start BoostOffensiveStat
BoostOffensiveStat: ; 0x0231399C
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r1
mov r6, r3
mov sb, r0
bl AllocateTemp1024ByteBufferFromPool
mov r4, r0
bl AllocateTemp1024ByteBufferFromPool
mov r5, r0
mov r1, r6, lsl #0x10
mov r0, r8
mov r6, r1, asr #0x10
bl EntityIsValid__023118B4
cmp r0, #0
beq _02313AE4
mov r0, #0
mov r1, r8
mov r2, r0
ldr r7, [r8, #0xb4]
bl SubstitutePlaceholderStringTags
add r1, sp, #0x28
ldr r1, [r1]
mov r0, r8
bl ov29_022E4E74
ldr r0, [sp, #0x28]
cmp r0, #0
beq _02313A24
ldr r1, _02313AF0 ; =0x00000DCB
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
b _02313A3C
_02313A24:
ldr r1, _02313AF4 ; =0x00000DCA
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
_02313A3C:
mov r0, r8
mov r1, #0x61
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, r6, lsl #0x11
movne r6, r0, asr #0x10
cmp r6, #1
bne _02313A78
ldr r1, _02313AF8 ; =0x00000DCD
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
b _02313A90
_02313A78:
ldr r1, _02313AFC ; =0x00000DCC
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
_02313A90:
ldr r1, [sp, #0x28]
add r0, r7, r1, lsl #1
ldrsh r0, [r0, #0x24]
add r4, r0, r6
cmp r4, #0x14
movge r4, #0x14
cmp r4, r0
beq _02313ACC
ldr r2, _02313B00 ; =0x00000D8F
add r3, r7, r1, lsl #1
mov r0, sb
mov r1, r8
strh r4, [r3, #0x24]
bl LogMessageByIdWithPopupCheckUserTarget
b _02313ADC
_02313ACC:
ldr r2, _02313B04 ; =0x00000DD8
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
_02313ADC:
mov r0, r8
bl UpdateStatusIconFlags
_02313AE4:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
#ifdef JAPAN
#define BOOST_OFFENSIVE_STAT_OFFSET -0x2C0
#else
#define BOOST_OFFENSIVE_STAT_OFFSET 0
#endif
_02313AF0: .word 0x00000DCB + BOOST_OFFENSIVE_STAT_OFFSET
_02313AF4: .word 0x00000DCA + BOOST_OFFENSIVE_STAT_OFFSET
_02313AF8: .word 0x00000DCD + BOOST_OFFENSIVE_STAT_OFFSET
_02313AFC: .word 0x00000DCC + BOOST_OFFENSIVE_STAT_OFFSET
_02313B00: .word 0x00000D8F + BOOST_OFFENSIVE_STAT_OFFSET
_02313B04: .word 0x00000DD8 + BOOST_OFFENSIVE_STAT_OFFSET
arm_func_end BoostOffensiveStat
; https://decomp.me/scratch/90P8f
arm_func_start BoostDefensiveStat
BoostDefensiveStat: ; 0x02313B08
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r1
mov r6, r3
mov sb, r0
bl AllocateTemp1024ByteBufferFromPool
mov r4, r0
bl AllocateTemp1024ByteBufferFromPool
mov r5, r0
mov r1, r6, lsl #0x10
mov r0, r8
mov r6, r1, asr #0x10
bl EntityIsValid__023118B4
cmp r0, #0
beq _02313C50
mov r0, #0
mov r1, r8
mov r2, r0
ldr r7, [r8, #0xb4]
bl SubstitutePlaceholderStringTags
add r1, sp, #0x28
ldr r1, [r1]
mov r0, r8
bl ov29_022E4F1C
ldr r0, [sp, #0x28]
cmp r0, #0
beq _02313B90
ldr r1, _02313C5C ; =0x00000DC9
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
b _02313BA8
_02313B90:
ldr r1, _02313C60 ; =0x00000DC8
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
_02313BA8:
mov r0, r8
mov r1, #0x61
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, r6, lsl #0x11
movne r6, r0, asr #0x10
cmp r6, #1
bne _02313BE4
ldr r1, _02313C64 ; =0x00000DCD
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
b _02313BFC
_02313BE4:
ldr r1, _02313C68 ; =0x00000DCC
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
_02313BFC:
ldr r1, [sp, #0x28]
add r0, r7, r1, lsl #1
ldrsh r0, [r0, #0x28]
add r4, r0, r6
cmp r4, #0x14
movge r4, #0x14
cmp r4, r0
beq _02313C38
ldr r2, _02313C6C ; =0x00000D8E
add r3, r7, r1, lsl #1
mov r0, sb
mov r1, r8
strh r4, [r3, #0x28]
bl LogMessageByIdWithPopupCheckUserTarget
b _02313C48
_02313C38:
ldr r2, _02313C70 ; =0x00000DD6
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
_02313C48:
mov r0, r8
bl UpdateStatusIconFlags
_02313C50:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
#ifdef JAPAN
#define BOOST_DEFENSIVE_STAT_OFFSET -0x2C0
#else
#define BOOST_DEFENSIVE_STAT_OFFSET 0
#endif
_02313C5C: .word 0x00000DC9 + BOOST_DEFENSIVE_STAT_OFFSET
_02313C60: .word 0x00000DC8 + BOOST_DEFENSIVE_STAT_OFFSET
_02313C64: .word 0x00000DCD + BOOST_DEFENSIVE_STAT_OFFSET
_02313C68: .word 0x00000DCC + BOOST_DEFENSIVE_STAT_OFFSET
_02313C6C: .word 0x00000D8E + BOOST_DEFENSIVE_STAT_OFFSET
_02313C70: .word 0x00000DD6 + BOOST_DEFENSIVE_STAT_OFFSET
arm_func_end BoostDefensiveStat

221
asm/overlay_29_0231399C.s Normal file
View File

@ -0,0 +1,221 @@
.include "asm/macros.inc"
.include "overlay_29_0231399C.inc"
.text
arm_func_start BoostOffensiveStat
BoostOffensiveStat: ; 0x0231399C
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r1
mov r6, r3
mov sb, r0
bl AllocateTemp1024ByteBufferFromPool
mov r4, r0
bl AllocateTemp1024ByteBufferFromPool
mov r5, r0
mov r1, r6, lsl #0x10
mov r0, r8
mov r6, r1, asr #0x10
bl EntityIsValid__023118B4
cmp r0, #0
beq _02313AE4
mov r0, #0
mov r1, r8
mov r2, r0
ldr r7, [r8, #0xb4]
bl SubstitutePlaceholderStringTags
add r1, sp, #0x28
ldr r1, [r1]
mov r0, r8
bl ov29_022E4E74
ldr r0, [sp, #0x28]
cmp r0, #0
beq _02313A24
ldr r1, _02313AF0 ; =0x00000DCB
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
b _02313A3C
_02313A24:
ldr r1, _02313AF4 ; =0x00000DCA
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
_02313A3C:
mov r0, r8
mov r1, #0x61
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, r6, lsl #0x11
movne r6, r0, asr #0x10
cmp r6, #1
bne _02313A78
ldr r1, _02313AF8 ; =0x00000DCD
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
b _02313A90
_02313A78:
ldr r1, _02313AFC ; =0x00000DCC
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
_02313A90:
ldr r1, [sp, #0x28]
add r0, r7, r1, lsl #1
ldrsh r0, [r0, #0x24]
add r4, r0, r6
cmp r4, #0x14
movge r4, #0x14
cmp r4, r0
beq _02313ACC
ldr r2, _02313B00 ; =0x00000D8F
add r3, r7, r1, lsl #1
mov r0, sb
mov r1, r8
strh r4, [r3, #0x24]
bl LogMessageByIdWithPopupCheckUserTarget
b _02313ADC
_02313ACC:
ldr r2, _02313B04 ; =0x00000DD8
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
_02313ADC:
mov r0, r8
bl UpdateStatusIconFlags
_02313AE4:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
#ifdef JAPAN
#define BOOST_OFFENSIVE_STAT_OFFSET -0x2C0
#else
#define BOOST_OFFENSIVE_STAT_OFFSET 0
#endif
_02313AF0: .word 0x00000DCB + BOOST_OFFENSIVE_STAT_OFFSET
_02313AF4: .word 0x00000DCA + BOOST_OFFENSIVE_STAT_OFFSET
_02313AF8: .word 0x00000DCD + BOOST_OFFENSIVE_STAT_OFFSET
_02313AFC: .word 0x00000DCC + BOOST_OFFENSIVE_STAT_OFFSET
_02313B00: .word 0x00000D8F + BOOST_OFFENSIVE_STAT_OFFSET
_02313B04: .word 0x00000DD8 + BOOST_OFFENSIVE_STAT_OFFSET
arm_func_end BoostOffensiveStat
; https://decomp.me/scratch/90P8f
arm_func_start BoostDefensiveStat
BoostDefensiveStat: ; 0x02313B08
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r1
mov r6, r3
mov sb, r0
bl AllocateTemp1024ByteBufferFromPool
mov r4, r0
bl AllocateTemp1024ByteBufferFromPool
mov r5, r0
mov r1, r6, lsl #0x10
mov r0, r8
mov r6, r1, asr #0x10
bl EntityIsValid__023118B4
cmp r0, #0
beq _02313C50
mov r0, #0
mov r1, r8
mov r2, r0
ldr r7, [r8, #0xb4]
bl SubstitutePlaceholderStringTags
add r1, sp, #0x28
ldr r1, [r1]
mov r0, r8
bl ov29_022E4F1C
ldr r0, [sp, #0x28]
cmp r0, #0
beq _02313B90
ldr r1, _02313C5C ; =0x00000DC9
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
b _02313BA8
_02313B90:
ldr r1, _02313C60 ; =0x00000DC8
mov r0, r4
bl CopyStringFromId
mov r1, r4
mov r0, #1
bl SetMessageLogPreprocessorArgsString
_02313BA8:
mov r0, r8
mov r1, #0x61
bl AbilityIsActiveVeneer
cmp r0, #0
movne r0, r6, lsl #0x11
movne r6, r0, asr #0x10
cmp r6, #1
bne _02313BE4
ldr r1, _02313C64 ; =0x00000DCD
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
b _02313BFC
_02313BE4:
ldr r1, _02313C68 ; =0x00000DCC
mov r0, r5
bl CopyStringFromId
mov r1, r5
mov r0, #2
bl SetMessageLogPreprocessorArgsString
_02313BFC:
ldr r1, [sp, #0x28]
add r0, r7, r1, lsl #1
ldrsh r0, [r0, #0x28]
add r4, r0, r6
cmp r4, #0x14
movge r4, #0x14
cmp r4, r0
beq _02313C38
ldr r2, _02313C6C ; =0x00000D8E
add r3, r7, r1, lsl #1
mov r0, sb
mov r1, r8
strh r4, [r3, #0x28]
bl LogMessageByIdWithPopupCheckUserTarget
b _02313C48
_02313C38:
ldr r2, _02313C70 ; =0x00000DD6
mov r0, sb
mov r1, r8
bl LogMessageByIdWithPopupCheckUserTarget
_02313C48:
mov r0, r8
bl UpdateStatusIconFlags
_02313C50:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
#ifdef JAPAN
#define BOOST_DEFENSIVE_STAT_OFFSET -0x2C0
#else
#define BOOST_DEFENSIVE_STAT_OFFSET 0
#endif
_02313C5C: .word 0x00000DC9 + BOOST_DEFENSIVE_STAT_OFFSET
_02313C60: .word 0x00000DC8 + BOOST_DEFENSIVE_STAT_OFFSET
_02313C64: .word 0x00000DCD + BOOST_DEFENSIVE_STAT_OFFSET
_02313C68: .word 0x00000DCC + BOOST_DEFENSIVE_STAT_OFFSET
_02313C6C: .word 0x00000D8E + BOOST_DEFENSIVE_STAT_OFFSET
_02313C70: .word 0x00000DD6 + BOOST_DEFENSIVE_STAT_OFFSET
arm_func_end BoostDefensiveStat

View File

@ -3441,4 +3441,19 @@ enum game_mode
// Possibly more?
};
enum FlagCalcOperation {
CALC_SET = 0,
CALC_SUB = 1,
CALC_ADD = 2,
CALC_MUL = 3,
CALC_DIV = 4,
CALC_MOD = 5,
CALC_AND = 6,
CALC_OR = 7,
CALC_XOR = 8,
CALC_SETBIT = 9,
CALC_CLEARBIT = 10,
CALC_RANDOM = 11,
};
#endif //PMDSKY_ENUMS_H

View File

@ -0,0 +1,11 @@
#ifndef PMDSKY_OVERLAY_29_02313814_H
#define PMDSKY_OVERLAY_29_02313814_H
struct StatIndex
{
int id;
};
void LowerDefensiveStat(struct entity *pokemon, struct entity *target, struct StatIndex stat, s32 increment, bool8 checkProtected, bool8 logMsgProtected);
#endif //PMDSKY_OVERLAY_29_02313814_H

View File

@ -41,5 +41,6 @@ void LoadScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s3
void LoadScriptVariableValueString(const enum script_var_id sv_id, u8* result, u8 num_bytes);
void SaveScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s32 num_bytes);
s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2);
s32 FlagCalc(s32 param_1, s32 param_2, enum FlagCalcOperation operation);
#endif //PMDSKY_SCRIPTING_H

View File

@ -81,7 +81,7 @@ Static main
Object src/main_0204AFF8.o
Object asm/main_0204B018.o
Object src/scripting.o
Object asm/main_0204BCAC.o
Object asm/main_0204BD98.o
Object src/main_0204C938.o
Object asm/main_0204C94C.o
Object src/dungeon_recruitment_3.o
@ -543,6 +543,8 @@ Overlay OVY_29
Object asm/overlay_29_023118D8.o
Object src/overlay_29_02311BF8.o
Object asm/overlay_29_02311C28.o
Object src/overlay_29_02313814.o
Object asm/overlay_29_0231399C.o
Object src/move_orb_effects.o
Object asm/overlay_29_02313CE4.o
Object src/overlay_29_023147EC.o

76
src/overlay_29_02313814.c Normal file
View File

@ -0,0 +1,76 @@
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util_static.h"
#include "overlay_29_023118B4.h"
#include "overlay_29_02313814.h"
extern u8* AllocateTemp1024ByteBufferFromPool(void);
extern void CopyStringFromId(u8* buf, u32 string_id);
extern void SetMessageLogPreprocessorArgsString(u32 a, u8 *buf);
extern bool8 IsProtectedFromStatDrops(struct entity *user, struct entity *target, bool8 logMsg);
extern void SubstitutePlaceholderStringTags(int a, struct entity *entity, u32 param_3);
extern void ov29_022E4DCC(struct entity *pokemon, struct StatIndex);
extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id);
extern void UpdateStatusIconFlags(struct entity *);
#ifdef JAPAN
#define LOWER_DEFENSIVE_STAT_OFFSET -0x2C0
#else
#define LOWER_DEFENSIVE_STAT_OFFSET 0
#endif // JAPAN
void LowerDefensiveStat(struct entity *pokemon, struct entity *target, struct StatIndex stat, s32 nStagesRaw, bool8 checkProtected, bool8 logMsgProtected)
{
struct monster *entityInfo;
u8 *buffer1 = AllocateTemp1024ByteBufferFromPool();
u8 *buffer2 = AllocateTemp1024ByteBufferFromPool();
s16 nStages = nStagesRaw;
s32 newStage;
if (!EntityIsValid__023118B4(target))
return;
if (stat.id != 0) {
CopyStringFromId(buffer1, 0xdc9 + LOWER_DEFENSIVE_STAT_OFFSET);
SetMessageLogPreprocessorArgsString(1, buffer1);
}
else {
CopyStringFromId(buffer1, 0xdc8 + LOWER_DEFENSIVE_STAT_OFFSET);
SetMessageLogPreprocessorArgsString(1, buffer1);
}
if (checkProtected) {
if (IsProtectedFromStatDrops(pokemon, target, logMsgProtected))
return;
}
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(0,target,0);
ov29_022E4DCC(target,stat);
if (AbilityIsActiveVeneer(target, ABILITY_SIMPLE))
nStages *= 2;
if (nStages == 1) {
CopyStringFromId(buffer2, 0xdcd + LOWER_DEFENSIVE_STAT_OFFSET);
SetMessageLogPreprocessorArgsString(2, buffer2);
}
else {
CopyStringFromId(buffer2, 0xdcc + LOWER_DEFENSIVE_STAT_OFFSET);
SetMessageLogPreprocessorArgsString(2, buffer2);
}
newStage = entityInfo->stat_modifiers.defensive_stages[stat.id];
newStage -= nStages;
if (newStage < 0) {
newStage = 0;
}
if (entityInfo->stat_modifiers.defensive_stages[stat.id] != newStage) {
entityInfo->stat_modifiers.defensive_stages[stat.id] = newStage;
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xd90 + LOWER_DEFENSIVE_STAT_OFFSET);
}
else {
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xdd7 + LOWER_DEFENSIVE_STAT_OFFSET);
}
UpdateStatusIconFlags(target);
}

View File

@ -1,4 +1,6 @@
#include "debug.h"
#include "enums.h"
#include "main_0200224C.h"
#include "scripting.h"
// Global script variable definitions
@ -24,6 +26,9 @@ extern s32 sub_0204C928(s32 arg0);
const short LOCAL_SCRIPT_VAR_OFFSET = 0x400;
extern struct prog_pos_info EVENT_FLAG_PROG_POS_INFO;
extern u8 EVENT_FLAG_EXPANSION_ERROR;
void LoadScriptVariableRaw(struct script_var_raw* sv_raw,
union script_var_value sv_val_local[],
const enum script_var_id sv_id) {
@ -358,3 +363,39 @@ s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_
return 1;
}
s32 FlagCalc(s32 param_1, s32 param_2, enum FlagCalcOperation operation)
{
switch (operation) {
case CALC_SET:
return param_2;
case CALC_SUB:
return param_1 - param_2;
case CALC_ADD:
return param_1 + param_2;
case CALC_MUL:
return param_1 * param_2;
case CALC_DIV:
return param_1 / param_2;
case CALC_MOD:
return param_1 % param_2;
case CALC_AND:
return param_1 & param_2;
case CALC_OR:
return param_1 | param_2;
case CALC_XOR:
return param_1 ^ param_2;
case CALC_SETBIT:
return (1 << param_2) | param_1;
case CALC_CLEARBIT:
return param_1 & ~(1 << param_2);
case CALC_RANDOM:
return RandInt(param_2);
default:
// EVENT_FLAG_PROG_POS_INFO contains a pointer to the filename event_flag.c
// and a line number of 1001
struct prog_pos_info prog_pos_info = EVENT_FLAG_PROG_POS_INFO;
// EVENT_FLAG_EXPANSION_ERROR contains the string "event flag expansion error %d"
Debug_FatalError(&prog_pos_info, &EVENT_FLAG_EXPANSION_ERROR, operation);
}
}