Work on ball sound effects

This commit is contained in:
James Lambert 2023-02-14 08:54:34 -07:00
parent 8c14455096
commit 47cd6c3c5e
7 changed files with 36 additions and 3 deletions

View file

@ -85,7 +85,7 @@ Where `/home/james/Blender/blender-2.93.1-linux-x64` is the folder where Blender
## Current TODO list ## Current TODO list
- [ ] fix chell animation problem (fixed itself, investigate) - [ ] fix chell animation problem (fixed itself, investigate)
- [ ] sound effects for ball - [ ] sound effects for ball (portal_pak_dir/scripts/npc_sounds_energy_ball.txt)
-------------------------------------------------------- --------------------------------------------------------
- [ ] Skips audio sometimes - [ ] Skips audio sometimes
- [ ] Portal not rending recursively sometimes - [ ] Portal not rending recursively sometimes

View file

@ -0,0 +1,16 @@
envelope Envelope {
attackTime = 0
attackVolume = 127
decayTime = -1
decayVolume = 127
releaseTime = 0
}
sound Sound {
use("../../../../portal_pak_dir/sound/weapons/physcannon/energy_sing_loop4.wav")
loopCount = -1
loopEnd = -1
pan=64
envelope = Envelope
}

View file

@ -24,3 +24,5 @@ unsigned short soundsPortalOpen2 = SOUNDS_PORTAL_OPEN2;
unsigned short soundsPortalFizzle = SOUNDS_PORTAL_FIZZLE2; unsigned short soundsPortalFizzle = SOUNDS_PORTAL_FIZZLE2;
unsigned short soundsElevatorDoor = SOUNDS_DOORMOVE1; unsigned short soundsElevatorDoor = SOUNDS_DOORMOVE1;
unsigned short soundsBallLoop = SOUNDS_ENERGY_SING_LOOP4;

View file

@ -12,4 +12,6 @@ extern unsigned short soundsPortalFizzle;
extern unsigned short soundsElevatorDoor; extern unsigned short soundsElevatorDoor;
extern unsigned short soundsBallLoop;
#endif #endif

View file

@ -161,7 +161,7 @@ static void gameProc(void* arg) {
contactSolverInit(&gContactSolver); contactSolverInit(&gContactSolver);
portalSurfaceCleanupQueueInit(); portalSurfaceCleanupQueueInit();
savefileNew(); savefileNew();
levelLoad(0); levelLoad(4);
cutsceneRunnerReset(); cutsceneRunnerReset();
controllersInit(); controllersInit();
initAudio(fps); initAudio(fps);

View file

@ -13,6 +13,9 @@
#include "../build/assets/models/cube/cube.h" #include "../build/assets/models/cube/cube.h"
#include "../build/assets/materials/static.h" #include "../build/assets/materials/static.h"
#include "../audio/soundplayer.h"
#include "../audio/clips.h"
#define BALL_RADIUS 0.1f #define BALL_RADIUS 0.1f
struct CollisionBox gBallCollisionBox = { struct CollisionBox gBallCollisionBox = {
@ -83,6 +86,7 @@ void ballBurnRender(void* data, struct DynamicRenderDataList* renderList, struct
void ballInitInactive(struct Ball* ball) { void ballInitInactive(struct Ball* ball) {
ball->targetSpeed = 0.0f; ball->targetSpeed = 0.0f;
ball->flags = 0; ball->flags = 0;
ball->soundLoopId = SOUND_ID_NONE;
} }
void ballInit(struct Ball* ball, struct Vector3* position, struct Vector3* velocity, short startingRoom, float ballLifetime) { void ballInit(struct Ball* ball, struct Vector3* position, struct Vector3* velocity, short startingRoom, float ballLifetime) {
@ -104,6 +108,8 @@ void ballInit(struct Ball* ball, struct Vector3* position, struct Vector3* veloc
ball->dynamicId = dynamicSceneAddViewDependant(ball, ballRender, &ball->rigidBody.transform.position, BALL_RADIUS); ball->dynamicId = dynamicSceneAddViewDependant(ball, ballRender, &ball->rigidBody.transform.position, BALL_RADIUS);
dynamicSceneSetRoomFlags(ball->dynamicId, ROOM_FLAG_FROM_INDEX(startingRoom)); dynamicSceneSetRoomFlags(ball->dynamicId, ROOM_FLAG_FROM_INDEX(startingRoom));
ball->soundLoopId = soundPlayerPlay(soundsBallLoop, 4.0f, 1.0f, &ball->rigidBody.transform.position, &ball->rigidBody.velocity);
} }
void ballTurnOnCollision(struct Ball* ball) { void ballTurnOnCollision(struct Ball* ball) {
@ -163,6 +169,8 @@ void ballUpdate(struct Ball* ball) {
vector3Scale(&ball->rigidBody.velocity, &ball->rigidBody.velocity, ball->targetSpeed / currentSpeed); vector3Scale(&ball->rigidBody.velocity, &ball->rigidBody.velocity, ball->targetSpeed / currentSpeed);
} }
soundPlayerUpdatePosition(ball->soundLoopId, &ball->rigidBody.transform.position, &ball->rigidBody.velocity);
ball->rigidBody.angularVelocity = gOneVec; ball->rigidBody.angularVelocity = gOneVec;
dynamicSceneSetRoomFlags(ball->dynamicId, ROOM_FLAG_FROM_INDEX(ball->rigidBody.currentRoom)); dynamicSceneSetRoomFlags(ball->dynamicId, ROOM_FLAG_FROM_INDEX(ball->rigidBody.currentRoom));
@ -174,6 +182,8 @@ void ballUpdate(struct Ball* ball) {
ball->targetSpeed = 0.0f; ball->targetSpeed = 0.0f;
collisionSceneRemoveDynamicObject(&ball->collisionObject); collisionSceneRemoveDynamicObject(&ball->collisionObject);
dynamicSceneRemove(ball->dynamicId); dynamicSceneRemove(ball->dynamicId);
soundPlayerStop(ball->soundLoopId);
ball->soundLoopId = SOUND_ID_NONE;
} }
} }
@ -197,6 +207,8 @@ void ballMarkCaught(struct Ball* ball) {
ball->flags |= BallFlagsCaught; ball->flags |= BallFlagsCaught;
collisionSceneRemoveDynamicObject(&ball->collisionObject); collisionSceneRemoveDynamicObject(&ball->collisionObject);
rigidBodyMarkKinematic(&ball->rigidBody); rigidBodyMarkKinematic(&ball->rigidBody);
soundPlayerStop(ball->soundLoopId);
ball->soundLoopId = SOUND_ID_NONE;
} }
int isColliderForBall(struct CollisionObject* collisionObject) { int isColliderForBall(struct CollisionObject* collisionObject) {

View file

@ -28,6 +28,7 @@ struct Ball {
float lifetime; float lifetime;
short dynamicId; short dynamicId;
short flags; short flags;
short soundLoopId;
}; };
void ballBurnMarkInit(); void ballBurnMarkInit();