{"id":19492646,"url":"https://github.com/infoforcefeed/goat-tower","last_synced_at":"2025-08-15T17:10:35.503Z","repository":{"id":63740644,"uuid":"13007667","full_name":"infoforcefeed/goat-tower","owner":"infoforcefeed","description":"3 months and a sub-par ircbot plugin is why we don't give a shit anymore","archived":false,"fork":false,"pushed_at":"2014-11-23T10:32:54.000Z","size":209,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-25T20:18:32.441Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/infoforcefeed.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":"2013-09-22T04:30:55.000Z","updated_at":"2019-07-02T21:51:22.000Z","dependencies_parsed_at":"2022-11-25T02:15:34.962Z","dependency_job_id":null,"html_url":"https://github.com/infoforcefeed/goat-tower","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/infoforcefeed/goat-tower","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infoforcefeed%2Fgoat-tower","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infoforcefeed%2Fgoat-tower/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infoforcefeed%2Fgoat-tower/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infoforcefeed%2Fgoat-tower/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/infoforcefeed","download_url":"https://codeload.github.com/infoforcefeed/goat-tower/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infoforcefeed%2Fgoat-tower/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270602456,"owners_count":24614260,"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","status":"online","status_checked_at":"2025-08-15T02:00:12.559Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-10T21:22:26.616Z","updated_at":"2025-08-15T17:10:35.458Z","avatar_url":"https://github.com/infoforcefeed.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"goat-tower\n==========\n\n* [Initial Ideas](#whiteboard)\n* [Installation](#install)\n* [Design](#design)\n    * [Actors](#actors)\n    * [Attributes](#attributes)\n    * [Commands](#commands)\n\n\n\u003ca name=\"whiteboard\" /\u003e\n## Initial Ideas\nhttp://i.imgur.com/wQM9vkr.jpg\n\n\u003ca name=\"install\" /\u003e\n## Installation/Use\n1. git clone git@github.com:nijotz/goat-tower\n1. cd goat-tower\n1. mkvirtualenv goat-tower\n1. pip install -r requirements.txt\n1. createdb goattower\n1. cd goattower\n1. python load.py objects/test_location.yaml yaml\n1. python cli.py 3 look\n1. python cli.py 3 north\n1. etc...\n\n\u003ca name=\"design\" /\u003e\n## Design\nThe design of Goat Tower is relatively simple. Goat Tower is a heavily MOO influenced, relational and modifiable game.\n\n\u003ca name=\"actors\" /\u003e\nThe game consists of a world, which is populated by Actors. Actors have several key properties and a list of attributes. The key properties are as follows:\n\n* Parent ID\n* Name\n* is_player\n\nEvery Actor has a parent actor, because everything is inside of something else (probably). It is possible to build a graph wherein several nodes exist with no parents. The decision behind this choice was to allow for diversity in locomotion, mainly that you can move north, south, or into weird complex situations like 'move temporally into the past' or 'move south into Jimmy's mind'.\n\n\u003ca name=\"attributes\" /\u003e\nIn addition to the key attributes of every actors are certain mutable attributes. These are designed to be things like 'zombiness', 'sickness', 'health', 'panic', 'resemblance to President Reagan' or really anything else that can be thought of. This is to keep the game dynamic and modifiable from inside.\n\nFor example, you could construct an Actor such that using 'look' in it's vicinity would set the player on fire, or a self-perpetuating memetic virus that overrides every say command with the rick roll text. \n\n\u003ca name=\"commands\" /\u003e\nThe command structure is hierarchical in a similar fashion to the Actor model. Actions on Actors can be accomplished with an augmented subset of simple CRUD commands. Deleting, modifying or creating new attributes, in addition to things that cannot be implemented using those like `say_text`.\n\nThe precedence for command execution is a fall through structure that goes Game -\u003e Player Actor -\u003e Children Actors -\u003e Parent Actor -\u003e Children of the Parent Actor. This allows you to have certain system commands that will not be overridden by uppity actors.\n\nWhen executing commands, a lookup in the database is performed to see if the current item in the precedence chain has a corresponding command (Command.regex). If it does, another lookup is performed to get any Code objects that correspond to that command.\n\nThis structure lets you have many commands that can be executed at once, or a rich command that sets you on fire, moves you north and lowers your health attribute to 0 while displaying the text 'Fire destroys the room you are in'.\n\nThe syntax for getting commands to work is currently in flux.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfoforcefeed%2Fgoat-tower","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finfoforcefeed%2Fgoat-tower","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfoforcefeed%2Fgoat-tower/lists"}