Created
June 9, 2026 19:21
-
-
Save VictorTaelin/e11a1da0218f4473dc423bfc3c8e7513 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Make a three.js first-person puzzle game inspired by Portal. | |
| Player: | |
| First-person controller with mouse-look + WASD movement, jump, and basic collision. | |
| A simple test chamber with walls, floor, and ceiling, plus a few props (a cube, a button, and a door) so portals can be used for puzzles and momentum. | |
| Portals: | |
| The player can shoot/place two portals: blue (left click) and orange (right click). | |
| Portals can only be placed on valid “portal surfaces” (flat, non-moving surfaces marked as portalable). If shot on a non-portal surface, it should fail. | |
| Only one blue and one orange portal exist at a time; placing a new one replaces the old one of the same color. | |
| Core requirement: portals must behave like the original game: | |
| 1) You can see through portals correctly from any angle, with the view inside a portal showing the world from the other portal’s viewpoint with correct perspective. | |
| 2) Walking through a portal is seamless and continuous, with no instant teleport or screen cut; crossing feels like the two surfaces are physically connected. | |
| 3) Orientation is preserved: exiting a portal rotates and transforms the player’s direction and velocity based on the relative rotation between the two portals. | |
| 4) Momentum is conserved: falling, jumping, and launching through portals behaves naturally. | |
| 5) Objects (such as the cube) can also pass through portals seamlessly using the same rules as the player. | |
| Collision & edge cases: | |
| Prevent placing portals where they would overlap edges or be partially off the surface. | |
| If only one portal exists, the other portal acts as inactive and cannot be entered. | |
| Avoid clipping or jitter when the player or objects are partially inside a portal; traversal should remain stable. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment