diff options
author | Gregory Montoir | 2003-11-02 16:47:31 +0000 |
---|---|---|
committer | Gregory Montoir | 2003-11-02 16:47:31 +0000 |
commit | c4404baa45f67f2f5cf5241b1c77fc16d6b12585 (patch) | |
tree | c88ea97abf5eb83a0f68dadfa06315cb93ee9b9b /queen | |
parent | 082bed69401235b3d8fe2ec63b14d9dc28badd80 (diff) | |
download | scummvm-rg350-c4404baa45f67f2f5cf5241b1c77fc16d6b12585.tar.gz scummvm-rg350-c4404baa45f67f2f5cf5241b1c77fc16d6b12585.tar.bz2 scummvm-rg350-c4404baa45f67f2f5cf5241b1c77fc16d6b12585.zip |
cleanup/remaining Walk cutaway calls
svn-id: r11056
Diffstat (limited to 'queen')
-rw-r--r-- | queen/logic.cpp | 128 | ||||
-rw-r--r-- | queen/logic.h | 9 | ||||
-rw-r--r-- | queen/walk.cpp | 71 | ||||
-rw-r--r-- | queen/walk.h | 40 |
4 files changed, 176 insertions, 72 deletions
diff --git a/queen/logic.cpp b/queen/logic.cpp index 336ede83ba..e2ded62ef5 100644 --- a/queen/logic.cpp +++ b/queen/logic.cpp @@ -1923,9 +1923,12 @@ void Logic::joeUseUnderwear() { } -void Logic::playCutaway(const char* cutFile) { +void Logic::playCutaway(const char *cutFile, char *next) { - char next[20]; + char nextFile[20]; + if (next == NULL) { + next = nextFile; + } Cutaway::run(cutFile, next, _graphics, _input, this, _resource, _sound); } @@ -2192,6 +2195,127 @@ void Logic::checkPlayer() { } +void Logic::customMoveJoe(int facing, uint16 areaNum, uint16 walkDataNum) { + + // queen.c l.2838-2911 + debug(9, "customMoveJoe(%d, %d, %d)\n", facing, areaNum, walkDataNum); + + // Stop animating Joe + _graphics->bob(0)->animating = false; + + // Make Joe face the right direction + joeFacing(facing); + joeFace(); + + _newRoom = 0; + _entryObj = 0; + + char nextCut[20]; + memset(nextCut, 0, sizeof(nextCut)); + + switch (_currentRoom) { + case 4: + joeSpeak(16); + break; + case 6: + playCutaway("c6c.CUT", nextCut); + break; + case 14: + playCutaway("c14b.CUT", nextCut); + break; + case 16: + if (areaNum == 3) { + playCutaway("c16a.CUT", nextCut); + } + break; + case 17: + if (walkDataNum == 4) { + playCutaway("c17a.CUT", nextCut); + } + else if (walkDataNum == 2) { + playCutaway("c17b.CUT", nextCut); + } + break; + case 22: + playCutaway("c22a.CUT", nextCut); + break; + case 26: + playCutaway("c26b.CUT", nextCut); + break; + case 30: + playCutaway("c30a.CUT", nextCut); + break; + case 32: + playCutaway("c32c.CUT", nextCut); + break; + case 50: + if (areaNum == 6) { + if (_gameState[21] == 0) { + playCutaway("c50d.CUT", nextCut); + while (nextCut[0] != '\0') { + playCutaway(nextCut, nextCut); + } + _gameState[21] = 1; + } else { + playCutaway("c50h.CUT", nextCut); + } + } + break; + case 53: + playCutaway("c53b.CUT", nextCut); + break; + case 55: + joeSpeak(19); + break; + case 71: + joeSpeak(21); + break; + case 73: + // don't play next Cutaway + if (_gameState[VAR_ROOM73_CUTAWAY] == 0) { + playCutaway("c73a.CUT"); + _gameState[VAR_ROOM73_CUTAWAY] = 1; + joeUseUnderwear(); + joeFace(); + } + else if (_gameState[VAR_ROOM73_CUTAWAY] == 1) { + playCutaway("c73b.CUT"); + _gameState[VAR_ROOM73_CUTAWAY] = 2; + } + else if (_gameState[VAR_ROOM73_CUTAWAY] == 2) { + playCutaway("c73c.CUT"); + } + break; + case 100: + if (areaNum == 7) { + joeSpeak(17); + } + break; + case 101: + if (areaNum == 5 && _gameState[187] == 0) { + playCutaway("c101b.CUT", nextCut); + } + break; + case 103: + if (areaNum == 3) { + if (_gameState[35] == 1) { + playCutaway("c103e.CUT", nextCut); + } + else if (_gameState[35] == 0) { + playCutaway("c103b.CUT", nextCut); + _gameState[35] = 1; + } + } + break; + } + + while (strlen(nextCut) > 4 && + scumm_stricmp(nextCut + strlen(nextCut) - 4, ".cut") == 0) { + playCutaway(nextCut, nextCut); + } +} + + void Logic::update() { _graphics->update(_currentRoom); _input->delay(); diff --git a/queen/logic.h b/queen/logic.h index 82b6e974f5..254d0cbdef 100644 --- a/queen/logic.h +++ b/queen/logic.h @@ -226,18 +226,13 @@ public: //! GRAB_DIR void joeGrabDirection(StateGrab grab, uint16 speed); - //! USE_DRESS void joeUseDress(bool showCut); - - //! USE_CLOTHES void joeUseClothes(bool showCut); - - //! USE_UNDERWEAR void joeUseUnderwear(); void joeSpeak(uint16 descNum, bool objectType = false); - void playCutaway(const char* cutFile); + void playCutaway(const char *cutFile, char *next = NULL); const char* objectOrItemName(int16 obj) const; @@ -269,6 +264,8 @@ public: void checkPlayer(); + void customMoveJoe(int facing, uint16 areaNum, uint16 walkDataNum); + void update(); diff --git a/queen/walk.cpp b/queen/walk.cpp index bb4589e81c..b52f481bbf 100644 --- a/queen/walk.cpp +++ b/queen/walk.cpp @@ -28,28 +28,28 @@ namespace Queen { -const MovePersonData Walk::_moveData[] = { - {"COMPY", -1, -6, 1, 6, 0, 0, 0, 0,12,12,1,14}, - {"DEINO", -1, -8, 1, 8, 0, 0, 0, 0,11,11,1,10}, - {"FAYE", -1, -6, 1, 6,13,18, 7,12,19,22,2, 5}, - {"GUARDS", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7,2, 5}, - {"PRINCESS1", -1, -6, 1, 6,13,18, 7,12,19,21,2, 5}, - {"PRINCESS2", -1, -6, 1, 6,13,18, 7,12,19,21,2, 5}, - {"AMGUARD", -1, -6, 1, 6,13,18, 7,12,19,21,2, 5}, - {"SPARKY", -1, -6, 1, 6,13,18, 7,12,21,20,2, 5}, - {"LOLA_SHOWER", -1, -6,55,60, 0, 0, 0, 0, 7, 7,2, 5}, - {"LOLA", -24,-29,24,29, 0, 0, 0, 0,30,30,2, 5}, - {"BOB", -15,-20,15,20,21,26, 0, 0,27,29,2, 5}, - {"CHEF", -1, -4, 1, 4, 0, 0, 0, 0, 1, 5,2, 4}, - {"HENRY", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7,2, 6}, - {"ANDERSON", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7,2, 5}, - {"JASPAR", -4, -9, 4, 9,16,21,10,15, 1, 3,1,10}, - {"PYGMY", -7,-12, 7,12, 0, 0, 0, 0,27,27,2, 5}, - {"FRANK", 7, 12, 1, 6, 0, 0, 0, 0,13,13,2, 4}, - {"WEDGEWOOD", -20,-25,20,25, 0, 0, 0, 0, 1, 1,1, 5}, - {"TMPD", -1, -6, 1, 6,13,18, 7,12,19,21,2, 5}, - {"IAN", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7,2, 6}, - {"*", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0} +const MovePersonData Walk::MOVE_DATA[] = { + {"COMPY", -1, -6, 1, 6, 0, 0, 0, 0, 12, 12, 1, 14}, + {"DEINO", -1, -8, 1, 8, 0, 0, 0, 0, 11, 11, 1, 10}, + {"FAYE", -1, -6, 1, 6, 13, 18, 7, 12, 19, 22, 2, 5}, + {"GUARDS", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7, 2, 5}, + {"PRINCESS1", -1, -6, 1, 6, 13, 18, 7, 12, 19, 21, 2, 5}, + {"PRINCESS2", -1, -6, 1, 6, 13, 18, 7, 12, 19, 21, 2, 5}, + {"AMGUARD", -1, -6, 1, 6, 13, 18, 7, 12, 19, 21, 2, 5}, + {"SPARKY", -1, -6, 1, 6, 13, 18, 7, 12, 21, 20, 2, 5}, + {"LOLA_SHOWER", -1, -6, 55, 60, 0, 0, 0, 0, 7, 7, 2, 5}, + {"LOLA", -24, -29, 24, 29, 0, 0, 0, 0, 30, 30, 2, 5}, + {"BOB", -15, -20, 15, 20, 21, 26, 0, 0, 27, 29, 2, 5}, + {"CHEF", -1, -4, 1, 4, 0, 0, 0, 0, 1, 5, 2, 4}, + {"HENRY", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7, 2, 6}, + {"ANDERSON", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7, 2, 5}, + {"JASPAR", -4, -9, 4, 9, 16, 21, 10, 15, 1, 3, 1, 10}, + {"PYGMY", -7, -12, 7, 12, 0, 0, 0, 0, 27, 27, 2, 5}, + {"FRANK", 7, 12, 1, 6, 0, 0, 0, 0, 13, 13, 2, 4}, + {"WEDGEWOOD", -20, -25, 20, 25, 0, 0, 0, 0, 1, 1, 1, 5}, + {"TMPD", -1, -6, 1, 6, 13, 18, 7, 12, 19, 21, 2, 5}, + {"IAN", -1, -6, 1, 6, 0, 0, 0, 0, 7, 7, 2, 6}, + {"*", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }; @@ -59,23 +59,6 @@ Walk::Walk(Logic *logic, Graphics *graphics) } -void Walk::joeMoveBlock(int facing, uint16 areaNum, uint16 walkDataNum) { - - warning("Walk::moveJoeBlock() partially implemented"); - _graphics->bob(0)->animating = false; - - // Make Joe face the right direction - _joeMoveBlock = true; - _logic->joeFacing(facing); - _logic->joeFace(); - - _logic->newRoom(0); - _logic->entryObj(0); - - // XXX cutaway calls -} - - void Walk::animateJoePrepare() { // queen.c l.2748-2788 uint16 i; @@ -133,7 +116,9 @@ bool Walk::animateJoe() { // area has been turned off, see if we should execute a cutaway if (pwd->area->mapNeighbours < 0) { - joeMoveBlock(pwd->anim.facing, pwd->areaNum, i); + // queen.c l.2838-2911 + _logic->customMoveJoe(pwd->anim.facing, pwd->areaNum, i); + _joeMoveBlock = true; return interrupted; } if (lastDirection != pwd->anim.facing) { @@ -157,7 +142,7 @@ bool Walk::animateJoe() { pbs->speed = 1; } _logic->checkPlayer(); - if (_logic->joeWalk() == 2) { // || cutQuit + if (_logic->joeWalk() == 2) { // XXX || cutQuit // we are about to do something else, so stop walking interrupted = true; pbs->moving = false; @@ -299,7 +284,7 @@ void Walk::animatePerson(const MovePersonData *mpd, uint16 image, uint16 bobNum, else { pbs->speed = scale * (mpd->moveSpeed / 2) / 100; } -// if (cutQuit) + // XXX if (cutQuit) } } } @@ -386,7 +371,7 @@ int16 Walk::personMove(const Person *pp, uint16 endx, uint16 endy, uint16 curIma calc(oldPos, newPos, oldx, oldy, endx, endy); // find MovePersonData associated to Person - const MovePersonData *mpd = _moveData; + const MovePersonData *mpd = MOVE_DATA; while (mpd->name[0] != '*') { if (scumm_stricmp(mpd->name, pp->name) == 0) { break; diff --git a/queen/walk.h b/queen/walk.h index ef5dff7eba..acbe9beef8 100644 --- a/queen/walk.h +++ b/queen/walk.h @@ -28,9 +28,6 @@ namespace Queen { -#define MAX_AREAS 11 - - struct MovePersonAnim { int16 firstFrame; int16 lastFrame; @@ -48,7 +45,7 @@ struct WalkData { // int16 sign; // never used int16 dx, dy; const Area *area; - uint16 areaNum; // extra stuff for joeMoveBlock + uint16 areaNum; // extra stuff for customMoveJoe MovePersonAnim anim; }; @@ -72,65 +69,66 @@ class Graphics; class Walk { public: - Walk(Logic* logic, Graphics* graphics); + Walk(Logic *logic, Graphics *graphics); - //! MOVE_JOE() int16 joeMove(int direction, uint16 endx, uint16 endy, bool inCutaway); - //! MOVE_OTHER int16 personMove(const Person *pp, uint16 endx, uint16 endy, uint16 curImage, int direction); + enum { + MAX_WALK_DATA = 16 + }; private: - void joeMoveBlock(int facing, uint16 areaNum, uint16 walkDataNum); - void animateJoePrepare(); bool animateJoe(); void animatePersonPrepare(const MovePersonData *mpd, int direction); void animatePerson(const MovePersonData *mpd, uint16 image, uint16 bobNum, uint16 bankNum, int direction); - //! CALC_X, CALC_Y + //! compute transition coordinate static uint16 calcC(uint16 c1, uint16 c2, uint16 c3, uint16 c4, uint16 lastc); - //! FIND_OLDP, FIND_NEWP + //! find area for position int16 findAreaPosition(uint16 *x, uint16 *y, bool recalibrate); - //! FIND_FREE_AREA, find an area not already struck + //! find an area not already struck uint16 findFreeArea(uint16 area) const; - //! + //! return true if the area is already on the walking path bool isAreaStruck(uint16 area) const; - //! CALC_PATH, calculates the path list from oldArea to newArea + //! calculates the path list from oldArea to newArea bool calcPath(uint16 oldArea, uint16 newArea); //! resets path computed in calcPath() void initWalkData(); - //! CALC_WALK + //! add an area to the path void incWalkData(uint16 px, uint16 py, uint16 x, uint16 y, uint16 area); - //! equivalent to l.2432,2469 MOVE_OTHER() and l.2696,2744 MOVE_JOE() + //! compute path (and populates _walkData) from current position to the new one void calc(uint16 oldPos, uint16 newPos, uint16 oldx, uint16 oldy, uint16 x, uint16 y); - static const MovePersonData _moveData[]; + WalkData _walkData[MAX_WALK_DATA]; uint16 _walkDataCount; - WalkData _walkData[16]; + uint16 _areaStrike[MAX_WALK_DATA]; uint16 _areaStrikeCount; - uint16 _areaStrike[MAX_AREAS + 1]; + + uint16 _areaList[MAX_WALK_DATA]; uint16 _areaListCount; - uint16 _areaList[MAX_AREAS + 1]; - //! set if joeMoveBlock() is called in joeAnimate() + //! set if customMoveJoe() is called in joeAnimate() bool _joeMoveBlock; Logic *_logic; Graphics *_graphics; + + static const MovePersonData MOVE_DATA[]; }; |