Add portal fizzle rumble
This commit is contained in:
parent
e1a5a2c852
commit
3d3c012fea
|
@ -233,7 +233,7 @@ static void gameProc(void* arg) {
|
|||
setViMode(0);
|
||||
osViBlack(1);
|
||||
|
||||
levelLoadWithCallbacks(INTRO_MENU);
|
||||
levelLoadWithCallbacks(3);
|
||||
gCurrentTestSubject = 0;
|
||||
cutsceneRunnerReset();
|
||||
controllersInit();
|
||||
|
|
|
@ -12,6 +12,16 @@ struct RumblePakWave gPlayerDieRumbleWave = {
|
|||
.samplesPerTick = 1 << 5,
|
||||
};
|
||||
|
||||
unsigned char gPlayerClosePortalRumbleData[] = {
|
||||
0xFF, 0xEE,
|
||||
};
|
||||
|
||||
struct RumblePakWave gPlayerClosePortalRumble = {
|
||||
.samples = gPlayerClosePortalRumbleData,
|
||||
.sampleCount = 8,
|
||||
.samplesPerTick = 1 << 5,
|
||||
};
|
||||
|
||||
unsigned char gPlayerLandSoftData[] = {
|
||||
0xFE, 0x90,
|
||||
};
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
extern struct RumblePakWave gPlayerDieRumbleWave;
|
||||
|
||||
extern struct RumblePakWave gPlayerClosePortalRumble;
|
||||
|
||||
void playerHandleLandingRumble(float velocityChange);
|
||||
|
||||
#endif
|
|
@ -32,6 +32,7 @@
|
|||
#include "../menu/game_menu.h"
|
||||
#include "../effects/effect_definitions.h"
|
||||
#include "../controls/rumble_pak.h"
|
||||
#include "../player/player_rumble_clips.h"
|
||||
|
||||
extern struct GameMenu gGameMenu;
|
||||
|
||||
|
@ -410,13 +411,19 @@ void sceneCheckPortals(struct Scene* scene) {
|
|||
hudUpdatePortalIndicators(&scene->hud, &raycastRay, &playerUp);
|
||||
|
||||
if (scene->player.body.flags & RigidBodyFizzled) {
|
||||
int didClose = 0;
|
||||
|
||||
if (scene->portals[0].flags & PortalFlagsPlayerPortal) {
|
||||
sceneClosePortal(scene, 0);
|
||||
didClose |= sceneClosePortal(scene, 0);
|
||||
}
|
||||
if (scene->portals[1].flags & PortalFlagsPlayerPortal) {
|
||||
sceneClosePortal(scene, 1);
|
||||
didClose |= sceneClosePortal(scene, 1);
|
||||
}
|
||||
scene->player.body.flags &= ~RigidBodyFizzled;
|
||||
|
||||
if (didClose) {
|
||||
rumblePakClipPlay(&gPlayerClosePortalRumble);
|
||||
}
|
||||
}
|
||||
|
||||
int isOpen = collisionSceneIsPortalOpen();
|
||||
|
@ -981,7 +988,7 @@ int sceneFirePortal(struct Scene* scene, struct Ray* ray, struct Vector3* player
|
|||
return 1;
|
||||
}
|
||||
|
||||
void sceneClosePortal(struct Scene* scene, int portalIndex) {
|
||||
int sceneClosePortal(struct Scene* scene, int portalIndex) {
|
||||
if (gCollisionScene.portalTransforms[portalIndex]) {
|
||||
soundPlayerPlay(soundsPortalFizzle, 1.0f, 1.0f, &gCollisionScene.portalTransforms[portalIndex]->position, &gZeroVec, SoundTypeAll);
|
||||
hudShowSubtitle(&gScene.hud, PORTAL_FIZZLE_MOVED, SubtitleTypeCaption);
|
||||
|
@ -991,5 +998,8 @@ void sceneClosePortal(struct Scene* scene, int portalIndex) {
|
|||
scene->portals[portalIndex].transformIndex = NO_TRANSFORM_INDEX;
|
||||
|
||||
collisionSceneRemoveDynamicObject(&scene->portals[portalIndex].collisionObject);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -100,6 +100,6 @@ void sceneQueueCheckpoint(struct Scene* scene);
|
|||
|
||||
int sceneOpenPortalFromHit(struct Scene* scene, struct Ray* ray, struct RaycastHit* hit, struct Vector3* playerUp, int portalIndex, int roomIndex, int fromPlayer, int just_checking);
|
||||
int sceneFirePortal(struct Scene* scene, struct Ray* ray, struct Vector3* playerUp, int portalIndex, int roomIndex, int fromPlayer, int just_checking);
|
||||
void sceneClosePortal(struct Scene* scene, int portalIndex);
|
||||
int sceneClosePortal(struct Scene* scene, int portalIndex);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue