Add Goto Micro AI scenario

This commit is contained in:
mattsc 2013-05-02 20:03:56 -07:00
parent 06e896970d
commit 83ea570285

View file

@ -0,0 +1,724 @@
#textdomain wesnoth
[test]
id=goto
name=_"Goto"
next_scenario=micro_ai_test
map_data="{ai/micro_ais/maps/goto.map}"
{DEFAULT_SCHEDULE}
turns=-1
victory_when_enemies_defeated=no
[side]
side=1
controller=human
hidden=no
name=Vaddan
id=Vaddan
type=Outlaw
persistent=no
team_name=Vaddan,humans
user_team_name=_"Vaddan"
canrecruit=yes
recruit=Ruffian,Footpad,Thug,Poacher
gold=0
[/side]
[side]
side=2
controller=ai
type=General
id=leader2
name=Minry
persistent=no
team_name=humans,hum_wood
user_team_name=_"Humans"
scroll_to_leader=no
canrecruit=yes
recruit=Spearman,Bowman
gold=0
income=-2
{MICRO_AI_GOTO}
[/side]
[side]
side=3
controller=ai
type=Poacher
id=leader3
persistent=no
team_name=woodsmen,hum_wood
user_team_name=_"Woodsmen"
canrecruit=yes
recruit=Woodsman
gold=0
income=-2
{MICRO_AI_GOTO}
[/side]
[side]
side=4
controller=ai
type=Saurian Flanker
id=leader4
persistent=no
team_name=saurians,Vaddan,woodsmen
user_team_name=_"Saurians"
canrecruit=yes
recruit=Saurian Augur,Saurian Skirmisher
gold=50
income=12
{MICRO_AI_LURKERS}
[/side]
[side]
side=5
controller=ai
type=Lieutenant
name=Gadoc
id=leader5
persistent=no
team_name=humans,hum_wood
user_team_name=_"Humans"
canrecruit=yes
recruit=Spearman,Bowman
gold=50
income=8
{MICRO_AI_GOTO}
[/side]
[side]
side=6
controller=ai
type=Lieutenant
name=Senvan
id=leader6
persistent=no
team_name=humans,hum_wood
user_team_name=_"Humans"
canrecruit=yes
recruit=Spearman,Bowman
gold=50
income=8
{MICRO_AI_GOTO}
[/side]
[side]
side=7
controller=ai
no_leader=yes
persistent=no
team_name=Vaddan,hum_wood,saurians
user_team_name=_"Animals"
gold=0
income=-2
{MICRO_AI_GOTO}
[/side]
[side] # This side is only here because we need one persistent side for the game to go on
side=8
controller=null
persistent=yes
save_id=Grnk
hidden=yes
[/side]
# Put all the units and markers out there
[event]
name=prestart
{VARIABLE scenario_name goto}
# Put all the units out there
# The Side 2 Messengers
[unit]
side=2
type=Spearman
id=messenger1
x,y=40,4
random_traits=no
[/unit]
[unit]
side=2
type=Bowman
id=messenger2
x,y=41,4
random_traits=no
[/unit]
# Side 3 guardians
{UNIT 3 Woodsman 15 10 id=guard1}
{UNIT 3 Woodsman 13 12 id=guard2}
# Side 7 bats
{REPEAT 4 {UNIT 7 (Vampire Bat) 35 13 ()}}
# The River Fort commander
{UNIT 5 Sergeant 12 30 (id,name=fort_commander,Aethubry)}
# Labels
{SET_LABEL 7 3 _"General Minry"}
{SET_LABEL 4 21 _"Lieutenant Gadoc"}
{SET_LABEL 14 16 _"Lieutenant Senvan"}
{SET_LABEL 12 30 _"Sergeant Aethubry"}
# Now activate the Micro AIs
# Set up the Goto Micro AI for the two messengers with ca_score set
# so that messenger2 always goes first
[micro_ai]
side=2
ai_type=goto
action=add
ca_id=messenger1
[filter]
id=messenger1
[/filter]
[filter_location]
x,y=6-7,2-4
terrain=C*
[/filter_location]
ca_score=210001
[/micro_ai]
[micro_ai]
side=2
ai_type=goto
action=add
ca_id=messenger2
[filter]
id=messenger2
[/filter]
[filter_location]
x,y=6-7,2-4
terrain=C*
[/filter_location]
ca_score=210002
[/micro_ai]
# The two Side 3 guardians don't move unless a Side 1 unit is within 8 hexes
[micro_ai]
side=3
ai_type=goto
action=add
[filter]
id=guard1
[/filter]
[filter_location]
[filter]
id=guard1
[/filter]
[not]
[filter]
side=1
[/filter]
radius=8
[/not]
[/filter_location]
[/micro_ai]
[micro_ai]
side=3
ai_type=goto
action=add
[filter]
id=guard2
[/filter]
[filter_location]
[filter]
id=guard2
[/filter]
[not]
[filter]
side=1
[/filter]
radius=8
[/not]
[/filter_location]
[/micro_ai]
# Send the Side 5 and 6 recruits to the River Fort
[micro_ai]
side=5
ai_type=goto
action=add
[filter]
type=Spearman,Bowman
[/filter]
[filter_location]
x,y=11-13,29-30
terrain=C*
[/filter_location]
release_unit_at_goal=yes
[/micro_ai]
[micro_ai]
side=6
ai_type=goto
action=add
[filter]
type=Spearman,Bowman
[/filter]
[filter_location]
x,y=12,30
radius=1
[/filter_location]
release_all_units_at_goal=yes
[/micro_ai]
# Make the bats go to the corners of the map
[micro_ai]
side=7
ai_type=goto
action=add
[filter]
type=Vampire Bat
[/filter]
[filter_location]
x=1,1,44,44
y=1,33,1,33
[/filter_location]
unique_goals=yes
[/micro_ai]
# Make the saurians behave like swamp lurkers
[micro_ai]
side=4
ai_type=lurkers
action=add
[lurkers]
type=Saurian Skirmisher,Saurian Augur
[/lurkers]
[attack_terrain]
terrain=S*
[/attack_terrain]
[/micro_ai]
# The right-click menu items
[set_menu_item]
id=m01_new_footpad
description=_"Place Side 1 Footpad"
image=units/human-outlaws/footpad.png~CROP(26,17,24,24)
[show_if]
{VARIABLE_CONDITIONAL scenario_name equals goto}
[/show_if]
[command]
{UNIT 1 Footpad $x1 $y1 ()}
[/command]
[/set_menu_item]
[set_menu_item]
id=m02_kill_unit
description=_"Kill Unit under Cursor"
image=items/potion-poison.png~CROP(24,29,24,24)
[show_if]
{VARIABLE_CONDITIONAL scenario_name equals goto}
[/show_if]
[command]
[kill]
x,y=$x1,$y1
[/kill]
[/command]
[/set_menu_item]
[set_menu_item]
id=m03_null_control
description=_"Turn off human control of Side 1"
image=items/ring-gold.png~CROP(26,26,20,20)
[show_if]
{VARIABLE_CONDITIONAL scenario_name equals goto}
[/show_if]
[command]
[modify_side]
side=1
controller=null
[/modify_side]
[end_turn]
[/end_turn]
[/command]
[/set_menu_item]
[set_menu_item]
id=m04_end_animals
description=_"End scenario"
image=items/ring-red.png~CROP(26,26,20,20)
[show_if]
{VARIABLE_CONDITIONAL scenario_name equals goto}
[/show_if]
[command]
# So that game goes on to next scenario
[modify_side]
side=8
controller=human
[/modify_side]
{MESSAGE narrator "wesnoth-icon.png" "" _"Well, that was that."}
[endlevel]
result=victory
bonus=no
carryover_percentage=0
carryover_report=no
linger_mode=no
[/endlevel]
[/command]
[/set_menu_item]
[/event]
[event]
name=start
#{MESSAGE narrator "wesnoth-icon.png" "" _"Text"}
# wmllint: unbalanced-on
{MESSAGE narrator "wesnoth-icon.png" "" _"This scenario demonstrates a variety of different uses of the Goto Micro AI. All AI sides are controlled by this MAI in one way or another (except for the saurians, which are run by the Lurkers Micro AI). Messages will be displayed throughout the scenario to point out what the units are doing.
The player controls Side 1. There are right-click context menu options for adding Side 1 units to the map and for taking them off again. This is useful mostly for testing how the Side 3 guardians react.
Note: The Goto AI is coded as a Micro AI. A Micro AI can be added and adapted to the need of a scenario easily using only WML and the [micro_ai] tag. Check out the <span color='#00A000'>Micro AI wiki page</span> at http://wiki.wesnoth.org/Micro_AIs for more information."}
# wmllint: unbalanced-off
[objectives]
side=1
summary=_"Watch the AI units do their things"
[objective]
description=_"Use right-click option"
condition=win
[/objective]
[objective]
description=_"Death of Vaddan"
condition=lose
[/objective]
[note]
description=_"Check out the right-click menu options for additional actions"
[/note]
[/objectives]
[/event]
# Dialog involving the messengers
[event]
name=side 2 turn
[message]
speaker=messenger1
message=_"The bridge is out. What do we do now?"
[/message]
[message]
speaker=messenger2
message=_"Looks like we need to take the long way around to get to General Minry."
[/message]
[/event]
[event]
name=side 3 turn
[message]
speaker=leader3
message=_"Chaps, ignore everybody except for that swindler Vaddan and his men. Stay in place until any of his units gets within 8 hexes of you.
Note: This is a demonstration of how the Goto Micro AI can be used to code guardian units, although one of the dedicated Guardian Micro AIs will often be better suited for that purpose."
[/message]
[/event]
[event]
name=side 7 turn
# wmllint: unbalanced-on
[message]
side=7
type=Vampire Bat
message=_"Us four bats switch between running off to the corners of the map (each one to a different corner), and getting back in a group right here. Either behavior is set up with a single [micro_ai] tag, one with 'unique_goals=yes', the other without."
[/message]
# wmllint: unbalanced-off
[/event]
# When the messengers get across the river, send them on separate paths
[event]
name=moveto
[filter]
id=messenger1,messenger2
x=28-34
[/filter]
[message]
speaker=messenger2
message=_"I'll take the route straight through the mountains. It's much shorter than following the trail all the way around in the south."
[/message]
[message]
speaker=messenger1
message=_"You're crazy. It might be shorter as the crow flies, but it will take you forever to get through those mountains.
Note: The messengers are controlled by Goto Micro AI definitions that differ by a single line, 'use_straight_line=yes/no'."
[/message]
[micro_ai]
side=2
ai_type=goto
action=delete
ca_id=messenger2
[/micro_ai]
[micro_ai]
side=2
ai_type=goto
action=add
ca_id=messenger2
[filter]
id=messenger2
[/filter]
[filter_location]
x,y=6-7,2-4
terrain=C*
[/filter_location]
use_straight_line=yes
ca_score=210002
[/micro_ai]
[/event]
# When the first messenger gets to the castle
[event]
name=moveto
[filter]
id=messenger1,messenger2
x,y=6-7,2-4
terrain=C*
[/filter]
[message]
speaker=unit
message=_"I told you so!"
[/message]
[/event]
# Dialog involving the River Fort
[event]
name=side 5 turn 2
[message]
speaker=leader5
message=_"Men, head down to the River Fort and get your orders from Sergeant Aethubry. I want each and every one of you to report to him before going east to fight those saurians."
[/message]
[/event]
[event]
name=side 6 turn 2
[message]
speaker=leader6
message=_"Hah, that's that pencil pusher Gadoc for you! Men, I want you to move toward the River Fort as well, but it's good enough for one of you to report to Sergeant Aethubry. Once that has happened, the rest of you can head into battle directly."
[/message]
[/event]
# When theSide 5 units make it to Aethubry
[event]
name=moveto
first_time_only=no
[filter]
side=5
[filter_location]
x,y=11-13,29-30
terrain=C*
[/filter_location]
[/filter]
[message]
speaker=unit
message=_"$unit.type $unit.name from Lieutenant Gadoc's squadron reporting for duty, sir."
[/message]
[fire_event]
name=sergeant_replies
[primary_unit]
id=$unit.id
[/primary_unit]
[/fire_event]
[/event]
[event]
name=sergeant_replies
[message]
speaker=fort_commander
message=_"Ready to fight those saurians, soldier?"
[/message]
[message]
speaker=unit
message=_"Yes, sir."
[/message]
[event]
name=sergeant_replies
[message]
speaker=fort_commander
message=_"Very good, $unit.type. Now go help your comrade get rid of that saurian infestation in the swamps."
[/message]
[event]
name=sergeant_replies
[message]
speaker=fort_commander
message=_"Maybe if I ignore them, they'll just go away?"
[/message]
[/event]
[/event]
[/event]
# When the first Side 6 unit makes it to Aethubry
[event]
name=moveto
[filter]
side=6
[filter_location]
x,y=12,30
radius=1
[/filter_location]
[/filter]
[message]
speaker=unit
message=_"Lieutenant Senvan's men reporting for duty, sir."
[/message]
[message]
speaker=fort_commander
message=_"Ah, Lieutenant Senvan... Is every single one of you going to bother me individually as well?"
[/message]
[message]
speaker=unit
message=_"No, sir. Lieutenant Senvan ordered us to head into battle as soon as I have reported to you."
[/message]
[message]
speaker=fort_commander
message=_"Well, that's a relief. Somebody knows how to use his ... I mean, very well, off you go then.
" + {WHISPER _"I wouldn't say anything negative about one of my superior officers now, would I?"}
[/message]
[/event]
# When the bats make it to the 4 corners, make then move into a group again
[event]
name=moveto
[filter]
side=7
type=Vampire Bat
[/filter]
first_time_only=no
[if]
[have_unit]
side=7
type=Vampire Bat
x,y=1,1
[/have_unit]
[have_unit]
side=7
type=Vampire Bat
x,y=1,33
[/have_unit]
[have_unit]
side=7
type=Vampire Bat
x,y=44,1
[/have_unit]
[have_unit]
side=7
type=Vampire Bat
x,y=44,33
[/have_unit]
[then]
[message]
side=7
type=Vampire Bat
message=_"We've all made it to the corners, let's get back together again."
[/message]
# Send the bats back to their starting point
[micro_ai]
side=7
ai_type=goto
action=add
[filter]
type=Vampire Bat
[/filter]
[filter_location]
x,y=35,13
[/filter_location]
[/micro_ai]
[/then]
[/if]
[/event]
# When the bats are back together, make them go to the corners again
[event]
name=moveto
[filter]
side=7
type=Vampire Bat
[/filter]
first_time_only=no
[if]
[have_unit]
side=7
type=Vampire Bat
count=4
[filter_location]
x,y=35,13
radius=2
[/filter_location]
[/have_unit]
[then]
[message]
side=7
type=Vampire Bat
message=_"We're back together, let's head out to the corners again."
[/message]
# Make the bats go to the corners of the map
[micro_ai]
side=7
ai_type=goto
action=add
[filter]
type=Vampire Bat
[/filter]
[filter_location]
x=1,1,44,44
y=1,33,1,33
[/filter_location]
unique_goals=yes
[/micro_ai]
[/then]
[/if]
[/event]
# The River Fort commander never moves
[event]
name=side 5 turn refresh
first_time_only=no
{MODIFY_UNIT id=fort_commander moves 0}
[/event]
[/test]