#textdomain wesnoth-sof
[scenario]
    name= _ "Closing the Gates"
    id=2_Closing_the_Gates
    turns=15
    map_data="{campaigns/Sceptre_of_Fire/maps/2_Closing_the_Gates.map}"
    next_scenario=2t_In_the_Dwarven_City
    victory_when_enemies_defeated=no

    {SCENARIO_MUSIC battle.ogg}
    {EXTRA_SCENARIO_MUSIC the_city_falls.ogg}

    {DEFAULT_SCHEDULE}

    [side]
        type=Dwarvish Fighter
        id=Rugnur
        side=1
        canrecruit=yes
        shroud=yes
        controller=human
        recruit=Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Guardsman,Dwarvish Scout
        team_name=dwarves
        user_team_name= _ "Dwarves"
        {FLAG_VARIANT knalgan}
    [/side]

    # Give Rugnur control of all the non-boneyard villages inside the cave.
    # Trolls are going to take a couple of these fairly quickly.
    {STARTING_VILLAGES_AREA 1 14 11 3}
    {STARTING_VILLAGES_AREA 1 26 11 6}

    [side]
        type=Elvish Captain
        id=Glindur
        name= _ "Glindur"
        side=2
        canrecruit=yes
        {RECRUIT (Elvish Fighter,Elvish Scout,Elvish Archer,Elvish Shaman) (Elvish Fighter,Elvish Hero,Elvish Scout,Elvish Archer,Elvish Shaman) (Elvish Fighter,Elvish Hero,Elvish Scout,Elvish Archer,Elvish Ranger,Elvish Shaman)}
        {GOLD 200 250 300}
        {INCOME 12 18 24}
        team_name=elves
        user_team_name= _ "Elves"
        {FLAG_VARIANT wood-elvish}
        [ai]
            aggression=1.0
            caution=0.0
        [/ai]
    [/side]

    [side]
        no_leader=yes
        side=3
        team_name=trolls
        user_team_name= _ "Trolls"
    [/side]

    [story]
        [part]
            story= _ "Next in our story, Rugnur retreated into the caves of Knalga. But the elves pressed on, and would enter the caves shortly."
        [/part]
    [/story]

    {SOF_TRACK {JOURNEY_02_NEW} }

    {SOF_DEATHS}

    [event]
        name=prestart

        [objectives]
            side=1
            [objective]
                description= _ "Place someone on each of the six magic glyphs in order to close the dwarvish gates"
                condition=win
                [show_if]
                    {VARIABLE_CONDITIONAL gate_closed boolean_not_equals yes}
                [/show_if]
            [/objective]
            [objective]
                description= _ "Kill all elves in the caves after the gates are closed"
                condition=win
                [show_if]
                    {VARIABLE_CONDITIONAL gate_closed boolean_not_equals yes}
                [/show_if]
            [/objective]
            [objective]
                description= _ "Kill all elves in the caves"
                condition=win
                [show_if]
                    {VARIABLE_CONDITIONAL gate_closed boolean_equals yes}
                [/show_if]
            [/objective]
            [objective]
                description= _ "Death of Rugnur"
                condition=lose
            [/objective]
            [objective]
                description= _ "Death of Baglur"
                condition=lose
            [/objective]

            {TURNS_RUN_OUT}

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

        [kill]
            side=1
            type=Caravan
        [/kill]

        # stores all the locations outside the gate into an array, so checks for
        # whether there are units still outside don't require maintaining a
        # static set of coordinates
        [store_locations]
            x,y=10,20
            radius=20

            [filter_radius]
                [not]
                    terrain=X*
                [/not]

                [not]
                    x=12,13,14
                    y=12,13,13
                [/not]

                [not]
                    x=2,21
                    y=6,24
                [/not]
            [/filter_radius]

            variable=locations_outside
        [/store_locations]

        [remove_shroud]
            find_in=locations_outside
            side=1
        [/remove_shroud]

        {GENERIC_UNIT 3 "Troll Whelp" 8 3} {GUARDIAN}
        {GENERIC_UNIT 3 "Troll Whelp" 5 4} {GUARDIAN}
        {GENERIC_UNIT 3 "Troll Whelp" 10 5} {GUARDIAN}

        {GENERIC_UNIT 3 "Troll Whelp" 27 21} {GUARDIAN}
        {GENERIC_UNIT 3 "Troll Whelp" 25 23} {GUARDIAN}
        {GENERIC_UNIT 3 "Troll Whelp" 25 20} {GUARDIAN}

