From e6b02156bb5daffcfcee3c87474b8e49c32660b6 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 16 Nov 2022 21:08:15 +1000 Subject: [PATCH] Pause door props when closed and backgrounded --- src/game/prop.c | 11 ++++++++++- src/game/propobj.c | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/game/prop.c b/src/game/prop.c index 4d9456857..5ecc0b3f7 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -1854,7 +1854,7 @@ void propsTickPlayer(bool islastplayer) } else { op = chrTick(prop); } - } else if (prop->type & (PROPTYPE_OBJ | PROPTYPE_WEAPON | PROPTYPE_DOOR)) { + } else if (prop->type & (PROPTYPE_OBJ | PROPTYPE_WEAPON)) { obj = prop->obj; if (!g_PausableObjs[obj->type]) { @@ -1870,6 +1870,15 @@ void propsTickPlayer(bool islastplayer) op = TICKOP_CHANGEDLIST; } } + } else if (prop->type == PROPTYPE_DOOR) { + struct doorobj *door = prop->door; + + op = objTickPlayer(prop); + + if (op == TICKOP_NONE && door->mode == DOORMODE_IDLE && door->frac <= 0) { + propPause(prop); + op = TICKOP_CHANGEDLIST; + } } else if (prop->type == PROPTYPE_EXPLOSION) { op = explosionTickPlayer(prop); } else if (prop->type == PROPTYPE_SMOKE) { diff --git a/src/game/propobj.c b/src/game/propobj.c index e9c3f4f50..3e95475dd 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -16942,6 +16942,10 @@ void doorSetMode(struct doorobj *door, s32 newmode) { if (newmode == DOORMODE_OPENING) { if (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_WAITING) { + if (!door->base.prop->active) { + propUnpause(door->base.prop); + } + doorStartOpen(door); }