Wargasm

TFX, Inferno, Wargasm, Typhoon, …
mikew
Data Genius
Posts: 242

Post by mikew »

I came across my CD for this, so thought I'd try to see what makes this exquisitely named game tick.

Since the Installer is unlikely to work in Win64, I ran it using Wine on Linux and the result is the following files:
warg_dir.PNG
warg_dir.PNG (45.33 KiB) Viewed 549 times
That file 'access.log' stands out straight away. Are those the data filename hashes? That remains to be seen.

The main data archive 'wargasm.xfs' has an associated index file 'wargasm.ndx' and from that it would seem we have 23132 files to dig out.

I tried running 'tank.exe', but there's a CD check and I'd already put my USB CD/DVD player back in the cupboard.

To be continued...(maybe)
mikew
Data Genius
Posts: 242

Post by mikew »

The data structure isn't quite the same as TAW or Typhoon, but a slight modification of the Typhoon script from a few months back allows the files to be extracted. Apart from very small text files, they are all RA compressed except for a single BMP file.
warg_bmp.PNG
warg_bmp.PNG (50.79 KiB) Viewed 545 times
I've suddenly got far more interested. :lol:
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

Please proceed 👀
mikew
Data Genius
Posts: 242

Post by mikew »

I haven't found anything similar so far :(
...but on the plus side, I might have found wargasm.xfs's Rosetta Stone. :)

After decompressing the RA files, some sorting was done to find text files etc.
The larger text files are usually the most interesting, so fairly quickly found the 919kB 'unk1089'

If we treat the first column of unk1089 as a 32bit signed integer, it matches up quite well with the hashes in the index file 'wargasm.ndx' which contains a 4 byte hash and a 4 byte offset into 'wargasm.xfs' for each entry.
warg_rosetta.PNG
warg_rosetta.PNG (48.22 KiB) Viewed 539 times
-2147173453=0x8004bbb3
-2146784464=0x800aab30 etc etc

So, while the offsets are wrong, and there's less entries in 'unk1089' (23122 instead of 23132), so they relate to different archive files, it should be possible to tie up most of the names with some cross referencing.
It can't be that easy, so it must be a trap...
mikew
Data Genius
Posts: 242

Post by mikew »

Well, it was that easy, so now I've extracted all 23131 files.
There were 10 without names, and 4 or 5 choked my RA decompressor, so left them compressed for now.
Now I've rezipped them to a 125MB file. Should I attach it here?
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

Sure, go ahead!
mikew
Data Genius
Posts: 242

Post by mikew »

I thought you'd answer quicker than that. :D

Here it is...
Attachments
warg_dat.7z
(121.99 MiB) Downloaded 6 times
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

straw.bmp
wat
worlds\desert\desert8\mem.log
An artifact from memory debugging. Paths like D:\cvs\hovis.win\HVMODELS\hmf.c(817) and D:\cvs\enved.win\world.c(89) tell us:
  1. DID used CVS as source control system.
  2. They named their repositories projectname.platform. We also found ef2000.win in Super EF2000 and f22.win in ADF/TAW.
  3. The Wargasm engine was called Hovis, after the UK bread.
  4. They had a world editor enved as a separate project.
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

textures/tankdbg.ncb might be a big thing. It is a database file that was generated by Visual Studio for the purpose of syntax highlighting and quick project browsing. It contains the names of all types and variables used in a project, plus (eventually) source locations.

0.97 MiB is not as large as I’d expect for the whole engine, so it may just be about a sub-project.

If we found the closely related PDB, we’d be able to disassemble the game EXE with actual, real variable/type names. That’s what made ReDriver2 possible in the first place: we found that someone had forgotten to delete the debug symbols from the Spanish version.

If you search the database for .c (can be done with any hex editor), you’ll find that it’s about a project called D:\cvs\TANK.WIN and there’s a lot of variable names in there.

Edit: There are three files called tank.aps in there. These are temporary Win32 MFC stuff from during development; I forgot what exactly.

Edit: tank.res are the compiled EXE resources for the game (or its prototype). With Visual Studio, you can look at the debug dialogs:
image.png
image.png (4.65 KiB) Viewed 485 times
image.png
image.png (5.1 KiB) Viewed 485 times
image.png
image.png (6.54 KiB) Viewed 485 times
… and more. Hey, we’ve seen that in Typhoon, too!