#ifdef HARD
        {GENERIC_UNIT 3 "Troll Whelp" 7 6} {GUARDIAN}
        {GENERIC_UNIT 3 "Troll Whelp" 27 23} {GUARDIAN}
#endif
#ifdef NORMAL
        {GENERIC_UNIT 3 "Troll Whelp" 27 23} {GUARDIAN}
#endif

        [set_variables]
            name=glyphs

            [value]
                x,y=9,11
                image_off=scenery/rune1.png
                image_on=scenery/rune1-glow.png
            [/value]
            [value]
                x,y=14,3
                image_off=scenery/rune2.png
                image_on=scenery/rune2-glow.png
            [/value]
            [value]
                x,y=30,19
                image_off=scenery/rune3.png
                image_on=scenery/rune3-glow.png
            [/value]
            [value]
                x,y=17,15
                image_off=scenery/rune4.png
                image_on=scenery/rune4-glow.png
            [/value]
            [value]
                x,y=3,5
                image_off=scenery/rune1.png
                image_on=scenery/rune1-glow.png
                toggles_x=2
                toggles_y=6
            [/value]
            [value]
                x,y=23,24
                image_off=scenery/rune2.png
                image_on=scenery/rune2-glow.png
                toggles_x=21
                toggles_y=24
            [/value]
        [/set_variables]

        [foreach]
            array=glyphs
            [do]
                [item]
                    x,y=$this_item.x,$this_item.y
                    image=$this_item.image_off
                [/item]
            [/do]
        [/foreach]
    [/event]

    [event]
        name=start
        {MOVE_UNIT id=Rugnur 22 12}
        [recall]
            id=Alanin
        [/recall]
        [redraw]
            side=1
        [/redraw]
        [message]
            speaker=Rugnur
            message= _ "These elves are right behind me! We have to go warn the council of this attack...!"
        [/message]
        [message]
            speaker=Alanin
            message= _ "Here — I’ll go warn the council. You stay here and fight."
        [/message]
        [message]
            speaker=Rugnur
            message= _ "Yes, that sounds good. I’ll stay here and try to defend the gates..."
        [/message]
        {MOVE_UNIT id=Alanin 32 12}
        [store_unit]
            [filter]
                id=Alanin
            [/filter]
            variable=changealanin
            kill=yes
        [/store_unit]
        [message]
            speaker=Glindur
            message= _ "I see you have sent a messenger to the city. Good idea, but will it really help? We have more troops and more provisions, and we are going to enter those caves and kill you!"
        [/message]
        [message]
            speaker=Rugnur
            message= _ "(<i>Gulp</i>)"
        [/message]
        [message]
            speaker=Glindur
            message= _ "Ha! I thought as much. Well then, surrender!"
        [/message]
        [message]
            speaker=Rugnur
            message= _ "Um... on what terms?"
        [/message]
        [message]
            speaker=Glindur
            message= _ "Unconditional."
        [/message]

        {GENERIC_UNIT 1 "Dwarvish Guardsman" 10 13}
        {GENERIC_UNIT 1 "Dwarvish Guardsman" 14 15}
        {GENERIC_UNIT 1 "Dwarvish Guardsman" 12 11}
        {GENERIC_UNIT 1 "Dwarvish Guardsman" 15 13}

#ifdef EASY
        {GENERIC_UNIT 1 "Dwarvish Guardsman" 12 14}
