From 0f78003aff73f9d4bd0c7749af18c583178f9880 Mon Sep 17 00:00:00 2001 From: nemaara Date: Wed, 16 Jan 2019 02:20:27 -0500 Subject: [PATCH] DiD S9: updated scenario gameplay and dialogue --- .../scenarios/09_A_Small_Favor3.cfg | 662 ++++++++++++++++-- 1 file changed, 589 insertions(+), 73 deletions(-) diff --git a/data/campaigns/Descent_Into_Darkness/scenarios/09_A_Small_Favor3.cfg b/data/campaigns/Descent_Into_Darkness/scenarios/09_A_Small_Favor3.cfg index 96e150ad6bf9..a2658516aea7 100644 --- a/data/campaigns/Descent_Into_Darkness/scenarios/09_A_Small_Favor3.cfg +++ b/data/campaigns/Descent_Into_Darkness/scenarios/09_A_Small_Favor3.cfg @@ -4,15 +4,15 @@ id=09_A_Small_Favor3 name= _ "A Small Favor — Part 3" map_data="{campaigns/Descent_Into_Darkness/maps/09_A_Small_Favor3.map}" - {TURNS 30 27 25} + {TURNS 21 18 15} next_scenario=10_Alone_at_Last victory_when_enemies_defeated=no {UNDERGROUND} - {SCENARIO_MUSIC underground.ogg} - {EXTRA_SCENARIO_MUSIC loyalists.ogg} - {EXTRA_SCENARIO_MUSIC suspense.ogg} + {SCENARIO_MUSIC the_city_falls.ogg} + {EXTRA_SCENARIO_MUSIC the_king_is_dead.ogg} + {EXTRA_SCENARIO_MUSIC vengeful.ogg} # No storyl; this occurs immediately after the previous scenario @@ -44,18 +44,9 @@ no_leader=yes hidden=yes - # Mages in rooms - {NAMED_NOTRAIT_UNIT 2 Mage 16 15 () ( _ "Guardian")} {GUARDIAN} - {NAMED_NOTRAIT_UNIT 2 Mage 18 15 () ( _ "Guardian")} {GUARDIAN} - {NAMED_NOTRAIT_UNIT 2 Mage 22 13 () ( _ "Guardian")} {GUARDIAN} - {NAMED_NOTRAIT_UNIT 2 Mage 24 12 () ( _ "Guardian")} {GUARDIAN} - {NAMED_NOTRAIT_UNIT 2 Mage 27 10 () ( _ "Guardian")} {GUARDIAN} - {NAMED_NOTRAIT_UNIT 2 Mage 29 10 () ( _ "Guardian")} {GUARDIAN} - - # Mages in great hall - {NAMED_NOTRAIT_UNIT 2 (Silver Mage) 13 8 ("") ( _ "Guardian")} {GUARDIAN} - {NAMED_NOTRAIT_UNIT 2 (Red Mage) 14 9 ("") ( _ "Guardian")} {GUARDIAN} - {NAMED_NOTRAIT_UNIT 2 (White Mage) 16 8 ("") ( _ "Guardian")} {GUARDIAN} + # Book guards + {NAMED_NOTRAIT_UNIT 2 (Silver Mage) 11 9 ("") ( _ "Guardian")} {GUARDIAN} + {NAMED_NOTRAIT_UNIT 2 (Silver Mage) 13 7 ("") ( _ "Guardian")} {GUARDIAN} [ai] village_value=0 @@ -69,6 +60,7 @@ team_name=intruders user_team_name= _ "Intruders" no_leader=yes + color=black hidden=yes shroud=yes share_maps=no @@ -94,12 +86,106 @@ [/goal] [/ai] [/side] + # City guard + [side] + side=4 + controller=ai + team_name=defenders + user_team_name= _ "Defenders" + no_leader=yes + hidden=yes + color=green + [ai] + village_value=0 + aggression=0.8 + [/ai] + [/side] # This macro places the doors and adds the door-opening event {MANOR_DOORS 1,3} - #TODO: Create some scenery (fire, torches, ...) - {PLACE_IMAGE items/book5.png 11 7} + # book + {PLACE_IMAGE items/book5.png 12 8} + + # scenery + + {PLACE_IMAGE items/dragonstatue.png 23 16} + {PLACE_IMAGE items/dragonstatue.png 24 15} + {PLACE_IMAGE items/dragonstatue.png 31 12} + {PLACE_IMAGE scenery/monolith2.png 34 11} + {PLACE_IMAGE scenery/monolith3.png 29 14} + {PLACE_IMAGE scenery/monolith1.png 29 16} + {PLACE_IMAGE scenery/monolith3.png 26 15} + {PLACE_IMAGE scenery/monolith4.png 26 18} + {PLACE_IMAGE scenery/castle-ruins2.png 32 15} + {PLACE_IMAGE scenery/castle-ruins3.png 32 14} + {PLACE_IMAGE scenery/castle-ruins3.png 25 15} + {PLACE_IMAGE scenery/castle-ruins2.png 24 18} + {PLACE_IMAGE scenery/castle-ruins.png 33 4} + {PLACE_IMAGE scenery/castle-ruins3.png 33 3} + {PLACE_IMAGE scenery/castle-ruins2.png 31 5} + {PLACE_IMAGE scenery/castle-ruins2.png 9 11} + {PLACE_IMAGE scenery/castle-ruins.png 8 7} + + {PLACE_IMAGE items/ornate2.png 23 11} + {PLACE_IMAGE items/ornate2.png 25 12} + {PLACE_IMAGE items/ornate1.png 20 13} + {PLACE_IMAGE items/coffin-open.png 22 12} + + {PLACE_IMAGE items/cloak-green.png 11 17} + {PLACE_IMAGE items/armor.png 14 16} + {PLACE_IMAGE items/armor.png 16 16} + {PLACE_IMAGE items/bow.png 30 9} + {PLACE_IMAGE items/bow-crystal.png 29 9} + {PLACE_IMAGE items/spear-fancy.png 27 10} + {PLACE_IMAGE items/axe.png 27 9} + + {PLACE_IMAGE items/potion-blue.png 18 3} + {PLACE_IMAGE items/potion-blue.png 17 6} + {PLACE_IMAGE items/potion-grey.png 17 3} + {PLACE_IMAGE items/potion-grey.png 19 4} + {PLACE_IMAGE items/potion-grey.png 21 5} + {PLACE_IMAGE items/potion-green.png 19 5} + {PLACE_IMAGE items/potion-green.png 22 3} + {PLACE_IMAGE items/potion-red.png 19 3} + {PLACE_IMAGE items/potion-red.png 14 3} + {PLACE_IMAGE items/potion-yellow.png 17 4} + {PLACE_IMAGE items/altar-evil.png 18 4} + {PLACE_IMAGE items/altar.png 14 8} + {PLACE_IMAGE items/holy-water.png 14 9} + {PLACE_IMAGE items/holy-water.png 14 7} + {PLACE_IMAGE items/holy-water.png 15 8} + {PLACE_IMAGE items/holy-water.png 10 8} + {PLACE_IMAGE items/stone-tablet.png 7 11} + {PLACE_IMAGE items/stone-tablet.png 15 10} + + {PLACE_IMAGE items/dragonstatue.png 19 7} + {PLACE_IMAGE scenery/monolith2.png 16 11} + {PLACE_IMAGE scenery/monolith2.png 21 7} + {PLACE_IMAGE scenery/monolith3.png 19 9} + {PLACE_IMAGE scenery/monolith1.png 12 4} + {PLACE_IMAGE scenery/monolith1.png 9 12} + {PLACE_IMAGE scenery/monolith3.png 10 7} + {PLACE_IMAGE scenery/monolith4.png 10 11} + {PLACE_IMAGE scenery/monolith4.png 4 10} + + {PLACE_IMAGE items/barrel.png 29 17} + {PLACE_IMAGE items/barrel.png 28 17} + {PLACE_IMAGE items/barrel.png 28 13} + {PLACE_IMAGE items/barrel.png 22 19} + {PLACE_IMAGE items/barrel.png 21 19} + {PLACE_IMAGE items/barrel.png 29 8} + {PLACE_IMAGE items/barrel.png 30 7} + {PLACE_IMAGE items/barrel.png 14 17} + {PLACE_IMAGE items/barrel.png 34 4} + {PLACE_IMAGE items/barrel.png 23 3} + {PLACE_IMAGE items/box.png 29 13} + {PLACE_IMAGE items/box.png 22 18} + {PLACE_IMAGE items/box.png 13 18} + {PLACE_IMAGE items/box.png 13 17} + {PLACE_IMAGE items/box.png 28 4} + {PLACE_IMAGE items/box.png 27 5} + {PLACE_IMAGE items/box.png 26 5} [event] name=prestart @@ -127,28 +213,156 @@ [/gold_carryover] [/objectives] - # Scatter manor guards - {SCATTER_UNITS 6 Pikeman,Duelist,Pikeman,Spearman,Pikeman,Swordsman 3 ( - terrain=Rr - [not] - x,y=25,18 - radius=4 - [/not] - [not] - x,y=31,15 - radius=2 - [/not] - [not] - x,y=11,7 - [/not] - [not] - [filter][/filter] - [/not] - ) ( - side=2 - name= _ "Guard" - random_traits=yes - )} + [set_variables] + name=guardtypetable + [value] + type=Shock Trooper + [/value] +#ifndef HARD + [value] + type=Spearman + [/value] +#endif + [value] + type=Duelist + [/value] + [value] + type=Pikeman + [/value] + [value] + type=Swordsman + [/value] +#ifndef EASY + [value] + type=Swordsman + [/value] + [value] + type=Pikeman + [/value] + [value] + type=Duelist + [/value] +#endif + [value] + type=Heavy Infantryman + [/value] + [value] + type=Spearman + [/value] + [value] + type=Fencer + [/value] + [/set_variables] + + [set_variables] + name=magetypetable + [value] + type=Mage + [/value] + [value] + type=White Mage + [/value] + [value] + type=Mage + [/value] + [value] + type=Red Mage + [/value] + [value] + type=Red Mage + [/value] +#ifdef EASY + [value] + type=Mage + [/value] +#endif +#ifndef EASY + [value] + type=White Mage + [/value] + [value] + type=Red Mage + [/value] +#endif +#ifdef HARD + [value] + type=Red Mage + [/value] + [value] + type=White Mage + [/value] +#endif + [value] + type=Mage + [/value] + [value] + type=Mage + [/value] + [value] + type=Mage + [/value] + [/set_variables] + + [random_placement] + num_items={ON_DIFFICULTY 5 6 7} + variable=loc + min_distance=3 + [filter_location] + terrain=Urb,Urb^E*,Ur,Ur^E* + [not] + x=27-35 + y=1-7 + [/not] + [not] + x=20-35 + y=16-20 + [/not] + [not] + x=25-29 + y=13-20 + [/not] + [not] + x=30-35 + y=11-20 + [/not] + [not] + [filter][/filter] + [/not] + [/filter_location] + [command] + {NAMED_NOTRAIT_UNIT 2 "$guardtypetable[$($loc.n % $guardtypetable.length)].type" $loc.x $loc.y () (_ "Guard")} {GUARDIAN} + [/command] + [/random_placement] + [random_placement] + num_items={ON_DIFFICULTY 6 6 7} + variable=loc + min_distance=3 + [filter_location] + terrain=Urb,Urb^E*,Ur,Ur^E*,Irs,Irs^* + [not] + x=27-35 + y=1-7 + [/not] + [not] + x=20-35 + y=16-20 + [/not] + [not] + x=25-29 + y=13-20 + [/not] + [not] + x=30-35 + y=11-20 + [/not] + [not] + [filter][/filter] + [/not] + [/filter_location] + [command] + {NAMED_NOTRAIT_UNIT 2 "$magetypetable[$($loc.n % $magetypetable.length)].type" $loc.x $loc.y () (_ "Mage")} {GUARDIAN} + [/command] + [/random_placement] # Who has the book? {VARIABLE hasBook none} @@ -227,11 +441,6 @@ {CLEAR_VARIABLE units_inside_manor} # Create DV's units - {GENERIC_UNIT 3 (Revenant) 26 16} - [+unit] - animate=yes - [/unit] - {GENERIC_UNIT 3 (Spectre) 26 16} [+unit] animate=yes @@ -252,14 +461,9 @@ animate=yes [/unit] - {GENERIC_UNIT 3 (Nightgaunt) 26 16} - [+unit] - animate=yes - [/unit] - [message] - speaker=Malin Keshar - message= _ "I feel the book is very close, somewhere to the northwest." + speaker=Darken Volk + message= _ "The book is very close, somewhere to the northwest." [/message] [unlock_view][/unlock_view] @@ -285,11 +489,11 @@ [if] [variable] name=turn_number - greater_than=3 + greater_than=4 [/variable] [then] - {VARIABLE dest.x 11} - {VARIABLE dest.y 7} + {VARIABLE dest.x 12} + {VARIABLE dest.y 8} [/then] [else] {VARIABLE dest.x 16} @@ -338,13 +542,282 @@ {CLEAR_VARIABLE stored_Darken,dest,darken_goto,index} [/event] + # pursuer spawns + +#define SPAWN_GUARD + [random_placement] + num_items=1 + variable=loc + min_distance=1 + [filter_location] + x=33-34,35 + y=17-18,18-19 + [not] + [filter][/filter] + [/not] + [/filter_location] + [command] + [set_variable] + name=ind + rand=1..$guardtypetable.length + [/set_variable] + {VARIABLE_OP ind sub 1} + {GENERIC_UNIT 4 "$guardtypetable[$ind].type" $loc.x $loc.y} + {CLEAR_VARIABLE ind} + [/command] + [/random_placement] +#enddef +#define SPAWN_MAGE + [random_placement] + num_items=1 + variable=loc + min_distance=1 + [filter_location] + x=33-34,35 + y=17-18,18-19 + [not] + [filter][/filter] + [/not] + [/filter_location] + [command] + [set_variable] + name=ind + rand=1..$magetypetable.length + [/set_variable] + {VARIABLE_OP ind sub 1} + {GENERIC_UNIT 4 "$magetypetable[$ind].type" $loc.x $loc.y} + {CLEAR_VARIABLE ind} + [/command] + [/random_placement] +#enddef + + [event] + name=new turn + first_time_only=no + + [if] + [variable] + name=turn_number + greater_than_equal_to={ON_DIFFICULTY 14 12 10} + [/variable] + [then] + {RANDOM 0..2} + [switch] + variable=random + [case] + value=0 + {SPAWN_GUARD} + {SPAWN_GUARD} + [/case] + [case] + value=1 + {SPAWN_MAGE} +#ifdef HARD + {SPAWN_MAGE} +#else + {SPAWN_GUARD} +#endif + [/case] + [case] + value=2 + {SPAWN_GUARD} + {SPAWN_MAGE} + [/case] + [/switch] + [/then] + [elseif] + [variable] + name=turn_number + greater_than_equal_to={ON_DIFFICULTY 8 7 6} + [/variable] + [then] + [set_variable] + name=turn_mod + value=$("($turn_number - {ON_DIFFICULTY 8 7 6}) % 2") + [/set_variable] + [if] + [variable] + name=turn_mod + numerical_equals=0 + [/variable] + [then] + {RANDOM 0..3} + [switch] + variable=random + [case] + value=0 + {SPAWN_GUARD} +#ifdef HARD + {SPAWN_GUARD} +#endif + [/case] + [case] + value=1 + {SPAWN_GUARD} + {SPAWN_GUARD} + [/case] + [case] + value=2 + {SPAWN_MAGE} + [/case] + [case] + value=3 + {SPAWN_GUARD} + {SPAWN_MAGE} + [/case] + [/switch] + [/then] + [/if] + {CLEAR_VARIABLE turn_mod} + [/then] + [/elseif] + [elseif] + [variable] + name=turn_number + greater_than_equal_to=2 + [/variable] + [then] + [set_variable] + name=turn_mod + value=$("($turn_number - 2) % 3") + [/set_variable] + [if] + [variable] + name=turn_mod + numerical_equals=0 + [/variable] + [then] + {RANDOM 0..3} + [switch] + variable=random + [case] + value=0 + {SPAWN_GUARD} + {SPAWN_GUARD} + [/case] + [case] + value=1 + {SPAWN_GUARD} +#ifdef HARD + {SPAWN_GUARD} +#endif + [/case] + [case] + value=2 + {SPAWN_MAGE} + [/case] + [case] + value=3 + {SPAWN_GUARD} + {SPAWN_MAGE} + [/case] + [/switch] + [/then] + [/if] + {CLEAR_VARIABLE turn_mod} + [/then] + [/elseif] + [/if] + + [fire_event] + name=city guard dialogue + [/fire_event] + [fire_event] + name=city guard dialogue2 + [/fire_event] + [/event] + + [event] + name=city guard dialogue + [filter_condition] + [variable] + name=turn_number + equals=2 + [/variable] + [/filter_condition] + + [message] + speaker=Darken Volk + message= _ "The guards continue to pursue us." + [/message] + [/event] + [event] + name=city guard dialogue2 + [filter_condition] + [variable] + name=turn_number + equals={ON_DIFFICULTY 14 12 10} + [/variable] + [/filter_condition] + + [message] + speaker=Malin Keshar + message= _ "The guards are catching up to us!" + [/message] + [/event] + + # Flavor text + + [event] + name=moveto + [filter] + x,y=15,10 + side=1 + [/filter] + [message] + speaker=narrator + message= _ "Beware that, when fighting monsters, you yourself do not become a monster... for when you gaze long into the abyss, the abyss gazes also into you." + image=wesnoth-icon.png + [/message] + [allow_undo][/allow_undo] + [/event] + [event] + name=moveto + [filter] + x,y=7,11 + side=1 + [/filter] + [message] + speaker=narrator + message= _ "Death is the twilight that follows the light of day. +Life fades with the setting sun into darkness. +Existence churns and the soul is reborn into endless night." + image=wesnoth-icon.png + [/message] + [allow_undo][/allow_undo] + [/event] + [event] + name=moveto + [filter] + x,y=18,4 + side=1 + [/filter] + [message] + speaker=Malin Keshar + message= _ "There are quite a few failed potions around here." + [/message] + [allow_undo][/allow_undo] + [/event] + [event] + name=moveto + [filter] + x,y=22,12 + side=1 + [/filter] + [message] + speaker=Malin Keshar + message= _ "This coffin is empty." + [/message] + [allow_undo][/allow_undo] + [/event] + [event] # a side 1 unit finds the book name=moveto [filter] side=1 canrecruit=no - x,y=11,7 + x,y=12,8 [/filter] [filter_condition] [variable] @@ -354,13 +827,13 @@ [/filter_condition] [message] - x,y=11,7 - message=_ "I have found the book, master! It is here." + x,y=12,8 + message=_ "I have found the book, master!" [/message] [if] [have_unit] - x,y=11,7 + x,y=12,8 race=undead [/have_unit] [then] @@ -385,7 +858,7 @@ name=moveto [filter] id=Malin Keshar - x,y=11,7 + x,y=12,8 [/filter] [filter_condition] [variable] @@ -395,19 +868,24 @@ [/filter_condition] [remove_item] - x,y=11,7 + x,y=12,8 [/remove_item] {VARIABLE hasBook Malin} [message] speaker=Malin Keshar - message= _ "We’ve got the book, but now how do we get out of here?" + message= _ "Such an old, worn book. It does not seem like much, but at least we’ve got it now." + [/message] + + [message] + speaker=Malin Keshar + message= _ "... So... how do we get out of here?" [/message] [message] speaker=Darken Volk - message= _ "There’s a small tunnel in the cellar to the northeast. It will lead us far enough out of the city that we can escape pursuit." + message= _ "There is a small tunnel in the cellar to the northeast. It will lead us far enough out of the city that we can escape pursuit." [/message] [objectives] @@ -437,12 +915,12 @@ name=moveto [filter] id=Malin Keshar - x,y=30-31,1 + x,y=29-32,1-3 [/filter] [message] speaker=Malin Keshar - message= _ "Phew! Let’s get out of here." + message= _ "Let’s get out of here." [/message] [endlevel] @@ -459,7 +937,7 @@ name=moveto [filter] id=Darken Volk - x,y=11,7 + x,y=12,8 [/filter] [filter_condition] [variable] @@ -469,7 +947,7 @@ [/filter_condition] [remove_item] - x,y=11,7 + x,y=12,8 [/remove_item] {VARIABLE hasBook Darken} @@ -508,6 +986,10 @@ id=Darken Volk [/scroll_to_unit] + [delay] + time=500 + [/delay] + [message] speaker=Malin Keshar message= _ "Wait, you aren’t leaving me behind, are you?" @@ -523,13 +1005,13 @@ [message] speaker=Darken Volk - message= _ "You have served me well, my apprentice." + message= _ "You have served me well, boy." [/message] [message] speaker=narrator image=wesnoth-icon.png - message= _ "As he heads into the tunnel Darken Volk collapses its entrance, leaving Malin to be captured and executed by the city guards." + message= _ "As he heads into the tunnel, Darken Volk collapses the entrance, leaving Malin to be captured and executed by the city guards." [/message] [endlevel] @@ -541,12 +1023,12 @@ name=moveto [filter] id=Malin Keshar - x,y=30-31,1 + x,y=29-32,1-3 [/filter] [message] speaker=Malin Keshar - message= _ "Phew! Let’s get out of here." + message= _ "Let’s get out of here." [/message] [endlevel] @@ -558,14 +1040,48 @@ [/event] [/event] + [event] + name=time over + + [remove_shroud] + side=1 + x=29-33 + y=0-4 + [/remove_shroud] + + [unit] + type=Royal Guard + side=4 + x,y=32,2 + id=RGuard + canrecruit=yes + animate=yes + facing=sw + [/unit] + {GENERIC_UNIT 4 (Pikeman) 30 2} {FACING sw} + {GENERIC_UNIT 4 (Longbowman) 30 1} {FACING sw} + {GENERIC_UNIT 4 (Swordsman) 31 2} {FACING sw} + {GENERIC_UNIT 4 (Mage of Light) 31 1} {FACING sw} + + [message] + speaker=RGuard + message= _ "Surround those necromancers! They cannot escape us now!" + [/message] + + [endlevel] + result=defeat + [/endlevel] + [/event] + [event] name=victory + {CLEAR_VARIABLE guardtypetable} + {CLEAR_VARIABLE magetypetable} + {CLEAR_VARIABLE random} {MODIFY_UNIT (id=Darken Volk) side 1} [/event] {HERODEATH_MALIN} {HERODEATH_VOLK_B} - - {TIME_OVER_DEFEAT_MANOR} [/scenario]