Skip to main content

collide-cache-h

source

Types


collide-cache

collide-cache: basicsource
Fields
type: type
num-tris: int32
num-tris-u32: uint32
num-prims: int32
num-prims-u32: uint32
ignore-mask: pat-surface
ignore-processes: process
collide-box: bounding-box
collide-box4w: bounding-box4w
collide-with: collide-spec
unused: uint32
prims: collide-cache-prim
tris: collide-cache-tri
Methods
debug-draw(obj: collide-cache) => nonesource
fill-and-probe-using-line-sphere(obj: collide-cache, arg0: collide-query) => floatsource
fill-and-probe-using-spheres(obj: collide-cache, arg0: collide-query) => symbolsource
fill-using-bounding-box(obj: collide-cache, arg0: collide-query) => nonesource
fill-using-line-sphere(obj: collide-cache, arg0: collide-query) => nonesource
fill-using-spheres(obj: collide-cache, arg0: collide-query) => nonesource
reset(obj: collide-cache) => nonesource
probe-using-line-sphere(obj: collide-cache, arg0: collide-query) => floatsource
probe-using-spheres: unknown
fill-from-bg(obj: collide-cache, arg0: function, arg1: function, arg2: collide-query) => nonesource
fill-from-fg-boxes(obj: collide-cache) => nonesource
fill-from-fg-line-sphere(obj: collide-cache, arg0: collide-query) => nonesource
fill-from-water(obj: collide-cache, arg0: water-control) => nonesource
collide-cache-method-22: unknown
collide-cache-method-23: unknown
collide-cache-method-24: unknown
collide-cache-method-25: unknown

collide-cache-prim

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

collide-cache-tri

collide-cache-tri: structuresource
Fields
vertex: vector
extra-quad: uint8
pat: pat-surface
collide-ptr: basic
prim-index: uint16
user16: uint16
user32: uint32
clear-flags: uint128

collide-list

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

collide-list-item

collide-list-item: structuresource
Fields
mesh: instance-tie
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-cache

source

Types


collide-puls-work

collide-puls-work: structuresource
Fields
ignore-pat: pat-surface
bsphere: sphere
move-dist: vector

lsmi-work

lsmi-work: structuresource
Fields
best-u: float
orig-best-u: float
action: uint32
cquery: collide-query

collide-debug

source

Types


col-rend-filter

col-rend-filter: structuresource
Fields
show-pat-set: pat-surface
show-pat-clear: pat-surface
event-mask: uint32

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
Methods
no-collision-at-edge(obj: collide-edge-edge, arg0: collide-edge-work, arg1: edge-grab-info) => symbolsource

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-spec

collide-edge-spec: structuresource
Fields
split-dists: float
outward-offset: vector
flags: collide-edge-spec-flags
ignore-pat: pat-surface
max-dist-sqrd-to-outward-pt: float
max-dir-cosa-delta: float
max-dir-cosa-player: float
touching-segment: symbol
local-cache-fill-box: bounding-box
local-within-reach-box: bounding-box
local-player-spheres: sphere
local-player-hanging-spheres: sphere
local-player-leap-up-spheres: sphere

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
world-player-spheres: sphere
world-player-hanging-spheres: sphere
world-player-leap-up-spheres: sphere
spec: collide-edge-spec
process: pointer
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) => nonesource
debug-draw-edges(obj: collide-edge-work) => objectsource
debug-draw-tris(obj: collide-edge-work) => nonesource
debug-draw-sphere(obj: collide-edge-work) => nonesource
find-adjacent-edge(obj: collide-edge-work, arg0: collide-edge-hold-item, arg1: edge-grab-info) => nonesource
compute-center-point!(obj: collide-edge-work, arg0: collide-edge-edge, arg1: vector) => floatsource
get-best-hand-point(obj: collide-edge-work, arg0: vector, arg1: vector, arg2: int) => floatsource
find-grabbable-edges: unknown
find-grabbable-tris: unknown
should-add-to-list?: unknown
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
status: uint64
actor-cshape-prim-offset: int32
actor-handle: handle
hanging-matrix: matrix
edge-vertex: vector
center-hold: vector
tri-vertex: vector
adjacent-edge-left-vertex: vector
adjacent-edge-right-vertex: vector
left-hand-hold: vector
right-hand-hold: vector
center-hold-old: vector
edge-tri-pat: uint32
found-edge?: symbol
pilot-edge-grab?: symbol
pilot-edge-grab: pilot-edge-grab-info
pilot-start-grab-pos: vector
pilot-grab-interp: float
Methods
edge-grab-info-method-9: unknown
debug-draw(obj: edge-grab-info) => nonesource

