diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 6b1b013ec5c7c7d944d00ae5de1c1d6dd0bdb321..4892bb9e6edbf0bcc912ba9b0bcc63c63faffae5 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -1185,7 +1185,7 @@ function _M:setupCommands() end end, [{"_g","ctrl"}] = function() if config.settings.cheat then -- self:registerDialog(require("mod.dialogs.DownloadCharball").new()) - local f, err = loadfile("/data/general/events/rat-lich.lua") + local f, err = loadfile("/data/general/events/thunderstorm.lua") print(f, err) setfenv(f, setmetatable({level=self.level, zone=self.zone}, {__index=_G})) print(pcall(f)) diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua index ddaa824c26d80738c50ee1a441401ae78bffc2a9..7a14cca75687fd4348ec6085e73514c63f37bf54 100644 --- a/game/modules/tome/class/GameState.lua +++ b/game/modules/tome/class/GameState.lua @@ -1766,7 +1766,8 @@ function _M:startEvents() for i, e in ipairs(game.zone.events) do if e.name then evts[#evts+1] = e.name elseif e.group then - local f = loadfile("/data/general/events/groups/"..e.group..".lua") + local f, err = loadfile("/data/general/events/groups/"..e.group..".lua") + if not f then error(err) end setfenv(f, setmetatable({level=game.level, zone=game.zone}, {__index=_G})) local list = f() for j, ee in ipairs(list) do @@ -1807,7 +1808,8 @@ function _M:startEvents() table.print(game.zone.assigned_events) for i, e in ipairs(game.zone.assigned_events[game.level.level] or {}) do - local f = loadfile("/data/general/events/"..e..".lua") + local f, err = loadfile("/data/general/events/"..e..".lua") + if not f then error(err) end setfenv(f, setmetatable({level=game.level, zone=game.zone, event_id=e.name}, {__index=_G})) f() end diff --git a/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua b/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua index 09f2056485ce3b14027e17b8377f2f2715e560c1..5eca8cf5cc18a1518c617a3c1a4a35206ef7a684 100644 --- a/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua +++ b/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua @@ -20,5 +20,6 @@ return { {name="tombstones", percent=10}, {name="old-battle-field", percent=5}, -} {name="rat-lich", percent=2}, - + {name="thunderstorm", percent=7}, + {name="rat-lich", percent=2}, +} diff --git a/game/modules/tome/data/general/events/thunderstorm.lua b/game/modules/tome/data/general/events/thunderstorm.lua new file mode 100644 index 0000000000000000000000000000000000000000..6ff2076bcc41cac1376915f65c48746b54840787 --- /dev/null +++ b/game/modules/tome/data/general/events/thunderstorm.lua @@ -0,0 +1,66 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini +-- +-- 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 3 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, see <http://www.gnu.org/licenses/>. +-- +-- Nicolas Casalini "DarkGod" +-- darkgod@te4.org + +-- Darken +game.level.map:setShown(0.3, 0.3, 0.3, 1) +game.level.map:setObscure(0.3*0.6, 0.3*0.6, 0.3*0.6, 0.6) +game.level.map:liteAll(0, 0, game.level.map.w, game.level.map.h, false) + +-- Add random lightning firing off +game.level.data.thunderstorm_event_background = game.level.data.background +game.level.data.background = function(level) + local Map = require "engine.Map" + if rng.chance(30) then + local x1, y1 = rng.range(10, level.map.w - 11), rng.range(10, level.map.h - 11) + local x2, y2 = x1 + rng.range(-4, 4), y1 + rng.range(5, 10) + level.map:particleEmitter(x1, y1, math.max(math.abs(x2-x1), math.abs(y2-y1)), "lightning", {tx=x2-x1, ty=y2-y1}) + game:playSoundNear({x=x1,y=y1}, "talents/thunderstorm") + end + + if level.data.thunderstorm_event_background then level.data.thunderstorm_event_background(level) end +end + +game.zone.thunderstorm_event_levels = game.zone.thunderstorm_event_levels or {} +game.zone.thunderstorm_event_levels[level.level] = true + +if not game.zone.thunderstorm_event_on_turn then game.zone.thunderstorm_event_on_turn = game.zone.on_turn or function() end end +game.zone.on_turn = function() + if game.zone.thunderstorm_event_on_turn then game.zone.thunderstorm_event_on_turn() end + + if game.turn % 10 ~= 0 or not game.zone.thunderstorm_event_levels[game.level.level] then return end + + if not rng.percent(2) then return end + + local i, j = util.findFreeGrid(game.player.x + rng.range(-5, 5), game.player.y + rng.range(-5, 5), 10, true, {[engine.Map.ACTOR]=true}) + if not i then return end + + local npcs = mod.class.NPC:loadList{"/data/general/npcs/gwelgoroth.lua"} + local m = game.zone:makeEntity(game.level, "actor", {base_list=npcs}, nil, true) + if m then + game.zone:addEntity(game.level, m, "actor", i, j) + local x1, y1 = i + rng.range(-4, 4), j + rng.range(-4, 4) + game.level.map:particleEmitter(x1, y1, math.max(math.abs(i-x1), math.abs(j-y1)), "lightning", {tx=i-x1, ty=j-y1}) + game:playSoundNear({x=i,y=j}, "talents/thunderstorm") + end + +end + +require("engine.ui.Dialog"):simplePopup("Thunderstorm", "As you walk into the area you notice a huge thunderstorm over your head, beware.") + +return true