2.2 KiB
Hockey Manager Match Engine
Framework: PhaserJS
Rink size: international (60x30m). Coordinate system: 0,0 = center. -60, 0 = left side of the rink, etc. 1 = meter. Use floats though.
Continuous Position + Behavior Trees (Moderate Complexity) Best for: Realistic tactics, good visual feedback, manageable scope Core Concept:
Players have exact X/Y coordinates on a 2D rink No physics engine, but movement is interpolated curves (bezier/spline) Each player runs a behavior tree every update tick (60+ times per second)
Behavior Tree Structure: Root: Team Strategy (e.g., "Dump and Chase") ├─ Player Role (e.g., "Left Winger - Offensive Zone") │ ├─ Offensive Positioning │ │ ├─ Is puck in our possession? → Move to scoring position │ │ └─ Is puck loose? → Move to forecheck target │ └─ Defensive Transition │ └─ Backcheck to defensive coverage position └─ Puck Carrier Actions ├─ Pass decision (weighted by attributes + open teammates) ├─ Shoot decision (scoring chance % calculation) └─ Carry decision (move toward better position) Key Systems: A) Tactical Positioning System:
Define "heat maps" for each strategy/situation Example: 1-2-2 forecheck = F1 pressures puck carrier, F2/F3 position at blue line Players move toward their heat map "ideal position" modified by:
Puck location Teammate positions (spacing) Opponent threats Player stamina/speed
B) Puck Movement:
No physics! Puck "teleports" but with travel time Pass success = f(passer skill, pass distance, pressure, receiver skill) Shots = trajectory calculation with goalie save probability
C) Decision-Making Engine: javascriptEvery tick:
- Evaluate situation (game state, ice time, score, etc.)
- Query behavior tree for action
- Weight options by:
- Player attributes (Hockey IQ, Creativity)
- Coaching instructions (Risk level, Passing %)
- Fatigue & injury status
- Execute highest-weighted valid action
- Apply outcome (deterministic + dice roll) Visualization:
Smooth interpolation between positions (easing functions) Player sprites with orientation/animations Puck trails for passes/shots Think: Football Manager 2D but more fluid