Jump to content
Sign in to follow this  
StanJr

Hacking ET, HELP!

Recommended Posts

I'm doing a pretty comprehensive graphic overhaul of ET (I expect it to take a LONG time), but I cannot find the 3 phone pieces with Hack o Matic! I can located everything else I need (except maybe the flower), but these elude me thus far.

 

Anybody know where to find them in HOM?

 

Oh, and why are there SO many animations for Elliott and the Scientist??? Egad! :) Better yet does the game Elliott have a different set of walk animations than the completion screen Elliot? :? :? :?

Share this post


Link to post
Share on other sites

The pieces are there, but because of their irregular shape, they're hard to find. It helps to have a printout or image of them handy when looking for them.

 

I found this out the hard way whilst attempting an 'X-Files' hack of ET a while back.

Share this post


Link to post
Share on other sites

Hmm...I couldn't find them even using Dos debug (to search for strings of bytes). Here's a list of values that each piece might be using (straight pixel-to-bit translation):

 

H piece: 90 C8 64 32 3F 32 64 C8 90

S piece: 1F 3E 54 A8 54 2A 15 2A 7C F8

W piece: 3C 60 C0 FE AA FE 0E 38 E0 FF

 

I searched for the standard strings (forward and back), inverse values of the standard strings (forward and back), and a mixed table of the strings (forward and back). That last one would be one row of bytes from each sprite, then the next row, etc. No luck on any of them. There must be some kind of logic routine?

 

EDIT: here's a closeup of those pieces. The purple telephone appears in the game @ 1be0 though.

post-222-1073166277_thumb.jpg

Share this post


Link to post
Share on other sites

Here are a few pics for ya stan! I find it easy to hack by site. So I usually do print screens and draw by eye. There will be one more reply with 2 more pics. Total 7.

 

Cheers :D

post-2800-1073182832_thumb.jpg

post-2800-1073182833_thumb.jpg

post-2800-1073182834_thumb.jpg

post-2800-1073182835_thumb.jpg

post-2800-1073182836_thumb.jpg

Share this post


Link to post
Share on other sites

That's very pretty...but it doesn't really help him find the sprites he's looking for.

neotokeo's got it right I think...you are gonna have to look at a disassembly to find out how those sprites are called up. They don't appear in memory as they appear on the screen, that much I am sure of (otherwise, debug would have found them).

Share this post


Link to post
Share on other sites

That is exactly what I feared Nukey. And the same must go for the flower images as well. Neither one are of vital importance to my hack, but I'd like to change them if I could. I located the complete phone, its pretty obvious. i wonder why those 5 particular objects are different from the rest?? :ponder: :ponder: :ponder:

 

Thanks for the help! :)

Share this post


Link to post
Share on other sites

WELL, I was going to try to take a screen shot of some of my work in progress, but I can't seem to make it work. I'm using z26 emu, but the capture I take is saved as a .pcx file and none of my image programs can read that type of file. :sad: And I've tried to do a screen capture but all I get is a black screen. :sad:

 

So unless someone can enlighten me, I guess you'll all just have to wait. :sad:

Share this post


Link to post
Share on other sites

Here's a tip for finding those missing GFX...

phonePieceLst ($ca) is used to determine what pieces have been collected, right? Perhaps looking around for that variable would help tracking down the routine? Which in turn will help track down the list of data that it is reading?

 

Looking...

Share this post


Link to post
Share on other sites

bd7a, bd80, bd86, and bd8c looks like it might be related somehow...

Called from routine b32b.

 

Still unsure...I'm having trouble looking at what it is supposed to be doing with the data (?)

Is that a bankswitch routine?

Share this post


Link to post
Share on other sites

Ooo...I think I've found something...

Look at $fea8 in the second file. Every successive byte seems to be matching up with EVERY OTHER line in the H piece!

 

Scrambled...eh?

Share this post


Link to post
Share on other sites

