Resubmit the scenario1 with proper macro syntax

This commit is contained in:
Piotr Cychowski 2008-03-06 13:04:53 +00:00
parent 44836f39ca
commit 1b10d14178
7 changed files with 1456 additions and 1322 deletions

View file

@ -0,0 +1,63 @@
#textdomain wesnoth-utbs
# The aim of this module is to collate all of the important map settings and get them out of the way
# Generaly once these red one they won't be touched in the future.
# It's a good practice to name the scenario file according to scenario id. It's even better to put a scenario number in front
# of the name, in this way if anyone in future will have to do something with your files he or she won't have to waste time
# on finding out in what order should he read the scenarios.
id="1_The_Morning_After"
name= _ "The Morning After"
# Map data, note lack of any symbols in fornt of the path below, this means only /data/ folder will be search, userdata will be omitted
map_data="{campaigns/Under_the_Burning_Suns/maps/01_The_Morning_After.map}"
next_scenario=2_Across_the_Harsh_Sands
{TURNS 34 32 30}
# Since the scenario can't end until all the elves are rescued we can't allow it to end with the death of the necromancer
victory_when_enemies_defeated=no
# Whole campaign uses custom timescheudle assuming day - short night - day - long night which is supposed to simulate a world
# with two suns in the sky. Custom times of day are defined in /utils/time.cfg
{DAWN1}
{MORNING1}
{MIDDAY1}
{AFTERNOON1}
{DUSK1}
{SHORTDARK}
{DAWN2}
{MORNING2}
{MIDDAY2}
{AFTERNOON2}
{DUSK2}
{LONGDARK1}
{LONGDARK2}
{LONGDARK3}
{LONGDARK4}
# The playlist for the scenario, only one file for now
[music]
name=revelation.ogg
[/music]
# And the story. Disclaimer, introduction to the campaign, and first scenario
[story]
[part]
story= _ "Note: This campaign is probably not the best one for beginners. It changes certain Wesnoth standards, such as the elves' stats and the day/night cycle. This campaign emphasizes role-playing elements and tends to have longer scenarios with changing objectives. For these reasons I strongly suggest that you occasionally save your game mid-scenario, so you won't lose all your progress if you get stuck and have to start over."
[/part]
[part]
background="misc/kaleh_story.jpg"
story= _ "This is the chronicle of the journey of the Quenoth elves from their homeland in the Great Southern Desert. I write this story so that our descendants may know of our travels, and remember the sacrifices we made."
[/part]
[part]
background="misc/kaleh_story.jpg"
story= _ "Chapter 1: I, Kaleh, grew up amidst the shifting sands, under our two suns Sela and Naia. It was a land of hot dry days and cold nights, of roaming horrors, where water was more valuable than gold. We had lived among the sands ever since the forests fell eons ago. It was a hard savage land, but we were tougher still, and we managed to survive settled around a rare oasis. We had heavily fortified our village against any marauders and we were the biggest encampment we knew of. My uncle, Tanuil, led us for many years, and trained us to be self-sufficient and strong against all enemies. A people struggling in an ocean of sand, we thought we were ready for anything. All that changed one fateful night, when the sky rained fire..."
[/part]
[part]
background="misc/night_of_fallen_stars.jpg"
story= _ "I remember that night as if it were yesterday. I was not prone to dreaming, but as I slept I had a strange vision. I didn't have long to ponder it though, because I was woken in the dark by the sound of deafening crashes, splintering wood and shouting elves. That night the sky rained flaming rocks, boulders bigger than you could imagine. They smote the landscape like lightning bolts, setting fire to whatever could burn and crushing houses, walls, and elves. There was nowhere to hide, nowhere to go for protection. I was so afraid, I thought that if I tried to flee I would be smashed, so I hid and prayed to Eloh. I never prayed before as hard as I did that night. I heard cries and screams outside, but I could not force myself to move. And somehow, eventually the thin yellow tendrils of a sickly dawn stole over the horizon, as if Naia herself were shocked by the devastation she saw."
[/part]
[/story]

View file

