Add a 1 second window to prevent a warp from instantly warping you back (a workaround for broken romhack ports)
This commit is contained in:
parent
22761949f7
commit
48d517ab0d
|
@ -420,6 +420,7 @@ struct MarioState
|
|||
/*????*/ u8 visibleToEnemies;
|
||||
/*????*/ u32 cap;
|
||||
/*????*/ u8 bounceSquishTimer;
|
||||
/*????*/ u8 skipWarpInteractionsTimer;
|
||||
};
|
||||
|
||||
struct TextureInfo
|
||||
|
|
|
@ -1043,6 +1043,10 @@ u32 interact_warp(struct MarioState *m, UNUSED u32 interactType, struct Object *
|
|||
if (!m || !o) { return FALSE; }
|
||||
u32 action;
|
||||
|
||||
if (m->skipWarpInteractionsTimer > 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (m != &gMarioStates[0]) {
|
||||
// don't do for remote players
|
||||
return FALSE;
|
||||
|
@ -2295,6 +2299,10 @@ void mario_process_interactions(struct MarioState *m) {
|
|||
sDelayInvincTimer = FALSE;
|
||||
gInteractionInvulnerable = (m->action & ACT_FLAG_INVULNERABLE) || m->invincTimer != 0;
|
||||
|
||||
if (m->skipWarpInteractionsTimer) {
|
||||
m->skipWarpInteractionsTimer--;
|
||||
}
|
||||
|
||||
if (!(m->action & ACT_FLAG_INTANGIBLE) && m->collidedObjInteractTypes != 0 && is_player_active(m)) {
|
||||
s32 i;
|
||||
for (i = 0; i < 32; i++) {
|
||||
|
|
|
@ -536,6 +536,10 @@ void init_mario_after_warp(void) {
|
|||
gMarioState->health = 0x880;
|
||||
}
|
||||
|
||||
if (gMarioState) {
|
||||
gMarioState->skipWarpInteractionsTimer = 30;
|
||||
}
|
||||
|
||||
smlua_call_event_hooks(HOOK_ON_WARP);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue