#textdomain wesnoth-trow
[scenario]
    id=19_The_Vanguard
    name= _ "The Vanguard"
    next_scenario=20_Return_of_the_Fleet
    bonus=yes
    map_data="{campaigns/The_Rise_Of_Wesnoth/maps/19_The_Vanguard.map}"

    {TURNS 41 38 35}
    {DEFAULT_SCHEDULE}

    {SCENARIO_MUSIC loyalists.ogg}
    {EXTRA_SCENARIO_MUSIC northerners.ogg}
    {EXTRA_SCENARIO_MUSIC breaking_the_chains.ogg}
    {EXTRA_SCENARIO_MUSIC siege_of_laurelmor.ogg}

    # No story
    {THE_VANGUARD_BIGMAP}

    {TROW_DEATHS}

    [side]
        id=Prince Haldric
        name= _ "Prince Haldric"
        side=1
        type=Noble Commander
        unrenamable=yes
        canrecruit=yes
        gold=200
        controller=human
        team_name=Haldric
        user_team_name=_"Refugees"
        fog=yes
        {FLAG_VARIANT loyalist}
    [/side]

    [side]
        type=Orcish Warlord
        id=Tan-Erirt
        name= _ "Tan-Erirt"
        side=2
        canrecruit=yes
#ifdef EASY
        recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Goblin Pillager, Goblin Knight, Goblin Spearman
#endif

#ifdef NORMAL
        recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Goblin Pillager, Goblin Knight, Orcish Slayer, Orcish Warrior, Goblin Spearman
#endif

#ifdef HARD
        recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Orcish Warrior, Goblin Knight, Goblin Pillager, Orcish Slayer, Goblin Spearman, Goblin Impaler
#endif
        {GOLD 150 190 230}
        team_name=orcs
        user_team_name=_"Orcs"
        [ai]
            #{NO_SCOUTS}
            recruitment_ignore_bad_movement=yes
            recruitment_pattern=scout,fighter,fighter,mixed fighter,archer
            {ATTACK_DEPTH 5 5 6}
        [/ai]
        [ai]
            time_of_day=dusk,first_watch,second_watch
            aggression=0.75
            caution=0.0
            grouping=no
        [/ai]
        {INCOME 2 4 8}
    [/side]

    {STARTING_VILLAGES 2 8}

    [side]
        type=Orcish Warlord
        id=Tan-Gagar
        name= _ "Tan-Gagar"
        profile=portraits/orcs/transparent/grunt-2.png
        side=3
        canrecruit=yes
#ifdef EASY
        recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Goblin Pillager, Goblin Knight, Goblin Spearman
#endif

#ifdef NORMAL
        recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Goblin Knight, Orcish Slayer, Orcish Warrior, Goblin Spearman
#endif

#ifdef HARD
        recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Orcish Warrior, Goblin Knight, Goblin Pillager, Orcish Slayer, Goblin Spearman, Goblin Impaler
#endif
        {GOLD 150 190 230}
        team_name=orcs
        user_team_name=_"Orcs"
        [ai]
            #{NO_SCOUTS}
            recruitment_ignore_bad_movement=yes
            recruitment_pattern=scout,fighter,fighter,mixed fighter,archer
            {ATTACK_DEPTH 5 5 6}
        [/ai]
        [ai]
            time_of_day=dusk,first_watch,second_watch
            aggression=0.75
            caution=0.0
            grouping=no
        [/ai]
        {INCOME 2 4 8}
    [/side]

    {STARTING_VILLAGES 3 8}

    [side]
        type=Troll Warrior
        id=Thruf
        name= _ "Thruf"
        side=4
        canrecruit=yes
#ifdef EASY
        recruit=Troll Whelp
#endif

#ifdef NORMAL
        recruit=Troll Whelp,Troll,Troll Rocklobber
#endif

#ifdef HARD
        recruit=Troll Whelp,Troll,Troll Warrior,Troll Rocklobber
#endif

        {GOLD 110 150 190}
        team_name=orcs
        user_team_name=_"Orcs"
        [ai]
            {NO_SCOUTS}
            recruitment_ignore_bad_movement=yes
