Skip to content

Instantly share code, notes, and snippets.

@aerosoul94
Last active October 3, 2023 13:37
Show Gist options
  • Save aerosoul94/3a2da3cdbef11f4031f19b2a6feaeb5c to your computer and use it in GitHub Desktop.
Save aerosoul94/3a2da3cdbef11f4031f19b2a6feaeb5c to your computer and use it in GitHub Desktop.
The Last of Us script disassembler
import struct
import sys
import re
import os
#
## StringId Generation
#
def create_table(poly):
init=0
l=[0]*256
for i in range(256):
t=init^(i<<24)
for j in range(8):
mask=1<<31
if(mask&t!=0):
t=(t<<1)^poly
else:
t=(t<<1)
l[i]=t&0xffffffff
return l
crc32_table = create_table(0x04c11db7)
def crc32(s, init=0):
crc = init
if s:
for c in s:
crc = (crc32_table[ ((crc>>24) ^ ord(c)) & 0xff ] \
^ (crc << 8)) & 0xffffffff
return crc
def fnv1a_64(s):
fnv = 0xcbf29ce484222325
for c in s:
fnv = ((ord(c) ^ fnv) * 0x100000001b3) \
& 0xffffffffffffffff
return fnv
def StringId(s):
return crc32(s)
vector_id = StringId('vector') # 0x012f77fe
string_id = StringId('string') # 0x0b3952e7
float_id = StringId('float') # 0x0f182ec3
angle_id = StringId('angle') # 0x13812cd6
state_id = StringId('state') # 0x2e6743e3
direction_id = StringId('direction') # 0x7194cbe7
color_id = StringId('color') # 0x71e73c6c
boolean_id = StringId('boolean') # 0x8b4e76ff
vec4_id = StringId('vec4') # 0x93bd2e95
script_lambda_id = StringId('script-lambda') # 0x9ed499e1
function_id = StringId('function') # 0xab3eb31f
int32_id = StringId('int32') # 0xc7cb2752
#
## DC File Structures
#
def read_u32(fp):
return int.from_bytes(fp.read(4), byteorder='little')
def read_i32(fp):
return int.from_bytes(fp.read(4), byteorder='little', signed=True)
def read_float(fp):
return struct.unpack('f', fp.read(4))[0]
class DcDescriptor:
def __init__(self, fp):
self.start = read_u32(fp)
read_u32(fp)
self.end = read_u32(fp)
read_u32(fp)
class DcDefinition:
def __init__(self, fp):
self.nameId = read_u32(fp)
self.typeId = read_u32(fp)
self.offset = read_u32(fp)
self.unk = read_u32(fp)
class DcHeader:
def __init__(self, fp):
self.magic = fp.read(4)
self.unk1 = read_u32(fp)
self.reloc = read_u32(fp)
self.unk2 = read_u32(fp)
self.unk3 = read_u32(fp)
self.defCount = read_u32(fp)
self.defTableOff = read_u32(fp)
self.unk4 = read_u32(fp)
#
## DC Instruction Decoder
#
inst_map = {
0: "return",
1: "intAdd", # (+ a b)
2: "intSub", # (- a b)
3: "intMul", # (* a b)
4: "intDiv", # (/ a b)
5: "floatAdd", # (+ a b)
6: "floatSub", # (- a b)
7: "floatMul", # (* a b)
8: "floatDiv", # (/ a b)
9: "loadStaticInt",
0xA: "loadStaticFloat",
0xB: "loadStaticPointer",
0xC: "loadImm",
0xD: "loadInt",
0xE: "loadFloat",
0xF: "loadPointer",
0x10: "storeInt",
0x11: "storeFloat",
0x12: "storePointer",
0x13: "lookupInt",
0x14: "lookupFloat",
0x15: "lookupPointer",
0x16: "moveInt",
0x17: "moveFloat",
0x18: "movePointer",
0x19: "castInteger",
0x1A: "castFloat",
0x1B: "call", # Call script function
0x1C: "callFf", # Call native function
0x1D: "cmpEqual", # (= a b)
0x1E: "cmpGt", # (> a b)
0x1F: "cmpGtEqual", # (>= a b)
0x20: "cmpLt", # (< a b)
0x21: "cmpLtEqual", # (<= a b)
0x22: "cmpFloatEqual", # (= a b)
0x23: "cmpFloatGt", # (> a b)
0x24: "cmpFloatGtEqual", # (>= a b)
0x25: "cmpFloatLt", # (< a b)
0x26: "cmpFloatLtEqual", # (<= a b)
0x27: "intMod", # (mod a)
0x28: "floatMod", # (mod a)
0x29: "intAbs", # (abs a)
0x2A: "floatAbs", # (abs a)
0x2D: "branch",
0x2E: "branchIf", # (if a)
0x2F: "branchIfNot", # (if (not a))
0x30: "opLogNot", # (not a)
0x31: "opBitAnd", # (logand a b)
0x32: "opBitNot", # (lognot a b)
0x33: "opBitOr", # (logior a b)
0x34: "opBitXor", # (logxor a b)
0x35: "opBitNor", # (lognor a)
0x36: "opLogAnd", # (and a b)
0x37: "opLogOr", # (or a b)
0x38: "intNeg",
0x39: "floatNeg",
0x3A: "loadParmCnt",
0x3B: "intAddImm",
0x3C: "intSubImm",
0x3D: "intMulImm",
0x3E: "intDivImm",
0x3F: "loadStaticI32Imm",
0x40: "loadStaticFloatImm",
0x41: "loadStaticPointerImm",
0x42: "intAsh",
0x43: "move",
0x44: "loadStaticU32Imm",
0x45: "loadStaticI8Imm",
0x46: "loadStaticU8Imm",
0x47: "loadStaticI16Imm",
0x48: "loadStaticU16Imm",
0x49: "loadStaticI64Imm",
0x4A: "loadStaticU64Imm"
}
sid_list = {}
native_table = {} # definitions from native functions
import_table = {} # definitions from imports
local_table = {} # defintiions from this binary
def get_pointer_ref(hashid):
fmt = "=>{}:{}"
nat = native_table.get(hashid)
if nat:
return fmt.format("NATIVE", nat)
imp = import_table.get(hashid)
if imp:
return fmt.format("IMPORT", imp)
loc = local_table.get(hashid)
if loc:
return fmt.format("LOCAL", loc)
return ""
def print_opLogNot(fp, name, inst, code, data):
s = "{} r{}, r{}".format(name, inst[1], inst[2])
cmt = "r{} = -(r{} == 0)".format(inst[1], inst[2])
return (s, cmt)
def print_opBitAnd(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} & r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_opBitNot(fp, name, inst, code, data):
s = "{} r{}, r{}".format(name, inst[1], inst[2])
cmt = "r{} = ~r{}".format(inst[1], inst[2])
return (s, cmt)
def print_opBitOr(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} | r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_opBitXor(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} ^ r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_opBitNor(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = ~(r{} | r{})".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_return(fp, name, inst, code, data):
s = "{} r{}, r{}".format(name, inst[1], inst[2])
return (s, None)
def print_cmpFloatGtEqual(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} >= r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_cmpEqual(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} == r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_cmpGt(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} > r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_cmpLt(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} < r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_cmpFloatGt(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} > r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_cmpFloatLt(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} < r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_branch(fp, name, inst, code, data):
off = inst[1] | inst[3] << 8
s = "{} 0x{:08X}".format(name, code + off * 0x4)
cmt = "goto 0x{:08X}".format(code + off * 0x4)
return (s, cmt)
def print_branchIf(fp, name, inst, code, data):
off = inst[1] | inst[3] << 8
s = "{} r{}, 0x{:08X}".format(name, inst[2], code + off * 0x4)
cmt = "if (r{}) goto 0x{:08X}".format(inst[2], code + off * 0x4)
return (s, cmt)
def print_branchIfNot(fp, name, inst, code, data):
off = inst[1] | inst[3] << 8
s = "{} r{}, 0x{:08X}".format(name, inst[2], code + off * 0x4)
cmt = "if (!r{}) goto 0x{:08X}".format(inst[2], code + off * 0x4)
return (s, cmt)
def print_intAdd(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} + r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_intSub(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} - r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_intMul(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} * r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_intDiv(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} / r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_floatAdd(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} + r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_floatSub(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} - r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_floatDiv(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} / r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_floatMul(fp, name, inst, code, data):
s = "{} r{}, r{}, r{}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} * r{}".format(inst[1], inst[2], inst[3])
return (s, cmt)
def print_lookupPointer(fp, name, inst, code, data):
s = "{} r{}, data[{}]".format(name, inst[1], inst[2])
fp.seek(data + (inst[2] * 8))
hashid = read_u32(fp)
cmt = "r{} = StringId(0x{:08x})".format(inst[1], hashid)
value = get_pointer_ref(hashid)
if value:
cmt += value
return (s, cmt)
def print_loadStaticU32Imm(fp, name, inst, code, data):
s = "{} r{}, data[{}]".format(name, inst[1], inst[2])
fp.seek(data + (inst[2] * 8))
value = read_u32(fp)
cmt = "r{} = {} (0x{:08x})".format(inst[1], value, value)
return (s, cmt)
def print_loadStaticI32Imm(fp, name, inst, code, data):
s = "{} r{}, data[{}]".format(name, inst[1], inst[2])
fp.seek(data + (inst[2] * 8))
svalue = read_i32(fp)
fp.seek(data + (inst[2] * 8))
value = read_u32(fp)
cmt = "r{} = {} (0x{:8x})".format(inst[1], svalue, value)
return (s, cmt)
def print_loadStaticFloatImm(fp, name, inst, code, data):
s = "{} r{}, data[{}]".format(name, inst[1], inst[2])
fp.seek(data + (inst[2] * 8))
value = read_float(fp)
cmt = "r{} = {}f".format(inst[1], value)
return (s, cmt)
def print_loadStaticPointerImm(fp, name, inst, code, data):
s = "{} r{}, data[{}]".format(name, inst[1], inst[2])
fp.seek(data + (inst[2] * 8))
value = read_u32(fp)
fp.seek(value)
d = bytearray()
c = fp.read(1)
while c != b'\0':
d += c
c = fp.read(1)
p = d.decode('ascii').replace("\n", "\\n")
cmt = "r{} = 0x{:08x} (\"{}\")".format(inst[1], value, p)
return (s, cmt)
def print_loadImm(fp, name, inst, code, data):
s = "{} r{}, 0x{:04x}".format(name, inst[1], (inst[2] | inst[3] << 8))
cmt = "r{} = {}".format(inst[1], inst[3] << 8 | inst[2])
return (s, cmt)
def print_intAddImm(fp, name, inst, code, data):
s = "{} r{}, r{}, 0x{:02x}".format(name, inst[1], inst[2], inst[3])
cmt = "r{} = r{} + {}".format(inst[1], inst[2], inst[3])
return (s,cmt)
def print_floatAbs(fp, name, inst, code, data):
s = "{} r{}, r{}".format(name, inst[1], inst[2])
cmt = "r{} = Abs(r{})".format(inst[1], inst[2])
return (s, cmt)
def print_move(fp, name, inst, code, data):
s = ("{} r{}, r{}").format(name, inst[1], inst[2])
cmt = "r{} = r{}".format(inst[1], inst[2])
return (s, cmt)
def print_call(fp, name, inst, code, data):
s = "{} r{}, r{}, {}".format(name, inst[1], inst[2], inst[3])
return (s, None)
def print_callFf(fp, name, inst, code, data):
s = "{} r{}, r{}, {}".format(name, inst[1], inst[2], inst[3])
return (s, None)
class DcDisassembler:
def __init__(self, fp):
self.fp = fp
self.dcHeader = None
self.defTable = []
self._read_header()
self._read_fntable()
def _read_header(self):
self.dcHeader = DcHeader(fp)
def _read_fntable(self):
for i in range(self.dcHeader.defCount):
definition = DcDefinition(self.fp)
self.defTable.append(definition)
self.defTable.sort(key=lambda d: d.offset)
def disassemble(self):
for definition in self.defTable:
# only disassemble lambdas or functions
if definition.typeId in (script_lambda_id, function_id):
funcName = local_table.get(definition.nameId)
self.fp.seek(definition.offset)
descriptor = DcDescriptor(self.fp)
if not funcName:
funcName = "func_{:X}".format(descriptor.start)
print("0x{:08X}:".format(descriptor.start))
print("0x{:08X}: {} # 0x{:08x}".format(descriptor.start, funcName.ljust(51),
definition.nameId))
self._disassemble_lambda(descriptor, funcName)
def _disassemble_lambda(self, descriptor, funcName):
# print("0x{:08X}:".format(descriptor.start))
# if funcName:
# print("0x{:08X}: {}".format(descriptor.start, funcName))
# else:
# print("0x{:08X}: func_{:x}".format(descriptor.start, descriptor.start))
for instOff in range(descriptor.start, descriptor.end, 4):
self.fp.seek(instOff)
inst = self.fp.read(4)
self._print_inst(instOff, inst, descriptor.start, descriptor.end)
#if inst[0] == 0:
# break
def _print_inst(self, offset, inst, code, data):
# Print offset and bytes
print("0x{:08X}: ".format(offset) +
("{:02X} " * 4).format(inst[0], inst[1], inst[2], inst[3]), end="")
name = inst_map.get(inst[0])
if not name:
print()
return
printer = globals().get("print_" + name)
if not printer:
print(name + " r{}, r{}, r{}".format(inst[1], inst[2], inst[3]))
return
l = printer(self.fp, name, inst, code, data)
print(l[0].ljust(40), end="")
if l[1]:
print("# {}".format(l[1]))
else:
print()
def load_dci(fp):
text = fp.read()
exports = re.search(r"\(export ([a-zA-Z0-9+-=\?!>\*]*\s?)*", text)
if exports:
for exp in exports[0].split()[1:]:
local_table[StringId(exp)] = exp
# TODO: imports name .bin files
# imports = re.search(r"\(import ([a-zA-Z0-9+-=\?!>\*]*\s?)*", text)
# if imports:
# for imp in imports[0].split()[1:]:
# import_table[StringId(imp)] = imp
def load_sid(fp):
lineno = 1
for line in fp.readlines():
entry = line.split()
if len(entry) != 2:
print("ERROR: Invalid entry at line {}: format is <hashid> <string>"
.format(lineno))
continue
if len(entry[0]) != 8:
print("ERROR: Invalid hash id at line {}: must be 8 characters"
.format(lineno))
continue
hashid = 0
try:
hashid = int(entry[0], 16)
except:
print("ERROR: Invalid hash id at line {}: not a valid hex value"
.format(lineno))
continue
native_table[hashid] = entry[1]
lineno += 1
if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} <script file>")
sys.exit()
exports = None
dci = sys.argv[1].split(".")[0] + ".dci"
if os.path.exists(dci):
with open(dci, 'r') as fp:
load_dci(fp)
if os.path.exists("sids.txt"):
with open("sids.txt", 'r') as fp:
load_sid(fp)
with open(sys.argv[1], 'rb') as fp:
disassembler = DcDisassembler(fp)
disassembler.disassemble()
95f6b8dd wait-say
be1ac62d say-with-context
779e6e9e wait-say-with-context
159dcdd2 say-pre-roll
140d107b pre-roll-vox-event
dafe91d1 pre-roll-vox-line-key
2279d61e stop-speaking
2fd9036a is-vox-busy?
71580f30 is-speaking?
a2c6b659 suppress-idle-speech
60683ccb shut-up
f5dbfaa7 voice-disable
32be7c35 voice-enable
b243c2c9 request-dialog
47f17218 dialog-acquire-exclusive-lock
eb0ad246 vox-played?
a3a22407 vox-completed?
6f5e13ba run-dialog-performance-test
9f684fa6 entity-set-level!
872523ee event::get-attack-info
488d3bb8 event-attack-type?
6edb6894 event-attack-weapon?
566fcba4 event-attack-source?
f56f37c9 event-object-damage
672ae8aa net-send-event
8679c923 broadcast-event-to-npcs
17f2da1c facebook-permitted?
7716bd68 force-infected-update-splashers
92a2fbdc player-disable-meat-shield-struggle
4038b641 player-force-meat-shield-struggle
7bf62ec6 player-force-flinch
3e107981 force-gun-side-left
205ae352 force-gun-side-right
ee42f3eb set-gas-can-is-full
7d89a82c e3-hack-force-camera-side-left
8d788dba camera-dont-collide-aim-cam-versus-npcs
ecaeed71 camera-get-animated-index
20e1da5d camera-set-default-follow
8ce62576 camera-force-strafe-look-at
97f64dc0 camera-set-slow-controls
dcb3081b camera-local-space
7d1ac5eb camera-shake-in-zoom-camera
291173d8 camera-store-locator
d40d2524 camera-restore-locator
49d850aa disable-flashlight-layer
e0a2bcab camera-force-is-crouched
96b50a91 camera-enable-relative-rotation
7c6f8323 camera-enable-cross-dissolve
b71ca7a3 camera-enable
8e04d518 camera-enable-no-focus
d76c8b64 camera-dont-reset-on-player-spawn
02e9965f camera-abandon
29c9e722 camera-disable
b5e93ed4 camera-fade-out
c31d3021 camera-moved-backwards?
d754ef39 camera-disable-all
ede188dd camera-abandon-all
d57d36e9 camera-aim-override-point
3c3d70d3 camera-aim-override-direction
0603b595 camera-cancel-aim-override
faa7265b allow-camera-cut-compensate
a4ac1c2f camera-animation-enable
d820968b camera-animation-disable
653edcdf force-aiming-camera-ultra-tight
0c474223 force-no-shift-camera-zoom-mode
5e104076 override-move-rotate-targets
92df02e8 player-hide-arrow
8dac1f65 kill-dropped-weapons-in-sphere
913bc948 translate-y-loop
4a6f015a object-on-object?
e990b4bd get-object-health
317f22c6 get-object-health-pct
cf2e79ae set-object-health
4cb84841 get-player-down-health
37ddf093 grab-rope
7107d57e drop-rope
4d209d87 detach-rope
a49f8426 rope-disable-character-collision
a4a7b2e6 rope-enable-character-collision
9b509cf9 give-sullivan-flashlight
94008bce kill-player-flashlight
ead294bd kill-sullivan-flashlight
59a3da2c sullivan-flashlight-to-hand
11799cd1 sullivan-flashlight-to-waist
c37fecc0 attach-flashlight
f94e2f06 turn-flashlight-on
b0eff27a flashlight-drain-battery
81465454 flashlight-reset
b1e5fa22 is-flashlight-on?
46eabe53 kill-flashlight
6a1ea60a get-aim-at-point
444c41f1 fire-bullet-without-shooter
a69370fd disable-weapon-anim-override-for-one-frame
c7fd990c fire-weapon
f472f811 fire-weapon-at-target
9062b153 emit-bullet-from-spawner
05dd6f46 simple-npc-fire-weapon
dde27074 set-object-faction
e18a9826 get-object-faction
42365f84 battle-select-best-spawner-from-group
077190db are-melee-prompts-enabled?
4895dc59 select-best-schema-spawner
1c445345 get-entity-region-process-id
8cdd98d5 make-active-character-more-wet
b207447a kill-all-projectiles
d8ad7497 set-scope-sway-multiplier
75729b42 kill-3d-text
c3b829bd player-set-good-position
6c742763 set-harvesting-enabled
cca41f6d harvesting-enabled?
2c101629 reset-harvesting-priority
39ace3d6 set-harvesting-priority
445ed996 get-harvesting-priority
cc24252e clear-harvested-bodies
e1ded080 start-subtitle-sequence
97dce0a2 stop-subtitle-sequence
c67bfed2 display-subtitle-text
389912a4 clear-subtitle-text
503b595e slow-mo-effect
6f26c192 stop-sound
49b63da6 play-sound
385747b6 play-sound-attached
3670e863 play-sound-at-joint
b1969208 play-sound-at-position
c5115628 play-sound-at-bound-frame
6d6f58a8 pre-roll-sound
00c11b61 use-audio-rain-level
3d69b8f7 fma-reset-part-modules
5b61666f fma-request-part-module
fab05d37 set-render-settings
b9eaa98a set-render-variant
f12fa0e3 set-render-settings-defaults
d862f50c deactivate-blur
dcfa292b restore-blur
32839068 letterbox-on
624bf689 letterbox-off
dea49a81 fade-to-black
5daf1ddd fade-to-white
77e20a49 fade-to-black-pers
57505a6e set-black-fade
6f684f90 set-white-fade
ef5d19f1 fade-audio
bda58a56 set-light-fov
6b4e7abd spawn-explosion
68f64e3c spawn-explosion-npc-only
95d6e606 spawn-proximity-mine
70b2732a disable-proximity-mines
c639ad71 add-dynamic-light
92509d49 add-dynamic-light-joint
2f5dc938 update-dynamic-light
a1d959c1 set-dynamic-light-color
28dc0ae4 remove-dynamic-light
81269944 attach-light-to-object
fbde9a13 set-light-process-intensity
ffdf4c6d get-light-process-intensity
fac98301 set-light-process-color
873bb941 get-light-process-color
6d97808c set-object-probe-tree-weight
9ac8d61f lean-and-set-ladder-tap
0be8135d set-ladder-wall-detection-probe-length
76a60252 set-ladder-probe-lean-delay
3687b7c1 set-ladder-fake-tap-registered
858e0ede set-no-projection-flag
7df5b4e3 allow-leg-ik-by-others
f3f258be disallow-leg-ik-by-others
f1a86ef0 set-ice-cave-stupid-gears-hack
5c9a1633 dont-collide-against-allies
ca5cf51d has-treasure?
9ba847c4 give-treasure
248fe6c9 remove-treasure
f43e2e57 give-ellie-comics
a373f28e give-joel-all-treasures
5dc46fdc give-ellie-default-treasures
3a88d93b remove-ellie-treasure
cd8422b1 give-profile-treasure
bc4b4f06 get-joypad
f00b13ed hide-hud-but-not-super-soaker
44a7360e hide-hud
ced6d946 hide-hud-show-buttons-fanfare
8b588b25 set-ragdoll-flow
896fb068 set-e3-loading-screen
47f1fb04 hud-set-timer
14887b7e hud-set-counter
188de675 hud-hide-weapon
bbb9b6e1 hud-hide-reticle
0804ee71 play-movie
0cd096e7 start-movie-audio
d55e5522 reset-actors
408bc467 set-player-current-dir-by-spawner
3a741cad make-noise
6d35f28d sync-audio-meta-data
17ae9a8b cache-sound-bank
617f9354 cache-sound-stream
a2ef05f1 cache-speech-stream-key
db22d0d6 cache-music-playlist
7a44fc2a sync-vox-meta-data
af922c78 sync-vox-igc-meta-data
41bf1caf sync-vox-mp-meta-data
1e87de60 is-on-screen
2f4147d8 play-music-stinger
0243b3bd get-current-music-playlist
0ef2b272 prefetch-music-stinger
b3994643 suppress-music
b4ee8f1d set-mixer-override
ad1c1740 set-global-sound-register
7ba7b379 get-global-sound-register
f04325f1 get-and-set-global-sound-register
99c0abab inc-global-sound-register
675f1960 set-global-sound-variable
b1e4bd59 get-global-sound-variable
358b2ad3 unlock-tutorial-message
6b645139 show-tutorial-message
343e1d6c hide-tutorial-message
9844df76 show-post-death-tutorial-message
0550a9bc calc-new-phase-from-speed-tree
dfcfb620 calc-start-phase
9ab7f010 calc-start-phase-max-frames
353ac3ee calc-start-phase-range
d34cab53 calc-start-phase-max-frames-tree
7f0bdc94 get-num-frames-in-anim
3213826f is-gore-allowed?
a4b464c9 is-difficulty-very-easy
00ec83d6 e3-fake-pause
7608633e is-e3-judges-mode?
a54ecab0 is-e3-stage-mode?
4ad547ba is-fallon-mode?
cba7d8c9 is-outskirts-demo?
74c06ece is-focus-test?
dbd3d0d8 is-test-task?
2a990f91 is-demo-part-2?
bff578ab is-t2?
dcf596c6 get-difficulty
a86d881d get-dda
daf9fed2 get-trap-door-index
7a0db769 override-fire-flash
4b07b550 count-ammo-pickups-within-region
87bb73eb player-disable-wall-touch
4a5e469f player-check-for-got-hit
a028680c spawn-attachable
60389c5e attach
dd6fcd47 detach
df85ea60 tutorial-hints-on?
50c97b57 does-auto-save-exist?
472480c9 set-focusable-ignore
bf697b95 set-focusable-grappled
a8024193 kill-all-breakables
50dc2915 kill-all-dropped-weapons
ee80843f add-lensflare
f1c0879d spawn-entity-facing-away-from-player
8fc62cca wait-spawn-entity-facing-away-from-player
b8df7eba spawn-low-health-entity
49265290 is-wearing-backpack?
58b2d6fd look-at
ea4f3c96 look-at-object
583d42f2 clear-look-at
514a52bc spawn-distraction-audio-event
36f45a80 draw-splash-screen
e988c89c get-weapon-process-id
e8722347 is-line-in-smoke
4add2f89 clear-annotate
f2766c26 annotate-object
780b9376 annotate-var
ed3e299c annotate-region
6dc692ac start-playback-on-material-texture
d4674d47 stop-playback-on-material-texture
f5559987 get-player-buff-level
3e91df67 give-player-buff-level
12d5de02 get-buff-amount
eaf4515e get-buff-symbol-value
1ffe603f set-hud-button-location
0832be4e set-recieves-light-from-player-flashlight
32d3de41 set-cast-shadows-in-player-flashlight
717e8c4e make-listen-mode-noise-at-position
f250ede9 player-playing-injured-partials?
25ecff5f openable-is-locked?
60fdbf43 openable-is-open?
936d0bfd show-low-health-tutorial
939be4b1 disable-low-health-tutorial
4cde3e05 is-listen-mode-enabled?
ae985ca7 hud-scope-reticle-display
7b4ebcc1 heard-ellie-joke-section
19c6fa58 is-spdlc?
a0954e78 is-current-language-english?
b247928f force-bloom-radius
841cb3bf phantom-shooter-enable
cf0f9556 phantom-shooter-set-target-process
9b840cd0 phantom-shooter-set-facing-bound-frame
786e672b phantom-shooter-enable-target-tracking
91ed86fe phantom-shooter-shoot-and-kill-target
d45b663d simple-npc-clear-requests
11d5b137 simple-npc-get-loco-state
82ee0196 simple-npc-force-loco-state
531b2883 simple-npc-request-idle
1eb4517c simple-npc-request-spline-move
4ee8a81a simple-npc-request-spline-flock
ee1cb040 simple-npc-request-spline-flock-with-mover
8f02b6dd simple-npc-request-flock-to-goal
f97433af simple-npc-is-female?
143c2925 simple-npc-reached-goal?
7e88e127 simple-npc-request-chase
e49e20c3 simple-npc-get-chase-target
1191adda simple-npc-set-anim-overlay
b1be8da2 simple-npc-set-anim-params
3e4a8890 simple-npc-set-nav-group
d65f7f82 simple-npc-enable-adjust-to-nav-mesh
4d8c01cb simple-npc-set-movement-speed-scale
fc073392 simple-npc-set-turn-rate-scale
0bbacf8a simple-npc-find-nearest-victim
580ae21e simple-npc-find-neighbors
8062508d simple-npc-die
34964ffa restore-npc
b886e873 restore-npc-from-limbo
89fc7b69 c-spawn-npc-limbo
80cd27ad c-spawn-npc*
d0b21510 remove-defunct-npcs
695133c3 npc-allow-camera-clip-during-igc
1a6601a0 npc-mark-as-defunct
75039236 npc-set-default-to-search
2bbee040 npc-my-battle-manager-id
5284d231 debug-caption
9ae36e55 npc-send-to-limbo
b15f78eb npc-is-initial-spawn
90c43236 npc-get-limbo-restore-state
6d7e2b5f npc-set-combat-params
ef527bc0 npc-smart-look-around
c4823c39 point-at
65838dd8 point-at-object
4b163339 clear-point-at
238a99a6 npc-die
56eefcb1 npc-disable-ragdoll
24b4acf3 all-enemy-npcs-die
69bec34b npcs-get-player-position
ba80ef41 npc-set-combat-behavior
923e28ac npc-set-targeting-params
9d4025fb npc-set-outer-cover-frustum-angle
59e2a568 npc-set-inner-cover-frustum-angle
9f80d21a npc-set-friend-in-line-of-fire-radius
0df8a402 npc-use-closest-cover
cd422d55 wait-npc-use-closest-cover
91e2b256 npc-use-closest-perch
51583b01 wait-npc-use-closest-perch
017ff878 npc-cover-throw-grenade-anim
6cf8461b npc-use-cinematic-action-pack
5c518d05 wait-npc-use-cinematic-action-pack
0c66e9b0 npc-enable-grenade-friend-check
e4fc48c3 npc-killed?
e3c542be npc-spawned?
e5325bd4 npc-alive?
c9f4d633 npc-infected-threat?
28189ca9 npc-lobotomised?
392492ef npc-enable-skill
3a7b18ba npc-disable-skill
4ed55c14 npc-using-skill?
4830ee74 npc-stop-script
2608ede1 npc-using-motion-type?
63b30199 npc-add-traversal-skill
56f22e2c npc-remove-traversal-skill
31351ecc npc-infected-set-patrol-route
314cfbb7 npc-set-patrol-search
e72b7b1b wait-npc-patrol
42138eea net-npc-patrol
d8260e82 wait-npc-patrol-search
b4c05414 npc-patrol-search?
24af2568 wait-npc-scavenge
28c975e0 npc-set-emotion
2290eecd npc-set-ignore
76704022 npc-set-allow-adjust-head-to-nav-map
4991d3d8 npc-set-find-nav-mesh-y-threshold
8be2feee npc-enable-character-collider
27b616c3 npc-disable-character-collider
3011cfdb remove-nav-mesh-crouch-constraint
32cfdf75 npc-force-strafe
833d78fb npc-disallow-strafe
f6cb805b npc-enable-block-first-tap-delay
36caddc8 npc-set-zone-region
3f7de282 npc-set-zone-marker
f05480c1 npc-lock-to-zone
9a180dd8 npc-clear-zone
8e4b5e8c npc-set-zone-center-and-radius
eaa06d24 get-npc-search-target-point
ba99fef0 get-search-dead-body-point
2ccec08c get-gesture-name-from-speaker-direction-and-weapon-type
13619da1 npc-get-time-since-saw-entity
a41bbcb9 npc-get-random-point-in-zone
1554b39d npc-reject-request-to-investigate
2092946e npc-reject-request-to-return-from-investigate
f4ccad4f npc-is-missing?
dd5841d5 npc-check-for-missing-friends
4875b09d npc-target-in-zone?
eb265e4d npc-in-combat?
84be6cf9 npc-combat-behavior-time
fec8d941 npc-set-movement-speed-scale
4ab54ecc npc-set-zone-update-method
2816acd3 npc-set-zone-center-object
91717c44 npc-grab-object
2e1d3291 npc-drop-object
c4cac9a0 npc-destroy-held-object
4d008bbc npc-set-perfect-aim
ea79b72c npc-set-to-player-faction
95ca7e04 npc-make-others-aware-of
2fc044de npc-enable-shooting
6157e60a npc-set-shot-damage-multiplier
6333da76 throw-grenade
73f7057a npc-throw-grenade-at-player
c753b054 npc-set-vehicle
2361de65 npc-set-turret
c4f8a990 npc-set-gunner
32866002 npc-set-defend-point
8a80b796 npc-clear-defend-point
25f05b04 npc-set-com-group-id
fd05e64c npc-get-time-since-in-investigate
e130a8b3 npc-is-aware-of?
504c24f0 npc-make-aware-of
a386a090 npc-combat-investigate
ed8a3df5 npc-make-aware-of-at
1e857d89 npc-forget-target
78fdc8d9 npc-start-search
1049852a npc-search
c6331a18 npc-search-zone
c95a1af6 enable-npc-search-update-dialog
55345489 npc-can-see?
0a5fa063 npc-can-see-target?
2361a73d npc-has-confirmed-status?
6054bcdd npc-set-demeanor
00e100a5 npc-get-demeanor
f8dab430 npc-in-limbo?
a13664b3 npc-teleport-to
488df8df npc-move-to-dynamic-speed
44c8d2a5 wait-npc-move-to-dynamic-speed
34758859 npc-move-to-dynamic-speed-plane
1c7f836d wait-npc-move-to-dynamic-speed-plane
0424a55a npc-move-to-dynamic-speed-goal
79ddd6ca wait-npc-move-to-dynamic-speed-goal
7cb0bb43 npc-move-to
d85e63ff set-global-fight-params
21d05d67 wait-npc
9240b713 wait-npc-move-to
6543fd73 npc-move-to-in-search
a5f97424 wait-npc-move-to-in-search
2d382cfe npc-move-to-player
64188c96 wait-npc-move-to-player
cadc6d12 npc-give-player
65dc8951 wait-npc-give-player
b89b4c90 npc-move-to-spawner
8e74a4e8 wait-npc-move-to-spawner
3f692bed npc-move-to-spawner-in-search
0fc0e0f3 wait-npc-move-to-spawner-in-search
8c4fc0df npc-move-to-entry
77a41349 wait-npc-move-to-entry
4db7826b npc-stand-and-shoot
8791ff87 npc-move-through-tap
a6cda7a5 wait-npc-move-through-tap
6f3cb12d npc-teleport-to-ap
2b949798 npc-stop
e3b772a8 npc-fire-weapon
ee5c93b6 npc-reload-weapon
c6ebc1fb npc-aim-at-point
0f6f6948 wait-npc-aim-at-point
12f1eb31 npc-aim-at-object
e91a38a7 wait-npc-aim-at-object
f7d000b4 wait-npc-surprise
fefbd6c7 npc-surprise
37332723 npc-stop-aiming
d96c9f58 npc-lower-weapon
c46f6c24 npc-set-hearing-multiplier
8952502b npc-set-distraction-hearing-multiplier
aea6af12 npc-sniper-set-watch-area
f8b9878c npc-sniper-disable-watch-area
c73764df npc-is-nav-map-position-blocked?
e8c6c993 npc-group-alive-count
61512ae0 npc-group-spawned-count
034b1021 npc-group-dead-count
97e6e340 npc-group-find-first-alive
90362d38 npc-prefer-target
2f9f4c95 npc-nonprefer-target
c2633ebc npc-swap-with-ragdoll
91c47d81 npc-set-corpse-timeout
41bd32d4 kill-all-ragdolls-in-region
37a3154f npc-disable-ragdoll-corpses
e0149cb2 set-searchmap-diffusion-speed
94a52ba0 npc-drop-weapon
c52e64f4 npc-take-weapon
df5a7a07 npc-give-weapon
19f5239a npc-drive-vehicle-to-point
a70867aa npc-drive-return-to-patrol-timeout
de762e56 npc-make-listen-mode-noise
925d4b61 npc-make-loud-listen-mode-noise
395f20d1 npc-set-show-listen-mode-ally-icon
d331a5b5 npc-set-weapon-visible
2f7c45eb npc-has-firearm?
1ad92809 npc-has-grenades?
572d826c set-health-parameters
1272e557 npc-change-vision-settings
4e3f7482 npc-attach-to-battle-manager
196db2d3 npc-update-move-dest
8715973e npc-set-accuracy-multiplier
56a2902b npc-in-melee-with-player?
9754326d npc-entered-action-pack?
d815d9a6 spawn-dynamic-contextual-look-hint
1409f930 npc-allow-weapon-drop
31968965 npc-set-allow-lose-target-out-of-zone
46944d98 npc-turn-to
a86441c8 wait-npc-turn-to
83adc6c2 wait-for-npc-not-busy
b2af6c17 npc-has-entities?
504d8b8c npc-is-on-nav-mesh?
7add53d9 npc-is-player-in-front?
01630394 npc-play-facial-anim
1a69b5ad npc-alive-count
1a933d69 npc-max-count
bf0f9313 npc-limbo-count
e8c76e33 npc-throw
1f219b1b wait-npc-throw
33709653 npc-max-limbo-count
4d44ba7d npc-clear-limbo-records
9d7634c6 npc-clear-limbo-records-for-npc
0b765dc4 npc-is-in-scripted-anim?
50b1376b npc-fired-recently?
1e3d6840 npc-playing-scripted-animation?
bb1575df npc-set-remap
c08bea01 enable-melee-target
ace81e0f npc-shoot-and-kill-target
a706995d npc-enable-player-shoving
c2e837b5 npc-get-look-id
14f1565d npc-get-melee-type
631ae1c2 npc-get-motion-type
278e7061 npc-weapon-down
37e00e77 npc-weapon-up
33633de2 npc-holster-weapon
7a439d8a wait-npc-holster-weapon
3b698f25 npc-kill
7ca8796e npc-audio-gameplay-event
5bd74a1b npc-set-cover-params
942f9b8f npc-set-surprise-params
5ba0372a npc-set-infected-params
56daf1d5 infected-allow-sleep
2871dfd1 infected-is-asleep?
d5b03231 infected-is-distracted?
a3601bcb infected-is-sniffing?
091cc3d6 throw-infected-pustule
546c162c infected-get-time-since-armor-pustule-burst
91cd60d5 infected-make-distraction
d5b98649 npc-do-behavior
7ab9620a wait-npc-do-behavior
58f57f9b npc-stop-behavior
55215a29 behavior-infected-canvass-params
454ac695 behavior-turn-to-face-params
14dd249a behavior-shoot-stationary-params
d80e064b behavior-cover-shoot-params
a85669fd behavior-cover-params
04c05ae3 behavior-move-to-params
01fdf736 behavior-shoot-moving-params
1598d905 npc-set-script-mode
8c6c653f get-npc-archetype-id
b5a1dda5 get-npc-archetype
c18fbdc9 npc-set-melee-skill-settings
86579ad5 wait-npc-enter-zone
7a5ba1e3 npc-clear-request-movement
3229bbf9 npc-request-hold
d9fcc3dc npc-set-combat-follow-group
addb00ed npc-clear-combat-follow-group
f731c7f6 npc-request-explore
c1de2f8e wait-npc-request-explore
3ef77f9d npc-request-follow
5993092c npc-allow-follow-flee
cf06bfbc npc-buddy-combat-loose
5edd69ed npc-request-lead
9759c15e wait-npc-request-lead
4dd51af8 npc-request-buddy-cover-post
5fa020d3 wait-npc-request-buddy-cover-post
5f224a88 npc-request-buddy-open-post
9977336f wait-npc-request-buddy-open-post
97e70681 npc-request-dont-attack
aab59aad npc-request-always-attack
7d44d995 npc-request-tommy-attack
7b2238d3 npc-request-default-attack
bbbcd98c npc-fire-once-at-position
6d572015 npc-holding-pick-up-item?
74957908 npc-buddy-allow-warn
29d9283c npc-buddy-allow-gifting-combat
f50e73c3 npc-buddy-allow-gifting-explore
f9dfad68 npc-disable-flat-vision-cone
eaf7df14 npc-buddy-allow-gifting-follow
adf134a9 npc-buddy-enable-corpse-inspect
bbc8d433 npc-buddy-allow-end-combat-warn
82b7da6c npc-buddy-end-combat-warn-allowed?
e6c6c853 npc-buddy-allow-ambient-vox
1259c92e npc-allow-combat-remarks
3283ce05 npc-faction-allow-combat-remarks
088721b3 npc-set-buddy-remarks-mode
f99fd1c1 npc-buddy-allow-item-remarks
9ff048ae is-any-buddy-speaking?
cf9a32b2 npc-nearest-ally
b39d79e7 npc-override-hit-reaction-dir
b40ac967 npc-in-cover?
1ffa51df npc-set-throwable-target
ffd61356 npc-dead-and-not-charred?
c0a474fd npc-charred?
961b3e8e npc-on-screen-and-visible?
ae47380d npc-on-screen?
7119a63c npc-e3-demo-shotgun-finale
518079ad npc-get-on-screen-time
f36a92b1 npc-set-hud-warning
015c8973 npc-limb-is-dismembered?
af8d0aff npc-can-dismember-limb?
dbc785a5 npc-dismember-limb
e570936e npc-can-damage-limb?
4858c2a2 npc-damage-limb
f53521be npc-is-decapitated?
0f0d4f61 npc-get-state-desc
c3e878ff npc-can-see-flashlight?
783c564c npc-flashlight-controller-is-stable--internal
df4ad9d7 npc-is-flashlight-drawn?
b5ab2bb4 npc-set-requested-motion-type
6fe19e6f npc-set-arrival-motion-type
c4f880f5 dark-npcs-see-flashlight
ed79cd20 force-disable-all-ai-weapon-ik
4e58d7e3 npc-set-arrival-distance
d3393302 npc-get-arrival-distance
2e78a235 npc-set-force-player-push
88737c67 npc-set-player-evade
28b531c7 npc-set-player-collide-gesture
9ef3a065 npc-navigation-in-progress?
3c2cd983 npc-get-entered-ap-type
4dc13b2f npc-in-frenzy?
21527769 npc-set-primary-weapon
73438c3d npc-reset-primary-weapon
084ebb58 wait-npc-turret-aim-point
013a11fe npc-get-prop
9c4e92fc npc-get-time-since-targetted
0aab2d08 npc-is-in-cover?
63e74530 npc-enable-hit-reactions
a818ada9 npc-change-prop-parent
173362eb npc-spawn-prop
63bfd6df npc-hide-from-listen-mode-for-one-frame
c5713bf4 is-npc?
62500a8e npc-test-dialog
c11b7956 npc-log
bdb5798b wait-gesture
be964e38 gesture-to-point
9f2d0a3e get-currently-playing-gesture
8157ed96 allow-idle-gestures?
1f69bbc1 disallow-idle-gestures
184ef728 camera-set-strafe-run
3d5a351c camera-set-strafe-sprint
c722ae4d camera-set-strafe-crouch
b84fe955 camera-set-strafe-jump
40c0e094 camera-set-flashlight
7c2f7800 camera-set-push-pull-override
99cb63c9 camera-set-flashlight-crouch
e5fc496c camera-set-strafe-melee
58c76e45 set-e3-hack-crouch-camera-settings
a9b8d56c photo-mode-clip-to-ceiling
e937ebe4 net-can-earn-money?
7708f645 net-coop-host-script-id
bfe7ba4e net-coop-team-failed?
601d65ab net-current-net-task
720a7247 net-current-net-subtask
9921bb55 net-current-net-map-id
529e3f1e net-current-round
cfcfe09a net-spawn-entity
c371f4a6 net-spawn-entity-at
ef97df8a net-kill-entity
eb633936 net-all-players-dead?
51e8cebf get-team-color
2eaa0a3d set-interrogation-winning-team
3d85f092 set-revive-settings
1f8c0a58 net-draw-objective-icon
b48148b6 net-draw-popup
05752cfc net-player-coop-id
2335480a net-npc-confirm-coop-players-contact
85afd403 net-get-player-by-net-id
37c58ef3 net-is-player-local?
4e0a4ba1 net-get-joypad-from-player
a32306d0 net-get-net-id-from-joypad
1f9f64e3 net-get-net-player-from-joypad
3335df3d net-get-net-id-from-player
6664a2bf net-get-team
50c854ee net-get-npc-fight-bound-frame
1da4f418 net-apply-npc-fight-damage
21c7b6a1 net-character-killed?
91976cca net-get-carry-object
a4200079 net-get-held-object-spawner
b88990b0 net-set-booster
18319b3a net-get-booster-level
36ac1a31 net-get-buff-amount-float
fe7f13ae net-get-buff-amount-int32
8f971ab5 net-get-grapple-time
b6365edd net-update-fight-ref
46f27e55 net-active-player-count
16903a3f net-go
27888b29 client-net-go
9e47860f net-set-fail-reason
e463f09c net-all-players-spawned?
053948dc net-all-players-out-of-idle?
0d00e5f8 net-set-float
c5d3ec67 net-set-int32
8a9ede38 net-set-boolean
d5e2614f net-set-symbol
ab284eaa net-get-npc
09995daa net-set-counter
e043c749 net-set-timer
d759b3a2 net-set-waves
4114aa2c net-set-interrogations
a524d95a net-set-lockbox-percent
c79ed6be net-set-message
dcce1165 net-signal-start
49bb70a4 net-igcs-enabled?
46e0f6a9 net-is-matchmaking?
ca6127b4 net-joined-late?
85d179ae is-multi?
d670a567 net-get-game-type
f9dd8a4f net-reparent-players
7b316107 net-start-countdown
24f74e8a net-split-screen?
5983248d net-joypad-valid?
511a0e63 net-get-screen-index
ca6c02b2 net-player-blocking?
ea074f56 net-get-secured-team
d385ac70 net-fade-to-black
06d4f65a net-fade-from-black
2790c9cf get-net-owner
25966a62 net-increment-stat
0a4f15ed net-increment-stat-local
1a650fb4 net-increment-player-score
41b5137b net-increment-team-score
f52dff00 net-get-score
086c135c net-get-stat
a3dbbf91 net-get-rounds-won
5c2254c4 net-player-exposed?
772e6289 net-set-player-spawner
65bb7f97 net-get-last-living-team
9b1b35cd net-get-team-count
1c04700c net-get-team-respawn-pool
d7297a0a net-kill-all-mines
4ba6a73b net-add-radar-icon
8f9a4a09 net-radar-and-objective
57e5a6e9 net-add-respawn-weight-point
e0fe121d net-clear-respawn-weight-point
d64c0047 net-clear-respawn-weight-points
c71b0adf net-set-min-respawn-wait-time
927d3ccd net-set-wipe-respawn
0af05693 stat-value?
356d1db1 increment-stat
51d790ed flag-stat
d6aeac89 reset-stat
0e7a9ff4 log-finish-game
7a7db2cd log-finish-dlc
fe05bcfd set-stat-bit
504571e6 wait-holster-player-weapon
90fff8b1 holster-player-weapon
c6728174 player-in-combat?
34220ce8 set-tension-mode
780538ce get-tension-mode
22e90916 override-aim-fov
6ec37668 reset-aim-fov
34e20686 player-has-snuck-away?
2722ade3 fall-to-death
b555b6e3 disable-fall-to-death
fad44485 player-in-region?
e885c4d4 player-in-state?
53838e80 player-is-aiming?
97b2fd28 player-in-cover?
5d2d16c9 disable-edge-grab
792ac0c2 player-force-edge-fall
e99560ae is-move-mode-relaxed?
7f4eefa5 set-move-mode
16ea1a1d set-walk-type
ede11587 set-run-type
0a136990 set-walk-relaxed-type
60d89fba set-run-relaxed-type
9b10511f set-sprint-relaxed-type
f99d6f23 set-walk-uneasy-type
96634eae set-run-uneasy-type
abe9d50c set-sprint-tense-type
0d672701 set-super-sprint-tense-type
e1758d92 set-crouch-walk-type
49a4d1f5 set-crouch-sprint-type
3b28e552 set-run-tense-type
e7638ca3 set-walk-tense-type
d09848fe player-disable-melee-swarmed
e8e13e7d force-distance-stop
da533edc allow-back-jump-anywhere
835b6fe2 set-reverse-jump-enable
2f1bd5dd get-player-platform
3a646fb5 player-force-jump-at
ab7b43b9 player-climbing-up?
11acabb5 player-facing-position?
024b9be2 set-player-invincible
5cbb48a8 no-hit-reactions-when-invincible
01603e59 player-invincible?
ab1b6459 set-player-infinite-ammo
bfcb2d41 set-player-draw-weapon-in-combat-tension
2fae80c5 kill-player
95bbaead kill-player-no-anim-by-id
c63eaefa kill-player-no-anim
f1811405 player-go-ragdoll
0f13fdaa player-force-aiming
0fdcb8c4 player-force-aiming-time
4cb98983 player-force-scope-zoom
e96cd997 force-uboat-collision
c6e56494 player-run-speed
402facab disable-dyno-jump-fail-looks
86550364 enable-dyno-jump-fail-looks
4ed6b3a5 disable-force-ledge-drop
47a854a4 set-cover-push-back-dist
4cbbc128 swim-enable
2c5c5a4a swim-disable
a8507ebc dive-enable
114e9eef dive-disable
5542401b swim-allow-stand-on-bottom
315fb50b swim-disallow-stand-on-bottom
fa72a080 force-player-swim
e6826441 player-swimming?
b6be78bd player-diving?
34a450aa player-water-over-head?
3e2b636c player-swim-carry
9e5786ed player-swim-flow
a6061718 get-player-breath-level
dbf42d58 set-player-breath-level
621b4892 set-player-breath-settings-id
1f0e45cc player-set-max-swim-depth
e148f705 set-player-scripted-crouch-mode
d7ea5232 is-player-crouched?
b1da0d91 set-swim-drag-multiplier
6409bea0 create-belt-attachment
212f3614 weapon-set-reset
c67f2bb8 player-pushing-object?
928ac7fc player-climb-up
4a0022e9 player-hanging-near-spawner?
73ca3fa4 player-get-closest-edge-bound-frame
788f222d player-disable-jump-from-edge
c4eaaa65 player-force-shorter-jumps
8f89203b player-disable-flat-jump
b955b8b7 player-force-hard-land
cc5b827b player-disable-cover
7ee5039e player-disable-ledge-grab
eb1480fe disable-vault-to-edge
81b0dd6e player-disable-controls
bb2c639d player-disable-controls-explicit
d7f9eb4f player-disable-no-target-jumps
f4f2c4ad player-enable-orient-to-edge-mode
68103719 player-enable-orient-to-edge-vent-mode
7d2995c3 player-disable-auto-stand-up
3cf1c20b player-enable-move-tracker
cb550f6b player-initiate-melee
f86db330 disable-player-cover-exit
21e74b93 player-set-teaching-combo-mode
3220edd8 player-force-combo-medium-tutorial
b01c8169 player-force-combo-light-tutorial
73d95253 get-melee-teach-dest
0fc620ea player-force-fight-finisher
87fba57c player-force-num-punches
88a2d5c2 player-set-prone-mode
06f6d605 player-push-forward-speed
26129579 player-enable-gear-climb
6694c1ba player-force-near-dyno-jumps
6bdc75a8 player-no-edge-fall
4a5a1790 choose-stumble-anim
699fb2ef choose-stumble-anim-with-space
548b9030 player-has-weapon-and-ammo?
03b61318 player-has-weapon-and-no-ammo?
10738a1a player-get-selected-weapon
f2db441a player-has-weapon?
c9048f75 player-has-weapon-in-inventory?
7ad75ba8 player-has-slot?
05c060ac player-get-weapon-in-slot
b5857b16 player-base-get-weapon-in-slot
3876a6ef player-force-self-fade
9936b3c3 player-disable-auto-reload
8ecf67f4 force-player-no-crouch
3d37a8aa give-player-weapon
d45a41b4 give-player-weapon-inhands
3d4cf83a give-player-weapon-upgrade
1b0c4705 make-free-slot-for-player-weapon
2f025ad9 get-player-weapon-upgrade
8c21c6a5 get-player-weapon-upgrade-by-name
1f821947 get-weapon-upgrade-cost
40eda01e player-clear-inventory
b4d5be79 give-player-ammo
3efcd59e get-player-total-ammo
20e8481f get-player-max-ammo
677ac6c5 get-player-weapon-clip-size
379be9fd remove-player-weapon
a60ee080 player-aim-at-attach-point
5bb8329c player-remove-weapons
80bafe8c set-player-max-fall-height
844e9fd7 force-collision-for-aim-focus
c9b3d52a player-force-dyno-jump-up
ac8a12d2 player-disable-jump-away-from-edge
9c5069bd player-auto-aim
c08b6878 get-grapple-ap-ref
42dbebfe player-take-melee-damage
e8338a3e player-take-crossbow-damage
892e5d97 set-player-health
19800ed3 get-player-speed
671ccc4e get-player-velocity
174c4f7e set-target-spawner-angle
60c027ef disable-look-around-dof
b6b6e273 disable-low-cover-exit-around
e8426144 player-disable-cover-switch
45f8cf7b player-force-enable-quick-turn
dba15993 player-set-cover-dir
c33838c5 player-set-cover-enter-spawner
73f9441f player-set-camera-space-spawner
5120aff2 tilt-adjust
184280d1 player-force-stealth
c64a74ba disable-stealth-sound
ef77b6e7 player-disable-blindfire-targeting
0f17b9c6 player-enable-ladder-placement
055b1af4 player-no-drop-ladder
b1d6a745 player-no-vertical-drop-ladder
07bf773e player-pickup-ladder-from-middle-only
c979815d player-allow-pickup-ladder-in-combat-or-stealth-tension
934c967b player-allow-pickup-ladder-at-bottom-only
a589718b player-force-allow-place-plank-across-gap
12fd00cd set-plank-place-across-gap-find-navmesh-height-threshold
95a7059a player-able-to-lean?
f59ea115 player-force-carry-ladder-plank
15aef90b player-force-no-stealth
6f570c9d player-disable-cover-exit-over
258df119 force-high-ledge-drop
1dc1d601 player-unparent
931eb73c disable-follow-camera-collision
e4549025 get-player-carried-object
d7539738 force-hair-anim
f69eb865 player-in-npc-way?
ce9461c8 set-player-on-collapsing-building
d76a667d force-death-camera
ec27d02a set-player-jump-spawner
c3366842 player-force-hanging
79ecfbdc player-disable-edge-180
4330e22d player-disable-jump
ebfe460d player-no-reload
c2f6486d player-disable-dyno-drop-to-foreground
029bd1fc player-foreground-edge-search
dd9574eb player-in-friendly-village
38040704 player-disable-melee
f1b16e3a set-player-no-igc-kill-grenade
fb0eadbd player-fire-weapon-at-reticle
c0988264 draw-reticle
169759b5 player-set-min-fall-dist
f712ec10 force-vault-to-edge
04e41ebc set-player-climb-spawner
15b08523 player-hide-weapons
c92630f2 player-hide-long-weapons
6c6eab6e player-use-large-npc-edge-collision
3385fa01 player-on-narrow-edge
6456f574 player-prefer-dyno-jumps
c584239b maintain-tension-mode
3dc64b27 player-hide-this-frame
75fddb26 player-disable-from-edge-jumps
8e83955a player-disable-brutal-melee
c5df59ce player-set-dyno-jump-aim-angle
2a0b2311 player-train-wreck-dyno-jump-hack
ca1772c6 player-edge-character-relative-controls
6c5c0a69 player-allow-push-off-ledge-stealth-kill
9b47d004 player-set-corner-climb-dist-scale
325747fc player-set-custom-inv-pages
97bdab58 player-disallow-long-gun
033de9f7 player-instant-draw-weapon
95766a55 player-instant-draw-consumable
44f3ec5d player-draw-weapon
bf9c3613 player-disallow-consumables
b1a01483 player-disallow-weapon-slots
9a2f441d player-draw-weapon-by-id
8984035e player-instant-draw-weapon-by-id
492de666 demo-reset-defaults
75f6aa32 get-player-edge-object
1d74f02e get-player-edge-object-joint
be172fcd player-aim-time
b0ee5f5b player-time-since-cover
94bae94b player-time-combat-tension
bde99ae7 player-teach-combo-triangle?
518ed169 player-teach-combo-square?
bc643731 player-clip-percent-full
8bccef26 player-weapon-num-bullets
3b502bdb player-move-to
061ad4d4 wait-player-move-to
0174dd00 player-turn-to
3c3e220f wait-player-turn-to
164533b5 player-move-to-npc-and-lean
681d5ac5 player-move-to-and-lean
93b37637 player-move-to-and-cross-gap
9c0ef731 force-set-lean-ladder-ap
85fbb388 force-set-lean-ladder-ap-direction
b485d8aa player-enable-brawl-mode
722e43a8 player-enable-brawl-strafe
3ff825f1 enable-melee-spline
b0a56cad player-force-brawl-look-at-target
02ff785f player-very-long-tail-func
2bbee476 player-get-align-speed-from-anim
fd4fa39d player-get-translated-anim-name
6717e5fa set-player-base-look-gesture
47df8d3a reset-player-base-look-gesture
260ef9b8 set-player-random-lookats-enable
4e047c1d set-player-force-look-in-camera-direction
a4217db3 hack-anim-phase-func
6db8b72c player-set-cover-super-tense
6bc33111 player-match-speed-phase
30f51cb7 interact-icon-shown?
c741827d player-can-push?
cd4ec05d set-player-inventory-count-by-name
20733070 get-player-inventory-count-by-name
3e72fb94 player-use-inventory-item
01bcc517 player-shiv-durability
d6c7b8e0 player-learn-recipe
0a356f73 player-show-recipe-notification
7a4394ea player-knows-recipe
da3ba3bc player-enter-workbench
dc9c3ecd player-exit-workbench
2d8641b2 player-update-weapon-upgrade-page
4aefb2ae player-collectibles-page-only
b9c6b597 player-can-climb-jump?
2861682e set-player-in-blizzard
25ec4f8a set-player-hunting
b4b73f39 player-set-wade-current
7cf5c5cd player-constrain-to-spline-corridor
9138f4a8 player-check-for-interactables-during-igc
63280c29 player-disable-face-flashlight
1effe8b2 player-get-current-move-mode
c4ba1ddf player-is-in-idle?
0ded828b set-player-new-look
303cd9b2 player-allow-run-away-vox
4a78255a player-set-collision-radius
9c5fe987 player-disable-slope-speed-scale
61612d07 player-set-generator-minigame-enabled
1790579b player-set-generator-minigame-progress
66fffd01 is-generator-good-timing
4f452a5f get-push-object-ap
a3d1ff12 get-push-object-ap-no-binding
43d0e45d get-adjusted-to-ground-ap
718df3d0 push-object-start-lerp-to-position
7c9b7fd6 push-object-stop-lerp-to-position
55b05c2b player-limb-is-dismembered?
8767cd71 player-can-dismember-limb?
9c785930 player-dismember-limb
2a1612db player-can-be-executed?
1d337e0c player-set-animated-backpack
ddcd85b2 player-clear-animated-backpack
fac21d92 player-force-carry-child-walk
647d7fe6 fade-out-screen-damage-fx
57f94c8d player-disable-friendly-fire
f0c3d8cd set-player-listen-mode-settings-override
879e5ea9 set-player-ik-mode-override
c073104c player-set-anim-phase-on-top-2-instances-of-base-layer
1452cfd3 show-key
8302d2f8 player-has-health-kit
1c032f17 is-player-vaulting?
a7e3bdc5 grenade-director-disable
7052dae7 grenade-director-is-enabled?
6769fb9e grenade-director-change-settings
37a29101 stick-angle-in-range?
8019f96a stick-player-angle-in-range?
df439d53 character-on-screen?
3b065755 distance-closing?
f60f08f9 against-low-cover-dir?
ef509be9 against-wall-dir?
d36fbc06 collision-between-attacker-and-target?
376f57b9 get-wall-impact-angle
72cd1847 get-wall-impact-distance
e32ea710 get-wall-object-dir
545b7610 wall-within-anim-range?
8a8d8d9d off-ledge?
2dab9d0c attacker-blocking-defender?
39220405 on-slope-up?
bf4cb33d on-slope-down?
8d2f1494 characters-in-melee?
366ce5ee npc-unaware-of-character?
07be3bdf get-character-health
8208751e improv-pick-up-nearby?
5d253753 target-near-edge-locator?
0d67ee1e player-in-stealth?
e99190fa player-is-running?
78047738 set-player-anim-rate-multiplier
02bb9f9a not-on-slope?
ca8c8a9a player-in-run?
c34b8173 shot-for-steel-fist?
5415d916 clear-successive-punches
90df38f4 get-successive-punches
a409b7ae get-num-counters-performed
cbe0c282 increment-num-counters-performed
3ab72b0e invalidate-melee-command-queue
d9b170c0 get-current-num-punches-for-stun
a1407d31 get-num-punches-needed-for-stun
1a17d5cd clear-num-punches-for-stun
51c4c1c1 get-weapon-anim-type
2408dcdc get-weapon-id
32e2f581 weapon-has-crafting-mods?
c9537272 weapon-remove-crafting-mods
fa88834d get-melee-weapon-initial-health
73e441ee get-melee-weapon-health
c6feb04b get-melee-weapon-initial-upgrade-health
b022b54a get-melee-weapon-upgrade-health
14bfe62b decrement-melee-weapon-health
647ba4ee holding-pistol?
b467666f holding-longgun?
40877036 holding-no-weapon?
2548dcd6 character-attacking-character?
38427dcd get-npc-melee-chance
ae5c5161 david-is-blocking?
94c702aa player-take-npc-weapon
dd95602c get-player-weapon-locator
998e2428 break-weapon
ea018c90 shiv-will-break?
baf04c65 set-weapon-broken
3a2897d0 kill-weapon
2f78f75c start-slomo-weapon-shimmer
2c0c5bed stop-weapon-shimmer
9d178673 t1-swap-head
9424b4f2 spawn-attached-grenade
ef765b46 configured-to-throw-grenades?
69f4dc19 npc-auto-fire
7ef1ab3f get-num-punches-before-block
b0ce3af9 get-num-punches-landed
5f9f41f9 increment-num-blocks
e14247f0 start-melee-action
d279ffaa set-melee-dir-spawner
46d44279 set-melee-end-dir-spawner
4f696bc4 set-melee-override-ap-spawner
c51547b3 set-melee-override-end-ap-spawner
314d70bc should-npc-sync-player?
7fc7ad64 get-melee-mirror-from-character
e55f007d back-attack-check
d5c67cd9 increment-melee-move-frequency-count
110b37f0 set-ragdoll-phys-sound-cooldown
de3b0a8a set-phys-sound-cooldown-for-weapons
46ecb517 abort-melee-action
7ec5d67c npc-drop-weapons
5a1ad08f player-delay-air-punch
2afe047c npc-abort-melee-action
fdc1c575 character-blocking?
be905740 get-melee-history
982e9a53 set-melee-history
fbbd0a83 npc-request-melee-help
47873dc4 do-melee-event
ee64c28f is-playing-hit-reaction?
56f35b72 time-since-hit-reaction
0e8c00c6 get-current-melee-action-name
12f50430 set-attack-done
b4149553 set-melee-behavior-type
26715c19 get-melee-status
a0752a9d physicalize-ragdoll
6c256e5e is-ambushing?
22f6532f target-in-anim-range?
740dc928 get-target-dist-from-locator
f6a3f3be get-locator-from-attack
23a89451 target-in-cover-move-range?
5961541f in-melee-forced?
4fb88618 force-in-melee
0c22da87 net-offer-melee-assist
b0c332b5 net-cancel-melee-assist
f59997dc net-melee-start-block
32a5519b net-melee-stop-block
6bebf378 melee-finisher?
c90c597c melee-breaker?
4e7defad net-enemy-player-nearby?
7223cf90 melee-observer-dialog
16ba8d4e embed-weapon-in-target
68b70e38 is-player-being-attacked?
76ddbfcb get-melee-wall-pat
0ef1ccbd did-melee-move-hit?
9350f883 knockback-enemies
95d3f318 is-frenzy-timer-blocked?
2ae06af0 is-in-force-search?
a4c58c69 set-melee-camera-light
35aa12d7 player-crouched-under-object?
ee4230eb can-player-play-full-body-reaction?
77cfb0fa player-holding-npc?
c3842f92 character-on-slope?
c08fd94a get-scaled-melee-damage
f4fb5bd4 clear-cached-melee-surprise
04dc0b6f is-local-player?
820dae22 hud-set-soak-levels
415bd8af hud-set-soak-versus-score
34274f69 rail-set-spline-distance
4c72695b rail-set-speed-mps
7d2fa4c6 rail-enable-ground-hug
4a0864d1 rail-use-fixed-apref-in-igc
2fb7edfa set-player-ride-horse
f55da13c spawn-horse
9a89321f put-npc-on-horse
fefd7ad1 npc-mount-horse
12d79863 force-npc-to-back-of-horse
6da98710 horse-move-to--internal
f975311a horse-move-along-spline--internal
5896f5bf horse-set-spline-enabled
a56a58e4 horse-reset-splines
fe8e56e4 horse-resume-player-control
0f50a7b7 horse-get-speed
211ead37 horse-set-move-settings
897908a7 horse-request-move-settings
d23d731f prevent-player-jumping-from-horse
ee468a77 horse-player-aim-target
8e47ee09 player-dismount-horse
c9f8329c npc-dismount-horse
2b287722 npc-mounted-on-horse?
3a698c3a horse-force-slow-walk
c1c0e3ce auto-turret-fire-at-bound-frame
5cae0d49 auto-turret-cease-fire
7cef973c auto-turret-find-best-target
0ca0d447 cutscene-get-active-sequence
00c21895 cutscene-get-active
d3da31cf cutscene-get-active-index
eaf5e41b cutscene-get-active-frame
b1437bdf cutscene-get-active-maya-frame
0a2d208d cutscene-skip-active-sequence
d51da967 cutscene-controller-get-sequence
4f1d3c1d cutscene-controller-get-num-frames
c337cfb9 cutscene-controller-get-current-frame
63871917 cutscene-controller-get-overall-phase
771536b3 cutscene-controller-playing?
1502a90e cutscene-controller-get-current-cutscene
ba64c5ef cutscene-controller-get-current-cutscene-frame
3515f8ab cutscene-controller-get-current-cutscene-maya-frame
1ae176fe cutscene-controller-set-camera-timing
aaa5cc1a fact-exists-in-dict?
4165e5eb fact-lookup-symbol
4091298a fact-lookup-float
8b1c14d9 fact-lookup-int
b74dae0d fact-lookup-bool
68765c45 fact-set-from-dict
f8761596 fact-set
4bd8f3e4 fact-remove
e76029f2 fact-increment-by
70255fae fact-get-dictionary
9914e3cc fact-exists?
d089e724 fact-symbol
08124b15 fact-float
102bfc51 fact-int
8ef3d6f2 fact-bool
24b13777 interactable-enable
ac072e65 interactable-disable
cd943ffb interactable-set-unavailable
16ff7090 interactable-scripted-unavailable?
23b32ca8 interactable-enabled?
9d763fa8 interactable-set-trigger-only
215dbb7b interactable-trigger-only?
b2aedda0 interactable-selected?
df372d5a interactable-set-partner-enabled
977eb8a5 interactable-partner-enabled?
93a0b598 override-interact-def
ad0a780c interactable-set-override-interaction-lambda
718cdf3d interactable-set-interact-radius
67a8a308 request-interact
393b69d3 interact-with
0e615574 end-foreach-in-group
33570b73 group-at
107c1eb1 group-at-uint64
4d338dee group-count
ea491c13 group-spawned-count
25807462 group-is-member-symbol?
67fca76e group-is-member-uint64?
218a1311 group-add
40bc7e26 group-add-uint64
4afe2fe9 group-insert
aebe06bf group-insert-uint64
5ce83d2a group-remove
0505a7b5 group-remove-uint64
b7fe0fb9 group-remove-at
3e6ca32f group-reset
97cf876a group-clear
dabe5652 group-create
756a0c01 group-clone
151f4083 group-destroy
8419476b array-set-dimensions
3781ca76 array-width
b15a54f5 array-height
f0b3c28e array-depth
195e521e array-get-3d
c3bfadc9 array-set-3d
3b37b0bd modify-eff
74d352f2 eff-tag-int32
bc005b6d eff-tag-float
6ca36486 eff-tag-symbol
2bc52079 character-sleep-ragdoll
333c879e character-is-dead?
452fc972 character-is-down?
3c757360 get-prop-id
5a1263f6 spawn-prop
74cb6920 destroy-prop
b510b5d1 get-vulnerability
6e90c558 character-play-additive-hit-reaction
61002bd1 character-abort-additive-hit-reaction
4d284eee spline-distance-spawner
817aeae5 spline-distance-locator
b44c7cac spline-locator-at-distance
0985239f follow-spline
26344b84 set-spline-follow-speed
7d6c9090 set-spline-follow-acceleration
490dc812 set-spline-follow-distance
152c787e get-object-spline
f515bd98 transfer-to-spline
03fb7b87 spline-transfer-pending?
98b7bbfc wait-spline-distance
da169d5e get-spline-distance
0d6704b5 get-pending-spline-distance
11596754 get-spline-length
8a736ed4 get-spline-index-count
da910655 set-spline-transfer-blend-distance
4d5d72d0 get-spline-point
017a46f6 set-spline-point
196129d0 set-spline-type
9a1813a0 get-closest-spline-index
258ef637 cloth-set-wind-scale
7a009f85 floor
0f0e3844 ceiling
d885c954 get-quaternion-pitch
9186c61b quat->euler
6cf4fccd override-fov
397558cb signal-camera-cut
1b3ccb57 is-on-screen?
b812f3f4 is-object-on-screen?
938db2cb allow-camera-cut-from-zoom
40170a0b is-centered-on-screen?
ba364a1c camera-locator
73f202b7 is-camera-animated?
9cd341ce take-screenshot
1930264d force-fixed-rotate-around-y
be56006c avoid-water-plane-dist
f632561e force-render-settings-underwater
ca3d1340 render-settings-is-underwater?
6a172a7f debug-set-camera-position
ec663650 camera-override-near-clip
98e102b7 camera-look-at-locator
14d59146 camera-look-at-object
b005ac46 camera-look-at-dir
4e20390e camera-look-at-dir-vec
d4fbeef3 disable-camera-look-at
69a75f01 joypad-command-clear
a1196ec0 joypad-command-active?
5e9fd287 show-button
aa776d34 joypad-disable-commands
ae4a973a joypad-disable-all-commands-except
6e34d772 joypad-disable-commands-timed
58c9938a joypad-any-button-pressed?
aadca853 joypad-any-button-held?
2911b7fb joypad-stick-pressed-towards?
f283d16a joypad-stick-pressed-towards-screen-space?
0c7e0bb7 get-joypad-stick-intensity
a6fd6077 get-joypad-stick-x
a23c7dc0 get-joypad-stick-y
e8fdb30a get-joypad-analog-l2
9732d4ed get-joypad-analog-r2
151b5d2e disable-debug-fly
9337ee86 get-joypad-accel
119913b1 get-joypad-touch-count
cae09f99 get-joypad-touch-id
ec47acc8 get-joypad-touch-x
e886b17f get-joypad-touch-y
c8227f33 get-joypad-angular-x
cce36284 get-joypad-angular-y
c1a0445d get-joypad-angular-z
093b2618 get-joypad-orientation
5870722f set-joypad-light-bar
1465dfc1 set-joypad-rumble
cf11421c get-joypad-roll-angle
be26fb26 get-joypad-pitch-angle
a20cb8d2 levels-fully-spawned-ignore-player?
4553458f levels-fully-spawned?
df781fbf kill-entity
7b197528 kill-all-attachables
89fbd3d6 entity-exists?
24b6345c entity-name
ac55d7e2 get-art-group
7498af01 get-object-skeleton
845be77a get-object-id
7616ab81 select-object
789bdaef get-object-spawner
d9e04427 get-spawner
63f70acf spawner-exists?
98e8a3cb get-spawner-level
7542d393 get-spawner-type
cb024b7d audio-clear-gas-mask-flag
965df4dc audio-set-gas-mask-flag
280e9a46 object-contains-mesh?
a93d2926 object-spawned?
3f50eb13 rename-object
874dd706 get-object-state
f6f9c2e4 get-self-id
d68784b3 levels-info->string
55d2738c is-level-loaded?
31e7a1a1 is-level-fully-spawned?
510e917e entity-info->string
117e0f3d state-script->string
a61c65d6 state-script-list
6f780105 module-list
f43db80a spawn-entity
7417fcd6 spawn-entity-at
fd166e79 wait-spawn-entity
db171895 wait-spawn-entity-at
0f378692 spawn-entity-type
0b9b4812 entity-auto-spawn-once
326ef848 swap-entity
4e0d08ca set-visible
83a68745 set-mesh-visible
c6071df8 sticky-spawner
f8717a0a unsticky-spawner
bb709fb2 disable-background-edges-in-region
f9940142 enable-background-edges-in-region
e8688b10 disable-foreground-edges-in-region
aa8c15e0 enable-foreground-edges-in-region
95d357e2 disable-background-covers-in-region
4c49ecfb enable-background-covers-in-region
f813783c disable-foreground-covers-in-region
c42b2256 reset-animation-stream-phase
2189c325 enable-foreground-covers-in-region
2dc4cae1 get-locator-position
9ab6561b get-locator-rotation
b0a52e00 set-locator-position
07d7b2fa set-locator-rotation
49d090e5 get-spawner-position
500a967e get-locator-distance
814a84a3 dist-sq-between-points
0728e198 get-locator-distance-xz
13b0907f set-joint-locator-override
585677f0 disable-joint-override
78145607 is-3d?
c23cf394 set-sound-register
fe541bc6 get-sound-register
072af1ac get-spawner-locator
8efc5558 set-spawner-locator
a1864167 set-spawner-locator-keep-parent
fb22a3d5 get-spawner-locator-default-rotation
f2186986 get-spawner-locator-radial
d857f64e get-spawner-locator-projected
8801d9d3 rotate-locator-angle
eaad830a rotate-locator-axis-angle
8ec4f77a rotate-vector
206d1c96 rotate-quat-toward
7887cea5 get-angle-between-quats
e36d7f8e rotate-locator-lookat
e754b383 get-spawner-parent
98de37b5 get-region-parent
6526a549 get-parent
8f2e5a3e get-object-spawn-locator
b4c97ee4 get-object-locator
94bcc970 get-object-lookat
88a196b6 set-object-locator
2c0c7d2e set-object-locator-keep-parent
29c5ece5 get-object-locator-default-rotation
1a227342 get-object-position
39f8c8b8 get-object-offset-position
28fab5ff get-object-offset-locator
021fff0f offset-locator
8f74aff2 get-object-locator-radial
9368e65a get-object-linear-velocity
affef308 get-object-angular-velocity
52a78877 has-joint?
c1d00e89 get-joint-string
8f43e660 has-attach-point?
f6a75aad get-joint-locator
4902715b get-joint-position
2a1856e5 get-ap-ref-locator
71b9ed01 get-ap-ref-from-align
e1c28f87 get-align-from-ap-ref
9927f0d1 get-origin-locator
7922fc22 get-align-locator
2fd346d0 get-joint-angle-diff-from-bindpose
934d1b84 get-joint-locator-with-root-body
78881769 get-ap-ref-effect-locator
d61bd25c get-ap-ref-locator-radial
2711e149 reverse-locator
7ba8ed16 block-nav-poly-under-object
7e5ad594 unblock-nav-poly-under-object
451fd95b enable-nav-blocker-object
c12d0539 disable-nav-blocker-object
88e795a7 disable-platform-control-on-object
af31357e platform-control-force-register-taps
fbebbcda regenerate-cover-action-packs-from-object
4bbc253b remove-cover-action-packs-from-object
30a7a25c get-action-pack-locator
138abef3 enable-action-pack
5c28e86b action-pack-enabled?
000dce87 set-nav-mesh-enable-by-name
6bae002d set-nav-mesh-enable-by-level
bf41ed10 find-closest-point-on-nav-mesh
78543a1c object-in-region?
bcdfe462 locator-in-region?
5eb2d05e set-shimmer-intensity
41123f07 object-highlight
82592950 set-root-joint-rigid-body-locator
6d9bdc2d force-push-object-move-to
a371ae69 force-set-push-object-velocity
b2f7fadf object-start-slide
d7f20dff object-stop-slide
530f1940 push-object-set-no-push-fwd
de80570e push-object-set-no-pull-bkwd
1b482c4e push-object-set-no-rotation
14348538 push-object-set-game-driven
f19bb146 enable-push-object-dynamic-tap-registration
54d8a0da disable-push-object-dynamic-tap-registration
7d4c72e6 push-object-apply-force
aa0b5bbd get-push-object-linear-delta
4d6ca86b get-push-object-rotation-delta-deg
12de973c make-player-pass-through
1747029e arcsin
92c728eb arccos
98040659 arctan
daa3d9d8 arctan2
0b09fe20 vector-magnitude
8974e9b2 vector-normalize
7be6159c vector-add
bd13939f vector-sub
c9eeccf6 vector-dot
04410473 vector-cross
602b9c2f cross-product
c8c368f1 get-local-x
cc027546 get-local-y
c141539f get-local-z
eca5ad20 transform-vector-local-to-world
ee9dd544 transform-vector-world-to-local
4973e564 transform-point-local-to-world
4b4b9d00 transform-point-world-to-local
6b1b588e offset-position
88020631 perlin-noise
c4dbc0b7 blend-position
73a95c4d blend-rotation
21255f07 blend-locator
5205e230 freeze-binding-when-non-physical
388bc9a1 current-time
8e5b8efc elapsed-time
319f4e3c units-per-frame
0eec468d units-per-second
e12e0fe8 spawn-effect
77cf5d09 part-module-loaded?
48b86630 spawn-particles-at-attach
b507ccd3 spawn-particles-at-joint
6ce94d7e spawn-particles-at-bound-frame
389ce791 kill-particles
273be96d set-effect-bound-frame
d745cb63 set-effect-color-vec
c3dd5417 set-effect-alpha
a6586ac5 set-effect-time-scale
68ab48e7 set-effect-camera-attached
2dffa64b set-effect-float
77067270 set-effect-vector
e178ea44 kill-all-particles
0ab7afb8 kill-part-spawner
21b38b7d set-part-spawner-color-vec
cf4d5dbc set-part-spawner-alpha
c326c47e set-part-spawner-time-scale
669e9caf set-part-spawner-camera-attached
216fafe0 set-part-spawner-float
d2034214 set-part-spawner-vector
35140815 start-rumble
943ce1c7 do-rumble-ptr
e59ba17d stop-script-rumbles
cf53af61 stop-rumble
b58b5007 set-water-clipmap-off
b584c7e4 set-water-clipmap-parameters
bcae8643 set-water-clipmap-direction-distances
e345d028 set-water-flow-direction
2f7d805d enable-water-portal-culling
4391b58f add-water-portal
74b52515 remove-water-portal
34152755 enable-water-exclusion-boxes
6337b11a add-water-exclusion-box
3ba2a5dd remove-water-exclusion-box
9c647935 start-water-anim
bba50bcf start-water-anim-with-spawner
fdc7da91 wait-water-anim-with-spawner
0324fae0 stop-water-anim-water-id
7e6a76e0 stop-water-anim-channel-id
ca20325e reset-water-animated-grid
687ec0b6 stop-water-anim-water
bb3ae8ac set-water-joint-grid-active-state
e17ee22f set-water-relative-time
9603a4cf set-water-waves-amplitude
52b7f82a set-water-waves-velocity
8fcbb113 use-rain-intensity-values
dd75c117 use-wind-intensity-values
18ecdcb8 use-rain-abstract-intensity-value
d6262a11 reset-rain-abstract-intensity
e1f6d07f get-wind-direction
1343bc33 get-wind-speed
d89aaacd set-water-offset
6fd90652 get-water-time
f1915289 set-water-waves-velocity-timed
64f8f02c clear-water-waves-velocity
568af7f8 set-water-grid-influence
94bd9eeb get-water-offset
f0a972d0 set-water-state
68e64032 get-water-state
b010691c set-deformation-of-water-unit
91155cd8 use-reflections
8f0342eb use-reflection-plane
050a1ac0 use-reflection-plane-with-bbox
85089aa1 use-reflection-plane-with-corners
93797c7f set-reflection-plane-info
172b8004 force-reflections
b71a0088 set-rain-state
85d0299e set-rain-ripples-state
0c6ff463 add-ripple
fdcbf9bc add-line-ripple
d20ed7b6 set-ripples-center-and-scale
355267c2 set-ripples-values
6d2b84ba set-time-to-dry-period
591ffcd9 set-character-wet-mask-value
bd0c58b9 set-character-wet-mask-state
664cfb37 set-character-wet-mask
cbaa0c97 set-max-character-wetness
5b488d87 make-character-more-wet
6864c8be set-dry-iterations
5f574b3e is-water-pat?
8589a890 use-material-from-water-unit
8b49f386 set-parameter-id-for-water-unit
f3d72777 override-settings-for-water-unit
e39fc2c7 set-state-character-accumulates-snow-from-ground
d04aa372 set-state-character-accumulates-snow-from-sky
57a832d0 set-state-character-accumulates-from-water
9851ce13 set-ground-prints-type
7fa59498 ground-prints-enable
eb78a103 ground-prints-disable
8bc6f669 spawn-snow-disturb
5c817dc0 set-shader-material-param
48059f73 set-single-shader-instance-param
34301f63 set-shader-instance-param
0bd2c458 set-shader-instance-uv-offset
9b557600 set-shader-instance-blend-offset
5e946b71 set-shader-instance-ao-brightness
0c16b8cf set-shader-instance-diffuse-color
30647a2b set-shader-instance-anim-period
f1878b7e set-shader-instance-anim-phase
bddabc93 set-shader-instance-anim-amplitude
381ec3ee set-shader-instance-anim-offset
34eb23a1 set-shader-instance-spec-brightness
5c8a2f5b set-shader-instance-env-strength
69b43346 set-shader-instance-incandescence-strength
56cc5c18 set-shader-instance-fg-vertex-lighting-blend
e80b702d change-object-material
8379fc95 reset-object-materials
bd63a7ba debug-draw-line
981b0b33 debug-draw-line-2d
f8bdb17b debug-draw-box-2d
227f2974 debug-draw-cross
a983319f debug-draw-triangle
e847689b debug-draw-locator
52fef8bf debug-draw-circle
a6714d8a debug-draw-sphere
eb7947db debug-draw-string
692b69a6 debug-draw-string-2d
f23d0af4 debug-draw-ngon
6e065e7b world-space-to-screen-space
ce4c2aba debug-draw-clear-all
6699f752 debug-break
7195c4ef debug-pause
29babfaf box-int
02934287 box-float
7e0aa3f2 box-symbol
e94bb56d box-bool
da9b716e print-call-stack
ad23db71 print-vector3
8a32d4a6 print-vector
cf323efa print-point
855606ad string<-float
272d183b print-float
6e61504e print-integer
4fb6c279 print-symbol
bb0304d1 display
706758be string-length
286b7348 format
99d8b976 invalid-string-id
7190db13 debug-string<-string-id
5759fea4 string-id<-string
b50f1de8 string-id-concat-string
ce57d8e3 string-id-concat-int32
0f01618c cypher-get-text
56ad3c61 alloc-color
cd4b9c1b alloc-vector
c04d080f alloc-point
58a2a5fd alloc-quat
c3b2cde2 alloc-bound-frame
feaa4603 alloc-vector3
18af3a3c facing-point?
69531083 facing-point-xz?
614a6e07 pow-float
00dd2c2e random-float
c4a0e51b random-integer
675191da uint64-upper-half
96880c26 disc?
39db8774 is-japan?
1a93e508 is-final-build?
351159e8 is-locked-at-30fps?
5fde366f platform-windows?
6decfef6 replay-active?
4ba2a752 get-delta-time
9cef4d21 from-ups-no-dt
75b75352 int32-array-count
81a53f16 int32-array-at
ac5ef5f0 auto-save-in-progress
fb808bda hash-lookup
df7ba06a lookup-symbol
c66a1ce6 add-import-module
e0e51daf add-load-module
094728af is-fma
849f84e0 parent
71977aec unparent
710cc0d8 enable-player-parenting
d4050c6e task-subnode-complete
1a0506fc task-subnode-active?
f64d9779 task-subnode-get-active-continue
7f9b338d task-subnode-set-active-continue
c1a6d2bc task-subnode-play
94739403 task-subnode-disable
8ce160db task-node-active?
32ea7b74 task-find
6a1c05ec task-get-current
04685cae task-want-load-levels-fully-spawned?
cf3d3c5b task-attempt-count
dd801564 task-fail!
cb0d7bed task-fail-if-active!
9b53a1b0 task-elapsed-time
b8831cf4 game-task-graph-login
8f6736ec get-process-user-id
57e9f6e5 get-parent-process-user-id
249163a2 force-exposure-value
1f802079 get-current-frame-count
6a8ab94f xz-plane-dist
9135f438 mark-actor-textures-for-load
12fab260 mark-level-textures-for-load
e22f8c96 force-stall-for-level-load
345ab96a force-stall-for-actor-load
64c4a163 wrap-string
b1cb53ae line-count?
b1f17bd7 despawn-message
7aa34ac4 enable-message
cb0ed5fb disable-message
238a1dd3 hide-message
e40ca42a unhide-message
b34bba3a display-message
4d93a099 hide-hint
1b6bb746 set-collision-layer
d654443c set-body-locator
0e1fb399 get-body-lin-velocity
5b51bdd0 get-body-ang-velocity
dfa83a5d set-body-velocity
8edc6fe4 set-body-max-velocity
ea80e4f1 get-body-point-velocity
1a528ea4 get-body-linear-damping
57a73d54 get-body-angular-damping
629b4495 set-body-damping
1d7ec1bb get-body-friction
3bc00ca8 set-body-friction
8e12db0d apply-point-impulse
e693ab67 apply-explosion-impulse
092e408d set-body-buoyancy-multiplier
f00d650c disable-gadgetry
e46dcac5 enable-gadgetry
063b8566 set-phys-fx-water-plane
35ac8038 force-update-bg-collision
df1c840f enable-power-ragdoll
00d619b3 disable-power-ragdoll
59ad94db kick-spherecast
f9e808e6 wait-raycast
8e48ae94 wait-raycast-t
92d47137 wait-raycast-hit-nothing?
7d4d9b17 wait-raycast-hit-water?
08fd1ca7 wait-raycast-get-object
ab56fb43 wait-raycast-get-object-joint
6b3e41c8 debug-draw-raycast
6cd3aabf from-ups
40274c92 lerp-scale
269bdb61 make-curve
f1993cfa calc-ankle-match-phase
d286bc85 start-for-streaming-anim
43724165 get-state-align-speed-from-tree
6e75babe calc-new-phase-from-speed
29ba2151 minmax
0fc66967 min-int32
3af8b8e4 angle-diff
933344d6 wait-animate
0b5ff3f9 facial-animate
4a89c6df get-rotated-ap-ref
d8afab28 get-best-entry-phase
9fa1b336 get-animation-entry
6d7dd92d update-ap-ref
54d3f01b has-anim?
d9cb0c6d stop-animating
d5deb2dd set-animate-blend
f3607fce get-animate-blend
af4a581f set-animation-speed
8c87ce3f set-animation-phase
48582245 set-animation-layer-fade
269cfceb get-animation-speed
05516acb get-animation-phase
f946d2c9 get-animation-frame
46677b38 get-animation-duration
1d9c28fc player-lerp-anim-update-rate
0e2c9b7c player-get-anim-update-rate
b081d867 player-anim-streaming-phase
6c2b44f0 get-object-anim-state
234ca4cb get-object-anim
7a372132 object-anim-playing?
0937e3f7 simple-gesture
f24ab925 set-overlay-set
cc4574cc calculate-pose-error
2cf92d82 calculate-anim-error
b0f53e4c config-reset
36d703b7 event-arg-symbol
c69511c1 event-arg-float
0e46185e event-arg-int32
c10280c9 event-arg-uint64
77162698 event-arg-boolean
5ee829e2 event-arg-bound-frame
f3531568 event-arg-vector
2e8a3700 event-arg-point
f9453071 event-arg-string
b1a02fd5 event-return-symbol
338c1b7b event-return-float
fb5f12e4 event-return-int32
cbce016c event-return-uint32
7771f473 event-return-boolean
ea2054f4 event-sender?
ac660e5d event-sender-is-type?
030b1ea2 event-sender
54cb0a8d send-simple-event
b3189857 send-event
d3ba122e broadcast-event
6acb9193 event-query-boolean
9125b606 event-query-symbol
fe2d2dc2 print-event
7feef039 event-level?
617579d2 event-my-level?
39555e62 scaleform-stop-movie-internal
ad0f5a62 scaleform-set-viewport
c3a8de99 scaleform-set-viewport-pct
d24fd6ef scaleform-invoke
fd92480f scaleform-get-boolean
b4e4b233 scaleform-set-boolean
b4b48a24 scaleform-get-int32
69b01eb8 scaleform-set-int32
7c6783bb scaleform-get-float
a1631727 scaleform-set-float
632b3193 set-table-shader-material-param-by-index
14083967 reload-demand-loaded
73bcb654 dc:scan-particle-directories
56fb3996 reload-particle-module
8d2f0b34 import-value
c2795697 render-settings-reset
36086af7 spawn-script-multiple
a23075fc terminate
14bbfc58 force-state-change
9896d682 end-script
1359246d get-script-state
d399a4d6 has-state-script?
d510e933 tag-specified?
0b1b1b8a tag-symbol
c489284c tag-string
4bf01cbf tag-float
83231520 tag-int32
5ef1f0db tag-boolean
ce9f0d55 tag-vector
a3ef3a7e tag-point
25124088 get-symbol
01d011b2 set-symbol
1cb8c51f get-float
c1bc5183 set-float
d46bcc80 get-int32
096f581c set-int32
59d06147 get-int64
84d4f5db set-int64
f307e431 get-boolean
ba711e0d set-boolean
e0965657 get-vector
c454076d set-vector
f4a7e3de get-point
29a37742 set-point
02c1526b get-quat
c55f9b3f set-quat
2877b0d7 get-bound-frame
b0388235 set-bound-frame
04a3a6d3 wait-for-event
0c9c6d8f wait-int32
9c2425a8 wait-boolean
899ee046 get-state-time
55b2ca6c get-current-time
9ec3248d get-current-timeframe
64b0f52e signal
1dda2ca5 signal-remote
bb99c26a signal-raised?
fc37cd06 forget-signal
6e22f8d5 wait-frames
d1e7c609 wait-until
19d1ce7d wait-until-frame
bc239abe wait-until-net-time
ca1359a3 wait-for
b7eceedc wait-one-frame
ccf7e165 offer-contextual-entity
8bbc4b1e offer-contextual-process
ce547c11 remove-contextual-entity
d3cb9ef4 force-contextual-entity
04cc1f0b frame-range
235cfa87 say
0afbbb02 xspawn-npc-at
c5b8f0e6 get-event
09400335 add-flame
dc4a7348 hint-set-contextual-highlight-object
c519583d wait-facebook-post-photo-booth
2607c5f4 set-clock-multiplier
83bd53c3 spawn-3d-text
c5492089 annotate
eb1b5707 is-phantom-shooter?
da0291b0 simple-npc-no-bucket
970c3e2c c-spawn-npc
60390542 npc-get-zone-center
aadf2adc gesture
c1b5a9bf camera-set-melee
4da74e0b camera-set-strafe-idle
0dcef3cd get-carry-object-type
bf77427c photo-mode-use-fixed-vis-pos
649ba550 net-is-host?
05098fb2 post-locator-stat
1f34e67c get-player-id
c77239e4 grenade-director-enable
8e937b02 set-player-carry-sarah-fast-mode
42a4173a facing-angle-in-range?
46a1ed53 get-execution-catagory-value
6c6572c2 player-teach-combo
6007afbc hud-set-howl-level
fd031d9e horse-set-spline-camera-assist
9847f5e9 rail-get-spline
b730664d set-player-horse
650da61e auto-turret-fire-at-target
502c31cc cutscene-get-active-controller
9ec349ea new-fact-dictionary
43d7ca93 interactable-highlight
113118a9 begin-foreach-in-group
f07951f0 new-eff
512b01e6 character-set-invincibility
c61b9c4e spline-activate
11ee43d8 cloth-set-world-scale
2d21023c round
fb4232a0 sin
7ec218d5 cos
74013667 tan
5047b2c8 update-task-menu
b69d2cef spawn-message
4052e46e kill-message
ce976169 spawn-splasher-effect
497049fd set-physics-gravity
262e9ff2 kick-raycast
64ea5b90 plot-internal
0b26368f angle-mod
84591781 animate
40a1081b config-load-user
4fe2b871 spawn-os-process
62628fcf event-arg-count
3ac0ebcd scaleform-start-movie-internal
df146ca7 set-table-shader-material-values-param
568eab14 wait
849a7d83 spawn-script
c2c05f3a go
@aerosoul94
Copy link
Author

aerosoul94 commented Aug 22, 2021

Requirements

  • Python 3.7+

Usage

⚠️ Not all .bin files have code in it. Some of them just have data. Data is not handled by the script yet as I'm pretty sure the structure of that data is all in the executable, which means that you'd have to map out the structures of each one to disassemble them.

With both dc-disassembly.py and sids.txt in the same folder:

python dc-disassemble.py <script file>
Example:
python dc-disassemble.py script-user-funcs.bin

This will print out disassembly of all code in the script file. Use the redirection operator at the end of the command to write the disassembly to a file.
Example:
python dc-disassemble.py script-user-funcs.bin > script-user-funcs.txt

The script will also look for an existing .dci file that has the same file name. This file contains function names for the .bin file and will apply those labels to the disassembly.

The sids.txt contains the string id's for all native functions. The python script will load that file to label any references to native functions.

@hww
Copy link

hww commented May 15, 2022

Which version of the game it supports? Or maybe there is an issue with low big endians.
In my case script-user-funcs.bin has next header

0000000 4344 3030 0000 0100 0000 a0a3 0000 0000
0000010 0000 0100 0000 ce00 6300 2ffd d49e e199
0000020 0000 c409 1203 8712 d49e e199 0000 400a
0000030 3f03 ae67 d49e e199 0000 8c0a 6407 26be

