mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
Fix activated ball catcher save file serialization
Previously, all activated catchers would reference the same ball when saving, causing position and signal issues if the referenced ball's launcher was in use. Fixes glitchy ball movement in chamber 15 final room.
This commit is contained in:
parent
ef179ec553
commit
f67ba7a5cc
|
@ -316,7 +316,7 @@ void pedestalDeserialize(struct Serializer* serializer, struct Scene* scene) {
|
|||
}
|
||||
|
||||
void launcherSerialize(struct Serializer* serializer, SerializeAction action, struct Scene* scene) {
|
||||
for (int i = 0; i < scene->ballLancherCount; ++i) {
|
||||
for (int i = 0; i < scene->ballLauncherCount; ++i) {
|
||||
struct BallLauncher* launcher = &scene->ballLaunchers[i];
|
||||
action(serializer, &launcher->currentBall.targetSpeed, sizeof(float));
|
||||
action(serializer, &launcher->currentBall.flags, sizeof(short));
|
||||
|
@ -333,7 +333,7 @@ void launcherSerialize(struct Serializer* serializer, SerializeAction action, st
|
|||
}
|
||||
|
||||
void launcherDeserialize(struct Serializer* serializer, struct Scene* scene) {
|
||||
for (int i = 0; i < scene->ballLancherCount; ++i) {
|
||||
for (int i = 0; i < scene->ballLauncherCount; ++i) {
|
||||
struct BallLauncher* launcher = &scene->ballLaunchers[i];
|
||||
serializeRead(serializer, &launcher->currentBall.targetSpeed, sizeof(float));
|
||||
serializeRead(serializer, &launcher->currentBall.flags, sizeof(short));
|
||||
|
@ -361,8 +361,8 @@ void catcherSerialize(struct Serializer* serializer, SerializeAction action, str
|
|||
|
||||
short caughtIndex = -1;
|
||||
|
||||
for (int launcherIndex = 0; launcherIndex < scene->ballLancherCount; ++launcherIndex) {
|
||||
if (&scene->ballLaunchers[i].currentBall == catcher->caughtBall) {
|
||||
for (int launcherIndex = 0; launcherIndex < scene->ballLauncherCount; ++launcherIndex) {
|
||||
if (&scene->ballLaunchers[launcherIndex].currentBall == catcher->caughtBall) {
|
||||
caughtIndex = launcherIndex;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -146,4 +146,5 @@ void ballCatcherHandBall(struct BallCatcher* catcher, struct Ball* caughtBall) {
|
|||
struct Vector3 targetPosition;
|
||||
transformPoint(&catcher->rigidBody.transform, &gLocalCatcherLocation, &targetPosition);
|
||||
catcher->caughtBall->rigidBody.transform.position = targetPosition;
|
||||
catcher->caughtBall->flags |= BallFlagsPowering;
|
||||
}
|
|
@ -233,9 +233,9 @@ void sceneInitNoPauseMenu(struct Scene* scene, int mainMenuMode) {
|
|||
|
||||
ballBurnMarkInit();
|
||||
|
||||
scene->ballLancherCount = gCurrentLevel->ballLauncherCount;
|
||||
scene->ballLaunchers = malloc(sizeof(struct BallLauncher) * scene->ballLancherCount);
|
||||
for (int i = 0; i < scene->ballLancherCount; ++i) {
|
||||
scene->ballLauncherCount = gCurrentLevel->ballLauncherCount;
|
||||
scene->ballLaunchers = malloc(sizeof(struct BallLauncher) * scene->ballLauncherCount);
|
||||
for (int i = 0; i < scene->ballLauncherCount; ++i) {
|
||||
ballLauncherInit(&scene->ballLaunchers[i], &gCurrentLevel->ballLaunchers[i]);
|
||||
}
|
||||
|
||||
|
@ -672,7 +672,7 @@ void sceneUpdate(struct Scene* scene) {
|
|||
}
|
||||
|
||||
for (int i = 0; i < scene->ballCatcherCount; ++i) {
|
||||
ballCatcherUpdate(&scene->ballCatchers[i], scene->ballLaunchers, scene->ballLancherCount);
|
||||
ballCatcherUpdate(&scene->ballCatchers[i], scene->ballLaunchers, scene->ballLauncherCount);
|
||||
}
|
||||
|
||||
for (int i = 0; i < scene->triggerListenerCount; ++i) {
|
||||
|
@ -735,7 +735,7 @@ void sceneUpdate(struct Scene* scene) {
|
|||
boxDropperUpdate(&scene->boxDroppers[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < scene->ballLancherCount; ++i) {
|
||||
for (int i = 0; i < scene->ballLauncherCount; ++i) {
|
||||
ballLauncherUpdate(&scene->ballLaunchers[i]);
|
||||
}
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ struct Scene {
|
|||
u8 signageCount;
|
||||
u8 boxDropperCount;
|
||||
u8 switchCount;
|
||||
u8 ballLancherCount;
|
||||
u8 ballLauncherCount;
|
||||
u8 ballCatcherCount;
|
||||
u8 clockCount;
|
||||
u8 securityCameraCount;
|
||||
|
|
Loading…
Reference in a new issue