mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
enabled fizzler objects to send signals on cube contact, the "@fizzler" objects in blender files now can have an argument for the signal name to send.
test_chamber_00: added level logic to trigger voice lines whenever the cube in the first room is fizzled. added missing voice lines box_dropper.c: fixed typo "DROPPER_.." instead of "DROOPER_.." (Issue #13)
This commit is contained in:
parent
591e5958aa
commit
3d37c2504c
|
@ -0,0 +1 @@
|
|||
-c 1 -r 22050
|
|
@ -0,0 +1 @@
|
|||
-c 1 -r 22050
|
Binary file not shown.
|
@ -30,6 +30,7 @@ cutscenes:
|
|||
- open_portal portal_room 0
|
||||
- open_portal room_exit 1
|
||||
FIRST_PUZZLE:
|
||||
- start_cutscene FIRST_ROOM_CHECK_CUBE_FIZZLE
|
||||
- clear_signal room_divider
|
||||
- delay 3
|
||||
- set_signal cube_dropper
|
||||
|
@ -38,6 +39,14 @@ cutscenes:
|
|||
- q_sound SOUNDS_00_PART1_SUCCESS_1 CH_GLADOS PORTAL_00_PART1_SUCCESS_1
|
||||
- q_sound SOUNDS_00_PART1_SUCCESS_2 CH_GLADOS PORTAL_00_PART1_SUCCESS_2
|
||||
- q_sound SOUNDS_00_PART1_SUCCESS_3 CH_GLADOS PORTAL_00_PART1_SUCCESS_3
|
||||
FIRST_ROOM_CHECK_CUBE_FIZZLE:
|
||||
- label first_room_cube_check_loop
|
||||
- wait_for_signal cube_fizzled
|
||||
- clear_signal cube_fizzled
|
||||
- q_sound SOUNDS_GENERIC_CRATE_VAPORIZED_IN_EMANCIPATION_GRID_1 CH_GLADOS PORTAL_GENERIC_CRATE_VAPORIZED_IN_EMANCIPATION_GRID_1
|
||||
- q_sound SOUNDS_GENERIC_CRATE_VAPORIZED_IN_EMANCIPATION_GRID_2 CH_GLADOS PORTAL_GENERIC_CRATE_VAPORIZED_IN_EMANCIPATION_GRID_2
|
||||
- wait_for_channel CH_GLADOS
|
||||
- goto first_room_cube_check_loop
|
||||
SECOND_SIGNAGE:
|
||||
- activate_signage 1
|
||||
START_SECOND_ROOM:
|
||||
|
@ -56,4 +65,4 @@ cutscenes:
|
|||
- wait_for_signal success_1
|
||||
- q_sound SOUNDS_00_PART2_SUCCESS_1 CH_GLADOS PORTAL_00_PART2_SUCCESS_1
|
||||
HOVER_CUBE_PROMPT:
|
||||
- show_prompt CutscenePromptTypeDrop
|
||||
- show_prompt CutscenePromptTypeDrop
|
|
@ -239,6 +239,7 @@ struct FizzlerDefinition {
|
|||
float width;
|
||||
float height;
|
||||
short roomIndex;
|
||||
short cubeSignalIndex;
|
||||
};
|
||||
|
||||
struct ElevatorDefinition {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include "hud.h"
|
||||
#include "scene.h"
|
||||
|
||||
#define DROOPER_RELOAD_TIME 2.0f
|
||||
#define DROPPER_RELOAD_TIME 2.0f
|
||||
#define DROPPER_DROP_TIME 0.5f
|
||||
|
||||
void boxDropperFakePos(struct BoxDropper* dropper, struct Transform* result) {
|
||||
|
@ -108,7 +108,7 @@ void boxDropperInit(struct BoxDropper* dropper, struct BoxDropperDefinition* def
|
|||
skAnimatorInit(&dropper->animator, PROPS_BOX_DROPPER_DEFAULT_BONES_COUNT);
|
||||
|
||||
dropper->flags = 0;
|
||||
dropper->reloadTimer = DROOPER_RELOAD_TIME;
|
||||
dropper->reloadTimer = DROPPER_RELOAD_TIME;
|
||||
|
||||
dynamicSceneSetRoomFlags(dropper->dynamicId, ROOM_FLAG_FROM_INDEX(dropper->roomIndex));
|
||||
|
||||
|
@ -158,12 +158,11 @@ void boxDropperUpdate(struct BoxDropper* dropper) {
|
|||
dropper->flags &= ~BoxDropperFlagsCubeRequested;
|
||||
dropper->flags |= BoxDropperFlagsCubeIsActive;
|
||||
|
||||
dropper->reloadTimer = DROOPER_RELOAD_TIME;
|
||||
dropper->reloadTimer = DROPPER_RELOAD_TIME;
|
||||
}
|
||||
|
||||
dropper->flags &= ~BoxDropperFlagsSignalWasSet;
|
||||
if (signalIsSet) {
|
||||
dropper->flags |= BoxDropperFlagsSignalWasSet;
|
||||
}
|
||||
|
||||
}
|
|
@ -6,6 +6,8 @@
|
|||
#include "../physics/collision_scene.h"
|
||||
#include "../util/dynamic_asset_loader.h"
|
||||
#include "../math/mathf.h"
|
||||
#include "../decor/decor_object_list.h"
|
||||
#include "signals.h"
|
||||
|
||||
#include "../../build/assets/models/dynamic_model_list.h"
|
||||
|
||||
|
@ -17,9 +19,16 @@
|
|||
#define GFX_PER_PARTICLE(particleCount) ((particleCount) + (((particleCount) + 7) >> 3) + 1)
|
||||
|
||||
void fizzlerTrigger(void* data, struct CollisionObject* objectEnteringTrigger) {
|
||||
struct Fizzler* fizzler = (struct Fizzler*)data;
|
||||
|
||||
if (objectEnteringTrigger->body) {
|
||||
objectEnteringTrigger->body->flags |= RigidBodyFizzled;
|
||||
}
|
||||
|
||||
int decorType = decorIdForObjectDefinition((struct DecorObjectDefinition*)objectEnteringTrigger->collider);
|
||||
if (decorType == DECOR_TYPE_CUBE || decorType == DECOR_TYPE_CUBE_UNIMPORTANT) {
|
||||
signalsSend(fizzler->cubeSignalIndex);
|
||||
}
|
||||
}
|
||||
|
||||
struct Transform gRelativeLeft = {
|
||||
|
@ -120,7 +129,7 @@ void fizzlerSpawnParticle(struct Fizzler* fizzler, int particleIndex) {
|
|||
currentVertex->v.cn[0] = 255; currentVertex->v.cn[1] = 255; currentVertex->v.cn[2] = 255; currentVertex->v.cn[3] = 255;
|
||||
}
|
||||
|
||||
void fizzlerInit(struct Fizzler* fizzler, struct Transform* transform, float width, float height, int room) {
|
||||
void fizzlerInit(struct Fizzler* fizzler, struct Transform* transform, float width, float height, int room, short cubeSignalIndex) {
|
||||
fizzler->collisionBox.sideLength.x = width;
|
||||
fizzler->collisionBox.sideLength.y = height;
|
||||
fizzler->collisionBox.sideLength.z = 0.25f;
|
||||
|
@ -135,9 +144,12 @@ void fizzlerInit(struct Fizzler* fizzler, struct Transform* transform, float wid
|
|||
rigidBodyMarkKinematic(&fizzler->rigidBody);
|
||||
|
||||
fizzler->collisionObject.trigger = fizzlerTrigger;
|
||||
fizzler->collisionObject.data = fizzler;
|
||||
|
||||
fizzler->rigidBody.transform = *transform;
|
||||
fizzler->rigidBody.currentRoom = room;
|
||||
|
||||
fizzler->cubeSignalIndex = cubeSignalIndex;
|
||||
|
||||
collisionObjectUpdateBB(&fizzler->collisionObject);
|
||||
collisionSceneAddDynamicObject(&fizzler->collisionObject);
|
||||
|
@ -216,6 +228,6 @@ void fizzlerUpdate(struct Fizzler* fizzler) {
|
|||
fizzler->oldestParticleIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
osWritebackDCache(fizzler->modelVertices, sizeof(Vtx) * maxVertex);
|
||||
}
|
|
@ -28,9 +28,10 @@ struct Fizzler {
|
|||
short maxVerticalExtent;
|
||||
short oldestParticleIndex;
|
||||
short dynamicId;
|
||||
short cubeSignalIndex;
|
||||
};
|
||||
|
||||
void fizzlerInit(struct Fizzler* fizzler, struct Transform* transform, float width, float height, int room);
|
||||
void fizzlerInit(struct Fizzler* fizzler, struct Transform* transform, float width, float height, int room, short cubeSignalIndex);
|
||||
void fizzlerUpdate(struct Fizzler* fizzler);
|
||||
|
||||
#endif
|
|
@ -191,7 +191,8 @@ void sceneInitNoPauseMenu(struct Scene* scene, int mainMenuMode) {
|
|||
fizzlerTransform.position = fizzlerDef->position;
|
||||
fizzlerTransform.rotation = fizzlerDef->rotation;
|
||||
fizzlerTransform.scale = gOneVec;
|
||||
fizzlerInit(&scene->fizzlers[i], &fizzlerTransform, fizzlerDef->width, fizzlerDef->height, fizzlerDef->roomIndex);
|
||||
fizzlerInit(&scene->fizzlers[i], &fizzlerTransform, fizzlerDef->width, fizzlerDef->height,
|
||||
fizzlerDef->roomIndex, fizzlerDef->cubeSignalIndex);
|
||||
}
|
||||
|
||||
scene->elevatorCount = gCurrentLevel->elevatorCount;
|
||||
|
|
|
@ -127,6 +127,7 @@ for _, fizzler in pairs(sk_scene.nodes_for_type('@fizzler')) do
|
|||
1,
|
||||
1,
|
||||
room_index,
|
||||
signals.signal_index_for_name(fizzler.arguments[1] or ''),
|
||||
})
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue