Skip to content

Weminal-labs/MoveShot

Repository files navigation

MoveShot

A competitive 2D multiplayer platformer shooter built on Initia blockchain. Fast-paced PvP matches with on-chain weapon ownership, cosmetic NFTs, and verifiable match results — all with invisible blockchain UX via auto-signing.

Initia Hackathon Submission

  • Project Name: MoveShot

Project Overview

MoveShot is a free-to-play competitive 2D platformer shooter where players battle in best-of-3 PvP matches (30 seconds per round) with 5 weapon types, arena shrink mechanics, and aerial sword slash combat. The game runs on a dedicated MoveVM Minitia rollup, recording match results on-chain via server-signed attestation while keeping all real-time gameplay off-chain at 60Hz. Players truly own their weapon skins and character cosmetics as Move resources that can never be duplicated — and they never see a wallet popup during gameplay.

Implementation Detail

  • The Custom Implementation: MoveShot features a deterministic game simulation engine shared between client and server, Colyseus.js multiplayer with client-side prediction, 5 weapon types (Pistol, Shotgun, Sniper, Rocket Launcher, SMG) as on-chain Move NFTs with mutable provenance stats, server-signed match attestation with on-chain verification, and a pixel art UI inspired by competitive gaming terminals.

  • The Native Feature: Auto-signing (Ghost Wallet) eliminates all wallet popups during gameplay. Players approve a single session transaction that grants authz + feegrant to a derived Ghost Wallet. All subsequent in-game transactions — match result recording, weapon equipping, cosmetic changes — execute seamlessly in the background. This is critical for a competitive shooter where a 1-second popup would be fatal to gameplay flow.

How to Run Locally

  1. Prerequisites: Node.js 20+, pnpm 9+, Docker Desktop, Go 1.22+
  2. Setup: Clone repo, run pnpm install, then weave init to deploy your Minitia rollup (follow prompts, save your chain_id)
  3. Start services: weave rollup start -d, then pnpm --filter server dev and pnpm --filter client dev
  4. Play: Open two browser tabs to http://localhost:5173, connect wallets, enable auto-sign, and click Quickplay to match against each other

Tech Stack

Layer Technology
Game Engine Phaser 3
Frontend React + Vite + TypeScript
Game Server Colyseus.js (WebSocket, 60Hz)
Blockchain MoveVM Minitia Rollup
Wallet InterwovenKit + Auto-Signing
Hosting Cloudflare Pages + Workers

Architecture

┌─────────────────┐     WebSocket      ┌──────────────────┐     RPC/REST     ┌────────────────┐
│   Game Client   │◄──── 60Hz ────────►│   Game Server    │◄───────────────►│  Minitia Rollup │
│  Phaser 3 +     │     (Colyseus)     │  (Colyseus.js)   │   Server-signed │  (MoveVM)       │
│  React + IWKit  │                     │  Authoritative   │   attestation   │                 │
└─────────────────┘                     │  Simulation      │                 │  Contracts:     │
                                        └──────────────────┘                 │  - match_registry│
                                                                             │  - weapon_nft   │
                                                                             │  - cosmetic_nft │
                                                                             │  - player_profile│
                                                                             └────────────────┘

Project Structure

MoveShot/
├── apps/client/          # React + Phaser 3 game client
├── packages/sim/         # Shared deterministic simulation (60Hz)
├── services/server/      # Colyseus multiplayer game server
├── contracts/arena/      # Move smart contracts
├── .initia/              # Hackathon submission metadata
└── context/              # Project documentation & specs

License

MIT

About

a competitive 2D multiplayer platformer shooter built on Initia blockchain.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors