Clipmask: Difference between revisions
Hunter byte (talk | contribs) Fixed: sprites and walls were swapped. |
Hendricks266 (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
Clipmask is a | Clipmask is a value that tells what kinds of objects should be clipped or not. The lower 16 bits are anded (&) with the [[cstat(wall)|cstat of a wall]] and the higher 16 bits are anded with the [[cstat|cstat of a sprite]]. Clipmask is used by the [[getzrange]], [[hitscan]], and [[movesprite]] commands. | ||
One can calculate a mask using this formula: | |||
clipmask=(sprite_cstat*65536)+wall_cstat | |||
[[cstat|sprite_cstat]] and [[cstat(wall)|wall_cstat]] should have only set the bits which should be clipped. | [[cstat|sprite_cstat]] and [[cstat(wall)|wall_cstat]] should have only set the bits which should be clipped. | ||
The most important bits are blockable(flag 1), hitable(flag 64 for walls and 256 for sprites), masking wall(flag 16). | The most important bits are blockable (flag 1), hitable (flag 64 for walls and 256 for sprites), masking wall (flag 16). | ||
The game has two predefined clipmasks: CLIPMASK0 and CLIPMASK1. | |||
CLIPMASK0 = (1*65536)+1 = 1 0001h | |||
This clips to blocking sprites (flag 1) and walls (flag 1). | |||
CLIPMASK1 = (256*65536)+64 = 100 0040h | |||
This clips to hitscan sprites (flag 256) and walls (flag 64). | |||
This clips to | |||
Sample clipmask for [[hitscan]] (4294901808) = FFFF 0030h | |||
This clips sprites which have any flags and walls which are one-sided or masking. | |||
This clips sprites which have any flags and walls which are one-sided or masking |
Revision as of 19:30, 7 January 2011
Clipmask is a value that tells what kinds of objects should be clipped or not. The lower 16 bits are anded (&) with the cstat of a wall and the higher 16 bits are anded with the cstat of a sprite. Clipmask is used by the getzrange, hitscan, and movesprite commands.
One can calculate a mask using this formula:
clipmask=(sprite_cstat*65536)+wall_cstat
sprite_cstat and wall_cstat should have only set the bits which should be clipped. The most important bits are blockable (flag 1), hitable (flag 64 for walls and 256 for sprites), masking wall (flag 16).
The game has two predefined clipmasks: CLIPMASK0 and CLIPMASK1.
CLIPMASK0 = (1*65536)+1 = 1 0001h
This clips to blocking sprites (flag 1) and walls (flag 1).
CLIPMASK1 = (256*65536)+64 = 100 0040h
This clips to hitscan sprites (flag 256) and walls (flag 64).
Sample clipmask for hitscan (4294901808) = FFFF 0030h
This clips sprites which have any flags and walls which are one-sided or masking.