Skip to content
Snippets Groups Projects
Commit fddd1c60 authored by DarkGod's avatar DarkGod
Browse files

Merge branch 'MoreMummies' into 'master'

More Mummies

Updated Mummy NPC definitions:
The Greater Mummy Lord gets his shalore racial talents, cut immunity, a better selection of runes, and is size 3.

New NPC "Greater Mummy" an elite melee-ranged hybrid version of the other mummies. (So the GML has some poker buddies.)

Resolver filters can assign a complete object list to their base_list field.

Fixed resolver definitions for mummy wrappings so that they can be generated more reliably.

Elven ruins mummies automatically use their zone-specific object list regardless of where they're generated.

See merge request !459
parents 210c47eb 40f01b62
No related branches found
No related tags found
1 merge request!459More Mummies
Pipeline #
......@@ -27,7 +27,6 @@ newEntity{
display = "[", color=colors.ANTIQUE_WHITE, image="object/mummy_wrappings.png",
moddable_tile = resolvers.moddable_tile("mummy_wrapping"),
encumber = 6,
rarity = 5,
desc = [[Decaying mummy wrappings.]],
egos = "/data/general/objects/egos/armor.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) },
wielder = {
......@@ -41,6 +40,8 @@ newEntity{ base = "BASE_MUMMY_WRAPPING",
require = { stat = { dex=15 }, },
cost = 1,
material_level = 3,
rarity = 20,
mummy_rarity = 3,
wielder = {
combat_def = 5,
combat_armor = 2,
......
......@@ -27,6 +27,10 @@ load("/data/general/npcs/all.lua", rarity(4, 35))
local Talents = require("engine.interface.ActorTalents")
-- special object list for mummy-specific items (used when generating for other zones)
local object_list = require("mod.class.Object"):loadList("/data/zones/ancient-elven-ruins/objects.lua")
object_list.__ATOMIC = true
-- The boss , no "rarity" field means it will not be randomly generated
newEntity{ define_as = "GREATER_MUMMY_LORD",
allow_infinite_dungeon = true,
......@@ -42,7 +46,7 @@ newEntity{ define_as = "GREATER_MUMMY_LORD",
mana_regen = 7;
stats = { str=25, dex=10, cun=8, mag=35, wil=20, con=20 },
rank = 4,
size_category = 2,
size_category = 3,
open_door = true,
move_others=true,
infravision = 10,
......@@ -53,14 +57,15 @@ newEntity{ define_as = "GREATER_MUMMY_LORD",
OFFHAND = {special=shield_special},
BODY = {type="armor", special=function(e) return e.subtype=="mummy" or e.subtype=="heavy" or e.subtype=="massive" end},
},
equipment = resolvers.equip{
resolvers.equip{
{type="weapon", subtype="longsword", defined="LONGSWORD_WINTERTIDE", random_art_replace={chance=75}, autoreq=true},
{type="armor", subtype="shield", force_drop=true, tome_drops="boss", forbid_power_source={antimagic=true}, autoreq=true},
{type="armor", subtype="mummy", force_drop=true, tome_drops="boss", forbid_power_source={antimagic=true}, autoreq=true, base_list="mod.class.Object:/data/zones/ancient-elven-ruins/objects.lua"},
{type="armor", subtype="head", force_drop=true, tome_drops="boss", forbid_power_source={antimagic=true}, autoreq=true, base_list="mod.class.Object:/data/zones/ancient-elven-ruins/objects.lua"},
{type="armor", subtype="mummy", ignore_material_restriction=true, force_drop=true, base_list=object_list, tome_drops="boss", forbid_power_source={antimagic=true}, autoreq=true},
{type="armor", subtype="head", force_drop=true, ignore_material_restriction=true, base_list=object_list, tome_drops="boss", forbid_power_source={antimagic=true}, autoreq=true},
},
resolvers.drops{{tome_drops="boss", type="armor", subtype="heavy", forbid_power_source={antimagic=true}, autoreq=true,}},
resolvers.drops{chance=100, nb=3, {tome_drops="boss"} },
resolvers.drops{chance=100, nb=3, {base_list=object_list, tome_drops="boss"} },
resolvers.racial("shalore"),
resolvers.talents{
[Talents.T_ARMOUR_TRAINING]={base=3, every=10, max=5},
[Talents.T_SHIELD_PUMMEL]={base=5, every=5, max=8},
......@@ -77,19 +82,22 @@ newEntity{ define_as = "GREATER_MUMMY_LORD",
[Talents.T_ROTTING_DISEASE]={base=6, every=5, max=8},
[Talents.T_TRICKS_OF_THE_TRADE] = 1,
},
instakill_immune = 1,
blind_immune = 1,
cut_immune = 1,
see_invisible = 4,
undead = 1,
autolevel = "warriormage",
ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
resolvers.inscriptions(3, "rune"),
resolvers.inscriptions(1, {"manasurge rune", "manasurge rune"}),
max_inscriptions = 5,
resolvers.inscriptions(1, {"manasurge rune"}),
resolvers.inscriptions(1, "rune", "attack"),
resolvers.inscriptions(1, "rune", "protect"),
resolvers.inscriptions(2, "rune"),
}
-- Some mummy minions
-- Some mummies
newEntity{ base = "BASE_NPC_MUMMY",
allow_infinite_dungeon = true,
name = "ancient elven mummy", color=colors.ANTIQUE_WHITE,
......@@ -99,12 +107,10 @@ newEntity{ base = "BASE_NPC_MUMMY",
max_life = resolvers.rngavg(120,140),
ai_state = { talent_in=4, },
stats = { mag=25, wil=20, },
infravision = 10,
resolvers.auto_equip_filters("Berserker"),
resolvers.equip{
{type="weapon", subtype="greatsword", forbid_power_source={antimagic=true}, autoreq=true},
-- {type="armor", subtype="mummy", forbid_power_source={antimagic=true}, autoreq=true, base_list="mod.class.Object:/data/zones/ancient-elven-ruins/objects.lua"},
{type="armor", subtype="mummy", force_drop=true, forbid_power_source={antimagic=true}, autoreq=true},
{type="armor", subtype="mummy", ignore_material_restriction=true, force_drop=true, base_list=object_list, forbid_power_source={antimagic=true}, autoreq=true},
},
resolvers.talents{
[Talents.T_STUNNING_BLOW]={base=2, every=7, max=6},
......@@ -124,11 +130,10 @@ newEntity{ base = "BASE_NPC_MUMMY",
max_life = resolvers.rngavg(20,40), life_rating=4,
ai_state = { talent_in=2, },
never_move = 1,
infravision = 10,
size_category = 2,
resolvers.equip{
-- {type="armor", subtype="mummy", force_drop=true, forbid_power_source={antimagic=true}, autoreq=true, base_list="mod.class.Object:/data/zones/ancient-elven-ruins/objects.lua"},
{type="armor", subtype="mummy", force_drop=true, forbid_power_source={antimagic=true}, autoreq=true},
{type="armor", subtype="mummy", ignore_material_restriction=true, force_drop=true, base_list=object_list, forbid_power_source={antimagic=true}, autoreq=true},
},
autolevel = "caster",
resolvers.talents{
......@@ -148,11 +153,9 @@ newEntity{ base = "BASE_NPC_MUMMY",
rarity = 2,
max_life = resolvers.rngavg(60,80), life_rating=7,
ai_state = { talent_in=4, },
infravision = 10,
resolvers.equip{
-- {type="armor", subtype="mummy", forbid_power_source={antimagic=true}, autoreq=true, base_list="mod.class.Object:/data/zones/ancient-elven-ruins/objects.lua"},
{type="armor", subtype="mummy", force_drop=true, forbid_power_source={antimagic=true}, autoreq=true},
{type="armor", subtype="mummy", ignore_material_restriction=true, force_drop=true, base_list=object_list, forbid_power_source={antimagic=true}, autoreq=true},
},
autolevel = "ghoul",
resolvers.talents{
......@@ -164,3 +167,38 @@ newEntity{ base = "BASE_NPC_MUMMY",
combat = { dam=8, atk=10, apr=0, dammod={str=0.7} },
}
newEntity{ base = "BASE_NPC_MUMMY", define_as = "GREATER_MUMMY",
allow_infinite_dungeon = true,
name = "greater mummy", color=colors.YELLOW,
image = "npc/undead_mummy_ancient_elven_mummy.png",
desc = [[An animated corpse in mummy wrappings, both very well preserved.]],
level_range = {20, nil}, exp_worth = 1,
rank = 3,
rarity = 8,
max_life = resolvers.rngavg(150,180), life_rating=12,
autolevel = "warriormage",
ai = "tactical", ai_state = { talent_in=2, ai_move="move_astar", },
global_speed_base = 1,
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, HEAD=1, },
stats = { str=20, dex=10, cun=8, mag=30, wil=20, con=20 },
move_others=true,
mana_regen = 1,
resolvers.auto_equip_filters("Berserker"),
resolvers.equip{
{type="weapon", subtype="greatsword", forbid_power_source={antimagic=true}, autoreq=true},
{type="armor", subtype="mummy", ignore_material_restriction=true, force_drop=true, base_list=object_list, forbid_power_source={antimagic=true}, autoreq=true},
{type="armor", subtype="head", ignore_material_restriction=true, base_list=object_list, forbid_power_source={antimagic=true}, autoreq=true},
},
resolvers.inscriptions(1, "rune", "attack"),
resolvers.inscriptions(1, "rune"),
resolvers.drops{nb=2, {base_list=object_list, tome_drops="store"}, {tome={money=1}}},
resolvers.talents{
[Talents.T_WEAPONS_MASTERY]={base=3, every=10, max=5},
[Talents.T_WEAPON_COMBAT]={base=4, every=10, max=6},
[Talents.T_STUNNING_BLOW]={base=2, every=7, max=6},
[Talents.T_CRUSH]={base=3, every=7, max=7},
[Talents.T_RUSH]={base=2, every=5, max=5},
[Talents.T_FREEZE]={base=3, every=7, max=7},
[Talents.T_MANATHRUST]={base=3, every=7, max=7},
},
}
......@@ -20,6 +20,9 @@
load("/data/general/objects/objects-maj-eyal.lua")
load("/data/general/objects/mummy-wrappings.lua")
local Stats = require "engine.interface.ActorStats"
--local Talents = require "engine.interface.ActorTalents"
for i = 1, 3 do
newEntity{ base = "BASE_LORE",
define_as = "NOTE"..i,
......@@ -29,9 +32,6 @@ newEntity{ base = "BASE_LORE",
}
end
local Stats = require "engine.interface.ActorStats"
local Talents = require "engine.interface.ActorTalents"
newEntity{ base = "BASE_MUMMY_WRAPPING", define_as = "BINDINGS_ETERNAL_NIGHT",
power_source = {arcane=true},
unique = true,
......@@ -40,9 +40,9 @@ newEntity{ base = "BASE_MUMMY_WRAPPING", define_as = "BINDINGS_ETERNAL_NIGHT",
desc = [[Woven through with fell magics of undeath, these bindings suck the light and life out of everything they touch. Any who don them will find themselves suspended in a nightmarish limbo between life and death.]],
color = colors.DARK_GREY,
level_range = {1, 50},
rarity = 20,
rarity = 20, -- not particularly rare, to be loaded only with mummy NPCs
cost = 200,
material_level = 3,
material_level = 4,
wielder = {
combat_armor = 12,
combat_def = 12,
......@@ -85,7 +85,7 @@ newEntity{ base = "BASE_LEATHER_CAP", define_as = "CROWN_ETERNAL_NIGHT",
color = colors.DARK_GREY,
level_range = {1, 50},
cost = 100,
rarity = 20,
rarity = 20, -- not particularly rare, to be loaded only with mummy NPCs
material_level = 3,
wielder = {
combat_armor = 3,
......
......@@ -33,7 +33,7 @@ local Talents = require "engine.interface.ActorTalents"
-- Objects are added to the game when resolved (affects uniques)
-- Additional filter fields interpreted by this resolver:
-- _use_object: object to use (skips random generation)
-- base_list: a specifier to load the entities list from a file, format: <classname>:<file path>
-- base_list: list of entities or specifier to load the list from a file (format: <classname>:<file path>)
-- defined: specific name (matching obj.DEFINE_AS) for an object
-- replace_unique (requires defined): filter to replace specific object if it cannot be generated
-- set true to use (most) fields from the main filter
......@@ -67,13 +67,16 @@ function resolvers.resolveObject(e, filter, do_wear, tries)
--print("[resolveObject]", e.name, "filter:", filter) table.print(filter, "\t")
local base_list
if filter.base_list then -- load the base list defined for makeEntityByName
local _, _, class, file = filter.base_list:find("(.*):(.*)")
if class and file then
base_list = require(class):loadList(file)
if base_list then
base_list.__real_type = "object"
else
print("[resolveObject] COULD NOT LOAD base_list:", filter.base_list)
if type(filter.base_list) == "table" then base_list = filter.base_list
else
local _, _, class, file = filter.base_list:find("(.*):(.*)")
if class and file then
base_list = require(class):loadList(file)
if base_list then
base_list.__real_type = "object"
else
print("[resolveObject] COULD NOT LOAD base_list:", filter.base_list)
end
end
end
filter.base_list = nil
......
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