BuildingScenariosIntermediate

From The Battle for Wesnoth Wiki
Revision as of 23:14, 4 November 2005 by Drewed (talk | contribs) (=)
BuildingScenarios BuildingScenariosWML BuildingScenariosSimple BuildingScenariosIntermediate BuildingScenariosAdvanced
BuildingScenariosComments BuildingScenariosSamples BuildingScenariosFAQ


<<<<<<< BuildingScenariosIntermediate

You can trigger certain actions that occur during a scenario using the events mechanism. Let us look at an example of a simple event. Suppose you wanted Konrad to say "it's getting cold" when he moves to the location (4,8):

 [event]
 name=moveto
  [filter]
  description=Konrad
  x=4
  y=8
  [/filter]
  [message]
  description=Konrad
  message= _ "It's getting cold"
  [/message]
 [/event]

Firstly you have the name of the event. This is a 'moveto' event, meaning it is fired every time a unit moves somewhere. For a list of the different possible event names, see EventWML

Of course, we don't want it to be fired everytime any unit moves anywhere, so we use the [filter] tag to filter out the kind of moveto event we want. Events can be filtered on many different parameters. Filters are described in FilterWML.

Special attributes

Note that generally, a set of actions is triggered only once. You can make a set of actions be triggered every time the event occurs by adding the attribute first_time_only=no in the event.

Also, whenever an event is triggered, the player cannot undo the move, even if it was a moveto event. We could make a scenario where moves cannot be undone by adding the event

[event]
name=moveto
first_time_only=no
[/event]

which would not do anything, but would prevent the player from undoing moves.

The event

[event]
name=enemies defeated
 [endlevel]
 result=victory
 bonus=yes
 [/endlevel]
[/event]

is an implied trigger and appears automatically at the end of each scenario. To prevent this event, add the attribute victory_when_enemies_defeated=no inside the main tag (usually [scenario]).

The attribute disallow_recall=yes prevents the player from recalling units in this scenario.

The attributes fog=yes and shroud=yes can be put in a [side] tag to make that side have fog of war/shroud. (Fog of war prevents seeing all enemy movement, shroud prevents seeing all of the map.)

==

>>>>>>> 1.4

Ok, so as you have seen in BuildingScenariosSimple, you can setup what the human player and AI player start with, and some simple options for controlling how the AI works. From the [side] tag listed below you can see we are going to learn some more interesting things that can be controlled from there. I'm not going to explain all the keys, just the new ones.

[scenario]
.
.
.

[side]
type=Lich
description=Galga
side=2
canrecruit=1

#ifdef EASY
 recruit=Skeleton,Revenant,Blood Bat,Ghost,Bone Shooter
 recruitment_pattern=fighter,fighter,archer,scout
 gold=300
#endif

#ifdef NORMAL
 recruit=Skeleton,Revenant,Chocobone,Blood Bat,Wraith,Bone Shooter,Dark Adept 
 recruitment_pattern=fighter,fighter,archer,scout
 gold=500
#endif

#ifdef HARD
 recruit=Skeleton,Revenant,Chocobone,Wraith,Bone Shooter,Dark Adept
 recruitment_pattern=fighter,fighter,archer,scout
 gold=700
#endif

aggression=1.0
village_value=0.0
leader_value=50.0
enemy=1
[/side]

[/scenario]

As you can see from the above listing, the [side] tag can get a little complex. The #ifdef is relitivly simple to explain. If the user is playing EASY then everything between #ifdef EASY and #endif is set and the others are ignored. If the user is playing NORMAL then everything between #ifdef NORMAL and #endif is set and the others are ignored. Finally if the user is playing HARD then everything between #ifdef HARD and #endif is set and the others are ignored. This allows a scenario to be configured differently for each level of gameplay the user may choose. There are also two new keys listed, village_value and leader_value.


Lets get into some more interesting stuff. The map files hold the ground tiles. This is the very bottom layer of things. The units walking around during a game are on the very top layer. This is all well and good, but wouldnt it be nice to be able to place some unique items on the map? What if you wanted to place a building, or a potion, or anything somewhere in your scenario? Well you can with the [item] tag.

[scenario]
.
.
.

[item]
x=31
y=43
image=item-holywater.png 
[/item]

[/scenario]

The [item]|| tag is actually very simple to use, as you can see from above. There are three keys, the first two are ||x|| and ||y||. They are the location on the map. The third key is ||image. This it tha image file to place in that location. This image must be located in the images directory. Ok, that was simple wasn't it?


Now you have enough information to make some interesting looking scenarios with tuned AI players. This is a big step. Next we are going to learn how to make your newly created scenario fit nicely into a campaign. This involves making the intro shown before the scenario is played a bit more descriptive. This is all done from within the [story] tag.

[scenario]
.
.
.

[story]
[part]
id=intro_13
story="... but one of the Orcs survived long enough to send the news to the queen..." 
image=misc/story6.png
[/part]
[/story]

[scenario]

FIXME: finish [story]