mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
LowerSpeed
This commit is contained in:
parent
7380759e51
commit
38a3e5732d
|
|
@ -12,9 +12,10 @@
|
|||
.public GetExclusiveItemWithEffectFromBag
|
||||
.public IsProtectedFromNegativeStatus
|
||||
.public ItemIsActive__0231513C
|
||||
.public LowerSpeed
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public ov10_022C4618
|
||||
.public ov10_022C488C
|
||||
.public gSpeedLowerTurnRange
|
||||
.public ov10_022C4890
|
||||
.public ov29_022E41CC
|
||||
.public ov29_022E44CC
|
||||
|
|
|
|||
|
|
@ -434,8 +434,8 @@ gCringeTurnRange:
|
|||
.global SPEED_BOOST_TURN_RANGE
|
||||
SPEED_BOOST_TURN_RANGE:
|
||||
.byte 0x08, 0x00, 0x0A, 0x00
|
||||
.global ov10_022C488C
|
||||
ov10_022C488C:
|
||||
.global gSpeedLowerTurnRange
|
||||
gSpeedLowerTurnRange:
|
||||
.byte 0x06, 0x00, 0x08, 0x00
|
||||
.global ov10_022C4890
|
||||
ov10_022C4890:
|
||||
|
|
|
|||
|
|
@ -4,134 +4,6 @@
|
|||
.text
|
||||
|
||||
|
||||
arm_func_start BoostSpeedOneStage
|
||||
BoostSpeedOneStage: ; 0x0231493C
|
||||
stmdb sp!, {r3, lr}
|
||||
str r3, [sp]
|
||||
mov r3, r2
|
||||
mov r2, #1
|
||||
bl BoostSpeed
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end BoostSpeedOneStage
|
||||
|
||||
arm_func_start LowerSpeed
|
||||
LowerSpeed: ; 0x02314954
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov sb, r1
|
||||
mov sl, r0
|
||||
mov r0, sb
|
||||
mov r8, r2
|
||||
mov r7, r3
|
||||
bl EntityIsValid__023118B4
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r2, r7
|
||||
bl SafeguardIsActive
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r2, r7
|
||||
bl IsProtectedFromNegativeStatus
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
mov r0, #0
|
||||
mov r1, sb
|
||||
mov r2, r0
|
||||
ldr r4, [sb, #0xb4]
|
||||
bl SubstitutePlaceholderStringTags
|
||||
mov r0, sb
|
||||
bl CalcSpeedStageWrapper
|
||||
movs fp, r0
|
||||
bne _023149E8
|
||||
cmp r7, #0
|
||||
beq _02314AA0
|
||||
ldr r2, _02314AAC ; =0x00000DDC
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _02314AA0
|
||||
_023149E8:
|
||||
mov r5, #0
|
||||
b _02314A34
|
||||
_023149F0:
|
||||
mov r1, #0
|
||||
b _02314A28
|
||||
_023149F8:
|
||||
add r6, r4, r1
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r6, #0x115]
|
||||
#else
|
||||
ldrb r0, [r6, #0x119]
|
||||
#endif
|
||||
cmp r0, #0
|
||||
bne _02314A24
|
||||
ldr r1, _02314AB0 ; =ov10_022C488C
|
||||
mov r0, sb
|
||||
mov r2, #1
|
||||
bl CalcStatusDuration
|
||||
add r0, r0, #1
|
||||
#ifdef JAPAN
|
||||
strb r0, [r6, #0x115]
|
||||
#else
|
||||
strb r0, [r6, #0x119]
|
||||
#endif
|
||||
b _02314A30
|
||||
_02314A24:
|
||||
add r1, r1, #1
|
||||
_02314A28:
|
||||
cmp r1, #5
|
||||
blt _023149F8
|
||||
_02314A30:
|
||||
add r5, r5, #1
|
||||
_02314A34:
|
||||
cmp r5, r8
|
||||
blt _023149F0
|
||||
mov r0, sb
|
||||
bl CalcSpeedStageWrapper
|
||||
mov r4, r0
|
||||
cmp fp, r4
|
||||
bne _02314A6C
|
||||
cmp r7, #0
|
||||
beq _02314AA0
|
||||
ldr r2, _02314AB4 ; =0x00000DDA
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _02314AA0
|
||||
_02314A6C:
|
||||
mov r0, sb
|
||||
bl ov29_022E451C
|
||||
ldr r0, _02314AB8 ; =ov29_02353318
|
||||
mov r1, r4, lsl #1
|
||||
ldrh r2, [r0, r1]
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
cmp r4, #0
|
||||
bne _02314AA0
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl TryActivateQuickFeet
|
||||
_02314AA0:
|
||||
mov r0, sb
|
||||
bl UpdateStatusIconFlags
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_02314AAC: .word 0x00000B1C
|
||||
_02314AB0: .word ov10_022C488C
|
||||
_02314AB4: .word 0x00000B1A
|
||||
#else
|
||||
_02314AAC: .word 0x00000DDC
|
||||
_02314AB0: .word ov10_022C488C
|
||||
_02314AB4: .word 0x00000DDA
|
||||
#endif
|
||||
_02314AB8: .word ov29_02353318
|
||||
arm_func_end LowerSpeed
|
||||
|
||||
arm_func_start TrySealMove
|
||||
TrySealMove: ; 0x02314ABC
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
|
||||
|
|
|
|||
|
|
@ -37,5 +37,7 @@ bool8 TryInflictParalysisStatus(struct entity *user, struct entity *target, bool
|
|||
// Checks if a monster is a team member under the effects of a certain exclusive item effect.
|
||||
bool8 ExclusiveItemEffectIsActive__023147EC(struct entity *entity, enum exclusive_item_effect_id effect_id);
|
||||
void BoostSpeed(struct entity *user, struct entity *target, s32 nStages, s32 turns, bool8 displayMessage);
|
||||
void BoostSpeedOneStage(struct entity *user, struct entity *target, s32 turns, bool8 displayMessage);
|
||||
void LowerSpeed(struct entity *user, struct entity *target, s32 nStages, bool8 displayMessage);
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_02313814_H
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ extern void ov29_022E4338(struct entity *);
|
|||
extern void PlayCringeExclamationPointEffect(struct entity *);
|
||||
extern void ov29_022E4240(struct entity *);
|
||||
extern void ov29_022E44CC(struct entity *);
|
||||
extern void ov29_022E451C(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);
|
||||
|
|
@ -45,6 +46,7 @@ extern int CalcSpeedStage(struct entity *, int);
|
|||
|
||||
extern const s16 gCringeTurnRange[];
|
||||
extern const s16 gParalysisTurnRange[];
|
||||
extern const s16 gSpeedLowerTurnRange[];
|
||||
extern const s16 SPEED_BOOST_TURN_RANGE[];
|
||||
extern const u16 ov29_02353318[];
|
||||
|
||||
|
|
@ -736,3 +738,57 @@ void BoostSpeed(struct entity *user, struct entity *target, s32 nStages, s32 tur
|
|||
|
||||
UpdateStatusIconFlags(target);
|
||||
}
|
||||
|
||||
void BoostSpeedOneStage(struct entity *user, struct entity *target, s32 turns, bool8 displayMessage)
|
||||
{
|
||||
BoostSpeed(user, target, 1, turns, displayMessage);
|
||||
}
|
||||
|
||||
void LowerSpeed(struct entity *user, struct entity *target, s32 nStages, bool8 displayMessage)
|
||||
{
|
||||
s32 speedBefore;
|
||||
s32 speedAfter;
|
||||
struct monster *entityInfo;
|
||||
|
||||
if (!EntityIsValid__023118B4(target))
|
||||
return;
|
||||
|
||||
if (SafeguardIsActive(user,target,displayMessage))
|
||||
return;
|
||||
|
||||
if (IsProtectedFromNegativeStatus(user, target, displayMessage))
|
||||
return;
|
||||
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(0,target,0);
|
||||
speedBefore = CalcSpeedStageWrapper(target);
|
||||
if (speedBefore == 0) {
|
||||
if (displayMessage)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user,target,0xddc + JPN_MSG_OFFSET);
|
||||
}
|
||||
else {
|
||||
s32 counter, i;
|
||||
for (counter = 0; counter < nStages; counter++) {
|
||||
for (i = 0; i < NUM_SPEED_COUNTERS; i++) {
|
||||
if (entityInfo->speed_down_counters[i] == 0) {
|
||||
entityInfo->speed_down_counters[i] = CalcStatusDuration(target,gSpeedLowerTurnRange,TRUE) + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
speedAfter = CalcSpeedStageWrapper(target);
|
||||
if (speedBefore == speedAfter) {
|
||||
if (displayMessage)
|
||||
LogMessageByIdWithPopupCheckUserTarget(user,target,0xdda + JPN_MSG_OFFSET);
|
||||
}
|
||||
else {
|
||||
ov29_022E451C(target);
|
||||
LogMessageByIdWithPopupCheckUserTarget(user,target,ov29_02353318[speedAfter]);
|
||||
if (speedAfter == 0) {
|
||||
TryActivateQuickFeet(user, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UpdateStatusIconFlags(target);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user