@ -0,0 +1,335 @@
#textdomain wesnoth-utbs
# We're going to use this piece of WML in two different places without a change, that's why it's placed within a macro
#define DARKSORCERER_INTRO
# Place the bad guy, give him proper gold an income
[unit]
#ifdef HARD
type=Necromancer
#else
type=Dark Sorcerer
#endif
description=Xanthos
user_description= _ "Xanthos"
canrecruit=yes
x=46
y=3
side=3
[/unit]
[modify_side]
side=3
{GOLD 150 175 200}
{INCOME 12 15 20}
[/modify_side]
[remove_shroud]
side=1
x=44-48
y=1-5
[/remove_shroud]
[message]
description=Xanthos
message= _ "This place reeks of the stench of death, I could smell it from miles away. Oh how I love it, it is the smell of power, the inevitable triumph of death over life. Puny elves, I shall use the corpses of your families to create an army of undead! All shall bow down before Xanthos the Necromancer!"
[/message]
[message]
description=Nym
message= _ "His timing couldn't be worse. I know that undead cultists often prey on small targets, but they haven't had the guts to attack us for years. Why has Eloh heaped so much misfortune upon us?"
[/message]
[message]
description=Zhul
message= _ "Have some more faith girl, the goddess does not give us more than we can handle. With Eloh's grace we shall yet triumph over this pretender."
[/message]
[message]
description=Garak
message= _ "Bah, I've fought these dark cultists before. They can be killed just like anyone else, and our elvish hunters can easily decimate their skeleton armies."
[/message]
[message]
description=Kaleh
message= _ "I have heard of your kind, foul necromancer. You travel the sands, daring to bring back and enslave those who have passed on. But we will prove to you that death is not all-powerful. You shall not desecrate the bodies of my kith and kin! You shall learn to fear the wrath of Eloh and the Quenoth elves!"
[/message]
[place_shroud]
side=1
x=44-48
y=1-5
[/place_shroud]
[objectives]
summary= _ "New Objectives:"
show=yes
[objective]
description= _ "Rescue Surviving Elves"
condition=win
[/objective]
[objective]
description= _ "Defeat Xanthos"
condition=win
[/objective]
[objective]
description= _ "Death of Kaleh, Nym, Garak or Zhul"
condition=lose
[/objective]
[/objectives]
#enddef
# Normal necromancer placement, happens around turn 10 depending on difficulty level
[event]
#ifdef EASY
name=turn 11
#endif
#ifdef NORMAL
name=turn 10
#endif
#ifdef HARD
name=turn 9
#endif
# If Xanthos does not exist and undead gold is unmodified it means he never showed up. We need this check
# in case player triggered him earlier and managed to kill already, otherwise he might get spawned once more
[store_side]
side=3
variable=temp
[/store_side]
[if]
[not]
[have_unit]
description=Xanthos
[/have_unit]
[/not]
[variable]
name=temp.gold
numerical_equals=100
[/variable]
[then]
{DARKSORCERER_INTRO}
[/then]
[/if]
{CLEAR_VARIABLE temp}
[/event]
# When dark sorcerer dies, checks to make sure elves have been rescued before ending the scenario. If no set an event
# that checks if that changed on each move. It's ugly but there is no better way of doing that at the moment
[event]
name=die
[filter]
description=Xanthos
[/filter]
[sound]
name=wail-long.wav
[/sound]
[kill]
side=3
animate=yes
[/kill]
[message]
description=Kaleh
message= _ "The necromancer is finally vanquished."
[/message]
[message]
description=Zhul
message= _ "And at last the dead shall have their rest."
[/message]
[if]
[variable]
name=rescued_elves
not_equals=5
[/variable]
[then]
[message]
description=Kaleh
message= _ "The necromancer is dead, but I don't think we've explored the entire village. There may still be elves that need rescuing. We should go back and check. "
[/message]
[event]
name=moveto
first_time_only=no
[filter]
x=1-60
y=1-60
side=1
[/filter]
[if]
[variable]
name=rescued_elves
equals=5
[/variable]
[then]
[message]
description=Kaleh
message= _ "We've explored the village and I think we've rescued the last of the survivors."
[/message]
[endlevel]
result=victory
bonus=yes
[/endlevel]
[/then]
[/if]
[/event]
[/then]
[else]
[endlevel]
result=victory
bonus=yes
[/endlevel]
[/else]
[/if]
[/event]
# This event prevents player from running to dark sorcerer's base before he shows up on turn 11. If the player
# approaches his base before turn 11 he appears and attacks. Either way the unit moving into the area also comments
# on the plight of those elves who lived out in the open sands.
[event]
name=moveto
[filter]
x=37-60
y=1-12
side=1
[/filter]
[if]
[not]
[have_unit]
side=3
[/have_unit]
[/not]
[then]
{DARKSORCERER_INTRO}
[/then]
[/if]
[message]
speaker=unit
message= _ "Some of our people felt crowded in the village, and wanted to live out on the open sands. They thought they could flee to the safety of our walls if danger came. I shudder to think what has happened to them."
[/message]
[/event]
# Elvish hunting party shows up on turn 16
[event]
name=turn 16
[remove_shroud]
side=1
x=24-32
y=1-6
[/remove_shroud]
{LOYAL_UNIT 1 "Desert Hunter" 29 2 "Pythos" (_"Pythos")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Fighter" 28 2 "Shea" ( _ "Shea")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Fighter" 29 1 "Narn" ( _ "Narn")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Scout" 27 2 "Jokli" ( _ "Jokli")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Archer" 28 1 "Lyia" ( _ "Lyia")}
[+unit]
gender=female
random_traits=yes
[/unit]
[message]
description=Pythos
message= _ "Hail, is anyone still alive?"
[/message]
[message]
description=Kaleh
message= _ "Yes, and we could certainly use your help. A necromancer has been attacking us, he intends to use our fallen comrades as fodder for his evil magics. Where have you been?"
[/message]
[message]
description=Pythos
message= _ "We were out far in the sands, searching for prey and roaming orcs. As soon as we saw the rock storm we raced back as fast as we could. I only wish we could have come sooner."
[/message]
[message]
description=Nym
message= _ "No use crying over spilt water. But we're sure glad you're here now."
[/message]
[/event]
# On victory dialogue
[event]
name=victory
[message]
description=Nym
message= _ "It seems that we finally have some peace. But what do we do now?"
[/message]
[message]
description=Garak
message= _ "Where is Tanuil and his family?"
[/message]
[message]
description=Kaleh
message= _ "The keep has been crushed by the rocks. We could find no survivors."
[/message]
[message]
description=Zhul
message= _ "Too many have died this night."
[/message]
[message]
description=Nym
message= _ "Our village is in ruins. The walls that were built by our ancestors over generations have been demolished in a space of hours. Most of our dwellings are destroyed. And the great tree itself is no more. One thing is obvious, we cannot stay here."
[/message]
[message]
description=Garak
message= _ "You are a fool to despair. This has always been our home. The water here is good, we know this land. We can rebuild; Eloh willing, we can thrive again."
[/message]
[message]
description=Nym
message= _ "Think for a moment. Who else has seen the rock storm? What other foes are coming to pick over the remains of our people? There is no mercy in the desert, and we have many enemies who would seek to gain in our time of weakness."
[/message]
[message]
description=Garak
message= _ "Impudent girl, you should not speak so to your elders, or to your betters."
[/message]
[message]
description=Nym
message= _ "I have a right to speak my mind!"
[/message]
[message]
description=Zhul
message= _ "Peace, please calm yourselves. In chaos there is nothing but death and destruction. Even in this time of trial we must show our fortitude, and follow our laws. Without laws we are like beasts in the desert, fighting over scraps of meat. Among the survivors Kaleh is by heritage the closest relative to Tanuil and thus our leader. What say you Kaleh?"
[/message]
[message]
description=Kaleh
message= _ "Last night, before the rock storm, I heard a voice in my sleep. It sounded like sweet music, and somehow I knew it was Eloh. I still remember her exact words: 'You must be strong, young elf, for you enter a time of peril. The home you know will be destroyed, and you must lead your people to a new land. To the north you will find salvation and peace. Cross the desert and head to the mountains. Fear not, for I will guide you and protect you.' I'm not sure why I'm the one she chose to appeal to, but if this is her will, I will see it done. Our home is gone and the desert is a harsh place. If Eloh has prepared a new home for us, then I will lead us there."
[/message]
[message]
description=Garak
message= _ "I fear what dangers lurk in the harsh sands and beyond to the north, but because you are our leader, I will follow your counsel."
[/message]
[message]
description=Zhul
message= _ "Then let us collect what supplies we can from the wreckage and head north with great haste. Our home is protection no longer, we must find a new haven for our people."
[/message]
[message]
description=Nym
message= _ "What about the bodies of the dead? We can't leave them to be torn by crows or desecrated by other dark mages."
[/message]
[message]
description=Kaleh
message= _ "I agree, we should not forget our dead. We should build a huge pyre and burn them with proper ceremony, so that the smoke may carry them on to the next realm."
[/message]
[message]
description=Zhul
message= _ "Kaleh, I don't want to tarry longer than necessary, but I agree that we must see to the dead before we leave. Garak, you and your men start collecting our dead. Nym, help me find oil and wood so that we may build a pyre."
[/message]
[message]
speaker=narrator
message= _ "And so it was done. The dead were laid reverently on top of what little wood we could find. But the fire was big enough to burn the bodies to ashes and speed their souls to the hereafter. I remember at the time that the death of so many of our people was not the best omen for the start of such a large journey. They were the first of our people to die in this great endeavor, but they were to be far from the last."
[/message]
# Clear variables
{CLEAR_VARIABLE seen_mudcrawler}
{CLEAR_VARIABLE rescued_elves}
[/event]
[event]
name=time over
[message]
description=Kaleh
message= _ "What's that to the north? It looks like even more undead! The rock storm must have attracted other necromancers. There's no way we can defeat them all. We've run out of time. There's no escape. Eloh save us!"
[/message]
[/event]

View file

@ -0,0 +1,211 @@
#textdomain wesnoth-utbs
# This module handles events attached to four villages outside oasis not near necromancer fort. Scenario assumes that
# there is a chance to find an unit in each of them unless they have been captured by undead already.
#! -- Internal variables :
# $i, $outer_villages[]{4 sets of coordinates}
#! -- Depends on :
# $elf_pool[], $elf_pool_counter
#! -- Clears :
# $elf_pool[], $elf_pool_counter
# For each village we need to prepare a pair of events, one in case it's initialy captured by player and one in case
# it's ransacked by bad guys. Because it needs to be done before play starts, we're going to use 'start' event.
[event]
name=start
# There is a number of houses inside the oasis and even more tents by the necromancers fort, we need to make sure
# that these are ignored. To do this we store coordinates ([store_locations]) of all desert villages (Dd^Vt) that
# are not ([not]) within rectangle defined by points 40,1 60,12 (x=40-60, y=1-12) or ([or]) rectangle defined by 22,24 43,34 .
# First rectangle includes all villages near necromancer, the second covers whole oasis. These coordinates are stored to
# array called outer_villages (variable=outer_villages).
[store_locations]
variable=outer_villages
terrain=Dd^Vt
[not]
x=40-60
y=1-12
[or]
x=22-43
y=24-34
[/or]
[/not]
[/store_locations]
# Now for each stored set of coordinates we need to prepare a capture event that can be triggered both by good and bad guys.
# To do this we declare an iterator.
{VARIABLE i 0}
# And use foreach macro, that simulates an loop walking over an array from beginning to end.
{FOREACH outer_villages i}
# In this way for each village we declare an capture event
[event]
name=capture
# That triggers for both side 1 and 3 on a village of coordinates x,y
[filter]
side=1,3
x=$outer_villages[$i].x
y=$outer_villages[$i].y
[/filter]
# Now depending on which side captured the village there will be different outcomes.
[if]
# When unit capturing village belongs to a player
[variable]
name=unit.side
equals=1
[/variable]
[then]
# We generate a random number between 1 and 100
{RANDOM 1..100}
# And check if it's lower than a treshold of finding an unit that's dependent on diffficulty level
# 60% on easy, 50% on normal, 40% on hard. We use preprocesor to choose apropriate chance
[if]
[variable]
name=random
#ifdef EASY
less_than_equal=60
#endif
#ifdef NORMAL
less_than_equal=50
#endif
#ifdef HARD
less_than_equal=40
#endif
[/variable]
[then]
# So the RNG smiled upon the player, time to pick an random elf from pool we prepared in scenario_start
# but we have keep drawing until we hit a nonblank record, since some of them will be cleared already
# so we prepare a loop that's going to run until our check on random variable evaluates to ture.
# For this we need to set random to a value that will evaluate as false to guarantee at least one loop pass.
{VARIABLE random $elf_pool_counter}
[while]
[variable]
name=elf_pool[$random].type
equals=""
[/variable]
[do]
# Now we can draw an elf. It's important to remember that even though we have $elf_pool_counter
# units, they are indexed from 0 so we need to substract 1 from drawn number
{RANDOM 1..$elf_pool_counter}
{VARIABLE_OP random add -1}
# Create an unit with data drawn and place it on an empty hex by the village, since he village itself is occupied
[unit]
side=1
type=$elf_pool[$random].type
description=$elf_pool[$random].description
user_description=_ $elf_pool[$random].description
gender=$elf_pool[$random].gender
x=$x1
y=$y1
animate=yes
# Make the unit loyal on easy
#ifdef EASY
[modifications]
{TRAIT_LOYAL}
[/modifications]
#endif
# And have it start with 0hp on hard
#ifdef HARD
moves=0
#endif
[/unit]
[/do]
[/while]
# When done remove uniit from the pool
{CLEAR_VARIABLE elf_pool[$random]}
# And write joyful message
[message]
speaker=unit
message= _ "Oh good, some elves have survived in this outer settlement. They've agreed to help us search for other survivors."
[/message]
[/then]
# And when RNG plays hard ball we need to inform the player he's out of luck
[else]
[message]
speaker=unit
message= _ "The encampment is empty. I wonder what happened to the inhabitants?"
[/message]
[/else]
[/if]
[/then]
# When the unit belongs to the bad guy... Tough luck, there is actualy no bonus from that now, so we just set up another event
# this time for player only for the time he recaptures the village.
[else]
[event]
name=capture
[filter]
side=1
x=$outer_villages[$i].x
y=$outer_villages[$i].y
[/filter]
[message]
speaker=unit
message= _ "This encampment has been abandoned. There are signs of a struggle and a few bloodstains but nothing else. I fear for those elves who lived out here."
[/message]
[/event]
[/else]
[/if]
[/event]
{NEXT i}
{CLEAR_VARIABLE i}
{CLEAR_VARIABLE outer_villages}
[/event]
# This event unstores all unspawned units from the pool into the recall list. Reason for this is pretty simple, it's much easier to finish
# sc3 for example having two free hunters than two free scouts.
[event]
name=victory
{VARIABLE i 0}
{FOREACH elf_pool i}
[if]
[variable]
name=elf_pool[$i].type
not_equals=""
[/variable]
[then]
[unit]
side=1
type=$elf_pool[$random].type
description=$elf_pool[$random].description
user_description=_ $elf_pool[$random].description
gender=$elf_pool[$random].gender
x=$x1
y=$y1
animate=yes
#ifdef EASY
[modifications]
{TRAIT_LOYAL}
[/modifications]
#endif
[/unit]
[/then]
[/if]
{NEXT i}
{CLEAR_VARIABLE elf_pool}
{CLEAR_VARIABLE elf_pool_counter}
[/event]

