#textdomain wesnoth-ei
[scenario]
    id=08_Training_the_Ogres
    name= _ "Capturing the Ogres"
    next_scenario=09_Xenophobia
    map_data="{campaigns/Eastern_Invasion/maps/08_Training_the_Ogres.map}"
    victory_when_enemies_defeated=no
    turns=unlimited
    {NORTHERN_SCHEDULE}

    {INTRO_AND_SCENARIO_MUSIC revelation.ogg traveling_minstrels.ogg}
    {EXTRA_SCENARIO_MUSIC journeys_end.ogg}

    {EI_TRACK {JOURNEY_08_NEW} }

#define MAP_EDGES_SLF
    [filter_adjacent_location]
        count=1-5
    [/filter_adjacent_location]
#enddef

    # wmllint: validate-off
    [side]
        side=1
        controller=human
        gold=100
        team_name=good
        user_team_name= _ "Wesnothians"
        {FLAG_VARIANT loyalist}

        # wmllint: recognize Gweddry
        {CHARACTER_STATS_GWEDDRY}
    [/side]
    # wmllint: validate-on

    [side]
        side=2
        controller=ai
        no_leader=yes
        team_name=ogres
        user_team_name=_"Ogres"
        [ai]
            aggression=1.0

            {MODIFY_AI_ADD_CANDIDATE_ACTION 2 main_loop (
                [candidate_action]
                    engine=lua
                    name=ogres_flee
                    id=ogres_flee
                    max_score=110000
                    location="campaigns/Eastern_Invasion/ai/ca_ogres_flee.lua"
                [/candidate_action]
            )}
        [/ai]
    [/side]

    [event]
        name=prestart

        {SCATTER_UNITS {ON_DIFFICULTY 8 7 6} "Ogre" 0 (
            x=18-24
            y=11-14
            [not]
                [filter]
                [/filter]
            [/not]
        ) (
            side=2
            generate_name=yes
            random_traits=yes
        )}

        [objectives]
            side=1
            [objective]
                description= _ "Capture as many ogres as you can" + "<span foreground='white'> <small>" + _"(captured ogres will be made available for recall)" + "</small></span>"
                condition=win
                show_turn_counter=yes
            [/objective]
            [objective]
                description= _ "Death of Gweddry"
                condition=lose
            [/objective]
            [objective]
                description= _ "Death of Dacyn"
                condition=lose
            [/objective]
            [objective]
                description= _ "Death of Owaec"
                condition=lose
            [/objective]

            [note]
                description= _ "An ogre is captured when it starts a turn being unable to move more than one hex."
            [/note]
            [note]
                description= _ "If an ogre reaches the edge of the map, it will escape."
            [/note]

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

    [event]
        name=start

        [recall]
            id=Dacyn
            x,y=20,19
        [/recall]
        [recall]
            id=Owaec
            x,y=22,19
        [/recall]

        [message]
            speaker=Gweddry
            message= _ "Look, this valley is inhabited by a tribe of ogres. We should try to capture some to train."
        [/message]
        [message]
            race=ogre
            message= _ "Humans are coming! Run!"
        [/message]
        [message]
            speaker=Owaec
            message= _ "Looks like they are fleeing. I think they will surrender easily if we can surround them."
        [/message]
        [message]
            speaker=Dacyn
            message= _ "All right, we have to capture them one by one."
        [/message]
    [/event]

    [event]
        name=moveto
        first_time_only=no

        [filter]
            race=ogre
            [filter_location]
                {MAP_EDGES_SLF}
            [/filter_location]
        [/filter]

        [set_variables]
            name=ogre_escape_msgs

            [value]
                message= _ "Waah! Run!" # wmllint: no spellcheck
            [/value]

            [value]
                message= _ "Run for your lives!"
            [/value]

            [value]
                message= _ "Help!"
            [/value]
        [/set_variables]

        [if]
            [variable]
                name=next_ogre_escape_msg
                equals=$empty
            [/variable]

            [then]
                {VARIABLE next_ogre_escape_msg 0}
            [/then]

            [else]
                {VARIABLE_OP next_ogre_escape_msg add 1}
                {VARIABLE_OP next_ogre_escape_msg modulo $ogre_escape_msgs.length}
            [/else]
        [/if]

        [message]
            speaker=unit
            message=$ogre_escape_msgs[$next_ogre_escape_msg].message
        [/message]

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

        {CLEAR_VARIABLE ogre_escape_msgs}
    [/event]

    [event]
        name=moveto

        [filter]
            race=ogre
            [filter_location]
                {MAP_EDGES_SLF}
            [/filter_location]
        [/filter]

        [message]
            speaker=Gweddry
            message= _ "We have let one escape. Let’s hope they don’t all!"
        [/message]
    [/event]

    [event]
        name=side 2 turn
        first_time_only=no

        # This stores all ogres which have no free adjacent locations which
        # aren't adjacent to a side 1 unit; that is, the ones which are
        # ZoC-trapped so that they can't move more than one hex.
        [store_unit]
            [filter]
                side=2

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

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

                            [not]
                                terrain=*^X*
                            [/not]
                        [/filter_adjacent_location]
                    [/not]
                [/filter_location]
            [/filter]

            kill=no
            variable=ogres_to_capture
        [/store_unit]

        [foreach]
            array=ogres_to_capture
            [do]
                {VARIABLE ogre_name $this_item.name}

                [set_variables]
                    name=ogre_capture_msgs

                    [value]
                        message= _ "$ogre_name surrender!"
                    [/value]

                    [value]
                        message= _ "Don't hurt $ogre_name|!"
                    [/value]

                    [value]
                        message= _ "$ogre_name will be good! Promise!"
                    [/value]
                [/set_variables]

                [if]
                    [variable]
                        name=next_ogre_capture_msg
                        equals=$empty
                    [/variable]

                    [then]
                        {VARIABLE next_ogre_capture_msg 0}
                    [/then]

                    [else]
                        {VARIABLE_OP next_ogre_capture_msg add 1}
                        {VARIABLE_OP next_ogre_capture_msg modulo $ogre_capture_msgs.length}
                    [/else]
                [/if]

                [message]
                    x,y=$this_item.x,$this_item.y
                    message=$ogre_capture_msgs[$next_ogre_capture_msg].message
                [/message]

                [kill]
                    x,y=$this_item.x,$this_item.y
                [/kill]

                {VARIABLE this_item.side 1}

                [unstore_unit]
                    variable=this_item
                    x,y=recall,recall
                [/unstore_unit]
            [/do]
        [/foreach]

        {CLEAR_VARIABLE ogres_to_capture,ogre_name,ogre_capture_msgs}
    [/event]

    [event]
        name=new turn

        [filter_condition]
            [not]
                [have_unit]
                    side=2
                [/have_unit]
            [/not]
        [/filter_condition]

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

    [event]
        name=time over

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

    [event]
        name=victory

        [store_unit]
            [filter]
                side=1
                race=ogre
            [/filter]

            kill=no
            variable=ogres
        [/store_unit]

        [switch]
            variable=ogres.length

            [case]
                value=0

                [message]
                    speaker=Gweddry
                    message= _ "We failed to capture any of them!"
                [/message]
            [/case]

            [case]
                value=1

                [message]
                    speaker=Gweddry
                    message= _ "We only captured one ogre."
                [/message]
            [/case]

            [case]
                value=2

                [message]
                    speaker=Gweddry
                    message= _ "We failed to capture more than two of the ogres."
                [/message]
            [/case]

            [case]
                value=3

                [message]
                    speaker=Gweddry
                    message= _ "We captured three ogres! I hope they will prove useful."
                [/message]
            [/case]

            [else]
                [message]
                    speaker=Gweddry
                    message= _ "We managed to capture many ogres! They will make a good addition to our troops."
                [/message]
            [/else]
        [/switch]

        {CLEAR_VARIABLE ogres,next_ogre_escape_msg,next_ogre_capture_msg}
    [/event]

    {FOREIGN_DEFEAT}

    {HERODEATH_GWEDDRY}
    {HERODEATH_DACYN}
    {HERODEATH_OWAEC}
[/scenario]