Edit: How kind of them to include their Visual Studio project!
image.png
image.png (42.57 KiB) Viewed 483 times
Here’s the build output:

Code: Select all

--------------------Configuration: HovisLibs - Win32 Debug--------------------


Microsoft (R) Program Maintenance Utility   Version 1.62.7022
Copyright (C) Microsoft Corp 1988-1997. All rights reserved.

--------------------Configuration: tank - Win32 Debug--------------------
Begining build with project "D:\cvs\TANK.WIN\tank.dsp", at root.
Active configuration is Win32 (x86) Console Application (based on Win32 (x86) Console Application)

Project's tools are:
			"32-bit C/C++ Compiler for 80x86" with flags "/nologo /G5 /Zp1 /MTd /W3 /GX /Z7 /Od /Ob1 /I "\cvs\tank.win\hobj" /I "\cvs\tank.win\effects" /I "\cvs\tank.win\winstuff" /I "\cvs\tank.win\multplay" /I "\cvs\tank.win\genins" /I "\cvs\tank.win" /I "\cvs\hovis.win\hvGrph2d\direct3d" /I "\cvs\hovis.win\hvAud2d" /I "\cvs\hovis.win\hvAud3d" /I "\cvs\hovis.win\hvCoords" /I "\cvs\hovis.win\hvCore" /I "\cvs\hovis.win\hvCtrl" /I "\cvs\hovis.win\hvGrph2d" /I "\cvs\hovis.win\hvGrph3d" /I "\cvs\hovis.win\hvIo" /I "\cvs\hovis.win\hvLights" /I "\cvs\hovis.win\hvMath" /I "\cvs\hovis.win\hvModels" /I "\cvs\hovis.win\hvObjs" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"obj\Debug/tank.pch" /YX /Fo"obj\Debug/" /Fd"obj\Debug/" /FD /c "
			"Win32 Resource Compiler" with flags "/l 0x809 /fo"obj\Debug/Tank.res" /d "_DEBUG" "
			"Browser Database Maker" with flags "/nologo /o"bin\Debug/tank.bsc" "
			"COFF Linker for 80x86" with flags "dplayx.lib dxguid.lib winmm.lib dinput.lib ddraw.lib dsound.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:"bin\Debug/tank.pdb" /debug /machine:I386 /out:"bin\Debug/tank.exe" "
			"Custom Build" with flags ""
			"<Component 0xa>" with flags ""

