Skip to content
Snippets Groups Projects
Commit 141cc963 authored by dg's avatar dg
Browse files

Rak'Shor Pride now has some new layout and new "fun" monsters inside !

git-svn-id: http://svn.net-core.org/repos/t-engine4@6693 51575b47-30f0-44d4-a5cc-537603b46e54
parent b4f2f627
No related branches found
No related tags found
No related merge requests found
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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")
newEntity{
define_as = "BASE_NPC_HORROR_UNDEAD",
type = "undead", subtype = "horror",
display = "h", color=colors.WHITE,
blood_color = colors.BLUE,
body = { INVEN = 10 },
autolevel = "warrior",
ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
stats = { str=20, dex=20, wil=20, mag=20, con=20, cun=20 },
combat_armor = 5, combat_def = 10,
combat = { dam=5, atk=10, apr=5, dammod={str=0.6} },
infravision = 10,
max_life = resolvers.rngavg(10,20),
rank = 2,
size_category = 3,
blind_immune = 1,
fear_immune = 1,
see_invisible = 2,
undead = 1,
not_power_source = {nature=true},
}
newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
name = "necrotic mass", color=colors.DARK_GREY,
desc ="This putrid mass of rotting flesh shifts and quivers, but shows no signs of intelligence or mobility.",
resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_necrotic_mass.png", display_h=2, display_y=-1}}},
level_range = {15, nil}, exp_worth = 1,
rarity = 3,
rank = 1,
size_category = 2, life_rating = 7,
combat_armor = 0, combat_def = 0,
max_life=100,
combat = {dam=resolvers.levelup(resolvers.mbonus(25, 15), 1, 1.1), apr=0, atk=resolvers.mbonus(30, 15), dammod={str=0.6}},
never_move = 1,
}
newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
name = "necrotic abomination", color=colors.DARK_GREEN,
desc ="This monstrous form of putrid, torn flesh and chipped bone drags its mass towards you, spurting blood and viscera along the way.",
resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_necrotic_abomination.png", display_h=2, display_y=-1}}},
level_range = {30, nil}, exp_worth = 1,
rarity = 8,
rank = 3,
size_category = 4,
combat_armor = 0, combat_def = 40,
max_life=400,
disease_immune = 1,
combat = {
dam=resolvers.levelup(resolvers.rngavg(40,45), 1, 1.2),
atk=resolvers.rngavg(60,80), apr=20,
dammod={mag=1.2}, physcrit = 10,
damtype=engine.DamageType.BLIGHT,
},
autolevel = "caster",
summon = {
{type="undead", number=4, hasxp=false},
},
resolvers.talents{
[Talents.T_VIRULENT_DISEASE]={base=4, every=8, max=6},
[Talents.T_EPIDEMIC]={base=4, every=8},
[Talents.T_SOUL_ROT]={base=5, every=10, max=8},
[Talents.T_CORROSIVE_WORM]={base=5, every=10, max=8},
[Talents.T_BLIGHTZONE]={base=3, every=10, max=6},
[Talents.T_SPIT_BLIGHT]={base=3, every=10, max=8},
},
on_die = function(self, who)
game.logSeen(self, "#VIOLET#As the necrotic abomination is destroyed you see the remaining bones reassembling in the form of new foes!")
self:forceUseTalent(self.T_SUMMON, {ignore_energy=true, ignore_cd=true, no_equilibrium_fail=true, no_paradox_fail=true, force_level=1})
end,
resolvers.sustains_at_birth(),
}
newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
name = "bone horror", color=colors.WHITE,
desc ="The massive ribcage in the middle beats with loud, audible cracks, as many a skeletal hand protrude forth, entwining, fusing, forming long skeletal appendages to support itself, while others crumble and collapse inward. During all this, somehow, it seems they grasp for you.",
resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_bone_horror.png", display_h=2, display_y=-1}}},
level_range = {30, nil}, exp_worth = 1,
rarity = 8,
rank = 3,
size_category = 4,
combat_armor = 30, combat_def = 0,
max_life=400, life_rating = 12,
disease_immune = 1,
cut_immune = 1,
combat = {
dam=resolvers.levelup(resolvers.rngavg(60,70), 1, 1.2),
atk=resolvers.rngavg(60,80), apr=40,
dammod={mag=1, str=0.5}, physcrit = 12,
damtype=engine.DamageType.PHYSICALBLEED,
},
autolevel = "warriormage",
summon = {
{type="undead", subtype = "skeleton", number=4, hasxp=false},
},
resolvers.talents{
[Talents.T_BONE_GRAB]={base=4, every=8, max=10},
[Talents.T_BONE_NOVA]={base=2, every=8, max=8},
[Talents.T_BONE_SPEAR]={base=5, every=5, max=12},
[Talents.T_SKULLCRACKER]={base=7, every=15, max=10},
[Talents.T_THROW_BONES]={base=4, every=10, max=8},
[Talents.T_BONE_SHIELD]={base=6, every=30, max=11},
},
on_die = function(self, who)
game.logSeen(self, "#VIOLET#As the bone horror is destroyed you see the remaining bones reassembling in the form of new foes!")
self:forceUseTalent(self.T_SUMMON, {ignore_energy=true, ignore_cd=true, no_equilibrium_fail=true, no_paradox_fail=true, force_level=1})
end,
resolvers.sustains_at_birth(),
}
newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
name = "sanguine horror", color=colors.RED,
desc ="This pulsing, quivering form is a deep crimson, and appears to be composed entirely of thick, virulent blood. Waves rhythmically ripple across its surface, indicating a still beating heart somewhere in its body.",
resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_sanguine_horror.png", display_h=2, display_y=-1}}},
level_range = {30, nil}, exp_worth = 1,
rarity = 8,
rank = 3,
size_category = 4,
combat_armor = 30, combat_def = 0,
max_life=400,
stats = { con=50, },
combat = {
dam=resolvers.levelup(resolvers.rngavg(50,60), 1, 1.2),
atk=resolvers.rngavg(60,80), apr=20,
dammod={mag=1.1}, physcrit = 12,
damtype=engine.DamageType.CORRUPTED_BLOOD,
},
autolevel = "caster",
summon = {
{type="undead", subtype = "blood", number=2, hasxp=false},
},
resolvers.talents{
[Talents.T_SUMMON]=1,
[Talents.T_BLOOD_SPRAY]={base=4, every=6, max = 10},
[Talents.T_BLOOD_GRASP]={base=3, every=5, max = 9},
[Talents.T_BLOOD_BOIL]={base=2, every=7, max = 7},
[Talents.T_BLOOD_FURY]={base=5, every=8, max = 6},
[Talents.T_BLOOD_LOCK]={base=4, every=10, max=8},
[Talents.T_BLOODSPRING]=1, --And to make things interesting...
},
resolvers.sustains_at_birth(),
}
newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
name = "animated blood", color=colors.RED, subtype = "blood",
desc ="This crimson shape moves drips ceaselessly, spattering the nearby ground. The droplets seem to continue moving of their own volition.",
resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_animated_blood.png", display_h=2, display_y=-1}}},
level_range = {15, nil}, exp_worth = 1,
rarity = 20, -- Appear alone but rarely.
rank = 1,
size_category = 2, life_rating = 7,
combat_armor = 0, combat_def = 0,
max_life=100,
combat = {dam=resolvers.levelup(resolvers.mbonus(25, 15), 1, 1.1), apr=0, atk=resolvers.mbonus(30, 15), dammod={str=0.6}},
}
\ No newline at end of file
......@@ -5774,7 +5774,71 @@ newEntity{ base = "BASE_HEAVY_BOOTS",
},
}
newEntity{ base = "BASE_LIGHT_ARMOR",
power_source = {arcane=true},
unique = true, sentient=true,
name = "The Untouchable", color = colors.BLUE, image = "object/artifact/the_untouchable.png",
unided_name = "tough leather coat",
desc = [[This rugged jacket is subject of many a rural legend.
Some say it was fashioned by an adventurous mage turned rogue, in times before the spellblaze, but was since lost.
All manner of shady gamblers have since claimed to have worn it at one point or another. To fail, but live, is what it means to be untouchable, they said.]],
level_range = {20, 30},
rarity = 200,
cost = 350,
material_level = 3,
wearer_hp=100,
wielder = {
combat_def=12,
combat_armor=10,
combat_apr=10,
inc_stats = { [Stats.STAT_CUN] = 5, },
},
on_wear = function(self, who)
self.worn_by = who
self.wearer_hp = who.life / who.max_life
end,
on_takeoff = function(self)
self.worn_by = nil
end,
act = function(self)
self:useEnergy()
if not self.worn_by then return end
if game.level and not game.level:hasEntity(self.worn_by) and not self.worn_by.player then self.worn_by = nil return end
if self.worn_by:attr("dead") then return end
local hp_diff = (self.wearer_hp - self.worn_by.life/self.worn_by.max_life)
if hp_diff >= 0.2 then
self.worn_by:setEffect(self.worn_by.EFF_DAMAGE_SHIELD, 3, {power = (hp_diff * self.worn_by.max_life)/2})
end
game.logPlayer(self.worn_by, "#LIGHT_BLUE#A barrier bursts from the leather jacket!")
self.wearer_hp = self.worn_by.life/self.worn_by.max_life
end,
}
newEntity{ base = "BASE_TOOL_MISC",
power_source = {nature = true},
unique=true, rarity=240, image = "object/artifact/honeywood_chalice.png",
type = "charm", subtype="totem",
name = "Honeywood Chalice",
unided_name = "sap filled cup",
color = colors.BROWN,
level_range = {30, 40},
desc = [[This wooden cup seems perpetually filled with a thick sap-like substance. Tasting it is exhilarating, and you feel intensely aware when you do so.]],
cost = 320,
material_level = 4,
wielder = {
combat_physresist = 10,
inc_stats = {[Stats.STAT_STR] = 5,},
inc_damage={[DamageType.PHYSICAL] = 5,},
resists={[DamageType.NATURE] = 10,},
life_regen=0.15,
healing_factor=0.1,
learn_talent = {[Talents.T_BATTLE_TRANCE] = 1},
},
}
--[=[
newEntity{
unique = true,
......
......@@ -349,3 +349,38 @@ newTalent{
end,
}
newTalent{
name = "Battle Trance", image = "talents/clarity.png",
type = {"wild-gift/objects",1},
points = 1,
mode = "sustained",
cooldown = 15,
no_energy = true,
activate = function(self, t)
t.trance_counter = 0
local ret = {}
self:talentTemporaryValue(ret, "resists", {all=15})
self:talentTemporaryValue(ret, "combat_mindpower", -15)
self:talentTemporaryValue(ret, "combat_mentalresist", 20)
return ret
end,
deactivate = function(self, t, p)
t.trance_counter = nil
return true
end,
callbackOnAct = function(self, t)
t.trance_counter = t.trance_counter + 1
if t.trance_counter <= 6 then return end
if rng.percent((t.trance_counter - 5) * 2) then
self:forceUseTalent(self.T_BATTLE_TRANCE, {ignore_energy=true})
self:setEffect(self.EFF_CONFUSED, 4, {power=40})
game.logPlayer(self, "You overdose on the honeyroot sap!")
end
return
end,
info = function(self, t)
return ([[You enter into a fighting trance, gaining 15%% resist all, losing 15 mindpower, but gaining 20 mental save. However, each turn after the fifth that this talent is active, there is a chance that you will be overcome and become confused.]])
end,
}
\ No newline at end of file
......@@ -22,6 +22,7 @@ load("/data/general/npcs/ghoul.lua", rarity(5))
load("/data/general/npcs/ghost.lua", rarity(5))
load("/data/general/npcs/skeleton.lua", rarity(5))
load("/data/general/npcs/orc.lua", rarity(3))
load("/data/general/npcs/horror-undead.lua", rarity(1))
load("/data/general/npcs/orc-rak-shor.lua", rarity(0))
load("/data/general/npcs/all.lua", rarity(4, 35))
......
......@@ -24,7 +24,7 @@ return {
max_level = 3,
decay = {300, 800},
actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end,
width = 64, height = 64,
width = 50, height = 50,
persistent = "zone",
-- all_remembered = true,
all_lited = true,
......@@ -34,32 +34,16 @@ return {
max_material_level = 5,
generator = {
map = {
class = "engine.generator.map.Static",
map = "zones/prides",
up = "BONE_UP6",
down = "BONE_DOWN4",
floor = "BONEFLOOR",
wall = "HARDBONEWALL",
generic_leveler = "BONE_GENERIC_LEVER",
generic_leveler_door = "BONE_GENERIC_LEVER_DOOR",
sublevel = {
class = "engine.generator.map.Town",
pride = "rak-shor",
building_chance = 70,
max_building_w = 8, max_building_h = 8,
edge_entrances = {6,4},
floor = "BONEFLOOR",
external_floor = "BONEFLOOR",
wall = "BONEWALL",
up = "BONEFLOOR",
down = "BONEFLOOR",
door = "BONE_DOOR",
nb_rooms = {0,0,0,1},
rooms = {"lesser_vault"},
lesser_vaults_list = {"orc-armoury", "double-t", "crypt", "hostel", "horror-chamber"},
lite_room_chance = 100,
},
class = "engine.generator.map.Roomer",
nb_rooms = 10,
['.'] = "BONEFLOOR",
['#'] = "BONEWALL",
up = "BONE_LADDER_UP",
down = "BONE_LADDER_DOWN",
door = "BONE_DOOR",
rooms = {{"forest_clearing",2}, "random_room", {"lesser_vault",5}},
lesser_vaults_list = {"orc-armoury", "double-t", "crypt", "hostel", "horror-chamber"},
lite_room_chance = 100,
},
actor = {
class = "mod.class.generator.actor.Random",
......@@ -83,8 +67,34 @@ return {
levels =
{
[1] = {
width = 64, height = 64,
generator = { map = {
class = "engine.generator.map.Static",
map = "zones/prides",
up = "BONE_UP_WILDERNESS",
down = "BONE_LADDER_DOWN",
floor = "BONEFLOOR",
wall = "HARDBONEWALL",
generic_leveler = "BONE_GENERIC_LEVER",
generic_leveler_door = "BONE_GENERIC_LEVER_DOOR",
sublevel = {
class = "engine.generator.map.Town",
pride = "rak-shor",
building_chance = 70,
max_building_w = 8, max_building_h = 8,
edge_entrances = {6,4},
floor = "BONEFLOOR",
external_floor = "BONEFLOOR",
wall = "BONEWALL",
up = "BONEFLOOR",
down = "BONEFLOOR",
door = "BONE_DOOR",
nb_rooms = {0,0,0,1},
rooms = {"lesser_vault"},
lesser_vaults_list = {"orc-armoury", "double-t", "crypt", "hostel", "horror-chamber"},
lite_room_chance = 100,
},
}, },
},
[3] = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment