fix portal gun flicker between levels

This commit is contained in:
James Lambert 2023-11-28 20:50:23 -07:00
parent dcce417b12
commit f117026287
6 changed files with 14 additions and 7 deletions

View file

@ -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

View file

@ -243,12 +243,12 @@ That will generate the rom at `/build/portal64.z64`
<br />
## 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

View file

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

View file

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

View file

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

View file

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