Clipmove: Difference between revisions

From EDukeWiki
Jump to navigation Jump to search
Jwaffe (talk | contribs)
Added page; basically just a copy/paste of buildinf.txt, not perfect but hopefully better than nothing -jwaffe
 
Fox (talk | contribs)
No edit summary
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
'''from BUILDINF.txt:
'''clipmove''' <''return''> <''x''> <''y''> <z> <''sectnum''> <xvect> <yvect> <walldist> <flordist> <ceildist> <clipmask><br />
'''
'''clipmovenoslide''' <''return''> <''x''> <''y''> <z> <''sectnum''> <xvect> <yvect> <walldist> <flordist> <ceildist> <clipmask>
clipmove(long *x, long *y, long *z, short *sectnum, long xvect, long yvect,
long walldist, long ceildist, long flordist, unsigned long cliptype)


Moves any object (x, y, z) in any direction at any velocity and will make sure the object will stay a certain distance from walls (walldist)
Calculates the movement of any object, starting from position (<x>, <y>, <z>) and sector <sectnum>, in any direction at velocity (<xvect>, <yvect>), keeping the object will a distance <walldist> from walls, <flordist> from floors, and <ceildist> from ceilings. The components of the velocity vector, <xvect> and <yvect>, are expected to be scaled by 14 bits, i.e. a value of 16384 corresponds to a Build x/y unit. However, <walldist> is given in Build units directly.


Pass the pointers of the starting position (x, y, z).  Then pass the starting position's sector number as a pointer also.
<clipmask> is a mask that tells whether the object should be clipped to or not.  The lower 16 bits are bitwise ANDed with wall[].[[cstat (wall)|cstat]] and the higher 16 bits are bitwise ANDed with sprite[].[[cstat (sprite)|cstat]].
Also these values will be modified accordingly. Pass the direction and velocity by using a vector (xvect, yvect).


xvect = velocity * cos(angle)
<''return''>, <''x''>, <''y''>, and <''sectnum''> must be writeable [[gamevar]]s, and may be modified as the result of the calculation.
yvect = velocity * sin(angle)


Walldist tells how close the object can get to a wall. I use 128L as my default. If you increase walldist all of a sudden
<''return''> value:
for a certain object, the object might leak through a wall, so don't do that!
   
  0 (touched nothing)
32768+wallnum (wall first touched)
49152+spritenum (sprite first touched)


Cliptype is a mask that tells whether the object should be clipped to or not.  The lower 16 bits are anded with wall[].cstat and the higher 16 bits are anded with sprite[].cstat.
[[Category:EDuke32 specific commands]]
 
Clipmove return values:
  0 (touched nothing)
  32768+wallnum (wall first touched)
  49152+spritenum (sprite first touched)

Latest revision as of 10:49, 22 February 2020

clipmove <return> <x> <y> <z> <sectnum> <xvect> <yvect> <walldist> <flordist> <ceildist> <clipmask>
clipmovenoslide <return> <x> <y> <z> <sectnum> <xvect> <yvect> <walldist> <flordist> <ceildist> <clipmask>

Calculates the movement of any object, starting from position (<x>, <y>, <z>) and sector <sectnum>, in any direction at velocity (<xvect>, <yvect>), keeping the object will a distance <walldist> from walls, <flordist> from floors, and <ceildist> from ceilings. The components of the velocity vector, <xvect> and <yvect>, are expected to be scaled by 14 bits, i.e. a value of 16384 corresponds to a Build x/y unit. However, <walldist> is given in Build units directly.

<clipmask> is a mask that tells whether the object should be clipped to or not. The lower 16 bits are bitwise ANDed with wall[].cstat and the higher 16 bits are bitwise ANDed with sprite[].cstat.

<return>, <x>, <y>, and <sectnum> must be writeable gamevars, and may be modified as the result of the calculation.

<return> value:

0 (touched nothing)
32768+wallnum (wall first touched)
49152+spritenum (sprite first touched)