/* ScummVM - Scumm Interpreter * Copyright (C) 2004 Ivan Dubrov * Copyright (C) 2004-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$ * */ #ifndef GOB_MULT_H #define GOB_MULT_H #include "gob/sound.h" namespace Gob { class Mult { public: #pragma START_PACK_STRUCTS typedef struct Mult_AnimData { int8 animation; int8 layer; int8 frame; int8 animType; int8 order; int8 isPaused; int8 isStatic; int8 maxTick; int8 unknown; int8 newLayer; int8 newAnimation; byte intersected; int8 newCycle; } GCC_PACK Mult_AnimData; typedef struct Mult_Object { int32 *pPosX; int32 *pPosY; Mult_AnimData *pAnimData; int16 tick; int16 lastLeft; int16 lastRight; int16 lastTop; int16 lastBottom; } Mult_Object; // Mult typedef struct Mult_StaticKey { int16 frame; int16 layer; } GCC_PACK Mult_StaticKey; typedef struct Mult_AnimKey { int16 frame; int16 layer; int16 posX; int16 posY; int16 order; } GCC_PACK Mult_AnimKey; typedef struct Mult_TextKey { int16 frame; int16 cmd; int16 unknown0[9]; int16 index; int16 unknown1[2]; } GCC_PACK Mult_TextKey; typedef struct Mult_PalKey { int16 frame; int16 cmd; int16 rates[4]; int16 unknown0; int16 unknown1; int8 subst[16][4]; } GCC_PACK Mult_PalKey; typedef struct Mult_PalFadeKey { int16 frame; int16 fade; int16 palIndex; int8 flag; } GCC_PACK Mult_PalFadeKey; typedef struct Mult_SndKey { int16 frame; int16 cmd; int16 freq; int16 channel; int16 repCount; int16 resId; int16 soundIndex; } GCC_PACK Mult_SndKey; #pragma END_PACK_STRUCTS // Globals Mult_Object *objects; int16 *renderData; int16 objCount; Video::SurfaceDesc *underAnimSurf; char *multData; int16 frame; char doPalSubst; int16 counter; int16 frameRate; int32 *animArrayX; int32 *animArrayY; Mult_AnimData *animArrayData; int16 index; // Static keys int16 staticKeysCount; Mult_StaticKey *staticKeys; int16 staticIndices[10]; // Anim keys Mult_AnimKey *animKeys[4]; int16 animKeysCount[4]; int16 animLayer; int16 animIndices[10]; // Text keys int16 textKeysCount; Mult_TextKey *textKeys; int16 frameStart; // Palette keys int16 palKeyIndex; int16 palKeysCount; Mult_PalKey *palKeys; Video::Color *oldPalette; Video::Color palAnimPalette[256]; int16 palAnimKey; int16 palAnimIndices[4]; int16 palAnimRed[4]; int16 palAnimGreen[4]; int16 palAnimBlue[4]; // Palette fading Mult_PalFadeKey *palFadeKeys; int16 palFadeKeysCount; char palFadingRed; char palFadingGreen; char palFadingBlue; char animDataAllocated; char *dataPtr; int16 staticLoaded[10]; int16 animLoaded[10]; int16 sndSlotsCount; // Sound keys int16 sndKeysCount; Mult_SndKey *sndKeys; void zeroMultData(void); void loadMult(int16 resId); void freeMultKeys(void); void checkFreeMult(void); void playMult(int16 startFrame, int16 endFrame, char checkEscape, char handleMouse); void animate(void); void interGetObjAnimSize(void); void interInitMult(void); void freeMult(void); void interLoadMult(void); void freeAll(void); void initAll(void); void playSound(Snd::SoundDesc * soundDesc, int16 repCount, int16 freq, int16 channel); Mult(GobEngine *vm); protected: Video::Color fadePal[5][16]; GobEngine *_vm; char drawStatics(char stop); void drawAnims(void); void drawText(char *pStop, char *pStopNoClear); char prepPalAnim(char stop); void doPalAnim(void); char doFadeAnim(char stop); char doSoundAnim(char stop); }; } // End of namespace Gob #endif /* __MULT_H */