From 9ca0e0ef40e9726fd884018610edf6d2470006f9 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sun, 7 Nov 2010 05:01:18 +0000 Subject: [PATCH] Added a new rank between elite & boss for creatutes: unique Added a new random unique creature git-svn-id: http://svn.net-core.org/repos/t-engine4@1809 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/modules/tome/class/Actor.lua | 20 ++++-- game/modules/tome/class/Game.lua | 20 +----- game/modules/tome/data/general/npcs/ant.lua | 2 +- .../tome/data/general/npcs/aquatic_demon.lua | 2 +- game/modules/tome/data/general/npcs/bird.lua | 2 +- .../modules/tome/data/general/npcs/canine.lua | 2 +- .../data/general/npcs/multihued-drake.lua | 70 ++++++++++++++++++- 7 files changed, 90 insertions(+), 28 deletions(-) diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index c460468ab4..058aee184a 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -248,6 +248,8 @@ function _M:act() -- Ok reset the seen cache self:resetCanSeeCache() + if self.on_act then self:on_act() end + return true end @@ -406,6 +408,7 @@ function _M:getRankStatAdjust() if self.rank == 1 then return -1 elseif self.rank == 2 then return -0.5 elseif self.rank == 3 then return 0 + elseif self.rank == 3.5 then return 1 elseif self.rank == 4 then return 1 elseif self.rank >= 5 then return 1 else return 0 @@ -416,6 +419,7 @@ function _M:getRankLevelAdjust() if self.rank == 1 then return -1 elseif self.rank == 2 then return 0 elseif self.rank == 3 then return 1 + elseif self.rank == 3.5 then return 2 elseif self.rank == 4 then return 3 elseif self.rank >= 5 then return 4 else return 0 @@ -427,6 +431,7 @@ function _M:getRankLifeAdjust(value) if self.rank == 1 then return value * (level_adjust - 0.2) elseif self.rank == 2 then return value * (level_adjust - 0.1) elseif self.rank == 3 then return value * (level_adjust + 0.1) + elseif self.rank == 3.5 then return value * (level_adjust + 0.3) elseif self.rank == 4 then return value * (level_adjust + 0.3) elseif self.rank >= 5 then return value * (level_adjust + 0.5) else return 0 @@ -437,6 +442,7 @@ function _M:getRankResistAdjust() if self.rank == 1 then return 0.4, 0.9 elseif self.rank == 2 then return 0.5, 1.5 elseif self.rank == 3 then return 0.8, 1.5 + elseif self.rank == 3.5 then return 0.9, 1.5 elseif self.rank == 4 then return 0.9, 1.5 elseif self.rank >= 5 then return 0.9, 1.5 else return 0 @@ -448,6 +454,7 @@ function _M:TextRank() if self.rank == 1 then rank, color = "critter", "#C0C0C0#" elseif self.rank == 2 then rank, color = "normal", "#ANTIQUE_WHITE#" elseif self.rank == 3 then rank, color = "elite", "#YELLOW#" + elseif self.rank == 3.5 then rank, color = "unique", "#SANDY_BROWN#" elseif self.rank == 4 then rank, color = "boss", "#ORANGE#" elseif self.rank >= 5 then rank, color = "elite boss", "#GOLD#" end @@ -795,14 +802,14 @@ function _M:die(src) hateMessage = "#F53CBE#You have taken the life of an experienced foe!" end - if self.rank == 3 then - -- elite bonus - hateGain = hateGain * 2 - hateMessage = "#F53CBE#An elite foe has fallen to your hate!" - elseif self.rank >= 4 then + if self.rank >= 4 then -- boss bonus hateGain = hateGain * 4 hateMessage = "#F53CBE#Your hate has conquered a great adversary!" + elseif self.rank >= 3 then + -- elite bonus + hateGain = hateGain * 2 + hateMessage = "#F53CBE#An elite foe has fallen to your hate!" end hateGain = math.min(hateGain, 10) @@ -1490,6 +1497,7 @@ function _M:worthExp(target) if self.rank == 1 then mult = 0.6 elseif self.rank == 2 then mult = 0.8 elseif self.rank == 3 then mult = 3 + elseif self.rank == 3.5 then mult = 15 elseif self.rank == 4 then mult = 60 elseif self.rank >= 5 then mult = 120 end @@ -1500,6 +1508,7 @@ function _M:worthExp(target) if self.rank == 1 then mult = 2 elseif self.rank == 2 then mult = 2 elseif self.rank == 3 then mult = 3.5 + elseif self.rank == 3.5 then mult = 5 elseif self.rank == 4 then mult = 6 elseif self.rank >= 5 then mult = 6.5 end @@ -1644,6 +1653,7 @@ function _M:updateEffectDuration(dur, what) -- Rank reduction: below elite = none; elite = 1, boss = 2, elite boss = 3 local rankmod = 0 if self.rank == 3 then rankmod = 25 + elseif self.rank == 3.5 then rankmod = 40 elseif self.rank == 4 then rankmod = 45 elseif self.rank == 5 then rankmod = 75 end diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 41a471456f..a27d301172 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -670,24 +670,8 @@ function _M:setupCommands() end, [{"_g","ctrl"}] = function() if config.settings.tome.cheat then ---[[ - local a = mod.class.NPC.new{} - a:replaceWith(self.player:cloneFull()) - mod.class.NPC.castAs(a) - engine.interface.ActorAI.init(a, a) - a.no_drops = true - a.energy.value = 0 - a.player = nil - a.rank = 4 - a.name = "Shadow of "..a.name - a.color_r = 150 a.color_g = 150 a.color_b = 150 - a._mo:invalidate() - a.ai = "dumb_talented_simple" - a.ai_state = {talent_in=1} - a.faction = "enemies" - self.zone:addEntity(self.level, a, "actor", self.player.x+1, self.player.y) ---]] - self:changeLevel(1, "ruined-dungeon") + local m = game.zone:makeEntityByName(game.level, "actor", "TEST") + game.zone:addEntity(game.level, m, "actor", game.player.x, game.player.y+1) end end, } diff --git a/game/modules/tome/data/general/npcs/ant.lua b/game/modules/tome/data/general/npcs/ant.lua index 203c06a358..9c4f019990 100644 --- a/game/modules/tome/data/general/npcs/ant.lua +++ b/game/modules/tome/data/general/npcs/ant.lua @@ -157,7 +157,7 @@ newEntity{ base = "BASE_NPC_ANT", name = "Queen Ant", color=colors.VIOLET, unique=true, desc = "Queen of the ants, queen of the biting death!", level_range = {25, nil}, exp_worth = 2, - rank = 4, + rank = 3.5, size_category = 3, rarity = 50, max_life = 230, life_rating=12, diff --git a/game/modules/tome/data/general/npcs/aquatic_demon.lua b/game/modules/tome/data/general/npcs/aquatic_demon.lua index ba80b657f2..d5818c94d7 100644 --- a/game/modules/tome/data/general/npcs/aquatic_demon.lua +++ b/game/modules/tome/data/general/npcs/aquatic_demon.lua @@ -62,7 +62,7 @@ newEntity{ base = "BASE_NPC_AQUATIC_DEMON", desc = "Walrog, the lord of Water", level_range = {20, 30}, exp_worth = 1, rarity = 50, - rank = 4, + rank = 3.5, life_rating = 16, autolevel = "warriormage", combat_armor = 45, combat_def = 0, diff --git a/game/modules/tome/data/general/npcs/bird.lua b/game/modules/tome/data/general/npcs/bird.lua index 66466382a2..2560b25621 100644 --- a/game/modules/tome/data/general/npcs/bird.lua +++ b/game/modules/tome/data/general/npcs/bird.lua @@ -51,7 +51,7 @@ newEntity{ base="BASE_NPC_BIRD", define_as = "NPC_PHOENIX", max_mana = 1000, mana_regen = 20, life_regen = -15, - rank = 4, + rank = 3.5, no_breath = 1, size_category = 3, diff --git a/game/modules/tome/data/general/npcs/canine.lua b/game/modules/tome/data/general/npcs/canine.lua index 6afdcacef7..e223d86001 100644 --- a/game/modules/tome/data/general/npcs/canine.lua +++ b/game/modules/tome/data/general/npcs/canine.lua @@ -110,7 +110,7 @@ newEntity{ base = "BASE_NPC_CANINE", name = "Rungof the Warg Titan", color=colors.VIOLET, unique=true, image="npc/canine_rungof.png", desc = [[It is a large wolf with eyes full of cunning, only 3 times bigger than a normal warg.]], level_range = {20, nil}, exp_worth = 2, - rank = 4, + rank = 3.5, size_category = 4, rarity = 50, max_life = 220, diff --git a/game/modules/tome/data/general/npcs/multihued-drake.lua b/game/modules/tome/data/general/npcs/multihued-drake.lua index 8ecf19f35f..85a4b80c8c 100644 --- a/game/modules/tome/data/general/npcs/multihued-drake.lua +++ b/game/modules/tome/data/general/npcs/multihued-drake.lua @@ -96,7 +96,7 @@ newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE", } newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE", - name = "greater multi-hued wyrm", color=colors.VIOLET, display="D", + name = "greater multi-hued wyrm", color=colors.PURPLE, display="D", desc = [[An old and powerful multi-hued drake, armed with many deadly breath weapons and nasty claws.]], level_range = {35, nil}, exp_worth = 1, rarity = 8, @@ -130,3 +130,71 @@ newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE", [Talents.T_ACID_BREATH]=13, }, } + +newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE", define_as="TEST", + unique = true, + name = "Ureslak the Prismatic", color=colors.VIOLET, display="D", + desc = [[A huge multi-hued drake. It seems to shift color rapidly.]], + level_range = {35, nil}, exp_worth = 2, + rarity = 50, + rank = 3.5, + max_life = resolvers.rngavg(320,350), + combat_armor = 33, combat_def = 40, + on_melee_hit = {[DamageType.FIRE]=resolvers.mbonus(10, 5), [DamageType.COLD]=resolvers.mbonus(10, 5), [DamageType.LIGHTNING]=resolvers.mbonus(10, 5), [DamageType.ACID]=resolvers.mbonus(10, 5)}, + combat = { dam=resolvers.rngavg(35,150), atk=resolvers.rngavg(25,130), apr=32, dammod={str=1.1} }, + + no_auto_resists = true, + color_switch = 2, + resists = { all=50, [DamageType.FIRE] = 100, [DamageType.COLD] = -100 }, + resolvers.talents{ [Talents.T_FIRE_BREATH]=15, [Talents.T_FLAME]=7 }, + + stats = { str=20, dex=20, mag=80, con=16 }, + + talent_cd_reduction={[Talents.T_MANATHRUST]=4}, + + colors = { + {"red", { + resists = { all=50, [DamageType.FIRE] = 100, [DamageType.COLD] = -100 }, + talents = { [Talents.T_EQUILIBRIUM_POOL]=1, [Talents.T_MANA_POOL]=1, [Talents.T_FIRE_BREATH]=15, [Talents.T_FLAME]=7 }, + }}, + {"white", { + resists = { all=50, [DamageType.COLD] = 100, [DamageType.FIRE] = -100 }, + talents = { [Talents.T_EQUILIBRIUM_POOL]=1, [Talents.T_MANA_POOL]=1, [Talents.T_ICE_BREATH]=15, [Talents.T_ICE_SHARDS]=7 }, + }}, + {"blue", { + resists = { all=50, [DamageType.LIGHTNING] = 100, [DamageType.PHYSICAL] = -100 }, + talents = { [Talents.T_EQUILIBRIUM_POOL]=1, [Talents.T_MANA_POOL]=1, [Talents.T_LIGHTNING_BREATH]=15, [Talents.T_SHOCK]=7 }, + }}, + {"green", { + resists = { all=50, [DamageType.NATURE] = 100, [DamageType.BLIGHT] = -100 }, + talents = { [Talents.T_EQUILIBRIUM_POOL]=1, [Talents.T_MANA_POOL]=1, [Talents.T_POISON_BREATH]=15, [Talents.T_SPIT_POISON]=7 }, + }}, + {"dark", { + resists = { all=50, [DamageType.DARKNESS] = 100, [DamageType.LIGHT] = -100 }, + talents = { [Talents.T_NEGATIVE_POOL]=1, [Talents.T_STARFALL]=7, [Talents.T_MOONLIGHT_RAY]=7 }, + }}, + {"violet", { + resists = { all=-50 }, + talents = { [Talents.T_MANA_POOL]=1, [Talents.T_MANATHRUST]=12 }, + }}, + }, + + on_act = function(self) + self.color_switch = self.color_switch - 1 + if self.color_switch <= 0 then + self.color_switch = 2 + -- Reset cooldowns + self.talents_cd = {} + self:incEquilibrium(-100) + self:incMana(100) + self:incNegative(100) + + -- Assign talents & resists + local t = rng.table(self.colors) + self.resists = t[2].resists + self.talents = t[2].talents + self.changed = true + game.logSeen(self, "#YELLOW#%s's skin turns %s!", self.name:capitalize(), t[1]) + end + end, +} -- GitLab