View file

@ -0,0 +1,126 @@
#textdomain wesnoth-utbs
#Internal macros : VILLAGE_EVENT
# macro for setting up the village occupants
#define VILLAGE_EVENT TYPE NAME GENDER
{VARIABLE elf_pool[$elf_pool_counter].type {TYPE}}
{VARIABLE elf_pool[$elf_pool_counter].name {NAME}}
{VARIABLE elf_pool[$elf_pool_counter].gender {GENDER}}
{VARIABLE_OP elf_pool_counter add 1}
#enddef
# prestart events:
# set starting scenario objectives
# set starting variables
[event]
name=prestart
# set starting scenario objectives
[objectives]
summary= _ "Starting Objectives:"
[objective]
description= _ "Rescue Surviving Elves"
condition=win
[/objective]
[objective]
description= _ "Death of Kaleh, Nym, Garak or Zhul"
condition=lose
[/objective]
[/objectives]
# There are 3 mudcrawler encounter spots, in the NW and SW corner and in the barracks.
# Depending on which way you circle around the village, you will
# encounter the NW or barracks first.
# At start seen a mudcrawler is false
{VARIABLE seen_mudcrawler "no"}
# Can't end scenario until all elves have been rescued (5 events)
{VARIABLE rescued_elves 0}
# Elves in outlying villages - set array index and elf pool counter
{VARIABLE elf_pool_counter 0}
# Elves in the pool - 2 fighters, 2 archers, 2 hunters, 2 scouts
{VILLAGE_EVENT "Desert Fighter" _"Lrea" "female"}
{VILLAGE_EVENT "Desert Fighter" _"Piyru" "male"}
{VILLAGE_EVENT "Desert Archer" _"Frea" "female"}
{VILLAGE_EVENT "Desert Archer" _"Danu" "male"}
{VILLAGE_EVENT "Desert Hunter" _"Hamuil" "male"}
{VILLAGE_EVENT "Desert Hunter" _"Anioh" "male"}
{VILLAGE_EVENT "Desert Scout" _"Vemuil" "male"}
{VILLAGE_EVENT "Desert Scout" _"Taliu" "male"}
[/event]
#undef VILLAGE_EVENT
# Dialogue at start of scenario
[event]
name=start
[message]
description=Nym
message= _ "Hey Kaleh, are you in there?"
[/message]
[message]
description=Kaleh
message= _ "Nym, is that you?"
[/message]
[message]
description=Nym
message= _ "Yes, come on out already. The storm has passed. With the morning light Naia has ended the terrible night."
[/message]
[message]
description=Kaleh
message= _ "Has the sky really stopped falling?"
[/message]
[message]
description=Nym
message= _ "I already told you, the sky is clear and empty. Now come quickly, silly, others may need our help."
[/message]
[message]
description=Kaleh
message= _ "What's happened? Oh Eloh, the craters are everywhere, everything is gone, ruined. I can hardly recognize our village. I didn't think it could be this bad."
[/message]
[message]
description=Nym
message= _ "C'mon Kaleh, we have to go see if anyone is hurt or needs help. I think I hear people calling from the south. Now is not a time for fear, we must be strong. After all you are the nephew of Tanuil, our leader, and you must answer to the call of duty. Perhaps in the light of day things won't be as bad as you think. Let's explore the village and see who else has survived the night."
[/message]
[message]
description=Kaleh
message= _ "Wait, our keep is just to the east. Our leader Tanuil must surely be recruiting others to help deal with the devastation. Perhaps we should go to the keep, before we explore the rest of the village."
[/message]
[/event]
# Dialogue when Nym and Kaleh see the ruined keep
[event]
name=moveto
[filter]
x=33-40
y=19-26
side=1
[/filter]
[allow_undo]
[/allow_undo]
[message]
description=Kaleh
message= _ "Tanuil's keep, our beautiful fortress, it is destroyed. How will we summon our people to battle?"
[/message]
[message]
description=Nym
message= _ "We must rally those survivors we can find amidst the rubble. It doesn't look like anyone survived, but at least we can thank Eloh it was a quick death. But come on, we can't dwell on the dead, we must help the living."
[/message]
[message]
description=Kaleh
message= _ "But if Tanuil is dead, who will lead us?"
[/message]
[message]
description=Nym
message= _ "That's a question for another time. Let's keep exploring the wreckage."
[/message]
[/event]

