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


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Tue Apr 18, 2006 2:17 pm Post subject: |
 |
|
Zoinkity no doubt has the list somewhere.
Doors include the main beef as the other types, but go deeper into detail. Sound made, single or double, motion speed, amount of time until they close automatically, how they operate (slide, swing, raise), locked or unlocked, etc. They're twice the length of a standard object, allowing you to convert them into two objects, or vice versa. Doors must also be assigned to Advanced presets in order to load into the map. But you can't put them at the regular value. Instead, take a hex calculator and subtract "2710" from the preset ID. It may appear to be a Basic Preset, but doors read it as Advanced. Don't know why they do this, just know that they do.
By the way, I love to take really big hex dumps!  |
|
|
|
|
|
 |
 |
 |
 |
 |
PaD Agent

Joined: 20 Dec 2005 Posts: 72 Location: Datteln, Germany  |
Posted: Wed Apr 19, 2006 2:32 pm Post subject: |
 |
|
I noticed doors had a lot of data (0x100 bytes)... hope zoinkity comes back here some time to provide it
oh I got new questions:
type 0023 = unknown or forgot to list?
example is in Control singleplayer, at 1D38D0 (beginning of the object data btw):
00000023 000000## 0000XXXX PPPPPPPP
## = seems to be counted... first 23 type has 00, second has 01, and so on
XXXX = preset? first has 2024, second 2025, and so on
PPPPPPPP pointer to previous 23 type, first one has just 00000000, second has a pointer to the first, third has a pointer to the second
In Facility singleplayer, they also appear at the beginning of the object data.
in both levels, there are 5 of them.
any idea what they could be?
---------
how do objectives work?
as far as I believe
1. BEGIN objective - object type 0017
2. events to make objective completed?
like in facility, objective #4 (destroy the tanks I believe), there's 10 times a "destory object" object (0019)
3. END objective - object type 0018
oh, and what about 001A and 001B:
what the heck is block data type 9A?
Last edited by PaD on Thu Apr 20, 2006 1:31 am; edited 2 times in total |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Wed Apr 19, 2006 5:02 pm Post subject: |
 |
|
Object type "23" sets up the briefing data in your watch menu. It determines their order and links to the corresponding briefing file. You'll be used to those, since they work like the text strings you've been modifying lately. They're the first item in any mission setup, followed by the objectives.
Return data confuses the hell out of me. It's located in the setup file for any mission, controlling spawning guards and other objective based data. That's what tells the game whether certain objectives, like killing an enemy or protecting a friend, are achieved. Simple changes can reverse the effects. An example would be failing in the Archives when you find Natalya. I've used this data to stop guards from respawing on the Cradle for Valentin's movie project. It's very cool, but very strange. I'd love a better breakdown of it some day. The pointer to it is stored at 80075D14, which will direct you to other pointers in the setup file. Each one links to a different block of information. |
|
|
|
|
|
 |
 |
 |
 |
 |
PaD Agent

Joined: 20 Dec 2005 Posts: 72 Location: Datteln, Germany  |
Posted: Thu Apr 20, 2006 1:27 am Post subject: |
 |
|
hm... I can't find any system.
just for the strings, like "If only I had a gun!!!" in Facility.
it's always AD [text string, zero-ended]
I tried to split it up into formats, like object type data.
20XX, 02XX, 90XX, etc..
though sometimes 20XX are 0xBC long, next time differently.
so that can't be it.
the only thing that really makes sense is that this is some sort of assembly code.
every "spawn information" ends with 04 00, which could be a return command (end of subroutine).
AD [text] would then probably mean something like "print this text to [somewhere]", have you ever seen the text "If only I had a gun" in the game?
if that's true, the question is, what type of assembly is it?
I'll try to find out more.
EDIT:
OK, I just remembered that zoinkity posted something like "assembly" codes in one of his posts here, and yes, that's it!
04 is the end of the routine.
AD is debug text.
makes sense.
Assuming you knew that, what better breakdown would you need?
there's lots of other code in there instead of just objective handling and respawning. for instance in archives, the dialogues are handled by this.
So this is all specific level code.
question is still, how to find out when is what called? |
|
|
|
|
|
 |
 |
 |
 |
 |
zoinkity 007


Joined: 24 Nov 2005 Posts: 1729
 |
Posted: Mon Apr 24, 2006 7:16 am Post subject: |
 |
