EI: Redesigned the lich identity revealing system, and other tweaks

Instead of letting the RNG determine how quickly you find Mal-Ravanal, you now have to either kill X of the liches or reveal all of them by attacking them. If revealed by killing X liches, he will appear as the remaining lich farthest away from Dacyn. As a counterbalance, the liches are no longer given extra gold for each loss. Most likely requires some more balancing, as well as dialogue improvement.
This commit is contained in:
ln-zookeeper 2017-02-23 14:20:09 +02:00
parent afb7715258
commit d22711af3d

View file

@ -44,6 +44,7 @@
name= _ "?"
side=2
canrecruit=yes
facing=sw
[variables]
random_lich=yes
[/variables]
@ -61,6 +62,7 @@
name= _ "?"
side=3
canrecruit=yes
facing=sw
[variables]
random_lich=yes
[/variables]
@ -78,6 +80,7 @@
name= _ "?"
side=4
canrecruit=yes
facing=nw
[variables]
random_lich=yes
[/variables]
@ -95,6 +98,7 @@
name= _ "?"
side=5
canrecruit=yes
facing=nw
[variables]
random_lich=yes
[/variables]
@ -112,6 +116,7 @@
name= _ "?"
side=6
canrecruit=yes
facing=ne
[variables]
random_lich=yes
[/variables]
@ -129,6 +134,7 @@
name= _ "?"
side=7
canrecruit=yes
facing=se
[variables]
random_lich=yes
[/variables]
@ -146,6 +152,7 @@
name= _ "?"
side=8
canrecruit=yes
facing=se
[variables]
random_lich=yes
[/variables]
@ -160,8 +167,15 @@
# wmllint: recognize Mal-Ravanal
[event]
name=prestart
{VARIABLE liches_to_kill {ON_DIFFICULTY 2 3 4}}
[objectives]
side=1
[objective]
description= _ "Kill $liches_to_kill liches to reveal Mal-Ravanal"
condition=win
[/objective]
[objective]
description= _ "Defeat Mal-Ravanal while Dacyn is nearby"
condition=win
@ -215,28 +229,153 @@
speaker=Dacyn
message= _ "I can sense Mal-Ravanal is here somewhere... When we attack him I will need to be nearby with the Null Stone to prevent his teleportation. We cannot afford to let him escape."
[/message]
{VARIABLE lich_death_bonus 25}
{VARIABLE lich_name_0 _"Mal-Hadanak"}
{VARIABLE lich_name_1 _"Mal-Katklagad"}
{VARIABLE lich_name_2 _"Mal-Xaskanat"}
{VARIABLE lich_name_3 _"Mal-Akranbral"}
{VARIABLE lich_name_4 _"Mal-Larakan"}
{VARIABLE lich_name_5 _"Mal-Drakanal"}
{VARIABLE lich_name_6 _"Mal-Ravanal"}
[scroll_to]
x,y=51,1
[/scroll_to]
[delay]
time=100
[/delay]
[scroll_to]
x,y=51,25
[/scroll_to]
[delay]
time=100
[/delay]
[scroll_to]
x,y=1,25
[/scroll_to]
[delay]
time=100
[/delay]
[scroll_to]
x,y=1,1
[/scroll_to]
[delay]
time=100
[/delay]
{VARIABLE lich_quote_0 _"You dare to attack me? Now you will pay!"}
{VARIABLE lich_quote_1 _"I will enjoy watching you suffer!"}
{VARIABLE lich_quote_2 _"Death will only be the beginning of your torment!"}
{VARIABLE lich_quote_3 _"You will serve me in death!"}
{VARIABLE lich_quote_4 _"Allow me to free you from your wretched existence!"}
{VARIABLE lich_quote_5 _"My master is merely toying with you!"}
[message]
speaker=Gweddry
message= _ "But how? We don't know which one of them he is."
[/message]
[message]
speaker=Dacyn
message= _ "They are channeling some dark magic to hide themselves. We have to kill some of them to break the spell."
[/message]
[set_variables]
name=random_liches
[value]
name= _ "Mal-Hadanak"
quote= _ "You dare to attack me? Now you will pay!"
[/value]
[value]
name= _ "Mal-Katklagad"
quote= _ "I will enjoy watching you suffer!"
[/value]
[value]
name= _ "Mal-Xaskanat"
quote= _ "Death will only be the beginning of your torment!"
[/value]
[value]
name= _ "Mal-Akranbral"
quote= _ "You will serve me in death!"
[/value]
[value]
name= _ "Mal-Larakan"
quote= _ "Allow me to free you from your wretched existence!"
[/value]
[value]
name= _ "Mal-Drakanal"
quote= _ "My master is merely toying with you!"
[/value]
[/set_variables]
[store_unit]
[filter]
type=Lich
canrecruit=yes
[/filter]
kill=no
variable=liches
[/store_unit]
[foreach]
array=liches
[do]
[object]
silent=yes
[filter]
x,y=$this_item.x,$this_item.y
[/filter]
[effect]
apply_to=halo
halo="halo/holy/light-beam-5.png~CROP(0,0,150,500)~SCALE(108,144)~CS(-159,-255,-159)~MASK(terrain/misc/smoke-A[01~12].png~SCALE(108,144)):100"
[/effect]
[/object]
[/do]
[/foreach]
{CLEAR_VARIABLE liches}
[/event]
# The odds of Mal-Ravanal turning up are roughly
# 0%, 3%, 7%, 13%, 22%, 42%, 100% for each respective
# lich revealed (assuming he hasn't already).
# Reveals the primary unit as Mal-Ravanal
[event]
name=reveal ravanal
[modify_unit]
[filter]
find_in=unit
[/filter]
type=Lich Lord
id=Mal-Ravanal
name= _ "Mal-Ravanal"
profile=portraits/mal-ravanal.png
hitpoints=80
[variables]
random_lich=no
[/variables]
[/modify_unit]
{TEAM_COLOR_OVERRIDE id=Mal-Ravanal blue}
[object]
silent=yes
[filter]
id=Mal-Ravanal
[/filter]
[effect]
apply_to=halo
halo=""
[/effect]
[/object]
[allow_recruit]
side=$unit.side
type="Bone Shooter,Revenant,Wraith,Shadow,Nightgaunt,Spectre,Draug,Banebow"
[/allow_recruit]
[gold]
amount=100
side=$unit.side
[/gold]
[message]
speaker=Mal-Ravanal
message=_"I shall destroy you personally!"
[/message]
[/event]
# When attacking a random lich, reveal it (the last one will be Mal-Ravanal)
[event]
name=attack
first_time_only=no
@ -253,122 +392,270 @@
[/filter_wml]
[/filter_second]
{RANDOM 0..5}
[filter_condition]
[have_unit]
[filter_wml]
[variables]
random_lich=yes
[/variables]
[/filter_wml]
[while]
[variable]
name=lich_name_$random|
equals="used"
[/variable]
[not]
x,y=$x2,$y2
[/not]
[/have_unit]
[/filter_condition]
[do]
{RANDOM 0..6}
[/do]
[/while]
{RANDOM "0..$($random_liches.length - 1)"}
# According to the WML guide, there is a chance
# (Roughly 1e-81 at best) that we will exit the
# while loop without a lich name. In that very
# unlikely event, go ahead and spawn Mal-Ravanal
{VARIABLE second_unit.name $lich_name_$random||}
{VARIABLE second_unit.name $random_liches[$random].name}
{VARIABLE second_unit.variables.random_lich no}
[unstore_unit]
variable=second_unit
find_vacant=no
[/unstore_unit]
[object]
silent=yes
[filter]
find_in=second_unit
[/filter]
[effect]
apply_to=halo
halo=""
[/effect]
[/object]
[message]
speaker=second_unit
message=$random_liches[$random].quote
[/message]
{CLEAR_VARIABLE random_liches[$random]}
[/event]
# If only one random lich remains (all others have been attacked but not
# enough of them killed to break the spell), then just reveal Mal-Ravanal
# since the player already knows where he is
[event]
name=attack end
[filter_condition]
[have_unit]
[filter_wml]
[variables]
random_lich=yes
[/variables]
[/filter_wml]
count=1
[/have_unit]
[/filter_condition]
[fire_event]
name=reveal ravanal
[primary_unit]
[filter_wml]
[variables]
random_lich=yes
[/variables]
[/filter_wml]
[/primary_unit]
[/fire_event]
[/event]
# Reveal remaining liches when X of them have been killed
[event]
name=die
first_time_only=no
[filter]
canrecruit=yes
type_tree=Lich
[/filter]
{VARIABLE_OP liches_killed add 1}
[if]
[variable]
name=lich_name_$random
equals= _ "Mal-Ravanal" # wmllint: ignore
name=liches_killed
greater_than_equal_to=$liches_to_kill
[/variable]
[or]
[variable]
name=lich_name_$random
equals="used" # wmllint: ignore
[/variable]
[/or]
[then]
[modify_unit]
[sound]
name=magic-dark-big-miss.ogg
[/sound]
[color_adjust]
red,green,blue=127,64,127
[/color_adjust]
[delay]
time=100
[/delay]
[color_adjust]
red,green,blue=-127,-191,-127
[/color_adjust]
[delay]
time=100
[/delay]
[color_adjust]
red,green,blue=127,64,127
[/color_adjust]
[delay]
time=100
[/delay]
[color_adjust]
red,green,blue=0,0,0
[/color_adjust]
[message]
speaker=Owaec
message= _ "Their spell is broken! There he is!"
[/message]
[store_unit]
[filter]
x,y=$second_unit.x, $second_unit.y
[filter_wml]
[variables]
random_lich=yes
[/variables]
[/filter_wml]
[not]
x,y=$x2,$y2
[/not]
[/filter]
type=Lich Lord
id=Mal-Ravanal
name= _ "Mal-Ravanal"
profile=portraits/mal-ravanal.png
hitpoints=80
[variables]
random_lich=no
[/variables]
[/modify_unit]
{TEAM_COLOR_OVERRIDE id=Mal-Ravanal blue}
kill=no
variable=remaining_random_liches
[/store_unit]
[allow_recruit]
side=$second_unit.side
type="Bone Shooter,Revenant,Wraith,Shadow,Nightgaunt,Spectre,Draug,Banebow"
[/allow_recruit]
{VARIABLE longest_path_to_dacyn 0}
{VARIABLE farthest_lich_side ""}
[gold]
amount=100
side=$second_unit.side
[/gold]
[foreach]
array=remaining_random_liches
[message]
speaker=Mal-Ravanal
message=_"I shall destroy you personally!"
[/message]
[do]
[find_path]
[traveler]
canrecruit=yes
side=$this_item.side
[/traveler]
[destination]
[filter]
id=Dacyn
[/filter]
[/destination]
allow_multiple_turns=yes
check_zoc=no
variable=path_to_dacyn
[/find_path]
[if]
[variable]
name=longest_path_to_dacyn
less_than=$path_to_dacyn.hexes
[/variable]
[then]
{VARIABLE longest_path_to_dacyn $path_to_dacyn.hexes}
{VARIABLE farthest_lich_side $this_item.side}
[/then]
[/if]
[/do]
[/foreach]
[scroll_to_unit]
canrecruit=yes
side=$farthest_lich_side
[/scroll_to_unit]
[fire_event]
name=reveal ravanal
[primary_unit]
canrecruit=yes
side=$farthest_lich_side
[/primary_unit]
[/fire_event]
[store_unit]
[filter]
find_in=remaining_random_liches
[not]
side=$farthest_lich_side
[/not]
[/filter]
kill=no
variable=remaining_random_liches
[/store_unit]
[foreach]
array=remaining_random_liches
[do]
{RANDOM "0..$($random_liches.length - 1)"}
{VARIABLE this_item.name $random_liches[$random].name}
{VARIABLE this_item.variables.random_lich no}
[unstore_unit]
variable=this_item
find_vacant=no
[/unstore_unit]
[object]
silent=yes
[filter]
x,y=$this_item.x,$this_item.y
[/filter]
[effect]
apply_to=halo
halo=""
[/effect]
[/object]
{CLEAR_VARIABLE random_liches[$random]}
[/do]
[/foreach]
{CLEAR_VARIABLE longest_path_to_dacyn,farthest_lich_side,path_to_dacyn,liches_killed,remaining_random_liches}
[/then]
[else]
[unstore_unit]
variable=second_unit
find_vacant=no
[/unstore_unit]
[message]
speaker=second_unit
message=$lich_quote_$random||
[/message]
[/else]
[/if]
[gold]
amount=50
side=$second_unit.side
[/gold]
{VARIABLE lich_name_$random| "used"}
[/event]
#make sure the undead leaders don't run out of troops too easily...
# Don't allow the liches to be baited out of their castles
[event]
name=die
name=turn refresh
first_time_only=no
[filter]
side=2,3,4,5,6,7,8
[/filter]
[filter_condition]
[variable]
name=side_number
greater_than=1
[/variable]
[/filter_condition]
[gold]
side=$unit.side
amount=$unit.cost
[/gold]
[/event]
[modify_unit]
[filter]
side=$side_number
canrecruit=yes
[/filter]
#discourage players from just killing all the liches...
[event]
name=die
first_time_only=no
[filter]
side=2,3,4,5,6,7,8
type=Lich
[/filter]
[gold]
side=2,3,4,5,6,7,8
amount=$lich_death_bonus
[/gold]
{VARIABLE_OP lich_death_bonus add 25}
moves=0
[/modify_unit]
[/event]
# Enemy unit reaches the Weldyn keep