top of page

GRAPPLEVANIA

Game Summary

Youkai have started running rampant through the nearby villages and it's up to you to rid your village of the source of evil originating from the temple. On your way, you'll be cutting down Onis and Tengus blocking your passage, traversing the environment with your grappling hook and blowing up walls using some highly explosive tools.

ROLE

Gameplay & Generalist programmer

Project Description

Grapplevania was the first group game-project I participated in at PlaygroundSquad. Over the duration of 5 weeks, we made this simple Hack & Slash game where you kill youkai while traversing the environment using a bomb and grapplehook. The engine used was PSQ's in-house Tengine and the team working on the game consisted of 3 programmers, 1 designer and 4 artists.

​

YEAR

2021

GENRE

2D Action, Hack & Slash

PLATFORM

PC

ENGINE & LANGUAGE

TenGine, C++

TECH TAGS

Combat, UI, animations, sound

GAMEPLAY

Combat

Making characters utilize hitboxes for their attacks is one of the first things I worked on. Since colliders don't exist as components in the TenGine framework, there weren't any signals or events to use for sending information about a target or attacker. Because of the time limit, I went for a simple approach of looping through all of the valid targets and did an intersection test with their hurtbox to see if it would connect. If it did, the attacker called TakeDamage() on the target. 

AttackAndTakeDamage.gif

Player vs Ogre

AABBs were used for both hitboxes and hurtboxes, and in order to check if the hitbox from an attack collied with the hurtbox of a character, the character's model's inverted world-matrix was used, along with some value flips in order to adjust for the rotation. This worked quite well, and to gain some performance because we were lacking some from other places, I gated the attacks from checking for targets every frame, instead making the check only run once the adjustable cooldown had expired.

OgreAttackCode.PNG

Code used for attacking

Bomb.gif

Player blowing up a wall with the bomb

The Bomb

A bomb is at the player's disposal, and it's explosive power is enough to break walls that block the player's progress. The explosion also damages enemies and can be used to knock them away.

SYSTEMS & OTHER

PlayerHealthUI.PNG
PlayerHealthUI_NonCode.PNG

Health UI

Updating the UI for the player's health was done as seen on the left. It accounts for the player being able to lose both full and half hearts. A simpler solution would have been to represent every hit as half a heart (2hp = a full heart), but people didn't agree with that, so I made this instead.

Since there is no physics engine associated with the Tengine framework and none of us on the team had used one before without the help of an engine wrapper, we decided to just apply our own simple physics like gravity and velocity. As the one with most experience with inheritance at the time, I was tasked with setting up the classes for that.

Gravity & velocity

AttackAndTakeDamage.gif

(Shameless reuse of another gif) Note the player being knocked back, and the Ogre being knocked up and pulled down by gravity

Animations

In Grapplevania, characters all have three interpolators that make animation blending smooth: Current, Next and Blend. Current interpolates between keyframes in the currently playing animation, Next takes care of interpolation for any animation that the character wants to start playing and finally Blend is a mix between the two that is used while transitioning from Current to Next.

​

The player also has a separate interpolator that targets the upper body and sickle, which can overwrite the other interpolators. This allows the player to move and attack at the same time.

Animations.gif

Animation blending

Sounds.png

Sound

Implemented on the literal last day before the deadline, this wasn't originally my task. With everything else finished, we sat down and tried and figure out what was preventing FMOD from working correctly. After asking around the other groups and taking advice from the teachers, we found that the wrong files for FMOD had been installed, and that's why it wouldn't work. It felt super silly, but after finding that out, I just put in the code to play the sounds at the correct moments and went home.

bottom of page