For my last game Multi I implemented a system which allowed for my game character to walk on and jump from walls based on collision handling from an article in the SoulHow Assistance Guides. I thought I’d share that Wall Walking System with you.
You have familiarity with writing code in Game Maker.
You have a basic understanding of writing simple physics code in Game Maker.
Your environments gravity pull objects downwards.
That you have handled cases where your character can move on horizontal surfaces
The following Wall Walking System allows a character to walk in a variety of different situations that I’ll illustrate and refer to using the following diagram.
On completing this short guide your should have a better idea on how to have your character walk in the following cases:
Green Case – Left, Right on Horizontal Surfaces
Blue Case – Up and Down Completely Vertical Left Walls
Red Case – Up and Down Completely Vertical Right Walls
Purple Case – Left and Right on Vertical Ceiling Walls
In addition your character will also be able to jump up, down, right and left in the Green, Purple, Blue, and RedCases respectively.
A caveat of this Wall Walking System is that it will not work in the corner cases highlighted by the orange lines due to not specifically handling the effect of the assumed environments gravity. Now on to the system!
Have you played a game with no background music/sounds? In most cases it makes the game feel quite dead. So in developing my game Multi I needed a basic looping background music player of sorts which filled the following requirements:
Tracks needed to be played one after another starting from the first track to some n number of tracks.
Through this iteration of tracks, tracks must only be played one time.
On reaching the end of the final track the first track would again be played creating an infinite loop.
For clarity purposes heres a diagram:
Following the blue arrows from Track 1, tracks are listed in play order from left to right then restarting from the last to the first. Put simply I wanted to have a looping background music player. With this in mind, I began the project with some research and found this post on Steam Community.
The basic summary of what’s suggested in the above link is:
Combining all your tracks into one long track with a program like Audacity, then play that and loop it.
Running a queue of songs using Game Makers alarms, then looping it.
Using simple logic based checks, play one song after another then repeat to form a loop.
All the above are valid methods which have advantages and disadvantages, but for the foundation of this music player I went with option three.
Building the Music Player
To start create a persistent object. Name is whatever you want, it doesn’t need a sprite either, but it will be need to be placed in the room you want your music to start in. If this object is not persistent and the music player gets reinitialized at any point, it will lose its place and start from (track 1) the beginning again. For a looping music player this is not what we want.
Now give the persistent object a create event, and add this code:
// Start sound_track_1
// track_pointer initialization
OK the first line makes sense, it starts the loop, but what’s with that counter? Good question.
When searching for a teleport system in Game Maker, I often find the following suggestion. When object A collides with object B at position (x,y) change object A’s position to (x_new,y_new). This works perfectly if you require a fixed position teleport system.
Though, what if you wanted (given any character position) to be able to teleport to a location that is not pre-defined. A dynamic teleport. What do you do? I asked myself this, and here’s a simple solution that I used for my puzzle platformer Multi.
First lets define a few terms and variables:
Ideal Teleport – A teleport which results in the character being where you most want in a regular scenario.
Teleport – A boolean variable that determines whether the character can teleport or not. It is reset with the use of an alarm.
Teledist – A fixed integer that determines the position change of the ideal teleport. I used the value 96 pixels.
Par_solid – The fundamental solid object of my game (I did not use Game Makers solid variable, this article explain why.
It also helps to know the basics of Game Maker Language’s (GML), and how one of its functions place_meeting works. If not I suggest you check out this great post in the Game Maker forums by Torigara.