Jump to content

OptiDoom, my Doom port for 3DO.


Optimus

Recommended Posts

Wow nice, even though I don't have the means to try this out. It's just nice to see when consoles get the Doom port they truely deserve. Would love to see an improved Sega Saturn Port as well. :p

Share this post


Link to post

Minor proofreading:

Quote

basically in rare occasions sprites dissapear and reappear when the particles are spawned

Should be disappear, with one s and two p.

 

I don't have a 3DO so that's about all the feedback I can give, but that's an interesting project nonetheless.

Share this post


Link to post
On 12/11/2018 at 12:35 AM, taufan99 said:

Looks nice! Though I sorta find the process to run the port complicated.

 

I might consider releasing the ISO at some point (although not sure I can announce new releases at forums if it's full ISO and sounds like promoting piracy). I was conflicted when I took the decision because I thought it was more correct to release the way it's now, while at the same time reduces the exposure while few might suggest me "but the 3DO Doom is Abandonware". Also, one good thing with letting users learn how to extract CD contents, they can mod few stuff (just sound/music at the time, I think of trying a test with replacing with PSX sound effects, they are just AIFF) and that gives me idea to promote modding (allow people to throw into the CD new folders for mods, which I will try to read and load those resources instead of the original). The rest are in a big REZ file, but I wouldn't want users to have to extract that file (I have some tools to extract and write back REZ file, someone gave me from the 3DO community, maybe gotten from Rebecca, but it's too messy to work with these tools right now).

Edited by Optimus

Share this post


Link to post
23 minutes ago, Optimus said:

 

