Skip to main content

collide-cache-h​

source

Types​


collide-cache​

collide-cache: basicsource
Fields​
type: type
num-tris: int32
num-prims: int32
num-prims-u: uint32
ignore-mask: pat-surface
proc: process-drawable
collide-box: bounding-box
collide-box4w: bounding-box4w
collide-with: collide-kind
prims: collide-cache-prim
tris: collide-cache-tri
Methods​
debug-draw(obj: collide-cache) => nonesource

Debug draw all the things in the collide cache!

fill-and-probe-using-line-sphere(obj: collide-cache, arg0: vector, arg1: vector, arg2: float, arg3: collide-kind, arg4: process, arg5: collide-tri-result, arg6: pat-surface) => floatsource
fill-and-probe-using-spheres(obj: collide-cache, arg0: collide-using-spheres-params) => symbolsource
fill-and-probe-using-y-probe(obj: collide-cache, arg0: vector, arg1: float, arg2: collide-kind, arg3: process-drawable, arg4: collide-tri-result, arg5: pat-surface) => floatsource
fill-using-bounding-box(obj: collide-cache, arg0: bounding-box, arg1: collide-kind, arg2: process-drawable, arg3: pat-surface) => nonesource
fill-using-line-sphere(obj: collide-cache, arg0: vector, arg1: vector, arg2: float, arg3: collide-kind, arg4: process-drawable, arg5: pat-surface) => nonesource
fill-using-spheres(obj: collide-cache, arg0: collide-using-spheres-params) => nonesource
fill-using-y-probe(obj: collide-cache, arg0: vector, arg1: float, arg2: collide-kind, arg3: process-drawable, arg4: pat-surface) => nonesource
initialize(obj: collide-cache) => nonesource

Clear the collide-cache.

probe-using-line-sphere(obj: collide-cache, arg0: vector, arg1: vector, arg2: float, arg3: collide-kind, arg4: collide-tri-result, arg5: pat-surface) => floatsource
probe-using-spheres(obj: collide-cache, arg0: collide-using-spheres-params) => symbolsource
probe-using-y-probe(obj: collide-cache, arg0: vector, arg1: float, arg2: collide-kind, arg3: collide-tri-result, arg4: pat-surface) => floatsource
fill-from-background(obj: collide-cache, bsp-find-mesh-func: function, import-mesh-func: function) => nonesource

This terrible function fills the collide cache with background tris from a bounding box.

fill-from-foreground-using-box(obj: collide-cache) => nonesource
fill-from-foreground-using-line-sphere(obj: collide-cache) => nonesource
fill-from-foreground-using-y-probe(obj: collide-cache) => nonesource
fill-from-water(obj: collide-cache, arg0: water-control) => nonesource
load-mesh-from-spad-in-box: unknown
collide-cache-method-27: unknown
collide-cache-method-28: unknown
collide-cache-method-29: unknown
puyp-mesh: unknown
puyp-sphere(obj: collide-cache, arg0: collide-puyp-work, arg1: collide-cache-prim) => vectorsource
unpack-background-collide-mesh: unknown

collide-cache-prim​

collide-cache-prim: structuresource
Fields​
prim-core: collide-prim-core
extra-quad: uint128
ccache: collide-cache
prim: collide-shape-prim
first-tri: uint16
num-tris: uint16
unused: uint8
world-sphere: vector
collide-as: collide-kind
action: collide-action
offense: collide-offense
prim-type: int8
Methods​
resolve-moving-sphere-tri: unknown
resolve-moving-sphere-sphere: unknown

collide-cache-tri​

collide-cache-tri: structuresource
Fields​
vertex: vector
extra-quad: uint128
pat: pat-surface
prim-index: uint16
user16: uint16
user32: uint32

collide-list​

collide-list: structuresource
Fields​
num-items: int32
items: collide-list-item

collide-list-item​

collide-list-item: structuresource
Fields​
mesh: collide-frag-mesh
inst: basic

collide-puss-sphere​

collide-puss-sphere: structuresource
Fields​
bsphere: sphere
bbox4w: bounding-box4w

collide-puss-work​

collide-puss-work: structuresource
Fields​
closest-pt: vector
tri-normal: vector
tri-bbox4w: bounding-box4w
spheres-bbox4w: bounding-box4w
spheres: collide-puss-sphere
Methods​
collide-puss-work-method-9: unknown
collide-puss-work-method-10: unknown

collide-puyp-work​

collide-puyp-work: structuresource
Fields​
best-u: float
ignore-pat: pat-surface
tri-out: collide-tri-result
start-pos: vector
move-dist: vector

collide-using-spheres-params​

collide-using-spheres-params: structuresource
Fields​
spheres: inline-array
num-spheres: uint32
collide-with: collide-kind
proc: process-drawable
ignore-pat: pat-surface
solid-only: basic

collide-work​

collide-work: structuresource
Fields​
collide-sphere-neg-r: sphere
collide-box4w: bounding-box4w
inv-mat: matrix

Variables​


*collide-cache-max-tris*​

*collide-cache-max-tris*: intsource

BIG_COLLIDE_CACHE_SIZE​

BIG_COLLIDE_CACHE_SIZE: unknownsource

collide-cache​

source

Types​


collide-puls-work​

collide-puls-work: structuresource
Fields​
ignore-pat: pat-surface
tri-out: collide-tri-result
bsphere: sphere
move-dist: vector

pc-fffuls-work​

pc-fffuls-work: structuresource
Fields​
reg-vf28: vector
reg-vf29: vector
reg-vf30: vector
reg-vf31: vector

Functions​


collide-cache-using-box-test​

collide-cache-using-box-test(arg0: vector) => symbolsource

collide-cache-using-line-sphere-test​

collide-cache-using-line-sphere-test(arg0: vector) => symbolsource

Check if the input sphere is in the rotated bounding box volume of the current
line-sphere query.

collide-cache-using-y-probe-test​

collide-cache-using-y-probe-test(arg0: vector) => symbolsource

make-collide-list-using-line-sphere-inst-test​

make-collide-list-using-line-sphere-inst-test(arg0: collide-fragment, arg1: instance-tie) => symbolsource

Check if a collide-fragment at a given instance is in the rotated bounding box volume
of the current line-sphere query.

Variables​


*already-printed-exeeded-max-cache-tris*​

