{"id":28675493,"url":"https://github.com/mattdrivendev/fireinthemole","last_synced_at":"2025-10-09T07:36:01.994Z","repository":{"id":187854325,"uuid":"672200454","full_name":"MattDrivenDev/FireInTheMole","owner":"MattDrivenDev","description":"Bomberman meets Wolfenstein 3D (a Bomberstein!?)","archived":false,"fork":false,"pushed_at":"2023-09-28T22:04:32.000Z","size":1788,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2023-09-29T10:19:22.525Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","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/MattDrivenDev.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}},"created_at":"2023-07-29T08:58:10.000Z","updated_at":"2023-09-29T10:19:22.526Z","dependencies_parsed_at":"2023-09-28T03:14:30.178Z","dependency_job_id":null,"html_url":"https://github.com/MattDrivenDev/FireInTheMole","commit_stats":null,"previous_names":["mattdrivendev/fireinthemole"],"tags_count":1,"template":null,"template_full_name":null,"purl":"pkg:github/MattDrivenDev/FireInTheMole","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattDrivenDev%2FFireInTheMole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattDrivenDev%2FFireInTheMole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattDrivenDev%2FFireInTheMole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattDrivenDev%2FFireInTheMole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MattDrivenDev","download_url":"https://codeload.github.com/MattDrivenDev/FireInTheMole/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MattDrivenDev%2FFireInTheMole/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259727149,"owners_count":22902183,"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":[],"created_at":"2025-06-13T22:10:08.045Z","updated_at":"2025-10-09T07:35:56.967Z","avatar_url":"https://github.com/MattDrivenDev.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fire In The Mole!\nA game about moles mining with dynamite and blowing each other up (a Bomberstein3D).\n\n## TODO\n - [ ] Add a \"Days Since Last Accident\" counter to the title screen :)\n - [ ] Projection and RayCasting options should be loaded from a config etc.\n - [ ] Add the multiplayer split screen rendering.\n - [ ] Render mole animations in view projections. \n - [ ] Add the multiplayer input control systems. \n - [x] Fix the fisheye in the raycasting even more.\n - [x] Replace the player angles with a vector for forward.\n - [x] Add a title screen.\n - [x] Apply the map collision detection in the game itself.\n - [x] Pause menu centre alignment.\n - [x] Projection rendering based on the results of the ray casting.\n - [x] Load player spawn points from the Tile Map.\n - [x] Pause menu sounds.\n - [x] Pause menu quit confirmation. \n - [x] Refactor/2nd pass on the screen/scene/state managment.\n - [x] Add a pause menu.\n - [x] Screen/scene/state managment. \n - [x] Change the animation based on the movement and direction of the player.\n - [x] Load a Tiled map.\n - [x] When rendering top-down, use an orthographic camera that follows the player.\n - [x] Bug: prototype janky collision detection... allow player to move flush up against the wall.\n - [x] Render mole instead of circle for player.\n\n## But why F#?\nSo... I wrote the prototype in C#. Then, after some playtesting and realising that the game might have some legs, I knew I had to do some fairly heavy refactoring. But, the harder I refactored, the more it became a re-write. And then the harder I re-wrote, the more of a hot spaghetti mess it became again.\n\nI am 100% finding it hard to write game code. It is quite far removed from the kind of code that I write day-to-day in boring business software land. Dependency injection, strategy patterns, and event streaming have me all in a muddle - and my game code just ends up being a hot mess that I struggle to work with without introducing 3 bugs for every 1 feature.\n\nI've had quite a lot of experience in F#, and I'm fairly confident with it. One of the nice things about it is that it forces you to be more strict... and in this instance, the strictness I think comes from the lack of circular dependencies (which is enforced at compile-time with the type system).\n\nSo, consider this to be a kind of prototype++.\n\n### Tools\n - MapViewer: used to quickly test tile map rendering, tile destruction, and an orthographic camera.\n - Floored: to figure out how to do the floor texturing (Mode7 camera)... hopefully this will work!\n - Collider: to figure out how to do the collision detection.\n - (Ray) Stantz: to figure out how to do the ray casting.\n\n### Notes\n - [More on Ray Casting](https://gamedev.stackexchange.com/questions/169546/understanding-the-rendering-of-the-raycasting-on-flat-screen/169548#169548)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattdrivendev%2Ffireinthemole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattdrivendev%2Ffireinthemole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattdrivendev%2Ffireinthemole/lists"}