diff --git a/game/engines/default/engine/Entity.lua b/game/engines/default/engine/Entity.lua index ddae7677c070036c8b8d83595e5f26be1527f877..a9c9bf9f5ca86ac18d4a0828823ae6dc7047a9a7 100644 --- a/game/engines/default/engine/Entity.lua +++ b/game/engines/default/engine/Entity.lua @@ -423,6 +423,12 @@ function _M:loadList(file, no_default, res, mod, loaded) res[#res+1] = e if t.define_as then res[t.define_as] = e end end, + importEntity = function(t) + local e = t:cloneFull() + if mod then mod(e) end + res[#res+1] = e + if t.define_as then res[t.define_as] = e end + end, load = function(f, new_mod) self:loadList(f, no_default, res, new_mod or mod, loaded) end, diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index e6acfa6be2e00f1fdeaf68895e3d8519961b1907..87464626a18a413a9dd0037db31ea4cdc215f2ba 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -747,9 +747,26 @@ function _M:die(src) if not self.no_drops then for inven_id, inven in pairs(self.inven) do for i, o in ipairs(inven) do + -- Handle boss wielding artifacts + if o.__special_boss_drop and rng.percent(o.__special_boss_drop.chance) then + print("Refusing to drop "..self.name.." artifact "..o.name) + + -- Do not drop + o.no_drop = true + + -- Drop a random artifact instead + local ro = game.zone:makeEntity(game.level, "object", {unique=true}, nil, true) + if ro then game.zone:addEntity(game.level, ro, "object", self.x, self.y) end + + -- Add to the pool + game.state:addWorldArtifact(o.define_as, o.__special_boss_drop) + end + if not o.no_drop then o.droppedBy = self.name game.level.map:addObject(self.x, self.y, o) + else + o:removed() end end end diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 7eeacb8b6d4107838ef8a1d6327d5dc137bdd9e1..d31f07c3e7bf98b4625b04626b402cd118f2e3fa 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -678,7 +678,7 @@ function _M:setupCommands() a.faction = "enemies" self.zone:addEntity(self.level, a, "actor", self.player.x+1, self.player.y) --]] - self:changeLevel(2, "tempest-peak") + self:changeLevel(5) end end, } diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua index 7bc34a71b5e50cf4166815db7cf0e57bab41dd00..2f965222fd33a02983fb8587a30bff44fa0197b4 100644 --- a/game/modules/tome/class/GameState.lua +++ b/game/modules/tome/class/GameState.lua @@ -26,12 +26,15 @@ function _M:init(t, no_default) engine.Entity.init(self, t, no_default) self.allow_backup_guardians = {} + self.world_artifacts_pool = {} end +--- Discovered the far east function _M:goneEast() self.gone_east = true end +--- Setup a backup guardian for the given zone function _M:activateBackupGuardian(guardian, on_level, zonelevel, rumor, action) if self.gone_east then return end print("Zone guardian dead, setting up backup guardian", guardian, zonelevel) @@ -46,6 +49,7 @@ function _M:activateBackupGuardian(guardian, on_level, zonelevel, rumor, action) } end +--- Activate a backup guardian & settings, if available function _M:zoneCheckBackupGuardian() if not self.gone_east then print("Not gone east, no backup guardian") return end @@ -82,6 +86,20 @@ function _M:zoneCheckBackupGuardian() end end +--- A boss refused to drop his artifact! Bastard! Add it to the world pool +function _M:addWorldArtifact(define, config) + local o = game.zone.object_list[define] + o.level_range = config.level_range + o.rarity = config.rarity + self.world_artifacts_pool[define] = o +end + +--- Load all refused boss artifacts +-- This is caleld from the world-artifacts.lua file +function _M:getWorldArtifacts() + return self.world_artifacts_pool +end + local wda_cache = {} --- Runs the worldmap directory AI diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua index 81a164b2797c7d718ba480596c3e8a9c35f2986c..560e6c8725bfd5f4a6671e171c2cdd9e442d81e9 100644 --- a/game/modules/tome/data/general/objects/world-artifacts.lua +++ b/game/modules/tome/data/general/objects/world-artifacts.lua @@ -20,6 +20,12 @@ local Stats = require "engine.interface.ActorStats" local Talents = require "engine.interface.ActorTalents" +--- Load boss artifacts that failed to be dropped +for def, e in pairs(game.state:getWorldArtifacts()) do + importEntity(e) + print("Importing failed boss drop "..e.name.." into world artifacts") +end + -- This file describes artifacts not bound to a special location, they can be found anywhere newEntity{ base = "BASE_STAFF", unique = true, diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua b/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua index e03228058d48c5d9370b010838f5611d506ad76f..6174ba57c7ce4afe6fb37aab64921ac46357a9cb 100644 --- a/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua +++ b/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua @@ -46,7 +46,7 @@ newEntity{ define_as = "GREATER_MUMMY_LORD", body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, HEAD=1, }, equipment = resolvers.equip{ - {type="weapon", subtype="longsword", defined="LONGSWORD_RINGIL", autoreq=true}, + {type="weapon", subtype="longsword", defined="LONGSWORD_RINGIL", random_art_replace={chance=75, rarity=280, level_range={35, 45}}, autoreq=true}, {type="armor", subtype="shield", ego_chance=100, autoreq=true}, {type="armor", subtype="mummy", ego_chance=100, autoreq=true}, }, diff --git a/game/modules/tome/data/zones/blighted-ruins/npcs.lua b/game/modules/tome/data/zones/blighted-ruins/npcs.lua index 01039bf680e98bba05e7a92eea36888782ab7024..74e41a1aa2718c623a5ab4febe9791ceffad8727 100644 --- a/game/modules/tome/data/zones/blighted-ruins/npcs.lua +++ b/game/modules/tome/data/zones/blighted-ruins/npcs.lua @@ -83,7 +83,7 @@ This specimen look like it was hastily assembled and is not really complete yet. resolvers.sustains_at_birth(), resolvers.drops{chance=100, nb=3, {ego_chance=100} }, - resolvers.drops{chance=100, nb=1, {defined="UNDEATH_PHIAL"} }, + resolvers.drops{chance=100, nb=1, {defined="UNDEATH_PHIAL", random_art_replace={chance=75, rarity=150, level_range={1, 10}}} }, ai = "dumb_talented_simple", ai_state = { talent_in=4, ai_move="move_astar", }, diff --git a/game/modules/tome/data/zones/charred-scar/npcs.lua b/game/modules/tome/data/zones/charred-scar/npcs.lua index 7a535ea8b52306730bc1f010a376c4bb199f829e..15fbfd04a3fd378b1968c947012c56728199b155 100644 --- a/game/modules/tome/data/zones/charred-scar/npcs.lua +++ b/game/modules/tome/data/zones/charred-scar/npcs.lua @@ -276,7 +276,7 @@ This one looks even nastier and looks toward you with what seems to be disdain. ai = "dumb_talented_simple", ai_state = { talent_in=1, ai_move="move_astar" }, resolvers.equip{ - {type="jewelry", subtype="amulet", defined="FIERY_CHOKER"}, + {type="jewelry", subtype="amulet", defined="FIERY_CHOKER", random_art_replace={chance=75, rarity=200, level_range={35, 45}}}, }, resolvers.drops{chance=20, nb=1, {defined="JEWELER_TOME"} }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/daikara/npcs.lua b/game/modules/tome/data/zones/daikara/npcs.lua index 2e92fbe5b0e42b0b80b8eacd28906ae24c7a47fb..2e5c5f8842bab664a067324727754ba9cd247ef3 100644 --- a/game/modules/tome/data/zones/daikara/npcs.lua +++ b/game/modules/tome/data/zones/daikara/npcs.lua @@ -47,7 +47,7 @@ newEntity{ define_as = "RANTHA_THE_WORM", resists = { [DamageType.FIRE] = -20, [DamageType.COLD] = 100 }, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - resolvers.drops{chance=100, nb=1, {defined="FROST_TREADS"}, }, + resolvers.drops{chance=100, nb=1, {defined="FROST_TREADS", random_art_replace={chance=75, rarity=150, level_range={12, 22}}}, }, resolvers.drops{chance=100, nb=3, {ego_chance=100} }, resolvers.drops{chance=100, nb=10, {type="money"} }, @@ -101,7 +101,7 @@ newEntity{ base="BASE_NPC_ORC_GRUSHNAK", define_as = "MASSOK", resolvers.equip{ {type="weapon", subtype="battleaxe", ego_change=100, autoreq=true}, {type="armor", subtype="massive", ego_chance=100, autoreq=true}, - {type="armor", subtype="head", defined="RUNED_SKULL", autoreq=true}, + {type="armor", subtype="head", defined="RUNED_SKULL", random_art_replace={chance=75, rarity=250, level_range={45, 50}}, autoreq=true}, {type="armor", subtype="feet", ego_chance=100, autoreq=true}, }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/flooded-cave/npcs.lua b/game/modules/tome/data/zones/flooded-cave/npcs.lua index 3ab686b410ae1aab30dc500203fd1d2d9e9f5ba3..3d6538f4ff430e6422ff1381e6be3c9705b6b8ee 100644 --- a/game/modules/tome/data/zones/flooded-cave/npcs.lua +++ b/game/modules/tome/data/zones/flooded-cave/npcs.lua @@ -50,7 +50,7 @@ newEntity{ define_as = "UKLLMSWWIK", resists = { [DamageType.COLD] = 60, [DamageType.LIGHTNING] = 20, }, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - resolvers.drops{chance=100, nb=1, {defined="TRIDENT_TIDES", autoreq=true} }, + resolvers.drops{chance=100, nb=1, {defined="TRIDENT_TIDES", random_art_replace={chance=50, rarity=250, level_range={30, 40}}, autoreq=true} }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, resolvers.drops{chance=100, nb=10, {type="money"} }, diff --git a/game/modules/tome/data/zones/gorbat-pride/npcs.lua b/game/modules/tome/data/zones/gorbat-pride/npcs.lua index 6e1e200d900415fb9fe27021d0f2b3da6452a057..fcfb5484c85db338ec4b8345a2a698c48c9f6360 100644 --- a/game/modules/tome/data/zones/gorbat-pride/npcs.lua +++ b/game/modules/tome/data/zones/gorbat-pride/npcs.lua @@ -49,7 +49,7 @@ newEntity{ base="BASE_NPC_ORC_GORBAT", define_as = "GORBAT", resolvers.equip{ {type="weapon", subtype="greatmaul", ego_change=100, autoreq=true}, - {type="armor", subtype="light", defined="CHROMATIC_HARNESS", autoreq=true}, + {type="armor", subtype="light", defined="CHROMATIC_HARNESS", random_art_replace={chance=75, rarity=250, level_range={40, 50}}, autoreq=true}, }, resolvers.drops{chance=100, nb=1, {defined="ORB_DRAGON"} }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/grushnak-pride/npcs.lua b/game/modules/tome/data/zones/grushnak-pride/npcs.lua index ac2a439acadc0abd559c09ad88408b8191bbce22..5fa18ef828b7812dcb208bcd3582b76ef3d23c6d 100644 --- a/game/modules/tome/data/zones/grushnak-pride/npcs.lua +++ b/game/modules/tome/data/zones/grushnak-pride/npcs.lua @@ -55,7 +55,7 @@ newEntity{ base="BASE_NPC_ORC_GRUSHNAK", define_as = "GRUSHNAK", -- Commented because this can generate rings of invis or amulets of telepathy and drain the life of the boss -- {type="jewelry", subtype="amulet", ego_chance=100, autoreq=true}, -- {type="jewelry", subtype="ring", ego_chance=100, autoreq=true}, - {type="jewelry", subtype="ring", defined="PRIDE_GLORY", autoreq=true}, + {type="jewelry", subtype="ring", defined="PRIDE_GLORY", random_art_replace={chance=75, rarity=250, level_range={40, 50}}, autoreq=true}, }, resolvers.drops{chance=100, nb=1, {defined="ORB_DESTRUCTION"} }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/maze/npcs.lua b/game/modules/tome/data/zones/maze/npcs.lua index 9f8f7d1111b3f8d49e24f1121f8ca3985cfdf840..e69167929fc9fd42607ace36ba8d08dc6b2de7d6 100644 --- a/game/modules/tome/data/zones/maze/npcs.lua +++ b/game/modules/tome/data/zones/maze/npcs.lua @@ -50,7 +50,7 @@ newEntity{ define_as = "MINOTAUR_MAZE", body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, HEAD=1, }, resolvers.equip{ {type="weapon", subtype="battleaxe", autoreq=true}, - {type="armor", subtype="head", defined="HELM_OF_HAMMERHAND", autoreq=true}, + {type="armor", subtype="head", defined="HELM_OF_HAMMERHAND", random_art_replace={chance=75, rarity=200, level_range={12, 22}}, autoreq=true}, }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, @@ -87,7 +87,7 @@ newEntity{ base = "BASE_NPC_SPIDER", define_as = "NIMISIL", instakill_immune = 1, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, - resolvers.drops{chance=100, nb=1, {defined="LUNAR_SHIELD"} }, + resolvers.drops{chance=100, nb=1, {defined="LUNAR_SHIELD", random_art_replace={chance=75, rarity=220, level_range={40, 50}}} }, combat_armor = 25, combat_def = 33, diff --git a/game/modules/tome/data/zones/old-forest/npcs.lua b/game/modules/tome/data/zones/old-forest/npcs.lua index e7ee4603722a54c0882046ee97c8add9073d848c..6f28db77d8330c9caf04100efd91557fa35918ca 100644 --- a/game/modules/tome/data/zones/old-forest/npcs.lua +++ b/game/modules/tome/data/zones/old-forest/npcs.lua @@ -55,7 +55,7 @@ newEntity{ define_as = "OLD_MAN_WILLOW", resists = { [DamageType.FIRE] = -50 }, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - equipment = resolvers.equip{ {type="armor", subtype="shield", defined="OLD_MAN_WILLOW_SHIELD", autoreq=true}, }, + equipment = resolvers.equip{ {type="armor", subtype="shield", defined="OLD_MAN_WILLOW_SHIELD", random_art_replace={chance=75, rarity=200, level_range={10, 20}}, autoreq=true}, }, drops = resolvers.drops{chance=100, nb=5, {ego_chance=100} }, resolvers.talents{ diff --git a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua index 3a51bfb656334ea8e4dbd1db283b7e9407f251c2..c164698cf6e08ee92ba8220b400b986eaa4186c7 100644 --- a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua +++ b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua @@ -52,7 +52,7 @@ newEntity{ base="BASE_NPC_ORC_RAK_SHOR", define_as = "RAK_SHOR", resolvers.equip{ {type="weapon", subtype="staff", ego_change=100, autoreq=true}, - {type="armor", subtype="cloth", defined="BLACK_ROBE", autoreq=true}, + {type="armor", subtype="cloth", defined="BLACK_ROBE", random_art_replace={chance=75, rarity=250, level_range={40, 50}}, autoreq=true}, }, resolvers.drops{chance=20, nb=1, {defined="JEWELER_TOME"} }, resolvers.drops{chance=100, nb=1, {defined="ORB_UNDEATH"} }, diff --git a/game/modules/tome/data/zones/reknor/npcs.lua b/game/modules/tome/data/zones/reknor/npcs.lua index 26fd58c3b882cc87cd9d2dad71a8fca2ee60bca3..cdcab34dd602349180c16fd0f8a64fe36941cc4c 100644 --- a/game/modules/tome/data/zones/reknor/npcs.lua +++ b/game/modules/tome/data/zones/reknor/npcs.lua @@ -167,7 +167,7 @@ newEntity{ define_as = "LITHFENGEL", -- Lord of Ash; backup guardian body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, resolvers.equip{ - {type="weapon", subtype="waraxe", defined="MALEDICTION", autoreq=true}, + {type="weapon", subtype="waraxe", defined="MALEDICTION", random_art_replace={chance=75, rarity=200, level_range={35, 45}}, autoreq=true}, }, resolvers.drops{chance=100, nb=4, {ego_chance=100} }, resolvers.drops{chance=100, nb=1, {defined="ATHAME_WEST"} }, diff --git a/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua b/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua index 650646f8f62db991be7750807decda0413cdb555..6b7a9057603c50d46d2457308fd37f5f66f36ab2 100644 --- a/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua +++ b/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua @@ -48,7 +48,7 @@ newEntity{ define_as = "SHADE", move_others=true, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - equipment = resolvers.equip{ {type="weapon", subtype="staff", defined="STAFF_KOR", autoreq=true}, {type="armor", subtype="light", autoreq=true}, }, + equipment = resolvers.equip{ {type="weapon", subtype="staff", defined="STAFF_KOR", random_art_replace={chance=75, rarity=150, level_range={1, 10}}, autoreq=true}, {type="armor", subtype="light", autoreq=true}, }, drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} }, resolvers.talents{ @@ -98,7 +98,7 @@ newEntity{ define_as = "KOR_FURY", resolvers.equip{ {type="weapon", subtype="staff", ego_chance=100, autoreq=true}, {type="armor", subtype="light", autoreq=true}, - {type="jewelry", subtype="amulet", defined="VOX", autoreq=true}, + {type="jewelry", subtype="amulet", defined="VOX", random_art_replace={chance=75, rarity=220, level_range={40, 50}}, autoreq=true}, }, resolvers.drops{chance=100, nb=3, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/telmur/npcs.lua b/game/modules/tome/data/zones/telmur/npcs.lua index 23a21d4b521021318115648c801ca58842243715..24a2bff5e545ac98568dabb748a92fe38c3d91ad 100644 --- a/game/modules/tome/data/zones/telmur/npcs.lua +++ b/game/modules/tome/data/zones/telmur/npcs.lua @@ -58,7 +58,7 @@ newEntity{ define_as = "SHADE_OF_TELOS", body = { INVEN = 10, MAINHAND=1, OFFHAND=1, }, resolvers.equip{ - {type="weapon", subtype="staff", defined="TELOS_TOP_HALF", autoreq=true}, + {type="weapon", subtype="staff", defined="TELOS_TOP_HALF", random_art_replace={chance=75, rarity=190, level_range={40, 50}}, autoreq=true}, {type="weapon", subtype="staff", defined="TELOS_BOTTOM_HALF", autoreq=true}, }, resolvers.drops{chance=100, nb=2, {type="wand"} }, diff --git a/game/modules/tome/data/zones/tol-falas/npcs.lua b/game/modules/tome/data/zones/tol-falas/npcs.lua index 398550c583791830cf2aaabb62ed4b548d187f1a..52d8cd8e5a999d2d4089c46af067d320bc845433 100644 --- a/game/modules/tome/data/zones/tol-falas/npcs.lua +++ b/game/modules/tome/data/zones/tol-falas/npcs.lua @@ -51,7 +51,7 @@ newEntity{ define_as = "THE_MASTER", equipment = resolvers.equip{ {type="weapon", subtype="greatsword", ego_chance=100, autoreq=true}, {type="armor", subtype="heavy", ego_chance=50, autoreq=true}, - {type="jewelry", subtype="amulet", defined="AMULET_DREAD", autoreq=true}, + {type="jewelry", subtype="amulet", defined="AMULET_DREAD", random_art_replace={chance=75, rarity=210, level_range={25, 35}}, autoreq=true}, }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, resolvers.drops{chance=100, nb=1, {type="weapon", subtype="staff", defined="STAFF_ABSORPTION"} }, @@ -127,7 +127,7 @@ newEntity{ define_as = "PALE_DRAKE", {type="armor", subtype="cloth", ego_chance=50, autoreq=true}, }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, - resolvers.drops{chance=100, nb=1, {defined="RUNED_SKULL"} }, + resolvers.drops{chance=100, nb=1, {defined="RUNED_SKULL", random_art_replace={chance=75, rarity=250, level_range={40, 50}}} }, summon = { {type="undead", subtype="bone giant", special_rarity="bonegiant_rarity", number=2, hasxp=true}, diff --git a/game/modules/tome/data/zones/trollshaws/npcs.lua b/game/modules/tome/data/zones/trollshaws/npcs.lua index 31b6b46c213e972e11704b413cab47d2df12ecff..4bcb402075f09bd84914879ed42f3b7fe41f1ea9 100644 --- a/game/modules/tome/data/zones/trollshaws/npcs.lua +++ b/game/modules/tome/data/zones/trollshaws/npcs.lua @@ -49,8 +49,8 @@ newEntity{ define_as = "TROLL_BILL", move_others=true, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - equipment = resolvers.equip{ {type="weapon", subtype="greatmaul", defined="GREATMAUL_BILL_TRUNK", autoreq=true}, }, - drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} }, + resolvers.equip{ {type="weapon", subtype="greatmaul", defined="GREATMAUL_BILL_TRUNK", random_art_replace={chance=75, rarity=150, level_range={1, 10}}, autoreq=true}, }, + resolvers.drops{chance=100, nb=3, {ego_chance=100} }, resolvers.talents{ [Talents.T_STUN]=2, @@ -87,7 +87,7 @@ newEntity{ define_as = "ALUIN", body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, resolvers.equip{ {type="weapon", subtype="waraxe", ego_chance=100, autoreq=true}, - {type="armor", subtype="shield", defined="SANGUINE_SHIELD", autoreq=true}, + {type="armor", subtype="shield", defined="SANGUINE_SHIELD", random_art_replace={chance=65, rarity=220, level_range={35, 45}}, autoreq=true}, {type="armor", subtype="massive", ego_chance=100, autoreq=true}, }, resolvers.drops{chance=100, nb=3, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/valley-moon/npcs.lua b/game/modules/tome/data/zones/valley-moon/npcs.lua index 7ededba6492d888534014236678b1d08dcfe1380..853c5b4ef76434a5c96a28a00745e87bb4f558c4 100644 --- a/game/modules/tome/data/zones/valley-moon/npcs.lua +++ b/game/modules/tome/data/zones/valley-moon/npcs.lua @@ -45,7 +45,7 @@ newEntity{ define_as = "CORRUPTED_BALROG", body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, resolvers.equip{ - {type="weapon", subtype="whip", defined="WHIP_GOTHMOG", autoreq=true}, + {type="weapon", subtype="whip", defined="WHIP_GOTHMOG", random_art_replace={chance=75, rarity=290, level_range={40, 50}}, autoreq=true}, }, resolvers.drops{chance=100, nb=3, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/vor-armoury/npcs.lua b/game/modules/tome/data/zones/vor-armoury/npcs.lua index 8e8a2c4b1a75e502f67b365fea247f8ec16a32da..808e49afc8ff497ddeee7b8582a117ea8d0b9998 100644 --- a/game/modules/tome/data/zones/vor-armoury/npcs.lua +++ b/game/modules/tome/data/zones/vor-armoury/npcs.lua @@ -52,7 +52,7 @@ newEntity{ base="BASE_NPC_ORC_GRUSHNAK", define_as = "GNARG", body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, HEAD=1 }, resolvers.equip{ - {type="weapon", subtype="greatsword", defined="MURDERBLADE", autoreq=true}, + {type="weapon", subtype="greatsword", defined="MURDERBLADE", random_art_replace={chance=75, rarity=250, level_range={35, 45}}, autoreq=true}, {type="armor", subtype="massive", ego_change=100, autoreq=true}, }, resolvers.drops{chance=100, nb=5, {ego_chance=100} }, diff --git a/game/modules/tome/data/zones/vor-pride/npcs.lua b/game/modules/tome/data/zones/vor-pride/npcs.lua index 17808f721272dbc2f474fbe72a99ead60d0d9a55..b888b232efff8a903b5356918f90773945c0f829 100644 --- a/game/modules/tome/data/zones/vor-pride/npcs.lua +++ b/game/modules/tome/data/zones/vor-pride/npcs.lua @@ -47,7 +47,7 @@ newEntity{ base="BASE_NPC_ORC_VOR", define_as = "VOR", resolvers.equip{ {type="weapon", subtype="staff", ego_change=100, autoreq=true}, {type="armor", subtype="cloth", ego_change=100, autoreq=true}, - {type="armor", subtype="head", defined="CROWN_ELEMENTS", autoreq=true}, + {type="armor", subtype="head", defined="CROWN_ELEMENTS", random_art_replace={chance=75, rarity=250, level_range={40, 50}}, autoreq=true}, }, resolvers.drops{chance=100, nb=1, {defined="ORB_ELEMENTS"} }, resolvers.drops{chance=20, nb=1, {defined="JEWELER_TOME"} }, diff --git a/game/modules/tome/resolvers.lua b/game/modules/tome/resolvers.lua index 00f3c6eb9572ac61ecd77627c9bf2f34bd914040..9e81fe55dff95d0dfd918e3a64a95c7f74d7c904 100644 --- a/game/modules/tome/resolvers.lua +++ b/game/modules/tome/resolvers.lua @@ -56,6 +56,10 @@ function resolvers.calc.equip(t, e) game.zone:addEntity(game.level, o, "object") if t[1].id then o:identify(t[1].id) end + + if filter.random_art_replace then + o.__special_boss_drop = filter.random_art_replace + end end end -- Delete the origin field @@ -115,6 +119,10 @@ function resolvers.calc.drops(t, e) game.zone:addEntity(game.level, o, "object") if t.id then o:identify(t.id) end + + if filter.random_art_replace then + o.__special_boss_drop = filter.random_art_replace + end end end -- Delete the origin field