Vault Contest v2

All new ideas for the upcoming releases of ToME 4.x.x should be discussed here

Moderator: Moderator

Message
Author
nsrr
Sher'Tul
Posts: 1126
Joined: Mon Sep 21, 2015 8:45 pm
Location: Middle of Nowhere

Re: Vault Contest v2

#16 Post by nsrr »

Circle Vault revamp. Keeps the same rules (same amount of loot, same amount of mobs of each difficulty, only one mob per room), keeps the same exterior shape, adds 4 new interior layouts, and retains the original layout as an option, for a total of 5 variations.

Code: Select all

--circle vault variety
--keep the outside shape the same
--keep the loot and mob levels the same
--keep the "one mob per room" rule
--add a few new versions with different interior layouts

--name="circle_new"

setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}
border = 0
defineTile('.', "FLOOR")
defineTile(',', data.floor or data['.'] or "FLOOR")
defineTile('X', "HARDWALL")
defineTile('!', "DOOR_VAULT")
defineTile('D', "DOOR")
defineTile('1', "FLOOR", {random_filter={add_levels=15, tome_mod="vault"}}, {random_filter={add_levels=20}})
defineTile('2', "FLOOR", {random_filter={add_levels=12, tome_mod="vault"}}, {random_filter={add_levels=17}})
defineTile('3', "FLOOR", {random_filter={add_levels=5}}, nil)

rotates = {"default", "90", "180", "270", "flipx", "flipy"}

startx = 5
starty = 1
local version = rng.range(1, 5)
if version == 1 then
return {
[[,,,,,,,,,,,]],
[[,,,XX!XX,,,]],
[[,,XX.2.XX,,]],
[[,XXXDXDXXX,]],
[[,X...X...X,]],
[[,X3.3X3.3X,]],
[[,XDXDXDXDX,]],
[[,X2X.2.X2X,]],
[[,XXXDXDXXX,]],
[[,XX..X..XX,]],
[[,X...X...X,]],
[[,X3.3X3.3X,]],
[[,XXXDXDXXX,]],
[[,,XX.1.XX,,]],
[[,,,XXXXX,,,]],
[[,,,,,,,,,,,]],
}
elseif version == 2 then
return {
[[,,,,,,,,,,,]],
[[,,,XX!XX,,,]],
[[,,XX.2.XX,,]],
[[,XXXXDXXXX,]],
[[,X3X3.3X3X,]],
[[,X.X...X.X,]],
[[,XDXXDXXDX,]],
[[,X2D.2.D2X,]],
[[,XDXXDXXDX,]],
[[,X.X...X.X,]],
[[,X3X3.3X3X,]],
[[,XXXX.XXXX,]],
[[,XXXXDXXXX,]],
[[,,XX.1.XX,,]],
[[,,,XXXXX,,,]],
[[,,,,,,,,,,,]],
}
elseif version == 3 then
return {
[[,,,,,,,,,,,]],
[[,,,XX!XX,,,]],
[[,,XXX2XXX,,]],
[[,XX3D.D3XX,]],
[[,XXDXXXDXX,]],
[[,X..3X3..X,]],
[[,XXDXXXDXX,]],
[[,X..D2D..X,]],
[[,XXXXDXXXX,]],
[[,X32X2X23X,]],
[[,XXDXDXDXX,]],
[[,X3.....3X,]],
[[,XXXXDXXXX,]],
[[,,XX.1.XX,,]],
[[,,,XXXXX,,,]],
[[,,,,,,,,,,,]],
}
elseif version == 4 then
return {
[[,,,,,,,,,,,]],
[[,,,XX!XX,,,]],
[[,,XX...XX,,]],
[[,XXX.2.XXX,]],
[[,X2D...D2X,]],
[[,X.XXDXX.X,]],
[[,X.X...X.X,]],
[[,X.X.2.X.X,]],
[[,X3X...X3X,]],
[[,X3X...X3X,]],
[[,X3XXDXX3X,]],
[[,X3X...X3X,]],
[[,XXX.1.XXX,]],
[[,,XX...XX,,]],
[[,,,XXXXX,,,]],
[[,,,,,,,,,,,]],
}
else
return {
[[,,,,,,,,,,,]],
[[,,,XX!XX,,,]],
[[,,XXX2XXX,,]],
[[,XXXX.XXXX,]],
[[,X33X.X33X,]],
[[,XDXXDXXDX,]],
[[,X2D...D2X,]],
[[,XDXXDXXDX,]],
[[,X.X...X.X,]],
[[,X.X.2.X.X,]],
[[,X.XXDXX.X,]],
[[,X3.D1D.3X,]],
[[,XXXX.XXXX,]],
[[,,XX3.3XX,,]],
[[,,,XXXXX,,,]],
[[,,,,,,,,,,,]],
}
end

