Merge remote-tracking branch 'remotes/flokuep/tic-tac-toe' into develop

This commit is contained in:
Alexander Eckart committed 2012-12-31 13:56:06 +01:00
commit 17bb5bba51
22 files changed
+4964 -21

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<PartyModeSystemVersion>1</PartyModeSystemVersion>
<Info>
<Name>TR_PARTYMODE_NAME</Name>
<Author>flokuep</Author>
<Description>TR_PARTYMODE_DESCRIPTION</Description>
<Folder>TicTacToe</Folder>
<PartyModeFile>PartyModeTicTacToe</PartyModeFile>
<PartyModeVersionMajor>0</PartyModeVersionMajor>
<PartyModeVersionMinor>1</PartyModeVersionMinor>
<TargetAudience>TR_PARTYMODE_AUDIENCE</TargetAudience>
</Info>
<PartyScreens>
<ScreenFile>PartyScreenTicTacToeMain</ScreenFile>
<ScreenFile>PartyScreenTicTacToeConfig</ScreenFile>
<ScreenFile>PartyScreenTicTacToeNames</ScreenFile>
</PartyScreens>
</root>
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Info>
<Name>Deutsch</Name>
</Info>
<Texts>
<!--General-->
<TR_PARTYMODE_NAME>Tic-Tac-Toe</TR_PARTYMODE_NAME>
<TR_PARTYMODE_DESCRIPTION>Spiele Tic-Tac-Toe auf eine besondere Weise!</TR_PARTYMODE_DESCRIPTION>
<TR_PARTYMODE_AUDIENCE>Für eine lustige Runde mit Strategie, Glück und Können!</TR_PARTYMODE_AUDIENCE>
<TR_BUTTON_NEXT>Weiter</TR_BUTTON_NEXT>
<TR_BUTTON_BACK>Zurück</TR_BUTTON_BACK>
<TR_BUTTON_START>Start</TR_BUTTON_START>
<TR_BUTTON_EXIT>Exit</TR_BUTTON_EXIT>
<TR_BUTTON_YES>Ja</TR_BUTTON_YES>
<TR_BUTTON_NO>Nein</TR_BUTTON_NO>
<TR_BUTTON_NEXT_ROUND>Starten</TR_BUTTON_NEXT_ROUND>
<TR_SONGS>Songs</TR_SONGS>
<TR_TEAM>Team</TR_TEAM>
<TR_PLAYLIST>Playlist</TR_PLAYLIST>
<TR_CATEGORY>Kategorie</TR_CATEGORY>
<TR_ALLSONGS>Alle Songs</TR_ALLSONGS>
<!--ScreenConfig-->
<TR_SCREENCONFIG_TITLE>Tic-Tac-Toe: Einstellungen</TR_SCREENCONFIG_TITLE>
<TR_SCREENCONFIG_NUMPLAYERT1>Anzahl der Spieler in Team 1</TR_SCREENCONFIG_NUMPLAYERT1>
<TR_SCREENCONFIG_NUMPLAYERT2>Anzahl der Spieler in Team 2</TR_SCREENCONFIG_NUMPLAYERT2>
<TR_SCREENCONFIG_NUMFIELDS>Anzahl der Felder</TR_SCREENCONFIG_NUMFIELDS>
<TR_SCREENCONFIG_SONGSOURCE>Song-Quelle</TR_SCREENCONFIG_SONGSOURCE>
<TR_SCREENCONFIG_GAMEMODE>Spiel-Modus</TR_SCREENCONFIG_GAMEMODE>
<!--ScreenNames-->
<TR_SCREENNAMES_TITLE>Tic-Tac-Toe: Spielerwahl</TR_SCREENNAMES_TITLE>
<TR_SCREENNAMES_TEAM1>Team 1</TR_SCREENNAMES_TEAM1>
<TR_SCREENNAMES_TEAM2>Team 2</TR_SCREENNAMES_TEAM2>
<!--ScreenMain-->
<TR_SCREENMAIN_TITLE>Tic-Tac-Toe</TR_SCREENMAIN_TITLE>
<TR_SCREENMAIN_TEAM_CHOOSE>Wählt ein Feld aus.</TR_SCREENMAIN_TEAM_CHOOSE>
<TR_SCREENMAIN_NEXT_PLAYER>Nächster Spieler</TR_SCREENMAIN_NEXT_PLAYER>
<TR_SCREENMAIN_POPUP_REALLYEXIT>Tic-Tac-Toe wirklich beenden?</TR_SCREENMAIN_POPUP_REALLYEXIT>
<TR_SCREENMAIN_WINNER>Und der Gewinner ist...</TR_SCREENMAIN_WINNER>
<TR_SCREENMAIN_NOWINNER>In dieser Runde gibt es keinen Gewinner...</TR_SCREENMAIN_NOWINNER>
</Texts>
</root>
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Info>
<Name>English</Name>
</Info>
<Texts>
<!--General-->
<TR_PARTYMODE_NAME>Tic-Tac-Toe</TR_PARTYMODE_NAME>
<TR_PARTYMODE_DESCRIPTION>Play Tic-Tac-Toe in a special way</TR_PARTYMODE_DESCRIPTION>
<TR_PARTYMODE_AUDIENCE>Funny rounds with strategy, fortune and skills</TR_PARTYMODE_AUDIENCE>
<TR_BUTTON_NEXT>Next</TR_BUTTON_NEXT>
<TR_BUTTON_BACK>Back</TR_BUTTON_BACK>
<TR_BUTTON_START>Start</TR_BUTTON_START>
<TR_BUTTON_EXIT>Exit</TR_BUTTON_EXIT>
<TR_BUTTON_YES>Yes</TR_BUTTON_YES>
<TR_BUTTON_NO>No</TR_BUTTON_NO>
<TR_BUTTON_NEXT_ROUND>Start</TR_BUTTON_NEXT_ROUND>
<TR_SONGS>Songs</TR_SONGS>
<TR_TEAM>Team</TR_TEAM>
<TR_PLAYLIST>Playlist</TR_PLAYLIST>
<TR_CATEGORY>Category</TR_CATEGORY>
<TR_ALLSONGS>All songs</TR_ALLSONGS>
<!--ScreenConfig-->
<TR_SCREENCONFIG_TITLE>Tic-Tac-Toe: Configuration</TR_SCREENCONFIG_TITLE>
<TR_SCREENCONFIG_NUMPLAYERST1>Number of players in team 1</TR_SCREENCONFIG_NUMPLAYERST1>
<TR_SCREENCONFIG_NUMPLAYERST2>Number of players in team 2</TR_SCREENCONFIG_NUMPLAYERST2>
<TR_SCREENCONFIG_NUMFIELDS>Number of fields</TR_SCREENCONFIG_NUMFIELDS>
<TR_SCREENCONFIG_SONGSOURCE>Song-Source</TR_SCREENCONFIG_SONGSOURCE>
<TR_SCREENCONFIG_GAMEMODE>Game-Mode</TR_SCREENCONFIG_GAMEMODE>
<!--ScreenNames-->
<TR_SCREENNAMES_TITLE>Tic-Tac-Toe: Choose Player</TR_SCREENNAMES_TITLE>
<TR_SCREENNAMES_TEAM1>Team 1</TR_SCREENNAMES_TEAM1>
<TR_SCREENNAMES_TEAM2>Team 2</TR_SCREENNAMES_TEAM2>
<!--ScreenMain-->
<TR_SCREENMAIN_TITLE>Tic-Tac-Toe</TR_SCREENMAIN_TITLE>
<TR_SCREENMAIN_TEAM_CHOOSE>Choose a field.</TR_SCREENMAIN_TEAM_CHOOSE>
<TR_SCREENMAIN_NEXT_PLAYER>Next player</TR_SCREENMAIN_NEXT_PLAYER>
<TR_SCREENMAIN_POPUP_REALLYEXIT>Really exit Tic-Tac-Toe?</TR_SCREENMAIN_POPUP_REALLYEXIT>
<TR_SCREENMAIN_WINNER>And the winner is...</TR_SCREENMAIN_WINNER>
<TR_SCREENMAIN_NOWINNER>There is no winner in this round...</TR_SCREENMAIN_NOWINNER>
</Texts>
</root>
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Info>
<Name>Français</Name>
</Info>
<Texts>
<!--General-->
<TR_PARTYMODE_NAME>Tic-Tac-Toe</TR_PARTYMODE_NAME>
<TR_PARTYMODE_DESCRIPTION>TODO: Play Tic-Tac-Toe in a special way</TR_PARTYMODE_DESCRIPTION>
<TR_PARTYMODE_AUDIENCE>TODO: Funny rounds with strategy, fortune and skills</TR_PARTYMODE_AUDIENCE>
<TR_BUTTON_NEXT>TODO: Next</TR_BUTTON_NEXT>
<TR_BUTTON_BACK>TODO: Back</TR_BUTTON_BACK>
<TR_BUTTON_START>TODO: Start</TR_BUTTON_START>
<TR_BUTTON_EXIT>TODO: Exit</TR_BUTTON_EXIT>
<TR_BUTTON_YES>TODO: Yes</TR_BUTTON_YES>
<TR_BUTTON_NO>TODO: No</TR_BUTTON_NO>
<TR_BUTTON_NEXT_ROUND>TODO: Start</TR_BUTTON_NEXT_ROUND>
<TR_SONGS>TODO: Songs</TR_SONGS>
<TR_TEAM>TODO: Team</TR_TEAM>
<TR_PLAYLIST>TODO: Playlist</TR_PLAYLIST>
<TR_CATEGORY>TODO: Category</TR_CATEGORY>
<TR_ALLSONGS>TODO: All songs</TR_ALLSONGS>
<!--ScreenConfig-->
<TR_SCREENCONFIG_TITLE>TODO: Tic-Tac-Toe: Configuration</TR_SCREENCONFIG_TITLE>
<TR_SCREENCONFIG_NUMPLAYERST1>TODO: Number of players in team 1</TR_SCREENCONFIG_NUMPLAYERST1>
<TR_SCREENCONFIG_NUMPLAYERST2>TODO: Number of players in team 2</TR_SCREENCONFIG_NUMPLAYERST2>
<TR_SCREENCONFIG_NUMFIELDS>TODO: Number of fields</TR_SCREENCONFIG_NUMFIELDS>
<TR_SCREENCONFIG_SONGSOURCE>TODO: Song-Source</TR_SCREENCONFIG_SONGSOURCE>
<TR_SCREENCONFIG_GAMEMODE>TODO: Game-Mode</TR_SCREENCONFIG_GAMEMODE>
<!--ScreenNames-->
<TR_SCREENNAMES_TITLE>TODO: Tic-Tac-Toe: Choose Player</TR_SCREENNAMES_TITLE>
<TR_SCREENNAMES_TEAM1>TODO: Team 1</TR_SCREENNAMES_TEAM1>
<TR_SCREENNAMES_TEAM2>TODO: Team 2</TR_SCREENNAMES_TEAM2>
<!--ScreenMain-->
<TR_SCREENMAIN_TITLE>TODO: Tic-Tac-Toe</TR_SCREENMAIN_TITLE>
<TR_SCREENMAIN_TEAM_CHOOSE>TODO: Choose a field.</TR_SCREENMAIN_TEAM_CHOOSE>
<TR_SCREENMAIN_NEXT_PLAYER>TODO: Next player</TR_SCREENMAIN_NEXT_PLAYER>
<TR_SCREENMAIN_POPUP_REALLYEXIT>TODO: Really exit Tic-Tac-Toe?</TR_SCREENMAIN_POPUP_REALLYEXIT>
<TR_SCREENMAIN_WINNER>TODO: And the winner is...</TR_SCREENMAIN_WINNER>
<TR_SCREENMAIN_NOWINNER>TODO: There is no winner in this round...</TR_SCREENMAIN_NOWINNER>
</Texts>
</root>
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Info>
<Name>Español</Name>
</Info>
<Texts>
<!--General-->
<TR_PARTYMODE_NAME>Tic-Tac-Toe</TR_PARTYMODE_NAME>
<TR_PARTYMODE_DESCRIPTION>TODO: Play Tic-Tac-Toe in a special way</TR_PARTYMODE_DESCRIPTION>
<TR_PARTYMODE_AUDIENCE>TODO: Funny rounds with strategy, fortune and skills</TR_PARTYMODE_AUDIENCE>
<TR_BUTTON_NEXT>TODO: Next</TR_BUTTON_NEXT>
<TR_BUTTON_BACK>TODO: Back</TR_BUTTON_BACK>
<TR_BUTTON_START>TODO: Start</TR_BUTTON_START>
<TR_BUTTON_EXIT>TODO: Exit</TR_BUTTON_EXIT>
<TR_BUTTON_YES>TODO: Yes</TR_BUTTON_YES>
<TR_BUTTON_NO>TODO: No</TR_BUTTON_NO>
<TR_BUTTON_NEXT_ROUND>TODO: Start</TR_BUTTON_NEXT_ROUND>
<TR_SONGS>TODO: Songs</TR_SONGS>
<TR_TEAM>TODO: Team</TR_TEAM>
<TR_PLAYLIST>TODO: Playlist</TR_PLAYLIST>
<TR_CATEGORY>TODO: Category</TR_CATEGORY>
<TR_ALLSONGS>TODO: All songs</TR_ALLSONGS>
<!--ScreenConfig-->
<TR_SCREENCONFIG_TITLE>TODO: Tic-Tac-Toe: Configuration</TR_SCREENCONFIG_TITLE>
<TR_SCREENCONFIG_NUMPLAYERST1>TODO: Number of players in team 1</TR_SCREENCONFIG_NUMPLAYERST1>
<TR_SCREENCONFIG_NUMPLAYERST2>TODO: Number of players in team 2</TR_SCREENCONFIG_NUMPLAYERST2>
<TR_SCREENCONFIG_NUMFIELDS>TODO: Number of fields</TR_SCREENCONFIG_NUMFIELDS>
<TR_SCREENCONFIG_SONGSOURCE>TODO: Song-Source</TR_SCREENCONFIG_SONGSOURCE>
<TR_SCREENCONFIG_GAMEMODE>TODO: Game-Mode</TR_SCREENCONFIG_GAMEMODE>
<!--ScreenNames-->
<TR_SCREENNAMES_TITLE>TODO: Tic-Tac-Toe: Choose Player</TR_SCREENNAMES_TITLE>
<TR_SCREENNAMES_TEAM1>TODO: Team 1</TR_SCREENNAMES_TEAM1>
<TR_SCREENNAMES_TEAM2>TODO: Team 2</TR_SCREENNAMES_TEAM2>
<!--ScreenMain-->
<TR_SCREENMAIN_TITLE>TODO: Tic-Tac-Toe</TR_SCREENMAIN_TITLE>
<TR_SCREENMAIN_TEAM_CHOOSE>TODO: Choose a field.</TR_SCREENMAIN_TEAM_CHOOSE>
<TR_SCREENMAIN_NEXT_PLAYER>TODO: Next player</TR_SCREENMAIN_NEXT_PLAYER>
<TR_SCREENMAIN_POPUP_REALLYEXIT>TODO: Really exit Tic-Tac-Toe?</TR_SCREENMAIN_POPUP_REALLYEXIT>
<TR_SCREENMAIN_WINNER>TODO: And the winner is...</TR_SCREENMAIN_WINNER>
<TR_SCREENMAIN_NOWINNER>TODO: There is no winner in this round...</TR_SCREENMAIN_NOWINNER>
</Texts>
</root>
@@ -0,0 +1,776 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<PartyScreenTicTacToeConfig>
<ScreenVersion>1</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
<!--<Video>: Background video name-->
<Video>BG_Video</Video>
<!--<Skin>: Background Texture name-->
<Skin>BG_Default</Skin>
<!--<Color>: Background color for type "Color" from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>BackgroundColor</Color>
</Background1>
<Static1>
<!--<Skin>: Texture name-->
<Skin>Menu</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>40</X>
<Y>40</Y>
<Z>0,00</Z>
<W>1200</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static1>
<Text1>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>48</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENCONFIG_TITLE</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text1>
<Text2>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>105</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENCONFIG_NUMPLAYERT1</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text2>
<Text3>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>165</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENCONFIG_NUMPLAYERT2</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text3>
<Text4>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>225</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENCONFIG_NUMFIELDS</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text4>
<Text5>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>285</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENCONFIG_SONGSOURCE</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text5>
<Text6>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>405</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENCONFIG_GAMEMODE</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text6>
<ButtonNext>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>985</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_NEXT</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonNext>
<ButtonBack>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_BACK</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonBack>
<SelectSlideNumPlayerTeam1>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>100</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>105</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>105</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>9</NumVisible>
</SelectSlideNumPlayerTeam1>
<SelectSlideNumPlayerTeam2>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>160</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>165</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>165</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>9</NumVisible>
</SelectSlideNumPlayerTeam2>
<SelectSlideNumFields>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>220</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>225</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>225</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>3</NumVisible>
</SelectSlideNumFields>
<SelectSlideSongSource>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>280</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>285</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>285</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>3</NumVisible>
</SelectSlideSongSource>
<SelectSlidePlaylist>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>340</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>345</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>345</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>1</NumVisible>
</SelectSlidePlaylist>
<SelectSlideCategory>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>340</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>345</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>345</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>1</NumVisible>
</SelectSlideCategory>
<SelectSlideGameMode>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>400</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>405</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>405</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>1</NumVisible>
</SelectSlideGameMode>
</PartyScreenTicTacToeConfig>
</root>
@@ -0,0 +1,844 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<PartyScreenTicTacToeMain>
<ScreenVersion>1</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
<!--<Video>: Background video name-->
<Video>BG_Video</Video>
<!--<Skin>: Background Texture name-->
<Skin>BG_Default</Skin>
<!--<Color>: Background color for type "Color" from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>BackgroundColor</Color>
</Background1>
<Static1>
<!--<Skin>: Texture name-->
<Skin>Menu</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>40</X>
<Y>40</Y>
<Z>0,00</Z>
<W>1200</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static1>
<StaticPopupBG>
<!--<Skin>: Texture name-->
<Skin>PopupBG</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>0</X>
<Y>0</Y>
<Z>-2,00</Z>
<W>1280</W>
<H>720</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPopupBG>
<StaticAvatarT1>
<!--<Skin>: Texture name-->
<Skin>PopupBG</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>10</X>
<Y>200</Y>
<Z>-1,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticAvatarT1>
<StaticAvatarT2>
<!--<Skin>: Texture name-->
<Skin>PopupBG</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>1170</X>
<Y>200</Y>
<Z>-1,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticAvatarT2>
<Text1>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>48</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENMAIN_TITLE</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text1>
<TextNextPlayerT1>
<!--<X>, <Y>: Text position-->
<X>160</X>
<Y>150</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>40</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENMAIN_NEXT_PLAYER</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextNextPlayerT1>
<TextNextPlayerT2>
<!--<X>, <Y>: Text position-->
<X>1120</X>
<Y>150</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>40</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENMAIN_NEXT_PLAYER</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextNextPlayerT2>
<TextNextPlayerNameT1>
<!--<X>, <Y>: Text position-->
<X>120</X>
<Y>230</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>40</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextNextPlayerNameT1>
<TextNextPlayerNameT2>
<!--<X>, <Y>: Text position-->
<X>1160</X>
<Y>230</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>40</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Right</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextNextPlayerNameT2>
<TextTeamChoosing>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>90</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>40</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextTeamChoosing>
<TextFinishMessage>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>90</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>40</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextFinishMessage>
<TextPopupReallyExit>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>265</Y>
<!--<Z>: Text position-->
<Z>-2,01</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>380</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENMAIN_POPUP_REALLYEXIT</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextPopupReallyExit>
<ButtonJokerRandomT1>
<!--<Skin>: Texture name-->
<Skin>Random</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Random</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>10</X>
<Y>320</Y>
<Z>0,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1Dim</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>Player1</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>50</X>
<Y>25</Y>
<!--<H>: Text height-->
<H>50</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>50</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonJokerRandomT1>
<ButtonJokerRandomT2>
<!--<Skin>: Texture name-->
<Skin>Random</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Random</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>1170</X>
<Y>320</Y>
<Z>0,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2Dim</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>Player2</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>50</X>
<Y>25</Y>
<!--<H>: Text height-->
<H>50</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>50</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonJokerRandomT2>
<ButtonJokerRetryT1>
<!--<Skin>: Texture name-->
<Skin>RepeatIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>RepeatIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>110</X>
<Y>320</Y>
<Z>0,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1Dim</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>Player1</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>48</X>
<Y>25</Y>
<!--<H>: Text height-->
<H>50</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>50</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonJokerRetryT1>
<ButtonJokerRetryT2>
<!--<Skin>: Texture name-->
<Skin>RepeatIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>RepeatIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>1070</X>
<Y>320</Y>
<Z>0,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2Dim</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>Player2</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>48</X>
<Y>25</Y>
<!--<H>: Text height-->
<H>50</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>50</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonJokerRetryT2>
<ButtonNextRound>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>1030</X>
<Y>625</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_NEXT_ROUND</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonNextRound>
<ButtonBack>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>100</X>
<Y>625</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_BACK</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonBack>
<ButtonExit>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>100</X>
<Y>625</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_EXIT</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonExit>
<ButtonPopupYes>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>665</X>
<Y>360</Y>
<Z>-2,01</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_YES</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonPopupYes>
<ButtonPopupNo>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>465</X>
<Y>360</Y>
<Z>-2,01</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_NO</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonPopupNo>
<ButtonField>
<!--<Skin>: Texture name-->
<Skin>CoverTile</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>CoverTile</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>0</X>
<Y>0</Y>
<Z>-1,01</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonField>
</PartyScreenTicTacToeMain>
</root>
@@ -0,0 +1,332 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<PartyScreenTicTacToeNames>
<ScreenVersion>1</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
<!--<Video>: Background video name-->
<Video>BG_Video</Video>
<!--<Skin>: Background Texture name-->
<Skin>BG_Default</Skin>
<!--<Color>: Background color for type "Color" from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>BackgroundColor</Color>
</Background1>
<Static1>
<!--<Skin>: Texture name-->
<Skin>Menu</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>40</X>
<Y>40</Y>
<Z>0,00</Z>
<W>1200</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static1>
<Text1>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>48</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENNAMES_TITLE</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text1>
<Text2>
<!--<X>, <Y>: Text position-->
<X>58</X>
<Y>375</Y>
<!--<Z>: Text position-->
<Z>-1,00</Z>
<!--<H>: Text height-->
<H>22</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENNAMES_TEAM1</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text2>
<Text3>
<!--<X>, <Y>: Text position-->
<X>58</X>
<Y>500</Y>
<!--<Z>: Text position-->
<Z>-1,00</Z>
<!--<H>: Text height-->
<H>22</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_SCREENNAMES_TEAM2</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text3>
<ButtonNext>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>985</X>
<Y>625</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_NEXT</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonNext>
<ButtonBack>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<Y>625</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text>TR_BUTTON_BACK</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonBack>
<ButtonPlayerDestination>
<!--<Skin>: Texture name-->
<Skin>CoverTile</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>CoverTile</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>0</X>
<Y>0</Y>
<Z>0,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>50</X>
<Y>102</Y>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>98</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonPlayerDestination>
<ButtonPlayerChoose>
<!--<Skin>: Texture name-->
<Skin>CoverTile</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>CoverTile</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>0</X>
<Y>0</Y>
<Z>0,00</Z>
<W>100</W>
<H>100</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>50</X>
<Y>102</Y>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>98</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Center</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Nothing or translation tag-->
<Text />
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonPlayerChoose>
</PartyScreenTicTacToeNames>
</root>
+18 -2
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenScore>
<ScreenVersion>2</ScreenVersion>
<ScreenVersion>3</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
@@ -3745,5 +3745,21 @@
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextDifficultyP6N6>
<ScreenSettingShortScore>
<Type>Int</Type>
<Value>7</Value>
</ScreenSettingShortScore>
<ScreenSettingShortRating>
<Type>Int</Type>
<Value>4</Value>
</ScreenSettingShortRating>
<ScreenSettingShortDifficulty>
<Type>Int</Type>
<Value>4</Value>
</ScreenSettingShortDifficulty>
<ScreenSettingAnimationDirection>
<Type>String</Type>
<Value>Horizontal</Value>
</ScreenSettingAnimationDirection>
</ScreenScore>
</root>
</root>
@@ -1,5 +1,8 @@
ScreenScore
++++++++++
Version 3:
Add <ScreenSettingShortScore>, <ScreenSettingShortRating>, <ScreenSettingShortDifficulty> to change text-string with player-num >= <Value>
Add <ScreenSettingAnimationDirection>, set <Value> to "vertical" to draw animation in vertical direction.
++++++++++
Version 2:
@@ -5,7 +5,7 @@
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{6F3E1874-F28A-40E9-AFBD-31934D593679}</ProjectGuid>
<ProjectGuid>{5A4053F1-5AD5-441F-B254-D97A088127B6}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PartyModeChallenge</RootNamespace>
@@ -0,0 +1,706 @@
using System;
using System.Collections.Generic;
using System.Text;
using Vocaluxe.Menu;
namespace Vocaluxe.PartyModes
{
public enum ESongSource
{
TR_ALLSONGS,
TR_CATEGORY,
TR_PLAYLIST
}
public enum EPartyGameMode
{
TR_GAMEMODE_NORMAL,
TR_GAMEMODE_SHORTSONG,
TR_GAMEMODE_DUET
}
public class Round
{
public int SongID;
public int SingerTeam1;
public int SingerTeam2;
public int PointsTeam1;
public int PointsTeam2;
public int Winner;
public bool Finished = false;
}
#region Communication
#region ToScreen
public struct DataToScreenConfig
{
public int NumPlayerTeam1;
public int NumPlayerTeam2;
public int NumFields;
public ESongSource SongSource;
public int CategoryID;
public int PlaylistID;
public EPartyGameMode GameMode;
}
public struct DataToScreenNames
{
public int NumPlayerTeam1;
public int NumPlayerTeam2;
public List<int> ProfileIDsTeam1;
public List<int> ProfileIDsTeam2;
}
public struct DataToScreenMain
{
public int CurrentRoundNr;
public int Team;
public int NumPlayerTeam1;
public int NumPlayerTeam2;
public int NumFields;
public List<Round> Rounds;
public List<int> Songs;
public List<int> ProfileIDsTeam1;
public List<int> ProfileIDsTeam2;
public int[] NumJokerRandom;
public int[] NumJokerRetry;
}
public struct DataFromScreen
{
public FromScreenConfig ScreenConfig;
public FromScreenNames ScreenNames;
public FromScreenMain ScreenMain;
}
public struct FromScreenConfig
{
public int NumPlayerTeam1;
public int NumPlayerTeam2;
public int NumFields;
public ESongSource SongSource;
public int CategoryID;
public int PlaylistID;
public EPartyGameMode GameMode;
}
public struct FromScreenNames
{
public bool FadeToConfig;
public bool FadeToMain;
public List<int> ProfileIDsTeam1;
public List<int> ProfileIDsTeam2;
}
public struct FromScreenMain
{
public bool FadeToSinging;
public bool FadeToNameSelection;
public List<Round> Rounds;
public int SingRoundNr;
public List<int> Songs;
}
#endregion FromScreen
#endregion Communication
public sealed class PartyModeTicTacToe : CPartyMode
{
private const int MaxPlayer = 20;
private const int MinPlayer = 2;
private const int MaxTeams = 2;
private const int MinTeams = 2;
private const int NumFields = 9;
enum EStage
{
NotStarted,
Config,
Names,
Main,
Singing
}
struct Data
{
public int NumPlayerTeam1;
public int NumPlayerTeam2;
public int NumFields;
public int Team;
public List<int> ProfileIDsTeam1;
public List<int> ProfileIDsTeam2;
public ESongSource SongSource;
public int CategoryID;
public int PlaylistID;
public EPartyGameMode GameMode;
public List<Round> Rounds;
public List<int> Songs;
public int CurrentRoundNr;
public int SingRoundNr;
public int[] NumJokerRandom;
public int[] NumJokerRetry;
}
private DataToScreenConfig ToScreenConfig;
private DataToScreenNames ToScreenNames;
private DataToScreenMain ToScreenMain;
private Data GameData;
private EStage _Stage;
public PartyModeTicTacToe()
{
_ScreenSongOptions.Selection.RandomOnly = false;
_ScreenSongOptions.Selection.PartyMode = true;
_ScreenSongOptions.Selection.CategoryChangeAllowed = true;
_ScreenSongOptions.Selection.NumJokers = new int[] { 5, 5 };
_ScreenSongOptions.Selection.TeamNames = new string[] { "foo", "bar" };
_ScreenSongOptions.Sorting.SearchString = String.Empty;
_ScreenSongOptions.Sorting.SearchActive = false;
_ScreenSongOptions.Sorting.ShowDuetSongs = false;
_Stage = EStage.NotStarted;
ToScreenConfig = new DataToScreenConfig();
ToScreenNames = new DataToScreenNames();
ToScreenMain = new DataToScreenMain();
GameData = new Data();
GameData.NumFields = 9;
GameData.NumPlayerTeam1 = 2;
GameData.NumPlayerTeam2 = 2;
GameData.ProfileIDsTeam1 = new List<int>();
GameData.ProfileIDsTeam2 = new List<int>();
GameData.CurrentRoundNr = 0;
GameData.SingRoundNr = 0;
GameData.SongSource = ESongSource.TR_ALLSONGS;
GameData.PlaylistID = 0;
GameData.CategoryID = 0;
GameData.GameMode = EPartyGameMode.TR_GAMEMODE_NORMAL;
GameData.Rounds = new List<Round>();
GameData.Songs = new List<int>();
GameData.NumJokerRandom = new int[2];
GameData.NumJokerRetry = new int[2];
}
public override bool Init()
{
_Stage = EStage.NotStarted;
_ScreenSongOptions.Sorting.IgnoreArticles = _Base.Config.GetIgnoreArticles();
_ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting();
_ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_OFF;
_ScreenSongOptions.Selection.SongIndex = -1;
if (_Base.Config.GetTabs() == EOffOn.TR_CONFIG_ON && _ScreenSongOptions.Sorting.SongSorting != ESongSorting.TR_CONFIG_NONE)
_ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_ON;
ToScreenMain.Rounds = new List<Round>();
ToScreenMain.Songs = new List<int>();
GameData.Songs = new List<int>();
GameData.Rounds = new List<Round>();
return true;
}
public override void DataFromScreen(string ScreenName, Object Data)
{
DataFromScreen data = new DataFromScreen();
switch (ScreenName)
{
case "PartyScreenTicTacToeConfig":
try
{
data = (DataFromScreen)Data;
GameData.NumPlayerTeam1 = data.ScreenConfig.NumPlayerTeam1;
GameData.NumPlayerTeam2 = data.ScreenConfig.NumPlayerTeam2;
GameData.NumFields = data.ScreenConfig.NumFields;
GameData.SongSource = data.ScreenConfig.SongSource;
GameData.CategoryID = data.ScreenConfig.CategoryID;
GameData.PlaylistID = data.ScreenConfig.PlaylistID;
GameData.GameMode = data.ScreenConfig.GameMode;
_Stage = EStage.Config;
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode TicTacToe. Can't cast received data from screen " + ScreenName + ". " + e.Message);
}
break;
case "PartyScreenTicTacToeNames":
try
{
data = (DataFromScreen)Data;
if (data.ScreenNames.FadeToConfig)
_Stage = EStage.NotStarted;
else
{
if (_Base.Game.GetRandom(100) < 50)
GameData.Team = 0;
else
GameData.Team = 1;
GameData.ProfileIDsTeam1 = data.ScreenNames.ProfileIDsTeam1;
GameData.ProfileIDsTeam2 = data.ScreenNames.ProfileIDsTeam2;
_Stage = EStage.Names;
}
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode TicTacToe. Can't cast received data from screen " + ScreenName + ". " + e.Message);
}
break;
case "PartyScreenTicTacToeMain":
try
{
data = (DataFromScreen)Data;
if (data.ScreenMain.FadeToSinging)
{
_Stage = EStage.Singing;
GameData.Rounds = data.ScreenMain.Rounds;
GameData.SingRoundNr = data.ScreenMain.SingRoundNr;
GameData.Songs = data.ScreenMain.Songs;
}
if (data.ScreenMain.FadeToNameSelection)
{
_Stage = EStage.Config;
}
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode TicTacToe. Can't cast received data from screen " + ScreenName + ". " + e.Message);
}
if (_Stage == EStage.Singing)
StartRound(data.ScreenMain.SingRoundNr);
if (_Stage == EStage.Config)
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
break;
default:
_Base.Log.LogError("Error in party mode TicTacToe. Wrong screen is sending: " + ScreenName);
break;
}
}
public override void UpdateGame()
{
/*
if (_Base.Songs.GetCurrentCategoryIndex() != -1 || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF)
_ScreenSongOptions.Selection.RandomOnly = true;
else
_ScreenSongOptions.Selection.RandomOnly = false;*/
}
public override CMenuParty GetNextPartyScreen(out EScreens AlternativeScreen)
{
CMenuParty Screen = null;
AlternativeScreen = EScreens.ScreenSong;
switch (_Stage)
{
case EStage.NotStarted:
_Screens.TryGetValue("PartyScreenTicTacToeConfig", out Screen);
if (_Screens != null)
{
ToScreenConfig.NumPlayerTeam1 = GameData.NumPlayerTeam1;
ToScreenConfig.NumPlayerTeam2 = GameData.NumPlayerTeam2;
ToScreenConfig.NumFields = GameData.NumFields;
ToScreenConfig.SongSource = GameData.SongSource;
ToScreenConfig.CategoryID = GameData.CategoryID;
ToScreenConfig.PlaylistID = GameData.PlaylistID;
ToScreenConfig.GameMode = GameData.GameMode;
Screen.DataToScreen(ToScreenConfig);
}
break;
case EStage.Config:
_Screens.TryGetValue("PartyScreenTicTacToeNames", out Screen);
if (_Screens != null)
{
ToScreenNames.NumPlayerTeam1 = GameData.NumPlayerTeam1;
ToScreenNames.NumPlayerTeam2 = GameData.NumPlayerTeam2;
ToScreenNames.ProfileIDsTeam1 = GameData.ProfileIDsTeam1;
ToScreenNames.ProfileIDsTeam2 = GameData.ProfileIDsTeam2;
Screen.DataToScreen(ToScreenNames);
}
break;
case EStage.Names:
_Screens.TryGetValue("PartyScreenTicTacToeMain", out Screen);
if (_Screens != null)
{
if (GameData.Team == 1)
GameData.Team = 0;
else
GameData.Team = 1;
_Base.Songs.ResetPartySongSung();
GameData.CurrentRoundNr = 1;
ToScreenMain.CurrentRoundNr = 1;
ToScreenMain.NumPlayerTeam1 = GameData.NumPlayerTeam1;
ToScreenMain.NumPlayerTeam2 = GameData.NumPlayerTeam2;
ToScreenMain.NumFields = GameData.NumFields;
ToScreenMain.ProfileIDsTeam1 = GameData.ProfileIDsTeam1;
ToScreenMain.ProfileIDsTeam2 = GameData.ProfileIDsTeam2;
CreateRounds();
PrepareSongList();
SetNumJokers();
ToScreenMain.Rounds = GameData.Rounds;
ToScreenMain.Songs = GameData.Songs;
ToScreenMain.NumJokerRandom = GameData.NumJokerRandom;
ToScreenMain.NumJokerRetry = GameData.NumJokerRetry;
ToScreenMain.Team = GameData.Team;
Screen.DataToScreen(ToScreenMain);
}
break;
case EStage.Main:
//nothing to do
break;
case EStage.Singing:
_Screens.TryGetValue("PartyScreenTicTacToeMain", out Screen);
if (_Screens != null)
{
if (GameData.Team == 1)
GameData.Team = 0;
else
GameData.Team = 1;
ToScreenMain.CurrentRoundNr = GameData.CurrentRoundNr;
ToScreenMain.NumPlayerTeam1 = GameData.NumPlayerTeam1;
ToScreenMain.NumPlayerTeam2 = GameData.NumPlayerTeam2;
ToScreenMain.NumFields = GameData.NumFields;
ToScreenMain.ProfileIDsTeam1 = GameData.ProfileIDsTeam1;
ToScreenMain.ProfileIDsTeam2 = GameData.ProfileIDsTeam2;
ToScreenMain.Rounds = GameData.Rounds;
ToScreenMain.Songs = GameData.Songs;
ToScreenMain.NumJokerRandom = GameData.NumJokerRandom;
ToScreenMain.NumJokerRetry = GameData.NumJokerRetry;
ToScreenMain.Team = GameData.Team;
Screen.DataToScreen(ToScreenMain);
}
break;
default:
break;
}
return Screen;
}
public override EScreens GetStartScreen()
{
return EScreens.ScreenPartyDummy;
}
public override EScreens GetMainScreen()
{
return EScreens.ScreenPartyDummy;
}
public override ScreenSongOptions GetScreenSongOptions()
{
_ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting();
_ScreenSongOptions.Sorting.Tabs = _Base.Config.GetTabs();
_ScreenSongOptions.Sorting.IgnoreArticles = _Base.Config.GetIgnoreArticles();
return _ScreenSongOptions;
}
public override void OnSongChange(int SongIndex, ref ScreenSongOptions ScreenSongOptions)
{
ScreenSongOptions = _ScreenSongOptions;
}
public override void OnCategoryChange(int CategoryIndex, ref ScreenSongOptions ScreenSongOptions)
{
ScreenSongOptions = _ScreenSongOptions;
}
public override void SetSearchString(string SearchString, bool Visible)
{
_ScreenSongOptions.Sorting.SearchString = SearchString;
_ScreenSongOptions.Sorting.SearchActive = Visible;
}
public override int GetMaxPlayer()
{
return MaxPlayer;
}
public override int GetMinPlayer()
{
return MinPlayer;
}
public override int GetMaxTeams()
{
return MaxTeams;
}
public override int GetMinTeams()
{
return MinTeams;
}
public override int GetMaxNumRounds()
{
return NumFields;
}
public override void JokerUsed(int TeamNr)
{
}
public override void SongSelected(int SongID)
{
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
switch (GameData.GameMode)
{
case EPartyGameMode.TR_GAMEMODE_NORMAL:
gm = EGameMode.TR_GAMEMODE_NORMAL;
break;
case EPartyGameMode.TR_GAMEMODE_DUET:
gm = EGameMode.TR_GAMEMODE_DUET;
break;
case EPartyGameMode.TR_GAMEMODE_SHORTSONG:
gm = EGameMode.TR_GAMEMODE_SHORTSONG;
break;
}
_Base.Game.AddSong(SongID, gm);
_Base.Songs.AddPartySongSung(SongID);
_Base.Graphics.FadeTo(EScreens.ScreenSing);
}
public override void LeavingHighscore()
{
UpdateScores();
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
}
private void CreateRounds()
{
GameData.Rounds = new List<Round>();
//Prepare Player-IDs
List<int> Team1 = new List<int>();
List<int> Team2 = new List<int>();
List<int> IDs1 = new List<int>();
List<int> IDs2 = new List<int>();
int num = 0;
int random = 0;
//Add IDs to team-list
while (Team1.Count < GameData.NumFields)
{
if (IDs1.Count == 0)
for (int i = 0; i < GameData.NumPlayerTeam1; i++)
IDs1.Add(i);
if (IDs2.Count == 0)
for (int i = 0; i < GameData.NumPlayerTeam2; i++)
IDs2.Add(i);
if (Team1.Count < GameData.NumFields)
{
random = _Base.Game.GetRandom((IDs1.Count - 1) * 10);
num = (int)Math.Round((double)random/10);
if (num >= IDs1.Count)
num = IDs1.Count - 1;
Team1.Add(IDs1[num]);
IDs1.Remove(Team1[Team1.Count - 1]);
}
if (Team2.Count < GameData.NumFields)
{
random = _Base.Game.GetRandom((IDs2.Count - 1) * 20);
num = (int)Math.Round((double)random / 20);
if (num >= IDs2.Count)
num = IDs2.Count - 1;
Team2.Add(IDs2[num]);
IDs2.Remove(Team2[Team2.Count - 1]);
}
}
for (int i = 0; i < GameData.NumFields; i++)
{
Round r = new Round();
r.SingerTeam1 = Team1[i];
r.SingerTeam2 = Team2[i];
GameData.Rounds.Add(r);
}
}
private void PrepareSongList()
{
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
switch (GameData.GameMode)
{
case EPartyGameMode.TR_GAMEMODE_NORMAL:
gm = EGameMode.TR_GAMEMODE_NORMAL;
break;
case EPartyGameMode.TR_GAMEMODE_DUET:
gm = EGameMode.TR_GAMEMODE_DUET;
break;
case EPartyGameMode.TR_GAMEMODE_SHORTSONG:
gm = EGameMode.TR_GAMEMODE_SHORTSONG;
break;
}
while(GameData.Songs.Count < (GameData.NumFields + GameData.NumJokerRandom[0] + GameData.NumJokerRandom[1])){
List<int> Songs = new List<int>();
switch (GameData.SongSource)
{
case ESongSource.TR_PLAYLIST:
for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(GameData.PlaylistID); i++)
{
int id = _Base.Playlist.GetPlaylistSong(GameData.PlaylistID, i).SongID;
foreach (EGameMode mode in _Base.Songs.GetSongByID(id).AvailableGameModes)
if (mode == gm)
Songs.Add(id);
}
break;
case ESongSource.TR_ALLSONGS:
for (int i = 0; i < _Base.Songs.GetNumSongs(); i++)
{
foreach (EGameMode mode in _Base.Songs.GetSongByID(i).AvailableGameModes)
if (mode == gm)
Songs.Add(i);
}
break;
case ESongSource.TR_CATEGORY:
_Base.Songs.SetCategory(GameData.CategoryID);
for (int i = 0; i < _Base.Songs.NumSongsInCategory(GameData.CategoryID); i++)
{
foreach(EGameMode mode in _Base.Songs.GetVisibleSong(i).AvailableGameModes)
if(mode == gm)
Songs.Add(_Base.Songs.GetVisibleSong(i).ID);
}
_Base.Songs.SetCategory(-1);
break;
}
while(Songs.Count > 0)
{
GameData.Songs.Add(Songs[_Base.Game.GetRandom(Songs.Count - 1)]);
Songs.Remove(GameData.Songs[GameData.Songs.Count - 1]);
}
}
}
private void StartRound(int RoundNr)
{
_Base.Game.Reset();
_Base.Game.ClearSongs();
_Base.Game.SetNumPlayer(2);
SPlayer[] player = _Base.Game.GetPlayer();
if (player == null)
return;
if (player.Length < 2)
return;
SProfile[] profiles = _Base.Profiles.GetProfiles();
Round r = GameData.Rounds[RoundNr];
for (int i = 0; i < 2; i++)
{
//default values
player[i].Name = "foobar";
player[i].Difficulty = EGameDifficulty.TR_CONFIG_EASY;
player[i].ProfileID = -1;
}
//try to fill with the right data
if (r != null)
{
if (GameData.ProfileIDsTeam1[r.SingerTeam1] < profiles.Length)
{
player[0].Name = profiles[GameData.ProfileIDsTeam1[r.SingerTeam1]].PlayerName;
player[0].Difficulty = profiles[GameData.ProfileIDsTeam1[r.SingerTeam1]].Difficulty;
player[0].ProfileID = GameData.ProfileIDsTeam1[r.SingerTeam1];
if (GameData.GameMode == EPartyGameMode.TR_GAMEMODE_DUET)
player[0].LineNr = 0;
}
if (GameData.ProfileIDsTeam2[r.SingerTeam2] < profiles.Length)
{
player[1].Name = profiles[GameData.ProfileIDsTeam2[r.SingerTeam2]].PlayerName;
player[1].Difficulty = profiles[GameData.ProfileIDsTeam2[r.SingerTeam2]].Difficulty;
player[1].ProfileID = GameData.ProfileIDsTeam2[r.SingerTeam2];
if (GameData.GameMode == EPartyGameMode.TR_GAMEMODE_DUET)
player[1].LineNr = 1;
}
SongSelected(r.SongID);
}
else
return;
}
private void SetNumJokers()
{
switch (GameData.NumFields)
{
case 9:
GameData.NumJokerRandom[0] = 1;
GameData.NumJokerRandom[1] = 1;
GameData.NumJokerRetry[0] = 0;
GameData.NumJokerRetry[1] = 0;
break;
case 16:
GameData.NumJokerRandom[0] = 2;
GameData.NumJokerRandom[1] = 2;
GameData.NumJokerRetry[0] = 1;
GameData.NumJokerRetry[1] = 1;
break;
case 25:
GameData.NumJokerRandom[0] = 3;
GameData.NumJokerRandom[1] = 3;
GameData.NumJokerRetry[0] = 2;
GameData.NumJokerRetry[1] = 2;
break;
}
}
private void UpdateScores()
{
if (!GameData.Rounds[GameData.SingRoundNr].Finished)
GameData.CurrentRoundNr++;
SPlayer[] results = _Base.Game.GetPlayer();
if (results == null)
return;
if (results.Length < 2)
return;
GameData.Rounds[GameData.SingRoundNr].PointsTeam1 = (int)Math.Round(results[0].Points);
GameData.Rounds[GameData.SingRoundNr].PointsTeam2 = (int)Math.Round(results[1].Points);
GameData.Rounds[GameData.SingRoundNr].Finished = true;
if (GameData.Rounds[GameData.SingRoundNr].PointsTeam1 < GameData.Rounds[GameData.SingRoundNr].PointsTeam2)
{
GameData.Rounds[GameData.SingRoundNr].Winner = 2;
}
else if (GameData.Rounds[GameData.SingRoundNr].PointsTeam1 > GameData.Rounds[GameData.SingRoundNr].PointsTeam2)
{
GameData.Rounds[GameData.SingRoundNr].Winner = 1;
}
else
{
GameData.Rounds[GameData.SingRoundNr].Finished = false;
GameData.CurrentRoundNr--;
}
}
}
}
@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{6F3E1874-F28A-40E9-AFBD-31934D593679}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PartyModeTicTacToe</RootNamespace>
<AssemblyName>PartyModeTicTacToe</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugWin|x86' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<DefineConstants>TRACE;DEBUG;WIN</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseWin|x86' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DefineConstants>WIN</DefineConstants>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugWin|x64'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<DefineConstants>TRACE;DEBUG;WIN</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseWin|x64'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DefineConstants>WIN</DefineConstants>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugLinux|x86' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<DefineConstants>TRACE;DEBUG;LINUX</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseLinux|x86' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DefineConstants>LINUX</DefineConstants>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugLinux|x64'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<DefineConstants>TRACE;DEBUG;LINUX</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseLinux|x64'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Output\PartyModes\TicTacToe\Code</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DefineConstants>LINUX</DefineConstants>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Compile Include="PartyModeTicTacToe.cs">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
<Compile Include="PartyScreenTicTacToeConfig.cs">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
<Compile Include="PartyScreenTicTacToeMain.cs">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
<Compile Include="PartyScreenTicTacToeNames.cs">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\VocaluxeLib\VocaluxeLib.csproj">
<Project>{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}</Project>
<Name>VocaluxeLib</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.XML" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,345 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Vocaluxe.Menu;
namespace Vocaluxe.PartyModes
{
public class PartyScreenTicTacToeConfig : CMenuParty
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
const string SelectSlideNumPlayerTeam1 = "SelectSlideNumPlayerTeam1";
const string SelectSlideNumPlayerTeam2 = "SelectSlideNumPlayerTeam2";
const string SelectSlideNumFields = "SelectSlideNumFields";
const string SelectSlideSongSource = "SelectSlideSongSource";
const string SelectSlidePlaylist = "SelectSlidePlaylist";
const string SelectSlideCategory = "SelectSlideCategory";
const string SelectSlideGameMode = "SelectSlideGameMode";
const string ButtonNext = "ButtonNext";
const string ButtonBack = "ButtonBack";
private bool ConfigOk = true;
DataFromScreen Data;
public PartyScreenTicTacToeConfig()
{
}
protected override void Init()
{
base.Init();
_ThemeName = "PartyScreenTicTacToeConfig";
_ThemeSelectSlides = new string[] { SelectSlideNumPlayerTeam1, SelectSlideNumPlayerTeam2, SelectSlideNumFields, SelectSlideSongSource, SelectSlidePlaylist, SelectSlideCategory, SelectSlideGameMode };
_ThemeButtons = new string[] { ButtonNext, ButtonBack };
_ScreenVersion = ScreenVersion;
Data = new DataFromScreen();
FromScreenConfig config = new FromScreenConfig();
config.PlaylistID = 0;
config.NumFields = 9;
config.NumPlayerTeam1 = 2;
config.NumPlayerTeam2 = 2;
config.GameMode = EPartyGameMode.TR_GAMEMODE_NORMAL;
config.CategoryID = 0;
config.SongSource = ESongSource.TR_ALLSONGS;
Data.ScreenConfig = config;
}
public override void LoadTheme(string XmlPath)
{
base.LoadTheme(XmlPath);
}
public override void DataToScreen(object ReceivedData)
{
DataToScreenConfig config = new DataToScreenConfig();
try
{
config = (DataToScreenConfig)ReceivedData;
Data.ScreenConfig.NumFields = config.NumFields;
Data.ScreenConfig.NumPlayerTeam1 = config.NumPlayerTeam1;
Data.ScreenConfig.NumPlayerTeam2 = config.NumPlayerTeam2;
Data.ScreenConfig.PlaylistID = config.PlaylistID;
Data.ScreenConfig.CategoryID = config.CategoryID;
Data.ScreenConfig.SongSource = config.SongSource;
Data.ScreenConfig.GameMode = config.GameMode;
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode screen TicTacToe config. Can't cast received data from game mode " + _ThemeName + ". " + e.Message);;
}
}
public override bool HandleInput(KeyEvent KeyEvent)
{
base.HandleInput(KeyEvent);
if (KeyEvent.KeyPressed)
{
}
else
{
switch (KeyEvent.Key)
{
case Keys.Back:
case Keys.Escape:
Back();
break;
case Keys.Enter:
UpdateSlides();
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
break;
case Keys.Left:
UpdateSlides();
break;
case Keys.Right:
UpdateSlides();
break;
}
}
return true;
}
public override bool HandleMouse(MouseEvent MouseEvent)
{
base.HandleMouse(MouseEvent);
if (MouseEvent.LB && IsMouseOver(MouseEvent))
{
UpdateSlides();
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
}
if (MouseEvent.RB)
{
Back();
}
return true;
}
public override void OnShow()
{
base.OnShow();
if (_Base.Config.GetMaxNumMics() >= 2)
ConfigOk = true;
FillSlides();
UpdateSlides();
}
public override bool UpdateGame()
{
Buttons[htButtons(ButtonNext)].Visible = ConfigOk;
return true;
}
public override bool Draw()
{
base.Draw();
return true;
}
public override void OnClose()
{
base.OnClose();
}
private void FillSlides()
{
// build num player slide (min player ... max player);
SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Clear();
for (int i = _PartyMode.GetMinPlayer()/2; i <= _PartyMode.GetMaxPlayer() / 2; i++)
{
SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].AddValue(i.ToString());
}
SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Selection = Data.ScreenConfig.NumPlayerTeam1 - (_PartyMode.GetMinPlayer()/2);
SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Clear();
for (int i = _PartyMode.GetMinPlayer()/2; i <= _PartyMode.GetMaxPlayer() / 2; i++)
{
SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].AddValue(i.ToString());
}
SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Selection = Data.ScreenConfig.NumPlayerTeam2 -( _PartyMode.GetMinPlayer()/2);
SelectSlides[htSelectSlides(SelectSlideNumFields)].Clear();
SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("9");
SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("16");
SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("25");
if (Data.ScreenConfig.NumFields == 9)
SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 0;
else if (Data.ScreenConfig.NumFields == 16)
SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 1;
else if (Data.ScreenConfig.NumFields == 25)
SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 2;
SelectSlides[htSelectSlides(SelectSlideSongSource)].Clear();
SelectSlides[htSelectSlides(SelectSlideSongSource)].SetValues<ESongSource>((int)Data.ScreenConfig.SongSource);
string[] _Playlists = _Base.Playlist.GetPlaylistNames();
SelectSlides[htSelectSlides(SelectSlidePlaylist)].Clear();
for (int i = 0; i < _Playlists.Length; i++)
{
string value = _Playlists[i] + " (" + _Base.Playlist.GetPlaylistSongCount(i) + " " + _Base.Language.Translate("TR_SONGS", _PartyModeID) + ")";
SelectSlides[htSelectSlides(SelectSlidePlaylist)].AddValue(value);
}
SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection = Data.ScreenConfig.PlaylistID;
SelectSlides[htSelectSlides(SelectSlidePlaylist)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST;
string[] _Categories = new string[_Base.Songs.GetNumCategories()];
for (int i = 0; i < _Base.Songs.GetNumCategories(); i++ )
{
_Categories[i] = _Base.Songs.GetCategory(i).Name;
}
SelectSlides[htSelectSlides(SelectSlideCategory)].Clear();
for (int i = 0; i < _Categories.Length; i++)
{
string value = _Categories[i] + " (" + _Base.Songs.NumSongsInCategory(i) + " " + _Base.Language.Translate("TR_SONGS", _PartyModeID) + ")";
SelectSlides[htSelectSlides(SelectSlideCategory)].AddValue(value);
}
SelectSlides[htSelectSlides(SelectSlideCategory)].Selection = Data.ScreenConfig.CategoryID;
SelectSlides[htSelectSlides(SelectSlideCategory)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY;
SelectSlides[htSelectSlides(SelectSlideGameMode)].Visible = true;
SelectSlides[htSelectSlides(SelectSlideGameMode)].SetValues<EPartyGameMode>((int)Data.ScreenConfig.GameMode);
}
private void UpdateSlides()
{
Data.ScreenConfig.NumPlayerTeam1 = SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Selection + (_PartyMode.GetMinPlayer()/2);
Data.ScreenConfig.NumPlayerTeam2 = SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Selection + (_PartyMode.GetMinPlayer()/2);
if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 0)
Data.ScreenConfig.NumFields = 9;
else if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 1)
Data.ScreenConfig.NumFields = 16;
else if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 2)
Data.ScreenConfig.NumFields = 25;
Data.ScreenConfig.SongSource = (ESongSource)SelectSlides[htSelectSlides(SelectSlideSongSource)].Selection;
Data.ScreenConfig.PlaylistID = SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection;
Data.ScreenConfig.CategoryID = SelectSlides[htSelectSlides(SelectSlideCategory)].Selection;
Data.ScreenConfig.GameMode = (EPartyGameMode)SelectSlides[htSelectSlides(SelectSlideGameMode)].Selection;
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
switch (Data.ScreenConfig.GameMode)
{
case EPartyGameMode.TR_GAMEMODE_NORMAL:
gm = EGameMode.TR_GAMEMODE_NORMAL;
break;
case EPartyGameMode.TR_GAMEMODE_DUET:
gm = EGameMode.TR_GAMEMODE_DUET;
break;
case EPartyGameMode.TR_GAMEMODE_SHORTSONG:
gm = EGameMode.TR_GAMEMODE_SHORTSONG;
break;
}
if (Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST)
{
if (_Base.Playlist.GetNumPlaylists() > 0)
if (_Base.Playlist.GetPlaylistSongCount(Data.ScreenConfig.PlaylistID) > 0)
{
ConfigOk = false;
for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(Data.ScreenConfig.PlaylistID); i++)
{
int id = _Base.Playlist.GetPlaylistSong(Data.ScreenConfig.PlaylistID, i).SongID;
foreach (EGameMode mode in _Base.Songs.GetSongByID(id).AvailableGameModes)
if (mode == gm)
{
ConfigOk = true;
break;
}
if (ConfigOk)
break;
}
}
else
ConfigOk = false;
else
ConfigOk = false;
}
if (Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY)
{
if (_Base.Songs.GetNumCategories() > 0)
if (_Base.Songs.NumSongsInCategory(Data.ScreenConfig.CategoryID) > 0)
{
_Base.Songs.SetCategory(Data.ScreenConfig.CategoryID);
ConfigOk = false;
for (int i = 0; i < _Base.Songs.NumSongsInCategory(Data.ScreenConfig.CategoryID); i++)
{
foreach (EGameMode mode in _Base.Songs.GetVisibleSong(i).AvailableGameModes)
if (mode == gm)
{
ConfigOk = true;
break;
}
if (ConfigOk)
break;
}
_Base.Songs.SetCategory(-1);
}
else
ConfigOk = false;
else
ConfigOk = false;
}
if (Data.ScreenConfig.SongSource == ESongSource.TR_ALLSONGS)
{
if (_Base.Songs.GetNumSongs() > 0)
{
for (int i = 0; i < _Base.Songs.GetNumSongs(); i++)
{
foreach (EGameMode mode in _Base.Songs.GetSongByID(i).AvailableGameModes)
if (mode == gm)
{
ConfigOk = true;
break;
}
if (ConfigOk)
break;
}
}
else
ConfigOk = false;
}
SelectSlides[htSelectSlides(SelectSlideCategory)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY;
SelectSlides[htSelectSlides(SelectSlidePlaylist)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST;
}
private void Back()
{
FadeTo(EScreens.ScreenParty);
}
private void Next()
{
_PartyMode.DataFromScreen(_ThemeName, Data);
}
}
}
@@ -0,0 +1,680 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Vocaluxe.Menu;
namespace Vocaluxe.PartyModes
{
public class Field
{
public Round Content;
public CButton Button;
}
public enum EStatus
{
FieldChoosing,
JokerRetry,
FieldSelected,
None
}
public class PartyScreenTicTacToeMain : CMenuParty
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
const string TextPopupReallyExit = "TextPopupReallyExit";
const string TextTeamChoosing = "TextTeamChoosing";
const string TextFinishMessage = "TextFinishMessage";
const string TextNextPlayerT1 = "TextNextPlayerT1";
const string TextNextPlayerT2 = "TextNextPlayerT2";
const string TextNextPlayerNameT1 = "TextNextPlayerNameT1";
const string TextNextPlayerNameT2 = "TextNextPlayerNameT2";
const string ButtonNextRound = "ButtonNextRound";
const string ButtonBack = "ButtonBack";
const string ButtonExit = "ButtonExit";
const string ButtonPopupYes = "ButtonPopupYes";
const string ButtonPopupNo = "ButtonPopupNo";
const string ButtonField = "ButtonField";
const string ButtonJokerRandomT1 = "ButtonJokerRandomT1";
const string ButtonJokerRandomT2 = "ButtonJokerRandomT2";
const string ButtonJokerRetryT1 = "ButtonJokerRetryT1";
const string ButtonJokerRetryT2 = "ButtonJokerRetryT2";
const string StaticPopupBG = "StaticPopupBG";
const string StaticAvatarT1 = "StaticAvatarT1";
const string StaticAvatarT2 = "StaticAvatarT2";
private bool ExitPopupVisible = false;
private DataFromScreen Data;
private DataToScreenMain GameData;
private List<Field> Fields;
private float FieldFirstX = 25;
private float FieldFirstY = 25;
private int FieldSpace = 10;
private float FieldSize = 100;
private int PreviewStream = -1;
private int SelectedField = -1;
private int OldSelectedField = -1;
private int[,] Possibilities;
private EStatus Action;
public PartyScreenTicTacToeMain()
{
}
protected override void Init()
{
base.Init();
_ThemeName = "PartyScreenTicTacToeMain";
_ThemeTexts = new string[] { TextPopupReallyExit, TextTeamChoosing, TextFinishMessage, TextNextPlayerT1, TextNextPlayerT2, TextNextPlayerNameT1, TextNextPlayerNameT2 };
_ThemeButtons = new string[] { ButtonNextRound, ButtonBack, ButtonExit, ButtonPopupYes, ButtonPopupNo, ButtonField, ButtonJokerRandomT1, ButtonJokerRandomT2, ButtonJokerRetryT1, ButtonJokerRetryT2 };
_ThemeStatics = new string[] { StaticPopupBG, StaticAvatarT1, StaticAvatarT2 };
_ScreenVersion = ScreenVersion;
Data = new DataFromScreen();
FromScreenMain config = new FromScreenMain();
GameData = new DataToScreenMain();
config.SingRoundNr = 1;
config.Rounds = new List<Round>();
config.Songs = new List<int>();
config.FadeToNameSelection = false;
config.FadeToSinging = false;
Data.ScreenMain = config;
Fields = new List<Field>();
}
public override void LoadTheme(string XmlPath)
{
base.LoadTheme(XmlPath);
CreateFields();
Buttons[htButtons(ButtonField)].Visible = false;
}
public override void DataToScreen(object ReceivedData)
{
DataToScreenMain config = new DataToScreenMain();
try
{
config = (DataToScreenMain)ReceivedData;
GameData = config;
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode screen TicTacToe main. Can't cast received data from game mode " + _ThemeName + ". " + e.Message); ;
}
}
public override bool HandleInput(KeyEvent KeyEvent)
{
base.HandleInput(KeyEvent);
if (KeyEvent.KeyPressed)
{
}
else
{
switch (KeyEvent.Key)
{
case Keys.Back:
case Keys.Escape:
if (!ExitPopupVisible)
if (GameData.CurrentRoundNr == 1 && Action != EStatus.FieldSelected)
Back();
else
ShowPopup(true);
else
ShowPopup(false);
break;
case Keys.Enter:
if (!ExitPopupVisible)
{
if (Buttons[htButtons(ButtonNextRound)].Selected)
NextRound();
if (Buttons[htButtons(ButtonBack)].Selected && GameData.CurrentRoundNr == 1 && Action != EStatus.FieldSelected)
Back();
if (Buttons[htButtons(ButtonExit)].Selected && (GameData.CurrentRoundNr > 1 || Action == EStatus.FieldSelected))
ShowPopup(true);
for (int i = 0; i < GameData.NumFields; i++)
{
switch (Action)
{
case EStatus.FieldChoosing:
if (Fields[i].Button.Selected)
{
SelectedField = i;
FieldSelected();
}
break;
case EStatus.JokerRetry:
if (Fields[i].Button.Selected)
{
SelectedField = i;
FieldSelectedAgain();
}
break;
}
}
if (Action == EStatus.FieldSelected)
{
if (Buttons[htButtons(ButtonJokerRandomT1)].Selected)
UseJoker(0, 0);
if (Buttons[htButtons(ButtonJokerRandomT2)].Selected)
UseJoker(1, 0);
if (Buttons[htButtons(ButtonJokerRetryT1)].Selected)
UseJoker(0, 1);
if (Buttons[htButtons(ButtonJokerRetryT2)].Selected)
UseJoker(1, 1);
}
}
else
{
if (Buttons[htButtons(ButtonPopupYes)].Selected)
EndParty();
if (Buttons[htButtons(ButtonPopupNo)].Selected)
ShowPopup(false);
}
break;
}
}
return true;
}
public override bool HandleMouse(MouseEvent MouseEvent)
{
base.HandleMouse(MouseEvent);
if (MouseEvent.LB && IsMouseOver(MouseEvent))
{
if (!ExitPopupVisible)
{
if (Buttons[htButtons(ButtonNextRound)].Selected)
NextRound();
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonExit)].Selected)
ShowPopup(true);
for (int i = 0; i < GameData.NumFields; i++)
{
switch (Action)
{
case EStatus.FieldChoosing:
if (Fields[i].Button.Selected)
{
SelectedField = i;
FieldSelected();
}
break;
case EStatus.JokerRetry:
if (Fields[i].Button.Selected)
{
SelectedField = i;
FieldSelectedAgain();
}
break;
}
}
if(Action == EStatus.FieldSelected)
{
if (Buttons[htButtons(ButtonJokerRandomT1)].Selected)
UseJoker(0, 0);
if (Buttons[htButtons(ButtonJokerRandomT2)].Selected)
UseJoker(1, 0);
if (Buttons[htButtons(ButtonJokerRetryT1)].Selected)
UseJoker(0, 1);
if (Buttons[htButtons(ButtonJokerRetryT2)].Selected)
UseJoker(1, 1);
}
}
else
{
if (Buttons[htButtons(ButtonPopupYes)].Selected)
EndParty();
if (Buttons[htButtons(ButtonPopupNo)].Selected)
ShowPopup(false);
}
}
if (MouseEvent.RB)
{
if (!ExitPopupVisible)
if (GameData.CurrentRoundNr == 1 && Action != EStatus.FieldSelected)
Back();
else
ShowPopup(true);
else
ShowPopup(false);
}
if (MouseEvent.Wheel != 0)
{
}
return true;
}
public override void OnShow()
{
base.OnShow();
PreviewStream = -1;
if (GameData.CurrentRoundNr == 1)
{
BuildWinnerPossibilities();
SelectedField = -1;
Buttons[htButtons(ButtonBack)].Visible = true;
Buttons[htButtons(ButtonExit)].Visible = false;
}
else
{
Buttons[htButtons(ButtonBack)].Visible = false;
Buttons[htButtons(ButtonExit)].Visible = true;
}
int Winner = GetWinner();
if (GameData.CurrentRoundNr <= GameData.NumFields && Winner == 0)
{
Action = EStatus.FieldChoosing;
UpdateTeamChoosingMessage();
Texts[htTexts(TextNextPlayerT1)].Visible = false;
Texts[htTexts(TextNextPlayerT2)].Visible = false;
Texts[htTexts(TextNextPlayerNameT1)].Visible = false;
Texts[htTexts(TextNextPlayerNameT2)].Visible = false;
Statics[htStatics(StaticAvatarT1)].Visible = false;
Statics[htStatics(StaticAvatarT2)].Visible = false;
Buttons[htButtons(ButtonJokerRandomT1)].Visible = false;
Buttons[htButtons(ButtonJokerRandomT2)].Visible = false;
Buttons[htButtons(ButtonJokerRetryT1)].Visible = false;
Buttons[htButtons(ButtonJokerRetryT2)].Visible = false;
Buttons[htButtons(ButtonNextRound)].Visible = false;
Texts[htTexts(TextFinishMessage)].Visible = false;
SetInteractionToButton(Buttons[htButtons(ButtonNextRound)]);
}
else
{
Action = EStatus.None;
Buttons[htButtons(ButtonNextRound)].Visible = false;
Texts[htTexts(TextFinishMessage)].Visible = true;
if (Winner > 0)
{
Texts[htTexts(TextFinishMessage)].Color = _Base.Theme.GetPlayerColor(Winner);
Texts[htTexts(TextFinishMessage)].Text = _Base.Language.Translate("TR_SCREENMAIN_WINNER", _PartyModeID) + " " + _Base.Language.Translate("TR_TEAM", _PartyModeID) + " " + Winner;
}
else
{
Texts[htTexts(TextFinishMessage)].Color = new SColorF(1, 1, 1, 1);
Texts[htTexts(TextFinishMessage)].Text = _Base.Language.Translate("TR_SCREENMAIN_NOWINNER", _PartyModeID);
}
SetInteractionToButton(Buttons[htButtons(ButtonExit)]);
}
UpdateFields();
UpdateFieldContents();
ShowPopup(false);
}
public override bool UpdateGame()
{
return true;
}
public override bool Draw()
{
base.Draw();
return true;
}
public override void OnClose()
{
base.OnClose();
_Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f);
}
private void CreateFields()
{
for (int i = 0; i < 25; i++)
{
Field f = new Field();
f.Button = GetNewButton(Buttons[htButtons(ButtonField)]);
f.Button.Visible = false;
f.Content = new Round();
AddButton(f.Button);
Fields.Add(f);
}
}
private void UpdateFields()
{
int NumOneRow = (int)Math.Sqrt((double)GameData.NumFields);
float FieldSizeY = (_Base.Settings.GetRenderH() - 150 - NumOneRow * FieldSpace) / NumOneRow;
float FieldSizeX = (_Base.Settings.GetRenderW() - 300 - NumOneRow * FieldSpace) / NumOneRow;
if (FieldSizeX < FieldSizeY)
FieldSize = FieldSizeX;
else
FieldSize = FieldSizeY;
FieldFirstX = _Base.Settings.GetRenderW() / 2 - (NumOneRow * FieldSize + (NumOneRow - 1) * FieldSpace) / 2;
FieldFirstY = 140 + (_Base.Settings.GetRenderH() - 140) / 2 - (NumOneRow * FieldSize + NumOneRow * FieldSpace) / 2;
int row = 0;
int column = 0;
float x = FieldFirstX;
float y = FieldFirstY;
for (int i = 0; i < Fields.Count; i++)
{
if (i < GameData.NumFields)
{
Fields[i].Button.Rect.W = FieldSize;
Fields[i].Button.Rect.H = FieldSize;
Fields[i].Button.Rect.X = x;
Fields[i].Button.Rect.Y = y;
Fields[i].Button.Visible = true;
Fields[i].Button.Enabled = true;
column++;
if ((i+1) >= NumOneRow * (row+1))
{
column = 0;
row++;
y = FieldFirstY + FieldSize * row + FieldSpace * row;
x = FieldFirstX;
}
else
x = FieldFirstX + FieldSize * column + FieldSpace * column;
}
else
{
Fields[i].Button.Visible = false;
Fields[i].Button.Enabled = false;
}
}
}
private void UpdateFieldContents()
{
for (int i = 0; i < GameData.Rounds.Count; i++)
{
Fields[i].Button.Enabled = true;
Fields[i].Button.Texture = Buttons[htButtons(ButtonField)].Texture;
Fields[i].Button.Color = Buttons[htButtons(ButtonField)].Color;
Fields[i].Button.SColor = Buttons[htButtons(ButtonField)].SColor;
Fields[i].Content = GameData.Rounds[i];
if (Fields[i].Content.Finished)
{
Fields[i].Button.Enabled = false;
Fields[i].Button.Texture = _Base.Songs.GetSongByID(Fields[i].Content.SongID).CoverTextureBig;
Fields[i].Button.Color = _Base.Theme.GetPlayerColor(Fields[i].Content.Winner);
Fields[i].Button.SColor = _Base.Theme.GetPlayerColor(Fields[i].Content.Winner);
}
if (Action == EStatus.FieldSelected && SelectedField == i)
{
Fields[i].Button.Texture = _Base.Songs.GetSongByID(Fields[i].Content.SongID).CoverTextureBig;
Fields[i].Button.Color = new SColorF(1, 1, 1, 1);
Fields[i].Button.SColor = new SColorF(1, 1, 1, 1);
Fields[i].Button.Enabled = false;
}
if (Action == EStatus.JokerRetry && Fields[i].Content.Finished)
{
Fields[i].Button.SColor = _Base.Theme.GetPlayerColor(GameData.Team+1);
Fields[i].Button.Enabled = true;
}
if (Action == EStatus.JokerRetry && !Fields[i].Content.Finished)
{
Fields[i].Button.Enabled = false;
}
if(Action == EStatus.FieldSelected)
{
Fields[i].Button.Enabled = false;
}
}
}
private void FieldSelected()
{
int SongID = 0;
if (GameData.Songs.Count > 0)
{
SongID = GameData.Songs[0];
GameData.Songs.RemoveAt(0);
}
Menu.SongMenu.CSong Song = _Base.Songs.GetSongByID(SongID);
if(_Base.BackgroundMusic.IsPlaying())
_Base.BackgroundMusic.Pause();
PreviewStream = _Base.Sound.Load(Song.GetMP3(), false);
_Base.Sound.SetPosition(PreviewStream, Song.PreviewStart);
_Base.Sound.SetStreamVolume(PreviewStream, 0f);
_Base.Sound.Play(PreviewStream);
_Base.Sound.Fade(PreviewStream, _Base.Config.GetBackgroundMusicVolume(), 1f);
Action = EStatus.FieldSelected;
Fields[SelectedField].Content.SongID = SongID;
GameData.Rounds[SelectedField].SongID = SongID;
UpdateFieldContents();
Texts[htTexts(TextNextPlayerT1)].Visible = true;
Texts[htTexts(TextNextPlayerT2)].Visible = true;
Texts[htTexts(TextNextPlayerNameT1)].Visible = true;
Texts[htTexts(TextNextPlayerNameT2)].Visible = true;
SProfile[] profiles = _Base.Profiles.GetProfiles();
Texts[htTexts(TextNextPlayerNameT1)].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName;
Texts[htTexts(TextNextPlayerNameT2)].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName;
Statics[htStatics(StaticAvatarT1)].Visible = true;
Statics[htStatics(StaticAvatarT2)].Visible = true;
Statics[htStatics(StaticAvatarT1)].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture;
Statics[htStatics(StaticAvatarT2)].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture;
UpdateJokerButtons();
Buttons[htButtons(ButtonNextRound)].Visible = true;
Buttons[htButtons(ButtonExit)].Visible = true;
Buttons[htButtons(ButtonBack)].Visible = false;
}
private void FieldSelectedAgain()
{
int SongID = Fields[SelectedField].Content.SongID;
Menu.SongMenu.CSong Song = _Base.Songs.GetSongByID(SongID);
if (_Base.BackgroundMusic.IsPlaying())
_Base.BackgroundMusic.Pause();
PreviewStream = _Base.Sound.Load(Song.GetMP3(), false);
_Base.Sound.SetPosition(PreviewStream, Song.PreviewStart);
_Base.Sound.SetStreamVolume(PreviewStream, 0f);
_Base.Sound.Play(PreviewStream);
_Base.Sound.Fade(PreviewStream, _Base.Config.GetBackgroundMusicVolume(), 1f);
Action = EStatus.FieldSelected;
Fields[SelectedField].Content.SongID = SongID;
GameData.Rounds[SelectedField].SongID = SongID;
GameData.Rounds[SelectedField].SingerTeam1 = GameData.Rounds[OldSelectedField].SingerTeam1;
GameData.Rounds[SelectedField].SingerTeam2 = GameData.Rounds[OldSelectedField].SingerTeam2;
UpdateFieldContents();
Texts[htTexts(TextNextPlayerT1)].Visible = true;
Texts[htTexts(TextNextPlayerT2)].Visible = true;
Texts[htTexts(TextNextPlayerNameT1)].Visible = true;
Texts[htTexts(TextNextPlayerNameT2)].Visible = true;
SProfile[] profiles = _Base.Profiles.GetProfiles();
Texts[htTexts(TextNextPlayerNameT1)].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName;
Texts[htTexts(TextNextPlayerNameT2)].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName;
Statics[htStatics(StaticAvatarT1)].Visible = true;
Statics[htStatics(StaticAvatarT2)].Visible = true;
Statics[htStatics(StaticAvatarT1)].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture;
Statics[htStatics(StaticAvatarT2)].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture;
UpdateJokerButtons();
Buttons[htButtons(ButtonNextRound)].Visible = true;
Buttons[htButtons(ButtonExit)].Visible = true;
Buttons[htButtons(ButtonBack)].Visible = false;
}
private void UseJoker(int TeamNr, int JokerNum)
{
switch (JokerNum)
{
//Random-Joker
case 0:
if (GameData.NumJokerRandom[TeamNr] > 0)
{
GameData.NumJokerRandom[TeamNr]--;
if (!_Base.Sound.IsFinished(PreviewStream))
_Base.Sound.FadeAndStop(PreviewStream, 0, 1);
FieldSelected();
}
break;
//Retry-Joker
case 1:
if (GameData.NumJokerRetry[TeamNr] > 0 && GameData.CurrentRoundNr > 1)
{
GameData.NumJokerRetry[TeamNr]--;
GameData.Team = TeamNr;
if (!_Base.Sound.IsFinished(PreviewStream))
_Base.Sound.FadeAndStop(PreviewStream, 0, 1);
Action = EStatus.JokerRetry;
OldSelectedField = SelectedField;
SelectedField = -1;
UpdateFieldContents();
}
break;
}
UpdateJokerButtons();
}
private void UpdateTeamChoosingMessage()
{
Texts[htTexts(TextTeamChoosing)].Color = _Base.Theme.GetPlayerColor(GameData.Team + 1);
Texts[htTexts(TextTeamChoosing)].Text = _Base.Language.Translate("TR_TEAM", _PartyModeID) + " " + (GameData.Team + 1) + "! " + _Base.Language.Translate("TR_SCREENMAIN_TEAM_CHOOSE", _PartyModeID);
if (Action == EStatus.JokerRetry || Action == EStatus.FieldChoosing)
Texts[htTexts(TextTeamChoosing)].Visible = true;
else
Texts[htTexts(TextTeamChoosing)].Visible = false;
}
private void UpdateJokerButtons()
{
Buttons[htButtons(ButtonJokerRandomT1)].Visible = true;
Buttons[htButtons(ButtonJokerRandomT2)].Visible = true;
Buttons[htButtons(ButtonJokerRandomT1)].Text.Text = GameData.NumJokerRandom[0].ToString();
Buttons[htButtons(ButtonJokerRandomT2)].Text.Text = GameData.NumJokerRandom[1].ToString();
Buttons[htButtons(ButtonJokerRetryT1)].Visible = true;
Buttons[htButtons(ButtonJokerRetryT2)].Visible = true;
Buttons[htButtons(ButtonJokerRetryT1)].Text.Text = GameData.NumJokerRetry[0].ToString();
Buttons[htButtons(ButtonJokerRetryT2)].Text.Text = GameData.NumJokerRetry[1].ToString();
}
private void NextRound()
{
_Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f);
Data.ScreenMain.Rounds = GameData.Rounds;
Data.ScreenMain.FadeToNameSelection = false;
Data.ScreenMain.FadeToSinging = true;
Data.ScreenMain.Songs = GameData.Songs;
Data.ScreenMain.SingRoundNr = SelectedField;
_PartyMode.DataFromScreen(_ThemeName, Data);
}
private void EndParty()
{
_Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f);
FadeTo(EScreens.ScreenParty);
}
private void ShowPopup(bool Visible)
{
ExitPopupVisible = Visible;
Statics[htStatics(StaticPopupBG)].Visible = ExitPopupVisible;
Texts[htTexts(TextPopupReallyExit)].Visible = ExitPopupVisible;
Buttons[htButtons(ButtonPopupYes)].Visible = ExitPopupVisible;
Buttons[htButtons(ButtonPopupNo)].Visible = ExitPopupVisible;
if (ExitPopupVisible)
SetInteractionToButton(Buttons[htButtons(ButtonPopupNo)]);
}
private void Back()
{
_Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f);
Data.ScreenMain.FadeToNameSelection = true;
Data.ScreenMain.FadeToSinging = false;
Data.ScreenMain.SingRoundNr = SelectedField;
_PartyMode.DataFromScreen(_ThemeName, Data);
}
private int BuildWinnerPossibilities()
{
int NumOneRow = (int)Math.Sqrt((double)GameData.NumFields);
Possibilities = new int[(NumOneRow * 2) + 2, NumOneRow];
for (int i = 0; i < Possibilities.GetLength(0); i++)
{
if (i < NumOneRow)
{
for(int c = 0; c < NumOneRow; c++){
Possibilities[i, c] = i * NumOneRow + c;
}
}
else if (i < NumOneRow * 2)
{
for (int c = 0; c < NumOneRow; c++)
{
Possibilities[i, c] = (i-NumOneRow) + (c*NumOneRow);
}
}
else if( i == Possibilities.GetLength(0) - 2)
{
for (int c = 0; c < NumOneRow;c++)
{
Possibilities[i, c] = (NumOneRow + 1) * c;
}
}
else if (i == Possibilities.GetLength(0) - 1)
{
for (int c = 0; c < NumOneRow; c++)
{
Possibilities[i, c] = (NumOneRow - 1) * c + (NumOneRow - 1);
}
}
}
return 0;
}
private int GetWinner()
{
for (int i = 0; i < Possibilities.GetLength(0); i++)
{
List<int> Check = new List<int>();
for (int j = 0; j < Possibilities.GetLength(1); j++)
{
if (Fields[Possibilities[i, j]].Content.Winner > 0)
Check.Add(Fields[Possibilities[i, j]].Content.Winner);
}
if (Check.Count == Possibilities.GetLength(1))
{
//Check for winner
if (Check.Contains(1) && !Check.Contains(2))
return 1;
else if (Check.Contains(2) && !Check.Contains(1))
return 2;
}
}
return 0;
}
}
}
@@ -0,0 +1,640 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Vocaluxe.Menu;
namespace Vocaluxe.PartyModes
{
public class PartyScreenTicTacToeNames : CMenuParty
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
const string ButtonNext = "ButtonNext";
const string ButtonBack = "ButtonBack";
const string ButtonPlayerDestination = "ButtonPlayerDestination";
const string ButtonPlayerChoose = "ButtonPlayerChoose";
private List<CPlayerChooseButton> PlayerChooseButtons;
private List<CButton> PlayerDestinationButtons;
//PlayerDestinationButtons-Option
private const int PlayerDestinationButtonsNumH = 10;
private const int PlayerDestinationButtonsNumW = 2;
private const int PlayerDestinationButtonsFirstX = 58;
private const int PlayerDestinationButtonsFirstY = 380;
private const int PlayerDestinationButtonsSpaceH = 15;
private const int PlayerDestinationButtonsSpaceW = 25;
//PlayerChooseButtons-Option
private List<int> PlayerChooseButtonsVisibleProfiles;
private const int PlayerChooseButtonsNumH = 10;
private const int PlayerChooseButtonsNumW = 2;
private const int PlayerChooseButtonsFirstX = 58;
private const int PlayerChooseButtonsFirstY = 105;
private const int PlayerChooseButtonsSpaceH = 15;
private const int PlayerChooseButtonsSpaceW = 25;
private int PlayerChooseButtonsOffset = 0;
private CStatic chooseAvatarStatic;
private bool SelectingMouseActive = false;
private int OldMouseX = 0;
private int OldMouseY = 0;
private int SelectedPlayerNr = -1;
private bool ButtonsAdded = false;
private int NumPlayerTeam1 = 2;
private int NumPlayerTeam2 = 2;
private DataFromScreen Data;
private class CPlayerChooseButton
{
public CButton Button;
public int ProfileID;
}
public PartyScreenTicTacToeNames()
{
}
protected override void Init()
{
base.Init();
chooseAvatarStatic = GetNewStatic();
chooseAvatarStatic.Visible = false;
PlayerChooseButtonsVisibleProfiles = new List<int>();
Data.ScreenNames.ProfileIDsTeam1 = new List<int>();
Data.ScreenNames.ProfileIDsTeam2 = new List<int>();
_ThemeName = "PartyScreenTicTacToeNames";
List<string> buttons = new List<string>();
_ThemeButtons = new string[] { ButtonBack, ButtonNext, ButtonPlayerDestination, ButtonPlayerChoose };
_ScreenVersion = ScreenVersion;
Data = new DataFromScreen();
FromScreenNames names = new FromScreenNames();
names.FadeToConfig = false;
names.FadeToMain = false;
names.ProfileIDsTeam1 = new List<int>();
names.ProfileIDsTeam2 = new List<int>();
Data.ScreenNames = names;
}
public override void LoadTheme(string XmlPath)
{
base.LoadTheme(XmlPath);
}
public override void DataToScreen(object ReceivedData)
{
DataToScreenNames config = new DataToScreenNames();
try
{
config = (DataToScreenNames)ReceivedData;
Data.ScreenNames.ProfileIDsTeam1 = config.ProfileIDsTeam1;
Data.ScreenNames.ProfileIDsTeam2 = config.ProfileIDsTeam2;
if (Data.ScreenNames.ProfileIDsTeam1 == null)
Data.ScreenNames.ProfileIDsTeam1 = new List<int>();
if (Data.ScreenNames.ProfileIDsTeam2 == null)
Data.ScreenNames.ProfileIDsTeam2 = new List<int>();
NumPlayerTeam1 = config.NumPlayerTeam1;
NumPlayerTeam2 = config.NumPlayerTeam2;
while (Data.ScreenNames.ProfileIDsTeam1.Count > NumPlayerTeam1)
{
Data.ScreenNames.ProfileIDsTeam1.RemoveAt(Data.ScreenNames.ProfileIDsTeam1.Count - 1);
}
while (Data.ScreenNames.ProfileIDsTeam2.Count > NumPlayerTeam2)
{
Data.ScreenNames.ProfileIDsTeam2.RemoveAt(Data.ScreenNames.ProfileIDsTeam2.Count - 1);
}
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode screen TicTacToe names. Can't cast received data from game mode " + _ThemeName + ". " + e.Message); ;
}
}
public override bool HandleInput(KeyEvent KeyEvent)
{
base.HandleInput(KeyEvent);
if (KeyEvent.KeyPressed)
{
}
else
{
switch (KeyEvent.Key)
{
case Keys.Back:
case Keys.Escape:
Back();
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
if (!OnAdd())
OnRemove();
break;
case Keys.Delete:
OnRemove();
break;
}
}
return true;
}
public override bool HandleMouse(MouseEvent MouseEvent)
{
base.HandleMouse(MouseEvent);
/**
//Check if LeftButton is hold and Select-Mode inactive
if (MouseEvent.LBH && !SelectingMouseActive)
{
//Save mouse-coords
OldMouseX = MouseEvent.X;
OldMouseY = MouseEvent.Y;
//Check if mouse if over tile
for (int i = 0; i < PlayerChooseButtons.Count; i++)
{
if (PlayerChooseButtons[i].Button.Selected)
{
SelectedPlayerNr = PlayerChooseButtons[i].ProfileID;
if (SelectedPlayerNr != -1)
{
//Activate mouse-selecting
SelectingMouseActive = true;
//Update of Drag/Drop-Texture
chooseAvatarStatic.Visible = true;
chooseAvatarStatic.Rect = PlayerChooseButtons[i].Button.Rect;
chooseAvatarStatic.Rect.Z = -100;
chooseAvatarStatic.Color = new SColorF(1, 1, 1, 1);
chooseAvatarStatic.Texture = _Base.Profiles.GetProfiles()[SelectedPlayerNr].Avatar.Texture;
}
}
}
}
**/
//Check if LeftButton is hold and Select-Mode active
if (MouseEvent.LBH && SelectingMouseActive)
{
//Update coords for Drag/Drop-Texture
chooseAvatarStatic.Rect.X += (MouseEvent.X - OldMouseX);
chooseAvatarStatic.Rect.Y += (MouseEvent.Y - OldMouseY);
OldMouseX = MouseEvent.X;
OldMouseY = MouseEvent.Y;
}
// LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar
else if (SelectingMouseActive)
{
//Check if really a player was selected
if (SelectedPlayerNr != -1)
{
//Foreach Drop-Area
for (int i = 0; i < PlayerDestinationButtons.Count; i++)
{
//Check first, if area is "active"
if (PlayerDestinationButtons[i].Visible == true)
{
//Check if Mouse is in area
if (CHelper.IsInBounds(PlayerDestinationButtons[i].Rect, MouseEvent))
{
int added = -1;
//Add Player-ID to list.
if (i - PlayerDestinationButtonsNumH < 0)
{
if (Data.ScreenNames.ProfileIDsTeam1.Count < (i + 1))
{
Data.ScreenNames.ProfileIDsTeam1.Add(SelectedPlayerNr);
added = Data.ScreenNames.ProfileIDsTeam1.Count - 1;
}
else if (Data.ScreenNames.ProfileIDsTeam1.Count >= (i + 1))
{
Data.ScreenNames.ProfileIDsTeam1[i] = SelectedPlayerNr;
added = i;
}
}
else if (i - PlayerDestinationButtonsNumH >= 0)
{
if (Data.ScreenNames.ProfileIDsTeam2.Count < (i + 1))
{
Data.ScreenNames.ProfileIDsTeam2.Add(SelectedPlayerNr);
added = Data.ScreenNames.ProfileIDsTeam2.Count - 1;
}
else if (Data.ScreenNames.ProfileIDsTeam2.Count >= (i + 1))
{
Data.ScreenNames.ProfileIDsTeam2[i] = SelectedPlayerNr;
added = i;
}
}
UpdateButtonNext();
//Update texture and name
PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1);
PlayerDestinationButtons[added].Texture = chooseAvatarStatic.Texture;
PlayerDestinationButtons[added].STexture = chooseAvatarStatic.Texture;
PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[SelectedPlayerNr].PlayerName;
//Update Tiles-List
UpdateButtonPlayerChoose();
}
}
}
SelectedPlayerNr = -1;
}
//Reset variables
SelectingMouseActive = false;
chooseAvatarStatic.Visible = false;
}
if (MouseEvent.LB && IsMouseOver(MouseEvent))
{
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
if (!OnAdd())
OnRemove();
}
if (MouseEvent.RB)
{
Back();
}
return true;
}
public override void OnShow()
{
base.OnShow();
if (!ButtonsAdded)
{
AddButtonPlayerDestination();
AddButtonPlayerChoose();
ButtonsAdded = true;
}
UpdateButtonPlayerDestination();
UpdateButtonPlayerChoose();
UpdateButtonNext();
}
public override bool UpdateGame()
{
return true;
}
public override bool Draw()
{
base.Draw();
if (chooseAvatarStatic.Visible)
chooseAvatarStatic.Draw();
return true;
}
public override void OnClose()
{
base.OnClose();
}
private void AddButtonPlayerDestination()
{
Buttons[htButtons(ButtonPlayerDestination)].Visible = false;
PlayerDestinationButtons = new List<CButton>();
int row = 0;
int column = 0;
for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++)
{
CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerDestination)]);
b.Rect.X = PlayerDestinationButtonsFirstX + column * (b.Rect.W + PlayerDestinationButtonsSpaceH);
b.Rect.Y = PlayerDestinationButtonsFirstY + row * (b.Rect.H + PlayerDestinationButtonsSpaceW);
PlayerDestinationButtons.Add(b);
column++;
if (column >= PlayerDestinationButtonsNumH)
{
row++;
column = 0;
}
b.Visible = true;
b.Enabled = false;
AddButton(b);
}
}
private void AddButtonPlayerChoose()
{
Buttons[htButtons(ButtonPlayerChoose)].Visible = false;
PlayerChooseButtons = new List<CPlayerChooseButton>();
int row = 0;
int column = 0;
for (int i = 1; i <= PlayerChooseButtonsNumH * PlayerChooseButtonsNumW; i++)
{
CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerChoose)]);
b.Rect.X = PlayerChooseButtonsFirstX + column * (b.Rect.W + PlayerChooseButtonsSpaceH);
b.Rect.Y = PlayerChooseButtonsFirstY + row * (b.Rect.H + PlayerChooseButtonsSpaceW);
CPlayerChooseButton pcb = new CPlayerChooseButton();
pcb.Button = b;
pcb.ProfileID = -1;
PlayerChooseButtons.Add(pcb);
column++;
if (column >= PlayerChooseButtonsNumH)
{
row++;
column = 0;
}
b.Visible = true;
b.Enabled = false;
AddButton(b);
}
}
private void UpdateButtonPlayerChoose()
{
UpdateVisibleProfiles();
if ((PlayerChooseButtonsNumW * PlayerChooseButtonsNumH) * (PlayerChooseButtonsOffset + 1) - PlayerChooseButtonsVisibleProfiles.Count >= (PlayerChooseButtonsNumW * PlayerChooseButtonsNumH) * PlayerChooseButtonsOffset)
{
UpdateButtonPlayerChoose(PlayerChooseButtonsOffset - 1);
}
else
{
UpdateButtonPlayerChoose(PlayerChooseButtonsOffset);
}
}
private void UpdateButtonPlayerChoose(int Offset)
{
int NumButtonPlayerChoose = PlayerChooseButtonsNumW * PlayerChooseButtonsNumH;
if (Offset < 0)
Offset = 0;
if (NumButtonPlayerChoose * (Offset + 1) - PlayerChooseButtonsVisibleProfiles.Count <= NumButtonPlayerChoose)
{
for (int i = 0; i < NumButtonPlayerChoose; i++)
{
if ((i + Offset * NumButtonPlayerChoose) < PlayerChooseButtonsVisibleProfiles.Count)
{
PlayerChooseButtons[i].ProfileID = PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose];
PlayerChooseButtons[i].Button.Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].PlayerName;
PlayerChooseButtons[i].Button.Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].Avatar.Texture;
PlayerChooseButtons[i].Button.STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].Avatar.Texture;
PlayerChooseButtons[i].Button.Color = new SColorF(1, 1, 1, 0.6f);
PlayerChooseButtons[i].Button.SColor = new SColorF(1, 1, 1, 1);
PlayerChooseButtons[i].Button.Enabled = true;
}
else
{
PlayerChooseButtons[i].ProfileID = -1;
PlayerChooseButtons[i].Button.Text.Text = String.Empty;
PlayerChooseButtons[i].Button.Texture = Buttons[htButtons(ButtonPlayerChoose)].Texture;
PlayerChooseButtons[i].Button.STexture = Buttons[htButtons(ButtonPlayerChoose)].STexture;
PlayerChooseButtons[i].Button.Color = Buttons[htButtons(ButtonPlayerChoose)].Color;
PlayerChooseButtons[i].Button.SColor = Buttons[htButtons(ButtonPlayerChoose)].SColor;
PlayerChooseButtons[i].Button.Enabled = false;
}
}
}
}
private void UpdateVisibleProfiles()
{
PlayerChooseButtonsVisibleProfiles.Clear();
for (int i = 0; i < _Base.Profiles.GetProfiles().Length; i++)
{
bool visible = false;
//Show profile only if active
if (_Base.Profiles.GetProfiles()[i].Active == EOffOn.TR_CONFIG_ON)
{
visible = true;
for (int p = 0; p < Data.ScreenNames.ProfileIDsTeam1.Count; p++)
{
//Don't show profile if is selected
if (Data.ScreenNames.ProfileIDsTeam1[p] == i)
{
visible = false;
break;
}
}
for (int p = 0; p < Data.ScreenNames.ProfileIDsTeam2.Count; p++)
{
//Don't show profile if is selected
if (Data.ScreenNames.ProfileIDsTeam2[p] == i)
{
visible = false;
break;
}
}
}
if (visible)
{
PlayerChooseButtonsVisibleProfiles.Add(i);
}
}
}
private void UpdateButtonPlayerDestination()
{
for (int i = 0; i < PlayerDestinationButtons.Count / 2; i++)
{
if (NumPlayerTeam1 > i)
{
PlayerDestinationButtons[i].Visible = true;
PlayerDestinationButtons[i].Enabled = true;
}
else
{
PlayerDestinationButtons[i].Visible = false;
PlayerDestinationButtons[i].Enabled = false;
}
}
for (int i = 0; i < PlayerDestinationButtons.Count / 2; i++)
{
if (NumPlayerTeam2 > i)
{
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Visible = true;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = true;
}
else
{
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Visible = false;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = false;
}
}
for (int i = 0; i < NumPlayerTeam1; i++)
{
if (i < Data.ScreenNames.ProfileIDsTeam1.Count)
{
if (Data.ScreenNames.ProfileIDsTeam1[i] != -1)
{
PlayerDestinationButtons[i].Color = new SColorF(1, 1, 1, 0.6f);
PlayerDestinationButtons[i].SColor = new SColorF(1, 1, 1, 1);
PlayerDestinationButtons[i].Texture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam1[i]].Avatar.Texture;
PlayerDestinationButtons[i].STexture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam1[i]].Avatar.Texture;
PlayerDestinationButtons[i].Text.Text = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam1[i]].PlayerName;
PlayerDestinationButtons[i].Enabled = true;
}
}
else
{
PlayerDestinationButtons[i].Color = Buttons[htButtons(ButtonPlayerDestination)].Color;
PlayerDestinationButtons[i].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor;
PlayerDestinationButtons[i].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture;
PlayerDestinationButtons[i].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture;
PlayerDestinationButtons[i].Text.Text = String.Empty;
PlayerDestinationButtons[i].Enabled = false;
}
}
for (int i = 0; i < NumPlayerTeam2; i++)
{
if (i < Data.ScreenNames.ProfileIDsTeam2.Count)
{
if (Data.ScreenNames.ProfileIDsTeam2[i] != -1)
{
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Color = new SColorF(1, 1, 1, 0.6f);
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].SColor = new SColorF(1, 1, 1, 1);
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Texture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam2[i]].Avatar.Texture;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].STexture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam2[i]].Avatar.Texture;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Text.Text = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam2[i]].PlayerName;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = true;
}
}
else
{
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Color = Buttons[htButtons(ButtonPlayerDestination)].Color;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Text.Text = String.Empty;
PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = false;
}
}
}
private void UpdateButtonNext()
{
if (Data.ScreenNames.ProfileIDsTeam1.Count == NumPlayerTeam1 && Data.ScreenNames.ProfileIDsTeam2.Count == NumPlayerTeam2)
{
Buttons[htButtons(ButtonNext)].Visible = true;
SetInteractionToButton(Buttons[htButtons(ButtonNext)]);
}
else
Buttons[htButtons(ButtonNext)].Visible = false;
}
private bool OnAdd()
{
for (int i = 0; i < PlayerChooseButtons.Count; i++)
{
if (PlayerChooseButtons[i].Button.Selected && PlayerChooseButtons[i].ProfileID != -1)
{
if (Data.ScreenNames.ProfileIDsTeam1.Count < NumPlayerTeam1)
{
Data.ScreenNames.ProfileIDsTeam1.Add(PlayerChooseButtons[i].ProfileID);
int added = Data.ScreenNames.ProfileIDsTeam1.Count - 1;
UpdateButtonNext();
//Update texture and name
PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1);
PlayerDestinationButtons[added].Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture;
PlayerDestinationButtons[added].STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture;
PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].PlayerName;
PlayerDestinationButtons[added].Enabled = true;
//Update Tiles-List
UpdateButtonPlayerChoose();
CheckInteraction();
return true;
}
else if (Data.ScreenNames.ProfileIDsTeam2.Count < NumPlayerTeam2)
{
Data.ScreenNames.ProfileIDsTeam2.Add(PlayerChooseButtons[i].ProfileID);
int added = (Data.ScreenNames.ProfileIDsTeam2.Count - 1) + PlayerDestinationButtonsNumH;
UpdateButtonNext();
//Update texture and name
PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1);
PlayerDestinationButtons[added].Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture;
PlayerDestinationButtons[added].STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture;
PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].PlayerName;
PlayerDestinationButtons[added].Enabled = true;
//Update Tiles-List
UpdateButtonPlayerChoose();
CheckInteraction();
return true;
}
}
}
return false;
}
private bool OnRemove()
{
for (int i = 0; i < PlayerDestinationButtonsNumH; i++)
{
if (PlayerDestinationButtons[i].Selected)
{
if ((i + 1) <= Data.ScreenNames.ProfileIDsTeam1.Count)
{
Data.ScreenNames.ProfileIDsTeam1.RemoveAt(i);
UpdateButtonNext();
UpdateButtonPlayerDestination();
UpdateButtonPlayerChoose();
CheckInteraction();
return true;
}
}
}
for (int i = PlayerDestinationButtonsNumH; i < PlayerDestinationButtonsNumH*2; i++)
{
if (PlayerDestinationButtons[i].Selected)
{
if (((i-PlayerDestinationButtonsNumH) + 1) <= Data.ScreenNames.ProfileIDsTeam2.Count)
{
Data.ScreenNames.ProfileIDsTeam2.RemoveAt(i - PlayerDestinationButtonsNumH);
UpdateButtonNext();
UpdateButtonPlayerDestination();
UpdateButtonPlayerChoose();
CheckInteraction();
return true;
}
}
}
return false;
}
private void Back()
{
Data.ScreenNames.FadeToConfig = true;
Data.ScreenNames.FadeToMain = false;
_PartyMode.DataFromScreen(_ThemeName, Data);
}
private void Next()
{
Data.ScreenNames.FadeToConfig = false;
Data.ScreenNames.FadeToMain = true;
_PartyMode.DataFromScreen(_ThemeName, Data);
}
}
}
+22 -4
View File
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 2012 for Windows Desktop
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocaluxe.csproj", "{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}"
ProjectSection(ProjectDependencies) = postProject
{6F3E1874-F28A-40E9-AFBD-31934D593679} = {6F3E1874-F28A-40E9-AFBD-31934D593679}
@@ -9,7 +9,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocalu
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VocaluxeLib", "VocaluxeLib\VocaluxeLib.csproj", "{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallenge", "PartyModes\PartyModeChallenge\PartyModeChallenge.csproj", "{6F3E1874-F28A-40E9-AFBD-31934D593679}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeTicTacToe", "PartyModes\PartyModeTicTacToe\PartyModeTicTacToe.csproj", "{6F3E1874-F28A-40E9-AFBD-31934D593679}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallenge", "PartyModes\PartyModeChallenge\PartyModeChallenge.csproj", "{5A4053F1-5AD5-441F-B254-D97A088127B6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallengeMedley", "PartyModes\PartyModeChallengeMedley\PartyModeChallengeMedley.csproj", "{6F3E1874-F28A-40E9-AFBD-31934D593678}"
EndProject
@@ -72,7 +74,23 @@ Global
{6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64
{6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x64.Build.0 = ReleaseWin|x64
{6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86
{6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.Build.0 = ReleaseWin|x86
{6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.Build.0 = ReleaseWin|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x64.ActiveCfg = DebugLinux|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x64.Build.0 = DebugLinux|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x86.ActiveCfg = DebugLinux|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x86.Build.0 = DebugLinux|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x64.ActiveCfg = DebugWin|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x64.Build.0 = DebugWin|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.ActiveCfg = DebugWin|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.Build.0 = DebugWin|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x86.Build.0 = ReleaseLinux|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x64.Build.0 = ReleaseWin|x64
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.Build.0 = ReleaseWin|x86
{6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.ActiveCfg = DebugLinux|x64
{6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.Build.0 = DebugLinux|x64
{6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x86.ActiveCfg = DebugLinux|x86
+38 -13
View File
@@ -15,10 +15,15 @@ namespace Vocaluxe.Screens
class CScreenScore : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 2;
const int ScreenVersion = 3;
private const string TextSong = "TextSong";
private const string ScreenSettingShortScore = "ScreenSettingShortScore";
private const string ScreenSettingShortRating = "ScreenSettingShortRating";
private const string ScreenSettingShortDifficulty = "ScreenSettingShortDifficulty";
private const string ScreenSettingAnimationDirection = "ScreenSettingAnimationDirection";
private string[,] TextNames;
private string[,] TextScores;
private string[,] TextRatings;
@@ -54,6 +59,8 @@ namespace Vocaluxe.Screens
_ThemeStatics = statics.ToArray();
_ThemeScreenSettings = new string[] { ScreenSettingShortScore, ScreenSettingShortRating, ScreenSettingShortDifficulty, ScreenSettingAnimationDirection };
StaticPointsBarDrawnPoints = new double[CSettings.MaxNumPlayer];
}
@@ -151,8 +158,16 @@ namespace Vocaluxe.Screens
{
StaticPointsBarDrawnPoints[p] = player[p].Points;
}
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H / 10000);
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H;
string direction = (string) ScreenSettings[htScreenSettings(ScreenSettingAnimationDirection)].GetValue();
if (direction.ToLower() == "vertical")
{
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.W = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.W / 10000);
}
else
{
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H / 10000);
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H;
}
}
}
}
@@ -316,21 +331,31 @@ namespace Vocaluxe.Screens
}
else
Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name;
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000") + " " + CLanguage.Translate("TR_SCREENSCORE_POINTS");
if (CGame.NumPlayer <= 3)
{
Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points)));
if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortScore)].GetValue())
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000") + " " + CLanguage.Translate("TR_SCREENSCORE_POINTS");
else
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000");
if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortDifficulty)].GetValue())
Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_GAMEDIFFICULTY") + ": " + CLanguage.Translate(player[p].Difficulty.ToString());
else
Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(player[p].Difficulty.ToString());
if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortRating)].GetValue())
Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points)));
else
Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points)));
StaticPointsBarDrawnPoints[p] = 0.0;
string direction = (string)ScreenSettings[htScreenSettings(ScreenSettingAnimationDirection)].GetValue();
if (direction.ToLower() == "vertical")
{
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.W = 0;
}
else
{
Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points)));
Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(player[p].Difficulty.ToString());
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = 0;
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H;
}
StaticPointsBarDrawnPoints[p] = 0.0;
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = 0;
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H;
if (player[p].ProfileID >= 0 && player[p].ProfileID < CProfiles.NumProfiles)
Statics[htStatics(StaticAvatar[p, CGame.NumPlayer - 1])].Texture = CProfiles.Profiles[player[p].ProfileID].Avatar.Texture;
}
+70
View File
@@ -39,6 +39,7 @@ namespace Vocaluxe.Menu
private List<CEqualizer> _Equalizers;
private List<CPlaylist> _Playlists;
private List<CParticleEffect> _ParticleEffects;
private List<CScreenSetting> _ScreenSettings;
private Hashtable _htBackgrounds;
private Hashtable _htStatics;
@@ -52,6 +53,7 @@ namespace Vocaluxe.Menu
private Hashtable _htEqualizers;
private Hashtable _htPlaylists;
private Hashtable _htParticleEffects;
private Hashtable _htScreenSettings;
private int _PrevMouseX;
@@ -76,6 +78,7 @@ namespace Vocaluxe.Menu
protected string[] _ThemeEqualizers;
protected string[] _ThemePlaylists;
protected string[] _ThemeParticleEffects;
protected string[] _ThemeScreenSettings;
protected SRectF _ScreenArea;
protected Basic _Base;
@@ -122,6 +125,7 @@ namespace Vocaluxe.Menu
_Equalizers = new List<CEqualizer>();
_Playlists = new List<CPlaylist>();
_ParticleEffects = new List<CParticleEffect>();
_ScreenSettings = new List<CScreenSetting>();
_htBackgrounds = new Hashtable();
_htStatics = new Hashtable();
@@ -135,6 +139,7 @@ namespace Vocaluxe.Menu
_htEqualizers = new Hashtable();
_htPlaylists = new Hashtable();
_htParticleEffects = new Hashtable();
_htScreenSettings = new Hashtable();
_PrevMouseX = 0;
_PrevMouseY = 0;
@@ -158,6 +163,7 @@ namespace Vocaluxe.Menu
_ThemeEqualizers = null;
_ThemePlaylists = null;
_ThemeParticleEffects = null;
_ThemeScreenSettings = null;
}
protected void FadeTo(EScreens NextScreen)
@@ -394,6 +400,22 @@ namespace Vocaluxe.Menu
}
}
}
if (_ThemeScreenSettings != null)
{
for (int i = 0; i < _ThemeScreenSettings.Length; i++)
{
CScreenSetting se = new CScreenSetting(_Base, _PartyModeID);
if (se.LoadTheme("//root/" + _ThemeName, _ThemeScreenSettings[i], navigator, SkinIndex))
{
_htScreenSettings.Add(_ThemeScreenSettings[i], AddScreenSetting(se));
}
else
{
_Base.Log.LogError("Can't load ThemeSetting \"" + _ThemeScreenSettings[i] + "\" in screen " + _ThemeName);
}
}
}
}
else
{
@@ -490,6 +512,12 @@ namespace Vocaluxe.Menu
_ParticleEffects[i].SaveTheme(writer);
}
//ScreenSettings
for (int i = 0; i < _ScreenSettings.Count; i++)
{
_ScreenSettings[i].SaveTheme(writer);
}
writer.WriteEndElement();
// End of File
@@ -561,6 +589,11 @@ namespace Vocaluxe.Menu
{
pe.ReloadTextures();
}
foreach (CScreenSetting se in _ScreenSettings)
{
se.ReloadTextures();
}
}
public virtual void UnloadTextures()
@@ -623,6 +656,11 @@ namespace Vocaluxe.Menu
{
pe.UnloadTextures();
}
foreach (CScreenSetting se in _ScreenSettings)
{
se.UnloadTextures();
}
}
public virtual void ReloadTheme()
@@ -696,6 +734,11 @@ namespace Vocaluxe.Menu
{
return _ParticleEffects;
}
public List<CScreenSetting> GetScreenSettings()
{
return _ScreenSettings;
}
#endregion GetLists
#region ElementHandler
@@ -888,6 +931,14 @@ namespace Vocaluxe.Menu
return _ParticleEffects.ToArray();
}
}
public CScreenSetting[] ScreenSettings
{
get
{
return _ScreenSettings.ToArray();
}
}
#endregion Get Arrays
#region Hashtables
@@ -1046,6 +1097,19 @@ namespace Vocaluxe.Menu
throw;
}
}
public int htScreenSettings(string key)
{
try
{
return (int)_htScreenSettings[key];
}
catch (Exception)
{
_Base.Log.LogError("Can't find ScreenSetting Element \"" + key + "\" in Screen " + _ThemeName);
throw;
}
}
#endregion Hashtables
#endregion ElementHandler
@@ -1418,6 +1482,12 @@ namespace Vocaluxe.Menu
_AddInteraction(_ParticleEffects.Count - 1, EType.TParticleEffect);
return _ParticleEffects.Count - 1;
}
public int AddScreenSetting(CScreenSetting se)
{
_ScreenSettings.Add(se);
return _ScreenSettings.Count - 1;
}
#endregion Elements
#region InteractionHandling
+151
View File
@@ -0,0 +1,151 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Xml;
using System.Xml.XPath;
namespace Vocaluxe.Menu
{
enum ESettingType
{
Int,
String,
Color,
Texture
}
struct SScreenSetting
{
public string Name;
public string Value;
public ESettingType Type;
}
public class CScreenSetting : IMenuElement
{
private int _PartyModeID;
private Basic _Base;
private SScreenSetting _Theme;
private bool _ThemeLoaded;
public string GetThemeName()
{
return _Theme.Name;
}
public CScreenSetting(Basic Base, int PartyModeID)
{
_PartyModeID = PartyModeID;
_Base = Base;
_Theme = new SScreenSetting();
_ThemeLoaded = false;
}
public CScreenSetting(CScreenSetting ts)
{
_PartyModeID = ts._PartyModeID;
_Base = ts._Base;
_Theme = ts._Theme;
_ThemeLoaded = ts._ThemeLoaded;
}
public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex)
{
string item = XmlPath + "/" + ElementName;
_ThemeLoaded = true;
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/Value", navigator, ref _Theme.Value, String.Empty);
_ThemeLoaded &= CHelper.TryGetEnumValueFromXML<ESettingType>(item + "/Type", navigator, ref _Theme.Type);
if (_ThemeLoaded)
{
_Theme.Name = ElementName;
}
return _ThemeLoaded;
}
public bool SaveTheme(XmlWriter writer)
{
if (_ThemeLoaded)
{
writer.WriteStartElement(_Theme.Name);
writer.WriteComment("<Type>: Type of theme-setting-value: "+ CHelper.ListStrings(Enum.GetNames(typeof(ESettingType))));
writer.WriteElementString("Type", Enum.GetName(typeof(ESettingType), _Theme.Type));
writer.WriteComment("<Value>: Value of theme-setting");
writer.WriteElementString("Value", _Theme.Value);
writer.WriteEndElement();
return true;
}
return false;
}
public object GetValue()
{
switch (_Theme.Type)
{
case ESettingType.Int:
return GetIntValue(_Theme.Value);
case ESettingType.String:
return _Theme.Value;
case ESettingType.Color:
return GetColorValue(_Theme.Value);
case ESettingType.Texture:
return GetTextureValue(_Theme.Value);
}
return null;
}
public void UnloadTextures()
{
}
public void LoadTextures()
{
}
public void ReloadTextures()
{
}
#region Private
private int GetIntValue(string _string)
{
try
{
return Convert.ToInt32(_string);
}
catch (Exception)
{
return -1;
}
}
private STexture GetTextureValue(string _string)
{
return _Base.Theme.GetSkinTexture(_string);
}
private SColorF GetColorValue(string _string)
{
return _Base.Theme.GetColor(_string);
}
#endregion Private
#region ThemeEdit
public void MoveElement(int stepX, int stepY)
{
}
public void ResizeElement(int stepW, int stepH)
{
}
#endregion ThemeEdit
}
}
+4
View File
@@ -316,6 +316,10 @@ namespace Vocaluxe.Menu
CPlaylistSong GetPlaylistSong(int PlaylistID, int SongIndex);
}
public interface IPlaylists
{
}
[Flags]
public enum EModifier
{
+1
View File
@@ -125,6 +125,7 @@
<Compile Include="Menu\CSelectSlide.cs" />
<Compile Include="Menu\CStatic.cs" />
<Compile Include="Menu\CText.cs" />
<Compile Include="Menu\CScreenSetting.cs" />
<Compile Include="Menu\IMenu.cs" />
<Compile Include="Menu\IMenuElement.cs" />
<Compile Include="Menu\SingNotes\CNotes.cs" />