The defCount 0000 ce00 in decimal 3456106496

@hww
Copy link

hww commented May 15, 2022

Got files from other disk, the same file script-user-funcs.bin has this header

0000000 4344 3030 0000 0100 0100 9808 0000 0000
0000010 0000 0100 0000 5101 0000 1c00 2300 6dc9
0000020 d49e e199 0000 ec0f 6300 2ffd d49e e199
0000030 0000 a411 9301 ad99 d49e e199 0000 2012

The defCount 0000 5101 is large value again

@hww
Copy link

hww commented May 15, 2022

Looks line the file has MSB before LSB

@hww
Copy link

hww commented May 16, 2022

I made it work with Last Of Us PS3. Thanks

@aerosoul94
Copy link
Author

aerosoul94 commented May 17, 2022

Which version of the game it supports? Or maybe there is an issue with low big endians. In my case script-user-funcs.bin has next header

0000000 4344 3030 0000 0100 0000 a0a3 0000 0000 0000010 0000 0100 0000 ce00 6300 2ffd d49e e199 0000020 0000 c409 1203 8712 d49e e199 0000 400a 0000030 3f03 ae67 d49e e199 0000 8c0a 6407 26be

The defCount 0000 ce00 in decimal 3456106496

I believe this was for The Last of Us Remastered for PS4.