pilot-edge-grab-info

pilot-edge-grab-info: structuresource
Fields
local-pos: vector
local-dir: vector
handle: handle

Variables


*collide-edge-spec*

*collide-edge-spec*: collide-edge-specsource

*collide-edge-work*

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

collide-edge-grab

source

Types


faei-stack-vars

faei-stack-vars: structuresource
Fields
hold-edge-vec-norm: vector
adj-edge-vec-norm: vector
found-left?: symbol
left-dot: float
found-right?: symbol
right-dot: float

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

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: vector4w
vertex-count: uint8
vertex-data-qwc: uint8
total-qwc: uint8
unused: uint8

collide-frag-vertex

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

collide-fragment

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

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

collide-func

source
Expand description

This file contains the primitive intersection functions used for collision.

Most take a description of primitive and a "probe"

The probe has an origin and a direction. The length of the direction vector is the length

of the probe.



Generally, collision functions will return the fraction of the probe to reach the primitive.

For example, if the probe is 5.0 long, and hits the primitive 2.0 away from the probe origin,

the return value (u) would be 0.4.



If (u) would be > 1.0, then it counts as "not intersecting" (object too far away)

If (u) would be < 0.0, then it counts as "not intersecting" (object behind probe)

If there's a miss, return COLLISION_MISS, a large negative number.

If we are inside of the primitive, return 0.0

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

Types


collide-query

collide-query: structuresource
Fields
best-other-tri: collide-tri-result
best-my-tri: collide-tri-result
ignore-processes: process-tree
ignore-process0: process-tree
ignore-process1: process-tree
ignore-pat: pat-surface
ignore-pat-s32: int32
collide-with: collide-spec
collide-with-s32: int32
overlay-params: uint32
bbox: bounding-box
bbox4w: bounding-box4w
bsphere: sphere
start-pos: vector
move-dist: vector
rlength: vector
exit-planes: plane
radius: float
inv-mat: matrix
spheres: inline-array
num-spheres: uint32
solid-only: symbol
best-dist: float
best-other-prim: collide-shape-prim
best-my-prim: collide-shape-prim
move-vec: vector
best-u: float
action-mask: collide-action
local-box4w: bounding-box4w
search-box: bounding-box4w
search-vector: vector4w
instance-mat: matrix
instance-ptr: basic
x-addr: uint32
x-step: uint32
y-addr: uint32
y-step: uint32
z-addr: uint32
z-step: uint32

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
overlap-test(obj: collide-mesh, arg0: collide-mesh-cache-tri, arg1: vector) => symbolsource
should-push-away-test(obj: collide-mesh, arg0: collide-mesh-cache-tri, arg1: collide-tri-result, arg2: vector, arg3: float) => floatsource
sphere-on-platform-test: unknown
unpack-mesh-to-cache!(obj: collide-mesh, arg0: inline-array, arg1: matrix) => nonesource

Unpack mesh and store in cache.
Transform triangles, computes normals and bbox.

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: uint32
data: uint8
Methods
populate-for-prim-mesh(obj: collide-mesh-cache, arg0: collide-shape-prim-mesh) => collide-mesh-cache-entrysource

Populate the mesh cache for the given prim-mesh.
Will reuse existing data only if the transform and object are the same.

is-id?(obj: collide-mesh-cache, arg0: int) => symbolsource
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

allocate!(obj: collide-mesh-cache, arg0: int) => collide-mesh-cache-entrysource

Allocate room in the collide-mesh-cache for an unpacked mesh with arg0 tris.

collide-mesh-cache-entry

collide-mesh-cache-entry: structuresource

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
collide-ptr: basic

collide-mesh

source
Expand description

note: this file has patched functions



this file has functions for foreground mesh collision functions. This is for stuff like jak being on a platform, or a

