(0.6.6) OTClient startup.ogg alternate

Shadowsong

Game Developer & Graphic Designer
Joined
Feb 23, 2010
Messages
3,359
Reaction score
2,627
Location
Bosnia & Herzegovina
You were right about randomseed.
But it has a issue that you can fix it forcing a first unused random as the first time you use the random.
That was mine solution:

Lua:
local musicPaths = {
  "/sounds/startup1",
  "/sounds/startup2",
  "/sounds/startup3",
  "/sounds/startup4",
}

math.randomseed(os.time())
local musicPath = musicPaths[math.random(#musicPaths)] -- First random may be not randomized, but we need to force this to avoid this issue when we need
local musicChannel = g_sounds.getChannel(1)

function setMusic(filename)
  musicPath = filename

  if not g_game.isOnline() then
    musicChannel:stop()
    musicChannel:enqueue(musicPath, 3)
  end
end

function reloadScripts()
  g_textures.clearCache()
  g_modules.reloadModules()

  local script = '/' .. g_app.getCompactName() .. 'rc.lua'
  if g_resources.fileExists(script) then
    dofile(script)
  end

  local message = tr('All modules and scripts were reloaded.')

  modules.game_textmessage.displayGameMessage(message)
  print(message)
end

function startup()
  musicPath = musicPaths[math.random(#musicPaths)]

  g_logger.info(string.format("musicPath: %s", musicPath))

  -- Play startup music (The Silver Tree, by Mattias Westlund)
  musicChannel:enqueue(musicPath, 3)
  connect(g_game, { onGameStart = function() musicChannel:stop(3) end })
  connect(g_game, { onGameEnd = function()
      g_sounds.stopAll()
      musicPath = musicPaths[math.random(#musicPaths)] -- Randomizing music again on logout
      musicChannel:enqueue(musicPath, 3)
  end })

  -- Check for startup errors
  local errtitle = nil
  local errmsg = nil

  if g_graphics.getRenderer():lower():match('gdi generic') then
    errtitle = tr('Graphics card driver not detected')
    errmsg = tr('No graphics card detected, everything will be drawn using the CPU,\nthus the performance will be really bad.\nPlease update your graphics driver to have a better performance.')
  end

  -- Show entergame
  if errmsg or errtitle then
    local msgbox = displayErrorBox(errtitle, errmsg)
    msgbox.onOk = function() EnterGame.firstShow() end
  else
    EnterGame.firstShow()
  end
end

function init()
  connect(g_app, { onRun = startup,
                   onExit = exit })

  g_window.setMinimumSize({ width = 600, height = 480 })
  -- preloading musics
  for _, path in ipairs(musicPaths) do
    g_sounds.preload(path)
  end

  -- initialize in fullscreen mode on mobile devices
  if g_window.getPlatformType() == "X11-EGL" then
    g_window.setFullscreen(true)
  else
    -- window size
    local size = { width = 800, height = 600 }
    size = g_settings.getSize('window-size', size)
    g_window.resize(size)

    -- window position, default is the screen center
    local displaySize = g_window.getDisplaySize()
    local defaultPos = { x = (displaySize.width - size.width)/2,
                         y = (displaySize.height - size.height)/2 }
    local pos = g_settings.getPoint('window-pos', defaultPos)
    pos.x = math.max(pos.x, 0)
    pos.y = math.max(pos.y, 0)
    g_window.move(pos)

    -- window maximized?
    local maximized = g_settings.getBoolean('window-maximized', false)
    if maximized then g_window.maximize() end
  end

  g_window.setTitle(g_app.getName())
  g_window.setIcon('/images/clienticon')

  -- poll resize events
  g_window.poll()

  g_keyboard.bindKeyDown('Ctrl+Shift+R', reloadScripts)

  -- generate machine uuid, this is a security measure for storing passwords
  if not g_crypt.setMachineUUID(g_settings.get('uuid')) then
    g_settings.set('uuid', g_crypt.getMachineUUID())
    g_settings.save()
  end
end

function terminate()
  disconnect(g_app, { onRun = startup,
                      onExit = exit })
  -- save window configs
  g_settings.set('window-size', g_window.getUnmaximizedSize())
  g_settings.set('window-pos', g_window.getUnmaximizedPos())
  g_settings.set('window-maximized', g_window.isMaximized())
end

function exit()
  g_logger.info("Exiting application..")
end
This behavior is very strange. As you can see in test results, first result for me is always random as well. In his case, it appears not.
Well if anyone in the future runs into the issue, at least we explored two solutions. 👍
 
Top