Skip to content
Snippets Groups Projects
Commit 2b21d91d authored by DarkGod's avatar DarkGod
Browse files

this is NOT finished. like at all

parent 4b9fdb01
No related branches found
No related tags found
No related merge requests found
Showing
with 434 additions and 4 deletions
...@@ -47,7 +47,7 @@ fs.setWritePath(fs.getHomePath()) ...@@ -47,7 +47,7 @@ fs.setWritePath(fs.getHomePath())
-- Loads default config & user config -- Loads default config & user config
fs.mount(engine.homepath, "/") fs.mount(engine.homepath, "/")
config.loadString[[ config.loadString[[
audio.music_volume = 60 audio.music_volume = 40
audio.effects_volume = 100 audio.effects_volume = 100
audio.enable = true audio.enable = true
aa_text = true aa_text = true
......
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 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
level.data.on_enter_list.conclave_vault = function()
if game.level.data.conclave_vault_added then return end
if game:getPlayer(true).level < 18 then return end
local spot = game.level:pickSpot{type="world-encounter", subtype="conclave-vault"}
if not spot then return end
game.level.data.conclave_vault_added = true
local g = game.level.map(spot.x, spot.y, engine.Map.TERRAIN):cloneFull()
g.name = "Door to an abandonned vault"
g.display='>' g.color_r=100 g.color_g=0 g.color_b=255 g.notice = true
g.change_level=1 g.change_zone="conclave-vault" g.glow=true
g.add_displays = g.add_displays or {}
g.add_displays[#g.add_displays+1] = mod.class.Grid.new{image="terrain/dungeon_entrance02.png", z=5}
g:altered()
g:initGlow()
game.zone:addEntity(game.level, g, "terrain", spot.x, spot.y)
print("[WORLDMAP] conclave vault at", spot.x, spot.y)
require("engine.ui.Dialog"):simplePopup("WRITE ME", "YES INDEED")
end
return true
...@@ -455,6 +455,7 @@ addSpot({37, 25}, "world-encounter", "lost-merchant") ...@@ -455,6 +455,7 @@ addSpot({37, 25}, "world-encounter", "lost-merchant")
addSpot({35, 35}, "world-encounter", "noxious-caldera") addSpot({35, 35}, "world-encounter", "noxious-caldera")
addSpot({53, 5}, "world-encounter", "sludgenest") addSpot({53, 5}, "world-encounter", "sludgenest")
addSpot({162, 59}, "world-encounter", "orc-breeding-pits-spawn") addSpot({162, 59}, "world-encounter", "orc-breeding-pits-spawn")
addSpot({47, 34}, "world-encounter", "conclave-vault")
-- addZone section -- addZone section
addZone({1, 1, 78, 43}, "zonename", "Maj'Eyal") addZone({1, 1, 78, 43}, "zonename", "Maj'Eyal")
......
...@@ -145,7 +145,7 @@ newTalent{ ...@@ -145,7 +145,7 @@ newTalent{
local procs = t.getProcs(self, t) local procs = t.getProcs(self, t)
local duration = t.getDuration(self, t) local duration = t.getDuration(self, t)
return ([[Activate to Seal Fate for %d turns. When you damage a target while Seal Fate is active you have a 50%% chance to increase the duration of one detrimental status effect on it by one turn. return ([[Activate to Seal Fate for %d turns. When you damage a target while Seal Fate is active you have a 50%% chance to increase the duration of one detrimental status effect on it by one turn.
If you have Spin Fate active the chance twill be increased by 33%% per Spin (to a maximum of 100%% at three Spin.) If you have Spin Fate active the chance will be increased by 33%% per Spin (to a maximum of 100%% at three Spin.)
This can occur at most %d times per turn. While Seal Fate is active you may gain one additional spin per turn.]]):format(duration, procs) This can occur at most %d times per turn. While Seal Fate is active you may gain one additional spin per turn.]]):format(duration, procs)
end, end,
} }
\ No newline at end of file
...@@ -36,7 +36,7 @@ makeWarpMine = function(self, t, x, y, type) ...@@ -36,7 +36,7 @@ makeWarpMine = function(self, t, x, y, type)
type = "temporal", id_by_type=true, unided_name = "trap", type = "temporal", id_by_type=true, unided_name = "trap",
display = '^', color=colors.BLUE, image = ("trap/chronomine_%s_0%d.png"):format(type == "toward" and "blue" or "red", rng.avg(1, 4, 3)), display = '^', color=colors.BLUE, image = ("trap/chronomine_%s_0%d.png"):format(type == "toward" and "blue" or "red", rng.avg(1, 4, 3)),
shader = "shadow_simulacrum", shader_args = { color = {0.2, 0.2, 0.2}, base = 0.8, time_factor = 1500 }, shader = "shadow_simulacrum", shader_args = { color = {0.2, 0.2, 0.2}, base = 0.8, time_factor = 1500 },
dam = dam, t=t, power = power, dest_power = dest_power, dam = dam, t=t.id, power = power, dest_power = dest_power,
temporary = duration, temporary = duration,
x = x, y = y, type = type, x = x, y = y, type = type,
summoner = self, summoner_gain_exp = true, summoner = self, summoner_gain_exp = true,
...@@ -47,7 +47,7 @@ makeWarpMine = function(self, t, x, y, type) ...@@ -47,7 +47,7 @@ makeWarpMine = function(self, t, x, y, type)
end, end,
triggered = function(self, x, y, who) triggered = function(self, x, y, who)
-- Project our damage -- Project our damage
self.summoner:project({type="hit",x=x,y=y, talent=t}, x, y, engine.DamageType.WARP, self.dam) self.summoner:project({type="hit",x=x,y=y, talent=self.t}, x, y, engine.DamageType.WARP, self.dam)
-- Teleport? -- Teleport?
if not who.dead then if not who.dead then
......
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 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 { one_per_level=true,
{group="majeyal-generic"},
{name="protective-aura", minor=true, percent=50},
{name="necrotic-air", minor=true, percent=50},
{name="glowing-chest", minor=true, percent=20},
}
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 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/forest.lua")
load("/data/general/grids/water.lua")
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 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/skeleton.lua", rarity(0))
load("/data/general/npcs/ghoul.lua", rarity(2))
load("/data/general/npcs/bone-giant.lua", rarity(8))
local Talents = require("engine.interface.ActorTalents")
newEntity{ define_as="SUBJECT_Z",
name = "Subject Z", color=colors.VIOLET, display = "p",
desc = "This seems to be the 'subject Z' the notes spoke about. He looks human, but this cannot be -- he would be about five thousands years old!",
type = "humanoid", subtype = "human",
killer_message = "and bloodily smeared across the granite walls",
level_range = {10, nil}, exp_worth = 2,
rank = 4,
autolevel = "roguemage",
max_life = 100, life_rating = 12,
combat_armor = 0, combat_def = 15,
open_door = 1,
never_act = true,
ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1, FINGER=1 },
see_invisible = 20,
resolvers.equip{
{type="weapon", subtype="dagger", autoreq=true, force_drop=true, forbid_power_source={antimagic=true}, tome_drops="boss"},
{type="weapon", subtype="dagger", autoreq=true, force_drop=true, forbid_power_source={antimagic=true}, tome_drops="boss"},
{type="armor", subtype="light", autoreq=true, force_drop=true, forbid_power_source={antimagic=true}, tome_drops="boss"},
{defined="NIGHT_SONG", random_art_replace={chance=65}, autoreq=true},
},
resolvers.talents{
[Talents.T_DUAL_WEAPON_DEFENSE]={base=3, every=8, max=6},
[Talents.T_DUAL_WEAPON_TRAINING]={base=3, every=8, max=6},
[Talents.T_FLURRY]={base=2, every=8, max=6},
[Talents.T_DIRTY_FIGHTING]={base=2, every=8, max=6},
[Talents.T_LETHALITY]={base=3, every=8, max=6},
[Talents.T_WEAPON_COMBAT]={base=1, every=10, max=4},
[Talents.T_KNIFE_MASTERY]={base=1, every=10, max=4},
[Talents.T_SHADOW_COMBAT]={base=4, every=8, max=7},
[Talents.T_SHADOWSTEP]={base=1, every=6, max=5},
[Talents.T_PHASE_DOOR]=3,
[Talents.T_SECOND_WIND]={base=4, every=8, max=6},
[Talents.T_DARK_TENDRILS]={base=2, every=8, max=5},
},
resolvers.inscriptions(1, {"manasurge rune"}),
resolvers.inscriptions(1, "infusion"),
resolvers.sustains_at_birth(),
seen_by = function(self, who)
if not game.party:hasMember(who) then return end
self.seen_by = nil
self.never_act = nil
local wayist = nil
for uid, e in pairs(game.level.entities) do if e.define_as == "YEEK_WAYIST" then wayist = e break end end
if not wayist then return end
wayist.never_act = nil
wayist:setTarget(self)
self:setTarget(wayist)
wayist:doEmote("Sacrifice for the Way!", 60)
end,
on_die = function(self, who)
local wayist = nil
for uid, e in pairs(game.level.entities) do if e.define_as == "YEEK_WAYIST" then wayist = e break end end
if not wayist then return end
local p = game.party:findMember{main=true}
-- Yeeks really, really, really, hate halflings
if p.descriptor.race == "Halfling" then
wayist:doEmote("Halfling?! DIE!!!!!", 70)
wayist:checkAngered(p, false, -200)
elseif p.descriptor.race == "Yeek" then
wayist:doEmote("The Way sent you?", 70)
wayist.can_talk = "yeek-wayist"
else
wayist:doEmote("You.. saved me?", 70)
wayist.can_talk = "yeek-wayist"
end
end,
}
newEntity{ define_as="YEEK_WAYIST",
name = "Yeek Wayist", color=colors.VIOLET, display = "y",
desc = "This creature is about as tall as a halfling. It is covered in white silky fur and has a disproportionate head. The weirdest thing about it though, its weapon simply float in front of it.",
type = "humanoid", subtype = "yeek",
level_range = {10, nil},
rank = 3,
autolevel = "wildcaster",
max_life = 100, life_rating = 10,
faction = "the-way",
combat_armor = 0, combat_def = 0,
psi_regen = 5,
open_door = 1,
never_act = true,
ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, PSIONIC_FOCUS=1 },
resolvers.equip{
{type="weapon", subtype="greatsword", autoreq=true},
},
resolvers.talents{
[Talents.T_KINETIC_SHIELD]=3,
[Talents.T_MINDHOOK]=1,
[Talents.T_PYROKINESIS]=3,
[Talents.T_MINDLASH]=2,
[Talents.T_CHARGED_AURA]=2,
[Talents.T_TELEKINETIC_SMASH]=2,
},
resolvers.inscriptions(1, "infusion"),
resolvers.sustains_at_birth(),
}
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 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-maj-eyal.lua")
for i = 1, 4 do
newEntity{ base = "BASE_LORE",
define_as = "NOTE"..i,
name = "research log of halfling mage Hompalan", lore="halfling-research-note-"..i,
desc = [[A very faded research note, nearly unreadable.]],
rarity = false,
encumberance = 0,
}
end
newEntity{ base = "BASE_CLOTH_ARMOR",
power_source = {psionic=true},
unique = true,
name = "Yeek-fur Robe", color = colors.WHITE, image = "object/artifact/yeek_fur_robe.png",
unided_name = "sleek fur robe",
desc = [[A beautifully soft robe of fine white fur. It looks designed for a halfling noble, with glorious sapphires sewn across the hems. But entrancing as it is, you can't help but feel a little queasy wearing it.]],
level_range = {12, 22},
rarity = 20,
cost = 250,
material_level = 2,
wielder = {
combat_def = 9,
combat_armor = 3,
combat_mindpower = 5,
combat_mentalresist = 10,
inc_damage={[DamageType.MIND] = 5},
resists={[DamageType.COLD] = 20},
},
on_wear = function(self, who)
if who.descriptor and who.descriptor.race == "Yeek" then
local Talents = require "engine.interface.ActorStats"
self:specialWearAdd({"wielder","combat_mindpower"}, -15)
self:specialWearAdd({"wielder","combat_mentalresist"}, -25)
game.logPlayer(who, "#RED#You feel disgusted touching this thing!")
end
if who.descriptor and who.descriptor.race == "Halfling" then
local Talents = require "engine.interface.ActorStats"
self:specialWearAdd({"wielder","resists"}, {[engine.DamageType.MIND] = 15,})
self:specialWearAdd({"wielder","combat_mentalresist"}, 10)
game.logPlayer(who, "#LIGHT_BLUE#You feel this robe was made for you!")
end
end,
}
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 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/traps/complex.lua")
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009 - 2014 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 = "Old Vault",
level_range = {25, 35},
level_scheme = "player",
max_level = 4,
decay = {300, 800, only={object=true}},
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,
ambient_music = "Far away.ogg",
min_material_level = 2,
max_material_level = 3,
generator = {
map = {
class = "engine.generator.map.Roomer",
nb_rooms = 10,
rooms = {"random_room", {"money_vault",5}, {"lesser_vault",8}},
lesser_vaults_list = {"circle","rat-nest","skeleton-mage-cabal"},
lite_room_chance = 100,
['.'] = "FLOOR",
['#'] = "WALL",
up = "UP",
down = "DOWN",
door = "DOOR",
force_last_stair = true,
},
actor = {
class = "mod.class.generator.actor.Random",
nb_npc = {20, 30},
},
object = {
class = "engine.generator.object.Random",
nb_object = {3, 6},
},
trap = {
class = "engine.generator.trap.Random",
nb_trap = {0, 0},
},
},
levels =
{
[1] = {
day_night = true,
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 = "FLOOR",
up = "FLAT_UP_WILDERNESS",
wall = "WALL",
down = "FLAT_DOWN4",
door = "DOOR",
nb_rooms = false,
rooms = false,
}, },
},
[4] = {
decay = false,
generator = {
map = {
class = "engine.generator.map.Static",
map = "zones/halfling-ruins-last",
},
actor = {
area = {x1=0, x2=49, y1=0, y2=40},
},
trap = {
nb_trap = {0, 0},
},
},
},
},
post_process = function(level)
-- Place a lore note on each level
game:placeRandomLoreObject("NOTE"..level.level)
end,
on_enter = function(lev, old_lev, newzone)
if newzone then
game:onLevelLoad("wilderness-1", function(zone, level)
local p = game.party:findMember{main=true}
local spot = level:pickSpot{type="zone-pop", subtype="halfling-ruins"}
p.wild_x = spot.x
p.wild_y = spot.y
end)
end
end,
}
...@@ -20,4 +20,5 @@ ...@@ -20,4 +20,5 @@
return { return {
{name="noxious-caldera", percent=30, special=function() if game:getPlayer(true) and game:getPlayer(true).descriptor and game:getPlayer(true).descriptor.race == "Yeek" then return true end end}, {name="noxious-caldera", percent=30, special=function() if game:getPlayer(true) and game:getPlayer(true).descriptor and game:getPlayer(true).descriptor.race == "Yeek" then return true end end},
{name="sludgenest", percent=30, special=function() if game:getPlayer(true) and game:getPlayer(true).descriptor and game:getPlayer(true).descriptor.subrace == "Thalore" then return true end end}, {name="sludgenest", percent=30, special=function() if game:getPlayer(true) and game:getPlayer(true).descriptor and game:getPlayer(true).descriptor.subrace == "Thalore" then return true end end},
{name="conclave-vault", percent=30, special=function() if game:getPlayer(true) and game:getPlayer(true).descriptor and game:getPlayer(true).descriptor.subrace == "Shalore" then return true end end},
} }
...@@ -980,5 +980,11 @@ ...@@ -980,5 +980,11 @@
<property name="type" value="&quot;world-encounter&quot;"/> <property name="type" value="&quot;world-encounter&quot;"/>
</properties> </properties>
</object> </object>
<object name="Conclave vault" x="1508" y="1093" width="21" height="20">
<properties>
<property name="subtype" value="&quot;conclave-vault&quot;"/>
<property name="type" value="&quot;world-encounter&quot;"/>
</properties>
</object>
</objectgroup> </objectgroup>
</map> </map>
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