Yep...it matches :)

 

    .byte %10010000; $90; |X  X    | $fea8  h1

   .byte %01100100; $64; | XX  X  | $fea9  h3

   .byte %00111111; $3f; |  XXXXXX| $feaa  h5

   .byte %01100100; $64; | XX  X  | $feab  h7

   .byte %10010000; $90; |X  X    | $feac  h9

   .byte %11001000; $c8; |XX  X   | $fead  h2

   .byte %00110010; $32; |  XX  X | $feae  h4

   .byte %00110010; $32; |  XX  X | $feaf  h6

   .byte %11001000; $c8; |XX  X   | $feb0  h8

   .byte %00000000; $00; |        | $feb1  h10

 

The first bytes are the odd numbered lines, the next group are evens :D

 

Here it is unscrambled:

 

    .byte %10010000; $90; |X  X    | $fea8  h1

   .byte %11001000; $c8; |XX  X   | $fead  h2

   .byte %01100100; $64; | XX  X  | $fea9  h3

   .byte %00110010; $32; |  XX  X | $feae  h4

   .byte %00111111; $3f; |  XXXXXX| $feaa  h5

   .byte %00110010; $32; |  XX  X | $feaf  h6

   .byte %01100100; $64; | XX  X  | $feab  h7

   .byte %11001000; $c8; |XX  X   | $feb0  h8

   .byte %10010000; $90; |X  X    | $feac  h9

   .byte %00000000; $00; |        | $feb1  h10

 

There's your H piece 8)

Share this post


Link to post
Share on other sites

and here is the s and w pieces scrambled:

 

    .byte %00011111; $1f; |   XXXXX| $feb2  s1

   .byte %01010100; $54; | X X X  | $feb3  s3

   .byte %01010100; $54; | X X X  | $feb4  s5

   .byte %00010101; $15; |   X X X| $feb5  s7

   .byte %01111100; $7c; | XXXXX  | $feb6  s9

   .byte %00111110; $3e; |  XXXXX | $feb7  s2

   .byte %10101000; $a8; |X X X   | $feb8  s4

   .byte %00101010; $2a; |  X X X | $feb9  s6

   .byte %00101010; $2a; |  X X X | $feba  s8

   .byte %11111000; $f8; |XXXXX   | $febb  s10



   .byte %00111100; $3c; |  XXXX  | $febc  w1

   .byte %11000000; $c0; |XX      | $febd  w3

   .byte %10101010; $aa; |X X X X | $febe  w5

   .byte %00001110; $0e; |    XXX | $febf  w7

   .byte %11100000; $e0; |XXX     | $fec0  w9

   .byte %01100000; $60; | XX     | $fec1  w2

   .byte %11111110; $fe; |XXXXXXX | $fec2  w4

   .byte %11111110; $fe; |XXXXXXX | $fec3  w6

   .byte %00111000; $38; |  XXX   | $fec4  w8

   .byte %11111111; $ff; |XXXXXXXX| $fec5  w10

 

...and unscrambled...

 

    .byte %00011111; $1f; |   XXXXX| $feb2  s1

   .byte %00111110; $3e; |  XXXXX | $feb7  s2

   .byte %01010100; $54; | X X X  | $feb3  s3

   .byte %10101000; $a8; |X X X   | $feb8  s4

   .byte %01010100; $54; | X X X  | $feb4  s5

   .byte %00101010; $2a; |  X X X | $feb9  s6

   .byte %00010101; $15; |   X X X| $feb5  s7

   .byte %00101010; $2a; |  X X X | $feba  s8

   .byte %01111100; $7c; | XXXXX  | $feb6  s9

   .byte %11111000; $f8; |XXXXX   | $febb  s10



   .byte %00111100; $3c; |  XXXX  | $febc  w1

   .byte %01100000; $60; | XX     | $fec1  w2

   .byte %11000000; $c0; |XX      | $febd  w3

   .byte %11111110; $fe; |XXXXXXX | $fec2  w4

   .byte %10101010; $aa; |X X X X | $febe  w5

   .byte %11111110; $fe; |XXXXXXX | $fec3  w6

   .byte %00001110; $0e; |    XXX | $febf  w7

   .byte %00111000; $38; |  XXX   | $fec4  w8

   .byte %11100000; $e0; |XXX     | $fec0  w9

   .byte %11111111; $ff; |XXXXXXXX| $fec5  w10

 