*already-printed-exeeded-max-cache-tris*: symbolsource

*pc-fffuls-work*​

*pc-fffuls-work*: pc-fffuls-worksource

collide-edge-grab-h​

source

Types​


collide-edge-edge​

collide-edge-edge: structuresource
Fields​
ignore: basic
etri: collide-edge-tri
vertex-ptr: inline-array
outward: vector
edge-vec-norm: vector

collide-edge-hold-item​

collide-edge-hold-item: structuresource
Fields​
next: collide-edge-hold-item
rating: float
split: int8
edge: collide-edge-edge
center-pt: vector
outward-pt: vector

collide-edge-hold-list​

collide-edge-hold-list: structuresource
Fields​
num-allocs: uint32
num-attempts: uint32
head: collide-edge-hold-item
items: collide-edge-hold-item
attempts: qword
Methods​
debug-draw(obj: collide-edge-hold-list) => objectsource
add-to-list!: unknown

collide-edge-tri​

collide-edge-tri: structuresource
Fields​
ctri: collide-cache-tri
normal: vector

collide-edge-work​

collide-edge-work: structuresource
Fields​
ccache: collide-cache
cshape: collide-shape
num-verts: uint32
num-edges: uint32
num-tris: uint32
cache-fill-box: bounding-box
within-reach-box: bounding-box
within-reach-box4w: bounding-box4w
search-pt: vector
search-dir-vec: vector
max-dist-sqrd-to-outward-pt: float
max-dir-cosa-delta: float
split-dists: float
outward-offset: vector
local-cache-fill-box: bounding-box
local-within-reach-box: bounding-box
local-player-spheres: sphere
world-player-spheres: sphere
local-player-hanging-spheres: sphere
world-player-hanging-spheres: sphere
local-player-leap-up-spheres: sphere
world-player-leap-up-spheres: sphere
verts: vector
edges: collide-edge-edge
tris: collide-edge-tri
hold-list: collide-edge-hold-list
Methods​
search-for-edges(obj: collide-edge-work, arg0: collide-edge-hold-list) => symbolsource

Iterate through edges, adding them to the collide-edge-hold-list, if they are good

debug-draw-edges(obj: collide-edge-work) => objectsource
debug-draw-tris(obj: collide-edge-work) => nonesource
debug-draw-sphere(obj: collide-edge-work) => symbolsource
compute-center-point!(obj: collide-edge-work, arg0: collide-edge-edge, arg1: vector) => floatsource
collide-edge-work-method-14(obj: collide-edge-work, arg0: vector, arg1: vector, arg2: int) => floatsource
find-grabbable-edges!: unknown
find-grabbable-tris!: unknown
should-add-to-list?(obj: collide-edge-work, arg0: collide-edge-hold-item, arg1: collide-edge-edge) => symbolsource
find-best-grab!: unknown
check-grab-for-collisions(obj: collide-edge-work, arg0: collide-edge-hold-item, arg1: edge-grab-info) => symbolsource

edge-grab-info​

edge-grab-info: structuresource
Fields​
world-vertex: vector
local-vertex: vector
actor-cshape-prim-offset: int32
actor-handle: handle
hanging-matrix: matrix
edge-vertex: vector
center-hold: vector
tri-vertex: vector
left-hand-hold: vector
right-hand-hold: vector
center-hold-old: vector
edge-tri-pat: uint32
Methods​
edge-grab-info-method-9(obj: edge-grab-info) => symbolsource
debug-draw(obj: edge-grab-info) => symbolsource

Variables​


*collide-edge-work*​

*collide-edge-work*: collide-edge-worksource

collide-edge-grab​

source

Types​


pbhp-stack-vars​

pbhp-stack-vars: structuresource
Fields​
edge: collide-edge-edge
allocated: basic
neg-hold-pt: vector
split-vec: vector

Variables​


*no-walk-surface*​

*no-walk-surface*: surfacesource

*rotate-surface*​

*rotate-surface*: surfacesource

collide-frag-h​

source

Types​


collide-frag-mesh​

collide-frag-mesh: basicsource
Fields​
type: type
packed-data: uint32
pat-array: uint32
strip-data-len: uint16
poly-count: uint16
base-trans: vector
vertex-count: uint8
vertex-data-qwc: uint8
total-qwc: uint8
unused: uint8

collide-frag-vertex​

collide-frag-vertex: vectorsource
Fields​
x: float
y: float
z: float
w: float
data: float
quad: uint128

collide-fragment​

collide-fragment: drawablesource
Fields​
type: type
id: int16
bsphere: vector
mesh: collide-frag-mesh

drawable-inline-array-collide-fragment​

drawable-inline-array-collide-fragment: drawable-inline-arraysource
Fields​
type: type
id: int16
bsphere: vector
length: int16
data: collide-fragment
pad: uint32

drawable-tree-collide-fragment​

drawable-tree-collide-fragment: drawable-treesource
Fields​
type: type
id: int16
bsphere: vector
length: int16
data: drawable
data-override: drawable-inline-array

collide-func​

source

Functions​


moving-sphere-sphere-intersect​

moving-sphere-sphere-intersect(arg0: vector, arg1: vector, arg2: vector, arg3: vector) => floatsource

pc-port-raw-ray-sphere-implementation​

pc-port-raw-ray-sphere-implementation(rad: float, vf1-val: vector, vf2-val: vector) => floatsource

This is one of the main primitives for collision.
Assumes a sphere of radius rad is at the origin.
Handles:
- miss (return MISS)
- behind (return MISS)
- too far away (return MISS)
- inside (return 0)

raw-ray-sphere-intersect​

raw-ray-sphere-intersect(arg0: float) => floatsource

DANGER: this function takes two arguments by vf registers.
As a result, it doesn't work properly in OpenGOAL. See the functions below.

ray-circle-intersect​

ray-circle-intersect(ray-origin: vector, ray-dir: vector, circle-origin: vector, radius: float) => floatsource

Intersect ray with circle. Circle is on the y plane and this throws out the y components
of ray-origin, circle-origin, and ray-dir

ray-cylinder-intersect​

ray-cylinder-intersect(ray-origin: vector, ray-dir: vector, cyl-origin: vector, cyl-axis: vector, cyl-rad: float, cyl-len: float, pt-out: vector) => floatsource

Intersect with a cylinder.
Currently this is untested.

