CringeStatusTarget

This commit is contained in:
DizzyEggg 2025-11-03 15:44:38 +01:00
parent b3a8bacb94
commit ba2816bf9f
6 changed files with 64 additions and 10 deletions

View File

@ -16,7 +16,7 @@
.public ItemIsActive__02311BF8
.public LogMessageByIdWithPopupCheckUserTarget
.public MultiplyByFixedPoint
.public ov10_022C4884
.public gCringeTurnRange
.public ov10_022C4894
.public ov29_022E4240
.public ov29_022E4338
@ -27,7 +27,7 @@
.public ov29_022E5258
.public ov29_022E52F8
.public GetTreatmentBetweenMonstersIgnoreStatus
.public PlayExclamationPointEffect__022E5D4C
.public PlayCringeExclamationPointEffect
.public PrepareItemForPrinting__02345728
.public SafeguardIsActive
.public SetMessageLogPreprocessorArgsString

View File

@ -428,8 +428,8 @@ ov10_022C487C:
.global ov10_022C4880
ov10_022C4880:
.byte 0x7F, 0x00, 0x7F, 0x00
.global ov10_022C4884
ov10_022C4884:
.global gCringeTurnRange
gCringeTurnRange:
.byte 0x01, 0x00, 0x01, 0x00
.global SPEED_BOOST_TURN_RANGE
SPEED_BOOST_TURN_RANGE:

View File

@ -2307,8 +2307,8 @@ _022E5388:
_022E5398: .word 0x0000018D
arm_func_end ov29_022E52F8
arm_func_start PlayExclamationPointEffect__022E5D4C
PlayExclamationPointEffect__022E5D4C: ; 0x022E539C
arm_func_start PlayCringeExclamationPointEffect
PlayCringeExclamationPointEffect: ; 0x022E539C
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
@ -2330,7 +2330,7 @@ PlayExclamationPointEffect__022E5D4C: ; 0x022E539C
ldmia sp!, {r4, pc}
.align 2, 0
_022E53E8: .word 0x00000143
arm_func_end PlayExclamationPointEffect__022E5D4C
arm_func_end PlayCringeExclamationPointEffect
arm_func_start ov29_022E53EC
ov29_022E53EC: ; 0x022E53EC

View File

@ -66,7 +66,7 @@ _02314498:
ldrb r0, [r4, #0xd0]
cmp r0, #1
beq _02314514
ldr r1, _02314538 ; =ov10_022C4884
ldr r1, _02314538 ; =gCringeTurnRange
mov r2, #1
mov r0, r6
strb r2, [r4, #0xd0]
@ -74,7 +74,7 @@ _02314498:
add r1, r0, #1
mov r0, r6
strb r1, [r4, #0xd1]
bl PlayExclamationPointEffect__022E5D4C
bl PlayCringeExclamationPointEffect
ldr r2, _0231453C ; =0x00000D02
mov r0, r7
mov r1, r6
@ -103,7 +103,7 @@ _02314524:
#define TRY_INFLICT_CRINGE_STATUS_OFFSET 0
#endif
_02314534: .word 0x00000DA2 + TRY_INFLICT_CRINGE_STATUS_OFFSET
_02314538: .word ov10_022C4884
_02314538: .word gCringeTurnRange
_0231453C: .word 0x00000D02 + TRY_INFLICT_CRINGE_STATUS_OFFSET
_02314540: .word 0x00000D03 + TRY_INFLICT_CRINGE_STATUS_OFFSET
arm_func_end TryInflictCringeStatus

View File

@ -32,5 +32,6 @@ void ApplyOffensiveStatMultiplier(struct entity *user, struct entity *target, st
void ApplyDefensiveStatMultiplier(struct entity *user, struct entity *target, struct StatIndex stat, fx32_8 multiplier, bool8 displayMessage);
void BoostHitChanceStat(struct entity *user, struct entity *target, struct StatIndex stat);
void LowerHitChanceStat(struct entity *user, struct entity *target, struct StatIndex stat, bool8 displayMessage);
bool8 CringeStatusTarget(struct entity *user ,struct entity *target, bool8 displayMessage, bool8 onlyCheck);
#endif //PMDSKY_OVERLAY_29_02313814_H

View File

@ -23,7 +23,15 @@ extern void ov29_022E52F8(struct entity *user, struct StatIndex);
extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id);
extern void UpdateStatusIconFlags(struct entity *);
extern void ov29_022E4338(struct entity *);
extern void PlayCringeExclamationPointEffect(struct entity *);
extern fx32_8 MultiplyByFixedPoint(fx32_8 a, fx32_8 b);
extern bool8 IsProtectedFromNegativeStatus(struct entity *user ,struct entity *target, bool8 displayMessage);
extern bool8 SafeguardIsActive(struct entity *user ,struct entity *target, bool8 displayMessage);
extern void TryActivateSteadfast(struct entity *user ,struct entity *target);
extern void TryActivateQuickFeet(struct entity *user ,struct entity *target);
extern s32 CalcStatusDuration(struct entity *target, const s16 *turnRange, bool8 factorCurerSkills);
extern const s16 gCringeTurnRange[2];
#ifdef JAPAN
#define JPN_MSG_OFFSET -0x2C0
@ -533,3 +541,48 @@ void LowerHitChanceStat(struct entity *user, struct entity *target, struct StatI
UpdateStatusIconFlags(target);
}
bool8 CringeStatusTarget(struct entity *user ,struct entity *target, bool8 displayMessage, bool8 onlyCheck)
{
struct monster *entityInfo;
u8 *buffer1 = AllocateTemp1024ByteBufferFromPool();
if (!EntityIsValid__023118B4(target))
return FALSE;
if (SafeguardIsActive(user, target, displayMessage))
return FALSE;
if (IsProtectedFromNegativeStatus(user, target, displayMessage))
return FALSE;
#ifdef JAPAN
if (DefenderAbilityIsActive__02311B94(user, target, ABILITY_INNER_FOCUS)) {
#else
if (DefenderAbilityIsActive__02311B94(user, target, ABILITY_INNER_FOCUS, TRUE)) {
#endif
SubstitutePlaceholderStringTags(0,target,0);
if (displayMessage)
LogMessageByIdWithPopupCheckUserTarget(user,target,0xda2 + JPN_MSG_OFFSET);
return FALSE;
}
if (onlyCheck)
return TRUE;
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(0,target,0);
if (entityInfo->cringe_class_status.cringe != STATUS_CRINGE_CRINGE) {
entityInfo->cringe_class_status.cringe = STATUS_CRINGE_CRINGE;
entityInfo->cringe_class_status.cringe_turns = CalcStatusDuration(target, gCringeTurnRange, TRUE) + 1;
PlayCringeExclamationPointEffect(target);
LogMessageByIdWithPopupCheckUserTarget(user,target,0xd02 + JPN_MSG_OFFSET);
TryActivateSteadfast(user, target);
TryActivateQuickFeet(user, target);
}
else {
LogMessageByIdWithPopupCheckUserTarget(user,target,0xd03 + JPN_MSG_OFFSET);
}
UpdateStatusIconFlags(target);
return TRUE;
}