{"id":17022220,"url":"https://github.com/trigary/botmender","last_synced_at":"2025-10-20T12:02:09.083Z","repository":{"id":193083809,"uuid":"132408964","full_name":"Trigary/BotMender","owner":"Trigary","description":"A TPS Unity game where bots can be built from blocks and then taken into (PvP) action.","archived":false,"fork":false,"pushed_at":"2018-11-02T14:14:05.000Z","size":60096,"stargazers_count":5,"open_issues_count":2,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-12T10:14:05.608Z","etag":null,"topics":["blocks","csharp","game","multiplayer","multiplayer-game","networking","unity"],"latest_commit_sha":null,"homepage":"","language":"C#","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/Trigary.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2018-05-07T04:57:19.000Z","updated_at":"2022-12-01T12:37:23.000Z","dependencies_parsed_at":"2023-09-06T18:40:34.805Z","dependency_job_id":null,"html_url":"https://github.com/Trigary/BotMender","commit_stats":null,"previous_names":["trigary/botmender"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trigary%2FBotMender","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trigary%2FBotMender/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trigary%2FBotMender/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trigary%2FBotMender/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Trigary","download_url":"https://codeload.github.com/Trigary/BotMender/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248550632,"owners_count":21122934,"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":["blocks","csharp","game","multiplayer","multiplayer-game","networking","unity"],"created_at":"2024-10-14T07:09:37.510Z","updated_at":"2025-10-20T12:02:09.020Z","avatar_url":"https://github.com/Trigary.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Disclaimer\n\nI have unfortunately lost interest in continuing this project.\nIt has been a great learning experience, but I have reached my goal and therefore lost my motivation.\nI was able to do what I wanted to do: block/system based structures in a networked environment.\nThe project does not have any special ideas, game mechanics which would justify further work.\nExpect no further commits.\n\n# BotMender\n\nA TPS Unity game where bots can be built from blocks and then taken into (PvP) action.\nThe current version is an early prototype and is continuously being updated.\n\nHere are two examples of bots: *(authentic programmer graphics)*  \n![example-bot](example-bot.png)  \n![bot-showcase](bot-showcase.gif)\n\nAnd a showcase of the custom networking implementation (the server is fully authoritative):  \n![bot-fight](bot-fight.gif)\n\n## Blocks, building, systems\n\nEach block has mass, health and \"connect-sides\": sides on which it can connect to other blocks.\nThe block placement system is expected to get reworked a bit due to only allowing\nblocks which take a whole block unit of space.\n\nAll blocks may also define a system: if the block is placed, the system gets installed onto the bot.\nThere are 3 kinds of system: propulsion, weapon and active.\nAn active system usually gives some sort of special ability which has a cooldown.\nPassive systems might get introduced in the future.\n\n## Bots (structures)\n\nA structure is a collection of its parts (blocks) and systems.\nThere are two types of structures: editable (still under construction) and complete (usable, playable).\nSince the systems are defined by the blocks, a structure can be serialized just by serializing its blocks.\nThe health of a structure is the sum of its blocks' health.\nA block/system can be specified by specifying the structure's ID and the block's position.\n\n# Current state\n\nThis project is currently an early prototype.\nNothing is final, and everything which has been made is subject to improvement.\nThe current goal is to implement a basic version of as many of the features as possible.\nThis allows design errors to be spotted early on,\nbefore any radical changes would be required when fixing them.\nThis also means that all front-end development is kept to a bare minimum.\n\n# Contributing\n\nIf you are thinking of contributing, feel free to do so, no need to be shy!\nAs outlined in the previous paragraph, the main focus is back-end development for the moment,\nbut don't let that discourage you if that's not your thing.\nCheck out the [contributing file](CONTRIBUTING.md) for more information.\n\n# Codebase\n\nVerbose naming and lots of documentation should make the codebase easy to read.\nUnfortunately, it's not always enough and that's what this section hopes to aid.\n\n## Networking\n\n[DoubleSocket](https://github.com/Trigary/DoubleSocket) is used to handle the networking.\nThis allows the bypassing of Unity's limited and poorly documented HLAPI and LLAPI.\nThe library uses a synchronized TCP and UDP socket for each party,\ntherefore taking advantage of TCP's flow and congestion control while also allowing\nUDP packets to be used when reliability and ordered packets are not required.\n\nMost importantly of all, the servers are fully authoritative in this implementation.\nFor example, this is how movement is networking is done in this project:\nall parties extrapolate the position of the networked objects using physics and the last input.\nThe local client knows that the server also does this extrapolation,\ntherefore it only applies the input change with a delay (of trip time): this minimizes the time\ndifference between the time the server and the time the client applies the input change,\nleading to near identical predictions, therefore only unnoticeable state corrections.\n\nThe game is designed with both dedicated servers and player hosted games in mind.\nThis means that the server may or may not be a client as well.\nUDP packets are sent to all connected clients, while TCP packets are usually sent from the server\nto all non-host clients (who are referred to as client-only clients) or from one client to the server.\nPacket sends between the host-client and the server are minimized,\nsince it's an overhead which is usually easy to circumvent.\nNetwork condition simulation has been implemented.\n\n## Adding new blocks, systems\n\nAll instructions about how to register blocks, systems can be\nfound in the `BlockFactory` and `SystemFactory` classes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrigary%2Fbotmender","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrigary%2Fbotmender","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrigary%2Fbotmender/lists"}