mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
Added A Few More Sounds and Utilized Flags
- Door open and close sound implemented - Pedestal rotating sound implemented - Elevator moving sound and timing implemented - fixed implementation to make use of object flags rather than global variables (this was a good catch because it fixed a bug when there were two buttons loaded at once)
This commit is contained in:
parent
ef476af8a3
commit
e360a288df
|
@ -108,9 +108,9 @@ Where `/home/james/Blender/blender-2.93.1-linux-x64` is the folder where Blender
|
|||
- [ ] Portal not rending recursively sometimes
|
||||
- [ ] Passing into a ceiling portal can sometimes mess with the player rotation
|
||||
- [ ] Correct elevator timing
|
||||
- [ ] Elevator and door sounds
|
||||
- [ ] Presort portal gun polygon order
|
||||
- [ ] Camera shake
|
||||
- [x] Elevator and door sounds
|
||||
- [?] Skips audio sometimes
|
||||
- [x] Signage should not always be on
|
||||
- [x] sound effects for ball (portal_pak_dir/scripts/npc_sounds_energy_ball.txt)
|
||||
|
|
1
assets/sound/ambient/machines/portalgun_rotate1.sox
Normal file
1
assets/sound/ambient/machines/portalgun_rotate1.sox
Normal file
|
@ -0,0 +1 @@
|
|||
-c 1 -r 22050
|
1
assets/sound/ambient/machines/wall_move5.sox
Normal file
1
assets/sound/ambient/machines/wall_move5.sox
Normal file
|
@ -0,0 +1 @@
|
|||
-c 1 -r 22050
|
|
@ -1 +1 @@
|
|||
-c 1 -r 22050 -b 16
|
||||
-c 1 -r 22050 -b 16
|
1
assets/sound/doors/door_metal_thin_close2.sox
Normal file
1
assets/sound/doors/door_metal_thin_close2.sox
Normal file
|
@ -0,0 +1 @@
|
|||
-c 1 -r 22050
|
|
@ -39,6 +39,9 @@ unsigned short soundsIntercom[2] = {
|
|||
unsigned short soundsButton = SOUNDS_BUTTON3;
|
||||
unsigned short soundsReleaseCube = SOUNDS_DOORMOVE2;
|
||||
unsigned short soundsPedestalShooting = SOUNDS_CHARGING;
|
||||
unsigned short soundsDoor= SOUNDS_DOOR_METAL_THIN_CLOSE2;
|
||||
unsigned short soundsElevatorMoving = SOUNDS_WALL_MOVE5;
|
||||
unsigned short soundsPedestalMoving = SOUNDS_PORTALGUN_ROTATE1;
|
||||
|
||||
unsigned short soundsPortalOpen2 = SOUNDS_PORTAL_OPEN2;
|
||||
|
||||
|
|
|
@ -11,6 +11,10 @@ extern unsigned short soundsIntercom[2];
|
|||
extern unsigned short soundsButton;
|
||||
extern unsigned short soundsReleaseCube;
|
||||
extern unsigned short soundsPedestalShooting;
|
||||
extern unsigned short soundsPedestalMoving;
|
||||
extern unsigned short soundsDoor;
|
||||
extern unsigned short soundsElevatorMoving;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -36,8 +36,6 @@ struct ColliderTypeData gButtonCollider = {
|
|||
&gCollisionCylinderCallbacks
|
||||
};
|
||||
|
||||
int gPrevButtonState = 0; //0 == unpressed, 1 == pressed
|
||||
|
||||
#define MASS_BUTTON_PRESS_THRESHOLD 1.9f
|
||||
#define BUTTON_MOVEMENT_AMOUNT 0.1f
|
||||
#define BUTTON_MOVE_VELOCTY 0.3f
|
||||
|
@ -87,6 +85,7 @@ void buttonInit(struct Button* button, struct ButtonDefinition* definition) {
|
|||
|
||||
button->originalPos = definition->location;
|
||||
button->cubeSignalIndex = definition->cubeSignalIndex;
|
||||
button->flags = 0;
|
||||
|
||||
dynamicSceneSetRoomFlags(button->dynamicId, ROOM_FLAG_FROM_INDEX(button->rigidBody.currentRoom));
|
||||
}
|
||||
|
@ -135,14 +134,14 @@ void buttonUpdate(struct Button* button) {
|
|||
if (targetPos.y != button->rigidBody.transform.position.y) {
|
||||
//actively going down
|
||||
if (shouldPress){
|
||||
if (gPrevButtonState == 0){
|
||||
if (!(button->flags & ButtonFlagsBeingPressed)){
|
||||
soundPlayerPlay(soundsButton, 2.5f, 0.5f, &button->rigidBody.transform.position, &gZeroVec);
|
||||
}
|
||||
gPrevButtonState = 1;
|
||||
button->flags |= ButtonFlagsBeingPressed;
|
||||
}
|
||||
// actively going up
|
||||
else{
|
||||
gPrevButtonState = 0;
|
||||
button->flags &= ~ButtonFlagsBeingPressed;
|
||||
}
|
||||
|
||||
vector3MoveTowards(&button->rigidBody.transform.position, &targetPos, BUTTON_MOVE_VELOCTY * FIXED_DELTA_TIME, &button->rigidBody.transform.position);
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
#include "../audio/clips.h"
|
||||
#include "../audio/soundplayer.h"
|
||||
|
||||
enum ButtonFlags {
|
||||
ButtonFlagsBeingPressed = (1 << 0),
|
||||
};
|
||||
|
||||
struct Button {
|
||||
struct CollisionObject collisionObject;
|
||||
struct RigidBody rigidBody;
|
||||
|
@ -14,6 +18,7 @@ struct Button {
|
|||
short signalIndex;
|
||||
short cubeSignalIndex;
|
||||
struct Vector3 originalPos;
|
||||
short flags;
|
||||
};
|
||||
|
||||
void buttonInit(struct Button* button, struct ButtonDefinition* definition);
|
||||
|
|
|
@ -82,6 +82,7 @@ void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct W
|
|||
} else {
|
||||
door->forDoorway = NULL;
|
||||
}
|
||||
door->flags = 0;
|
||||
|
||||
door->doorDefinition = doorDefinition;
|
||||
|
||||
|
@ -90,6 +91,7 @@ void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct W
|
|||
void doorUpdate(struct Door* door) {
|
||||
float targetOpenAmount = signalsRead(door->signalIndex) ? 1.0f : 0.0f;
|
||||
door->openAmount = mathfMoveTowards(door->openAmount, targetOpenAmount, OPEN_VELOCITY * FIXED_DELTA_TIME);
|
||||
|
||||
|
||||
if (door->forDoorway) {
|
||||
if (door->openAmount == 0.0f) {
|
||||
|
@ -101,7 +103,17 @@ void doorUpdate(struct Door* door) {
|
|||
|
||||
if (door->openAmount == 0.0f) {
|
||||
door->collisionObject.collisionLayers = COLLISION_LAYERS_TANGIBLE;
|
||||
door->flags &= ~DoorFlagsJustOpened;
|
||||
if (!(door->flags & DoorFlagsJustClosed)){
|
||||
soundPlayerPlay(soundsDoor, 3.0f, 0.5f, &door->rigidBody.transform.position, &gZeroVec);
|
||||
door->flags |= DoorFlagsJustClosed;
|
||||
}
|
||||
} else {
|
||||
door->flags &= ~DoorFlagsJustClosed;
|
||||
if (!(door->flags & DoorFlagsJustOpened)){
|
||||
soundPlayerPlay(soundsDoor, 3.0f, 0.5f, &door->rigidBody.transform.position, &gZeroVec);
|
||||
door->flags |= DoorFlagsJustOpened;
|
||||
}
|
||||
door->collisionObject.collisionLayers = 0;
|
||||
}
|
||||
}
|
|
@ -3,6 +3,13 @@
|
|||
|
||||
#include "../physics/collision_object.h"
|
||||
#include "../levels/level_definition.h"
|
||||
#include "../audio/soundplayer.h"
|
||||
#include "../audio/clips.h"
|
||||
|
||||
enum DoorFlags {
|
||||
DoorFlagsJustClosed = (1 << 0),
|
||||
DoorFlagsJustOpened = (1 << 1),
|
||||
};
|
||||
|
||||
struct Door {
|
||||
struct CollisionObject collisionObject;
|
||||
|
@ -12,6 +19,7 @@ struct Door {
|
|||
short dynamicId;
|
||||
short signalIndex;
|
||||
float openAmount;
|
||||
short flags;
|
||||
};
|
||||
|
||||
void doorInit(struct Door* door, struct DoorDefinition* doorDefinition, struct World* world);
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#define OPEN_DELAY 1.0f
|
||||
#define CLOSE_DELAY 13.0f
|
||||
#define MOVING_SOUND_DELAY 3.5f
|
||||
|
||||
struct ColliderTypeData gElevatorColliderType = {
|
||||
CollisionShapeTypeMesh,
|
||||
|
@ -102,6 +103,7 @@ void elevatorInit(struct Elevator* elevator, struct ElevatorDefinition* elevator
|
|||
elevator->targetElevator = elevatorDefinition->targetElevator;
|
||||
|
||||
elevator->timer = elevatorDefinition->targetElevator == -1 ? OPEN_DELAY : CLOSE_DELAY;
|
||||
elevator->movingTimer = MOVING_SOUND_DELAY;
|
||||
|
||||
dynamicSceneSetRoomFlags(elevator->dynamicId, ROOM_FLAG_FROM_INDEX(elevatorDefinition->roomIndex));
|
||||
}
|
||||
|
@ -150,7 +152,8 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) {
|
|||
}
|
||||
|
||||
if (shouldLock) {
|
||||
elevator->flags |= ElevatorFlagsIsLocked;
|
||||
|
||||
elevator->flags |= ElevatorFlagsIsLocked;
|
||||
}
|
||||
|
||||
if ((elevator->flags & ElevatorFlagsIsLocked) != 0) {
|
||||
|
@ -172,6 +175,15 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) {
|
|||
soundPlayerPlay(soundsElevatorDoor, 1.0f, 0.5f, &elevator->rigidBody.transform.position, &gZeroVec);
|
||||
}
|
||||
|
||||
if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && (elevator->movingTimer > 0.0f)){
|
||||
elevator->movingTimer -= FIXED_DELTA_TIME;
|
||||
}
|
||||
|
||||
if ((elevator->flags & ElevatorFlagsIsLocked) && (elevator->openAmount == 0.0f) && !(elevator->flags & ElevatorFlagsMovingSoundPlayed) && (elevator->movingTimer <= 0.0f)){
|
||||
soundPlayerPlay(soundsElevatorMoving, 1.5f, 0.5f, &elevator->rigidBody.transform.position, &gZeroVec);
|
||||
elevator->flags |= ElevatorFlagsMovingSoundPlayed;
|
||||
}
|
||||
|
||||
elevator->openAmount = mathfMoveTowards(elevator->openAmount, shouldBeOpen ? 1.0f : 0.0f, OPEN_SPEED * FIXED_DELTA_TIME);
|
||||
|
||||
return result;
|
||||
|
|
|
@ -10,6 +10,7 @@ enum ElevatorFlags {
|
|||
ElevatorFlagsIsLocked = (1 << 0),
|
||||
ElevatorFlagsIsExit = (1 << 1),
|
||||
ElevatorFlagsHasHadPlayer = (1 << 2),
|
||||
ElevatorFlagsMovingSoundPlayed = (1 << 3),
|
||||
};
|
||||
|
||||
struct Elevator {
|
||||
|
@ -21,6 +22,7 @@ struct Elevator {
|
|||
short roomIndex;
|
||||
float openAmount;
|
||||
float timer;
|
||||
float movingTimer;
|
||||
};
|
||||
|
||||
void elevatorInit(struct Elevator* elevator, struct ElevatorDefinition* elevatorDefinition);
|
||||
|
|
|
@ -94,14 +94,24 @@ void pedestalUpdate(struct Pedestal* pedestal) {
|
|||
}
|
||||
pedestal->flags &= ~PedestalFlagsIsPointing;
|
||||
}
|
||||
else{
|
||||
if (!(pedestal->flags & PedestalFlagsAlreadyMoving) && !(pedestal->flags & PedestalFlagsDown)){
|
||||
soundPlayerPlay(soundsPedestalMoving, 5.0f, 0.5f, &pedestal->transform.position, &gZeroVec);
|
||||
pedestal->flags |= PedestalFlagsAlreadyMoving;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
pedestal->flags &= ~PedestalFlagsAlreadyMoving;
|
||||
}
|
||||
|
||||
quatAxisComplex(&gUp, &pedestal->currentRotation, &pedestal->armature.pose[PEDESTAL_HOLDER_BONE].rotation);
|
||||
}
|
||||
|
||||
void pedestalHide(struct Pedestal* pedestal) {
|
||||
soundPlayerPlay(soundsReleaseCube, 3.0f, 0.5f, &pedestal->transform.position, &gZeroVec);
|
||||
pedestal->flags |= PedestalFlagsDown;
|
||||
|
||||
skAnimatorRunClip(&pedestal->animator, &pedestal_Armature_Hide_clip, 0.0f, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
enum PedestalFlags {
|
||||
PedestalFlagsDown = (1 << 0),
|
||||
PedestalFlagsIsPointing = (1 << 1),
|
||||
PedestalFlagsAlreadyMoving = (1 << 2),
|
||||
};
|
||||
|
||||
struct Pedestal {
|
||||
|
|
Loading…
Reference in a new issue