1997 game graphic files

Started by
10 comments, last by Zlodo 9 years, 2 months ago

Hello,

I am currently trying to extract graphics from an old game produced in 1997 (Swing / US: Marble Master). So far, I am absolutly clueless.

Below is one of the files (BLATT.RES). I guess that this file holds several sprites for an animated graphic. The first few bytes appear several times in the files and could indicate the beginning of a sequence.

Maybe one of you knows how sprites were stored in 1997 or recognized the file signature.

One more thing, before I post the file: There is another file type .SET which most likely holds several .RES files. Within the .SET I see the same "14 00 04 0F" byte arrays. There is also a file called SHOWSET.EXE which renders the .SET files, but not the .RES files. In the same folder I find a file named MAKE.SET, which is not a graphics file, but contains the following text: (I hope that helps)


PROJECT   = showset

OBJS    = showset.obj graphasm.obj graphik.obj newalloc.obj

LIBS    = mss.lib vidlib.lib

CC    = wcc386

#CFLAGS    = -zp4 -5r -fp5 -w4 -s -Iinc -zq -d2

CFLAGS    = -zp4 -5r -fp5 -w4 -s -Iinc -zq

AS    = tasm

ASFLAGS   = /l /c /m2 /zi /mx /D_DOS4GW /D__DOS__ /D__FLAT__ /t

.c.obj    : .AUTODEPEND
      @set _ARGS=$(CFLAGS) $^&.c
      @echo   Compiling $*.c
      @$(CC) @_ARGS /fo=$*.obj

.asm.obj  : .AUTODEPEND
      @echo  Assembling $*.asm
      @$(AS) $(ASFLAGS) $*.asm,,$*.LST

$(PROJECT).EXE  : $(OBJS) $(PROJECT).lnk
      @echo.
      @echo Linking $(PROJECT).EXE
      @wlink @$(PROJECT).lnk



# Link response file
#

$(PROJECT).lnk  : makefile
      @echo.
      @echo Creating Link-File
      @echo.
      @echo name $(PROJECT).EXE >$(PROJECT).LNK
      @echo system dos4g >>$(PROJECT).LNK
#      @echo DEBUG ALL >>$(PROJECT).LNK
      @echo option map,dosseg,caseexact,quiet,stack=64k >>$(PROJECT).LNK
      @for %i in ($(OBJS)) do @echo file %i >>$(PROJECT).LNK
      @for %i in ($(LIBS)) do @echo library %i >>$(PROJECT).LNK

BLATT.RES


14 00 04 0F 16 00 09 00 6B 00 00 00 03 00 00 00
09 00 09 00 03 00 15 00 04 57 03 00 15 00 61 2E
03 00 13 00 E2 41 62 36 03 00 01 00 03 00 0C 00
A0 26 A0 26 81 26 21 2F 01 2F C1 2E 42 42 E1 31
03 00 02 00 80 15 03 00 04 00 E0 08 20 09 40 11
A0 15 00 1E 00 1A 60 22 A0 26 A1 2A C0 2A C0 2A
80 2A 02 4A 81 2D 80 15 03 00 02 00 03 00 02 00
60 11 00 0D C0 08 E0 0C 00 0D 20 11 80 15 A0 19
20 22 40 22 80 2A A0 2A 60 26 60 2A 22 3E A1 39
E0 21 03 00 03 00 03 00 03 00 00 11 20 0D 00 0D
00 0D 20 11 80 15 A0 19 E0 1D C0 1D 20 22 00 22
A0 29 C1 3D 40 1D A0 1D 03 00 04 00 03 00 05 00
C0 08 A0 08 00 11 40 15 20 11 00 11 40 15 60 25
C1 35 41 2D C0 10 03 00 06 00 03 00 08 00 60 04
60 04 60 04 60 04 03 00 0A 00 14 00 04 0F 15 00
08 00 6D 00 00 00 03 00 00 00 0B 00 0A 00 03 00
14 00 C1 31 03 00 13 00 22 42 03 00 01 00 03 00
06 00 80 15 00 1E 60 22 20 1E C1 2A E1 2A 01 2F
A1 26 E1 2A 01 2F C0 2E E2 39 E2 39 03 00 02 00
20 0D 20 0D 00 0D 20 0D 60 11 40 11 80 15 E0 1D
60 26 40 22 C1 2A 01 2F 01 2F E1 2E C0 2A 80 2A
41 36 E1 39 20 19 03 00 02 00 03 00 01 00 C0 08
00 0D 00 0D 20 11 20 11 60 15 C0 19 00 1E 60 26
80 26 C0 2E E1 2E A0 2A 60 2A A1 3D 61 29 60 1D
03 00 03 00 03 00 02 00 C0 0C E0 0C 40 15 80 15
60 15 A0 19 E0 1D 40 26 40 26 20 22 20 26 C3 42
83 4A A1 31 03 00 05 00 03 00 04 00 C0 0C 40 19
80 19 80 19 60 19 A0 1D E1 2D 01 36 02 42 C1 2D
A0 1D 03 00 06 00 03 00 07 00 E0 20 61 2D A1 2D
E2 31 80 25 03 00 09 00 14 00 04 0F 16 00 08 00
75 00 00 00 03 00 00 00 0B 00 0A 00 03 00 15 00
40 21 03 00 14 00 80 29 03 00 01 00 20 0D 60 11
80 11 40 11 40 11 80 15 80 15 E0 19 40 22 C1 2A
42 33 E1 2A 82 37 41 33 A1 2A 81 26 C0 26 40 22
C0 29 A3 3A 03 00 02 00 03 00 01 00 E0 08 60 15
C0 19 60 11 C0 19 C0 19 E0 1D 20 1E 81 26 01 2F
42 33 41 33 21 33 01 2F C0 2A A0 2A A0 2D E1 31
03 00 03 00 03 00 02 00 60 04 A0 19 A0 19 A0 19
A0 19 C0 19 41 26 81 2A 01 33 01 2F 21 33 C0 2A
80 26 20 26 A1 39 40 25 03 00 04 00 03 00 03 00
C0 0C 40 19 C0 1D 00 1E C0 1D 20 22 40 26 61 26
40 26 60 26 60 26 A0 31 01 36 40 25 03 00 05 00
03 00 04 00 C0 10 20 19 E1 2D C0 21 60 21 60 21
80 25 E1 29 E1 3D C1 39 81 2D 03 00 07 00 03 00
06 00 A0 25 E1 31 80 29 E2 35 02 36 E1 31 A0 21
40 19 03 00 08 00 14 00 04 0F 13 00 08 00 76 00
00 00 03 00 00 00 0D 00 0B 00 03 00 12 00 40 15
E0 1D 40 22 20 1E E0 19 61 22 20 1E A1 2A 02 33
C3 3F C3 43 C3 3F A2 3B 62 37 C1 2A 60 22 03 00
02 00 40 21 E0 10 A0 08 C0 19 41 22 20 1E 61 22
61 26 C1 2A 02 33 83 3B 62 37 42 37 41 33 21 33
A0 26 60 26 E0 25 60 29 C0 0C 03 00 01 00 60 04
E0 10 40 19 20 22 61 26 61 26 61 2A A1 2A 01 33
21 33 01 33 21 33 C0 2E 80 2A 40 2D A1 21 60 04
03 00 02 00 03 00 01 00 80 04 41 1D 62 32 20 26
40 26 61 26 81 2A 61 26 A1 2A A1 2A 80 2A 20 26
60 29 E1 29 03 00 04 00 03 00 01 00 60 04 80 08
40 15 81 25 22 3A 00 26 80 21 80 21 C0 21 E0 25
60 31 40 2D C0 14 03 00 05 00 03 00 02 00 A0 08
00 11 40 15 A0 1D 22 3E C1 39 81 35 81 35 A0 29
60 25 03 00 07 00 03 00 05 00 00 11 40 15 20 15
E0 0C 03 00 0A 00 14 00 04 0F 10 00 08 00 68 00
00 00 03 00 00 00 0E 00 0B 00 C2 2A 03 00 0F 00
C0 0C 43 37 63 37 43 37 22 33 A3 3B E4 47 E5 4B
E4 4B E4 4F C3 3F 82 37 03 00 03 00 60 1D 80 04
E2 31 82 2E 42 37 84 3F C4 3F C4 3F C4 43 C3 3F
A3 3F 42 33 21 2F E0 2E E0 21 40 1D 00 11 60 04
C0 0C E2 39 C1 2E 42 37 63 3B 43 37 22 37 42 37
01 2F E1 2E E0 2E 80 26 40 19 C0 10 03 00 01 00
80 08 E0 0C 81 21 E1 2D 81 2E C1 2E A1 2E 61 2A
81 2A 81 2A C0 2E 80 26 80 19 A0 08 03 00 02 00
A0 08 E0 0C 20 11 80 19 E1 35 C0 2D 00 22 E0 21
E0 1D E0 1D 60 15 00 11 60 04 03 00 03 00 03 00
01 00 C0 0C 00 11 40 15 A0 1D A0 21 80 29 40 2D
60 29 C0 14 60 04 03 00 05 00 03 00 03 00 00 11
00 11 20 11 E0 10 03 00 09 00 14 00 04 0F 0F 00
08 00 67 00 00 00 03 00 00 00 0D 00 0B 00 03 00
03 00 A2 2E A1 26 03 00 0A 00 03 00 03 00 21 21
64 4B E6 53 E6 57 E6 57 E6 57 E6 4F E5 53 C3 43
C0 21 40 21 03 00 01 00 03 00 02 00 C0 08 20 11
C1 29 E5 53 E5 4F E5 4F E5 4B 83 3B 42 37 E1 32
60 1D A0 1D 60 1D 03 00 01 00 C0 0C C0 0C 00 11
C1 2D 61 32 82 3B A4 43 23 37 22 37 C1 2E 80 21
00 15 A0 08 80 04 03 00 01 00 C0 0C C0 0C 40 15
80 19 81 31 61 2A C1 2E 81 2A 81 2A 60 2A C0 1D
C0 0C 80 04 03 00 01 00 A0 08 A0 08 C0 0C 20 11
60 19 C0 25 60 29 C0 25 A0 19 40 15 A0 08 60 04
03 00 03 00 03 00 01 00 A0 0C E0 0C 00 11 40 15
A0 1D A0 1D E0 14 A0 08 60 04 60 04 03 00 04 00
03 00 05 00 C0 0C 60 04 03 00 08 00 14 00 04 0F
0F 00 08 00 5C 00 00 00 03 00 00 00 0D 00 0B 00
03 00 05 00 83 3B 03 00 09 00 03 00 04 00 C0 08
82 3A C3 3F E3 43 63 3F C0 25 03 00 05 00 03 00
03 00 00 0D 00 0D 80 25 42 37 C4 43 41 2E E0 25
20 21 20 2A 21 2F 03 00 02 00 03 00 01 00 00 0D
00 0D 00 0D 00 11 C0 25 C0 25 21 37 E0 21 20 15
C0 0C E0 0C 60 26 60 22 40 22 C0 08 E0 0C E0 0C
00 0D 40 15 A0 1D 40 25 20 26 40 15 C0 0C 80 04
80 04 80 04 A0 04 03 00 01 00 A0 08 A0 08 E0 0C
00 11 40 15 80 19 20 11 C0 0C A0 0C A0 0C 60 04
60 04 03 00 03 00 03 00 02 00 A0 08 A0 08 80 08
80 08 60 04 60 04 60 04 80 08 03 00 05 00 03 00
08 00 40 04 03 00 06 00 14 00 04 0F 0E 00 07 00
52 00 00 00 03 00 00 00 0D 00 0B 00 03 00 06 00
20 19 40 2A 03 00 06 00 03 00 05 00 C0 29 A0 1D
60 2D A1 2E 41 2F 03 00 04 00 03 00 03 00 40 11
40 11 60 1D 60 15 40 21 41 22 42 33 21 2F E1 2A
03 00 02 00 03 00 01 00 E0 08 20 11 00 11 20 11
60 19 A0 08 60 04 60 04 61 26 A1 2A A0 26 A0 26
A0 26 A0 08 C0 08 20 11 20 11 80 19 40 15 E0 0C
80 04 60 04 80 04 00 0D 40 11 C0 19 A0 15 03 00
01 00 A0 08 E0 0C 80 08 C0 0C 80 08 80 08 40 04
60 04 60 04 80 04 60 04 03 00 02 00 03 00 04 00
40 04 60 04 80 08 40 04 60 04 60 04 03 00 04 00
14 00 04 0F 0E 00 07 00 53 00 00 00 03 00 00 00
0D 00 0B 00 03 00 08 00 E0 19 03 00 05 00 03 00
03 00 A0 25 40 29 00 11 20 0D 20 0D E0 21 A0 26
03 00 04 00 03 00 02 00 40 15 00 11 C0 10 C0 08
40 11 40 11 00 26 A1 26 C0 26 80 22 03 00 02 00
C0 08 E0 0C 60 15 E0 10 60 04 40 04 60 04 40 15
A0 2D A1 2A 20 22 A0 2A 60 22 03 00 01 00 20 11
00 11 00 11 C0 08 80 08 60 04 60 04 A0 08 60 15
E0 1D E0 1D 40 22 40 1E 60 22 03 00 02 00 A0 08
80 08 60 04 40 04 60 04 60 04 60 04 80 08 A0 08
00 11 03 00 02 00 03 00 04 00 40 04 60 04 60 04
60 04 60 04 60 04 03 00 04 00 14 00 04 0F 0E 00
07 00 5B 00 00 00 03 00 00 00 0D 00 0B 00 03 00
01 00 60 26 80 2D 03 00 07 00 40 1E 03 00 03 00
03 00 01 00 20 19 A0 10 03 00 04 00 60 11 40 11
40 11 E0 21 03 00 03 00 03 00 01 00 00 11 A0 04
80 04 20 0D 80 15 60 11 80 15 40 11 20 22 60 22
A0 26 03 00 02 00 00 11 00 0D C0 08 80 04 80 04
E0 0C 80 15 80 15 80 19 E0 29 80 26 60 22 40 22
03 00 01 00 03 00 01 00 C0 0C A0 08 60 04 80 08
A0 08 A0 08 20 11 E0 20 40 26 40 22 00 1E 20 1E
60 1E 03 00 03 00 40 04 60 04 60 04 60 04 80 08
80 08 20 11 00 11 80 19 C0 19 03 00 01 00 03 00
04 00 60 04 40 04 60 04 60 04 60 04 60 04 60 04
03 00 03 00 14 00 04 0F 0E 00 08 00 57 00 00 00
03 00 00 00 0D 00 0A 00 80 29 40 21 03 00 0C 00
00 15 80 04 03 00 0C 00 E0 0C 80 04 03 00 05 00
E0 19 A0 15 80 11 60 11 E0 25 03 00 02 00 20 11
A0 04 C0 04 E0 08 60 11 80 15 A0 15 A0 19 A0 15
60 15 C0 19 00 22 03 00 02 00 03 00 01 00 A0 08
60 04 E0 08 00 0D 40 11 60 15 C0 19 80 15 60 19
E0 25 20 22 60 22 03 00 01 00 03 00 02 00 60 04
E0 0C E0 0C E0 0C 20 11 80 19 A0 19 60 29 40 22
00 1E 40 1E 40 1E 03 00 03 00 60 04 80 08 80 04
A0 08 A0 08 E0 14 80 19 E0 1D C0 19 E0 19 00 1E
03 00 04 00 40 04 40 04 60 04 80 08 60 04 80 04
E0 0C 03 00 03 00 14 00 04 0F 0F 00 09 00 5E 00
00 00 03 00 00 00 0C 00 09 00 A0 2D 03 00 0E 00
E0 10 60 04 03 00 0D 00 C0 0C 80 04 03 00 0D 00
03 00 01 00 80 04 03 00 02 00 40 11 80 15 03 00
06 00 60 11 00 1E 03 00 01 00 03 00 01 00 A0 08
C0 08 40 11 40 11 60 11 C0 19 00 1A E0 19 00 1E
20 1E A0 15 E0 19 E0 1D 03 00 01 00 03 00 02 00
60 04 E0 0C 40 11 00 0D 60 15 60 15 C0 19 C0 19
A0 19 A0 19 80 25 40 22 03 00 01 00 03 00 03 00
80 08 E0 0C 00 0D 00 0D 80 19 A0 19 C0 19 C0 1D
40 1D 20 22 E0 19 20 1A 03 00 04 00 60 04 A0 08
80 08 A0 08 E0 0C 40 15 40 19 E0 1D 80 15 C0 19
C0 19 03 00 06 00 60 04 60 04 60 04 60 04 60 04
80 04 03 00 03 00 14 00 04 0F 10 00 0A 00 59 00
00 00 03 00 00 00 0B 00 08 00 80 29 03 00 0F 00
20 15 03 00 0F 00 E0 0C 80 04 03 00 0E 00 03 00
01 00 A0 08 03 00 0E 00 03 00 01 00 C0 08 40 11
03 00 0D 00 03 00 02 00 C0 08 40 11 40 0D 60 11
60 11 A0 15 20 1E 60 22 40 22 60 22 40 22 00 1A
C0 19 80 2A 03 00 03 00 E0 0C 20 11 40 11 60 15
80 15 A0 19 A0 19 E0 1D 00 1E 20 22 C0 1D 80 29
00 1E 03 00 04 00 A0 08 E0 0C E0 0C 40 15 60 15
C0 19 E0 1D C0 19 C0 1D 40 21 E0 1D E0 19 03 00
05 00 40 04 80 08 A0 08 A0 08 E0 0C 40 15 E0 14
C0 18 80 19 60 15 03 00 01 00 03 00 07 00 60 04
60 04 60 04 60 04 60 04 03 00 04 00 14 00 04 0F
12 00 0A 00 5E 00 00 00 03 00 00 00 0A 00 08 00
E0 10 03 00 11 00 20 11 E0 08 03 00 10 00 03 00
01 00 C0 0C 03 00 10 00 03 00 01 00 00 0D 40 11
03 00 0F 00 03 00 02 00 20 0D 80 11 03 00 0E 00
03 00 03 00 20 0D 80 15 E0 15 40 11 60 11 A0 15
E0 19 60 22 C1 2A E1 2A 02 2F A1 26 60 22 20 1E
80 22 03 00 04 00 C0 0C 20 0D 60 11 60 15 A0 19
C0 19 C0 1D 00 1E 40 26 C1 2E 40 22 00 1E 80 26
A0 1D 03 00 05 00 C0 08 A0 08 C0 0C E0 0C 60 15
A0 19 C0 1D E0 1D E0 1D A0 19 60 29 E0 19 03 00
01 00 03 00 06 00 80 08 80 04 80 04 80 08 60 04
A0 08 C0 0C 20 11 E0 0C 03 00 03 00 03 00 08 00
80 08 60 04 60 04 60 04 03 00 06 00 14 00 04 0F
13 00 0A 00 57 00 00 00 03 00 00 00 09 00 08 00
E0 10 03 00 12 00 03 00 01 00 E0 0C 03 00 11 00
03 00 01 00 20 11 03 00 11 00 03 00 02 00 A0 15
03 00 10 00 03 00 03 00 C0 15 03 00 0F 00 03 00
04 00 60 11 60 11 60 11 80 11 80 15 03 00 09 00
A1 26 03 00 05 00 00 0D 20 0D 20 0D 20 11 60 11
C0 19 C0 19 00 1E 61 26 C1 2A 41 33 A1 2A 41 22
00 26 03 00 06 00 80 04 E0 0C C0 08 C0 08 C0 08
C0 04 00 0D 40 11 C0 19 61 26 A0 19 80 1D 03 00
01 00 03 00 07 00 60 04 80 04 60 04 60 04 60 04
80 04 80 04 80 04 60 04 03 00 03 00 03 00 09 00
60 04 60 04 60 04 60 04 60 04 03 00 05 00 14 00
04 0F 13 00 0A 00 55 00 00 00 03 00 00 00 09 00
08 00 C0 0C 03 00 12 00 60 19 03 00 12 00 03 00
01 00 A0 15 03 00 11 00 03 00 01 00 60 15 03 00
11 00 03 00 02 00 40 11 03 00 10 00 03 00 03 00
40 11 60 11 03 00 0E 00 03 00 04 00 E0 0C 00 0D
00 0D 20 0D E0 08 00 0D 20 0D 80 15 E0 19 A1 2A
01 2F 01 2F 42 37 E1 19 E1 1D 03 00 05 00 E0 0C
C0 08 A0 04 80 04 80 04 80 04 A0 04 A0 04 80 04
80 04 80 04 80 04 80 04 03 00 01 00 03 00 07 00
80 08 80 04 60 04 60 04 80 04 60 04 60 04 60 04
60 04 40 04 03 00 02 00 03 00 09 00 40 04 60 04
60 04 60 04 60 04 60 04 03 00 04 00 14 00 04 0F
14 00 09 00 50 00 00 00 03 00 00 00 09 00 09 00
20 19 03 00 13 00 C0 1D 03 00 13 00 03 00 01 00
20 1E 03 00 12 00 03 00 02 00 C0 19 03 00 11 00
03 00 03 00 40 0D 60 11 03 00 0F 00 03 00 04 00
E0 0C 00 0D C0 08 E0 04 A0 04 A0 04 A0 04 03 00
06 00 A0 04 60 00 60 04 03 00 05 00 20 11 C0 08
C0 08 C0 08 A0 04 C0 08 A0 04 80 04 80 04 80 04
80 04 80 04 60 04 60 00 03 00 01 00 03 00 07 00
A0 08 60 04 A0 08 60 04 60 04 60 04 60 04 60 04
40 00 40 00 60 04 03 00 02 00 03 00 09 00 A0 08
40 00 40 00 60 00 40 04 40 04 60 04 03 00 04 00
14 00 04 0F 16 00 09 00 57 00 00 00 03 00 00 00
09 00 09 00 42 32 03 00 15 00 03 00 16 00 03 00
01 00 C0 15 03 00 14 00 03 00 02 00 40 11 03 00
13 00 03 00 03 00 60 11 40 0D 03 00 10 00 E0 08
03 00 04 00 20 0D E0 08 E0 08 00 09 E0 08 C0 08
C0 08 C0 08 A0 04 C0 08 80 04 80 04 80 00 A0 00
80 04 60 04 80 04 03 00 01 00 03 00 05 00 20 11
E0 08 E0 08 E0 08 A0 08 A0 04 A0 04 80 04 80 04
60 04 60 04 60 04 60 04 60 04 03 00 03 00 03 00
07 00 80 08 80 08 80 04 80 04 60 04 60 04 60 00
60 00 40 00 60 04 60 04 03 00 04 00 03 00 09 00
60 04 60 04 40 00 40 00 40 00 60 04 40 04 03 00
06 00 14 00 04 0F 14 00 07 00 5A 00 00 00 03 00
00 00 0B 00 0B 00 20 1E 03 00 13 00 03 00 14 00
03 00 02 00 00 0D 20 0D 40 0D 20 0D 20 0D 20 0D
40 0D 40 11 20 0D 20 0D E0 08 C0 08 A0 04 E0 08
E0 08 40 0D 40 0D 40 11 03 00 02 00 00 0D 00 0D
20 11 20 0D 00 0D 00 0D E0 0C 00 0D C0 08 C0 08
80 04 A0 08 A0 04 C0 08 C0 08 C0 08 C0 08 03 00
01 00 03 00 03 00 C0 08 E0 0C 00 0D E0 0C E0 0C
C0 08 C0 08 80 04 A0 08 80 04 80 04 80 04 80 04
80 04 03 00 03 00 03 00 05 00 A0 08 A0 08 C0 08
80 08 80 04 60 04 60 04 40 04 60 04 60 04 60 04
03 00 04 00 03 00 07 00 A0 0C 60 04 40 04 40 04
40 04 40 04 80 08 03 00 06 00 14 00 04 0F 12 00
08 00 5A 00 00 00 03 00 00 00 0C 00 0A 00 42 3E
03 00 11 00 62 36 03 00 11 00 03 00 01 00 C0 10
03 00 10 00 03 00 01 00 20 0D 60 11 60 11 60 11
80 11 A0 15 80 11 60 11 20 0D 20 0D 20 0D 20 0D
40 11 80 15 C0 15 C0 19 C0 19 03 00 02 00 20 11
20 11 20 0D 20 11 40 11 20 0D 00 0D 00 0D 00 0D
00 0D 20 0D 40 11 20 0D 40 11 40 15 03 00 01 00
03 00 03 00 00 0D 00 0D 00 0D 00 0D E0 0C E0 0C
E0 0C C0 08 E0 0C E0 0C 00 0D 00 0D A0 08 03 00
02 00 03 00 04 00 80 08 A0 08 C0 0C C0 08 A0 08
A0 08 A0 08 A0 08 A0 08 A0 08 03 00 04 00 03 00
06 00 80 08 80 08 60 04 60 04 60 04 80 08 03 00
06 00 14 00 04 0F 11 00 07 00 54 00 00 00 03 00
00 00 0D 00 0B 00 03 00 01 00 21 36 03 00 0F 00
03 00 01 00 C0 08 03 00 0E 00 21 22 20 11 40 11
A0 15 C0 15 A0 15 C0 15 A0 11 60 11 80 11 80 15
C0 15 00 1E 20 1E 20 22 40 22 80 15 03 00 01 00
03 00 02 00 40 11 60 11 40 11 40 11 40 11 40 11
60 15 60 15 80 15 A0 19 A0 19 A0 19 80 1D 03 00
02 00 03 00 03 00 00 0D 20 11 00 0D 20 11 20 11
20 11 00 11 20 11 40 11 40 15 60 21 03 00 03 00
03 00 04 00 C0 0C C0 08 C0 08 C0 0C E0 0C E0 0C
00 0D C0 0C 00 15 03 00 04 00 03 00 05 00 A0 0C
80 08 A0 08 A0 08 E0 14 40 1D 03 00 06 00 14 00
04 0F 0D 00 07 00 47 00 00 00 03 00 00 00 0E 00
0B 00 03 00 02 00 01 32 03 00 0A 00 03 00 02 00
A0 21 03 00 09 00 61 26 80 15 A0 19 C0 19 A0 15
80 15 C0 15 C0 19 00 1E A1 2A 61 26 60 22 00 1A
C0 19 03 00 01 00 40 11 60 15 60 15 60 15 80 15
A0 19 C0 19 C0 19 C0 19 A0 19 00 11 A0 04 03 00
02 00 20 11 00 0D 20 11 40 11 40 15 40 15 60 15
80 15 E0 0C E0 08 60 00 03 00 03 00 C0 0C C0 0C
C0 0C E0 0C 20 11 20 11 C0 08 00 15 03 00 02 00
03 00 05 00 80 08 A0 08 80 08 80 08 03 00 04 00
14 00 04 0F 0C 00 06 00 46 00 00 00 03 00 00 00
0F 00 0C 00 03 00 03 00 20 21 A0 10 03 00 03 00
20 1E E0 0C 03 00 02 00 03 00 01 00 60 11 20 11
C0 19 E0 19 61 22 20 22 20 1E 60 15 C0 08 03 00
02 00 60 11 40 11 40 15 80 19 C0 19 E0 1D C0 1D
A0 19 00 11 60 00 60 00 03 00 01 00 03 00 01 00
20 11 20 11 40 15 40 11 60 15 40 11 E0 0C 80 04
60 00 80 04 A0 04 03 00 02 00 C0 08 E0 0C E0 0C
20 11 C0 0C E0 14 40 00 40 00 60 00 03 00 01 00
03 00 04 00 80 08 A0 08 C0 10 A0 0C 03 00 04 00
14 00 04 0F 0D 00 07 00 42 00 00 00 03 00 00 00
0E 00 0B 00 03 00 06 00 C0 29 03 00 06 00 03 00
06 00 C0 19 80 04 03 00 05 00 03 00 04 00 00 1E
E0 19 60 15 80 04 80 00 03 00 04 00 40 11 40 11
80 15 A0 19 A0 19 A0 19 20 11 60 04 60 04 80 04
80 04 03 00 02 00 03 00 02 00 40 11 40 11 20 11
40 11 C0 08 60 04 60 00 80 04 80 04 A0 04 80 04
03 00 03 00 A0 08 E0 0C E0 0C C0 0C 40 04 40 00
60 04 60 00 03 00 02 00 03 00 05 00 A0 08 80 08
40 00 60 04 03 00 04 00 14 00 04 0F 0C 00 08 00
4B 00 00 00 03 00 00 00 0F 00 0A 00 03 00 07 00
20 29 03 00 04 00 03 00 07 00 00 25 03 00 04 00
03 00 06 00 80 25 00 21 60 11 03 00 03 00 03 00
02 00 80 15 80 04 A0 04 80 08 C0 14 80 0C 20 1E
01 2F 03 00 02 00 03 00 01 00 80 15 40 11 A0 08
60 04 60 04 60 04 80 04 80 04 A0 04 00 0D 80 11
20 11 40 11 00 0D 60 04 60 04 60 04 60 04 80 04
80 04 80 04 80 04 03 00 01 00 03 00 02 00 C0 0C
C0 0C 40 04 40 04 40 04 60 04 60 04 40 04 03 00
02 00 03 00 04 00 40 04 40 04 60 04 60 04 03 00
04 00 14 00 04 0F 0C 00 08 00 48 00 00 00 03 00
00 00 0F 00 0A 00 03 00 08 00 41 2D 03 00 03 00
03 00 08 00 40 2D 03 00 03 00 03 00 07 00 C0 1D
E0 1C A0 15 03 00 02 00 C0 04 C0 04 03 00 04 00
20 22 00 25 A0 0C 60 26 C0 2A 40 1E E0 0C A0 04
80 04 A0 08 A0 08 C0 0C A0 08 A0 08 A0 08 80 04
80 04 A0 04 E0 0C A0 08 60 04 60 04 80 04 80 08
80 04 60 04 60 04 60 04 80 04 03 00 01 00 03 00
01 00 A0 08 40 04 40 04 40 04 60 04 60 04 40 04
40 04 03 00 03 00 03 00 03 00 40 04 40 04 40 04
40 04 03 00 05 00 14 00 04 0F 0E 00 09 00 51 00
00 00 03 00 00 00 0E 00 09 00 03 00 0A 00 A1 31
03 00 03 00 03 00 0A 00 81 31 03 00 03 00 03 00
0A 00 40 29 C0 19 03 00 02 00 03 00 09 00 40 2D
E0 1C A0 26 C0 26 03 00 01 00 03 00 07 00 A1 2A
00 22 20 2D 20 15 A0 19 60 11 E0 08 C0 08 E0 08
20 09 00 0D 00 0D 00 0D E0 0C E0 0C A0 08 A0 08
80 04 80 04 03 00 02 00 C0 08 A0 08 A0 04 A0 08
E0 08 A0 08 C0 08 80 08 80 08 60 04 60 04 03 00
03 00 03 00 02 00 40 04 60 04 60 04 60 04 60 04
40 04 40 04 40 04 03 00 04 00 03 00 03 00 40 04
40 04 60 04 60 04 60 04 03 00 06 00 14 00 04 0F
0F 00 09 00 54 00 00 00 03 00 00 00 0D 00 09 00
03 00 0C 00 A1 31 03 00 02 00 03 00 0C 00 40 21
03 00 02 00 03 00 0B 00 41 29 00 1D 00 1A 03 00
01 00 03 00 0A 00 C1 2E 40 31 80 1D 80 26 00 1E
03 00 09 00 81 2A A0 1D C0 14 80 04 80 04 03 00
01 00 20 0D 20 0D 40 11 03 00 03 00 20 0D 00 0D
C0 0C 80 08 60 04 60 04 60 04 03 00 02 00 03 00
01 00 E0 08 00 0D 00 0D 20 0D C0 08 E0 0C A0 08
80 08 60 04 60 04 60 04 03 00 03 00 03 00 02 00
80 04 80 04 80 04 80 08 80 08 60 04 40 04 60 04
03 00 05 00 03 00 03 00 60 04 60 04 40 04 60 04
60 04 40 04 03 00 06 00 14 00 04 0F 11 00 0A 00
57 00 00 00 03 00 00 00 0B 00 08 00 03 00 0F 00
C1 35 03 00 01 00 03 00 0F 00 80 21 03 00 01 00
03 00 0F 00 20 15 03 00 01 00 03 00 0E 00 81 31
80 19 60 1E 03 00 0C 00 21 33 20 2E 00 1D 40 22
20 1E 03 00 0B 00 A0 2A C0 1D E0 18 80 08 E0 08
03 00 01 00 40 11 03 00 07 00 40 11 40 11 C0 0C
A0 08 60 04 60 04 60 04 03 00 02 00 03 00 01 00
E0 0C 20 0D 20 0D 20 0D 40 11 00 0D 00 0D C0 08
A0 08 60 04 60 04 60 04 03 00 04 00 03 00 03 00
A0 08 C0 08 C0 08 A0 08 A0 08 60 04 60 04 40 04
40 04 03 00 05 00 03 00 04 00 80 08 60 04 60 04
60 04 60 04 60 04 03 00 07 00 14 00 04 0F 11 00
0A 00 53 00 00 00 03 00 00 00 0B 00 08 00 03 00
10 00 C1 31 03 00 10 00 60 19 03 00 0F 00 A1 39
E0 10 03 00 0E 00 21 32 60 25 40 22 03 00 0D 00
A1 2E 81 35 40 19 40 22 03 00 0A 00 A0 26 C0 2A
60 26 E0 2D 60 2D 20 11 03 00 01 00 03 00 07 00
80 15 A0 19 60 15 A0 19 00 11 C0 0C 60 08 60 04
03 00 02 00 20 0D 60 11 40 11 40 0D 60 11 40 11
20 11 00 0D E0 0C C0 08 80 04 60 04 60 04 60 04
03 00 03 00 03 00 02 00 C0 0C C0 08 E0 0C C0 08
C0 08 80 04 60 04 60 04 60 04 60 04 03 00 05 00
03 00 04 00 80 08 60 04 60 04 60 04 60 04 60 04
03 00 07 00 14 00 04 0F 12 00 0A 00 5A 00 00 00
03 00 00 00 0B 00 08 00 03 00 11 00 02 3A 03 00
11 00 E0 21 03 00 10 00 02 42 E0 0C 03 00 0F 00
61 35 60 25 20 1E 03 00 0C 00 63 3F E1 2E 21 36
E2 3D C0 1D 03 00 01 00 03 00 09 00 20 1E 40 22
E1 2E C1 2E 61 2A A1 35 00 15 E0 19 03 00 01 00
03 00 04 00 20 0D A0 15 A0 15 C0 19 20 1E A0 2A
80 26 60 26 C0 1D 60 25 C0 14 03 00 03 00 20 11
60 11 40 11 60 11 40 11 40 11 20 11 20 11 40 15
E0 0C A0 08 E0 0C 60 04 60 04 03 00 04 00 03 00
02 00 C0 08 E0 0C E0 0C E0 0C A0 08 80 08 80 08
60 04 60 04 60 04 03 00 06 00 03 00 04 00 80 04
60 04 60 04 60 04 60 04 03 00 09 00 14 00 04 0F
14 00 09 00 65 00 00 00 03 00 00 00 0A 00 09 00
03 00 13 00 A1 29 03 00 12 00 43 4A 03 00 01 00
03 00 10 00 41 26 E2 41 A1 2D 03 00 01 00 03 00
0D 00 21 33 41 33 A1 2E 22 3E 22 3E 20 22 03 00
01 00 03 00 07 00 C0 15 A0 15 40 1E 80 22 60 22
C1 2A E1 2E 60 26 A0 31 22 42 60 15 03 00 02 00
40 0D 20 0D C0 08 A0 04 C0 08 00 0D 60 11 80 15
C0 19 20 22 60 26 80 2A 60 26 40 26 61 35 E2 39
80 1D 03 00 03 00 03 00 01 00 20 11 20 0D 00 0D
20 11 20 11 40 11 40 15 E0 1D E0 1D 20 22 00 22
20 22 61 35 00 21 03 00 05 00 03 00 03 00 A0 08
E0 0C E0 0C C0 08 A0 08 80 08 80 08 80 08 60 04
60 04 60 08 03 00 06 00 03 00 06 00 60 04 60 04
60 04 60 04 60 04 03 00 09 00

Advertisement

That make.set file is simply a standard makefile for compiling showset.exe. Unless you have the .c and .asm files that it references it's not much help. There's a good chance that the sprite drawing code was written in assembly.

Back in 1997 DOS based games were getting less common. Windows 95 had been around for long enough that games were getting made using DirectX / DirectDraw.

There is also no standard sprite format. It could be anything. In general you'd expect to find at least the width, height and pixel data. On top of that possibly a palette if it's a 4/8 bit per pixel sprite. 16 bits per pixel is also used, but 24/32 bpp is unlikely back then. There's also a chance that the pixel data is run length encoded (to make it quicker to skip over transparent pixels).

It's easier if you have a screenshot to work backwards from, so you can tell if your guess at the encoding is giving you the right colours. It also helps if you know the bit depth of the screen mode the game is using.

It might be quicker going the other way - overwrite various bits of data with zeros (or other values), then run the game / viewer and see what ends up on screen.


Maybe one of you knows how sprites were stored in 1997 or recognized the file signature.

For starters, keep in mind that you can't assume every DOS game uses the same resource file format. Usually they are custom designed to keep the every day person from easily reverse engineering it because devs generally don't want their assets stolen, so you could be infringing copyrights here depending on your intent. Keep in mind that there are some exceptions, but you certainly cannot count on those either.

