diff --git a/game/modules/tome/data/general/npcs/orc-vor.lua b/game/modules/tome/data/general/npcs/orc-vor.lua new file mode 100644 index 0000000000000000000000000000000000000000..e68ba75ec73b48d8fb879a2d08eae385844e5836 --- /dev/null +++ b/game/modules/tome/data/general/npcs/orc-vor.lua @@ -0,0 +1,140 @@ +-- ToME - Tales of Middle-Earth +-- Copyright (C) 2009, 2010 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_ORC_VOR", + type = "humanoid", subtype = "orc", + display = "o", color=colors.RED, + faction = "orc-pride", + + combat = { dam=resolvers.rngavg(5,12), atk=2, apr=6, physspeed=2 }, + + body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 }, + resolvers.drops{chance=20, nb=1, {} }, + resolvers.drops{chance=10, nb=1, {type="money"} }, + infravision = 20, + lite = 2, + + max_mana = 400, + life_rating = 11, + rank = 2, + size_category = 3, + + open_door = true, + + autolevel = "caster", + ai = "dumb_talented_simple", ai_state = { talent_in=1, }, + energy = { mod=1 }, + stats = { str=10, dex=8, mag=20, con=16 }, +} + +newEntity{ base = "BASE_NPC_ORC_VOR", + name = "orc pyromancer", color=colors.RED, + desc = [[An orc dressed in bright red robes. He mumbles is a harsh tongue.]], + level_range = {35, nil}, exp_worth = 1, + rarity = 6, + max_life = resolvers.rngavg(100,110), life_rating = 7, + resolvers.equip{ + {type="weapon", subtype="staff", autoreq=true}, + {type="armor", subtype="cloth", autoreq=true}, + }, + combat_armor = 0, combat_def = 5, + + resolvers.talents{ + [Talents.T_FLAME]=4, + [Talents.T_FLAMESHOCK]=3, + [Talents.T_FIREFLASH]=3, + [Talents.T_SPELL_SHAPING]=3, + [Talents.T_PHASE_DOOR]=1, + }, +} + +newEntity{ base = "BASE_NPC_ORC_VOR", + name = "orc high pyromancer", color=colors.LIGHT_RED, + desc = [[An orc dressed in bright red robes. He mumbles is a harsh tongue.]], + level_range = {37, nil}, exp_worth = 1, + rarity = 10, + max_life = resolvers.rngavg(100,110), life_rating = 10, + resolvers.equip{ + {type="weapon", subtype="staff", autoreq=true}, + {type="armor", subtype="cloth", autoreq=true}, + }, + combat_armor = 0, combat_def = 5, + rank = 3, + + resolvers.talents{ + [Talents.T_FLAME]=5, + [Talents.T_FLAMESHOCK]=5, + [Talents.T_FIREFLASH]=5, + [Talents.T_INFERNO]=5, + [Talents.T_BLASTWAVE]=5, + [Talents.T_DANCING_FIRES]=5, + [Talents.T_COMBUST]=5, + [Talents.T_SPELL_SHAPING]=5, + [Talents.T_ESSENCE_OF_SPEED]=1, + }, +} + +newEntity{ base = "BASE_NPC_ORC_VOR", + name = "orc cryomancer", color=colors.BLUE, + desc = [[An orc dressed in cold blue robes. He mumbles is a harsh tongue.]], + level_range = {35, nil}, exp_worth = 1, + rarity = 7, + max_life = resolvers.rngavg(100,110), life_rating = 10, + resolvers.equip{ + {type="weapon", subtype="staff", autoreq=true}, + {type="armor", subtype="cloth", autoreq=true}, + }, + combat_armor = 0, combat_def = 5, + + resolvers.talents{ + [Talents.T_FREEZE]=4, + [Talents.T_ICE_STORM]=5, + [Talents.T_TIDAL_WAVE]=3, + [Talents.T_SPELL_SHAPING]=3, + [Talents.T_PHASE_DOOR]=1, + }, +} + +newEntity{ base = "BASE_NPC_ORC_VOR", + name = "orc high cryomancer", color=colors.LIGHT_BLUE, + desc = [[An orc dressed in cold blue robes. He mumbles is a harsh tongue.]], + level_range = {37, nil}, exp_worth = 1, + rarity = 10, + max_life = resolvers.rngavg(100,110), life_rating = 10, + resolvers.equip{ + {type="weapon", subtype="staff", autoreq=true}, + {type="armor", subtype="cloth", autoreq=true}, + }, + combat_armor = 0, combat_def = 5, + rank = 3, + + resolvers.talents{ + [Talents.T_FREEZE]=5, + [Talents.T_ICE_STORM]=5, + [Talents.T_TIDAL_WAVE]=5, + [Talents.T_ICE_SHARDS]=5, + [Talents.T_FROZEN_GROUND]=5, + [Talents.T_SPELL_SHAPING]=5, + [Talents.T_PHASE_DOOR]=1, + [Talents.T_ESSENCE_OF_SPEED]=1, + }, +} diff --git a/game/modules/tome/data/talents/spells/spells.lua b/game/modules/tome/data/talents/spells/spells.lua index 50a7eb2c122262078e2f55082bae2b6db078e5ea..a647eb7e0be025513945f93e373b043031823f02 100644 --- a/game/modules/tome/data/talents/spells/spells.lua +++ b/game/modules/tome/data/talents/spells/spells.lua @@ -19,10 +19,17 @@ -- Archmage spells newTalentType{ type="spell/arcane", name = "arcane", description = "Arcane manipulates the raw magic energies to shape them into both offensive and defensive spells." } + +-- Elemental spells newTalentType{ type="spell/fire", name = "fire", description = "Harness the power of fire to burn your foes to ashes." } +newTalentType{ type="spell/wildfire", name = "wildfire", description = "Harness the power of wildfire to burn your foes to ashes." } newTalentType{ type="spell/earth", name = "earth", description = "Harness the power of the earth to protect and destroy." } newTalentType{ type="spell/water", name = "water", description = "Harness the power of water to drown your foes." } +newTalentType{ type="spell/ice", name = "ice", description = "Harness the power of ice to freeze and shatter your foes." } newTalentType{ type="spell/air", name = "air", description = "Harness the power of the air to fry your foes." } +newTalentType{ type="spell/storm", name = "storm", description = "Harness the power of the storm to incinerate your foes." } + +-- Various other magic schools newTalentType{ type="spell/conveyance", name = "conveyance", generic = true, description = "Conveyance is the school of travel. It allows you to travel faster and to track others." } newTalentType{ type="spell/nature", name = "nature", generic = true, description = "Summons the power of nature to rejuvenate yourself and the world." } newTalentType{ type="spell/meta", name = "meta", description = "Meta spells alter the working of magic itself." } @@ -66,9 +73,12 @@ spells_req5 = { load("/data/talents/spells/arcane.lua") load("/data/talents/spells/fire.lua") +load("/data/talents/spells/wildfire.lua") load("/data/talents/spells/earth.lua") load("/data/talents/spells/water.lua") +load("/data/talents/spells/ice.lua") load("/data/talents/spells/air.lua") +load("/data/talents/spells/storm.lua") load("/data/talents/spells/conveyance.lua") load("/data/talents/spells/nature.lua") load("/data/talents/spells/meta.lua") diff --git a/game/modules/tome/data/talents/spells/wildfire.lua b/game/modules/tome/data/talents/spells/wildfire.lua new file mode 100644 index 0000000000000000000000000000000000000000..c3a923e6219fc60cf7b03405db4a4f2f3c94424a --- /dev/null +++ b/game/modules/tome/data/talents/spells/wildfire.lua @@ -0,0 +1,106 @@ +-- ToME - Tales of Middle-Earth +-- Copyright (C) 2009, 2010 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 + +newTalent{ + name = "Blastwave", + type = {"spell/wildfire",1}, + require = spells_req1, + points = 5, + mana = 12, + cooldown = 3, + tactical = { + ATTACK = 10, + }, + range = 20, + reflectable = true, + action = function(self, t) + game:playSoundNear(self, "talents/fire") + return true + end, + info = function(self, t) + return ([[Conjures up a bolt of fire, setting the target ablaze and doing %0.2f fire damage over 3 turns. + The damage will increase with the Magic stat]]):format(self:combatTalentSpellDamage(t, 25, 290)) + end, +} + +newTalent{ + name = "Dancing Fires", + type = {"spell/wildfire",2}, + require = spells_req2, + points = 5, + mana = 12, + cooldown = 3, + tactical = { + ATTACK = 10, + }, + range = 20, + reflectable = true, + action = function(self, t) + game:playSoundNear(self, "talents/fire") + return true + end, + info = function(self, t) + return ([[Conjures up a bolt of fire, setting the target ablaze and doing %0.2f fire damage over 3 turns. + The damage will increase with the Magic stat]]):format(self:combatTalentSpellDamage(t, 25, 290)) + end, +} + +newTalent{ + name = "Combust", + type = {"spell/wildfire",3}, + require = spells_req3, + points = 5, + mana = 12, + cooldown = 3, + tactical = { + ATTACK = 10, + }, + range = 20, + reflectable = true, + action = function(self, t) + game:playSoundNear(self, "talents/fire") + return true + end, + info = function(self, t) + return ([[Conjures up a bolt of fire, setting the target ablaze and doing %0.2f fire damage over 3 turns. + The damage will increase with the Magic stat]]):format(self:combatTalentSpellDamage(t, 25, 290)) + end, +} + +newTalent{ + name = "Wildfire", + type = {"spell/wildfire",4}, + require = spells_req4, + points = 5, + mana = 12, + cooldown = 3, + tactical = { + ATTACK = 10, + }, + range = 20, + reflectable = true, + action = function(self, t) + game:playSoundNear(self, "talents/fire") + return true + end, + info = function(self, t) + return ([[Conjures up a bolt of fire, setting the target ablaze and doing %0.2f fire damage over 3 turns. + The damage will increase with the Magic stat]]):format(self:combatTalentSpellDamage(t, 25, 290)) + end, +} 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 62e9151169ac98c182961dd12671f8022624912d..05f6c747c0ed9bbe238497682d56833acfced8e2 100644 --- a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua +++ b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua @@ -44,7 +44,6 @@ newEntity{ base="BASE_NPC_ORC_RAK_SHOR", define_as = "RAK_SHOR", ai = "dumb_talented_simple", ai_state = { talent_in=2, ai_move="move_astar", }, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - resolvers.drops{chance=100, nb=3, {ego_chance=100} }, resolvers.equip{ {type="weapon", subtype="staff", ego_change=100, autoreq=true}, diff --git a/game/modules/tome/data/zones/vor-pride/grids.lua b/game/modules/tome/data/zones/vor-pride/grids.lua new file mode 100644 index 0000000000000000000000000000000000000000..5451b7324d91e2649cf656ba29cdbab8d3c29d9f --- /dev/null +++ b/game/modules/tome/data/zones/vor-pride/grids.lua @@ -0,0 +1,22 @@ +-- ToME - Tales of Middle-Earth +-- Copyright (C) 2009, 2010 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 + +load("/data/general/grids/basic.lua") +load("/data/general/grids/sand.lua") +load("/data/general/grids/water.lua") diff --git a/game/modules/tome/data/zones/vor-pride/npcs.lua b/game/modules/tome/data/zones/vor-pride/npcs.lua new file mode 100644 index 0000000000000000000000000000000000000000..0bf4c5b7fda5da72e4bf2dedb6a9d5ea4853ba71 --- /dev/null +++ b/game/modules/tome/data/zones/vor-pride/npcs.lua @@ -0,0 +1,78 @@ +-- ToME - Tales of Middle-Earth +-- Copyright (C) 2009, 2010 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 + +load("/data/general/npcs/orc.lua", function(e) if e.rarity then e.rarity = e.rarity * 3 end e.make_escort = nil end) +load("/data/general/npcs/orc-vor.lua") + +local Talents = require("engine.interface.ActorTalents") + +newEntity{ base="BASE_NPC_ORC_VOR", define_as = "VOR", + name = "Vor, Grand Geomancer of the Pride", color=colors.VIOLET, unique = true, + desc = [[An old orc, wearing multi-colored robes. Ice shards fly around him, leaving a trail of fire and lightning bursts.]], + level_range = {40, 50}, exp_worth = 2, + rank = 4, + max_life = 250, life_rating = 19, fixed_rating = true, + infravision = 20, + stats = { str=12, dex=10, cun=12, mag=21, con=14 }, + move_others=true, + + combat_armor = 10, combat_def = 10, + + open_door = true, + + autolevel = "caster", + ai = "dumb_talented_simple", ai_state = { talent_in=1, ai_move="move_astar", }, + + body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, + + resolvers.equip{ + {type="weapon", subtype="staff", ego_change=100, autoreq=true}, + {type="armor", subtype="cloth", ego_change=100, autoreq=true}, + }, + resolvers.drops{chance=100, nb=5, {ego_chance=100} }, + + resolvers.talents{ + [Talents.T_FLAME]=5, + [Talents.T_FLAMESHOCK]=5, + [Talents.T_FIREFLASH]=5, + [Talents.T_INFERNO]=5, + [Talents.T_BLASTWAVE]=5, + [Talents.T_DANCING_FIRES]=5, + [Talents.T_COMBUST]=5, + + [Talents.T_FREEZE]=5, + [Talents.T_ICE_STORM]=5, + [Talents.T_TIDAL_WAVE]=5, + [Talents.T_ICE_SHARDS]=5, + [Talents.T_FROZEN_GROUND]=5, + + [Talents.T_LIGHTNING]=5, + [Talents.T_CHAIN_LIGHTNING]=5, + + [Talents.T_SPELL_SHAPING]=5, + [Talents.T_ESSENCE_OF_SPEED]=1, + }, + + on_die = function(self, who) + game.player:resolveSource():setQuestStatus("orc-pride", engine.Quest.COMPLETED, "rak-shor") + if not game.player:hasQuest("pre-mount-doom") then + game.player:grantQuest("pre-mount-doom") + end + end, +} diff --git a/game/modules/tome/data/zones/vor-pride/objects.lua b/game/modules/tome/data/zones/vor-pride/objects.lua new file mode 100644 index 0000000000000000000000000000000000000000..fa2a248859fd2853ba8bfb925d2ad8fda1c2e134 --- /dev/null +++ b/game/modules/tome/data/zones/vor-pride/objects.lua @@ -0,0 +1,38 @@ +-- ToME - Tales of Middle-Earth +-- Copyright (C) 2009, 2010 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 + +load("/data/general/objects/objects.lua") + +local Stats = require"engine.interface.ActorStats" + +newEntity{ base = "BASE_CLOTH_ARMOR", + define_as = "BLACK_ROBE", rarity=false, + name = "Black Robe", unique=true, + unided_name = "black robe", color=colors.DARK_GREY, + desc = [[A silk robe, darker than the darkest night sky, it radiates power.]], + cost = 500, + wielder = { + inc_stats = { [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 3 }, + see_invisible = 10, + blind_immune = 1, + combat_spellpower = 10, + combat_dam = 10, + combat_def = 6, + }, +} diff --git a/game/modules/tome/data/zones/vor-pride/zone.lua b/game/modules/tome/data/zones/vor-pride/zone.lua new file mode 100644 index 0000000000000000000000000000000000000000..4a78282de2ab9917690a50b7890b3d93c9d8cd8d --- /dev/null +++ b/game/modules/tome/data/zones/vor-pride/zone.lua @@ -0,0 +1,66 @@ +-- ToME - Tales of Middle-Earth +-- Copyright (C) 2009, 2010 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 + +return { + name = "Vor Pride", + level_range = {35, 40}, + level_scheme = "player", + max_level = 5, + 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 = 50, height = 50, + persistent = "zone", +-- all_remembered = true, + all_lited = true, + ambiant_music = "Bazaar of Tal-Mashad.ogg", + generator = { + map = { + class = "engine.generator.map.Town", + building_chance = 70, + max_building_w = 8, max_building_h = 8, + edge_entrances = {6,4}, + floor = "FLOOR", + external_floor = "SAND", + wall = "WALL", + up = "UP", + down = "DOWN", + door = "DOOR", + }, + actor = { + class = "engine.generator.actor.Random", + nb_npc = {20, 30}, + guardian = "VOR", + }, + object = { + class = "engine.generator.object.Random", + nb_object = {3, 6}, + }, + }, + post_process = function(level) + for uid, e in pairs(level.entities) do e.faction="orc-pride" end + end, + levels = + { + [1] = { + generator = { map = { + up = "UP_WILDERNESS_FAR_EAST", + }, }, + }, + }, +} diff --git a/ideas/spells.ods b/ideas/spells.ods index b9f96f06cedcec3b53a70c5b6bda8f4b5f4bc63c..cbb44d0ad3e8c04e03c027502aa913df90d59d02 100644 Binary files a/ideas/spells.ods and b/ideas/spells.ods differ