FuzzyCuddlyBunny
Wayist
Posts: 20
Joined: Sat Feb 25, 2017 4:05 am

Re: Vault Contest v2

#17 Post by FuzzyCuddlyBunny »

Update: compiled current submissions and added them to a merge request. Rest assured both living weapons and a variant on helminthauge's beam vault will get added in the future, but I need to edit and test them a bit so I'll push them off until a second round of vaults. This way some of the simpler early ones can hopefully make it in time for 1.6.1 :D.

I give the prize for best vault so far to starsapphire's sleeping dragons. Unfortunately there's no actual prize to give, so you'll have to make do with my praise :wink:. Please do keep them coming. It's great to see new ideas getting added and don't know about everyone else, but I find it fun to make them!

nsrr
Sher'Tul
Posts: 1126
Joined: Mon Sep 21, 2015 8:45 pm
Location: Middle of Nowhere

Re: Vault Contest v2

#18 Post by nsrr »

Amon-Sul Crypt (a.k.a The Armored Skeleton Warrior Vault) revamp. Four variations, adds different undead with different layouts. Classic skeleton warrior vault, skeleton mages, skeleton archers, and ghouls. Traps have been removed and one extra mob has been added. Additionally, changes the outside border tiles so they will match the zone floor, allowing the vault to be added to more zones. Probably anywhere is fine, I cleared them all in Trollmire with a level 1 berserker on normal. Warrior and Archer were probably the toughest. Now that manathrust is a proper bolt at low levels, the mages' damage is actually very dogeable. Ghouls were the easiest, but Vitality helped a lot with that, might not be the case with other classes.

Code: Select all

-- amon-sul-crypt revamp:
--remove traps, add a mob
--remove the bottom portion with the random walls that seems to serve no purpose
--add new variations with new layouts and new undeads, same loot and approximate challenge
--give a level-matching border like Circle, can add it to more zones


setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}

specialList("actor", {
	"/data/general/npcs/skeleton.lua",
	"/data/general/npcs/ghoul.lua",
})
border = 0
defineTile('.', "FLOOR")
defineTile(',', data.floor or data['.'] or "FLOOR")
defineTile('#', "WALL")
defineTile('X', "HARDWALL")
defineTile('!', "DOOR_VAULT")
defineTile('D', "DOOR")

rotates = {"default", "90", "180", "270", "flipx", "flipy"}
startx = 4
starty = 2

local version = rng.range(1, 4)
if version == 1 then -- warriors(more or less the original)
defineTile('S', "FLOOR", {random_filter={add_levels=4, tome_mod="vault"}}, {random_filter={name="skeleton warrior", add_levels=2}})
defineTile('A', "FLOOR", {random_filter={type="armor", tome_mod="vault", add_levels=5}}, {random_filter={name="skeleton warrior", add_levels=6}})
defineTile('G', "FLOOR", nil, {random_filter={name="armoured skeleton warrior" , add_levels=4}})
return {
[[,,,,,,,,,]],
[[,,,X.X,,,]],
[[,,XX!XX,,]],
[[,XXX.XXX,]],
[[,XSD.DSX,]],
[[,XXXGXXX,]],
[[,XSD.DAX,]],
[[,XXX.XXX,]],
[[,,XX!XX,,]],
[[,,,X.X,,,]],
[[,,,,,,,,,]],
}
elseif version == 2 then -- mages
defineTile('S', "FLOOR", {random_filter={add_levels=4, tome_mod="vault"}}, {random_filter={name="skeleton mage", add_levels=2}})
defineTile('A', "FLOOR", {random_filter={type="armor", tome_mod="vault", add_levels=5}}, {random_filter={name="skeleton magus", add_levels=6}})
defineTile('G', "FLOOR", nil, {random_filter={name="skeleton mage" , add_levels=4}})
return {
[[,,,,,,,,,]],
[[,,,X.X,,,]],
[[,,XX!XX,,]],
[[,XXX.XXX,]],
[[,XSX.XSX,]],
[[,X.DAD.X,]],
[[,XSX.XGX,]],
[[,XXX.XXX,]],
[[,,XX!XX,,]],
[[,,,X.X,,,]],
[[,,,,,,,,,]],
}
elseif version == 3 then -- ghouls
defineTile('S', "FLOOR", {random_filter={add_levels=4, tome_mod="vault"}}, {random_filter={name="ghoul", add_levels=2}})
defineTile('A', "FLOOR", {random_filter={type="armor", tome_mod="vault", add_levels=5}}, {random_filter={name="ghast", add_levels=6}})
defineTile('G', "FLOOR", nil, {random_filter={name="ghoul" , add_levels=4}})
return {
[[,,,,,,,,,]],
[[,,,X.X,,,]],
[[,,XX!XX,,]],
[[,XX..,XX,]],
[[,XS..XSX,]],
[[,X,.A,,X,]],
[[,XSX..GX,]],
[[,XX..,XX,]],
[[,,XX!XX,,]],
[[,,,X.X,,,]],
[[,,,,,,,,,]],
}
else -- archers
defineTile('S', "FLOOR", {random_filter={add_levels=4, tome_mod="vault"}}, {random_filter={name="skeleton archer", add_levels=2}})
defineTile('A', "FLOOR", {random_filter={type="armor", tome_mod="vault", add_levels=5}}, {random_filter={name="skeleton master archer", add_levels=6}})
defineTile('G', "FLOOR", nil, {random_filter={name="skeleton archer" , add_levels=4}})
return {
[[,,,,,,,,,]],
[[,,,X.X,,,]],
[[,,XX!XX,,]],
[[,XX..XXX,]],
[[,X.SXXGX,]],
[[,XX.A.XX,]],
[[,XSXXS.X,]],
[[,XXX..XX,]],
[[,,XX!XX,,]],
[[,,,X.X,,,]],
[[,,,,,,,,,]],
}
end

