From 2478e4959f08b82e9a3baa949d6fcf0833948a98 Mon Sep 17 00:00:00 2001 From: brunzelchen Date: Mon, 18 Apr 2011 18:11:28 +0000 Subject: added new sing mode: sing together (mean points over all players) git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2823 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/UMain.pas | 72 ++++++++++++++++++++++++++++------ Game/Code/Screens/UScreenScore.pas | 2 +- Game/Code/Screens/UScreenSing.pas | 25 +++++++++++- Game/Code/Screens/UScreenSong.pas | 16 ++++++-- Game/Code/Screens/UScreenSongMenu.pas | 39 +++++++++++++++++- Game/Code/UltraStar.dpr | 2 +- Game/Output/Languages/Dutch.ini | 7 +--- Game/Output/Languages/English.ini | 2 + Game/Output/Languages/German.ini | 2 + Game/Output/Languages/Italian.ini | 5 +-- Game/Output/Languages/Languages.xls | Bin 253440 -> 261632 bytes Game/Output/Languages/Magyar.ini | 2 + Game/Output/Languages/Polish.ini | 2 + Installer/settings/variables.nsh | 2 +- 14 files changed, 148 insertions(+), 30 deletions(-) diff --git a/Game/Code/Classes/UMain.pas b/Game/Code/Classes/UMain.pas index bc3ac1b0..347f92bc 100644 --- a/Game/Code/Classes/UMain.pas +++ b/Game/Code/Classes/UMain.pas @@ -96,6 +96,7 @@ var // gracz i jego nuty Player: array of TPlayer; + MeanPlayer: TPLayer; PlayersPlay: integer; PlaylistMedley: TMedleyPlaylist; @@ -112,6 +113,7 @@ procedure NewNote(P: integer; Sender: TScreenSing); // detect note function GetMidBeat(Time: real): real; function GetTimeFromBeat(Beat: integer): real; procedure ClearScores(PlayerNum: integer); +procedure ClearMeanScore(); implementation uses USongs, Math, UCommandLine, UVideo, UWebCam; @@ -627,26 +629,56 @@ begin begin // add points without LineBonus case Czesci[P].Czesc[S].Nuta[Pet].Wartosc of - 1: Player[CP].Score := Player[CP].Score + 10000 / Czesci[P].Wartosc * + 1: begin + Player[CP].Score := Player[CP].Score + 10000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[Pet].Wartosc; - 2: Player[CP].ScoreGolden := Player[CP].ScoreGolden + 10000 / Czesci[P].Wartosc * + MeanPlayer.Score := MeanPlayer.Score + (10000 / Czesci[P].Wartosc * + Czesci[P].Czesc[S].Nuta[Pet].Wartosc) / PlayersPlay; + end; + 2: begin + Player[CP].ScoreGolden := Player[CP].ScoreGolden + 10000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[Pet].Wartosc; + MeanPlayer.ScoreGolden := MeanPlayer.ScoreGolden + (10000 / Czesci[P].Wartosc * + Czesci[P].Czesc[S].Nuta[Pet].Wartosc) / PlayersPlay; + end; end; end else begin // add points with Line Bonus case Czesci[P].Czesc[S].Nuta[Pet].Wartosc of - 1: Player[CP].Score := Player[CP].Score + 9000 / Czesci[P].Wartosc * + 1: begin + Player[CP].Score := Player[CP].Score + 9000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[Pet].Wartosc; - 2: Player[CP].ScoreGolden := Player[CP].ScoreGolden + 9000 / Czesci[P].Wartosc * + MeanPlayer.Score := MeanPlayer.Score + (9000 / Czesci[P].Wartosc * + Czesci[P].Czesc[S].Nuta[Pet].Wartosc) / PlayersPlay; + end; + 2: begin + Player[CP].ScoreGolden := Player[CP].ScoreGolden + 9000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[Pet].Wartosc; + MeanPlayer.ScoreGolden := MeanPlayer.ScoreGolden + (9000 / Czesci[P].Wartosc * + Czesci[P].Czesc[S].Nuta[Pet].Wartosc) / PlayersPlay; + end; end; end; - Player[CP].ScoreI := Floor(Player[CP].Score / 10) * 10; - Player[CP].ScoreGoldenI := Floor(Player[CP].ScoreGolden / 10) * 10; + MeanPlayer.ScoreI := Floor(MeanPlayer.Score / 10) * 10; + MeanPlayer.ScoreGoldenI := Floor(MeanPlayer.ScoreGolden / 10) * 10; - Player[CP].ScoreTotalI := Player[CP].ScoreI + Player[CP].ScoreGoldenI + Player[CP].ScoreLineI; + MeanPlayer.ScoreTotalI := MeanPlayer.ScoreI + MeanPlayer.ScoreGoldenI + MeanPlayer.ScoreLineI; + + if ScreenSong.SingTogether then + begin + Player[CP].ScoreI := MeanPlayer.ScoreI; + Player[CP].ScoreGoldenI := MeanPlayer.ScoreGoldenI; + + Player[CP].ScoreTotalI := MeanPlayer.ScoreTotalI; + end else + begin + Player[CP].ScoreI := Floor(Player[CP].Score / 10) * 10; + Player[CP].ScoreGoldenI := Floor(Player[CP].ScoreGolden / 10) * 10; + + Player[CP].ScoreTotalI := Player[CP].ScoreI + Player[CP].ScoreGoldenI + Player[CP].ScoreLineI; + end; end; end; // operowanie end; @@ -943,7 +975,6 @@ begin Player[PlayerNum].ScoreGoldenI := 0; Player[PlayerNum].ScoreTotalI := 0; - //SingBar Mod Player[PlayerNum].ScoreLast := 0; Player[PlayerNum].ScorePercent := 50;// Sets to 50% when song starts @@ -955,10 +986,29 @@ begin //PhrasenBonus - Line Bonus Mod Player[PlayerNum].LineBonus_Visible := False; //Hide Line Bonus Player[PlayerNum].LineBonus_Alpha := 0; - //Player[PlayerNum].LineBonus_TargetX := 70 + PlayerNum*500; //will be done by onShow - //Player[PlayerNum].LineBonus_TargetY := 30; //will be done by onShow - //PhrasenBonus - Line Bonus Mod End +end; + +procedure ClearMeanScore(); +begin + MeanPlayer.Score := 0; + MeanPlayer.ScoreI := 0; + MeanPlayer.ScoreLine := 0; + MeanPlayer.ScoreLineI := 0; + MeanPlayer.ScoreGolden := 0; + MeanPlayer.ScoreGoldenI := 0; + MeanPlayer.ScoreTotalI := 0; + //SingBar Mod + MeanPlayer.ScoreLast := 0; + MeanPlayer.ScorePercent := 50;// Sets to 50% when song starts + MeanPlayer.ScorePercentTarget := 50;// Sets to 50% when song starts + //end SingBar Mod + + MeanPlayer.ScoreMax := 9990; + + //PhrasenBonus - Line Bonus Mod + MeanPlayer.LineBonus_Visible := False; //Hide Line Bonus + MeanPlayer.LineBonus_Alpha := 0; end; end. diff --git a/Game/Code/Screens/UScreenScore.pas b/Game/Code/Screens/UScreenScore.pas index 149541a2..05983f6e 100644 --- a/Game/Code/Screens/UScreenScore.pas +++ b/Game/Code/Screens/UScreenScore.pas @@ -130,7 +130,7 @@ begin Music.VoicesClose; FadeTo(@ScreenPartyNewRoundM2); - end else if (ScreenSong.Mode <> smMedley) and not AktSong.isDuet then + end else if (ScreenSong.Mode <> smMedley) and not AktSong.isDuet and not ScreenSong.SingTogether then FadeTo(@ScreenTop) else begin diff --git a/Game/Code/Screens/UScreenSing.pas b/Game/Code/Screens/UScreenSing.pas index 4d1b918c..9ea55e95 100644 --- a/Game/Code/Screens/UScreenSing.pas +++ b/Game/Code/Screens/UScreenSing.pas @@ -1560,6 +1560,8 @@ begin for P := 0 to High(Player) do ClearScores(P); + ClearMeanScore(); + // fill texts LyricMain[0].AddCzesc(0, 0); LyricMain[0].Selected := -1; @@ -2293,6 +2295,8 @@ begin end else if(ScreenSong.Mode = smNormal) then begin singmode := 'Normal'; + if ScreenSong.SingTogether then + singmode := singmode + ' (Sing together)'; if AktSong.isDuet then singmode := singmode + ' (Duet)'; end; @@ -2496,12 +2500,29 @@ begin //PhrasenBonus give Points if (Length(Czesci[CP].Czesc) - NumEmptySentences[CP])>0 then + begin Player[I].ScoreLine := Player[I].ScoreLine + (1000 / (Length(Czesci[CP].Czesc) - NumEmptySentences[CP]) * A / 8); - Player[I].ScoreLineI := Round(Player[I].ScoreLine / 10) * 10; + MeanPlayer.ScoreLine := MeanPlayer.ScoreLine + + (1000 / (Length(Czesci[CP].Czesc) - NumEmptySentences[CP]) * A / 8); + end; + + MeanPlayer.ScoreLineI := Round(MeanPlayer.ScoreLine / 10) * 10; //Update Total Score - Player[I].ScoreTotalI := Player[I].ScoreI + Player[I].ScoreGoldenI + Player[I].ScoreLineI; + MeanPlayer.ScoreTotalI := MeanPlayer.ScoreI + MeanPlayer.ScoreGoldenI + MeanPlayer.ScoreLineI; + + if ScreenSong.SingTogether then + begin + Player[I].ScoreLineI := MeanPlayer.ScoreLineI; + //Update Total Score + Player[I].ScoreTotalI := MeanPlayer.ScoreTotalI; + end else + begin + Player[I].ScoreLineI := Round(Player[I].ScoreLine / 10) * 10; + //Update Total Score + Player[I].ScoreTotalI := Player[I].ScoreI + Player[I].ScoreGoldenI + Player[I].ScoreLineI; + end; //Color Case Floor(A) of diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas index aa3c2bf9..aab46786 100644 --- a/Game/Code/Screens/UScreenSong.pas +++ b/Game/Code/Screens/UScreenSong.pas @@ -119,7 +119,8 @@ type PartyPlayed: array of integer; //played in Party Classic MedleyPlayed: array of integer; //played in Challenge or Classic Medley-mode - SungToEnd: boolean; //Song was sung to the end? + SungToEnd: boolean; //Song was sung to the end? + SingTogether: boolean; //Calc mean score //party Statics (Joker) StaticTeam1Joker1: Cardinal; @@ -774,8 +775,16 @@ begin CatSongs.Selected := Interaction; //Do the Action that is specified in Ini case Ini.OnSongClick of - 0: StartSong; - 1: SelectPlayers; + 0: begin + if (SDL_ModState = KMOD_LCTRL) then + SingTogether := true; + StartSong; + end; + 1: begin + if (SDL_ModState = KMOD_LCTRL) then + SingTogether := true; + SelectPlayers; + end; 2:begin if (TargetVidVis = full) then begin @@ -2024,6 +2033,7 @@ begin FadeOut := false; SungToEnd := false; + SingTogether := false; if Mode = smMedley then Mode := smNormal; diff --git a/Game/Code/Screens/UScreenSongMenu.pas b/Game/Code/Screens/UScreenSongMenu.pas index e209a176..98e8a49c 100644 --- a/Game/Code/Screens/UScreenSongMenu.pas +++ b/Game/Code/Screens/UScreenSongMenu.pas @@ -26,6 +26,7 @@ const SM_Main = 1; SM_Song = 8 or 1; + SM_Song_Play = 8 or 2; SM_Medley = 16 or 1; @@ -359,6 +360,22 @@ begin Button[3].Text[0].Text := Language.Translate('SONG_MENU_EDIT'); end; + SM_Song_Play: + begin + ID := 'ID_032'; + CurMenu := sMenu; + Text[0].Text := Language.Translate('SONG_MENU_PLAY'); + + Button[0].Visible := True; + Button[1].Visible := not CatSongs.Song[ScreenSong.Interaction].isDuet; + Button[2].Visible := False; + Button[3].Visible := False; + SelectsS[0].Visible := False; + + Button[0].Text[0].Text := Language.Translate('SONG_MENU_PLAY'); + Button[1].Text[0].Text := Language.Translate('SONG_MENU_PLAY_TOGETHER'); + end; + SM_Medley: begin ID := 'ID_032'; @@ -629,8 +646,7 @@ begin Case Interaction of 0: //Button 1 begin - ScreenSong.StartSong; - Visible := False; + MenuShow(SM_Song_Play); end; 1: //Button 2 @@ -659,6 +675,25 @@ begin end; end; + SM_Song_Play: + begin + Case Interaction of + 0: //Button 1 + begin + ScreenSong.StartSong; + Visible := False; + end; + + 1: //Button 2 + begin + //Select New Players then Sing: + ScreenSong.SingTogether := true; + ScreenSong.StartSong; + Visible := False; + end; + end; + end; + SM_Medley: begin Case Interaction of diff --git a/Game/Code/UltraStar.dpr b/Game/Code/UltraStar.dpr index 21cbb978..65b57829 100644 --- a/Game/Code/UltraStar.dpr +++ b/Game/Code/UltraStar.dpr @@ -123,7 +123,7 @@ uses const VersionName = 'UltraStar Deluxe Challenge, Medley & Duet Edition'; - VersionNumber = 'r9.17'; + VersionNumber = 'r9.19'; var WndTitle: string; diff --git a/Game/Output/Languages/Dutch.ini b/Game/Output/Languages/Dutch.ini index 4d492b1b..83a2d21b 100644 --- a/Game/Output/Languages/Dutch.ini +++ b/Game/Output/Languages/Dutch.ini @@ -118,17 +118,13 @@ PLUGIN_MEDLEYSURPRISEBLIND_DESC = Up to 5 songs medley blind, only selecting the PLUGIN_MEDLEYSURPRISEBLIND_NAME = Medley Surprise 2 PLUGIN_MEHRALS500_DESC = Um zu gewinnen, muss man am Ende mindestens 500 Punkte Vorsprung haben. PLUGIN_MEHRALS500_NAME = Sieg 500+ -PLUGIN_MORE1000_DESC = Ziel: 1000 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE1000_DESC = Loop meer dan 1000 punten voor. -PLUGIN_MORE1000_NAME = PLUGIN_MORE1000_NAME = Meer dan 1000 PLUGIN_MORE2000_DESC = Ziel: 2000 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE2000_NAME = 2K Vorsprung PLUGIN_MORE3000_DESC = Ziel: 3000 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE3000_NAME = 3K Vorsprung -PLUGIN_MORE500_DESC = Ziel: 500 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE500_DESC = Loop meer dan 500 punten voor. -PLUGIN_MORE500_NAME = PLUGIN_MORE500_NAME = Meer dan 500 PLUGIN_MORETHAN1000_DESC = Wer mehr als 1000 Punkte zurückliegt, fliegt raus. PLUGIN_MORETHAN1000_NAME = Rückstand 1K @@ -315,6 +311,7 @@ SONG_MENU_NAME_PLAYLIST_LOAD = Speellijst openen SONG_MENU_NAME_PLAYLIST_NEW = Nieuwe speellijst SONG_MENU_NO = Nee SONG_MENU_PLAY = Zing +SONG_MENU_PLAY_TOGETHER = Sing together SONG_MENU_PLAYLIST_ADD = Nummer toevoegen SONG_MENU_PLAYLIST_ADD_EXISTING = Afsluiten speellijst SONG_MENU_PLAYLIST_ADD_NEW = Nieuwe speellijst @@ -359,4 +356,4 @@ STAT_PREV = Vorige pagina STAT_REVERSE = Anders om VIDEO_ASPECT_CROP = Inkrimpen VIDEO_ASPECT_LETTER_BOX = Letter Box -VIDEO_ASPECT_STRETCH = Uitrekken +VIDEO_ASPECT_STRETCH = Uitrekken \ No newline at end of file diff --git a/Game/Output/Languages/English.ini b/Game/Output/Languages/English.ini index 694b5316..6c4bf7cd 100644 --- a/Game/Output/Languages/English.ini +++ b/Game/Output/Languages/English.ini @@ -311,6 +311,7 @@ SONG_MENU_NAME_PLAYLIST_LOAD = Open Playlist SONG_MENU_NAME_PLAYLIST_NEW = New Playlist SONG_MENU_NO = No SONG_MENU_PLAY = Sing +SONG_MENU_PLAY_TOGETHER = Sing together SONG_MENU_PLAYLIST_ADD = Add Song SONG_MENU_PLAYLIST_ADD_EXISTING = to existing playlist SONG_MENU_PLAYLIST_ADD_NEW = to new playlist @@ -1245,6 +1246,7 @@ Description = Scroll through the sorted songs or use the search function to find #-------------------------------------------------------# SEC_001 = General RETURN = Sing selected song +CTRL_RETURN = Sing selected song together (mean points over all players) TAB = Toggle help PRINT = Take screenshot BACKSPACE = Back to Main Menu diff --git a/Game/Output/Languages/German.ini b/Game/Output/Languages/German.ini index 9287bd57..31a68fa2 100644 --- a/Game/Output/Languages/German.ini +++ b/Game/Output/Languages/German.ini @@ -311,6 +311,7 @@ SONG_MENU_NAME_PLAYLIST_LOAD = Playlist SONG_MENU_NAME_PLAYLIST_NEW = Neue Playlist SONG_MENU_NO = Nein SONG_MENU_PLAY = Singen +SONG_MENU_PLAY_TOGETHER = Zusammen Singen SONG_MENU_PLAYLIST_ADD = Song zu Playlist hinzufügen SONG_MENU_PLAYLIST_ADD_EXISTING = Zu existierender Playlist SONG_MENU_PLAYLIST_ADD_NEW = Zu neuer Playlist @@ -1245,6 +1246,7 @@ Description = Hier werden alle vorhandenen Lieder f #-------------------------------------------------------# SEC_001 = Allgemein RETURN = Gewähltes Lied singen +CTRL_RETURN = Gewähltes Lied zusammen singen (Mittelwert der Punkte über alle Spieler) TAB = Hilfe öffnen/schließen PRINT = Screenshot erstellen BACKSPACE = zurück diff --git a/Game/Output/Languages/Italian.ini b/Game/Output/Languages/Italian.ini index af8d5d72..c1e74147 100644 --- a/Game/Output/Languages/Italian.ini +++ b/Game/Output/Languages/Italian.ini @@ -118,17 +118,13 @@ PLUGIN_MEDLEYSURPRISEBLIND_DESC = Up to 5 songs medley blind, only selecting the PLUGIN_MEDLEYSURPRISEBLIND_NAME = Medley Surprise 2 PLUGIN_MEHRALS500_DESC = Um zu gewinnen, muss man am Ende mindestens 500 Punkte Vorsprung haben. PLUGIN_MEHRALS500_NAME = Sieg 500+ -PLUGIN_MORE1000_DESC = Ziel: 1000 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE1000_DESC = Avanza di 1000 punti in più dell'altro. -PLUGIN_MORE1000_NAME = PLUGIN_MORE1000_NAME = Più di 1000 PLUGIN_MORE2000_DESC = Ziel: 2000 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE2000_NAME = 2K Vorsprung PLUGIN_MORE3000_DESC = Ziel: 3000 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE3000_NAME = 3K Vorsprung -PLUGIN_MORE500_DESC = Ziel: 500 Punkte Vorsprung zum Sieg. Ansonsten gewinnt höchste Punktzahl. PLUGIN_MORE500_DESC = Avanza di 500 punti in più dell'altro. -PLUGIN_MORE500_NAME = PLUGIN_MORE500_NAME = Più di 500 PLUGIN_MORETHAN1000_DESC = Wer mehr als 1000 Punkte zurückliegt, fliegt raus. PLUGIN_MORETHAN1000_NAME = Rückstand 1K @@ -315,6 +311,7 @@ SONG_MENU_NAME_PLAYLIST_LOAD = Apri playlist SONG_MENU_NAME_PLAYLIST_NEW = Nuova playlist SONG_MENU_NO = No SONG_MENU_PLAY = Canta +SONG_MENU_PLAY_TOGETHER = Sing together SONG_MENU_PLAYLIST_ADD = Aggiungi canzone SONG_MENU_PLAYLIST_ADD_EXISTING = Playlist esistente SONG_MENU_PLAYLIST_ADD_NEW = Nuova playlist diff --git a/Game/Output/Languages/Languages.xls b/Game/Output/Languages/Languages.xls index 8244099d..2a05463f 100644 Binary files a/Game/Output/Languages/Languages.xls and b/Game/Output/Languages/Languages.xls differ diff --git a/Game/Output/Languages/Magyar.ini b/Game/Output/Languages/Magyar.ini index 1b4824ff..58056999 100644 --- a/Game/Output/Languages/Magyar.ini +++ b/Game/Output/Languages/Magyar.ini @@ -311,6 +311,7 @@ SONG_MENU_NAME_PLAYLIST_LOAD = Lista megnyit SONG_MENU_NAME_PLAYLIST_NEW = Új lista SONG_MENU_NO = Nem SONG_MENU_PLAY = Éneklés +SONG_MENU_PLAY_TOGETHER = Sing together SONG_MENU_PLAYLIST_ADD = Dal hozzáadása SONG_MENU_PLAYLIST_ADD_EXISTING = meglévõ listához SONG_MENU_PLAYLIST_ADD_NEW = új listához @@ -1245,6 +1246,7 @@ Description = A rendez #-------------------------------------------------------# SEC_001 = Általános RETURN = A jelenlegi dal kiválasztása éneklésre +CTRL_RETURN = Sing selected song together (mean points over all players) TAB = Segítség ki/bekapcsolása PRINT = Képlopás BACKSPACE = Vissza a fõmenübe diff --git a/Game/Output/Languages/Polish.ini b/Game/Output/Languages/Polish.ini index b8a4a22d..f4bbf6ee 100644 --- a/Game/Output/Languages/Polish.ini +++ b/Game/Output/Languages/Polish.ini @@ -315,6 +315,7 @@ SONG_MENU_NAME_PLAYLIST_LOAD = Otw SONG_MENU_NAME_PLAYLIST_NEW = Nowa playlista SONG_MENU_NO = Nie SONG_MENU_PLAY = Œpiewaj +SONG_MENU_PLAY_TOGETHER = Sing together SONG_MENU_PLAYLIST_ADD = Dodaj piosenkê SONG_MENU_PLAYLIST_ADD_EXISTING = Istniej¹ca playlista SONG_MENU_PLAYLIST_ADD_NEW = Nowa playlista @@ -1236,6 +1237,7 @@ Description = Poruszaj #-------------------------------------------------------# SEC_001 = Podstawowe skróty RETURN = Wybierz piosenkê +CTRL_RETURN = Sing selected song together (mean points over all players) TAB = Podrêczna pomoc PRINT = Zrzut ekranu BACKSPACE = Powrót do Menu g³ównego diff --git a/Installer/settings/variables.nsh b/Installer/settings/variables.nsh index 5507732f..c9cbf87e 100644 --- a/Installer/settings/variables.nsh +++ b/Installer/settings/variables.nsh @@ -1,7 +1,7 @@ ; These are the common used variables ; for the USdx Challenge, Medley & Duet Edition Installation Wizard -!define version "r9.17" ; Current version of UltraStar Deluxe Challenge, Medley & Duet Edition +!define version "r9.19" ; Current version of UltraStar Deluxe Challenge, Medley & Duet Edition !define p_name "UltraStar Deluxe CMD Edition" ; Just the name of the program !define publisher "USDX Team" ; Publisher !define homepage "http://www.ultrastardeluxe.org/" ; Project Homepage -- cgit v1.2.3