Jump to content
IGNORED

Hacking ET, HELP!


StanJr

Recommended Posts

Well, Howard did post that it was rushed...and that it was intended to have more to it. Perhaps some things were put together at the last minute? That might explain why it needs entire frames of the neck raising (when 1 sprite would have accomplished this - just by having the program "ignore" parts of the neck until raised)...as well as the ET character's general lack of color compared to other sprites. Did anyone else work on this to finish it up, I wonder? That might explain the different coding styles between them.

Hmm... :? And the scientist and agent -could- have shared bitmaps to free up a very large amount of memory simply by switching color tables. That might be something to consider if you want to make a REALLY extensive hack. You could add in more graphics/program routines.

Link to comment
Share on other sites

Let's not get TOO froggy, Nukey. I'm lucky to be able to hack the colors and sound with a LOT of help from my friends. Baby steps. Sure, I'd LOVE to do all the great stuff you speak of, but I'm not a jedi yet. Baby steps. Let me see how well I do with this color and sound stuff, then we'll talk about re-coding this bastard. :D :D :D

 

Thanks again for all your help. I look to get back into hacking this thing today, had to take a few days off for needless illenss. :x

 

Here is that Teaser I promised earlier. Please bear in mind this is a work in progress and at this point many things are left untidy. :)

post-409-1073576345_thumb.jpg

Link to comment
Share on other sites

Here's some of the pointers in the program's first bank that indicate where those various data tables begin in the second bank...

 

;(GFX table pointers)
;high byte--  stored to $af

Lbda3:

   .byte $ff ;($0da3) FBI

   .byte $fa ;($0da4) Elliot

   .byte $fe ;($0da5) Scientist

   .byte $fe ;($0da6) H piece

   .byte $fe ;($0da7) S piece

   .byte $fe ;($0da8) W piece

   .byte $f9 ;($0da9) Flower

   .byte $fe ;($0daa) Ship

   .byte $fb ;($0dab) Yar1

   .byte $fb ;($0dac) Yar2

   .byte $ff ;($0dad) Indy
;low byte (odd lines, 1st table, etc.)--  stored to $ae

Lbdae:

   .byte $5a ;($0dae) FBI, table 1

   .byte $68 ;($0daf) Elliot, table 1

   .byte $00 ;($0db0) Scientist, table 1

   .byte $a8 ;($0db1) H piece, odd # lines

   .byte $b2 ;($0db2) S piece, odd # lines

   .byte $bc ;($0db3) W piece, odd # lines

   .byte $be ;($0db4) Flower, odd # lines

   .byte $d0 ;($0db5) Ship, table 1

   .byte $ec ;($0db6) Yar1, table 1

   .byte $f4 ;($0db7) Yar2, table 1

   .byte $e9 ;($0db8) Indy, table 1


;low byte (even lines, 2nd table, etc.)--  stored to $b0

Lbdb9:

   .byte $92 ;($0db9) FBI, middle frame?

   .byte $b4 ;($0dba) Elliot, table 2

   .byte $46 ;($0dbb) Scientist, middle frame?

   .byte $ad ;($0dbc) H piece, even # lines

   .byte $b7 ;($0dbd) S piece, even # lines

   .byte $c1 ;($0dbe) W piece, even # lines

   .byte $da ;($0dbf) Flower, even # lines

   .byte $d0 ;($0dc0) Ship, table 2

   .byte $ec ;($0dc1) Yar1, table 2

   .byte $f4 ;($0dc2) Yar2, table 2

   .byte $e9 ;($0dc3) Indy, table 2






;(color table pointers)
;high byte--   stored to $b3, $b5, $f2

Lbdc4:

   .byte $ff ;($0dc4) FBI

   .byte $fa ;($0dc5) Elliot

   .byte $fe ;($0dc6) Scientist

   .byte $fe ;($0dc7) H piece

   .byte $fe ;($0dc8) S piece

   .byte $fe ;($0dc9) W piece

   .byte $f9 ;($0dca) Flower

   .byte $fe ;($0dcb) Ship

   .byte $fd ;($0dcc) Yar1

   .byte $fd ;($0dcd) Yar2

   .byte $fd ;($0dce) Indy


;low byte--  stored to $b2

Lbdcf:

   .byte $ca ;($0dcf) FBI, 1st color table

   .byte $a9 ;($0dd0) Elliot, 1st color table

   .byte $8c ;($0dd1) Scientist, 1st color table

   .byte $c6 ;($0dd2) H piece, odd # lines

   .byte $c6 ;($0dd3) S piece, odd # lines

   .byte $c6 ;($0dd4) W piece, odd # lines

   .byte $f6 ;($0dd5) Flower, 1st color table

   .byte $e0 ;($0dd6) Ship, 1st color table

   .byte $d1 ;($0dd7) Yar1, 1st color table

   .byte $d1 ;($0dd8) Yar2, 1st color table

   .byte $30 ;($0dd9) Indy, 1st color table


;low byte--  stored to $b4

Lbdda:

   .byte $d8 ;($0dda) FBI, 2nd color table

   .byte $f5 ;($0ddb) Elliot, 2nd color table

   .byte $9a ;($0ddc) Scientist, 2nd color table

   .byte $cb ;($0ddd) H piece, even # lines

   .byte $cb ;($0dde) S piece, even # lines

   .byte $cb ;($0ddf) W piece, even # lines

   .byte $f6 ;($0de0) Flower, 2nd color table

   .byte $e0 ;($0de1) Ship, 2nd color table

   .byte $d1 ;($0de2) Yar1, 2nd color table

   .byte $d1 ;($0de3) Yar2, 2nd color table

   .byte $30 ;($0de4) Indy, 2nd color table

 

...so if you wanted the FBI agent and scientist to share the same graphics from the FBI agent tables, you could use HOM to change lines $0da5 to value $ff, $0db0 to value $5a, and $0dbb to $92 (saving all that memory dedicated to the scientist GFX tables). The HOM address locations are in the parenthesis. The color could still be unique between them if you leave those pointers alone. An interesting thing to try would be to alter that Elliot2 pointer so it points at Elliot1's values...that would save all that memory dedicated to the second set of Elliots. Also interesting is that the phone pieces DON"T NEED to be colored the same...you could create seperate tables for each piece (just hack them in and alter the color pointers to use your new tables). Unusual that the game has a provision for TWO colors on single-colored objects (like Indy...the 1st/2nd pointers are identical).

 

