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