Journey into a Particle Accelerator
100% Procedurally generated, control a little QBall who has powers to change its form to solve puzzles!
Walk in to the Development process…
I decided to work on my own project and start a team. I love physics and always will. I wanted to make a game that people could enjoy and learn at the same time over a really complicated topic, i.e. the ideas behind Quantum Mechanics. From the start I knew I had to take on a gargantuan task of being my team’s only programmer, designer, artist, and manager. However, I am persisting despite the large workload. I have learned so much already about app development, how to make custom macro libraries, basic AI trees, all from this project, I wonder what it will be like in January when I apply for a SBIR grant. Below, I’ve taken a screenshot of some of the massive amount of work I had to accomplish in a relatively short amount of time in a variety of disciplines. I knew I was good at prototyping in Unreal so I went headstrong in it. The first is the player controlloer blueprint, the second is the game mode blueprint, the third is the tech art logic for the player controller’s color change during wave mode, the fourth is the same three functions plotted prettily in desmos graphing calculator, the next are the modular assets I’ve created for this game, and the final one is an example of some concept at I’ve made for the game.
The first blueprint pictured is the player pawn, the little ball you control, known as the QBall! The spaceship in the foreground is actually a separate actor from the QBall that moves at the same relative speed, making them look parented together, when in fact, the QBall is the object you control! If I parented the camera to the controller then the camera would move with the QBall, which is what I precisely didn’t want! Some of the craziest stuff I’d never thought about including on it like the logic for a scoreboard, collision channel madness, or having to use basic Newtonian physics to make sure the QBall never falls behind when you add movement on other axes, e.g. Y and Z (player moves along X by default).
Essentially by default the player has a direction vector (1,0,0) and given an input adds a value to an added motion vector (1,1,1) depending on the input axis float value. Since I have a motion that is already automatically progressing along X, but I wanted the player the option for full, three-dimensional movement control, I set the X to be between 3 and -1. I then combine the three floats into a singular motion vector, which is then multiplied by the contribution by the player’s uncertainty score (random for superposition mode, randomly increasing for wave, and slowly going to 0 for particle), then into a combined movement vector, which is, in turn rotated to the global rotation of the nearest curved tile, determined by the Game Mode. (By default it is a 0,0,0 rotator, since the X axis perfectly aligns with a Yaw of 0). While that was fine and dandy, it turned out that when you moved the QBall started slowing down relative to the camera! To fix it, I created some dynamic integers (0 or 1) that when added from each of the three + 1 and multiplied their root to the default speed of the QBall to temporarily reset its max value. This allowed a velocity increase, but the speed remained steady with respect to the camera actor (and allowed for controllable +/- x-axis motion).
The next blueprint pictured is the QRun game mode which has the logic for the procedural generation of the tiles, as well as setting system references. In it, this is where the camera actor is actually spawned. It took a while to figure out the rotation mechanics due to some crazy collision issues. The actual determination of the obstacles is in the Construction Script for the floor tile actors.
Since I am working on developing this for a demo game to teach the Photoelectric Effect I thought it would be a fun feature to make where the color of the QBall changes with a different wavelength. I got mind blown a bit trying to replicate the visual spectrum rainbow and this is how I tried to emulate it. A more exact emulation would have to be done through a color curve actor but for now adjusting the R G B channels of a base color in a simple material seemed simple enough. The graph, if read from 0 to 2pi would seem off, but remember, light goes from red (low wavelength) to blue (high wavelength). The results were fairly accurate apart from the reds looking too purple, but that’s it really it on the inaccurate side.
The modular pieces were a bit of a doozy, but ultimately wound up being large pieces of simple geo. The really annoying part was making sure all of the cylinders cut through the holes of the octagonal rings correctly. Maya started glitching out, deleting random faces until I deleted history, where it started work right.
I’m not very talented when it comes to giving characters personable appearances, but I tried! Not used to using photoshop for online drawing, either, so that was a fun experience! I most certainly will have revise that drawing, but for now I have bigger fish to fry for this game!