Still haven't found ET's color :(

 

Here's a table of sprite sizes (# scanlines):

;sprite sizes-- stored to $8c

Lbde8:

   .byte %00001110; $0e; |    XXX | ($0de8)  FBI size

   .byte %00001011; $0b; |    X XX| ($0de9)  Elliot size

   .byte %00001110; $0e; |    XXX | ($0dea)  Scientist size

   .byte %00000101; $05; |     X X| ($0deb)  H piece size/2

   .byte %00000101; $05; |     X X| ($0dec)  S piece size/2

   .byte %00000101; $05; |     X X| ($0ded)  w piece size/2

   .byte %00000111; $07; |     XXX| ($0dee)  Flower size/2

   .byte %00010000; $10; |   X    | ($0def)  Ship size

   .byte %00001000; $08; |    X   | ($0df0)  Yar1 size

   .byte %00001000; $08; |    X   | ($0df1)  Yar2 size

   .byte %00001010; $0a; |    X X | ($0df2)  Indy size

The Flower and phone pieces are /2 because that is the length of the seperate odd/even tables.

Link to comment
Share on other sites

HM...changing Elliot's 2nd GFX low byte pointer to match the 1st seems to work OK (freeing up HOM locations $1ab4-$1af4)...but changing the FBI agent's seems to result in partially garbled graphics for just some of the frames (?). Anyway, that's enough room to add in seperate color tables for each of the phone pieces (and maybe alternating colors for the Yar/Indy objects).

 

EDIT: Like this...I altered the table pointers to give the phone pieces, Yar, and Indy seperate alternating colors. And it only took 24 bytes out of the space I saved not using 2 seperate bitmap groups for Elliot.

et_color.zip

Link to comment
Share on other sites

Don't worry, Nukey, I'm listening to you, I'm just working on hacking the phone pieces and flower right now. I've got the hang of the scrambling and unscrambling. Again, I owe you big time. I'll catch up to you soon, in maybe a century of two. ;) :) :) :) :)

Link to comment
Share on other sites

D'oh! ET's color values are identified in Thomas' disassembly (along with the playfield colors). Search the file for ETcolortab, PFcolortab, and BKcolortab.

 

*smacks himself in the forehead

 

BTW Distella didn't disassemble this routine for some odd reason. It should have, there are plenty of JSR's pointing at it (?)

 

Lbf80:

   cmp    $a5             ; 3

   beq    Lbf8d           ; 2³

   cmp    $a6             ; 3

   beq    Lbf8d           ; 2³

   cmp    $a7             ; 3

   beq    Lbf8d           ; 2³

   clc                    ; 2



Lbf8d:

   rts                    ; 6

 

(the 12 bytes just above the IncEnergy subroutine in the first file)

Link to comment
Share on other sites

BTW Distella didn't disassemble this routine for some odd reason.  It should have, there are plenty of JSR's pointing at it (?)

That's probably my fault. I missed that piece of code when I created the DiStella configuration files by hand. This is necessary for bankswitched games where each bank disassembled separately, because DiStella's automatic code detection doesn't work then anymore.

Link to comment
Share on other sites

Oh...I thought that Distella could pick them out if they are in the same bank :P

 

Nevermind :D

 

3 more tables decyphered:

 


Lbe48:  ;low byte of ET raising neck frames (no eye)

   .byte %00001001; $09; |    X  X| $be48

   .byte %00010011; $13; |   X  XX| $be49

   .byte %00011110; $1e; |   XXXX | $be4a

   .byte %00101010; $2a; |  X X X | $be4b

Lbe4c:  ;low byte of ET raising neck frames (with eye)

   .byte %01000000; $40; | X      | $be4c

   .byte %01001010; $4a; | X  X X | $be4d

   .byte %01010101; $55; | X X X X| $be4e

   .byte %01100001; $61; | XX    X| $be4f





Lbe68:  ;Height of ET sprite when neck is changing

   .byte %00001010; $0a; |    X X | $be68

   .byte %00001011; $0b; |    X XX| $be69

   .byte %00001100; $0c; |    XX  | $be6a

   .byte %00001101; $0d; |    XX X| $be6b

 

That might be useful trying to recode the neck routine to be more efficient (to save all that space wasted on seperate bitmaps)

Link to comment
Share on other sites

That might be useful trying to recode the neck routine to be more efficient (to save all that space wasted on seperate bitmaps)

:idea: I am afraid that will not work. Inside the display kernel there usually isn't enough time for the then necessary extra checks.

Link to comment
Share on other sites

Bummer :(

 

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. :)

 

OH! @%$#&@ DUH!! :P

I'll just bet the reason that there are two sets is because of facing left or right. Probably early into programming, he realised that he'd run out of space trying to fit that in for the FBI agent & scientist...so the routine was modified to flip the bytes instead. The extra ET's and Elliots could be just throwbacks to the original routine that hadn't been cleared out. Maybe? :ponder:

 

Might also explain why there is a provision for displaying monocolor objects as multicolored...but not utilized?

Link to comment
Share on other sites

I don't think ET's gameplay is all that boring. Heck its a very simple blend of RPG (go find items, watch your HP, avoid baddies) elements and adventure elements.

Most people get hung up on the pits and falling and what not, and I am working on making that less bothersome.

 

As for why am I hacking it? Heck I don't know, because its there. I mean the gameplay is pretty open and adaptable. MOST of the graphics are easy to find and hack. Other than that, I have no idea why I am hacking ET!!!

:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D

Link to comment
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?

 

Have you heard about the supposed "J" image in ET? Maybe it's time to look for that again now that we know stuff is messed up? Or did Thomas thoroughly debunk that? I can't remember for sure.

Link to comment
Share on other sites

Huh? You mean JD? That has been solved by Stan and Thomas (oddly, at almost the exact same moment...though different methods - Stan by playing, and Thomas by disassembling).

 

-Get 1 candy

-Call Elliot, and let him take it.

-On the screen with many pits, the signature will appear when Elliot is there.

post-222-1073697767_thumb.jpg

Link to comment
Share on other sites

Feel free to change the conditions of revealing it...which is detailed in the disassembly. As long as nobody sneaks a peek at the program code, it might be challenging to discover it again.

 

Here's pointers in bank 1 for the screen graphics bitmaps in bank 2...

;pointers for the foreground GFX
;high byte of both tables

ScrGFX_hi_tab:

   .byte $f8;tall_holes (2 tables) $0d32

   .byte $fb;many_holes (1 table) $0d33

   .byte $fb;jaggy_holes (2 tables) $0d34

   .byte $fb;equal_holes (1 table) $0d35

   .byte $f8;forest_screen (2 tables) $0d36

   .byte $fd;town_screen (2 tables) $0d37

   .byte $fd;well_screen (2 tables) $0d38

   .byte $ff;end_of_level (2 tables) $0d39




;low byte pointing to the bitmap for the sides of the screen
;bitmapped as the left side (flipped for the right side)

ScrGFX_lo_tab1:

   .byte $00;tall_holes1 (-slightly shared- data w/tall_holes2) $0d3a

   .byte $38;many_holes1 $0d3b

   .byte $70;jaggy_holes1 $0d3c

   .byte $00;equal_holes1 $0d3d

   .byte $73;forest_screen1 $0d3e

   .byte $79;town_screen1 (building only...shared data w/well_screen2) $0d3f

   .byte $00;well_screen1 $0d40

   .byte $19;end_of_level1 (blank area only...shared data w/end_of_level2) $0d41




;low byte pinting to the bitmap for the center of screen
;bitmapped as the right side (flipped for the left side)

ScrGFX_lo_tab2:

   .byte $33;tall_holes2 (-slightly shared- data w/tall_holes1) $0d42

   .byte $38;many_holes1 $0d43

   .byte $a0;jaggy_holes2 $0d44

   .byte $00;equal_holes1 $0d45

   .byte $b3;forest_screen2 $0d46

   .byte $40;town_screen2 (building+house) $0d47

   .byte $99;well_screen2 (shared data w/town_screen1) $0d48

   .byte $00;end_of_level2 (shared data w/end_of_level2) $0d49

 

Translation: (HOM location of screen bitmaps in 2nd bank)

tall_holes1 = $1800

tall_holes2 = $1833

many_holes1 = $1b38

jaggy_holes1 = $1b70

jaggy_holes2 = $1ba0

equal_holes1 = $1b00

forest_screen1 = $1873

forest_screen2 = $18b3

town_screen1 = $1d79

town_screen2 = $1d40

well_screen1 = $1d00

well_screen2 = $1d99

end_of_level1 = $1f19

end_of_level2 = $1f00

 

The screens are 64 bytes high...which means that a number of the bitmaps overlap slightly. Add $3f to the above values to see which byte a given screen's data ends (to correct overlap problems). You might need to adjust those pointers if your bitmaps end up too unique. Or you can save memory by creating bitmaps that can be repeated 4 times horizontally (like equal_holes and many_holes do).

Link to comment
Share on other sites

  • 2 weeks later...
Incidentally, here is the thread where Scott made the announcement of locating the signature image in the program...which led to a 1-day race to find the solution to revealing it.  And it all happened right here :)

 

