745 lines
18 KiB
C++
745 lines
18 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#include "chewy/cursor.h"
|
|
#include "chewy/defines.h"
|
|
#include "chewy/events.h"
|
|
#include "chewy/globals.h"
|
|
#include "chewy/room.h"
|
|
#include "chewy/rooms/room97.h"
|
|
#include "chewy/sound.h"
|
|
|
|
namespace Chewy {
|
|
namespace Rooms {
|
|
|
|
int Room97::_word18DB2E;
|
|
bool Room97::_slimeThrown;
|
|
bool Room97::_bool18DB32;
|
|
int Room97::_word18DB34;
|
|
int Room97::_word18DB36;
|
|
int Room97::_word18DB38;
|
|
bool Room97::_bool18DB3A;
|
|
|
|
void Room97::entry() {
|
|
_G(det)->playSound(0, 0);
|
|
_G(SetUpScreenFunc) = setup_func;
|
|
_G(zoom_horizont) = 0;
|
|
|
|
_G(spieler_mi)[P_HOWARD].Mode = true;
|
|
_G(spieler_mi)[P_NICHELLE].Mode = true;
|
|
_G(gameState).ZoomXy[P_NICHELLE][0] = 24;
|
|
_G(gameState).ZoomXy[P_NICHELLE][1] = 43;
|
|
_G(gameState).ZoomXy[P_HOWARD][0] = 24;
|
|
_G(gameState).ZoomXy[P_HOWARD][1] = 42;
|
|
|
|
_bool18DB32 = false;
|
|
_G(gameState)._personRoomNr[P_NICHELLE] = 97;
|
|
_G(zoom_mov_fak) = 0;
|
|
_G(gameState).ScrollxStep = 2;
|
|
_G(det)->hideStaticSpr(14);
|
|
|
|
if (_G(gameState).flags36_2) {
|
|
_G(det)->hideStaticSpr(14);
|
|
_G(det)->hideStaticSpr(18);
|
|
|
|
if (!_G(gameState).flags36_4)
|
|
_G(det)->showStaticSpr(17);
|
|
}
|
|
|
|
if (_G(gameState).flags36_10) {
|
|
_G(det)->startDetail(11, 255, ANI_FRONT);
|
|
_G(det)->stopDetail(5);
|
|
_G(det)->startDetail(6, 255, ANI_FRONT);
|
|
_G(det)->startDetail(12, 255, ANI_FRONT);
|
|
}
|
|
|
|
if (_G(gameState).flags36_40) {
|
|
_G(det)->startDetail(14, 255, ANI_FRONT);
|
|
_G(det)->showStaticSpr(13);
|
|
_G(atds)->delControlBit(543, ATS_ACTIVE_BIT);
|
|
} else {
|
|
_G(atds)->setControlBit(543, ATS_ACTIVE_BIT);
|
|
}
|
|
|
|
if (_G(gameState).flags36_20) {
|
|
_G(det)->setDetailPos(27, 272, 110);
|
|
for (int i = 0; i < 2; ++i) {
|
|
_G(det)->stopDetail(23 + i);
|
|
_G(det)->startDetail(27 + i, 255, ANI_FRONT);
|
|
}
|
|
_G(det)->stopSound(0);
|
|
_G(det)->stopSound(0);
|
|
_G(det)->stopSound(0);
|
|
}
|
|
|
|
if (_G(gameState).flags37_1)
|
|
_G(det)->showStaticSpr(19);
|
|
|
|
if (_G(gameState).flags37_4)
|
|
_G(det)->showStaticSpr(20);
|
|
|
|
_word18DB2E = 0;
|
|
_word18DB34 = 332;
|
|
_word18DB36 = 110;
|
|
_word18DB38 = 132;
|
|
|
|
if (_G(flags).LoadGame)
|
|
return;
|
|
|
|
if (_G(gameState).flags37_8) {
|
|
hideCur();
|
|
_G(out)->setPointer(nullptr);
|
|
_G(out)->cls();
|
|
|
|
_G(gameState)._personRoomNr[P_HOWARD] = _G(gameState)._personRoomNr[P_NICHELLE] = 89;
|
|
_G(gameState).SVal2 = 0;
|
|
_G(gameState).flags35_4 = true;
|
|
_G(gameState)._personHide[P_CHEWY] = true;
|
|
startSetAILWait(19, 1, ANI_FRONT);
|
|
_G(gameState)._personHide[P_CHEWY] = false;
|
|
showCur();
|
|
switchRoom(89);
|
|
} else {
|
|
_G(gameState).scrollx = 800;
|
|
setPersonPos(1067, 98, P_CHEWY, P_LEFT);
|
|
setPersonPos(1092, 83, P_HOWARD, P_LEFT);
|
|
setPersonPos(130, 29, P_NICHELLE, P_RIGHT);
|
|
}
|
|
}
|
|
|
|
void Room97::xit() {
|
|
_G(gameState).ScrollxStep = 1;
|
|
}
|
|
|
|
void Room97::gedAction(int index) {
|
|
switch (index) {
|
|
case 50:
|
|
proc2();
|
|
break;
|
|
case 51:
|
|
proc3();
|
|
break;
|
|
case 52:
|
|
proc13();
|
|
break;
|
|
case 53:
|
|
proc12();
|
|
break;
|
|
case 54:
|
|
proc4();
|
|
break;
|
|
case 55:
|
|
if (_G(gameState).flags36_20)
|
|
auto_scroll(268, 0);
|
|
break;
|
|
case 56:
|
|
sensorAnim();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Room97::setup_func() {
|
|
_G(spieler_mi)[P_CHEWY].Vorschub = 4;
|
|
_G(spieler_mi)[P_HOWARD].Vorschub = 6;
|
|
_G(spieler_mi)[P_NICHELLE].Vorschub = 4;
|
|
|
|
if (_G(gameState).flags35_80 && _G(moveState)->Xypos[P_CHEWY] > 830)
|
|
setPersonPos(830, 98, P_CHEWY, P_RIGHT);
|
|
|
|
if (_word18DB2E)
|
|
--_word18DB2E;
|
|
else {
|
|
_word18DB2E = _G(gameState).DelaySpeed / 2;
|
|
if (_word18DB34 != 710)
|
|
_word18DB34 += 2;
|
|
else if (_word18DB36 < 200) {
|
|
_word18DB36 += 2;
|
|
_word18DB38 += 2;
|
|
} else {
|
|
if (!_G(gameState).flags36_8) {
|
|
_word18DB34 = 332;
|
|
_word18DB36 = _G(gameState).flags36_10 ? 106 : 110;
|
|
}
|
|
_bool18DB3A = true;
|
|
}
|
|
|
|
if (_bool18DB3A) {
|
|
if (_word18DB38 <= 132)
|
|
_bool18DB3A = false;
|
|
else
|
|
_word18DB38 -= 2;
|
|
}
|
|
|
|
_G(det)->setStaticPos(16, 699, _word18DB38, false, false);
|
|
if (_G(gameState).flags36_10) {
|
|
_G(det)->setDetailPos(12, _word18DB34, _word18DB36);
|
|
} else {
|
|
_G(det)->setStaticPos(14, _word18DB34, _word18DB36, false, false);
|
|
}
|
|
}
|
|
|
|
if (_G(gameState).flags37_1 && _G(menu_item) == CUR_WALK) {
|
|
if (_G(gameState).scrollx + g_events->_mousePos.x >= 487 && _G(gameState).scrollx + g_events->_mousePos.x <= 522 && g_events->_mousePos.y >= 23 && g_events->_mousePos.y <= 59)
|
|
cursorChoice(CUR_EXIT_TOP);
|
|
else
|
|
cursorChoice(CUR_WALK);
|
|
}
|
|
|
|
calc_person_look();
|
|
|
|
const int chewyPosX = _G(moveState)[P_CHEWY].Xypos[0];
|
|
if (!_G(gameState).flags36_80) {
|
|
int destX, destY;
|
|
|
|
if (chewyPosX > 980) {
|
|
destX = 1080;
|
|
destY = 91;
|
|
} else if (chewyPosX > 880) {
|
|
destX = 994;
|
|
destY = 98;
|
|
} else if (chewyPosX > 780) {
|
|
destX = 824;
|
|
destY = 80;
|
|
} else if (chewyPosX > 650) {
|
|
destX = 758;
|
|
destY = 121;
|
|
} else if (chewyPosX > 420) {
|
|
destX = 590;
|
|
destY = 111;
|
|
} else {
|
|
destX = 412;
|
|
destY = 112;
|
|
}
|
|
|
|
if (_G(HowardMov) != 1)
|
|
goAutoXy(destX, destY, P_HOWARD, ANI_GO);
|
|
}
|
|
|
|
if (!_bool18DB32)
|
|
return;
|
|
|
|
int destX = -1;
|
|
int destY = -1;
|
|
const int nichellePosX = _G(moveState)[P_NICHELLE].Xypos[0];
|
|
if (chewyPosX > 250 && nichellePosX < 232) {
|
|
destX = 232;
|
|
destY = 27;
|
|
} else if (nichellePosX >= 249) {
|
|
destX = 370;
|
|
destY = 20;
|
|
} else if (nichellePosX >= 232) {
|
|
destX = 249;
|
|
destY = 20;
|
|
}
|
|
|
|
if (destX != -1)
|
|
goAutoXy(destX, destY, P_NICHELLE, ANI_GO);
|
|
}
|
|
|
|
void Room97::proc2() {
|
|
if (_G(flags).AutoAniPlay)
|
|
return;
|
|
|
|
_G(flags).AutoAniPlay = true;
|
|
stopPerson(P_CHEWY);
|
|
hideCur();
|
|
_G(Sdi)[6].z_ebene = 6;
|
|
_G(Sdi)[24].z_ebene = 6;
|
|
_G(gameState).flags36_1 = false;
|
|
_G(spieler_mi)[P_CHEWY].Mode = true;
|
|
goAutoXy(455, 59, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(496, 99, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(530, 99, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(572, 139, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(588, 129, P_CHEWY, ANI_WAIT);
|
|
_G(spieler_mi)[P_CHEWY].Mode = false;
|
|
_G(Sdi)[6].z_ebene = 166;
|
|
_G(Sdi)[24].z_ebene = 157;
|
|
showCur();
|
|
_G(flags).AutoAniPlay = false;
|
|
}
|
|
|
|
void Room97::proc3() {
|
|
if (_G(flags).AutoAniPlay)
|
|
return;
|
|
|
|
_G(flags).AutoAniPlay = true;
|
|
hideCur();
|
|
stopPerson(P_CHEWY);
|
|
_G(spieler_mi)[P_CHEWY].Mode = true;
|
|
|
|
if (!_G(gameState).flags36_20) {
|
|
start_spz(CH_TALK5, 255, false, P_CHEWY);
|
|
startAadWait(557);
|
|
goAutoXy(588, 129, P_CHEWY, ANI_WAIT);
|
|
} else if (!_G(gameState).flags36_40) {
|
|
start_spz(CH_TALK5, 255, false, P_CHEWY);
|
|
startAadWait(568);
|
|
goAutoXy(588, 129, P_CHEWY, ANI_WAIT);
|
|
} else {
|
|
_G(gameState).flags36_1 = true;
|
|
_G(HowardMov) = 1;
|
|
goAutoXy(572, 139, P_CHEWY, ANI_WAIT);
|
|
_G(Sdi)[6].z_ebene = 6;
|
|
_G(Sdi)[24].z_ebene = 6;
|
|
|
|
goAutoXy(530, 99, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(496, 99, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(455, 59, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(440, 52, P_CHEWY, ANI_WAIT);
|
|
if (!_G(gameState).flags36_80) {
|
|
goAutoXy(572, 122, P_HOWARD, ANI_WAIT);
|
|
goAutoXy(526, 83, P_HOWARD, ANI_WAIT);
|
|
goAutoXy(500, 83, P_HOWARD, ANI_WAIT);
|
|
}
|
|
|
|
autoMove(6, P_CHEWY);
|
|
if (!_G(gameState).flags36_80) {
|
|
goAutoXy(442, 35, P_HOWARD, ANI_WAIT);
|
|
goAutoXy(497, 31, P_HOWARD, ANI_WAIT);
|
|
startAadWait(562);
|
|
}
|
|
_G(spieler_mi)[P_CHEWY].Mode = false;
|
|
_G(Sdi)[6].z_ebene = 166;
|
|
_G(Sdi)[24].z_ebene = 157;
|
|
_G(gameState).flags36_80 = true;
|
|
}
|
|
showCur();
|
|
_G(flags).AutoAniPlay = false;
|
|
}
|
|
|
|
void Room97::proc4() {
|
|
if (_G(flags).AutoAniPlay)
|
|
return;
|
|
|
|
if (!_G(gameState).flags35_80) {
|
|
_G(flags).AutoAniPlay = true;
|
|
hideCur();
|
|
_G(spieler_mi)[P_CHEWY].Mode = true;
|
|
stopPerson(P_CHEWY);
|
|
_G(det)->playSound(9, 0);
|
|
_G(det)->stopSound(1);
|
|
startSetAILWait(9, 1, ANI_FRONT);
|
|
_G(det)->showStaticSpr(21);
|
|
|
|
while (_G(moveState)[P_HOWARD].Xypos[0] > 996) {
|
|
setupScreen(DO_SETUP);
|
|
SHOULD_QUIT_RETURN;
|
|
}
|
|
|
|
_G(det)->showStaticSpr(2);
|
|
_G(HowardMov) = 1;
|
|
|
|
goAutoXy(967, 111, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(1008, 93, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(1037, 90, P_CHEWY, ANI_WAIT);
|
|
|
|
goAutoXy(995, 77, P_HOWARD, ANI_WAIT);
|
|
goAutoXy(1047, 87, P_HOWARD, ANI_WAIT);
|
|
|
|
startSetAILWait(29, 1, ANI_FRONT);
|
|
_G(det)->hideStaticSpr(21);
|
|
_G(det)->playSound(9, 1);
|
|
_G(det)->stopSound(0);
|
|
startSetAILWait(9, 0, ANI_BACK);
|
|
|
|
goAutoXy(1008, 93, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(967, 111, P_CHEWY, ANI_WAIT);
|
|
goAutoXy(995, 82, P_HOWARD, ANI_WAIT);
|
|
_G(det)->hideStaticSpr(2);
|
|
_G(spieler_mi)[P_CHEWY].Mode = false;
|
|
start_spz(CH_TALK5, 255, false, P_CHEWY);
|
|
startAadWait(553);
|
|
_G(HowardMov) = 0;
|
|
showCur();
|
|
}
|
|
|
|
_G(flags).AutoAniPlay = false;
|
|
}
|
|
|
|
int Room97::proc5() {
|
|
if (!isCurInventory(114))
|
|
return 0;
|
|
|
|
hideCur();
|
|
autoMove(0, P_CHEWY);
|
|
auto_scroll(800, 0);
|
|
|
|
while (_G(moveState)[P_HOWARD].Xypos[0] < 1080) {
|
|
setupScreen(DO_SETUP);
|
|
SHOULD_QUIT_RETURN0;
|
|
}
|
|
|
|
flic_cut(FCUT_122);
|
|
register_cutscene(34);
|
|
|
|
_G(det)->playSound(0, 0);
|
|
_G(gameState).scrollx = 720;
|
|
setPersonPos(822, 98, P_CHEWY, P_LEFT);
|
|
setPersonPos(861, 81, P_HOWARD, P_LEFT);
|
|
delInventory(_G(cur)->getInventoryCursor());
|
|
_G(det)->showStaticSpr(21);
|
|
_G(gameState).flags35_80 = true;
|
|
startAadWait(546);
|
|
_G(det)->hideStaticSpr(21);
|
|
_G(det)->playSound(9, 1);
|
|
_G(det)->stopSound(0);
|
|
startSetAILWait(9, 0, ANI_GO);
|
|
|
|
showCur();
|
|
return 1;
|
|
}
|
|
|
|
int Room97::proc6() {
|
|
if (_G(cur)->usingInventoryCursor())
|
|
return 0;
|
|
|
|
hideCur();
|
|
autoMove(1, P_CHEWY);
|
|
_G(spieler_mi)[P_CHEWY].Mode = true;
|
|
goAutoXy(298, 120, P_CHEWY, ANI_WAIT);
|
|
setPersonSpr(P_LEFT, P_CHEWY);
|
|
start_spz_wait(CH_LGET_O, 1, false, P_CHEWY);
|
|
_G(det)->hideStaticSpr(15);
|
|
startSetAILWait(1, 1, ANI_FRONT);
|
|
_G(det)->showStaticSpr(28);
|
|
autoMove(1, P_CHEWY);
|
|
_G(det)->hideStaticSpr(18);
|
|
startSetAILWait(15, 1, ANI_FRONT);
|
|
_G(det)->showStaticSpr(17);
|
|
start_spz(CH_TALK5, 255, false, P_CHEWY);
|
|
startAadWait(558);
|
|
_G(det)->hideStaticSpr(28);
|
|
_G(det)->stopDetail(5);
|
|
_G(det)->showStaticSpr(15);
|
|
_G(gameState).flags36_2 = true;
|
|
_G(atds)->delControlBit(538, ATS_ACTIVE_BIT);
|
|
_G(atds)->setControlBit(531, ATS_ACTIVE_BIT);
|
|
_G(atds)->set_all_ats_str(530, 1, ATS_DATA);
|
|
_G(atds)->setControlBit(532, ATS_ACTIVE_BIT);
|
|
_G(spieler_mi)[P_CHEWY].Mode = false;
|
|
_G(gameState).flags36_8 = true;
|
|
|
|
showCur();
|
|
return 1;
|
|
}
|
|
|
|
int Room97::proc7() {
|
|
if (_G(cur)->usingInventoryCursor())
|
|
return 0;
|
|
|
|
hideCur();
|
|
autoMove(2, P_CHEWY);
|
|
_G(spieler_mi)[P_CHEWY].Mode = true;
|
|
_G(gameState)._personHide[P_CHEWY] = true;
|
|
_G(det)->hideStaticSpr(17);
|
|
startSetAILWait(22, 1, ANI_FRONT);
|
|
_G(atds)->setControlBit(538, ATS_ACTIVE_BIT);
|
|
_G(atds)->set_all_ats_str(530, 2, ATS_DATA);
|
|
new_invent_2_cur(SLIME_INV);
|
|
_G(gameState).flags36_4 = true;
|
|
setPersonPos(304, 102, P_CHEWY, P_RIGHT);
|
|
_G(gameState)._personHide[P_CHEWY] = false;
|
|
autoMove(1, P_CHEWY);
|
|
_G(spieler_mi)[P_CHEWY].Mode = false;
|
|
|
|
showCur();
|
|
return 1;
|
|
}
|
|
|
|
int Room97::proc8() {
|
|
if (!isCurInventory(94))
|
|
return 0;
|
|
|
|
hideCur();
|
|
autoMove(2, P_CHEWY);
|
|
int diaNr = -1;
|
|
if (!_G(gameState).flags36_2)
|
|
diaNr = 559;
|
|
else if (!_G(gameState).flags36_4)
|
|
diaNr = 560;
|
|
else {
|
|
start_spz_wait(14, 1, false, P_CHEWY);
|
|
_G(det)->startDetail(11, 255, false);
|
|
delInventory(_G(cur)->getInventoryCursor());
|
|
_G(gameState).flags36_10 = true;
|
|
_G(gameState).flags36_8 = false;
|
|
_G(det)->startDetail(12, 255, false);
|
|
_G(atds)->set_all_ats_str(530, 3, ATS_DATA);
|
|
_G(atds)->delControlBit(532, ATS_ACTIVE_BIT);
|
|
_G(atds)->set_all_ats_str(532, 1, ATS_DATA);
|
|
_G(det)->startDetail(6, 255, false);
|
|
_G(det)->hideStaticSpr(14);
|
|
autoMove(3, P_CHEWY);
|
|
auto_scroll(406, 0);
|
|
waitShowScreen(40);
|
|
_G(det)->stopDetail(24);
|
|
_G(det)->playSound(26, 0);
|
|
startSetAILWait(25, 1, ANI_FRONT);
|
|
_G(det)->startDetail(26, 255, false);
|
|
_G(det)->stopDetail(23);
|
|
_G(det)->startDetail(27, 255, false);
|
|
waitShowScreen(80);
|
|
autoMove(4, P_CHEWY);
|
|
auto_scroll(646, 0);
|
|
startAadWait(566);
|
|
waitShowScreen(60);
|
|
startAadWait(567);
|
|
_G(det)->stopDetail(26);
|
|
_G(det)->stopDetail(27);
|
|
_G(gameState).flags36_20 = true;
|
|
_G(det)->startDetail(28, 255, false);
|
|
_G(det)->setDetailPos(27, 272, 110);
|
|
_G(det)->startDetail(27, 255, false);
|
|
_G(atds)->setControlBit(533, ATS_ACTIVE_BIT);
|
|
_G(atds)->setControlBit(534, ATS_ACTIVE_BIT);
|
|
}
|
|
|
|
if (diaNr != -1) {
|
|
start_spz(CH_TALK5, 255, false, P_CHEWY);
|
|
startAadWait(diaNr);
|
|
}
|
|
|
|
showCur();
|
|
return 1;
|
|
}
|
|
|
|
int Room97::proc9() {
|
|
if (_G(cur)->usingInventoryCursor())
|
|
return 0;
|
|
|
|
hideCur();
|
|
autoMove(5, P_CHEWY);
|
|
|
|
if (!_G(gameState).flags36_20) {
|
|
start_spz(CH_TALK5, 255, false, P_CHEWY);
|
|
startAadWait(556);
|
|
} else {
|
|
start_spz_wait(13, 1, false, P_CHEWY);
|
|
startSetAILWait(0, 1, ANI_FRONT);
|
|
_G(det)->showStaticSpr(13);
|
|
startSetAILWait(13, 1, ANI_FRONT);
|
|
_G(det)->startDetail(14, 255, false);
|
|
startAadWait(555);
|
|
_G(gameState).flags36_40 = true;
|
|
_G(atds)->setControlBit(539, ATS_ACTIVE_BIT);
|
|
_G(atds)->delControlBit(537, ATS_ACTIVE_BIT);
|
|
_G(atds)->delControlBit(535, ATS_ACTIVE_BIT);
|
|
_G(atds)->delControlBit(543, ATS_ACTIVE_BIT);
|
|
}
|
|
|
|
showCur();
|
|
return 1;
|
|
}
|
|
|
|
int Room97::proc10() {
|
|
if (_G(cur)->usingInventoryCursor())
|
|
return 0;
|
|
|
|
hideCur();
|
|
autoMove(8, P_CHEWY);
|
|
start_spz_wait(13, 1, false, P_CHEWY);
|
|
_G(det)->playSound(7, 0);
|
|
_G(det)->stopSound(1);
|
|
startSetAILWait(7, 1, ANI_FRONT);
|
|
_G(det)->showStaticSpr(19);
|
|
_G(gameState).flags37_1 = true;
|
|
_G(atds)->setControlBit(543, ATS_ACTIVE_BIT);
|
|
_G(menu_item) = CUR_WALK;
|
|
cursorChoice(CUR_WALK);
|
|
|
|
showCur();
|
|
return 1;
|
|
}
|
|
|
|
int Room97::proc11() {
|
|
if (_G(cur)->usingInventoryCursor())
|
|
return 0;
|
|
|
|
hideCur();
|
|
|
|
if (!_G(gameState).flags37_2) {
|
|
start_spz(CH_TALK5, 255, false, P_CHEWY);
|
|
startAadWait(569);
|
|
} else {
|
|
autoMove(9, P_CHEWY);
|
|
startAadWait(570);
|
|
start_spz_wait(13, 1, false, P_CHEWY);
|
|
autoMove(7, P_CHEWY);
|
|
start_spz(CH_TALK6, 255, false, P_CHEWY);
|
|
startAadWait(571);
|
|
_G(det)->playSound(4, 0);
|
|
_G(det)->startDetail(4, 1, false);
|
|
autoMove(12, P_CHEWY);
|
|
start_spz_wait(64, 1, false, P_CHEWY);
|
|
start_spz(65, 255, false, P_CHEWY);
|
|
startAadWait(561);
|
|
_G(gameState).SVal1 = 97;
|
|
_G(gameState).SVal2 = 523;
|
|
cur_2_inventory();
|
|
_G(gameState).flags37_8 = true;
|
|
switchRoom(92);
|
|
showCur(); // probably useless, but present in the original
|
|
}
|
|
|
|
showCur();
|
|
return 1;
|
|
}
|
|
|
|
void Room97::proc12() {
|
|
if (!_G(gameState).flags37_1) {
|
|
stopPerson(P_CHEWY);
|
|
setPersonPos(491, 42, P_CHEWY, P_RIGHT);
|
|
return;
|
|
}
|
|
|
|
if (_G(flags).AutoAniPlay)
|
|
return;
|
|
|
|
_G(flags).AutoAniPlay = true;
|
|
hideCur();
|
|
stopPerson(P_CHEWY);
|
|
_G(det)->showStaticSpr(26);
|
|
goAutoXy(481, 39, P_CHEWY, ANI_WAIT);
|
|
_G(gameState)._personHide[P_CHEWY] = true;
|
|
setPersonPos(327, 42, P_CHEWY, P_LEFT);
|
|
waitShowScreen(50);
|
|
setPersonPos(347, 42, P_CHEWY, P_LEFT);
|
|
_G(gameState)._personHide[P_CHEWY] = false;
|
|
_G(det)->hideStaticSpr(26);
|
|
_G(spieler_mi)[P_CHEWY].Mode = false;
|
|
showCur();
|
|
_G(flags).AutoAniPlay = false;
|
|
}
|
|
|
|
void Room97::proc13() {
|
|
if (!_G(gameState).flags37_1 || _G(flags).AutoAniPlay)
|
|
return;
|
|
|
|
_G(flags).AutoAniPlay = true;
|
|
hideCur();
|
|
stopPerson(P_CHEWY);
|
|
_G(spieler_mi)[P_CHEWY].Mode = true;
|
|
_G(det)->showStaticSpr(26);
|
|
_G(gameState)._personHide[P_CHEWY] = true;
|
|
setPersonPos(508, 41, P_CHEWY, P_LEFT);
|
|
waitShowScreen(50);
|
|
setPersonPos(488, 41, P_CHEWY, P_LEFT);
|
|
_G(gameState)._personHide[P_CHEWY] = false;
|
|
autoMove(6, P_CHEWY);
|
|
_G(det)->hideStaticSpr(26);
|
|
_G(spieler_mi)[P_CHEWY].Mode = false;
|
|
showCur();
|
|
_G(flags).AutoAniPlay = false;
|
|
}
|
|
|
|
int Room97::throwSlime() {
|
|
if (!isCurInventory(SLIME_INV))
|
|
return 0;
|
|
|
|
_slimeThrown = true;
|
|
hideCur();
|
|
delInventory(_G(cur)->getInventoryCursor());
|
|
_G(menu_item) = CUR_USE;
|
|
cursorChoice(CUR_USE);
|
|
|
|
return 1;
|
|
}
|
|
|
|
void Room97::sensorAnim() {
|
|
if (_G(gameState).flags37_4 || _G(flags).AutoAniPlay)
|
|
return;
|
|
|
|
_G(flags).AutoAniPlay = true;
|
|
stopPerson(P_CHEWY);
|
|
_G(menu_item) = CUR_USE;
|
|
cursorChoice(CUR_USE);
|
|
setPersonPos(294, 42, P_CHEWY, P_LEFT);
|
|
_G(atds)->delControlBit(541, ATS_ACTIVE_BIT);
|
|
_slimeThrown = false;
|
|
_G(det)->startDetail(16, 1, 0);
|
|
|
|
while (_G(det)->get_ani_status(16)) {
|
|
get_user_key(NO_SETUP);
|
|
if (_G(minfo).button == 1 || g_events->getSwitchCode() == 28) {
|
|
if (_G(cur)->usingInventoryCursor())
|
|
_G(mouseLeftClick) = true;
|
|
}
|
|
|
|
setupScreen(DO_SETUP);
|
|
SHOULD_QUIT_RETURN;
|
|
}
|
|
|
|
hideCur();
|
|
if (!_slimeThrown) {
|
|
startSetAILWait(17, 1, ANI_FRONT);
|
|
_G(det)->startDetail(16, 1, true);
|
|
_G(gameState)._personHide[P_CHEWY] = true;
|
|
startSetAILWait(20, 1, false);
|
|
setPersonPos(318, 42, P_CHEWY, P_LEFT);
|
|
_G(gameState)._personHide[P_CHEWY] = false;
|
|
} else {
|
|
_G(gameState).flags37_4 = true;
|
|
delInventory(_G(cur)->getInventoryCursor());
|
|
_G(det)->showStaticSpr(27);
|
|
_G(gameState)._personHide[P_CHEWY] = true;
|
|
startSetAILWait(21, 1, ANI_FRONT);
|
|
_G(gameState)._personHide[P_CHEWY] = false;
|
|
_G(det)->hideStaticSpr(27);
|
|
startSetAILWait(18, 1, ANI_FRONT);
|
|
|
|
_G(det)->playSound(8, 0);
|
|
_G(det)->stopSound(1);
|
|
startSetAILWait(8, 1, ANI_FRONT);
|
|
_G(det)->showStaticSpr(20);
|
|
autoMove(10, P_CHEWY);
|
|
auto_scroll(60, 0);
|
|
startAadWait(544);
|
|
_bool18DB32 = true;
|
|
autoMove(11, P_CHEWY);
|
|
_bool18DB32 = false;
|
|
_G(flags).AutoAniPlay = false;
|
|
proc13();
|
|
_G(flags).AutoAniPlay = true;
|
|
autoMove(7, P_CHEWY);
|
|
|
|
while (_G(gameState).scrollx < 368) {
|
|
setupScreen(DO_SETUP);
|
|
SHOULD_QUIT_RETURN;
|
|
}
|
|
|
|
_G(det)->showStaticSpr(26);
|
|
setPersonPos(482, 24, P_NICHELLE, P_RIGHT);
|
|
goAutoXy(477, 29, P_NICHELLE, ANI_WAIT);
|
|
_G(det)->hideStaticSpr(26);
|
|
_G(gameState).flags37_2 = true;
|
|
}
|
|
|
|
_G(atds)->setControlBit(541, ATS_ACTIVE_BIT);
|
|
showCur();
|
|
_G(flags).AutoAniPlay = false;
|
|
}
|
|
|
|
} // namespace Rooms
|
|
} // namespace Chewy
|