diff --git a/game/modules/tome/data/general/events/damp-cave.lua b/game/modules/tome/data/general/events/damp-cave.lua index 0d72d513aeeaa214c502ca40acd7319afb9d7545..fa4aff8e3aac40943f1d56229b5f59c69b0a6e42 100644 --- a/game/modules/tome/data/general/events/damp-cave.lua +++ b/game/modules/tome/data/general/events/damp-cave.lua @@ -44,6 +44,8 @@ local changer = function(id) ambient_music = "Swashing the buck.ogg", reload_lists = false, persistent = "zone", + min_material_level = game.zone.min_material_level, + max_material_level = game.zone.max_material_level, generator = { map = { class = "engine.generator.map.Cavern", diff --git a/game/modules/tome/data/general/events/drake-cave.lua b/game/modules/tome/data/general/events/drake-cave.lua new file mode 100644 index 0000000000000000000000000000000000000000..49873fa8059f4b7fad710ca50015cf589fdfe452 --- /dev/null +++ b/game/modules/tome/data/general/events/drake-cave.lua @@ -0,0 +1,113 @@ +-- 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 + +-- Find a random spot +local x, y = rng.range(1, level.map.w - 2), rng.range(1, level.map.h - 2) +local tries = 0 +while (not game.player:canMove(x, y) or level.map.attrs(x, y, "no_teleport")) and tries < 100 do + x, y = rng.range(1, level.map.w - 2), rng.range(1, level.map.h - 2) + tries = tries + 1 +end +if tries >= 100 then return false end + +local kind = rng.table{"fire", "fire", "cold", "cold", "storm", "storm", "multihued"} + +local id = kind.."-dragon-cave-"..game.turn + +local changer = function(id, kind) + local npcs = mod.class.NPC:loadList{"/data/general/npcs/"..kind.."-drake.lua"} + local objects = mod.class.Object:loadList("/data/general/objects/objects.lua") + local terrains = mod.class.Grid:loadList("/data/general/grids/cave.lua") + terrains.CAVE_LADDER_UP_WILDERNESS.change_level_shift_back = true + terrains.CAVE_LADDER_UP_WILDERNESS.change_zone_auto_stairs = true + local zone = mod.class.Zone.new(id, { + name = "Intimidating Cave", + level_range = {zone:level_adjust_level(level, zone, "actor"), zone:level_adjust_level(level, zone, "actor")}, + level_scheme = "player", + max_level = 1, + actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end, + width = 50, height = 50, + ambient_music = "Swashing the buck.ogg", + reload_lists = false, + persistent = "zone", + min_material_level = game.zone.min_material_level, + max_material_level = game.zone.max_material_level, + generator = { + map = { + class = "engine.generator.map.Cavern", + zoom = 6, + min_floor = 1200, + floor = "CAVEFLOOR", + wall = "CAVEWALL", + up = "CAVE_LADDER_UP_WILDERNESS", + door = "CAVEFLOOR", + }, + actor = { + class = "mod.class.generator.actor.Random", + nb_npc = {25, 25}, + guardian = {special=function(e) return e.rank and e.rank >= 2 end, random_elite={life_rating=function(v) return v * 1.5 + 4 end, nb_rares=3}}, + }, + object = { + class = "engine.generator.object.Random", + filters = {{type="gem"}}, + nb_object = {15, 25}, + }, + trap = { + class = "engine.generator.trap.Random", + nb_trap = {6, 9}, + }, + }, +-- levels = { [1] = { generator = { map = { up = "CAVEFLOOR", }, }, }, }, + npc_list = npcs, + grid_list = terrains, + object_list = objects, + trap_list = mod.class.Trap:loadList("/data/general/traps/natural_forest.lua"), + }) + return zone +end + +local g = game.level.map(x, y, engine.Map.TERRAIN):cloneFull() +g.name = "intimidating cave" +g.display='>' g.color_r=0 g.color_g=0 g.color_b=255 g.notice = true +g.change_level=1 g.change_zone=id g.glow=true +g.add_displays = g.add_displays or {} +g.add_displays[#g.add_displays+1] = mod.class.Grid.new{image="terrain/crystal_ladder_down.png", z=5} +g.nice_tiler = nil +g:initGlow() +g.dragon_kind = kind +g.real_change = changer +g.change_level_check = function(self) + game:changeLevel(1, self.real_change(self.change_zone, self.dragon_kind), {temporary_zone_shift=true}) + self.change_level_check = nil + self.real_change = nil + return true +end +game.zone:addEntity(game.level, g, "terrain", x, y) + +local i, j = util.findFreeGrid(x, y, 10, true, {[engine.Map.ACTOR]=true}) +if not i then return end + +-- Pop hatchlings at the stairs +local npcs = mod.class.NPC:loadList{"/data/general/npcs/"..kind.."-drake.lua"} +local m = game.zone:makeEntity(game.level, "actor", {base_list=npcs, special=function(e) return e.rank and e.rank == 1 end}, nil, true) +if m then + game.zone:addEntity(game.level, m, "actor", i, j) +end + +return true diff --git a/game/modules/tome/data/general/events/fearscape-portal.lua b/game/modules/tome/data/general/events/fearscape-portal.lua index ab28cc04fd1c671d3aa35c604cec70eed0087c1f..422e1e09004c89883d17ef760e13f0fd6bf827b5 100644 --- a/game/modules/tome/data/general/events/fearscape-portal.lua +++ b/game/modules/tome/data/general/events/fearscape-portal.lua @@ -53,6 +53,8 @@ local changer = function(id) reload_lists = false, projectile_speed_mod = 0.3, persistent = "zone", + min_material_level = game.zone.min_material_level, + max_material_level = game.zone.max_material_level, generator = { map = { class = "engine.generator.map.Roomer", @@ -81,7 +83,7 @@ local changer = function(id) nb_trap = {6, 9}, }, }, - post_process = function(level) + post_process = function(level) local Map = require "engine.Map" local Quadratic = require "engine.Quadratic" level.background_particle1 = require("engine.Particles").new("starfield_static", 1, {width=Map.viewport.width, height=Map.viewport.height, nb=300, a_min=0.5, a_max = 0.8, size_min = 1, size_max = 3}) diff --git a/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua b/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua index 943ddae05cf9fe5eaaa58e4e6e7185f01d4798ce..a8465c86a4ad2e8e97a69b02b8076c530f52998d 100644 --- a/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua +++ b/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua @@ -19,4 +19,5 @@ return { {name="damp-cave", percent=10}, + {name="drake-cave", percent=5}, } diff --git a/game/modules/tome/data/general/events/naga-portal.lua b/game/modules/tome/data/general/events/naga-portal.lua index 490a66e73aa7fce608a66c7859a64138e9c97bb7..8e22c4464e36097ae686b3b0fcc584ec93ab9d33 100644 --- a/game/modules/tome/data/general/events/naga-portal.lua +++ b/game/modules/tome/data/general/events/naga-portal.lua @@ -58,6 +58,8 @@ local changer = function(id) color_shown = {0.5, 1, 0.8, 1}, color_obscure = {0.5*0.6, 1*0.6, 0.8*0.6, 0.6}, persistent = "zone", + min_material_level = game.zone.min_material_level, + max_material_level = game.zone.max_material_level, generator = { map = { class = "engine.generator.map.Cavern", diff --git a/game/modules/tome/data/general/events/old-battle-field.lua b/game/modules/tome/data/general/events/old-battle-field.lua index 045e9c087677e7afb9c8643c2d32fec137f81351..54e5ac87f306ac6826f153a7de2ef8c6009e6199 100644 --- a/game/modules/tome/data/general/events/old-battle-field.lua +++ b/game/modules/tome/data/general/events/old-battle-field.lua @@ -54,6 +54,8 @@ if tries < 100 then ambient_music = "Swashing the buck.ogg", reload_lists = false, persistent = "zone", + min_material_level = game.zone.min_material_level, + max_material_level = game.zone.max_material_level, generator = { map = { class = "engine.generator.map.Static", diff --git a/game/modules/tome/data/zones/old-forest/events.lua b/game/modules/tome/data/zones/old-forest/events.lua index b1e6d1252f7e7b5ccd932ccef59bba3f5a00d87b..f7e436efd1dcc57cd89a3e085838bbb9fb7f2cc9 100644 --- a/game/modules/tome/data/zones/old-forest/events.lua +++ b/game/modules/tome/data/zones/old-forest/events.lua @@ -18,8 +18,6 @@ -- darkgod@te4.org return { one_per_level=true, - {name="tombstones", percent=10}, - {name="old-battle-field", percent=5}, {group="outdoor-majeyal-gloomy"}, {group="outdoor-majeyal-generic"}, } \ No newline at end of file