#ifdef EASY
            recruitment_pattern=fighter
#else
            recruitment_pattern=fighter,fighter,mixed fighter
#endif
            grouping=no
            {ATTACK_DEPTH 5 5 6}
        [/ai]

        {INCOME 2 4 8}
    [/side]

    {STARTING_VILLAGES 4 8}

    {ANIMATED_CAMPFIRE 4 24}
    {ANIMATED_CAMPFIRE 8 25}
    {ANIMATED_CAMPFIRE 26 9}
    {ANIMATED_CAMPFIRE 25 17}

    [event]
        name=prestart

        # TODO: better random locations
        {VARIABLE_OP xx1 rand "10..18"}
        {VARIABLE_OP yy1 rand "2..6"}

        {PLACE_IMAGE (items/chest-plain-closed.png) $xx1 $yy1}

        [recall]
            id=Lady Jessene
        [/recall]
        [recall]
            id=Commander Aethyr
        [/recall]

        #OK Get rid of the Ruby of Fire
        [store_unit]
            [filter]
                id=Prince Haldric
            [/filter]

            kill=yes
            variable=stored_Haldric
        [/store_unit]

        {FOREACH stored_Haldric.modifications.object i}
            [if]
                [variable]
                    name=stored_Haldric.modifications.object[$i].id
                    equals=ruby_of_fire
                [/variable]

                [then]
                    {CLEAR_VARIABLE stored_Haldric.modifications.object[$i]}
                [/then]
            [/if]
        {NEXT i}

        {FOREACH stored_Haldric.attack i}
            [if]
                [variable]
                    name=stored_Haldric.attack[$i].name
                    equals=ruby of fire
                [/variable]

                [then]
                    {CLEAR_VARIABLE stored_Haldric.attack[$i]}
                [/then]
            [/if]
        {NEXT i}

        [unstore_unit]
            variable=stored_Haldric
        [/unstore_unit]

        {CLEAR_VARIABLE stored_Haldric}

        [objectives]
            side=1
            [objective]
                description= _ "Defeat all enemy leaders"
                condition=win
            [/objective]
            [objective]
                description= _ "Death of Prince Haldric"
                condition=lose
            [/objective]
            [objective]
                description= _ "Death of Commander Aethyr"
                condition=lose
            [/objective]

            {TURNS_RUN_OUT}

            [gold_carryover]
                bonus=yes
                carryover_percentage=40
            [/gold_carryover]
        [/objectives]
    [/event]

    [event]
        name=start
        [message]
            speaker=narrator
            message= _ "Haldric and his companions race across the plains to confront the resurgent orcish threat. On the eve of battle, Lady Jessene catches up with Haldric on a fog-covered plain."
            image=wesnoth-icon.png
        [/message]
        [message]
            speaker=Lady Jessene
            message= _ "Haldric, the elves, we can’t trust them!"
        [/message]

        [message]
            speaker=Prince Haldric
            message= _ "I could have told you that."
        [/message]
        [message]
            speaker=Lady Jessene
            message= _ "Haldric, it’s bad. The elves are having second thoughts. They think we might be more trouble than we’re worth. We have to defeat these orcs decisively."
        [/message]
        [message]
            speaker=Prince Haldric
            message= _ "That does not sound unreasonable."
        [/message]
        [message]
            speaker=Lady Jessene
            message= _ "More orcs will follow after these. That ruby guarantees it. If more orcs follow us here, the elves seem content to let us fight it out. Then they said they would ‘deal with the survivors’."
        [/message]
        [message]
            speaker=Lady Jessene
            message= _ "Jevyan is here... His familiar, that skull. He won’t let such a lucrative prize as the Ruby of Fire just slip away. Especially when he sees that he has the advantage."
        [/message]
        [message]
            speaker=Prince Haldric
            message= _ "I have a plan. Jessene, remember that troll-hole? Here, take the Ruby of Fire, hide it in the hole."
        [/message]
        [message]
            speaker=Lady Jessene
            message= _ "Haldric! What! Why?"
        [/message]
        [message]
            speaker=Prince Haldric
            message= _ "Just do it."
        [/message]
        [message]
            speaker=Prince Haldric
            message= _ "Commander Aethyr, did these orcs come on our ships? Did they capture the fleet we sent out?"
        [/message]
        [message]
            speaker=Commander Aethyr
            message= _ "No, sir! They must have seized all remaining boats on the Green Isle. Our fleet should be returning any day now."
        [/message]
        [message]
            speaker=Prince Haldric
            message= _ "We are a refugee people. We must push back their vanguard, and secure our beachhead. If they capture our ships all is lost. We will be crushed under a tide of orcs."
            image=portraits/haldric-mad.png
        [/message]

        [recall]
            id=Burin the Lost
        [/recall]
        [recall]
            id=Sir Ruddry
        [/recall]
        [recall]
            id=Sir Ladoc
        [/recall]
        [recall]
            id=Minister Edren
        [/recall]

        [store_unit]
            variable=jessica_store
            kill=yes
            [filter]
                id=Lady Jessene
            [/filter]
        [/store_unit]

        [message]
            speaker=narrator
            message= _ "Lady Jessene soon departs. In the distance a voice booms:"
            image=wesnoth-icon.png
        [/message]

        [message]
            speaker=Tan-Gagar
            message= _ "Drop the gold where it is! We’ve paid our friends enough. There are humans about, I can smell ’em!"
        [/message]
    [/event]

    [event]
        name=time over
        [message]
            speaker=Prince Haldric
            message= _ "We have run out of time... We’ll never beat the orcs to the beach."
            image=portraits/haldric-surprised.png
        [/message]
    [/event]

    [event]
        name=moveto
        [filter]
            side=1
            x=$xx1
            y=$yy1
        [/filter]

        [sound]
            name=open-chest.wav
        [/sound]

        [message]
            speaker=unit
            message= _ "I’ve found the orcs’ chest! It’s filled with gold."
        [/message]

        [remove_item]
            x,y=$x1,$y1
        [/remove_item]

        {PLACE_IMAGE (items/chest-plain-open.png) $xx1 $yy1}

#ifdef EASY
        {LOOT 125 1}
#endif

#ifdef NORMAL
        {LOOT 100 1}
#endif

#ifdef HARD
        {LOOT 75 1}
#endif
    [/event]

    # When an enemy side has less than half of its units left, some undead
    # appear at the next turn start in a location from which they can't reach
    # any player unit in one turn.
    #
    # NOTE: if you modify anything in the inner event, make extra sure you
    # handle delayed/undelayed variable substitution right!

    [event]
        name=die
        first_time_only=no

        [filter]
            side=2,3,4
        [/filter]

        [filter_condition]
            [variable]
                name=side_$unit.side|_undead_backup_triggered
                boolean_not_equals=yes
            [/variable]
        [/filter_condition]

        # This bit tracks the highest number of units the side has had; in most
        # cases this will likely be the number of units the side has when its
        # first unit dies.
        #
        # If this counter isn't perfectly accurate in every situation, it
        # shouldn't matter.
        [store_unit]
            [filter]
                side=$unit.side

                [not]
                    x,y=$x1,$y1
                [/not]
            [/filter]

            kill=no
            variable=this_side_enemies
        [/store_unit]
        [if]
            [variable]
                name=side_$unit.side|_top_enemy_count
                less_than_equal_to=$this_side_enemies.length
            [/variable]

            [then]
                {VARIABLE side_$unit.side|_top_enemy_count "$($this_side_enemies.length + 1)"}
            [/then]
        [/if]

        [if]
            [variable]
                name=this_side_enemies.length
                less_than_equal_to="$($side_$unit.side|_top_enemy_count / 2)"
            [/variable]

            [then]
                #{DEBUG_MSG "Side $unit.side only has $this_side_enemies.length|/$side_$unit.side|_top_enemy_count units left, triggering undead reinforcements..."}

                {VARIABLE side_$unit.side|_undead_backup_triggered yes}

                [store_starting_location]
                    side=$unit.side
                    variable=search_center
                [/store_starting_location]

                [event]
                    name=new turn
                    delayed_variable_substitution=no

                    # This loop searches for a location which satisfies the
                    # following conditions:
                    # 1. Within exactly 12 hexes from any player unit
                    # 2. As close as possible to the location where this unit
                    #    was killed, but only through G*,R*,C*,K*,S*
                    # 3. Not next to any existing (enemy) unit

                    {VARIABLE search_radius 1}
                    [while]
                        [variable]
                            name=possible_undead_locs.length
                            less_than=1
                        [/variable]

                        [variable]
                            name=search_radius
                            less_than=30
                        [/variable]

                        [do]
                            [store_locations]
                                terrain=!,H*,M*,*^F*,Q*

                                [not]
                                    [filter]
                                    [/filter]

                                    radius=1
                                [/not]

                                [not]
                                    [filter]
                                        side=1
                                    [/filter]

                                    radius=11
                                [/not]

                                [and]
                                    [filter]
                                        side=1
                                    [/filter]

                                    radius=12
                                [/and]

                                [and]
                                    x,y=$search_center.x,$search_center.y
                                    radius=$|search_radius

                                    [filter_radius]
                                        terrain=G*,R*,C*,K*,S*
                                    [/filter_radius]
                                [/and]

                                variable=possible_undead_locs
                            [/store_locations]

                            {VARIABLE_OP search_radius add 1}
                        [/do]
                    [/while]
                    [if]
                        [variable]
                            name=possible_undead_locs.length
                            greater_than_equal_to=1
                        [/variable]

                        [then]
                            {VARIABLE_OP undead_loc_i rand "0..$|($|possible_undead_locs.length - 1)"}
                            {VARIABLE spawn_x $|possible_undead_locs[$|undead_loc_i].x}
                            {VARIABLE spawn_y $|possible_undead_locs[$|undead_loc_i].y}

                            {VARIABLE_OP undead_spawns_so_far add 1}

                            [scroll_to]
                                x,y=$|possible_undead_locs[$|undead_loc_i].x,$|possible_undead_locs[$|undead_loc_i].y
                            [/scroll_to]

                            #{DEBUG_MSG "spawning at $|spawn_x|,$|spawn_y"}

                            [switch]
                                variable=undead_spawns_so_far

                                [case]
                                    value=1

                                    {NAMED_LOYAL_UNIT $unit.side Deathblade $|spawn_x $|spawn_y Norte _"Norte"}
                                    # wmllint: recognize Norte

                                    {LOYAL_UNDEAD_UNIT $unit.side (Chocobone) $|spawn_x $|spawn_y}
#ifndef EASY
                                    {LOYAL_UNDEAD_UNIT $unit.side (Chocobone) $|spawn_x $|spawn_y}
#endif

                                    {CLEAR_FOG 1 $|possible_undead_locs[$|undead_loc_i].x $|possible_undead_locs[$|undead_loc_i].y 2}

                                    [message]
                                        speaker=Norte
                                        message= _ "You will be felled by my hand, useless fleshbags!"
                                    [/message]
                                [/case]

                                [case]
                                    value=2

                                    {NAMED_LOYAL_UNIT $unit.side Banebow $|spawn_x $|spawn_y Rabbin _"Rabbin"}
                                    # wmllint: recognize Rabbin

                                    {LOYAL_UNDEAD_UNIT $unit.side (Chocobone) $|spawn_x $|spawn_y}
                                    {LOYAL_UNDEAD_UNIT $unit.side (Chocobone) $|spawn_x $|spawn_y}
#ifdef HARD
                                    {LOYAL_UNDEAD_UNIT $unit.side (Chocobone) $|spawn_x $|spawn_y}
#endif

                                    {CLEAR_FOG 1 $|possible_undead_locs[$|undead_loc_i].x $|possible_undead_locs[$|undead_loc_i].y 2}

                                    [message]
                                        speaker=Rabbin
                                        message= _ "Embrace your end, mortals!"
                                    [/message]

                                    [message]
                                        speaker=Burin the Lost
                                        message= _ "These monsters seem like they want to be embraced by my hammer!"
                                    [/message]
                                [/case]

                                [case]
                                    value=3

                                    {NAMED_LOYAL_UNIT $unit.side Draug $|spawn_x $|spawn_y "General Kafka" _"General Kafka"}
                                    # wmllint: recognize General Kafka

                                    {LOYAL_UNDEAD_UNIT $unit.side  (Chocobone) $|spawn_x $|spawn_y}
                                    {LOYAL_UNDEAD_UNIT $unit.side  (Chocobone) $|spawn_x $|spawn_y}