ray-plane-intersect​

ray-plane-intersect(arg0: vector, arg1: vector, arg2: vector, arg3: vector, arg4: vector, arg5: vector, arg6: vector) => floatsource

Unused.

ray-sphere-intersect​

ray-sphere-intersect(ray-origin: vector, ray-dir: vector, sph-origin: vector, radius: float) => floatsource

Intersect a ray and sphere. Will return 0 if you are in the sphere, -huge number if you don't hit it.
Returns the length of the ray to the first intersection.

Variables​


COLLISION_MISS​

COLLISION_MISS: unknownsource

collide-h​

source

Variables​


*collide-test-flag*​

*collide-test-flag*: symbolsource

collide-mesh-h​

source

Types​


collide-mesh​

collide-mesh: basicsource
Fields​
type: type
joint-id: int32
num-tris: uint32
num-verts: uint32
vertex-data: inline-array
tris: collide-mesh-tri
Methods​
debug-draw-tris(obj: collide-mesh, arg0: process-drawable, arg1: int) => nonesource

Draw a collide-mesh.

overlap-test(obj: collide-mesh, arg0: collide-mesh-cache-tri, arg1: vector) => symbolsource
should-push-away-test: unknown
sphere-on-platform-test: unknown
populate-cache!(obj: collide-mesh, arg0: collide-mesh-cache-tri, arg1: matrix) => nonesource
collide-mesh-math-1: unknown
collide-mesh-math-2: unknown

collide-mesh-cache​

collide-mesh-cache: basicsource
Fields​
type: type
used-size: uint32
max-size: uint32
id: uint64
data: uint8
Methods​
allocate!(obj: collide-mesh-cache, arg0: int) => intsource
is-id?(obj: collide-mesh-cache, arg0: int) => symbolsource

Is this our id?

next-id!(obj: collide-mesh-cache) => uintsource

Reset all used entries in the cache and increment the id.
If the id is zero, set it to 1

collide-mesh-cache-tri​

collide-mesh-cache-tri: structuresource
Fields​
vertex: vector
normal: vector
bbox4w: bounding-box4w
pat: pat-surface

collide-mesh-tri​

collide-mesh-tri: structuresource
Fields​
vertex-index: uint8
unused: uint8
pat: pat-surface

collide-tri-result​

collide-tri-result: structuresource
Fields​
vertex: vector
intersect: vector
normal: vector
pat: pat-surface

Variables​


COLLIDE_MESH_CACHE_SIZE​

COLLIDE_MESH_CACHE_SIZE: unknownsource

collide-mesh​

source

Types​


sopt-work​

sopt-work: structuresource
Fields​
intersect: vector
sphere-bbox4w: bounding-box4w

spat-work​

spat-work: structuresource
Fields​
intersect: vector
sphere-bbox4w: bounding-box4w

collide-probe​

source

Types​


collide-probe-stack​

collide-probe-stack: structuresource

collide-probe-stack-elem​

collide-probe-stack-elem: structuresource
Fields​
child: uint32
count: uint32

Functions​


collide-probe-collide-fragment-tree-make-list​

collide-probe-collide-fragment-tree-make-list(arg0: drawable-tree-collide-fragment, arg1: collide-list) => nonesource

Given a collide fragment tree, make a list.
Note: you must have more than 8 collide fragments, so you have more than 1 level in the tree.

collide-probe-instance-tie-collide-frags​

collide-probe-instance-tie-collide-frags() => nonesource

collide-probe-instance-tie-tree-make-list​

collide-probe-instance-tie-tree-make-list(arg0: drawable-tree-instance-tie, arg1: collide-list) => intsource

Given a TIE instance tree, make a list.
Unlike tfrag, they explicitly support the < 8 node case

collide-probe-make-list​

collide-probe-make-list(arg0: level, arg1: collide-list) => nonesource

Run the probe algorithm on an entire level.

collide-upload-vu0​

collide-upload-vu0() => nonesource

Upload the probe program to VU0.

creates-new-method?​

creates-new-method?(arg0: type, arg1: int) => symbolsource

Is the method with the given ID in the given type a new method for this type?

describe-methods​

describe-methods(arg0: type) => symbolsource

Print information about the methods of a type.

distc​

distc(arg0: vector, arg1: vector) => floatsource

indent-to​

indent-to(arg0: int) => nonesource

Print out arg0 spaces

interpolate​

interpolate(arg0: float, arg1: float, arg2: float, arg3: float, arg4: float) => floatsource

misty-ambush-height​

misty-ambush-height(arg0: vector) => floatsource

misty-ambush-height-probe​

misty-ambush-height-probe(arg0: vector, arg1: float) => floatsource

Hack to manually compute the ground height in misty ambush.

overrides-parent-method?​

overrides-parent-method?(arg0: type, arg1: int) => symbolsource

Does the method with the given ID in the given type override a method of its parent?

pke-collide-test​

pke-collide-test() => nonesource
print-out(arg0: int) => objectsource

probe-traverse-collide-fragment​

probe-traverse-collide-fragment(arg0: drawable-tree-collide-fragment, arg1: int) => nonesource

Print out all levels of a drawabl-tree-collide-fragment.

probe-traverse-draw-node​

probe-traverse-draw-node(arg0: draw-node, arg1: int) => nonesource

Print out info for a draw node, and recursively its children. They forgot to finish this one.

probe-traverse-inline-array-node​

probe-traverse-inline-array-node(arg0: drawable-inline-array-node, arg1: int) => nonesource

Print out a drawable-inline-array-node, and recursively all children

Variables​


*collide-probe-stack*​

*collide-probe-stack*: collide-probe-stacksource

collide-vu0-block​

const collide-vu0-block: vu-functionsource

collide-shape-h​

source

Types​


collide-overlap-result​

collide-overlap-result: structuresource
Fields​
best-dist: float
best-from-prim: collide-shape-prim
best-to-prim: collide-shape-prim
best-from-tri: collide-tri-result
Methods​
reset!(obj: collide-overlap-result) => nonesource

Reset the result.

collide-prim-core​

collide-prim-core: structuresource
Fields​
world-sphere: vector
collide-as: collide-kind
action: collide-action
offense: collide-offense
prim-type: int8
extra: uint8
quad: uint128

collide-shape​

