31/03/2008 19:12 .
31/03/2008 19:12 ..
07/03/1992 22:52 9.027 ARRAKIS.AGD
14/02/1992 22:33 8.998 ARRAKIS.HSQ
20/03/1992 14:00 12.210 ARRAKIS.M32
14/01/1992 16:17 5.761 ATTACK.HSQ
02/04/1992 15:16 20.172 BACK.HSQ
07/03/1992 22:52 5.553 BAGDAD.AGD
29/05/1991 17:29 5.523 BAGDAD.HSQ
20/03/1992 14:01 7.522 BAGDAD.M32
14/01/1992 15:41 16.809 BALCON.HSQ
22/12/1991 02:48 14.103 BARO.HSQ
16/02/1992 00:59 29.142 BOOK.HSQ
02/11/1991 20:08 18.618 BOTA.HSQ
28/10/1991 18:43 14.502 BUNK.HSQ
02/04/1992 15:54 8.670 CHAN.HSQ
31/10/1991 20:29 3.244 CHANKISS.HSQ
13/01/1992 02:26 10.824 COMM.HSQ
08/04/1992 00:28 4.525 COMMAND1.HSQ
04/04/1992 04:11 4.587 COMMAND2.HSQ
07/04/1992 01:11 4.656 COMMAND3.HSQ
07/04/1992 01:57 5.550 CONDIT.HSQ
28/12/1991 20:15 10.524 CORR.HSQ
06/04/1992 19:23 12.763 CREDITS.HSQ
06/04/1992 02:41 7.829 CRYO.HSQ
05/01/1992 23:21 45.408 DEATH1.HSQ
05/01/1992 23:21 44.024 DEATH2.HSQ
05/01/1992 23:21 42.098 DEATH3.HSQ
07/04/1992 01:57 4.222 DIALOGUE.HSQ
13/05/2000 21:49 50 DUNE.BAT
06/04/2008 22:19 9.565 DUNE21S0.SAV
06/04/2008 16:58 13.416 DUNE21S1.SAV
14/04/1998 19:45 13.601 DUNE21S2.SAV
06/04/2008 20:01 9.610 DUNE21S3.SAV
05/04/2008 23:14 9.720 DUNE21S4.SAV
27/03/1992 01:30 9.479 DUNE386.HSQ
30/03/1992 01:22 1.760 DUNEADL.HSQ
09/04/1992 20:36 2.780 DUNEAGD.HSQ
04/04/1992 04:13 963 DUNECHAR.HSQ
30/03/1992 01:21 941 DUNEMID.HSQ
25/02/1992 02:13 704 DUNEPCS.HSQ
13/04/1992 12:14 74.341 DUNEPRG.EXE
12/11/1991 19:21 21.874 DUNES.HSQ
14/11/1991 19:15 14.068 DUNES2.HSQ
14/01/1992 18:35 18.866 DUNES3.HSQ
07/04/1992 20:07 3.174 DUNESDB.HSQ
27/03/1992 01:29 9.338 DUNEVGA.HSQ
13/04/1992 12:45 6.514 DUNEVRF.EXE
02/04/1992 16:03 10.113 EMPR.HSQ
07/12/1991 19:04 7.007 EQUI.HSQ
22/12/1991 02:48 15.683 FEYD.HSQ
18/01/1992 17:04 16.274 FINAL.HSQ
28/10/1991 17:30 24.607 FORT.HSQ
10/01/1992 16:39 14.284 FRESK.HSQ
02/04/1992 16:26 28.711 FRM1.HSQ
02/04/1992 16:26 24.080 FRM2.HSQ
02/04/1992 16:26 18.417 FRM3.HSQ
24/08/1991 18:32 4.009 GENERIC.HSQ
03/02/1991 14:46 4.741 GLOBDATA.HSQ
02/04/1992 15:50 10.002 GURN.HSQ
23/12/1991 19:48 10.858 HARA.HSQ
02/04/1992 16:04 12.324 HARK.HSQ
02/04/1992 04:59 447 HARK.SAL
02/04/1992 15:45 11.511 HAWA.HSQ
02/04/1992 04:39 14.995 ICONES.HSQ
29/10/1991 19:13 4.672 IDAH.HSQ
13/04/1992 12:14 10.552 INSTALL.EXE
10/10/1991 20:33 15.155 INTDS.HSQ
21/02/1992 20:33 9.472 JESS.HSQ
15/11/1991 12:15 21.411 KYNE.HSQ
02/04/1992 15:39 6.991 LETO.HSQ
06/04/1992 23:38 2.437 LOGO.EXE
06/04/1992 02:32 18.417 LOGO.HNM
21/09/1991 01:46 15.984 MAP.HSQ
19/09/1991 16:44 5.146 MAP2.HSQ
28/01/1992 20:45 12.246 MIRROR.HSQ
15/11/1991 15:27 8.700 MOIS.HSQ
07/03/1992 22:52 5.812 MORNING.AGD
03/07/1991 00:01 5.787 MORNING.HSQ
20/03/1992 23:51 4.950 MORNING.M32
17/02/1992 13:57 13.907 ONMAP.HSQ
14/12/1991 17:01 2.993 ORNY.HSQ
07/10/1991 18:45 2.369 ORNYCAB.HSQ
17/12/1991 20:49 3.718 ORNYPAN.HSQ
15/12/1991 03:50 9.311 ORNYTK.HSQ
05/03/1992 14:03 493 PALPLAN.HSQ
11/01/1992 18:19 11.907 PAUL.HSQ
13/08/1991 02:59 14.360 PERS.HSQ
08/04/1992 00:31 17.476 PHRASE11.HSQ
08/04/1992 00:31 14.888 PHRASE12.HSQ
07/04/1992 01:24 19.047 PHRASE21.HSQ
07/04/1992 01:24 16.338 PHRASE22.HSQ
07/04/1992 03:33 19.908 PHRASE31.HSQ
07/04/1992 03:33 16.354 PHRASE32.HSQ
29/03/1992 19:39 19.275 POR.HSQ
13/01/1992 02:26 9.525 PROUGE.HSQ
05/04/1992 06:03 130.328 PRT.HNM
18/02/1992 19:49 15.410 SD1.HSQ
18/02/1992 19:49 11.992 SD2.HSQ
18/02/1992 19:49 16.473 SD3.HSQ
20/02/1992 23:36 3.567 SD4.HSQ
04/04/1992 18:36 25.259 SD5.HSQ
02/04/1992 05:11 10.546 SD6.HSQ
02/04/1992 05:11 12.621 SD7.HSQ
02/04/1992 05:11 23.865 SD8.HSQ
19/02/1992 16:09 2.986 SD9.HSQ
19/02/1992 16:10 10.880 SDA.HSQ
06/04/1992 22:07 49.687 SDB.HSQ
08/03/1992 12:03 10.802 SEKENCE.AGD
19/05/1991 19:44 10.774 SEKENCE.HSQ
20/03/1992 14:01 13.892 SEKENCE.M32
21/09/1991 18:34 20.814 SERRE.HSQ
09/10/1991 17:13 43.574 SHAI.HSQ
09/10/1991 17:13 41.838 SHAI2.HSQ
02/11/1991 20:09 4.392 SIET.SAL
14/12/1991 18:42 5.468 SIET0.HSQ
05/08/1991 23:13 32.634 SIET1.HSQ
07/03/1992 22:43 7.507 SIETCHM.AGD
12/06/1991 16:30 7.477 SIETCHM.HSQ
20/03/1992 18:09 7.344 SIETCHM.M32
06/01/1992 19:47 8.609 SKY.HSQ
02/04/1992 16:06 11.118 SMUG.HSQ
29/03/1992 17:20 42.234 STARS.HSQ
02/04/1992 15:52 11.043 STIL.HSQ
11/12/1991 16:54 2.139 SUN.HSQ
19/08/1991 00:29 21.837 SUNRS.HSQ
03/02/1991 15:06 792 TABLAT.BIN
14/01/1992 18:29 5.010 VER.HSQ
02/04/1992 14:04 660 VERBIN.HSQ
20/12/1991 18:04 27.724 VILG.HSQ
20/12/1991 17:59 1.937 VILG.SAL
12/09/1991 19:22 22.125 VIS.HSQ
07/03/1992 22:53 2.946 WARSONG.AGD
28/02/1992 02:00 2.919 WARSONG.HSQ
20/03/1992 17:56 4.285 WARSONG.M32
07/03/1992 22:53 1.935 WATER.AGD
29/05/1991 17:29 1.905 WATER.HSQ
20/03/1992 14:01 3.471 WATER.M32
07/03/1992 19:43 5.618 WORMINTR.AGD
08/03/1992 02:07 6.501 WORMINTR.HSQ
20/03/1992 18:09 8.274 WORMINTR.M32
07/03/1992 23:47 8.600 WORMSUIT.AGD
13/05/1991 15:08 8.283 WORMSUIT.HSQ
20/03/1992 14:02 5.074 WORMSUIT.M32
02/04/1992 04:59 1.859 PALACE.SAL
143 fichier(s) 1.902.320 octets
31/03/2008 19:12 .
31/03/2008 19:12 ..
22/06/1993 20:12 78.700 DNCDPRG.EXE
23/06/1993 13:12 397.794.384 DUNE.DAT
13/03/1993 06:19 6.486 DUNE.EXE
30/03/1993 14:52 22.697 INSTALL.EXE
20/02/1993 18:49 30 README.BAT
13/03/1993 06:05 7.037 README.DOC
6 fichier(s) 397.909.334 octets
The HSQ compression used on dune data file is similar to LZ** dictionary algorithms.
Here is a source of decompression program.
Here is a dos decompression program.
All those files are compressed with HSQ. So, before being able to correctly read them, you need to uncompress them.
Some of the files dont have a palette definition inside. This is the case for the sprites which get palette effects in the game (for exemple, the dunes and sand in the desert).
Some of the sprites with no palette definition can be both used with palette effects or fixed classic palette (for exemple, status bar in the bottom of the screen).
In such case, the palette can be set by the loading of another sprite file.
Exemple of the bottom status bar:
When outside it vary depending of the sun, in that case the program is making palette manipulation for the index used for the bar.
When inside, the sprite file of the room is loaded, and the palett is set.
Thats why in files like corr.hsq or por.hsq there is square sprite with used to force definition of the palette.
Here is the description of the graphic format:
BEGIN
offset of "end of pal definition" (2 bytes)
...
...
n sub-palette are now defined
a sub palette is defined by:
- the offset of the sub-pal in the general palette. (1 byte)
- the number of colors in the sub palette. (Nb-col) (1 byte)
- definition of Red-Green-Blue values for each of the Nb-col colors. (Nb-col * 3 bytes)
(the RGB values are only defined on 6 bits,
so you need to shift left by 2 (multiply by 4) to get the correct value)
...
...
an End-of-bloc delimiter let you check the end of palette definition (value: 0xFFFF, 2 bytes)
Take care, some garbage bytes may be following...(to realign on 4 bytes ?)
...
...
Now is comming a list of index, to allow you to define where each sprite start and end.
The base for these offsets is right here (before reading the first offset).
n offsets ( n * 2 bytes )
...
...
n sprite data blocs structured like this:
-width (and compression indicator on the most significant bit)(2 bytes)
-height (1 byte)
-base offset of the sub-pal to use (1 byte)
-sprite content.
If sprite content isn't compressed:
just read bytes until you fill all the surface (knowing width and height).
1 byte is coding 2 pixels (half a byte indicate the pal-offset from the base offset of the sprite.
Take care that at end of each line can exist garbage bytes ( to realign on 4 bytes ?)
If content is compressed:
you need to apply a sort of RLE decoding process.
read a repeat-indicator (R) (1 byte).
If repeat-indicator is negative so repeat (-R) times the following byte (2 pixels).
If repeat-indicator is positive so read the R bytes following and draw them (R * 2 pixels).
END
Here is a source of dump program.
This files describe different screens of the game.
They mainly define which sprite to draw where, and which effect to apply on this sprite.
It is interesting to see that the game engine is able to use HSQ compressed form or not of file (with same name).
This mean that before loading a SAL file, the game test if it is compressed or not.
(Maybe with the rule (byte0 + byte1 + byte2 + byte3 + byte4 + byte5)%256 == 171 indicating that the file is probably HSQ compressed)
vilg.sal
siet.sal
palace.sal (originaly HSQ compressed)
hark.sal (originaly HSQ compressed)
Here is the description of the 'sprite-position' file format:
BEGIN
n1 offsets indicating the place of each room in the file. (n1 * 2 bytes)
...
n1 data blocs describing a room structured like this:
- number of position markers (1 byte)
- n2 drawing commands data blocs (size depend the drawing command)
- end of room description indicator: 0xFFFF (2 bytes)
...
END
different drawing command exists. They are like this: If its a normal sprite drawing command:
BEGIN
number of the sprite (in the related graphic file) to draw. (value > 0x01) (1 byte)
modificator (1 byte)
x position (1 byte)
y position (1 byte)
sprite palette offset override (1 byte)
END
modificator is a bit field. In this case it work like this:
MSB bit_7 0
bit_6 flip Left-Right indicator
bit_5 rotate 180 degree indicator
bit_4 reduction factor bit2 (MSB)
bit_3 reduction factor bit1
bit_2 reduction factor bit0
bit_1 if set you need to add 256 to x position
bit_0 0
If its a position marker command:
Markers indicates the game where can be positioned peoples in a room.
They have -like sprites drawing command- a modificator byte to apply an effect
(typicaly flip Left-Right and Size reduction for perspective effect)
Markers can be between drawing commands. For exemple to make a person to appear
behind a table but in front of a chair.
BEGIN
number of the sprite = 0x01 (1 byte)
modificator (1 byte)
x position (1 byte)
y position (1 byte)
sprite palette offset override (1 byte)
END
modificator is a bit field. In this case it work like this:
MSB bit_7 0
bit_6 flip Left-Right indicator
bit_5 rotate 180 degree indicator
bit_4 reduction factor bit2 (MSB)
bit_3 reduction factor bit1
bit_2 reduction factor bit0
bit_1 if set you need to add 256 to x position
bit_0 0
If its a shape drawing command, there is 2 possibilities:
polygone:
BEGIN
base color index (1 byte)
modificator with bit_7=1 and bit_6=0 (1 byte) (bit_0 to bit_6 = ??)
horizontal gradient (value related to the width of the vertical bands -
if value is 0 there is no horizontal gradient(1 byte)
vertical gradient (value related to the height of the horizontal bands -
if value is 0 there is no vertical gradient(1 byte)
n points to build the polygone:
x (2 bytes)
(MSB bits 14 and 15 probably are some kind of trigger to stop reading points,
for now, each time I read a point, I'm addind the x position MSB byte &(0xF0) in a counter.
I stop reading points when its 0xB0 or more).
y (2 bytes)
END
line:
BEGIN
base color index (1 byte)
modificator with bit_7=1 and bit_6=1 (1 byte) (bit_0 to bit_6 = ??)
2 points to build the line:
x1 (2 bytes)
y1 (2 bytes)
x2 (2 bytes)
y2 (2 bytes)
END
base color index have bit_7 (MSB) always set to 1 to make difference with the other command types.
Here is the begining of my dune game engine for DS. The sal part is almost finished.
warsong.agd
wormintr.agd
water.agd
wormsuit.agd
sietchm.agd
sekence.agd
morning.agd
arrakis.agd
bagdad.agd
warsong.hsq
water.hsq
wormintr.hsq
wormsuit.hsq
sietchm.hsq
sekence.hsq
morning.hsq
arrakis.hsq
bagdad.hsq
warsong.m32
water.m32
wormintr.m32
wormsuit.m32
sietchm.m32
sekence.m32
morning.m32
arrakis.m32
bagdad.m32
sd1.hsq
sd2.hsq
sd3.hsq
sd4.hsq
sd5.hsq
sd6.hsq
sd7.hsq
sd8.hsq
sd9.hsq
sda.hsq
sdb.hsq
*.sav
globdata.hsq
map2.hsq
map.hsq
GLOBDATA.HSQ seams to contain trigonometrics values and thing needed to display the globe.
MAP.HSQ contain information about the map when displaying situation. (it is possible to directly use a uncompressed version)
here is what we have in the map.hsq file once we managed to find the end of each line.
the following big map is build using the same MAP.HSQ but with an interpolation process.
MAP2.HSQ contain information about the map you can see when asking for spice density
command1.hsq
command2.hsq
command3.hsq
condit.hsq
dialogue.hsq
dune386.hsq
duneadl.hsq
duneagd.hsq
dunechar.hsq
dunemid.hsq
dunepcs.hsq
dunesdb.hsq
dunevga.hsq
phrase11.hsq
phrase12.hsq
phrase21.hsq
phrase22.hsq
phrase31.hsq
phrase32.hsq
generic.hsq
logo.hnm
tablat.bin
prt.hnm
verbin.hsq