If you're really serious about this, then you might want to start off with building good reverse engineering skills. Start by getting a good .exe disassembler and get a good knowledge of how x86 assembly works. If you don't know assembly, then there may be a rather steep learning curve ahead of you. I bought a book about reverse engineering, and it gives plenty of examples on reverse engineering functions in x86 assembly and discovering how code on a low level really works.

Shogun.

Looking at the data can tell you a lot.

The .RES file is 396 lines of 16 bytes plus 10 bytes = 6346 bytes.

So straight away you can say it's not just a raw dump of a graphic. Graphics tend be power of 2 aligned so if it was 4096 bytes or 8192 bytes it could easily be raw data

6346 / 3 = 2115 Again not a power of two so probably not a raw 24 bit graphic and you can't see lines of FF's all over the place, so probably not raw 32 bit data.

Looking directly at the data you don't see blocks of 00 00 00 00. This is a dead give away that the data is compressed. Most sprites have a black background.

Now we think we know it's compressed we can look again at the data. One common form of compression is run length endcoding. So look at the first line of data.

At first it looks possible, 14 00 (0x14 bytes all 00) 04 0F (0x04 bytes all 0F) but then it looks wrong. 16 00 09 00 (0x16 bytes of 00 followed by another 0x09 bytes of 00, surely that would be 1F 00.

Later as well I can see some 00 00 00, so probably not run length encoded bytes.

So my guess would be run length encoded triplets.

14 00 04 0F (0x14 pixels of RGB(00,04,0f))

16 00 09 00 (0x16 pixels of RGB(00,09,00))

etc.

The only way to find out is to write some test code and mess about with it.

I would write some code to try this compression scheme and see what size the final data is. If it's a power of two, then you might be onto something.

It's trial and error. I've done it many times you can see the format used in Starflight here http://stainlessbeer.weebly.com/hacking.html

I got bored and did a bit more analysis. Below is the first part of the data with some highlighting.

The bold parts seem to be an identifier as you already found.

The green and blue numbers appear to be 16-bit width and height, but I'm not 100%.

The red number looks 32-bit, and I'm not sure what it means. Some kind of unique identifier maybe?

The next 4 bytes are 03 00 00 00 for all of them. Maybe some kind of image type?

Note that the numbers are all stored in little endian format (least significant byte first).

Following that we appear to have four more 16-bit values (in grey) of unknown meaning. They could also be part of the pixel data, but they are consistently xx 00 in all three which suggests they could well be 16-bit numbers. Needs more analysis.

Next there's 210 more bytes of unknown data, presumably containing the pixels.

For the second case, the unknown data is 214 bytes.

Since the overhead compared with the possible dimensions isn't consistent that suggests RLE encoding. Note that sprite RLE was generally done for improving rendering performance, and not to reduce data size.

I'm wondering if the image data is 16-bits per pixel, with the top bit always zero (i.e. 555 encoding not 565). That's because I can't see any obvious cases where two bytes next to each other are both 0x80 or bigger outside of the headers.

That's probably more than enough to get you started.

14 00 04 0F 16 00 09 00 6B 00 00 00 03 00 00 00
09 00 09 00 03 00 15 00 04 57 03 00 15 00 61 2E
03 00 13 00 E2 41 62 36 03 00 01 00 03 00 0C 00
A0 26 A0 26 81 26 21 2F 01 2F C1 2E 42 42 E1 31
03 00 02 00 80 15 03 00 04 00 E0 08 20 09 40 11
A0 15 00 1E 00 1A 60 22 A0 26 A1 2A C0 2A C0 2A
80 2A 02 4A 81 2D 80 15 03 00 02 00 03 00 02 00
60 11 00 0D C0 08 E0 0C 00 0D 20 11 80 15 A0 19
20 22 40 22 80 2A A0 2A 60 26 60 2A 22 3E A1 39
E0 21 03 00 03 00 03 00 03 00 00 11 20 0D 00 0D
00 0D 20 11 80 15 A0 19 E0 1D C0 1D 20 22 00 22
A0 29 C1 3D 40 1D A0 1D 03 00 04 00 03 00 05 00
C0 08 A0 08 00 11 40 15 20 11 00 11 40 15 60 25
C1 35 41 2D C0 10 03 00 06 00 03 00 08 00 60 04
60 04 60 04 60 04 03 00 0A 00 14 00 04 0F 15 00
08 00 6D 00 00 00 03 00 00 00 0B 00 0A 00 03 00
14 00 C1 31 03 00 13 00 22 42 03 00 01 00 03 00
06 00 80 15 00 1E 60 22 20 1E C1 2A E1 2A 01 2F
A1 26 E1 2A 01 2F C0 2E E2 39 E2 39 03 00 02 00
20 0D 20 0D 00 0D 20 0D 60 11 40 11 80 15 E0 1D
60 26 40 22 C1 2A 01 2F 01 2F E1 2E C0 2A 80 2A
41 36 E1 39 20 19 03 00 02 00 03 00 01 00 C0 08
00 0D 00 0D 20 11 20 11 60 15 C0 19 00 1E 60 26
80 26 C0 2E E1 2E A0 2A 60 2A A1 3D 61 29 60 1D
03 00 03 00 03 00 02 00 C0 0C E0 0C 40 15 80 15
60 15 A0 19 E0 1D 40 26 40 26 20 22 20 26 C3 42
83 4A A1 31 03 00 05 00 03 00 04 00 C0 0C 40 19
80 19 80 19 60 19 A0 1D E1 2D 01 36 02 42 C1 2D
A0 1D 03 00 06 00 03 00 07 00 E0 20 61 2D A1 2D
E2 31 80 25 03 00 09 00 14 00 04 0F 16 00 08 00
75 00 00 00 03 00 00 00 0B 00 0A 00 03 00 15 00
40 21 03 00 14 00 80 29 03 00 01 00 20 0D 60 11

Probably not what you want to hear, but, just a "drive-by" thought: the data may also be sensitive to big-endian vs. little-endian. I.e., you may have to reverse every 2 bytes if they were read as integers.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

That's interesting

First block

Header 0x16 0x09 size 210

Second block

Header 0x15 0x08 size 214

If they are sizes....the first block of pixel data should be larger than the second.

That implies that the pixel data is compressed as 22 X 9 = 198 and 21 X 8 = 168

This may be way off because I'm doing it in my head, but run length decoding that first 210 byte block gives me 952 uncompressed data bytes.

more than enough for 4 bytes per pixel

I got the solution to reverse engineer:

14 00 04 0F 16 00 09 00 6B 00 00 00 03 00 00 00
09 00 09 00
03 00 15 00 04 57 03 00 15 00 61 2E
03 00 13 00 E2 41 62 36 03 00 01 00 03 00 0C 00
A0 26 A0 26 81 26 21 2F 01 2F C1 2E 42 42 E1 31
03 00 02 00 80 15 03 00 04 00 E0 08 20 09 40 11
A0 15 00 1E 00 1A 60 22 A0 26 A1 2A C0 2A C0 2A
80 2A 02 4A 81 2D 80 15 03 00 02 00 03 00 02 00
60 11 00 0D C0 08 E0 0C 00 0D 20 11 80 15 A0 19
20 22 40 22 80 2A A0 2A 60 26 60 2A 22 3E A1 39
E0 21 03 00 03 00 03 00 03 00 00 11 20 0D 00 0D
00 0D 20 11 80 15 A0 19 E0 1D C0 1D 20 22 00 22
A0 29 C1 3D 40 1D A0 1D 03 00 04 00 03 00 05 00
C0 08 A0 08 00 11 40 15 20 11 00 11 40 15 60 25
C1 35 41 2D C0 10 03 00 06 00 03 00 08 00 60 04
60 04 60 04 60 04 03 00 0A 00 14 00 04 0F 15 00
08 00
6D 00 00 00
03 00 00 00 0B 00 0A 00 03 00
14 00 C1 31
03 00 13 00 22 42 03 00 01 00 03 00


14 00 are the first two bytes of a sprite. 04 is still a mystery to me.
0F could mean that there are following 16 bytes of header data.
16 00 09 00 is the width x height (22x9).
6B 00 00 00 tells me that there are 2*6b000000 bytes of pixel data (214).
The pixel data starts at offset 20 (figured out by comparing many sprite sets), in this case with 03 00 15 00.
The pixel data is RLE encoded, 03 00 being the escape sequence and 15 00 is telling me that 20 pixels with 00 00 (16 bpp) follow.

I have not figured out the grey data, yet.

With this information I was able to rebuild the graphics! YAY biggrin.png

Well, post a PNG. Let's see something for all that hard work. :)

RIP GameDev.net: launched 2 unusably-broken forum engines in as many years, and now has ceased operating as a forum at all, happy to remain naught but an advertising platform with an attached social media presense, headed by a staff who by their own admission have no idea what their userbase wants or expects.Here's to the good times; shame they exist in the past.

It's a different spritegroup, because BLATT.RES has different sizes per sprite.

s822kJt.gif

Would be cool to figure out what the third byte is, though!

This topic is closed to new replies.

Advertisement