Skip to content
Snippets Groups Projects
Commit 7ef40ca2 authored by dg's avatar dg
Browse files

Jewelers can now craft special rings on demand

New quest: Lost Knowledge
New zone: Ithilthum, Valley of the Moon


git-svn-id: http://svn.net-core.org/repos/t-engine4@1021 51575b47-30f0-44d4-a5cc-537603b46e54
parent fa5585ce
No related branches found
No related tags found
No related merge requests found
Showing
with 467 additions and 21 deletions
......@@ -135,3 +135,12 @@ function _M:decay(what, check)
end end
return nb, total
end
--- Pick a random spot matching the given filter
function _M:pickSpot(filter)
local list = {}
for i, spot in ipairs(self.spots) do
if game.zone:checkFilter(spot, filter) then list[#list+1] = spot end
end
return rng.table(list)
end
......@@ -74,3 +74,5 @@ newAI("simple", function(self)
end
return false
end)
newAI("none", function(self) end)
......@@ -475,11 +475,11 @@ function _M:setupCommands()
self.player.esp.all = 1
self.player.esp.range = 50
self.player.inc_damage.all = 100000
self:changeLevel(5, "gorbat-pride")
-- self:changeLevel(5, "gorbat-pride")
-- self:changeLevel(1, "town-gates-of-morning")
-- self:changeLevel(1, "wilderness-arda-fareast")
-- game.memory_levels["wilderness-arda-fareast-1"] = game.level
-- self.player:grantQuest("orc-pride")
self:changeLevel(1, "wilderness-arda-fareast")
game.memory_levels["wilderness-arda-fareast-1"] = game.level
self.player:grantQuest("orc-pride")
-- self.player:grantQuest("escort-duty")
end
end,
......@@ -488,7 +488,7 @@ function _M:setupCommands()
self.player:incStat("str", 100) self.player:incStat("dex", 100) self.player:incStat("mag", 100) self.player:incStat("wil", 100) self.player:incStat("cun", 100) self.player:incStat("con", 100)
self.player:learnTalent(self.player.T_HEAVY_ARMOUR_TRAINING, true) self.player:learnTalent(self.player.T_MASSIVE_ARMOUR_TRAINING, true)
for i, e in ipairs(self.zone.object_list) do
if e.unique and e.rarity then
if e.unique and (not e.define_as or e.define_as ~= "JEWELER_SUMMON") then -- and e.rarity then
local a = self.zone:finishEntity(self.level, "object", e)
a:identify(true)
self.zone:addEntity(self.level, a, "object", self.player.x, self.player.y)
......
......@@ -133,11 +133,12 @@ function _M:makeShells(base, max)
end
--- Generate sub entities to make translucent water
function _M:makeWater(z)
function _M:makeWater(z, prefix)
prefix = prefix or ""
return { engine.Entity.new{
z = z and 16 or 9,
image = "terrain/water_floor_alpha.png",
shader = "water", textures = { function() return _3DNoise, true end },
image = "terrain/"..prefix.."water_floor_alpha.png",
shader = prefix.."water", textures = { function() return _3DNoise, true end },
display_on_seen = true,
display_on_remember = true,
} }
......
......@@ -189,6 +189,12 @@ function _M:getTextualDesc()
desc[#desc+1] = "Damage type: "..DamageType:get(self.combat.damtype or DamageType.PHYSICAL).name
if self.combat.range then desc[#desc+1] = "Firing range: "..self.combat.range end
desc[#desc+1] = ""
if self.combat.talent_on_hit then
for tid, data in pairs(self.combat.talent_on_hit) do
desc[#desc+1] = ("Talent on hit(melee): %d%% chance %s (level %d)."):format(data.chance, self:getTalentFromId(tid).name, data.level)
end
end
end
local desc_wielder = function(w)
......@@ -212,13 +218,6 @@ function _M:getTextualDesc()
desc[#desc+1] = ("Damage on hit(melee): %s."):format(table.concat(rs, ','))
end
if self.combat and self.combat.talent_on_hit then
local rs = {}
for tid, data in pairs(self.combat.talent_on_hit) do
desc[#desc+1] = ("Talent on hit(melee): %d%% chance %s (level %d)."):format(data.chance, self:getTalentFromId(tid).name, data.level)
end
end
if w.ranged_project then
local rs = {}
for typ, dam in pairs(w.ranged_project) do
......@@ -323,16 +322,24 @@ function _M:getTextualDesc()
if w.invisible then desc[#desc+1] = ("Invisibility: %d"):format(w.invisible) end
end
desc_wielder(self.wielder or {})
if self.wielder then
desc[#desc+1] = "#YELLOW#When wielded/worn:#LAST#"
desc_wielder(self.wielder)
end
if self.carrier then
desc[#desc+1] = "#YELLOW#When carried:#LAST#"
desc_wielder(self.carrier)
end
if self.imbue_powers then
desc[#desc+1] = "When used to imbue an armour:"
desc[#desc+1] = "#YELLOW#When used to imbue an armour:#LAST#"
desc_wielder(self.imbue_powers)
end
if self.alchemist_bomb then
local a = self.alchemist_bomb
desc[#desc+1] = "When used as an alchemist bomb:"
desc[#desc+1] = "#YELLOW#When used as an alchemist bomb:#LAST#"
if a.power then desc[#desc+1] = ("Bomb damage +%d%%"):format(a.power) end
if a.range then desc[#desc+1] = ("Bomb thrown range +%d"):format(a.range) end
if a.mana then desc[#desc+1] = ("Mana regain %d"):format(a.mana) end
......
......@@ -55,7 +55,7 @@ function _M:generateOne()
x = rng.range(3, 8)
tries = tries + 1
end
if tries < 100 then
if tries < 10 then
self.zone:addEntity(self.level, m, "actor", x, y)
end
end
......
-- TE4 - T-Engine 4
-- 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
require "engine.class"
local Map = require "engine.Map"
local DamageType = require "engine.DamageType"
require "engine.Generator"
module(..., package.seeall, class.inherit(engine.Generator))
function _M:init(zone, map, level, spots)
engine.Generator.init(self, zone, map, level, spots)
self.data = level.data.generator.actor
self.level = level
self.rate = self.data.rate
self.max_rate = 5
self.turn_scale = game.energy_per_tick / game.energy_to_act
if not _M.limmir then
for i, e in pairs(level.entities) do
if e.define_as and e.define_as == "LIMMIR" then _M.limmir = e break end
end
end
end
function _M:tick()
local val = rng.float(0,1)
for i = 1,self.max_rate - 1 do
if val < rng.poissonProcess(i, self.turn_scale, self.rate) then
self:generateOne()
else
break
end
end
-- Fire a light AOE, healing allies damaging demons
if _M.limmir and not _M.limmir.dead and game.turn % 100 == 0 then
game.logSeen(_M.limmir, "Limmir summons a blast of holy light!")
local rad = math.ceil(2 + (500 - self.level.turn_counter / 10) / 20)
local dam = 50 + (500 - self.level.turn_counter / 10) / 7
local grids = _M.limmir:project({type="ball", radius=rad}, _M.limmir.x, _M.limmir.y, DamageType.HOLY_LIGHT, dam)
game.level.map:particleEmitter(_M.limmir.x, _M.limmir.y, rad, "sunburst", {radius=rad, grids=grids, tx=_M.limmir.x, ty=_M.limmir.y})
end
end
function _M:generateOne()
local m
if not self.level.balroged and self.level.turn_counter < 50 * 10 then
m = self.zone:makeEntityByName(self.level, "actor", "CORRUPTED_BALROG")
self.level.balroged = true
else
m = self.zone:makeEntity(self.level, "actor", {type="demon"}, nil, true)
end
if m then
local spot = self.level:pickSpot{type="portal", subtype="demon"}
local x = spot.x
local y = spot.y
local tries = 0
while (not m:canMove(x, y)) and tries < 10 do
spot = self.level:pickSpot{type="portal", subtype="demon"}
x = spot.x y = spot.y
tries = tries + 1
end
if tries < 10 then
if _M.limmir and not _M.limmir.dead then
m:setTarget(_M.limmir)
else
m:setTarget(game.player)
end
self.zone:addEntity(self.level, m, "actor", x, y)
end
end
end
......@@ -59,6 +59,9 @@ newBirthDescriptor{
{type="potion", subtype="potion", name="potion of lesser healing", ego_chance=-1000},
{type="potion", subtype="potion", name="potion of cure poison", ego_chance=-1000},
{type="potion", subtype="potion", name="potion of cure poison", ego_chance=-1000},
{type="gem", name="fire opal"},
{type="gem", name="diamond"},
{type="jewelry", subtype="ring", name="mithril ring", ego_chance=-1000},
},
resolvers.generic(function(e)
e.hotkey[9] = {"inventory", "potion of lesser healing"}
......
-- 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 imbue_ring = function(npc, player)
player:showInventory("Imbue which ring?", player:getInven("INVEN"), function(o) return o.type == "jewelry" and o.subtype == "ring" and not o.egoed and not o.unique end, function(ring, ring_item)
player:showInventory("Use which gem?", player:getInven("INVEN"), function(gem) return gem.type == "gem" and gem.material_level <= ring.material_level end, function(gem, gem_item)
local price = 10 + gem.material_level * 5 + ring.material_level * 7
if price > player.money then require("engine.Dialog"):simplePopup("Not enough money", "This costs "..price.." gold, you need more gold.") return end
require("engine.Dialog"):yesnoPopup("Imbue cost", "This will cost you "..price.." gold, do you accept?", function(ret) if ret then
player:removeObject(player:getInven("INVEN"), gem_item)
ring.wielder = ring.wielder or {}
table.mergeAdd(ring.wielder, gem.imbue_powers, true)
ring.name = gem.name .. " ring"
ring.been_imbued = true
ring.egoed = true
game.logPlayer(player, "%s creates: %s", npc.name:capitalize(), ring:getName{do_colour=true, no_count=true})
end end)
end)
end)
end
local artifact_imbue_ring = function(npc, player)
player:showInventory("Imbue which ring?", player:getInven("INVEN"), function(o) return o.type == "jewelry" and o.subtype == "ring" and not o.egoed and not o.unique end, function(ring, ring_item)
player:showInventory("Use which first gem?", player:getInven("INVEN"), function(gem1) return gem1.type == "gem" and gem1.material_level <= ring.material_level end, function(gem1, gem1_item)
player:showInventory("Use which second gem?", player:getInven("INVEN"), function(gem2) return gem2.type == "gem" and gem2.material_level <= ring.material_level and gem1.name ~= gem2.name end, function(gem2, gem2_item)
local price = 390
if price > player.money then require("engine.Dialog"):simplePopup("Not enough money", "Limmir needs more gold for the magical plating.") return end
require("engine.Dialog"):yesnoPopup("Imbue cost", "You need to use "..price.." gold for the plating, do you accept?", function(ret) if ret then
local gem3 = game.zone:makeEntity(game.level, "object", {type="gem"}, nil, true)
print("Imbue third gem", gem3.name)
if gem1_item > gem2_item then
player:removeObject(player:getInven("INVEN"), gem1_item)
player:removeObject(player:getInven("INVEN"), gem2_item)
else
player:removeObject(player:getInven("INVEN"), gem2_item)
player:removeObject(player:getInven("INVEN"), gem1_item)
end
ring.wielder = ring.wielder or {}
table.mergeAdd(ring.wielder, gem1.imbue_powers, true)
table.mergeAdd(ring.wielder, gem2.imbue_powers, true)
table.mergeAdd(ring.wielder, gem3.imbue_powers, true)
ring.name = "Limmir's Ring of the Moon"
ring.been_imbued = true
ring.unique = util.uuid()
game.logPlayer(player, "%s creates: %s", npc.name:capitalize(), ring:getName{do_colour=true, no_count=true})
end end)
end)
end)
end)
end
newChat{ id="welcome",
text = [[Welcome @playername@ to my shop.]],
answers = {
{"Let me see your wares.", action=function(npc, player)
npc.store:loadup(game.level, game.zone)
npc.store:interact(player)
end, cond=function(npc, player) return npc.store and true or false end},
{"I am looking for special jewelry.", jump="jewelry"},
{"So you can make better rings in this place?", jump="artifact_jewelry", cond=function(npc, player) return npc.can_craft and player:hasQuest("master-jeweler") and player:isQuestStatus("master-jeweler", engine.Quest.COMPLETED, "limmir-survived") end},
{"I have found this tome, this looked important.", jump="quest", cond=function(npc, player) return npc.can_quest and player:hasQuest("master-jeweler") and player:hasQuest("master-jeweler"):has_tome(player) end},
{"Sorry I have to go!"},
}
}
newChat{ id="jewelry",
text = [[Then you are at the right place, for I am an expert jeweler.
If you bring me a gem and a non-magical ring I can imbue the gem inside the ring for you.
There is a small fee dependant on the level of the ring and you need a quality ring to use a quality gem.]],
answers = {
{"I need your services.", action=imbue_ring},
{"Not now thanks."},
}
}
newChat{ id="artifact_jewelry",
text = [[Yes! Thank to you this place is now free from the corruption. I will stay on this island to study the magical aura, and as promised I can make you better rings.
Bring me a non-magical ring and two gems and I will turn them into a powerful ring.
I will not make you pay a fee for it since you helped me so much, but I am afraid the ritual requires a gold plating, this should equal to about 390 gold pieces.]],
answers = {
{"I need your services.", action=artifact_imbue_ring},
{"Not now thanks."},
}
}
newChat{ id="quest",
text = [[#LIGHT_GREEN#*He quickly looks at the tome and looks amazed.*#WHITE# This is an amazing find! Truly amazing!
With this knowledge I could create much more potent rings. However this requires a special place of power to craft such items.
There are rumours about a site of power in the southern mountains. Old legends tell about a place where a part of the moon melted when it got to close to the sun and fell from the sky.
A lake formed in the crater of the crash. The water of this lake, soaked in intense moonlight for eons, should be sufficient to forge powerful artifacts!
Go to the lake and then summon me with this scroll. I will retire to study the tome, awaiting your summon.]],
answers = {
{"I will see if I can find it.", action=function(npc, player)
game.level:removeEntity(npc)
player:hasQuest("master-jeweler"):remove_tome(player)
player:hasQuest("master-jeweler"):start_search(player)
end},
}
}
return "welcome"
-- 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
newChat{ id="welcome",
text = [[I do not have time to talk, this ritual is intense, and we are not alone here. Stop them!]],
answers = {
{"I will not let you down!"},
{"[leave]"},
}
}
return "welcome"
......@@ -638,6 +638,19 @@ newDamageType{
end,
}
-- Holy light, damage demon/undead; heal ohers
newDamageType{
name = "holy light", type = "HOLY_LIGHT",
projector = function(src, x, y, type, dam)
local target = game.level.map(x, y, Map.ACTOR)
if target and not target.undead and not target.demon then
target:heal(dam / 2)
elseif target then
DamageType:get(DamageType.LIGHT).projector(src, x, y, DamageType.LIGHT, dam)
end
end,
}
-- Heals
newDamageType{
name = "healing", type = "HEAL",
......
......@@ -91,3 +91,20 @@ newEntity{
always_remember = true,
air_level = -5, air_condition="water",
}
newEntity{
define_as = "POISON_SHALLOW_WATER",
name = "poisoned shallow water", image = "terrain/water_floor.png",
display = '~', color=colors.LIGHT_GREEN, back_color=colors.DARK_GREEN,
add_displays = class:makeWater(false, "poison_"),
always_remember = true,
}
newEntity{
define_as = "POISON_DEEP_WATER",
name = "poisoned deep water", image = "terrain/water_floor.png",
display = '~', color=colors.YELLOW_GREEN, back_color=colors.DARK_GREEN,
add_displays = class:makeWater(true, "poison_"),
always_remember = true,
air_level = -5, air_condition="water",
}
......@@ -34,6 +34,7 @@ newEntity{
combat = { dam=resolvers.mbonus(46, 20), atk=15, apr=7, dammod={str=0.7} },
max_life = resolvers.rngavg(100,120),
infravision = 20,
demon = 1,
open_door = true,
rank = 2,
size_category = 3,
......
-- 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
-- last updated: 10:46 AM 2/3/2010
local Talents = require("engine.interface.ActorTalents")
newEntity{
define_as = "BASE_NPC_DEMON",
type = "demon", subtype = "minor",
display = "u", color=colors.WHITE,
body = { INVEN = 10 },
autolevel = "warrior",
ai = "dumb_talented_simple", ai_state = { talent_in=1, },
stats = { str=12, dex=10, mag=3, con=13 },
energy = { mod=1 },
combat_armor = 1, combat_def = 1,
combat = { dam=resolvers.mbonus(46, 20), atk=15, apr=7, dammod={str=0.7} },
max_life = resolvers.rngavg(100,120),
infravision = 20,
open_door = true,
rank = 2,
size_category = 3,
no_breath = 1,
demon = 1,
}
newEntity{ base = "BASE_NPC_DEMON",
name = "fire imp", color=colors.CRIMSON,
desc = "A small demon, lobbing spells at you.",
level_range = {10, nil}, exp_worth = 1,
rarity = 3,
rank = 2,
size_category = 1,
autolevel = "caster",
combat_armor = 1, combat_def = 0,
combat = {damtype=DamageType.FIRE},
resists={[DamageType.FIRE] = resolvers.mbonus(12, 5)},
resolvers.talents{
[Talents.T_FIRE_IMP_BOLT]=4,
[Talents.T_PHASE_DOOR]=2,
},
}
newEntity{ base = "BASE_NPC_DEMON",
name = "quasit", color=colors.LIGHT_GREY,
desc = "A small, heavily armoured demon, rushing toward you.",
level_range = {20, nil}, exp_worth = 1,
rarity = 1,
rank = 2,
size_category = 1,
autolevel = "caster",
combat_armor = 1, combat_def = 0,
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
resolvers.talents{
[Talents.T_HEAVY_ARMOUR_TRAINING]=1,
[Talents.T_SHIELD_PUMMEL]=2,
[Talents.T_RIPOSTE]=3,
[Talents.T_OVERPOWER]=1,
[Talents.T_RUSH]=6,
},
resolvers.equip{
{type="weapon", subtype="longsword", autoreq=true},
{type="armor", subtype="shield", autoreq=true},
{type="armor", subtype="heavy", autoreq=true}
},
}
......@@ -190,3 +190,32 @@ newEntity{ define_as = "ORB_DESTRUCTION",
inc_stats = { [Stats.STAT_STR] = 6, },
},
}
---------------------------- Various quest starters
newEntity{ base = "BASE_SCROLL", define_as = "JEWELER_TOME", subtype="tome",
unique = true, quest=true,
unided_name = "ancient tome",
name = "Ancient Tome titled 'Gems and their uses'",
color = colors.VIOLET,
fire_proof = true,
on_pickup = function(self, who)
if who == game.player then
self:identify(true)
who:grantQuest("master-jeweler")
end
end,
}
newEntity{ base = "BASE_SCROLL", define_as = "JEWELER_SUMMON", subtype="tome",
unique = true, quest=true, identified=true,
name = "Scroll of Summoning (Limmir the Jeweler)",
color = colors.VIOLET,
fire_proof = true,
max_power = 1, power_regen = 1,
use_power = { name = "summon Limmir the jeweler at the center of the lake of the moon", power = 1,
use = function(self, who) who:hasQuest("master-jeweler"):summon_limmir(who) end
},
}
-- 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 {
frag = "water",
vert = nil,
args = {
noisevol = { texture = 1 },
color1 = {0,1,0,1},
color2 = {0,0.8,0.6,1},
},
clone = false,
}
game/modules/tome/data/gfx/terrain/poison_water_floor.png

152 B

game/modules/tome/data/gfx/terrain/poison_water_floor_alpha.png

159 B

......@@ -23,7 +23,7 @@ quickEntity('T', {name='tree', display='#', color=colors.LIGHT_GREEN, block_move
quickEntity('o', {name='fountain', display='~', color=colors.BLUE, block_move=true, image="terrain/river.png", add_displays = mod.class.Grid:makeWater(true)})
quickEntity(' ', {name='grass', display='.', color=colors.LIGHT_GREEN, image="terrain/grass.png"})
quickEntity('2', {show_tooltip=true, name="Jewelry", display='2', color=colors.BLUE, resolvers.store("ANGOLWEN_JEWELRY"), image="terrain/wood_store_gem.png"})
quickEntity('2', {show_tooltip=true, name="Jewelry", display='2', color=colors.BLUE, resolvers.store("ANGOLWEN_JEWELRY"), resolvers.chatfeature("jewelry-store"), image="terrain/wood_store_gem.png"})
quickEntity('4', {show_tooltip=true, name="Alchemist", display='4', color=colors.LIGHT_BLUE, resolvers.store("POTION"), image="terrain/wood_store_potion.png"})
quickEntity('5', {show_tooltip=true, name="Scribe", display='5', color=colors.WHITE, resolvers.store("SCROLL"), image="terrain/wood_store_book.png"})
quickEntity('6', {show_tooltip=true, name="Staves & Wands", display='6', color=colors.RED, resolvers.store("ANGOLWEN_STAFF_WAND"), resolvers.chatfeature("magic-store"), image="terrain/wood_store_closed.png"})
......
......@@ -34,6 +34,16 @@ quickEntity('-', {name='grass', display='.', color=colors.LIGHT_GREEN, image="te
quickEntity('^', {name='hills', display='^', color=colors.SLATE, image="terrain/mountain.png", block_move=true, block_sight=true}, {no_teleport=true})
defineTile('@', "GRASS", nil, "HIGH_SUN_PALADIN_AERYN")
defineTile('j', "GRASS", nil, mod.class.NPC.new{
type = "humanoid", subtype = "elf",
display = "p", color=colors.RED,
name = "Limmir, Expert Jeweler",
size_category = 3, rank = 3,
ai = "simple",
faction = "sunwall",
can_talk = "jewelry-store",
can_quest = true,
})
quickEntity('1', {show_tooltip=true, name="Closed store", display='1', color=colors.LIGHT_UMBER, block_move=true, block_sight=true, image="terrain/wood_store_closed.png"}, {no_teleport=true})
quickEntity('2', {show_tooltip=true, name="Armour Smith", display='2', color=colors.UMBER, resolvers.store("ARMOR"), image="terrain/wood_store_armor.png"}, {no_teleport=true})
......@@ -96,7 +106,7 @@ MMM TTTT"""""""""""O""""""" MMMMM
MMMM TT"""""~~~"""""""""""""""""""""" MMMMM
MMMMMM TT"""""~~~~~""""""""""""""""""::""""MMMMMM
MMMMMMMMM""""""~~~~~"""""""TT"""""""::P:::::MMMMMM
MMMMMMMMM"""""""~~~"""""TT"T""""""::::::::::MMMMMM
MMMMMMMMM"""j"""~~~"""""TT"T""""""::::::::::MMMMMM
MMMMMMMMM"""""""~~""""""TTTT"""""::::::::P:::MMMMM
MMMMMMMMM"""""TT~"""""""TT"""""":::::P:::::MMMMMMM
MMMMMMMMM"""TTTT~""""""""""""""::::::::::::MMMMMMM
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment