Star Goose
Star Goose is a vertically scrolling shooter with spacecraft that hover along a surface rather than flying freely, allowing slopes, pits and the like to affect gameplay. It also features rudimentary 3D segments when the ship enters a resource or inter-level tunnel. On each level, all six crystals must be collected before the exit tunnel to the next level is unlocked.
There exist both EGA and CGA rendered versions which each have their own separate file sets. Unless otherwise noted the info here is based on the EGA version.
Atari ST and Amiga versions also exist, with the Atari ST version seemingly being the original.
File formats
The following file formats are used by this game.
Filename | Format | Details |
---|---|---|
*.x | Raw EGA data | Each of these is a 320x200 image. Intro.x is a graphic-planar title screen background, all others are stored in linear format and are the sprite/tile sheets for the game. ! Since there is no metadata stored in the graphic files, all information pertaining to dividing the sprite sheets, determining transparent colors, etc. must reside in the EXE. |
Level Data
The level data begins at offset 0x9F06. There are eight levels, each of which is divided into three sub-sections. The data for each level is three tile layouts followed by three sprite arrays. It appears that every segment and sprite array has a hardcoded offset in the EXE; it is not problematic for them to be made shorter, but expanding or shifting sections would probably require deeper hacking.
Tile layout
Maps are built of rows of 12 tiles, and the ordering of rows in the file goes from bottom to top (so simplistic readings of the level data may be inverted on the Y axis compared to how they appear in the game). Bytes within a row are ordered left-to-right. Every segment of a level is 64 rows long.
A simple compression scheme is used where each byte of data may define up to four identical tiles. The most significant two bits of the byte serve as a repetition counter whose value is one less than the number of times the tile should be repeated (range is 0 to 3). The remaining six low-order bits are the tile index. It is therefore possible to define a full row of the map in as little as 3 bytes.
To get the tile index, AND the byte with 0x3F.
To get the repetition count, AND the byte with 0xC0, shift down by 6, and add 1.
Tile index values (once separated from repeat count) follow. Slopes are described in reference to their downward direction.
- 0x00 - void pits which the ship can fall into and be destroyed
- 0x01 - flat terrain
- 0x02 - north slope
- 0x03 - south slope
- 0x04 - east slope
- 0x05 - west slope
- 0x06 - northeast slope
- 0x07 - northwest slope
- 0x08 - southeast slope
- 0x09 - southwest slope
- 0x0A - flat down to northeast slope
- 0x0B - flat down to northwest slope
- 0x0C - flat down to southeast slope
- 0x0D - flat down to southwest slope
- 0x0E - southwest slope down to flat
- 0x0F - southeast slope down to flat
- 0x10 - northwest slope down to flat
- 0x11 - northeast slope down to flat
- 0x12 - north slope meets east slope (in)
- 0x13 - north slope meets west slope (in)
- 0x14 - south slope meets east slope (in)
- 0x15 - south slope meets west slope (in)
- 0x16 - south slope meets west slope (out)
- 0x17 - south slope meets east slope (out)
- 0x18 - north slope meets west slope (out)
- 0x19 - north slope meets east slope (out)
- 0x1A - tunnel exit (southwest quarter)
- 0x1B - tunnel exit (southeast quarter)
- 0x1C - tunnel exit (northwest quarter)
- 0x1D - tunnel exit (northeast quarter)
- 0x1E - tunnel entrance (southwest quarter)
- 0x1F - tunnel entrance (southeast quarter)
- 0x20 - tunnel entrance, fuel sign (northwest quarter)
- 0x21 - tunnel entrance, fuel sign (northeast quarter)
- 0x22 - tunnel entrance, ammo sign (northwest quarter)
- 0x23 - tunnel entrance, ammo sign (northeast quarter)
- 0x24 - tunnel entrance, shield sign (northwest quarter)
- 0x25 - tunnel entrance, shield sign (northeast quarter)
- 0x26 - level exit tunnel (southwest quarter)
- 0x27 - level exit tunnel (southeast quarter)
- 0x28 - level exit tunnel (northwest quarter)
- 0x29 - level exit tunnel (northeast quarter)
Note that not all tiles are the same size graphically, and the game may offset its drawing position according to the type of the previous tile. Therefore, certain types of tiles must be paired with the correct counterparts or else glitchy-looking visuals may be rendered.
Shield, ammo and fuel signs above tunnel entrances are cosmetic for the benefit of the player and do not affect what type of tunnel is entered (which appears to be hardcoded elsewhere)
Sprite array
The sprite arrays are not compressed. Each sprite consists of three bytes: type, X position, and Y position. Note that the furthestmost left and right tiles of each row are partially off-screen half tiles, so there are only 10 valid X positions for a sprite ranging from 0 to 9.
Sprite segments are terminated with a single byte of value 0xFF.
Sprite types are as follows:
- 0x00 - spinning antenna
- 0x01 - mine 1 (blue, round)
- 0x02 - mine 2 (yellow bee)
- 0x03 - turret, machine gun
- 0x04 - turret, artillery
- 0x05 - turret, missile launcher
- 0x06 - missile reload rack (bottom)
- 0x07 - tunnel exit
- 0x08 - tunnel entrance (exits within segment)
- 0x09 - tunnel entrance (to next segment)
- 0x0A - missile reload rack (top)
- 0x0B - enemy ship (dual machine guns)
- 0x0C - enemy ship (single machine gun)
- 0x0D - level exit tunnel
- 0x0E - enemy ship (triple machine guns)
- 0x0F - yellow crystal
- 0x10 - red crystal
- 0x11 - green crystal
- 0x12 - magenta crystal
- 0x13 - blue crystal
- 0x14 - cyan crystal