I made it work with Last Of Us PS3. Thanks

Nice! Was it only a difference in endianness?

@hww
Copy link

hww commented May 17, 2022

Some other minor changes. I pushed my version to the branch of your gist

Also I deducted some opcodes. You can see it by diff merge

@hww
Copy link

hww commented May 17, 2022

BTW loadStaticI32Imm in most cases load some StringID. My guess! That is why it does not have any valid human friendly value. This SIDs where builder by C compiler, but the published game does not have them.

0x000007F4: cloth-remove-external-collider                      # 0x42b90e92
0x000007F4: 43 00 18 00 move r0, r24                            # r0 = r24
0x000007F8: 15 01 00 00 lookupPointer r1, data[0]               # r1 = StringId(0xb3189857)=>NATIVE:send-event
0x000007FC: 3F 02 01 00 loadStaticI32Imm r2, data[1]            # r2 = 1119424146 (0x42b90e92)=>LOCAL:cloth-remove-external-collider

@aerosoul94
Copy link
Author

BTW loadStaticI32Imm in most cases load some StringID. My guess! That is why it does not have any valid human friendly value. This SIDs where builder by C compiler, but the published game does not have them.

0x000007F4: cloth-remove-external-collider                      # 0x42b90e92
0x000007F4: 43 00 18 00 move r0, r24                            # r0 = r24
0x000007F8: 15 01 00 00 lookupPointer r1, data[0]               # r1 = StringId(0xb3189857)=>NATIVE:send-event
0x000007FC: 3F 02 01 00 loadStaticI32Imm r2, data[1]            # r2 = 1119424146 (0x42b90e92)=>LOCAL:cloth-remove-external-collider