#endif
        [unit]
            x,y=22,11
            type=Dwarvish Stalwart
            side=1
            id=Baglur
            name= _ "Baglur"
            unrenamable=yes
            {IS_HERO}
            profile=portraits/baglur.png
            facing=sw
            [modifications]
                {TRAIT_LOYAL}
                {TRAIT_RESILIENT}
            [/modifications]
        [/unit]

        [redraw]
            side=1
        [/redraw]

        [message]
            speaker=Baglur
            message= _ "Wait! Rugnur, dinna’ they tell you <i>anything</i> when you took command here?!"
        [/message]
        [message]
            speaker=Rugnur
            message= _ "Not really. This was supposedly a time of peace. Who are you?"
        [/message]
        [message]
            speaker=Baglur
            message= _ "Argh! I’m a retired warrior... it looks like I’ll ha’ to come out and help you, else we’ll be overrun by the damn elves... argh again. Well, listen here. This entrance to the city can be closed. There’s a gate. If we can close it, the elves will no’ be able to enter. And you elves; begone from here!"
        [/message]
        [message]
            speaker=Glindur
            message= _ "Cease your meddling, old dwarf! Rugnur is in charge here, and it is he who will bargain with us."
        [/message]
        [message]
            speaker=Rugnur
            message= _ "Baglur, how do you close the gates?"
        [/message]
        [message]
            speaker=Baglur
            message= _ "Och, well that’s the difficulty. It’s a magic gate. Indestructible. But that means it can only be closed by magic. Ye need to position a warrior on each of the six glyphs. When all are occupied, the gates wi’ close. Then the elves will be shut out of the caves forever, at least through this entrance."
        [/message]
        [message]
            speaker=Rugnur
            message= _ "Don’t we have troops positioned near these glyphs, to unlock them?"
        [/message]
        [message]
            speaker=Baglur
            message= _ "Och, well, no. Lately trolls have been more in charge of those caves where the glyphs are than we dwarves have."
        [/message]
        [message]
            speaker=Rugnur
            message= _ "Well, where are they located?"
        [/message]
        [message]
            speaker=Baglur
            message= _ "Two are down a side passage in the northwest, another two are in a similar location in the southeast, and two are right next to the front gate."
        [/message]
        [message]
            speaker=Glindur
            message= _ "Have you made up your mind yet about surrendering? If you will not give up, prepare for battle!"
        [/message]
        [message]
            speaker=Rugnur
            # wmllint: local spelling stonecraft
            message= _ "You may be more powerful than us, but I doubt even you can blast through dwarf-made stonecraft. We refuse — now let’s close these gates!"
        [/message]
    [/event]

    # These macros toggle a glyph on the given location on or off
#define GLYPH_ON X Y
    [foreach]
        array=glyphs
        [do]
            [if]
                [variable]
                    name=this_item.x
                    numerical_equals={X}
                [/variable]
                [variable]
                    name=this_item.y
                    numerical_equals={Y}
                [/variable]

                [then]
                    [remove_item]
                        x,y={X},{Y}
                        image=$this_item.image_off
                    [/remove_item]

                    [item]
                        x,y={X},{Y}
                        image=$this_item.image_on
                    [/item]

                    [if]
                        [variable]
                            name=this_item.toggles_x
                            not_equals=$empty
                        [/variable]

                        [then]
                            [sound]
                                name=rumble.ogg
                            [/sound]

                            [terrain]
                                x,y=$this_item.toggles_x,$this_item.toggles_y
                                terrain=Xu
                            [/terrain]
                        [/then]
                    [/if]
                [/then]
            [/if]
        [/do]
    [/foreach]
#enddef
#define GLYPH_OFF X Y
    [foreach]
        array=glyphs
        [do]
            [if]
                [variable]
                    name=this_item.x
                    numerical_equals={X}
                [/variable]
                [variable]
                    name=this_item.y
                    numerical_equals={Y}
                [/variable]

                [then]
                    [remove_item]
                        x,y={X},{Y}
                        image=$this_item.image_on
                    [/remove_item]

                    [item]
                        x,y={X},{Y}
                        image=$this_item.image_off
                    [/item]

                    [if]
                        [variable]
                            name=this_item.toggles_x
                            not_equals=$empty
                        [/variable]

                        [then]
                            [sound]
                                name=rumble.ogg
                            [/sound]

                            [terrain]
                                x,y=$this_item.toggles_x,$this_item.toggles_y
                                terrain=Cud
                            [/terrain]
                        [/then]
                    [/if]
                [/then]
            [/if]
        [/do]
    [/foreach]
