The Star Force Map Project

Credits And Disclaimer

You may use anything on this page provided it is for non profit purposes. We are grateful to the MAME team (Star Force Emulation). Without the MAME source the task would have been far more difficult.

If you are able to fill any gaps in the following information I would be most grateful if you could send me the information or a url. I will give you credit for any contributions you are able to make.

All files and links are offered in good faith but with no implied guarantees of any kind. Use at your own risk.

Introduction

This project is mainly about producing the entire Star Force map as a single image (or a handful of smaller images). This project was motivated by many factors. The first reason is one of nostalgia, Star Force is one of my all-time favourite shoot-em-ups. Secondly, its map strikes me as particularly beautiful with a great outer space theme. Thirdly the game is perfectly emulated in MAME and this provided a huge kick start thanks to MAME's generous open source philosophy. Finally I wanted to tribute this wonderful mid 1980's game classic and document my findings in the interests of the preservation of some arcade game history.

This page chronicles some of the steps involved in generating the map and some other interesting facts about Star Force. I am pleased that several long held secrets of the game have been found in recent times.

Finally the full map is produced at the end of this page.

Getting Started

The first step was to find out as much as possible about the hardware and memory map used by the game. The MAME source helped out quite a bit here. The driver written by Mirko Buffoni produced a lot of this information including what rom held what information. MAME 0.36 Final source and roms were used for this entire project. The Star Force driver is part of the senjyo driver. The most relevant source was in drivers/senjyo.c and vidhrdw/senjyo.c.

Noting the game uses the Z80 family of cpu's was a welcome relief. MAME's video hardware emulation code contained some juicy titbits, especially in the video callback routines.

It became apparent that the many levels of indirection in MAME was going to make it awkward to display the map directly from MAME. A separate program in C was thus created for that purpose.

Routines were introduced for drawing 8x8 and 16x16 blocks of what were to become the building blocks for the tiles making up the game map. A bitmap generator was coded in to output the results. This program evolved over the next couple of weeks to become the Star Force Map Generator.

It was decided early on in the piece to only worry about mapping out the background and to ignore the enemy sprites completely for this project.

Counting The Tiles

It was decided it would help if we knew how many tiles made up the entire map - i.e. what the map height was. The width was already known to be 20 tiles across. The horizontal view window is only 16 though. It was required to know how often sections repeated, when the colours seemed to change and so on. Counting up the tiles through the entire game seemed like a job suitable for me - the trusty sidekick.

I started counting, and counting, and recounting, and rechecking. In the final analysis I got the floating continent background numbers correct but was a bit out with the star background.

I found it useful commenting out all but the background tilemap draw of interest in the senjyo_vh_screenrefresh function in MAME's vidhrdw/senjyo.c. In this way only one background would be displayed so I could devote my attention to it.

While I was doing this, in order to prevent my eyes glazing over I also took down some other statistics on the locations of visible and hidden items. Here are my Star Force Observations.

The Memory Map And Assembler

Once again the mighty MAME came to the rescue. The RAM region $8000-$9000 is of particular interest. Here are some Star Force memory map notes.

Some may be interested in the Star Force Z80 Assembler code. The code has been commented at a few relevant places.

The Star Force Map Generating Program

The tough nut was finally cracked! By integrating all known information together, tile map and colour palettes were finally worked out. I am delighted to be able to present Wayne's Map Code for the building the Star Force map.

In Wayne tradition the code is not heavily commented. This is typical of all of Wayne's source - he believes that 'less is more' where commented code is concerned. In his own words "The code IS the comment".

The program was compiled in VC++. You will need to place the unzipped Star Force roms (v0.36) in a folder called data off where you are running the program from. No roms are provided anywhere on this site - go somewhere else to find them. Naturally you will have to compile the source before you can run the program.

You can supply 0, 1 or 2 parameters on the command line to specify the fragment of the map you would like to generate. The parameters specify the number of rows of tiles you'd like to generate a map of. Tiles in Star Force are 16x16. Some typical examples are running the program are:

map_starforc         - Generates the entire Star Force map from tile row 0 to tile row 3328
map_starforc 123     - Generates the portion of the map from tile row 0 to tile row 123    
map_starforc 123 456 - Generates the portion of the map from tile row 123 to tile row 456  

Some comments on the dimensions are pertinent. The tile parameters must be between 0 and 3328 (the full map dimensions). If you generate the full map beware that several image viewers have trouble displaying bitmaps with any dimension larger than 32KB (pixels) or 2KB (tiles). The dimensions of the full map are (20 x 3328 tiles) or (320 x 53248 pixels). Notice that the y dimension is very large. See my comments below.

As an aside note that in the game the x dimension is only 18 (14 visible and 2 to the far left and 2 to the far right). The two outermost edge tile columns don't seem to be displayed in the game (not in MAME's emulation anyway)!

The Map

Here it is! The map is rather large - about 1.3 MB. I have converted the unwieldy large bitmap into lossless compressed PNG format. It turns out that many Windows based image viewers are unable to display the large single map (as a bitmap at 320 x 53248 x 256) for absolutely pathetic reasons. For instance, you can see all 8 smaller pieces of the bitmap all at once but try putting them all together into one and the viewer bites the dust! Offending viewers under Win98 include Paint (it crashes Windows), ACDSee 2.4 (the height dimension goes negative with heights above 32KB) and Paint Shop Pro 6.02 (it thinks the bitmap is invalid - it's not). The full map does load under Windows 2000 MS Paint though. If you have trouble you can can recompile Wayne's source code above and create several smaller pieces of the map and view each piece.

You can either grab the zipped up Star Force Map or you can view the map here. Note it takes some time to load (1.3 MB in size) and you'll get to exercise the vertical scroll bar quite a bit since the map has dimensions 320 x 53248 x 256.

What Remains To Be Done?

Uh! A heck of a lot actually. I'd like to see the animated sprite images (enemies, buildings, hidden objects) generated at some stage. I'd also like to see a map with all the secret spots in the game uncovered. There are still several unanswered questions. All this will have to wait for another time.