diff --git a/game/modules/tome/ai/worldnpcs.lua b/game/modules/tome/ai/worldnpcs.lua index e39a07dc8a343382399dd44d6fe417cfa01df42d..9710a80e2ce88011a1d8d8f2a88a10831de5df07 100644 --- a/game/modules/tome/ai/worldnpcs.lua +++ b/game/modules/tome/ai/worldnpcs.lua @@ -63,13 +63,13 @@ newAI("move_world_patrol", function(self) self.ai_state.route = game.level:pickSpot{type="patrol", subtype=self.ai_state.route_kind} local a = Astar.new(game.level.map, self) self.ai_state.route_path = a:calc(self.x, self.y, self.ai_state.route.x, self.ai_state.route.y) - print(self.name, "Selecting route!", self.ai_state.route_path, "from", self.x, self.y, "to", self.ai_state.route.x, self.ai_state.route.y) +-- print(self.name, "Selecting route!", self.ai_state.route_path, "from", self.x, self.y, "to", self.ai_state.route.x, self.ai_state.route.y) else local path = self.ai_state.route_path - print("Using route", self.ai_state.route_path) +-- print("Using route", self.ai_state.route_path) if not path or not path[1] or (path[1] and math.floor(core.fov.distance(self.x, self.y, path[1].x, path[1].y)) > 1) then self.ai_state.route_path = nil self.ai_state.route = nil - print("Nulling!", path, path and path[1], path and path[1] and math.floor(core.fov.distance(self.x, self.y, path[1].x, path[1].y))) +-- print("Nulling!", path, path and path[1], path and path[1] and math.floor(core.fov.distance(self.x, self.y, path[1].x, path[1].y))) return true else local ret = self:move(path[1].x, path[1].y) diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index ff9fbd675fc7da3bbda21a6dc727101a31d15e76..368a1e4815c34c66bd7e44a29a57fcd98de0543b 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -1474,9 +1474,9 @@ end function _M:worthExp(target) if not target.level or self.level < target.level - 7 then return 0 end - local mult = 0.3 - if self.rank == 1 then mult = 0.3 - elseif self.rank == 2 then mult = 0.4 + local mult = 0.6 + 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 == 4 then mult = 60 elseif self.rank >= 5 then mult = 120 diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index fec0ebfb59ee3e7fb432c59ca172922379821a60..13852d82a538f5d68ee88c16e59b2852e22dddcc 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -128,6 +128,12 @@ function _M:newGame() -- Create the entity to store various game state things self.state = GameState.new{} + local birth_done = function() + for i = 1, 50 do + local o = self.state:generateRandart(true) + self.zone.object_list[#self.zone.object_list+1] = o + end + end -- Load for quick birth local save = Savefile.new(self.save_name) @@ -136,10 +142,6 @@ function _M:newGame() self.always_target = true - local birth_done = function() - for i = 1, 25 do self.state:generateRandart() end - end - self.creating_player = true local birth; birth = Birther.new(self.player, {"base", "difficulty", "world", "race", "subrace", "sex", "class", "subclass" }, function() -- Save for quick birth @@ -684,7 +686,7 @@ function _M:setupCommands() a.faction = "enemies" self.zone:addEntity(self.level, a, "actor", self.player.x+1, self.player.y) --]] - self:changeLevel(5) +-- self.state:generateRandart(false) end end, } diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua index 1642ca7fa0b8c2f84b97fba45397586f06d2e321..7b453a86dd3b02537132ef983005759b629b0f34 100644 --- a/game/modules/tome/class/GameState.lua +++ b/game/modules/tome/class/GameState.lua @@ -19,6 +19,7 @@ require "engine.class" require "engine.Entity" +local NameGenerator = require("engine.NameGenerator") module(..., package.seeall, class.inherit(engine.Entity)) @@ -88,7 +89,7 @@ end --- A boss refused to drop his artifact! Bastard! Add it to the world pool function _M:addWorldArtifact(o) - self.world_artifacts_pool[#self.world_artifacts_pool+1] = o + self.world_artifacts_pool[o.define_as] = o end --- Load all refused boss artifacts @@ -97,18 +98,121 @@ function _M:getWorldArtifacts() return self.world_artifacts_pool end +local randart_name_rules = { + male = { + phonemesVocals = "a, e, i, o, u, y", + phonemesConsonants = "b, c, ch, ck, cz, d, dh, f, g, gh, h, j, k, kh, l, m, n, p, ph, q, r, rh, s, sh, t, th, ts, tz, v, w, x, z, zh", + syllablesStart = "Aer, Al, Am, An, Ar, Arm, Arth, B, Bal, Bar, Be, Bel, Ber, Bok, Bor, Bran, Breg, Bren, Brod, Cam, Chal, Cham, Ch, Cuth, Dag, Daim, Dair, Del, Dr, Dur, Duv, Ear, Elen, Er, Erel, Erem, Fal, Ful, Gal, G, Get, Gil, Gor, Grin, Gun, H, Hal, Han, Har, Hath, Hett, Hur, Iss, Khel, K, Kor, Lel, Lor, M, Mal, Man, Mard, N, Ol, Radh, Rag, Relg, Rh, Run, Sam, Tarr, T, Tor, Tul, Tur, Ul, Ulf, Unr, Ur, Urth, Yar, Z, Zan, Zer", + syllablesMiddle = "de, do, dra, du, duna, ga, go, hara, kaltho, la, latha, le, ma, nari, ra, re, rego, ro, rodda, romi, rui, sa, to, ya, zila", + syllablesEnd = "bar, bers, blek, chak, chik, dan, dar, das, dig, dil, din, dir, dor, dur, fang, fast, gar, gas, gen, gorn, grim, gund, had, hek, hell, hir, hor, kan, kath, khad, kor, lach, lar, ldil, ldir, leg, len, lin, mas, mnir, ndil, ndur, neg, nik, ntir, rab, rach, rain, rak, ran, rand, rath, rek, rig, rim, rin, rion, sin, sta, stir, sus, tar, thad, thel, tir, von, vor, yon, zor", + rules = "$s$v$35m$10m$e", + }, + female = { + phonemesVocals = "a, e, i, o, u, y", + syllablesStart = "Ad, Aer, Ar, Bel, Bet, Beth, Ce'N, Cyr, Eilin, El, Em, Emel, G, Gl, Glor, Is, Isl, Iv, Lay, Lis, May, Ner, Pol, Por, Sal, Sil, Vel, Vor, X, Xan, Xer, Yv, Zub", + syllablesMiddle = "bre, da, dhe, ga, lda, le, lra, mi, ra, ri, ria, re, se, ya", + syllablesEnd = "ba, beth, da, kira, laith, lle, ma, mina, mira, na, nn, nne, nor, ra, rin, ssra, ta, th, tha, thra, tira, tta, vea, vena, we, wen, wyn", + rules = "$s$v$35m$10m$e", + }, +} + --- Generate randarts for this state -function _M:generateRandart() - local base = game.zone:makeEntity(game.level, "object", {ego_chance=-1000, special=function(e) return (not e.unique and e.slot and e.slot ~= "INBELT") and true or false end}, nil, true) - if not base then return end +function _M:generateRandart(add) + if not self.randart_powers then self.randart_powers = engine.Object:loadList("/data/general/objects/random-artifacts.lua") end + local powers_list = self.randart_powers + + -- Setup level + local lev = rng.range(5, 50) + local oldlev = game.level.level + game.level.level = lev + + -- Get a base object + local base = game.zone:makeEntity(game.level, "object", {ego_chance=-1000, special=function(e) + return (not e.unique and e.randart_able) and true or false + end}, nil, true) + if not base then game.level.level = oldlev return end local o = base:cloneFull() - print("Creating randart using base "..o.name) + + -- Make up a name + local ng = NameGenerator.new(randart_name_rules.female) + local name = o.name.." '"..ng:generate().."'" + o.define_as = o.name:upper():gsub("[^A-Z]", "_") + + o.unique = name o.randart = true + o.no_unique_lore = true o.rarity = rng.range(200, 290) - self:addWorldArtifact(o) + local pthemes = table.listify(o.randart_able) + local themes = {} + local no_theme = true + for i = 1, #pthemes do if rng.percent(pthemes[i][2]) then themes[pthemes[i][1]] = true no_theme = false end end + local themes_fct = function(e) + if no_theme then return true end + for theme, _ in pairs(e.theme) do if themes[theme] then return true end end + return false + end + + -- Determine power + local points = lev * 0.65 + rng.range(5, 15) + local nb_powers = 2 + rng.range(1, lev / 5) + local powers = {} + print("Creating randart "..o.name.." with level "..lev) + + -- Select some powers + for i = 1, nb_powers do + local list = game.zone:computeRarities("powers", powers_list, game.level, themes_fct) + local p = game.zone:pickEntity(list) + if p then + powers[p.name] = p + powers[#powers+1] = p + end + end + + -- Distribute points + local hpoints = math.ceil(points / 2) + local i = 0 + while hpoints > 0 do + i = util.boundWrap(i + 1, 1, #powers) + + local p = powers[i]:clone() + if p.points <= hpoints then + p:resolve(nil, nil, o) + table.mergeAddAppendArray(o, p, true) + print(" * adding power: "..p.name) + end + hpoints = hpoints - p.points + end + + -- Bias toward some powers + local bias_powers = {} + local nb_bias = rng.range(1, lev / 5) + for i = 1, nb_bias do bias_powers[#bias_powers+1] = rng.table(powers) end + local hpoints = math.ceil(points / 2) + local i = 0 + while hpoints > 0 do + i = util.boundWrap(i + 1, 1, #bias_powers) + + local p = bias_powers[i]:clone() + if p.points <= hpoints then + p:resolve(nil, nil, o) + table.mergeAddAppendArray(o, p, true) + print(" * adding power: "..p.name) + end + hpoints = hpoints - p.points + end + + -- Setup the name + o.name = name + + if add then self:addWorldArtifact(o) end + + game.level.level = oldlev + return o end + + local wda_cache = {} --- Runs the worldmap directory AI diff --git a/game/modules/tome/data/general/objects/2haxes.lua b/game/modules/tome/data/general/objects/2haxes.lua index 4827637cec97245f3a3638653446b786dff3fa71..1ad12f26601444b695873ff023e603f6853c9a10 100644 --- a/game/modules/tome/data/general/objects/2haxes.lua +++ b/game/modules/tome/data/general/objects/2haxes.lua @@ -30,6 +30,7 @@ newEntity{ combat = { talented = "axe", damrange = 1.5, sound = "actions/melee", sound_miss = "actions/melee_miss", }, desc = [[Massive two-handed battleaxes.]], twohanded = true, + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/2hmaces.lua b/game/modules/tome/data/general/objects/2hmaces.lua index f66b84f63cfee7ea1a82343d6312fa24e3257e35..9a705e0a99ccb67dae8d62cab986da645deb2577 100644 --- a/game/modules/tome/data/general/objects/2hmaces.lua +++ b/game/modules/tome/data/general/objects/2hmaces.lua @@ -30,6 +30,7 @@ newEntity{ combat = { talented = "mace", damrange = 1.5, physspeed=1.2, sound = "actions/melee", sound_miss = "actions/melee_miss", }, desc = [[Massive two-handed maul.]], twohanded = true, + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/2hswords.lua b/game/modules/tome/data/general/objects/2hswords.lua index b59fcce488924ddb346e6dbd122120a550371213..8b224d464a8293310df97d336976597de17406b1 100644 --- a/game/modules/tome/data/general/objects/2hswords.lua +++ b/game/modules/tome/data/general/objects/2hswords.lua @@ -30,6 +30,7 @@ newEntity{ desc = [[Massive two-handed swords.]], twohanded = true, metallic = true, + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/2htridents.lua b/game/modules/tome/data/general/objects/2htridents.lua index f3d8c14f5d5ac2dbf45bb8670cccacbc8d6af54d..94ea36ad722ce8f25668edf1dc05e99846c23f44 100644 --- a/game/modules/tome/data/general/objects/2htridents.lua +++ b/game/modules/tome/data/general/objects/2htridents.lua @@ -32,6 +32,7 @@ newEntity{ desc = [[A two handed massive trident. Tridents require the exotic weapons mastery talent to correctly use.]], twohanded = true, + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/axes.lua b/game/modules/tome/data/general/objects/axes.lua index 3e5fbd752fd12727e7da4f235bd9a5ee42c8bd06..20a09ca7ffad7a1e4404e53ad3b7c7f43327f557 100644 --- a/game/modules/tome/data/general/objects/axes.lua +++ b/game/modules/tome/data/general/objects/axes.lua @@ -28,6 +28,7 @@ newEntity{ metallic = true, combat = { talented = "axe", damrange = 1.4, sound = "actions/melee", sound_miss = "actions/melee_miss",}, desc = [[One-handed war axes.]], + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/bows.lua b/game/modules/tome/data/general/objects/bows.lua index 24206dc2cd5ebe0deb67f0064a7d20103a240263..3ac0b3830b04408e24893b84fa25e87d1f050b0f 100644 --- a/game/modules/tome/data/general/objects/bows.lua +++ b/game/modules/tome/data/general/objects/bows.lua @@ -28,6 +28,7 @@ newEntity{ combat = { talented = "bow", damrange = 1.4, sound = "actions/arrow", sound_miss = "actions/arrow",}, archery = "bow", desc = [[Longbows are used to shoot arrows at your foes.]], + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/bow.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/cloak.lua b/game/modules/tome/data/general/objects/cloak.lua index a5e3970a7faf49097bd60fbeee23227bb415d8c3..d74a986aa5458eac492b75d6b6c10f45a4020b9e 100644 --- a/game/modules/tome/data/general/objects/cloak.lua +++ b/game/modules/tome/data/general/objects/cloak.lua @@ -26,6 +26,7 @@ newEntity{ encumber = 2, rarity = 6, desc = [[A cloth coat typically worn as a loose outer garment. It is spacious enough to be worn even over bulky metal armour.]], + randart_able = { attack=10, physical=10, spell=10, def=10, misc=50 }, egos = "/data/general/objects/egos/cloak.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/cloth-armors.lua b/game/modules/tome/data/general/objects/cloth-armors.lua index 0903aa2228bd94f0001ccdea9c81e5876f4d72a6..5a6d145e0b8e6dd05cc20262ebbd19dfdab33bba 100644 --- a/game/modules/tome/data/general/objects/cloth-armors.lua +++ b/game/modules/tome/data/general/objects/cloth-armors.lua @@ -26,6 +26,7 @@ newEntity{ encumber = 2, rarity = 5, desc = [[A cloth vestment. It offers no intrinsic protection but can be enchanted.]], + randart_able = { attack=10, physical=10, spell=80, def=20, misc=10 }, egos = "/data/general/objects/egos/robe.lua", egos_chance = { prefix=resolvers.mbonus(30, 15), suffix=resolvers.mbonus(30, 15) }, } diff --git a/game/modules/tome/data/general/objects/gauntlets.lua b/game/modules/tome/data/general/objects/gauntlets.lua index e32ff3d36999d65e10ded72ae477c2abbba89923..a88101f46a7ab631eac701f363dd91ad7c6fdaab 100644 --- a/game/modules/tome/data/general/objects/gauntlets.lua +++ b/game/modules/tome/data/general/objects/gauntlets.lua @@ -31,6 +31,7 @@ newEntity{ rarity = 9, metallic = true, desc = [[Metal gloves protecting the hands up to the middle of the lower arm.]], + randart_able = { attack=10, physical=10, spell=10, def=40, misc=30 }, egos = "/data/general/objects/egos/gloves.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/gloves.lua b/game/modules/tome/data/general/objects/gloves.lua index e7f499b6b22ae855959623e3c3f107e2eb369991..4cc5844b345d0cf5f203b2e0c3d517d57e12255e 100644 --- a/game/modules/tome/data/general/objects/gloves.lua +++ b/game/modules/tome/data/general/objects/gloves.lua @@ -29,6 +29,7 @@ newEntity{ encumber = 1, rarity = 9, desc = [[Light gloves which do not seriously hinder finger movements, while still protecting the hands somewhat.]], + randart_able = { attack=10, physical=10, spell=10, def=30, misc=10 }, egos = "/data/general/objects/egos/gloves.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/heavy-armors.lua b/game/modules/tome/data/general/objects/heavy-armors.lua index 60947f98e2b737c403cbe0c899059c365d335a9a..9ed25879de289e4546b8e8dd97f67ac08b453a80 100644 --- a/game/modules/tome/data/general/objects/heavy-armors.lua +++ b/game/modules/tome/data/general/objects/heavy-armors.lua @@ -30,6 +30,7 @@ newEntity{ rarity = 5, metallic = true, desc = [[A suit of armour made of mail.]], + randart_able = { attack=10, physical=10, spell=10, def=80, misc=10 }, egos = "/data/general/objects/egos/heavy-armor.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/heavy-boots.lua b/game/modules/tome/data/general/objects/heavy-boots.lua index 3caec516ff55d29d069808dd72ae0f1070fbb81d..2244ccd00e48ecfd106bbe743ad6d1ebfc14f7c5 100644 --- a/game/modules/tome/data/general/objects/heavy-boots.lua +++ b/game/modules/tome/data/general/objects/heavy-boots.lua @@ -30,6 +30,7 @@ newEntity{ rarity = 7, metallic = true, desc = [[Heavy boots, with metal strips at the toes, heels and other vulnerable parts, to better protect the wearer's feet from harm.]], + randart_able = { attack=10, physical=10, spell=10, def=40, misc=40 }, egos = "/data/general/objects/egos/boots.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/helms.lua b/game/modules/tome/data/general/objects/helms.lua index acdbd306631c0a8d9bc6ab5b7d2a0596c1854d1f..1596b6fa043df6306f8d46d62a37b3e7e159d9fc 100644 --- a/game/modules/tome/data/general/objects/helms.lua +++ b/game/modules/tome/data/general/objects/helms.lua @@ -30,6 +30,7 @@ newEntity{ rarity = 7, metallic = true, desc = [[A large helmet that can protect the entire head. Ventilation and bad vision can be a problem, however.]], + randart_able = { attack=20, physical=10, spell=10, def=50, misc=10 }, egos = "/data/general/objects/egos/helm.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/jewelry.lua b/game/modules/tome/data/general/objects/jewelry.lua index 184b75be7cf1776f2e78b1c352462918e8e7fd54..326dd2199272b30f780d75d229ea8b5c7cce6d01 100644 --- a/game/modules/tome/data/general/objects/jewelry.lua +++ b/game/modules/tome/data/general/objects/jewelry.lua @@ -25,6 +25,7 @@ newEntity{ encumber = 0.1, rarity = 6, desc = [[Rings can have magical properties.]], + randart_able = { attack=40, physical=40, spell=40, def=40, misc=40 }, -- Most rings are ego items egos = "/data/general/objects/egos/rings.lua", egos_chance = resolvers.mbonus(50, 40), } diff --git a/game/modules/tome/data/general/objects/knifes.lua b/game/modules/tome/data/general/objects/knifes.lua index bda9e7f05232d7d3f66968b4880c9c6c6aee4edf..a43b2b5e5f11187af540751e2b0005860eaeb05a 100644 --- a/game/modules/tome/data/general/objects/knifes.lua +++ b/game/modules/tome/data/general/objects/knifes.lua @@ -28,6 +28,7 @@ newEntity{ metallic = true, combat = { talented = "knife", damrange = 1.3, sound = "actions/melee", sound_miss = "actions/melee_miss", }, desc = [[Sharp, long, and deadly.]], + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/leather-belt.lua b/game/modules/tome/data/general/objects/leather-belt.lua index 89d9e264c51784c7203b22532e93760f66c7acc7..8a62f8b0ea931c2b0c45bfd999a26e2db22198d4 100644 --- a/game/modules/tome/data/general/objects/leather-belt.lua +++ b/game/modules/tome/data/general/objects/leather-belt.lua @@ -25,6 +25,7 @@ newEntity{ encumber = 1, rarity = 6, desc = [[A belt that goes around your waist.]], + randart_able = { attack=10, physical=10, spell=10, def=10, misc=10 }, egos = "/data/general/objects/egos/belt.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/leather-boots.lua b/game/modules/tome/data/general/objects/leather-boots.lua index 9a3ac5fc43097efb622152599e704dca44ba0d0c..648e1c12273359a93de3b965b9031c8d210d186b 100644 --- a/game/modules/tome/data/general/objects/leather-boots.lua +++ b/game/modules/tome/data/general/objects/leather-boots.lua @@ -26,6 +26,7 @@ newEntity{ encumber = 2, rarity = 6, desc = [[A pair of boots made of leather.]], + randart_able = { attack=10, physical=10, spell=10, def=40, misc=30 }, egos = "/data/general/objects/egos/light-boots.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/leather-caps.lua b/game/modules/tome/data/general/objects/leather-caps.lua index 79d8041b6b07706f9571eec0162133d80da5a238..d060a4718d6476985b6fa24e4098d1df2fe1d7de 100644 --- a/game/modules/tome/data/general/objects/leather-caps.lua +++ b/game/modules/tome/data/general/objects/leather-caps.lua @@ -26,6 +26,7 @@ newEntity{ encumber = 2, rarity = 6, desc = [[A cap made of leather.]], + randart_able = { attack=20, physical=10, spell=10, def=40, misc=30 }, egos = "/data/general/objects/egos/helm.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/light-armors.lua b/game/modules/tome/data/general/objects/light-armors.lua index 73c3f5b47d992f4ca71b94a7c2b2a84d79471ca6..9b85f5a7ff5e6511eecfb781dbea5d084c9527d7 100644 --- a/game/modules/tome/data/general/objects/light-armors.lua +++ b/game/modules/tome/data/general/objects/light-armors.lua @@ -26,6 +26,7 @@ newEntity{ encumber = 9, rarity = 5, desc = [[A suit of armour made of leather.]], + randart_able = { attack=20, physical=20, spell=20, def=60, misc=40 }, egos = "/data/general/objects/egos/armor.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/lites.lua b/game/modules/tome/data/general/objects/lites.lua index 6ad06d09d1b2f533bd8b0668da9b252e9d9adfeb..966dba80cb5f955118a73257c7347b6799ea3b79 100644 --- a/game/modules/tome/data/general/objects/lites.lua +++ b/game/modules/tome/data/general/objects/lites.lua @@ -23,6 +23,7 @@ newEntity{ type = "lite", subtype="lite", image = resolvers.image_material("lite", {"brass","","dwarven","","faenorian"}), display = "~", desc = [[Lite up the dark places of the world!]], + randart_able = { attack=10, physical=10, spell=10, def=30, misc=40 }, egos = "/data/general/objects/egos/lite.lua", egos_chance = { prefix=resolvers.mbonus(15, 3), suffix=resolvers.mbonus(15, 3) }, } diff --git a/game/modules/tome/data/general/objects/maces.lua b/game/modules/tome/data/general/objects/maces.lua index 180ffb57fd874caab0cf65ef405a29389627b61c..38f0c05be5e19396fa3183abb74ef681e26444c7 100644 --- a/game/modules/tome/data/general/objects/maces.lua +++ b/game/modules/tome/data/general/objects/maces.lua @@ -28,6 +28,7 @@ newEntity{ metallic = true, combat = { talented = "mace", damrange = 1.4, sound = "actions/melee", sound_miss = "actions/melee_miss",}, desc = [[Blunt and deadly.]], + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/massive-armors.lua b/game/modules/tome/data/general/objects/massive-armors.lua index 031e49aa6e9feb2da28071b9c19d0659ede2841b..337b6a392f9eb459c78b1f4c1efdef8243849112 100644 --- a/game/modules/tome/data/general/objects/massive-armors.lua +++ b/game/modules/tome/data/general/objects/massive-armors.lua @@ -30,6 +30,7 @@ newEntity{ rarity = 5, metallic = true, desc = [[A suit of armour made of metal plates.]], + randart_able = { attack=10, physical=10, spell=10, def=80, misc=10 }, egos = "/data/general/objects/egos/massive-armor.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/random-artifacts.lua b/game/modules/tome/data/general/objects/random-artifacts.lua new file mode 100644 index 0000000000000000000000000000000000000000..52514c0fe1827cbd04883c8f5fc5b225db5cd65e --- /dev/null +++ b/game/modules/tome/data/general/objects/random-artifacts.lua @@ -0,0 +1,200 @@ +-- ToME - Tales of Maj'Eyal +-- 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 Stats = require "engine.interface.ActorStats" +local Talents = require "engine.interface.ActorTalents" + +---------------------------------------------------------------- +-- Spellcasting +---------------------------------------------------------------- +newEntity{ theme={spell=true}, name="spellpower", points = 1, rarity = 8, level_range = {1, 50}, + wielder = { combat_spellpower = 2, }, +} +newEntity{ theme={spell=true}, name="spellcrit", points = 1, rarity = 10, level_range = {1, 50}, + wielder = { combat_spellcrit = 1, }, +} + +---------------------------------------------------------------- +-- Physical damage +---------------------------------------------------------------- +newEntity{ theme={physical=true}, name="phys dam", points = 1, rarity = 8, level_range = {1, 50}, + wielder = { combat_dam = 1, }, +} +newEntity{ theme={physical=true}, name="phys apr", points = 1, rarity = 10, level_range = {1, 50}, + wielder = { combat_apr = 1, }, +} +newEntity{ theme={physical=true}, name="phys crit", points = 1, rarity = 10, level_range = {1, 50}, + wielder = { combat_physcrit = 1, }, +} + +---------------------------------------------------------------- +-- Defence +---------------------------------------------------------------- +newEntity{ theme={def=true}, name="def", points = 2, rarity = 8, level_range = {1, 50}, + wielder = { combat_def = 1, }, +} +newEntity{ theme={def=true}, name="rdef", points = 1.5, rarity = 12, level_range = {1, 50}, + wielder = { combat_def_ranged = 1, }, +} +newEntity{ theme={def=true}, name="armor", points = 2, rarity = 8, level_range = {1, 50}, + wielder = { combat_armor = 1, }, +} + +---------------------------------------------------------------- +-- Stats +---------------------------------------------------------------- +newEntity{ theme={misc=true}, name="stat str", points = 2, rarity = 7, level_range = {1, 50}, + wielder = { inc_stats = { [Stats.STAT_STR] = 1 }, }, +} +newEntity{ theme={misc=true}, name="stat dex", points = 2, rarity = 7, level_range = {1, 50}, + wielder = { inc_stats = { [Stats.STAT_DEX] = 1 }, }, +} +newEntity{ theme={misc=true}, name="stat mag", points = 2, rarity = 7, level_range = {1, 50}, + wielder = { inc_stats = { [Stats.STAT_MAG] = 1 }, }, +} +newEntity{ theme={misc=true}, name="stat wil", points = 2, rarity = 7, level_range = {1, 50}, + wielder = { inc_stats = { [Stats.STAT_WIL] = 1 }, }, +} +newEntity{ theme={misc=true}, name="stat cun", points = 2, rarity = 7, level_range = {1, 50}, + wielder = { inc_stats = { [Stats.STAT_CUN] = 1 }, }, +} +newEntity{ theme={misc=true}, name="stat con", points = 2, rarity = 7, level_range = {1, 50}, + wielder = { inc_stats = { [Stats.STAT_CON] = 1 }, }, +} + +---------------------------------------------------------------- +-- Damage % +---------------------------------------------------------------- +newEntity{ theme={attack=true}, name="inc damage physical", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.PHYSICAL] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage fire", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.FIRE] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage cold", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.COLD] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage acid", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.ACID] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage lightning", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.LIGHTNING] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage arcane", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.ARCANE] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage nature", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.NATURE] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage blight", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.BLIGHT] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage light", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.LIGHT] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage darkness", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.DARKNESS] = 1 }, }, +} +newEntity{ theme={attack=true}, name="inc damage mind", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { inc_damage = { [DamageType.MIND] = 1 }, }, +} + +---------------------------------------------------------------- +-- Immunes +---------------------------------------------------------------- +newEntity{ theme={def=true}, name="immune stun", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { stun_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune knockback", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { knockback_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune blind", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { blind_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune confusion", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { confusion_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune pin", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { pin_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune poison", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { poison_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune disease", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { disease_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune silence", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { silence_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune disarm", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { disarm_immune = 0.05 }, +} +newEntity{ theme={def=true}, name="immune cut", points = 2, rarity = 14, level_range = {1, 50}, + wielder = { cut_immune = 0.05 }, +} + +---------------------------------------------------------------- +-- Resists % +---------------------------------------------------------------- +newEntity{ theme={def=true}, name="resist physical", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.PHYSICAL] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist fire", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.FIRE] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist cold", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.COLD] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist acid", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.ACID] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist lightning", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.LIGHTNING] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist arcane", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.ARCANE] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist nature", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.NATURE] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist blight", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.BLIGHT] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist light", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.LIGHT] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist darkness", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.DARKNESS] = 1 }, }, +} +newEntity{ theme={def=true}, name="resist mind", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { resists = { [DamageType.MIND] = 1 }, }, +} + +---------------------------------------------------------------- +-- Saves +---------------------------------------------------------------- +newEntity{ theme={def=true}, name="save physical", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { combat_physresist = 1 }, +} +newEntity{ theme={def=true}, name="save spell", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { combat_spellresist = 1 }, +} +newEntity{ theme={def=true}, name="save mental", points = 1, rarity = 11, level_range = {1, 50}, + wielder = { combat_mentalresist = 1 }, +} diff --git a/game/modules/tome/data/general/objects/shields.lua b/game/modules/tome/data/general/objects/shields.lua index 1a70cbde89ca0269e9e661697ef39b5d8629a9dd..fed54b9bfd63e9d69db9721b907258e03075ee24 100644 --- a/game/modules/tome/data/general/objects/shields.lua +++ b/game/modules/tome/data/general/objects/shields.lua @@ -27,6 +27,7 @@ newEntity{ encumber = 7, metallic = true, desc = [[Handheld deflection devices]], + randart_able = { attack=20, physical=10, spell=10, def=50, misc=10 }, egos = "/data/general/objects/egos/shield.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/slings.lua b/game/modules/tome/data/general/objects/slings.lua index 1da3b6c575b6e53a15c8b7e8f5602f9fb47dc817..e087f6c802f2fee5073778ffac3cc54b8561f74d 100644 --- a/game/modules/tome/data/general/objects/slings.lua +++ b/game/modules/tome/data/general/objects/slings.lua @@ -27,6 +27,7 @@ newEntity{ combat = { talented = "sling", sound = "actions/arrow", sound_miss = "actions/arrow", }, archery = "sling", desc = [[Slings are used to shoot pebbles at your foes.]], + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/sling.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/staves.lua b/game/modules/tome/data/general/objects/staves.lua index 322d36abd12b3a993227aeb74c40a86397d0ec82..04d643294626ad2b0ff3760c7f530cf14691031f 100644 --- a/game/modules/tome/data/general/objects/staves.lua +++ b/game/modules/tome/data/general/objects/staves.lua @@ -25,6 +25,7 @@ newEntity{ twohanded = true, add_name = " (#COMBAT_DAMTYPE#)", display = "\\", color=colors.LIGHT_RED, image = resolvers.image_material("staff", "wood"), + randart_able = { attack=10, physical=40, spell=80, def=10, misc=10 }, encumber = 5, rarity = 4, combat = { diff --git a/game/modules/tome/data/general/objects/swords.lua b/game/modules/tome/data/general/objects/swords.lua index 1e552e787a762652da0fd70c0745e3cf82acdf81..e720ebedb3fa70c60da6e961baab55bdb27f3ef7 100644 --- a/game/modules/tome/data/general/objects/swords.lua +++ b/game/modules/tome/data/general/objects/swords.lua @@ -28,6 +28,7 @@ newEntity{ metallic = true, combat = { talented = "sword", damrange = 1.4, sound = "actions/melee", sound_miss = "actions/melee_miss",}, desc = [[Sharp, long, and deadly.]], + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/whips.lua b/game/modules/tome/data/general/objects/whips.lua index 9b4fa284f3a3a0b7cda84d60e15e6cc9e71b2e7b..0bf4cf2dd72002b7619fbd514af46a3663d0779c 100644 --- a/game/modules/tome/data/general/objects/whips.lua +++ b/game/modules/tome/data/general/objects/whips.lua @@ -28,5 +28,6 @@ newEntity{ metallic = true, combat = { talented = "whip", damrange = 1.1, sound = "actions/melee", sound_miss = "actions/melee_miss",}, desc = [[Sharp, long, and deadly.]], + randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 }, egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/wizard-hat.lua b/game/modules/tome/data/general/objects/wizard-hat.lua index 806172ccc41b27e908336fa6009345a372e6a2a2..b03b4becc65df599e6f83a8e81e3703d979edeb8 100644 --- a/game/modules/tome/data/general/objects/wizard-hat.lua +++ b/game/modules/tome/data/general/objects/wizard-hat.lua @@ -26,6 +26,7 @@ newEntity{ encumber = 2, rarity = 6, desc = [[A pointy cloth hat, very wizardly...]], + randart_able = { attack=10, physical=10, spell=80, def=10, misc=10 }, egos = "/data/general/objects/egos/wizard-hat.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) }, } diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua index 56ea2c6d27d8f89db754fff7a2a424d5d8e320fa..4a00d474f21f8d429e2f3ce76c8281804268a4e1 100644 --- a/game/modules/tome/data/general/objects/world-artifacts.lua +++ b/game/modules/tome/data/general/objects/world-artifacts.lua @@ -20,10 +20,10 @@ local Stats = require "engine.interface.ActorStats" local Talents = require "engine.interface.ActorTalents" ---- Load boss artifacts that failed to be dropped +--- Load additional artifacts for def, e in pairs(game.state:getWorldArtifacts()) do importEntity(e) - print("Importing failed boss drop "..e.name.." into world artifacts") + print("Importing "..e.name.." into world artifacts") end -- This file describes artifacts not bound to a special location, they can be found anywhere diff --git a/game/modules/tome/data/wda/eyal.lua b/game/modules/tome/data/wda/eyal.lua index 4c5e812e4c7994ba49d352550962bf841dad4f2b..db1299c2873a890140f58380add308797828a0d1 100644 --- a/game/modules/tome/data/wda/eyal.lua +++ b/game/modules/tome/data/wda/eyal.lua @@ -41,7 +41,6 @@ end if zone == "Maj'Eyal" then wda.cur_patrols = wda.cur_patrols or 0 wda.cur_hostiles = wda.cur_hostiles or 0 - print("==== Maj'Eyal", wda.cur_patrols, wda.cur_hostiles) -- Spawn random encounters local g = game.level.map(game.player.x, game.player.y, Map.TERRAIN) @@ -95,7 +94,6 @@ elseif zone == "Far East" then wda.cur_patrols = wda.cur_patrols or 0 wda.cur_orc_patrols = wda.cur_orc_patrols or 0 wda.cur_hostiles = wda.cur_hostiles or 0 - print("==== Fareast", wda.cur_patrols, wda.cur_orc_patrols, wda.cur_hostiles) -- Spawn random encounters local g = game.level.map(game.player.x, game.player.y, Map.TERRAIN)