diff --git a/assets/test_chambers/test_chamber_03/test_chamber_03.blend b/assets/test_chambers/test_chamber_03/test_chamber_03.blend index 7ebd001..0fd8683 100644 Binary files a/assets/test_chambers/test_chamber_03/test_chamber_03.blend and b/assets/test_chambers/test_chamber_03/test_chamber_03.blend differ diff --git a/assets/test_chambers/test_chamber_04/test_chamber_04.blend b/assets/test_chambers/test_chamber_04/test_chamber_04.blend index 5da8f81..73269df 100644 Binary files a/assets/test_chambers/test_chamber_04/test_chamber_04.blend and b/assets/test_chambers/test_chamber_04/test_chamber_04.blend differ diff --git a/assets/test_chambers/test_chamber_07/test_chamber_07.blend b/assets/test_chambers/test_chamber_07/test_chamber_07.blend index 1b73794..eaac7ed 100644 Binary files a/assets/test_chambers/test_chamber_07/test_chamber_07.blend and b/assets/test_chambers/test_chamber_07/test_chamber_07.blend differ diff --git a/src/decor/decor_object_list.c b/src/decor/decor_object_list.c index 65f4fbc..d60b39d 100644 --- a/src/decor/decor_object_list.c +++ b/src/decor/decor_object_list.c @@ -122,7 +122,7 @@ struct DecorObjectDefinition gDecorObjectDefinitions[] = { NULL, }, 0.0f, - 1.0f, + 1.3f, PROPS_LIGHT_RAIL_ENDCAP_DYNAMIC_MODEL, .materialIndex = LIGHT_RAIL_ENDCAP_INDEX, .soundClipId = -1, diff --git a/src/levels/static_render.c b/src/levels/static_render.c index 5d5398e..f1231de 100644 --- a/src/levels/static_render.c +++ b/src/levels/static_render.c @@ -65,14 +65,16 @@ void staticRenderPopulateRooms(struct FrustrumCullingInformation* cullingInfo, M struct RotatedBox rotatedBox; - rotatedBoxTransform(&staticTransforms[staticElement->transformIndex], animatedBox, &rotatedBox); + struct Transform* transform = &staticTransforms[staticElement->transformIndex]; + + rotatedBoxTransform(transform, animatedBox, &rotatedBox); if (isRotatedBoxOutsideFrustrum(cullingInfo, &rotatedBox)) { continue; } struct Vector3 center; - vector3Scale(&rotatedBox.origin, ¢er, 1.0f / SCENE_SCALE); + vector3AddScaled(&staticElement->center, &transform->position, 1.0f / SCENE_SCALE, ¢er); renderSceneAdd( renderScene, diff --git a/src/savefile/scene_serialize.c b/src/savefile/scene_serialize.c index 3a6f6a7..e068de9 100644 --- a/src/savefile/scene_serialize.c +++ b/src/savefile/scene_serialize.c @@ -525,5 +525,6 @@ void sceneDeserialize(struct Serializer* serializer, struct Scene* scene) { if (scene->player.flags & (PlayerHasFirstPortalGun | PlayerHasSecondPortalGun)) { scene->portalGun.portalGunVisible = 1; + scene->portalGun.rotation = scene->player.lookTransform.rotation; } } diff --git a/src/scene/fizzler.c b/src/scene/fizzler.c index 06f38d8..76cc9b0 100644 --- a/src/scene/fizzler.c +++ b/src/scene/fizzler.c @@ -216,4 +216,6 @@ void fizzlerUpdate(struct Fizzler* fizzler) { fizzler->oldestParticleIndex = 0; } } + + osWritebackDCache(fizzler->modelVertices, sizeof(Vtx) * maxVertex); } \ No newline at end of file diff --git a/src/scene/portal_gun.c b/src/scene/portal_gun.c index 4445625..fe1c815 100644 --- a/src/scene/portal_gun.c +++ b/src/scene/portal_gun.c @@ -49,6 +49,9 @@ void portalGunInit(struct PortalGun* portalGun, struct Transform* at, int isFres if (isFreshStart) { skAnimatorRunClip(&portalGun->animator, &portal_gun_v_portalgun_Armature_draw_clip, 0.0f, 0); + // the first time the scene renders, the animation clip hasn't started yet + // this just hides the gun offscreen so it doesn't show up for a single frame + portalGun->armature.pose[0].position.y = -1.0f; } else { skAnimatorRunClip(&portalGun->animator, &portal_gun_v_portalgun_Armature_idle_clip, 0.0f, 0); }