group-b-phx/DESIGN.org

66 lines
2.0 KiB
Org Mode

#+TITLE: Design of Group B Pace Notes
Need to figure out how to structure the game loop, it's probably at least one genserver, but the rest of it?
* Components
each player is an entity
each card is an entity?
each stage note is an entity?
** Player
Player is a component with an entity id generated by liveview or so -- it's the "primary" container for each play session
Player has components:
- StageNote (non-unique, ordered list (how?) of stages to progress through, need to be able to "peek" ahead)
- Action (non-unique, unordered list of cards with different locations)
- Throttle (how fast the speed increases)
- Speed (how fast the car is carried through the current stage note
- Focus
- Stage Time (float or so, basically the score)
** Stage Note
A stage note is a single pace note entry: straight 30, 5 left don't cut, caution over bumps, etc
- Active (tag), is this the stage note we are progressing over
- Max speed
- required focus
- Type (straight, esses, curve, hairpin, special)
- Components to express oddities of the stage, caution, don't cut,
** Action
There is a deck of these which a player can spend to take actions on a stage
- Location (is it being played, in hand, deck, or discard)
- FocusModifier
- ThrottleModifier
- SpeedModifier (use sparingly, game is much more about throttle control)
- Tags for special cards (for example: this is a cut)
* Systems:
How does a player "spend" focus and speed? speed is obvious in the braking and acceleration cards
what is focus used for? the faster you're going the more focus should drain, since you're using more of it to stay on course
more focus could increase look-ahead too? you can listen to the co-driver better? hmm
** SpeedSystem
speed += throttle + distance
** ActionSystem
Enforces constraints on action cards, makes sure hand size is reasonable, feeds active card to StageNoteSystem
** StageNoteSystem
Consumes an active Action, updates Player components accordingly
** StageSystem
progresses a Player over a list of StageNotes and makes sure they are still alive, updates stage time