Ticket #8991: Gob_Strangerke_090402.patch

File Gob_Strangerke_090402.patch, 25.9 KB (added by Strangerke, 11 years ago)

Add some code in the 'unknown' functions, plug in the Protracker function, modify parser use to v1, split Playtoon in two, to easy future work

  • dists/msvc9/gob.vcproj

     
    284284                        >
    285285                </File>
    286286                <File
     287                        RelativePath="..\..\engines\gob\draw_fascin.cpp"
     288                        >
     289                </File>
     290                <File
    287291                        RelativePath="..\..\engines\gob\draw_v1.cpp"
    288292                        >
    289293                </File>
     
    404408                        >
    405409                </File>
    406410                <File
     411                        RelativePath="..\..\engines\gob\inter_fascin.cpp"
     412                        >
     413                </File>
     414                <File
    407415                        RelativePath="..\..\engines\gob\inter_v1.cpp"
    408416                        >
    409417                </File>
  • engines/gob/draw.h

     
    211211        virtual ~Draw_Bargon() {}
    212212};
    213213
     214class Draw_Fascin: public Draw_v2 {
     215public:
     216        virtual void initScreen();
     217
     218        Draw_Fascin(GobEngine *vm);
     219        virtual ~Draw_Fascin() {}
     220};
     221
    214222// Draw operations
    215223
    216224#define DRAW_BLITSURF   0
  • engines/gob/draw_fascin.cpp

     
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * This program is free software; you can redistribute it and/or
     8 * modify it under the terms of the GNU General Public License
     9 * as published by the Free Software Foundation; either version 2
     10 * of the License, or (at your option) any later version.
     11
     12 * This program is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16
     17 * You should have received a copy of the GNU General Public License
     18 * along with this program; if not, write to the Free Software
     19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     20 *
     21 * $URL$
     22 * $Id$
     23 *
     24 */
     25
     26#include "gob/gob.h"
     27#include "gob/draw.h"
     28#include "gob/global.h"
     29#include "gob/video.h"
     30
     31namespace Gob {
     32
     33Draw_Fascin::Draw_Fascin(GobEngine *vm) : Draw_v2(vm) {
     34}
     35
     36void Draw_Fascin::initScreen(void) {
     37        _vm->_global->_videoMode = 0x14;
     38        _vm->_video->_surfWidth = 640;
     39        _vm->_video->initPrimary(_vm->_global->_videoMode);
     40
     41        Draw_v2::initScreen();
     42}
     43
     44} // End of namespace Gob
  • engines/gob/game.cpp

    Property changes on: engines\gob\draw_fascin.cpp
    ___________________________________________________________________
    Added: svn:mime-type
       + text/plain
    Added: svn:keywords
       + Date Rev Author URL Id
    Added: svn:eol-style
       + native
    
     
    557557                _vm->_inter->_variables = 0;
    558558
    559559        strncpy0(_curTotFile, newTotFile, 9);
    560         strcat(_curTotFile, ".TOT");
     560        if (_vm->getGameType() == kGameTypeGeisha)
     561                strcat(_curTotFile, ".0OT");
     562        else
     563                strcat(_curTotFile, ".TOT");
    561564
    562565        if (_vm->_inter->_terminate != 0)
    563566                return;
  • engines/gob/gob.cpp

     
    285285        _sound = new Sound(this);
    286286
    287287        switch (_gameType) {
     288                case kGameTypeGeisha:
    288289                case kGameTypeGob1:
    289290                        _init = new Init_v1(this);
    290291                        _video = new Video_v1(this);
     
    298299                        _scenery = new Scenery_v1(this);
    299300                        break;
    300301
    301                 case kGameTypeGob2:
     302                        case kGameTypeFascin:
    302303                        _init = new Init_v2(this);
    303304                        _video = new Video_v2(this);
     305                        _inter = new Inter_Fascin(this);
     306                        _parse = new Parse_v1(this);
     307                        _mult = new Mult_v2(this);
     308                        _draw = new Draw_v2(this);
     309                        _game = new Game_v2(this);
     310                        _map = new Map_v2(this);
     311                        _goblin = new Goblin_v2(this);
     312                        _scenery = new Scenery_v2(this);
     313                        _saveLoad = new SaveLoad_v2(this, _targetName.c_str());
     314                        break;
     315
     316                        case kGameTypeGob2:
     317                        _init = new Init_v2(this);
     318                        _video = new Video_v2(this);
    304319                        _inter = new Inter_v2(this);
    305320                        _parse = new Parse_v2(this);
    306321                        _mult = new Mult_v2(this);
     
    397412                        _saveLoad = new SaveLoad_v4(this, _targetName.c_str());
    398413                        break;
    399414
     415                case kGameTypeArchibald:
     416                case kGameTypeSpirou:
    400417                case kGameTypeUrban:
    401418                        _init = new Init_v3(this);
    402419                        _video = new Video_v6(this);
  • engines/gob/gob.h

     
    9595        kGameTypeLostInTime,
    9696        kGameTypeInca2,
    9797        kGameTypeDynasty,
    98         kGameTypeUrban
     98        kGameTypeUrban,
     99        kGameTypeArchibald,
     100        kGameTypeSpirou,
     101        kGameTypeFascin,
     102        kGameTypeGeisha
    99103};
    100104
    101105enum Features {
  • engines/gob/init.cpp

     
    6666
    6767        initVideo();
    6868
     69/**
     70 * Depending on the game type, the initial STK is not the same
     71 */
     72       
     73        switch(_vm->getGameType()) {
    6974        // The Lost In Time demo uses different file prefix
    70         if (_vm->getGameType() == kGameTypeLostInTime) {
     75        case kGameTypeLostInTime:
    7176                handle2 = _vm->_dataIO->openData("demo.stk");
    7277                if (handle2 >= 0) {
    7378                        _vm->_dataIO->closeData(handle2);
    7479                        _vm->_dataIO->openDataFile("demo.stk");
    7580                }
     81                break;
     82        //Fascination use disk0 instead of intro
     83        case kGameTypeFascin:
     84                handle2 = _vm->_dataIO->openData("disk0.stk");
     85                if (handle2 >= 0) {
     86                        _vm->_dataIO->closeData(handle2);
     87                        _vm->_dataIO->openDataFile("disk0.stk");
     88                }
     89                break;
     90        case kGameTypeSpirou:
     91        case kGameTypeArchibald:
     92                handle2 = _vm->_dataIO->openData("intro2.stk");
     93                if (handle2 >= 0) {
     94                        _vm->_dataIO->closeData(handle2);
     95                        _vm->_dataIO->openDataFile("intro2.stk");
     96                }
     97                break;
     98        case kGameTypeGeisha:
     99                handle2 = _vm->_dataIO->openData("disk1.stk");
     100                if (handle2 >= 0) {
     101                        _vm->_dataIO->closeData(handle2);
     102                        _vm->_dataIO->openDataFile("disk1.stk");
     103                }
     104                break;
     105        default :
     106                handle2 = _vm->_dataIO->openData("intro.stk");
     107                if (handle2 >= 0) {
     108                        _vm->_dataIO->closeData(handle2);
     109                        _vm->_dataIO->openDataFile("intro.stk");
     110                }
     111                break;
    76112        }
    77 
    78         handle2 = _vm->_dataIO->openData("intro.stk");
    79         if (handle2 >= 0) {
    80                 _vm->_dataIO->closeData(handle2);
    81                 _vm->_dataIO->openDataFile("intro.stk");
    82         }
    83 
    84113        _vm->_util->initInput();
    85114
    86115        _vm->_video->initPrimary(_vm->_global->_videoMode);
     
    144173
    145174        if (totName) {
    146175                strncpy0(buffer, totName, 15);
    147                 strcat(buffer, ".tot");
     176                if (_vm->getGameType() == kGameTypeGeisha)
     177                        strcat(buffer, ".0ot");
     178                else
     179                        strcat(buffer, ".tot");
    148180        } else
    149181                strncpy0(buffer, _vm->_startTot, 19);
    150182
  • engines/gob/inter.h

     
    451451        void oBargon_intro9(OpGobParams &params);
    452452};
    453453
     454class Inter_Fascin : public Inter_v2 {
     455public:
     456        Inter_Fascin(GobEngine *vm);
     457        virtual ~Inter_Fascin() {}
     458
     459protected:
     460        typedef void (Inter_Fascin::*OpcodeDrawProcFascin)();
     461        typedef bool (Inter_Fascin::*OpcodeFuncProcFascin)(OpFuncParams &);
     462        typedef void (Inter_Fascin::*OpcodeGoblinProcFascin)(OpGobParams &);
     463        struct OpcodeDrawEntryFascin {
     464                OpcodeDrawProcFascin proc;
     465                const char *desc;
     466        };
     467        struct OpcodeFuncEntryFascin {
     468                OpcodeFuncProcFascin proc;
     469                const char *desc;
     470        };
     471        struct OpcodeGoblinEntryFascin {
     472                OpcodeGoblinProcFascin proc;
     473                const char *desc;
     474        };
     475        const OpcodeDrawEntryFascin *_opcodesDrawFascin;
     476        const OpcodeFuncEntryFascin *_opcodesFuncFascin;
     477        const OpcodeGoblinEntryFascin *_opcodesGoblinFascin;
     478        static const int _goblinFuncLookUp[][2];
     479
     480        virtual void setupOpcodes();
     481        virtual void executeDrawOpcode(byte i);
     482        virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams &params);
     483        virtual void executeGoblinOpcode(int i, OpGobParams &params);
     484        virtual const char *getOpcodeDrawDesc(byte i);
     485        virtual const char *getOpcodeFuncDesc(byte i, byte j);
     486        virtual const char *getOpcodeGoblinDesc(int i);
     487
     488        void o2_geUnknown3(OpGobParams &params);
     489        void o2_geUnknown4(OpGobParams &params);
     490        void o2_geUnknown5(OpGobParams &params);
     491        void o2_geUnknown6(OpGobParams &params);
     492        void o2_cdUnknown3();
     493        void o2_cdUnknown4();
     494        void o2_cdUnknown5();
     495        void o2_cdUnknown6();
     496        void o2_cdUnknown11();
     497};
     498
    454499class Inter_v3 : public Inter_v2 {
    455500public:
    456501        Inter_v3(GobEngine *vm);
  • engines/gob/inter_fascin.cpp

     
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * This program is free software; you can redistribute it and/or
     8 * modify it under the terms of the GNU General Public License
     9 * as published by the Free Software Foundation; either version 2
     10 * of the License, or (at your option) any later version.
     11
     12 * This program is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16
     17 * You should have received a copy of the GNU General Public License
     18 * along with this program; if not, write to the Free Software
     19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     20 *
     21 * $URL$
     22 * $Id$
     23 *
     24 */
     25
     26#include "common/endian.h"
     27
     28#include "gob/gob.h"
     29#include "gob/inter.h"
     30#include "gob/global.h"
     31#include "gob/util.h"
     32#include "gob/dataio.h"
     33#include "gob/draw.h"
     34#include "gob/parse.h"
     35#include "gob/game.h"
     36#include "gob/palanim.h"
     37#include "gob/video.h"
     38#include "gob/videoplayer.h"
     39#include "gob/sound/sound.h"
     40
     41namespace Gob {
     42
     43#define OPCODE(x) _OPCODE(Inter_Fascin, x)
     44
     45const int Inter_Fascin::_goblinFuncLookUp[][2] = {
     46        {1, 0},
     47        {2, 1},
     48        {3, 2},
     49        {4, 3},
     50        {5, 4},
     51        {6, 5},
     52        {7, 6},
     53        {8, 7},
     54        {9, 8},
     55        {10, 9},
     56        {11, 10},
     57        {12, 11},
     58        {13, 12},
     59        {14, 13},
     60        {15, 14},
     61        {16, 15},
     62        {21, 16},
     63        {22, 17},
     64        {23, 18},
     65        {24, 19},
     66        {25, 20},
     67        {26, 21},
     68        {27, 22},
     69        {28, 23},
     70        {29, 24},
     71        {30, 25},
     72        {32, 26},
     73        {33, 27},
     74        {34, 28},
     75        {35, 29},
     76        {36, 30},
     77        {37, 31},
     78        {40, 32},
     79        {41, 33},
     80        {42, 34},
     81        {43, 35},
     82        {44, 36},
     83        {50, 37},
     84        {52, 38},
     85        {53, 39},
     86        {100, 40},
     87        {152, 41},
     88        {200, 42},
     89        {201, 43},
     90        {202, 44},
     91        {203, 45},
     92        {204, 46},
     93        {250, 47},
     94        {251, 48},
     95        {252, 49},
     96        {500, 50},
     97        {502, 51},
     98        {503, 52},
     99        {600, 53},
     100        {601, 54},
     101        {602, 55},
     102        {603, 56},
     103        {604, 57},
     104        {605, 58},
     105        {1000, 59},
     106        {1001, 60},
     107        {1002, 61},
     108        {1003, 62},
     109        {1004, 63},
     110        {1005, 64},
     111        {1006, 65},
     112        {1008, 66},
     113        {1009, 67},
     114        {1010, 68},
     115        {1011, 69},
     116        {1015, 70},
     117        {2005, 71}
     118};
     119
     120Inter_Fascin::Inter_Fascin(GobEngine *vm) : Inter_v2(vm) {
     121        setupOpcodes();
     122}
     123
     124void Inter_Fascin::setupOpcodes() {
     125        static const OpcodeDrawEntryFascin opcodesDraw[256] = {
     126                /* 00 */
     127                OPCODE(o1_loadMult),
     128                OPCODE(o2_playMult),
     129                OPCODE(o1_freeMultKeys),
     130                OPCODE(o2_cdUnknown3),
     131                /* 04 */
     132                OPCODE(o2_cdUnknown4),
     133                OPCODE(o2_cdUnknown5),
     134                OPCODE(o2_cdUnknown6),
     135                OPCODE(o1_initCursor),
     136                /* 08 */
     137                OPCODE(o1_initCursorAnim),
     138                OPCODE(o1_clearCursorAnim),
     139                OPCODE(o2_setRenderFlags),
     140                OPCODE(o2_cdUnknown11),
     141                /* 0C */
     142                {NULL, ""},
     143                {NULL, ""},
     144                {NULL, ""},
     145                {NULL, ""},
     146                /* 10 */
     147                OPCODE(o1_loadAnim),
     148                OPCODE(o1_freeAnim),
     149                OPCODE(o1_updateAnim),
     150                {NULL, ""},//OPCODE(o2_multSub),
     151                /* 14 */
     152                OPCODE(o2_initMult),
     153                OPCODE(o1_freeMult),
     154                OPCODE(o1_animate),
     155                OPCODE(o2_loadMultObject),
     156                /* 18 */
     157                OPCODE(o1_getAnimLayerInfo),
     158                OPCODE(o1_getObjAnimSize),
     159                OPCODE(o1_loadStatic),
     160                OPCODE(o1_freeStatic),
     161                /* 1C */
     162                OPCODE(o2_renderStatic),
     163                OPCODE(o2_loadCurLayer),
     164                {NULL, ""},
     165                {NULL, ""},
     166                /* 20 */
     167                {NULL, ""},//OPCODE(o2_playCDTrack),
     168                {NULL, ""},//OPCODE(o2_waitCDTrackEnd),
     169                {NULL, ""},//OPCODE(o2_stopCD),
     170                {NULL, ""},//OPCODE(o2_readLIC),
     171                /* 24 */
     172                {NULL, ""},//OPCODE(o2_freeLIC),
     173                {NULL, ""},//OPCODE(o2_getCDTrackPos),
     174                {NULL, ""},
     175                {NULL, ""},
     176                /* 28 */
     177                {NULL, ""},
     178                {NULL, ""},
     179                {NULL, ""},
     180                {NULL, ""},
     181                /* 2C */
     182                {NULL, ""},
     183                {NULL, ""},
     184                {NULL, ""},
     185                {NULL, ""},
     186                /* 30 */
     187                OPCODE(o2_loadFontToSprite),
     188                OPCODE(o1_freeFontToSprite),
     189                {NULL, ""},
     190                {NULL, ""},
     191                /* 34 */
     192                {NULL, ""},
     193                {NULL, ""},
     194                {NULL, ""},
     195                {NULL, ""},
     196                /* 38 */
     197                {NULL, ""},
     198                {NULL, ""},
     199                {NULL, ""},
     200                {NULL, ""},
     201                /* 3C */
     202                {NULL, ""},
     203                {NULL, ""},
     204                {NULL, ""},
     205                {NULL, ""},
     206                /* 40 */
     207                {NULL, ""},//OPCODE(o2_totSub),
     208                {NULL, ""},//OPCODE(o2_switchTotSub),
     209                {NULL, ""},//OPCODE(o2_pushVars),
     210                {NULL, ""},//OPCODE(o2_popVars),
     211                /* 44 */
     212                {NULL, ""},
     213                {NULL, ""},
     214                {NULL, ""},
     215                {NULL, ""},
     216                /* 48 */
     217                {NULL, ""},
     218                {NULL, ""},
     219                {NULL, ""},
     220                {NULL, ""},
     221                /* 4C */
     222                {NULL, ""},
     223                {NULL, ""},
     224                {NULL, ""},
     225                {NULL, ""},
     226                /* 50 */
     227                {NULL, ""},//OPCODE(o2_loadMapObjects),
     228                {NULL, ""},//OPCODE(o2_freeGoblins),
     229                {NULL, ""},//OPCODE(o2_moveGoblin),
     230                {NULL, ""},//OPCODE(o2_writeGoblinPos),
     231                /* 54 */
     232                {NULL, ""},//OPCODE(o2_stopGoblin),
     233                {NULL, ""},//OPCODE(o2_setGoblinState),
     234                {NULL, ""},//OPCODE(o2_placeGoblin),
     235                {NULL, ""},
     236                /* 58 */
     237                {NULL, ""},
     238                {NULL, ""},
     239                {NULL, ""},
     240                {NULL, ""},
     241                /* 5C */
     242                {NULL, ""},
     243                {NULL, ""},
     244                {NULL, ""},
     245                {NULL, ""},
     246                /* 60 */
     247                {NULL, ""},
     248                {NULL, ""},
     249                {NULL, ""},
     250                {NULL, ""},
     251                /* 64 */
     252                {NULL, ""},
     253                {NULL, ""},
     254                {NULL, ""},
     255                {NULL, ""},
     256                /* 68 */
     257                {NULL, ""},
     258                {NULL, ""},
     259                {NULL, ""},
     260                {NULL, ""},
     261                /* 6C */
     262                {NULL, ""},
     263                {NULL, ""},
     264                {NULL, ""},
     265                {NULL, ""},
     266                /* 70 */
     267                {NULL, ""},
     268                {NULL, ""},
     269                {NULL, ""},
     270                {NULL, ""},
     271                /* 74 */
     272                {NULL, ""},
     273                {NULL, ""},
     274                {NULL, ""},
     275                {NULL, ""},
     276                /* 78 */
     277                {NULL, ""},
     278                {NULL, ""},
     279                {NULL, ""},
     280                {NULL, ""},
     281                /* 7C */
     282                {NULL, ""},
     283                {NULL, ""},
     284                {NULL, ""},
     285                {NULL, ""},
     286                /* 80 */
     287                {NULL, ""},//OPCODE(o2_initScreen),
     288                {NULL, ""},//OPCODE(o2_scroll),
     289                {NULL, ""},//OPCODE(o2_setScrollOffset),
     290                {NULL, ""},//OPCODE(o2_playImd),
     291                /* 84 */
     292                {NULL, ""},//OPCODE(o2_getImdInfo),
     293                {NULL, ""},//OPCODE(o2_openItk),
     294                {NULL, ""},//OPCODE(o2_closeItk),
     295                {NULL, ""},//OPCODE(o2_setImdFrontSurf),
     296                /* 88 */
     297                {NULL, ""},//OPCODE(o2_resetImdFrontSurf),
     298                {NULL, ""},
     299                {NULL, ""},
     300                {NULL, ""},
     301                /* 8C */
     302                {NULL, ""},
     303                {NULL, ""},
     304                {NULL, ""},
     305                {NULL, ""},
     306                /* 90 */
     307                {NULL, ""},
     308                {NULL, ""},
     309                {NULL, ""},
     310                {NULL, ""},
     311                /* 94 */
     312                {NULL, ""},
     313                {NULL, ""},
     314                {NULL, ""},
     315                {NULL, ""},
     316                /* 98 */
     317                {NULL, ""},
     318                {NULL, ""},
     319                {NULL, ""},
     320                {NULL, ""},
     321                /* 9C */
     322                {NULL, ""},
     323                {NULL, ""},
     324                {NULL, ""},
     325                {NULL, ""},
     326                /* A0 */
     327                {NULL, ""},
     328                {NULL, ""},
     329                {NULL, ""},
     330                {NULL, ""},
     331                /* A4 */
     332                {NULL, ""},
     333                {NULL, ""},
     334                {NULL, ""},
     335                {NULL, ""},
     336                /* A8 */
     337                {NULL, ""},
     338                {NULL, ""},
     339                {NULL, ""},
     340                {NULL, ""},
     341                /* AC */
     342                {NULL, ""},
     343                {NULL, ""},
     344                {NULL, ""},
     345                {NULL, ""},
     346                /* B0 */
     347                {NULL, ""},
     348                {NULL, ""},
     349                {NULL, ""},
     350                {NULL, ""},
     351                /* B4 */
     352                {NULL, ""},
     353                {NULL, ""},
     354                {NULL, ""},
     355                {NULL, ""},
     356                /* B8 */
     357                {NULL, ""},
     358                {NULL, ""},
     359                {NULL, ""},
     360                {NULL, ""},
     361                /* BC */
     362                {NULL, ""},
     363                {NULL, ""},
     364                {NULL, ""},
     365                {NULL, ""},
     366                /* C0 */
     367                {NULL, ""},
     368                {NULL, ""},
     369                {NULL, ""},
     370                {NULL, ""},
     371                /* C4 */
     372                {NULL, ""},
     373                {NULL, ""},
     374                {NULL, ""},
     375                {NULL, ""},
     376                /* C8 */
     377                {NULL, ""},
     378                {NULL, ""},
     379                {NULL, ""},
     380                {NULL, ""},
     381                /* CC */
     382                {NULL, ""},
     383                {NULL, ""},
     384                {NULL, ""},
     385                {NULL, ""},
     386                /* D0 */
     387                {NULL, ""},
     388                {NULL, ""},
     389                {NULL, ""},
     390                {NULL, ""},
     391                /* D4 */
     392                {NULL, ""},
     393                {NULL, ""},
     394                {NULL, ""},
     395                {NULL, ""},
     396                /* D8 */
     397                {NULL, ""},
     398                {NULL, ""},
     399                {NULL, ""},
     400                {NULL, ""},
     401                /* DC */
     402                {NULL, ""},
     403                {NULL, ""},
     404                {NULL, ""},
     405                {NULL, ""},
     406                /* E0 */
     407                {NULL, ""},
     408                {NULL, ""},
     409                {NULL, ""},
     410                {NULL, ""},
     411                /* E4 */
     412                {NULL, ""},
     413                {NULL, ""},
     414                {NULL, ""},
     415                {NULL, ""},
     416                /* E8 */
     417                {NULL, ""},
     418                {NULL, ""},
     419                {NULL, ""},
     420                {NULL, ""},
     421                /* EC */
     422                {NULL, ""},
     423                {NULL, ""},
     424                {NULL, ""},
     425                {NULL, ""},
     426                /* F0 */
     427                {NULL, ""},
     428                {NULL, ""},
     429                {NULL, ""},
     430                {NULL, ""},
     431                /* F4 */
     432                {NULL, ""},
     433                {NULL, ""},
     434                {NULL, ""},
     435                {NULL, ""},
     436                /* F8 */
     437                {NULL, ""},
     438                {NULL, ""},
     439                {NULL, ""},
     440                {NULL, ""},
     441                /* FC */
     442                {NULL, ""},
     443                {NULL, ""},
     444                {NULL, ""},
     445                {NULL, ""}
     446        };
     447
     448        static const OpcodeFuncEntryFascin opcodesFunc[80] = {
     449                /* 00 */
     450                OPCODE(o1_callSub),
     451                OPCODE(o1_callSub),
     452                OPCODE(o1_printTotText),
     453                OPCODE(o1_loadCursor),
     454                /* 04 */
     455                {NULL, ""},
     456                OPCODE(o1_switch),
     457                OPCODE(o1_repeatUntil),
     458                OPCODE(o1_whileDo),
     459                /* 08 */
     460                OPCODE(o1_if),
     461                OPCODE(o2_evaluateStore),
     462                OPCODE(o1_loadSpriteToPos),
     463                {NULL, ""},
     464                /* 0C */
     465                {NULL, ""},
     466                {NULL, ""},
     467                {NULL, ""},
     468                {NULL, ""},
     469                /* 10 */
     470                {NULL, ""},
     471                OPCODE(o2_printText),
     472                OPCODE(o1_loadTot),
     473                OPCODE(o1_palLoad),
     474                /* 14 */
     475                OPCODE(o1_keyFunc),
     476                OPCODE(o1_capturePush),
     477                OPCODE(o1_capturePop),
     478                OPCODE(o2_animPalInit),
     479                /* 18 */
     480                OPCODE(o2_addCollision),
     481                OPCODE(o2_freeCollision),
     482                {NULL, ""},
     483                {NULL, ""},
     484                /* 1C */
     485                {NULL, ""},
     486                {NULL, ""},
     487                OPCODE(o1_drawOperations),
     488                OPCODE(o1_setcmdCount),
     489                /* 20 */
     490                OPCODE(o1_return),
     491                OPCODE(o1_renewTimeInVars),
     492                OPCODE(o1_speakerOn),
     493                OPCODE(o1_speakerOff),
     494                /* 24 */
     495                OPCODE(o1_putPixel),
     496                OPCODE(o2_goblinFunc),
     497                OPCODE(o1_createSprite),
     498                OPCODE(o1_freeSprite),
     499                /* 28 */
     500                {NULL, ""},
     501                {NULL, ""},
     502                {NULL, ""},
     503                {NULL, ""},
     504                /* 2C */
     505                {NULL, ""},
     506                {NULL, ""},
     507                {NULL, ""},
     508                {NULL, ""},
     509                /* 30 */
     510                OPCODE(o1_returnTo),
     511                OPCODE(o1_loadSpriteContent),
     512                OPCODE(o1_copySprite),
     513                OPCODE(o1_fillRect),
     514                /* 34 */
     515                OPCODE(o1_drawLine),
     516                OPCODE(o1_strToLong),
     517                OPCODE(o1_invalidate),
     518                OPCODE(o1_setBackDelta),
     519                /* 38 */
     520                OPCODE(o1_playSound),
     521                OPCODE(o2_stopSound),
     522                OPCODE(o2_loadSound),
     523                OPCODE(o1_freeSoundSlot),
     524                /* 3C */
     525                OPCODE(o1_waitEndPlay),
     526                OPCODE(o1_playComposition),
     527                OPCODE(o2_getFreeMem),
     528                OPCODE(o2_checkData),
     529                /* 40 */
     530                {NULL, ""},
     531                OPCODE(o1_prepareStr),
     532                OPCODE(o1_insertStr),
     533                OPCODE(o1_cutStr),
     534                /* 44 */
     535                OPCODE(o1_strstr),
     536                OPCODE(o1_istrlen),
     537                OPCODE(o1_setMousePos),
     538                OPCODE(o1_setFrameRate),
     539                /* 48 */
     540                OPCODE(o1_animatePalette),
     541                OPCODE(o1_animateCursor),
     542                OPCODE(o1_blitCursor),
     543                OPCODE(o1_loadFont),
     544                /* 4C */
     545                OPCODE(o1_freeFont),
     546                OPCODE(o2_readData),
     547                OPCODE(o2_writeData),
     548                OPCODE(o1_manageDataFile),
     549        };
     550
     551        static const OpcodeGoblinEntryFascin opcodesGoblin[71] = {
     552                /* 00 */
     553                OPCODE(o2_loadInfogramesIns),
     554                OPCODE(o2_startInfogrames),
     555                OPCODE(o2_stopInfogrames),
     556                OPCODE(o2_geUnknown3),
     557                /* 04 */
     558                OPCODE(o2_geUnknown4),
     559                OPCODE(o2_playProtracker), //OPCODE(o2_geUnknown5),
     560                OPCODE(o2_stopProtracker), //OPCODE(o2_geUnknown6),
     561                {NULL, ""},
     562                /* 08 */
     563                {NULL, ""},
     564                OPCODE(o2_playInfogrames),
     565                {NULL, ""},
     566                {NULL, ""},
     567                /* 0C */
     568                {NULL, ""},
     569                {NULL, ""},
     570                {NULL, ""},
     571                {NULL, ""},
     572                /* 10 */
     573                {NULL, ""},
     574                {NULL, ""},
     575                {NULL, ""},
     576                {NULL, ""},
     577                /* 14 */
     578                {NULL, ""},
     579                {NULL, ""},
     580                {NULL, ""},
     581                {NULL, ""},
     582                /* 18 */
     583                {NULL, ""},
     584                {NULL, ""},
     585                {NULL, ""},
     586                {NULL, ""},
     587                /* 1C */
     588                {NULL, ""},
     589                {NULL, ""},
     590                {NULL, ""},
     591                {NULL, ""},
     592                /* 20 */
     593                {NULL, ""},
     594                {NULL, ""},
     595                {NULL, ""},
     596                {NULL, ""},
     597                /* 24 */
     598                {NULL, ""},
     599                {NULL, ""},
     600                {NULL, ""},
     601                OPCODE(o2_handleGoblins),
     602                /* 28 */
     603                OPCODE(o2_playProtracker),
     604                OPCODE(o2_stopProtracker),
     605                {NULL, ""},
     606                {NULL, ""},
     607                /* 2C */
     608                {NULL, ""},
     609                {NULL, ""},
     610                {NULL, ""},
     611                {NULL, ""},
     612                /* 30 */
     613                {NULL, ""},
     614                {NULL, ""},
     615                {NULL, ""},
     616                {NULL, ""},
     617                /* 34 */
     618                {NULL, ""},
     619                {NULL, ""},
     620                {NULL, ""},
     621                {NULL, ""},
     622                /* 38 */
     623                {NULL, ""},
     624                {NULL, ""},
     625                {NULL, ""},
     626                {NULL, ""},
     627                /* 3C */
     628                {NULL, ""},
     629                {NULL, ""},
     630                {NULL, ""},
     631                {NULL, ""},
     632                /* 40 */
     633                {NULL, ""},
     634                {NULL, ""},
     635                {NULL, ""},
     636                {NULL, ""},
     637                /* 44 */
     638                {NULL, ""},
     639                {NULL, ""},
     640                {NULL, ""},
     641        };
     642
     643        _opcodesDrawFascin = opcodesDraw;
     644        _opcodesFuncFascin = opcodesFunc;
     645        _opcodesGoblinFascin = opcodesGoblin;   
     646}
     647
     648void Inter_Fascin::executeDrawOpcode(byte i) {
     649        debugC(1, kDebugDrawOp, "opcodeDraw %d [0x%X] (%s)",
     650                        i, i, getOpcodeDrawDesc(i));
     651
     652        OpcodeDrawProcFascin op = _opcodesDrawFascin[i].proc;
     653
     654        if (op == NULL)
     655                warning("unimplemented Fascin opcodeDraw: %d", i);
     656        else
     657                (this->*op) ();
     658}
     659void Inter_Fascin::o2_geUnknown3(OpGobParams &params) {
     660        warning("ABOU GE Unknown 3\n");
     661}
     662void Inter_Fascin::o2_geUnknown4(OpGobParams &params) {
     663        warning("ABOU GE Unknown 4\n");
     664}
     665void Inter_Fascin::o2_geUnknown5(OpGobParams &params) {
     666        warning("ABOU GE Unknown 5\n");
     667}
     668void Inter_Fascin::o2_geUnknown6(OpGobParams &params) {
     669        warning("ABOU GE Unknown 6\n");
     670}
     671void Inter_Fascin::o2_cdUnknown3() {
     672        uint16 resVar, resVar2;
     673        int16 retVal1, retVal2, retVal3, retVal4, retVal5, retVal6, retVal7;
     674
     675        warning("ABOU CD Unknown 3 (sub_EDBB)\n");
     676
     677        resVar = (uint16) load16();
     678        resVar2 = (uint16) load16();
     679        retVal1 = _vm->_parse->parseVarIndex();
     680        retVal2 = _vm->_parse->parseVarIndex();
     681        retVal3 = _vm->_parse->parseVarIndex();
     682        retVal4 = _vm->_parse->parseVarIndex();
     683        retVal5 = _vm->_parse->parseVarIndex();
     684        retVal6 = _vm->_parse->parseVarIndex();
     685        retVal7 = _vm->_parse->parseVarIndex();
     686        warning ("Input %d %d\n",resVar, resVar2);
     687        warning ("Fetched variables %d %d %d %d %d %d %d\n", retVal1, retVal2, retVal3, retVal4, retVal5, retVal6, retVal7);
     688}
     689
     690void Inter_Fascin::o2_cdUnknown4() {
     691        warning("ABOU CD Unknown 4 (sub_EE04)\n");
     692
     693}
     694void Inter_Fascin::o2_cdUnknown5() {
     695        warning("ABOU CD Unknown 5 (sub_EE29)\n");
     696}
     697void Inter_Fascin::o2_cdUnknown6() {
     698        bool resFlag;
     699        int16 retVal1;
     700        warning("ABOU CD Unknown 6 (sub_EE46)\n");
     701        resFlag = evalBoolResult();
     702        retVal1 = _vm->_parse->parseVarIndex();
     703        warning ("Fetched variable %d\n",retVal1);
     704}
     705
     706void Inter_Fascin::o2_cdUnknown11() {
     707        bool resFlag;
     708        warning("ABOU CD Unknown 11 (loc_66E6) - AX=0E6h\n");   
     709       
     710        resFlag = evalBoolResult();
     711}
     712
     713bool Inter_Fascin::executeFuncOpcode(byte i, byte j, OpFuncParams &params) {
     714        debugC(1, kDebugFuncOp, "opcodeFunc %d.%d [0x%X.0x%X] (%s)",
     715                        i, j, i, j, getOpcodeFuncDesc(i, j));
     716
     717        if ((i > 4) || (j > 16)) {
     718                warning("Invalid opcodeFunc: %d.%d", i, j);
     719                return false;
     720        }
     721
     722        OpcodeFuncProcFascin op = _opcodesFuncFascin[i*16 + j].proc;
     723
     724        if (op == NULL)
     725                warning("unimplemented opcodeFunc: %d.%d", i, j);
     726        else
     727                return (this->*op) (params);
     728
     729        return false;
     730}
     731
     732void Inter_Fascin::executeGoblinOpcode(int i, OpGobParams &params) {
     733        debugC(1, kDebugGobOp, "opcodeGoblin %d [0x%X] (%s)",
     734                        i, i, getOpcodeGoblinDesc(i));
     735
     736        OpcodeGoblinProcFascin op = NULL;
     737
     738        for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++)
     739                if (_goblinFuncLookUp[j][0] == i) {
     740                        op = _opcodesGoblinFascin[_goblinFuncLookUp[j][1]].proc;
     741                        break;
     742                }
     743
     744        if (op == NULL) {
     745                int16 val;
     746
     747                _vm->_global->_inter_execPtr -= 2;
     748                val = load16();
     749                _vm->_global->_inter_execPtr += val << 1;
     750                warning("unimplemented opcodeGob: %d", i);
     751        } else
     752                (this->*op) (params);
     753}
     754
     755const char *Inter_Fascin::getOpcodeDrawDesc(byte i) {
     756        return _opcodesDrawFascin[i].desc;
     757}
     758
     759const char *Inter_Fascin::getOpcodeFuncDesc(byte i, byte j) {
     760        if ((i > 4) || (j > 15))
     761                return "";
     762
     763        return _opcodesFuncFascin[i*16 + j].desc;
     764}
     765
     766const char *Inter_Fascin::getOpcodeGoblinDesc(int i) {
     767        for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++)
     768                if (_goblinFuncLookUp[j][0] == i)
     769                        return _opcodesGoblinFascin[_goblinFuncLookUp[j][1]].desc;
     770        warning("Error in getOpcodeGoblinDesc %d\n",i);
     771        return "";
     772}
     773
     774} // End of namespace Gob
  • engines/gob/inter_v1.cpp

    Property changes on: engines\gob\inter_fascin.cpp
    ___________________________________________________________________
    Added: svn:mime-type
       + text/plain
    Added: svn:keywords
       + Date Rev Author URL Id
    Added: svn:eol-style
       + native
    
     
    11461146                debugC(2, kDebugGameFlow, "Skipping copy protection screen");
    11471147                return false;
    11481148        }
    1149 
    11501149        _vm->_global->_inter_execPtr = _vm->_game->_totFileData + offset;
    11511150
    11521151        if ((params.counter == params.cmdCount) && (params.retFlag == 2))
     
    14231422bool Inter_v1::o1_loadTot(OpFuncParams &params) {
    14241423        char buf[20];
    14251424        int8 size;
    1426 
     1425 
    14271426        if ((*_vm->_global->_inter_execPtr & 0x80) != 0) {
    14281427                _vm->_global->_inter_execPtr++;
    14291428                evalExpr(0);
     
    14361435                buf[size] = 0;
    14371436        }
    14381437
    1439         strcat(buf, ".tot");
     1438        if (_vm->getGameType() == kGameTypeGeisha)
     1439                strcat(buf, ".0ot");
     1440        else
     1441                strcat(buf, ".tot");
    14401442        if (_terminate != 2)
    14411443                _terminate = 1;
    14421444        strcpy(_vm->_game->_totToLoad, buf);
  • engines/gob/inter_v2.cpp

     
    21232123                int16 totSize;
    21242124
    21252125                source = SOUND_TOT;
    2126 
     2126       
    21272127                dataPtr = (byte *) _vm->_game->loadTotResource(id, &totSize);
    21282128                dataSize = (uint32) ((int32) totSize);
    21292129        }
  • engines/gob/module.mk

     
    77        draw_v1.o \
    88        draw_v2.o \
    99        draw_bargon.o \
     10        draw_fascin.o \
    1011        driver_vga.o \
    1112        game.o \
    1213        game_v1.o \
     
    3031        inter_v1.o \
    3132        inter_v2.o \
    3233        inter_bargon.o \
     34        inter_fascin.o \
    3335        inter_v3.o \
    3436        inter_v4.o \
    3537        inter_v5.o \