stk-code_catmod/data/powerup.xml

253 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(!).
time-between-balls: Reduces the frequency with which rubber
balls are found to 1 every 'timer' seconds.
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"
time-between-balls="15"
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 200 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 ="28 0 60 20 45 15 32 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="30 0 59 26 40 14 27 0 0 0"
multi =" 0 0 4 0 0 0 0 0 0 0" />
<weight single ="30 0 62 27 36 13 27 0 0 0"
multi =" 0 0 5 0 0 0 0 0 0 0" />
<weight single ="31 0 56 36 34 12 25 0 0 0"
multi =" 0 0 6 0 0 0 0 0 0 0" />
<weight single ="34 0 36 55 30 10 17 0 0 0"
multi =" 0 0 18 0 0 0 0 0 0 0" />
</weights>
<weights num-karts="5">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="26 16 52 15 46 12 33 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="30 27 48 25 28 10 27 0 0 0"
multi =" 0 0 5 0 0 0 0 0 0 0" />
<weight single ="30 27 45 27 27 9 27 3 0 0"
multi =" 0 0 5 0 0 0 0 0 0 0" />
<weight single ="32 24 28 38 22 7 20 16 6 0"
multi =" 0 0 7 0 0 0 0 0 0 0" />
<weight single ="28 21 9 45 0 6 0 10 18 0"
multi =" 8 0 16 35 4 0 0 0 0 0" />
</weights>
<weights num-karts="9">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="24 12 58 10 54 8 34 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="29 30 45 24 32 7 27 0 0 0"
multi =" 0 0 6 0 0 0 0 0 0 0" />
<weight single ="30 26 41 28 26 6 26 10 0 0"
multi =" 0 0 7 0 0 0 0 0 0 0" />
<weight single ="33 23 26 45 14 5 16 12 8 0"
multi =" 0 0 12 0 6 0 0 0 0 0" />
<weight single ="20 16 7 37 0 3 0 4 15 0"
multi ="18 0 18 58 4 0 0 0 0 0" />
</weights>
<weights num-karts="14">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="22 8 64 5 60 6 35 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="28 31 48 22 34 4 27 0 0 0"
multi =" 0 0 6 0 0 0 0 0 0 0" />
<weight single ="30 25 42 29 29 3 24 10 0 0"
multi =" 0 0 8 0 0 0 0 0 0 0" />
<weight single ="27 21 23 44 12 3 14 8 6 0"
multi =" 8 0 16 8 10 0 0 0 0 0" />
<weight single ="18 14 3 35 0 0 0 0 10 0"
multi ="24 0 25 65 6 0 0 0 0 0" />
</weights>
<weights num-karts="20">
<!-- bubble cake bowl zipper plunger switch swattr rubber para anvil -->
<weight single ="20 0 74 0 66 4 36 0 0 0"
multi =" 0 0 0 0 0 0 0 0 0 0" />
<weight single ="27 32 48 20 37 3 27 0 0 0"
multi =" 0 0 6 0 0 0 0 0 0 0" />
<weight single ="30 24 40 30 28 2 21 10 0 0"
multi =" 0 0 10 0 5 0 0 0 0 0" />
<weight single ="25 18 20 50 10 2 10 6 3 0"
multi ="10 0 20 10 16 0 0 0 0 0" />
<weight single ="15 12 0 25 0 0 0 0 7 0"
multi ="30 0 31 80 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>