diff options
-rw-r--r-- | queen/defs.h | 2 | ||||
-rw-r--r-- | queen/display.cpp | 59 | ||||
-rw-r--r-- | queen/display.h | 1 | ||||
-rw-r--r-- | queen/logic.cpp | 29 | ||||
-rw-r--r-- | queen/logic.h | 18 | ||||
-rw-r--r-- | queen/structs.h | 10 | ||||
-rw-r--r-- | queen/xref.txt | 52 |
7 files changed, 89 insertions, 82 deletions
diff --git a/queen/defs.h b/queen/defs.h index 67fe0588e5..38d4a54c53 100644 --- a/queen/defs.h +++ b/queen/defs.h @@ -120,7 +120,7 @@ enum Verb { VERB_PICK_UP = 7, VERB_LOOK_AT = 9, VERB_TALK_TO = 8, - VERB_PANEL_COMMAND_LAST = 8, + VERB_PANEL_COMMAND_LAST = 9, VERB_WALK_TO = 10, VERB_SCROLL_UP = 11, diff --git a/queen/display.cpp b/queen/display.cpp index 0b29b1c2cc..be4f7a346b 100644 --- a/queen/display.cpp +++ b/queen/display.cpp @@ -122,7 +122,6 @@ Display::Display(OSystem *system) _pals.dirtyMin = 0; _pals.dirtyMax = 255; _pals.scrollable = true; - _pals.customScrollSeed = 0; _horizontalScroll = 0; } @@ -147,15 +146,13 @@ void Display::dynalumInit(Resource *resource, const char *roomName, uint16 roomN // FIXME: are these tests really needed ? if (roomNum < 90 || ((roomNum > 94) && (roomNum < 114))) { char filename[20]; - - sprintf(filename, "%s.msk", roomName); - if (resource->exists(filename)) - resource->loadFile(filename, 0, (uint8*)_dynalum.msk); - - sprintf(filename, "%s.lum", roomName); - if (resource->exists(filename)) - resource->loadFile(filename, 0, (uint8*)_dynalum.lum); - } + sprintf(filename, "%s.msk", roomName); + if (resource->exists(filename)) + resource->loadFile(filename, 0, (uint8*)_dynalum.msk); + sprintf(filename, "%s.lum", roomName); + if (resource->exists(filename)) + resource->loadFile(filename, 0, (uint8*)_dynalum.lum); + } } @@ -361,6 +358,7 @@ void Display::palCustomColors(uint16 roomNum) { void Display::palCustomScroll(uint16 roomNum) { debug(9, "Display::palCustomScroll(%d)", roomNum); + static int16 scrollx = 0; if (!_pals.scrollable) { return; @@ -370,7 +368,7 @@ void Display::palCustomScroll(uint16 roomNum) { int loPal = 255; int i; - ++_pals.customScrollSeed; + ++scrollx; switch (roomNum) { case 123: { static int16 j = 0,jdir = 2; @@ -415,7 +413,7 @@ void Display::palCustomScroll(uint16 roomNum) { hiPal = 95; break; case 100: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(128, 132); palScroll(133, 137); palScroll(138, 143); @@ -424,14 +422,14 @@ void Display::palCustomScroll(uint16 roomNum) { } break; case 102: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(112, 127); loPal = 112; hiPal = 127; } break; case 62: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(0x6c, 0x77); loPal = 0x6c; hiPal = 0x77; @@ -443,7 +441,7 @@ void Display::palCustomScroll(uint16 roomNum) { hiPal = 123; break; case 59: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(56, 63); loPal = 56; hiPal = 63; @@ -459,27 +457,27 @@ void Display::palCustomScroll(uint16 roomNum) { palScroll(88, 91); palScroll(92, 95); palScroll(128, 135); - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(136, 143); } loPal = 28; hiPal = 143; break; case 40: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(96, 103); } - if(_pals.customScrollSeed & 3) { + if(scrollx & 3) { palScroll(104, 107); } loPal = 96; hiPal = 107; break; case 97: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(96, 107); } - if(_pals.customScrollSeed & 3) { + if(scrollx & 3) { palScroll(108, 122); } loPal = 96; @@ -492,7 +490,7 @@ void Display::palCustomScroll(uint16 roomNum) { break; case 57: palScroll(128, 143); - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(96, 103); } loPal = 96; @@ -504,7 +502,7 @@ void Display::palCustomScroll(uint16 roomNum) { hiPal = 95; break; case 2: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(120, 127); } loPal = 120; @@ -512,7 +510,7 @@ void Display::palCustomScroll(uint16 roomNum) { break; case 3: case 5: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(128, 135); palScroll(136, 143); loPal = 128; @@ -520,14 +518,14 @@ void Display::palCustomScroll(uint16 roomNum) { } break; case 7: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(119, 127); loPal = 119; hiPal = 127; } break; case 42: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(118, 127); palScroll(136, 143); loPal = 118; @@ -535,7 +533,7 @@ void Display::palCustomScroll(uint16 roomNum) { } break; case 4: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(32,47); } palScroll(64, 70); @@ -544,7 +542,7 @@ void Display::palCustomScroll(uint16 roomNum) { hiPal = 79; break; case 8: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(120, 127); } loPal = 120; @@ -552,10 +550,10 @@ void Display::palCustomScroll(uint16 roomNum) { break; case 12: case 64: - if(_pals.customScrollSeed & 1) { + if(scrollx & 1) { palScroll(112, 119); } - if(_pals.customScrollSeed & 3) { + if(scrollx & 3) { palScroll(120, 127); } loPal = 112; @@ -592,7 +590,7 @@ void Display::palCustomFlash() { // set flash palette palSet(tempPal, 0, 255, true); // restore original palette - // palSet(_pals.screen, 0, 255, true); + palSet(_pals.screen, 0, 255, true); } @@ -796,6 +794,7 @@ void Display::waitForTimer() { _gotTick = false; while (!_gotTick) { + // FIXME: use _input->delay() instead OSystem::Event event; _system->delay_msecs(10); diff --git a/queen/display.h b/queen/display.h index 608133d861..5c5a2e2f6b 100644 --- a/queen/display.h +++ b/queen/display.h @@ -126,7 +126,6 @@ private: uint8 *screen; int dirtyMin, dirtyMax; bool scrollable; - uint16 customScrollSeed; } _pals; uint8 *_buffers[3]; diff --git a/queen/logic.cpp b/queen/logic.cpp index d98cce80a9..77c6781b29 100644 --- a/queen/logic.cpp +++ b/queen/logic.cpp @@ -113,7 +113,7 @@ void State::alterDefaultVerb(uint16 *objState, Verb v) { uint16 val; switch (v) { case VERB_OPEN: - val = 0; + val = 1; break; case VERB_CLOSE: val = 3; @@ -140,7 +140,7 @@ void State::alterDefaultVerb(uint16 *objState, Verb v) { val = 0; break; } - *objState = (*objState & ~0xF0) | (v << 4); + *objState = (*objState & ~0xF0) | (val << 4); } @@ -418,17 +418,6 @@ void Logic::initialise() { _oldRoom = 0; } -uint16 Logic::currentRoom() { - return _currentRoom; -} - -void Logic::currentRoom(uint16 room) { - _currentRoom = room; -} - -void Logic::oldRoom(uint16 room) { - _oldRoom = room; -} ObjectData* Logic::objectData(int index) { return &_objectData[index]; @@ -1897,6 +1886,20 @@ void Logic::playCutaway(const char* cutFile) { } +const char* Logic::objectOrItemName(int16 obj) const { + + uint16 name; + if (obj < 0) { + name = _itemData[ABS(obj)].item; + } + else { + name = _objectData[obj].name; + } + return _objName[name]; + +} + + void Logic::update() { _graphics->update(_currentRoom); _input->delay(); diff --git a/queen/logic.h b/queen/logic.h index 17900a11d7..c907f56233 100644 --- a/queen/logic.h +++ b/queen/logic.h @@ -87,14 +87,14 @@ public: Logic(Resource *resource, Graphics *graphics, Display *display, Input *input, Sound *sound); ~Logic(); - uint16 currentRoom(); - void currentRoom(uint16 room); + uint16 currentRoom() const { return _currentRoom; } + void currentRoom(uint16 room) { _currentRoom = room; } - uint16 oldRoom() { return _oldRoom; } - void oldRoom(uint16 room); - - uint16 newRoom() { return _newRoom; } - void newRoom(uint16 room) { _newRoom = room; } + uint16 oldRoom() const { return _oldRoom; } + void oldRoom(uint16 room) { _oldRoom = room; } + + uint16 newRoom() const { return _newRoom; } + void newRoom(uint16 room) { _newRoom = room; } ObjectData* objectData(int index); uint16 roomData(int room); @@ -200,6 +200,8 @@ public: void playCutaway(const char* cutFile); + const char* objectOrItemName(int16 obj) const; + Display *display() { return _display; } void update(); @@ -282,7 +284,7 @@ protected: uint16 _numFurnitureAnimated; //! Number of static furniture in current room (FMAX) - uint16 _numFurnitureStatic; // FMAX + uint16 _numFurnitureStatic; //! Total number of frames for the animated furniture (FMAXLEN) uint16 _numFurnitureAnimatedLen; diff --git a/queen/structs.h b/queen/structs.h index 6a0ff5c6db..70d15f9ec0 100644 --- a/queen/structs.h +++ b/queen/structs.h @@ -311,7 +311,7 @@ struct ActorData { struct CmdListData { //! action to perform - int16 verb; + Verb verb; //! first object used in the action int16 nounObj1; //! second object used in the action @@ -357,7 +357,7 @@ struct CmdListData { int16 specialSection; void readFrom(byte *&ptr) { - verb = (int16)READ_BE_UINT16(ptr); ptr += 2; + verb = (Verb)READ_BE_UINT16(ptr); ptr += 2; nounObj1 = (int16)READ_BE_UINT16(ptr); ptr += 2; nounObj2 = (int16)READ_BE_UINT16(ptr); ptr += 2; song = (int16)READ_BE_UINT16(ptr); ptr += 2; @@ -368,6 +368,10 @@ struct CmdListData { image = (int16)READ_BE_UINT16(ptr); ptr += 2; specialSection = (int16)READ_BE_UINT16(ptr); ptr += 2; } + + bool match(Verb v, int16 obj1, int16 obj2) const { + return verb == verb && nounObj1 == obj1 && nounObj2 == obj2; + } }; @@ -391,7 +395,7 @@ struct CmdObject { //! identifier of the command int16 id; int16 dstObj; // >0: show, <0: hide - int16 srcObj; // >0: copy from srcObj, -1: delete dstObj + int16 srcObj; // >0: copy from srcObj, 0: nothing, -1: delete dstObj void readFrom(byte *&ptr) { id = (int16)READ_BE_UINT16(ptr); ptr += 2; diff --git a/queen/xref.txt b/queen/xref.txt index 8db6ffff76..9c861f60ea 100644 --- a/queen/xref.txt +++ b/queen/xref.txt @@ -16,7 +16,7 @@ COMMAND ======= ALTER_DEFAULT() CLEAR_COMMAND() Command::clear -EXECUTE_ACTION() +EXECUTE_ACTION() Command::executeCurrentAction FIND_DEFAULT() Command::findDefault OPEN_CLOSE_OTHER() Command::openOrCloseAssociatedObject P1_SET_CONDITIONS() Command::setConditions @@ -28,21 +28,14 @@ SELECT_ITEM() SELECT_NOUN() SELECT_VERB() - -ACTION,ACTION2 +ACTION,ACTION2 Command::_action* CLEVEL Command::_commandLevel -COM *EXECUTE_ACTION local* COMMANDstr Command::_command -COMMAX *EXECUTE_ACTION local* -COND *EXECUTE_ACTION local* -CURRCOM *EXECUTE_ACTION local* DEFCOMM -GSET *P1_SET_CONDITIONS local* OLDVERB,VERB OLDNOUN,NOUN,NOUN2 PARSE Command::_parse SUBJ1,SUBJ2,SUBJECT Command::_subject* -A2 *EXECUTE_ACTION local* -TEMPI *P1_SET_CONDITIONS local* TEMPstr WORDstr @@ -134,16 +127,10 @@ sortbobs() Graphics::bobSortAll stringanim() Graphics::bobAnimString - bobs Graphics::_bobs -BDxres Display::_bdWidth -BDyres display::_bdHeight cambob Graphics::_cameraBob clothespal Display::PAL_JOE_CLOTHES dresspal Display::PAL_JOE_DRESS -font TextRenderer::FONT -font_sizes TextRenderer::charWidth -OUTLINE *not needed* sortedbobs Graphics::_sortedBobs -scrollx Display::_horizontalScroll INPUT @@ -183,11 +170,11 @@ SETUP_JOE() Logic::joeSetup USE_UNDERWEAR() Logic::joeUseUnderwear USE_CLOTHES() Logic::joeUseClothes USE_DRESS() Logic::joeUseDress -WALK() Logic::joeWalk +WALK() Logic::joeWalkTo - JOE_RESPstr Logic::_joeResponse JOEF,JX,JY,JDIR Logic::_joe.* -JOEWALK Logic::_joe.walk // legal values = 0,1,2,3 +JOEWALK Logic::_joe.walk (legal values = 0,1,2,3) JOURNAL @@ -214,7 +201,7 @@ LOOK_ICON() LOOK_ITEM() LOOK_ROOM() P3_COPY_FROM() Cutaway::objectCopy -R_MAP() // handle map 'm1' +R_MAP() (handle map 'm1') REDISP_OBJECT() Logic::roomRefreshObject restart_game() SETUP_BOBS() Graphics::bobSetupControl @@ -249,7 +236,6 @@ FMAX Logic::_numFurnitureStatic FMAXA Logic::_numFurnitureAnimated FMAXLEN Logic::_numFurnitureAnimatedLen FRAMES Logic::_numFrames -FTOT *queen.c/SETUP_FURNITURE local var* FURN_DATA_MAX Logic::_numFurniture GAMESTATE Logic::_gameState GRAPHIC_ANIM_MAX Logic::_numGraphicAnim @@ -266,7 +252,6 @@ OBJECT_DATA Logic::_objectData OBJECT_DESCRstr Logic::_objDescription OBJECT_NAMEstr Logic::_objName OBJMAX Logic::_objMax -OBJMAXv *== Logic::_objMax[Logic::_currentRoom]* OBJTOT Logic::_numObjects OLDROOM,ROOM,NEW_ROOM Logic::_*oom ROOMTOT Logic::_numRooms @@ -323,11 +308,16 @@ palscroll() Display::palScroll putcharacter() TextRenderer::drawChar setpal() Display::palSet - +BDxres Display::_bdWidth +BDyres Display::_bdHeight COMPANEL +font TextRenderer::FONT +font_sizes TextRenderer::charWidth FULLSCREEN Graphics::_fullscreen nopalscroll Display::_pals.scrollable palette Graphics::_paletteRoom panelflag Graphics::_panelFlag +scrollx Display::_horizontalScroll tpal Graphics::_paletteScreen @@ -351,8 +341,6 @@ STATE ALTER_STATE() State::alterState* FIND_STATE() State::findState* - -Gstr *no needed* // grab state -Pstr *no needed* // FIND_STATE result TALK @@ -413,13 +401,9 @@ MOVE_OTHER() Walk::personMove - AREALIST Walk::_areaList AREASTRIKE Walk::_areaStrike -MAPC *findFreeArea local var* movdata Walk::_moveData -NEWP,OLDP *locals in joeMove && personMove* -OLDX,X,OLDY,Y *passed as arguments* WALK_DATA Walk::_walkData WALKI Walk::_walkDataCount -X2,X1,XD,YD *incWalkData && findFreeArea locals* ZONES @@ -487,3 +471,19 @@ BS,DS // CALC_SCALE SX,SY, NEWA // FIND_FREE_AREA local IX,IY // Cutaway locals +COM // EXECUTE_ACTION local +COMMAX // EXECUTE_ACTION local +COND // EXECUTE_ACTION local +CURRCOM // EXECUTE_ACTION local +GSET // P1_SET_CONDITIONS local +A2 // EXECUTE_ACTION local +TEMPI // P1_SET_CONDITIONS local +MAPC // findFreeArea local var +NEWP,OLDP // locals in joeMove && personMove +OLDX,X,OLDY,Y // passed as arguments +X2,X1,XD,YD // incWalkData && findFreeArea locals +Gstr // not needed, grab state +Pstr // not needed, FIND_STATE result +OUTLINE // not needed, textSet() Graphics::parameter +FTOT // queen.c/SETUP_FURNITURE local var +OBJMAXv // == Logic::_objMax[Logic::_currentRoom] |