You can subscribe to this list here.
| 2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(25) |
Jul
(288) |
Aug
(119) |
Sep
(31) |
Oct
(59) |
Nov
(458) |
Dec
(359) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2010 |
Jan
(268) |
Feb
(26) |
Mar
(36) |
Apr
(48) |
May
(119) |
Jun
(37) |
Jul
(173) |
Aug
(429) |
Sep
(137) |
Oct
(156) |
Nov
(59) |
Dec
(45) |
| 2011 |
Jan
(398) |
Feb
(257) |
Mar
(49) |
Apr
(5) |
May
(34) |
Jun
(11) |
Jul
(38) |
Aug
(12) |
Sep
(1) |
Oct
(49) |
Nov
(5) |
Dec
(10) |
| 2012 |
Jan
(21) |
Feb
(32) |
Mar
(20) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(173) |
Aug
|
Sep
(25) |
Oct
(6) |
Nov
(44) |
Dec
|
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-12-01 17:04:26
|
Module: web Branch: master Commit: a56f62ff444cfaed693dc85939225c06ab451470 Author: Lasse Karkkainen <tro...@tr...> Date: Tue Dec 1 19:04:14 2009 +0200 Updated documentation --- htdocs-source/about.txt | 55 ++++++++++++++---------------------------- htdocs-source/manual.txt | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 37 deletions(-) |
|
From: Tapio V. <aa...@us...> - 2009-12-01 15:15:08
|
Module: performous
Branch: master
Commit: d0ecd40f969ed90411fc594f5e5c25962fcb9411
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 17:14:36 2009 +0200
Whammy tweaks.
---
game/guitargraph.cc | 9 ++++-----
game/guitargraph.hh | 2 +-
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index d06b21c..7d0b806 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -198,9 +198,9 @@ void GuitarGraph::engine() {
double last = std::min(time, ev.dur->end);
double t = last - ev.holdTime;
if (t > 0) {
- // Minimal points for long holds unless whammy is used
- double wfactor = (ev.dur->end - ev.dur->begin < 1.5 || ev.whammy.get() > 0.01
- || m_starpower.get() > 0.01) ? 1.0 : 0.2;
+ // No points for long holds unless whammy is used
+ double wfactor = (time - ev.dur->begin < 1.5 || ev.whammy.get() > 0.01
+ || m_starpower.get() > 0.01) ? 1.0 : 0.0;
m_score += t * 50.0 * wfactor;
// Whammy fills starmeter much faster
m_starmeter += t * 50 * ( (ev.whammy.get() > 0.01) ? 2.0 : 1.0 );
@@ -615,8 +615,7 @@ void GuitarGraph::drawNote(int fret, glutil::Color c, float tBeg, float tEnd, fl
if (whammy > 0.1) {
while ((y -= fretWid) > yEnd + fretWid) {
float r = rand() / double(RAND_MAX);
- float r2 = rand() / double(RAND_MAX);
- vertexPair(x+cos(y*whammy)/4.0+(r-0.5)/4.0, y, c, r2*0.30 + 0.20);
+ vertexPair(x+cos(y*whammy)/4.0+(r-0.5)/4.0, y, c, 0.5f);
}
} else {
while ((y -= 10.0) > yEnd + fretWid) vertexPair(x, y, c, 0.5f);
diff --git a/game/guitargraph.hh b/game/guitargraph.hh
index f00ab96..e5fa231 100644
--- a/game/guitargraph.hh
+++ b/game/guitargraph.hh
@@ -104,7 +104,7 @@ class GuitarGraph {
int fret;
Duration const* dur;
double holdTime;
- Event(double t, int ty, int f = -1, Duration const* d = NULL): time(t), glow(0.0, 5.0), whammy(0.0, 1.2), type(ty), fret(f), dur(d), holdTime(d ? d->begin : getNaN()) { if (type > 0) glow.setValue(1.0); }
+ Event(double t, int ty, int f = -1, Duration const* d = NULL): time(t), glow(0.0, 5.0), whammy(0.0, 0.5), type(ty), fret(f), dur(d), holdTime(d ? d->begin : getNaN()) { if (type > 0) glow.setValue(1.0); }
};
typedef std::vector<Event> Events;
Events m_events;
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:51:12
|
Module: performous
Branch: master
Commit: 7818f90de440932fb53d1a016405321f1660b76c
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 16:08:57 2009 +0200
Moved some stuff away from the huge GuitarGraph::draw()
---
game/guitargraph.cc | 7 ++++++-
game/guitargraph.hh | 1 +
2 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 9103b9e..d06b21c 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -531,6 +531,12 @@ void GuitarGraph::draw(double time) {
m_neckglow.dimensions.screenBottom(0.0).middle(offsetX).fixedWidth(m_width.get());
m_neckglow.draw();
}
+ drawInfo(time, offsetX);
+ glColor3f(1.0f, 1.0f, 1.0f);
+}
+
+/// Draw popups and other info texts
+void GuitarGraph::drawInfo(double time, double offsetX) {
// Is Starpower ready?
if (canActivateStarpower(m_starmeter)) {
float a = (int(time * 1000.0) % 1000) / 1000.0;
@@ -563,7 +569,6 @@ void GuitarGraph::draw(double time) {
m_popupText->draw();
if (godAnim > 0.999) m_godmodePopup.setTarget(0.0, true);
}
- glColor3f(1.0f, 1.0f, 1.0f);
}
namespace {
diff --git a/game/guitargraph.hh b/game/guitargraph.hh
index 7f73b28..f00ab96 100644
--- a/game/guitargraph.hh
+++ b/game/guitargraph.hh
@@ -113,6 +113,7 @@ class GuitarGraph {
glutil::Color const& color(int fret) const;
void drawBar(double time, float h);
void drawNote(int fret, glutil::Color, float tBeg, float tEnd, float whammy = 0, bool tappable = false);
+ void drawInfo(double time, double offsetX);
void nextTrack();
void difficultyAuto(bool tryKeepCurrent = false);
bool difficulty(Difficulty level);
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:51:09
|
Module: performous
Branch: master
Commit: ce033407f950b6665a2242d23fd757f9a24eeab3
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 15:44:46 2009 +0200
More subtle lower neck glow.
---
themes/default/neck_glow.svg | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/themes/default/neck_glow.svg b/themes/default/neck_glow.svg
index f5510fa..7575eda 100644
--- a/themes/default/neck_glow.svg
+++ b/themes/default/neck_glow.svg
@@ -12,7 +12,7 @@
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="256"
- height="256"
+ height="128"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
@@ -39,9 +39,9 @@
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
- inkscape:zoom="2.5115781"
- inkscape:cx="7.4039701"
- inkscape:cy="152.62316"
+ inkscape:zoom="1.7759539"
+ inkscape:cx="9.4369493"
+ inkscape:cy="44.237484"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:current-layer="svg2"
@@ -64,7 +64,7 @@
<linearGradient
id="linearGradient3655">
<stop
- style="stop-color:#ffffff;stop-opacity:1;"
+ style="stop-color:#ffffff;stop-opacity:0.627451;"
offset="0"
id="stop3657" />
<stop
@@ -282,12 +282,12 @@
</defs>
<path
sodipodi:type="arc"
- style="fill:url(#radialGradient3661);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.10901402999999998;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:url(#radialGradient3661);fill-opacity:1.0;fill-rule:nonzero;stroke:none"
id="path2879"
sodipodi:cx="162.5"
sodipodi:cy="256"
sodipodi:rx="157.5"
sodipodi:ry="35"
d="m 320,256 a 157.5,35 0 1 1 -315,0 157.5,35 0 1 1 315,0 z"
- transform="matrix(0.80793651,0,0,2.2642857,-3.2896825,-323.65714)" />
+ transform="matrix(0.81269841,0,0,1.8285714,-4.063492,-340.11428)" />
</svg>
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:51:07
|
Module: performous
Branch: master
Commit: 7b977546c2edd9fc9322c044d4f9d66c5a1bd3a4
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 15:31:07 2009 +0200
ScoreWindow no longer appears too early for instruments.
---
game/screen_sing.cc | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index 35595b5..3933b23 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -299,7 +299,8 @@ void ScreenSing::draw() {
m_score_window->draw();
}
}
- else if (!m_audio.isPlaying() || (status == Song::FINISHED && m_audio.getLength() - time < 3.0)) {
+ else if (!m_audio.isPlaying() || (status == Song::FINISHED
+ && m_audio.getLength() - time <= (m_song->track_map.empty() ? 3.0 : 0.2) )) {
// Time to create the score window
m_quitTimer.setValue(QUIT_TIMEOUT);
m_engine->kill(); // kill the engine thread (to avoid consuming memory)
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:51:06
|
Module: performous
Branch: master
Commit: d00b0c59bdaf9a6dd6e2d8a218ba41efa9a0e1b4
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 15:22:26 2009 +0200
Introducing God Mode.
---
game/guitargraph.cc | 52 +++++++++++++++++++++++++++++++++++++-------------
game/guitargraph.hh | 3 +-
2 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index b95092d..9103b9e 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -78,6 +78,7 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
m_text(getThemePath("sing_timetxt.svg"), config["graphic/text_lod"].f()),
m_correctness(0.0, 5.0),
m_streakPopup(0.0, 1.0),
+ m_godmodePopup(0.0, 0.666),
m_score(),
m_scoreFactor(),
m_starmeter(),
@@ -92,7 +93,7 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
std::cout << e.what() << std::endl;
m_use3d = false;
}
- m_streakPopupText.reset(new SvgTxtThemeSimple(getThemePath("sing_score_text.svg"), config["graphic/text_lod"].f()));
+ m_popupText.reset(new SvgTxtThemeSimple(getThemePath("sing_score_text.svg"), config["graphic/text_lod"].f()));
unsigned int sr = m_audio.getSR();
if (m_drums) {
m_samples.push_back(Sample(getPath("sounds/drum_bass.ogg"), sr));
@@ -140,6 +141,7 @@ void GuitarGraph::engine() {
if (m_input.pressed(i)) m_hit[i + 1].setValue(1.0);
}
}
+ if (m_starpower.get() > 0.001) m_correctness.setTarget(1.0, true);
double whammy = 0;
// Handle all events
for (input::Event ev; m_input.tryPoll(ev);) {
@@ -212,10 +214,15 @@ void GuitarGraph::engine() {
m_streakPopup.setTarget(1.0);
m_bigStreak = getNextBigStreak(m_bigStreak);
}
+ if (m_starpower.get() > 0.01) m_correctness.setTarget(1.0, true);
}
void GuitarGraph::activateStarpower() {
- if (canActivateStarpower(m_starmeter)) { m_starmeter = 0; m_starpower.setValue(1.0); }
+ if (canActivateStarpower(m_starmeter)) {
+ m_starmeter = 0;
+ m_starpower.setValue(1.0);
+ m_godmodePopup.setTarget(1.0);
+ }
}
void GuitarGraph::endHold(int fret) {
@@ -292,7 +299,7 @@ void GuitarGraph::guitarPlay(double time, input::Event const& ev) {
endHold(fret);
}
} else {
- if (m_correctness.get() < 0.5) return; // Hammering not possible at the moment
+ if (m_correctness.get() < 0.5 && m_starpower.get() < 0.001) return; // Hammering not possible at the moment
for (int fret = ev.button + 1; fret < 5; ++fret) {
if (ev.pressed[fret]) return; // Extra buttons on right side
}
@@ -317,7 +324,8 @@ void GuitarGraph::guitarPlay(double time, input::Event const& ev) {
if (it->status > 0) continue; // Already tapped, can't tap again
if (!it->tappable) continue; // Cannot tap
Chords::iterator tmp = it;
- if (tmp == m_chords.begin() || (--tmp)->status == 0) continue; // The previous note not played
+ if ( (tmp == m_chords.begin() || (--tmp)->status == 0) &&
+ m_starpower.get() < 0.001) continue; // The previous note not played
}
if (!it->matches(frets)) continue;
double error = std::abs(it->begin - time);
@@ -499,12 +507,12 @@ void GuitarGraph::draw(double time) {
drawNote(fret, c, tBeg, tEnd, whammy, it->tappable);
}
}
- } // reverse scale sc1
- } // reverse rot rot1
- } // reverse trans tr2
- } // reverse push pmb
- } // reverse trans tr1
- } // reverse push pmm
+ } //< reverse scale sc1
+ } //< reverse rot rot1
+ } //< reverse trans tr2
+ } //< reverse push pmb
+ } //< reverse trans tr1
+ } //< reverse push pmm
// Bottom neck glow
if (ng_ccnt > 0) {
if (m_neckglowColor.r > 0 || m_neckglowColor.g > 0 || m_neckglowColor.b > 0) {
@@ -527,18 +535,34 @@ void GuitarGraph::draw(double time) {
if (canActivateStarpower(m_starmeter)) {
float a = (int(time * 1000.0) % 1000) / 1000.0;
m_text.dimensions.screenBottom(-0.02).middle(-0.12 + offsetX);
- m_text.draw("Starpower Ready!", a);
+ m_text.draw("God Mode Ready!", a);
}
// Draw streak pop-up for long streak intervals
double streakAnim = m_streakPopup.get();
if (streakAnim > 0.0) {
double s = 0.2 * (1.0 + streakAnim);
glColor4f(1.0f, 0.0f, 0.0f, 1.0 - streakAnim);
- m_streakPopupText->render(boost::lexical_cast<std::string>(unsigned(m_bigStreak)) + "\nStreak!");
- m_streakPopupText->dimensions().center(0.1).middle(0.0).stretch(s,s);
- m_streakPopupText->draw();
+ m_popupText->render(boost::lexical_cast<std::string>(unsigned(m_bigStreak)) + "\nStreak!");
+ m_popupText->dimensions().center(0.1).middle(0.0).stretch(s,s);
+ m_popupText->draw();
if (streakAnim > 0.999) m_streakPopup.setTarget(0.0, true);
}
+ // Draw godmode activation pop-up
+ double godAnim = m_godmodePopup.get();
+ if (godAnim > 0.0) {
+ float a = 1.0 - godAnim;
+ float s = 0.2 * (1.0 + godAnim);
+ glColor4f(0.3f, 0.0f, 1.0f, a);
+ m_popupText->render("God Mode\nActivated!");
+ m_popupText->dimensions().center(0.1).middle(0.0).stretch(s,s);
+ m_popupText->draw();
+ s = 0.12 * (1.0 + godAnim);
+ glColor4f(0.8f, 0.8f, 1.0f, a);
+ m_popupText->render("Mistakes ignored");
+ m_popupText->dimensions().center(0.26).middle(0.0).stretch(s, s/5.0);
+ m_popupText->draw();
+ if (godAnim > 0.999) m_godmodePopup.setTarget(0.0, true);
+ }
glColor3f(1.0f, 1.0f, 1.0f);
}
diff --git a/game/guitargraph.hh b/game/guitargraph.hh
index e00fa19..7f73b28 100644
--- a/game/guitargraph.hh
+++ b/game/guitargraph.hh
@@ -117,7 +117,7 @@ class GuitarGraph {
void difficultyAuto(bool tryKeepCurrent = false);
bool difficulty(Difficulty level);
SvgTxtTheme m_text;
- boost::scoped_ptr<SvgTxtThemeSimple> m_streakPopupText;
+ boost::scoped_ptr<SvgTxtThemeSimple> m_popupText;
void updateChords();
typedef std::vector<Chord> Chords;
Chords m_chords;
@@ -126,6 +126,7 @@ class GuitarGraph {
NoteStatus m_notes;
AnimValue m_correctness;
AnimValue m_streakPopup;
+ AnimValue m_godmodePopup;
double m_score;
double m_scoreFactor;
double m_starmeter;
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:51:03
|
Module: performous
Branch: master
Commit: a3d822fb5a6e2f634babf8d4623a6fb388810bbe
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 14:11:19 2009 +0200
Some new glutils.
---
game/glutil.hh | 27 +++++++++++++++++++++++++++
game/guitargraph.cc | 26 +++++++++++++-------------
2 files changed, 40 insertions(+), 13 deletions(-)
diff --git a/game/glutil.hh b/game/glutil.hh
index ad7f309..2d20d83 100644
--- a/game/glutil.hh
+++ b/game/glutil.hh
@@ -56,6 +56,33 @@ namespace glutil {
}
};
+ /// auto-reversing translation
+ struct Translation {
+ Translation(float _x, float _y, float _z = 0.0f): m_x(_x), m_y(_y), m_z(_z)
+ { glTranslatef(m_x, m_y, m_z); }
+ ~Translation() { glTranslatef(-m_x, -m_y, -m_z); }
+ private:
+ float m_x, m_y, m_z;
+ };
+
+ /// auto-reversing rotation
+ struct Rotation {
+ Rotation(float _a, float _x, float _y, float _z): m_a(_a), m_x(_x), m_y(_y), m_z(_z)
+ { glRotatef(m_a, m_x, m_y, m_z); }
+ ~Rotation() { glRotatef(-m_a, m_x, m_y, m_z); }
+ private:
+ float m_a, m_x, m_y, m_z;
+ };
+
+ /// auto-reversing scaling
+ struct Scale {
+ Scale(float _x, float _y, float _z): m_x(_x), m_y(_y), m_z(_z)
+ { glScalef(m_x, m_y, m_z); }
+ ~Scale() { glScalef(1.0/m_x, 1.0/m_y, 1.0/m_z); }
+ private:
+ float m_x, m_y, m_z;
+ };
+
/// struct to store color information
struct Color {
float r, ///< red component
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 663d3c8..b95092d 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -428,13 +428,13 @@ void GuitarGraph::draw(double time) {
float ng_r = 0, ng_g = 0, ng_b = 0; // neck glow color components
int ng_ccnt = 0; // neck glow color count
{
- glutil::PushMatrixMode pmm(GL_PROJECTION);
- glTranslatef(frac * 2.0 * offsetX, 0.0f, 0.0f);
- {
- glutil::PushMatrixMode pmb(GL_MODELVIEW);
- glTranslatef((1.0 - frac) * offsetX, dimensions.y2(), 0.0f);
- glRotatef(g_angle, 1.0f, 0.0f, 0.0f);
- { float s = dimensions.w() / 5.0f; glScalef(s, s, s); }
+ glutil::PushMatrixMode pmm(GL_PROJECTION); {
+ glutil::Translation tr1(frac * 2.0 * offsetX, 0.0f, 0.0f); {
+ glutil::PushMatrixMode pmb(GL_MODELVIEW); {
+ glutil::Translation tr2((1.0 - frac) * offsetX, dimensions.y2(), 0.0f); {
+ glutil::Rotation rot1(g_angle, 1.0f, 0.0f, 0.0f); {
+ float temp_s = dimensions.w() / 5.0f;
+ glutil::Scale sc1(temp_s, temp_s, temp_s);
// Draw the neck
{
UseTexture tex(*m_neck);
@@ -499,12 +499,12 @@ void GuitarGraph::draw(double time) {
drawNote(fret, c, tBeg, tEnd, whammy, it->tappable);
}
}
- glRotatef(-g_angle, 1.0f, 0.0f, 0.0f);
- glTranslatef(-(1.0 - frac) * offsetX, -dimensions.y2(), 0.0f);
- glScalef(5.0f, 5.0f, 5.0f);
- }
- glTranslatef(-frac * 2.0 * offsetX, 0.0f, 0.0f);
- }
+ } // reverse scale sc1
+ } // reverse rot rot1
+ } // reverse trans tr2
+ } // reverse push pmb
+ } // reverse trans tr1
+ } // reverse push pmm
// Bottom neck glow
if (ng_ccnt > 0) {
if (m_neckglowColor.r > 0 || m_neckglowColor.g > 0 || m_neckglowColor.b > 0) {
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:51:01
|
Module: performous
Branch: dance
Commit: d8013e963b35ed658d935924fb59c563bde0fdb0
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 13:49:51 2009 +0200
Tweaked note draw timing and removed an old temporary hack.
---
game/dancegraph.cc | 20 +++++++++-----------
game/screen_sing.cc | 1 -
2 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/game/dancegraph.cc b/game/dancegraph.cc
index fcd6752..3e21f1a 100644
--- a/game/dancegraph.cc
+++ b/game/dancegraph.cc
@@ -8,12 +8,11 @@
namespace {
const std::string diffv[] = { "Beginner", "Easy", "Medium", "Hard", "Challenge" };
- const float past = -0.2f;
- const float future = 1.8f;
- const float offsetY = 1.8f; // TODO: more clever way to do this?
- const float timescale = 6.0f;
+ const float past = -0.4f;
+ const float future = 2.0f;
+ const float timescale = 7.0f;
// Note: t is difference from playback time so it must be in range [past, future]
- float time2y(float t) { return offsetY + timescale * (t - past) / (future - past); }
+ float time2y(float t) { return timescale * (t - past) / (future - past); }
float time2a(float t) {
float a = clamp(1.0 - t / future); // Note: we want 1.0 alpha already at zero t.
return std::pow(a, 0.8f); // Nicer curve
@@ -191,8 +190,7 @@ void DanceGraph::drawMine(float x, float y, float rot, float scale) {
/// Draws the dance graph
void DanceGraph::draw(double time) {
Dimensions dimensions(1.0); // FIXME: bogus aspect ratio (is this fixable?)
- //dimensions.screenTop().middle(m_cx.get()).fixedWidth(m_width.get());
- dimensions.screenCenter().middle(m_cx.get()).stretch(m_width.get(), 0.9);
+ dimensions.screenTop().middle(m_cx.get()).stretch(m_width.get(), 1.0);
double offsetX = 0.5 * (dimensions.x1() + dimensions.x2());
double frac = 0.75; // Adjustable: 1.0 means fully separated, 0.0 means fully attached
// Draw scores
@@ -233,10 +231,10 @@ void DanceGraph::draw(double time) {
}
// To test arrow coordinate positioning
-// for (float i = past; i < future; i+=0.2) {
-// std::cout << time2y(i) << std::endl;
-// drawArrow(1, 0, time2y(i), 0.6);
-// }
+ //for (float i = past; i <= future; i+=0.2) {
+ //std::cout << i << ": " << time2y(i) << std::endl;
+ //drawArrow(1, 0, time2y(i), 0.6);
+ //}
glColor3f(1.0f, 1.0f, 1.0f);
}
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index 1b7fafa..a3b419c 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -92,7 +92,6 @@ void ScreenSing::enter() {
while(1) {
try {
m_dancers.push_back(new DanceGraph(m_audio, *m_song));
- break; // REMOVEME (when input assignement is correctly implemented)
} catch (std::runtime_error&) { break; }
}
}
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:50:58
|
Module: performous
Branch: dance
Commit: b7f51cdd60545e036dbb3d2c3ea4dae6bbdc6181
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 12:34:11 2009 +0200
Display difficulty and game mode at start of dance song.
---
game/dancegraph.cc | 5 +++++
game/screen_sing.cc | 1 +
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/game/dancegraph.cc b/game/dancegraph.cc
index 51009ea..fcd6752 100644
--- a/game/dancegraph.cc
+++ b/game/dancegraph.cc
@@ -202,6 +202,11 @@ void DanceGraph::draw(double time) {
m_text.dimensions.screenBottom(-0.27).middle(0.32 * dimensions.w() + offsetX);
m_text.draw(boost::lexical_cast<std::string>(unsigned(m_streak)) + "/"
+ boost::lexical_cast<std::string>(unsigned(m_longestStreak)));
+ } else {
+ m_text.dimensions.screenBottom(-0.041).middle(-0.09 + offsetX);
+ m_text.draw(getDifficultyString());
+ m_text.dimensions.screenBottom(-0.015).middle(-0.09 + offsetX);
+ m_text.draw(getGameMode());
}
glutil::PushMatrixMode pmm(GL_PROJECTION);
glTranslatef(frac * 2.0 * offsetX, 0.0f, 0.0f);
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index 2e490e8..1b7fafa 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -150,6 +150,7 @@ void ScreenSing::danceLayout(double time) {
if (time < -0.5) {
glColor4f(1.0f, 1.0f, 1.0f, clamp(-1.0 - 2.0 * time));
// TODO: help?
+ //m_help->draw();
glColor3f(1.0f, 1.0f, 1.0f);
}
}
|
|
From: Tapio V. <aa...@us...> - 2009-12-01 14:50:57
|
Module: performous
Branch: dance
Commit: efef3d4a99a3cf4234a27489cc7eaa65958c6ccb
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 1 11:58:04 2009 +0200
Dancers are drawn in ScoreWindow and included in HiScore.
---
game/dancegraph.cc | 3 +++
game/dancegraph.hh | 2 ++
game/database.hh | 1 +
game/screen_sing.cc | 34 ++++++++++++++++++++++++++++------
game/screen_sing.hh | 5 ++---
5 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/game/dancegraph.cc b/game/dancegraph.cc
index 84587cc..51009ea 100644
--- a/game/dancegraph.cc
+++ b/game/dancegraph.cc
@@ -7,6 +7,7 @@
#include <stdexcept>
namespace {
+ const std::string diffv[] = { "Beginner", "Easy", "Medium", "Hard", "Challenge" };
const float past = -0.2f;
const float future = 1.8f;
const float offsetY = 1.8f; // TODO: more clever way to do this?
@@ -67,6 +68,8 @@ DanceGraph::DanceGraph(Audio& audio, Song const& song):
}
+std::string DanceGraph::getDifficultyString() const { return diffv[m_level]; }
+
void DanceGraph::difficultyDelta(int delta) {
int newLevel = m_level + delta;
std::cout << "difficultyDelta called with " << delta << " (newLevel = " << newLevel << ")" << std::endl;
diff --git a/game/dancegraph.hh b/game/dancegraph.hh
index 4805934..4b96a29 100644
--- a/game/dancegraph.hh
+++ b/game/dancegraph.hh
@@ -40,6 +40,8 @@ class DanceGraph {
unsigned stream() const { return m_stream; }
double correctness() const { return m_correctness.get(); }
int getScore() const { return m_score * m_scoreFactor; }
+ std::string getGameMode() const { return m_gamingMode; }
+ std::string getDifficultyString() const;
private:
enum DanceStep {
STEP_LEFT = 0,
diff --git a/game/database.hh b/game/database.hh
index 4463692..c61ae47 100644
--- a/game/database.hh
+++ b/game/database.hh
@@ -11,6 +11,7 @@
struct ScoreItem {
int score;
+ enum Type { SINGER, INSTRUMENT, DANCER } type;
std::string track; // includes difficulty
std::string track_simple; // no difficulty
glutil::Color color;
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index d3a4c98..2e490e8 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -204,7 +204,7 @@ void ScreenSing::manageEvent(SDL_Event event) {
if (m_score_window.get()) { activateNextScreen(); return; } // Score window visible -> Enter quits
else if (status == Song::FINISHED && m_song->track_map.empty()) {
m_engine->kill(); // kill the engine thread (to avoid consuming memory)
- m_score_window.reset(new ScoreWindow(m_instruments, m_database)); // Song finished, but no score window -> show it
+ m_score_window.reset(new ScoreWindow(m_instruments, m_database, m_dancers)); // Song finished, but no score window -> show it
}
}
else if (key == SDLK_SPACE && m_score_window.get()) { activateNextScreen(); return; } // Score window visible -> Space quits
@@ -332,7 +332,7 @@ void ScreenSing::draw() {
// Time to create the score window
m_quitTimer.setValue(QUIT_TIMEOUT);
m_engine->kill(); // kill the engine thread (to avoid consuming memory)
- m_score_window.reset(new ScoreWindow(m_instruments, m_database));
+ m_score_window.reset(new ScoreWindow(m_instruments, m_database, m_dancers));
}
}
@@ -342,7 +342,7 @@ void ScreenSing::draw() {
}
}
-ScoreWindow::ScoreWindow(Instruments& instruments, Database& database):
+ScoreWindow::ScoreWindow(Instruments& instruments, Database& database, Dancers& dancers):
m_database(database),
m_pos(0.8, 2.0),
m_bg(getThemePath("score_window.svg")),
@@ -352,8 +352,9 @@ ScoreWindow::ScoreWindow(Instruments& instruments, Database& database):
{
m_pos.setTarget(0.0);
m_database.scores.clear();
+ // Singers
for (std::list<Player>::iterator p = m_database.cur.begin(); p != m_database.cur.end();) {
- ScoreItem item;
+ ScoreItem item; item.type = ScoreItem::SINGER;
item.score = p->getScore();
item.track = "Vocals";
item.track_simple = "vocals";
@@ -363,8 +364,9 @@ ScoreWindow::ScoreWindow(Instruments& instruments, Database& database):
m_database.scores.push_back(item);
++p;
}
+ // Instruments
for (Instruments::iterator it = instruments.begin(); it != instruments.end();) {
- ScoreItem item;
+ ScoreItem item; item.type = ScoreItem::INSTRUMENT;
item.score = it->getScore();
item.track_simple = it->getTrack();
item.track = it->getTrack() + " - " + it->getDifficultyString();
@@ -378,6 +380,20 @@ ScoreWindow::ScoreWindow(Instruments& instruments, Database& database):
m_database.scores.push_back(item);
++it;
}
+ // Dancers
+ for (Dancers::iterator it = dancers.begin(); it != dancers.end();) {
+ ScoreItem item; item.type = ScoreItem::DANCER;
+ item.score = it->getScore();
+ item.track_simple = it->getGameMode();
+ item.track = it->getGameMode() + " - " + it->getDifficultyString();
+ item.track[0] = toupper(item.track[0]);
+ if (item.score < 100) { it = dancers.erase(it); continue; }
+
+ item.color = glutil::Color(1.0f, 0.4f, 0.1f);
+
+ m_database.scores.push_back(item);
+ ++it;
+ }
if (m_database.scores.empty())
m_rank = "No player!";
@@ -385,12 +401,18 @@ ScoreWindow::ScoreWindow(Instruments& instruments, Database& database):
m_database.scores.sort();
m_database.scores.reverse(); // top should be first
int topScore = m_database.scores.front().score;
- if (m_database.scores.front().track_simple == "vocals") {
+ if (m_database.scores.front().type == ScoreItem::SINGER) {
if (topScore > 8000) m_rank = "Hit singer";
else if (topScore > 6000) m_rank = "Lead singer";
else if (topScore > 4000) m_rank = "Rising star";
else if (topScore > 2000) m_rank = "Amateur";
else m_rank = "Tone deaf";
+ } else if (m_database.scores.front().type == ScoreItem::DANCER) {
+ if (topScore > 8000) m_rank = "Maniac";
+ else if (topScore > 6000) m_rank = "Hoofer";
+ else if (topScore > 4000) m_rank = "Rising star";
+ else if (topScore > 2000) m_rank = "Amateur";
+ else m_rank = "Loser";
} else {
if (topScore > 8000) m_rank = "Virtuoso";
else if (topScore > 6000) m_rank = "Rocker";
diff --git a/game/screen_sing.hh b/game/screen_sing.hh
index a5c2c8b..e819074 100644
--- a/game/screen_sing.hh
+++ b/game/screen_sing.hh
@@ -25,12 +25,13 @@ class Database;
class Video;
typedef boost::ptr_vector<GuitarGraph> Instruments;
+typedef boost::ptr_vector<DanceGraph> Dancers;
/// shows score at end of song
class ScoreWindow {
public:
/// constructor
- ScoreWindow(Instruments& instruments, Database& database);
+ ScoreWindow(Instruments& instruments, Database& database, Dancers& dancers);
/// draws ScoreWindow
void draw();
bool empty() { return m_database.scores.empty(); }
@@ -84,8 +85,6 @@ class ScreenSing: public Screen {
boost::scoped_ptr<Surface> m_help;
boost::scoped_ptr<Engine> m_engine;
boost::scoped_ptr<LayoutSinger> m_layout_singer;
- typedef boost::ptr_vector<GuitarGraph> Instruments;
- typedef boost::ptr_vector<DanceGraph> Dancers;
Instruments m_instruments;
Dancers m_dancers;
double m_latencyAV; // Latency between audio and video output (do not confuse with latencyAR)
|
|
From: Tapio V. <aa...@us...> - 2009-11-30 20:57:01
|
Module: performous Branch: master Commit: 702579048155dc8d2f7b33b418b56daaaa61e5aa Author: Tapio Vierros <tap...@gm...> Date: Mon Nov 30 22:55:28 2009 +0200 Improved hammer note 3d object normals (better shading). --- themes/default/fret_tap.obj | 273 ++++++++++++++++++++++++++++++------------- 1 files changed, 189 insertions(+), 84 deletions(-) diff --git a/themes/default/fret_tap.obj b/themes/default/fret_tap.obj index 5f09083..668f822 100644 --- a/themes/default/fret_tap.obj +++ b/themes/default/fret_tap.obj @@ -1,89 +1,194 @@ -v -0.000000 -0.149998 0.152645 -v -0.106066 -0.106064 0.152645 -v -0.150000 0.000002 0.152645 -v -0.106066 0.106068 0.152645 -v 0.000000 0.150002 0.152645 -v 0.106066 0.106068 0.152645 -v 0.150000 0.000002 0.152645 -v 0.106066 -0.106064 0.152645 -v -0.000000 -0.106064 0.258711 -v -0.075000 -0.074998 0.258711 -v -0.106066 0.000002 0.258711 -v -0.075000 0.075002 0.258711 -v 0.000000 0.106068 0.258711 -v 0.075000 0.075002 0.258711 -v 0.106066 0.000002 0.258711 -v 0.075000 -0.074998 0.258711 -v 0.000000 0.000002 0.302645 +# Fret_tap object -vt 0.125000 0.500000 -vt 0.000000 0.500000 -vt 0.125000 0.250000 -vt 0.000000 0.250000 -vt 0.250000 0.250000 -vt 0.250000 0.500000 -vt 0.375000 0.250000 -vt 0.375000 0.500000 -vt 0.500000 0.250000 -vt 0.500000 0.500000 -vt 0.625000 0.250000 -vt 0.625000 0.500000 -vt 0.750000 0.250000 -vt 0.750000 0.500000 -vt 0.875000 0.250000 -vt 0.875000 0.500000 -vt 1.000000 0.250000 -vt 1.000000 0.500000 -vt 0.000000 0.000000 -vt 0.125000 0.000000 -vt 0.250000 0.000000 -vt 0.375000 0.000000 -vt 0.500000 0.000000 -vt 0.625000 0.000000 -vt 0.750000 0.000000 -vt 0.875000 0.000000 +v -0.0000000066 -0.1499983668 0.1526451111 +v -0.1060660183 -0.1060643867 0.1526451111 +v -0.1499999911 0.0000016412 0.1526451111 +v -0.1060659960 0.1060676649 0.1526451260 +v 0.0000000018 0.1500016153 0.1526451260 +v 0.1060659960 0.1060676649 0.1526451260 +v 0.1499999911 0.0000016734 0.1526451111 +v 0.1060660630 -0.1060643345 0.1526451111 +v -0.0000000046 -0.1060643941 0.2587111294 +v -0.0749999955 -0.0749983713 0.2587111294 +v -0.1060660183 0.0000016281 0.2587111294 +v -0.0749999806 0.0750016347 0.2587111294 +v 0.0000000013 0.1060676426 0.2587111294 +v 0.0749999881 0.0750016347 0.2587111294 +v 0.1060660183 0.0000016508 0.2587111294 +v 0.0750000328 -0.0749983415 0.2587111294 +v 0.0000000000 0.0000016149 0.3026450872 +v 0.0000000000 0.0000016323 0.1034809500 +v 0.0000000000 0.1181867570 0.1019213125 +v -0.0452275090 0.1091904789 0.1019213125 +v -0.0835694894 0.0835712776 0.1019213051 +v -0.1091888398 0.0452292934 0.1019213051 +v -0.1181851178 0.0000016325 0.1019213125 +v -0.1091888398 -0.0452257246 0.1019213051 +v -0.0835696384 -0.0835676938 0.1019213125 +v -0.0452275090 -0.1091872007 0.1019213051 +v 0.0000000000 -0.1181834787 0.1019213051 +v 0.0452275090 -0.1091872007 0.1019213051 +v 0.0835696384 -0.0835676938 0.1019213125 +v 0.1091888398 -0.0452257246 0.1019213051 +v 0.1181851178 0.0000016325 0.1019213125 +v 0.1091888398 0.0452292934 0.1019213051 +v 0.0835694894 0.0835712776 0.1019213051 +v 0.0452273563 0.1091904789 0.1019213125 +# 34 vertices -vn -0.357407 -0.862856 0.357407 -vn -0.862856 -0.357407 0.357407 -vn -0.862856 0.357407 0.357407 -vn -0.357407 0.862856 0.357407 -vn 0.357406 0.862856 0.357407 -vn 0.357407 0.862856 0.357407 -vn 0.862856 0.357407 0.357407 -vn 0.862856 -0.357406 0.357407 -vn 0.357407 -0.862856 0.357407 -vn -0.156558 -0.377964 0.912487 -vn -0.377964 -0.156558 0.912487 -vn -0.377964 0.156558 0.912487 -vn -0.156558 0.377964 0.912487 -vn 0.156558 0.377964 0.912487 -vn 0.377964 0.156558 0.912487 -vn 0.377964 -0.156558 0.912487 -vn 0.156558 -0.377964 0.912487 +vt 0.0000000000 0.5000000000 0.0000000000 +vt 0.1250000000 0.5000000000 0.0000000000 +vt 0.2500000000 0.5000000000 0.0000000000 +vt 0.3750000000 0.5000000000 0.0000000000 +vt 0.5000000000 0.5000000000 0.0000000000 +vt 0.6250000000 0.5000000000 0.0000000000 +vt 0.7500000000 0.5000000000 0.0000000000 +vt 0.8749999404 0.5000000000 0.0000000000 +vt 0.9999999404 0.5000000000 0.0000000000 +vt 0.0000000000 0.2500000000 0.0000000000 +vt 0.1250000000 0.2500000000 0.0000000000 +vt 0.2500000000 0.2500000000 0.0000000000 +vt 0.3750000000 0.2500000000 0.0000000000 +vt 0.5000000000 0.2500000000 0.0000000000 +vt 0.6250000000 0.2500000000 0.0000000000 +vt 0.7500000000 0.2500000000 0.0000000000 +vt 0.8749999404 0.2500000000 0.0000000000 +vt 0.9999999404 0.2500000000 0.0000000000 +vt 0.0000000000 0.0000000000 0.0000000000 +vt 0.1250000000 0.0000000000 0.0000000000 +vt 0.2500000000 0.0000000000 0.0000000000 +vt 0.3750000000 0.0000000000 0.0000000000 +vt 0.5000000000 0.0000000000 0.0000000000 +vt 0.6250000000 0.0000000000 0.0000000000 +vt 0.7500000000 0.0000000000 0.0000000000 +vt 0.8749999404 0.0000000000 0.0000000000 +vt 0.0000000000 1.0000000000 0.0000000000 +vt 0.0625000000 1.0000000000 0.0000000000 +vt 0.1250000000 1.0000000000 0.0000000000 +vt 0.1875000000 1.0000000000 0.0000000000 +vt 0.2500000000 1.0000000000 0.0000000000 +vt 0.3125000000 1.0000000000 0.0000000000 +vt 0.3750000000 1.0000000000 0.0000000000 +vt 0.4374999702 1.0000000000 0.0000000000 +vt 0.4999999702 1.0000000000 0.0000000000 +vt 0.5624999404 1.0000000000 0.0000000000 +vt 0.6249999404 1.0000000000 0.0000000000 +vt 0.6874999404 1.0000000000 0.0000000000 +vt 0.7500000000 1.0000000000 0.0000000000 +vt 0.8125000000 1.0000000000 0.0000000000 +vt 0.8750000000 1.0000000000 0.0000000000 +vt 0.9375000596 1.0000000000 0.0000000000 +vt 0.0000000000 0.9227918386 0.0000000000 +vt 0.9761041403 0.9227918386 0.0000000000 +vt 0.0386040956 0.9227918386 0.0000000000 +vt 0.0625000000 0.9227918386 0.0000000000 +vt 0.1011040956 0.9227918386 0.0000000000 +vt 0.1250000000 0.9227918386 0.0000000000 +vt 0.1636040956 0.9227918386 0.0000000000 +vt 0.1875000000 0.9227918386 0.0000000000 +vt 0.2261041105 0.9227918386 0.0000000000 +vt 0.2500000000 0.9227918386 0.0000000000 +vt 0.2886041105 0.9227918386 0.0000000000 +vt 0.3125000000 0.9227918386 0.0000000000 +vt 0.3511041105 0.9227918386 0.0000000000 +vt 0.3750000000 0.9227918386 0.0000000000 +vt 0.4136040807 0.9227918386 0.0000000000 +vt 0.4375000000 0.9227918386 0.0000000000 +vt 0.4761040807 0.9227918386 0.0000000000 +vt 0.4999999702 0.9227918386 0.0000000000 +vt 0.5386040211 0.9227918386 0.0000000000 +vt 0.5624999404 0.9227918386 0.0000000000 +vt 0.6011040807 0.9227918386 0.0000000000 +vt 0.6250000000 0.9227918386 0.0000000000 +vt 0.6636040211 0.9227918386 0.0000000000 +vt 0.6874999404 0.9227918386 0.0000000000 +vt 0.7261040807 0.9227918386 0.0000000000 +vt 0.7500000000 0.9227918386 0.0000000000 +vt 0.7886041403 0.9227918386 0.0000000000 +vt 0.8125000000 0.9227918386 0.0000000000 +vt 0.8511041403 0.9227918386 0.0000000000 +vt 0.8750000596 0.9227918386 0.0000000000 +vt 0.9136041403 0.9227918386 0.0000000000 +vt 0.9375000596 0.9227918386 0.0000000000 +# 74 texture vertices + +vn -0.0006326789 -0.0045822668 0.0018980372 +vn -0.0036875238 -0.0027927805 0.0018980370 +vn -0.0045822668 0.0006326793 0.0018980372 +vn -0.0027927801 0.0036875235 0.0018980375 +vn 0.0006326789 0.0045822668 0.0018980376 +vn 0.0036875233 0.0027927808 0.0018980375 +vn 0.0045822673 -0.0006326777 0.0018980372 +vn 0.0027927812 -0.0036875231 0.0018980368 +vn 0.0004025514 -0.0037669437 0.0032631406 +vn -0.0023789846 -0.0029482779 0.0032631408 +vn -0.0037669435 -0.0004025510 0.0032631408 +vn -0.0029482776 0.0023789846 0.0032631413 +vn -0.0004025509 0.0037669432 0.0032631410 +vn 0.0023789844 0.0029482779 0.0032631410 +vn 0.0037669435 0.0004025517 0.0032631408 +vn 0.0029482783 -0.0023789839 0.0032631406 +vn 0.0000000000 -0.0000000002 0.0049999999 +vn -0.0000000000 0.0000000001 0.0049999999 +vn 0.0000000000 0.0000659771 0.0049995645 +vn -0.0000252484 0.0000609549 0.0049995645 +vn -0.0000466531 0.0000466528 0.0049995645 +vn -0.0000609551 0.0000252485 0.0049995645 +vn -0.0000659771 0.0000000000 0.0049995645 +vn -0.0000609552 -0.0000252483 0.0049995645 +vn -0.0000466531 -0.0000466526 0.0049995645 +vn -0.0000252482 -0.0000609550 0.0049995645 +vn -0.0000000000 -0.0000659772 0.0049995645 +vn 0.0000252482 -0.0000609550 0.0049995645 +vn 0.0000466531 -0.0000466526 0.0049995645 +vn 0.0000609552 -0.0000252483 0.0049995645 +vn 0.0000659771 0.0000000000 0.0049995645 +vn 0.0000609551 0.0000252485 0.0049995645 +vn 0.0000466530 0.0000466528 0.0049995645 +vn 0.0000252484 0.0000609549 0.0049995645 +# 34 vertex normals g Fret_tap -f 2/1/1 1/2/1 10/3/1 -f 1/2/1 9/4/1 10/3/1 -f 11/5/2 3/6/2 2/1/2 -f 2/1/2 10/3/2 11/5/2 -f 12/7/3 4/8/3 3/6/3 -f 3/6/3 11/5/3 12/7/3 -f 13/9/4 5/10/4 4/8/4 -f 4/8/4 12/7/4 13/9/4 -f 14/11/5 6/12/5 5/10/5 -f 5/10/6 13/9/6 14/11/6 -f 15/13/7 7/14/7 6/12/7 -f 6/12/7 14/11/7 15/13/7 -f 16/15/8 8/16/8 7/14/8 -f 7/14/8 15/13/8 16/15/8 -f 9/17/9 1/18/9 8/16/9 -f 8/16/9 16/15/9 9/17/9 -f 17/19/10 10/3/10 9/4/10 -f 17/20/11 11/5/11 10/3/11 -f 17/21/12 12/7/12 11/5/12 -f 17/22/13 13/9/13 12/7/13 -f 17/23/14 14/11/14 13/9/14 -f 17/24/15 15/13/15 14/11/15 -f 17/25/16 16/15/16 15/13/16 -f 17/26/17 9/17/17 16/15/17 +f 10/11/10 2/2/2 1/1/1 +f 1/1/1 9/10/9 10/11/10 +f 11/12/11 3/3/3 2/2/2 +f 2/2/2 10/11/10 11/12/11 +f 12/13/12 4/4/4 3/3/3 +f 3/3/3 11/12/11 12/13/12 +f 13/14/13 5/5/5 4/4/4 +f 4/4/4 12/13/12 13/14/13 +f 14/15/14 6/6/6 5/5/5 +f 5/5/5 13/14/13 14/15/14 +f 15/16/15 7/7/7 6/6/6 +f 6/6/6 14/15/14 15/16/15 +f 16/17/16 8/8/8 7/7/7 +f 7/7/7 15/16/15 16/17/16 +f 9/18/9 1/9/1 8/8/8 +f 8/8/8 16/17/16 9/18/9 +f 17/19/17 10/11/10 9/10/9 +f 17/20/17 11/12/11 10/11/10 +f 17/21/17 12/13/12 11/12/11 +f 17/22/17 13/14/13 12/13/12 +f 17/23/17 14/15/14 13/14/13 +f 17/24/17 15/16/15 14/15/14 +f 17/25/17 16/17/16 15/16/15 +f 17/26/17 9/18/9 16/17/16 +f 18/27/18 19/43/19 20/45/20 +f 18/28/18 20/46/20 21/47/21 +f 18/29/18 21/48/21 22/49/22 +f 18/30/18 22/50/22 23/51/23 +f 18/31/18 23/52/23 24/53/24 +f 18/32/18 24/54/24 25/55/25 +f 18/33/18 25/56/25 26/57/26 +f 18/34/18 26/58/26 27/59/27 +f 18/35/18 27/60/27 28/61/28 +f 18/36/18 28/62/28 29/63/29 +f 18/37/18 29/64/29 30/65/30 +f 18/38/18 30/66/30 31/67/31 +f 18/39/18 31/68/31 32/69/32 +f 18/40/18 32/70/32 33/71/33 +f 18/41/18 33/72/33 34/73/34 +f 18/42/18 34/74/34 19/44/19 +# 40 faces +g |
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-30 20:45:44
|
Module: performous Branch: master Commit: 2ab964f0f9d8c0c8629dafb2b184d47c06dbf2b4 Author: Lasse Karkkainen <tro...@tr...> Date: Mon Nov 30 22:44:59 2009 +0200 Hack for Windows build --- libs/plugin++/include/plugin++/dllhelper.hpp | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/libs/plugin++/include/plugin++/dllhelper.hpp b/libs/plugin++/include/plugin++/dllhelper.hpp index bcb5593..612ab08 100644 --- a/libs/plugin++/include/plugin++/dllhelper.hpp +++ b/libs/plugin++/include/plugin++/dllhelper.hpp @@ -2,11 +2,15 @@ #if defined _WIN32 || defined __CYGWIN__ +// A hack to allow static library build (for now) -Tronic +#define DLL_PUBLIC +#if 0 #ifdef BUILDING_DLL #define DLL_PUBLIC __declspec(dllexport) #else #define DLL_PUBLIC __declspec(dllimport) #endif +#endif #else |
|
From: Markus R. <god...@us...> - 2009-11-30 20:36:34
|
Module: performous
Branch: master
Commit: b89f9d6634daf6150009e967f00bbf186e7112e0
Author: Markus Raab <un...@ma...>
Date: Mon Nov 30 21:36:07 2009 +0100
Quick hack to show scores in players menu
---
game/database.cc | 2 +-
game/screen_players.cc | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/game/database.cc b/game/database.cc
index c53a57d..5b06dda 100644
--- a/game/database.cc
+++ b/game/database.cc
@@ -120,7 +120,7 @@ void Database::queryPerSongHiscore (std::ostream & os, boost::shared_ptr<Song> s
void Database::queryPerPlayerHiscore (std::ostream & os, std::string const& track) const {
int playerid = m_players.lookup(m_players.current().name);
- std::vector<HiscoreItem> hi = m_hiscores.queryHiscore(10, playerid, -1, track);
+ std::vector<HiscoreItem> hi = m_hiscores.queryHiscore(3, playerid, -1, track);
for (size_t i=0; i<hi.size(); ++i)
{
os << i+1 << ".\t"
diff --git a/game/screen_players.cc b/game/screen_players.cc
index 8caa6ba..ec4cd2c 100644
--- a/game/screen_players.cc
+++ b/game/screen_players.cc
@@ -102,7 +102,7 @@ void ScreenPlayers::draw() {
std::string music, songbg, video;
double videoGap = 0.0;
std::ostringstream oss_song, oss_order;
- // Test if there are no songs
+ // Test if there are no players currently selected
if (m_players.empty()) {
// Format the song information text
if (m_search.text.empty()) {
@@ -118,8 +118,9 @@ void ScreenPlayers::draw() {
oss_song << m_database.scores.front().track << "\n";
oss_song << "You reached " << m_database.scores.front().score << " points!";
oss_order << "Please enter your Name!\n"
- << "Name: " << m_players.current().name << '\n'
- << "Search Text: "
+ << "Name: " << m_players.current().name << '\n';
+ m_database.queryPerPlayerHiscore(oss_order);
+ oss_order << "\nSearch Text: "
<< (m_search.text.empty() ? std::string("please enter") : m_search.text)
<< '\n';
double spos = m_players.currentPosition(); // This needs to be polled to run the animation
|
|
From: Tapio V. <aa...@us...> - 2009-11-30 19:38:46
|
Module: performous Branch: master Commit: 81c35b5159236a337400fcc7805e71e0e3e3af74 Author: Tapio Vierros <tap...@gm...> Date: Mon Nov 30 21:30:18 2009 +0200 Initial implementation of glow effect from bottom of instrument necks when playing correctly. --- game/guitargraph.cc | 23 ++++ game/guitargraph.hh | 3 + themes/default/neck_glow.svg | 293 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 319 insertions(+), 0 deletions(-) |
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-30 18:25:12
|
Module: performous Branch: master Commit: b0c68405e1313114d9f765f3105d75cdf965ed53 Author: Lasse Karkkainen <tro...@tr...> Date: Mon Nov 30 20:24:47 2009 +0200 Extra guitar docs --- docs/instruments.txt | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/docs/instruments.txt b/docs/instruments.txt index e76a195..7afcd50 100644 --- a/docs/instruments.txt +++ b/docs/instruments.txt @@ -16,6 +16,8 @@ Ex: A5- => SDL axis 4 with negative value START: B10 SELECT: B9 PS3: B13 + STAR POWER: N/A? + MIC SWITCH: N/A? DOWN: A6+ UP: A6- LEFT: A5- @@ -60,6 +62,8 @@ Ex: A5- => SDL axis 4 with negative value START: B10 SELECT: B9 PS3: B13 + STAR POWER: B5 + MIC SWITCH: A4 DOWN: A6+ UP: A6- LEFT: A5- |
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-30 17:48:29
|
Module: performous
Branch: master
Commit: 0687af67c912dd72102915d9cc0c3acd0002e0d9
Author: Lasse Karkkainen <tro...@tr...>
Date: Mon Nov 30 19:48:15 2009 +0200
Making STARPOWER appear as a button instead of separate event type (simplifies joystick.cc greatly) and fixing related bug (all frets getting pressed status when activated). Some cleanup on guitargraph.cc as well.
---
game/guitargraph.cc | 12 +++++++-----
game/joystick.cc | 38 ++++++++++----------------------------
game/joystick.hh | 3 ++-
3 files changed, 19 insertions(+), 34 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 6dfee01..7bd4f37 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -142,12 +142,14 @@ void GuitarGraph::engine() {
// Handle all events
for (input::Event ev; m_input.tryPoll(ev);) {
m_dead = false;
- if (!m_drums && ev.type == input::Event::RELEASE) {
- endHold(ev.button);
+ if (!m_drums) {
+ if ((ev.type == input::Event::PRESS || ev.type == input::Event::RELEASE) && ev.button == input::STARPOWER_BUTTON) {
+ if (ev.type == input::Event::PRESS) activateStarpower();
+ continue;
+ }
+ if (ev.type == input::Event::RELEASE) endHold(ev.button);
+ if (ev.type == input::Event::WHAMMY) whammy = (1.0 + ev.button + 2.0*(rand()/double(RAND_MAX))) / 4.0;
}
- if (!m_drums && ev.type == input::Event::WHAMMY)
- whammy = (1.0 + ev.button + 2.0*(rand()/double(RAND_MAX))) / 4.0;
- if (!m_drums && ev.type == input::Event::STARPOWER) activateStarpower();
if (ev.type == input::Event::PRESS) m_hit[!m_drums + ev.button].setValue(1.0);
else if (ev.type == input::Event::PICK) m_hit[0].setValue(1.0);
if (time < -0.5) {
diff --git a/game/joystick.cc b/game/joystick.cc
index 30eeaba..1627416 100644
--- a/game/joystick.cc
+++ b/game/joystick.cc
@@ -215,14 +215,8 @@ bool input::SDL::pushEvent(SDL_Event _e) {
}
devices[joy_id].addEvent(event);
return true;
- case SDLK_F6:
- event.type = input::Event::STARPOWER;
- event.button = 1;
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- devices[joy_id].addEvent(event);
- return true;
+ case SDLK_F6: case SDLK_6:
+ button++;
case SDLK_F5: case SDLK_5:
button++;
case SDLK_F4: case SDLK_4:
@@ -262,14 +256,8 @@ bool input::SDL::pushEvent(SDL_Event _e) {
}
devices[joy_id].addEvent(event);
return true;
- case SDLK_F6:
- event.type = input::Event::STARPOWER;
- event.button = 0;
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- devices[joy_id].addEvent(event);
- return true;
+ case SDLK_F6: case SDLK_6:
+ button++;
case SDLK_F5: case SDLK_5:
button++;
case SDLK_F4: case SDLK_4:
@@ -334,14 +322,10 @@ bool input::SDL::pushEvent(SDL_Event _e) {
if(!devices[joy_id].assigned()) return false;
button = buttonFromSDL(devices[joy_id].type(),_e.jbutton.button);
if( button == -1 ) return false;
- if( button == 5) {
- event.type = input::Event::STARPOWER;
- } else {
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- event.type = input::Event::PRESS;
+ for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
+ event.pressed[i] = devices[joy_id].pressed(i);
}
+ event.type = input::Event::PRESS;
event.button = button;
event.pressed[button] = true;
devices[joy_id].addEvent(event);
@@ -351,12 +335,10 @@ bool input::SDL::pushEvent(SDL_Event _e) {
if(!devices[joy_id].assigned()) return false;
button = buttonFromSDL(devices[joy_id].type(),_e.jbutton.button);
if( button == -1 ) return false;
- if( button != 5) {
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- event.type = input::Event::RELEASE;
+ for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
+ event.pressed[i] = devices[joy_id].pressed(i);
}
+ event.type = input::Event::RELEASE;
event.button = button;
event.pressed[button] = false;
devices[joy_id].addEvent(event);
diff --git a/game/joystick.hh b/game/joystick.hh
index 23f5da4..f476212 100644
--- a/game/joystick.hh
+++ b/game/joystick.hh
@@ -19,9 +19,10 @@ namespace input {
enum DevType { GUITAR, DRUMS };
static const std::size_t BUTTONS = 6;
+ static const std::size_t STARPOWER_BUTTON = BUTTONS - 1;
struct Event {
- enum Type { PRESS, RELEASE, PICK, WHAMMY, STARPOWER };
+ enum Type { PRESS, RELEASE, PICK, WHAMMY };
Type type;
int button; // Translated button number for press/release events. 0 for pick down, 1 for pick up (NOTE: these are NOT pick press/release events but rather different directions)
bool pressed[BUTTONS]; // All events tell the button state right after the event happened
|
|
From: Tapio V. <aa...@us...> - 2009-11-30 13:59:48
|
Module: performous
Branch: master
Commit: abb36a2a99c7a197d6e2477bad0a2b62564b5341
Author: Tapio Vierros <tap...@gm...>
Date: Mon Nov 30 15:59:12 2009 +0200
Starpower gameplay tweaks.
---
game/guitargraph.cc | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 512552f..6dfee01 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -193,7 +193,8 @@ void GuitarGraph::engine() {
double t = last - ev.holdTime;
if (t > 0) {
// Minimal points for long holds unless whammy is used
- double wfactor = (ev.dur->end - ev.dur->begin < 1.5 || ev.whammy.get() > 0.01) ? 1.0 : 0.2;
+ double wfactor = (ev.dur->end - ev.dur->begin < 1.5 || ev.whammy.get() > 0.01
+ || m_starpower.get() > 0.01) ? 1.0 : 0.2;
m_score += t * 50.0 * wfactor;
// Whammy fills starmeter much faster
m_starmeter += t * 50 * ( (ev.whammy.get() > 0.01) ? 2.0 : 1.0 );
@@ -228,10 +229,12 @@ void GuitarGraph::endStreak() {
void GuitarGraph::fail(double time, int fret) {
std::cout << "MISS" << std::endl;
if (fret == -2) return; // Tapped note
- m_events.push_back(Event(time, 0, fret));
- if (fret < 0) fret = std::rand();
- m_audio.play(m_samples[unsigned(fret) % m_samples.size()], "audio/fail_volume");
- if (m_starpower.get() < 0.01) m_score -= 50;
+ if (m_starpower.get() < 0.01) {
+ m_events.push_back(Event(time, 0, fret));
+ if (fret < 0) fret = std::rand();
+ m_audio.play(m_samples[unsigned(fret) % m_samples.size()], "audio/fail_volume");
+ m_score -= 50;
+ }
endStreak();
}
|
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-30 08:39:47
|
Module: web Branch: master Commit: b50ff8db939edbeb602d116625c3572a1ac72a44 Author: Lasse Karkkainen <tro...@tr...> Date: Mon Nov 30 10:39:34 2009 +0200 Add hiscore button --- htdocs-source/commands.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/htdocs-source/commands.txt b/htdocs-source/commands.txt index c590554..3eda12a 100644 --- a/htdocs-source/commands.txt +++ b/htdocs-source/commands.txt @@ -31,6 +31,7 @@ The only inputs are your microphone and drums. Exit when you are done. <span class="key">âµ</span>: Sing the song. <span class="key">â</span>/<span class="key">â</span>: Browse songs. +<span class="key">End</span>: Display song hiscores. :h3:In normal mode <span class="key">A</span><span class="key">B</span><span class="key">C</span>...: Type ahead to find/filter songs (<span class="key">Esc</span> to clear). |
|
From: Tapio V. <aa...@us...> - 2009-11-29 22:31:47
|
Module: performous
Branch: master
Commit: 7c12b0600dd8b23a22f33eb5c995baf29a30e58f
Author: Tapio Vierros <tap...@gm...>
Date: Mon Nov 30 00:30:16 2009 +0200
A streak "popup" after each 50 correct notes.
---
game/guitargraph.cc | 34 +++++++++++++++++++++++++++++-----
game/guitargraph.hh | 4 ++++
2 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 9c5c44d..512552f 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -41,6 +41,7 @@ namespace {
return score;
}
+ int getNextBigStreak(int prev) { return prev + 50; }
inline float blend(float a, float b, float f) { return a*f + b*(1.0f-f); }
glutil::Color starpowerColorize(glutil::Color c, float f) {
@@ -74,11 +75,13 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
m_dead(1000),
m_text(getThemePath("sing_timetxt.svg"), config["graphic/text_lod"].f()),
m_correctness(0.0, 5.0),
+ m_streakPopup(0.0, 1.0),
m_score(),
m_scoreFactor(),
m_starmeter(),
m_streak(),
- m_longestStreak()
+ m_longestStreak(),
+ m_bigStreak()
{
try {
m_fretObj.load(getThemePath("fret.obj"));
@@ -87,6 +90,7 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
std::cout << e.what() << std::endl;
m_use3d = false;
}
+ m_streakPopupText.reset(new SvgTxtThemeSimple(getThemePath("sing_score_text.svg"), config["graphic/text_lod"].f()));
unsigned int sr = m_audio.getSR();
if (m_drums) {
m_samples.push_back(Sample(getPath("sounds/drum_bass.ogg"), sr));
@@ -173,7 +177,7 @@ void GuitarGraph::engine() {
else level = m_chordIt->status ? 1.0 : 0.0;
m_correctness.setTarget(level);
}
- if (m_correctness.get() == 0) m_streak = 0;
+ if (m_correctness.get() == 0) endStreak();
if (!m_drums) {
// Processing holds
for (int fret = 0; fret < 5; ++fret) {
@@ -198,6 +202,11 @@ void GuitarGraph::engine() {
if (last == ev.dur->end) endHold(fret);
}
}
+ // Check if a long streak goal has been reached
+ if (m_streak >= getNextBigStreak(m_bigStreak)) {
+ m_streakPopup.setTarget(1.0);
+ m_bigStreak = getNextBigStreak(m_bigStreak);
+ }
}
void GuitarGraph::activateStarpower() {
@@ -211,6 +220,11 @@ void GuitarGraph::endHold(int fret) {
m_holds[fret] = 0;
}
+void GuitarGraph::endStreak() {
+ m_streak = 0;
+ m_bigStreak = 0;
+}
+
void GuitarGraph::fail(double time, int fret) {
std::cout << "MISS" << std::endl;
if (fret == -2) return; // Tapped note
@@ -218,7 +232,7 @@ void GuitarGraph::fail(double time, int fret) {
if (fret < 0) fret = std::rand();
m_audio.play(m_samples[unsigned(fret) % m_samples.size()], "audio/fail_volume");
if (m_starpower.get() < 0.01) m_score -= 50;
- m_streak = 0;
+ endStreak();
}
void GuitarGraph::drumHit(double time, int fret) {
@@ -239,7 +253,7 @@ void GuitarGraph::drumHit(double time, int fret) {
for (; best != m_chordIt; ++m_chordIt) {
if (m_chordIt->status == m_chordIt->polyphony) continue;
std::cout << "SKIPPED, ";
- m_streak = 0;
+ endStreak();
}
++m_chordIt->status;
Duration const* dur = m_chordIt->dur[fret];
@@ -481,12 +495,22 @@ void GuitarGraph::draw(double time) {
}
glTranslatef(-frac * 2.0 * offsetX, 0.0f, 0.0f);
}
-
+ // Is Starpower ready?
if (canActivateStarpower(m_starmeter)) {
float a = (int(time * 1000.0) % 1000) / 1000.0;
m_text.dimensions.screenBottom(-0.02).middle(-0.12 + offsetX);
m_text.draw("Starpower Ready!", a);
}
+ // Draw streak pop-up for long streak intervals
+ double streakAnim = m_streakPopup.get();
+ if (streakAnim > 0.0) {
+ double s = 0.2 * (1.0 + streakAnim);
+ glColor4f(1.0f, 0.0f, 0.0f, 1.0 - streakAnim);
+ m_streakPopupText->render(boost::lexical_cast<std::string>(unsigned(m_bigStreak)) + "\nStreak!");
+ m_streakPopupText->dimensions().center(0.1).middle(0.0).stretch(s,s);
+ m_streakPopupText->draw();
+ if (streakAnim > 0.999) m_streakPopup.setTarget(0.0, true);
+ }
glColor3f(1.0f, 1.0f, 1.0f);
}
diff --git a/game/guitargraph.hh b/game/guitargraph.hh
index 08ea02e..09e380f 100644
--- a/game/guitargraph.hh
+++ b/game/guitargraph.hh
@@ -65,6 +65,7 @@ class GuitarGraph {
void activateStarpower();
void fail(double time, int fret);
void endHold(int fret);
+ void endStreak();
Audio& m_audio;
input::InputDev m_input;
Song const& m_song;
@@ -113,6 +114,7 @@ class GuitarGraph {
void difficultyAuto(bool tryKeepCurrent = false);
bool difficulty(Difficulty level);
SvgTxtTheme m_text;
+ boost::scoped_ptr<SvgTxtThemeSimple> m_streakPopupText;
void updateChords();
typedef std::vector<Chord> Chords;
Chords m_chords;
@@ -120,10 +122,12 @@ class GuitarGraph {
typedef std::map<Duration const*, unsigned> NoteStatus; // Note in song to m_events[unsigned - 1] or 0 for not played
NoteStatus m_notes;
AnimValue m_correctness;
+ AnimValue m_streakPopup;
double m_score;
double m_scoreFactor;
double m_starmeter;
int m_streak;
int m_longestStreak;
+ int m_bigStreak;
};
|
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-29 22:16:48
|
Module: performous
Branch: menu
Commit: a95803c43a0e6868e63d27553fb8642e218c5e22
Author: Lasse Karkkainen <tro...@tr...>
Date: Mon Nov 30 00:16:37 2009 +0200
Add notes about menu
---
game/screen_intro.cc | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/game/screen_intro.cc b/game/screen_intro.cc
index d50b990..885912c 100644
--- a/game/screen_intro.cc
+++ b/game/screen_intro.cc
@@ -20,6 +20,20 @@ void ScreenIntro::exit() {
m_dialog.reset();
}
+/*
+Tronic's note on making the menu more generic:
+
+struct MenuOption {
+ std::string screen;
+ Surface image;
+};
+
+In ScreenIntro:
+std::vector<MenuOption> m_menuOptions;
+
+This should avoid all if-elses for testing selected == 1, ...
+*/
+
void ScreenIntro::manageEvent(SDL_Event event) {
ScreenManager* sm = ScreenManager::getSingletonPtr();
if (event.type == SDL_KEYDOWN) {
|
|
From: Tapio V. <aa...@us...> - 2009-11-29 21:07:38
|
Module: performous
Branch: master
Commit: cb009e3dc88481ae31a2b394726663ab4f3ed725
Author: Tapio Vierros <tap...@gm...>
Date: Sun Nov 29 23:03:57 2009 +0200
Simple starmeter system.
Playing correctly increses starmeter, using whammy increases it more.
Once meter is full Starpower becomes available.
---
game/guitargraph.cc | 155 +++++++++++++++++++++++++++++----------------------
game/guitargraph.hh | 2 +
game/opengl_text.cc | 4 +-
game/opengl_text.hh | 4 +-
4 files changed, 94 insertions(+), 71 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index cff1825..9c5c44d 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -53,6 +53,7 @@ namespace {
return c;
}
+ bool canActivateStarpower(int meter) { return (meter > 6000); }
}
GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
@@ -75,6 +76,7 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, std::string track):
m_correctness(0.0, 5.0),
m_score(),
m_scoreFactor(),
+ m_starmeter(),
m_streak(),
m_longestStreak()
{
@@ -141,7 +143,7 @@ void GuitarGraph::engine() {
}
if (!m_drums && ev.type == input::Event::WHAMMY)
whammy = (1.0 + ev.button + 2.0*(rand()/double(RAND_MAX))) / 4.0;
- if (!m_drums && ev.type == input::Event::STARPOWER) m_starpower.setValue(1.0);
+ if (!m_drums && ev.type == input::Event::STARPOWER) activateStarpower();
if (ev.type == input::Event::PRESS) m_hit[!m_drums + ev.button].setValue(1.0);
else if (ev.type == input::Event::PICK) m_hit[0].setValue(1.0);
if (time < -0.5) {
@@ -189,6 +191,8 @@ void GuitarGraph::engine() {
// Minimal points for long holds unless whammy is used
double wfactor = (ev.dur->end - ev.dur->begin < 1.5 || ev.whammy.get() > 0.01) ? 1.0 : 0.2;
m_score += t * 50.0 * wfactor;
+ // Whammy fills starmeter much faster
+ m_starmeter += t * 50 * ( (ev.whammy.get() > 0.01) ? 2.0 : 1.0 );
ev.holdTime = time;
}
if (last == ev.dur->end) endHold(fret);
@@ -196,6 +200,10 @@ void GuitarGraph::engine() {
}
}
+void GuitarGraph::activateStarpower() {
+ if (canActivateStarpower(m_starmeter)) { m_starmeter = 0; m_starpower.setValue(1.0); }
+}
+
void GuitarGraph::endHold(int fret) {
if (!m_holds[fret]) return;
m_events[m_holds[fret] - 1].glow.setTarget(0.0);
@@ -308,6 +316,7 @@ void GuitarGraph::guitarPlay(double time, input::Event const& ev) {
score *= m_chordIt->polyphony;
m_chordIt->status = 1 + picked;
m_score += score;
+ m_starmeter += score;
m_streak += 1;
if (m_streak > m_longestStreak) m_longestStreak = m_streak;
m_correctness.setTarget(1.0, true); // Instantly go to one
@@ -395,76 +404,88 @@ void GuitarGraph::draw(double time) {
m_text.draw(boost::lexical_cast<std::string>(unsigned(m_streak)) + "/"
+ boost::lexical_cast<std::string>(unsigned(m_longestStreak)));
}
- glutil::PushMatrixMode pmm(GL_PROJECTION);
- glTranslatef(frac * 2.0 * offsetX, 0.0f, 0.0f);
- glutil::PushMatrixMode pmb(GL_MODELVIEW);
- glTranslatef((1.0 - frac) * offsetX, dimensions.y2(), 0.0f);
- glRotatef(g_angle, 1.0f, 0.0f, 0.0f);
- { float s = dimensions.w() / 5.0f; glScalef(s, s, s); }
- // Draw the neck
{
- UseTexture tex(*m_neck);
- glutil::Begin block(GL_TRIANGLE_STRIP);
- float w = (m_drums ? 2.0f : 2.5f);
- float texCoord = 0.0f;
- float tBeg = 0.0f, tEnd;
- for (Song::Beats::const_iterator it = m_song.beats.begin(); it != m_song.beats.end() && tBeg < future; ++it, texCoord += texCoordStep, tBeg = tEnd) {
- tEnd = *it - time;
- //if (tEnd < past) continue;
- if (tEnd > future) {
- // Crop the end off
- texCoord -= texCoordStep * (tEnd - future) / (tEnd - tBeg);
- tEnd = future;
+ glutil::PushMatrixMode pmm(GL_PROJECTION);
+ glTranslatef(frac * 2.0 * offsetX, 0.0f, 0.0f);
+ {
+ glutil::PushMatrixMode pmb(GL_MODELVIEW);
+ glTranslatef((1.0 - frac) * offsetX, dimensions.y2(), 0.0f);
+ glRotatef(g_angle, 1.0f, 0.0f, 0.0f);
+ { float s = dimensions.w() / 5.0f; glScalef(s, s, s); }
+ // Draw the neck
+ {
+ UseTexture tex(*m_neck);
+ glutil::Begin block(GL_TRIANGLE_STRIP);
+ float w = (m_drums ? 2.0f : 2.5f);
+ float texCoord = 0.0f;
+ float tBeg = 0.0f, tEnd;
+ for (Song::Beats::const_iterator it = m_song.beats.begin(); it != m_song.beats.end() && tBeg < future; ++it, texCoord += texCoordStep, tBeg = tEnd) {
+ tEnd = *it - time;
+ //if (tEnd < past) continue;
+ if (tEnd > future) {
+ // Crop the end off
+ texCoord -= texCoordStep * (tEnd - future) / (tEnd - tBeg);
+ tEnd = future;
+ }
+ glutil::Color c(1.0f, 1.0f, 1.0f, time2a(tEnd));
+ glColor4fv(starpowerColorize(c, m_starpower.get()));
+ glNormal3f(0.0f, 1.0f, 0.0f);
+ glTexCoord2f(0.0f, texCoord); glVertex2f(-w, time2y(tEnd));
+ glNormal3f(0.0f, 1.0f, 0.0f);
+ glTexCoord2f(1.0f, texCoord); glVertex2f(w, time2y(tEnd));
+ }
}
- glutil::Color c(1.0f, 1.0f, 1.0f, time2a(tEnd));
- glColor4fv(starpowerColorize(c, m_starpower.get()));
- glNormal3f(0.0f, 1.0f, 0.0f);
- glTexCoord2f(0.0f, texCoord); glVertex2f(-w, time2y(tEnd));
- glNormal3f(0.0f, 1.0f, 0.0f);
- glTexCoord2f(1.0f, texCoord); glVertex2f(w, time2y(tEnd));
- }
- }
- // Draw the cursor
- float level = m_hit[0].get();
- glColor3f(level, level, level);
- drawBar(0.0, 0.01f);
- // Fret buttons on cursor
- for (int fret = m_drums; fret < 5; ++fret) {
- float x = -2.0f + fret - 0.5f * m_drums;
- float l = m_hit[fret + !m_drums].get();
- glColor4fv(starpowerColorize(color(fret), m_starpower.get()));
- //glColor4fv(c);
- m_button.dimensions.center(time2y(0.0)).middle(x);
- m_button.draw();
- glColor3f(l, l, l);
- m_tap.dimensions = m_button.dimensions;
- m_tap.draw();
- }
- // Draw the notes
- glutil::UseLighting lighting(m_use3d);
- for (Chords::const_iterator it = m_chords.begin(); it != m_chords.end(); ++it) {
- float tBeg = it->begin - time;
- float tEnd = it->end - time;
- if (tEnd < past) continue;
- if (tBeg > future) break;
- for (int fret = 0; fret < 5; ++fret) {
- if (!it->fret[fret]) continue;
- if (tEnd > future) tEnd = future;
- //drawNote(fret, color(fret), tBeg, tEnd);
- unsigned event = m_notes[it->dur[fret]];
- float glow = 0.0f;
- float whammy = 0.0f;
- if (event > 0) {
- glow = m_events[event - 1].glow.get();
- whammy = m_events[event - 1].whammy.get();
+ // Draw the cursor
+ float level = m_hit[0].get();
+ glColor3f(level, level, level);
+ drawBar(0.0, 0.01f);
+ // Fret buttons on cursor
+ for (int fret = m_drums; fret < 5; ++fret) {
+ float x = -2.0f + fret - 0.5f * m_drums;
+ float l = m_hit[fret + !m_drums].get();
+ glColor4fv(starpowerColorize(color(fret), m_starpower.get()));
+ m_button.dimensions.center(time2y(0.0)).middle(x);
+ m_button.draw();
+ glColor3f(l, l, l);
+ m_tap.dimensions = m_button.dimensions;
+ m_tap.draw();
}
- glutil::Color c = starpowerColorize(color(fret), m_starpower.get());
- c.r += glow;
- c.g += glow;
- c.b += glow;
- drawNote(fret, c, tBeg, tEnd, whammy, it->tappable);
-
+ // Draw the notes
+ glutil::UseLighting lighting(m_use3d);
+ for (Chords::const_iterator it = m_chords.begin(); it != m_chords.end(); ++it) {
+ float tBeg = it->begin - time;
+ float tEnd = it->end - time;
+ if (tEnd < past) continue;
+ if (tBeg > future) break;
+ for (int fret = 0; fret < 5; ++fret) {
+ if (!it->fret[fret]) continue;
+ if (tEnd > future) tEnd = future;
+ //drawNote(fret, color(fret), tBeg, tEnd);
+ unsigned event = m_notes[it->dur[fret]];
+ float glow = 0.0f;
+ float whammy = 0.0f;
+ if (event > 0) {
+ glow = m_events[event - 1].glow.get();
+ whammy = m_events[event - 1].whammy.get();
+ }
+ glutil::Color c = starpowerColorize(color(fret), m_starpower.get());
+ c.r += glow;
+ c.g += glow;
+ c.b += glow;
+ drawNote(fret, c, tBeg, tEnd, whammy, it->tappable);
+ }
+ }
+ glRotatef(-g_angle, 1.0f, 0.0f, 0.0f);
+ glTranslatef(-(1.0 - frac) * offsetX, -dimensions.y2(), 0.0f);
+ glScalef(5.0f, 5.0f, 5.0f);
}
+ glTranslatef(-frac * 2.0 * offsetX, 0.0f, 0.0f);
+ }
+
+ if (canActivateStarpower(m_starmeter)) {
+ float a = (int(time * 1000.0) % 1000) / 1000.0;
+ m_text.dimensions.screenBottom(-0.02).middle(-0.12 + offsetX);
+ m_text.draw("Starpower Ready!", a);
}
glColor3f(1.0f, 1.0f, 1.0f);
}
diff --git a/game/guitargraph.hh b/game/guitargraph.hh
index eaa9406..08ea02e 100644
--- a/game/guitargraph.hh
+++ b/game/guitargraph.hh
@@ -62,6 +62,7 @@ class GuitarGraph {
std::string getTrack() const { return m_track_index->first; }
std::string getDifficultyString() const;
private:
+ void activateStarpower();
void fail(double time, int fret);
void endHold(int fret);
Audio& m_audio;
@@ -121,6 +122,7 @@ class GuitarGraph {
AnimValue m_correctness;
double m_score;
double m_scoreFactor;
+ double m_starmeter;
int m_streak;
int m_longestStreak;
};
diff --git a/game/opengl_text.cc b/game/opengl_text.cc
index 360582b..7652a82 100644
--- a/game/opengl_text.cc
+++ b/game/opengl_text.cc
@@ -196,13 +196,13 @@ void SvgTxtTheme::draw(std::vector<std::string> const& _text) {
draw(tmp);
}
-void SvgTxtTheme::draw(std::string _text) {
+void SvgTxtTheme::draw(std::string _text, float alpha) {
std::vector<TZoomText> tmp;
TZoomText t;
t.string = _text;
t.factor = 1.0;
tmp.push_back(t);
- draw(tmp);
+ draw(tmp, alpha);
}
void SvgTxtTheme::draw(std::vector<TZoomText> const& _text, float alpha) {
diff --git a/game/opengl_text.hh b/game/opengl_text.hh
index 2d9759d..4130fde 100644
--- a/game/opengl_text.hh
+++ b/game/opengl_text.hh
@@ -145,8 +145,8 @@ class SvgTxtTheme {
void draw(std::vector<TZoomText> const& _text, float alpha = 1.0f);
/// draw texts
void draw(std::vector<std::string> const& _text);
- /// draw text
- void draw(std::string _text);
+ /// draw text with alpha
+ void draw(std::string _text, float alpha = 1.0f);
/// sets highlight
void setHighlight(std::string _theme_file);
|
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-29 21:01:54
|
Module: performous
Branch: master
Commit: 5792168157706d932bac5adb11f851db1b28630c
Author: Lasse Karkkainen <tro...@tr...>
Date: Sun Nov 29 23:00:41 2009 +0200
Update package description
---
cmake/performous-packaging.cmake | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/cmake/performous-packaging.cmake b/cmake/performous-packaging.cmake
index d88f286..e727a0c 100644
--- a/cmake/performous-packaging.cmake
+++ b/cmake/performous-packaging.cmake
@@ -1,6 +1,6 @@
set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
-set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A karaoke game with pitch detection and scoring, similar to Singstar games. Previously known as UltraStar-NG. Supports songs in Ultrastar format.")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A karaoke and band game where one or more players perform a song and the game scores their performances. Supports songs in UltraStar and Frets on Fire formats. Microphones and instruments from SingStar, Guitar Hero and Rock Band are autodetected.")
set(CPACK_PACKAGE_CONTACT "http://performous.org/")
set(CPACK_SOURCE_IGNORE_FILES
"/.cvsignore"
|
|
From: Tapio V. <aa...@us...> - 2009-11-29 19:41:43
|
Module: performous
Branch: master
Commit: 6df62c63ca64a4adaecd924d83a5be0cbb1b77b6
Author: Tapio Vierros <tap...@gm...>
Date: Sun Nov 29 21:39:22 2009 +0200
Minimal points for long holds unless whammy is used.
---
game/guitargraph.cc | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 82c9089..cff1825 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -186,7 +186,9 @@ void GuitarGraph::engine() {
double last = std::min(time, ev.dur->end);
double t = last - ev.holdTime;
if (t > 0) {
- m_score += t * 50.0;
+ // Minimal points for long holds unless whammy is used
+ double wfactor = (ev.dur->end - ev.dur->begin < 1.5 || ev.whammy.get() > 0.01) ? 1.0 : 0.2;
+ m_score += t * 50.0 * wfactor;
ev.holdTime = time;
}
if (last == ev.dur->end) endHold(fret);
|
|
From: Tapio V. <aa...@us...> - 2009-11-29 19:41:41
|
Module: performous
Branch: master
Commit: 94cc4ac5bdbf8b6d769985a7592dc01e28d1d5b2
Author: Tapio Vierros <tap...@gm...>
Date: Sun Nov 29 20:56:27 2009 +0200
No minus points for errors when starpower is activated.
---
game/guitargraph.cc | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 2661353..82c9089 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -207,7 +207,7 @@ void GuitarGraph::fail(double time, int fret) {
m_events.push_back(Event(time, 0, fret));
if (fret < 0) fret = std::rand();
m_audio.play(m_samples[unsigned(fret) % m_samples.size()], "audio/fail_volume");
- m_score -= 50;
+ if (m_starpower.get() < 0.01) m_score -= 50;
m_streak = 0;
}
|
|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-29 19:38:16
|
Module: web Branch: master Commit: 14c643086de76aa8336a3838a3ea42c7a530a6e7 Author: Lasse Karkkainen <tro...@tr...> Date: Sun Nov 29 21:38:03 2009 +0200 Update manual about making songs --- htdocs-source/manual.txt | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/htdocs-source/manual.txt b/htdocs-source/manual.txt index 9059120..e931e13 100644 --- a/htdocs-source/manual.txt +++ b/htdocs-source/manual.txt @@ -50,6 +50,10 @@ Press Ctrl+S to save the currently active settings after changes or to store the See the keys page for more information. +:h2:Making songs + +Performous does not currently contain (useful) song editor. UltraStar format songs can be modified with a text editor or with one of the many available editors such as <a href="http://www.yass-along.com/home.html">YASS</a>. FoF format songs can be modified and created with a MIDI sequencer like <a href="http://www.rosegardenmusic.com/">Rosegarden</a>. It is recommended to use an existing song as a template when making a new one. With both formats, you need audio tracks (background with or without vocals and each instrument needs a separate track) in MP3 or other supported format and it is also good to have a cover image and a background video or image. + :h2:IRC channel You can reach us at <a href="irc://irc.freenode.net/performous">#performous</a> on Freenode. If you are not familiar with IRC, you can use <a href="http://webchat.freenode.net/?channels=#performous" target="performous_irc">webchat</a>. |