Crusader games in ScummVM?

stauff

Member
Joined
Jun 7, 2020
Hi Crusader fans,

The Pentagram Ultima 8 engine was integrated into ScummVM recently, and I decided to work on some improvements for it. In the process I got interested in the Crusader games - the engines are based on the U8 one, and there was some early-stage support already in Pentagram.

I made some progress on adding more things, and here's where it's at:
* Shapes, sounds, and maps all load - Pentagram already had all this
* Music plays - AMF support was already out there in a few mod players, so it just needed adding to scummvm
* Movies work - luckily someone had worked out the movie encoder already:
You do not have permission to view link Log in or register now.

* The avatar can walk around (needed some hacks to the U8 animation system, speed still not right but it works)
* Some of the simplest game engine events work, so "using" a valve turns it and makes a squeaking noise

Put it all together it looks like this right now:

I'm now at the stage where I need to disassemble a game seriously to work out what the other game engine events are. I've started already (with No Remorse) and I'm making some progress, but it'll be a long journey.

I don't want to get any hopes up about a complete reimplementation, but I'm finding it an interesting project and will probably keep working on it until I've got a playable game, get stuck, or I get totally sick of it all :) If anyone here wants to help or is just interested then let me know and I'll get into more details.

Some trivia I've noticed so far (many of which you can notice by just looking at strings from the exe):
* The check for 15 megs of free disk space actually checks for 16,000,000 bytes free
* The `-laurie` option (which prints "No pity. No mercy. No remorse." on quit instead of "CRUSADER: No Remorse") is implemented as a series of character checks in the code rather than an option string (to obscure it?) .. but then there's a string that says "FART ...TRY... -laurie (Have fun, Jely)".. hmm..
* There's a memory manager called `YAMM`, which I presume stands for "Yet Another Memory Manager"
* There's only so many times you can see the Asylum Sound System functions (ASSInit, etc) without wondering about whether the name was just chosen for the acronym
* There's a built-in engine debugger, and I would really like to have one of the unk symbol files..
* 16 bit protected mode disassembles into a nightmare of high/low word handling for 32-bit pointers
 

Keenan

Administrator
Staff member
Joined
Sep 24, 2005
Location
Omaha, Nebraska, USA
Glad to see you here! I'm excited to see how fellow fans react to this news!

The progress is crazy already. This is a major feat for the Crusader community. I can't express how grateful I am for your efforts.

Jason Ely was one of the main programmers of the games and he might be willing to help out. You can check on Facebook for him, and maybe some other places. There are very dedicated fans here that can probably help you out. Maybe @compelx and @JC Denton.

Curious to see how much of Crusader was actually built into Pentagram, since it plays pretty differently from Ultima 8.

For the future, if the project is at a point where most of the work is done, do you want issues to be tracked in the ScummVM Github? I'd be glad to debug and find anything that would need fixing and to submit pull requests.

I'll be putting this on the frontpage so people see the good news!
 
OP
OP
stauff

stauff

Member
Joined
Jun 7, 2020
I've made some decent progress on this now, although the visible parts of the progress are fairly small. I've worked out a large number of the game engine functions. They're not exactly like the U8 versions though, so you can now have an array of amusingly broken interactions with the world:

Will keep posting here on my progress.

Didn't capture sound, but it's working like before. I'm using the cheat mover to get around faster for testing.
 
OP
OP
stauff

stauff

Member
Joined
Jun 7, 2020
Quick update.. I managed to get enough of the usecode working that some nice things happen now:
1. The barrel rolls and explodes when it hits the avatar
2. The security camera triggers the alert when the avatar gets close (which you can clear with the keypad)
3. The guns follow the avatar around
4. Doors work properly
5. The elevator is kinda working

Still a long way to go but steady progress. I'd really like to get an NPC or two spawning next.


Also @Keenan I realised I never answered your question about bugs - I guess it's still much to early to put them in the ScummVM tracker, but I'd love to see pull requests from people, I can review and merge them.
 
OP
OP
stauff

stauff

Member
Joined
Jun 7, 2020
Slow but steady progress.. latest updates:

* Spawned some NPCs - they basically just hang around and walk about at the moment. Worked out what some of their stats mean, some remain a mystery.
* Target reticle works - although it's currently always running (not just in combat mode)
* Inventory - Avatar can now collect items from boxes, the inventory display at the bottom is live and you can cycle through items. The ammo display needs a little more work.
* Computer and keypad gumps working - not perfect (no pagination or char-by-char display on the computer) but good enough to use
* Health and energy displays are live - I get injured in this video by the steam but there's no reaction animation


Next things (random thoughts rather than a real plan..):
* Work out why some engine events don't work - eg, turning the initial valve should spray some fire but it doesn't do anything. The healing booth doesn't get triggered when I walk into it either.
* Do some work on the palette cycling - eg, the red color in the alert buttons is supposed to cycle all the time
* Work out why I can't step onto elevators.. I should be able to walk through most of the first level if I fix that

Things that I know will be a lot of work:
* Adding control for remotely controlling things (eg, Thermatron)
* Fully implementing the combat AI system - it's a small language in itself inside the COMBAT.DAT file
 
Top Bottom