Creating temp file "C:\WINDOWS\TEMP\RSPE000.TMP" with contents </nologo /G5 /Zp1 /MTd /W3 /GX /Z7 /Od /Ob1 /I "\cvs\tank.win\hobj" /I "\cvs\tank.win\effects" /I "\cvs\tank.win\winstuff" /I "\cvs\tank.win\multplay" /I "\cvs\tank.win\genins" /I "\cvs\tank.win" /I "\cvs\hovis.win\hvGrph2d\direct3d" /I "\cvs\hovis.win\hvAud2d" /I "\cvs\hovis.win\hvAud3d" /I "\cvs\hovis.win\hvCoords" /I "\cvs\hovis.win\hvCore" /I "\cvs\hovis.win\hvCtrl" /I "\cvs\hovis.win\hvGrph2d" /I "\cvs\hovis.win\hvGrph3d" /I "\cvs\hovis.win\hvIo" /I "\cvs\hovis.win\hvLights" /I "\cvs\hovis.win\hvMath" /I "\cvs\hovis.win\hvModels" /I "\cvs\hovis.win\hvObjs" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"obj\Debug/tank.pch" /YX /Fo"obj\Debug/" /Fd"obj\Debug/" /FD /c 
"D:\cvs\TANK.WIN\Tracks.c"
>
Creating command line "cl.exe @C:\WINDOWS\TEMP\RSPE000.TMP" 
Creating temp file "C:\WINDOWS\TEMP\RSPE001.TMP" with contents <dplayx.lib dxguid.lib winmm.lib dinput.lib ddraw.lib dsound.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:"bin\Debug/tank.pdb" /debug /machine:I386 /out:"bin\Debug/tank.exe" 
.\obj\Debug\Hobj2bmf.obj
.\obj\Debug\Hobjbase.obj
.\obj\Debug\Hobjcol.obj
.\obj\Debug\Hobjdep.obj
.\obj\Debug\Hobjload.obj
.\obj\Debug\Hobjmove.obj
.\obj\Debug\Hobjphys.obj
.\obj\Debug\Hobjtemp.obj
.\obj\Debug\Dialogs.obj
.\obj\Debug\Winsim.obj
.\obj\Debug\Compass.obj
.\obj\Debug\Ladders.obj
.\obj\Debug\Chat.obj
.\obj\Debug\Dlgs.obj
.\obj\Debug\Hvdplay.obj
.\obj\Debug\Iobuff.obj
.\obj\Debug\Netgame.obj
.\obj\Debug\Allegian.obj
.\obj\Debug\Astar.obj
.\obj\Debug\envmap.obj
.\obj\Debug\Gunlogic.obj
.\obj\Debug\obstruct.obj
.\obj\Debug\scalemap.obj
.\obj\Debug\Sjmai.obj
.\obj\Debug\Sjmmis.obj
.\obj\Debug\Threat.obj
.\obj\Debug\Tlogic.obj
.\obj\Debug\Crater.obj
.\obj\Debug\Fxanim.obj
.\obj\Debug\Fxbase.obj
.\obj\Debug\Fxdef.obj
.\obj\Debug\Fxemit.obj
.\obj\Debug\Fxparse.obj
.\obj\Debug\Fxpart.obj
.\obj\Debug\Fxsound.obj
.\obj\Debug\Sunfx.obj
.\obj\Debug\Tracks.obj
.\obj\Debug\airdrop.obj
.\obj\Debug\Alt_at.obj
.\obj\Debug\Atmos.obj
.\obj\Debug\Attr.obj
.\obj\Debug\Bplane.obj
.\obj\Debug\Cameras.obj
.\obj\Debug\Chopper.obj
.\obj\Debug\Control.obj
.\obj\Debug\D3dsjm.obj
.\obj\Debug\Debug.obj
.\obj\Debug\Hud.obj
.\obj\Debug\JetModel.obj
.\obj\Debug\Options.obj
.\obj\Debug\Patch.obj
.\obj\Debug\Patchsam.obj
.\obj\Debug\Player.obj
.\obj\Debug\Rtpatch.obj
.\obj\Debug\Shadow.obj
.\obj\Debug\Sjm2d.obj
.\obj\Debug\Sjmairst.obj
.\obj\Debug\Sjmenv.obj
.\obj\Debug\Sjmgbv.obj
.\obj\Debug\Sjmintro.obj
.\obj\Debug\Sjmobj.obj
.\obj\Debug\Sjmsound.obj
.\obj\Debug\Sjmtank.obj
.\obj\Debug\Sjmtest.obj
.\obj\Debug\Special.obj
.\obj\Debug\Tga.obj
.\obj\Debug\Trkmod.obj
.\obj\Debug\Vertman.obj
.\obj\Debug\Weapdesc.obj
.\obj\Debug\Weapons.obj
.\obj\Debug\Worlddb.obj
.\obj\Debug\Zone.obj
.\obj\Debug\Tank.res
\cvs\hovis.win\bin\lib\hvAud2Dd.lib
\cvs\hovis.win\bin\lib\hvAud3Dd.lib
\cvs\hovis.win\bin\lib\hvCordsd.lib
\cvs\hovis.win\bin\lib\hvCored.lib
\cvs\hovis.win\bin\lib\hvCtrld.lib
\cvs\hovis.win\bin\lib\hvGr2Dd.lib
\cvs\hovis.win\bin\lib\hvGr3Dd.lib
\cvs\hovis.win\bin\lib\hvIod.lib
\cvs\hovis.win\bin\lib\hvLightd.lib
\cvs\hovis.win\bin\lib\hvMathd.lib
\cvs\hovis.win\bin\lib\hvModeld.lib
\cvs\hovis.win\bin\lib\hvObjsd.lib
\cvs\hovis.win\bin\lib\hvD3Dd.lib>
Creating command line "link.exe @C:\WINDOWS\TEMP\RSPE001.TMP" 
Compiling...
Tracks.c
D:\cvs\TANK.WIN\Tracks.c(363) : warning C4244: '=' : conversion from 'float ' to 'int ', possible loss of data
D:\cvs\TANK.WIN\Tracks.c(459) : warning C4244: '=' : conversion from 'float ' to 'int ', possible loss of data
D:\cvs\TANK.WIN\Tracks.c(474) : warning C4020: 'TrackLanded' : too many actual parameters
Linking...



