[LEAK-INFORMED] fix vs_seeker fakematchings
This commit is contained in:
+34
-56
@@ -651,6 +651,9 @@ void VsSeekerResetObjectMovementAfterChargeComplete(void)
|
|||||||
|
|
||||||
bool8 UpdateVsSeekerStepCounter(void)
|
bool8 UpdateVsSeekerStepCounter(void)
|
||||||
{
|
{
|
||||||
|
u8 x;
|
||||||
|
x = 0;
|
||||||
|
|
||||||
if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE)
|
if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE)
|
||||||
{
|
{
|
||||||
if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100)
|
if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100)
|
||||||
@@ -659,19 +662,12 @@ bool8 UpdateVsSeekerStepCounter(void)
|
|||||||
|
|
||||||
if (FlagGet(FLAG_SYS_VS_SEEKER_CHARGING) == TRUE)
|
if (FlagGet(FLAG_SYS_VS_SEEKER_CHARGING) == TRUE)
|
||||||
{
|
{
|
||||||
u8 x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
|
if (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) < 100)
|
||||||
u32 r4 = 0xFF;
|
|
||||||
|
|
||||||
if (x < 100)
|
|
||||||
{
|
{
|
||||||
x++;
|
x = (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) + 1);
|
||||||
#ifndef NONMATCHING // fool the compiler that r4 has been changed
|
|
||||||
asm("":"=r"(r4));
|
|
||||||
#endif
|
|
||||||
gSaveBlock1Ptr->trainerRematchStepCounter = (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) | (x << 8);
|
gSaveBlock1Ptr->trainerRematchStepCounter = (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) | (x << 8);
|
||||||
}
|
}
|
||||||
x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & r4;
|
if (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) == 100)
|
||||||
if (x == 100)
|
|
||||||
{
|
{
|
||||||
FlagClear(FLAG_SYS_VS_SEEKER_CHARGING);
|
FlagClear(FLAG_SYS_VS_SEEKER_CHARGING);
|
||||||
VsSeekerResetChargingStepCounter();
|
VsSeekerResetChargingStepCounter();
|
||||||
@@ -860,16 +856,15 @@ static u8 CanUseVsSeeker(void)
|
|||||||
static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
|
static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
|
||||||
{
|
{
|
||||||
u16 r8 = 0;
|
u16 r8 = 0;
|
||||||
|
u16 rval = 0;
|
||||||
|
u8 r7;
|
||||||
u8 sp0 = 0;
|
u8 sp0 = 0;
|
||||||
|
u8 r0 = 0;
|
||||||
s32 vsSeekerIdx;
|
s32 vsSeekerIdx;
|
||||||
u8 *r2;
|
u8 *r2;
|
||||||
#ifndef NONMATCHING
|
vsSeekerIdx = 0;
|
||||||
register u32 r3 asm("r3");
|
|
||||||
register s32 r0_ asm("r0");
|
|
||||||
asm("":::"r10", "r8", "r6", "r4");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (vsSeekerIdx = 0; sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF; vsSeekerIdx++)
|
while (sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF)
|
||||||
{
|
{
|
||||||
if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[vsSeekerIdx]) == 1)
|
if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[vsSeekerIdx]) == 1)
|
||||||
{
|
{
|
||||||
@@ -877,59 +872,42 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
|
|||||||
if (!HasTrainerBeenFought(r8))
|
if (!HasTrainerBeenFought(r8))
|
||||||
{
|
{
|
||||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerUnfought);
|
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerUnfought);
|
||||||
sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx += 0;
|
|
||||||
sVsSeeker->trainerHasNotYetBeenFought = 1;
|
sVsSeeker->trainerHasNotYetBeenFought = 1;
|
||||||
|
vsSeekerIdx++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
r7 = GetNextAvailableRematchTrainer(a0, r8, &sp0);
|
||||||
|
if (r7 == 0)
|
||||||
|
{
|
||||||
|
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
|
||||||
|
sVsSeeker->trainerDoesNotWantRematch = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
u8 r7 = GetNextAvailableRematchTrainer(a0, r8, &sp0);
|
rval = Random() % 100;
|
||||||
if (r7 == 0)
|
r0 = GetCurVsSeekerResponse(vsSeekerIdx, r8);
|
||||||
|
if (r0 == 2)
|
||||||
|
rval = 100;
|
||||||
|
else if (r0 == 1)
|
||||||
|
rval = 0;
|
||||||
|
if (rval < 30)
|
||||||
{
|
{
|
||||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
|
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
|
||||||
#ifdef NONMATCHING
|
|
||||||
sVsSeeker->trainerDoesNotWantRematch = 1;
|
sVsSeeker->trainerDoesNotWantRematch = 1;
|
||||||
#else
|
|
||||||
r2 = (u8 *)sVsSeeker;
|
|
||||||
r3 = 0x431;
|
|
||||||
asm("":::"r1");
|
|
||||||
r2 = &r2[r3];
|
|
||||||
*(r2) |= 2;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
u16 rval = Random() % 100;
|
gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[vsSeekerIdx].localId] = r7;
|
||||||
u8 r0 = GetCurVsSeekerResponse(vsSeekerIdx, r8);
|
ShiftStillObjectEventCoords(&gObjectEvents[sVsSeeker->trainerInfo[vsSeekerIdx].objectEventId]);
|
||||||
if (r0 == 2)
|
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerRematch);
|
||||||
rval = 100;
|
sVsSeeker->trainerIdxArray[sVsSeeker->numRematchableTrainers] = r8;
|
||||||
else if (r0 == 1)
|
sVsSeeker->runningBehaviourEtcArray[sVsSeeker->numRematchableTrainers] = GetRunningBehaviorFromGraphicsId(sVsSeeker->trainerInfo[vsSeekerIdx].graphicsId);
|
||||||
rval = 0;
|
sVsSeeker->numRematchableTrainers++;
|
||||||
if (rval < 30)
|
sVsSeeker->trainerWantsRematch = 1;
|
||||||
{
|
|
||||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
|
|
||||||
#ifdef NONMATCHING
|
|
||||||
sVsSeeker->trainerDoesNotWantRematch = 1;
|
|
||||||
#else
|
|
||||||
r2 = (u8 *)sVsSeeker;
|
|
||||||
r0_ = 0x431;
|
|
||||||
asm("":::"r1");
|
|
||||||
r2 = &r2[r0_];
|
|
||||||
*(r2) |= 2;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[vsSeekerIdx].localId] = r7;
|
|
||||||
ShiftStillObjectEventCoords(&gObjectEvents[sVsSeeker->trainerInfo[vsSeekerIdx].objectEventId]);
|
|
||||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerRematch);
|
|
||||||
sVsSeeker->trainerIdxArray[sVsSeeker->numRematchableTrainers] = r8;
|
|
||||||
sVsSeeker->runningBehaviourEtcArray[sVsSeeker->numRematchableTrainers] = GetRunningBehaviorFromGraphicsId(sVsSeeker->trainerInfo[vsSeekerIdx].graphicsId);
|
|
||||||
sVsSeeker->numRematchableTrainers++;
|
|
||||||
sVsSeeker->trainerWantsRematch = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
vsSeekerIdx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sVsSeeker->trainerWantsRematch)
|
if (sVsSeeker->trainerWantsRematch)
|
||||||
|
|||||||
Reference in New Issue
Block a user