#ifdef HARD
                                    {LOYAL_UNDEAD_UNIT $unit.side  (Chocobone) $|spawn_x $|spawn_y}
                                    {LOYAL_UNDEAD_UNIT $unit.side  (Chocobone) $|spawn_x $|spawn_y}
#endif

                                    {CLEAR_FOG 1 $|possible_undead_locs[$|undead_loc_i].x $|possible_undead_locs[$|undead_loc_i].y 2}

                                    [message]
                                        speaker=General Kafka
                                        message= _ "Never trust the living to do the job of the undead. Prepare to meet the inevitable!"
                                    [/message]

                                    [message]
                                        speaker=Minister Edren
                                        message= _ "The only job of the dead is to remain dead. Prepare to be reunited with the ground."
                                    [/message]
                                [/case]
                            [/switch]

                            {UNCLEAR_FOG}

                            {CLEAR_VARIABLE undead_loc_i,spawn_x,spawn_y}
                        [/then]

                        #[else]
                        # Player got lucky, no good spawn location was found
                        #[/else]
                    [/if]

                    {CLEAR_VARIABLE search_radius,possible_undead_locs}
                [/event]

                {CLEAR_VARIABLE side_$unit.side|_top_enemy_count}
            [/then]

            #[else]
            #    {DEBUG_MSG "Side $unit.side has $this_side_enemies.length|/$side_$unit.side|_top_enemy_count units left... Needs to be less or equal to $($side_$unit.side|_top_enemy_count / 2) for reinforcements."}
            #[/else]
        [/if]

        {CLEAR_VARIABLE this_side_enemies,search_center}
    [/event]

    [event]
        name=die
        [filter]
            id=Tan-Erirt
        [/filter]

        [filter_second]
            side=1
        [/filter_second]

        [message]
            speaker=Tan-Gagar
            message= _ "We must block the human advance!"
        [/message]

        [gold]
            side=3
            amount=80
        [/gold]
    [/event]

    [event]
        name=die
        [filter]
            id=Tan-Gagar
        [/filter]

        [filter_second]
            side=1
        [/filter_second]

        [message]
            speaker=Tan-Erirt
            message= _ "Reserves! We can’t let them get to their landing site."
        [/message]

        [gold]
            side=2
            amount=80
        [/gold]
    [/event]

    [event]
        name=enemies defeated

        [message]
            speaker=Prince Haldric
            message= _ "We’ve defeated their vanguard. We have to meet the fleet before Jevyan destroys them and captures the ships. I hope Jessene makes it back soon."
        [/message]

        {CLEAR_VARIABLE side_2_undead_backup_triggered,side_3_undead_backup_triggered,side_4_undead_backup_triggered,undead_spawns_so_far}

        [endlevel]
            result=victory
            bonus=yes
            {NEW_GOLD_CARRYOVER 40}
        [/endlevel]
    [/event]

    [event]
        name=last breath
        [filter]
            id=Commander Aethyr
        [/filter]

        [message]
            speaker=Commander Aethyr
            message= _ "Oh, to join my family again! Do not mourn my passing."
        [/message]

        [endlevel]
            result=defeat
        [/endlevel]
    [/event]

    [event]
        name=attack
        [filter]
            id=Burin the Lost
        [/filter]

        [message]
            speaker=Burin the Lost
            message= _ "Ahh, it’s great to be home! I’m not much for the politics, but it’s great to be home!"
        [/message]
    [/event]
[/scenario]