tank.exe - 0 error(s), 3 warning(s)
app.mak and msdev.mak are the makefiles, in case you don’t want to use Visual Studio ;) They did use Linux in some places, as indicated by the shit.sh shell script in the German sound effects.
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

iff/titel.iff uncovers more problems finding a proper name (unless this is some inside joke I don’t get):

image.png
image.png (269.95 KiB) Viewed 499 times

So we have Wargasm, Tank, RRF 2025 …
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

bmf/cact2d.3ds is the actual source model for the according BMF file. Now we know they used 3D Studio for 3d modelling.

cact2d.png
cact2d.png (2.91 KiB) Viewed 495 times

bmf/temp.dxf is probably the actual source model for one of the helicopters. Someone having AutoCAD ready? MGonzales?

image.png
image.png (40.02 KiB) Viewed 486 times
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

gui/interf~1.flc can be opened with Gimp. Looks like a source file for the main menu which was left in by accident.

interf~1.png
interf~1.png (274.42 KiB) Viewed 495 times
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

mats/oldmats.zip is an actual backup of all materials in the game, from April 1998. If anyone ever wants to re-make an alpha version, this should be one of the first stops!

image.png
image.png (32.49 KiB) Viewed 494 times

Same for the animations backup in hmf/anims.zip.
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

I could do this all night, but I’m risking trouble with my wife :D

This is quite a lot to sink in already. I better stop here before I cram out my copy of Visual C++ 6.0 and open their tank.dsp project file …
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

Krishty wrote: 2022-Nov-20, 01:12I better stop here before I cram out my copy of Visual C++ 6.0 and open their tank.dsp project file …
Visual Studio 2019 can still open it, BTW :D

image.png
image.png (14.51 KiB) Viewed 466 times
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

Krishty wrote: 2022-Nov-20, 00:27iff/titel.iff uncovers more problems finding a proper name (unless this is some inside joke I don’t get):

image.png

So we have Wargasm, Tank, RRF 2025 …
I just happen to remember the other thread with developer quotes:
Krishty wrote: 2022-Oct-11, 22:00 Roger on Wargasm:
https://discord.com/channels/715120294918094858/715128081785946152/938554804576350258 wrote:Ah... Wargasm. The game with a name so terrible it almost killed the company.

[…]

Internally it was called "Tank". DID wanted to branch out from flight games and have a tank game (they had done a couple of space games, Epic and Inferno at that point). It struggled in terms of its direction for a while before becoming a more FPS and light sim game.

[…]

It had some pretty cool new tech and used the then new "Hovis" engine. Many of the programming team on it now work for D3T.
The multiplayer part was actually called Multiple Wargasm internally
mikew
Data Genius
Posts: 242

Post by mikew »

Wow! That's a lot of insight is such a short time. :)

I've just gone back to the CD to see if installing with a different language changes anything, but I don't think it's anything significant.
The main data file wargasm.xfs is unchanged. So if there's a .pdb file, then it's already in there.
mikew
Data Genius
Posts: 242

Post by mikew »

The speech wav files, at least those in English, are stored in 'speech.xfs' with an index file 'speech.ndx' for the 174 files.
It looks like 'foo.txt' in the top folder of the extracted file set contains the names of these files. Something for when I've nothing better to do...
mikew
Data Genius
Posts: 242

Post by mikew »

I can't remember a game so difficult to get running.
It sort of works in Wine, but there's a font problem meaning I can't read anything. Some random mouse clicking gets me to some action:
warg1.png
warg1.png (222.24 KiB) Viewed 25 times
...but I got blown up seconds after taking that screenshot.

On Windows 10 it crashes immediately.
If I don't have the CD in the drive, it will complain so I know the exe does start running at least. But with the CD, the program just stops without any hint as to why. Changing compatibility modes didn't make any difference.

IDA complains about 'imports' if I try and open it in that, and fails to disassemble. That's probably because the exe is compressed by something called 'Petite 1.3'.
cff_tank.PNG
cff_tank.PNG (38.41 KiB) Viewed 25 times
So, next step is to decompress it somehow...
User avatar
Krishty
Site Admin
Posts: 455

Post by Krishty »

mikew wrote: 2022-Nov-23, 21:13That's probably because the exe is compressed by something called 'Petite 1.3'.
Wow, that’s old. Oldest version I find on the archive is 2.2 from 1999.

I hate executable compressors. Apart from prolonging the startup time, they prevent some optimizations from the OS. A waste of time, really.
Post Reply