Initial commit
This commit is contained in:
1036
engines/m4/riddle/rooms/section4/room401.cpp
Normal file
1036
engines/m4/riddle/rooms/section4/room401.cpp
Normal file
File diff suppressed because it is too large
Load Diff
76
engines/m4/riddle/rooms/section4/room401.h
Normal file
76
engines/m4/riddle/rooms/section4/room401.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM401_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM401_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room401 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
int _val2 = 0;
|
||||
int _ripleyShould = 0;
|
||||
int32 _val4 = 0;
|
||||
int _agentMode = 0;
|
||||
int _agentShould = 0;
|
||||
int _ripleyMode = 0;
|
||||
const char *_digiName1 = nullptr;
|
||||
const char *_digiName2 = nullptr;
|
||||
const char *_digiName3 = nullptr;
|
||||
const char *_digiName4 = nullptr;
|
||||
int _401a01 = 0;
|
||||
int _401a02 = 0;
|
||||
int _401a03 = 0;
|
||||
int _401a04 = 0;
|
||||
int _401a05 = 0;
|
||||
int _401a06 = 0;
|
||||
int _401rp01 = 0;
|
||||
int _rip1 = 0;
|
||||
int _rip2 = 0;
|
||||
int _rip3 = 0;
|
||||
int _rip4 = 0;
|
||||
machine *_agent = nullptr;
|
||||
machine *_ripMach = nullptr;
|
||||
const char *_digiName = nullptr;
|
||||
int _ctr1 = 0;
|
||||
|
||||
void conv401a();
|
||||
int getItemCount() const;
|
||||
|
||||
public:
|
||||
Room401() : Room() {}
|
||||
~Room401() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
1929
engines/m4/riddle/rooms/section4/room402.cpp
Normal file
1929
engines/m4/riddle/rooms/section4/room402.cpp
Normal file
File diff suppressed because it is too large
Load Diff
96
engines/m4/riddle/rooms/section4/room402.h
Normal file
96
engines/m4/riddle/rooms/section4/room402.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM402_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM402_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room402 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
int _val2 = 0;
|
||||
int _val4 = 0;
|
||||
int _trigger1 = 0;
|
||||
int _val6 = 0;
|
||||
int _val8 = 0;
|
||||
int _currentNode = 0;
|
||||
int _dialogMode = 0;
|
||||
int _dialogShould = 0;
|
||||
int _wolfMode = 0;
|
||||
int _wolfShould = 0;
|
||||
int _val14 = 0;
|
||||
machine *_wolfie = nullptr;
|
||||
machine *_wolfieMach = nullptr;
|
||||
int _shadow3 = 0;
|
||||
int _ripPaysWolfie = 0;
|
||||
int _ripTalkWolf = 0;
|
||||
int _ripTalker = 0;
|
||||
int _wolfClipping = 0;
|
||||
int _wolfClippersDown = 0;
|
||||
int _wolfShakesHead = 0;
|
||||
int _wolfWantsMoney = 0;
|
||||
int _ripHeadTurn = 0;
|
||||
int _ripDownStairs = 0;
|
||||
machine *_ripEnterLeave = nullptr;
|
||||
machine *_branch = nullptr;
|
||||
int _wolfTurnsClipping = 0;
|
||||
int _turtlePopup = 0;
|
||||
int _ripLeanWall = 0;
|
||||
machine *_wolfWalker = nullptr;
|
||||
machine *_safariShadow = nullptr;
|
||||
int _ripMessesBush = 0;
|
||||
int _ripClimbKnock = 0;
|
||||
int _doorOpens = 0;
|
||||
machine *_castleDoor = nullptr;
|
||||
machine *_machine1 = nullptr;
|
||||
int _machine1Series = 0;
|
||||
int _flags111 = 0;
|
||||
machine *_turtlePopupMach = nullptr;
|
||||
int _letter = 0;
|
||||
Common::String _sound1;
|
||||
Common::String _sound2;
|
||||
|
||||
void conv402a();
|
||||
void conv402a777();
|
||||
void useTopiary();
|
||||
void enterCastle();
|
||||
|
||||
public:
|
||||
Room402() : Room() {}
|
||||
~Room402() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
void syncGame(Common::Serializer &s) override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
2336
engines/m4/riddle/rooms/section4/room403.cpp
Normal file
2336
engines/m4/riddle/rooms/section4/room403.cpp
Normal file
File diff suppressed because it is too large
Load Diff
109
engines/m4/riddle/rooms/section4/room403.h
Normal file
109
engines/m4/riddle/rooms/section4/room403.h
Normal file
@@ -0,0 +1,109 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM403_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM403_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room403 : public Room {
|
||||
private:
|
||||
machine *_bell = nullptr;
|
||||
int _val1 = 0;
|
||||
int _ripleyTrigger = -1;
|
||||
int _val3 = 0;
|
||||
int _wolfTrigger = -1;
|
||||
int _val5 = 0;
|
||||
int _ripleyMode = 0;
|
||||
int _ripleyShould = 0;
|
||||
int _wolfMode = 0;
|
||||
int _wolfShould = 0;
|
||||
int _ladderMode = 0;
|
||||
Common::String _sound1;
|
||||
int _val12 = 0;
|
||||
int _val13 = 0;
|
||||
int _plank = 0;
|
||||
machine *_ventClosed = nullptr;
|
||||
machine *_edger = nullptr;
|
||||
machine *_ladder = nullptr;
|
||||
machine *_board = nullptr;
|
||||
machine *_wolfie = nullptr;
|
||||
machine *_ripOnLadder = nullptr;
|
||||
int _ripClimbsLadder = 0;
|
||||
int _safariShadow = 0;
|
||||
int _wolfTurnTalk = 0;
|
||||
int _wolfTurnHand = 0;
|
||||
int _wolfTalkLeave = 0;
|
||||
int _ripTalkPay = 0;
|
||||
int _wolfEdger = 0;
|
||||
int _ripLegUp = 0;
|
||||
int _ripTurtle = 0;
|
||||
int _noTreat = 0;
|
||||
bool _flag1 = false;
|
||||
bool _flag2 = false;
|
||||
bool _flag3 = 0;
|
||||
int _ripRingsBell = 0;
|
||||
machine *_wolfWalker = nullptr;
|
||||
int _wolfAdmonish = 0;
|
||||
int _ripHeadTurn = 0;
|
||||
int _ripMedReach = 0;
|
||||
int _series1 = 0;
|
||||
int _ripPutBoard = 0;
|
||||
machine *_ripTalksWolf = nullptr;
|
||||
int _ripPlankEdger = 0;
|
||||
machine *_wolfJustSo = nullptr;
|
||||
int _wolfIndicatesTomb = 0;
|
||||
int _turtlePopup = 0;
|
||||
|
||||
void conv403a();
|
||||
void conv403a1();
|
||||
void edgerBell();
|
||||
void plankUrn();
|
||||
bool edgerUrn();
|
||||
bool stepLadderTomb();
|
||||
bool takePlank();
|
||||
bool takeEdger();
|
||||
bool takeStepLadder();
|
||||
void takeStepLadder_();
|
||||
void useJournal();
|
||||
void playNum1(int num);
|
||||
void playNum2(int num);
|
||||
|
||||
public:
|
||||
Room403() : Room() {}
|
||||
~Room403() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
void syncGame(Common::Serializer &s) override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
589
engines/m4/riddle/rooms/section4/room404.cpp
Normal file
589
engines/m4/riddle/rooms/section4/room404.cpp
Normal file
@@ -0,0 +1,589 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room404.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
#include "m4/riddle/riddle.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
static const int16 NORMAL_DIRS[] = { 200, 201, -1 };
|
||||
static const char *NORMAL_NAMES[] = {
|
||||
"butler walker pos1",
|
||||
"butler walker pos3"
|
||||
};
|
||||
|
||||
static const int16 SHADOW_DIRS[] = { 200, 201, -1 };
|
||||
static const char *SHADOW_NAMES[] = {
|
||||
"butler walker shadow pos1",
|
||||
"butler walker shadow pos3"
|
||||
};
|
||||
|
||||
static const char *const SAID[][2] = {
|
||||
{ "DOOR", "404r10" },
|
||||
{ "BUTLER", "404r30" },
|
||||
{ "HUGE DOOR", "404r11" },
|
||||
{ "LARGE PAINTING", "404r13" },
|
||||
{ "PAINTING", "404r14" },
|
||||
{ "RUG", "404r12" },
|
||||
{ nullptr, nullptr }
|
||||
};
|
||||
|
||||
void Room404::init() {
|
||||
_door = series_place_sprite("404DOORA", 0, 0, 0, 100, 0xf00);
|
||||
|
||||
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
|
||||
player_set_commands_allowed(false);
|
||||
_val1 = 0;
|
||||
_val2 = -1;
|
||||
_val3 = 0;
|
||||
_val4 = -1;
|
||||
_val5 = 0;
|
||||
_val6 = 0;
|
||||
_val7 = 0;
|
||||
_val8 = 0;
|
||||
}
|
||||
|
||||
_safariShadow = series_load("SAFARI SHADOW 3");
|
||||
_butlerTurns7 = series_load("Butler turns to pos7");
|
||||
_butlerTurns9 = series_load("Butler turns to pos9");
|
||||
_butlerTalkLoop = series_load("Butler talk loop");
|
||||
_val7 = 2000;
|
||||
_val8 = 2100;
|
||||
|
||||
switch (_G(game).previous_room) {
|
||||
case KERNEL_RESTORING_GAME:
|
||||
_butlerTalks = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x900, false,
|
||||
triggerMachineByHashCallback, "BUTLER talks rip");
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTalkLoop, 1, 1, -1,
|
||||
_butlerTalkLoop, 1, 1, 0);
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 405:
|
||||
_butlerTalks = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x900, false,
|
||||
triggerMachineByHashCallback, "BUTLER talks rip");
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTalkLoop, 1, 1, -1,
|
||||
_butlerTalkLoop, 1, 1, 0);
|
||||
ws_demand_location(_G(my_walker), 58, 347, 3);
|
||||
ws_walk(_G(my_walker), 90, 347, nullptr, 50, 3);
|
||||
break;
|
||||
|
||||
case 406:
|
||||
_butlerTalks = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x900, false,
|
||||
triggerMachineByHashCallback, "BUTLER talks rip");
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTalkLoop, 1, 1, -1,
|
||||
_butlerTalkLoop, 1, 1, 0);
|
||||
ws_demand_location(_G(my_walker), 174, 268, 3);
|
||||
ws_walk(_G(my_walker), 250, 285, nullptr,
|
||||
inv_player_has("BILLIARD BALL") ? 70 : 60, 3, true);
|
||||
break;
|
||||
|
||||
default:
|
||||
ws_walk_load_shadow_series(SHADOW_DIRS, SHADOW_NAMES);
|
||||
ws_walk_load_walker_series(NORMAL_DIRS, NORMAL_NAMES);
|
||||
ws_demand_location(_G(my_walker), 340, 480, 2);
|
||||
|
||||
_machine1 = triggerMachineByHash_3000(8, 10, *NORMAL_DIRS, *SHADOW_DIRS,
|
||||
380, 421, 1, triggerMachineByHashCallback3000, "BUTLER_walker");
|
||||
|
||||
if (_G(kittyScreaming) || player_been_here(404)) {
|
||||
sendWSMessage_10000(_machine1, 410, 332, 1, 42, 1);
|
||||
kernel_timing_trigger(1, 40);
|
||||
} else {
|
||||
sendWSMessage_10000(_machine1, 410, 332, 1, 21, 1);
|
||||
kernel_timing_trigger(120, 20);
|
||||
}
|
||||
|
||||
digi_play("404_s01", 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room404::daemon() {
|
||||
int frame;
|
||||
|
||||
switch (_G(kernel).trigger) {
|
||||
case 20:
|
||||
ws_walk(_G(my_walker), 370, 347, nullptr, -1, 1);
|
||||
break;
|
||||
|
||||
case 21:
|
||||
sendWSMessage_60000(_machine1);
|
||||
_butlerTalks = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x900, false,
|
||||
triggerMachineByHashCallback, "BUTLER talks rip");
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTurns7, 1, 10, 23,
|
||||
_butlerTalkLoop, 1, 1, 0);
|
||||
break;
|
||||
|
||||
case 23:
|
||||
if (!_G(flags)[V337]) {
|
||||
digi_play("404r03", 1, 255, 24);
|
||||
_G(flags)[V337] = 1;
|
||||
_val7 = 2000;
|
||||
_val8 = 2102;
|
||||
kernel_timing_trigger(1, 110);
|
||||
} else {
|
||||
digi_play("404r02", 1, 255, 30);
|
||||
}
|
||||
break;
|
||||
|
||||
case 24:
|
||||
_val8 = 2102;
|
||||
digi_play("404u01", 1, 255, 25);
|
||||
break;
|
||||
|
||||
case 25:
|
||||
_val8 = 2102;
|
||||
digi_play("404r04", 1, 255, 26);
|
||||
break;
|
||||
|
||||
case 26:
|
||||
_val8 = 2101;
|
||||
digi_play("404u02", 1, 255, 27);
|
||||
break;
|
||||
|
||||
case 27:
|
||||
_val8 = 2102;
|
||||
digi_play("404r05", 1, 255, 28);
|
||||
break;
|
||||
|
||||
case 28:
|
||||
_val8 = 2101;
|
||||
digi_play("404u03", 1, 255, 29);
|
||||
break;
|
||||
|
||||
case 29:
|
||||
_val8 = 2103;
|
||||
digi_play("404r06", 1, 255, 30);
|
||||
break;
|
||||
|
||||
case 30:
|
||||
digi_play("404u04", 1);
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTurns9, 1, 43, 32,
|
||||
_butlerTurns9, 43, 43, 0);
|
||||
break;
|
||||
|
||||
case 32:
|
||||
terminateMachineAndNull(_butlerTalks);
|
||||
_machine1 = triggerMachineByHash_3000(8, 10, *NORMAL_DIRS, *SHADOW_DIRS,
|
||||
390, 332, 9, triggerMachineByHashCallback3000, "BUTLER_walker");
|
||||
sendWSMessage_10000(_machine1, 58, 347, 1, -1, true);
|
||||
kernel_timing_trigger(270, 33);
|
||||
break;
|
||||
|
||||
case 33:
|
||||
ws_walk(_G(my_walker), 58, 347, nullptr, -1, 9, true);
|
||||
kernel_timing_trigger(90, 34);
|
||||
break;
|
||||
|
||||
case 34:
|
||||
disable_player_commands_and_fade_init(35);
|
||||
break;
|
||||
|
||||
case 35:
|
||||
midi_stop();
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(405);
|
||||
break;
|
||||
|
||||
case 40:
|
||||
ws_walk(_G(my_walker), 370, 347, nullptr, -1, 1);
|
||||
break;
|
||||
|
||||
case 42:
|
||||
sendWSMessage_60000(_machine1);
|
||||
_butlerTalks = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x900, false,
|
||||
triggerMachineByHashCallback, "BUTLER talks rip");
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTurns7, 1, 10, 43,
|
||||
_butlerTalkLoop, 1, 1, 0);
|
||||
break;
|
||||
|
||||
case 43:
|
||||
if (!_G(flags)[kWolfFled] || _G(flags)[kButlerSaidWolfFled]) {
|
||||
player_set_commands_allowed(true);
|
||||
} else {
|
||||
_G(flags)[kButlerSaidWolfFled] = 1;
|
||||
kernel_timing_trigger(1, 44);
|
||||
}
|
||||
break;
|
||||
|
||||
case 44:
|
||||
digi_play("404r20", 1, 255, 45);
|
||||
_val7 = 2000;
|
||||
_val8 = 2102;
|
||||
kernel_timing_trigger(1, 110);
|
||||
break;
|
||||
|
||||
case 45:
|
||||
_val8 = 2101;
|
||||
digi_play("404u10", 1, 255, 46);
|
||||
break;
|
||||
|
||||
case 46:
|
||||
_val8 = 2102;
|
||||
digi_play("404r21", 1, 255, 47);
|
||||
break;
|
||||
|
||||
case 47:
|
||||
_val8 = 2101;
|
||||
digi_play("404u11", 1, 255, 48);
|
||||
break;
|
||||
|
||||
case 48:
|
||||
_val8 = 2102;
|
||||
digi_play("404r22", 1, 255, 49);
|
||||
ws_walk(_G(my_walker), 368, 349, nullptr, -1, 8);
|
||||
break;
|
||||
|
||||
case 49:
|
||||
case 50:
|
||||
case 60:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 70:
|
||||
if (++_G(flags)[V128] == 1)
|
||||
digi_play("404u12", 1, 255, 72);
|
||||
else
|
||||
digi_play("404u13", 1, 255, 72);
|
||||
|
||||
_val8 = 2101;
|
||||
break;
|
||||
|
||||
case 72:
|
||||
_val8 = 2102;
|
||||
ws_walk(_G(my_walker), 174, 268, nullptr, 73, 9);
|
||||
|
||||
if (_G(flags)[V128] == 1)
|
||||
digi_play("404r23", 1);
|
||||
break;
|
||||
|
||||
case 73:
|
||||
disable_player_commands_and_fade_init(74);
|
||||
break;
|
||||
|
||||
case 74:
|
||||
midi_stop();
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(406);
|
||||
break;
|
||||
|
||||
case 100:
|
||||
kernel_timing_trigger(1, 102);
|
||||
break;
|
||||
|
||||
case 101:
|
||||
_val5 = 1000;
|
||||
_val6 = 1105;
|
||||
break;
|
||||
|
||||
case 102:
|
||||
if (_val2 != -1) {
|
||||
kernel_timing_trigger(1, _val2);
|
||||
_val2 = -1;
|
||||
} else {
|
||||
kernel_timing_trigger(1, 103);
|
||||
}
|
||||
break;
|
||||
|
||||
case 103:
|
||||
if (_val5 == 1000) {
|
||||
switch (_val6) {
|
||||
case 1100:
|
||||
player_set_commands_allowed(false);
|
||||
_val7 = 2000;
|
||||
_val8 = 2100;
|
||||
kernel_timing_trigger(1, 110);
|
||||
_val6 = 1103;
|
||||
kernel_timing_trigger(1, 102);
|
||||
|
||||
conv_load("conv404a", 10, 10, 101);
|
||||
conv_export_pointer_curr(&_G(flags)[V135], 0);
|
||||
conv_export_value_curr(player_been_here(407) ? 1 : 0, 1);
|
||||
conv_play();
|
||||
break;
|
||||
|
||||
case 1102:
|
||||
case 1103:
|
||||
kernel_timing_trigger(10, 102);
|
||||
break;
|
||||
|
||||
case 1105:
|
||||
_val8 = 2103;
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 110:
|
||||
if (_val7 == 2000) {
|
||||
switch (_val8) {
|
||||
case 2100:
|
||||
case 2101:
|
||||
case 2102:
|
||||
case 2103:
|
||||
if (_val4 != -1) {
|
||||
kernel_timing_trigger(1, _val4);
|
||||
_val4 = -1;
|
||||
} else {
|
||||
kernel_timing_trigger(1, 111);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 111:
|
||||
if (_val7 == 2000) {
|
||||
switch (_val8) {
|
||||
case 2100:
|
||||
case 2102:
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTalkLoop, 1, 1, 110,
|
||||
_butlerTalkLoop, 1, 1, 0);
|
||||
break;
|
||||
|
||||
case 2101:
|
||||
frame = imath_ranged_rand(12, 21);
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTalkLoop, frame, frame, 110,
|
||||
_butlerTalkLoop, frame, frame, 0);
|
||||
break;
|
||||
|
||||
case 2103:
|
||||
sendWSMessage_10000(1, _butlerTalks, _butlerTalkLoop, 1, 1, -1,
|
||||
_butlerTalkLoop, 1, 1, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room404::pre_parser() {
|
||||
const bool takeFlag = player_said("take");
|
||||
const bool lookFlag = player_said_any("look", "look at");
|
||||
const bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
|
||||
|
||||
if ((player_said("SITTING ROOM") && (lookFlag || useFlag || takeFlag)) ||
|
||||
(lookFlag && player_said(" "))) {
|
||||
_G(player).need_to_walk = false;
|
||||
_G(player).ready_to_walk = true;
|
||||
_G(player).waiting_for_walk = false;
|
||||
}
|
||||
|
||||
if (player_said("journal") && !takeFlag && !lookFlag &&
|
||||
_G(kernel).trigger == -1) {
|
||||
_G(player).need_to_walk = false;
|
||||
_G(player).ready_to_walk = true;
|
||||
_G(player).waiting_for_walk = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Room404::parser() {
|
||||
const bool lookFlag = player_said_any("look", "look at");
|
||||
const bool talkFlag = player_said_any("talk", "talk to");
|
||||
const bool takeFlag = player_said("take");
|
||||
const bool enterFlag = player_said("enter");
|
||||
const bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
|
||||
|
||||
if (player_said("conv404a")) {
|
||||
if (_G(kernel).trigger == 1) {
|
||||
_val6 = 1103;
|
||||
_val8 = 2102;
|
||||
conv_resume();
|
||||
} else {
|
||||
conv404a();
|
||||
}
|
||||
} else if (player_said("-", " ")) {
|
||||
// No implementation
|
||||
} else if (talkFlag && player_said("butler")) {
|
||||
player_set_commands_allowed(false);
|
||||
_val4 = -1;
|
||||
_val5 = 1000;
|
||||
_val6 = 1100;
|
||||
_G(kernel).trigger_mode = KT_DAEMON;
|
||||
kernel_timing_trigger(1, 102);
|
||||
_G(kernel).trigger_mode = KT_PARSE;
|
||||
} else if (enterFlag && player_said("BILLIARDS ROOM")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(1);
|
||||
break;
|
||||
case 1:
|
||||
midi_stop();
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(406);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (player_said("WALK TO", "OUTSIDE CASTLE")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
player_update_info();
|
||||
ws_walk(_G(my_walker), _G(player_info).x, _G(player_info).y + 50, nullptr, -1, 5);
|
||||
disable_player_commands_and_fade_init(1);
|
||||
break;
|
||||
case 1:
|
||||
midi_stop();
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(402);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (player_said("WALK TO", "OUTSIDE CASTLE")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
ws_walk(_G(my_walker), 58, 347, nullptr, -1, 9);
|
||||
disable_player_commands_and_fade_init(1);
|
||||
break;
|
||||
case 1:
|
||||
midi_stop();
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(402);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (enterFlag && player_said("SITTING ROOM")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
ws_walk(_G(my_walker), 58, 347, nullptr, -1, 9);
|
||||
disable_player_commands_and_fade_init(1);
|
||||
break;
|
||||
case 1:
|
||||
midi_stop();
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(405);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (player_said("GO", "STAIRS")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
|
||||
if (!_G(flags)[V126]) {
|
||||
_G(flags)[V126] = 1;
|
||||
digi_play("404u05", 1, 255, 2);
|
||||
_val7 = 2000;
|
||||
_val8 = 2102;
|
||||
_G(kernel).trigger = KT_DAEMON;
|
||||
kernel_timing_trigger(1, 110);
|
||||
_G(kernel).trigger_mode = KT_PARSE;
|
||||
} else {
|
||||
digi_play("404r15", 1, 255, 2);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
_val8 = 2103;
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (lookFlag && player_said("BILLIARDS ROOM")) {
|
||||
digi_play(player_been_here(405) ? "404r08a" : "404r08", 1);
|
||||
} else if (player_said("SITTING ROOM") && (useFlag || takeFlag) &&
|
||||
_G(kernel).trigger >= -1) {
|
||||
ws_walk(_G(my_walker), 115, 350, nullptr, 2, 9);
|
||||
} else if (lookFlag && player_said("SITTING ROOM")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
ws_walk(_G(my_walker), 115, 350, nullptr, 2, 9);
|
||||
break;
|
||||
default:
|
||||
digi_play("404r09", 1);
|
||||
break;
|
||||
}
|
||||
} else if (lookFlag && _G(walker).ripley_said(SAID)) {
|
||||
// No implementation
|
||||
} else if (lookFlag && player_said(" ")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
digi_play("404r07", 1, 255, 2);
|
||||
break;
|
||||
case 2:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (player_said("journal") && !takeFlag && !lookFlag &&
|
||||
!inv_player_has(_G(player).noun)) {
|
||||
if (_G(flags)[kCastleCartoon]) {
|
||||
digi_play("com016", 1);
|
||||
} else if (_G(kernel).trigger == 6) {
|
||||
_G(flags)[kCastleCartoon] = 1;
|
||||
sketchInJournal("com015");
|
||||
} else {
|
||||
sketchInJournal("");
|
||||
}
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
_G(player).command_ready = false;
|
||||
}
|
||||
|
||||
void Room404::conv404a() {
|
||||
const int who = conv_whos_talking();
|
||||
_currentNode = conv_current_node();
|
||||
const char *sound = conv_sound_to_play();
|
||||
|
||||
if (sound) {
|
||||
if (who <= 0)
|
||||
_val8 = 2101;
|
||||
else if (who == 1)
|
||||
_val6 = 1102;
|
||||
|
||||
digi_play(sound, 1, 255, 1);
|
||||
|
||||
} else {
|
||||
conv_resume();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
66
engines/m4/riddle/rooms/section4/room404.h
Normal file
66
engines/m4/riddle/rooms/section4/room404.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM404_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM404_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room404 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
int _val2 = 0;
|
||||
int _val3 = 0;
|
||||
int _val4 = 0;
|
||||
int _val5 = 0;
|
||||
int _val6 = 0;
|
||||
int _val7 = 0;
|
||||
int _val8 = 0;
|
||||
int _safariShadow = 0;
|
||||
int _butlerTurns7 = 0;
|
||||
int _butlerTurns9 = 0;
|
||||
int _butlerTalkLoop = 0;
|
||||
machine *_door = nullptr;
|
||||
machine *_butlerTalks = nullptr;
|
||||
machine *_machine1 = nullptr;
|
||||
int _currentNode = 0;
|
||||
|
||||
void conv404a();
|
||||
|
||||
public:
|
||||
Room404() : Room() {}
|
||||
~Room404() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
923
engines/m4/riddle/rooms/section4/room405.cpp
Normal file
923
engines/m4/riddle/rooms/section4/room405.cpp
Normal file
@@ -0,0 +1,923 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room405.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
#include "m4/riddle/riddle.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
static const int16 NORMAL_DIRS[] = { 220, 221, -1 };
|
||||
static const char *NORMAL_NAMES[] = {
|
||||
"baron walker pos1",
|
||||
"baron walker pos7"
|
||||
};
|
||||
|
||||
static const int16 SHADOW_DIRS[] = { 230, 231, -1 };
|
||||
static const char *SHADOW_NAMES[] = {
|
||||
"baron walker shadow pos1",
|
||||
"baron walker shadow pos7"
|
||||
};
|
||||
|
||||
static const char *const SAID[][2] = {
|
||||
{ "FIREPLACE", "405r05" },
|
||||
{ "WINDOW", "405r06" },
|
||||
{ "ZEBRA SKIN", "405r07" },
|
||||
{ "DEER HEAD", "405r08" },
|
||||
{ "BATTLE AXE", "405r09" },
|
||||
{ "SHIELD", "405r09" },
|
||||
{ "CHANDELIER", "405r10" },
|
||||
{ "BOOKSHELF", "405r11" },
|
||||
{ "RUG", "405r16" },
|
||||
{ "CHAIR", "405r13" },
|
||||
{ nullptr, nullptr }
|
||||
};
|
||||
|
||||
void Room405::init() {
|
||||
player_set_commands_allowed(false);
|
||||
_door = series_place_sprite("405doora", 0, 0, 0, 100, 0);
|
||||
|
||||
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
|
||||
_val1 = 0;
|
||||
_val2 = -1;
|
||||
_val3 = 0;
|
||||
_val4 = -1;
|
||||
_val5 = 0;
|
||||
_val6 = 0;
|
||||
_val7 = 0;
|
||||
_val8 = 0;
|
||||
_val9 = 0;
|
||||
}
|
||||
|
||||
if (!_G(flags)[kGermanBanknoteFound] || !inv_object_is_here("GERMAN BANKNOTE"))
|
||||
hotspot_set_active("GERMAN BANKNOTE", false);
|
||||
|
||||
_safariShadow = series_load("SAFARI SHADOW 3");
|
||||
|
||||
if (inv_object_is_here("GERMAN BANKNOTE"))
|
||||
_bankNote = series_place_sprite("405 BANK NOTE UNDER RUG", 0, 0, 0, 100, 0xf00);
|
||||
|
||||
_candlesBurning = series_load("TWO CANDLES BURNING");
|
||||
_candles = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0, false,
|
||||
triggerMachineByHashCallback, "candles");
|
||||
sendWSMessage_10000(1, _candles, _candlesBurning, 1, 8, -1,
|
||||
_candlesBurning, 1, 8, 0);
|
||||
|
||||
if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
|
||||
player_set_commands_allowed(true);
|
||||
return;
|
||||
}
|
||||
|
||||
_G(flags)[V110] = 1;
|
||||
if (!inv_player_has("TURTLE"))
|
||||
inv_move_object("TURTLE", 305);
|
||||
|
||||
ws_demand_location(_G(my_walker), 155, 370, 9);
|
||||
|
||||
if (player_been_here(405) || _G(kittyScreaming)) {
|
||||
ws_walk(_G(my_walker), 230, 345, nullptr, 50, 2);
|
||||
} else {
|
||||
ws_walk_load_shadow_series(SHADOW_DIRS, SHADOW_NAMES);
|
||||
ws_walk_load_walker_series(NORMAL_DIRS, NORMAL_NAMES);
|
||||
_baron = triggerMachineByHash_3000(8, 11, *NORMAL_DIRS, *SHADOW_DIRS, 185, 365, 1,
|
||||
triggerMachineByHashCallback3000, "BARON_walker");
|
||||
ws_walk(_G(my_walker), 329, 320, nullptr, 20, 9);
|
||||
}
|
||||
}
|
||||
|
||||
void Room405::daemon() {
|
||||
int frame;
|
||||
switch (_G(kernel).trigger) {
|
||||
case 20:
|
||||
digi_preload("405b01a");
|
||||
_baronShakeSit = series_load("BARON SHAKES AND SITS");
|
||||
_baronTalkLoop = series_load("BARON TALK LOOP");
|
||||
_baronLeanForward = series_load("BARON LEAN FORWARD");
|
||||
_baronTurnWalk = series_load("BARON TURNWALK");
|
||||
_ripHandLetter = series_load("RIP HANDS BARON LETTER");
|
||||
_ripTalkGesture = series_load("RIPLEY TALKGESTURE");
|
||||
_ripLeanForward = series_load("RIPLEY LEAN FORWARD");
|
||||
_lowReacher = series_load("RIP TREK MED REACH HAND POS1");
|
||||
_ripHeadTurn = series_load("RIP TREK HEAD TURN POS3");
|
||||
|
||||
digi_preload("13_05n03");
|
||||
digi_preload("13_03n01");
|
||||
digi_preload("13_09p03");
|
||||
setGlobals1(_ripHeadTurn, 6, 9, 9, 9, 0, 9, 6, 6, 6);
|
||||
sendWSMessage_110000(-1);
|
||||
kernel_timing_trigger(50, 21);
|
||||
sendWSMessage_10000(_baron, 284, 324, 1, 22, 1);
|
||||
break;
|
||||
|
||||
case 21:
|
||||
sendWSMessage_120000(-1);
|
||||
break;
|
||||
|
||||
case 22:
|
||||
ws_demand_location(_G(my_walker), 286, 324, 7);
|
||||
ws_hide_walker(_baron);
|
||||
sendWSMessage_150000(-1);
|
||||
ws_hide_walker(_G(my_walker));
|
||||
_baronWalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, false,
|
||||
triggerMachineByHashCallback, "BARON talks rip");
|
||||
sendWSMessage_10000(1, _baronWalker, _baronShakeSit, 1, 48, 23,
|
||||
_baronShakeSit, 48, 48, 0);
|
||||
digi_play("405b01", 1);
|
||||
break;
|
||||
|
||||
case 23:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronShakeSit, 48, 100, 24,
|
||||
_baronShakeSit, 100, 100, 0);
|
||||
digi_play("405b01a", 1, 255, 25);
|
||||
break;
|
||||
|
||||
case 24:
|
||||
_ripTalksBaron = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, false,
|
||||
triggerMachineByHashCallback, "rip talks baron");
|
||||
_val5 = 1000;
|
||||
_val6 = 1103;
|
||||
kernel_timing_trigger(1, 102);
|
||||
_val7 = 2000;
|
||||
_val8 = 2101;
|
||||
kernel_timing_trigger(1, 110);
|
||||
break;
|
||||
|
||||
|
||||
case 25:
|
||||
digi_play("405b02", 1, 255, 26);
|
||||
break;
|
||||
|
||||
case 26:
|
||||
_val8 = 2102;
|
||||
_val6 = 1102;
|
||||
digi_play("405r01", 1, 255, 27);
|
||||
break;
|
||||
|
||||
case 27:
|
||||
_val6 = 1104;
|
||||
_val8 = 2101;
|
||||
digi_play("405b03", 1, 255, 28);
|
||||
break;
|
||||
|
||||
case 28:
|
||||
_val8 = 2103;
|
||||
kernel_timing_trigger(10, 29);
|
||||
break;
|
||||
|
||||
case 29:
|
||||
terminateMachineAndNull(_baronWalker);
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 1, 15, 30,
|
||||
_ripHandLetter, 15, 15, 0);
|
||||
break;
|
||||
|
||||
case 30:
|
||||
digi_preload("950_s06");
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 16, 29, -1,
|
||||
_ripHandLetter, 29, 29, 0);
|
||||
digi_play("405r02", 1, 255, 31);
|
||||
digi_play("950_s06", 2, 255, -1, 950);
|
||||
break;
|
||||
|
||||
case 31:
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 30, 84, -1,
|
||||
_ripHandLetter, 84, 84, 0);
|
||||
kernel_timing_trigger(45, 32);
|
||||
break;
|
||||
|
||||
case 32:
|
||||
digi_play("405b04", 1, 255, 33);
|
||||
break;
|
||||
|
||||
case 33:
|
||||
digi_play("405b03", 1, 255, 34);
|
||||
break;
|
||||
|
||||
case 34:
|
||||
digi_play("405b05", 1, 255, 35);
|
||||
break;
|
||||
|
||||
case 35:
|
||||
digi_play("950_s06", 2, 255, -1, 950);
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 85, 98, 36,
|
||||
_ripHandLetter, 98, 98, 0);
|
||||
break;
|
||||
|
||||
case 36:
|
||||
_baronWalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, false,
|
||||
triggerMachineByHashCallback, "BARON talks rip");
|
||||
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, 110,
|
||||
_baronTalkLoop, 1, 1, 0);
|
||||
kernel_timing_trigger(1, 37);
|
||||
break;
|
||||
|
||||
case 37:
|
||||
digi_play("405b05a", 1, 255, 38);
|
||||
_val8 = 2101;
|
||||
kernel_timing_trigger(1, 110);
|
||||
break;
|
||||
|
||||
case 38:
|
||||
_val8 = 2102;
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 15, 1, 39,
|
||||
_ripHandLetter, 1, 1, 0);
|
||||
break;
|
||||
|
||||
case 39:
|
||||
_val5 = 1000;
|
||||
_val6 = 1100;
|
||||
kernel_timing_trigger(1, 102);
|
||||
break;
|
||||
|
||||
case 40:
|
||||
kernel_timing_trigger(1, 60);
|
||||
break;
|
||||
|
||||
case 50:
|
||||
case 69:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 61:
|
||||
digi_play("13_15n07", 1, 255, 62);
|
||||
break;
|
||||
|
||||
case 62:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 58, 79, 63,
|
||||
_baronTurnWalk, 80, 82, 4);
|
||||
sendWSMessage_1a0000(_baronWalker, 11);
|
||||
break;
|
||||
|
||||
case 63:
|
||||
digi_play("13_20p01", 1, 255, 64);
|
||||
break;
|
||||
|
||||
case 64:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 83, 99, 65,
|
||||
_baronTurnWalk, 99, 99, 0);
|
||||
break;
|
||||
|
||||
case 65:
|
||||
ws_unhide_walker(_baron);
|
||||
ws_unhide_walker();
|
||||
setGlobals1(_ripHeadTurn, 6, 9, 9, 9, 0, 9, 6, 6, 6);
|
||||
sendWSMessage_110000(-1);
|
||||
terminateMachineAndNull(_baronWalker);
|
||||
sendWSMessage_10000(_baron, 185, 365, 9, 66, 1);
|
||||
break;
|
||||
|
||||
case 66:
|
||||
sendWSMessage_60000(_baron);
|
||||
digi_play("13_20n01", 1, 255, 67);
|
||||
sendWSMessage_120000(68);
|
||||
break;
|
||||
|
||||
case 67:
|
||||
digi_play("405_s01", 2, 255, 69);
|
||||
break;
|
||||
|
||||
case 68:
|
||||
sendWSMessage_150000(-1);
|
||||
break;
|
||||
|
||||
case 100:
|
||||
kernel_timing_trigger(1, 102);
|
||||
break;
|
||||
|
||||
case 101:
|
||||
_val8 = 2163;
|
||||
break;
|
||||
|
||||
case 102:
|
||||
if (_val2 != -1) {
|
||||
kernel_timing_trigger(1, _val2);
|
||||
_val2 = -1;
|
||||
} else {
|
||||
kernel_timing_trigger(1, 103);
|
||||
}
|
||||
break;
|
||||
|
||||
case 103:
|
||||
if (_val5 == 1000) {
|
||||
switch (_val6) {
|
||||
case 1100:
|
||||
ws_hide_walker();
|
||||
player_set_commands_allowed(false);
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, 102,
|
||||
_ripTalkGesture, 13, 13, 0);
|
||||
_val6 = 1101;
|
||||
_val7 = 2000;
|
||||
_val8 = 2100;
|
||||
kernel_timing_trigger(1, 110);
|
||||
break;
|
||||
|
||||
case 1101:
|
||||
_val6 = 1103;
|
||||
kernel_timing_trigger(1, 102);
|
||||
|
||||
conv_load("conv405a", 10, 10, 101);
|
||||
conv_export_pointer_curr(&_G(flags)[V115], 0);
|
||||
conv_export_pointer_curr(&_G(flags)[V314], 1);
|
||||
conv_play();
|
||||
break;
|
||||
|
||||
case 1102:
|
||||
frame = imath_ranged_rand(13, 16);
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, frame, frame, 102,
|
||||
_ripTalkGesture, frame, frame, 0);
|
||||
break;
|
||||
|
||||
case 1103:
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, 102,
|
||||
_ripTalkGesture, 13, 13, 0);
|
||||
break;
|
||||
|
||||
case 1104:
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, -1,
|
||||
_ripTalkGesture, 13, 13, 0);
|
||||
break;
|
||||
|
||||
case 1220:
|
||||
_G(kernel).call_daemon_every_loop = true;
|
||||
_response = series_stream("RIP DONT I KNOW", 4, 0, 103);
|
||||
series_stream_break_on_frame(_response, 9, 103);
|
||||
_val6 = 1221;
|
||||
break;
|
||||
|
||||
case 1221:
|
||||
if (!_sound2.empty()) {
|
||||
digi_play(_sound2.c_str(), 1);
|
||||
_sound2.clear();
|
||||
}
|
||||
|
||||
_G(kernel).call_daemon_every_loop = false;
|
||||
_val6 = 1222;
|
||||
break;
|
||||
|
||||
case 1222:
|
||||
_val6 = 1103;
|
||||
kernel_timing_trigger(1, 102);
|
||||
conv_resume();
|
||||
break;
|
||||
|
||||
case 1230:
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripLeanForward, 1, 16, 103,
|
||||
_ripLeanForward, 16, 16, 0);
|
||||
_val6 = 1232;
|
||||
break;
|
||||
|
||||
case 1232:
|
||||
_val6 = 1233;
|
||||
|
||||
if (!_sound2.empty()) {
|
||||
digi_play(_sound2.c_str(), 1, 255, 103);
|
||||
_sound2.clear();
|
||||
}
|
||||
break;
|
||||
|
||||
case 1233:
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripLeanForward, 16, 1, 102,
|
||||
_ripLeanForward, 1, 1, 0);
|
||||
_val6 = 1103;
|
||||
conv_resume();
|
||||
break;
|
||||
|
||||
case 2110:
|
||||
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 42, 103,
|
||||
_ripTalkGesture, 42, 42, 0);
|
||||
_val6 = 2112;
|
||||
|
||||
if (!_sound2.empty()) {
|
||||
_G(kernel).trigger_mode = KT_PARSE;
|
||||
digi_play(_sound2.c_str(), 1);
|
||||
_G(kernel).trigger_mode = KT_DAEMON;
|
||||
_sound2.clear();
|
||||
}
|
||||
break;
|
||||
|
||||
case 2112:
|
||||
_val6 = 1102;
|
||||
kernel_timing_trigger(1, 102);
|
||||
conv_resume();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 110:
|
||||
if (_val7 == 2000) {
|
||||
if (_val4 != -1) {
|
||||
kernel_timing_trigger(1, _val4);
|
||||
_val4 = -1;
|
||||
} else {
|
||||
kernel_timing_trigger(1, 111);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 111:
|
||||
if (_val7 == 2000) {
|
||||
switch (_val8) {
|
||||
case 2100:
|
||||
case 2102:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, 110,
|
||||
_baronTalkLoop, 1, 1, 0);
|
||||
_val8 = 2102;
|
||||
break;
|
||||
|
||||
case 2101:
|
||||
frame = imath_ranged_rand(4, 9);
|
||||
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, frame, frame, 110,
|
||||
_baronTalkLoop, frame, frame, 0);
|
||||
break;
|
||||
|
||||
case 2103:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, -1,
|
||||
_baronTalkLoop, 1, 1, 0);
|
||||
break;
|
||||
|
||||
case 2110:
|
||||
_G(kernel).call_daemon_every_loop = true;
|
||||
_response = series_stream("Baron sport is life", 5, 0, 111);
|
||||
series_stream_break_on_frame(_response, 3, 111);
|
||||
_val8 = 2111;
|
||||
break;
|
||||
|
||||
case 2111:
|
||||
if (!_sound1.empty()) {
|
||||
digi_play(_sound1.c_str(), 1);
|
||||
_sound1.clear();
|
||||
}
|
||||
|
||||
_G(kernel).call_daemon_every_loop = false;
|
||||
_val8 = 2112;
|
||||
break;
|
||||
|
||||
case 2112:
|
||||
case 2153:
|
||||
_val8 = 2102;
|
||||
kernel_timing_trigger(1, 110);
|
||||
conv_resume();
|
||||
break;
|
||||
|
||||
case 2120:
|
||||
_G(kernel).call_daemon_every_loop = true;
|
||||
_response = series_stream("BARON WORLD WAR", 6, 0, 111);
|
||||
series_stream_break_on_frame(_response, 4, 111);
|
||||
_val8 = 2121;
|
||||
break;
|
||||
|
||||
case 2121:
|
||||
if (!_sound1.empty()) {
|
||||
digi_play(_sound1.c_str(), 1);
|
||||
_sound1.clear();
|
||||
}
|
||||
|
||||
_val8 = 2122;
|
||||
_G(kernel).call_daemon_every_loop = false;
|
||||
break;
|
||||
|
||||
case 2122:
|
||||
kernel_timing_trigger(1, 666);
|
||||
break;
|
||||
|
||||
case 2123:
|
||||
_val8 = 2152;
|
||||
kernel_timing_trigger(1, 110);
|
||||
_val6 = 1103;
|
||||
kernel_timing_trigger(1, 102);
|
||||
break;
|
||||
|
||||
case 2140:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 1, 11, -1,
|
||||
_baronLeanForward, 12, 18, 1);
|
||||
_val8 = 2142;
|
||||
|
||||
if (!_sound1.empty()) {
|
||||
digi_play(_sound1.c_str(), 1, 255, 111);
|
||||
_sound1.clear();
|
||||
}
|
||||
break;
|
||||
|
||||
case 2142:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, 111,
|
||||
_baronLeanForward, 11, 11, 0);
|
||||
_val8 = 2162;
|
||||
conv_resume();
|
||||
break;
|
||||
|
||||
case 2150:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, -1,
|
||||
_baronLeanForward, 12, 18, 1);
|
||||
|
||||
if (!_sound1.empty()) {
|
||||
digi_play(_sound1.c_str(), 1, 255, 111);
|
||||
_sound1.clear();
|
||||
}
|
||||
break;
|
||||
|
||||
case 2152:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 12, 1, 111,
|
||||
_baronLeanForward, 1, 1, 0);
|
||||
_val8 = 2153;
|
||||
break;
|
||||
|
||||
case 2161:
|
||||
frame = imath_ranged_rand(12, 18);
|
||||
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, frame, frame, 110,
|
||||
_baronLeanForward, frame, frame, 0);
|
||||
break;
|
||||
|
||||
case 2162:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, 111,
|
||||
_baronLeanForward, 11, 11, 0);
|
||||
_val8 = 2162;
|
||||
break;
|
||||
|
||||
case 2163:
|
||||
terminateMachineAndNull(_ripTalksBaron);
|
||||
sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 1, 57, 61,
|
||||
_baronTurnWalk, 77, 79, 4);
|
||||
sendWSMessage_1a0000(_baronWalker, 11);
|
||||
break;
|
||||
|
||||
case 2171:
|
||||
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 12, 1, 111,
|
||||
_baronLeanForward, 1, 1, 0);
|
||||
_val8 = 2102;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 666:
|
||||
_response = series_stream("RIP WAR REACTION", 5, 0, 111);
|
||||
series_stream_break_on_frame(_response, 4, 667);
|
||||
_val8 = 2123;
|
||||
break;
|
||||
|
||||
case 667:
|
||||
series_set_frame_rate(_response, 15);
|
||||
series_stream_break_on_frame(_response, 10, 668);
|
||||
break;
|
||||
|
||||
case 668:
|
||||
series_set_frame_rate(_response, 5);
|
||||
ws_OverrideCrunchTime(_response);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room405::pre_parser() {
|
||||
const bool takeFlag = player_said("take");
|
||||
const bool lookFlag = player_said_any("look", "look at");
|
||||
const bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
|
||||
|
||||
if (player_said("DOOR") && (lookFlag || useFlag || takeFlag)) {
|
||||
_G(player).need_to_walk = false;
|
||||
_G(player).ready_to_walk = true;
|
||||
_G(player).waiting_for_walk = false;
|
||||
}
|
||||
|
||||
if (player_said("journal") && !takeFlag && !lookFlag && _G(kernel).trigger == -1) {
|
||||
_G(player).need_to_walk = false;
|
||||
_G(player).ready_to_walk = true;
|
||||
_G(player).waiting_for_walk = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Room405::parser() {
|
||||
const bool lookFlag = player_said_any("look", "look at");
|
||||
const bool talkFlag = player_said_any("talk", "talk to");
|
||||
const bool takeFlag = player_said("take");
|
||||
const bool enterFlag = player_said("enter");
|
||||
const bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
|
||||
|
||||
if (player_said("conv405a")) {
|
||||
if (_G(kernel).trigger == 1)
|
||||
conv405a1();
|
||||
else
|
||||
conv405a();
|
||||
} else if (talkFlag && player_said("baron")) {
|
||||
player_set_commands_allowed(false);
|
||||
_val4 = -1;
|
||||
_val5 = 1000;
|
||||
_val6 = 1100;
|
||||
_G(kernel).trigger_mode = KT_DAEMON;
|
||||
kernel_timing_trigger(1, 102);
|
||||
_G(kernel).trigger_mode = KT_PARSE;
|
||||
} else if (enterFlag) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(1);
|
||||
break;
|
||||
case 1:
|
||||
midi_stop();
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(404);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (lookFlag && player_said("DOOR") && lookDoor()) {
|
||||
// No implementation
|
||||
} else if (useFlag && player_said("DOOR") && useDoor()) {
|
||||
// No implementation
|
||||
} else if (takeFlag && player_said("DOOR") && takeDoor()) {
|
||||
// No implementation
|
||||
} else if (lookFlag && _G(walker).ripley_said(SAID)) {
|
||||
// No implementation
|
||||
} else if ((lookFlag && player_said("LIBRARY TABLE")) ||
|
||||
(lookFlag && player_said("JOURNAL "))) {
|
||||
if (_val9) {
|
||||
doAction("405r14");
|
||||
} else {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
digi_play("405r14", 1, 255, 1);
|
||||
break;
|
||||
case 1:
|
||||
digi_play("405r14a", 1);
|
||||
_val9 = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (lookFlag && player_said("SOFA")) {
|
||||
if (!_G(flags)[kGermanBanknoteFound] && inv_object_is_here("GERMAN BANKNOTE")) {
|
||||
_G(flags)[kGermanBanknoteFound] = 1;
|
||||
doAction("405r15");
|
||||
hotspot_set_active("GERMAN BANKNOTE", true);
|
||||
} else {
|
||||
doAction("405r12");
|
||||
}
|
||||
} else if (lookFlag && player_said("GERMAN BANKNOTE") && inv_object_is_here("GERMAN BANKNOTE")) {
|
||||
doAction("405r17");
|
||||
} else if (lookFlag && player_said(" ")) {
|
||||
doAction("405r04");
|
||||
} else if (takeFlag && player_said("ZEBRA SKIN")) {
|
||||
doAction("405r18");
|
||||
} else if (takeFlag && player_said("DEER HEAD")) {
|
||||
doAction("405r19");
|
||||
} else if (takeFlag && player_said("BATTLE AXE")) {
|
||||
doAction("405r20");
|
||||
} else if (takeFlag && player_said("SHIELD")) {
|
||||
doAction("405r20");
|
||||
} else if (takeFlag && player_said("BOOKSHELF")) {
|
||||
doAction("405r21");
|
||||
} else if (takeFlag && player_said("SOFA")) {
|
||||
doAction("405r22");
|
||||
} else if (takeFlag && player_said("CHAIR")) {
|
||||
doAction("405r22");
|
||||
} else if (takeFlag && player_said("JOURNAL ")) {
|
||||
doAction("405r23");
|
||||
} else if (takeFlag && player_said("GERMAN BANKNOTE") && takeBanknote()) {
|
||||
// No implementation
|
||||
} else if (player_said("journal") && !takeFlag && !lookFlag && !inv_player_has(_G(player).noun)) {
|
||||
if (_G(flags)[kCastleCartoon]) {
|
||||
digi_play("com016", 1);
|
||||
} else {
|
||||
if (_G(kernel).trigger == 6)
|
||||
_G(flags)[kCastleCartoon] = 1;
|
||||
sketchInJournal("com015");
|
||||
}
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
_G(player).command_ready = false;
|
||||
}
|
||||
|
||||
void Room405::conv405a() {
|
||||
const int who = conv_whos_talking();
|
||||
_currentNode = conv_current_node();
|
||||
const int entry = conv_current_entry();
|
||||
const char *sound = conv_sound_to_play();
|
||||
|
||||
if (sound) {
|
||||
if (who <= 0) {
|
||||
switch (_currentNode) {
|
||||
case 2:
|
||||
if (entry == 0) {
|
||||
_val8 = 2110;
|
||||
_sound1 = sound;
|
||||
} else {
|
||||
_val8 = 2101;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (entry == 1) {
|
||||
_val8 = 2140;
|
||||
_sound1 = sound;
|
||||
} else if (entry == 2) {
|
||||
_val8 = 2120;
|
||||
_sound1 = sound;
|
||||
} else {
|
||||
_val8 = 2101;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 14:
|
||||
if (entry == 4) {
|
||||
_val8 = 2140;
|
||||
_sound1 = sound;
|
||||
} else {
|
||||
_val8 = 2101;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
_val8 = 2101;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
break;
|
||||
}
|
||||
} else if (who == 1) {
|
||||
switch (_currentNode) {
|
||||
case 1:
|
||||
if (entry == 3) {
|
||||
_val6 = 2110;
|
||||
_sound2 = sound;
|
||||
} else {
|
||||
_val6 = 1102;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 8:
|
||||
if (entry == 2) {
|
||||
_val6 = 1220;
|
||||
_sound2 = sound;
|
||||
} else {
|
||||
_val6 = 1102;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 14:
|
||||
if (entry == 1) {
|
||||
_val6 = 1230;
|
||||
_sound2 = sound;
|
||||
} else {
|
||||
if (entry == 5)
|
||||
_val8 = 2171;
|
||||
|
||||
_val6 = 1102;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
_val6 = 1102;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
conv_resume();
|
||||
}
|
||||
}
|
||||
|
||||
void Room405::conv405a1() {
|
||||
const int who = conv_whos_talking();
|
||||
|
||||
if (who <= 0)
|
||||
_val8 = 2102;
|
||||
else if (who == 1)
|
||||
_val6 = 1103;
|
||||
|
||||
conv_resume();
|
||||
}
|
||||
|
||||
bool Room405::lookDoor() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
ws_walk(_G(my_walker), 245, 367, nullptr, 2, 9);
|
||||
return true;
|
||||
case 2:
|
||||
digi_play("405r30", 1);
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Room405::useDoor() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
ws_walk(_G(my_walker), 245, 367, nullptr, 2, 9);
|
||||
return true;
|
||||
case 2:
|
||||
digi_play("405r31", 1);
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Room405::takeDoor() {
|
||||
if (_G(kernel).trigger == 1) {
|
||||
ws_walk(_G(my_walker), 245, 367, nullptr, 2, 9);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Room405::takeBanknote() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
if (inv_object_is_here("GERMAN BANKNOTE")) {
|
||||
player_set_commands_allowed(false);
|
||||
_lowReacher = series_load("RIP TREK LOW REACHER POS1");
|
||||
setGlobals1(_lowReacher, 1, 16, 16, 16, 0, 16, 1, 1, 1);
|
||||
sendWSMessage_110000(1);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
kernel_examine_inventory_object("PING GERMAN BANKNOTE", _G(master_palette),
|
||||
5, 1, 265, 270, 2, "405r24", -1);
|
||||
return true;
|
||||
|
||||
case 2:
|
||||
terminateMachineAndNull(_bankNote);
|
||||
inv_give_to_player("GERMAN BANKNOTE");
|
||||
sendWSMessage_120000(3);
|
||||
return true;
|
||||
|
||||
case 3:
|
||||
hotspot_set_active("GERMAN BANKNOTE", false);
|
||||
sendWSMessage_150000(4);
|
||||
return true;
|
||||
|
||||
case 4:
|
||||
series_unload(_lowReacher);
|
||||
player_set_commands_allowed(true);
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Room405::doAction(const char *name) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
digi_play(name, 1, 255, 1);
|
||||
break;
|
||||
case 1:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
86
engines/m4/riddle/rooms/section4/room405.h
Normal file
86
engines/m4/riddle/rooms/section4/room405.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM405_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM405_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room405 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
int _val2 = 0;
|
||||
int _val3 = 0;
|
||||
int _val4 = 0;
|
||||
int _val5 = 0;
|
||||
int _val6 = 0;
|
||||
int _val7 = 0;
|
||||
int _val8 = 0;
|
||||
int _val9 = 0;
|
||||
int _candlesBurning = 0;
|
||||
int _safariShadow = 0;
|
||||
int _lowReacher = 0;
|
||||
machine *_door = nullptr;
|
||||
machine *_candles = nullptr;
|
||||
machine *_bankNote = nullptr;
|
||||
machine *_baron = nullptr;
|
||||
machine *_baronWalker = nullptr;
|
||||
machine *_ripTalksBaron = nullptr;
|
||||
machine *_response = nullptr;
|
||||
int _currentNode = 0;
|
||||
Common::String _sound1;
|
||||
Common::String _sound2;
|
||||
int _baronShakeSit = 0;
|
||||
int _baronTalkLoop = 0;
|
||||
int _baronLeanForward = 0;
|
||||
int _baronTurnWalk = 0;
|
||||
int _ripHandLetter = 0;
|
||||
int _ripTalkGesture = 0;
|
||||
int _ripLeanForward = 0;
|
||||
int _ripHeadTurn = 0;
|
||||
|
||||
void conv405a();
|
||||
void conv405a1();
|
||||
bool lookDoor();
|
||||
bool useDoor();
|
||||
bool takeDoor();
|
||||
bool takeBanknote();
|
||||
void doAction(const char *name);
|
||||
|
||||
public:
|
||||
Room405() : Room() {}
|
||||
~Room405() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
1417
engines/m4/riddle/rooms/section4/room406.cpp
Normal file
1417
engines/m4/riddle/rooms/section4/room406.cpp
Normal file
File diff suppressed because it is too large
Load Diff
84
engines/m4/riddle/rooms/section4/room406.h
Normal file
84
engines/m4/riddle/rooms/section4/room406.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM406_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM406_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room406 : public Room {
|
||||
private:
|
||||
machine *_billiardTable = nullptr;
|
||||
machine *_painting = nullptr;
|
||||
machine *_mirror = nullptr;
|
||||
machine *_cardDoor = nullptr;
|
||||
machine *_gamesCabinet = nullptr;
|
||||
machine *_desk = nullptr;
|
||||
machine *_poolBall = nullptr;
|
||||
machine *_emptyDrawer = nullptr;
|
||||
machine *_envelope = nullptr;
|
||||
machine *_keys = nullptr;
|
||||
machine *_cards = nullptr;
|
||||
int _rptmhr = 0;
|
||||
int _rptmr15 = 0;
|
||||
int _gamesDrawerState = 0;
|
||||
int deskDrawerState = 0;
|
||||
int _ripReachHand = 0;
|
||||
int _ripHiHand = 0;
|
||||
int _pickupBall = 0;
|
||||
machine *_ripAction = nullptr;
|
||||
int _lookMirror = 0;
|
||||
int _tableRaises = 0;
|
||||
int _paintingOpening = 0;
|
||||
int _ripThrowsBall = 0;
|
||||
int _deskOpening = 0;
|
||||
int _cabinetOpens = 0;
|
||||
|
||||
void patchHotspots();
|
||||
void setHotspots();
|
||||
bool takeKeys();
|
||||
bool takeBilliardBall();
|
||||
bool billiardBallOnTable();
|
||||
void useSwitchPaintingOpen();
|
||||
void useSwitchPaintingClosed();
|
||||
void useAceOfSpades1();
|
||||
void useAceOfSpades2();
|
||||
bool lookBilliardBall();
|
||||
|
||||
public:
|
||||
Room406() : Room() {}
|
||||
~Room406() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
5985
engines/m4/riddle/rooms/section4/room407.cpp
Normal file
5985
engines/m4/riddle/rooms/section4/room407.cpp
Normal file
File diff suppressed because it is too large
Load Diff
269
engines/m4/riddle/rooms/section4/room407.h
Normal file
269
engines/m4/riddle/rooms/section4/room407.h
Normal file
@@ -0,0 +1,269 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM407_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM407_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room407 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
int _val2 = 0;
|
||||
int _valveState2 = 0;
|
||||
int _valveState1 = 0;
|
||||
int _drawerState = 0;
|
||||
int _val6 = 0;
|
||||
int _val7 = 0;
|
||||
int _faucetPipeState = 0;
|
||||
int _airValveState = 0;
|
||||
int _leverKeyState = 0;
|
||||
int _rodState = 0;
|
||||
int _hoseState = 0;
|
||||
int _tubeState = 0;
|
||||
int _pumpState = 0;
|
||||
int _stopperState = 0;
|
||||
int _periodicTableState = 0;
|
||||
int _xyzzy7 = 0;
|
||||
int _items2State = 0;
|
||||
int _corkState = 0;
|
||||
int _xyzzy10 = 0;
|
||||
int _faucetHookedToJar = 0;
|
||||
int _frotz2 = 0;
|
||||
int _frotz3 = 0;
|
||||
int _frotz4 = 0;
|
||||
int _frotz5 = 0;
|
||||
int _frotz6 = 0;
|
||||
int _frotz7 = 0;
|
||||
int _frotz8 = 0;
|
||||
int _lookedAtLever = 0;
|
||||
int _tabletopState = 0;
|
||||
int _pivotState = 0;
|
||||
int _fullGlassState = 0;
|
||||
int _glassTopState = 0;
|
||||
int _glassBottomState = 0;
|
||||
int _roofPistonState = 0;
|
||||
int _glassGoneState = 0;
|
||||
int _comboLockState = 0;
|
||||
int _buttonFrame1 = 0;
|
||||
int _buttonFrame2 = 0;
|
||||
int _buttonFrame3 = 0;
|
||||
int _buttonFrame4 = 0;
|
||||
bool _codeCorrect = false;
|
||||
int _val11 = 0;
|
||||
int _val15 = 0;
|
||||
int _val16 = 0;
|
||||
int _waterFlowTube = 0;
|
||||
int _waterFlowFaucet = 0;
|
||||
int _waterFlowStem = 0;
|
||||
machine *_bottle = nullptr;
|
||||
machine *_chart = nullptr;
|
||||
machine *_cpist = nullptr;
|
||||
machine *_drawer = nullptr;
|
||||
machine *_escape = nullptr;
|
||||
machine *_faucetPipe = nullptr;
|
||||
machine *_airValve = nullptr;
|
||||
machine *_lever = nullptr;
|
||||
machine *_niche = nullptr;
|
||||
machine *_tpist = nullptr;
|
||||
machine *_pump = nullptr;
|
||||
machine *_bits = nullptr;
|
||||
machine *_star2 = nullptr;
|
||||
machine *_gears = nullptr;
|
||||
machine *_letter = nullptr;
|
||||
int _ripMedReach = 0;
|
||||
machine *_drawerPopup = nullptr;
|
||||
machine *_drawerPopupHose = nullptr;
|
||||
machine *_stopperInDrawer = nullptr;
|
||||
machine *_tubeInDrawer = nullptr;
|
||||
machine *_grips = nullptr;
|
||||
machine *_tabletopPopup = nullptr;
|
||||
machine *_tabletopPopupWithItems1 = nullptr;
|
||||
machine *_tabletopPopupWithItems2 = nullptr;
|
||||
machine *_tabletopPopupWithItems3 = nullptr;
|
||||
machine *_pivotPopup = nullptr;
|
||||
machine *_glassJarPopup = nullptr;
|
||||
machine *_glassTopPopupWithItems1 = nullptr;
|
||||
machine *_glassTopPopupWithItems2 = nullptr;
|
||||
machine *_glassBottomWithItems1 = nullptr;
|
||||
machine *_glassBottomWithItems2 = nullptr;
|
||||
machine *_roofPiston = nullptr;
|
||||
machine *_roofPistonWithItems = nullptr;
|
||||
machine *_glassGone = nullptr;
|
||||
machine *_comboLockPopup = nullptr;
|
||||
int _407pu08a = 0;
|
||||
int _407pu08b = 0;
|
||||
int _407pu08c = 0;
|
||||
int _407pu08d = 0;
|
||||
machine *_lockButton1 = nullptr;
|
||||
machine *_lockButton2 = nullptr;
|
||||
machine *_lockButton3 = nullptr;
|
||||
machine *_lockButton4 = nullptr;
|
||||
int _ripEnters = 0;
|
||||
int _stair = 0;
|
||||
machine *_ripley = nullptr;
|
||||
machine *_microscopeCloseup = nullptr;
|
||||
int _ripHiHand1 = 0;
|
||||
int _ripHiHand2 = 0;
|
||||
int _ripMedHand1 = 0;
|
||||
int _ripLowHand1 = 0;
|
||||
int _placeLeverKey = 0;
|
||||
machine *_safariShadow = nullptr;
|
||||
int _rollStuff = 0;
|
||||
int _407rp98 = 0;
|
||||
int _407rp99 = 0;
|
||||
int _pump407 = 0;
|
||||
int _hangRip = 0;
|
||||
int _rptmhr11 = 0;
|
||||
int _407tpis2 = 0;
|
||||
int _ripHeadTurn = 0;
|
||||
int _jarWaterFallingLeft = 0;
|
||||
int _jarWaterFallingCentre = 0;
|
||||
int _jarWaterFallingRight = 0;
|
||||
machine *_jarLeft = nullptr;
|
||||
machine *_jarCentre = nullptr;
|
||||
machine *_jarRight = nullptr;
|
||||
machine *_sink = nullptr;
|
||||
int _407a = 0;
|
||||
int _407b = 0;
|
||||
int _407c = 0;
|
||||
int _407d = 0;
|
||||
int _407e = 0;
|
||||
int _407h = 0;
|
||||
int _407j = 0;
|
||||
int _407k = 0;
|
||||
int _407l = 0;
|
||||
int _407m = 0;
|
||||
int _407o = 0;
|
||||
int _407p = 0;
|
||||
int _407q = 0;
|
||||
int _407r = 0;
|
||||
int _407s = 0;
|
||||
int _exit = 0;
|
||||
|
||||
void setHotspots();
|
||||
void lookItem(const char *item, const char *digi);
|
||||
void useMicroscope();
|
||||
void roofPistonPopup();
|
||||
void glassBottomPopup();
|
||||
void glassTopPopup();
|
||||
void glassGonePopup();
|
||||
void pivotPopup();
|
||||
void tabletopPopup();
|
||||
bool lookGlassJar();
|
||||
void glassJarPopup();
|
||||
bool lookEmeraldCork();
|
||||
void periodicTablePopup();
|
||||
bool lookLeverKey();
|
||||
void gardenHoseSurgicalTube();
|
||||
void gardenHoseSurgicalTube2();
|
||||
void surgicalTubeFaucetPipe();
|
||||
void surgicalTubeStem();
|
||||
void reachHand(int frame);
|
||||
void reachLeverKey();
|
||||
void faucetPipeGardenHose();
|
||||
void faucetPipeGlassJar();
|
||||
void gardenHoseFaucetPipe();
|
||||
void surgicalTubeGardenHose();
|
||||
void emeraldIronSupport();
|
||||
void placeLeverKey();
|
||||
void rubberPlugGlassJar();
|
||||
void rubberPlugGlassJar2();
|
||||
void corkGlassJar1();
|
||||
void corkGlassJar2();
|
||||
void pumpGripsGlassJar();
|
||||
void periodicTableGlassJar();
|
||||
void surgicalTubeNozzles();
|
||||
void leverKeyTablePivot();
|
||||
void pumpRodBracket();
|
||||
void leverKey1();
|
||||
void leverKey2();
|
||||
void faucetHandleAirValve();
|
||||
void faucetPipeFaucetHandle1();
|
||||
void faucetPipeFaucetHandle2();
|
||||
void pumpRodPump();
|
||||
void pumpGripsPump();
|
||||
void useButton1();
|
||||
void useButton2();
|
||||
void useButton3();
|
||||
void useButton4();
|
||||
void checkCode();
|
||||
void useButtons();
|
||||
void useLeverKey();
|
||||
void useFaucet();
|
||||
void useValveHandle();
|
||||
bool usePump();
|
||||
void usePump2();
|
||||
void takeLetter();
|
||||
void takeFaucetPipe1();
|
||||
void takeFaucetPipe2();
|
||||
void takeFaucetPipe3();
|
||||
void takeSurgicalTube1();
|
||||
void takeSurgicalTube2();
|
||||
void takeSurgicalTube3();
|
||||
void takeGardenHose1();
|
||||
void takeGardenHose2();
|
||||
void takeGardenHose3();
|
||||
void takeGardenHose4();
|
||||
void takeGlassJar1();
|
||||
void takeGlassJar2();
|
||||
void takePeriodicTable1();
|
||||
void takePeriodicTable2();
|
||||
void takeJarGrips();
|
||||
void takeJarCork1();
|
||||
void takeJarCork2();
|
||||
void takeJarRubberPlug1();
|
||||
void takeJarRubberPlug2();
|
||||
void takeNozzlesTube();
|
||||
void takeLeverKeyFromWall();
|
||||
void takeLeverKeyFromBench();
|
||||
void takeLeverKey3();
|
||||
void takeAirValveHandle();
|
||||
void takeFaucetHandle();
|
||||
void takePumpRod1();
|
||||
void takePumpRod2();
|
||||
void takePumpRod3();
|
||||
void takePumpGrips1();
|
||||
void takePumpGrips2();
|
||||
void takeRubberPlug();
|
||||
void takeSurgicalTube();
|
||||
|
||||
public:
|
||||
Room407() : Room() {}
|
||||
~Room407() override {}
|
||||
|
||||
void preload() override;
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
void syncGame(Common::Serializer &s) override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
884
engines/m4/riddle/rooms/section4/room408.cpp
Normal file
884
engines/m4/riddle/rooms/section4/room408.cpp
Normal file
@@ -0,0 +1,884 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room408.h"
|
||||
#include "m4/riddle/rooms/section4/section4.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
#include "m4/riddle/riddle.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room408::init() {
|
||||
player_set_commands_allowed(false);
|
||||
|
||||
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
|
||||
_val1 = 0;
|
||||
_ripleyTrigger = -1;
|
||||
_val3 = 0;
|
||||
_wolfTrigger = -1;
|
||||
_currentNode = -1;
|
||||
_ripleyMode = 0;
|
||||
_ripleyShould = 0;
|
||||
_wolfMode = 0;
|
||||
_wolfShould = 0;
|
||||
}
|
||||
|
||||
digi_preload("950_s19");
|
||||
digi_preload("950_s20");
|
||||
digi_preload("950_s21");
|
||||
hotspot_set_active("WOLF", false);
|
||||
hotspot_set_active("PLANK", false);
|
||||
hotspot_set_active("EDGER", false);
|
||||
_exit = series_show("RIP EXITS 407", 0xf00, 16);
|
||||
|
||||
if (_G(flags)[V139] == 1) {
|
||||
_G(flags)[V139] = 0;
|
||||
_edger = series_place_sprite("Edger gone", 0, 0, -53, 100, 0xf00);
|
||||
hotspot_set_active("EDGER", true);
|
||||
inv_move_object("EDGER", 408);
|
||||
ws_demand_location(_G(my_walker), 234, 319, 3);
|
||||
ws_walk(_G(my_walker), 438, 325, nullptr, 400, 1);
|
||||
|
||||
} else if (_G(flags)[V139] == 3) {
|
||||
_G(flags)[V139] = 0;
|
||||
|
||||
if (inv_object_is_here("PLANK")) {
|
||||
_plank = series_place_sprite("Plank gone", 0, 0, 0, 100, 0xf00);
|
||||
hotspot_set_active("PLANK", true);
|
||||
}
|
||||
|
||||
ws_demand_location(_G(my_walker), -20, 345, 3);
|
||||
ws_walk(_G(my_walker), 234, 319, nullptr, 420, 1);
|
||||
|
||||
} else {
|
||||
if (inv_player_has("TURTLE") && !inv_player_has("EDGER") &&
|
||||
!_G(flags)[kWolfFled]) {
|
||||
_edger = series_place_sprite("Edger gone", 0, 0, -53, 100, 0xf00);
|
||||
hotspot_set_active("EDGER", true);
|
||||
}
|
||||
|
||||
if (inv_player_has("TURTLE") && !inv_player_has("PLANK") &&
|
||||
!_G(flags)[kWolfFled] && inv_object_is_here("PLANK")) {
|
||||
_plank = series_place_sprite("Plank gone", 0, 0, 0, 100, 0xf00);
|
||||
hotspot_set_active("PLANK", true);
|
||||
}
|
||||
|
||||
switch (_G(game).previous_room) {
|
||||
case KERNEL_RESTORING_GAME:
|
||||
digi_preload("950_s22");
|
||||
|
||||
if (_G(flags)[kWolfLocation] == 408) {
|
||||
hotspot_set_active("WOLF", true);
|
||||
_wolfMode = 2001;
|
||||
_wolfShould = 2200;
|
||||
_wolf = series_load("WOLF CLPNG LOOP LOOKS TO SIDE");
|
||||
_wolfie = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0xd00, 0,
|
||||
triggerMachineByHashCallback, "WOLFIE");
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 1, 10, 110, _wolf, 10, 10, 0);
|
||||
}
|
||||
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 402:
|
||||
if (_G(flags)[V132]) {
|
||||
ws_hide_walker();
|
||||
ws_walk_load_shadow_series(S4_SHADOW_DIRS, S4_SHADOW_NAMES);
|
||||
ws_walk_load_walker_series(S4_NORMAL_DIRS, S4_NORMAL_NAMES);
|
||||
kernel_timing_trigger(1, 300);
|
||||
} else {
|
||||
if (_G(flags)[kWolfLocation] == 408) {
|
||||
hotspot_set_active("WOLF", true);
|
||||
_wolf = series_load("WOLF CLPNG LOOP LOOKS TO SIDE");
|
||||
_wolfie = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0xd00, 0,
|
||||
triggerMachineByHashCallback, "WOLFIE");
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 1, 10, 110, _wolf, 10, 10, 0);
|
||||
_wolfMode = 2001;
|
||||
_wolfShould = 2200;
|
||||
}
|
||||
|
||||
ws_demand_location(_G(my_walker), -20, 345, 3);
|
||||
ws_walk(_G(my_walker), 35, 345, nullptr, 20, 3);
|
||||
}
|
||||
break;
|
||||
|
||||
case 407:
|
||||
digi_preload("950_s22");
|
||||
terminateMachineAndNull(_exit);
|
||||
|
||||
if (_G(flags)[kWolfFled]) {
|
||||
_G(flags)[kWolfLocation] = 999;
|
||||
} else if (inv_player_has("TURTLE")) {
|
||||
_G(flags)[kWolfLocation] = 402;
|
||||
_G(flags)[V117] = 1;
|
||||
} else if (_G(flags)[V124]) {
|
||||
_G(flags)[kWolfLocation] = 402;
|
||||
} else {
|
||||
_G(flags)[kWolfLocation] = 403;
|
||||
}
|
||||
|
||||
_ripExits = series_load("RIP EXITS 407");
|
||||
ws_demand_location(_G(my_walker), 201, 287, 4);
|
||||
ws_hide_walker();
|
||||
|
||||
_exit = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0, 0,
|
||||
triggerMachineByHashCallback, "RIP ENTERS from GIZMO");
|
||||
sendWSMessage_10000(1, _exit, _ripExits, 1, 75, 40, _ripExits, 75, 75, 0);
|
||||
digi_play("408_s01", 2);
|
||||
break;
|
||||
|
||||
default:
|
||||
digi_preload("950_s22");
|
||||
|
||||
if (_G(flags)[V117] && _G(flags)[V125] == 3 &&
|
||||
!_G(flags)[kWolfFled] && !inv_player_has("EDGER") &&
|
||||
!inv_player_has("PLANK")) {
|
||||
_G(flags)[kWolfLocation] = 408;
|
||||
_G(flags)[V117] = 0;
|
||||
}
|
||||
|
||||
if (_G(flags)[kWolfLocation] == 408) {
|
||||
hotspot_set_active("WOLF", true);
|
||||
_wolf = series_load("WOLF CLPNG LOOP LOOKS TO SIDE");
|
||||
_wolfie = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0xd00, 0,
|
||||
triggerMachineByHashCallback, "WOLFIE");
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 1, 10, 110, _wolf, 10, 10, 0);
|
||||
_wolfMode = 2001;
|
||||
_wolfShould = 2200;
|
||||
}
|
||||
|
||||
ws_demand_location(_G(my_walker), 660, 345, 9);
|
||||
|
||||
if (_G(flags)[V125] == 3) {
|
||||
series_simple_play("408 turtle popup", 0, true);
|
||||
ws_walk(_G(my_walker), 438, 325, nullptr, 350, 1);
|
||||
} else {
|
||||
ws_walk(_G(my_walker), 615, 345, nullptr, 30, 9);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
digi_play_loop("950_s22", 3, 120, -1, 950);
|
||||
}
|
||||
|
||||
void Room408::daemon() {
|
||||
int frame;
|
||||
|
||||
switch (_G(kernel).trigger) {
|
||||
case 20:
|
||||
case 30:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 40:
|
||||
digi_play("408_s03", 2);
|
||||
sendWSMessage_10000(1, _exit, _ripExits, 76, 85, 42, _ripExits, 85, 85, 0);
|
||||
break;
|
||||
|
||||
case 42:
|
||||
ws_unhide_walker();
|
||||
DisposePath(_G(my_walker)->walkPath);
|
||||
_G(my_walker)->walkPath = CreateCustomPath(250, 335, -1);
|
||||
ws_custom_walk(_G(my_walker), 4, -1);
|
||||
sendWSMessage_10000(1, _exit, _ripExits, 31, 1, 44, _ripExits, 1, 1, 0);
|
||||
digi_play("408r31", 1);
|
||||
break;
|
||||
|
||||
case 44:
|
||||
terminateMachineAndNull(_exit);
|
||||
series_unload(_ripExits);
|
||||
_exit = series_show("RIP EXITS 407", 0xf00, 16);
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 100:
|
||||
kernel_timing_trigger(1, 102);
|
||||
break;
|
||||
|
||||
case 101:
|
||||
_ripleyMode = 1000;
|
||||
_ripleyShould = 1105;
|
||||
break;
|
||||
|
||||
case 102:
|
||||
if (_ripleyTrigger != -1) {
|
||||
kernel_timing_trigger(1, _ripleyTrigger);
|
||||
_ripleyTrigger = -1;
|
||||
} else {
|
||||
kernel_timing_trigger(1, 103);
|
||||
}
|
||||
break;
|
||||
|
||||
case 103:
|
||||
if (_ripleyMode == 1000) {
|
||||
switch (_ripleyShould) {
|
||||
case 1100:
|
||||
ws_hide_walker();
|
||||
player_set_commands_allowed(false);
|
||||
_ripHandsBehindBack = series_load("RIP TREK HANDS BEHIND BACK POS2");
|
||||
|
||||
player_update_info();
|
||||
_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
|
||||
_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
|
||||
triggerMachineByHashCallback, "rip talks wolf");
|
||||
_ripleyShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
|
||||
_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
|
||||
triggerMachineByHashCallback, "rip talks wolf SHADOW");
|
||||
|
||||
sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 1, 15, 102,
|
||||
_ripHandsBehindBack, 15, 15, 0);
|
||||
sendWSMessage_10000(1, _ripleyShadow, _ripShadowSeries, 1, 1, -1,
|
||||
_ripShadowSeries, 1, 1, 0);
|
||||
_ripleyShould = 1101;
|
||||
_wolfMode = 2000;
|
||||
_wolfShould = 2100;
|
||||
kernel_timing_trigger(1, 110);
|
||||
break;
|
||||
|
||||
case 1101:
|
||||
_ripleyShould = 1103;
|
||||
kernel_timing_trigger(1, 102);
|
||||
conv_load("conv408a", 0, 10, 101);
|
||||
conv_export_value_curr(_G(flags)[V117], 0);
|
||||
conv_export_value_curr(_G(flags)[V118], 1);
|
||||
conv_play();
|
||||
break;
|
||||
|
||||
case 1102:
|
||||
sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 15, 15, 102,
|
||||
_ripHandsBehindBack, 15, 15, 0);
|
||||
break;
|
||||
|
||||
case 1103:
|
||||
sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 15, 15, 102,
|
||||
_ripHandsBehindBack, 15, 15, 0);
|
||||
break;
|
||||
|
||||
case 1104:
|
||||
sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 15, 15, -1,
|
||||
_ripHandsBehindBack, 15, 15, 0);
|
||||
break;
|
||||
|
||||
case 1105:
|
||||
sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 15, 1, 103,
|
||||
_ripHandsBehindBack, 1, 1, 0);
|
||||
_ripleyShould = 1106;
|
||||
_wolfShould = 2103;
|
||||
break;
|
||||
|
||||
case 1106:
|
||||
terminateMachineAndNull(_ripley);
|
||||
terminateMachineAndNull(_ripleyShadow);
|
||||
ws_unhide_walker();
|
||||
series_unload(_ripHandsBehindBack);
|
||||
|
||||
if (_currentNode != 8 && _currentNode != 9) {
|
||||
_wolfMode = 2001;
|
||||
_wolfShould = 2200;
|
||||
kernel_timing_trigger(1, 110);
|
||||
player_set_commands_allowed(true);
|
||||
} else {
|
||||
_wolfTrigger = 320;
|
||||
kernel_timing_trigger(1, 110);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 110:
|
||||
switch (_wolfMode) {
|
||||
case 2000:
|
||||
if (_wolfShould >= 2100 && _wolfShould <= 2104) {
|
||||
if (_wolfTrigger != -1) {
|
||||
kernel_timing_trigger(1, _wolfTrigger);
|
||||
_wolfTrigger = -1;
|
||||
} else {
|
||||
kernel_timing_trigger(1, 111);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2001:
|
||||
if (_wolfShould == 2200) {
|
||||
if (_wolfTrigger != -1) {
|
||||
kernel_timing_trigger(1, _wolfTrigger);
|
||||
_wolfTrigger = -1;
|
||||
} else {
|
||||
kernel_timing_trigger(1, 111);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 111:
|
||||
switch (_wolfMode) {
|
||||
case 2000:
|
||||
switch (_wolfShould) {
|
||||
case 2100:
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 10, 13, 110, _wolf, 13, 13, 0);
|
||||
_wolfShould = 2102;
|
||||
break;
|
||||
case 2101:
|
||||
frame = imath_ranged_rand(14, 16);
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, frame, frame, 110,
|
||||
_wolf, frame, frame, 0);
|
||||
break;
|
||||
case 2102:
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 13, 13, 110, _wolf, 13, 13, 0);
|
||||
_wolfShould = 2102;
|
||||
break;
|
||||
case 2103:
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 13, 10, -1, _wolf, 10, 10, 0);
|
||||
break;
|
||||
case 2104:
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 1, 9, 110, _wolf, 9, 9, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2001:
|
||||
if (_wolfShould == 2200) {
|
||||
sendWSMessage_10000(1, _wolfie, _wolf, 1, 9, 110, _wolf, 9, 9, 0);
|
||||
|
||||
switch (imath_ranged_rand(1, 3)) {
|
||||
case 1:
|
||||
digi_play("950_s19", 2);
|
||||
break;
|
||||
case 2:
|
||||
digi_play("950_s20", 2);
|
||||
break;
|
||||
case 3:
|
||||
digi_play("950_s21", 2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 220:
|
||||
_wolfMode = 2000;
|
||||
_wolfShould = 2100;
|
||||
|
||||
kernel_timing_trigger(1, 110);
|
||||
_ripTrekTwoHandTalk = series_load("RIP TREK TWO HAND TALK POS2");
|
||||
|
||||
player_update_info();
|
||||
_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
|
||||
_G(player_info).x, _G(player_info).y, _G(player_info).scale,
|
||||
0x100, 0, triggerMachineByHashCallback, "rip talks wolf");
|
||||
_ripleyShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
|
||||
_G(player_info).x, _G(player_info).y, _G(player_info).scale,
|
||||
0x100, 0, triggerMachineByHashCallback, "rip talks wolf SHADOW");
|
||||
|
||||
sendWSMessage_10000(1, _ripleyShadow, _ripShadowSeries, 1, 1, -1,
|
||||
_ripShadowSeries, 1, 1, 0);
|
||||
sendWSMessage_10000(1, _ripley, _ripTrekTwoHandTalk, 1, 6, 222,
|
||||
_ripTrekTwoHandTalk, 6, 6, 0);
|
||||
break;
|
||||
|
||||
case 222:
|
||||
_wolfShould = 2101;
|
||||
kernel_timing_trigger(1, 110);
|
||||
digi_play("402w008", 1, 255, 226);
|
||||
kernel_timing_trigger(45, 224);
|
||||
break;
|
||||
|
||||
case 225:
|
||||
terminateMachineAndNull(_ripley);
|
||||
terminateMachineAndNull(_ripleyShadow);
|
||||
ws_unhide_walker();
|
||||
series_unload(_ripTrekTwoHandTalk);
|
||||
break;
|
||||
|
||||
case 226:
|
||||
_wolfShould = 2103;
|
||||
kernel_timing_trigger(30, 227);
|
||||
break;
|
||||
|
||||
case 227:
|
||||
_wolfMode = 2001;
|
||||
_wolfShould = 2200;
|
||||
kernel_timing_trigger(1, 110);
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 300:
|
||||
_wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS,
|
||||
-20, 345, 3, triggerMachineByHashCallback3000, "WOLF_WALKER");
|
||||
sendWSMessage_10000(_wolfWalker, 660, 345, 9, -1, 0);
|
||||
kernel_timing_trigger(400, 302);
|
||||
kernel_timing_trigger(450, 303);
|
||||
break;
|
||||
|
||||
case 302:
|
||||
ws_unhide_walker();
|
||||
player_first_walk(-20, 345, 3, 660, 345, 9, false);
|
||||
break;
|
||||
|
||||
case 303:
|
||||
disable_player_commands_and_fade_init(304);
|
||||
break;
|
||||
|
||||
case 304:
|
||||
_G(game).setRoom(403);
|
||||
break;
|
||||
|
||||
case 320:
|
||||
terminateMachineAndNull(_wolfie);
|
||||
_wolfie = series_stream("WOLF STPS DOWN DRPS CLIPPERS", 6, 0xd00, 323);
|
||||
series_stream_break_on_frame(_wolfie, 100, 322);
|
||||
break;
|
||||
|
||||
case 322:
|
||||
ws_walk(_G(my_walker), 414, 336, nullptr, -1, 9);
|
||||
break;
|
||||
|
||||
case 323:
|
||||
hotspot_set_active("WOLF", false);
|
||||
_G(flags)[kWolfLocation] = 402;
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 350:
|
||||
_ripLowReacher = series_load("RIP TREK LOW REACHER POS1");
|
||||
setGlobals1(_ripLowReacher, 1, 7, 7, 7, 0, 7, 1, 1, 1);
|
||||
sendWSMessage_110000(352);
|
||||
break;
|
||||
|
||||
case 352:
|
||||
_plank = series_place_sprite("Plank gone", 0, 0, 0, 100, 0xf00);
|
||||
inv_move_object("PLANK", 408);
|
||||
hotspot_set_active("PLANK", true);
|
||||
sendWSMessage_120000(353);
|
||||
break;
|
||||
|
||||
case 353:
|
||||
sendWSMessage_150000(354);
|
||||
break;
|
||||
|
||||
case 354:
|
||||
series_unload(_ripLowReacher);
|
||||
ws_walk(_G(my_walker), 234, 319, nullptr, 355, 1);
|
||||
_ripLowReacher = series_load("RIP TREK MED REACH HAND POS1");
|
||||
break;
|
||||
|
||||
case 355:
|
||||
setGlobals1(_ripLowReacher, 1, 10, 10, 10, 0, 10, 1, 1, 1);
|
||||
sendWSMessage_110000(356);
|
||||
break;
|
||||
|
||||
case 356:
|
||||
_edger = series_place_sprite("Edger gone", 0, 0, -53, 100, 0xf00);
|
||||
hotspot_set_active("EDGER", true);
|
||||
inv_move_object("EDGER", 408);
|
||||
sendWSMessage_120000(357);
|
||||
break;
|
||||
|
||||
case 357:
|
||||
sendWSMessage_150000(358);
|
||||
break;
|
||||
|
||||
case 358:
|
||||
series_unload(_ripLowReacher);
|
||||
ws_walk(_G(my_walker), -20, 345, nullptr, -1, 9);
|
||||
kernel_timing_trigger(60, 359);
|
||||
break;
|
||||
|
||||
case 359:
|
||||
disable_player_commands_and_fade_init(360);
|
||||
break;
|
||||
|
||||
case 360:
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(402);
|
||||
break;
|
||||
|
||||
case 400:
|
||||
_ripLowReacher = series_load("RIP TREK LOW REACHER POS1");
|
||||
setGlobals1(_ripLowReacher, 1, 7, 7, 7, 0, 7, 1, 1, 1);
|
||||
sendWSMessage_110000(402);
|
||||
break;
|
||||
|
||||
case 402:
|
||||
_plank = series_place_sprite("Plank gone", 0, 0, 0, 100, 0xf00);
|
||||
inv_move_object("PLANK", 408);
|
||||
hotspot_set_active("PLANK", true);
|
||||
sendWSMessage_120000(403);
|
||||
break;
|
||||
|
||||
case 403:
|
||||
sendWSMessage_150000(404);
|
||||
break;
|
||||
|
||||
case 404:
|
||||
case 424:
|
||||
series_unload(_ripLowReacher);
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 420:
|
||||
_ripLowReacher = series_load("RIP TREK MED REACH HAND POS1");
|
||||
setGlobals1(_ripLowReacher, 1, 10, 10, 10, 0, 10, 1, 1, 1);
|
||||
sendWSMessage_110000(422);
|
||||
break;
|
||||
|
||||
case 422:
|
||||
_edger = series_place_sprite("Edger gone", 0, 0, -53, 100, 0xf00);
|
||||
hotspot_set_active("EDGER", true);
|
||||
inv_move_object("EDGER", 408);
|
||||
sendWSMessage_120000(423);
|
||||
break;
|
||||
|
||||
case 423:
|
||||
sendWSMessage_150000(424);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room408::pre_parser() {
|
||||
bool takeFlag = player_said("take");
|
||||
bool lookFlag = player_said_any("look", "look at");
|
||||
bool enterFlag = player_said("enter");
|
||||
|
||||
if (lookFlag && player_said(" "))
|
||||
_G(player).resetWalk();
|
||||
|
||||
if (enterFlag && player_said("GRAVEYARD"))
|
||||
_G(player).resetWalk();
|
||||
|
||||
if (player_said("journal") && !takeFlag && !lookFlag &&
|
||||
_G(kernel).trigger == -1)
|
||||
_G(player).resetWalk();
|
||||
}
|
||||
|
||||
void Room408::parser() {
|
||||
bool lookFlag = player_said_any("look", "look at");
|
||||
bool talkFlag = player_said_any("talk", "talk to");
|
||||
bool takeFlag = player_said("take");
|
||||
bool enterFlag = player_said("enter");
|
||||
bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
|
||||
|
||||
if (player_said("conv408a")) {
|
||||
if (_G(kernel).trigger == 1) {
|
||||
_ripleyShould = 1103;
|
||||
_wolfShould = 2102;
|
||||
conv_resume();
|
||||
} else {
|
||||
conv408a();
|
||||
}
|
||||
} else if (talkFlag && player_said("WOLF")) {
|
||||
player_set_commands_allowed(false);
|
||||
_wolfTrigger = -1;
|
||||
_ripleyMode = 1000;
|
||||
_ripleyShould = 1100;
|
||||
kernel_timing_trigger(1, 102, KT_DAEMON, KT_PARSE);
|
||||
} else if (lookFlag && player_said("WINDOW")) {
|
||||
digi_play("408r03", 1);
|
||||
} else if (lookFlag && player_said("CASTLE")) {
|
||||
digi_play("408r01", 1);
|
||||
} else if (lookFlag && player_said("TOPIARY")) {
|
||||
digi_play("408r02", 1);
|
||||
} else if (lookFlag && player_said("SUNDIAL")) {
|
||||
digi_play(player_been_here(407) ? "408r32" : "408r04", 1);
|
||||
} else if (lookFlag && player_said_any("BUSH", "BUSH ")) {
|
||||
digi_play("408r05", 1);
|
||||
} else if (lookFlag && player_said("PLANK") && inv_object_is_here("PLANK")) {
|
||||
digi_play("408r20", 1);
|
||||
} else if (lookFlag && player_said("EDGER") && inv_object_is_here("EDGER")) {
|
||||
digi_play("408r35", 1);
|
||||
} else if (lookFlag && player_said("WOLF")) {
|
||||
digi_play("408r21", 1);
|
||||
} else if (takeFlag && player_said("TOPIARY")) {
|
||||
digi_play("408r06", 1);
|
||||
} else if (takeFlag && player_said("SUNDIAL")) {
|
||||
digi_play("408r08", 1);
|
||||
} else if (takeFlag && player_said("PLANK") && takePlank()) {
|
||||
// No implementation
|
||||
} else if (takeFlag && player_said("EDGER") && takeEdger()) {
|
||||
// No implementation
|
||||
} else if (player_said("EDGER", "BUSH")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
_ripLowReacher = series_load("RIP TREK MED REACH HAND POS1");
|
||||
setGlobals1(_ripLowReacher, 1, 10, 10, 10, 0, 10, 1, 1, 1);
|
||||
sendWSMessage_110000(1);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
_edger = series_place_sprite("Edger gone", 0, 0, -53, 100, 0xf00);
|
||||
hotspot_set_active("EDGER", true);
|
||||
inv_move_object("EDGER", 408);
|
||||
sendWSMessage_120000(3);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
sendWSMessage_150000(4);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
series_unload(_ripLowReacher);
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (player_said("PLANK", "TOPIARY")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
if (_G(flags)[kWolfLocation] != 408) {
|
||||
player_set_commands_allowed(false);
|
||||
_ripLowReacher = series_load("RIP TREK LOW REACHER POS1");
|
||||
setGlobals1(_ripLowReacher, 1, 7, 7, 7, 0, 7, 1, 1, 1);
|
||||
sendWSMessage_110000(1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
_plank = series_place_sprite("Plank gone", 0, 0, 0, 100, 0xf00);
|
||||
inv_move_object("PLANK", 408);
|
||||
hotspot_set_active("PLANK", true);
|
||||
sendWSMessage_120000(3);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
_G(game).setRoom(403);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (useFlag && player_said("TOPIARY")) {
|
||||
digi_play("408r07", 1);
|
||||
} else if (useFlag && player_said("SUNDIAL")) {
|
||||
digi_play(player_been_here(407) ? "408r34" : "408r09", 1);
|
||||
} else if (useFlag && player_said("WINDOW")) {
|
||||
digi_play("408r10", 1);
|
||||
} else if (player_said("POMERANIAN MARKS", "WOLF") &&
|
||||
inv_player_has("POMERANIAN MARKS")) {
|
||||
digi_play("408w07", 1);
|
||||
} else if (enterFlag && player_said("CASTLE GROUNDS")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
ws_walk(_G(my_walker), -20, 345, nullptr, 1, 9);
|
||||
break;
|
||||
case 1:
|
||||
disable_player_commands_and_fade_init(2);
|
||||
break;
|
||||
case 2:
|
||||
adv_kill_digi_between_rooms(false);
|
||||
digi_play_loop("950_s22", 3, 255, -1, 950);
|
||||
_G(game).setRoom(402);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (enterFlag && player_said("GRAVEYARD")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
ws_walk(_G(my_walker), 660, 345, nullptr, 1, 3);
|
||||
break;
|
||||
case 1:
|
||||
disable_player_commands_and_fade_init(2);
|
||||
break;
|
||||
case 2:
|
||||
_G(game).setRoom(403);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (player_said("journal") && !takeFlag && !lookFlag &&
|
||||
!inv_player_has(_G(player).noun)) {
|
||||
if (_G(flags)[kCastleCartoon]) {
|
||||
digi_play("com016", 1);
|
||||
} else if (_G(kernel).trigger == 6) {
|
||||
_G(flags)[kCastleCartoon] = 1;
|
||||
sketchInJournal("com015");
|
||||
} else {
|
||||
sketchInJournal("com015");
|
||||
}
|
||||
} else if (lookFlag && player_said(" ")) {
|
||||
digi_play("408r01", 1);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
_G(player).command_ready = false;
|
||||
}
|
||||
|
||||
void Room408::conv408a() {
|
||||
int who = conv_whos_talking();
|
||||
_currentNode = conv_current_node();
|
||||
const char *sound = conv_sound_to_play();
|
||||
|
||||
if (sound) {
|
||||
if (who <= 0) {
|
||||
_wolfShould = 2101;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
} else if (who == 1) {
|
||||
_ripleyShould = 1102;
|
||||
digi_play(sound, 1, 255, 1);
|
||||
}
|
||||
} else {
|
||||
conv_resume();
|
||||
}
|
||||
}
|
||||
|
||||
bool Room408::takePlank() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
if (!inv_player_has("PLANK")) {
|
||||
player_set_commands_allowed(false);
|
||||
|
||||
if (_G(flags)[kWolfLocation] == 408) {
|
||||
digi_play("408r29", 1, 255, 5);
|
||||
} else {
|
||||
_ripLowReacher = series_load("RIP TREK LOW REACHER POS1");
|
||||
setGlobals1(_ripLowReacher, 1, 7, 7, 7, 0, 7, 1, 1, 1);
|
||||
sendWSMessage_110000(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
|
||||
case 1:
|
||||
terminateMachineAndNull(_plank);
|
||||
inv_give_to_player("PLANK");
|
||||
hotspot_set_active("PLANK", false);
|
||||
kernel_examine_inventory_object("PING PLANK",
|
||||
_G(master_palette), 5, 1, 362, 225, 2, "408_s02", -1);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
sendWSMessage_120000(3);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
sendWSMessage_150000(4);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
series_unload(_ripLowReacher);
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Room408::takeEdger() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
if (!inv_player_has("EDGER")) {
|
||||
player_set_commands_allowed(false);
|
||||
|
||||
if (_G(flags)[kWolfLocation] == 408) {
|
||||
digi_play("408r30", 1, 255, 5);
|
||||
} else {
|
||||
_ripLowReacher = series_load("RIP TREK MED REACH HAND POS1");
|
||||
setGlobals1(_ripLowReacher, 1, 10, 10, 10, 0, 10, 1, 1, 1);
|
||||
sendWSMessage_110000(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
|
||||
case 1:
|
||||
terminateMachineAndNull(_edger);
|
||||
hotspot_set_active("EDGER", false);
|
||||
inv_give_to_player("EDGER");
|
||||
kernel_examine_inventory_object("PING EDGER", _G(master_palette),
|
||||
5, 1, 190, 215, 2, nullptr, -1);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
sendWSMessage_120000(3);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
sendWSMessage_150000(4);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
series_unload(_ripLowReacher);
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Room408::syncGame(Common::Serializer &s) {
|
||||
s.syncAsSint32LE(_ripleyMode);
|
||||
s.syncAsSint32LE(_ripleyShould);
|
||||
s.syncAsSint32LE(_wolfMode);
|
||||
s.syncAsSint32LE(_wolfShould);
|
||||
s.syncAsSint32LE(_currentNode);
|
||||
s.syncAsSint32LE(_ripExits);
|
||||
s.syncAsSint32LE(_wolf);
|
||||
s.syncAsSint32LE(_val1);
|
||||
s.syncAsSint32LE(_ripleyTrigger);
|
||||
s.syncAsSint32LE(_val3);
|
||||
s.syncAsSint32LE(_wolfTrigger);
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
75
engines/m4/riddle/rooms/section4/room408.h
Normal file
75
engines/m4/riddle/rooms/section4/room408.h
Normal file
@@ -0,0 +1,75 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM408_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM408_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room408 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
int _val3 = 0;
|
||||
int _ripleyTrigger = -1;
|
||||
int _wolfTrigger = -1;
|
||||
int _currentNode = 0;
|
||||
int _ripleyMode = 0;
|
||||
int _ripleyShould = 0;
|
||||
int _wolfMode = 0;
|
||||
int _wolfShould = 0;
|
||||
machine *_exit = nullptr;
|
||||
int _ripExits = 0;
|
||||
machine *_edger = nullptr;
|
||||
machine *_plank = nullptr;
|
||||
int _wolf = 0;
|
||||
machine *_wolfie = nullptr;
|
||||
machine *_wolfWalker = nullptr;
|
||||
int _ripLowReacher = 0;
|
||||
int _ripHandsBehindBack = 0;
|
||||
machine *_ripley = nullptr;
|
||||
machine *_ripleyShadow = nullptr;
|
||||
int _ripShadowSeries = 0;
|
||||
int _ripTrekTwoHandTalk = 0;
|
||||
|
||||
void conv408a();
|
||||
bool takePlank();
|
||||
bool takeEdger();
|
||||
|
||||
public:
|
||||
Room408() : Room() {}
|
||||
~Room408() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
void syncGame(Common::Serializer &s) override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
299
engines/m4/riddle/rooms/section4/room409.cpp
Normal file
299
engines/m4/riddle/rooms/section4/room409.cpp
Normal file
@@ -0,0 +1,299 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room409.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room409::init() {
|
||||
player_set_commands_allowed(false);
|
||||
digi_preload("409r01a");
|
||||
digi_preload("409r01b");
|
||||
digi_preload("409r01c");
|
||||
digi_preload("950_s27");
|
||||
ws_demand_location(_G(my_walker), 239, 295, 3);
|
||||
|
||||
_seriesShadow = series_load("SAFARI SHADOW 3");
|
||||
_seriesDoorOpen = series_load("409 DOOR OPEN");
|
||||
_seriesRope = series_load("409ROPE");
|
||||
_seriesWolfOpensDoor = series_load("409 WOLF OPENS DOOR");
|
||||
_seriesReadTelegram = series_load("RIP TREK READS TELEGRAM POS5");
|
||||
_seriesRp02 = series_load("409RP02");
|
||||
_seriesHeadTurn = series_load("RIP TREK HEAD TURN POS5");
|
||||
_seriesTalker = series_load("RIP TALKER POS 5");
|
||||
_seriesReachHand = series_load("RIP TREK MED REACH HAND POS1");
|
||||
|
||||
_turtleRope = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0, 0,
|
||||
triggerMachineByHashCallback, "TURTLE & rope");
|
||||
sendWSMessage_10000(1, _turtleRope, _seriesRope, 1, 20, 100, _seriesRope, 20, 20, 0);
|
||||
|
||||
_volume = 255;
|
||||
_flag = true;
|
||||
|
||||
digi_play("950_s27", 2, 255, -1, 950);
|
||||
digi_play("409_s04", 3);
|
||||
|
||||
_wolfWalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x300, 0,
|
||||
triggerMachineByHashCallback, "WOLFIE");
|
||||
sendWSMessage_10000(1, _wolfWalker, _seriesWolfOpensDoor, 1, 20, 350,
|
||||
_seriesWolfOpensDoor, 20, 20, 0);
|
||||
}
|
||||
|
||||
void Room409::daemon() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case 100:
|
||||
if (_flag) {
|
||||
sendWSMessage_10000(1, _turtleRope, _seriesRope, 1, 20, 100,
|
||||
_seriesRope, 20, 20, 0);
|
||||
digi_play("950_s27", 3, _volume, -1, 950);
|
||||
}
|
||||
break;
|
||||
|
||||
case 350:
|
||||
kernel_timing_trigger(75, 351);
|
||||
break;
|
||||
|
||||
case 351:
|
||||
sendWSMessage_10000(1, _wolfWalker, _seriesWolfOpensDoor, 21, 38, 352,
|
||||
_seriesWolfOpensDoor, 38, 38, 0);
|
||||
digi_play("409_s01", 1);
|
||||
break;
|
||||
|
||||
case 352:
|
||||
terminateMachineAndNull(_wolfWalker);
|
||||
_doorOpen = series_place_sprite("409 DOOR OPEN", 0, 0, 0, 100, 0x300);
|
||||
kernel_timing_trigger(120, 353);
|
||||
digi_play("409w11a", 1);
|
||||
break;
|
||||
|
||||
case 353:
|
||||
ws_walk(_G(my_walker), 323, 295, nullptr, 354, 3);
|
||||
break;
|
||||
|
||||
case 354:
|
||||
kernel_timing_trigger(180, 355);
|
||||
break;
|
||||
|
||||
case 355:
|
||||
ws_walk(_G(my_walker), 333, 319, nullptr, 356, 5);
|
||||
break;
|
||||
|
||||
case 356:
|
||||
kernel_timing_trigger(60, 357);
|
||||
break;
|
||||
|
||||
case 357:
|
||||
ws_hide_walker();
|
||||
_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
|
||||
triggerMachineByHashCallback, "rip looks at turtle");
|
||||
sendWSMessage_10000(1, _ripley, _seriesRp02, 1, 16, 358,
|
||||
_seriesRp02, 16, 16, 0);
|
||||
break;
|
||||
|
||||
case 358:
|
||||
kernel_timing_trigger(60, 359);
|
||||
break;
|
||||
|
||||
case 359:
|
||||
sendWSMessage_10000(1, _ripley, _seriesRp02, 16, 1, 360, _seriesRp02, 1, 1, 0);
|
||||
break;
|
||||
|
||||
case 360:
|
||||
terminateMachineAndNull(_ripley);
|
||||
ws_unhide_walker();
|
||||
|
||||
player_update_info();
|
||||
_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
|
||||
_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
|
||||
triggerMachineByHashCallback, "rip looks around");
|
||||
ws_hide_walker();
|
||||
sendWSMessage_10000(1, _ripley, _seriesHeadTurn, 1, 6, -1,
|
||||
_seriesHeadTurn, 6, 6, 0);
|
||||
kernel_timing_trigger(150, 361);
|
||||
break;
|
||||
|
||||
case 361:
|
||||
sendWSMessage_10000(1, _ripley, _seriesHeadTurn, 6, 1, -1, _seriesHeadTurn, 1, 1, 0);
|
||||
kernel_timing_trigger(180, 362);
|
||||
kernel_timing_trigger(90, 363);
|
||||
break;
|
||||
|
||||
case 362:
|
||||
_volume = 40;
|
||||
digi_play("409r01c", 1, 255, 366);
|
||||
break;
|
||||
|
||||
case 363:
|
||||
sendWSMessage_10000(1, _ripley, _seriesHeadTurn, 8, 12, -1, _seriesHeadTurn, 12, 12, 0);
|
||||
kernel_timing_trigger(150, 364);
|
||||
break;
|
||||
|
||||
case 364:
|
||||
sendWSMessage_10000(1, _ripley, _seriesHeadTurn, 12, 8, -1, _seriesHeadTurn, 8, 8, 0);
|
||||
kernel_timing_trigger(150, 365);
|
||||
break;
|
||||
|
||||
case 366:
|
||||
sendWSMessage_10000(1, _ripley, _seriesTalker, 1, 4, -1, _seriesTalker, 1, 4, 1);
|
||||
digi_play("409r01a", 1, 255, 367);
|
||||
midi_play("ATONING", 255, true, -1, 949);
|
||||
break;
|
||||
|
||||
case 367:
|
||||
digi_play("409r01b", 1, 255, 368);
|
||||
break;
|
||||
|
||||
case 368:
|
||||
terminateMachineAndNull(_ripley);
|
||||
ws_unhide_walker();
|
||||
ws_walk(_G(my_walker), 379, 330, nullptr, 380, 1);
|
||||
break;
|
||||
|
||||
case 380:
|
||||
setGlobals1(_seriesReachHand, 1, 10, 10, 10, 0, 10, 1, 1, 1);
|
||||
sendWSMessage_110000(381);
|
||||
break;
|
||||
|
||||
case 381:
|
||||
digi_play("950_s07", 2);
|
||||
sendWSMessage_120000(382);
|
||||
inv_give_to_player("TOMB MESSAGE");
|
||||
break;
|
||||
|
||||
case 382:
|
||||
sendWSMessage_150000(384);
|
||||
break;
|
||||
|
||||
case 384:
|
||||
ws_walk(_G(my_walker), 377, 332, nullptr, 385, 5);
|
||||
break;
|
||||
|
||||
case 385:
|
||||
player_update_info();
|
||||
_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
|
||||
_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
|
||||
triggerMachineByHashCallback, "rip looks around");
|
||||
_shadow = series_place_sprite("SAFARI SHADOW 5", 0,
|
||||
_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0xf00);
|
||||
ws_hide_walker();
|
||||
sendWSMessage_10000(1, _ripley, _seriesReadTelegram, 1, 21, 386,
|
||||
_seriesReadTelegram, 22, 31, 0);
|
||||
break;
|
||||
|
||||
case 386:
|
||||
sendWSMessage_1a0000(_ripley, 12);
|
||||
digi_play("409r02d", 1, 255, 387);
|
||||
break;
|
||||
|
||||
case 387:
|
||||
digi_play("409r02a", 1, 255, 388);
|
||||
break;
|
||||
|
||||
case 388:
|
||||
digi_play("409r02b", 1, 255, 389);
|
||||
break;
|
||||
|
||||
case 389:
|
||||
midi_fade_volume(0, 120);
|
||||
kernel_timing_trigger(120, -1);
|
||||
sendWSMessage_10000(1, _ripley, _seriesReadTelegram, 21, 1, 391,
|
||||
_seriesReadTelegram, 1, 1, 0);
|
||||
sendWSMessage_190000(_ripley, 5);
|
||||
break;
|
||||
|
||||
case 391:
|
||||
sendWSMessage_10000(1, _ripley, _seriesHeadTurn, 8, 12, -1,
|
||||
_seriesHeadTurn, 12, 12, 0);
|
||||
digi_play("409r02c", 1, 255, 401);
|
||||
break;
|
||||
|
||||
case 401:
|
||||
sendWSMessage_10000(1, _ripley, _seriesHeadTurn, 12, 8, 402,
|
||||
_seriesHeadTurn, 1, 1, 0);
|
||||
break;
|
||||
|
||||
case 402:
|
||||
terminateMachineAndNull(_ripley);
|
||||
terminateMachineAndNull(_shadow);
|
||||
ws_unhide_walker();
|
||||
ws_walk(_G(my_walker), 379, 330, nullptr, 403, 1);
|
||||
break;
|
||||
|
||||
case 403:
|
||||
setGlobals1(_seriesReachHand, 1, 10, 10, 10, 0, 10, 1, 1, 1);
|
||||
sendWSMessage_110000(405);
|
||||
break;
|
||||
|
||||
case 405:
|
||||
sendWSMessage_120000(-1);
|
||||
digi_play("409_s03", 2);
|
||||
inv_give_to_player("KEY");
|
||||
kernel_examine_inventory_object("PING KEY", _G(master_palette),
|
||||
5, 1, 270, 150, -1, nullptr, -1);
|
||||
digi_play("409r03a", 1, 255, 406);
|
||||
break;
|
||||
|
||||
case 406:
|
||||
kernel_unexamine_inventory_object(_G(master_palette), 5, 1);
|
||||
sendWSMessage_150000(-1);
|
||||
|
||||
if (!_G(flags)[V286] || !_G(flags)[V287] || !_G(flags)[V288])
|
||||
digi_play("409r04a", 1, 255, 407);
|
||||
else
|
||||
digi_play("409r05a", 1, 255, 407);
|
||||
break;
|
||||
|
||||
case 407:
|
||||
ws_walk(_G(my_walker), 333, 319, nullptr, 408, 5);
|
||||
_volume = 255;
|
||||
break;
|
||||
|
||||
case 408:
|
||||
ws_hide_walker();
|
||||
_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
|
||||
triggerMachineByHashCallback, "rip looks at turtle");
|
||||
sendWSMessage_10000(1, _ripley, _seriesRp02, 1, 16, 409, _seriesRp02, 16, 16, 0);
|
||||
break;
|
||||
|
||||
case 409:
|
||||
digi_play("409r06", 1, 255, 410);
|
||||
break;
|
||||
|
||||
case 410:
|
||||
disable_player_commands_and_fade_init(420);
|
||||
break;
|
||||
|
||||
case 420:
|
||||
_G(game).setRoom(401);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
62
engines/m4/riddle/rooms/section4/room409.h
Normal file
62
engines/m4/riddle/rooms/section4/room409.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM409_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM409_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room409 : public Room {
|
||||
private:
|
||||
int _volume = 0;
|
||||
bool _flag = false;
|
||||
machine *_ripley = nullptr;
|
||||
machine *_shadow = nullptr;
|
||||
machine *_turtleRope = nullptr;
|
||||
machine *_wolfWalker = nullptr;
|
||||
machine *_doorOpen = nullptr;
|
||||
int _seriesShadow = 0;
|
||||
int _seriesDoorOpen = 0;
|
||||
int _seriesRope = 0;
|
||||
int _seriesWolfOpensDoor = 0;
|
||||
int _seriesReadTelegram = 0;
|
||||
int _seriesRp02 = 0;
|
||||
int _seriesHeadTurn = 0;
|
||||
int _seriesTalker = 0;
|
||||
int _seriesReachHand = 0;
|
||||
|
||||
public:
|
||||
Room409() : Room() {}
|
||||
~Room409() override {}
|
||||
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
172
engines/m4/riddle/rooms/section4/room410.cpp
Normal file
172
engines/m4/riddle/rooms/section4/room410.cpp
Normal file
@@ -0,0 +1,172 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room410.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room410::preload() {
|
||||
_G(player).walker_type = 0;
|
||||
_G(player).shadow_type = 0;
|
||||
_G(player).walker_in_this_scene = false;
|
||||
}
|
||||
|
||||
void Room410::init() {
|
||||
digi_preload("410r04");
|
||||
digi_preload("410r05");
|
||||
digi_preload("410r01");
|
||||
digi_preload("410t01");
|
||||
digi_preload("410r02");
|
||||
digi_preload("410t02");
|
||||
digi_preload("410r03");
|
||||
digi_preload("410_s02");
|
||||
_val1 = 140;
|
||||
|
||||
midi_play("danzig1", 0, true, -1, 949);
|
||||
interface_hide();
|
||||
_pu = series_stream("410PU01", 8, 0x100, -1);
|
||||
series_stream_break_on_frame(_pu, 2, 100);
|
||||
digi_play("410_s02", 3, 140);
|
||||
}
|
||||
|
||||
void Room410::daemon() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case 20:
|
||||
disable_player_commands_and_fade_init(25);
|
||||
break;
|
||||
|
||||
case 25:
|
||||
case 229:
|
||||
interface_show();
|
||||
_G(game).setRoom(402);
|
||||
break;
|
||||
|
||||
case 100:
|
||||
if (_G(player).been_here_before) {
|
||||
series_stream_break_on_frame(_pu, 56, 300);
|
||||
digi_play("410r05", 1, 255, 103);
|
||||
} else {
|
||||
series_stream_break_on_frame(_pu, 71, 104);
|
||||
digi_play("410r04", 1, 255, 103);
|
||||
}
|
||||
break;
|
||||
|
||||
case 103:
|
||||
midi_play("danzig1", 255, true, -1, 949);
|
||||
break;
|
||||
|
||||
case 104:
|
||||
series_stream_break_on_frame(_pu, 102, 105);
|
||||
series_set_frame_rate(_pu, 5);
|
||||
digi_play("410r01", 1);
|
||||
break;
|
||||
|
||||
case 105:
|
||||
series_stream_break_on_frame(_pu, 116, 110);
|
||||
series_set_frame_rate(_pu, 3000);
|
||||
digi_play("410t01", 1, 255, 106);
|
||||
break;
|
||||
|
||||
case 106:
|
||||
series_set_frame_rate(_pu, 7);
|
||||
ws_OverrideCrunchTime(_pu);
|
||||
break;
|
||||
|
||||
case 110:
|
||||
series_stream_break_on_frame(_pu, 126, 112);
|
||||
digi_play("410r02", 1);
|
||||
break;
|
||||
|
||||
case 112:
|
||||
series_stream_break_on_frame(_pu, 136, 120);
|
||||
digi_play("410t02", 1);
|
||||
break;
|
||||
|
||||
case 120:
|
||||
terminateMachineAndNull(_pu);
|
||||
_pu = series_stream("410PU02", 7, 0x100, -1);
|
||||
series_stream_break_on_frame(_pu, 8, 125);
|
||||
|
||||
// WORKAROUND: Way back up in the stack, the original _pu's anim
|
||||
// is what called daemon. So we need to flag for it to bail out,
|
||||
// so it doesn't try to use freed memory
|
||||
_GWS(keepProcessing) = false;
|
||||
_GWS(bailOut) = true;
|
||||
break;
|
||||
|
||||
case 125:
|
||||
series_stream_break_on_frame(_pu, 19, 127);
|
||||
digi_play("410r03", 1, 255, 225);
|
||||
break;
|
||||
|
||||
case 127:
|
||||
series_set_frame_rate(_pu, 3000);
|
||||
break;
|
||||
|
||||
case 225:
|
||||
kernel_timing_trigger(40, 227);
|
||||
break;
|
||||
|
||||
case 227:
|
||||
disable_player_commands_and_fade_init(229);
|
||||
break;
|
||||
|
||||
case 300:
|
||||
series_set_frame_rate(_pu, 3000);
|
||||
kernel_timing_trigger(1, 305);
|
||||
disable_player_commands_and_fade_init(-1);
|
||||
break;
|
||||
|
||||
case 305:
|
||||
_val1 -= 4;
|
||||
if (_val1 >= 0) {
|
||||
digi_change_panning(3, _val1);
|
||||
kernel_timing_trigger(2, 305);
|
||||
} else {
|
||||
interface_show();
|
||||
_G(game).setRoom(402);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room410::parser() {
|
||||
if (player_said("exit")) {
|
||||
if (_G(kernel).trigger <= 0) {
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(1);
|
||||
} else if (_G(kernel).trigger == 1) {
|
||||
digi_stop(3);
|
||||
_G(game).setRoom(303);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
50
engines/m4/riddle/rooms/section4/room410.h
Normal file
50
engines/m4/riddle/rooms/section4/room410.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM410_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM410_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room410 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
machine *_pu = nullptr;
|
||||
|
||||
public:
|
||||
Room410() : Room() {}
|
||||
~Room410() override {}
|
||||
|
||||
void preload() override;
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
81
engines/m4/riddle/rooms/section4/room413.cpp
Normal file
81
engines/m4/riddle/rooms/section4/room413.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room413.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room413::preload() {
|
||||
_G(player).walker_in_this_scene = false;
|
||||
}
|
||||
|
||||
void Room413::init() {
|
||||
_buttonFlag = false;
|
||||
interface_hide();
|
||||
player_set_commands_allowed(false);
|
||||
kernel_timing_trigger(1, 25);
|
||||
_G(kernel).call_daemon_every_loop = true;
|
||||
}
|
||||
|
||||
void Room413::daemon() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case 25:
|
||||
kernel_timing_trigger(30, 27);
|
||||
break;
|
||||
|
||||
case 27:
|
||||
digi_play(_G(game).previous_room == 301 ? "413r02" : "413r01", 1, 255, 30);
|
||||
break;
|
||||
|
||||
case 30:
|
||||
kernel_timing_trigger(30, 50);
|
||||
break;
|
||||
|
||||
case 50:
|
||||
disable_player_commands_and_fade_init(75);
|
||||
break;
|
||||
|
||||
case 75:
|
||||
interface_show();
|
||||
restoreAutosave();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (_G(MouseState).ButtonState) {
|
||||
if (!_buttonFlag) {
|
||||
_G(MouseState).Event = 0;
|
||||
_G(kernel).call_daemon_every_loop = false;
|
||||
kernel_timing_trigger(1, 50);
|
||||
}
|
||||
|
||||
_buttonFlag = true;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
48
engines/m4/riddle/rooms/section4/room413.h
Normal file
48
engines/m4/riddle/rooms/section4/room413.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM413_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM413_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room413 : public Room {
|
||||
private:
|
||||
bool _buttonFlag = false;
|
||||
|
||||
public:
|
||||
Room413() : Room() {}
|
||||
~Room413() override {}
|
||||
|
||||
void preload() override;
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
330
engines/m4/riddle/rooms/section4/room456.cpp
Normal file
330
engines/m4/riddle/rooms/section4/room456.cpp
Normal file
@@ -0,0 +1,330 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room456.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room456::preload() {
|
||||
LoadWSAssets("OTHER SCRIPT", _G(master_palette));
|
||||
_G(player).walker_in_this_scene = false;
|
||||
}
|
||||
|
||||
void Room456::init() {
|
||||
_G(player).disable_hyperwalk = true;
|
||||
_trigger = 577;
|
||||
_G(player).walker_in_this_scene = false;
|
||||
|
||||
_seriesLighterChain = series_load("456 Lighter chain");
|
||||
_seriesGrateOpens = series_load("456 GRATE OPENS");
|
||||
_seriesCigarBoxTop = series_load("456 CIGAR BOX TOP");
|
||||
|
||||
_lighter = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xe00, false,
|
||||
triggerMachineByHashCallback456, "Lighter");
|
||||
_vent = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xe00, false,
|
||||
triggerMachineByHashCallback456, "Vent");
|
||||
_lid = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xe00, false,
|
||||
triggerMachineByHashCallback456, "Cigar box lid");
|
||||
|
||||
if (_G(flags)[V335]) {
|
||||
sendWSMessage_10000(1, _vent, _seriesGrateOpens, 15, 15, -1,
|
||||
_seriesGrateOpens, 15, 15, 0);
|
||||
hotspot_set_active("VENT", false);
|
||||
} else {
|
||||
sendWSMessage_10000(1, _vent, _seriesGrateOpens, 1, 1, -1,
|
||||
_seriesGrateOpens, 1, 1, 0);
|
||||
hotspot_set_active("VENT ", false);
|
||||
hotspot_set_active("HOLE", false);
|
||||
hotspot_set_active("HOLE ", false);
|
||||
}
|
||||
|
||||
if (_G(flags)[V336]) {
|
||||
sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 14, 14, -1,
|
||||
_seriesCigarBoxTop, 14, 14, 0);
|
||||
hotspot_set_active("LID", false);
|
||||
} else {
|
||||
sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 1, 1, -1,
|
||||
_seriesCigarBoxTop, 1, 1, 0);
|
||||
hotspot_set_active("LID ", false);
|
||||
hotspot_set_active("CIGAR ", false);
|
||||
}
|
||||
|
||||
sendWSMessage_10000(1, _lighter, _seriesLighterChain, 1, 1, -1,
|
||||
_seriesLighterChain, 1, 1, 0);
|
||||
|
||||
if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
|
||||
player_set_commands_allowed(true);
|
||||
digi_preload("456_s03a");
|
||||
digi_preload("456_s03");
|
||||
digi_preload("456_s01");
|
||||
|
||||
if (_G(flags)[kBilliardsFan]) {
|
||||
digi_play("456_s03a", 3);
|
||||
kernel_timing_trigger(_trigger, 700);
|
||||
}
|
||||
} else if (_G(flags)[kBilliardsFan]) {
|
||||
digi_play("456_s03a", 3);
|
||||
kernel_timing_trigger(_trigger, 700);
|
||||
} else {
|
||||
digi_preload("456_s03a");
|
||||
digi_preload("456_s03");
|
||||
digi_preload("456_s01");
|
||||
}
|
||||
}
|
||||
|
||||
void Room456::daemon() {
|
||||
if (_G(kernel).trigger == 700 && _G(flags)[kBilliardsFan]) {
|
||||
digi_play_loop("456_s03a", 3);
|
||||
}
|
||||
}
|
||||
|
||||
void Room456::pre_parser() {
|
||||
_G(player).resetWalk();
|
||||
}
|
||||
|
||||
void Room456::parser() {
|
||||
const bool lookFlag = player_said_any("look", "look at");
|
||||
const bool takeFlag = player_said("take");
|
||||
const bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
|
||||
|
||||
if (lookFlag && player_said_any("RED BUTTON", "BLACK BUTTON", "FAN SWITCH")) {
|
||||
digi_play("456r09", 1);
|
||||
} else if (lookFlag && player_said_any("RED BUTTON ", "BLACK BUTTON ")) {
|
||||
digi_play("456r03", 1);
|
||||
} else if (lookFlag && player_said("ASHTRAY")) {
|
||||
digi_play("456r11", 1);
|
||||
} else if (lookFlag && player_said("SWITCH")) {
|
||||
digi_play("456r26", 1);
|
||||
} else if (lookFlag && player_said("HOLE ")) {
|
||||
digi_play("456r27", 1);
|
||||
} else if (lookFlag && player_said("HOLE")) {
|
||||
digi_play("456r28", 1);
|
||||
} else if (lookFlag && player_said("ACE OF SPADES")) {
|
||||
digi_play("456r26", 1);
|
||||
} else if (lookFlag && player_said("LIGHTER")) {
|
||||
digi_play("456r06", 1);
|
||||
} else if (lookFlag && player_said("CIGAR ")) {
|
||||
digi_play("com098", 1, 255, -1, 997);
|
||||
} else if (lookFlag && player_said_any("VENT", "VENT ")) {
|
||||
digi_play("456r10", 1);
|
||||
} else if (lookFlag && player_said_any("CIGAR BOX", "LID", "LID ")) {
|
||||
digi_play("456r04", 1);
|
||||
} else if (lookFlag && player_said("PICTURE")) {
|
||||
digi_play("456r16", 1);
|
||||
} else if (lookFlag && player_said("CHAIN")) {
|
||||
digi_play("456r07", 1);
|
||||
} else if (lookFlag && player_said(" ")) {
|
||||
digi_play("456r17", 1);
|
||||
} else if (useFlag && player_said("LID")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 1, 14, 2,
|
||||
_seriesCigarBoxTop, 14, 14, 0);
|
||||
hotspot_set_active("LID", false);
|
||||
_G(flags)[V336] = 1;
|
||||
hotspot_set_active("LID ", true);
|
||||
hotspot_set_active("CIGAR ", true);
|
||||
digi_play("456_s05", 2);
|
||||
break;
|
||||
case 2:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (useFlag && player_said("LID ")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 14, 1, 2,
|
||||
_seriesCigarBoxTop, 1, 1, 0);
|
||||
hotspot_set_active("LID", true);
|
||||
_G(flags)[V336] = 0;
|
||||
hotspot_set_active("LID ", false);
|
||||
hotspot_set_active("CIGAR ", false);
|
||||
digi_play("456_s05", 2);
|
||||
break;
|
||||
case 2:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (useFlag && player_said("VENT")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
sendWSMessage_10000(1, _vent, _seriesGrateOpens, 1, 15, 2,
|
||||
_seriesGrateOpens, 15, 15, 0);
|
||||
hotspot_set_active("VENT", false);
|
||||
_G(flags)[V335] = 1;
|
||||
hotspot_set_active("VENT ", true);
|
||||
hotspot_set_active("HOLE", true);
|
||||
hotspot_set_active("HOLE ", true);
|
||||
|
||||
digi_play("950_s36", 2, 255, -1, 950);
|
||||
break;
|
||||
case 2:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (useFlag && player_said("VENT ")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
sendWSMessage_10000(1, _vent, _seriesGrateOpens, 15, 1, 2,
|
||||
_seriesGrateOpens, 1, 1, 0);
|
||||
hotspot_set_active("VENT", true);
|
||||
_G(flags)[V335] = 0;
|
||||
hotspot_set_active("VENT ", false);
|
||||
hotspot_set_active("HOLE", false);
|
||||
hotspot_set_active("HOLE ", false);
|
||||
|
||||
digi_play("950_s36", 2, 255, -1, 950);
|
||||
break;
|
||||
case 2:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (useFlag && player_said("RED BUTTON")) {
|
||||
if (_G(flags)[kBilliardsFan]) {
|
||||
digi_play("456_s01", 2);
|
||||
} else {
|
||||
_G(flags)[kBilliardsFan] = 1;
|
||||
_G(kernel).trigger_mode = KT_DAEMON;
|
||||
digi_play("456_s03", 3, 255, 700);
|
||||
_G(kernel).trigger_mode = KT_PARSE;
|
||||
}
|
||||
} else if (useFlag && player_said("BLACK BUTTON")) {
|
||||
if (_G(flags)[kBilliardsFan]) {
|
||||
digi_stop(3);
|
||||
digi_play("456_s04", 3);
|
||||
_G(flags)[kBilliardsFan] = 0;
|
||||
} else {
|
||||
digi_play("456_s01", 3);
|
||||
}
|
||||
} else if (useFlag && player_said("CHAIN")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
sendWSMessage_10000(1, _lighter, _seriesLighterChain, 1, 4, 2,
|
||||
_seriesLighterChain, 4, 4, 0);
|
||||
digi_play("456_s02", 2);
|
||||
break;
|
||||
case 2:
|
||||
sendWSMessage_10000(1, _lighter, _seriesLighterChain, 4, 1, 3,
|
||||
_seriesLighterChain, 1, 1, 0);
|
||||
break;
|
||||
case 3:
|
||||
digi_play("456r08", 1, 255, 4);
|
||||
break;
|
||||
case 4:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (takeFlag && player_said("CIGAR ")) {
|
||||
if (_G(flags)[V315]) {
|
||||
digi_play("456r05", 1);
|
||||
} else {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
kernel_examine_inventory_object("PING CIGAR", _G(master_palette),
|
||||
5, 1, 210, 210, 2, nullptr, -1);
|
||||
break;
|
||||
case 2:
|
||||
inv_give_to_player("CIGAR");
|
||||
_G(flags)[V315] = 1;
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (takeFlag && player_said("ASHTRAY")) {
|
||||
digi_play("456r12", 1);
|
||||
} else if (takeFlag && player_said("LIGHTER")) {
|
||||
digi_play("456r14", 1);
|
||||
} else if (takeFlag && player_said("CIGAR BOX")) {
|
||||
digi_play("456r15", 1);
|
||||
} else if (useFlag && player_said("RED BUTTON ")) {
|
||||
digi_play("456_s01", 2);
|
||||
} else if (useFlag && player_said("BLACK BUTTON ")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
digi_play("456_s01", 2);
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(2);
|
||||
break;
|
||||
case 2:
|
||||
_G(game).setRoom(406);
|
||||
|
||||
if (_G(flags)[kBilliardsFan]) {
|
||||
adv_kill_digi_between_rooms(false);
|
||||
digi_play_loop("456_s03a", 3);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (player_said("BILLIARD BALL", "HOLE")) {
|
||||
digi_play("456r13", 1);
|
||||
} else if (player_said("BILLIARD BALL", "HOLE ")) {
|
||||
switch (_G(kernel).trigger) {
|
||||
case -1:
|
||||
player_set_commands_allowed(false);
|
||||
_G(flags)[kBilliardBallInCabinet] = 1;
|
||||
_G(flags)[kBilliardsTableState] = 1;
|
||||
inv_move_object("BILLIARD BALL", 456);
|
||||
digi_play("456_s06", 1, 255, 1);
|
||||
break;
|
||||
case 1:
|
||||
digi_play("456_s07", 1, 255, 2);
|
||||
break;
|
||||
case 2:
|
||||
player_set_commands_allowed(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
_G(player).command_ready = false;
|
||||
}
|
||||
|
||||
void Room456::triggerMachineByHashCallback456(frac16 myMessage, machine *) {
|
||||
kernel_trigger_dispatchx(myMessage);
|
||||
}
|
||||
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
58
engines/m4/riddle/rooms/section4/room456.h
Normal file
58
engines/m4/riddle/rooms/section4/room456.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM456_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM456_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room456 : public Room {
|
||||
private:
|
||||
machine *_lighter = nullptr;
|
||||
machine *_lid = nullptr;
|
||||
machine *_vent = nullptr;
|
||||
int _seriesLighterChain = 0;
|
||||
int _seriesGrateOpens = 0;
|
||||
int _seriesCigarBoxTop = 0;
|
||||
int _trigger = 0;
|
||||
|
||||
static void triggerMachineByHashCallback456(frac16 myMessage, machine *);
|
||||
|
||||
public:
|
||||
Room456() : Room() {}
|
||||
~Room456() override {}
|
||||
|
||||
void preload() override;
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
void parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
212
engines/m4/riddle/rooms/section4/room493.cpp
Normal file
212
engines/m4/riddle/rooms/section4/room493.cpp
Normal file
@@ -0,0 +1,212 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room493.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/gui/gui_sys.h"
|
||||
#include "m4/platform/keys.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room493::preload() {
|
||||
_G(player).walker_type = 1;
|
||||
_G(player).shadow_type = 1;
|
||||
_G(player).walker_in_this_scene = false;
|
||||
}
|
||||
|
||||
void Room493::init() {
|
||||
interface_hide();
|
||||
player_set_commands_allowed(false);
|
||||
AddSystemHotkey(KEY_ESCAPE, escape_key_pressed);
|
||||
RemoveSystemHotkey(303);
|
||||
RemoveSystemHotkey(22);
|
||||
|
||||
_panning = 255;
|
||||
|
||||
if (_G(game).previous_room != 494) {
|
||||
digi_preload("lostcity", 917);
|
||||
|
||||
if (_G(game).previous_room != 917) {
|
||||
digi_preload("riptheme", 917);
|
||||
digi_play("riptheme", 3, 255, -1, 917);
|
||||
}
|
||||
}
|
||||
|
||||
_credits = series_stream("game credits", 10, 256, 900);
|
||||
series_stream_break_on_frame(_credits, 10, 30);
|
||||
kernel_timing_trigger(360, 700);
|
||||
}
|
||||
|
||||
void Room493::daemon() {
|
||||
static int32 FRAMES[13] = {
|
||||
4, 12, 24, 36, 48, 60, 68, 76, 88, 96, 108, 116, 128
|
||||
};
|
||||
|
||||
switch (_G(kernel).trigger) {
|
||||
case 30:
|
||||
series_stream_break_on_frame(_credits, FRAMES[2], 50);
|
||||
setTrigger(40);
|
||||
break;
|
||||
|
||||
case 50:
|
||||
series_stream_break_on_frame(_credits, FRAMES[3], 70);
|
||||
setTrigger(60);
|
||||
break;
|
||||
|
||||
case 70:
|
||||
series_stream_break_on_frame(_credits, FRAMES[4] - 2, 90);
|
||||
setTrigger(80);
|
||||
break;
|
||||
|
||||
case 90:
|
||||
series_stream_break_on_frame(_credits, FRAMES[5] - 2, 110);
|
||||
setTrigger(100);
|
||||
break;
|
||||
|
||||
case 110:
|
||||
series_stream_break_on_frame(_credits, FRAMES[6] - 2, 130);
|
||||
setTrigger(120);
|
||||
break;
|
||||
|
||||
case 130:
|
||||
series_stream_break_on_frame(_credits, FRAMES[7] - 2, 150);
|
||||
setTrigger(140);
|
||||
break;
|
||||
|
||||
case 150:
|
||||
series_stream_break_on_frame(_credits, FRAMES[8] - 2, 170);
|
||||
setTrigger(160);
|
||||
break;
|
||||
|
||||
case 170:
|
||||
series_stream_break_on_frame(_credits, FRAMES[9] - 2, 190);
|
||||
setTrigger(180);
|
||||
break;
|
||||
|
||||
case 190:
|
||||
series_stream_break_on_frame(_credits, FRAMES[10] - 2, 210);
|
||||
setTrigger(200);
|
||||
break;
|
||||
|
||||
case 210:
|
||||
series_stream_break_on_frame(_credits, FRAMES[11] - 2, 230);
|
||||
setTrigger(220);
|
||||
break;
|
||||
|
||||
case 230:
|
||||
series_stream_break_on_frame(_credits, FRAMES[12] - 2, 250);
|
||||
setTrigger(240);
|
||||
break;
|
||||
|
||||
case 250:
|
||||
setTrigger(260);
|
||||
break;
|
||||
|
||||
case 666:
|
||||
AddSystemHotkey(303, Hotkeys::show_version);
|
||||
AddSystemHotkey(22, Hotkeys::show_version);
|
||||
_G(game).setRoom(494);
|
||||
break;
|
||||
|
||||
case 700:
|
||||
if (checkStrings()) {
|
||||
digi_stop(3);
|
||||
kernel_timing_trigger(10, 800);
|
||||
} else {
|
||||
kernel_timing_trigger(65, 700);
|
||||
}
|
||||
break;
|
||||
|
||||
case 800:
|
||||
digi_play("lostcity", 3, 255, 810, 917);
|
||||
break;
|
||||
|
||||
case 810:
|
||||
digi_play_loop("riptheme", 3, 255, -1, 917);
|
||||
break;
|
||||
|
||||
case 900:
|
||||
if (_G(game).previous_room == 494)
|
||||
disable_player_commands_and_fade_init(920);
|
||||
else
|
||||
disable_player_commands_and_fade_init(910);
|
||||
break;
|
||||
|
||||
case 910:
|
||||
_panning -= 4;
|
||||
if (_panning > 0) {
|
||||
digi_change_panning(3, _panning);
|
||||
kernel_timing_trigger(2, 910);
|
||||
} else {
|
||||
AddSystemHotkey(303, Hotkeys::show_version);
|
||||
AddSystemHotkey(22, Hotkeys::show_version);
|
||||
_G(game).setRoom(494);
|
||||
}
|
||||
break;
|
||||
|
||||
case 920:
|
||||
adv_kill_digi_between_rooms(false);
|
||||
AddSystemHotkey(303, Hotkeys::show_version);
|
||||
AddSystemHotkey(22, Hotkeys::show_version);
|
||||
_G(game).setRoom(494);
|
||||
break;
|
||||
|
||||
case 40:
|
||||
case 60:
|
||||
case 80:
|
||||
case 100:
|
||||
case 120:
|
||||
case 140:
|
||||
case 160:
|
||||
case 180:
|
||||
case 200:
|
||||
case 220:
|
||||
case 240:
|
||||
case 260:
|
||||
crunch();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room493::escape_key_pressed(void *, void *) {
|
||||
_G(kernel).trigger_mode = KT_DAEMON;
|
||||
disable_player_commands_and_fade_init(910);
|
||||
}
|
||||
|
||||
void Room493::setTrigger(int16 trigger) {
|
||||
series_set_frame_rate(_credits, 30000);
|
||||
kernel_timing_trigger(900, trigger);
|
||||
}
|
||||
|
||||
void Room493::crunch() {
|
||||
series_set_frame_rate(_credits, 10);
|
||||
ws_OverrideCrunchTime(_credits);
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
53
engines/m4/riddle/rooms/section4/room493.h
Normal file
53
engines/m4/riddle/rooms/section4/room493.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM493_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM493_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room493 : public Room {
|
||||
private:
|
||||
machine *_credits = nullptr;
|
||||
int _panning = 0;
|
||||
|
||||
static void escape_key_pressed(void *, void *);
|
||||
void setTrigger(int16 trigger);
|
||||
void crunch();
|
||||
|
||||
public:
|
||||
Room493() : Room() {}
|
||||
~Room493() override {}
|
||||
|
||||
void preload() override;
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
266
engines/m4/riddle/rooms/section4/room494.cpp
Normal file
266
engines/m4/riddle/rooms/section4/room494.cpp
Normal file
@@ -0,0 +1,266 @@
|
||||
/* 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 "m4/graphics/gr_series.h"
|
||||
#include "m4/gui/gui_sys.h"
|
||||
#include "m4/platform/keys.h"
|
||||
#include "m4/riddle/rooms/section4/room494.h"
|
||||
|
||||
#include "m4/riddle/inventory.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
#include "m4/riddle/walker.h"
|
||||
#include "m4/riddle/riddle.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room494::preload() {
|
||||
_G(kernel).letter_box_y = LETTERBOX_Y;
|
||||
_G(player).walker_type = WALKER_ALT;
|
||||
_G(player).shadow_type = SHADOW_ALT;
|
||||
_G(player).walker_in_this_scene = false;
|
||||
}
|
||||
|
||||
void Room494::init() {
|
||||
midi_stop();
|
||||
mouse_show();
|
||||
|
||||
_hotkeyEscape = GetSystemHotkey(KEY_ESCAPE);
|
||||
_hotkeySave = GetSystemHotkey(KEY_F2);
|
||||
_hotkeyLoad = GetSystemHotkey(KEY_F3);
|
||||
|
||||
RemoveSystemHotkey(KEY_F2);
|
||||
AddSystemHotkey(KEY_ESCAPE, escapeFn);
|
||||
AddSystemHotkey(KEY_F3, loadFn);
|
||||
_machine1 = _machine2 = nullptr;
|
||||
_selectedBtn1 = _selectedBtn2 = -1;
|
||||
midi_stop();
|
||||
|
||||
digi_preload("gallery", 950);
|
||||
digi_play_loop("gallery", 1, 255, -1, 950);
|
||||
interface_hide();
|
||||
_G(kernel).call_daemon_every_loop = true;
|
||||
|
||||
_menuButtons = series_load("494 MENU BUTTONS");
|
||||
_buttons[0] = series_show_sprite("494 MENU BUTTONS", 0, 0xf00);
|
||||
_buttons[1] = series_show_sprite("494 MENU BUTTONS", 3, 0xf00);
|
||||
_buttons[2] = series_show_sprite("494 MENU BUTTONS", 6, 0xf00);
|
||||
_buttons[3] = series_show_sprite("494 MENU BUTTONS", 9, 0xf00);
|
||||
_buttons[4] = series_show_sprite("494 MENU BUTTONS", 12, 0xf00);
|
||||
_buttons[5] = series_show_sprite("494 MENU BUTTONS", 15, 0xf00);
|
||||
}
|
||||
|
||||
void Room494::daemon() {
|
||||
const int selectedBtn = getSelectedButton();
|
||||
bool btnClicked = false;
|
||||
|
||||
switch (_G(kernel).trigger) {
|
||||
case 111:
|
||||
if (g_engine->autosaveExists()) {
|
||||
restoreHotkeys();
|
||||
restoreAutosave();
|
||||
|
||||
} else {
|
||||
_G(flags)[V001] = 1;
|
||||
digi_stop(1);
|
||||
_G(game).setRoom(901);
|
||||
}
|
||||
break;
|
||||
|
||||
case 304:
|
||||
restoreHotkeys();
|
||||
setupInventory();
|
||||
|
||||
_G(flags)[V001] = 1;
|
||||
interface_show();
|
||||
digi_stop(1);
|
||||
_G(game).setRoom(304);
|
||||
break;
|
||||
|
||||
case 493:
|
||||
restoreHotkeys();
|
||||
adv_kill_digi_between_rooms(false);
|
||||
_G(game).setRoom(493);
|
||||
break;
|
||||
|
||||
case 666:
|
||||
_G(kernel).going = false;
|
||||
break;
|
||||
|
||||
case 901:
|
||||
restoreHotkeys();
|
||||
setupInventory();
|
||||
|
||||
_G(flags)[V001] = 1;
|
||||
digi_stop(1);
|
||||
_G(game).setRoom(901);
|
||||
break;
|
||||
|
||||
case 999:
|
||||
interface_hide();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (_G(MouseState).ButtonState) {
|
||||
if (_selectState) {
|
||||
if (selectedBtn == _selectedBtn2 && _machine2) {
|
||||
terminateMachineAndNull(_machine2);
|
||||
_selectedBtn2 = -1;
|
||||
digi_play("950_s51", 2);
|
||||
}
|
||||
|
||||
if (!_machine2) {
|
||||
_machine2 = series_show_sprite("494 menu buttons",
|
||||
selectedBtn * 3 + 2, 0x100);
|
||||
_selectedBtn2 = selectedBtn;
|
||||
digi_play("950_s51", 2);
|
||||
}
|
||||
} else {
|
||||
if (_machine1) {
|
||||
terminateMachineAndNull(_machine1);
|
||||
_selectedBtn1 = -1;
|
||||
}
|
||||
|
||||
if (selectedBtn != -1) {
|
||||
_machine2 = series_show_sprite("494 menu buttons",
|
||||
selectedBtn * 3 + 2, 0x100);
|
||||
_selectedBtn2 = selectedBtn;
|
||||
digi_play("950_s51", 2);
|
||||
}
|
||||
}
|
||||
|
||||
_selectState = true;
|
||||
|
||||
} else if (_selectState) {
|
||||
if (_machine2) {
|
||||
terminateMachineAndNull(_machine2);
|
||||
_selectedBtn2 = -1;
|
||||
}
|
||||
|
||||
_selectState = false;
|
||||
btnClicked = true;
|
||||
}
|
||||
|
||||
if (selectedBtn != -1) {
|
||||
if (_selectedBtn1 != -1 && selectedBtn != _selectedBtn1) {
|
||||
terminateMachineAndNull(_machine1);
|
||||
_selectedBtn1 = -1;
|
||||
}
|
||||
|
||||
if (_selectedBtn1 == -1 && !_machine2) {
|
||||
_selectedBtn1 = selectedBtn;
|
||||
_machine1 = series_show_sprite("494 menu buttons",
|
||||
selectedBtn * 3 + 1, 0x100);
|
||||
}
|
||||
} else {
|
||||
if (selectedBtn != _selectedBtn1) {
|
||||
terminateMachineAndNull(_machine1);
|
||||
_selectedBtn1 = selectedBtn;
|
||||
}
|
||||
}
|
||||
|
||||
if (btnClicked) {
|
||||
switch (selectedBtn) {
|
||||
case 0:
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(901);
|
||||
break;
|
||||
case 1:
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(304);
|
||||
break;
|
||||
case 2:
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(111);
|
||||
break;
|
||||
case 3:
|
||||
loadFn(nullptr, nullptr);
|
||||
break;
|
||||
case 4:
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(493);
|
||||
break;
|
||||
case 5:
|
||||
player_set_commands_allowed(false);
|
||||
disable_player_commands_and_fade_init(666);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Room494::pre_parser() {
|
||||
_G(player).need_to_walk = false;
|
||||
_G(player).ready_to_walk = true;
|
||||
_G(player).waiting_for_walk = false;
|
||||
}
|
||||
|
||||
void Room494::escapeFn(void *, void *) {
|
||||
//TODO room 494 escapeFn
|
||||
warning("TODO: room 494 escapeFn");
|
||||
}
|
||||
|
||||
void Room494::loadFn(void *, void *) {
|
||||
g_engine->showLoadScreen(M4Engine::kLoadFromGameDialog);
|
||||
}
|
||||
|
||||
int Room494::getSelectedButton() const {
|
||||
static const Common::Rect BUTTONS[6] = {
|
||||
{ 91, 323, 150, 370 },
|
||||
{ 174, 323, 226, 370 },
|
||||
{ 247, 323, 312, 370 },
|
||||
{ 333, 323, 388, 370 },
|
||||
{ 423, 323, 458, 370 },
|
||||
{ 494, 323, 547, 370 }
|
||||
};
|
||||
|
||||
const int x = _G(MouseState).CursorColumn;
|
||||
const int y = _G(MouseState).CursorRow;
|
||||
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
if (BUTTONS[i].contains(x, y))
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void Room494::restoreHotkeys() {
|
||||
AddSystemHotkey(KEY_ESCAPE, _hotkeyEscape);
|
||||
AddSystemHotkey(KEY_F2, _hotkeySave);
|
||||
AddSystemHotkey(KEY_F3, _hotkeyLoad);
|
||||
}
|
||||
|
||||
void Room494::setupInventory() {
|
||||
_G(flags).reset();
|
||||
static_cast<Inventory *>(_G(inventory))->reset();
|
||||
conv_reset_all();
|
||||
player_reset_been();
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
65
engines/m4/riddle/rooms/section4/room494.h
Normal file
65
engines/m4/riddle/rooms/section4/room494.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM494_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM494_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room494 : public Room {
|
||||
private:
|
||||
static void escapeFn(void *, void *);
|
||||
static void loadFn(void *, void *);
|
||||
int getSelectedButton() const;
|
||||
void restoreHotkeys();
|
||||
void setupInventory();
|
||||
|
||||
private:
|
||||
int _menuButtons = 0;
|
||||
int _selectedBtn2 = -1;
|
||||
int _selectedBtn1 = -1;
|
||||
machine *_machine1 = nullptr;
|
||||
machine *_machine2 = nullptr;
|
||||
machine *_buttons[6] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
|
||||
HotkeyCB _hotkeyEscape = nullptr;
|
||||
HotkeyCB _hotkeySave = nullptr;
|
||||
HotkeyCB _hotkeyLoad = nullptr;
|
||||
bool _selectState = false;
|
||||
|
||||
public:
|
||||
Room494() : Room() {}
|
||||
~Room494() override {}
|
||||
|
||||
void preload() override;
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
286
engines/m4/riddle/rooms/section4/room495.cpp
Normal file
286
engines/m4/riddle/rooms/section4/room495.cpp
Normal file
@@ -0,0 +1,286 @@
|
||||
/* 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 "m4/riddle/rooms/section4/room495.h"
|
||||
#include "m4/graphics/gr_series.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
void Room495::preload() {
|
||||
_G(player).walker_in_this_scene = false;
|
||||
}
|
||||
|
||||
void Room495::init() {
|
||||
updateFlags1();
|
||||
updateFlags2();
|
||||
interface_hide();
|
||||
player_set_commands_allowed(false);
|
||||
digi_preload("950_s46");
|
||||
|
||||
_G(player).disable_hyperwalk = true;
|
||||
_G(player).walker_in_this_scene = false;
|
||||
_val1 = 255;
|
||||
|
||||
series_show("495 peiping", 0xf00);
|
||||
series_show("495 new york", 0xf00);
|
||||
|
||||
if (_G(flags)[V056])
|
||||
series_show("495 danzig", 0xf00);
|
||||
if (_G(flags)[V110]) {
|
||||
series_show("495 sikkim", 0xf00);
|
||||
series_show("495 lima", 0xf00);
|
||||
}
|
||||
|
||||
if (player_been_here(501))
|
||||
series_show("495 easter island", 0xf00);
|
||||
digi_play("950_s46", 3);
|
||||
|
||||
switch (_G(game).previous_room) {
|
||||
case 201:
|
||||
_G(flags)[V092] = 1;
|
||||
|
||||
switch (_G(flags)[kTravelDest]) {
|
||||
case 1:
|
||||
play("495 peiping to ny", "495pg03s", 93, 3);
|
||||
break;
|
||||
case 2:
|
||||
play("495 peiping to danzig", "495pg02s", 38, 7);
|
||||
break;
|
||||
case 3:
|
||||
play("495 peiping to sikkim", "495pg01s", 17, 14);
|
||||
break;
|
||||
case 4:
|
||||
play("495 peiping to lima", "495pg04s", 11, 3);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 301:
|
||||
switch (_G(flags)[kTravelDest]) {
|
||||
case 0:
|
||||
play("495 ny to peiping", "495ny03s", 108, 3);
|
||||
break;
|
||||
case 2:
|
||||
play("495 ny to danzig", "495ny02s", 47, 4);
|
||||
break;
|
||||
case 3:
|
||||
play("495 ny to sikkim", "495ny04s", 96, 3);
|
||||
break;
|
||||
case 4:
|
||||
play("495 ny to lima", "495ny01s", 28, 5);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 401:
|
||||
switch (_G(flags)[kTravelDest]) {
|
||||
case 0:
|
||||
play("495 danzig to peiping", "495dg04s", 51, 4);
|
||||
break;
|
||||
case 1:
|
||||
play("495 danzig to ny", "495dg02s", 43, 4);
|
||||
break;
|
||||
case 3:
|
||||
play("495 danzig to sikkim", "495dg03s", 38, 4);
|
||||
break;
|
||||
case 4:
|
||||
play("495 danzig to lima", "495dg01s", 65, 4);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 501:
|
||||
switch (_G(flags)[kTravelDest]) {
|
||||
case 0:
|
||||
play("495 lima to peiping", "495lm05s", 115, 3);
|
||||
break;
|
||||
case 1:
|
||||
play("495 lima to ny", "495lm02s", 18, 10);
|
||||
break;
|
||||
case 2:
|
||||
play("495 lima to danzig", "495lm03s", 70, 4);
|
||||
break;
|
||||
case 3:
|
||||
play("495 lima to sikkim", "495lm04s", 100, 3);
|
||||
break;
|
||||
case 5:
|
||||
play("495 lima to easter isle", "495lm01s", 16, 12);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 603:
|
||||
case 615:
|
||||
if (_G(flags)[kTravelDest] == 4)
|
||||
play("495 easter isle to lima", "495eis", 16, 12);
|
||||
break;
|
||||
|
||||
case 701:
|
||||
switch (_G(flags)[kTravelDest]) {
|
||||
case 0:
|
||||
play("495 sikkim to peiping", "495sm02s", 17, 10);
|
||||
break;
|
||||
case 1:
|
||||
play("495 sikkim to ny", "495sm04s", 93, 3);
|
||||
break;
|
||||
case 2:
|
||||
play("495 sikkim to danzig", "495sm03s", 38, 5);
|
||||
break;
|
||||
case 4:
|
||||
play("495 sikkim to lima", "495sm01s", 100, 3);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room495::daemon() {
|
||||
switch (_G(kernel).trigger) {
|
||||
case 500:
|
||||
kernel_timing_trigger(1, 502);
|
||||
disable_player_commands_and_fade_init(-1);
|
||||
|
||||
series_play(_seriesName1, 0, 16, -1, 5, 0, 100, 0, 0,
|
||||
_lastFrame + 1, -1);
|
||||
series_play(_seriesName2, 0xf00, 16, -1, 5, 0, 100, 0, 0,
|
||||
_lastFrame + 1, -1);
|
||||
break;
|
||||
|
||||
case 501:
|
||||
interface_show();
|
||||
|
||||
switch (_G(flags)[kTravelDest]) {
|
||||
case 0:
|
||||
_G(flags)[V092] = 0;
|
||||
_G(game).setRoom(201);
|
||||
break;
|
||||
case 1:
|
||||
_G(game).setRoom(301);
|
||||
break;
|
||||
case 2:
|
||||
_G(flags)[V092] = 0;
|
||||
_G(game).setRoom(401);
|
||||
break;
|
||||
case 3:
|
||||
_G(flags)[V092] = 0;
|
||||
_G(game).setRoom(701);
|
||||
break;
|
||||
case 4:
|
||||
_G(flags)[V092] = 0;
|
||||
_G(game).setRoom(501);
|
||||
break;
|
||||
case 5:
|
||||
_G(flags)[V092] = 0;
|
||||
_G(game).setRoom(603);
|
||||
break;
|
||||
case 6:
|
||||
_G(flags)[V092] = 0;
|
||||
_G(game).setRoom(504);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 502:
|
||||
_val1 -= 5;
|
||||
digi_change_panning(3, _val1);
|
||||
kernel_timing_trigger(1, 502);
|
||||
|
||||
if (_val1 <= 0) {
|
||||
digi_stop(3);
|
||||
kernel_timing_trigger(1, 501);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Room495::pre_parser() {
|
||||
_G(player).resetWalk();
|
||||
}
|
||||
|
||||
void Room495::updateFlags1() {
|
||||
int numPlaced = getNumKeyItemsPlaced();
|
||||
|
||||
if (numPlaced < 3)
|
||||
_G(flags)[V088] = 1;
|
||||
else if (numPlaced < 6)
|
||||
_G(flags)[V088] = 3;
|
||||
else if (numPlaced < 9)
|
||||
_G(flags)[V088] = 4;
|
||||
else
|
||||
_G(flags)[V088] = 5;
|
||||
}
|
||||
|
||||
void Room495::updateFlags2() {
|
||||
if (_G(flags)[V045]) {
|
||||
_G(flags)[V045] = 0;
|
||||
if (++_G(flags)[V090] > 3)
|
||||
_G(flags)[V090] = 3;
|
||||
|
||||
switch (_G(flags)[V090]) {
|
||||
case 1:
|
||||
_G(flags)[V367] = 1;
|
||||
break;
|
||||
case 2:
|
||||
_G(flags)[V368] = 1;
|
||||
break;
|
||||
case 3:
|
||||
_G(flags)[V369] = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Room495::play(const char *seriesName1, const char *seriesName2,
|
||||
int lastFrame, int frameRate) {
|
||||
_lastFrame = lastFrame;
|
||||
_seriesName1 = seriesName1;
|
||||
_seriesName2 = seriesName2;
|
||||
|
||||
series_play(_seriesName1, 0, 0, 500, frameRate, 0, 100, 0, 0, 0, lastFrame);
|
||||
series_play(_seriesName2, 0xf00, 0, -1, frameRate, 0, 100, 0, 0, 0, lastFrame);
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
57
engines/m4/riddle/rooms/section4/room495.h
Normal file
57
engines/m4/riddle/rooms/section4/room495.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_ROOM495_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_ROOM495_H
|
||||
|
||||
#include "m4/riddle/rooms/room.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
class Room495 : public Room {
|
||||
private:
|
||||
int _val1 = 0;
|
||||
const char *_seriesName1 = nullptr;
|
||||
const char *_seriesName2 = nullptr;
|
||||
int _lastFrame = 0;
|
||||
|
||||
void updateFlags1();
|
||||
void updateFlags2();
|
||||
void play(const char *seriesName1, const char *seriesName2,
|
||||
int lastFrame, int frameRate);
|
||||
|
||||
public:
|
||||
Room495() : Room() {}
|
||||
~Room495() override {}
|
||||
|
||||
void preload() override;
|
||||
void init() override;
|
||||
void daemon() override;
|
||||
void pre_parser() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
65
engines/m4/riddle/rooms/section4/section4.cpp
Normal file
65
engines/m4/riddle/rooms/section4/section4.cpp
Normal file
@@ -0,0 +1,65 @@
|
||||
/* 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 "m4/riddle/rooms/section4/section4.h"
|
||||
#include "m4/riddle/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
const int16 S4_NORMAL_DIRS[] = { 200, 201, -1 };
|
||||
const char *S4_NORMAL_NAMES[] = {
|
||||
"wolf walker pos1",
|
||||
"wolf walker pos3"
|
||||
};
|
||||
const int16 S4_SHADOW_DIRS[] = { 210, 211, -1 };
|
||||
const char *S4_SHADOW_NAMES[] = {
|
||||
"wolf shadow pos1",
|
||||
"wolf shadow pos3"
|
||||
};
|
||||
|
||||
|
||||
Section4::Section4() : Rooms::Section() {
|
||||
add(401, &_room401);
|
||||
add(402, &_room402);
|
||||
add(403, &_room403);
|
||||
add(404, &_room404);
|
||||
add(405, &_room405);
|
||||
add(406, &_room406);
|
||||
add(407, &_room407);
|
||||
add(408, &_room408);
|
||||
add(409, &_room409);
|
||||
add(410, &_room410);
|
||||
add(413, &_room413);
|
||||
add(456, &_room456);
|
||||
add(493, &_room493);
|
||||
add(494, &_room494);
|
||||
add(495, &_room495);
|
||||
}
|
||||
|
||||
void Section4::daemon() {
|
||||
_G(kernel).continue_handling_trigger = true;
|
||||
}
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
81
engines/m4/riddle/rooms/section4/section4.h
Normal file
81
engines/m4/riddle/rooms/section4/section4.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_RIDDLE_ROOMS_SECTION4_H
|
||||
#define M4_RIDDLE_ROOMS_SECTION4_H
|
||||
|
||||
#include "m4/riddle/rooms/section.h"
|
||||
#include "m4/riddle/rooms/section4/room401.h"
|
||||
#include "m4/riddle/rooms/section4/room402.h"
|
||||
#include "m4/riddle/rooms/section4/room403.h"
|
||||
#include "m4/riddle/rooms/section4/room404.h"
|
||||
#include "m4/riddle/rooms/section4/room405.h"
|
||||
#include "m4/riddle/rooms/section4/room406.h"
|
||||
#include "m4/riddle/rooms/section4/room407.h"
|
||||
#include "m4/riddle/rooms/section4/room408.h"
|
||||
#include "m4/riddle/rooms/section4/room409.h"
|
||||
#include "m4/riddle/rooms/section4/room410.h"
|
||||
#include "m4/riddle/rooms/section4/room413.h"
|
||||
#include "m4/riddle/rooms/section4/room456.h"
|
||||
#include "m4/riddle/rooms/section4/room493.h"
|
||||
#include "m4/riddle/rooms/section4/room494.h"
|
||||
#include "m4/riddle/rooms/section4/room495.h"
|
||||
|
||||
namespace M4 {
|
||||
namespace Riddle {
|
||||
namespace Rooms {
|
||||
|
||||
extern const int16 S4_NORMAL_DIRS[];
|
||||
extern const char *S4_NORMAL_NAMES[];
|
||||
extern const int16 S4_SHADOW_DIRS[];
|
||||
extern const char *S4_SHADOW_NAMES[];
|
||||
|
||||
|
||||
class Section4 : public Section {
|
||||
private:
|
||||
Room401 _room401;
|
||||
Room402 _room402;
|
||||
Room403 _room403;
|
||||
Room404 _room404;
|
||||
Room405 _room405;
|
||||
Room406 _room406;
|
||||
Room407 _room407;
|
||||
Room408 _room408;
|
||||
Room409 _room409;
|
||||
Room410 _room410;
|
||||
Room413 _room413;
|
||||
Room456 _room456;
|
||||
Room493 _room493;
|
||||
Room494 _room494;
|
||||
Room495 _room495;
|
||||
|
||||
public:
|
||||
Section4();
|
||||
virtual ~Section4() {}
|
||||
|
||||
void daemon() override;
|
||||
};
|
||||
|
||||
} // namespace Rooms
|
||||
} // namespace Riddle
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user