View file

@ -0,0 +1,94 @@
#textdomain wesnoth-utbs
[side]
side=1
description=Kaleh
user_description= _ "Kaleh"
type=Kaleh
variation=Youth
[modifications]
{TRAIT_LOYAL}
#ifndef HARD
{TRAIT_RESILIENT}
#ifdef EASY
{TRAIT_INTELLIGENT}
#endif
#endif
[/modifications]
canrecruit=yes
{GOLD 0 0 0}
{INCOME 4 2 0}
controller=human
shroud=yes
fog=no
# Start with Nym
[unit]
type=Nym Hunter
description=Nym
user_description= _ "Nym"
x=27
y=22
[modifications]
{TRAIT_LOYAL}
#ifndef HARD
{TRAIT_RESILIENT}
#ifdef EASY
{TRAIT_QUICK}
#endif
#endif
[/modifications]
{IS_HERO}
[/unit]
[/side]
# Monster side : mudcrawlers and cuttlefish
[side]
no_leader=yes
side=2
controller=ai
shroud=no
fog=no
team_name=monsters
[ai]
aggression=1.0
caution=0.0
# weak ai
{ATTACK_DEPTH 1 2 3}
[/ai]
[/side]
# Undead side, doesn't start with a leader
[side]
no_leader=yes
side=3
controller=ai
shroud=no
fog=no
team_name=evil
#Values reset later on, needed for proper execution of Necromancer event
{GOLD 100 100 100}
{INCOME -2 -2 -2}
#ifndef HARD
recruit=Skeleton, Skeleton Archer, Vampire Bat, Ghoul, Dark Adept
#endif
#ifdef HARD
recruit=Revenant, Bone Shooter, Blood Bat, Necrophage, Dark Adept, Deathblade
#endif
[ai]
recruitment_ignore_bad_movement=yes
recruitment_ignore_bad_combat=yes
#ifdef HARD
recruitment_pattern=scout,fighter,fighter,fighter,archer
#else
recruitment_pattern=scout,fighter,archer,fighter
#endif
aggression=0.80
caution=0.10
{ATTACK_DEPTH 2 3 4}
[/ai]
[/side]

