ShootersForever.com Forum Index

GoldenEye 007 Nintendo 64 Community, GoldenEye X, Nintendo 64 Games Discussion
GoldenEye Cheats, GoldenEye X Codes, Tips, Help, Nintendo 64 Gaming Community


object type data
Goto page 1, 2  Next
 
Post new topic   Reply to topic    ShootersForever.com Forum Index -> Q-Lab Hacking Department
View previous topic :: View next topic  
zoinkity
007
007


Joined: 24 Nov 2005
Posts: 1687

 PostPosted: Thu Mar 23, 2006 8:40 am    Post subject: object type data Reply with quote Back to top

I'm getting paranoid about not having backup copies of this stuff. This data should be accurate and documents most, if not all, of the features for each different kind of object in setup data
------------------------------------------------
01 doors
-see seperate list
----------------
02 ???

unknown

format:
00000002 ????????

----------------
03 standard object
almost all objects can be set to this type

example:
00: 01 00 00 03 00 60 27 33 00 00 01 E1 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00

SSSS 0003 oooo pxxx mm ii *f rr 00 00 ii 00
00: scale as a hex percent. ie: 03.80 is 3 1/2
02: current state. 80 is destroyed, but kinda stupid setting it.
04: object value
06: preset value. 0000+ or 2710+ to use standard presets.
FFFF, FFFE...FFxx to set this object inside the previous object. (solo only)
if control nibble 4x is set at 0xB, then this number matches the ID of a guard
08: binary flags:
0000xxxx indicates no control features set
0001xxxx indicates left-handed normal pickup or opposite alignment
0010xxxx indicates object in motion or special function is activated
1000xxxx indicates right-handed gun assignment
xxxx0000 indicates normal preset, or beginning/end of chain
xxxx0001 indicates embedded crate or other object, creating a chain of boxes, for example
(embedded objects should be smaller than parent...)

