Gravity Beam Dynamic Scaling
Design: The gravity bean may either be fired by the player using the gravity gauntlet, or be placed in the levels by designers.
The designer placed beams are static in nature as in they do not grow/shrink dynamically in length or respond to player input.
The player fired beams respond to input allowing the players to cancel it. The player beams are also dynamic and grow/shrink as per the environment.
Expected Behavior: The beam must cover to the full length available from the start point to the nearest wall opposite the start point. Should the wall move back and forth or be removed, revealing another wall further away from the beam start point, the beam must grow/shrink to adapt to the new environment.
Problem: The gravity beam was a mix of a custom cylindrical mesh with custom material and 3 particle systems. Each of these particles stat/stop at different places within the blueprint. Also, due to some artistic design, the pivot point of the beam was set at the center of the cylinder while the particles sat at the edge. However, the mesh and the particles need to be scaled properly to cover the entire area.
Solution: The mesh and the particles were scaled and re-positioned individually. First a bunch of ray-casts were used from the start point of the beam, which detected the closest wall from the start point. The ray distance was cached at this point. The beam was scaled in it's forward direction to ensure it covers a total distance calculated and placed at half distance in the endLocation- startLocation direction.
The particles were then positioned at the start location facing the beam forward direction and the particle system's start location and total distance were set via blueprints using the calculated ray distance.
There was still one problem, the mesh being scaled via transform scale and the particles being scaled via start point and total distance, caused some floating point error. As the levels in the game were large and the beams had a very large range in terms of scale that they could be, the floating error would cause the particles to either end too early or exceed the length of the beam. My colleague Henry Dai and I collaborated on an algorithm toestimate whether the error is on the low end or on the high end, and adjust the distance of the particles accordingly. It was not a perfect solution but it hid the problem well enough.
Ghost Field - Beam Preview
Design: When the user points at a field-able wall or cube, and holds down the left mouse button, a gravity beam preview must be shown to the player.
This preview must be the exact size, at the exact start position as the actual gravity beam would be when the if the user lets go of the left mouse button.
Expected Behavior: As shown in the video, the ghost field must appear when the player is holding the left mouse button, move around with the mouse, and when left mouse button is let go, immediately transition into the gravity field.
Resolution: Created a blueprint with the same mesh as that of the gravity field and applied a glassy material on it. Moved the mesh scaling login from the gravity beam to the ghost field script. When the user places a beam by letting go of the mouse, a gravity beam is created, and the distance, scale, and position values are passed from the ghoset field to the gravity beam, and the ghost field is deleted.
Design: Each level has upto 3 checkpoints in the scene. When the user reaches the most recent checkpoint, the game performs a quick save.
Upon death, the player must be re-spawned at the most recent checkpoint reached, or restart the level if no checkpoint reached.
The game state must be reset to the latest checkpoint or to the start of the level as appropriate.
Level Select/Unlock System
Upon completion on each level, the next level is unlocked in the level select menu.
The user can choose any of the unlocked levels to replay the level. The player's progress is saved against their save profile.
Implemented menu system with placeholder art. The menu system includes, the main menu, options menu, level selection, graphics settings audio settings. Henry Dai collaborated on the localization menu.
Note: The Video on the right shows the final menu system after Alex Shilts gave it a designer's touch.