fuckin merges part 2?
This commit is contained in:
@@ -37,6 +37,7 @@ src/libtomcrypt/Release-*
|
||||
src/libtommath/build-*
|
||||
src/libtommath/Release-*
|
||||
src/*.old
|
||||
src/.deps
|
||||
ver.cpp
|
||||
lib*_link.a
|
||||
Data/UserPrefs
|
||||
|
||||
+12
-15
@@ -10,7 +10,18 @@ supported but exist anyways.)
|
||||
_____________________________________________________________________________
|
||||
|
||||
================================================================================
|
||||
sm-ssc v1.2.3 | 201103??
|
||||
sm-ssc v1.2.4 | 20110???
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
20110313
|
||||
--------
|
||||
* [NotesWriterSM] Allow for either the #DESCRIPTION or #CREDIT tags to be used
|
||||
for the .sm format's description token. [Wolfman2000]
|
||||
* [ScreenEdit] Add Tap Note Cycling to allow inputting all of the taps. The way
|
||||
to make holds and rolls are still the same as before. [Wolfman2000]
|
||||
|
||||
================================================================================
|
||||
sm-ssc v1.2.3 | 20110323
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
20110309
|
||||
@@ -25,20 +36,6 @@ sm-ssc v1.2.3 | 201103??
|
||||
* [MeterDisplay] Add Lua binding. "Allow setting and changing the width
|
||||
dynamically. Phase out the "StreamWidth" node property; set it with
|
||||
SetStreamWidth instead." [Glenn Maynard]
|
||||
* sm5svn r28280: "Previously, we didn't create MusicWheel sorts when the screen
|
||||
loads; it was delayed until the screen begins. This allowed preloading before
|
||||
the style is set. However, it caused a major skip when the screen starts,
|
||||
because creating the sorts is fairly expensive.
|
||||
|
||||
Refactor this. Load the sorts when the screen is loaded, and then go through
|
||||
them and quickly filter out unplayable data and handle other initialization
|
||||
on begin. This is much faster, so we can more easily transition seamlessly
|
||||
from the previous menu.
|
||||
|
||||
One known limitation: the sorts are created before we know the style, so we
|
||||
have to guess. This means if you're in a style like dance-solo or
|
||||
pump-halfdouble, sorts will still be based on regular mode. This affects the
|
||||
difficulty, top grade and roulette sorts." [Glenn Maynard]
|
||||
|
||||
20110305
|
||||
--------
|
||||
|
||||
@@ -1223,7 +1223,7 @@ Enter a new sub title transliteration.=Enter a new sub title transliteration.
|
||||
Enter a new sub title.=Enter a new sub title.
|
||||
More than %d notes per measure is not allowed. This change has been reverted.=More than %d notes per measure is not allowed. This change has been reverted.
|
||||
No backgrounds available=No backgrounds available
|
||||
EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nSpace bar:\n Set area\n marker\nEnter:\n Area Menu\nEscape:\n Main Menu\nF1:\n Show help\n
|
||||
EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nCreate roll note:\n Hold Shift,\n then create a\n hold note.\nSpace bar:\n Set area\n marker\nEnter:\n Area Menu\nEscape:\n Main Menu\nF1:\n Show help\n
|
||||
PlayRecordHelpText=Press START to end
|
||||
Save successful.=Save successful.
|
||||
Saved as SM and DWI.=Saved as SM and DWI.
|
||||
@@ -1244,6 +1244,7 @@ Description=Description
|
||||
Chart Style=Chart Style
|
||||
Main title=Main title
|
||||
Subtitle=Subtitle
|
||||
Tap Note=Tap Note
|
||||
Tap Steps=Tap Steps
|
||||
Jumps=Jumps
|
||||
Hands=Hands
|
||||
@@ -1925,6 +1926,7 @@ Insert beat and shift down=Insert beat and shift down
|
||||
Shift BPM changes and stops down one beat=Shift BPM changes and stops down one beat
|
||||
Delete beat and shift up=Delete beat and shift up
|
||||
Shift BPM changes and stops up one beat=Shift BPM changes and stops up one beat
|
||||
Cycle between tap notes=Cycle between tap notes
|
||||
Lay mine=Lay mine
|
||||
Lay lift=Lay lift
|
||||
Add to/remove from right half=Add to/remove from right half
|
||||
|
||||
@@ -647,6 +647,9 @@ LyricBackChangedCommand=LyricCommand,"Back"
|
||||
InLength=0
|
||||
OutLength=0
|
||||
|
||||
[NotesWriterSM]
|
||||
DescriptionUsesCreditField=false
|
||||
|
||||
[OptionRow]
|
||||
ShowModIcons=false
|
||||
ShowUnderlines=true
|
||||
@@ -3649,6 +3652,7 @@ DescriptionFormat="%s:\n %s\n"
|
||||
ChartStyleFormat="%s:\n %s\n"
|
||||
MainTitleFormat="%s:\n %s\n"
|
||||
SubtitleFormat="%s:\n %s\n"
|
||||
TapNoteTypeFormat="%s: %s\n"
|
||||
NumStepsFormat="%s: %d\n"
|
||||
NumJumpsFormat="%s: %d\n"
|
||||
NumHoldsFormat="%s: %d\n"
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
_CombinedLifeMeterTug stream p1
|
||||
@@ -1 +0,0 @@
|
||||
_CombinedLifeMeterTug stream p2
|
||||
@@ -649,6 +649,7 @@ MeterSetCommand=%function(self,param) \
|
||||
end; \
|
||||
if param.Meter then \
|
||||
if param.Meter >= 10 then \
|
||||
self:textglowmode('TextGlowMode_Inner'); \
|
||||
self:glowshift(); \
|
||||
else \
|
||||
self:stopeffect(); \
|
||||
|
||||
@@ -1,8 +1,62 @@
|
||||
return Def.ActorFrame {
|
||||
local t = Def.ActorFrame {};
|
||||
--
|
||||
--[[ local tGridSizeMajor = { 32, 32 };
|
||||
local tGridSizeMinor = { 16, 16 };
|
||||
local function CreateDebugGrid()
|
||||
local t = Def.ActorFrame {};
|
||||
local numX = math.ceil(SCREEN_WIDTH/tGridSizeMajor[1])
|
||||
local numY = math.ceil(SCREEN_HEIGHT/tGridSizeMajor[2])
|
||||
local offset = ( math.ceil(SCREEN_WIDTH/tGridSizeMajor[1]) - SCREEN_WIDTH ) + SCREEN_WIDTH;
|
||||
for a=1,numY do
|
||||
for b=1,numX do
|
||||
t[#t+1] = Def.Quad {
|
||||
InitCommand=cmd(x,b*tGridSizeMajor[1]-(tGridSizeMajor[1]/2);y,a*tGridSizeMajor[2]-(tGridSizeMajor[2]/2));
|
||||
OnCommand=cmd(zoomto,tGridSizeMajor[1]-2,tGridSizeMajor[2]-2;diffuse,color("1,1,1,0.25"));
|
||||
};
|
||||
end;
|
||||
end;
|
||||
return t
|
||||
end --]]
|
||||
|
||||
--
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y);
|
||||
|
||||
Def.Quad {
|
||||
InitCommand=cmd(zoomto,SCREEN_WIDTH,SCREEN_HEIGHT);
|
||||
OnCommand=cmd(diffuse,color("0.25,0.15,0.25,1"));
|
||||
LoadActor("VOL1-29-NTSC") .. {
|
||||
InitCommand=cmd(scaletoclipped,SCREEN_WIDTH,SCREEN_HEIGHT);
|
||||
OnCommand=cmd(diffusealpha,0.75);
|
||||
};
|
||||
};
|
||||
};
|
||||
--
|
||||
local bShow = 0;
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(visible,false);
|
||||
ToggleConsoleDisplayMessageCommand=function(self)
|
||||
bShow = 1 - bShow;
|
||||
self:visible( bShow == 1 );
|
||||
end;
|
||||
-- Grid
|
||||
LoadActor("_32") .. {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;customtexturerect,0,0,SCREEN_WIDTH/32,SCREEN_HEIGHT/32);
|
||||
OnCommand=cmd(diffuse,color("0,0,0,0.5"));
|
||||
};
|
||||
LoadActor("_16") .. {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;customtexturerect,0,0,SCREEN_WIDTH/16,SCREEN_HEIGHT/16);
|
||||
OnCommand=cmd(diffuse,color("1,1,1,0.125"));
|
||||
};
|
||||
--[[ LoadActor("_8") .. {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;customtexturerect,0,0,SCREEN_WIDTH/8,SCREEN_HEIGHT/8);
|
||||
OnCommand=cmd(diffuse,color("#00BFE833"));
|
||||
}; --]]
|
||||
-- Left
|
||||
Def.Quad {
|
||||
InitCommand=cmd(horizalign,left;x,SCREEN_LEFT;y,SCREEN_CENTER_Y;zoomto,16,SCREEN_HEIGHT);
|
||||
OnCommand=cmd(diffuse,color("0,0,0,0.5"));
|
||||
};
|
||||
-- Right
|
||||
Def.Quad {
|
||||
InitCommand=cmd(horizalign,right;x,SCREEN_RIGHT;y,SCREEN_CENTER_Y;zoomto,16,SCREEN_HEIGHT);
|
||||
OnCommand=cmd(diffuse,color("0,0,0,0.5"));
|
||||
};
|
||||
};
|
||||
--
|
||||
return t
|
||||
@@ -2,8 +2,6 @@
|
||||
-- I prefer to keep these optional, incase another screen wants to hide
|
||||
-- these elements.
|
||||
local t = Def.ActorFrame {};
|
||||
|
||||
t[#t+1] = StandardDecorationFromFileOptional("Header","Header");
|
||||
t[#t+1] = StandardDecorationFromFileOptional("Footer","Footer");
|
||||
|
||||
return t
|
||||
@@ -4,10 +4,8 @@ local t = Def.ActorFrame {};
|
||||
|
||||
t[#t+1] = LoadFont("Common Normal") .. {
|
||||
Text=gc:GetText();
|
||||
InitCommand=THEME:GetMetric(Var "LoadingScreen","ScrollerItemInitCommand");
|
||||
GainFocusCommand=THEME:GetMetric(Var "LoadingScreen","ScrollerItemGainFocusCommand");
|
||||
LoseFocusCommand=THEME:GetMetric(Var "LoadingScreen","ScrollerItemGainFocusCommand");
|
||||
};
|
||||
|
||||
|
||||
t.GainFocusCommand=cmd(diffusealpha,1);
|
||||
t.LoseFocusCommand=cmd(diffusealpha,0.5);
|
||||
return t;
|
||||
@@ -1,3 +0,0 @@
|
||||
return Def.Quad {
|
||||
InitCommand=cmd(zoomto,SCREEN_WIDTH,32);
|
||||
};
|
||||
@@ -1,3 +0,0 @@
|
||||
return Def.Quad {
|
||||
InitCommand=cmd(zoomto,SCREEN_WIDTH,48);
|
||||
};
|
||||
+24
-46
@@ -1,59 +1,37 @@
|
||||
[Global]
|
||||
FallbackTheme=_fallback
|
||||
|
||||
[CustomScoring]
|
||||
ComboAboveThresholdAddsToScoreBonus=0
|
||||
ComboScoreBonusThreshold=50
|
||||
ComboScoreBonusValue=+1000
|
||||
|
||||
ComboMultiplier=0.0
|
||||
|
||||
DoubleNoteScoreMultiplier=2.0
|
||||
TripleNoteScoreMultiplier=3.0
|
||||
QuadOrHigherNoteScoreMultiplier=4.0
|
||||
|
||||
PointsW1=+50
|
||||
PointsW2=+20
|
||||
PointsW3=+10
|
||||
PointsW4=+5
|
||||
PointsW5=0
|
||||
PointsMiss=-5
|
||||
PointsHitMine=-5
|
||||
PointsCheckpointHit=+5
|
||||
PointsCheckpointMiss=-5
|
||||
PointsNone=0
|
||||
PointsHoldHeld=+5
|
||||
PointsHoldLetGo=-5
|
||||
|
||||
[ScreenWithMenuElements]
|
||||
WaitForChildrenBeforeTweeningOut=true
|
||||
|
||||
ShowHeader=true
|
||||
HeaderX=SCREEN_CENTER_X
|
||||
HeaderY=SCREEN_TOP
|
||||
HeaderOnCommand=vertalign,top;diffuse,color("0.5,0.25,0.35,1");
|
||||
HeaderOnCommand=
|
||||
HeaderOffCommand=
|
||||
|
||||
#
|
||||
ShowFooter=true
|
||||
FooterX=SCREEN_CENTER_X
|
||||
FooterY=SCREEN_BOTTOM
|
||||
FooterOnCommand=vertalign,bottom;diffuse,color("0.5,0.25,0.35,1");
|
||||
FooterOnCommand=
|
||||
FooterOffCommand=
|
||||
#
|
||||
TimerX=SCREEN_WIDTH-64
|
||||
TimerY=SCREEN_TOP+48-4.5
|
||||
TimerOnCommand=
|
||||
TimerOffCommand=
|
||||
[MenuTimer]
|
||||
# Text
|
||||
Text1OnCommand=stopeffect;stoptweening;vertalign,bottom;horizalign,right
|
||||
Text1FormatFunction=function(fSeconds) \
|
||||
return string.format("%0.1f", fSeconds); \
|
||||
end
|
||||
FrameOnCommand=
|
||||
# Warning
|
||||
Warning10Command=diffuseshift;effectperiod,1;effectcolor2,Color("Red");effectcolor1,color("0.5,0,0,1");
|
||||
[ScreenTitleMenu]
|
||||
ScrollerY=SCREEN_CENTER_Y*1.5
|
||||
ScrollerOnCommand=
|
||||
# New: Load ScrollerItem SpacingX/Y
|
||||
ScrollerTransform=function(self,offset,itemIndex,numItems) \
|
||||
local fSpaceX = THEME:GetMetric( Var "LoadingScreen","ScrollerItemSpacingX"); \
|
||||
local fSpaceY = THEME:GetMetric( Var "LoadingScreen","ScrollerItemSpacingY"); \
|
||||
self:x( (i-1) * fSpaceX ); \
|
||||
self:y( (i-1) * fSpaceY ); \
|
||||
end;
|
||||
# New: Adjust menu items
|
||||
ScrollerItemSpacingX=0
|
||||
ScrollerItemSpacingY=24
|
||||
ScrollerItemInitCommand=zoom,1;shadowlength,1
|
||||
ScrollerItemGainFocusCommand=finishtweening;linear,0.125;zoom,1.25
|
||||
ScrollerItemLoseFocusCommand=finishtweening;linear,0.125;zoom,1
|
||||
ShowHeader=true
|
||||
ShowFooter=true
|
||||
[ScreenSelectMusic]
|
||||
|
||||
MusicWheelX=SCREEN_RIGHT-128-18
|
||||
MusicWheelOnCommand=draworder,-1
|
||||
[MusicWheel]
|
||||
ItemTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) self:x( (1-math.cos(offsetFromCenter/math.pi))*0 ); self:y( offsetFromCenter*48 ); end
|
||||
NumWheelItems=13
|
||||
+57
-57
@@ -1,57 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>smzip</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>smicon.icns</string>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/zip</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>SMZip</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSTypeIsPackage</key>
|
||||
<false/>
|
||||
<key>NSPersistentStoreTypeKey</key>
|
||||
<string>Binary</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>EXECUTABLE_NAME</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>PRODUCT_FAMILY_BARE PRODUCT_VER_BARE</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>smicon.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.PRODUCT_ID_BARE</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>PRODUCT_FAMILY_BARE</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>PRODUCT_VER_BARE</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>Step</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>PRODUCT_VER_BARE</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.4.10</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright 2001-2010</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>SMApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>smzip</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>smicon.icns</string>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/zip</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>SMZip</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSTypeIsPackage</key>
|
||||
<false/>
|
||||
<key>NSPersistentStoreTypeKey</key>
|
||||
<string>Binary</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>EXECUTABLE_NAME</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>PRODUCT_FAMILY_BARE PRODUCT_VER_BARE</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>smicon.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.PRODUCT_ID_BARE</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>PRODUCT_FAMILY_BARE</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>PRODUCT_VER_BARE</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>Step</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>PRODUCT_VER_BARE</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.4.10</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright 2001-2011</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>SMApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -7099,7 +7099,7 @@
|
||||
GCC_DYNAMIC_NO_PIC = YES;
|
||||
GCC_ENABLE_CPP_EXCEPTIONS = NO;
|
||||
GCC_ENABLE_SYMBOL_SEPARATION = NO;
|
||||
GCC_FAST_MATH = YES;
|
||||
GCC_FAST_MATH = NO;
|
||||
GCC_FAST_OBJC_DISPATCH = NO;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||
@@ -7112,16 +7112,20 @@
|
||||
GCC_UNROLL_LOOPS = YES;
|
||||
GCC_VERSION = 4.0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_SHADOW = NO;
|
||||
GCC_WARN_PROTOTYPE_CONVERSION = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = NO;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
@@ -7632,7 +7636,7 @@
|
||||
GCC_DYNAMIC_NO_PIC = YES;
|
||||
GCC_ENABLE_CPP_EXCEPTIONS = NO;
|
||||
GCC_ENABLE_SYMBOL_SEPARATION = NO;
|
||||
GCC_FAST_MATH = YES;
|
||||
GCC_FAST_MATH = NO;
|
||||
GCC_FAST_OBJC_DISPATCH = NO;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||
@@ -7644,16 +7648,20 @@
|
||||
GCC_UNROLL_LOOPS = YES;
|
||||
GCC_VERSION = 4.0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_SHADOW = NO;
|
||||
GCC_WARN_PROTOTYPE_CONVERSION = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
@@ -7963,7 +7971,7 @@
|
||||
GCC_DYNAMIC_NO_PIC = YES;
|
||||
GCC_ENABLE_CPP_EXCEPTIONS = NO;
|
||||
GCC_ENABLE_SYMBOL_SEPARATION = NO;
|
||||
GCC_FAST_MATH = YES;
|
||||
GCC_FAST_MATH = NO;
|
||||
GCC_FAST_OBJC_DISPATCH = NO;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||
@@ -7975,16 +7983,20 @@
|
||||
GCC_UNROLL_LOOPS = YES;
|
||||
GCC_VERSION = 4.0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_SHADOW = NO;
|
||||
GCC_WARN_PROTOTYPE_CONVERSION = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
@@ -8088,7 +8100,7 @@
|
||||
GCC_DYNAMIC_NO_PIC = YES;
|
||||
GCC_ENABLE_CPP_EXCEPTIONS = NO;
|
||||
GCC_ENABLE_SYMBOL_SEPARATION = NO;
|
||||
GCC_FAST_MATH = YES;
|
||||
GCC_FAST_MATH = NO;
|
||||
GCC_FAST_OBJC_DISPATCH = NO;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||
@@ -8100,16 +8112,20 @@
|
||||
GCC_UNROLL_LOOPS = YES;
|
||||
GCC_VERSION = 4.0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_SHADOW = NO;
|
||||
GCC_WARN_PROTOTYPE_CONVERSION = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
|
||||
@@ -445,7 +445,7 @@ float ArrowEffects::GetXPos( const PlayerState* pPlayerState, int iColNum, float
|
||||
{
|
||||
// find the middle, and split based on iColNum
|
||||
// it's unknown if this will work for routine.
|
||||
const int iMiddleColumn = floor(pStyle->m_iColsPerPlayer/2.0f);
|
||||
const int iMiddleColumn = static_cast<int>(floor(pStyle->m_iColsPerPlayer/2.0f));
|
||||
if( iColNum > iMiddleColumn-1 )
|
||||
fPixelOffsetFromCenter += fEffects[PlayerOptions::EFFECT_XMODE]*-(fYOffset);
|
||||
else
|
||||
|
||||
+2
-2
@@ -34,8 +34,8 @@ void Attack::GetRealtimeAttackBeats( const Song *pSong, const PlayerState* pPlay
|
||||
fStartBeat = min( GAMESTATE->m_fSongBeat+8, pPlayerState->m_fLastDrawnBeat );
|
||||
fStartBeat = truncf(fStartBeat)+1;
|
||||
|
||||
const float fStartSecond = pSong->GetElapsedTimeFromBeat( fStartBeat );
|
||||
const float fEndSecond = fStartSecond + fSecsRemaining;
|
||||
const float lStartSecond = pSong->GetElapsedTimeFromBeat( fStartBeat );
|
||||
const float fEndSecond = lStartSecond + fSecsRemaining;
|
||||
fEndBeat = pSong->GetBeatFromElapsedTime( fEndSecond );
|
||||
fEndBeat = truncf(fEndBeat)+1;
|
||||
|
||||
|
||||
+9
-11
@@ -32,7 +32,10 @@ struct Attack
|
||||
bGlobal = false;
|
||||
bShowInAttackList = true;
|
||||
}
|
||||
Attack() { MakeBlank(); }
|
||||
Attack(): level(ATTACK_LEVEL_1), fStartSecond(-1),
|
||||
fSecsRemaining(0), sModifiers(RString()),
|
||||
bOn(false), bGlobal(false), bShowInAttackList(true)
|
||||
{} // MakeBlank() is effectively called here.
|
||||
Attack(
|
||||
AttackLevel level_,
|
||||
float fStartSecond_,
|
||||
@@ -40,16 +43,11 @@ struct Attack
|
||||
RString sModifiers_,
|
||||
bool bOn_,
|
||||
bool bGlobal_,
|
||||
bool bShowInAttackList_ = true )
|
||||
{
|
||||
level = level_;
|
||||
fStartSecond = fStartSecond_;
|
||||
fSecsRemaining = fSecsRemaining_;
|
||||
sModifiers = sModifiers_;
|
||||
bOn = bOn_;
|
||||
bGlobal = bGlobal_;
|
||||
bShowInAttackList = bShowInAttackList_;
|
||||
}
|
||||
bool bShowInAttackList_ = true ):
|
||||
level(level_), fStartSecond(fStartSecond_),
|
||||
fSecsRemaining(fSecsRemaining_), sModifiers(sModifiers_),
|
||||
bOn(bOn_), bGlobal(bGlobal_),
|
||||
bShowInAttackList(bShowInAttackList_) {}
|
||||
|
||||
void GetAttackBeats( const Song *pSong, float &fStartBeat, float &fEndBeat ) const;
|
||||
void GetRealtimeAttackBeats( const Song *pSong, const PlayerState* pPlayerState, float &fStartBeat, float &fEndBeat ) const;
|
||||
|
||||
@@ -80,11 +80,11 @@ void AutoKeysounds::LoadAutoplaySoundsInto( RageSoundReader_Chain *pChain )
|
||||
bool bSoundIsGlobal = true;
|
||||
{
|
||||
PlayerNumber pn = GetNextEnabledPlayer((PlayerNumber)-1);
|
||||
const TapNote &t = tn[pn];
|
||||
const TapNote &tap = tn[pn];
|
||||
pn = GetNextEnabledPlayer(pn);
|
||||
while( pn != PLAYER_INVALID )
|
||||
{
|
||||
if( tn[pn].type != TapNote::autoKeysound || tn[pn].iKeysoundIndex != t.iKeysoundIndex )
|
||||
if( tn[pn].type != TapNote::autoKeysound || tn[pn].iKeysoundIndex != tap.iKeysoundIndex )
|
||||
bSoundIsGlobal = false;
|
||||
pn = GetNextEnabledPlayer(pn);
|
||||
}
|
||||
|
||||
+3
-3
@@ -77,9 +77,9 @@ void BGAnimation::AddLayersFromAniDir( const RString &_sAniDir, const XNode *pNo
|
||||
else
|
||||
{
|
||||
// import as a single layer
|
||||
BGAnimationLayer* pLayer = new BGAnimationLayer;
|
||||
pLayer->LoadFromNode( pKey );
|
||||
this->AddChild( pLayer );
|
||||
BGAnimationLayer* bgLayer = new BGAnimationLayer;
|
||||
bgLayer->LoadFromNode( pKey );
|
||||
this->AddChild( bgLayer );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -746,9 +746,9 @@ void BackgroundImpl::Layer::UpdateCurBGChange( const Song *pSong, float fLastMus
|
||||
|
||||
if( !change.m_sTransition.empty() )
|
||||
{
|
||||
map<RString,BackgroundTransition>::const_iterator iter = mapNameToTransition.find( change.m_sTransition );
|
||||
ASSERT( iter != mapNameToTransition.end() );
|
||||
const BackgroundTransition &bt = iter->second;
|
||||
map<RString,BackgroundTransition>::const_iterator lIter = mapNameToTransition.find( change.m_sTransition );
|
||||
ASSERT( lIter != mapNameToTransition.end() );
|
||||
const BackgroundTransition &bt = lIter->second;
|
||||
m_pFadingBGA->RunCommandsOnLeaves( *bt.cmdLeaves );
|
||||
m_pFadingBGA->RunCommands( *bt.cmdRoot );
|
||||
}
|
||||
|
||||
@@ -250,9 +250,11 @@ void BeginnerHelper::DrawPrimitives()
|
||||
m_sStepCircle[scd][scde].Draw();
|
||||
|
||||
if( DrawCelShaded )
|
||||
{
|
||||
FOREACH_PlayerNumber( pn ) // Draw each dancer
|
||||
if( GAMESTATE->IsHumanPlayer(pn) )
|
||||
m_pDancer[pn]->DrawCelShaded();
|
||||
}
|
||||
else
|
||||
{
|
||||
DISPLAY->SetLighting( true );
|
||||
|
||||
+3
-4
@@ -5,10 +5,9 @@
|
||||
#include "RageTextureID.h"
|
||||
#include "ActorUtil.h"
|
||||
|
||||
Character::Character()
|
||||
{
|
||||
m_iPreloadRefcount = 0;
|
||||
}
|
||||
Character::Character(): m_sCharDir(""), m_sCharacterID(""),
|
||||
m_sDisplayName(""), m_sCardPath(""), m_sIconPath(""),
|
||||
m_bUsableInRave(false), m_iPreloadRefcount(0) {}
|
||||
|
||||
bool Character::Load( RString sCharDir )
|
||||
{
|
||||
|
||||
+4
-4
@@ -519,8 +519,8 @@ bool Course::GetTrailUnsorted( StepsType st, CourseDifficulty cd, Trail &trail )
|
||||
if( e->iChooseIndex < int(vSongAndSteps.size()) )
|
||||
{
|
||||
resolved.pSong = vpSongs[e->iChooseIndex];
|
||||
const vector<Steps*> &vpSongs = mapSongToSteps[resolved.pSong];
|
||||
resolved.pSteps = vpSongs[ RandomInt(vpSongs.size()) ];
|
||||
const vector<Steps*> &mappedSongs = mapSongToSteps[resolved.pSong];
|
||||
resolved.pSteps = mappedSongs[ RandomInt(mappedSongs.size()) ];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -930,8 +930,8 @@ const CourseEntry *Course::FindFixedSong( const Song *pSong ) const
|
||||
FOREACH_CONST( CourseEntry, m_vEntries, e )
|
||||
{
|
||||
const CourseEntry &entry = *e;
|
||||
Song *pSong = entry.songID.ToSong();
|
||||
if( pSong == pSong )
|
||||
Song *lSong = entry.songID.ToSong();
|
||||
if( pSong == lSong )
|
||||
return &entry;
|
||||
}
|
||||
|
||||
|
||||
+3
-12
@@ -55,18 +55,9 @@ public:
|
||||
float fGainSeconds; // time gained back at the beginning of the song. LifeMeterTime only.
|
||||
int iGainLives; // lives gained back at the beginning of the next song
|
||||
|
||||
CourseEntry()
|
||||
{
|
||||
bSecret = false;
|
||||
bNoDifficult = false;
|
||||
|
||||
songSort = SongSort_Randomize;
|
||||
iChooseIndex = 0;
|
||||
|
||||
sModifiers = "";
|
||||
fGainSeconds = 0;
|
||||
iGainLives = -1;
|
||||
}
|
||||
CourseEntry(): bSecret(false), bNoDifficult(false),
|
||||
songSort(SongSort_Randomize), iChooseIndex(0),
|
||||
sModifiers(RString("")), fGainSeconds(0), iGainLives(-1) {}
|
||||
|
||||
bool IsFixedSong() const { return songID.IsValid(); }
|
||||
|
||||
|
||||
+1
-1
@@ -464,7 +464,7 @@ void EditCourseUtil::PrepareForPlay()
|
||||
|
||||
PROFILEMAN->GetProfile(ProfileSlot_Player1)->m_GoalType = GoalType_Time;
|
||||
Course *pCourse = GAMESTATE->m_pCurCourse;
|
||||
PROFILEMAN->GetProfile(ProfileSlot_Player1)->m_iGoalSeconds = pCourse->m_fGoalSeconds;
|
||||
PROFILEMAN->GetProfile(ProfileSlot_Player1)->m_iGoalSeconds = static_cast<int>(pCourse->m_fGoalSeconds);
|
||||
}
|
||||
|
||||
void EditCourseUtil::GetAllEditCourses( vector<Course*> &vpCoursesOut )
|
||||
|
||||
+6
-6
@@ -311,15 +311,15 @@ const glyph &Font::GetGlyph( wchar_t c ) const
|
||||
|
||||
bool Font::FontCompleteForString( const wstring &str ) const
|
||||
{
|
||||
map<wchar_t,glyph*>::const_iterator m_pDefault = m_iCharToGlyph.find( FONT_DEFAULT_GLYPH );
|
||||
if( m_pDefault == m_iCharToGlyph.end() )
|
||||
map<wchar_t,glyph*>::const_iterator mapDefault = m_iCharToGlyph.find( FONT_DEFAULT_GLYPH );
|
||||
if( mapDefault == m_iCharToGlyph.end() )
|
||||
RageException::Throw( "The default glyph is missing from the font \"%s\".", path.c_str() );
|
||||
|
||||
for( unsigned i = 0; i < str.size(); ++i )
|
||||
{
|
||||
// If the glyph for this character is the default glyph, we're incomplete.
|
||||
const glyph &g = GetGlyph( str[i] );
|
||||
if( &g == m_pDefault->second )
|
||||
if( &g == mapDefault->second )
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -718,8 +718,8 @@ void Font::Load( const RString &sIniPath, RString sChars )
|
||||
|
||||
for(unsigned i = 0; i < ImportList.size(); ++i)
|
||||
{
|
||||
RString path = THEME->GetPathF( "", ImportList[i], true );
|
||||
if( path == "" )
|
||||
RString fPath = THEME->GetPathF( "", ImportList[i], true );
|
||||
if( fPath == "" )
|
||||
{
|
||||
RString s = ssprintf( "Font \"%s\" imports a font \"%s\" that doesn't exist", sIniPath.c_str(), ImportList[i].c_str() );
|
||||
Dialog::OK( s );
|
||||
@@ -727,7 +727,7 @@ void Font::Load( const RString &sIniPath, RString sChars )
|
||||
}
|
||||
|
||||
Font subfont;
|
||||
subfont.Load(path,"");
|
||||
subfont.Load(fPath,"");
|
||||
MergeFont(subfont);
|
||||
//FONT->UnloadFont(subfont);
|
||||
}
|
||||
|
||||
+5
-5
@@ -76,23 +76,23 @@ void Foreground::Update( float fDeltaTime )
|
||||
|
||||
/* Update the actor even if we're about to hide it, so queued commands
|
||||
* are always run. */
|
||||
float fDeltaTime;
|
||||
float lDeltaTime;
|
||||
if( !bga.m_bga->GetVisible() )
|
||||
{
|
||||
bga.m_bga->SetVisible( true );
|
||||
|
||||
const float fStartSecond = m_pSong->m_Timing.GetElapsedTimeFromBeat( bga.m_fStartBeat );
|
||||
fDeltaTime = GAMESTATE->m_fMusicSeconds - fStartSecond;
|
||||
lDeltaTime = GAMESTATE->m_fMusicSeconds - fStartSecond;
|
||||
}
|
||||
else
|
||||
{
|
||||
fDeltaTime = GAMESTATE->m_fMusicSeconds - m_fLastMusicSeconds;
|
||||
lDeltaTime = GAMESTATE->m_fMusicSeconds - m_fLastMusicSeconds;
|
||||
}
|
||||
|
||||
// This shouldn't go down, but be safe:
|
||||
fDeltaTime = max( fDeltaTime, 0 );
|
||||
lDeltaTime = max( lDeltaTime, 0 );
|
||||
|
||||
bga.m_bga->Update( fDeltaTime / fRate );
|
||||
bga.m_bga->Update( lDeltaTime / fRate );
|
||||
|
||||
if( GAMESTATE->m_fSongBeat > bga.m_fStopBeat )
|
||||
{
|
||||
|
||||
+2
-2
@@ -93,8 +93,8 @@ bool GameCommand::DescribesCurrentMode( PlayerNumber pn ) const
|
||||
if( m_pSteps == NULL && m_dc != Difficulty_Invalid )
|
||||
{
|
||||
// Why is this checking for all players?
|
||||
FOREACH_HumanPlayer( pn )
|
||||
if( GAMESTATE->m_PreferredDifficulty[pn] != m_dc )
|
||||
FOREACH_HumanPlayer( human )
|
||||
if( GAMESTATE->m_PreferredDifficulty[human] != m_dc )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -2361,9 +2361,9 @@ public:
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int GetCurrentStepsCredits( T* p, lua_State *L )
|
||||
static int GetCurrentStepsCredits( T* t, lua_State *L )
|
||||
{
|
||||
const Song* pSong = p->m_pCurSong;
|
||||
const Song* pSong = t->m_pCurSong;
|
||||
if( pSong == NULL )
|
||||
return 0;
|
||||
|
||||
|
||||
+3
-3
@@ -1093,12 +1093,12 @@ void InputMappings::ReadMappings( const InputScheme *pInputScheme, RString sFile
|
||||
vector<RString> sDeviceInputStrings;
|
||||
split( value, DEVICE_INPUT_SEPARATOR, sDeviceInputStrings, false );
|
||||
|
||||
for( unsigned i=0; i<sDeviceInputStrings.size() && i<unsigned(NUM_GAME_TO_DEVICE_SLOTS); i++ )
|
||||
for( unsigned j=0; j<sDeviceInputStrings.size() && j<unsigned(NUM_GAME_TO_DEVICE_SLOTS); j++ )
|
||||
{
|
||||
DeviceInput DeviceI;
|
||||
DeviceI.FromString( sDeviceInputStrings[i] );
|
||||
DeviceI.FromString( sDeviceInputStrings[j] );
|
||||
if( DeviceI.IsValid() )
|
||||
SetInputMap( DeviceI, GameI, i );
|
||||
SetInputMap( DeviceI, GameI, j );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-14
@@ -12,20 +12,12 @@ const int NUM_USER_GAME_TO_DEVICE_SLOTS = 2;
|
||||
|
||||
struct AutoMappingEntry
|
||||
{
|
||||
AutoMappingEntry( int i, DeviceButton db, GameButton gb, bool b )
|
||||
{
|
||||
m_iSlotIndex = i;
|
||||
m_deviceButton = db;
|
||||
m_gb = gb;
|
||||
m_bSecondController = b;
|
||||
}
|
||||
AutoMappingEntry()
|
||||
{
|
||||
m_iSlotIndex = -1;
|
||||
m_deviceButton = DeviceButton_Invalid;
|
||||
m_gb = GameButton_Invalid;
|
||||
m_bSecondController = false;
|
||||
}
|
||||
AutoMappingEntry( int i, DeviceButton db, GameButton gb, bool b ):
|
||||
m_iSlotIndex(i), m_deviceButton(db),
|
||||
m_gb(gb), m_bSecondController(b) {}
|
||||
AutoMappingEntry(): m_iSlotIndex(-1),
|
||||
m_deviceButton(DeviceButton_Invalid), m_gb(GameButton_Invalid),
|
||||
m_bSecondController(false) {}
|
||||
bool IsEmpty() const { return m_deviceButton == DeviceButton_Invalid && m_gb == GameButton_Invalid; }
|
||||
|
||||
int m_iSlotIndex;
|
||||
|
||||
@@ -25,6 +25,8 @@ private:
|
||||
void CreateImpl();
|
||||
RString m_sGroup, m_sName;
|
||||
ILocalizedStringImpl *m_pImpl;
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
LocalizedString& operator=(const LocalizedString& rhs);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -42,6 +42,9 @@ public:
|
||||
|
||||
private:
|
||||
lua_State *m_pLuaMain;
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
LuaManager& operator=(const LuaManager& rhs);
|
||||
LuaManager(const LuaManager& rhs);
|
||||
};
|
||||
|
||||
extern LuaManager *LUA;
|
||||
@@ -155,6 +158,9 @@ private:
|
||||
|
||||
LuaReference *m_Name;
|
||||
LuaReference *m_pOldValue;
|
||||
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
LuaThreadVariable& operator=(const LuaThreadVariable& rhs);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
+3
-3
@@ -155,15 +155,15 @@ void ModIconRow::SetFromGameState()
|
||||
continue; // skip
|
||||
|
||||
// search for a vacant spot
|
||||
for( int i=iPerferredCol; i<NUM_OPTION_ICONS; i++ )
|
||||
for( int j=iPerferredCol; j<NUM_OPTION_ICONS; j++ )
|
||||
{
|
||||
if( vsText[i] != "" )
|
||||
if( vsText[j] != "" )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
vsText[i] = sOption;
|
||||
vsText[j] = sOption;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -66,12 +66,9 @@ private:
|
||||
RageTexture* pTexture_,
|
||||
float fDelaySecs_,
|
||||
RageVector2 vTranslate_
|
||||
)
|
||||
{
|
||||
pTexture = pTexture_;
|
||||
fDelaySecs = fDelaySecs_;
|
||||
vTranslate = vTranslate_;
|
||||
}
|
||||
):
|
||||
pTexture(pTexture_), fDelaySecs(fDelaySecs_),
|
||||
vTranslate(vTranslate_) {}
|
||||
|
||||
RageTexture* pTexture;
|
||||
float fDelaySecs;
|
||||
|
||||
+2
-2
@@ -847,9 +847,9 @@ void NoteData::GetTapNoteRangeExclusive( int iTrack, int iStartRow, int iEndRow,
|
||||
--prev;
|
||||
if( prev->second.type == TapNote::hold_head )
|
||||
{
|
||||
int iStartRow = prev->first;
|
||||
int localStartRow = prev->first;
|
||||
const TapNote &tn = prev->second;
|
||||
if( iStartRow + tn.iDuration >= iEndRow )
|
||||
if( localStartRow + tn.iDuration >= iEndRow )
|
||||
end = prev;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,8 +250,8 @@ static void LoadFromSMNoteDataStringWithPlayer( NoteData& out, const RString &sS
|
||||
for( int t=0; t<out.GetNumTracks(); t++ )
|
||||
{
|
||||
NoteData::iterator begin = out.begin( t );
|
||||
NoteData::iterator end = out.end( t );
|
||||
while( begin != end )
|
||||
NoteData::iterator lEnd = out.end( t );
|
||||
while( begin != lEnd )
|
||||
{
|
||||
NoteData::iterator next = Increment( begin );
|
||||
const TapNote &tn = begin->second;
|
||||
@@ -629,12 +629,9 @@ int FindLongestOverlappingHoldNoteForAnyTrack( const NoteData &in, int iRow )
|
||||
int iMaxTailRow = -1;
|
||||
for( int t=0; t<in.GetNumTracks(); t++ )
|
||||
{
|
||||
for( int t=0; t<in.GetNumTracks(); t++ )
|
||||
{
|
||||
const TapNote &tn = in.GetTapNote( t, iRow );
|
||||
if( tn.type == TapNote::hold_head )
|
||||
iMaxTailRow = max( iMaxTailRow, iRow + tn.iDuration );
|
||||
}
|
||||
const TapNote &tn = in.GetTapNote( t, iRow );
|
||||
if( tn.type == TapNote::hold_head )
|
||||
iMaxTailRow = max( iMaxTailRow, iRow + tn.iDuration );
|
||||
}
|
||||
|
||||
return iMaxTailRow;
|
||||
|
||||
+13
-9
@@ -209,7 +209,7 @@ void NoteField::Load(
|
||||
memset( m_pDisplays, 0, sizeof(m_pDisplays) );
|
||||
FOREACH_EnabledPlayer( pn )
|
||||
{
|
||||
RString sNoteSkinLower = GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions.GetCurrent().m_sNoteSkin;
|
||||
sNoteSkinLower = GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions.GetCurrent().m_sNoteSkin;
|
||||
|
||||
// XXX: Re-setup sNoteSkinLower. Unsure if inserting the skin again is needed.
|
||||
if (sNoteSkinLower.empty())
|
||||
@@ -1005,8 +1005,8 @@ void NoteField::DrawPrimitives()
|
||||
m_pNoteData->GetTapNoteRange( c, iFirstRowToDraw, iLastRowToDraw+1, begin, end );
|
||||
for( ; begin != end; ++begin )
|
||||
{
|
||||
int i = begin->first;
|
||||
const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, i);
|
||||
int q = begin->first;
|
||||
const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, q);
|
||||
|
||||
// Switch modified by Wolfman2000, tested by Saturn2888
|
||||
// Fixes hold head overlapping issue, but not the rolls.
|
||||
@@ -1031,10 +1031,11 @@ void NoteField::DrawPrimitives()
|
||||
// TRICKY: If boomerang is on, then all notes in the range
|
||||
// [iFirstRowToDraw,iLastRowToDraw] aren't necessarily visible.
|
||||
// Test every note to make sure it's on screen before drawing.
|
||||
if( !IsOnScreen( NoteRowToBeat(i), c, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels ) )
|
||||
if( !IsOnScreen( NoteRowToBeat(q), c, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels ) )
|
||||
continue; // skip
|
||||
|
||||
ASSERT_M( NoteRowToBeat(i) > -2000, ssprintf("%i %i %i, %f %f", i, iLastRowToDraw, iFirstRowToDraw, GAMESTATE->m_fSongBeat, GAMESTATE->m_fMusicSeconds) );
|
||||
ASSERT_M( NoteRowToBeat(q) > -2000, ssprintf("%i %i %i, %f %f", q, iLastRowToDraw,
|
||||
iFirstRowToDraw, GAMESTATE->m_fSongBeat, GAMESTATE->m_fMusicSeconds) );
|
||||
|
||||
// See if there is a hold step that begins on this index.
|
||||
// Only do this if the noteskin cares.
|
||||
@@ -1043,7 +1044,7 @@ void NoteField::DrawPrimitives()
|
||||
{
|
||||
for( int c2=0; c2<m_pNoteData->GetNumTracks(); c2++ )
|
||||
{
|
||||
if( m_pNoteData->GetTapNote(c2, i).type == TapNote::hold_head)
|
||||
if( m_pNoteData->GetTapNote(c2, q).type == TapNote::hold_head)
|
||||
{
|
||||
bHoldNoteBeginsOnThisBeat = true;
|
||||
break;
|
||||
@@ -1053,15 +1054,18 @@ void NoteField::DrawPrimitives()
|
||||
|
||||
bool bIsInSelectionRange = false;
|
||||
if( m_iBeginMarker!=-1 && m_iEndMarker!=-1 )
|
||||
bIsInSelectionRange = m_iBeginMarker<=i && i<m_iEndMarker;
|
||||
bIsInSelectionRange = m_iBeginMarker<=q && q<m_iEndMarker;
|
||||
|
||||
bool bIsAddition = (tn.source == TapNote::addition);
|
||||
bool bIsHopoPossible = (tn.bHopoPossible);
|
||||
bool bUseAdditionColoring = bIsAddition || bIsHopoPossible;
|
||||
NoteDisplayCols *displayCols = tn.pn == PLAYER_INVALID ? m_pCurDisplay : m_pDisplays[tn.pn];
|
||||
displayCols->display[c].DrawTap( tn, c, NoteRowToBeat(i), bHoldNoteBeginsOnThisBeat, bUseAdditionColoring, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail, m_fYReverseOffsetPixels, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels, FADE_BEFORE_TARGETS_PERCENT );
|
||||
displayCols->display[c].DrawTap( tn, c, NoteRowToBeat(q), bHoldNoteBeginsOnThisBeat,
|
||||
bUseAdditionColoring, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail,
|
||||
m_fYReverseOffsetPixels, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels,
|
||||
FADE_BEFORE_TARGETS_PERCENT );
|
||||
|
||||
bool bNoteIsUpcoming = NoteRowToBeat(i) > GAMESTATE->m_fSongBeat;
|
||||
bool bNoteIsUpcoming = NoteRowToBeat(q) > GAMESTATE->m_fSongBeat;
|
||||
bAnyUpcomingInThisCol |= bNoteIsUpcoming;
|
||||
}
|
||||
|
||||
|
||||
@@ -282,22 +282,22 @@ try_again:
|
||||
const NoteSkinData &data = iter->second;
|
||||
|
||||
RString sPath; // fill this in below
|
||||
FOREACH_CONST( RString, data.vsDirSearchOrder, iter )
|
||||
FOREACH_CONST( RString, data.vsDirSearchOrder, lIter )
|
||||
{
|
||||
if( sButtonName.empty() )
|
||||
sPath = GetPathFromDirAndFile( *iter, sElement );
|
||||
sPath = GetPathFromDirAndFile( *lIter, sElement );
|
||||
else
|
||||
sPath = GetPathFromDirAndFile( *iter, sButtonName+" "+sElement );
|
||||
sPath = GetPathFromDirAndFile( *lIter, sButtonName+" "+sElement );
|
||||
if( !sPath.empty() )
|
||||
break; // done searching
|
||||
}
|
||||
|
||||
if( sPath.empty() )
|
||||
{
|
||||
FOREACH_CONST( RString, data.vsDirSearchOrder, iter )
|
||||
FOREACH_CONST( RString, data.vsDirSearchOrder, lIter )
|
||||
{
|
||||
if( !sButtonName.empty() )
|
||||
sPath = GetPathFromDirAndFile( *iter, "Fallback "+sElement );
|
||||
sPath = GetPathFromDirAndFile( *lIter, "Fallback "+sElement );
|
||||
if( !sPath.empty() )
|
||||
break; // done searching
|
||||
}
|
||||
@@ -340,9 +340,9 @@ try_again:
|
||||
GetFileContents( sPath, sNewFileName, true );
|
||||
RString sRealPath;
|
||||
|
||||
FOREACH_CONST( RString, data.vsDirSearchOrder, iter )
|
||||
FOREACH_CONST( RString, data.vsDirSearchOrder, lIter )
|
||||
{
|
||||
sRealPath = GetPathFromDirAndFile( *iter, sNewFileName );
|
||||
sRealPath = GetPathFromDirAndFile( *lIter, sNewFileName );
|
||||
if( !sRealPath.empty() )
|
||||
break; // done searching
|
||||
}
|
||||
|
||||
@@ -204,6 +204,29 @@ extern TapNote TAP_ORIGINAL_FAKE; // 'F'
|
||||
extern TapNote TAP_ADDITION_TAP;
|
||||
extern TapNote TAP_ADDITION_MINE;
|
||||
|
||||
/**
|
||||
* @brief Retrieve the string representing the TapNote Type.
|
||||
*
|
||||
* TODO: Find a way to standardize this with the other enum string calls.
|
||||
* @param tn the TapNote's type.
|
||||
* @return the intended string. */
|
||||
inline const RString TapNoteTypeToString( TapNote::Type tn )
|
||||
{
|
||||
switch( tn )
|
||||
{
|
||||
case TapNote::empty: return RString("empty");
|
||||
case TapNote::tap: return RString("tap");
|
||||
case TapNote::hold_head: return RString("hold_head");
|
||||
case TapNote::hold_tail: return RString("hold_tail");
|
||||
case TapNote::mine: return RString("mine");
|
||||
case TapNote::lift: return RString("lift");
|
||||
case TapNote::attack: return RString("attack");
|
||||
case TapNote::autoKeysound: return RString("autoKeysound");
|
||||
case TapNote::fake: return RString("fake");
|
||||
default: return RString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief The number of tracks allowed.
|
||||
*
|
||||
|
||||
+12
-12
@@ -476,9 +476,9 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
|
||||
if( sNoteId != "00" )
|
||||
{
|
||||
vTapNotes.push_back( TAP_ORIGINAL_TAP );
|
||||
map<RString,int>::const_iterator it = idToKeySoundIndex.find( sNoteId );
|
||||
if( it != idToKeySoundIndex.end() )
|
||||
vTapNotes.back().iKeysoundIndex = it->second;
|
||||
map<RString,int>::const_iterator rInt = idToKeySoundIndex.find( sNoteId );
|
||||
if( rInt != idToKeySoundIndex.end() )
|
||||
vTapNotes.back().iKeysoundIndex = rInt->second;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -762,28 +762,28 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur
|
||||
continue;
|
||||
|
||||
// this is keysound file name. Looks like "#WAV1A"
|
||||
RString sData = it->second;
|
||||
RString nData = it->second;
|
||||
RString sWavID = sName.Right(2);
|
||||
|
||||
/* Due to bugs in some programs, many BMS files have a "WAV" extension
|
||||
* on files in the BMS for files that actually have some other extension.
|
||||
* Do a search. Don't do a wildcard search; if sData is "song.wav",
|
||||
* we might also have "song.png", which we shouldn't match. */
|
||||
if( !IsAFile(out.GetSongDir()+sData) )
|
||||
if( !IsAFile(out.GetSongDir()+nData) )
|
||||
{
|
||||
const char *exts[] = { "oga", "ogg", "wav", "mp3", NULL }; // XXX: stop duplicating these everywhere
|
||||
for( unsigned i = 0; exts[i] != NULL; ++i )
|
||||
{
|
||||
RString fn = SetExtension( sData, exts[i] );
|
||||
RString fn = SetExtension( nData, exts[i] );
|
||||
if( IsAFile(out.GetSongDir()+fn) )
|
||||
{
|
||||
sData = fn;
|
||||
nData = fn;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( !IsAFile(out.GetSongDir()+sData) )
|
||||
LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", sData.c_str() );
|
||||
if( !IsAFile(out.GetSongDir()+nData) )
|
||||
LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", nData.c_str() );
|
||||
|
||||
sWavID.MakeUpper(); // HACK: undo the MakeLower()
|
||||
out.m_vsKeysoundFile.push_back( sData );
|
||||
@@ -807,11 +807,11 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur
|
||||
float fBeatsPerMeasure = GetBeatsPerMeasure( mapMeasureToTimeSig, iMeasureNo, sigAdjustmentsOut );
|
||||
int iRowsPerMeasure = BeatToNoteRow( fBeatsPerMeasure );
|
||||
|
||||
RString sData = it->second;
|
||||
int totalPairs = sData.size() / 2;
|
||||
RString nData = it->second;
|
||||
int totalPairs = nData.size() / 2;
|
||||
for( int i = 0; i < totalPairs; ++i )
|
||||
{
|
||||
RString sPair = sData.substr( i*2, 2 );
|
||||
RString sPair = nData.substr( i*2, 2 );
|
||||
|
||||
int iVal = 0;
|
||||
if( sscanf( sPair, "%x", &iVal ) == 0 || iVal == 0 )
|
||||
|
||||
@@ -750,9 +750,9 @@ static bool LoadFromMidi( const RString &sPath, Song &songOut )
|
||||
if( uVelocity == 0 )
|
||||
midiEventType = note_off;
|
||||
|
||||
MidiEvent event = { count, midiEventType };
|
||||
MidiEvent mEvent = { count, midiEventType };
|
||||
//float fBeat = NoteRowToBeat( MidiCountToNoteRow(count) );
|
||||
vMidiEvent[uNoteNumber].push_back( event );
|
||||
vMidiEvent[uNoteNumber].push_back( mEvent );
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -850,13 +850,13 @@ skip_track:
|
||||
// hold note ending on the same row as a tap note.
|
||||
NoteData::TrackMap::iterator begin, end;
|
||||
noteData.GetTapNoteRangeInclusive( nnt, MidiCountToNoteRow(count), MidiCountToNoteRow(count), begin, end, true );
|
||||
for( NoteData::TrackMap::iterator iter = begin; iter != end; iter++ )
|
||||
for( NoteData::TrackMap::iterator lIter = begin; lIter != end; lIter++ )
|
||||
{
|
||||
// if( gd == expert && fBeat >= 27*4-2 && nnt == green )
|
||||
// LOG->Trace( "shortening hold at %f, length %d", fBeat, length );
|
||||
|
||||
ASSERT( iter->second.type == TapNote::hold_head );
|
||||
iter->second.iDuration = MidiCountToNoteRow(count) - iter->first - 2;
|
||||
ASSERT( lIter->second.type == TapNote::hold_head );
|
||||
lIter->second.iDuration = MidiCountToNoteRow(count) - lIter->first - 2;
|
||||
}
|
||||
|
||||
noteData.SetTapNote( nnt, MidiCountToNoteRow(count), tn );
|
||||
|
||||
+14
-14
@@ -408,9 +408,9 @@ static bool LoadFromPMSFile( const RString &sPath, const NameToData_t &mapNameTo
|
||||
if( sNoteId != "00" )
|
||||
{
|
||||
vTapNotes.push_back( TAP_ORIGINAL_TAP );
|
||||
map<RString,int>::const_iterator it = idToKeySoundIndex.find( sNoteId );
|
||||
if( it != idToKeySoundIndex.end() )
|
||||
vTapNotes.back().iKeysoundIndex = it->second;
|
||||
map<RString,int>::const_iterator rInt = idToKeySoundIndex.find( sNoteId );
|
||||
if( rInt != idToKeySoundIndex.end() )
|
||||
vTapNotes.back().iKeysoundIndex = rInt->second;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -609,31 +609,31 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur
|
||||
continue;
|
||||
|
||||
// this is keysound file name. Looks like "#WAV1A"
|
||||
RString sData = it->second;
|
||||
RString nData = it->second;
|
||||
RString sWavID = sName.Right(2);
|
||||
|
||||
/* Due to bugs in some programs, many PMS files have a "WAV" extension
|
||||
* on files in the PMS for files that actually have some other extension.
|
||||
* Do a search. Don't do a wildcard search; if sData is "song.wav",
|
||||
* we might also have "song.png", which we shouldn't match. */
|
||||
if( !IsAFile(out.GetSongDir()+sData) )
|
||||
if( !IsAFile(out.GetSongDir()+nData) )
|
||||
{
|
||||
const char *exts[] = { "oga", "ogg", "wav", "mp3", NULL }; // XXX: stop duplicating these everywhere
|
||||
for( unsigned i = 0; exts[i] != NULL; ++i )
|
||||
{
|
||||
RString fn = SetExtension( sData, exts[i] );
|
||||
RString fn = SetExtension( nData, exts[i] );
|
||||
if( IsAFile(out.GetSongDir()+fn) )
|
||||
{
|
||||
sData = fn;
|
||||
nData = fn;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( !IsAFile(out.GetSongDir()+sData) )
|
||||
LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", sData.c_str() );
|
||||
if( !IsAFile(out.GetSongDir()+nData) )
|
||||
LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", nData.c_str() );
|
||||
|
||||
sWavID.MakeUpper(); // HACK: undo the MakeLower()
|
||||
out.m_vsKeysoundFile.push_back( sData );
|
||||
out.m_vsKeysoundFile.push_back( nData );
|
||||
idToKeySoundIndexOut[ sWavID ] = out.m_vsKeysoundFile.size()-1;
|
||||
LOG->Trace( "Inserting keysound index %u '%s'", unsigned(out.m_vsKeysoundFile.size()-1), sWavID.c_str() );
|
||||
}
|
||||
@@ -654,11 +654,11 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur
|
||||
float fBeatsPerMeasure = GetBeatsPerMeasure( mapMeasureToTimeSig, iMeasureNo, sigAdjustmentsOut );
|
||||
int iRowsPerMeasure = BeatToNoteRow( fBeatsPerMeasure );
|
||||
|
||||
RString sData = it->second;
|
||||
int totalPairs = sData.size() / 2;
|
||||
RString nData = it->second;
|
||||
int totalPairs = nData.size() / 2;
|
||||
for( int i = 0; i < totalPairs; ++i )
|
||||
{
|
||||
RString sPair = sData.substr( i*2, 2 );
|
||||
RString sPair = nData.substr( i*2, 2 );
|
||||
|
||||
int iVal = 0;
|
||||
if( sscanf( sPair, "%x", &iVal ) == 0 || iVal == 0 )
|
||||
@@ -738,7 +738,7 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur
|
||||
{
|
||||
// XXX: offset
|
||||
int iBPMNo;
|
||||
sscanf( sData, "%x", &iBPMNo ); // data is in hexadecimal
|
||||
sscanf( nData, "%x", &iBPMNo ); // data is in hexadecimal
|
||||
|
||||
RString sBPM;
|
||||
RString sTagToLookFor = ssprintf( "#bpm%02x", iBPMNo );
|
||||
|
||||
@@ -37,6 +37,7 @@ void SMLoader::LoadFromSMTokens(
|
||||
// insert stepstype hacks from GameManager.cpp here? -aj
|
||||
out.m_StepsType = GAMEMAN->StringToStepsType( sStepsType );
|
||||
out.SetDescription( sDescription );
|
||||
out.SetCredit( sDescription ); // this is often used for both.
|
||||
out.SetDifficulty( DwiCompatibleStringToDifficulty(sDifficulty) );
|
||||
|
||||
// Handle hacks that originated back when StepMania didn't have
|
||||
@@ -413,9 +414,9 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out )
|
||||
if(arrayWarpsFromNegativeBPMs.size() > 0)
|
||||
{
|
||||
// zomg we already have some warps...
|
||||
for( unsigned i=0; i<arrayWarpsFromNegativeBPMs.size(); i++ )
|
||||
for( unsigned j=0; j<arrayWarpsFromNegativeBPMs.size(); j++ )
|
||||
{
|
||||
out.AddWarpSegment( arrayWarpsFromNegativeBPMs[i] );
|
||||
out.AddWarpSegment( arrayWarpsFromNegativeBPMs[j] );
|
||||
}
|
||||
}
|
||||
// warp sorting will need to take place.
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
#include "RageUtil.h"
|
||||
#include "Song.h"
|
||||
#include "Steps.h"
|
||||
#include "ThemeMetric.h"
|
||||
|
||||
ThemeMetric<bool> USE_CREDIT ( "NotesWriterSM", "DescriptionUsesCreditField" );
|
||||
|
||||
/**
|
||||
* @brief Turn the BackgroundChange into a string.
|
||||
@@ -268,7 +271,8 @@ static RString GetSMNotesTag( const Song &song, const Steps &in )
|
||||
GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName, SmEscape(in.GetDescription()).c_str()) );
|
||||
lines.push_back( song.m_vsKeysoundFile.empty() ? "#NOTES:" : "#NOTES2:" );
|
||||
lines.push_back( ssprintf( " %s:", GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName ) );
|
||||
lines.push_back( ssprintf( " %s:", SmEscape(in.GetDescription()).c_str() ) );
|
||||
RString desc = (USE_CREDIT ? in.GetCredit() : in.GetDescription());
|
||||
lines.push_back( ssprintf( " %s:", SmEscape(desc).c_str() ) );
|
||||
lines.push_back( ssprintf( " %s:", DifficultyToString(in.GetDifficulty()).c_str() ) );
|
||||
lines.push_back( ssprintf( " %d:", in.GetMeter() ) );
|
||||
|
||||
|
||||
+1
-1
@@ -603,7 +603,7 @@ void OptionRow::UpdateEnabledDisabled()
|
||||
case LAYOUT_SHOW_ONE_IN_ROW:
|
||||
FOREACH_HumanPlayer( pn )
|
||||
{
|
||||
bool bRowEnabled = m_pHand->m_Def.m_vEnabledForPlayers.find(pn) != m_pHand->m_Def.m_vEnabledForPlayers.end();
|
||||
bRowEnabled = m_pHand->m_Def.m_vEnabledForPlayers.find(pn) != m_pHand->m_Def.m_vEnabledForPlayers.end();
|
||||
|
||||
if( !m_pHand->m_Def.m_bOneChoiceForAllPlayers )
|
||||
{
|
||||
|
||||
@@ -149,15 +149,15 @@ public:
|
||||
|
||||
{
|
||||
// Parse the basic configuration metric.
|
||||
Commands cmds = ParseCommands( ENTRY(sParam) );
|
||||
if( cmds.v.size() < 1 )
|
||||
Commands lCmds = ParseCommands( ENTRY(sParam) );
|
||||
if( lCmds.v.size() < 1 )
|
||||
RageException::Throw( "Parse error in \"ScreenOptionsMaster::%s\".", sParam.c_str() );
|
||||
|
||||
m_Def.m_bOneChoiceForAllPlayers = false;
|
||||
const int NumCols = atoi( cmds.v[0].m_vsArgs[0] );
|
||||
for( unsigned i=1; i<cmds.v.size(); i++ )
|
||||
const int NumCols = atoi( lCmds.v[0].m_vsArgs[0] );
|
||||
for( unsigned i=1; i<lCmds.v.size(); i++ )
|
||||
{
|
||||
const Command &cmd = cmds.v[i];
|
||||
const Command &cmd = lCmds.v[i];
|
||||
RString sName = cmd.GetName();
|
||||
|
||||
if( sName == "together" ) m_Def.m_bOneChoiceForAllPlayers = true;
|
||||
@@ -188,8 +188,8 @@ public:
|
||||
}
|
||||
else if( sName == "broadcastonexport" )
|
||||
{
|
||||
for( unsigned i=1; i<cmd.m_vsArgs.size(); i++ )
|
||||
m_vsBroadcastOnExport.push_back( cmd.m_vsArgs[i] );
|
||||
for( unsigned j=1; j<cmd.m_vsArgs.size(); j++ )
|
||||
m_vsBroadcastOnExport.push_back( cmd.m_vsArgs[j] );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+12
-1
@@ -75,7 +75,18 @@ struct OptionRowDefinition
|
||||
return m_vEnabledForPlayers.find(pn) != m_vEnabledForPlayers.end();
|
||||
}
|
||||
|
||||
OptionRowDefinition() { Init(); }
|
||||
OptionRowDefinition(): m_sName(""), m_sExplanationName(""),
|
||||
m_bOneChoiceForAllPlayers(false), m_selectType(SELECT_ONE),
|
||||
m_layoutType(LAYOUT_SHOW_ALL_IN_ROW), m_iDefault(-1),
|
||||
m_bExportOnChange(false), m_bAllowThemeItems(true),
|
||||
m_bAllowThemeTitle(true), m_bAllowExplanation(true),
|
||||
m_bShowChoicesListOnSelect(false)
|
||||
{
|
||||
m_vsChoices.clear();
|
||||
m_vEnabledForPlayers.clear();
|
||||
FOREACH_PlayerNumber( pn )
|
||||
m_vEnabledForPlayers.insert( pn );
|
||||
}
|
||||
void Init()
|
||||
{
|
||||
m_sName = "";
|
||||
|
||||
@@ -53,12 +53,12 @@ void OptionsCursor::Load( const RString &sMetricsGroup, bool bLoadCanGos )
|
||||
}
|
||||
#undef LOAD_SPR
|
||||
|
||||
m_iOriginalLeftX = m_sprLeft->GetX();
|
||||
m_iOriginalRightX = m_sprRight->GetX();
|
||||
m_iOriginalLeftX = static_cast<int>(m_sprLeft->GetX());
|
||||
m_iOriginalRightX = static_cast<int>(m_sprRight->GetX());
|
||||
if( bLoadCanGos )
|
||||
{
|
||||
m_iOriginalCanGoLeftX = m_sprCanGoLeft->GetX();
|
||||
m_iOriginalCanGoRightX = m_sprCanGoRight->GetX();
|
||||
m_iOriginalCanGoLeftX = static_cast<int>(m_sprCanGoLeft->GetX());
|
||||
m_iOriginalCanGoRightX = static_cast<int>(m_sprCanGoRight->GetX());
|
||||
}
|
||||
|
||||
SetCanGo( false, false );
|
||||
|
||||
+14
-14
@@ -138,17 +138,17 @@ void OptionListRow::SetUnderlines( const vector<bool> &aSelections, const Option
|
||||
if( pTarget->m_Def.m_selectType == SELECT_ONE )
|
||||
{
|
||||
int iSelection = m_pOptions->GetOneSelection(sDest);
|
||||
const OptionRowHandler *pHandler = m_pOptions->m_Rows.find(sDest)->second;
|
||||
int iDefault = pHandler->GetDefaultOption();
|
||||
const OptionRowHandler *lHandler = m_pOptions->m_Rows.find(sDest)->second;
|
||||
int iDefault = lHandler->GetDefaultOption();
|
||||
if( iDefault != -1 && iSelection != iDefault )
|
||||
bSelected |= true;
|
||||
}
|
||||
else if( pTarget->m_Def.m_selectType == SELECT_MULTIPLE )
|
||||
{
|
||||
const vector<bool> &bTargetSelections = m_pOptions->m_bSelections.find(sDest)->second;
|
||||
for( unsigned i=0; i<bTargetSelections.size(); i++ )
|
||||
for( unsigned j=0; j<bTargetSelections.size(); j++ )
|
||||
{
|
||||
if( bTargetSelections[i] )
|
||||
if( bTargetSelections[j] )
|
||||
bSelected = true;
|
||||
}
|
||||
}
|
||||
@@ -400,10 +400,10 @@ void OptionsList::Input( const InputEventPlus &input )
|
||||
wrap( iSelection, bTargetSelections.size() );
|
||||
SelectItem( sDest, iSelection );
|
||||
|
||||
Message msg("OptionsListQuickChange");
|
||||
msg.SetParam( "Player", pn );
|
||||
msg.SetParam( "Direction", iDir );
|
||||
MESSAGEMAN->Broadcast( msg );
|
||||
Message lMsg("OptionsListQuickChange");
|
||||
lMsg.SetParam( "Player", pn );
|
||||
lMsg.SetParam( "Direction", iDir );
|
||||
MESSAGEMAN->Broadcast( lMsg );
|
||||
}
|
||||
}
|
||||
return;
|
||||
@@ -426,9 +426,9 @@ void OptionsList::Input( const InputEventPlus &input )
|
||||
wrap( m_iMenuStackSelection, pHandler->m_Def.m_vsChoices.size()+1 ); // +1 for exit row
|
||||
PositionCursor();
|
||||
|
||||
Message msg("OptionsListLeft");
|
||||
msg.SetParam( "Player", input.pn );
|
||||
MESSAGEMAN->Broadcast( msg );
|
||||
Message lMsg("OptionsListLeft");
|
||||
lMsg.SetParam( "Player", input.pn );
|
||||
MESSAGEMAN->Broadcast( lMsg );
|
||||
return;
|
||||
}
|
||||
else if( input.MenuI == GAME_BUTTON_RIGHT )
|
||||
@@ -447,9 +447,9 @@ void OptionsList::Input( const InputEventPlus &input )
|
||||
wrap( m_iMenuStackSelection, pHandler->m_Def.m_vsChoices.size()+1 ); // +1 for exit row
|
||||
PositionCursor();
|
||||
|
||||
Message msg("OptionsListRight");
|
||||
msg.SetParam( "Player", input.pn );
|
||||
MESSAGEMAN->Broadcast( msg );
|
||||
Message lMsg("OptionsListRight");
|
||||
lMsg.SetParam( "Player", input.pn );
|
||||
MESSAGEMAN->Broadcast( lMsg );
|
||||
return;
|
||||
}
|
||||
else if( input.MenuI == GAME_BUTTON_START )
|
||||
|
||||
+14
-7
@@ -175,8 +175,15 @@ ThemeMetric<bool> REQUIRE_STEP_ON_MINES ( "Player", "RequireStepOnMines" );
|
||||
* For those wishing to make a theme very accurate to In The Groove 2, set this to false. */
|
||||
ThemeMetric<bool> ROLL_BODY_INCREMENTS_COMBO ( "Player", "RollBodyIncrementsCombo" );
|
||||
ThemeMetric<bool> CHECKPOINTS_TAPS_SEPARATE_JUDGMENT ( "Player", "CheckpointsTapsSeparateJudgment" );
|
||||
ThemeMetric<bool> SCORE_MISSED_HOLDS_AND_ROLLS ( "Player", "ScoreMissedHoldsAndRolls" ); // sm-ssc addition
|
||||
/**
|
||||
* @brief Do we score missed holds and rolls with HoldNoteScores?
|
||||
*
|
||||
* If set to true, missed holds and rolls are given LetGo judgments.
|
||||
* If set to false, missed holds and rolls are given no judgment on the hold side of things. */
|
||||
ThemeMetric<bool> SCORE_MISSED_HOLDS_AND_ROLLS ( "Player", "ScoreMissedHoldsAndRolls" );
|
||||
/** @brief How much of the song/course must have gone by before a Player's combo is colored? */
|
||||
ThemeMetric<float> PERCENT_UNTIL_COLOR_COMBO ( "Player", "PercentUntilColorCombo" );
|
||||
/** @brief How much combo must be earned before the announcer says "Combo Stopped"? */
|
||||
ThemeMetric<int> COMBO_STOPPED_AT ( "Player", "ComboStoppedAt" );
|
||||
ThemeMetric<float> ATTACK_RUN_TIME_RANDOM ( "Player", "AttackRunTimeRandom" );
|
||||
ThemeMetric<float> ATTACK_RUN_TIME_MINE ( "Player", "AttackRunTimeMine" );
|
||||
@@ -2810,16 +2817,16 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now )
|
||||
int iNumHoldsMissedThisRow = 0;
|
||||
|
||||
// start at r-1 so that we consider holds whose end rows are equal to the checkpoint row
|
||||
NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( r-1, r, true );
|
||||
for( ; !iter.IsAtEnd(); ++iter )
|
||||
NoteData::all_tracks_iterator nIter = m_NoteData.GetTapNoteRangeAllTracks( r-1, r, true );
|
||||
for( ; !nIter.IsAtEnd(); ++nIter )
|
||||
{
|
||||
TapNote &tn = *iter;
|
||||
TapNote &tn = *nIter;
|
||||
if( tn.type != TapNote::hold_head )
|
||||
continue;
|
||||
|
||||
int iStartRow = iter.Row();
|
||||
int iStartRow = nIter.Row();
|
||||
int iEndRow = iStartRow + tn.iDuration;
|
||||
int iTrack = iter.Track();
|
||||
int iTrack = nIter.Track();
|
||||
|
||||
// "the first row after the hold head that lands on a beat"
|
||||
int iFirstCheckpointOfHold = ((iStartRow+iCheckpointFrequencyRows)/iCheckpointFrequencyRows) * iCheckpointFrequencyRows;
|
||||
@@ -3193,7 +3200,7 @@ void Player::SetCombo( int iCombo, int iMisses )
|
||||
if( GAMESTATE->IsCourseMode() )
|
||||
{
|
||||
int iSongIndexStartColoring = GAMESTATE->m_pCurCourse->GetEstimatedNumStages();
|
||||
iSongIndexStartColoring = floor(iSongIndexStartColoring*PERCENT_UNTIL_COLOR_COMBO);
|
||||
iSongIndexStartColoring = static_cast<int>(floor(iSongIndexStartColoring*PERCENT_UNTIL_COLOR_COMBO));
|
||||
bPastBeginning = GAMESTATE->GetCourseSongIndex() >= iSongIndexStartColoring;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
#include "CommonMetrics.h"
|
||||
#include <float.h>
|
||||
|
||||
#define ONE( arr ) { for( unsigned Z = 0; Z < ARRAYLEN(arr); ++Z ) arr[Z]=1.0f; }
|
||||
|
||||
ThemeMetric<float> RANDOM_SPEED_CHANCE ( "PlayerOptions", "RandomSpeedChance" );
|
||||
ThemeMetric<float> RANDOM_REVERSE_CHANCE ( "PlayerOptions", "RandomReverseChance" );
|
||||
ThemeMetric<float> RANDOM_DARK_CHANCE ( "PlayerOptions", "RandomDarkChance" );
|
||||
|
||||
+30
-1
@@ -7,13 +7,42 @@ class Steps;
|
||||
class Trail;
|
||||
struct lua_State;
|
||||
|
||||
#define ONE( arr ) { for( unsigned Z = 0; Z < ARRAYLEN(arr); ++Z ) arr[Z]=1.0f; }
|
||||
|
||||
#include "GameConstantsAndTypes.h"
|
||||
#include "PlayerNumber.h"
|
||||
/** @brief Per-player options that are not saved between sessions. */
|
||||
class PlayerOptions
|
||||
{
|
||||
public:
|
||||
PlayerOptions() { Init(); };
|
||||
/**
|
||||
* @brief Set up the PlayerOptions with some reasonable defaults.
|
||||
*
|
||||
* This code was taken from Init() to use proper initialization. */
|
||||
PlayerOptions(): m_bSetScrollSpeed(false),
|
||||
m_fTimeSpacing(0), m_SpeedfTimeSpacing(1.0f),
|
||||
m_fScrollSpeed(1.0f), m_SpeedfScrollSpeed(1.0f),
|
||||
m_fScrollBPM(200), m_SpeedfScrollBPM(1.0f),
|
||||
m_fDark(0), m_SpeedfDark(1.0f),
|
||||
m_fBlind(0), m_SpeedfBlind(1.0f),
|
||||
m_fCover(0), m_SpeedfCover(1.0f),
|
||||
m_fRandAttack(0), m_SpeedfRandAttack(1.0f),
|
||||
m_fSongAttack(0), m_SpeedfSongAttack(1.0f),
|
||||
m_fPlayerAutoPlay(0), m_SpeedfPlayerAutoPlay(1.0f),
|
||||
m_bSetTiltOrSkew(false),
|
||||
m_fPerspectiveTilt(0), m_SpeedfPerspectiveTilt(1.0f),
|
||||
m_fSkew(0), m_SpeedfSkew(1.0f),
|
||||
m_fPassmark(0), m_SpeedfPassmark(1.0f),
|
||||
m_fRandomSpeed(0), m_SpeedfRandomSpeed(1.0f),
|
||||
m_bMuteOnError(false), m_FailType(FAIL_IMMEDIATE),
|
||||
m_ScoreDisplay(SCORING_ADD), m_sNoteSkin("")
|
||||
{
|
||||
ZERO( m_fAccels ); ONE( m_SpeedfAccels );
|
||||
ZERO( m_fEffects ); ONE( m_SpeedfEffects );
|
||||
ZERO( m_fAppearances ); ONE( m_SpeedfAppearances );
|
||||
ZERO( m_fScrolls ); ONE( m_SpeedfScrolls );
|
||||
ZERO( m_bTurns ); ZERO( m_bTransforms );
|
||||
};
|
||||
void Init();
|
||||
void Approach( const PlayerOptions& other, float fDeltaSeconds );
|
||||
RString GetString( bool bForceNoteSkin = false ) const;
|
||||
|
||||
+7
-7
@@ -363,8 +363,8 @@ float Profile::GetSongsActual( StepsType st, Difficulty dc ) const
|
||||
|
||||
FOREACHM_CONST( StepsID, HighScoresForASteps, hsfas.m_StepsHighScores, j )
|
||||
{
|
||||
const StepsID &id = j->first;
|
||||
Steps* pSteps = id.ToSteps( pSong, true );
|
||||
const StepsID &sid = j->first;
|
||||
Steps* pSteps = sid.ToSteps( pSong, true );
|
||||
CHECKPOINT_M( ssprintf("Profile::GetSongsActual: song %p, steps %p", pSong, pSteps) );
|
||||
|
||||
// If the Steps isn't loaded on the current machine, then we can't
|
||||
@@ -375,7 +375,7 @@ float Profile::GetSongsActual( StepsType st, Difficulty dc ) const
|
||||
if( pSteps->m_StepsType != st )
|
||||
continue;
|
||||
|
||||
CHECKPOINT_M( ssprintf("Profile::GetSongsActual: n %s = %p", id.ToString().c_str(), pSteps) );
|
||||
CHECKPOINT_M( ssprintf("Profile::GetSongsActual: n %s = %p", sid.ToString().c_str(), pSteps) );
|
||||
if( pSteps->GetDifficulty() != dc )
|
||||
continue; // skip
|
||||
CHECKPOINT;
|
||||
@@ -1303,13 +1303,13 @@ void Profile::LoadGeneralDataFromNode( const XNode* pNode )
|
||||
if( style->GetName() != "Style" )
|
||||
continue;
|
||||
|
||||
StyleID s;
|
||||
s.LoadFromNode( style );
|
||||
StyleID sID;
|
||||
sID.LoadFromNode( style );
|
||||
|
||||
if( !s.IsValid() )
|
||||
if( !sID.IsValid() )
|
||||
WARN_AND_CONTINUE;
|
||||
|
||||
style->GetTextValue( m_iNumSongsPlayedByStyle[s] );
|
||||
style->GetTextValue( m_iNumSongsPlayedByStyle[sID] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -489,10 +489,10 @@ bool ProfileManager::DeleteLocalProfile( RString sProfileID )
|
||||
g_vLocalProfile.erase( i );
|
||||
|
||||
// Delete all references to this profileID
|
||||
FOREACH_CONST( Preference<RString>*, m_sDefaultLocalProfileID.m_v, i )
|
||||
FOREACH_CONST( Preference<RString>*, m_sDefaultLocalProfileID.m_v, j )
|
||||
{
|
||||
if( (*i)->Get() == sProfileID )
|
||||
(*i)->Set( "" );
|
||||
if( (*j)->Get() == sProfileID )
|
||||
(*j)->Set( "" );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
+1
-1
@@ -760,7 +760,7 @@ bool RageDisplay::SaveScreenshot( RString sPath, GraphicsFileFormat format )
|
||||
int iHeight = 480;
|
||||
// This used to be lrintf. However, lrintf causes odd resolutions like
|
||||
// 639x480 (4:3) and 853x480 (16:9). ceilf gives correct values. -aj
|
||||
int iWidth = ceilf( iHeight * GetActualVideoModeParams().fDisplayAspectRatio );
|
||||
int iWidth = static_cast<int>(ceilf( iHeight * GetActualVideoModeParams().fDisplayAspectRatio ));
|
||||
timer.Touch();
|
||||
RageSurfaceUtils::Zoom( surface, iWidth, iHeight );
|
||||
// LOG->Trace( "%ix%i -> %ix%i (%.3f) in %f seconds", surface->w, surface->h, iWidth, iHeight, GetActualVideoModeParams().fDisplayAspectRatio, timer.GetDeltaTime() );
|
||||
|
||||
+25
-21
@@ -71,6 +71,7 @@ enum PixelFormat
|
||||
};
|
||||
const RString& PixelFormatToString( PixelFormat i );
|
||||
|
||||
/** @brief The parameters used for the present Video Mode. */
|
||||
class VideoModeParams
|
||||
{
|
||||
public:
|
||||
@@ -91,24 +92,27 @@ public:
|
||||
RString sIconFile_,
|
||||
bool PAL_,
|
||||
float fDisplayAspectRatio_
|
||||
)
|
||||
{
|
||||
windowed = windowed_;
|
||||
width = width_;
|
||||
height = height_;
|
||||
bpp = bpp_;
|
||||
rate = rate_;
|
||||
vsync = vsync_;
|
||||
interlaced = interlaced_;
|
||||
bSmoothLines = bSmoothLines_;
|
||||
bTrilinearFiltering = bTrilinearFiltering_;
|
||||
bAnisotropicFiltering = bAnisotropicFiltering_;
|
||||
sWindowTitle = sWindowTitle_;
|
||||
sIconFile = sIconFile_;
|
||||
PAL = PAL_;
|
||||
fDisplayAspectRatio = fDisplayAspectRatio_;
|
||||
}
|
||||
VideoModeParams() {}
|
||||
):
|
||||
windowed(windowed_),
|
||||
width(width_),
|
||||
height(height_),
|
||||
bpp(bpp_),
|
||||
rate(rate_),
|
||||
vsync(vsync_),
|
||||
interlaced(interlaced_),
|
||||
bSmoothLines(bSmoothLines_),
|
||||
bTrilinearFiltering(bTrilinearFiltering_),
|
||||
bAnisotropicFiltering(bAnisotropicFiltering_),
|
||||
sWindowTitle(sWindowTitle_),
|
||||
sIconFile(sIconFile_),
|
||||
PAL(PAL_),
|
||||
fDisplayAspectRatio(fDisplayAspectRatio_) {}
|
||||
|
||||
VideoModeParams(): windowed(false), width(0), height(0),
|
||||
bpp(0), rate(0), vsync(false), interlaced(false),
|
||||
bSmoothLines(false), bTrilinearFiltering(false),
|
||||
bAnisotropicFiltering(false), sWindowTitle(RString()),
|
||||
sIconFile(RString()), PAL(false), fDisplayAspectRatio(0.0) {}
|
||||
|
||||
bool windowed;
|
||||
int width;
|
||||
@@ -116,14 +120,14 @@ public:
|
||||
int bpp;
|
||||
int rate;
|
||||
bool vsync;
|
||||
bool interlaced;
|
||||
bool bSmoothLines;
|
||||
bool bTrilinearFiltering;
|
||||
bool bAnisotropicFiltering;
|
||||
bool interlaced;
|
||||
bool PAL;
|
||||
float fDisplayAspectRatio;
|
||||
RString sWindowTitle;
|
||||
RString sIconFile;
|
||||
bool PAL;
|
||||
float fDisplayAspectRatio;
|
||||
};
|
||||
|
||||
struct RenderTargetParam
|
||||
|
||||
+8
-2
@@ -6,8 +6,11 @@
|
||||
#include "RageFileBasic.h"
|
||||
struct lua_State;
|
||||
|
||||
/* This is the high-level interface, which interfaces with RageFileObj implementations
|
||||
* and RageFileManager. */
|
||||
/**
|
||||
* @brief High-level file access.
|
||||
*
|
||||
* This is the high-level interface, which interfaces with RageFileObj
|
||||
* implementations and RageFileManager. */
|
||||
class RageFile: public RageFileBasic
|
||||
{
|
||||
public:
|
||||
@@ -81,6 +84,9 @@ private:
|
||||
RString m_Path;
|
||||
RString m_sError;
|
||||
int m_Mode;
|
||||
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageFile& operator=(const RageFile& rhs);
|
||||
};
|
||||
|
||||
/** @brief Convenience wrappers for reading binary files. */
|
||||
|
||||
@@ -152,6 +152,9 @@ private:
|
||||
* file, and no seeking is performed. */
|
||||
bool m_bCRC32Enabled;
|
||||
uint32_t m_iCRC32;
|
||||
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageFileObj& operator=(const RageFileObj& rhs);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -245,14 +245,14 @@ int RageFileObjDeflate::WriteInternal( const void *pBuffer, size_t iBytes )
|
||||
|
||||
if( m_pDeflate->avail_out < sizeof(buf) )
|
||||
{
|
||||
int iBytes = sizeof(buf)-m_pDeflate->avail_out;
|
||||
int iRet = m_pFile->Write( buf, iBytes );
|
||||
int lBytes = sizeof(buf)-m_pDeflate->avail_out;
|
||||
int iRet = m_pFile->Write( buf, lBytes );
|
||||
if( iRet == -1 )
|
||||
{
|
||||
SetError( m_pFile->GetError() );
|
||||
return -1;
|
||||
}
|
||||
if( iRet < iBytes )
|
||||
if( iRet < lBytes )
|
||||
{
|
||||
SetError( "Partial write" );
|
||||
return -1;
|
||||
|
||||
@@ -377,8 +377,8 @@ void RageFileManager::GetDirListing( const RString &sPath_, vector<RString> &Add
|
||||
for( unsigned j = OldStart; j < AddTo.size(); ++j )
|
||||
{
|
||||
/* Skip the trailing slash on the mountpoint; there's already a slash there. */
|
||||
RString &sPath = AddTo[j];
|
||||
sPath.insert( 0, pLoadedDriver->m_sMountPoint, pLoadedDriver->m_sMountPoint.size()-1 );
|
||||
RString &lPath = AddTo[j];
|
||||
lPath.insert( 0, pLoadedDriver->m_sMountPoint, pLoadedDriver->m_sMountPoint.size()-1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
-14
@@ -60,12 +60,9 @@ inline bool IsMouse( InputDevice id ) { return id == DEVICE_MOUSE; }
|
||||
|
||||
struct InputDeviceInfo
|
||||
{
|
||||
InputDeviceInfo( InputDevice id_, RString sDesc_ )
|
||||
{
|
||||
id = id_;
|
||||
sDesc = sDesc_;
|
||||
}
|
||||
|
||||
InputDeviceInfo( InputDevice id_, RString sDesc_ ):
|
||||
id(id_), sDesc(sDesc_) {}
|
||||
|
||||
InputDevice id;
|
||||
RString sDesc;
|
||||
|
||||
@@ -317,22 +314,22 @@ public:
|
||||
* (0..1). This should be 0 for analog axes within the dead zone. */
|
||||
float level;
|
||||
|
||||
/* Whether this button is pressed. This is level with a threshold and
|
||||
* debouncing applied. */
|
||||
bool bDown;
|
||||
|
||||
// Mouse coordinates
|
||||
unsigned x;
|
||||
unsigned y;
|
||||
|
||||
/* Whether this button is pressed. This is level with a threshold and
|
||||
* debouncing applied. */
|
||||
bool bDown;
|
||||
|
||||
RageTimer ts;
|
||||
|
||||
DeviceInput(): device(InputDevice_Invalid), button(DeviceButton_Invalid), level(0), bDown(false), ts(RageZeroTimer) { }
|
||||
DeviceInput( InputDevice d, DeviceButton b, float l=0 ): device(d), button(b), level(l), bDown(l > 0.5f), ts(RageZeroTimer) { }
|
||||
DeviceInput(): device(InputDevice_Invalid), button(DeviceButton_Invalid), level(0), x(0), y(0), bDown(false), ts(RageZeroTimer) { }
|
||||
DeviceInput( InputDevice d, DeviceButton b, float l=0 ): device(d), button(b), level(l), x(0), y(0), bDown(l > 0.5f), ts(RageZeroTimer) { }
|
||||
DeviceInput( InputDevice d, DeviceButton b, float l, const RageTimer &t ):
|
||||
device(d), button(b), level(l), bDown(level > 0.5f), ts(t) { }
|
||||
device(d), button(b), level(l), x(0), y(0), bDown(level > 0.5f), ts(t) { }
|
||||
DeviceInput( InputDevice d, DeviceButton b, const RageTimer &t, unsigned xPos=0, unsigned yPos=0 ):
|
||||
device(d), button(b), x(xPos), y(yPos), bDown(false), ts(t) { }
|
||||
device(d), button(b), level(0), x(xPos), y(yPos), bDown(false), ts(t) { }
|
||||
|
||||
bool operator==( const DeviceInput &other ) const
|
||||
{
|
||||
|
||||
+2
-7
@@ -78,19 +78,14 @@ enum
|
||||
WRITE_LOUD = 0x04
|
||||
};
|
||||
|
||||
RageLog::RageLog()
|
||||
RageLog::RageLog(): m_bLogToDisk(false), m_bInfoToDisk(false),
|
||||
m_bUserLogToDisk(false), m_bFlush(false), m_bShowLogOutput(false)
|
||||
{
|
||||
g_fileLog = new RageFile;
|
||||
g_fileInfo = new RageFile;
|
||||
g_fileUserLog = new RageFile;
|
||||
|
||||
g_Mutex = new RageMutex( "Log" );
|
||||
|
||||
m_bLogToDisk = false;
|
||||
m_bInfoToDisk = false;
|
||||
m_bUserLogToDisk = false;
|
||||
m_bFlush = false;
|
||||
m_bShowLogOutput = false;
|
||||
}
|
||||
|
||||
RageLog::~RageLog()
|
||||
|
||||
+2
-2
@@ -575,8 +575,8 @@ float RageFastSin( float x )
|
||||
bInited = true;
|
||||
for( unsigned i=0; i<ARRAYLEN(table); i++ )
|
||||
{
|
||||
float x = SCALE(i,0,ARRAYLEN(table),0.0f,PI);
|
||||
table[i] = sinf(x);
|
||||
float z = SCALE(i,0,ARRAYLEN(table),0.0f,PI);
|
||||
table[i] = sinf(z);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-25
@@ -39,36 +39,20 @@
|
||||
#define samplerate() m_pSource->GetSampleRate()
|
||||
|
||||
RageSoundParams::RageSoundParams():
|
||||
m_StartTime( RageZeroTimer )
|
||||
{
|
||||
m_StartSecond = 0;
|
||||
m_LengthSeconds = -1;
|
||||
m_fFadeInSeconds = 0;
|
||||
m_fFadeOutSeconds = 0;
|
||||
m_Volume = 1.0f;
|
||||
m_fAttractVolume = 1.0f;
|
||||
m_fPitch = 1.0f;
|
||||
m_fSpeed = 1.0f;
|
||||
StopMode = M_AUTO;
|
||||
m_bIsCriticalSound = false;
|
||||
}
|
||||
m_StartSecond(0), m_LengthSeconds(-1), m_fFadeInSeconds(0),
|
||||
m_fFadeOutSeconds(0), m_Volume(1.0f), m_fAttractVolume(1.0f),
|
||||
m_fPitch(1.0f), m_fSpeed(1.0f), m_StartTime( RageZeroTimer ),
|
||||
StopMode(M_AUTO), m_bIsCriticalSound(false) {}
|
||||
|
||||
RageSoundLoadParams::RageSoundLoadParams()
|
||||
{
|
||||
m_bSupportRateChanging = false;
|
||||
m_bSupportPan = false;
|
||||
}
|
||||
RageSoundLoadParams::RageSoundLoadParams():
|
||||
m_bSupportRateChanging(false), m_bSupportPan(false) {}
|
||||
|
||||
RageSound::RageSound():
|
||||
m_Mutex( "RageSound" )
|
||||
m_Mutex( "RageSound" ), m_pSource(NULL), m_iStreamFrame(0),
|
||||
m_iStoppedSourceFrame(0), m_bPlaying(false),
|
||||
m_bDeleteWhenFinished(false)
|
||||
{
|
||||
ASSERT( SOUNDMAN );
|
||||
|
||||
m_pSource = NULL;
|
||||
m_iStreamFrame = 0;
|
||||
m_iStoppedSourceFrame = 0;
|
||||
m_bPlaying = false;
|
||||
m_bDeleteWhenFinished = false;
|
||||
}
|
||||
|
||||
RageSound::~RageSound()
|
||||
|
||||
+10
-11
@@ -22,7 +22,10 @@ public:
|
||||
virtual RString GetLoadedFilePath() const = 0;
|
||||
};
|
||||
|
||||
/* These are parameters to play a sound. These are normally changed before playing begins,
|
||||
/**
|
||||
* @brief The parameters to play a sound.
|
||||
*
|
||||
* These are normally changed before playing begins,
|
||||
* and are constant from then on. */
|
||||
struct RageSoundParams
|
||||
{
|
||||
@@ -50,17 +53,13 @@ struct RageSoundParams
|
||||
* If zero, or if not supported, the sound will start immediately. */
|
||||
RageTimer m_StartTime;
|
||||
|
||||
/* M_STOP stops the sound at the end.
|
||||
* M_LOOP restarts.
|
||||
* M_CONTINUE feeds silence, which is useful to continue timing longer than the actual sound.
|
||||
* M_AUTO (default) stops, obeying filename hints.
|
||||
*/
|
||||
/** @brief How does the sound stop itself, if it does? */
|
||||
enum StopMode_t {
|
||||
M_STOP,
|
||||
M_LOOP,
|
||||
M_CONTINUE,
|
||||
M_AUTO
|
||||
} StopMode;
|
||||
M_STOP, /**< The sound is stopped at the end. */
|
||||
M_LOOP, /**< The sound restarts itself. */
|
||||
M_CONTINUE, /**< Silence is fed at the end to continue timing longer than the sound. */
|
||||
M_AUTO /**< The default, the sound stops while obeying filename hints. */
|
||||
} /** @brief How does the sound stop itself, if it does? */ StopMode;
|
||||
|
||||
bool m_bIsCriticalSound; // "is a sound that should be played even during attract"
|
||||
};
|
||||
|
||||
@@ -35,11 +35,8 @@ static Preference<RString> g_sSoundDrivers( "SoundDrivers", "" ); // "" == DEFAU
|
||||
|
||||
RageSoundManager *SOUNDMAN = NULL;
|
||||
|
||||
RageSoundManager::RageSoundManager()
|
||||
{
|
||||
m_fMixVolume = 1.0f;
|
||||
m_fVolumeOfNonCriticalSounds = 1.0f;
|
||||
}
|
||||
RageSoundManager::RageSoundManager(): m_pDriver(NULL), m_fMixVolume(1.0f),
|
||||
m_fVolumeOfNonCriticalSounds(1.0f) {}
|
||||
|
||||
static LocalizedString COULDNT_FIND_SOUND_DRIVER( "RageSoundManager", "Couldn't find a sound driver that works" );
|
||||
void RageSoundManager::Init()
|
||||
|
||||
@@ -53,6 +53,9 @@ private:
|
||||
/* Prefs: */
|
||||
float m_fMixVolume;
|
||||
float m_fVolumeOfNonCriticalSounds;
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageSoundManager& operator=(const RageSoundManager& rhs);
|
||||
RageSoundManager(const RageSoundManager& rhs);
|
||||
};
|
||||
|
||||
extern RageSoundManager *SOUNDMAN;
|
||||
|
||||
@@ -33,7 +33,6 @@ RageSoundReader_Chain::~RageSoundReader_Chain()
|
||||
while( !m_apActiveSounds.empty() )
|
||||
ReleaseSound( m_apActiveSounds.front() );
|
||||
|
||||
map<RString, RageSoundReader *>::iterator it;
|
||||
FOREACH( RageSoundReader *, m_apLoadedSounds, it )
|
||||
delete *it;
|
||||
}
|
||||
@@ -103,7 +102,6 @@ int RageSoundReader_Chain::GetSampleRateInternal() const
|
||||
if( m_apLoadedSounds.empty() )
|
||||
return m_iPreferredSampleRate;
|
||||
|
||||
map<RString, RageSoundReader *>::const_iterator it;
|
||||
int iRate = -1;
|
||||
FOREACH_CONST( RageSoundReader *, m_apLoadedSounds, it )
|
||||
{
|
||||
@@ -120,7 +118,6 @@ void RageSoundReader_Chain::Finish()
|
||||
/* Figure out how many channels we have. All sounds must either have 1 or 2 channels,
|
||||
* which will be converted as needed, or have the same number of channels. */
|
||||
m_iChannels = 1;
|
||||
map<RString, RageSoundReader *>::iterator it;
|
||||
FOREACH( RageSoundReader *, m_apLoadedSounds, it )
|
||||
m_iChannels = max( m_iChannels, (*it)->GetNumChannels() );
|
||||
|
||||
|
||||
@@ -426,7 +426,7 @@ int RageSoundReader_MP3::do_mad_frame_decode( bool headers_only )
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ret = fill_buffer();
|
||||
ret = fill_buffer();
|
||||
if( ret <= 0 )
|
||||
return ret;
|
||||
bytes_read += ret;
|
||||
|
||||
@@ -18,7 +18,6 @@ RageSoundReader_Merge::RageSoundReader_Merge()
|
||||
|
||||
RageSoundReader_Merge::~RageSoundReader_Merge()
|
||||
{
|
||||
map<RString, RageSoundReader *>::iterator it;
|
||||
FOREACH( RageSoundReader *, m_aSounds, it )
|
||||
delete *it;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ private:
|
||||
float m_fPitchRatio;
|
||||
float m_fLastSetSpeedRatio;
|
||||
float m_fLastSetPitchRatio;
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageSoundReader_PitchChange& operator=(const RageSoundReader_PitchChange& rhs);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -34,7 +34,8 @@ bool RageSoundReader_Preload::PreloadSound( RageSoundReader *&pSound )
|
||||
}
|
||||
|
||||
RageSoundReader_Preload::RageSoundReader_Preload():
|
||||
m_Buffer( new RString )
|
||||
m_Buffer( new RString ), m_bBufferIs16Bit(false),
|
||||
m_iPosition(0), m_iSampleRate(0), m_iChannels(0), m_fRate(0.0f)
|
||||
{
|
||||
m_bBufferIs16Bit = g_bSoundPreload16bit.Get();
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@ private:
|
||||
int iFramesBuffered;
|
||||
int iPositionOfFirstFrame;
|
||||
float fRate;
|
||||
Mapping() { iFramesBuffered = iPositionOfFirstFrame = 0; fRate = 1.0f; }
|
||||
Mapping(): iFramesBuffered(0), iPositionOfFirstFrame(0),
|
||||
fRate(1.0f) {}
|
||||
};
|
||||
list<Mapping> m_StreamPosition;
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
struct RageSurfaceColor
|
||||
{
|
||||
uint8_t r, g, b, a;
|
||||
RageSurfaceColor() { }
|
||||
RageSurfaceColor(): r(0), g(0), b(0), a(0) { }
|
||||
RageSurfaceColor( uint8_t r_, uint8_t g_, uint8_t b_, uint8_t a_ ):
|
||||
r(r_), g(g_), b(b_), a(a_) { }
|
||||
|
||||
|
||||
@@ -585,8 +585,8 @@ static bool blit_rgba_to_rgba( const RageSurface *src_surf, const RageSurface *d
|
||||
unsigned int opixel = 0;
|
||||
for( int c = 0; c < 4; ++c )
|
||||
{
|
||||
int src = (pixel & src_masks[c]) >> src_shifts[c];
|
||||
opixel |= lookup[c][src] << dst_shifts[c];
|
||||
int lSrc = (pixel & src_masks[c]) >> src_shifts[c];
|
||||
opixel |= lookup[c][lSrc] << dst_shifts[c];
|
||||
}
|
||||
|
||||
// Store it.
|
||||
|
||||
@@ -454,7 +454,7 @@ static acolorhist_item *mediancut( acolorhist_item *achv, int colors, int sum, i
|
||||
#ifdef REP_AVERAGE_PIXELS
|
||||
int indx = bv[bi].ind;
|
||||
int clrs = bv[bi].colors;
|
||||
long r = 0, g = 0, b = 0, a = 0, sum = 0;
|
||||
long r = 0, g = 0, b = 0, a = 0, lSum = 0;
|
||||
|
||||
for ( int i = 0; i < clrs; ++i )
|
||||
{
|
||||
@@ -462,15 +462,15 @@ static acolorhist_item *mediancut( acolorhist_item *achv, int colors, int sum, i
|
||||
g += PAM_GETG( achv[indx + i].acolor ) * achv[indx + i].value;
|
||||
b += PAM_GETB( achv[indx + i].acolor ) * achv[indx + i].value;
|
||||
a += PAM_GETA( achv[indx + i].acolor ) * achv[indx + i].value;
|
||||
sum += achv[indx + i].value;
|
||||
lSum += achv[indx + i].value;
|
||||
}
|
||||
r = r / sum;
|
||||
r = r / lSum;
|
||||
r = min( r, (long) maxval );
|
||||
g = g / sum;
|
||||
g = g / lSum;
|
||||
g = min( g, (long) maxval );
|
||||
b = b / sum;
|
||||
b = b / lSum;
|
||||
b = min( b, (long) maxval );
|
||||
a = a / sum;
|
||||
a = a / lSum;
|
||||
a = min( a, (long) maxval );
|
||||
PAM_ASSIGN( acolormap[bi].acolor, (uint8_t)r, (uint8_t)g, (uint8_t)b, (uint8_t)a );
|
||||
#endif // REP_AVERAGE_PIXELS
|
||||
|
||||
+5
-10
@@ -7,16 +7,11 @@
|
||||
|
||||
|
||||
RageTexture::RageTexture( RageTextureID name ):
|
||||
m_ID(name)
|
||||
{
|
||||
m_iRefCount = 1;
|
||||
m_bWasUsed = false;
|
||||
|
||||
m_iSourceWidth = m_iSourceHeight = 0;
|
||||
m_iTextureWidth = m_iTextureHeight = 0;
|
||||
m_iImageWidth = m_iImageHeight = 0;
|
||||
m_iFramesWide = m_iFramesHigh = 1;
|
||||
}
|
||||
m_ID(name), m_iRefCount(1), m_bWasUsed(false),
|
||||
m_iSourceWidth(0), m_iSourceHeight(0),
|
||||
m_iTextureWidth(0), m_iTextureHeight(0),
|
||||
m_iImageWidth(0), m_iImageHeight(0),
|
||||
m_iFramesWide(1), m_iFramesHigh(1) {}
|
||||
|
||||
|
||||
RageTexture::~RageTexture()
|
||||
|
||||
+9
-2
@@ -59,8 +59,15 @@ struct RageTextureID
|
||||
|
||||
void Init();
|
||||
|
||||
RageTextureID() { Init(); }
|
||||
RageTextureID( const RString &fn ) { Init(); SetFilename(fn); }
|
||||
RageTextureID(): filename(RString()), iMaxSize(0), bMipMaps(false),
|
||||
iAlphaBits(0), iGrayscaleBits(0), iColorDepth(0),
|
||||
bDither(false), bStretch(false), bHotPinkColorKey(false),
|
||||
AdditionalTextureHints(RString()), Policy(TEX_DEFAULT) { Init(); }
|
||||
RageTextureID( const RString &fn ): filename(RString()), iMaxSize(0),
|
||||
bMipMaps(false), iAlphaBits(0), iGrayscaleBits(0),
|
||||
iColorDepth(0), bDither(false), bStretch(false),
|
||||
bHotPinkColorKey(false), AdditionalTextureHints(RString()),
|
||||
Policy(TEX_DEFAULT) { Init(); SetFilename(fn); }
|
||||
void SetFilename( const RString &fn );
|
||||
};
|
||||
|
||||
|
||||
@@ -36,11 +36,9 @@ namespace
|
||||
map<RageTextureID, RageTexture*> m_mapPathToTexture;
|
||||
};
|
||||
|
||||
RageTextureManager::RageTextureManager()
|
||||
{
|
||||
m_iNoWarnAboutOddDimensions = 0;
|
||||
m_TexturePolicy = RageTextureID::TEX_DEFAULT;
|
||||
}
|
||||
RageTextureManager::RageTextureManager():
|
||||
m_iNoWarnAboutOddDimensions(0),
|
||||
m_TexturePolicy(RageTextureID::TEX_DEFAULT) {}
|
||||
|
||||
RageTextureManager::~RageTextureManager()
|
||||
{
|
||||
@@ -106,9 +104,8 @@ class RageTexture_Default: public RageTexture
|
||||
{
|
||||
public:
|
||||
RageTexture_Default():
|
||||
RageTexture( RageTextureID() )
|
||||
RageTexture( RageTextureID() ), m_uTexHandle(0)
|
||||
{
|
||||
m_uTexHandle = 0;
|
||||
m_iSourceWidth = m_iSourceHeight = 1;
|
||||
m_iTextureWidth = m_iTextureHeight = 1;
|
||||
m_iImageWidth = m_iImageHeight = 1;
|
||||
|
||||
+11
-18
@@ -14,30 +14,23 @@ struct RageTextureManagerPrefs
|
||||
bool m_bHighResolutionTextures;
|
||||
bool m_bMipMaps;
|
||||
|
||||
RageTextureManagerPrefs()
|
||||
{
|
||||
m_bDelayedDelete = false;
|
||||
m_iMovieColorDepth = 16;
|
||||
m_iTextureColorDepth = 16;
|
||||
m_iMaxTextureResolution = 1024;
|
||||
m_bHighResolutionTextures = true;
|
||||
m_bMipMaps = false;
|
||||
}
|
||||
RageTextureManagerPrefs(): m_iTextureColorDepth(16),
|
||||
m_iMovieColorDepth(16), m_bDelayedDelete(false),
|
||||
m_iMaxTextureResolution(1024),
|
||||
m_bHighResolutionTextures(true), m_bMipMaps(false) {}
|
||||
RageTextureManagerPrefs(
|
||||
int iTextureColorDepth,
|
||||
int iMovieColorDepth,
|
||||
bool bDelayedDelete,
|
||||
int iMaxTextureResolution,
|
||||
bool bHighResolutionTextures,
|
||||
bool bMipMaps )
|
||||
{
|
||||
m_bDelayedDelete = bDelayedDelete;
|
||||
m_iMovieColorDepth = iMovieColorDepth;
|
||||
m_iTextureColorDepth = iTextureColorDepth;
|
||||
m_iMaxTextureResolution = iMaxTextureResolution;
|
||||
m_bHighResolutionTextures = bHighResolutionTextures;
|
||||
m_bMipMaps = bMipMaps;
|
||||
}
|
||||
bool bMipMaps ):
|
||||
m_iTextureColorDepth(iTextureColorDepth),
|
||||
m_iMovieColorDepth(iMovieColorDepth),
|
||||
m_bDelayedDelete(bDelayedDelete),
|
||||
m_iMaxTextureResolution(iMaxTextureResolution),
|
||||
m_bHighResolutionTextures(bHighResolutionTextures),
|
||||
m_bMipMaps(bMipMaps) {}
|
||||
|
||||
bool operator!=( const RageTextureManagerPrefs& rhs ) const
|
||||
{
|
||||
|
||||
+12
-26
@@ -65,7 +65,8 @@ struct ThreadSlot
|
||||
int m_iCurCheckpoint, m_iNumCheckpoints;
|
||||
const char *GetFormattedCheckpoint( int lineno );
|
||||
|
||||
ThreadSlot() { Init(); }
|
||||
ThreadSlot(): m_bUsed(false), m_iID(GetInvalidThreadId()),
|
||||
m_pImpl(NULL), m_iCurCheckpoint(0), m_iNumCheckpoints(0) {}
|
||||
void Init()
|
||||
{
|
||||
m_iID = GetInvalidThreadId();
|
||||
@@ -206,18 +207,11 @@ static ThreadSlot *GetUnknownThreadSlot()
|
||||
return g_pUnknownThreadSlot;
|
||||
}
|
||||
|
||||
RageThread::RageThread()
|
||||
{
|
||||
m_pSlot = NULL;
|
||||
m_sName = "unnamed";
|
||||
}
|
||||
RageThread::RageThread(): m_pSlot(NULL), m_sName("unnamed") {}
|
||||
|
||||
RageThread::RageThread( const RageThread &cpy )
|
||||
{
|
||||
/* Copying a thread does not start the copy. */
|
||||
m_pSlot = NULL;
|
||||
m_sName = cpy.m_sName;
|
||||
}
|
||||
/* Copying a thread does not start the copy. */
|
||||
RageThread::RageThread( const RageThread &cpy ):
|
||||
m_pSlot(NULL), m_sName(cpy.m_sName) {}
|
||||
|
||||
RageThread::~RageThread()
|
||||
{
|
||||
@@ -520,12 +514,9 @@ static set<int> *g_FreeMutexIDs = NULL;
|
||||
#endif
|
||||
|
||||
RageMutex::RageMutex( const RString &name ):
|
||||
m_sName( name )
|
||||
m_sName( name ), m_pMutex( MakeMutex (this ) ),
|
||||
m_LockedBy(GetInvalidThreadId()), m_LockCnt(0)
|
||||
{
|
||||
m_pMutex = MakeMutex( this );
|
||||
m_LockedBy = GetInvalidThreadId();
|
||||
m_LockCnt = 0;
|
||||
|
||||
|
||||
/* if( g_FreeMutexIDs == NULL )
|
||||
{
|
||||
@@ -659,7 +650,8 @@ LockMutex::LockMutex( RageMutex &pMutex, const char *file_, int line_ ):
|
||||
mutex( pMutex ),
|
||||
file( file_ ),
|
||||
line( line_ ),
|
||||
locked_at( RageTimer::GetTimeSinceStart() )
|
||||
locked_at( RageTimer::GetTimeSinceStart() ),
|
||||
locked(false) // ensure it gets locked inside.
|
||||
{
|
||||
mutex.Lock();
|
||||
locked = true;
|
||||
@@ -687,10 +679,7 @@ void LockMutex::Unlock()
|
||||
}
|
||||
|
||||
RageEvent::RageEvent( RString name ):
|
||||
RageMutex( name )
|
||||
{
|
||||
m_pEvent = MakeEvent( m_pMutex );
|
||||
}
|
||||
RageMutex( name ), m_pEvent(MakeEvent(m_pMutex)) {}
|
||||
|
||||
RageEvent::~RageEvent()
|
||||
{
|
||||
@@ -732,10 +721,7 @@ bool RageEvent::WaitTimeoutSupported() const
|
||||
}
|
||||
|
||||
RageSemaphore::RageSemaphore( RString sName, int iInitialValue ):
|
||||
m_sName( sName )
|
||||
{
|
||||
m_pSema = MakeSemaphore( iInitialValue );
|
||||
}
|
||||
m_sName( sName ), m_pSema(MakeSemaphore( iInitialValue )) {}
|
||||
|
||||
RageSemaphore::~RageSemaphore()
|
||||
{
|
||||
|
||||
@@ -46,6 +46,9 @@ private:
|
||||
|
||||
static bool s_bSystemSupportsTLS;
|
||||
static bool s_bIsShowingDialog;
|
||||
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageThread& operator=(const RageThread& rhs);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -61,6 +64,9 @@ public:
|
||||
|
||||
private:
|
||||
ThreadSlot *m_pSlot;
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageThreadRegister& operator=(const RageThreadRegister& rhs);
|
||||
RageThreadRegister(const RageThreadRegister& rhs);
|
||||
};
|
||||
|
||||
namespace Checkpoints
|
||||
@@ -102,6 +108,10 @@ protected:
|
||||
int m_LockCnt;
|
||||
|
||||
void MarkLockedMutex();
|
||||
private:
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageMutex& operator=(const RageMutex& rhs);
|
||||
RageMutex(const RageMutex& rhs);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -128,6 +138,9 @@ public:
|
||||
*
|
||||
* This can only be called once. */
|
||||
void Unlock();
|
||||
private:
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
LockMutex& operator=(const LockMutex& rhs);
|
||||
};
|
||||
|
||||
#define LockMut(m) LockMutex UNIQUE_NAME(LocalLock) (m, __FILE__, __LINE__)
|
||||
@@ -149,6 +162,9 @@ public:
|
||||
void Signal();
|
||||
void Broadcast();
|
||||
bool WaitTimeoutSupported() const;
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageEvent& operator=(const RageEvent& rhs);
|
||||
RageEvent(const RageEvent& rhs);
|
||||
|
||||
private:
|
||||
EventImpl *m_pEvent;
|
||||
@@ -170,6 +186,10 @@ public:
|
||||
private:
|
||||
SemaImpl *m_pSema;
|
||||
RString m_sName;
|
||||
|
||||
// Swallow up warnings. If they must be used, define them.
|
||||
RageSemaphore& operator=(const RageSemaphore& rhs);
|
||||
RageSemaphore(const RageSemaphore& rhs);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
class RageTimer
|
||||
{
|
||||
public:
|
||||
RageTimer() { Touch(); }
|
||||
RageTimer(): m_secs(0), m_us(0) { Touch(); }
|
||||
RageTimer( int secs, int us ): m_secs(secs), m_us(us) { }
|
||||
|
||||
/* Time ago this RageTimer represents. */
|
||||
|
||||
+17
-16
@@ -100,9 +100,9 @@ struct lua_State;
|
||||
struct RageVector2
|
||||
{
|
||||
public:
|
||||
RageVector2() {}
|
||||
RageVector2( const float * f ) { x=f[0]; y=f[1]; }
|
||||
RageVector2( float x1, float y1 ) { x=x1; y=y1; }
|
||||
RageVector2(): x(0), y(0) {}
|
||||
RageVector2( const float * f ): x(f[0]), y(f[1]) {}
|
||||
RageVector2( float x1, float y1 ): x(x1), y(y1) {}
|
||||
|
||||
// casting
|
||||
operator float* () { return &x; };
|
||||
@@ -129,9 +129,9 @@ public:
|
||||
struct RageVector3
|
||||
{
|
||||
public:
|
||||
RageVector3() {}
|
||||
RageVector3( const float * f ) { x=f[0]; y=f[1]; z=f[2]; }
|
||||
RageVector3( float x1, float y1, float z1 ) { x=x1; y=y1; z=z1; }
|
||||
RageVector3(): x(0), y(0), z(0) {}
|
||||
RageVector3( const float * f ): x(f[0]), y(f[1]), z(f[2]) {}
|
||||
RageVector3( float x1, float y1, float z1 ): x(x1), y(y1), z(z1) {}
|
||||
|
||||
// casting
|
||||
operator float* () { return &x; };
|
||||
@@ -158,9 +158,9 @@ public:
|
||||
struct RageVector4
|
||||
{
|
||||
public:
|
||||
RageVector4() {}
|
||||
RageVector4( const float * f ) { x=f[0]; y=f[1]; z=f[2]; w=f[3]; }
|
||||
RageVector4( float x1, float y1, float z1, float w1 ) { x=x1; y=y1; z=z1; w=w1; }
|
||||
RageVector4(): x(0), y(0), z(0), w(0) {}
|
||||
RageVector4( const float * f ): x(f[0]), y(f[1]), z(f[2]), w(f[3]) {}
|
||||
RageVector4( float x1, float y1, float z1, float w1 ): x(x1), y(y1), z(z1), w(w1) {}
|
||||
|
||||
// casting
|
||||
operator float* () { return &x; };
|
||||
@@ -186,9 +186,9 @@ public:
|
||||
struct RageColor
|
||||
{
|
||||
public:
|
||||
RageColor() : r(0), g(0), b(0), a(0) {}
|
||||
explicit RageColor( const float * f ) { r=f[0]; g=f[1]; b=f[2]; a=f[3]; }
|
||||
RageColor( float r1, float g1, float b1, float a1 ) { r=r1; g=g1; b=b1; a=a1; }
|
||||
RageColor(): r(0), g(0), b(0), a(0) {}
|
||||
explicit RageColor( const float * f ): r(f[0]), g(f[1]), b(f[2]), a(f[3]) {}
|
||||
RageColor( float r1, float g1, float b1, float a1 ): r(r1), g(g1), b(b1), a(a1) {}
|
||||
|
||||
// casting
|
||||
operator float* () { return &r; };
|
||||
@@ -290,8 +290,8 @@ class RageVColor
|
||||
public:
|
||||
uint8_t b,g,r,a; // specific ordering required by Direct3D
|
||||
|
||||
RageVColor() { }
|
||||
RageVColor(const RageColor &rc) { *this = rc; }
|
||||
RageVColor(): b(0), g(0), r(0), a(0) { }
|
||||
RageVColor(const RageColor &rc): b(0), g(0), r(0), a(0) { *this = rc; }
|
||||
RageVColor &operator= (const RageColor &rc)
|
||||
{
|
||||
r = FTOC(rc.r); g = FTOC(rc.g); b = FTOC(rc.b); a = FTOC(rc.a);
|
||||
@@ -305,8 +305,8 @@ namespace StepMania
|
||||
class Rect
|
||||
{
|
||||
public:
|
||||
Rect() {};
|
||||
Rect(T l, T t, T r, T b) { left = l, top = t, right = r, bottom = b; };
|
||||
Rect(): left(0), top(0), right(0), bottom(0) {}
|
||||
Rect(T l, T t, T r, T b): left(l), top(t), right(r), bottom(b) {}
|
||||
|
||||
T GetWidth() const { return right-left; };
|
||||
T GetHeight() const { return bottom-top; };
|
||||
@@ -349,6 +349,7 @@ struct RageModelVertex // doesn't have color. Relies on material color
|
||||
p(0,0,0),
|
||||
n(0,0,0),
|
||||
t(0,0),
|
||||
bone(0),
|
||||
TextureMatrixScale(1,1)
|
||||
{ }
|
||||
RageVector3 p; // position
|
||||
|
||||
+3
-5
@@ -17,7 +17,7 @@
|
||||
|
||||
RandomGen g_RandomNumberGenerator;
|
||||
|
||||
MersenneTwister::MersenneTwister( int iSeed )
|
||||
MersenneTwister::MersenneTwister( int iSeed ) : m_iNext(0)
|
||||
{
|
||||
Reset( iSeed );
|
||||
}
|
||||
@@ -1315,15 +1315,13 @@ void Regex::Release()
|
||||
m_sPattern = RString();
|
||||
}
|
||||
|
||||
Regex::Regex( const RString &sStr )
|
||||
Regex::Regex( const RString &sStr ): m_pReg(NULL), m_iBackrefs(0), m_sPattern(RString())
|
||||
{
|
||||
m_pReg = NULL;
|
||||
Set( sStr );
|
||||
}
|
||||
|
||||
Regex::Regex( const Regex &rhs )
|
||||
Regex::Regex( const Regex &rhs ): m_pReg(NULL), m_iBackrefs(0), m_sPattern(RString())
|
||||
{
|
||||
m_pReg = NULL;
|
||||
Set( rhs.m_sPattern );
|
||||
}
|
||||
|
||||
|
||||
+7
-17
@@ -27,22 +27,17 @@ class AutoPtrCopyOnWrite
|
||||
{
|
||||
public:
|
||||
/* This constructor only exists to make us work with STL containers. */
|
||||
inline AutoPtrCopyOnWrite()
|
||||
inline AutoPtrCopyOnWrite(): m_pPtr(NULL), m_iRefCount(new int(1))
|
||||
{
|
||||
m_pPtr = NULL;
|
||||
m_iRefCount = new int(1);
|
||||
}
|
||||
|
||||
explicit inline AutoPtrCopyOnWrite( T *p )
|
||||
explicit inline AutoPtrCopyOnWrite( T *p ): m_pPtr(p), m_iRefCount(new int(1))
|
||||
{
|
||||
m_pPtr = p;
|
||||
m_iRefCount = new int(1);
|
||||
}
|
||||
|
||||
inline AutoPtrCopyOnWrite( const AutoPtrCopyOnWrite &rhs )
|
||||
inline AutoPtrCopyOnWrite( const AutoPtrCopyOnWrite &rhs ):
|
||||
m_pPtr(rhs.m_pPtr), m_iRefCount(rhs.m_iRefCount)
|
||||
{
|
||||
m_pPtr = rhs.m_pPtr;
|
||||
m_iRefCount = rhs.m_iRefCount;
|
||||
++(*m_iRefCount);
|
||||
}
|
||||
|
||||
@@ -132,16 +127,11 @@ public:
|
||||
T& operator*() { return *m_pPtr; }
|
||||
T* operator->() { return m_pPtr; }
|
||||
|
||||
explicit HiddenPtr( T *p = NULL )
|
||||
{
|
||||
m_pPtr = p;
|
||||
}
|
||||
explicit HiddenPtr( T *p = NULL ): m_pPtr(p) {}
|
||||
|
||||
HiddenPtr( const HiddenPtr<T> &cpy )
|
||||
HiddenPtr( const HiddenPtr<T> &cpy ): m_pPtr(NULL)
|
||||
{
|
||||
if( cpy.m_pPtr == NULL )
|
||||
m_pPtr = NULL;
|
||||
else
|
||||
if( cpy.m_pPtr != NULL )
|
||||
m_pPtr = HiddenPtrTraits<T>::Copy( cpy.m_pPtr );
|
||||
}
|
||||
|
||||
|
||||
@@ -112,9 +112,8 @@ class CachedObjectPointer
|
||||
public:
|
||||
typedef CachedObject<T> Object;
|
||||
|
||||
CachedObjectPointer()
|
||||
CachedObjectPointer() : m_pCache(NULL), m_bCacheIsSet(false)
|
||||
{
|
||||
m_bCacheIsSet = false;
|
||||
Object::Register( this );
|
||||
}
|
||||
|
||||
|
||||
@@ -488,7 +488,7 @@ void ScoreKeeperNormal::AddScoreInternal( TapNoteScore score )
|
||||
p += m_CustomComboBonusValue;
|
||||
}
|
||||
|
||||
p += m_pPlayerStageStats->m_iCurCombo * m_CustomComboMultiplier;
|
||||
p += static_cast<int>(m_pPlayerStageStats->m_iCurCombo * m_CustomComboMultiplier);
|
||||
|
||||
if( m_iNumNotesHitThisRow == 2 )
|
||||
p = (int)(p * m_DoubleNoteMultiplier);
|
||||
|
||||
@@ -165,7 +165,7 @@ void ScreenBookkeeping::UpdateView()
|
||||
if( iSongIndex < (int)vpSongs.size() )
|
||||
{
|
||||
Song *pSong = vpSongs[iSongIndex];
|
||||
int iCount = pProfile->GetSongNumTimesPlayed( pSong );
|
||||
iCount = pProfile->GetSongNumTimesPlayed( pSong );
|
||||
RString sTitle = ssprintf("%4d",iCount) + " " + pSong->GetDisplayFullTitle();
|
||||
if( sTitle.length() > 22 )
|
||||
sTitle = sTitle.Left(20) + "...";
|
||||
|
||||
+19
-19
@@ -273,30 +273,30 @@ void ScreenDebugOverlay::Init()
|
||||
FOREACH_CONST( IDebugLine*, *g_pvpSubscribers, p )
|
||||
{
|
||||
{
|
||||
BitmapText *p = new BitmapText;
|
||||
p->SetName( "ButtonText" );
|
||||
p->LoadFromFont( THEME->GetPathF("ScreenDebugOverlay", "line") );
|
||||
p->SetHorizAlign( align_right );
|
||||
p->SetText( "blah" );
|
||||
BitmapText *bt = new BitmapText;
|
||||
bt->SetName( "ButtonText" );
|
||||
bt->LoadFromFont( THEME->GetPathF("ScreenDebugOverlay", "line") );
|
||||
bt->SetHorizAlign( align_right );
|
||||
bt->SetText( "blah" );
|
||||
//p->SetShadowLength( 2 );
|
||||
LOAD_ALL_COMMANDS( *p );
|
||||
LOAD_ALL_COMMANDS( *bt );
|
||||
// xxx: I shouldn't have to do this:
|
||||
ON_COMMAND( p );
|
||||
m_vptextButton.push_back( p );
|
||||
this->AddChild( p );
|
||||
ON_COMMAND( bt );
|
||||
m_vptextButton.push_back( bt );
|
||||
this->AddChild( bt );
|
||||
}
|
||||
{
|
||||
BitmapText *p = new BitmapText;
|
||||
p->SetName( "FunctionText" );
|
||||
p->LoadFromFont( THEME->GetPathF("ScreenDebugOverlay", "line") );
|
||||
p->SetHorizAlign( align_left );
|
||||
p->SetText( "blah" );
|
||||
BitmapText *bt = new BitmapText;
|
||||
bt->SetName( "FunctionText" );
|
||||
bt->LoadFromFont( THEME->GetPathF("ScreenDebugOverlay", "line") );
|
||||
bt->SetHorizAlign( align_left );
|
||||
bt->SetText( "blah" );
|
||||
//p->SetShadowLength( 2 );
|
||||
LOAD_ALL_COMMANDS( *p );
|
||||
LOAD_ALL_COMMANDS( *bt );
|
||||
// xxx: I shouldn't have to do this:
|
||||
ON_COMMAND( p );
|
||||
m_vptextFunction.push_back( p );
|
||||
this->AddChild( p );
|
||||
ON_COMMAND( bt );
|
||||
m_vptextFunction.push_back( bt );
|
||||
this->AddChild( bt );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,7 +498,7 @@ bool ScreenDebugOverlay::OverlayInput( const InputEventPlus &input )
|
||||
bt.FinishTweening();
|
||||
// blink 5 times instead of 8
|
||||
// TODO: make this all metrics instead -aj
|
||||
for( int i=0; i<5; i++ )
|
||||
for( i=0; i<5; i++ )
|
||||
{
|
||||
bt.SetGlow( RageColor(1,0,0,1) );
|
||||
bt.Sleep(0.1f);
|
||||
|
||||
+41
-36
@@ -16,6 +16,7 @@
|
||||
#include "LocalizedString.h"
|
||||
#include "NoteDataUtil.h"
|
||||
#include "NoteSkinManager.h"
|
||||
#include "NoteTypes.h"
|
||||
#include "NotesWriterSM.h"
|
||||
#include "PrefsManager.h"
|
||||
#include "RageSoundManager.h"
|
||||
@@ -265,10 +266,11 @@ void ScreenEdit::InitEditMappings()
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_RIGHT_SIDE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LALT);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_RIGHT_SIDE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_MINE_OR_ROLL][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_ROLL][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
// m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_TAP_ATTACK][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_LIFT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_LIFT][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_CYCLE_TAP_LEFT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cn);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_CYCLE_TAP_RIGHT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cm);
|
||||
|
||||
m_EditMappingsDeviceInput.button [EDIT_BUTTON_SCROLL_SPEED_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_UP);
|
||||
m_EditMappingsDeviceInput.hold[EDIT_BUTTON_SCROLL_SPEED_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
@@ -327,10 +329,8 @@ void ScreenEdit::InitEditMappings()
|
||||
m_PlayMappingsDeviceInput.button[EDIT_BUTTON_RETURN_TO_EDIT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC);
|
||||
m_PlayMappingsMenuButton.button[EDIT_BUTTON_RETURN_TO_EDIT][1] = GAME_BUTTON_BACK;
|
||||
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_LAY_MINE_OR_ROLL][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_LAY_MINE_OR_ROLL][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_LAY_LIFT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_LAY_LIFT][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_LAY_ROLL][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_LAY_ROLL][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_REMOVE_NOTE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LALT);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_REMOVE_NOTE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
|
||||
m_RecordMappingsDeviceInput.button[EDIT_BUTTON_RETURN_TO_EDIT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC);
|
||||
@@ -730,6 +730,8 @@ void ScreenEdit::Init()
|
||||
m_pSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
|
||||
m_bReturnToRecordMenuAfterPlay = false;
|
||||
m_fBeatToReturnTo = 0;
|
||||
|
||||
m_selectedTap = TAP_ORIGINAL_TAP;
|
||||
|
||||
GAMESTATE->m_bGameplayLeadIn.Set( true );
|
||||
GAMESTATE->m_EditMode = EDIT_MODE.GetValue();
|
||||
@@ -954,7 +956,7 @@ void ScreenEdit::Update( float fDeltaTime )
|
||||
else if( fSecsHeld > RECORD_HOLD_SECONDS )
|
||||
{
|
||||
// create or extend a hold or roll note
|
||||
TapNote tn = EditIsBeingPressed(EDIT_BUTTON_LAY_MINE_OR_ROLL) ? TAP_ORIGINAL_ROLL_HEAD: TAP_ORIGINAL_HOLD_HEAD;
|
||||
TapNote tn = EditIsBeingPressed(EDIT_BUTTON_LAY_ROLL) ? TAP_ORIGINAL_ROLL_HEAD: TAP_ORIGINAL_HOLD_HEAD;
|
||||
|
||||
tn.pn = m_InputPlayerNumber;
|
||||
m_NoteDataRecord.AddHoldNote( t, BeatToNoteRow(fStartBeat), BeatToNoteRow(fEndBeat), tn );
|
||||
@@ -1024,6 +1026,7 @@ static LocalizedString DESCRIPTION("ScreenEdit", "Description");
|
||||
static LocalizedString CHART_STYLE("ScreenEdit", "Chart Style");
|
||||
static LocalizedString MAIN_TITLE("ScreenEdit", "Main title");
|
||||
static LocalizedString SUBTITLE("ScreenEdit", "Subtitle");
|
||||
static LocalizedString TAP_NOTE_TYPE("ScreenEdit", "Tap Note");
|
||||
static LocalizedString TAP_STEPS("ScreenEdit", "Tap Steps");
|
||||
static LocalizedString JUMPS("ScreenEdit", "Jumps");
|
||||
static LocalizedString HANDS("ScreenEdit", "Hands");
|
||||
@@ -1048,6 +1051,7 @@ static ThemeMetric<RString> DESCRIPTION_FORMAT("ScreenEdit", "DescriptionFormat"
|
||||
static ThemeMetric<RString> CHART_STYLE_FORMAT("ScreenEdit", "ChartStyleFormat");
|
||||
static ThemeMetric<RString> MAIN_TITLE_FORMAT("ScreenEdit", "MainTitleFormat");
|
||||
static ThemeMetric<RString> SUBTITLE_FORMAT("ScreenEdit", "SubtitleFormat");
|
||||
static ThemeMetric<RString> TAP_NOTE_TYPE_FORMAT("ScreenEdit", "TapNoteTypeFormat");
|
||||
static ThemeMetric<RString> NUM_STEPS_FORMAT("ScreenEdit", "NumStepsFormat");
|
||||
static ThemeMetric<RString> NUM_JUMPS_FORMAT("ScreenEdit", "NumJumpsFormat");
|
||||
static ThemeMetric<RString> NUM_HOLDS_FORMAT("ScreenEdit", "NumHoldsFormat");
|
||||
@@ -1116,6 +1120,7 @@ void ScreenEdit::UpdateTextInfo()
|
||||
sText += ssprintf( MAIN_TITLE_FORMAT.GetValue(), MAIN_TITLE.GetValue().c_str(), m_pSong->m_sMainTitle.c_str() );
|
||||
if( m_pSong->m_sSubTitle.size() )
|
||||
sText += ssprintf( SUBTITLE_FORMAT.GetValue(), SUBTITLE.GetValue().c_str(), m_pSong->m_sSubTitle.c_str() );
|
||||
sText += ssprintf( TAP_NOTE_TYPE_FORMAT.GetValue(), TAP_NOTE_TYPE.GetValue().c_str(), TapNoteTypeToString( m_selectedTap.type ).c_str() );
|
||||
break;
|
||||
}
|
||||
sText += ssprintf( NUM_STEPS_FORMAT.GetValue(), TAP_STEPS.GetValue().c_str(), m_NoteDataEdit.GetNumTapNotes() );
|
||||
@@ -1296,43 +1301,48 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB )
|
||||
m_NoteDataEdit.SetTapNote( iCol, iSongIndex, TAP_EMPTY );
|
||||
// Don't CheckNumberOfNotesAndUndo. We don't want to revert any change that removes notes.
|
||||
}
|
||||
else if( EditIsBeingPressed(EDIT_BUTTON_LAY_MINE_OR_ROLL) )
|
||||
{
|
||||
m_soundAddNote.Play();
|
||||
SetDirty( true );
|
||||
SaveUndo();
|
||||
TapNote tn = TAP_ORIGINAL_MINE;
|
||||
tn.pn = m_InputPlayerNumber;
|
||||
m_NoteDataEdit.SetTapNote( iCol, iSongIndex, tn );
|
||||
CheckNumberOfNotesAndUndo();
|
||||
}
|
||||
else if( EditIsBeingPressed(EDIT_BUTTON_LAY_TAP_ATTACK) )
|
||||
{
|
||||
g_iLastInsertTapAttackTrack = iCol;
|
||||
EditMiniMenu( &g_InsertTapAttack, SM_BackFromInsertTapAttack );
|
||||
}
|
||||
else if( EditIsBeingPressed(EDIT_BUTTON_LAY_LIFT) )
|
||||
{
|
||||
m_soundAddNote.Play();
|
||||
SetDirty( true );
|
||||
SaveUndo();
|
||||
TapNote tn = TAP_ORIGINAL_LIFT;
|
||||
tn.pn = m_InputPlayerNumber;
|
||||
m_NoteDataEdit.SetTapNote( iCol, iSongIndex, tn );
|
||||
CheckNumberOfNotesAndUndo();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_soundAddNote.Play();
|
||||
SetDirty( true );
|
||||
SaveUndo();
|
||||
TapNote tn = TAP_ORIGINAL_TAP;
|
||||
TapNote tn = m_selectedTap;
|
||||
tn.pn = m_InputPlayerNumber;
|
||||
m_NoteDataEdit.SetTapNote(iCol, iSongIndex, tn );
|
||||
CheckNumberOfNotesAndUndo();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EDIT_BUTTON_CYCLE_TAP_LEFT:
|
||||
{
|
||||
switch ( m_selectedTap.type )
|
||||
{
|
||||
case TapNote::tap: m_selectedTap = TAP_ORIGINAL_FAKE; break;
|
||||
case TapNote::mine: m_selectedTap = TAP_ORIGINAL_TAP; break;
|
||||
case TapNote::lift: m_selectedTap = TAP_ORIGINAL_MINE; break;
|
||||
case TapNote::fake: m_selectedTap = TAP_ORIGINAL_LIFT; break;
|
||||
DEFAULT_FAIL( m_selectedTap.type );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EDIT_BUTTON_CYCLE_TAP_RIGHT:
|
||||
{
|
||||
switch ( m_selectedTap.type )
|
||||
{
|
||||
case TapNote::tap: m_selectedTap = TAP_ORIGINAL_MINE; break;
|
||||
case TapNote::mine: m_selectedTap = TAP_ORIGINAL_LIFT; break;
|
||||
case TapNote::lift: m_selectedTap = TAP_ORIGINAL_FAKE; break;
|
||||
case TapNote::fake: m_selectedTap = TAP_ORIGINAL_TAP; break;
|
||||
DEFAULT_FAIL( m_selectedTap.type );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EDIT_BUTTON_SCROLL_SPEED_UP:
|
||||
case EDIT_BUTTON_SCROLL_SPEED_DOWN:
|
||||
{
|
||||
@@ -2106,10 +2116,6 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB )
|
||||
m_NoteDataRecord.SetTapNote( iCol, iHeadRow, TAP_EMPTY );
|
||||
|
||||
TapNote tn = TAP_ORIGINAL_TAP;
|
||||
if( EditIsBeingPressed(EDIT_BUTTON_LAY_MINE_OR_ROLL) )
|
||||
tn = TAP_ORIGINAL_MINE;
|
||||
else if( EditIsBeingPressed(EDIT_BUTTON_LAY_LIFT) )
|
||||
tn = TAP_ORIGINAL_LIFT;
|
||||
tn.pn = m_InputPlayerNumber;
|
||||
m_NoteDataRecord.SetTapNote( iCol, iRow, tn );
|
||||
m_NoteFieldRecord.Step( iCol, TNS_W1 );
|
||||
@@ -2502,7 +2508,7 @@ void ScreenEdit::ScrollTo( float fDestinationBeat )
|
||||
// Don't SaveUndo. We want to undo the whole hold, not just the last segment
|
||||
// that the user made. Dragging the hold bigger can only absorb and remove
|
||||
// other taps, so dragging won't cause us to exceed the note limit.
|
||||
TapNote tn = EditIsBeingPressed(EDIT_BUTTON_LAY_MINE_OR_ROLL) ? TAP_ORIGINAL_ROLL_HEAD : TAP_ORIGINAL_HOLD_HEAD;
|
||||
TapNote tn = EditIsBeingPressed(EDIT_BUTTON_LAY_ROLL) ? TAP_ORIGINAL_ROLL_HEAD : TAP_ORIGINAL_HOLD_HEAD;
|
||||
|
||||
tn.pn = m_InputPlayerNumber;
|
||||
m_NoteDataEdit.AddHoldNote( iCol, iStartRow, iEndRow, tn );
|
||||
@@ -4035,8 +4041,7 @@ static const EditHelpLine g_EditHelpLines[] =
|
||||
EditHelpLine( "Shift BPM changes and stops down one beat", EDIT_BUTTON_INSERT_SHIFT_PAUSES ),
|
||||
EditHelpLine( "Delete beat and shift up", EDIT_BUTTON_DELETE ),
|
||||
EditHelpLine( "Shift BPM changes and stops up one beat", EDIT_BUTTON_DELETE_SHIFT_PAUSES ),
|
||||
EditHelpLine( "Lay mine", EDIT_BUTTON_LAY_MINE_OR_ROLL ),
|
||||
EditHelpLine( "Lay lift", EDIT_BUTTON_LAY_LIFT ),
|
||||
EditHelpLine( "Cycle between tap notes", EDIT_BUTTON_CYCLE_TAP_LEFT, EDIT_BUTTON_CYCLE_TAP_RIGHT ),
|
||||
EditHelpLine( "Add to/remove from right half", EDIT_BUTTON_RIGHT_SIDE ),
|
||||
EditHelpLine( "Switch player (Routine only)", EDIT_BUTTON_SWITCH_PLAYERS ),
|
||||
};
|
||||
|
||||
+9
-2
@@ -9,6 +9,7 @@
|
||||
#include "Background.h"
|
||||
#include "Foreground.h"
|
||||
#include "NoteField.h"
|
||||
#include "NoteTypes.h"
|
||||
#include "Song.h"
|
||||
#include "Steps.h"
|
||||
#include "ThemeMetric.h"
|
||||
@@ -50,10 +51,13 @@ enum EditButton
|
||||
|
||||
// These are modifiers to EDIT_BUTTON_COLUMN_*.
|
||||
EDIT_BUTTON_RIGHT_SIDE,
|
||||
EDIT_BUTTON_LAY_MINE_OR_ROLL,
|
||||
EDIT_BUTTON_LAY_ROLL,
|
||||
EDIT_BUTTON_LAY_TAP_ATTACK,
|
||||
EDIT_BUTTON_LAY_LIFT,
|
||||
EDIT_BUTTON_REMOVE_NOTE,
|
||||
|
||||
// These are modifiers to change the present tap note.
|
||||
EDIT_BUTTON_CYCLE_TAP_LEFT,
|
||||
EDIT_BUTTON_CYCLE_TAP_RIGHT,
|
||||
|
||||
EDIT_BUTTON_SCROLL_UP_LINE,
|
||||
EDIT_BUTTON_SCROLL_UP_PAGE,
|
||||
@@ -232,6 +236,9 @@ protected:
|
||||
SnapDisplay m_SnapDisplay;
|
||||
|
||||
BitmapText m_textInputTips;
|
||||
|
||||
/** @brief The current TapNote that would be inserted. */
|
||||
TapNote m_selectedTap;
|
||||
|
||||
void UpdateTextInfo();
|
||||
BitmapText m_textInfo; // status information that changes
|
||||
|
||||
@@ -797,12 +797,12 @@ void ScreenGameplay::InitSongQueues()
|
||||
|
||||
FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi )
|
||||
{
|
||||
Trail *pTrail = GAMESTATE->m_pCurTrail[ pi->GetStepsAndTrailIndex() ];
|
||||
ASSERT( pTrail );
|
||||
Trail *lTrail = GAMESTATE->m_pCurTrail[ pi->GetStepsAndTrailIndex() ];
|
||||
ASSERT( lTrail );
|
||||
|
||||
pi->m_vpStepsQueue.clear();
|
||||
pi->m_asModifiersQueue.clear();
|
||||
FOREACH_CONST( TrailEntry, pTrail->m_vEntries, e )
|
||||
FOREACH_CONST( TrailEntry, lTrail->m_vEntries, e )
|
||||
{
|
||||
ASSERT( e->pSteps );
|
||||
pi->m_vpStepsQueue.push_back( e->pSteps );
|
||||
@@ -1270,8 +1270,6 @@ void ScreenGameplay::LoadLights()
|
||||
{
|
||||
if( asDifficulties[0].CompareNoCase("selected") == 0 )
|
||||
{
|
||||
PlayerInfo pi;
|
||||
|
||||
// Base lights off current difficulty of active player
|
||||
// Can be either P1 or P2 if they're individual or P1 if both are active
|
||||
FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi )
|
||||
@@ -1305,8 +1303,6 @@ void ScreenGameplay::LoadLights()
|
||||
// We've also specified for Player 2 to be based off current difficulty
|
||||
if( asDifficulties[1].CompareNoCase("selected") == 0 && GAMESTATE->GetNumPlayersEnabled() > 1 )
|
||||
{
|
||||
PlayerInfo pi;
|
||||
|
||||
// Base lights off current difficulty of active player
|
||||
// Only do this for P2 in a two-player situation, since P1 is taken care of above
|
||||
FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi )
|
||||
|
||||
@@ -106,10 +106,10 @@ void ScreenJukebox::SetSong()
|
||||
SONGMAN->GetAllCourses( apCourses, false );
|
||||
vector<const CourseEntry *> apOptions;
|
||||
vector<Course*> apPossibleCourses;
|
||||
for( unsigned i = 0; i < apCourses.size(); ++i )
|
||||
for( unsigned j = 0; j < apCourses.size(); ++j )
|
||||
{
|
||||
Course *pCourse = apCourses[i];
|
||||
const CourseEntry *pEntry = pCourse->FindFixedSong( pSong );
|
||||
Course *lCourse = apCourses[j];
|
||||
const CourseEntry *pEntry = lCourse->FindFixedSong( pSong );
|
||||
if( pEntry == NULL || pEntry->attacks.size() == 0 )
|
||||
continue;
|
||||
|
||||
@@ -144,14 +144,14 @@ void ScreenJukebox::SetSong()
|
||||
{
|
||||
int iIndex = RandomInt( apOptions.size() );
|
||||
m_pCourseEntry = apOptions[iIndex];
|
||||
Course *pCourse = apPossibleCourses[iIndex];
|
||||
Course *lCourse = apPossibleCourses[iIndex];
|
||||
|
||||
PlayMode pm = CourseTypeToPlayMode( pCourse->GetCourseType() );
|
||||
PlayMode pm = CourseTypeToPlayMode( lCourse->GetCourseType() );
|
||||
GAMESTATE->m_PlayMode.Set( pm );
|
||||
GAMESTATE->m_pCurCourse.Set( pCourse );
|
||||
GAMESTATE->m_pCurCourse.Set( lCourse );
|
||||
FOREACH_PlayerNumber( p )
|
||||
{
|
||||
GAMESTATE->m_pCurTrail[p].Set( pCourse->GetTrail( GAMESTATE->GetCurrentStyle()->m_StepsType ) );
|
||||
GAMESTATE->m_pCurTrail[p].Set( lCourse->GetTrail( GAMESTATE->GetCurrentStyle()->m_StepsType ) );
|
||||
ASSERT( GAMESTATE->m_pCurTrail[p] );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,15 +236,15 @@ void ColorBitmapText::SetText( const RString& _sText, const RString& _sAlternate
|
||||
RString FirstThree = m_sText.substr( i, 3 );
|
||||
if( FirstThree.CompareNoCase("|c0") == 0 && iCharsLeft > 8 )
|
||||
{
|
||||
ColorChange change;
|
||||
ColorChange cChange;
|
||||
unsigned int r, g, b;
|
||||
sscanf( m_sText.substr( i, 9 ).c_str(), "|%*c0%2x%2x%2x", &r, &g, &b );
|
||||
change.c = RageColor( r/255.f, g/255.f, b/255.f, 1.f );
|
||||
change.l = iGlyphsSoFar;
|
||||
cChange.c = RageColor( r/255.f, g/255.f, b/255.f, 1.f );
|
||||
cChange.l = iGlyphsSoFar;
|
||||
if( iGlyphsSoFar == 0 )
|
||||
m_vColors[0] = change;
|
||||
m_vColors[0] = cChange;
|
||||
else
|
||||
m_vColors.push_back( change );
|
||||
m_vColors.push_back( cChange );
|
||||
i+=8;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ void ScreenOptionsEditCourse::ImportOptions( int iRow, const vector<PlayerNumber
|
||||
{
|
||||
case EditCourseRow_Minutes:
|
||||
row.SetOneSharedSelection( 0 );
|
||||
row.SetOneSharedSelectionIfPresent( MakeMinutesString(GAMESTATE->m_pCurCourse->m_fGoalSeconds/60) );
|
||||
row.SetOneSharedSelectionIfPresent( MakeMinutesString(static_cast<int>(GAMESTATE->m_pCurCourse->m_fGoalSeconds)/60) );
|
||||
break;
|
||||
default:
|
||||
{
|
||||
@@ -383,14 +383,14 @@ void ScreenOptionsEditCourse::SetCurrentSong()
|
||||
}
|
||||
else
|
||||
{
|
||||
int iRow = m_iCurrentRow[PLAYER_1];
|
||||
iRow = m_iCurrentRow[PLAYER_1];
|
||||
int iEntryIndex = RowToEntryIndex( iRow );
|
||||
Song *pSong = NULL;
|
||||
if( iEntryIndex != -1 )
|
||||
{
|
||||
int iCurrentSongRow = EntryIndexAndRowTypeToRow(iEntryIndex,RowType_Song);
|
||||
OptionRow &row = *m_pRows[ iCurrentSongRow ];
|
||||
int index = row.GetOneSelection(PLAYER_1);
|
||||
OptionRow &oRow = *m_pRows[ iCurrentSongRow ];
|
||||
int index = oRow.GetOneSelection(PLAYER_1);
|
||||
if( index != 0 )
|
||||
pSong = m_vpSongs[ index - 1 ];
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ void ScreenOptionsManageCourses::BeginScreen()
|
||||
vector<Course*>::const_iterator iter = find( m_vpCourses.begin(), m_vpCourses.end(), GAMESTATE->m_pCurCourse );
|
||||
if( iter != m_vpCourses.end() )
|
||||
{
|
||||
int iIndex = iter - m_vpCourses.begin();
|
||||
iIndex = iter - m_vpCourses.begin();
|
||||
this->MoveRowAbsolute( GAMESTATE->m_MasterPlayerNumber, 1 + iIndex );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ void ScreenOptionsManageEditSteps::BeginScreen()
|
||||
vector<Steps*>::const_iterator iter = find( m_vpSteps.begin(), m_vpSteps.end(), GAMESTATE->m_pCurSteps[PLAYER_1] );
|
||||
if( iter != m_vpSteps.end() )
|
||||
{
|
||||
int iIndex = iter - m_vpSteps.begin();
|
||||
iIndex = iter - m_vpSteps.begin();
|
||||
this->MoveRowAbsolute( PLAYER_1, 1 + iIndex );
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user