itch here: https://yojick.itch.io/magicthirst
📁: Code is in Assets/Src/
- Player fights groups of enemies in arenas
- Uses melee + abilities (dash, parry, teleport, magic casts, shots)
- Enemies use the same systems (shared ability pipeline)
- Combat is based on timing (parry window, direction checks)
Located in Levels/IntentsImpacts/.
Short: `Action → Intent → Impacts → Modified → Applied`
Full: Caster → Intent → Mapper → Impacts → [Broker] → [Modifiers] → Victim
Intents — player/AI actions (shoot, parry, teleport)
Impacts — actual effects (damage, impulse, teleport)
This allows:
- reuse of abilities between player and AI
- easy addition of new mechanics
- interception (parry, status effects)
📁 Main files to look at:
Levels/IntentsImpacts/IntentsImpacts.csLevels/IntentsImpacts/DeferredBroker.cs- All abilities are in
Levels/Abilities/
Located in Levels/Entities/.
// Currently works on ScriptableObjects, may be migrated to just [Serializable]s
📁:
Levels/Core/Entity.cs– Composition root for all gameplay objectsLevels/Core/CoreObject.cs– Base for injectable, disposable components- Key components:
Health.csWeaponry.csTeleportChip.csProjectilesParrying.cs(advanced parry system with timing window + direction check)StatusesRepository.cs(status effects + modifiers)
Located in Levels/AI/Fsm.cs.
Fsm.cs+FsmState.cs— finite state machine- States for bandits (
BanditIdle,BanditAlerted,BanditFighting) and turrets - Includes editor tool that generates PlantUML diagrams
Located in Levels/DI/.
DI/GameLifetimeScope.cs– Root scopeDI/LevelLifetimeScope.cs– Per-level scopeDI/EntityContextScope.cs– Per-entity scopeDI/ConsumerLifetimeScope.cs&DI/ProducerLifetimeScope.cs– TODO, Separate handling for local player input vs remote players
Wires everything above.