Please create an account or Login! Have fun!

Slide delay: Difference between revisions

Jump to navigation Jump to search
mNo edit summary
m (Removed redundant ending of Condition 1's sentence)
 
(7 intermediate revisions by 5 users not shown)
Line 1: Line 1:
'''Slide delay''' is a mechanic that exists only in the MS version of [[Chip's Challenge]], and was programmed into [[Tile World]], that makes [[monster]]s and [[block]]s lag when sliding, and it can greatly alter the outcome of a level. It pertains to [[monster]]s and [[block]]s that enter and leave [[force floor]]s, [[ice]], and [[teleport]]s.
{{MSonly}}
 
'''Slide delay''' is a [[glitch]] that exists only in the MS version of [[Chip's Challenge]], and was programmed into [[Tile World]], that makes [[monster]]s and [[block]]s lag when sliding, and it can greatly alter the outcome of a level. It can affect [[monster]]s and [[block]]s sliding on [[force floor]]s, [[ice]], and [[teleport]]s, and usually occurs when another sliding block or monster runs into an obstacle.


== The sliplist ==
== The sliplist ==
The ''sliplist'' is a list of moving objects (blocks or monsters) that are currently sliding on a [[sliding tile]] (force floors, ice, or teleports). Chip will never be on the sliplist, is never affected by and never causes slide delay, and, importantly, always moves before sliding blocks. Each row in the sliplist contains two elements: the object, and the coordinates of the destination square on the Chip's Challenge [[grid]].
At the start of a level, the sliplist is empty, even if [[monster]]s are currently on sliding tiles; objects cannot enter the sliplist until they make a move. When a monster or block steps on any sliding tile, that object will be added to the end of the sliplist, and when it leaves a "slip" tile, it will be removed from the sliplist. Additionally, if a block slides directly off a sliding tile onto a [[trap]] (like in [[Torturechamber]]), it will remain on the sliplist, and when released, it will slide off the trap one further square in the same direction it was sliding in.
Also notably, should only one sliding space separate Chip from a sliding block in front of him, and the block reaches the ice corner at the same time slide delay affects it, Chip will gain an extra half-move and be one space behind. Since Chip is unaffected by slide delay, he moves before the block, and [[cross-checking]] occurs.
When an object hits an obstacle, such as a [[wall]], while sliding, the impact is counted as a non-slip tile, and the object will leave the sliplist. However, after the object bounces off the wall, it is now considered sliding, and will be added back onto the ''end'' of the sliplist. The other situations listed below under Conditions are similar, in that an object is both removed from and added to the sliplist in a single tick.
== Conditions ==
Slide delay can occur when any of the following 5 situations happen:
1. A block or monster '''rebounds on ice''' because it slid into a wall or other tile it could not enter.


The ''sliplist'' is a list of moving objects, blocks or monsters, that are currently sliding on force floors, ice, or teleports. Chip will never be on the sliplist, is never affected by slide delay, and, importantly, always moves before sliding blocks. Each row in the sliplist contains two elements: the object, and the coordinates of the destination square on the Chip's Challenge [[grid]].
2. A block or monster gets '''stuck ("[[nail|nailed]]") on a force floor''' because it ran into a wall or other obstacle. It will produce slide delay until the obstacle is removed.


At the start of a level, the sliplist is empty, even if [[monster]]s are currently on sliding tiles; objects cannot enter the sliplist until they make a move. When a monster or block steps on any sliding tile (ice, force floor, or teleport), that object will be added to the end of the sliplist, and when it leaves a "slip" tile, it will be removed from the sliplist. Additionally, if a block slides directly off a sliding tile onto a [[trap]] (like in [[Torturechamber]]), it will remain on the sliplist, and when released, it will slide off the trap one further square in the same direction it was sliding in.
3. A '''block slides into a trap and cannot leave it''' (because the trap is closed or an obstacle is blocking the exit direction). It will produce slide delay until it successfully leaves the trap. Note that trapped monsters never produce slide delay. A trapped block won't produce slide delay either if it was pushed directly into the trap from a non-sliding state.


Also notably, should only one sliding space separate Chip from a sliding block in front of him, and the block reaches the ice corner at the same time slide delay affects it, Chip will gain an extra half-move and be one space behind. Since Chip is unaffected by slide delay, he moves before the block, and [[cross-checking]] occurs.
4. A block or monster gets '''stuck on a teleport''' (because all usable teleports are blocked in the direction the object is facing). It will continuously produce slide delay while it's there.


When an object hits an obstacle, such as a [[wall]], while sliding, the impact is counted as a non-slip tile, and the object will leave the sliplist. However, after the object bounces off the wall, it is now considered sliding, and will be added back onto the ''end'' of the sliplist.
5. (Rare) A block or monster moves off a sliding tile onto a clone button that clones a block onto a sliding tile.


== Examples ==
== Examples ==
As this [[glider]] begins on an ice tile, it does not count and it will not be added to the sliplist.
As this [[glider]] begins on an ice tile, it does not count and it will not be added to the sliplist.


Line 41: Line 54:
</div>
</div>


In play, the above glider will not appear as moving in the MS version, but in [[Lynx]], failed moves can be seen, so a glider in this type of prison would be shown continuously turning left and right every 1/10 of a second.
In play, the above glider will not appear as moving in the MS version, but in [[Lynx ruleset|Lynx]], failed moves can be seen, so a glider in this type of prison would be shown switching between left and right every [[tick]].
 
== The glitch ==
Every tick ([[half move]] in this context), the game accesses the sliplist and processes them in sequential order, moving each tile from its starting square to its destination square. When an object leaves the sliplist in the middle of this processing, the table will be modified (everything after that object will be shifted up one).  


== Slide delay ==
For the "normal" case, where the object successfully moved into a non-sliding tile like [[floor]], no slide delay occurs. This is because the game recognizes that the sliplist shrunk. It will stay on the same index and correctly process the object that moved up into the leaving object's place in the list.


Every tick, which is 1/10 of a second, the game accesses the sliplist and processes them in sequential order, moving each tile from its starting square to its destination square. When an object leaves the sliplist in the middle of this processing, the table will be modified (everything after that object will be shifted up one). However, the processing will ignore this and continue to process the object at the next index; as a result, an object will be skipped. This is what is known as slide delay.
However, if instead the sliplist is the ''same size'' as it was before the move (which occurs in the situations listed under Conditions above), the processing will ignore the index shift and continue to process the object at the next index; as a result, an object will be skipped (the one that moved into the leaving object's index). This is what is known as slide delay.


A more concrete example is shown below.
A concrete example of Condition 1 is shown below.


This sample sliplist contains these two objects, both of which are sliding on ice.
This sample sliplist contains these two objects, both of which are sliding on ice.
Line 71: Line 87:
| [1, 1]
| [1, 1]
|}
|}
The game ignores this and continues to process the second element; however, the second element is now still the block, and it proceeds to move the block from [2, 1] to [1, 1]. Now the slip engine is finished, and the net result is that nothing moved.
Since the sliplist is the same size as before, the game ignores this and continues to process the second element; however, the second element is now still the block, and it proceeds to move the block from [2, 1] to [1, 1]. Now the slip engine is finished, and the net result is that nothing moved.


Look at the example below.
Look at the example of Condition 5 below.


<div class="tilebackground-floor" style="margin-left: auto; margin-right: auto; width: 128px; height: 64px;">
<div class="tilebackground-floor" style="margin-left: auto; margin-right: auto; width: 128px; height: 64px;">
Line 82: Line 98:
| [[File:Fire.png]]
| [[File:Fire.png]]
|-
|-
| [[File:Clone Block E.png]]
| [[File:Clone block E.png]]
| [[File:Ice.png]]
| [[File:Ice.png]]
| [[File:Ice.png]]
| [[File:Ice.png]]
Line 97: Line 113:
| [[File:Ice.png]]
| [[File:Ice.png]]
| [[File:Ice.png]]
| [[File:Ice.png]]
| [[File:Clone Block W.png]]
| [[File:Clone block W.png]]
|-
|-
| [[File:Glider N.png]]
| [[File:Glider N.png]]
Line 117: Line 133:
</div>
</div>


Above is a different principle of slide delay. Slide delay is created because the destination of the glider is always the force floor, and will always return to the sliplist. Blocks in this situation will leave the sliplist if they are [[ram]]med.
Above is a different principle of slide delay (Condition 2). Slide delay is created because the destination of the glider is always the force floor, and will always return to the sliplist. Blocks in this situation will leave the sliplist if they are [[ram]]med.


<div class="tilebackground-floor" style="margin-left: auto; margin-right: auto; width: 96px; height: 32px;">
<div class="tilebackground-floor" style="margin-left: auto; margin-right: auto; width: 96px; height: 32px;">
Line 130: Line 146:


== External links ==
== External links ==
*([[David Stolp]]) [http://www.davidstolp.com/old/chips/slidedelay/index.html Dr. pieguy explains slide delay]


*([[David Stolp]]) [http://www.davidstolp.com/old/chips/slidedelay/index.html Dr. pieguy explains slide delay]
[[Category:Glitches]]
[[Category:Mechanics]]
[[Category:Mechanics]]

Latest revision as of 23:11, 6 February 2022

Chip S.png This page describes a mechanic specific to the 1992 Microsoft port of Chip's Challenge (and anything that emulates it). It may not exist in any other Chip's Challenge game.

Slide delay is a glitch that exists only in the MS version of Chip's Challenge, and was programmed into Tile World, that makes monsters and blocks lag when sliding, and it can greatly alter the outcome of a level. It can affect monsters and blocks sliding on force floors, ice, and teleports, and usually occurs when another sliding block or monster runs into an obstacle.

The sliplist[edit]

The sliplist is a list of moving objects (blocks or monsters) that are currently sliding on a sliding tile (force floors, ice, or teleports). Chip will never be on the sliplist, is never affected by and never causes slide delay, and, importantly, always moves before sliding blocks. Each row in the sliplist contains two elements: the object, and the coordinates of the destination square on the Chip's Challenge grid.

At the start of a level, the sliplist is empty, even if monsters are currently on sliding tiles; objects cannot enter the sliplist until they make a move. When a monster or block steps on any sliding tile, that object will be added to the end of the sliplist, and when it leaves a "slip" tile, it will be removed from the sliplist. Additionally, if a block slides directly off a sliding tile onto a trap (like in Torturechamber), it will remain on the sliplist, and when released, it will slide off the trap one further square in the same direction it was sliding in.

Also notably, should only one sliding space separate Chip from a sliding block in front of him, and the block reaches the ice corner at the same time slide delay affects it, Chip will gain an extra half-move and be one space behind. Since Chip is unaffected by slide delay, he moves before the block, and cross-checking occurs.

When an object hits an obstacle, such as a wall, while sliding, the impact is counted as a non-slip tile, and the object will leave the sliplist. However, after the object bounces off the wall, it is now considered sliding, and will be added back onto the end of the sliplist. The other situations listed below under Conditions are similar, in that an object is both removed from and added to the sliplist in a single tick.

Conditions[edit]

Slide delay can occur when any of the following 5 situations happen:

1. A block or monster rebounds on ice because it slid into a wall or other tile it could not enter.

2. A block or monster gets stuck ("nailed") on a force floor because it ran into a wall or other obstacle. It will produce slide delay until the obstacle is removed.

3. A block slides into a trap and cannot leave it (because the trap is closed or an obstacle is blocking the exit direction). It will produce slide delay until it successfully leaves the trap. Note that trapped monsters never produce slide delay. A trapped block won't produce slide delay either if it was pushed directly into the trap from a non-sliding state.

4. A block or monster gets stuck on a teleport (because all usable teleports are blocked in the direction the object is facing). It will continuously produce slide delay while it's there.

5. (Rare) A block or monster moves off a sliding tile onto a clone button that clones a block onto a sliding tile.

Examples[edit]

As this glider begins on an ice tile, it does not count and it will not be added to the sliplist.

Blank.png Glider E.png

This glider, although it is on an ice tile, is unable to move at any point, and will never be added to the sliplist, since it cannot make a move.

Wall.png Wall.png Wall.png
Wall.png Glider E.png Wall.png
Wall.png Wall.png Wall.png

In play, the above glider will not appear as moving in the MS version, but in Lynx, failed moves can be seen, so a glider in this type of prison would be shown switching between left and right every tick.

The glitch[edit]

Every tick (half move in this context), the game accesses the sliplist and processes them in sequential order, moving each tile from its starting square to its destination square. When an object leaves the sliplist in the middle of this processing, the table will be modified (everything after that object will be shifted up one).

For the "normal" case, where the object successfully moved into a non-sliding tile like floor, no slide delay occurs. This is because the game recognizes that the sliplist shrunk. It will stay on the same index and correctly process the object that moved up into the leaving object's place in the list.

However, if instead the sliplist is the same size as it was before the move (which occurs in the situations listed under Conditions above), the processing will ignore the index shift and continue to process the object at the next index; as a result, an object will be skipped (the one that moved into the leaving object's index). This is what is known as slide delay.

A concrete example of Condition 1 is shown below.

This sample sliplist contains these two objects, both of which are sliding on ice.

Object Destination coordinates
Block at [1, 1] [2, 1]
Glider at [2, 2] [3, 2]

At the next tick, the game will process the sliplist in sequential order. The current plan is to first move the block from [1, 1] to [2, 1], and then move the glider from [2, 2] to [3, 2].

However, it just so happens that after the block is moved from [1, 1] to [2, 1], it hits an obstacle and leaves the sliplist, only to re-enter at the end of the sliplist, now moving from [2, 1] back to [1, 1]. The table is currently as follows:

Object Destination coordinates
Glider at [2, 2] [3, 2]
Block at [2, 1] [1, 1]

Since the sliplist is the same size as before, the game ignores this and continues to process the second element; however, the second element is now still the block, and it proceeds to move the block from [2, 1] to [1, 1]. Now the slip engine is finished, and the net result is that nothing moved.

Look at the example of Condition 5 below.

Glider E.png Force Floor E.png Red button.png Fire.png
Clone block E.png Ice.png Ice.png Ice.png

This will cause slide delay, because immediately when the glider leaves the force floor, it creates a block, cloned from the clone block and moving east, that starts moving on ice. Note that if it were a monster clone instead of a block clone, slide delay would not occur because a monster is created 1/5 of a second after the button was pressed. However, no noticeable effect is seen because nothing was skipped.

Red button.png Ice.png Ice.png Ice.png Clone block W.png
Glider N.png

In this example, slide delay does not occur when the glider hits the red button, because nothing is leaving the sliplist. But, when the block hits the red button, slide delay will occur, as the block that just left the sliplist cloned a block westwards that was instantly added to the sliplist.

Glider E.png Force Floor E.png Wall.png

Above is a different principle of slide delay (Condition 2). Slide delay is created because the destination of the glider is always the force floor, and will always return to the sliplist. Blocks in this situation will leave the sliplist if they are rammed.

Glider E.png Ice.png Wall.png

In the diagram above there is no slide delay, because the glider never returns to ice and will not go back to the sliplist after bouncing off the wall.

External links[edit]