DESCRIPTION: This is a base project which can be used to make almost any 2D Scrolling Platformer game. Its current features include: - A camera that can follow the player as well as lock onto specific locations - The ability to zoom in and out without messing up player collision or camera boundaries - A list-based collision system that allows for offscreen collisions (which "touching" blocks can't handle) - Built-in screen shake functionality - Semi-solid platforms CONTROLS: Arrow Keys - Move Z Key - Jump The current level has no objective. It is just meant to show off the engine and its camera features ** NEW FEATURES ** All levels in this engine are comprised of numerous rectangular costumes that are cloned and placed side-by-side. Previously, the entire level was generated at once (which limited your level size significantly due to the 300 clone max). Now however, the engine is optimized and only clones the screens that are in view, meaning adding particles, hazards, enemies, parallax, etc. using clones is now very possible and won't restrict your level size HOW TO USE: The engine is quite complicated. I'll do my best to list the main details of it here 1) Level costumes should be drawn and named in the same way as those in @griffpatch's Classic Platformer tutorial (check out his videos if you don't know what this means) If you follow this convention, then the entire level will auto-generate at the start of the project, assuming the variable "--Stage Name" is set to the constant name (ex. "Scene") you used in your level costumes Level costumes in the "Level" sprite are for decoration only. Level costumes in the "Collision" sprite are invisible and are the things the player will actually collide with NOTE: Whenever you make a change to any costume in the "Collision" sprite, you must re-generate the collision lists. To do so, stop the project and run the "Create Collision Point Lists" function until it is done 2) The variable "--Zoom Target" determines the desired zoom level for the camera (If it is set to 0.5, the camera will zoom out x2. If it is set to 2, the camera will zoom in x2) The variable "--ZOOM SMOOTHNESS" determines how fast the camera will change to the desired zoom level (If it is set to 1, the change will be instant. If it is set to 0.1, the change will be very gradual) 3) The variable "--Camera Locked" can be set to 0 or 1. If it is set to 0, the camera is not locked and will follow the player. If it is set to 1, the camera will lock onto the position specified by the variables "--Camera Target X" and "--Camera Target Y" The variable "--CAMERA SMOOTHNESS" determines how fast the camera will follow the player/move to its target position (follows same logic as zoom) 4)The variable "--Screen Shake Frames" can be set to a positive number, and that will tell the engine for many many frames to shake the screen The variable "--Screen Shake Magnitude" determines the maximum number of pixels that the screen can shake (along each axis) from its original position 5) You will notice the player has a hitbox costume, but I mentioned that no "touching" blocks are used to detect collisions. This costumes just serves as a tool to determine your "HITBOX HEIGHT" and "HITBOX WIDTH" variables (create the costume, look at the costume's dimension, such as 32 x 76, and use those as your width and height) 6) The entire engine is run off of a single broadcast-based game loop (great explanation of what that means: ) The broadcast "PLAYER CONTROLS TICK" is used to signal the player to do all of their movement logic The broadcast "ANIMATION TICK" is used to signal to all entities that they should set their costumes based on their animation logic 7) When using functions to set the camera boundaries, the numbers you pass in mean the following: For -X, the number signifies which screen's left edge should be the left camera border (0 is the furthest left screen) For -Y, the number signifies which screen's bottom edge should be the bottom camera border (0 is the lowest screen) For +X, the number signifies which screen's right edge should be the right camera border For +Y, the number signifies which screen's top edge should be the top camera border 8) To make a portion of collision a semi-solid, color it red in the "Collision" sprite (the collision scanning code now uses color detection, so use the EXACT same colors as I did! Things will get messed up otherwise!) There are probably many more things I forgot to mention, so feel free to ask any questions in the comments. I will do my best to help you understand! PATCH NOTES: 7/26/25 - Added RLE to compress long collision lists 5/24/25 - Fixed collision scanning to support multiple stages (sorry about that!) 1/5/26 - Added semi-solids platforms TAGS: