#textdomain wesnoth-ei [scenario] id=04c_Mal-Ravanals_Capital name= _ "Mal-Ravanal’s Capital" map_data="{campaigns/Eastern_Invasion/maps/04c_Mal-Ravanals_Capital.map}" turns=26 {DAWN} {MORNING} {AFTERNOON} {DUSK} {DUSK} {FIRST_WATCH} {FIRST_WATCH} {SECOND_WATCH} {SECOND_WATCH} next_scenario=05_Northern_Outpost {INTRO_AND_SCENARIO_MUSIC underground.ogg the_deep_path.ogg} {EXTRA_SCENARIO_MUSIC heroes_rite.ogg} {EXTRA_SCENARIO_MUSIC underground.ogg} {campaigns/Eastern_Invasion/utils/deaths.cfg} {BIGMAP_04C} [side] type=Lieutenant id=Gweddry name= _ "Gweddry" side=1 canrecruit=yes controller=human team_name=wesnothians user_team_name=_"Wesnothians" {GOLD 200 150 100} {FLAG_VARIANT loyalist} [/side] [side] type=Dark Sorcerer id=Mal-Marak name= _ "Mal-Marak" side=2 canrecruit=yes recruit=Walking Corpse,Skeleton,Skeleton Archer [ai] {NO_SCOUTS} recruitment_pattern=fighter,archer,fighter [/ai] {GOLD 100 100 125} {FLAG_VARIANT undead} team_name=undead user_team_name=_"Undead" [/side] {LIMIT_CONTEMPORANEOUS_RECRUITS 2 Skeleton 3} {LIMIT_CONTEMPORANEOUS_RECRUITS 2 "Skeleton Archer" 2} [side] type=Dark Sorcerer id=Mal-Galkar name= _ "Mal-Galkar" side=3 canrecruit=yes recruit=Walking Corpse,Vampire Bat,Skeleton,Skeleton Archer [ai] {NO_SCOUTS} recruitment_pattern=scout,fighter,archer,fighter,archer [/ai] {GOLD 100 100 125} {FLAG_VARIANT undead} team_name=undead user_team_name=_"Undead" [/side] {LIMIT_CONTEMPORANEOUS_RECRUITS 3 Skeleton 2} {LIMIT_CONTEMPORANEOUS_RECRUITS 3 "Vampire Bat" 2} [side] type=Death Knight id=Ravanal-Guard name= _ "Rava-Krodaz" recruit=Revenant,Bone Shooter side=4 canrecruit=yes facing=sw {GOLD 300 400 600} {FLAG_VARIANT undead} team_name=undead user_team_name=_"Undead" [ai] aggression=-0.2 [/ai] [/side] {STARTING_VILLAGES 4 9} [side] type=Ancient Lich id=Mal-Ravanal name= _ "Mal-Ravanal" recruit=Dark Adept,Bone Shooter,Revenant,Wraith,Shadow side=5 canrecruit=yes facing=sw profile=portraits/mal-ravanal.png {GOLD 400 500 600} {FLAG_VARIANT undead} team_name=undead user_team_name=_"Undead" [ai] passive_leader=yes [/ai] [/side] {STARTING_VILLAGES 5 16} {LIMIT_CONTEMPORANEOUS_RECRUITS 5 Shadow 1} # the prisoners' side [side] side=6 no_leader=yes team_name=wesnothians user_team_name= _ "Wesnothians" [ai] ai_algorithm=idle_ai [/ai] {FLAG_VARIANT loyalist} [/side] [event] name=prestart {TEAM_COLOR_OVERRIDE id=Mal-Ravanal blue} [objectives] side=1 [objective] description= _ "Escape by defeating one of the dark sorcerers" condition=win [/objective] [objective] description= _ "Death of Gweddry" condition=lose [/objective] [objective] description= _ "Death of Dacyn" condition=lose [/objective] {TURNS_RUN_OUT} [gold_carryover] bonus=yes carryover_percentage=40 [/gold_carryover] [/objectives] # initializing of the knight prisoners: per each Rr^Xo hex, create one # imprisoned knight (one of them a paladin) [store_locations] terrain=Rr^Xo variable=prison_locations [/store_locations] {VARIABLE_OP paladin_i rand "0..$($prison_locations.length - 1)"} {FOREACH prison_locations i} [item] x,y=$prison_locations[$i].x,$prison_locations[$i].y halo=items/horse-cage.png [/item] [store_locations] terrain=Re [filter_adjacent_location] x,y=$prison_locations[$i].x,$prison_locations[$i].y [/filter_adjacent_location] variable=guard_location [/store_locations] {GENERIC_UNIT 4 Revenant $guard_location.x $guard_location.y} [+unit] ai_special=guardian role=prison guard [variables] prison_x=$prison_locations[$i].x prison_y=$prison_locations[$i].y [/variables] [/unit] [if] [variable] name=i numerical_equals=$paladin_i [/variable] [then] [unit] type=Paladin side=6 id=Terraent name= _ "Terraent" x,y=$prison_locations[$i].x,$prison_locations[$i].y random_traits=no facing=sw [modifications] {TRAIT_LOYAL} [/modifications] {IS_LOYAL} [/unit] [/then] [else] {GENERIC_UNIT 6 Knight $prison_locations[$i].x $prison_locations[$i].y} [+unit] facing=sw [/unit] [/else] [/if] {NEXT i} {CLEAR_VARIABLE prison_locations,guard_location,paladin_i} [/event] [event] name=start [recall] id=Dacyn [/recall] [message] speaker=Gweddry message= _ "The Bitter Swamp’s ill reputation is, it seems, well merited. Mal-Ravanal’s capital lies before us!" [/message] [message] speaker=Dacyn message= _ "Yes, but look! The undead forces are closing in behind us. As I said before we cannot kill Mal-Ravanal. It was foolish to come this far; we must turn back!" [/message] [message] speaker=Gweddry message= _ "Perhaps. To retreat, we must kill one of these dark sorcerers that follow us. But, perhaps we can kill this Mal-Ravanal. I might wish to try." [/message] [message] speaker=Mal-Ravanal message= _ "These humans have dared foolishly to come this far into my land. Crush them!" [/message] [/event] # this makes sure that the player nor the undead can attack the prisoners, # note that side turn instead of turn refresh is used to prevent the paladin # from healing his guard [event] name=side turn first_time_only=no [if] [variable] name=side_number equals=2 [/variable] [then] [modify_side] side=6 team_name=undead [/modify_side] [/then] [/if] [if] [variable] name=side_number equals=6 [/variable] [then] [modify_side] side=6 team_name=wesnothians [/modify_side] [/then] [/if] [/event] # this makes sure that the prisoners can't attack anyone and that the guards # will not move [event] name=turn refresh first_time_only=no [if] [variable] name=side_number equals=4 [/variable] [then] {MODIFY_UNIT (role=prison guard) moves 0} [/then] [/if] [if] [variable] name=side_number equals=6 [/variable] [then] [store_unit] [filter] side=6 [/filter] kill=yes variable=prisoners [/store_unit] {FOREACH prisoners i} {VARIABLE prisoners[$i].moves 0} {VARIABLE prisoners[$i].attacks_left 0} [unstore_unit] variable=prisoners[$i] find_vacant=no [/unstore_unit] {NEXT i} {CLEAR_VARIABLE prisoners} [/then] [/if] [/event] [event] name=die first_time_only=no [filter] role=prison guard [/filter] [store_unit] [filter] x,y=$unit.variables.prison_x,$unit.variables.prison_y [/filter] kill=yes variable=freed_prisoner [/store_unit] {VARIABLE freed_prisoner.side 1} {VARIABLE freed_prisoner.moves $freed_prisoner.max_moves} {VARIABLE freed_prisoner.attacks_left 1} [unstore_unit] variable=freed_prisoner find_vacant=no [/unstore_unit] [terrain] x,y=$freed_prisoner.x,$freed_prisoner.y terrain=Rr [/terrain] [remove_item] x,y=$freed_prisoner.x,$freed_prisoner.y [/remove_item] [if] [have_unit] [and] role=prison guard [or] role=former prison guard [/or] [/and] count=5 [/have_unit] [then] [message] speaker=$freed_prisoner.id message= _ "Thank you for destroying that skeleton warrior! Every time you kill one of the Revenants, one of us knights is let free!" [/message] [message] speaker=Gweddry message= _ "Why? Are you the undead’s prisoners?" [/message] [message] speaker=$freed_prisoner.id message= _ "Yes. My allies and I were questing when we were ambushed by undead. The guard is playing a sick game — whenever one of their warriors dies, one of us is let free, but whenever you lose a fighter, they kill one of us." [/message] [message] speaker=Dacyn message= _ "This sounds dangerous. We will try to free as many of you as possible before we escape from here." [/message] [message] speaker=$freed_prisoner.id message= _ "Five of my comrades are still imprisoned. We will gladly enter your service in appreciation for our freedom." [/message] [/then] [/if] {CLEAR_VARIABLE freed_prisoner} [/event] # this makes a random guard kill their prisoner whenever one of the player’s # units dies [event] name=die first_time_only=no [filter] side=1 [/filter] [if] [have_unit] side=6 [/have_unit] [then] # this makes sure that all the knights are killed before the paladin [if] [have_unit] type=Knight side=6 [/have_unit] [then] [store_unit] [filter] type=Knight side=6 [/filter] kill=no variable=killable_prisoners [/store_unit] [/then] [else] [store_unit] [filter] side=6 [/filter] kill=no variable=killable_prisoners [/store_unit] [/else] [/if] {VARIABLE_OP random_prisoner_i rand "1..$killable_prisoners.length"} {VARIABLE_OP random_prisoner_i sub 1} [store_unit] [filter] side=4 role=prison guard [filter_adjacent] x,y=$killable_prisoners[$random_prisoner_i].x,$killable_prisoners[$random_prisoner_i].y [/filter_adjacent] [/filter] kill=yes variable=stored_executioner [/store_unit] # the guard of the killed prisoner is now free to act normally {CLEAR_VARIABLE stored_executioner.ai_special,stored_executioner.status.guardian} {VARIABLE stored_executioner.role "former prison guard"} [unstore_unit] variable=stored_executioner [/unstore_unit] [animate_unit] flag=attack [filter] x,y=$stored_executioner.x,$stored_executioner.y [/filter] [primary_attack] name=axe [/primary_attack] hits=yes [facing] x,y=$killable_prisoners[$random_prisoner_i].x,$killable_prisoners[$random_prisoner_i].y [/facing] [/animate_unit] [kill] x,y=$killable_prisoners[$random_prisoner_i].x,$killable_prisoners[$random_prisoner_i].y animate=yes fire_event=no [/kill] [terrain] x,y=$killable_prisoners[$random_prisoner_i].x,$killable_prisoners[$random_prisoner_i].y terrain=Rr [/terrain] [remove_item] x,y=$killable_prisoners[$random_prisoner_i].x,$killable_prisoners[$random_prisoner_i].y [/remove_item] {CLEAR_VARIABLE killable_prisoners,random_prisoner_i,stored_executioner} [/then] [/if] [/event] #Mal-Ravanal notices Dacyn [event] name=attack end [filter] id=Dacyn [/filter] [filter_second] [not] id=Mal-Ravanal [/not] [/filter_second] [filter_attack] range=ranged [/filter_attack] [message] speaker=Mal-Ravanal message= _ "Wait! I recognize that magic! Dacyn, have you come to surrender to me? Or perhaps you wish to finish the duel we started so long ago?" [/message] [message] speaker=Dacyn message= _ "If I have one regret, it is that mercy slowed my hand thirty three years ago. Stop this madness and I will release you from your torment." [/message] [message] speaker=Mal-Ravanal message= _ "Torment?! You have no idea... but you soon will. Kill them all and bring Dacyn to me!" [/message] [message] speaker=Gweddry message= _ "You know this lich?" [/message] [message] speaker=Dacyn message= _ "Yes... We studied together many years ago. He was most powerful then, but the dark power I sense today is far greater. We must escape immediately!" [/message] [/event] #if Dacyn attacks Mal-Ravanal [event] name=attack [filter] id=Dacyn [/filter] [filter_second] id=Mal-Ravanal [/filter_second] [message] speaker=Mal-Ravanal message= _ "Ah, so you’ve decided to fight me." [/message] [message] speaker=Dacyn message= _ "I will atone for my failure thirty three years ago." [/message] [/event] #impossible to kill Mal-Ravanal; he teleports away [event] name=last breath [filter] id=Mal-Ravanal [/filter] [message] speaker=Mal-Ravanal message= _ "Enough! You cannot possibly defeat me!" [/message] [animate_unit] flag=pre_teleport [/animate_unit] [kill] id=Mal-Ravanal animate=no fire_event=no [/kill] [message] speaker=Gweddry message= _ "Is he... dead?" [/message] [message] speaker=Dacyn message= _ "Merely departed. He will return once he has recovered; we would best be away from here by then." [/message] [/event] #when you kill one of the necros you win [event] name=die [filter] id=Mal-Marak [/filter] [endlevel] result=victory bonus=yes {NEW_GOLD_CARRYOVER 40} [/endlevel] [/event] [event] name=die [filter] id=Mal-Galkar [/filter] [endlevel] result=victory bonus=yes {NEW_GOLD_CARRYOVER 40} [/endlevel] [/event] [event] name=victory [message] speaker=narrator image=wesnoth-icon.png message=_ "Gweddry’s men retreated swiftly from the Bitter Swamp, fleeing north and west as if their heels were winged. Finding a low pass through the northern Estmarks, they were greatly relieved to see the valley of the Weldyn open before them on the other side." [/message] [/event] {FOREIGN_DEFEAT} [/scenario]