Added BIG transform. Haven't yet fixed the weird interaction it has with the score.

This commit is contained in:
Chris Danford
2003-02-16 20:27:53 +00:00
parent d52537825b
commit 12756391db
15 changed files with 301 additions and 119 deletions
+1
View File
@@ -18,6 +18,7 @@ NEW FEATURE: Option for user-selectable extra stage 1
CHANGE: Documentation now in HTML format.
CHANGE: Overhauled NoteSkin format. See README-FIRST.htm for details.
BUG FIX: Super-shuffle fixed (now doesn't add extra notes)
NEW FEATURE: Added BIG transform (changes notes on beats to jumps)
----------------------- Version 3.01 ---------------------------
CHANGE: Simplified NoteSkin tap graphic format. Old NoteSkins will need to
+159 -42
View File
@@ -6,13 +6,14 @@
<body>
<p>StepMania 3.0 final<br>
<p><font face="Courier New" size="2">StepMania 3.0 final<br>
&copy;2001-2003, StepMania team, All rights reserved.<br>
<a href="http://www.stepmania.com">http://www.stepmania.com</a></p>
<a href="http://www.stepmania.com">http://www.stepmania.com</a></font></p>
<p>
<hr>
Table of Contents
<font face="Courier New" size="2">Table of Contents </font>
<hr>
<font face="Courier New" size="2">
<br>
<a href="#About StepMania">About StepMania</a><br>
<a href="#Minimum Requirements">Minimum Requirements</a><br>
@@ -41,9 +42,13 @@ and Help</a> <br>
<br>
See the file <a href="NEWS">NEWS</a> for version history.<br>
<br>
</font>
<hr>
<font face="Courier New" size="2">
<a name="About StepMania">About StepMania</a><br>
</font>
<hr>
<font face="Courier New" size="2">
<br>
StepMania is capable of playing many game types. Currently, it supports games
similar to Dance Dance Revolution, Pump It Up, EZ 2 Dancer, and Para Para
@@ -56,9 +61,12 @@ controller in time to the. All games can be played using the keyboard, but the
real fun comes when using specially designed controllers, like a dance pad or
hand sensors.<br>
<br>
</font>
<hr>
<a name="Minimum Requirements">Minimum Requirements</a>
<font face="Courier New" size="2">
<a name="Minimum Requirements">Minimum Requirements</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
* Windows 98, Windows ME, Windows 2000, or Windows XP<br>
* Pentium II, Pentium III, Celeron, Athlon, or compatible processor, 266MHz
@@ -70,26 +78,35 @@ minimum (400 MHz recommended)<br>
* DivX 5 video codec for movie visualizations (www.divx.com)<br>
<br>
<br>
</font>
<hr>
<a name="DirectX">DirectX</a>
<font face="Courier New" size="2">
<a name="DirectX">DirectX</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
DirectX 8.0 is required before installing StepMania. If DirectX 8.0 is not
installed on your computer, the StepMania installer will display a warning and
abort the installation.<br>
<br>
</font>
<hr>
<a name="Installation">Installation</a>
<font face="Courier New" size="2">
<a name="Installation">Installation</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
To install StepMania, download the file stepmania300.exe to a known location on
your hard drive, then double-click the file icon to begin the installation. The
installer may prompt you to remove an older version of the program if one is
present. The default installation directory is 'C:\Program Files\StepMania'.<br>
<br>
</font>
<hr>
<a name="Controls">Controls</a>
<font face="Courier New" size="2">
<a name="Controls">Controls</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
Use the &quot;Config Key/Joy&quot; option from the Title Menu to configure your keyboard,
dance pad, or other game controller. This menu allows you to map up to 2
@@ -145,9 +162,12 @@ In editor:<br>
In the music select screen:<br>
* F9 = Toggle title translations<br>
<br>
</font>
<hr>
<a name="How StepMania Loads Songs">How StepMania Loads Songs</a>
<font face="Courier New" size="2">
<a name="How StepMania Loads Songs">How StepMania Loads Songs</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
All files for a specific song (data file, music file, banner, background) must
reside in a single folder. This folder must have the following path:<br>
@@ -182,9 +202,12 @@ fails, StepMania will guess which image is most appropriate.<br>
If there is exactly one movie in the song folder, StepMania will insert a
background change to that movie at beat 0.<br>
<br>
</font>
<hr>
<a name="Connecting Dance Pads">Connecting Dance Pads</a>
<font face="Courier New" size="2">
<a name="Connecting Dance Pads">Connecting Dance Pads</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
There are several devices that allow you to connect PlayStation dance pads to
your PC.<br>
@@ -221,9 +244,12 @@ is NTPad XP 1.x or
<br>
StepMania now natively supports USB Pump It Up pads.<br>
<br>
</font>
<hr>
<a name="Compatibility Issues">Compatibility Issues</a>
<font face="Courier New" size="2">
<a name="Compatibility Issues">Compatibility Issues</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
Some video card/driver combinations have visual errors when running StepMania.
If you experience any visual errors, please visit your video card manufacturer's
@@ -246,9 +272,12 @@ Symptom: Various graphical glitches.<br>
Explanation: These problems are most often caused by buggy video card drivers
bugs. Please upgrade to the latest drivers, which will hopefully fix the errors.<br>
<br>
</font>
<hr>
<a name="FAQ / Troubleshooting">FAQ / Troubleshooting</a>
<font face="Courier New" size="2">
<a name="FAQ / Troubleshooting">FAQ / Troubleshooting</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
* The error &quot;Cannot find Dinput8.dll&quot; appears when launching the game.<br>
<br>
@@ -276,9 +305,12 @@ Nope, Sorry. It's gotten me in trouble before.<br>
The reasons I won't tell is because: a) I don't know yet, and b) I don't want to
make anyone angry if it takes longer than expected (it usually does).<br>
<br>
</font>
<hr>
<a name="StepMania Packages - .smzip">StepMania Packages - .smzip</a>
<font face="Courier New" size="2">
<a name="StepMania Packages - .smzip">StepMania Packages - .smzip</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
The StepMania package format was created to make the distribution of songs and
other add-ons very easy. &nbsp;StepMania package files have the extension '.smzip'
@@ -300,10 +332,13 @@ will take all of the selected items and make one package that contains them all.
&quot;Export Individual&quot; will create one separate package for each selected item in
the list.<br>
<br>
</font>
<hr>
<font face="Courier New" size="2">
<a name="Questions, Bugs, Suggestions, and Help">Questions, Bugs, Suggestions,
and Help</a>
and Help</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
If you have a question about or problem with StepMania, please first ask your
question a StepMania message board. For a list of StepMania message boards, see
@@ -330,9 +365,12 @@ If you would like to help with development of StepMania, please send an email to
the <a href="mailto:stepmania-devs@sourceforge.net">StepMania developers list</a>
or to <a href="mailto:cdanford@u.washington.edu">Chris</a>.<br>
<br>
</font>
<hr>
<a name="The StepMania editor">The StepMania editor</a>
<font face="Courier New" size="2">
<a name="The StepMania editor">The StepMania editor</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
The StepMania editor allows you to edit, record, synchronize, and play back note
patterns. When you choose 'Save', your song will be saved in both the .SM format
@@ -352,9 +390,12 @@ the editor:<br>
* P - Play back current selection (if no selection, play whole song)<br>
* R - Record over current selection (if no selection, record whole song)<br>
<br>
</font>
<hr>
<a name="The .SM file format">The .SM file format</a>
<font face="Courier New" size="2">
<a name="The .SM file format">The .SM file format</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
The .SM song file format was created to be one file format that supports all
game types that StepMania can play (dance, pump, beat, guitar, etc). The syntax
@@ -405,22 +446,24 @@ the background should begin playing a new background named 'bg name'. 'beat' is
a fractional value value and 'bg name' is a string. Different bg changes are
separated by commas. e.g. &quot;60=falling,80=flower&quot;.&nbsp; When StepMania looks for
a backgound, it searches in this order:<br>
</font>
<ol>
<li>Looks for a movie with file name = &quot;bg name&quot; in the song folder. You must
include the file extension in &quot;bg name&quot;. e.g. &quot;60=falling.avi,80=flower.mpg&quot;.</li>
<li>Looks for a BGAnimation folder with the name &quot;bg name&quot; in the song folder.</li>
<li>Looks for a movie with file name &quot;bg name&quot; in the RandomMovies folder. You
must include the file extension in &quot;bg name&quot;. e.g. &quot;60=falling.avi,80=flower.mpg&quot;.</li>
<li>Looks for a BGAnimation with file name &quot;bg name&quot; in the BGAnimations folder.</li>
<li>Looks for a Visualization with the file name &quot;bg name&quot; in the Visualizations
<li><font face="Courier New" size="2">Looks for a movie with file name = &quot;bg name&quot; in the song folder. You must
include the file extension in &quot;bg name&quot;. e.g. &quot;60=falling.avi,80=flower.mpg&quot;.</font></li>
<li><font face="Courier New" size="2">Looks for a BGAnimation folder with the name &quot;bg name&quot; in the song folder.</font></li>
<li><font face="Courier New" size="2">Looks for a movie with file name &quot;bg name&quot; in the RandomMovies folder. You
must include the file extension in &quot;bg name&quot;. e.g. &quot;60=falling.avi,80=flower.mpg&quot;.</font></li>
<li><font face="Courier New" size="2">Looks for a BGAnimation with file name &quot;bg name&quot; in the BGAnimations folder.</font></li>
<li><font face="Courier New" size="2">Looks for a Visualization with the file name &quot;bg name&quot; in the Visualizations
folder. For example, suppose you have a song B4U and special B4U-specific
BGAnimations called &quot;robot&quot; and &quot;electric&quot;. First, move the robot and electric
BGAnimation folders into the B4U song folder (e.g. Songs\4th Mix\B4U\robot and
Songs\4th Mix\B4U\electric). Then, using the editor, insert a new background
change at each point in the song where you to switch to a new BGAnimation. When
prompted for the name of the background change, you could type either &quot;robot&quot; or
&quot;electric&quot;.</li>
&quot;electric&quot;.</font></li>
</ol>
<font face="Courier New" size="2">
<br>
Each pattern of notes has the same basic format:<br>
<br>
@@ -504,9 +547,12 @@ Example:<br>
0000<br>
;<br>
<br>
</font>
<hr>
<a name="Backgrounds">Backgrounds</a>
<font face="Courier New" size="2">
<a name="Backgrounds">Backgrounds</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
StepMania supports three different modes of backgrounds. The default background
mode can be set in the Graphic Options menu.<br>
@@ -532,9 +578,12 @@ computers.<br>
Sample animations, visualizations, and random movies can be found at
<a href="http://www.stepmania.com">www.stepmania.com</a>.<br>
<br>
</font>
<hr>
<a name="BGAnimations Format">BGAnimations Format</a>
<font face="Courier New" size="2">
<a name="BGAnimations Format">BGAnimations Format</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
The BGAnimations folder in the StepMania program directory may contain several
BGAnimation folders.<br>
@@ -621,21 +670,67 @@ TileFlipY,<br>
TilePulse,<br>
- Tiles zoom in and out.<br>
<br>
</font>
<hr>
<a name="The .CRS File Format">The .CRS File Format</a>
<font face="Courier New" size="2">
<a name="The .CRS File Format">The .CRS File Format</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
CRS files define the courses used in the &quot;Oni&quot; Nonstop Challenge mode. All CRS
files must reside in the &quot;Courses&quot; folder in the StepMania program folder.<br>
CRS files define the courses used in the Nonstop, Oni, and Endless modes.&nbsp; All CRS
files must reside in the &quot;Courses&quot; folder in the StepMania program folder.&nbsp;
These rules determine which of the three modes a course will appear in:<br>
<br>
Nonstop: Will appear if #LIVES=-1 and #REPEAT=OFF.<br>
Oni (Challenge): Will appear if #LIVES &gt; 0 and #REPEAT=OFF.<br>
Endless: Will appear if #REPEAT is ON.<br>
<br>
#COURSE:...; - name of the course<br>
#LIVES:&lt;0..10&gt;; - An integer between 0 and 10. This line is optional.<br>
#REPEAT:&lt;YES|NO&gt;; - start over after last stage?<br>
#SONG:&lt;group folder&gt;\&lt;song folder&gt;:&lt;description&gt;[:modifiers]; - <br>
group folder - The name of the folder that contains the song folder.<br>
song folder - the name of the folder that contains files for the song<br>
description - BASIC, TRICK, SSR, MANIAC, HEAVY, etc.<br>
modifiers - One or more of:<br>
#SONG: - can use any one of the following formats:<br>
<br>
A fixed song:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #SONG:&lt;group folder&gt;/&lt;song
folder&gt;:&lt;difficulty&gt;:&lt;modifiers&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example: #SONG:DDRMAX/MAX300:BASIC;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example:
#SONG:DDR4th/B4U:MANIAC:sudden,shuffle,reverse;<br>
A random song:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #SONG:*:(&lt;difficulty&gt;|&lt;meter
range&gt;):&lt;modifiers&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example: #SONG:*:MANIAC;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example: #SONG:*:8..10:1.5x,reverse;<br>
A random song within a group:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #SONG:&lt;group
folder&gt;/*:(&lt;difficulty&gt;|&lt;meter range&gt;):&lt;modifiers&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example: #SONG:DDRMAX/*:3..6;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example:
#SONG:DDR3rd/*:MANIAC:1.5x,reverse;<br>
A players best song:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #SONG:PlayersBest:&lt;number&gt;:&lt;modifiers&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example: #PlayersBest1:TRICK;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example:
#PlayersBest4:MANIAC:1.5x,reverse;<br>
A players worst song:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #SONG:PlayersWorst:&lt;number&gt;:&lt;modifiers&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example: #PlayersWorst4:MANIAC;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; example:
#PlayersWorst1:TRICK:1.5x,reverse,drunk;<br>
<br>
Descriptions:<br>
group folder - The name of the folder that contains the song folder. (e.g.
&quot;DDR4th&quot;)<br>
song folder - the name of the folder that contains files for the song. (e.g.
&quot;B4U&quot;)<br>
difficulty - Can be one of the following: BEGINNER, BASIC, TRICK, MANIAC,
CHALLENGE.<br>
meter range - A value in the format &quot;x..y&quot; where x is the lowest meter allowed
and y is the highest meter allowed.&nbsp; For example, the string &quot;7..9&quot; would
choose only from songs with a foot meter of 7, 8, or 9.<br>
modifiers - A comma separated series of modifier strings.&nbsp; This value may
be left blank.&nbsp; Any string you see on the Player Options screen is a
modifier string.&nbsp; Some examples are:<br>
0.5x, 0.75x, 1.5x, 2.0x, 3.0x, 4.0x, 5.0x, 8.0x<br>
boost, wave, drunk, dizzy, space, mini<br>
hidden, sudden, stealth, blink<br>
@@ -646,13 +741,15 @@ note, flat, plain<br>
noholds<br>
nofreeze<br>
dark<br>
norecover, suddendeath, power-drop, death<br>
0.7xmusic, 0.8xmusic, 0.9xmusic, 1.0xmusic, 1.1xmusic, <br>
1.2xmusic, 1.3xmusic, 1.4xmusic, 1.5xmusic<br>
<br>
</font>
<hr>
<a name="Extra Stages">Extra Stages</a>
<font face="Courier New" size="2">
<a name="Extra Stages">Extra Stages</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
You can manually specify extra stages for each song group by creating .CRS files
called &quot;extra1.crs&quot; and &quot;extra2.crs&quot; and placing them in the song group folder
@@ -664,9 +761,12 @@ CRS file is not found or is invalid, appropriate song, notes, and modifiers will
Don't forget: extra stage CRS files belong in the song group folder (e.g.
&quot;Songs/DDRMAX/&quot;), not in &quot;Courses&quot;.<br>
<br>
</font>
<hr>
<a name="Creating an Announcer">Creating an Announcer</a>
<font face="Courier New" size="2">
<a name="Creating an Announcer">Creating an Announcer</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
Announcers folders must reside in the &quot;Announcers&quot; folder inside the StepMania
program directory (e.g. &quot;Announcers\DDRMAX\&quot;). An announcer folder contains
@@ -683,9 +783,12 @@ trigger folder is missing, then no sound will be played for that trigger.<br>
For a complete list of announcer trigger names, see the example announcer packs
that are available at <a href="http://www.stepmania.com">www.stepmania.com</a>.<br>
<br>
</font>
<hr>
<a name="Creating a Note Skin">Creating a Note Skin</a>
<font face="Courier New" size="2">
<a name="Creating a Note Skin">Creating a Note Skin</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
Note skins allow you to customize the way notes appear. Note skins must reside
in the folder &quot;NoteSkins\&lt;Game Name&gt;\&lt;Note Skin Name&gt;&quot;. Note skins are specific
@@ -714,9 +817,12 @@ wide, and hold parts which must be 4x2.<br>
For more information on about textures with multiple frames, see the section
&quot;How StepMania Loads Textures&quot; in this document.<br>
<br>
</font>
<hr>
<a name="Creating a Theme">Creating a Theme</a>
<font face="Courier New" size="2">
<a name="Creating a Theme">Creating a Theme</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
All themes must reside in the Themes folder below the StepMania program
directory. Inside a theme folder, you will all or only a few of the items below:<br>
@@ -829,9 +935,12 @@ Graphics folder &quot;Themes\MySuperTheme\Graphics&quot;. <br>
- Edit your new title menu graphic to be whatever you want.<br>
- Start StepMania, go to Appearance Options, and change your theme to &quot;MySuperTheme&quot;.<br>
<br>
</font>
<hr>
<a name="How StepMania Loads Textures">How StepMania Loads Textures</a>
<font face="Courier New" size="2">
<a name="How StepMania Loads Textures">How StepMania Loads Textures</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
* What are textures?<br>
<br>
@@ -906,9 +1015,13 @@ greater in size than 256x256. If a texture is larger than the card's maximum
texture size, the image will scaled down internally resulting in output that
looks blurry.<br>
<br>
</font>
<hr>
<font face="Courier New" size="2">
<a name="Building StepMania from CVS source">Building StepMania from CVS source</a>
</font>
<hr>
<font face="Courier New" size="2">
<br>
CVS is the repository that manages the StepMania source code. Our CVS server is
graciously provided by SourceForge. You can get the absolute-latest bleeding
@@ -1032,20 +1145,24 @@ and put &quot;ssh.bat&quot; into the editbox. <br>
<br>
* All done!&nbsp; Congrats.<br>
<br>
</font>
<hr>
<a name="Thanks">Thanks</a>
<font face="Courier New" size="2">
<a name="Thanks">Thanks</a> </font>
<hr>
<font face="Courier New" size="2">
<br>
Thanks to:<br>
redcrusher for help on ez2 graphics<br>
Dj Slash &amp; Tony Thai for the caution graphic<br>
Kyle &quot;KeeL&quot; Ward for his awesome menu music (www.ampcast.com/keel)<br>
<br>
</font>
<hr>
End of document
<font face="Courier New" size="2">End of document </font>
<hr>
</p>
</body>
</html>
</html>
+1 -1
View File
@@ -688,7 +688,7 @@ Left=Up,Down,Right,Left
Right=Up,Down,Left,Right
Shuffle=Down,Up,Down,Up
SuperShuffle=Down,Up,Left,Right
Little=
NextTransform=
NextScrollSpeed=
PreviousScrollSpeed=
NextAccel=Left,Right,Down,Up
+3 -3
View File
@@ -31,7 +31,7 @@ enum Code {
CODE_RIGHT,
CODE_SHUFFLE,
CODE_SUPER_SHUFFLE,
CODE_LITTLE,
CODE_NEXT_TRANSFORM,
CODE_NEXT_SCROLL_SPEED,
CODE_PREVIOUS_SCROLL_SPEED,
CODE_NEXT_ACCEL,
@@ -58,7 +58,7 @@ const CString g_sCodeNames[NUM_CODES] = {
"Right",
"Shuffle",
"SuperShuffle",
"Little",
"NextTransform",
"NextScrollSpeed",
"PreviousScrollSpeed",
"NextAccel",
@@ -174,7 +174,7 @@ bool CodeDetector::DetectAndAdjustOptions( GameController controller )
case CODE_RIGHT: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_TurnType, PlayerOptions::TURN_RIGHT, PlayerOptions::TURN_NONE ); break;
case CODE_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_TurnType, PlayerOptions::TURN_SHUFFLE, PlayerOptions::TURN_NONE ); break;
case CODE_SUPER_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_TurnType, PlayerOptions::TURN_SUPER_SHUFFLE, PlayerOptions::TURN_NONE ); break;
case CODE_LITTLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bLittle, true, false ); break;
case CODE_NEXT_TRANSFORM: GAMESTATE->m_PlayerOptions[pn].NextTransform(); break;
case CODE_NEXT_SCROLL_SPEED:INCREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break;
case CODE_PREVIOUS_SCROLL_SPEED:DECREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break;
case CODE_NEXT_ACCEL: GAMESTATE->m_PlayerOptions[pn].NextAccel(); break;
+55 -29
View File
@@ -122,7 +122,7 @@ void NoteData::CopyAll( NoteData* pFrom )
void NoteData::AddHoldNote( HoldNote add )
{
ASSERT( add.m_fStartBeat>=0 && add.m_fEndBeat>=0 );
ASSERT( add.fStartBeat>=0 && add.fEndBeat>=0 );
int i;
@@ -132,33 +132,33 @@ void NoteData::AddHoldNote( HoldNote add )
for( i=0; i<GetNumHoldNotes(); i++ ) // for each HoldNote
{
HoldNote &other = GetHoldNote(i);
if( add.m_iTrack == other.m_iTrack && // the tracks correspond
if( add.iTrack == other.iTrack && // the tracks correspond
// they overlap
(
( other.m_fStartBeat <= add.m_fStartBeat && other.m_fEndBeat >= add.m_fEndBeat ) || // other consumes add
( other.m_fStartBeat >= add.m_fStartBeat && other.m_fEndBeat <= add.m_fEndBeat ) || // other inside add
( add.m_fStartBeat <= other.m_fStartBeat && other.m_fStartBeat <= add.m_fEndBeat ) || // other overlaps add
( add.m_fStartBeat <= other.m_fEndBeat && other.m_fEndBeat <= add.m_fEndBeat ) // other overlaps add
( other.fStartBeat <= add.fStartBeat && other.fEndBeat >= add.fEndBeat ) || // other consumes add
( other.fStartBeat >= add.fStartBeat && other.fEndBeat <= add.fEndBeat ) || // other inside add
( add.fStartBeat <= other.fStartBeat && other.fStartBeat <= add.fEndBeat ) || // other overlaps add
( add.fStartBeat <= other.fEndBeat && other.fEndBeat <= add.fEndBeat ) // other overlaps add
)
)
{
add.m_fStartBeat = min(add.m_fStartBeat, other.m_fStartBeat);
add.m_fEndBeat = max(add.m_fEndBeat, other.m_fEndBeat);
add.fStartBeat = min(add.fStartBeat, other.fStartBeat);
add.fEndBeat = max(add.fEndBeat, other.fEndBeat);
// delete this HoldNote
m_HoldNotes.erase(m_HoldNotes.begin()+i, m_HoldNotes.begin()+i+1);
}
}
int iAddStartIndex = BeatToNoteRow(add.m_fStartBeat);
int iAddEndIndex = BeatToNoteRow(add.m_fEndBeat);
int iAddStartIndex = BeatToNoteRow(add.fStartBeat);
int iAddEndIndex = BeatToNoteRow(add.fEndBeat);
// delete TapNotes under this HoldNote
for( i=iAddStartIndex+1; i<=iAddEndIndex; i++ )
SetTapNote(add.m_iTrack, i, TAP_EMPTY);
SetTapNote(add.iTrack, i, TAP_EMPTY);
// add a tap note at the start of this hold
SetTapNote(add.m_iTrack, iAddStartIndex, TAP_HOLD_HEAD); // Hold begin marker. Don't draw this, but do grade it.
SetTapNote(add.iTrack, iAddStartIndex, TAP_HOLD_HEAD); // Hold begin marker. Don't draw this, but do grade it.
m_HoldNotes.push_back(add);
}
@@ -169,10 +169,10 @@ void NoteData::RemoveHoldNote( int iHoldIndex )
HoldNote& hn = GetHoldNote(iHoldIndex);
int iHoldStartIndex = BeatToNoteRow(hn.m_fStartBeat);
int iHoldStartIndex = BeatToNoteRow(hn.fStartBeat);
// delete a tap note at the start of this hold
SetTapNote(hn.m_iTrack, iHoldStartIndex, TAP_EMPTY);
SetTapNote(hn.iTrack, iHoldStartIndex, TAP_EMPTY);
// remove from list
m_HoldNotes.erase(m_HoldNotes.begin()+iHoldIndex, m_HoldNotes.begin()+iHoldIndex+1);
@@ -216,8 +216,8 @@ float NoteData::GetFirstBeat() const
}
for( i=0; i<GetNumHoldNotes(); i++ )
if( GetHoldNote(i).m_fStartBeat < fEarliestBeatFoundSoFar )
fEarliestBeatFoundSoFar = GetHoldNote(i).m_fStartBeat;
if( GetHoldNote(i).fStartBeat < fEarliestBeatFoundSoFar )
fEarliestBeatFoundSoFar = GetHoldNote(i).fStartBeat;
if( fEarliestBeatFoundSoFar == MAX_BEATS ) // there are no notes
@@ -248,8 +248,8 @@ float NoteData::GetLastBeat() const
for( i=0; i<GetNumHoldNotes(); i++ )
{
if( GetHoldNote(i).m_fEndBeat > fOldestBeatFoundSoFar )
fOldestBeatFoundSoFar = GetHoldNote(i).m_fEndBeat;
if( GetHoldNote(i).fEndBeat > fOldestBeatFoundSoFar )
fOldestBeatFoundSoFar = GetHoldNote(i).fEndBeat;
}
return fOldestBeatFoundSoFar;
@@ -303,7 +303,7 @@ int NoteData::GetNumHoldNotes( const float fStartBeat, const float fEndBeat ) co
for( int i=0; i<GetNumHoldNotes(); i++ )
{
const HoldNote &hn = GetHoldNote(i);
if( fStartBeat <= hn.m_fStartBeat && hn.m_fEndBeat <= fEndBeat )
if( fStartBeat <= hn.fStartBeat && hn.fEndBeat <= fEndBeat )
iNumHolds++;
}
return iNumHolds;
@@ -377,13 +377,13 @@ void NoteData::ConvertHoldNotesTo2sAnd3s()
for( int i=0; i<GetNumHoldNotes(); i++ )
{
const HoldNote &hn = GetHoldNote(i);
int iHoldStartIndex = max(BeatToNoteRow(hn.m_fStartBeat), 0);
int iHoldEndIndex = max(BeatToNoteRow(hn.m_fEndBeat), 0);
int iHoldStartIndex = max(BeatToNoteRow(hn.fStartBeat), 0);
int iHoldEndIndex = max(BeatToNoteRow(hn.fEndBeat), 0);
/* If they're the same, then they got clamped together, so just ignore it. */
if(iHoldStartIndex != iHoldEndIndex) {
SetTapNote(hn.m_iTrack, iHoldStartIndex, TAP_HOLD_HEAD);
SetTapNote(hn.m_iTrack, iHoldEndIndex, TAP_HOLD_TAIL);
SetTapNote(hn.iTrack, iHoldStartIndex, TAP_HOLD_HEAD);
SetTapNote(hn.iTrack, iHoldEndIndex, TAP_HOLD_TAIL);
}
}
m_HoldNotes.clear();
@@ -413,7 +413,7 @@ void NoteData::Convert4sToHoldNotes()
} while( GetTapNote(col, i) == TAP_HOLD);
SetTapNote(col, i, TAP_EMPTY);
hn.m_fEndBeat = NoteRowToBeat(i);
hn.fEndBeat = NoteRowToBeat(i);
AddHoldNote( hn );
}
}
@@ -425,11 +425,11 @@ void NoteData::ConvertHoldNotesTo4s()
for( int i=0; i<GetNumHoldNotes(); i++ )
{
const HoldNote &hn = GetHoldNote(i);
int iHoldStartIndex = max(BeatToNoteRow(hn.m_fStartBeat), 0);
int iHoldEndIndex = max(BeatToNoteRow(hn.m_fEndBeat), 0);
int iHoldStartIndex = max(BeatToNoteRow(hn.fStartBeat), 0);
int iHoldEndIndex = max(BeatToNoteRow(hn.fEndBeat), 0);
for( int j = iHoldStartIndex; j < iHoldEndIndex; ++j)
SetTapNote(hn.m_iTrack, j, TAP_HOLD);
SetTapNote(hn.iTrack, j, TAP_HOLD);
}
m_HoldNotes.clear();
}
@@ -782,8 +782,8 @@ void NoteDataUtil::RemoveHoldNotes(NoteData &in)
{
const HoldNote &hn = in.GetHoldNote(i);
tracks.push_back(hn.m_iTrack);
rows.push_back(BeatToNoteRow(hn.m_fStartBeat));
tracks.push_back(hn.iTrack);
rows.push_back(BeatToNoteRow(hn.fStartBeat));
}
// Remove all HoldNotes
@@ -968,6 +968,32 @@ void NoteDataUtil::MakeLittle(NoteData &in)
// leave HoldNotes unchanged (what should be do with them?)
}
void NoteDataUtil::MakeBig(NoteData &in)
{
in.ConvertHoldNotesTo4s();
// make all all quarter notes jumps
int max_row = in.GetLastRow();
for( int i=0; i<=max_row; i+=ROWS_PER_BEAT )
{
int iNum = in.GetNumTapNonEmptyTracksInRow(i);
if( iNum == 1 )
{
// add a note determinitsitcally
int iBeat = (int)roundf( NoteRowToBeat(i) );
int iTrackToAdd = iBeat % in.GetNumTracks();
if( in.GetTapNote(iTrackToAdd, i) != TAP_EMPTY )
{
iTrackToAdd = (iTrackToAdd+1) % in.GetNumTracks();
}
in.SetTapNote(iTrackToAdd, i, TAP_TAP);
}
}
in.Convert4sToHoldNotes();
}
void NoteDataUtil::SnapToNearestNoteType( NoteData &in, NoteType nt1, NoteType nt2, float fBeginBeat, float fEndBeat )
{
// nt2 is optional and should be -1 if it is not used
+9
View File
@@ -68,6 +68,14 @@ public:
return false;
return true;
}
inline int GetNumTapNonEmptyTracksInRow( int index ) const
{
int iNum = 0;
for( int t=0; t<m_iNumTracks; t++ )
if( GetTapNote(t, index) != TAP_EMPTY )
iNum++;
return iNum;
}
// used in edit/record
void AddHoldNote( HoldNote newNote ); // add note hold note merging overlapping HoldNotes and destroying TapNotes underneath
@@ -124,6 +132,7 @@ namespace NoteDataUtil
void RemoveHoldNotes(NoteData &in);
void Turn( NoteData &in, PlayerOptions::TurnType tt );
void MakeLittle(NoteData &in);
void MakeBig(NoteData &in);
void SnapToNearestNoteType( NoteData &in, NoteType nt1, NoteType nt2, float fBeginBeat, float fEndBeat );
inline void SnapToNearestNoteType( NoteData &in, NoteType nt, float fBeginBeat, float fEndBeat ) { SnapToNearestNoteType( in, nt, (NoteType)-1, fBeginBeat, fEndBeat ); }
+1 -1
View File
@@ -82,7 +82,7 @@ int NoteDataWithScoring::GetNumHoldNotesWithScore( HoldNoteScore hns, const floa
for( int i=0; i<GetNumHoldNotes(); i++ )
{
const HoldNote &hn = GetHoldNote(i);
if( fStartBeat <= hn.m_fStartBeat && hn.m_fEndBeat <= fEndBeat && m_HoldNoteScores[i] == hns )
if( fStartBeat <= hn.fStartBeat && hn.fEndBeat <= fEndBeat && m_HoldNoteScores[i] == hns )
iNumSuccessfulHolds++;
}
return iNumSuccessfulHolds;
+8 -8
View File
@@ -353,10 +353,10 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
const bool bReverse = GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_bReverseScroll;
const int iCol = hn.m_iTrack;
const float fStartYOffset = ArrowGetYOffset( m_PlayerNumber, hn.m_fStartBeat );
const int iCol = hn.iTrack;
const float fStartYOffset = ArrowGetYOffset( m_PlayerNumber, hn.fStartBeat );
const float fStartYPos = ArrowGetYPos( m_PlayerNumber, fStartYOffset );
const float fEndYOffset = ArrowGetYOffset( m_PlayerNumber, hn.m_fEndBeat );
const float fEndYOffset = ArrowGetYOffset( m_PlayerNumber, hn.fEndBeat );
const float fEndYPos = ArrowGetYPos( m_PlayerNumber, fEndYOffset );
const float fYHead = bReverse ? fEndYPos : fStartYPos; // the center of the head
@@ -379,7 +379,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
// Draw the bottom cap (always wavy)
//
{
Sprite* pBottomCap = GetHoldBottomCapSprite( hn.m_fStartBeat, bActive );
Sprite* pBottomCap = GetHoldBottomCapSprite( hn.fStartBeat, bActive );
// draw manually in small segments
RageVertex *v = &queue[0];
@@ -444,7 +444,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
// Draw the body (always wavy)
//
{
Sprite* pSprBody = GetHoldBodySprite( hn.m_fStartBeat, bActive );
Sprite* pSprBody = GetHoldBodySprite( hn.fStartBeat, bActive );
// draw manually in small segments
RageVertex *v = &queue[0];
@@ -522,7 +522,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
// Draw the top cap (always wavy)
//
{
Sprite* pSprTopCap = GetHoldTopCapSprite( hn.m_fStartBeat, bActive );
Sprite* pSprTopCap = GetHoldTopCapSprite( hn.fStartBeat, bActive );
// draw manually in small segments
RageVertex *v = &queue[0];
@@ -586,7 +586,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
// Draw the tail
//
{
Sprite* pSprTail = GetHoldTailSprite( hn.m_fStartBeat, bActive );
Sprite* pSprTail = GetHoldTailSprite( hn.fStartBeat, bActive );
const float fY = fYTail;
const float fX = ArrowGetXPos( m_PlayerNumber, iCol, fY );
@@ -613,7 +613,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
// Draw the head
//
{
Sprite* pSprHead = GetHoldHeadSprite( hn.m_fStartBeat, bActive );
Sprite* pSprHead = GetHoldHeadSprite( hn.fStartBeat, bActive );
// draw with normal Sprite
const float fY = fYHead;
+4 -4
View File
@@ -266,13 +266,13 @@ void NoteField::DrawPrimitives()
if( hns == HNS_OK ) // if this HoldNote was completed
continue; // don't draw anything
if( hn.m_iTrack != c ) // this HoldNote doesn't belong to this column
if( hn.iTrack != c ) // this HoldNote doesn't belong to this column
continue;
// If no part of this HoldNote is on the screen, skip it
if( !( fFirstBeatToDraw <= hn.m_fEndBeat && hn.m_fEndBeat <= fLastBeatToDraw ||
fFirstBeatToDraw <= hn.m_fStartBeat && hn.m_fStartBeat <= fLastBeatToDraw ||
hn.m_fStartBeat < fFirstBeatToDraw && hn.m_fEndBeat > fLastBeatToDraw ) )
if( !( fFirstBeatToDraw <= hn.fEndBeat && hn.fEndBeat <= fLastBeatToDraw ||
fFirstBeatToDraw <= hn.fStartBeat && hn.fStartBeat <= fLastBeatToDraw ||
hn.fStartBeat < fFirstBeatToDraw && hn.fEndBeat > fLastBeatToDraw ) )
{
continue; // skip
}
+3 -3
View File
@@ -83,9 +83,9 @@ CString NoteTypeToString( NoteType nt );
struct HoldNote
{
int m_iTrack;
float m_fStartBeat;
float m_fEndBeat;
int iTrack;
float fStartBeat;
float fEndBeat;
};
+22 -10
View File
@@ -157,8 +157,20 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDi
NoteDataUtil::Turn( *this, GAMESTATE->m_PlayerOptions[pn].m_TurnType );
if( GAMESTATE->m_PlayerOptions[pn].m_bLittle )
switch( GAMESTATE->m_PlayerOptions[pn].m_Transform )
{
case PlayerOptions::TRANSFORM_NONE:
break;
case PlayerOptions::TRANSFORM_LITTLE:
NoteDataUtil::MakeLittle(*this);
break;
case PlayerOptions::TRANSFORM_BIG:
NoteDataUtil::MakeBig(*this);
break;
default:
ASSERT(0); // invalid value
break;
}
int iPixelsToDrawBefore = -60;
int iPixelsToDrawAfter = 350;
@@ -223,21 +235,21 @@ void Player::Update( float fDeltaTime )
const HoldNote &hn = GetHoldNote(i);
HoldNoteScore hns = GetHoldNoteScore(i);
float fLife = GetHoldNoteLife(i);
int iHoldStartIndex = BeatToNoteRow(hn.m_fStartBeat);
int iHoldStartIndex = BeatToNoteRow(hn.fStartBeat);
m_NoteField.m_bIsHoldingHoldNote[i] = false; // set host flag so NoteField can do intelligent drawing
if( hns != HNS_NONE ) // if this HoldNote already has a result
continue; // we don't need to update the logic for this one
const StyleInput StyleI( m_PlayerNumber, hn.m_iTrack );
const StyleInput StyleI( m_PlayerNumber, hn.iTrack );
const GameInput GameI = GAMESTATE->GetCurrentStyleDef()->StyleInputToGameInput( StyleI );
// if they got a bad score or haven't stepped on the corresponding tap yet
const TapNoteScore tns = GetTapNoteScore(hn.m_iTrack, iHoldStartIndex);
const TapNoteScore tns = GetTapNoteScore(hn.iTrack, iHoldStartIndex);
const bool bSteppedOnTapNote = tns != TNS_NONE && tns != TNS_MISS; // did they step on the start of this hold?
if( hn.m_fStartBeat < fSongBeat && fSongBeat < hn.m_fEndBeat ) // if the song beat is in the range of this hold
if( hn.fStartBeat < fSongBeat && fSongBeat < hn.fEndBeat ) // if the song beat is in the range of this hold
{
bool bIsHoldingButton = INPUTMAPPER->IsButtonDown( GameI );
if( !GAMESTATE->m_bEditing && (PREFSMAN->m_bAutoPlay || GAMESTATE->m_bDemonstration) )
@@ -247,7 +259,7 @@ void Player::Update( float fDeltaTime )
if( bSteppedOnTapNote ) // this note is not judged and we stepped on its head
{
m_NoteField.GetHoldNote(i).m_fStartBeat = fSongBeat; // move the start of this Hold
m_NoteField.GetHoldNote(i).fStartBeat = fSongBeat; // move the start of this Hold
}
if( bSteppedOnTapNote && bIsHoldingButton )
@@ -256,11 +268,11 @@ void Player::Update( float fDeltaTime )
fLife += fDeltaTime/HOLD_ARROW_NG_TIME;
fLife = min( fLife, 1 ); // clamp
m_GhostArrowRow.HoldNote( hn.m_iTrack ); // update the "electric ghost" effect
m_GhostArrowRow.HoldNote( hn.iTrack ); // update the "electric ghost" effect
}
else
{
if( fSongBeat-hn.m_fStartBeat > GAMESTATE->m_fCurBPS * GetMaxStepDistanceSeconds() )
if( fSongBeat-hn.fStartBeat > GAMESTATE->m_fCurBPS * GetMaxStepDistanceSeconds() )
{
// Decrease life
fLife -= fDeltaTime/HOLD_ARROW_NG_TIME;
@@ -275,7 +287,7 @@ void Player::Update( float fDeltaTime )
hns = HNS_NG;
// check for OK
if( fSongBeat >= hn.m_fEndBeat && bSteppedOnTapNote && fLife > 0 ) // if this HoldNote is in the past
if( fSongBeat >= hn.fEndBeat && bSteppedOnTapNote && fLife > 0 ) // if this HoldNote is in the past
{
fLife = 1;
hns = HNS_OK;
@@ -286,7 +298,7 @@ void Player::Update( float fDeltaTime )
{
/* this note's been judged */
HandleHoldNoteScore( hns, tns );
m_HoldJudgement[hn.m_iTrack].SetHoldJudgement( hns );
m_HoldJudgement[hn.iTrack].SetHoldJudgement( hns );
}
m_NoteField.SetHoldNoteLife(i, fLife); // update the NoteField display
+17 -6
View File
@@ -21,7 +21,7 @@ void PlayerOptions::Init()
ZERO( m_bEffects );
m_AppearanceType = APPEARANCE_VISIBLE;
m_TurnType = TURN_NONE;
m_bLittle = false;
m_Transform = TRANSFORM_NONE;
m_bReverseScroll = false;
m_ColorType = COLOR_VIVID;
m_bHoldNotes = true;
@@ -73,7 +73,7 @@ CString PlayerOptions::GetString()
case APPEARANCE_SUDDEN: sReturn += "Sudden, "; break;
case APPEARANCE_STEALTH: sReturn += "Stealth, "; break;
case APPEARANCE_BLINK: sReturn += "Blink, "; break;
default: ASSERT(0); // invalid EFFECT
default: ASSERT(0); // invalid
}
switch( m_TurnType )
@@ -84,11 +84,16 @@ CString PlayerOptions::GetString()
case TURN_RIGHT: sReturn += "Right, "; break;
case TURN_SHUFFLE: sReturn += "Shuffle, "; break;
case TURN_SUPER_SHUFFLE:sReturn += "SuperShuffle, ";break;
default: ASSERT(0); // invalid EFFECT
default: ASSERT(0); // invalid
}
if( m_bLittle )
sReturn += "Little, ";
switch( m_Transform )
{
case TRANSFORM_NONE: break;
case TRANSFORM_LITTLE: sReturn += "Little, "; break;
case TRANSFORM_BIG: sReturn += "Big, "; break;
default: ASSERT(0); // invalid
}
if( m_bReverseScroll )
sReturn += "Reverse, ";
@@ -154,7 +159,8 @@ void PlayerOptions::FromString( CString sOptions )
else if( sBit == "right" ) m_TurnType = TURN_RIGHT;
else if( sBit == "shuffle" ) m_TurnType = TURN_SHUFFLE;
else if( sBit == "supershuffle" )m_TurnType = TURN_SUPER_SHUFFLE;
else if( sBit == "little" ) m_bLittle = true;
else if( sBit == "little" ) m_Transform = TRANSFORM_LITTLE;
else if( sBit == "big" ) m_Transform = TRANSFORM_BIG;
else if( sBit == "reverse" ) m_bReverseScroll = true;
else if( sBit == "note" ) m_ColorType = COLOR_NOTE;
else if( sBit == "flat" ) m_ColorType = COLOR_FLAT;
@@ -207,6 +213,11 @@ void PlayerOptions::NextTurn()
m_TurnType = (TurnType) ((m_TurnType+1)%NUM_TURN_TYPES);
}
void PlayerOptions::NextTransform()
{
m_Transform = (Transform) ((m_Transform+1)%NUM_TRANSFORMS);
}
void PlayerOptions::ChooseRandomMofifiers()
{
if( RandomFloat(0,1)>0.8f )
+7 -1
View File
@@ -54,7 +54,13 @@ struct PlayerOptions
NUM_TURN_TYPES
} m_TurnType;
void NextTurn();
bool m_bLittle;
enum Transform {
TRANSFORM_NONE=0,
TRANSFORM_LITTLE,
TRANSFORM_BIG,
NUM_TRANSFORMS
} m_Transform;
void NextTransform();
bool m_bReverseScroll;
enum ColorType {
COLOR_VIVID=0,
+7 -7
View File
@@ -729,8 +729,8 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
for( int i=0; i<m_NoteFieldEdit.GetNumHoldNotes(); i++ ) // for each HoldNote
{
const HoldNote &hn = m_NoteFieldEdit.GetHoldNote(i);
if( iCol == hn.m_iTrack && // the notes correspond
fSongBeat >= hn.m_fStartBeat && fSongBeat <= hn.m_fEndBeat ) // the cursor lies within this HoldNote
if( iCol == hn.iTrack && // the notes correspond
fSongBeat >= hn.fStartBeat && fSongBeat <= hn.fEndBeat ) // the cursor lies within this HoldNote
{
m_NoteFieldEdit.RemoveHoldNote( i );
bRemovedAHoldNote = true;
@@ -798,12 +798,12 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
// create a new hold note
HoldNote newHN;
newHN.m_iTrack = col;
newHN.m_fStartBeat = min(fStartBeat, fEndBeat);
newHN.m_fEndBeat = max(fStartBeat, fEndBeat);
newHN.iTrack = col;
newHN.fStartBeat = min(fStartBeat, fEndBeat);
newHN.fEndBeat = max(fStartBeat, fEndBeat);
newHN.m_fStartBeat = max(newHN.m_fStartBeat, 0);
newHN.m_fEndBeat = max(newHN.m_fEndBeat, 0);
newHN.fStartBeat = max(newHN.fStartBeat, 0);
newHN.fEndBeat = max(newHN.fEndBeat, 0);
m_NoteFieldEdit.AddHoldNote( newHN );
}
+4 -4
View File
@@ -26,7 +26,7 @@ enum {
PO_EFFECT,
PO_APPEAR,
PO_TURN,
PO_LITTLE,
PO_TRANSFORM,
PO_SCROLL,
PO_COLOR,
PO_HOLD_NOTES,
@@ -39,7 +39,7 @@ OptionRowData g_PlayerOptionsLines[NUM_PLAYER_OPTIONS_LINES] = {
{ "Effect", 7, {"OFF","DRUNK","DIZZY","SPACE","MINI","FLIP","TORNADO"} },
{ "Appear\n-ance", 5, {"VISIBLE","HIDDEN","SUDDEN","STEALTH","BLINK"} },
{ "Turn", 6, {"OFF","MIRROR","LEFT","RIGHT","SHUFFLE","SUPER SHUFFLE"} },
{ "Little", 2, {"OFF","ON"} },
{ "Trans\n-form", 3, {"OFF","LITTLE","BIG"} },
{ "Scroll", 2, {"STANDARD","REVERSE"} },
{ "Color", 3, {"VIVID","NOTE","FLAT"} },
{ "Holds", 2, {"OFF","ON"} },
@@ -95,7 +95,7 @@ void ScreenPlayerOptions::ImportOptions()
m_iSelectedOption[p][PO_APPEAR] = po.m_AppearanceType;
m_iSelectedOption[p][PO_TURN] = po.m_TurnType;
m_iSelectedOption[p][PO_LITTLE] = po.m_bLittle ? 1 : 0;
m_iSelectedOption[p][PO_TRANSFORM] = po.m_Transform;
m_iSelectedOption[p][PO_SCROLL] = po.m_bReverseScroll ? 1 : 0 ;
m_iSelectedOption[p][PO_COLOR] = po.m_ColorType;
m_iSelectedOption[p][PO_HOLD_NOTES] = po.m_bHoldNotes ? 1 : 0;
@@ -132,7 +132,7 @@ void ScreenPlayerOptions::ExportOptions()
po.m_AppearanceType = (PlayerOptions::AppearanceType)m_iSelectedOption[p][PO_APPEAR];
po.m_TurnType = (PlayerOptions::TurnType)m_iSelectedOption[p][PO_TURN];
po.m_bLittle = m_iSelectedOption[p][PO_LITTLE] == 1;
po.m_Transform = (PlayerOptions::Transform)m_iSelectedOption[p][PO_TRANSFORM];
po.m_bReverseScroll = (m_iSelectedOption[p][PO_SCROLL] == 1);
po.m_ColorType = (PlayerOptions::ColorType)m_iSelectedOption[p][PO_COLOR];
po.m_bHoldNotes = (m_iSelectedOption[p][PO_HOLD_NOTES] == 1);