{"id":16312431,"url":"https://github.com/kiranandcode/rhombus-in-the-rough","last_synced_at":"2026-02-18T16:31:48.015Z","repository":{"id":169352602,"uuid":"631902128","full_name":"kiranandcode/rhombus-in-the-rough","owner":"kiranandcode","description":"A 2D RPG implemented in the Rhombus Racket dialect","archived":false,"fork":false,"pushed_at":"2023-06-27T09:02:02.000Z","size":18130,"stargazers_count":57,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-27T02:02:42.019Z","etag":null,"topics":["game","lisp","racket","rhombus","rpg"],"latest_commit_sha":null,"homepage":"","language":"GLSL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kiranandcode.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":"2023-04-24T09:52:43.000Z","updated_at":"2025-10-22T13:28:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"db7761f5-c427-45fb-8e30-339fca72a6e2","html_url":"https://github.com/kiranandcode/rhombus-in-the-rough","commit_stats":null,"previous_names":["gopiandcode/rhombus-in-the-rough","kiranandcode/rhombus-in-the-rough"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kiranandcode/rhombus-in-the-rough","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Frhombus-in-the-rough","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Frhombus-in-the-rough/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Frhombus-in-the-rough/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Frhombus-in-the-rough/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiranandcode","download_url":"https://codeload.github.com/kiranandcode/rhombus-in-the-rough/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2Frhombus-in-the-rough/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29585549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T13:56:48.962Z","status":"ssl_error","status_checked_at":"2026-02-18T13:54:34.145Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["game","lisp","racket","rhombus","rpg"],"created_at":"2024-10-10T21:48:04.528Z","updated_at":"2026-02-18T16:31:47.995Z","avatar_url":"https://github.com/kiranandcode.png","language":"GLSL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A Rhombus in the Rough: Adventure Awaits!\n\nThis is a small libre RPG game built using the experimental [Rhombus\ndialect](https://github.com/racket/rhombus-prototype) of the\nscheme/lisp-based [Racket programming\nlanguage](https://github.com/racket/racket) \u0026\n[Raylib](https://www.raylib.com/sd), licensed under AGPLv3+.\n\n![Screenshot 3](./screenshots/screenshot-3.png)\n\nThe artwork for the game is based on submissions for the Libre Pixel Cup,\nall under libre licenses, and the specific attribution is given in the\n[attribution document](./attribution.md). \n\nIf you think this looks cool, or want to find out more, or just\nanything at all (please, I'm desperate), drop me a message, let me\nknow! I'd love to collaborate on libre projectssd!\n\n## Stuff for PL Nerds\n\nFrom a programming languages standpoint, if you're into that, this\nproject showcases the ease of writing macros and building DSLs in\nRhombus (a particular lang on top of Racket), and contains several\nspecialised DSLs for various parts of the game.\n\nSome interesting DSLs in the project:\n\n- [behaviours/monster.rhm](behaviours/monster.rhm)` -- A DSL for expressing behaviour trees for game AI:\n  ```\n  declare_behaviour_state(target,patrol)\n\n  behaviour_tree attack_player(this) with state(target):\n    all_of:\n      check near_player(this) using state(target)\n      perform do_attack_player(this, target)\n\n\n  behaviour_tree aggro_player(this) with state(target):\n    all_of:\n      check player_in_line_of_sight(this) using state(target)\n      perform aggro_towards_player(this,target)\n\n  behaviour_tree follow_player(this) with state(target):\n    all_of:\n      check aggro_still_active(this, target)\n      perform move_towards_player(this,target)\n\n  behaviour_tree follow_patrol(this) with state(target, patrol):\n    first_of:\n      attack_player(this)\n      follow_player(this)\n      aggro_player(this)\n      perform do_follow_patrol(this,patrol)\n  ```\n\n- [dialogs/guard.rhm](./dialogs/guard.rhm) -- A DSL for expressing dialog with branches and choices (inspired by other interactive scripting languages like Ink):\n  ```\n  dialog guard_dialog:\n    guard_a: 1 \"Halt! Who goes there?\" || \"Good ~a!\" \"day\" || \"Allo Allo...\"\n    1 \"I'm a traveller, passing by\" || \"Hello again!\" || \"Just one more thing...\"\n    branch guard_a: \"What do you want....\"\n    | \"Nevermind....\"\n      [\"The guard returns to his position.\"]\n      ~\u003e END\n    | \"I'd like to ask you a question\"\n    guard_a: \"Sure! Fire away.\"\n    branch\n    | \"Who are you?\" (\"\") [\" You ask about the guard himself...\"]\n      guard_a: \"I'm a guard!\"\n      ~\u003e quest\n    | \"What's up?\"\n      guard_a: \"Noneya.\"\n      \"...\"\n      \"what-\"\n      guard_a: \"None-ya business.\"\n      \"...\"\n      \"I'll be on my way then...\"\n      ~\u003e END\n  ```\n\n- [maps/map1.rhm](./maps/map1.rhm) -- A DSL for describing game maps and placing entities within the game world:\n  ```\n  map Map1(\"./map1.tmx\"):\n\n\n    position \"start-point\":\n      entity p :: Player\n\n    position \"in-front-of-house\":\n      entity blacksmith :: Blacksmith\n\n    position \"grassy-plain-area\":\n      entity bat :: Bat = build_bat():\n        ~with_path \"bat-patrol\" in set_patrol\n\n    init:\n      #void\n  ```\n\n- [game/item_sprites.rhm](./game/item_sprites.rhm) -- A DSL for naming individual tiles within spritesheets:\n  ```\n  spritesheet ItemSprites:\n    options:\n      ~offset_x: 0.\n      ~offset_y: 0.\n      ~spacing_x: 0.\n      ~spacing_y: 0.\n      ~width: 34.0\n      ~height: 34.0\n      ~shared\n    ARMOR_IRON ARMOR_COPPER ARMOR_BRONZE ARMOR_SILVER ARMOR_GOLD CLOTH CLOTH_GOLD MEDAL_GOLD MEDAL_SILVER MEDAL_BRONZE BLUE_STONE RED_PENDANT HEART_NECKLACE ICE_STAR_NECKLACE WINGS_NECKLACE HEALTH_POTION_NECKLACE\n    TEETH_NECKLACE POTION_NECKLACE CROSS_NECKLACE CLOTH_BAND METAL_BAND CLOTH_SHOES LEATHER_SHOES REINFORCED_SHOES STRENGTHENED_SHOES SPEEDY_SHOES METAL_SHOES FOREIGN_SHOES LEATHER_HELMET GLADIATOR_HELMET KNIGHT_HELMET WIZARD_HELMET\n    FIRE_WIZARD_HELMET MONSTER_PLATE MONSTER_BONE_SHIELD METAL_SHIELD GOLD_SHIELD ROUND_SHIELD BANDIT_SHIELD METAL_BRACELET REINFORCED_METAL_SHEILD GLADIATOR_SHIELD MIRROR_SHIELD ROBOTIC_SHIELD MONSTER_SHIELD MONSTER_KING_SHIELD WOODEN_SHIELD REINFORCED_WOODEN_SHIELD\n  ```\n## More screenshots\n![Screenshot 1](./screenshots/screenshot-1.png)\n![Screenshot 2](./screenshots/screenshot-2.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiranandcode%2Frhombus-in-the-rough","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiranandcode%2Frhombus-in-the-rough","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiranandcode%2Frhombus-in-the-rough/lists"}