Source code for my Playdate game "Escape from Complex 32, a vertically scrolling endless action game where you use the crank to control a giant laser to shoot yourself up and dodge obstacles. You can get the game on Itch IO.
![](https://private-user-images.githubusercontent.com/2004687/399837457-30b803e0-a680-4aa5-b7d4-38edb592a7ac.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTI0NDAsIm5iZiI6MTczOTM1MjE0MCwicGF0aCI6Ii8yMDA0Njg3LzM5OTgzNzQ1Ny0zMGI4MDNlMC1hNjgwLTRhYTUtYjdkNC0zOGVkYjU5MmE3YWMucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMDkyMjIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NTUzNWYwYzc1YTc4ZTUzNGY0YmU5NWQxNjM2NTk3ZWMzMjVhM2RmYzQ0YTQ4OGI5MTA2OWI2MWE3YzRiYWI0MiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.X6Iu6KPLTdOiEgqvY8Z0dARpCP8Rcj-wDAwJBGQtb-o)
![](https://private-user-images.githubusercontent.com/2004687/399837213-b2f3e025-0d3a-4957-a9b4-9f2304fe32d3.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTI0NDAsIm5iZiI6MTczOTM1MjE0MCwicGF0aCI6Ii8yMDA0Njg3LzM5OTgzNzIxMy1iMmYzZTAyNS0wZDNhLTQ5NTctYTliNC05ZjIzMDRmZTMyZDMuZ2lmP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMDkyMjIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Y2RjOGQ2ODZhNWM2YmEyYWIxN2NmMWJiYmZjYzdmMGE3NmY3ZGY5MDBhMTViMTM4YWI1NmIxZTNlM2YyYWM3YyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.oMf6OufrHGxr-sW_FKLDyMgE18f5s__KdIvE5hB0Wa0)
![](https://private-user-images.githubusercontent.com/2004687/399837222-be7ee96e-ee3d-401e-a75c-7c936aafff1e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTI0NDAsIm5iZiI6MTczOTM1MjE0MCwicGF0aCI6Ii8yMDA0Njg3LzM5OTgzNzIyMi1iZTdlZTk2ZS1lZTNkLTQwMWUtYTc1Yy03YzkzNmFhZmZmMWUuZ2lmP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMDkyMjIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MmYwYzIxNzFlNWI3NTkzYjM1MDZiYTA0MTc0ZTQ2ZTk1N2RhZGNlMTU5ZDQyZjY5OTEzNDJiNTViZjIyZmZlYiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.v-0sfgpiLmdqGE4F5LR6DCO14bvinjOP_aSyUVq71w4)
![](https://private-user-images.githubusercontent.com/2004687/399837227-e03414e6-a338-41b5-b33c-bb5a68d6569e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTI0NDAsIm5iZiI6MTczOTM1MjE0MCwicGF0aCI6Ii8yMDA0Njg3LzM5OTgzNzIyNy1lMDM0MTRlNi1hMzM4LTQxYjUtYjMzYy1iYjVhNjhkNjU2OWUuZ2lmP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMDkyMjIwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZmM3MWEzOWRhOTg4ZTU2ZTc1OWI5MmEwOTEyYWFmMDUzZjUyMDc3OGI4OTBmOWMyYzE2YmI1OTYwYjNkYjIxNCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.hOKvWCU6idy0mq_3IAUQ_6LS55j5KpQTsFsdL8IWCs8)
scripts/
game/
background/
gameBackground.lua
- Manages the infinitely scrolling walls and it's collisions
obstacles/
floorSpikes.lua
- The spikes that catch the player if they fall too far downgate.lua
- The obstacle for the platform with the gapmovingSpike.lua
- The moving spike obstacle (extends spike.lua)obstacle.lua
- The parent obstacle class which all obstacles extend fromobstacleRect.lua
- An invisible helper obstacle I used for gate.luaobstacleSpawner.lua
- Manages the spawning of obstacles as the player moves upspike.lua
- The stationary spike obstacle
player/
laserBeam.lua
- The beam that shoots out from the player (it's purely cosmetic)laserGun.lua
- The rotating laser gunlaserTimer.lua
- The currently unused timer to shoot the laserplayer.lua
- The player (manages collisions, gravity, input, and more)
ui/
heightDialog.lua
- UI element that displays the height and max height in resultsDisplay.luaheightDisplay.lua
- UI element that appears while playing that displays your current heightresultsDisplay.lua
- UI element that handles displaying the result and fading the background
gameScene.lua
- Used by sceneManager.lua and loads everything related to the game scene
title/
titleScene.lua
- Used by sceneManager.lua and loads everything related to the title scene
globals.lua
- A helper file that contains functions/variables used across the gamesceneManager.lua
- Class that handles scene transitions
All code is licensed under the terms of the MIT license.