Logo Search packages:      
Sourcecode: scummvm version File versions  Download package

insane.h

/* ScummVM - Scumm Interpreter
 * Copyright (C) 2002-2005 The ScummVM project
 *
 * 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.
 *
 * $Header: /cvsroot/scummvm/scummvm/scumm/insane/insane.h,v 1.21.2.1 2005/10/18 02:11:25 sev Exp $
 *
 */

#if !defined(INSANE_H) && !defined(DISABLE_SCUMM_7_8)
#define INSANE_H

#include "base/engine.h"
#include "scumm/intern.h"
#include "scumm/nut_renderer.h"

#include "scumm/smush/smush_player.h"
#include "scumm/smush/chunk.h"

namespace Scumm {

#define INV_CHAIN    0
#define INV_CHAINSAW 1
#define INV_MACE     2
#define INV_2X4      3
#define INV_WRENCH   4
#define INV_BOOT     5
#define INV_HAND     6
#define INV_DUST     7

#define EN_ROTT1     0 // rottwheeler
#define EN_ROTT2     1 // rottwheeler
#define EN_ROTT3     2 // rottwheeler
#define EN_VULTF1    3 // vulture (redhead female1)
#define EN_VULTM1    4 // vulture (male with glasses)
#define EN_VULTF2    5 // vulture (redhead female2)
#define EN_VULTM2    6 // vulture (initialized as rottwheeler) (male)
#define EN_CAVEFISH  7 // Cavefish Maximum Fish
#define EN_TORQUE    8 // Father Torque
#define EN_BEN       9 // used only with handler

class Insane {
 public:
      Insane(ScummEngine_v6 *scumm);
      ~Insane();

      void setSmushParams(int speed);
      void runScene(int arraynum);

      void procPreRendering(void);
      void procPostRendering(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                                       int32 setupsan13, int32 curFrame, int32 maxFrame);
      void procIACT(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                          int32 setupsan13, Chunk &b, int32 size, int32 flags);
      void procSKIP(Chunk &b);
      void escapeKeyHandler(void);

 private:

      ScummEngine_v6 *_vm;
      SmushPlayer *_player;

      int32 _speed;
      bool _insaneIsRunning;

      int32 _numberArray;
      int32 _emulTimerId;
      int32 _emulateInterrupt;
      byte _errbuf[0x7d0];
      int32 _flag1d;
      int32 _mainTimerId;
      int32 _objArray1Idx;
      int32 _objArray1Idx2;
      int32 _objArray1[101];
      int32 _objArray2Idx;
      int32 _objArray2Idx2;
      int32 _objArray2[101];
      byte _currSceneId;
      int32 _timer1Flag;
      int32 _timer3Id;
      int32 _timer4Id;
      int32 _timer6Id;
      int32 _timer7Id;
      int32 _timerSpriteId;
      byte _temp2SceneId;
      byte _tempSceneId;
      int32 _currEnemy;
      int32 _currScenePropIdx;
      int32 _currScenePropSubIdx;
      const char *_currTrsMsg;
      int16 _sceneData2Loaded;
      int16 _sceneData1Loaded;
      int16 _keyboardDisable;
      bool _needSceneSwitch;
      int32 _idx2Exceeded;
      int32 _lastKey;
      bool _beenCheated;
      bool _tiresRustle;
      int _keybOldDx;
      int _keybOldDy;
      int _velocityX;
      int _velocityY;
      int _keybX;
      int _keybY;
      int32 _firstBattle;
      bool _weaponBenJustSwitched;
      bool _kickBenProgress;
      int32 _battleScene;
      bool _kickEnemyProgress;
      bool _weaponEnemyJustSwitched;
      int32 _enHdlVar[9][9];
      int32 _smlayer_room;
      int32 _smlayer_room2;
      byte *_smush_roadrashRip; // FIXME: combine them in array
      byte *_smush_roadrsh2Rip;
      byte *_smush_roadrsh3Rip;
      byte *_smush_goglpaltRip;
      byte *_smush_tovista1Flu;
      byte *_smush_tovista2Flu;
      byte *_smush_toranchFlu;
      byte *_smush_minedrivFlu;
      byte *_smush_minefiteFlu;
      NutRenderer *_smush_bencutNut;
      NutRenderer *_smush_bensgoggNut;
      NutRenderer *_smush_iconsNut;
      NutRenderer *_smush_icons2Nut;
      bool _smush_isSanFileSetup;
      bool _isBenCut;
      int _smush_smushState;
      int _continueFrame;
      int _continueFrame1;
      int _counter1;
      int _iactSceneId;
      int _iactSceneId2;
      int _smush_setupsan17;
      int32 _smush_setupsan1;
      int16 _smush_setupsan2;
      int32 _smush_setupsan4;
      int16 _smush_frameStep;
      int16 _smush_curFrame;
      int16 _smush_frameNum1;
      int16 _smush_frameNum2;
      byte _smush_earlyFluContents[0x31a];
      int16 _enemyState[10][10];
      byte _iactBits[0x80];
      int16 _mainRoadPos;
      int16 _posBrokenCar;
      int16 _posBrokenTruck;
      int16 _posFatherTorque;
      int16 _posCave;
      int16 _posVista;
      bool _roadBranch;
      bool _roadStop;
      bool _carIsBroken;
      bool _benHasGoggles;
      bool _mineCaveIsNear;
      bool _objectDetected;
      bool _roadBumps;
      int32 _approachAnim;
      int32 _val54d;
      int32 _val57d;
      bool _val115_;
      int32 _val211d;
      int32 _val213d;
      int32 _metEnemiesListTail;
      int32 _metEnemiesList[12];

