TECHNICAL DESIGN

I designed and scripted enemy behavior, game systems, HUD elements, and tutorial UI using GameMaker Studio 2's proprietary coding language, GML, which is similar to JavaScript.

PROTOTYPING AND METRICS

After we had laid the groundwork for the scope of our vertical slice, I started working in GameMaker Studio 2 to produce functional prototypes of the mechanics we had concepted. Our first builds utilized basic temporary sprites on a simple grid to help us determine the scale of the play area and establish precise metrics for our game objects.

Our early prototypes were also useful for sizing UI and HUD elements such as the trap and room purchasing buttons. Both of these elements needed to be easily accessible, as we wanted players to be able to make impromptu adjustments to their gauntlet of traps during the heat of combat.


At the same time, these elements needed to be non-intrusive, so as not to risk players accidentally clicking on them when trying to activate traps.

The template sprite we used for the base floor of the tower

After solidifying our game’s metrics, I began scripting our trap placement/activation system, enemy behaviors, and game system managers – progressively replacing template assets as the lead artist created sprites based on our specifications.


To supplement live testing of features we implemented, I created a simple debug console that allowed us to spawn enemies, manipulate variables, and toggle HUD elements in real-time (shown here).

ENEMY DEVELOPMENT

I owned the development process for enemy movement behavior, and collaborated with my programming partner to integrate my scripts with GameMaker’s object parenting framework.


All creeps in the game share a generic parent object that handles basic functions like spawning, movement, room transitions, and dying to traps. This makes it far easier to reference enemies broadly in the combo system and in game managers – such as when we need to adjust y-positioning for all enemies after a floor is added to the tower.

Each enemy type’s unique functions are carried out via a state machine that runs in the generic object’s step event. The spawning manager object passes a behavior variable to each enemy instance it creates based on their respective type.


While most enemies default to a basic walking behavior, certain types like the Climber progress through several states before transitioning to standard movement behavior (as shown here).


Others, like the Juker, temporarily transition out of standard movement behavior based on certain triggers – in this case, coming into contact with a dodge-able trap. Specific variables such as movement speed are randomized in the spawn manager to add further variety to each enemy.

I made sure to include design elements to distinguish each enemy type beyond just their visual appearance. For example, Climbers are scripted to emit a sharp clink sound when they successfully latch onto the window they’re targeting. This subtle audio cue helps inform the player of the Climber’s presence, even if they are off-screen.

TUTORIAL SYSTEM

As part of our vertical slice demo, I wrote and developed a tutorial level that introduces players to the basic mechanics of the game. To this end, I created a dedicated level manager that breaks the tutorial into small, interactive segments the player must complete.


This necessitated a system for manually moving the viewport camera to points of interest, as well as a progressive tooltip UI that concisely explained the game’s objectives, all of which I was able to implement in time for the launch of our demo on itch.io.