collide-shape: trsqvsource
Fields​
type: type
trans: vector
rot: vector
scale: vector
quat: quaternion
pause-adjust-distance: meters
nav-radius: meters
transv: vector
rotv: vector
scalev: vector
dir-targ: quaternion
angle-change-time: time-frame
old-y-angle-diff: float
process: process-drawable
max-iteration-count: uint8
nav-flags: nav-flags
pad-byte: uint8
pat-ignore-mask: pat-surface
event-self: symbol
event-other: symbol
root-prim: collide-shape-prim
riders: collide-sticky-rider-group
backup-collide-as: collide-kind
backup-collide-with: collide-kind
Methods​
move-by-vector!(obj: collide-shape, arg0: vector) => nonesource

Adjust our position by the given vector

alloc-riders(obj: collide-shape, arg0: int) => nonesource
move-to-point!(obj: collide-shape, arg0: vector) => nonesource

Move us to exactly the given position.

debug-draw(obj: collide-shape) => nonesource

Draw a collide shape

fill-cache-for-shape!(obj: collide-shape, arg0: float, arg1: collide-kind) => nonesource

Fill cache for a box.

fill-cache-integrate-and-collide!(obj: collide-shape, arg0: vector, arg1: collide-kind) => nonesource

Fill the collide cache for the object, integrate, and handle collisions!

find-prim-by-id(obj: collide-shape, arg0: uint) => collide-shape-primsource

Find a prim in this shape with the given id.

detect-riders!(obj: collide-shape) => symbolsource

See who is riding us.

build-bounding-box-for-shape(obj: collide-shape, arg0: bounding-box, arg1: float, arg2: collide-kind) => symbolsource

Build a bounding box containing the whole shape.
If the box is empty, returns #f.

integrate-and-collide!(obj: collide-shape, arg0: vector) => nonesource

For a non-moving collide shape, we just move ourself. We have no reaction to anything we hit.

find-collision-meshes(obj: collide-shape) => symbolsource
on-platform(obj: collide-shape, arg0: collide-shape, arg1: collide-overlap-result) => symbolsource

Are we on the platform? Returns #t/#f and also sets an overlap result.

find-overlapping-shapes(obj: collide-shape, arg0: overlaps-others-params) => symbolsource
calc-shove-up(obj: collide-shape, arg0: attack-info, arg1: float) => vectorsource
should-push-away(obj: collide-shape, arg0: collide-shape, arg1: collide-overlap-result) => symbolsource

Find the overlap between two collide shapes. This is the main entry point for the overlap algorithm.
The result is returned in arg1. The obj is collided with arg0 (meaning obj uses its collide-with, arg0 uses colide-as).
The best-dist is only valid if the result is #t (it should be negative then)

pull-rider!(obj: collide-shape, arg0: pull-rider-info) => nonesource

Move a rider.

pull-riders!(obj: collide-shape) => symbolsource

Move our riders.

do-push-aways!(obj: collide-shape) => symbolsource

This is the main function to call to respond

set-root-prim!(obj: collide-shape, arg0: collide-shape-prim) => collide-shape-primsource
update-transforms!(obj: collide-shape) => symbolsource

Update all transforms for this shape. After this is called, you can use the
world-spheres.

clear-collide-with-as(obj: collide-shape) => nonesource
restore-collide-with-as(obj: collide-shape) => nonesource
backup-collide-with-as(obj: collide-shape) => nonesource
set-root-prim-collide-with!(obj: collide-shape, arg0: collide-kind) => nonesource
set-root-prim-collide-as!(obj: collide-shape, arg0: collide-kind) => nonesource
set-collide-kinds(obj: collide-shape, arg0: int, arg1: collide-kind, arg2: collide-kind) => nonesource
set-collide-offense(obj: collide-shape, arg0: int, arg1: collide-offense) => nonesource
send-shove-back(obj: collide-shape, arg0: process, arg1: touching-shapes-entry, arg2: float, arg3: float, arg4: float) => nonesource

collide-shape-intersect​

collide-shape-intersect: basicsource
Fields​
type: type
move-vec: vector
best-u: float
best-tri: collide-tri-result
best-from-prim: collide-shape-prim
best-to-prim: collide-shape-prim
Methods​
init!(obj: collide-shape-intersect, arg0: vector) => symbolsource

Initialize the intersection in the given direction.

collide-shape-moving​

collide-shape-moving: collide-shapesource
Fields​
type: type
trans: vector
rot: vector
scale: vector
quat: quaternion
pause-adjust-distance: meters
nav-radius: meters
transv: vector
rotv: vector
scalev: vector
dir-targ: quaternion
angle-change-time: time-frame
old-y-angle-diff: float
process: process-drawable
max-iteration-count: uint8
nav-flags: nav-flags
pad-byte: uint8
pat-ignore-mask: pat-surface
event-self: symbol
event-other: symbol
root-prim: collide-shape-prim
riders: collide-sticky-rider-group
backup-collide-as: collide-kind
backup-collide-with: collide-kind
rider-time: time-frame
rider-last-move: vector
trans-old: vector
poly-pat: pat-surface
cur-pat: pat-surface
ground-pat: pat-surface
status: cshape-moving-flags
old-status: cshape-moving-flags
prev-status: cshape-moving-flags
reaction-flag: cshape-reaction-flags
reaction: function
no-reaction: function
local-normal: vector
surface-normal: vector
poly-normal: vector
ground-poly-normal: vector
ground-touch-point: vector
shadow-pos: vector
ground-impact-vel: meters
surface-angle: float
poly-angle: float
touch-angle: float
coverage: float
dynam: dynamics
surf: surface
Methods​
set-and-handle-pat!(obj: collide-shape-moving, arg0: pat-surface) => nonesource

Handle landing on the given pat-surface. This is likely target-specific.

integrate-no-collide!(obj: collide-shape-moving, arg0: vector) => nonesource

Integrate, but ignore all collisions.
Will set both trans and shadow-pos

collide-shape-moving-method-58(obj: collide-shape-moving, arg0: vector) => symbolsource
integrate-for-enemy-with-move-to-ground!(obj: collide-shape-moving, arg0: vector, arg1: collide-kind, arg2: float, arg3: symbol, arg4: symbol, arg5: symbol) => nonesource

This is likely the main method for stepping an enemy.
arg0: velocity
arg1: ground collision
arg2: ground height probe start
arg3: revert move if blocked
arg4: hover if ran off the ground
arg5: use misty hack