platform pushing jak away.



The "collide-mesh" is the foreground collision mesh type. These can be used as part of a collide-shape.



These can be added to the normal "collide-cache" and work with the most common collision queries.



However, there are a few special case collision queries that use a separate collide-mesh-cache.

The intented use is something like this:

- a mesh is unpacked to the collide-mesh-cache

- primitive vs. mesh tests are done using the unpacked data, reusing the data.



This collide-mesh-cache is limited compared to the real collide cache - this can only hold

a single mesh, so it's limited to tests like single foreground mesh vs. sphere.

Another limitation is that triangles don't have per-tri pat info.

Types


oot-work

oot-work: structuresource
Fields
intersect: vector
sphere-bbox4w: bounding-box4w

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
Expand description

this file is unused in jak 2.

a number of functions require a bunch of annoying casts/mips2c stuff, but are unused.

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-instance-tie-collide-frags

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

creates-new-method?

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

describe-methods

describe-methods(arg0: type) => symbolsource

distc

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

indent-to

indent-to(arg0: int) => nonesource

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

overrides-parent-method?

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

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

probe-traverse-draw-node

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

probe-traverse-inline-array-node

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

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-prim-core

collide-prim-core: structuresource
Fields
world-sphere: vector
collide-as: collide-spec
collide-with: collide-spec
action: collide-action
prim-type: prim-type
unused1: uint8
quad: uint128

collide-rider

collide-rider: structuresource
Fields
rider-handle: handle
sticky-prim: collide-shape-prim
prim-ry: float
rider-local-pos: vector

collide-rider-pool

collide-rider-pool: basicsource
Fields
type: type
alloc-count: int32
riders: collide-rider
Methods
add-rider(obj: collide-rider-pool, arg0: handle) => collide-ridersource
prepare(obj: collide-rider-pool) => nonesource

Gets this pool ready to be used to allow allocations. This should be called once at the start of every frame.

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
actor-hash-index: int16
process: process-drawable
max-iteration-count: uint8
nav-flags: nav-flags
total-prims: uint8
num-riders: uint8
pat-ignore-mask: pat-surface
event-self: symbol
event-other: symbol
root-prim: collide-shape-prim
riders: inline-array
penetrate-using: penetrate
penetrated-by: penetrate
backup-collide-as: collide-spec
backup-collide-with: collide-spec
event-priority: uint8
rider-max-momentum: float
Methods
move-by-vector!(obj: collide-shape, arg0: vector) => nonesource

Move everything by a vector.

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

Move root to a point.

debug-draw(obj: collide-shape) => nonesource
fill-cache-for-shape(obj: collide-shape, arg0: float, arg1: collide-query) => nonesource

Fill the collide cache for a collide-shape by buliding a bounding box and filling from that.

fill-cache-integrate-and-collide(obj: collide-shape, arg0: vector, arg1: collide-query, arg2: meters) => nonesource

Helper to fill the collide cache and call integrate-and-collide.

find-prim-by-id(obj: collide-shape, arg0: uint) => collide-shape-primsource
find-prim-by-id-logtest(obj: collide-shape, arg0: uint) => collide-shape-primsource
detect-riders!(obj: collide-shape) => symbolsource
build-bounding-box-for-shape(obj: collide-shape, arg0: bounding-box, arg1: float, arg2: collide-spec) => symbolsource
integrate-and-collide!(obj: collide-shape, arg0: vector) => nonesource
find-collision-meshes(obj: collide-shape) => nonesource

Find collision meshes for our collide prims.
The collide shape system is built in code, so this function should be called
to actually find the matching meshes.

on-platform(obj: collide-shape, arg0: collide-shape, arg1: collide-query) => symbolsource
find-overlapping-shapes(obj: collide-shape, arg0: overlaps-others-params) => symbolsource
shove-to-closest-point-on-path(obj: collide-shape, arg0: attack-info, arg1: float) => vectorsource
should-push-away(obj: collide-shape, other: collide-shape, cquery: collide-query) => symbolsource

Should this shape push away the other? Most generic implementation.

pull-rider!(obj: collide-shape, arg0: pull-rider-info) => nonesource
pull-riders!(obj: collide-shape) => symbolsource
do-push-aways(obj: collide-shape) => collide-specsource

Push away things.

update-transforms(obj: collide-shape) => nonesource

Update collisision transforms.

set-collide-with!(obj: collide-shape, arg0: collide-spec) => nonesource

Set the collide with field of everything.

set-collide-as!(obj: collide-shape, arg0: collide-spec) => nonesource

Set the collide as field of everything

modify-collide-as!(obj: collide-shape, arg0: int, arg1: collide-spec, arg2: collide-spec) => nonesource
send-shoves(obj: collide-shape, arg0: process, arg1: touching-shapes-entry, arg2: float, arg3: float, arg4: float) => symbolsource
above-ground?(obj: collide-shape, arg0: collide-query, arg1: vector, arg2: collide-spec, arg3: float, arg4: float, arg5: float) => symbolsource
water-info-init!(obj: collide-shape, arg0: water-info, arg1: collide-action) => water-infosource

Initialize a water-info with the currently loaded regions.

iterate-prims(obj: collide-shape, arg0: function) => nonesource

Call the given function for each prim.

pusher-init(obj: collide-shape) => nonesource

Initialize a collide-shape as a pusher and move it to the pusher pool.

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
actor-hash-index: int16
process: process-drawable
max-iteration-count: uint8
nav-flags: nav-flags
total-prims: uint8
num-riders: uint8
pat-ignore-mask: pat-surface
event-self: symbol
event-other: symbol
root-prim: collide-shape-prim
riders: inline-array
penetrate-using: penetrate
penetrated-by: penetrate
backup-collide-as: collide-spec
backup-collide-with: collide-spec
event-priority: uint8
rider-max-momentum: float
rider-time: time-frame
rider-last-move: vector
trans-old: vector
trans-old-old: vector
trans-old-old-old: vector
poly-pat: pat-surface
cur-pat: pat-surface
ground-pat: pat-surface
status: collide-status
old-status: collide-status
prev-status: collide-status
reaction-flag: cshape-reaction-flags
reaction: function
no-reaction: function
local-normal: vector
surface-normal: vector
poly-normal: vector
ground-poly-normal: vector
gspot-pos: vector
gspot-normal: vector
grount-touch-point: vector
ground-impact-vel: meters
surface-angle: float
poly-angle: float
touch-angle: float
coverage: float
dynam: dynamics
surf: surface
Methods
find-ground(obj: collide-shape-moving, arg0: collide-query, arg1: collide-spec, arg2: float, arg3: float, arg4: float) => symbolsource

Find the ground, return #t if we found it, and fill out gspot in the collide-query.

react-to-pat!(obj: collide-shape-moving, arg0: pat-surface) => intsource

React to colliding with the given 'pat'.

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

Move, ignoring all collision.

integrate-for-enemy-no-mtg(obj: collide-shape-moving, arg0: vector, arg1: overlaps-others-params) => symbolsource

Simpler move for enemy, with no moving to ground. Will just stop if the move collides.

move-above-ground(obj: collide-shape-moving, arg0: vector, arg1: move-above-ground-params) => nonesource

Move at the given velocity, while not going through the ground

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

Find the ground a move to it.

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

Move to point, and treat as ground.

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

Adjust the velocity from the acceleration of gravity.

collide-shape-moving-method-63(obj: collide-shape-moving, arg0: rigid-body, arg1: float) => nonesource
try-snap-to-surface(obj: collide-shape-moving, vel: vector, check-dist: float, amt: float, bounce-dist: float) => symbolsource

Strange function to try to find a surface and move to it.
Teleports a distance of check-dist, then moves back to the start point plus amt.
If this move hits something, moves to that surface, then an additional bounce-dist.
I have no idea what this is used for - it kinda seems like this is a hack to make sure that
projectiles that start inside something will hit that thing.

fill-and-try-snap-to-surface(obj: collide-shape-moving, arg0: vector, arg1: float, arg2: float, arg3: float, arg4: collide-query) => symbolsource

Fill the collision cache and try to snap to a nearby surface.

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

Main function to move forward until we hit a single thing, then react.

collide-with-all-collide-cache-prims(obj: collide-shape-moving, arg0: matrix, arg1: collide-query) => nonesource

collide-shape-prim

collide-shape-prim: basicsource
Fields
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
unused2: int8
prim-core: collide-prim-core
local-sphere: vector
world-sphere: vector
collide-as: collide-spec
collide-with: collide-spec
action: collide-action
prim-type: int8
radius: float
specific: uint8
Methods
debug-draw(obj: collide-shape-prim) => nonesource
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, arg1: object) => 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
collide-shape-prim-method-14: unknown
collide-with-collide-cache-prim-mesh(obj: collide-shape-prim, arg0: collide-query, arg1: collide-cache-prim) => nonesource
collide-with-collide-cache-prim-sphere(obj: collide-shape-prim, arg0: collide-query, arg1: collide-cache-prim) => nonesource
on-platform-test(obj: collide-shape-prim, arg0: collide-shape-prim, arg1: collide-query, arg2: float) => nonesource
should-push-away-test(obj: collide-shape-prim, arg0: collide-shape-prim, arg1: collide-query) => nonesource

Most generic should-push-away-test - child prims are expected to override.

should-push-away-a-group-test(obj: collide-shape-prim, other: collide-shape-prim-group, cquery: collide-query) => nonesource

should-push-away-test anything vs. a group.

collide-shape-prim-group

collide-shape-prim-group: collide-shape-primsource
Fields
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
unused2: int8
prim-core: collide-prim-core
local-sphere: vector
world-sphere: vector
collide-as: collide-spec
collide-with: collide-spec
action: collide-action
prim-type: int8
radius: float
specific: uint8
num-children: uint8
num-alloc-children: uint8
child: inline-array

collide-shape-prim-mesh

collide-shape-prim-mesh: collide-shape-primsource
Fields
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
unused2: int8
prim-core: collide-prim-core
local-sphere: vector
world-sphere: vector
collide-as: collide-spec
collide-with: collide-spec
action: collide-action
prim-type: int8
radius: float
specific: uint8
mesh: collide-mesh
mesh-id: int32
mesh-cache-id: uint32
mesh-cache-entry: collide-mesh-cache-entry

collide-shape-prim-sphere

collide-shape-prim-sphere: collide-shape-primsource
Fields
type: type
cshape: collide-shape
prim-id: uint32
transform-index: int8
unused2: int8
prim-core: collide-prim-core
local-sphere: vector
world-sphere: vector
collide-as: collide-spec
collide-with: collide-spec
action: collide-action
prim-type: int8
radius: float
specific: uint8
pat: pat-surface
nav-radius: float

move-above-ground-params

move-above-ground-params: structuresource
Fields
gnd-collide-with: collide-spec
popup: float
dont-move-if-overlaps?: symbol
hover-if-no-ground?: symbol
overlaps-params: overlaps-others-params
new-pos: vector
old-gspot-pos: vector
old-gspot-normal: vector
pat: pat-surface
on-ground?: symbol
do-move?: symbol

overlaps-others-params

overlaps-others-params: structuresource
Fields
options: overlaps-others-options
collide-with-filter: collide-spec
tlist: touching-list
filtered-root-collide-with: collide-spec
filtered-child-collide-with: collide-spec
filtered-other-collide-as: collide-spec

pull-rider-info

pull-rider-info: structuresource
Fields
rider: collide-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-shape

source
Expand description

Pushers



"pushers" are things that push things out of the way. For example, if a platform hits jak, it pushes him out of the way.

Nothing can ever push back against a pusher - they move on some fixed path and cannot be disturbed.

these are done by pairs of collide-shape's, and don't involve the main collide-cache.

Using the main collide cache wouldn't really make sense because a pusher never interacts with the background

and there's just one check per pair per frame.



the do-push-aways function is what actually does all the tests for all the objects.



there's a "pusher-pool" to make all pushers run at the end of a frame.



the "should push away test" (SPAT) checks to see if the movement of a pusher should push away another collide shape.

it returns a triangle and normal direction to push in.

Types


do-push-aways-work

do-push-aways-work: structuresource
Fields
cquery: collide-query
push-vel: vector
vec33: vector
cspec: collide-spec

Functions


collide-shape-draw-debug-marks

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

collide-shape-moving-angle-set!

collide-shape-moving-angle-set!(arg0: collide-shape-moving, arg1: vector, arg2: vector) => nonesource

Update the angle parameters

cshape-reaction-default

cshape-reaction-default(arg0: control-info, arg1: collide-query, arg2: vector, arg3: vector) => collide-statussource

Default collision reaction. Bounce off of wall, react to things, etc.

cshape-reaction-just-move

cshape-reaction-just-move(arg0: control-info, arg1: collide-query, arg2: vector) => collide-statussource

Simple collision reaction. Just stop at the obstacle.

cshape-reaction-update-state

cshape-reaction-update-state(arg0: control-info, arg1: collide-query, arg2: vector) => nonesource

Common update for cshape reaction.

debug-report-col-stats

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

find-ground-point

find-ground-point(arg0: control-info, arg1: vector, arg2: float, arg3: float) => vectorsource

Find a safe ground point to bounce the player back to if they jump onto lava or similar.

target-attack-up

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

Send events to target in response to hitting a surface that launches you up.

Variables


*col-timer-enable*

*col-timer-enable*: symbolsource

*col-timer*

*col-timer*: stopwatchsource

*frame-timer*

*frame-timer*: stopwatchsource

collide-target-h

source

Types


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
actor-hash-index: int16
process: process-drawable
max-iteration-count: uint8
nav-flags: nav-flags
total-prims: uint8
num-riders: uint8
pat-ignore-mask: pat-surface
event-self: symbol
event-other: symbol
root-prim: collide-shape-prim
riders: inline-array
penetrate-using: penetrate
penetrated-by: penetrate
backup-collide-as: collide-spec
backup-collide-with: collide-spec
event-priority: uint8
rider-max-momentum: float
rider-time: time-frame
rider-last-move: vector
trans-old: vector
trans-old-old: vector
trans-old-old-old: vector
poly-pat: pat-surface
cur-pat: pat-surface
ground-pat: pat-surface
status: collide-status
old-status: collide-status
prev-status: collide-status
reaction-flag: cshape-reaction-flags
reaction: function
no-reaction: function
local-normal: vector
surface-normal: vector
poly-normal: vector
ground-poly-normal: vector
gspot-pos: vector
gspot-normal: vector
grount-touch-point: vector
ground-impact-vel: meters
surface-angle: float
poly-angle: float
touch-angle: float
coverage: float
dynam: dynamics
surf: surface
unknown-float00: float
unknown-float01: float
unknown-float02: float
unknown-float03: float
transv-ctrl: vector
target-transv: vector
bent-gravity-normal: vector
quat-for-control: quaternion
override-quat: quaternion
override-quat-alpha: float
ctrl-xz-vel: float
unknown-float003: float
turn-go-the-long-way: float
velocity-after-thrust: float
turn-lockout-end-time: time-frame
turn-to-alt-heading: vector
last-transv: vector
last-quat-for-control: quaternion
trans-log-trans: vector
trans-log-times: time-frame
trans-log-idx: int32
draw-offset: vector
cspace-offset: vector
anim-collide-offset-local: vector
anim-collide-offset-world: vector
old-anim-collide-offset-world: vector
anim-collide-offset-delta-world: vector
standard-dynamics: dynamics
mod-surface: surface
current-surface: surface
prev-surf: surface
time-of-last-surface-change: time-frame
cpad: cpad-info
turn-to-angle: float
last-turn-to-angle: float
turn-to-magnitude: float
last-turn-to-magnitude: float
to-target-pt-xz: vector
last-to-target-pt-xz: vector
turn-to-target: vector
last-turn-to-target: vector
turn-history-ctrl: vector
pad-xz-dir: vector
last-pad-xz-dir: vector
pad-magnitude: float
last-pad-magnitude: float
time-of-last-pad-read: time-frame
w-R-c: matrix
c-R-w: matrix
ctrl-orientation: matrix
pre-collide-local-normal: vector
camera-pos: vector
cam-R-w: matrix
update-cam-R-w-start-time: int64
force-turn-to-direction: vector
force-turn-to-speed: float
unknown-floatiujh1bnb2n3i1: float
force-turn-to-strength: float
tongue-counter: int32
collide-extra-velocity: vector
additional-decaying-velocity: vector
additional-decaying-velocity-end-time: time-frame
additional-decaying-velocity-decay-start-time: time-frame
gravity-normal: vector
last-gravity-normal: vector
last-trans-any-surf: vector
unknown-float16: float
ground-contact-normal: vector
last-trans-on-ground: vector
ground-contact-sphere-center: vector
transv-on-last-impact: vector
list-time-on-ground: time-frame
ground-local-norm-dot-grav: float
local-slope-z: float
local-slope-x: float
surface-slope-z: float
surface-slope-x: float
last-time-on-surface: time-frame
normal-impact-vel: float
last-time-touching-actor: time-frame
wall-contact-pat: pat-surface
wall-contact-pt: vector
wall-contact-poly-normal: vector
wall-contact-normal: vector
actor-contact-pt: vector
actor-contact-normal: vector
actor-contact-handle: handle
gspot-pat-surfce: pat-surface
gspot-slope-z: float
gspot-slope-x: float
ctrl-slope-heading: float
ctrl-slope-z: float
ctrl-slope-x: float
unknown-word000: int32
unknown-float002: float
unknown-float-n12iuh3n1: float
unknown-float-ki1jhbn23hj: float
time-of-last-lc: time-frame
low-coverage-pat-next1: pat-surface
low-coverage-dist-to-next2: float
low-coverage-pat-next2: pat-surface
low-coverage-slope-to-next1: float
low-coverage-norm-of-next1: vector
low-coverage-norm-of-next2: vector
low-coverage-overhang-plane-normal: vector
low-coverage-tangent: vector
low-coverage-tangent-xz: vector
btransv: vector
blocked-factor: float
blocked-in-air-factor: float
time-of-last-clear-wall-in-jump: time-frame
time-of-last-lc-touch-edge: time-frame
collision-spheres: collide-shape-prim-sphere
unknown-word02: int32
last-roll-end-time: time-frame
last-running-attack-end-time: time-frame
last-hands-attempt-time: time-frame
last-attack-end-time: time-frame
last-feet-attempt-time: time-frame
unknown-time-frame13: time-frame
last-time-of-stuck: time-frame
bend-amount: float
bend-target: float
bend-speed: float
ctrl-to-head-offset: vector
lhand-cspace: cspace
rhand-cspace: cspace
midpoint-of-hands: vector
ctrl-to-hands-offset: vector
sidekick-root: cspace
collide-mode: symbol
collide-mode-transition: float
duck-gun-tube-transision: float
transv-history: vector
average-xz-vel: float
idx-of-fastest-xz-vel: int32
hand-to-edge-dist: float
unknown-symbol000: symbol
edge-grab-edge-dir: vector
unknown-vector35: vector
edge-grab-across-edge-dir: vector
last-successful-compute-edge-time: time-frame
edge-grab-start-time: time-frame
unknown-handle000: handle
anim-handle: handle
unknown-word04: uint32
unknown-spool-anim00: spool-anim
unknown-word05: int32
unknown-symbol01: symbol
unknown-float34: float
did-move-to-pole-or-max-jump-height: float
unknown-symbol03: float
unknown-float35: float
unknown-float36: float
unknown-float37: float
unknown-vector37: vector
unknown-vector38: vector
unknown-vector39: vector
unknown-vector40: vector
sliding-start-time: time-frame
unknown-time-frame18: time-frame
unknown-sound-id00: sound-id
unknown-handle02: handle
impact-ctrl: impact-control
unknown-word06: int32
unknown-vector41: vector
last-trans-leaving-surf: vector
unknown-float38: float
highest-jump-mark: vector
unknown-float39: float
unknown-time-frame19: time-frame
time-of-last-debug-float: time-frame
danger-mode: symbol
target-attack-id: uint32
attacked-by-id: int32
bomb-scale: float
attack-count: uint64
send-attack-dest: handle
send-attack-time: time-frame
unknown-combo-tracker00: combo-tracker
unknown-time-frame21: time-frame
unknown-dword07: int64
unknown-dword08: int64
unknown-dword09: int64
unknown-dword10: int64
jump-kind: symbol
unknown-quaternion04: quaternion
unknown-sound-id01: sound-id
unknown-float41: float
unknown-float42: float
history-idx: uint16
history-length: uint16
remaining-ctrl-iterations: int32
invul1-on-time: time-frame
invul1-off-time: time-frame
invul2-on-time: time-frame
invul2-off-time: time-frame
unknown-float43: float
unknown-float001: float
board-jump-and-swim-sound: sound-id
bubbles-sound: sound-id
unknown-time-frame26: time-frame
unknown-time-frame27: time-frame
yellow-eco-last-use-time: int64
align-xz-vel: vector
zx-vel-frac: float
unknown-sound-id04: sound-id
unknown-float45: float
default-collide-as-all: collide-spec
default-collide-as-fgnd: collide-spec
default-collide-with-all: collide-spec
default-collide-with-fgnd: collide-spec
time-of-last-zero-input: time-frame
time-of-last-nonzero-input: time-frame
time-between-zero-inputs: time-frame
time-of-last-debug-heal: time-frame
last-nonzero-input-dir-targ: quaternion
time-of-last-wall-hide-first-check-pass: time-frame
time-of-first-wall-hide-first-check-pass: time-frame
pad: uint8