I imagine the flower might be using the same technique.

 

EDIT...it's similar, but even more scrambled. 7 odd lines for all 4 frames, followed by the 7 even lines.

Scrambled:

    .byte %00000000; $00; |        | $f9be  a1

   .byte %00000000; $00; |        | $f9bf  a3

   .byte %00000000; $00; |        | $f9c0  a5

   .byte %00001010; $0a; |    X X | $f9c1  a7

   .byte %00011010; $1a; |   XX X | $f9c2  a9

   .byte %01110110; $76; | XXX XX | $f9c3  a11

   .byte %00111010; $3a; |  XXX X | $f9c4  a13

   .byte %00000000; $00; |        | $f9c5  b1

   .byte %00000000; $00; |        | $f9c6  b3

   .byte %00011100; $1c; |   XXX  | $f9c7  b5

   .byte %00011100; $1c; |   XXX  | $f9c8  b7

   .byte %00100000; $20; |  X     | $f9c9  b9

   .byte %00011100; $1c; |   XXX  | $f9ca  b11

   .byte %00111000; $38; |  XXX   | $f9cb  b13

   .byte %00000000; $00; |        | $f9cc  c1

   .byte %00010100; $14; |   X X  | $f9cd  c3

   .byte %00011100; $1c; |   XXX  | $f9ce  c5

   .byte %00010000; $10; |   X    | $f9cf  c7

   .byte %00011100; $1c; |   XXX  | $f9d0  c9

   .byte %00010000; $10; |   X    | $f9d1  c11

   .byte %00011000; $18; |   XX   | $f9d2  c13

   .byte %00010100; $14; |   X X  | $f9d3  d1

   .byte %00011100; $1c; |   XXX  | $f9d4  d3

   .byte %00010100; $14; |   X X  | $f9d5  d5

   .byte %00001000; $08; |    X   | $f9d6  d7

   .byte %00001100; $0c; |    XX  | $f9d7  d9

   .byte %00001000; $08; |    X   | $f9d8  d11

   .byte %00011000; $18; |   XX   | $f9d9  d13

   .byte %00000000; $00; |        | $f9da  a2

   .byte %00000000; $00; |        | $f9db  a4

   .byte %00000000; $00; |        | $f9dc  a6

   .byte %00001101; $0d; |    XX X| $f9dd  a8

   .byte %00000111; $07; |     XXX| $f9de  a10

   .byte %01000000; $40; | X      | $f9df  a12

   .byte %00001000; $08; |    X   | $f9e0  a14

   .byte %00000000; $00; |        | $f9e1  b2

   .byte %00000000; $00; |        | $f9e2  b4

   .byte %00101010; $2a; |  X X X | $f9e3  b6

   .byte %00001010; $0a; |    X X | $f9e4  b8

   .byte %00100000; $20; |  X     | $f9e5  b10

   .byte %00001010; $0a; |    X X | $f9e6  b12

   .byte %00001000; $08; |    X   | $f9e7  b14

   .byte %00000000; $00; |        | $f9e8  c2

   .byte %00101010; $2a; |  X X X | $f9e9  c4

   .byte %00101010; $2a; |  X X X | $f9ea  c6

   .byte %00010000; $10; |   X    | $f9eb  c8

   .byte %00010010; $12; |   X  X | $f9ec  c10

   .byte %00101000; $28; |  X X   | $f9ed  c12

   .byte %00001000; $08; |    X   | $f9ee  c14

   .byte %00101010; $2a; |  X X X | $f9ef  d2

   .byte %00101010; $2a; |  X X X | $f9f0  d4

   .byte %00001000; $08; |    X   | $f9f1  d6

   .byte %00001010; $0a; |    X X | $f9f2  d8

   .byte %00001000; $08; |    X   | $f9f3  d10

   .byte %00101000; $28; |  X X   | $f9f4  d12

   .byte %00001000; $08; |    X   | $f9f5  d14

 

