aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/scumm/script_v6.cpp3
-rw-r--r--engines/titanic/carry/central_core.cpp2
-rw-r--r--engines/titanic/core/game_object.cpp2
-rw-r--r--engines/titanic/core/game_object.h2
-rw-r--r--engines/titanic/game/broken_pell_base.cpp16
-rw-r--r--engines/titanic/game/broken_pell_base.h10
-rw-r--r--engines/titanic/game/broken_pellerator.cpp30
-rw-r--r--engines/titanic/game/broken_pellerator_froz.cpp65
-rw-r--r--engines/titanic/game/broken_pellerator_froz.h8
-rw-r--r--engines/titanic/game/pickup/pick_up_hose.cpp4
-rw-r--r--engines/titanic/game/television.cpp26
-rw-r--r--engines/titanic/game/transport/pellerator.cpp4
-rw-r--r--engines/titanic/moves/call_pellerator.cpp36
-rw-r--r--engines/titanic/moves/call_pellerator.h7
-rw-r--r--engines/titanic/true_talk/parrot_script.cpp2
-rw-r--r--engines/wage/detection_tables.h12
16 files changed, 143 insertions, 86 deletions
diff --git a/engines/scumm/script_v6.cpp b/engines/scumm/script_v6.cpp
index 62c62c0b4a..5cbbd93265 100644
--- a/engines/scumm/script_v6.cpp
+++ b/engines/scumm/script_v6.cpp
@@ -1636,6 +1636,9 @@ void ScummEngine_v6::o6_roomOps() {
c = pop();
b = pop();
a = pop();
+ // Prevent assert() error with corner case, fixes bug #9871
+ if (_game.id == GID_FT && _roomResource == 0)
+ break;
darkenPalette(a, a, a, b, c);
break;
diff --git a/engines/titanic/carry/central_core.cpp b/engines/titanic/carry/central_core.cpp
index 457428ccfc..8b1e24d654 100644
--- a/engines/titanic/carry/central_core.cpp
+++ b/engines/titanic/carry/central_core.cpp
@@ -74,6 +74,8 @@ bool CCentralCore::DropZoneLostObjectMsg(CDropZoneLostObjectMsg *msg) {
bool CCentralCore::DropZoneGotObjectMsg(CDropZoneGotObjectMsg *msg) {
CString name = msg->_object->getName();
if (name == "PerchCoreHolder") {
+ CParrot::_takeOff = false;
+
if (isEquals("CentralCore")) {
CParrot::_coreReplaced = true;
CActMsg actMsg("CoreReplaced");
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp
index 5abc9f0f76..11b8b58451 100644
--- a/engines/titanic/core/game_object.cpp
+++ b/engines/titanic/core/game_object.cpp
@@ -912,7 +912,7 @@ bool CGameObject::compareViewNameTo(const CString &name) const {
return !getViewFullName().compareToIgnoreCase(name);
}
-int CGameObject::compareRoomNameTo(const CString &name) {
+bool CGameObject::compareRoomNameTo(const CString &name) {
CRoomItem *room = getGameManager()->getRoom();
return !room->getName().compareToIgnoreCase(name);
}
diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h
index 619c56bc50..f79c9e1d1e 100644
--- a/engines/titanic/core/game_object.h
+++ b/engines/titanic/core/game_object.h
@@ -329,7 +329,7 @@ protected:
/**
* Compare the name of the parent room to the item to a passed string
*/
- int compareRoomNameTo(const CString &name);
+ bool compareRoomNameTo(const CString &name);
/**
* Gets the first object under the system MailMan
diff --git a/engines/titanic/game/broken_pell_base.cpp b/engines/titanic/game/broken_pell_base.cpp
index a3825d503e..973c558253 100644
--- a/engines/titanic/game/broken_pell_base.cpp
+++ b/engines/titanic/game/broken_pell_base.cpp
@@ -26,22 +26,22 @@ namespace Titanic {
EMPTY_MESSAGE_MAP(CBrokenPellBase, CBackground);
-bool CBrokenPellBase::_v1;
-int CBrokenPellBase::_v2;
+bool CBrokenPellBase::_pelleratorOpen;
+bool CBrokenPellBase::_gottenHose;
void CBrokenPellBase::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
- file->writeNumberLine(_v1, indent);
- file->writeNumberLine(_v2, indent);
- file->writeNumberLine(_exitAction, indent);
+ file->writeNumberLine(_pelleratorOpen, indent);
+ file->writeNumberLine(_gottenHose, indent);
+ file->writeNumberLine(_closeAction, indent);
CBackground::save(file, indent);
}
void CBrokenPellBase::load(SimpleFile *file) {
file->readNumber();
- _v1 = file->readNumber();
- _v2 = file->readNumber();
- _exitAction = file->readNumber();
+ _pelleratorOpen = file->readNumber();
+ _gottenHose = file->readNumber();
+ _closeAction = (CloseAction)file->readNumber();
CBackground::load(file);
}
diff --git a/engines/titanic/game/broken_pell_base.h b/engines/titanic/game/broken_pell_base.h
index c5b27d88bf..2d42f143ef 100644
--- a/engines/titanic/game/broken_pell_base.h
+++ b/engines/titanic/game/broken_pell_base.h
@@ -27,16 +27,18 @@
namespace Titanic {
+enum CloseAction { CLOSE_NONE = 0, CLOSE_LEFT = 1, CLOSE_RIGHT = 2 };
+
class CBrokenPellBase : public CBackground {
DECLARE_MESSAGE_MAP;
protected:
- static bool _v1;
- static int _v2;
+ static bool _pelleratorOpen;
+ static bool _gottenHose;
- int _exitAction;
+ CloseAction _closeAction;
public:
CLASSDEF;
- CBrokenPellBase() : CBackground(), _exitAction(0) {}
+ CBrokenPellBase() : CBackground(), _closeAction(CLOSE_NONE) {}
/**
* Save the data for the class to file
diff --git a/engines/titanic/game/broken_pellerator.cpp b/engines/titanic/game/broken_pellerator.cpp
index d3664acccd..5de728481b 100644
--- a/engines/titanic/game/broken_pellerator.cpp
+++ b/engines/titanic/game/broken_pellerator.cpp
@@ -53,16 +53,16 @@ void CBrokenPellerator::load(SimpleFile *file) {
}
bool CBrokenPellerator::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
- if (_v1) {
- changeView(_v2 ? _string5 : _string4);
+ if (_pelleratorOpen) {
+ changeView(_gottenHose ? _string5 : _string4);
} else {
- if (_v2) {
+ if (_gottenHose) {
playMovie(28, 43, 0);
} else {
playMovie(0, 14, MOVIE_NOTIFY_OBJECT);
}
- _v1 = true;
+ _pelleratorOpen = true;
}
return true;
@@ -71,7 +71,7 @@ bool CBrokenPellerator::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
bool CBrokenPellerator::LeaveViewMsg(CLeaveViewMsg *msg) {
CString name = msg->_newView->getNodeViewName();
if (name == "Node 3.S" || name == "Node 3.N") {
- _v1 = false;
+ _pelleratorOpen = false;
loadFrame(0);
}
@@ -80,32 +80,32 @@ bool CBrokenPellerator::LeaveViewMsg(CLeaveViewMsg *msg) {
bool CBrokenPellerator::ActMsg(CActMsg *msg) {
if (msg->_action == "PlayerGetsHose") {
- _v2 = 1;
+ _gottenHose = true;
loadFrame(43);
CStatusChangeMsg statusMsg;
statusMsg.execute("PickupHose");
} else {
- _exitAction = 0;
+ _closeAction = CLOSE_NONE;
bool closeFlag = msg->_action == "Close";
if (msg->_action == "CloseLeft") {
closeFlag = true;
- _exitAction = 1;
+ _closeAction = CLOSE_LEFT;
}
if (msg->_action == "CloseRight") {
closeFlag = true;
- _exitAction = 2;
+ _closeAction = CLOSE_RIGHT;
}
if (closeFlag) {
- if (_v1) {
- _v1 = false;
- if (_v2)
+ if (_pelleratorOpen) {
+ _pelleratorOpen = false;
+ if (_gottenHose)
playMovie(43, 57, MOVIE_NOTIFY_OBJECT);
else
playMovie(14, 28, MOVIE_NOTIFY_OBJECT);
} else {
- switch (_exitAction) {
+ switch (_closeAction) {
case 1:
changeView(_exitLeftView);
break;
@@ -116,7 +116,7 @@ bool CBrokenPellerator::ActMsg(CActMsg *msg) {
break;
}
- _exitAction = 0;
+ _closeAction = CLOSE_NONE;
}
}
}
@@ -139,7 +139,7 @@ bool CBrokenPellerator::MovieEndMsg(CMovieEndMsg *msg) {
statusMsg.execute("PickUpHose");
}
- switch (_exitAction) {
+ switch (_closeAction) {
case 1:
changeView(_exitLeftView);
break;
diff --git a/engines/titanic/game/broken_pellerator_froz.cpp b/engines/titanic/game/broken_pellerator_froz.cpp
index 7025b37a0c..c4439aad43 100644
--- a/engines/titanic/game/broken_pellerator_froz.cpp
+++ b/engines/titanic/game/broken_pellerator_froz.cpp
@@ -34,30 +34,30 @@ END_MESSAGE_MAP()
void CBrokenPelleratorFroz::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
- file->writeQuotedLine(_string2, indent);
- file->writeQuotedLine(_string3, indent);
- file->writeQuotedLine(_string4, indent);
- file->writeQuotedLine(_string5, indent);
+ file->writeQuotedLine(_exitLeft, indent);
+ file->writeQuotedLine(_exitRight, indent);
+ file->writeQuotedLine(_closeUpWithoutHose, indent);
+ file->writeQuotedLine(_closeUpWithHose, indent);
CBrokenPellBase::save(file, indent);
}
void CBrokenPelleratorFroz::load(SimpleFile *file) {
file->readNumber();
- _string2 = file->readString();
- _string3 = file->readString();
- _string4 = file->readString();
- _string5 = file->readString();
+ _exitLeft = file->readString();
+ _exitRight = file->readString();
+ _closeUpWithoutHose = file->readString();
+ _closeUpWithHose = file->readString();
CBrokenPellBase::load(file);
}
bool CBrokenPelleratorFroz::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
- if (_v1) {
- changeView(_v2 ? _string5 : _string4);
+ if (_pelleratorOpen) {
+ changeView(_gottenHose ? _closeUpWithHose : _closeUpWithoutHose);
} else {
- _v1 = true;
- if (_v2) {
+ _pelleratorOpen = true;
+ if (_gottenHose) {
playMovie(0, 13, 0);
} else {
playMovie(43, 55, MOVIE_NOTIFY_OBJECT);
@@ -71,7 +71,7 @@ bool CBrokenPelleratorFroz::LeaveViewMsg(CLeaveViewMsg *msg) {
CString name = msg->_newView->getNodeViewName();
if (name == "Node 3.S" || name == "Node 3.E") {
- _v1 = false;
+ _pelleratorOpen = false;
loadFrame(0);
}
@@ -80,42 +80,43 @@ bool CBrokenPelleratorFroz::LeaveViewMsg(CLeaveViewMsg *msg) {
bool CBrokenPelleratorFroz::ActMsg(CActMsg *msg) {
if (msg->_action == "PlayerGetsHose") {
- _v2 = 1;
+ _gottenHose = true;
+ loadFrame(29);
CStatusChangeMsg statusMsg;
statusMsg._newStatus = 0;
statusMsg.execute("FPickUpHose");
} else {
- _exitAction = 0;
+ _closeAction = CLOSE_NONE;
bool closeFlag = msg->_action == "Close";
if (msg->_action == "CloseLeft") {
closeFlag = true;
- _exitAction = 1;
+ _closeAction = CLOSE_LEFT;
}
if (msg->_action == "CloseRight") {
closeFlag = true;
- _exitAction = 2;
+ _closeAction = CLOSE_RIGHT;
}
if (closeFlag) {
- if (_v1) {
- _v1 = false;
- if (_v2)
+ if (_pelleratorOpen) {
+ _pelleratorOpen = false;
+ if (_gottenHose)
playMovie(29, 42, MOVIE_NOTIFY_OBJECT);
else
playMovie(72, 84, MOVIE_NOTIFY_OBJECT);
} else {
- switch (_exitAction) {
- case 1:
- changeView(_string2);
+ switch (_closeAction) {
+ case CLOSE_LEFT:
+ changeView(_exitLeft);
break;
- case 2:
- changeView(_string3);
+ case CLOSE_RIGHT:
+ changeView(_exitRight);
break;
default:
break;
}
- _exitAction = 0;
+ _closeAction = CLOSE_NONE;
}
}
}
@@ -136,12 +137,12 @@ bool CBrokenPelleratorFroz::MovieEndMsg(CMovieEndMsg *msg) {
statusMsg.execute("FPickUpHose");
}
- if (_exitAction == 1) {
- changeView(_string2);
- _exitAction = 0;
- } else if (_exitAction == 2) {
- changeView(_string3);
- _exitAction = 0;
+ if (_closeAction == CLOSE_LEFT) {
+ changeView(_exitLeft);
+ _closeAction = CLOSE_NONE;
+ } else if (_closeAction == CLOSE_RIGHT) {
+ changeView(_exitRight);
+ _closeAction = CLOSE_NONE;
}
return true;
diff --git a/engines/titanic/game/broken_pellerator_froz.h b/engines/titanic/game/broken_pellerator_froz.h
index ccdae6ffa8..c198d02213 100644
--- a/engines/titanic/game/broken_pellerator_froz.h
+++ b/engines/titanic/game/broken_pellerator_froz.h
@@ -34,10 +34,10 @@ class CBrokenPelleratorFroz : public CBrokenPellBase {
bool ActMsg(CActMsg *msg);
bool MovieEndMsg(CMovieEndMsg *msg);
private:
- CString _string2;
- CString _string3;
- CString _string4;
- CString _string5;
+ CString _exitLeft;
+ CString _exitRight;
+ CString _closeUpWithoutHose;
+ CString _closeUpWithHose;
public:
CLASSDEF;
diff --git a/engines/titanic/game/pickup/pick_up_hose.cpp b/engines/titanic/game/pickup/pick_up_hose.cpp
index 442c43f9b0..548caaf48f 100644
--- a/engines/titanic/game/pickup/pick_up_hose.cpp
+++ b/engines/titanic/game/pickup/pick_up_hose.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/game/pickup/pick_up_hose.h"
+#include "titanic/game/broken_pell_base.h"
#include "titanic/core/project_item.h"
#include "titanic/core/room_item.h"
#include "titanic/core/view_item.h"
@@ -95,7 +96,8 @@ bool CPickUpHose::StatusChangeMsg(CStatusChangeMsg *msg) {
}
bool CPickUpHose::EnterViewMsg(CEnterViewMsg *msg) {
- _cursorId = CURSOR_IGNORE;
+ if (msg->_oldView)
+ _cursorId = CURSOR_IGNORE;
return true;
}
diff --git a/engines/titanic/game/television.cpp b/engines/titanic/game/television.cpp
index 1380b441d7..80404fa9d3 100644
--- a/engines/titanic/game/television.cpp
+++ b/engines/titanic/game/television.cpp
@@ -236,23 +236,31 @@ bool CTelevision::MovieEndMsg(CMovieEndMsg *msg) {
}
if (_channelNum == 3 && compareRoomNameTo("SGTState") && getPassengerClass() == THIRD_CLASS) {
- // You may be a winner
- CProximity prox1, prox2;
- prox1._soundType = prox2._soundType = Audio::Mixer::kSpeechSoundType;
- playSound("z#47.wav", prox1);
- _soundHandle = playSound("b#20.wav", prox2);
- CMagazine *magazine = dynamic_cast<CMagazine *>(getRoot()->findByName("Magazine"));
+ // WORKAROUND: The original allowed the magazine to be "won" multiple times. We
+ // now search for magazine within the room (which is it's initial, hidden location).
+ // That way, when it's 'Won', it's no longer present and can't be won again
+ CMagazine *magazine = dynamic_cast<CMagazine *>(findRoom()->findByName("Magazine"));
if (magazine) {
+ // You may be a winner
+ CProximity prox1, prox2;
+ prox1._soundType = prox2._soundType = Audio::Mixer::kSpeechSoundType;
+ playSound("z#47.wav", prox1);
+ _soundHandle = playSound("b#20.wav", prox2);
+
+ // Get the room flags for the SGT floor we're on
CPetControl *pet = getPetControl();
uint roomFlags = pet->getRoomFlags();
- debugC(kDebugScripts, "Assigned room - %d", roomFlags);
+ // Send the magazine to the SuccUBus
+ debugC(DEBUG_INTERMEDIATE, kDebugScripts, "Assigned room - %d", roomFlags);
magazine->addMail(roomFlags);
magazine->sendMail(roomFlags, roomFlags);
- }
- loadFrame(561);
+ loadFrame(561);
+ } else {
+ petDisplayMessage(NOTHING_ON_CHANNEL);
+ }
} else if (_channelNum == 2) {
loadFrame(_seasonFrame);
} else if (_channelNum == 4 && _channel4Glyph) {
diff --git a/engines/titanic/game/transport/pellerator.cpp b/engines/titanic/game/transport/pellerator.cpp
index 8a94e82803..4ef5314592 100644
--- a/engines/titanic/game/transport/pellerator.cpp
+++ b/engines/titanic/game/transport/pellerator.cpp
@@ -155,7 +155,7 @@ bool CPellerator::StatusChangeMsg(CStatusChangeMsg *msg) {
case 5:
playMovie(315, 323, 0);
for (int idx = 0; idx < 7; ++idx)
- playMovie(229, 304, 0);
+ playMovie(299, 304, 0);
for (int idx = 0; idx < 12; ++idx)
playMovie(245, 255, 0);
for (int idx = 0; idx < 3; ++idx)
@@ -229,7 +229,7 @@ bool CPellerator::StatusChangeMsg(CStatusChangeMsg *msg) {
}
}
} else {
- for (--_destination; _destination > newDest; --_destination) {
+ for (--_destination; _destination >= newDest; --_destination) {
switch (_destination) {
case 0:
case 1:
diff --git a/engines/titanic/moves/call_pellerator.cpp b/engines/titanic/moves/call_pellerator.cpp
index e894dd8d4f..cc29f01c1a 100644
--- a/engines/titanic/moves/call_pellerator.cpp
+++ b/engines/titanic/moves/call_pellerator.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/moves/call_pellerator.h"
+#include "titanic/pet_control/pet_control.h"
namespace Titanic {
@@ -29,6 +30,7 @@ BEGIN_MESSAGE_MAP(CCallPellerator, CGameObject)
ON_MESSAGE(LeaveViewMsg)
ON_MESSAGE(PETActivateMsg)
ON_MESSAGE(MouseButtonDownMsg)
+ ON_MESSAGE(TimerMsg)
END_MESSAGE_MAP()
void CCallPellerator::save(SimpleFile *file, int indent) {
@@ -42,15 +44,18 @@ void CCallPellerator::load(SimpleFile *file) {
}
bool CCallPellerator::EnterViewMsg(CEnterViewMsg *msg) {
- petSetArea(PET_REMOTE);
- petHighlightGlyph(1);
- CString name = getFullViewName();
-
- if (name == "TopOfWell.Node 6.S") {
- petDisplayMessage(2, STANDING_OUTSIDE_PELLERATOR);
+ CString viewName = msg->_newView->getFullViewName();
+ if (viewName == "MusicRoomLobby.Node 1.N") {
+ // WORKAROUND: In original, the Remote tab icons don't get loaded
+ // until after the EnterViewMsg call is made when entering a new
+ // room. So in the special case of the Music Room Lobby, since
+ // you're immediately at the Pellerator when you enter, set up a
+ // quick timer to not select the Call glyph until the remote is loaded
+ addTimer(10);
+ } else {
+ showCallPellerator();
}
- petSetRemoteTarget();
return true;
}
@@ -81,4 +86,21 @@ bool CCallPellerator::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
return true;
}
+bool CCallPellerator::TimerMsg(CTimerMsg *msg) {
+ showCallPellerator();
+ return true;
+}
+
+void CCallPellerator::showCallPellerator() {
+ petSetArea(PET_REMOTE);
+ petHighlightGlyph(1);
+ CString name = getFullViewName();
+
+ if (name == "TopOfWell.Node 6.S") {
+ petDisplayMessage(2, STANDING_OUTSIDE_PELLERATOR);
+ }
+
+ petSetRemoteTarget();
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/moves/call_pellerator.h b/engines/titanic/moves/call_pellerator.h
index 3a1ef3823a..e03150dbce 100644
--- a/engines/titanic/moves/call_pellerator.h
+++ b/engines/titanic/moves/call_pellerator.h
@@ -34,6 +34,13 @@ class CCallPellerator : public CGameObject {
bool LeaveViewMsg(CLeaveViewMsg *msg);
bool PETActivateMsg(CPETActivateMsg *msg);
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
+ bool TimerMsg(CTimerMsg *msg);
+private:
+ /**
+ * Switches to the PET Remote tab, and selects the 'Call Pellerator'
+ * glyph by default
+ */
+ void showCallPellerator();
public:
CLASSDEF;
diff --git a/engines/titanic/true_talk/parrot_script.cpp b/engines/titanic/true_talk/parrot_script.cpp
index f44b9d3be2..95ebbb5bfb 100644
--- a/engines/titanic/true_talk/parrot_script.cpp
+++ b/engines/titanic/true_talk/parrot_script.cpp
@@ -52,7 +52,7 @@ int ParrotScript::chooseResponse(const TTroomScript *roomScript, const TTsentenc
}
int ParrotScript::process(const TTroomScript *roomScript, const TTsentence *sentence) {
- if (processEntries(roomScript, sentence) == 2) {
+ if (processEntries(roomScript, sentence) != 2) {
int tagId = g_vm->_trueTalkManager->_quotes.find(sentence->_normalizedLine);
if (!tagId || chooseResponse(roomScript, sentence, tagId) != 2) {
addResponse(getDialogueId(sentence->checkCategory() ? 280248 : 280235));
diff --git a/engines/wage/detection_tables.h b/engines/wage/detection_tables.h
index 2b7278c50e..b207946882 100644
--- a/engines/wage/detection_tables.h
+++ b/engines/wage/detection_tables.h
@@ -79,6 +79,8 @@ static const ADGameDescription gameDescriptions[] = {
FANGAME("Find the Heart", "08de3248b8c691d9a08af984bdcfa872", 105885), // From Joshua's Worlds. Alt version
FANGAME("Find the Heart", "73935d313b666763e50d2cdc6b3b7908", 105871), // Standalone
FANGAMEN("Fortune Teller", "Fortune Teller 1.1", "3c09329fc3c92a70e5c8874cc763f5cb", 73931),
+ FANGAMEN("Fred Rogers - Terrorist", "Terrorist", "4398f711bc2a456e6d730641308593f0", 524469), // Original file name "Terrorist†"
+ FANGAME("Fred Rogers - Terrorist", "8597a77619847efbce3f1f8b2ceb3258", 524455), // Original file name "Terrorist†"
FANGAMEN("Haunted House", "Haunted House 1.5", "5e34e9fa13f4c90876f10a40ea1d1c79", 177500),
FANGAMEN("The Hotel Caper", "The Hotel Caper V1.0", "c9b3c75814fc6b14feae044157bef252", 231969),
FANGAMEN("The Hotel Caper", "The Hotel Caper V1.0", "4658ece81a6f211a828e747125482f48", 231969), // alt version
@@ -95,12 +97,15 @@ static const ADGameDescription gameDescriptions[] = {
FANGAMEN("Little Pythagoras", "Little Pythagoras 1.1.1", "66a5d2ac1a0df2ee84cbee583c1f1dfe", 628821),
FANGAME("Lost Crystal", "945a1cf1ead6dd298305935b5ccb21d2", 771072),
FANGAMEN("Lost In Kookyville", "Lost In Kookyville 1.2.4", "89ecb4cef5cc4036e54f8bc45ce7520e", 721569),
+ FANGAME("Lost Princess", "29d9889b566286506ded7d8bec7b75ce", 166758),
+ FANGAME("Mac Spudd!", "eaba9195dd27c2a26b809a730417122b", 782115),
FANGAME("Magic Rings", "263e2c90af61f0798bf41f6a1e3f6345", 109044),
// No way to click on the house
FANGAME("Messy House", "32ca71f2ff37997407cead590c2dd306", 177120),
FANGAME("Midnight Snack", "70ba8a5a1f0304669c9987360bba236f", 67952),
FANGAME("Midnight Snack", "24973af10822979e23866d88a7d2e15c", 67966), // Alt version
FANGAME("Mike's House", "591b5a4d52ecf9a7d87256e83b78b0fd", 87357),
+ FANGAME("Mike's House", "e4c0b836a21799db3995a921a447c28e", 87343), // Alt version
FANGAME("Minitorian", "c728dfccdca12571e275a4113b3db343", 586464),
FANGAME("M'Lord's Warrior", "e0a0622ce2023984e3118141a9688ec5", 465639), // Original file name is "M'Lord's Warrior †"
FANGAMEN("Mormonoids from the Deep", "Mormonoids 1.25", "4730d0c47d13401d73353e980f91a304", 645318),
@@ -116,10 +121,13 @@ static const ADGameDescription gameDescriptions[] = {
FANGAMEN("Pencils", "Pencils.99", "09dbcdbefe20536c2db1b1a4fb4e5ed3", 408551),
// Polygons with byte 1
FANGAME("Periapt", "7e26a7827c694232624321a5a6844511", 406006),
+ FANGAME("Periapt", "bc36e40de279d5f0844577fe702d9f64", 406006), // alt version
// Invalid rect in scene "Access Tube 1"
FANGAMEN("The Phoenix v1.2", "The Phoenix", "fee9f1de7ad9096d084461d6066192b1", 431640),
FANGAME("The Phoenix", "bd6dabf7a19d2ab7902498a8513f8c71", 431643),
FANGAME("Psychotic!", "d6229615b71b189f6ef71399a0856cd2", 367309),
+ FANGAME("Psychotic!", "c7608f67592563b44f2f48fe5fec63ce", 367323), // alt version
+ FANGAME("Psychotic!", "51aa5f2744ceb5666c9556bccee797d6", 367429), // another alt version
FANGAME("Puzzle Piece Search", "6c21c1e0c6afef9300941abd7782dd16", 247693), // From Joshua's Worlds 1.0
FANGAME("The Puzzle Piece Search", "8fa1d80dd3f1ed69f45d15d774968995", 247338), // From Joshua's Worlds
FANGAME("The Puzzle Piece Search", "fb839ac4f22427f44e99bcc5afd57a0b", 247324), // Stnadalone
@@ -146,15 +154,16 @@ static const ADGameDescription gameDescriptions[] = {
FANGAMEN("Space Adventure", "SpaceAdventure", "3908c75d639989a28993c59931fbe1ec", 155356),
FANGAMEN("Space Adventure", "SpaceAdventure", "e38d524cb778ed0beb77ee9299f0ed45", 155356), // alt version
FANGAMEN("Spear of Destiny", "SpearOfDestiny", "ac00a26f04f83b47c278cc1d226f48df", 333665), // Original file name "SpearOfDestiny†"
+ FANGAME("Spear of Destiny", "ea90bddd0925742351340cf88dd1c7a6", 620606), // alt version, normal file name
FANGAME("Star Trek", "3067332e6f0bb0314579f9bf102e1b56", 53320),
FANGAME("Strange Disappearance", "9d6e41b61c0fc90400e5da2fcb653a4a", 772282),
FANGAME("The Sultan's Palace", "fde31cbcc77b66969b4cfcd43075341e", 456855),
// Code 0x03 in text
FANGAME("Swamp Witch", "bd8c8394be31f7845d55785b7ccfbbde", 739781), // Original file name "Swamp Witch†"
+ FANGAME("Swamp Witch", "07463c8b3b908b0c493a41b949ac1ff5", 740131), // alt version, normal file name
FANGAME("Sweetspace Now!", "574dc7dd25543f7a516d6524f0c5ab33", 123813), // Comes with Jumble
// Wrong scrolling in the first console text
FANGAMEN("Sword of Siegfried", "Sword of Siegfried 1.0", "2ae8f21cfb228ce58ee47b767bdd8820", 234763),
- FANGAME("Terrorist", "4398f711bc2a456e6d730641308593f0", 524469), // Original file name "Terrorist†"
FANGAME("Time Bomb", "e96f3e2efd1e3db6ad0be22180f5473c", 64564),
FANGAME("Time Bomb", "976180f9be0d1029aaba7774fec9767c", 64578), // Alt version
// Admission for on 3rd screen is messed up
@@ -172,6 +181,7 @@ static const ADGameDescription gameDescriptions[] = {
FANGAMEN("Wizard's Warehouse 2", "WizWarehouse 2.0", "e67ac67548236a73897a85cd12b30492", 230870),
FANGAME("ZikTuria", "a91559e6f04a67dcb9023a98a0faed77", 52972),
FANGAME("Zoony", "3f7418ea8672ea558521c178188cfce5", 154990), // original filename "Zoony™"
+ FANGAME("Zoony", "55d3d42b5dca9630eb28ad464f343c67", 154990), // original filename "Zoony™", alt version
AD_TABLE_END_MARKER
};