From c128c84ed1a7b48625ece167df51b977b06b5b64 Mon Sep 17 00:00:00 2001 From: westonCoder Date: Sun, 15 Oct 2023 22:12:42 -0500 Subject: [PATCH 1/3] Made Elevator to Wait for Voicelines to Finish - made elevator wait for voicelines to finish - I made this the case on all levels because I watched the elevator sequences on all levels of a playthrough and it always seemed to wait. --- src/levels/cutscene_runner.c | 11 +++++++++++ src/levels/cutscene_runner.h | 1 + src/scene/elevator.c | 12 ++++++------ src/scene/elevator.h | 1 + src/scene/scene.c | 3 +++ src/scene/scene.h | 1 + 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/levels/cutscene_runner.c b/src/levels/cutscene_runner.c index 8222005..fe775e7 100644 --- a/src/levels/cutscene_runner.c +++ b/src/levels/cutscene_runner.c @@ -588,4 +588,15 @@ void cutsceneQueueSoundInChannel(int soundId, float volume, int channel, int sub } cutsceneQueueSound(soundId, volume, channel, subtitleId); +} + +int cutsceneIsSoundQueued(){ + int soundQueued = 0; + for (int i = 0; i < CH_COUNT; ++i) { + if(gCutsceneSoundQueues[i] != NULL || gCutsceneCurrentSound[i] != SOUND_ID_NONE){ + soundQueued = 1; + break; + } + } + return soundQueued; } \ No newline at end of file diff --git a/src/levels/cutscene_runner.h b/src/levels/cutscene_runner.h index c6199e7..24613a7 100644 --- a/src/levels/cutscene_runner.h +++ b/src/levels/cutscene_runner.h @@ -44,5 +44,6 @@ void cutsceneSerializeRead(struct Serializer* serializer); int cutsceneRunnerIsChannelPlaying(int channel); void cutsceneQueueSoundInChannel(int soundId, float volume, int channel, int subtitleId); +int cutsceneIsSoundQueued(); #endif \ No newline at end of file diff --git a/src/scene/elevator.c b/src/scene/elevator.c index 6b9e859..1c36072 100644 --- a/src/scene/elevator.c +++ b/src/scene/elevator.c @@ -22,8 +22,8 @@ #define OPEN_SPEED 2.0f #define OPEN_DELAY 1.0f -#define CLOSE_DELAY 13.0f -#define MOVING_SOUND_DELAY 3.5f +#define CLOSE_DELAY 10.0f +#define MOVING_SOUND_DELAY 1.5f #define SHAKE_DURATION 0.5f struct ColliderTypeData gElevatorColliderType = { @@ -129,7 +129,7 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) { short result = -1; if (elevator->flags & ElevatorFlagsIsExit) { - if (inside) { + if (inside && !(gScene.boolCutsceneIsRunning)) { elevator->timer -= FIXED_DELTA_TIME; } @@ -139,7 +139,7 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) { shouldBeOpen = inRange && !inside; shouldLock = inside; - if (inside || (elevator->flags & ElevatorFlagsIsLocked) != 0) { + if ((inside || (elevator->flags & ElevatorFlagsIsLocked) != 0) && !(gScene.boolCutsceneIsRunning)) { elevator->timer -= FIXED_DELTA_TIME; if (elevator->timer < 0.0f) { @@ -191,11 +191,11 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) { } - if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && (elevator->movingTimer > 0.0f)){ + if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && (elevator->movingTimer > 0.0f) && !(gScene.boolCutsceneIsRunning)){ elevator->movingTimer -= FIXED_DELTA_TIME; } - if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && !(elevator->flags & ElevatorFlagsMovingSoundPlayed) && (elevator->movingTimer <= 0.0f) && inside){ + if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && !(elevator->flags & ElevatorFlagsMovingSoundPlayed) && (elevator->movingTimer <= 0.0f) && inside && !(gScene.boolCutsceneIsRunning)){ soundPlayerPlay(soundsElevatorMoving, 1.25f, 0.5f, &elevator->rigidBody.transform.position, &gZeroVec, SoundTypeAll); hudShowSubtitle(&gScene.hud, PORTAL_ELEVATOR_START, SubtitleTypeCaption); player->shakeTimer = SHAKE_DURATION; diff --git a/src/scene/elevator.h b/src/scene/elevator.h index d4a7c26..6df565a 100644 --- a/src/scene/elevator.h +++ b/src/scene/elevator.h @@ -5,6 +5,7 @@ #include "../physics/collision_object.h" #include "../player/player.h" #include "../levels/level_definition.h" +#include "../scene/scene.h" enum ElevatorFlags { ElevatorFlagsIsLocked = (1 << 0), diff --git a/src/scene/scene.c b/src/scene/scene.c index a7f13f8..7924664 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c @@ -244,6 +244,7 @@ void sceneInitNoPauseMenu(struct Scene* scene, int mainMenuMode) { } scene->continuouslyAttemptingPortalOpen=0; + scene->boolCutsceneIsRunning=0; scene->checkpointState = SceneCheckpointStateSaved; scene->freeCameraOffset = gZeroVec; @@ -528,6 +529,8 @@ void sceneUpdateAnimatedObjects(struct Scene* scene) { } void sceneUpdate(struct Scene* scene) { + scene->boolCutsceneIsRunning = cutsceneIsSoundQueued(); + if (scene->checkpointState == SceneCheckpointStateReady) { checkpointSave(scene); scene->checkpointState = SceneCheckpointStateSaved; diff --git a/src/scene/scene.h b/src/scene/scene.h index 0ade2ef..8d5fab4 100644 --- a/src/scene/scene.h +++ b/src/scene/scene.h @@ -82,6 +82,7 @@ struct Scene { u8 ballCatcherCount; u8 clockCount; u8 securityCameraCount; + u8 boolCutsceneIsRunning; u8 continuouslyAttemptingPortalOpen; u8 checkpointState; From 90fe5d35645a5c3c673c598e716a3309343375a0 Mon Sep 17 00:00:00 2001 From: westonCoder Date: Sun, 15 Oct 2023 22:24:14 -0500 Subject: [PATCH 2/3] updated the TODO lists in the README to reflect various recent changes. --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 357bc13..e004a3d 100644 --- a/README.md +++ b/README.md @@ -187,10 +187,10 @@ That will generate the rom at `/build/portal64.z64`
## Current New Feature TODO List -- [ ] polish up subtitles -- [ ] more sound settings - [ ] rumble pak support - [ ] pausing while glados is speaking can end her speech early +- [x] polish up subtitles +- [x] more sound settings - [x] add desk chairs and monitors - [x] Add auto save checkpoints - [x] Correct elevator timing @@ -204,6 +204,4 @@ That will generate the rom at `/build/portal64.z64` ----------------------- v8 - [ ] Two wall portals next to eachother can be used to clip any object out of any level by pushing it into corner, then dropping. - [ ] Passing into a ceiling portal can sometimes mess with the player rotation -- [ ] various visual glitches when running NTSC on PAL console #65 -- [ ] various visual glitches when running PAL on NTSC console #65 - [x] player can clip through back of elevator by jumping and strafeing at the back corners while inside. From 5effd3359a02f61a7aa78b58e3c9cffb871e37b1 Mon Sep 17 00:00:00 2001 From: westonCoder Date: Mon, 16 Oct 2023 10:46:36 -0500 Subject: [PATCH 3/3] only wait for voicelines on elevators that leave the level. --- src/scene/elevator.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/scene/elevator.c b/src/scene/elevator.c index 1c36072..ebdcbd9 100644 --- a/src/scene/elevator.c +++ b/src/scene/elevator.c @@ -122,14 +122,15 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) { int inRange = horizontalDistance < AUTO_OPEN_DISTANCE * AUTO_OPEN_DISTANCE && verticalDistance < SAME_LEVEL_HEIGHT; int inside = horizontalDistance < INSIDE_DISTANCE * INSIDE_DISTANCE && verticalDistance < SAME_LEVEL_HEIGHT; + int cutscenePreventingMovement = ((gScene.boolCutsceneIsRunning==1) && (elevator->targetElevator >= gScene.elevatorCount)); int shouldBeOpen; int shouldLock; short result = -1; - if (elevator->flags & ElevatorFlagsIsExit) { - if (inside && !(gScene.boolCutsceneIsRunning)) { + if ((elevator->flags & ElevatorFlagsIsExit) && !cutscenePreventingMovement) { + if (inside) { elevator->timer -= FIXED_DELTA_TIME; } @@ -139,7 +140,7 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) { shouldBeOpen = inRange && !inside; shouldLock = inside; - if ((inside || (elevator->flags & ElevatorFlagsIsLocked) != 0) && !(gScene.boolCutsceneIsRunning)) { + if ((inside || (elevator->flags & ElevatorFlagsIsLocked) != 0) && !cutscenePreventingMovement) { elevator->timer -= FIXED_DELTA_TIME; if (elevator->timer < 0.0f) { @@ -191,11 +192,11 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) { } - if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && (elevator->movingTimer > 0.0f) && !(gScene.boolCutsceneIsRunning)){ + if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && (elevator->movingTimer > 0.0f) && !cutscenePreventingMovement){ elevator->movingTimer -= FIXED_DELTA_TIME; } - if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && !(elevator->flags & ElevatorFlagsMovingSoundPlayed) && (elevator->movingTimer <= 0.0f) && inside && !(gScene.boolCutsceneIsRunning)){ + if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && !(elevator->flags & ElevatorFlagsMovingSoundPlayed) && (elevator->movingTimer <= 0.0f) && !cutscenePreventingMovement){ soundPlayerPlay(soundsElevatorMoving, 1.25f, 0.5f, &elevator->rigidBody.transform.position, &gZeroVec, SoundTypeAll); hudShowSubtitle(&gScene.hud, PORTAL_ELEVATOR_START, SubtitleTypeCaption); player->shakeTimer = SHAKE_DURATION;