utbs: use [object] for dehydration implementation

this in particular makes it compatible the umc code that uses [remove_object]
It also makes the implementation a bit easier since we don't have to compute
things manually anymore, also duration=scenario takes care of cleanup at
scenario end.
This commit is contained in:
gfgtdf 2019-08-16 11:47:11 +02:00
parent f4e7f417e4
commit a86df6c984

View file

@ -54,7 +54,6 @@ Hd, Dd*, Dd^E*, Rd #enddef
[for]
array=dehydrating_units
[do]
{VARIABLE dehydrating_units[$i].resting no}
[if]
[have_unit]
@ -72,6 +71,7 @@ Hd, Dd*, Dd^E*, Rd #enddef
[/have_unit]
[then]
{VARIABLE dehydrating_units[$i].resting no}
{VARIABLE dehydrating_units[$i].status.dehydration_slowed_by_healer yes}
[unstore_unit]
@ -81,65 +81,40 @@ Hd, Dd*, Dd^E*, Rd #enddef
[/then]
[else]
[for]
array=dehydrating_units[$i].attack
variable=j
[do]
# if dehydrating for the first time, store the original attack stats
[if]
[variable]
name=dehydrating_units[$i].status.dehydrated
not_equals=yes
[/variable]
[then]
{VARIABLE dehydrating_units[$i].variables.original_attack[$j].damage $dehydrating_units[$i].attack[$j].damage}
[/then]
[/if]
# the attack's damage drops by 1 point, but cannot drop to zero
[if]
[variable]
name=dehydrating_units[$i].attack[$j].damage
greater_than=1
[/variable]
[then]
{VARIABLE_OP dehydrating_units[$i].attack[$j].damage sub 1}
[/then]
[/if]
[/do]
[/for]
# units hitpoints drop by $dehydration_loss, but cannot kill it
[if]
[variable]
name=dehydrating_units[$i].hitpoints
greater_than=$dehydration_loss
[/variable]
[then]
{VARIABLE_OP dehydrating_units[$i].hitpoints sub $dehydration_loss}
[/then]
[else]
{VARIABLE dehydrating_units[$i].hitpoints 1}
[/else]
[/if]
{VARIABLE dehydrating_units[$i].status.dehydrated yes}
[unstore_unit]
variable=dehydrating_units[$i]
find_vacant=no
[modify_unit]
[filter]
id=$dehydrating_units[$i].id
[/filter]
## this object might be obtained multiple times, but that shouldn't be a problem.
[object]
duration=scenario
id="dehydration_effect"
[effect]
apply_to=attack
formula="damage>1"
increase_damage=-1
[/effect]
[/object]
[object]
duration=scenario
id="dehydration_overlay"
[effect]
apply_to=overlay
add="misc/dehydration-icon.png"
[/effect]
[/object]
hitpoints="$(max(1, $dehydrating_units[$i].hitpoints - $dehydration_loss))"
resting=no
[status]
dehydrated=yes
[/status]
[/modify_unit]
[floating_text]
x=$dehydrating_units[$i].x
y=$dehydrating_units[$i].y
text= _ "thirst"
{COLOR_HARM}
[/unstore_unit]
[unit_overlay]
x,y=$dehydrating_units[$i].x,$dehydrating_units[$i].y
image=misc/dehydration-icon.png
[/unit_overlay]
[/floating_text]
[/else]
[/if]
[/do]
@ -169,29 +144,32 @@ Hd, Dd*, Dd^E*, Rd #enddef
[/variable]
[then]
[for]
array=hydrating_units[$i].attack
variable=j
[do]
{VARIABLE hydrating_units[$i].attack[$j].damage $hydrating_units[$i].variables.original_attack[$j].damage}
[/do]
[/for]
[remove_object]
x,y=$hydrating_units[$i].x,$hydrating_units[$i].y
object_id=dehydration_effect
[/remove_object]
[/then]
[/if]
{VARIABLE hydrating_units[$i].status.dehydrated no}
[unstore_unit]
variable=hydrating_units[$i]
find_vacant=no
[modify_unit]
[filter]
id=$hydrating_units[$i].id
[/filter]
[status]
dehydrated=no
[/status]
[/modify_unit]
[floating_text]
x=$hydrating_units[$i].x
y=$hydrating_units[$i].y
text= _ "refreshed"
{COLOR_HEAL}
[/unstore_unit]
[/floating_text]
[remove_unit_overlay]
[remove_object]
x,y=$hydrating_units[$i].x,$hydrating_units[$i].y
image=misc/dehydration-icon.png
[/remove_unit_overlay]
object_id=dehydration_overlay
[/remove_object]
[/do]
[/for]
@ -282,62 +260,9 @@ Hd, Dd*, Dd^E*, Rd #enddef
advance=no
[/unstore_unit]
[remove_unit_overlay]
[remove_object]
x,y=$unit.x,$unit.y
image=misc/dehydration-icon.png
[/remove_unit_overlay]
[/event]
[event]
name=victory
# Rehydrate all units for the next scenario
# Do this more quietly than usual...
[store_unit]
[filter]
side=1
[/filter]
kill=no
variable=hydrating_units
[/store_unit]
[for]
array=hydrating_units
[do]
[if]
[variable]
name=hydrating_units[$i].status.dehydrated
equals=yes
[/variable]
[then]
[for]
array=hydrating_units[$i].attack
variable=j
[do]
{VARIABLE hydrating_units[$i].attack[$j].damage $hydrating_units[$i].variables.original_attack[$j].damage}
[/do]
[/for]
[/then]
[/if]
{VARIABLE hydrating_units[$i].status.dehydrated no}
[unstore_unit]
variable=hydrating_units[$i]
find_vacant=no
[/unstore_unit]
[remove_unit_overlay]
id=$hydrating_units[$i].id
image=misc/dehydration-icon.png
[/remove_unit_overlay]
[/do]
[/for]
# Clear related variables
{CLEAR_VARIABLE hydrating_units}
{CLEAR_VARIABLE dehydration_loss}
object_id=dehydration_overlay
[/remove_object]
[/event]
#enddef