------------------------------------------------------------------------ -- Copyright (C) 2002,2003 Daniel Heck -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License along -- with this program; if not, write to the Free Software Foundation, Inc., -- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -- -- $Id: startup.lua,v 1.21 2004/02/15 11:54:36 dheck Exp $ ------------------------------------------------------------------------ function Require(filename) dofile(enigma.FindDataFile(filename)) end --------------------- -- Option handling -- --------------------- -- Set default values for options options = { MouseSpeed = 7.0, FullScreen = 1, Nozoom = 1, InGameMusic = 0, -- no music during the game Difficulty = 2, -- hard Tournament = 0, -- tournament mode off VideoMode = 0, LevelMenuPosition = 0.0, WizardMode = 0, SoundSet = 0, -- 0 = 'enigma' for enigma, appropriate oxyd sound sets for oxyd versions -- 1 = 'enigma' -- 2.. = OxydVersion-2 SkipSolvedLevels = 0, TimeHunting = 0, SoundVolume = 1.0, MusicVolume = 1.0, StereoSeparation = 10.0, MenuMusicFile = "sound/menu.s3m", LevelMusicFile = "sound/Emilie.xm", } -- Table of level stats is initially empty stats = {} -- For backwards compatibility only -- function options.LevelStat2 (key, stat) if stat[1] < 0 then stat[1] = -1 end if stat[2] < 0 then stat[2] = -1 end if stat[3] < 0 then stat[3] = 0 end gsub(key, "([^#]*)#(.+)", function (pack,lev) stats[lev] = %stat end) end -- For backwards compatibility only -- function options.LevelStat (key, stat) -- old level status (containing modtime of .lua file) -- [keep this function here for compatibility with old config files] -- Enigma accidentally used to save times in the wrong numeric format. -- The following two lines works around this problem if stat[1] < 0 then stat[1] = -1 end if stat[2] < 0 then stat[2] = -1 end if stat[3] < 0 then stat[3] = 0 end stat[4] = stat[4] or 0 if stat[4] > 0 then stat[4] = 1 end -- level status has 'solved_at' time -> default to revision 1 gsub(key, "([^#]*)#(.+)", function (pack,lev) stats[lev] = %stat end) end function LoadOptions (filename) dofile(filename) end function SaveOptions (filename) function writeoption (key, val) local t = type(val) if t == "number" then write(format("options[\"%s\"] = %f\n", key,val)) elseif t == "string" then write(format("options[\"%s\"] = \"%s\"\n", key, val)) end end function writestat (leveltag, val) write(format("stats[\"%s\"] = { %d, %d, %d, %d }\n", leveltag, val[1], val[2], val[3], val[4])) end f = writeto(filename) if not f then error("Could not open options file for writing") end foreach(options, writeoption) -- Write options -- foreach(stats, writestat) -- Write level stats -- writeto() end ---------------------------------- -- Define some new object types -- ---------------------------------- function def_stone(name, sound) world.DefineSimpleStone(name,sound or "st-stone",0,0) end function def_stone_hollow(name) world.DefineSimpleStone(name,"",1,0) end function def_stone_glass(name, sound) world.DefineSimpleStone(name,sound or "st-stone",0,1) end function def_stone_movable_glass(name, sound) world.DefineSimpleStoneMovable(name,sound or "st-stone",1) end function def_stone_movable(name, sound) world.DefineSimpleStoneMovable(name,sound or "st-stone",0) end function def_floor(name, frict, mfactor) world.DefineSimpleFloor(name, frict, mfactor) end def_stone_movable("st-brownie", "st-thud") def_stone("st-invisible") def_stone("st-marble") def_stone_movable("st-marble_move") def_stone_hollow("st-marble_hole") def_stone("st-rock1") def_stone_movable("st-rock1_move") def_stone_hollow("st-rock1_hole") def_stone("st-rock2") def_stone_hollow("st-rock2_hole") def_stone("st-rock3") def_stone_movable("st-rock3_move") def_stone_hollow("st-rock3_hole") def_stone("st-rock4") def_stone("st-rock5") def_stone("st-rock6") def_stone("st-rock7") def_stone("st-rock8") def_stone("st-greenbrown") def_stone_movable("st-greenbrown_move") def_stone_hollow("st-greenbrown_hole") def_stone("st-brick") def_stone("st-woven") def_stone("st-wood_001") def_stone("st-bluegray") def_stone_hollow("st-bluegray_hole") def_stone("st-stone1") def_stone("st-stone2") def_stone("st-bumps") def_stone("st-beads") def_stone("st-metal") def_stone("st-blue-sand") def_stone("st-yellow") function mkoxydlikes(flavor) def_stone("st-likeoxyd"..flavor) def_stone("st-likeoxyd"..flavor.."-open") end mkoxydlikes("a") mkoxydlikes("b") mkoxydlikes("c") mkoxydlikes("d") def_stone_glass("st-glass") def_stone_movable_glass("st-glass_move") def_stone_glass("st-glass1") def_stone_hollow("st-glass1_hole") def_stone_movable_glass("st-glass1_move") def_stone_glass("st-glass2") def_stone_hollow("st-glass2_hole") def_stone_glass("st-glass3") -- Floor(kind, friction, mousefactor) def_floor("fl-bluegray", 4.5, 1.5) def_floor("fl-bluegreen", 6.0, 2.0) def_floor("fl-bluegreenx", 0.4, 1.0) def_floor("fl-brick", 4.0, 2.0) def_floor("fl-bumps", 5.0, 1.2) def_floor("fl-concrete", 4.5, 1.3) def_floor("fl-dunes", 1.3, 1.0) def_floor("fl-floor_001", 1.5, 2.5) def_floor("fl-gravel", 3.2, 1.5) def_floor("fl-gray", 5.0, 3.0) def_floor("fl-hay", 5.0, 1.5) def_floor("fl-himalaya", 5.0, 2.0) def_floor("fl-ice", 0.1, 0.1) def_floor("fl-ice_001", 0.1, 0.1) def_floor("fl-inverse", 3.0, -2.0) def_floor("fl-inverse2", 3.0, -2.0) def_floor("fl-leaves", 4.0, 1.5) def_floor("fl-leavesb", 4.0, 1.5) def_floor("fl-leavesc1", 4.0, 1.5) def_floor("fl-leavesc2", 4.0, 1.5) def_floor("fl-leavesc3", 4.0, 1.5) def_floor("fl-leavesc4", 4.0, 1.5) def_floor("fl-leavesd1", 4.0, 1.5) def_floor("fl-leavesd2", 4.0, 1.5) def_floor("fl-leavesd3", 4.0, 1.5) def_floor("fl-leavesd4", 4.0, 1.5) def_floor("fl-leavese1", 4.0, 1.5) def_floor("fl-leavese2", 4.0, 1.5) def_floor("fl-leavese3", 4.0, 1.5) def_floor("fl-leavese4", 4.0, 1.5) def_floor("fl-light", 2.2, 1.6) def_floor("fl-lightgray", 3.0, 1.6) def_floor("fl-darkgray", 3.0, 1.6) def_floor("fl-marble", 6.4, 2.0) def_floor("fl-metal", 3.0, 2.0) def_floor("fl-mortar", 7.2, 1.8) def_floor("fl-normal", 4.0, 2.0) def_floor("fl-normal_x", 3.0, 2.0) def_floor("fl-plank", 5.5, 2.0) def_floor("fl-red", 0.9, 1.0) def_floor("fl-rock", 3.0, 1.5) def_floor("fl-rough", 7.0, 2.0) def_floor("fl-rough_medium",5.0, 1.2) def_floor("fl-rough_slow", 7.0, 0.5) def_floor("fl-rough-blue", 7.0, 2.0) def_floor("fl-rough-red", 7.0, 2.0) def_floor("fl-sahara", 6.4, 2.0) def_floor("fl-samba", 6.0, 2.0) def_floor("fl-samba1", 6.0, 2.0) def_floor("fl-samba2", 6.0, 2.0) def_floor("fl-sand", 6.0, 2.0) def_floor("fl-space", 0.0, 0.0) def_floor("fl-springboard", 4.0, 2.0) def_floor("fl-stone", 1.4, 1.0) def_floor("fl-tigris", 6.0, 2.0) def_floor("fl-wood", 6.4, 2.0) def_floor("fl-woven", 6.5, 3.0) def_floor("fl-black", 3.0, 1.5) def_floor("fl-white", 3.0, 1.5) def_floor("fl-trigger", 3.0, 1.5) def_floor("fl-abyss_fake", 3.0, 2.0)