I might consider releasing the ISO at some point (although not sure I can announce new releases at forums if it's full ISO and sounds like promoting piracy). I was conflicted when I took the decision because I thought it was more correct to release the way it's now, while at the same time reduces the exposure while few might suggest me "but the 3DO Doom is Abandonware".

You could release some sort of IPS or XDelta patch against the original ISO instead. This way a user still needs to have a copy of the game that they've ripped, while protecting you legally since you're not actually releasing a modded ISO - just a pattern of bytes to be patched against a good ripped copy of the game in certain places.

 

Still won't exactly prevent piracy, but it's about the cleanest way to do it.

Share this post


Link to post
1 hour ago, Dark Pulse said:

You could release some sort of IPS or XDelta patch against the original ISO instead. This way a user still needs to have a copy of the game that they've ripped, while protecting you legally since you're not actually releasing a modded ISO - just a pattern of bytes to be patched against a good ripped copy of the game in certain places.

 

Still won't exactly prevent piracy, but it's about the cleanest way to do it.


Indeed that seems to be what the rom hacking community has made a consensus on. Works great for Super Metroid and Goldeneye hacks.

Share this post


Link to post

Yes. The only downside is that it would have to be against a known, good dump - checksum to dump against and all, otherwise, the bytes won't match up and stuff could get messy.

 

Either that or you just make multiple patches for multiple dumps.

Share this post


Link to post

Thanks, I didn't know about these tools, I will propose them if they are used frequently by the ROM hacking communities, I am wondering how well they compress the differences, making a compare between produced ISO and original has too much differences. I thought at some point to hack some code to do it myself, replace the byte differences, but maybe that's not so easy if there are too many differences are better methods and tools to already do that.

Share this post


Link to post
1 hour ago, Optimus said:

Thanks, I didn't know about these tools, I will propose them if they are used frequently by the ROM hacking communities, I am wondering how well they compress the differences, making a compare between produced ISO and original has too much differences. I thought at some point to hack some code to do it myself, replace the byte differences, but maybe that's not so easy if there are too many differences are better methods and tools to already do that.

Depends on the way the patcher patches stuff, but generally speaking patchers work by taking two files - an original to refer against, and the modified file, and it then creates a file that is just the differences between the two. This file is then what is distributed to the end user, and they, in turn, apply the patch file to a copy of the original file - and thus, your patch is distributed without you needing to provide a hacked ISO or whatever.

 

How big it is depends on both the extent of your changes and the original size of the media. Since we're talking a CD, theoretically the biggest a patch could be would be several hundred MB. In practice, though, much of the 3DO version's content is presumably untouched (like the music, for example), and anything that's identical in both files will thus be skipped outright.

 

From there a compression tool (like RAR or 7Zip) can probably squeeze a little more space down.

 

As a loose guess, I'd say you'd be looking at maybe 50-100 MB before some further compression via RAR or 7Zip, but without both a copy of 3DO Doom and a copy of your modified ISO, I couldn't say for sure. At a bare minimum I'd need to know dump sizes for the two versions, and even then, it's just a guess.

Edited by Dark Pulse

Share this post


Link to post
5 hours ago, Dark Pulse said:

Yes. The only downside is that it would have to be against a known, good dump - checksum to dump against and all, otherwise, the bytes won't match up and stuff could get messy.

 

Either that or you just make multiple patches for multiple dumps.

Finding goods dumps is insanely easy nowadays, especially with sites  like archive.org hosting most of the ReDump series. But still, up to you!

Share this post


Link to post
4 hours ago, DuCT said:

Finding goods dumps is insanely easy nowadays [...]

Based on that, a BIN/CUE dump of 3DO Doom is about 230 Megabytes, with the BIN having the following hashes:

  • CRC32: c238cd13
  • MD5: 58bd8257d9c1a759923195439245e01e
  • SHA1: e46733bb1401671ed76ca64894cd55b2098a57fa

I then followed through his steps, generated the OptiDoom ISO using it, and played it in an emulator to be fairly sure it worked properly.

 

I then used XDeltaUI to generate a XDelta patch.

 

End result? OptiDoomPatchBIN.xdelta, 2.57 MB. Not quite as small as his zip that contained the programs for how to do it, but much less guesswork for an end-user.

 

All the user has to do to "install" it is to take the 3DO Doom BIN, fire up XDeltaUI, tell it where the patch is, give it the source BIN to apply it to, and tell it where to spit the output to. Voila, no more end-user having to mess with tools or commandlines or batchfiles - just apply the XDelta patch, save the output as OptiDoom.iso, and you're all set!

 

Mind you, for this to work, the BIN must match those hashes exactly. Anything else - like a BIN converted to an ISO, or some other exotic rip format - won't work, you'd need to generate the new patch against that.

 

So I did that as well, converting the BIN to an ISO via WinBin2ISO, which spit out an ISO with the following hashes:

  • CRC32: 25e57d18
  • MD5: b4d6c959aa53b6e5a8bb4d02791f4761
  • SHA1: 63f622760ef6bd0f4bc8ad230d6866e55614f248

A patch against that BIN converted to ISO is even smaller - 2.20 MB. Like with the BIN version above, as long as your ISO matches those hashes, use the ISO version of the patch, and you're all set.

 

Of course, it's also only good against the USA versions, as that's what that place has. According to The Cutting Room Floor, there IS a Japanese release of 3DO Doom, against which a patch created off the US version would be useless unless the Japanese version of 3DO Doom was 100% identical (to the byte) to the US version. Without a dump of that, we can't be sure.

OptiDoomPatchBIN.7z

OptiDoomPatchISO.7z

Edited by Dark Pulse
Might as well attach them.

Share this post


Link to post

Wow, thanks!

 

I'll upload these on my site soon enough.

 

Thankfully there are not many dumps of Doom 3DO out there, at most places it's only a USA version as BIN, but also a redump ISO at another place. I couldn't even find the Japanese version.

Share this post


Link to post
16 minutes ago, -TDRR- said:

Is it easy to make maps for this? 3DO Doom 2 sounds nice.

 

Another 3DO coder was working on this, at least trying to port extra code, monsters, resources from Doom 2.

https://www.youtube.com/user/VersusVeEs/videos

He got into some trouble because of memory problems.

 

Some of them are half finished, there is a video with Doom 2 MAP01 but most textures missing (I think convert Doom 2 maps to Doom 1 maps and then trying to retexture by only using the equivalent texture resources from Doom 3DO would kinda work too). Not sure if everything from the new resources can fit in limited 3DO memory for a Doom 2 remake (and later maps would be more horendous to the speed. I am more focused on improving Doom 1 for now)

Share this post


Link to post
34 minutes ago, Optimus said:

Some of them are half finished, there is a video with Doom 2 MAP01 but most textures missing (I think convert Doom 2 maps to Doom 1 maps and then trying to retexture by only using the equivalent texture resources from Doom 3DO would kinda work too). Not sure if everything from the new resources can fit in limited 3DO memory for a Doom 2 remake (and later maps would be more horendous to the speed. I am more focused on improving Doom 1 for now)

It doesn't have to be 100% like Doom 2 of course, but like 32x Doom 2 or Jaguar Doom 2 would be nice too. May get around to doing MAP01 to MAP07 some time.

EDIT: Like this

 

Edited by -TDRR-

Share this post


Link to post
8 hours ago, Optimus said:

Wow, thanks!

 

I'll upload these on my site soon enough.

 

Thankfully there are not many dumps of Doom 3DO out there, at most places it's only a USA version as BIN, but also a redump ISO at another place. I couldn't even find the Japanese version.

As long as that ISO matches the hashes that I said above, the ISO version patch I attached in my post will work.

 

I use a little program called HashCalc to check hashes on stuff.

 

The Japanese version is an unknown unless someone finds it and dumps it though. So you will either have to make sure the end-user checks their files, or if you want to get a little more fancy (or integrate this all into some program you run), you'll want to code it to check the hashes and refuse to patch anything that doesn't match them up.

Share this post


Link to post
1 hour ago, -TDRR- said:

It doesn't have to be 100% like Doom 2 of course, but like 32x Doom 2 or Jaguar Doom 2 would be nice too. May get around to doing MAP01 to MAP07 some time.

 

 

Yes, some of the earlier maps could easily be redone, even the later maps could be split in half if necessary.

I am surprised to see there is interest in making maps on 32x Doom and how much smoother the 32x version moves (unless I am looking at overclocked emulator, but even in the original system I remember it was smoother and more playable).

Share this post


Link to post
  • 7 months later...

Second version is out!

 

http://bugothecat.net/releases/3DO/optidoom/optidoom_main.html

 

Mostly fiddled with the rendering engine, very small improvements still, it's an uphill battle that is very slow to improve but interesting at least.

 

Have a new wall render replacing the wall columns with quad polygons using the CEL engine (the original would still use the CEL engine but every quad polygon would be an individual column with 1 pixel width) trying to only subdivide a wall segment where the texture repeats/tiles at X and Y. Sometimes the frame rate is the same as the original, sometimes I might win 1 or 2 fps, few times it's 3-5 or more fps but only when framerate is already about 15, so the very slow single digit fps cases are still a pain. New rendering modes for full unshaded flat and gimmicky wireframe rendering (you can also see the overdrawing on the original 3DO engine, I realized it does render the walls back to front and there is a fair amount of overdrawing sometimes, while if I am not mistaken on PC doom was front to back with zero overdrawing). There is a mod for PSX sounds too. And improved blood particles.

 

I haven't made xdelta patches this time yet (maybe I will soon). But the process with the 3DO tools is quite different and much easier. I found some alternative command line tools and all one needs is to throw the commercial ISO as doom.iso in a folder and run the batch file, if things are correct then optidoom.iso will come out. I even did something similar on the github project for anyone who wants to try (but they would also need the ARM SDT and 3DO SDK which I will make a tutorial in the future how to setup for 3DO dev), previous not providing the data files at all on the project, but now they can throw the CD iso and it will be extracted, so that the whole port can be build back after compiling and encrypting back to iso with the new executable and additional files.

 

 

 

Edited by Optimus

Share this post


Link to post
  • 3 weeks later...
On 8/8/2019 at 8:55 PM, LadyVader1138 said:

Has anyone sent this to "Burger" Becky herself yet?

 

I have been only briefly talking with Becky through youtube back when I was working with the first version, haven't talked through email or other means. Maybe I should find her email and send her a link, but maybe she knows.

Share this post


Link to post
  • 1 year later...

I've decided to release the next version, called v0.2b as I didn't managed to get into the bigger goals for v0.3 yet (mainly replacing the floor/ceiling visplane rendering method with something entirely different) but added a lot of new rendering features that can help with performance a bit more in exchange for quality. The old way of rendering double pixel wall columns would only go through one part of the code, but didn't work well with the first pass through wall columns used for the visplane calculation, so it didn't gave as much speed. But this method is literally rendering the game in half width/height windows and then scaling back using the CEL hardware of the 3DO capable of rendering the full framebuffer as a texture with little overhead. So there are various pixel scaler modes like 2x1, 1x2 and 2x2, a fit to screen even for tiny windows.

 

You can kinda approximate similar configurations like the SNES, GBA, Jaguar (who all really went for the pixel double on X if you look at it, and some were missing depth lighting or floor texture) and stretch it back to full screen, and see 3DO Doom wasn't as much slower at the same detail levels as these. And play like this for a better experience (not 5-6fps at worse case but 10-12 and approaching 15-20+ in normal situations). I also added frame limiters to avoid irregular frame rates. And a lot of other gimmicks for fun (Doom on a 3D Cube, distort screen, motion blur,. as I now have the framebuffer back in offscreen texture). Tried to optimize memory a bit (we were hitting some strange cases where Doom would look as it was trying to load/release sprite resources constantly from CD in an endless loop because of low memory) and give options in the starting mod menu, to not load some extra stuff to improve in memory, even reduce max visplanes from default 64 to 32 (Doom doesn't seem on 3DO at least to reach over 32,. most levels are at max 15-23 in few cases) and a check to just stop adding visplanes (and so you get HOMs in the distance if ever) to avoid crashing.

 

 

