Difference between revisions of "Read/Write Config.ini (CMS)"
Line 9: | Line 9: | ||
== Instructions == | == Instructions == | ||
+ | It is a little bit hard to create step by step instructions for this script. My suggestion is to: read over the script & comments I have added & then try & edit it to suit your needs. If you have any difficulties, then please feel free to contact me for help. | ||
+ | |||
1. Add the [[#Main_Script|main script]] to the Visionaire Studio Script Editor & set the script as a definition script.<br/> | 1. Add the [[#Main_Script|main script]] to the Visionaire Studio Script Editor & set the script as a definition script.<br/> | ||
− | 2. | + | 2. Edit the script to suit.<br/> |
− | 3. | + | 3. Create conditions & values (in vs editor) - they should reflect the conditions & values listed in the script.<br/> |
− | 4. | + | 4. Assign default values (integer & string for values, boolean for conditions). |
+ | 5. create a condition that will be used to determine if settings have been changed. This condition should be set to true each time an option is changed. Name it: '''cfg_update'''.<br/> | ||
+ | 6. To read from the config.ini: add an '''execute a script''' action to the game launch action, or the an '''at begin of scene''' action for the menu scene, containing... | ||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | read_ini() | |
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 7. To write new settings to the config.ini: add an '''execute a script''' action to an '''at end of scene''' action for the menu scene, containing... | |
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | if getObject("Conditions[cfg_update]"):getBool(VConditionValue) then | |
− | + | write_ini() | |
− | + | end | |
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 31: | Line 30: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
--[[ | --[[ | ||
− | Read | + | Read from config.ini [v2] (28/02/2014) |
Written by AFRLme [Lee Clarke] | Written by AFRLme [Lee Clarke] | ||
-- + -- | -- + -- | ||
Line 53: | Line 52: | ||
local lglvl = "Error" -- default value for log level | local lglvl = "Error" -- default value for log level | ||
local df = "File = Data.vis" -- filename should reflect exported .vis file | local df = "File = Data.vis" -- filename should reflect exported .vis file | ||
− | game:setValue(VGameSpeechLanguage, game:getLink(VGameStandardLanguage)) -- default speech language to | + | game:setValue(VGameSpeechLanguage, game:getLink(VGameStandardLanguage)) -- default speech language to stndard language |
-- * tables * -- | -- * tables * -- | ||
Line 78: | Line 77: | ||
for i = 1, table.maxn(t_res) do if line == ("resolution = " .. string.lower( t_res[i] )) then res:setValue(VValueString, t_res[i]); res:setValue(VValueInt, i); print("resolution is currently set to " .. res:getStr(VValueString)) end end | for i = 1, table.maxn(t_res) do if line == ("resolution = " .. string.lower( t_res[i] )) then res:setValue(VValueString, t_res[i]); res:setValue(VValueInt, i); print("resolution is currently set to " .. res:getStr(VValueString)) end end | ||
-- * subtitles * -- | -- * subtitles * -- | ||
− | + | if line == "subtitles = no" then subs:setValue(VConditionValue, false); print("subtitles are currently set to off") end | |
− | + | if line == "subtitles = yes" then subs:setValue(VConditionValue, true); print("subtitles are currently set to on") end | |
-- * text language * -- | -- * text language * -- | ||
for i = 1, table.maxn(t_lang) do if line == ("textlanguage = " .. string.lower( t_lang[i]:getName() )) then game:setValue(VGameStandardLanguage, t_lang[i]); print("text language is currently set to " .. game:getLink(VGameStandardLanguage):getName()) end end | for i = 1, table.maxn(t_lang) do if line == ("textlanguage = " .. string.lower( t_lang[i]:getName() )) then game:setValue(VGameStandardLanguage, t_lang[i]); print("text language is currently set to " .. game:getLink(VGameStandardLanguage):getName()) end end | ||
Line 124: | Line 123: | ||
fw:write("# No: starts the game in a window\n") | fw:write("# No: starts the game in a window\n") | ||
fw:write("Fullscreen = ") | fw:write("Fullscreen = ") | ||
− | if wm then fw:write("Yes\n") else fw:write("No\n") end | + | if wm:getBool(VConditionValue) then fw:write("Yes\n") else fw:write("No\n") end |
-- * resolution * -- | -- * resolution * -- | ||
fw:write("#\n") | fw:write("#\n") | ||
Line 138: | Line 137: | ||
fw:write("# No: do not show subtitles during the game, cut scenes or videos\n") | fw:write("# No: do not show subtitles during the game, cut scenes or videos\n") | ||
fw:write("Subtitles = ") | fw:write("Subtitles = ") | ||
− | if subs then fw:write("Yes\n") else fw:write("No\n") end | + | if subs:getBool(VConditionValue) then fw:write("Yes\n") else fw:write("No\n") end |
-- * text language * -- | -- * text language * -- | ||
fw:write("#\n") | fw:write("#\n") | ||
Line 164: | Line 163: | ||
fw:write("# No: show the game as it's meant to be played\n") | fw:write("# No: show the game as it's meant to be played\n") | ||
fw:write("ColorBlindMode = ") | fw:write("ColorBlindMode = ") | ||
− | if cbm then fw:write("Yes\n") else fw:write("No\n") end | + | if cbm:getBool(VConditionValue) then fw:write("Yes\n") else fw:write("No\n") end |
-- * log level * -- | -- * log level * -- | ||
fw:write("#\n") | fw:write("#\n") |
Revision as of 20:28, 2 March 2014
Name | Type | By |
---|---|---|
Read/Write Config.ini | Definition | AFRLme |
This script allows you to read from/write to the config.ini file. This script is required for anyone wanting to create a professional game menu which stores & remembers each players option configuration. By default Visionaire Studio would load the default settings on game launch.
Instructions
It is a little bit hard to create step by step instructions for this script. My suggestion is to: read over the script & comments I have added & then try & edit it to suit your needs. If you have any difficulties, then please feel free to contact me for help.
1. Add the main script to the Visionaire Studio Script Editor & set the script as a definition script.
2. Edit the script to suit.
3. Create conditions & values (in vs editor) - they should reflect the conditions & values listed in the script.
4. Assign default values (integer & string for values, boolean for conditions).
5. create a condition that will be used to determine if settings have been changed. This condition should be set to true each time an option is changed. Name it: cfg_update.
6. To read from the config.ini: add an execute a script action to the game launch action, or the an at begin of scene action for the menu scene, containing...
read_ini()
7. To write new settings to the config.ini: add an execute a script action to an at end of scene action for the menu scene, containing...
if getObject("Conditions[cfg_update]"):getBool(VConditionValue) then
write_ini()
end
Main Script
--[[
Read from config.ini [v2] (28/02/2014)
Written by AFRLme [Lee Clarke]
-- + --
alternatingfrequencies@hotmail.com | skype @ AFRLme
-- + --
This script is donation optional. In game credit is non-negotiable.
You are free to: ¹ use it in your game(s). ² modify the script.
Do not remove - or edit - this comment block.
--]]
-- * local variables * --
local fn = "config.ini" -- store filename
-- * --
local wm = getObject("Conditions[cfg_wm]") -- window mode [fullscreen/windowed]
local res = getObject("Values[cfg_res]") -- resolution [fullscreen mode only]
local subs = getObject("Conditions[cfg_subs]") -- subtitles [on/off]
local fx = getObject("Values[cfg_fx]") -- fx level [low/medium/high] (controls which animations will be displayed)
local cbm = getObject("Conditions[cfg_cbm]") -- color blind mode [on/off]
-- * fallback * --
local lglvl = "Error" -- default value for log level
local df = "File = Data.vis" -- filename should reflect exported .vis file
game:setValue(VGameSpeechLanguage, game:getLink(VGameStandardLanguage)) -- default speech language to stndard language
-- * tables * --
local t_res = {"Auto","desktop","640x480","800x600","1024x768","1280x720","1280x1024","1680x1050","1920x1080"} -- add available resolutions here
local t_lang = game:getLinks(VGameLanguages) -- store all available languages into a table
-- * function used to read data from the config.ini file * --
function read_ini()
local fr = io.open(localAppDir .. fn, "r") -- read from config.ini
-- * --
if fr then -- if file exists then...
line = fr:read() -- read currently selected line
print("-- * --")
print(fn .. " exists")
print("retrieving settings from " .. fn)
for lines in io.lines(fn) do
line = string.lower(lines) -- convert all line content to lowercase
if not line:find("#") then -- skip all lines containing "#"
if lines:find("file =") then df = line end
-- * window mode * --
if line == "fullscreen = no" then wm:setValue(VConditionValue, false); print("window mode is currently set to Windowed") end
if line == "fullscreen = yes" then wm:setValue(VConditionValue, true); print("window mode is currently set to Fullscreen") end
-- * resolution * --
for i = 1, table.maxn(t_res) do if line == ("resolution = " .. string.lower( t_res[i] )) then res:setValue(VValueString, t_res[i]); res:setValue(VValueInt, i); print("resolution is currently set to " .. res:getStr(VValueString)) end end
-- * subtitles * --
if line == "subtitles = no" then subs:setValue(VConditionValue, false); print("subtitles are currently set to off") end
if line == "subtitles = yes" then subs:setValue(VConditionValue, true); print("subtitles are currently set to on") end
-- * text language * --
for i = 1, table.maxn(t_lang) do if line == ("textlanguage = " .. string.lower( t_lang[i]:getName() )) then game:setValue(VGameStandardLanguage, t_lang[i]); print("text language is currently set to " .. game:getLink(VGameStandardLanguage):getName()) end end
-- * speech language * --
for i = 1, table.maxn(t_lang) do if line == ("speechlanguage = " .. string.lower( t_lang[i]:getName() )) then game:setValue(VGameSpeechLanguage, t_lang[i]); print("spoken language is currently set to " .. game:getLink(VGameSpeechLanguage):getName()) end end
-- * fx quality * --
if line == "fxquality = low" then fx:setValue(VValueString, "Low"); fx:setValue(VValueInt, 1); print("fx quality is currently set to " .. fx:getStr(VValueString)) end
if line == "fxquality = medium" then fx:setValue(VValueString, "Medium"); fx:setValue(VValueInt, 2); print("fx quality is currently set to " .. fx:getStr(VValueString)) end
if line == "fxquality = high" then fx:setValue(VValueString, "High"); fx:setValue(VValueInt, 3); print("fx quality is currently set to " .. fx:getStr(VValueString)) end
-- * color blind mode * ---
if line == "colorblindmode = no" then cbm:setValue(VConditionValue, false); print("color blind mode is currently set to Off") end
if line == "colorblindmode = yes" then cbm:setValue(VConditionValue, true); print("color blind mode is currently set to On") end
-- * log level * --
if line == "loglevel = error" then lglvl = "Error"; print("log level is currently set to Error") end
if line == "loglevel = warning" then lglvl = "Warning"; print("log level is currently set to Warning") end
if line == "loglevel = info" then lglvl = "Info"; print("log level is currently set to Info") end
-- * sound levels * --
if line:find("musicvolume =") then print("music volume = " .. getVolume(eMusicVolume)) end
if line:find("soundvolume =") then print("sound volume = " .. getVolume(eSoundVolume)) end
if line:find("speechvolume =") then print("speech volume = " .. getVolume(eSpeechVolume)) end
if line:find("movievolume =") then print("movie volume = " .. getVolume(eMovieVolume)) end
if line:find("globalvolume =") then print("global volume = " .. getVolume(eGlobalVolume)) end
end
end
fr:close()
print('successfully retrieved settings from ' .. fn .. "\n")
-- * end if else * --
else
print(fn .. ' does not exist\n')
end
end
-- * function used to write data to the config.ini file * --
function write_ini()
local fw = io.open(localAppDir .. "config.ini", "w") -- write to config.ini
print("-- * --")
print("writing new settings to " .. fn)
-- * data file * --
fw:write(df .. "\n")
-- * window mode * --
fw:write("#\n")
fw:write("# Fullscreen = {Yes|No}\n")
fw:write("# Yes: starts the game in fullscreen\n")
fw:write("# No: starts the game in a window\n")
fw:write("Fullscreen = ")
if wm:getBool(VConditionValue) then fw:write("Yes\n") else fw:write("No\n") end
-- * resolution * --
fw:write("#\n")
fw:write("# Resolution = {Auto|Desktop|Custom}\n")
fw:write("# Auto: wide-screen support is activated if a wide-screen display is detected\n")
fw:write("# Desktop: current desktop resolution is used when game is started in full screen mode\n")
fw:write("# Custom: enter a custom value eg: Resolution = 1920x1080\n")
fw:write("Resolution = " .. res:getStr(VValueString) .. "\n")
-- * subtitles * --
fw:write("#\n")
fw:write("# Subtitles = {Yes|No}\n")
fw:write("# Yes: show subtitles during the game, cut scenes & videos\n")
fw:write("# No: do not show subtitles during the game, cut scenes or videos\n")
fw:write("Subtitles = ")
if subs:getBool(VConditionValue) then fw:write("Yes\n") else fw:write("No\n") end
-- * text language * --
fw:write("#\n")
fw:write("# TextLanguage = {English|French|German|Spanish}\n")
fw:write("# this will display subtitles in the specified language\n")
fw:write("TextLanguage = " .. game:getLink(VGameStandardLanguage):getName() .. "\n")
-- * speech language * --
fw:write("#\n")
fw:write("# SpeechLanguage = {English|French|German|Spanish}\n")
fw:write("# this will play speech files linked to the specified language\n")
fw:write("# if no speech language is provided then the speech language will default to the standard language\n")
fw:write("SpeechLanguage = " .. game:getLink(VGameSpeechLanguage):getName() .. "\n")
-- * fx quality * --
fw:write("#\n")
fw:write("# FxQuality = {Low|Medium|High}\n")
fw:write("# allows user to change animation/particle fx modes (for players on lower end machines)\n")
fw:write("# Low: only show the basic required game animations/particle fx\n")
fw:write("# Medium: only show certain animations/particle fx &/or animations containing less frames\n")
fw:write("# High: show all animations, in all their glory\n")
fw:write("FxQuality = " .. fx:getStr(VValueString) .. "\n")
-- * color blind mode * --
fw:write("#\n")
fw:write("# ColorBlindMode = {Yes|No}\n")
fw:write("# Yes: enable color blind support (graphic replacement, on screen indicators etc)\n")
fw:write("# No: show the game as it's meant to be played\n")
fw:write("ColorBlindMode = ")
if cbm:getBool(VConditionValue) then fw:write("Yes\n") else fw:write("No\n") end
-- * log level * --
fw:write("#\n")
fw:write("# LogLevel = {Info|Warning|Error}\n")
fw:write("LogLevel = " .. lglvl .. "\n")
-- * volume settings * --
fw:write("#\n")
fw:write("# MusicVolume|SoundVolume|SpeechVolume|MovieVolume|GlobalVolume = int value {0-100}\n")
fw:write("MusicVolume = " .. getVolume(eMusicVolume) .. "\n")
fw:write("SoundVolume = " .. getVolume(eSoundVolume) .. "\n")
fw:write("SpeechVolume = " .. getVolume(eSpeechVolume) .. "\n")
fw:write("MovieVolume = " .. getVolume(eMovieVolume) .. "\n")
fw:write("GlobalVolume = " .. getVolume(eGlobalVolume) .. "\n")
print("new settings successfully written to " .. fn)
fw:close()
end