{"id":16632540,"url":"https://github.com/antonc9018/zayats","last_synced_at":"2026-05-09T03:31:21.659Z","repository":{"id":50347196,"uuid":"505074972","full_name":"AntonC9018/Zayats","owner":"AntonC9018","description":"Board game and server","archived":false,"fork":false,"pushed_at":"2022-10-26T14:05:58.000Z","size":1410,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-18T07:46:50.076Z","etag":null,"topics":["aspnetcore","grpc","unity3d"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AntonC9018.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-19T10:17:19.000Z","updated_at":"2023-12-17T12:50:50.000Z","dependencies_parsed_at":"2023-01-20T12:19:46.101Z","dependency_job_id":null,"html_url":"https://github.com/AntonC9018/Zayats","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AntonC9018%2FZayats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AntonC9018%2FZayats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AntonC9018%2FZayats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AntonC9018%2FZayats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AntonC9018","download_url":"https://codeload.github.com/AntonC9018/Zayats/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243113217,"owners_count":20238358,"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":["aspnetcore","grpc","unity3d"],"created_at":"2024-10-12T05:00:50.865Z","updated_at":"2025-10-10T07:37:40.081Z","avatar_url":"https://github.com/AntonC9018.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zayats\n\n\n## Introduction\n\n**Zayats** (russian for rabbit) is a board game.\n\nIt's your typical roll your dice, then move that many spaces sort of game with special mechanics:\n- the ability to jump over players;\n- items, which grant different passive effects or add activated abilities;\n- mines that explode and kill you when you step on them;\n- other stuff.\n\n\n### Game architecture\n\nThe logic is completely separate from the view, such that the code can be used, unchanged, both in the Unity game and in the game server, without it having any Unity references.\nHence, it has a tiny component storage implementation, an events system, and other barebones stuff necessary for game development.\nYou can find the most relevant code in [Zayats\\Assets\\Source\\Core\\Runtime](Zayats\\Assets\\Source\\Core\\Runtime).\n\nI tried to stay away from OOP as much as possible, keeping all state separate from behavior, centralized.\nAll state of an active game can be found in `GameContext.State`.\nThe view follows a similar principle.\nInterfaces are still used to encompass polymorphic behavior though.\n\n\n### Project structure\n\nThe folders are as follows:\n\n- `3dmodels` contains the sources for the models, a blender file with all of the models dumped in a single scene, and an exported FBX's for each of the model.\n\n- `build_folder` contains build artefacts, cached tools and local configuration.\n\n- `dev_cli` is the `dev` tool, used to do the initial setup for the project and manage devop tasks, like running the code generator, opening the unity editor, running the server, etc.\n  Each new command becomes part of the `dev` tool, which can be conveniently invoked from the command line.\n  The tool is written in the D programming language and can use its rich type system and the standard libraries.\n  \u003e I thought about replacing it with Nuke, but I did not like it very much.\n\n- `kari_stuff` contains my code generator, Kari, as a git submodule, and a bunch of plugin projects for it.\n  Think of the plugins as individual source generators.\n  \u003e I know Unity now has support for source generators, but my own thing is IMO way easier to use at this point.\n\n- `Server` contains:\n  * the GameServer (aka matchmaking and gameplay server, currently unimplemented);\n  * projects that import the shared source code from the Unity folder;\n  * protobuf source files, which define GRPC functions and the packet types for both the client and the server;\n  * a web application for viewing statistics, creating accounts, setting up the profile, and storing all data in the database (currently unimplemented).\n\n- `Zayats` is the Unity game.\n\n\n### Getting started\n\nFollow the steps below to set up the project:\n1. Install a [D compiler](https://dlang.org/download.html)\n2. Install [.NET 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0)\n3. Install Unity version 2021.3.4f1 from [the archive](https://unity3d.com/get-unity/download/archive)\n4. Run the setup script in the root of the project.\n\nThe `dev` cli tool will be written to `build_folder/dev_cli/dev`, but I recommend you define an alias for this command (this is done automatically on Windows, see [dosmacros.doskey](dosmacros.doskey), which gets automatically applied by the setup script.\nAlso, I recommend you set up a terminal profile, which gets those commands automatically defined, because the `dev` tool will be used a lot.\n\nAfter the setup script has run, you should be good to open Unity.\nFor that, call `dev unity open`.\n\n\n### The `dev` tool\n\nMost important dev commands:\n- `dev setup` runs the setup script;\n- `dev kari run` runs the code generator on the unity project;\n- `dev unity open` opens the Unity Editor;\n- `dev protoc` runs the protoc compiler on the proto files;\n- `dev models package` copies the exported 3d models to the unity folder;\n- others.\n\nThe help messages are janky at the moment, because I didn't bother implementing proper help messages in the [CLI framework](https://github.com/AntonC9018/jcli) that I'm using, while the original author doesn't have time to do them properly, so **the best way to see what arguments the commands take at the moment is to browse the code**.\nAny fields marked with attributes are valid arguments to the commands.\n\n\nI'll add more commands in the future, as I see fit.\nPerhaps there will be a build command for the game, a publish command for a git release, etc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantonc9018%2Fzayats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantonc9018%2Fzayats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantonc9018%2Fzayats/lists"}