{"id":15142355,"url":"https://github.com/schraf/ld47","last_synced_at":"2026-01-20T14:33:27.576Z","repository":{"id":231454098,"uuid":"300745544","full_name":"schraf/LD47","owner":"schraf","description":"Ludum Dare 47 Compo Entry","archived":false,"fork":false,"pushed_at":"2020-10-04T17:11:53.000Z","size":25271,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-06T15:18:39.989Z","etag":null,"topics":["haxe","ld47","ludumdare"],"latest_commit_sha":null,"homepage":"https://schraf.github.io/LD47/","language":"Haxe","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schraf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-02T22:01:46.000Z","updated_at":"2020-11-03T23:22:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"f95ed7b8-41b1-4fe3-83d1-e6f04225717e","html_url":"https://github.com/schraf/LD47","commit_stats":null,"previous_names":["schraf/ld47"],"tags_count":1,"template":false,"template_full_name":"deepnight/gameBase","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schraf%2FLD47","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schraf%2FLD47/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schraf%2FLD47/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schraf%2FLD47/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schraf","download_url":"https://codeload.github.com/schraf/LD47/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247500464,"owners_count":20948881,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["haxe","ld47","ludumdare"],"created_at":"2024-09-26T09:40:49.090Z","updated_at":"2026-01-20T14:33:27.549Z","avatar_url":"https://github.com/schraf.png","language":"Haxe","readme":"# Loop Runners\n[\u003cimg align=\"right\" width=\"100\" style=\"image-rendering: pixelated;\" src=\"art/play.png\"\u003e](web/index.html)\n\nThis is my entry for the [Ludum Dare 47](https://ldjam.com/events/ludum-dare/47) (LD47) Compo challenge. The theme for the event was *Stuck in a Loop*. The game I created is called Loop Runners which takes inspiration from the game of [Roller Derby](https://en.wikipedia.org/wiki/Roller_derby).\n\nIn Loop Runners there are two teams which consist of both *Jammers* and *Blockers*. Each team has a single *Jammer* player who is the only team member who can score points. Teams also consist of four *Blockers* which try to prevent the other team's *Jammers* from scoring points. You play as the *Jammer* on the purple team.\n\nIn the game of Roller Derby, they play in periods of 30 minutes. However since the theme of LD47 is *Stuck in a Loop*, I decided to have there be only a single period and it will never end. I denoted this by adding an infinity symbol in the middle of the scoreboard.\n\nDuring the game all players move counter-clockwise around a looping track. Everytime a *Jammer* passes an *Blocker* from the opposing team, they score a single point.\n\n## Jammers\nIn Roller Derby the *Jammers* wear a gold star on their helmets to differentiate themselves from *Blockers*. For Loop Runners I decided to pay homage to his by adding a large star to the *Jammer* sprites.\n\n\u003cimg src=\"art/jammerA.idle0.png\" style=\"image-rendering: pixelated;\" height=\"60px\"\u003e\n\u003cimg src=\"art/jammerB.idle0.png\" style=\"image-rendering: pixelated;\" height=\"60px\"\u003e\n\n## Blockers\nThe blockers will try to stay in front of an approaching *Jammer* of the other team and shove them backwards when they get too close.\n\n\u003cimg src=\"art/blockerA.idle0.png\" style=\"image-rendering: pixelated;\" height=\"60px\"\u003e\n\u003cimg src=\"art/blockerB.idle0.png\" style=\"image-rendering: pixelated;\" height=\"60px\"\u003e\n\n## Items\nTo add some spice to the gameplay, I added in item spawning at random-ish locations on the track. A randomly selected item will spawn every 13-ish seconds. Here is a list of the items that are included in Loop Runners:\n\n* **Speed Boost** (\u003cimg src=\"art/itemBoot.png\" style=\"image-rendering: pixelated;\" height=\"16px\"\u003e) - Gives the *Jammer* a quick boost of speed.\n* **Freeze** (\u003cimg src=\"art/itemFreeze.png\" style=\"image-rendering: pixelated;\" height=\"16px\"\u003e) - Freezes all other players for a brief period of time.\n* **Invisibility** (\u003cimg src=\"art/itemInvisible.png\" style=\"image-rendering: pixelated;\" height=\"16px\"\u003e) - Makes you invisible to the other team's *Blockers* for a short period of time.\n* **Shuffle** (\u003cimg src=\"art/itemShuffle.png\" style=\"image-rendering: pixelated;\" height=\"16px\"\u003e) - Randomly shuffles around the locations of all players.\n* **Teleportation** (\u003cimg src=\"art/itemTeleport.png\" style=\"image-rendering: pixelated;\" height=\"16px\"\u003e) - Randomly teleports you to a different location on the track.\n* **Bomb** (\u003cimg src=\"art/itemTNT.png\" style=\"image-rendering: pixelated;\" height=\"16px\"\u003e) - Pushes nearby players away from you.\n* **Trap** (\u003cimg src=\"art/itemTrap.png\" style=\"image-rendering: pixelated;\" height=\"16px\"\u003e) - Ensnares the player for a short amount of time.\n\n## Screenshots\n\n![screen0](screenshots/screen0.png)\n\n![screen1](screenshots/screen1.png)\n\n![gameplay](screenshots/gameplay.gif)\n\n# Development\n\nThe Ludum Dare Compo challenge is a 48 hour event where a single person must create a game from scratch based on a theme that is announced at the start of the event. Here is a list of development libraries that I used for this project:\n\n* [Haxe](https://haxe.org/]) - programming language\n* [Heaps.io](https://heaps.io/) - game engine\n* [Deepnight's GameBase](https://github.com/deepnight/gameBase) - framework\n* [LEd Haxe API](https://github.com/deepnight/led-haxe-api) - LEd integration\n\nHere is a list of software tools that I used during the development of Loop Runners:\n\n* [Visual Studio Code](https://code.visualstudio.com/) - integrated development environment (IDE)\n* [Aseprite](https://www.aseprite.org/) - pixel art editor\n* [LEd](https://deepnight.net/tools/led-2d-level-editor/) - 2d map editor\n* [GDX Texture Packer](https://github.com/crashinvaders/gdx-texture-packer-gui) - texture packer\n* [rFXGen](https://raylibtech.itch.io/rfxgen) - sound effects generator\n* [Wavebots Editor](https://krasse.itch.io/wavebots-editor) - music and sound effects generator\n\n# Personal Thoughts\n\nThis was my first Ludum Dare game jam that I have participated in, although I have done a handful of similar game jams in the past, but never one that was this short and that I did myself. Overall, I had a blast and highly encourage anyone who is interested in game development to give it a try. Actually, I would probably encourage people to do it multiple times since you will continue to grow as you participate in more events.\n\nFor this particular game jam, I felt like I managed my time fairly well and kept the game in a scope I could handle. This was my first time making something with the Haxe programming language, outside of a pre-warm up the weekend before. I had been reading up on it for the past couple weeks and after finding Deepnight's GameBase template on [GitHub](http://github.com), I decided to commit to using Haxe and Heaps along with this GameBase framework. I am really glad I did too, it was a great stepping off point. My main reference points that I had studied were Deepnight's [tutorials](https://deepnight.net/tutorials/) and the source code for his past Ludum Dare 45 entry, [Sabotage](https://github.com/deepnight/ld45).\n\nI took the advice of many past LD participants and made sure I took breaks to go outside, ate enough food, and slept enough both nights. I found these simple steps super helpful. The breaks really gave me time to pace around in the fresh air and gather my thoughts on what to tackle when I got back to my desk.\n\nI also want to give a thanks to my family for their time playtesting. My wife for taking my laundry chores for this weekend. :smile: And [Sébastien Bénard](https://twitter.com/deepnightfr) for his great tutorials, the LEd editor, and GameBase GitHub template.\n\n# Time-lapse Video\n\nWhile I was developing Loop Runners, I recorded a screenshot every 6 seconds. I then combined the screenshots to make a time-lapse video of me making the game. You can watch it on YouTube here:\n\n[![Time-lapse Video](https://img.youtube.com/vi/uIka1HcoIAE/0.jpg)](https://www.youtube.com/watch?v=uIka1HcoIAE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschraf%2Fld47","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschraf%2Fld47","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschraf%2Fld47/lists"}