Renamed ArbSpeedMods to ArbitrarySpeedMods to avoid the wrath of the OpenGL Architecture Review Board. Added option rows for controlling the size of the increments used by ArbitrarySpeedMods. Simplified logic in ASM and added rounding to avoid excessive precision. Removed pointless setmetatable calls from various lua option rows.

This commit is contained in:
Kyzentun
2014-06-20 22:48:00 -06:00
parent c02a17f393
commit de8799ebdc
7 changed files with 143 additions and 39 deletions
+4
View File
@@ -478,6 +478,8 @@ SoundResampleQuality=Advanced: Select the resampling quality to use.
SoundVolume=Adjust the volume level during gameplay. SoundVolume=Adjust the volume level during gameplay.
SoundVolumeAttract=Adjust the volume level during attract mode. SoundVolumeAttract=Adjust the volume level during attract mode.
Speed=Speed Speed=Speed
Speed Increment=Size of the smaller increments used to adjust the speed mod.
Speed Multiple=Multiplied by Speed Increment to calculate the size of the large increments used to adjust the speed mod.
StepMania Credits=The StepMania Development Team. StepMania Credits=The StepMania Development Team.
Steps=Steps Steps=Steps
StretchBackgrounds=Toggle the stretching of backgrounds. StretchBackgrounds=Toggle the stretching of backgrounds.
@@ -1099,6 +1101,8 @@ SoundResampleQuality=Resampling Quality
SoundVolume=Sound Volume SoundVolume=Sound Volume
SoundVolumeAttract=Attract Volume SoundVolumeAttract=Attract Volume
Speed=Speed Speed=Speed
Speed Increment=Speed Increment
Speed Multiple=Speed Multiple
Step Author=Step Author Step Author=Step Author
Steps=Steps Steps=Steps
Stream=Stream Stream=Stream
+9
View File
@@ -34,6 +34,15 @@ function string:find_last(text)
end end
end end
-- Round to nearest integer.
function math.round(n)
if n > 0 then
return math.floor(n+0.5)
else
return math.ceil(n-0.5)
end
end
-- (c) 2006 Glenn Maynard -- (c) 2006 Glenn Maynard
-- All rights reserved. -- All rights reserved.
-- --
@@ -91,7 +91,6 @@ function OptionsRandomJukebox()
GAMESTATE:SetJukeboxUsesModifiers(val) GAMESTATE:SetJukeboxUsesModifiers(val)
end end
} }
setmetatable( t, t )
return t return t
end end
@@ -134,7 +133,6 @@ function OptionsWeight()
end end
end, end,
} }
setmetatable(t, t)
return t return t
end end
+125 -32
View File
@@ -246,8 +246,105 @@ function SpeedMods()
return t return t
end end
function ArbSpeedMods() local default_speed_increment= 25
local default_speed_inc_multiple= 4
local function get_speed_increment()
local increment= default_speed_increment
if ReadGamePrefFromFile("SpeedIncrement") then
increment= tonumber(GetGamePref("SpeedIncrement")) or default_speed_increment
else
WriteGamePrefToFile("SpeedIncrement", increment)
end
return increment
end
local function get_speed_multiple()
local multiple= default_speed_inc_multiple
if ReadGamePrefFromFile("SpeedMultiple") then
multiple= tonumber(GetGamePref("SpeedMultiple")) or default_speed_inc_multiple
else
WriteGamePrefToFile("SpeedMultiple", multiple)
end
return multiple
end
function SpeedModIncSize()
-- An option row for controlling the size of the increment used by
-- ArbitrarySpeedMods.
local increment= get_speed_increment()
local ret= {
Name= "Speed Increment",
LayoutType= "ShowAllInRow",
SelectType= "SelectMultiple",
OneChoiceForAllPlayers= true,
LoadSelections= function(self, list, pn)
-- The first value is the status element, only it should be true.
list[1]= true
end,
SaveSelections= function(self, list, pn)
WriteGamePrefToFile("SpeedIncrement", increment)
end,
NotifyOfSelection= function(self, pn, choice)
-- return true even though we didn't actually change anything so that
-- the underlines will stay correct.
if choice == 1 then return true end
local incs= {10, 1, -1, -10}
local new_val= increment + incs[choice-1]
if new_val > 0 then
increment= new_val
end
self:GenChoices()
return true
end,
GenChoices= function(self)
self.Choices= {tostring(increment), "+10", "+1", "-1", "-10"}
end
}
ret:GenChoices()
return ret
end
function SpeedModIncMultiple()
-- An option row for controlling the size of the increment used by
-- ArbitrarySpeedMods.
local multiple= get_speed_multiple()
local ret= {
Name= "Speed Multiple",
LayoutType= "ShowAllInRow",
SelectType= "SelectMultiple",
OneChoiceForAllPlayers= true,
LoadSelections= function(self, list, pn)
-- The first value is the status element, only it should be true.
list[1]= true
end,
SaveSelections= function(self, list, pn)
WriteGamePrefToFile("SpeedMultiple", multiple)
end,
NotifyOfSelection= function(self, pn, choice)
-- return true even though we didn't actually change anything so that
-- the underlines will stay correct.
if choice == 1 then return true end
local incs= {5, 1, -1, -5}
local new_val= multiple + incs[choice-1]
if new_val > 0 then
multiple= new_val
end
self:GenChoices()
return true
end,
GenChoices= function(self)
self.Choices= {tostring(multiple), "+5", "+1", "-1", "-5"}
end
}
ret:GenChoices()
return ret
end
function ArbitrarySpeedMods()
-- If players are allowed to join while this option row is active, problems will probably occur. -- If players are allowed to join while this option row is active, problems will probably occur.
local increment= get_speed_increment()
local multiple= get_speed_multiple()
local ret= { local ret= {
Name= "Speed", Name= "Speed",
LayoutType= "ShowAllInRow", LayoutType= "ShowAllInRow",
@@ -269,10 +366,11 @@ function ArbSpeedMods()
local soptions= GAMESTATE:GetPlayerState(pn):GetPlayerOptions("ModsLevel_Song") local soptions= GAMESTATE:GetPlayerState(pn):GetPlayerOptions("ModsLevel_Song")
local coptions= GAMESTATE:GetPlayerState(pn):GetPlayerOptions("ModsLevel_Current") local coptions= GAMESTATE:GetPlayerState(pn):GetPlayerOptions("ModsLevel_Current")
if val.mode == "x" then if val.mode == "x" then
poptions:XMod(val.speed) local speed= val.speed / 100
stoptions:XMod(val.speed) poptions:XMod(speed)
soptions:XMod(val.speed) stoptions:XMod(speed)
coptions:XMod(val.speed) soptions:XMod(speed)
coptions:XMod(speed)
elseif val.mode == "C" then elseif val.mode == "C" then
poptions:CMod(val.speed) poptions:CMod(val.speed)
stoptions:CMod(val.speed) stoptions:CMod(val.speed)
@@ -288,31 +386,19 @@ function ArbSpeedMods()
NotifyOfSelection= function(self, pn, choice) NotifyOfSelection= function(self, pn, choice)
-- Adjust for the status elements -- Adjust for the status elements
local real_choice= choice - self.NumPlayers local real_choice= choice - self.NumPlayers
-- return true even though we didn't actually change anything so that the underlines will stay correct. -- return true even though we didn't actually change anything so that
-- the underlines will stay correct.
if real_choice < 1 then return true end if real_choice < 1 then return true end
local val= self.CurValues[pn] local val= self.CurValues[pn]
if real_choice < 5 then if real_choice < 5 then
local incs= {100, 25, -25, -100} local big_inc= increment * multiple
if val.mode == "x" then local incs= {big_inc, increment, -increment, -big_inc}
val.speed= val.speed + (incs[real_choice] / 100) local new_val= val.speed + incs[real_choice]
else if new_val > 0 then
val.speed= val.speed + incs[real_choice] val.speed= math.round(new_val)
end end
elseif real_choice == 5 then elseif real_choice >= 5 then
if val.mode ~= "x" then val.mode= ({"x", "C", "m"})[real_choice - 4]
val.speed= val.speed / 100
val.mode= "x"
end
elseif real_choice == 6 then
if val.mode == "x" then
val.speed= math.floor(val.speed * 100)
end
val.mode= "C"
elseif real_choice == 7 then
if val.mode == "x" then
val.speed= math.floor(val.speed * 100)
end
val.mode= "m"
end end
self:GenChoices() self:GenChoices()
return true return true
@@ -326,17 +412,24 @@ function ArbSpeedMods()
show_x_incs= true show_x_incs= true
end end
end end
local big_inc= increment * multiple
local small_inc= increment
if show_x_incs then if show_x_incs then
self.Choices= {"+1", "+.25", "-.25", "-1", "Xmod", "Cmod", "Mmod"} big_inc= tostring(big_inc / 100)
small_inc= tostring(small_inc / 100)
else else
self.Choices= {"+100", "+25", "-25", "-100", "Xmod", "Cmod", "Mmod"} big_inc= tostring(big_inc)
small_inc= tostring(small_inc)
end end
self.Choices= {
"+" .. big_inc, "+" .. small_inc, "-" .. small_inc, "-" .. big_inc,
"Xmod", "Cmod", "Mmod"}
-- Insert the status element for P2 first so it will be second -- Insert the status element for P2 first so it will be second
for i, pn in ipairs({PLAYER_2, PLAYER_1}) do for i, pn in ipairs({PLAYER_2, PLAYER_1}) do
local val= self.CurValues[pn] local val= self.CurValues[pn]
if val then if val then
if val.mode == "x" then if val.mode == "x" then
table.insert(self.Choices, 1, val.speed .. "x") table.insert(self.Choices, 1, (val.speed/100) .. "x")
else else
table.insert(self.Choices, 1, val.mode .. val.speed) table.insert(self.Choices, 1, val.mode .. val.speed)
end end
@@ -352,13 +445,13 @@ function ArbSpeedMods()
local mode= nil local mode= nil
if poptions:MaxScrollBPM() > 0 then if poptions:MaxScrollBPM() > 0 then
mode= "m" mode= "m"
speed= poptions:MaxScrollBPM() speed= math.round(poptions:MaxScrollBPM())
elseif poptions:TimeSpacing() > 0 then elseif poptions:TimeSpacing() > 0 then
mode= "C" mode= "C"
speed= poptions:ScrollBPM() speed= math.round(poptions:ScrollBPM())
else else
mode= "x" mode= "x"
speed= poptions:ScrollSpeed() speed= math.round(poptions:ScrollSpeed() * 100)
end end
ret.CurValues[pn]= {mode= mode, speed= speed} ret.CurValues[pn]= {mode= mode, speed= speed}
ret.NumPlayers= ret.NumPlayers + 1 ret.NumPlayers= ret.NumPlayers + 1
@@ -121,7 +121,6 @@ function OptionRowProTiming()
setenv("ProTiming"..pname, val); --]] setenv("ProTiming"..pname, val); --]]
end; end;
}; };
setmetatable( t, t );
return t; return t;
end; end;
@@ -202,6 +201,5 @@ function GamePrefDefaultFail()
THEME:ReloadMetrics(); THEME:ReloadMetrics();
end; end;
}; };
setmetatable( t, t );
return t; return t;
end end
+4 -2
View File
@@ -2941,11 +2941,13 @@ Line20="conf,VisualDelaySeconds"
Fallback="ScreenOptionsServiceChild" Fallback="ScreenOptionsServiceChild"
NextScreen="ScreenOptionsService" NextScreen="ScreenOptionsService"
PrevScreen="ScreenOptionsService" PrevScreen="ScreenOptionsService"
LineNames="3,4,8,11,13,14,15,16,28,29,30,31" LineNames="3,4,8,SI,SM,11,13,14,15,16,28,29,30,31"
#LineScore="lua,UserPrefScoringMode()" #LineScore="lua,UserPrefScoringMode()"
Line3="conf,TimingWindowScale" Line3="conf,TimingWindowScale"
Line4="conf,LifeDifficulty" Line4="conf,LifeDifficulty"
Line8="lua,GamePrefDefaultFail()" Line8="lua,GamePrefDefaultFail()"
LineSI="lua,SpeedModIncSize()"
LineSM="lua,SpeedModIncMultiple()"
Line11="conf,AllowW1" Line11="conf,AllowW1"
Line13="conf,HiddenSongs" Line13="conf,HiddenSongs"
Line14="conf,EasterEggs" Line14="conf,EasterEggs"
@@ -3076,7 +3078,7 @@ PlayMusic=false
TimerSeconds=30 TimerSeconds=30
# #
LineNames="1,2,3A,3B,4,5,6,R1,R2,7,8,9,10,11,12,13,14,16,17" LineNames="1,2,3A,3B,4,5,6,R1,R2,7,8,9,10,11,12,13,14,16,17"
Line1="lua,ArbSpeedMods()" Line1="lua,ArbitrarySpeedMods()"
# Line1="list,Speed" # Line1="list,Speed"
Line2="list,Accel" Line2="list,Accel"
Line3A="list,EffectsReceptor" Line3A="list,EffectsReceptor"
+1 -1
View File
@@ -1327,7 +1327,7 @@ LineFlashyCombo="lua,ThemePrefRow('FlashyCombo')"
[ScreenOptionsGraphicsSound] [ScreenOptionsGraphicsSound]
[ScreenOptionsAdvanced] [ScreenOptionsAdvanced]
LineNames="3,4,8,11,13,14,16,28,29,30,RollCombo" LineNames="3,4,8,SI,SM,11,13,14,16,28,29,30,RollCombo"
LineRollCombo="lua,ThemePrefRow('ComboOnRolls')" LineRollCombo="lua,ThemePrefRow('ComboOnRolls')"
[ScreenAppearanceOptions] [ScreenAppearanceOptions]