Commit bbb5854ac749df30bfc4f23eb2cc621185a7bacc

Authored by DarkGod
1 parent 1c47ceeb

lol what the hell was that doing here :)

Showing 44 changed files with 0 additions and 2693 deletions
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -newBirthDescriptor{
21   - type = "world",
22   - name = "A Twist of Fate",
23   - display_name = "A Twist of Fate",
24   - desc =
25   - {
26   - "All of time and space are in danger: A dangerous anomaly threatens to destroy reality!",
27   - "The Keepers of Reality are working hard to stave off the coming Temporal Ekpyrosis.",
28   - "But will you be the one to stop the catastrophe and find whomever is causing it?",
29   - "What does Fate have in store for you?"
30   -
31   - },
32   - descriptor_choices = getBirthDescriptor("world", "Maj'Eyal").descriptor_choices,
33   - copy = {
34   - -- Override normal stuff
35   - before_starting_zone = function(self)
36   - self.starting_level = 1
37   - self.money = 200
38   - self.starting_level_force_down = nil
39   - self.starting_zone = "atof+abandoned-village"
40   - self.starting_quest = "atof+ashes-to-ashes"
41   - self.starting_intro = "atof"
42   - self.faction = "keepers-of-reality"
43   - end,
44   - },
45   - game_state = {
46   - campaign_name = "a-twist-of-fate",
47   - __allow_transmo_chest = true,
48   - ignore_prodigies_special_reqs = true,
49   - },
50   -}
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   --- Find a random spot
21   -local x, y = game.state:findEventGrid(level)
22   -if not x then return false end
23   -
24   -if core.shader.active(4) then
25   - level.map:particleEmitter(x, y, 4, "shader_ring_rotating", {rotation=0, radius=8}, {type="flames", aam=0.2, zoom=1, npow=8, time_factor=6000, color1={0.3,0.1,0.0,6}, color2={0.6,0.3,0.0,1}, hide_center=0})
26   -else
27   - level.map:particleEmitter(x, y, 4, "ultrashield", {rm=200, rM=250, gm=200, gM=250, bm=80, bM=120, am=220, aM=250, radius=8, density=1, life=14, instop=17})
28   -end
29   -
30   -local on_stand = function(self, x, y, who) who:setEffect(who.EFF_TIME_CALM, 1, {}) end
31   -
32   -local grids = core.fov.circle_grids(x, y, 4, function(_, lx, ly) return not game.state:canEventGrid(level, lx, ly) end)
33   -for x, yy in pairs(grids) do for y, _ in pairs(yy) do
34   - local g = game.level.map(x, y, engine.Map.TERRAIN):cloneFull()
35   - g.on_stand = g.on_stand or on_stand
36   - if g.on_stand == on_stand and g.type == "floor" then
37   - g.name = g.name .. " (time calm)"
38   - if not g.special_minimap then g.special_minimap = colors.TAN end
39   - end
40   - g.always_remember = true
41   - game.zone:addEntity(game.level, g, "terrain", x, y)
42   -end end
43   -print("[EVENT] time-calm centered at ", x, y)
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   --- Find a random spot
21   -local x, y = game.state:findEventGrid(level)
22   -if not x then return false end
23   -
24   -if core.shader.active(4) then
25   - level.map:particleEmitter(x, y, 4, "shader_ring_rotating", {rotation=0, radius=8}, {type="flames", aam=0.2, zoom=1, npow=8, time_factor=6000, color1={0.3,0.3,0.0,6}, color2={0.6,0.6,0.0,1}, hide_center=0})
26   -else
27   - level.map:particleEmitter(x, y, 4, "ultrashield", {rm=200, rM=250, gm=200, gM=250, bm=80, bM=120, am=220, aM=250, radius=8, density=1, life=14, instop=17})
28   -end
29   -
30   -local on_stand = function(self, x, y, who) who:setEffect(who.EFF_TIME_STORM, 1, {}) end
31   -
32   -local grids = core.fov.circle_grids(x, y, 4, function(_, lx, ly) return not game.state:canEventGrid(level, lx, ly) end)
33   -for x, yy in pairs(grids) do for y, _ in pairs(yy) do
34   - local g = game.level.map(x, y, engine.Map.TERRAIN):cloneFull()
35   - g.on_stand = g.on_stand or on_stand
36   - if g.on_stand == on_stand and g.type == "floor" then
37   - g.name = g.name .. " (time storm)"
38   - if not g.special_minimap then g.special_minimap = colors.GOLD end
39   - end
40   - g.always_remember = true
41   - game.zone:addEntity(game.level, g, "terrain", x, y)
42   -end end
43   -print("[EVENT] time-storm centered at ", x, y)
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -local Talents = require("engine.interface.ActorTalents")
21   -
22   -newEntity{
23   - define_as = "BASE_NPC_HIGHER_AQUATIC_CRITTER",
24   - type = "aquatic", subtype = "critter",
25   - display = "A", color=colors.WHITE,
26   - body = { INVEN = 10 },
27   - autolevel = "warrior",
28   - ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
29   - stats = { str=15, dex=12, mag=3, con=15 },
30   - combat_armor = 1, combat_def = 1,
31   - combat = { dam=resolvers.levelup(resolvers.mbonus(36, 10), 1, 1), atk=25, apr=7, dammod={str=0.8} },
32   - max_life = resolvers.rngavg(20,30), life_rating = 9,
33   - infravision = 10,
34   - rank = 1,
35   - size_category = 2,
36   - can_breath={water=1},
37   -
38   - resists = { [DamageType.COLD] = 25, },
39   - not_power_source = {arcane=true, technique_ranged=true},
40   -}
41   -
42   -newEntity{ base = "BASE_NPC_HIGHER_AQUATIC_CRITTER",
43   - name = "shark", color = colors.LIGHT_SLATE, image = "npc/shark.png",
44   - desc = "A great shark, very fast and very hungry.",
45   - level_range = {10, nil}, exp_worth = 1,
46   - rank = 2,
47   - stats = { str=30, dex=20, mag=3, con=20 },
48   - resists = { [DamageType.PHYSICAL] = 20, },
49   - resolvers.talents{ [Talents.T_RUSH]=5, [Talents.T_LACERATING_STRIKES]=5},
50   - rarity = 2,
51   -}
52   -
53   -newEntity{ base = "BASE_NPC_HIGHER_AQUATIC_CRITTER",
54   - name = "crocodile", color = colors.DARK_GREEN, image = "npc/crocodile.png",
55   - desc = "A great crocodile, protected by hard scales and a jaw full of sharp teeth.",
56   - level_range = {10, nil}, exp_worth = 1,
57   - rank = 2,
58   - stats = { str=30, dex=20, mag=3, con=30 },
59   - resists = { [DamageType.PHYSICAL] = 20, },
60   - resolvers.talents{[Talents.T_LACERATING_STRIKES]=5},
61   - rarity = 2,
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -local Talents = require("engine.interface.ActorTalents")
21   -
22   -newEntity{ define_as = "AKHO",
23   - type = "humanoid", subtype = "human",
24   - display = "p", color=colors.PURPLE,
25   - faction = "keepers-of-reality",
26   - name = "Commander Akho",
27   - resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/akho.jpg", display_h=2, display_y=-1}}},
28   - desc = [[A young woman in dark plate armor, flickering softly as her timeline readjusts itself. She looks very young, but you have a feeling that she is much, much older.]],
29   -
30   - level_range = {50, nil}, exp_worth = 1,
31   - rarity = false,
32   - max_life = 1000, life_rating = 15, fixed_rating = true,
33   - life_regen = 50,
34   - paradox_regen = -10,
35   - cant_be_moved = 1,
36   -
37   - rank = 4,
38   - size_category = 3,
39   - female = true,
40   - infravision = 10,
41   - stats = { str=10, dex=20, cun=12, mag=16, wil=20, con=14 },
42   - instakill_immune = 1,
43   - teleport_immune = 1,
44   -
45   - can_talk = "akho",
46   -
47   - autolevel = "warriormage",
48   - ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
49   - ai_tactic = resolvers.tactic"ranged",
50   - resolvers.inscriptions(3, "rune"),
51   -
52   - body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
53   - --resolvers.drops{chance=100, nb=5, {tome_drops="boss"} },
54   -
55   - resolvers.equip{
56   - {type="weapon", subtype="longbow", forbid_power_source={antimagic=true}, autoreq=true},
57   - {type="armor", subtype="massive", forbid_power_source={antimagic=true}, autoreq=true},
58   - {type="ammo", subtype="arrow", forbid_power_source={antimagic=true}, autoreq=true},
59   - },
60   -
61   - resolvers.talents{
62   - [Talents.T_SHOOT]=5,
63   - [Talents.T_ARMOUR_TRAINING]=5,
64   -
65   - [Talents.T_FORESIGHT]=5,
66   - [Talents.T_PRECOGNITION]=5,
67   -
68   - [Talents.T_WEAPON_FOLDING]=5,
69   - [Talents.T_INVIGORATE]=5,
70   - [Talents.T_WEAPON_MANIFOLD]=5,
71   - [Talents.T_BREACH]=5,
72   -
73   - [Talents.T_STRENGTH_OF_PURPOSE]=5,
74   - [Talents.T_VIGILANCE]=5,
75   -
76   - [Talents.T_SPACETIME_STABILITY]=5,
77   - [Talents.T_TIME_SHIELD]=5,
78   -
79   - [Talents.T_TIME_STOP]=5,
80   - },
81   - resolvers.sustains_at_birth(),
82   -
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -newEntity{
21   - define_as = "PORT_TRIDENTS",
22   - name = "trident smith",
23   - display = '3', color=colors.UMBER,
24   - store = {
25   - purse = 25,
26   - empty_before_restock = false,
27   - filters = {
28   - {type="weapon", subtype="trident", id=true, tome_drops="store", special_rarity="trident_rarity"},
29   - },
30   - },
31   -}
32   -
33   -newEntity{
34   - define_as = "PORT_WEAPONS",
35   - name = "weapon smith",
36   - display = '3', color=colors.UMBER,
37   - store = {
38   - purse = 25,
39   - empty_before_restock = false,
40   - filters = {
41   - {type="weapon", subtype="waraxe", id=true, tome_drops="store"},
42   - {type="weapon", subtype="battleaxe", id=true, tome_drops="store"},
43   - {type="weapon", subtype="longsword", id=true, tome_drops="store"},
44   - {type="weapon", subtype="greatsword", id=true, tome_drops="store"},
45   - {type="weapon", subtype="mace", id=true, tome_drops="store"},
46   - {type="weapon", subtype="greatmaul", id=true, tome_drops="store"},
47   - {type="weapon", subtype="dagger", id=true, tome_drops="store"},
48   - },
49   - },
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   ---------------------------------------------------------------------------
21   --- Distorted Grove
22   ---------------------------------------------------------------------------
23   -
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2015 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   ---------------------------------------------------------------------------
21   --- Fortress of Kor'Pul
22   ---------------------------------------------------------------------------
23   -
24   -newLore{
25   - id = "kor-pul-chronicles-1",
26   - category = "kor'pul",
27   - name = "Chronicles of Kor'pul (1)",
28   - lore = [[#{italic}#It appears to be a page fallen out of a book. The handwriting is archaic, but clean and readable.#{normal}#
29   -
30   - I remember the smell of the wet earth after the autumn rains. We walked across the graveyard, grandfather leading the way between the scattered gravestones. The large, crudely chiseled rocks that jutted out of the earth appeared dark and threatening to me. I was still very young and could not yet read the runes hewn into them. But I knew that they told of what was gone, long gone below the earth. And so I stared, a strange foreboding sensation gripping my heart, while grandfather did his work. Long he dug, and deep, until the hole was made. Then the men came and put the large wooden box into the earth.
31   -
32   - I was young, but I knew what the box meant. Grandfather had explained to me what it was he was doing. The old woman was dead, he had said. She was gone, her soul perhaps dancing among the stars, but the body remained. And it was the custom among our people to take the body and put it in the earth it came from. All people would die someday, and his task was to dig the holes in the earth. His words would echo in my head for a long time afterwards. They were all I could think of as I stood among the gravestones. All people would die someday.
33   -
34   - And the stones glared at me with their graven runes, and I knew what was to come. I would grow old and die, and the men would come and put me in a wooden box in the earth, and they would put a stone above my head. I could barely breathe, my thoughts racing in my head. Never again would I see the flowers of spring, or the verdant glory of summer, or the blazing colours of the autumn leaves.
35   -
36   - I was relieved when grandfather came and brought me away that day, away from the stones and all they stood for. But I never forgot the doom that hung over me and all of my kind. From this day onward, I would do everything I could to escape it.
37   -
38   - ]],
39   -}
40   -
41   -newLore{
42   - id = "kor-pul-chronicles-2",
43   - category = "kor'pul",
44   - name = "Chronicles of Kor'pul (2)",
45   - lore = [[#{italic}#It appears to be a page fallen out of a book. The handwriting is archaic, but clean and readable.#{normal}#
46   -
47   - Grandfather was long dead and buried when I first felt it. After he was gone, I took up his work and dug the graves. It was hard work, but it was the only work I could find. And in some way I was grateful for the ancient stigma that clung to my family, for this way I could spend my days alone and in peace. Very few people ever came to the graveyard, and those who did merely nodded their heads in silence when they met my gaze.
48   -
49   - I was out among the graves, thinking about life and death, when I felt the tugging from beneath. It was as though someone, or something, was calling for me. It took me a while to understand that it was the dead themselves, or rather the faint traces of what used to be life. Using the arcane forces that I now knew to be mine, I turned to the greatest of all arcane disciplines, the art of necromancy. If I could bring those back who had died long ago, would I also be able to sustain my own existence indefinitely?
50   -
51   - I had to try. Material I had enough, and I knew that the souls of the dead would heed my commands. In the dead of the night, I sneaked out into the graveyard, and began my work. Soon, a coffin was unearthed, and I smiled as I beheld the mortal remains inside. So well preserved! It was promising, to say the least.
52   -
53   - That was the night old Mok'rol rose from his grave and walked the earth again. It was also the last night I spent in the village of my youth, for in the morning the men came to my cottage with their torches and pitchforks.
54   -
55   - ]],
56   -}
57   -
58   -newLore{
59   - id = "kor-pul-chronicles-3",
60   - category = "kor'pul",
61   - name = "Chronicles of Kor'pul (3)",
62   - lore = [[#{italic}#It appears to be a page fallen out of a book. The handwriting is archaic, but clean and readable.#{normal}#
63   -
64   - The Shaloren are a curious people. Ever since the Spellblaze, they have been hidden from the world that blamed them for it. The elders said that the Shaloren are murderous spell-weavers who would rip all of Eyal apart if we would let them, and they said that it is the duty of every man to kill them on sight. It is the same reaction they showed to my research. So it was oddly fitting that one of their former places of power should harbour me and my work.
65   -
66   - It was an old outpost, long abandoned by the elves who had built it in the Age of Allure. Not far away from the town of Derth, yet safely out of the reach of the townsfolk who refused to go near it. After all, the Shaloren had built it, and nothing good ever came of their works. I found a room that would serve well as a library, and the dining hall with its table was quickly converted to an excellent operating room.
67   -
68   - Soon I managed to get the first specimens from the graveyard of Derth. Such joy, to be able to work without being disturbed! I made a number of skeletal guardians and ordered them to patrol the fortress. They would serve just fine to repel any nosy adventurer who might stumble upon this place. Now I could concentrate on calling up some more powerful undead, and finally begin my research into the ultimate prize of necromancy: to achieve immortality!
69   -
70   - ]],
71   -}
72   -
73   -newLore{
74   - id = "kor-pul-chronicles-4",
75   - category = "kor'pul",
76   - name = "Chronicles of Kor'pul (4)",
77   - lore = [[#{italic}#It appears to be a page fallen out of a book. The handwriting is archaic, but clean and readable.#{normal}#
78   -
79   - The elf on the operating table quivered in fear. It was very uncommon for the Shaloren to wander outside their hidden cities, but rarely one of the younger or more adventurous elves decided to explore the outside world in disguise. This particular one had the misfortune of wandering into my sphere of influence, and I can see with more than just my eyes. The undead under my control swiftly captured him and brought him to my fortress.
80   -
81   - It is said that the Shaloren have achieved immortality, but I knew this to be untrue. Yes, they cannot die of old age. But they can still be slain by sword or spell - or, in this case, by a scalpel. After most of the screaming had stopped, I started to dissect the poor fellow in order to uncover the secret that might help me to achieve my goal. Following traces of arcane energies throughout his body, I eventually discovered the secret of the Shaloren.
82   -
83   - Using what I had learned from the vivisection, and drawing upon ancient descriptions of the Lichdom ceremony, I started to devise a ritual that would bind my soul to the very fabric of reality. This way, even the most powerful mages would not be able to defeat me permanently! Phylacteries can be shattered, arcane embalmings can be transmuted, runes of resurrection can be overwritten. But you cannot banish someone who is bound to reality itself.
84   -
85   - ]],
86   -}
87   -
88   -newLore{
89   - id = "kor-pul-chronicles-5",
90   - category = "kor'pul",
91   - name = "Chronicles of Kor'pul (5)",
92   - lore = [[#{italic}#It appears to be a page fallen out of a book. The handwriting is archaic, but clean and readable.#{normal}#
93   -
94   - The ritual was terrifying, and for many hours I struggled with death. But in the end, my arcane might prevailed and I was able to complete the binding. Such a feeling of power! Now I have truly achieved immortality. Even if I should die on the field of battle, my spirit will find the way back to this fortress and rise again from the dead.
95   -
96   - This tower shall henceforth be known as the Fortress of Kor'pul, and the surrounding lands shall forevermore be ruled from this tower. Both the pitiful halflings and the feeble humans will kneel before my mighty armies of undead. Every man and woman will serve me in death, and soon the surrounding kingdoms and empires will surrender. Then I shall rule all of Maj'Eyal!
97   -
98   - Now I shall retreat to my laboratory to produce more soldiers. The townsfolk are getting restless, and there are rumours that the Ziguranth are planning to make a move against me and my fortress. They cannot be allowed to challenge my rule of these lands. The arrows of my masterful skeletal archers will slay them long before they can reach the gates of the fortress, and those who manage to survive will have to face my elite skeletons and ghouls in direct combat. And if it is necessary, I will slaughter them myself, for I am Kor'pul the Undying!
99   -
100   - #{italic}#This is apparently the last page. The ink seems to be fresh.#{normal}#
101   -
102   - ]],
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -local def = {lite=true}
21   -defineTile('>', "DISTORTED_GROVE", nil, nil, nil, def)
22   -defineTile('.', "FLOOR", nil, nil, nil, def)
23   -defineTile(';', "GRASS", nil, nil, nil, def)
24   -defineTile('+', "DOOR", nil, nil, nil, def)
25   -defineTile('T', "TREE", nil, nil, nil, def)
26   -defineTile('#', "WALL", nil, nil, nil, def)
27   -
28   -
29   -startx = 13
30   -starty = 8
31   -
32   -endx = 38
33   -endy = 9
34   -
35   -return [[
36   -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
37   -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T;;;;;;
38   -;;;;##+##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39   -;;;;#...#;;;;;;T;;;;;;;;######;;;;;;;;;
40   -;;;;#..;;;;;;;;;;;;;;;;;#....;;;;;;;;;;
41   -;;;;#.;;;;;;;;;;;;;;;;;;+...;;;;;;;T;;T
42   -;;;;;;;;;;;;;;;;;;;;;;;;####;;;;T;;;;;T
43   -;;;;;;;;;;;####;;;;;;;;;;;;;;;;;T;;;T;T
44   -;;;;;;;;;;;#..#;;;;;T;;;;;;T;;;;;;T;;TT
45   -;;;;T;;;;;;+..#;;;;;;;;;;;;;;;;;;;;;;;>
46   -;;;;;;;;;;;#..#;;;;;;####;;;;;;;;T;;;TT
47   -;;;;;;;;;;;####;;;;;;;..#;;;;;;T;;;T;;T
48   -;;;;;;;;;;;;;;;;;;;;;;;.#;;;;;;;T;;;;;T
49   -;;;####;;;;;;;;;;;;;;;;;#;;;;;;;;;T;;T;
50   -;;;#..;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51   -;;;#.;;;;;;;;;T;;;;;;;;;;;;;T;;;;;;;;;;
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -local def = {lite=true}
21   -defineTile('>', "POINT_ZERO_PORTAL", nil, nil, nil, def)
22   -defineTile(';', "GRASS", nil, nil, nil, def)
23   -defineTile('T', "TREE", nil, nil, nil, def)
24   -defineTile('<', "DISTORTED_GROVE", nil, nil, nil,def)
25   -defineTile('A', "GRASS", nil, "AKHO")
26   -defineTile('D', "GRASS", nil, "DEFENDER_OF_REALITY")
27   -
28   -startx = 0
29   -starty = 6
30   -
31   -endx = 11
32   -endy = 6
33   -
34   -return [[
35   -TTTTTTTTTTTTTTTTT
36   -TTTTTTTTTTTTTTTTT
37   -TTTTTT;;;;;TTTTTT
38   -TTTT;;;;T;;;;TTTT
39   -TTT;;T;;;;D;;;TTT
40   -TT;;D;;;;;;;;;;TT
41   -<;;;;;;;A;>;;;;TT
42   -TT;;;;;;;;;;;;;TT
43   -TTT;D;;;;D;T;;TTT
44   -TTTT;;;T;;;;;TTTT
45   -TTTTTT;;;;TTTTTTT
46   -TTTTTTTTTTTTTTTTT
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -defineTile('<', "RIFT")
21   -
22   -defineTile("1", "HARDWALL", nil, nil, "CLOTH_ARMOR_STORE")
23   -defineTile('2', "HARDWALL", nil, nil, "SWORD_WEAPON_STORE")
24   -defineTile('3', "HARDWALL", nil, nil, "KNIFE_WEAPON_STORE")
25   -defineTile('4', "HARDWALL", nil, nil, "ARCHER_WEAPON_STORE")
26   -defineTile('5', "HARDWALL", nil, nil, "STAFF_WEAPON_STORE")
27   -defineTile('6', "HARDWALL", nil, nil, "LIGHT_ARMOR_STORE")
28   -defineTile('7', "HARDWALL", nil, nil, "RUNEMASTER")
29   -defineTile('8', "HARDWALL", nil, nil, "JEWELRY")
30   -
31   -defineTile("~", "DEEP_WATER")
32   -defineTile("*", "OUTERSPACE")
33   -defineTile("^", "HARDMOUNTAIN_WALL")
34   -defineTile("-", "FLOATING_ROCKS")
35   -defineTile("t", "TREE")
36   -defineTile("s", "COLD_FOREST")
37   -defineTile(".", "GRASS_SHORT")
38   -defineTile("=", "SPACETIME_RIFT")
39   -defineTile("_", "VOID")
40   -defineTile("#", "HARDWALL")
41   -defineTile("Z", "VOID", nil, "ZEMEKKYS")
42   -
43   -startx = 24
44   -starty = 29
45   -
46   --- addSpot section
47   -addSpot({1, 2}, "pop", "foes")
48   -addSpot({2, 2}, "pop", "foes")
49   -addSpot({1, 3}, "pop", "foes")
50   -addSpot({2, 3}, "pop", "foes")
51   -addSpot({1, 4}, "pop", "foes")
52   -addSpot({2, 4}, "pop", "foes")
53   -addSpot({1, 5}, "pop", "foes")
54   -addSpot({2, 5}, "pop", "foes")
55   -addSpot({1, 6}, "pop", "foes")
56   -addSpot({2, 6}, "pop", "foes")
57   -addSpot({1, 7}, "pop", "foes")
58   -addSpot({2, 7}, "pop", "foes")
59   -addSpot({1, 8}, "pop", "foes")
60   -addSpot({2, 8}, "pop", "foes")
61   -addSpot({1, 9}, "pop", "foes")
62   -addSpot({2, 9}, "pop", "foes")
63   -addSpot({47, 31}, "pop", "foes")
64   -addSpot({48, 31}, "pop", "foes")
65   -addSpot({47, 32}, "pop", "foes")
66   -addSpot({48, 32}, "pop", "foes")
67   -addSpot({47, 33}, "pop", "foes")
68   -addSpot({48, 33}, "pop", "foes")
69   -addSpot({47, 34}, "pop", "foes")
70   -addSpot({48, 34}, "pop", "foes")
71   -addSpot({47, 35}, "pop", "foes")
72   -addSpot({48, 35}, "pop", "foes")
73   -addSpot({47, 36}, "pop", "foes")
74   -addSpot({48, 36}, "pop", "foes")
75   -addSpot({47, 37}, "pop", "foes")
76   -addSpot({48, 37}, "pop", "foes")
77   -addSpot({47, 38}, "pop", "foes")
78   -addSpot({48, 38}, "pop", "foes")
79   -addSpot({46, 4}, "pop", "foes")
80   -addSpot({46, 5}, "pop", "foes")
81   -addSpot({46, 6}, "pop", "foes")
82   -addSpot({46, 7}, "pop", "foes")
83   -addSpot({46, 8}, "pop", "foes")
84   -addSpot({46, 9}, "pop", "foes")
85   -addSpot({46, 10}, "pop", "foes")
86   -addSpot({46, 11}, "pop", "foes")
87   -addSpot({2, 31}, "pop", "foes")
88   -addSpot({2, 32}, "pop", "foes")
89   -addSpot({7, 7}, "pop", "defender")
90   -addSpot({11, 4}, "pop", "defender")
91   -addSpot({7, 13}, "pop", "defender")
92   -addSpot({12, 26}, "pop", "defender")
93   -addSpot({10, 40}, "pop", "defender")
94   -addSpot({15, 37}, "pop", "defender")
95   -addSpot({21, 32}, "pop", "defender")
96   -addSpot({8, 46}, "pop", "defender")
97   -addSpot({44, 41}, "pop", "defender")
98   -addSpot({44, 42}, "pop", "defender")
99   -addSpot({38, 39}, "pop", "defender")
100   -addSpot({28, 33}, "pop", "defender")
101   -addSpot({37, 32}, "pop", "defender")
102   -addSpot({40, 28}, "pop", "defender")
103   -addSpot({35, 19}, "pop", "defender")
104   -addSpot({35, 12}, "pop", "defender")
105   -addSpot({35, 9}, "pop", "defender")
106   -addSpot({35, 4}, "pop", "defender")
107   -addSpot({23, 4}, "pop", "defender")
108   -addSpot({28, 3}, "pop", "defender")
109   -addSpot({15, 0}, "pop", "foes")
110   -addSpot({16, 0}, "pop", "foes")
111   -addSpot({17, 0}, "pop", "foes")
112   -addSpot({18, 0}, "pop", "foes")
113   -addSpot({19, 0}, "pop", "foes")
114   -addSpot({34, 0}, "pop", "foes")
115   -addSpot({35, 0}, "pop", "foes")
116   -addSpot({36, 0}, "pop", "foes")
117   -addSpot({37, 0}, "pop", "foes")
118   -addSpot({38, 0}, "pop", "foes")
119   -addSpot({0, 40}, "pop", "foes")
120   -addSpot({0, 41}, "pop", "foes")
121   -addSpot({0, 42}, "pop", "foes")
122   -addSpot({0, 43}, "pop", "foes")
123   -addSpot({0, 44}, "pop", "foes")
124   -addSpot({24, 32}, "pop", "player-attack")
125   -addSpot({25, 32}, "pop", "player-attack")
126   -addSpot({26, 36}, "pop", "defiler")
127   -
128   --- addZone section
129   -addZone({23, 25, 23, 28}, "particle", "house_flamebeam")
130   -addZone({22, 16, 22, 23}, "particle", "house_flamebeam")
131   -addZone({23, 6, 23, 13}, "particle", "house_flamebeam")
132   -addZone({13, 13, 13, 22}, "particle", "house_flamebeam")
133   -addZone({17, 8, 24, 8}, "particle", "house_flamebeam")
134   -addZone({26, 31, 36, 31}, "particle", "house_flamebeam")
135   -addZone({33, 12, 33, 18}, "particle", "house_flamebeam")
136   -
137   --- ASCII map section
138   -return [[
139   -**************************************************
140   -**************************************************
141   -**************************************************
142   -************************---------*****************
143   -***********---*********--######-----**************
144   -*********--------******---####-------*************
145   -********----####--*****----1#--------*************
146   -*******-----####--******-------##--***************
147   -*******-###-2#3#--******------####-***************
148   -*******-###------*********----7#8#--**************
149   -*******-4##-----***********---------**************
150   -*******-----*---************--------**************
151   -*******----**---**************------**************
152   -*******----**--*******--**************************
153   -********--***********---**************************
154   -********************---***************************
155   -********************---***************************
156   -**************************************************
157   -*********************************--***************
158   -*********************************---**************
159   -*********************************-s-**************
160   -*********************************---**************
161   -************--********************--**************
162   -************---*******---*************************
163   -************-s-*******---*************************
164   -************-s-*******--**************************
165   -************---***********************************
166   -*************--***********************************
167   -***********************---**************--********
168   -***********************-<-**********------********
169   -***********************----*********-----*********
170   -**********************-----*********---***********
171   -*********************-------*******---************
172   -********************---------******--*************
173   -*******************----------*********************
174   -******************------------********************
175   -*****************--######-----********************
176   -***************----#5#6##------*******************
177   -**************-----#----#-------******************
178   -************------###--###-------*****------******
179   -**********-----------------------------------*****
180   -********------tt.....---------ss-------------*****
181   -******-------ttt~~~~..-------ssss------------*****
182   -******-----tttt~~t.~~.-------^^^^------==-==--****
183   -******-----ttt~~tt..~...----^^^^^^^---==___==-****
184   -******------ttttttt.~~~....^^^^^^^^---=__Z__==****
185   -********---------t-...~~~~^^^^^^^^^---=______=****
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -defineTile(".", "JUNGLE_GRASS")
21   -defineTile("t", "JUNGLE_TREE")
22   -defineTile("#", "HARDWALL")
23   -defineTile("~", "DEEP_OCEAN_WATER")
24   -defineTile(",", "SAND")
25   -defineTile("_", "OLD_FLOOR")
26   -defineTile("<", "HARBOR_UP")
27   -
28   -
29   -defineTile("1", "HARDWALL", nil, nil, "LIGHT_ARMOR_STORE")
30   -defineTile("2", "HARDWALL", nil, nil, "HEAVY_ARMOR_STORE")
31   -defineTile("3", "HARDWALL", nil, nil, "TRIDENT_STORE")
32   -defineTile("4", "HARDWALL", nil, nil, "WEAPON_STORE")
33   -defineTile("5", "HARDWALL", nil, nil, "HERBALIST")
34   -defineTile("6", "HARDWALL", nil, nil, "RUNES")
35   -
36   -return [[
37   -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38   -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39   -~~~~~~~~~~_~~~~~~~~~~~~~~_~~~~~~~~~~
40   -~~~~~~~~~~_~~~~~~~~~~~~~~_~~~~~~~~~~
41   -~~~~~~~~~~_~~~~~~~~~~~~~~_~~~~~~~~~~
42   -~~~~~~~~~~_~~~~~~~~~~~~~~_~~~~~~~~~~
43   -~~~~~~~~~~_~~~~~~~~~~~~~~_~~~~~~~~~~
44   -~~~~~~~~~~_~~~~~~~~~~~~~~_~~~~~~~~~~
45   -~~~~~~,,_____,,~~~~~~,,_____,,~~~~~~
46   -,,,,,,,_______,,,,,,,,_______,,,,,,,
47   -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
48   -,,,,###,,,,,,,,,,,,,,,,,###,,,,,,,,,
49   -,,,,###,,,,,,,,###,,,,,,###,,,,,,,,,
50   -,,,,#2#,,,,,,,,###,,,,,,#4#,,,,,,,,,
51   -,,,,,,,,,,,,,,,#1#,,,,,,,,,,,,,,,,,,
52   -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
53   -,,,,,,,,,###,,,,,,,,,,,,,,,,,,,,,,,,
54   -,,,,,,,,,###,,,,,,,,,###,,,,,,,,,,,,
55   -,,,,,,,,,#3#,,,,,,,,,###,,,,,,,,,,,,
56   -,,,,,,,,,,,,,,,,,,,,,#6#,,,,,,,,,,,,
57   -,,,,,,,,,,,,,,###,,,,,,,,,,,,,,,,,,,
58   -,,,,,,,,,,,,,,###,,,,,,,,,,,,,,,,,,,
59   -,,,,,,,,,,,,,,#5#,,,,,,,,,,,,,,,,,,,
60   -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2015 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -name = "Ashes to Ashes"
21   -desc = function(self, who)
22   - local desc = {}
23   - desc[#desc+1] = "You awoke to find your home town empty and ruined, as if destroyed a long time ago."
24   - desc[#desc+1] = "There is evidence of magics in the nearby woods."
25   - desc[#desc+1] = "You must explore the Distorted Grove and investigate!"
26   - return table.concat(desc, "\n")
27   -end
28   -
29   -on_status_change = function(self, who, status, sub)
30   - if self:isCompleted() then
31   - who:setQuestStatus(self.id, engine.Quest.DONE)
32   - end
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2015 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -name = "Through the Portal"
21   -desc = function(self, who)
22   - local desc = {}
23   - desc[#desc+1] = "Commander Akho has told you to go to Point Zero and talk to the Grand Keeper of Reality, Zemekkys."
24   - return table.concat(desc, "\n")
25   -end
26   -
27   -on_status_change = function(self, who, status, sub)
28   - if self:isCompleted() then
29   - who:setQuestStatus(self.id, engine.Quest.DONE)
30   - end
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   --- Temporal Floor Effects
21   -
22   -local Stats = require "engine.interface.ActorStats"
23   -local Particles = require "engine.Particles"
24   -local Entity = require "engine.Entity"
25   -local Chat = require "engine.Chat"
26   -local Map = require "engine.Map"
27   -local Level = require "engine.Level"
28   -
29   -local function floorEffect(t)
30   - t.name = t.name or t.desc
31   - t.name = t.name:upper():gsub("[ ']", "_")
32   - local d = t.long_desc
33   - if type(t.long_desc) == "string" then t.long_desc = function() return d end end
34   - t.type = "other"
35   - t.subtype = { floor=true }
36   - t.status = "neutral"
37   - t.parameters = {}
38   - t.on_gain = function(self, err) return nil, "+"..t.desc end
39   - t.on_lose = function(self, err) return nil, "-"..t.desc end
40   -
41   - newEffect(t)
42   -end
43   -
44   -floorEffect{
45   - desc = "Time Storm", image = "talents/shaloren_speed.png",
46   - long_desc = "The target is passing through a time storm. Increasing global speed by 100%.",
47   - activate = function(self, eff)
48   - self:effectTemporaryValue(eff, "global_speed_add", 1)
49   - end,
50   -}
51   -
52   -floorEffect{
53   - desc = "Time Calm", image = "talents/slow.png",
54   - long_desc = "The target is passing through a time calm. Decreasing global speed by 50%.",
55   - activate = function(self, eff)
56   - self:effectTemporaryValue(eff, "global_speed_add", -1)
57   - end,
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -load("/data/general/grids/basic.lua")
21   -load("/data/general/grids/forest.lua")
22   -load("/data/general/grids/water.lua")
23   -
24   - newEntity{
25   - define_as = "DISTORTED_GROVE",
26   - name = "way into the woods",
27   - display = '>', color_r=255, color_g=255, color_b=0, image = "terrain/grass/grass_main_01.png", add_displays = {class.new{image = "terrain/way_next_6.png"}},
28   - notice = true,
29   - always_remember = true,
30   - change_level = 1, change_zone = "atof+distorted-grove",
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -return {
21   - name = "Abandoned Village",
22   - level_range = {1, 1},
23   - level_scheme = "player",
24   - -- actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end,
25   - update_base_level_on_enter = false,
26   - max_level = 1,
27   - width = 196, height = 80,
28   - decay = {300, 800, only={object=true}, no_respawn=true},
29   - persistent = "zone",
30   - all_remembered = true,
31   - all_lited = true,
32   - day_night = true,
33   - ambient_music = {"Virtue lost.ogg", "weather/town_small_base.ogg"},
34   - allow_respec = "limited",
35   -
36   - --max_material_level = 2,
37   - --store_levels_by_restock = { 8, 25, 40 },
38   - nicer_tiler_overlay = "DungeonWallsGrass",
39   -
40   - generator = {
41   - map = {
42   - class = "engine.generator.map.Static",
43   - map = "atof+abandoned-village",
44   - force_last_stair = true,
45   - },
46   - actor = {
47   - class = "mod.class.generator.actor.Random",
48   - nb_npc = {0, 0}
49   - },
50   - object = {
51   - class = "engine.generator.object.Random",
52   - nb_object = {0, 0},
53   - },
54   - },
55   -
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -load("/data/general/grids/basic.lua")
21   -load("/data/general/grids/forest.lua")
22   -load("/data/general/grids/water.lua")
23   -
24   --- This is mostly copied over from the Old Forest grids.lua
25   -
26   -local grass_editer = { method="borders_def", def="dark_grass"}
27   -
28   -newEntity{
29   - define_as = "GRASS",
30   - type = "floor", subtype = "dark_grass",
31   - name = "grass", image = "terrain/grass/dark_grass_main_01.png",
32   - display = '.', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
33   - grow = "TREE",
34   - nice_tiler = { method="replace", base={"GRASS_PATCH", 100, 1, 14}},
35   - nice_editer = grass_editer,
36   -}
37   -for i = 1, 14 do newEntity{ base = "GRASS", define_as = "GRASS_PATCH"..i, image = ("terrain/grass/dark_grass_main_%02d.png"):format(i) } end
38   -
39   -local treesdef = {
40   - {"oldforest_tree_01", {tall=-1, "shadow", "trunk_01", {"foliage_summer_%02d",1,2}}},
41   - {"oldforest_tree_01", {tall=-1, "shadow", "trunk_02", {"foliage_summer_%02d",3,3}}},
42   - {"oldforest_tree_01", {tall=-1, "shadow", "trunk_03", {"foliage_summer_%02d",4,4}}},
43   - {"oldforest_tree_02", {tall=-1, "shadow", "trunk_01", {"foliage_summer_%02d",1,2}}},
44   - {"oldforest_tree_02", {tall=-1, "shadow", "trunk_02", {"foliage_summer_%02d",3,3}}},
45   - {"oldforest_tree_02", {tall=-1, "shadow", "trunk_03", {"foliage_summer_%02d",4,4}}},
46   - {"oldforest_tree_03", {tall=-1, "shadow", "trunk_01", {"foliage_summer_%02d",1,2}}},
47   - {"oldforest_tree_03", {tall=-1, "shadow", "trunk_02", {"foliage_summer_%02d",3,3}}},
48   - {"oldforest_tree_03", {tall=-1, "shadow", "trunk_03", {"foliage_summer_%02d",4,4}}},
49   - {"small_oldforest_tree_01", {"shadow", "trunk_01", {"foliage_summer_%02d",1,2}}},
50   - {"small_oldforest_tree_01", {"shadow", "trunk_02", {"foliage_summer_%02d",3,3}}},
51   - {"small_oldforest_tree_01", {"shadow", "trunk_03", {"foliage_summer_%02d",4,4}}},
52   - {"small_oldforest_tree_02", {"shadow", "trunk_01", {"foliage_summer_%02d",1,2}}},
53   - {"small_oldforest_tree_02", {"shadow", "trunk_02", {"foliage_summer_%02d",3,3}}},
54   - {"small_oldforest_tree_02", {"shadow", "trunk_03", {"foliage_summer_%02d",4,4}}},
55   - {"small_oldforest_tree_03", {"shadow", "trunk_01", {"foliage_summer_%02d",1,2}}},
56   - {"small_oldforest_tree_03", {"shadow", "trunk_02", {"foliage_summer_%02d",3,3}}},
57   - {"small_oldforest_tree_03", {"shadow", "trunk_03", {"foliage_summer_%02d",4,4}}},
58   -
59   - {"oldforest_tree_01", {tall=-1, "shadow", "trunk_01", {"foliage_bare_%02d",1,2}}},
60   - {"oldforest_tree_01", {tall=-1, "shadow", "trunk_02", {"foliage_bare_%02d",3,3}}},
61   - {"oldforest_tree_01", {tall=-1, "shadow", "trunk_03", {"foliage_bare_%02d",4,4}}},
62   - {"oldforest_tree_02", {tall=-1, "shadow", "trunk_01", {"foliage_bare_%02d",1,2}}},
63   - {"oldforest_tree_02", {tall=-1, "shadow", "trunk_02", {"foliage_bare_%02d",3,3}}},
64   - {"oldforest_tree_02", {tall=-1, "shadow", "trunk_03", {"foliage_bare_%02d",4,4}}},
65   - {"oldforest_tree_03", {tall=-1, "shadow", "trunk_01", {"foliage_bare_%02d",1,2}}},
66   - {"oldforest_tree_03", {tall=-1, "shadow", "trunk_02", {"foliage_bare_%02d",3,3}}},
67   - {"oldforest_tree_03", {tall=-1, "shadow", "trunk_03", {"foliage_bare_%02d",4,4}}},
68   - {"small_oldforest_tree_01", {"shadow", "trunk_01", {"foliage_bare_%02d",1,2}}},
69   - {"small_oldforest_tree_01", {"shadow", "trunk_02", {"foliage_bare_%02d",3,3}}},
70   - {"small_oldforest_tree_01", {"shadow", "trunk_03", {"foliage_bare_%02d",4,4}}},
71   - {"small_oldforest_tree_02", {"shadow", "trunk_01", {"foliage_bare_%02d",1,2}}},
72   - {"small_oldforest_tree_02", {"shadow", "trunk_02", {"foliage_bare_%02d",3,3}}},
73   - {"small_oldforest_tree_02", {"shadow", "trunk_03", {"foliage_bare_%02d",4,4}}},
74   - {"small_oldforest_tree_03", {"shadow", "trunk_01", {"foliage_bare_%02d",1,2}}},
75   - {"small_oldforest_tree_03", {"shadow", "trunk_02", {"foliage_bare_%02d",3,3}}},
76   - {"small_oldforest_tree_03", {"shadow", "trunk_03", {"foliage_bare_%02d",4,4}}},
77   -}
78   -
79   -newEntity{
80   - define_as = "TREE",
81   - type = "wall", subtype = "dark_grass",
82   - name = "tree",
83   - image = "terrain/tree.png",
84   - display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
85   - always_remember = true,
86   - can_pass = {pass_tree=1},
87   - does_block_move = true,
88   - block_sight = true,
89   - dig = "GRASS",
90   - nice_tiler = { method="replace", base={"TREE", 100, 1, 30}},
91   - nice_editer = grass_editer,
92   -}
93   -newEntity{
94   - define_as = "HARDTREE",
95   - type = "wall", subtype = "dark_grass",
96   - name = "tall thick tree",
97   - image = "terrain/tree.png",
98   - display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
99   - always_remember = true,
100   - does_block_move = true,
101   - block_sight = true,
102   - block_sense = true,
103   - block_esp = true,
104   - nice_tiler = { method="replace", base={"HARDTREE", 100, 1, 30}},
105   - nice_editer = grass_editer,
106   -}
107   -for i = 1, 30 do
108   - newEntity(class:makeNewTrees({base="TREE", define_as = "TREE"..i, image = "terrain/grass/dark_grass_main_01.png"}, treesdef, 3))
109   -end
110   -for i = 1, 30 do
111   - newEntity(class:makeNewTrees({base="HARDTREE", define_as = "HARDTREE"..i, image = "terrain/grass/dark_grass_main_01.png"}, treesdef))
112   -end
113   -
114   -newEntity{
115   - define_as = "DISTORTED_GROVE", base = "GRASS_UP4",
116   - image = "terrain/grass/dark_grass_main_01.png",
117   - nice_editer = grass_editer,
118   - change_level = 3, change_zone = "atof+distorted-grove",
119   - notice = true, always_remember=true, force_down=true,
120   -
121   -}
122   -
123   -newEntity{
124   - define_as = "POINT_ZERO_PORTAL",
125   - name = "temporal portal",
126   - display = '>', color_r=255, color_g=255, color_b=0, image = "terrain/grass/dark_grass_main_01.png", add_displays = {class.new{image = "terrain/temporal_instability_blue.png"}},
127   - notice = true,
128   - always_remember = true,
129   - change_level = 1, change_zone = "atof+point-zero",
130   - change_level_check = function() -- Forbid going back
131   - if game.player:hasQuest("atof+point-zero") then
132   - require("engine.ui.Dialog"):yesnoPopup("Temporal Portal", "Are you sure you want to enter? You won't be able to go back.", function(ret)
133   - if ret then game:changeLevel(1, "atof+point-zero") end
134   - end)
135   - return true
136   - end
137   - game.log("You don't know where, or rather when, this portal is leading to.")
138   - return true
139   - end
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -load("/data-atof/general/npcs/keepers.lua")
21   -load("data-atof/zones/point-zero/npcs.lua")
22   -
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -return {
21   - name = "Distorted Glade",
22   - level_range = {1, 1},
23   - level_scheme = "player",
24   - -- actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end,
25   - update_base_level_on_enter = false,
26   - max_level = 1,
27   - width = 196, height = 80,
28   - decay = {300, 800, only={object=true}, no_respawn=true},
29   - persistent = "zone",
30   - all_remembered = true,
31   - all_lited = true,
32   - day_night = true,
33   - ambient_music = {"Woods of Eremae.ogg", "weather/rain.ogg"},
34   - allow_respec = "limited",
35   -
36   - --max_material_level = 2,
37   - --store_levels_by_restock = { 8, 25, 40 },
38   - nicer_tiler_overlay = "DungeonWallsGrass",
39   -
40   - generator = {
41   - map = {
42   - class = "engine.generator.map.Static",
43   - map = "atof+distorted-glade",
44   - },
45   - actor = {
46   - class = "mod.class.generator.actor.Random",
47   - nb_npc = {0, 0}
48   - },
49   - object = {
50   - class = "engine.generator.object.Random",
51   - nb_object = {0, 0},
52   - },
53   - },
54   -
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12   --- GNU General Public License for more details.
13   ---
14   --- You should have received a copy of the GNU General Public License
15   --- along with this program. If not, see <http://www.gnu.org/licenses/>.
16   ---
17   --- Nicolas Casalini "DarkGod"
18   --- darkgod@te4.org
19   -
20   -local events = { one_per_level=true,
21   - {name="atof+time-storm", minor=true, percent=100},
22   - {name="atof+time-calm", minor=true, percent=100},
23   -}
24   -
\ No newline at end of file
1   --- ToME - Tales of Maj'Eyal
2   --- Copyright (C) 2009 - 2016 Nicolas Casalini
3   ---
4   --- This program is free software: you can redistribute it and/or modify
5   --- it under the terms of the GNU General Public License as published by
6   --- the Free Software Foundation, either version 3 of the License, or
7   --- (at your option) any later version.
8   ---
9   --- This program is distributed in the hope that it will be useful,
10   --- but WITHOUT ANY WARRANTY; without even the implied warranty of
11   --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the