Alarantalara 15627a5a1d Clear more instances of upkeep (all campaigns)
Redundant full upkeep values
Loyal trait and upkeep set
Units with canrecruit=yes
2013-11-09 11:22:02 -05:00

1752 lines
64 KiB
INI
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#textdomain wesnoth-tutorial
{./utils.cfg}
# Comment this out for a faster (no-commentry) tutorial for testing.
{./2_Speaking.cfg}
#define BADGUY TYPE NAME POSITION
[unit]
id={NAME}
generate_name=yes
type={TYPE}
x,y={POSITION}
moves=0
side=2
animate=yes
[/unit]
[redraw][/redraw]
#enddef
#define DEFEND_ISLAND
[if]
{NUMEQ island_defended 0}
{NUMEQ dumbo_dead 1}
[then]
{VARIABLE island_defended 1}
{LABEL (_"Patch of forest") 10,14}
{TALK_ABOUT_LOC 10,14 (_"Now put an unwounded unit, preferably a Fighter, in that patch of forest on the south-east of the island; a nice, defensible spot.")}
{STUDENT (_"Can one unit survive against all those enemies?")}
{TEACHER (_"With a little help, yes. If you move your Shaman next to the defending unit, she will heal it 4 hitpoints per turn. Just be careful not to expose the Shaman to attack since she is fairly weak herself.")}
{PRINT (_"Move a unit (a Fighter if possible) to the patch of forest")}
[event]
name=moveto
[filter]
x,y=10,14
[/filter]
{UNLABEL 10,14}
{PRINT (_"Advance other units onto the island or to capture villages, then <b>End Turn</b>")}
[allow_undo][/allow_undo]
[/event]
[/then]
[/if]
#enddef
#define REFUND_AND_REMOVE_RECRUIT
[if]
[variable]
# is it a recall?
# FIXME: units could be recalled with 0 xp
name=recruit.experience
greater_than=0
[/variable]
[then]
[gold]
side=1
amount=20
[/gold]
# put the unit back into the recall list
# ugly trait hack...
[unit]
side=$recruit.side
name=$recruit.name
type=$recruit.type
experience=$recruit.experience
gender=$recruit.gender
[modifications]
[trait]
id=$recruit.modifications.trait[0].id
name=$recruit.modifications.trait[0].name
[effect]
apply_to=$recruit.modifications.trait[0].effect[0].apply_to
# hitpoints (resilient & quick)
increase_total=$recruit.modifications.trait[0].effect[0].increase_total
times=$recruit.modifications.trait[0].effect[0].times
# damage (strong, dextrous)
increase_damage=$recruit.modifications.trait[0].effect[0].increase_damage
range=$recruit.modifications.trait[0].effect[0].range
# movement (quick), experience (intelligent)
increase=$recruit.modifications.trait[0].effect[0].increase
[/effect]
[effect]
apply_to=$recruit.modifications.trait[0].effect[1].apply_to
# hitpoints (resilient & quick)
increase_total=$recruit.modifications.trait[0].effect[1].increase_total
times=$recruit.modifications.trait[0].effect[1].times
# damage (strong, dextrous)
increase_damage=$recruit.modifications.trait[0].effect[1].increase_damage
range=$recruit.modifications.trait[0].effect[1].range
# movement (quick), experience (intelligent)
increase=$recruit.modifications.trait[0].effect[1].increase
[/effect]
[/trait]
[trait]
id=$recruit.modifications.trait[1].id
name=$recruit.modifications.trait[1].name
[effect]
apply_to=$recruit.modifications.trait[1].effect[0].apply_to
# hitpoints (resilient & quick)
increase_total=$recruit.modifications.trait[1].effect[0].increase_total
times=$recruit.modifications.trait[1].effect[0].times
# damage (strong, dextrous)
increase_damage=$recruit.modifications.trait[1].effect[0].increase_damage
range=$recruit.modifications.trait[1].effect[0].range
# movement (quick), experience (intelligent)
increase=$recruit.modifications.trait[1].effect[0].increase
[/effect]
[effect]
apply_to=$recruit.modifications.trait[1].effect[1].apply_to
# hitpoints (resilient & quick)
increase_total=$recruit.modifications.trait[1].effect[1].increase_total
times=$recruit.modifications.trait[1].effect[1].times
# damage (strong, dextrous)
increase_damage=$recruit.modifications.trait[1].effect[1].increase_damage
range=$recruit.modifications.trait[1].effect[1].range
# movement (quick), experience (intelligent)
increase=$recruit.modifications.trait[1].effect[1].increase
[/effect]
[/trait]
[/modifications]
[/unit]
[/then]
[else]
# simply use cost to return
[gold]
side=1
amount=$recruit.cost
[/gold]
[/else]
[/if]
#enddef
#define CHECK_INTELLIGENT NAME
[if]
[variable]
# Ignoring single-trait units, as we don't have those during the tutorial
name={NAME}.modifications.trait.length
equals=2
[/variable]
[then]
[if]
[variable]
name={NAME}.modifications.trait[0].id
equals=intelligent
[/variable]
[or]
[variable]
name={NAME}.modifications.trait[1].id
equals=intelligent
[/variable]
[/or]
[then]
{VARIABLE is_intelligent yes}
[/then]
[else]
{VARIABLE is_intelligent no}
[/else]
[/if]
[/then]
[else]
{VARIABLE is_intelligent no}
[/else]
[/if]
#enddef
#define IMPORTANT_UNIT NAME
{CHECK_INTELLIGENT {NAME}}
[if]
# Archer needs 44/35(intelligent), Fighter needs 40/32
[variable]
name={NAME}.type
equals=Elvish Archer
[/variable]
{BOOLEQ is_intelligent no}
[variable]
name={NAME}.experience
greater_than=35
[/variable]
[or]
[variable]
name={NAME}.type
equals=Elvish Archer
[/variable]
{BOOLEQ is_intelligent yes}
[variable]
name={NAME}.experience
greater_than=26
[/variable]
[/or]
[or]
[variable]
name={NAME}.type
equals=Elvish Fighter
[/variable]
{BOOLEQ is_intelligent no}
[variable]
name={NAME}.experience
greater_than=31
[/variable]
[/or]
[or]
[variable]
name={NAME}.type
equals=Elvish Fighter
[/variable]
{BOOLEQ is_intelligent yes}
[variable]
name={NAME}.experience
greater_than=23
[/variable]
[/or]
[then]
{VARIABLE commented 0}
{FOREACH galdrad_comments i}
[if]
[variable]
name=galdrad_comments[$i].id
equals=${NAME}.id
[/variable]
[then]
{VARIABLE commented 1}
[/then]
[/if]
{NEXT i}
{CLEAR_VARIABLE i}
[if]
{NUMEQ commented 0}
[then]
[store_unit]
[filter]
id=${NAME}.id
[/filter]
variable=galdrad_comments
mode=append
[/store_unit]
{TEACHER (_"That unit is about one kill (8 experience points) away from gaining a level! Do not let it die!")}
[/then]
[/if]
{CLEAR_VARIABLE commented}
[/then]
[/if]
{CLEAR_VARIABLE is_intelligent}
#enddef
#define DEFENDER_INJURED NAME
[if]
{NUMEQ {NAME}.side 1}
[variable]
name={NAME}.hitpoints
less_than=19
[/variable]
[variable]
name={NAME}.hitpoints
greater_than=0
[/variable]
[then]
{VARIABLE complained 0}
# FIXME: If same unit gets attacked twice in same turn, this
# does not seem to find it the second time. Some internal bug?
{FOREACH unit_complained i}
[if]
[variable]
name=unit_complained[$i].id
equals=${NAME}.id
[/variable]
[then]
{VARIABLE complained 1}
[/then]
[/if]
{NEXT i}
[if]
{NUMEQ complained 0}
[then]
[store_unit]
[filter]
id=${NAME}.id
[/filter]
variable=unit_complained
mode=append
[/store_unit]
[if]
{NUMEQ complain_msg 2}
[then]
[message]
speaker=second_unit
message= _"I hope I have a chance to retreat after this!"
[/message]
{VARIABLE_OP complain_msg add 1}
[/then]
[/if]
[if]
{NUMEQ complain_msg 1}
[then]
[message]
speaker=second_unit
message= _"One lucky attack by an Orcish Grunt, and Im done for!"
[/message]
{VARIABLE_OP complain_msg add 1}
[/then]
[/if]
[if]
{NUMEQ complain_msg 0}
[then]
[message]
speaker=second_unit
message= _"Ouch! I could make use of some healing in a village."
[/message]
{VARIABLE_OP complain_msg add 1}
[/then]
[/if]
[/then]
[/if]
{CLEAR_VARIABLE i}
{CLEAR_VARIABLE complained}
{IMPORTANT_UNIT {NAME}}
[/then]
[/if]
#enddef
#define CHECK_INCOME
[if]
{NUMEQ income_exceeded 0}
[then]
[store_side]
[/store_side]
[if]
[variable]
name=side.gold
greater_than=13
[/variable]
[then]
{VARIABLE income_exceeded 1}
{STUDENT (_"I have $side.gold gold; enough to recruit!")}
{TALK_ABOUT_LOC 9,15 (_"Yes, keep recruiting more units: I think you might need them!")}
[/then]
[/if]
{CLEAR_VARIABLE side}
[/then]
[/if]
#enddef
[tutorial]
id=2_Tutorial
name= _"Wesnoth Tutorial Part II"
map_data="{campaigns/tutorial/maps/2_Tutorial.map}"
turns=26
{DEFAULT_SCHEDULE}
[side]
type=Fighter
id=student
name= _"Konrad"
save_id=human_player
persistent=yes
canrecruit=yes
side=1
gold=123
controller=human
recruit=Elvish Fighter,Elvish Archer,Elvish Shaman
[/side]
[side]
type=Orcish Warrior
id=Thrag
name= _"Thrag"
side=2
canrecruit=yes
recruit=Orcish Grunt,Wolf Rider,Orcish Archer
gold=0
{ai/aliases/stable_singleplayer.cfg}
[ai]
[aspect]
id=aggression
[facet]
# When we unleash you, you *will* attack.
value=1.0
turns=1-6
[/facet]
[/aspect]
[/ai]
[/side]
[side]
no_leader=yes
side=3
team_name=1
controller=null
[/side]
[event]
name=prestart
[objectives]
side=1
[objective]
description= _"Defeat the Orc Leader"
condition=win
[/objective]
[objective]
description= _"Death of Konrad"
condition=lose
[/objective]
{TURNS_RUN_OUT}
[/objectives]
[if]
[variable]
name=gender
equals=female
[/variable]
[then]
[store_unit]
[filter]
id=student
[/filter]
kill=yes
variable=student_save
[/store_unit]
{VARIABLE student_x $student_save.x}
{VARIABLE student_y $student_save.y}
[unit]
type=Fighteress
side=1
x,y=$student_x,$student_y
id=student
profile=portraits/lisar.png
name= _"Lisar"
canrecruit=yes
[/unit]
[objectives]
side=1
[objective]
description= _"Defeat the Orc Leader"
condition=win
[/objective]
[objective]
description= _"Death of Lisar"
condition=lose
[/objective]
{TURNS_RUN_OUT}
[/objectives]
[/then]
[/if]
[unit]
id=Galdrad
name= _"Galdrad"
type=Elvish Captain
x,y=12,2
side=3
[/unit]
[unit]
id=Dumbo
generate_name=yes
type=Orcish Grunt
x,y=8,13
side=2
# Make sure the two archers can't take him out!
[modifications]
{TRAIT_RESILIENT}
[/modifications]
[/unit]
[/event]
[event]
name=start
{VARIABLE dumbo_dead 0}
{VARIABLE villages_around_keep 0}
{VARIABLE village_warn 0}
{VARIABLE recruit_num 1}
{VARIABLE income_exceeded 0}
{STUDENT (_"Ho, Galdrad! Has Delfador conjured something else to beat me with? A flock of scarecrows, perhaps?")}
# wmlindent: start ignoring
{GENDER ({TEACHER (_"This is no game, Konrad! " +
_"Orcs have encamped across the river. This is elven country; they are fools to enter here. We Elves are fast and hard to hit in forests. You must defeat their leader so they never threaten us again. I will advise you.")}) ({TEACHER (_"This is no game, Lisar! " +
_"Orcs have encamped across the river. This is elven country; they are fools to enter here. We Elves are fast and hard to hit in forests. You must defeat their leader so they never threaten us again. I will advise you.")})}
# wmlindent: stop ignoring
{STUDENT (_"What should I do?")}
# Now were into it... start music.
{DEFAULT_MUSIC_PLAYLIST}
{TALK_ABOUT Dumbo (_"First, we will have to deal with the Orcish Grunt stationed in the middle of the river. He should be little trouble.")}
{TALK_ABOUT Thrag (_"By then, their leader will have recruited more units to send against us and the real fight will begin.")}
{LABEL (_"Shallow") 19,16}
{LABEL (_"Shallow") 18,16}
{LABEL (_"Shallow") 18,14}
{LABEL (_"Shallow") 19,15}
{LABEL (_"Shallow") 20,14}
{LABEL (_"Deep water") 14,14}
{LABEL (_"Deep water") 20,16}
{LABEL (_"Deep water") 4,14}
{TALK_ABOUT_LOC 19,14 (_"See this dark blue water? Its too deep for either side to cross. The orcs could slowly wade through that narrow band of shallow lighter-blue water in the east; but we could stand on the shore and force them to fight us from the water, where they are exposed and we are protected by the forest.")}
{UNLABEL 19,16}
{UNLABEL 18,16}
{UNLABEL 18,14}
{UNLABEL 19,15}
{UNLABEL 20,14}
{UNLABEL 14,14}
{UNLABEL 20,16}
{UNLABEL 4,14}
{LABEL (_"Village") 11,14}
{TALK_ABOUT_LOC 9,14 (_"The more likely attack, then, is across the bridge. That middle island is the key: it has a village for healing injured units and forests in which we fight so well.")}
{UNLABEL 11,14}
# wmlindent: start ignoring
{TEACHER (_"To start, we will need some units:
two Elvish Fighters
two Elvish Archers
one Elvish Shaman")}
# wmlindent: stop ignoring
# See if there are two fighters worth recalling
[store_unit]
variable=recall
[filter]
x,y=recall,recall
[/filter]
[/store_unit]
# Higher Level units should come first.
{VARIABLE recall_xp1 0}
{VARIABLE recall_xp2 0}
{FOREACH recall i}
{VARIABLE temp_xp $recall[$i].experience}
{VARIABLE_OP temp_xp add $recall[$i].variables.previous_xp}
[if]
[variable]
name=temp_xp
greater_than=$recall_xp1
[/variable]
[then]
# Move anything from slot 1 to slot 2
[if]
[variable]
name=recall_xp1
greater_than=0
[/variable]
[then]
{VARIABLE_OP recall_i2 value $recall_i1}
{VARIABLE_OP recall_xp2 value $recall_xp1}
[/then]
[/if]
{VARIABLE_OP recall_i1 value $i}
{VARIABLE_OP recall_xp1 value $temp_xp}
[/then]
[else]
[if]
[variable]
name=temp_xp
greater_than=$recall_xp2
[/variable]
[then]
{VARIABLE_OP recall_i2 value $i}
{VARIABLE_OP recall_xp2 value $temp_xp}
[/then]
[/if]
[/else]
[/if]
{NEXT i}
{CLEAR_VARIABLE i}
[if]
[variable]
name=recall_xp1
greater_than=0
[/variable]
[then]
{VARIABLE_OP recall_name1 value $recall[$recall_i1].name}
[if]
[variable]
name=recall_xp2
greater_than=0
[/variable]
[then]
{VARIABLE_OP recall_name2 value $recall[$recall_i2].name}
# We have two worth recalling.
[if]
[variable]
name=recall_xp1
equals=$recall_xp2
[/variable]
[then]
{TEACHER (_"During your tutorial, both $recall_name1 and $recall_name2 gained $recall_xp1 experience points. You should <i>recall</i> them now so they can gain more experience, rather than recruiting new Fighters.")}
[/then]
[else]
{TEACHER (_"During your tutorial, $recall_name1 gained $recall_xp1 experience points, and $recall_name2 gained $recall_xp2. You should <i>recall</i> them now so they can gain more experience, rather than recruiting new Fighters.")}
[/else]
[/if]
[/then]
[else]
# We have one worth recalling.
{TEACHER (_"During your tutorial, $recall_name1 gained $recall_xp1 experience points. You should recall that unit now, and recruit a second one (which is cheaper than recalling, anyway).")}
[/else]
[/if]
{LABEL (_"RECALL $recall_name1") 11,3}
{PRINT (_"Right click on the tile north-east of you and <i>recall</i> $recall_name1")}
[/then]
[else]
[if]
[variable]
name=recall.length
greater_than=0
[/variable]
[then]
{TEACHER (_"If any Elvish Fighters from your last battle had experience, we would <i>recall</i> them to the current battlefield. However, your veterans gained no experience so its cheaper to recruit new units instead. Recruit an Elvish Fighter.")}
[/then]
[else]
{TEACHER (_"If you had any experienced units alive from your last battle we would <i>recall</i> them. Instead we must recruit some new Elvish Fighters.")}
[/else]
[/if]
{LABEL (_"Elvish Fighter") 11,3}
{PRINT (_"Right click on the tile north-east of you and recruit an Elvish Fighter")}
[/else]
[/if]
[/event]
# Check they recall/recruit correctly in their first turn.
[event]
name=recruit,recall
first_time_only=no
[filter]
side=1
[/filter]
[if]
[variable]
name=recruit_num
less_than=6
[/variable]
[then]
# What did they recruit?
[store_unit]
variable=recruit
kill=yes
[filter]
x,y=$x1,$y1
[/filter]
[/store_unit]
[/then]
[/if]
[if]
{NUMEQ recruit_num 5}
[then]
[if]
[variable]
name=recruit.type
not_equals=Elvish Shaman
[/variable]
[then]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"No! I said recruit an Elvish <i>Shaman</i>! Now try again...")}
[/then]
[else]
[unstore_unit]
variable=recruit
[/unstore_unit]
{VARIABLE_OP recruit_num add 1}
{UNLABEL 10,2}
{CLEAR_PRINT}
{TEACHER (_"The Shaman is a fairly weak unit, but she has the ability to <i>heal</i> friendly units around her. She also has a special attack which <i>slows</i> enemies, halving the damage they do.")}
{STUDENT (_"So, should I end my turn now?")}
# FIXME: If any level 2 units, costs will be higher.
{TEACHER (_"While none of your recruited units can move, you still can. Your five units cost you 5 gold in upkeep, leaving you 3 gold poorer per turn. You need more income.")}
# wmlindent: start ignoring
{GENDER ({PRINT (_"Move Konrad to capture a village")})
({PRINT (_"Move Lisar to capture a village")})}
# wmlindent: stop ignoring
[/else]
[/if]
[/then]
[/if]
[if]
{NUMEQ recruit_num 4}
[then]
[if]
[variable]
name=recruit.type
not_equals=Elvish Archer
[/variable]
[then]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"No! I said recruit an Elvish <i>Archer</i>! Now try again...")}
[/then]
[else]
{VARIABLE_OP recruit_num add 1}
[unit]
id=Eowynial
name= _"Eowynial"
type=Elvish Archer
x,y=$x1,$y1
side=1
gender=female
moves=0
[modifications]
{TRAIT_QUICK}
{TRAIT_RESILIENT}
[/modifications]
[/unit]
{EXPLAIN_QUICK_RESILIENT (_"Eowynial")}
{UNLABEL 9,4}
{UNLABEL 9,3}
{LABEL (_"Shaman") 10,2}
{PRINT (_"Recruit an Elvish Shaman to your north")}
[/else]
[/if]
[/then]
[/if]
[if]
{NUMEQ recruit_num 3}
[then]
[if]
[variable]
name=recruit.type
not_equals=Elvish Archer
[/variable]
[then]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"No! I said recruit an Elvish <i>Archer</i>! Now try again...")}
[/then]
[else]
{VARIABLE_OP recruit_num add 1}
[unit]
id=Elriend
name= _"Elriend"
type=Elvish Archer
x,y=$x1,$y1
side=1
moves=0
[modifications]
{TRAIT_STRONG}
{TRAIT_INTELLIGENT}
[/modifications]
[/unit]
{EXPLAIN_STRONG_INTELLIGENT (_"Elriend")}
[/else]
[/if]
[/then]
[/if]
[if]
{NUMEQ recruit_num 2}
[then]
[if]
[variable]
name=recall_xp2
greater_than=0
[/variable]
[then]
# You were supposed to recall $recall_name2.
[if]
[variable]
name=recruit.name
not_equals=$recall_name2
[/variable]
[then]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"No! I said <i>recall</i> $recall_name2|! Now try again...")}
[/then]
[else]
{VARIABLE_OP recruit_num add 1}
[unstore_unit]
variable=recruit
[/unstore_unit]
{UNLABEL 12,3}
# wmlindent: start ignoring
{LABEL (_"Archer #1") 9,4}
{LABEL (_"Archer #2") 9,3}
# wmlindent: stop ignoring
{PRINT (_"Recruit two Elvish Archers in the tiles to your west")}
[/else]
[/if]
[/then]
[else]
# You were supposed to recruit a Fighter.
[if]
[variable]
name=recruit.type
not_equals=Elvish Fighter
[/variable]
[then]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"No! I said recruit an Elvish <i>Fighter</i>! Now try again...")}
[/then]
[else]
{VARIABLE_OP recruit_num add 1}
[unit]
id=Golir
name= _"Golir"
type=Elvish Fighter
x,y=$x1,$y1
side=1
moves=0
[modifications]
{TRAIT_QUICK}
{TRAIT_RESILIENT}
[/modifications]
[/unit]
{EXPLAIN_QUICK_RESILIENT (_"Golir")}
{UNLABEL 12,3}
# wmlindent: start ignoring
{LABEL (_"Archer #1") 9,4}
{LABEL (_"Archer #2") 9,3}
# wmlindent: stop ignoring
{PRINT (_"Recruit two Elvish Archers in the tiles to your west")}
[/else]
[/if]
[/else]
[/if]
[/then]
[/if]
[if]
{NUMEQ recruit_num 1}
[then]
[if]
[variable]
name=recall_xp1
greater_than=0
[/variable]
[then]
# You were supposed to recall $recall_name1.
[if]
[variable]
name=recruit.name
not_equals=$recall_name1
[/variable]
[then]
[if]
[variable]
name=recruit.name
equals=$recall_name2
[/variable]
[then]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"No! I said recall $recall_name1, not $recall_name2|! Now try again...")}
[/then]
[else]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"No! I said <i>recall</i> $recall_name1 from the last battle, not recruit a new $recruit.language_name|! Now try again...")}
[/else]
[/if]
[/then]
[else]
{VARIABLE_OP recruit_num add 1}
{UNLABEL 11,3}
[unstore_unit]
variable=recruit
[/unstore_unit]
[if]
[variable]
name=recall_xp2
greater_than=0
[/variable]
[then]
{PRINT (_"Right click on the tile east of you and recall $recall_name2")}
{LABEL (_"RECALL $recall_name2") 12,3}
[/then]
[else]
{LABEL (_"Elvish Fighter") 12,3}
{PRINT (_"Right click on the tile east of you and recruit an Elvish Fighter")}
[/else]
[/if]
[/else]
[/if]
[/then]
[else]
# You were supposed to recruit a new fighter.
# FIXME: How do we tell if they recalled instead?
[if]
[variable]
name=recruit.type
not_equals=Elvish Fighter
[/variable]
[or]
[variable]
# FIXME: not a perfect indicator of recall
name=recruit.experience
greater_than=0
[/variable]
[/or]
[then]
{REFUND_AND_REMOVE_RECRUIT}
{TEACHER (_"$recruit.language_name|? I said <i>recruit</i> a new <i>Elvish Fighter</i>. Now try again...")}
[/then]
[else]
{UNLABEL 11,3}
{VARIABLE_OP recruit_num add 1}
[unit]
id=Elindel
name= _"Elindel"
type=Elvish Fighter
x,y=$x1,$y1
side=1
moves=0
[modifications]
{TRAIT_STRONG}
{TRAIT_INTELLIGENT}
[/modifications]
[/unit]
{EXPLAIN_STRONG_INTELLIGENT (_"Elindel")}
{LABEL (_"Elvish Fighter") 12,3}
{PRINT (_"Right click on the tile east of you and recruit an Elvish Fighter")}
[/else]
[/if]
[/else]
[/if]
[/then]
[/if]
{CLEAR_VARIABLE recruit}
[/event]
[event]
name=capture
[filter]
x=7,9,13
y=4,2,3
id=student
[/filter]
first_time_only=no
[allow_undo][/allow_undo]
# FIXME: If they somehow capture a village near keep, count could be wrong.
{VARIABLE_OP villages_around_keep add 1}
[if]
{NUMEQ villages_around_keep 1}
[then]
# wmlindent: start ignoring
# FIXME: Level 2 units change costs.
{GENDER ({TEACHER (_"Youve learned well, Konrad! " +
_"The village supports one unit and pays 1 gold per turn. Youre only losing 1 gold per turn now.")})
({TEACHER (_"Youve learned well, Lisar! " +
_"The village supports one unit and pays 1 gold per turn. Youre only losing 1 gold per turn now.")})}
# wmlindent: stop ignoring
{PRINT (_"End your turn")}
[/then]
[/if]
[if]
{NUMEQ villages_around_keep 3}
[then]
{TEACHER (_"Youve captured all the villages around the keep, but stay near so you can recruit more units.")}
[/then]
[/if]
[/event]
[event]
name=capture
[filter]
x=7,9,13
y=4,2,3
side=1
[not]
id=student
[/not]
[/filter]
{GENDER ({TEACHER (_"You should leave the villages near your keep for Konrad to capture. He needs to stay nearby to recruit more units anyway.")})
({TEACHER (_"You should leave the villages near your keep for Lisar to capture. She needs to stay nearby to recruit more units anyway.")})}
{UNDO_REMINDER}
[/event]
[event]
name=turn 2
{TALK_ABOUT Dumbo (_"Orcish Grunts have no ranged attacks, so use your archers against them.")}
{PRINT (_"Attack the orc with an Archer")}
{NARRATOR _"Unit Summaries" _"To review the capabilities of any unit—including an enemy—hover the mouse over it, and you will see a unit summary on the right of the screen"}
[event]
name=moveto
[filter]
x=8,10
y=8,8
[/filter]
{TEACHER (_"Excellent. Elves are well-protected in the forest. Theres only a 30% chance of hitting an Elvish Archer in that tile.")}
[/event]
[event]
name=moveto
[filter]
x,y=9,8
side=1
[/filter]
[allow_undo][/allow_undo]
{TEACHER (_"Its very dangerous to stand in water when there are enemies about! Your unit will have an 80% chance of being hit when the enemy counter-attacks! Cancel!")}
{UNDO_REMINDER}
[/event]
[event]
name=attack_end
{PRINT (_"Attack the orc with the other Archer")}
# FIXME: Can't nest events of same type: they both fire 8(
# So set up this event on next attack.
[event]
name=attack
[event]
name=attack_end
{CLEAR_PRINT}
{UNLABEL 14,3}
{LABEL (_"Fighter to HERE") 19,5}
{TALK_ABOUT_LOC 19,5 (_"Your other units cannot reach the orc this turn. Send a Fighter to the village in the far east of the map. It will take two turns to reach it.")}
{NARRATOR _"Long-distance Movement" _"You can order a unit to move for multiple turns by selecting the unit and clicking on the destination. A number will indicate how many turns it will take to get there."}
{PRINT (_"Tell a Fighter to move to the far east village")}
[event]
name=moveto
[filter]
x,y=19,5
[/filter]
{UNLABEL 19,5}
[/event]
[event]
name=moveto
[filter]
x=15-19
y=1-6
[/filter]
{UNLABEL 19,5}
{LABEL (_"Keep") 10,3}
{TEACHER (_"Send the other Fighter and the Shaman south so they can attack next turn, then return to the keep to recruit more units!")}
{GENDER ({PRINT (_"Move your Fighter and Shaman south, then return Konrad to the keep")})
({PRINT (_"Move your Fighter and Shaman south, then return Lisar to the keep")})}
[/event]
[event]
name=moveto
[filter]
side=1
x,y=10,3
[/filter]
{UNLABEL 10,3}
{PRINT (_"Recruit another Archer and a Fighter")}
{VARIABLE num_recruited 0}
[/event]
[event]
name=recruit
first_time_only=no
[filter]
side=1
[/filter]
{UNLABEL 11,3}
{VARIABLE_OP num_recruited add 1}
[if]
{NUMEQ num_recruited 2}
[then]
{STUDENT (_"I have no more money to recruit!")}
{TEACHER (_"That is often a problem, which is why owning villages is important.")}
{GENDER ({PRINT (_"Move Konrad to another (unowned) village")})
({PRINT (_"Move Lisar to another (unowned) village")})}
[/then]
[/if]
[/event]
[event]
name=moveto
[filter]
x=7,9,13
y=4,2,3
id=student
[/filter]
{PRINT (_"End your turn")}
[/event]
[/event]
[/event]
[/event]
[/event]
[event]
name=turn 3
{UNLABEL 11,3}
{UNLABEL 12,3}
# Explain: Zone of Control
{TALK_ABOUT Dumbo (_"That Grunt is blocking the bridge! We must occupy that island before the Wolf Riders reach it.")}
{STUDENT (_"Cant our units just move around him?")}
# All around Dumbo (9,14)
{LABEL (_"ZoC") 10,14}
{LABEL (_"ZoC") 8,14}
{LABEL (_"ZoC") 9,13}
{LABEL (_"ZoC") 9,15}
{LABEL (_"ZoC") 10,13}
{LABEL (_"ZoC") 8,13}
# FIXME: Figure out best unit choice.
{TALK_ABOUT Dumbo (_"No. Once you move close to an enemy unit, you are in its <i>Zone of Control</i> and cannot move further that turn.
To move your troops onto that island without wading slowly through the water, youll have to kill the Grunt.")}
{PRINT (_"Attack the orc with an Archer")}
{UNLABEL 10,14}
{UNLABEL 8,14}
{UNLABEL 9,15}
{UNLABEL 9,13}
{UNLABEL 10,13}
{UNLABEL 8,13}
[event]
name=attack_end
[filter_second]
id=Dumbo
[/filter_second]
{CLEAR_PRINT}
[store_unit]
variable=dumbo
kill=no
[filter]
id=Dumbo
[/filter]
[/store_unit]
# This happens before kill event, so we must do this the hard way.
[if]
[variable]
name=dumbo.hitpoints
less_than=1
[/variable]
[then]
{PRINT (_"Advance other units and capture villages, then <b>End Turn</b>")}
[/then]
[else]
[if]
[variable]
name=unit.gender
equals=male
[/variable]
[then]
#po: The unit with unit type $unit.language_name is male.
{STUDENT (_"No other units can reach that orc. I hope my $unit.language_name survives its counter-attack! Id better grab more villages and move everyone closer for next turn.")}
[/then]
[else]
#po: The unit with unit type $unit.language_name is female.
{STUDENT (_"female^No other units can reach that orc. I hope my $unit.language_name survives its counter-attack! Id better grab more villages and move everyone closer for next turn.")}
[/else]
[/if]
{TEACHER (_"Yes. If your Shaman stands just behind that unit on the bridge, she will heal it at the beginning of the next turn.")}
{PRINT (_"Move your Shaman onto the bridge to stand behind your other unit")}
[event]
name=moveto
[filter]
type=Elvish Shaman
[/filter]
{PRINT (_"Advance other units and capture villages, then <b>End Turn</b>")}
[/event]
[/else]
[/if]
{CLEAR_VARIABLE dumbo}
[/event]
[/event]
[event]
name=die
[filter]
id=Dumbo
[/filter]
{VARIABLE dumbo_dead 1}
# Only tell them to defend island if not turn 3.
[if]
[variable]
name=turn_number
greater_than=3
[/variable]
[then]
{DEFEND_ISLAND}
[/then]
[/if]
[event]
name=moveto
[filter]
x=9,9,9
y=15,16,17
side=1
[/filter]
[allow_undo][/allow_undo]
[if]
[variable]
name=turn_number
less_than=8
[/variable]
[then]
{TALK_NO_MOVE (_"Be careful: if you stand on the bridge you are exposed to attack from multiple directions!")}
{UNDO_REMINDER}
[/then]
[/if]
[/event]
[event]
name=moveto
[filter]
x=8,10,18,19,20,11
y=14,15,14,15,14,15
side=1
[/filter]
{TEACHER (_"Its very dangerous to stand in water when there are enemies about! Your unit will have an 80% chance of being hit! Cancel, and wait for them to attack you!")}
{UNDO_REMINDER}
[allow_undo][/allow_undo]
[/event]
[/event]
[event]
name=turn 4
{CLEAR_PRINT}
{TALK_ABOUT_LOC 19,5 (_"Dont forget about your Fighter in the east; you can move him south to that last village near the channel.")}
[allow_undo][/allow_undo]
[if]
{NUMEQ dumbo_dead 0}
[then]
{TALK_ABOUT Dumbo (_"We need to occupy that village, otherwise they will take it next turn! Move a unit into the village to stop the orcs capturing it. Whichever unit you choose will benefit from the villages healing, too.")}
[/then]
[else]
{DEFEND_ISLAND}
[/else]
[/if]
[/event]
[event]
name=turn 5
{DEFEND_ISLAND}
{TALK_ABOUT_LOC 11,14 (_"Careful! It is now nighttime. Orcs are <i>chaotic</i>, which means their attacks are now 25% stronger. By day, their attacks are 25% weaker, which is a noticeable difference. You are <i>lawful</i>: stronger by day and weaker at night. Your elvish warriors are <i>neutral</i>: unaffected by the time of day.")}
{NARRATOR _"Time of Day" _"After this dialog, hold the mouse over the landscape image below the minimap on the right. This brings up a description of the time of day, showing who has the advantage."}
[/event]
[event]
name=turn 6
{CHECK_INCOME}
{TALK_ABOUT_LOC 9,15 (_"Remember to retreat your wounded units to villages. Healers can only heal 4 hitpoints at a time, while villages can heal 8 (the maximum healing for any unit).")}
[/event]
[event]
name=turn 7
{CHECK_INCOME}
{LABEL (_"Defend here") 19,14}
{TALK_ABOUT_LOC 19,16 (_"Beware of those orcs crossing the river! If they get into the forest theyll be hard to dislodge!")}
[/event]
[event]
name=turn 9
{UNLABEL 19,14}
{NARRATOR _"Tracking Unused Units" _"You can ensure you use all your troops by pressing <b>n</b> to step from one unit to the next. If you press <b>space</b>, you can mark the currently selected unit as having finished its turn, which stops you moving it by accident later on. When <b>n</b> no longer selects a new unit, its safe to end your turn."}
[/event]
[event]
name=turn 10
{NARRATOR _"Victory Conditions" _"In this scenario, you only need to defeat the orc leader to win. (Victory conditions for a scenario are given under <b>Scenario Objectives</b> in the <b>Main Menu</b>)."}
[/event]
[event]
name=turn 12
{NARRATOR _"Recruit the Right Unit Types" _"Remember to recruit troops useful for the situation. Archers are particularly effective against Grunts, Wolf Riders and the orcish leader."}
[/event]
# Remind them to keep back
[event]
name=moveto
[filter]
id=student
x=1-20
y=6-20
[/filter]
[if]
[variable]
name=turn_number
less_than=8
[/variable]
[then]
{TEACHER (_"Stay near the keep! You need to be on a keep to recruit more units, and I doubt the orc leader will let you use his!")}
[/then]
[/if]
[allow_undo][/allow_undo]
[/event]
[event]
name=moveto
[filter]
id=Thrag
x=5,14,19
y=19,19,23
[/filter]
{TALK_ABOUT Thrag (_"Their leader has moved into that village! Hes not as stupid as I thought. The village heals him each turn and provides good defense.")}
[/event]
[event]
name=moveto
[filter]
side=2
x=11,6,11
y=14,10,10
[/filter]
{TALK_ABOUT_LOC ($x1,$y1) (_"That unit has captured our village! Youd better get him out; it heals him each turn and provides good defense.")}
[/event]
# Warn about using shaman to attack.
[event]
name=attack
[filter]
type=Elvish Shaman
[/filter]
[message]
speaker=unit
message= _"Using me to attack is risky! I can slow the opponent with my ranged attack, but I hope you have a plan if I miss!"
[/message]
[/event]
[event]
name=attack_end
first_time_only=no
[store_unit]
variable=attacker
[filter]
x,y=$x1,$y1
[/filter]
[/store_unit]
[store_unit]
variable=defender
[filter]
x,y=$x2,$y2
[/filter]
[/store_unit]
{DEFENDER_INJURED defender}
{IMPORTANT_UNIT attacker}
[if]
[variable]
name=attacker.id
equals=Thrag
[/variable]
[variable]
name=attacker.hitpoints
less_than=21
[/variable]
{NUMEQ talk_about_killing_thrag 0}
[then]
{VARIABLE talk_about_killing_thrag 1}
{TALK_ABOUT Thrag (_"You are close to killing their leader! The unit who finishes him will gain 16 experience points because he is second level. Choose your attacking unit carefully!")}
[/then]
[/if]
[if]
[variable]
name=defender.id
equals=Thrag
[/variable]
[variable]
name=defender.hitpoints
less_than=21
[/variable]
{NUMEQ talk_about_killing_thrag 0}
[then]
{VARIABLE talk_about_killing_thrag 1}
{TALK_ABOUT Thrag (_"You are close to killing their leader! The unit who finishes him will gain 16 experience points because he is second level. Choose your attacking unit carefully!")}
[/then]
[/if]
{CLEAR_VARIABLE attacker}
{CLEAR_VARIABLE defender}
[/event]
[event]
name=die
first_time_only=no
[filter]
side=1
[not]
id=student
[/not]
[/filter]
[store_unit]
variable=deadguy
[filter]
x,y=$x1,$y1
[/filter]
[/store_unit]
[if]
[variable]
name=deadguy.type
equals=Elvish Fighter
[/variable]
[or]
[variable]
name=deadguy.type
equals=Elvish Archer
[/variable]
[/or]
[then]
[if]
[variable]
name=deadguy.experience
greater_than=20
[/variable]
[then]
[if]
[variable]
name=deadguy.gender
equals=male
[/variable]
[then]
{TEACHER (_"We will miss $deadguy.name| because he had $deadguy.experience experience points. He would have advanced to second level soon.")}
[/then]
[else]
{TEACHER (_"We will miss $deadguy.name| because she had $deadguy.experience experience points. She would have advanced to second level soon.")}
[/else]
[/if]
[/then]
[else]
[if]
[variable]
name=deadguy.experience
less_than=8
[/variable]
[then]
[if]
[variable]
name=deadguy.gender
equals=male
[/variable]
[then]
{TEACHER (_"We will miss $deadguy.name|, but at least he was not one of our experienced troops!")}
[/then]
[else]
{TEACHER (_"We will miss $deadguy.name|, but at least she was not one of our experienced troops!")}
[/else]
[/if]
[/then]
[/if]
[/else]
[/if]
[/then]
[else]
[if]
[variable]
name=deadguy.type
equals=Elvish Shaman
[/variable]
[then]
{TEACHER (_"Losing a healer hurts all the troops! Keep them out of the enemys reach!")}
{NARRATOR _"Tracking Enemy Movement" _"You can see where an enemy can reach by moving the mouse over them. You can see all possible enemy moves at once with the <b>Show Enemy Moves</b> command from the <b>Actions</b> menu."}
[/then]
[else]
# Must be level 2 unit.
{TEACHER (_"Second level units are powerful, but not invulnerable! Goodbye, $deadguy.name|.")}
[/else]
[/if]
[/else]
[/if]
{CLEAR_VARIABLE deadguy}
[/event]
[event]
name=moveto
[filter]
side=1
x=1-13
y=18-21
[/filter]
{TALK_ABOUT Thrag (_"Beware of the orc leader: he can do 36 hitpoints of damage at night! Attack with many units at once during the day.")}
[/event]
# What if they level the Shaman?
[event]
name=post_advance
[filter]
side=1
type=Elvish Marksman
[/filter]
# FIXME: Abilities.
[if]
[variable]
name=unit.gender
equals=male
[/variable]
[then]
[message]
speaker=unit
#wmllint: display on
message= _"Advancing a level has fully healed me!
I always have a 60% chance of hitting with my <i>Marksman</i> ability, and I deal 9 damage each for 4 attacks. Use me to dislodge hard-to-hit units."
#wmllint: display off
[/message]
[/then]
[else]
[message]
speaker=unit
#wmllint: display on
message= _"female^Advancing a level has fully healed me!
I always have a 60% chance of hitting with my <i>Marksman</i> ability, and I deal 9 damage each for 4 attacks. Use me to dislodge hard-to-hit units."
#wmllint: display off
[/message]
[/else]
[/if]
[/event]
[event]
name=post_advance
[filter]
side=1
type=Elvish Ranger
[/filter]
[message]
speaker=unit
#wmllint: display on
message= _"Advancing a level has fully healed me!
I am good with both bow and sword, and I have a special ability: <i>Ambush</i>. I can hide in forests where enemies can only see me if they are right next to me."
#wmllint: display off
[/message]
[/event]
[event]
name=post_advance
[filter]
side=1
type=Elvish Captain
[/filter]
[message]
speaker=unit
#wmllint: display on
message= _"Advancing a level has fully healed me!
I am good with both bow and sword, and I have a special ability: <i>Leadership</i>. First level units around me do 25% more damage, so position me carefully."
#wmllint: display off
[/message]
[/event]
[event]
name=post_advance
[filter]
side=1
type=Elvish Hero
[/filter]
# FIXME: Abilities
[message]
speaker=unit
#wmllint: display on
message= _"Advancing a level has fully healed me!
I am particularly good with the sword, dealing 8 damage in 4 attacks."
#wmllint: display off
[/message]
[/event]
# WE control the AI! Bwahahaha!
[event]
name=side 2 turn refresh
first_time_only=no
{CLEAR_PRINT}
[if]
{NUMEQ turn_number 1}
[then]
# Advance sacrificial orc.
{MOVE Dumbo 8 13 9 9}
[scroll_to_unit]
id=Thrag
[/scroll_to_unit]
{BADGUY (Wolf Rider) Scout1 17,24}
{BADGUY (Wolf Rider) Scout2 18,23}
{BADGUY (Wolf Rider) Scout3 19,24}
{BADGUY (Wolf Rider) Scout4 17,25}
{BADGUY (Wolf Rider) Scout5 18,25}
# Leader moves to take village
{MOVE Thrag 18 24 19 23}
[capture_village]
side=2
x,y=19,23
[/capture_village]
[/then]
[/if]
[if]
{NUMEQ turn_number 2}
[then]
# Orc runs away.
{MOVE Dumbo 9 9 9 14}
# Riders advance
[scroll_to_unit]
id=Thrag
[/scroll_to_unit]
{MOVE Scout1 17 24 13 20}
{MOVE Scout2 18 23 12 19}
{MOVE Scout3 19 24 14 20}
{MOVE Scout4 17 25 10 24}
{MOVE Scout5 18 25 14 19}
[capture_village]
side=2
x,y=14,19
[/capture_village]
# Leader move to keep, recruits & advances
{MOVE Thrag 19 23 18 24}
{BADGUY (Orcish Grunt) Grunt1 18,23}
{BADGUY (Orcish Grunt) Grunt2 17,24}
{BADGUY (Orcish Archer) Archer1 19,24}
{MOVE Thrag 18 24 16 20}
[/then]
[/if]
[if]
{NUMEQ turn_number 3}
[then]
{MOVE Scout1 13 20 8 18}
{MOVE Scout2 12 19 7 18}
{MOVE Scout3 14 20 9 18}
{MOVE Scout4 10 24 9 26}
[capture_village]
side=2
x,y=9,26
[/capture_village]
{MOVE Scout5 14 19 9 17}
{MOVE Thrag 16 20 11 19}
{MOVE Grunt1 18 23 15 20}
{MOVE Archer1 19 24 16 20}
{MOVE Grunt2 17 24 16 21}
[/then]
[/if]
[if]
{NUMEQ turn_number 4}
[then]
# Leave Scout1 and Scout2 to attack
{MOVE Scout3 9 18 11 16}
{MOVE Scout5 9 17 10 16}
{MOVE Scout4 9 26 6 20}
{MOVE Thrag 11 19 9 19}
{MOVE Grunt1 15 20 11 19}
{MOVE Archer1 16 20 18 17}
{MOVE Grunt2 16 21 18 18}
[/then]
[/if]
# From now on, we only control these two, down channel
[if]
{NUMEQ turn_number 5}
[then]
{MOVE Archer1 18 17 18 16}
{MOVE Grunt2 18 18 18 17}
# Leaders stays here, to shorten the scenario 8)
{MOVE Thrag 9 19 9 19}
[/then]
[/if]
[if]
{NUMEQ turn_number 6}
[then]
{MOVE Archer1 18 16 19 16}
{MOVE Grunt2 18 17 18 16}
{MOVE Thrag 9 19 9 19}
[/then]
[/if]
[if]
{NUMEQ turn_number 7}
[then]
# Force grunt to advance if poss.
[if]
[not]
[have_unit]
x,y=19,16
[/have_unit]
[/not]
[then]
{MOVE Grunt2 18 16 19 16}
[/then]
[else]
{MOVE Grunt2 18 16 18 16}
[/else]
[/if]
{MOVE Thrag 9 19 9 19}
[/then]
[/if]
[if]
{NUMEQ turn_number 8}
[then]
# Force grunt to advance if poss.
[if]
[not]
[have_unit]
x,y=19,16
[/have_unit]
[/not]
[then]
{MOVE Grunt2 18 16 19 16}
[/then]
[else]
{MOVE Grunt2 18 16 18 16}
[/else]
[/if]
# We can now leader move IF they are on bridge
[if]
[not]
[have_unit]
side=1
x=7-11
y=16-21
[/have_unit]
[/not]
[then]
{MOVE Thrag 9 19 9 19}
[/then]
[/if]
[/then]
[/if]
[/event]
[event]
name=time over
{TEACHER (_"You took too long! Well never be rid of these orcs!")}
[endlevel]
result=defeat
[/endlevel]
[/event]
[event]
name=die
[filter]
id=student
[/filter]
[endlevel]
result=defeat
[/endlevel]
[/event]
[event]
name=defeat
{CLEAR_PRINT}
[/event]
[event]
name=victory
{TEACHER (_"You have beaten the orcs! You may want to try some novice-level campaigns next, such as: <i>The South Guard</i>, <i>An Orcish Incursion</i>, <i>A Tale of Two Brothers</i>, or <i>Heir to the Throne</i>. <i>The South Guard</i> was specifically designed as a beginners campaign. Konrad, Lisar and Delfador are characters from <i>Heir to the Throne</i>.")}
[/event]
[/tutorial]