stk-code_catmod/data/powerup.xml
hiker fc151bb262 Added Alayans scaled weight factors (sums now 1000 instead of 200),
which makes it easier to visualise the values.
2018-08-02 18:06:45 +10:00

245 lines
15 KiB
XML

<?xml version="1.0"?>
<powerup>
<item name="zipper" icon="zipper_collect.png" />
<item name="bowling" icon="bowling-icon.png"
model="bowling.spm" speed="4.0"
min-height="0.2" max-height="1.0"
force-updown="1" force-to-target="40"
max-distance="25" />
<item name="bubblegum" icon="bubblegum-icon.png" />
<item name="cake" icon="cake-icon.png"
model="cake.spm" speed="50"
min-height="0.2" max-height="1.0"
force-updown="25" max-distance="90" />
<item name="anchor" icon="anchor-icon.png"
model="anchor.spm" />
<item name="switch" icon="swap-icon.png" />
<item name="swatter" icon="swatter-icon.png" />
<!-- interval: How long a single bounce takes.
max-height: The maximum height of a bounce.
min-height: Unused mostly, but defines implicitly
the starting height (as average of
max and min height).
target-distance: When the ball is closer than
this to the target, it will aim
directly at the target.
target-max-angle: Once the ball is aiming for its
target, it can at most change the angle
this much per second(!).
min-interpolation-distance: how far the control
points (which are center of squads)
must be from each other. A large value
allows smoother turning (no abrupt
change of direction), but a large
value can result in the ball being
off track (e.g. a value of 30 results
on the ramp in sand track that the
ball goes to the left of the tunnel,
bouncing on the pyramid). Quite
catastrophal on the startrack and
skyline).
squash-slowdown: How much karts that are
squashed are slowed down.
squash-duration: How long karts stay squashed.
delete-timer: How long before the ball is removed
if no suitable target is found.
early-target-factor: the rubber ball can use the
relative position of the kart to the
center of the track for improved targeting
(i.e. the ball will align its relative
position to the center of the track early).
This allows a lower target-distance to be
used since the ball is better aligned,
hopefully reducing the frequency of
tunneling.
-->
<item name="rubber-ball" icon="rubber_ball-icon.png"
model="rubber_ball.spm" speed="35.0"
scale="1 1 1" interval="1"
max-height="4.0" min-height="0"
fast-ping-distance="50"
early-target-factor="1"
target-distance="15" target-max-angle = "90"
min-interpolation-distance="5"
squash-slowdown="0.5" squash-duration="2"
delete-time="5.0" max-height-difference="10" />
<item name="parachute" icon="parachute-icon.png"
model="parachute.spm" />
<item name="plunger" icon="plunger-icon.png"
model="plunger.spm" speed="35"
min-height="0.2" max-height="1.0"
force-updown="35" force-to-target="15"
max-distance="25" />
<!-- This defines the probabilities to get each type of item depending on
the position of the kart and number of karts in the race.
For each race mode (race, time-trial, soccer etc) there is one
weight-list entry (e.g. race-weight-list etc). Each of those lists
contains a list (1 or more entries) of weights for a certain number
of karts in the race. This offers two advantages:
1) the frequency of global items (like switch) can be reduced for
higher number of karts (so that game play does not get dominated
by frequent global items)
2) to take into account the balance changes when the number of karts
is different. Typically, the higher the number of karts, the
stronger the difference in "powerup quality" between the first and
the last.
Each of those weight tags is stored into a WeightsData object.
At race time, a new WeightsData object is created from the list for
the current race type depending on number of karts in the race.
If there is a WeightsData object for the same kart number, it is
copied, otherwise an interpolated WeightsData object is created
from the two WeightsData objects that are closest to the current
number of karts. If there is only one WeightsData for the race
mode, it is used for any number of karts.
Each Weights entry itself can contain one or more weight tags:
The first entry is for the kart with rank 1, the last weight entry
for the last kart. The remaining entries are evenly distributed
between the first and last kart (exception is follow-the-leader,
where the first entry is for the leader, the second entry for
the first non-leader kart, and the last entry for the last
kart. So the 3rd till second-last entries are distributed
evenly instead of the 2nd till second-last).
For example, with 5 karts and 5 entries those points will
match positions 2, 3, 4. With 10 karts (and 5 entries), they
will correspond to 3,25 ; 5,5 ; 7,75. It is not an issue if
the kart number is not an integer value, since the actual
weights will be interpolated.
The order of items must correspond to powerup_manager.hpp.
Each weight entry contains two list of integer values that
represent the probability that a particular item is picked
(the integer weight is divided by the sum of all weights to
get the actual probability). The first line (single=...)
corresponds to the weights of getting one specific item,
the second line (multi) to the weight at which it will yeld
a triple item rather than a single one. The probability to get
an item is its weight divided by the sum of weights of all items
(single AND multi). It is recommended to keep that sum equal
to 1000 to easily keep track of probabilities.
'Global' items which affect all karts (switch, parachute) should
be quite rare, since otherwise the item might be used
too often (compared with many items which will only
affect a karts or two) - especially with increasing number of
karts in a race.
The distribution should give more similar items to different ranks
when there are few karts, but have more important differences when
there are more karts. -->
<race-weight-list>
<weights num-karts="1">
<!-- The entry for '1' kart lists more than a single weight
because the others are used for interpolation when
there are two karts or more. -->
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="140 0 300 100 225 75 160 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="150 0 295 130 200 70 135 0 0 0"
multi =" 0 0 20 0 0 0 0 0 0 0" />
<weight single ="150 0 310 135 180 65 135 0 0 0"
multi =" 0 0 25 0 0 0 0 0 0 0" />
<weight single ="155 0 280 180 170 60 125 0 0 0"
multi =" 0 0 30 0 0 0 0 0 0 0" />
<weight single ="170 0 180 275 150 50 85 0 0 0"
multi =" 0 0 90 0 0 0 0 0 0 0" />
</weights>
<weights num-karts="5">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="130 80 260 75 230 60 165 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="150 135 240 125 140 50 135 0 0 0"
multi =" 0 0 25 0 0 0 0 0 0 0" />
<weight single ="150 135 225 135 135 45 135 15 0 0"
multi =" 0 0 25 0 0 0 0 0 0 0" />
<weight single ="160 120 140 190 110 35 100 80 30 0"
multi =" 0 0 35 0 0 0 0 0 0 0" />
<weight single ="140 105 45 225 0 30 0 50 90 0"
multi =" 40 0 80 175 20 0 0 0 0 0" />
</weights>
<weights num-karts="9">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="120 60 290 50 270 40 170 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="145 150 225 120 160 35 135 0 0 0"
multi =" 0 0 30 0 0 0 0 0 0 0" />
<weight single ="150 130 205 140 130 30 130 50 0 0"
multi =" 0 0 35 0 0 0 0 0 0 0" />
<weight single ="165 115 130 225 70 25 80 60 40 0"
multi =" 0 0 60 0 30 0 0 0 0 0" />
<weight single ="100 80 35 185 0 15 0 20 75 0"
multi =" 90 0 90 290 20 0 0 0 0 0" />
</weights>
<weights num-karts="14">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="110 40 320 25 300 30 175 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="140 155 240 110 170 20 135 0 0 0"
multi =" 0 0 30 0 0 0 0 0 0 0" />
<weight single ="150 125 210 145 145 15 120 50 0 0"
multi =" 0 0 40 0 0 0 0 0 0 0" />
<weight single ="135 105 115 220 60 15 70 40 30 0"
multi =" 40 0 80 40 50 0 0 0 0 0" />
<weight single =" 90 70 15 175 0 0 0 0 50 0"
multi ="120 0 125 325 30 0 0 0 0 0" />
</weights>
<weights num-karts="20">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="100 0 370 0 330 20 180 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="135 160 240 100 185 15 135 0 0 0"
multi =" 0 0 30 0 0 0 0 0 0 0" />
<weight single ="150 120 200 150 140 10 105 50 0 0"
multi =" 0 0 50 0 25 0 0 0 0 0" />
<weight single ="125 90 100 250 50 10 50 30 15 0"
multi =" 50 0 100 50 80 0 0 0 0 0" />
<weight single =" 75 60 0 125 0 0 0 0 35 0"
multi ="150 0 155 400 0 0 0 0 0 0" />
</weights>
</race-weight-list>
<ftl-weight-list>
<weights num-karts="1">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<!-- This is the entry for the leader: -->
<weight single ="35 0 25 35 25 15 25 0 0 0"
multi ="20 0 0 20 0 0 0 0 0 0" />
<!-- This is the entry for the first non-leader karts: -->
<weight single ="25 0 60 25 58 2 30 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="35 0 55 35 25 3 25 0 0 0"
multi =" 0 0 10 0 12 0 0 0 0 0" />
<weight single ="25 0 40 45 15 5 15 10 5 0"
multi ="10 0 15 15 0 0 0 0 0 0" />
<!-- This is the entry for the last kart: -->
<weight single ="20 0 15 25 0 0 0 0 15 0"
multi ="20 0 25 80 0 0 0 0 0 0" />
</weights>
</ftl-weight-list>
<battle-weight-list>
<weights num-karts="1">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="10 30 60 0 0 10 30 0 0 0"
multi =" 0 0 5 0 0 0 0 0 0 0" />
</weights>
</battle-weight-list>
<soccer-weight-list>
<weights num-karts="1">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single =" 0 30 60 0 0 10 30 0 0 0"
multi =" 0 0 5 0 0 0 0 0 0 0" />
</weights>
</soccer-weight-list>
<tutorial-weight-list>
<weights num-karts="1">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single =" 0 0 0 0 0 0 0 0 0 0"
multi =" 0 0 100 0 0 0 0 0 0 0" />
</weights>
</tutorial-weight-list>
</powerup>