collide-touch-h

source

Types


touching-list

touching-list: structuresource

touching-prim

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

touching-prims-entry

touching-prims-entry: structuresource

touching-prims-entry-pool

touching-prims-entry-pool: structuresource

touching-shapes-entry

touching-shapes-entry: structuresource

collide-touch

source

Types


add-prims-touching-work

add-prims-touching-work: structuresource

Functions


get-intersect-point

get-intersect-point(arg0: vector, arg1: touching-prims-entry, arg2: collide-shape, arg3: touching-shapes-entry) => vectorsource

collide

source
Expand description

this is some vif setup stuff that was in jak 1 as well - some code in collide-cache

uses VIF's unpack/upload to modify collision data. This gets ported to c++, just

keeping it here for reference.

Types


collide-query-with-2vec

collide-query-with-2vec: structuresource
Fields
cquery: collide-query
vec: vector
vec2: vector

collide-query-with-vec

collide-query-with-vec: structuresource
Fields
cquery: collide-query
vec: vector

Variables


*collide-vif0-init*

*collide-vif0-init*: arraysource

find-nearest

source

Types


search-info

search-info: structuresource
Fields
point: vector
best-point: vector
match-handle: handle
match: basic
best: float
radius: float
rating: search-info-flag
require: search-info-flag
mask: search-info-flag
rot-base: vector
ack-point: vector
rot-range: float

