Difference between revisions of "Check Point"

From Custom Mario Kart
Jump to navigation Jump to search
Line 61: Line 61:
 
[[File:ckpt-convex.png|right|thumb|200px|Use only convex quadrilaterals.]]
 
[[File:ckpt-convex.png|right|thumb|200px|Use only convex quadrilaterals.]]
  
There is a simple and fast algorithm to find out, if a point is interior of a quadrilateral (and of any convex polygon): Find out, if the point is on the correct side of each border line. If only one test fails, the point is outside. It is only an assumption, that [[Mario Kart Wii]] uses this as a similar algorithm, but tests reinforce this assumption.
+
There is a simple and fast algorithm to find out, if a point is interior of a quadrilateral (and of any convex polygon): Find out, if the point is on the correct side of each border line. If only one test fails, the point is outside. It is only an assumption, that [[Mario Kart Wii]] uses this as a similar algorithm, but tests and fixed tracks reinforce this assumption.
  
 
At the picture on the right you see 3 examples for check point quadrilaterals:
 
At the picture on the right you see 3 examples for check point quadrilaterals:
 
* The 2 check point lines of each figure are blue.
 
* The 2 check point lines of each figure are blue.
 
* The 2 additional quadrilateral borders of each figure are cyan.
 
* The 2 additional quadrilateral borders of each figure are cyan.
* The yellow arrows point to the inner side of the quadrilateral.
+
* The yellow arrows point to the correct line side and normally to the inner side of the quadrilateral.
* The green area are the interior points.
+
* The green area are the interior points found by the algorithm.
 
* The red area are interior points, that are not found by the algorithm.
 
* The red area are interior points, that are not found by the algorithm.
  
And now look at the first figure. It is a clearly defined convex quadrilateral. All interior points are on the correct side of all 4 borders (green).
+
And now look at the first figure. It is a clearly defined convex quadrilateral. All interior points are on the correct side of all 4 borders (yellow arrows and green area).
  
The second figure shows a concave quadrilateral with the result, that parts of the quadrilateral are detected as outside (red). The third figure shows an example, where 2 check point line are crossed. Because of the wrong direction of the right border, all points are outside. If a driver enters the red area, a [[Position Jump Bug]] occurs.You can fix both by adding one more check point.
+
The second figure shows a concave quadrilateral with the result, that parts of the quadrilateral are detected as outside (red). The third figure shows an example, where 2 check point line are crossed. Because of the wrong direction of the right border, all points are outside. If a driver enters a red area, a [[Position Jump Bug]] occurs. You can fix both by adding one more check points.
  
Another error is, that 2 corners of the quadrilateral are at the same position or very near. That makes it impossible to calculate a line between the 2 points. Make sure, that the points are at least 20 units away.
+
Another error is, that 2 corners of the quadrilateral are at the same position or very near. That makes it impossible to calculate a line between the 2 points. Make sure, that the points are at least 10 units away.
  
 
The summary is, that '''only convex quadrilateral are usable'''. All other forms results in [[Position Jump Bug]]s.
 
The summary is, that '''only convex quadrilateral are usable'''. All other forms results in [[Position Jump Bug]]s.

Revision as of 23:24, 23 November 2013

This article explains how to define good check points (KMP/CKPT) for a Mario Kart Wii track following the new quadrilateral model.



Introduction

If starting with the analysis of the KMP in 2009, the section CKPT with 4 real values and 4 additional bytes for each point was also found. Very fast it was clear, that these 4 values are the x- and z-coordinates of a left and a right check point. And so the line model for check point was born. The line model says, that a check point is triggered if a driver crosses the line. This line model works very well for the most circumstances.

In 2012, the racing group around Wiimm found situations, that can't be explained with the line model. It was AndyKs idea, that quadrilaterals are important. With beginning of 2013, Wiimm created different test tracks to test the behaviour offline and online. The tests confirmed the quadrilateral model. And this model helped Wiimm to fix the Position Jump Bug of many tracks. The quadrilateral model says, that check point is triggered if a driver enters the check point quadrilateral. A second rule is, that the driver must always stay in a checkpoint quadrilateral. So the quadrilaterals must cover all (normally) reachable parts of the track.

This article will now explain the background of the quadrilateral model and how to set up a good check point section.

What is a check point?

Check points basics
red: road
gray: offroad
black: fall down
blue: check points
cyan: frame of quadrilateral
green: see text