      struct enemy {
            int32 handler;
            int32 initializer;
            int16 occurences;
            int32 maxdamage;
            int32 isEmpty;
            int32 weapon;
            int32 sound;
            char  filename[20];
            int32 costume4;
            int32 costume6;
            int32 costume5;
            int16 costumevar;
            int32 maxframe;
            int32 apprAnim;
      };

      struct enemy _enemy[9];

      struct fluConf {
            int sceneId;
            byte **fluPtr;
            const char *filenamePtr;
            int startFrame;
            int numFrames;
      };

      struct fluConf _fluConf[21];

      struct sceneProp {
            int32 actor; // main actor number, -1 if not applicable
            int32 sound;
            int32 trsId;
            byte r;
            byte g;
            byte b;
            int32 counter;
            int32 maxCounter;
            int32 index;
      };

      struct sceneProp _sceneProp[139];

      struct act {
            int32 actor;
            byte  state;
            int32 room;
            int32 animTilt;
            int32 tilt;
            int32 frame;
      };

      struct actor {
            int32 damage;
            int32 maxdamage;
            int32 field_8;
            int32 frame;
            int32 tilt;
            int32 cursorX;
            int32 speed;
            int32 x;
            int32 y;
            int32 y1;
            int32 x1;
            int16 weaponClass;
            int16 animWeaponClass;
            int16 newFacingFlag;
            int16 curFacingFlag;
            bool lost;
            bool kicking;
            bool field_44;
            bool field_48; // unused
            bool defunct;
            int32 scenePropSubIdx;
            int32 field_54;
            int32 runningSound;
            int32 weapon;
            bool inventory[8];
            int32 probability;
            int32 enemyHandler;
            struct act act[4];
      };

      struct actor _actor[2];

      void initvars(void);
      void readFileToMem(const char *name, byte **buf);
      void startVideo(const char *filename, int num, int argC, int frameRate,
                               int doMainLoop, byte *fluPtr = 0, int32 startFrame = 0);
      void smush_warpMouse(int x, int y, int buttons);
      void putActors(void);
      void readState(void);
      int initScene(int sceneId);
      void stopSceneSounds(int sceneId);
      void shutCurrentScene(void);
      int loadSceneData(int scene, int flag, int phase);
      void setSceneCostumes(int sceneId);
      void setupValues(void);
      void setEnemyCostumes (void);
      void smlayer_stopSound (int idx);
      int smlayer_loadSound(int id, int flag, int phase);
      int smlayer_loadCostume(int id, int phase);
      void smlayer_setActorCostume(int actornum, int act, int costume);
      void smlayer_putActor(int actornum, int act, int x, int y, byte room);
      void smlayer_setActorLayer(int actornum, int act, int layer);
      void smlayer_setFluPalette(byte *pal, int shut_flag);

