Files
2026-02-02 04:50:13 +01:00

303 lines
11 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "common/file.h"
#include "common/system.h"
#include "director/director.h"
#include "director/lingo/lingo.h"
#include "director/lingo/lingo-object.h"
#include "director/lingo/lingo-utils.h"
#include "director/lingo/xlibs/h/henry.h"
/**************************************************
*
* USED IN:
* Mummy: Tomb of the Pharaoh
* Frankenstein: Through the Eyes of the Monster
*
**************************************************/
/*
-- From Mummy:
-- Henry XObject. Mar 21, 95 JPY
--Henry
ISS mNew --Creates a new instance of the XObject
X mDispose --Disposes of XObject instance
S mName
SIIS mUserHitMouse --
XSSS mStartNewPosition --
XSS mStartNewPositionSubView --
S mCommittNewPosition --
S mDoLeftTurn --
S mDoRightTurn --
SII mCheckCursor --
SII mGetRollOverActions --
S mGetEntryActions --
S mPeekEntryActions --
S mGetExitActions --
S mSetSavedPosition
IS mGetStateVariable --
XSI mSetStateVariable --
SS mGetStringVariable --
XSS mSetStringVariable --
XSI mStartTimer --
XS mAbortTimer --
S mCheckTimers --
SS mGetTimerStatus
SS mPickUpItem
XS mDropItem --
XS mDumpItem
SS mReturnItem
SS mIngestItem
SSS mPutItemInContainer
SSSSS mPutItemAtLocation
S mGetCurrentPosition
S mGetPlayerProperties
SSS mSaveGame --
SS mLoadGame --
XI mShowCursor --
X mReleaseCursor --
S mGetRoomList --
SI mGetItemList --
S mGetCurrentItem --
S mGetCurrentContainer --
S mGetCurrentInteraction --
SS mGetItemLocation --
SS mGetContainerContents --
X mPauseGame --
X mResumeGame --
-- From Frankenstein
-- Henry XObject. Mar 21, 95 JPY
--Henry
ISS mNew --Creates a new instance of the XObject
X mDispose --Disposes of XObject instance
S mName
SIII mUserHitMouse --
XSSS mStartNewPosition --
XSS mStartNewPositionSubView --
S mCommittNewPosition --
S mDoLeftTurn --
S mDoRightTurn --
SII mCheckCursor --
SII mGetRollOverActions --
S mGetCurrentPosition --
S mGetRoomList --
S mGetVariableList --
SI mGetItemList --
S mGetEntryActions --
S mPeekEntryActions --
S mGetExitActions --
SS mGetTimerActionsForTimer --
SS mGetTimerStatus
SSS mSaveGameState --
SS mLoadGameState --
IS mGetStateVariable --
XSI mSetStateVariable --
SS mGetStringVariable --
XSS mSetStringVariable --
XSI mStartTimer --
XS mAbortTimer --
S mCheckTimers --
XS mDropItem --
XS mDumpItem
XS mPutItemInHand --
XS mPutItemInEnvironment --
XS mPutItemInBag --
SS mGetItemLocation --
XI mShowCursor --
X mReleaseCursor --
*/
namespace Director {
const char *const HenryXObj::xlibName = "Henry";
const XlibFileDesc HenryXObj::fileNames[] = {
{ "HENRY", nullptr },
{ nullptr, nullptr },
};
static const MethodProto xlibMethods[] = {
{ "new", HenryXObj::m_new, 2, 2, 400 },
{ "dispose", HenryXObj::m_dispose, 0, 0, 400 },
{ "name", HenryXObj::m_name, 0, 0, 400 },
{ "userHitMouse", HenryXObj::m_userHitMouse, 3, 3, 400 },
{ "startNewPosition", HenryXObj::m_startNewPosition, 3, 3, 400 },
{ "startNewPositionSubView", HenryXObj::m_startNewPositionSubView, 2, 2, 400 },
{ "committNewPosition", HenryXObj::m_committNewPosition, 0, 0, 400 },
{ "doLeftTurn", HenryXObj::m_doLeftTurn, 0, 0, 400 },
{ "doRightTurn", HenryXObj::m_doRightTurn, 0, 0, 400 },
{ "checkCursor", HenryXObj::m_checkCursor, 2, 2, 400 },
{ "getRollOverActions", HenryXObj::m_getRollOverActions, 2, 2, 400 },
{ "getEntryActions", HenryXObj::m_getEntryActions, 0, 0, 400 },
{ "peekEntryActions", HenryXObj::m_peekEntryActions, 0, 0, 400 },
{ "getExitActions", HenryXObj::m_getExitActions, 0, 0, 400 },
{ "getStateVariable", HenryXObj::m_getStateVariable, 1, 1, 400 },
{ "setStateVariable", HenryXObj::m_setStateVariable, 2, 2, 400 },
{ "getStringVariable", HenryXObj::m_getStringVariable, 1, 1, 400 },
{ "setStringVariable", HenryXObj::m_setStringVariable, 2, 2, 400 },
{ "startTimer", HenryXObj::m_startTimer, 2, 2, 400 },
{ "abortTimer", HenryXObj::m_abortTimer, 1, 1, 400 },
{ "checkTimers", HenryXObj::m_checkTimers, 0, 0, 400 },
{ "getTimerStatus", HenryXObj::m_getTimerStatus, 1, 1, 400 },
{ "dropItem", HenryXObj::m_dropItem, 1, 1, 400 },
{ "dumpItem", HenryXObj::m_dumpItem, 1, 1, 400 },
{ "getCurrentPosition", HenryXObj::m_getCurrentPosition, 0, 0, 400 },
{ "showCursor", HenryXObj::m_showCursor, 1, 1, 400 },
{ "releaseCursor", HenryXObj::m_releaseCursor, 0, 0, 400 },
{ "getRoomList", HenryXObj::m_getRoomList, 0, 0, 400 },
{ "getItemList", HenryXObj::m_getItemList, 1, 1, 400 },
{ "getItemLocation", HenryXObj::m_getItemLocation, 1, 1, 400 },
// Functions for Mummy
{ "setSavedPosition", HenryXObj::m_setSavedPosition, 0, 0, 400 },
{ "pickUpItem", HenryXObj::m_pickUpItem, 1, 1, 400 },
{ "returnItem", HenryXObj::m_returnItem, 1, 1, 400 },
{ "ingestItem", HenryXObj::m_ingestItem, 1, 1, 400 },
{ "putItemInContainer", HenryXObj::m_putItemInContainer, 2, 2, 400 },
{ "putItemAtLocation", HenryXObj::m_putItemAtLocation, 4, 4, 400 },
{ "getPlayerProperties", HenryXObj::m_getPlayerProperties, 0, 0, 400 },
{ "saveGame", HenryXObj::m_saveGame, 2, 2, 400 },
{ "loadGame", HenryXObj::m_loadGame, 1, 1, 400 },
{ "getCurrentItem", HenryXObj::m_getCurrentItem, 0, 0, 400 },
{ "getCurrentContainer", HenryXObj::m_getCurrentContainer, 0, 0, 400 },
{ "getCurrentInteraction", HenryXObj::m_getCurrentInteraction, 0, 0, 400 },
{ "getContainerContents", HenryXObj::m_getContainerContents, 1, 1, 400 },
{ "pauseGame", HenryXObj::m_pauseGame, 0, 0, 400 },
{ "resumeGame", HenryXObj::m_resumeGame, 0, 0, 400 },
// Functions for Frankenstein
{ "putItemInHand", HenryXObj::m_putItemInHand, 1, 1, 400 },
{ "putItemInEnvironment", HenryXObj::m_putItemInEnvironment, 1, 1, 400 },
{ "putItemInBag", HenryXObj::m_putItemInBag, 1, 1, 400 },
{ "getVariableList", HenryXObj::m_getVariableList, 0, 0, 400 },
{ "getTimerActionsForTimer", HenryXObj::m_getTimerActionsForTimer, 1, 1, 400 },
{ "saveGameState", HenryXObj::m_saveGameState, 2, 2, 400 },
{ "loadGameState", HenryXObj::m_loadGameState, 1, 1, 400 },
{ nullptr, nullptr, 0, 0, 0 }
};
static const BuiltinProto xlibBuiltins[] = {
{ nullptr, nullptr, 0, 0, 0, VOIDSYM }
};
bool CheckKey(Common::File &file) {
return file.readUint32BE() == 4;
}
void GameState_Read() {
Common::File gameStateFile;
if (!CheckKey(gameStateFile)) {
// invalid file
gameStateFile.close();
} else {
}
}
HenryXObject::HenryXObject(ObjectType ObjectType) :Object<HenryXObject>("Henry") {
_objType = ObjectType;
}
void HenryXObj::open(ObjectType type, const Common::Path &path) {
HenryXObject::initMethods(xlibMethods);
HenryXObject *xobj = new HenryXObject(type);
if (type == kXtraObj)
g_lingo->_openXtras.push_back(xlibName);
g_lingo->exposeXObject(xlibName, xobj);
g_lingo->initBuiltIns(xlibBuiltins);
}
void HenryXObj::close(ObjectType type) {
HenryXObject::cleanupMethods();
g_lingo->_globalvars[xlibName] = Datum();
}
void HenryXObj::m_new(int nargs) {
g_lingo->printSTUBWithArglist("HenryXObj::m_new", nargs);
g_lingo->dropStack(nargs);
g_lingo->push(g_lingo->_state->me);
}
XOBJSTUBNR(HenryXObj::m_dispose)
XOBJSTUB(HenryXObj::m_name, "")
XOBJSTUB(HenryXObj::m_userHitMouse, "")
XOBJSTUBNR(HenryXObj::m_startNewPosition)
XOBJSTUBNR(HenryXObj::m_startNewPositionSubView)
XOBJSTUB(HenryXObj::m_committNewPosition, "")
XOBJSTUB(HenryXObj::m_doLeftTurn, "")
XOBJSTUB(HenryXObj::m_doRightTurn, "")
XOBJSTUB(HenryXObj::m_checkCursor, "")
XOBJSTUB(HenryXObj::m_getRollOverActions, "")
XOBJSTUB(HenryXObj::m_getEntryActions, "")
XOBJSTUB(HenryXObj::m_peekEntryActions, "")
XOBJSTUB(HenryXObj::m_getExitActions, "")
XOBJSTUB(HenryXObj::m_getStateVariable, 0)
XOBJSTUBNR(HenryXObj::m_setStateVariable)
XOBJSTUB(HenryXObj::m_getStringVariable, "")
XOBJSTUBNR(HenryXObj::m_setStringVariable)
XOBJSTUBNR(HenryXObj::m_startTimer)
XOBJSTUBNR(HenryXObj::m_abortTimer)
XOBJSTUB(HenryXObj::m_checkTimers, "")
XOBJSTUB(HenryXObj::m_getTimerStatus, "")
XOBJSTUBNR(HenryXObj::m_dropItem)
XOBJSTUBNR(HenryXObj::m_dumpItem)
XOBJSTUB(HenryXObj::m_getCurrentPosition, "")
XOBJSTUBNR(HenryXObj::m_showCursor)
XOBJSTUBNR(HenryXObj::m_releaseCursor)
XOBJSTUB(HenryXObj::m_getRoomList, "")
XOBJSTUB(HenryXObj::m_getItemList, "")
XOBJSTUB(HenryXObj::m_getItemLocation, "")
XOBJSTUB(HenryXObj::m_setSavedPosition, "")
XOBJSTUB(HenryXObj::m_pickUpItem, "")
XOBJSTUB(HenryXObj::m_returnItem, "")
XOBJSTUB(HenryXObj::m_ingestItem, "")
XOBJSTUB(HenryXObj::m_putItemInContainer, "")
XOBJSTUB(HenryXObj::m_putItemAtLocation, "")
XOBJSTUB(HenryXObj::m_getPlayerProperties, "")
XOBJSTUB(HenryXObj::m_saveGame, "")
XOBJSTUB(HenryXObj::m_loadGame, "")
XOBJSTUB(HenryXObj::m_getCurrentItem, "")
XOBJSTUB(HenryXObj::m_getCurrentContainer, "")
XOBJSTUB(HenryXObj::m_getCurrentInteraction, "")
XOBJSTUB(HenryXObj::m_getContainerContents, "")
XOBJSTUBNR(HenryXObj::m_pauseGame)
XOBJSTUBNR(HenryXObj::m_resumeGame)
XOBJSTUBNR(HenryXObj::m_putItemInHand)
XOBJSTUBNR(HenryXObj::m_putItemInEnvironment)
XOBJSTUBNR(HenryXObj::m_putItemInBag)
XOBJSTUB(HenryXObj::m_getVariableList, "")
XOBJSTUB(HenryXObj::m_getTimerActionsForTimer, "")
XOBJSTUB(HenryXObj::m_saveGameState, "")
XOBJSTUB(HenryXObj::m_loadGameState, "")
}