diff --git a/README.md b/README.md index 44d5be7..2a1150a 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,6 @@ That will generate the rom at `/build/portal64.z64` ## Current New Feature TODO List - [ ] chell is short sometimes -- [ ] near clipping plane when touching portals - [ ] ball velocity in test chamber 11 - [ ] clear sleeping object physics flag so buttons in savefiles remain pressed after loading - [ ] rumble pak support? @@ -151,6 +150,7 @@ That will generate the rom at `/build/portal64.z64` - [ ] Correct elevator timing - [ ] Adding loading notice between levels #45 - [ ] pausing while glados is speaking can end her speech early +- [x] near clipping plane when touching portals git - [x] investigate failed portal hole in test chamber 04 - [x] Change default controls - [x] Add particle effects (shooting portal gun, energy pellet) diff --git a/src/player/player.c b/src/player/player.c index cd0e023..a37127f 100644 --- a/src/player/player.c +++ b/src/player/player.c @@ -101,13 +101,15 @@ void playerRender(void* data, struct DynamicRenderDataList* renderList, struct R gSPDisplayList(dl++, player->armature.displayList); gSPEndDisplayList(dl++); - dynamicRenderListAddData( + + dynamicRenderListAddDataTouchingPortal( renderList, objectRender, matrix, DEFAULT_INDEX, &player->body.transform.position, - armature + armature, + player->body.flags ); } diff --git a/src/scene/dynamic_render_list.c b/src/scene/dynamic_render_list.c index 58561e5..0e9b7b7 100644 --- a/src/scene/dynamic_render_list.c +++ b/src/scene/dynamic_render_list.c @@ -148,7 +148,7 @@ void dynamicRenderListAddDataTouchingPortal( } float finalTransform[4][4]; - guMtxCatF(transformAsFloat, list->portalTransforms[1 - touchingPortalIndex], finalTransform); + guMtxCatF(transformAsFloat, list->portalTransforms[touchingPortalIndex], finalTransform); guMtxF2L(finalTransform, mtx); @@ -157,7 +157,7 @@ void dynamicRenderListAddDataTouchingPortal( next->model = model; next->transform = mtx; - transformPoint(collisionSceneTransformToPortal(1 - touchingPortalIndex), position, &next->position); + transformPoint(collisionSceneTransformToPortal(touchingPortalIndex), position, &next->position); next->armature = armature; next->materialIndex = materialIndex; next->renderStageCullingMask = childCullingMask; diff --git a/src/scene/render_plan.c b/src/scene/render_plan.c index 8aad962..106494f 100644 --- a/src/scene/render_plan.c +++ b/src/scene/render_plan.c @@ -337,6 +337,10 @@ int renderShouldRenderOtherPortal(struct Scene* scene, int visiblePortal, struct return 0; } + if ((scene->player.body.flags & (RigidBodyIsTouchingPortalA << visiblePortal)) != 0 && properties->currentDepth == STARTING_RENDER_DEPTH) { + return 1; + } + struct Portal* portal = &scene->portals[visiblePortal]; struct BoundingBoxs16 portalBox; portalBox.minX = (s16)(portal->collisionObject.boundingBox.min.x * SCENE_SCALE);