summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurausukun <lord.uber1@gmail.com>2021-03-23 00:19:34 -0400
committerKurausukun <lord.uber1@gmail.com>2021-03-23 00:19:34 -0400
commit64e3ba99648914c8ba285f7afb91c33d3bbe974e (patch)
tree51c2d320b4067e0d6c710b7efa5ca2e454c38704
parent646c44322180b133097b593503f576719a9fffda (diff)
[LEAK-INFORMED] fix vs_seeker fakematchings
-rw-r--r--src/vs_seeker.c90
1 files changed, 34 insertions, 56 deletions
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 24e2b8c2f..af8bda8be 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -651,6 +651,9 @@ void VsSeekerResetObjectMovementAfterChargeComplete(void)
bool8 UpdateVsSeekerStepCounter(void)
{
+ u8 x;
+ x = 0;
+
if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE)
{
if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100)
@@ -659,19 +662,12 @@ bool8 UpdateVsSeekerStepCounter(void)
if (FlagGet(FLAG_SYS_VS_SEEKER_CHARGING) == TRUE)
{
- u8 x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
- u32 r4 = 0xFF;
-
- if (x < 100)
+ if (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) < 100)
{
- x++;
- #ifndef NONMATCHING // fool the compiler that r4 has been changed
- asm("":"=r"(r4));
- #endif
+ x = (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) + 1);
gSaveBlock1Ptr->trainerRematchStepCounter = (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) | (x << 8);
}
- x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & r4;
- if (x == 100)
+ if (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) == 100)
{
FlagClear(FLAG_SYS_VS_SEEKER_CHARGING);
VsSeekerResetChargingStepCounter();
@@ -860,16 +856,15 @@ static u8 CanUseVsSeeker(void)
static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
{
u16 r8 = 0;
+ u16 rval = 0;
+ u8 r7;
u8 sp0 = 0;
+ u8 r0 = 0;
s32 vsSeekerIdx;
u8 *r2;
-#ifndef NONMATCHING
- register u32 r3 asm("r3");
- register s32 r0_ asm("r0");
- asm("":::"r10", "r8", "r6", "r4");
-#endif
+ vsSeekerIdx = 0;
- for (vsSeekerIdx = 0; sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF; vsSeekerIdx++)
+ while (sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF)
{
if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[vsSeekerIdx]) == 1)
{
@@ -877,59 +872,42 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
if (!HasTrainerBeenFought(r8))
{
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerUnfought);
- sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx += 0;
sVsSeeker->trainerHasNotYetBeenFought = 1;
+ vsSeekerIdx++;
+ continue;
+ }
+ r7 = GetNextAvailableRematchTrainer(a0, r8, &sp0);
+ if (r7 == 0)
+ {
+ StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
+ sVsSeeker->trainerDoesNotWantRematch = 1;
}
else
{
- u8 r7 = GetNextAvailableRematchTrainer(a0, r8, &sp0);
- if (r7 == 0)
+ rval = Random() % 100;
+ r0 = GetCurVsSeekerResponse(vsSeekerIdx, r8);
+ if (r0 == 2)
+ rval = 100;
+ else if (r0 == 1)
+ rval = 0;
+ if (rval < 30)
{
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
- #ifdef NONMATCHING
sVsSeeker->trainerDoesNotWantRematch = 1;
- #else
- r2 = (u8 *)sVsSeeker;
- r3 = 0x431;
- asm("":::"r1");
- r2 = &r2[r3];
- *(r2) |= 2;
- #endif
}
else
{
- u16 rval = Random() % 100;
- u8 r0 = GetCurVsSeekerResponse(vsSeekerIdx, r8);
- if (r0 == 2)
- rval = 100;
- else if (r0 == 1)
- rval = 0;
- if (rval < 30)
- {
- 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;
- }
+ 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)