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

New dwarven starting zones and town

git-svn-id: http://svn.net-core.org/repos/t-engine4@2841 51575b47-30f0-44d4-a5cc-537603b46e54
parent 962d266f
No related branches found
No related tags found
No related merge requests found
Showing
with 135 additions and 8 deletions
game/engines/default/data/gfx/ui/selector1.png

290 B | W: | H:

game/engines/default/data/gfx/ui/selector1.png

270 B | W: | H:

game/engines/default/data/gfx/ui/selector1.png
game/engines/default/data/gfx/ui/selector1.png
game/engines/default/data/gfx/ui/selector1.png
game/engines/default/data/gfx/ui/selector1.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector2.png

208 B | W: | H:

game/engines/default/data/gfx/ui/selector2.png

194 B | W: | H:

game/engines/default/data/gfx/ui/selector2.png
game/engines/default/data/gfx/ui/selector2.png
game/engines/default/data/gfx/ui/selector2.png
game/engines/default/data/gfx/ui/selector2.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector3.png

280 B | W: | H:

game/engines/default/data/gfx/ui/selector3.png

260 B | W: | H:

game/engines/default/data/gfx/ui/selector3.png
game/engines/default/data/gfx/ui/selector3.png
game/engines/default/data/gfx/ui/selector3.png
game/engines/default/data/gfx/ui/selector3.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector4.png

203 B | W: | H:

game/engines/default/data/gfx/ui/selector4.png

197 B | W: | H:

game/engines/default/data/gfx/ui/selector4.png
game/engines/default/data/gfx/ui/selector4.png
game/engines/default/data/gfx/ui/selector4.png
game/engines/default/data/gfx/ui/selector4.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector5.png

167 B | W: | H:

game/engines/default/data/gfx/ui/selector5.png

166 B | W: | H:

game/engines/default/data/gfx/ui/selector5.png
game/engines/default/data/gfx/ui/selector5.png
game/engines/default/data/gfx/ui/selector5.png
game/engines/default/data/gfx/ui/selector5.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector6.png

207 B | W: | H:

game/engines/default/data/gfx/ui/selector6.png

196 B | W: | H:

game/engines/default/data/gfx/ui/selector6.png
game/engines/default/data/gfx/ui/selector6.png
game/engines/default/data/gfx/ui/selector6.png
game/engines/default/data/gfx/ui/selector6.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector7.png

285 B | W: | H:

game/engines/default/data/gfx/ui/selector7.png

258 B | W: | H:

game/engines/default/data/gfx/ui/selector7.png
game/engines/default/data/gfx/ui/selector7.png
game/engines/default/data/gfx/ui/selector7.png
game/engines/default/data/gfx/ui/selector7.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector8.png

216 B | W: | H:

game/engines/default/data/gfx/ui/selector8.png

196 B | W: | H:

game/engines/default/data/gfx/ui/selector8.png
game/engines/default/data/gfx/ui/selector8.png
game/engines/default/data/gfx/ui/selector8.png
game/engines/default/data/gfx/ui/selector8.png
  • 2-up
  • Swipe
  • Onion skin
game/engines/default/data/gfx/ui/selector9.png

302 B | W: | H:

game/engines/default/data/gfx/ui/selector9.png

279 B | W: | H:

