A downloadable game

Buy Now$19.99 USD or more

Tile Based Moving Platform Engine for Gamemaker

This is a tile based platform engine which uses efficient tiles for instance collisions, as well as incorporating those efficiencies into horizontal and vertical tile layer moving platforms.

Some of the features of the engine :

  • Tile Based Collisions : Tiles offer the fastest collision system in Gamemaker
  • Moving Platforms : My system uses fast Tile Based Collisions to move multiple platforms either Horizontal, Vertical or Circular. Settings for wait time, speed, distance and slow down.
  • One Way Platforms : Allows the player to drop through tiles, or jump up through them.
  • Player State Machine : A system which makes building your player quick and easy, as it allows faster bug resolution. Includes Combo Attacks (light and heavy), Double Jump, Block, Crouch, Crouch Block, Death and Knockback abilities.
  • Juice : Game enhancing features like player dust for jumping, landing and walking. Squashing and stretching of the player when jumping and landing, giving the game a better feel. Screenshake for hitting enemies, or making an impact.
  • Enemy Setup : Enemy object with weapon swing and pummel ground attack pattern, which support player block and knockback.
  • Item Collection : Enemies drop gems, which animate in the air before flying to the player for collection. This is then shown in the GUI.
  • Dual Controller and Keyboard support : Both a controller and keyboard work as input, at the same time.
  • Simple lighting system : A light object can be used to give anything a nice radiant glow. Any colour can also be set.
  • Smooth moving Camera system : Can be used to follow any object, and offers various panning speeds.
  • Room transition : Allows a fade to black transition between rooms.
  • Room Spawning System : Multiple room spawning positions depending on room entrance.
  • Lives and Damage System : Entities can take multiple damage before being destroyed. Normal and Critical Damage is shown when enemies are hit, and a HP GUI element is included.
  • Game End : After all lives are lost, game returns to the Main Menu.
  • Initialisation Room : Allows for easy persistent object management.
  • Template Parent Room : Allows quick reproduction of room structures for faster level creation.
  • Corner Correction : When jumping vertically, allows the player to be slightly corrected if they hit the corner when moving upwards.
  • Fully Tiled Sample Room : A completed room to demonstrate how to build your rooms correctly, including multiple moving platform examples.
  • Rain System : Rain and lightning, including sound, can now randomly occur.
  • Sound effects : Basic 8-bit sound effects are included.
  • YYC Compatible : Compiling in YYC allows for the most efficient and fastest build.
  • Documented Code : All lines are commented as to their purpose, and the entire project has a complete write up to make understanding the engine as easy as possible.

Engine Updates

Change log 1.0.36 - 28 Nov 24:

  • Corner Correction : Change to the corner correction section of the collision function to ensure the vertical jump height is not affected when the corner correction is applied as per https://itch.io/post/11463932

Change log 1.0.35 - 6 July 24:

  • Room layer changes : Layer inheritence for rm_00 and rm_01 fixed, and the Moving group removed
  • Minor changes : Updated the rm_template_par creation code to run an "init_moving_platforms" function instead of code directly, making editing easier
  • Minor changes : More precise instructions given for how to use the engine. This is shown in the read_me under How do I use this?

Change log 1.0.33 - 3 July 24:

  • Minimum mask size increased :  I've added code to all the relevant collision functions to now check the middle of the mask as well as the corners, which means you can have masks up to 2 times the tile size (TS).  Check the read_me to see which functions were updated.

Change log 1.0.32 - 7 May 24:

  • Player Enemy Collision updated : Updated the player <> enemy collision code.  It's now been moved to the o_enemy_par object and has been fixed.  It's commented out, but you can uncomment it to enable it.
  • Function process_enemy_attack updated : Ensure the owner_id variable exists before attempting to access it

Change log 1.0.31 - 20 Apr 24:

  • Corner correction : Change to the collision function to allow for jumping into solid corners to correct the player x position, allowing them to not get stuck on corners

