Alien 8 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

size attr2 attr1
7 6 5 4 3 2 1 0

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
block count
7 6 5 4 3 2 1 0
BYTE 01 ... count+1 number of bytes giving the positions of the block
z y x
7 6 5 4 3 2 1 0

These coordinates are mapped to the screen as
x = (x*16) + (x1*8) + 72
y = (y*16) + (y1*8) + 72
z = (z*12) + (z1*4) + screenz

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.
 
z1 y1 x1
7 6 5 4 3 2 1 0

 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
v h 5 4 3 m 1 0
7 6 5 4 3 2 1 0
v =  flip vertical
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
v h 5 4 3 2 1 0
7 6 5 4 3 2 1 0
v =  flip vertical
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