EPITA-Y1-j3d

Beyond the Doors — a 2-player cooperative escape room proof of concept built with Python 3 and Pygame for the EPITA J3D first-year project.

Overview

"Beyond the Doors" is a 2-player cooperative escape room built for the EPITA J3D project. Two players — one hosting a server, one connecting to it — must solve complementary puzzles to escape a series of medieval-alchemist rooms. The game runs a server-authoritative architecture: all game logic and state live on the server (TCP sockets + JSON), while each client renders a Pygame scene and sends its actions over the network.

Gameplay

Each player starts in their own room and progresses towards the exit. Their puzzles are complementary — the game can only be completed if both players finish their side.

Player 1 (host) — the Alchemist

  • The Wheel: Align the Four Elements with their cardinal directions (Earth = North, Air = East, Fire = South, Water = West)
  • The Alchemy Room: Activate the four stages of the alchemical process in the correct order (Nigredo → Albedo → Citrinitas → Rubedo) to obtain the Philosopher's Stone
  • The Library: Use the Philosopher's Stone to unlock the door and consult the flower reference book
  • The Exit: Reach the final room

Player 2 (client) — the Botanist

  • The Wheel: Align the four Humours with their cardinal directions (Bile noire = North, Sang = East, Bile jaune = South, Phlegme = West)
  • The Book Room: Read the close-up book for clues
  • The Garden: Gather the specific flowers described in the book (Globe Amaranth, Willow, Angrec, Star of Bethlehem, Crown Imperial) and present the correct bouquet to the statue to open the door. A wrong bouquet makes the statue drop every flower.
  • The Exit: Reach the final room

Controls & Networking

  • Move: Left mouse button on an adjacent walkable cell (click-to-move)
  • Interact: E key
  • Pause/Resume: ESC or P
  • Debug grid overlay: F3

Host a game via python main.py → option 1. Port 65432 must be reachable. Clients connect by choosing option 2 and entering the host's IP. All game logic runs on the server — clients are rendering terminals.

Technologies

Python Pygame TCP Sockets JSON

Interesting Details

  • Server-authoritative design: the server owns all game state; clients send actions, not positions
  • Complementary puzzles: both players must complete their side — solo completion is impossible
  • Wrong bouquet in the Garden makes the statue drop every flower, requiring the player to gather them again
  • Standalone server mode: you can start just the server process without launching a client