      int32 readArray(int item);
      void writeArray(int item, int value);

      bool idx1Compare(void);
      bool idx2Compare(void);
      int32 idx1Tweak(void);
      int32 idx2Tweak(void);
      void smush_setToFinish(void);
      void postCase11(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase0(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase16(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase1(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase2(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase20(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase3(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase5(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase6(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase8(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase9(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                           int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase10(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase12(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase23(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCase14(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                              int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCaseAll(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                               int32 setupsan13, int32 curFrame, int32 maxFrame);
      void postCaseMore(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                                int32 setupsan13, int32 curFrame, int32 maxFrame);
      void switchSceneIfNeeded(void);
      int smush_changeState(int state);
      void init_actStruct(int actornum, int actnum, int32 actorval, byte state,
                                      int32 room, int32 animtilt, int32 tilt, int32 frame);
      void init_enemyStruct(int n, int32 handler, int32 initializer,
                                             int16 occurences, int32 maxdamage, int32 isEmpty,
                                             int32 field_14, int32 sound, const char *filename,
                                             int32 costume4, int32 costume6, int32 costume5,
                                             int16 field_2C, int32 field_30, int32 field_34);
      int32 enemyHandler(int n, int32, int32, int32);
      int32 enemyInitializer(int n, int32, int32, int32);
      int32 enemy0handler(int32, int32, int32);
      int32 enemy0initializer(int32, int32, int32);
      int32 enemy1handler(int32, int32, int32);
      int32 enemy1initializer(int32, int32, int32);
      int32 enemy2handler(int32, int32, int32);
      int32 enemy2initializer(int32, int32, int32);
      int32 enemy3handler(int32, int32, int32);
      int32 enemy3initializer(int32, int32, int32);
      int32 enemy4handler(int32, int32, int32);
      int32 enemy4initializer(int32, int32, int32);
      int32 enemy5handler(int32, int32, int32);
      int32 enemy5initializer(int32, int32, int32);
      int32 enemy6handler(int32, int32, int32);
      int32 enemy6initializer(int32, int32, int32);
      int32 enemy7handler(int32, int32, int32);
      int32 enemy7initializer(int32, int32, int32);
      int32 enemy8handler(int32, int32, int32);
      int32 enemy8initializer(int32, int32, int32);
      int32 enemyBenHandler(int32, int32, int32);
      bool smlayer_isSoundRunning(int32 sound);
      bool smlayer_startSfx(int32 sound);
      bool smlayer_startVoice(int32 sound);
      void smlayer_soundSetPan(int32 sound, int32 pan);
      void smlayer_soundSetPriority(int32 sound, int32 priority);
      void smlayer_drawSomething(byte *renderBitmap, int32 codecparam,
                     int32 arg_8, int32 arg_C, int32 arg_10, NutRenderer *nutfileptr,
                     int32 arg_18, int32 arg_1C, int32 arg_20);
      void smlayer_overrideDrawActorAt(byte *, byte, byte);
      void queueSceneSwitch(int32 sceneId, byte *fluPtr, const char *filename,
                                      int32 arg_C, int32 arg_10, int32 startFrame, int32 numFrames);
      void turnBen(bool battle);
      void smush_rewindCurrentSan(int arg_0, int arg_4, int arg_8);
      void smlayer_showStatusMsg(int32 arg_0, byte *renderBitmap, int32 codecparam,
                                             int32 x, int32 y, int32 arg_14, int32 arg_18,
                                             int32 arg_1C, const char *formatString, const char *str);
      void init_fluConfStruct(int n, int sceneId, byte **fluPtr,
                                          const char *filenamePtr, int startFrame, int numFrames);
      int32 processBenOnRoad(bool flag);
      void mineChooseRoad(int32 arg_0);
      void actor02Reaction(int32 buttons);
      void actor00Reaction(int32 buttons);
      void actor01Reaction(int32 buttons);
      void actor03Reaction(int32 buttons);
      void turnEnemy(bool battle);
      int32 actionBen(void);
      void chooseBenWeaponAnim(int buttons);
      void setBenAnimation(int32 actornum, int anim);
      int calcTilt(int speed);
      bool smush_eitherNotStartNewFrame(void);
      void smlayer_setActorFacing(int actornum, int actnum, int frame, int direction);
      int32 weaponMaxRange(int32 actornum);
      int32 weaponMinRange(int32 actornum);
      void switchBenWeapon(void);
      void prepareScenePropScene(int32 scenePropNum, bool arg_4, bool arg_8);
      int32 calcBenDamage(bool arg_0, bool arg_4);
      int32 weaponDamage(int32 actornum);
      void proc47(int32 actornum, int32 val);
      bool weaponBenIsEffective(void);
      bool actor1StateFlags(int state);
      bool actor0StateFlags1(int state);
      bool actor0StateFlags2(int state);
      bool loadScenePropSounds(int32 scenePropNum);
      void init_scenePropStruct(int32 n, int32 n1, int32 actornum, int32 sound, int32 trsId,
                                            byte r, byte g, byte b, int32 counter, int32 maxCounter,
                                            int32 index);
      int32 setBenState(void);
      bool smlayer_actorNeedRedraw(int actornum, int actnum);
      void reinitActors(void);
      const char *handleTrsTag(int32 trsId);
      void ouchSoundBen(void);
      int32 smush_setupSanWithFlu(const char *filename, int32 setupsan2, int32 step1,
                                             int32 step2, int32 setupsan1, byte *fluPtr, int32 numFrames);
      void smush_setupSanFromStart(const char *filename, int32 setupsan2, int32 step1,
                                                 int32 step2, int32 setupsan1);
      void smush_setFrameSteps(int32 step1, int32 step2);
      void smush_setupSanFile(const char *filename, int32 offset, int32 contFrame);
      int32 getLastKey(bool arg_0);
      void drawSpeedyActor(int32 arg_0);
      void actor11Reaction(int32 buttons);
      void actor12Reaction(int32 buttons);
      void actor13Reaction(int32 buttons);
      void actor10Reaction(int32 buttons);
      int32 actionEnemy(void);
      int32 processKeyboard(void);
      int32 processMouse(void);
      void setEnemyAnimation(int32 actornum, int anim);
      void chooseEnemyWeaponAnim(int32 buttons);
      void switchEnemyWeapon(void);
      void setEnemyState(void);
      int32 calcEnemyDamage(bool arg_0, bool arg_4);
      void ouchSoundEnemy(void);
      bool weaponEnemyIsEffective(void);
      void iactScene1(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                          int32 setupsan13, Chunk &b, int32 size, int32 flags);
      void iactScene3(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                          int32 setupsan13, Chunk &b, int32 size, int32 flags);
      void iactScene4(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                          int32 setupsan13, Chunk &b, int32 size, int32 flags);
      void iactScene6(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                          int32 setupsan13, Chunk &b, int32 size, int32 flags);
      void iactScene17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                          int32 setupsan13, Chunk &b, int32 size, int32 flags);
      void iactScene21(byte *renderBitmap, int32 codecparam, int32 setupsan12,
                          int32 setupsan13, Chunk &b, int32 size, int32 flags);
      bool isBitSet(int n);
      void setBit(int n);
      void clearBit(int n);
      void chooseEnemy(void);
      void removeEmptyEnemies(void);
      void removeEnemyFromMetList(int32);
};
} // End of namespace Insane

#endif

Generated by  Doxygen 1.6.0   Back to index