move-to-ground(obj: collide-shape-moving, arg0: float, arg1: float, arg2: symbol, arg3: collide-kind) => symbolsource

Move to the ground now.

move-to-ground-point!(obj: collide-shape-moving, arg0: vector, arg1: vector, arg2: vector) => nonesource

Move the collide shape to the ground immediately:
arg0: ground point
arg1: velocity (will be modified)
arg2: ground normal.
Even if the ground is sloped, transv.y is set to 0.

compute-acc-due-to-gravity(obj: collide-shape-moving, arg0: vector, arg1: float) => vectorsource

Compute the acceleration due to gravity.

step-collison!(obj: collide-shape-moving, arg0: vector, arg1: vector, arg2: float) => floatsource

Take 1 step in the collision. Attempt to move at velocity of arg1, for arg2 of a step.
The resulting velocity is stored in arg0. The amount of a step actually taken is returned.

move-to-tri!(obj: collide-shape-moving, arg0: collide-tri-result, arg1: vector) => nonesource

Move us to tri arg0, at point arg1.

collide-shape-prim​

collide-shape-prim: basicsource
Fields​
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
prim-core: collide-prim-core
local-sphere: vector
collide-with: collide-kind
world-sphere: vector
collide-as: collide-kind
action: collide-action
offense: collide-offense
prim-type: int8
radius: meters
Methods​
move-by-vector!(obj: collide-shape-prim, arg0: vector) => nonesource

Adjust our position by the given vector

find-prim-by-id(obj: collide-shape-prim, arg0: uint) => collide-shape-primsource

Find a prim in this shape or its children with the given id.

debug-draw-world-sphere(obj: collide-shape-prim) => symbolsource

Draw our sphere

add-fg-prim-using-box(obj: collide-shape-prim, arg0: collide-cache) => nonesource
add-fg-prim-using-line-sphere(obj: collide-shape-prim, arg0: collide-cache) => nonesource
add-fg-prim-using-y-probe(obj: collide-shape-prim, arg0: collide-cache) => nonesource
overlaps-others-test(obj: collide-shape-prim, arg0: overlaps-others-params, arg1: collide-shape-prim) => symbolsource
overlaps-others-group(obj: collide-shape-prim, arg0: overlaps-others-params, arg1: collide-shape-prim-group) => symbolsource

Overlap, from group.

unused-17: unknown
collide-with-collide-cache-prim-mesh(obj: collide-shape-prim, arg0: collide-shape-intersect, arg1: collide-cache-prim) => nonesource

abstract base class version.

collide-with-collide-cache-prim-sphere(obj: collide-shape-prim, arg0: collide-shape-intersect, arg1: collide-cache-prim) => nonesource
add-to-bounding-box(obj: collide-shape-prim, arg0: collide-kind) => symbolsource

Add a single prim to the bounding box. (just adds the bsphere)

num-mesh(obj: collide-shape-prim, arg0: collide-shape-prim) => intsource
on-platform-test(obj: collide-shape-prim, arg0: collide-shape-prim, arg1: collide-overlap-result, arg2: float) => nonesource
should-push-away-test(obj: collide-shape-prim, arg0: collide-shape-prim, arg1: collide-overlap-result) => nonesource

Should be impossible to call - collide-shape-prim is abstract.

should-push-away-reverse-test(obj: collide-shape-prim, arg0: collide-shape-prim-group, arg1: collide-overlap-result) => nonesource

This is a flipped version of should-push-away-test.
the group uses their collide-as

update-transforms!(obj: collide-shape-prim, arg0: process-drawable) => symbolsource

Update our world sphere, and our children's world sphere's too.

set-collide-as!(obj: collide-shape-prim, arg0: collide-kind) => nonesource
set-collide-with!(obj: collide-shape-prim, arg0: collide-kind) => nonesource

collide-shape-prim-group​

collide-shape-prim-group: collide-shape-primsource
Fields​
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
prim-core: collide-prim-core
local-sphere: vector
collide-with: collide-kind
world-sphere: vector
collide-as: collide-kind
action: collide-action
offense: collide-offense
prim-type: int8
radius: meters
num-prims: int32
num-prims-u: uint32
allocated-prims: int32
prim: collide-shape-prim
prims: collide-shape-prim
Methods​
append-prim(obj: collide-shape-prim-group, arg0: collide-shape-prim) => nonesource
add-to-non-empty-bounding-box(obj: collide-shape-prim-group, arg0: collide-kind) => nonesource

collide-shape-prim-mesh​

collide-shape-prim-mesh: collide-shape-primsource
Fields​
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
prim-core: collide-prim-core
local-sphere: vector
collide-with: collide-kind
world-sphere: vector
collide-as: collide-kind
action: collide-action
offense: collide-offense
prim-type: int8
radius: meters
mesh: collide-mesh
mesh-id: int32
mesh-cache-id: uint64
mesh-cache-tris: inline-array
Methods​
change-mesh(obj: collide-shape-prim-mesh, arg0: int) => nonesource

Change our mesh to the given mesh ID.

collide-shape-prim-sphere​

collide-shape-prim-sphere: collide-shape-primsource
Fields​
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
prim-core: collide-prim-core
local-sphere: vector
collide-with: collide-kind
world-sphere: vector
collide-as: collide-kind
action: collide-action
offense: collide-offense
prim-type: int8
radius: meters
pat: pat-surface

collide-sticky-rider​

collide-sticky-rider: structuresource
Fields​
rider-handle: handle
sticky-prim: collide-shape-prim
prim-ry: float
rider-local-pos: vector
Methods​
set-rider!(obj: collide-sticky-rider, arg0: handle) => symbolsource

Set the rider and clear the primitive.

collide-sticky-rider-group​

collide-sticky-rider-group: basicsource
Fields​
type: type
num-riders: int32
allocated-riders: int32
rider: collide-sticky-rider
Methods​
add-rider!(obj: collide-sticky-rider-group, arg0: process-drawable) => collide-sticky-ridersource

Add a rider to this platform.

reset!(obj: collide-sticky-rider-group) => intsource

Reset all active riders

overlaps-others-params​

overlaps-others-params: structuresource
Fields​
options: uint32
tlist: touching-list

pull-rider-info​

