Skip to content

GJ8 Submission: Contagion#281

Merged
kronosapiens merged 1 commit into
dojoengine:mainfrom
fabianferno:main
Mar 10, 2026
Merged

GJ8 Submission: Contagion#281
kronosapiens merged 1 commit into
dojoengine:mainfrom
fabianferno:main

Conversation

@fabianferno
Copy link
Copy Markdown
Contributor

Contagion is a social deduction .io game built on Starknet. One player is secretly Patient Zero. Infection spreads by proximity. Players prove their health with ZK proofs. Real-time gameplay runs on WebSocket; on-chain state uses Dojo contracts and the Embeddable Game Standard (EGS) for provable scores.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 8, 2026

Submission Screening

Approved

Project: Contagion
Repository: https://github.com/Ashar20/contagion-dojo

Dojo Usage: Contains proper Dojo models (#[dojo::model] Player) and systems (#[dojo::contract] actions) with meaningful game logic including movement, digging, and two-layer randomness for treasure hunting gameplay.

Client-Contract Integration: Client is properly wired to contracts through DojoProvider and calls spawn(), move(), and dig() actions. Real deployment addresses are used, not placeholders.

Cartridge Controller: Fully integrated with ControllerConnector, session keys configured for contract methods, and supports social login options (Google, Discord).

Timeline: 69% jam ratio (25/36 commits during jam window) — this is a full submission with the majority of development happening during the jam period.

Frontmatter: None found — submission follows proper format.


Automated screening — a maintainer will perform final review.

@kronosapiens
Copy link
Copy Markdown
Collaborator

Manual Review — Flagged 🚨

The contracts in this submission (contracts/) are byte-for-byte identical to dojoengine/starter. No modifications were made — the repo is a fork with zero changes to the contracts directory.

The starter contracts implement a treasure hunt game (10×10 grid, spawn/move/dig, gold/bomb tiles). The described game — a social deduction infection game with proximity mechanics, ZK health proofs, accusation/voting — runs entirely via a WebSocket server with no on-chain logic.

The useDojoActions hook does call spawn(), move(), and dig() on-chain, but:

  • The on-chain state (treasure hunt on a 10×10 grid) is unrelated to the actual gameplay (infection on a 200×200 map)
  • The client optimistically fakes state updates rather than reading chain results
  • Removing the Dojo integration would not affect the contagion gameplay

This falls under the screening criteria for "Game works entirely client-side" and contracts with no meaningful game logic relative to the submitted game.


Manual review by a maintainer.

@fabianferno
Copy link
Copy Markdown
Contributor Author

@kronosapiens we were still pushing some changes to the repo at the time you had reviewed - we assumed the end time was March 8, 23:59 AOE. Didn't know the screening would run immediately after the PR was raised.

Sorry for the inconvenience, could we get another review?

Thanks in advance

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Submission Screening

🚨 Flagged for Manual Review

Project: Contagion
Repository: https://github.com/Ashar20/contagion-dojo

Dojo Usage: Solid — ContagionPlayer and GameRoom models carry #[dojo::model], and contagion_actions is a proper #[dojo::contract] with meaningful systems: join_room, move_player, infect (proximity validation), collect_cure, accuse, take_damage. Dojo 1.8.0 is in Scarb.toml and the frontend imports @dojoengine/core and calls it through a real DojoProvider.

Client-Contract Integration: Flagged — the WebSocket server (server/index.ts, a Bun process) is the authoritative source of game state: player positions, infection spread, cure fragment collection, accusations, voting, and game-over conditions all live there. The submission description confirms this: "Real-time gameplay runs on WebSocket." Dojo actions (movePlayer, infect, collectCure, etc.) are called as fire-and-forward mirrors after the WebSocket already processes each action — the client never reads game state back from the chain. Position and infection status are driven by socket.players / socket.myStatus, not on-chain model reads. The useDojoActions hook updates its own playerState optimistically (locally) rather than subscribing to chain state. Removing the contracts would leave the game fully functional.

Cartridge Controller: Well integrated — ControllerConnector from @cartridge/connector is configured with session-key policies covering all eight game entrypoints, plus social-login options (Google, Discord). Real contract addresses match the deployed manifest.

Timeline: 29 of 42 commits (≈ 69%) fall inside the buffered jam window (2026-03-06 00:00 UTC – 2026-03-09 23:59 UTC) — full submission. The jam diff is large (22 k+ insertions): the complete Contagion client, WebSocket server, and EGS contracts were added during the jam. The pre-jam baseline was a Dojo starter/Treasure Hunt scaffold.

Frontmatter: None found.


Flag reason: The WebSocket server is the source of truth for the game's core state. Dojo contract calls are side effects that mirror state but don't drive it — the game plays identically whether or not transactions confirm. Per screening criteria, a game whose core loop runs through an off-chain server rather than through the contracts does not satisfy the client-contract integration requirement. A maintainer should assess whether the on-chain mirroring is substantial enough to count, or ask the team to make contracts authoritative (e.g. reading confirmed Torii state for key game outcomes).


Automated screening — a maintainer will perform final review.

@kronosapiens kronosapiens merged commit 45c5b3b into dojoengine:main Mar 10, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants