mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-21 01:08:25 +00:00
6a3a14ab6b
Also clear the whole array in enterNewScene. This is not needed since the last value is only used when the first four values are set up valid, but it removes an annoying warning in PVS-Studio and makes the code a bit clearer.
829 lines
24 KiB
C++
829 lines
24 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 2
|
|
* 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, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#ifndef KYRA_KYRA_LOK_H
|
|
#define KYRA_KYRA_LOK_H
|
|
|
|
#include "kyra/kyra_v1.h"
|
|
#include "kyra/script.h"
|
|
#include "kyra/screen_lok.h"
|
|
#include "kyra/gui_lok.h"
|
|
#include "kyra/item.h"
|
|
|
|
namespace Graphics {
|
|
struct Surface;
|
|
}
|
|
|
|
namespace Kyra {
|
|
|
|
class Movie;
|
|
class SoundDigital;
|
|
class SeqPlayer;
|
|
class Sprites;
|
|
class Animator_LoK;
|
|
class TextDisplayer;
|
|
class KyraEngine_LoK;
|
|
|
|
struct Character {
|
|
uint16 sceneId;
|
|
uint8 height;
|
|
uint8 facing;
|
|
uint16 currentAnimFrame;
|
|
int8 inventoryItems[10];
|
|
int16 x1, y1, x2, y2;
|
|
};
|
|
|
|
struct Shape {
|
|
uint8 imageIndex;
|
|
int8 xOffset, yOffset;
|
|
uint8 x, y, w, h;
|
|
};
|
|
|
|
struct Room {
|
|
uint8 nameIndex;
|
|
uint16 northExit;
|
|
uint16 eastExit;
|
|
uint16 southExit;
|
|
uint16 westExit;
|
|
int8 itemsTable[12];
|
|
uint16 itemsXPos[12];
|
|
uint8 itemsYPos[12];
|
|
uint8 needInit[12];
|
|
};
|
|
|
|
struct SeqLoop {
|
|
const uint8 *ptr;
|
|
uint16 count;
|
|
};
|
|
|
|
struct SceneExits {
|
|
uint16 northXPos;
|
|
uint8 northYPos;
|
|
uint16 eastXPos;
|
|
uint8 eastYPos;
|
|
uint16 southXPos;
|
|
uint8 southYPos;
|
|
uint16 westXPos;
|
|
uint8 westYPos;
|
|
};
|
|
|
|
struct BeadState {
|
|
int16 x;
|
|
int16 y;
|
|
int16 width;
|
|
int16 height;
|
|
int16 dstX;
|
|
int16 dstY;
|
|
int16 width2;
|
|
int16 unk8;
|
|
int16 unk9;
|
|
int16 tableIndex;
|
|
};
|
|
|
|
class KyraEngine_LoK : public KyraEngine_v1 {
|
|
friend class MusicPlayer;
|
|
friend class Debugger_LoK;
|
|
friend class Animator_LoK;
|
|
friend class GUI_LoK;
|
|
public:
|
|
KyraEngine_LoK(OSystem *system, const GameFlags &flags);
|
|
~KyraEngine_LoK();
|
|
|
|
// _sprites and _seqplayer should be paused here too, to avoid some animation glitches,
|
|
// also parts of the hardcoded Malcolm fight might need some special handling.
|
|
|
|
Screen *screen() { return _screen; }
|
|
Animator_LoK *animator() { return _animator; }
|
|
GUI *gui() const { return _gui; }
|
|
virtual Movie *createWSAMovie();
|
|
|
|
uint8 **shapes() { return _shapes; }
|
|
Character *currentCharacter() { return _currentCharacter; }
|
|
Character *characterList() { return _characterList; }
|
|
uint16 brandonStatus() { return _brandonStatusBit; }
|
|
|
|
// TODO: remove me with workaround in animator.cpp l209
|
|
uint16 getScene() { return _currentRoom; }
|
|
|
|
int _paletteChanged;
|
|
int16 _northExitHeight;
|
|
|
|
typedef bool (KyraEngine_LoK::*IntroProc)();
|
|
|
|
// static data access
|
|
const char * const *seqWSATable() { return _seq_WSATable; }
|
|
const char * const *seqCPSTable() { return _seq_CPSTable; }
|
|
const char * const *seqCOLTable() { return _seq_COLTable; }
|
|
const char * const *seqTextsTable() { return _seq_textsTable; }
|
|
|
|
const uint8 * const *palTable1() { return &_specialPalettes[0]; }
|
|
const uint8 * const *palTable2() { return &_specialPalettes[29]; }
|
|
|
|
protected:
|
|
virtual Common::Error go();
|
|
virtual Common::Error init();
|
|
|
|
public:
|
|
// sequences
|
|
// -> misc
|
|
bool seq_skipSequence() const;
|
|
protected:
|
|
// -> demo
|
|
void seq_demo();
|
|
|
|
// -> intro
|
|
void seq_intro();
|
|
bool seq_introPublisherLogos();
|
|
bool seq_introLogos();
|
|
bool seq_introStory();
|
|
bool seq_introMalcolmTree();
|
|
bool seq_introKallakWriting();
|
|
bool seq_introKallakMalcolm();
|
|
|
|
// -> ingame animations
|
|
void seq_createAmuletJewel(int jewel, int page, int noSound, int drawOnly);
|
|
void seq_brandonHealing();
|
|
void seq_brandonHealing2();
|
|
void seq_poisonDeathNow(int now);
|
|
void seq_poisonDeathNowAnim();
|
|
void seq_playFluteAnimation();
|
|
void seq_winterScroll1();
|
|
void seq_winterScroll2();
|
|
void seq_makeBrandonInv();
|
|
void seq_makeBrandonNormal();
|
|
void seq_makeBrandonNormal2();
|
|
void seq_makeBrandonWisp();
|
|
void seq_dispelMagicAnimation();
|
|
void seq_fillFlaskWithWater(int item, int type);
|
|
void seq_playDrinkPotionAnim(int item, int unk2, int flags);
|
|
void seq_brandonToStone();
|
|
|
|
// -> end fight
|
|
int seq_playEnd();
|
|
void seq_playEnding();
|
|
|
|
int handleMalcolmFlag();
|
|
int handleBeadState();
|
|
void initBeadState(int x, int y, int x2, int y2, int unk1, BeadState *ptr);
|
|
int processBead(int x, int y, int &x2, int &y2, BeadState *ptr);
|
|
|
|
// -> credits
|
|
void seq_playCredits();
|
|
void seq_playCreditsAmiga();
|
|
|
|
public:
|
|
// delay
|
|
void delayUntil(uint32 timestamp, bool updateGameTimers = false, bool update = false, bool isMainLoop = false);
|
|
void delay(uint32 millis, bool update = false, bool isMainLoop = false);
|
|
void delayWithTicks(int ticks);
|
|
|
|
bool skipFlag() const;
|
|
void resetSkipFlag(bool removeEvent = true);
|
|
|
|
// TODO
|
|
void registerDefaultSettings();
|
|
void readSettings();
|
|
void writeSettings();
|
|
|
|
void snd_playSoundEffect(int track, int volume=0xFF);
|
|
void snd_playWanderScoreViaMap(int command, int restart);
|
|
virtual void snd_playVoiceFile(int id);
|
|
void snd_voiceWaitForFinish(bool ingame = true);
|
|
uint32 snd_getVoicePlayTime();
|
|
|
|
protected:
|
|
int32 _speechPlayTime;
|
|
|
|
Common::Error saveGameStateIntern(int slot, const char *saveName, const Graphics::Surface *thumbnail);
|
|
Common::Error loadGameState(int slot);
|
|
protected:
|
|
// input
|
|
void processInput(int xpos, int ypos);
|
|
int processInputHelper(int xpos, int ypos);
|
|
int clickEventHandler(int xpos, int ypos);
|
|
void clickEventHandler2();
|
|
void updateMousePointer(bool forceUpdate = false);
|
|
bool hasClickedOnExit(int xpos, int ypos);
|
|
|
|
// scene
|
|
// -> init
|
|
void loadSceneMsc();
|
|
void startSceneScript(int brandonAlive);
|
|
void setupSceneItems();
|
|
void initSceneData(int facing, int unk1, int brandonAlive);
|
|
void initSceneObjectList(int brandonAlive);
|
|
void initSceneScreen(int brandonAlive);
|
|
void setupSceneResource(int sceneId);
|
|
|
|
// -> process
|
|
void enterNewScene(int sceneId, int facing, int unk1, int unk2, int brandonAlive);
|
|
int handleSceneChange(int xpos, int ypos, int unk1, int frameReset);
|
|
int processSceneChange(int *table, int unk1, int frameReset);
|
|
int changeScene(int facing);
|
|
|
|
// -> modification
|
|
void transcendScenes(int roomIndex, int roomName);
|
|
void setSceneFile(int roomIndex, int roomName);
|
|
|
|
// -> pathfinder
|
|
int findWay(int x, int y, int toX, int toY, int *moveTable, int moveTableSize);
|
|
bool lineIsPassable(int x, int y);
|
|
|
|
// -> item handling
|
|
// --> misc
|
|
void addItemToRoom(uint16 sceneId, uint8 item, int itemIndex, int x, int y);
|
|
|
|
// --> drop handling
|
|
void itemDropDown(int x, int y, int destX, int destY, byte freeItem, int item);
|
|
int processItemDrop(uint16 sceneId, uint8 item, int x, int y, int unk1, int unk2);
|
|
void dropItem(int unk1, int item, int x, int y, int unk2);
|
|
|
|
// --> dropped item handling
|
|
int countItemsInScene(uint16 sceneId);
|
|
void exchangeItemWithMouseItem(uint16 sceneId, int itemIndex);
|
|
byte findFreeItemInScene(int scene);
|
|
byte findItemAtPos(int x, int y);
|
|
|
|
// --> drop area handling
|
|
void addToNoDropRects(int x, int y, int w, int h);
|
|
void clearNoDropRects();
|
|
int isDropable(int x, int y);
|
|
int checkNoDropRects(int x, int y);
|
|
|
|
// --> player items handling
|
|
void updatePlayerItemsForScene();
|
|
|
|
// --> item GFX handling
|
|
void backUpItemRect0(int xpos, int ypos);
|
|
void restoreItemRect0(int xpos, int ypos);
|
|
void backUpItemRect1(int xpos, int ypos);
|
|
void restoreItemRect1(int xpos, int ypos);
|
|
|
|
// items
|
|
// -> misc
|
|
void placeItemInGenericMapScene(int item, int index);
|
|
|
|
// -> mouse item
|
|
void setHandItem(Item item);
|
|
void removeHandItem();
|
|
void setMouseItem(Item item);
|
|
|
|
int getItemListIndex(Item item);
|
|
|
|
// -> graphics effects
|
|
void wipeDownMouseItem(int xpos, int ypos);
|
|
void itemSpecialFX(int x, int y, int item);
|
|
void itemSpecialFX1(int x, int y, int item);
|
|
void itemSpecialFX2(int x, int y, int item);
|
|
void magicOutMouseItem(int animIndex, int itemPos);
|
|
void magicInMouseItem(int animIndex, int item, int itemPos);
|
|
void specialMouseItemFX(int shape, int x, int y, int animIndex, int tableIndex, int loopStart, int maxLoops);
|
|
void processSpecialMouseItemFX(int shape, int x, int y, int tableValue, int loopStart, int maxLoops);
|
|
|
|
// character
|
|
// -> movement
|
|
void moveCharacterToPos(int character, int facing, int xpos, int ypos);
|
|
void setCharacterPositionWithUpdate(int character);
|
|
int setCharacterPosition(int character, int *facingTable);
|
|
void setCharacterPositionHelper(int character, int *facingTable);
|
|
void setCharactersPositions(int character);
|
|
|
|
// -> brandon
|
|
void setBrandonPoisonFlags(int reset);
|
|
void resetBrandonPoisonFlags();
|
|
|
|
// chat
|
|
// -> process
|
|
void characterSays(int vocFile, const char *chatStr, int8 charNum, int8 chatDuration);
|
|
void waitForChatToFinish(int vocFile, int16 chatDuration, const char *str, uint8 charNum, const bool printText);
|
|
|
|
// -> initialization
|
|
int initCharacterChat(int8 charNum);
|
|
void backupChatPartnerAnimFrame(int8 charNum);
|
|
void restoreChatPartnerAnimFrame(int8 charNum);
|
|
int8 getChatPartnerNum();
|
|
|
|
// -> deinitialization
|
|
void endCharacterChat(int8 charNum, int16 arg_4);
|
|
|
|
// graphics
|
|
// -> misc
|
|
int findDuplicateItemShape(int shape);
|
|
void updateKyragemFading();
|
|
|
|
// -> interface
|
|
void loadMainScreen(int page = 3);
|
|
void redrawInventory(int page);
|
|
public:
|
|
void drawSentenceCommand(const char *sentence, int unk1);
|
|
void updateSentenceCommand(const char *str1, const char *str2, int unk1);
|
|
void updateTextFade();
|
|
|
|
protected:
|
|
// -> amulet
|
|
void drawJewelPress(int jewel, int drawSpecial);
|
|
void drawJewelsFadeOutStart();
|
|
void drawJewelsFadeOutEnd(int jewel);
|
|
|
|
// -> shape handling
|
|
void setupShapes123(const Shape *shapeTable, int endShape, int flags);
|
|
void freeShapes123();
|
|
|
|
// misc (TODO)
|
|
void startup();
|
|
void mainLoop();
|
|
|
|
int checkForNPCScriptRun(int xpos, int ypos);
|
|
void runNpcScript(int func);
|
|
|
|
void loadMouseShapes();
|
|
void loadCharacterShapes();
|
|
void loadSpecialEffectShapes();
|
|
void loadItems();
|
|
void loadButtonShapes();
|
|
void initMainButtonList();
|
|
void setCharactersInDefaultScene();
|
|
void setupPanPages();
|
|
void freePanPages();
|
|
void closeFinalWsa();
|
|
|
|
//void setTimer19();
|
|
void setupTimers();
|
|
void timerUpdateHeadAnims(int timerNum);
|
|
void timerTulipCreator(int timerNum);
|
|
void timerRubyCreator(int timerNum);
|
|
void timerAsInvisibleTimeout(int timerNum);
|
|
void timerAsWillowispTimeout(int timerNum);
|
|
void checkAmuletAnimFlags();
|
|
void timerRedrawAmulet(int timerNum);
|
|
void timerLavenderRoseCreator(int timerNum);
|
|
void timerAcornCreator(int timerNum);
|
|
void timerBlueberryCreator(int timerNum);
|
|
void timerFadeText(int timerNum);
|
|
void timerWillowispFrameTimer(int timerNum);
|
|
void timerInvisibleFrameTimer(int timerNum);
|
|
void drawAmulet();
|
|
void setTextFadeTimerCountdown(int16 countdown);
|
|
void setWalkspeed(uint8 newSpeed);
|
|
|
|
void setItemCreationFlags(int offset, int count);
|
|
|
|
int buttonInventoryCallback(Button *caller);
|
|
int buttonAmuletCallback(Button *caller);
|
|
|
|
bool _seqPlayerFlag;
|
|
bool _skipIntroFlag;
|
|
bool _abortIntroFlag;
|
|
|
|
bool _menuDirectlyToLoad;
|
|
uint8 *_itemBkgBackUp[2];
|
|
uint8 *_shapes[373];
|
|
Item _itemInHand;
|
|
bool _changedScene;
|
|
int _unkScreenVar1, _unkScreenVar2, _unkScreenVar3;
|
|
int _beadStateVar;
|
|
int _unkAmuletVar;
|
|
|
|
int _malcolmFlag;
|
|
int _endSequenceSkipFlag;
|
|
int _endSequenceNeedLoading;
|
|
int _unkEndSeqVar2;
|
|
uint8 *_endSequenceBackUpRect;
|
|
int _unkEndSeqVar4;
|
|
int _unkEndSeqVar5;
|
|
int _lastDisplayedPanPage;
|
|
uint8 *_panPagesTable[20];
|
|
Movie *_finalA, *_finalB, *_finalC;
|
|
|
|
Movie *_movieObjects[10];
|
|
|
|
uint16 _entranceMouseCursorTracks[5];
|
|
uint16 _walkBlockNorth;
|
|
uint16 _walkBlockEast;
|
|
uint16 _walkBlockSouth;
|
|
uint16 _walkBlockWest;
|
|
|
|
int32 _scaleMode;
|
|
int16 _scaleTable[145];
|
|
|
|
Common::Rect _noDropRects[11];
|
|
|
|
int8 _birthstoneGemTable[4];
|
|
int8 _idolGemsTable[3];
|
|
|
|
int8 _marbleVaseItem;
|
|
int8 _foyerItemTable[3];
|
|
|
|
int8 _cauldronState;
|
|
int8 _crystalState[2];
|
|
|
|
uint16 _brandonStatusBit;
|
|
uint8 _brandonStatusBit0x02Flag;
|
|
uint8 _brandonStatusBit0x20Flag;
|
|
uint8 _brandonPoisonFlagsGFX[256];
|
|
int16 _brandonInvFlag;
|
|
uint8 _poisonDeathCounter;
|
|
int _brandonPosX;
|
|
int _brandonPosY;
|
|
|
|
uint16 _currentChatPartnerBackupFrame;
|
|
uint16 _currentCharAnimFrame;
|
|
|
|
int _characterFacingZeroCount[8];
|
|
int _characterFacingFourCount[8];
|
|
|
|
int8 *_sceneAnimTable[50];
|
|
|
|
uint8 _itemHtDat[145];
|
|
int _lastProcessedItem;
|
|
int _lastProcessedItemHeight;
|
|
|
|
int16 *_exitListPtr;
|
|
int16 _exitList[11];
|
|
SceneExits _sceneExits;
|
|
uint16 _currentRoom;
|
|
int _scenePhasingFlag;
|
|
|
|
int _sceneChangeState;
|
|
int _loopFlag2;
|
|
|
|
int _pathfinderFlag;
|
|
int _pathfinderFlag2;
|
|
int _lastFindWayRet;
|
|
int *_movFacingTable;
|
|
|
|
int8 _talkingCharNum;
|
|
int8 _charSayUnk2;
|
|
int8 _charSayUnk3;
|
|
int8 _currHeadShape;
|
|
int _currentHeadFrameTableIndex;
|
|
int8 _disabledTalkAnimObject;
|
|
int8 _enabledTalkAnimObject;
|
|
uint8 _currSentenceColor[3];
|
|
int8 _startSentencePalIndex;
|
|
bool _fadeText;
|
|
|
|
uint8 _configTextspeed;
|
|
|
|
Animator_LoK *_animator;
|
|
SeqPlayer *_seq;
|
|
Sprites *_sprites;
|
|
Screen_LoK *_screen;
|
|
|
|
EMCState _scriptMain;
|
|
|
|
EMCState _npcScript;
|
|
EMCData _npcScriptData;
|
|
|
|
EMCState _scriptClick;
|
|
EMCData _scriptClickData;
|
|
|
|
Character *_characterList;
|
|
Character *_currentCharacter;
|
|
|
|
Button *_buttonList;
|
|
GUI_LoK *_gui;
|
|
|
|
uint16 _malcolmFrame;
|
|
uint32 _malcolmTimer1;
|
|
uint32 _malcolmTimer2;
|
|
|
|
uint32 _beadStateTimer1;
|
|
uint32 _beadStateTimer2;
|
|
BeadState _beadState1;
|
|
BeadState _beadState2;
|
|
|
|
struct KyragemState {
|
|
uint16 nextOperation;
|
|
uint16 rOffset;
|
|
uint16 gOffset;
|
|
uint16 bOffset;
|
|
uint32 timerCount;
|
|
} _kyragemFadingState;
|
|
|
|
static const int8 _dosTrackMap[];
|
|
static const int _dosTrackMapSize;
|
|
|
|
static const int8 _amigaTrackMap[];
|
|
static const int _amigaTrackMapSize;
|
|
|
|
// TODO: get rid of all variables having pointers to the static resources if possible
|
|
// i.e. let them directly use the _staticres functions
|
|
void initStaticResource();
|
|
|
|
const uint8 *_seq_Forest;
|
|
const uint8 *_seq_KallakWriting;
|
|
const uint8 *_seq_KyrandiaLogo;
|
|
const uint8 *_seq_KallakMalcolm;
|
|
const uint8 *_seq_MalcolmTree;
|
|
const uint8 *_seq_WestwoodLogo;
|
|
const uint8 *_seq_Demo1;
|
|
const uint8 *_seq_Demo2;
|
|
const uint8 *_seq_Demo3;
|
|
const uint8 *_seq_Demo4;
|
|
const uint8 *_seq_Reunion;
|
|
|
|
const char * const *_seq_WSATable;
|
|
const char * const *_seq_CPSTable;
|
|
const char * const *_seq_COLTable;
|
|
const char * const *_seq_textsTable;
|
|
|
|
const char * const *_storyStrings;
|
|
|
|
int _seq_WSATable_Size;
|
|
int _seq_CPSTable_Size;
|
|
int _seq_COLTable_Size;
|
|
int _seq_textsTable_Size;
|
|
|
|
int _storyStringsSize;
|
|
|
|
const char * const *_itemList;
|
|
const char * const *_takenList;
|
|
const char * const *_placedList;
|
|
const char * const *_droppedList;
|
|
const char * const *_noDropList;
|
|
const char * const *_putDownFirst;
|
|
const char * const *_waitForAmulet;
|
|
const char * const *_blackJewel;
|
|
const char * const *_poisonGone;
|
|
const char * const *_healingTip;
|
|
const char * const *_thePoison;
|
|
const char * const *_fluteString;
|
|
const char * const *_wispJewelStrings;
|
|
const char * const *_magicJewelString;
|
|
const char * const *_flaskFull;
|
|
const char * const *_fullFlask;
|
|
const char * const *_veryClever;
|
|
const char * const *_homeString;
|
|
const char * const *_newGameString;
|
|
|
|
int _itemList_Size;
|
|
int _takenList_Size;
|
|
int _placedList_Size;
|
|
int _droppedList_Size;
|
|
int _noDropList_Size;
|
|
int _putDownFirst_Size;
|
|
int _waitForAmulet_Size;
|
|
int _blackJewel_Size;
|
|
int _poisonGone_Size;
|
|
int _healingTip_Size;
|
|
int _thePoison_Size;
|
|
int _fluteString_Size;
|
|
int _wispJewelStrings_Size;
|
|
int _magicJewelString_Size;
|
|
int _flaskFull_Size;
|
|
int _fullFlask_Size;
|
|
int _veryClever_Size;
|
|
int _homeString_Size;
|
|
int _newGameString_Size;
|
|
|
|
const char * const *_characterImageTable;
|
|
int _characterImageTableSize;
|
|
|
|
const char * const *_guiStrings;
|
|
int _guiStringsSize;
|
|
|
|
const char * const *_configStrings;
|
|
int _configStringsSize;
|
|
|
|
Shape *_defaultShapeTable;
|
|
int _defaultShapeTableSize;
|
|
|
|
const Shape *_healingShapeTable;
|
|
int _healingShapeTableSize;
|
|
const Shape *_healingShape2Table;
|
|
int _healingShape2TableSize;
|
|
|
|
const Shape *_posionDeathShapeTable;
|
|
int _posionDeathShapeTableSize;
|
|
|
|
const Shape *_fluteAnimShapeTable;
|
|
int _fluteAnimShapeTableSize;
|
|
|
|
const Shape *_winterScrollTable;
|
|
int _winterScrollTableSize;
|
|
const Shape *_winterScroll1Table;
|
|
int _winterScroll1TableSize;
|
|
const Shape *_winterScroll2Table;
|
|
int _winterScroll2TableSize;
|
|
|
|
const Shape *_drinkAnimationTable;
|
|
int _drinkAnimationTableSize;
|
|
|
|
const Shape *_brandonToWispTable;
|
|
int _brandonToWispTableSize;
|
|
|
|
const Shape *_magicAnimationTable;
|
|
int _magicAnimationTableSize;
|
|
|
|
const Shape *_brandonStoneTable;
|
|
int _brandonStoneTableSize;
|
|
|
|
Room *_roomTable;
|
|
int _roomTableSize;
|
|
const char * const *_roomFilenameTable;
|
|
int _roomFilenameTableSize;
|
|
|
|
const uint8 *_amuleteAnim;
|
|
|
|
const uint8 * const *_specialPalettes;
|
|
|
|
const char * const *_soundFiles;
|
|
int _soundFilesSize;
|
|
const char * const *_soundFilesIntro;
|
|
int _soundFilesIntroSize;
|
|
const int32 *_cdaTrackTable;
|
|
int _cdaTrackTableSize;
|
|
AudioDataStruct _soundData[3];
|
|
|
|
// positions of the inventory
|
|
static const uint16 _itemPosX[];
|
|
static const uint8 _itemPosY[];
|
|
|
|
void setupButtonData();
|
|
Button *_buttonData;
|
|
Button **_buttonDataListPtr;
|
|
|
|
static const uint8 _magicMouseItemStartFrame[];
|
|
static const uint8 _magicMouseItemEndFrame[];
|
|
static const uint8 _magicMouseItemStartFrame2[];
|
|
static const uint8 _magicMouseItemEndFrame2[];
|
|
|
|
static const uint16 _amuletX[];
|
|
static const uint16 _amuletY[];
|
|
static const uint16 _amuletX2[];
|
|
static const uint16 _amuletY2[];
|
|
|
|
// special palette handling for AMIGA
|
|
void setupZanthiaPalette(int pal);
|
|
protected:
|
|
void setupOpcodeTable();
|
|
|
|
// Opcodes
|
|
int o1_magicInMouseItem(EMCState *script);
|
|
int o1_characterSays(EMCState *script);
|
|
int o1_delay(EMCState *script);
|
|
int o1_drawSceneAnimShape(EMCState *script);
|
|
int o1_runNPCScript(EMCState *script);
|
|
int o1_setSpecialExitList(EMCState *script);
|
|
int o1_walkPlayerToPoint(EMCState *script);
|
|
int o1_dropItemInScene(EMCState *script);
|
|
int o1_drawAnimShapeIntoScene(EMCState *script);
|
|
int o1_savePageToDisk(EMCState *script);
|
|
int o1_sceneAnimOn(EMCState *script);
|
|
int o1_sceneAnimOff(EMCState *script);
|
|
int o1_getElapsedSeconds(EMCState *script);
|
|
int o1_mouseIsPointer(EMCState *script);
|
|
int o1_runSceneAnimUntilDone(EMCState *script);
|
|
int o1_fadeSpecialPalette(EMCState *script);
|
|
int o1_phaseInSameScene(EMCState *script);
|
|
int o1_setScenePhasingFlag(EMCState *script);
|
|
int o1_resetScenePhasingFlag(EMCState *script);
|
|
int o1_queryScenePhasingFlag(EMCState *script);
|
|
int o1_sceneToDirection(EMCState *script);
|
|
int o1_setBirthstoneGem(EMCState *script);
|
|
int o1_placeItemInGenericMapScene(EMCState *script);
|
|
int o1_setBrandonStatusBit(EMCState *script);
|
|
int o1_delaySecs(EMCState *script);
|
|
int o1_getCharacterScene(EMCState *script);
|
|
int o1_runNPCSubscript(EMCState *script);
|
|
int o1_magicOutMouseItem(EMCState *script);
|
|
int o1_internalAnimOn(EMCState *script);
|
|
int o1_forceBrandonToNormal(EMCState *script);
|
|
int o1_poisonDeathNow(EMCState *script);
|
|
int o1_setScaleMode(EMCState *script);
|
|
int o1_openWSAFile(EMCState *script);
|
|
int o1_closeWSAFile(EMCState *script);
|
|
int o1_runWSAFromBeginningToEnd(EMCState *script);
|
|
int o1_displayWSAFrame(EMCState *script);
|
|
int o1_enterNewScene(EMCState *script);
|
|
int o1_setSpecialEnterXAndY(EMCState *script);
|
|
int o1_runWSAFrames(EMCState *script);
|
|
int o1_popBrandonIntoScene(EMCState *script);
|
|
int o1_restoreAllObjectBackgrounds(EMCState *script);
|
|
int o1_setCustomPaletteRange(EMCState *script);
|
|
int o1_loadPageFromDisk(EMCState *script);
|
|
int o1_customPrintTalkString(EMCState *script);
|
|
int o1_restoreCustomPrintBackground(EMCState *script);
|
|
int o1_getCharacterX(EMCState *script);
|
|
int o1_getCharacterY(EMCState *script);
|
|
int o1_setCharacterFacing(EMCState *script);
|
|
int o1_copyWSARegion(EMCState *script);
|
|
int o1_printText(EMCState *script);
|
|
int o1_loadSoundFile(EMCState *script);
|
|
int o1_displayWSAFrameOnHidPage(EMCState *script);
|
|
int o1_displayWSASequentialFrames(EMCState *script);
|
|
int o1_refreshCharacter(EMCState *script);
|
|
int o1_internalAnimOff(EMCState *script);
|
|
int o1_changeCharactersXAndY(EMCState *script);
|
|
int o1_clearSceneAnimatorBeacon(EMCState *script);
|
|
int o1_querySceneAnimatorBeacon(EMCState *script);
|
|
int o1_refreshSceneAnimator(EMCState *script);
|
|
int o1_placeItemInOffScene(EMCState *script);
|
|
int o1_wipeDownMouseItem(EMCState *script);
|
|
int o1_placeCharacterInOtherScene(EMCState *script);
|
|
int o1_getKey(EMCState *script);
|
|
int o1_specificItemInInventory(EMCState *script);
|
|
int o1_popMobileNPCIntoScene(EMCState *script);
|
|
int o1_mobileCharacterInScene(EMCState *script);
|
|
int o1_hideMobileCharacter(EMCState *script);
|
|
int o1_unhideMobileCharacter(EMCState *script);
|
|
int o1_setCharacterLocation(EMCState *script);
|
|
int o1_walkCharacterToPoint(EMCState *script);
|
|
int o1_specialEventDisplayBrynnsNote(EMCState *script);
|
|
int o1_specialEventRemoveBrynnsNote(EMCState *script);
|
|
int o1_setLogicPage(EMCState *script);
|
|
int o1_fatPrint(EMCState *script);
|
|
int o1_preserveAllObjectBackgrounds(EMCState *script);
|
|
int o1_updateSceneAnimations(EMCState *script);
|
|
int o1_sceneAnimationActive(EMCState *script);
|
|
int o1_setCharacterMovementDelay(EMCState *script);
|
|
int o1_getCharacterFacing(EMCState *script);
|
|
int o1_bkgdScrollSceneAndMasksRight(EMCState *script);
|
|
int o1_dispelMagicAnimation(EMCState *script);
|
|
int o1_findBrightestFireberry(EMCState *script);
|
|
int o1_setFireberryGlowPalette(EMCState *script);
|
|
int o1_setDeathHandlerFlag(EMCState *script);
|
|
int o1_drinkPotionAnimation(EMCState *script);
|
|
int o1_makeAmuletAppear(EMCState *script);
|
|
int o1_drawItemShapeIntoScene(EMCState *script);
|
|
int o1_setCharacterCurrentFrame(EMCState *script);
|
|
int o1_waitForConfirmationMouseClick(EMCState *script);
|
|
int o1_pageFlip(EMCState *script);
|
|
int o1_setSceneFile(EMCState *script);
|
|
int o1_getItemInMarbleVase(EMCState *script);
|
|
int o1_setItemInMarbleVase(EMCState *script);
|
|
int o1_addItemToInventory(EMCState *script);
|
|
int o1_intPrint(EMCState *script);
|
|
int o1_shakeScreen(EMCState *script);
|
|
int o1_createAmuletJewel(EMCState *script);
|
|
int o1_setSceneAnimCurrXY(EMCState *script);
|
|
int o1_poisonBrandonAndRemaps(EMCState *script);
|
|
int o1_fillFlaskWithWater(EMCState *script);
|
|
int o1_getCharacterMovementDelay(EMCState *script);
|
|
int o1_getBirthstoneGem(EMCState *script);
|
|
int o1_queryBrandonStatusBit(EMCState *script);
|
|
int o1_playFluteAnimation(EMCState *script);
|
|
int o1_playWinterScrollSequence(EMCState *script);
|
|
int o1_getIdolGem(EMCState *script);
|
|
int o1_setIdolGem(EMCState *script);
|
|
int o1_totalItemsInScene(EMCState *script);
|
|
int o1_restoreBrandonsMovementDelay(EMCState *script);
|
|
int o1_setEntranceMouseCursorTrack(EMCState *script);
|
|
int o1_itemAppearsOnGround(EMCState *script);
|
|
int o1_setNoDrawShapesFlag(EMCState *script);
|
|
int o1_fadeEntirePalette(EMCState *script);
|
|
int o1_itemOnGroundHere(EMCState *script);
|
|
int o1_queryCauldronState(EMCState *script);
|
|
int o1_setCauldronState(EMCState *script);
|
|
int o1_queryCrystalState(EMCState *script);
|
|
int o1_setCrystalState(EMCState *script);
|
|
int o1_setPaletteRange(EMCState *script);
|
|
int o1_shrinkBrandonDown(EMCState *script);
|
|
int o1_growBrandonUp(EMCState *script);
|
|
int o1_setBrandonScaleXAndY(EMCState *script);
|
|
int o1_resetScaleMode(EMCState *script);
|
|
int o1_getScaleDepthTableValue(EMCState *script);
|
|
int o1_setScaleDepthTableValue(EMCState *script);
|
|
int o1_message(EMCState *script);
|
|
int o1_checkClickOnNPC(EMCState *script);
|
|
int o1_getFoyerItem(EMCState *script);
|
|
int o1_setFoyerItem(EMCState *script);
|
|
int o1_setNoItemDropRegion(EMCState *script);
|
|
int o1_walkMalcolmOn(EMCState *script);
|
|
int o1_passiveProtection(EMCState *script);
|
|
int o1_setPlayingLoop(EMCState *script);
|
|
int o1_brandonToStoneSequence(EMCState *script);
|
|
int o1_brandonHealingSequence(EMCState *script);
|
|
int o1_protectCommandLine(EMCState *script);
|
|
int o1_pauseMusicSeconds(EMCState *script);
|
|
int o1_resetMaskRegion(EMCState *script);
|
|
int o1_setPaletteChangeFlag(EMCState *script);
|
|
int o1_vocUnload(EMCState *script);
|
|
int o1_vocLoad(EMCState *script);
|
|
int o1_dummy(EMCState *script);
|
|
};
|
|
|
|
} // End of namespace Kyra
|
|
|
|
#endif
|