New party mode: Partner Swap (#915)

* Add partner swap party mode

A new party mode for 3 to 12 players that only needs 2 microphones. Everyone plays for themselves, but always sings together with a partner. Both singers get the score of the pair, and the partners change every round.

- In each round every player sings once, with a partner they haven't sung with yet; with an odd number of players someone takes a break, in turns
- Ranking by the average score per song, so breaks are no disadvantage
- Optional harmony bonus of 500 points when both singers are no more than 500 points apart
- Duet songs are sung with both voices; duets can be mixed in, used exclusively or left out
- Up to 3 jokers per player to skip a song
- The best pair is shown all the time, and the winner and the best pair of the night are celebrated at the end

* Rename the harmony bonus points constant to avoid shadowing

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
This commit is contained in:
McSchneidarandFlorian Ostertag authored and GitHub committed 2026-10-18 08:20:24 +02:00
1 parent 3810f75e04
commit 3bdf22c870
19 files changed
+4587

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<PartyModeSystemVersion>2</PartyModeSystemVersion>
<Info>
<Name>TR_PARTYMODE_NAME</Name>
<Author>McSchneidar</Author>
<Description>TR_PARTYMODE_DESCRIPTION</Description>
<Folder>PartnerSwap</Folder>
<PartyModeFile>CPartyModePartnerSwap</PartyModeFile>
<PartyModeVersionMajor>1</PartyModeVersionMajor>
<PartyModeVersionMinor>0</PartyModeVersionMinor>
<TargetAudience>TR_PARTYMODE_AUDIENCE</TargetAudience>
</Info>
<PartyScreens>
<ScreenFile>CPartyScreenPartnerSwapMain</ScreenFile>
<ScreenFile>CPartyScreenPartnerSwapConfig</ScreenFile>
<ScreenFile>CPartyScreenPartnerSwapNames</ScreenFile>
<ScreenFile>CPartyScreenPartnerSwapSongs</ScreenFile>
</PartyScreens>
</root>
@@ -0,0 +1,42 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="language">Deutsch</string>
<string name="TR_PARTYMODE_NAME">Partnertausch</string>
<string name="TR_PARTYMODE_DESCRIPTION">Singt zu zweit mit ständig wechselnden Partnern. Beide Sänger bekommen die Punkte des Paares, der beste Durchschnitt gewinnt.</string>
<string name="TR_PARTYMODE_AUDIENCE">Für 3 bis 12 Spieler, die gern gemeinsam singen, 2 Mikrofone nötig.</string>
<string name="TR_BUTTON_NEXT">Weiter</string>
<string name="TR_BUTTON_BACK">Zurück</string>
<string name="TR_BUTTON_START">Start</string>
<string name="TR_BUTTON_EXIT">Beenden</string>
<string name="TR_BUTTON_YES">Ja</string>
<string name="TR_BUTTON_NO">Nein</string>
<string name="TR_BUTTON_NEXT_ROUND">Song starten</string>
<string name="TR_SONGS">Songs</string>
<string name="TR_SCREENCONFIG_TITLE">Partnertausch: Konfiguration</string>
<string name="TR_SCREENCONFIG_NUMPLAYERS">Anzahl der Spieler</string>
<string name="TR_SCREENCONFIG_NUMPASSES">Durchgänge</string>
<string name="TR_SCREENCONFIG_HARMONYBONUS">Gleichklang-Bonus</string>
<string name="TR_SCREENCONFIG_DUETS">Duett-Songs</string>
<string name="TR_SCREENCONFIG_DUETS_MIXED">Gemischt</string>
<string name="TR_SCREENCONFIG_DUETS_ONLY">Nur Duette</string>
<string name="TR_SCREENCONFIG_DUETS_NONE">Keine Duette</string>
<string name="TR_SCREENCONFIG_NUMJOKERS">Joker pro Spieler</string>
<string name="TR_SCREENNAMES_TITLE">Partnertausch: Spieler auswählen</string>
<string name="TR_SCREENNAMES_BUTTON_RANDOM">Zufällig wählen</string>
<string name="TR_SCREENMAIN_TITLE">Partnertausch</string>
<string name="TR_SCREENMAIN_POPUP_REALLYEXIT">Willst du das Spiel wirklich beenden?</string>
<string name="TR_SCREENMAIN_HEADER_POS">Pos</string>
<string name="TR_SCREENMAIN_HEADER_NAME">Name</string>
<string name="TR_SCREENMAIN_HEADER_SONGS">Songs</string>
<string name="TR_SCREENMAIN_HEADER_AVERAGE">Ø</string>
<string name="TR_SCREENMAIN_PASS">Durchgang</string>
<string name="TR_SCREENMAIN_SONG">Song</string>
<string name="TR_SCREENMAIN_PAUSE">Pause:</string>
<string name="TR_SCREENMAIN_FIRST_TIME">singen zum ersten Mal zusammen</string>
<string name="TR_SCREENMAIN_TIMES_TOGETHER">singen zum %n. Mal zusammen</string>
<string name="TR_SCREENMAIN_LAST_SONG">Letzter Song:</string>
<string name="TR_SCREENMAIN_HARMONY_BONUS">Gleichklang-Bonus</string>
<string name="TR_SCREENMAIN_BEST_PAIR">Bestes Paar bisher</string>
<string name="TR_SCREENMAIN_BEST_PAIR_FINAL">Bestes Paar des Abends</string>
<string name="TR_SCREENMAIN_CHAMPION">Sieger</string>
</resources>
@@ -0,0 +1,42 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="language">English</string>
<string name="TR_PARTYMODE_NAME">Partner Swap</string>
<string name="TR_PARTYMODE_DESCRIPTION">Sing in pairs with ever-changing partners. Both singers of a pair get the pair score, the best average wins.</string>
<string name="TR_PARTYMODE_AUDIENCE">For 3 to 12 players who like to sing together, 2 microphones needed.</string>
<string name="TR_BUTTON_NEXT">Next</string>
<string name="TR_BUTTON_BACK">Back</string>
<string name="TR_BUTTON_START">Start</string>
<string name="TR_BUTTON_EXIT">Exit</string>
<string name="TR_BUTTON_YES">Yes</string>
<string name="TR_BUTTON_NO">No</string>
<string name="TR_BUTTON_NEXT_ROUND">Start song</string>
<string name="TR_SONGS">Songs</string>
<string name="TR_SCREENCONFIG_TITLE">Partner Swap: Configuration</string>
<string name="TR_SCREENCONFIG_NUMPLAYERS">Number of players</string>
<string name="TR_SCREENCONFIG_NUMPASSES">Rounds</string>
<string name="TR_SCREENCONFIG_HARMONYBONUS">Harmony bonus</string>
<string name="TR_SCREENCONFIG_DUETS">Duet songs</string>
<string name="TR_SCREENCONFIG_DUETS_MIXED">Mixed</string>
<string name="TR_SCREENCONFIG_DUETS_ONLY">Duets only</string>
<string name="TR_SCREENCONFIG_DUETS_NONE">No duets</string>
<string name="TR_SCREENCONFIG_NUMJOKERS">Jokers per player</string>
<string name="TR_SCREENNAMES_TITLE">Partner Swap: Choose Players</string>
<string name="TR_SCREENNAMES_BUTTON_RANDOM">Select random</string>
<string name="TR_SCREENMAIN_TITLE">Partner Swap</string>
<string name="TR_SCREENMAIN_POPUP_REALLYEXIT">Do you really want to exit the game?</string>
<string name="TR_SCREENMAIN_HEADER_POS">Pos</string>
<string name="TR_SCREENMAIN_HEADER_NAME">Name</string>
<string name="TR_SCREENMAIN_HEADER_SONGS">Songs</string>
<string name="TR_SCREENMAIN_HEADER_AVERAGE">Ø</string>
<string name="TR_SCREENMAIN_PASS">Round</string>
<string name="TR_SCREENMAIN_SONG">Song</string>
<string name="TR_SCREENMAIN_PAUSE">Taking a break:</string>
<string name="TR_SCREENMAIN_FIRST_TIME">singing together for the first time</string>
<string name="TR_SCREENMAIN_TIMES_TOGETHER">singing together for the %n. time</string>
<string name="TR_SCREENMAIN_LAST_SONG">Last song:</string>
<string name="TR_SCREENMAIN_HARMONY_BONUS">Harmony bonus</string>
<string name="TR_SCREENMAIN_BEST_PAIR">Best pair so far</string>
<string name="TR_SCREENMAIN_BEST_PAIR_FINAL">Best pair of the night</string>
<string name="TR_SCREENMAIN_CHAMPION">Winner</string>
</resources>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ThemeSystemVersion>9</ThemeSystemVersion>
<Info>
<Name>Default</Name>
<Author>McSchneidar</Author>
<VersionMajor>0</VersionMajor>
<VersionMinor>1</VersionMinor>
</Info>
</root>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<SkinSystemVersion>4</SkinSystemVersion>
<Info>
<Name>Default</Name>
<Author>McSchneidar</Author>
<VersionMajor>0</VersionMajor>
<VersionMinor>1</VersionMinor>
</Info>
<Colors />
<Skins>
<PartyModeIcon>PartyModeIcon.png</PartyModeIcon>
</Skins>
<Videos />
</root>
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

@@ -0,0 +1,407 @@
<?xml version="1.0" encoding="utf-8"?>
<Screen>
<Informations>
<ScreenName>PartyScreenPartnerSwapConfig</ScreenName>
<ScreenVersion>1</ScreenVersion>
</Informations>
<Backgrounds>
<Background Name="Background1">
<Type>Video</Type>
<SlideShowTextures />
<Video>BG_Video</Video>
<Skin>BG_Default</Skin>
<Color Name="BackgroundColor" />
</Background>
</Backgrounds>
<Statics>
<Static Name="StaticMenuBar">
<Skin />
<Color Name="BackgroundColorAlpha" />
<Rect>
<X>0</X>
<Y>60</Y>
<W>1920</W>
<H>67.5</H>
<Z>1</Z>
</Rect>
</Static>
</Statics>
<Texts>
<Text Name="TextTitle">
<X>960</X>
<Y>75</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENCONFIG_TITLE</Text>
</Text>
<Text Name="TextNumPlayers">
<X>112.5</X>
<Y>157.5</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENCONFIG_NUMPLAYERS</Text>
</Text>
<Text Name="TextNumPasses">
<X>112.5</X>
<Y>247.5</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENCONFIG_NUMPASSES</Text>
</Text>
<Text Name="TextHarmonyBonus">
<X>112.5</X>
<Y>337.5</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENCONFIG_HARMONYBONUS</Text>
</Text>
<Text Name="TextDuetSongs">
<X>112.5</X>
<Y>427.5</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENCONFIG_DUETS</Text>
</Text>
<Text Name="TextNumJokers">
<X>112.5</X>
<Y>517.5</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENCONFIG_NUMJOKERS</Text>
</Text>
</Texts>
<Buttons>
<Button Name="ButtonNext">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>1477.5</X>
<Y>900</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_NEXT</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonBack">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>217.5</X>
<Y>900</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_BACK</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
</Buttons>
<SongMenus />
<Lyrics />
<SelectSlides>
<SelectSlide Name="SelectSlideNumPlayers">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>150</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>300</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>9</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideNumPasses">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>240</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>247.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>247.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>300</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>9</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideHarmonyBonus">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>330</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>337.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>337.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>300</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>9</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideDuetSongs">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>420</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>427.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>427.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>300</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>9</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideNumJokers">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>510</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>517.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>517.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>300</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>9</NumVisible>
</SelectSlide>
</SelectSlides>
<SingNotes />
<NameSelections />
<Equalizers />
<Playlists />
<ParticleEffects />
<ScreenSettings />
</Screen>
@@ -0,0 +1,738 @@
<?xml version="1.0" encoding="utf-8"?>
<Screen>
<Informations>
<ScreenName>PartyScreenPartnerSwapMain</ScreenName>
<ScreenVersion>1</ScreenVersion>
</Informations>
<Backgrounds>
<Background Name="Background1">
<Type>Video</Type>
<SlideShowTextures />
<Video>BG_Video</Video>
<Skin>BG_Default</Skin>
<Color Name="BackgroundColor" />
</Background>
</Backgrounds>
<Statics>
<Static Name="StaticMenuBar">
<Skin />
<Color Name="BackgroundColorAlpha" />
<Rect>
<X>0</X>
<Y>60</Y>
<W>1920</W>
<H>67.5</H>
<Z>1</Z>
</Rect>
</Static>
<Static Name="StaticPopupBG">
<Skin>PopupBG</Skin>
<Color Name="StaticColor" />
<Rect>
<X>0</X>
<Y>0</Y>
<W>1920</W>
<H>1080</H>
<Z>-1</Z>
</Rect>
</Static>
<Static Name="StaticRankPanel">
<Skin />
<Color>
<R>0.1</R>
<G>0.09</G>
<B>0.25</B>
<A>0.75</A>
</Color>
<Rect>
<X>30</X>
<Y>190</Y>
<W>760</W>
<H>720</H>
<Z>0.8</Z>
</Rect>
</Static>
<Static Name="StaticBestPanel">
<Skin />
<Color>
<R>0.1</R>
<G>0.09</G>
<B>0.25</B>
<A>0.75</A>
</Color>
<Rect>
<X>1470</X>
<Y>190</Y>
<W>420</W>
<H>292</H>
<Z>0.8</Z>
</Rect>
</Static>
<Static Name="StaticRowHighlight">
<Skin />
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>0.18</A>
</Color>
<Rect>
<X>40</X>
<Y>0</Y>
<W>740</W>
<H>48</H>
<Z>0.6</Z>
</Rect>
</Static>
<Static Name="StaticRowAvatar">
<Skin />
<Color Name="Visible" />
<Rect>
<X>125</X>
<Y>0</Y>
<W>42</W>
<H>42</H>
<Z>0.4</Z>
</Rect>
</Static>
<Static Name="StaticPairAvatar1">
<Skin />
<Color Name="Visible" />
<Rect>
<X>925</X>
<Y>290</Y>
<W>170</W>
<H>170</H>
<Z>0.4</Z>
</Rect>
</Static>
<Static Name="StaticPairAvatar2">
<Skin />
<Color Name="Visible" />
<Rect>
<X>1165</X>
<Y>290</Y>
<W>170</W>
<H>170</H>
<Z>0.4</Z>
</Rect>
</Static>
<Static Name="StaticBestAvatar1">
<Skin />
<Color Name="Visible" />
<Rect>
<X>1585</X>
<Y>260</Y>
<W>90</W>
<H>90</H>
<Z>0.4</Z>
</Rect>
</Static>
<Static Name="StaticBestAvatar2">
<Skin />
<Color Name="Visible" />
<Rect>
<X>1685</X>
<Y>260</Y>
<W>90</W>
<H>90</H>
<Z>0.4</Z>
</Rect>
</Static>
</Statics>
<Texts>
<Text Name="TextTitle">
<X>960</X>
<Y>75</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_TITLE</Text>
</Text>
<Text Name="TextPopupReallyExit">
<X>960</X>
<Y>405</Y>
<Z>-11</Z>
<H>40.5</H>
<MaxW>570</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_POPUP_REALLYEXIT</Text>
</Text>
<Text Name="TextHeaderPos">
<X>110</X>
<Y>205</Y>
<Z>0</Z>
<H>34</H>
<MaxW>0</MaxW>
<Color>
<R>0.75</R>
<G>0.78</G>
<B>0.85</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Right</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_HEADER_POS</Text>
</Text>
<Text Name="TextHeaderName">
<X>180</X>
<Y>205</Y>
<Z>0</Z>
<H>34</H>
<MaxW>0</MaxW>
<Color>
<R>0.75</R>
<G>0.78</G>
<B>0.85</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_HEADER_NAME</Text>
</Text>
<Text Name="TextHeaderSongs">
<X>560</X>
<Y>205</Y>
<Z>0</Z>
<H>34</H>
<MaxW>0</MaxW>
<Color>
<R>0.75</R>
<G>0.78</G>
<B>0.85</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Right</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_HEADER_SONGS</Text>
</Text>
<Text Name="TextHeaderAverage">
<X>765</X>
<Y>205</Y>
<Z>0</Z>
<H>34</H>
<MaxW>0</MaxW>
<Color>
<R>0.75</R>
<G>0.78</G>
<B>0.85</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Right</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_HEADER_AVERAGE</Text>
</Text>
<Text Name="TextRowPos">
<X>110</X>
<Y>0</Y>
<Z>0</Z>
<H>36</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Right</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextRowName">
<X>180</X>
<Y>0</Y>
<Z>0</Z>
<H>36</H>
<MaxW>300</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextRowSongs">
<X>560</X>
<Y>0</Y>
<Z>0</Z>
<H>36</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Right</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextRowAverage">
<X>765</X>
<Y>0</Y>
<Z>0</Z>
<H>36</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Right</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextPass">
<X>1130</X>
<Y>205</Y>
<Z>0</Z>
<H>32</H>
<MaxW>620</MaxW>
<Color>
<R>0.75</R>
<G>0.78</G>
<B>0.85</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextPairName1">
<X>1010</X>
<Y>478</Y>
<Z>0</Z>
<H>38</H>
<MaxW>220</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextPairName2">
<X>1250</X>
<Y>478</Y>
<Z>0</Z>
<H>38</H>
<MaxW>220</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextAmp">
<X>1130</X>
<Y>345</Y>
<Z>0</Z>
<H>56</H>
<MaxW>0</MaxW>
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>&amp;</Text>
</Text>
<Text Name="TextTogether">
<X>1130</X>
<Y>535</Y>
<Z>0</Z>
<H>30</H>
<MaxW>620</MaxW>
<Color>
<R>0.75</R>
<G>0.78</G>
<B>0.85</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextPause">
<X>1130</X>
<Y>575</Y>
<Z>0</Z>
<H>30</H>
<MaxW>620</MaxW>
<Color>
<R>0.75</R>
<G>0.78</G>
<B>0.85</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextLastResult">
<X>1130</X>
<Y>660</Y>
<Z>0</Z>
<H>32</H>
<MaxW>640</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextHarmony">
<X>1130</X>
<Y>705</Y>
<Z>0</Z>
<H>32</H>
<MaxW>640</MaxW>
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextBestLabel">
<X>1680</X>
<Y>210</Y>
<Z>0</Z>
<H>32</H>
<MaxW>400</MaxW>
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_BEST_PAIR</Text>
</Text>
<Text Name="TextBestNames">
<X>1680</X>
<Y>365</Y>
<Z>0</Z>
<H>32</H>
<MaxW>400</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextBestScore">
<X>1680</X>
<Y>410</Y>
<Z>0</Z>
<H>48</H>
<MaxW>0</MaxW>
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
<Text Name="TextChampionLabel">
<X>1130</X>
<Y>215</Y>
<Z>0</Z>
<H>36</H>
<MaxW>0</MaxW>
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENMAIN_CHAMPION</Text>
</Text>
<Text Name="TextChampion">
<X>1130</X>
<Y>262</Y>
<Z>0</Z>
<H>64</H>
<MaxW>600</MaxW>
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>1</A>
</Color>
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
</Texts>
<Buttons>
<Button Name="ButtonNextRound">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>1545</X>
<Y>945</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>15</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_NEXT_ROUND</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonBack">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>150</X>
<Y>945</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_BACK</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonExit">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>150</X>
<Y>945</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_EXIT</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonPopupYes">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>997.5</X>
<Y>540</Y>
<W>225</W>
<H>75</H>
<Z>-11</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_YES</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonPopupNo">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>697.5</X>
<Y>540</Y>
<W>225</W>
<H>75</H>
<Z>-11</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_NO</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
</Buttons>
<SongMenus />
<Lyrics />
<SelectSlides />
<SingNotes />
<NameSelections />
<Equalizers />
<Playlists />
<ParticleEffects>
<ParticleEffect Name="ParticleEffectChampion">
<Skin>Star</Skin>
<Rect>
<X>850</X>
<Y>200</Y>
<W>560</W>
<H>380</H>
<Z>-1</Z>
</Rect>
<Color>
<R>1</R>
<G>0.8</G>
<B>0</B>
<A>0.6</A>
</Color>
<Type>Star</Type>
<Size>18</Size>
<MaxNumber>40</MaxNumber>
</ParticleEffect>
</ParticleEffects>
<ScreenSettings />
</Screen>
@@ -0,0 +1,382 @@
<?xml version="1.0" encoding="utf-8"?>
<Screen>
<Informations>
<ScreenName>PartyScreenPartnerSwapNames</ScreenName>
<ScreenVersion>1</ScreenVersion>
</Informations>
<Backgrounds>
<Background Name="Background1">
<Type>Video</Type>
<SlideShowTextures />
<Video>BG_Video</Video>
<Skin>BG_Default</Skin>
<Color Name="BackgroundColor" />
</Background>
</Backgrounds>
<Statics>
<Static Name="StaticMenuBar">
<Skin />
<Color Name="BackgroundColorAlpha" />
<Rect>
<X>0</X>
<Y>60</Y>
<W>1920</W>
<H>67.5</H>
<Z>1</Z>
</Rect>
</Static>
</Statics>
<Texts>
<Text Name="TextTitle">
<X>960</X>
<Y>75</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENNAMES_TITLE</Text>
</Text>
</Texts>
<Buttons>
<Button Name="ButtonBack">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>217.5</X>
<Y>900</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_BACK</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonNext">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>1477.5</X>
<Y>900</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_NEXT</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonRandom">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>847.5</X>
<Y>900</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENNAMES_BUTTON_RANDOM</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonIncreaseTeams">
<Skin>Plus</Skin>
<SkinSelected>Plus</SkinSelected>
<Rect>
<X>1770</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>15</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
</Button>
<Button Name="ButtonDecreaseTeams">
<Skin>Minus</Skin>
<SkinSelected>Minus</SkinSelected>
<Rect>
<X>1695</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>15</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
</Button>
<Button Name="ButtonIncreasePlayer">
<Skin>Plus</Skin>
<SkinSelected>Plus</SkinSelected>
<Rect>
<X>217.5</X>
<Y>1800</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>15</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
</Button>
<Button Name="ButtonDecreasePlayer">
<Skin>Minus</Skin>
<SkinSelected>Minus</SkinSelected>
<Rect>
<X>217.5</X>
<Y>1800</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>15</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text />
</Text>
</Button>
</Buttons>
<SongMenus />
<Lyrics />
<SelectSlides>
<SelectSlide Name="SelectSlideTeams">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>60</X>
<Y>150</Y>
<W>1800</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>67.5</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1792.5</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>300</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>2</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlidePlayer">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlidePlayer</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>60</X>
<Y>240</Y>
<W>1800</W>
<H>225</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>67.5</X>
<Y>315</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1792.5</X>
<Y>315</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>5</TextRelativeY>
<TextMaxW>300</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>8</NumVisible>
</SelectSlide>
</SelectSlides>
<SingNotes />
<NameSelections>
<NameSelection Name="NameSelection">
<Rect>
<X>142.5</X>
<Y>525</Y>
<W>1800</W>
<H>589.5</H>
<Z>0</Z>
</Rect>
<SkinEmptyTile>CoverTile</SkinEmptyTile>
<ColorEmptyTile Name="EmptyTileColor" />
<SkinTileSelected>PlayerSelector</SkinTileSelected>
<Tiles>
<W>150</W>
<H>150</H>
<NumW>10</NumW>
<NumH>2</NumH>
<SpaceW>15</SpaceW>
<SpaceH>15</SpaceH>
<Name>
<Space>-20</Space>
<H>25.5</H>
<Font>Outline</Font>
<Style>Bold</Style>
<Color Name="TextColor" />
</Name>
</Tiles>
</NameSelection>
</NameSelections>
<Equalizers />
<Playlists />
<ParticleEffects />
<ScreenSettings />
</Screen>
@@ -0,0 +1,407 @@
<?xml version="1.0" encoding="utf-8"?>
<Screen>
<Informations>
<ScreenName>PartyScreenPartnerSwapSongs</ScreenName>
<ScreenVersion>1</ScreenVersion>
</Informations>
<Backgrounds>
<Background Name="Background1">
<Type>Video</Type>
<SlideShowTextures />
<Video>BG_Video</Video>
<Skin>BG_Default</Skin>
<Color Name="BackgroundColor" />
</Background>
</Backgrounds>
<Statics>
<Static Name="StaticMenuBar">
<Skin />
<Color Name="BackgroundColorAlpha" />
<Rect>
<X>0</X>
<Y>60</Y>
<W>1920</W>
<H>67.5</H>
<Z>1</Z>
</Rect>
</Static>
</Statics>
<Texts>
<Text Name="TextTitle">
<X>960</X>
<Y>75</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENCONFIG_TITLE</Text>
</Text>
<Text Name="TextSource">
<X>112.5</X>
<Y>157.5</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SONGSOURCE</Text>
</Text>
<Text Name="TextSongMode">
<X>112.5</X>
<Y>435</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>0</MaxW>
<Color Name="TextColor" />
<SelColor Name="TextSelColor" />
<Align>Left</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_GAMEMODE</Text>
</Text>
</Texts>
<Buttons>
<Button Name="ButtonNext">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>1477.5</X>
<Y>900</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_NEXT</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
<Button Name="ButtonBack">
<Skin>Button</Skin>
<SkinSelected>Button</SkinSelected>
<Rect>
<X>217.5</X>
<Y>900</Y>
<W>225</W>
<H>75</H>
<Z>0</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>112.5</X>
<Y>18</Y>
<Z>0</Z>
<H>40.5</H>
<MaxW>213</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_BUTTON_BACK</Text>
</Text>
<Reflection>
<Height>39</Height>
<Space>15</Space>
</Reflection>
<SelReflection>
<Height>39</Height>
<Space>15</Space>
</SelReflection>
</Button>
</Buttons>
<SongMenus />
<Lyrics />
<SelectSlides>
<SelectSlide Name="SelectSlideSource">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>150</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>157.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>308</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>3</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlidePlaylist">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>240</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>247.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>247.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>900</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>3</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideSorting">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>240</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>247.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>247.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>900</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>3</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideCategory">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>330</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>337.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>337.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>900</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>1</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideSongMode">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>435</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>442.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>442.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>308</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>2</NumVisible>
</SelectSlide>
<SelectSlide Name="SelectSlideNumMedleySongs">
<Skin />
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<SkinSelected>SelectSlide</SkinSelected>
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<Rect>
<X>750</X>
<Y>540</Y>
<W>1050</W>
<H>75</H>
<Z>0</Z>
</Rect>
<RectArrowLeft>
<X>757.5</X>
<Y>547.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowLeft>
<RectArrowRight>
<X>1732.5</X>
<Y>547.5</Y>
<W>60</W>
<H>60</H>
<Z>0</Z>
</RectArrowRight>
<Color Name="SelectSlideColor" />
<SelColor Name="SelectSlideSelColor" />
<ArrowColor Name="ArrowColor" />
<ArrowSelColor Name="ArrowSelColor" />
<TextColor Name="TextColorAlpha" />
<TextSelColor Name="TextSelColor" />
<TextH>40.5</TextH>
<TextRelativeX>75</TextRelativeX>
<TextRelativeY>0</TextRelativeY>
<TextMaxW>308</TextMaxW>
<TextFont>Outline</TextFont>
<TextStyle>Bold</TextStyle>
<NumVisible>5</NumVisible>
</SelectSlide>
</SelectSlides>
<SingNotes />
<NameSelections />
<Equalizers />
<Playlists />
<ParticleEffects />
<ScreenSettings />
</Screen>
@@ -0,0 +1,734 @@
#region license
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using VocaluxeLib.Menu;
using VocaluxeLib.Utils;
[assembly: ComVisible(false)]
namespace VocaluxeLib.PartyModes.PartnerSwap
{
public enum EDuetSongs
{
Mixed,
DuetsOnly,
NoDuets
}
public class CSwapPlayer
{
public Guid ProfileId;
public int TotalPoints;
public int NumSongs;
public int Jokers;
public int Average
{
get { return NumSongs == 0 ? 0 : (int)Math.Round((double)TotalPoints / NumSongs); }
}
}
public class CSwapPair
{
public CSwapPlayer[] Players = new CSwapPlayer[2];
public int[] Scores = new int[2];
public int Bonus;
public bool Sung;
public int PairScore
{
get { return Scores[0] + Scores[1] + Bonus; }
}
}
public abstract class CPartyScreenPartnerSwap : CMenuParty
{
protected new CPartyModePartnerSwap _PartyMode;
public override void Init()
{
base.Init();
_PartyMode = (CPartyModePartnerSwap)base._PartyMode;
}
}
public sealed class CPartyModePartnerSwap : CPartyMode
{
public const int PlayersPerSong = 2;
public const int MaxJokers = 3;
public const int HarmonyRange = 500;
public const int HarmonyBonusPoints = 500;
public override int MinMics
{
get { return PlayersPerSong; }
}
public override int MaxMics
{
get { return CBase.Config.GetMaxNumMics(); }
}
public override int MinPlayers
{
get { return 3; }
}
public override int MaxPlayers
{
get { return 12; }
}
public override int MinTeams
{
get { return 1; }
}
public override int MaxTeams
{
get { return 1; }
}
public override int MinPlayersPerTeam
{
get { return MinPlayers; }
}
public override int MaxPlayersPerTeam
{
get { return MaxPlayers; }
}
private enum EStage
{
Config,
Songs,
Names,
Main,
SongSelection,
Singing,
MedleySinging
}
public struct SData
{
public int NumPlayer;
public int NumPasses;
public bool HarmonyBonus;
public EDuetSongs DuetSongs;
public int NumJokers;
public List<Guid> ProfileIds;
public ESongSource SongSource;
public ESongSorting Sorting;
public int CategoryIndex;
public int PlaylistId;
public EGameMode GameMode;
public int NumMedleySongs;
public List<CSwapPlayer> Players;
public List<List<CSwapPair>> Passes;
public List<CSwapPlayer> PassBreaks;
public int PassIndex;
public int PairIndex;
public int NumSongsSung;
public CSwapPair BestPair;
public CSwapPair LastPair;
public List<CSwapPlayer> PreviousRanking;
public List<int> Songs;
}
public SData GameData;
private EStage _Stage;
public CPartyModePartnerSwap(int id) : base(id)
{
_ScreenSongOptions.Selection.RandomOnly = false;
_ScreenSongOptions.Selection.PartyMode = true;
_ScreenSongOptions.Selection.CategoryChangeAllowed = true;
_ScreenSongOptions.Selection.NumJokers = new int[] { 1, 1 };
_ScreenSongOptions.Selection.TeamNames = new string[] { "foo", "bar" };
_ScreenSongOptions.Sorting.SearchString = string.Empty;
_ScreenSongOptions.Sorting.SearchActive = false;
_ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.All;
_ScreenSongOptions.Sorting.FilterPlaylistId = -1;
GameData = new SData
{
NumPlayer = 6,
NumPasses = 3,
HarmonyBonus = true,
DuetSongs = EDuetSongs.Mixed,
NumJokers = 1,
ProfileIds = new List<Guid>(),
Sorting = CBase.Config.GetSongSorting(),
SongSource = ESongSource.TR_SONGSOURCE_ALLSONGS,
PlaylistId = 0,
CategoryIndex = 0,
GameMode = EGameMode.TR_GAMEMODE_NORMAL,
NumMedleySongs = 5,
Players = new List<CSwapPlayer>(),
Passes = new List<List<CSwapPair>>(),
PassBreaks = new List<CSwapPlayer>(),
PreviousRanking = new List<CSwapPlayer>(),
Songs = new List<int>()
};
}
public override void SetDefaults()
{
_Stage = EStage.Config;
_ScreenSongOptions.Sorting.IgnoreArticles = CBase.Config.GetIgnoreArticles();
_ScreenSongOptions.Sorting.SongSorting = CBase.Config.GetSongSorting();
_ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_OFF;
_ScreenSongOptions.Selection.SongIndex = -1;
_ScreenSongOptions.Selection.CategoryIndex = -1;
if (CBase.Config.GetTabs() == EOffOn.TR_CONFIG_ON && _ScreenSongOptions.Sorting.SongSorting != ESongSorting.TR_CONFIG_NONE)
{
_ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_ON;
}
}
public override bool Init()
{
if (!base.Init())
{
return false;
}
SetDefaults();
return true;
}
public override void UpdateGame() { }
public static int GetMaxPasses(int numPlayer)
{
return numPlayer % 2 == 0 ? numPlayer - 1 : numPlayer;
}
public bool IsFinished
{
get { return GameData.Passes.Count > 0 && GameData.PassIndex >= GameData.Passes.Count; }
}
public CSwapPair CurrentPair
{
get
{
if (IsFinished || GameData.Passes.Count == 0)
{
return null;
}
return GameData.Passes[GameData.PassIndex][GameData.PairIndex];
}
}
public CSwapPlayer CurrentBreak
{
get { return IsFinished || GameData.PassIndex >= GameData.PassBreaks.Count ? null : GameData.PassBreaks[GameData.PassIndex]; }
}
public List<CSwapPlayer> GetRanking()
{
return GameData.Players.OrderByDescending(player => player.Average).ThenByDescending(player => player.TotalPoints).ToList();
}
public int GetTimesTogether(CSwapPlayer player1, CSwapPlayer player2)
{
var count = 0;
foreach (var pass in GameData.Passes)
{
foreach (var pair in pass)
{
if (pair.Sung && pair.Players.Contains(player1) && pair.Players.Contains(player2))
{
count++;
}
}
}
return count;
}
private IMenu _GetNextScreen()
{
switch (_Stage)
{
case EStage.Config:
return _Screens["CPartyScreenPartnerSwapConfig"];
case EStage.Songs:
return _Screens["CPartyScreenPartnerSwapSongs"];
case EStage.Names:
return _Screens["CPartyScreenPartnerSwapNames"];
case EStage.Main:
return _Screens["CPartyScreenPartnerSwapMain"];
case EStage.SongSelection:
return CBase.Graphics.GetScreen(EScreen.Song);
case EStage.Singing:
case EStage.MedleySinging:
return CBase.Graphics.GetScreen(EScreen.Sing);
default:
throw new ArgumentException("Invalid stage: " + _Stage);
}
}
private void _FadeToScreen()
{
CBase.Graphics.FadeTo(_GetNextScreen());
}
public void Next()
{
switch (_Stage)
{
case EStage.Config:
_Stage = EStage.Songs;
break;
case EStage.Songs:
_Stage = EStage.Names;
break;
case EStage.Names:
_Stage = EStage.Main;
_StartGame();
break;
case EStage.Main:
if (CurrentPair == null)
{
return;
}
if (GameData.GameMode == EGameMode.TR_GAMEMODE_MEDLEY)
{
_Stage = EStage.MedleySinging;
_PrepareMedleyRound();
}
else
{
_Stage = EStage.SongSelection;
_PrepareSongSelection();
}
break;
case EStage.SongSelection:
_Stage = EStage.Singing;
break;
case EStage.MedleySinging:
case EStage.Singing:
_Stage = EStage.Main;
_UpdateScores();
break;
default:
throw new ArgumentException("Invalid stage: " + _Stage);
}
_FadeToScreen();
}
public void Back()
{
switch (_Stage)
{
case EStage.Config:
CBase.Graphics.FadeTo(EScreen.Party);
return;
case EStage.Songs:
_Stage = EStage.Config;
break;
case EStage.Names:
_Stage = EStage.Songs;
break;
case EStage.Main:
_Stage = EStage.Names;
break;
default:
throw new ArgumentException("Invalid stage: " + _Stage);
}
_FadeToScreen();
}
public override IMenu GetStartScreen()
{
return _Screens["CPartyScreenPartnerSwapConfig"];
}
public override SScreenSongOptions GetScreenSongOptions()
{
return _ScreenSongOptions;
}
public override void OnSongChange(int songIndex, ref SScreenSongOptions screenSongOptions)
{
if (_ScreenSongOptions.Selection.SelectNextRandomSong && songIndex != -1)
{
_ScreenSongOptions.Selection.SelectNextRandomSong = false;
}
_ScreenSongOptions.Selection.SongIndex = songIndex;
screenSongOptions = _ScreenSongOptions;
}
public override void OnCategoryChange(int categoryIndex, ref SScreenSongOptions screenSongOptions)
{
if (categoryIndex != -1 || CBase.Config.GetTabs() == EOffOn.TR_CONFIG_OFF)
{
_ScreenSongOptions.Selection.SelectNextRandomSong = true;
_ScreenSongOptions.Selection.RandomOnly = true;
}
else
{
_ScreenSongOptions.Selection.SongIndex = -1;
_ScreenSongOptions.Selection.RandomOnly = false;
}
_ScreenSongOptions.Selection.CategoryIndex = categoryIndex;
screenSongOptions = _ScreenSongOptions;
}
public override void SetSearchString(string searchString, bool visible)
{
_ScreenSongOptions.Sorting.SearchString = searchString;
_ScreenSongOptions.Sorting.SearchActive = visible;
}
public override void JokerUsed(int teamNr)
{
if (_ScreenSongOptions.Selection.NumJokers == null || teamNr >= _ScreenSongOptions.Selection.NumJokers.Length)
{
return;
}
var pair = CurrentPair;
if (pair != null && pair.Players[teamNr].Jokers > 0)
{
pair.Players[teamNr].Jokers--;
}
_ScreenSongOptions.Selection.NumJokers[teamNr]--;
_ScreenSongOptions.Selection.RandomOnly = true;
_ScreenSongOptions.Selection.CategoryChangeAllowed = false;
}
public override void SongSelected(int songId)
{
_PrepareRound(new int[] { songId });
Next();
}
public override void LeavingHighscore()
{
for (var i = 0; i < CBase.Game.GetNumSongs(); i++)
{
CBase.Songs.AddPartySongSung(CBase.Game.GetSong(i).Id);
}
Next();
}
private void _StartGame()
{
CBase.Songs.ResetSongSung();
GameData.Players = new List<CSwapPlayer>();
foreach (var profileId in GameData.ProfileIds)
{
GameData.Players.Add(new CSwapPlayer { ProfileId = profileId, Jokers = GameData.NumJokers });
}
var slots = new List<CSwapPlayer>(GameData.Players);
slots.Shuffle();
if (slots.Count % 2 == 1)
{
slots.Add(null);
}
GameData.Passes = new List<List<CSwapPair>>();
GameData.PassBreaks = new List<CSwapPlayer>();
var numPasses = Math.Max(1, Math.Min(GameData.NumPasses, GetMaxPasses(GameData.Players.Count)));
for (var pass = 0; pass < numPasses; pass++)
{
var pairs = new List<CSwapPair>();
CSwapPlayer pause = null;
for (var i = 0; i < slots.Count / 2; i++)
{
var player1 = slots[i];
var player2 = slots[slots.Count - 1 - i];
if (player1 == null || player2 == null)
{
pause = player1 ?? player2;
continue;
}
var pair = new CSwapPair();
pair.Players[0] = player1;
pair.Players[1] = player2;
pairs.Add(pair);
}
pairs.Shuffle();
GameData.Passes.Add(pairs);
GameData.PassBreaks.Add(pause);
var last = slots[slots.Count - 1];
slots.RemoveAt(slots.Count - 1);
slots.Insert(1, last);
}
GameData.PassIndex = 0;
GameData.PairIndex = 0;
GameData.NumSongsSung = 0;
GameData.BestPair = null;
GameData.LastPair = null;
GameData.PreviousRanking = GetRanking();
GameData.Songs = new List<int>();
}
private EDuetOptions _GetDuetOptions()
{
switch (GameData.DuetSongs)
{
case EDuetSongs.NoDuets:
return EDuetOptions.NoDuets;
case EDuetSongs.DuetsOnly:
return CBase.Songs.GetSongs().Any(song => song.IsDuet) ? EDuetOptions.Duets : EDuetOptions.All;
default:
return EDuetOptions.All;
}
}
private void _PrepareMedleyRound()
{
var songIds = new List<int>();
for (var i = 0; i < GameData.NumMedleySongs; i++)
{
if (GameData.Songs.Count == 0)
{
_UpdateSongList();
}
if (GameData.Songs.Count == 0)
{
break;
}
songIds.Add(GameData.Songs[0]);
GameData.Songs.RemoveAt(0);
}
_PrepareRound(songIds.ToArray());
}
private void _PrepareSongSelection()
{
_ScreenSongOptions.Selection.RandomOnly = true;
_ScreenSongOptions.Selection.SelectNextRandomSong = true;
_ScreenSongOptions.Sorting.IgnoreArticles = CBase.Config.GetIgnoreArticles();
_ScreenSongOptions.Sorting.DuetOptions = _GetDuetOptions();
switch (GameData.SongSource)
{
case ESongSource.TR_SONGSOURCE_ALLSONGS:
_ScreenSongOptions.Sorting.SongSorting = CBase.Config.GetSongSorting();
_ScreenSongOptions.Sorting.Tabs = CBase.Config.GetTabs();
_ScreenSongOptions.Sorting.FilterPlaylistId = -1;
_ScreenSongOptions.Selection.SongIndex = -1;
_ScreenSongOptions.Selection.CategoryIndex = -1;
_ScreenSongOptions.Selection.CategoryChangeAllowed = true;
break;
case ESongSource.TR_SONGSOURCE_CATEGORY:
_ScreenSongOptions.Sorting.SongSorting = GameData.Sorting;
_ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_ON;
_ScreenSongOptions.Sorting.FilterPlaylistId = -1;
_ScreenSongOptions.Selection.CategoryIndex = GameData.CategoryIndex;
_ScreenSongOptions.Selection.CategoryChangeAllowed = false;
break;
case ESongSource.TR_SONGSOURCE_PLAYLIST:
_ScreenSongOptions.Sorting.SongSorting = CBase.Config.GetSongSorting();
_ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_OFF;
_ScreenSongOptions.Sorting.FilterPlaylistId = GameData.PlaylistId;
_ScreenSongOptions.Selection.CategoryChangeAllowed = false;
break;
}
var pair = CurrentPair;
_ScreenSongOptions.Selection.NumJokers = new int[] { pair.Players[0].Jokers, pair.Players[1].Jokers };
_ScreenSongOptions.Selection.TeamNames = new string[]
{
CBase.Profiles.GetPlayerName(pair.Players[0].ProfileId),
CBase.Profiles.GetPlayerName(pair.Players[1].ProfileId)
};
}
private bool _PrepareRound(int[] songIds)
{
CBase.Game.Reset();
CBase.Game.ClearSongs();
CBase.Game.SetNumPlayer(PlayersPerSong);
var players = CBase.Game.GetPlayers();
var pair = CurrentPair;
if (players == null || players.Length < PlayersPerSong || pair == null)
{
return false;
}
for (var p = 0; p < PlayersPerSong; p++)
{
players[p].ProfileId = pair.Players[p].ProfileId;
players[p].VoiceNr = p;
}
foreach (var songId in songIds)
{
var song = CBase.Songs.GetSongById(songId);
var gameMode = GameData.GameMode;
if (gameMode != EGameMode.TR_GAMEMODE_MEDLEY)
{
if (song.IsDuet)
{
gameMode = EGameMode.TR_GAMEMODE_DUET;
}
else if (!song.IsGameModeAvailable(gameMode))
{
gameMode = EGameMode.TR_GAMEMODE_NORMAL;
}
}
CBase.Game.AddSong(songId, gameMode);
}
return true;
}
private void _UpdateSongList()
{
if (GameData.Songs.Count > 0)
{
return;
}
switch (GameData.SongSource)
{
case ESongSource.TR_SONGSOURCE_PLAYLIST:
for (var i = 0; i < CBase.Playlist.GetSongCount(GameData.PlaylistId); i++)
{
var id = CBase.Playlist.GetSong(GameData.PlaylistId, i).SongId;
var song = CBase.Songs.GetSongById(id);
if (song.IsGameModeAvailable(EGameMode.TR_GAMEMODE_MEDLEY) && !song.IsDuet)
{
GameData.Songs.Add(id);
}
}
break;
case ESongSource.TR_SONGSOURCE_ALLSONGS:
var avSongs = CBase.Songs.GetSongs();
GameData.Songs.AddRange(avSongs.Where(song => song.IsGameModeAvailable(EGameMode.TR_GAMEMODE_MEDLEY) && !song.IsDuet).Select(song => song.Id));
break;
case ESongSource.TR_SONGSOURCE_CATEGORY:
var oldSorting = CBase.Config.GetSongSorting();
CBase.Songs.SortSongs(GameData.Sorting, EOffOn.TR_CONFIG_ON, CBase.Config.GetIgnoreArticles(), string.Empty, EDuetOptions.NoDuets, -1);
CBase.Songs.SetCategory(GameData.CategoryIndex);
avSongs = CBase.Songs.GetVisibleSongs();
GameData.Songs.AddRange(avSongs.Where(song => song.IsGameModeAvailable(EGameMode.TR_GAMEMODE_MEDLEY) && !song.IsDuet).Select(song => song.Id));
CBase.Songs.SetCategory(-1);
CBase.Songs.SortSongs(oldSorting, CBase.Config.GetTabs(), CBase.Config.GetIgnoreArticles(), string.Empty, EDuetOptions.NoDuets, -1);
break;
}
GameData.Songs.Shuffle();
}
private void _UpdateScores()
{
var pair = CurrentPair;
if (pair == null)
{
return;
}
var points = CBase.Game.GetPoints();
if (points == null || points.NumRounds == 0)
{
return;
}
var scores = new double[PlayersPerSong];
for (var round = 0; round < points.NumRounds; round++)
{
var res = points.GetPlayer(round, PlayersPerSong);
if (res == null || res.Length < PlayersPerSong)
{
return;
}
for (var p = 0; p < PlayersPerSong; p++)
{
scores[p] += res[p].Points;
}
}
GameData.PreviousRanking = GetRanking();
for (var p = 0; p < PlayersPerSong; p++)
{
pair.Scores[p] = (int)Math.Round(scores[p] / points.NumRounds);
}
pair.Bonus = GameData.HarmonyBonus && Math.Abs(pair.Scores[0] - pair.Scores[1]) <= HarmonyRange ? HarmonyBonusPoints : 0;
pair.Sung = true;
foreach (var player in pair.Players)
{
player.TotalPoints += pair.PairScore;
player.NumSongs++;
}
if (GameData.BestPair == null || pair.PairScore > GameData.BestPair.PairScore)
{
GameData.BestPair = pair;
}
GameData.LastPair = pair;
GameData.NumSongsSung++;
GameData.PairIndex++;
if (GameData.PairIndex >= GameData.Passes[GameData.PassIndex].Count)
{
GameData.PairIndex = 0;
GameData.PassIndex++;
}
}
}
}
@@ -0,0 +1,173 @@
#region license
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using System.Windows.Forms;
namespace VocaluxeLib.PartyModes.PartnerSwap
{
public class CPartyScreenPartnerSwapConfig : CPartyScreenPartnerSwap
{
protected override int _ScreenVersion
{
get { return 1; }
}
private const string _SelectSlideNumPlayers = "SelectSlideNumPlayers";
private const string _SelectSlideNumPasses = "SelectSlideNumPasses";
private const string _SelectSlideHarmonyBonus = "SelectSlideHarmonyBonus";
private const string _SelectSlideDuetSongs = "SelectSlideDuetSongs";
private const string _SelectSlideNumJokers = "SelectSlideNumJokers";
private const string _ButtonNext = "ButtonNext";
private const string _ButtonBack = "ButtonBack";
public override void Init()
{
base.Init();
_ThemeSelectSlides = new string[] { _SelectSlideNumPlayers, _SelectSlideNumPasses, _SelectSlideHarmonyBonus, _SelectSlideDuetSongs, _SelectSlideNumJokers };
_ThemeButtons = new string[] { _ButtonNext, _ButtonBack };
}
public override bool HandleInput(SKeyEvent keyEvent)
{
base.HandleInput(keyEvent);
if (!keyEvent.KeyPressed)
{
switch (keyEvent.Key)
{
case Keys.Back:
case Keys.Escape:
_PartyMode.Back();
break;
case Keys.Enter:
_UpdateSlides();
if (_Buttons[_ButtonBack].Selected)
{
_PartyMode.Back();
}
if (_Buttons[_ButtonNext].Selected)
{
_PartyMode.Next();
}
break;
case Keys.Left:
case Keys.Right:
_UpdateSlides();
break;
}
}
return true;
}
public override bool HandleMouse(SMouseEvent mouseEvent)
{
base.HandleMouse(mouseEvent);
if (mouseEvent.LB && _IsMouseOverCurSelection(mouseEvent))
{
_UpdateSlides();
if (_Buttons[_ButtonBack].Selected)
{
_PartyMode.Back();
}
if (_Buttons[_ButtonNext].Selected)
{
_PartyMode.Next();
}
}
if (mouseEvent.RB)
{
_PartyMode.Back();
}
return true;
}
public override void OnShow()
{
base.OnShow();
_SelectSlides[_SelectSlideNumPlayers].Clear();
for (var i = _PartyMode.MinPlayers; i <= _PartyMode.MaxPlayers; i++)
{
_SelectSlides[_SelectSlideNumPlayers].AddValue(i.ToString());
}
_SelectSlides[_SelectSlideNumPlayers].SelectedValue = _PartyMode.GameData.NumPlayer.ToString();
_UpdatePassesSlide();
_SelectSlides[_SelectSlideHarmonyBonus].Clear();
_SelectSlides[_SelectSlideHarmonyBonus].AddValue(CBase.Language.Translate("TR_BUTTON_NO", PartyModeId));
_SelectSlides[_SelectSlideHarmonyBonus].AddValue(CBase.Language.Translate("TR_BUTTON_YES", PartyModeId));
_SelectSlides[_SelectSlideHarmonyBonus].Selection = _PartyMode.GameData.HarmonyBonus ? 1 : 0;
_SelectSlides[_SelectSlideDuetSongs].Clear();
_SelectSlides[_SelectSlideDuetSongs].AddValue(CBase.Language.Translate("TR_SCREENCONFIG_DUETS_MIXED", PartyModeId));
_SelectSlides[_SelectSlideDuetSongs].AddValue(CBase.Language.Translate("TR_SCREENCONFIG_DUETS_ONLY", PartyModeId));
_SelectSlides[_SelectSlideDuetSongs].AddValue(CBase.Language.Translate("TR_SCREENCONFIG_DUETS_NONE", PartyModeId));
_SelectSlides[_SelectSlideDuetSongs].Selection = (int)_PartyMode.GameData.DuetSongs;
_SelectSlides[_SelectSlideNumJokers].Clear();
for (var i = 0; i <= CPartyModePartnerSwap.MaxJokers; i++)
{
_SelectSlides[_SelectSlideNumJokers].AddValue(i.ToString());
}
_SelectSlides[_SelectSlideNumJokers].SelectedValue = _PartyMode.GameData.NumJokers.ToString();
}
public override bool UpdateGame()
{
return true;
}
private void _UpdateSlides()
{
_PartyMode.GameData.NumPlayer = _SelectSlides[_SelectSlideNumPlayers].Selection + _PartyMode.MinPlayers;
_PartyMode.GameData.NumPasses = _SelectSlides[_SelectSlideNumPasses].Selection + 1;
_PartyMode.GameData.HarmonyBonus = _SelectSlides[_SelectSlideHarmonyBonus].Selection == 1;
_PartyMode.GameData.DuetSongs = (EDuetSongs)_SelectSlides[_SelectSlideDuetSongs].Selection;
_PartyMode.GameData.NumJokers = _SelectSlides[_SelectSlideNumJokers].Selection;
_UpdatePassesSlide();
}
private void _UpdatePassesSlide()
{
var maxPasses = CPartyModePartnerSwap.GetMaxPasses(_PartyMode.GameData.NumPlayer);
_PartyMode.GameData.NumPasses = Math.Max(1, Math.Min(maxPasses, _PartyMode.GameData.NumPasses));
_SelectSlides[_SelectSlideNumPasses].Clear();
for (var i = 1; i <= maxPasses; i++)
{
_SelectSlides[_SelectSlideNumPasses].AddValue(i.ToString());
}
_SelectSlides[_SelectSlideNumPasses].Selection = _PartyMode.GameData.NumPasses - 1;
}
}
}
@@ -0,0 +1,527 @@
#region license
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Forms;
using VocaluxeLib.Menu;
namespace VocaluxeLib.PartyModes.PartnerSwap
{
class CRankRow
{
public CSwapPlayer Player;
public CStatic Highlight;
public CStatic Avatar;
public CText Pos;
public CText Name;
public CText Songs;
public CText Average;
public int OldRank;
public int NewRank;
}
public class CPartyScreenPartnerSwapMain : CPartyScreenPartnerSwap
{
protected override int _ScreenVersion
{
get { return 1; }
}
private const string _TextPopupReallyExit = "TextPopupReallyExit";
private const string _TextPass = "TextPass";
private const string _TextRowPos = "TextRowPos";
private const string _TextRowName = "TextRowName";
private const string _TextRowSongs = "TextRowSongs";
private const string _TextRowAverage = "TextRowAverage";
private const string _TextPairName1 = "TextPairName1";
private const string _TextPairName2 = "TextPairName2";
private const string _TextAmp = "TextAmp";
private const string _TextTogether = "TextTogether";
private const string _TextPause = "TextPause";
private const string _TextLastResult = "TextLastResult";
private const string _TextHarmony = "TextHarmony";
private const string _TextBestLabel = "TextBestLabel";
private const string _TextBestNames = "TextBestNames";
private const string _TextBestScore = "TextBestScore";
private const string _TextChampionLabel = "TextChampionLabel";
private const string _TextChampion = "TextChampion";
private const string _ButtonNextRound = "ButtonNextRound";
private const string _ButtonBack = "ButtonBack";
private const string _ButtonExit = "ButtonExit";
private const string _ButtonPopupYes = "ButtonPopupYes";
private const string _ButtonPopupNo = "ButtonPopupNo";
private const string _StaticPopupBG = "StaticPopupBG";
private const string _StaticRowHighlight = "StaticRowHighlight";
private const string _StaticRowAvatar = "StaticRowAvatar";
private const string _StaticPairAvatar1 = "StaticPairAvatar1";
private const string _StaticPairAvatar2 = "StaticPairAvatar2";
private const string _StaticBestAvatar1 = "StaticBestAvatar1";
private const string _StaticBestAvatar2 = "StaticBestAvatar2";
private const string _ParticleEffectChampion = "ParticleEffectChampion";
private const float _FirstRowY = 260f;
private const float _RowStep = 54f;
private const float _RankDelay = 300f;
private const float _RankDuration = 700f;
private const float _PopDuration = 700f;
private readonly string[] _RankColors = new string[] { "Top1Color", "Top2Color", "Top3Color" };
private bool _ExitPopupVisible;
private List<CRankRow> _Rows;
private readonly Stopwatch _AnimTimer = new Stopwatch();
private bool _ShowNewResult;
private int _LastSeenSongs = -1;
private float _LastResultHeight;
private float _HarmonyHeight;
private float _ChampionHeight;
private SRectF _PairAvatar1Rect;
public override void Init()
{
base.Init();
_ThemeTexts = new string[]
{
_TextPopupReallyExit, _TextPass, _TextRowPos, _TextRowName, _TextRowSongs, _TextRowAverage, _TextPairName1, _TextPairName2, _TextAmp, _TextTogether,
_TextPause, _TextLastResult, _TextHarmony, _TextBestLabel, _TextBestNames, _TextBestScore, _TextChampionLabel, _TextChampion
};
_ThemeButtons = new string[] { _ButtonNextRound, _ButtonBack, _ButtonExit, _ButtonPopupYes, _ButtonPopupNo };
_ThemeStatics = new string[]
{
_StaticPopupBG, _StaticRowHighlight, _StaticRowAvatar, _StaticPairAvatar1, _StaticPairAvatar2, _StaticBestAvatar1,
_StaticBestAvatar2
};
_ThemeParticleEffects = new string[] { _ParticleEffectChampion };
}
public override void LoadTheme(string xmlPath)
{
base.LoadTheme(xmlPath);
_Rows = new List<CRankRow>();
for (var i = 0; i < _PartyMode.MaxPlayers; i++)
{
var row = new CRankRow
{
Highlight = GetNewStatic(_Statics[_StaticRowHighlight]),
Avatar = GetNewStatic(_Statics[_StaticRowAvatar]),
Pos = GetNewText(_Texts[_TextRowPos]),
Name = GetNewText(_Texts[_TextRowName]),
Songs = GetNewText(_Texts[_TextRowSongs]),
Average = GetNewText(_Texts[_TextRowAverage])
};
row.Avatar.Aspect = EAspect.Crop;
_AddStatic(row.Highlight);
_AddStatic(row.Avatar);
_AddText(row.Pos);
_AddText(row.Name);
_AddText(row.Songs);
_AddText(row.Average);
_Rows.Add(row);
}
_Statics[_StaticRowHighlight].Visible = false;
_Statics[_StaticRowAvatar].Visible = false;
_Texts[_TextRowPos].Visible = false;
_Texts[_TextRowName].Visible = false;
_Texts[_TextRowSongs].Visible = false;
_Texts[_TextRowAverage].Visible = false;
_Statics[_StaticPairAvatar1].Aspect = EAspect.Crop;
_Statics[_StaticPairAvatar2].Aspect = EAspect.Crop;
_Statics[_StaticBestAvatar1].Aspect = EAspect.Crop;
_Statics[_StaticBestAvatar2].Aspect = EAspect.Crop;
_PairAvatar1Rect = _Statics[_StaticPairAvatar1].Rect;
_LastResultHeight = _Texts[_TextLastResult].Font.Height;
_HarmonyHeight = _Texts[_TextHarmony].Font.Height;
_ChampionHeight = _Texts[_TextChampion].Font.Height;
}
public override bool HandleInput(SKeyEvent keyEvent)
{
base.HandleInput(keyEvent);
if (!keyEvent.KeyPressed)
{
switch (keyEvent.Key)
{
case Keys.Back:
case Keys.Escape:
_OnBack();
break;
case Keys.Enter:
_OnSelect();
break;
}
}
return true;
}
public override bool HandleMouse(SMouseEvent mouseEvent)
{
base.HandleMouse(mouseEvent);
if (mouseEvent.LB && _IsMouseOverCurSelection(mouseEvent))
{
_OnSelect();
}
if (mouseEvent.RB)
{
_OnBack();
}
return true;
}
public override void OnShow()
{
base.OnShow();
_ShowNewResult = _PartyMode.GameData.LastPair != null && _PartyMode.GameData.NumSongsSung != _LastSeenSongs;
_LastSeenSongs = _PartyMode.GameData.NumSongsSung;
_UpdateRanking();
_UpdatePair();
_UpdateBestPair();
_UpdateLastResult();
_AnimTimer.Reset();
_AnimTimer.Start();
_UpdateAnimations();
var started = _PartyMode.GameData.NumSongsSung > 0;
_Buttons[_ButtonBack].Visible = !started;
_Buttons[_ButtonExit].Visible = started;
_Buttons[_ButtonNextRound].Visible = !_PartyMode.IsFinished;
_ShowPopup(false);
if (_PartyMode.IsFinished)
{
_SelectElement(_Buttons[_ButtonExit]);
}
else
{
_SelectElement(_Buttons[_ButtonNextRound]);
}
}
public override bool UpdateGame()
{
_UpdateAnimations();
return true;
}
private void _OnBack()
{
if (_ExitPopupVisible)
{
_ShowPopup(false);
}
else if (_PartyMode.GameData.NumSongsSung == 0)
{
_PartyMode.Back();
}
else if (_PartyMode.IsFinished)
{
_EndParty();
}
else
{
_ShowPopup(true);
}
}
private void _OnSelect()
{
if (_ExitPopupVisible)
{
if (_Buttons[_ButtonPopupYes].Selected)
{
_EndParty();
}
if (_Buttons[_ButtonPopupNo].Selected)
{
_ShowPopup(false);
}
return;
}
if (_Buttons[_ButtonNextRound].Selected && _Buttons[_ButtonNextRound].Visible)
{
_PartyMode.Next();
}
if (_Buttons[_ButtonBack].Selected && _Buttons[_ButtonBack].Visible)
{
_PartyMode.Back();
}
if (_Buttons[_ButtonExit].Selected && _Buttons[_ButtonExit].Visible)
{
if (_PartyMode.IsFinished)
{
_EndParty();
}
else
{
_ShowPopup(true);
}
}
}
private void _EndParty()
{
CBase.Graphics.FadeTo(EScreen.Party);
}
private void _ShowPopup(bool visible)
{
_ExitPopupVisible = visible;
_Statics[_StaticPopupBG].Visible = _ExitPopupVisible;
_Texts[_TextPopupReallyExit].Visible = _ExitPopupVisible;
_Buttons[_ButtonPopupYes].Visible = _ExitPopupVisible;
_Buttons[_ButtonPopupNo].Visible = _ExitPopupVisible;
if (_ExitPopupVisible)
{
_SelectElement(_Buttons[_ButtonPopupNo]);
}
}
private static float _EaseInOut(float t)
{
return t < 0.5f ? 4f * t * t * t : 1f - (float)Math.Pow(-2f * t + 2f, 3) / 2f;
}
private static float _EaseOutBack(float t)
{
const float c1 = 1.70158f;
const float c3 = c1 + 1f;
return 1f + c3 * (float)Math.Pow(t - 1f, 3) + c1 * (float)Math.Pow(t - 1f, 2);
}
private string _GetName(CSwapPlayer player)
{
return CBase.Profiles.GetPlayerName(player.ProfileId);
}
private string _GetPairNames(CSwapPair pair)
{
return _GetName(pair.Players[0]) + " & " + _GetName(pair.Players[1]);
}
private void _UpdateRanking()
{
var ranking = _PartyMode.GetRanking();
var previous = _ShowNewResult ? _PartyMode.GameData.PreviousRanking : ranking;
for (var i = 0; i < _Rows.Count; i++)
{
var row = _Rows[i];
var visible = i < ranking.Count;
row.Player = visible ? _PartyMode.GameData.Players[i] : null;
row.Avatar.Visible = visible;
row.Pos.Visible = visible;
row.Name.Visible = visible;
row.Songs.Visible = visible;
row.Average.Visible = visible;
row.Highlight.Visible = false;
if (!visible)
{
continue;
}
row.NewRank = ranking.IndexOf(row.Player);
row.OldRank = previous.IndexOf(row.Player);
if (row.OldRank < 0)
{
row.OldRank = row.NewRank;
}
row.Avatar.Texture = CBase.Profiles.GetAvatar(row.Player.ProfileId);
row.Name.Text = _GetName(row.Player);
row.Songs.Text = row.Player.NumSongs.ToString();
row.Average.Text = row.Player.Average.ToString("N0");
row.Pos.Text = (row.NewRank + 1) + ".";
row.Highlight.Visible = row.NewRank == 0 && row.Player.NumSongs > 0;
SColorF rankColor;
var color = _Texts[_TextRowName].Color;
if (row.Player.NumSongs > 0 && row.NewRank < _RankColors.Length && CBase.Themes.GetColor(_RankColors[row.NewRank], PartyModeId, out rankColor))
{
color = rankColor;
}
row.Pos.Color = color;
row.Name.Color = color;
}
}
private void _PlaceRow(CRankRow row, float y)
{
row.Highlight.Y = y + (_Texts[_TextRowName].H - row.Highlight.H) / 2;
row.Avatar.Y = y + (_Texts[_TextRowName].H - row.Avatar.H) / 2;
row.Pos.Y = y;
row.Name.Y = y;
row.Songs.Y = y;
row.Average.Y = y;
}
private void _UpdatePair()
{
var finished = _PartyMode.IsFinished;
var pair = _PartyMode.CurrentPair;
var showPair = !finished && pair != null;
_Statics[_StaticPairAvatar2].Visible = showPair;
_Texts[_TextPairName1].Visible = showPair;
_Texts[_TextPairName2].Visible = showPair;
_Texts[_TextAmp].Visible = showPair;
_Texts[_TextTogether].Visible = showPair;
_Texts[_TextPass].Visible = showPair;
var pause = _PartyMode.CurrentBreak;
_Texts[_TextPause].Visible = showPair && pause != null;
if (pause != null)
{
_Texts[_TextPause].Text = CBase.Language.Translate("TR_SCREENMAIN_PAUSE", PartyModeId) + " " + _GetName(pause);
}
_Statics[_StaticPairAvatar1].MaxRect = _PairAvatar1Rect;
_Statics[_StaticPairAvatar1].Visible = showPair || finished;
if (showPair)
{
_Statics[_StaticPairAvatar1].Texture = CBase.Profiles.GetAvatar(pair.Players[0].ProfileId);
_Statics[_StaticPairAvatar2].Texture = CBase.Profiles.GetAvatar(pair.Players[1].ProfileId);
_Texts[_TextPairName1].Text = _GetName(pair.Players[0]);
_Texts[_TextPairName2].Text = _GetName(pair.Players[1]);
var together = _PartyMode.GetTimesTogether(pair.Players[0], pair.Players[1]);
_Texts[_TextTogether].Text = together == 0
? CBase.Language.Translate("TR_SCREENMAIN_FIRST_TIME", PartyModeId)
: CBase.Language.Translate("TR_SCREENMAIN_TIMES_TOGETHER", PartyModeId).Replace("%n", (together + 1).ToString());
_Texts[_TextPass].Text = CBase.Language.Translate("TR_SCREENMAIN_PASS", PartyModeId) + " " + (_PartyMode.GameData.PassIndex + 1) + " / " +
_PartyMode.GameData.Passes.Count + " · " + CBase.Language.Translate("TR_SCREENMAIN_SONG", PartyModeId) + " " +
(_PartyMode.GameData.PairIndex + 1) + " / " + _PartyMode.GameData.Passes[_PartyMode.GameData.PassIndex].Count;
}
_Texts[_TextChampionLabel].Visible = finished;
_Texts[_TextChampion].Visible = finished;
_ParticleEffects[_ParticleEffectChampion].Visible = finished;
if (finished)
{
var champion = _PartyMode.GetRanking()[0];
_Texts[_TextChampion].Text = _GetName(champion);
_Statics[_StaticPairAvatar1].Texture = CBase.Profiles.GetAvatar(champion.ProfileId);
var centerX = (_PairAvatar1Rect.X + _Statics[_StaticPairAvatar2].Rect.X + _Statics[_StaticPairAvatar2].Rect.W) / 2;
_Statics[_StaticPairAvatar1].X = centerX - _PairAvatar1Rect.W / 2;
_Statics[_StaticPairAvatar1].Y = _PairAvatar1Rect.Y + 60f;
}
}
private void _UpdateBestPair()
{
var best = _PartyMode.GameData.BestPair;
var visible = best != null;
_Statics[_StaticBestAvatar1].Visible = visible;
_Statics[_StaticBestAvatar2].Visible = visible;
_Texts[_TextBestNames].Visible = visible;
_Texts[_TextBestScore].Visible = visible;
_Texts[_TextBestLabel].Text = _PartyMode.IsFinished ? "TR_SCREENMAIN_BEST_PAIR_FINAL" : "TR_SCREENMAIN_BEST_PAIR";
if (!visible)
{
return;
}
_Statics[_StaticBestAvatar1].Texture = CBase.Profiles.GetAvatar(best.Players[0].ProfileId);
_Statics[_StaticBestAvatar2].Texture = CBase.Profiles.GetAvatar(best.Players[1].ProfileId);
_Texts[_TextBestNames].Text = _GetPairNames(best);
_Texts[_TextBestScore].Text = best.PairScore.ToString("N0");
}
private void _UpdateLastResult()
{
var last = _PartyMode.GameData.LastPair;
_Texts[_TextLastResult].Visible = last != null && !_PartyMode.IsFinished;
_Texts[_TextHarmony].Visible = last != null && last.Bonus > 0 && !_PartyMode.IsFinished;
if (last == null)
{
return;
}
_Texts[_TextLastResult].Text = CBase.Language.Translate("TR_SCREENMAIN_LAST_SONG", PartyModeId) + " " + _GetPairNames(last) + " · " +
last.PairScore.ToString("N0");
_Texts[_TextHarmony].Text = CBase.Language.Translate("TR_SCREENMAIN_HARMONY_BONUS", PartyModeId) + " +" + last.Bonus;
}
private void _UpdateAnimations()
{
var time = _AnimTimer.ElapsedMilliseconds;
var rankProgress = _ShowNewResult ? _EaseInOut(Math.Max(0f, Math.Min(1f, (time - _RankDelay) / _RankDuration))) : 1f;
foreach (var row in _Rows)
{
if (row.Player == null)
{
continue;
}
var oldY = _FirstRowY + row.OldRank * _RowStep;
var newY = _FirstRowY + row.NewRank * _RowStep;
_PlaceRow(row, oldY + (newY - oldY) * rankProgress);
}
var popScale = _ShowNewResult && time < _PopDuration ? 0.3f + 0.7f * _EaseOutBack(time / _PopDuration) : 1f;
_Texts[_TextLastResult].Font.Height = _LastResultHeight * popScale;
_Texts[_TextHarmony].Font.Height = _HarmonyHeight * popScale;
if (_PartyMode.IsFinished)
{
float scale;
if (time < _PopDuration)
{
scale = 0.3f + 0.7f * _EaseOutBack(time / _PopDuration);
}
else
{
scale = 1f + 0.03f * (float)Math.Sin((time - _PopDuration) / 1000.0 * Math.PI * 1.4);
}
_Texts[_TextChampion].Font.Height = _ChampionHeight * scale;
}
}
}
}
@@ -0,0 +1,74 @@
#region license
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using System.Collections.Generic;
using VocaluxeLib.Menu;
namespace VocaluxeLib.PartyModes.PartnerSwap
{
public class CPartyScreenPartnerSwapNames : CMenuPartyNameSelection
{
protected override int _ScreenVersion
{
get { return 1; }
}
private new CPartyModePartnerSwap _PartyMode;
public override void Init()
{
base.Init();
_PartyMode = (CPartyModePartnerSwap)base._PartyMode;
_AllowChangePlayerNum = false;
_Teams = false;
}
public override void OnShow()
{
base.OnShow();
SetPartyModeData(_PartyMode.GameData.NumPlayer);
while (_PartyMode.GameData.ProfileIds.Count > _NumPlayer)
{
_PartyMode.GameData.ProfileIds.RemoveAt(_PartyMode.GameData.ProfileIds.Count - 1);
}
var ids = new List<Guid>[] { _PartyMode.GameData.ProfileIds };
SetPartyModeProfiles(ids);
}
public override void Back()
{
if (_TeamList.Length == 1)
{
_PartyMode.GameData.ProfileIds = _TeamList[0];
}
_PartyMode.Back();
}
public override void Next()
{
if (_TeamList.Length == 1)
{
_PartyMode.GameData.ProfileIds = _TeamList[0];
}
_PartyMode.Next();
}
}
}
@@ -0,0 +1,66 @@
using VocaluxeLib.Menu;
namespace VocaluxeLib.PartyModes.PartnerSwap
{
class CPartyScreenPartnerSwapSongs : CMenuPartySongSelection
{
protected override int _ScreenVersion
{
get { return 1; }
}
private new CPartyModePartnerSwap _PartyMode;
public override void Init()
{
base.Init();
_PartyMode = (CPartyModePartnerSwap)base._PartyMode;
}
public override void OnShow()
{
Source = _PartyMode.GameData.SongSource;
Sorting = _PartyMode.GameData.Sorting;
Category = _PartyMode.GameData.CategoryIndex;
Playlist = _PartyMode.GameData.PlaylistId;
SongMode = _PartyMode.GameData.GameMode;
NumMedleySongs = _PartyMode.GameData.NumMedleySongs;
base.OnShow();
}
public override void Back()
{
_SaveConfig();
_PartyMode.Back();
}
public override void Next()
{
_SaveConfig();
_PartyMode.Next();
}
public override bool UpdateGame()
{
return true;
}
protected override void _SetAllowedOptions()
{
base._SetAllowedOptions();
AllowedSongModes = new EGameMode[] { EGameMode.TR_GAMEMODE_NORMAL, EGameMode.TR_GAMEMODE_SHORTSONG, EGameMode.TR_GAMEMODE_MEDLEY };
}
private void _SaveConfig()
{
_PartyMode.GameData.SongSource = Source;
_PartyMode.GameData.Sorting = Sorting;
_PartyMode.GameData.CategoryIndex = Category;
_PartyMode.GameData.PlaylistId = Playlist;
_PartyMode.GameData.GameMode = SongMode;
_PartyMode.GameData.NumMedleySongs = NumMedleySongs;
}
}
}
@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">DebugWin</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>VocaluxeLib.PartyModes.PartnerSwap</RootNamespace>
<AssemblyName>PartnerSwap</AssemblyName>
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugWin|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin</OutputPath>
<DefineConstants>TRACE;DEBUG;WIN</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<CodeAnalysisRuleSet>..\..\CheckingRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseWin|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DefineConstants>WIN</DefineConstants>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<Prefer32Bit>false</Prefer32Bit>
<DebugSymbols>true</DebugSymbols>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugLinux|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin</OutputPath>
<DefineConstants>TRACE;DEBUG;LINUX</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseLinux|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<DefineConstants>LINUX</DefineConstants>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<Prefer32Bit>false</Prefer32Bit>
<DebugSymbols>true</DebugSymbols>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'InstallerWin|AnyCPU'">
<OutputPath>bin</OutputPath>
<DefineConstants>WIN</DefineConstants>
<Optimize>true</Optimize>
<PlatformTarget>AnyCPU</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
<DebugType>pdbonly</DebugType>
<DebugSymbols>true</DebugSymbols>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
<ItemGroup>
<Compile Include="CPartyModePartnerSwap.cs" />
<Compile Include="CPartyScreenPartnerSwapConfig.cs" />
<Compile Include="CPartyScreenPartnerSwapMain.cs" />
<Compile Include="CPartyScreenPartnerSwapNames.cs" />
<Compile Include="CPartyScreenPartnerSwapSongs.cs" />
<Compile Include="GlobalSuppressions.cs" />
</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.Windows.Forms" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">if exist "$(SolutionDir)Output\PartyModes\$(TargetName)\Code" rd "$(SolutionDir)Output\PartyModes\$(TargetName)\Code" /S /Q
cd $(SolutionDir)Partymodes\
xcopy "$(ProjectDir)*.cs" "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\" /EXCLUDE:Excludes.txt /I /Y</PostBuildEvent>
<PostBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">rm -rf "$(SolutionDir)Output\PartyModes\$(TargetName)\Code"
mkdir -p "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\"
cp -R $(ProjectDir)*.cs "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\"
rm -f "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\GlobalSuppressions.cs"
</PostBuildEvent>
</PropertyGroup>
</Project>
@@ -0,0 +1,809 @@
<StyleCopSettings Version="105">
<Analyzers>
<Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
<Rules>
<Rule Name="ElementsMustBeDocumented">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PartialElementsMustBeDocumented">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="EnumerationItemsMustBeDocumented">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DocumentationMustContainValidXml">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementDocumentationMustHaveSummary">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PartialElementDocumentationMustHaveSummary">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementDocumentationMustHaveSummaryText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PartialElementDocumentationMustHaveSummaryText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementDocumentationMustNotHaveDefaultSummary">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementParametersMustBeDocumented">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementParameterDocumentationMustMatchElementParameters">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementParameterDocumentationMustDeclareParameterName">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementParameterDocumentationMustHaveText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementReturnValueMustBeDocumented">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementReturnValueDocumentationMustHaveText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="VoidReturnValueMustNotBeDocumented">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="GenericTypeParametersMustBeDocumented">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="GenericTypeParametersMustBeDocumentedPartialClass">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="GenericTypeParameterDocumentationMustMatchTypeParameters">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="GenericTypeParameterDocumentationMustDeclareParameterName">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="GenericTypeParameterDocumentationMustHaveText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PropertySummaryDocumentationMustMatchAccessors">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementDocumentationMustNotBeCopiedAndPasted">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SingleLineCommentsMustNotUseDocumentationStyleSlashes">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DocumentationTextMustNotBeEmpty">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DocumentationTextMustContainWhitespace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DocumentationMustMeetCharacterPercentage">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DestructorSummaryDocumentationMustBeginWithStandardText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DocumentationHeadersMustNotContainBlankLines">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="IncludedDocumentationXPathDoesNotExist">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="IncludeNodeDoesNotContainValidFileAndPath">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="InheritDocMustBeUsedWithInheritingClass">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementDocumentationMustBeSpelledCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileMustHaveHeader">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileHeaderMustShowCopyright">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileHeaderMustHaveCopyrightText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileHeaderMustContainFileName">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileHeaderFileNameDocumentationMustMatchFileName">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileHeaderMustHaveValidCompanyText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileHeaderFileNameDocumentationMustMatchTypeName">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
<Rules>
<Rule Name="FieldNamesMustNotBeginWithUnderscore">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementMustBeginWithUpperCaseLetter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementMustBeginWithLowerCaseLetter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="InterfaceNamesMustBeginWithI">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FieldNamesMustNotUseHungarianNotation">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="VariableNamesMustNotBePrefixed">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FieldNamesMustNotContainUnderscore">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="StaticReadonlyFieldsMustBeginWithUpperCaseLetter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
<Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
<Rules>
<Rule Name="CurlyBracketsForMultiLineStatementsMustNotShareLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="StatementMustNotBeOnSingleLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementMustNotBeOnSingleLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CurlyBracketsMustNotBeOmitted">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingCurlyBracketMustBeFollowedByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SingleLineCommentMustBePrecededByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementsMustBeSeparatedByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
<Analyzer AnalyzerId="StyleCop.CSharp.MaintainabilityRules">
<Rules>
<Rule Name="AccessModifierMustBeDeclared">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FieldsMustBePrivate">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeAnalysisSuppressionMustHaveJustification">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DebugAssertMustProvideMessageText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DebugFailMustProvideMessageText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileMayOnlyContainASingleClass">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="FileMayOnlyContainASingleNamespace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="StatementMustNotUseUnnecessaryParenthesis">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ArithmeticExpressionsMustDeclarePrecedence">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ConditionalExpressionsMustDeclarePrecedence">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="RemoveDelegateParenthesisWhenPossible">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="AttributeConstructorMustNotUseUnnecessaryParenthesis">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="RemoveUnnecessaryCode">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
<Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
<Rules>
<Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementsMustAppearInTheCorrectOrder">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ElementsMustBeOrderedByAccess">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ConstantsMustAppearBeforeFields">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="StaticElementsMustAppearBeforeInstanceElements">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DeclarationKeywordsMustFollowOrder">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ProtectedMustComeBeforeInternal">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PropertyAccessorsMustFollowOrder">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="EventAccessorsMustFollowOrder">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
<Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
<Rules>
<Rule Name="CommentsMustContainText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PrefixLocalCallsWithThis">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PrefixCallsCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ParameterListMustFollowDeclaration">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ParameterMustFollowComma">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ParameterMustNotSpanMultipleLines">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="QueryClauseMustFollowPreviousClause">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="QueryClausesMustBeOnSeparateLinesOrAllOnOneLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="QueryClausesSpanningMultipleLinesMustBeginOnOwnLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DoNotPlaceRegionsWithinElements">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeMustNotContainEmptyStatements">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeMustNotContainMultipleStatementsOnOneLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="BlockStatementsMustNotContainEmbeddedComments">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="BlockStatementsMustNotContainEmbeddedRegions">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="UseStringEmptyForEmptyStrings">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="UseBuiltInTypeAlias">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="UseShorthandForNullableTypes">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
<Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
<Rules>
<Rule Name="KeywordsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CommasMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SemicolonsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SymbolsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DocumentationLinesMustBeginWithSingleSpace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="SingleLineCommentsMustBeginWithSingleSpace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PreprocessorKeywordsMustNotBePrecededBySpace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OperatorKeywordMustBeFollowedBySpace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningParenthesisMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingParenthesisMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningSquareBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingSquareBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningCurlyBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingCurlyBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningGenericBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingGenericBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="OpeningAttributeBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ClosingAttributeBracketsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="NullableTypeSymbolsMustNotBePrecededBySpace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="MemberAccessSymbolsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="IncrementDecrementSymbolsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="NegativeSignsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="PositiveSignsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ColonsMustBeSpacedCorrectly">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeMustNotContainMultipleWhitespaceInARow">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="TabsMustNotBeUsed">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
</Analyzers>
</StyleCopSettings>
+23
View File
@@ -7,6 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocalu
{7B2E4A19-5C3D-4E8F-A16B-2D9C0F3E8B41} = {7B2E4A19-5C3D-4E8F-A16B-2D9C0F3E8B41}
{55F89808-4E79-4FFE-BC13-48258913F5C9} = {55F89808-4E79-4FFE-BC13-48258913F5C9}
{6F3E1874-F28A-40E9-AFBD-31934D593679} = {6F3E1874-F28A-40E9-AFBD-31934D593679}
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53} = {9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}
{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC} = {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}
{5A4053F1-5AD5-441F-B254-D97A088127B6} = {5A4053F1-5AD5-441F-B254-D97A088127B6}
{54A48AF7-515C-4EDD-B395-2BFFA096050A} = {54A48AF7-515C-4EDD-B395-2BFFA096050A}
@@ -14,6 +15,8 @@ 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}") = "PartyModePartnerSwap", "PartyModes\PartyModePartnerSwap\PartyModePartnerSwap.csproj", "{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}"
EndProject
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}"
@@ -80,6 +83,26 @@ Global
{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU
{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU
{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugLinux|x86.Build.0 = DebugLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugWin|x64.Build.0 = DebugWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.DebugWin|x86.Build.0 = DebugWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.InstallerWin|x64.ActiveCfg = InstallerWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.InstallerWin|x64.Build.0 = InstallerWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.InstallerWin|x86.ActiveCfg = InstallerWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.InstallerWin|x86.Build.0 = InstallerWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseLinux|x86.Build.0 = ReleaseLinux|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU
{9D4F1C27-3B8E-4A62-B5D0-7E1A2C6F9B53}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU
{6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU
{6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU
{6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU