SCI: Fix kMessage REF subop ordering

Thanks to waltervn for testing values from running in DOSBox.

Fixes bug #3034704
This commit is contained in:
Matthew Hoops 2013-04-23 22:32:01 -04:00
parent 03882de79b
commit 829847cb88

View File

@ -488,9 +488,9 @@ enum kMessageFunc {
K_MESSAGE_GET,
K_MESSAGE_NEXT,
K_MESSAGE_SIZE,
K_MESSAGE_REFCOND,
K_MESSAGE_REFVERB,
K_MESSAGE_REFNOUN,
K_MESSAGE_REFVERB,
K_MESSAGE_REFCOND,
K_MESSAGE_PUSH,
K_MESSAGE_POP,
K_MESSAGE_LASTMESSAGE
@ -511,16 +511,10 @@ reg_t kMessage(EngineState *s, int argc, reg_t *argv) {
#ifdef ENABLE_SCI32
if (getSciVersion() >= SCI_VERSION_2) {
// In complete weirdness, SCI32 bumps up subops 3-8 to 4-9 and stubs off subop 3.
// In addition, SCI32 reorders the REF* subops.
if (func == 3)
error("SCI32 kMessage(3)");
else if (func > 3) {
else if (func > 3)
func--;
if (func == K_MESSAGE_REFCOND)
func = K_MESSAGE_REFNOUN;
else if (func == K_MESSAGE_REFNOUN || func == K_MESSAGE_REFVERB)
func--;
}
}
#endif