added menu to editor
This commit is contained in:
+273
-4
@@ -51,8 +51,25 @@ Table of Contents
|
||||
************************************************************
|
||||
|
||||
StepMania game system is capable of playing many game types. Currently, it
|
||||
supports games Dance Dance Revolution and Pump It Up, with future support for EZ
|
||||
2 Dancer, BeatMania, Guitar Freaks, DrumMania, Para Para Paradise and more.
|
||||
supports games similar to Dance Dance Revolution, Pump It Up, and EZ 2
|
||||
Dancer. In the future, it will support games similar to BeatMania, Guitar
|
||||
Freaks, DrumMania, Para Para Paradise and more.
|
||||
|
||||
StepMania is a rhythm game. Arrows pointing in different directions scroll
|
||||
up from the bottom of the screen, and the player must hit the corresponding
|
||||
direction in time to the music. The game can be played with your hands on
|
||||
the keyboard, but the real fun comes when the arrows are registered by dancing
|
||||
on a sensor-laden mat. The game is very similar to Konami's Dance Dance
|
||||
Revolution and Andamiro's Pump It Up games, but while those play only their
|
||||
own songs, StepMania can play any song that includes a step file.
|
||||
|
||||
In Stepmania most popular mode, "dance", the player uses four arrows - up,
|
||||
down, left, and right - , similar to Konami's Dance Dance Revolution series
|
||||
of games. In "pump" mode, the player must deal with and five direction of
|
||||
steps - ala Andamiro's Pump it Up games.
|
||||
|
||||
Later versions of StepMania will support steps similar to Amuseworld's
|
||||
EZ2Dancer games, as well as any that there is a sizable demand for.
|
||||
|
||||
|
||||
************************************************************
|
||||
@@ -61,7 +78,7 @@ supports games Dance Dance Revolution and Pump It Up, with future support for EZ
|
||||
|
||||
* Windows 98, Windows ME, Windows 2000, or Windows XP
|
||||
* Pentium II, Pentium III, Celeron, Athlon, or compatible processor, 266MHz
|
||||
minimum (400 MHz highly recommended)
|
||||
minimum (400 MHz recommended)
|
||||
* 64 MB of RAM
|
||||
* Video card that supports High Color (16-bit color) and has 16MB video RAM
|
||||
* DirectX 8.1 compatible video card with drivers
|
||||
@@ -116,6 +133,254 @@ In gameplay:
|
||||
* Hold Escape = abort playing
|
||||
|
||||
|
||||
************************************************************
|
||||
6. Playing the Game
|
||||
************************************************************
|
||||
|
||||
This section primarily covers StepMania's most popular game type, "dance".
|
||||
The various games supported by StepMania are similar, and much of this
|
||||
information applies to other games too.
|
||||
|
||||
Title Menu screen: At the title screen are a series of options.
|
||||
|
||||
* Game Start:
|
||||
Begin playing the game and go to the Style Select screen. Make sure
|
||||
you've configured your keyboard or dance pad before chosing this
|
||||
option.
|
||||
* Switch Game:
|
||||
Allows you to chose between the various games supported by StepMania
|
||||
(dance, pump, ez2, etc).
|
||||
* Config Key/Joy:
|
||||
This is where you go to assign key presses or pad presses. You'll
|
||||
want to use this screen before playing.
|
||||
* Game Options:
|
||||
This is you can adjust properties of the game, like difficulty
|
||||
and number of stages.
|
||||
* Game Options:
|
||||
This is you can adjust graphic detail and other settings that
|
||||
the performance of the game.
|
||||
* Appearance Options:
|
||||
Here, you can customize the appearance of StepMania by chosing the
|
||||
announcer, theme, and note skin.
|
||||
* Edit/Record/Synch:
|
||||
In this mode, you can edit songs and step patterns, or create your
|
||||
own step patterns from scratch.
|
||||
* Exit:
|
||||
Exits the program.
|
||||
* At the upper-left corner is the total number of songs found when
|
||||
StepMania perused your songs foler on startup.
|
||||
* At the upper-right is your version of StepMania.
|
||||
|
||||
|
||||
Config Key/Joy screen:
|
||||
|
||||
This menu allows you to map up to 2 keyboard/joystick buttons to each
|
||||
function in the game. The third column is the default key mapping, and
|
||||
cannot be changed. However, you can override a default keyboard key by
|
||||
simply assigning it to another function. The mappings for player 1 are
|
||||
on the left half of the screen, and the mapping for player 2 are on right
|
||||
half.
|
||||
|
||||
|
||||
Appearance Options screen:
|
||||
|
||||
* Display:
|
||||
Toggles between Fullscreen mode, in which StepMania is the only
|
||||
program visible and takes up the entire screen, and Windowed mode,
|
||||
in which StepMania runs in a window and can be moved about on your
|
||||
desktop and minimized or maximized, much like any other window.
|
||||
Many users have found that one mode or the other is more efficient
|
||||
and produces a smoother game. This varies depending on memory and
|
||||
video functionality.
|
||||
* Display Res:
|
||||
This switches between various standard resolutions of the screen.
|
||||
A higher number of pixels implies a sharper image, but requires more
|
||||
computer power.
|
||||
* Texture Res:
|
||||
Adjusts the resolution (pixel density) of video textures used in the
|
||||
game. More detail requires a more powerful computer.
|
||||
* Refresh Rate:
|
||||
Sets the number of times that the screen will be redrawn in 1 second.
|
||||
Note that this setting will only have an effect in Fullscreen mode.
|
||||
'Default' uses the system default refresh rate (60Hz on most computers).
|
||||
* Ignore JoyAxes:
|
||||
Many dance mat drivers (if you're using a dance mat) map the arrows
|
||||
as directions on a joystick axis. A joystick cannot, logically, be
|
||||
in more than one place at a time, such as left but also right. In
|
||||
the game, it is possible to hit two directions at once (in fact,
|
||||
required at times) and switching this setting to 'on' will make
|
||||
StepMania ignore the joystick requirement so that your dance mat
|
||||
will correctly register two arrows at once. See section in the README
|
||||
"Connecting Dance Pads" for more information on what adapters to use.
|
||||
* Menu Buttons:
|
||||
Toggles whether or not the menus will respond to the gameplay buttons.
|
||||
If not, dedicated buttons for menu navigation will be required.
|
||||
* Show FPS:
|
||||
Displays the current frames-per-second in the upper right side of the
|
||||
screen.
|
||||
* BG Mode:
|
||||
This controls the state of the background behind the arrows.
|
||||
OFF - Only the background graphic of the song is displayed.
|
||||
ANIMATIONS - Along with the background graphic, animated graphics
|
||||
(found in the BGAnimations folder) will dance around behind the
|
||||
arrows. Keep in mind that the animation files are small graphics,
|
||||
and must be loaded on the fly. On slower computers, this will
|
||||
cause jumpiness during the song. If this is a problem, try
|
||||
changing to Visualizations or even off.
|
||||
VISUALIZATIONS - Along with the background graphic, movies (found in
|
||||
the Visualizations folder) will be played. The default StepMania
|
||||
Visualizations pack (available at www.stepmania.com) contains
|
||||
swirling and twisting effects, but in theory any AVI or MPEG video
|
||||
can be used. You must have the DivX codec installed on your
|
||||
computer for this to work. Keep in mind that DivX decoding is
|
||||
processor-intensive, and will decrease the framerate. Slower
|
||||
computers will have a hard time playing StepMania AND decoding
|
||||
DivX backgrounds.
|
||||
RANDOM MOVIES - Movie files from the "RandomMovies" folder will be
|
||||
played as the background for the song.
|
||||
Sample animations, visualizations, and random movies can be found at
|
||||
www.stepmania.com.
|
||||
* BG Brightness:
|
||||
Adjusts the brightness level of the backgrounds. Since the
|
||||
backgrounds and the arrows are both brightly colored, darkening the
|
||||
backgrounds makes the arrows more visible.
|
||||
* Menu Timer:
|
||||
Toggles whether or not StepMania will place a time limit on using any
|
||||
given menu. This limit is usually in the upper-right corner of the
|
||||
screen.
|
||||
* Event Mode:
|
||||
If set to ON, there is no limit to the number of songs played. The
|
||||
player goes back to the Select Music screen even after failing a song,
|
||||
and continues to do so until they press Esc to move back a menu. If
|
||||
set to OFF, the game will end after a number of songs specified in
|
||||
'Arcade stages', the next option down.
|
||||
* Arcade Stages:
|
||||
If Event Mode is OFF, this is the number of songs that can
|
||||
successfully be cleared before the game over screen is displayed.
|
||||
* Judge Difficulty:
|
||||
How accurate the player must be in stepping to get a better score for
|
||||
the step. A higher number means they must be closer to the actual
|
||||
timing of the arrow. Those of you who try to get all 'perfect' steps
|
||||
will have a monster of a time with this setting all the way up.
|
||||
* Life Difficulty:
|
||||
How difficult it is to keep the life meter at the top of the screen
|
||||
up. The higher this number, the less it will increase for precise
|
||||
steps, and the more it will decrease for poorly timed steps.
|
||||
* Auto Play:
|
||||
The game will play as normal, but will hit all the arrows of its own
|
||||
accord, without the player's input. It also will get a perfect on
|
||||
every step. This will be saved as a high score for the song.
|
||||
|
||||
|
||||
Appearance Options Menu:
|
||||
|
||||
* Announcer:
|
||||
Select from the installed Announcer packs. Get more at
|
||||
www.stepmania.com.
|
||||
* Theme:
|
||||
Select from installed Theme packs. Themes change the look of Stepmania.
|
||||
Get more at www.stepmania.com.
|
||||
* Note Skin:
|
||||
Change the appearance of the arrows in the game by selecting from the
|
||||
available packs.
|
||||
Announcer, theme, and note skin packs can be dowloaded from
|
||||
www.stepmania.com.
|
||||
|
||||
|
||||
Song Options Menu
|
||||
|
||||
Upon selecting a song, the words 'Press NEXT for options' will appear on the screen. If you press the 'next' button (enter by default) you will come to the Song Options menu, which contains a variety of settings for changing the way the song and arrows are played.
|
||||
|
||||
Speed: The stream of arrows can be stretched out so that it comes faster, but the arrows are more spaced out. It can be left at 1x (normal speed) or stretched by multiples of .5, .75, 1.5, 2, 3, 5, or even 8 times the original speed.
|
||||
|
||||
Effect: Each of the effects changes the arrows themselves in some way, usually in such a way as to make them more obscure. Consider these challenege modes.
|
||||
|
||||
Off - No effect, normal arrow scrolling.
|
||||
Boost - Also known as 'parabolic' in some circles, this makes the arrows start up slowly and accelerate towards the top.
|
||||
Wave - Arrows alternately speed up and slow down.
|
||||
Drunk - Arrows sway back and forth as they scroll.
|
||||
Dizzy - Arrows spin as they scroll.
|
||||
Space - Similar to the scrolling effect in the Star Wars intros, arrows scroll away from the player.
|
||||
Mini - Arrows are really small.
|
||||
|
||||
Appear: These change the visibility of the arrows.
|
||||
|
||||
Visible - Normal arrow visibility.
|
||||
Hidden - Arrows disappear before they reach the top.
|
||||
Sudden - Arrows are invisible until close to the top.
|
||||
Stealth - Arrows are completely invisible. The only way to get them is to either memorize the song, watch another player perform the same song at the same time as you on the same difficulty setting, or be really really lucky.
|
||||
|
||||
Turn: These rotate the arrows. The arrows will show up on screen in their rotated positions.
|
||||
|
||||
Off - Normal arrows, unchanged from how they are in the step file
|
||||
Mirror - Steps are rotated 180 degrees. Up becomes a down.
|
||||
Left - Steps are rotated 90 degrees left. Up becomes a left.
|
||||
Right - Steps are rotated 90 degrees right. Up becomes a right.
|
||||
Shuffle - All steps in the step file are randomly shuffled.
|
||||
|
||||
Little: Removes any arrows that aren't on the quarter beats.
|
||||
|
||||
Scroll: BY reversing the scroll, the arrows will scroll from the top down instead of from the bottom up.
|
||||
|
||||
Color: Changes the arrow colors.
|
||||
|
||||
Vivid - Arrows cycle colors, and off-beat arrows are at different parts of the cycle so as to be easily identifiable.
|
||||
Note - Off-beat arrows are a different color from on-beat arrows, but colors do not cycle.
|
||||
Flat - Off-beat arrows are the same color as on-beat arrows
|
||||
Plain - Same as flat, with the addition that notes do not cycle colors.
|
||||
|
||||
Holds: If this is set to OFF, there will only be a normal arrow in place of any hold arrows that may appear. Some players don't like hold arrows.
|
||||
|
||||
Dark: This removes the grey arrows from the top of the screen, so that the player can't use them as a reference as to when to hit the proper arrow.
|
||||
|
||||
Life Type: Switch between BAR, where there is a meter that can be increased with accurate steps and decreased with poor steps, and BATTERY, where the player gets a set number of batteries, similar to 'lives' in most games, which are removed as they player misses steps.
|
||||
|
||||
Bar Drain: Functional only if Life Type is set to BAR. Switch between three ways the life meter can function.
|
||||
|
||||
Normal - Perfect and Great steps increase the bar, any others decrease it.
|
||||
No Recover: Same as Normal but it can only go down, not up. Perfects and Greats leave it in place.
|
||||
Sudden Death - Any step score other than Great or Perfect will automatically fail.
|
||||
|
||||
Bat. Lives: Functional only when Life Type is set to BATTERY. This sets the number of batteries the player gets.
|
||||
|
||||
Fail: If you fail by missing enough steps, this is when the song ends.
|
||||
|
||||
Arcade - Song will end as soon as you fail it.
|
||||
End of Song - As the name implies, you will not fail out until the music end. You miss every step and the song will keep playing until it's finished.
|
||||
Off - You cannot fail the song.
|
||||
|
||||
Assist: Makes a 'clap' sound every time you are supposed to hit an arrow, to help the player acquaint his or herself with the song's rhythmic structure.
|
||||
|
||||
Rate: This is the percent of normal speed that the song plays at. Any song can be speeded up or slowed down as much as 30%. This setting is not to correct a song that is misaligned to its steps, as the steps are also sped up or slowed down at the same rate that the song is.
|
||||
|
||||
|
||||
|
||||
Select Style screen: This is the screen where you choose your style of play.
|
||||
|
||||
* Single:
|
||||
One player, playing on one four-panel pad. Second player need not apply.
|
||||
* Versus:
|
||||
Two players each with their own respective 4-panel pad and set of arrows.
|
||||
Each player can choose their own difficulty, and each has their own set
|
||||
of arrows to follow. At the end of the song each player will recieve a
|
||||
separate grade. There is no interaction between players other than
|
||||
comparing grades and, if you have dance mats, the possibility of crashing
|
||||
into each other during play :-)
|
||||
* Double:
|
||||
Same as single, except that one player uses both player's pads, and must
|
||||
contend with 8 arrows now instead of only four. The step listings for
|
||||
doubles mode are separate from single or versus. Only files containing
|
||||
such a set of steps will be displayed.
|
||||
* Couple:
|
||||
Very similar to versus, except that each player has a different set of
|
||||
steps, and each player must choose the same skill level. Often stepfile
|
||||
authors use this mode to choreograph a patern between the two players.
|
||||
* Solo:
|
||||
One player plays on six panels. Like double, this uses a different step
|
||||
chart than single or versus or double does, and only files containing
|
||||
that set of steps will be displayed.
|
||||
|
||||
|
||||
************************************************************
|
||||
6. How StepMania Loads Songs
|
||||
************************************************************
|
||||
@@ -851,6 +1116,9 @@ BUG FIX: Autoplay no longer misses the first step if it lies on beat 0.
|
||||
NEW FEATURE: Support for holds notes in KSF.
|
||||
CHANGE: KSF title discovery will use song foler name if KSF file contains foreign
|
||||
characters.
|
||||
BUG FIX: Stepping before start of a note at beat 0 no longer results in a BAD.
|
||||
BUG FIX: Editor now works with dance-couple note patterns
|
||||
BUG FIX: Lead-in/lead-out time added to Play and Record in editor.
|
||||
|
||||
------------------------CVS after 3.00 beta 5----------------
|
||||
OPTIMIZATION: Much faster song loading.
|
||||
@@ -1274,9 +1542,10 @@ Bug fix: Good and Boo arrows not being drawn.
|
||||
************************************************************
|
||||
|
||||
Thanks to:
|
||||
Warrior Bob (Dave H) for helping with the readme!
|
||||
Dj Slash & Tony Thai for the caution graphic
|
||||
Kyle "KeeL" Ward for his awesome menu music (www.ampcast.com/keel)
|
||||
Gotetsu for being a utility player
|
||||
Gotetsu for helping track down bugs and other various tasks
|
||||
|
||||
************************************************************
|
||||
End of document
|
||||
|
||||
@@ -23,24 +23,15 @@ GameManager* GAMEMAN = NULL; // global and accessable from anywhere in our progr
|
||||
|
||||
const int DANCE_COL_SPACING = 64;
|
||||
const int DANCE_6PANEL_VERSUS_COL_SPACING = 54;
|
||||
|
||||
|
||||
// <<<<<<< GameManager.cpp
|
||||
// const int PUMP_COL_SPACING = 60;
|
||||
const int PUMP_COL_SPACING = 50;
|
||||
const int EZ2_COL_SPACING = 46;
|
||||
const int EZ2_DOUBLE_ADJUST = 150;
|
||||
|
||||
|
||||
// =======
|
||||
const int PUMP_COL_SPACING = 50;
|
||||
//const int EZ2_COL_SPACING = 50;
|
||||
|
||||
//
|
||||
// Important: Every game must define the buttons: "Start", "Back", "MenuLeft", and "MenuRight"
|
||||
//
|
||||
|
||||
// >>>>>>> 1.24
|
||||
|
||||
GameDef g_GameDefs[NUM_GAMES] =
|
||||
{
|
||||
{ // GAME_DANCE
|
||||
@@ -289,12 +280,14 @@ GameDef g_GameDefs[NUM_GAMES] =
|
||||
StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
{
|
||||
{ // STYLE_DANCE_SINGLE
|
||||
GAME_DANCE, // m_Game
|
||||
"dance-single", // m_szName
|
||||
NOTES_TYPE_DANCE_SINGLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
|
||||
{ 160, 480 }, // m_iCenterX
|
||||
4, // m_iColsPerPlayer
|
||||
GAME_DANCE, // m_Game
|
||||
true, // m_bUsedForGameplay
|
||||
true, // m_bUsedForEdit
|
||||
"dance-single", // m_szName
|
||||
NOTES_TYPE_DANCE_SINGLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
|
||||
{ 160, 480 }, // m_iCenterX
|
||||
4, // m_iColsPerPlayer
|
||||
{ // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
|
||||
{ // PLAYER_1
|
||||
{ TRACK_1, GAME_CONTROLLER_1, DANCE_BUTTON_LEFT, -DANCE_COL_SPACING*1.5f },
|
||||
@@ -314,12 +307,14 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
},
|
||||
{ // STYLE_DANCE_VERSUS
|
||||
GAME_DANCE, // m_Game
|
||||
"dance-versus", // m_szName
|
||||
NOTES_TYPE_DANCE_SINGLE, // m_NotesType
|
||||
StyleDef::TWO_PLAYERS_TWO_CREDITS, // m_StyleType
|
||||
{ 160, 480 }, // m_iCenterX
|
||||
4, // m_iColsPerPlayer
|
||||
GAME_DANCE, // m_Game
|
||||
true, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"dance-versus", // m_szName
|
||||
NOTES_TYPE_DANCE_SINGLE, // m_NotesType
|
||||
StyleDef::TWO_PLAYERS_TWO_CREDITS, // m_StyleType
|
||||
{ 160, 480 }, // m_iCenterX
|
||||
4, // m_iColsPerPlayer
|
||||
{ // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
|
||||
{ // PLAYER_1
|
||||
{ TRACK_1, GAME_CONTROLLER_1, DANCE_BUTTON_LEFT, -DANCE_COL_SPACING*1.5f },
|
||||
@@ -339,12 +334,14 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
},
|
||||
{ // STYLE_DANCE_DOUBLE
|
||||
GAME_DANCE, // m_Game
|
||||
"dance-double", // m_szName
|
||||
NOTES_TYPE_DANCE_DOUBLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_TWO_CREDITS, // m_StyleType
|
||||
{ 320, 320 }, // m_iCenterX
|
||||
8, // m_iColsPerPlayer
|
||||
GAME_DANCE, // m_Game
|
||||
true, // m_bUsedForGameplay
|
||||
true, // m_bUsedForEdit
|
||||
"dance-double", // m_szName
|
||||
NOTES_TYPE_DANCE_DOUBLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_TWO_CREDITS, // m_StyleType
|
||||
{ 320, 320 }, // m_iCenterX
|
||||
8, // m_iColsPerPlayer
|
||||
{ // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
|
||||
{ // PLAYER_1
|
||||
{ TRACK_1, GAME_CONTROLLER_1, DANCE_BUTTON_LEFT, -DANCE_COL_SPACING*3.5f },
|
||||
@@ -373,6 +370,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // StyleDef
|
||||
GAME_DANCE, // m_Game
|
||||
true, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"dance-couple", // m_szName
|
||||
NOTES_TYPE_DANCE_COUPLE, // m_NotesType
|
||||
StyleDef::TWO_PLAYERS_TWO_CREDITS, // m_StyleType
|
||||
@@ -386,10 +385,10 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
{ TRACK_4, GAME_CONTROLLER_1, DANCE_BUTTON_RIGHT, +DANCE_COL_SPACING*1.5f },
|
||||
},
|
||||
{ // PLAYER_2
|
||||
{ TRACK_1, GAME_CONTROLLER_2, DANCE_BUTTON_LEFT, -DANCE_COL_SPACING*1.5f },
|
||||
{ TRACK_2, GAME_CONTROLLER_2, DANCE_BUTTON_DOWN, -DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_3, GAME_CONTROLLER_2, DANCE_BUTTON_UP, +DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_4, GAME_CONTROLLER_2, DANCE_BUTTON_RIGHT, +DANCE_COL_SPACING*1.5f },
|
||||
{ TRACK_5, GAME_CONTROLLER_2, DANCE_BUTTON_LEFT, -DANCE_COL_SPACING*1.5f },
|
||||
{ TRACK_6, GAME_CONTROLLER_2, DANCE_BUTTON_DOWN, -DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_7, GAME_CONTROLLER_2, DANCE_BUTTON_UP, +DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_8, GAME_CONTROLLER_2, DANCE_BUTTON_RIGHT, +DANCE_COL_SPACING*1.5f },
|
||||
},
|
||||
},
|
||||
{ // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
|
||||
@@ -398,6 +397,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // STYLE_DANCE_SOLO
|
||||
GAME_DANCE, // m_Game
|
||||
true, // m_bUsedForGameplay
|
||||
true, // m_bUsedForEdit
|
||||
"dance-solo", // m_szName
|
||||
NOTES_TYPE_DANCE_SOLO, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
|
||||
@@ -425,6 +426,41 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
0,1,2,3,4,5
|
||||
},
|
||||
},
|
||||
{ // STYLE_DANCE_DOUBLE
|
||||
GAME_DANCE, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
true, // m_bUsedForEdit
|
||||
"dance-edit-couple", // m_szName
|
||||
NOTES_TYPE_DANCE_COUPLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_TWO_CREDITS, // m_StyleType
|
||||
{ 320, 320 }, // m_iCenterX
|
||||
8, // m_iColsPerPlayer
|
||||
{ // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
|
||||
{ // PLAYER_1
|
||||
{ TRACK_1, GAME_CONTROLLER_1, DANCE_BUTTON_LEFT, -DANCE_COL_SPACING*3.5f },
|
||||
{ TRACK_2, GAME_CONTROLLER_1, DANCE_BUTTON_DOWN, -DANCE_COL_SPACING*2.5f },
|
||||
{ TRACK_3, GAME_CONTROLLER_1, DANCE_BUTTON_UP, -DANCE_COL_SPACING*1.5f },
|
||||
{ TRACK_4, GAME_CONTROLLER_1, DANCE_BUTTON_RIGHT, -DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_5, GAME_CONTROLLER_2, DANCE_BUTTON_LEFT, +DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_6, GAME_CONTROLLER_2, DANCE_BUTTON_DOWN, +DANCE_COL_SPACING*1.5f },
|
||||
{ TRACK_7, GAME_CONTROLLER_2, DANCE_BUTTON_UP, +DANCE_COL_SPACING*2.5f },
|
||||
{ TRACK_8, GAME_CONTROLLER_2, DANCE_BUTTON_RIGHT, +DANCE_COL_SPACING*3.5f },
|
||||
},
|
||||
{ // PLAYER_2
|
||||
{ TRACK_1, GAME_CONTROLLER_1, DANCE_BUTTON_LEFT, -DANCE_COL_SPACING*3.5f },
|
||||
{ TRACK_2, GAME_CONTROLLER_1, DANCE_BUTTON_DOWN, -DANCE_COL_SPACING*2.5f },
|
||||
{ TRACK_3, GAME_CONTROLLER_1, DANCE_BUTTON_UP, -DANCE_COL_SPACING*1.5f },
|
||||
{ TRACK_4, GAME_CONTROLLER_1, DANCE_BUTTON_RIGHT, -DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_5, GAME_CONTROLLER_2, DANCE_BUTTON_LEFT, +DANCE_COL_SPACING*0.5f },
|
||||
{ TRACK_6, GAME_CONTROLLER_2, DANCE_BUTTON_DOWN, +DANCE_COL_SPACING*1.5f },
|
||||
{ TRACK_7, GAME_CONTROLLER_2, DANCE_BUTTON_UP, +DANCE_COL_SPACING*2.5f },
|
||||
{ TRACK_8, GAME_CONTROLLER_2, DANCE_BUTTON_RIGHT, +DANCE_COL_SPACING*3.5f },
|
||||
},
|
||||
},
|
||||
{ // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
|
||||
0,1,2,3,4,5,6,7
|
||||
},
|
||||
},
|
||||
/* { // STYLE_DANCE_SOLO_VERSUS
|
||||
"dance-solo-versus", // m_szName
|
||||
NOTES_TYPE_DANCE_SOLO, // m_NotesType
|
||||
@@ -452,9 +488,11 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
{ // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
|
||||
0,5,1,4,2,3 // outside in
|
||||
},
|
||||
},
|
||||
*/ { // PUMP_STYLE_SINGLE
|
||||
}, */
|
||||
{ // PUMP_STYLE_SINGLE
|
||||
GAME_PUMP, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"pump-single", // m_szName
|
||||
NOTES_TYPE_PUMP_SINGLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
|
||||
@@ -482,6 +520,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // PUMP_STYLE_VERSUS
|
||||
GAME_PUMP, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"pump-versus", // m_szName
|
||||
NOTES_TYPE_PUMP_SINGLE, // m_NotesType
|
||||
StyleDef::TWO_PLAYERS_TWO_CREDITS, // m_StyleType
|
||||
@@ -509,6 +549,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // PUMP_STYLE_DOUBLE
|
||||
GAME_PUMP, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"pump-double", // m_szName
|
||||
NOTES_TYPE_PUMP_DOUBLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_TWO_CREDITS, // m_StyleType
|
||||
@@ -548,6 +590,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
|
||||
{ // EZ2_STYLE_SINGLE
|
||||
GAME_EZ2, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"ez2-single", // m_szName
|
||||
NOTES_TYPE_EZ2_SINGLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
|
||||
@@ -575,6 +619,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // EZ2_STYLE_SINGLE_HARD
|
||||
GAME_EZ2, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"ez2-single-hard", // m_szName
|
||||
NOTES_TYPE_EZ2_SINGLE_HARD, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
|
||||
@@ -602,6 +648,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // EZ2_STYLE_DOUBLE
|
||||
GAME_EZ2, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"ez2-double", // m_szName
|
||||
NOTES_TYPE_EZ2_DOUBLE, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_TWO_CREDITS, // m_StyleType
|
||||
@@ -639,6 +687,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // EZ2_STYLE_REAL
|
||||
GAME_EZ2, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"ez2-real", // m_szName
|
||||
NOTES_TYPE_EZ2_REAL, // m_NotesType
|
||||
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
|
||||
@@ -670,6 +720,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // EZ2_STYLE_SINGLE_VERSUS
|
||||
GAME_EZ2, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"ez2-single-versus", // m_szName
|
||||
NOTES_TYPE_EZ2_SINGLE, // m_NotesType
|
||||
StyleDef::TWO_PLAYERS_TWO_CREDITS, // m_StyleType
|
||||
@@ -697,6 +749,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
},
|
||||
{ // EZ2_STYLE_SINGLE_VERSUS
|
||||
GAME_EZ2, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"ez2-single-hard-versus", // m_szName
|
||||
NOTES_TYPE_EZ2_SINGLE_HARD, // m_NotesType
|
||||
StyleDef::TWO_PLAYERS_TWO_CREDITS, // m_StyleType
|
||||
@@ -722,9 +776,10 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
||||
2,0,4,1,3 // This should be from back to front: Down, UpLeft, UpRight, Upper Left Hand, Upper Right Hand
|
||||
},
|
||||
},
|
||||
|
||||
{ // EZ2_STYLE_REAL_VERSUS
|
||||
GAME_EZ2, // m_Game
|
||||
false, // m_bUsedForGameplay
|
||||
false, // m_bUsedForEdit
|
||||
"ez2-real-versus", // m_szName
|
||||
NOTES_TYPE_EZ2_REAL, // m_NotesType
|
||||
StyleDef::TWO_PLAYERS_TWO_CREDITS, // m_StyleType
|
||||
@@ -774,19 +829,19 @@ StyleDef* GameManager::GetStyleDefForStyle( Style s )
|
||||
return &g_StyleDefs[ s ];
|
||||
}
|
||||
|
||||
Style GameManager::GetStyleThatPlaysNotesType( NotesType nt )
|
||||
Style GameManager::GetEditStyleThatPlaysNotesType( NotesType nt )
|
||||
{
|
||||
for( int i=0; i<NUM_STYLES; i++ )
|
||||
if( g_StyleDefs[i].m_NotesType == nt )
|
||||
if( g_StyleDefs[i].m_NotesType == nt && g_StyleDefs[i].m_bUsedForEdit )
|
||||
return (Style)i;
|
||||
|
||||
return STYLE_NONE;
|
||||
}
|
||||
|
||||
void GameManager::GetStylesForGame( Game game, CArray<Style,Style>& aStylesAddTo )
|
||||
void GameManager::GetGameplayStylesForGame( Game game, CArray<Style,Style>& aStylesAddTo )
|
||||
{
|
||||
for( int s=0; s<NUM_STYLES; s++ )
|
||||
if( g_StyleDefs[s].m_Game == game )
|
||||
if( g_StyleDefs[s].m_Game == game && g_StyleDefs[s].m_bUsedForGameplay )
|
||||
aStylesAddTo.Add( (Style)s );
|
||||
}
|
||||
|
||||
|
||||
@@ -24,10 +24,9 @@ public:
|
||||
GameDef* GetGameDefForGame( Game g );
|
||||
StyleDef* GetStyleDefForStyle( Style s );
|
||||
|
||||
Style GetStyleThatPlaysNotesType( NotesType nt );
|
||||
|
||||
void GetStylesForGame( Game game, CArray<Style,Style>& aStylesAddTo );
|
||||
void GetNotesTypesForGame( Game game, CArray<NotesType,NotesType>& aNotesTypeAddTo );
|
||||
void GetGameplayStylesForGame( Game game, CArray<Style,Style>& aStylesAddTo ); // do not include edit-specific
|
||||
void GetNotesTypesForGame( Game game, CArray<NotesType,NotesType>& aNotesTypeAddTo ); // only look at edit-specific styles
|
||||
Style GetEditStyleThatPlaysNotesType( NotesType nt );
|
||||
|
||||
// void GetGameNames( CStringArray &AddTo );
|
||||
// bool DoesGameExist( CString sGameName );
|
||||
|
||||
@@ -259,7 +259,7 @@ void NoteData::AddHoldNote( HoldNote add )
|
||||
|
||||
void NoteData::RemoveHoldNote( int iHoldIndex )
|
||||
{
|
||||
ASSERT( iHoldIndex > 0 && iHoldIndex < m_iNumHoldNotes );
|
||||
ASSERT( iHoldIndex >= 0 && iHoldIndex < m_iNumHoldNotes );
|
||||
|
||||
HoldNote& hn = m_HoldNotes[iHoldIndex];
|
||||
|
||||
|
||||
@@ -194,8 +194,10 @@ void NoteField::DrawPrimitives()
|
||||
//
|
||||
// Draw measure bars
|
||||
//
|
||||
for( float b=fFirstBeatToDraw; b<=fLastBeatToDraw; b+=1 )
|
||||
DrawMeasureBar( int(b) );
|
||||
int iFirstMeasureToDraw = int(fFirstBeatToDraw)/BEATS_PER_MEASURE;
|
||||
int iLastMeasureToDraw = (int(fLastBeatToDraw)/BEATS_PER_MEASURE)+1;
|
||||
for( i=iFirstMeasureToDraw; i<=fLastBeatToDraw; i++ )
|
||||
DrawMeasureBar( i );
|
||||
|
||||
//
|
||||
// BPM text
|
||||
|
||||
@@ -585,6 +585,124 @@ void Notes::WriteSMNotesTag( FILE* fp )
|
||||
fprintf( fp, "%s;\n", m_sSMNoteData );
|
||||
}
|
||||
|
||||
struct DWICharLookup {
|
||||
char c;
|
||||
bool bCol[6];
|
||||
};
|
||||
|
||||
char NotesToDWIChar( bool bCol1, bool bCol2, bool bCol3, bool bCol4, bool bCol5, bool bCol6 )
|
||||
{
|
||||
const DWICharLookup lookup[] = {
|
||||
{ '0', 0, 0, 0, 0, 0, 0 },
|
||||
{ '1', 0, 1, 1, 0, 0, 0 },
|
||||
{ '2', 0, 0, 1, 0, 0, 0 },
|
||||
{ '3', 0, 0, 1, 0, 1, 0 },
|
||||
{ '4', 0, 1, 0, 0, 0, 0 },
|
||||
{ '6', 0, 0, 0, 0, 1, 0 },
|
||||
{ '7', 0, 1, 0, 1, 0, 0 },
|
||||
{ '8', 0, 0, 0, 1, 0, 0 },
|
||||
{ '9', 0, 0, 0, 1, 1, 0 },
|
||||
{ 'A', 0, 0, 1, 1, 0, 0 },
|
||||
{ 'B', 0, 1, 0, 0, 1, 0 },
|
||||
{ 'C', 0, 1, 0, 0, 0, 0 },
|
||||
{ 'D', 0, 0, 0, 0, 1, 0 },
|
||||
{ 'E', 1, 1, 0, 0, 0, 0 },
|
||||
{ 'F', 0, 1, 1, 0, 0, 0 },
|
||||
{ 'G', 0, 1, 0, 1, 0, 0 },
|
||||
{ 'H', 0, 1, 0, 0, 0, 1 },
|
||||
{ 'I', 1, 0, 0, 0, 1, 0 },
|
||||
{ 'J', 0, 0, 1, 0, 1, 0 },
|
||||
{ 'K', 0, 0, 0, 1, 1, 0 },
|
||||
{ 'L', 0, 0, 0, 0, 1, 1 },
|
||||
{ 'M', 0, 1, 0, 0, 1, 0 },
|
||||
};
|
||||
const int iNumLookups = sizeof(lookup) / sizeof(DWICharLookup);
|
||||
|
||||
for( int i=0; i<iNumLookups; i++ )
|
||||
{
|
||||
const DWICharLookup& l = lookup[i];
|
||||
if( l.bCol[0] && bCol1, l.bCol[1] && bCol2, l.bCol[2] && bCol3, l.bCol[3] && bCol4, l.bCol[4] && bCol5, l.bCol[5] && bCol6 )
|
||||
return l.c;
|
||||
}
|
||||
ASSERT(0);
|
||||
return '0';
|
||||
}
|
||||
|
||||
char NotesToDWIChar( bool bCol1, bool bCol2, bool bCol3, bool bCol4 )
|
||||
{
|
||||
return NotesToDWIChar( 0, bCol1, bCol2, bCol3, bCol4, 0 );
|
||||
}
|
||||
|
||||
CString NotesToDWIString( int iNoteCol1, int iNoteCol2, int iNoteCol3, int iNoteCol4, int iNoteCol5, int iNoteCol6 )
|
||||
{
|
||||
char cShow = NotesToDWIChar( iNoteCol1!=0, iNoteCol2!=0, iNoteCol3!=0, iNoteCol4!=0, iNoteCol5!=0, iNoteCol6!=0 );
|
||||
char cHold = NotesToDWIChar( iNoteCol1==2, iNoteCol2==2, iNoteCol3==2, iNoteCol4==2, iNoteCol5==2, iNoteCol6==2 );
|
||||
|
||||
if( cHold != '0' )
|
||||
return ssprintf( "%c!%c", cShow, cHold );
|
||||
else
|
||||
return cShow;
|
||||
}
|
||||
|
||||
CString NotesToDWIString( int iNoteCol1, int iNoteCol2, int iNoteCol3, int iNoteCol4 )
|
||||
{
|
||||
return NotesToDWIString( 0, iNoteCol1, iNoteCol2, iNoteCol3, iNoteCol4, 0 );
|
||||
}
|
||||
|
||||
void Notes::WriteDWINotesTag( FILE* fp )
|
||||
{
|
||||
switch( m_NotesType )
|
||||
{
|
||||
case NOTES_TYPE_DANCE_SINGLE: fprintf( fp, "#SINGLE:" ); break;
|
||||
case NOTES_TYPE_DANCE_COUPLE: fprintf( fp, "#COUPLE:" ); break;
|
||||
case NOTES_TYPE_DANCE_DOUBLE: fprintf( fp, "#DOUBLE:" ); break;
|
||||
case NOTES_TYPE_DANCE_SOLO: fprintf( fp, "#SOLO:" ); break;
|
||||
default: return; // not a type supported by DWI
|
||||
}
|
||||
|
||||
switch( m_DifficultyClass )
|
||||
{
|
||||
case CLASS_EASY: fprintf( fp, "BASIC:" ); break;
|
||||
case CLASS_MEDIUM: fprintf( fp, "ANOTHER:" ); break;
|
||||
case CLASS_HARD: fprintf( fp, "MANIAC:" ); break;
|
||||
default: ASSERT(0); return;
|
||||
}
|
||||
|
||||
fprintf( fp, "%d:\n", m_iMeter );
|
||||
|
||||
NoteData notedata;
|
||||
this->GetNoteData( ¬edata );
|
||||
notedata.ConvertHoldNotesTo2sAnd3s();
|
||||
|
||||
fprintf( fp, "<" ); // begin a 48th note series
|
||||
for( int r=0; r<notedata.GetLastRow(); r++ )
|
||||
{
|
||||
switch( m_NotesType )
|
||||
{
|
||||
case NOTES_TYPE_DANCE_SINGLE:
|
||||
case NOTES_TYPE_DANCE_COUPLE:
|
||||
case NOTES_TYPE_DANCE_DOUBLE:
|
||||
fprintf( fp, NotesToDWIString( notedata.m_TapNotes[0][r], notedata.m_TapNotes[1][r], notedata.m_TapNotes[2][r], notedata.m_TapNotes[3][r] ) );
|
||||
break;
|
||||
case NOTES_TYPE_DANCE_SOLO:
|
||||
fprintf( fp, NotesToDWIString( notedata.m_TapNotes[0][r], notedata.m_TapNotes[1][r], notedata.m_TapNotes[2][r], notedata.m_TapNotes[3][r], notedata.m_TapNotes[4][r], notedata.m_TapNotes[5][r] ) );
|
||||
break;
|
||||
default: return; // not a type supported by DWI
|
||||
}
|
||||
}
|
||||
fprintf( fp, "<" ); // end a 48th note series
|
||||
|
||||
if( m_NotesType == NOTES_TYPE_DANCE_COUPLE || m_NotesType == NOTES_TYPE_DANCE_DOUBLE )
|
||||
{
|
||||
fprintf( fp, ":" );
|
||||
fprintf( fp, "<" ); // begin a 48th note series
|
||||
for( int r=0; r<notedata.GetLastRow(); r++ )
|
||||
fprintf( fp, NotesToDWIString( notedata.m_TapNotes[4][r], notedata.m_TapNotes[5][r], notedata.m_TapNotes[6][r], notedata.m_TapNotes[7][r] ) );
|
||||
}
|
||||
|
||||
fprintf( fp, ">" ); // end series
|
||||
}
|
||||
|
||||
void Notes::SetNoteData( NoteData* pNewNoteData )
|
||||
{
|
||||
ASSERT( pNewNoteData->m_iNumTracks == NotesTypeToNumTracks(m_NotesType) );
|
||||
|
||||
@@ -42,6 +42,7 @@ public:
|
||||
CString sNoteDataOut
|
||||
);
|
||||
void WriteSMNotesTag( FILE* fp );
|
||||
void WriteDWINotesTag( FILE* fp );
|
||||
|
||||
public:
|
||||
NotesType m_NotesType;
|
||||
|
||||
@@ -302,15 +302,12 @@ void Player::Step( int col )
|
||||
int iCurrentIndexEarlier = iIndexStartLookingAt - delta;
|
||||
int iCurrentIndexLater = iIndexStartLookingAt + delta;
|
||||
|
||||
// silly check to make sure we don't go out of bounds
|
||||
iCurrentIndexEarlier = clamp( iCurrentIndexEarlier, 0, MAX_TAP_NOTE_ROWS-1 );
|
||||
iCurrentIndexLater = clamp( iCurrentIndexLater, 0, MAX_TAP_NOTE_ROWS-1 );
|
||||
|
||||
////////////////////////////
|
||||
// check the step to the left of iIndexStartLookingAt
|
||||
////////////////////////////
|
||||
//LOG->Trace( "Checking Notes[%d]", iCurrentIndexEarlier );
|
||||
if( m_TapNotes[col][iCurrentIndexEarlier] != '0' && // there is a note here
|
||||
if( iCurrentIndexEarlier >= 0 &&
|
||||
m_TapNotes[col][iCurrentIndexEarlier] != '0' && // there is a note here
|
||||
m_TapNoteScores[col][iCurrentIndexEarlier] == TNS_NONE ) // this note doesn't have a score
|
||||
{
|
||||
iIndexOverlappingNote = iCurrentIndexEarlier;
|
||||
@@ -322,7 +319,8 @@ void Player::Step( int col )
|
||||
// check the step to the right of iIndexStartLookingAt
|
||||
////////////////////////////
|
||||
//LOG->Trace( "Checking Notes[%d]", iCurrentIndexLater );
|
||||
if( m_TapNotes[col][iCurrentIndexLater] != '0' && // there is a note here
|
||||
if( iCurrentIndexLater >= 0 &&
|
||||
m_TapNotes[col][iCurrentIndexLater] != '0' && // there is a note here
|
||||
m_TapNoteScores[col][iCurrentIndexLater] == TNS_NONE ) // this note doesn't have a score
|
||||
{
|
||||
iIndexOverlappingNote = iCurrentIndexLater;
|
||||
|
||||
@@ -22,9 +22,13 @@ PrefsManager* PREFSMAN = NULL; // global and accessable from anywhere in our pro
|
||||
|
||||
PrefsManager::PrefsManager()
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
m_bWindowed = true;
|
||||
#else
|
||||
m_bWindowed = false;
|
||||
#endif
|
||||
m_iDisplayResolution = 640;
|
||||
m_iTextureResolution = 512;
|
||||
m_iTextureResolution = 1024;
|
||||
m_iRefreshRate = 0;
|
||||
m_bIgnoreJoyAxes = false;
|
||||
m_bOnlyDedicatedMenuButtons = false;
|
||||
|
||||
+613
-468
File diff suppressed because it is too large
Load Diff
@@ -22,6 +22,9 @@
|
||||
#include "SnapDisplay.h"
|
||||
|
||||
|
||||
const int NUM_MENU_ITEMS = 19;
|
||||
|
||||
|
||||
class ScreenEdit : public Screen
|
||||
{
|
||||
public:
|
||||
@@ -31,6 +34,7 @@ public:
|
||||
virtual void DrawPrimitives();
|
||||
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputMenu( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputRecord( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputPlay( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||
@@ -39,9 +43,10 @@ public:
|
||||
|
||||
protected:
|
||||
void OnSnapModeChange();
|
||||
void MenuItemGainFocus( int iItemIndex );
|
||||
void MenuItemLoseFocus( int iItemIndex );
|
||||
|
||||
|
||||
enum EditMode { MODE_EDITING, MODE_RECORDING, MODE_PLAYING };
|
||||
enum EditMode { MODE_EDITING, MODE_MENU, MODE_RECORDING, MODE_PLAYING };
|
||||
EditMode m_EditMode;
|
||||
|
||||
Song* m_pSong;
|
||||
@@ -55,6 +60,7 @@ protected:
|
||||
|
||||
BitmapText m_textInfo; // status information that changes
|
||||
BitmapText m_textHelp;
|
||||
BitmapText m_textShortcuts;
|
||||
|
||||
// keep track of where we are and what we're doing
|
||||
float m_fTrailingBeat; // this approaches GAMESTATE->m_fSongBeat, which is the actual beat
|
||||
@@ -71,7 +77,6 @@ protected:
|
||||
|
||||
// for MODE_RECORD
|
||||
|
||||
Quad m_rectRecordBack;
|
||||
NoteField m_NoteFieldRecord;
|
||||
GrayArrowRow m_GrayArrowRowRecord;
|
||||
|
||||
@@ -81,8 +86,11 @@ protected:
|
||||
|
||||
// for MODE_RECORD and MODE_PLAY
|
||||
|
||||
Quad m_rectRecordBack;
|
||||
RageSoundStream m_soundMusic;
|
||||
bool m_bLayingAHold[MAX_NOTE_TRACKS];
|
||||
|
||||
int m_iMenuSelection;
|
||||
BitmapText m_textMenu[NUM_MENU_ITEMS];
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ void ScreenEditMenu::HandleScreenMessage( const ScreenMessage SM )
|
||||
// Set the current Style, then let ScreenEdit infer the desired
|
||||
// NotesType from that Style.
|
||||
NotesType nt = GetSelectedNotesType();
|
||||
Style style = GAMEMAN->GetStyleThatPlaysNotesType( nt );
|
||||
Style style = GAMEMAN->GetEditStyleThatPlaysNotesType( nt );
|
||||
GAMESTATE->m_CurStyle = style;
|
||||
GAMESTATE->m_CurGame = GAMEMAN->GetStyleDefForStyle(style)->m_Game;
|
||||
|
||||
@@ -358,7 +358,7 @@ void ScreenEditMenu::MenuStart( const PlayerNumber p )
|
||||
|
||||
// find the first style that matches this notes type
|
||||
GameDef* pGameDef = GAMESTATE->GetCurrentGameDef();
|
||||
GAMESTATE->m_CurStyle = GAMEMAN->GetStyleThatPlaysNotesType( GetSelectedNotesType() );
|
||||
GAMESTATE->m_CurStyle = GAMEMAN->GetEditStyleThatPlaysNotesType( GetSelectedNotesType() );
|
||||
GAMESTATE->m_pCurNotes[PLAYER_1] = GetSelectedNotes();
|
||||
|
||||
m_soundSelect.PlayRandom();
|
||||
|
||||
@@ -53,7 +53,7 @@ ScreenSelectStyle::ScreenSelectStyle()
|
||||
GAMESTATE->m_CurStyle = STYLE_NONE;
|
||||
GAMESTATE->m_bPlayersCanJoin = true;
|
||||
|
||||
GAMEMAN->GetStylesForGame( GAMESTATE->m_CurGame, m_aPossibleStyles );
|
||||
GAMEMAN->GetGameplayStylesForGame( GAMESTATE->m_CurGame, m_aPossibleStyles );
|
||||
m_iSelection = 0;
|
||||
|
||||
for( int i=0; i<m_aPossibleStyles.GetSize(); i++ )
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include "ScreenMapInstruments.h"
|
||||
#include "ScreenGraphicOptions.h"
|
||||
#include "ScreenGameOptions.h"
|
||||
#include "ScreenEdit.h"
|
||||
#include "GameConstantsAndTypes.h"
|
||||
#include "RageUtil.h"
|
||||
#include "StepMania.h"
|
||||
@@ -91,12 +90,21 @@ ScreenTitleMenu::ScreenTitleMenu()
|
||||
}
|
||||
if( !THEME->DoesThemeExist( THEME->GetCurThemeName() ) )
|
||||
{
|
||||
CStringArray asThemeNames;
|
||||
THEME->GetThemeNamesForCurGame( asThemeNames );
|
||||
THEME->SwitchTheme( asThemeNames[0] );
|
||||
CString sGameName = GAMESTATE->GetCurrentGameDef()->m_szName;
|
||||
if( THEME->DoesThemeExist( sGameName ) )
|
||||
{
|
||||
THEME->SwitchTheme( sGameName );
|
||||
}
|
||||
else
|
||||
{
|
||||
CStringArray asThemeNames;
|
||||
THEME->GetThemeNamesForCurGame( asThemeNames );
|
||||
THEME->SwitchTheme( asThemeNames[0] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
m_sprBG.Load( THEME->GetPathTo("Graphics","title menu background") );
|
||||
m_sprBG.StretchTo( CRect(0,0,SCREEN_WIDTH,SCREEN_HEIGHT) );
|
||||
this->AddSubActor( &m_sprBG );
|
||||
|
||||
@@ -36,7 +36,7 @@ SnapDisplay::SnapDisplay()
|
||||
m_iNumCols = 0;
|
||||
}
|
||||
|
||||
void SnapDisplay::Load()
|
||||
void SnapDisplay::Load( PlayerNumber pn )
|
||||
{
|
||||
m_iNumCols = GAMESTATE->GetCurrentStyleDef()->m_iColsPerPlayer;
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class SnapDisplay : public ActorFrame
|
||||
public:
|
||||
SnapDisplay();
|
||||
|
||||
void Load();
|
||||
void Load( PlayerNumber pn );
|
||||
|
||||
bool PrevSnapMode();
|
||||
bool NextSnapMode();
|
||||
|
||||
@@ -1315,6 +1315,55 @@ void Song::SaveToSMFile( CString sPath )
|
||||
fclose( fp );
|
||||
}
|
||||
|
||||
void Song::SaveToSMAndDWIFile()
|
||||
{
|
||||
LOG->Trace( "Song::SaveToSMAndDWIFile()" );
|
||||
|
||||
SaveToSMFile();
|
||||
|
||||
CString sPath = GetSongFilePath();
|
||||
sPath.Replace( ".sm", ".dwi" );
|
||||
|
||||
|
||||
FILE* fp = fopen( sPath, "w" );
|
||||
if( fp == NULL )
|
||||
throw RageException( "Error opening song file '%s' for writing.", sPath );
|
||||
|
||||
fprintf( fp, "#TITLE:%s;\n", GetFullTitle() );
|
||||
fprintf( fp, "#ARTIST:%s;\n", m_sArtist );
|
||||
ASSERT( m_BPMSegments[0].m_fStartBeat == 0 );
|
||||
fprintf( fp, "#BPM:%.2f;\n", m_BPMSegments[0].m_fBPM );
|
||||
fprintf( fp, "#GAP:%d;\n", -roundf( m_fBeat0OffsetInSeconds*1000 ) );
|
||||
|
||||
fprintf( fp, "#FREEZE:" );
|
||||
for( int i=0; i<m_StopSegments.GetSize(); i++ )
|
||||
{
|
||||
StopSegment &fs = m_StopSegments[i];
|
||||
fprintf( fp, "%.2f=%.2f", BeatToNoteRow( fs.m_fStartBeat ) / ELEMENTS_PER_BEAT * 4.0f, roundf(fs.m_fStopSeconds*1000) );
|
||||
if( i != m_StopSegments.GetSize()-1 )
|
||||
fprintf( fp, "," );
|
||||
}
|
||||
fprintf( fp, ";\n" );
|
||||
|
||||
fprintf( fp, "#CHANGEBPM:" );
|
||||
for( i=1; i<m_BPMSegments.GetSize(); i++ )
|
||||
{
|
||||
BPMSegment &bs = m_BPMSegments[i];
|
||||
fprintf( fp, "%.2f=%.2f", BeatToNoteRow( bs.m_fStartBeat ) / ELEMENTS_PER_BEAT * 4.0f, bs.m_fBPM );
|
||||
if( i != m_BPMSegments.GetSize()-1 )
|
||||
fprintf( fp, "," );
|
||||
}
|
||||
fprintf( fp, ";\n" );
|
||||
|
||||
//
|
||||
// Save all Notes for this file
|
||||
//
|
||||
for( i=0; i<m_apNotes.GetSize(); i++ )
|
||||
m_apNotes[i]->WriteDWINotesTag( fp );
|
||||
|
||||
fclose( fp );
|
||||
}
|
||||
|
||||
Grade Song::GetGradeForDifficultyClass( NotesType nt, DifficultyClass dc )
|
||||
{
|
||||
CArray<Notes*, Notes*> aNotes;
|
||||
|
||||
@@ -17,6 +17,7 @@ enum Style
|
||||
STYLE_DANCE_DOUBLE,
|
||||
STYLE_DANCE_COUPLE,
|
||||
STYLE_DANCE_SOLO,
|
||||
STYLE_DANCE_EDIT_COUPLE,
|
||||
STYLE_PUMP_SINGLE,
|
||||
STYLE_PUMP_VERSUS,
|
||||
STYLE_PUMP_DOUBLE,
|
||||
|
||||
@@ -35,10 +35,12 @@ class GameDef;
|
||||
class StyleDef
|
||||
{
|
||||
public:
|
||||
Game m_Game; // Game this style is active under
|
||||
Game m_Game; // Which Game is this Style used with?
|
||||
bool m_bUsedForGameplay; // Can be used only for gameplay?
|
||||
bool m_bUsedForEdit; // Can be used for editing?
|
||||
char m_szName[60];
|
||||
NotesType m_NotesType; // the notes format that this style reads.
|
||||
// For example, the "dance versus" reads the Notes with the tag "dance-single".
|
||||
NotesType m_NotesType; // the notes format that this style reads.
|
||||
// For example, the "dance versus" reads the Notes with the tag "dance-single".
|
||||
enum StyleType
|
||||
{
|
||||
ONE_PLAYER_ONE_CREDIT, // e.g. single
|
||||
|
||||
@@ -57,6 +57,7 @@ public:
|
||||
void TidyUpData(); // call after loading to clean up invalid data
|
||||
|
||||
void SaveToSMFile( CString sPath = "" ); // no path means save to SongFilePath
|
||||
void SaveToSMAndDWIFile(); // saves SM, then saves DWI so that the SM is the master copy and NoteTypes not supported by DWI are not lost
|
||||
void SaveToCacheFile();
|
||||
|
||||
CString GetSongFilePath();
|
||||
|
||||
Reference in New Issue
Block a user