Difference between revisions of "Read/Write Config.ini (CMS)"

From The Official Visionaire Studio: Adventure Game Engine Wiki
Line 10: Line 10:
 
== Instructions ==
 
== Instructions ==
 
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. Decide on what options you are going to - or have included - include in your game.<br/>
+
2. I decided what options were going to be included in my game.<br/>
 +
3. I created conditions, & values for each option (editor); as required. Some of the options did not require any conditions or values.<br/>
 +
4. I then created some variables that linked to the conditions & values I had created in step '''3'''.
 
<syntaxhighlight>
 
<syntaxhighlight>
In the main script I have created options for:
+
local wm = getObject("Conditions[cfg_wm]") -- window mode [fullscreen/windowed]
file -- this is usually the name of the exported .vis file
+
local res = getObject("Values[cfg_res]") -- resolution [fullscreen mode only]
window mode -- fullscreen on/off
+
local subs = getObject("Conditions[cfg_subs]") -- subtitles [on/off]
subtitles -- on/off
+
local fx = getObject("Values[cfg_fx]") -- fx level [low/medium/high] (controls which animations will be displayed)
text language -- assign subtitle language
+
local cbm = getObject("Conditions[cfg_cbm]") -- color blind mode [on/off]
speech language -- alternative speech language; defaults to subtitle language if not added
+
</syntaxhighlight>
fx quality -- this determines which animations/particle fx should be played/displayed
+
5. Then I created some fallback (default settings) values for some of the options, I didn't create conditions or values for.
color blind mode -- should really come standard with games these days
+
<syntaxhighlight>
log level -- determines what should be printed to the log file
+
-- * fallback * --
volume levels -- the volume levels - these are technically written & read without us having to code anything
+
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 standard language
 
</syntaxhighlight>
 
</syntaxhighlight>
3. create conditions/values for each option; as required.<br/>
 
  
 
== Main Script ==
 
== Main Script ==
Line 50: Line 53:
 
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 stndard language
+
game:setValue(VGameSpeechLanguage, game:getLink(VGameStandardLanguage)) -- default speech language to standard language
  
 
-- * tables * --
 
-- * tables * --

Revision as of 19:59, 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

1. Add the main script to the Visionaire Studio Script Editor & set the script as a definition script.
2. I decided what options were going to be included in my game.
3. I created conditions, & values for each option (editor); as required. Some of the options did not require any conditions or values.
4. I then created some variables that linked to the conditions & values I had created in step 3.

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]

5. Then I created some fallback (default settings) values for some of the options, I didn't create conditions or values for.

-- * 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 standard language

Main Script

--[[
Read/Write Config.ini [v3] (02/03/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 standard 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 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 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 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