22#if !defined(SCUMM_INSANE_H) && defined(ENABLE_SCUMM_7_8)
25#include "scumm/nut_renderer.h"
27#include "scumm/smush/smush_player.h"
55 Insane(ScummEngine_v7 *scumm);
58 void setSmushParams(
int speed);
59 void setSmushPlayer(SmushPlayer *player);
60 void runScene(
int arraynum);
62 virtual void procPreRendering(
byte *renderBitmap);
63 virtual void procPostRendering(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
64 int32 setupsan13, int32 curFrame, int32 maxFrame);
65 virtual void procIACT(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
67 int16 par2, int16 par3, int16 par4);
69 void escapeKeyHandler();
71 bool isInsaneActive() {
return _insaneIsRunning; }
72 void syncCurrentSanFlags();
80 bool _insaneIsRunning;
84 int32 _emulateInterrupt;
89 int32 _objArray1[101];
92 int32 _objArray2[101];
103 int32 _currScenePropIdx;
104 int32 _currScenePropSubIdx;
105 const char *_currTrsMsg;
106 int16 _sceneData2Loaded;
107 int16 _sceneData1Loaded;
108 int16 _keyboardDisable;
109 bool _needSceneSwitch;
120 bool _weaponBenJustSwitched;
121 bool _kickBenProgress;
123 bool _kickEnemyProgress;
124 bool _weaponEnemyJustSwitched;
125 int32 _enHdlVar[9][9];
127 int32 _smlayer_room2;
128 byte *_smush_roadrashRip;
129 byte *_smush_roadrsh2Rip;
130 byte *_smush_roadrsh3Rip;
131 byte *_smush_goglpaltRip;
132 byte *_smush_tovista1Flu;
133 byte *_smush_tovista2Flu;
134 byte *_smush_toranchFlu;
135 byte *_smush_minedrivFlu;
136 byte *_smush_minefiteFlu;
137 NutRenderer *_smush_bencutNut;
138 NutRenderer *_smush_bensgoggNut;
139 NutRenderer *_smush_iconsNut;
140 NutRenderer *_smush_icons2Nut;
141 bool _smush_isSanFileSetup;
143 int _smush_smushState;
149 int _smush_setupsan17;
150 int32 _smush_setupsan1;
151 int16 _smush_curSanFlags;
152 int32 _smush_setupsan4;
153 int16 _smush_frameStep;
154 int16 _smush_curFrame;
155 int16 _smush_frameNum1;
156 int16 _smush_frameNum2;
157 byte _smush_earlyFluContents[0x31a];
158 int16 _enemyState[10][10];
159 byte _iactBits[0x401];
162 int16 _posBrokenTruck;
163 int16 _posFatherTorque;
170 bool _mineCaveIsNear;
171 bool _objectDetected;
179 int32 _metEnemiesListTail;
180 int32 _metEnemiesList[12];
199 struct enemy _enemy[9];
204 const char *filenamePtr;
209 struct fluConf _fluConf[21];
223 struct sceneProp _sceneProp[139];
247 int16 animWeaponClass;
255 int32 scenePropSubIdx;
265 struct actor _actor[2];
268 void readFileToMem(
const char *name,
byte **buf);
269 void startVideo(
const char *filename,
int num,
int argC,
int frameRate,
270 int doMainLoop,
byte *fluPtr = 0, int32 startFrame = 0);
271 void smush_warpMouse(
int x,
int y,
int buttons);
274 int initScene(
int sceneId);
275 void stopSceneSounds(
int sceneId);
276 void shutCurrentScene();
277 int loadSceneData(
int scene,
int flag,
int phase);
278 void setSceneCostumes(
int sceneId);
280 void setEnemyCostumes ();
281 void smlayer_stopSound (
int idx);
282 int smlayer_loadSound(
int id,
int flag,
int phase);
283 int smlayer_loadCostume(
int id,
int phase);
284 void smlayer_setActorCostume(
int actornum,
int act,
int costume);
285 void smlayer_putActor(
int actornum,
int act,
int x,
int y,
byte room);
286 void smlayer_setActorLayer(
int actornum,
int act,
int layer);
287 void smlayer_setFluPalette(
byte *pal,
int shut_flag);
289 int32 readArray(
int item);
290 void writeArray(
int item,
int value);
296 void smush_setToFinish();
297 void postCase11(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
298 int32 setupsan13, int32 curFrame, int32 maxFrame);
299 void postCase0(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
300 int32 setupsan13, int32 curFrame, int32 maxFrame);
301 void postCase17(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
302 int32 setupsan13, int32 curFrame, int32 maxFrame);
303 void postCase16(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
304 int32 setupsan13, int32 curFrame, int32 maxFrame);
305 void postCase1(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
306 int32 setupsan13, int32 curFrame, int32 maxFrame);
307 void postCase2(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
308 int32 setupsan13, int32 curFrame, int32 maxFrame);
309 void postCase20(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
310 int32 setupsan13, int32 curFrame, int32 maxFrame);
311 void postCase3(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
312 int32 setupsan13, int32 curFrame, int32 maxFrame);
313 void postCase5(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
314 int32 setupsan13, int32 curFrame, int32 maxFrame);
315 void postCase6(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
316 int32 setupsan13, int32 curFrame, int32 maxFrame);
317 void postCase8(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
318 int32 setupsan13, int32 curFrame, int32 maxFrame);
319 void postCase9(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
320 int32 setupsan13, int32 curFrame, int32 maxFrame);
321 void postCase10(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
322 int32 setupsan13, int32 curFrame, int32 maxFrame);
323 void postCase12(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
324 int32 setupsan13, int32 curFrame, int32 maxFrame);
325 void postCase23(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
326 int32 setupsan13, int32 curFrame, int32 maxFrame);
327 void postCase14(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
328 int32 setupsan13, int32 curFrame, int32 maxFrame);
329 void postCaseAll(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
330 int32 setupsan13, int32 curFrame, int32 maxFrame);
331 void postCaseMore(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
332 int32 setupsan13, int32 curFrame, int32 maxFrame);
333 void switchSceneIfNeeded();
334 int smush_changeState(
int state);
335 void init_actStruct(
int actornum,
int actnum, int32 actorval,
byte state,
336 int32 room, int32 animtilt, int32 tilt, int32 frame);
337 void init_enemyStruct(
int n, int32 handler, int32 initializer,
338 int16 occurrences, int32 maxdamage, int32 isEmpty,
339 int32 field_14, int32 sound,
const char *filename,
340 int32 costume4, int32 costume6, int32 costume5,
341 int16 field_2C, int32 field_30, int32 field_34);
342 int32 enemyHandler(
int n, int32, int32, int32);
343 int32 enemyInitializer(
int n, int32, int32, int32);
344 int32 enemy0handler(int32, int32, int32);
345 int32 enemy0initializer(int32, int32, int32);
346 int32 enemy1handler(int32, int32, int32);
347 int32 enemy1initializer(int32, int32, int32);
348 int32 enemy2handler(int32, int32, int32);
349 int32 enemy2initializer(int32, int32, int32);
350 int32 enemy3handler(int32, int32, int32);
351 int32 enemy3initializer(int32, int32, int32);
352 int32 enemy4handler(int32, int32, int32);
353 int32 enemy4initializer(int32, int32, int32);
354 int32 enemy5handler(int32, int32, int32);
355 int32 enemy5initializer(int32, int32, int32);
356 int32 enemy6handler(int32, int32, int32);
357 int32 enemy6initializer(int32, int32, int32);
358 int32 enemy7handler(int32, int32, int32);
359 int32 enemy7initializer(int32, int32, int32);
360 int32 enemy8handler(int32, int32, int32);
361 int32 enemy8initializer(int32, int32, int32);
362 int32 enemyBenHandler(int32, int32, int32);
363 bool smlayer_isSoundRunning(int32 sound);
364 bool smlayer_startSfx(int32 sound);
365 bool smlayer_startVoice(int32 sound);
366 void smlayer_soundSetPan(int32 sound, int32 pan);
367 void smlayer_soundSetPriority(int32 sound, int32 priority);
368 void smlayer_drawSomething(
byte *renderBitmap, int32 codecparam,
369 int32 arg_8, int32 arg_C, int32 arg_10, NutRenderer *nutfileptr,
370 int32 arg_18, int32 arg_1C, int32 arg_20);
371 void smlayer_overrideDrawActorAt(
byte *,
byte,
byte);
372 void queueSceneSwitch(int32 sceneId,
byte *fluPtr,
const char *filename,
373 int32 arg_C, int32 arg_10, int32 startFrame, int32 numFrames);
374 void turnBen(
bool battle);
375 void smush_rewindCurrentSan(
int arg_0,
int arg_4,
int arg_8);
376 void smlayer_showStatusMsg(int32 arg_0,
byte *renderBitmap, int32 codecparam,
377 int32 x, int32 y, int32 arg_14, int32 arg_18,
378 int32 arg_1C,
const char *formatString,
const char *str);
379 void init_fluConfStruct(
int n,
int sceneId,
byte **fluPtr,
380 const char *filenamePtr,
int startFrame,
int numFrames);
381 int32 processBenOnRoad(
bool flag);
382 void mineChooseRoad(int32 arg_0);
383 void actor02Reaction(int32 buttons);
384 void actor00Reaction(int32 buttons);
385 void actor01Reaction(int32 buttons);
386 void actor03Reaction(int32 buttons);
387 void turnEnemy(
bool battle);
389 void chooseBenWeaponAnim(
int buttons);
390 void setBenAnimation(int32 actornum,
int anim);
391 int calcTilt(
int speed);
392 bool smush_eitherNotStartNewFrame();
393 void smlayer_setActorFacing(
int actornum,
int actnum,
int frame,
int direction);
394 int32 weaponMaxRange(int32 actornum);
395 int32 weaponMinRange(int32 actornum);
396 void switchBenWeapon();
397 void prepareScenePropScene(int32 scenePropNum,
bool arg_4,
bool arg_8);
398 int32 calcBenDamage(
bool arg_0,
bool arg_4);
399 int32 weaponDamage(int32 actornum);
400 bool weaponBenIsEffective();
401 bool actor1StateFlags(
int state);
402 bool actor0StateFlags1(
int state);
403 bool actor0StateFlags2(
int state);
404 bool loadScenePropSounds(int32 scenePropNum);
405 void init_scenePropStruct(int32 n, int32 n1, int32 actornum, int32 sound, int32 trsId,
406 byte r,
byte g,
byte b, int32 counter, int32 maxCounter,
409 bool smlayer_actorNeedRedraw(
int actornum,
int actnum);
411 const char *handleTrsTag(int32 trsId);
413 int32 smush_setupSanWithFlu(
const char *filename, int32 setupsan2, int32 step1,
414 int32 step2, int32 setupsan1,
byte *fluPtr, int32 numFrames);
415 void smush_setupSanFromStart(
const char *filename, int32 setupsan2, int32 step1,
416 int32 step2, int32 setupsan1);
417 void smush_setFrameSteps(int32 step1, int32 step2);
418 void smush_setupSanFile(
const char *filename, int32 offset, int32 contFrame);
419 void drawSpeedyActor(int32 arg_0);
420 void actor11Reaction(int32 buttons);
421 void actor12Reaction(int32 buttons);
422 void actor13Reaction(int32 buttons);
423 void actor10Reaction(int32 buttons);
425 int32 processKeyboard();
426 virtual int32 processMouse();
427 void setEnemyAnimation(int32 actornum,
int anim);
428 void chooseEnemyWeaponAnim(int32 buttons);
429 void switchEnemyWeapon();
430 void setEnemyState();
431 int32 calcEnemyDamage(
bool arg_0,
bool arg_4);
432 void ouchSoundEnemy();
433 bool weaponEnemyIsEffective();
434 void iactScene1(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
436 int16 par1, int16 par2, int16 par3, int16 par4);
437 void iactScene3(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
439 int16 command, int16 par1, int16, int16);
440 void iactScene4(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
442 int16 par1, int16 par2, int16 par3, int16 par4);
443 void iactScene6(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
445 int16 par1, int16 par2, int16 par3, int16 par4);
446 void iactScene17(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
448 int16 par1, int16 par2, int16 par3, int16 par4);
449 void iactScene21(
byte *renderBitmap, int32 codecparam, int32 setupsan12,
451 int16 par1, int16 par2, int16 par3, int16 par4);
452 virtual bool isBitSet(
int n);
453 virtual void setBit(
int n);
454 void clearBit(
int n);
456 void removeEmptyEnemies();
457 void removeEnemyFromMetList(int32);
461 virtual void loadEmbeddedSan(
int userId,
byte *animData, int32 size,
byte *renderBitmap) {