mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
LowerOffensiveStat
This commit is contained in:
parent
2dd75e0c8e
commit
723dc40be7
|
|
@ -1,9 +1,7 @@
|
|||
#pragma once
|
||||
.public AbilityIsActiveVeneer
|
||||
.public AllocateTemp1024ByteBufferFromPool
|
||||
.public CalcStatusDuration
|
||||
.public ChangeShayminForme
|
||||
.public CopyStringFromId
|
||||
.public DIRECTIONS_XY
|
||||
.public DUNGEON_PTR
|
||||
.public DefenderAbilityIsActive__02311B94
|
||||
|
|
@ -15,13 +13,11 @@
|
|||
.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
|
||||
|
|
@ -53,7 +49,6 @@
|
|||
.public ov29_022E4C00
|
||||
.public ov29_022E4C4C
|
||||
.public ov29_022E4D24
|
||||
.public ov29_022E4D28
|
||||
.public ov29_022E53EC
|
||||
.public ov29_02304A48
|
||||
.public ov29_02304A84
|
||||
|
|
|
|||
|
|
@ -1980,158 +1980,3 @@ _023135F4: .word 0x00000D33
|
|||
#endif
|
||||
_023135F8: .word DUNGEON_PTR
|
||||
arm_func_end TryInflictPetrifiedStatus
|
||||
|
||||
arm_func_start LowerOffensiveStat
|
||||
LowerOffensiveStat: ; 0x023135FC
|
||||
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 _023137E8
|
||||
ldr r0, [sp, #0x20]
|
||||
cmp r0, #0
|
||||
beq _02313660
|
||||
ldr r1, _023137F4 ; =0x00000DCB
|
||||
mov r0, r6
|
||||
bl CopyStringFromId
|
||||
mov r1, r6
|
||||
mov r0, #1
|
||||
bl SetMessageLogPreprocessorArgsString
|
||||
b _02313678
|
||||
_02313660:
|
||||
ldr r1, _023137F8 ; =0x00000DCA
|
||||
mov r0, r6
|
||||
bl CopyStringFromId
|
||||
mov r1, r6
|
||||
mov r0, #1
|
||||
bl SetMessageLogPreprocessorArgsString
|
||||
_02313678:
|
||||
ldrb r0, [sp, #0x28]
|
||||
cmp r0, #0
|
||||
beq _02313720
|
||||
ldrb r2, [sp, #0x2c]
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
bl IsProtectedFromStatDrops
|
||||
cmp r0, #0
|
||||
bne _023137E8
|
||||
mov r0, r7
|
||||
mov r1, #0x12
|
||||
bl ItemIsActive__02311BF8
|
||||
cmp r0, #0
|
||||
beq _023136D4
|
||||
mov r0, #0
|
||||
mov r1, r7
|
||||
mov r2, r0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldr r2, _023137FC ; =0x00000DB2
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _023137E8
|
||||
_023136D4:
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, #9
|
||||
#ifndef JAPAN
|
||||
mov r3, #1
|
||||
#endif
|
||||
bl DefenderAbilityIsActive__02311B94
|
||||
cmp r0, #0
|
||||
beq _02313720
|
||||
ldr r0, [sp, #0x20]
|
||||
cmp r0, #0
|
||||
bne _02313720
|
||||
mov r0, #0
|
||||
mov r1, r7
|
||||
mov r2, r0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldr r2, _02313800 ; =0x00000D9E
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _023137E8
|
||||
_02313720:
|
||||
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_022E4D28
|
||||
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 _02313780
|
||||
ldr r1, _02313804 ; =0x00000DCD
|
||||
mov r0, r4
|
||||
bl CopyStringFromId
|
||||
mov r1, r4
|
||||
mov r0, #2
|
||||
bl SetMessageLogPreprocessorArgsString
|
||||
b _02313798
|
||||
_02313780:
|
||||
ldr r1, _02313808 ; =0x00000DCC
|
||||
mov r0, r4
|
||||
bl CopyStringFromId
|
||||
mov r1, r4
|
||||
mov r0, #2
|
||||
bl SetMessageLogPreprocessorArgsString
|
||||
_02313798:
|
||||
ldr r1, [sp, #0x20]
|
||||
add r0, r6, r1, lsl #1
|
||||
ldrsh r0, [r0, #0x24]
|
||||
subs r4, r0, r5
|
||||
movmi r4, #0
|
||||
cmp r4, r0
|
||||
beq _023137D0
|
||||
ldr r2, _0231380C ; =0x00000D91
|
||||
add r3, r6, r1, lsl #1
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
strh r4, [r3, #0x24]
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _023137E0
|
||||
_023137D0:
|
||||
ldr r2, _02313810 ; =0x00000DD9
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_023137E0:
|
||||
mov r0, r7
|
||||
bl UpdateStatusIconFlags
|
||||
_023137E8:
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
#define LOWER_OFFENSIVE_STAT_OFFSET -0x2C0
|
||||
#else
|
||||
#define LOWER_OFFENSIVE_STAT_OFFSET 0
|
||||
#endif
|
||||
_023137F4: .word 0x00000DCB + LOWER_OFFENSIVE_STAT_OFFSET
|
||||
_023137F8: .word 0x00000DCA + LOWER_OFFENSIVE_STAT_OFFSET
|
||||
_023137FC: .word 0x00000DB2 + LOWER_OFFENSIVE_STAT_OFFSET
|
||||
_02313800: .word 0x00000D9E + LOWER_OFFENSIVE_STAT_OFFSET
|
||||
_02313804: .word 0x00000DCD + LOWER_OFFENSIVE_STAT_OFFSET
|
||||
_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
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
#ifndef PMDSKY_OVERLAY_29_02313814_H
|
||||
#define PMDSKY_OVERLAY_29_02313814_H
|
||||
|
||||
#define STAT_INDEX_PHYSICAL 0 // Atk, Def
|
||||
#define STAT_INDEX_SPECIAL 1 // Sp Atk, Sp Def
|
||||
#define STAT_INDEX_ACCURACY STAT_INDEX_PHYSICAL
|
||||
#define STAT_INDEX_EVASION STAT_INDEX_SPECIAL
|
||||
|
||||
struct StatIndex
|
||||
{
|
||||
int id;
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_02313814_H
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "dungeon_util_static.h"
|
||||
#include "overlay_29_023118B4.h"
|
||||
#include "overlay_29_02313814.h"
|
||||
#include "overlay_29_02311BF8.h"
|
||||
|
||||
extern u8* AllocateTemp1024ByteBufferFromPool(void);
|
||||
extern void CopyStringFromId(u8* buf, u32 string_id);
|
||||
|
|
@ -9,9 +10,79 @@ 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 ov29_022E4D28(struct entity *pokemon, struct StatIndex);
|
||||
extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id);
|
||||
extern void UpdateStatusIconFlags(struct entity *);
|
||||
|
||||
void LowerOffensiveStat(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, 0xdcb);
|
||||
SetMessageLogPreprocessorArgsString(1, buffer1);
|
||||
}
|
||||
else {
|
||||
CopyStringFromId(buffer1, 0xdca);
|
||||
SetMessageLogPreprocessorArgsString(1, buffer1);
|
||||
}
|
||||
|
||||
if (checkProtected) {
|
||||
if (IsProtectedFromStatDrops(pokemon, target, logMsgProtected))
|
||||
return;
|
||||
|
||||
if (ItemIsActive__02311BF8(target, ITEM_TWIST_BAND)) {
|
||||
SubstitutePlaceholderStringTags(0,target,0);
|
||||
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xdb2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (DefenderAbilityIsActive__02311B94(pokemon, target, ABILITY_HYPER_CUTTER, TRUE) && stat.id == STAT_INDEX_PHYSICAL) {
|
||||
SubstitutePlaceholderStringTags(0,target,0);
|
||||
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xd9e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(0,target,0);
|
||||
ov29_022E4D28(target,stat);
|
||||
|
||||
if (AbilityIsActiveVeneer(target, ABILITY_SIMPLE))
|
||||
nStages *= 2;
|
||||
|
||||
if (nStages == 1) {
|
||||
CopyStringFromId(buffer2, 0xdcd);
|
||||
SetMessageLogPreprocessorArgsString(2, buffer2);
|
||||
}
|
||||
else {
|
||||
CopyStringFromId(buffer2, 0xdcc);
|
||||
SetMessageLogPreprocessorArgsString(2, buffer2);
|
||||
}
|
||||
|
||||
newStage = entityInfo->stat_modifiers.offensive_stages[stat.id];
|
||||
newStage -= nStages;
|
||||
if (newStage < 0) {
|
||||
newStage = 0;
|
||||
}
|
||||
|
||||
if (entityInfo->stat_modifiers.offensive_stages[stat.id] != newStage) {
|
||||
entityInfo->stat_modifiers.offensive_stages[stat.id] = newStage;
|
||||
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xd91);
|
||||
}
|
||||
else {
|
||||
LogMessageByIdWithPopupCheckUserTarget(pokemon,target,0xdd9);
|
||||
}
|
||||
UpdateStatusIconFlags(target);
|
||||
}
|
||||
|
||||
#ifdef JAPAN
|
||||
#define LOWER_DEFENSIVE_STAT_OFFSET -0x2C0
|
||||
#else
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user