...unscrambled:

    .byte %00000000; $00; |        | $f9be  a1

   .byte %00000000; $00; |        | $f9da  a2

   .byte %00000000; $00; |        | $f9bf  a3

   .byte %00000000; $00; |        | $f9db  a4

   .byte %00000000; $00; |        | $f9c0  a5

   .byte %00000000; $00; |        | $f9dc  a6

   .byte %00001010; $0a; |    X X | $f9c1  a7

   .byte %00001101; $0d; |    XX X| $f9dd  a8

   .byte %00011010; $1a; |   XX X | $f9c2  a9

   .byte %00000111; $07; |     XXX| $f9de  a10

   .byte %01110110; $76; | XXX XX | $f9c3  a11

   .byte %01000000; $40; | X      | $f9df  a12

   .byte %00111010; $3a; |  XXX X | $f9c4  a13

   .byte %00001000; $08; |    X   | $f9e0  a14



   .byte %00000000; $00; |        | $f9c5  b1

   .byte %00000000; $00; |        | $f9e1  b2

   .byte %00000000; $00; |        | $f9c6  b3

   .byte %00000000; $00; |        | $f9e2  b4

   .byte %00011100; $1c; |   XXX  | $f9c7  b5

   .byte %00101010; $2a; |  X X X | $f9e3  b6

   .byte %00011100; $1c; |   XXX  | $f9c8  b7

   .byte %00001010; $0a; |    X X | $f9e4  b8

   .byte %00100000; $20; |  X     | $f9c9  b9

   .byte %00100000; $20; |  X     | $f9e5  b10

   .byte %00011100; $1c; |   XXX  | $f9ca  b11

   .byte %00001010; $0a; |    X X | $f9e6  b12

   .byte %00111000; $38; |  XXX   | $f9cb  b13

   .byte %00001000; $08; |    X   | $f9e7  b14



   .byte %00000000; $00; |        | $f9cc  c1

   .byte %00000000; $00; |        | $f9e8  c2

   .byte %00010100; $14; |   X X  | $f9cd  c3

   .byte %00101010; $2a; |  X X X | $f9e9  c4

   .byte %00011100; $1c; |   XXX  | $f9ce  c5

   .byte %00101010; $2a; |  X X X | $f9ea  c6

   .byte %00010000; $10; |   X    | $f9cf  c7

   .byte %00010000; $10; |   X    | $f9eb  c8

   .byte %00011100; $1c; |   XXX  | $f9d0  c9

   .byte %00010010; $12; |   X  X | $f9ec  c10

   .byte %00010000; $10; |   X    | $f9d1  c11

   .byte %00101000; $28; |  X X   | $f9ed  c12

   .byte %00011000; $18; |   XX   | $f9d2  c13

   .byte %00001000; $08; |    X   | $f9ee  c14



   .byte %00010100; $14; |   X X  | $f9d3  d1

   .byte %00101010; $2a; |  X X X | $f9ef  d2

   .byte %00011100; $1c; |   XXX  | $f9d4  d3

   .byte %00101010; $2a; |  X X X | $f9f0  d4

   .byte %00010100; $14; |   X X  | $f9d5  d5

   .byte %00001000; $08; |    X   | $f9f1  d6

   .byte %00001000; $08; |    X   | $f9d6  d7

   .byte %00001010; $0a; |    X X | $f9f2  d8

   .byte %00001100; $0c; |    XX  | $f9d7  d9

   .byte %00001000; $08; |    X   | $f9f3  d10

   .byte %00001000; $08; |    X   | $f9d8  d11

   .byte %00101000; $28; |  X X   | $f9f4  d12

   .byte %00011000; $18; |   XX   | $f9d9  d13

   .byte %00001000; $08; |    X   | $f9f5  d14

That's a wrap :)

post-222-1073450495_thumb.jpg

Share this post


Link to post
Share on other sites

Holy Mack-arel! Nukey you are the total cat's pj's. Rock on dude. I would have NEVER found those, especially as jumbled as they were. You are the king of all things.

 

Now let me ask you a few things. Once you found them in the code, how did you unscramble them, and could I hack them in their unscrambled form? How would I go about hacking them? And how would I rescramble them back the way they were?

 

