From f117026287959b5014583011bc90a2eb3b0d91f5 Mon Sep 17 00:00:00 2001 From: James Lambert Date: Tue, 28 Nov 2023 20:50:23 -0700 Subject: [PATCH] fix portal gun flicker between levels --- Makefile | 2 +- README.md | 4 ++-- src/savefile/scene_serialize.c | 4 ++++ src/scene/portal_gun.c | 4 ++-- src/scene/portal_gun.h | 2 +- src/scene/scene.c | 5 ++++- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 2de65d1..d5910ee 100644 --- a/Makefile +++ b/Makefile @@ -361,7 +361,7 @@ build/src/util/dynamic_asset_data.o: build/assets/models/dynamic_model_list_data build/src/util/dynamic_asset_loader.o: build/assets/models/dynamic_model_list.h build/assets/models/dynamic_animated_model_list.h build/src/menu/audio_options.o: build/src/audio/subtitles.h build/src/menu/video_options.o: build/src/audio/subtitles.h -build/src/scene/scene.o: build/src/audio/subtitles.h +build/src/scene/scene.o: build/src/audio/subtitles.h build/src/audio/clips.h build/src/menu/main_menu.o: build/src/audio/subtitles.h diff --git a/README.md b/README.md index d8a0fec..3038799 100644 --- a/README.md +++ b/README.md @@ -243,12 +243,12 @@ That will generate the rom at `/build/portal64.z64`
## Current New Feature TODO List -- [ ] fizzler player sound effect -- [ ] gun flicker between levels - [ ] test chamber 10 without jumping - [ ] check if display list is long enough - [ ] check collider flags when filtering contacts - [ ] pausing while glados is speaking can end her speech early +- [x] gun flicker between levels +- [x] fizzler player sound effect - [x] clear z buffer instead of partitioning it - [X] add translations to menus - [x] jump animation diff --git a/src/savefile/scene_serialize.c b/src/savefile/scene_serialize.c index a9782a2..3a6f6a7 100644 --- a/src/savefile/scene_serialize.c +++ b/src/savefile/scene_serialize.c @@ -522,4 +522,8 @@ void sceneDeserialize(struct Serializer* serializer, struct Scene* scene) { } scene->hud.fadeInTimer = 0.0f; + + if (scene->player.flags & (PlayerHasFirstPortalGun | PlayerHasSecondPortalGun)) { + scene->portalGun.portalGunVisible = 1; + } } diff --git a/src/scene/portal_gun.c b/src/scene/portal_gun.c index 3d7048b..4445625 100644 --- a/src/scene/portal_gun.c +++ b/src/scene/portal_gun.c @@ -108,7 +108,7 @@ void portalBallRender(struct PortalGunProjectile* projectile, struct RenderState extern LookAt gLookAt; extern float getAspect(); -void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int portalGunVisible, int lastFiredIndex) { +void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int lastFiredIndex) { struct MaterialState materialState; materialStateInit(&materialState, DEFAULT_INDEX); @@ -124,7 +124,7 @@ void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* render portalBallRender(projectile, renderState, &materialState, &fromCamera->transform, i); } - if (!portalGunVisible) { + if (!portalGun->portalGunVisible) { return; } diff --git a/src/scene/portal_gun.h b/src/scene/portal_gun.h index 502bdfa..8ddcf37 100644 --- a/src/scene/portal_gun.h +++ b/src/scene/portal_gun.h @@ -43,7 +43,7 @@ struct PortalGun { void portalGunInit(struct PortalGun* portalGun, struct Transform* at, int isFreshStart); // void portalGunDummyRender(void* data, struct DynamicRenderDataList* renderList, struct RenderState* renderState); void portalGunUpdate(struct PortalGun* portalGun, struct Player* player); -void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int portalGunVisible, int lastFiredIndex); +void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int lastFiredIndex); void portalGunFire(struct PortalGun* portalGun, int portalIndex, struct Ray* ray, struct Transform* lookTransform, struct Vector3* playerUp, int roomIndex); void portalGunFireWorld(struct PortalGun* portalGun, int portalIndex, struct Vector3* from, struct Vector3* to, int roomIndex); diff --git a/src/scene/scene.c b/src/scene/scene.c index 315b31e..e1a550e 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c @@ -35,6 +35,7 @@ #include "../player/player_rumble_clips.h" #include "../build/src/audio/subtitles.h" +#include "../build/src/audio/clips.h" extern struct GameMenu gGameMenu; @@ -122,10 +123,12 @@ void sceneInitNoPauseMenu(struct Scene* scene, int mainMenuMode) { if (gCurrentLevelIndex >= LEVEL_INDEX_WITH_GUN_0) { playerGivePortalGun(&scene->player, PlayerHasFirstPortalGun); + scene->portalGun.portalGunVisible = 1; } if (gCurrentLevelIndex >= LEVEL_INDEX_WITH_GUN_1) { playerGivePortalGun(&scene->player, PlayerHasSecondPortalGun); + scene->portalGun.portalGunVisible = 1; } portalInit(&scene->portals[0], 0); @@ -311,7 +314,6 @@ void sceneRender(struct Scene* scene, struct RenderState* renderState, struct Gr &scene->portalGun, renderState, &scene->camera, - scene->portalGun.portalGunVisible, scene->hud.lastPortalIndexShot ); @@ -438,6 +440,7 @@ void sceneCheckPortals(struct Scene* scene) { if (didClose) { rumblePakClipPlay(&gPlayerClosePortalRumble); portalGunFizzle(&scene->portalGun); + soundPlayerPlay(SOUNDS_PORTAL_FIZZLE2, 0.6f, 1.0f, NULL, NULL, SoundTypeAll); } }