#textdomain wesnoth-sof
[scenario]
    name= _ "Outriding the Outriders"
    id=7_Outriding_the_Outriders
    turns=12
    map_data="{campaigns/Sceptre_of_Fire/maps/7_Outriding_the_Outriders.map}"
    next_scenario=8_The_Dragon
    victory_when_enemies_defeated=no
    disallow_recall=yes

    {SCENARIO_MUSIC "vengeful.ogg"}

    {DEFAULT_SCHEDULE}

    [side]
        id=Alanin
        type=Dragoon
        save_id=Rugnur
        side=1
        canrecruit=yes
        controller=human
        shroud=yes
        fog=yes
        gold=0
        income=-2
        village_gold=0
        {FLAG_VARIANT loyalist}
        team_name=alanin
        user_team_name= _ "Alanin"
    [/side]

    [side]
        no_leader=yes
        side=2
        [ai]
            [goal]
                name=target
                [criteria]
                    id=Alanin
                [/criteria]
                value=1
            [/goal]
            [goal]
                name=target
                [criteria]
                    type=Bowman,Spearman
                [/criteria]
                value=0.1
            [/goal]
            [avoid]
                terrain=*^V*
            [/avoid]
            village_value=0
            aggression=1.0
            caution=0
            grouping=no
        [/ai]
        team_name=elves
        user_team_name= _ "Elves"
        {FLAG_VARIANT wood-elvish}
    [/side]

    [story]
        [part]
            story= _ "Rugnur had fled across the Arkan-thoria, but Alanin could not do that. He went south — back to the Wesnoth border."
        [/part]
        [part]
            story= _ "The elves followed both of them. First I will tell of their pursuit of Alanin, before we descend into the caves to learn Rugnur’s fate."
        [/part]
    [/story]

    {SOF_TRACK {JOURNEY_07_NEW} }

    [event]
        name=prestart

        [unhide_unit]
        [/unhide_unit]

        [disallow_recruit]
            side=1
        [/disallow_recruit]

        [objectives]
            side=1
            [objective]
                description= _ "Reach the Wesnothian outpost in the south"
                condition=win
            [/objective]
            [objective]
                description= _ "Death of Alanin"
                condition=lose
            [/objective]

            {TURNS_RUN_OUT}

            [gold_carryover]
                carryover_percentage=0
            [/gold_carryover]
        [/objectives]
    [/event]

    [event]
        name=start
        [message]
            speaker=Alanin
            message= _ "Well, the elves are behind me for now, but they will send riders to catch me, and elvish riders are faster than me."
        [/message]
        [message]
            speaker=Alanin
            message= _ "My only hope is to convince the peasants to stop the elves from passing through their land, so I can get ahead of them."
        [/message]

        [unit]
            type=Elvish Outrider
            id=Asaeri
            name= _ "Lord Asaeri"
            x,y=18,1
            side=2
            [modifications]
                {TRAIT_STRONG}
                {TRAIT_DEXTROUS}
            [/modifications]
        [/unit]
        [unit]
            type=Elvish Outrider
            id=Gaelir
            name= _ "Gaelir"
            x,y=18,1
            side=2
            [modifications]
                {TRAIT_QUICK}
                {TRAIT_DEXTROUS}
            [/modifications]
        [/unit]
        [unit]
            type=Elvish Outrider
            id=Salira
            name= _ "Salira"
            x,y=18,1
            side=2
            facing=sw
            [modifications]
                {TRAIT_STRONG}
                {TRAIT_QUICK}
            [/modifications]
        [/unit]
        [unit]
            type=Elvish Outrider
            id=Losnin
            name= _ "Losnin"
            x,y=18,1
            side=2
            facing=sw
            [modifications]
                {TRAIT_STRONG}
                {TRAIT_RESILIENT}
            [/modifications]
        [/unit]
        [unit]
            type=Elvish Outrider
            id=Ealin
            name= _ "Ealin"
            x,y=18,1
            side=2
            facing=sw
            [modifications]
                {TRAIT_QUICK}
                {TRAIT_RESILIENT}
            [/modifications]
        [/unit]
        [scroll_to]
            x,y=18,1
        [/scroll_to]
        [message]
            speaker=Asaeri
            # wmllint: local spelling outride
            message= _ "You cannot outride us, horseman of Wesnoth! Whatever message you are carrying, it will not be delivered!"
        [/message]
        [message]
            speaker=Alanin
            message= _ "We shall see about that!"
        [/message]
    [/event]

    [event]
        name=turn 2
        [unit]
            type=Elvish Outrider
            id=Raesil
            name= _ "Raesil"
            x,y=18,1
            side=2
            [modifications]
                {TRAIT_QUICK}
                {TRAIT_RESILIENT}
            [/modifications]
        [/unit]
    [/event]

    # More outriders will come if there are too few of them
    [event]
        name=die
        first_time_only=yes
        [filter]
            side=2
        [/filter]
        [filter_condition]
            [have_unit]
                side=2
                count=0-2
            [/have_unit]
        [/filter_condition]

        [message]
            speaker=second_unit
            message= _ "Great, now there is no need to worry about those elves anymore!"
        [/message]

        [fire_event]
            name=reinforcements
        [/fire_event]

        [message]
            role=newcomer
            message= _ "Did you really think that you could escape us? Don’t underestimate us, inferior humans!"
            scroll=no
        [/message]

        [if]
            [have_unit]
                side=1
                count=1
            [/have_unit]
            [then]
                [message]
                    id=Alanin
                    message= _ "Even though my chances have grown worse, I have to fulfil my duty. I do not owe them any less!"
                [/message]
            [/then]
            [else]
                [role]
                    role=fighter
                    id=$second_unit.id
                    [not]
                        id=Alanin
                    [/not]
                    search_recall_list=no
                    [else]
                        [role]
                            role=fighter
                            side=1
                            [not]
                                id=Alanin
                            [/not]
                            search_recall_list=no
                        [/role]
                    [/else]
                [/role]

                [message]
                    id=Alanin
                    message= _ "Oh no, more of them? And there I thought I could catch my breath…"
                [/message]

                [message]
                    role=fighter
                    message= _ "Don’t worry sir, we’ll make it through this!"
                [/message]
            [/else]
        [/if]

        # Fire the event the next time with different dialog
        [event]
            name=die
            first_time_only=no
            [filter]
                side=2
            [/filter]
            [filter_condition]
                [have_unit]
                    side=2
                    count=0-2
                [/have_unit]
            [/filter_condition]

            [fire_event]
                name=reinforcements
            [/fire_event]

            [message]
                id=Alanin
                message= _ "Is there no end to their numbers?"
            [/message]
        [/event]
    [/event]

    [event]
        name=reinforcements
        first_time_only=no

        [store_unit]
            [filter]
                id=Alanin
            [/filter]
            variable=alanin
        [/store_unit]

        # In order to put pressure, the outriders will be spawned 12 hexes
        # north from Alanin. 12 hexes ensure that not even a quick Elvish
        # Outrider (11 MP) can reach Alanin in one turn.
        # Anyway, the "y" is set between 1 and 60 by the Formula, because
        # null or negative values would break the code, and because beyond
        # "y=60" there is the human outpost.
        [store_locations]
            terrain=Rd
            [or]
                terrain=Wwf
            [/or]
            [and]
                y="$(min([$(max([($alanin.y - 12), 1])), 60]))"
            [/and]
            variable=outriders_loc
        [/store_locations]

        [move_unit_fake]
            type=Elvish Outrider
            side=2
            x=18,$outriders_loc[0].x
            y= 1,$outriders_loc[0].y
        [/move_unit_fake]

        {GENERIC_UNIT 2 "Elvish Outrider" $outriders_loc[0].x $outriders_loc[0].y}
        [+unit]
            role=newcomer
        [/unit]
        {GENERIC_UNIT 2 "Elvish Outrider" $outriders_loc[0].x $outriders_loc[0].y}
        {GENERIC_UNIT 2 "Elvish Outrider" $outriders_loc[0].x $outriders_loc[0].y}
        {GENERIC_UNIT 2 "Elvish Outrider" $outriders_loc[0].x $outriders_loc[0].y}

        {CLEAR_VARIABLE alanin,outriders_loc}

        [lift_fog]
            [filter]
                role=newcomer
            [/filter]
            radius=1
        [/lift_fog]
    [/event]

    [event]
        name=capture
        [filter]
            id=Alanin
        [/filter]
        [message]
            speaker=Alanin
            message= _ "The villagers here are loyal to Wesnoth. They should be willing to help me escape these elves!"
        [/message]
        [unit]
            type=Spearman
            id=Rolin    # wmllint: ignore
            name= _ "Rolin"
            x,y=$x1,$y1
            side=1
            random_traits=yes
            [modifications]
                {TRAIT_LOYAL}
            [/modifications]
            {IS_LOYAL}
        [/unit]
        [message]
            speaker=Rolin   # wmllint: ignore
            message= _ "We will certainly help any warrior of Wesnoth who needs our help!"
        [/message]
    [/event]

    [event]
        name=capture
        first_time_only=no
        [filter]
            id=Alanin
        [/filter]

        {RANDOM "Spearman,Bowman"}

        [unit]
            type=$random
            generate_name=yes
            x,y=$x1,$y1
            side=1
            random_traits=yes
            [modifications]
                {TRAIT_LOYAL}
            [/modifications]
            {IS_LOYAL}
        [/unit]

        {RANDOM "Spearman,Bowman"}

        [unit]
            type=$random
            generate_name=yes
            x,y=$x1,$y1
            side=1
            random_traits=yes
            [modifications]
                {TRAIT_LOYAL}
            [/modifications]
            {IS_LOYAL}
        [/unit]

        {CLEAR_VARIABLE random}
    [/event]

    [event]
        name=time over

        [message]
            race=elf
            message= _ "You slow humans took too long, our detachment has already caught up with you!"
            scroll=no
        [/message]

        [delay]
            time=700
        [/delay]

        [store_unit]
            [filter]
                id=Alanin
            [/filter]
            variable=alanin
        [/store_unit]

        # find a location
        [if]
            [variable]
                name=alanin.x
                greater_than=12
            [/variable]
            [then]
                {VARIABLE spawn.x 24}
            [/then]
            [else]
                {VARIABLE spawn.x 1}
            [/else]
        [/if]

        {VARIABLE spawn.y "$($alanin.y+2)"}

        # make sure it's not in the water
        [store_locations]
            variable=spawn_hexes
            include_borders=no
            [not]
                terrain=W*^*,A*^*
            [/not]
            x=$spawn.x
            [and]
                y=$spawn.y
                radius=2
                # this [and] is not redundant, due to the way radius works
            [/and]
        [/store_locations]

        [unit]
            id=ambusher
            side=2
            type=Elvish Outrider
            x=$spawn_hexes[0].x
            y=$spawn_hexes[0].y
            [modifications]
                {TRAIT_QUICK}
            [/modifications]
        [/unit]

        [move_unit]
            id=ambusher
            x=$spawn_hexes[0].x
            y=$spawn_hexes[0].y
            to_x=$alanin.x
            to_y=$alanin.y
        [/move_unit]

        # to avoid scrolling between the killing animation and the [kill]
        [scroll_to]
            x=$alanin.x
            y=$alanin.y
        [/scroll_to]

        [animate_unit]
            [filter]
                id=ambusher
            [/filter]
            flag=attack
            hits=yes
            with_bars=yes
            [primary_attack]
                range=ranged
            [/primary_attack]
            [facing]
                x=$alanin.x
                y=$alanin.y
            [/facing]

            [animate]
                [filter]
                    id=Alanin
                [/filter]
                flag=defend
                hits=yes
                with_bars=no
                [facing]
                    [filter]
                        id=ambusher
                    [/filter]
                [/facing]
            [/animate]
        [/animate_unit]
        [kill]
            id=Alanin
            animate=yes
        [/kill]
        {CLEAR_VARIABLE alanin,spawn,spawn_hexes}
    [/event]

    [event]
        name=moveto
        [filter]
            id=Alanin

            [filter_location]
                terrain=Ce,Ket
            [/filter_location]
        [/filter]

        {MODIFY_UNIT id=Alanin profile "portraits/alanin-older.png"}

        [unit]
            type=Lieutenant
            id=Hadlin   # wmllint: ignore
            name= _ "Hadlin"
            x,y=10,63
            side=1
            random_traits=no
            [modifications]
                {TRAIT_LOYAL}
            [/modifications]
            {IS_LOYAL}
        [/unit]
        [message]
            speaker=Hadlin  # wmllint: ignore
            message= _ "Who goes there?"
        [/message]
        [if]
            [variable]
                name=unit.type
                equals=Dragoon
            [/variable]
            [then]
                [message]
                    speaker=Alanin
                    # po: dragoon = his unit type
                    message= _ "I’m a dragoon, with Haldric II’s personal bodyguard. I was sent on a mission in the Northlands, and now elvish horsemen are chasing me. I barely evaded them."
                [/message]
            [/then]
            [else]
                [message]
                    speaker=Alanin
                    # po: cavalier = his unit type
                    message= _ "I’m a cavalier, with Haldric II’s personal bodyguard. I was sent on a mission in the Northlands, and now elvish horsemen are chasing me. I barely evaded them."
                [/message]
            [/else]
        [/if]
        [message]
            speaker=Hadlin  # wmllint: ignore
            message= _ "I see. Well, come on in. I doubt they would be able to capture this fort, even if they did want to start a war, which I doubt."
        [/message]

        [endlevel]
            result=victory
            bonus=no
            {NEW_GOLD_CARRYOVER 100}
            carryover_report=no
        [/endlevel]
    [/event]

    [event]
        name=victory

        [store_unit]
            [filter]
                id=Alanin
            [/filter]
            variable=alanin
            kill=yes
        [/store_unit]
        [kill]
            [not]
                x,y=recall,recall
            [/not]
            side=1
        [/kill]
        [foreach]
            array=dwarves
            [do]
                {VARIABLE this_item.x "recall"}
                {VARIABLE this_item.y "recall"}
                # to heal them
                {VARIABLE this_item.hitpoints ($this_item.max_hitpoints)}
                {VARIABLE this_item.moves ($this_item.max_moves)}
                {VARIABLE this_item.attacks_left ($this_item.max_attacks)}
                {CLEAR_VARIABLE this_item.status.slowed}
                # no need for poisoned and petrified, as Elves do not have units with such abilities

                [unstore_unit]
                    variable=this_item
                [/unstore_unit]
            [/do]
        [/foreach]
        {CLEAR_VARIABLE dwarves}
        {CLEAR_VARIABLE stored_Rugnur_side}
    [/event]
[/scenario]