|
The actions themselves are called by their numerical value, attached either to an object (ie path values, always 04xx) or in the guard action set (usually either 10xx or 00xx, 00xx being the default guard controls stored at some low address I can't remember but probably listed on one of these pages)
I think actual group execution starts with 1000. Can't remember. If you rumage through the old gscentral.com archive and find the bit on "guard spawned in temple" that was an actual example of adding a code loop to multi.
anyway, the one type that are just strings are notes. Nothing else. Still, awfully helpful if you can't figure out what the control is supposed to do.
There are two types of return types. One sets the objective state flags (really just a long value that is dedicated to just the stuff going on in-game) and the other (03xx, was it?) is used for execution loops. Just like in traditional C-programming.
Here's an example (well, should be at least) of a parsed group.
Code: |
bunker 1
objectives:
00000800 datathief failed
00000400 datathief successful
00000200 datathief incomplete
00000100 mainframe hackable
unknown 0401 (9144)
2000 enable path?
05FD0007 guard: use action 0007
04xx terminator + null
unknown 0402 (914C)
2001 enable path?
05FD0007 guard: use action 0007
04xx terminator + null
blue beret guard on alarm 0403 (9154) 3AF44FA4
F300 if already loaded, return 00
BE00FFFD04040000000200 spawn guard on alarm: camoguard, random head, spawn preset
//.bb.hh.cc. FD?, jal 0404, flags: sunglasses, return 00
0200 after guard loaded...
05FD0002 guard: jal 0002
04 terminator
weapon assignment block 0404 (9168)
BF00B8080000000000 weapon: kf7 soviet
0200 check...
C000DD0000000000 hat: blue beret
0200 check...
05FD0002 guard: jal 0002
04xxxx terminator + null
spawn assignment handle 0405 (9184)
8E1A assignment number or something like that
AD68310A00 debug text: h1
05FD0409 guard: use 0409 (equipment assignment block)
04 terminator
spawn assignment handle 0406 (9190)
8E1B assignment value or something like that
AD68320A00 debug text: h2
05FD0409 guard: use 0409 (equipment assignment block)
04 terminator + null
spawn assignment handle 0407 (919C)
8E1C assignment value or something like that
AD68330A00 debug text: h3
05FD0409 guard: use 0409 (equipment assignment block)
04 terminator + null
equipment assignment block 0409 (91A8)3AF44FF8
33 seed random value
35C806 if rand < C8, return 06
72007806 ?, return 06
356408 if rand < 64, return 08
90003C set BA
C000DE0000000000 hat: red beret
0200 if okay...
BF00CD068000000000 weapon: dusty (left)
0200 if okay...
33 seed random value
356400 if rand < 64, return 00
BF00CD069000000000 weapon: dusty (right)
0200 if okay...
0001 continue to 0201
//
0208 2/3rds of the time...
900050 set BA
C000DD0000000000 hat: blue beret
0200 if okay...
BF00C1078000000000 weapon: klobb (left)
0200 if okay...
33 seed random value
356400 if rand < 64, return 00
BF00C1079000000000 weapon: klobb (right)
0200 if okay...
0001 continue to 0201
//
0206 else...
900014 set BA
C000DC0000000000 hat: black beret
0200 if okay...
BF00B8080000000000 weapon: kf7 soviet
0200 if okay...
//
0201 after loading weapons...
05FD040B guard: use 040B
04 terminator
spawned guard behavior 040B (9228)3AF45078
022D
2808 jog to bond
//
0208
03
4C01F427 if not within 01F4 units of bond, return 27
3C2F if within fire range return 2F
0227 when too far away...
2F2E if stopped, return 2E
0108 start at 0208
//
022F if within firing range...
3C06 if within firing range, return 06
0001 continue to 0201
//
022E if stopped...
03 iterate
012D start at 022D
//
0206 when within firing range...
0230
33 seed random value
350A06 if rand < A, return 06
1A01 stand still, return 01
0206 else...
353206 if rand <32, return 06
0E01 step sideways, return 01
0206 else...
353C06 if rand < 3C, return 06
1301 roll along ground, return 01
0206 else...
355006 if rand < 50, return 06
1301 roll along ground, return 01
0206 else...
356406 if rand < 64, return 06
1101 walk while firing, return 01
0206 else...
359606 if rand < 96, return 06
1201 run while firing, return 01
0206 else...
35C806 if rand < C8, return 06
140001000001 fire at bond
0206 else...
150001000001 kneel and fire at bond
//
0201 after the action...
03 iterate
2F06 if not moving, return 06
0101 start at 0201
//
0206 when not moving...
3C06 if within firing range return 06
0008 continue to 0208
0208 which is RIGHT HERE...
03 iterate
012D start at 022D
//
0206 else, if within firing range...
03 iterate
0130 start at 0230
04xxxx terminator + null
Boris action 0408 (92A0) 3AF450F0
0200 until guard spooked...
03
4621 if you shoot, return 21
3B21 if you kill someone in front of guard, return 21
3221 if Bond within sight, return 21
3921 if sawa gunfire return 21
960121 if byte=01, return 21
0100 start at 0200
//
0221 when startled...
AE
0208
03
21 surrender!
4B000F06 if within F units of bond, return 06
B40002581B wait, then return 1B
001F continue to 021F
//
0206 if close to bond...
B40000B406 wait, then return 06
001F continue to 021F
//
0206 after waiting...
4522
001F continue to 021F
//
021B after waiting...
451F
4C00501C return 1C if not within 50 units of bond
3C1F if Bond within firing range return 1F
001C continue to 021C
//
021F if bond that close...
0108 start at 0208
//
021C run away!
9504 unset byte 04
9510 unset byte 10
960106 if byte = 01, return 06
6F201D
6E081D
6E041D
6E021D
6E011D
0108 start at 0208
//
0206 if byte set...
AB0061 advance to preset 0061?
0006 continue to 0206
//
021D if one of many things...
03
33 seed random byte
353206 if rand < 32, return 06
1E2328 walk along path...
001E continue to 021E
//
0206 rand...
1D stop? nah...
021E else...
03
4DFD0064006302 if w/i 100 units of preset 63, return 02
4DFD000F232801 if w/i 15 units of path, return 01
2F01 if stopped return 01
011E start at 021E
//
0201 when stopped...
960125 if byte = 01, return 25
33 seed random byte
4B001406 if w/i 20 units of bond, return 06
4506
011C start at 021C
//
0206
0100 start at 0200
//
0222
960406 if byte = 04, return 06
C3780A display text 780A: Bond: Take me to the mainframe terminal
9404 set byte to 04
0007 continue to 0207
//
0206 if byte set...
B30001E007 ?, return 07
C3780B display text 780B: Programmer: Don't shoot! It's this
0207 or skip above text...
AE
961006 if byte = 10, return 06
9410 set byte to 10
1E0018 walk to preset 0018
0206 if byte set...
//
0223 loop to wait...
03 iterate
2F01 if not moving, return 01
B400012C1B wait, then return 1B
0123 start at 0223
//
0201 if not moving...
4DFD000F001806 if current (boris) w/i 15 units of preset 18, return 06
001B continue to 021B
//
021B if not there yet...
451F
4C00321C if not within 50 units of bond, return 1C
3C1F if bond within firing range, return 1F
//
021F bond still close...
0122 start at 0222 (walk to mainframe)
//
021C not close enough...
011C start at 021C (run away!)
//
0206 at the mainframes...
AE
5B0624 if type 16 #6 not destroyed return 24 (mainframe 1)
5B0724 if type 16 #7 not destroyed return 24 (mainframe 2)
0028 continue to 0228
//
0224 if mainframes okay...
C37812 display text 7812: Bond: Disable the Security!
0D look around self
0228
03
30FD2A if current guard killed, return 2A
31FD2A if bond in room with preset FD, return 2A (or in room with current guard?)
5B0606 if type 16 #6 not destroyed return 06 (mainframe 1)
5B0706 if type 16 #7 not destroyed return 06 (mainframe 2)
0029 continue to 0229
//
0206 hacky hacky...
B400070816 wait, then return 16
B40005DC15 wait, then return 15
B40004B014 wait, then return 14
B400038413 wait, then return 13
B400025812 wait, then return 12
B400012C11 wait, then return 11
0128 start at 0228
//
0211 after 12C cycles...
B400016806 wait, then return 06
C3780E display text 780E: Programmer: Shouldn't take long
0206 skip text after # cycles
0128 start at 0228
//
0212 after 258 cycles...
B400029406 wait, then return 06
C3780F display text 780F: Programmer: Hmm the root password has been changed.
0206 skip text after # cycles
0128 start at 0228
//
0213
B40003C006 wait, then return 06
C37810 display text 7810: Programmer: 'K' 'N' 'O' 'C' 'K' 'E' 'R' 'S'
0206 skip text after # cycles
0128 start at 0228
//
0214
B40004EC06 wait, then return 06
25 sound alarm
9A00000100 return type for objectives: 00000100
9401 set byte to 01
C37811 display text 7811: Programmer: Oops!
0206 skip text after # cycles
0128 start at 0228
//
0215 some deleted text...
B400061806 wait, return 06
0206 skip text after # cycles
0128 start at 0228
//
0216 after 708 cycles...
03
0006 continue to 0206
0116 start at 0216
//
0206 else...
0100 start at 0200
//
0225 enough of this...
0002 continue to 0202
0100 start at 0200
//
0206 get rid of Boris...
03
22 fade away guard
0125 start at 0225
//
0229 you nuked the mainframes...
C37817 display text 7817: Programmer: There's no way I can fix THIS!
9401 set byte to 01
0100 start at 0200
//
022A
05FD0001 current (boris): jal 0001
//
0202
05FD040C current (boris): jal 040C
04 terminator
mainframe activation 040C (9440)
0223
1C0065 jog to preset 0065
//
0203
03 iterate
2F06 if stopped, return 06
4DFD000F006506 if current (boris) within 15 units of preset 65, return 06
0103 start at 0203
//
0206 when stopped...
4DFD000F006501 if current (boris) w/i 15 units of preset 65, return 01
0123 start at 0223
//
0201 when at mainframes...
03
9C0000010006 if bits set, return 06 (mainframe is hackable)
700206 if difficulty secret or lower, return 06
C37813 display text 7813: The programmer has escaped without activating the computer!
9A00000200 return value for objectives: 00000200
//
0206 when mainframe hackable...
22 fade out guard
0101 start at 0201
//
022A
05FD0001 current (boris): jal 0001
04xxxx terminator+nulls
enemy spawn block 1000 (9480) 3AF452D0
AD68656C6C6F00 debug text: hello
0200 return till true...
03 iterate
3705 if alarm triggered, return 05
0100 start at 0200
//
0205 when true...
F4003C4B change music
960101 if byte = 01, return 01
9401 set byte to 01
//
0226 main guard spawn loop...
AE
AD210A00 debug text: !
03
311A06 if bond had entered room with preset 1A, return 06
0027 continue to 0227
//
0206 if in room...
F327 if guard loaded return 27
BD04FF006104050000000106 guard: janus special forces, random head, spawn preset 61, spawn assignment handle 0405, sunglasses, return 06 if valid
0227 if already loaded...
0206 after loading guard...
03
311B06 if bond had entered room with preset 1B, return 06
0027 continue to 0227
//
0206 if in room...
F327 if guard loaded return 27
BD04FF006104060000000106 guard: janus special forces, random head, spawn preset 61, spawn assignment handle 0406, table value 01, return 06 if valid
0227 if already loaded...
0206 after loading guard...
03
311C06 if bond had entered room with preset 1C, return 06
0027 continue to 0227
//
0206 if in room...
F327 if guard loaded return 27
BD04FF006104070000000106 guard: janus special forces, random head, spawn preset 61, spawn assignment handle 0407, table value 01, return 06 if valid
0227
//
0201 loop to wait...
03 iterate
B40004B006 wait, then return 06
0101 start at 0201
//
0206 after waiting...
0126 start at 0226
04xx terminator+null
mainframe incomplete until hackable 1001 (94FC)
0208 loop until in room...
03
311906 if bond had entered room with preset 19, return 06
0108 start at 0208
//
0206 on arrival...
9C0000010009 if mainframe hackable, return 09
9A00000200 return value for objectives: 00000200
//
0209 kill the routine...
03 iterate
0109 start at 0209
04xx terminator+null
datathief 1002 (9518)
0208 loop until true...
03
9C0000010009 if mainframe hackable return 09
5D0606 if used a gadget on 16#06 (mainframe 1), return 06
5D0706 if used a gadget on 16#07 (mainframe 2), return 06
0108 start at 0208
//
0206 untimely gadget use...
593706 if weapon value = datathief, return 06
0108 start at 0208
//
0206 if datathief used...
C37814 display text 7814: The computer has not been activated
0108 start at 0208
//
0209 when hackable...
03
5D0606 if used a gadget on 16#06 (mainframe 1), return 06
5D0706 if used a gadget on 16#07 (mainframe 2), return 06
0109 start at 0209
//
0206 test if datathief...
593706 if weapon value = datathief, return 06
0109 start at 0209
//
0206 if datathief...
C37815 display text 7815: Downloading data...
AE
C400E3FF sound effect: E3 (duration FF=standard?): upload sound
//
0200 loop to wait...
03
5D0624 if used a gadget on 16#06 (mainframe 1), return 24
0224 goody...
5D0724 if used a gadget on 16#07 (mainframe 2), return 24
0224 goody...
B40000F006 wait, then return 06
0100 start at 0200
//
0206 completed...
C37816 display text 7816: Finished Download.
9A00000400 return value for objectives: 00000400
0109 start at 0209
04
test if objective 4 not failed 1004 (9574)
022B
700201 if difficulty <= secret, return 01
0200
03
6D0301 if objective "4: Download data from computer" complete, return 01
5B0627 if type 16 #6 not destroyed, return 27
5B0727 if type 16 #7 not destroyed, return 27
0006 continue to 0206
//
0227 mainframe still alright...
0100 start at 0200
//
0206
C3782E display text 782E: Mainframe Destroyed! Data cannot be downloaded.
9A00000800 return value for objectives: 00000800
//
0201 kill the routine...
03 iterate
0101 start at 0201
04xx terminator+null
end cutscene 1003 (959C)
022B test until true...
03
EB2C on key press return 2C
55006406 if step on preset 64, return 06
012B start at 022B
//
0206 if step on preset...
EC disable player control
D700 disable text boxes
DA fade out for cutscene
//
0208 loop to fade...
03 iterate
DC06 when fade complete return 06
0108 start at 0208
//
0206 after fade...
F106 if objectives complete return 06
05FD000F current: jal 000F
//
0206 objectives are complete, so now the cutscene...
DD Remove Guards
EA
ED hide 1st person display
03
03
03
D50900020000 use camera type 16#09, 00020000?
D9F8006806 bond: move to preset 0068, return 06
0206 when moved...
05F8040A bond: use 040A (intro block)
05FD0001 guard: jal 0001
//
022C on key press...
05FD0001 guard: jal 0001
04 terminator
bond cutscene stuff 040A (95E0)
DB fade in
F400FFFF change music: x theme?
DF08 open door 16#08 (door to surface)
0A006AFFFFFFFF0610 animation: 006A, FFFF, FFFF, 0610
AE
//
020A loop to wait...
03 iterate
B400003C06 wait, return 06
010A start at 020A
//
0206 after waiting...
0A0059FFFFFFFF0610 animation: 0059, FFFF, FFFF, 0610
AE
//
0208 loop to wait...
03 iterate
B40000B406 wait, then return 06
0108 start at 0208
//
0206 after waiting...
DA fade out
//
0209 loop to fade...
DC06 when fade complete return 06
03 iterate
0109 start at 0209
//
0206 when done...
D2 end stage
//
0201 kill the routine...
03 iterate
0101 start at 0201
04 terminator
guard in front of start 040D (9624) 3AF45474
0200 loop until true...
03 iterate
30FD35 if current guard killed, return 35
2F2F if guard not moving, return 2F
0100 start at 0200
//
022F when not moving...
5B0227 if type 16 #2 not destroyed, return 27 (camera)
0031 continue to 0231
//
0227 if camera okay...
3231 if bond in sight, return 31
3E32 if you shot the guard, return 32
3F33 if heard bond, return 33
4634 if you fired at guard, return 34
3A32 if you shoot another guard, return rr
3B32 if you killed someone in front of guard, return 32
0B06 ?, return rr
33 seed random byte
350106 if rand < 01, return 06
06040D set return to 040D
05FD0003 current: jal 0003
//
0206 if rand...
0100 start at 0200
//
0234 if shot at guard...
33 seed random byte
357F31 if rand < 7F, return 31
06040D set return link to start of this block
05FD000A current: jal 000A check around yourself (pesky bullets)
//
0231 when bond in sight...
06040D set return link to start of this block
05FD0006 current: jal 0006 typical aim, shoot bond
//
0232
06040D set return link to start of this block
05FD0008 current: jal 0008
//
0233
06040D set return link to start of this block
05FD000B current: jal 000B
//
0235 guard is dead...
05FD0001 current: jal 0001
04xx terminator+null
GE key uncollectable after objective 1005 (9684) 3AF454D4
0200 until completed objective...
03 iterate
6D0106 if objective "2:copy GE key and leave original" complete, return 06
0100 start at 0200
//
0206 when complete...
A30400100000 set state of 16#04 (GE key): uncollectable
//
0201 kill the routine...
03 iterate
0101 start at 0201
04xxxx terminator+nulls
|
|
|
|
|
|
|
 |
 |
 |
 |
 |
00zero Agent

Joined: 10 Jan 2007 Posts: 32
 |
Posted: Mon Feb 12, 2007 12:36 pm Post subject: |
 |
|
Quote: | zoinkity : "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." |
so, for the life of me, i can't figure out how 0588 07 corresponds to p1416a7. i see that from your table, 07 corresponds to the a7 at the end, but how does 0588 correspond to 1416?
also, i can't find the tile and point data in my dumped file. i have everything from 8000 0000 to 801E FFFF. is it in there somewhere, and is it separated by any headers that denote what level it's for, or does each level load just have a pointer to the appropriate tiles? |
|
|
|
|
|
 |
 |
 |
 |
 |
SubDrag Administrator

Joined: 16 Aug 2006 Posts: 6168
 |
Posted: Mon Feb 12, 2007 1:24 pm Post subject: |
 |
|
You don't need to know, just use the setup editor. I think Zoinkity detailed how it actually was converted somewhere here. |
|
|
|
|
|
 |
 |
 |
 |
 |
00zero Agent

Joined: 10 Jan 2007 Posts: 32
 |
Posted: Mon Feb 12, 2007 1:47 pm Post subject: |
 |
|
i know i don't need to know, but i really really want to know.
if i had that info, i could plot out the actual level, tiles, presets, etc... and have actual scale maps of the levels. the setup editor gives us the presets and locations, but doesn't show them on a map in relation to one another all at one time. Wreck had to do that separately, and it looks like he did it by hand, very tediously. i want to automate it... not because i need it, but because it's fun, i like maps. and who knows, maybe someday, i'll have somthing worthy to contribute to this forum. |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
|
|
|
|
|
 |
 |
 |
 |
 |
00zero Agent

Joined: 10 Jan 2007 Posts: 32
 |
Posted: Mon Feb 12, 2007 5:59 pm Post subject: |
 |
|
ah yes, that clears up the first question... a little embarrassing to find out i was converting 0588 in the wrong direction, and that's why i couldn't figure out how to get 1416. i really am good at hex, really (ha ha)...
so, my second question is, where is the x, y & z coordinate data for each tile or plink? it's gotta be somewhere if it can tell which tile bond is on at any given position... |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
|
|
|
|
|
 |
 |
 |
 |
 |
00zero Agent

Joined: 10 Jan 2007 Posts: 32
 |
Posted: Tue Feb 13, 2007 7:00 pm Post subject: |
 |
|
Wreck, thanks for the tutorials... they're all great, but i've already used them and pretty much have the hang of finding position and room data from bond's position. lots of good info, just not exactly what i was looking for.
i probably wasn't being clear enough, seeing as i'm not that experienced yet, i have a hard time formulating the right questions. my apologies... but with everyone's help, and zoinkity's topic, i've finally found what i was looking for.
i'm not sure that it's a sure thing in every instance, but it's worked every time that i've tested it so far (a couple solo missions and Facility MP 2, 3 & 4 player). here's what i found:
check location 8007B120, record the pointer (80xx xxxx). Add 0x04 to that pointer and go to that location (should only be a few lines later, if that). There you will find all the tile headers and tile point data for the level that is loaded, from the last room to the first in descending order.
i took this info from the Facility and manipulated it in excel to mark the rooms and exact preset locations. i have also created formulas for plotting three dimentional data onto a x-y scatter plot with perspective... hard to explain, so i'll attach a picture. i did find out that excel limits the number of data series to 255, which came about when i tried to load the 2599 tiles into the plot... not going to happen. and if i just add them in one long series, i get some random lines that shouldn't be there. i'll have to figure something out... i hear excel 2007 has a higher capacity for everything, maybe that will help.
anyway... so i randomly chose room 2F, which turns out to be a quarter of the Quad, a room you guys should be pretty familiar with. here's the 2-d and 3-d data plots:
thanks for the help! |
|
|
|
|
|
 |
 |
 |
 |
 |
SubDrag Administrator

Joined: 16 Aug 2006 Posts: 6168
 |
Posted: Tue Feb 13, 2007 8:01 pm Post subject: |
 |
|
Impressive! Matlab shouldn't limit you to 255. It looks like my old clipping viewer, except better heh. |
|
|
|
|
|
 |
 |
 |
 |
 |
00zero Agent

Joined: 10 Jan 2007 Posts: 32
 |
Posted: Wed Feb 14, 2007 9:35 am Post subject: |
 |
|
tell me more about this clipping viewer... i'm interested!
is it available to anyone? |
|
|
|
|
|
 |
 |
 |
 |
 |
|
 |
 |
 |
 |
|
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
|
|
|
 |