mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-21 09:21:08 +00:00
c2ece5dc2b
svn-id: r44089
3731 lines
78 KiB
C++
3731 lines
78 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* $URL$
|
|
* $Id$
|
|
*/
|
|
|
|
#include "teenagent/scene.h"
|
|
#include "teenagent/teenagent.h"
|
|
#include "teenagent/resources.h"
|
|
#include "teenagent/dialog.h"
|
|
|
|
namespace TeenAgent {
|
|
|
|
#define CHECK_FLAG(addr, v) (res->dseg.get_byte(addr) == (v))
|
|
#define SET_FLAG(addr, v) (res->dseg.set_byte((addr), (v)))
|
|
#define GET_FLAG(addr) (res->dseg.get_byte(addr))
|
|
|
|
void TeenAgentEngine::rejectMessage() {
|
|
Resources * res = Resources::instance();
|
|
//random reject message:
|
|
uint i = random.getRandomNumber(3);
|
|
//debug(0, "reject message: %s", (const char *)res->dseg.ptr(res->dseg.get_word(0x339e + 2 * i)));
|
|
scene->displayMessage((const char *)res->dseg.ptr(res->dseg.get_word(0x339e + 2 * i)));
|
|
}
|
|
|
|
|
|
bool TeenAgentEngine::processCallback(uint16 addr) {
|
|
if (addr == 0)
|
|
return false;
|
|
|
|
Resources * res = Resources::instance();
|
|
debug(0, "processCallback(%04x)", addr);
|
|
byte * code = res->cseg.ptr(addr);
|
|
|
|
//try trivial callbacks first
|
|
if (code[0] == 0xbb && code[3] == 0xe8 && code[6] == 0xc3) {
|
|
//call display_message, r
|
|
uint16 msg = READ_LE_UINT16(code + 1);
|
|
uint16 func = 6 + addr + READ_LE_UINT16(code + 4);
|
|
debug(0, "call %04x", func);
|
|
//debug(0, "trivial callback, showing message %s", (const char *)res->dseg.ptr(addr));
|
|
switch(func) {
|
|
case 0x11c5:
|
|
Dialog::show(scene, msg);
|
|
return true;
|
|
case 0xa055:
|
|
displayMessage((const char *)res->dseg.ptr(msg));
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (code[0] == 0xe8 && code[3] == 0xc3) {
|
|
uint func = 3 + addr + READ_LE_UINT16(code + 1);
|
|
debug(0, "call %04x and return", func);
|
|
if (func == 0xa4d6) {
|
|
rejectMessage();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (code[0] == 0xc7 && code[1] == 0x06 && code[2] == 0xf3 && code[3] == 0xb4 &&
|
|
code[6] == 0xb8 && code[9] == 0xbb && code[12] == 0xbf &&
|
|
code[22] == 0xe8 && code[25] == 0xc3) {
|
|
loadScene(code[4], Common::Point(
|
|
(READ_LE_UINT16(code + 7) + READ_LE_UINT16(code + 13) + 1) / 2 ,
|
|
READ_LE_UINT16(code + 10)));
|
|
scene->setOrientation(code[21]);
|
|
return true;
|
|
}
|
|
|
|
switch(addr) {
|
|
|
|
case 0x024c: //intro
|
|
hideActor();
|
|
loadScene(41, 139, 156, 3);
|
|
playSound(41, 12);
|
|
playAnimation(912, 1);
|
|
setOns(0, 108);
|
|
playSound(62, 8);
|
|
playSound(58, 40);
|
|
playAnimation(913, 1);
|
|
setOns(1, 109);
|
|
setLan(2, 1);
|
|
Dialog::show(scene, 0x748e, 914, 915, 0xe7, 0xd7);
|
|
displayCredits(0xe3c2);
|
|
loadScene(42, 139, 156, 3);
|
|
playSound(15, 20);
|
|
playAnimation(916, 1);
|
|
playSound(40, 18);
|
|
playSound(40, 22);
|
|
for(byte i = 27; i < 37; i += 2)
|
|
playSound(40, i);
|
|
playSound(29, 44);
|
|
playAnimation(918, 0, true);
|
|
playAnimation(917, 1, true);
|
|
waitAnimation();
|
|
displayCredits(0xe3e6);
|
|
|
|
loadScene(40, 139, 156, 3);
|
|
playMusic(3);
|
|
Dialog::show(scene, 0x750d, 920, 924, 0xe7, 0xeb); //as i told you, our organization...
|
|
playSound(26, 50);
|
|
playAnimation(925, 0, true);
|
|
playAnimation(926, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x78a6, 927, 920, 0xeb, 0xeb);
|
|
displayCredits(0xe3ff);
|
|
|
|
loadScene(39, 139, 156, 3);
|
|
playMusic(11);
|
|
playSound(81, 2);
|
|
playSound(81, 8);
|
|
playSound(81, 11);
|
|
playSound(81, 14);
|
|
playSound(81, 16);
|
|
playSound(81, 18);
|
|
playSound(81, 20);
|
|
playSound(81, 21);
|
|
playAnimation(928, 1);
|
|
setOns(0, 112);
|
|
Dialog::show(scene, 0x78e1, 929, 0, 0xd1); //he's coming
|
|
showActor();
|
|
moveTo(319, 150, 1, true);
|
|
moveTo(63, 150, 1);
|
|
displayMessage(0x5da8); //fixme: with delay!
|
|
playAnimation(851, 0);
|
|
playSound(24, 11);
|
|
playActorAnimation(931);
|
|
displayCredits(0xe42f);
|
|
|
|
playMusic(3);
|
|
loadScene(40, 50, 186, 1);
|
|
setOns(0, 113);
|
|
Dialog::show(scene, 0x78f1, 919, 0, 0xe7);
|
|
moveTo(196, 186, 1);
|
|
Dialog::show(scene, 0x7958, 920, 0, 0xe7);
|
|
playActorAnimation(932);
|
|
Dialog::show(scene, 0x7e07, 920, 0, 0xe7);
|
|
playActorAnimation(932);
|
|
Dialog::show(scene, 0x7e1a, 920, 0, 0xe7);
|
|
playActorAnimation(932);
|
|
Dialog::show(scene, 0x7e2c, 922, 0, 0xe7);
|
|
playActorAnimation(933);
|
|
Dialog::show(scene, 0x7e70, 920, 0, 0xe7);
|
|
moveTo(174, 186, 1);
|
|
playAnimation(851, 0, true);
|
|
playActorAnimation(934, true);
|
|
waitAnimation();
|
|
loadScene(10, 136, 153);
|
|
|
|
return true;
|
|
|
|
case 0x4021:
|
|
//pulling out mysterious object
|
|
if (CHECK_FLAG(0xdbe1, 1)) {
|
|
playActorAnimation(844);
|
|
playActorAnimation(846);
|
|
playActorAnimation(845);
|
|
displayMessage(0x5696);
|
|
} else {
|
|
displayMessage(0x570f);
|
|
}
|
|
return true;
|
|
|
|
case 0x4094: //climbing to the pole near mudpool
|
|
if (CHECK_FLAG(0xDBE4, 1)) {
|
|
displayMessage(0x57b2);
|
|
return true;
|
|
} else {
|
|
playSound(76);
|
|
playActorAnimation(864);
|
|
playActorAnimation(866);
|
|
//InventoryObject *obj = inventory->selectedObject();
|
|
//if (obj != NULL && obj->id == 0x55) {
|
|
|
|
//implement pause and using real object:
|
|
if (inventory->has(0x55)) {
|
|
playSound(5, 4);
|
|
playActorAnimation(867);
|
|
inventory->remove(0x55);
|
|
inventory->add(0x56);
|
|
moveTo(86, 195, 1, true);
|
|
playActorAnimation(868);
|
|
SET_FLAG(0xDBE4, 1);
|
|
} else {
|
|
//fail!
|
|
moveTo(86, 195, 1, true);
|
|
playActorAnimation(868);
|
|
Dialog::pop(scene, 0xDB72);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
case 0x419c: //getting the bird
|
|
setOns(0, 0);
|
|
playSound(56, 10);
|
|
playActorAnimation(875);
|
|
disableObject(6);
|
|
inventory->add(0x5c);
|
|
return true;
|
|
|
|
|
|
case 0x41ce:
|
|
moveTo(197, 159, 4);
|
|
setOns(0, 0);
|
|
playSound(71, 8);
|
|
playActorAnimation(833);
|
|
moveTo(225, 159, 4);
|
|
inventory->add(0x4e);
|
|
disableObject(3);
|
|
return true;
|
|
|
|
case 0x4267:
|
|
playSound(23, 8);
|
|
setOns(1, 0);
|
|
playActorAnimation(841);
|
|
setOns(1, 0x61);
|
|
setOns(2, 0);
|
|
playSound(63, 12);
|
|
playActorAnimation(842);
|
|
//shown in different positions
|
|
displayMessage(0x5656);
|
|
displayMessage(0x567a);
|
|
displayMessage(0x5682);
|
|
playActorAnimation(843);
|
|
moveTo(223, 149, 0, true);
|
|
disableObject(7);
|
|
disableObject(1);
|
|
inventory->add(0x51);
|
|
displayMessage(0x5646);
|
|
return true;
|
|
|
|
case 0x4388:
|
|
playSound(80);
|
|
loadScene(8, 155, 199);
|
|
scene->setOrientation(1);
|
|
return true;
|
|
|
|
case 0x43b5: //HQ, first trial - prison
|
|
playSound(70, 6);
|
|
playActorAnimation(962);
|
|
loadScene(7, 30, 184, 2);
|
|
if (res->dseg.get_byte(0xDBDF) < 2) {
|
|
moveTo(134, 167, 2);
|
|
displayMessage(0x54f7);
|
|
setLan(1, 0);
|
|
playAnimation(812, 0, true);
|
|
playActorAnimation(811);
|
|
Dialog::show(scene, 0x6117, 813);
|
|
loadScene(6, Common::Point(230, 184));
|
|
Dialog::show(scene, 0x626a, 814);
|
|
playAnimation(815, 0);
|
|
setOns(1, 0);
|
|
|
|
Dialog::show(scene, 0x62dc);
|
|
|
|
SET_FLAG(0xDBDF, 1);
|
|
playMusic(5);
|
|
}
|
|
return true;
|
|
|
|
case 0x4482:
|
|
if (CHECK_FLAG(0xDBDF, 0)) {
|
|
playActorAnimation(968);
|
|
displayMessage(0x5511);
|
|
} else {
|
|
playSound(80);
|
|
playActorAnimation(968);
|
|
loadScene(6, Common::Point(280, 186));
|
|
}
|
|
return true;
|
|
|
|
case 0x44fc: //pull out spring from bed
|
|
playSound(53, 25);
|
|
playSound(24, 27);
|
|
playSound(5, 36);
|
|
playActorAnimation(839);
|
|
moveTo(278, scene->getPosition().y, 0, true);
|
|
inventory->add(0x50);
|
|
disableObject(1);
|
|
return true;
|
|
|
|
case 0x44cb:
|
|
if (CHECK_FLAG(0xDBE5, 1)) {
|
|
scene->displayMessage((const char *)res->dseg.ptr(0x57c0));
|
|
} else {
|
|
playSound(49, 14);
|
|
playSound(5, 21);
|
|
playActorAnimation(869);
|
|
inventory->add(0x58);
|
|
SET_FLAG(0xDBE5, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x4539: //prison cell: use crates
|
|
if (CHECK_FLAG(0xdbdd, 2)) {
|
|
//finished the meal - trap
|
|
displayMessage(0x55c0);
|
|
moveTo(306, 196, 2);
|
|
//playAnimation(825, 1); //very long empty animation. what for?
|
|
setLan(1, 0);
|
|
playSound(71, 4);
|
|
playActorAnimation(823);
|
|
|
|
playSound(74, 1);
|
|
playSound(74, 3);
|
|
playSound(74, 6);
|
|
loadScene(5, scene->getPosition());
|
|
playActorAnimation(826);
|
|
loadScene(6, scene->getPosition());
|
|
setOns(3, 0x5b);
|
|
displayMessage(0x55db);
|
|
SET_FLAG(0xdbdd, 3);
|
|
strcpy(scene->getObject(4)->name, "body");
|
|
} else {
|
|
if (Dialog::pop(scene, 0xdb5c) != 0x636b) //not 'im getting hungry'
|
|
return true;
|
|
|
|
playSound(52, 8);
|
|
playAnimation(820, 1);
|
|
setOns(3, 0x59);
|
|
//some moving animation is missing here
|
|
displayMessage(0x551f);
|
|
enableObject(4);
|
|
SET_FLAG(0xdbdc, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x4662:
|
|
if (CHECK_FLAG(0xDBDD, 3)) {
|
|
if (CHECK_FLAG(0xDBDE, 1)) {
|
|
displayMessage(0x5608);
|
|
} else {
|
|
moveTo(280, 179, 2);
|
|
playSound(49, 7);
|
|
playSound(5, 17);
|
|
playActorAnimation(827);
|
|
inventory->add(0x4d);
|
|
SET_FLAG(0xDBDE, 1);
|
|
}
|
|
} else
|
|
displayMessage(0x5905);
|
|
return true;
|
|
|
|
case 0x46af: //prison cell: use live cable
|
|
if (CHECK_FLAG(0xdbdc, 1)) {
|
|
displayMessage(0x555d);
|
|
setOns(2, 0);
|
|
playActorAnimation(821);
|
|
setOns(2, 0x5a);
|
|
setOns(3, 0);
|
|
playSound(22, 2);
|
|
playActorAnimation(822);
|
|
displayMessage(0x5577);
|
|
disableObject(5);
|
|
SET_FLAG(0xdbdd, 1);
|
|
} else
|
|
displayMessage(0x5528);
|
|
return true;
|
|
|
|
case 0x4705: //prison: getting lamp bulb
|
|
moveTo(144, 185, 4);
|
|
playSound(56, 15);
|
|
setOns(0, 86); //hiding lamp
|
|
playActorAnimation(816, true);
|
|
playAnimation(817, 1, true);
|
|
waitAnimation();
|
|
setOns(0, 87);
|
|
|
|
playSound(34, 1);
|
|
playSound(5, 15);
|
|
playActorAnimation(818, true);
|
|
playAnimation(819, 1, true);
|
|
waitAnimation();
|
|
|
|
moveTo(160, 188, 1, true);
|
|
setOns(2, 88);
|
|
|
|
disableObject(6);
|
|
enableObject(5);
|
|
inventory->add(0x4c);
|
|
return true;
|
|
|
|
case 0x4794: //prison cell door
|
|
if (res->dseg.get_byte(0xDBDF) >= 2) {
|
|
loadScene(5, 287, 143);
|
|
} else {
|
|
displayMessage(0x592f);
|
|
}
|
|
return true;
|
|
|
|
case 0x47bc: //prison: examining trash can
|
|
playSound(79, 5);
|
|
playSound(1, 14);
|
|
playActorAnimation(966);
|
|
displayMessage(0x5955);
|
|
return true;
|
|
|
|
case 0x47db: //prison: use switch
|
|
if (CHECK_FLAG(0xDBDF, 1)) {
|
|
playSound(71, 4);
|
|
playActorAnimation(823);
|
|
if (CHECK_FLAG(0xDBDD, 0)) {
|
|
displayMessage(0x4d80);
|
|
} else {
|
|
playSound(74, 1);
|
|
playAnimation(824, 1);
|
|
if (CHECK_FLAG(0xDBDD, 1)) {
|
|
displayMessage(0x559a);
|
|
SET_FLAG(0xDBDD, 2);
|
|
}
|
|
}
|
|
} else {
|
|
displayMessage(0x52f6);
|
|
}
|
|
return true;
|
|
|
|
case 0x4871:
|
|
playActorAnimation(965);
|
|
displayMessage(0x5511);
|
|
return true;
|
|
|
|
case 0x4893: //taking pills
|
|
if (CHECK_FLAG(0xDBE6, 1)) {
|
|
SET_FLAG(0xDBE6, 2);
|
|
setOns(1, 0x67);
|
|
playSound(5, 9);
|
|
playActorAnimation(872);
|
|
inventory->add(0x5a);
|
|
disableObject(7);
|
|
} else {
|
|
playActorAnimation(964);
|
|
displayMessage(0x5511);
|
|
}
|
|
return true;
|
|
|
|
case 0x4918: //talking with barmen
|
|
if (CHECK_FLAG(0xDBE7, 1)) {
|
|
moveTo(140, 152, 1);
|
|
if (CHECK_FLAG(0xDBE8, 1)) {
|
|
Dialog::show(scene, 0x6f20);
|
|
displayMessage(0x5883, 0xef);
|
|
//reloadLan();
|
|
setLan(1, 0);
|
|
playAnimation(882, 1);
|
|
playSound(75, 10);
|
|
setOns(2, 0);
|
|
playAnimation(883, 1);
|
|
disableObject(1);
|
|
disableObject(2);
|
|
SET_FLAG(0xDBE9, 1);
|
|
} else
|
|
displayMessage(0x5855);
|
|
} else {
|
|
if (CHECK_FLAG(0xDBDF, 3)) {
|
|
if (CHECK_FLAG(0xDBE3, 1)) {
|
|
Dialog::show(scene, 0x6BD6, 857);
|
|
} else {
|
|
Dialog::show(scene, 0x69B5, 857); //taking mug
|
|
playActorAnimation(859, true);
|
|
playAnimation(858, 1, true);
|
|
waitAnimation();
|
|
playSound(75, 6);
|
|
playActorAnimation(860);
|
|
Dialog::show(scene, 0x69C2, 857);
|
|
inventory->add(0x55);
|
|
SET_FLAG(0xDBE3, 1);
|
|
SET_FLAG(0xDBF0, 0);
|
|
}
|
|
} else {
|
|
Dialog::pop(scene, 0xDB68, 857);
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x4f14: //use the hollow
|
|
displayMessage(CHECK_FLAG(0xDBA1, 1)? 0x370f: 0x36c2);
|
|
return true;
|
|
|
|
case 0x4a64:
|
|
if (CHECK_FLAG(0xDBF0, 1)) {
|
|
displayMessage(0x5e25);
|
|
} else {
|
|
loadScene(5, 35, 162);
|
|
}
|
|
return true;
|
|
|
|
case 0x4bf5:
|
|
playActorAnimation(959);
|
|
loadScene(8, 40, 152, 3);
|
|
return true;
|
|
|
|
case 0x483a:
|
|
Dialog::pop(scene, 0xdb82);
|
|
return true;
|
|
|
|
case 0x4844:
|
|
playSound(80, 4);
|
|
playActorAnimation(963);
|
|
loadScene(5, 166, 158);
|
|
return true;
|
|
|
|
case 0x48ea:
|
|
setOns(0, 0);
|
|
playSound(5, 9);
|
|
playActorAnimation(836);
|
|
inventory->add(0x4f);
|
|
disableObject(12);
|
|
return true;
|
|
|
|
case 0x4a8c:
|
|
if (CHECK_FLAG(0xDBE9, 1)) {
|
|
playSound(89, 5);
|
|
playActorAnimation(958);
|
|
loadScene(9, 240, 182, 4);
|
|
} else if (CHECK_FLAG(0xDBE9, 1)) {
|
|
displayMessage(0x5894);
|
|
} else {
|
|
Dialog::pop(scene, 0xDB8A, 857);
|
|
}
|
|
return true;
|
|
|
|
case 0x4af4: //taking the crumbs
|
|
setOns(0, 0);
|
|
playActorAnimation(861);
|
|
playSound(49);
|
|
inventory->add(0x57);
|
|
disableObject(6);
|
|
return true;
|
|
|
|
case 0x4b35:
|
|
playSound(15, 7);
|
|
playActorAnimation(884);
|
|
playSound(55, 1);
|
|
playAnimation(885, 1);
|
|
Dialog::show(scene, 0x67e5, 886);
|
|
playMusic(3);
|
|
loadScene(40, 198, 186, 1);
|
|
Dialog::show(scene, 0x7f20);
|
|
inventory->clear();
|
|
inventory->add(0x1d);
|
|
//showFullscreenMessage(0xe45c);
|
|
loadScene(1, 198, 186);
|
|
playActorAnimation(956, true);
|
|
Dialog::show(scene, 0x8bc4);
|
|
waitAnimation();
|
|
loadScene(15, 157, 199, 1);
|
|
playMusic(6);
|
|
return true;
|
|
|
|
case 0x4c3e: //get the grenade
|
|
playSound(32, 24);
|
|
playActorAnimation(862);
|
|
reloadLan();
|
|
playAnimation(863, 1);
|
|
inventory->add(0x54);
|
|
disableObject(1);
|
|
SET_FLAG(0xDBE2, 2);
|
|
return true;
|
|
|
|
case 0x4c70:
|
|
if (CHECK_FLAG(0xDBE2, 0)) {
|
|
if (CHECK_FLAG(0xDBDA, 1)) { //papers are shown
|
|
Dialog::pop(scene, 0xDB4C, 809, 0, 0xd1, 0xd0);
|
|
} else {
|
|
Dialog::pop(scene, 0xDB40, 809, 0, 0xd1, 0xd0);
|
|
}
|
|
return true;
|
|
} else {
|
|
displayMessage(0x5722);
|
|
|
|
scene->displayMessage("He's totally addicted.");
|
|
}
|
|
return true;
|
|
|
|
case 0x4c1c:
|
|
playActorAnimation(960);
|
|
displayMessage(0x5511);
|
|
return true;
|
|
|
|
case 0x4cac:
|
|
if (CHECK_FLAG(0xdbda, 1)) { //papers are shown
|
|
loadScene(5, 124, 199);
|
|
} else {
|
|
playAnimation(809, 1, true);
|
|
Dialog::show(scene, 0x5FE9);
|
|
moveTo(269, 175, 4);
|
|
Dialog::pop(scene, 0xDB56);
|
|
}
|
|
return true;
|
|
|
|
case 0x4cf1: { //talking with mansion guard
|
|
SET_FLAG(0xda96, 1);
|
|
if (Dialog::pop(scene, 0xdaa6, 529) != 0x1b4)
|
|
return true;
|
|
|
|
Common::Point p = scene->getPosition();
|
|
moveTo(159, 189, 0);
|
|
|
|
playSound(5, 2);
|
|
playSound(5, 19);
|
|
playActorAnimation(550, true);
|
|
playAnimation(551, 1, true);
|
|
waitAnimation();
|
|
|
|
moveTo(p, 2);
|
|
inventory->add(0x13);
|
|
playAnimation(529, 1);
|
|
Dialog::pop(scene, 0xdaa6);
|
|
}
|
|
return true;
|
|
|
|
case 0x4d94: //talking with fatso
|
|
Dialog::show(scene, 0x33bd);
|
|
displayMessage(0x49ae);
|
|
playSound(5, 3);
|
|
playAnimation(667, 1);
|
|
playAnimation(668, 1);
|
|
setOns(2, 50);
|
|
Dialog::show(scene, 0x36c7);
|
|
setOns(3, 0);
|
|
SET_FLAG(0xDBEC, 0);
|
|
reloadLan();
|
|
playSound(82, 19);
|
|
playAnimation(668, 1);
|
|
Dialog::show(scene, 0x3779);
|
|
enableObject(15);
|
|
disableObject(8);
|
|
return true;
|
|
|
|
case 0x4e61:
|
|
loadScene(14, 280, 198);
|
|
return true;
|
|
|
|
case 0x4ee5:
|
|
setOns(2, 0);
|
|
playSound(5, 12);
|
|
playActorAnimation(676);
|
|
displayMessage(0x4ab0);
|
|
disableObject(15);
|
|
inventory->add(51);
|
|
return true;
|
|
|
|
case 0x4d56:
|
|
inventory->add(16);
|
|
disableObject(2);
|
|
setOns(0, 0);
|
|
playSound(5, 12);
|
|
playActorAnimation(547);
|
|
return true;
|
|
|
|
|
|
case 0x4eb9://Pick up wrapper
|
|
playSound(5, 12);
|
|
playSound(5, 18);
|
|
inventory->add(0x12);
|
|
setOns(1, 0);
|
|
playActorAnimation(549);
|
|
disableObject(13);
|
|
return true;
|
|
|
|
case 0x4f25:
|
|
playActorAnimation(967);
|
|
displayMessage(0x3542);
|
|
return true;
|
|
|
|
case 0x4f32: //use tree near the mansion
|
|
if (CHECK_FLAG(0xDBA1, 1)) {
|
|
if (CHECK_FLAG(0xDBA2, 1)) {
|
|
displayMessage(0x3766);
|
|
} else {
|
|
playSound(26, 13);
|
|
playSound(26, 15);
|
|
playSound(26, 23);
|
|
playSound(26, 25);
|
|
playSound(26, 32);
|
|
playSound(26, 34);
|
|
playSound(26, 36);
|
|
playActorAnimation(590);
|
|
moveTo(204, 178, 3, true);
|
|
playSound(59, 1);
|
|
playSound(60, 16);
|
|
displayMessage(0x372e);
|
|
playActorAnimation(591);
|
|
SET_FLAG(0xDBA2, 1);
|
|
processCallback(0x9d45);
|
|
}
|
|
} else {
|
|
playActorAnimation(49);
|
|
playSound(56, 8);
|
|
playSound(56, 12);
|
|
playSound(49, 10);
|
|
//there's some black magic here! investigate!
|
|
playActorAnimation(587);
|
|
displayMessage(0x4652);
|
|
displayMessage(0x3668);
|
|
}
|
|
return true;
|
|
|
|
case 0x500d: //picking up wild plant
|
|
if (CHECK_FLAG(0xDB9E, 1)) {
|
|
displayMessage(0x35E8); //there are no more
|
|
} else {
|
|
SET_FLAG(0xDB9E, 1);
|
|
setOns(2, 0);
|
|
playActorAnimation(552);
|
|
setOns(2, 0x12);
|
|
inventory->add(0x14);
|
|
}
|
|
return true;
|
|
|
|
case 0x5104:
|
|
loadScene(11, 319, 198, 4); //orientation: left
|
|
if (CHECK_FLAG(0xDB9C, 1))
|
|
return true;
|
|
|
|
SET_FLAG(0xDB9C, 1); //guard's drinking, boo!
|
|
playAnimation(544, 1);
|
|
displayMessage(0x3563);
|
|
playSound(17);
|
|
setOns(0, 16);
|
|
enableObject(2);
|
|
playAnimation(545, 1);
|
|
Dialog::show(scene, 0x0917);
|
|
playActorAnimation(546);
|
|
SET_FLAG(0xDA96, 1);
|
|
SET_FLAG(0xDA97, 0);
|
|
return true;
|
|
|
|
case 0x51f0:
|
|
setOns(0, 0);
|
|
playSound(5, 11);
|
|
playActorAnimation(637);
|
|
disableObject(7);
|
|
inventory->add(49);
|
|
return true;
|
|
|
|
case 0x5217:
|
|
displayMessage(CHECK_FLAG(0xDB9F, 1)? 0x402e: 0x34e1);
|
|
return true;
|
|
|
|
case 0x5237:
|
|
if (!CHECK_FLAG(0xDB9F, 1)) {
|
|
displayMessage(0x34e1);
|
|
} else if (CHECK_FLAG(0xDBA0, 1))
|
|
displayMessage(0x3E31);
|
|
else {
|
|
moveTo(173, 138, 2);
|
|
playSound(28, 5);
|
|
playActorAnimation(583);
|
|
playActorAnimation(584);
|
|
|
|
debug(0, "FIXME: darken whole screen");
|
|
|
|
playSound(72, 18);
|
|
playSound(73, 39);
|
|
playActorAnimation(585);
|
|
|
|
loadScene(11, 194, 160, 2);
|
|
playSound(28, 2);
|
|
moveTo(138, 163, 3);
|
|
displayMessage(0x3650);
|
|
SET_FLAG(0xDBA0, 1);
|
|
processCallback(0x9d45); //another mansion try
|
|
}
|
|
return true;
|
|
|
|
case 0x55a8: {
|
|
uint16 d = Dialog::pop(scene, 0xdb08);
|
|
if (d == 0x2c5d) {
|
|
setOns(0, 0);
|
|
playSound(52, 9);
|
|
playSound(52, 11);
|
|
playSound(52, 13);
|
|
playSound(53, 32);
|
|
playAnimation(570, 1);
|
|
displayMessage(0x551f);
|
|
disableObject(5);
|
|
SET_FLAG(0xDBB0, 1);
|
|
} else if (d != 0x2c9b) {
|
|
playSound(52, 9);
|
|
playSound(52, 11);
|
|
playSound(52, 13);
|
|
playAnimation(569, 1);
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x5663:
|
|
displayMessage(CHECK_FLAG(0xDBB0, 1)? 0x41b1: 0x417e);
|
|
return true;
|
|
|
|
case 0x569c:
|
|
playSound(67, 5);
|
|
playActorAnimation(983);
|
|
displayMessage(0x5955);
|
|
return true;
|
|
|
|
case 0x56b7:
|
|
playSound(66, 5);
|
|
playSound(67, 11);
|
|
playActorAnimation(984);
|
|
displayMessage(0x5955);
|
|
return true;
|
|
|
|
case 0x5728:
|
|
inventory->add(0x0d);
|
|
disableObject(14);
|
|
setOns(0, 0);
|
|
playSound(5, 10);
|
|
playActorAnimation(566);
|
|
return true;
|
|
|
|
case 0x5793:
|
|
if (!CHECK_FLAG(0xDB94, 1)) {
|
|
displayMessage(0x3e63);
|
|
} else if (CHECK_FLAG(0xDB95, 1)) {
|
|
displayMessage(0x3e75);
|
|
} else {
|
|
SET_FLAG(0xDB95, 1);
|
|
moveTo(188, 179, 0);
|
|
playSound(7, 16);
|
|
playActorAnimation(519);
|
|
moveTo(168, 179, 2);
|
|
inventory->add(3);
|
|
}
|
|
return true;
|
|
|
|
case 0x5d88:
|
|
if (CHECK_FLAG(0xDBA5, 1)) { //dry laundry
|
|
SET_FLAG(0xDBA5, 2);
|
|
Dialog::show(scene, 0x1F4F);
|
|
playAnimation(604, 1);
|
|
|
|
loadScene(21, scene->getPosition());
|
|
setOns(0, 0);
|
|
disableObject(4);
|
|
enableObject(12);
|
|
playSound(46);
|
|
playAnimation(606, 1);
|
|
loadScene(23, scene->getPosition());
|
|
playAnimation(605, 1);
|
|
Dialog::show(scene, 0x2002);
|
|
} else {
|
|
uint16 d = Dialog::pop(scene, 0xdada);
|
|
if (d == 0x1913)
|
|
displayMessage(0x34d5); //+orientation = 3
|
|
}
|
|
return true;
|
|
|
|
case 0x5ff3: //get duster
|
|
if (CHECK_FLAG(0xDB9A, 0)) {
|
|
Dialog::pop(scene, 0xdaf6);
|
|
} else {
|
|
Dialog::show(scene, 0x1e1e);
|
|
inventory->add(12);
|
|
disableObject(12);
|
|
setOns(0, 0);
|
|
playSound(5, 6);
|
|
playActorAnimation(541);
|
|
}
|
|
return true;
|
|
|
|
case 0x6205:
|
|
if (CHECK_FLAG(0xDBA4, 1))
|
|
displayMessage(0x450e);
|
|
else
|
|
processCallback(0x61fe);
|
|
return true;
|
|
|
|
case 0x6217:
|
|
if (CHECK_FLAG(0xDBA4, 1))
|
|
displayMessage(0x44d6);
|
|
else
|
|
processCallback(0x61fe);
|
|
return true;
|
|
|
|
case 0x62c1:
|
|
if (CHECK_FLAG(0xDBA4, 1))
|
|
return false;
|
|
|
|
processCallback(0x61fe);
|
|
return true;
|
|
|
|
case 0x63bc:
|
|
playMusic(6);
|
|
loadScene(25, 151, 156, 2);
|
|
return true;
|
|
|
|
case 0x646e:
|
|
case 0x6475:
|
|
Dialog::show(scene, 0x32C1);
|
|
return true;
|
|
|
|
case 0x6507:
|
|
if (CHECK_FLAG(0xDB96, 1)) {
|
|
rejectMessage();
|
|
} else
|
|
displayMessage(0x47e7);
|
|
return true;
|
|
|
|
case 0x65c3:
|
|
if (CHECK_FLAG(0xDBA9, 1)) {
|
|
playActorAnimation(635);
|
|
setOns(5, 0);
|
|
playSound(63, 11);
|
|
playSound(15, 20);
|
|
playSound(32, 31);
|
|
playActorAnimation(636);
|
|
inventory->add(47);
|
|
inventory->add(48);
|
|
moveTo(scene->getPosition().x - 1, 139, 1, true);
|
|
displayMessage(0x3b83);
|
|
SET_FLAG(0xDBA9, 2);
|
|
SET_FLAG(0xDBA8, 0);
|
|
} else
|
|
displayMessage(0x4808);
|
|
return true;
|
|
|
|
case 0x7866:
|
|
if (CHECK_FLAG(0xdbdd, 3)) {
|
|
displayMessage(0x55ff);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7878: {
|
|
byte v = res->dseg.get_byte(0xDBDB) + 1;
|
|
if (v <= 6)
|
|
SET_FLAG(0xDBDB, v);
|
|
|
|
switch(v) {
|
|
case 1:
|
|
displayMessage(0x5411);
|
|
return true;
|
|
case 2:
|
|
displayMessage(0x5463);
|
|
return true;
|
|
case 3:
|
|
displayMessage(0x5475);
|
|
return true;
|
|
case 4:
|
|
displayMessage(0x5484);
|
|
return true;
|
|
case 5:
|
|
displayMessage(0x54c4);
|
|
return true;
|
|
default:
|
|
displayMessage(0x54d5);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
case 0x78a9:
|
|
if (CHECK_FLAG(0xDBE6, 1)) {
|
|
displayMessage(0x5827);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x78bb:
|
|
if (CHECK_FLAG(0xDBE8, 1)) {
|
|
displayMessage(0x58b0);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x78ce:
|
|
if (!CHECK_FLAG(0xDBA1, 1)) {
|
|
displayMessage(0x3694);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x792b: //left click on ann
|
|
moveTo(245, 198, 1);
|
|
if (CHECK_FLAG(0xDBAF, 1))
|
|
return false;
|
|
|
|
Dialog::show(scene, 0x2193);
|
|
SET_FLAG(0xDBAF, 1);
|
|
return true;
|
|
|
|
case 0x79c3:
|
|
if (CHECK_FLAG(0xDBA4, 1))
|
|
return false;
|
|
processCallback(0x61fe);
|
|
return true;
|
|
|
|
case 0x7b26: //cutting the fence
|
|
setOns(0, 0);
|
|
playSound(5, 2);
|
|
playActorAnimation(837);
|
|
playSound(51, 3);
|
|
playActorAnimation(838);
|
|
setOns(0, 0x60);
|
|
moveTo(281, scene->getPosition().y, 0, true);
|
|
disableObject(4);
|
|
SET_FLAG(0xDBE1, 1);
|
|
return true;
|
|
|
|
case 0x7b89: //digging mysterious object
|
|
if (CHECK_FLAG(0xDBE1, 1)) {
|
|
playActorAnimation(844);
|
|
setOns(1, 0);
|
|
playSound(5, 5);
|
|
playActorAnimation(847);
|
|
playSound(5, 11);
|
|
playActorAnimation(848);
|
|
setOns(1, 0x64);
|
|
playActorAnimation(845);
|
|
disableObject(3);
|
|
inventory->add(0x52);
|
|
inventory->remove(0x51);
|
|
} else
|
|
displayMessage(0x56da);
|
|
return true;
|
|
|
|
case 0x7bfd:
|
|
playSound(76, 18);
|
|
playSound(76, 22);
|
|
playSound(76, 26);
|
|
playSound(76, 30);
|
|
playSound(76, 34);
|
|
playSound(76, 47);
|
|
playSound(76, 51);
|
|
playSound(76, 55);
|
|
playSound(76, 59);
|
|
playSound(76, 63);
|
|
playActorAnimation(873);
|
|
moveTo(240, 163, 4);
|
|
displayMessage(0x5837);
|
|
playSound(77, 2);
|
|
setLan(1, 0);
|
|
playAnimation(874, 1);
|
|
setOns(0, 0x68);
|
|
inventory->remove(0x5b);
|
|
enableObject(6);
|
|
disableObject(1);
|
|
return true;
|
|
|
|
case 0x7ce5: //put spring on the solid ground
|
|
playSound(5, 2);
|
|
playActorAnimation(840);
|
|
setOns(1, 0x61);
|
|
inventory->remove(0x50);
|
|
disableObject(2);
|
|
enableObject(7);
|
|
return true;
|
|
|
|
case 0x7d1a: //captain's key + door
|
|
if (res->dseg.get_byte(0xDBDF) <= 1) {
|
|
playSound(5, 2);
|
|
playSound(57, 12);
|
|
playSound(70, 19);
|
|
playActorAnimation(828);
|
|
moveTo(262, 160, 1, true);
|
|
disableObject(4);
|
|
disableObject(3);
|
|
setOns(0, 0);
|
|
setOns(1, 85);
|
|
setOns(2, 0);
|
|
setOns(3, 0);
|
|
loadScene(5, scene->getPosition());
|
|
setOns(0, 92);
|
|
playAnimation(829, 1);
|
|
setOns(0, 0);
|
|
Dialog::show(scene, 0x63a5, 830);
|
|
loadScene(7, 130, 195);
|
|
playMusic(4);
|
|
setLan(1, 1);
|
|
|
|
Dialog::show(scene, 0x6406, 832);
|
|
|
|
//playAnimation(831, 1);
|
|
|
|
SET_FLAG(0xDBDF, 2);
|
|
|
|
} else
|
|
displayMessage(0x52f6);
|
|
return true;
|
|
|
|
case 0x7e02: //tickling the captain
|
|
if (CHECK_FLAG(0xdbe0, 1)) {
|
|
displayMessage(0x5632);
|
|
} else {
|
|
playSound(5, 6);
|
|
playActorAnimation(834, true);
|
|
playAnimation(835, 1, true);
|
|
waitAnimation();
|
|
|
|
setOns(0, 94);
|
|
Dialog::show(scene, 0x65e9, 832);
|
|
enableObject(12);
|
|
SET_FLAG(0xdbe0, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x7e4f: //giving magazine to captain
|
|
playSound(5, 3);
|
|
Dialog::show(scene, 0x66c0);
|
|
playActorAnimation(852, true);
|
|
playActorAnimation(853, true);
|
|
displayMessage(0x5742);
|
|
displayMessage(0x5757);
|
|
displayMessage(0x5770);
|
|
displayMessage(0x5782);
|
|
displayMessage(0x5799);
|
|
playAnimation(856, 1);
|
|
playSound(5, 3);
|
|
//playActorAnimation(854);
|
|
Dialog::show(scene, 0x66fe);
|
|
playAnimation(855, 1);
|
|
moveTo(30, 181, 0);
|
|
disableObject(1);
|
|
setLan(1, 0);
|
|
SET_FLAG(0xDBDF, 3);
|
|
SET_FLAG(0xDBF0, 1);
|
|
loadScene(8, 155, 199);
|
|
return true;
|
|
|
|
case 0x7fbd: //using bird & bartender
|
|
playSound(5, 3);
|
|
playActorAnimation(876);
|
|
setOns(1, 0);
|
|
playAnimation(877, 2);
|
|
playAnimation(880, 2, true);
|
|
|
|
Dialog::show(scene, 0x6f0e, 857);
|
|
setOns(2, 0x6a);
|
|
reloadLan();
|
|
playAnimation(878, 1);
|
|
playAnimation(879, 1);
|
|
inventory->remove(0x5c);
|
|
enableObject(1);
|
|
SET_FLAG(0xDBE7, 1);
|
|
return true;
|
|
|
|
case 0x8047:
|
|
playSound(32, 5);
|
|
playActorAnimation(881);
|
|
setOns(2, 0x6b);
|
|
inventory->remove(0x56);
|
|
inventory->add(0x55);
|
|
SET_FLAG(0xDBE8, 1);
|
|
return true;
|
|
|
|
case 0x808b:
|
|
if (CHECK_FLAG(0xDBDA, 1)) {
|
|
//alredy shown
|
|
displayMessage(0x53F2);
|
|
} else {
|
|
displayMessage(0x53DD);
|
|
playSound(5, 2);
|
|
playSound(5, 18);
|
|
playActorAnimation(810);
|
|
Dialog::show(scene, 0x60BF);
|
|
SET_FLAG(0xDBDA, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x80c3: //show kaleydoscope to the guard
|
|
Dialog::show(scene, 0x6811, 809);
|
|
playSound(5, 3);
|
|
playActorAnimation(849, true);
|
|
playAnimation(851, 1, true);
|
|
waitAnimation();
|
|
|
|
playAnimation(850, 1);
|
|
reloadLan();
|
|
inventory->add(0x53);
|
|
inventory->remove(0x52);
|
|
enableObject(1);
|
|
SET_FLAG(0xDBE2, 1);
|
|
return true;
|
|
|
|
//Shore
|
|
|
|
case 0x5348:
|
|
if (CHECK_FLAG(0xdb99, 1)) { //got broken paddle from boat
|
|
displayMessage(0x351f);
|
|
} else {
|
|
SET_FLAG(0xDB99, 1);
|
|
playSound(57, 6);
|
|
playActorAnimation(536);
|
|
Dialog::show(scene, 0x30c3);
|
|
inventory->add(0x8);
|
|
}
|
|
return true;
|
|
|
|
case 0x53a1:
|
|
if (CHECK_FLAG(0xdbb2, 1)) { //spoken to man in well
|
|
displayMessage(0x411d);
|
|
} else {
|
|
SET_FLAG(0xDBB2, 1);
|
|
displayMessage(0x408a);
|
|
displayMessage(0x4091);
|
|
displayMessage(0x4098);
|
|
displayMessage(0x40a7);
|
|
displayMessage(0x40b6);
|
|
displayMessage(0x40ce);
|
|
displayMessage(0x40e8);
|
|
displayMessage(0x410f);
|
|
}
|
|
return true;
|
|
|
|
|
|
case 0x5458: {
|
|
setOns(2, 0);
|
|
playSound(34, 7);
|
|
playActorAnimation(535);
|
|
inventory->add(11);
|
|
disableObject(1);
|
|
|
|
byte * scene_15_ons = scene->getOns(15); //patch ons for the scene 15
|
|
scene_15_ons[0] = 0;
|
|
|
|
byte f = GET_FLAG(0xDB98) + 1;
|
|
SET_FLAG(0xDB98, f);
|
|
if (f >= 2) {
|
|
//disable object boat for scene 15!!
|
|
scene->getObject(1, 15)->enabled = 0;
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x54b3: {
|
|
setOns(1, 0);
|
|
setOns(3, 0);
|
|
playSound(33, 6);
|
|
playActorAnimation(534);
|
|
inventory->add(10);
|
|
disableObject(2);
|
|
setOns(1, 10);
|
|
|
|
byte * scene_15_ons = scene->getOns(15); //patch ons for the scene 15
|
|
scene_15_ons[1] = 0;
|
|
byte f = GET_FLAG(0xDB98) + 1;
|
|
SET_FLAG(0xDB98, f);
|
|
if (f >= 2) {
|
|
//disable object boat for scene 15!!
|
|
scene->getObject(1, 15)->enabled = 0;
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x5502:
|
|
setOns(0, 0);
|
|
loadScene(15, 115, 180, 1);
|
|
playActorAnimation(568);
|
|
playMusic(6);
|
|
return true;
|
|
|
|
case 0x5561://Enter lakeside house
|
|
processCallback(0x557e);
|
|
loadScene(19, 223, 119, 1);
|
|
return true;
|
|
|
|
case 0x557e:
|
|
//scaled moveTo
|
|
if (scene->getPosition().y <= 149)
|
|
moveTo(94, 115, 4);
|
|
else
|
|
moveTo(51, 149, 4);
|
|
return true;
|
|
|
|
case 0x563b:
|
|
playSound(5, 10);
|
|
setOns(1, 0);
|
|
playActorAnimation(561);
|
|
inventory->add(26);
|
|
disableObject(6);
|
|
return true;
|
|
|
|
case 0x56f6:
|
|
playSound(32, 7);
|
|
setOns(1, 0);
|
|
playActorAnimation(626);
|
|
disableObject(12);
|
|
inventory->add(45);
|
|
displayMessage(0x3b04);
|
|
return true;
|
|
|
|
case 0x5756://Open car door
|
|
playSound(11, 4);
|
|
playActorAnimation(514);
|
|
setOns(4, 8);
|
|
setOns(2, 5);
|
|
enableObject(14);
|
|
enableObject(15);
|
|
enableObject(16);
|
|
disableObject(1);
|
|
return true;
|
|
|
|
case 0x5805://Enter basketball house
|
|
playSound(70, 6);
|
|
playActorAnimation(513);
|
|
loadScene(22, 51, 180, 2);
|
|
return true;
|
|
|
|
case 0x5832://Ring doorbell
|
|
playActorAnimation(509);
|
|
displayMessage(0x5dce);
|
|
return true;
|
|
|
|
case 0x58a2:
|
|
Dialog::pop(scene, 0xdaba);
|
|
strcpy(scene->getObject(13)->name, (const char *)res->dseg.ptr(0x92e5));
|
|
return true;
|
|
|
|
case 0x58b7://Get comb from car
|
|
disableObject(14);
|
|
setOns(4,0);
|
|
playSound(5, 7);
|
|
playActorAnimation(521);
|
|
setOns(4, 0);
|
|
inventory->add(0x6);
|
|
return true;
|
|
|
|
case 0x58df://Pull trunk lever in car
|
|
SET_FLAG(0xDB94, 1);
|
|
playSound(6, 1);
|
|
setOns(3, 6);
|
|
playActorAnimation(515);
|
|
return true;
|
|
|
|
case 0x593e://Enter annes house
|
|
playSound(89, 4);
|
|
playActorAnimation(980);
|
|
loadScene(23, 76, 199, 1);
|
|
if (CHECK_FLAG(0xDBEE, 1))
|
|
playMusic(7);
|
|
return true;
|
|
|
|
case 0x5994:
|
|
processCallback(0x599b);
|
|
processCallback(0x5a21);
|
|
return true;
|
|
|
|
case 0x599b:
|
|
return true;
|
|
|
|
case 0x5a21:
|
|
loadScene(24, 230, 170, 1);
|
|
playSound(52, 3);
|
|
playSound(52, 7);
|
|
playSound(52, 11);
|
|
playSound(52, 14);
|
|
playSound(52, 18);
|
|
playSound(52, 21);
|
|
playSound(52, 25);
|
|
playActorAnimation(601);
|
|
moveTo(230, 179, 3);
|
|
if (!CHECK_FLAG(0xDBA4, 1))
|
|
displayMessage(0x37ea); //it's kinda dark here
|
|
return true;
|
|
|
|
case 0x5a8b:
|
|
if (!CHECK_FLAG(0xDBAD, 1)) {
|
|
playSound(43, 4); //grrrrrr
|
|
setLan(1, 0);
|
|
playAnimation(656, 1);
|
|
setLan(1, 0xff);
|
|
displayMessage(0x3c16);
|
|
} else if (!CHECK_FLAG(0xDBA3, 1)) {//Dog has bone
|
|
playSound(28, 3);
|
|
playActorAnimation(596);
|
|
setOns(1, 30);
|
|
SET_FLAG(0xDBA3, 1);
|
|
enableObject(8);
|
|
} else {
|
|
setOns(1, 0);
|
|
playSound(4, 4);
|
|
playActorAnimation(597);
|
|
SET_FLAG(0xDBA3, 0);
|
|
disableObject(8);
|
|
displayMessage(0x37b8);
|
|
setOns(1, 32, 24);
|
|
enableObject(4, 24);
|
|
}
|
|
return true;
|
|
|
|
case 0x5b3a://Click on dog
|
|
Dialog::pop(scene, 0xDB14);
|
|
return true;
|
|
|
|
case 0x5b59: //picking up the rope
|
|
Dialog::show(scene, 0x2cbd);
|
|
Dialog::show(scene, 0x2dc2);
|
|
moveRel(0, -12, 0);
|
|
playSound(34, 5);
|
|
playActorAnimation(607);
|
|
setOns(0, 0);
|
|
playActorAnimation(608);
|
|
playActorAnimation(609);
|
|
playActorAnimation(610);
|
|
playSound(5, 25);
|
|
playActorAnimation(611);
|
|
moveTo(16, scene->getPosition().y, 4);
|
|
inventory->add(38);
|
|
disableObject(12);
|
|
return true;
|
|
|
|
case 0x5be1://Talk to grandpa
|
|
Dialog::pop(scene, 0xDAC4);
|
|
return true;
|
|
|
|
case 0x5c0d: //grandpa - drawers
|
|
if (CHECK_FLAG(0xDBA7, 1)) {
|
|
displayMessage(0x3bac);
|
|
} else {
|
|
if (!CHECK_FLAG(0xDB92, 1))
|
|
Dialog::show(scene, 0x15a0); //can I search your drawers?
|
|
|
|
playSound(66);
|
|
playActorAnimation(631);
|
|
inventory->add(47);
|
|
SET_FLAG(0xDBA7, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x5c84:
|
|
if (CHECK_FLAG(0xDB92, 1)) {
|
|
inventory->add(2);
|
|
disableObject(7);
|
|
playSound(32);
|
|
setOns(0, 0);
|
|
playActorAnimation(520);
|
|
} else {
|
|
Dialog::pop(scene, 0xDACE);
|
|
}
|
|
return true;
|
|
|
|
case 0x5cf0://Exit basketball house
|
|
playSound(88, 5);
|
|
playActorAnimation(981);
|
|
loadScene(20, 161, 165);
|
|
return true;
|
|
|
|
case 0x5d24: //getting the fan
|
|
if (CHECK_FLAG(0xDB92, 1)) {
|
|
setLan(2, 0);
|
|
playSound(32);
|
|
playActorAnimation(508);
|
|
disableObject(13);
|
|
inventory->add(7);
|
|
} else {
|
|
Dialog::pop(scene, 0xDAD4);
|
|
}
|
|
return true;
|
|
|
|
case 0x5e4d: //right click on ann
|
|
if (!CHECK_FLAG(0xDB97, 0)) {
|
|
displayMessage(0x3d59);
|
|
} else {
|
|
moveTo(245, 198, 1);
|
|
Dialog::show(scene, 0x21d7);
|
|
SET_FLAG(0xDB97, 1);
|
|
for(byte i = 10; i <= 20; i += 2)
|
|
playSound(13, i);
|
|
playAnimation(528, 1);
|
|
playMusic(7);
|
|
SET_FLAG(0xDBEE, 1);
|
|
for(byte i = 3; i <= 17; i += 2)
|
|
playSound(56, i);
|
|
playActorAnimation(525);
|
|
for(byte i = 1; i <= 13; i += 2)
|
|
playSound(56, i);
|
|
playSound(40, 15);
|
|
playSound(40, 18);
|
|
playSound(40, 22);
|
|
playActorAnimation(526);
|
|
playSound(54, 1);
|
|
playSound(55, 5);
|
|
playActorAnimation(527);
|
|
Dialog::show(scene, 0x2219);
|
|
strcpy(scene->getObject(2)->name, (const char *)res->dseg.ptr(0x9820));
|
|
}
|
|
return true;
|
|
|
|
case 0x5f73: //exiting ann's house
|
|
if (CHECK_FLAG(0xDBEE, 1))
|
|
playMusic(6);
|
|
loadScene(21, 161, 165);
|
|
|
|
return true;
|
|
|
|
case 0x5fba:
|
|
if (CHECK_FLAG(0xDBB1, 1)) {
|
|
displayMessage(0x4380);
|
|
} else {
|
|
Dialog::pop(scene, 0xDAFC);
|
|
}
|
|
return true;
|
|
|
|
case 0x607f:
|
|
processCallback(0x60b5);
|
|
return true;
|
|
|
|
case 0x6083:
|
|
if (CHECK_FLAG(0xDBA4, 1)) {
|
|
setOns(0, 0);
|
|
playSound(56, 10);
|
|
playActorAnimation(599);
|
|
inventory->add(37);
|
|
disableObject(2);
|
|
} else
|
|
processCallback(0x60b5);
|
|
return true;
|
|
|
|
case 0x60b5:
|
|
if (CHECK_FLAG(0xDBAE, 1)) {
|
|
processCallback(0x60d9);
|
|
Dialog::show(scene, 0x2fdd);
|
|
} else {
|
|
Dialog::show(scene, 0x2e41);
|
|
processCallback(0x60d9);
|
|
Dialog::show(scene, 0x2e6d);
|
|
}
|
|
return true;
|
|
|
|
case 0x60d9: {
|
|
Object *obj = scene->getObject(3);
|
|
moveTo(obj);
|
|
processCallback(0x612b);
|
|
moveTo(48, 190, 3);
|
|
}
|
|
return true;
|
|
|
|
case 0x612b:
|
|
playSound(52, 10);
|
|
playSound(52, 14);
|
|
playSound(52, 18);
|
|
playSound(52, 21);
|
|
playSound(52, 25);
|
|
playSound(52, 28);
|
|
playSound(52, 32);
|
|
playActorAnimation(600);
|
|
loadScene(21, 297, 178, 3);
|
|
return true;
|
|
|
|
case 0x6176:
|
|
if (CHECK_FLAG(0xDBA4, 1)) {
|
|
displayMessage(0x3801);
|
|
return true;
|
|
}
|
|
playSound(71, 6);
|
|
playActorAnimation(598);
|
|
loadScene(24, scene->getPosition());
|
|
setOns(2, 0);
|
|
setLan(1, 0);
|
|
playAnimation(660, 1);
|
|
disableObject(1);
|
|
SET_FLAG(0xDBA4, 1);
|
|
loadScene(24, scene->getPosition());
|
|
|
|
return true;
|
|
|
|
case 0x61e9:
|
|
if (CHECK_FLAG(0xDBA4, 1)) {
|
|
Dialog::pop(scene, 0xdb1e);
|
|
} else
|
|
processCallback(0x61fe);
|
|
|
|
return true;
|
|
|
|
case 0x6229: //shelves in cellar
|
|
if (CHECK_FLAG(0xDBA4, 1)) {
|
|
Common::Point p = scene->getPosition();
|
|
byte v = GET_FLAG(0xDBB4);
|
|
switch(v) {
|
|
case 0:
|
|
displayMessage(0x4532);
|
|
moveRel(-34, 0, 1);
|
|
displayMessage(0x4555);
|
|
moveRel(20, 0, 1);
|
|
displayMessage(0x4568);
|
|
moveRel(20, 0, 1);
|
|
displayMessage(0x457b);
|
|
moveRel(20, 0, 1);
|
|
displayMessage(0x458e);
|
|
moveTo(p, 3);
|
|
SET_FLAG(0xDBB4, 1);
|
|
break;
|
|
case 1:
|
|
displayMessage(0x45b8);
|
|
displayMessage(0x45da);
|
|
SET_FLAG(0xDBB4, 2);
|
|
break;
|
|
default:
|
|
displayMessage(0x4603);
|
|
}
|
|
} else
|
|
processCallback(0x61fe);
|
|
|
|
return true;
|
|
|
|
case 0x6480: //dive mask
|
|
if (CHECK_FLAG(0xDB96, 1)) {
|
|
setOns(3, 36);
|
|
playSound(56, 7);
|
|
playSound(5, 15);
|
|
playActorAnimation(613);
|
|
inventory->add(39);
|
|
disableObject(5);
|
|
displayMessage(0x387c);
|
|
} else
|
|
displayMessage(0x3eb2);
|
|
return true;
|
|
|
|
case 0x64c4: //flippers
|
|
if (CHECK_FLAG(0xDB96, 1)) {
|
|
setOns(2, 35);
|
|
playSound(63, 8);
|
|
playSound(24, 10);
|
|
playActorAnimation(612);
|
|
inventory->add(40);
|
|
disableObject(6);
|
|
} else
|
|
displayMessage(0x3eb2);
|
|
return true;
|
|
|
|
case 0x7907://Describe car lever
|
|
if (CHECK_FLAG(0xdb94, 1)) {//Already pulled lever?
|
|
displayMessage(0x3e4f);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x62d0://Get bone from under rock
|
|
playSound(26, 6);
|
|
setOns(0, 0);
|
|
playActorAnimation(594);
|
|
setOns(0, 29);
|
|
displayMessage(0x463c);
|
|
disableObject(1);
|
|
inventory->add(36);
|
|
playSound(5, 3);
|
|
playActorAnimation(595);
|
|
displayMessage(0x3790);
|
|
return true;
|
|
|
|
case 0x6351:
|
|
if (CHECK_FLAG(0xdaca, 1)) { //cave bush is cut down
|
|
playMusic(8);
|
|
loadScene(26, 319, 169, 4);
|
|
} else
|
|
displayMessage(0x3bd2);
|
|
return true;
|
|
|
|
case 0x63ea:
|
|
playSound(5, 10);
|
|
setOns(0, 0);
|
|
playActorAnimation(640);
|
|
inventory->add(50);
|
|
disableObject(6);
|
|
return true;
|
|
|
|
case 0x6411://Kick hen
|
|
if (CHECK_FLAG(0xdb93, 1)) { //already kicked hen
|
|
displayMessage(0x3e08);
|
|
return true;
|
|
} else {
|
|
SET_FLAG(0xdb93, 1);
|
|
playSound(30, 26);
|
|
displayMessage(0x3dc6);
|
|
playActorAnimation(500, true);
|
|
playAnimation(501, 1, true);
|
|
waitAnimation();
|
|
setOns(0, 1);
|
|
enableObject(14);
|
|
displayMessage(0x3df4);
|
|
return true;
|
|
}
|
|
|
|
case 0x6592: //Rake
|
|
setOns(1, 0);
|
|
playSound(18, 10);
|
|
playActorAnimation(553);
|
|
inventory->add(0x15);
|
|
displayMessage(0x3605);
|
|
disableObject(11);
|
|
return true;
|
|
|
|
case 0x66b5:
|
|
playSound(89, 5);
|
|
playActorAnimation(969);
|
|
loadScene(33, 319, 181, 4);
|
|
return true;
|
|
|
|
case 0x6519://Sickle
|
|
setOns(4, 0);
|
|
playSound(5, 11);
|
|
playActorAnimation(625);
|
|
inventory->add(0x2c);
|
|
disableObject(8);
|
|
return true;
|
|
|
|
case 0x655b://Get needle from haystack
|
|
if (CHECK_FLAG(0xdabb, 1)) { //already have needle
|
|
displayMessage(0x356a);
|
|
return true;
|
|
} else {
|
|
SET_FLAG(0xdabb, 1);
|
|
playSound(49, 3);
|
|
playActorAnimation(548);
|
|
inventory->add(0x11);
|
|
displayMessage(0x35b2);
|
|
return true;
|
|
}
|
|
|
|
case 0x663c://Feather
|
|
setOns(0, 0);
|
|
playSound(5, 9);
|
|
playActorAnimation(511);
|
|
inventory->add(1);
|
|
disableObject(15);
|
|
return true;
|
|
|
|
case 0x667c:
|
|
playSound(70, 4);
|
|
playActorAnimation(972);
|
|
loadScene(29, 160, 199, 1);
|
|
return true;
|
|
|
|
case 0x66a9:
|
|
displayMessage(0x4a7e);
|
|
disableObject(4);
|
|
return true;
|
|
|
|
case 0x66e2:
|
|
playSound(88, 4);
|
|
playActorAnimation(970);
|
|
loadScene(35, 160, 199, 1);
|
|
return true;
|
|
|
|
case 0x70bb:
|
|
Dialog::pop(scene, 0xdb24, 709);
|
|
return true;
|
|
|
|
case 0x71ae:
|
|
if (CHECK_FLAG(0xDBCD, 1)) {
|
|
if (CHECK_FLAG(0xDBCE, 1)) {
|
|
displayMessage(0x4f9b);
|
|
} else {
|
|
displayMessage(0x4fb1);
|
|
playSound(32, 6);
|
|
playActorAnimation(717);
|
|
inventory->add(66);
|
|
SET_FLAG(0xDBCE, 1);
|
|
}
|
|
} else
|
|
Dialog::show(scene, 0x3c9d);
|
|
return true;
|
|
|
|
case 0x70c8:
|
|
if (!processCallback(0x70e0))
|
|
return true;
|
|
moveTo(81, 160, 4);
|
|
displayMessage(0x5cac);
|
|
return true;
|
|
|
|
case 0x70e0:
|
|
if (!CHECK_FLAG(0xDBCC, 1)) {
|
|
displayMessage(0x4ece);
|
|
return false;
|
|
}
|
|
return true;
|
|
|
|
case 0x70ef:
|
|
if (!processCallback(0x70e0))
|
|
return true;
|
|
displayMessage(0x5046);
|
|
return true;
|
|
|
|
case 0x70f9:
|
|
if (inventory->has(68)) {
|
|
inventory->remove(68);
|
|
loadScene(29, 40, 176, 2);
|
|
displayMessage(0x500a);
|
|
} else
|
|
loadScene(29, 40, 176, 2);
|
|
return true;
|
|
|
|
case 0x712c:
|
|
if (!processCallback(0x70e0))
|
|
return true;
|
|
|
|
if (CHECK_FLAG(0xDBCF, 1)) {
|
|
playSound(89, 4);
|
|
playActorAnimation(719);
|
|
setOns(4, 67);
|
|
++ *res->dseg.ptr(READ_LE_UINT16(res->dseg.ptr(0x6746 + (scene->getId() - 1) * 2)));
|
|
disableObject(5);
|
|
enableObject(12);
|
|
} else {
|
|
playSound(89, 4);
|
|
playSound(89, 4);
|
|
playSound(87, 45);
|
|
playActorAnimation(718);
|
|
displayMessage(0x4fcb); //fixme: move it to animation
|
|
displayMessage(0x4fe2);
|
|
SET_FLAG(0xDBCF, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x71eb:
|
|
setOns(2, 0);
|
|
playSound(32, 7);
|
|
playActorAnimation(710);
|
|
inventory->add(62);
|
|
disableObject(7);
|
|
enableObject(8);
|
|
return true;
|
|
|
|
case 0x7244:
|
|
if (!processCallback(0x70e0))
|
|
return true;
|
|
displayMessage(0x5c60);
|
|
return true;
|
|
|
|
case 0x7255:
|
|
if (CHECK_FLAG(0xDBD0, 1)) {
|
|
setOns(4, 69);
|
|
playSound(32, 5);
|
|
playActorAnimation(725);
|
|
disableObject(12);
|
|
inventory->add(69);
|
|
} else {
|
|
playActorAnimation(721);
|
|
displayMessage(0x505e);
|
|
}
|
|
return true;
|
|
|
|
case 0x721c:
|
|
setOns(3, 0);
|
|
playSound(32, 7);
|
|
playActorAnimation(715);
|
|
inventory->add(63);
|
|
disableObject(9);
|
|
return true;
|
|
|
|
case 0x7336:
|
|
setOns(1, 0);
|
|
playSound(5, 42);
|
|
displayMessage(0x4d02);
|
|
playActorAnimation(697);
|
|
inventory->add(56);
|
|
disableObject(1);
|
|
return true;
|
|
|
|
case 0x73a3:
|
|
if (CHECK_FLAG(0xdbc5, 1)) {
|
|
SET_FLAG(0xdbc5, 0);
|
|
|
|
//call 73e6
|
|
playSound(71, 3);
|
|
playActorAnimation(700);
|
|
|
|
} else {
|
|
SET_FLAG(0xdbc5, 1);
|
|
|
|
//call 73e6
|
|
playSound(71, 3);
|
|
playActorAnimation(700);
|
|
|
|
playAnimation(CHECK_FLAG(0xDBC6, 0)? 701:702, 1);
|
|
|
|
if (CHECK_FLAG(0xDBC6, 1)) {
|
|
displayMessage(0x4da6);
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x7381:
|
|
playSound(5, 12);
|
|
playActorAnimation(704);
|
|
disableObject(2);
|
|
inventory->add(58);
|
|
return true;
|
|
|
|
case 0x7408:
|
|
if (CHECK_FLAG(0xDBC4, 1)) {
|
|
displayMessage(0x4d2a);
|
|
} else {
|
|
setOns(0, 0);
|
|
playSound(26, 17);
|
|
playSound(26, 23);
|
|
playSound(26, 30);
|
|
playSound(26, 37);
|
|
playSound(26, 43);
|
|
playSound(52, 34);
|
|
playActorAnimation(698);
|
|
setOns(0, 52);
|
|
setOns(2, 61);
|
|
Dialog::show(scene, 0x38b6);
|
|
enableObject(11);
|
|
SET_FLAG(0xDBC4, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x7476:
|
|
if (CHECK_FLAG(0xDBC9, 1)) {
|
|
displayMessage(0x4dbb);
|
|
} else {
|
|
SET_FLAG(0xDBC9, 1);
|
|
Dialog::show(scene, 0x3aca);
|
|
playSound(61, 5);
|
|
playSound(5, 14);
|
|
playActorAnimation(705);
|
|
displayMessage(0x4dd3);
|
|
inventory->add(59);
|
|
}
|
|
return true;
|
|
|
|
case 0x74d1:
|
|
setOns(2, 0);
|
|
playSound(5, 12);
|
|
playActorAnimation(699);
|
|
inventory->add(57);
|
|
disableObject(11);
|
|
return true;
|
|
|
|
case 0x7513:
|
|
if (CHECK_FLAG(0xDBD7, 1)) {
|
|
if (CHECK_FLAG(0xDBD8, 1)) {
|
|
playSound(88, 4);
|
|
playActorAnimation(979);
|
|
loadScene(37, 51, 183);
|
|
Dialog::show(scene, 0x54ea, 768, 769);
|
|
playActorAnimation(770, true);
|
|
playAnimation(771, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x5523, 768, 769);
|
|
playSound(5, 3);
|
|
playSound(56, 12);
|
|
playSound(23, 20);
|
|
playSound(75, 25);
|
|
playActorAnimation(772);
|
|
|
|
playActorAnimation(774, true);
|
|
playAnimation(773, 1, true);
|
|
waitAnimation();
|
|
setOns(0, 74);
|
|
Dialog::show(scene, 0x5556, 775);
|
|
playAnimation(776, 1);
|
|
Dialog::show(scene, 0x55f7, 777, 778);
|
|
playActorAnimation(779, true);
|
|
playAnimation(780, 1, true);
|
|
waitAnimation();
|
|
|
|
for(byte i = 1; i <= 6; ++i)
|
|
playSound(58, i);
|
|
playSound(58, 10);
|
|
playSound(2, 7);
|
|
playSound(55, 11);
|
|
playSound(54, 15);
|
|
playAnimation(781, 2, true);
|
|
playAnimation(782, 3, true);
|
|
waitAnimation();
|
|
setOns(1, 75);
|
|
setOns(2, 76);
|
|
for(byte i = 1; i <= 6; ++i)
|
|
playSound(58, i);
|
|
playSound(58, 9);
|
|
playSound(2, 7);
|
|
playSound(2, 15);
|
|
playSound(55, 10);
|
|
|
|
playAnimation(783, 2, true);
|
|
playAnimation(784, 3, true);
|
|
waitAnimation();
|
|
|
|
setOns(1, 77);
|
|
setOns(2, 78);
|
|
|
|
playAnimation(785, 2, true);
|
|
playAnimation(786, 3, true);
|
|
waitAnimation();
|
|
|
|
moveTo(112, 183, 2);
|
|
setOns(3, 79);
|
|
setOns(0, 0);
|
|
|
|
playAnimation(787, 2, true);
|
|
playAnimation(788, 3, true);
|
|
waitAnimation();
|
|
|
|
playSound(32, 2);
|
|
playSound(24, 7);
|
|
|
|
playAnimation(789, 2, true);
|
|
playAnimation(790, 3, true);
|
|
waitAnimation();
|
|
|
|
setOns(0, 80);
|
|
Dialog::show(scene, 0x5665);
|
|
playAnimation(792, 3);
|
|
|
|
moveTo(40, 171, 4);
|
|
setOns(3, 81, 35);
|
|
enableObject(12, 35);
|
|
|
|
loadScene(31, 298, 177, 4);
|
|
SET_FLAG(0xDBD9, 1);
|
|
} else {
|
|
displayMessage(0x52fe);
|
|
}
|
|
} else
|
|
displayMessage(0x52cb);
|
|
return true;
|
|
|
|
case 0x783d:
|
|
Dialog::pop(scene, 0xdb36, 797);
|
|
return true;
|
|
|
|
case 0x7ad0:
|
|
case 0x7ad7:
|
|
return !processCallback(0x70e0);
|
|
|
|
case 0x7ade:
|
|
if (CHECK_FLAG(0xdbcd, 1)) {
|
|
displayMessage(0x4f69);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7f23://Use grenade on captains drawer
|
|
if (CHECK_FLAG(0xDBDF, 3)) {
|
|
playSound(5, 3);
|
|
playSound(58, 11);
|
|
playSound(46, 56);
|
|
playSound(46, 85);
|
|
playSound(46, 117);
|
|
playActorAnimation(870);
|
|
playSound(54, 15);
|
|
playActorAnimation(871);
|
|
SET_FLAG(0xDBE6, 1);
|
|
setOns(1, 0x66);
|
|
moveTo(224, 194, 0, true);
|
|
debug(0, "FIXME: add cut message: 57DF at 30423");
|
|
inventory->remove(0x59);
|
|
} else {
|
|
displayMessage(0x5de2);
|
|
}
|
|
return true;
|
|
|
|
case 0x505c:
|
|
{
|
|
//suspicious stuff
|
|
Common::Point p = scene->getPosition();
|
|
if (p.x != 203 && p.y != 171)
|
|
moveTo(203, 169, 2);
|
|
else
|
|
moveTo(203, 169, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x509a:
|
|
processCallback(0x505c);
|
|
setOns(1, 0);
|
|
playSound(5, 10);
|
|
playActorAnimation(543);
|
|
inventory->add(15);
|
|
disableObject(9);
|
|
return true;
|
|
|
|
case 0x7802:
|
|
if (CHECK_FLAG(0xDBD7, 1)) {
|
|
if (CHECK_FLAG(0xDBD8, 1))
|
|
displayMessage(0x52f6);
|
|
else {
|
|
playSound(71, 4);
|
|
playActorAnimation(796);
|
|
setLan(1, 0);
|
|
SET_FLAG(0xDBD8, 1);
|
|
}
|
|
} else
|
|
displayMessage(0x52cb);
|
|
return true;
|
|
|
|
case 0x78e0:
|
|
processCallback(0x50c5);
|
|
return false;
|
|
|
|
case 0x78e7:
|
|
processCallback(0x557e);
|
|
return false;
|
|
|
|
case 0x78ee:
|
|
processCallback(0x557e);
|
|
return false;
|
|
|
|
case 0x78f5:
|
|
if (CHECK_FLAG(0xDB95, 1)) {
|
|
displayMessage(0x3575);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7919:
|
|
if (!CHECK_FLAG(0xDBA5, 1))
|
|
return false;
|
|
displayMessage(0x3E98);
|
|
return true;
|
|
|
|
case 0x7950:
|
|
if (!CHECK_FLAG(0xDBB1, 1))
|
|
return false;
|
|
|
|
displayMessage(0x3DAF);
|
|
return true;
|
|
|
|
case 0x7975:
|
|
if (CHECK_FLAG(0xDBA4, 1))
|
|
return false;
|
|
displayMessage(0x3832);
|
|
return true;
|
|
|
|
case 0x7987:
|
|
case 0x7996:
|
|
case 0x79a5:
|
|
case 0x79b4:
|
|
if (CHECK_FLAG(0xDBA4, 1))
|
|
return false;
|
|
return processCallback(0x61fe);
|
|
|
|
case 0x7af0:
|
|
if (!processCallback(0x70e0))
|
|
return true;
|
|
return false;
|
|
|
|
case 0x8117:
|
|
Dialog::show(scene, 0x0a41, 529);
|
|
playSound(5, 2);
|
|
playSound(5, 44);
|
|
playAnimation(642, 1, true);
|
|
playActorAnimation(641, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x0aff, 529);
|
|
Dialog::show(scene, 0x0ba0, 529);
|
|
moveRel(0, 1, 0);
|
|
Dialog::show(scene, 0x0c10, 529);
|
|
inventory->remove(50);
|
|
processCallback(0x9d45);
|
|
return true;
|
|
|
|
case 0x8174:
|
|
setOns(0, 0);
|
|
playSound(5, 2);
|
|
playSound(5, 5);
|
|
playSound(5, 9);
|
|
playSound(14, 19);
|
|
playSound(5, 50);
|
|
playActorAnimation(542);
|
|
setOns(1, 15);
|
|
disableObject(3);
|
|
enableObject(9);
|
|
return true;
|
|
|
|
case 0x81c2:
|
|
playSound(56, 11);
|
|
playSound(36, 13);
|
|
playSound(48, 22);
|
|
playSound(56, 57);
|
|
playSound(36, 59);
|
|
playSound(48, 68);
|
|
playSound(54, 120);
|
|
playSound(56, 141);
|
|
playSound(56, 144);
|
|
playSound(56, 147);
|
|
playAnimation(589, 1, true);
|
|
playActorAnimation(588, true);
|
|
waitAnimation();
|
|
displayMessage(0x367f);
|
|
inventory->remove(34);
|
|
SET_FLAG(0xDBA1, 1);
|
|
return true;
|
|
|
|
case 0x823d: //grappling hook on the wall
|
|
playSound(5, 3);
|
|
for(byte i = 16; i <= 28; i += 2)
|
|
playSound(65, i);
|
|
playSound(47, 33);
|
|
playActorAnimation(620);
|
|
for(byte i = 3; i <= 18; i += 3)
|
|
playSound(56, i);
|
|
playActorAnimation(621, true);
|
|
playAnimation(623, 1, true);
|
|
waitAnimation();
|
|
playSound(35);
|
|
playActorAnimation(622, true);
|
|
playAnimation(624, 1, true);
|
|
displayMessage(0x3afd);
|
|
inventory->remove(43);
|
|
processCallback(0x9d45);
|
|
return true;
|
|
|
|
|
|
case 0x8312: //hedgehog + plastic apple
|
|
Dialog::show(scene, 0x3000);
|
|
setLan(1, 0);
|
|
playSound(5, 24);
|
|
playSound(26, 32);
|
|
playSound(5, 42);
|
|
playSound(15, 77);
|
|
playSound(15, 79);
|
|
playSound(15, 82);
|
|
playSound(22, 91);
|
|
playSound(22, 102);
|
|
playSound(26, 114);
|
|
playSound(24, 124);
|
|
playActorAnimation(562, true);
|
|
playAnimation(563, 1, true);
|
|
waitAnimation();
|
|
|
|
disableObject(6);
|
|
displayMessage(0x363f);
|
|
inventory->remove(27);
|
|
inventory->add(28);
|
|
return true;
|
|
|
|
case 0x839f:
|
|
inventory->remove(32);
|
|
playSound(37, 14);
|
|
playSound(16, 17);
|
|
playActorAnimation(564, true);
|
|
playAnimation(565, 2, true);
|
|
waitAnimation();
|
|
setOns(0, 24);
|
|
playSound(39, 5);
|
|
playActorAnimation(582);
|
|
moveTo(63, 195, 1);
|
|
playAnimation(571, 1);
|
|
playAnimation(572, 1);
|
|
playAnimation(573, 1);
|
|
for(byte i = 1; i <= 7; i += 2)
|
|
playSound(40, i);
|
|
playAnimation(574, 1);
|
|
setLan(1, 0);
|
|
playAnimation(575, 1);
|
|
playAnimation(576, 1);
|
|
playAnimation(577, 1);
|
|
playAnimation(578, 1);
|
|
playAnimation(579, 1);
|
|
playAnimation(580, 1);
|
|
playSound(55, 18);
|
|
playAnimation(581, 1);
|
|
disableObject(2);
|
|
SET_FLAG(0xDB9F, 1);
|
|
return true;
|
|
|
|
case 0x84c7:
|
|
playSound(20, 9);
|
|
playActorAnimation(530);
|
|
loadScene(16, 236, 95, 1);
|
|
setOns(0, 9);
|
|
playActorAnimation(531);
|
|
playSound(36, 4);
|
|
playActorAnimation(532);
|
|
playActorAnimation(533);
|
|
moveTo(236, 95, 1, true);
|
|
playMusic(9);
|
|
return true;
|
|
|
|
case 0x8538://Sharpen sickle on well
|
|
moveTo(236, 190, 0);
|
|
setOns(2, 0);
|
|
//TODO: Remove handle sprite
|
|
playSound(5, 4);
|
|
playSound(14, 14);
|
|
playSound(14, 33);
|
|
playSound(5, 43);
|
|
playActorAnimation(643);
|
|
setOns(2, 43);
|
|
moveTo(236, 179, 3);
|
|
inventory->remove(0x2c);
|
|
inventory->add(0x2e);
|
|
return true;
|
|
|
|
case 0x85eb:
|
|
if (CHECK_FLAG(0xDBB0, 1)) {
|
|
enableObject(6);
|
|
playSound(25, 10);
|
|
playSound(25, 14);
|
|
playSound(25, 18);
|
|
playActorAnimation(559);
|
|
setOns(1, 23);
|
|
SET_FLAG(0xDBB0, 2);
|
|
} else
|
|
displayMessage(0x3d86);
|
|
|
|
return true;
|
|
|
|
case 0x863d:
|
|
playSound(12, 4);
|
|
playSound(50, 20);
|
|
playSound(50, 29);
|
|
playActorAnimation(554);
|
|
inventory->remove(19);
|
|
inventory->add(22);
|
|
return true;
|
|
|
|
case 0x8665:
|
|
playSound(5, 3);
|
|
for (byte i = 12; i <= 24; i += 2)
|
|
playSound(56, i);
|
|
playActorAnimation(567);
|
|
inventory->remove(12);
|
|
inventory->add(33);
|
|
return true;
|
|
|
|
case 0x86a9: //correcting height of the pole with spanner
|
|
if (CHECK_FLAG(0xDB92, 1)) {
|
|
displayMessage(0x3d40);
|
|
} else {
|
|
SET_FLAG(0xDB92, 1);
|
|
Dialog::show(scene, 0x0fcd);
|
|
playSound(5, 16);
|
|
playSound(1, 25);
|
|
playSound(1, 29);
|
|
playSound(1, 34);
|
|
playAnimation(506, 1);
|
|
playActorAnimation(504);
|
|
setOns(0, 0);
|
|
playSound(24, 2);
|
|
playSound(22, 24);
|
|
playSound(1, 28);
|
|
playSound(1, 32);
|
|
playSound(1, 37);
|
|
playSound(5, 43);
|
|
playSound(61, 70);
|
|
playSound(61, 91);
|
|
playActorAnimation(505);
|
|
displayMessage(0x3cfb);
|
|
playAnimation(507, 1);
|
|
setOns(0, 4);
|
|
Object * obj = scene->getObject(3);
|
|
obj->rect.top += 20;
|
|
obj->rect.bottom += 20;
|
|
playSound(10);
|
|
playAnimation(503, 1);
|
|
setLan(1, 0, 22);
|
|
scene->getObject(1, 22)->enabled = 0;
|
|
scene->getObject(13, 20)->enabled = 0;
|
|
setLan(1, 0);
|
|
disableObject(1);
|
|
disableObject(2);
|
|
disableObject(14);
|
|
disableObject(15);
|
|
disableObject(16);
|
|
moveTo(162, 164, 2);
|
|
displayMessage(0x3d01, 0xe5);
|
|
displayMessage(0x3d20, 0xd8);
|
|
moveTo(162, 191, 2);
|
|
setOns(1, 0);
|
|
setOns(2, 0);
|
|
setOns(3, 0);
|
|
setOns(4, 0);
|
|
scene->getWalkbox(0)->rect.clear();
|
|
playSound(62);
|
|
//patch lan, 1
|
|
displayMessage(0x3d3a);
|
|
scene->getObject(7)->actor_rect.left = 228;
|
|
scene->getObject(7)->actor_rect.top = 171;
|
|
scene->getObject(8)->actor_rect.left = 290;
|
|
scene->getObject(8)->actor_rect.top = 171;
|
|
}
|
|
return true;
|
|
|
|
case 0x88c9: //give flower to old lady
|
|
if (CHECK_FLAG(0xDB9A, 1))
|
|
return processCallback(0x890b);
|
|
|
|
inventory->remove(10);
|
|
SET_FLAG(0xDB9A, 1);
|
|
processCallback(0x88DE);
|
|
return true;
|
|
|
|
case 0x88de:
|
|
playSound(5);
|
|
Dialog::show(scene, 0x1B5F, 523);
|
|
playActorAnimation(537);
|
|
playAnimation(538, 1);
|
|
Dialog::show(scene, 0x1BE0, 523);
|
|
return true;
|
|
|
|
case 0x890b:
|
|
Dialog::pop(scene, 0xDAF0);
|
|
return true;
|
|
|
|
case 0x8918://give flower to old lady
|
|
if (CHECK_FLAG(0xDB9A, 1))
|
|
return processCallback(0x890B);
|
|
|
|
inventory->remove(11);
|
|
SET_FLAG(0xDB9A, 1);
|
|
processCallback(0x88DE);
|
|
return true;
|
|
|
|
case 0x892d:
|
|
if (CHECK_FLAG(0xDB9B, 1))
|
|
return processCallback(0x89aa);
|
|
|
|
processCallback(0x8942);
|
|
inventory->remove(10);
|
|
SET_FLAG(0xDB9B, 1);
|
|
return true;
|
|
|
|
case 0x8942:
|
|
Dialog::show(scene, 0x2293);
|
|
playSound(5, 10);
|
|
playActorAnimation(540, true);
|
|
playAnimation(539, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x24b1);
|
|
Dialog::show(scene, 0x24d7);
|
|
Dialog::show(scene, 0x2514);
|
|
moveTo(scene->getPosition().x, scene->getPosition().y + 1, 0);
|
|
Dialog::show(scene, 0x2570);
|
|
return true;
|
|
|
|
case 0x89aa:
|
|
Dialog::pop(scene, 0xdb02);
|
|
return true;
|
|
|
|
case 0x89b7:
|
|
if (CHECK_FLAG(0xDB9B, 1))
|
|
return processCallback(0x89aa);
|
|
|
|
processCallback(0x8942);
|
|
inventory->remove(11);
|
|
SET_FLAG(0xDB9B, 1);
|
|
return true;
|
|
|
|
case 0x89cc:
|
|
inventory->remove(23);
|
|
playSound(5, 6);
|
|
Dialog::show(scene, 0x2634);
|
|
playActorAnimation(555, true);
|
|
playAnimation(556, 1, true);
|
|
waitAnimation();
|
|
playActorAnimation(557, true);
|
|
playAnimation(558, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x2971);
|
|
inventory->add(24);
|
|
return true;
|
|
|
|
case 0x8a22:
|
|
playSound(45, 16);
|
|
playActorAnimation(560);
|
|
inventory->remove(26);
|
|
inventory->add(27);
|
|
Dialog::show(scene, 0x1ecd);
|
|
Dialog::show(scene, 0x1f09);
|
|
SET_FLAG(0xDBB1, 1);
|
|
return true;
|
|
|
|
case 0x8a6f: //banknote + ann
|
|
if (CHECK_FLAG(0xDBB5, 1)) {
|
|
Dialog::show(scene, 0x2992);
|
|
playSound(5, 3);
|
|
playSound(5, 20);
|
|
playActorAnimation(671, true);
|
|
playAnimation(670, 1, true);
|
|
waitAnimation();
|
|
playAnimation(672, 1);
|
|
Dialog::show(scene, 0x2a00, 672);
|
|
//fixme: skipped some text
|
|
playSound(83, 12);
|
|
playActorAnimation(673);
|
|
loadScene(11, scene->getPosition());
|
|
playSound(24, 31);
|
|
playSound(24, 48);
|
|
playSound(79, 50);
|
|
playActorAnimation(674, true);
|
|
playAnimation(675, 1, true);
|
|
waitAnimation();
|
|
loadScene(28, 0, 167, 2);
|
|
moveTo(66, 167, 2);
|
|
displayMessage(0x4a6f);
|
|
inventory->clear();
|
|
inventory->add(29);
|
|
playMusic(10);
|
|
} else
|
|
displayMessage(0x4a29);
|
|
return true;
|
|
|
|
case 0x8b82: //use fan on laundry
|
|
setOns(0, 0);
|
|
playSound(5);
|
|
playActorAnimation(602);
|
|
displayMessage(0x464a);
|
|
playActorAnimation(603);
|
|
setOns(0, 27);
|
|
SET_FLAG(0xDBA5, 1);
|
|
return true;
|
|
|
|
case 0x8bfc://Give bone to dog
|
|
displayMessage(0x3c31);
|
|
playSound(5, 3);
|
|
playActorAnimation(657, true);
|
|
playAnimation(658, 1, true);
|
|
waitAnimation();
|
|
|
|
playAnimation(659, 1);
|
|
|
|
displayMessage(0x3c3d);
|
|
inventory->remove(36);
|
|
SET_FLAG(0xDBAD, 1);
|
|
//TODO:Adjust Walkboxes
|
|
return true;
|
|
|
|
case 0x8c6e://Use car jack on rock
|
|
playSound(5, 3);
|
|
playActorAnimation(592);
|
|
playSound(1, 5);
|
|
playActorAnimation(593);
|
|
setOns(0, 28);
|
|
disableObject(35);
|
|
enableObject(1);
|
|
inventory->remove(35);
|
|
return true;
|
|
|
|
case 0x8cc8://Cut bush with sickle
|
|
playSound(5, 3);
|
|
playActorAnimation(644);
|
|
setOns(1, 45);
|
|
playSound(56, 2);
|
|
playSound(26, 4);
|
|
playActorAnimation(645);
|
|
playSound(56, 1);
|
|
playSound(56, 6);
|
|
playSound(26, 3);
|
|
playSound(26, 8);
|
|
playActorAnimation(646);
|
|
playSound(5, 21);
|
|
playActorAnimation(647);
|
|
SET_FLAG(0xdaca, 1);
|
|
inventory->remove(0x2e);
|
|
disableObject(2);
|
|
return true;
|
|
|
|
case 0x8d57:
|
|
playSound(5, 2);
|
|
playSound(15, 12);
|
|
playActorAnimation(638);
|
|
inventory->remove(48);
|
|
//fixme: add time challenge here!
|
|
|
|
/*
|
|
inventory->add(48);
|
|
playSound(24, 26);
|
|
playActorAnimation(650, true);
|
|
playAnimation(651, 2, true);
|
|
waitAnimation();
|
|
*/
|
|
playSound(5, 2);
|
|
playSound(52, 13);
|
|
setOns(1, 46);
|
|
inventory->remove(49);
|
|
|
|
//third part
|
|
playActorAnimation(649);
|
|
setOns(1, 47);
|
|
for (byte i = 1; i <= 37; i += 4)
|
|
playSound(68, i);
|
|
playAnimation(639, 2);
|
|
setOns(0, 42);
|
|
enableObject(6);
|
|
disableObject(5);
|
|
SET_FLAG(0xDBAB, 1);
|
|
return true;
|
|
|
|
case 0x8f1d:
|
|
Dialog::show(scene, 0x2dd6);
|
|
setLan(3, 0);
|
|
setLan(4, 0);
|
|
displayMessage(0x34c7);
|
|
for(uint i = 16; i <= 30; i += 2)
|
|
playSound(56, i);
|
|
playSound(2, 64);
|
|
playSound(3, 74);
|
|
playActorAnimation(516, true);
|
|
playAnimation(517, 2, true);
|
|
playAnimation(518, 3, true);
|
|
waitAnimation();
|
|
disableObject(2);
|
|
disableObject(3);
|
|
inventory->remove(2);
|
|
SET_FLAG(0xDB96, 1);
|
|
return true;
|
|
|
|
case 0x8fc8:
|
|
displayMessage(0x3b2f);
|
|
playSound(5, 3);
|
|
playActorAnimation(627, true);
|
|
playAnimation(629, 1, true);
|
|
waitAnimation();
|
|
playSound(41, 10);
|
|
playSound(41, 47);
|
|
playSound(55, 52);
|
|
if (CHECK_FLAG(0xDBA8, 1)) {
|
|
setLan(2, 0);
|
|
playActorAnimation(628, true);
|
|
playAnimation(634, 1, true);
|
|
waitAnimation();
|
|
disableObject(4);
|
|
displayMessage(0x3b6c);
|
|
SET_FLAG(0xDBA9, 1);
|
|
} else {
|
|
playActorAnimation(628, true);
|
|
playAnimation(630, 1, true);
|
|
waitAnimation();
|
|
displayMessage(0x3b59);
|
|
}
|
|
return true;
|
|
|
|
case 0x9054: //mouse hole
|
|
if (CHECK_FLAG(0xDBAB, 1)) {
|
|
displayMessage(0x3c0b);
|
|
} else {
|
|
playSound(5, 11);
|
|
playSound(49, 21);
|
|
moveTo(scene->getPosition().x, 99, 0);
|
|
playActorAnimation(632);
|
|
setOns(5, 40);
|
|
moveTo(239, 139, 0, true);
|
|
playActorAnimation(633);
|
|
SET_FLAG(0xDBA8, 1);
|
|
inventory->remove(47);
|
|
if (!CHECK_FLAG(0xDBAA, 1)) {
|
|
SET_FLAG(0xDBAA, 1);
|
|
displayMessage(0x3b8b);
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x933d:
|
|
if (!processCallback(0x70e0))
|
|
return true;
|
|
|
|
if (CHECK_FLAG(0xdbcd, 1)) {
|
|
displayMessage(0x4f3d);
|
|
return true;
|
|
}
|
|
|
|
setOns(1, 0);
|
|
playSound(5, 3);
|
|
playSound(5, 33);
|
|
playSound(24, 13);
|
|
playSound(24, 19);
|
|
playSound(24, 23);
|
|
playSound(24, 26);
|
|
playSound(24, 29);
|
|
playSound(23, 21);
|
|
playSound(74, 25);
|
|
playActorAnimation(716);
|
|
setOns(1, 66);
|
|
SET_FLAG(0xDBCD, 1);
|
|
return true;
|
|
|
|
case 0x93af: //sheet + hot plate
|
|
if (!processCallback(0x70e0))
|
|
return true;
|
|
playSound(5, 3);
|
|
playSound(86, 11);
|
|
playActorAnimation(720);
|
|
inventory->add(68);
|
|
inventory->remove(55);
|
|
return true;
|
|
|
|
case 0x93d5: //burning sheet + plate
|
|
setOns(4, 0);
|
|
playSound(87, 7);
|
|
playActorAnimation(722);
|
|
playSound(5, 3);
|
|
playSound(88, 12);
|
|
playSound(87, 24);
|
|
playActorAnimation(723);
|
|
displayMessage(0x502b);
|
|
playSound(89, 4);
|
|
playActorAnimation(724);
|
|
setOns(4, 68);
|
|
displayMessage(0x503e);
|
|
inventory->remove(68);
|
|
SET_FLAG(0xDBD0, 1);
|
|
return true;
|
|
|
|
case 0x98fa://Right click to open toolbox
|
|
inventory->remove(3);
|
|
inventory->add(4);
|
|
inventory->add(35);
|
|
inventory->activate(false);
|
|
inventory->resetSelectedObject();
|
|
displayMessage(0x3468);
|
|
return true;
|
|
|
|
case 0x9910:
|
|
inventory->remove(4);
|
|
inventory->add(5);
|
|
inventory->activate(false);
|
|
inventory->resetSelectedObject();
|
|
displayMessage(0x3490);
|
|
return true;
|
|
|
|
|
|
//very last part of the game:
|
|
case 0x671d:
|
|
moveTo(153, 163, 4);
|
|
playActorAnimation(973);
|
|
if (CHECK_FLAG(0xDBC1, 0)) {
|
|
SET_FLAG(0xDBC1, random.getRandomNumber(5) + 1);
|
|
}
|
|
loadScene(30, 18, 159, 2);
|
|
return true;
|
|
|
|
case 0x67a6:
|
|
loadScene(29, 149, 163, 1);
|
|
playActorAnimation(974);
|
|
moveTo(160, 188, 0);
|
|
return true;
|
|
|
|
case 0x6805:
|
|
processCallback(0x6849);
|
|
playActorAnimation(694);
|
|
playSound(15, 8);
|
|
playAnimation(693, 1);
|
|
setOns(6, 0);
|
|
displayMessage(0x4cc7);
|
|
inventory->add(54);
|
|
disableObject(4);
|
|
return true;
|
|
|
|
case 0x6849:
|
|
{
|
|
Common::Point p = scene->getPosition();
|
|
if (p.x == 208 && p.y == 151) {
|
|
moveRel(0, 0, 2);
|
|
} else
|
|
moveTo(208, 151, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x687a: //using the book
|
|
if (CHECK_FLAG(0xDBC2, 1)) {
|
|
displayMessage(0x4ca0);
|
|
} else {
|
|
playSound(49, 5);
|
|
playSound(49, 17);
|
|
playActorAnimation(691);
|
|
if (!processCallback(0x68e6)) {
|
|
if (!CHECK_FLAG(0xDBC0, 1)) {
|
|
displayMessage(0x4c61);
|
|
SET_FLAG(0xDBC0, 1);
|
|
}
|
|
} else {
|
|
playSound(15, 8); //secret compartment
|
|
playAnimation(692, 1);
|
|
setOns(6, 59);
|
|
enableObject(4);
|
|
displayMessage(0x4c84);
|
|
SET_FLAG(0xDBC2, 1);
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x68e6: //checking drawers
|
|
{
|
|
uint16 v = GET_FLAG(0xDBC1) - 1;
|
|
uint bx = 0xDBB7;
|
|
if (GET_FLAG(bx + v) != 1)
|
|
return false;
|
|
|
|
uint16 sum = 0;
|
|
for(uint i = 0; i < 6; ++i) {
|
|
sum += GET_FLAG(bx + i);
|
|
}
|
|
return sum == 1;
|
|
}
|
|
|
|
case 0x6918:
|
|
if (inventory->has(55)) {
|
|
displayMessage(0x4cd9);
|
|
return true;
|
|
}
|
|
if (!CHECK_FLAG(0xDBC3, 1)) {
|
|
playActorAnimation(695);
|
|
Dialog::show(scene, 0x386a);
|
|
SET_FLAG(0xDBC3, 1);
|
|
}
|
|
|
|
playSound(5, 11);
|
|
playActorAnimation(696);
|
|
inventory->add(55);
|
|
return true;
|
|
|
|
case 0x6962:
|
|
if (CHECK_FLAG(0xDBB7, 1)) {
|
|
setOns(0, 0);
|
|
playSound(67, 4);
|
|
playActorAnimation(678);
|
|
SET_FLAG(0xDBB7, 0);
|
|
} else if (CHECK_FLAG(0xDBB8, 1)) {
|
|
processCallback(0x6b86);
|
|
} else {
|
|
playSound(66, 4);
|
|
playActorAnimation(677);
|
|
setOns(0, 53);
|
|
SET_FLAG(0xDBB7, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x69b8:
|
|
if (CHECK_FLAG(0xDBB8, 1)) {
|
|
setOns(1, 0);
|
|
playSound(67, 4);
|
|
playActorAnimation(680);
|
|
SET_FLAG(0xDBB8, 0);
|
|
} else if (CHECK_FLAG(0xDBB8, 1)) {
|
|
processCallback(0x6b86);
|
|
} else if (CHECK_FLAG(0xDBB9, 1)) {
|
|
processCallback(0x6b86);
|
|
} else {
|
|
playSound(66, 5);
|
|
playActorAnimation(679);
|
|
setOns(1, 54);
|
|
SET_FLAG(0xDBB8, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x6a1b:
|
|
if (CHECK_FLAG(0xDBB9, 1)) {
|
|
setOns(2, 0);
|
|
playSound(67, 5);
|
|
playActorAnimation(682);
|
|
SET_FLAG(0xDBB9, 0);
|
|
} else if (CHECK_FLAG(0xDBB8, 1)) {
|
|
processCallback(0x6b86);
|
|
} else {
|
|
playSound(67, 5);
|
|
playActorAnimation(681);
|
|
setOns(2, 55);
|
|
SET_FLAG(0xDBB9, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x6a73:
|
|
if (CHECK_FLAG(0xDBBA, 1)) {
|
|
setOns(3, 0);
|
|
playSound(67, 4);
|
|
playActorAnimation(684);
|
|
SET_FLAG(0xDBBA, 0);
|
|
} else if (!CHECK_FLAG(0xDBBB, 1)) {
|
|
playSound(66, 4);
|
|
playActorAnimation(683);
|
|
setOns(3, 56);
|
|
SET_FLAG(0xDBBA, 1);
|
|
} else
|
|
processCallback(0x6b86);
|
|
return true;
|
|
|
|
case 0x6acb:
|
|
if (CHECK_FLAG(0xDBBB, 1)) {
|
|
setOns(4, 0);
|
|
playSound(67, 4);
|
|
playActorAnimation(686);
|
|
SET_FLAG(0xDBBB, 0);
|
|
} else if (CHECK_FLAG(0xDBBA, 1)) {
|
|
processCallback(0x6b86);
|
|
} else if (CHECK_FLAG(0xDBBC, 1)) {
|
|
processCallback(0x6b86);
|
|
} else {
|
|
playSound(66, 5);
|
|
playActorAnimation(685);
|
|
setOns(4, 57);
|
|
SET_FLAG(0xDBBB, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x6b2e:
|
|
if (CHECK_FLAG(0xdbbc, 1)) {
|
|
setOns(5, 0);
|
|
playSound(67, 5);
|
|
playActorAnimation(688);
|
|
SET_FLAG(0xdbbc, 0);
|
|
} else if (CHECK_FLAG(0xdbbc, 1)) {
|
|
processCallback(0x6b86);
|
|
} else {
|
|
playSound(66, 6);
|
|
playActorAnimation(687);
|
|
setOns(5, 58);
|
|
SET_FLAG(0xDBBC, 1);
|
|
}
|
|
return true;
|
|
|
|
|
|
case 0x6b86:
|
|
if (CHECK_FLAG(0xDBBD, 1)) {
|
|
displayMessage(0x4b39);
|
|
} else {
|
|
displayMessage(0x4acd);
|
|
displayMessage(0x4b0d);
|
|
SET_FLAG(0xDBBD, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x6be1: //handle to the bathroom
|
|
if (CHECK_FLAG(0xDBD9, 1)) {
|
|
displayMessage(0x5326); //i'd better catch johnny
|
|
} else {
|
|
playSound(88);
|
|
playActorAnimation(808);
|
|
loadScene(36, 41, 195);
|
|
}
|
|
return true;
|
|
|
|
case 0x6bad:
|
|
playSound(80, 4);
|
|
playActorAnimation(971);
|
|
loadScene(32, 139, 199, 1);
|
|
return true;
|
|
|
|
case 0x6c45:
|
|
playSound(89, 6);
|
|
playActorAnimation(CHECK_FLAG(0xDBEF, 1)?985: 806);
|
|
loadScene(34, 40, 133, 2);
|
|
return true;
|
|
|
|
case 0x6c83:
|
|
Dialog::pop(scene, 0xdb2e);
|
|
strcpy(scene->getObject(1)->name, (const char *)res->dseg.ptr(0xaa94));
|
|
SET_FLAG(0xDBD1, 1);
|
|
return true;
|
|
|
|
case 0x6c9d: //getting jar
|
|
setOns(0, 71);
|
|
playSound(32, 5);
|
|
playActorAnimation(732);
|
|
disableObject(2);
|
|
inventory->add(72);
|
|
return true;
|
|
|
|
case 0x6cc4:
|
|
playActorAnimation(754);
|
|
displayMessage(0x517b); //position 30430
|
|
|
|
playMusic(3);
|
|
loadScene(11, scene->getPosition());
|
|
playAnimation(750, 2);
|
|
Dialog::show(scene, 0x4f50, 751, 529);
|
|
|
|
playActorAnimation(752, true);
|
|
playAnimation(753, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x5168, 751, 529);
|
|
|
|
loadScene(30, scene->getPosition());
|
|
Dialog::show(scene, 0x5168, 733, 734);
|
|
|
|
playSound(75, 13);
|
|
playSound(32, 22);
|
|
playActorAnimation(735, true);
|
|
playAnimation(736, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x46cf, 737, 738);
|
|
|
|
playSound(32, 1);
|
|
playActorAnimation(739, true);
|
|
playAnimation(740, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x4772, 733, 734);
|
|
|
|
playActorAnimation(742, true);
|
|
playAnimation(741, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x481c, 733, 743);
|
|
|
|
playActorAnimation(744, true);
|
|
playAnimation(745, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x4873, 733, 734);
|
|
|
|
playActorAnimation(746, true);
|
|
playAnimation(747, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x4da5, 734);
|
|
Dialog::show(scene, 0x4eb9, 748);
|
|
Dialog::show(scene, 0x4f15, 749);
|
|
Dialog::show(scene, 0x4f2f, 748);
|
|
|
|
playMusic(10);
|
|
loadScene(32, scene->getPosition());
|
|
playSound(26, 10);
|
|
playActorAnimation(755);
|
|
moveRel(0, 0, 3);
|
|
|
|
Dialog::show(scene, 0x51bf);
|
|
loadScene(31, scene->getPosition());
|
|
Dialog::show(scene, 0x539f, 763, 764);
|
|
loadScene(32, scene->getPosition());
|
|
Dialog::show(scene, 0x52c3);
|
|
disableObject(3);
|
|
enableObject(7);
|
|
|
|
SET_FLAG(0xDBD5, 1);
|
|
return true;
|
|
|
|
case 0x6f20:
|
|
if (CHECK_FLAG(0xDBD5, 1)) {
|
|
displayMessage(0x51a7);
|
|
} else {
|
|
rejectMessage();
|
|
}
|
|
return true;
|
|
|
|
case 0x6f75: //hiding in left corner
|
|
moveRel(0, 0, 3);
|
|
playActorAnimation(756);
|
|
playAnimation(758, 1);
|
|
Dialog::show(scene, 0x52e6, 759);
|
|
playSound(40, 5);
|
|
playSound(52, 13);
|
|
playSound(52, 17);
|
|
playSound(52, 21);
|
|
playAnimation(760, 1);
|
|
setOns(1, 72);
|
|
setOns(2, 73);
|
|
loadScene(31, scene->getPosition());
|
|
playSound(58, 5);
|
|
playSound(58, 8);
|
|
playSound(58, 10);
|
|
playSound(58, 12);
|
|
playSound(58, 14);
|
|
playAnimation(765, 1);
|
|
Dialog::show(scene, 0x5443, 766);
|
|
loadScene(31, scene->getPosition());
|
|
Dialog::show(scene, 0x5358, 761);
|
|
playAnimation(762, 1);
|
|
loadScene(32, scene->getPosition());
|
|
setOns(2, 0);
|
|
playActorAnimation(757);
|
|
moveRel(0, 0, 1);
|
|
displayMessage(0x51e7);
|
|
enableObject(8);
|
|
disableObject(7);
|
|
|
|
SET_FLAG(0xDBD5, 0);
|
|
return true;
|
|
|
|
case 0x6f4d:
|
|
if (CHECK_FLAG(0xDBD5, 1)) {
|
|
displayMessage(0x51bb);
|
|
} else {
|
|
loadScene(31, 139, 172, 3);
|
|
}
|
|
return true;
|
|
|
|
case 0x6f32:
|
|
if (CHECK_FLAG(0xDBD5, 1)) {
|
|
displayMessage(0x51a7);
|
|
} else {
|
|
playActorAnimation(977);
|
|
displayMessage(0x5511);
|
|
}
|
|
return true;
|
|
|
|
case 0x7096:
|
|
playSound(32, 5);
|
|
playActorAnimation(767);
|
|
setOns(1, 0);
|
|
inventory->add(73);
|
|
disableObject(8);
|
|
return true;
|
|
|
|
case 0x7291:
|
|
playSound(89, 3);
|
|
playActorAnimation(975);
|
|
loadScene(31, 298, 177, 4);
|
|
return true;
|
|
|
|
case 0x72c2:
|
|
if (CHECK_FLAG(0xDBD6, 2)) {
|
|
displayMessage(0x522c);
|
|
} else {
|
|
playSound(79, 6);
|
|
playSound(84, 9);
|
|
playActorAnimation(801);
|
|
if (CHECK_FLAG(0xDBD6, 1)) {
|
|
displayMessage(0x538d);
|
|
SET_FLAG(0xDBD6, 2);
|
|
} else
|
|
displayMessage(0x5372);
|
|
}
|
|
return true;
|
|
|
|
case 0x7309:
|
|
playSound(66, 5);
|
|
playSound(67, 11);
|
|
playActorAnimation(976);
|
|
displayMessage(0x5955);
|
|
return true;
|
|
|
|
case 0x79e4:
|
|
processCallback(0x6849);
|
|
return false;
|
|
|
|
case 0x79eb: //color of the book
|
|
displayMessage(res->dseg.get_word(0x5f3c + GET_FLAG(0xDBC1) * 2 - 2));
|
|
return true;
|
|
|
|
case 0x79fd:
|
|
if (CHECK_FLAG(0xDBB7, 1)) {
|
|
displayMessage(0x4b6c);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7a0f:
|
|
if (CHECK_FLAG(0xDBB8, 1)) {
|
|
if (!CHECK_FLAG(0xDBBF, 1)) {
|
|
displayMessage(0x4c32);
|
|
playSound(5, 11);
|
|
playActorAnimation(690);
|
|
inventory->add(53);
|
|
SET_FLAG(0xDBBF, 1);
|
|
}
|
|
displayMessage(0x4b87);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7a49:
|
|
if (CHECK_FLAG(0xDBB9, 1)) {
|
|
displayMessage(0x4ba1);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7a5b:
|
|
if (CHECK_FLAG(0xDBBA, 1)) {
|
|
displayMessage(0x4bbc);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7a6d:
|
|
if (CHECK_FLAG(0xDBBB, 1)) {
|
|
displayMessage(0x4bd8);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7a7f:
|
|
if (CHECK_FLAG(0xDBBC, 1)) {
|
|
if (!CHECK_FLAG(0xDBBE, 1)) {
|
|
displayMessage(0x4c0f); //there's dictaphone inside!
|
|
playSound(5, 12);
|
|
playActorAnimation(689);
|
|
inventory->add(52);
|
|
SET_FLAG(0xDBBE, 1);
|
|
}
|
|
displayMessage(0x4bf4);
|
|
return true;
|
|
} else
|
|
return false;
|
|
|
|
case 0x7b09:
|
|
{
|
|
byte v = GET_FLAG(0xDBD6);
|
|
switch(v) {
|
|
case 1:
|
|
displayMessage(0x51f8);
|
|
return true;
|
|
case 2:
|
|
displayMessage(0x538d);
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
case 0x9166:
|
|
if (CHECK_FLAG(0xDBD1, 1)) {
|
|
return true;
|
|
} else {
|
|
displayMessage(0x50a6);
|
|
return false;
|
|
}
|
|
|
|
case 0x9175:
|
|
if (CHECK_FLAG(0xDBD2, 0) || CHECK_FLAG(0xDBD3, 0) || CHECK_FLAG(0xDBD4, 0))
|
|
return true;
|
|
playSound(89, 2);
|
|
playActorAnimation(731);
|
|
setOns(0, 70);
|
|
setLan(1, 0);
|
|
disableObject(1);
|
|
enableObject(2);
|
|
enableObject(3);
|
|
return true;
|
|
|
|
case 0x90bc: //handle on the hole
|
|
playSound(5, 3);
|
|
playSound(6, 9);
|
|
playActorAnimation(807);
|
|
setOns(0, 83);
|
|
inventory->remove(73);
|
|
disableObject(2);
|
|
enableObject(3);
|
|
SET_FLAG(0xDBEF, 1);
|
|
return true;
|
|
|
|
case 0x90fc: //dictaphone on robot
|
|
if (!processCallback(0x9166))
|
|
return true;
|
|
|
|
if (CHECK_FLAG(0xDBD2, 1)) {
|
|
displayMessage(0x50c3);
|
|
return true;
|
|
}
|
|
|
|
if (!CHECK_FLAG(0xDBCB, 1)) {
|
|
displayMessage(0x5101);
|
|
return true;
|
|
}
|
|
|
|
displayMessage(0x50e1);
|
|
playSound(5, 3);
|
|
playSound(5, 39);
|
|
|
|
displayMessage(0x5124); //fixme: async! delay 35? position 40388
|
|
playActorAnimation(728);
|
|
Dialog::show(scene, 0x3d17);
|
|
SET_FLAG(0xDBD2, 1);
|
|
processCallback(0x9175);
|
|
return true;
|
|
|
|
case 0x91cb: //use socks on robot
|
|
if (!processCallback(0x9166))
|
|
return true;
|
|
|
|
if (CHECK_FLAG(0xDBD3, 1)) {
|
|
displayMessage(0x50c3);
|
|
return true;
|
|
}
|
|
displayMessage(0x5138);
|
|
playSound(5, 3);
|
|
playSound(5, 23);
|
|
playActorAnimation(729);
|
|
Dialog::show(scene, 0x3d70);
|
|
SET_FLAG(0xDBD3, 1);
|
|
processCallback(0x9175);
|
|
return true;
|
|
|
|
case 0x9209: //photo on robot
|
|
if (!processCallback(0x9166))
|
|
return true;
|
|
|
|
if (CHECK_FLAG(0xDBD4, 1)) {
|
|
displayMessage(0x50c3);
|
|
return true;
|
|
}
|
|
displayMessage(0x5161);
|
|
playSound(5, 3);
|
|
playSound(5, 25);
|
|
playActorAnimation(730);
|
|
Dialog::show(scene, 0x3dd6);
|
|
SET_FLAG(0xDBD4, 1);
|
|
processCallback(0x9175);
|
|
return true;
|
|
|
|
case 0x924e:
|
|
setOns(2, 64);
|
|
playSound(5, 3);
|
|
playSound(52, 10);
|
|
playActorAnimation(711);
|
|
moveRel(0, 0, 4);
|
|
Dialog::show(scene, 0x3b21);
|
|
moveTo(300, 190, 4);
|
|
inventory->remove(64);
|
|
disableObject(8);
|
|
playAnimation(712, 1);
|
|
setOns(2, 0);
|
|
playSound(15, 26);
|
|
playSound(15, 28);
|
|
playSound(16, 37);
|
|
playAnimation(713, 1);
|
|
Dialog::show(scene, 0x3c0d);
|
|
playSound(85, 2);
|
|
playAnimation(714, 1);
|
|
setLan(1, 0);
|
|
disableObject(1);
|
|
scene->getObject(2)->actor_rect = Rect(81, 160, 81, 160);
|
|
scene->getObject(2)->actor_orientation = 4;
|
|
scene->getObject(3)->actor_rect = Rect(63, 168, 63, 168);
|
|
scene->getObject(3)->actor_orientation = 4;
|
|
scene->getObject(10)->actor_rect = Rect(105, 160, 105, 160);
|
|
scene->getObject(10)->actor_orientation = 1;
|
|
SET_FLAG(0xDBCC, 1);
|
|
return true;
|
|
|
|
case 0x9472:
|
|
playSound(5, 4);
|
|
playSound(19, 14);
|
|
playActorAnimation(793);
|
|
displayMessage(0x5218);
|
|
inventory->remove(60);
|
|
SET_FLAG(0xDBD6, 1);
|
|
return true;
|
|
|
|
case 0x9449: //meat + stew
|
|
playSound(5, 4);
|
|
playSound(63, 12);
|
|
playActorAnimation(726);
|
|
displayMessage(0x508a);
|
|
inventory->remove(69);
|
|
inventory->add(70);
|
|
return true;
|
|
|
|
case 0x949b:
|
|
if (CHECK_FLAG(0xDBD6, 2)) {
|
|
playSound(5, 4);
|
|
playSound(5, 25);
|
|
playActorAnimation(802);
|
|
displayMessage(0x5272);
|
|
inventory->remove(62);
|
|
inventory->add(74);
|
|
inventory->add(65);
|
|
} else
|
|
displayMessage(0x524f);
|
|
return true;
|
|
|
|
case 0x94d4:
|
|
if (inventory->has(70)) {
|
|
setOns(0, 0);
|
|
playSound(5, 3);
|
|
playSound(5, 18);
|
|
playSound(13, 12);
|
|
playActorAnimation(803);
|
|
disableObject(7);
|
|
inventory->remove(70);
|
|
inventory->add(71);
|
|
} else
|
|
displayMessage(0x53ad);
|
|
return true;
|
|
|
|
case 0x951b:
|
|
playSound(5, 4);
|
|
playSound(5, 22);
|
|
playActorAnimation(804);
|
|
displayMessage(0x528b);
|
|
return true;
|
|
|
|
case 0x9537: //using remote on VCR
|
|
playSound(5, 3);
|
|
playSound(5, 16);
|
|
playActorAnimation(703);
|
|
if (CHECK_FLAG(0xDBC8, 1)) {
|
|
if (CHECK_FLAG(0xDBC6, 0)) {
|
|
if (CHECK_FLAG(0xDBC5, 1)) { //tv on
|
|
if (!CHECK_FLAG(0xDBC7, 1))
|
|
displayMessage(0x4d93); //the tape started
|
|
playAnimation(702, 1); //fixme: we need some overlay animation support
|
|
SET_FLAG(0xDBC6, 1);
|
|
if (!CHECK_FLAG(0xDBC7, 1)) {
|
|
Dialog::show(scene, 0x392c, 702);
|
|
SET_FLAG(0xDBC7, 1);
|
|
}
|
|
reloadLan();
|
|
} else
|
|
displayMessage(0x4d5b);
|
|
} else {
|
|
SET_FLAG(0xDBC6, 0);
|
|
if (CHECK_FLAG(0xDBC5, 1)) { //tv on
|
|
playAnimation(701, 1);
|
|
displayMessage(0x4da6); //much better!
|
|
}
|
|
}
|
|
} else
|
|
displayMessage(0x4D80); //nothing happened
|
|
return true;
|
|
|
|
case 0x95eb: //polaroid + tv
|
|
if (CHECK_FLAG(0xDBC6, 1)) {
|
|
if (CHECK_FLAG(0xDBCA, 1)) {
|
|
displayMessage(0x4de6);
|
|
} else {
|
|
playSound(5, 3);
|
|
playSound(5, 24);
|
|
playSound(90, 18);
|
|
playActorAnimation(707);
|
|
inventory->add(61);
|
|
SET_FLAG(0xDBCA, 1);
|
|
}
|
|
} else
|
|
displayMessage(0x4ea5);
|
|
return true;
|
|
|
|
case 0x962f: //polaroid + tv
|
|
if (CHECK_FLAG(0xDBC6, 1)) {
|
|
if (CHECK_FLAG(0xDBCB, 1)) {
|
|
displayMessage(0x4e32);
|
|
} else {
|
|
displayMessage(0x4e05);
|
|
playSound(5, 3);
|
|
playSound(5, 27);
|
|
playActorAnimation(708);
|
|
SET_FLAG(0xDBCB, 1);
|
|
}
|
|
} else
|
|
displayMessage(0x4ea5);
|
|
return true;
|
|
|
|
|
|
case 0x95c8:
|
|
playSound(5, 3);
|
|
playSound(91, 12);
|
|
playActorAnimation(706);
|
|
inventory->remove(54);
|
|
SET_FLAG(0xDBC8, 1);
|
|
return true;
|
|
|
|
case 0x9673:
|
|
playSound(5, 3);
|
|
playSound(24, 10);
|
|
playActorAnimation(798);
|
|
playSound(63, 11);
|
|
playSound(19, 20);
|
|
playAnimation(799, 1);
|
|
moveTo(50, 170, 1);
|
|
playAnimation(800, 1);
|
|
playActorAnimation(805);
|
|
moveTo(50, 170, 3);
|
|
displayMessage(0x5349);
|
|
//moveTo(105, 157, 0, true);
|
|
playMusic(3);
|
|
loadScene(11, 105, 157, 0);
|
|
Dialog::show(scene, 0x8409, 938);
|
|
|
|
playAnimation(939, 1, true);
|
|
playActorAnimation(942, true);
|
|
waitAnimation();
|
|
|
|
playAnimation(939, 1, true);
|
|
playAnimation(935, 1, true);
|
|
playActorAnimation(943, true);
|
|
waitAnimation();
|
|
|
|
playAnimation(940, 1, true);
|
|
playAnimation(936, 1, true);
|
|
playActorAnimation(944, true);
|
|
waitAnimation();
|
|
|
|
playAnimation(941, 1, true);
|
|
playAnimation(937, 1, true);
|
|
playActorAnimation(945, true);
|
|
waitAnimation();
|
|
|
|
playAnimation(945, 1);
|
|
Dialog::show(scene, 0x844f);
|
|
playAnimation(946, 1);
|
|
Dialog::show(scene, 0x87c7);
|
|
|
|
playSound(24, 7);
|
|
playAnimation(948, 1, true);
|
|
playActorAnimation(947, true);
|
|
waitAnimation();
|
|
|
|
loadScene(40, 198, 186, 1);
|
|
Dialog::show(scene, 0x8890);
|
|
Dialog::show(scene, 0x8a2f);
|
|
playAnimation(923, 1);
|
|
Dialog::show(scene, 0x8aa7);
|
|
|
|
moveTo(237, 186, 0);
|
|
moveTo(237, 177, 0);
|
|
moveTo(192, 177, 0);
|
|
playAnimation(949, 1);
|
|
Dialog::show(scene, 0x8af6, 950);
|
|
|
|
playSound(32, 5);
|
|
playSound(40, 14);
|
|
|
|
playAnimation(951, 1, true);
|
|
playActorAnimation(952, true);
|
|
waitAnimation();
|
|
|
|
playMusic(11);
|
|
loadScene(39, 192, 177, 0);
|
|
Dialog::show(scene, 0x8b4d, 953);
|
|
playSound(5, 15);
|
|
playAnimation(954, 1);
|
|
Dialog::show(scene, 0x8b7a, 955);
|
|
playMusic(2);
|
|
|
|
displayMessage("THE END");
|
|
debug(0, "FIXME: THE END + CREDITS");
|
|
scene->push(SceneEvent(SceneEvent::Quit));
|
|
|
|
return true;
|
|
|
|
case 0x9921:
|
|
{
|
|
int id = scene->getId();
|
|
Common::Point p = scene->getPosition();
|
|
if (id != 15) {
|
|
displayMessage(id == 16? 0x38ce: 0x38a7);
|
|
} else {
|
|
moveTo(156, 180, 3);
|
|
playSound(5, 3);
|
|
playSound(38, 16);
|
|
playSound(38, 22);
|
|
playActorAnimation(614);
|
|
playSound(5, 3);
|
|
playSound(44, 10);
|
|
playSound(20, 26);
|
|
playActorAnimation(615);
|
|
loadScene(17, p);
|
|
playSound(64, 7);
|
|
playSound(64, 21);
|
|
playSound(64, 42);
|
|
playSound(64, 63);
|
|
playActorAnimation(617);
|
|
//another time challenge!
|
|
if (true) {
|
|
playSound(64, 7);
|
|
playActorAnimation(618);
|
|
disableObject(5);
|
|
setOns(0, 0);
|
|
playSound(31);
|
|
playActorAnimation(619);
|
|
inventory->add(42);
|
|
displayMessage(0x3989);
|
|
}
|
|
loadScene(id, p);
|
|
}
|
|
}
|
|
return true;
|
|
|
|
case 0x9aca:
|
|
if (scene->getId() == 13) {
|
|
moveTo(172, 181, 1);
|
|
playSound(26, 19);
|
|
for(uint i = 0; i < 8; ++i)
|
|
playSound(26, 30 + i * 11);
|
|
playActorAnimation(661);
|
|
//cutscene 3c80 at 30484
|
|
playSound(56, 10);
|
|
playSound(56, 21);
|
|
|
|
playSound(8, 48);
|
|
for(uint i = 0; i < 7; ++i)
|
|
playSound(26, 117 + i * 11);
|
|
|
|
moveRel(-20, 0, 0, true);
|
|
playActorAnimation(662, true);
|
|
playAnimation(663, 2, true);
|
|
waitAnimation();
|
|
setOns(1, 49);
|
|
|
|
//cutscene 0x3c9a at 30453
|
|
moveTo(162, 184, 0, true);
|
|
playSound(26, 6);
|
|
playSound(26, 17);
|
|
playSound(56, 10);
|
|
playSound(56, 21);
|
|
playSound(19, 27);
|
|
playSound(24, 38);
|
|
playSound(23, 44);
|
|
playActorAnimation(664);
|
|
playAnimation(665, 2);
|
|
displayMessage(0x3cbc);
|
|
displayMessage(0x3cea);
|
|
inventory->remove(37);
|
|
processCallback(0x9d45); //another mansion try
|
|
} else
|
|
displayMessage(0x3c58);
|
|
return true;
|
|
|
|
case 0x9c6d:
|
|
displayMessage(0x49d1);
|
|
SET_FLAG(0xDBB5, 1);
|
|
return false;
|
|
|
|
case 0x9c79: //use pills
|
|
if (scene->getId() != 36) {
|
|
displayMessage(0x52a9);
|
|
} else if (CHECK_FLAG(0xDBF1, 1)) {
|
|
displayMessage(0x52F6);
|
|
} else {
|
|
SET_FLAG(0xDBF1, 1);
|
|
moveTo(102, 195, 2);
|
|
playSound(5, 3);
|
|
playSound(75, 12);
|
|
playActorAnimation(794);
|
|
setLan(1, 0);
|
|
//scene->getWalkbox(0)->rect.left = 0;
|
|
//scene->getWalkbox(0)->rect.top = 0;
|
|
moveTo(151, 197, 2);
|
|
playActorAnimation(795);
|
|
moveTo(186, 198, 2, true);
|
|
moveTo(220, 198, 4);
|
|
//scene->getWalkbox(0)->rect.top = 200;
|
|
setLan(1, 0xff);
|
|
|
|
Dialog::show(scene, 0x58a9);
|
|
|
|
Object * obj = scene->getObject(1);
|
|
obj->actor_rect = Rect(270, 193, 270, 193);
|
|
obj->actor_orientation = 2;
|
|
|
|
obj = scene->getObject(3);
|
|
obj->actor_rect = Rect(254, 193, 254, 193);
|
|
obj->actor_orientation = 1;
|
|
SET_FLAG(0xDBD7, 1);
|
|
}
|
|
return true;
|
|
|
|
case 0x9d45: {
|
|
byte tries = ++ *(res->dseg.ptr(0xDBEA));
|
|
debug(0, "another mansion try: %u", tries);
|
|
if (tries >= 7)
|
|
return false;
|
|
|
|
uint16 ptr = res->dseg.get_word((tries - 2) * 2 + 0x6035);
|
|
byte id = scene->getId();
|
|
|
|
playMusic(11);
|
|
debug(0, "FIXME: cutscene: meanwhile in a mansion #%u, %04x", tries, ptr);
|
|
processCallback(ptr);
|
|
playMusic(6);
|
|
if (scene->getId() == 11 && CHECK_FLAG(0xDBEC, 1))
|
|
return true;
|
|
//some effect
|
|
loadScene(id, scene->getPosition());
|
|
}
|
|
return true;
|
|
|
|
case 0x9d90:
|
|
loadScene(34, scene->getPosition());
|
|
Dialog::show(scene, 0x6f60, 987, 986);
|
|
playActorAnimation(990, true);
|
|
playAnimation(991, 1, true);
|
|
waitAnimation();
|
|
return true;
|
|
|
|
case 0x9de5:
|
|
loadScene(30, scene->getPosition());
|
|
playAnimation(887, 1, true);
|
|
playAnimation(888, 2, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x6fb8);
|
|
playSound(26, 3);
|
|
playAnimation(891, 1, true);
|
|
playAnimation(892, 2, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x6ff0);
|
|
return true;
|
|
|
|
case 0x9e54:
|
|
loadScene(32, scene->getPosition());
|
|
playAnimation(894, 1, true);
|
|
playAnimation(893, 2, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x706e);
|
|
playSound(75, 9);
|
|
playAnimation(898, 1, true);
|
|
playAnimation(897, 2, true);
|
|
Dialog::show(scene, 0x7096);
|
|
return true;
|
|
|
|
case 0x9ec3:
|
|
loadScene(29, scene->getPosition());
|
|
playActorAnimation(901, true);
|
|
playAnimation(900, 1, true);
|
|
waitAnimation();
|
|
Dialog::show(scene, 0x7161, 902, 903);
|
|
for (byte i = 3; i <= 9; i += 2)
|
|
playSound(56, i);
|
|
|
|
playActorAnimation(905, true);
|
|
playAnimation(904, 1, true);
|
|
Dialog::show(scene, 0x71c6, 902, 903);
|
|
return true;
|
|
|
|
case 0x9f3e:
|
|
loadScene(35, scene->getPosition());
|
|
playAnimation(907, 1, true);
|
|
playAnimation(906, 2, true);
|
|
waitAnimation();
|
|
//Dialog::show(scene, 0x7243, 908, 909);
|
|
Dialog::show(scene, 0x7243);
|
|
//Dialog::show(scene, 0x7318, 908, 910); //fixme: implement better synchronization
|
|
Dialog::show(scene, 0x7318);
|
|
loadScene(11, scene->getPosition());
|
|
setOns(3, 51);
|
|
playAnimation(911, 1);
|
|
playAnimation(899, 1);
|
|
enableObject(8);
|
|
setLan(2, 8);
|
|
SET_FLAG(0xDBEC, 1);
|
|
return true;
|
|
}
|
|
|
|
//error("invalid callback %04x called", addr);
|
|
warning("invalid callback %04x called", addr);
|
|
return true;
|
|
}
|
|
|
|
} // End of namespace TeenAgent
|