pull-rider-info: structuresource
Fields​
rider: collide-sticky-rider
rider-cshape: collide-shape-moving
rider-delta-ry: float
rider-dest: vector

Variables​


*collide-hit-by-others-list*​

*collide-hit-by-others-list*: enginesource

*collide-hit-by-player-list*​

*collide-hit-by-player-list*: enginesource

*collide-player-list*​

*collide-player-list*: enginesource

*collide-shape-prim-backgnd*​

*collide-shape-prim-backgnd*: collide-shape-prim-meshsource

*collide-shape-prim-water*​

*collide-shape-prim-water*: collide-shape-prim-meshsource

*collide-usually-hit-by-player-list*​

*collide-usually-hit-by-player-list*: enginesource

collide-shape​

source

Types​


pc-bounding-box-work​

pc-bounding-box-work: structuresource
Fields​
reg-vf29: vector
reg-vf30: vector
reg-vf31: vector

Functions​


collide-shape-draw-debug-marks​

collide-shape-draw-debug-marks() => nonesource

debug-report-col-stats​

debug-report-col-stats() => intsource

default-collision-reaction​

default-collision-reaction(arg0: collide-shape-moving, arg1: collide-shape-intersect, arg2: vector, arg3: vector) => cshape-moving-flagssource

Move into collision!

find-ground-point​

find-ground-point(target-ctrl: control-info, ground-result: vector, start-len: float, max-len: float) => vectorsource

Find somewhere safe to land. This is used to find where to bounce back the player if you jump on fire canyon.
It's a nice example function for the collision system.

simple-collision-reaction​

simple-collision-reaction(arg0: collide-shape-moving, arg1: collide-shape-intersect, arg2: vector, arg3: vector) => cshape-moving-flagssource

A much simpler collide reaction.

target-attack-up​

target-attack-up(arg0: target, arg1: symbol, arg2: symbol) => nonesource

Handle an attack up. This launches the player in the air, forcing them back to a safe location.

Variables​


*col-timer-enable*​

*col-timer-enable*: symbolsource

*col-timer*​

*col-timer*: stopwatchsource

*frame-timer*​

*frame-timer*: stopwatchsource

*pc-bounding-box-work*​

*pc-bounding-box-work*: pc-bounding-box-worksource

collide-target-h​

source

Types​


collide-history​

collide-history: structuresource
Fields​
intersect: vector
trans: vector
transv: vector
transv-out: vector
local-normal: vector
surface-normal: vector
time: time-frame
status: cshape-moving-flags
pat: pat-surface
reaction-flag: cshape-reaction-flags
Methods​
update!(obj: collide-history, cshape: collide-shape-moving, xs: vector, transv: vector, transv-out: vector) => _type_source

Update the collide-history element.

control-info​

control-info: collide-shape-movingsource
Fields​
type: type
trans: vector
rot: vector
scale: vector
quat: quaternion
pause-adjust-distance: meters
nav-radius: meters
transv: vector
rotv: vector
scalev: vector
dir-targ: quaternion
angle-change-time: time-frame
old-y-angle-diff: float
process: process-drawable
max-iteration-count: uint8
nav-flags: nav-flags
pad-byte: uint8
pat-ignore-mask: pat-surface
event-self: symbol
event-other: symbol
root-prim: collide-shape-prim
riders: collide-sticky-rider-group
backup-collide-as: collide-kind
backup-collide-with: collide-kind
rider-time: time-frame
rider-last-move: vector
trans-old: vector
poly-pat: pat-surface
cur-pat: pat-surface
ground-pat: pat-surface
status: cshape-moving-flags
old-status: cshape-moving-flags
prev-status: cshape-moving-flags
reaction-flag: cshape-reaction-flags
reaction: function
no-reaction: function
local-normal: vector
surface-normal: vector
poly-normal: vector
ground-poly-normal: vector
ground-touch-point: vector
shadow-pos: vector
ground-impact-vel: meters
surface-angle: float
poly-angle: float
touch-angle: float
coverage: float
dynam: dynamics
surf: surface
unknown-vector00: vector
unknown-vector01: vector
unknown-vector02: vector
unknown-quaternion00: quaternion
unknown-quaternion01: quaternion
unknown-float00: float
unknown-float01: float
unknown-float02: float
unknown-vector10: vector
unknown-vector11: vector
unknown-vector12: vector
unknown-vector13: vector
unknown-vector14: vector
unknown-vector15: vector
unknown-vector16: vector
unknown-dynamics00: dynamics
unknown-surface00: surface
unknown-surface01: surface
unknown-cpad-info00: cpad-info
unknown-float10: float
unknown-float11: float
unknown-float12: float
unknown-float13: float
unknown-vector20: vector
unknown-vector21: vector
unknown-vector22: vector
unknown-vector23: vector
unknown-vector-array00: vector
unknown-vector30: vector
unknown-vector31: vector
unknown-float20: float
unknown-float21: float
unknown-dword00: uint64
unknown-matrix00: matrix
unknown-matrix01: matrix
unknown-matrix02: matrix
unknown-qword00: uint128
unknown-float30: float
unknown-vector40: vector
unknown-float40: float
unknown-float41: float
unknown-int00: int32
unknown-float50: float
unknown-vector50: vector
unknown-vector51: vector
unknown-vector52: vector
unknown-vector53: vector
last-known-safe-ground: vector
unknown-vector55: vector
unknown-dword10: time-frame
unknown-dword11: time-frame
unknown-float60: float
unknown-float61: float
unknown-float62: float
unknown-float63: float
unknown-float64: float
unknown-dword20: time-frame
unknown-dword21: time-frame
unknown-dword-coverage: int64
unknown-float-coverage-0: float
unknown-float-coverage-1: float
unknown-float-coverage-2: float
unknown-u32-coverage-0: uint32
unknown-vector-coverage-0: vector
unknown-vector-coverage-1: vector
unknown-vector-coverage-2: vector
unknown-vector-coverage-3: vector
unknown-vector60: vector
unknown-vector61: vector
unknown-float70: float
unknown-float71: float
unknown-vector70: vector
unknown-vector71: vector
unknown-vector72: vector
unknown-vector73: vector
unknown-handle00: handle
unknown-sphere-array00: collide-shape-prim-sphere
unknown-sphere00: collide-shape-prim-sphere
unknown-sphere01: collide-shape-prim-sphere
unknown-sphere02: collide-shape-prim-sphere
unknown-int50: int32
unknown-dword30: time-frame
unknown-dword31: time-frame
unknown-dword32: time-frame
unknown-dword33: time-frame
unknown-dword34: time-frame
unknown-dword35: time-frame
unknown-dword36: time-frame
unknown-float80: float
unknown-float81: float
unknown-float82: float
unknown-vector80: vector
unknown-cspace00: cspace
unknown-vector90: vector
unknown-vector91: vector
unknown-vector92: vector
unknown-cspace10: cspace
unknown-symbol00: symbol
unknown-float90: float
unknown-float91: float
unknown-vector-array10: vector
unknown-float100: float
unknown-int10: int32
unknown-float110: float
unknown-vector100: vector
unknown-vector101: vector
unknown-dword40: time-frame
unknown-dword41: time-frame
unknown-handle10: handle
unknown-uint20: uint32
unknown-spoolanim00: spool-anim
unknown-int20: int32
unknown-symbol20: symbol
unknown-float120: float
unknown-int21: int32
unknown-uint30: uint32
unknown-float121: float
unknown-uint31: uint32
unknown-int37: int32
unknown-float122: float
unknown-float123: float
unknown-float124: float
unknown-vector102: vector
unknown-vector103: vector
unknown-quaternion02: quaternion
unknown-quaternion03: quaternion
unknown-smush00: smush-control
unknown-vector110: vector
unknown-vector111: vector
unknown-symbol30: symbol
unknown-int31: uint32
unknown-dword50: int64
unknown-dword51: int64
unknown-pointer00: pointer
unknown-symbol40: symbol
unknown-dword60: int64
unknown-dword61: int64
unknown-dword62: int64
unknown-dword63: int64
unknown-halfword00: int16
history-length: int16
history-data: collide-history
unknown-float140: float
unknown-dword70: time-frame
unknown-int40: int32
unknown-dword80: time-frame
unknown-dword81: time-frame
unknown-float130: float
unknown-float131: float
unknown-dword82: time-frame
unknown-vector120: vector
unknown-float150: float
unknown-vector121: vector
wall-pat: pat-surface
unknown-soundid00: sound-id
unknown-float141: float
unknown-soundid01: sound-id
unknown-int34: int32
unknown-int35: int32
unknown-int36: int32

