Moonstone: A Hard Day's Knight - "The Amiga version is better"

Do a search for "amiga version is better" and you'll get a bunch of results where people discuss whether game <X> was better on the Amiga. In the case of Moonstone, they are completely correct. To quote wikipedia
"...developed and published by Mindscape for the Amiga in 1991 and one year later converted to DOS with different sound and music."
This is not strictly true, the DOS sound files appear to be based upon the Amiga ones, but either resampled/converted from 8svx to unsigned 8bit PCM changing them slightly in some cases and more noticeably in others

So given this information, why does the Amiga dragon sound like this?


And prepare yourself, the DOS version sound like this?


Well, that's the fault of whoever ported it to DOS. Let's take a look at how the animation and sound data is stored in DOS, below is the swing attack from the data segment of the DOS binary. It's been annotate with some types that I've been annotating it with in IDA Pro.

 side_atk   dw frame_func_call_function  
            dw offset ax_cycle_5_plus_4  
            db frame_func_repeat_frame  
            db 2  
            AnimationFrame <kn1_ob, 32, 44, can_be_hit, -22>  
            AnimationFrame <kn1_ob, 31, 252, can_be_hit, -18>  
            AnimationFrame <kn4_ob, 3, 25, can_hit, -22>  
            EndOfAnimFrame <0FFh, 0>  
            db frame_func_play_sound  
            db offset sound_lookup+0Bh - offset sound_lookup  

The important part is play_sound function, the next line is the argument used, this is a lookup table that contains pointers to the sound file used. In this case 0x0b refers to the 23rd sound sample in the sound table. This is the 'swordclash' sound effect, so you get a nice swishing when you attack. The problem comes for the dragon and knight damage animations, they were accidentally set incorrectly when ported to DOS hence the weird noises the dragon makes when it takes a hit and the 'swordclash' noise is played when you hit a black knight!

If you are playing along at home, you'll also notice there is no play_sound function for the knight grunting noise for the side attack. Yes, that is also missing in the DOS port. For OpenMoonstone I want to be as close to the original as possible, but pygame can play pcm u8 sounds without any additional code. So for now,  I'm playing the DOS samples but with the Amiga named sounds and animation timing.

So yes, in this case. The Amiga version is better. Except when I was a kid and disk C was corrupted so you could never fight the mudmen without the game crashing.

Popular posts

Digging into python memory issues in ckan with heapy

Randomising traitor numbers in Trouble in Terrorist Town

Translating ckan extensions using the ITranslations