aboutsummaryrefslogtreecommitdiff
path: root/scumm.h
diff options
context:
space:
mode:
authorLudvig Strigeus2001-10-23 19:51:50 +0000
committerLudvig Strigeus2001-10-23 19:51:50 +0000
commit9fdc578af0e2311cb1ff5404fce423bfc7958b1c (patch)
tree5d9698ffbd48e56c553a0d6456df5c675612b7ec /scumm.h
parenta8fac8f5abb7bfcd47372bec641258f949204cea (diff)
downloadscummvm-rg350-9fdc578af0e2311cb1ff5404fce423bfc7958b1c.tar.gz
scummvm-rg350-9fdc578af0e2311cb1ff5404fce423bfc7958b1c.tar.bz2
scummvm-rg350-9fdc578af0e2311cb1ff5404fce423bfc7958b1c.zip
recompile not needed when switching games
debugger skeleton implemented svn-id: r3442
Diffstat (limited to 'scumm.h')
-rw-r--r--scumm.h609
1 files changed, 315 insertions, 294 deletions
diff --git a/scumm.h b/scumm.h
index 365a3d546e..15649a8586 100644
--- a/scumm.h
+++ b/scumm.h
@@ -17,6 +17,10 @@
*
* Change Log:
* $Log$
+ * Revision 1.12 2001/10/23 19:51:50 strigeus
+ * recompile not needed when switching games
+ * debugger skeleton implemented
+ *
* Revision 1.11 2001/10/17 10:07:40 strigeus
* fixed verbs not saved in non dott games,
* implemented a screen effect
@@ -160,7 +164,6 @@ struct ResHeader {
uint32 size;
};
-#if defined(DOTT)
class ObjectData {
public:
uint32 offs_obim_to_room;
@@ -178,25 +181,6 @@ public:
byte fl_object_index;
byte unk_3;
};
-#else
-class ObjectData {
-public:
- uint32 offs_obim_to_room;
- uint32 offs_obcd_to_room;
- uint16 cdhd_10, cdhd_12;
- uint16 obj_nr;
- byte x_pos;
- byte y_pos;
- uint16 numstrips;
- uint16 height;
- byte actordir;
- byte parent;
- byte parentstate;
- byte ownerstate;
- byte fl_object_index;
- byte unk_3;
-};
-#endif
struct RoomHeader {
uint32 tag, size;
@@ -204,31 +188,31 @@ struct RoomHeader {
uint16 numObjects;
};
-#if !defined(DOTT)
-struct CodeHeader { /* file format */
- uint32 id;
- uint32 size;
- uint16 obj_id;
- byte x,y,w,h;
- byte flags;
- byte parent;
- uint16 unk2;
- uint16 unk3;
- byte actordir;
-};
-#else
-struct CodeHeader { /* file format */
+struct CodeHeader {
uint32 id;
uint32 size;
uint16 obj_id;
- int16 x, y;
- uint16 w,h;
- byte flags, parent;
- uint16 unk2;
- uint16 unk3;
- byte actordir;
+
+ union {
+ struct {
+ byte x,y,w,h;
+ byte flags;
+ byte parent;
+ uint16 unk2;
+ uint16 unk3;
+ byte actordir;
+ } v5;
+
+ struct {
+ int16 x, y;
+ uint16 w,h;
+ byte flags, parent;
+ uint16 unk2;
+ uint16 unk3;
+ byte actordir;
+ } v6;
+ };
};
-#endif
struct ImageHeader { /* file format */
uint32 id;
@@ -344,9 +328,7 @@ enum ScummVars {
VAR_TALKSTOP_KEY = 57,
VAR_SAVELOADDIALOG_KEY = 50,
-#if defined(DOTT)
- VAR_RANDOM_NR = 118,
-#endif
+ VAR_V6_RANDOM_NR = 118,
};
#define _maxRooms res.num[1]
@@ -534,7 +516,25 @@ struct StringTab {
int16 mask_top, mask_bottom, mask_right, mask_left;
};
+enum GameId {
+ GID_TENTACLE = 1,
+ GID_MONKEY2 = 2,
+ GID_INDY4 = 3,
+ GID_MONKEY = 4,
+};
+
+struct ScummDebugger;
+
+
struct Scumm {
+ const char *_gameText;
+ byte _gameId;
+ byte _majorScummVersion;
+ byte _middleScummVersion;
+ byte _minorScummVersion;
+
+ ScummDebugger *_debugger;
+
int _lastLoadedRoom;
int _roomResource;
byte _encbyte;
@@ -889,7 +889,7 @@ struct Scumm {
void openRoom(int room);
void deleteRoomOffsets();
void readRoomsOffsets();
- void askForDisk();
+ void askForDisk(const char *filename);
bool openResourceFile(const char *filename);
@@ -917,7 +917,8 @@ struct Scumm {
void readResTypeList(int id, uint32 tag, const char *name);
void allocResTypeData(int id, uint32 tag, int num, const char *name, int mode);
- void initThings();
+ void initThingsV5();
+ void initThingsV6();
void initRandSeeds();
@@ -1020,249 +1021,249 @@ struct Scumm {
int getObjectIndex(int object);
- void o_actorFollowCamera();
- void o_actorFromPos();
- void o_actorSet();
- void o_actorSetClass();
- void o_add();
- void o_and();
- void o_animateActor();
- void o_badOpcode();
- void o_breakHere();
- void o_chainScript();
- void o_cursorCommand();
- void o_cutscene();
- void o_debug();
- void o_decrement();
- void o_delay();
- void o_delayVariable();
- void o_divide();
- void o_doSentence();
- void o_drawBox();
- void o_drawObject();
- void o_dummy();
- void o_endCutscene();
- void o_equalZero();
- void o_expression();
- void o_faceActor();
- void o_findInventory();
- void o_findObject();
- void o_freezeScripts();
- void o_getActorCostume();
- void o_getActorElevation();
- void o_getActorFacing();
- void o_getActorMoving();
- void o_getActorRoom();
- void o_getActorScale();
- void o_getActorWalkBox();
- void o_getActorWidth();
- void o_getActorX();
- void o_getActorY();
- void o_getAnimCounter();
- void o_getClosestObjActor();
- void o_getDist();
- void o_getInventoryCount();
- void o_getObjectOwner();
- void o_getObjectState();
- void o_getRandomNr();
- void o_getScriptRunning();
- void o_getVerbEntrypoint();
- void o_ifClassOfIs();
- void o_increment();
- void o_isActorInBox();
- void o_isEqual();
- void o_isGreater();
- void o_isGreaterEqual();
- void o_isLess();
- void o_isNotEqual();
- void o_isSoundRunning();
- void o_jumpRelative();
- void o_lessOrEqual();
- void o_lights();
- void o_loadRoom();
- void o_loadRoomWithEgo();
- void o_matrixOps();
- void o_move();
- void o_multiply();
- void o_notEqualZero();
- void o_or();
- void o_overRide();
- void o_panCameraTo();
- void o_pickupObject();
- void o_print();
- void o_printEgo();
- void o_pseudoRoom();
- void o_putActor();
- void o_putActorAtObject();
- void o_putActorInRoom();
- void o_quitPauseRestart();
- void o_resourceRoutines();
- void o_roomOps();
- void o_saveRestoreVerbs();
- void o_setCameraAt();
- void o_setObjectName();
- void o_setOwnerOf();
- void o_setState();
- void o_setVarRange();
- void o_soundKludge();
- void o_startMusic();
- void o_startObject();
- void o_startScript();
- void o_startSound();
- void o_stopMusic();
- void o_stopObjectCode();
- void o_stopObjectScript();
- void o_stopScript();
- void o_stopSound();
- void o_stringOps();
- void o_subtract();
- void o_verbOps();
- void o_wait();
- void o_walkActorTo();
- void o_walkActorToActor();
- void o_walkActorToObject();
-
- void o2_pushByte();
- void o2_pushWord();
- void o2_pushByteVar();
- void o2_pushWordVar();
- void o2_invalid();
- void o2_byteArrayRead();
- void o2_wordArrayRead();
- void o2_byteArrayIndexedRead();
- void o2_wordArrayIndexedRead();
- void o2_dup();
- void o2_zero();
- void o2_eq();
- void o2_neq();
- void o2_gt();
- void o2_lt();
- void o2_le();
- void o2_ge();
- void o2_add();
- void o2_sub();
- void o2_mul();
- void o2_div();
- void o2_land();
- void o2_lor();
- void o2_kill();
- void o2_writeByteVar();
- void o2_writeWordVar();
- void o2_byteArrayWrite();
- void o2_wordArrayWrite();
- void o2_byteArrayIndexedWrite();
- void o2_wordArrayIndexedWrite();
- void o2_byteVarInc();
- void o2_wordVarInc();
- void o2_byteArrayInc();
- void o2_wordArrayInc();
- void o2_byteVarDec();
- void o2_wordVarDec();
- void o2_byteArrayDec();
- void o2_wordArrayDec();
- void o2_jumpTrue();
- void o2_jumpFalse();
- void o2_jump();
- void o2_startScriptEx();
- void o2_startScript();
- void o2_startObject();
- void o2_setObjectState();
- void o2_setObjectXY();
- void o2_stopObjectCode();
- void o2_endCutscene();
- void o2_cutScene();
- void o2_stopMusic();
- void o2_freezeUnfreeze();
- void o2_cursorCommand();
- void o2_breakHere();
- void o2_ifClassOfIs();
- void o2_setClass();
- void o2_getState();
- void o2_setState();
- void o2_setOwner();
- void o2_getOwner();
- void o2_startSound();
- void o2_stopSound();
- void o2_startMusic();
- void o2_stopObjectScript();
- void o2_panCameraTo();
- void o2_actorFollowCamera();
- void o2_setCameraAt();
- void o2_loadRoom();
- void o2_stopScript();
- void o2_walkActorToObj();
- void o2_walkActorTo();
- void o2_putActorInRoom();
- void o2_putActorAtObject();
- void o2_faceActor();
- void o2_animateActor();
- void o2_doSentence();
- void o2_pickupObject();
- void o2_loadRoomWithEgo();
- void o2_getRandomNumber();
- void o2_getRandomNumberRange();
- void o2_getActorMoving();
- void o2_getScriptRunning();
- void o2_getActorRoom();
- void o2_getObjectX();
- void o2_getObjectY();
- void o2_getObjectDir();
- void o2_getActorWalkBox();
- void o2_getActorCostume();
- void o2_findInventory();
- void o2_getInventoryCount();
- void o2_getVerbFromXY();
- void o2_beginOverride();
- void o2_endOverride();
- void o2_setObjectName();
- void o2_isSoundRunning();
- void o2_setBoxFlags();
- void o2_createBoxMatrix();
- void o2_resourceRoutines();
- void o2_roomOps();
- void o2_actorSet();
- void o2_verbOps();
- void o2_getActorFromXY();
- void o2_findObject();
- void o2_pseudoRoom();
- void o2_getActorElevation();
- void o2_getVerbEntrypoint();
- void o2_arrayOps();
- void o2_saveRestoreVerbs();
- void o2_drawBox();
- void o2_getActorWidth();
- void o2_wait();
- void o2_getActorScaleX();
- void o2_getActorAnimCounter1();
- void o2_soundKludge();
- void o2_isAnyOf();
- void o2_quitPauseRestart();
- void o2_isActorInBox();
- void o2_delay();
- void o2_delayLonger();
- void o2_delayVeryLong();
- void o2_stopSentence();
- void o2_print_0();
- void o2_print_1();
- void o2_print_2();
- void o2_print_3();
- void o2_printActor();
- void o2_printEgo();
- void o2_talkActor();
- void o2_talkEgo();
- void o2_dim();
- void o2_runVerbCodeQuick();
- void o2_runScriptQuick();
- void o2_dim2();
- void o2_abs();
- void o2_distObjectObject();
- void o2_distObjectPt();
- void o2_distPtPt();
- void o2_dummy_stacklist();
- void o2_miscOps();
- void o2_breakMaybe();
- void o2_pickOneOf();
- void o2_pickOneOfDefault();
+ void o5_actorFollowCamera();
+ void o5_actorFromPos();
+ void o5_actorSet();
+ void o5_actorSetClass();
+ void o5_add();
+ void o5_and();
+ void o5_animateActor();
+ void o5_badOpcode();
+ void o5_breakHere();
+ void o5_chainScript();
+ void o5_cursorCommand();
+ void o5_cutscene();
+ void o5_debug();
+ void o5_decrement();
+ void o5_delay();
+ void o5_delayVariable();
+ void o5_divide();
+ void o5_doSentence();
+ void o5_drawBox();
+ void o5_drawObject();
+ void o5_dummy();
+ void o5_endCutscene();
+ void o5_equalZero();
+ void o5_expression();
+ void o5_faceActor();
+ void o5_findInventory();
+ void o5_findObject();
+ void o5_freezeScripts();
+ void o5_getActorCostume();
+ void o5_getActorElevation();
+ void o5_getActorFacing();
+ void o5_getActorMoving();
+ void o5_getActorRoom();
+ void o5_getActorScale();
+ void o5_getActorWalkBox();
+ void o5_getActorWidth();
+ void o5_getActorX();
+ void o5_getActorY();
+ void o5_getAnimCounter();
+ void o5_getClosestObjActor();
+ void o5_getDist();
+ void o5_getInventoryCount();
+ void o5_getObjectOwner();
+ void o5_getObjectState();
+ void o5_getRandomNr();
+ void o5_getScriptRunning();
+ void o5_getVerbEntrypoint();
+ void o5_ifClassOfIs();
+ void o5_increment();
+ void o5_isActorInBox();
+ void o5_isEqual();
+ void o5_isGreater();
+ void o5_isGreaterEqual();
+ void o5_isLess();
+ void o5_isNotEqual();
+ void o5_isSoundRunning();
+ void o5_jumpRelative();
+ void o5_lessOrEqual();
+ void o5_lights();
+ void o5_loadRoom();
+ void o5_loadRoomWithEgo();
+ void o5_matrixOps();
+ void o5_move();
+ void o5_multiply();
+ void o5_notEqualZero();
+ void o5_or();
+ void o5_overRide();
+ void o5_panCameraTo();
+ void o5_pickupObject();
+ void o5_print();
+ void o5_printEgo();
+ void o5_pseudoRoom();
+ void o5_putActor();
+ void o5_putActorAtObject();
+ void o5_putActorInRoom();
+ void o5_quitPauseRestart();
+ void o5_resourceRoutines();
+ void o5_roomOps();
+ void o5_saveRestoreVerbs();
+ void o5_setCameraAt();
+ void o5_setObjectName();
+ void o5_setOwnerOf();
+ void o5_setState();
+ void o5_setVarRange();
+ void o5_soundKludge();
+ void o5_startMusic();
+ void o5_startObject();
+ void o5_startScript();
+ void o5_startSound();
+ void o5_stopMusic();
+ void o5_stopObjectCode();
+ void o5_stopObjectScript();
+ void o5_stopScript();
+ void o5_stopSound();
+ void o5_stringOps();
+ void o5_subtract();
+ void o5_verbOps();
+ void o5_wait();
+ void o5_walkActorTo();
+ void o5_walkActorToActor();
+ void o5_walkActorToObject();
+
+ void o6_pushByte();
+ void o6_pushWord();
+ void o6_pushByteVar();
+ void o6_pushWordVar();
+ void o6_invalid();
+ void o6_byteArrayRead();
+ void o6_wordArrayRead();
+ void o6_byteArrayIndexedRead();
+ void o6_wordArrayIndexedRead();
+ void o6_dup();
+ void o6_zero();
+ void o6_eq();
+ void o6_neq();
+ void o6_gt();
+ void o6_lt();
+ void o6_le();
+ void o6_ge();
+ void o6_add();
+ void o6_sub();
+ void o6_mul();
+ void o6_div();
+ void o6_land();
+ void o6_lor();
+ void o6_kill();
+ void o6_writeByteVar();
+ void o6_writeWordVar();
+ void o6_byteArrayWrite();
+ void o6_wordArrayWrite();
+ void o6_byteArrayIndexedWrite();
+ void o6_wordArrayIndexedWrite();
+ void o6_byteVarInc();
+ void o6_wordVarInc();
+ void o6_byteArrayInc();
+ void o6_wordArrayInc();
+ void o6_byteVarDec();
+ void o6_wordVarDec();
+ void o6_byteArrayDec();
+ void o6_wordArrayDec();
+ void o6_jumpTrue();
+ void o6_jumpFalse();
+ void o6_jump();
+ void o6_startScriptEx();
+ void o6_startScript();
+ void o6_startObject();
+ void o6_setObjectState();
+ void o6_setObjectXY();
+ void o6_stopObjectCode();
+ void o6_endCutscene();
+ void o6_cutScene();
+ void o6_stopMusic();
+ void o6_freezeUnfreeze();
+ void o6_cursorCommand();
+ void o6_breakHere();
+ void o6_ifClassOfIs();
+ void o6_setClass();
+ void o6_getState();
+ void o6_setState();
+ void o6_setOwner();
+ void o6_getOwner();
+ void o6_startSound();
+ void o6_stopSound();
+ void o6_startMusic();
+ void o6_stopObjectScript();
+ void o6_panCameraTo();
+ void o6_actorFollowCamera();
+ void o6_setCameraAt();
+ void o6_loadRoom();
+ void o6_stopScript();
+ void o6_walkActorToObj();
+ void o6_walkActorTo();
+ void o6_putActorInRoom();
+ void o6_putActorAtObject();
+ void o6_faceActor();
+ void o6_animateActor();
+ void o6_doSentence();
+ void o6_pickupObject();
+ void o6_loadRoomWithEgo();
+ void o6_getRandomNumber();
+ void o6_getRandomNumberRange();
+ void o6_getActorMoving();
+ void o6_getScriptRunning();
+ void o6_getActorRoom();
+ void o6_getObjectX();
+ void o6_getObjectY();
+ void o6_getObjectDir();
+ void o6_getActorWalkBox();
+ void o6_getActorCostume();
+ void o6_findInventory();
+ void o6_getInventoryCount();
+ void o6_getVerbFromXY();
+ void o6_beginOverride();
+ void o6_endOverride();
+ void o6_setObjectName();
+ void o6_isSoundRunning();
+ void o6_setBoxFlags();
+ void o6_createBoxMatrix();
+ void o6_resourceRoutines();
+ void o6_roomOps();
+ void o6_actorSet();
+ void o6_verbOps();
+ void o6_getActorFromXY();
+ void o6_findObject();
+ void o6_pseudoRoom();
+ void o6_getActorElevation();
+ void o6_getVerbEntrypoint();
+ void o6_arrayOps();
+ void o6_saveRestoreVerbs();
+ void o6_drawBox();
+ void o6_getActorWidth();
+ void o6_wait();
+ void o6_getActorScaleX();
+ void o6_getActorAnimCounter1();
+ void o6_soundKludge();
+ void o6_isAnyOf();
+ void o6_quitPauseRestart();
+ void o6_isActorInBox();
+ void o6_delay();
+ void o6_delayLonger();
+ void o6_delayVeryLong();
+ void o6_stopSentence();
+ void o6_print_0();
+ void o6_print_1();
+ void o6_print_2();
+ void o6_print_3();
+ void o6_printActor();
+ void o6_printEgo();
+ void o6_talkActor();
+ void o6_talkEgo();
+ void o6_dim();
+ void o6_runVerbCodeQuick();
+ void o6_runScriptQuick();
+ void o6_dim2();
+ void o6_abs();
+ void o6_distObjectObject();
+ void o6_distObjectPt();
+ void o6_distPtPt();
+ void o6_dummy_stacklist();
+ void o6_miscOps();
+ void o6_breakMaybe();
+ void o6_pickOneOf();
+ void o6_pickOneOfDefault();
void soundKludge(int16 *list);
@@ -1522,6 +1523,7 @@ struct Scumm {
void showHelpAndExit();
char *getGameName();
+ bool detectGame();
void setupOpcodes();
void setupOpcodes2();
@@ -1555,10 +1557,9 @@ struct Scumm {
int getStringLen(byte *ptr);
-#if defined(DOTT)
void readArrayFromIndexFile();
void readMAXS();
- void readIndexFile();
+ void readIndexFileV6();
int readArray(int array, int index, int base);
void writeArray(int array, int index, int base, int value);
@@ -1580,11 +1581,31 @@ struct Scumm {
void unkMiscOp4(int a, int b, int c, int d);
void unkMiscOp9();
void startManiac();
-#else
- void readIndexFile(int i);
-#endif
+
+ void readIndexFileV5(int i);
};
+struct ScummDebugger {
+ Scumm *_s;
+ byte _command;
+ char *_parameters;
+
+ bool _welcome;
+
+ int _go_amount;
+
+ char _cmd_buffer[256];
+
+ void on_frame();
+ bool do_command();
+ void enter();
+ int get_command();
+ void attach(Scumm *s);
+ void detach();
+};
+
+
+
void waitForTimer(Scumm *s);
void outputdisplay2(Scumm *s, int disp);
extern const byte revBitMask[8];