mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-12 13:26:56 -05:00
BoostOffensiveStat
This commit is contained in:
@@ -7,5 +7,4 @@
|
||||
.public SetMessageLogPreprocessorArgsString
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public UpdateStatusIconFlags
|
||||
.public ov29_022E4E74
|
||||
.public ov29_022E4F1C
|
||||
@@ -1,116 +1,8 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_0231399C.inc"
|
||||
.include "overlay_29_02313B08.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
|
||||
@@ -13,5 +13,6 @@ struct StatIndex
|
||||
|
||||
void LowerOffensiveStat(struct entity *pokemon, struct entity *target, struct StatIndex stat, s32 nStagesRaw, bool8 checkProtected, bool8 logMsgProtected);
|
||||
void LowerDefensiveStat(struct entity *pokemon, struct entity *target, struct StatIndex stat, s32 increment, bool8 checkProtected, bool8 logMsgProtected);
|
||||
void BoostOffensiveStat(struct entity *pokemon, struct entity *target, struct StatIndex stat, s32 nStagesRaw);
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_02313814_H
|
||||
|
||||
2
main.lsf
2
main.lsf
@@ -542,7 +542,7 @@ Overlay OVY_29
|
||||
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 asm/overlay_29_02313B08.o
|
||||
Object src/move_orb_effects.o
|
||||
Object asm/overlay_29_02313CE4.o
|
||||
Object src/overlay_29_023147EC.o
|
||||
|
||||
@@ -9,6 +9,7 @@ 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_022E4E74(struct entity *pokemon, struct StatIndex);
|
||||
extern void ov29_022E4DCC(struct entity *pokemon, struct StatIndex);
|
||||
extern void ov29_022E4D28(struct entity *pokemon, struct StatIndex);
|
||||
extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id);
|
||||
@@ -31,7 +32,7 @@ void LowerOffensiveStat(struct entity *pokemon, struct entity *target, struct St
|
||||
if (!EntityIsValid__023118B4(target))
|
||||
return;
|
||||
|
||||
if (stat.id != 0) {
|
||||
if (stat.id != STAT_INDEX_PHYSICAL) {
|
||||
CopyStringFromId(buffer1, 0xdcb + JPN_MSG_OFFSET);
|
||||
SetMessageLogPreprocessorArgsString(1, buffer1);
|
||||
}
|
||||
@@ -104,7 +105,7 @@ void LowerDefensiveStat(struct entity *pokemon, struct entity *target, struct St
|
||||
if (!EntityIsValid__023118B4(target))
|
||||
return;
|
||||
|
||||
if (stat.id != 0) {
|
||||
if (stat.id != STAT_INDEX_PHYSICAL) {
|
||||
CopyStringFromId(buffer1, 0xdc9 + JPN_MSG_OFFSET);
|
||||
SetMessageLogPreprocessorArgsString(1, buffer1);
|
||||
}
|
||||
@@ -149,3 +150,54 @@ void LowerDefensiveStat(struct entity *pokemon, struct entity *target, struct St
|
||||
}
|
||||
UpdateStatusIconFlags(target);
|
||||
}
|
||||
|
||||
void BoostOffensiveStat(struct entity *pokemon, struct entity *target, struct StatIndex stat, s32 nStagesRaw)
|
||||
{
|
||||
struct monster *entityInfo;
|
||||
u8 *buffer1 = AllocateTemp1024ByteBufferFromPool();
|
||||
u8 *buffer2 = AllocateTemp1024ByteBufferFromPool();
|
||||
s16 nStages = nStagesRaw;
|
||||
s32 newStage;
|
||||
|
||||
if (!EntityIsValid__023118B4(target))
|
||||
return;
|
||||
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(0,target,0);
|
||||
ov29_022E4E74(target,stat);
|
||||
if (stat.id != STAT_INDEX_PHYSICAL) {
|
||||
CopyStringFromId(buffer1, 0xdcb + JPN_MSG_OFFSET);
|
||||
SetMessageLogPreprocessorArgsString(1, buffer1);
|
||||
}
|
||||
else {
|
||||
CopyStringFromId(buffer1, 0xdca + JPN_MSG_OFFSET);
|
||||
SetMessageLogPreprocessorArgsString(1, buffer1);
|
||||
}
|
||||
|
||||
if (AbilityIsActiveVeneer(target, ABILITY_SIMPLE))
|
||||
nStages *= 2;
|
||||
|
||||
if (nStages == 1) {
|
||||
CopyStringFromId(buffer2, 0xdcd + JPN_MSG_OFFSET);
|
||||
SetMessageLogPreprocessorArgsString(2, buffer2);
|
||||
}
|
||||
else {
|
||||
CopyStringFromId(buffer2, 0xdcc + JPN_MSG_OFFSET);
|
||||
SetMessageLogPreprocessorArgsString(2, buffer2);
|
||||
}
|
||||
|
||||
newStage = entityInfo->stat_modifiers.offensive_stages[stat.id];
|
||||
newStage += nStages;
|
||||
if (newStage >= MAX_STAT_STAGE) {
|
||||
newStage = MAX_STAT_STAGE;
|
||||
}
|
||||
|
||||
if (entityInfo->stat_modifiers.offensive_stages[stat.id] != newStage) {
|
||||
entityInfo->stat_modifiers.offensive_stages[stat.id] = newStage;
|
||||
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xd8f + JPN_MSG_OFFSET);
|
||||
}
|
||||
else {
|
||||
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xdd8 + JPN_MSG_OFFSET);
|
||||
}
|
||||
UpdateStatusIconFlags(target);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user