User:Djpohly/N-player support

DISCLAIMER: I do not speak for all of the StepMania developers, and the ideas listed here may never be implemented in StepMania.

'''FURTHER DISCLAIMER: This article is still under construction. Expect layout, ideas, and anything else to change until this notice is gone.'''

One interesting potential feature for StepMania is to allow the participation of an arbitrary number of players on a single instance. If we wish to implement support for this, a number of changes will need to happen. First, we will need to generalize the way that player input is handled to allow for a wider variety of input setups. We will need to extend our graphics capabilities to handle additional windows/screens for further players. Then we will need to refine the way that players and play modes are modeled. Finally, we will need to allow charts to be written that take advantage of the new model.

Input

 * We have M total potential player input buttons (i.e. "panels" in dance-style games). For example, on an ITG cabinet, this is 8.  For a pop'n controller, it's 9.  For a StepMania install with a Solo pad and a IIDX controller attached, it's 14.
 * It may or may not be useful to group other arcade buttons into these tracks at this point. Whichever abstraction allows for cleaner code should be preferred.
 * These input tracks can traditionally be grouped into logical units, such as a single five-panel Pump pad or a nine-button Pop'n controller. However, these units are not always cleanly separated.
 * For example, a five-panel Pump pad is one logical unit, and combining two such units yields the inputs for a Pump double chart.
 * However, play styles like Pump half-double or Pop'n 7-button use some (but not all) inputs from smaller units (single and 3-button versus).
 * So again, these groupings may or may not be useful to a clean and general implementation.

Some less critical thoughts:


 * DDR and Pump charts can be played on a TechnoMotion pad. Is there some way to model this elegantly?
 * For instance, if a new dance game uses four orthogonal directions plus a center panel, our model would ideally be such that:
 * DDR charts could be played on this new input device, and
 * Charts written for the new game could be played on a TechnoMotion pad.
 * Perhaps it would be useful to classify "type of input" rather than "type of game." For example, step panels are one type of input, buttons are another, turntables, Para/EZ2 hand sensors, etc.  Each chart then specifies which input types and locations are needed, and if the current set of inputs satisfies this, the chart can be played.
 * There would of course be a built-in set of defaults corresponding to the "normal" chart types like pump-single, dance-double, popn-nine, etc.

Graphics
(any suggestions?)

Player model

 * We have N total players.

Definitions

 * Chart
 * Analogous to StepMania's current  object.  One set of notes written for a particular song, chart style, and difficulty, along with the corresponding timing information (split BPMs, etc.).


 * Chartset
 * Multiple separate charts which are designed to be played simultaneously. For example, a traditional "couple" chart is a chartset of two single charts.  Rock Band uses chartsets of four charts.  (Anybody have a better term for this?  I'm looking for an alternative to the word "couple" that doesn't imply "two." --djpohly)


 * Chart style
 * Analogous to StepMania's current .  A set of inputs, along with the number of players who will use those inputs.


 * Player
 * For the purposes of this article, a player is one human, or a computer emulation thereof. For example, a traditional routine chart has two players.  This does not necessarily correspond to StepMania's current   object.


 * Routine
 * A chart style in which multiple players share at least one input track. Judgments and scoring are typically shared, although it should be possible to see them individually if desired.


 * Track
 * One panel, button, string, turntable, etc. on a given input device. For example, "left arrow on the first pad" is one track.