ALIEN 8 DATA FORMAT this document contains the data format for alien 8, it is not complete but gives a good start and understanding. for futher information download alien 8 source this may help fill in some of the blanks. should you find any errors with this document or indeed have any information to add, please send me an email. |
Thanks to Neil Walker of retrospec for the work on his Filmation Viewer, and making me finalising all the missing information that I had. |
general memory layout |
start | stop | description | |
5b00 | 6287 | scratch mem | |
6288 | 645F | font | |
6460 | 6468 | room size table | |
6469 | 6287 | locations | |
73C8 | 7407 | block types table 1 | |
7408 | 7417 | block types table 2 | |
7418 | 7518 | block type data | |
7519 | 7534 | background types table | |
7535 | 76E2 | background types data | |
76E3 | 7827 | objects | |
7827 | 792E | sprite offset table | |
792F | A630 | sprite data | |
A631 | D200 | code | |
A797 | A7A6 | light years text | |
A7EA | A8F0 | jump table | |
B51D | B5D4 | frequency table | |
B7F5 | B804 | re-programming text | |
B964 | BA36 | game over text | |
BB14 | BB9D | main menu text | |
B3C5 | B3D6 | audio tune | |
B3D7 | B3F6 | audio tune | |
B3F7 | B436 | audio tune | |
B437 | B450 | audio tune | |
B451 | B4A0 | audio tune | |
BBD0 | B963 | game completed text | |
C32F | C336 | jump table | |
C38F | C396 | jump table | |
C833 | C868 | jump table | |
CA9E | CAA1 | start locations | |
CB5A | CB89 | panel data | |
CBC3 | CBE2 | border data | |
D200 | EA00 | linear screen buffer | |
the game locations are played on a 16*16 grid location movement is implicit by adding to the location no depending on direction ie: +16 north, -16 south, -1 west, +1 east only used locations are stored and must be found from the location list |
all coordinates use the xyz notation as illustrated. blocks are placed on a grid that is 16x16x12 pixels. |
address | 0x6460 | room sizes |
a table consisting of 3 entries for the dimensions of the rooms |
type | offset | description | |
BYTE | 00 | x | |
BYTE | 01 | y | |
BYTE | 02 | z |
address | 0x6469 | locations |
the locations data is a sequential list of screens. they are not in any particluar order and must be search for by reading the first byte ( screen no ) and adding on the next byte ( size ) if it is not the screen required, |
type | offset | description | |||||||||||||||||
BYTE | 00 | screen - id of this screen | |||||||||||||||||
BYTE | 01 | size - bytes in this entry | |||||||||||||||||
BYTE | 02 | room size and attribute |
|||||||||||||||||
attr2 is the colour that the room changes to if completed. ie: cryonaught's freed |
|||||||||||||||||||
BYTE | 03 ... | each entry is a background type until hitting an 0xff | |||||||||||||||||
BYTE | 00 | the following byte is decoded as | |||||||||||||||||
|
|||||||||||||||||||
BYTE | 01 ... | count+1 number of bytes giving the positions of the block | |||||||||||||||||
These coordinates are mapped to the
screen as for x1,y1, and z1 see following... |
|||||||||||||||||||
if the type is 0 then all
the following
blocks have the coordinate byte added to their position ( usually 0x30 ) if the block type is 0x1f then the following blocks types have 0x20 added to them giving access to the last few block types.
these values are added in the block positioning calculation.
|
address | 0x73C8 | block types |
offset table for the block type information |
type | offset | description | |
WORD | 00 | offset |
type | sprite's | description | |
00 |
( control block ) |
||
01 |
1e |
block |
|
02 |
1c |
rhombus block fat bottom |
|
03 |
1d |
rhombus block fat top |
|
04 |
1f |
block mobing up and down |
|
05 |
2c |
block fall on contact |
|
06 |
2d |
block collapse |
|
07 |
2e |
broken egg - killer |
|
08 |
44 |
block slide off north |
|
09 |
45 |
block slide off east |
|
0a |
46 |
block slide off south |
|
0b |
47 |
block slide off west |
|
0c |
2f |
block move up - down while player on |
|
0d |
42 |
block move east/west |
|
0e |
43 |
block move north/south |
|
0f |
48 |
pyramid - killer |
|
10 |
4c |
stars |
|
11 |
56 |
robot mouse moving circuit |
|
12 |
57 |
robot mouse moving east - west |
|
13 |
5e |
robot mouse moving north - south |
|
14 |
49 |
top of broken egg - killer |
|
15 |
4a |
cryonaught looking east |
|
16 |
4a |
cryonaught looking south |
|
17 |
4b |
tubes - killer |
|
18 |
70 |
object dropoff for object 60 ( cylinder ) |
|
19 |
71 |
object dropoff for object 61 ( square ) |
|
1a |
72 |
object dropoff for object 62 ( pyramid ) |
|
1b |
73 |
object dropoff for object 63 ( semi-sphere ) |
|
1c |
74 |
clockwork mouse |
|
1d |
78 |
cylinder |
|
1e |
7c |
remote control robot |
|
1f |
( control block ) allows access to following |
||
20 |
7a |
remote control arrow - west |
|
21 |
7a |
remote control arrow - north |
|
22 |
7b |
remote control arrow - east |
|
23 |
7b |
remote control arrow - south |
|
24 |
80 |
remote control block |
|
25 |
81 |
spikey domed killer |
|
26 |
82 |
land mine - killer |
address | 0x7418 | block type data |
this table is similar to the same table in knight lore only one byte less per entry |
type | offset | description | |||||||||||||||||
BYTE | 00 | sprite | |||||||||||||||||
01 | width (x) | ||||||||||||||||||
02 | depth (y) | ||||||||||||||||||
03 | height (z) | ||||||||||||||||||
04 |
h = flip horizontal 4 = draw - this is internal but seems to always be set m = movable/moving 0-3 - seem to be block type dependent |
||||||||||||||||||
keep reading an entry until the sprite is zero. all these sprites make one entity | |||||||||||||||||||
address | 0x7519 | background types |
offset table for the backgrounf type information |
type | offset | description | |
WORD | 00 | offset |
type | description | |
00 |
door north |
|
01 |
door east |
|
02 |
door south |
|
03 |
door west |
|
04 |
west wall long full |
|
05 |
north wall long full |
|
06 |
west wall long with oening |
|
07 |
north wall long with opening |
|
08 |
thin Room ( long west, short north with opening ) |
|
09 |
thin Room ( long north, short west with opening ) |
|
0a |
high door east |
|
0b |
high door south |
|
0c |
high door platform east |
|
0d |
high door platform south |
address | 0x7535 | background type data |
type | offset | description | |||||||||||||||||
BYTE | 00 | sprite | |||||||||||||||||
01 | x | ||||||||||||||||||
02 | y | ||||||||||||||||||
03 | z | ||||||||||||||||||
04 | width (x) | ||||||||||||||||||
05 | depth (y) | ||||||||||||||||||
06 | height (z) | ||||||||||||||||||
07 |
h = flip horizontal 4 = draw - this is internal but seems to always be set |
||||||||||||||||||
keep reading an entry until the sprite is zero. all these sprites make one entity |
address | 0x76E3 | objects |
type | offset | description | |
BYTE | 00 | object graphic no - randomly changed at runtime | |
BYTE | 01 | x - start x position ( range = 0x46 - 0xba ) | |
BYTE | 02 | y - start y position ( 0x40 - 0x70 steps of 0x0c ) | |
BYTE | 03 | z - start z position ( range = 0x46 - 0xba ) | |
BYTE | 04 | screen - start screen | |
BYTE | 05 | cur_x - current x position | |
BYTE | 06 | cur_y - current y position | |
BYTE | 07 | cur_z - current z position | |
BYTE | 08 | cur_scr - current screen | |
address | 0x7827 | sprite offset table |
offset table for the sprite data |
type | offset | description | |
WORD | 00 | offset |
address | 0x792f | sprite data |
data for sprites |
type | offset | description | |
BYTE | 00 | width | |
BYTE | 01 | height | |
BYTE | 03... | image data | |
( size = (width* height)*2 ) [ 0 ... height ] [ 0 ... width ] |
|||
BYTE | 00 | image | |
BYTE | 01 | mask | |
StartLocations:
CA9E DB 013h,04Eh,088h,0D7h