Crusader outside of DOS? There's a chance...

E

Exsufflicate

Guest
G'day.

(My apologies if this has already been posted somewhere)

Sometime last year I stumbled across a program called "Pentagram". It's basically an engine used to run Ultima 8, so far the group behind it has done a fantastic job and you can play most of Ultima 8, there's a few flaws, but hey, somethings better than nothing.

Anyway. Ultima 8 uses the same engine as Crusader No Remorse & No Regret (easy way to tell, does it take 5 minutes to stop falling off a tiny box? if it does, you're playing a game powered by the same engine Crusader and Ultima 8 used!) and it is in the developers intention to one day, get Crusader running in Pentagram as well! Here's a quote from their FAQ.

Since a modified version of the Ultima 8 engine also powered the two Crusader games (Crusader: No Remorse and Crusader: No Regret) our ultimate goal is to be able to run those two as well.

They're still working on it, adding little bits and pieces, hopefully we'll see the update that says Crusader is playable on the Pentagram engine one day!

Oh and here's a link to their site if you wish to find out more.
http://pentagram.sourceforge.net/
 
Yeah, I also saw that program. I really hope it comes out... That'd be so great.


By the way, WELCOME!  :)
 
I saw this a year ago. One nice thing for me now to see some "aggressive" answers in the FAQ towards the status of Crusader support have been removed by the devs.
Very exciting screen shots. But the program mainly concentrates on Ultima 8. For Crusader, all I can say is it's too far from operational level compared to DOSBox.
Nevertheless, nice post to remind me of Pentagram, a game engine for running Ultima 8. And judging from the change log, it's under active development. I expect it to be more efficient than the general-purposed DOSBox. 
 
I just read some stuff on the Pentagram Program/engine. Things seem to be going quite allrighty. Now I'm waiting to see updates regarding the crusader series!
 
Well if I remeber correctly someone created a EXE patcher for Ultima Pagan that allowed it to run in windows. Now since Crusader used a modifed version of the pagan engine it would in theroy be possible to patch the crusader.exe file to make the same changes and thus play crusader in windows.

If I remeber correctly I did see a list somewhere of the hexdecimal addressesthat were changed, my plan was to get a copy of the pagan.exe file and find out extactly what was changed and then apply the same changes to to crusader. Once you have a working exe you can then just make an exe patcher to apply the changes for anyone else.

Well that was my plan but i never actaully go around to it, I got as far as getting a copy of pagan but I needed to upgrade it to the correct version before I could apply the patcher.

http://members.iinet.net.au/~rsd/six.html

If I get hte time I might actaully try and give it a shot
 
You'd be a god among us Crusader fans if you did this. I can't explain how awesome it would be to be able to play Crusader in XP/Vista.
 
Well last time I didnt even get as far as patching the U8.exe because I had the old version of the U8.exe. Anyway I've upgraded U8 to the newest version and applied the Windows patch I now have two exe files:

- U8.exe
- U8w.exe

