{"id":50772670,"url":"https://github.com/sensepost/sconwar","last_synced_at":"2026-06-11T20:30:40.798Z","repository":{"id":136379909,"uuid":"300425415","full_name":"sensepost/sconwar","owner":"sensepost","description":"a bring your own client programming game","archived":false,"fork":false,"pushed_at":"2026-05-09T11:56:00.000Z","size":9071,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-05-09T12:14:58.335Z","etag":null,"topics":["byoc","challenge","game","programming","rest"],"latest_commit_sha":null,"homepage":"https://sensepost.com/blog/2020/sconwar-sensecon-2020/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sensepost.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":"2020-10-01T21:08:09.000Z","updated_at":"2026-05-09T11:56:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"9a6268b8-71c9-474d-ba30-5fb962525e0b","html_url":"https://github.com/sensepost/sconwar","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sensepost/sconwar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensepost%2Fsconwar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensepost%2Fsconwar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensepost%2Fsconwar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensepost%2Fsconwar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sensepost","download_url":"https://codeload.github.com/sensepost/sconwar/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensepost%2Fsconwar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34217312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"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":["byoc","challenge","game","programming","rest"],"created_at":"2026-06-11T20:30:40.276Z","updated_at":"2026-06-11T20:30:40.789Z","avatar_url":"https://github.com/sensepost.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 👾 sconwar - a bring your own client programming game\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://twitter.com/leonjza\"\u003e\u003cimg src=\"https://img.shields.io/badge/twitter-%40leonjza-blue.svg\" alt=\"@leonjza\" height=\"18\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://twitter.com/rc1140\"\u003e\u003cimg src=\"https://img.shields.io/badge/twitter-%40rc1140-blue.svg\" alt=\"@rc1140\" height=\"18\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://twitter.com/scoobymib3\"\u003e\u003cimg src=\"https://img.shields.io/badge/twitter-%40scoobymib3-blue.svg\" alt=\"@scoobymib3\" height=\"18\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cimg align=\"right\" src=\"./images/logo.png\" height=\"220\" alt=\"sconwar\"\u003e\n\n`sconwar` is a \"bring your own client\" programming game where the only interface with the game is via a RESTful api. Some `sconwar` features are:\n\n- Primary interface is via a RESTful API\n- Turn-based game logic\n- Written in Go, clients can be in any language\n\nThe game itself is pretty simple. A 20 by 20 sized board is spawned, populated by creep \u0026 power ups. Players join the board taking turns to battle it out in a last person standing war. Killing other creep players will award you points, with a multiplier that applies post-game based on your position.\n\nYour goal is to write your own client to out-score your opponents and climb the leaderboard.\n\n## installation\n\nThe game server can be compiled with:\n\n```bash\nmake clean swagger-install deps swagger install\n```\n\nThis will download dependencies and compile the `sconwar` executable.\n\nIf you prefer docker, simply run `make docker` and then run the built image with:\n\n```bash\ndocker run --rm -it -p 8080:8080 -e API_TOKEN=foo sconwar:local\n```\n\n## how to play\n\n\u003cimg align=\"right\" src=\"./images/api.png\" height=\"250\" alt=\"sconwar\"\u003e\n\nThe most important resource you need to know about the is the API documentation. Once the server is running you can find the documentation by browsing to it. Unless you have a custom hosting setup, you can find this at \u003chttp://localhost:8080/\u003e.\n\n### getting started overview\n\nTo start a `sconwar` game, you need two things:\n\n- A `player_id`, obtainable by registering to the server. This ID is a secret, and you should treat it that way.\n- A `game_id`, obtainable by starting a new game.\n\nDepending on the server setup, an administrator could either share the key configured to setup new users, or you could ask for a player token.\n\n### game flow\n\nTo actually play a game, a small dance needs to happen first. It's pretty simple. Create a game, join a game and then start the game. Once the game is running you can invoke Actions and Player endpoints to get an idea of your surroundings and decide what moves to make.\n\nStarting a game will take the following calls:\n\n- Make a POST request to `game/new` with a game name. Take note of the UUID value returned. This ID's your game.\n- Make a POST request to `game/join` using your secret `player_id` and the newly obtained `game_id`.\n- When all of the players have joined, make a PUT request to `game/start/{game-uuid}` to start the game.\n\nThis game \u0026 player id combination is used in all `action/*` endpoints to issue commands.\n\n### game rules\n\nSconwar is a turned-based game. A game has both creep and players that could move, attack, decide to pick up a power up or do nothing. Creep decide what to do relatively quickly, but Players could take a little longer. For this reason, players have 30 seconds to invoke an action. While it is not your turn, you may queue up to two actions that will automatically get executed when its your turn again.\n\nAs for the game itself, there are a few rules. Those are:\n\n- Players have two moves they can make per turn.\n- Players can queue up up to two actions while it is not their turn.\n- A turn lasts for a maximum of 30 seconds.\n- The maximum distance you can move / attack / pick up something is two tiles.\n- A Fog of War is applicable. That means that the surroundings endpoint won't show the entire board, unless the game is finished.\n- Activating a power up does not consume a turn.\n\n### game goal\n\nGet the top score on the leaderboard! The meta/scores endpoint will return total scores, and the meta/leaderboard endpoint will show the top scoring games!\n\n### sconwar tips\n\nWhile playing sconwar:\n\n- Check the player status endpoint to see which power ups you have, how much health you have left etc.\n- Check the game info endpoint to see who's turn it is now.\n- Check the surroundings endpoint as often as possible to see who and what is in range to plan your move.\n- Use the meta/types endpoint as a reference for what some of the internal ID's such as power ups, statuses and other entities in Sconwar mean.\n\n## license\n\n`sconwar` is licensed under a [GNU General Public v3 License](https://www.gnu.org/licenses/gpl-3.0.en.html). Permissions beyond the scope of this license may be available at [http://sensepost.com/contact/](http://sensepost.com/contact/).\n\nThe sconwar logo is a derivative work of [Mini Mike's Metro Minis](https://github.com/mikelovesrobots/mmmm), and the license is available [here](https://github.com/mikelovesrobots/mmmm/blob/master/LICENSE).\n\nThe web UI is a derivate work of [this](https://codepen.io/amyyf/pen/rJBypJ) codepen.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsensepost%2Fsconwar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsensepost%2Fsconwar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsensepost%2Fsconwar/lists"}