!.gitignore
#include everything in this directory
-!*
\ No newline at end of file
+!*
+
+#ignore netbeans crap
+nbproject
-<ActorFrame InitCommand="%function(self)
-if GAMESTATE:GetEnv('Wag') == 'On' then
- self:wag();
- end
-end"><children>
+<ActorFrame
+ InitCommand="%function(self)
+ if GAMESTATE:GetEnv('Wag') == 'On' then
+ self:wag();
+ end
+ end"
+>
+ <children>
<AutoActor File="../_join overlay" />
<!--Doubles Padlock-->
<Layer
-<BGAnimation Sound="_logo.ogg">
+<BGAnimation
+ Sound="_logo.ogg"
+ OnCommand="%function(self)
+ InitSpeedMods()
+ end"
+>
<children>
<Layer Type="Quad" Command="diffuse,#FFFFFF;stretchto,SCREEN_LEFT,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM;diffusealpha,0.3;linear,0.3;diffusealpha,0" />
</children>
Speed=Speed
+Base Speed=Base Speed
+Extra Speed=Extra Speed
+Speed Type=Speed Type
Accel=Acceleration
Effect=Effect
Appearance=Fade
JudgeDifficulty=Judge Diff.
DefaultFailType=Fail Type
Theme=Swap Theme
+SpeedModType=Speed Mods
+
Windowed=Display
DisplayResolution=Resolution
elseif GetRateModHelper('0.9xmusic') then curRate = 0.9; return '0.9'
else curRate = 1; return '(Unknown rate mod)' end
end
+
+function oitgACoptions()
+ -- Right now we return the same line names for both OITG and whatever else happens to be running. But in the future they might be different.
+ if OPENITG then return "1,2,3,4,5,6,7,8,9,10,11" end
+
+ return "1,2,3,4,5,6,7,8,9,10,11"
+end
+
+function SongModifiers()
+ -- this is very basic right now, but it can be modified to take in to account OITG specific stuff
+ return SpeedLines() .. "4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24"
+end
+
+function SpeedLines()
+ local type = GetSpeedModType()
+
+ if type == "pro" then
+ return "1,2,3,"
+ else
+ return "1,"
+ end
+end
+
+function SpeedMods(name)
+ local modList = baseSpeed
+ local s = "Speed"
+
+ if name == "Extra" then
+ modList = extraSpeed
+ s = "Extra " .. s
+ end
+
+ if name == "Type" then
+ modList = typeSpeed
+ s = s .. " Type"
+ end
+
+ local Params = { Name = s, OneChoiceForAllPlayers = false }
+
+ local function Load(self, list, pn)
+ -- default to the first item in the list
+ list[1] = true
+
+ -- now loop through everything else in the list and see if it is set to true
+ for i=2, table.getn(modList) do
+ if name == "Base" then
+ if modList[i] == modBase[pn+1] then
+ list[i] = true
+ list[1] = false
+ else
+ list[i] = false
+ end
+ end
+
+ if name == "Extra" then
+ if modList[i] == modExtra[pn+1] then
+ list[i] = true
+ list[1] = false
+ else
+ list[i] = false
+ end
+ end
+
+ if name == "type" then
+ s = modList[n]
+ s = string.gsub(s, '-Mod','')
+
+ if s == modType[pn+1] then
+ list[i] = true
+ list[1] = false
+ else
+ list[i] = false
+ end
+ end
+ end
+ end
+
+ local function Save(self, list, pn)
+ for i = 1, table.getn(modList) do
+ if list[i] then
+ s = modList[i]
+ end
+ end
+
+ local p = pn + 1
+
+ if name == "Type" then modType[p] = s end
+ if name == "Base" then
+ modBase[p] = s
+
+ if GetSpeedModType() ~= "pro" then
+ if string.find(modBase[p],"x") then modBase[p] = string.gsub(modBase[p], "x", ""); modType[p] = 'x-mod' end
+ if string.find(modBase[p],"c") then modBase[p] = string.gsub(modBase[p], "c", ""); modType[p] = 'c-mod' end
+ if string.find(modBase[p],"m") then modBase[p] = string.gsub(modBase[p], "m", ""); modType[p] = 'm-mod' end
+ end
+ end
+
+ if name == "Extra" then modExtra[p] = s end
+
+ if modType[p] == 'x-mod' then modSpeed[p] = modBase[p] + modExtra[p] .. 'x' end
+ if modType[p] == 'c-mod' then modSpeed[p] = 'c' .. modBase[p]*100 + modExtra[p]*100 end
+ if modType[p] == 'c-mod' and GetSpeedModType() ~= "pro" then modSpeed[p] = 'c' .. modBase[p] end
+ if modType[p] == 'm-mod' then modSpeed[p] = 'm' .. modBase[p]*100 + modExtra[p]*100 end
+ if modType[p] == 'm-mod' and GetSpeedModType() ~= "pro" then modSpeed[p] = 'm' .. modBase[p] end
+ GAMESTATE:ApplyGameCommand('mod,1x',p)
+ ApplySpeedMods()
+ MESSAGEMAN:Broadcast('SpeedModChanged')
+ end
+
+ return CreateOptionRow( Params, modList, Load, Save )
+end
+
+function ApplySpeedMods()
+ for pn=1, 2 do
+ if GAMESTATE:IsPlayerEnabled( pn - 1 ) then
+ speed = string.gsub(modSpeed[pn],modType[pn],"")
+ if modType[pn] == "x" then speed = math.ceil(100*speed/modRate)/100 .. "x" end
+ if modType[pn] == "c" then speed = "c" .. math.ceil(speed/modRate) end
+ if modType[pn] == "m" then speed = "m" .. math.ceil(speed/modRate) end
+ GAMESTATE:ApplyGameCommand('mod,' .. speed,pn)
+ end
+ end
+end
+
+function InitSpeedMods()
+ Trace("Got in to initspeedmods")
+
+ modBase = { "1", "1" }
+ modExtra = { "+.5", "+.5" }
+ modType = { "x-mod", "x-mod" }
+ modSpeed = { "1.5x", "1.5x" }
+
+ if GetSpeedModType() == "pro" then
+ baseSpeed = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16" }
+ extraSpeed = { "0", "+.25", "+.5", "+.75", "+.1", "+.2", "+.3", "+.4", "+.6", "+.7", "+.8", "+.9" }
+ end
+
+ if GetSpeedModType() == "advanced" then
+ if OPENITG then baseSpeed = { "0.25x", "0.5x", "0.75x", "1x", "1.25x", "1.5x", "1.75x", "2x", "2.25x", "2.5x", "2.75x", "3x", "3.25x", "3.5x", "3.75x", "4x", "4.25x", "4.5x", "4.75x", "5x", "5.25x", "5.5x", "5.75x", "6x", "6.25x", "6.5x", "6.75x", "7x", "c400", "c425", "c450", "c475", "c500", "c525", "c550", "c575", "c600", "c625", "c650", "c675", "c700", "c725", "c750", "c775", "c800", "c825", "c850", "c875", "c900", "c925", "c950", "c975", "c1000", "m400", "m425", "m450", "m475", "m500", "m525", "m550", "m575", "m600", "m625", "m650", "m675", "m700", "m725", "m750", "m775", "m800", "m825", "m850", "m875", "m900", "m925", "m950", "m975", "m1000" }
+ else baseSpeed = { "0.25x", "0.5x", "0.75x", "1x", "1.25x", "1.5x", "1.75x", "2x", "2.25x", "2.5x", "2.75x", "3x", "3.25x", "3.5x", "3.75x", "4x", "4.25x", "4.5x", "4.75x", "5x", "5.25x", "5.5x", "5.75x", "6x", "6.25x", "6.5x", "6.75x", "7x", "c400", "c425", "c450", "c475", "c500", "c525", "c550", "c575", "c600", "c625", "c650", "c675", "c700", "c725", "c750", "c775", "c800", "c825", "c850", "c875", "c900", "c925", "c950", "c975", "c1000" }
+ end
+
+ extraSpeed = { "0" }
+ modExtra = { "0", "0" }
+ end
+
+ if GetSpeedModType() == "basic" then
+ if OPENITG then baseSpeed = { "1x", "1.5x", "2x", "2.5x", "3x", "3.5x", "4x", "4.5x", "5x", "6x", "c450", "m450" }
+ else baseSpeed = { "1x", "1.5x", "2x", "2.5x", "3x", "3.5x", "4x", "4.5x", "5x", "5.5x", "6x", "c450" }
+ end
+
+ extraSpeed = { "0" }
+ modExtra = { "0", "0" }
+ end
+
+ if OPENITG then
+ typeSpeed = { "x-mod", "c-mod", "m-mod" }
+ else
+ typeSpeed = { "x-mod", "c-mod" }
+ end
+end
\ No newline at end of file
--- /dev/null
+--[[
+Simple PrefsRows API for 3.95/OpenITG, version 1.2
+Licensed under Creative Commons Attribution-Share Alike 3.0 Unported
+(http://creativecommons.org/licenses/by-sa/3.0/)
+
+Base definitions and templates for StepMania LUA options lists.
+Written by Mark Cannon ("Vyhd") for OpenITG (http://www.boxorroxors.net/)
+All I ask is that you keep this notice intact and don't redistribute in bytecode.
+--]]
+
+
+
+--[[
+Callable functions:
+
+CreateOptionRow( Params, Names, LoadFctn, SaveFctn )
+[creates a generic OptionRow with the given data]
+ - Params: table with OptionRow data. "Name" is required, others are optional.
+ - Names: table with the names of the objects to be used
+ - LoadFctn(self, list, pn): called on list load, sets an initial toggle
+ - SaveFctn(self, list, pn): called on list exit, uses a toggle to set a value
+
+CreatePrefsRow( Params, Names, Values, prefname )
+[creates a Preference-modifying OptionRow with this data]
+ - Values: table with the values to be used (1:1 map to Names)
+ - prefname: string with the name of the Preference to modify
+
+CreatePrefsRowRange( Params, Names, prefname, start, delta )
+[generates an OptionsRow with a value range, set to the length of Names]
+ - start: starting value, from which the value generation starts
+ - delta: difference between each value in the list
+
+CreatePrefsRowEnum( Params, Names, prefname )
+[generates an OptionsRow that uses enumeration values]
+
+CreatePrefsRowBool( Params, prefname )
+[generates an OptionsRow that toggles a boolean Preference]
+
+CreateSimplePrefsRowBool( prefname )
+[same as above, except sets the OptionRow name to prefname, too]
+
+If you're still confused, check out my usage of these elsewhere.
+--]]
+
+function CreateOptionRow( Params, Names, LoadFctn, SaveFctn )
+ if not Params.Name then return nil end
+
+ -- this needs to be used because Lua evaluates 'false' as 'nil', so
+ -- we can't use an OR operator to assign the value properly.
+ local function setbool( value, default )
+ if value ~= nil then return value else return default end
+ end
+
+ -- fill in with passed params or default values. only Name is required.
+ local t =
+ {
+ Name = Params.Name,
+
+ LayoutType = Params.LayoutType or "ShowAllInRow",
+ SelectType = Params.SelectType or "SelectOne",
+
+ OneChoiceForAllPlayers = setbool(Params.OneChoiceForAllPlayers, true),
+ EnabledForPlayers = Params.EnabledForPlayers or {PLAYER_1, PLAYER_2},
+
+ ExportOnChange = setbool(Params.ExportOnChange, false),
+ ReloadRowMessages= Params.ReloadRowMessages or {},
+
+ Choices = Names,
+ LoadSelections = LoadFctn,
+ SaveSelections = SaveFctn,
+ }
+
+ setmetatable( t, t )
+ return t
+end
+
+-- creates a row list given a list of names and values
+function CreatePrefsRow( Params, Names, Values, prefname )
+ local amt = table.getn(Names)
+ local val = PREFSMAN:GetPreference(prefname)
+
+ local function Load(self, list, pn)
+ for i = 1, amt do
+ if Values[i] == val then
+ list[i] = true
+ return
+ end
+ end
+ list[1] = true -- fall back to first value
+ end
+
+ local function Save(self, list, pn)
+ for i = 1, amt do
+ if list[i] then
+ PREFSMAN:SetPreference(prefname, Values[i])
+ return
+ end
+ end
+ end
+
+ return CreateOptionRow( Params, Names, Load, Save )
+end
+
+-- creates a ranged list, given an offset and delta between values
+function CreatePrefsRowRange( Params, Names, prefname, start, delta )
+ local amt = table.getn(Names)
+ local val = PREFSMAN:GetPreference(prefname)
+
+ local function IndexToValue(i)
+ return start+(delta*(i-1))
+ end
+
+ local function Load(self, list, pn)
+ for i = 1, amt do
+ if IndexToValue(i) == val then
+ list[i] = true
+ return
+ end
+ end
+ list[1] = true -- fall back to first value
+ end
+
+ local function Save(self, list, pn)
+ for i = 1,amt do
+ if list[i] then
+ PREFSMAN:SetPreference(prefname, IndexToValue(i))
+ end
+ end
+ end
+
+ return CreateOptionRow( Params, Names, Load, Save )
+end
+
+-- creates an enumerated toggle for a preference
+function CreatePrefsRowEnum( Params, Names, prefname )
+ local amt = table.getn(Names)
+ local val = PREFSMAN:GetPreference(prefname)
+
+ return CreateOptionRowRange( Params, Names, prefname, 0, 1 )
+end
+
+-- creates a boolean toggle for a preference
+function CreatePrefsRowBool( Params, prefname )
+ local OptionValues = { false, true }
+ local OptionNames = { "OFF", "ON" }
+
+ local val = PREFSMAN:GetPreference(prefname)
+
+ local function Load(self, list, pn)
+ if PREFSMAN:GetPreference(prefname) == true then
+ list[2] = true
+ else
+ list[1] = true
+ end
+ end
+
+ -- set 0 if "OFF" (index 1), 1 if "ON" (index 2)
+ local function Save(self, list, pn)
+ for i = 1,2 do
+ if list[i] then
+ PREFSMAN:SetPreference(prefname, OptionValues[i] )
+ return
+ end
+ end
+ end
+
+ return CreateOptionRow( Params, OptionNames, Load, Save )
+end
+
+-- very simple boolean toggle for a preference
+function CreateSimplePrefsRowBool( prefname )
+ local Params = {}
+ Params.Name = prefname
+
+ return CreatePrefsRowBool( Params, prefname )
+end
\ No newline at end of file
--- /dev/null
+-- This is purely for convenience
+local ProfileTable = PROFILEMAN:GetMachineProfile():GetSaved()
+
+-- Valid speed mod row type names.
+local Names = { "Basic", "Advanced", "Pro" }
+
+function SpeedModTypeRow()
+ local type = ProfileTable.SpeedModType
+
+ local function Load(self, list, pn)
+ -- if type is not set then default to basic
+ if not type then list[1] = true return end
+
+ -- what we're doing here is checking what we got from profileman against the valid names.
+ for i=1,3 do
+ if type == string.lower(Names[i]) then list[i] = true return end
+ end
+
+ -- if nothing matched then just default to basic
+ list[1] = true
+ end
+
+ local function Save(self, list, pn)
+ -- go through each item in the list and save the first one that is set to true
+ for i=1,3 do
+ if list[i] then
+ ProfileTable.SpeedModType = string.lower(Names[i])
+ PROFILEMAN:SaveMachineProfile()
+ return
+ end
+ end
+ end
+
+ local Params = { Name = "SpeedModType" }
+
+ return CreateOptionRow( Params, Names, Load, Save )
+end
+
+function GetSpeedModType()
+ local type = ProfileTable.SpeedModType
+
+ -- as soon as we find a valid name, return it.
+ for i=1,3 do
+ if type == string.lower(Names[i]) then return type end
+ end
+end
\ No newline at end of file
[ScreenArcadeOptions]
Fallback=ScreenOptionsSubmenu
-LineNames=1,2,3,4,5,6,7,8,9,10
+LineNames=@oitgACoptions()
OptionMenuFlags=together;forceallplayers;explanations
Line1=conf,CoinModeNoHome
Line2=conf,SongsPerPlay
Line8=conf,JudgeDifficulty
Line9=conf,DefaultFailType
Line10=conf,Theme
+Line11=lua,SpeedModTypeRow()
[ScreenGraphicOptions]
Fallback=ScreenOptionsSubmenu
NextScreen=ScreenBranchStage
PrevScreen=@SongSelectionScreen()
PlayMusic=0
-LineNames=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
+LineNames=@SongModifiers()
OptionMenuFlags=explanations;firstchoicegoesdown
-Line1=lua,SpeedMod()
-Line2=lua,AddSpeedMod()
-Line3=list,Persp
-Line4=lua,RateMod()
-Line5=list,NoteSkins2
-Line6=list,Accel
-Line7=list,Mini
-Line8=list,Beat
-Line9=list,Dizzy
-Line10=list,Flip
-Line11=list,Drift
-Line12=List,Float
-Line13=list,Invisible
-Line14=list,Appearance
-Line15=list,Handicap
-Line16=list,Turn
-Line17=list,InsertOther
-Line18=list,Foreground
-Line19=list,InsertTaps
-Line20=list,Hide
-Line21=list,HideBG
-Line22=lua,GoBack()
-Line23=list,Steps
+Line1=lua,SpeedMods('Base')
+Line2=lua,SpeedMods('Extra')
+Line3=lua,SpeedMods('Type')
+Line4=list,Persp
+Line5=lua,RateMod()
+Line6=list,NoteSkins2
+Line7=list,Accel
+Line8=list,Mini
+Line9=list,Beat
+Line10=list,Dizzy
+Line11=list,Flip
+Line12=list,Drift
+Line13=List,Float
+Line14=list,Invisible
+Line15=list,Appearance
+Line16=list,Handicap
+Line17=list,Turn
+Line18=list,InsertOther
+Line19=list,Foreground
+Line20=list,InsertTaps
+Line21=list,Hide
+Line22=list,HideBG
+Line23=lua,GoBack()
+Line24=list,Steps
#Removed from GrooveNights
-Line24=lua,StaminaMod()
+Line25=lua,StaminaMod()
CancelAllP1X=SCREEN_CENTER_X-160
CancelAllP1Y=SCREEN_CENTER_Y