Systems
- Design of level data with accompanying XML parser. I used TinyXML2 to build a hierarchical representation of the XML file, which I then traverse twice; the first pass does a count of all objects and allocates memory, the second pass actually instantiates all of the objects comprising the level.
- Unified input interface for keyboard, mouse, Xbox 360 pad and DualShock4 (including rumble, the lightbar and touchpad). Detection of and response to input device change, e.g. from keyboard to Xbox 360 pad.
- Screen-relative text rendering using a loaded font.
- Generic mesh builder for constructing a mesh out of component parts (lines, curves, text, rectangles, triangles and circle sectors).
- File I/O interface for PC and PS4.
- Particle FX editor and emitter rendering, with support for gravity wells.
- Player collision detection and response, including support for one-way platforms.
- Laser raycasting to find beam end point, including surface normal for orienting particle effects and support for passing through one-way platforms.
- Resolution-independent menu systems used for rendering and interacting with the main menu, pause screen, level end screen (with stats) and credits screen. Supports mouse, keyboard, Xbox 360 pad and DualShock4 navigation.
- General gameplay programming such as moving platforms tied to the music; handling screen transitions between non-adjacent rooms (non-Euclidean level spaces); collecting and enabling the panel-toggling abilities; and calculating gravity strength based on the song BPM and player jump speed, such that the period of the player's jump is in time with the music.
Visuals
- The original dynamic background consisting of large drifting shapes.
- A lot of the mesh designs for objects, including establishing the visual language of solid lines vs. dotted lines.
- Various particle effects such as dying and respawning; the end of level explosions; the collectable scattering on pickup; and the drifting UI shapes over certain objects to show that they're tied to the player's abilities.
- The silly god rays when collecting the first ability on level 1 and the way collected abilities slide into place on the UI.
- The colour-cycling of the main menu in time with the music.
- The colour-cycling of the level end objects in time with the music.
- The rhythmic bobbing of collectables and ability pickups.
- The VHS-style fast-forwarding effect (we have a fast-forwarding mechanic but it didn't end up fitting with any of the final levels).
Design
- After our artists got scholarships and left there was no way that we could continue our previous project, so I suggested we make a musical neon platformer ("140 meets Geometry Wars").
- Later on I came up with the idea of the player being able to bring elements of the level with them and turn them on and off at will.
- I helped with general level design and also designed all of Level 3 and the Credits.
- I designed the font as part of my generic mesh builder. It includes the following characters: a-z A-Z 0-9 :?!./-+←↑→↓
Build Management
- I handled most of the things related to the PS4 build such as platform-specific code (DualShock4 input, building and loading data from an archive file); packaging the build up and installing it on demo stations; and PS4 OS stuff like the name of the program and the images to show on the dashboard and while loading.
- I also did PC-specific things like setting the icon for the executable and making mouse navigation work correctly when switching in and out of fullscreen mode.
Admin
- One of the artists who left had been the Team Lead, a role I took over in their stead.
- I organized progress meetings and handled scheduling to make sure everyone was working on what they needed to be.
- I wrote most of the project documentation and did most of the progress presentations both to the rest of the class and to our clients.
- I handled our Dare To Be Digital application and directed our submission video. I was also responsible for recruiting additional members for our Dare team.
- I created our itch.io page.