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