{"id":20264336,"url":"https://github.com/thi-ng/fantasy-console","last_synced_at":"2025-09-12T02:33:04.550Z","repository":{"id":259785234,"uuid":"637470562","full_name":"thi-ng/fantasy-console","owner":"thi-ng","description":"A browser-based TIC-80 inspired fantasy console built for workshops/educational purposes, written in TypeScript and using thi.ng/umbrella","archived":false,"fork":false,"pushed_at":"2024-10-27T20:26:31.000Z","size":843,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T23:35:24.809Z","etag":null,"topics":["dsl","educational","fantasy-console","pixel-art","retrocomputing","thing-umbrella","virtual-machine","workshop"],"latest_commit_sha":null,"homepage":"https://demo.thi.ng/umbrella/fantasy-console/","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/thi-ng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2023-05-07T16:48:59.000Z","updated_at":"2025-01-04T18:12:07.000Z","dependencies_parsed_at":"2024-10-28T01:37:36.709Z","dependency_job_id":null,"html_url":"https://github.com/thi-ng/fantasy-console","commit_stats":null,"previous_names":["thi-ng/fantasy-console"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thi-ng%2Ffantasy-console","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thi-ng%2Ffantasy-console/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thi-ng%2Ffantasy-console/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thi-ng%2Ffantasy-console/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thi-ng","download_url":"https://codeload.github.com/thi-ng/fantasy-console/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248328160,"owners_count":21085261,"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":["dsl","educational","fantasy-console","pixel-art","retrocomputing","thing-umbrella","virtual-machine","workshop"],"created_at":"2024-11-14T11:39:42.377Z","updated_at":"2025-04-11T02:11:02.075Z","avatar_url":"https://github.com/thi-ng.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# thi.ng/fantasy-console\n\nA TIC-80 inspired browser-based fantasy console originally developed for a\nworkshop series @ Technical University Augsburg in 2022/23.\n\n![animated GIF of screenshots](fantasy-console.gif)\n\nUnder a larger conceptual framing of permacomputing (in the widest sense), low\nresource usage and learnings from older low-powered hardware and the oftentimes\ningenious solutions these limitations fostered, the project aimed to demostrate\nto students how to built up a custom personal computing system using familiar\n(web) technologies and introduced students to various technical (retro)computing\nconcepts, incl.\n\n-   Memory layouts/maps\n-   Control/device registers (e.g. for I/O)\n-   Interrupts (here only HSYNC/VSYNC)\n-   Binary \u0026 hex data encoding\n-   Indexed color modes, color/palette cycling\n-   Bitmap fonts\n\nThe project also implements a small embedded DSL to interact with the virtual\nhardware (main RAM \u0026 VRAM), I/O registers (e.g. mouse \u0026 time/date) and provide a\nbasic graphics API to create small graphical tools \u0026 experiments written in a\nsubset of JavaScript.\n\n**The entire console (incl. all examples listed below) is only 33KB (12.9KB gzipped)!**\n\n## Examples\n\nA pre-built version of the fantasy console is available online at:\n\nhttps://demo.thi.ng/umbrella/fantasy-console/\n\n### Instructions\n\n-   Press `1` - `6` to select/launch/reset any of the examples\n-   Press `Space` to download screenshot\n-   Apart from the raster bars and lissajous curve all other demos can be\n    interacted with via mouse\n-   Open the browser console to see the (already transpiled) source code of all\n    examples\n\n**See [/src/roms](./src/roms) for source code of all examples...**\n\n### Example #1: Scribble \u0026 color cycling\n\nHold down left mouse button to cycle the colors (the current palette is also\nalways shown in bottom-left corner). Nice, powerful oldskool effect, which is\nactually easier to do with these indexed, non-RGB pixel buffers[1]\n\n### Example #2: Lissajous bobs\n\nThe spheres are actually 2x2 tiles of 8x8 pixel sprites with one color slot\nchosen as transparency. Drawing 100 spheres here, but could be a lot more...\n\n### Example #3: Raster bars\n\nThis oldskool effect is achieved via HSYNC interrupts only, i.e. no lines are\nbeing drawn — for every single pixel row we simply change the color value of the\nfirst palette entry. The text is also only being drawn once, at startup...\n\n### Example #4: Particle system\n\nSimple particle system (2k particles) with the emitter position linked to the\nmouse. 6% probability for larger particles.\n\n### Example #5: Random pattern\n\nClassic oldskool generative art, here by defining 4 custom bitmap font\ncharacters and then drawing a single randomly chosen char per frame\n\n### Example #6: Bitmap font editor\n\nSelect a character on the RHS to edit in the left box. Left click to set a\npixel, right click to clear it. Press `Delete` to clear the char entirely. The\nsystem supports proportional width fonts and the little red triangle can be\nmoved horizontally to adjust the width of each char... Clicking on the `Save`\nbutton will download a JSON file of the font's binary data (9 bytes per char:\nwidth + 8 data bytes)\n\n## Running locally\n\n```bash\ngit clone https://github.com/thi-ng/fantasy-console.git\n\ncd fantasy-console\n\n# download all dependencies (can also use npm)\nyarn install\n\n# start dev server \u0026 open in browser\nyarn start\n```\n\n## License\n\nThis project is licensed under the MIT License. See LICENSE.txt\n\n\u0026copy; 2022-2024 Karsten Schmidt\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthi-ng%2Ffantasy-console","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthi-ng%2Ffantasy-console","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthi-ng%2Ffantasy-console/lists"}