top of page
gato_dreamland.gif
shmup_bg_scaled.png

Gato's Dreamland is a 2d SHMUP developed in a month using Stencyl where you need to clear the wave of nightmares and protect your dreamland with the power of cuteness which allows you charm nearby enemies, using them as temporary weapons or shields.
Gato's Dreamland was originally made in a month for my game technology class assignment but i plan on continuing it due to it having a really interesting charming mechanic

Code Highlights

Boss Attack Patterns

Bullet Fan

I wanted to make a challenging bullet pattern that would have a lot of projectiles and could challenge the player's positioning after the hand attack.

​

Implementation
The attack works by creating 100 bullets via a for loop which then have their direction altered based on a sine wave which oscillates between 0 - 360. The bullets themselves start out slow but begin to accelerate over time to make it more possible to dodge

Code Snippet

image.png

Results

bullet_fan.gif

Hand Attack

My idea for this attack was to have a clearly telegraped attack that would force the player into thinking about their positioning and punish/reward them accordingly by having the arms act as barriers that persist between other attacks

 

​Implementation

Before the attack happens, indicators are spawned at random locations offscreen and is then pointed at the players using Atan functions. After a certain time has passed, the hands will appear and go through the screen while the arm actor which stays at the original position stretches to positions of the hands and remain as barriers

​

Code Snippet

​​

​

​

​

​

​

​Challenges

How do i make the arm stretch properly?

I had alot of trouble in making the arms look as if they were connected to the hand. This proved to be quite difficult due to the fact that stencyl did not have any 9-slice feature and it's built in stretch function only worked in percentages rather than pixels. Stretching it accurately is also harder because the arms were rotated at an angle.


Solution!
To deal with the percentage stretching, I calculated the stretch length by getting the distance between the origin of the arm and the hand, then i would scale the arm by the average of initial arm's width and length multiplied by the calculated stretch length. 

image
image

Results

arm_attack.gif

Charming

The charm mechanic is the main hook of my game.
I wanted to make the player focus on something else besides just holding down the shoot button while dodging bullets. The Charm mechanic would allow you to recruit enemies by going near them and building up a meter, this would make it so you would have to think about your positioning and what you were shooting since you wouldnt want to shoot a valuable enemy that you could possibly charm

​

​
 

Charm Buildup
I liked the graze feature in certain games like Deltarune or Touhou where by you would be rewarded for taking risks and going near attacks so i wanted to make it so you would have to be near or graze the enemy for a certain amount of time to charm them for the added risk/reward factor

​

Implementation

The charm mechanic was implemented through a charm aura actor with a circular hitbox which when in contact with an enemy would increase their charm value until a certain point where they would become charmed

​

Code Snippet

​

​

​

​

​

 

Charmed Enemy Orbit​

I wanted to code it so that when enemies are charmed, they begin to orbit around you like a shield so that they could provide extra protection and also be killed more easily

​

Implementation

Before the orbit happens, the distance and direction between the two actors are calculated using their center points. The actor moves in a circular path around the origin actor by adjusting its direction with an offset. The new position is then updated using trigonometric functions to calculate the X and Y coordinates. If the distance between the actors changes significantly, the direction and distance are recalculated to maintain smooth orbiting. This creates a dynamic, circular motion that keeps the actor consistently orbiting around the target actor.

image
image
image
charming_gif.gif

Results

Tutorial Virtual Controller

I wanted to implement a real time tutorial section instead of making a page with all the controls in it which required me to make a virtual controller for my player that would play out the tutorial 

​​

Implementation

I created a series of functions to manage the setup and execution of tutorial actions for an actor in a game. The add_sequence function stores actions like movement, shooting, and timing into lists that track each step of the tutorial. These actions are defined by parameters such as duration, movement direction, and shooting status. The setup custom event fills these lists with a sequence of predefined actions, outlining the steps the actor will follow. Then, the action custom event triggers these actions in order, with each action occurring after a specified delay. Once all actions are completed, additional tutorial enemies are spawned at set intervals. These sequences direct the player’s behavior through the tutorial like a virtual controller, guiding them through movement, shooting, and charming enemies.

​​​​

add sequence function
setup custom code
setup custom code
action custom code

Results

tutorial_shit.gif
bottom of page