From 88db68e186425d624eac6e74d4ecd47ec781b232 Mon Sep 17 00:00:00 2001
From: Bunny <glisa825@gmail.com>
Date: Sat, 28 Dec 2019 04:24:39 -0500
Subject: [PATCH] Razakai collapsed tower Shows in trollmire and (alt only)
 rhaloren camp

---
 .../tome/data/maps/vaults/collapsed-tower.lua | 189 ++++++++++++++++++
 .../tome/data/maps/zones/collapsed-tower.lua  |  96 +++++++++
 .../tome/data/zones/rhaloren-camp/zone.lua    |   6 +-
 .../tome/data/zones/trollmire/zone.lua        |   8 +-
 4 files changed, 292 insertions(+), 7 deletions(-)
 create mode 100644 game/modules/tome/data/maps/vaults/collapsed-tower.lua
 create mode 100644 game/modules/tome/data/maps/zones/collapsed-tower.lua

diff --git a/game/modules/tome/data/maps/vaults/collapsed-tower.lua b/game/modules/tome/data/maps/vaults/collapsed-tower.lua
new file mode 100644
index 0000000000..972ee11a61
--- /dev/null
+++ b/game/modules/tome/data/maps/vaults/collapsed-tower.lua
@@ -0,0 +1,189 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2019 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
+
+local Talents = require("engine.interface.ActorTalents")
+
+setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}
+
+local turret = function(version)
+   local NPC = require "mod.class.NPC"
+   local m = NPC.new{
+         type = "construct", subtype = "crystal", image="trap/trap_beam.png",
+         display = "t",
+         body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
+         life_rating = 20,
+         rank = 2,
+         inc_damage = { all = -75, },
+   
+         open_door = true,
+         cut_immune = 1,
+         blind_immune = 1,
+         fear_immune = 1,
+         poison_immune = 1,
+         disease_immune = 1,
+         stone_immune = 1,
+         see_invisible = 30,
+         no_breath = 1,
+         infravision = 10,
+         never_move = 1,
+   
+         autolevel = "caster",
+         level_range = {1, nil}, exp_worth = 1,
+         stats = { mag=16, con=22 },
+         size_category = 2,
+         name = "elemental crystal", color=colors.BLUE,
+         combat = { dam=resolvers.rngavg(1,2), atk=2, apr=0, dammod={str=0.4} },
+         combat_armor = 10, combat_def = 0,
+         talent_cd_reduction={[Talents.T_ELEMENTAL_BOLT]=3, },
+   
+         resolvers.talents{
+            [Talents.T_ELEMENTAL_BOLT]={base=1, every=5, max=9},
+         },
+   
+         ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
+      
+      }
+   return m
+end
+
+local id = "collapsed-tower-"..game.turn
+
+local changer = function()
+   local npcs = mod.class.NPC:loadList{"/data/general/npcs/thieve.lua"}
+   local objects = mod.class.Object:loadList("/data/general/objects/objects.lua")
+   local terrains = mod.class.Grid:loadList("/data/general/grids/basic.lua")
+   terrains.DOWN.change_level_shift_back = true
+   terrains.DOWN.change_zone_auto_stairs = true
+   terrains.DOWN.name = "stairs back to "..game.zone.name
+   terrains.DOWN.change_zone = game.zone.short_name
+   local zone = mod.class.Zone.new(id, {
+      name = "collapsed tower",
+      level_range = {game.zone.base_level, game.zone.base_level},
+      __applied_difficulty = true, -- Difficulty already applied to parent zone
+      level_scheme = "player",
+      max_level = 1,
+      width = 20, height = 20,
+      ambient_music = "Swashing the buck.ogg",
+      reload_lists = false,
+      persistent = "zone",
+      
+      no_worldport = game.zone.no_worldport,
+      min_material_level = util.getval(game.zone.min_material_level),
+      max_material_level = util.getval(game.zone.max_material_level),
+      generator = {
+         map = {
+            class = "engine.generator.map.Static",
+            map = "zones/collapsed-tower",
+         },
+         trap = { nb_trap = {0, 0} },
+         object = { nb_object = {0, 0} },
+         actor = { nb_npc = {0, 0} },
+      },
+      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 stairs = function()
+   local terrains = mod.class.Grid:loadList("/data/general/grids/basic.lua")
+   local g = terrains.FLOOR:clone()
+   g.name = "collapsed tower"
+   g.always_remember = true
+   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:removeAllMOs()
+   if engine.Map.tiles.nicer_tiles then
+      g.add_displays = g.add_displays or {}
+      g.add_displays[#g.add_displays+1] = mod.class.Grid.new{image="terrain/stair_up.png", z=5}
+   end
+   g.nice_tiler = nil
+   g:altered()
+   g:initGlow()
+   g.real_change = changer
+   g.change_level_check = function(self)
+      game:changeLevel(1, self.real_change(self.change_zone), {temporary_zone_shift=true, direct_switch=true})
+      self.change_level_check = nil
+      self.real_change = nil
+      self.special_minimap = colors.VIOLET
+      return true
+   end
+   return g
+end
+
+
+specialList("terrain", {
+   "/data/general/grids/water.lua",
+   "/data/general/grids/forest.lua",
+}, true)
+border = 0
+--rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+defineTile('.', "FLOOR")
+defineTile(',', "GRASS")
+defineTile('#', "HARDWALL")
+defineTile('+', "DOOR")
+defineTile('!', "DOOR_VAULT")
+defineTile(';', "FLOWER")
+defineTile('~', "DEEP_WATER")
+defineTile('#', "WALL")
+defineTile('X', "TREE")
+
+specialList("actor", {
+   "/data/general/npcs/construct.lua",
+   "/data/general/npcs/plant.lua",
+   "/data/general/npcs/skeleton.lua",
+   "/data/general/npcs/bear.lua",   
+})
+specialList("trap", {
+   "/data/general/traps/natural_forest.lua",
+})
+
+defineTile('a', "FLOOR", {random_filter={add_levels=5, tome_mod="vault"}}, nil)
+defineTile('S', "FLOOR", {random_filter={type="scroll", ego_chance=100}}, nil)
+defineTile('$', "FLOOR", {random_filter={add_levels=25, type="money"}})
+defineTile('g', "FLOOR", nil, {random_filter={add_levels=5, name="broken golem"}})
+defineTile('p', "GRASS", nil, {random_filter={add_levels=5, name="poison ivy"}})
+defineTile('v', "GRASS", nil, {random_filter={add_levels=5, name="giant venus flytrap"}})
+defineTile('s', "FLOOR", {random_filter={add_levels=5, tome_mod="vault"}}, {random_filter={add_levels=5, name="skeleton mage"}})
+defineTile('b', "FLOWER", nil, {random_filter={name="black bear"}})
+defineTile('t', "FLOOR", nil, turret(version))
+defineTile('^', "FLOOR", nil, nil, {random_filter={name="sliding rock"}})
+defineTile('<', stairs())
+
+return {
+[[,,,,,,,,;;;;;,,,,]],
+[[,,X##,,#;~~~;,,,,]],
+[[,.##,,##;~~~;##,,]],
+[[,...XXX,b;;;b###,]],
+[[,##.........####,]],
+[[,######..####.##,]],
+[[.#.#..#####...t#,]],
+[[.!...^t#.<+sp;a#,]],
+[[.#.#..##..#,;;.#,]],
+[[,#.##+#####p...#,]],
+[[,#g#p,,,^.#....#,]],
+[[,###..;;^v##+###,]],
+[[,,##.vp,,....##,,]],
+[[,,,##$$SSS$$##,,,]],
+[[,,,,#########,,,,]],
+[[,,,,,,,,,,,,,,,,,]],
+}
diff --git a/game/modules/tome/data/maps/zones/collapsed-tower.lua b/game/modules/tome/data/maps/zones/collapsed-tower.lua
new file mode 100644
index 0000000000..9297c5f92a
--- /dev/null
+++ b/game/modules/tome/data/maps/zones/collapsed-tower.lua
@@ -0,0 +1,96 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2019 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
+
+local Talents = require("engine.interface.ActorTalents")
+
+setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}
+
+local turret = function()
+   local NPC = require "mod.class.NPC"
+   local m = NPC.new{
+      type = "construct", subtype = "crystal", image="trap/trap_beam.png",
+      display = "t",
+      body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
+      life_rating = 20,
+      rank = 2,
+      inc_damage = { all = -75, },
+
+      open_door = true,
+      cut_immune = 1,
+      blind_immune = 1,
+      fear_immune = 1,
+      poison_immune = 1,
+      disease_immune = 1,
+      stone_immune = 1,
+      see_invisible = 30,
+      no_breath = 1,
+      infravision = 10,
+      never_move = 1,
+
+      autolevel = "caster",
+      level_range = {1, nil}, exp_worth = 1,
+      stats = { mag=16, con=22 },
+      size_category = 2,
+      name = "arcane crystal", color=colors.BLUE,
+      combat = { dam=resolvers.rngavg(1,2), atk=2, apr=0, dammod={str=0.4} },
+      combat_armor = 10, combat_def = 0,
+      talent_cd_reduction={[Talents.T_ELEMENTAL_BOLT]=3, },
+
+      resolvers.talents{
+         [Talents.T_ELEMENTAL_BOLT]={base=1, every=5, max=10},
+      },
+
+      ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
+   
+   }
+   return m
+end
+
+specialList("actor", {
+   "/data/general/npcs/skeleton.lua",
+})
+specialList("terrain", {
+   "/data/general/grids/water.lua",
+   "/data/general/grids/forest.lua",
+}, true)
+border = 0
+--rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+defineTile('.', "FLOOR")
+defineTile('#', "HARDWALL")
+defineTile('+', "DOOR")
+defineTile('!', "DOOR_VAULT")
+defineTile('>', "DOWN")
+
+
+defineTile('b', "FLOOR", {random_filter={add_levels=10, tome_mod="gvault"}}, {random_filter={add_levels=5, name="skeleton magus"}})
+defineTile('$', "FLOOR", {random_filter={add_levels=25, type="money"}})
+defineTile('t', "FLOOR", nil, turret())
+
+local def = {
+[[##############]],
+[[##############]],
+[[##.##.$...####]],
+[[#t.....>..####]],
+[[##.##...$.####]],
+[[#b$##$....####]],
+[[##############]],
+}
+
+return def
diff --git a/game/modules/tome/data/zones/rhaloren-camp/zone.lua b/game/modules/tome/data/zones/rhaloren-camp/zone.lua
index 83abcb6e3a..2b80656275 100644
--- a/game/modules/tome/data/zones/rhaloren-camp/zone.lua
+++ b/game/modules/tome/data/zones/rhaloren-camp/zone.lua
@@ -40,7 +40,7 @@ return {
 			class = "engine.generator.map.Roomer",
 			nb_rooms = 10,
 			rooms = {"random_room", {"money_vault",5}, {"lesser_vault",8}},
-			lesser_vaults_list = {"circle","amon-sul-crypt","rat-nest","skeleton-mage-cabal","snake-pit"},
+			lesser_vaults_list = {"circle","amon-sul-crypt","rat-nest","skeleton-mage-cabal"},
 			lite_room_chance = 100,
 			['.'] = "FLOOR",
 			['#'] = "WALL",
@@ -124,9 +124,9 @@ return {
 			['.'] = "FLOOR",
 			['+'] = "DOOR",
 
-			nb_rooms = {0,1,1,2},
+			nb_rooms = {1,1,2},
 			rooms = {"lesser_vault"},
-			lesser_vaults_list = {"circle","amon-sul-crypt","rat-nest","skeleton-mage-cabal","snake-pit"},
+			lesser_vaults_list = {"circle","amon-sul-crypt","skeleton-mage-cabal","collapsed-tower"},
 			lite_room_chance = 100,
 		},
 		actor = {
diff --git a/game/modules/tome/data/zones/trollmire/zone.lua b/game/modules/tome/data/zones/trollmire/zone.lua
index 0183415a66..11c4475c5e 100644
--- a/game/modules/tome/data/zones/trollmire/zone.lua
+++ b/game/modules/tome/data/zones/trollmire/zone.lua
@@ -61,9 +61,9 @@ return {
 			road = "GRASS_ROAD_DIRT",
 			add_road = true,
 
-			nb_rooms = {0,0,0,1},
+			nb_rooms = {0,1},
 			rooms = {"lesser_vault"},
-			lesser_vaults_list = {"honey_glade", "forest-ruined-building1", "forest-ruined-building2", "forest-ruined-building3", "snake-pit", "mage-hideout"},
+			lesser_vaults_list = {"honey_glade", "forest-ruined-building1", "forest-ruined-building2", "forest-ruined-building3", "snake-pit", "mage-hideout", "collapsed-tower"},
 			lite_room_chance = 100,
 		},
 		actor = {
@@ -189,9 +189,9 @@ return {
 				pond = {{0.6, "DEEP_WATER"}, {0.8, "DEEP_WATER"}},
 			},
 
-			nb_rooms = {0,0,0,1},
+			nb_rooms = {0,1},
 			rooms = {"lesser_vault"},
-			lesser_vaults_list = {"honey_glade", "forest-ruined-building1", "forest-ruined-building2", "forest-ruined-building3", "snake-pit", "mage-hideout"},
+			lesser_vaults_list = {"honey_glade", "forest-ruined-building1", "forest-ruined-building2", "forest-ruined-building3", "snake-pit", "mage-hideout", "collapsed-tower"},
 			lite_room_chance = 100,
 		},
 		actor = {
-- 
GitLab