It looks like it's going to call the native function send-event and passing the current function (cloth-remove-external-collider) as it's first argument?

@aerosoul94
Copy link
Author

aerosoul94 commented May 17, 2022

Some other minor changes. I pushed my version to the branch of your gist

Also I deducted some opcodes. You can see it by diff merge

Awesome! I will check it out. It would be nice to merge the two so that the script supports both ps3 and ps4. Those were my initial plans, as well as to support the Uncharted games (and then eventually a decompiler), but I haven't had time to finish it. So thanks!

@hww
Copy link

hww commented May 17, 2022

BTW loadStaticI32Imm in most cases load some StringID. My guess! That is why it does not have any valid human friendly value. This SIDs where builder by C compiler, but the published game does not have them.

0x000007F4: cloth-remove-external-collider                      # 0x42b90e92
0x000007F4: 43 00 18 00 move r0, r24                            # r0 = r24
0x000007F8: 15 01 00 00 lookupPointer r1, data[0]               # r1 = StringId(0xb3189857)=>NATIVE:send-event
0x000007FC: 3F 02 01 00 loadStaticI32Imm r2, data[1]            # r2 = 1119424146 (0x42b90e92)=>LOCAL:cloth-remove-external-collider

It looks like it's going to call the native function send-event and passing the current function (cloth-remove-external-collider) as it's first argument?

Yes it is. The point is 'loadStaticFloatImm' loads valid numbers, but 'loadStaticI32Imm' loads non valid numbers, and that is why

  1. Integers are not needed in game dev as minimum on the hi-level
  2. VM uses this opcode for loading StringID to register and pass it to function

Small values +-1 2 4 8 12,... they are helpful in game dev, but VM has opcodes for them
:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment