diff --git a/assets/sound/vo/aperture_ai/00_part1_success-1.sox b/assets/sound/vo/aperture_ai/00_part1_success-1.sox new file mode 100644 index 0000000..7af88f9 --- /dev/null +++ b/assets/sound/vo/aperture_ai/00_part1_success-1.sox @@ -0,0 +1 @@ +-c 1 -r 22050 \ No newline at end of file diff --git a/assets/sound/vo/aperture_ai/00_part1_success-2.sox b/assets/sound/vo/aperture_ai/00_part1_success-2.sox new file mode 100644 index 0000000..7af88f9 --- /dev/null +++ b/assets/sound/vo/aperture_ai/00_part1_success-2.sox @@ -0,0 +1 @@ +-c 1 -r 22050 \ No newline at end of file diff --git a/assets/sound/vo/aperture_ai/00_part1_success-3.sox b/assets/sound/vo/aperture_ai/00_part1_success-3.sox new file mode 100644 index 0000000..7af88f9 --- /dev/null +++ b/assets/sound/vo/aperture_ai/00_part1_success-3.sox @@ -0,0 +1 @@ +-c 1 -r 22050 \ No newline at end of file diff --git a/assets/test_chambers/test_chamber_00/test_chamber_00_0.blend b/assets/test_chambers/test_chamber_00/test_chamber_00_0.blend index b78d251..036c32a 100644 Binary files a/assets/test_chambers/test_chamber_00/test_chamber_00_0.blend and b/assets/test_chambers/test_chamber_00/test_chamber_00_0.blend differ diff --git a/skelatool64/src/definition_generator/TriggerGenerator.cpp b/skelatool64/src/definition_generator/TriggerGenerator.cpp index 1f9e48e..071bd4c 100644 --- a/skelatool64/src/definition_generator/TriggerGenerator.cpp +++ b/skelatool64/src/definition_generator/TriggerGenerator.cpp @@ -246,6 +246,7 @@ std::shared_ptr generateTriggers(const aiScene* scene, C button.roomIndex = roomOutput.RoomForNode(nodeInfo.node); button.signalIndex = nodeInfo.arguments.size() ? signals.SignalIndexForName(nodeInfo.arguments[0]) : -1; + button.cubeSignalIndex = nodeInfo.arguments.size() > 1 ? signals.SignalIndexForName(nodeInfo.arguments[1]) : -1; output->buttons.push_back(button); } @@ -262,6 +263,7 @@ void generateButtonsDefinition(CFileDefinition& fileDefinition, StructureDataChu singleButton->Add(std::unique_ptr(new StructureDataChunk(ref.position))); singleButton->AddPrimitive(ref.roomIndex); singleButton->AddPrimitive(ref.signalIndex); + singleButton->AddPrimitive(ref.cubeSignalIndex); buttonData->Add(std::move(singleButton)); } diff --git a/skelatool64/src/definition_generator/TriggerGenerator.h b/skelatool64/src/definition_generator/TriggerGenerator.h index e81aa0b..3b15922 100644 --- a/skelatool64/src/definition_generator/TriggerGenerator.h +++ b/skelatool64/src/definition_generator/TriggerGenerator.h @@ -17,6 +17,7 @@ struct Button { aiVector3D position; int roomIndex; int signalIndex; + int cubeSignalIndex; }; struct TriggerGeneratorOutput { diff --git a/src/levels/level_definition.h b/src/levels/level_definition.h index 352d455..b9bdc44 100644 --- a/src/levels/level_definition.h +++ b/src/levels/level_definition.h @@ -97,6 +97,7 @@ struct ButtonDefinition { struct Vector3 location; short roomIndex; short signalIndex; + short cubeSignalIndex; }; struct DecorDefinition { diff --git a/src/scene/button.c b/src/scene/button.c index 6290c18..1974263 100644 --- a/src/scene/button.c +++ b/src/scene/button.c @@ -40,6 +40,8 @@ struct ColliderTypeData gButtonCollider = { #define BUTTON_MOVEMENT_AMOUNT 0.1f #define BUTTON_MOVE_VELOCTY 0.3f +#define PRESSED_WITH_CUBE 2 + void buttonRender(void* data, struct RenderScene* renderScene) { struct Button* button = (struct Button*)data; Mtx* matrix = renderStateRequestMatrices(renderScene->renderState, 1); @@ -72,6 +74,7 @@ void buttonInit(struct Button* button, struct ButtonDefinition* definition) { button->signalIndex = definition->signalIndex; button->originalPos = definition->location; + button->cubeSignalIndex = definition->cubeSignalIndex; } void buttonUpdate(struct Button* button) { @@ -84,6 +87,11 @@ void buttonUpdate(struct Button* button) { if (other->body && other->body->mass > MASS_BUTTON_PRESS_THRESHOLD) { shouldPress = 1; + + if (other->body->flags & RigidBodyFlagsGrabbable) { + shouldPress = PRESSED_WITH_CUBE; + } + break; } @@ -95,6 +103,10 @@ void buttonUpdate(struct Button* button) { if (shouldPress) { targetPos.y -= BUTTON_MOVEMENT_AMOUNT; signalsSend(button->signalIndex); + + if (shouldPress == PRESSED_WITH_CUBE) { + signalsSend(button->cubeSignalIndex); + } } if (targetPos.y != button->rigidBody.transform.position.y) { diff --git a/src/scene/button.h b/src/scene/button.h index ed13324..ca6fe0a 100644 --- a/src/scene/button.h +++ b/src/scene/button.h @@ -10,6 +10,7 @@ struct Button { struct RigidBody rigidBody; short dynamicId; short signalIndex; + short cubeSignalIndex; struct Vector3 originalPos; };