aboutsummaryrefslogtreecommitdiffstats
path: root/game
diff options
context:
space:
mode:
authors_alexander <s_alexander@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-01-12 19:15:46 +0000
committers_alexander <s_alexander@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-01-12 19:15:46 +0000
commit8163ee219fbde2eb2508d57c8c1498e66df9db0d (patch)
tree968453d97f4df43a8c1112773928ff05598f2862 /game
parent067a9f3484d6abae175453acb28bd556e0f570a4 (diff)
downloadusdx-8163ee219fbde2eb2508d57c8c1498e66df9db0d.tar.gz
usdx-8163ee219fbde2eb2508d57c8c1498e66df9db0d.tar.xz
usdx-8163ee219fbde2eb2508d57c8c1498e66df9db0d.zip
added previous ignored plugins
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2073 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'game')
-rw-r--r--game/.gitignore1
-rw-r--r--game/plugins/5000points.usdx48
-rw-r--r--game/plugins/PluginDescription.odtbin0 -> 18417 bytes
-rw-r--r--game/plugins/blind.usdx27
-rw-r--r--game/plugins/duel.usdx15
-rw-r--r--game/plugins/hooks.txt5
-rw-r--r--game/plugins/teamduel.usdx230
7 files changed, 325 insertions, 1 deletions
diff --git a/game/.gitignore b/game/.gitignore
index eed4f3f0..487210c1 100644
--- a/game/.gitignore
+++ b/game/.gitignore
@@ -1,5 +1,4 @@
playlists
-plugins
screenshots
songs
config.ini
diff --git a/game/plugins/5000points.usdx b/game/plugins/5000points.usdx
new file mode 100644
index 00000000..7ebd23b4
--- /dev/null
+++ b/game/plugins/5000points.usdx
@@ -0,0 +1,48 @@
+function plugin_init()
+ register('party mode: 5000points', '1.00', 'USDX Team', 'http://www.UltrastarDeluxe.org');
+
+ require('Usdx.Party')
+ require('Usdx.ScreenSing');
+
+ local Mode = {}
+
+ Mode.Name = '5000points'
+ Mode.CanNonParty = true;
+ Mode.CanParty = true;
+ Mode.OnSing = 'Sing';
+ Mode.AfterSing = 'Calculate_Winner';
+
+ Usdx.Party.Register(Mode)
+
+ return true;
+end
+
+function Sing()
+ Scores = ScreenSing.GetScores();
+
+ for i = 1, #Scores do
+ if (Scores[i] >= 5000) then
+ ScreenSing.Finish();
+ break;
+ end
+ end
+
+ return true;
+end
+
+function Calculate_Winner()
+ Scores = Scores or ScreenSing.GetScores();
+ local Ranking = {};
+ for i = 1, #Scores do
+ if Scores[i] >= 5000 then
+ Ranking[i] = 1
+ else
+ Ranking[i] = #Scores
+ end
+ end
+
+ Party.SetRoundRanking(Ranking);
+ Scores = nil;
+
+ return true;
+end \ No newline at end of file
diff --git a/game/plugins/PluginDescription.odt b/game/plugins/PluginDescription.odt
new file mode 100644
index 00000000..476e5113
--- /dev/null
+++ b/game/plugins/PluginDescription.odt
Binary files differ
diff --git a/game/plugins/blind.usdx b/game/plugins/blind.usdx
new file mode 100644
index 00000000..2d2ce44e
--- /dev/null
+++ b/game/plugins/blind.usdx
@@ -0,0 +1,27 @@
+function plugin_init()
+ register('party mode: blind', '1.00', 'USDX Team', 'http://www.UltrastarDeluxe.org');
+
+ require('Usdx.Party')
+ require('Usdx.ScreenSing')
+
+ local Mode = {}
+
+ Mode.Name = 'Blind'
+ Mode.CanNonParty = true;
+ Mode.CanParty = true;
+
+ Mode.BeforeSing = 'BeforeSing';
+
+ Usdx.Party.Register(Mode)
+
+ return true;
+end
+
+function BeforeSing()
+ local Settings = {};
+ Settings['NotesVisible'] = {}; -- notes hidden for every player
+
+ ScreenSing.SetSettings(Settings);
+
+ return true;
+end \ No newline at end of file
diff --git a/game/plugins/duel.usdx b/game/plugins/duel.usdx
new file mode 100644
index 00000000..63fefc8f
--- /dev/null
+++ b/game/plugins/duel.usdx
@@ -0,0 +1,15 @@
+function plugin_init()
+ register('party mode: duel', '1.00', 'USDX Team', 'http://www.UltrastarDeluxe.org');
+
+ require('Usdx.Party')
+
+ local Mode = {}
+
+ Mode.Name = 'Duel'
+ Mode.CanNonParty = true;
+ Mode.CanParty = true;
+
+ Usdx.Party.Register(Mode)
+
+ return true;
+end \ No newline at end of file
diff --git a/game/plugins/hooks.txt b/game/plugins/hooks.txt
new file mode 100644
index 00000000..7a91643d
--- /dev/null
+++ b/game/plugins/hooks.txt
@@ -0,0 +1,5 @@
+this document lists all hooks that are available and created by usdx
+Usdx.LoadingFinished - called when all plugins are loaded, not breakable
+Display.PreDraw - called before a frame is Drawn - not breakable
+Display.Draw - called after a frame w/ screen is drawn. you can draw above screen here
+ScreenSing.SongLoaded - called after a song is loaded to ScreenSing in OnShow, not breakable \ No newline at end of file
diff --git a/game/plugins/teamduel.usdx b/game/plugins/teamduel.usdx
new file mode 100644
index 00000000..844e53b0
--- /dev/null
+++ b/game/plugins/teamduel.usdx
@@ -0,0 +1,230 @@
+-- some values to adjust the creation of PlayerChanges
+local MinPercentage = 0.06; -- minimal amount of points between changes (in percent)
+local MaxPercentage = 0.12; -- maximal amount of points between changes (in percent)
+-- position of big progress bar in the center
+local BarPos = {};
+BarPos.Top = 30
+BarPos.Bottom = 50
+BarPos.Left = 300
+BarPos.Right = 500
+
+function plugin_init()
+ register('party mode: teamduel', '1.00', 'USDX Team', 'http://www.UltrastarDeluxe.org');
+
+ require('math', 'Usdx.Party', 'Usdx.ScreenSing', 'Usdx.Gl', 'Usdx.TextGl');
+ local Mode = {}
+
+ Mode.Name = 'teamduel';
+ Mode.CanParty = true;
+ Mode.PlayerCount = {2,3,4,5,6};
+
+ Mode.BeforeSing = 'BeforeSing'
+ Mode.OnSing = 'Sing';
+
+ Usdx.Party.Register(Mode)
+
+ ScreenSing.GetBeat();
+
+ return true;
+end
+
+-- called everytime a singing session w/ this party mode is startet
+-- we just hook ScreenSing.SongLoaded to prepare the mic changes here
+function BeforeSing()
+ hSongLoaded = Usdx.Hook('ScreenSing.SongLoaded', 'PrepareChanges');
+end;
+
+-- adds a new SentenceChange at Line to the PlayerChanges array
+function AddChange(Line)
+ PlayerChanges[#PlayerChanges + 1] = {};
+ PlayerChanges[#PlayerChanges].OnBeat = Lines[Line].Start;
+
+ PlayerChanges[#PlayerChanges].NextPlayer = {}
+ for i = 1, #Teams do
+ repeat
+ PlayerChanges[#PlayerChanges].NextPlayer[i] = math.random(#Teams[i].Players);
+ until (1 == #PlayerChanges) or (PlayerChanges[#PlayerChanges].NextPlayer[i] ~= PlayerChanges[#PlayerChanges-1].NextPlayer[i]) or (#Teams[i].Players == 1);
+ end;
+end;
+
+function PrepareChanges()
+ Lines = ScreenSing.GetSongLines();
+ Teams = Party.GetTeams();
+
+ -- get sum of hittable beats (per line and total)
+ local TotalBeats = 0;
+ local LineValue = {};
+ for i = 1, #Lines do
+ for j = 1, #Lines[i].Notes do
+ LineValue[i] = (LineValue[i] or 0) + Lines[i].Notes[j].Length * Lines[i].Notes[j].NoteType;
+ end;
+ TotalBeats = TotalBeats + LineValue[i];
+ end;
+
+ -- calculate changes
+ PlayerChanges = {};
+ -- fallback if there are only freestyle notes
+ -- random count of lines between changes
+ if (TotalBeats == 0) then
+ local i = 1;
+ repeat
+ if i > 1 then
+ AddChange(i);
+ end
+
+ local step = math.ceil((MinPercentage + (MaxPercentage - MinPercentage) * math.random()) * #Lines);
+ if step < 1 then
+ step = 1;
+ end;
+
+ i = i + step;
+ until i >= #Lines;
+ else -- calculate changes by amount of hittable beats
+ local i = 1;
+ local BeatsToChange = math.ceil((MinPercentage + (MaxPercentage - MinPercentage) * math.random()) * TotalBeats);
+ local Beats = 0;
+
+ repeat
+ Beats = Beats + LineValue[i];
+ if Beats >= BeatsToChange then
+ AddChange(i);
+ BeatsToChange = BeatsToChange + math.ceil((MinPercentage + (MaxPercentage - MinPercentage) * math.random()) * TotalBeats);
+ end
+ i = i + 1;
+ until i >= #Lines;
+ end;
+
+ -- free lines
+ Lines = nil;
+
+ -- init NextPlayerChange
+ NextPlayerChange = 1;
+
+ -- calculate OSD position for players
+ do
+ local RBRect = ScreenSing.GetRBRect();
+ OSD = {};
+
+ for i = 1, #RBRect do
+ OSD[i] = {};
+ OSD[i].Left = RBRect[i].x;
+ OSD[i].Right = RBRect[i].x + RBRect[i].w;
+ OSD[i].Top = RBRect[i].y + RBRect[i].h;
+ OSD[i].Bottom = RBRect[i].y + RBRect[i].h + math.max(RBRect[i].h, 13);
+ end;
+ end;
+
+ -- remove hook
+ hSongLoaded:Unhook();
+ hSongLoaded = nil;
+end
+
+function DrawPlayerText(i, Text)
+ Gl.Disable('GL_TEXTURE_2D');
+
+ -- background
+ Gl.Color (0, 0, 0, 1);
+ Gl.Begin('GL_QUADS');
+ Gl.Vertex(OSD[i].Left, OSD[i].Top);
+ Gl.Vertex(OSD[i].Left, OSD[i].Bottom);
+ Gl.Vertex(OSD[i].Right, OSD[i].Bottom);
+ Gl.Vertex(OSD[i].Right, OSD[i].Top);
+ Gl.End();
+
+ -- text
+ Gl.Color(1, 0, 0, 1);
+ TextGl.Size(6);
+ TextGl.Style(1);
+ TextGl.Italic(false);
+
+ local PosX = (OSD[i].Left + OSD[i].Right) / 2;
+ PosX = PosX - TextGl.Width(Text) / 2;
+
+ TextGl.Pos(PosX, OSD[i].Top - 3);
+
+ TextGl.Print(Text);
+end;
+
+-- draws the progress bar for player i
+function DrawPlayerProgress(i, Progress)
+ Gl.Disable('GL_TEXTURE_2D');
+
+ -- background
+ Gl.Color (0, 0, 0, 1);
+ Gl.Begin('GL_QUADS');
+ Gl.Vertex(OSD[i].Left, OSD[i].Top);
+ Gl.Vertex(OSD[i].Left, OSD[i].Bottom);
+ Gl.Vertex(OSD[i].Right, OSD[i].Bottom);
+ Gl.Vertex(OSD[i].Right, OSD[i].Top);
+ Gl.End();
+
+ -- bar
+ Gl.Color(1, 0, 0, 1);
+ Gl.Begin('GL_QUADS');
+ Gl.Vertex(OSD[i].Left + 2, OSD[i].Top + 2);
+ Gl.Vertex(OSD[i].Left + 2, OSD[i].Bottom - 2);
+ Gl.Vertex(OSD[i].Left + 2 + (OSD[i].Right - OSD[i].Left - 4) * Progress, OSD[i].Bottom - 2);
+ Gl.Vertex(OSD[i].Left + 2 + (OSD[i].Right - OSD[i].Left - 4) * Progress, OSD[i].Top + 2);
+ Gl.End();
+end;
+
+-- draws the big progress bar in the screen center
+function DrawCenterProgress(Progress)
+ Gl.Disable('GL_TEXTURE_2D');
+
+ -- background
+ Gl.Color (0, 0, 0, 1);
+ Gl.Begin('GL_QUADS');
+ Gl.Vertex(BarPos.Left, BarPos.Top);
+ Gl.Vertex(BarPos.Left, BarPos.Bottom);
+ Gl.Vertex(BarPos.Right, BarPos.Bottom);
+ Gl.Vertex(BarPos.Right, BarPos.Top);
+ Gl.End();
+
+ -- bar
+ Gl.Color(1, 0, 0, 1);
+ Gl.Begin('GL_QUADS');
+ Gl.Vertex(BarPos.Left + 2, BarPos.Top + 2);
+ Gl.Vertex(BarPos.Left + 2, BarPos.Bottom - 2);
+ Gl.Vertex(BarPos.Left + 2 + (BarPos.Right - BarPos.Left - 4) * Progress, BarPos.Bottom - 2);
+ Gl.Vertex(BarPos.Left + 2 + (BarPos.Right - BarPos.Left - 4) * Progress, BarPos.Top + 2);
+ Gl.End();
+end;
+
+function Sing()
+ if (NextPlayerChange <= #PlayerChanges) then
+ local BeatsToNextChange = PlayerChanges[NextPlayerChange].OnBeat - ScreenSing.GetBeat();
+ local TimeToNextChange = ScreenSing.BeatsToSeconds(BeatsToNextChange);
+
+ -- draw next player text or progress bar
+ if (TimeToNextChange <= 0) then
+ --there is a change
+ NextPlayerChange = NextPlayerChange + 1;
+
+ elseif (TimeToNextChange <= 5) then
+ for i = 1, #Teams do
+ DrawPlayerProgress(i, 1 - TimeToNextChange/5);
+ end;
+ elseif (TimeToNextChange <= 6.5) then
+ for i = 1, #Teams do
+ DrawPlayerText(i, Teams[i].Players[PlayerChanges[NextPlayerChange].NextPlayer[i]].Name);
+ end;
+ elseif (TimeToNextChange <= 8) then
+ for i = 1, #Teams do
+ DrawPlayerText(i, 'Next Player');
+ end;
+ elseif (TimeToNextChange <= 9.5) then
+ for i = 1, #Teams do
+ DrawPlayerText(i, Teams[i].Players[PlayerChanges[NextPlayerChange].NextPlayer[i]].Name);
+ end;
+ elseif (TimeToNextChange <= 11) then
+ for i = 1, #Teams do
+ DrawPlayerText(i, 'Next Player');
+ end;
+ end
+
+ if (TimeToNextChange <= 11) then
+ DrawCenterProgress(1 - TimeToNextChange/11);
+ end;
+ end;
+end \ No newline at end of file