game/engines/default/data/gfx/ui/selector9.png
game/engines/default/data/gfx/ui/selector9.png
game/engines/default/data/gfx/ui/selector9.png
game/engines/default/data/gfx/ui/selector9.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -87,7 +87,7 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
local t = target:getTalentFromId(target.T_CHARGED_SHIELD)
dam = t.css_on_damage(target, t, type, dam)
end
-- Reduce damage with resistance
if target.resists then
local pen = 0
......@@ -110,12 +110,14 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
print("[PROJECTOR] final dam", dam)
local dead
dead, dam = target:takeHit(dam, src)
-- Log damage for later
if not DamageType:get(type).hideMessage then
local srcname = src.x and src.y and game.level.map.seens(src.x, src.y) and src.name:capitalize() or "Something"
game:delayedLogDamage(src, target, dam, ("%s%d %s#LAST#"):format(DamageType:get(type).text_color or "#aaaaaa#", math.ceil(dam), DamageType:get(type).name))
end
target:takeHit(dam, src)
if src.attr and src:attr("martyrdom") and not no_martyr then
DamageType.defaultProjector(target, src.x, src.y, type, dam * src.martyrdom / 100, tmp, true)
......
......@@ -862,7 +862,7 @@ newEntity{ base = "BASE_WAND", define_as = "ROD_OF_ANNULMENT",
newEntity{ base = "BASE_WARAXE",
power_source = {arcane=true},
define_as = "SKULLCLEAVER", rarity=false,
define_as = "SKULLCLEAVER",
unided_name = "crimson waraxe",
name = "Skullcleaver", unique=true,
desc = [[A small but sharp axe, with a handle made of polished bone. The blade has chopped through the skulls of many, and has been stained a deep crimson.]],
......@@ -881,3 +881,20 @@ newEntity{ base = "BASE_WARAXE",
inc_damage = { [DamageType.BLIGHT] = 8 },
},
}
newEntity{ base = "BASE_DIGGER",
power_source = {unknown=true},
define_as = "TOOTH_MOUTH",
unided_name = "a tooth", unique = true,
name = "Tooth of the Mouth",
desc = [[A huge tooth taken from the Mouth, in the Deep Bellow.]],
level_range = {5, 12},
cost = 50,
material_level = 3,
digspeed = 12,
wielder = {
inc_damage = { [DamageType.BLIGHT] = 4 },
on_melee_hit = {[DamageType.BLIGHT] = 15},
combat_apr = 5,
},
}
......@@ -19,6 +19,7 @@
defineTile("#", {"UNDERGROUND_TREE","UNDERGROUND_TREE2","UNDERGROUND_TREE3","UNDERGROUND_TREE4","UNDERGROUND_TREE5","UNDERGROUND_TREE6","UNDERGROUND_TREE7","UNDERGROUND_TREE8","UNDERGROUND_TREE9","UNDERGROUND_TREE10","UNDERGROUND_TREE11","UNDERGROUND_TREE12","UNDERGROUND_TREE13","UNDERGROUND_TREE14","UNDERGROUND_TREE15","UNDERGROUND_TREE16","UNDERGROUND_TREE17","UNDERGROUND_TREE18","UNDERGROUND_TREE19","UNDERGROUND_TREE20",})
defineTile(".", "UNDERGROUND_FLOOR")
defineTile("<", "UNDERGROUND_LADDER_UP")
defineTile("M", "UNDERGROUND_FLOOR", nil, "THE_MOUTH")
startx = 1
......
......@@ -1262,8 +1262,9 @@ newTalent{
if not target then return end
if self:reactionToward(target) < 0 and not tgts[target] then
tgts[target] = true
local ox, oy = target.x, target.y
target:pull(self.x, self.y, 1)
game.logSeen(target, "%s is pulled in!", target.name:capitalize())
if target.x ~= ox or target.y ~= oy then game.logSeen(target, "%s is pulled in!", target.name:capitalize()) end
end
end)
return true
......@@ -1272,3 +1273,45 @@ newTalent{
return ([[Pull all foes toward you.]])
end,
}
newTalent{
name = "Gift of Amakthel",
type = {"technique/other", 1},
points = 5,
cooldown = 6,
tactical = { ATTACK = 2 },
range = 10,
target = function(self, t)
return {type="hit", range=self:getTalentRange(t), talent=t}
end,
action = function(self, t)
local tg = self:getTalentTarget(t)
local tx, ty = self.x, self.y
if not tx or not ty then return nil end
-- Find space
local x, y = util.findFreeGrid(tx, ty, 3, true, {[Map.ACTOR]=true})
if not x then
game.logPlayer(self, "Not enough space to invoke!")
return
end
-- Find an actor with that filter
local m = game.zone:makeEntityByName(game.level, "actor", "SLIMY_CRAWLER")
if m then
m.exp_worth = 0
m.summoner = self
m.summon_time = 10
game.zone:addEntity(game.level, m, "actor", x, y)
local target = game.level.map(tx, ty, Map.ACTOR)
m:setTarget(target)
game.logSeen(self, "%s spawns a slimy crawler!", self.name:capitalize())
end
return true
end,
info = function(self, t)
return ([[Invoke a slimy crawler.]])
end,
}
......@@ -30,7 +30,7 @@ newEntity{ base="BASE_NPC_CORRUPTED_HORROR", define_as = "THE_MOUTH",
color=colors.VIOLET,
desc = [["From bellow, it devours."]],
level_range = {7, nil}, exp_worth = 2,
max_life = 150, life_rating = 12, fixed_rating = true,
max_life = 10000, life_rating = 0, fixed_rating = true,
stats = { str=10, dex=10, cun=12, mag=20, con=10 },
rank = 4,
size_category = 4,
......@@ -42,7 +42,7 @@ newEntity{ base="BASE_NPC_CORRUPTED_HORROR", define_as = "THE_MOUTH",
combat = {dam=100, atk=1000, apr=1000, physcrit=1000},
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
resolvers.drops{chance=100, nb=1, {defined="RING_OF_HORRORS", random_art_replace={chance=75}} },
resolvers.drops{chance=100, nb=1, {defined="TOOTH_MOUTH", random_art_replace={chance=35}} },
resolvers.drops{chance=100, nb=3, {ego_chance=100} },
resolvers.talents{
......@@ -50,11 +50,71 @@ newEntity{ base="BASE_NPC_CORRUPTED_HORROR", define_as = "THE_MOUTH",
[Talents.T_DRAIN]=1,
},
autolevel = "caster",
ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
autolevel = "warriormage",
ai = "tactical", ai_state = { talent_in=1 },
ai_tactic = resolvers.tactic"ranged",
on_takehit = function(self, value)
if value <= 500 then
game.logSeen(self, "#CRIMSON#%s seems invulnerable, there must be an other way to kill it!", self.name:capitalize())
return 0
end
return value
end,
-- Invoke crawlers every few turns
on_act = function(self)
if not self.ai_target.actor or self.ai_target.actor.dead then return end
if not self:hasLOS(self.ai_target.actor.x, self.ai_target.actor.y) then return end
self.last_crawler = self.last_crawler or (game.turn - 100)
if game.turn - self.last_crawler >= 100 then -- Summon a crawler every 10 turns
self:forceUseTalent(self.T_GIFT_OF_AMAKTHEL, {no_energy=true})
self.last_crawler = game.turn
end
end,
on_die = function(self, who)
game.player:resolveSource():setQuestStatus("deep-bellow", engine.Quest.COMPLETED)
end,
}
newEntity{ base="BASE_NPC_CORRUPTED_HORROR", define_as = "SLIMY_CRAWLER",
name = "slimy crawlyer",
color = colors.GREEN,
desc = [[This disgusting... thing crawls on the floor toward you with great speed.
It seems to come from the digestive system of the mouth.]],
level_range = {4, nil}, exp_worth = 0,
max_life = 40, life_rating = 5, fixed_rating = true,
movement_speed = -0.5,
size_category = 1,
combat = { dam=resolvers.mbonus(15, 15), damtype=DamageType.SLIME, dammod={str=1} },
autolevel = "warrior",
ai = "dumb_talented_simple", ai_state = { talent_in=4, ai_move="move_astar" },
resolvers.talents{
[Talents.T_KNOCKBACK]=1,
},
on_act = function(self)
local tgts = {}
for i, actor in ipairs(game.party.m_list) do
if not actor.dead then tgts[#tgts+1] = actor end
end
self:setTarget(rng.table(tgts))
if self.summoner.dead then
self:die()
game.logSeen(self, "#AQUAMARINE#With the Mouth death its crawler also falls lifeless on the ground!")
end
end,
on_die = function(self, who)
if self.summoner and not self.summoner.dead then
game.logSeen(self, "#AQUAMARINE#As %s falls you notice that %s seems to shudder in pain!", self.name, self.summoner.name)
self.summoner:takeHit(1000, who)
end
end,
}
......@@ -70,6 +70,9 @@ return {
actor = {
nb_npc = {0, 0},
},
object = {
nb_object = {1, 1},
},
},
},
},
......
......@@ -101,5 +101,6 @@ return {
local chat = require("engine.Chat").new("norgan-saved", norgan, game.player)
chat:invoke()
end
if norgan then game.party:removeMember(norgan, true) end
end,
}
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