A check point is defined in the CKPT section of the KMP file. Technically a check point (CKPT) is defined as a horizontal line between 2 two-dimensional points and with some attributes (4 bytes; see below). However, each of these lines forms a check point quadrilateral together with its following line. On junctions (last point of a group with more than 1 following group) a check point defines multiple quadrilaterals, one with each following check point.

This quadrilateral model is important to understand the whole concept of check points. For example, take a look at the image on the right. The driving direction is from top to bottom.

CP1 and CP2 together build the first check quadrilateral. To trigger CP1, the player can enter the quadrilateral from 3 sides (green arrows). This is also true for mandatory check points and for the lap counter. It is important that all drivable areas are covered by such quadrilaterals. In the image on the right the quadrilaterals include the complete offroad and also parts of fall down areas. The check quadrilateral in which the player falls down decides which respawn point is used.

After CP2 there is a route spilt. This is managed by 3 groups: The first one with CP1 and CP2 use 2 next links to 2 other groups (CP3a+CP4a and CP3b+CP4b). It is clear that the first quadrilaterals behind the junction must overlap. Generally overlapping quadrilaterals are not problematic as long your create clear routes with only convex quadrilaterals (see below).

Attributes

Each check point defines 4 bytes for 4 attributes:

respawn index
Index into KMP/JGPT for restarting the player if falling down in the related quadrilateral. Incidences to not defined respawn points let the game freeze if activated.
check point type
The type of check point. 0xff defines a normal check point, 0x00 a lap counter and all other values define a mandatory check point (see below).
previous check point
This impact is not discovered yet. It is usually the index of the previous check point, or 0xff for the first point of a group.
next check point
The index of the second check point to build the quadrilateral. It is usually the index of the next check point, or 0xff at junctions (last point of group).


Mandatory check point/quadrilateral

The second attribute (a byte values) defines the type of the check point (quadrilateral). A value of 0xff (-1 as signed number) means, that it is a normal quadrilateral without special meaning. Such quadrilaterals can be omitted by the drivers without side effects.

All other types of quadrilaterals (values 0x00–0xfe) are mandatory or key quadrilaterals. Type 0x00 is not only a mandatory check point, it is also the lap counter (see next section). A driver must trigger these check points in ascend order without missing one. If the driver reaches a mandatory quadrilateral and has missed a prior one, Lakitu appears. A track may define multiple check points with the same type to allow alternative ways.

One detail is important: The system detects the missing of a mandatory check point only, if a higher mandatory check point is reached. If for example mandatory check points 0, 1, 2 and 3 are defined and the drivers triggers 1 and 2, there is no need to trigger 3 before reaching the lap counter. So it's a good idea to place the last mandatory check point in the near before the lap counter.

There is another effect of mandatory check point: If a driver leaves the quadrilaterals, the system assumes its position in the last triggered mandatory quadrilateral. This is also important, if falling down, because the respawn point defined by the last triggered mandatory quadrilateral is then used. So it's a good idea to create (fall down) walls, so that drives can't leave the quadrilaterals.

Lap counter

The lap counter is the special mandatory check point with type 0x00. All players start in lap 0. Every time a player enters a lap counter quadrilateral in driving direction, the lap counter is increased by one. If a player reaches lap 4, its race is terminated. if driving backwards, the lap counter was decreased and negative lap numbers are possible. However, the Wii will only display lap numbers between 1 and 3. This behaviour can be changed by cheats and code modifications.

The lap counter model of above works fine offline. And offline it is no problem to have multiple lap counters. But online, multiple lap counters force a permanent Position Jump Bug.

The following part is a first model/theory to explain the online behaviour of lap counters:

The Wii use to different algorithms for player on the local Wii and players of other Wiis, that are connected via network. These foreign players send only rarely position and status records (all 1/3 seconds for a 12 player game). So the Wii must simulate and estimate the foreign players. Therefore another algorithm is needed and the theory is, that this second algorithm only accept the very first lap counter to increase the laps.
If now the local and a foreign player enter a lap counter quadrilateral, the local lap count is increased, but not the foreign. The result is, that the first So the local player is first, because its lap counter is increased. The really problematic is, that all players get items only planned for the first position.

Setup ≠3 lap races

.......

Convex Quadrilaterals

Use only convex quadrilaterals.

There is a simple and fast algorithm to find out, if a point is interior of a quadrilateral (and of any convex polygon): Find out, if the point is on the correct side of each border line. If only one test fails, the point is outside. It is only an assumption, that Mario Kart Wii uses this as a similar algorithm, but tests and fixed tracks reinforce this assumption.

