{"id":24529759,"url":"https://github.com/learosema/boulders","last_synced_at":"2025-04-14T17:37:27.673Z","repository":{"id":195031060,"uuid":"669913467","full_name":"learosema/boulders","owner":"learosema","description":"Boulder Dash Clone","archived":false,"fork":false,"pushed_at":"2024-05-28T08:41:35.000Z","size":409,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-28T21:50:21.898Z","etag":null,"topics":["canvas","eleventy","game","webgl","webgpu"],"latest_commit_sha":null,"homepage":"https://boulders.netlify.app/","language":"TypeScript","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/learosema.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2023-07-23T20:48:59.000Z","updated_at":"2024-05-28T08:41:38.000Z","dependencies_parsed_at":"2023-10-05T02:49:38.413Z","dependency_job_id":"38eb1e27-666c-490d-b77f-5db67d54e918","html_url":"https://github.com/learosema/boulders","commit_stats":null,"previous_names":["learosema/boulders"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/learosema%2Fboulders","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/learosema%2Fboulders/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/learosema%2Fboulders/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/learosema%2Fboulders/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/learosema","download_url":"https://codeload.github.com/learosema/boulders/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235082228,"owners_count":18932920,"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":["canvas","eleventy","game","webgl","webgpu"],"created_at":"2025-01-22T07:52:34.369Z","updated_at":"2025-01-22T07:52:35.187Z","avatar_url":"https://github.com/learosema.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Boulders - A Boulder Dash Clone\n\nThis is a basic clone of the Boulder Dash game, originally built by [Peter Liepa](https://brainjam.ca). The game mechanics are roughly implemented from what I've had in memory.\nIt is a demo/research project for a couple of web platform technologies, frameworks and methodologies I'm interested in and love to work with.\n\n## Technologies\n\n- [Eleventy](https://11ty.dev)\n- [TypeScript](https://typescriptlang.org)\n- [Web Components](https://developer.mozilla.org/en-US/docs/Web/API/Web_components)\n- [esbuild](https://esbuild.github.io/)\n- [lightningcss](https://lightningcss.dev/)\n- Web Audio API. A microlibrary dropped out of this: [https://retro-sound.js.org](https://retro-sound.js.org)\n- JSX without React: I've written a bit about that [Custom JSX in TypeScript](https://lea.codes/posts/2024-01-17-custom-jsx-in-typescript/)\n- Different Rendering Engines and changing them on-the-fly while in-game: WebGL, WebGPU, Canvas2D\n- GLSL and WGSL shaders\n- Building game mechanics incrementally via test-driven development\n- some basic Software Architecture principles, some SOLID but mostly \"loose coupling\" and depending on interfaces rather than implementations\n- \"isomorphic TypeScript\": The Canvas2D renderer used in the Frontend is re-used in Eleventy/node.js to generate preview images.\n- ASCII art maps: the levels are plain text files with [ASCII art maps](https://github.com/learosema/boulders/blob/main/src/level/01.txt), processed by Eleventy\n\n## Talk \n\nI held a talk about the project at the [NovaSummit 2023](https://youtu.be/rsf0hTE4--0). \n\nThere are also [slides](https://boulders-slides.netlify.app/). The Slides are also made with Eleventy. The source is available on [GitHub](https://github.com/learosema/boulders-slides).\n\n## Development environment setup\n\nThis project relies on the [canvas](https://npmjs.org/package/) npm package \nto render preview images for the levels via Eleventy.\n\nIt requires a bunch of dependencies to be installed on the system. \nPlease follow the instructions on the npm page.\n\n## License\n\n- Code: [LICENSE](LICENSE.md)\n- Artwork: CC-BY-SA 4.0\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flearosema%2Fboulders","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flearosema%2Fboulders","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flearosema%2Fboulders/lists"}