nsrr
Sher'Tul
Posts: 1126
Joined: Mon Sep 21, 2015 8:45 pm
Location: Middle of Nowhere

Re: Vault Contest v2

#19 Post by nsrr »

Troll Fortress revamp. Adds a few more weak trolls, buffs a few trolls with added levels, adds a couple of drops that are not guaranteed inscriptions, and adds two new layouts: a ruined version and a fortified version. All versions have the same amount and quality of loot and mobs.

Code: Select all

-- revamp:
-- buff the T trolls with added levels
-- add a few more t trolls
-- add a couple random loots besides the inscriptions
--two new layouts

setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}
specialList("actor", {
	"/data/general/npcs/troll.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(',', "GRASS")
defineTile('~', "DEEP_WATER")
defineTile('#', "HARDWALL")
defineTile('X', "TREE")
defineTile('+', "DOOR")

defineTile('T', "FLOOR", {random_filter={type="scroll", ego_chance=25}}, {random_filter={name="forest troll", add_levels=10}})
defineTile('t', "FLOOR", nil, {random_filter={name="forest troll"}})
defineTile('$', "FLOOR", {random_filter={type="scroll", ego_chance=25}})
defineTile('*', "FLOOR", {random_filter={mod="vault", add_levels=5}})
startx, starty = 0, 9

local version = rng.range(1, 3)
if version == 1 then
return { -- original
[[,,,,,,,,,,,,,,,,,,,,,,]],
[[,,,XX,,X,,,,,,,,,,X,,,]],
[[,,X~~~~~~~,,~~~~~XXX,,]],
[[,XX~#####~,,~#####~,,,]],
[[,XX~#...#~~~~#..*#~,X,]],
[[,XX~#.t.######.T.#~,,,]],
[[,,X~#...#.t..+...#~,X,]],
[[,XX~###+#..t.#####~,,,]],
[[,XX~~~#....#####~~~,,,]],
[[,,,..t+....#$.$#~,,,X,]],
[[,,,..t+....+.$T#~,,,X,]],
[[,XX~~~#....#####~~~,X,]],
[[,,X~###+#..t.#####~,X,]],
[[,,X~#...#.t..+...#~,X,]],
[[,,X~#.T.######.t.#~,,,]],
[[,XX~#*..#~~~~#...#~,,,]],
[[,,X~#####~,,~#####~,,,]],
[[,,X~~~~~~~,,~~~~~~~,,,]],
[[,,XXX,X,,XXX,X,,XXX,,,]],
[[,,,,,,,,,,,,,,,,,,,,,,]],
}
elseif version == 2 then
return { -- ruined
[[,,,,,,,,,,,,,,,,,,,,,,]],
[[,,XXXXXXXXXXXXXXXXXX,,]],
[[,,X~~~~~~~,,~~~~~~~XX,]],
[[,XX~#####~,,~#####~,X,]],
[[,XX~#$.t#~~~~#.*.#~XX,]],
[[,XX~#,t.#.#~.#.T.#~X,,]],
[[,,X~#t..#....+.,,#~XX,]],
[[,XX~###+#..#.#####~,X,]],
[[,XX~~#...#....X.~~~,X,]],
[[,,,.~~.,,..X.t..~~,,X,]],
[[,,,.~t.#..T.,#.~~~~,X,]],
[[,XX~~~..,.,...~~~~~,X,]],
[[,,X~###+#..X.#####~,X,]],
[[,,X~#*.t#....+,,$#~XX,]],
[[,,X~#.T.#..#.#.t.#~X,,]],
[[,XX~#t.,#~~#~#$..#~X,,]],
[[,,X~#####~~~~#####~X,,]],
[[,,X~~~~~~~,,~~~~~~~X,,]],
[[,,XXXXXXXXXXXXXXXXXX,,]],
[[,,,,,,,,,,,,,,,,,,,,,,]],
}
else
return { -- fortified
[[,,,,,,,,,,,,,,,,,,,,,,]],
[[,,,XX,,X,,,,,,,,,,X,,,]],
[[,,X~~~~~~~,,~~~~~XXX,,]],
[[,XX~#####~~~~#####~,,,]],
[[,XX~#...######.$.#~,X,]],
[[,XX~#.T....#..t..#~,,,]],
[[,,X~#....#.#.#.t.#~,X,]],
[[,XX~###..#.#.#.###~,,,]],
[[,XX~~~#..#.#.#.#~~~,,,]],
[[,,,...+t.#.#.#.#~,,,X,]],
[[,,,...+t.#.#T#.#~,,,X,]],
[[,XX~~~#.##.#.#.#~~~,X,]],
[[,,X~#####....#.###~,X,]],
[[,,X~#$.#######t..#~,X,]],
[[,,X~#T.+..tt..t..#~,,,]],
[[,XX~#**#######..$#~,,,]],
[[,,X~#####~~~~#####~,,,]],
[[,,X~~~~~~~,,~~~~~~~,,,]],
[[,,XXX,X,,XXX,X,,XXX,,,]],
[[,,,,,,,,,,,,,,,,,,,,,,]],
}
end

nsrr
Sher'Tul
Posts: 1126
Joined: Mon Sep 21, 2015 8:45 pm
Location: Middle of Nowhere

Re: Vault Contest v2

#20 Post by nsrr »

Thief Hideout revamp. Removes dig walls, adds doors. Randomizes the thieves, buffs them and adds more of them. Adds an actual 'thief', and adds one 'boss' randomly chosen from: assassin, rogue sapper and shadowblade. Improved loot. Adds two new layouts.

Code: Select all

-- revamp:
-- randomize mooks, add a few more, buff them a bit
-- pick a random special thief type as the 'boss' mob for the vault
-- remove dig walls
-- improve drops

setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}
specialList("actor", {
	"/data/general/npcs/thieve.lua",
})
specialList("terrain", {
	"/data/general/grids/forest.lua",
}, true)
border = 0
rotates = {"default", "90", "180", "270", "flipx", "flipy"}

defineTile('.', "FLOOR")
defineTile(',', data.floor or data['.'] or "GRASS")
defineTile('#', "HARDWALL")
defineTile('+', "DOOR")
defineTile('!', "DOOR_VAULT")
local mobs = {
	"bandit",
	"rogue",
	"cutpurse",
}
local bosses = {
	"rogue sapper",
	"assassin",
	"shadowblade"
}

local boss = rng.tableRemove(bosses)

defineTile('1', "FLOOR", nil, {random_filter={name=mobs[rng.range(0, #mobs)], add_levels=4}})
defineTile('2', "FLOOR", nil, {random_filter={name=mobs[rng.range(0, #mobs)], add_levels=5}})
defineTile('3', "FLOOR", nil, {random_filter={name=mobs[rng.range(0, #mobs)], add_levels=6}})
defineTile('B', "FLOOR", nil, {random_filter={name=boss,  add_levels=boss=="shadowblade" and 0 or 12}})
defineTile('T', "FLOOR", nil, {random_filter={name="thief", add_levels=10}})

defineTile('&', "FLOOR", {random_filter={type="scroll", ego_chance=25}})
defineTile('$', "FLOOR", {random_filter={add_levels=15, type="money"}})
defineTile('*', "FLOOR", {random_filter={type="gem"}})
defineTile('%', "FLOOR", {random_filter={mod="gvault", type="armor", add_levels=8}})
defineTile('^', "FLOOR", {random_filter={mod="vault", type="weapon", add_levels=8}})
--startx, starty = 10, 0

local version = rng.range(1, 3)
if version == 1 then
return {
[[,,,,,,,,,,,,,,]],
[[,#######,,,,,,]],
[[,#%#$$$#,,,,,,]],
[[,#^#$*$#,,,,,,]],
[[,#*#$$$#,,,,,,]],
[[,#+##+###!###,]],
[[,#B^#2#1...2#,]],
[[,#&3+1#.312.#,]],
[[,####.#..3..#,]],
[[,#13#.#.....#,]],
[[,#*2+.+..T..#,]],
[[,############,]],
[[,,,,,,,,,,,,,,]],
}
elseif version == 2 then
return {
[[,,,,,,,,,,,,,,]],
[[,,,,,,,,,,,,,,]],
[[,,,,,,,,,,,,,,]],
[[,###########,,]],
[[,.!..213$$.#,,]],
[[,##+######+#,,]],
[[,#..#*B*#12#,,]],
[[,#..#132#3$#,,]],
[[,#..#+#+####,,]],
[[,#12..#$$&^#,,]],
[[,#3T$*#$$%^#,,]],
[[,###########,,]],
[[,,,,,,,,,,,,,,]],
}
else
return {
[[,,,,,,,,,,,,,,]],
[[,#!#####,,,,,,]],
[[,#.#$*$#,,,,,,]],
[[,#.#2$3#,,,,,,]],
[[,#1#.1.#,,,,,,]],
[[,#+#+#+######,]],
[[,#...#.23...#,]],
[[,#.23##1..B2#,]],
[[,#.1T*#...3*#,]],
[[,####+###+###,]],
[[,#$$$$#%*^^&#,]],
[[,############,]],
[[,,,,,,,,,,,,,,]],
}
end

nsrr
Sher'Tul
Posts: 1126
Joined: Mon Sep 21, 2015 8:45 pm
Location: Middle of Nowhere

Re: Vault Contest v2

#21 Post by nsrr »

Mage Hideout revamp. Adds mob variety, varies and improves loot.

Code: Select all

-- 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

setStatusAll{no_teleport=true, no_vaulted=true}
border = 0 -- override normal vault border
roomCheck(function(room, zone, level, map)
	return resolvers.current_level <= 20
end)
specialList("actor", {
	"/data/general/npcs/skeleton.lua",
	"/data/general/npcs/troll.lua",
	"/data/general/npcs/thieve.lua",
	"/data/general/npcs/spider.lua",
	"/data/general/npcs/ghoul.lua",
})
specialList("terrain", {
	"/data/general/grids/forest.lua",
}, true)
local mobs = {
	"skeleton mage",
	"skeleton magus",
	"cave troll",
	"thief",
	"spitting spider",
	"weaver young",
	"ghast",
}
local mob = rng.tableRemove(mobs)
local Floor = data.floor or data['.'] or "GRASS"
rotates = {"default", "90", "180", "270", "flipx", "flipy"}
defineTile(',', Floor)
defineTile('#', "HARDWALL")
defineTile('X', data.wall or data['#'] or "TREE")
defineTile('+', "DOOR")
defineTile('s', Floor, nil, {random_filter={name=mob, add_levels=6}})
defineTile('$', "FLOOR", {random_filter={type="scroll", add_levels=5, ego_chance=60}}, nil)
defineTile('*', "FLOOR", {random_filter={mod="vault", add_levels=5, ego_chance=30}}, nil)
startx = 1
starty = 7

return {
[[XXXXXXXXXXX]],
[[X,,X,,,X,X,]],
[[X,X,,,,,,XX]],
[[X,X,,s####X]],
[[X,X,,,#*$#X]],
[[X,XX,,+$*#X]],
[[X,,XX,####X]],
[[X,,,XXXXXXX]],
}

nsrr
Sher'Tul
Posts: 1126
Joined: Mon Sep 21, 2015 8:45 pm
Location: Middle of Nowhere

Re: Vault Contest v2

#22 Post by nsrr »

Mage Cabal revamp. Adds new mob types to choose from, reduces the number of inscription drops and improves quality, adds two armor drops. Weapon and armor drops change to match the mob chosen (mages still haves staves and the armor is a robe, thieves have leather armor and daggers or slings, etc).

Code: Select all

--revamp
--add new mobs types, slightly buff mobs
--add armor loot as well as weapon loot
--theme weapon and armor drops based on mob type
--reduce number of inscriptions to add another weapon and armor drop, improve inscriptions quality

setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}
roomCheck(function(room, zone, level, map)
	return resolvers.current_level >= 5 and resolvers.current_level <= 25
end)
specialList("actor", {
	"/data/general/npcs/skeleton.lua",
	"/data/general/npcs/thieve.lua",
	"/data/general/npcs/horror.lua",
})
specialList("terrain", {
	"/data/general/grids/forest.lua",
}, true)
local mobs = {
	"skeleton mage",
	"skeleton warrior",
	"skeleton archer",
	"thief",
	"bloated horror",
}
local mob = rng.tableRemove(mobs)

local weapon = "staff"
if mob == "skeleton warrior" then weapon = rng.percent(50) and "waraxe" or "battleaxe"
elseif	mob == "skeleton archer" then weapon = "longbow"
elseif	mob == "thief" then weapon = rng.percent(50) and "dagger" or "sling"
elseif	mob == "bloated horror" then weapon = "mindstar"
end

local armor = "cloth"
if mob == "skeleton warrior" then armor = rng.percent(50) and "shield" or "massive"
elseif	mob == "skeleton archer" then armor = rng.percent(50) and "light" or "heavy"
elseif	mob == "thief" then armor = "light" 
end

border = 0
startx, starty = 4, 10
defineTile('.', data.floor or "FLOOR")
defineTile(',', "FLOOR")
defineTile('D', "DOOR")
defineTile('!', "DOOR_VAULT")
defineTile('X', "HARDWALL")
defineTile('S', "FLOOR", {random_filter={type="scroll", ego_chance=50, add_levels=6}})
defineTile('W', "FLOOR", {random_filter={subtype=weapon, tome_mod="vault", add_levels=6, ego_chance=100}})
defineTile('A', "FLOOR", {random_filter={subtype=armor, tome_mod="vault", add_levels=6, ego_chance=100}})
defineTile('M', "FLOOR", nil, {random_filter={name=mob, add_levels=8}})
rotates = {"default", "90", "180", "270", "flipx", "flipy"}

return {
[[.........]],
[[.XXXXXXX.]],
[[.XASSSWX.]],
[[.XXXDXXX.]],
[[.X,,M,,X.]],
[[.X,M,M,X.]],
[[.X,,M,,X.]],
[[.XDX!XDX.]],
[[.XWX.XAX.]],
[[.XXX.XXX.]],
[[.........]],
}

helminthauge
Wyrmic
Posts: 212
Joined: Sat Sep 29, 2018 3:43 am

Re: Vault Contest v2

#23 Post by helminthauge »

Crystal Cabal.
The shape is identical to skeleton mage cabal. Spawns with 4 crystals and 8 gems in.

Code: Select all

setStatusAll{no_teleport=true, vault_only_door_open=true, room_map = {can_open=true}}
roomCheck(function(room, zone, level, map)
	-- let DG decide this
end)
specialList("actor", {
	"/data/general/npcs/crystal.lua",
})
border = 0
startx, starty = 4, 10
defineTile('.', data.floor or "FLOOR")
defineTile(',', "FLOOR")
defineTile('!', "DOOR_VAULT")
defineTile('X', "HARDWALL")
defineTile('G', "FLOOR", {random_filter={type="gem"}})
defineTile('C', "FLOOR", nil, {random_filter={subtype="crystal", add_levels=4}})

rotates = {"default", "90", "180", "270", "flipx", "flipy"}

return {
[[.........]],
[[.XXXXXXX.]],
[[.XXXXXXX.]],
[[.X,C,C,X.]],
[[.XGG,GGX.]],
[[.XGG,GGX.]],
[[.X,C,C,X.]],
[[.XXX!XXX.]],
[[.XXX.XXX.]],
[[.XXX.XXX.]],
[[.........]],
}

darkgod
Master of Eyal
Posts: 10750
Joined: Wed Jul 24, 2002 9:26 pm
Location: Angolwen
Contact:

Re: Vault Contest v2

#24 Post by darkgod »

This looks nice! MOAR MOAR !! MOARRRR!
[tome] joylove: You can't just release an expansion like one would release a Kraken XD
--
[tome] phantomfrettchen: your ability not to tease anyone is simply stunning ;)

Delmuir
Uruivellas
Posts: 992
Joined: Sat Aug 24, 2013 5:55 am

Re: Vault Contest v2

#25 Post by Delmuir »

I don't think my idea requires an image so...

Just any size or shape vault EXCEPT that it collapses with sand akin to the sandworm lair after "x" moves, from the outside in towards the door, forcing the enemies and the player into a smaller and smaller space.

Razakai
Uruivellas
Posts: 889
Joined: Tue May 14, 2013 3:45 pm

Re: Vault Contest v2

#26 Post by Razakai »

Collapsed wizard tower - this would work in Trollmire, Norgos or any other T1 outdoor zone. Might need some gfx tweaks if so though.

The outside has some ruins and a bit of decoration with bears, just for flavour.
The entrance contains a slightly nasty trap in the form of an automated arcane turret that fires slow moving bolts, and a rubble trap in front of it will stun unwary players. A ruined guardian golem is also present, which can be a tough fight for a new player.
The next room has a collapsed ceiling, leading to more rubble traps and a bunch of overgrown plants, but does have some old scrolls and gold.
The last room contains a skeletal wizard, turret and more plants guarding loot and stairs.
The stairs lead to a tiny subzone containing another turret, and around the corner, the remains of the former owner - now a skeletal magus. Killing him gives you some decent loot for the level, or you can grab the gold and run.
I have some uncollapsed variants I'm working on for later zones, that contain randomized mobs (archmage, alchemist and necromancer towers) and a boss arena at the top with the tower's owner guarding a bunch of loot, backed up by custom defenses.

Code: Select all

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$$##,,,]],
[[,,,,#########,,,,]],
[[,,,,,,,,,,,,,,,,,]],
}
/maps/zones/collapsed_tower.lua

Code: Select all

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

nsrr
Sher'Tul
Posts: 1126
Joined: Mon Sep 21, 2015 8:45 pm
Location: Middle of Nowhere

Re: Vault Contest v2

#27 Post by nsrr »

Forest Ruined Building 1 and 3 Revamps. Building 1 adds more variations on layout, a few different mobs, weaker mobs in theme with the chosen mob, and more loot. Building 3 adjusts the layout slightly from the original, and adds more mobs and loot with a high degree of variability... except for the skeleton from the original version, which will still always appear, and now has a bit of money to guard.

Building 1:

Code: Select all

--ruied forest building 1
--not really a vault imo, it's just a troll in a room. one slightly better quality inscription.
--up the danger, up the reward: increase mob levels, add more mobs, add a bit more loot
--add a few variations on the layout

setStatusAll{no_teleport=true, room_map = {can_open=true}}
specialList("actor", {
	"/data/general/npcs/troll.lua",
	"/data/general/npcs/ghoul.lua",
	"/data/general/npcs/thieve.lua",
	"/data/general/npcs/skeleton.lua",
})
border = 0
rotates = {"default", "90", "180", "270", "flipx", "flipy"}

defineTile('.', "FLOOR")
defineTile(',', data.floor or data['.'] or "GRASS")
defineTile('#', "HARDWALL")
defineTile('X', "HARDTREE")
defineTile('+', "DOOR")
defineTile('x', "DOOR_VAULT")

local mobs = {
	"cave troll",
	"thief",
	"skeleton magus",
	"ghast",
}
local mob = rng.tableRemove(mobs)
local moblet = "forest troll"
if mob == "thief" then moblet = "bandit"
elseif mob == "skeleton magus" then moblet = "skeleton warrior"
elseif mob == "ghast" then moblet = "ghoul"
end

defineTile('T', "FLOOR", {random_filter={type="scroll", ego_chance =50, add_levels=8}}, {random_filter={name=mob, add_levels=8}})
defineTile('t', "FLOOR", {random_filter={tome_mod="vault", add_levels=5}}, {random_filter={name=moblet, add_levels=6}})
defineTile('m', "FLOOR", nil, {random_filter={name=moblet, add_levels=4}})

local version = rng.range(1,3)
if version == 1 then
return {
[[,,,,,,,,,,,,,]],
[[,#####XXXX,,,]],
[[,#tTt#,,XX,X,]],
[[,#...#,,,XXX,]],
[[,###x#X#X.,#,]],
[[,#,..,,XX,.#,]],
[[,X.m...m,..+,]],
[[,X,,.X.,...+,]],
[[,X,X.m.,,..#,]],
[[,##XX#XXX#X#,]],
[[,,,,,,,,,,,,,]],
}
elseif version == 2 then
return {
[[,,,,,,,,,,,,,]],
[[,##X##XXXX#X,]],
[[,X,,,,.m.XX,,]],
[[,X,.,....,XX,]],
[[,X.###x###,#,]],
[[,Xm#t...t#,#,]],
[[,#.#..T..#,#,]],
[[,#,#######,X,]],
[[,X,,,.,.m.#X,]],
[[,X###++#####,]],
[[,,,,,,,,,,,,,]],
}
else
return {
[[,,,,,,,,,,,,,]],
[[,###++##X#X,,]],
[[,#,.m.,#XX#X,]],
[[,X,...,,,XXX,]],
[[,X.mXX,,,,,#,]],
[[,#...,,,.X.#,]],
[[,#####,,,,.X,]],
[[,#t,.x..mX.#,]],
[[,#Tt.#,.X..#,]],
[[,#########X#,]],
[[,,,,,,,,,,,,,]],
}
end
Building 3:

Code: Select all

-- revamp:
-- keep the same layout, add much *much* more variability to mobs and drops
-- ok, the layout isn't *exactly* the same... i made the pond bigger, added more flowers, made all rooms fully enclosed, and changed walls and trees to be non-diggable
-- but we use the same layout every time, no variations

setStatusAll{no_teleport=true, room_map = {can_open=true}}
specialList("actor", {
	"/data/general/npcs/skeleton.lua",
	"/data/general/npcs/snake.lua",
	"/data/general/npcs/molds.lua",
	"/data/general/npcs/feline.lua",
	"/data/general/npcs/ant.lua",
	"/data/zones/ritch-tunnels/npcs.lua",
	"/data/general/npcs/sandworm.lua",
	"/data/general/npcs/spider.lua",
	"/data/general/npcs/vermin.lua",
	"/data/general/npcs/rodent.lua",
	"/data/general/npcs/ooze.lua",
	"/data/general/npcs/jelly.lua",
})
border = 0
rotates = {"default", "90", "180", "270", "flipx", "flipy"}

defineTile('.', "FLOOR")
defineTile(',', "GRASS")
defineTile(';', "FLOWER")
defineTile('~', "DEEP_WATER")
defineTile('#', "HARDWALL")
defineTile('X', "HARDTREE")
defineTile('x', "DOOR_VAULT")

local mobs = {
	"rattlesnake",
	"green worm mass", 
	"giant brown ant",
	"snow cat",
	"green mold",
	"giant grey rat",
	"giant spider",
	"ritch flamespitter",
	"sandworm",
	"grey mold",
	"giant brown rat",
	"skeleton mage",
	"skeleton archer",
	"skeleton warrior",
	"giant green ant",
	"giant red ant",
	"giant yellow ant",
	"giant blue ant",
	"brown mold",
	"white worm mass",
	"giant crystal rat",
	"spitting spider",
	"weaver young",
	"green ooze",
	"red ooze",
	"yellow ooze",
	"blue ooze",
	"green jelly",
	"red jelly",
	"blue jelly",
	"yellow jelly",
}

defineTile('s', "FLOOR", "MONEY_SMALL", {random_filter={name="degenerated skeleton warrior"}}) -- retain closet skeleton for posterity; give it a little money to guard so he's not so sad

--ALL OF THE VARIABILITY
defineTile('1', "FLOOR", rng.percent(66)and{random_filter={tome_mod="vault", add_levels=rng.range(1,3)}} or nil, rng.percent(50) and {random_filter={name=rng.tableRemove(mobs), add_levels=rng.range(5,10)}} or nil)
defineTile('2', "FLOOR", rng.percent(50)and{random_filter={tome_mod="vault", add_levels=rng.range(2,5)}} or nil, rng.percent(66) and {random_filter={name=rng.tableRemove(mobs), add_levels=rng.range(4,8)}} or nil)
defineTile('3', "FLOOR", rng.percent(66)and{random_filter={add_levels=rng.range(2,4), ego_chance=rng.range(75,100)}} or nil, rng.percent(50) and {random_filter={name=rng.tableRemove(mobs), add_levels=rng.range(5,10)}} or nil)
defineTile('4', "FLOOR", rng.percent(50)and{random_filter={add_levels=rng.range(3,6), ego_chance=rng.range(66,100)}} or nil, rng.percent(66) and {random_filter={name=rng.tableRemove(mobs), add_levels=rng.range(4,8)}} or nil)
defineTile('5', "FLOOR", rng.percent(66)and{random_filter={tome_mod="vault", add_levels=rng.range(1,3)}} or nil, rng.percent(50) and {random_filter={name=rng.tableRemove(mobs), add_levels=rng.range(5,10)}} or nil)
defineTile('6', "FLOOR", rng.percent(50)and{random_filter={tome_mod="vault", add_levels=rng.range(4,6)}} or nil, rng.percent(66) and {random_filter={name=rng.tableRemove(mobs), add_levels=rng.range(4,8)}} or nil)

return {
[[,,,,,,,,,,,,,,,,]],
[[,#X#########X,,,]],
[[,#2x.;,.x.6,X.X,]],
[[,###.,,.####XXX,]],
[[,#3x.;,.#.5.1.#,]],
[[,###.;;.###x###,]],
[[,#sx..,,#;;;;;;;]],
[[,###.,,X#;;~~~;;]],
[[,#4x..,.,;;~~~;;]],
[[,#####X,,;;~~~;;]],
[[,,,,,,,,,;;;;;;;]],
}

Post Reply