#enddef

    # Northern and southern side entrances, shown the first time one of the glyphs near them is activated

    [event]
        name=moveto
        [filter]
            x=3,23
            y=5,24
            side=1
        [/filter]
        [message]
            speaker=unit
            message= _ "But what about this entrance? The elves can come through it just as easily as the main gate, and it cannot be closed!"
        [/message]
        [message]
            speaker=Baglur
            message= _ "I think it can be sealed up somehow... Yes, look, activating that glyph seems to have closed up the gap."
        [/message]
    [/event]

    # Check for all glyph activators in place

    [event]
        name=moveto
        first_time_only=no

        [filter]
            side=1

            [filter_location]
                find_in=glyphs
            [/filter_location]
        [/filter]

        [filter_condition]
            [variable]
                name=gate_closed
                boolean_equals=no
            [/variable]
        [/filter_condition]

        {GLYPH_ON $x1 $y1}

        [if]
            [have_unit]
                side=1

                [filter_location]
                    find_in=glyphs
                [/filter_location]

                count=6
            [/have_unit]

            [then]
                {VARIABLE gate_closed yes}

                [message]
                    speaker=Rugnur
                    message= _ "We have everyone positioned on the glyphs! What do we do now?"
                [/message]
                [if]
                    [have_unit]
                        [filter_location]
                            find_in=locations_outside
                        [/filter_location]
                        side=1
                    [/have_unit]
                    [then]
                        [message]
                            speaker=Baglur
                            message= _ "Just watch. The gates wi’ close very soon. Then the elves outside — and, unfortunately, our dwarves who are still out there — wi’ become irrelevant."
                        [/message]
                    [/then]
                    [else]
                        [message]
                            speaker=Baglur
                            # po: all the dwarves are inside, although there might still be some elves inside too
                            message= _ "Just watch. The gates wi’ close very soon. Then the elves outside wi’ become irrelevant."
                        [/message]
                    [/else]
                [/if]

                [scroll_to]
                    x,y=13,13
                [/scroll_to]

                [sound]
                    name=rumble.ogg
                [/sound]

                [terrain]
                    x=12,13,14
                    y=12,13,13
                    terrain=^Xo
                    layer=overlay
                [/terrain]

                [redraw][/redraw]

                [kill]
                    x=12,13,14
                    y=12,13,13
                    animate=yes
                    fire_event=yes
                [/kill]

                [delay]
                    time=2000
                [/delay]

                [message]
                    speaker=Glindur
                    message= _ "Agh! Well, you have defeated me for now, but eventually you will have to exit these caves, to give Haldric back his jewel. And when you do, we will be ready for you."
                [/message]
                [message]
                    speaker=Baglur
                    message= _ "If that is what ye choose to do, fine, but be prepared to wait for many years."
                [/message]

                [kill]
                    [filter_location]
                        find_in=locations_outside
                    [/filter_location]
                    side=1
                    fire_event=yes
                    animate=yes
                [/kill]

                [kill]
                    [filter_location]
                        find_in=locations_outside
                    [/filter_location]
                    side=2,3
                    fire_event=no
                [/kill]

                [place_shroud]
                    find_in=locations_outside
                    [not]
                        x=10,   11,   12,   13,   14
                        y=13,13-14,13-14,14-15,14-15
                    [/not]
                    side=1
                [/place_shroud]
                [if]
                    [have_unit]
                        side=2
                    [/have_unit]
                    [then]
                        [message]
                            speaker=Rugnur
                            message= _ "There are still some elves left in here. We have to eliminate them, too, unless they surrender."
                        [/message]
                        [message]
                            side=2
                            message= _ "You would have us be cowards! We do not surrender."
                        [/message]

                        [show_objectives]
                        [/show_objectives]
                    [/then]
                    [else]
                        [message]
                            speaker=Rugnur
                            message= _ "Well, now I should go down to the city and report. I’m late already..."
                        [/message]
                        [endlevel]
                            result=victory
                            bonus=yes
                            {NEW_GOLD_CARRYOVER 40}
                        [/endlevel]
                    [/else]
                [/if]
            [/then]
            [else]
                [message]
                    speaker=unit
                    message= _ "My glyph is on."
                [/message]

                [allow_undo]
                [/allow_undo]
            [/else]
        [/if]
    [/event]

    # Toggles a glyph off when the player steps off it
    [event]
        name=moveto
        first_time_only=no

        [filter]
            side=1

            [filter_location]
                [not]
                    find_in=glyphs
                [/not]
            [/filter_location]
        [/filter]

        [filter_condition]
            [variable]
                name=gate_closed
                boolean_equals=no
            [/variable]

            [have_location]
                x,y=$x2,$y2
                find_in=glyphs
            [/have_location]
        [/filter_condition]

        {GLYPH_OFF $x2 $y2}
    [/event]

    # Toggles a glyph off when the player unit on it dies
    [event]
        name=die
        first_time_only=no

        [filter]
            side=1

            [filter_location]
                find_in=glyphs
            [/filter_location]
        [/filter]

        [filter_condition]
            [variable]
                name=gate_closed
                boolean_equals=no
            [/variable]
        [/filter_condition]

        {GLYPH_OFF $x1 $y1}
    [/event]

    # This triggers either when the remaining elves in the caves after the gate
    # is closed are killed or when all elves are killed before the gate is
    # closed (unlikely)
    [event]
        name=die
        first_time_only=no

        [filter]
            side=2
        [/filter]

        [if]
            [not]
                [have_unit]
                    side=2

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

            [then]
                [message]
                    speaker=Rugnur
                    message= _ "That’s all of the elves. Now I should go down to the city and report. I’m late already..."
                [/message]

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

    [event]
        name=scenario_end

        {CLEAR_VARIABLE glyphs,glyph_i,locations_outside,gate_closed}
    [/event]

    [event]
        name=die
        [filter]
            id=Baglur
        [/filter]
        [endlevel]
            result=defeat
        [/endlevel]
    [/event]

    # These handle the graphics for the gate. Normally, the gate is drawn in the
    # "down" position, and after the impassable overlay ^Xo has been placed on
    # the gate, an animated version will be drawn, displaying the gate closing.
    # The map= and images are drawn relative to 11,11.
    [terrain_graphics]
        x,y=11,11

        map="
