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