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:
MysterD 2023-10-26 16:08:43 -07:00
parent 00716ec9ba
commit 07a6672169
3 changed files with 13 additions and 0 deletions

View File

@ -420,6 +420,7 @@ struct MarioState
/*????*/ u8 visibleToEnemies;
/*????*/ u32 cap;
/*????*/ u8 bounceSquishTimer;
/*????*/ u8 skipWarpInteractionsTimer;
};
struct TextureInfo

View File

@ -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++) {

View File

@ -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);
}