{"id":18230355,"url":"https://github.com/benc-uk/caster","last_synced_at":"2025-06-27T20:34:28.227Z","repository":{"id":65211212,"uuid":"471749089","full_name":"benc-uk/caster","owner":"benc-uk","description":"Retro style 90s FPS with a fantasy theme, written in Go","archived":false,"fork":false,"pushed_at":"2022-08-08T06:57:52.000Z","size":59796,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-14T06:38:13.706Z","etag":null,"topics":["ebiten","fps-game","golang","raycasting"],"latest_commit_sha":null,"homepage":"","language":"Go","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/benc-uk.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}},"created_at":"2022-03-19T16:21:33.000Z","updated_at":"2022-04-28T18:21:15.000Z","dependencies_parsed_at":"2023-01-15T15:15:17.643Z","dependency_job_id":null,"html_url":"https://github.com/benc-uk/caster","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benc-uk%2Fcaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benc-uk%2Fcaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benc-uk%2Fcaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benc-uk%2Fcaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benc-uk","download_url":"https://codeload.github.com/benc-uk/caster/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247818183,"owners_count":21001343,"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":["ebiten","fps-game","golang","raycasting"],"created_at":"2024-11-04T11:03:49.912Z","updated_at":"2025-04-08T09:47:15.580Z","avatar_url":"https://github.com/benc-uk.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Crypt Caster 🧙🪄🏰💀🔮\n\nA experiment in creating a raycasting based FPS/adventure game.\nBased heavily on this guide and tutorial - https://github.com/ssloy/tinyraycaster/wiki\n\nRaycasters are essentially a fake 3D view, generated in a 2D plane, a system used by early FPS games like Wolfenstein  3D, Doom, Duke Nukem, Ultima Underworld, Legends of Valour and many many more\n\nThis developed from a proof of concept of the game engine, into somewhat of a fully playable game. There are still several bugs, especially with the monster movement and AI but it doesn't spoil the fun too much.\n\nThe game is written in Go, and uses the Ebiten open source game library https://ebiten.org/. However everything is developed from first principals, Ebiten providing little more than a means to read image files, and a way to render pixels to the screen (plus reading input \u0026 audio). The code structure is deliberately simple (just a single main package) in order to focus on the goal of getting somethign playable.\n\nGame Features:\n\n- Multiple crypts to explore, can you find the exit?\n- Six terrifying monsters \u0026 creatures to battle\n- Secret walls and switches, where do they lead?\n- Locked doors and keys\n- Health potions, mana spheres and food to eat, yum!\n\n## Screens Shots \u0026 Videos\n\n#### Gameplay Video\n[![](https://i.ytimg.com/vi/qcmcv_ifNxM/maxresdefault.jpg)](https://youtu.be/qcmcv_ifNxM)\n\n\u003cimg src=\"docs/screenshot_20220414110126.png\" width=\"450\"\u003e\n\u003cimg src=\"docs/screenshot_20220414110204.png\" width=\"450\"\u003e\n\u003cimg src=\"docs/screenshot_20220414110236.png\" width=\"450\"\u003e\n\u003cimg src=\"docs/screenshot_20220414111049.png\" width=\"450\"\u003e\n\u003cimg src=\"docs/screenshot_20220414111340.png\" width=\"450\"\u003e\n\u003cimg src=\"docs/screenshot_20220414111402.png\" width=\"450\"\u003e\n\n---\n\n## Installing \u0026 Running\n\n- Download the [release zip from the releases page](https://github.com/benc-uk/caster/releases)\n- Unzip the zip file anywhere\n- CD into unzipped directory\n- Run `caster` or `caster.exe`\n\nOptional arguments:\n\n```txt\n  -debug\n        Enable debug mode (default false)\n  -fullscreen\n        Fullscreen mode (default false)\n  -level \u003cmap name\u003e\n        Auto start in this level/map\n  -ratio int\n        Ray rendering ratio as a percentage of screen width (default 4)\n  -res string\n        Screen resolution: tiny, small, medium, large, larger or super (default \"medium\")\n  -vsync\n        Enable vsync (default false)\n```\n\n## Controls\n\n| Control     | Key(s)                     |\n| ----------- | -------------------------- |\n| Move player | Cursor keys and WASD       |\n| Fire magic  | Shift keys (left or right) |\n| Use/open    | Spacebar                   |\n| Strafe      | Hold Alt                   |\n| Open Map    | Tab                        |\n| Zoom Map    | Plus / minus keys          |\n| Pause/menu  | Escape                     |\n\n## Level Editor\n\nThere is a web based level editor included\n\n![](./docs/Screenshot%202022-04-14%20153620.png)\n\nTo run the level editor you will need Node.js installed and can run:\n\n```bash\nmake run-editor\n```\n\nThen open http://localhost:8080/editor\n\nIf you don't have Node.js but have a means to start a HTTP server locally, then that can be used instead, run it in the root of this repo but go to /editor in the browser.\n\n## Level Editor Usage\n\n- Add walls by left clicking, click and drag with the left button to draw walls\n- Clear a cell by right clicking\n- Monsters, doors and items can only go into empty cells, decorations and extras can only go on top of walls.\n- There's three additional modes, which can be accessed by holding a key:\n  - Hold 'i' to add items. Note the last two items \"barrel\" and \"column\" are cosmetic and act like walls\n  - Hold 'm' to add monsters\n  - Hold 'd' to add doors, the basic door requires no key, the three colored doors have corresponding key items, the last door is designed to be opened with a switch.\n  - Hold 'x' to add extras to a wall. These are mostly decorations such as torches and splats of blood. There are three special types:\n    - Switch (brown rectangle) is a button which when pressed, can be used to remove a wall or door. You will be prompted for the X,Y cell that the switch affects.\n    - Secret wall (question mark) this will mark a wall as secret, when pressed/used it will disappear and open\n    - Exit (dark entryway) this is the exit and way to complete the level\n  - Hold 'w' to switch to wall mode, which is the default\n  - Hold 'p' to move the player start location, holding 'p' and clicking to the current position will rotate their starting facing.\n\nThere is a bug after adding switch, you will have to press 'w' to return to wall mode.\n\n## Credits \u0026 Attributions\n\nGraphics taken from Dungeon Crawl Stone Soup tile pack - https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental used under the CC0 license.\n\nMusic taken from https://soundimage.org/fantasywonder/ and distributed under the license terms there\n\nMany sound effects from https://freesound.org/\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenc-uk%2Fcaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenc-uk%2Fcaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenc-uk%2Fcaster/lists"}