Change log 1.0.30 - 27 May 22 :

  • Bbox Changes : Gamemaker 2022.x changed bbox values from integers to reals, and this changed a few things for tile collisions. Upon entering a  room, it caused the player to sometimes fall 1 pixel and then recover the next step. I've added a check to the player room start.  This path fixes that by simulating the calc_movement and collision scripts for a few steps at room start.
  • Position Changes : Room entry positions updated vertically by -1 pixel to cater for the bbox changes.
  • HD UI Update : Updated the s_hp_bar file to show you can use HD images for the players face in the UI.

Change log 1.0.29 - 21 Aug 2021 :

  • Enemy Collisions : If you wanted to run into enemies and take damage, uncommenting the player <> enemy_parent collision now works correctly.   Uncomment this line in the collision event to enable it.  Also process_enemy_attack has been restructured, so refer to the readme.
  • Enemy Masks : Enemy idle collision mask adjusted, and used as the default mask, to now make collisions with the player fairer when player <> enemy collisions are enabled.

Change log 1.0.27 19 Oct 2020 :

  • Object Persistence : objects destroyed in the room will not be respawned when returning.  See read_me for more details.
  • GMS2.3 compatibility : Current bugs in GM2.3 related to the importing of rooms caused room order to not be imported, causing errors. This has been manually fixed by recreating the rooms again. We're still waiting on a bug fix to GMS2 though. UPDATE Aug 21: Current versions of Gamemaker should not have this problem now.

Change log 1.0.25 16 Oct 2020 :

  • EULA : Added EULA outlining your rights in relation to the code use (EULA is at the bottom of this file)
  • Death Tiles : These now deal damage and knockback the entity, instead of instant death.
  • New script : damage_entity() used to deal damage to any entity.  Damage is unblockable.  e.g. used for dealing damage to all entities touching death tiles.

Change log 1.0.24 14 Oct 2020 :

  • Circular platforms : Multiple configurations are possible, allowing for full circle, half, quarter, or any custom angles. Also includes slowdown and wait on start and end. Pivot and support structure is also drawn.
  • Enemy attacks : Enemy now can attack player. Full swing and wave attack pattern included.
  • Gem Collection : Enemies drop gems, which animate in the air before flying to the player for collection.  This is then shown in the GUI.
  • Very fast platform movement : Room 2 demonstrates new code changes to the vertical platforms allowing the player to move on even faster platforms.
  • Wait options for platforms : Can be set to pause the platform at start/end points
  • Better damage system : Now shows damage numbers and enemy hp bars
  • Rain system : Random showers can occur, including lightning and sound.
  • Bounce pads : Hay bales serve as bounce pads
  • Many small bug fixes

Try the Windows Demo here.

Note : Tile collisions are reliant on the size of the tiles and the size of the masks.  This system is setup for a maximum of 32 x 32 tiles and sprites.  Larger sizes will require changes to the code in order to work correctly.

This package incorporates the use of graphics, which are free assets from external sources. The graphics are included, but these are free assets and are available below if needed :

* Tileset - https://www.openpixelproject.com
* Main Character - https://itch.io/queue/c/686097/sano-214s-collection?game_id=444209
* Background - https://opengameart.org/content/mountain-at-dusk-background

Lastly the graphics and player setup can easily be removed so you can use the collision and platform system as the basis for your own projects, and instructions are provided outlining how to achieve this.

Hope you can make a cool game using this asset.  All the best!

Peter Morgan aka Slyddar

End User License Agreement - http://m.uploadedit.com/busd/1602837828168.pdf

Updated 23 days ago
StatusReleased
Rating
Rated 5.0 out of 5 stars
(3 total ratings)
AuthorSlyddar
GenreEducational, Platformer
Made withGameMaker
Tags2D, engine, GameMaker, gms2, moving-platforms, tile-based

Purchase

Buy Now$19.99 USD or more