collide-touch-h​

source

Types​


touching-list​

touching-list: structuresource
Fields​
num-touching-shapes: int32
resolve-u: int8
touching-shapes: touching-shapes-entry
Methods​
add-touching-prims(obj: touching-list, arg0: collide-shape-prim, arg1: collide-shape-prim, arg2: float, arg3: collide-tri-result, arg4: collide-tri-result) => nonesource

Tell the touching list that if we end taking a step of at least arg2, the prims arg0/arg1 will collide.
However, you don't have to know for sure if you're going to take this big of a step yet.
You can provide triangles if you want, but you don't have to.
The logic for calling this twice for the same prims in between calls to update-from-step-size is a little weird
so I suspect this never happens (and it's probably cheaper to avoid this duplication in the actual prim collision code).

touching-list-method-10: unknown
update-from-step-size(obj: touching-list, arg0: float) => nonesource

Given that we actually will take a step size of arg0, remove things we won't actually hit.

send-events-for-touching-shapes(obj: touching-list) => nonesource

Send all events for touching shapes.
Note that the order of event sending is basically random.
(this could explain lava walks's unreliable behavior)

get-shapes-entry(obj: touching-list, arg0: collide-shape, arg1: collide-shape) => touching-shapes-entrysource

Get a touching-shapes-entry for the two shapes. If one exists, it will be returned. Otherwise a new one will be made.

free-all-prim-nodes(obj: touching-list) => nonesource

Free all prim nodes used by all touching shapes in this touching-list.

touching-prim​

touching-prim: structuresource
Fields​
cprim: collide-shape-prim
has-tri?: symbol
tri: collide-tri-result

touching-prims-entry​

touching-prims-entry: structuresource
Fields​
next: touching-prims-entry
prev: touching-prims-entry
allocated?: symbol
u: float
prim1: touching-prim
prim2: touching-prim
Methods​
get-touched-prim(obj: touching-prims-entry, arg0: trsqv, arg1: touching-shapes-entry) => collide-shape-primsource

Get the primitive belonging to the collide shape that is touching.

touching-prims-entry-method-10: unknown
get-middle-of-bsphere-overlap(obj: touching-prims-entry, arg0: vector) => vectorsource

This is a bit weird...
But assuming the the bounding spheres overlap, draw a line between their centers, consider the line segment
that is inside of both spheres, and get the midpoint of that.

get-touched-tri(obj: touching-prims-entry, arg0: collide-shape, arg1: touching-shapes-entry) => collide-tri-resultsource

Get the triangle belonging to the the collide shape that is touching (if it has one, otherwise #f)

touching-prims-entry-pool​

touching-prims-entry-pool: structuresource
Fields​
head: touching-prims-entry
nodes: touching-prims-entry
Methods​
alloc-node(obj: touching-prims-entry-pool) => touching-prims-entrysource

Allocate a node. Will return #f if there are none left.

get-free-node-count(obj: touching-prims-entry-pool) => intsource

Get the number of nodes that are not in use.

init-list!(obj: touching-prims-entry-pool) => nonesource

Initialize all entries to be not allocated and in a linked list.

free-node(obj: touching-prims-entry-pool, arg0: touching-prims-entry) => touching-prims-entrysource

Free a node allocated with alloc-node

touching-shapes-entry​

touching-shapes-entry: structuresource
Fields​
cshape1: collide-shape
cshape2: collide-shape
resolve-u: int8
head: touching-prims-entry
Methods​
touching-shapes-entry-method-9: unknown
get-touched-shape(obj: touching-shapes-entry, arg0: collide-shape) => collide-shapesource

Get the other shape in a pair of shapes.

touching-shapes-entry-method-11: unknown
prims-touching?(obj: touching-shapes-entry, arg0: collide-shape-moving, arg1: uint) => touching-prims-entrysource

In a pair of collide shapes, is a prim from the given collide shape with the given prim-id mask touching the other shape?

prims-touching-action?(obj: touching-shapes-entry, arg0: collide-shape, arg1: collide-action, arg2: collide-action) => touching-prims-entrysource

In a pair of collide shapes, find a pair of colliding prims where the prim from the given collide shape has at least one of the actions in arg1
and none of the actions in arg2.

touching-shapes-entry-method-14: unknown
free-touching-prims-list(obj: touching-shapes-entry) => symbolsource

Return all nodes used by this touching-shapes-entry to the touching-prims-entry-pool

get-head(obj: touching-shapes-entry) => touching-prims-entrysource

Get the first pair of touching prims in a touching-shapes-entry

get-next(obj: touching-shapes-entry, arg0: touching-prims-entry) => touching-prims-entrysource

Get the next pair of touching prims.

Variables​


TOUCHING_LIST_LENGTH​

TOUCHING_LIST_LENGTH: unknownsource

collide-touch​

source

Types​


add-prims-touching-work​

add-prims-touching-work: structuresource

collide​

source

Variables​


*collide-vif0-init*​

*collide-vif0-init*: arraysource

main-collide​

source

Functions​


drawable-sphere-box-intersect?​

drawable-sphere-box-intersect?(arg0: drawable, arg1: bounding-box4w) => symbolsource

instance-sphere-box-intersect?​

instance-sphere-box-intersect?(arg0: drawable, arg1: instance-tie, arg2: bounding-box4w) => symbolsource

instance-tfragment-add-debug-sphere​

instance-tfragment-add-debug-sphere(arg0: drawable, arg1: instance-tie) => symbolsource

Types​


pat-mode-info​

pat-mode-info: structuresource
Fields​
name: string
wall-angle: float
color: rgba
hilite-color: rgba

pat-surface​

pat-surface: uint32source

Functions​


pat-event->string​

pat-event->string(pat: pat-surface) => stringsource

pat-material->string​

pat-material->string(pat: pat-surface) => stringsource

pat-mode->string​

pat-mode->string(pat: pat-surface) => stringsource

Variables​


*pat-mode-info*​

*pat-mode-info*: inline-arraysource

surface-h​

source

Types​


surface​

surface: basicsource
Fields​
type: type
name: symbol
turnv: float
turnvv: float
tiltv: float
tiltvv: float
transv-max: float
target-speed: float
seek0: float
seek90: float
seek180: float
fric: float
nonlin-fric-dist: float
slip-factor: float
slide-factor: float
slope-up-factor: float
slope-down-factor: float
slope-slip-angle: float
impact-fric: float
bend-factor: float
bend-speed: float
alignv: float
slope-up-traction: float
align-speed: float
active-hook: function
touch-hook: function
impact-hook: function
mult-hook: function
mode: symbol
flags: surface-flags
data: float
hook: function
dataw: uint32

Functions​


calc-terminal-vel​

calc-terminal-vel(arg0: float, arg1: float, arg2: float) => floatsource

calc-terminal2-vel​

calc-terminal2-vel(arg0: float, arg1: float, arg2: float, arg3: float) => floatsource

calc-terminal4-vel​

calc-terminal4-vel(arg0: float, arg1: float, arg2: float) => floatsource

surface-clamp-speed​

surface-clamp-speed(arg0: surface, arg1: surface, arg2: surface, arg3: int) => nonesource

When arg3 is 1, clamp speed of arg0 to the mins of arg0/arg1

surface-interp!​

surface-interp!(dst: surface, src0: surface, src1: surface, amount: float) => surfacesource

Create a surface between src0 and src1. For things like hooks/mode, src1 wins.

surface-mult!​

surface-mult!(dst: surface, src0: surface, src1: surface) => surfacesource

Multiply src0 by src1, and store the result in dst.

Variables​


*attack-mods*​

*attack-mods*: surfacesource

*dive-bottom-mods*​

*dive-bottom-mods*: surfacesource

*dive-mods*​

*dive-mods*: surfacesource

*double-jump-mods*​

*double-jump-mods*: surfacesource

*duck-attack-mods*​

*duck-attack-mods*: surfacesource

*duck-mods*​

*duck-mods*: surfacesource

*edge-grab-mods*​

*edge-grab-mods*: surfacesource

*edge-surface*​

*edge-surface*: surfacesource

*empty-mods*​

*empty-mods*: surfacesource

*flip-jump-mods*​

*flip-jump-mods*: surfacesource

*flop-land-mods*​

*flop-land-mods*: surfacesource

*flop-mods*​

*flop-mods*: surfacesource

*forward-high-jump-mods*​

*forward-high-jump-mods*: surfacesource

*forward-jump-mods*​

*forward-jump-mods*: surfacesource

*forward-pole-jump-mods*​

*forward-pole-jump-mods*: surfacesource

*grab-mods*​

*grab-mods*: surfacesource

*grass-surface*​

*grass-surface*: surfacesource

*high-jump-mods*​

*high-jump-mods*: surfacesource

*ice-surface*​

*ice-surface*: surfacesource

*jump-attack-mods*​

*jump-attack-mods*: surfacesource

*jump-mods*​

*jump-mods*: surfacesource

*launch-jump-mods*​

*launch-jump-mods*: surfacesource

*neutral-mods*​

*neutral-mods*: surfacesource

*pole-mods*​

*pole-mods*: surfacesource

*quicksand-surface*​

*quicksand-surface*: surfacesource

*run-attack-mods*​

*run-attack-mods*: surfacesource

*slope-surface*​

*slope-surface*: surfacesource

*smack-jump-mods*​

*smack-jump-mods*: surfacesource

*standard-ground-surface*​

*standard-ground-surface*: surfacesource

*stone-surface*​

*stone-surface*: surfacesource

*swim-mods*​

*swim-mods*: surfacesource

*swim-surface*​

*swim-surface*: surfacesource

*tar-surface*​

*tar-surface*: surfacesource

*tread-surface*​

*tread-surface*: surfacesource

*turn-around-mods*​

*turn-around-mods*: surfacesource

*uppercut-jump-mods*​

*uppercut-jump-mods*: surfacesource

*wade-mods*​

*wade-mods*: surfacesource

*wade-surface*​

*wade-surface*: surfacesource

*walk-mods*​

*walk-mods*: surfacesource

*walk-no-turn-mods*​

*walk-no-turn-mods*: surfacesource

*wheel-flip-mods*​

*wheel-flip-mods*: surfacesource

*wheel-mods*​

*wheel-mods*: surfacesource