Standalone Scala application that connects to a Killer Queen arcade cabinet, receives game events, and turns them into JSON payloads to be logged and analyzed. It additionally enriches the stream of events to provide more useful metadata. There is also the optional ability to use a simple UI to assign player names so that you can consistently track player performance over time.
- Checkout this repository locally
- (Optional) Configure the application to send the logs to Sumo Logic
- Ensure your computer is on the same network as the Killer Queen cabinet. (http://kq.local should load)
- Execute
bin/run.sh
We've included an example log4j2 configuration file that you can copy to log4j2.xml
and use. Replace REDACTED
with an HTTP source URL. For information on how to get your HTTP source URL, see the help docs.
The core concept is that everything is an Event
. In code, there are a few sub types: InboundEvent
, OutboundEvent
,
GameplayEvent
, ResetEvent
, and EnrichedEvent
.
InboundEvent
- Native events generated by the KQ cabinet and received by the collector. For more history, see the original reddit request thread.GameplayEvent
-InboundEvent
that involves gameplay, instead of general control flow.
OutboundEvent
- Events generated by the collector and sent to the KQ cabinet.ResetEvent
- Internal collector control event that can be passed toStateMachine.reset
to avoid creating an arbitrary event.EnrichedEvent
- Our attempt to use knowledge of the current game's state to add contextual information to anInboundEvent
To know more about the types of events and the fields they have available, please check the source. See EnrichedEvents.scala and Events.scala.
A Player
is a singular reference to the position on the cabinet. i.e. Player 1 is the Gold Queen, always.
In a single play of a game, there is a PlayerState
that can be used to track the current state of any given character.
They have an attribute that is a Player
.
- A
Maiden
is the game's codified name for gates that minions can use to upgrade their player