In order to download this game you must purchase it at or above the minimum price of $19.99 USD. You will get access to the following files:

Tile Based Moving Platforms Source 1.0.36.zip 2 MB

Development log

Comments

Log in with itch.io to leave a comment.

Hello Peter
There is a small problem with corner correcting. If you jump and hit the corner, jump shortens as it uses previous frame's vsp.
In Mario games, player just gets corrected around the corner and it doesn't shorten the jump height.
Do you have any idea how to get around that?
I tried to make _vsp_previous the same as jump_height, but then it is too high because we normally use gravity to slow down the vsp.

Hey joe,

I notice what you are referring to, and have now fixed it to ensure it works as you explained.  I've uploaded a new version with the changes, v1.0.36.  If you want to copy/paste the new code to your version, just look in the collision function and it's the code under the "corner correction" section, lines 129 - 160.

Hopefully it all works as expected, just let me know if there are any issues.

Cheers,

Peter

Wow, that was quick. Thank you very much. I wouldn't come up with a solution in a week :)
Works great but, there is a small bug, if we clip the corner jump is one pixel higher then if we don't clip the corner.

(3 edits)

You're welcome, thanks for pointing out the issue.

The single pixel is interesting.  Here is a vid from my testing.  The value is the y position the player reaches when we either jump normally or jump into a corner.  Both produce the same result of 498.  Have you changed the game resolution maybe?

I'm sorry, problem was with my modified collision code.
It works fine if I comment out this line:

if tilemap_get_at_pixel(global.map, bbox_left, bbox_top - 1) == VOID y -= 1;   

Perhaps I had the problem because I don't use decimals.
I modified the collision code so it works nice without decimals so I get smooth movement.

(1 edit)

Hi Slyddar, absolutely loving this project. I want to be able to take damage colliding with the enemies and I've uncommented the appropriate code, but I'm still passing through them. I've uploaded a screencap of what the code looks like. Any ideas how to fix this? Thanks.

Link to the bigger image on imgur

(+1)

I've had a look and that section was uncommented for so long, after I did some updates it made that line not applicable anymore.  So I've made some changes and have updated the project with the new version.  If you want to know what was changed, there's a dev log outlining the changes.

Let me know if you have any issues.

Cheers,

Excellent, it works perfectly now. Thanks Slyddar!

(+1)

Thank you for the update Mr. Morgan! :)

Hello again! I would like to know if it is possible to make the collision 16x16 instead of 32x32. As my tiles are 16x16, I have a certain limitation when creating the map. Thank you for your attention! Sorry for bothering

You should be able to just change the TS macro to 16 to use 16x16 tiles but you have to be aware of the limitations.  All objects colliding with the tileset will need to not have collision masks bigger than 16x16.  If you do have bigger masks, say a 24 x 24 for example, you can imagine if you have one tile and the instance trying to fall onto that tile, because we check for a collision on the 2 corners of the mask, it will simply slide over the top of the tile and not collide.  If you want bigger object masks you will need to add an additional collision check for the center of the mask horizontally and vertically using the same format as the ones I've used.

Hello! How are you? I'm looking at the code and I'm learning a lot with it, however, one thing I didn't understand was how to create a new room and how to configure it. In addition to, of course, the character's spawn, could you help me with that? Thank you very much in advance!

Hey!

I’m actually on holiday for this week so don’t have the code in front of me. I seem to recall there are some comments in the read me referring to creating more rooms, so maybe check that out.  I’ll be back on the weekend though, so will take a look and get back to you at that time.

Cheers,

