How to find the -real- max_hitpoints?
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.
- Ken_Oh
- Moderator Emeritus
- Posts: 2178
- Joined: February 6th, 2006, 4:03 am
- Location: Baltimore, Maryland, USA
How to find the -real- max_hitpoints?
I can't find a unit's real max hitpoints as a value. It's a variable that should be there, but isn't.
Here's what a Strong and Resilient Spearman looks like:
But here is a Quick and Intelligent one:
This causes some problems when you're trying to alter units, as Bob the Mighty has found out: http://www.wesnoth.org/forum/viewtopic.php?t=17638
I'm running into similar problems now that I'm trying to code healing abilities. The problem is, unlike Bob's scenario, I want my healing to be able to interact with canrecruit=0 units, with traits and potential AMLAs.
I don't know a whole lot about programming, but it just seems really odd to have a value that you can see on the screen yet you can't find in the code.
Anyone have any idea how to get around this? Is that variable hidden somewhere?
Here's what a Strong and Resilient Spearman looks like:
Code: Select all
[unit]
hitpoints="42"
id="Spearman"
max_hitpoints="36"
Code: Select all
[unit]
hitpoints="34"
id="Spearman"
max_hitpoints="36"
I'm running into similar problems now that I'm trying to code healing abilities. The problem is, unlike Bob's scenario, I want my healing to be able to interact with canrecruit=0 units, with traits and potential AMLAs.
I don't know a whole lot about programming, but it just seems really odd to have a value that you can see on the screen yet you can't find in the code.
Anyone have any idea how to get around this? Is that variable hidden somewhere?
Well...you could store the units hitpoints= on recruit, scenario start or whenever you know it's in full health.
Also, you could store the units hitpoints=, use an [object] to heal it to full, check/store the hitpoints= then, and revert them back to the original value.
But yes, I'd agree that it'd be best if these things were directly available in some key. Same applies for experience=, AFAIK.
Also, you could store the units hitpoints=, use an [object] to heal it to full, check/store the hitpoints= then, and revert them back to the original value.
But yes, I'd agree that it'd be best if these things were directly available in some key. Same applies for experience=, AFAIK.
- Ken_Oh
- Moderator Emeritus
- Posts: 2178
- Joined: February 6th, 2006, 4:03 am
- Location: Baltimore, Maryland, USA
Experience is indeed the same. At least I don't see a need to alter them too much.
I'll try your second suggestion really quick.
EDIT: That works perfectly. Thanks!
Honestly, I was afraid you were going to say that I should figure for all of the modifications myself with a bunch of FOREACH loops to find the true hitpoints. I'm really glad you had a better idea.
I'll try your second suggestion really quick.
EDIT: That works perfectly. Thanks!
Honestly, I was afraid you were going to say that I should figure for all of the modifications myself with a bunch of FOREACH loops to find the true hitpoints. I'm really glad you had a better idea.
-
- Posts: 676
- Joined: July 20th, 2006, 4:45 pm
- Location: Germany
It must if you do it correctly. The game doesn't cheat on WML saves.Clonkinator wrote:The same applies to the movement points, and counting the upgrades to the original value doesn't even work for me...
Author of the unofficial UtBS sequels Invasion from the Unknown and After the Storm.
- Bob_The_Mighty
- Posts: 870
- Joined: July 13th, 2006, 1:15 pm
Ken Oh, could you post an example of WML that you got to work?
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
- Ken_Oh
- Moderator Emeritus
- Posts: 2178
- Joined: February 6th, 2006, 4:03 am
- Location: Baltimore, Maryland, USA
Code: Select all
#define COMMAND_RPG_HEALS
[set_menu_item]
id=white_magic_heals
description="Heal Unit"
[filter_location]
[filter]
[not]
side=$side_number
canrecruit=1
[/not]
[wml_filter]
[not]
healed="1"
[/not]
[/wml_filter]
[/filter]
[/filter_location]
[show_if]
[have_unit]
side=$side_number
canrecruit=1
[wml_filter]
[not]
heals_left="0"
[/not]
[/wml_filter]
[filter_location]
radius=1
x=$x1
y=$y1
[/filter_location]
[/have_unit]
[/show_if]
[command]
[store_unit]
variable=target
[filter]
[not]
side=$side_number
canrecruit=1
[/not]
x=$x1
y=$y1
[/filter]
kill=no
[/store_unit]
[store_unit]
variable=acting_unit
[filter]
side=$side_number
canrecruit=1
[/filter]
[/store_unit]
[object]
silent=yes
[filter]
x,y=$x1,$y1
[/filter]
[effect]
apply_to=hitpoints
heal_full=yes
[/effect]
[/object]
[store_unit]
variable=target_fake
[filter]
[not]
side=$side_number
canrecruit=1
[/not]
x=$x1
y=$y1
[/filter]
[/store_unit]
{VARIABLE_OP acting_unit.heals_left add -1}
{VARIABLE heal_display_init_hp $target.hitpoints}
{VARIABLE_OP target.hitpoints add $acting_unit.heal_value}
{VARIABLE heal_display_hp $acting_unit.heal_value}
[if]
[variable]
name=target.hitpoints
greater_than_equal_to=$target_fake.hitpoints
[/variable]
[then]
{VARIABLE target.hitpoints $target_fake.hitpoints}
{VARIABLE heal_display_hp $target.hitpoints}
{VARIABLE_OP heal_display_hp add -$heal_display_init_hp}
[/then]
[/if]
{VARIABLE target.healed 1}
[sound]
name=heal.wav
[/sound]
[unstore_unit]
variable=target
text=$heal_display_hp
{COLOR_HEAL}
[/unstore_unit]
[unstore_unit]
variable=acting_unit
[/unstore_unit]
[/command]
[/set_menu_item]
EDIT: I guess there isn't too much to break down. Feel free to ask questions if you need.