Merge pull request #204 from DizzyEggg/LowerDefenseStageTarget
Some checks failed
build / build (push) Has been cancelled

LowerDefenseStageTarget
This commit is contained in:
AnonymousRandomPerson 2025-10-30 21:16:17 -04:00 committed by GitHub
commit 2dd75e0c8e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 331 additions and 346 deletions

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

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

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

@ -541,6 +541,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);
}