Dude you are totally invaluable. I cannot thank you enough. :) :) :) :)

Share this post


Link to post
Share on other sites

What I would do is just make a quick chart of all the frames in the unscrambled form...and off to the side, write down the scrambled sequence (literally write down A1, A3, A5, etc.). Then when you are hacking with HOM (or putting the .byte values into the disassembly), follow that sequence and glance back to the bitpattern on the left to see what pattern (or value) you need for that line. A bit slow, but it keeps things from getting confusing. Unfortunately, you can't just copy and paste an unscrambled list into the disassembly (because the byte addresses need to be in sequence). All the correct addresses are shown above (in HOM, the first nybble "f" will appear as "1"). So you could even just look at the addresses and scroll around as you hack them in.

 

-or-

 

The routine that fetches the data could be altered so that they no longer need to be scrambled in memory (and relocateable, if you happen to add/subtract program lines to the assembly). The way that it appears to be fetching them is that the program checks the bits of that variable to determine if the piece should be on-screen and then "builds" the address that it needs to load from. At least that is how it looks to be doing it. I was about to lose it (*see "help"), so it's beyond my scope to try to alter that.

Share this post


Link to post
Share on other sites

Color table of the phone pieces (follows the same scrambled pattern):

    .byte %11111110; $fe; |XXXXXXX | $fec6  pc1

   .byte %11111010; $fa; |XXXXX X | $fec7  pc3

   .byte %11110110; $f6; |XXXX XX | $fec8  pc5

   .byte %11110100; $f4; |XXXX X  | $fec9  pc7

   .byte %11110010; $f2; |XXXX  X | $feca  pc9

   .byte %11111100; $fc; |XXXXXX  | $fecb  pc2

   .byte %11111000; $f8; |XXXXX   | $fecc  pc4

   .byte %11100110; $e6; |XXX  XX | $fecd  pc6

   .byte %11100100; $e4; |XXX  X  | $fece  pc8

   .byte %11100010; $e2; |XXX   X | $fecf  pc10

 

Color table of the flower (each byte=2 scanlines)...not scrambled

    .byte %11111110; $fe; |XXXXXXX | $f9f6 fc1/2

   .byte %11111110; $fe; |XXXXXXX | $f9f7 fc 3/4

   .byte %11111100; $fc; |XXXXXX  | $f9f8 fc 5/6

   .byte %01001010; $4a; | X  X X | $f9f9 fc7/8

   .byte %01001000; $48; | X  X   | $f9fa fc9/10

   .byte %01000110; $46; | X   XX | $f9fb fc11/12

   .byte %01000100; $44; | X   X  | $f9fc fc13,14

Share this post


Link to post
Share on other sites

Ok, so using the addresses in the Disassembly I can located the corresponding addresses in HOM, but I have to enter the new values scrambled. That sounds simple enough.

 

And thanks for the color table! :) :) :)

Share this post


Link to post
Share on other sites

Color tables for Elliot and the other humans can be found just below each group of bitmap frames (dunno why there are two Elliots). A color table for the ship is just below that sprite bitmap. ET is just monocolored, so I didn't find that one yet. Probably hard-coded into the routine that displays him, since it's just one shade. Search for a value being saved to the player color that is loaded as an immediate (#) value. That should go for the icons and other single-color objects too...I think.

Share this post


Link to post
Share on other sites

Could be a number of reasons. I think the most likely one is that it's an easy way to conserve ram (i.e. a single bit in a single ram location determines if that piece is already held PLUS that bit assists in locating the data in rom to display). Though I'm not positive about that...I'm no wizard when it comes to decyphering programs :(

Share this post


Link to post
Share on other sites
Color tables for Elliot and the other humans can be found just below each group of bitmap frames (dunno why there are two Elliots).  

 

yeah, I found that out entirely by accident! :D :D :D I'm not sure about the two Elliots either, but if you alter either one it has an effect on the Elliot graphic generated. I also fail to see the need for 2 separate sequences for ET's neck raising (eye open, and eye closed) or why the scientist needs 10 different walk animations while the FBI agent only gets 8. This whole code is screwy. :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...