Hey! Thanks for the answer. I was taking a look at the file explaining how each part of the code works, and, talking to a friend and analyzing it, I was able to understand how I can manipulate my spawn and how I can create a new room. It ended up taking me a while to understand, but I managed to do everything right. Thank you for your attention! Happy holidays (pardon my English, I'm using Google Translate).

Hi. Any chance we'll see support for bigger sprites soon? Cheers.

Well the notes do advise it is for 32 x 32, but in saying that, I have dabbled in adding code for 64 x 64 collision masks, but using 32 x 32 tiles.  It's still not something I'm completely happy with, as there are a couple of bugs to iron out.  If I can get them sorted I'll release it though.

(+1)

Here's an update on what I've been working on.  I have easily added 64 x 64 masks into the collision system, but the circular moving platforms are still not perfect with these larger masks.  I have other projects I need to complete right now, so need to put this update on hold, but I will come back to it in a few months when I have time.

Hey there, have you had any update on this? I would like to use 64 x 64 sprites with this and not really sure what exactly would need to be changed to make it work. If the only thing not working with it is the circular moving platforms I would be fine with not using those. Any help or pointers in the right direction would be appreciated!

Hey BenWath!

Actually I've just uploaded a new version which supports mask collisions which are 2 times the tile size, so by default this would be 64 pixels high/wide.  My testing shows that all moving platforms now work fine with this size mask, but let me know if you have any problems.
It's available in version 1.0.33.

Cheers,

Peter

It's great, except I've uncommented the code for simply running into the enemy, and I still run straight through them.

(1 edit)

Hi Steg,

I'm sorry for not replying sooner.  Itch doesn't seem to notify me of comments here, so I need to update my settings to fix that.

As for the bug you mentioned, I totally agree it did not work.  So I've  released an update with a restructured process_enemy_attack script, adding a source_id and owner_id argument, so it now can process collisions, as well as make sure entities face the correct direction more efficiently.  The enemy idle mask has also been adjusted, and set as the default, which makes it fairer for the player.

Hopefully it works as intended now.

Cheers,

Peter

Thanks! Will redownload and test it this weekend!

Is this working on GM 1.4 ?

Sorry, it is made in Gamemaker 2, and the setup of tiles are very different for GM1.4, so it will not work there.

can you add slope movement?

Heya!  At the moment I don't have a tiled slope method that is very different from what others have to offer, as it's not something I've worked on too much.  So for now I don't have any plans to add slopes to the engine.

Do you plan to update Udemy course and add moving platforms or other stuff  from this project?

(1 edit)

Hey Jaxas,

That course is almost 2 years old, and even though it's still completely relevant and useful to anyone making a game now, the weeks I would need to update the course with this content would be a massive undertaking.

This engine could be thought of as an extension of that course though, and the descriptions in the read me outline how everything works, so if you have knowledge of the Udemy course, you would be very well placed to understand the code in this.

So even though I keep the Tile Based course current, and have recently recorded new sections to ensure it is GMS2.3 compatible, I'm currently working on my next course, so do not have the time to add new content into that course.

Thanks for the question though.

I already purchased it, it is good but I think there are something miss as @edusword said. Moreover, I think you should add one more boss with more attacking or effecting like that will enrich type of enemies (because this asset now just has one type of enemy). I hope you will do that

The problem with adding too much is it essentially becomes a game on it's own.  The structure I have added allows others to learn from how I've designed and layed out various elements, and then build upon it.

The one enemy shows how to set up enemies, so it can be replicated and reproduced for others.  If I add too many enemies, your game is not unique, as everyone ends up with the same.  I really wanted the engine to be a base demonstrating best practices, allowing you to extend with the knowledge from the examples in the project.

In saying that, I'll look at adding a few enemies that I had used in my Tile Based Platformer Udemy Course, and I guess people can just not use them if they don't want to.

Thanks for the feedback though, and also thank you for purchasing.

Great engine! Something I miss (suggestions): - Diagonal terrains: slopes (up and down)
- Diagonal stairs (as Castlevania)
- Vertical ladder or rope movement (up and down)
- Horizontal ladder or rope movement (hang from it)
- Moving vines (jump to and from them)
All these actions will be amazing!!
Thank you very much!

Thanks for the kind words.  They all sound like great additions.  While I can't promise anything, I'll add them to the suggestions list.

Cheers,