1-- _________ __ __ 2-- / _____// |_____________ _/ |______ ____ __ __ ______ 3-- \_____ \\ __\_ __ \__ \\ __\__ \ / ___\| | \/ ___/ 4-- / \| | | | \// __ \| | / __ \_/ /_/ > | /\___ \ 5-- /_______ /|__| |__| (____ /__| (____ /\___ /|____//____ > 6-- \/ \/ \//_____/ \/ 7-- ______________________ ______________________ 8-- T H E W A R B E G I N S 9-- Stratagus - A free fantasy real time strategy game engine 10-- 11-- options.lua - Define the menu for options. 12-- 13-- (c) Copyright 2006-2016 by Jimmy Salmon, Pali Rohár, Kyran Jackson and cybermind 14-- 15-- This program is free software; you can redistribute it and/or modify 16-- it under the terms of the GNU General Public License as published by 17-- the Free Software Foundation; either version 2 of the License, or 18-- (at your option) any later version. 19-- 20-- This program is distributed in the hope that it will be useful, 21-- but WITHOUT ANY WARRANTY; without even the implied warranty of 22-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23-- GNU General Public License for more details. 24-- 25-- You should have received a copy of the GNU General Public License 26-- along with this program; if not, write to the Free Software 27-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 28-- 29 30function AddSoundOptions(menu, offx, offy, centerx, bottom) 31 local b 32 33 b = menu:addLabel(_("Sound Options"), 128, 11, Fonts["game"]) 34 35 b = Label(_("Effects Volume")) 36 b:setFont(CFont:Get("game")) 37 b:adjustSize(); 38 menu:add(b, offx + 16, offy + 36 * 1) 39 40 local soundslider = {} 41 local soundsliderleftbutton = {} 42 local soundsliderrightbutton = {} 43 -- slider button to decrease slider value 44 soundsliderleftbutton = menu:addImageLeftSliderButton("", nil, 21, offy + 36 * 1.5, 45 function() soundslider:setValue(soundslider:getValue() - 25.5); SetEffectsVolume(soundslider:getValue()) end) 46 47 -- slider button to increase slider value 48 soundsliderrightbutton = menu:addImageRightSliderButton("", nil, 213, offy + 36 * 1.5, 49 function() soundslider:setValue(soundslider:getValue() + 25.5); SetEffectsVolume(soundslider:getValue()) end) 50 51 -- slider itself 52 soundslider = menu:addImageSlider(0, 255, 172, 18, offx + 41, offy + 36 * 1.5, g_marker, g_slider, 53 function() SetEffectsVolume(soundslider:getValue()) end) 54 55 -- set the value so the game saves it 56 soundslider:setValue(GetEffectsVolume()) 57 58 b = Label("min") 59 b:setFont(CFont:Get("small")) 60 b:adjustSize(); 61 menu:addCentered(b, offx + 32, offy + 36 * 2 + 2) 62 63 b = Label("max") 64 b:setFont(CFont:Get("small")) 65 b:adjustSize(); 66 menu:addCentered(b, offx + 224, offy + 36 * 2 + 2) 67 68 menu:addLabel(_("Sound:"), 12, 176, Fonts["game"], false) 69 menu:addLabel(_("On"), 60, 202, Fonts["game"], false) 70 menu:addLabel(_("Off"), 60, 224, Fonts["game"], false) 71 72 local effectscheckbox = {} 73 effectscheckbox = menu:addImageRadioButton("", "effectscheckbox", 37, 200, offi, offi2, oni, oni2, function() 74 SetEffectsEnabled(true) 75 soundslider:setEnabled(true) 76 soundsliderrightbutton:setEnabled(true) 77 soundsliderleftbutton:setEnabled(true) 78 end) 79 effectscheckbox:setMarked(IsEffectsEnabled()) 80 81 effectscheckbox = menu:addImageRadioButton("", "effectscheckbox", 37, 222, offi, offi2, oni, oni2, function() 82 SetEffectsEnabled(false) 83 soundslider:setEnabled(false) 84 soundsliderrightbutton:setEnabled(false) 85 soundsliderleftbutton:setEnabled(false) 86 end) 87 if (IsEffectsEnabled() == true) then 88 effectscheckbox:setMarked(false) 89 soundslider:setEnabled(true) 90 soundsliderrightbutton:setEnabled(true) 91 soundsliderleftbutton:setEnabled(true) 92 else 93 effectscheckbox:setMarked(true) 94 soundslider:setEnabled(false) 95 soundsliderrightbutton:setEnabled(false) 96 soundsliderleftbutton:setEnabled(false) 97 end 98 99 b = Label(_("Music Volume")) 100 b:setFont(CFont:Get("game")) 101 b:adjustSize(); 102 menu:add(b, offx + 16, offy + 36 * 2.75) 103 104 local musicslider = {} 105 local musicsliderleftbutton = {} 106 local musicsliderrightbutton = {} 107 -- slider button to decrease slider value 108 musicsliderleftbutton = menu:addImageLeftSliderButton("", nil, 21, offy + 36 * 3.25, function() musicslider:setValue(musicslider:getValue() - 25.5); SetMusicVolume(musicslider:getValue()) end) 109 110 -- slider button to decrease slider value 111 musicsliderrightbutton = menu:addImageRightSliderButton("", nil, 213, offy + 36 * 3.25, function() musicslider:setValue(musicslider:getValue() + 25.5); SetMusicVolume(musicslider:getValue()) end) 112 113 -- slider itself 114 musicslider = menu:addImageSlider(0, 255, 172, 18, offx + 41, offy + 36 * 3.25, g_marker, g_slider, function() SetMusicVolume(musicslider:getValue()) end) 115 116 -- set the value so the game saves it 117 musicslider:setValue(GetMusicVolume()) 118 119 b = Label("min") 120 b:setFont(CFont:Get("small")) 121 b:adjustSize(); 122 menu:addCentered(b, offx + 32, 137) 123 124 b = Label("max") 125 b:setFont(CFont:Get("small")) 126 b:adjustSize(); 127 menu:addCentered(b, offx + 224, 137) 128 129 local stereoSound = menu:addImageCheckBox(_("Stereo Sound"), offx + 16, offy + 36 * 4.25, offi, offi2, oni, oni2, function() end) 130 stereoSound:setMarked(Preference.StereoSound) 131 stereoSound:setActionCallback( 132 function() 133 Preference.StereoSound = stereoSound:isMarked() 134 end) 135 136 menu:addLabel(_("Music:"), 112, 176, Fonts["game"], false) 137 menu:addLabel(_("On"), 160, 202, Fonts["game"], false) 138 menu:addLabel(_("Off"), 160, 224, Fonts["game"], false) 139 140 local musiccheckbox = {} 141 musiccheckbox = menu:addImageRadioButton("", "musiccheckbox", 138, 200, offi, offi2, oni, oni2, function() 142 SetMusicEnabled(true) 143 musicslider:setEnabled(true) 144 musicsliderrightbutton:setEnabled(true) 145 musicsliderleftbutton:setEnabled(true) 146 MusicStopped() 147 end) 148 musiccheckbox:setMarked(IsMusicEnabled()) 149 150 musiccheckbox = menu:addImageRadioButton("", "musiccheckbox", 138, 222, offi, offi2, oni, oni2, function() 151 SetMusicEnabled(false) 152 musicslider:setEnabled(false) 153 musicsliderrightbutton:setEnabled(false) 154 musicsliderleftbutton:setEnabled(false) 155 end) 156 if (IsMusicEnabled() == true) then 157 musiccheckbox:setMarked(false) 158 musicslider:setEnabled(true) 159 musicsliderrightbutton:setEnabled(true) 160 musicsliderleftbutton:setEnabled(true) 161 else 162 musiccheckbox:setMarked(true) 163 musicslider:setEnabled(false) 164 musicsliderrightbutton:setEnabled(false) 165 musicsliderleftbutton:setEnabled(false) 166 end 167 168 b = menu:addHalfButton("~!OK", "o", 16 + 12 + 106, 288 - 40, 169 function() 170 wc2.preferences.EffectsVolume = GetEffectsVolume() 171 wc2.preferences.EffectsEnabled = IsEffectsEnabled() 172 wc2.preferences.MusicVolume = GetMusicVolume() 173 wc2.preferences.MusicEnabled = IsMusicEnabled() 174 wc2.preferences.StereoSound = Preference.StereoSound 175 SavePreferences() 176 menu:stop() 177 end) 178 179 b = menu:addHalfButton(_("Cancel (~<Esc~>)"), "escape", 16, 288 - 40, 180 function() 181 menu:stop() 182 end) 183end 184 185function RunGameSoundOptionsMenu() 186 local menu = WarGameMenu(panel(1)) 187 menu:resize(256, 288) 188 189 AddSoundOptions(menu, 0, 0, 256/2 - 192/2, 256) 190 191 if GameCycle > 0 then 192 menu:run(false) 193 else 194 menu:run() 195 end 196end 197 198function RunPreferencesMenu() 199 local menu = WarGameMenu(panel(5)) 200 menu:resize(352, 352) 201 menu:addLabel(_("Preferences"), 352 / 2, 11, Fonts["large"], true) 202 203 local row = 2; 204 local showHotkeys = menu:addImageCheckBox(_("Show Hotkeys"), 10, 10 + 18 * row, offi, offi2, oni, oni2, 205 function() 206 end) 207 showHotkeys:setMarked(UI.ButtonPanel.ShowCommandKey) 208 showHotkeys:setActionCallback( 209 function() 210 UI.ButtonPanel.ShowCommandKey = showHotkeys:isMarked() 211 end) 212 row = row + 1; 213 214 local grabMouse = menu:addImageCheckBox(_("Grab Mouse"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function()end) 215 grabMouse:setMarked(GetGrabMouse()) 216 grabMouse:setActionCallback( 217 function() 218 SetGrabMouse(grabMouse:isMarked()) 219 end) 220 row = row + 1; 221 222 local showDamage = menu:addImageCheckBox(_("~!*Show damage"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 223 showDamage:setActionCallback( 224 function() 225 if showDamage:isMarked() == true then 226 SetDamageMissile("missile-hit") 227 else 228 SetDamageMissile(nil) 229 end 230 end) 231 showDamage:setMarked(wc2.preferences.ShowDamage) 232 row = row + 1; 233 234 local showButtonPopups = menu:addImageCheckBox(_("~!*Show button popups"), 10, 10 + 18 * row, offi, offi2, oni, oni2, 235 function() 236 end) 237 showButtonPopups:setMarked(wc2.preferences.ShowButtonPopups) 238 row = row + 1; 239 240 local mineNotifications = menu:addImageCheckBox(_("Mine notifications"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 241 mineNotifications:setActionCallback( 242 function() 243 Preference.MineNotifications = mineNotifications:isMarked() 244 end) 245 mineNotifications:setMarked(Preference.MineNotifications) 246 row = row + 1; 247 248 local showOrders = menu:addImageCheckBox(_("Show orders"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 249 showOrders:setActionCallback( 250 function() 251 if showOrders:isMarked() == true then 252 Preference.ShowOrders = 1 253 else 254 Preference.ShowOrders = 0 255 end 256 end) 257 if Preference.ShowOrders > 0 then 258 showOrders:setMarked(true) 259 else 260 showOrders:setMarked(false) 261 end 262 row = row + 1; 263 264 local useFancyBuildings = menu:addImageCheckBox(_("Mirrored buildings"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 265 useFancyBuildings:setActionCallback( 266 function() 267 SetFancyBuildings(useFancyBuildings:isMarked()) 268 end) 269 useFancyBuildings:setMarked(wc2.preferences.UseFancyBuildings) 270 row = row + 1; 271 272 local showMessages = menu:addImageCheckBox(_("Show messages"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 273 showMessages:setActionCallback( 274 function() 275 Preference.ShowMessages = showMessages:isMarked() 276 end) 277 showMessages:setMarked(wc2.preferences.ShowMessages) 278 row = row + 1; 279 280 local pauseOnLeave = menu:addImageCheckBox(_("Pause on leave"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 281 pauseOnLeave:setActionCallback( 282 function() 283 Preference.PauseOnLeave = pauseOnLeave:isMarked() 284 end) 285 pauseOnLeave:setMarked(wc2.preferences.PauseOnLeave) 286 row = row + 1; 287 288 local enhancedEffects = menu:addImageCheckBox(_("~!*Enhanced effects"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 289 enhancedEffects:setMarked(wc2.preferences.EnhancedEffects) 290 row = row + 1; 291 292 local deselectInMine = menu:addImageCheckBox(_("Deselect in mines"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 293 deselectInMine:setActionCallback( 294 function() 295 Preference.DeselectInMine = deselectInMine:isMarked() 296 end) 297 deselectInMine:setMarked(wc2.preferences.DeselectInMine) 298 row = row + 1; 299 300 local fogOfWar 301 if (not IsNetworkGame()) then 302 fogOfWar = menu:addImageCheckBox(_("Fog of War"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 303 fogOfWar:setActionCallback( 304 function() 305 SetFogOfWar(fogOfWar:isMarked()) 306 end) 307 fogOfWar:setMarked(wc2.preferences.FogOfWar) 308 row = row + 1; 309 end 310 311 local simplifiedAutoTargeting 312 if (not IsNetworkGame()) then 313 simplifiedAutoTargeting = menu:addImageCheckBox(_("Simplified auto targ."), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 314 simplifiedAutoTargeting:setMarked(Preference.SimplifiedAutoTargeting) 315 simplifiedAutoTargeting:setActionCallback( 316 function() 317 Preference.SimplifiedAutoTargeting = simplifiedAutoTargeting:isMarked() 318 -- EnableSimplifiedAutoTargeting(simplifiedAutoTargeting:isMarked()) 319 end) 320 row = row + 1; 321 end 322 323 local useFancyShadows = menu:addImageCheckBox(_("~!*Animated shadows"), 10, 10 + 18 * row, offi, offi2, oni, oni2, function() end) 324 useFancyShadows:setActionCallback( 325 function() 326 Preference.UseFancyShadows = useFancyShadows:isMarked() 327 wc2.preferences.UseFancyShadows = useFancyShadows:isMarked() 328 SavePreferences() 329 end) 330 useFancyShadows:setMarked(wc2.preferences.UseFancyShadows) 331 row = row + 1; 332 333 local selectionStyleList = {"rectangle", "alpha-rectangle", "circle", "alpha-circle", "corners"} 334 local selectionStyleList1 = {_("rectangle"), _("alpha-rectangle"), _("circle"), _("alpha-circle"), _("corners")} 335 menu:addLabel(_("Selection style:"), 225, 28 + 19 * 0, Fonts["game"], false) 336 local selectionStyle = menu:addDropDown(selectionStyleList1, 225, 28 + 19 * 1, function(dd) end) 337 selectionStyle:setSelected(tableindex(selectionStyleList, wc2.preferences.SelectionStyle) - 1) 338 selectionStyle:setActionCallback( 339 function() 340 SetSelectionStyle(selectionStyleList[selectionStyle:getSelected() + 1]) 341 end) 342 selectionStyle:setSize(120, 16) 343 344 local viewportModeList = {_("single"), _("horizontal 1 + 1"), _("horizontal 1 + 2"), _("vertical 1 + 1"), _("quad")} 345 menu:addLabel(_("Viewport mode:"), 225, 28 + 19 * 2, Fonts["game"], false) 346 local viewportMode = menu:addDropDown(viewportModeList, 225, 28 + 19 * 3, function(dd) end) 347 viewportMode:setSelected(wc2.preferences.ViewportMode) 348 viewportMode:setActionCallback( 349 function() 350 SetNewViewportMode(viewportMode:getSelected()) 351 end) 352 viewportMode:setSize(120, 16) 353 354 if GetShaderNames then 355 local shaderNames = GetShaderNames() 356 if #shaderNames > 0 then 357 menu:addLabel(_("Shader:"), 225, 28 + 19 * 4, Fonts["game"], false) 358 local shaderName = menu:addDropDown(shaderNames, 225, 28 + 19 * 5, function(dd) end) 359 local function getCurrentShaderIndex() 360 local currentShader = GetShader() 361 for idx,name in pairs(shaderNames) do 362 if name == currentShader then 363 return idx 364 end 365 end 366 end 367 shaderName:setSelected(getCurrentShaderIndex() - 1) 368 shaderName:setActionCallback(function() 369 local newShader = shaderNames[shaderName:getSelected() + 1]; 370 if SetShader(newShader) then 371 Preference.VideoShader = newShader 372 wc2.preferences.VideoShader = newShader 373 SavePreferences() 374 end 375 end) 376 shaderName:setSize(120, 16) 377 end 378 end 379 380 local fogOfWarTypes = {"tiled", "enhanced", "fast"} 381 local fogOfWarTypeList = {_("tiled"), _("enhanced"), _("fast")} 382 menu:addLabel(_("Fog of War type:"), 225, 28 + 19 * 6 + 5, Fonts["game"], false) 383 local fogOfWarType = menu:addDropDown(fogOfWarTypeList, 225, 28 + 19 * 7 + 5, function(dd) end) 384 fogOfWarType:setSelected(GetFogOfWarType()) 385 fogOfWarType:setActionCallback( 386 function() 387 SetFogOfWarType(fogOfWarTypes[fogOfWarType:getSelected() + 1]) 388 end) 389 fogOfWarType:setSize(120, 16) 390 391 local fowBilinear = menu:addImageCheckBox(_("Bilinear fog"), 225, 28 + 19 * 8 + 10, offi, offi2, oni, oni2, function()end) 392 fowBilinear:setMarked(GetIsFogOfWarBilinear()) 393 fowBilinear:setActionCallback( 394 function() 395 SetFogOfWarBilinear(fowBilinear:isMarked()) 396 end) 397 398 menu:addLabel(_("~!* - requires restart"), 10, 10 + 18 * 16, Fonts["game"], false) 399 400 401 menu:addHalfButton("~!OK", "o", 206, 352 - 40, 402 function() 403 wc2.preferences.GrabMouse = GetGrabMouse() 404 wc2.preferences.ShowCommandKey = UI.ButtonPanel.ShowCommandKey 405 wc2.preferences.MineNotifications = Preference.MineNotifications 406 wc2.preferences.ShowDamage = showDamage:isMarked() 407 wc2.preferences.ShowButtonPopups = showButtonPopups:isMarked() 408 wc2.preferences.UseFancyBuildings = useFancyBuildings:isMarked() 409 wc2.preferences.ShowMessages = Preference.ShowMessages 410 wc2.preferences.PauseOnLeave = Preference.PauseOnLeave 411 wc2.preferences.EnhancedEffects = enhancedEffects:isMarked() 412 wc2.preferences.DeselectInMine = Preference.DeselectInMine 413 wc2.preferences.SimplifiedAutoTargeting = Preference.SimplifiedAutoTargeting 414 wc2.preferences.FogOfWarType = fogOfWarTypes[fogOfWarType:getSelected() + 1] 415 wc2.preferences.FogOfWarBilinear = fowBilinear:isMarked() 416 417 if (not IsNetworkGame()) then 418 wc2.preferences.FogOfWar = fogOfWar:isMarked() 419 end 420 if Preference.ShowOrders > 0 then 421 wc2.preferences.ShowOrders = true 422 else 423 wc2.preferences.ShowOrders = false 424 end 425 wc2.preferences.SelectionStyle = selectionStyleList[selectionStyle:getSelected() + 1] 426 wc2.preferences.ViewportMode = viewportMode:getSelected() 427 SavePreferences() 428 menu:stop(1) 429 end) 430 431 menu:addHalfButton(_("Cancel (~<Esc~>)"), "escape", 40, 352 - 40, 432 function() 433 menu:stop() 434 end) 435 if GameCycle > 0 then 436 menu:run(false) 437 else 438 menu:run() 439 end 440end 441 442function RunDebugMenu() 443 local menu = WarGameMenu(panel(5)) 444 menu:resize(352, 352) 445 menu:addLabel(_("Debug"), 352 / 2, 11, Fonts["large"], true) 446 447 local showGrid = menu:addImageCheckBox(_("Show map grid"), 10, 10 + 19 * 2, offi, offi2, oni, oni2, function() end) 448 showGrid:setMarked(GetIsMapGridEnabled()) 449 showGrid:setActionCallback( 450 function() 451 SetEnableMapGrid(showGrid:isMarked()) 452 end) 453 454 -- Declared here because could be upadated by the fog of war type change 455 local fieldOfViewType 456 457 local fogOfWarTypes = {"tiled", "enhanced", "fast"} 458 local fogOfWarTypeList = {_("tiled"), _("enhanced"), _("fast")} 459 menu:addLabel(_("Fog of War type:"), 10, 28 + 19 * 3, Fonts["game"], false) 460 local fogOfWarType = menu:addDropDown(fogOfWarTypeList, 10, 28 + 19 * 4, function(dd) end) 461 fogOfWarType:setSelected(GetFogOfWarType()) 462 fogOfWarType:setActionCallback( 463 function() 464 SetFogOfWarType(fogOfWarTypes[fogOfWarType:getSelected() + 1]) 465 fieldOfViewType:setSelected(GetFieldOfViewType()) 466 end) 467 fogOfWarType:setSize(130, 16) 468 469 local fowBilinear = menu:addImageCheckBox(_("Bilinear interp."), 200, 28 + 19 * 4, offi, offi2, oni, oni2, function()end) 470 fowBilinear:setMarked(GetIsFogOfWarBilinear()) 471 fowBilinear:setActionCallback( 472 function() 473 SetFogOfWarBilinear(fowBilinear:isMarked()) 474 end) 475 476 477 478 -- if IsNetworkGame() and we are host - send according cmd to clients 479 local fieldOfViewTypes = {"shadow-casting", "simple-radial"} 480 local fieldOfViewTypeList = {_("shadow-casting"), _("radial")} 481 menu:addLabel(_("Field of View type:"), 10, 28 + 19 * 6, Fonts["game"], false) 482 fieldOfViewType = menu:addDropDown(fieldOfViewTypeList, 10, 28 + 19 * 7, function(dd) end) -- declared earlier 483 fieldOfViewType:setSelected(GetFieldOfViewType()) 484 fieldOfViewType:setActionCallback( 485 function() 486 SetFieldOfViewType(fieldOfViewTypes[fieldOfViewType:getSelected() + 1]) 487 fogOfWarType:setSelected(GetFogOfWarType()) 488 end) 489 fieldOfViewType:setSize(130, 16) 490 491 menu:addLabel(_("Enable opacity for:"), 200, 28 + 19 * 6, Fonts["game"], false) 492 local opaqueFores = menu:addImageCheckBox(_("Forest"), 200, 28 + 19 * 7, offi, offi2, oni, oni2, function() end) 493 opaqueFores:setMarked(GetIsOpaqueFor("forest")) 494 opaqueFores:setActionCallback( 495 function() 496 if opaqueFores:isMarked() then 497 SetOpaqueFor("forest") 498 else 499 RemoveOpaqueFor("forest") 500 end 501 end) 502 local opaqueFores = menu:addImageCheckBox(_("Rocks"), 200, 28 + 19 * 8, offi, offi2, oni, oni2, function() end) 503 opaqueFores:setMarked(GetIsOpaqueFor("rock")) 504 opaqueFores:setActionCallback( 505 function() 506 if opaqueFores:isMarked() then 507 SetOpaqueFor("rock") 508 else 509 RemoveOpaqueFor("rock") 510 end 511 end) 512 local opaqueFores = menu:addImageCheckBox(_("Walls"), 200, 28 + 19 * 9, offi, offi2, oni, oni2, function() end) 513 opaqueFores:setMarked(GetIsOpaqueFor("wall")) 514 opaqueFores:setActionCallback( 515 function() 516 if opaqueFores:isMarked() then 517 SetOpaqueFor("wall") 518 else 519 RemoveOpaqueFor("wall") 520 end 521 end) 522 523 local enableWalls = menu:addImageCheckBox(_("Enable walls"), 10, 28 + 19 * 10, offi, offi2, oni, oni2, function() end) 524 enableWalls:setMarked(GetIsWallsEnabledForSP()) 525 enableWalls:setActionCallback( 526 function() 527 SetEnableWallsForSP(enableWalls:isMarked()) 528 end) 529 530 local simplifiedAutoTargeting = menu:addImageCheckBox(_("Simplified auto targ."), 10, 28 + 19 * 11, offi, offi2, oni, oni2, function() end) 531 simplifiedAutoTargeting:setMarked(Preference.SimplifiedAutoTargeting) 532 simplifiedAutoTargeting:setActionCallback( 533 function() 534 EnableSimplifiedAutoTargeting(simplifiedAutoTargeting:isMarked()) 535 end) 536 537 538 menu:addHalfButton("~!OK", "o", 206, 352 - 40, 539 function() 540 wc2.preferences.MapGrid = GetIsMapGridEnabled() 541 -- Don't save other preferencies because it is just a debug menu 542 SavePreferences() 543 menu:stop(1) 544 end) 545 546 menu:addHalfButton(_("Cancel (~<Esc~>)"), "escape", 40, 352 - 40, 547 function() 548 menu:stop() 549 end) 550 if GameCycle > 0 then 551 menu:run(false) 552 else 553 menu:run() 554 end 555end 556 557function RunSpeedsMenu() 558 local menu = WarGameMenu(panel(1)) 559 560 menu:addLabel(_("Speed Settings"), 128, 8, Fonts["game"]) 561 menu:addLabel(_("Game Speed"), 12, 44, Fonts["game"], false) 562 563 local gamespeed = {} 564 -- slider button to decrease slider value 565 gamespeed = menu:addImageLeftSliderButton("", nil, 21, 60, function() gamespeed:setValue(gamespeed:getValue() - 5); SetGameSpeed(gamespeed:getValue()) end) 566 567 -- slider button to decrease slider value 568 gamespeed = menu:addImageRightSliderButton("", nil, 213, 60, function() gamespeed:setValue(gamespeed:getValue() + 5); SetGameSpeed(gamespeed:getValue()) end) 569 570 -- slider itself 571 gamespeed = menu:addImageSlider(15, 75, 172, 18, 41, 60, g_marker, g_slider, function() SetGameSpeed(gamespeed:getValue()) end) 572 573 -- set the value so the game saves it 574 gamespeed:setValue(GetGameSpeed()) 575 576 menu:addLabel(_("slow "), 22, 80, Fonts["small"], false) 577 local l = Label(_("fast")) 578 l:setFont(Fonts["small"]) 579 l:adjustSize() 580 menu:add(l, 234 - l:getWidth(), 80) 581 582 menu:addLabel(_("Mouse Scroll Speed"), 12, 112, Fonts["game"], false) 583 584 local mousescrollspeed = {} 585 -- slider button to decrease slider value 586 mousescrollspeed = menu:addImageLeftSliderButton("", nil, 21, 128, function() mousescrollspeed:setValue(mousescrollspeed:getValue() - .5); SetMouseScrollSpeed(mousescrollspeed:getValue()) end) 587 588 -- slider button to decrease slider value 589 mousescrollspeed = menu:addImageRightSliderButton("", nil, 213, 128, function() mousescrollspeed:setValue(mousescrollspeed:getValue() + .5); SetMouseScrollSpeed(mousescrollspeed:getValue()) end) 590 591 -- slider itself 592 mousescrollspeed = menu:addImageSlider(1, 10, 172, 18, 41, 128, g_marker, g_slider, function() SetMouseScrollSpeed(mousescrollspeed:getValue()) end) 593 594 -- set the value so the game saves it 595 mousescrollspeed:setValue(GetMouseScrollSpeed()) 596 597 menu:addLabel(_("slow "), 22, 148, Fonts["small"], false) 598 local l = Label(_("fast")) 599 l:setFont(Fonts["small"]) 600 l:adjustSize() 601 menu:add(l, 228 - l:getWidth() + 6, 148) 602 603 menu:addLabel(_("Key Scroll Speed"), 12, 180, Fonts["game"], false) 604 605 local keyscrollspeed = {} 606 -- slider button to decrease slider value 607 keyscrollspeed = menu:addImageLeftSliderButton("", nil, 21, 196, function() keyscrollspeed:setValue(keyscrollspeed:getValue() - .5); SetMouseScrollSpeed(keyscrollspeed:getValue()) end) 608 609 -- slider button to decrease slider value 610 keyscrollspeed = menu:addImageRightSliderButton("", nil, 213, 196, function() keyscrollspeed:setValue(keyscrollspeed:getValue() + .5); SetMouseScrollSpeed(keyscrollspeed:getValue()) end) 611 612 -- slider itself 613 keyscrollspeed = menu:addImageSlider(1, 10, 172, 18, 41, 196, g_marker, g_slider, 614 function() 615 SetKeyScrollSpeed(keyscrollspeed:getValue()) 616 end) 617 618 -- set the value so the game saves it 619 keyscrollspeed:setValue(GetKeyScrollSpeed()) 620 621 menu:addLabel(_("slow "), 22, 216, Fonts["small"], false) 622 local l = Label(_("fast")) 623 l:setFont(Fonts["small"]) 624 l:adjustSize() 625 menu:add(l, 228 - l:getWidth() + 6, 216) 626 627 menu:addHalfButton("~!OK", "o", 16 + 12 + 106, 288 - 40, 628 function() 629 wc2.preferences.GameSpeed = GetGameSpeed() 630 wc2.preferences.MouseScrollSpeed = GetMouseScrollSpeed() 631 wc2.preferences.KeyScrollSpeed = GetKeyScrollSpeed() 632 SavePreferences() 633 menu:stop(1) 634 end) 635 636 menu:addHalfButton(_("Cancel (~<Esc~>)"), "escape", 16, 288 - 40, 637 function() 638 menu:stop() 639 end) 640 641 if GameCycle > 0 then 642 menu:run(false) 643 else 644 menu:run() 645 end 646end 647 648function SetVideoSize(width, height) 649 if (Video:ResizeScreen(width, height) == false) then 650 return 651 end 652 bckground:Resize(Video.Width, Video.Height) 653 backgroundWidget = ImageWidget(bckground) 654 Load("scripts/ui.lua") 655 wc2.preferences.VideoWidth = Video.Width 656 wc2.preferences.VideoHeight = Video.Height 657 SavePreferences() 658end 659 660function BuildVideoOptionsMenu() 661 local menu = WarMenu() 662 local offx = (Video.Width - 352) / 2 663 local offy = (Video.Height - 352) / 2 664 local checkTexture 665 local b 666 667 local videoModes = { 668 640, 480, 669 800, 480, 670 720, 480, 671 720, 576, 672 800, 600, 673 1024, 600, 674 1024, 768, 675 1152, 864, 676 1280, 720, 677 1280, 768, 678 1280, 800, 679 1280, 960, 680 1280, 1024, 681 1360, 768, 682 1366, 768, 683 1440, 900, 684 1400, 1050, 685 1600, 900, 686 1600, 1200, 687 1600, 1280, 688 1680, 1050, 689 1920, 1080, 690 1920, 1200, 691 1920, 1440, 692 2560, 1600 693 } 694 695 local vlist = {} 696 for i=1,table.getn(videoModes)/2 do 697 vlist[i]=""..tostring(videoModes[i*2-1]).." x "..tostring(videoModes[i*2]).."" 698 end 699 700 menu:addLabel(wargus.Name .. " V" .. wargus.Version .. ", " .. wargus.Copyright, ((Video.Width - 640) / 2 + 320), (Video.Height - 90) + 18*4, Fonts["small"]) -- Copyright information. 701 702 menu:addLabel(_("Video Options"), offx + 176, offy + 1 + 26*-2) 703 menu:addLabel(_("Video Resolution"), offx + 16, offy + 34 , Fonts["game"], false) 704 705 videoList = menu:addImageListBox(offx + 16, offy + 50, 200, 7*(table.getn(videoModes)/2+1), vlist) 706 707 local function cb(s) 708 SetVideoSize(videoModes[videoList:getSelected()*2+1], videoModes[videoList:getSelected()*2+2]) 709 menu:stop(1) 710 end 711 videoList:setActionCallback(cb) 712 713 b = menu:addImageCheckBox(_("Full Screen"), offx + 17, offy + 55 + 26*7 + 14, offi, offi2, oni, oni2, 714 function() 715 ToggleFullScreen() 716 wc2.preferences.VideoFullScreen = Video.FullScreen 717 SavePreferences() 718 menu:stop(1) 719 end) 720 b:setMarked(Video.FullScreen) 721 722 menu:addHalfButton("~!OK", "o", offx + 123, offy + 55 + 26*11 + 14, function() menu:stop() end) 723 724 return menu:run() 725end 726 727function RunConfirmRestart(menu) 728 local confirm = WarGameMenu(panel(4)) 729 confirm:resize(288, 128) 730 731 local mes = MultiLineLabel(_("You need to restart game to apply changes, exit now?")) 732 mes:setFont(Fonts["game"]) 733 mes:setAlignment(MultiLineLabel.CENTER) 734 mes:setVerticalAlignment(MultiLineLabel.TOP) 735 mes:setLineWidth(250) 736 mes:setWidth(288) 737 mes:setHeight(48) 738 mes:setBackgroundColor(dark) 739 confirm:add(mes, 0, 25) 740 741 confirm:addHalfButton(_("~!Yes"), "y", 1 * (300 / 3) - 90, 120 - 16 - 27, 742 function() 743 confirm:stop() 744 menu:stop() 745 Exit(0) 746 end) 747 748 confirm:addHalfButton(_("~!No"), "n", 3 * (300 / 3) - 130, 120 - 16 - 27, 749 function() confirm:stop() end) 750 751 return confirm:run() 752end 753 754function RunLanguageMenu() 755 local menu = WarGameMenu(panel(5)) 756 menu:resize(352, 352) 757 local b 758 local languageList 759 760 local langlist = {} 761 if (LanguageTable ~= nil) then 762 for i=1,table.getn(LanguageTable)/3 do 763 langlist[i]=tostring(LanguageTable[(i-1)*3+1]) 764 end 765 end 766 767 menu:addLabel(_("Language Options"), 176, 10) 768 769 menu:addLabel(_("Available languages:"), 16, 34, Fonts["game"], false) 770 languageList = menu:addImageListBox(16, 50, 300, math.max(250, 8*(table.getn(LanguageTable)/3+1)), langlist) 771 772 menu:addHalfButton("~!OK", "o", 40, 320, function() 773 if (languageList:getSelected() >= 0) then 774 wc2.preferences.StratagusTranslation = LanguageTable[languageList:getSelected()*3 + 2] 775 wc2.preferences.GameTranslation = LanguageTable[languageList:getSelected()*3 + 3] 776 SetTranslationsFiles(wc2.preferences.StratagusTranslation, wc2.preferences.GameTranslation) 777 SavePreferences() 778 RunConfirmRestart(menu) 779 end 780 menu:stop() 781 end) 782 783 menu:addHalfButton(_("Cancel (~<Esc~>)"), "escape", 206, 320, function() 784 menu:stop() 785 end) 786 787 if GameCycle > 0 then 788 menu:run(false) 789 else 790 menu:run() 791 end 792end 793 794 795function RunVideoOptionsMenu() 796 local continue = 1 797 while (continue == 1) do 798 continue = BuildVideoOptionsMenu() 799 end 800end 801 802function RunGameOptionsMenu() 803 local menu = WarGameMenu(panel(1)) 804 805 menu:addLabel(_("Game Options"), 128, 11) 806 menu:addFullButton(_("Speeds (~<F6~>)"), "f6", 16, 40 + 36*0, 807 function() RunSpeedsMenu() end) 808 menu:addFullButton(_("Sound (~<F7~>)"), "f7", 16, 40 + 36*1, 809 function() RunGameSoundOptionsMenu() end) 810 menu:addFullButton(_("Preferences (~<F8~>)"), "f8", 16, 40 + 36*2, 811 function() RunPreferencesMenu() end) 812 if (GameCycle > 0) then 813 menu:addFullButton(_("Diplomacy (~<F9~>)"), "f9", 16, 40 + 36*3, 814 function() RunDiplomacyMenu() end) 815 if IsDebugEnabled then 816 menu:addFullButton(_("~<D~>ebug"), "d", 16, 40 + 36*4, 817 function() RunDebugMenu() end) 818 end 819 else 820 menu:addFullButton(_("Video (~<F9~>)"), "f9", 16, 40 + 36*3, 821 function() RunVideoOptionsMenu() end) 822 menu:addFullButton(_("Language"), "f13", 16, 40 + 36*4, 823 function() RunLanguageMenu() end) 824 end 825 menu:addFullButton(_("Previous (~<Esc~>)"), "escape", 128 - (224 / 2), 288 - 40, 826 function() menu:stop() end) 827 if (GameCycle > 0) then 828 menu:run(false) 829 else 830 menu:run() 831 end 832end 833 834function RunOptionsSubMenu() 835 wargus.playlist = { "music/Orc Briefing" .. wargus.music_extension } 836 SetDefaultRaceView() 837 838 if not (IsMusicPlaying()) then 839 PlayMusic("music/Orc Briefing" .. wargus.music_extension) 840 end 841 842 local menu = WarMenu() 843 local offx = (Video.Width - 640) / 2 844 local offy = (Video.Height - 480) / 2 845 846 menu:addLabel(wargus.Name .. _(" V") .. wargus.Version .. ", " .. wargus.Copyright, offx + 320, (Video.Height - 90) + 18*4, Fonts["small"]) 847 848 menu:addLabel(_("~<Game Options~>"), offx + 640/2, offy + 104 + 10) 849 menu:addFullButton(_("Speeds (~<F6~>)"), "f6", offx + 208, offy + 104 + 36*1, 850 function() RunSpeedsMenu() end) 851 menu:addFullButton(_("Sound (~<F7~>)"), "f7", offx + 208, offy + 104 + 36*2, 852 function() RunGameSoundOptionsMenu(); end) 853 menu:addFullButton(_("Preferences (~<F8~>)"), "f8", offx + 208, offy + 104 + 36*3, 854 function() RunPreferencesMenu(); end) 855 menu:addFullButton(_("Video (~<F9~>)"), "f9", offx + 208, offy + 104 + 36*4, 856 function() RunVideoOptionsMenu(); end) 857 menu:addFullButton(_("Language"), "f13", offx + 208, offy + 104 + 36*5, 858 function() RunLanguageMenu(); end) 859 860 menu:addFullButton(_("Previous (~<Esc~>)"), "escape", offx + 208, offy + 104 + 36*7, 861 function() menu:stop() end) 862 863 return menu:run() 864 end 865