A simple multiplayer survival game where players can interact with the world and each other. The game's state and logic is implemented using Mud with Unreal Engine as the client.
The purpose of this project is to demonstrate the concept of developing an onchain game using MUD with the frontend developed using Unreal Engine 5. The game itself takes inspiration from other survival games such as Minecraft but with the twist that the world is persistent and decentralized hosted on the blockchain. Players can take actions such as Move and Push to move around and interact with the world and other players. Actions are executed instantaneously but after an action is taken, a recovery time is imposed on the player restricting them to take any action until the recovery time has passed.
The game's development is separated into 3 parts. 1- The game's backend which is developed using MUD framework and deployed on the blockchain. 2- The MUD Unreal Engine Plugin which allows the client to communicate with the MUD framework. 3- The game's frontend which uses the plugin to sync it's state with the backend and send input to the backend through the plugin.
MUD Framework Backend: The game is developed using the mud framework with the game's state expressed through Table definitions (such as Position)and the logic expressed through Systems (such as MoveSystem). MODE service is used to index the game state. and Faucet service is used to drip funds to players.
MUD Unreal Engine Plugin: the plugin is made up of two major parts: 1- Sync which is used to sync Table data in the client and Execute which is used to execute System calls on the blockchain backend. Sync uses TurboLink plugin which is a grpc and protobuf plugin for Unreal Engine to communicate with MUD services such as MODE and Faucet. To use Table data effectively in the client the game uses ContextFramework plugin which is a custom ECS gameplay framework for Unreal Engine. MUD Tables are redefined as Components and there keys are mapped on to entity ids on the client to allow the developer to use synced data in a streamlined manor. 2- Execute uses web3.unreal plugin as a Web3.js or Ether.js alternative to communicate with the blockchain through jrpc calls. HyperPlay is used for it's MetaMask interaction and allows the user to play with there MetaMask Wallet securely. MUD Systems are redefined in the client to allow a streamlined execution of on chain actions by the developer
Unreal Engine Client: the game's frontend is developed using the Unreal Engine gameplay framework and the Context Framework plugin.