09: flags:
1000xxxx
0100xxxx
0010xxxx unsure - used on Silo DAT tape
0001xxxx
xxxx1000
xxxx0100 allows object pickup (chr_name objects only)
xxxx0010 invincibility
xxxx0001
0A: binary flags:
1000xxxx indicates contained within another object (forward or back # objects = preset value)
0100xxxx indicates object does not use normal presets but is assigned to guard #preset
0010xxxx
0001xxxx think this sets object to absolute position. (similar to 2xxx type)
xxxx1000 something to do with free-standing glass (glass walls)
xxxx0100
xxxx0010 seems to align image to preset values for glass
xxxx0001 force collisions (2xxx presets, mostly)

0B: binary flags:
0xxx presets:
00000000 default, on ground
xxxx0001 forced to ground
xxxx0010 room upper limit, rotated y 90 degrees. top faces direction, front faces up
xxxx0100 room upper limit, upside-down
xxxx1000 room upper limit, right side up
2xxx presets:
xxxx0001 normal placement
xxxx0010 rotated y 90 degrees. top faces direction, front faces up. (use on obj 68-6B)
xxxx0100 upside-down
xxxx1000 no use? looks like default.
0001xxxx scale object to fit completely within preset bounds
0010xxxx x set to preset bounds
0100xxxx y set to preset bounds
1000xxxx z set to preset bounds

0D: invisible! set to 08. can't shoot, but can hit with rockets, bugs, etc. not counted as a hit though...
0E: 4x = invulnerability. set to 40 to only allow damage from explosives
x2 = explode on contact. set to 02 for land mines, etc
0F: drops to ground when destroyed if set to 02 (2xxx presets)

74: 2 bytes. amount of health. multiple of 00E4 (approx 1 gunshot). glassware is 000A


examples of usage:
invincible crate:
00: 01 00 00 03 00 57 00 10 00 02 01 E1 00 00 00 00 ...
crate resistant to all but explosives:
00: 01 00 00 03 00 57 00 10 00 00 01 E1 00 00 40 00 ...

dropped by a guard when killed
00: 01 00 00 03 00 57 00 10 00 00 40 00 00 00 00 00 ...
inside previous object
00: 01 00 00 03 00 57 FF FF 00 00 80 00 00 00 00 00 ...

several objects dropped by parent object (only first 0x10 are given)
#1 01 00 00 03 00 52 00 2C 00 00 01 01 00 00 00 00 ... parent
#2 00 99 00 03 00 57 FF FF 00 00 80 01 00 00 00 00 ... object 1 dropped by parent
#3 00 99 00 03 00 57 FF FE 00 00 80 01 00 00 00 00 ... object 2 dropped by parent
#4 00 99 00 03 00 57 FF FD 00 00 80 01 00 00 00 00 ... object 3 dropped by parent


embedded chain of objects, f/ caverns (only first 0x10 are given):
all are linked forward, not backward
#1 01 00 00 08 00 BC 00 02 10 00 80 00 00 00 00 00 ... within monitor 1 (#3)
#2 01 00 00 08 00 BC 00 02 00 00 80 00 00 00 00 00 ... within monitor 2 (#4)
#3 01 00 00 0A 00 4B 00 02 11 00 80 01 00 00 00 00 ... monitor 1, within box 1 (#5)
#4 01 00 00 0A 00 4B 00 01 11 00 80 01 00 00 00 00 ... monitor 2, within box 1 (#5)
#5 00 66 00 03 00 52 00 01 01 00 80 01 00 00 00 00 ... box 1, within box 2 (#6)
#6 00 99 00 03 00 52 00 01 01 00 80 01 00 00 00 00 ... box 2, within box 3 (#7)
#7 00 CC 00 03 00 52 00 01 01 00 80 01 00 00 00 00 ... box 3, within box 4 (#Cool
#8 01 00 00 03 00 52 00 9B 00 00 01 01 00 00 00 00 ... box 4

padlocking a door:
lock 01 00 00 03 00 3F 27 5B 01 00 00 08 00 00 00 02 ...
handle1 00 00 00 26 FF FF FF FE FF FF FF FF 00 00 00 00
handle2 00 00 00 26 FF FF FF FC FF FF FF FE 00 00 00 00
then doors...

DAT pickup
02 00 00 03 01 10 00 3C 01 24 40 00 00 00 00 00 ...
+ pickup type rename
00000025 FFFFFFFF 00000049 ...

key holder (bunker2)
00: 01 00 00 03 01 26 27 5B 00 00 10 E8 00 00 01 00


note: first 0x80 is standard for most types
any object can be assigned to be dropped by a guard.
----------------
04 key
keys, floppy disks, etc.

0x80 std, + key

example
00: 01 00 00 04 00 56 00 39 00 00 40 00 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 06

80: Always unique. value probably is used in the big block of stuff as a key value or inventory value...
silo 04, type 51
08, type 51
10, type 51
1c, type ?

note: always followed traditionally by a type 25-rename block.

----------------
05 alarm
00-01, most other objects will also work
sounds an alarm when activated

0x80 std

01 00 00 05 00 01 27 56 00 00 00 02 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00

----------------
06 surveillance camera
0018 only
(autoguns can be exchanged for these, but they probably won't look right)

0x80 std + some funny stuff

00: 01 00 00 06 00 18 27 38 00 00 00 02 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 57 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 15 55
D0: FF FF EA AB 00 00 00 00 00 00 00 00 00 00 00 F2
E0: 00 00 00 00 00 00 00 00 FF FF FF 9C

0x82 2byte preset used to *center* camera. This is the default middle position. all rotation data is applied to this angle.
*note: below seem like typical rotation values. user might have ot fiddle with it a bit...
0xCC 2byte how far camera can rotate upward. positive value (N/A)
0xCE 2byte how far camera can rotate left from preset. positive value.
0xD0 2byte how far camera can rotate downward. negative value. (N/A)
0xD2 2byte how far right it can rotate. negative value.

0xDE 2byte speed. how fast the camera turns

0xE8 2byte detection arc up/down from current position
0xEA 2byte detection arc left/right from current position
This sets up the line of sight. When bond is in the detection arc for five seconds, it triggers the alarm. Set this high enough and the camera can look in teh opposite direction but still see you.
FFFF,FF9C are the default values

note: for free rotation left/right, set both to 0000
note: vertical rotation should be set to default. Camera can't move this way.
defaults should be 0000xxxxFFFFxxxx


----------------
07 ammo clip
0079-0086 specifically, though most objects will work

0x80 std
then 000000## which is type of ammo on pickup
adds default amount of ammo of given type number
can add ammo of any type, not just the first 13

example:
00: 01 00 00 07 00 7E FF FF 00 00 80 00 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 01

80: type of ammo on pickup. Adds default pickup ammount for that type
(same as amount of ammo on gun pickup)
note: this type is almost exclusively found inside other objects

----------------
08 weapon pickup
weapon objects specifically, or really most objects

all 08 types are invincible

0x80 contains some added tags
then ??FFFFFF 00000000
?? is replaced with inventory pickup value, or F# for multiplayer value.
next byte is also replaced if a linked weapon

normal example:
00: 02 00 00 08 01 4D 00 2A 00 00 00 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 58 FF FF FF 00 00 00 00


inventory addition on pickup:
80: 58 FF FF FF 00 00 00 00
multi example:
80: ...F0 FF FF FF 00 00 00 00
weapons are F0 - F7, for the 8 weaopns in each weapon set

linked guard weapons: (xenia in jungle)
note: 0x8 settings 80+90 are used to designate right (80) and left (90) handed weapons that are EQUIPPED
right
00: 01 00 00 08 00 C5 00 00 80 00 40 00 00 00 00 00 ...
80: ...0E FF FF FF 00 00 00 00
left
00: 01 00 00 08 00 B9 00 00 90 00 40 00 00 00 00 00 ...
80: ...18 FF FF FF 00 00 00 00

linked pickups within a crate
note: 0x8 settings 00+10 are used to designate right (00) and left (10) handed weapon PICKUPS only
left
00: 01 00 00 08 00 BC 00 02 10 00 80 00 00 00 00 00 ...
80: ...0D FF FF FF 00 00 00 00
right
00: 01 00 00 08 00 BC 00 02 00 00 80 00 00 00 00 00 ...
80: ...0D FF FF FF 00 00 00 00

---------------
09 guards
use head/body values

example:
00000009 0000 0000 0004 00 02 FFFFFFFF 03E8 00 64 0000 FFFF 00000000
path example:
00000009 0017 006E 0025 04 01 FFFFFFFF 02EE 00 32 0000 FFFF 00000000

format:
00000009 00ii pxxx 00bb !! aa FFFFFFFF hhhh 00 zz 0000 FFFF 00000000
00ii index number. used to link hats/weapons
pxxx preset position
00bb body
!! 04 if walking on a path, 00 otherwise
aa animation/action
FFFFFFFF
hhhh health
00
zz multiple of 16... accuracy/reaction time?
0000 I've also seen 0004...
FFFF head. FFFF is random, or set to distinct head if need be

---------------
0A single monitor display
use the value of a object with a viewing pane (consoles, etc)
4D is specifically dedicated as a stand-alone viewscreen

0x80 std
then, fill to 0xF0
00000000 FFFFFFFF FFFFFFFF 000000##
## is animation sequence.

00: 01 00 00 0A 00 4B 00 02 11 00 80 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
F0: 00 00 00 00 FF FF FF FF FF FF FF FF 00 00 00 10

if set to hanging rack:
preset remains at FFFF for all attached monitors
0xF4 is decremented 1 for each subsequent monitor (like you would normally to preset)
F8 is changed from FFFFFFFF to long value for that monitor. ie. 00000000, 00000001, etc.
***see type 0C for example of proper notation

---------------
0B multiple-screen displays
use an object with multiple viewing panes (ie. double consoles)
4E is dedicated as a stand-alone multi-viewscreen

0x80 std
last line... 10141414
four values, each one a different possible screen
can display up to four unique screens
first is primary, others are overlayed

00: 01 00 00 0B 00 4E 27 3C 60 00 00 62 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
250: 10 14 14 14

---------------
0C hanging monitor rack
4C !only!
must be followed by set number of 0A types, per example

0x80 std except 0x0B sets number of monitors to hang on rack

example:
01 00 00 0C 00 4C 00 33 00 00 00 04 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00

must be followed by number of 0A-type presets set at 0xB
example of 0A subobjects, first and last lines only given
00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ...
F0: 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 xx

00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ...
F0: 00 00 00 00 FF FF FF FE 00 00 00 01 00 00 00 xx

00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ...
F0: 00 00 00 00 FF FF FF FD 00 00 00 02 00 00 00 xx

00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ...
F0: 00 00 00 00 FF FF FF FC 00 00 00 03 00 00 00 xx

---------------
0D autoguns
autogun models only
(0062,0124,012B only)

0x80 std + extra info

00: 01 00 00 0D 00 62 00 27 00 00 00 04 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 71 00 00 00 00 00 02 00 00 FF FE 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 00 00 00 00 00 00 00 DA 00 0A 00 00 00 00 00 00
B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
D0: 00 00 00 00 00 00 00 00

0x82 2byte preset used to *center* gun. aims at this when it doesn't aim at you.
*note: below seem like typical rotation values. user might have ot fiddle with it a bit...
0x88 2byte how far gun can rotate upward. positive value
0x8A 2byte how far the gun can rotate left from preset. positive value.
0x8C 2byte how far the gun can rotate downward. negative value.
0x8E 2byte how far right it can rotate. negative value.

0xA6 2byte speed. how fast the turret turns
0xA8 2byte distance before deactivating. same as clipping/model distances

note: for free rotation left/right, set both to 0000
note: vertical rotation must be set or any non-ground autogun can't find Bond
defaults should be 0000xxxxFFFFxxxx or 0002xxxxFFFExxxx. it doesn't really matter much

last note: this data is also shared by cameras. They expand on this basic stuff.

---------------
0E Link Pickups
any chr_name pickup

format:
0000000E xxxxxxxx yyyyyyyy
x # objects to weapon pickup 1
y # objects to weapon pickup 2

example:
00 00 00 0E FF FF FF FE FF FF FF FC

might be possible to double weapons with this...
just to remove weird glitchiness of pickups in hard-to-reach areas

---------------
0F ???

unknown

format:
0000000F

---------------
10 ???

unknown

format:
00000010

---------------
11 hat
D4-DF specific, possibly other objects as well

0x80 std. always assigned to a guard!

example:
00: 01 00 00 11 00 D8 00 0B 00 00 40 00 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00

note: 0x6 is always the id of the guard wearing the hat.
0xA is always 40, indicating the hat is equipped.

---------------
12 ???

always follows guard information

format:
00 00 00 12 00 00 ?? ?? 00 00 00 ??

---------------
13 switch
links player interaction between objects
interact with controlling object to open/close controlled door, for example

00000013 xxxxxxxx yyyyyyyy 00000000
x # objects to controlling object
y # objects to controlled object

examples:
01 00 00 0B 01 50 27 66 00 02 01 02 00 00 08 00
00 00 00 13 FF FF FF FF FF FF FF FD 00 00 00 00
01 00 00 0B 01 50 27 67 00 02 01 02 00 00 08 00
00 00 00 13 FF FF FF FF FF FF FF FB 00 00 00 00
01 00 00 0B 01 50 27 68 00 02 01 02 00 00 08 00
00 00 00 13 FF FF FF FF FF FF FF FA 00 00 00 00
01 00 00 0B 01 50 27 69 00 02 01 02 00 00 08 00
00 00 00 13 FF FF FF FF FF FF FF F8 00 00 00 00

used to link to these two doors:
01 00 00 01 00 B2 00 13 40 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 F3 33 00 01 00 00 00 00 00 10
00 00 00 10 00 00 00 CC 00 0C 00 00 00 00 00 80
00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

01 00 00 01 00 B3 00 15 40 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 C0 00 00 00 C0 00 00 00 00 51
00 00 00 51 00 00 02 22 00 00 00 04 00 00 00 00
00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

---------------
14 ammo box
0003-0007 specifically, although other objects will work

normal 0x80
then 13 sets of FFFF ####, where # specifies amount of ammo

example:
00: 00 99 00 14 00 05 00 31 00 00 00 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: FF FF 00 01 FF FF 00 02 FF FF 00 03 FF FF 00 04
90: FF FF 00 05 FF FF 00 06 FF FF 00 07 FF FF 00 08
A0: FF FF 00 09 FF FF 00 0A FF FF 00 0B FF FF 00 0C
B0: FF FF 00 0D

ammo types are:
1 9mm Ammo
2 (beta) also 9mm Ammo
3 Rifle Ammo
4 Shotgun Cartridges
5 Hand Grenades
6 Rockets
7 Remote Mines
8 Proximity Mines
9 Timed Mines
A Throwing Knives
B Grenade Launcher Rounds
C Magnum Rounds
D Golden Bullets

note: in multiplayer, ammo amounts and types are set based on last defined weapon.
set all amounts to zero on multiplayer (unless doing something really crazy...)

---------------
15 body armour
0072 & 0073 specifically, although most objects will work

normal 0x80,
then AAAA.aaaa 00000000
A.a is a hex percent, like 00028000, which is 2 1/2 times normal BA

example:
00: 01 80 00 15 00 73 00 00 00 00 00 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 01 00 00 00 00 00 00

---------------
16 tag object
target object can be manipulated or read via this tag.

00000016 xxxx#### 00000000 00000000

xxxx ID number used for this block.
#### number of objects forward (0001, 0002, etc) or backward (FFFF, FFFE, etc) to target block

______________
17 create mission objective
00000017 000000ii 0000TTTT 0000000*

00000017 start objective
000000.. objective number. just an ordered list, probably doesn't even use it
0000TTTT text to display. usually from stage text, but could be any loaded text bank
0000000* minimum difficulty: 0=agent, 1=secret agent, 2=007 agent
______________
18 end objective
...00000018

end objective
______________
19 destroy object
00000019 0000xxxx

xxxx value of corresponding 000000016 preset preceeding object to be destroyed
______________
1A complete if return true
0000001A xxxxxxxx

objective is completed if value given is equal to return from block data type 9A
______________
1B failed if return true
0000001B xxxxxxxx

objective is failed if value given is equal to return from block data type 9A

______________
1C collect object
0000001C 0000xxxx

xxxx value of corresponding 000000016 preset preceeding object to be collected
______________
1D deposit object (no target)
0000001D 0000xxxx

xxxx value of corresponding 00000016 preset preceeding object to be deposited
______________
1E photograph object
0000001E 0000xxxx 00000000 00000000

xxxx value of corresponding 00000016 preset preceeding object to photograph
______________
1F ???? modifier
0000001F ...


______________
20 enter room
00000020 0000xxxx 00000000 00000000

xxxx preset within target room
______________
21 deposit object in room
00000021 000000xx 000000yy 00000000 00000000

xx weapon index number of object to be thrown
yy preset within target room
______________
22 copy item (modifier)
00000022 ...

use key analyzer on following objective

---------------
24 gas-releasing object
when destroyed, the stage fills with toxic gas

same as std 03 type.

---------------
25 rename function
renames inventory object

example:
00: 00 00 00 25 FF FF FF FF 00 00 00 51 00 00 0C 3A
10: 00 00 0C 3B 00 00 0C 3C 00 00 0C 3D 00 00 0C 3E
20: 00 00 00 00 00 00 00 00

04: target objects forward/back. if zero, affects all instances of that one object in inventory
08: inventory value to alter
0C: watch main top
10: watch main bottom
14: inventory select name
18: on default pickup
1C: interaction text (pick up, activate, open, etc.)

notes: fields not entered will use defaults for that object
can rename any item pickup (keys, weapons, etc)
can also be used with doors or other objects, such as when you try to open a locked door

---------------
26 lock door
used to target padlock and open doors. doors remain locked until first argument is destroyed

format:
00000026 yyyyyyyy xxxxxxxx 00000000
x object # before/after to locking object
y locked object # before/after


example:
00 00 00 26 FF FF FF FE FF FF FF FF 00 00 00 00

linking this lock:
01 00 00 03 00 3F 27 5B 01 00 00 08 00 00 00 02 ...


to these two linked doors:
01 00 00 01 00 B4 00 0A 40 00 00 00 00 00 80 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
00 00 00 01 00 00 F3 33 00 01 00 00 00 00 00 51
00 00 00 51 00 00 02 22 00 08 00 00 00 00 00 00
00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

01 00 00 01 00 B4 00 0B 40 00 00 00 00 00 80 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
FF FF FF FF 00 00 F3 33 00 01 00 00 00 00 00 51
00 00 00 51 00 00 02 22 00 08 00 00 00 00 00 00
00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

---------------
27 wheeled vehicles
117-119, 121, 12D-131

0x80 std. be sure to set flag

truck f/ dam:
00: 01 19 00 27 01 17 01 3D 20 02 01 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 04 0A 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


for movement...
06: preset must be part of a path
08: set to 0010xxxx
80: jal to action block
---------------
28 aircraft
011A-011D, 0123 (cars will work, just not properly...)

example:
00: 00 40 00 28 01 1C 00 1F 30 22 01 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00
80: 00 00 04 2A 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B0: 00 00 00 00

for prop motion:
08: set to 0010xxxx
80: rate of motion.
(it may also be possible to move them along a path...)

helicopter in cradle...
02 4C 00 28 01 1A 00 93 10 02 00 08 00 08 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
00 00 04 21 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00


---------------
29 ???
unknown

format:
00000029

---------------
2A normal glass
0068 - 006B specifically, as well some other objects. Defines the glass shatter effect

normal 0x80, although the 2xxx presets may require specific rotation...

example:
01 00 00 2A 00 68 27 10 04 00 0B 62 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
beaker
01 00 00 2A 01 36 00 C9 00 00 00 09 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00

---------------
2B Safe
00FE only, + 0125 for safe door

std 0x80

example:
00: 01 00 00 2B 00 FE 27 59 00 02 01 E8 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00

-safe door f/ bunker 2
01 00 00 01 01 25 00 4A 00 00 00 00 20 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 5A 00 00 03 E8 00 00 00 00 0F 5C
00 00 0F 5C 00 01 00 00 00 08 00 05 00 00 00 30
0F FF FF FF 00 00 00 10 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

alert that safe is locked (basic "door is locked" text override:
00 00 00 25 FF FF FF FF 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 65
00 00 00 00 00 00 00 00

1st item in safe (first 0x10):
01 00 00 08 00 CC 00 2B 00 00 00 08 00 00 00 00 ...

link object into safe
00 00 00 2C FF FF FF FF FF FF FF FC FF FF FF FD 00 00 00 00

2nd item in safe (first 0x10):
01 00 00 08 00 CC 00 2D 00 00 00 08 00 00 00 00 ...

link object into safe
00 00 00 2C FF FF FF FF FF FF FF FA FF FF FF FB 00 00 00 00

probably not safe specific, but when one silencer is picked up, both are
00 00 00 0E FF FF FF FE FF FF FF FC

3rd item in safe (first 0x10):
02 00 00 03 01 0E 00 2C 00 04 00 08 00 00 00 00 ...

link item into safe:
00 00 00 2C FF FF FF FF FF FF FF F7 FF FF FF F8 00 00 00 00
+ rename
00 00 00 25 FF FF FF FE 00 00 00 42 ...



---------------
2C Safe items
used to place items within a safe

format:
0000002C oooooooo xxxxxxxx yyyyyyyy 00000000
o objects forward/back to object placed within safe
x objects forward/back to safe object (00FE)
y objects forward/back to safe door (0125)

example, f/ bunker 2 safe:
00 00 00 2C FF FF FF FF FF FF FF FC FF FF FF FD 00 00 00 00


---------------
2D tank
0120 only!

0x80 std.
0xD8 assigns amount of tank ammo to recieve

tank on runway
00: 01 14 00 2D 01 20 00 2C 00 02 01 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
D0: 00 00 00 00 00 00 00 00 00 00 00 1E 00 00 00 00

C6: 2 bytes. set >0 for firing effect
D8: tank ammo, max=50 (0x32)

note: can not be used effectively multiplayer.
Will not assign clipping change and correct player assignment.

---------------
2E Cut-Scene Coordinates
sets coordinates and rotation for in/outro camera sequences
uses the same format as those 06 intro camera shots following object data

format:
00: 00 00 00 2E 00 0E 20 1F 00 01 0C F9 FF D5 75 25
10: 00 03 25 07 00 06 2D B0 00 00 27 14

04: x coordinate offset
08: y coordinate offset
0C: z coordinate offset
10: lateral rotation
14: vertical rotation
18: preset. used to illuminate the correct room.

note - any vertical rotation around 0006xxxx will be near the horizon.

---------------
2F Tinted Glass
sets opacity and visibility distance for tinted glass panels

format:
00: 01 00 00 2F 00 68 27 8A 10 00 02 62 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00
80: 00 00 01 90 00 00 02 58 00 00 00 00 FF FF FF FF
90: 00 00 00 00

80: +/- 4byte distance to full illumination
84: +/- 4byte distance before you can see through window
both distances use general model/clipping values.

The difference between the distances sets the fade for the glass.
setting a low first value and high second value makes a pane that gradually gets more visible.
setting the first value the same as the second will mean that once you reach the given distance the pane immediately becomes clear.
setting the first value negative can be used to make glass that never becomes visible. or only partially so.

---------------
30+ End Setup Object List
all invalid types indicate the end of the setup file
no arguments

format:
00000030
 
View user's profile Send private message Send e-mail
zoinkity
007
007


Joined: 24 Nov 2005
Posts: 1687

 PostPosted: Thu Mar 23, 2006 8:42 am    Post subject: Reply with quote Back to top

This explains clipping, as used in Citadel. On GE, only triangles and interspersed rectangles not coiding with a wall boundry can be concidered stable. In PD, however, they used incredibly huge polygons. (PD's format though differs significantly)
_________________________
Clipping:

each tile has a 8 byte header. each point uses 8 bytes
rom files start with a necessary header.
address for clipping file, stored in ram, always 000000000
offset in file to first tile
(you can insert more offsets here as notes or whatnot)
before first tile, 00000000

tile header format:
pp pp pp rr !- -- #- --

[p]--values used within setup files to tie object positions to tiles. Not used in emulators, but it is read and probably used on console. The first two bytes are the equivelant of a decimal number. The last byte is a coded value.
00 a
01 a1
02 a2
03 a3
04 a4
05 a5
06 a6
07 a7
08 b
09 b1
0A b2
0B b3
0C b4
0D b5
0E b6
0F b7
etc...
ie:
0588 07
corresponds to:
p1416a7
These values should match the values in setup. If not, the object may not load in the correct room or at all.

[r]oom. When on this tile, this room is visible. Rooms follow reverse order and to be parsed correctly must be in room number order. If max rooms are 2E, then rooms follow 2E, 2D, 2C, 2B etc.
Multi-room visibility is handled in background data.

[!] special type value (first nibble of 5th byte). bit flags:
Normal tiles are 0, kneeling is 1, ladders are 2
ladders must be vertical or near vertical to function.
Although you can write a ladder + squatting (3), it really isn't recomended. It is too easy to get stuck.

[-] these values have no identifiable use.

[#] number of points in tile. Techincally the limit is 15, but a rom file will not parse correctly if more than 10 are used.
Do not use more than 3-4 points whenever possible. There are about a billion things that can go wrong with larger tiles, from incorrect assembly, bad file parsing, connection problems, and visibility errors. Only triangles are recomended to intersect a room junction.

[-] these three nibbles, as far as I can tell, are unread. They always add up to the number of points, and the files do tend to compress better when they're there, but otherwise they are useless.


points:
points follow counterclockwise, the last connecting to the first. With larger files, make sure you stick to regular polygon forms wherever possible to avoid a point connection issue.
xx xx yy yy zz zz cc cc

x,y,z positions are global values used in visibility windows and for setting room position. They are relative to the stage centerpoint and are scale independant.
[c]onnection values. All tiles are connected with these values. 0000 is no connection.
First tile offset is 0010. Each connection value counts the number of words from the first tile to the header of the tile you are connecting to. Each is relative to the first tile, so if you are creating/using a rom file ignore the header.
ie: 0401
4*(0401 - 10) = FC4 is the target tile address in file

end of table:
the table ends when one header reads 0. no points should follow.
This should be followed by the ASCI string "unstric", null terminated to nearest doubleword.

-Zoinkity
_________________
(\_/) Beware
(O.o) ze
(> <) Hoppentruppen!
 
View user's profile Send private message Send e-mail
zoinkity
007
007


Joined: 24 Nov 2005
Posts: 1687

 PostPosted: Thu Mar 23, 2006 8:46 am    Post subject: Reply with quote Back to top

Global object visibility, as seen in background data.
For a nifty example of this, check out my Dam multiplayer. It disables the global visibility in the stage, decreasing skip rate.

easily the least helpful doc
_________________________________
types:
00010000 00000000 terminator
20020000 00000000 following rooms are lit
21010000 00000000 starts each group, ending prior
22020000 00000000 -and statement linking stuff
5A010000 00000000 ends point groups
5C010000 00000000 ends room pointer groups (1E, 1F)
65000000 000000## room number

common sequences:
14030000 00000000 65000000 000000#1 65000000 000000#2
5A010000 00000000
allows you to see a certain room from every room
number between #1 and #2. Can be set to same room
number too.

1E010000 00000000 5C010000 00000000 lights rooms without need for portals

1F020000 00000000 64000000 000000## room is visible
through this portal
22020000 """""""" """""""" """""""" and this one too

20020000 00000000 65000000 000000## make following
room visible to all entries prior.
You can just list a slew of these.


Might seem chaotic right now, but can write them.
Minimum would be: (... = 00000000)
21010000 ...
14030000 ... 65000000 000000## 65000000 000000##
5A010000 ...
1E010000 ...
5C010000 ...
20020000 ... 65000000 000000##
00010000 ...
_________________
(\_/) Beware
(O.o) ze
(> <) Hoppentruppen!
 
View user's profile Send private message Send e-mail
zoinkity
007
007


Joined: 24 Nov 2005
Posts: 1687

 PostPosted: Thu Mar 23, 2006 8:55 am    Post subject: Reply with quote Back to top

All due credit to Sub on this one, since he figured out a lot of them. In fact, it really was mostly him ;*)

However, I'm releasing the info in case anyone actually wants to use it for anything, since we never really got around to it.
(GEMaster: this is what I used for that funny hack that guy wanted)

This is incomplete, and there's nothing to say it is accurate. However, the basics for the loops do work, and we've done some nifty (mostly silly) things with it

There's also a default guard routine outside the action blocks but I can't remember what address that was at. It's kinda fun really; I had scientists rigged up where shooting them made them put a hat on their head and they hopped like bunnies.

Also, there is nothing more deadly than a scientist with double grenade launchers. Nothing.
_____________________

Goldeneye
Item Types

if > 0x18 subtract 0x19
if < 0x25 ((0x25 - 0x19) << 2) + 80053654 (still end of table) (TLB pointers to jr)


80052100 table
Other type: (note: these are # of bytes, not words in other table)
00 2
00XX
XX = Return Value
Go into loop executing no commands but going through them until Return Value is met by 02XX Command or 04 is found and terminate

01 2
01XX
XX = Return Value
Return to start of block, Go into loop executing no commands but going through them until Return Value is met by 02XX Command or 04 is found and terminate

02 2
02XX
XX = Return Value
In main load (not in return loop), 02 does nothing. In the return loop, if current Return Value == XX, go to main load and start executing commands again.

03 1
04 1 terminate
05 4 jal; jump to block function with # after its pointer 05.ii.#### [i]dentifier type (FD=guard, F8=Bond),[#] of thing to jump to. given after the pointer to the block data
also: 05 - 4 Default action for guard on the path (ex. walking wait for bond, attacking immediately, wait till bond shoots, etc), 00XX = bank at 80037450, 04XX = level specific, corresponding to table with pointers to spawn stuff

06 3 06.xxxx set return link to start of this block.
07 1 return to original function
08 1 some odd walking or foot-shuffling animation
09 1 kneel
0A 9
0AXXXXYYYYZZZZWWWW
XXXX = Animation offset into table (ex. swirling, running, holding gun, etc, sent list before)
YYYY ?
ZZZZ ?
WWWW = some sort of speed halfword, something like that

0B 2 0B.rr ?, return rr (bunker 1: 040D)
0C 1 stand still?
0D 1 look around self
0E 2 0E.rr step sideways, return rr (guard action)
0F 2 0F.rr hop sideways, return rr (guard action)
10 2 10.rr run sideways, return rr (guard action)
11 2 11.rr walk while firing, return rr (guard action)
12 2 12.rr run while firing, return rr (guard action)
13 2 13.rr roll along ground, then fire crouched, return rr (guard action)
14 6 14.xxxx.####.rr target guard [#], [r]eturn
15 6 15.xxxx.####.rr kneel targetting guard [#], [r]eturn
16 6 16.xxxx.####.rr stand (bond like) targetting guard [#], [r]eturn
17 6 17.xxxx.####.rr stand still facing guard [#] cordially, [r]eturn value (ie. valentine, mishkin)
guard ID#0000 is Bond.
values for x:
xx2x: aim, but don't fire
xxx1: used to pinpoint bond
xxx4: used to pinpoint guard ID#
xxx8: used to pinpoint preset
18 4 18.##.xxxx state set for object?
tagged to the statue helicopter: 18.00.0806
possibly unrelated... 18000808
19 4 19.##.xxxx unset state of object?
1A 2 1A.rr throw grenade, return rr (guard action)
1B 5 1B.xxxx.##.rr drop weapon: model [x], weapon inventory #, return rr
1B.xxxx.ww.rr if bond within x units, drop [w]eapon inventory #, return rr
(if grenade, mine, etc dropped, they are active and will explode!)


1C 3 1C.pppp jog to preset
1D 1 stop?
1E 3 1E.pppp walk to preset
1F 3 1F.pppp run to preset
20 2 Make path active 20XX XX = path designator from after each above path pointers
21 1 Surrender! guard throws down equipment, hands up, knees shaking!
22 1 fade away guard
23 2 23.## ?, guard ID#
24 4 24.xxxx.rr x - either preset or path preset (2328), return rr
25 1 sound alarm
26 1 shut off alarm
27 2
28 2 28.rr jog to bond. [r]eturns when at location
29 2 29.rr walk to bond. [r]eturns when at location
2A 2 2A.rr run to bond. [r]eturns when at location
2B 2
2C 3
2D 3
2E 3
2F 2 2F.rr if guard stopped moving (arrived at destination) return rr
30 3 30.##.rr if guard ID killed, return rr
31 3 31.xx.rr return value when bond in room with preset
32 2 32.rr if Bond within sight, return rr
33 1 Seed Random Byte
34 3 34.xx.rr if random < XX, continue to rr
35 3 35.xx.rr if random > XX, continue to rr
36 2
37 2 37.rr if alarm activated, return rr
38 2
39 2 39.rr if guard sees gunfire return rr
3A 2 3A.rr if you shoot another guard, return rr
3B 2 3B.rr if you kill someone in front of guard, return rr
3C 2 3C.rr if Bond in firing range, return rr
3D 2
3E 2 3E.rr if you shot guard, return rr
3F 2 3F.rr if heard bond, return rr
40 3
41 2 41.rr ?, return rr
42 2
43 2
44 4
45 2 45.rr ?, return rr
46 2 46.rr if you fired a bullet, return rr
47 3
48 3
49 3
4A 3
4B 4 4B.pppp.rr return if within [p]roximity of bond. guessing clipping units.
4C 4 4C.pppp.rr return if not within [p]roximity of bond
4D 7 4D.gg.xxxx.pppp.rr if [g]uard (FD) or Bond? (FCool within [x] units of [p]reset, [r]eturn value.
4E 7 4E.gg.xxxx.pppp.rr if [g]uard (FD) or Bond? (FCool not within [x] units of [p]reset, [r]eturn value.
4F 5
50 5
51 4
52 6 52.xxxx.####.rr when within [x] units of preset #, return rr
53 6 53.xxxx.####.rr when not within [x] units of preset #, return rr
54 5 54.##.xxxx.rr when guard ID# is at preset [x], return rr
55 4 if step on preset xxxx, return yy
56 3 collecting item; 56.oo.##; oo is number of type 16 to test, return##
57 3 57.ii.rr if [i]tem was depositted, return rr
58 4 58.ii.##.rr if deposited [i]nventory value on type 16#, return rr
59 3 59.##.rr if weapon value = ##, return rr (ie. 590133: if unarmed, return 33)
5A 3
5B 3 test if object not destroyed; 5B.##.rr; type 16[#] to test, [r]eturn
5C 3 test if object activated; 5C.##.rr; type 16[#] to test, [r]eturn
5D 3 use gadget on object; 5D.##.rr type16[#]
5E 2 5E.xx type 16#xx activates
5F 2 5F.xx detonate type 16#xx
60 2 60.xx Guard Drops type 16#xx
61 2
62 2
63 2 63.xx guard gives bond type16#xx item
64 3
65 4 65.##.xxxx move object to preset (16-object for plane, then preset)
66 2 open door with type 16#xx
67 2 close door with type 16#xx
68 4 68.##.ss.rr check [s]tate of door type16#, [r]eturn if true.
states:
01: closed
02: open
04: closing
08: opening
69 3
6A 3 6A.##.xx change state of door type16#
values:
80: locked
01: locked
no clue how this works...
6B 3
6C 4
6D 3 6D.##.rr if objective number complete, return rr
6E 3 6E.##.rr ?, return rr
6F 3 6F.##.rr if objective number incomplete, return rr
70 3 if difficulty xx, return yy. 1=agent, 2=secret, 4=007
71 3 if not difficulty xx, return yy
72 4
73 4
74 4
75 4
76 3
77 3
78 3 78.xx.rr some sort of test (for presets?), return rr
79 3 79.xx.rr if shot guard ## times, return rr
7A 3
7B 3
7C 4 7C.##.xx.rr if guard ID#'s health above [x], return [r]
7D 4 7D.##.xx.rr if guard ID#'s health below [x], return [r]
7E 3 7E.##.rr ? - guard ID#, return rr - cradle (0413)
7F 3 7F.xx.rr if health below xx, return rr
80 3 80.xx.rr if health above xx, return rr
81 2
82 2
83 2
84 3
85 2
86 2
87 2 87.xx don't think it returns...
88 2
89 3
8A 2 8A.rr ?, return rr?
8B 3
8C 2
8D 2 8D.BF - ?, no return. immediately before BF type in cradle (0401)
8E 2 8E.?? ; ? is number of spawned guard.
8F 3 8F.xxxx sets guard health
90 3 90.xxxx sets guard body armour amount
ie: blue beret = 0050
red beret = 003C
black beret = 0014

91 2 91.28 ?, not a return type; found in generic 0010
92 2 92.64 ?, not a return type; all three found in order in cradle 0410
93 2 93.32 sets animation speed?
94 2 94.## set byte
95 2 95.## unset byte
96 3 96.##.rr if set byte # true, return value?
97 3 97.##.tt guard ID# [t]ype change
types:
01: listen to commands?
04: ? - trev in cradle (040F)
80: scientist
98 3
99 4
9A 5 9A.xxxxxxxx Set Objective Bits
9B 5 9B.xxxxxxxx Unset Objective Bits
9C 6 9C.xxxxxxxx.rr Check if Objective Value, Return Loop if so
9D 5 9D.xxxxxxxx set Guard bits
9E 5 9E.xxxxxxxx unset guard bits
9F 6 9F.xxxxxxxx.rr if guard bits same, return rr
A0 6 A0.##.xxxxxxxx Set Tags for Guard ID#
A1 6 A1.##.xxxxxxxx UnSet Tags for Guard ID#
A2 7 A2.##.xxxxxxxx.rr if tags for guard ID# xxxxxxxx, return rr
guard tags:
00000001: ?-unset in cradle (041A)
00000002: sunglasses (where applicable)
00000010: invincible
00000020: ? - guards in dam (040D)
00000040: can shoot guards
00000200: ? - Twhere in cradle (0412)
00000400: ? - fall in cradle (041F)
00000800: standard clipping (allows him to handle ramps and stuff)
00001000: ? - jump part of dam
00002000: ? - jump part of dam
00004000: ? - set when trev falls in cradle (0418)
00008000: ? - set when trev starts attacking you (0418)
00010000: ? - cuba
00020000: ? - cuba
00080000: ? - trev in cradle (0408)
00100000: scientist
00400000: ? statue guards

A3 6 A3.##.yyyyyyyy set state of type 16#xx object yyyyyyyy
A4 6 A4.##.yyyyyyyy unset state of type 16#xx object yyyyyyyy
A5 7 A5.##.yyyyyyyy.rr if state of type 16#xx object yyyyyyyy, return rr
object tags:
00100000: uncollectable
00040000: visible?
00020000: invincible?

A6 6 A6.##.xxxxxxxx set flags for door tagged with type 16#
A7 6 A7.##.xxxxxxxx unset flags for door tagged with type 16#
A8 7 A8.##.xxxxxxxx.rr if flags [x] for door tagged with type 16[#] same, return rr
door tags:
10000000: locked
04000000:
00080000: invisible
A9 2
AA 3
AB 3 AB.xxxx set object to y coordinate of xxxx preset
AC 4 AC.##.xxxx Guard ID#. moves guards or sets spawn points...
AD 1 debug text or comments follow. ascii, terminated with 00. Must contain some text or will fail!
AE 1 reset loop counter and enable it (set 40 bit)
AF 1 reset loop counter
B0 1 disable loop counter (unset 40 bit)
B1 1 enable loop counter (set 40 bit)
B2 2 B2.rr if loop counter enabled, return rr (checks 40 bit)
B3 5 B3.xxxxxx.rr if cycle counter < value, return rr
B4 5 B4.xxxxxx.rr if cycle counter > value, return rr
B5 1 Show Timer
B6 1 Hide Timer (Silent Countdown)
B7 3 Set Timer X seconds (Doesn't show timer yet)
B8 1 Stop Timer
B9 1 Start Timer
BA 3 BA.xx.rr check if timer enabled(01) or disabled (00), return rr
BB 4 Detect if Timer Below Certain Point xxxx, return yy is true
BC 4 Detect if Timer Above Certain Point xxxx, return yy is true
BD C spawn guard bb.hh.pppp.aaaa.bbbbbbbb.rr [b]ody, [h]ead, into path table(00=use actual preset number for spawn), [p]reset position (23xx for path table), [a]ction,
BE B spawn guard... BE.bb.hh.tt.aaaa.00000000.rr (unused in bunker1)
[t]ype indicates current guard ID, bonds, etc...
flags:
00000001 sunglasses (when applicable)
00000002
00000010 scientist? can kill own?
BF 9 weapons BF.mmmm.WW.hh000000.rr [m]odel, [w]eapon inventory #, [h]and - 00 normal, 80=right+90=left for doubles, [r]eturn value if loaded okay
C0 8 hats C0.mmmm.00000000.rr [m]odel, [r]eturn value if loaded okay
C1 5 C1.##.xxxx.rr guard ID#, preset or action?, return rr
C2 3 lower display text (text bank values); C2.xxxx
C3 3 upper display text (text bank values); C3.xxxx
C4 4 C4.xxxx.yy sound effect: xxxx some other value yy
C5 5 C5.xxxx.yyyy audible range for preceeding sound effect, just like 2F glass
C6 6
C7 6 play continuous sound effect: C7.vvvv.ss.???? [v]olume, [s]ound, ????
C8 6
C9 2 C9.00 shut off sound
CA 5
CB 2 CB.## use path # used on dam truck.
CC 5 CC.xxxx.yyyy set speed for type 27 object; x is speed, y amount of time to reach full speed
CD 5 CD.xxxx.yyyy set speed [x] of aircraft rotor (plane prop, etc.)
CE 2 "Detect if Currently in Intro Camera", return if so
CF 2 "Detect if Currently in Intro Swirl", return if so
D0 4 D0.##.ii.aa change type16# monitor [a]nimation to aa. [i]mage slot to be replaced is set here (for 0B multi image monitors)
D1 2
D2 1 exit level
D3 1 Return from Camera scene, Careful Everything is Reset
D4 3
D5 6 Go to camera position D5XX????..XX = 16-object for camera, unknown ??s, didn't see effect. Can do at any time.
D6 4 D6.yyyy.rr at elevation y return rr (uses clipping values methinks)
D7 2 D7.xx 00-disable text boxes. 01-enable text boxes
D8 1 ? cradle falling...
D9 5 D9.##.xxxx.rr guard ID#(or FD for current) moved to preset. return when true
DA 1 fade out for cut-scene
DB 1 fade in from black (reset for DA type)
DC 2 DC.rr return when fade is complete
DD 1 Remove Guards (they're just gone, no firing, nothing, including Bond image)
DE 1 Bring Guards Back
DF 2 DF.## open type 16# door. used in cutscenes
E0 3 E0.##.00 hide weapon? on guard ID - guard ID draws weapon
E1 3
E2 4
E3 2 E3.ww draw weapon type (1st person)
E4 2 E4.ww draw weapon type (3rd person)
E5 3 E5.xxxx set bond's speed (continues in last used direction)
E6 5
E7 2
E8 2
E9 1
EA 1 On Key Press, Fade out and Exit Level.
EB 2 EB.xx on Key-Press, return xx
EC 1 disable player control
ED 1 hide 1st person display (left hand, weapon etc)
EE D cuba circular camera
EE.xxxx.yyyy.zzzz.uuuu.vvvv.wwww
x: lateral distance away from bond
y: vertical distance from bond
z: rate of spin
u: preset used as focus point for angle
v: offset to y axis, relative to preset
w: inital rotation, relative to preset
(because the camera focuses directly on the preset, v and w offset the camera's focus relative to the preset. It is as though you moved the preset itself that much. x and y set the camera's distance from the preset while focusing on the point.)

EF 1 trigger cuba credit text
F0 2 F0.rr used in cuba...
F1 2 F1.rr if objectives complete, return rr
F2 3 F2.##.rr if guard ID# loaded, return rr
F3 2 F3.rr if guard loaded return rr
F4 4 F4.mm.xx.dd play music [M]usic or 0 for stage x-theme, x=volume?, [D]uration (FF for infinate)
bunker 1 - F4.003C4B
F5 2
F6 1 Trigger Explosions Around Bond (like plastique detonate)
F7 3 counts scientists who are dead F7.##.rr
F8 3 F8.##.rr ?, guard ID#, return rr - cradle (0413)
F9 1 ? cradle cutscene 041C
FA 1
FB 1 darken stage (or does is switch to x-sky?)
FC 2
FD not valid, end of table

for all types that use guard ID:
F8 is bond
F9... used to indicate bond but unsure what feature...
FD is current guard (one calling routine, if applicable)
FC... used to indicate guard but unsure feature...
_________________
(\_/) Beware
(O.o) ze
(> <) Hoppentruppen!
 
View user's profile Send private message Send e-mail
zoinkity
007
007


Joined: 24 Nov 2005
Posts: 1687

 PostPosted: Thu Mar 23, 2006 9:03 am    Post subject: There isn't a rule against Quad posting Reply with quote Back to top

I'm silly. Here's the default guard routines, plus their ID's and a breakdown of how they work. Most are different actions randomly selected from when bond is detected, such as roll around, run to him, and the ever so lovely walk and fire. A couple are also dedicated to handling double weapon guards, but otherwise copy single weapon ones.

By setting the offsets listed at the end of the file you can severly mess with guard activity. Cool, but dangerous. (yes, you really can make an infinate loop!)

Thanks ahead of time to GEMaster for not torturing me over posting all this stuff ;*) Squee!
________________________

0000: 80037070 (aim at bond)
140021000001 aim at bond, return 01
0201 kill the routine...
03 iterate
0101 start at 0201
04


0001: 8003707C (do squat)
0211 do nothing at all...
03 iterate
0111 start at 0211
04


0002: 80037084 (general violent guard routine)
0201 catch guard state...
03 iterate
30FD11 if current guard killed return 11
2F06 if guard not moving return 06
0101 start at 0201
//
0206 when not moving...
3207 if bond in sight return 07
3E0D if player shot current guard return 0D
3F0E if current heard player return 0E
4610 if you fired at current return 10
3A0D if you shoot another guard in sight of current return 0D
3B0D if you kill a guard in sight of current, return 0D
0B03 ?, return 03
33 seed random value
350103 if rand < 01, return 03
060002 set return: 0002 (this block)
05FD0003 current: jal 0003 (animation block)
0203 skip above jumps and test guard state...
0101 start at 0201
//
0210 fired at guard...
33 seed random value
357F07 if rand < 7F, return 07
060002 set return: 0002 (this block)
05FD000A current: jal 000A
//
0207 bond in sight...
060002 set return: 0002 (this block)
05FD0006 current: jal 0006
//
020D got shot...
060002 set return: 0002 (this block)
05FD0008 current: jal 0008
//
020E heard bond...
060002 set return: 0002 (this block)
05FD000B current: jal 000B
//
0211 guard was killed...
05FD0001 current: jal 0001 (do squat)
04


guard swats flies, wastes time 0003: 800370DC
33 seed random byte
353203 if rand < 32, return 03
0A009A000000C11810 animation: 009A
0002 continue to 0202
//
0203 else...
356403 if rand < 64, return 03
0A009B000001261810 animation: 009B
0002 continue to 0202
//
0203 else...
359603 if rand < 96, return 03
0A009C000000B71810 animation: 009C
0002 continue to 0202
//
0203 else...
35C803 if rand < C8, return 03
0A009D0000007B1810 animation: 009D
0002 continue to 0202
//
0203 else...
35FA03 if rand < FA, return 03
0A009E000000381810 animation: 009E
0002 continue to 0202
//
0203 else...
0A009F000000891810 animation: 009F
0002 continue to 0202
//
0202 return to calling function...
07 return
04


guards talk 0004: 8003713C
33 seed random byte
353C03 if rand < 3C, return 03
0A00AC000000450010 animation: 00AC
0002 continue to 0202
//
0203 else...
357803 if rand < 78, return 03
0A00AD0000004A0010 animation: 00AD
0002 continue to 0202
//
0203 else...
35B403 if rand < B4, return 03
0A00AE0000004F0010 animation: 00AE
0002 continue to 0202
//
0203 else...
0A00AF000000590010 animation: 00AF
0002 continue to 0202
//
0202 return to calling function...
07 return
04


0005: 8003717C (Patrol Routine)
0201 test movement...
03 iterate
2F06 if not moving return 06
0101 start at 0201
//
0206 when not moving...
3207 if bond in sight return 07
3E0D if current was shot return 0D
4610 if you fired at guard return 10
3A0D if you shoot guard in front of current return 0D
3B0D if you kill a guard in front of current return 0D
0101 start at 0201
//
0210 if you shot at guard...
33 seed random byte
357F07 if rand < 7F, return 07
060002 set return: 0002
05FD000A current: jal 000A
//
0207 if bond in sight...
060002 set return: 0002
05FD0006 current: jal 0006
//
020D otherwise...
060002 set return: 0002
05FD0008 current: jal 0008
04


0006: 800371B4 (set guard action for 0008)
960103 if byte set to 01, return 03
33 seed random value
352003 if rand < 20, return 03
0C stand still?
9401 set byte
07 return
//
0203 else...
9401 set byte
1A02 throw grenade, return 02
//
0203
33 seed random value
350A03 if rand < 0A, return 03
1302 roll along ground and fire, return 02
0203 else...
33 seed random value
350A03 if rand < 0A, return 03
0F02 hop sideways, return 02
0203 else...
33 seed random value
351903 if rand < 19, return 03
0E02 step sideways, return 02
0203 else...
33 seed random value
353203 if rand < 32, return 03
1002 run sideways, return 02
0203 else...
33 seed random byte
354003 if rand < 40, return 03
1102 walk while firing, return 02
0203 else...
357F03 if rand < 7F, return 03
1202 run while firing
0203 else...
33 seed random byte
357F0B if rand < 7F, return 0B
140001000002 fire at bond
020B else...
150001000002 kneel and fire at bond
0202 after setting action...
07 return
04


0007: 80037250 (detect bond)
0201 detect bond...
03 iterate
3207 if bond in sight return 07
3E0D if guard shot return 0D
3F0D if heard bond, return 0D
460D if you fired at guard, return 0D
3A0D if a guard is shot in front of current, return 0D
3B0D if a guard is killed in front of current, return 0D
0101 start at 0201
//
0207 if saw bond...
060002 set return: 0002
05FD0006 current: jal 0006
//
020D otherwise...
060002 set return: 0002
05FD0008 current: jal 0008
//
020E not used...
060002 set return: 0002
05FD000B current: jal 000B
04


0008: 8003720C (run for bond)
9401 set byte
2801 jog to bond, return 01
07 return (if above failed)
//
0201 loop until not moving...
03 iterate
2F06 if not moving, return 06
3207 if bond in sight, return 07
0101 start at 0201
//
0207 if in sight...
05FD0006 current: jal 0006
//
0206 if not moving...
07 return
04


main scientist control block? 0009: 80037280
0201 loop until not moving...
03 iterate
2F06 if guard not moving return 06
0101 start at 0201
//
0206 when stopped...
320F if bond in sight return 0F
7B0010 ?, return 10
3F10 if heard bond return 10
3A10 if shot a guard in front of current, return 10
3B10 if killed a guard in front of current, return 10
0101 start at 0201
//
0210 most conditions...
79000F if shot guard once return 0F
0D look around self
//
0204 loop while moving...
03 iterate
2F0F when not moving return 0F
0104 start at 0204
//
020F when not moving...
1C2328 jog along path?
//
0203 loop while moving...
03 iterate
2F02 if not moving return 02
0103 start at 0203
//
0202 when not moving...
4EFD000A232802 if current guard not within 10 units of path?, return 02
24232805 something about path, return 05
0002 continue to 0202
//
0205 path thing...
03 iterate
2F02 when not moving return 02
0105 start at 0205
//
0202 general guard routine...
060002 set return: 0002
05FD0008 current: jal 0008
04


000A: 800372D0
0D look around self
0201 loop while guard moving...
03 iterate
2F02 if guard not moving return 02
0101 start at 0201
//
0202 then...
05FD0008 current: jal 0008
04


000B: 80037224
9401 set byte
410E ?, return 0E
05FD0008 current: jal 0008
//
020E if above true...
31F90E if in room with bond's preset?, return 0E
05FD0002 current: jal 0002
//
020E when in room
C1FD000C03 current guard does something preset or action based, return 03
05FD0008 current: jal 0008
//
0203 if above completed...
05FD0002 current: jal 0002
04


000C: 80037248
060002 set return: 0002
05FD0008 current: jal 0008
04


000D: 800372E0
0228
281B jog to bond, return 1B on arrival
AD6E6F20676F210A00 debug text: no go!{/n}
//
021B when there...
03 iterate
3C06 if bond in firing range return 06
2F02 if not moving return 02
011B start at 021B
//
0201
03 iterate
78062D ?, return 2D
9F000000102F if guard bit set return 2F
022D 78 was true...
2F06 if bond not moving, return 06
4C00C803 if bond not within C8 units return 03
0101 start at 0201
//
0203 bond not here yet...
0128 start at 0228
//
0206 when in range check again...
3C03 if bond in firing range return 03
0002 continue to 0202
//
0224
03 iterate
4B003203 if bond within 32 units return 03
2F03 if not moving return 03
0128 start at 0228
//
0203 bond is here...
9F000000102F if guard bit set, return 2F
022B return for bit reset...
33 seed random byte
350A03 if rand < 0A, return 03
1A02 throw grenade
0203 else...
353203 if rand < 32, return 03
0E02 step sideways, return 02
0203 else...
353C03 if rand < 3C, return 03
1302 roll along ground and fire, return 02
0203 else...
355003 if rand < 50, return 03
1302 roll along ground and fire, return 02
0203 else...
356403 if rand < 64, return 03
1102 walk while firing, return 02
0203 else...
359603 if rand < 96, return 03
1202 run while firing, return 02
0203 else...
35C803 if rand < C8, return 03
140001000002 fire at bond, return 02
0203 else...
150001000002 kneel and fire at bond, return 02
0202 after setting action...
3C03 if bond in firing range return 03
001B continue to 021B
021B which is RIGHT HERE...
03 iterate
33 seed random byte
35A003 if rand < A0, return 03
001C continue to 021C
//
0203 else...
03 iterate
0101 start at 0201
//
021C return when byte set...
AE reset cycle counter
281D jog to bond, return 1D on arrival
//
021D loop while moving...
03 iterate
2F03 if not moving return 03
B400003C03 wait, then return 03
011D start at 021D
//
0203 after that...
08 walk? shuffle feet?
AD776169740A00 debug text: wait{/n}
9504 unset byte
33 seed random value
35A003 if rand < A0, return 03
9404 set byte
0203 rand skipped above...
AE reset cycle counter
021E restart point for B3 command...
03 iterate
3C03 if bond in range, return 03
4603 if shot at return 03
03 iterate
B300025804 every cycle until 258 return 04
960405 if byte set to 04, return 05
0128 start at 0228
//
0205 if byte set...
011C start at 021C
//
0204 until 258 cycles...
011E start at 021E
//
0203 lets kill bond...
0101 start at 0201
//
022F guard bit set...
780603 ?, return 03
9E00000010 unset guard bit
0203 else...
012B start at 022B
04


000E: 800373D0
AE reset cycle clock
021B loop to wait...
03 iterate
B400003C03 wait, then return 03
011B start at 021B
//
0203 after waiting...
07 return
04


000F: 800373E0
D2 end stage
05FD0001 current: jal 0001
04


0010: 800373E8 (draw a dusty when unarmed)
9128 ?, not a return type
9332 ?, not a return type
0203
170001000003 stand and face bond, return 03
0203 then...
AE reset cycle counter
//
021B loop to wait...
03 iterate
B400001403 wait, then return 03
011B start at 021B
//
0203 after waiting...
0A0042000000140410 animation: 0042
//
021C loop while moving...
03 iterate
2F03 if not moving, return 03
011C start at 021C
//
0203 when not moving...
BF00CD060000000003 weapon: dusty, model: dusty; return 03
0203 if loaded...
140021000003 aim at bond, return 03
0203 then...
160001000003 stand and fire at bond dramatically, return 03
0203 then...
//
021E loop while moving...
03 iterate
2F03 if not moving, return 03
011E start at 021E
//
0203 when not moving...
060002 set return: 0002
05FD0008 current: jal 0008
04


0011: 80037444
23FD something about current guard...
05FD0001 current: jal 0001
04

80037070 00000000
8003707C 00000001
80037084 00000002
800370DC 00000003
8003713C 00000004
8003717C 00000005
800371B4 00000006
80037250 00000007
8003720C 00000008
80037280 00000009
800372D0 0000000A
80037224 0000000B
80037248 0000000C
800372E0 0000000D
800373D0 0000000E
800373E0 0000000F
800373E8 00000010
80037444 00000011
00000000 00000000
 
View user's profile Send private message Send e-mail
Wreck
Administrator
Administrator


Joined: 14 Dec 2005
Posts: 7198
Location: Ontario, Canada

 PostPosted: Thu Mar 23, 2006 8:05 pm    Post subject: Reply with quote Back to top

WOW. Surprised
This is going to take me atleast two or three days to digest. I knew you had a great understanding of this game, but God damn. Although many of us will have little to no idea what to do with this, we thank you for taking the time to share it. Smile
 
View user's profile Send private message Visit poster's website
Wreck
Administrator
Administrator


Joined: 14 Dec 2005
Posts: 7198
Location: Ontario, Canada

 PostPosted: Fri Mar 24, 2006 3:18 am    Post subject: Reply with quote Back to top

I've been going over as much as I can and have already learned a lot.
I was even able to find something new about the clipping data as I was looking it over.

tile header format:
pp pp pp rr !- -- #- --
[-] these values have no identifiable use. (the ones between the ! and #)

They actually control the highlighting colouration of objects and characters in the area. It's not as noticable in most areas, except for on certain doorways and the helipad in Bunker ii. Remember how it lights everything up in a yellowish glow? Certain doors also use this data to look different. Take the doors in the ventshaft for instance. They use the same image, but their colour is modified by the room pointer.

Basic RGB system...
First half-byte is the amount of red (0-F).
Second half-byte is the amount of green (0-F).
Third half-byte is the amount of blue (0-F).

It was pretty neat when I saw a purple Boris. So I kept making changes until he turned red. Then I knew what it had to be. I ended up watching four purple guards blow themselves up with a grenade, then land feet away from the computer desk in their original colour. Razz


Last edited by Wreck on Fri Mar 24, 2006 4:01 pm; edited 1 time in total
 
View user's profile Send private message Visit poster's website
zerojett
00 Agent
00 Agent


Joined: 01 Feb 2006
Posts: 434
Location: Saskatchewan, Canada.

 PostPosted: Fri Mar 24, 2006 12:19 pm    Post subject: Reply with quote Back to top

wow...
so...
this is what ive been waiting for...
_________________
zerojett lives on!
 
View user's profile Send private message Send e-mail Visit poster's website MSN Messenger
zoinkity
007
007


Joined: 24 Nov 2005
Posts: 1687

 PostPosted: Thu Mar 30, 2006 9:45 am    Post subject: Reply with quote Back to top

Hah! Thanks! Never would have guess that's an RGB modifier.
_________________
(\_/) Beware
(O.o) ze
(> <) Hoppentruppen!
 
View user's profile Send private message Send e-mail
Wreck
Administrator
Administrator


Joined: 14 Dec 2005
Posts: 7198
Location: Ontario, Canada

 PostPosted: Thu Mar 30, 2006 10:35 am    Post subject: Reply with quote Back to top

I didn't think it was, either.
It's a good thing I was standing near the area when I made the modifications to memory, otherwise I'd never have noticed the change. Which is almost exactly what happened when I hacked the Blood Mode Code. If I hadn't shot the guy and noticed red splashing, we may still only think enemies sparked when hit with bullets.
 
View user's profile Send private message Visit poster's website
zoinkity
007
007


Joined: 24 Nov 2005
Posts: 1687

 PostPosted: Fri Mar 31, 2006 8:24 am    Post subject: Reply with quote Back to top

Did you know, every single image has a defined impact type? It's crazy, but if you jump to the image offset table the value before the offset tells you what impact is assigned to it. For instance:
(example is made up, BTW)
01 000350
whatever image this is is 350 bytes large and uses impact #1.

That's what those crazy tables were used for that you found. I'll upload the docnext time when I have the disk with me.
_________________
(\_/) Beware
(O.o) ze
(> <) Hoppentruppen!
 
View user's profile Send private message Send e-mail
PaD
Agent
Agent


Joined: 20 Dec 2005
Posts: 72
Location: Datteln, Germany

 PostPosted: Mon Apr 17, 2006 11:36 am    Post subject: Reply with quote Back to top

wow... I finally understood it all in the first post, and I'll do some experiments soon.
respect on this!

something I was wondering:
zoinkity wrote:
01 doors
-see seperate list

where?


EDIT:
instead of just "00 08" for a weapon type, I often find "04 08", does this mean anything?
 
View user's profile Send private message MSN Messenger ICQ Number
Wreck
Administrator
Administrator


Joined: 14 Dec 2005
Posts: 7198
Location: Ontario, Canada

 PostPosted: Mon Apr 17, 2006 12:21 pm    Post subject: Reply with quote Back to top

The value prior to the object type often represents the current state of the object. If you shoot it, you'll leave a bullet hole. The value keeps track of how many holes it has in it. Turning it back to "00" will wipe away the mess. Sort of like Mr. Clean, only stronger and less expensive. It's best to use an 8-bit code to modify the object type. If you set the preceeding value to something, odds are that no bullet holes will be displayed after taking damage. The "04" you've mentioned may be another indicator to the object type that it is being held in someone's hand. Either way, the type is the only important part, the previous value will set itself once the stage has loaded.
 
View user's profile Send private message Visit poster's website
Erevan
Secret Agent
Secret Agent


Joined: 04 Feb 2006
Posts: 336
Location: Saguenay, Canada

 PostPosted: Tue Apr 18, 2006 9:02 am    Post subject: Reply with quote Back to top

Zoinkity, how did you found out em? And what kinda searches you've done with the Generator Code?
 
View user's profile Send private message Send e-mail
PaD
Agent
Agent


Joined: 20 Dec 2005
Posts: 72
Location: Datteln, Germany

 PostPosted: Tue Apr 18, 2006 10:39 am    Post subject: Reply with quote Back to top

you don't do this using that code generator or search functions... at least I really doubt it.

you take a hex dump (err... yea), check for repetitions of specific formats (like the header, 0100 0003) and try to determine what each bit does (trial and error).

@ Wreck:
OK, that explains why I didn't get any bullet holes on it...
where can I find the door data? (type 01)
might all be useful to know Smile
I'm glad I'm finally finding into this... so i need all possible information Razz
 
View user's profile Send private message MSN Messenger ICQ Number
Display posts from previous:   
Post new topic   Reply to topic    ShootersForever.com Forum Index -> Q-Lab Hacking Department All times are GMT - 8 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Cobalt 2.0 BB theme/template by Jakob Persson.
Copyright © 2002-2004 Jakob Persson


Powered by BB © 01, 02 BB Group

 


Please Visit My Other Sites: GoldenEyeForever.com | GrandTheftAutoForever.com

Got kids? Check out my Dora The Explorer site with games and coloring pages!

Our forums feature Nintendo 64 games, GoldenEye 007 N64 New Maps and Missions, GoldenEye Cheats, N64 Emulator, Gameshark, GoldenEye Multiplayer and more!

[ Privacy Policy ]