At the picture on the right you see 3 examples for check point quadrilaterals:

  • The 2 check point lines of each figure are blue.
  • The 2 additional quadrilateral borders of each figure are cyan.
  • The yellow arrows point to the correct line side and normally to the inner side of the quadrilateral.
  • The green area are the interior points found by the algorithm.
  • The red area are interior points, that are not found by the algorithm.

And now look at the first figure. It is a clearly defined convex quadrilateral. All interior points are on the correct side of all 4 borders (yellow arrows and green area).

The second figure shows a concave quadrilateral with the result, that parts of the quadrilateral are detected as outside (red). The third figure shows an example, where 2 check point line are crossed. Because of the wrong direction of the right border, all points are outside. If a driver enters a red area, a Position Jump Bug occurs. You can fix both by adding one more check points.

Another error is, that 2 corners of the quadrilateral are at the same position or very near. That makes it impossible to calculate a line between the 2 points. Make sure, that the points are at least 10 units away.

The summary is, that only convex quadrilateral are usable. All other forms results in Position Jump Bugs.

Groups (Sections)

Note about naming
The classic SZS Modifier call it sections and the printed indices are one based (but internally zero based). If Wiimm implement its KMP compiler, he decided to call it groups with zero based indices to avoid naming and numbering conflicts. Some of the newer KMP tools follow this new naming.

In some tracks, a driver can choose different ways at junctions. If the ways are not side by side, the check point routes must follow the way individual.

......

KMP setup

In a KMP file, the check points are stored as simple list in the section CKPT. The groups are organized by the KMP section CKPH. Groups and points are referenced by a zero based index.

Each group of CKPH defines:

  • The index of the first point of CKPT.
  • The number of points in this group.
  • 6 links to next groups (forward links).
  • 6 links to previous groups (backward links).

If a link is not used, is is set to value 0xff (-1). The previous links should correspondent to the next link. This allows, that players drive backwards. Wiimms SZS Tools calculates the previous links automatically.

The points of CKPT has also a previous and next link. Generally, the previous link is set to the index of the previous point and the next link to the next point. But the previous link of the first point of a group and the next link of the last point of a group must be set to 0xff to advise a group lookup. Wiimms SZS Tools can define the links fully automatically, if parameter @AUTO-NEXT is set to 1.

Respawning

Each check point has a link to a respawn point (first attribute). If a driver falls down within the a check quadrilateral, it is respawned at the linked respawn point. If the driver falls outside of any check quadrilateral or falls down after it has missed a mandatory check quadrilateral, the respawn point linked by the last registered mandatory check point or sometimes by the following mandatory check point is used (this is subject of further investigation).

For mandatory check points it is important, that the respawn point lays before the check point, so that the player can enter the check quadrilateral again. Overall all, respawn points must be placed that a driver never miss the entrance of mandatory check quadrilateral.

In fact, respawn point are not only points, but areas. See »Respawn Point« for details.

Usual Errors

This section will show you some of the most common errors. Most of them are made because check points were thought to be lines instead of quadrilaterals.

Fixed bug of GCN Rainbow Road. This is a wkmpt export displayed in 3DSmax.

Curves

In the picture on the right you see a typical error found in many (sharp) curves.

On the left side the track author defined some check point lines, not knowing they together work in quadrilaterals. This leads to the magenta parts of the (red) roads, which are not covered by a check point quadrilateral. As soon as a driver stays in this part, the Wii can't estimate its position, resulting in a Position Jump Bug.

On the right side this was fixed by defining more check point lines so that the resulting quadrilaterals cover up all parts of the road. It's no problem to create overlapping quadrilaterals as long as they are at least 3 steps away from each other. The best solution is to place mandatory check points (dark blue with diamonds) somewhere between the overlapping quadrilaterals.

Fixed bug of GBA Rainbow Road. The right yellow circle is constructed for demonstration only.

Wrong distance

In the next example you see 2 more usual errors.

In the left yellow circle, the 6 right points are placed exact at the same position with the result, that the distance between the points is zero. And a zero distance means, that a normal can't be calculated. But normals are always used to check, if a point resists in a 2D or 3D area.

In the right yellow circle, 2 check point lines are crossed. That makes a quadrilateral calculation impossible.

Both bugs will resulting in a Position Jump Bug. The right half of the picture shows a fixed set up of the check points. All quadrilaterals are clearly defined and intermediate quadrilaterals have no overlays.

Links

Wiiki
Wiimms SZS Tools