Five WML questions
Moderator: Forum Moderators
Forum rules
- Please use [code] BBCode tags in your posts for embedding WML snippets.
- To keep your code readable so that others can easily help you, make sure to indent it following our conventions.
- Bob_The_Mighty
- Posts: 870
- Joined: July 13th, 2006, 1:15 pm
Five WML questions
I have a number of WML questions, regarding a new project I am working on. It is for 1.4.3. Any help would be great.
1. Filtering on teams
I have an event which I want to trigger only when an enemy unit passes the filter.
I've tried this...
[not]
[wml_filter]
team_name=$unit.team_name
[/wml_filter]
[/not]
But it doesn't seem to work. At the moment, it triggers for allies too. Is there a way to do this using a standard unit filter or a wml_filter?
2. Facing for fake units
When using a [move_unit_fake] I cannot figure out how to make the fake unit face in the direction it moving. Do I need a standing animation or a movement animation? And do I need six images for all the directions, or does it flip it automatically like it does with projectiles? I've tried several combinations with no luck.
3. Preventing a unit from moving into village tiles
I want to make a unit that is unable to enter villages. I can do this fine for grassland villages (by setting movecosts to village=99 in the unit .cfg), but my unit can still enter water/swamp/hill/mountain/cave villages since these tiles are aliased with terrain that it can move on. Is there a way around this? I tried inventing a key to set swamp_village=99 but it did nothing.
4. Floating labels
If a unit is stored, is there a way to show the floating labels without unstoring it? Or, if not, could I do this: store1/store2/unstore2/unstore1? (*2 being purely for labels). Does this make sense?
5. Working out chance-to-hit using variables
Is there some way to access what defence a unit has at any given time, so as to work out the chance of it getting hit. I guess it might be possible to run through every terrain type and match it with the movetype, but that seems very tedious. Any ideas?
1. Filtering on teams
I have an event which I want to trigger only when an enemy unit passes the filter.
I've tried this...
[not]
[wml_filter]
team_name=$unit.team_name
[/wml_filter]
[/not]
But it doesn't seem to work. At the moment, it triggers for allies too. Is there a way to do this using a standard unit filter or a wml_filter?
2. Facing for fake units
When using a [move_unit_fake] I cannot figure out how to make the fake unit face in the direction it moving. Do I need a standing animation or a movement animation? And do I need six images for all the directions, or does it flip it automatically like it does with projectiles? I've tried several combinations with no luck.
3. Preventing a unit from moving into village tiles
I want to make a unit that is unable to enter villages. I can do this fine for grassland villages (by setting movecosts to village=99 in the unit .cfg), but my unit can still enter water/swamp/hill/mountain/cave villages since these tiles are aliased with terrain that it can move on. Is there a way around this? I tried inventing a key to set swamp_village=99 but it did nothing.
4. Floating labels
If a unit is stored, is there a way to show the floating labels without unstoring it? Or, if not, could I do this: store1/store2/unstore2/unstore1? (*2 being purely for labels). Does this make sense?
5. Working out chance-to-hit using variables
Is there some way to access what defence a unit has at any given time, so as to work out the chance of it getting hit. I guess it might be possible to run through every terrain type and match it with the movetype, but that seems very tedious. Any ideas?
My current projects:
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves
Re: Five WML questions
Units don't have a team_name stored in them. What I've done in another project was to use your above way of filtering, but set those team_name values for each unit manually. Meaning basically start and recruit events which make sure that any unit entering the game will have the correct team_name stored into it.Bob_The_Mighty wrote:I have a number of WML questions, regarding a new project I am working on. It is for 1.4.3. Any help would be great.
1. Filtering on teams
I have an event which I want to trigger only when an enemy unit passes the filter.
I've tried this...
[not]
[wml_filter]
team_name=$unit.team_name
[/wml_filter]
[/not]
But it doesn't seem to work. At the moment, it triggers for allies too. Is there a way to do this using a standard unit filter or a wml_filter?
-
- Art Contributor
- Posts: 117
- Joined: July 18th, 2006, 12:23 am
Re: Five WML questions
team_name belongs to the [side] tag.1. Filtering on teams
...
Try this.
Code: Select all
[event]
name=moveto
first_time_only=no
[filter]
x,y=10,6
[/filter]
[store_side]
side=$side_number
variable=temp
[/store_side]
[if]
[variable]
name=temp.team_name
not_equals=north
[/variable]
[then]
...
[/then]
[/if]
{CLEAR_VARIABLE temp}
[/event]
- Ken_Oh
- Moderator Emeritus
- Posts: 2178
- Joined: February 6th, 2006, 4:03 am
- Location: Baltimore, Maryland, USA
Re: Five WML questions
The only idea I can throw at you is to change the terrain up a little bit, which is probably not going to be optimal in any setting. I'm thinking WML should be made to be flexible on terrain to the point where a designer can state {VARIABLE unit.movement_costs.Gg 100}. I'll take this to the ideas forum if no one else has a better solution for you.Bob_The_Mighty wrote:3. Preventing a unit from moving into village tiles
Sounds to me like that would work just fine.Bob_The_Mighty wrote:4. Floating labels
If a unit is stored, is there a way to show the floating labels without unstoring it? Or, if not, could I do this: store1/store2/unstore2/unstore1? (*2 being purely for labels). Does this make sense?
I think the best idea is to store the unit, store the location, pass the terrain letters through a [switch] to see which defense it corresponds to and then storing unit.defense.[the found defense] to a variable is the best idea. If that's what you meant by the tedious way, then AFAIK that's what you have to use.Bob_The_Mighty wrote:5. Working out chance-to-hit using variables
Is there some way to access what defence a unit has at any given time, so as to work out the chance of it getting hit. I guess it might be possible to run through every terrain type and match it with the movetype, but that seems very tedious. Any ideas?
- Bob_The_Mighty
- Posts: 870
- Joined: July 13th, 2006, 1:15 pm
Re: Five WML questions
Thanks Ken Oh. I haven't heard of [switch] before, but I'll look into it.
And zookeeper, your idea of setting the teams in a recruit event is a good one. I have been doing that for some other stuff, so I'll do it for this too, don't know why I didn't think of it.
The entering villages problem is probably unsovleable, so I might forget that.
Which only leave the fake unit facing question... can anyone make it 4/5?
And zookeeper, your idea of setting the teams in a recruit event is a good one. I have been doing that for some other stuff, so I'll do it for this too, don't know why I didn't think of it.
The entering villages problem is probably unsovleable, so I might forget that.
Which only leave the fake unit facing question... can anyone make it 4/5?
Last edited by Bob_The_Mighty on August 20th, 2008, 12:51 am, edited 1 time in total.
My current projects:
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves
-
- Art Contributor
- Posts: 117
- Joined: July 18th, 2006, 12:23 am
Re: Five WML questions
Using the [switch] statement might be a problem
Because you want to use 1.4.3 as you said here
http://www.wesnoth.org/wiki/InternalActionsWML
Because you want to use 1.4.3 as you said here
and you can only use it in the dev branch. Look here:I have a number of WML questions, regarding a new project I am working on. It is for 1.4.3. Any help would be great.
http://www.wesnoth.org/wiki/InternalActionsWML
- Ken_Oh
- Moderator Emeritus
- Posts: 2178
- Joined: February 6th, 2006, 4:03 am
- Location: Baltimore, Maryland, USA
Re: Five WML questions
Right, sorry. Switch is just an easier way to do if/then for a list of conditions. Forget about it until next stable.
Re: Five WML questions
Well, there might be code that does something like that on the forums already. I made that tedious work (before sap or zoo showed the way with objects) for my all-wml-no-luck-mod. Search for it and you might find it (I don't really rememeber when it was and I don't really understand what posts went missing in the latest crash).Bob_The_Mighty wrote:5. Working out chance-to-hit using variables
Is there some way to access what defence a unit has at any given time, so as to work out the chance of it getting hit. I guess it might be possible to run through every terrain type and match it with the movetype, but that seems very tedious. Any ideas?
/tsr
- Bob_The_Mighty
- Posts: 870
- Joined: July 13th, 2006, 1:15 pm
Re: Five WML questions
I got your mod tsr, but I couldn't work which part I should look at.
I am expecting I will have to do something like this for every terrain type:
[if]
[have_location]
x,y=$x1,$y1
terrain=Gg,Ggf,Gs,Rd,Re,Rr,Rp,Re^Gvs,Gg^Wm,Wwf
[/have_location]
[then]
{VARIABLE_OP chance_to_hit format $unit.defense.grassland}
[/then]
[/if]
But what about aliased terrains? For instance, I have included river ford (Wwf) under grassland, but what if the unit is a merman?
I am expecting I will have to do something like this for every terrain type:
[if]
[have_location]
x,y=$x1,$y1
terrain=Gg,Ggf,Gs,Rd,Re,Rr,Rp,Re^Gvs,Gg^Wm,Wwf
[/have_location]
[then]
{VARIABLE_OP chance_to_hit format $unit.defense.grassland}
[/then]
[/if]
But what about aliased terrains? For instance, I have included river ford (Wwf) under grassland, but what if the unit is a merman?
My current projects:
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves
- Bob_The_Mighty
- Posts: 870
- Joined: July 13th, 2006, 1:15 pm
Re: Five WML questions
Well I ended up doing it the tedious way, and it seems to work. Here's what i used...
The MW_TERRAIN_CHECKER_2 macro compares a unit's defense on aliased terrain, such as river ford, and sets $chance_to_hit to the lowest number of the two terrains (i.e. whichever is best for the unit).
#define MW_TERRAIN_CHECKER TERRAIN LETTERS
[if]
[have_location]
x,y=$x1,$y1
terrain={LETTERS}
[/have_location]
[then]
{VARIABLE_OP chance_to_hit format $unit.defense.{TERRAIN}}
[/then]
[/if]
#enddef
#define MW_TERRAIN_CHECKER_2 TERRAIN_1 TERRAIN_2 LETTERS
[if]
[have_location]
x,y=$x1,$y1
terrain={LETTERS}
[/have_location]
[then]
[if]
{BOB_CONDITION unit.defense.{TERRAIN_1} less_than_equal_to $unit.defense.{TERRAIN_2}}
[then]
{VARIABLE_OP chance_to_hit format $unit.defense.{TERRAIN_1}}
[/then]
[else]
{VARIABLE_OP chance_to_hit format $unit.defense.{TERRAIN_2}}
[/else]
[/if]
[/then]
[/if]
#enddef
#define MW_DEFENSE_CALCULATOR
# Basic Terrain
{MW_TERRAIN_CHECKER deep_water "Wo"}
{MW_TERRAIN_CHECKER shallow_water "Ww,Ww^Vm"}
{MW_TERRAIN_CHECKER swamp_water "Ss,Ss^Vm"}
{MW_TERRAIN_CHECKER grassland "Gg,Ggf,Gs ,Rd,Re,Rr,Rp,Re^Gvs,Gg^Wm"}
{MW_TERRAIN_CHECKER sand "Dd,Ds,Dd^Dc"}
{MW_TERRAIN_CHECKER forest "Gg^Fet,Gs^Fp,Gs^Ft"}
{MW_TERRAIN_CHECKER hills "Dd^Dr,Hh"}
{MW_TERRAIN_CHECKER mountains "Md,Mm"}
{MW_TERRAIN_CHECKER village "Aa^Vea,Gg^Ve,Aa^Vha,Gg^Vh,Gs^Vht"}
{MW_TERRAIN_CHECKER castle "Ce,Ch,Cv,Cud,Chr,Ke,Kh,Kv,Kud,Khr"}
{MW_TERRAIN_CHECKER cave "Uu,Uu^Ii"}
{MW_TERRAIN_CHECKER tundra "Ai,Aa"}
{MW_TERRAIN_CHECKER canyon "Qxu,Ql,Qlf"}
{MW_TERRAIN_CHECKER cavewall "Mm^Xm,Md^Xm,Xu,Xv"}
{MW_TERRAIN_CHECKER fungus "Uu^Uf,Re^Uf"}
# Bridges
{MW_TERRAIN_CHECKER_2 deep_water grassland "Wo^Bw|,Wo^Bw/,Wo^Bw\"}
{MW_TERRAIN_CHECKER_2 shallow_water grassland "Ww^Bw\,Ww^Bw|,Ww^Bw/"}
{MW_TERRAIN_CHECKER_2 swamp_water grassland "Ss^Bw\,Ss^Bw|,Ss^Bw/"}
# Castles
{MW_TERRAIN_CHECKER_2 shallow_water castle "Chw,Khw"}
{MW_TERRAIN_CHECKER_2 swamp_water castle "Chs,Khs"}
# Villages
{MW_TERRAIN_CHECKER_2 swamp_water village "Ss^Vhs"}
{MW_TERRAIN_CHECKER_2 cave village "Uu^Vu,Uu^Vud"}
{MW_TERRAIN_CHECKER_2 hills village "Hh^Vhh,Ha^Vhha"}
{MW_TERRAIN_CHECKER_2 mountains village "Mm^Vhh"}
# Hills - cave,sand,snow
{MW_TERRAIN_CHECKER_2 cave hills "Uh,Uh^Ii"}
{MW_TERRAIN_CHECKER_2 sand hills "Hd"}
{MW_TERRAIN_CHECKER_2 tundra hills "Ha"}
# River-ford
{MW_TERRAIN_CHECKER_2 grassland shallow_water "Wwf"}
# Snow-forest
{MW_TERRAIN_CHECKER_2 tundra forest "Aa^Fpa"}
#enddef
My current projects:
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves
MP pirate campaign: The Altaz Mariners
RPG sequel: Return to Trent
MP stealth campaign: Den of Thieves