Functions


find-nearest-attackable

find-nearest-attackable(arg0: vector, arg1: float, arg2: uint, arg3: uint, arg4: vector, arg5: vector, arg6: float) => basicsource

find-nearest-focusable

find-nearest-focusable(arg0: array, arg1: vector, arg2: float, arg3: search-info-flag, arg4: search-info-flag, arg5: vector, arg6: vector, arg7: float) => basicsource

Variables


*search-info*

*search-info*: search-infosource

los-control-h

source

Types


los-control

los-control: structuresource
Fields
src-proc: handle
dst-proc: handle
have-los: time-frame
have-no-los: time-frame
check-interval: time-frame
last-check-time: time-frame
last-collide-result: collide-tri-result
collide-with: collide-spec
Methods
los-control-method-9(obj: los-control, process: process-focusable, trans-vec: vector, radius: float) => nonesource
check-los?(obj: los-control, arg0: time-frame) => symbolsource
skip-check-los?(obj: los-control, arg0: int) => symbolsource
set-dst-proc!(obj: los-control, dst: handle) => nonesource
new-source!(obj: los-control, proc: process, check-interval: time-frame, c-spec: collide-spec) => nonesource

los-control

source

Variables


*los-time-offset*

*los-time-offset*: time-framesource

main-collide

source

Functions


drawable-sphere-box-intersect?

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

instance-sphere-box-intersect?

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

instance-tfragment-add-debug-sphere

instance-tfragment-add-debug-sphere(drawable: drawable, tie: 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(arg0: pat-surface) => stringsource

pat-material->string

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

pat-mode->string

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

Variables


*pat-mode-info*

*pat-mode-info*: inline-arraysource