From f3183ea6bbdd93c15c5cdb9d335d3fbd05f1166f Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sat, 28 May 2011 09:06:57 +0000 Subject: [PATCH] Six new vaults from the vault contest and a new unique for the winner, Burbs Lull git-svn-id: http://svn.net-core.org/repos/t-engine4@3482 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/modules/tome/data/general/npcs/ghoul.lua | 17 +++ .../tome/data/general/npcs/snow-giant.lua | 32 +++++ .../npc/humanoid_orc_orc_fighter.png | Bin 0 -> 8933 bytes .../npc/humanoid_orc_orc_master_assassin.png | Bin 0 -> 7813 bytes .../tome/data/maps/vaults/horror-chamber.lua | 76 ++++++++++++ .../tome/data/maps/vaults/lich-lair.lua | 56 +++++++++ .../tome/data/maps/vaults/orc-hatred.lua | 94 +++++++++++++++ .../data/maps/vaults/paladin-vs-vampire.lua | 111 ++++++++++++++++++ .../tome/data/maps/vaults/rain-of-death.lua | 52 ++++++++ .../tome/data/maps/vaults/snow-giant-camp.lua | 63 ++++++++++ .../modules/tome/data/rooms/greater_vault.lua | 2 +- game/modules/tome/data/zones/daikara/zone.lua | 3 +- .../tome/data/zones/dreadfell/grids.lua | 1 + game/modules/tome/data/zones/eruan/grids.lua | 1 + game/modules/tome/data/zones/eruan/zone.lua | 2 +- .../tome/data/zones/gorbat-pride/zone.lua | 4 +- .../tome/data/zones/grushnak-pride/zone.lua | 2 +- .../tome/data/zones/high-peak/zone.lua | 2 +- .../tome/data/zones/rak-shor-pride/zone.lua | 4 +- .../tome/data/zones/vor-pride/zone.lua | 4 +- 20 files changed, 515 insertions(+), 11 deletions(-) create mode 100644 game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_fighter.png create mode 100644 game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_master_assassin.png create mode 100644 game/modules/tome/data/maps/vaults/horror-chamber.lua create mode 100644 game/modules/tome/data/maps/vaults/lich-lair.lua create mode 100644 game/modules/tome/data/maps/vaults/orc-hatred.lua create mode 100644 game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua create mode 100644 game/modules/tome/data/maps/vaults/rain-of-death.lua create mode 100644 game/modules/tome/data/maps/vaults/snow-giant-camp.lua diff --git a/game/modules/tome/data/general/npcs/ghoul.lua b/game/modules/tome/data/general/npcs/ghoul.lua index 32bb8b4620..d449de24ad 100644 --- a/game/modules/tome/data/general/npcs/ghoul.lua +++ b/game/modules/tome/data/general/npcs/ghoul.lua @@ -119,3 +119,20 @@ newEntity{ base = "BASE_NPC_GHOUL", [Talents.T_WEAKNESS_DISEASE]={base=3, every=9, max=7}, }, } + +newEntity{ base = "BASE_NPC_GHOUL", define_as = "RISEN_CORPSE", + display = "z", color=colors.GREY, image="npc/undead_ghoul_ghoul.png", + name = "risen corpse", + desc = [[a body raised through dark magic]], + exp_worth = 1, + combat_armor = 5, combat_def = 3, + resolvers.equip{ + {type="weapon", subtype="longsword", autoreq=true}, + }, + resolvers.talents{ + [Talents.T_STUN]={base=3, every=9, max=7}, + [Talents.T_BITE_POISON]={base=3, every=9, max=7}, + [Talents.T_ROTTING_DISEASE]={base=4, every=9, max=7}, + }, +} + diff --git a/game/modules/tome/data/general/npcs/snow-giant.lua b/game/modules/tome/data/general/npcs/snow-giant.lua index 800c8593cf..1306343c6c 100644 --- a/game/modules/tome/data/general/npcs/snow-giant.lua +++ b/game/modules/tome/data/general/npcs/snow-giant.lua @@ -115,3 +115,35 @@ newEntity{ base = "BASE_NPC_SNOW_GIANT", resolvers.drops{chance=100, nb=1, {ego_chance=10} }, } + +newEntity{ base = "BASE_NPC_SNOW_GIANT", + define_as = "BURB_SNOW_GIANT", + name = "Burb the snow giant champion", color=colors.VIOLET, unique=true, + resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/giant_ice_snow_giant_chieftain.png", display_h=2, display_y=-1}}}, + desc = [[A maddened, enraged snow giant that towers over his comrades. You've heard legends mentioning this particular monstrosity; they say that when he's not rampaging around frothing at the mouth, he sits, almost childlike, engraving stories and mysterious patterns on any flat stone surface he can find.]], + level_range = {25, nil}, exp_worth = 10, + autolevel = "warriormage", + rarity = 10, + rank = 3.5, + life_rating = 25, + max_life = resolvers.rngavg(150,170), + combat_armor = 32, combat_def = 30, + on_melee_hit = {[DamageType.COLD]=resolvers.mbonus(25, 20)}, + melee_project = {[DamageType.COLD]=resolvers.mbonus(25, 20)}, + resolvers.talents{ + [Talents.T_KNOCKBACK]={base=4, every=6, max=10}, + [Talents.T_STUN]={base=5, every=6, max=10}, + [Talents.T_THROW_BOULDER]={base=4, every=6, max=10}, + [Talents.T_ICE_SHARDS]={base=4, every=6, max=8}, + [Talents.T_UTTERCOLD]={base=4, every=6, max=8}, + [Talents.T_FREEZE]={base=4, every=6, max=8}, + [Talents.T_ICE_STORM]={base=4, every=6, max=8}, + }, + make_escort = { + {type="giant", subtype="ice", number=3}, + }, + lite = 1, + ai = "tactical", + + resolvers.drops{chance=100, nb=1, {ego_chance=10} }, +} diff --git a/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_fighter.png b/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_fighter.png new file mode 100644 index 0000000000000000000000000000000000000000..af80efffc08307a5d46ac10cb2cc1761547c6b8b GIT binary patch literal 8933 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 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_master_assassin.png b/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_master_assassin.png new file mode 100644 index 0000000000000000000000000000000000000000..4006e5762dace7a4485f2d56708fe2c4bd5f876b GIT binary patch literal 7813 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 X2N*(d#ss6900000NkvXXu0mjf;Y3R# literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/maps/vaults/horror-chamber.lua b/game/modules/tome/data/maps/vaults/horror-chamber.lua new file mode 100644 index 0000000000..0b3758f6a6 --- /dev/null +++ b/game/modules/tome/data/maps/vaults/horror-chamber.lua @@ -0,0 +1,76 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011 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 + +-- Horror Chamber + +setStatusAll{no_teleport=true} + +startx = 2 +starty = 1 + +rotates = {"default", "90", "180", "270", "flipx", "flipy"} + +-- tiles +defineTile('.', "OLD_FLOOR") +defineTile('#', "OLD_WALL") +defineTile(' ', "FLOOR") +defineTile('X', "HARDWALL") +defineTile('+', "DOOR") +defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}}) + +-- monsters +defineTile('o', 'FLOOR', nil, {random_filter={subtype='orc', add_levels=10}}) +defineTile('h', 'OLD_FLOOR', nil, {random_filter={subtype='eldritch', add_levels=20}}) +defineTile('c', 'OLD_FLOOR', nil, {random_filter={subtype='temporal', add_levels=20}}) +defineTile('b', 'OLD_FLOOR', nil, {random_filter={name="bloated horror", add_levels=20}}) + +-- loots +defineTile('a', "OLD_FLOOR", {random_filter={type="armor", add_levels=10, tome_mod="vault"}}, nil) +defineTile('w', "OLD_FLOOR", {random_filter={type="weapon", add_levels=10, tome_mod="vault"}}, nil) +defineTile('r', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="vault"}}) +defineTile('t', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="gvault"}}) + +-- monster + loots +defineTile('l', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="vault"}}, {random_filter={subtype='eldritch', add_levels=20}}) +defineTile('H', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="gvault"}}, {random_filter={name="headless horror", add_levels=20}}) +defineTile('R', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="gvault"}}, {random_filter={name="radiant horror", add_levels=20}}) + +return { +[[ ]], +[[XX!XXXXXXXXXXXXXXXXX]], +[[Xo oX o oX.a.wXooX]], +[[Xo + o +....+ X]], +[[X o Xo o Xa.wwX X]], +[[X############..####X]], +[[Xhc.#h.l##h##ab#.hrX]], +[[Xr.r..h.#crc#..#.l#X]], +[[Xl#..#..#....bw..##X]], +[[Xl..h...#.####...h.X]], +[[X###..######.r..h##X]], +[[X##..##....c..#####X]], +[[X###.r..#######tltlX]], +[[X##c..####rrhr.r.rcX]], +[[X####.##lth.#..R..tX]], +[[XtHt#..#tt.rl...r.lX]], +[[Xttt##.###b....#...X]], +[[X.####.#####.##b...X]], +[[Xr..#..r.r#...###.lX]], +[[Xr.l..#...c.#..h.r#X]], +[[XXXXXXXXXXXXXXXXXXXX]], +} diff --git a/game/modules/tome/data/maps/vaults/lich-lair.lua b/game/modules/tome/data/maps/vaults/lich-lair.lua new file mode 100644 index 0000000000..76a5bbbdbb --- /dev/null +++ b/game/modules/tome/data/maps/vaults/lich-lair.lua @@ -0,0 +1,56 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011 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 + +--32 chambers +-- lich liar +setStatusAll{no_teleport=true} + +startx = 9 +starty = 16 + +rotates = {"default", "90", "180", "270", "flipx", "flipy"} + +defineTile('.', "FLOOR") +defineTile('X', "HARDWALL") +defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}}) + +defineTile('a', "FLOOR", nil, {random_filter={name="armoured skeleton warrior", add_levels=10}}) +defineTile('m', "FLOOR", nil, {random_filter={name="skeleton mage", add_levels=10}}) +defineTile('g', "FLOOR", nil, {random_filter={subtype="ghoul", add_levels=10}}) +defineTile('l', "FLOOR", nil, {random_filter={type = "undead", subtype = "lich",}}) +defineTile('$', "FLOOR", {random_filter={add_levels=20, tome_mod="gvault"}}) + +return { +[[XXXXXXXXXXXXXXXXX]], +[[Xm.ggg..g..ggg.mX]], +[[X.X...........X.X]], +[[X..a.........a..X]], +[[X...XXX.a.XXX...X]], +[[X...X.......X...X]], +[[X...X.a.l.a.X...X]], +[[Xm.aX.......Xa.mX]], +[[X...Xg..a..gX...X]], +[[X...Xg$$$$$gX...X]], +[[X...Xg$$$$$gX...X]], +[[X...XXXXXXXXX...X]], +[[Xm.a.a.a.a.a.a.mX]], +[[X.X...........X.X]], +[[Xm.............mX]], +[[XXXXXXXX!XXXXXXXX]], +} \ No newline at end of file diff --git a/game/modules/tome/data/maps/vaults/orc-hatred.lua b/game/modules/tome/data/maps/vaults/orc-hatred.lua new file mode 100644 index 0000000000..d182d0d536 --- /dev/null +++ b/game/modules/tome/data/maps/vaults/orc-hatred.lua @@ -0,0 +1,94 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011 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 + +--Hedrachi's "If You Don't Hate Orcs Now, You'll Hate Them After This" vault contest submission. + +startx = 0 +starty = 6 + +setStatusAll{no_teleport=true} +rotates = {"default", "90", "180", "270", "flipx", "flipy"} + +defineTile('u', mod.class.Grid.new{ + define_as = "DOOR_OPENING_FLOOR", + type = "floor", subtype = "trapped_floor", + name = "floor", image = "terrain/marble_floor.png", + display = '.', color_r=255, color_g=255, color_b=255, back_color=colors.DARK_GREY, + grow = "WALL", + on_move = function(self, x, y, actor, forced) + if not actor.player then return end + if forced then return end + local g = game.zone:makeEntityByName(game.level, "terrain", "DOOR_OPEN") + game.zone:addEntity(game.level, g, "terrain", x - 4, y - 4) + game.zone:addEntity(game.level, g, "terrain", x + 4, y - 4) + game.zone:addEntity(game.level, g, "terrain", x + 4, y + 4) + game.zone:addEntity(game.level, g, "terrain", x - 4, y + 4) + game.nicer_tiles:updateAround(game.level, x - 4, y - 4) + game.nicer_tiles:updateAround(game.level, x + 4, y - 4) + game.nicer_tiles:updateAround(game.level, x + 4, y + 4) + game.nicer_tiles:updateAround(game.level, x - 4, y + 4) + game.logPlayer(actor, "Something in the floor clicks ominously.") + local g = game.zone:makeEntityByName(game.level, "terrain", "FLOOR") + game.zone:addEntity(game.level, g, "terrain", x, y) + end, +}, +{random_filter={add_levels=10, tome_mod="gvault"}} +) + +defineTile('+', mod.class.Grid.new{ + define_as = "TRIGGERED_DOOR", + name = "sealed door", image = "terrain/sealed_door.png", + type = "door", subtype = 1, + display = '+', color=colors.WHITE, back_color=colors.DARK_UMBER, + notice = true, + always_remember = true, + block_sight = true, + does_block_move = true, +} +) + +defineTile('.', "FLOOR") +defineTile('#', "HARDWALL") +defineTile('X', "DOOR_VAULT") +defineTile('&', "LAVA_FLOOR") + +defineTile('a', "FLOOR", {random_filter={add_levels=10, tome_mod="gvault"}}, {random_filter={add_levels=15, subtype = "orc", name = "orc cryomancer"}}) +defineTile('b', "FLOOR", {random_filter={add_levels=10, tome_mod="gvault"}}, {random_filter={add_levels=10, subtype = "orc", name = "orc pyromancer"}}) +defineTile('o', "FLOOR", nil, {random_filter={add_levels=3, subtype = "orc"}}) +defineTile('p', "FLOOR", {random_filter={add_levels=10, type = "money"}}, {random_filter={add_levels=5, subtype = "orc", name = "orc grand master assassin"}}) +defineTile('q', "FLOOR", nil, {random_filter={add_levels=5, subtype = "orc", name = "orc archer"}}) +defineTile('r', "FLOOR", nil, {random_filter={add_levels=5, subtype = "orc", name = "icy orc wyrmic"}}) +defineTile('s', "FLOOR", nil, {random_filter={add_levels=5, subtype = "orc", name = "fiery orc wyrmic"}}) + + +return { +[[#############]], +[[#a#...q...#b#]], +[[##+.......+##]], +[[#...r.o.s...#]], +[[#...........#]], +[[#....&&&o..p#]], +[[X....&u&o..p#]], +[[#....&&&o..p#]], +[[#...........#]], +[[#...s.o..r..#]], +[[##+.......+##]], +[[#b#...q...#a#]], +[[#############]], +} diff --git a/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua b/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua new file mode 100644 index 0000000000..5cd1bc2467 --- /dev/null +++ b/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua @@ -0,0 +1,111 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011 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 + +--paladins vs. vampires! + +local Talents = require("engine.interface.ActorTalents") +setStatusAll{no_teleport=true} + + +defineTile('~', mod.class.Grid.new{ + define_as = "NECRO", + name = "lava floor", image = "terrain/lava_floor.png", + display = '.', color=colors.RED, back_color=colors.DARK_GREY, + shader = "lava", + mindam = resolvers.mbonus(5, 15), + maxdam = resolvers.mbonus(10, 30), + on_stand = function(self, x, y, who) + local DT = engine.DamageType + local dam = DT:get(DT.RETCH).projector(self, x, y, DT.RETCH, rng.range(self.mindam, self.maxdam)) + if not who.undead then game.logPlayer(who, "Dark energies course upwards through the lava.") end + if who.dead and not who.undead then + --add undead + local m = game.zone:makeEntityByName(game.level, "actor", "RISEN_CORPSE") + game.zone:addEntity(game.level, m, "actor", x, y) + end + end, +}) + +defineTile('S', "FLOOR", nil, mod.class.NPC.new{ + type = "humanoid", subtype = "human", + display = "p", color=colors.GOLD, + name = "human sun-paladin", + faction = "sunwall", hard_faction = "sunwall", + body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, + desc = [[A Human in shining plate armour.]], + level_range = {10, 50}, exp_worth = 1, + rank = 2, + size_category = 3, + autolevel = "warriormage", + ai = "dumb_talented_simple", ai_state = { talent_in=3, }, + stats = { str=12, dex=8, mag=6, con=10 }, + positive_regen = 10, + max_life = resolvers.rngavg(140,170), + combat_armor = 10, combat_def = 10, + resolvers.equip{ + {type="weapon", subtype="mace", autoreq=true}, + {type="armor", subtype="shield", autoreq=true}, + {type="armor", subtype="massive", autoreq=true}, + }, + resolvers.talents{ + [Talents.T_ARMOUR_TRAINING]=3, + [Talents.T_CHANT_OF_FORTRESS]=3, + [Talents.T_SEARING_LIGHT]=2, + [Talents.T_MARTYRDOM]=2, + [Talents.T_WEAPON_OF_LIGHT]=2, + [Talents.T_FIREBEAM]=2, + [Talents.T_WEAPON_COMBAT]=4, + [Talents.T_HEALING_LIGHT]=2, + }, + on_added = function(self) + self.energy.value = game.energy_to_act self:useTalent(self.T_WEAPON_OF_LIGHT) + self.energy.value = game.energy_to_act self:useTalent(self.T_CHANT_OF_FORTRESS) + end, +} +) + +defineTile('.', "FLOOR") +defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}}) +defineTile('+', "DOOR") +defineTile('X', "HARDWALL") +defineTile('v', "FLOOR", {random_filter={add_levels=5,tome_mod="vault"}}, {random_filter={add_levels=5, type="undead", subtype="vampire", name="vampire"}}) +defineTile('U', "FLOOR", {random_filter={add_levels=10, tome_mod="gvault"}}, {random_filter={add_levels=10, type="undead", subtype="vampire", name="master vampire"}}) +defineTile('V', "FLOOR", {random_filter={add_levels=15, tome_mod="gvault"}}, {random_filter={add_levels=15, type="undead", subtype="vampire", name="elder vampire"}}) +defineTile('L', "FLOOR", {random_filter={add_levels=20, tome_mod="gvault"}}, {random_filter={add_levels=20, type="undead", subtype="vampire", name="vampire lord"}}) +defineTile('W', "FLOOR", {random_filter={add_levels=15, tome_mod="gvault"}}, {random_filter={add_levels=15, type="undead", subtype="wight", name="grave wight"}}) +startx = 0 +starty = 6 + +rotates = {"default", "90", "180", "270", "flipx", "flipy"} + +return { +[[XXXXXXXXXXXXXXXXXXXXXXXXXXXXX]], +[[X....X......................X]], +[[X....X..~.~..v~..~.V........X]], +[[X....X....~..~.~..~..XXXXX..X]], +[[X....X..~.v.~...~...XXXXXX..X]], +[[X..S.X..~.~~.v~.~..XXXXXXX..X]], +[[X..S.+.~..~..~....LXXXXXXX..X]], +[[!....+.~.~.~.v.~...XXXXXXX..X]], +[[X..S.+..~..~.~.v.~..XXXXXX..X]], +[[X..S.X...~..~..~..~..XXXXX..X]], +[[X....X.~.~.~......~..W......X]], +[[X....X.......~.~..V.........X]], +[[XXXXXXXXXXXXXXXXXXXXXXXXXXXXX]], +} \ No newline at end of file diff --git a/game/modules/tome/data/maps/vaults/rain-of-death.lua b/game/modules/tome/data/maps/vaults/rain-of-death.lua new file mode 100644 index 0000000000..64c17515be --- /dev/null +++ b/game/modules/tome/data/maps/vaults/rain-of-death.lua @@ -0,0 +1,52 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011 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 + +-- Rain of Death + +rotates = {"default", "90", "180", "270", "flipx", "flipy"} + +defineTile('.', "FLOOR") +defineTile('X', "HARDWALL") +defineTile('v', "LAVA") +defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}}) + +-- All a are Skeleton Master Archer +defineTile('a', "FLOOR", nil, {random_filter={name="skeleton master archer"}}) + +defineTile('$', "FLOOR", {random_filter={add_levels=20, tome_mod="gvault"}}) +defineTile('*', "FLOOR", {random_filter={add_levels=20, tome_mod="uvault"}}) + +return { +[[XXXXXXX!!XXXXXXX]], +[[X..v.av..v.av.$X]], +[[X..vvvv..vvvv..X]], +[[Xvv..........vvX]], +[[X.v..........v.X]], +[[Xav..........vaX]], +[[Xvv..........vvX]], +[[!......$X......!]], +[[!......X*......!]], +[[Xvv..........vvX]], +[[X.v..........vaX]], +[[Xav..........v.X]], +[[Xvv..........vvX]], +[[X..vvvv..vvvv..X]], +[[X$.va.v..va.v..X]], +[[XXXXXXX!!XXXXXXX]], +} diff --git a/game/modules/tome/data/maps/vaults/snow-giant-camp.lua b/game/modules/tome/data/maps/vaults/snow-giant-camp.lua new file mode 100644 index 0000000000..5a9bf6becb --- /dev/null +++ b/game/modules/tome/data/maps/vaults/snow-giant-camp.lua @@ -0,0 +1,63 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011 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 + +-- Snow Giant Camp +setStatusAll{no_teleport=true} +rotates = {"default", "90", "180", "270", "flipx", "flipy"} + +defineTile('.', "FLOOR") +defineTile(',', "ROCKY_GROUND") +defineTile('#', "HARDWALL") +defineTile('X', "MOUNTAIN_WALL") +defineTile('+', "DOOR") +defineTile('!', "DOOR_VAULT") + +defineTile('$', "FLOOR", {random_filter={add_levels=10, tome_mod="vault"}}) +defineTile('?', "FLOOR", {random_filter={add_levels=5, tome_mod="vault"}}, {random_filter={add_levels=5, type="giant", subtype="ice"}}) +defineTile('P', "ROCKY_GROUND", nil, {random_filter={name="snow giant"}}) +defineTile('T', "FLOOR", nil, {random_filter={add_levels=5, name="snow giant thunderer"}}) +defineTile('B', "FLOOR", nil, {random_filter={add_levels=5, name="snow giant boulder thrower"}}) +defineTile('C', "FLOOR", nil, {random_filter={add_levels=8, name="snow giant chieftain"}}) +defineTile('M', "FLOOR", nil, {random_filter={add_levels=8, name="snow giant chieftain", random_boss={nb_classes=1, rank=3.5, loot_quantity = 2}}}) + +startx = 12 +starty = 19 + +return { +[[XX###############XXXXXXXX]], +[[X,#...#$$$$$#...#XXXXXXXX]], +[[X,#.....CMC.....#,,XXXXXX]], +[[X,#BB.#.....#.TT#,,,,XXXX]], +[[X,#####..C..#####,,,,,,XX]], +[[X,,,,,###!###,,,,,,,,,,XX]], +[[X,#,,,,,,,,,,,,,,###,,,XX]], +[[X###,,,,,,,,,,,,##?##,,,X]], +[[X#?+,,,,,,,,,P,,,#+#,,,,X]], +[[X###,,#,,,,P,,,,,,,,,,,,X]], +[[X,#,,###,,,,,,P,,,,,#,,,X]], +[[X,,,,#?+,,P,,,,,,,,###,,X]], +[[X,,,,###,,,,P,,,,,,+?#,,X]], +[[X,,,,,#,,,,,,,,,,,,###,,X]], +[[XX,,,,,,,,,,,,,,,,,,#,,XX]], +[[XX,,,,#+#,,,,,,,,,,,,,,XX]], +[[XXX,,##?##,,,,,,,,,,,,XXX]], +[[XXXXXX###,,,,,,,,,,,,XXXX]], +[[XXXXXXXXXX,,,,,,,XXXXXXXX]], +[[XXXXXXXXXXXX,XXXXXXXXXXXX]], +} diff --git a/game/modules/tome/data/rooms/greater_vault.lua b/game/modules/tome/data/rooms/greater_vault.lua index f457c0ca21..918a77f524 100644 --- a/game/modules/tome/data/rooms/greater_vault.lua +++ b/game/modules/tome/data/rooms/greater_vault.lua @@ -21,7 +21,7 @@ local max_w, max_h = 50, 50 local list = { "double-t", "crypt", "treasure1", "diggers", "hillbert_curve", "quiet", "lightning-vault", "water-vault", "32-chambers", "demon-nest-1", "demon-nest-2", "demon-nest-3", "frost-dragon-lair", "greater-money-vault", - "trapped-hexagon", "yin-yang", "zigzag-chambers", + "trapped-hexagon", "yin-yang", "zigzag-chambers", "rain-of-death", "paladin-vs-vampire", "orc-hatred", "lich-lair", } return function(gen, id, lev, old_lev) diff --git a/game/modules/tome/data/zones/daikara/zone.lua b/game/modules/tome/data/zones/daikara/zone.lua index e88a4fa553..cbc991c6ca 100644 --- a/game/modules/tome/data/zones/daikara/zone.lua +++ b/game/modules/tome/data/zones/daikara/zone.lua @@ -37,8 +37,9 @@ return { class = "engine.generator.map.Roomer", nb_rooms = 10, edge_entrances = {2,8}, - rooms = {"forest_clearing","rocky_snowy_trees"}, + rooms = {"forest_clearing", "rocky_snowy_trees", "lesser_vault"}, rooms_config = {forest_clearing={pit_chance=5, filters={{}}}}, + lesser_vaults_list = {"snow-giant-camp"}, ['.'] = "ROCKY_GROUND", ['T'] = "ROCKY_SNOWY_TREE", ['#'] = "MOUNTAIN_WALL", diff --git a/game/modules/tome/data/zones/dreadfell/grids.lua b/game/modules/tome/data/zones/dreadfell/grids.lua index f89fdc86cb..12351c3734 100644 --- a/game/modules/tome/data/zones/dreadfell/grids.lua +++ b/game/modules/tome/data/zones/dreadfell/grids.lua @@ -21,6 +21,7 @@ load("/data/general/grids/basic.lua") load("/data/general/grids/water.lua") load("/data/general/grids/forest.lua") load("/data/general/grids/lava.lua") +load("/data/general/grids/mountain.lua") newEntity{ define_as = "LORE_NOTE", diff --git a/game/modules/tome/data/zones/eruan/grids.lua b/game/modules/tome/data/zones/eruan/grids.lua index 88b148b5f6..b314495c1b 100644 --- a/game/modules/tome/data/zones/eruan/grids.lua +++ b/game/modules/tome/data/zones/eruan/grids.lua @@ -20,6 +20,7 @@ load("/data/general/grids/basic.lua") load("/data/general/grids/water.lua") load("/data/general/grids/forest.lua") +load("/data/general/grids/lava.lua") load("/data/general/grids/sand.lua") load("/data/general/grids/mountain.lua") diff --git a/game/modules/tome/data/zones/eruan/zone.lua b/game/modules/tome/data/zones/eruan/zone.lua index 3f5d38183b..c84a0b0f91 100644 --- a/game/modules/tome/data/zones/eruan/zone.lua +++ b/game/modules/tome/data/zones/eruan/zone.lua @@ -51,7 +51,7 @@ return { nb_rooms = {0,0,0,0,1}, rooms = {"greater_vault"}, - greater_vaults_list = {"dragon_lair", "lava_island"}, + greater_vaults_list = {"dragon_lair", "lava_island", "bandit-fortress", "horror-chamber"}, lite_room_chance = 100, }, actor = { diff --git a/game/modules/tome/data/zones/gorbat-pride/zone.lua b/game/modules/tome/data/zones/gorbat-pride/zone.lua index 3c76187b52..7631f44dc1 100644 --- a/game/modules/tome/data/zones/gorbat-pride/zone.lua +++ b/game/modules/tome/data/zones/gorbat-pride/zone.lua @@ -54,7 +54,7 @@ return { nb_rooms = {0,0,0,1}, rooms = {"lesser_vault"}, - lesser_vaults_list = {"orc-armoury", "double-t", "dragon_lair", "hostel"}, + lesser_vaults_list = {"orc-armoury", "double-t", "dragon_lair", "hostel", "horror-chamber"}, lite_room_chance = 100, }, }, @@ -69,7 +69,7 @@ return { }, }, post_process = function(level) - for uid, e in pairs(level.entities) do e.faction="orc-pride" end + for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end end, levels = { diff --git a/game/modules/tome/data/zones/grushnak-pride/zone.lua b/game/modules/tome/data/zones/grushnak-pride/zone.lua index 0ac9cca262..ae066cb17a 100644 --- a/game/modules/tome/data/zones/grushnak-pride/zone.lua +++ b/game/modules/tome/data/zones/grushnak-pride/zone.lua @@ -70,7 +70,7 @@ return { game:placeRandomLoreObject("GARKUL_HISTORY"..(level.level/2)) end - for uid, e in pairs(level.entities) do e.faction="orc-pride" end + for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end end, levels = { diff --git a/game/modules/tome/data/zones/high-peak/zone.lua b/game/modules/tome/data/zones/high-peak/zone.lua index 5d10b2c878..4edc27fd54 100644 --- a/game/modules/tome/data/zones/high-peak/zone.lua +++ b/game/modules/tome/data/zones/high-peak/zone.lua @@ -74,7 +74,7 @@ return { }, post_process = function(level) game.player:grantQuest("high-peak") - for uid, e in pairs(level.entities) do e.faction="sorcerers" e.never_anger = true end + for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "sorcerers" end -- if we failed at charred scar (or did not do it at all) the gate of morning is destroyed and Aeryn turned to the service of the sorcerers if level.level == 15 then diff --git a/game/modules/tome/data/zones/rak-shor-pride/zone.lua b/game/modules/tome/data/zones/rak-shor-pride/zone.lua index 70f009bd24..5b2a2df340 100644 --- a/game/modules/tome/data/zones/rak-shor-pride/zone.lua +++ b/game/modules/tome/data/zones/rak-shor-pride/zone.lua @@ -54,7 +54,7 @@ return { nb_rooms = {0,0,0,1}, rooms = {"lesser_vault"}, - lesser_vaults_list = {"orc-armoury", "double-t", "crypt", "hostel"}, + lesser_vaults_list = {"orc-armoury", "double-t", "crypt", "hostel", "horror-chamber"}, lite_room_chance = 100, }, }, @@ -69,7 +69,7 @@ return { }, }, post_process = function(level) - for uid, e in pairs(level.entities) do e.faction="orc-pride" end + for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end end, levels = { diff --git a/game/modules/tome/data/zones/vor-pride/zone.lua b/game/modules/tome/data/zones/vor-pride/zone.lua index cb8b1d5a42..88bf066455 100644 --- a/game/modules/tome/data/zones/vor-pride/zone.lua +++ b/game/modules/tome/data/zones/vor-pride/zone.lua @@ -54,7 +54,7 @@ return { nb_rooms = {0,0,0,1}, rooms = {"lesser_vault"}, - lesser_vaults_list = {"orc-armoury", "double-t", "circle", "hostel", "orc-necromancer"}, + lesser_vaults_list = {"orc-armoury", "double-t", "circle", "hostel", "orc-necromancer", "horror-chamber"}, lite_room_chance = 100, }, }, @@ -72,7 +72,7 @@ return { -- Place a lore note on each level game:placeRandomLoreObject("ORC_HISTORY"..level.level) - for uid, e in pairs(level.entities) do e.faction="orc-pride" end + for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end end, levels = { -- GitLab