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 */
22
23
24
25 #include "engines/engine.h"
26
27 #include "scumm/insane/insane.h"
28 #include "scumm/scumm_v7.h"
29
30 namespace Scumm {
31
enemyBenHandler(int32 actor1,int32 actor2,int32 probability)32 int32 Insane::enemyBenHandler(int32 actor1, int32 actor2, int32 probability) {
33 int32 retval;
34 int32 tmp;
35
36 retval = processMouse();
37
38 // Joystick support is skipped
39
40 retval |= processKeyboard();
41
42 tmp = _enemyState[EN_BEN][0] - 160;
43 if (tmp < -160)
44 tmp = -160;
45
46 if (tmp > 160)
47 tmp = 160;
48
49 _actor[actor1].cursorX = tmp;
50
51 smush_warpMouse(_enemyState[EN_BEN][0], _enemyState[EN_BEN][1], -1);
52
53 return (retval & 3);
54 }
55
turnBen(bool controllable)56 void Insane::turnBen(bool controllable) {
57 int32 buttons;
58
59 switch (_currSceneId) {
60 case 21:
61 case 25:
62 case 3:
63 case 13:
64 if (_actor[0].damage < _actor[0].maxdamage) {
65 _actor[0].lost = false;
66 } else {
67 if (!_actor[0].lost && !_actor[1].lost) {
68 _actor[0].lost = true;
69 _actor[0].act[2].state = 36;
70 _actor[0].act[1].state = 36;
71 _actor[0].act[1].room = 0;
72 _actor[0].act[0].state = 36;
73 _actor[0].act[0].room = 0;
74
75 if (smlayer_isSoundRunning(95))
76 smlayer_stopSound(95);
77 }
78 }
79 buttons = 0;
80 if (!_actor[0].lost && controllable) {
81 buttons = actionBen();
82 if (_currSceneId == 13)
83 buttons &= 2;
84 if (_currEnemy == EN_TORQUE)
85 buttons = 0;
86 }
87 debug(5, "00:%d 01:%d 02:%d 03:%d", _actor[0].act[0].state,
88 _actor[0].act[1].state, _actor[0].act[2].state, _actor[0].act[3].state);
89 actor01Reaction(buttons);
90 actor02Reaction(buttons);
91 actor03Reaction(buttons);
92 actor00Reaction(buttons);
93 break;
94 case 17:
95 mineChooseRoad(processBenOnRoad(false));
96 break;
97 default:
98 if (_actor[0].damage < _actor[0].maxdamage) {
99 _actor[0].lost = false;
100 } else {
101 if (!_actor[0].lost && !_actor[1].lost) {
102 queueSceneSwitch(10, 0, "wr2_ben.san", 64, 0, 0, 0);
103 _actor[0].lost = true;
104 _actor[0].act[2].state = 36;
105 _actor[0].act[2].room = 0;
106 _actor[0].act[0].state = 36;
107 _actor[0].act[0].room = 0;
108 _actor[0].act[1].state = 36;
109 _actor[0].act[1].room = 0;
110 mineChooseRoad(0);
111 return;
112 }
113 }
114
115 if (!_actor[0].lost && controllable)
116 mineChooseRoad(processBenOnRoad(true));
117 else
118 mineChooseRoad(0);
119 break;
120 }
121 }
122
actionBen()123 int32 Insane::actionBen() {
124 int32 buttons, tmp;
125 bool doDamage = false;
126 int sound;
127
128 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
129 sound = 59;
130 else
131 sound = 95;
132
133 if (_actor[0].enemyHandler != -1)
134 buttons = enemyHandler(_actor[0].enemyHandler, 0, 1, _actor[0].probability);
135 else
136 buttons = enemyHandler(EN_TORQUE, 0, 1, _actor[0].probability);
137
138 if (_actor[0].tilt) {
139 _actor[0].speed += _actor[0].cursorX / 40;
140 } else {
141 if (_actor[0].speed < 0)
142 _actor[0].speed++;
143 else
144 _actor[0].speed--;
145 }
146
147 if (_actor[0].speed > 8)
148 _actor[0].speed = 8;
149
150 if (_actor[0].speed < -8)
151 _actor[0].speed = -8;
152
153 _actor[0].x += _actor[0].speed;
154
155 if (_actor[0].x > 100)
156 _actor[0].x--;
157 else
158 if (_actor[0].x < 100)
159 _actor[0].x++;
160
161 if (_actor[0].x >= 0) {
162 if (_actor[1].x - 90 <= _actor[0].x && !_actor[0].lost && !_actor[1].lost) {
163 _val213d++;
164 _actor[0].x = _actor[1].x - 90;
165
166 tmp = _actor[1].speed;
167 _actor[1].speed = _actor[0].speed;
168 _actor[0].speed = tmp;
169
170 if (_val213d > 50) {
171 _actor[0].cursorX = -320;
172 _val213d = 0;
173 }
174
175 if (!smlayer_isSoundRunning(sound))
176 smlayer_startSfx(sound);
177 } else {
178 if (smlayer_isSoundRunning(sound))
179 smlayer_stopSound(sound);
180
181 _val213d = 0;
182 }
183 } else {
184 _actor[0].x = 0;
185 _actor[0].damage++; // FIXME: apparently it is a bug in original
186 // and damage is doubled
187 doDamage = true;
188 }
189
190 if (_actor[0].x > 320) {
191 _actor[0].x = 320;
192 doDamage = true;
193 }
194
195 if (_actor[0].x < 10 || _actor[0].x > 310 || doDamage) {
196 _tiresRustle = 1;
197 _actor[0].x1 = -_actor[0].x1;
198 _actor[0].damage++; // PATCH
199 }
200
201 return buttons;
202 }
203
processBenOnRoad(bool flag)204 int32 Insane::processBenOnRoad(bool flag) {
205 int32 buttons;
206
207 if (_actor[0].enemyHandler != -1)
208 buttons = enemyHandler(_actor[0].enemyHandler, 0, 1, _actor[0].probability);
209 else
210 buttons = enemyHandler(EN_TORQUE, 0, 1, _actor[0].probability);
211
212 if (flag) {
213 _actor[0].speed = _actor[0].tilt;
214
215 if (_actor[0].speed > 8)
216 _actor[0].speed = 8;
217
218 if (_actor[0].speed < -8)
219 _actor[0].speed = -8;
220
221 _actor[0].x += _actor[0].speed / 2 + _actor[0].speed;
222
223 if (_actor[0].x < 0)
224 _actor[0].x = 0;
225
226 if (_actor[0].x > 320)
227 _actor[0].x = 320;
228 }
229
230 return buttons;
231 }
232
mineChooseRoad(int32 buttons)233 void Insane::mineChooseRoad(int32 buttons) {
234 int16 tmp;
235
236 if (_actor[0].field_8 < 1)
237 return;
238
239 if (_actor[0].field_8 == 112) {
240 if (_actor[0].frame < 18 || _needSceneSwitch)
241 return;
242
243 queueSceneSwitch(18, 0, "fishgogg.san", 64, 0, 0, 0);
244 } else if (_actor[0].field_8 == 1) {
245 tmp = _actor[0].cursorX / 22;
246
247 switch (_currSceneId) {
248 case 17:
249 if (buttons & 1) {
250 if (_mineCaveIsNear) {
251 writeArray(1, _posCave);
252 smush_setToFinish();
253 }
254
255 if (_roadBranch && !_needSceneSwitch) {
256 _iactSceneId2 = _iactSceneId;
257 queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
258 }
259 }
260
261 if ((buttons & 2) == 0 || _needSceneSwitch)
262 return;
263
264 queueSceneSwitch(19, 0, "fishgog2.san", 64, 0, 0, 0);
265 break;
266 case 1:
267 _actor[0].tilt = tmp;
268
269 if (tmp < -7)
270 _actor[0].tilt = -7;
271 if (tmp > 7)
272 _actor[0].tilt = 7;
273
274 drawSpeedyActor(buttons);
275
276 if ((buttons & 1) && _currSceneId == 1 && _roadBranch && !_needSceneSwitch) {
277 _iactSceneId2 = _iactSceneId;
278 queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
279 }
280
281 if ((buttons & 2) == 0 || !_benHasGoggles)
282 return;
283
284 _actor[0].frame = 0;
285 _actor[0].field_8 = 112;
286 smlayer_setActorFacing(0, 2, 26, 180);
287 break;
288 case 4:
289 case 5:
290 _actor[0].tilt = tmp;
291
292 if (tmp < -7)
293 _actor[0].tilt = -7;
294 if (tmp > 7)
295 _actor[0].tilt = 7;
296
297 drawSpeedyActor(buttons);
298
299 if ((buttons & 1) == 0)
300 return;
301
302 if (_roadBranch && !_needSceneSwitch) {
303 _iactSceneId2 = _iactSceneId;
304
305 if (readArray(4) && _val211d < 3) {
306 _val211d++;
307 queueSceneSwitch(8, 0, "fishfear.san", 64, 0, 0, 0);
308 } else {
309 queueSceneSwitch(8, 0, "tomine.san", 64, 0, 0, 0);
310 }
311 }
312
313 if (_roadStop) {
314 writeArray(1, _posBrokenTruck);
315 writeArray(3, _val57d);
316 smush_setToFinish();
317 }
318
319 if (!_carIsBroken)
320 return;
321
322 writeArray(1, _posBrokenCar);
323 writeArray(3, _val57d);
324 smush_setToFinish();
325 break;
326 case 6:
327 _actor[0].tilt = tmp;
328
329 if (tmp < -7)
330 _actor[0].tilt = -7;
331 if (tmp > 7)
332 _actor[0].tilt = 7;
333
334 drawSpeedyActor(buttons);
335
336 if ((buttons & 1) == 0)
337 return;
338
339 if (_roadBranch && !_needSceneSwitch) {
340 _iactSceneId2 = _iactSceneId;
341
342 if (readArray(4) && _val211d < 3) {
343 _val211d++;
344 queueSceneSwitch(7, 0, "fishfear.san", 64, 0, 0, 0);
345 } else {
346 queueSceneSwitch(7, 0, "tomine.san", 64, 0, 0, 0);
347 }
348 }
349
350 if (_roadStop) {
351 writeArray(1, _posBrokenTruck);
352 writeArray(3, _posVista);
353 smush_setToFinish();
354 }
355
356 if (!_carIsBroken)
357 return;
358
359 writeArray(1, _posBrokenCar);
360 writeArray(3, _posVista);
361 smush_setToFinish();
362 break;
363 default:
364 break;
365 }
366 }
367 }
368
drawSpeedyActor(int32 buttons)369 void Insane::drawSpeedyActor(int32 buttons) {
370 switch (_actor[0].tilt) {
371 case -7:
372 if (_actor[0].act[2].state != 47) {
373 smlayer_setActorFacing(0, 2, 13, 180);
374 _actor[0].act[2].state = 47;
375 }
376 break;
377 case -6:
378 if (_actor[0].act[2].state != 44) {
379 smlayer_setActorFacing(0, 2, 11, 180);
380 _actor[0].act[2].state = 44;
381 }
382 break;
383 case -5:
384 if (_actor[0].act[2].state != 43) {
385 smlayer_setActorFacing(0, 2, 10, 180);
386 _actor[0].act[2].state = 43;
387 }
388 break;
389 case -4:
390 if (_actor[0].act[2].state != 42) {
391 smlayer_setActorFacing(0, 2, 9, 180);
392 _actor[0].act[2].state = 42;
393 }
394 break;
395 case -3:
396 if (_actor[0].act[2].state != 41) {
397 smlayer_setActorFacing(0, 2, 8, 180);
398 _actor[0].act[2].state = 41;
399 }
400 break;
401 case -2:
402 if (_actor[0].act[2].state != 40) {
403 smlayer_setActorFacing(0, 2, 7, 180);
404 _actor[0].act[2].state = 40;
405 }
406 break;
407 case -1:
408 if (_actor[0].act[2].state != 39) {
409 smlayer_setActorFacing(0, 2, 6, 180);
410 _actor[0].act[2].state = 39;
411 }
412 break;
413 case 0:
414 if (_actor[0].act[2].state != 1) {
415 smlayer_setActorFacing(0, 2, 22, 180);
416 _actor[0].act[2].state = 1;
417 }
418 break;
419 case 1:
420 if (_actor[0].act[2].state != 55) {
421 smlayer_setActorFacing(0, 2, 14, 180);
422 _actor[0].act[2].state = 55;
423 }
424 break;
425 case 2:
426 if (_actor[0].act[2].state != 56) {
427 smlayer_setActorFacing(0, 2, 15, 180);
428 _actor[0].act[2].state = 56;
429 }
430 break;
431 case 3:
432 if (_actor[0].act[2].state != 57) {
433 smlayer_setActorFacing(0, 2, 16, 180);
434 _actor[0].act[2].state = 57;
435 }
436 break;
437 case 4:
438 if (_actor[0].act[2].state != 58) {
439 smlayer_setActorFacing(0, 2, 17, 180);
440 _actor[0].act[2].state = 58;
441 }
442 break;
443 case 5:
444 if (_actor[0].act[2].state != 59) {
445 smlayer_setActorFacing(0, 2, 18, 180);
446 _actor[0].act[2].state = 59;
447 }
448 break;
449 case 6:
450 if (_actor[0].act[2].state != 60) {
451 smlayer_setActorFacing(0, 2, 19, 180);
452 _actor[0].act[2].state = 60;
453 }
454 break;
455 case 7:
456 if (_actor[0].act[2].state != 50) {
457 smlayer_setActorFacing(0, 2, 21, 180);
458 _actor[0].act[2].state = 50;
459 }
460 break;
461 default:
462 break;
463 }
464
465 if (!_actor[0].act[2].room)
466 return;
467
468 smlayer_putActor(0, 2, _actor[0].x + _actor[0].x1, _actor[0].y + _actor[0].y1,
469 _smlayer_room2);
470 }
471
weaponBenIsEffective()472 bool Insane::weaponBenIsEffective() {
473 if ((_actor[1].x - _actor[0].x > weaponMaxRange(0)) ||
474 (_actor[1].x - _actor[0].x < weaponMinRange(0)) ||
475 !_actor[1].kicking)
476 return false;
477
478 return true;
479 }
480
calcBenDamage(bool arg_0,bool arg_4)481 int32 Insane::calcBenDamage(bool arg_0, bool arg_4) {
482 if ((_actor[1].x - _actor[0].x > weaponMaxRange(1)) ||
483 (_actor[1].x - _actor[0].x < weaponMinRange(1)))
484 return 0;
485
486 if (_actor[0].field_44 && arg_4)
487 return 1000;
488
489 if (!actor1StateFlags(_actor[0].act[2].state))
490 return 0;
491
492 if (arg_0) {
493 ouchSoundBen();
494 _actor[0].damage += weaponDamage(1); // PATCH
495 }
496
497 return 1;
498 }
499
500 // Ben
actor02Reaction(int32 buttons)501 void Insane::actor02Reaction(int32 buttons) {
502 int32 tmp, tmp2;
503
504 switch (_actor[0].act[2].state) {
505 case 1:
506 smlayer_setActorLayer(0, 2, 5);
507 _actor[0].weaponClass = 2;
508 _actor[0].kicking = false;
509
510 switch (_actor[0].tilt) {
511 case -3:
512 if (_actor[0].act[2].animTilt != -3) {
513 smlayer_setActorFacing(0, 2, 6, 180);
514 _actor[0].act[2].animTilt = -3;
515 }
516 break;
517 case -2:
518 if (_actor[0].field_8 == 48)
519 smlayer_setActorFacing(0, 2, 7, 180);
520 _actor[0].act[2].animTilt = -2;
521 break;
522 case -1:
523 if (_actor[0].field_8 == 46)
524 smlayer_setActorFacing(0, 2, 8, 180);
525 _actor[0].act[2].animTilt = -1;
526 break;
527 case 0:
528 if (_actor[0].act[2].animTilt) {
529 smlayer_setActorFacing(0, 2, 9, 180);
530 _actor[0].act[2].animTilt = 0;
531 }
532 break;
533 case 1:
534 if (_actor[0].field_8 == 49)
535 smlayer_setActorFacing(0, 2, 10, 180);
536 _actor[0].act[2].animTilt = 1;
537 break;
538 case 2:
539 if (_actor[0].field_8 == 51)
540 smlayer_setActorFacing(0, 2, 11, 180);
541 _actor[0].act[2].animTilt = 2;
542 break;
543 case 3:
544 if (_actor[0].act[2].animTilt != 3) {
545 smlayer_setActorFacing(0, 2, 12, 180);
546 _actor[0].act[2].animTilt = 3;
547 }
548 break;
549 default:
550 break;
551 }
552 _actor[0].act[2].tilt = 0;
553 break;
554 case 2:
555 smlayer_setActorLayer(0, 2, 4);
556 smlayer_setActorFacing(0, 2, 17, 180);
557 _actor[0].kicking = true;
558 _actor[0].weaponClass = 1;
559 _actor[0].act[2].state = 3;
560 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
561 if (!((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)))
562 smlayer_startSfx(63);
563 break;
564 case 3:
565 smlayer_setActorLayer(0, 2, 4);
566 _actor[0].weaponClass = 1;
567 if (_actor[0].act[2].frame == 2) {
568 if (_currEnemy != EN_CAVEFISH) {
569 tmp = calcEnemyDamage(1, 1);
570 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)) {
571 if (tmp == 1)
572 smlayer_startSfx(50);
573 } else {
574 if (tmp == 1)
575 smlayer_startSfx(60);
576 if (tmp == 1000)
577 smlayer_startSfx(62);
578 }
579 } else {
580 if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
581 (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
582 !_actor[0].field_54)
583 prepareScenePropScene(1, 0, 0);
584 }
585 }
586 if (_actor[0].act[2].frame >= 4) {
587 smlayer_setActorFacing(0, 2, 20, 180);
588 _actor[0].act[2].state = 4;
589 }
590
591 _actor[0].kicking = true;
592 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
593 break;
594 case 4:
595 smlayer_setActorLayer(0, 2, 5);
596 _actor[0].weaponClass = 1;
597 _actor[0].kicking = false;
598 if (_actor[0].act[2].frame >= 2) {
599 smlayer_setActorFacing(0, 2, 9, 180);
600 _actor[0].act[2].state = 1;
601 _actor[0].act[2].animTilt = -1000;
602 _actor[0].weaponClass = 2;
603 }
604 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
605 break;
606 case 5:
607 smlayer_setActorLayer(0, 2, 5);
608 break;
609 case 6:
610 smlayer_setActorLayer(0, 2, 4);
611 _actor[0].weaponClass = 2;
612 _actor[0].newFacingFlag = 1;
613 _actor[0].kicking = false;
614 smlayer_setActorCostume(0, 2, readArray(22));
615 smlayer_setActorFacing(0, 2, 19, 180);
616 _actor[0].act[2].state = 7;
617 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
618 smlayer_startSfx(66);
619 break;
620 case 7:
621 smlayer_setActorLayer(0, 2, 4);
622 _actor[0].weaponClass = 2;
623 _actor[0].newFacingFlag = 1;
624 _actor[0].kicking = false;
625 if (_actor[0].act[2].frame >= 1) {
626 smlayer_setActorFacing(0, 2, 20, 180);
627 _actor[0].act[2].state = 8;
628 }
629 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
630 break;
631 case 8:
632 smlayer_setActorLayer(0, 2, 4);
633 _actor[0].weaponClass = 2;
634 _actor[0].newFacingFlag = 1;
635 _actor[0].kicking = false;
636 if ((_actor[0].act[2].frame == 3) && (calcEnemyDamage(0, 0) == 1)) {
637 _actor[1].damage += weaponDamage(0);
638 smlayer_startSfx(64);
639 _actor[1].cursorX = 320;
640 }
641 if (_actor[0].act[2].frame >= 5) {
642 smlayer_setActorFacing(0, 2, 21, 180);
643 _actor[0].act[2].state = 9;
644 }
645 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
646 break;
647 case 9:
648 smlayer_setActorLayer(0, 2, 5);
649 _actor[0].weaponClass = 2;
650 _actor[0].newFacingFlag = 1;
651 _actor[0].kicking = false;
652 if (_actor[0].act[2].frame >= 3) {
653 smlayer_setActorCostume(0, 2, readArray(12));
654 _actor[0].newFacingFlag = 2;
655 _actor[0].act[2].state = 1;
656 }
657 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
658 break;
659 case 10:
660 smlayer_setActorLayer(0, 2, 4);
661 _actor[0].weaponClass = 1;
662 _actor[0].kicking = true;
663 smlayer_setActorFacing(0, 2, 19, 180);
664 _actor[0].act[2].state = 11;
665 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
666 smlayer_startSfx(75);
667 break;
668 case 11:
669 smlayer_setActorLayer(0, 2, 4);
670 _actor[0].weaponClass = 1;
671 _actor[0].kicking = true;
672 if (_actor[0].act[2].frame >= 2) {
673 if (_currEnemy == EN_VULTM2) {
674 if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
675 (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
676 calcEnemyDamage(0, 0)) {
677 smlayer_setActorFacing(0, 2, 20, 180);
678 _actor[0].act[2].state = 97;
679 _actor[0].act[2].room = 0;
680 _actor[0].act[1].room = 0;
681 _actor[0].act[0].room = 0;
682 smlayer_setActorLayer(0, 2, 25);
683 smlayer_setActorCostume(1, 2, readArray(45));
684 smlayer_setActorFacing(1, 2, 6, 180);
685 smlayer_startSfx(101);
686 _actor[1].act[2].state = 97;
687 _actor[1].lost = true;
688 _actor[1].act[2].room = 1;
689 _actor[1].act[1].room = 0;
690 _actor[1].act[0].room = 0;
691 } else {
692 smlayer_setActorFacing(0, 2, 20, 180);
693 _actor[0].act[2].state = 12;
694 }
695 } else {
696 smlayer_setActorFacing(0, 2, 20, 180);
697 _actor[0].act[2].state = 12;
698 }
699 }
700 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
701 break;
702 case 12:
703 smlayer_setActorLayer(0, 2, 4);
704 _actor[0].weaponClass = 1;
705 _actor[0].kicking = true;
706 if (_actor[0].act[2].frame >= 1) {
707 if (_currEnemy != EN_CAVEFISH) {
708 switch (_actor[1].weapon) {
709 case INV_CHAIN:
710 case INV_CHAINSAW:
711 case INV_MACE:
712 case INV_2X4:
713 case INV_DUST:
714 tmp = calcEnemyDamage(1, 1);
715 if (tmp == 1)
716 smlayer_startSfx(73);
717 if (tmp == 1000)
718 smlayer_startSfx(74);
719 break;
720 default:
721 if (calcEnemyDamage(1, 0) == 1)
722 smlayer_startSfx(73);
723 break;
724 }
725 } else {
726 if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
727 (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
728 !_actor[0].field_54)
729 prepareScenePropScene(1, 0, 0);
730
731 }
732 smlayer_setActorFacing(0, 2, 21, 180);
733 _actor[0].act[2].state = 13;
734 }
735 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
736 break;
737 case 13:
738 smlayer_setActorLayer(0, 2, 5);
739 _actor[0].weaponClass = 1;
740 _actor[0].kicking = false;
741 if (_actor[0].act[2].frame >= 3) {
742 smlayer_setActorFacing(0, 2, 25, 180);
743 _actor[0].act[2].state = 63;
744 }
745 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
746 break;
747 case 14:
748 smlayer_setActorLayer(0, 2, 8);
749 _actor[0].weaponClass = 1;
750 _actor[0].kicking = true;
751 smlayer_setActorFacing(0, 2, 19, 180);
752 _actor[0].act[2].state = 15;
753 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
754 smlayer_startSfx(78);
755 break;
756 case 15:
757 smlayer_setActorLayer(0, 2, 8);
758 _actor[0].weaponClass = 1;
759 _actor[0].kicking = true;
760 if (_actor[0].act[2].frame >= 2) {
761 switch (_actor[1].weapon) {
762 case INV_CHAIN:
763 case INV_CHAINSAW:
764 if (weaponBenIsEffective()) {
765 smlayer_setActorFacing(0, 2, 22, 180);
766 _actor[0].act[2].state = 81;
767 } else {
768 smlayer_setActorFacing(0, 2, 20, 180);
769 _actor[0].act[2].state = 16;
770 }
771 break;
772 case INV_MACE:
773 if (!_actor[1].kicking || _actor[1].field_44)
774 if (actor1StateFlags(_actor[1].act[2].state)) {
775 smlayer_setActorFacing(0, 2, 20, 180);
776 _actor[0].act[2].state = 106;
777 break;
778 }
779 break;
780 default:
781 smlayer_setActorFacing(0, 2, 20, 180);
782 _actor[0].act[2].state = 16;
783 break;
784 }
785 }
786 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
787 break;
788 case 16:
789 smlayer_setActorLayer(0, 2, 8);
790 _actor[0].weaponClass = 1;
791 _actor[0].kicking = true;
792 if (_actor[0].act[2].frame >= 1) {
793 switch (_actor[1].weapon) {
794 case INV_CHAIN:
795 case INV_CHAINSAW:
796 tmp = calcEnemyDamage(1, 1);
797 if (tmp == 1)
798 smlayer_startSfx(76);
799 if (tmp == 1000)
800 smlayer_startSfx(77);
801 break;
802 case INV_BOOT:
803 calcEnemyDamage(0, 1);
804 break;
805 case INV_DUST:
806 if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
807 (_actor[1].x - _actor[0].x >= weaponMinRange(0))) {
808 smlayer_startSfx(76);
809 _actor[1].damage += weaponDamage(0);
810 }
811 break;
812 default:
813 if (calcEnemyDamage(1, 0))
814 smlayer_startSfx(76);
815 break;
816 }
817 smlayer_setActorFacing(0, 2, 21, 180);
818 _actor[0].act[2].state = 17;
819 }
820 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
821 break;
822 case 17:
823 smlayer_setActorLayer(0, 2, 5);
824 _actor[0].weaponClass = 1;
825 _actor[0].kicking = false;
826 if (_actor[0].act[2].frame >= 2) {
827 smlayer_setActorFacing(0, 2, 26, 180);
828 _actor[0].act[2].state = 64;
829 smlayer_stopSound(76);
830 }
831 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
832 break;
833 case 18:
834 smlayer_setActorLayer(0, 2, 4);
835 _actor[0].weaponClass = 1;
836 _actor[0].kicking = true;
837 smlayer_setActorFacing(0, 2, 19, 180);
838 _actor[0].act[2].state = 19;
839 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
840 smlayer_startSfx(69);
841 break;
842 case 19:
843 smlayer_setActorLayer(0, 2, 4);
844 _actor[0].weaponClass = 1;
845 _actor[0].kicking = true;
846 if (_actor[0].act[2].frame >= 1) {
847 switch (_actor[1].weapon) {
848 case INV_CHAIN:
849 if (_actor[1].kicking) {
850 _actor[1].act[2].state = 108;
851 _actor[0].act[2].state = 110;
852 } else {
853 smlayer_setActorFacing(0, 2, 20, 180);
854 _actor[0].act[2].state = 20;
855 }
856 break;
857 case INV_CHAINSAW:
858 if (_actor[1].kicking || _actor[1].field_44)
859 _actor[0].act[2].state = 106;
860 else {
861 smlayer_setActorFacing(0, 2, 20, 180);
862 _actor[0].act[2].state = 20;
863 }
864 break;
865 case INV_MACE:
866 case INV_2X4:
867 if (weaponBenIsEffective()) {
868 smlayer_setActorFacing(0, 2, 22, 180);
869 _actor[0].act[2].state = 77;
870 break;
871 }
872 // fall through
873 default:
874 smlayer_setActorFacing(0, 2, 20, 180);
875 _actor[0].act[2].state = 20;
876 break;
877 }
878 }
879
880 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
881 break;
882 case 20:
883 smlayer_setActorLayer(0, 2, 4);
884 _actor[0].weaponClass = 1;
885 _actor[0].kicking = true;
886 if (_actor[0].act[2].frame >= 1) {
887 if (_currEnemy != EN_CAVEFISH) {
888 switch (_actor[1].weapon) {
889 case INV_CHAINSAW:
890 case INV_MACE:
891 case INV_2X4:
892 case INV_BOOT:
893 tmp = calcEnemyDamage(1, 1);
894 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)) {
895 if (tmp == 1)
896 smlayer_startSfx(52);
897 if (tmp == 1000)
898 smlayer_startSfx(56);
899 } else {
900 if (tmp == 1)
901 smlayer_startSfx(67);
902 if (tmp == 1000)
903 smlayer_startSfx(68);
904 }
905 break;
906 default:
907 if (calcEnemyDamage(1, 0))
908 smlayer_startSfx(67);
909 break;
910 }
911 } else {
912 if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
913 (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
914 !_actor[0].field_54)
915 prepareScenePropScene(1, 0, 0);
916 }
917 smlayer_setActorFacing(0, 2, 21, 180);
918 _actor[0].act[2].state = 21;
919 }
920 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
921 break;
922 case 21:
923 smlayer_setActorLayer(0, 2, 5);
924 _actor[0].weaponClass = 1;
925 _actor[0].kicking = false;
926 if (_actor[0].act[2].frame >= 6) {
927 smlayer_setActorFacing(0, 2, 25, 180);
928 _actor[0].act[2].state = 65;
929 }
930 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
931 break;
932 case 22:
933 smlayer_setActorLayer(0, 2, 6);
934 _actor[0].weaponClass = 0;
935 _actor[0].kicking = true;
936 smlayer_setActorFacing(0, 2, 19, 180);
937 _actor[0].act[2].state = 23;
938 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
939 smlayer_startSfx(81);
940 break;
941 case 23:
942 smlayer_setActorLayer(0, 2, 6);
943 _actor[0].weaponClass = 0;
944 _actor[0].kicking = true;
945 if (_actor[0].act[2].frame >= 4) {
946 switch (_actor[1].weapon) {
947 case INV_CHAIN:
948 case INV_CHAINSAW:
949 case INV_MACE:
950 case INV_2X4:
951 case INV_BOOT:
952 case INV_DUST:
953 if (weaponBenIsEffective()) {
954 smlayer_setActorFacing(0, 2, 22, 180);
955 _actor[0].act[2].state = 83;
956 break;
957 }
958 // fall through
959 default:
960 smlayer_setActorFacing(0, 2, 20, 180);
961 _actor[0].act[2].state = 24;
962 break;
963 }
964 }
965 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
966 break;
967 case 24:
968 smlayer_setActorLayer(0, 2, 4);
969 _actor[0].weaponClass = 0;
970 _actor[0].kicking = true;
971 if (_actor[0].act[2].frame >= 1) {
972 switch (_actor[1].weapon) {
973 case INV_CHAIN:
974 case INV_CHAINSAW:
975 case INV_MACE:
976 case INV_2X4:
977 case INV_BOOT:
978 case INV_DUST:
979 tmp = calcEnemyDamage(1, 1);
980 if (tmp == 1) {
981 if (_currEnemy == EN_CAVEFISH) {
982 _actor[1].lost = true;
983 _actor[1].act[2].state = 102;
984 _actor[1].damage = _actor[1].maxdamage + 10;
985 }
986 smlayer_startSfx(79);
987 }
988 if (tmp == 1000)
989 smlayer_startSfx(80);
990 break;
991 default:
992 if (!calcEnemyDamage(1, 0))
993 smlayer_startSfx(79);
994 break;
995 }
996 smlayer_setActorFacing(0, 2, 21, 180);
997 _actor[0].act[2].state = 25;
998 }
999 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1000 break;
1001 case 25:
1002 smlayer_setActorLayer(0, 2, 5);
1003 _actor[0].weaponClass = 0;
1004 _actor[0].kicking = false;
1005 if (_actor[0].act[2].frame >= 6) {
1006 smlayer_setActorFacing(0, 2, 25, 180);
1007 _actor[0].act[2].state = 66;
1008 _actor[0].weaponClass = 1;
1009 }
1010 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1011 break;
1012 case 26:
1013 smlayer_setActorLayer(0, 2, 4);
1014 _actor[0].weaponClass = 1;
1015 _actor[0].kicking = true;
1016 smlayer_setActorFacing(0, 2, 19, 180);
1017 _actor[0].act[2].state = 27;
1018 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1019 if (!((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)))
1020 smlayer_startSfx(72);
1021 break;
1022 case 27:
1023 smlayer_setActorLayer(0, 2, 4);
1024 _actor[0].weaponClass = 1;
1025 _actor[0].kicking = true;
1026 if (_actor[0].act[2].frame >= 1) {
1027 switch (_actor[1].weapon) {
1028 case INV_CHAIN:
1029 case INV_CHAINSAW:
1030 case INV_MACE:
1031 case INV_2X4:
1032 case INV_BOOT:
1033 case INV_DUST:
1034 if (weaponBenIsEffective()) {
1035 smlayer_setActorFacing(0, 2, 22, 180);
1036 _actor[0].act[2].state = 75;
1037 break;
1038 }
1039 // fall through
1040 default:
1041 smlayer_setActorFacing(0, 2, 20, 180);
1042 _actor[0].act[2].state = 28;
1043 break;
1044 }
1045 }
1046 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1047 break;
1048 case 28:
1049 smlayer_setActorLayer(0, 2, 4);
1050 _actor[0].weaponClass = 1;
1051 _actor[0].kicking = true;
1052 if (_actor[0].act[2].frame >= 3) {
1053 if (_currEnemy != EN_CAVEFISH) {
1054 switch (_actor[1].weapon) {
1055 case INV_CHAIN:
1056 case INV_CHAINSAW:
1057 case INV_MACE:
1058 case INV_2X4:
1059 case INV_BOOT:
1060 case INV_DUST:
1061 tmp = calcEnemyDamage(1, 1);
1062 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)) {
1063 if (tmp == 1)
1064 smlayer_startSfx(58);
1065 if (tmp == 1000)
1066 smlayer_startSfx(56);
1067 } else {
1068 if (tmp == 1)
1069 smlayer_startSfx(70);
1070 if (tmp == 1000)
1071 smlayer_startSfx(71);
1072 }
1073 break;
1074 case INV_HAND:
1075 if (!calcEnemyDamage(1, 0))
1076 smlayer_startSfx(70);
1077 break;
1078 default:
1079 break;
1080 }
1081 } else {
1082 if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
1083 (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
1084 !_actor[0].field_54)
1085 prepareScenePropScene(1, 0, 0);
1086 }
1087 smlayer_setActorFacing(0, 2, 21, 180);
1088 _actor[0].act[2].state = 29;
1089 }
1090 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1091 break;
1092 case 29:
1093 smlayer_setActorLayer(0, 2, 5);
1094 _actor[0].weaponClass = 1;
1095 _actor[0].kicking = false;
1096 if (_actor[0].act[2].frame >= 6) {
1097 smlayer_setActorFacing(0, 2, 25, 180);
1098 _actor[0].act[2].state = 62;
1099 }
1100 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1101 break;
1102 case 30:
1103 smlayer_setActorLayer(0, 2, 4);
1104 _actor[0].weaponClass = 1;
1105 smlayer_setActorCostume(0, 2, readArray(21));
1106 smlayer_setActorFacing(0, 2, 18, 180);
1107 _actor[0].act[2].state = 31;
1108 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1109 smlayer_startSfx(84);
1110 break;
1111 case 31:
1112 smlayer_setActorLayer(0, 2, 4);
1113 _actor[0].weaponClass = 1;
1114 if (_actor[0].act[2].frame >= 6) {
1115 smlayer_setActorFacing(0, 2, 20, 180);
1116 _actor[0].act[2].state = 32;
1117 }
1118 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1119 break;
1120 case 32:
1121 smlayer_setActorLayer(0, 2, 4);
1122 _actor[0].weaponClass = 1;
1123 if (_actor[0].act[2].frame >= 5) {
1124 switch (_currEnemy) {
1125 case EN_ROTT3:
1126 if (calcEnemyDamage(0, 0))
1127 _actor[1].act[2].state = 115;
1128 break;
1129 case EN_VULTF2:
1130 if (calcEnemyDamage(0, 0))
1131 _actor[1].act[2].state = 113;
1132 break;
1133 default:
1134 tmp = calcEnemyDamage(1, 1);
1135 if (tmp == 1)
1136 smlayer_startSfx(82);
1137 if (tmp == 1000)
1138 smlayer_startSfx(83);
1139 break;
1140 }
1141 smlayer_setActorFacing(0, 2, 21, 180);
1142 _actor[0].act[2].state = 33;
1143 }
1144 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1145 break;
1146 case 33:
1147 smlayer_setActorLayer(0, 2, 5);
1148 _actor[0].weaponClass = 1;
1149 _actor[0].kicking = false;
1150 if (_actor[0].act[2].frame >= 5) {
1151 smlayer_setActorCostume(0, 2, readArray(12));
1152 _actor[0].act[2].state = 1;
1153 }
1154 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1155 break;
1156 case 34:
1157 smlayer_setActorLayer(0, 2, 5);
1158 _actor[0].kicking = false;
1159
1160 if (!smlayer_actorNeedRedraw(0, 2)) {
1161 setBenState();
1162 _actor[0].act[2].tilt = 0;
1163 // for some reason there is no break at this
1164 // place, so tilt gets overridden on next line
1165 }
1166 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1167 break;
1168 case 35:
1169 smlayer_setActorLayer(0, 2, 5);
1170 _actor[0].kicking = false;
1171
1172 if (!smlayer_actorNeedRedraw(0, 2)) {
1173 switchBenWeapon();
1174 _actor[0].act[2].state = 1;
1175 }
1176 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1177 break;
1178 case 36:
1179 _actor[0].lost = true;
1180 smlayer_setActorLayer(0, 2, 5);
1181 _actor[0].kicking = false;
1182 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
1183 smlayer_setActorCostume(0, 2, readArray(17));
1184 else
1185 smlayer_setActorCostume(0, 2, readArray(18));
1186 smlayer_setActorFacing(0, 2, 6, 180);
1187 smlayer_startSfx(96);
1188 switch (_currEnemy) {
1189 case EN_ROTT1:
1190 prepareScenePropScene(33, 0, 0);
1191 break;
1192 case EN_ROTT2:
1193 tmp = _vm->_rnd.getRandomNumber(4);
1194 if (!tmp)
1195 prepareScenePropScene(35, 0, 0);
1196 if (tmp == 3)
1197 prepareScenePropScene(36, 0, 0);
1198 break;
1199 case EN_VULTF1:
1200 prepareScenePropScene(6, 0, 0);
1201 break;
1202 case EN_VULTM1:
1203 tmp = _vm->_rnd.getRandomNumber(4);
1204 if (!tmp)
1205 prepareScenePropScene(40, 0, 0);
1206 if (tmp == 3)
1207 prepareScenePropScene(41, 0, 0);
1208 break;
1209 default:
1210 break;
1211 }
1212 _actor[0].act[2].state = 37;
1213 break;
1214 case 37:
1215 smlayer_setActorLayer(0, 2, 25);
1216 _actor[0].cursorX = 0;
1217 _actor[0].kicking = false;
1218 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)) {
1219 if (_actor[0].act[2].frame >= 28) {
1220 queueSceneSwitch(9, 0, "bencrshe.san", 64, 0, 0, 0);
1221 _actor[0].act[2].state = 38;
1222 }
1223 } else if (_actor[0].act[2].frame >= 18 ||
1224 (_actor[0].x < 50 && _actor[0].act[2].frame >= 10) ||
1225 (_actor[0].x > 270 && _actor[0].act[2].frame >= 10)) {
1226 if (_currSceneId == 21) {
1227 queueSceneSwitch(23, 0, "benflip.san", 64, 0, 0, 0);
1228 } else {
1229 switch (_currEnemy) {
1230 case EN_ROTT1:
1231 case EN_ROTT2:
1232 case EN_ROTT3:
1233 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
1234 queueSceneSwitch(9, 0, "bencrshe.san", 64, 0, 0, 0);
1235 else
1236 queueSceneSwitch(9, 0, "wr2_benr.san", 64, 0, 0, 0);
1237 break;
1238 case EN_VULTF1:
1239 case EN_VULTM1:
1240 case EN_VULTF2:
1241 case EN_VULTM2:
1242 queueSceneSwitch(9, 0, "wr2_benv.san", 64, 0, 0, 0);
1243 break;
1244 case EN_CAVEFISH:
1245 queueSceneSwitch(9, 0, "wr2_benc.san", 64, 0, 0, 0);
1246 break;
1247 default:
1248 queueSceneSwitch(9, 0, "wr2_ben.san", 64, 0, 0, 0);
1249 break;
1250 }
1251 }
1252 _actor[0].act[2].state = 38;
1253 }
1254 break;
1255 case 38:
1256 if (_actor[0].act[2].frame >= 36) {
1257 _actor[0].act[2].frame = 0;
1258 if (_currSceneId == 21) {
1259 queueSceneSwitch(23, 0, "benflip.san", 64, 0, 0, 0);
1260 } else {
1261 switch (_currEnemy) {
1262 case EN_ROTT1:
1263 case EN_ROTT2:
1264 case EN_ROTT3:
1265 queueSceneSwitch(9, 0, "wr2_benr.san", 64, 0, 0, 0);
1266 break;
1267 case EN_VULTF1:
1268 case EN_VULTM1:
1269 case EN_VULTF2:
1270 case EN_VULTM2:
1271 queueSceneSwitch(9, 0, "wr2_benv.san", 64, 0, 0, 0);
1272 break;
1273 case EN_CAVEFISH:
1274 queueSceneSwitch(9, 0, "wr2_benc.san", 64, 0, 0, 0);
1275 break;
1276 default:
1277 queueSceneSwitch(9, 0, "wr2_ben.san", 64, 0, 0, 0);
1278 break;
1279 }
1280 }
1281 _actor[0].act[2].state = 38;
1282 }
1283 break;
1284 case 63:
1285 smlayer_setActorLayer(0, 2, 5);
1286 if (_actor[0].act[2].animTilt) {
1287 smlayer_setActorFacing(0, 2, 25, 180);
1288 _actor[0].act[2].animTilt = 0;
1289 }
1290 _actor[0].weaponClass = 1;
1291 _actor[0].kicking = false;
1292 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1293 break;
1294 case 64:
1295 smlayer_setActorLayer(0, 2, 5);
1296 if (_actor[0].act[2].animTilt) {
1297 smlayer_setActorFacing(0, 2, 26, 180);
1298 _actor[0].act[2].animTilt = 0;
1299 }
1300 _actor[0].weaponClass = 1;
1301 _actor[0].kicking = false;
1302 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1303 break;
1304 case 65:
1305 smlayer_setActorLayer(0, 2, 5);
1306 if (_actor[0].act[2].animTilt) {
1307 smlayer_setActorFacing(0, 2, 25, 180);
1308 _actor[0].act[2].animTilt = 0;
1309 }
1310 _actor[0].weaponClass = 1;
1311 _actor[0].kicking = false;
1312 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1313 break;
1314 case 66:
1315 smlayer_setActorLayer(0, 2, 5);
1316 if (_actor[0].act[2].animTilt) {
1317 smlayer_setActorFacing(0, 2, 25, 180);
1318 _actor[0].act[2].animTilt = 0;
1319 }
1320 _actor[0].weaponClass = 1;
1321 _actor[0].kicking = false;
1322 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1323 break;
1324 case 62:
1325 smlayer_setActorLayer(0, 2, 5);
1326 if (_actor[0].act[2].animTilt) {
1327 smlayer_setActorFacing(0, 2, 25, 180);
1328 _actor[0].act[2].animTilt = 0;
1329 }
1330 _actor[0].weaponClass = 1;
1331 _actor[0].kicking = false;
1332 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1333 break;
1334 case 73:
1335 smlayer_setActorLayer(0, 2, 6);
1336 _actor[0].weaponClass = 1;
1337 _actor[0].kicking = false;
1338 _actor[0].field_44 = true;
1339 if (_actor[0].act[2].frame >= 2 && !_kickBenProgress) {
1340 smlayer_setActorFacing(0, 2, 19, 180);
1341 _actor[0].act[2].state = 74;
1342 }
1343 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1344 break;
1345 case 74:
1346 smlayer_setActorLayer(0, 2, 6);
1347 _actor[0].weaponClass = 1;
1348 _actor[0].kicking = false;
1349 _actor[0].field_44 = false;
1350 if (_actor[0].act[2].frame >= 2) {
1351 smlayer_setActorFacing(0, 2, 9, 180);
1352 _actor[0].act[2].state = 1;
1353 _actor[0].weaponClass = 2;
1354 }
1355 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1356 break;
1357 case 75:
1358 smlayer_setActorLayer(0, 2, 6);
1359 _actor[0].weaponClass = 1;
1360 _actor[0].kicking = false;
1361 _actor[0].field_44 = true;
1362 if (_actor[0].act[2].frame >= 4 && !_kickBenProgress) {
1363 smlayer_setActorFacing(0, 2, 23, 180);
1364 _actor[0].act[2].state = 76;
1365 }
1366 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1367 break;
1368 case 76:
1369 smlayer_setActorLayer(0, 2, 6);
1370 _actor[0].weaponClass = 1;
1371 _actor[0].kicking = false;
1372 _actor[0].field_44 = false;
1373 if (_actor[0].act[2].frame >= 4) {
1374 smlayer_setActorFacing(0, 2, 25, 180);
1375 _actor[0].act[2].state = 62;
1376 }
1377 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1378 break;
1379 case 77:
1380 smlayer_setActorLayer(0, 2, 6);
1381 _actor[0].weaponClass = 1;
1382 _actor[0].kicking = false;
1383 _actor[0].field_44 = true;
1384 if (_actor[0].act[2].frame >= 2) {
1385 smlayer_setActorFacing(0, 2, 23, 180);
1386 _actor[0].act[2].state = 78;
1387 }
1388 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1389 break;
1390 case 78:
1391 smlayer_setActorLayer(0, 2, 6);
1392 _actor[0].weaponClass = 1;
1393 _actor[0].kicking = false;
1394 _actor[0].field_44 = false;
1395 if (_actor[0].act[2].frame >= 5) {
1396 smlayer_setActorFacing(0, 2, 25, 180);
1397 _actor[0].act[2].state = 65;
1398 }
1399 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1400 break;
1401 case 79:
1402 smlayer_setActorLayer(0, 2, 6);
1403 _actor[0].weaponClass = 1;
1404 _actor[0].kicking = false;
1405 _actor[0].field_44 = true;
1406 if (_actor[0].act[2].frame >= 2) {
1407 smlayer_setActorFacing(0, 2, 23, 180);
1408 _actor[0].act[2].state = 80;
1409 }
1410 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1411 break;
1412 case 80:
1413 smlayer_setActorLayer(0, 2, 6);
1414 _actor[0].weaponClass = 1;
1415 _actor[0].kicking = false;
1416 _actor[0].field_44 = false;
1417 if (_actor[0].act[2].frame >= 6) {
1418 smlayer_setActorFacing(0, 2, 25, 180);
1419 _actor[0].act[2].state = 63;
1420 }
1421 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1422 break;
1423 case 81:
1424 smlayer_setActorLayer(0, 2, 6);
1425 _actor[0].weaponClass = 1;
1426 _actor[0].kicking = false;
1427 _actor[0].field_44 = true;
1428 if (_actor[0].act[2].frame >= 2 && !_kickBenProgress) {
1429 smlayer_setActorFacing(0, 2, 23, 180);
1430 _actor[0].act[2].state = 82;
1431 }
1432 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1433 break;
1434 case 82:
1435 smlayer_setActorLayer(0, 2, 6);
1436 _actor[0].weaponClass = 1;
1437 _actor[0].kicking = false;
1438 _actor[0].field_44 = false;
1439 if (_actor[0].act[2].frame >= 3) {
1440 smlayer_setActorFacing(0, 2, 26, 180);
1441 _actor[0].act[2].state = 64;
1442 }
1443 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1444 break;
1445 case 83:
1446 smlayer_setActorLayer(0, 2, 6);
1447 _actor[0].weaponClass = 0;
1448 _actor[0].kicking = false;
1449 _actor[0].field_44 = true;
1450 if (_actor[0].act[2].frame >= 2 && !_kickBenProgress) {
1451 smlayer_setActorFacing(0, 2, 23, 180);
1452 _actor[0].act[2].state = 84;
1453 }
1454 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1455 break;
1456 case 84:
1457 smlayer_setActorLayer(0, 2, 6);
1458 _actor[0].weaponClass = 0;
1459 _actor[0].kicking = false;
1460 _actor[0].field_44 = false;
1461 if (_actor[0].act[2].frame >= 5) {
1462 smlayer_setActorFacing(0, 2, 25, 180);
1463 _actor[0].act[2].state = 66;
1464 }
1465 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1466 break;
1467 case 97:
1468 smlayer_setActorLayer(0, 2, 5);
1469 _actor[0].weaponClass = 1;
1470 _actor[0].kicking = true;
1471 if (_actor[0].act[2].frame >= 5) {
1472 _actor[0].act[2].room = 1;
1473 _actor[0].act[1].room = 1;
1474 _actor[0].act[0].room = 1;
1475 smlayer_setActorFacing(0, 2, 21, 180);
1476 _actor[0].act[2].state = 13;
1477 _actor[0].x = _actor[1].x - 116;
1478 }
1479 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1480 break;
1481 case 104:
1482 smlayer_setActorLayer(0, 2, 5);
1483 _actor[0].weaponClass = 1;
1484 _actor[0].kicking = false;
1485 smlayer_setActorFacing(0, 2, 28, 180);
1486 _actor[0].act[2].state = 105;
1487 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1488 break;
1489 case 105:
1490 smlayer_setActorLayer(0, 2, 5);
1491 _actor[0].weaponClass = 1;
1492 _actor[0].kicking = false;
1493 if (_actor[0].act[2].frame >= 5) {
1494 _actor[0].act[2].state = 1;
1495 _actor[0].inventory[INV_MACE] = 0;
1496 smlayer_startVoice(318);
1497 switchBenWeapon();
1498 }
1499 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1500 break;
1501 case 106:
1502 smlayer_setActorLayer(0, 2, 5);
1503 _actor[0].weaponClass = 1;
1504 _actor[0].kicking = false;
1505 smlayer_setActorFacing(0, 2, 29, 180);
1506 _actor[0].act[2].state = 107;
1507 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1508 break;
1509 case 107:
1510 smlayer_setActorLayer(0, 2, 5);
1511 _actor[0].weaponClass = 1;
1512 _actor[0].kicking = false;
1513 if (_actor[0].act[2].frame >= 9) {
1514 _actor[0].act[2].state = 1;
1515 _actor[0].inventory[INV_MACE] = 0;
1516 smlayer_startVoice(318);
1517 switchBenWeapon();
1518 }
1519 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1520 break;
1521 case 108:
1522 smlayer_setActorLayer(0, 2, 5);
1523 _actor[0].weaponClass = 1;
1524 _actor[0].kicking = false;
1525 smlayer_setActorFacing(0, 2, 28, 180);
1526 _actor[0].act[2].state = 109;
1527 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1528 break;
1529 case 109:
1530 smlayer_setActorLayer(0, 2, 5);
1531 _actor[0].weaponClass = 1;
1532 _actor[0].kicking = false;
1533 if (_actor[0].act[2].frame >= 5) {
1534 _actor[0].act[2].state = 1;
1535 _actor[0].inventory[INV_CHAIN] = 0; // Chain
1536 smlayer_startVoice(318);
1537 switchBenWeapon();
1538 }
1539 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1540 break;
1541 case 110:
1542 smlayer_setActorLayer(0, 2, 4);
1543 _actor[0].weaponClass = 1;
1544 _actor[0].kicking = false;
1545 smlayer_setActorFacing(0, 2, 30, 180);
1546 _actor[0].act[2].state = 111;
1547 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1548 break;
1549 case 111:
1550 smlayer_setActorLayer(0, 2, 4);
1551 _actor[0].weaponClass = 1;
1552 _actor[0].kicking = false;
1553 if (_actor[0].act[2].frame >= 7) {
1554 smlayer_setActorFacing(0, 2, 25, 180);
1555 _actor[0].act[2].state = 65;
1556 _actor[0].inventory[INV_CHAIN] = 1; // Chain
1557 }
1558 _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
1559 break;
1560 default:
1561 break;
1562 }
1563 tmp = _actor[0].x + _actor[0].act[2].tilt + 17 + _actor[0].x1;
1564 tmp2 = _actor[0].y + _actor[0].y1 - 98;
1565
1566 if (_actor[0].act[2].room)
1567 smlayer_putActor(0, 2, tmp, tmp2, _smlayer_room2);
1568 else
1569 smlayer_putActor(0, 2, tmp, tmp2, _smlayer_room);
1570 }
1571
1572 // Bike
actor00Reaction(int32 buttons)1573 void Insane::actor00Reaction(int32 buttons) {
1574 int32 tmpx, tmpy;
1575
1576 switch (_actor[0].tilt) {
1577 case -3:
1578 if (_actor[0].act[0].state != 41) {
1579 smlayer_setActorFacing(0, 0, 6, 180);
1580 _actor[0].act[0].state = 41;
1581 }
1582 break;
1583 case -2:
1584 if (_actor[0].act[0].state != 40) {
1585 smlayer_setActorFacing(0, 0, 7, 180);
1586 _actor[0].act[0].state = 40;
1587 }
1588 break;
1589 case -1:
1590 if (_actor[0].act[0].state != 39) {
1591 smlayer_setActorFacing(0, 0, 8, 180);
1592 _actor[0].act[0].state = 39;
1593 }
1594 break;
1595 case 0:
1596 if (_actor[0].act[0].state != 1) {
1597 smlayer_setActorFacing(0, 0, 9, 180);
1598 _actor[0].act[0].state = 1;
1599 }
1600 break;
1601 case 1:
1602 if (_actor[0].act[0].state != 55) {
1603 smlayer_setActorFacing(0, 0, 10, 180);
1604 _actor[0].act[0].state = 55;
1605 }
1606 break;
1607 case 2:
1608 if (_actor[0].act[0].state != 56) {
1609 smlayer_setActorFacing(0, 0, 11, 180);
1610 _actor[0].act[0].state = 56;
1611 }
1612 break;
1613 case 3:
1614 if (_actor[0].act[0].state != 57) {
1615 smlayer_setActorFacing(0, 0, 12, 180);
1616 _actor[0].act[0].state = 57;
1617 }
1618 break;
1619 default:
1620 break;
1621 }
1622 tmpx = _actor[0].x + _actor[0].x1;
1623 tmpy = _actor[0].y + _actor[0].y1;
1624
1625 if (_actor[0].act[0].room)
1626 smlayer_putActor(0, 0, tmpx, tmpy, _smlayer_room2);
1627 else
1628 smlayer_putActor(0, 0, tmpx, tmpy, _smlayer_room);
1629 }
1630
1631 // Bike top
actor01Reaction(int32 buttons)1632 void Insane::actor01Reaction(int32 buttons) {
1633 int32 tmpx, tmpy;
1634
1635 chooseBenWeaponAnim(buttons);
1636
1637 switch (_actor[0].tilt) {
1638 case -3:
1639 if (_actor[0].act[1].state != 41 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
1640 setBenAnimation(0, 6);
1641 _actor[0].act[1].state = 41;
1642 }
1643
1644 if (_actor[0].cursorX >= -100) {
1645 setBenAnimation(0, 7);
1646 _actor[0].act[1].state = 40;
1647 _actor[0].field_8 = 48;
1648 _actor[0].tilt = -2;
1649 }
1650 break;
1651 case -2:
1652 if (_actor[0].act[1].state != 40 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
1653 setBenAnimation(0, 7);
1654 _actor[0].act[1].state = 40;
1655 }
1656 if (_actor[0].field_8 == 48)
1657 _actor[0].tilt = -1;
1658 else
1659 _actor[0].tilt = -3;
1660 break;
1661 case -1:
1662 if (_actor[0].act[1].state != 39 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
1663 setBenAnimation(0, 8);
1664 _actor[0].act[1].state = 39;
1665 }
1666
1667 if (_actor[0].field_8 == 48)
1668 _actor[0].tilt = 0;
1669 else
1670 _actor[0].tilt = -2;
1671 break;
1672 case 0:
1673 if (_actor[0].act[1].state != 1 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
1674 setBenAnimation(0, 9);
1675 _actor[0].act[1].state = 1;
1676 }
1677 _actor[0].field_8 = 1;
1678 if (_actor[0].cursorX < -100) {
1679 setBenAnimation(0, 8);
1680 _actor[0].act[1].state = 39;
1681 _actor[0].field_8 = 46;
1682 _actor[0].tilt = -1;
1683 } else {
1684 if (_actor[0].cursorX > 100) {
1685 setBenAnimation(0, 10);
1686 _actor[0].act[1].state = 55;
1687 _actor[0].field_8 = 49;
1688 _actor[0].tilt = 1;
1689 }
1690 }
1691 break;
1692 case 1:
1693 if (_actor[0].act[1].state != 55 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
1694 setBenAnimation(0, 10);
1695 _actor[0].act[1].state = 55;
1696 }
1697 if (_actor[0].field_8 == 51)
1698 _actor[0].tilt = 0;
1699 else
1700 _actor[0].tilt = 2;
1701 break;
1702 case 2:
1703 if (_actor[0].act[1].state != 56 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
1704 setBenAnimation(0, 11);
1705 _actor[0].act[1].state = 56;
1706 }
1707 if (_actor[0].field_8 == 51)
1708 _actor[0].tilt = 1;
1709 else
1710 _actor[0].tilt = 3;
1711 break;
1712 case 3:
1713 if (_actor[0].act[1].state != 57 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
1714 setBenAnimation(0, 12);
1715 _actor[0].act[1].state = 57;
1716 }
1717
1718 if (_actor[0].cursorX <= 100) {
1719 setBenAnimation(0, 11);
1720 _actor[0].act[1].state = 56;
1721 _actor[0].field_8 = 51;
1722 _actor[0].tilt = 2;
1723 }
1724 break;
1725 }
1726
1727 if (_actor[0].curFacingFlag != _actor[0].newFacingFlag) {
1728 if (_actor[0].newFacingFlag == 2)
1729 smlayer_setActorFacing(0, 1, 28, 180);
1730 else
1731 smlayer_setActorFacing(0, 1, 27, 180);
1732 }
1733
1734 tmpx = _actor[0].x + _actor[0].x1;
1735 tmpy = _actor[0].y + _actor[0].y1;
1736
1737 if (_actor[0].act[1].room)
1738 smlayer_putActor(0, 1, tmpx, tmpy, _smlayer_room2);
1739 else
1740 smlayer_putActor(0, 1, tmpx, tmpy, _smlayer_room);
1741
1742 _actor[0].animWeaponClass = _actor[0].weaponClass;
1743 _actor[0].curFacingFlag = _actor[0].newFacingFlag;
1744 }
1745
actor03Reaction(int32 buttons)1746 void Insane::actor03Reaction(int32 buttons) {
1747 int32 tmp;
1748
1749 switch (_actor[0].act[3].state) {
1750 case 1:
1751 _actor[0].field_54 = 0;
1752 break;
1753 case 52:
1754 if (_actor[0].runningSound)
1755 smlayer_stopSound(_actor[0].runningSound);
1756
1757 if (_currScenePropIdx)
1758 shutCurrentScene();
1759
1760 _actor[0].runningSound = 0;
1761 _actor[0].defunct = 0;
1762 _actor[0].field_54 = 0;
1763 smlayer_setActorFacing(0, 3, 15, 180);
1764 _actor[0].act[3].state = 53;
1765 break;
1766 case 53:
1767 if (_actor[0].act[3].frame >= 2) {
1768 smlayer_setActorFacing(0, 3, 16, 180);
1769 _actor[0].act[3].state = 54;
1770 }
1771 break;
1772 case 54:
1773 break;
1774 case 69:
1775 if (_actor[0].act[3].frame >= 2)
1776 _actor[0].act[3].state = 70;
1777 break;
1778 case 70:
1779 if (_actor[0].scenePropSubIdx) {
1780 smlayer_setActorFacing(0, 3, 4, 180);
1781 tmp = _currScenePropIdx + _actor[0].scenePropSubIdx;
1782 if (!smlayer_startVoice(_sceneProp[tmp].sound))
1783 _actor[0].runningSound = 0;
1784 else
1785 _actor[0].runningSound = _sceneProp[tmp].sound;
1786 _actor[0].act[3].state = 72;
1787 } else {
1788 _actor[0].act[3].state = 118;
1789 }
1790 break;
1791 case 71:
1792 _actor[0].field_54 = 0;
1793 if (_actor[0].act[3].frame >= 2)
1794 _actor[0].act[3].state = 1;
1795 break;
1796 case 72:
1797 if (_actor[0].runningSound) {
1798 if (!smlayer_isSoundRunning(_actor[0].runningSound)) {
1799 smlayer_setActorFacing(0, 3, 5, 180);
1800 _actor[0].act[3].state = 70;
1801 _actor[0].scenePropSubIdx = 0;
1802 }
1803 } else {
1804 tmp = _currScenePropIdx + _actor[0].scenePropSubIdx;
1805 if (_sceneProp[tmp].counter >= _sceneProp[tmp].maxCounter) {
1806 smlayer_setActorFacing(0, 3, 5, 180);
1807 _actor[0].act[3].state = 70;
1808 _actor[0].scenePropSubIdx = 0;
1809 _actor[0].runningSound = 0;
1810 }
1811 }
1812 break;
1813 case 117:
1814 reinitActors();
1815 smlayer_setActorFacing(0, 3, 13, 180);
1816 _actor[0].act[3].state = 69;
1817 break;
1818 case 118:
1819 smlayer_setActorFacing(0, 3, 14, 180);
1820 _actor[0].act[3].state = 71;
1821 break;
1822 default:
1823 break;
1824 }
1825 }
1826
chooseBenWeaponAnim(int buttons)1827 void Insane::chooseBenWeaponAnim(int buttons) {
1828 // kick
1829 if ((buttons & 1) && (_currEnemy != EN_TORQUE)) {
1830 if (!_kickBenProgress && actor0StateFlags2(_actor[0].act[2].state + _actor[0].weapon * 119)) {
1831 switch (_actor[0].weapon) {
1832 case INV_CHAIN:
1833 _actor[0].act[2].state = 10;
1834 break;
1835 case INV_CHAINSAW:
1836 _actor[0].act[2].state = 14;
1837 break;
1838 case INV_MACE:
1839 _actor[0].act[2].state = 18;
1840 break;
1841 case INV_2X4:
1842 _actor[0].act[2].state = 22;
1843 break;
1844 case INV_WRENCH:
1845 _actor[0].act[2].state = 26;
1846 break;
1847 case INV_BOOT:
1848 _actor[0].act[2].state = 6;
1849 break;
1850 case INV_HAND:
1851 _actor[0].act[2].state = 2;
1852 break;
1853 case INV_DUST:
1854 _actor[0].act[2].state = 30;
1855 break;
1856 default:
1857 break;
1858 }
1859 _actor[0].kicking = true;
1860 _kickBenProgress = true;
1861 }
1862 } else {
1863 _kickBenProgress = false;
1864 }
1865
1866 // switch weapon
1867 if ((buttons & 2) && (_currEnemy != EN_TORQUE)) {
1868 if (_weaponBenJustSwitched)
1869 return;
1870
1871 if (!actor0StateFlags1(_actor[0].act[2].state))
1872 return;
1873
1874 switch (_actor[0].weapon) {
1875 case INV_CHAIN:
1876 case INV_CHAINSAW:
1877 case INV_MACE:
1878 case INV_2X4:
1879 case INV_WRENCH:
1880 _actor[0].act[2].state = 35;
1881 smlayer_setActorFacing(0, 2, 24, 180);
1882 break;
1883 case INV_BOOT:
1884 case INV_HAND:
1885 case INV_DUST:
1886 _actor[0].act[2].state = 0;
1887 switchBenWeapon();
1888 }
1889
1890 _weaponBenJustSwitched = true;
1891 } else {
1892 _weaponBenJustSwitched = false;
1893 }
1894 }
1895
switchBenWeapon()1896 void Insane::switchBenWeapon() {
1897 do {
1898 _actor[0].weapon++;
1899 if (_actor[0].weapon > 7)
1900 _actor[0].weapon = INV_CHAIN;
1901
1902 } while (!_actor[0].inventory[_actor[0].weapon]);
1903
1904 switch (_actor[0].weapon) {
1905 case INV_CHAIN:
1906 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
1907 smlayer_setActorCostume(0, 2, readArray(19));
1908 else
1909 smlayer_setActorCostume(0, 2, readArray(20));
1910 smlayer_setActorFacing(0, 2, 18, 180);
1911 _actor[0].weaponClass = 1;
1912 _actor[0].act[2].state = 34;
1913 break;
1914 case INV_CHAINSAW:
1915 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
1916 smlayer_setActorCostume(0, 2, readArray(23));
1917 else
1918 smlayer_setActorCostume(0, 2, readArray(24));
1919 smlayer_setActorFacing(0, 2, 18, 180);
1920 _actor[0].weaponClass = 1;
1921 _actor[0].act[2].state = 34;
1922 break;
1923 case INV_MACE:
1924 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
1925 smlayer_setActorCostume(0, 2, readArray(22));
1926 else
1927 smlayer_setActorCostume(0, 2, readArray(23));
1928 smlayer_setActorFacing(0, 2, 18, 180);
1929 _actor[0].weaponClass = 1;
1930 _actor[0].act[2].state = 34;
1931 break;
1932 case INV_2X4:
1933 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)) {
1934 smlayer_setActorCostume(0, 2, readArray(18));
1935 } else {
1936 if (_currEnemy == EN_CAVEFISH)
1937 smlayer_setActorCostume(0, 2, readArray(38));
1938 else
1939 smlayer_setActorCostume(0, 2, readArray(19));
1940 }
1941 smlayer_setActorFacing(0, 2, 18, 180);
1942 _actor[0].weaponClass = 1;
1943 _actor[0].act[2].state = 34;
1944 break;
1945 case INV_WRENCH:
1946 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
1947 smlayer_setActorCostume(0, 2, readArray(24));
1948 else
1949 smlayer_setActorCostume(0, 2, readArray(25));
1950 smlayer_setActorFacing(0, 2, 18, 180);
1951 _actor[0].weaponClass = 1;
1952 _actor[0].act[2].state = 34;
1953 break;
1954 case INV_BOOT:
1955 case INV_HAND:
1956 case INV_DUST:
1957 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS))
1958 smlayer_setActorCostume(0, 2, readArray(11));
1959 else
1960 smlayer_setActorCostume(0, 2, readArray(12));
1961 _actor[0].weaponClass = 2;
1962 _actor[0].act[2].state = 1;
1963 break;
1964 default:
1965 break;
1966 }
1967 }
1968
setBenState()1969 int32 Insane::setBenState() {
1970 _actor[0].act[2].animTilt = -1000;
1971
1972 switch (_actor[0].weapon) {
1973 case INV_CHAIN:
1974 _actor[0].weaponClass = 1;
1975 _actor[0].act[2].state = 63;
1976 break;
1977 case INV_CHAINSAW:
1978 _actor[0].weaponClass = 1;
1979 _actor[0].act[2].state = 64;
1980 break;
1981 case INV_MACE:
1982 _actor[0].weaponClass = 1;
1983 _actor[0].act[2].state = 65;
1984 break;
1985 case INV_2X4:
1986 _actor[0].weaponClass = 1;
1987 _actor[0].act[2].state = 66;
1988 break;
1989 case INV_WRENCH:
1990 _actor[0].weaponClass = 1;
1991 _actor[0].act[2].state = 62;
1992 break;
1993 case INV_BOOT:
1994 case INV_HAND:
1995 case INV_DUST:
1996 _actor[0].weaponClass = 2;
1997 _actor[0].act[2].state = 1;
1998 break;
1999 default:
2000 break;
2001 }
2002 return _actor[0].act[2].state;
2003 }
2004
ouchSoundBen()2005 void Insane::ouchSoundBen() {
2006 _actor[0].act[3].state = 52;
2007
2008 if ((_vm->_game.features & GF_DEMO) && (_vm->_game.platform == Common::kPlatformDOS)) {
2009 smlayer_startVoice(54);
2010 return;
2011 }
2012
2013 switch (_vm->_rnd.getRandomNumber(3)) {
2014 case 0:
2015 smlayer_startVoice(315);
2016 break;
2017 case 1:
2018 smlayer_startVoice(316);
2019 break;
2020 case 2:
2021 smlayer_startVoice(317);
2022 break;
2023 case 3:
2024 smlayer_startVoice(98);
2025 break;
2026 }
2027 }
2028
2029 }
2030