We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!

User:Juanmv94/Temp

From The Cutting Room Floor
< User:Juanmv94
Revision as of 00:24, 6 April 2018 by Juanmv94 (talk | contribs) (Starting with: Thunder Offshore)
Jump to navigation Jump to search

Title Screen

Thunder Offshore

Developers: NoriaWorks Entertainment
Platforms: DOS
Released in EU: 1997


DevTextIcon.png This game has hidden development-related text.
GraphicsIcon.png This game has unused graphics.
SoundIcon.png This game has unused sounds.
TextIcon.png This game has unused text.


Thunder offshore was the last game made by the spanish company NoriaWorks. This futuristic motorboat racing game features advanced 3D graphics and effects for its era.

Unused sounds

Unused images

Placeholder Scores Screen

An early scores screen placeholder image is present in RECORDS.PIC. It has some zeroed scores in it with a different font.

Intro image

The unused image PRESENT.PIC has its own palette PRESENT.PAL and might be an early intro image for the game.

Unused Lenguaje Selection Palette

Unused file IDIOMA.PAL seems to be a palette for a cutted lenguaje selection screen. In the final game, the lenguaje is set during the installation.

Developers Console

Cutted Debug Mode

Cheat Functionality

There are some strings in MENUS.EXE refering to a cheat option.

Unused Text

Wrong File Errors

There are some error messages when some of the game files are incorrect or incomplete. These error messages can't be displayed unless we alter the game CD content.

Developers Messages

There are some rude developer messages in MENUS.EXE. Is unknown if there's a way to show them in-game.


Talk

The game is splitted in various EXE files:

  • SETENV.EXE is the first to be run, and just sets the environment.
  • MENUS.EXE is open at every menu of the game, at every video mode
  • JUEGO[64][M].exe is open when a race starts. 64 means 640x480 mode, and M means mortal effects.

All this executables are switched by the THUNDER.BAT batch file. They all need at least one parameter to be run, or a message saying to run THUNDER.BAT will appear. The executables doesn't read the parameters, and they communicate through temporary INI files in the game folder.

Game sounds are stored in the DIGITAL folder from the CD in DFX format. These files are wave files that can be renamed to WAV to be played. There are more sounds in the GRA and GRA640 folder from the CD in WAV format. Some of them are duplicated.

Game graphics are stored in the packed RESOURCE.PAK file. They are all palletized 256 color images:

  • PAL files are the palette files. Their 256 colors are organized with one byte per channel as RGBRGBRGB... and their range is from {hex|0x00} to {hex|0x3F}
  • PIC files are the uncompressed raw image files. They start with 2 int16 values with the width and height of the image followed by the raw data.
  • SPR files have the uncompressed raw sprites.

Here is an util I made to extract the PIC files into palletized BMP files:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {

    FILE *pal,*img,*out;
	char outn[128];
    short dim[2];
	int dimt;
	
	char bm1[]={0x42,0x4d};
	int bm2;
	char bm3[]={0x00,0x00,0x00,0x00,0x36,0x04,0x00,0x00,0x28,0x00,0x00,0x00};
	int bm4[2];
	char bm5[]={0x01,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xE8,0x03,0x00,0x13,0x0B,0x00,0x00,0x13,0x0B,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00};
    
	int i;
	char curcol[4];
	char *rawimg;
	
    if (argc!=3 || !(img=fopen(argv[1],"rb")) || !(pal=fopen(argv[2],"rb"))) {
        printf("Error. Uso: %s imagen.pic paleta.pal\n",argv[0]);
        return (EXIT_SUCCESS);
    }
    fread(dim,2,2,img);
    printf("Dimensiones imagen: %dx%d",dim[0],dim[1]);
	dimt=dim[0]*dim[1];
	bm2=dimt+1078;
	bm4[0]=dim[0];
	bm4[1]=dim[1];

	strcpy(outn, argv[1]);
	strcat(outn, ".bmp");
    if (!(out=fopen(outn,"wb+"))) {
        printf("Error: compruebe permisos de escritura");
        return (EXIT_SUCCESS);
    }
    fwrite(bm1,2,1,out);
	fwrite(&bm2,4,1,out);
	fwrite(bm3,12,1,out);
	fwrite(bm4,2,4,out);
	fwrite(bm5,28,1,out);
	
	for (i=0;i<256;i++)
	{
		curcol[3]=0;
		curcol[2]=fgetc(pal)<<2;
		curcol[1]=fgetc(pal)<<2;
		curcol[0]=fgetc(pal)<<2;
		fwrite(&curcol,4,1,out);
	}
	
	rawimg=malloc(dimt);
	for (i=(dimt-bm4[0]);i>=0;i-=bm4[0])
	{
	fread(rawimg+i,bm4[0],1,img);
	}
	fwrite(rawimg,dimt,1,out);

    return (EXIT_SUCCESS);    
}