1#textdomain wesnoth-low
2[scenario]
3    id=02_Hostile_Mountains
4    next_scenario=03_Kalian_under_Attack
5
6    random_start_time=no
7    allow_new_game=no
8    force_lock_settings=yes
9
10    experience_modifier=100
11    name= _ "Hostile Mountains"
12    {LOW_MAP 02_Hostile_Mountains.map}
13    {TURNS 36 32 28}
14
15    {INTRO_AND_SCENARIO_MUSIC sad.ogg northern_mountains.ogg}
16    {EXTRA_SCENARIO_MUSIC knolls.ogg}
17    {EXTRA_SCENARIO_MUSIC traveling_minstrels.ogg}
18    {EXTRA_SCENARIO_MUSIC legends_of_the_north.ogg}
19    {EXTRA_SCENARIO_MUSIC knalgan_theme.ogg}
20
21    {DEFAULT_SCHEDULE_AFTERNOON}
22
23    {STARTING_VILLAGES_ALL 4}
24    {STARTING_VILLAGES_DWARF 3}
25
26    [story]
27        [part]
28            story= _ "Kalenz and his band broke out of the orcish encirclement, only to discover that the country on the direct route to the Ka’lian was already swarming with orcs. The raid on Kalenz’s home, it seemed, had been but one small part of a great migration south. There was no choice but to make a detour through territory the elves would rather have avoided..."
29            delay=8000
30        [/part]
31    [/story]
32    {LOW_TRACK {FLIGHT_STAGE2} }
33
34    ### Kalenz's code ###
35#define PLAYER_GOLD
36#ifdef MULTIPLAYER
37    {GOLD 120 100 80}
38#else
39    {GOLD 200 180 120}
40#endif
41    income=-2
42    village_gold=1
43#enddef
44
45    # wmllint: validate-off
46    [side]
47        side=1
48        {PLAYABLE}
49        {KALENZ_YOUNG}
50        {PLAYER_GOLD}
51        disallow_shuffle=yes
52#ifndef MULTIPLAYER
53        [unit]
54            {LANDAR_YOUNG}
55            x=20
56            y=4
57        [/unit]
58#endif
59    [/side]
60    # wmllint: validate-on
61    [event]
62        name=prestart
63        [recall]
64            id=Anduilas
65            x=20
66            y=6
67        [/recall]
68        [recall]
69            id=Arkildur
70            x=19
71            y=5
72        [/recall]
73    [/event]
74    ### /Kalenz's code ###
75
76    # wmllint: skip-side
77    {MP_SIDE 2 (
78        x=20
79        y=4
80        save_id=Landar
81        disallow_shuffle=yes
82        {LANDAR_YOUNG}
83        {PLAYABLE}
84        {PLAYER_GOLD}
85    )}
86
87    ### Olurf's Code ###
88#define OLURFS_LAND
89    x=20-24,19-30,17-30,16-30,14-30,12-30,11-30,10-30,7-30,8-30,10-30,13-30,15-30,18-30,19-30,20-30,22-30,23-30,24-30,23-30,22-30
90    y=10,11,12,13-15,16-17,18-19,20,21,22,23,24,25,26,27,28-29,30,31-32 ,33-36,37,38-39,40
91#enddef
92
93    # wmllint: validate-off
94    [side]
95        # wmllint: who OLURF is Olurf
96        {OLURF}
97        side=3
98        allow_player=no
99        controller=ai
100        {GOLD 150 120 120}
101        persistent=yes
102        save_id=Olurf
103#ifdef EASY
104        team_name=player
105        user_team_name= _ "Player"
106#else
107        team_name=player,trolls
108        user_team_name= _ "Neutrals"
109#endif
110        [ai]
111            {AI_SIMPLE_ALWAYS_ASPECT caution 0}
112            {AI_SIMPLE_ALWAYS_ASPECT village_value 0}
113            {AI_SIMPLE_ALWAYS_ASPECT leader_value 0}
114        [/ai]
115    [/side]
116    # wmllint: validate-on
117
118    # Trolls have stepped on Olurf's land.
119    [event]
120        name=enter_hex
121        first_time_only=yes
122        [filter]
123            side=4
124            {OLURFS_LAND}
125        [/filter]
126
127        [message]
128            id=Olurf
129            message= _ "Those stinking trolls ha’ stepped on <i>our</i> land!"
130        [/message]
131
132        [cancel_action]
133        [/cancel_action]
134
135        [if]
136            [variable]
137                name=offended_by_elves
138                boolean_equals=yes
139            [/variable]
140            # the elves have stepped onto already
141            [then]
142                [modify_side]
143                    side=3
144                    team_name=dwarves
145                    user_team_name= _ "Enemies"
146                [/modify_side]
147#ifdef EASY
148                [fire_event]
149                    name=dwarves_defend_their_territory
150                [/fire_event]
151#endif
152#ifdef NORMAL
153                [fire_event]
154                    name=dwarves_defend_their_territory
155                [/fire_event]
156#endif
157#ifdef HARD
158                [fire_event]
159                    name=dwarves_kill_elves_and_trolls
160                [/fire_event]
161#endif
162            [/then]
163            [else]
164                [modify_side]
165                    side=3
166                    team_name=player
167                    user_team_name= _ "Player"
168                [/modify_side]
169#ifdef EASY
170                [fire_event]
171                    name=dwarves_kill_trolls
172                [/fire_event]
173#endif
174#ifdef NORMAL
175                [fire_event]
176                    name=dwarves_kill_trolls
177                [/fire_event]
178#endif
179#ifdef HARD
180                [fire_event]
181                    name=dwarves_kill_trolls
182                [/fire_event]
183#endif
184            [/else]
185        [/if]
186    [/event]
187
188    # Elves have stepped on Olurf's land.
189    [event]
190        name=enter_hex
191        first_time_only=yes
192        [filter]
193            side=1,2
194            {OLURFS_LAND}
195        [/filter]
196
197        [message]
198            id=Olurf
199            message= _ "Those lying elves have stepped on <i>our</i> land!"
200        [/message]
201        [message]
202            id=Kalenz
203            message= _ "Fight to subdue, and do not kill unless you must. We have foes enough as it is without making blood enemies of these dwarves."
204        [/message]
205
206        [cancel_action]
207        [/cancel_action]
208
209        [store_side]
210            side=3
211            variable=olurf_side
212        [/store_side]
213        [if]
214            [variable]
215                name=olurf_side.team_name
216                equals=player
217            [/variable]
218            [then]
219                [modify_side]
220                    side=3
221                    team_name=dwarves
222                    user_team_name= _ "Enemies"
223                [/modify_side]
224#ifdef EASY
225                [fire_event]
226                    name=dwarves_defend_their_territory
227                [/fire_event]
228#endif
229#ifdef NORMAL
230                [fire_event]
231                    #TODO think about making it like HARD
232                    name=dwarves_defend_their_territory
233                [/fire_event]
234#endif
235#ifdef HARD
236                [fire_event]
237                    name=dwarves_kill_elves_and_trolls
238                [/fire_event]
239#endif
240            [/then]
241            [else]
242                [modify_side]
243                    side=3
244                    team_name=trolls
245                    user_team_name= _ "Enemies"
246                [/modify_side]
247#ifdef EASY
248                [fire_event]
249                    name=dwarves_defend_their_territory
250                [/fire_event]
251#endif
252#ifdef NORMAL
253                [fire_event]
254                    name=dwarves_kill_elves
255                [/fire_event]
256#endif
257#ifdef HARD
258                [fire_event]
259                    name=dwarves_kill_elves
260                [/fire_event]
261#endif
262            [/else]
263        [/if]
264        {CLEAR_VARIABLE olurf_side}
265        {VARIABLE offended_by_elves yes}
266    [/event]
267
268    # start dwarven ai code
269
270#define CLEAN_AI SIDE
271    {MODIFY_AI_DELETE_GOAL {SIDE} *}
272    {MODIFY_AI_TRY_DELETE_STAGE {SIDE} retreat_to_olurfs_land}
273    {MODIFY_AI_TRY_DELETE_ASPECT {SIDE} avoid stay_in_own_land}
274    {MODIFY_AI_TRY_DELETE_ASPECT {SIDE} recruitment_instructions always}
275#enddef
276
277#define ADD_AVOID_STAY_AT_OLURFS_LAND
278    {MODIFY_AI_ADD_ASPECT 3 avoid (
279        [facet]
280            id="stay_in_own_land"
281            [value]
282                [not]
283                    {OLURFS_LAND}
284                [/not]
285            [/value]
286        [/facet]
287    )}
288#enddef
289
290#define ADD_GOAL_KILL_ELVES SIDE
291    {MODIFY_AI_ADD_GOAL {SIDE} (
292        [goal]
293            id=kill_elves
294            [criteria]
295                side=1,2
296            [/criteria]
297            value=1.5
298        [/goal]
299    )}
300#enddef
301
302#define ADD_GOAL_KILL_TROLLS SIDE
303    {MODIFY_AI_ADD_GOAL {SIDE} (
304        [goal]
305            id=kill_trolls
306            [criteria]
307                side=4
308            [/criteria]
309            value=1.5
310        [/goal]
311    )}
312#enddef
313
314#define ADD_GOAL_KILL_TRESPASSERS SIDE
315    {MODIFY_AI_ADD_GOAL {SIDE} (
316        [goal]
317            id=kill_trespassers
318            [criteria]
319                [not]
320                    side={SIDE}
321                [/not]
322                #limiting is handled by 'avoid' aspect
323            [/criteria]
324            value=1.5
325        [/goal]
326    )}
327#enddef
328
329#define ADD_STAGE_RETREAT_TO_OLURFS_LAND SIDE
330    [modify_ai]
331        side={SIDE}
332        action=add
333        path=stage[0]
334        [stage]
335            id=retreat_to_olurfs_land
336            name=ai_default_rca::candidate_action_evaluation_loop
337            #TODO: add [candidate_action]s to make the retreat work
338        [/stage]
339    [/modify_ai]
340#enddef
341
342    [event]
343        name=dwarves_watch_the_show
344        first_time_only=no
345        {CLEAN_AI 3}
346        {MODIFY_AI_ADD_ASPECT 3 recruitment_instructions {AI_NO_RECRUITMENT} }
347        {ADD_AVOID_STAY_AT_OLURFS_LAND}
348        [message]
349            id=Olurf
350            message= _ "It should be rare sport to watch this... Just be sure not to trespass on our land."
351        [/message]
352    [/event]
353
354    [event]
355        name=dwarves_kill_elves
356        first_time_only=no
357        {CLEAN_AI 3}
358        {ADD_GOAL_KILL_ELVES 3}
359        [message]
360            id=Olurf
361            message= _ "Up axes, and death to elves!"
362        [/message]
363    [/event]
364
365    [event]
366        name=dwarves_kill_trolls
367        first_time_only=no
368        {CLEAN_AI 3}
369        {ADD_GOAL_KILL_TROLLS 3}
370        [message]
371            id=Olurf
372            message= _ "Up axes, and death to trolls!"
373        [/message]
374    [/event]
375
376    [event]
377        name=dwarves_kill_elves_and_trolls
378        first_time_only=no
379        {CLEAN_AI 3}
380        {ADD_GOAL_KILL_ELVES 3}
381        {ADD_GOAL_KILL_TROLLS 3}
382        [message]
383            id=Olurf
384            message= _ "Up axes, and kill all the interlopers!"
385        [/message]
386    [/event]
387
388    [event]
389        name=dwarves_defend_their_territory
390        first_time_only=no
391        {CLEAN_AI 3}
392        {ADD_AVOID_STAY_AT_OLURFS_LAND}
393        {ADD_GOAL_KILL_TRESPASSERS 3}
394        {ADD_STAGE_RETREAT_TO_OLURFS_LAND 3}
395        [message]
396            id=Olurf
397            message= _ "Defend our bounds! Slay all who trespass them!"
398        [/message]
399    [/event]
400
401#undef CLEAN_AI
402#undef ADD_AVOID_STAY_AT_OLURFS_LAND
403#undef ADD_STAGE_RETREAT_TO_OLURFS_LAND
404#undef ADD_GOAL_KILL_ELVES
405#undef ADD_GOAL_KILL_TROLLS
406#undef ADD_GOAL_KILL_TRESPASSERS
407
408    # end dwarven ai code
409
410    [event]
411        name=scenario_end
412        {CLEAR_VARIABLE offended_by_elves}
413    [/event]
414    ### /Olurf's Code ###
415
416    ### Enemy Side ###
417    [side]
418        side=4
419        allow_player=no
420        controller=ai
421#ifdef EASY
422        type=Troll Hero
423#else
424        type=Great Troll
425#endif
426        id=Grugl
427        name=_ "Grugl"
428
429        team_name=trolls
430        user_team_name= _ "Enemies"
431        {TROLL_SETUP}
432        canrecruit=yes
433#ifdef EASY
434        recruit=Troll Whelp
435#endif
436#ifdef NORMAL
437        recruit=Troll Whelp, Troll, Troll Rocklobber
438#endif
439#ifdef HARD
440        recruit=Troll Whelp, Troll, Troll Rocklobber, Troll Warrior
441#endif
442        {GOLD 170 240 270}
443
444        [ai]
445            {AI_SIMPLE_ALWAYS_ASPECT recruitment_pattern "fighter, mixed fighter"}
446            [goal]
447                [criteria]
448                    race=elf
449                [/criteria]
450                value=1.5
451            [/goal]
452
453            {AI_SIMPLE_ALWAYS_ASPECT aggression 0.75}
454            {AI_SIMPLE_NIGHT_ASPECT caution 0}
455            {AI_SIMPLE_NIGHT_ASPECT grouping no}
456        [/ai]
457        {INCOME 4 8 12}
458    [/side]
459#undef OLURFS_LAND
460#ifdef HARD
461    {LIMIT_CONTEMPORANEOUS_RECRUITS 4 "Troll Warrior" 2}
462#endif
463
464    ### /Enemy Side ###
465
466    #### Objectives and corresponding events ####
467    [event]
468        name=start
469        [message]
470            id=Kalenz
471            message= _ "I had hoped to avoid these paths... The eastern way is through dwarvish territory and is shorter. I pray the dwarves will grant us safe passage, since the other path is through troll territory..."
472        [/message]
473        [message]
474            id=Olurf
475            message= _ "Not even in yer dreams, elf. These are dwarvish lands, and troubles we want no part of nip at yer heels. Get out and stay out!"
476        [/message]
477        [message]
478            id=Landar
479            message= _ "Our troubles will be yours, too, whether either of us wills it or not. The orcs have come down from the north like a flood; if we squabble among ourselves they will feast on our discord."
480        [/message]
481        [message]
482            id=Olurf
483            message= _ "Bah. More smooth words and trickery, by my beard. We know yer kind... and who needs yer help anyway, weaklings? Leave now, or feel my axe! That same kiss of steel will greet all intruders. Anyone who sets foot on the eastern bank o’ this river will rue the day he was born!"
484        [/message]
485        [message]
486            id=Landar
487            message= _ "I cannot see how trolls could be any less friendly."
488        [/message]
489        [message]
490            id=Kalenz
491            message= _ "Hmm... Perhaps the dwarves’ intransigence can serve our purpose. Onwards, and no matter what you do, do <i>not</i> step on the eastern bank of the river!"
492        [/message]
493
494        {HIGHLIGHT_IMAGE 18 37 scenery/signpost.png ()}
495
496        [fire_event]
497            name=dwarves_watch_the_show
498        [/fire_event]
499    [/event]
500
501    [event]
502        name=prestart
503        [objectives]
504            side=0
505
506            [objective]
507                description= _ "Kalenz or Landar must reach the signpost"
508                condition=win
509            [/objective]
510
511            [objective]
512                {ALTERNATIVE_OBJECTIVE_CAPTION}
513                description= _ "Defeat Grugl"
514                condition=win
515            [/objective]
516            [objective]
517                description= _ "Death of Kalenz"
518                condition=lose
519            [/objective]
520            [objective]
521                description= _ "Death of Landar"
522                condition=lose
523            [/objective]
524            [objective]
525                description= _ "Death of Olurf"
526                condition=lose
527            [/objective]
528
529            {TURNS_RUN_OUT}
530
531            [gold_carryover]
532                bonus=yes
533                carryover_percentage=40
534            [/gold_carryover]
535        [/objectives]
536    [/event]
537
538#define ENDSPEECH SPEAKER_NAME
539    [message]
540        speaker={SPEAKER_NAME}
541        message= _ "We made it. Onwards to Wesmere!"
542    [/message]
543
544    [if]
545        [variable]
546            name=killed_by_elves
547            greater_than=3
548        [/variable]
549        [then]
550            [message]
551                id=Olurf
552                message= _ "Crazy elves! But at least they felled a few trolls before they left."
553            [/message]
554        [/then]
555        [else]
556            [message]
557                id=Olurf
558                message= _ "Crazy elves!"
559            [/message]
560        [/else]
561    [/if]
562#enddef
563
564    [event]
565        name=prestart
566        {VARIABLE killed_by_elves 0}
567    [/event]
568
569    [event]
570        name=die
571        first_time_only="no"
572        [filter]
573            race=troll
574        [/filter]
575        [filter_second]
576            race=elf
577        [/filter_second]
578        #TODO does this need the variable to exist?
579        [set_variable]
580            name=killed_by_elves
581            add=1
582        [/set_variable]
583    [/event]
584
585    [event]
586        name=scenario_end
587        {CLEAR_VARIABLE killed_by_elves}
588    [/event]
589
590    [event]
591        name=moveto
592        [filter]
593            x=18
594            y=37
595            [and]
596                id=Kalenz
597                [or]
598                    id=Landar
599                [/or]
600            [/and]
601        [/filter]
602
603        {ENDSPEECH unit}
604
605        [endlevel]
606            result=victory
607#ifdef MULTIPLAYER
608            bonus=0.5
609#else
610            bonus=yes
611#endif
612            {NEW_GOLD_CARRYOVER 40}
613        [/endlevel]
614    [/event]
615
616    [event]
617        name=last breath
618        [filter]
619            id=Grugl
620        [/filter]
621        [filter_second]
622            race=dwarf
623        [/filter_second]
624        [message]
625            id=Grugl
626            # wmllint: local spelling Urgh
627            message= _ "Urgh! Grugl tried to eat dwarves, but choked on their sharp nasty axes."
628        [/message]
629
630        {ENDSPEECH "Kalenz"}
631    [/event]
632
633    [event]
634        name=last breath
635        [filter]
636            id=Grugl
637        [/filter]
638        [filter_second]
639            race=elf
640        [/filter_second]
641        [message]
642            id=Grugl
643            message= _ "Urgh! Grugl wanted tasty elf-meat, but choked on their nasty pointy spears!"
644        [/message]
645
646        {ENDSPEECH second_unit}
647#undef ENDSPEECH
648        [endlevel]
649            result=victory
650#ifdef MULTIPLAYER
651            bonus=0.5
652#else
653            bonus=yes
654#endif
655            {NEW_GOLD_CARRYOVER 40}
656        [/endlevel]
657    [/event]
658
659    {campaigns/Legend_of_Wesmere/utils/deaths.cfg}
660[/scenario]
661
662#undef PLAYER_GOLD
663#undef MULTIPLAYER_GOLD
664