Now the U8w.exe *should* let Ultima 8 play in windows (I'm running XP 64 bit, so it doesnt work).

I can now compare the two files and see what the changes are and try and find the same parts to chanage in the Crusader.exe file, of course a separate patch will be needed for no remorse and no regret.

Here are the changes to the U8.exe file as found in the windows patch readme, so I'll need to reinstall my hex editor for this one. To bad I'm a Computer Tech and not a Software Developer, I'm sure this would be a lot easier if I understood programming ;)
Code:
| [  1 at 041d06] :: 'Main [007] Bypass processor type check'
| [  2 at 073bb7] :: 'Main [059] Increase LDT size'
| [  3 at 081225] :: 'Main [080] Bypass SPANKER'
| [  4 at 081786] :: 'Main [080] Rework interrupt hook (1)'
| [  5 at 0817d8] :: 'Main [080] Rework interrupt hook (2)'
| [  6 at 081831] :: 'Main [080] Rework interrupt unhook (1)'
| [  7 at 081887] :: 'Main [080] Rework interrupt unhook (2)'
| [  8 at 0bb978] :: 'Main [129] Bypass DOS end of interrupt'
| [  9 at 0bea1b] :: 'Main [130] Rework timer interrupt (1)'
| [ 10 at 0beac1] :: 'Main [130] Rework timer interrupt (2)'
| [ 11 at 0bead8] :: 'Main [130] Rework timer interrupt (3)'
| [ 12 at 074c0e] :: 'Main [060] Accept huge memory (1)'
| [ 13 at 074ce6] :: 'Main [060] Accept huge memory (2)'
| [ 14 at 074d77] :: 'Main [060] Accept huge memory (3)'
| [ 15 at 0d11ef] :: 'Main [148] Check  Game Version '2.1x''
| [ 16 at 003c95] :: 'DExD [003] Bypass Int 21 DPMI Hook'
| [ 17 at 0336c8] :: 'DExP [007] Bypass Int 10-1A, 33 Hooks'
| [ 18 at 03669c] :: 'MouP [001] Bypass Int 33 Hook'
| [ 19 at 06b09e] :: 'Main [044] Rework Mouse event hook (1)'
| [ 20 at 06b0a5] :: 'Main [044] Rework Mouse event hook (2)'
| [ 21 at 06b0bb] :: 'Main [044] Rework Mouse event hook (3)'
| [ 22 at 037980] :: 'Main [001] Force  DOS Window exit'
| [ 23 at 03ed9a] :: 'Main [002] Un-Shared Selector (01)'
| [ 24 at 03ef25] :: 'Main [002] Un-Shared Selector (02)'
| [ 25 at 0615bb] :: 'Main [035] Un-Shared Selector (03)'
| [ 26 at 06e17d] :: 'Main [049] Un-Shared Selector (04)'
| [ 27 at 06e3c1] :: 'Main [049] Un-Shared Selector (05)'
| [ 28 at 073193] :: 'Main [058] Un-Shared Selector (06)'
| [ 29 at 073a5b] :: 'Main [059] Un-Shared Selector (07)'
| [ 30 at 073b43] :: 'Main [059] Un-Shared Selector (08)'
| [ 31 at 073ee5] :: 'Main [060] Un-Shared Selector (09)'
| [ 32 at 074195] :: 'Main [060] Un-Shared Selector (10)'
| [ 33 at 07edf9] :: 'Main [075] Un-Shared Selector (11)'
| [ 34 at 07ee5d] :: 'Main [075] Un-Shared Selector (12)'
| [ 35 at 07ee86] :: 'Main [075] Un-Shared Selector (13)'
| [ 36 at 0b2dbe] :: 'Main [122] Un-Shared Selector (14)'
| [ 37 at 073b36] :: 'Main [059] Bypass Share LDT'
| [ 38 at 073bb1] :: 'Main [059] Bypass Share GDT'
| [ 39 at 074af7] :: 'Main [060] Bypass Memory Mgr (1)'
| [ 40 at 074c08] :: 'Main [060] Bypass Memory Mgr (2)'
| [ 41 at 07514a] :: 'Main [060] Bypass Memory Mgr (3)'
| [ 42 at 075800] :: 'Main [061] Selector Allocator (1)'
| [ 43 at 0758e7] :: 'Main [061] Selector Allocator (2)'
| [ 44 at 075933] :: 'Main [061] Selector Allocator (3)'
| [ 45 at 0759d2] :: 'Main [061] Selector Allocator (4)'
| [ 46 at 073c22] :: 'Main [059] DPMI Get Selector Base'
| [ 47 at 0739fc] :: 'Main [059] DPMI Set Selector Base (1)'
| [ 48 at 073ac8] :: 'Main [059] DPMI Set Selector Base (2)'
| [ 49 at 07ee2e] :: 'Main [075] DPMI Set Selector Base (3)'
| [ 50 at 07ef90] :: 'Main [075] DPMI Set Selector Base (4)'
| [ 51 at 07efd4] :: 'Main [075] DPMI Set Selector Base (5)'
| [ 52 at 0748b8] :: 'Main [060] Memory Allocator (1)'
| [ 53 at 0749e2] :: 'Main [060] Memory Allocator (2)'
| [ 54 at 0749f8] :: 'Main [060] Memory Allocator (3)'
| [ 55 at 074b48] :: 'Main [060] Memory Allocator (4)'
| [ 56 at 0751a9] :: 'Main [060] Memory Allocator (5)'
| [ 57 at 0be9c6] :: 'Main [130] Event Main Loop'
| [ 58 at 07d71f] :: 'Main [074] Remove unpaired CLI (01)'
| [ 59 at 07dab5] :: 'Main [074] Remove unpaired CLI (02)'
| [ 60 at 07ddf4] :: 'Main [074] Remove unpaired CLI (03)'
| [ 61 at 0bbf29] :: 'Main [130] Remove unpaired CLI (04)'
| [ 62 at 0bc1f3] :: 'Main [130] Remove unpaired CLI (05)'
| [ 63 at 0bc460] :: 'Main [130] Remove unpaired CLI (06)'
| [ 64 at 0be2d0] :: 'Main [130] Remove unpaired CLI (07)'
| [ 65 at 0be2e6] :: 'Main [130] Remove unpaired CLI (08)'
| [ 66 at 0be5da] :: 'Main [130] Remove unpaired CLI (09)'
| [ 67 at 0be8c3] :: 'Main [130] Remove unpaired CLI (10)'
| [ 68 at 0be8ed] :: 'Main [130] Remove unpaired CLI (11)'
| [ 69 at 0be907] :: 'Main [130] Remove unpaired CLI (12)'
| [ 70 at 0c0f04] :: 'Main [132] Remove unpaired CLI (13)'
| [ 71 at 0c0f3e] :: 'Main [132] Remove unpaired CLI (14)'
| [ 72 at 0c0f89] :: 'Main [132] Remove unpaired CLI (15)'
| [ 73 at 0c23bf] :: 'Main [134] Remove unpaired CLI (16)'
| [ 74 at 0c23f4] :: 'Main [134] Remove unpaired CLI (17)'
| [ 75 at 0c242b] :: 'Main [134] Remove unpaired CLI (18)'
| [ 76 at 06d76b] :: 'Main [048] Help Linux/DosEmu SHARE'
 
Well I've taken a quick look with a hex editor (Hex Comparison) I've just found that does comaparisons and it looks like it should be possible:



So the first address looks like it can be changed easily enough, lets hope the other 75 entries are there...

On the chance I get lazzy and forget to complete this or get run over by a bus here's how its done:

1) Open U8.exe and U8w.exe with "Hex comparison"
2) Click the "search for difference" button
3) Open Regret.exe or Crusader.exe with the hex editor
4) Do a search for the string of hex before the changed entry.
5) Look for the part that needs to be edited and change it to the value in the U8w.exe

Now repeat this for all of the differences in the two ultima 8 exe files.
 
Thanks mate. Very interesting idea! This reminds me of the days trying to find the differences between 2 English Firmwares of my cell phone, to upgrade my localized version. The replace trick requires some knowledge on Assembly, I presume?

A few months ago, inspired by an entry about DOS32A in wiki of DOSBox, I came up with the idea of replacing the DOS extender for Crusaders with DOS32A to make them run faster in DOSBox, but without luck, for the Crusaders don't use DOS4GW.  Similar procedure did make my Rose Tattoo of Sherlock Holmes run a lot faster. Regrettably it has been stated explicitly DOS32A does not support extender of that kind used by Origin games. 
 
The first few address were easy to find, then it starts to get tricky to find the correct parts to change. Yea I think if someone had an understanding of assembler then it should be possible to change for crusader.

I was having a go at regret last night, I'll take a look at remorse as since it's older it might be closser to the original pagan engine.

Anyone out there have an idea on how to view this in assembler?
 
Back
Top