The game finally surfaced on the Internet, it was a Japan-exclusive edition that seems to have been edited in a very limited quantity.
(hint: The Iso Zone, but your favorite search engine will not show it, so use their search box instead)
In VirtualBox the game will run so fast that you can't do anything actually !
(requires Win95 compatibility level)
In Windows 10 the game can be started if you copy DPLAY.DLL next to the EXE, and DPWSOCK.DLL to SysWOW64 both from .\SETUP\DIRECTX. It requires Win95 compatibility, 640x480.
Note: for both environment installation seems impossible as the DX installer will return a wrong error code even though it succeeded when you try it manually, no problem, just copy full content to something like C:\Twisted Metal.
Still it won't run,
(trying to run in DxWnd, shows the same message)
Now fiddling a bit with compatibility (without DxWnd), the following appears:
Now tried again with DxWnd but even though Win95 compatibility is set, it doesn't seem to enable that B0000 memory emulation hack you can find in MS ACT.
If you have some time to take a look, that'd be great !
Thanks :)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
P.s. it seems a copy is hosted also on 3D Shooter Legends and another somewhere in Russia....
P.s.2: the "B0000 memory emulation hack" is somehow similarly replicated in DxWnd by the "Compat. / Reserve legacy memory segments" flag ... I'll try it.
Last edit: gho 2017-04-07
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Been trying to decipher file formats, got images up though I expect lot of trouble in 3D models, from what I know of the PSX version, it's PMD format (obviously for Sony !): the first (and worst) format in the SDK where it's (mostly) compiled pointers that defines a 3D model X(
It's incredible how these devs and IDA represented what turned out to be a simple paletizzed RGB555 container ... it took me the whole night.
Actually it's now a couple of years I've been working on a new engine for Wipeout using Unity, but got in the mud over time ... taking a little break by looking at other games, though reason tells me that I'm not likely to pull out something out of it in 15 days.
I'd really love to help you out but I really don't know much about Asm and DX in general (when I use IDA, I use HexRays which produces pseudo C from which along a hex editor and calculator I do all my findings).
Something is starting to work, though things are not as simple as a single screenshot may let you think ...
Too bad I'm out this weekend, I'll wokg on this monday (sic!)
p.s. waiting for a chance to do it myself, have you tried yet to dump the textures through dxwnd?
I doubt it may work for such an early 3d game, but if it doesn't, maybe I can fix it.
I got it working, though with some little pain .... let's see:
1) the compatibility with win95 could be helpful, but unfortunately makes the game impossible to hook for DxWnd, so it may be necessary to eliminate it. Too bad, because it would be useful
2) the game attempts to write at address 000B0000 and 000B0001 (that is a WORD or 2 bytes) and DxWnd can't free that memory area, but the operation is not vital and the handle exception flag avoids the game to stop, but we have to bare two error dialogs at the game startup
3) the game can't open two movie files and keeps complaining. In the game menu you have to quickly select an option before the game shows the error dialog again!
Apart from all this, using the attached export it is possible to enjoy the game, though the graphics does not make you cry by amazement. :)
Next steps could be trying to fix the problems, for instance one crazy idea could be to hook the system routine that shows the error dialogs and neutralize it. Is it too weird or not? Let's see ...
This VERY EXPERIMENTAL release of dxwnd.dll completely suppresses any dialog box making it easier to control the game.
Of course, this feature should be made optional by means of some selection flag and, better than this, should become useless as soon as we find how to play movies (wrong path or wrong codec?) and how to make memory location 0000B000 enabled for writing.
Apart from this, the game shows another small problem: all game menus are timed out with a terribly quick timeout, you have no more than a second to make your choice before the game proceeds further on.
I've made some attempts on both my pc, on Win7 and on Win10. I must say that the situation is quite different on the two platforms, so that it seems that also solutions have to be different:
Win 95 compatibility: on Win7, that prevent DxWnd to work, so it must be avoided. On Win10, on the contrary, Win 95 compatibility works with DxWnd and includes the shim to write at 0x0000B000 memory location.
write at 0x0000B000 memory location: on Win7 using the "handle exception flag" the exception is bypassed with no harm for the program. On the contrary, on Win10 the exception does terminate the program, so the Win95 compatibility shim is necessary
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
For the video I don't know what you did but actually they are skipped, I found IR41_32.DLL and the video plays in WMP so I really can't tell what could be wrong.
For the timer, I think you just consider per-game patches just like glrage's author, it took me around 10 minutes to fix this issue by just specifying 5 minutes instead of 60 seconds:
Here is a new beta release for your delight.
First, let me explain what I did: I had a v2.04.23 release with a couple of serious bugs and the plan to make many interventions for Twisted Metal. So, to avoid confusion and breaking a stable release, I uploaded to SF a v2.04.24 release with ONLY the fix of the two bugs, and soon started diggin new code in this beta.
Here is what's new:
1) a not working flag (Compat. / Write on 0x000B0000) to enable writing to 0x000B0000: despite my attempts to use VirtualProtect to enable memory writing, it seems that this logic doesn't work and the Win95 compatibility setting is still necessary, but who knows?
2) a working flag (Libs / Suppress message dialogs) that prevents any MessageBox dialog to appear, useful to eliminate some annoying warning messages.
3) a patch to stretch movies to the whole window when setting the "Libs / Remap MCI coordinates" flag.
Still to do, I wish to patch the LoadLibrary call so that it will no longer necessary to copy the dpwsock.dll file to C:\WINDOWS.
About movies, then, they weren't played though I mounted the game CDRom, and curiously I made them working by copying them in the root of the hard drive disk where the game is installed: so the game is in D:\games\twisted and the movies are moved in D:\MOVIES\TWISTED.
The hint about timers is quite interesting. Patching the timers is a good solution, but I'd like to understand why 60 seconds are not 60 seconds! Is this game assuming that the CPU clock has a fixed frequency? That was a technique abandoned after the first 1MHz IBM PC, when PC clones were produced with all sort of clock frequencies ...
I fear that this game will keep me busy for a little while yet!
I don't know what you did but this works even better, it's VERY smooth in-game now :)
That's right, as soon as I've copied MOVIES to \ they played instantly !
Here are a few interesting facts about the game:
I've been busy trying to rebuild a 'proper' ISO which include CD tracks, always wondered why there were clicks and pops on some tracks and here's the cause: tracks are RIFF WAVE but some in fact are AIFF with Middle-Endian encoding used in old Macintosh :), and this seems to have messed up their real start/end as what we'd hear in fact were these obscure/outdated chunks. So basically I extracted the proper amount of samples and rebuilt a mixed-mode CD with them. (that was funny, btw I'd love to know how they show DA tracks as files too, like in Wipeout and some other games). DxWnd does play CDDA fine (get in touch if you want that proper image), I'd say for the ultimate old look 'n feel, it should emulate the access rate like 300ms like on old CD units, they play quite abruptly otherwise :)
Weird resolutions are used in the game, 160x120 (low res.), 320x400 (hi-res), 320x480 (videos), while deciphering textures, indeed they are 160x120. Ok, PCem could be wrong but I don't see why, deserves a definitive answer by checking in IDA ... which leads me to, can't you add an auto-resize eventually with a scale factor for the window with DxWnd to get a pixel-perfect view ?
Got the default registry by installing in Win98, the game might simply choke on that, inferring some default path for the video
For the speed, there are calls to QueryPerformanceCount and timeGetTime but setting a breakpoint there is never hit, right now I must untick Win95 compat in Explorer for the game to run with DxWnd, was wondering, does DxWnd enable EmulateSlowCPU, i.e. does ticking Win95 compat exactly does the same as Windows do ?
Ok, I wanted to submit NFSSE to you but I'll let you have some rest first :D
In the "Music" subfolder of the game install folder. You have to create that folder by yourself and copy the files there having care that their filenames are in the form of "tracknn.ogg" where nn starts from 02 and follows. Better yet, read the "Virtual CD Audio" tutorial that you can find in the DxWnd Help pages (Help -> View help).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wow, quite a lot of news!!
Just a few feedbacks, I'll be back on this later:
> can't you add an auto-resize eventually with a scale factor for the window with DxWnd to get a pixel-perfect view ?
It is an idea. Currently, if you set W & H fields to 0, 0 you should get a 1:1 perfect scale, but I admit that @320x400 it's not that useful. But if you also set "DirectX / Fast 2X bilinear" you should get a perfect 2:1 ratio. For bigger ratios like a 3:1 or 4:1 there's some work to do.
> get in touch if you want that proper image
"If"? There's such a handy SF PM to drop links ....
> I don't know what you did but this works even better, it's VERY smooth in-game now
Smoothness could come from DirectX(2) flags that force VSync & WAIT options, I set them all but trying them one by one should highlight the effective one. Also, you can use FPS limitation to reduce the game speed a little.
> ... does DxWnd enable EmulateSlowCPU ...
The closest thing is the "Timing / CPU slow down" that interrupts the game with idle periods, but due to the Windows timer limitations it is not possible to get very short time slices, so using a big slow-down ratio may produce a choppy behaviour. I intentionally didn't use other techniques like (I believe) MoSlo because they are smoother, but very CPU consuming.
Last edit: gho 2017-04-10
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Yes, it's cake topping here, but some of the issues could easily be present in other games, so I'm still having a look ...
In particular, this issue of accessing memory at 0x000B0000, it is so important that MS released a dedicated shim in its Win95 compatibility option. What is it for, and how to emulate it?
Curiously, I diidn't find much documentation about this address. As far as I could remember, maybe this is related to some VGA reserved memory pages where old DOS programs were putting their hands to do the craziest tricks, but maybe I'm wrong. In any case, it seems that this address can't be made readable or writable in any way, so let's continue this way (intercept exception and suppress message dialog box).
Another weird thing is that whenever I set the game at high detail level (or I do something else, I'm not sure ...) I get the game in the full window,but when I exit and start the game again I find the combat arena shrinked into a smaller portion of the window, like in the screenshot. Is it possible to avoid this?
That's what I think as well, the B0000 monochrome area, maybe games assumed that since you're on Win95 which probably required a color monitor, that 16kb area was free to use for whatever.
So, not VGA-related and Win95 in the end was more or less a DOSSHELL on steroids.
Can't you for example, emulate that whole portion and act as a proxy to get/set values in it ? Or do games act in such as crazy that it won't be possible at all ?
For the size apparently, when you go from low to high resolution, it will not resize the view, use the + key to enlarge it.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
> Can't you for example, emulate that whole portion and act as a proxy to get/set values in it ?
That would be possible if made with a specific assembly instruction, something like this
MOV DWORD PTR DS:[000B0000], EAX
Of course with some pattern matching for any address of the 000Bxxxx type and any register. Unfortunately, the game made it the hard way: 000B0000 is stored into a pre-assigned data segment and the assembly instruction fetches the destination address from there, so that there is no evident reference to the 000B0000 number anywhere in the assembly, and finding the target instruction would require step-by-step runtime debugging, which would make the game quite too slow.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The game finally surfaced on the Internet, it was a Japan-exclusive edition that seems to have been edited in a very limited quantity.
(hint: The Iso Zone, but your favorite search engine will not show it, so use their search box instead)
In VirtualBox the game will run so fast that you can't do anything actually !
(requires Win95 compatibility level)
In Windows 10 the game can be started if you copy DPLAY.DLL next to the EXE, and DPWSOCK.DLL to SysWOW64 both from .\SETUP\DIRECTX. It requires Win95 compatibility, 640x480.
Note: for both environment installation seems impossible as the DX installer will return a wrong error code even though it succeeded when you try it manually, no problem, just copy full content to something like C:\Twisted Metal.
Still it won't run,
(trying to run in DxWnd, shows the same message)
Now fiddling a bit with compatibility (without DxWnd), the following appears:

Now tried again with DxWnd but even though Win95 compatibility is set, it doesn't seem to enable that B0000 memory emulation hack you can find in MS ACT.
If you have some time to take a look, that'd be great !
Thanks :)
Here are a few command line arguments found out in the EXE:
/autoplay_id
/no_cdrom_volume_changes
/no_wave_volume_changes
/16_bit_movies
/no_double_movies
/max_update_rate
Well I've only really looked at the most interesting, the last one, but adding 15, 30 or 0 at the end produced no effect.
Unfortunately since the game is for Japan, the HLP file won't open in an English XP, a quick look using a text editor shown none of the above anyway.
Wow, a challenging one!
Thank you for the tips.
P.s. it seems a copy is hosted also on 3D Shooter Legends and another somewhere in Russia....
P.s.2: the "B0000 memory emulation hack" is somehow similarly replicated in DxWnd by the "Compat. / Reserve legacy memory segments" flag ... I'll try it.
Last edit: gho 2017-04-07
Ok I'll try again tomorrow !
Been trying to decipher file formats, got images up though I expect lot of trouble in 3D models, from what I know of the PSX version, it's PMD format (obviously for Sony !): the first (and worst) format in the SDK where it's (mostly) compiled pointers that defines a 3D model X(
It's incredible how these devs and IDA represented what turned out to be a simple paletizzed RGB555 container ... it took me the whole night.
Actually it's now a couple of years I've been working on a new engine for Wipeout using Unity, but got in the mud over time ... taking a little break by looking at other games, though reason tells me that I'm not likely to pull out something out of it in 15 days.
These guys did an incredible job in reversing the content of Hi-Octane @ https://github.com/movAX13h/HiOctaneTools
I'd really love to help you out but I really don't know much about Asm and DX in general (when I use IDA, I use HexRays which produces pseudo C from which along a hex editor and calculator I do all my findings).
Cheers !
Something is starting to work, though things are not as simple as a single screenshot may let you think ...
Too bad I'm out this weekend, I'll wokg on this monday (sic!)
p.s. waiting for a chance to do it myself, have you tried yet to dump the textures through dxwnd?
I doubt it may work for such an early 3d game, but if it doesn't, maybe I can fix it.
Last edit: gho 2017-04-08
I got it working, though with some little pain .... let's see:
1) the compatibility with win95 could be helpful, but unfortunately makes the game impossible to hook for DxWnd, so it may be necessary to eliminate it. Too bad, because it would be useful
2) the game attempts to write at address 000B0000 and 000B0001 (that is a WORD or 2 bytes) and DxWnd can't free that memory area, but the operation is not vital and the handle exception flag avoids the game to stop, but we have to bare two error dialogs at the game startup
3) the game can't open two movie files and keeps complaining. In the game menu you have to quickly select an option before the game shows the error dialog again!
Apart from all this, using the attached export it is possible to enjoy the game, though the graphics does not make you cry by amazement. :)
Next steps could be trying to fix the problems, for instance one crazy idea could be to hook the system routine that shows the error dialogs and neutralize it. Is it too weird or not? Let's see ...
Last edit: gho 2017-04-08
This VERY EXPERIMENTAL release of dxwnd.dll completely suppresses any dialog box making it easier to control the game.
Of course, this feature should be made optional by means of some selection flag and, better than this, should become useless as soon as we find how to play movies (wrong path or wrong codec?) and how to make memory location 0000B000 enabled for writing.
Apart from this, the game shows another small problem: all game menus are timed out with a terribly quick timeout, you have no more than a second to make your choice before the game proceeds further on.
I've made some attempts on both my pc, on Win7 and on Win10. I must say that the situation is quite different on the two platforms, so that it seems that also solutions have to be different:
Win 95 compatibility: on Win7, that prevent DxWnd to work, so it must be avoided. On Win10, on the contrary, Win 95 compatibility works with DxWnd and includes the shim to write at 0x0000B000 memory location.
write at 0x0000B000 memory location: on Win7 using the "handle exception flag" the exception is bypassed with no harm for the program. On the contrary, on Win10 the exception does terminate the program, so the Win95 compatibility shim is necessary
Amazing, it just works !!!!!!!!!!!!
For the video I don't know what you did but actually they are skipped, I found IR41_32.DLL and the video plays in WMP so I really can't tell what could be wrong.
For the timer, I think you just consider per-game patches just like glrage's author, it took me around 10 minutes to fix this issue by just specifying 5 minutes instead of 60 seconds:
At offset 297494,
68c02709 == push 927c0h == 600000 == 60 seconds
68c0c62d == 3000000 == 5 minutes
There you are, you can have a coffee while in the menu :)
PS: this does not translate to 5 real minutes in fact
Another interesting aspect of patching is that it opens the doors to users to make their own, what would eventually help you out in the end.
(but I perfectly understand that you'd prefer a cleaner solution !)
Here is a new beta release for your delight.
First, let me explain what I did: I had a v2.04.23 release with a couple of serious bugs and the plan to make many interventions for Twisted Metal. So, to avoid confusion and breaking a stable release, I uploaded to SF a v2.04.24 release with ONLY the fix of the two bugs, and soon started diggin new code in this beta.
Here is what's new:
1) a not working flag (Compat. / Write on 0x000B0000) to enable writing to 0x000B0000: despite my attempts to use VirtualProtect to enable memory writing, it seems that this logic doesn't work and the Win95 compatibility setting is still necessary, but who knows?
2) a working flag (Libs / Suppress message dialogs) that prevents any MessageBox dialog to appear, useful to eliminate some annoying warning messages.
3) a patch to stretch movies to the whole window when setting the "Libs / Remap MCI coordinates" flag.
Still to do, I wish to patch the LoadLibrary call so that it will no longer necessary to copy the dpwsock.dll file to C:\WINDOWS.
About movies, then, they weren't played though I mounted the game CDRom, and curiously I made them working by copying them in the root of the hard drive disk where the game is installed: so the game is in D:\games\twisted and the movies are moved in D:\MOVIES\TWISTED.
The hint about timers is quite interesting. Patching the timers is a good solution, but I'd like to understand why 60 seconds are not 60 seconds! Is this game assuming that the CPU clock has a fixed frequency? That was a technique abandoned after the first 1MHz IBM PC, when PC clones were produced with all sort of clock frequencies ...
I fear that this game will keep me busy for a little while yet!
I don't know what you did but this works even better, it's VERY smooth in-game now :)
That's right, as soon as I've copied MOVIES to \ they played instantly !
Here are a few interesting facts about the game:
Ok, I wanted to submit NFSSE to you but I'll let you have some rest first :D
Hi there! I am a twisted metal fan too can you give me please the iso of this game with the music ? thx in advance.
Uhm, the game ISO can be found on the web, but I don't have the converted audio tracks. Let me see if I can extract them ....
Get them here ...
https://www.4shared.com/rar/R6P6TOotca/Twisted_Metal_Music.html
Where exactly do you put the music files?
In the "Music" subfolder of the game install folder. You have to create that folder by yourself and copy the files there having care that their filenames are in the form of "tracknn.ogg" where nn starts from 02 and follows. Better yet, read the "Virtual CD Audio" tutorial that you can find in the DxWnd Help pages (Help -> View help).
Wow, quite a lot of news!!
Just a few feedbacks, I'll be back on this later:
> can't you add an auto-resize eventually with a scale factor for the window with DxWnd to get a pixel-perfect view ?
It is an idea. Currently, if you set W & H fields to 0, 0 you should get a 1:1 perfect scale, but I admit that @320x400 it's not that useful. But if you also set "DirectX / Fast 2X bilinear" you should get a perfect 2:1 ratio. For bigger ratios like a 3:1 or 4:1 there's some work to do.
> get in touch if you want that proper image
"If"? There's such a handy SF PM to drop links ....
> I don't know what you did but this works even better, it's VERY smooth in-game now
Smoothness could come from DirectX(2) flags that force VSync & WAIT options, I set them all but trying them one by one should highlight the effective one. Also, you can use FPS limitation to reduce the game speed a little.
> ... does DxWnd enable EmulateSlowCPU ...
The closest thing is the "Timing / CPU slow down" that interrupts the game with idle periods, but due to the Windows timer limitations it is not possible to get very short time slices, so using a big slow-down ratio may produce a choppy behaviour. I intentionally didn't use other techniques like (I believe) MoSlo because they are smoother, but very CPU consuming.
Last edit: gho 2017-04-10
Ok I didn't know, PM sent.
I think you've already got it working well enough, at this point it's the cake topping :D
Thanks!
Yes, it's cake topping here, but some of the issues could easily be present in other games, so I'm still having a look ...
In particular, this issue of accessing memory at 0x000B0000, it is so important that MS released a dedicated shim in its Win95 compatibility option. What is it for, and how to emulate it?
Curiously, I diidn't find much documentation about this address. As far as I could remember, maybe this is related to some VGA reserved memory pages where old DOS programs were putting their hands to do the craziest tricks, but maybe I'm wrong. In any case, it seems that this address can't be made readable or writable in any way, so let's continue this way (intercept exception and suppress message dialog box).
Another weird thing is that whenever I set the game at high detail level (or I do something else, I'm not sure ...) I get the game in the full window,but when I exit and start the game again I find the combat arena shrinked into a smaller portion of the window, like in the screenshot. Is it possible to avoid this?
Last edit: gho 2017-04-11
That's what I think as well, the B0000 monochrome area, maybe games assumed that since you're on Win95 which probably required a color monitor, that 16kb area was free to use for whatever.
Actually it was for MDA, Hercules and CGA:
https://books.google.fr/books?id=Hyl8SA1eHzIC&pg=PA132&lpg=PA132&dq=monochrome+area+b8000&source=bl&ots=zLcJOKRIT6&sig=Q7bvNrGy_lnu9AmeNTsa4X97_R0&hl=fr&sa=X&ved=0ahUKEwj3udOH4ZzTAhXC1xoKHRpUDf0Q6AEIJTAA#v=onepage&q=monochrome%20area%20b8000&f=false
http://www.philipstorr.id.au/pcbook/book3/videosys.htm
So, not VGA-related and Win95 in the end was more or less a DOSSHELL on steroids.
Can't you for example, emulate that whole portion and act as a proxy to get/set values in it ? Or do games act in such as crazy that it won't be possible at all ?
For the size apparently, when you go from low to high resolution, it will not resize the view, use the + key to enlarge it.
> Can't you for example, emulate that whole portion and act as a proxy to get/set values in it ?
That would be possible if made with a specific assembly instruction, something like this
Of course with some pattern matching for any address of the 000Bxxxx type and any register. Unfortunately, the game made it the hard way: 000B0000 is stored into a pre-assigned data segment and the assembly instruction fetches the destination address from there, so that there is no evident reference to the 000B0000 number anywhere in the assembly, and finding the target instruction would require step-by-step runtime debugging, which would make the game quite too slow.
Okay !