22 #if !defined(SCUMM_INSANE_H) && defined(ENABLE_SCUMM_7_8) 23 #define SCUMM_INSANE_H 25 #include "scumm/nut_renderer.h" 27 #include "scumm/smush/smush_player.h" 32 #define INV_CHAINSAW 1 40 #define EN_ROTT1 0 // rottwheeler 41 #define EN_ROTT2 1 // rottwheeler 42 #define EN_ROTT3 2 // rottwheeler 43 #define EN_VULTF1 3 // vulture (redhead female1) 44 #define EN_VULTM1 4 // vulture (male with glasses) 45 #define EN_VULTF2 5 // vulture (redhead female2) 46 #define EN_VULTM2 6 // vulture (initialized as rottwheeler) (male) 47 #define EN_CAVEFISH 7 // Cavefish Maximum Fish 48 #define EN_TORQUE 8 // Father Torque 49 #define EN_BEN 9 // used only with handler 53 Insane(ScummEngine_v7 *scumm);
56 void setSmushParams(
int speed);
57 void setSmushPlayer(SmushPlayer *player);
58 void runScene(
int arraynum);
60 void procPreRendering();
61 void procPostRendering(byte *renderBitmap, int32 codecparam, int32 setupsan12,
62 int32 setupsan13, int32 curFrame, int32 maxFrame);
63 void procIACT(byte *renderBitmap, int32 codecparam, int32 setupsan12,
65 int16 par2, int16 par3, int16 par4);
67 void escapeKeyHandler();
69 bool isInsaneActive() {
return _insaneIsRunning; }
70 void syncCurrentSanFlags();
78 bool _insaneIsRunning;
82 int32 _emulateInterrupt;
87 int32 _objArray1[101];
90 int32 _objArray2[101];
101 int32 _currScenePropIdx;
102 int32 _currScenePropSubIdx;
103 const char *_currTrsMsg;
104 int16 _sceneData2Loaded;
105 int16 _sceneData1Loaded;
106 int16 _keyboardDisable;
107 bool _needSceneSwitch;
118 bool _weaponBenJustSwitched;
119 bool _kickBenProgress;
121 bool _kickEnemyProgress;
122 bool _weaponEnemyJustSwitched;
123 int32 _enHdlVar[9][9];
125 int32 _smlayer_room2;
126 byte *_smush_roadrashRip;
127 byte *_smush_roadrsh2Rip;
128 byte *_smush_roadrsh3Rip;
129 byte *_smush_goglpaltRip;
130 byte *_smush_tovista1Flu;
131 byte *_smush_tovista2Flu;
132 byte *_smush_toranchFlu;
133 byte *_smush_minedrivFlu;
134 byte *_smush_minefiteFlu;
135 NutRenderer *_smush_bencutNut;
136 NutRenderer *_smush_bensgoggNut;
137 NutRenderer *_smush_iconsNut;
138 NutRenderer *_smush_icons2Nut;
139 bool _smush_isSanFileSetup;
141 int _smush_smushState;
147 int _smush_setupsan17;
148 int32 _smush_setupsan1;
149 int16 _smush_curSanFlags;
150 int32 _smush_setupsan4;
151 int16 _smush_frameStep;
152 int16 _smush_curFrame;
153 int16 _smush_frameNum1;
154 int16 _smush_frameNum2;
155 byte _smush_earlyFluContents[0x31a];
156 int16 _enemyState[10][10];
157 byte _iactBits[0x80];
160 int16 _posBrokenTruck;
161 int16 _posFatherTorque;
168 bool _mineCaveIsNear;
169 bool _objectDetected;
177 int32 _metEnemiesListTail;
178 int32 _metEnemiesList[12];
197 struct enemy _enemy[9];
202 const char *filenamePtr;
207 struct fluConf _fluConf[21];
221 struct sceneProp _sceneProp[139];
245 int16 animWeaponClass;
253 int32 scenePropSubIdx;
263 struct actor _actor[2];
266 void readFileToMem(
const char *name, byte **buf);
267 void startVideo(
const char *filename,
int num,
int argC,
int frameRate,
268 int doMainLoop, byte *fluPtr = 0, int32 startFrame = 0);
269 void smush_warpMouse(
int x,
int y,
int buttons);
272 int initScene(
int sceneId);
273 void stopSceneSounds(
int sceneId);
274 void shutCurrentScene();
275 int loadSceneData(
int scene,
int flag,
int phase);
276 void setSceneCostumes(
int sceneId);
278 void setEnemyCostumes ();
279 void smlayer_stopSound (
int idx);
280 int smlayer_loadSound(
int id,
int flag,
int phase);
281 int smlayer_loadCostume(
int id,
int phase);
282 void smlayer_setActorCostume(
int actornum,
int act,
int costume);
283 void smlayer_putActor(
int actornum,
int act,
int x,
int y, byte room);
284 void smlayer_setActorLayer(
int actornum,
int act,
int layer);
285 void smlayer_setFluPalette(byte *pal,
int shut_flag);
287 int32 readArray(
int item);
288 void writeArray(
int item,
int value);
294 void smush_setToFinish();
295 void postCase11(byte *renderBitmap, int32 codecparam, int32 setupsan12,
296 int32 setupsan13, int32 curFrame, int32 maxFrame);
297 void postCase0(byte *renderBitmap, int32 codecparam, int32 setupsan12,
298 int32 setupsan13, int32 curFrame, int32 maxFrame);
299 void postCase17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
300 int32 setupsan13, int32 curFrame, int32 maxFrame);
301 void postCase16(byte *renderBitmap, int32 codecparam, int32 setupsan12,
302 int32 setupsan13, int32 curFrame, int32 maxFrame);
303 void postCase1(byte *renderBitmap, int32 codecparam, int32 setupsan12,
304 int32 setupsan13, int32 curFrame, int32 maxFrame);
305 void postCase2(byte *renderBitmap, int32 codecparam, int32 setupsan12,
306 int32 setupsan13, int32 curFrame, int32 maxFrame);
307 void postCase20(byte *renderBitmap, int32 codecparam, int32 setupsan12,
308 int32 setupsan13, int32 curFrame, int32 maxFrame);
309 void postCase3(byte *renderBitmap, int32 codecparam, int32 setupsan12,
310 int32 setupsan13, int32 curFrame, int32 maxFrame);
311 void postCase5(byte *renderBitmap, int32 codecparam, int32 setupsan12,
312 int32 setupsan13, int32 curFrame, int32 maxFrame);
313 void postCase6(byte *renderBitmap, int32 codecparam, int32 setupsan12,
314 int32 setupsan13, int32 curFrame, int32 maxFrame);
315 void postCase8(byte *renderBitmap, int32 codecparam, int32 setupsan12,
316 int32 setupsan13, int32 curFrame, int32 maxFrame);
317 void postCase9(byte *renderBitmap, int32 codecparam, int32 setupsan12,
318 int32 setupsan13, int32 curFrame, int32 maxFrame);
319 void postCase10(byte *renderBitmap, int32 codecparam, int32 setupsan12,
320 int32 setupsan13, int32 curFrame, int32 maxFrame);
321 void postCase12(byte *renderBitmap, int32 codecparam, int32 setupsan12,
322 int32 setupsan13, int32 curFrame, int32 maxFrame);
323 void postCase23(byte *renderBitmap, int32 codecparam, int32 setupsan12,
324 int32 setupsan13, int32 curFrame, int32 maxFrame);
325 void postCase14(byte *renderBitmap, int32 codecparam, int32 setupsan12,
326 int32 setupsan13, int32 curFrame, int32 maxFrame);
327 void postCaseAll(byte *renderBitmap, int32 codecparam, int32 setupsan12,
328 int32 setupsan13, int32 curFrame, int32 maxFrame);
329 void postCaseMore(byte *renderBitmap, int32 codecparam, int32 setupsan12,
330 int32 setupsan13, int32 curFrame, int32 maxFrame);
331 void switchSceneIfNeeded();
332 int smush_changeState(
int state);
333 void init_actStruct(
int actornum,
int actnum, int32 actorval, byte state,
334 int32 room, int32 animtilt, int32 tilt, int32 frame);
335 void init_enemyStruct(
int n, int32 handler, int32 initializer,
336 int16 occurrences, int32 maxdamage, int32 isEmpty,
337 int32 field_14, int32 sound,
const char *filename,
338 int32 costume4, int32 costume6, int32 costume5,
339 int16 field_2C, int32 field_30, int32 field_34);
340 int32 enemyHandler(
int n, int32, int32, int32);
341 int32 enemyInitializer(
int n, int32, int32, int32);
342 int32 enemy0handler(int32, int32, int32);
343 int32 enemy0initializer(int32, int32, int32);
344 int32 enemy1handler(int32, int32, int32);
345 int32 enemy1initializer(int32, int32, int32);
346 int32 enemy2handler(int32, int32, int32);
347 int32 enemy2initializer(int32, int32, int32);
348 int32 enemy3handler(int32, int32, int32);
349 int32 enemy3initializer(int32, int32, int32);
350 int32 enemy4handler(int32, int32, int32);
351 int32 enemy4initializer(int32, int32, int32);
352 int32 enemy5handler(int32, int32, int32);
353 int32 enemy5initializer(int32, int32, int32);
354 int32 enemy6handler(int32, int32, int32);
355 int32 enemy6initializer(int32, int32, int32);
356 int32 enemy7handler(int32, int32, int32);
357 int32 enemy7initializer(int32, int32, int32);
358 int32 enemy8handler(int32, int32, int32);
359 int32 enemy8initializer(int32, int32, int32);
360 int32 enemyBenHandler(int32, int32, int32);
361 bool smlayer_isSoundRunning(int32 sound);
362 bool smlayer_startSfx(int32 sound);
363 bool smlayer_startVoice(int32 sound);
364 void smlayer_soundSetPan(int32 sound, int32 pan);
365 void smlayer_soundSetPriority(int32 sound, int32 priority);
366 void smlayer_drawSomething(byte *renderBitmap, int32 codecparam,
367 int32 arg_8, int32 arg_C, int32 arg_10, NutRenderer *nutfileptr,
368 int32 arg_18, int32 arg_1C, int32 arg_20);
369 void smlayer_overrideDrawActorAt(byte *, byte, byte);
370 void queueSceneSwitch(int32 sceneId, byte *fluPtr,
const char *filename,
371 int32 arg_C, int32 arg_10, int32 startFrame, int32 numFrames);
372 void turnBen(
bool battle);
373 void smush_rewindCurrentSan(
int arg_0,
int arg_4,
int arg_8);
374 void smlayer_showStatusMsg(int32 arg_0, byte *renderBitmap, int32 codecparam,
375 int32 x, int32 y, int32 arg_14, int32 arg_18,
376 int32 arg_1C,
const char *formatString,
const char *str);
377 void init_fluConfStruct(
int n,
int sceneId, byte **fluPtr,
378 const char *filenamePtr,
int startFrame,
int numFrames);
379 int32 processBenOnRoad(
bool flag);
380 void mineChooseRoad(int32 arg_0);
381 void actor02Reaction(int32 buttons);
382 void actor00Reaction(int32 buttons);
383 void actor01Reaction(int32 buttons);
384 void actor03Reaction(int32 buttons);
385 void turnEnemy(
bool battle);
387 void chooseBenWeaponAnim(
int buttons);
388 void setBenAnimation(int32 actornum,
int anim);
389 int calcTilt(
int speed);
390 bool smush_eitherNotStartNewFrame();
391 void smlayer_setActorFacing(
int actornum,
int actnum,
int frame,
int direction);
392 int32 weaponMaxRange(int32 actornum);
393 int32 weaponMinRange(int32 actornum);
394 void switchBenWeapon();
395 void prepareScenePropScene(int32 scenePropNum,
bool arg_4,
bool arg_8);
396 int32 calcBenDamage(
bool arg_0,
bool arg_4);
397 int32 weaponDamage(int32 actornum);
398 bool weaponBenIsEffective();
399 bool actor1StateFlags(
int state);
400 bool actor0StateFlags1(
int state);
401 bool actor0StateFlags2(
int state);
402 bool loadScenePropSounds(int32 scenePropNum);
403 void init_scenePropStruct(int32 n, int32 n1, int32 actornum, int32 sound, int32 trsId,
404 byte r, byte g, byte b, int32 counter, int32 maxCounter,
407 bool smlayer_actorNeedRedraw(
int actornum,
int actnum);
409 const char *handleTrsTag(int32 trsId);
411 int32 smush_setupSanWithFlu(
const char *filename, int32 setupsan2, int32 step1,
412 int32 step2, int32 setupsan1, byte *fluPtr, int32 numFrames);
413 void smush_setupSanFromStart(
const char *filename, int32 setupsan2, int32 step1,
414 int32 step2, int32 setupsan1);
415 void smush_setFrameSteps(int32 step1, int32 step2);
416 void smush_setupSanFile(
const char *filename, int32 offset, int32 contFrame);
417 void drawSpeedyActor(int32 arg_0);
418 void actor11Reaction(int32 buttons);
419 void actor12Reaction(int32 buttons);
420 void actor13Reaction(int32 buttons);
421 void actor10Reaction(int32 buttons);
423 int32 processKeyboard();
424 int32 processMouse();
425 void setEnemyAnimation(int32 actornum,
int anim);
426 void chooseEnemyWeaponAnim(int32 buttons);
427 void switchEnemyWeapon();
428 void setEnemyState();
429 int32 calcEnemyDamage(
bool arg_0,
bool arg_4);
430 void ouchSoundEnemy();
431 bool weaponEnemyIsEffective();
432 void iactScene1(byte *renderBitmap, int32 codecparam, int32 setupsan12,
434 int16 par1, int16 par2, int16 par3, int16 par4);
435 void iactScene3(byte *renderBitmap, int32 codecparam, int32 setupsan12,
437 int16 command, int16 par1, int16, int16);
438 void iactScene4(byte *renderBitmap, int32 codecparam, int32 setupsan12,
440 int16 par1, int16 par2, int16 par3, int16 par4);
441 void iactScene6(byte *renderBitmap, int32 codecparam, int32 setupsan12,
443 int16 par1, int16 par2, int16 par3, int16 par4);
444 void iactScene17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
446 int16 par1, int16 par2, int16 par3, int16 par4);
447 void iactScene21(byte *renderBitmap, int32 codecparam, int32 setupsan12,
449 int16 par1, int16 par2, int16 par3, int16 par4);
450 bool isBitSet(
int n);
452 void clearBit(
int n);
454 void removeEmptyEnemies();
455 void removeEnemyFromMetList(int32);