#textdomain wesnoth-ai [test] id=simple_attack name= _ "Simple Attack" next_scenario=micro_ai_test map_data="{multiplayer/maps/Dark_Forecast.map}" {DEFAULT_SCHEDULE} turns=-1 [side] side=1 controller=human id=Grospur name= _ "Grospur" type=General x,y=15,14 persistent=no canrecruit=yes recruit=Swordsman,Longbowman,Spearman,Bowman gold=100 [/side] [side] side=2 controller=ai type=Ancient Lich id=Uralt name= _ "Uralt" x,y=8,6 persistent=no canrecruit=yes gold=10000 [/side] [side] # This side is only here because we need one persistent side for the game to go on side=3 controller=null persistent=yes save_id=Grnk hidden=yes [/side] [event] name=preload first_time_only=no [lua] code=<< function close_to_advancing(unit) if (unit.experience >= unit.max_experience-1) then return true else return false end end >> [/lua] [/event] [event] name=prestart {VARIABLE scenario_name simple_attack} {UNIT 1 Longbowman 11 14 random_traits,experience=no,67} {UNIT 1 Longbowman 15 12 random_traits,experience=no,67} {UNIT 1 Longbowman 13 17 random_traits,experience=no,67} {UNIT 1 (Master Bowman) 13 13 random_traits,experience=no,149} {UNIT 1 (Master Bowman) 11 16 random_traits,experience=no,149} {UNIT 1 (Master Bowman) 15 18 random_traits,experience=no,149} {UNIT 1 Sergeant 14 14 id=sergeant} {GENERIC_UNIT 1 Javelineer 15 13} {GENERIC_UNIT 1 (Iron Mauler) 15 17} {SCATTER_UNITS 12 "Soulless" 1 (x,y=5-9,8-22) (side=2)} {SCATTER_UNITS 6 "Skeleton,Skeleton Archer" 1 (x,y=5-9,8-22) (side=2)} [micro_ai] side=2 ai_type=simple_attack action=add ca_score=110001 [filter] type=Soulless # No Walking Corpses; L0 units don't advance enemy [/filter] [filter_second] lua_function = "close_to_advancing" [/filter_second] [/micro_ai] [micro_ai] side=2 ai_type=simple_attack action=add ca_score=110000 [filter] type=Soulless,Walking Corpse [/filter] [/micro_ai] [modify_side] side=2 [ai] aggression=1.0 caution=-9999 [/ai] [/modify_side] [/event] [event] name=start {SCROLL_TO 11 16} {MESSAGE sergeant "" "" _"General Grospur, what do we do? These undead will surely wipe us out."} {MESSAGE Grospur "" "" _"Don't be such a chicken, Sergeant! I have placed units with lots of experience around the perimeter. The undead will not dare to attack them. And those few that sneak through... we can easily dispose of them once they make it inside. In other words, the Wesnoth AI does generally not attack units one XP from leveling if there is no chance of killing the unit with a single attack. However, some of the attacks by the undead are handled by the Simple Attack Micro AI in this scenario. General Grospur might be in for a surprise."} [objectives] summary= _ "Watch the undead take care of business" [objective] description= _ "Don't even try. You can't reach the Lich." condition=win [/objective] [objective] description= _ "Death of the last of Grospur's units" condition=lose [/objective] [note] description= _ "When your leader dies, side leadership passes on to another unit" [/note] [/objectives] [/event] # Guards don't get moves on Turn 1 [event] name=turn refresh [modify_unit] [filter] side=1 type=Longbowman,Swordsman [/filter] moves=0 [/modify_unit] [/event] [event] name=attack [filter_second] side=1 lua_function = "close_to_advancing" [/filter_second] {MESSAGE $second_unit.id "" "" _"What the ... ?!? They are not supposed to attack me. That just doesn't happen in Wesnoth!"} {MESSAGE Uralt "" "" _"Hahahahaha !! I have given special instruction to my Soulless to attack all you almost-advanced units first. Also watch how those same Soulless will throw themselves mercilessly at your pitiful soldiers after that, saving my more valuable skeleton minions for later. I have taken the term 'disposable units' to a whole new level. Watch in awe !! Translation: The undead side includes two instances of the Simple Attack Micro AI. The first makes the Soulless attack all units 1 XP from leveling up, such that they can be eliminated afterward. The second executes all remaining attacks possible by Soulless (and Walking Corpses), without regard for their own safety. Only after that does the default Wesnoth attack mechanism kick in to attack with the remaining units (skeletons)."} [/event] # Put more undead out there when less than 25 left [event] name=side 2 turn end first_time_only=no [if] [have_unit] side=2 count=0-24 [/have_unit] [then] {MESSAGE Uralt "" "" _"Rise, minions!"} {SCATTER_UNITS 6 "Soulless" 1 (x,y=5-9,8-22) (side=2)} {SCATTER_UNITS 3 "Skeleton,Skeleton Archer" 1 (x,y=5-9,8-22) (side=2)} [/then] [/if] [/event] # When the leader dies, transfer leadership to another unit. # If this was the last unit, end scenario. [event] name=die first_time_only=no [filter] side=1 canrecruit=yes [/filter] [if] [have_unit] side=1 [/have_unit] [then] [store_unit] [filter] side=1 [/filter] variable=tmp_units [/store_unit] {MODIFY_UNIT id=$tmp_units[1].id canrecruit yes} {CLEAR_VARIABLE tmp_units} [/then] [else] [kill] id=$unit.id [/kill] # So that game goes on to next scenario [modify_side] side=3 controller=human [/modify_side] {MESSAGE Uralt "" "" _"And that's how the undead AI executes total annihilation ..."} [endlevel] result=victory bonus=no carryover_percentage=0 carryover_report=no linger_mode=no [/endlevel] [/else] [/if] [/event] [/test]