I have released this version here http://bugothecat.net/releases/3DO/optidoom/optidoom_main.html

As always, folder with few files where you have to provide the commercial 3DO Doom ISO yourself and just run the batch file to create optidoom.iso

The 0.3 is postponed for next year (I need time and motivation to figure out the tougher goals which may hopefully give the good speed to original Doom without resolution quality degradation), however it's possible to release sooner a 0.2c before the end of this year to fix some minor issues and new things that might come after more testing.

Share this post


Link to post

Insane performance upgrade with the new options! It's really fast considering it only has a 12.5MHz cpu. Maybe you can get more performance by reducing pressure in the cpu, there are some points where Vanilla Doom isn't using optimal code (don't know if the 3DO version has those fixed). GBADoom and FastDoom have lot's of optimizations of this kind, maybe it can be useful.

 

I also discovered recently that old compilers (such as Watcom) doesn't optimize code as good as newer ones (GCC). Using newer ones helped me generate more optimized ASM code for integer multiplication and division replacing them with other instructions (those are really slow instructions in 386 processors). Godbolt has an online C compiler that automatically shows the generated ASM code for multiple compilers, even for ARM architecture! https://godbolt.org/

Edited by viti95

Share this post


Link to post
5 hours ago, viti95 said:

Insane performance upgrade with the new options! It's really fast considering it only has a 12.5MHz cpu. Maybe you can get more performance by reducing pressure in the cpu, there are some points where Vanilla Doom isn't using optimal code (don't know if the 3DO version has those fixed). GBADoom and FastDoom have lot's of optimizations of this kind, maybe it can be useful.

 

I also discovered recently that old compilers (such as Watcom) doesn't optimize code as good as newer ones (GCC). Using newer ones helped me generate more optimized ASM code for integer multiplication and division replacing them with other instructions (those are really slow instructions in 386 processors). Godbolt has an online C compiler that automatically shows the generated ASM code for multiple compilers, even for ARM architecture! https://godbolt.org/

 

Yes, I have already identified some parts that could be improved, I am not stuck yet without solutions but just need to motivate myself to focus studying more on these parts and get some good idea instead of fixing other parts or adding effects. The most wasteful part is with the visplanes, especially the later part where vertical edges are converted to horizontal, but I am juggling with other ideas in my mind of how to avoid the visplanes or calculate them in a more effecient way. Just need to get back into it and focus on this particular part.

 

Is there a GBADoom source code ever released?

 

As for GCC, I was trying to use it, others have tried in the 3DO community, there are some issues. The official 3DO API doesn't come with source code, just binaries and header files. And these binaries have different format. I could succeed compiling most C code from Doom or other 3DO projects, but fail to link. I was kinda discussing this with other coders on the 3DO and not, but not sure if there is an easy solution. I have no idea about compilers to get a guess whether there is an easy way to build with gcc and link the 3DO API or it's an enormous task. At the same time it would be an enormous task to research and rewrite low level functions for the 3DO recompiled on gcc or something. Meanwhile, looking at the code ARMCC produces, it seems quite optimized (but I would certainly want to check whether there is any gain on gcc) possibly because ARM has more register and is easier to be optimized by the compiler than X86.

Share this post


Link to post
1 hour ago, Optimus said:

Is there a GBADoom source code ever released?

If you mean the first Doom, IIRC it was derived off the JagDoom source code. I don't think the actual GBA source has ever been released though, but I'd imagine that you could begin to whittle down the differences based on those and a debugger, perhaps.

 

If you're talking Doom II, that used a GBA engine called Southpaw, not the actual Doom engine, so that will be of relatively little use.

Edited by Dark Pulse

Share this post


Link to post

I meant GBADoom by @Doomhack, it's an impressive port that is able to get 35 fps in most cases (GBA only has 256Kb of WRAM, 32Kb of IWRAM and 96Kb of VRAM, and a 16.6 MHz ARM7TDMI cpu). It's very well documented and the commit log is pretty explanatory itself.

 

https://github.com/doomhack/GBADoom

 

EDIT: Forgot to mention MBF (Marine's Best Friend) by Lee Killough, also has implemented good optimizations to the original Vanilla Doom.

Edited by viti95

Share this post


Link to post
On 10/6/2020 at 11:06 AM, Optimus said:

And a lot of other gimmicks for fun (Doom on a 3D Cube, distort screen, motion blur,. as I now have the framebuffer back in offscreen texture).

I can't access your site atm, but are these things mentioned on your site? Because distortion and motion blur seem like really epic effects and unique to this port.

 

In any case Optidoom is highly impressive from day one.

Edited by Redneckerz

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...