aboutsummaryrefslogtreecommitdiff
path: root/scumm/insane/insane_ben.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2004-01-16 22:11:45 +0000
committerEugene Sandulenko2004-01-16 22:11:45 +0000
commit171c7d438733e45800e2a8e78cd0fe065dc7e560 (patch)
tree191978382cbfc96e21c4f679633c68d58828e901 /scumm/insane/insane_ben.cpp
parent05c71be222e68a0e0752f3c59b81d76be5d6a518 (diff)
downloadscummvm-rg350-171c7d438733e45800e2a8e78cd0fe065dc7e560.tar.gz
scummvm-rg350-171c7d438733e45800e2a8e78cd0fe065dc7e560.tar.bz2
scummvm-rg350-171c7d438733e45800e2a8e78cd0fe065dc7e560.zip
Moved FT INSANE to a separate directory
svn-id: r12443
Diffstat (limited to 'scumm/insane/insane_ben.cpp')
-rw-r--r--scumm/insane/insane_ben.cpp1979
1 files changed, 1979 insertions, 0 deletions
diff --git a/scumm/insane/insane_ben.cpp b/scumm/insane/insane_ben.cpp
new file mode 100644
index 0000000000..3444f9df6e
--- /dev/null
+++ b/scumm/insane/insane_ben.cpp
@@ -0,0 +1,1979 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
+ */
+
+#include "stdafx.h"
+
+#include "base/engine.h"
+
+#include "scumm/smush/insane.h"
+
+namespace Scumm {
+
+int32 Insane::enemyBenHandler(int32 actor1, int32 actor2, int32 probability) {
+ int32 retval;
+ int32 tmp;
+
+ retval = processMouse();
+
+ // Joystick support is skipped
+
+ retval |= processKeyboard();
+
+ tmp = _enemyState[EN_BEN][0] - 160;
+ if (tmp < -160)
+ tmp = -160;
+
+ if (tmp > 160)
+ tmp = 160;
+
+ _actor[actor1].cursorX = tmp;
+
+ smush_warpMouse(_enemyState[EN_BEN][0], _enemyState[EN_BEN][1], -1);
+
+ return (retval & 3);
+}
+
+void Insane::turnBen(bool controllable) {
+ int32 buttons;
+
+ switch (_currSceneId) {
+ case 21:
+ case 25:
+ case 3:
+ case 13:
+ if (_actor[0].damage < _actor[0].maxdamage) {
+ _actor[0].lost = 0;
+ } else {
+ if (!_actor[0].lost && !_actor[1].lost) {
+ _actor[0].lost = 1;
+ _actor[0].act[2].state = 36;
+ _actor[0].act[1].state = 36;
+ _actor[0].act[1].room = 0;
+ _actor[0].act[0].state = 36;
+ _actor[0].act[0].room = 0;
+
+ if (smlayer_isSoundRunning(95))
+ smlayer_stopSound(95);
+ }
+ }
+ buttons = 0;
+ if (!_actor[0].lost && controllable) {
+ buttons = actionBen();
+ if (_currSceneId == 13)
+ buttons &= 2;
+ if (_currEnemy == EN_TORQUE)
+ buttons = 0;
+ }
+ debug(1, "00:%d 01:%d 02:%d 03:%d", _actor[0].act[0].state,
+ _actor[0].act[1].state, _actor[0].act[2].state, _actor[0].act[3].state);
+ actor01Reaction(buttons);
+ actor02Reaction(buttons);
+ actor03Reaction(buttons);
+ actor00Reaction(buttons);
+ break;
+ case 17:
+ mineChooseRoad(processBenOnRoad(false));
+ break;
+ default:
+ if (_actor[0].damage < _actor[0].maxdamage) {
+ _actor[0].lost = 0;
+ } else {
+ if (!_actor[0].lost && !_actor[1].lost) {
+ queueSceneSwitch(10, 0, "wr2_ben.san", 64, 0, 0, 0);
+ _actor[0].lost = 1;
+ _actor[0].act[2].state = 36;
+ _actor[0].act[2].room = 0;
+ _actor[0].act[0].state = 36;
+ _actor[0].act[0].room = 0;
+ _actor[0].act[1].state = 36;
+ _actor[0].act[1].room = 0;
+ mineChooseRoad(0);
+ return;
+ }
+ }
+
+ if (!_actor[0].lost && controllable)
+ mineChooseRoad(processBenOnRoad(true));
+ else
+ mineChooseRoad(0);
+ break;
+ }
+}
+
+int32 Insane::actionBen(void) {
+ int32 buttons, tmp;
+ bool doDamage = false;
+
+ if (_actor[0].enemyHandler != -1)
+ buttons = enemyHandler(_actor[0].enemyHandler, 0, 1, _actor[0].probability);
+ else
+ buttons = enemyHandler(EN_TORQUE, 0, 1, _actor[0].probability);
+
+ if (_actor[0].tilt) {
+ _actor[0].speed += _actor[0].cursorX / 40;
+ } else {
+ if (_actor[0].speed < 0)
+ _actor[0].speed++;
+ else
+ _actor[0].speed--;
+ }
+
+ if (_actor[0].speed > 8)
+ _actor[0].speed = 8;
+
+ if (_actor[0].speed < -8)
+ _actor[0].speed = -8;
+
+ _actor[0].x += _actor[0].speed;
+
+ if (_actor[0].x > 100)
+ _actor[0].x--;
+ else
+ if (_actor[0].x < 100)
+ _actor[0].x++;
+
+ if (_actor[0].x >= 0) {
+ if (_actor[1].x - 90 <= _actor[0].x && !_actor[0].lost && !_actor[1].lost) {
+ _val213d++;
+ _actor[0].x = _actor[1].x - 90;
+
+ tmp = _actor[1].speed;
+ _actor[1].speed = _actor[0].speed;
+ _actor[0].speed = tmp;
+
+ if (_val213d > 50) {
+ _actor[0].cursorX = -320;
+ _val213d = 0;
+ }
+
+ if (!smlayer_isSoundRunning(95))
+ smlayer_startSound1(95);
+ } else {
+ if (smlayer_isSoundRunning(95))
+ smlayer_stopSound(95);
+
+ _val213d = 0;
+ }
+ } else {
+ _actor[0].x = 0;
+ _actor[0].damage++; // FIXME: apparently it is a bug in original
+ // and damage is doubled
+ doDamage = true;
+ }
+
+ if (_actor[0].x > 320) {
+ _actor[0].x = 320;
+ doDamage = true;
+ }
+
+ if (_actor[0].x < 10 || _actor[0].x > 310 || doDamage) {
+ _tiresRustle = 1;
+ _actor[0].x1 = -_actor[0].x1;
+ _actor[0].damage++; // PATCH
+ }
+
+ return buttons;
+}
+
+int32 Insane::processBenOnRoad(bool flag) {
+ int32 buttons;
+
+ if (_actor[0].enemyHandler != -1)
+ buttons = enemyHandler(_actor[0].enemyHandler, 0, 1, _actor[0].probability);
+ else
+ buttons = enemyHandler(EN_TORQUE, 0, 1, _actor[0].probability);
+
+ if (flag) {
+ _actor[0].speed = _actor[0].tilt;
+
+ if (_actor[0].speed > 8)
+ _actor[0].speed = 8;
+
+ if (_actor[0].speed < -8)
+ _actor[0].speed = -8;
+
+ // FIXME: is it abs(/2) ?
+ // mov eax, insane_actor0.speed
+ // mov edx, eax
+ // sar edx, 1Fh
+ // sub eax, edx
+ // sar eax, 1
+ // add eax, insane_actor0.speed
+ // add insane_actor0.x, eax
+
+ _actor[0].x += _actor[0].speed / 2 + _actor[0].speed;
+
+ if (_actor[0].x < 0)
+ _actor[0].x = 0;
+
+ if (_actor[0].x > 320)
+ _actor[0].x = 320;
+ }
+
+ return buttons;
+}
+
+void Insane::mineChooseRoad(int32 buttons) {
+ int16 tmp;
+
+ if (_actor[0].field_8 < 1)
+ return;
+
+ if (_actor[0].field_8 == 112) {
+ if (_actor[0].frame < 18 || !_needSceneSwitch)
+ return;
+
+ queueSceneSwitch(18, 0, "fishgogg.san", 64, 0, 0, 0);
+ } else if (_actor[0].field_8 == 1) {
+ tmp = _actor[0].cursorX / 22;
+
+ switch (_currSceneId) {
+ case 17:
+ if (buttons & 1) {
+ if (_val123_) {
+ setWordInString(_numberArray, 1, _val52d);
+ smush_setToFinish();
+ }
+
+ if (_val119_ && !_needSceneSwitch) {
+ _iactSceneId2 = _iactSceneId;
+ queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
+ }
+ }
+
+ if ((buttons & 2) == 0 || _needSceneSwitch)
+ return;
+
+ queueSceneSwitch(19, 0, "fishgog2.san", 64, 0, 0, 0);
+ break;
+ case 1:
+ _actor[0].tilt = tmp;
+
+ if (tmp < -7)
+ _actor[0].tilt = -7;
+ if (tmp > 7)
+ _actor[0].tilt = 7;
+
+ drawSpeedyActor(buttons);
+
+ if ((buttons & 1) && _currSceneId == 1 && _val119_ && !_needSceneSwitch) {
+ _iactSceneId2 = _iactSceneId;
+ queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
+ }
+
+ if ((buttons & 2) == 0 || !_val122_)
+ return;
+
+ _actor[0].frame = 0;
+ _actor[0].field_8 = 112;
+ smlayer_setActorFacing(0, 2, 26, 180);
+ break;
+ case 5:
+ _actor[0].tilt = tmp;
+
+ if (tmp < -7)
+ _actor[0].tilt = -7;
+ if (tmp > 7)
+ _actor[0].tilt = 7;
+
+ drawSpeedyActor(buttons);
+
+ if ((buttons & 1) == 0)
+ return;
+
+ if (_val119_ && !_needSceneSwitch) {
+ _iactSceneId2 = _iactSceneId;
+
+ if (readArray(_numberArray, 4) && _val211d < 3) {
+ _val211d++;
+ queueSceneSwitch(8, 0, "fishfear.san", 64, 0, 0, 0);
+ } else {
+ queueSceneSwitch(8, 0, "tomine.san", 64, 0, 0, 0);
+ }
+ }
+
+ if (_val120_) {
+ setWordInString(_numberArray, 1, _val55d);
+ setWordInString(_numberArray, 3, _val57d);
+ smush_setToFinish();
+ }
+
+ if (!_val212_)
+ return;
+
+ setWordInString(_numberArray, 1, _val56d);
+ setWordInString(_numberArray, 3, _val57d);
+ smush_setToFinish();
+ break;
+ case 6:
+ _actor[0].tilt = tmp;
+
+ if (tmp < -7)
+ _actor[0].tilt = -7;
+ if (tmp > 7)
+ _actor[0].tilt = 7;
+
+ drawSpeedyActor(buttons);
+
+ if ((buttons & 1) == 0)
+ return;
+
+ if (_val119_ && !_needSceneSwitch) {
+ _iactSceneId2 = _iactSceneId;
+
+ if (readArray(_numberArray, 4) && _val211d < 3) {
+ _val211d++;
+ queueSceneSwitch(7, 0, "fishfear.san", 64, 0, 0, 0);
+ } else {
+ queueSceneSwitch(7, 0, "tomine.san", 64, 0, 0, 0);
+ }
+ }
+
+ if (_val120_) {
+ setWordInString(_numberArray, 1, _val55d);
+ setWordInString(_numberArray, 3, _val53d);
+ smush_setToFinish();
+ }
+
+ if (!_val212_)
+ return;
+
+ setWordInString(_numberArray, 1, _val56d);
+ setWordInString(_numberArray, 3, _val53d);
+ smush_setToFinish();
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void Insane::drawSpeedyActor(int32 buttons) {
+ switch (_actor[0].tilt) {
+ case -7:
+ if (_actor[0].act[2].state != 47) {
+ smlayer_setActorFacing(0, 2, 13, 180);
+ _actor[0].act[2].state = 47;
+ }
+ break;
+ case -6:
+ if (_actor[0].act[2].state != 44) {
+ smlayer_setActorFacing(0, 2, 11, 180);
+ _actor[0].act[2].state = 44;
+ }
+ break;
+ case -5:
+ if (_actor[0].act[2].state != 43) {
+ smlayer_setActorFacing(0, 2, 10, 180);
+ _actor[0].act[2].state = 43;
+ }
+ break;
+ case -4:
+ if (_actor[0].act[2].state != 42) {
+ smlayer_setActorFacing(0, 2, 9, 180);
+ _actor[0].act[2].state = 42;
+ }
+ break;
+ case -3:
+ if (_actor[0].act[2].state != 41) {
+ smlayer_setActorFacing(0, 2, 8, 180);
+ _actor[0].act[2].state = 41;
+ }
+ break;
+ case -2:
+ if (_actor[0].act[2].state != 40) {
+ smlayer_setActorFacing(0, 2, 7, 180);
+ _actor[0].act[2].state = 40;
+ }
+ break;
+ case -1:
+ if (_actor[0].act[2].state != 39) {
+ smlayer_setActorFacing(0, 2, 6, 180);
+ _actor[0].act[2].state = 39;
+ }
+ break;
+ case 0:
+ if (_actor[0].act[2].state != 1) {
+ smlayer_setActorFacing(0, 2, 22, 180);
+ _actor[0].act[2].state = 1;
+ }
+ break;
+ case 1:
+ if (_actor[0].act[2].state != 55) {
+ smlayer_setActorFacing(0, 2, 14, 180);
+ _actor[0].act[2].state = 55;
+ }
+ break;
+ case 2:
+ if (_actor[0].act[2].state != 56) {
+ smlayer_setActorFacing(0, 2, 15, 180);
+ _actor[0].act[2].state = 56;
+ }
+ break;
+ case 3:
+ if (_actor[0].act[2].state != 57) {
+ smlayer_setActorFacing(0, 2, 16, 180);
+ _actor[0].act[2].state = 57;
+ }
+ break;
+ case 4:
+ if (_actor[0].act[2].state != 58) {
+ smlayer_setActorFacing(0, 2, 17, 180);
+ _actor[0].act[2].state = 58;
+ }
+ break;
+ case 5:
+ if (_actor[0].act[2].state != 59) {
+ smlayer_setActorFacing(0, 2, 18, 180);
+ _actor[0].act[2].state = 59;
+ }
+ break;
+ case 6:
+ if (_actor[0].act[2].state != 60) {
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 60;
+ }
+ break;
+ case 7:
+ if (_actor[0].act[2].state != 50) {
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 50;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (!_actor[0].act[2].room)
+ return;
+
+ smlayer_putActor(0, 2, _actor[0].x + _actor[0].x1, _actor[0].y + _actor[0].y1,
+ _smlayer_room2);
+}
+
+bool Insane::weaponBenIsEffective(void) {
+ if ((_actor[1].x - _actor[0].x > weaponMaxRange(0)) ||
+ (_actor[1].x - _actor[0].x < weaponMinRange(0)) ||
+ !_actor[1].kicking)
+ return false;
+
+ return true;
+}
+
+int32 Insane::calcBenDamage(bool arg_0, bool arg_4) {
+ if ((_actor[1].x - _actor[0].x > weaponMaxRange(0)) ||
+ (_actor[1].x - _actor[0].x < weaponMinRange(0)))
+ return 0;
+
+ if (_actor[1].field_44 && arg_4)
+ return 1000;
+
+ if (!actor1StateFlags(_actor[1].act[2].state))
+ return 0;
+
+ if (arg_0) {
+ ouchSoundEnemy();
+ _actor[1].damage += weaponDamage(0);
+ }
+
+ return 1;
+}
+
+// Ben
+void Insane::actor02Reaction(int32 buttons) {
+ int32 tmp, tmp2;
+
+ switch(_actor[0].act[2].state) {
+ case 106:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ smlayer_setActorFacing(0, 2, 29, 180);
+ _actor[0].act[2].state = 107;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 107:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 9) {
+ _actor[0].act[2].state = 1;
+ _actor[0].inventory[INV_MACE] = 0;
+ smlayer_startSound2(318);
+ switchBenWeapon();
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 104:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ smlayer_setActorFacing(0, 2, 28, 180);
+ _actor[0].act[2].state = 105;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 105:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 5) {
+ _actor[0].act[2].state = 1;
+ _actor[0].inventory[INV_MACE] = 0;
+ smlayer_startSound2(318);
+ switchBenWeapon();
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 108:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ smlayer_setActorFacing(0, 2, 28, 180);
+ _actor[0].act[2].state = 109;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 109:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 5) {
+ _actor[0].act[2].state = 1;
+ _actor[0].inventory[INV_CHAIN] = 0; // Chain
+ smlayer_startSound2(318);
+ switchBenWeapon();
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 73:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 1;
+ if (_actor[0].act[2].frame >= 2 && !_kickBenProgress) {
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 74;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 74:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 0;
+ if (_actor[0].act[2].frame >= 2) {
+ smlayer_setActorFacing(0, 2, 9, 180);
+ _actor[0].act[2].state = 1;
+ _actor[0].weaponClass = 2;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 79:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 1;
+ if (_actor[0].act[2].frame >= 2) {
+ smlayer_setActorFacing(0, 2, 23, 180);
+ _actor[0].act[2].state = 80;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 80:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 0;
+ if (_actor[0].act[2].frame >= 6) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 63;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 81:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 1;
+ if (_actor[0].act[2].frame >= 2 && !_kickBenProgress) {
+ smlayer_setActorFacing(0, 2, 23, 180);
+ _actor[0].act[2].state = 82;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 82:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 0;
+ if (_actor[0].act[2].frame >= 3) {
+ smlayer_setActorFacing(0, 2, 26, 180);
+ _actor[0].act[2].state = 64;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 77:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 1;
+ if (_actor[0].act[2].frame >= 2) {
+ smlayer_setActorFacing(0, 2, 23, 180);
+ _actor[0].act[2].state = 78;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 78:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 0;
+ if (_actor[0].act[2].frame >= 5) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 65;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 83:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 0;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 1;
+ if (_actor[0].act[2].frame >= 2 && !_kickBenProgress) {
+ smlayer_setActorFacing(0, 2, 23, 180);
+ _actor[0].act[2].state = 84;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 84:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 0;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 0;
+ if (_actor[0].act[2].frame >= 5) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 66;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 75:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 1;
+ if (_actor[0].act[2].frame >= 4 && !_kickBenProgress) {
+ smlayer_setActorFacing(0, 2, 23, 180);
+ _actor[0].act[2].state = 76;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 76:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].field_44 = 0;
+ if (_actor[0].act[2].frame >= 4) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 62;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 2:
+ smlayer_setActorLayer(0, 2, 4);
+ smlayer_setActorFacing(0, 2, 17, 180);
+ _actor[0].kicking = 1;
+ _actor[0].weaponClass = 1;
+ _actor[0].act[2].state = 3;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(63);
+ break;
+ case 3:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ if (_actor[0].act[2].frame == 2) {
+ if (_currEnemy != EN_CAVEFISH) {
+ tmp = calcBenDamage(1, 1);
+ if (tmp == 1)
+ smlayer_startSound1(60);
+ if (tmp == 1000)
+ smlayer_startSound1(62);
+ } else {
+ if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
+ (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
+ !_actor[0].field_54)
+ prepareScenePropScene(1, 0, 0);
+ }
+ }
+ if (_actor[0].act[2].frame >= 4) {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 4;
+ }
+
+ _actor[0].kicking = 1;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 4:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 2) {
+ smlayer_setActorFacing(0, 2, 9, 180);
+ _actor[0].act[2].state = 1;
+ _actor[0].act[2].animTilt = -1000;
+ _actor[0].weaponClass = 2;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 5:
+ smlayer_setActorLayer(0, 2, 5);
+ break;
+ case 10:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 11;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(75);
+ break;
+ case 11:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 2) {
+ if (_currEnemy == EN_VULTM2) {
+ if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
+ (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
+ calcBenDamage(0, 0)) {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 97;
+ _actor[0].act[2].room = 0;
+ _actor[0].act[1].room = 0;
+ _actor[0].act[0].room = 0;
+ smlayer_setActorLayer(0, 2, 25);
+ smlayer_setActorCostume(1, 2, readArray(_numberArray, 45));
+ smlayer_setActorFacing(1, 2, 6, 180);
+ smlayer_startSound1(101);
+ _actor[1].act[2].state = 97;
+ _actor[1].lost = 1;
+ _actor[1].act[2].room = 1;
+ _actor[1].act[1].room = 0;
+ _actor[1].act[0].room = 0;
+ } else {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 12;
+ }
+ } else {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 12;
+ }
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 97:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 5) {
+ _actor[0].act[2].room = 1;
+ _actor[0].act[1].room = 1;
+ _actor[0].act[0].room = 1;
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 13;
+ _actor[0].x = _actor[1].x - 116;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 12:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 1) {
+ if (_currEnemy != EN_CAVEFISH) {
+ switch (_actor[1].weapon) {
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ case INV_MACE:
+ case INV_2X4:
+ case INV_DUST:
+ tmp = calcBenDamage(1, 1);
+ if (tmp == 1)
+ smlayer_startSound1(73);
+ if (tmp == 1000)
+ smlayer_startSound1(74);
+ break;
+ case INV_WRENCH:
+ case INV_BOOT:
+ case INV_HAND:
+ if(calcBenDamage(1, 0) == 1)
+ smlayer_startSound1(73);
+ break;
+ }
+ } else {
+ if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
+ (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
+ !_actor[0].field_54)
+ prepareScenePropScene(1, 0, 0);
+
+ }
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 13;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 13:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 3) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 63;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 6:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 2;
+ _actor[0].field_34 = 1;
+ _actor[0].kicking = 0;
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 22));
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 7;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(66);
+ break;
+ case 7:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 2;
+ _actor[0].field_34 = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 1) {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 8;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 8:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 2;
+ _actor[0].field_34 = 1;
+ _actor[0].kicking = 0;
+ if ((_actor[0].act[2].frame == 3) && (calcBenDamage(0, 0) == 1)) {
+ _actor[1].damage = weaponDamage(0);
+ smlayer_startSound1(64);
+ _actor[1].cursorX = 320;
+ }
+ if (_actor[0].act[2].frame >= 5) {
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 9;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 9:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 2;
+ _actor[0].field_34 = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 3) {
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 12));
+ _actor[0].field_34 = 2;
+ _actor[0].act[2].state = 1;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 14:
+ smlayer_setActorLayer(0, 2, 8);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 15;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(78);
+ break;
+ case 15:
+ smlayer_setActorLayer(0, 2, 8);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 2) {
+ switch (_actor[1].weapon) {
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ if (weaponBenIsEffective()) {
+ smlayer_setActorFacing(0, 2, 22, 180);
+ _actor[0].act[2].state = 81;
+ } else {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 16;
+ }
+ break;
+ case INV_MACE:
+ if (!_actor[1].kicking || _actor[1].field_44)
+ if (actor1StateFlags(_actor[1].act[2].state)) {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 106;
+ break;
+ }
+ default:
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 16;
+ break;
+ }
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 16:
+ smlayer_setActorLayer(0, 2, 8);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 1) {
+ switch (_actor[1].weapon) {
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ tmp = calcBenDamage(1, 1);
+ if (tmp == 1)
+ smlayer_startSound1(76);
+ if (tmp == 1000)
+ smlayer_startSound1(77);
+ break;
+ case INV_BOOT:
+ calcBenDamage(0, 1);
+ break;
+ case INV_DUST:
+ if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
+ (_actor[1].x - _actor[0].x >= weaponMinRange(0))) {
+ smlayer_startSound1(76);
+ _actor[1].damage = weaponDamage(0);
+ }
+ break;
+ default:
+ if (calcBenDamage(1, 0))
+ smlayer_startSound1(76);
+ break;
+ }
+ smlayer_setActorFacing(0, 2, 21,180);
+ _actor[0].act[2].state = 17;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 17:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 2) {
+ smlayer_setActorFacing(0, 2, 26, 180);
+ _actor[0].act[2].state = 64;
+ smlayer_stopSound(76);
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 18:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 19;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(69);
+ break;
+ case 19:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 1) {
+ switch (_actor[1].weapon) {
+ case INV_CHAIN:
+ if (_actor[1].kicking) {
+ _actor[1].act[2].state = 108;
+ _actor[0].act[2].state = 110;
+ } else {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 20;
+ }
+ break;
+ case INV_CHAINSAW:
+ if (_actor[1].kicking || _actor[1].field_44)
+ _actor[0].act[2].state = 106;
+ else {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 20;
+ }
+ break;
+ case INV_MACE:
+ case INV_2X4:
+ if (weaponBenIsEffective()) {
+ smlayer_setActorFacing(0, 2, 22, 180);
+ _actor[0].act[2].state = 77;
+ break;
+ }
+ default:
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 19;
+ break;
+ }
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 20;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 20:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 1) {
+ if (_currEnemy != EN_CAVEFISH) {
+ switch (_actor[1].weapon) {
+ case INV_CHAINSAW:
+ case INV_MACE:
+ case INV_2X4:
+ case INV_BOOT:
+ tmp = calcBenDamage(1, 1);
+ if (tmp == 1)
+ smlayer_startSound1(67);
+ if (tmp == 1000)
+ smlayer_startSound1(68);
+ break;
+ default:
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 19;
+ break;
+ }
+ } else {
+ if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
+ (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
+ !_actor[0].field_54)
+ prepareScenePropScene(1, 0, 0);
+ }
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 21;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 21:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 6) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 65;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 110:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ smlayer_setActorFacing(0, 2, 30, 180);
+ _actor[0].act[2].state = 111;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 111:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 7) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 65;
+ _actor[0].inventory[INV_CHAIN] = 1; // Chain
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 22:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 0;
+ _actor[0].kicking = 1;
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 23;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(81);
+ break;
+ case 23:
+ smlayer_setActorLayer(0, 2, 6);
+ _actor[0].weaponClass = 0;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 4) {
+ switch (_actor[1].weapon) {
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ case INV_MACE:
+ case INV_2X4:
+ case INV_BOOT:
+ case INV_DUST:
+ if (weaponBenIsEffective()) {
+ smlayer_setActorFacing(0, 2, 22, 180);
+ _actor[0].act[2].state = 83;
+ }
+ break;
+ default:
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 24;
+ break;
+ }
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 21;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 24:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 0;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 1) {
+ switch (_actor[1].weapon) {
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ case INV_MACE:
+ case INV_2X4:
+ case INV_BOOT:
+ case INV_DUST:
+ tmp = calcBenDamage(1, 1);
+ if (tmp == 1) {
+ if (_currEnemy == EN_CAVEFISH) {
+ _actor[1].lost = 1;
+ _actor[1].act[2].state = 102;
+ _actor[1].damage = _actor[1].maxdamage + 10;
+ }
+ smlayer_startSound1(79);
+ }
+ if (tmp == 1000)
+ smlayer_startSound1(80);
+ break;
+ default:
+ if (!calcBenDamage(1, 0))
+ smlayer_startSound1(79);
+ break;
+ }
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 25;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 25:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 0;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 6) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 66;
+ _actor[0].weaponClass = 1;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 26:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ smlayer_setActorFacing(0, 2, 19, 180);
+ _actor[0].act[2].state = 27;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(72);
+ break;
+ case 27:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 1) {
+ switch (_actor[1].weapon) {
+ case INV_HAND:
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 28;
+ break;
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ case INV_MACE:
+ case INV_2X4:
+ case INV_BOOT:
+ case INV_DUST:
+ if (weaponBenIsEffective()) {
+ smlayer_setActorFacing(0, 2, 22, 180);
+ _actor[0].act[2].state = 75;
+ break;
+ }
+ default:
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 28;
+ break;
+ }
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 28:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 1;
+ if (_actor[0].act[2].frame >= 3) {
+ if (_currEnemy != EN_CAVEFISH) {
+ switch (_actor[1].weapon) {
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ case INV_MACE:
+ case INV_2X4:
+ case INV_BOOT:
+ case INV_DUST:
+ tmp = calcBenDamage(1, 1);
+ if (tmp == 1)
+ smlayer_startSound1(70);
+ if (tmp == 1000)
+ smlayer_startSound1(71);
+ break;
+ case 6:
+ if (!calcBenDamage(0, 1))
+ smlayer_startSound1(70);
+ break;
+ default:
+ break;
+ }
+ } else {
+ if ((_actor[1].x - _actor[0].x <= weaponMaxRange(0)) &&
+ (_actor[1].x - _actor[0].x >= weaponMinRange(0)) &&
+ !_actor[0].field_54)
+ prepareScenePropScene(1, 0, 0);
+ }
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 29;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 29:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 6) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].state = 62;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 30:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 21));
+ smlayer_setActorFacing(0, 2, 18, 180);
+ _actor[0].act[2].state = 31;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ smlayer_startSound1(84);
+ break;
+ case 31:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ if (_actor[0].act[2].frame >= 6) {
+ smlayer_setActorFacing(0, 2, 20, 180);
+ _actor[0].act[2].state = 32;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 32:
+ smlayer_setActorLayer(0, 2, 4);
+ _actor[0].weaponClass = 1;
+ if (_actor[0].act[2].frame >= 5) {
+ switch (_currEnemy) {
+ case EN_ROTT3:
+ if (calcBenDamage(0, 0))
+ _actor[1].act[2].state = 115;
+ break;
+ case EN_VULTF2:
+ if (calcBenDamage(0, 0))
+ _actor[1].act[2].state = 113;
+ break;
+ default:
+ tmp = calcBenDamage(1, 1);
+ if (tmp == 1)
+ smlayer_startSound1(82);
+ if (tmp == 1000)
+ smlayer_startSound1(83);
+ break;
+ }
+ smlayer_setActorFacing(0, 2, 21, 180);
+ _actor[0].act[2].state = 33;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 33:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 5) {
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 12));
+ _actor[0].act[2].state = 1;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 36:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].kicking = 0;
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 18));
+ smlayer_setActorFacing(0, 2, 6, 180);
+ smlayer_startSound1(96);
+ switch (_currEnemy) {
+ case EN_ROTT1:
+ prepareScenePropScene(33, 0, 0);
+ break;
+ case EN_ROTT2:
+ tmp = rand() % 5;
+ if (!tmp)
+ prepareScenePropScene(35, 0, 0);
+ if (tmp == 3)
+ prepareScenePropScene(36, 0, 0);
+ break;
+ case EN_VULTF1:
+ prepareScenePropScene(6, 0, 0);
+ break;
+ case EN_VULTM1:
+ tmp = rand() % 5;
+ if (!tmp)
+ prepareScenePropScene(40, 0, 0);
+ if (tmp == 3)
+ prepareScenePropScene(41, 0, 0);
+ break;
+ default:
+ break;
+ }
+ _actor[0].act[2].state = 37;
+ break;
+ case 37:
+ smlayer_setActorLayer(0, 2, 25);
+ _actor[0].cursorX = 0;
+ _actor[0].kicking = 0;
+ if (_actor[0].act[2].frame >= 18 ||
+ (_actor[0].x < 50 && _actor[0].act[2].frame >= 10) ||
+ (_actor[0].x > 270 && _actor[0].act[2].frame >= 10)) {
+ if (_currSceneId == 21) {
+ queueSceneSwitch(23, 0, "benflip.san", 64, 0, 0, 0);
+ } else {
+ switch (_currEnemy) {
+ case EN_ROTT1:
+ case EN_ROTT2:
+ case EN_ROTT3:
+ queueSceneSwitch(9, 0, "wr2_benr.san", 64, 0, 0, 0);
+ break;
+ case EN_VULTF1:
+ case EN_VULTM1:
+ case EN_VULTF2:
+ case EN_VULTM2:
+ queueSceneSwitch(9, 0, "wr2_benv.san", 64, 0, 0, 0);
+ break;
+ case EN_CAVEFISH:
+ queueSceneSwitch(9, 0, "wr2_benc.san", 64, 0, 0, 0);
+ break;
+ default:
+ queueSceneSwitch(9, 0, "wr2_ben.san", 64, 0, 0, 0);
+ break;
+ }
+ }
+ _actor[0].act[2].state = 38;
+ }
+ break;
+ case 38:
+ if (_actor[0].act[2].frame >= 36) {
+ _actor[0].act[2].frame = 0;
+ if (_currSceneId == 21) {
+ queueSceneSwitch(23, 0, "benflip.san", 64, 0, 0, 0);
+ } else {
+ switch (_currEnemy) {
+ case EN_ROTT1:
+ case EN_ROTT2:
+ case EN_ROTT3:
+ queueSceneSwitch(9, 0, "wr2_benr.san", 64, 0, 0, 0);
+ break;
+ case EN_VULTF1:
+ case EN_VULTM1:
+ case EN_VULTF2:
+ case EN_VULTM2:
+ queueSceneSwitch(9, 0, "wr2_benv.san", 64, 0, 0, 0);
+ break;
+ case EN_CAVEFISH:
+ queueSceneSwitch(9, 0, "wr2_benc.san", 64, 0, 0, 0);
+ break;
+ default:
+ queueSceneSwitch(9, 0, "wr2_ben.san", 64, 0, 0, 0);
+ break;
+ }
+ }
+ _actor[0].act[2].state = 38;
+ }
+ break;
+ case 34:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].kicking = 0;
+
+ if (!smlayer_actorNeedRedraw(0, 2)) {
+ setBenState();
+ _actor[0].act[2].tilt = 0;
+ // for some reason there is no break at this
+ // place, so tilt gets overriden on next line
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 35:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].kicking = 0;
+
+ if (!smlayer_actorNeedRedraw(0, 2)) {
+ switchBenWeapon();
+ _actor[0].act[2].tilt = 0;
+ }
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 63:
+ smlayer_setActorLayer(0, 2, 5);
+ if (_actor[0].act[2].animTilt) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].animTilt = 0;
+ }
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 64:
+ smlayer_setActorLayer(0, 2, 5);
+ if (_actor[0].act[2].animTilt) {
+ smlayer_setActorFacing(0, 2, 26, 180);
+ _actor[0].act[2].animTilt = 0;
+ }
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 65:
+ smlayer_setActorLayer(0, 2, 5);
+ if (_actor[0].act[2].animTilt) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].animTilt = 0;
+ }
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 66:
+ smlayer_setActorLayer(0, 2, 5);
+ if (_actor[0].act[2].animTilt) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].animTilt = 0;
+ }
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 62:
+ smlayer_setActorLayer(0, 2, 5);
+ if (_actor[0].act[2].animTilt) {
+ smlayer_setActorFacing(0, 2, 25, 180);
+ _actor[0].act[2].animTilt = 0;
+ }
+ _actor[0].weaponClass = 1;
+ _actor[0].kicking = 0;
+ _actor[0].act[2].tilt = calcTilt(_actor[0].tilt);
+ break;
+ case 1:
+ smlayer_setActorLayer(0, 2, 5);
+ _actor[0].weaponClass = 2;
+ _actor[0].kicking = 0;
+
+ switch (_actor[0].tilt) {
+ case -3:
+ if (_actor[0].act[2].animTilt != -3) {
+ smlayer_setActorFacing(0, 2, 6, 180);
+ _actor[0].act[2].animTilt = -3;
+ }
+ break;
+ case -2:
+ if (_actor[0].field_8 == 48)
+ smlayer_setActorFacing(0, 2, 7, 180);
+ _actor[0].act[2].animTilt = -2;
+ break;
+ case -1:
+ if (_actor[0].field_8 == 46)
+ smlayer_setActorFacing(0, 2, 8, 180);
+ _actor[0].act[2].animTilt = -1;
+ break;
+ case 0:
+ if (_actor[0].act[2].animTilt) {
+ smlayer_setActorFacing(0, 2, 9, 180);
+ _actor[0].act[2].animTilt = 0;
+ }
+ break;
+ case 1:
+ if (_actor[0].field_8 == 49)
+ smlayer_setActorFacing(0, 2, 10, 180);
+ _actor[0].act[2].animTilt = 1;
+ break;
+ case 2:
+ if (_actor[0].field_8 == 51)
+ smlayer_setActorFacing(0, 2, 11, 180);
+ _actor[0].act[2].animTilt = 2;
+ break;
+ case 3:
+ if (_actor[0].act[2].animTilt != 3) {
+ smlayer_setActorFacing(0, 2, 12, 180);
+ _actor[0].act[2].animTilt = 3;
+ }
+ break;
+ default:
+ break;
+ }
+ _actor[0].act[2].tilt = 0;
+ break;
+ default:
+ break;
+ }
+ tmp = _actor[0].x + _actor[0].act[2].tilt + 17 + _actor[0].x1;
+ tmp2 = _actor[0].y + _actor[0].y1 - 98;
+
+ if (_actor[0].act[2].room)
+ smlayer_putActor(0, 2, tmp, tmp2, _smlayer_room2);
+ else
+ smlayer_putActor(0, 2, tmp, tmp2, _smlayer_room);
+}
+
+// Bike
+void Insane::actor00Reaction(int32 buttons) {
+ int32 tmpx, tmpy;
+
+ switch (_actor[0].tilt) {
+ case -3:
+ if (_actor[0].act[0].state != 41) {
+ smlayer_setActorFacing(0, 0, 6, 180);
+ _actor[0].act[0].state = 41;
+ }
+ break;
+ case -2:
+ if (_actor[0].act[0].state != 40) {
+ smlayer_setActorFacing(0, 0, 7, 180);
+ _actor[0].act[0].state = 40;
+ }
+ break;
+ case -1:
+ if (_actor[0].act[0].state != 39) {
+ smlayer_setActorFacing(0, 0, 8, 180);
+ _actor[0].act[0].state = 39;
+ }
+ break;
+ case 0:
+ if (_actor[0].act[0].state != 1) {
+ smlayer_setActorFacing(0, 0, 9, 180);
+ _actor[0].act[0].state = 1;
+ }
+ break;
+ case 1:
+ if (_actor[0].act[0].state != 55) {
+ smlayer_setActorFacing(0, 0, 10, 180);
+ _actor[0].act[0].state = 55;
+ }
+ break;
+ case 2:
+ if (_actor[0].act[0].state != 56) {
+ smlayer_setActorFacing(0, 0, 11, 180);
+ _actor[0].act[0].state = 56;
+ }
+ break;
+ case 3:
+ if (_actor[0].act[0].state != 57) {
+ smlayer_setActorFacing(0, 0, 12, 180);
+ _actor[0].act[0].state = 57;
+ }
+ break;
+ default:
+ break;
+ }
+ tmpx = _actor[0].x + _actor[0].x1;
+ tmpy = _actor[0].y + _actor[0].y1;
+
+ if (_actor[0].act[0].room)
+ smlayer_putActor(0, 0, tmpx, tmpy, _smlayer_room2);
+ else
+ smlayer_putActor(0, 0, tmpx, tmpy, _smlayer_room);
+}
+
+// Bike top
+void Insane::actor01Reaction(int32 buttons) {
+ int32 tmpx, tmpy;
+
+ chooseBenWeaponAnim(buttons);
+
+ switch (_actor[0].tilt) {
+ case -3:
+ if (_actor[0].act[1].state != 41 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
+ setBenAnimation(0, 6);
+ _actor[0].act[1].state = 41;
+ }
+
+ if (_actor[0].cursorX >= -100) {
+ setBenAnimation(0, 7);
+ _actor[0].act[1].state = 40;
+ _actor[0].field_8 = 48;
+ _actor[0].tilt = -2;
+ }
+ break;
+ case -2:
+ if (_actor[0].act[1].state != 40 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
+ setBenAnimation(0, 7);
+ _actor[0].act[1].state = 40;
+ }
+ if (_actor[0].field_8 == 48)
+ _actor[0].tilt = -1;
+ else
+ _actor[0].tilt = -3;
+ break;
+ case -1:
+ if (_actor[0].act[1].state != 39 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
+ setBenAnimation(0, 8);
+ _actor[0].act[1].state = 39;
+ }
+
+ if (_actor[0].field_8 == 48)
+ _actor[0].tilt = 0;
+ else
+ _actor[0].tilt = -2;
+ break;
+ case 0:
+ if (_actor[0].act[1].state != 1 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
+ setBenAnimation(0, 9);
+ _actor[0].act[1].state = 1;
+ }
+ _actor[0].field_8 = 1;
+ if (_actor[0].cursorX < -100) {
+ setBenAnimation(0, 8);
+ _actor[0].act[1].state = 39;
+ _actor[0].field_8 = 46;
+ _actor[0].tilt = -1;
+ } else {
+ if (_actor[0].cursorX > 100) {
+ setBenAnimation(0, 10);
+ _actor[0].act[1].state = 55;
+ _actor[0].field_8 = 49;
+ _actor[0].tilt = 1;
+ }
+ }
+ break;
+ case 1:
+ if (_actor[0].act[1].state != 55 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
+ setBenAnimation(0, 10);
+ _actor[0].act[1].state = 55;
+ }
+ if (_actor[0].field_8 == 51)
+ _actor[0].tilt = 0;
+ else
+ _actor[0].tilt = 2;
+ break;
+ case 2:
+ if (_actor[0].act[1].state != 56 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
+ setBenAnimation(0, 11);
+ _actor[0].act[1].state = 56;
+ }
+ if (_actor[0].field_8 == 51)
+ _actor[0].tilt = 1;
+ else
+ _actor[0].tilt = 3;
+ break;
+ case 3:
+ if (_actor[0].act[1].state != 57 || _actor[0].weaponClass != _actor[0].animWeaponClass) {
+ setBenAnimation(0, 12);
+ _actor[0].act[1].state = 57;
+ }
+
+ if (_actor[0].cursorX <= 100) {
+ setBenAnimation(0, 11);
+ _actor[0].act[1].state = 56;
+ _actor[0].field_8 = 51;
+ _actor[0].tilt = 2;
+ }
+ break;
+ }
+
+ if (_actor[0].field_38 != _actor[0].field_34) {
+ if (_actor[0].field_34 == 2)
+ smlayer_setActorFacing(0, 1, 28, 180);
+ else
+ smlayer_setActorFacing(0, 1, 27, 180);
+ }
+
+ tmpx = _actor[0].x + _actor[0].x1;
+ tmpy = _actor[0].y + _actor[0].y1;
+
+ if (_actor[0].act[1].room)
+ smlayer_putActor(0, 1, tmpx, tmpy, _smlayer_room2);
+ else
+ smlayer_putActor(0, 1, tmpx, tmpy, _smlayer_room);
+
+ _actor[0].animWeaponClass = _actor[0].weaponClass;
+ _actor[0].field_38 = _actor[0].field_34;
+}
+
+void Insane::actor03Reaction(int32 buttons) {
+ int32 tmp;
+
+ switch (_actor[0].act[3].state) {
+ case 117:
+ reinitActors();
+ smlayer_setActorFacing(0, 3, 13, 180);
+ _actor[0].act[3].state = 69;
+ break;
+ case 69:
+ if (_actor[0].act[3].frame >= 2)
+ _actor[0].act[3].state = 70;
+ break;
+ case 70:
+ if (_actor[0].scenePropSubIdx) {
+ smlayer_setActorFacing(0, 3, 4, 180);
+ tmp = _currScenePropIdx + _actor[0].scenePropSubIdx;
+ if (!smlayer_startSound2(_sceneProp[tmp].sound))
+ _actor[0].runningSound = 0;
+ else
+ _actor[0].runningSound = _sceneProp[tmp].sound;
+ _actor[0].act[3].state = 72;
+ } else {
+ _actor[0].act[3].state = 118;
+ }
+ break;
+ case 72:
+ if (_actor[0].runningSound) {
+ if (!smlayer_isSoundRunning(_actor[0].runningSound)) {
+ smlayer_setActorFacing(0, 3, 5, 180);
+ _actor[0].act[3].state = 70;
+ _actor[0].scenePropSubIdx = 0;
+ }
+ } else {
+ tmp = _currScenePropIdx + _actor[0].scenePropSubIdx;
+ if (_sceneProp[tmp].counter >= _sceneProp[tmp].maxCounter) {
+ smlayer_setActorFacing(0, 3, 5, 180);
+ _actor[0].act[3].state = 70;
+ _actor[0].scenePropSubIdx = 0;
+ _actor[0].runningSound = 0;
+ }
+ }
+ break;
+ case 118:
+ smlayer_setActorFacing(0, 3, 14, 180);
+ _actor[0].act[3].state = 71;
+ break;
+ case 71:
+ _actor[0].field_54 = 0;
+ if (_actor[0].act[3].frame >= 2)
+ _actor[0].act[3].state = 1;
+ break;
+ case 52:
+ if (_actor[0].runningSound)
+ smlayer_stopSound(_actor[0].runningSound);
+
+ if (_currScenePropIdx)
+ shutCurrentScene();
+
+ _actor[0].runningSound = 0;
+ _actor[0].defunct = 0;
+ _actor[0].field_54 = 0;
+ smlayer_setActorFacing(0, 3, 15, 180);
+ _actor[0].act[3].state = 53;
+ break;
+ case 53:
+ if (_actor[0].act[3].frame >= 2) {
+ smlayer_setActorFacing(0, 3, 16, 180);
+ _actor[0].act[3].state = 54;
+ }
+ break;
+ case 54:
+ break;
+ case 1:
+ _actor[0].field_54 = 0;
+ break;
+ default:
+ break;
+ }
+}
+
+void Insane::chooseBenWeaponAnim(int buttons) {
+ // kick
+ if ((buttons & 1) && (_currEnemy != EN_TORQUE)) {
+ if (!_kickBenProgress && actor0StateFlags2(_actor[0].act[2].state + _actor[0].weapon * 238)) {
+ switch (_actor[0].weapon) {
+ case INV_CHAIN:
+ _actor[0].act[2].state = 10;
+ break;
+ case INV_CHAINSAW:
+ _actor[0].act[2].state = 14;
+ break;
+ case INV_MACE:
+ _actor[0].act[2].state = 18;
+ break;
+ case INV_2X4:
+ _actor[0].act[2].state = 22;
+ break;
+ case INV_WRENCH:
+ _actor[0].act[2].state = 26;
+ break;
+ case INV_BOOT:
+ _actor[0].act[2].state = 6;
+ break;
+ case INV_HAND:
+ _actor[0].act[2].state = 2;
+ break;
+ case INV_DUST:
+ _actor[0].act[2].state = 30;
+ break;
+ default:
+ break;
+ }
+ _actor[0].kicking = 1;
+ _kickBenProgress = true;
+ }
+ } else {
+ _kickBenProgress = false;
+ }
+
+ // switch weapon
+ if ((buttons & 2) && (_currEnemy != EN_TORQUE)) {
+ if (_weaponBenJustSwitched)
+ return;
+
+ if (!actor0StateFlags1(_actor[0].act[2].state))
+ return;
+
+ switch (_actor[0].weapon) {
+ case INV_CHAIN:
+ case INV_CHAINSAW:
+ case INV_MACE:
+ case INV_2X4:
+ case INV_WRENCH:
+ _actor[0].act[2].state = 35;
+ smlayer_setActorFacing(0, 2, 24, 180);
+ break;
+ case INV_BOOT:
+ case INV_HAND:
+ case INV_DUST:
+ _actor[0].act[2].state = 0;
+ switchBenWeapon();
+ }
+
+ _weaponBenJustSwitched = true;
+ } else {
+ _weaponBenJustSwitched = false;
+ }
+}
+
+void Insane::switchBenWeapon(void) {
+ do {
+ _actor[0].weapon++;
+ if (_actor[0].weapon > 7)
+ _actor[0].weapon = INV_CHAIN;
+
+ } while (!_actor[0].inventory[_actor[0].weapon]);
+
+ switch (_actor[0].weapon) {
+ case INV_CHAIN:
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 20));
+ smlayer_setActorFacing(0, 2, 18, 180);
+ _actor[0].weaponClass = 0;
+ _actor[0].act[2].state = 34;
+ break;
+ case INV_CHAINSAW:
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 24));
+ smlayer_setActorFacing(0, 2, 18, 180);
+ _actor[0].weaponClass = 0;
+ _actor[0].act[2].state = 34;
+ break;
+ case INV_MACE:
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 23));
+ smlayer_setActorFacing(0, 2, 18, 180);
+ _actor[0].weaponClass = 0;
+ _actor[0].act[2].state = 34;
+ break;
+ case INV_2X4:
+ if (_currEnemy == EN_CAVEFISH)
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 38));
+ else
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 19));
+
+ smlayer_setActorFacing(0, 2, 18, 180);
+ _actor[0].weaponClass = 0;
+ _actor[0].act[2].state = 34;
+ break;
+ case INV_WRENCH:
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 25));
+ smlayer_setActorFacing(0, 2, 18, 180);
+ _actor[0].weaponClass = 0;
+ _actor[0].act[2].state = 34;
+ break;
+ case INV_BOOT:
+ case INV_HAND:
+ case INV_DUST:
+ smlayer_setActorCostume(0, 2, readArray(_numberArray, 12));
+ _actor[0].weaponClass = 2;
+ _actor[0].act[2].state = 1;
+ break;
+ default:
+ break;
+ }
+}
+
+int32 Insane::setBenState(void) {
+ _actor[0].act[2].animTilt = -1000;
+
+ switch (_actor[0].weapon) {
+ case INV_CHAIN:
+ _actor[0].weaponClass = 1;
+ _actor[0].act[2].state = 63;
+ break;
+ case INV_CHAINSAW:
+ _actor[0].weaponClass = 1;
+ _actor[0].act[2].state = 64;
+ break;
+ case INV_MACE:
+ _actor[0].weaponClass = 1;
+ _actor[0].act[2].state = 65;
+ break;
+ case INV_2X4:
+ _actor[0].weaponClass = 1;
+ _actor[0].act[2].state = 66;
+ break;
+ case INV_WRENCH:
+ _actor[0].weaponClass = 1;
+ _actor[0].act[2].state = 62;
+ break;
+ case INV_BOOT:
+ case INV_HAND:
+ case INV_DUST:
+ _actor[0].weaponClass = 2;
+ _actor[0].act[2].state = 1;
+ break;
+ default:
+ break;
+ }
+ return _actor[0].act[2].state;
+}
+
+void Insane::ouchSoundBen(void) {
+ _actor[0].act[3].state = 52;
+
+ switch (rand() % 4) {
+ case 0:
+ smlayer_startSound2(315);
+ break;
+ case 1:
+ smlayer_startSound2(316);
+ break;
+ case 2:
+ smlayer_startSound2(317);
+ break;
+ case 3:
+ smlayer_startSound2(98);
+ break;
+ }
+}
+
+}