Yikes! I'm going to blame the progression of age... I remember all that. Turns out I was thinking of RotLA, which, last I knew, it was decided that the "J" box doesn't exist, at least not as pictured in EG way back. Sorry about that!

Link to comment
Share on other sites

Just a little question from a newbie: why would someone want to hack E.T? Unless, of course, you're gonna do some improvement on the (extremely boring) gameplay.

 

I would love to play another version of the game if it is just as good or better. E.T. is one of my favorite Atari 2600 games because it's not too hard, not too easy, and it's different each time you play. Sure, the wells are hard to get used to at the start, but you can soon learn to zip around them in no time, even if you are fairly uncoordinated. No problem falling in a well because you can catch yourself before you fall in too far.

 

The sound effects are amazing and did you notice how the enemy walking sound gets louder the closer they get to you? I also like the the colorful graphics, a giant leap from Adventure. Similar to Adventure, The zones and items are in different places every time you play the game. That's called replayability. More Atari 2600 games should have used controlled randomness as this game (and a few others) did. A game where everything is always in the same place is extremely boring because the second time you play, it's about as fresh as used toilet paper.

 

 

Related link:

 

http://www.randomterrain.com/game-design-r...layability.html

Edited by Random Terrain
Link to comment
Share on other sites

Incidentally, here is the thread where Scott made the announcement of locating the signature image in the program...which led to a 1-day race to find the solution to revealing it.  And it all happened right here :)

 

Yikes! I'm going to blame the progression of age... I remember all that. Turns out I was thinking of RotLA, which, last I knew, it was decided that the "J" box doesn't exist, at least not as pictured in EG way back. Sorry about that!

 

It might have at one time (but then removed due to lack of space or whatever). Thomas DID discover that a key graphic was in the game that would have appeared in the temple entrance screen...though there is no way to enable it without removing something else. This suggests that the game had different objectives in an earlier form...maybe the version that the game magazines had a pic of.

Link to comment
Share on other sites

A few bytes :)

 

That's kinda why I am leaning toward the theory that the object WAS once in there (just as the rest of the code that would have enabled the key graphic), but removed for lack of space. It's packed pretty good. I figure that the key is just old data that had not been removed with the rest.

 

Besides that, I dunno why they would want to fake a WIP screen when they could just use the current one of what is finished so far...just to add an object to it that is not going to be in the game.

Link to comment
Share on other sites

weren't REAL screenshots a rarity back in the day? I know MOST of the "screenshots" featured in manuals and catalogs were merely mock-ups. Particularly Atari produced games. Could have just been a mock-up with some confusion as to the final look of the Thief sprite?

Link to comment
Share on other sites

Good point...but ones that were mockups were usually pretty clear (nicely-defined edges and such). The blurry pic suggests that it was an actual game screen that had been photographed. The issue of the key graphic being in the game at all also suggests that the game's plot had been modified to some degree (the extent - we'll never know).

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...