diff --git a/stepmania/src/Game.h b/stepmania/src/Game.h index 9fdcb7af6b..4aac82d887 100644 --- a/stepmania/src/Game.h +++ b/stepmania/src/Game.h @@ -13,13 +13,15 @@ enum Game { - GAME_DANCE, // Dance Dance Revolution - GAME_PUMP, // Pump It Up - GAME_EZ2, // Ez2dancer - GAME_PARA, // ParaPAraParadise - GAME_DS3DDX, // Dance Station 3DDX. - GAME_BM, // Beatmania - NUM_GAMES, // leave this at the end + GAME_DANCE, // Dance Dance Revolution + GAME_PUMP, // Pump It Up + GAME_EZ2, // Ez2dancer + GAME_PARA, // ParaPAraParadise + GAME_DS3DDX, // Dance Station 3DDX. + GAME_BM, // Beatmania + GAME_MANIAX, // DanceManiax + GAME_TECHNO, // TechnoMotion + NUM_GAMES, // leave this at the end GAME_INVALID, }; diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index 95f2df85f6..46e6170deb 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -79,6 +79,9 @@ enum StepsType STEPS_TYPE_PARA_SINGLE, STEPS_TYPE_DS3DDX_SINGLE, STEPS_TYPE_BM_SINGLE, + STEPS_TYPE_MANIAX_SINGLE, + STEPS_TYPE_MANIAX_DOUBLE, + STEPS_TYPE_TECHNO_SINGLE8, NUM_STEPS_TYPES, // leave this at the end STEPS_TYPE_INVALID, }; diff --git a/stepmania/src/GameInput.h b/stepmania/src/GameInput.h index 63c1ac3904..bb82eb166b 100644 --- a/stepmania/src/GameInput.h +++ b/stepmania/src/GameInput.h @@ -140,6 +140,45 @@ enum // BM Buttons NUM_BM_BUTTONS, // leave this at the end. }; +enum // ManiaxButtons +{ + MANIAX_BUTTON_HANDUPLEFT, + MANIAX_BUTTON_HANDUPRIGHT, + MANIAX_BUTTON_HANDLRLEFT, + MANIAX_BUTTON_HANDLRRIGHT, + MANIAX_BUTTON_START, + MANIAX_BUTTON_BACK, + MANIAX_BUTTON_MENULEFT, + MANIAX_BUTTON_MENURIGHT, + MANIAX_BUTTON_MENUUP, + MANIAX_BUTTON_MENUDOWN, + MANIAX_BUTTON_COIN, + MANIAX_BUTTON_OPERATOR, + NUM_MANIAX_BUTTONS, // leave this at the end +}; + +enum // TechnoButtons +{ + TECHNO_BUTTON_LEFT, + TECHNO_BUTTON_RIGHT, + TECHNO_BUTTON_UP, + TECHNO_BUTTON_DOWN, + TECHNO_BUTTON_UPLEFT, + TECHNO_BUTTON_UPRIGHT, + TECHNO_BUTTON_CENTER, + TECHNO_BUTTON_DOWNLEFT, + TECHNO_BUTTON_DOWNRIGHT, + TECHNO_BUTTON_START, + TECHNO_BUTTON_BACK, + TECHNO_BUTTON_MENULEFT, + TECHNO_BUTTON_MENURIGHT, + TECHNO_BUTTON_MENUUP, + TECHNO_BUTTON_MENUDOWN, + TECHNO_BUTTON_COIN, + TECHNO_BUTTON_OPERATOR, + NUM_TECHNO_BUTTONS, // leave this at the end +}; + const GameButton MAX_GAME_BUTTONS = 20; const GameButton GAME_BUTTON_INVALID = MAX_GAME_BUTTONS+1; diff --git a/stepmania/src/GameManager.cpp b/stepmania/src/GameManager.cpp index c987d8f4d7..daf7f010c2 100644 --- a/stepmania/src/GameManager.cpp +++ b/stepmania/src/GameManager.cpp @@ -26,32 +26,36 @@ 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; const int PUMP_COL_SPACING = 50; const int EZ2_COL_SPACING = 46; const int EZ2_REAL_COL_SPACING = 40; const int PARA_COL_SPACING = 54; const int DS3DDX_COL_SPACING = 46; const int BM_COL_SPACING=34; +const int MANIAX_COL_SPACING = 36; +const int TECHNO_COL_SPACING = 64; struct { char *name; int NumTracks; } const NotesTypes[NUM_STEPS_TYPES] = { - { "dance-single", 4 }, - { "dance-double", 8 }, - { "dance-couple", 8 }, - { "dance-solo", 6 }, - { "pump-single", 5 }, - { "pump-halfdouble", 6 }, - { "pump-double", 10 }, - { "pump-couple", 10 }, - { "ez2-single", 5 }, // Single: TL,LHH,D,RHH,TR - { "ez2-double", 10 }, // Double: Single x2 - { "ez2-real", 7 }, // Real: TL,LHH,LHL,D,RHL,RHH,TR - { "para-single", 5 }, - { "ds3ddx-single", 8 }, - { "bm-single", 6 } + { "dance-single", 4 }, + { "dance-double", 8 }, + { "dance-couple", 8 }, + { "dance-solo", 6 }, + { "pump-single", 5 }, + { "pump-halfdouble",6 }, + { "pump-double", 10 }, + { "pump-couple", 10 }, + { "ez2-single", 5 }, // Single: TL,LHH,D,RHH,TR + { "ez2-double", 10 }, // Double: Single x2 + { "ez2-real", 7 }, // Real: TL,LHH,LHL,D,RHL,RHH,TR + { "para-single", 5 }, + { "ds3ddx-single", 8 }, + { "bm-single", 6 }, + { "maniax-single", 4 }, + { "maniax-double", 8 }, + { "techno-single8", 8 }, }; // @@ -628,6 +632,192 @@ GameDef g_GameDefs[NUM_GAMES] = }, } }, + { // GAME_MANIAX + "maniax", // m_szName + "Dance Maniax", // m_szDescription + 2, // m_iNumControllers + NUM_MANIAX_BUTTONS, // m_iButtonsPerController + { // m_szButtonNames + "HandUpLeft", + "HandUpRight", + "HandLrLeft", + "HandLrRight", + "Start", + "Back", + "MenuLeft", + "MenuRight", + "MenuUp", + "MenuDown", + "Insert Coin", + "Operator", + }, + { // m_szSecondaryFunction + "(MenuLeft)", + "(MenuRight)", + "(MenuDown)", + "(MenuUp)", + "", + "", + "(dedicated)", + "(dedicated)", + "(dedicated)", + "(dedicated)", + "", + "", + }, + { // m_DedicatedMenuButton + MANIAX_BUTTON_MENULEFT, // MENU_BUTTON_LEFT + MANIAX_BUTTON_MENURIGHT, // MENU_BUTTON_RIGHT + MANIAX_BUTTON_MENUUP, // MENU_BUTTON_UP + MANIAX_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN + MANIAX_BUTTON_START, // MENU_BUTTON_START + MANIAX_BUTTON_BACK, // MENU_BUTTON_BACK + MANIAX_BUTTON_COIN, // MENU_BUTTON_COIN + MANIAX_BUTTON_OPERATOR // MENU_BUTTON_OPERATOR + }, + { // m_SecondaryMenuButton + MANIAX_BUTTON_HANDUPLEFT, // MENU_BUTTON_LEFT + MANIAX_BUTTON_HANDUPRIGHT, // MENU_BUTTON_RIGHT + MANIAX_BUTTON_HANDLRRIGHT, // MENU_BUTTON_UP + MANIAX_BUTTON_HANDLRLEFT, // MENU_BUTTON_DOWN + MANIAX_BUTTON_START, // MENU_BUTTON_START + MANIAX_BUTTON_BACK, // MENU_BUTTON_BACK + MANIAX_BUTTON_COIN, // MENU_BUTTON_COIN + MANIAX_BUTTON_OPERATOR, // MENU_BUTTON_OPERATOR + }, + { // m_iDefaultKeyboardKey + { // PLAYER_1 + SDLK_a, // MANIAX_BUTTON_HANDUPLEFT, + SDLK_s, // MANIAX_BUTTON_HANDUPRIGHT, + SDLK_z, // MANIAX_BUTTON_HANDLRLEFT, + SDLK_x, // MANIAX_BUTTON_HANDLRRIGHT, + SDLK_RETURN, // MANIAX_BUTTON_START, + SDLK_ESCAPE, // MANIAX_BUTTON_BACK + SDLK_LEFT, // MANIAX_BUTTON_MENULEFT + SDLK_RIGHT, // MANIAX_BUTTON_MENURIGHT + SDLK_UP, // MANIAX_BUTTON_MENUUP + SDLK_DOWN, // MANIAX_BUTTON_MENUDOWN + SDLK_F1, // MANIAX_BUTTON_COIN + SDLK_SCROLLOCK // MANIAX_BUTTON_OPERATOR + }, + { // PLAYER_2 + SDLK_KP4, // MANIAX_BUTTON_HANDUPLEFT, + SDLK_KP5, // MANIAX_BUTTON_HANDUPRIGHT, + SDLK_KP1, // MANIAX_BUTTON_HANDLRLEFT, + SDLK_KP2, // MANIAX_BUTTON_HANDLRRIGHT, + SDLK_KP_ENTER, // MANIAX_BUTTON_START, + SDLK_KP0, // MANIAX_BUTTON_BACK + SDLK_KP_DIVIDE, // MANIAX_BUTTON_MENULEFT + SDLK_KP_MULTIPLY, // MANIAX_BUTTON_MENURIGHT + SDLK_KP_MINUS, // MANIAX_BUTTON_MENUUP + SDLK_KP_PLUS, // MANIAX_BUTTON_MENUDOWN + SDLK_F2, // MANIAX_BUTTON_COIN + -1 // MANIAX_BUTTON_OPERATOR + }, + } + }, + { // GAME_MANIAX + "techno", // m_szName + "TechnoMotion", // m_szDescription + 2, // m_iNumControllers + NUM_TECHNO_BUTTONS, // m_iButtonsPerController + { // m_szButtonNames + "Left", + "Right", + "Up", + "Down", + "UpLeft", + "UpRight", + "Center", + "DownLeft", + "DownRight", + "Start", + "Back", + "MenuLeft", + "MenuRight", + "MenuUp", + "MenuDown", + "Insert Coin", + "Operator", + }, + { // m_szSecondaryFunction + "(MenuLeft)", + "(MenuRight)", + "(MenuDown)", + "(MenuUp)", + "", + "", + "", + "", + "", + "(dedicated)", + "(dedicated)", + "(dedicated)", + "(dedicated)", + "", + "", + }, + { // m_DedicatedMenuButton + TECHNO_BUTTON_MENULEFT, // MENU_BUTTON_LEFT + TECHNO_BUTTON_MENURIGHT, // MENU_BUTTON_RIGHT + TECHNO_BUTTON_MENUUP, // MENU_BUTTON_UP + TECHNO_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN + TECHNO_BUTTON_START, // MENU_BUTTON_START + TECHNO_BUTTON_BACK, // MENU_BUTTON_BACK + TECHNO_BUTTON_COIN, // MENU_BUTTON_COIN + TECHNO_BUTTON_OPERATOR // MENU_BUTTON_OPERATOR + }, + { // m_SecondaryMenuButton + TECHNO_BUTTON_LEFT, // MENU_BUTTON_LEFT + TECHNO_BUTTON_RIGHT, // MENU_BUTTON_RIGHT + TECHNO_BUTTON_UP, // MENU_BUTTON_UP + TECHNO_BUTTON_DOWN, // MENU_BUTTON_DOWN + TECHNO_BUTTON_START, // MENU_BUTTON_START + TECHNO_BUTTON_BACK, // MENU_BUTTON_BACK + TECHNO_BUTTON_COIN, // MENU_BUTTON_COIN + TECHNO_BUTTON_OPERATOR, // MENU_BUTTON_OPERATOR + }, + { // m_iDefaultKeyboardKey + { // PLAYER_1 + SDLK_a, // TECHNO_BUTTON_LEFT, + SDLK_d, // TECHNO_BUTTON_RIGHT, + SDLK_w, // TECHNO_BUTTON_UP, + SDLK_x, // TECHNO_BUTTON_DOWN, + SDLK_q, // TECHNO_BUTTON_UPLEFT, + SDLK_e, // TECHNO_BUTTON_UPRIGHT, + SDLK_s, // TECHNO_BUTTON_CENTER, + SDLK_z, // TECHNO_BUTTON_DOWNLEFT, + SDLK_c, // TECHNO_BUTTON_DOWNRIGHT, + SDLK_RETURN, // TECHNO_BUTTON_START, + SDLK_ESCAPE, // TECHNO_BUTTON_BACK + SDLK_LEFT, // TECHNO_BUTTON_MENULEFT + SDLK_RIGHT, // TECHNO_BUTTON_MENURIGHT + SDLK_UP, // TECHNO_BUTTON_MENUUP + SDLK_DOWN, // TECHNO_BUTTON_MENUDOWN + SDLK_F1, // TECHNO_BUTTON_COIN + SDLK_SCROLLOCK // TECHNO_BUTTON_OPERATOR + }, + { // PLAYER_2 + SDLK_KP4, // TECHNO_BUTTON_LEFT, + SDLK_KP6, // TECHNO_BUTTON_RIGHT, + SDLK_KP8, // TECHNO_BUTTON_UP, + SDLK_KP2, // TECHNO_BUTTON_DOWN, + SDLK_KP7, // TECHNO_BUTTON_UPLEFT, + SDLK_KP9, // TECHNO_BUTTON_UPRIGHT, + SDLK_KP5, // TECHNO_BUTTON_CENTER, + SDLK_KP1, // TECHNO_BUTTON_DOWNLEFT, + SDLK_KP3, // TECHNO_BUTTON_DOWNRIGHT, + SDLK_KP_ENTER, // TECHNO_BUTTON_START, + SDLK_KP0, // TECHNO_BUTTON_BACK + SDLK_KP_DIVIDE, // TECHNO_BUTTON_MENULEFT + SDLK_KP_MULTIPLY, // TECHNO_BUTTON_MENURIGHT + SDLK_KP_MINUS, // TECHNO_BUTTON_MENUUP + SDLK_KP_PLUS, // TECHNO_BUTTON_MENUDOWN + SDLK_F2, // TECHNO_BUTTON_COIN + -1 // TECHNO_BUTTON_OPERATOR + }, + } + }, }; StyleDef g_StyleDefs[NUM_STYLES] = @@ -721,7 +911,7 @@ StyleDef g_StyleDefs[NUM_STYLES] = 0,1,2,3,4,5,6,7 }, }, - { // StyleDef + { // STYLE_DANCE_COUPLE GAME_DANCE, // m_Game true, // m_bUsedForGameplay false, // m_bUsedForEdit @@ -1260,7 +1450,7 @@ StyleDef g_StyleDefs[NUM_STYLES] = 0,1,2,3,4,5,6,7 }, }, - { + { // STYLE_BM_SINGLE GAME_BM, // m_Game true, // m_bUsedForGameplay true, // m_bUsedForEdit @@ -1290,272 +1480,134 @@ StyleDef g_StyleDefs[NUM_STYLES] = { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; 0,1,2,3,4,5 }, - } + }, + { // STYLE_MANIAX_SINGLE + GAME_MANIAX, // m_Game + true, // m_bUsedForGameplay + true, // m_bUsedForEdit + "single", // m_szName + STEPS_TYPE_MANIAX_SINGLE, // m_StepsType + 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, MANIAX_BUTTON_HANDLRLEFT, -MANIAX_COL_SPACING*1.5f }, + { TRACK_2, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPLEFT, -MANIAX_COL_SPACING*0.5f }, + { TRACK_3, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPRIGHT, +MANIAX_COL_SPACING*0.5f }, + { TRACK_4, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDLRRIGHT, +MANIAX_COL_SPACING*1.5f }, + }, + { // PLAYER_2 + { TRACK_1, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRLEFT, -MANIAX_COL_SPACING*1.5f }, + { TRACK_2, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPLEFT, -MANIAX_COL_SPACING*0.5f }, + { TRACK_3, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPRIGHT, +MANIAX_COL_SPACING*0.5f }, + { TRACK_4, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRRIGHT, +MANIAX_COL_SPACING*1.5f }, + }, + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3 + }, + }, + { // STYLE_MANIAX_VERSUS + GAME_MANIAX, // m_Game + true, // m_bUsedForGameplay + false, // m_bUsedForEdit + "versus", // m_szName + STEPS_TYPE_MANIAX_SINGLE, // m_StepsType + 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, MANIAX_BUTTON_HANDLRLEFT, -MANIAX_COL_SPACING*1.5f }, + { TRACK_2, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPLEFT, -MANIAX_COL_SPACING*0.5f }, + { TRACK_3, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPRIGHT, +MANIAX_COL_SPACING*0.5f }, + { TRACK_4, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDLRRIGHT, +MANIAX_COL_SPACING*1.5f }, + }, + { // PLAYER_2 + { TRACK_1, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRLEFT, -MANIAX_COL_SPACING*1.5f }, + { TRACK_2, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPLEFT, -MANIAX_COL_SPACING*0.5f }, + { TRACK_3, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPRIGHT, +MANIAX_COL_SPACING*0.5f }, + { TRACK_4, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRRIGHT, +MANIAX_COL_SPACING*1.5f }, + }, + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3 + }, + }, + { // STYLE_MANIAX_DOUBLE + GAME_MANIAX, // m_Game + true, // m_bUsedForGameplay + true, // m_bUsedForEdit + "double", // m_szName + STEPS_TYPE_MANIAX_DOUBLE, // m_StepsType + 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, MANIAX_BUTTON_HANDLRLEFT, -MANIAX_COL_SPACING*3.5f }, + { TRACK_2, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPLEFT, -MANIAX_COL_SPACING*2.5f }, + { TRACK_3, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPRIGHT, -MANIAX_COL_SPACING*1.5f }, + { TRACK_4, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDLRRIGHT, -MANIAX_COL_SPACING*0.5f }, + { TRACK_5, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRLEFT, +MANIAX_COL_SPACING*0.5f }, + { TRACK_6, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPLEFT, +MANIAX_COL_SPACING*1.5f }, + { TRACK_7, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPRIGHT, +MANIAX_COL_SPACING*2.5f }, + { TRACK_8, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRRIGHT, +MANIAX_COL_SPACING*3.5f }, + }, + { // PLAYER_2 + { TRACK_1, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDLRLEFT, -MANIAX_COL_SPACING*3.5f }, + { TRACK_2, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPLEFT, -MANIAX_COL_SPACING*2.5f }, + { TRACK_3, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDUPRIGHT, -MANIAX_COL_SPACING*1.5f }, + { TRACK_4, GAME_CONTROLLER_1, MANIAX_BUTTON_HANDLRRIGHT, -MANIAX_COL_SPACING*0.5f }, + { TRACK_5, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRLEFT, +MANIAX_COL_SPACING*0.5f }, + { TRACK_6, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPLEFT, +MANIAX_COL_SPACING*1.5f }, + { TRACK_7, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDUPRIGHT, +MANIAX_COL_SPACING*2.5f }, + { TRACK_8, GAME_CONTROLLER_2, MANIAX_BUTTON_HANDLRRIGHT, +MANIAX_COL_SPACING*3.5f }, + }, + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0,1,2,3,4,5,6,7 + }, + }, + { // STYLE_TECHNO_SINGLE8 + GAME_TECHNO, // m_Game + true, // m_bUsedForGameplay + true, // m_bUsedForEdit + "single8", // m_szName + STEPS_TYPE_TECHNO_SINGLE8, // m_StepsType + StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType + { 320, 320 }, // m_iCenterX + 8, // m_iColsPerPlayer + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, GAME_CONTROLLER_1, TECHNO_BUTTON_DOWNLEFT, -TECHNO_COL_SPACING*3.5f }, + { TRACK_2, GAME_CONTROLLER_1, TECHNO_BUTTON_LEFT, -TECHNO_COL_SPACING*2.5f }, + { TRACK_3, GAME_CONTROLLER_1, TECHNO_BUTTON_UPLEFT, -TECHNO_COL_SPACING*1.5f }, + { TRACK_4, GAME_CONTROLLER_1, TECHNO_BUTTON_DOWN, -TECHNO_COL_SPACING*0.5f }, + { TRACK_5, GAME_CONTROLLER_1, TECHNO_BUTTON_UP, +TECHNO_COL_SPACING*0.5f }, + { TRACK_6, GAME_CONTROLLER_1, TECHNO_BUTTON_UPRIGHT, +TECHNO_COL_SPACING*1.5f }, + { TRACK_7, GAME_CONTROLLER_1, TECHNO_BUTTON_RIGHT, +TECHNO_COL_SPACING*2.5f }, + { TRACK_8, GAME_CONTROLLER_1, TECHNO_BUTTON_DOWNRIGHT,+TECHNO_COL_SPACING*3.5f }, + }, + { // PLAYER_2 + { TRACK_1, GAME_CONTROLLER_2, TECHNO_BUTTON_DOWNLEFT, -TECHNO_COL_SPACING*3.5f }, + { TRACK_2, GAME_CONTROLLER_2, TECHNO_BUTTON_LEFT, -TECHNO_COL_SPACING*2.5f }, + { TRACK_3, GAME_CONTROLLER_2, TECHNO_BUTTON_UPLEFT, -TECHNO_COL_SPACING*1.5f }, + { TRACK_4, GAME_CONTROLLER_2, TECHNO_BUTTON_DOWN, -TECHNO_COL_SPACING*0.5f }, + { TRACK_5, GAME_CONTROLLER_2, TECHNO_BUTTON_UP, +TECHNO_COL_SPACING*0.5f }, + { TRACK_6, GAME_CONTROLLER_2, TECHNO_BUTTON_UPRIGHT, +TECHNO_COL_SPACING*1.5f }, + { TRACK_7, GAME_CONTROLLER_2, TECHNO_BUTTON_RIGHT, +TECHNO_COL_SPACING*2.5f }, + { TRACK_8, GAME_CONTROLLER_2, TECHNO_BUTTON_DOWNRIGHT,+TECHNO_COL_SPACING*3.5f }, + }, + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0,1,2,3,4,5,6,7 + }, + }, }; -/* -ModeChoice g_ModeChoices[] = -{ - { - GAME_DANCE, - PLAY_MODE_ARCADE, - STYLE_DANCE_SINGLE, - DIFFICULTY_MEDIUM, - "single", - 1 - }, - { - GAME_DANCE, - PLAY_MODE_ARCADE, - STYLE_DANCE_VERSUS, - DIFFICULTY_MEDIUM, - "versus", - 2 - }, - { - GAME_DANCE, - PLAY_MODE_ARCADE, - STYLE_DANCE_DOUBLE, - DIFFICULTY_MEDIUM, - "double", - 2 - }, - { - GAME_DANCE, - PLAY_MODE_ARCADE, - STYLE_DANCE_COUPLE, - DIFFICULTY_MEDIUM, - "couple", - 2 - }, - { - GAME_DANCE, - PLAY_MODE_ARCADE, - STYLE_DANCE_SOLO, - DIFFICULTY_MEDIUM, - "solo", - 1 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_SINGLE, - DIFFICULTY_EASY, - "normal", - 1 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_SINGLE, - DIFFICULTY_MEDIUM, - "hard", - 1 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_SINGLE, - DIFFICULTY_HARD, - "crazy", - 1 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_VERSUS, - DIFFICULTY_EASY, - "normal", - 2 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_VERSUS, - DIFFICULTY_MEDIUM, - "hard", - 2 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_VERSUS, - DIFFICULTY_HARD, - "crazy", - 2 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_COUPLE, - DIFFICULTY_MEDIUM, - "battle", - 2 - }, - { - GAME_PUMP, - PLAY_MODE_ARCADE, - STYLE_PUMP_DOUBLE, - DIFFICULTY_MEDIUM, - "double", - 1 - }, - { - GAME_PUMP, - PLAY_MODE_ONI, - STYLE_PUMP_SINGLE, - DIFFICULTY_MEDIUM, - "nonstop", - 1 - }, - { - GAME_PUMP, - PLAY_MODE_ONI, - STYLE_PUMP_VERSUS, - DIFFICULTY_MEDIUM, - "nonstop", - 2 - }, - { - GAME_EZ2, - PLAY_MODE_ARCADE, - STYLE_EZ2_SINGLE, - DIFFICULTY_EASY, - "easy", - 1 - }, - { - GAME_EZ2, - PLAY_MODE_ARCADE, - STYLE_EZ2_SINGLE, - DIFFICULTY_HARD, - "hard", - 1 - }, - { - GAME_EZ2, - PLAY_MODE_ARCADE, - STYLE_EZ2_REAL, - DIFFICULTY_MEDIUM, - "real", - 1 - }, - { - GAME_EZ2, - PLAY_MODE_ARCADE, - STYLE_EZ2_DOUBLE, - DIFFICULTY_MEDIUM, - "club", - 1 - }, - { - GAME_EZ2, - PLAY_MODE_ARCADE, - STYLE_EZ2_SINGLE_VERSUS, - DIFFICULTY_EASY, - "easy", - 2 - }, - { - GAME_EZ2, - PLAY_MODE_ARCADE, - STYLE_EZ2_SINGLE_VERSUS, - DIFFICULTY_HARD, - "hard", - 2 - }, - { - GAME_EZ2, - PLAY_MODE_ARCADE, - STYLE_EZ2_REAL_VERSUS, - DIFFICULTY_MEDIUM, - "real", - 2 - }, - { - GAME_PARA, - PLAY_MODE_ARCADE, - STYLE_PARA_SINGLE, - DIFFICULTY_EASY, - "para", - 1 - }, - { - GAME_PARA, - PLAY_MODE_ARCADE, - STYLE_PARA_SINGLE, - DIFFICULTY_EASY, - "easy", - 1 - }, - { - GAME_PARA, - PLAY_MODE_ARCADE, - STYLE_PARA_SINGLE, - DIFFICULTY_MEDIUM, - "hard", - 1 - }, - { - GAME_PARA, - PLAY_MODE_ARCADE, - STYLE_PARA_SINGLE, - DIFFICULTY_HARD, - "expert", - 1 - }, - { - GAME_DS3DDX, - PLAY_MODE_ARCADE, - STYLE_DS3DDX_SINGLE, - DIFFICULTY_EASY, - "pretty", - 1 - }, - { - GAME_DS3DDX, - PLAY_MODE_ARCADE, - STYLE_DS3DDX_SINGLE, - DIFFICULTY_MEDIUM, - "power", - 1 - }, - { - GAME_DS3DDX, - PLAY_MODE_ARCADE, - STYLE_DS3DDX_SINGLE, - DIFFICULTY_HARD, - "power2", - 1 - }, - { - GAME_BM, - PLAY_MODE_ARCADE, - STYLE_BM_SINGLE, - DIFFICULTY_EASY, - "beginner", - 1 - }, - { - GAME_BM, - PLAY_MODE_ARCADE, - STYLE_BM_SINGLE, - DIFFICULTY_MEDIUM, - "normal", - 1 - }, - { - GAME_BM, - PLAY_MODE_ARCADE, - STYLE_BM_SINGLE, - DIFFICULTY_HARD, - "expert", - 1 - }, -}; -const int NUM_MODE_CHOICES = sizeof(g_ModeChoices) / sizeof(g_ModeChoices[0]); -*/ GameManager::GameManager() { @@ -1601,14 +1653,6 @@ Style GameManager::GetEditorStyleForNotesType( StepsType nt ) return STYLE_INVALID; } -/* -void GameManager::GetModesChoicesForGame( Game game, vector& apChoicesAddTo ) -{ - for( int s=0; s& aNotesTypeAddTo ) { diff --git a/stepmania/src/ModeChoice.cpp b/stepmania/src/ModeChoice.cpp index 07408ee8d8..15c27a1768 100644 --- a/stepmania/src/ModeChoice.cpp +++ b/stepmania/src/ModeChoice.cpp @@ -85,13 +85,15 @@ bool ModeChoice::FromString( CString sChoice, bool bIgnoreUnknown ) continue; } - if( !bIgnoreUnknown ) - { - CString sError = ssprintf( "The choice token '%s' is not recognized as a Game, Style, PlayMode, or Difficulty. The choice containing this token will be ignored.", sBit.c_str() ); - LOG->Warn( sError ); - if( DISPLAY->IsWindowed() ) - HOOKS->MessageBoxOK( sError ); - } + // Never show this error to the user. It occurs all the time in + // non-dance gametypes. +// if( !bIgnoreUnknown ) +// { +// CString sError = ssprintf( "The choice token '%s' is not recognized as a Game, Style, PlayMode, or Difficulty. The choice containing this token will be ignored.", sBit.c_str() ); +// LOG->Warn( sError ); +// if( DISPLAY->IsWindowed() ) +// HOOKS->MessageBoxOK( sError ); +// } bChoiceIsInvalid |= true; } diff --git a/stepmania/src/NoteSkinManager.cpp b/stepmania/src/NoteSkinManager.cpp index 0809c2e818..1d746723a4 100644 --- a/stepmania/src/NoteSkinManager.cpp +++ b/stepmania/src/NoteSkinManager.cpp @@ -20,6 +20,8 @@ #include "RageUtil.h" #include "GameManager.h" #include "arch/arch.h" +#include "RageDisplay.h" +#include "arch/ArchHooks/ArchHooks.h" NoteSkinManager* NOTESKIN = NULL; // global object accessable from anywhere in the program @@ -199,17 +201,17 @@ CString NoteSkinManager::GetPathTo( PlayerNumber pn, CString sButtonName, CStrin CString sNoteSkinName = GAMESTATE->m_PlayerOptions[pn].m_sNoteSkin; sNoteSkinName.MakeLower(); - CString ret = GetPathTo( sNoteSkinName, sButtonName, sFileName ); + CString ret = GetPathTo( GetNoteSkinDir(sNoteSkinName), sButtonName+" "+sFileName ); if( !ret.empty() ) // we found something return ret; // Search game default NoteSkin - ret = GetPathTo( GAME_BASE_NOTESKIN_NAME, sButtonName, sFileName); + ret = GetPathTo( GetNoteSkinDir(GAME_BASE_NOTESKIN_NAME), sButtonName+" "+sFileName); if( !ret.empty() ) // we found something return ret; // Search global default NoteSkin - ret = GetPathTo( GAME_BASE_NOTESKIN_NAME, "Fallback", sFileName, true ); + ret = GetPathTo( GLOBAL_BASE_NOTESKIN_DIR, "Fallback "+sFileName ); if( !ret.empty() ) // we found something return ret; @@ -220,22 +222,51 @@ CString NoteSkinManager::GetPathTo( PlayerNumber pn, CString sButtonName, CStrin GAME_BASE_NOTESKIN_NAME.c_str() ); } -CString NoteSkinManager::GetPathTo( CString sSkinName, CString sButtonName, CString sElementName, bool bGlobalDefault ) // looks in GAMESTATE for the current Style +CString NoteSkinManager::GetPathTo( CString sDir, CString sFileName ) { - const CString sDir = bGlobalDefault ? GLOBAL_BASE_NOTESKIN_DIR : GetNoteSkinDir( sSkinName ); + CStringArray matches; // fill this with the possible files - CStringArray arrayPossibleFileNames; // fill this with the possible files + GetDirListing( sDir+sFileName+"*.redir", matches, false, true ); + GetDirListing( sDir+sFileName+"*.txt", matches, false, true ); + GetDirListing( sDir+sFileName+"*.sprite", matches, false, true ); + GetDirListing( sDir+sFileName+"*.png", matches, false, true ); + GetDirListing( sDir+sFileName+"*.jpg", matches, false, true ); + GetDirListing( sDir+sFileName+"*.bmp", matches, false, true ); + GetDirListing( sDir+sFileName+"*.gif", matches, false, true ); - GetDirListing( ssprintf("%s%s %s*.txt", sDir.c_str(), sButtonName.c_str(), sElementName.c_str()), arrayPossibleFileNames, false, true ); - GetDirListing( ssprintf("%s%s %s*.sprite", sDir.c_str(), sButtonName.c_str(), sElementName.c_str()), arrayPossibleFileNames, false, true ); - GetDirListing( ssprintf("%s%s %s*.png", sDir.c_str(), sButtonName.c_str(), sElementName.c_str()), arrayPossibleFileNames, false, true ); - GetDirListing( ssprintf("%s%s %s*.jpg", sDir.c_str(), sButtonName.c_str(), sElementName.c_str()), arrayPossibleFileNames, false, true ); - GetDirListing( ssprintf("%s%s %s*.bmp", sDir.c_str(), sButtonName.c_str(), sElementName.c_str()), arrayPossibleFileNames, false, true ); - GetDirListing( ssprintf("%s%s %s*.gif", sDir.c_str(), sButtonName.c_str(), sElementName.c_str()), arrayPossibleFileNames, false, true ); - GetDirListing( ssprintf("%s%s %s*", sDir.c_str(), sButtonName.c_str(), sElementName.c_str()), arrayPossibleFileNames, false, true ); - - if( arrayPossibleFileNames.empty() ) + if( matches.empty() ) return ""; - else - return DerefRedir(arrayPossibleFileNames[0]); + + if( matches.size() > 1 ) + { + CString sError = "Multiple files match '"+sDir+sFileName+"'. Please remove all but one of these files."; + if( DISPLAY->IsWindowed() ) + HOOKS->MessageBoxOK( sError ); + } + + CString sPath = matches[0]; + + bool bIsARedirect = GetExtension(sPath).CompareNoCase("redir")==0; + if( !bIsARedirect ) + { + return sPath; + } + else // bIsARedirect + { + CString sNewFileName = GetRedirContents(sPath); + + CString sNewPath = GetPathTo(sDir, sNewFileName); + + if( !sNewPath.empty() ) + return sNewPath; + else + { + CString message = ssprintf( + "ThemeManager: The redirect '%s' points to the file '%s', which does not exist. " + "Verify that this redirect is correct.", + sPath.c_str(), sNewFileName.c_str()); + + RageException::Throw( "%s", message.c_str() ); + } + } } diff --git a/stepmania/src/NoteSkinManager.h b/stepmania/src/NoteSkinManager.h index 7438ac6371..98d6aba7dd 100644 --- a/stepmania/src/NoteSkinManager.h +++ b/stepmania/src/NoteSkinManager.h @@ -30,9 +30,9 @@ public: void GetNoteSkinNames( CStringArray &AddTo ); // looks up current Game in GAMESTATE bool DoesNoteSkinExist( CString sSkinName ); // looks up current Game in GAMESTATE - CString GetPathTo( PlayerNumber pn, int col, CString sFileName ); - CString GetPathTo( PlayerNumber pn, CString sButtonName, CString sFileName ); - CString GetPathTo( CString sSkinName, CString sButtonName, CString sFileName, bool bGlobalDefault = false ); + CString GetPathTo( PlayerNumber pn, int col, CString sElement ); + CString GetPathTo( PlayerNumber pn, CString sButtonName, CString sElement ); + CString GetPathTo( CString sDir, CString sFileName ); CString GetMetric( PlayerNumber pn, CString sButtonName, CString sValueName ); int GetMetricI( PlayerNumber pn, CString sButtonName, CString sValueName ); diff --git a/stepmania/src/RageUtil.h b/stepmania/src/RageUtil.h index b937ab0740..1117668422 100644 --- a/stepmania/src/RageUtil.h +++ b/stepmania/src/RageUtil.h @@ -174,6 +174,13 @@ void splitrelpath( CString& Ext ); +inline CString GetExtension( CString sPath ) +{ + CString Dir, FName, Ext; + splitrelpath( sPath, Dir, FName, Ext ); + return Ext; +}; + typedef int longchar; extern const wchar_t INVALID_CHAR; diff --git a/stepmania/src/RageUtil_FileDB.cpp b/stepmania/src/RageUtil_FileDB.cpp index 0e90e705a8..906e72e2c3 100644 --- a/stepmania/src/RageUtil_FileDB.cpp +++ b/stepmania/src/RageUtil_FileDB.cpp @@ -315,6 +315,7 @@ void FilenameDB::GetFilesSimpleMatch(const CString &dir, const CString &fn, vect if(second_pos == fn.npos) { /* Only one *: "A*B". */ + /* XXX: "_blank.png*.png" shouldn't match the file "_blank.png". */ GetFilesMatching(dir, fn.substr(0, first_pos), "", fn.substr(first_pos+1), out, bOnlyDirs); } else { /* Two *s: "A*B*C". */ diff --git a/stepmania/src/ScreenCredits.cpp b/stepmania/src/ScreenCredits.cpp index 019b4d4ca8..c8c4884d44 100644 --- a/stepmania/src/ScreenCredits.cpp +++ b/stepmania/src/ScreenCredits.cpp @@ -74,6 +74,7 @@ const CreditLine CREDIT_LINES[] = {0,"Dj 'AeON ExOdus' Washington"}, {0,"Xelf"}, {0,"SPDS (James Sanders)"}, + {0,"k0ldx"}, {0,""}, {0,""}, {0,""}, diff --git a/stepmania/src/ScreenDemonstration.cpp b/stepmania/src/ScreenDemonstration.cpp index ef3393f680..3b37b81838 100644 --- a/stepmania/src/ScreenDemonstration.cpp +++ b/stepmania/src/ScreenDemonstration.cpp @@ -38,6 +38,7 @@ bool PrepareForDemonstration() // always return true. case GAME_PARA: GAMESTATE->m_CurStyle = STYLE_PARA_SINGLE; break; case GAME_DS3DDX: GAMESTATE->m_CurStyle = STYLE_DS3DDX_SINGLE; break; case GAME_BM: GAMESTATE->m_CurStyle = STYLE_BM_SINGLE; break; + case GAME_MANIAX: GAMESTATE->m_CurStyle = STYLE_MANIAX_SINGLE; break; default: ASSERT(0); } diff --git a/stepmania/src/ScreenHowToPlay.cpp b/stepmania/src/ScreenHowToPlay.cpp index 0795cad212..dc8decb4a9 100644 --- a/stepmania/src/ScreenHowToPlay.cpp +++ b/stepmania/src/ScreenHowToPlay.cpp @@ -44,12 +44,13 @@ ScreenHowToPlay::ScreenHowToPlay() : ScreenAttract("ScreenHowToPlay") switch(GAMESTATE->m_CurGame) // which style should we use to demonstrate? { - case GAME_DANCE: GAMESTATE->m_CurStyle = STYLE_DANCE_SINGLE; break; - case GAME_PUMP: GAMESTATE->m_CurStyle = STYLE_PUMP_SINGLE; break; - case GAME_EZ2: GAMESTATE->m_CurStyle = STYLE_EZ2_SINGLE; break; - case GAME_PARA: GAMESTATE->m_CurStyle = STYLE_PARA_SINGLE; break; - case GAME_DS3DDX: GAMESTATE->m_CurStyle = STYLE_DS3DDX_SINGLE; break; - case GAME_BM: GAMESTATE->m_CurStyle = STYLE_BM_SINGLE; break; + case GAME_DANCE: GAMESTATE->m_CurStyle = STYLE_DANCE_SINGLE; break; + case GAME_PUMP: GAMESTATE->m_CurStyle = STYLE_PUMP_SINGLE; break; + case GAME_EZ2: GAMESTATE->m_CurStyle = STYLE_EZ2_SINGLE; break; + case GAME_PARA: GAMESTATE->m_CurStyle = STYLE_PARA_SINGLE; break; + case GAME_DS3DDX: GAMESTATE->m_CurStyle = STYLE_DS3DDX_SINGLE; break; + case GAME_BM: GAMESTATE->m_CurStyle = STYLE_BM_SINGLE; break; + case GAME_MANIAX: GAMESTATE->m_CurStyle = STYLE_MANIAX_SINGLE; break; default: ASSERT(0); // we should cover all gametypes.... } diff --git a/stepmania/src/Style.h b/stepmania/src/Style.h index 0aead894e5..2d47bad772 100644 --- a/stepmania/src/Style.h +++ b/stepmania/src/Style.h @@ -33,6 +33,10 @@ enum Style STYLE_PARA_SINGLE, STYLE_DS3DDX_SINGLE, STYLE_BM_SINGLE, + STYLE_MANIAX_SINGLE, + STYLE_MANIAX_VERSUS, + STYLE_MANIAX_DOUBLE, + STYLE_TECHNO_SINGLE8, NUM_STYLES, // leave this at the end STYLE_INVALID, }; diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index 22593bc5a3..430ee95f8d 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -230,7 +230,7 @@ try_element_again: ASSERT( asElementPaths.size() == 1 ); CString sPath = asElementPaths[0]; - bool bIsARedirect = sPath.length()>6 && sPath.Right(6).CompareNoCase(".redir")==0; + bool bIsARedirect = GetExtension(sPath).CompareNoCase("redir")==0; if( !bIsARedirect ) {