diff --git a/NoteSkins/kickbox/default/NoteSkin.lua b/NoteSkins/kickbox/default/NoteSkin.lua new file mode 100644 index 0000000000..c71e135f87 --- /dev/null +++ b/NoteSkins/kickbox/default/NoteSkin.lua @@ -0,0 +1 @@ +return ... diff --git a/NoteSkins/kickbox/default/metrics.ini b/NoteSkins/kickbox/default/metrics.ini new file mode 100644 index 0000000000..a046334934 --- /dev/null +++ b/NoteSkins/kickbox/default/metrics.ini @@ -0,0 +1,2 @@ +[Global] +FallbackNoteSkin=common diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index b59f016c96..a3bdd21eba 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -170,6 +170,14 @@ Right Blue=Right Blue Right Green=Right Green Right Yellow=Right Yellow Right White=Right White +DownLeftFoot=Down Left Foot +UpLeftFoot=Up Left Foot +UpLeftFist=Up Left Fist +DownLeftFist=Down Left Fist +DownRightFoot=Down Right Foot +UpRightFoot=Up Right Foot +UpRightFist=Up Right Fist +DownRightFist=Down Right Fist [GameCommand] Could not launch web browser.=Could not launch web browser. @@ -2014,6 +2022,10 @@ Pnm_Nine=9 Button Guitar_Five=5 Frets Karaoke=Karaoke Lights_Cabinet=Lights +Kickbox_Human=Human +Kickbox_Quadarm=Quadarm +Kickbox_Insect=Insect +Kickbox_Arachnid=Arachnid [StyleType] StyleType_OnePlayerOneSide=1 Player diff --git a/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc b/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc index 0a5b0994d9..ac2e351e4a 100644 --- a/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc +++ b/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc @@ -1305,4 +1305,85 @@ 000000001 100000000 000000001 -; \ No newline at end of file +; + +//---------------kickbox-quadarm - blank---------------- +#NOTEDATA:; +#CHARTNAME:Syncer; +#STEPSTYPE:kickbox-quadarm; +#DESCRIPTION:Sync the Game; +#CHARTSTYLE:; +#DIFFICULTY:Beginner; +#METER:1; +#RADARVALUES:0.414,0.379,0.000,0.000,0.000,49.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.414,0.379,0.000,0.000,0.000,49.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000; +#CREDIT:blank; +#NOTES: +0000 +0000 +0000 +0000 +, +0000 +0000 +0000 +0000 +, +1000 +0001 +1000 +0001 +1000 +0001 +1000 +0001 +, +1000 +0001 +1000 +0001 +1000 +0001 +1000 +0001 +, +1000 +0001 +1000 +0001 +1000 +0001 +1000 +0001 +, +1000 +0001 +1000 +0001 +1000 +0001 +1000 +0001 +, +1000 +0001 +1000 +0001 +1000 +0001 +1000 +0001 +, +1000 +0001 +1000 +0001 +1000 +0001 +1000 +0001 +, +1000 +0000 +0000 +0000 +; diff --git a/Themes/_fallback/Scripts/03 Gameplay.lua b/Themes/_fallback/Scripts/03 Gameplay.lua index 4d893f91c4..aefe34ac87 100644 --- a/Themes/_fallback/Scripts/03 Gameplay.lua +++ b/Themes/_fallback/Scripts/03 Gameplay.lua @@ -22,6 +22,7 @@ function GetExtraColorThreshold() para = 10, techno = 10, lights = 10, -- lights shouldn't be playable + kickbox= 100, -- extra color is lame } return Modes[CurGameName()] or 10 end @@ -51,7 +52,8 @@ function GameCompatibleModes() maniax = "Single,Double,Versus", -- todo: add versus modes for technomotion techno = "Single4,Single5,Single8,Double4,Double5,Double8", - lights = "Single" -- lights shouldn't be playable + lights = "Single", -- lights shouldn't be playable + kickbox= "Human,Quadarm,Insect,Arachnid", } return Modes[CurGameName()] end diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 3f1143290c..81cbcf0444 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -1975,6 +1975,11 @@ ChoiceVersus8="name,Versus8;style,versus8;screen,"..Branch.AfterSelectStyle() ChoiceDouble4="name,Double4;style,double4;screen,"..Branch.AfterSelectStyle() ChoiceDouble5="name,Double5;style,double5;screen,"..Branch.AfterSelectStyle() ChoiceDouble8="name,Double8;style,double8;screen,"..Branch.AfterSelectStyle() +# kickbox +ChoiceHuman="name,Human;style,human;screen,"..Branch.AfterSelectStyle() +ChoiceQuadarm="name,Quadarm;style,quadarm;screen,"..Branch.AfterSelectStyle() +ChoiceInsect="name,Insect;style,insect;screen,"..Branch.AfterSelectStyle() +ChoiceArachnid="name,Arachnid;style,arachnid;screen,"..Branch.AfterSelectStyle() # PerChoiceScrollElement=false PerChoiceIconElement=false diff --git a/src/GameConstantsAndTypes.h b/src/GameConstantsAndTypes.h index 6180b547cd..900359148a 100644 --- a/src/GameConstantsAndTypes.h +++ b/src/GameConstantsAndTypes.h @@ -104,6 +104,10 @@ enum StepsType StepsType_popn_five, StepsType_popn_nine, StepsType_lights_cabinet, + StepsType_kickbox_human, + StepsType_kickbox_quadarm, + StepsType_kickbox_insect, + StepsType_kickbox_arachnid, NUM_StepsType, // leave this at the end StepsType_Invalid, }; diff --git a/src/GameInput.h b/src/GameInput.h index 5a474f0e71..c3ed05ea06 100644 --- a/src/GameInput.h +++ b/src/GameInput.h @@ -174,6 +174,16 @@ GameButton StringToGameButton( const InputScheme* pInputs, const RString& s ); #define LIGHTS_BUTTON_BASS_RIGHT GAME_BUTTON_CUSTOM_08 #define NUM_LIGHTS_BUTTONS GAME_BUTTON_CUSTOM_09 +#define KICKBOX_BUTTON_DOWN_LEFT_FOOT GAME_BUTTON_CUSTOM_01 +#define KICKBOX_BUTTON_UP_LEFT_FOOT GAME_BUTTON_CUSTOM_02 +#define KICKBOX_BUTTON_UP_LEFT_FIST GAME_BUTTON_CUSTOM_03 +#define KICKBOX_BUTTON_DOWN_LEFT_FIST GAME_BUTTON_CUSTOM_04 +#define KICKBOX_BUTTON_DOWN_RIGHT_FIST GAME_BUTTON_CUSTOM_05 +#define KICKBOX_BUTTON_UP_RIGHT_FIST GAME_BUTTON_CUSTOM_06 +#define KICKBOX_BUTTON_UP_RIGHT_FOOT GAME_BUTTON_CUSTOM_07 +#define KICKBOX_BUTTON_DOWN_RIGHT_FOOT GAME_BUTTON_CUSTOM_08 +#define NUM_KICKBOX_BUTTONS GAME_BUTTON_CUSTOM_09 + #define GAME_BUTTON_LEFT GAME_BUTTON_MENULEFT #define GAME_BUTTON_RIGHT GAME_BUTTON_MENURIGHT #define GAME_BUTTON_UP GAME_BUTTON_MENUUP diff --git a/src/GameManager.cpp b/src/GameManager.cpp index 7d7a77f12a..d2472ec585 100644 --- a/src/GameManager.cpp +++ b/src/GameManager.cpp @@ -93,6 +93,11 @@ static const StepsTypeInfo g_StepsTypeInfos[] = { { "pnm-nine", 9, true, StepsTypeCategory_Single }, // called "pnm" for backward compat // cabinet lights and other fine StepsTypes that don't exist lol { "lights-cabinet", NUM_CabinetLight, false, StepsTypeCategory_Single }, // XXX disable lights autogen for now + // kickbox mania + { "kickbox-human", 4, true, StepsTypeCategory_Single }, + { "kickbox-quadarm", 4, true, StepsTypeCategory_Single }, + { "kickbox-insect", 6, true, StepsTypeCategory_Single }, + { "kickbox-arachnid", 8, true, StepsTypeCategory_Single }, }; @@ -2859,6 +2864,400 @@ static const Game g_Game_Lights = TNS_W5, // m_mapW5To }; +/** Kickbox mania **********************************************************/ +static const AutoMappings g_AutoKeyMappings_Kickbox = AutoMappings ( + "", "", "", + AutoMappingEntry(0, KEY_Cq, GAME_BUTTON_MENULEFT, false), + AutoMappingEntry(0, KEY_Cr, GAME_BUTTON_MENURIGHT, false), + AutoMappingEntry(0, KEY_Ce, GAME_BUTTON_MENUUP, false), + AutoMappingEntry(0, KEY_Cw, GAME_BUTTON_MENUDOWN, false), + AutoMappingEntry(0, KEY_Cz, KICKBOX_BUTTON_DOWN_LEFT_FOOT, false), + AutoMappingEntry(0, KEY_Ca, KICKBOX_BUTTON_UP_LEFT_FOOT, false), + AutoMappingEntry(0, KEY_Cs, KICKBOX_BUTTON_UP_LEFT_FIST, false), + AutoMappingEntry(0, KEY_Cx, KICKBOX_BUTTON_DOWN_LEFT_FIST, false), + AutoMappingEntry(0, KEY_Cc, KICKBOX_BUTTON_DOWN_RIGHT_FIST, false), + AutoMappingEntry(0, KEY_Cd, KICKBOX_BUTTON_UP_RIGHT_FIST, false), + AutoMappingEntry(0, KEY_Cf, KICKBOX_BUTTON_UP_RIGHT_FOOT, false), + AutoMappingEntry(0, KEY_Cv, KICKBOX_BUTTON_DOWN_RIGHT_FOOT, false), + AutoMappingEntry(0, KEY_Cu, GAME_BUTTON_MENULEFT, true), + AutoMappingEntry(0, KEY_Cp, GAME_BUTTON_MENURIGHT, true), + AutoMappingEntry(0, KEY_Ci, GAME_BUTTON_MENUUP, true), + AutoMappingEntry(0, KEY_Co, GAME_BUTTON_MENUDOWN, true), + AutoMappingEntry(0, KEY_Cm, KICKBOX_BUTTON_DOWN_LEFT_FOOT, true), + AutoMappingEntry(0, KEY_Cj, KICKBOX_BUTTON_UP_LEFT_FOOT, true), + AutoMappingEntry(0, KEY_Ck, KICKBOX_BUTTON_UP_LEFT_FIST, true), + AutoMappingEntry(0, KEY_COMMA, KICKBOX_BUTTON_DOWN_LEFT_FIST, true), + AutoMappingEntry(0, KEY_PERIOD, KICKBOX_BUTTON_DOWN_RIGHT_FIST, true), + AutoMappingEntry(0, KEY_Cl, KICKBOX_BUTTON_UP_RIGHT_FIST, true), + AutoMappingEntry(0, KEY_SEMICOLON, KICKBOX_BUTTON_UP_RIGHT_FOOT, true), + AutoMappingEntry(0, KEY_SLASH, KICKBOX_BUTTON_DOWN_RIGHT_FOOT, true) +); + +static const int KICKBOX_COL_SPACING= 64; + +static const Style g_Style_Kickbox_Human= +{ + true, // Used for gameplay + true, // Used for edit + true, // Used for demonstration + true, // Used for how to play + "human", // name + StepsType_kickbox_human, // stepstype + StyleType_OnePlayerOneSide, // styletype + 4, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { 0, 0, 1, 1, 2, 2, 3, 3, Style::END_MAPPING }, + { 0, 0, 1, 1, 2, 2, 3, 3, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3 + }, + false, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style g_Style_Kickbox_Human_Versus= +{ + true, // Used for gameplay + false, // Used for edit + true, // Used for demonstration + false, // Used for how to play + "hversus", // name + StepsType_kickbox_human, // stepstype + StyleType_TwoPlayersTwoSides, // styletype + 4, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { 0, 0, 1, 1, 2, 2, 3, 3, Style::END_MAPPING }, + { 0, 0, 1, 1, 2, 2, 3, 3, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3 + }, + false, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style g_Style_Kickbox_Quadarm= +{ + true, // Used for gameplay + true, // Used for edit + true, // Used for demonstration + true, // Used for how to play + "quadarm", // name + StepsType_kickbox_quadarm, // stepstype + StyleType_OnePlayerOneSide, // styletype + 4, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { Style::NO_MAPPING, Style::NO_MAPPING, 0, 1, 2, 3, Style::NO_MAPPING, Style::NO_MAPPING, Style::END_MAPPING }, + { Style::NO_MAPPING, Style::NO_MAPPING, 0, 1, 2, 3, Style::NO_MAPPING, Style::NO_MAPPING, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3 + }, + false, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style g_Style_Kickbox_Quadarm_Versus= +{ + true, // Used for gameplay + false, // Used for edit + true, // Used for demonstration + false, // Used for how to play + "qversus", // name + StepsType_kickbox_quadarm, // stepstype + StyleType_TwoPlayersTwoSides, // styletype + 4, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_3, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*1.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { Style::NO_MAPPING, Style::NO_MAPPING, 0, 1, 2, 3, Style::NO_MAPPING, Style::NO_MAPPING, Style::END_MAPPING }, + { Style::NO_MAPPING, Style::NO_MAPPING, 0, 1, 2, 3, Style::NO_MAPPING, Style::NO_MAPPING, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3 + }, + false, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style g_Style_Kickbox_Insect= +{ + true, // Used for gameplay + true, // Used for edit + true, // Used for demonstration + true, // Used for how to play + "insect", // name + StepsType_kickbox_insect, // stepstype + StyleType_OnePlayerOneSide, // styletype + 6, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*2.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*2.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { 0, 0, 1, 2, 3, 4, 5, 5, Style::END_MAPPING }, + { 0, 0, 1, 2, 3, 4, 5, 5, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3, 4, 5 + }, + false, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style g_Style_Kickbox_Insect_Versus= +{ + true, // Used for gameplay + false, // Used for edit + true, // Used for demonstration + false, // Used for how to play + "iversus", // name + StepsType_kickbox_insect, // stepstype + StyleType_TwoPlayersTwoSides, // styletype + 6, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*2.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_4, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*2.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { 0, 0, 1, 2, 3, 4, 5, 5, Style::END_MAPPING }, + { 0, 0, 1, 2, 3, 4, 5, 5, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3, 4, 5 + }, + false, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style g_Style_Kickbox_Arachnid= +{ + true, // Used for gameplay + true, // Used for edit + true, // Used for demonstration + true, // Used for how to play + "arachnid", // name + StepsType_kickbox_arachnid, // stepstype + StyleType_OnePlayerOneSide, // styletype + 8, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*3.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_4, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_7, +KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_8, +KICKBOX_COL_SPACING*3.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*3.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_4, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_7, +KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_8, +KICKBOX_COL_SPACING*3.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { 0, 1, 2, 3, 4, 5, 6, 7, Style::END_MAPPING }, + { 0, 1, 2, 3, 4, 5, 6, 7, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3, 4, 5, 6, 7 + }, + false, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style g_Style_Kickbox_Arachnid_Versus= +{ + true, // Used for gameplay + false, // Used for edit + true, // Used for demonstration + false, // Used for how to play + "aversus", // name + StepsType_kickbox_arachnid, // stepstype + StyleType_TwoPlayersTwoSides, // styletype + 8, // cols per player + { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; + { // PLAYER_1 + { TRACK_1, -KICKBOX_COL_SPACING*3.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_4, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_7, +KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_8, +KICKBOX_COL_SPACING*3.5f, NULL }, + }, + { // PLAYER_2 + { TRACK_1, -KICKBOX_COL_SPACING*3.5f, NULL }, + { TRACK_2, -KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_3, -KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_4, -KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_5, +KICKBOX_COL_SPACING*0.5f, NULL }, + { TRACK_6, +KICKBOX_COL_SPACING*1.5f, NULL }, + { TRACK_7, +KICKBOX_COL_SPACING*2.5f, NULL }, + { TRACK_8, +KICKBOX_COL_SPACING*3.5f, NULL }, + }, + }, + { // m_iInputColumn[NUM_GameController][NUM_GameButton] + { 0, 1, 2, 3, 4, 5, 6, 7, Style::END_MAPPING }, + { 0, 1, 2, 3, 4, 5, 6, 7, Style::END_MAPPING } + }, + { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER]; + 0, 1, 2, 3, 4, 5, 6, 7 + }, + true, // needs zoom out with 2 players + false, // can use beginner helper + false, // lock difficulties +}; + +static const Style* g_apGame_Kickbox_Styles[] = +{ + &g_Style_Kickbox_Human, + &g_Style_Kickbox_Human_Versus, + &g_Style_Kickbox_Quadarm, + &g_Style_Kickbox_Quadarm_Versus, + &g_Style_Kickbox_Insect, + &g_Style_Kickbox_Insect_Versus, + &g_Style_Kickbox_Arachnid, + &g_Style_Kickbox_Arachnid_Versus, + NULL +}; + +static const Game g_Game_Kickbox = +{ + "kickbox", // name + g_apGame_Kickbox_Styles, // styles + true, // count notes separately + false, // tick holds + { // input scheme + "kickbox", + NUM_KICKBOX_BUTTONS, // buttons per controller + { // button names + { "DownLeftFoot", GameButton_Invalid }, + { "UpLeftFoot", GameButton_Invalid }, + { "UpLeftFist", GAME_BUTTON_LEFT }, + { "DownLeftFist", GAME_BUTTON_UP }, + { "DownRightFist", GAME_BUTTON_DOWN }, + { "UpRightFist", GAME_BUTTON_RIGHT }, + { "UpRightFoot", GameButton_Invalid }, + { "DownRightFoot", GameButton_Invalid }, + }, + &g_AutoKeyMappings_Kickbox + }, + { + { GameButtonType_Step }, + { GameButtonType_Step }, + { GameButtonType_Step }, + { GameButtonType_Step }, + { GameButtonType_Step }, + { GameButtonType_Step }, + { GameButtonType_Step }, + { GameButtonType_Step }, + }, + TNS_W1, // m_mapW1To + TNS_W2, // m_mapW2To + TNS_W3, // m_mapW3To + TNS_W4, // m_mapW4To + TNS_W5, // m_mapW5To +}; + static const Game *g_Games[] = { &g_Game_Dance, @@ -2872,6 +3271,7 @@ static const Game *g_Games[] = &g_Game_Techno, &g_Game_Popn, &g_Game_Lights, + &g_Game_Kickbox, }; GameManager::GameManager() diff --git a/src/Style.cpp b/src/Style.cpp index 13273c8102..a316a230be 100644 --- a/src/Style.cpp +++ b/src/Style.cpp @@ -82,8 +82,12 @@ int Style::GameInputToColumn( const GameInput &GameI ) const return Column_Invalid; for( int i = 0; i <= iColumnIndex; ++i ) + { if( m_iInputColumn[GameI.controller][i] == END_MAPPING ) + { return Column_Invalid; + } + } return m_iInputColumn[GameI.controller][iColumnIndex]; }