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
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. Thunder Offshore RECORDS.PIC.png

Intro image

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

Unused Lenguaje Selection Palette

Unused palette 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

There are some strings in MENUS.EXE refering to a developers console. It's unknown if it can still be reactivated.

A background for the developers console is present in RESOURCE.PAK
RTHUNDER CONSOLE MODE SPAWNED


USE AT YOUR WILL


NO HELP AVAILABLE


CONSOLE: 


PRESS ESC TO QUIT CONSOLE


Cutted Debug Mode

Cheat Functionality

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

CCHEAT
CHEAT MODE ON
CHEAT MODE OFF

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);    
}