View file

@ -0,0 +1,589 @@
#textdomain wesnoth-utbs
# This module is used to handle all events within the oasis boundary. This includes finding all the elves that we
# have to rescue, dealing with mudcrawlers and lake monster.
#! -- Depends on
# $rescued_elves, $seen_mudcrawler
# North-West mudcrawler/villager encounter
# Elvish fighter and 2 archers fighting
# Easy: 1 giant mudcrawler, 3 small mudcrawlers
# Medium: 2 giant mudcrawlers, 2 small mudcrawlers
# Hard: 3 giant mudcrawlers, 1 small mudcrawler
[event]
name=moveto
[filter]
x=17-26
y=23-28
side=1
[/filter]
{VARIABLE_OP rescued_elves add 1}
# Place found elves, this schema will repeat over this module as I want to use core macros (which saves maintenance
# burden) and have them posses both random traits and loyal.
{LOYAL_UNIT 1 "Desert Fighter" 24 25 "Vecnu" ( _ "Vecnu")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Archer" 24 27 "Eranor" ( _ "Eranor")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Archer" 21 25 "Seela" ( _ "Seela")}
[+unit]
random_traits=yes
gender=female
[/unit]
# Again core macro, monsters shouldn't have traits
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 20 24}
#ifdef HARD
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 20 25}
#else
{NOTRAIT_UNIT 2 "Small Mudcrawler" 20 25}
#endif
#ifdef EASY
{NOTRAIT_UNIT 2 "Small Mudcrawler" 23 27}
{NOTRAIT_UNIT 2 "Small Mudcrawler" 25 28}
#else
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 23 27}
{NOTRAIT_UNIT 2 "Small Mudcrawler" 24 28}
#endif
[if]
[variable]
name=seen_mudcrawler
equals=no
[/variable]
[then]
# Haven't seen a mudcrawler yet, set the flag and perform what-the-hell-is-that routine.
{VARIABLE seen_mudcrawler yes}
[message]
description=Vecnu
message= _ "Kaleh, Nym, help us!"
[/message]
[message]
description=Nym
message= _ "What in Uria's name is that?"
[/message]
[message]
description=Vecnu
message= _ "They came with the stones that fell from the sky. I know not what they are, but more seem to be emerging from the craters. If we don't stop them there will be nothing left of our village or our people."
[/message]
[message]
description=Kaleh
message= _ "To battle, my friends! There are still those left who can fight."
[/message]
[/then]
[else]
# Seen a mudcrawler, do let's-kick-their-ass routine
[message]
description=Kaleh
message= _ "There are more of our people fighting the mud monsters!"
[/message]
[message]
description=Nym
message= _ "Then let's join the battle!"
[/message]
[/else]
[/if]
[/event]
# South-West mudcrawler/villager encounter
# Elvish archer and 2 hunters fighting
# Easy: 1 giant mudcrawler, 3 small mudcrawlers
# Medium: 2 giant mudcrawlers, 2 small mudcrawlers
# Hard: 3 giant mudcrawlers, 1 small mudcrawler
[event]
name=moveto
[filter]
x=17-28
y=29-36
side=1
[/filter]
{VARIABLE_OP rescued_elves add 1}
{LOYAL_UNIT 1 "Desert Hunter" 24 34 "Eloshi" ( _ "Eloshi")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Archer" 19 33 "Illuvia" ( _ "Illuvia")}
[+unit]
random_traits=yes
gender=female
[/unit]
{LOYAL_UNIT 1 "Desert Hunter" 21 35 "Raynor" ( _ "Raynor")}
[+unit]
random_traits=yes
[/unit]
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 25 34}
{NOTRAIT_UNIT 2 "Small Mudcrawler" 21 36}
#ifdef HARD
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 24 35}
#else
{NOTRAIT_UNIT 2 "Small Mudcrawler" 24 35}
#endif
#ifdef EASY
{NOTRAIT_UNIT 2 "Small Mudcrawler" 20 34}
#else
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 20 34}
#endif
[message]
description=Kaleh
message=_ "More of these muddy crawlies, let's get rid of them with haste."
[/message]
[/event]
# Training ground encounter
# Easy: 2 giant mudcrawler, 3 small mudcrawlers
# Medium: 3 giant mudcrawlers, 2 small mudcrawlers
# Hard: 4 giant mudcrawlers, 1 small mudcrawlers
[event]
name=moveto
[filter]
x=32-39
y=32-36
side=1
[/filter]
# We want this village captured to allow player move trough it without loosing the turn
[capture_village]
side=1
x,y=36,34
[/capture_village]
{ADD rescued_elves 1}
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 34 33}
[+unit]
description="Rocky Horror"
[/unit]
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 34 34}
[+unit]
description="Rocky Horror"
[/unit]
{NOTRAIT_UNIT 2 "Small Mudcrawler" 34 35}
[+unit]
description="Rocky Horror"
[/unit]
#ifdef HARD
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 35 33}
[+unit]
description="Rocky Horror"
[/unit]
#else
{NOTRAIT_UNIT 2 "Small Mudcrawler" 35 33}
[+unit]
description="Rocky Horror"
[/unit]
#endif
#ifdef EASY
{NOTRAIT_UNIT 2 "Small Mudcrawler" 36 32}
[+unit]
description="Rocky Horror"
[/unit]
#else
{NOTRAIT_UNIT 2 "Giant Mudcrawler" 36 32}
[+unit]
description="Rocky Horror"
[/unit]
#endif
[unit]
type=Desert Captain
description=Garak
user_description= _ "Garak"
profile=portraits/garak.png
x=35
y=34
side=1
[modifications]
{TRAIT_STRONG}
{TRAIT_LOYAL}
[object]
[effect]
apply_to=attack
range=ranged
increase_damage=1
[/effect]
[/object]
[/modifications]
{IS_HERO}
[/unit]
{LOYAL_UNIT 1 "Desert Fighter" 36 33 "Jorazan" ( _ "Jorazan")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Fighter" 35 34 "Zyara" ( _ "Zyara")}
[+unit]
gender=female
random_traits=yes
[/unit]
[message]
speaker=unit
message= _ "This is our training ground. And look, there is Garak, the captain of the guard. He and his fighters have survived the night!"
[/message]
[if]
[variable]
name=seen_mudcrawler
equals=no
[/variable]
[then]
# Again, haven't seen a mudcrawler yet, set the flag and perform what-the-hell-is-that routine.
{VARIABLE seen_mudcrawler yes}
[message]
description=Garak
message= _ "Kaleh, Nym, help us!"
[/message]
[message]
description=Nym
message= _ "What in Uria's name is that?"
[/message]
[message]
description=Garak
message= _ "They came with the stones that fell from the sky. I know not what they are, but more seem to be emerging from the craters. If we don't stop them there will be nothing left of our village or our people."
[/message]
[message]
description=Kaleh
message= _ "To battle, my friends! There are still those left who can fight."
[/message]
[/then]
[else]
[message]
description=Kaleh
message= _ "But they are fighting many mud creatures. Quick, we must help them!"
[/message]
[/else]
[/if]
# Garak's speech when they kill the last of training grounds mudcrawlers. For this we use die event
# that on each occurence checks if there are any more training ground mudcrawlers alive.
[event]
name=die
first_time_only=no
[filter]
description="Rocky Horror"
[/filter]
[if]
[not]
[have_unit]
description="Rocky Horror"
[/have_unit]
[/not]
[then]
[message]
speaker=second_unit
message= _ "Ha! They're destroyed at last."
[/message]
[message]
speaker=Garak
message= _ "Thanks for the help. I am glad to see that so many have survived the night. But there's no time to talk, we must save the rest of our people and crush any other of these earthen abominations back into the earth."
[/message]
[/then]
[/if]
[/event]
[/event]
# The following three events are nested, because they are supposed to occur in that particular sequence with none of them bypassed.
# Thanks to this only one of them is loaded in memory at any given time before resolution.
# Approaching bridge dialogue
[event]
name=moveto
[filter]
x=30-32
y=29-35
side=1
[/filter]
# That's supposed to allow to undo the move before the event is triggered
[allow_undo]
[/allow_undo]
[message]
speaker=Kaleh
message= _ "This bridge leads to the holy island at the center of our lake."
[/message]
[message]
speaker=Nym
message= _ "Hmmmm. Some of the druids that worship on the island may still be alive. We should go check."
[/message]
[message]
speaker=Kaleh
message= _ "Be careful. The bridge is broken, so we'll have to wade through the shallow water."
[/message]
# Finding druids
[event]
name=moveto
[filter]
x=30-32
y=27-29
side=1
[/filter]
{ADD rescued_elves 1}
[message]
speaker=Kaleh
message= _ "The great tree! It has been buried under the rocks. Our most holy sanctuary, defiled. Oh, Eloh, what shall we do?"
[/message]
[message]
speaker=Nym
message= _ "Is anyone still alive?"
[/message]
[unit]
type=Desert Druid
description=Zhul
user_description= _ "Zhul"
profile=portraits/zhul.png
x=31
y=27
side=1
[modifications]
{TRAIT_QUICK}
{TRAIT_INTELLIGENT}
{TRAIT_LOYAL}
[/modifications]
{IS_HERO}
[/unit]
{LOYAL_UNIT 1 "Desert Shaman" 30 27 "Ryoko" ( _ "Ryoko")}
[+unit]
random_traits=yes
[/unit]
{LOYAL_UNIT 1 "Desert Shaman" 32 27 "Yuni" ( _ "Yuni")}
[+unit]
random_traits=yes
[/unit]
[message]
speaker=Zhul
message= _ "Finally! We were worried that no one else had survived."
[/message]
[message]
speaker=Nym
message= _ "Mother priestess, are you all right?"
[/message]
[message]
speaker=Zhul
message= _ "There's no time to stand on ceremony. I'm fine. I'm afraid only a few of us survived, but we will lend you what skills we have. Show me to those who need healing."
[/message]
[message]
speaker=Kaleh
message= _ "But the great tree, it has been destroyed!"
[/message]
[message]
speaker=Zhul
message= _ "All things of this world come to an end, but the power of Eloh endures. A new one shall grow in its place. Come now, let us see to the needs of our people."
[/message]
#Lake monster event
[event]
name=moveto
[filter]
x=30-32
y=30-34
side=1
[/filter]
[unit]
type=Cuttle Fish
description="Deep One"
user_description=_"Deep One"
unit_description= _ "The Deep Ones are gigantic aquatic monsters that lurk in the dark places of the world. Rarely do they come to the surface, and when they do the best way to survive an encounter with these monsters is to remain ashore. They can grab their opponents with strong tentacles, or spit a poisonous black ink from a distance."
# Deep one is basicaly a weakened Cuttle fish, it would be pretty much unbeatable if left without change
[modifications]
[trait]
id=Deep_one
[effect]
apply_to=attack
range=melee
increase_attacks=-4
[/effect]
[effect]
apply_to=hitpoints
increase_total=-27
[/effect]
#ifndef HARD
[effect]
apply_to=defense
replace=yes
[defense]
shallow_water=50
[/defense]
[/effect]
#endif
[/trait]
[/modifications]
x=32
y=30
side=2
[/unit]
[message]
speaker=narrator
message= _ "The water of the lake suddenly goes dark and unsettled, only to erupt in a swarm of tentacles in the moment first elf put a foot outside the island."
[/message]
[message]
speaker=Nym
message= _ "What in Uria's name is that?"
[/message]
[message]
speaker=Zhul
message= _ "I felt a great darkness in this lake, but I knew not what it was. The falling rocks must have woken it from its sleep."
[/message]
[message]
speaker=Kaleh
message= _ "Protect the priestesses, we shall send this monstrosity back to the depths it came from!"
[/message]
[/event]
[/event]
[/event]
# Grasslands dialogue, when Kaleh and Nym approach the eastern fields, this will show only the first time
# player enters the stables area
[event]
name=moveto
[filter]
x=39-44
y=26-33
side=1
[/filter]
{ADD rescued_elves 1}
[message]
description=Kaleh
message= _ "These fields seem strangely vacant. Where are the horses?"
[/message]
[message]
description=Nym
message= _ "Maybe they're hiding in the stables. Let's go check."
[/message]
[/event]
# These two events actually do the same thing on two different villages, it might be not the most efficient
# way of doing thing when considering code lenght, but it saves us some macro abuse and akward capture checks
[event]
name=capture
[filter]
x=43
y=29
side=1
[/filter]
# Captured stables and found a scout, if have none of the pair spawn Naru
[if]
[have_unit]
description=Naru
[/have_unit]
[then]
[message]
description=Naru
message= _ "Hey Nisa, the rocks have stopped falling. You can come out now!"
[/message]
{LOYAL_UNIT 1 "Desert Scout" $x1 $y1 "Nisa" (_"Nisa")}
[+unit]
gender=female
random_traits=yes
[/unit]
[message]
description=Nisa
message= _ "Oh, thank Eloh, I thought they would never stop."
[/message]
[/then]
# If have naru spawn Nisa
[else]
{LOYAL_UNIT 1 "Desert Scout" $x1 $y1 "Naru" (_"Naru")}
[+unit]
random_traits=yes
[/unit]
[message]
description=Naru
message= _ "Is it safe to come out? I was so scared."
[/message]
[message]
description=Kaleh
message= _ "Where are all the other horses?"
[/message]
[message]
description=Naru
message= _ "A hunting party left just yesterday, so unless the rocks fell all over the land, many of the horses have probably survived. The few that remained here were scared by the falling rocks and fled into the night. It took all my skill to calm Yasi and keep him from running."
[/message]
[message]
description=Kaleh
message= _ "We'll need your help in checking to see if the outer settlements are okay. Who knows what kinds of damage they suffered in the night? And perhaps some of the people out in the desert have been able to round up some of the loose horses."
[/message]
[message]
description=Nym
message= _ "Well, let's hope that hunting party comes back soon."
[/message]
[/else]
[/if]
[/event]
[event]
name=capture
[filter]
x=43
y=32
side=1
[/filter]
[if]
[have_unit]
description=Naru
[/have_unit]
[then]
[message]
description=Naru
message= _ "Hey Nisa, the rocks have stopped falling. You can come out now!"
[/message]
{LOYAL_UNIT 1 "Desert Scout" $x1 $y1 "Nisa" (_"Nisa")}
[+unit]
gender=female
random_traits=yes
[/unit]
[message]
description=Nisa
message= _ "Oh, thank Eloh, I thought they would never stop."
[/message]
[/then]
[else]
{LOYAL_UNIT 1 "Desert Scout" $x1 $y1 "Naru" (_"Naru")}
[+unit]
random_traits=yes
[/unit]
[message]
description=Naru
message= _ "Is it safe to come out? I was so scared."
[/message]
[message]
description=Kaleh
message= _ "Where are all the other horses?"
[/message]
[message]
description=Naru
message= _ "A hunting party left just yesterday, so unless the rocks fell all over the land, many of the horses have probably survived. The few that remained here were scared by the falling rocks and fled into the night. It took all my skill to calm Yasi and keep him from running."
[/message]
[message]
description=Kaleh
message= _ "We'll need your help in checking to see if the outer settlements are okay. Who knows what kinds of damage they suffered in the night? And perhaps some of the people out in the desert have been able to round up some of the loose horses."
[/message]
[message]
description=Nym
message= _ "Well, let's hope that hunting party comes back soon."
[/message]
[/else]
[/if]
[/event]