*,  *,  *
, *,  *,  *
*,  *,  *
, 1,  *,  *
*,  2,  *
, *,  3,  *
*,  *,  *
, *,  *,  *"

        [tile]
            pos=1
            x,y=1,1
            type=!,*^Xo
        [/tile]
        [tile]
            pos=2
            x,y=2,2
            type=!,*^Xo
        [/tile]
        [tile]
            pos=3
            x,y=3,2
            type=!,*^Xo
        [/tile]

        [image]
            name=gate-left-down.png
            base=90,144
        [/image]
        [image]
            name=gate-middle-down.png
            base=144,180
        [/image]
        [image]
            name=gate-right-down.png
            base=196,216
        [/image]
    [/terrain_graphics]

    [terrain_graphics]
        x,y=11,11

        map="
*,  *,  *
, *,  *,  *
*,  *,  *
, 1,  *,  *
*,  2,  *
, *,  3,  *
*,  *,  *
, *,  *,  *"

        [tile]
            pos=1
            x,y=1,1
            type=*^Xo
        [/tile]
        [tile]
            pos=2
            x,y=2,2
            type=*^Xo
        [/tile]
        [tile]
            pos=3
            x,y=3,2
            type=*^Xo
        [/tile]

        # Technically, these animations loop, but only about once per 15 minutes
        # so the user should see the loop very rarely.
        [image]
            name=gate-left-rising-1.png:500,gate-left-rising-2.png:500,gate-left-rising-3.png:500,gate-left-up.png:50000,gate-left-up.png:50000,gate-left-up.png:50000,gate-left-up.png:50000
            base=90,144
        [/image]
        [image]
            name=gate-middle-rising-1.png:500,gate-middle-rising-2.png:500,gate-middle-rising-3.png:500,gate-middle-up.png:50000,gate-middle-up.png:50000,gate-middle-up.png:50000,gate-middle-up.png:50000
            base=144,180
        [/image]
        [image]
            name=gate-right-rising-1.png:500,gate-right-rising-2.png:500,gate-right-rising-3.png:500,gate-right-up.png:50000,gate-right-up.png:50000,gate-right-up.png:50000,gate-right-up.png:50000
            base=196,216
        [/image]
    [/terrain_graphics]
[/scenario]

#undef GLYPH_ON
#undef GLYPH_OFF
