ScummVM API documentation
resources.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef TEENAGENT_RESOURCES_H
23#define TEENAGENT_RESOURCES_H
24
25#include "teenagent/pack.h"
26#include "teenagent/segment.h"
27#include "teenagent/font.h"
28#include "graphics/surface.h"
29
31
32namespace TeenAgent {
33
34// Code Segment Addresses (Read Only)
35// Intro function : 0x024c
36const uint16 csAddr_intro = 0x024c;
37// Pole Climb Fail function : 0x4173
38const uint16 csAddr_poleClimbFail = 0x4173;
39// Move Ego (Mark) To Suspicious Position function : 0x505c
40const uint16 csAddr_egoSuspiciousPosition = 0x505c;
41// Guard Scare Timeout function : 0x516d
42const uint16 csAddr_guardScareTimeout = 0x516d;
43// Guard Drinking function : 0x5189
44const uint16 csAddr_guardDrinking = 0x5189;
45// Move Ego (Mark) To Default Position function : 0x557e
46const uint16 csAddr_egoDefaultPosition = 0x557e;
47// Cave NOP function : 0x599b
48const uint16 csAddr_caveNOP = 0x599b;
49// Enter Cave function : 0x5a21
50const uint16 csAddr_enterCave = 0x5a21;
51// Ego (Mark) Scared By Spider function : 0x60b5
52const uint16 csAddr_egoScaredBySpider = 0x60b5;
53// Move to Ladder and Leave Cellar function : 0x60d9
54const uint16 csAddr_moveToLadderAndLeaveCellar = 0x60d9;
55// Leave Cellar function : 0x612b
56const uint16 csAddr_leaveCellar = 0x612b;
57// Too Dark function : 0x61fe
58const uint16 csAddr_TooDark = 0x61fe;
59// Move Ego (Mark) To Bottom-Right or Turn function : 0x6849
60const uint16 csAddr_egoBottomRightTurn = 0x6849;
61// Checking Drawers function : 0x68e6
62const uint16 csAddr_checkingDrawers = 0x68e6;
63// Drawer Open Message function : 0x6b86
64const uint16 csAddr_DrawerOpenMessage = 0x6b86;
65// Is Cook Gone function : 0x70e0
66const uint16 csAddr_isCookGone = 0x70e0;
67// Giving Flower to Old Lady function : 0x88de
68const uint16 csAddr_givingFlowerToOldLady = 0x88de;
69// Give Another Flower to Old Lady function : 0x890b
70const uint16 csAddr_giveAnotherFlowerToOldLady = 0x890b;
71// Giving Flower to Anne function : 0x8942
72const uint16 csAddr_givingFlowerToAnne = 0x8942;
73// Give Another Flower to Anne function : 0x89aa
74const uint16 csAddr_giveAnotherFlowerToAnne = 0x89aa;
75// Putting Rock in Hole function : 0x8d57
76const uint16 csAddr_putRockInHole = 0x8d57;
77// Mouse Out Of Hole Timeout function : 0x8d79
78const uint16 csAddr_mouseOutOfHoleTimeout = 0x8d79;
79// Robot Safe (Mike) Already Unlocked Check function : 0x9166
80const uint16 csAddr_robotSafeAlreadyUnlockedCheck = 0x9166;
81// Robot Safe (Mike) Unlock Check function : 0x9175
82const uint16 csAddr_robotSafeUnlockCheck = 0x9175;
83// Open Full Toolbox function : 0x98fa
84const uint16 csAddr_openFullToolbox = 0x98fa;
85// Open Half Empty Toolbox function : 0x9910
86const uint16 csAddr_openHalfEmptyToolbox = 0x9910;
87// Use Diving Equipment function : 0x9921
88const uint16 csAddr_useDivingEquipment = 0x9921;
89// Successfully Got Anchor function : 0x99e0
90const uint16 csAddr_gotAnchor = 0x99e0;
91// No Anchor Timeout function : 0x9a1d
92const uint16 csAddr_noAnchorTimeout = 0x9a1d;
93// Get Out of Lake function : 0x9a7a
94const uint16 csAddr_getOutOfLake = 0x9a7a;
95// Dig Under Mansion Wall function : 0x9aca
96const uint16 csAddr_digMansionWall = 0x9aca;
97// Too Dark Here function : 0x9c66
98const uint16 csAddr_tooDarkHere = 0x9c66;
99// Examine Banknote function : 0x9c6d
100const uint16 csAddr_examineBanknote = 0x9c6d;
101// Use Time Pills function : 0x9c79
102const uint16 csAddr_useTimePills = 0x9c79;
103// Mansion Intrusion Attempt function : 0x9d45
104const uint16 csAddr_mansionIntrusionAttempt = 0x9d45;
105// Second Mansion Intrusion function : 0x9d90
106const uint16 csAddr_secondMansionIntrusion = 0x9d90;
107// Third Mansion Intrusion function : 0x9de5
108const uint16 csAddr_thirdMansionIntrusion = 0x9de5;
109// Fourth Mansion Intrusion function : 0x9e54
110const uint16 csAddr_fourthMansionIntrusion = 0x9e54;
111// Fifth Mansion Intrusion function : 0x9ec3
112const uint16 csAddr_fifthMansionIntrusion = 0x9ec3;
113// Sixth Mansion Intrusion function : 0x9f3e
114const uint16 csAddr_sixthMansionIntrusion = 0x9f3e;
115// Display Message function : 0xa055
116const uint16 csAddr_displayMsg = 0xa055;
117// Reject Message function : 0xa4d6
118const uint16 csAddr_rejectMsg = 0xa4d6;
119
120// Data Segment Addresses
121// Timed Callback State Variable : 0x0000
122const uint16 dsAddr_timedCallbackState = 0x0000; // 1 byte
123
124// Cursor Graphic 8*12px : 0x00da to 0x0139 (Read Only)
125const uint16 dsAddr_cursor = 0x00da;
126
127// Reject Message Address Pointers : (4 * 2-byte) = 0x339e to 0x33a5
128const uint16 dsAddr_rejectMsgPtr = 0x339e;
129// Reject Message #0 : 0x33a6 to 0x33c9
130const uint16 dsAddr_rejectMsg0 = 0x33a6; // "I have no idea what to do with it"
131// Reject Message #1 : 0x33ca to 0x33f5
132const uint16 dsAddr_rejectMsg1 = 0x33ca; // "I can't imagine what I could do with this"
133// Reject Message #2 : 0x33f6 to 0x3425
134const uint16 dsAddr_rejectMsg2 = 0x33f6; // "I can't figure out what I should do with this"
135// Reject Message #3 : 0x3426 to 0x344f
136const uint16 dsAddr_rejectMsg3 = 0x3426; // "I can't find any reason to mess with it"
137// Cool Message : 0x3450 to 0x3456
138const uint16 dsAddr_coolMsg = 0x3450; // "Cool."
139// Object Usage Error Message : 0x3457 to 0x3467
140const uint16 dsAddr_objErrorMsg = 0x3457; // "That's no good"
141// Car Jack Message : 0x3468 to 0x348f
142const uint16 dsAddr_carJackMsg = 0x3468; // "Wow! There's a car jack inside! Great!"
143// Spanner Message : 0x3490 to 0x34c6
144const uint16 dsAddr_spannerMsg = 0x3490; // "There's something else inside the toolbox! A spanner!"
145// Last Chance Message : 0x34c7 to 0x34d4
146const uint16 dsAddr_lastChanceMsg = 0x34c7; // "Last chance?"
147// Give Up Message : 0x34d5 to 0x34e0
148const uint16 dsAddr_giveUpMsg = 0x34d5; // "I give up"
149// Avoid Bees Message : 0x34e1 to 0x351e
150const uint16 dsAddr_avoidBeesMsg = 0x34e1; // "I'm going to stay at least five meters away from these bees!"
151// Boat Empty Message : 0x351f to 0x3541
152const uint16 dsAddr_boatEmptyMsg = 0x351f; // "There's nothing else in the boat"
153// Too Hard Wood Message : 0x3542 to 0x3562
154const uint16 dsAddr_tooHardWoodMsg = 0x3542; // "This wood is too hard to break"
155// Boo Message : 0x3563 to 0x3569
156const uint16 dsAddr_BooMsg = 0x3563; // "Booo!"
157// Dont Push Luck Message : 0x356a to 0x358f
158const uint16 dsAddr_dontPushLuckMsg = 0x356a; // "I don't think I should push my luck"
159// Ordinary Haystack Message : 0x3590 to 0x35b1
160const uint16 dsAddr_ordinaryHaystackMsg = 0x3590; // "Just an ordinary hay stack. Now."
161// Needle Haystack Message : 0x35b2 to 0x35e7
162const uint16 dsAddr_needleHaystackMsg = 0x35b2; // "And they say you can't find a needle in a haystack"
163// No Potatoes Message : 0x35e8 to 0x3604
164const uint16 dsAddr_noPotatoMsg = 0x35e8; // "There are no more potatoes"
165// Trousers Message : 0x3605 to 0x363e
166const uint16 dsAddr_trousersMsg = 0x3605; // "Good I always asked mum for trousers with BIG pockets"
167// Life Is Brutal Message : 0x363f to 0x364f
168const uint16 dsAddr_lifeIsBrutalMsg = 0x363f; // "Life is brutal"
169// Life Brutal Message : 0x3650 to 0x3667
170const uint16 dsAddr_lifeBrutalMsg = 0x3650; // "Life is really brutal"
171// Tickled Message : 0x3668 to 0x367e
172const uint16 dsAddr_tickledMsg = 0x3668; // "Something tickled me!"
173// Its Gone Message : 0x367f to 0x3693
174const uint16 dsAddr_itsGoneMsg = 0x367f; // "At least it's gone"
175// Monsters Message : 0x3694 to 0x36c1
176const uint16 dsAddr_monstersMsg = 0x3694; // "Who knows what monsters live in there"
177// No Hands Message : 0x36c2 to 0x370e
178const uint16 dsAddr_noHandsMsg = 0x36c2; // "I'd better not put my hands in there..."
179// Totally Empty Message : 0x370f to 0x372d
180const uint16 dsAddr_totalEmptyMsg = 0x370f; // "I can see it's totally empty"
181// One Small Step Message : 0x372e to 0x3765
182const uint16 dsAddr_oneSmallStepMsg = 0x372e; // "One small step for man, one big pain in the head"
183// No Chance Message : 0x3766 to 0x378f
184const uint16 dsAddr_noChanceMsg = 0x3766; // "I won't take my chances a second time"
185// Dinosaur Bone Message : 0x3790 to 0x37b7
186const uint16 dsAddr_dinoBoneMsg = 0x3790; // "I really hope this is DINOSAUR bone"
187// Wall Shaken Message : 0x37b8 to 0x37e9
188const uint16 dsAddr_wallShakenMsg = 0x37b8; // "Wow! This must have shaken all the nearby walls!"
189// Kinda Dark Message : 0x37ea to 0x3800
190const uint16 dsAddr_kindaDarkMsg = 0x37ea; // "It's kinda dark here"
191// Not in Dark Message : 0x3801 to 0x3831
192const uint16 dsAddr_notInDarkMsg = 0x3801; // "I'm not going to wander here in the dark again"
193// Shut Valve Message : 0x3832 to 0x387b
194const uint16 dsAddr_shutValveMsg = 0x3832; // "Shutting the valve shook the dirt from the wall..."
195// Need Sunglasses Message : 0x387c to 0x38a6
196const uint16 dsAddr_needSunglassesMsg = 0x387c; // "Sorry buddy, but I need your sunglasses"
197// Not Best Place Message : 0x38a7 to 0x38cd
198const uint16 dsAddr_notBestPlaceMsg = 0x38a7; // "It's not the best place for diving"
199// Not Here Message : 0x38ce to 0x38da
200const uint16 dsAddr_notHereMsg = 0x38ce; // "Not here"
201// Can't Talk Underwater Message : 0x38db to 0x38fe
202const uint16 dsAddr_cantTalkUnderwaterMsg = 0x38db; // "I really can't talk underwater!"
203// Not Swimming There Message : 0x38ff to 0x3931
204const uint16 dsAddr_notSwimmingThereMsg = 0x38ff; // "I don't think swimming there is worth the effort"
205// Too Little Air Message : 0x3932 to 0x3988
206const uint16 dsAddr_tooLittleAirMsg = 0x3932; // "If I want to get this anchor I have to swim there when I have more air in my lungs"
207// Hooked Anchor Message : 0x3989 to 0x39ad
208const uint16 dsAddr_hookedAnchorMsg = 0x3989; // "I was really hooked on this anchor!"
209// Seaweed Message : 0x39ae to 0x39f5
210const uint16 dsAddr_seaweedMsg = 0x39ae; // "This seaweed is just like the flowers I gave mum on her last birthday"
211// Fish Boat Message : 0x39f6 to 0x3a27
212const uint16 dsAddr_fishBoatMsg = 0x39f6; // "I wonder what fish do inside this boat at night"
213// Fish Something Message : 0x3a28 to 0x3a59
214const uint16 dsAddr_fishSomethingMsg = 0x3a28; // "I think I have to fish out something down there"
215// Fish Don't Worry Message : 0x3a5a to 0x3a84
216const uint16 dsAddr_fishDontWorryMsg = 0x3a5a; // "At least fish don't worry about the rain"
217// Not Red Herring Message : 0x3a85 to 0x3ab6
218const uint16 dsAddr_notRedHerringMsg = 0x3a85; // "I hope all this fish stuff is not a red herring"
219// Nice Down Message : 0x3ab7 to 0x3acd
220const uint16 dsAddr_niceDownMsg = 0x3ab7; // "It's nice down there"
221// Hey Let Go Message : 0x3ace to 0x3ae5
222const uint16 dsAddr_heyLetGoMsg = 0x3ace; // "Hey, let go, will ya?!"
223// Aaahhh Message : 0x3ae6 to 0x3afc
224const uint16 dsAddr_aaahhhMsg = 0x3ae6; // "Aaaaaaaaaaaaahhh!"
225// Oops Message : 0x3afd to 0x3b03
226const uint16 dsAddr_oopsMsg = 0x3afd; // "Oops"
227// Found Food Message : 0x3b04 to 0x3b2e
228const uint16 dsAddr_foundFoodMsg = 0x3b04; // "People leave food in unbelievable places"
229// Come Here Message : 0x3b2f to 0x3b58
230const uint16 dsAddr_comeHereMsg = 0x3b2f; // "Come here, I've got something for you"
231// Can't Catch Message : 0x3b59 to 0x3b6b
232const uint16 dsAddr_cantCatchMsg = 0x3b59; // "I can't catch it!"
233// Trapped Mouse Message : 0x3b6c to 0x3b82
234const uint16 dsAddr_trappedMouseMsg = 0x3b6c; // "The mouse is trapped!"
235// Yikes Message : 0x3b83 to 0x3b8a
236const uint16 dsAddr_yikesMsg = 0x3b83; // "Yikes!"
237// Mouse Nerve Message : 0x3b8b to 0x3bab
238const uint16 dsAddr_mouseNerveMsg = 0x3b8b; // "Boy, this mouse has some nerve!"
239// Drawers Empty Message : 0x3bac to 0x3bd1
240const uint16 dsAddr_drawersEmptyMsg = 0x3bac; // "There's nothing else in the drawers"
241// Rid Bush Message 0x3bd2 to 0x3bf5
242const uint16 dsAddr_ridBushMsg = 0x3bd2; // "I must get rid of this bush first"
243// Mouse Gone Message : 0x3bf6 to 0x3c0a
244const uint16 dsAddr_mouseGoneMsg = 0x3bf6; // "The mouse has gone!"
245// Nonsense Message : 0x3c0b to 0x3c15
246const uint16 dsAddr_nonsenseMsg = 0x3c0b; // "Nonsense"
247// Good Doggy Message : 0x3c16 to 0x3c30
248const uint16 dsAddr_goodDoggyMsg = 0x3c16; // "I understand. Good doggy"
249// Here Boy Message : 0x3c31 to 0x3c3c
250const uint16 dsAddr_hereBoyMsg = 0x3c31; // "Here, boy"
251// Friends Now Message : 0x3c3d to 0x3c57
252const uint16 dsAddr_friendsNowMsg = 0x3c3d; // "I hope we're friends now"
253// Not Think Right Place Message : 0x3c58 to 0x3c7f
254const uint16 dsAddr_notThinkRightPlaceMsg = 0x3c58; // "I don't think this is the right place"
255// Cutscene Message A : 0x3c80 to 0x3c99
256const uint16 dsAddr_cutsceneMsgA = 0x3c80; // "Hundred moments later"
257// Cutscene Message B : 0x3c9a to 0x3cbb
258const uint16 dsAddr_cutsceneMsgB = 0x3c9a; // "Another hundred moments later"
259// Found Crude Oil Message : 0x3cbc to 0x3ce9
260const uint16 dsAddr_foundCrudeOilMsg = 0x3cbc; // "At least I found crude oil and I'll be rich"
261// My Life Message : 0x3cea to 0x3cfa
262const uint16 dsAddr_myLifeMsg = 0x3cea; // "That's my life"
263// Confusion Message : 0x3cfb to 0x3d00
264const uint16 dsAddr_ConfusionMsg = 0x3cfb; // "!?&!"
265// Grandpa Promise Message : 0x3d01 to 0x3d1f
266const uint16 dsAddr_grandpaPromiseMsg = 0x3d01; // "But grandpa, you promised!"
267// Oh Lets Go Message : 0x3d20 to 0x3d39
268const uint16 dsAddr_ohLetsGoMsg = 0x3d20; // "Oh all right. Let's go"
269// Bye Message : 0x3d3a to 0x3d3f
270const uint16 dsAddr_byeMsg = 0x3d3a; // "Bye."
271// No Need Message : 0x3d40 to 0x3d58
272const uint16 dsAddr_noNeedMsg = 0x3d40; // "No need to do it again"
273// Girl Talk Message : 0x3d59 to 0x3d85
274const uint16 dsAddr_girlTalkMsg = 0x3d59; // "I really don't know how to talk to girls"
275// Dont Work Purpose Message : 0x3d86 to 0x3dae
276const uint16 dsAddr_dontWorkPurposeMsg = 0x3d86; // "I usually don't work without a purpose"
277// Nut Real Message : 0x3daf to 0x3dc5
278const uint16 dsAddr_nutRealMsg = 0x3daf; // "Only the nut is real"
279// Hen Fly Message : 0x3dc6 to 0x3df3
280const uint16 dsAddr_henFlyMsg = 0x3dc6; // "I wonder if hens can fly. Come here, baby"
281// First Test Fail Message : 0x3df4 to 0x3e07
282const uint16 dsAddr_firstTestFailMsg = 0x3df4; // "First test failed"
283// Rid Frustations Message : 0x3e08 to 3e30
284const uint16 dsAddr_ridFrustationsMsg = 0x3e08; // "I'd already got rid of my frustrations"
285// Road Nowhere Message : 0x3e31 to 0x3e4e
286const uint16 dsAddr_roadNowhereMsg = 0x3e31; // "Nah. It's a road to nowhere"
287// Open Boot Message 0x3e4f to 0x3e62
288const uint16 dsAddr_openBootMsg = 0x3e4f; // "It opens the boot"
289// Shut Tight Message : 0x3e63 to 0x3e74
290const uint16 dsAddr_shutTightMsg = 0x3e63; // "It's shut tight"
291// Boot Empty Message : 0x3e75 to 0x3e97
292const uint16 dsAddr_bootEmptyMsg = 0x3e75; // "There's nothing else in the boot"
293// Clothes Dry Message : 0x3e98 to 0x3eb1
294const uint16 dsAddr_clothesDryMsg = 0x3e98; // "The clothes are dry now."
295// Crow Kill Message : 0x3eb2 to 0x3ed5
296const uint16 dsAddr_crowKillMsg = 0x3eb2; // "I'm sure these crows will kill me"
297// Get Rid Of Guard First Message : 0x3ed6 to 0x3f29
298const uint16 dsAddr_getRidOfGuardFirstMsg = 0x3ed6; // "If I want to get inside I must get rid of this guard first..."
299// Wall Too Smooth Message : 0x3f2a to 0x3f53
300const uint16 dsAddr_wallTooSmoothMsg = 0x3f2a; // "The wall surface is too smooth to climb"
301// Too Much Resin To Climb Message : 0x3f54 to 0x3f84
302const uint16 dsAddr_tooMuchResinToClimbMsg = 0x3f54; // "I could climb it if there wasn't so much resin"
303// Only Green Rect Message : 0x3f85 to 0x3feb
304const uint16 dsAddr_onlyGreenRectMsg = 0x3f85; // "The only green stuff that I like is that rectangular piece of paper with..."
305// Don't Wanna Touch Hedgehog Message : 0x3fec to 0x402d
306const uint16 dsAddr_dontWannaTouchHedgehogMsg = 0x3fec; // "I don't wanna touch it. Its spines could hurt my delicate hands"
307// Not Hungry Message : 0x402e to 0x4046
308const uint16 dsAddr_notHungryMsg = 0x402e; // "Thanks, I'm not hungry"
309// No Long Hands Message : 0x4047 to 0x406c
310const uint16 dsAddr_noLongHandsMsg = 0x4047; // "I really don't have such long hands"
311// Too Far To Swim Message : 0x406d to 0x4089
312const uint16 dsAddr_tooFarToSwimMsg = 0x406d; // "It's too far to swim there"
313// Echo Message : 0x408a to 0x4090
314const uint16 dsAddr_echoMsg = 0x408a; // "Echo!"
315// Loud Echo Message : 0x4091 to 0x4097
316const uint16 dsAddr_loudEchoMsg = 0x4091; // "ECHO!"
317// Who There Message : 0x4098 to 0x40a6
318const uint16 dsAddr_whoThereMsg = 0x4098; // "Who's there?!"
319// Loud Who There Message : 0x40a7 to 0x40b5
320const uint16 dsAddr_loudWhoThereMsg = 0x40a7; // "WHO'S THERE?!"
321// Dont Copy Message : 0x40b6 to 0x40cd
322const uint16 dsAddr_dontCopyMsg = 0x40b6; // "DON'T COPY ME!"
323// Loud Dont Copy Message : 0x40ce to 0x40e7
324const uint16 dsAddr_loudDontCopyMsg = 0x40ce; // "DON'T COPY ME!!!"
325// Throw Rock Message : 0x40e8 to 0x410e
326const uint16 dsAddr_throwRockMsg = 0x40e8; // "OR I WILL THROW A ROCK DOWN THERE!"
327// Or I Will Message : 0x410f to 0x411c
328const uint16 dsAddr_orIWillMsg = 0x410f; // "OR I WILL"
329// Still There Message : 0x411d to 0x4132
330const uint16 dsAddr_stillThereMsg = 0x411d; // "Are you still there?"
331// No Bucket Message : 0x4133 to 0x4163
332const uint16 dsAddr_noBucketMsg = 0x4133; // "It's not a barrel-organ. And there's no bucket."
333// Dont Need To Open Message : 0x4164 to 0x417d
334const uint16 dsAddr_dontNeedToOpenMsg = 0x4164; // "I don't need to open it"
335// Hmm Grass Message : 0x417e to 41b0
336const uint16 dsAddr_hmmGrassMsg = 0x417e; // "Hmmm. Grass..."
337// Find Nut Message : 0x41b1 to 0x41ee
338const uint16 dsAddr_findNutMsg = 0x41b1; // "I won't find the nut just like that. The grass is too dense"
339// Not Horny Message : 0x41ef to 0x41fe
340const uint16 dsAddr_notHornyMsg = 0x41ef; // "I'm not horny"
341// Can't Jump So High Message : 0x41ff to 0x423e
342const uint16 dsAddr_CantJumpMsg = 0x41ff; // "No way I can jump so high, cause, err, white men can't jump"
343// Don't Need It Message : 0x423f to 0x4250
344const uint16 dsAddr_dontNeedItMsg = 0x423f; // "I don't need it"
345// Not Santa Claus Message : 0x4251 to 0x4266
346const uint16 dsAddr_notSantaClausMsg = 0x4251; // "I'm not Santa Claus"
347// No Plastic Imitations Message : 0x4267 to 0x4288
348const uint16 dsAddr_noPlasticImitationsMsg = 0x4267; // "I don't need plastic imitations"
349// Too Fragile Message : 0x4289 to 0x42ab
350const uint16 dsAddr_tooFragileMsg = 0x4289; // "It's too fragile to carry around"
351// Keep It Open Message : 0x42ac to 0x42c6
352const uint16 dsAddr_keepItOpenMsg = 0x42ac; // "I'd like to keep it open"
353// Not Taking Socks Message : 0x42c7 to 0x4305
354const uint16 dsAddr_notTakingSocksMsg = 0x42c7; // "I really don't want to walk around with someone else's socks"
355// Not Tired Message : 0x4306 to 0x431d
356const uint16 dsAddr_notTiredMsg = 0x4306; // "Thanks, I'm not tired"
357// Too Big Message : 0x431e to 0x434d
358const uint16 dsAddr_tooBigMsg = 0x431e; // "It's too big and I doubt if I'll ever need it"
359// No Secret Passage Message : 0x434e to 0x437f
360const uint16 dsAddr_noSecretPassageMsg = 0x434e; // "I don't think there's any secret passage inside"
361// No Fruit Message : 0x4380 to 0x43ab
362const uint16 dsAddr_noFruitMsg = 0x4380; // "There are no more interesting fruits here"
363// Jug Me Message : 0x43ac to 0x43cd
364const uint16 dsAddr_jugMeMsg = 0x43ac; // "They can jug me if I steal this"
365// Leave Flowers Alone Message : 0x43ce to 0x4411
366const uint16 dsAddr_leaveFlowersAloneMsg = 0x43ce; // "I'd better leave it. Women are really oversensitive about flowers."
367// Mirror Mirror Message : 0x4412 to 0x444e
368const uint16 dsAddr_mirrorMirrorMsg = 0x4412; // "Mirror, Mirror on the wall...."
369// Think Too Long Message : 0x444f to 0x446a
370const uint16 dsAddr_thinkTooLongMsg = 0x444f; // "Hey, don't think too long"
371// Hint Male Message : 0x446b to 0x4491
372const uint16 dsAddr_HintMaleMsg = 0x446b; // "A hint: Someone in this room, a male"
373// OK Wait Message : 0x4492 to 0x44a6
374const uint16 dsAddr_okWaitMsg = 0x4492; // "OK, take your time"
375// Busy Thinking Message : 0x44a7 to 0x44d5
376const uint16 dsAddr_busyThinkingMsg = 0x44a7; // "I'd better not interrupt it's thought process"
377// No Dentists Message : 0x44d6 to 0x450d
378const uint16 dsAddr_noDentistsMsg = 0x44d6; // "I don't want to have anything in common with dentists"
379// Too Heavy Message : 0x450e to 0x4531
380const uint16 dsAddr_tooHeavyMsg = 0x450e; // "It's too heavy. Not that I'm wimp"
381// What Got Message : 0x4532 to 0x4554
382const uint16 dsAddr_whatGotMsg = 0x4532; // "Let's look what we've got here"
383// Strawberry Jam Message : 0x4555 to 0x4567
384const uint16 dsAddr_strawberryJamMsg = 0x4555; // "Strawberry jam"
385// Gooseberry Jam Message : 0x4568 to 0x457a
386const uint16 dsAddr_gooseberryJamMsg = 0x4568; // "Gooseberry jam"
387// Blackberry Jam Message : 0x457b to 0x458d
388const uint16 dsAddr_blackberryJamMsg = 0x457b; // "Blackberry jam"
389// Bilberry Jam Message : 0x458e to 0x459e
390const uint16 dsAddr_bilberryJamMsg = 0x458e; // "Bilberry jam"
391// Get Me Out Jam Message : 0x459f to 0x45b7
392const uint16 dsAddr_getMeOutJamMsg = 0x459f; // "Get me out of this jam!"
393// Rosemary Jam Message : 0x45b8 to 0x45d9
394const uint16 dsAddr_rosemaryJamMsg = 0x45b8; // "Oh, and there is Rosemary jam"
395// Know Rosemary Message : 0x45da to 0x4602
396const uint16 dsAddr_knowRosemaryMsg = 0x45da; // "I used to know someone called Rosemary"
397// Unwanted Jams Message : 0x4603 to 0x461c
398const uint16 dsAddr_unwantedJamsMsg = 0x4603; // "I don't want those jams"
399// Too Dark Message : 0x461d to 0x463b
400const uint16 dsAddr_TooDarkMsg = 0x461d; // "It's too dark to see clearly"
401// Yeow Message : 0x463c to 0x4649
402const uint16 dsAddr_yeowMsg = 0x463c; // "YEEEOOOWWWW!"
403// Yawn Message : 0x464a to 0x4651
404const uint16 dsAddr_yawnMsg = 0x464a; // "(yawn)"
405// Laughter Message : 0x4652 to 0x465d
406const uint16 dsAddr_laughterMsg = 0x4652; // "(laughter)"
407// No Hands Sharp Thorns Message : 0x465e to 0x46a0
408const uint16 dsAddr_noHandsSharpThornsMsg = 0x465e; // "I can't remove it with my hands. these thorns look really sharp"
409// No Chainsaw Fuel Message : 0x46a1 to 0x46c2
410const uint16 dsAddr_noChainsawFuelMsg = 0x46a1; // "There's no fuel in the chainsaw"
411// Thorns Too Thin Message : 0x46c3 to 0x46f6
412const uint16 dsAddr_thornsTooThinMsg = 0x46c3; // "Thorns are too thin, the chainsaw is useless here"
413// Rock Walking Gee Message : 0x46f7 to 0x473c
414const uint16 dsAddr_rockWalkingGeeMsg = 0x46f7; // "Yeah, great idea. Let's take this rock and walk around a bit. Gee..."
415// Butterfly Message : 0x473d to 0x477a
416const uint16 dsAddr_butterflyMsg = 0x473d; // "I'd better leave them alone, they make this place beautiful"
417// Not Sure If Alive Message : 0x477b to 0x4797
418const uint16 dsAddr_notSureIfAliveMsg = 0x477b; // "I'm not sure if it's alive"
419
420// FIXME - Unknown where this is used.. Talking to SOMETHING...
421// Unknown Language Message : 0x4798 to 0x47be
422const uint16 dsAddr_unknownLanguageMsg = 0x4798; // "I don't know what language it speaks"
423
424// Hole Too Narrow Message : 0x47bf to 0x47e6
425const uint16 dsAddr_holeTooNarrowMsg = 0x47bf; // "The hole is too narrow to fit my hand"
426// Bird Attack Message : 0x47e7 to 0x4807
427const uint16 dsAddr_birdAttackMsg = 0x47e7; // "Hey You! Wake up! Bird attack!"
428// No Search Warrant Message : 0x4808 to 0x4827
429const uint16 dsAddr_noSearchWarrantMsg = 0x4808; // "I don't have a search-warrant"
430// Uninteresting Haystack Message : 0x4828 to 0x485f
431const uint16 dsAddr_uninterestingHaystackMsg = 0x4828; // "I don't see anything interesting about this haystack"
432// More Complicated Message : 0x4860 to 0x4881
433const uint16 dsAddr_moreComplicatedMsg = 0x4860; // "It's more complicated than that"
434// Nut Rake Message : 0x4882 to 0x48be
435const uint16 dsAddr_nutRakeMsg = 0x4882; // "It's pointless, the nut will slip between the rake's teeth"
436// Paddle Broken Message : 0x48bf to 0x48d5
437const uint16 dsAddr_paddleBrokenMsg = 0x48bf; // "The paddle is BROKEN"
438// Branch Not Paddle Message : 0x48d6 to 0x4912
439const uint16 dsAddr_branchNotPaddleMsg = 0x48d6; // "This branch is not a paddle. It doesn't even look like one"
440// Try Somewhere Else Message : 0x4913 to 0x495b
441const uint16 dsAddr_trySomewhereElseMsg = 0x4913; // "I'd better try somewhere else - I suppose this side is heavily guarded"
442// Sharpen Not Pulverize Message : 0x495c to 0x4983
443const uint16 dsAddr_sharpenNotPulverizeMsg = 0x495c; // "I needed to sharpen it, not pulverize"
444// Can't Do Anything Too Dark Message : 0x4984 to 0x49ad
445const uint16 dsAddr_cantDoTooDarkMsg = 0x4984; // "I can't do anything here, it's too dark"
446// Bribe Message : 0x49ae to 0x49d0
447const uint16 dsAddr_BribeMsg = 0x49ae; // "Here, let's make your pocket fat."
448// Bank Note Message : 0x49d1 to 0x4a28
449const uint16 dsAddr_bankNoteMsg = 0x49d1; // "It's a note from some bank..."
450// Show Her Money Message : 0x4a29 to 0x4a5a
451const uint16 dsAddr_showHerMoneyMsg = 0x4a29; // "If I just show her the money, she might take it"
452// Hundred Bucks Message : 0x4a5b to 0x4a6e
453const uint16 dsAddr_hundredBucksMsg = 0x4a5b; // "A hundred bucks!!!"
454// Want Blood Message : 0x4a6f to 0x4a7d
455const uint16 dsAddr_wantBloodMsg = 0x4a6f; // "I want Blood!"
456// Dont Leave Mansion Message : 0x4a7e to 0x4aaf
457const uint16 dsAddr_dontLeaveMansionMsg = 0x4a7e; // "I don't want to leave the mansion, I want blood!"
458// Wimp Message : 0x4ab0 to 0x4acc
459const uint16 dsAddr_WimpMsg = 0x4ab0; // "I'm a pathetic little wimp"
460// Strange Drawer Message : 0x4acd to 0x4b0c
461const uint16 dsAddr_strangeDrawerMsg = 0x4acd; // "Strange, but the drawer is stuck if the next drawer is open"
462// Not Ordinary Drawers Message : 0x4b0d to 0x4b38
463const uint16 dsAddr_notOrdinaryDrawersMsg = 0x4b0d; // "Maybe these are not just ordinary drawers!"
464// Drawer Open Message : 0x4b39 to 0x4b6b
465const uint16 dsAddr_drawerOpenMsg = 0x4b39; // "I cannot open the drawer if the next one is open!"
466// Blue Interior Message 0x4b6c to 0x4b86
467const uint16 dsAddr_blueInteriorMsg = 0x4b6c; // "It's got a blue interior"
468// Red Interior Message : 0x4b87 to 0x4ba0
469const uint16 dsAddr_redInteriorMsg = 0x4b87; // "It's got a red interior"
470// Grey Interior Message : 0x4ba1 to 0x4bbb
471const uint16 dsAddr_greyInteriorMsg = 0x4ba1; // "It's got a grey interior"
472// Green Interior Message : 0x4bbc to 0x4bd7
473const uint16 dsAddr_greenInteriorMsg = 0x4bbc; // "It's got a green interior"
474// Brown Interior Message : 0x4bd8 to 0x4bf3
475const uint16 dsAddr_brownInteriorMsg = 0x4bd8; // "It's got a brown interior"
476// Pink Interior Message : 0x4bf4 to 0x4c0e
477const uint16 dsAddr_pinkInteriorMsg = 0x4bf4; // "It's got a pink interior"
478// Dictaphone Inside Message : 0x4c0f to 0x4c31
479const uint16 dsAddr_dictaphoneInsideMsg = 0x4c0f; // "Wow! There's a dictaphone inside!"
480// Found Polaroid Message : 0x4c32 to 0x4c60
481const uint16 dsAddr_foundPolaroidMsg = 0x4c32; // "There's a polaroid inside! I might need that"
482// Book Held Message : 0x4c61 to 0x4c83
483const uint16 dsAddr_bookHeldMsg = 0x4c61; // "Something's got hold of the book!"
484// Secret Compartment Message : 0x4c84 to 0x4c9f
485const uint16 dsAddr_secretCompartmentMsg = 0x4c84; // "Wow! A secret compartment!"
486// Dont Mess Message : 0x4ca0 to 0x4cc6
487const uint16 dsAddr_dontMessMsg = 0x4ca0; // "I don't need to mess with it anymore"
488// Full Automatic Message : 0x4cc7 to 0x4cd8
489const uint16 dsAddr_fullAutomaticMsg = 0x4cc7; // "Fully Automatic"
490// No More Sheets Message : 0x4cd9 to 0x4d01
491const uint16 dsAddr_noMoreSheetsMsg = 0x4cd9; // "Right now I don't need any more sheets"
492// No Deprave Message : 0x4d02 to 0x4d29
493const uint16 dsAddr_noDepraveMsg = 0x4d02; // "Nah, I don't want to deprave the kids"
494// No Read Again Message : 0x4d2a to 0x4d5a
495const uint16 dsAddr_noReadAgainMsg = 0x4d2a; // "I don't want to read it again. I might like it."
496// TV Off Message : 0x4d5b to 0x4d7f
497const uint16 dsAddr_tvOffMsg = 0x4d5b; // "I just realized that the TV is off"
498// Not Happen Message : 0x4d80 to 0x4d92
499const uint16 dsAddr_NotHappenMsg = 0x4d80; // "Nothing happened"
500// Tape Started Message : 0x4d93 to 0x4da5
501const uint16 dsAddr_tapeStartedMsg = 0x4d93; // "The tape started!"
502// Much Better Message : 0x4da6 to 0x4dba
503const uint16 dsAddr_muchBetterMsg = 0x4da6; // "That's much better"
504// No Sleep Message : 0x4dbb to 0x4dd2
505const uint16 dsAddr_noSleepMsg = 0x4dbb; // "I don't want to sleep"
506// Just Cork Message : 0x4dd3 to 0x4de5
507const uint16 dsAddr_justCorkMsg = 0x4dd3; // "It's just a cork"
508// Enough Photos Message : 0x4de6 to 0x4e04
509const uint16 dsAddr_enoughPhotosMsg = 0x4de6; // "I don't need any more photos"
510// Record Scare Message : 0x4e05 to 0x4e31
511const uint16 dsAddr_recordScareMsg = 0x4e05; // "Yeah, I can record this and scare the cats"
512// Already Recorded Message : 0x4e32 to 0x4e57
513const uint16 dsAddr_alreadyRecordedMsg = 0x4e32; // "I already recorded what I wanted to"
514// Can't Record No Batteries Message : 0x4e58 to 0x4e8d
515const uint16 dsAddr_cantRecordNoBatteriesMsg = 0x4e58; // "I can't record anything until I find some batteries"
516
517// FIXME - Not sure how to get this message. Dictaphone with no batteries somewhere? Radio?
518// No Batteries No Fun Message : 0x4e8e to 0x4ea4
519const uint16 dsAddr_NoBatteriesNoFunMsg = 0x4e8e; // "No batteries, no fun"
520
521// Not Right Moment Message : 0x4ea5 to 0x4ecd
522const uint16 dsAddr_notRightMomentMsg = 0x4ea5; // "I don't think this is the right moment"
523// Cook Around Message : 0x4ece to 0x4ef9
524const uint16 dsAddr_cookAroundMsg = 0x4ece; // "I can't do anything with this cook around"
525// Same Bottle Message : 0x4efa to 0x4f3c
526const uint16 dsAddr_sameBottleMsg = 0x4efa; // "The bottle's the same, but I doubt if it's enough to fool anyone"
527// Break Flatten Message : 0x4f3d to 0x4f68
528const uint16 dsAddr_breakFlattenMsg = 0x4f3d; // "I wanted to break it, not to flatten it!"
529// What Inside Message : 0x4f69 to 0x4f9a
530const uint16 dsAddr_whatInsideMsg = 0x4f69; // "I was always curious what's inside these things"
531// Rest Useless Message : 0x4f9b to 0x4fb0
532const uint16 dsAddr_restUselessMsg = 0x4f9b; // "The rest is useless"
533// Two Batteries Message : 0x4fb1 to 0x4fca
534const uint16 dsAddr_twoBatteriesMsg = 0x4fb1; // "Wow! Two 1.5V batteries!"
535// One Taken Message : 0x4fcb to 0x4fe1
536const uint16 dsAddr_oneTakenMsg = 0x4fcb; // "This one's taken, OK?"
537// Slight Mad Message : 0x4fe2 to 0x5009
538const uint16 dsAddr_slightMadMsg = 0x4fe2; // "It finally happened. I'm slightly mad"
539// Paper Burnt Message : 0x500a to 0x502a
540const uint16 dsAddr_paperBurntMsg = 0x500a; // "The paper burnt out completely!"
541// Burn Baby Message : 0x502b to 0x503d
542const uint16 dsAddr_burnBabyMsg = 0x502b; // "Burn, baby, burn!"
543// Voila Message : 0x503e to 0x5045
544const uint16 dsAddr_voilaMsg = 0x503e; // "Voila"
545// Too Hot Message : 0x5046 to 0x505d
546const uint16 dsAddr_tooHotMsg = 0x5046; // "It's too hot to touch!"
547// Frozen Shelf Message : 0x505e to 0x5081
548const uint16 dsAddr_frozenShelfMsg = 0x505e; // "It has frozen hard onto the shelf!"
549// Yummy Message : 0x5082 to 0x5089
550const uint16 dsAddr_yummyMsg = 0x5082; // "Yummy"
551// Dislike Veal Message : 0x508a to 0x50a5
552const uint16 dsAddr_dislikeVealMsg = 0x508a; // "I never liked veal anyway"
553// No Reason Message : 0x50a6 to 0x50c2
554const uint16 dsAddr_noReasonMsg = 0x50a6; // "There's no reason to do it"
555// Fooled Once Message : 0x50c3 to 0x50e0
556const uint16 dsAddr_fooledOnceMsg = 0x50c3; // "I'd already fooled him once"
557// Mike Voice Test Message : 0x50e1 to 0x5100
558const uint16 dsAddr_mikeVoiceTestMsg = 0x50e1; // "Mike, activate the voice test"
559// Not My Voice Message : 0x5101 to 0x5123
560const uint16 dsAddr_notMyVoiceMsg = 0x5101; // "I won't cheat Mike with MY voice"
561// Singing Message : 0x5124 to 0x5137
562const uint16 dsAddr_singingMsg = 0x5124; // "siiiiinging!"
563// Mike Scent Test Message : 0x5138 to 0x5160
564const uint16 dsAddr_mikeScentTestMsg = 0x5138; // "Mike, let's get on with the scent test"
565// Mike View Test Message : 0x5161 to 0x517a
566const uint16 dsAddr_mikeViewTestMsg = 0x5161; // "Mike, run the view test"
567// Cutscene Message #0 : 0x517b to 0x51a6
568const uint16 dsAddr_cutsceneMsg0 = 0x517b; // "A secret diary of ..."
569// Can't Hide Message : 0x51a7 to 0x51ba
570const uint16 dsAddr_cantHideMsg = 0x51a7; // "I can't hide here!"
571// John Outside Message : 0x51bb to 0x51e6
572const uint16 dsAddr_johnOutsideMsg = 0x51bb; // "There's John Noty outside! I can't go out!"
573// Was Close Message : 0x51e7 to 0x51f7
574const uint16 dsAddr_wasCloseMsg = 0x51e7; // "That was close"
575// Cork In Hole Message : 0x51f8 to 0x5217
576const uint16 dsAddr_corkInHoleMsg = 0x51f8; // "The cork is stuck in the hole"
577// Fits Perfect Message : 0x5218 to 0x522b
578const uint16 dsAddr_fitsPerfectMsg = 0x5218; // "It fits perfectly!"
579// Enough Water Message : 0x522c to 0x524e
580const uint16 dsAddr_enoughWaterMsg = 0x522c; // "There's enough water in the sink"
581// No Hot Water Message : 0x524f to 0x5271
582const uint16 dsAddr_noHotWaterMsg = 0x524f; // "There's no hot water in the sink"
583// Label Off Message : 0x5272 to 0x528a
584const uint16 dsAddr_labelOffMsg = 0x5272; // "The label has come off!"
585// Cork Too Small Message : 0x528b to 0x52a8
586const uint16 dsAddr_corkTooSmallMsg = 0x528b; // "The cork is a bit too small"
587// Not Try Now Message : 0x52a9 to 0x52ca
588const uint16 dsAddr_notTryNowMsg = 0x52a9; // "There's no need to try them now"
589// No Salad Message : 0x52cb to 0x52f5
590const uint16 dsAddr_noSaladMsg = 0x52cb; // "I don't want to turn myself into a salad"
591// Nah Message : 0x52f6 to 0x52fd
592const uint16 dsAddr_nahMsg = 0x52f6; // "Nah"
593// Vent First Message : 0x52fe to 0x5325
594const uint16 dsAddr_ventFirstMsg = 0x52fe; // "I'd better stop this ventilator first"
595// Catch John First Message : 0x5326 to 0x5348
596const uint16 dsAddr_catchJohnFirstMsg = 0x5326; // "I'd better catch John Noty first"
597// Only Chilli Message : 0x5349 to 0x5371
598const uint16 dsAddr_onlyChilliMsg = 0x5349; // "Good this red stuff is only a chilli"
599// Water Hot Message : 0x5372 to 0x538c
600const uint16 dsAddr_waterHotMsg = 0x5372; // "The water looks very hot"
601// Sink Full Message : 0x538d to 0x53ac
602const uint16 dsAddr_sinkFullMsg = 0x538d; // "The sink is full of hot water"
603// No Sock Store Message : 0x53ad to 0x53dc
604const uint16 dsAddr_noSockStoreMsg = 0x53ad; // "I don't have anything to store these socks in"
605// Show Papers Message : 0x53dd to 0x53f1
606const uint16 dsAddr_showPapersMsg = 0x53dd; // "Here are my papers"
607// Got Permission Message : 0x53f2 to 0x5410
608const uint16 dsAddr_gotPermissionMsg = 0x53f2; // "I already got the permission"
609// Saving Fine Message : 0x5411 to 0x5462
610const uint16 dsAddr_SavingFineMsg = 0x5411; // "Saving is a very fine thing..."
611// Love Captain Message : 0x5463 to 0x5474
612const uint16 dsAddr_loveCaptainMsg = 0x5463; // "I love captain"
613// Soccer Rulz Message : 0x5475 to 0x5483
614const uint16 dsAddr_soccerRulzMsg = 0x5475; // "Soccer rulz"
615// Tree Cut Message : 0x5484 to 0x54c3
616const uint16 dsAddr_treeCutMsg = 0x5484; // "Don't cut the trees..."
617// Visa Accepted Message : 0x54c4 to 0x54d4
618const uint16 dsAddr_visaAcceptedMsg = 0x54c4; // "VISA Accepted"
619// Other Graffiti Message : 0x54d5 to 0x54f6
620const uint16 dsAddr_otherGraffitiMsg = 0x54d5; // "The rest of graffiti is obscene"
621// First Trial Message : 0x54f7 to 0x5510
622const uint16 dsAddr_firstTrialMsg = 0x54f7; // "Sir, I'm Mark. A rookie"
623// Locked Message : 0x5511 to 0x551e
624const uint16 dsAddr_lockedMsg = 0x5511; // "It's Locked!"
625// Thanks Message : 0x551f to 0x5527
626const uint16 dsAddr_ThanksMsg = 0x551f; // "Thanks."
627// Unknown Usage Message : 0x5528 to 0x555c
628const uint16 dsAddr_unkUsageMsg = 0x5528; // "I don't have any idea what to do with it right now"
629// Idea Message : 0x555d to 0x5576
630const uint16 dsAddr_ideaMsg = 0x555d; // "That gives me an idea"
631// Check Works Message : 0x5577 to 0x5599
632const uint16 dsAddr_checkWorksMsg = 0x5577; // "Now I got to check if it works"
633// Time To Call Message : 0x559a to 0x55bf
634const uint16 dsAddr_timeToCallMsg = 0x559a; // "I think it is time to call captain"
635// Meal Finished Message : 0x55c0 to 0x55da
636const uint16 dsAddr_mealFinishedMsg = 0x55c0; // "Hey! I finished my meal."
637// Bowl Welded Message : 0x55db to 0x55fe
638const uint16 dsAddr_bowlWeldedMsg = 0x55db; // "Wow. He got welded to the bowl"
639// Gotcha Message : 0x55ff to 0x5607
640const uint16 dsAddr_gotchaMsg = 0x55ff; // "Gotcha"
641// No Pocket Message : 0x5608 to 0x5631
642const uint16 dsAddr_noPocketMsg = 0x5608; // "I don't want to touch his pockets again."
643// Does Not Work Message : 0x5632 to 0x5645
644const uint16 dsAddr_doesNotWorkMsg = 0x5632; // "That doesn't work"
645// Message : 0x5646 to 0x5655
646const uint16 dsAddr_fnMsg1 = 0x5646; // "Piece of cake"
647// Message : 0x5656 to 0x5679
648const uint16 dsAddr_fnMsg2 = 0x5656; // "And how am I supposed to get back?"
649// Message : 0x567a to 0x5681
650const uint16 dsAddr_fnMsg3 = 0x567a; // "Great"
651// Message : 0x5682 to 0x5695
652const uint16 dsAddr_fnMsg4 = 0x5682; // "Oh, yeah, right"
653// Pull Object Message #1 : 0x5696 to 0x56ab
654const uint16 dsAddr_pullObjMsg1 = 0x5696; // "I can't pull it out"
655// Dont Want To Touch Message : 0x56ac to 0x56d9
656const uint16 dsAddr_dontWantToTouchMsg = 0x56ac; // "I don't want to touch it - I might get hurt"
657// Fence Blocks Message : 0x56da to 0x56f6
658const uint16 dsAddr_fenceBlocksMsg = 0x56da; // "The fence blocks the way"
659// Not Want To Sleep Message : 0x56f7 to 0x570e
660const uint16 dsAddr_notWantToSleepMsg = 0x56f7; // "I don't want to sleep"
661// Pull Object Message #2 : 0x570f to 0x5721
662const uint16 dsAddr_pullObjMsg2 = 0x570f; // "I can't reach it"
663// Hello Question Message : 0x5722 to 0x5729
664const uint16 dsAddr_helloQMsg = 0x5722; // "Hello?"
665// Totally Addicted Message : 0x572a to 0x5741
666const uint16 dsAddr_totallyAddictedMsg = 0x572a; // "He's totally addicted"
667// What About Message : 0x5742 to 0x5756
668const uint16 dsAddr_whatAboutMsg = 0x5742; // "What about a new"
669// Hot Off Message : 0x5757 to 0x576f
670const uint16 dsAddr_hotOffMsg = 0x5757; // "hot off the press"
671// Full Color Message : 0x5770 to 0x5781
672const uint16 dsAddr_fullColorMsg = 0x5770; // "full-color"
673// Special Edition Message : 0x5782 to 0x5798
674const uint16 dsAddr_specialEdMsg = 0x5782; // "special edition"
675// Soldier News Message : 0x5799 to 0x57b1
676const uint16 dsAddr_soldierNewsMsg = 0x5799; // "of Soldier News?!"
677// Pole Climb Done Message : 0x57b2 to 0x57bf
678const uint16 dsAddr_poleClimbDoneMsg = 0x57b2; // "Never Again!"
679// Vac Message : 0x57c0 to 0x57de
680const uint16 dsAddr_vacMsg = 0x57c0; // "What am I? A vacuum cleaner?!"
681// Cutscene Message #1 : 0x57df to 0x5809
682const uint16 dsAddr_cutsceneMsg1 = 0x57df; // "sixty seven rude words later"
683// Cutscene Message #2 : 0x580a to 0x5826
684const uint16 dsAddr_cutsceneMsg2 = 0x580a; // "Meanwhile in the mansion"
685// Now Open Message : 0x5827 to 0x5836
686const uint16 dsAddr_nowOpenMsg = 0x5827; // "Now it's open"
687// Cmon Baby Message : 0x5837 to 0x5854
688const uint16 dsAddr_cmonBabyMsg = 0x5837; // "C'mon baby, it's all yours!"
689// Talk Not Now Message : 0x5855 to 0x5882
690const uint16 dsAddr_talkNotNowMsg = 0x5855; // "I've got no reason to talk to him right now."
691// Yeah Right Message : 0x5883 to 0x5893
692const uint16 dsAddr_yeahRightMsg = 0x5883; // "Yeah right!"
693// Barman Too Close Message : 0x5894 to 0x58af
694const uint16 dsAddr_barmanTooCloseMsg = 0x5894; // "The barman is too close"
695// Yuck Message : 0x58b0 to 0x58b6
696const uint16 dsAddr_yuckMsg = 0x58b0; // "Yuck!"
697// Prefer Water Message : 0x58b7 to 0x58c7
698const uint16 dsAddr_preferWaterMsg = 0x58b7; // "I prefer water"
699// Too Weak To Climb Message : 0x58c8 to 0x58e2
700const uint16 dsAddr_tooWeakToClimbMsg = 0x58c8; // "I'm too weak to climb it"
701// Spring Prick Message : 0x58e3 to 0x5904
702const uint16 dsAddr_springPrickMsg = 0x58e3; // "The springs would prick my back"
703// Food Alive Message : 0x5905 to 0x592e
704const uint16 dsAddr_foodAliveMsg = 0x5905; // "No, thanks. This food seems still alive"
705// Door Closed Message : 0x592f to 0x5954
706const uint16 dsAddr_doorClosedMsg = 0x592f; // "The door is closed. What a surprise."
707// Empty Message : 0x5955 to 0x5961
708const uint16 dsAddr_emptyMsg = 0x5955; // "It's Empty"
709// Geography Class Message : 0x5962 to 0x599c
710const uint16 dsAddr_geographyClassMsg = 0x5962; // "I should have paid more attention in geography classes."
711// Don't Need Mess Message : 0x599d to 0x59b5
712const uint16 dsAddr_dontNeedMessMsg = 0x599d; // "I don't need this mess"
713// Seen Softer Rocks Message : 0x59b6 to 0x59da
714const uint16 dsAddr_seenSofterRocksMsg = 0x59b6; // "Thanks, but I've seen softer rocks"
715// Too Blunt Message : 0x59db to 0x5a00
716const uint16 dsAddr_tooBluntMsg = 0x59db; // "They are too blunt to be of any use"
717// Useless Models Message : 0x5a01 to 0x5a1f
718const uint16 dsAddr_uselessModelsMsg = 0x5a01; // "What's the use of the models?"
719// Barman Will Notice Message : 0x5a20 to 0x5a50
720const uint16 dsAddr_barmanWillNoticeMsg = 0x5a20; // "The barman will surely notice its disappearing"
721// Too Much To Drink Message : 0x5a51 to 0x5a95
722const uint16 dsAddr_tooMuchToDrinkMsg = 0x5a51; // "It'd take too much time to drink it..."
723// 0x5a96 to 0x5a97 : 2 extra null bytes (padding?)
724// Not Thief Message : 0x5a98 to 0x5ac5
725const uint16 dsAddr_notThiefMsg = 0x5a98; // "I'm not a thief. And it's empty, by the way."
726// Too Many To Search Message : 0x5ac6 to 0x5aec
727const uint16 dsAddr_tooManyToSearchMsg = 0x5ac6; // "There are too many of them to search"
728// Captain Would Not Fit Message : 0x5aed to 0x5b26
729const uint16 dsAddr_captainWouldNotFitMsg = 0x5aed; // "Captain surely wouldn't fit them. I must look elsewhere"
730// Chickening Never Message : 0x5b27 to 0x5b3e
731const uint16 dsAddr_chickenNeverMsg = 0x5b27; // "Chickening? Me? Never!"
732// Can't Open It Message : 0x5b3f to 0x5b50
733const uint16 dsAddr_cantOpenItMsg = 0x5b3f; // "I can't open it"
734// Don't Need Them Message : 0x5b51 to 0x5b64
735const uint16 dsAddr_dontNeedThemMsg = 0x5b51; // "I don't need them"
736// Peeping Tom Message : 0x5b65 to 0x5b7f
737const uint16 dsAddr_peepingTomMsg = 0x5b65; // "What am I? A Peeping Tom?"
738// Big Pockets Message : 0x5b80 to 0x5baa
739const uint16 dsAddr_bigPocketsMsg = 0x5b80; // "I have big pockets, but there are limits"
740// Trouble With Stairs Message : 0x5bab to 0x5be6
741const uint16 dsAddr_troubleWithStairsMsg = 0x5bab; // "If I put it on I might have trouble walking up the stairs"
742// 9 Lives To Read Message : 0x5be7 to 0x5c0a
743const uint16 dsAddr_9LivesToReadMsg = 0x5be7; // "I'd need 9 lives to read them all"
744// Thanks Not Tired Message : 0x5c0b to 0x5c25
745const uint16 dsAddr_thanksNotTiredMsg = 0x5c0b; // "Thanks, I'm not so tired"
746// No Need To Turn On Message : 0x5c26 to 0x5c45
747const uint16 dsAddr_noNeedToTurnOnMsg = 0x5c26; // "There's no need to turn it on"
748// Won't Bear Weight Message : 0x5c46 to 0x5c5f
749const uint16 dsAddr_wontBearWeightMsg = 0x5c46; // "It won't bear my weight"
750// Never Learnt Message : 0x5c60 to 0x5c81
751const uint16 dsAddr_neverLearntMsg = 0x5c60; // "I never learnt to how use one"
752// So Sharp Message : 0x5c82 to 0x5cab
753const uint16 dsAddr_soSharpMsg = 0x5c82; // "They're so sharp they'd rip my trousers!"
754// Cognac Message : 0x5cac to 0x5cda
755const uint16 dsAddr_cognacMsg = 0x5cac; // "Pfui! The cognac really didn't do any good"
756// No Time For Pleasures Message : 0x5cdb to 0x5cfc
757const uint16 dsAddr_noTimeForPleasuresMsg = 0x5cdb; // "I don't have time for pleasures"
758// Not Socks With Bare Hands Message : 0x5cfd to 0x5d2b
759const uint16 dsAddr_notSocksWithBareHandsMsg = 0x5cfd; // "I won't touch these socks with my bare hands!"
760// Not Halloween Message : 0x5d2c to 0x5d40
761const uint16 dsAddr_notHalloweenMsg = 0x5d2c; // "It's not Halloween"
762// Not Manual Message : 0x5d41 to 0x5d6d
763const uint16 dsAddr_NotManualMsg = 0x5d41; // "It can't be controlled manually! I hate it!"
764// Nothing To Play Message : 0x5d6e to 0x5d86
765const uint16 dsAddr_nothingToPlayMsg = 0x5d6e; // "I have nothing to play"
766// Not Mine Message : 0x5d87 to 0x5da7
767const uint16 dsAddr_notMineMsg = 0x5d87; // "I can't take it. It's not mine."
768// Hey What's The Matter Message : 0x5da8 to 0x5dc1
769const uint16 dsAddr_HeyWtmQMsg = 0x5da8; // "Hey! What's the matter?!"
770// Its Open Message : 0x5dc2 to 0x5dcd
771const uint16 dsAddr_ItsOpenMsg = 0x5dc2; // "It's Open!"
772// Out Of Order Message : 0x5dce to 0x5de1
773const uint16 dsAddr_outOfOrderMsg = 0x5dce; // "It's out of order"
774// Captain Watching Message : 0x5de2 to 0x5e0a
775const uint16 dsAddr_captainWatchingMsg = 0x5de2; // "with captain watching? Better not"
776// Blunt Sickle Message : 0x5e0b to 0x5e24
777const uint16 dsAddr_bluntSickleMsg = 0x5e0b; // "The sickle is too blunt"
778// First Business Message : 0x5e25 to 0x5e53
779const uint16 dsAddr_firstBusinessMsg = 0x5e25; // "First I've got some business to take care of"
780// No Digging Knife Message : 0x5e54 to 0x5e8e
781const uint16 dsAddr_noDiggingKnifeMsg = 0x5e54; // "Digging it out with the knife could take a hundred years"
782
783// FIXME - Where is this message used?! Unused?
784// No Mess On Table Message : 0x5e8f to 0x5ebd
785const uint16 dsAddr_noMessOnTableMsg = 0x5e8f; // "I don't want to make more mess on this table"
786
787// Throw Crumbs To Bird Question Message : 0x5ebe to 0x5ee5
788const uint16 dsAddr_throwCrumbsToBirdQMsg = 0x5ebe; // "Should I throw the crumbs to the bird?"
789// Don't Waste Crumbs Message : 0x5ee6 to 0x5f10
790const uint16 dsAddr_dontWasteCrumbs = 0x5ee6; // "I don't want to waste these tasty crumbs"
791// Might Slip Fall In Message : 0x5f11 to 0x5f3b
792const uint16 dsAddr_mightSlipFallInMsg = 0x5f11; // "Better not... I might slip and fall in..."
793// Book Color Message Address Pointers : (6 * 2-byte) = 0x5f3c to 0x5f47
794const uint16 dsAddr_bookColorMsgPtr = 0x5f3c;
795// Book Color Message #0 : 0x5f48 to 0x5f60
796const uint16 dsAddr_bookColorMsg0 = 0x5f48; // ""The history of blues""
797// Book Color Message #1 : 0x5f61 to 0x5f8f
798const uint16 dsAddr_bookColorMsg1 = 0x5f61; // ""Manchester United, or the Red Devils story""
799// Book Color Message #2 : 0x5f90 to 0x5fb5
800const uint16 dsAddr_bookColorMsg2 = 0x5f90; // ""Greyhounds and other hunting dogs""
801// Book Color Message #3 : 0x5fb6 to 0x5fe6
802const uint16 dsAddr_bookColorMsg3 = 0x5fb6; // ""Greenhorn, or my adventures in the Wild West""
803// Book Color Message #4 : 0x5fe7 to 0x6008
804const uint16 dsAddr_bookColorMsg4 = 0x5fe7; // ""Charlie Brown and his company""
805// Book Color Message #5 : 0x6009 to 0x6034
806const uint16 dsAddr_bookColorMsg5 = 0x6009; // ""Pink Panther: an unauthorised biography""
807
808// Mansion Intrusion Function Pointers : (5 * 2-byte) = 0x6035 to 0x603e
809const uint16 dsAddr_MansionIntrusionFnPtr = 0x6035;
810
811// Save State Region : 0x6478 to 0xdbf1
812const uint16 dsAddr_saveState = 0x6478;
813const uint16 saveStateSize = 0x777a;
814
815// Save Description String (24 bytes) : 0x6478 to 0x648f
816
817// Ego (Mark) position in scene : 0x64af to 0x64b2
818const uint16 dsAddr_egoX = 0x64af; // 2 bytes
819const uint16 dsAddr_egoY = 0x64b1; // 2 bytes
820
821// Idle Animation List Table : 0x6540 to 0x????
822const uint16 dsAddr_idleAnimationListPtr = 0x6540;
823
824// Palette Effect Data : 0x6609 to 0x????
825const uint16 dsAddr_paletteEffectData = 0x6609;
826
827// Scene Fade Table (2 byte address * 42): 0x663e to 0x6691
828const uint16 dsAddr_sceneFadeTablePtr = 0x663e;
829
830// Scene Walkbox Table (2 byte LE address * 42) : 0x6746 to 0x6799
831const uint16 dsAddr_sceneWalkboxTablePtr = 0x6746;
832
833// Scene Zoom Table (2 byte address * 42) : 0x70f4 to 0x7147
834const uint16 dsAddr_sceneZoomTablePtr = 0x70f4;
835
836// Scene Object Table (2 byte address * 42) : 0x7254 to 0x72a7
837const uint16 dsAddr_sceneObjectTablePtr = 0x7254;
838
839// Scene Object Name : Sonny or whatever : 0x92e5 to 0x92f6
840const uint16 dsAddr_scnObjNameSonny = 0x92e5; // "Sonny or whatever"
841
842// Scene Object Name - Anne : 0x9820 to 0x9824
843const uint16 dsAddr_scnObjNameAnne = 0x9820; // "Anne"
844
845// Scene Object Name - Mike : 0xaa94 to 0xaa98
846const uint16 dsAddr_scnObjNameMike = 0xaa94; // "Mike"
847
848// Current Scene Id : 0xb4f3
849const uint16 dsAddr_currentScene = 0xb4f3; // 1 byte
850
851// Ons Animation Table (2 byte address * ??) : 0xb4f5 to 0x????
852const uint16 dsAddr_onsAnimationTablePtr = 0xb4f5;
853
854// Examine Object Callback Table (2 byte LE address * ??) : 0xb5ce to 0x????
855const uint16 dsAddr_objExamineCallbackTablePtr = 0xb5ce;
856
857// Use Object Callback Table (2 byte LE address * ??) : 0xb89c to 0x????
858const uint16 dsAddr_objUseCallbackTablePtr = 0xb89c;
859
860// Inventory Object Callback Table (3 byte (id, callbackAddr) * 7) : 0xbb72 to 0xbb86
861const uint16 dsAddr_objCallbackTablePtr = 0xbb72;
862// invItemToolboxFull = csAddr_openFullToolbox
863// invItemToolboxHalfEmpty = csAddr_openHalfEmptyToolbox
864// invItemDiveEquipment = csAddr_useDivingEquipment
865// invItemShovelAct2 = csAddr_digMansionWall
866// 0xff = csAddr_tooDarkHere // TODO: No object has id 0xff - Callback Disabled?
867// invItemBanknote = csAddr_examineBanknote
868// invItemTimePills = csAddr_useTimePills
869
870// Scene Hotspots Table (2 byte LE address * ??) : 0xbb87 to 0x????
871const uint16 dsAddr_sceneHotspotsPtr = 0xbb87;
872
873// Inventory Object Combining Table (5 byte (id, id, new object id, msgAddr) * 34) : 0xc335 to 0xc3de
874const uint16 dsAddr_objCombiningTablePtr = 0xc335;
875// 3 byte null terminator for Combining table 0xc3df to 0xc3e1
876
877// Object Combine Error Message : 0xc3e2 to 0xc41e
878const uint16 dsAddr_objCombineErrorMsg = 0xc3e2; // "Using these two objects ..."
879
880// Inventory (item ids held by Ego) (1 byte * 24) : 0xc48d to 0xc4a4
881const uint16 dsAddr_inventory = 0xc48d;
882// 0xc4a5 is null word alignment byte
883// Inventory item data address table (2 bytes * 92) : 0xc4a6 to 0xc55d
884const uint16 dsAddr_inventoryItemDataPtrTable = 0xc4a6;
885
886// Lans Animation Table (4 byte * ??) : 0xd89e to 0x????
887const uint16 dsAddr_lansAnimationTablePtr = 0xd89e;
888
889// Spoken With Mansion Guard Flag : 0xda96
890// FIXME - This is probably unnecessary as although this location is set, it
891// doesn't now appear to be read.
892const uint16 dsAddr_spokenWithMansionGuardFlag = 0xda96; // 1 byte
893// Have Not Spoken With Mansion Guard Flag : 0xda97
894// FIXME - This is probably unnecessary as although this location is set, it
895// doesn't now appear to be read.
896const uint16 dsAddr_haveNotSpokenWithMansionGuardFlag = 0xda97; // 1 byte
897
898// Dialog Stack - Pleading with Mansion Guard : 0xdaa6 to 0xdab1
899const uint16 dsAddr_dialogStackPleadingToMansionGuard = 0xdaa6;
900// Dialog Stack - Mansion Guard Drinking : 0xdab2 to 0xdab9
901// FIXME - Can't find where this is used...
902const uint16 dsAddr_dialogStackMansionGuardDrinking = 0xdab2;
903// Dialog Stack - Talking To Sonny : 0xdaba to 0xdac3
904const uint16 dsAddr_dialogStackSonny = 0xdaba;
905// Dialog Stack - Talking To Grandpa : 0xdac4 to 0xdacd
906const uint16 dsAddr_dialogStackGrandpa = 0xdac4;
907// Cave Thorns Cut Down Flag : 0xdaca
908// FIXME - Cave Thorns Flag overlap with dsAddr_dialogStackGrandpa. Bug or typo?
909const uint16 dsAddr_caveThornsCutDownFlag = 0xdaca; // 1 byte
910// Dialog Stack - Trying To Borrow Shotgun From Grandpa : 0xdace to 0xdad3
911const uint16 dsAddr_dialogStackGrandpaShotgun = 0xdace;
912// Dialog Stack - Trying To Borrow Fan From Grandpa : 0xdad4 to 0xdad9
913const uint16 dsAddr_dialogStackGrandpaFan = 0xdad4;
914// Dialog Stack - Ask Old Lady if OK : 0xdada to 0xdaef
915const uint16 dsAddr_dialogStackAskOldLadyOK = 0xdada;
916// Dialog Stack - Talking To Old Lady : 0xdaf0 to 0xdaf5
917const uint16 dsAddr_dialogStackOldLady = 0xdaf0;
918// Dialog Stack - Borrow Duster From Old Lady : 0xdaf6 to 0xdafb
919const uint16 dsAddr_dialogStackBorrowDusterFromOldLady = 0xdaf6;
920// Dialog Stack - Get Old Lady's Apple : 0xdafc to 0xdb01
921const uint16 dsAddr_dialogStackGetAppleOldLady = 0xdafc;
922// Dialog Stack - Giving Another Flower To Anne : 0xdb02 to 0xdb07
923const uint16 dsAddr_dialogStackAnotherFlowerToAnne = 0xdb02;
924// Dialog Stack - Talking To Squirrel : 0xdb08 to 0xdb13
925const uint16 dsAddr_dialogStackSquirrel = 0xdb08;
926// Dialog Stack - Talking To Dog : 0xdb14 to 0xdb1d
927const uint16 dsAddr_dialogStackDog = 0xdb14;
928// Dialog Stack - Take Axe : 0xdb1e to 0xdb23
929const uint16 dsAddr_dialogStackTakeAxe = 0xdb1e;
930// Dialog Stack - Talking To Busy Cook : 0xdb24 to 0xdb2d
931const uint16 dsAddr_dialogStackBusyCook = 0xdb24;
932// Dialog Stack - Talking To Mike the Robot Safe : 0xdb2e to 0xdb35
933const uint16 dsAddr_dialogStackRobotSafe = 0xdb2e;
934// Dialog Stack - Talking To John Noty At Endgame : 0xdb36 to 0xdb3f
935const uint16 dsAddr_dialogStackJohnNotyEndgame = 0xdb36;
936// Dialog Stack - Camp Guard Waiting For Documents : 0xdb40 to 0xdb4b
937const uint16 dsAddr_dialogStackCampGuardWantsDocuments = 0xdb40;
938// Dialog Stack - Camp Guard Reading Soldier News : 0xdb4c to 0xdb55
939const uint16 dsAddr_dialogStackCampGuardReadingNews = 0xdb4c;
940// Dialog Stack - Camp Guard Show Pass : 0xdb56 to 0xdb5b
941const uint16 dsAddr_dialogStackCampGuardShowPass = 0xdb56;
942// Dialog Stack - Jail Door Grates : 0xdb5c to 0xdb67
943const uint16 dsAddr_dialogStackJailDoorGrates = 0xdb5c;
944// Dialog Stack - Talking to Barman : 0xdb68 to 0xdb71
945const uint16 dsAddr_dialogStackBarman = 0xdb68;
946// Dialog Stack - Fall Into Mudpool : 0xdb72 to 0xdb79
947const uint16 dsAddr_dialogStackFallIntoMudpool = 0xdb72;
948// Dialog Stack - Talking To Mudpool Bird : 0xdb7a to 0xdb81
949const uint16 dsAddr_dialogStackMudpoolBird = 0xdb7a;
950// Dialog Stack - Interrogate Captain : 0xdb82 to 0xdb89
951const uint16 dsAddr_dialogStackInterrogateCaptain = 0xdb82;
952// Dialog Stack - Bar Cellar Door : 0xdb8a to 0xdb8f
953const uint16 dsAddr_dialogStackBarCellarDoor = 0xdb8a;
954// Current Music Id Playing : 0xdb90
955const uint16 dsAddr_currentMusic = 0xdb90; // 1 byte
956// Unused Byte : 0xdb91
957// Already Adjusted Hoop Pole Flag : 0xdb92
958const uint16 dsAddr_alreadyAdjustedHoopPoleFlag = 0xdb92; // 1 byte
959// Already Kicked Hen Flag : 0xdb93
960const uint16 dsAddr_alreadyKickedHenFlag = 0xdb93; // 1 byte
961// Already Pulled Trunk Release Lever Flag : 0xdb94
962const uint16 dsAddr_alreadyPulledTrunkReleaseLeverFlag = 0xdb94; // 1 byte
963// Car Trunk Empty Flag : 0xdb95
964const uint16 dsAddr_carTrunkEmptyFlag = 0xdb95; // 1 byte
965// Birds Gone From Scarecrow Flag : 0xdb96
966const uint16 dsAddr_birdsGoneFromScarecrowFlag = 0xdb96; // 1 byte
967// Already Spoken To Anne Flag : 0xdb97
968const uint16 dsAddr_alreadySpokenToAnneFlag = 0xdb97; // 1 byte
969// Flower Isle in Lake State (0 = Both Flowers Present, 1 = One Flower Taken, 2+ = Both Flowers Taken): 0xdb98
970const uint16 dsAddr_flowerIsleState = 0xdb98; // 1 byte
971// Already Got Broken Paddle Flag : 0xdb99
972const uint16 dsAddr_alreadyGotBrokenPaddleFlag = 0xdb99; // 1 byte
973// Given Flower To OldLady Already Flag : 0xdb9a
974const uint16 dsAddr_givenFlowerToOldLadyAlreadyFlag = 0xdb9a; // 1 byte
975// Given Flower To Anne Already Flag : 0xdb9b
976const uint16 dsAddr_givenFlowerToAnneAlreadyFlag = 0xdb9b; // 1 byte
977// Scared Guard Already Flag : 0xdb9c
978const uint16 dsAddr_scaredGuardAlreadyFlag = 0xdb9c; // 1 byte
979// Got Needle Already Flag : 0xdb9d
980const uint16 dsAddr_gotNeedleAlreadyFlag = 0xdb9d; // 1 byte
981// Got Potato Already Flag : 0xdb9e
982const uint16 dsAddr_gotPotatoAlreadyFlag = 0xdb9e; // 1 byte
983// Bees Gone Flag : 0xdb9f
984const uint16 dsAddr_beesGoneFlag = 0xdb9f; // 1 byte
985// Mansion Already Been Through Tunnel Flag : 0xdba0
986const uint16 dsAddr_mansionTunnelDoneFlag = 0xdba0; // 1 byte
987// Mansion Tree Hollow Empty Flag : 0xdba1
988const uint16 dsAddr_mansionTreeHollowEmptyFlag = 0xdba1; // 1 byte
989// Climbed Mansion Tree Already Flag : 0xdba2
990const uint16 dsAddr_climbedMansionTreeAlreadyFlag = 0xdba2; // 1 byte
991// Cellar Door Open Flag : 0xdba3
992const uint16 dsAddr_cellarDoorOpenFlag = 0xdba3; // 1 byte
993// Cellar Light On Flag : 0xdba4
994const uint16 dsAddr_lightOnFlag = 0xdba4; // 1 byte
995// Laundry State (0 = Wet on Line, 1 = Dry on Line, 2 = Not Present): 0xdba5
996const uint16 dsAddr_laundryState = 0xdba5; // 1 byte
997// Lake Diving Exit Message (0 to 5+) : 0xdba6
998const uint16 dsAddr_lakeDivingExitMessage = 0xdba6; // 1 byte
999// Searched Grandpa Drawers Flag : 0xdba7
1000const uint16 dsAddr_SearchedGrandpaDrawersFlag = 0xdba7; // 1 byte
1001// Hankerchief in Mousehole Flag : 0xdba8
1002const uint16 dsAddr_HankerchiefInMouseholeFlag = 0xdba8; // 1 byte
1003// Mouse Hole State : 0xdba9, 0 = Mouse Gone, 1 = Mouse Trapped, 2 = Mouse Success(?)
1004const uint16 dsAddr_mouseHoleState = 0xdba9; // 1 byte
1005// Mouse Nerve Message Said Flag : 0xdbaa
1006const uint16 dsAddr_mouseNerveMsgSaidFlag = 0xdbaa; // 1 byte
1007// Mouse Already Got Gold Nugget Flag : 0xdbab
1008const uint16 dsAddr_mouseGotGoldNuggetFlag = 0xdbab; // 1 byte
1009// Unused Byte : 0xdbac
1010// Dog Has Bone Flag : 0xdbad
1011const uint16 dsAddr_dogHasBoneFlag = 0xdbad; // 1 byte
1012// Ego Already Scared By Spider Flag : 0xdbae
1013const uint16 dsAddr_egoAlreadyScaredBySpiderFlag = 0xdbae; // 1 byte
1014// Already Said That Anne is Beautiful Flag : 0xdbaf
1015const uint16 dsAddr_alreadySaidAnneBeautifulFlag = 0xdbaf; // 1 byte
1016// Squirrel's Nut State (0 = Nut in Tree, 1 = Nut in Grass, 2 = Nut Found with Rake) : 0xdbb0
1017const uint16 dsAddr_squirrelNutState = 0xdbb0; // 1 byte
1018// Nut Swapped For Apple in Fruit Bowl Flag : 0xdbb1
1019const uint16 dsAddr_nutSwappedForAppleFlag = 0xdbb1; // 1 byte
1020// Spoken To Man In Well Flag : 0xdbb2
1021const uint16 dsAddr_spokenToManInWellFlag = 0xdbb2; // 1 byte
1022// Spoken To Mirror Flag : 0xdbb3
1023const uint16 dsAddr_spokenToMirrorFlag = 0xdbb3; // 1 byte
1024// Cellar Shelves Examine Count (0 to 2(clamped))) : 0xdbb4
1025const uint16 dsAddr_cellarShelfExamineCount = 0xdbb4; // 1 byte
1026// Examined Bank Note Flag : 0xdbb5
1027const uint16 dsAddr_examinedBanknoteFlag = 0xdbb5; // 1 byte
1028// VGA Artist Quip Already Said Flag : 0xdbb6
1029const uint16 dsAddr_vgaArtistQuipAlreadySaidFlag = 0xdbb6; // 1 byte
1030// Mansion Desk Blue Drawer Open Flag : 0xdbb7
1031const uint16 dsAddr_blueDrawerOpenFlag = 0xdbb7; // 1 byte
1032// Mansion Desk Red Drawer Open Flag : 0xdbb8
1033const uint16 dsAddr_redDrawerOpenFlag = 0xdbb8; // 1 byte
1034// Mansion Desk Grey Drawer Open Flag : 0xdbb9
1035const uint16 dsAddr_greyDrawerOpenFlag = 0xdbb9; // 1 byte
1036// Mansion Desk Green Drawer Open Flag : 0xdbba
1037const uint16 dsAddr_greenDrawerOpenFlag = 0xdbba; // 1 byte
1038// Mansion Desk Brown Drawer Open Flag : 0xdbbb
1039const uint16 dsAddr_brownDrawerOpenFlag = 0xdbbb; // 1 byte
1040// Mansion Desk Pink Drawer Open Flag : 0xdbbc
1041const uint16 dsAddr_pinkDrawerOpenFlag = 0xdbbc; // 1 byte
1042// Mansion Colored Drawer Puzzle Hint Message Given Flag : 0xdbbd
1043const uint16 dsAddr_drawerPuzzleHintGivenFlag = 0xdbbd; // 1 byte
1044// Mansion Colored Drawer Got Dictaphone Flag : 0xdbbe
1045const uint16 dsAddr_drawerGotDictaphoneFlag = 0xdbbe; // 1 byte
1046// Mansion Colored Drawer Got Polaroid Flag : 0xdbbf
1047const uint16 dsAddr_drawerGotPolaroidFlag = 0xdbbf; // 1 byte
1048// Mansion Colored Drawer Puzzle Book Message Flag : 0xdbc0
1049const uint16 dsAddr_drawerPuzzleBookMessageFlag = 0xdbc0; // 1 byte
1050// Mansion Colored Drawer Puzzle - Random Book Color Value (0 = No Book, 1 to 6 = Books) : 0xdbc1
1051const uint16 dsAddr_drawerPuzzleBookValue = 0xdbc1; // 1 byte
1052// Mansion Colored Drawer Puzzle Solved Flag : 0xdbc2
1053const uint16 dsAddr_drawerPuzzleSolvedFlag = 0xdbc2; // 1 byte
1054// Mansion Trashcan Searched Flag : 0xdbc3
1055const uint16 dsAddr_mansionTrashcanSearchedFlag = 0xdbc3; // 1 byte
1056// Mansion Read Newspaper Flag : 0xdbc4
1057const uint16 dsAddr_mansionReadNewspaperFlag = 0xdbc4; // 1 byte
1058// Mansion TV On Flag : 0xdbc5
1059const uint16 dsAddr_mansionTVOnFlag = 0xdbc5; // 1 byte
1060// Mansion VCR Playing Tape Flag : 0xdbc6
1061const uint16 dsAddr_mansionVCRPlayingTapeFlag = 0xdbc6; // 1 byte
1062// Mansion VCR Played Tape Before Flag : 0xdbc7
1063const uint16 dsAddr_mansionVCRPlayedTapeBeforeFlag = 0xdbc7; // 1 byte
1064// Mansion VCR Tape Loaded Flag : 0xdbc8
1065const uint16 dsAddr_mansionVCRTapeLoadedFlag = 0xdbc8; // 1 byte
1066// Mansion Examined Couch Before Flag : 0xdbc9
1067const uint16 dsAddr_mansionExaminedCouchBeforeFlag = 0xdbc9; // 1 byte
1068// Mansion Used Polaroid on TV Flag : 0xdbca
1069const uint16 dsAddr_usedPolaroidOnTVFlag = 0xdbca; // 1 byte
1070// Mansion Used Dictaphone on TV Flag : 0xdbcb
1071const uint16 dsAddr_usedDictaphoneOnTVFlag = 0xdbcb; // 1 byte
1072// Mansion Cook Gone Flag : 0xdbcc
1073const uint16 dsAddr_MansionCookGoneFlag = 0xdbcc; // 1 byte
1074// Mansion Radio Broken Flag : 0xdbcd
1075const uint16 dsAddr_MansionRadioBrokenFlag = 0xdbcd; // 1 byte
1076// Mansion Got Radio Batteries Flag : 0xdbce
1077const uint16 dsAddr_MansionGotRadioBatteriesFlag = 0xdbce; // 1 byte
1078// Mansion Have Opened Fridge Before Flag : 0xdbcf
1079const uint16 dsAddr_MansionHaveOpenedFridgeBeforeFlag = 0xdbcf; // 1 byte
1080// Mansion Put Burning Paper In Fridge Flag : 0xdbd0
1081const uint16 dsAddr_MansionPutBurningPaperInFridgeFlag = 0xdbd0; // 1 byte
1082// Mansion Robot Safe Unlocked Flag : 0xdbd1
1083const uint16 dsAddr_MansionRobotSafeUnlockedFlag = 0xdbd1; // 1 byte
1084// Mansion Robot Safe Voice Test Passed Flag : 0xdbd2
1085const uint16 dsAddr_MansionRobotSafeVoiceTestPassedFlag = 0xdbd2; // 1 byte
1086// Mansion Robot Safe Scent Test Passed Flag : 0xdbd3
1087const uint16 dsAddr_MansionRobotSafeScentTestPassedFlag = 0xdbd3; // 1 byte
1088// Mansion Robot Safe View Test Passed Flag : 0xdbd4
1089const uint16 dsAddr_MansionRobotSafeViewTestPassedFlag = 0xdbd4; // 1 byte
1090// Mansion John Noty Outside Bathroom Flag : 0xdbd5
1091const uint16 dsAddr_MansionJohnNotyOutsideBathroomFlag = 0xdbd5; // 1 byte
1092// Mansion Sink State (0 - No Plug, Sink Empty, 1 - Plug, Sink Empty, 2 - Plug, Sink Full) : 0xdbd6
1093const uint16 dsAddr_MansionSinkState = 0xdbd6; // 1 byte
1094// Mansion Through Fan By Time Pill Flag : 0xdbd7
1095const uint16 dsAddr_MansionThruFanByTimePillFlag = 0xdbd7; // 1 byte
1096// Mansion Ventilator Fan Stopped Flag : 0xdbd8
1097const uint16 dsAddr_MansionVentFanStoppedFlag = 0xdbd8; // 1 byte
1098// Mansion John Noty Escaping Flag : 0xdbd9
1099const uint16 dsAddr_MansionJohnNotyEscapingFlag = 0xdbd9; // 1 byte
1100// Shown Pass To Guard Flag : 0xdbda
1101const uint16 dsAddr_ShownPassToGuardFlag = 0xdbda; // 1 byte
1102// Graffiti Message Id (0 to 6) : 0xdbdb
1103const uint16 dsAddr_graffitiMsgId = 0xdbdb; // 1 byte
1104// Got Food Bowl in Jail Flag : 0xdbdc
1105const uint16 dsAddr_GotFoodBowlInJailFlag = 0xdbdc; // 1 byte
1106// Jail Cable and Bowl State (0 = Cable not in Bowl, 1 = Cable in Bowl, 2 = Bowl Electrified 3 = Captain Shocked) : 0xdbdd
1107const uint16 dsAddr_JailCableAndBowlState = 0xdbdd; // 1 byte
1108// Got Jail Key Flag : 0xdbde
1109const uint16 dsAddr_GotJailKeyFlag = 0xdbde; // 1 byte
1110// First Act Trial State (0 = Before First Trial, 1 to 3 = Trial 1st to 3rd) : 0xdbdf
1111const uint16 dsAddr_FirstActTrialState = 0xdbdf; // 1 byte
1112// Already Tickled Captain Flag : 0xdbe0
1113const uint16 dsAddr_AlreadyTickledCaptainFlag = 0xdbe0; // 1 byte
1114// Cut Fence Flag : 0xdbe1
1115const uint16 dsAddr_cutFenceFlag = 0xdbe1; // 1 byte
1116// Act 1 Guard State (0 = Normal, 1 = With Kaleidoscope & Grenade, 2 = Kaleidoscope & No Grenade) : 0xdbe2
1117const uint16 dsAddr_act1GuardState = 0xdbe2; // 1 byte
1118// Spoken to Barman About Third Trial Flag : 0xdbe3
1119const uint16 dsAddr_spokeToBarmanAboutThirdTrialFlag = 0xdbe3; // 1 byte
1120// Got Mug Of Mud Flag : 0xdbe4
1121const uint16 dsAddr_gotMugOfMudFlag = 0xdbe4; // 1 byte
1122// Got Rope In Act 1 Flag : 0xdbe5
1123const uint16 dsAddr_gotRopeAct1Flag = 0xdbe5; // 1 byte
1124// Captain Drawer State : 0xdbe6
1125const uint16 dsAddr_captainDrawerState = 0xdbe6; // 1 byte
1126// Bird on Bar Radio Antenna Flag : 0xdbe7
1127const uint16 dsAddr_birdOnBarRadioAntennaFlag = 0xdbe7; // 1 byte
1128// Swapped Barman Mug Flag : 0xdbe8
1129const uint16 dsAddr_swappedBarmanMugFlag = 0xdbe8; // 1 byte
1130// Barman Passed Out Flag : 0xdbe9
1131const uint16 dsAddr_barmanPassedOutFlag = 0xdbe9; // 1 byte
1132// Counter for Mansion Intrusion Attempts : 0xdbea
1133const uint16 dsAddr_mansionEntryCount = 0xdbea;// 1 byte
1134// Unused Byte : 0xdbeb
1135// John Noty Outside Mansion Door Flag : 0xdbec
1136const uint16 dsAddr_johnNotyOutsideMansionDoorFlag = 0xdbec; // 1 byte
1137// Unused Byte : 0xdbed
1138// Lovestruck By Anne Flag : 0xdbee
1139const uint16 dsAddr_lovestruckByAnneFlag = 0xdbee;// 1 byte
1140// Mansion Handle in Door Hole Flag : 0xdbef
1141const uint16 dsAddr_mansionHandleInDoorHoleFlag = 0xdbef;// 1 byte
1142// Got Password Need to Speak To Barman Flag : 0xdbf0
1143const uint16 dsAddr_gotPasswordNeedSpeakBarmanFlag = 0xdbf0; // 1 byte
1144// Mansion Already Used Time Pills Flag : 0xdbf1
1145const uint16 dsAddr_mansionAlreadyUsedTimePillsFlag = 0xdbf1; // 1 byte
1146
1147// Intro Credits #1 : 0xe3c2 to 0xe3e5 (Read Only)
1148const uint16 dsAddr_introCredits1 = 0xe3c2; // "backgrounds ..."
1149// Intro Credits #2 : 0xe3e6 to 0xe3fe (Read Only)
1150const uint16 dsAddr_introCredits2 = 0xe3e6; // "music ..."
1151// Intro Credits #3 : 0xe3ff to 0xe42e (Read Only)
1152const uint16 dsAddr_introCredits3 = 0xe3ff; // "animation..."
1153// Intro Credits #4 : 0xe42f to 0xe45b (Read Only)
1154const uint16 dsAddr_introCredits4 = 0xe42f; // "programming..."
1155// Credits #5 : 0xe45c to 0xe47b (Read Only)
1156const uint16 dsAddr_credits5 = 0xe45c; // "after the tiring journey..."
1157// Final Credits #6 : 0xe47c to 0xe487 (Read Only)
1158const uint16 dsAddr_finalCredits6 = 0xe47c; // "THE END..."
1159// Final Credits #7 : 0xe488 to 0xe782 (Read Only)
1160const uint16 dsAddr_finalCredits7 = 0xe488; // "programming..."
1161// 0xe783 to 0xe78f: 13 null bytes at end of dseg data - segment alignment padding?
1162
1163const byte kNumDialogStacks = 26;
1164
1165// Values in the enum below should match those defined in the Language enum
1166// in create_teenagent.h
1167namespace DataLanguage {
1168enum : byte {
1169 CS_CZE = 3,
1170 EN_ANY = 7,
1171 PL_POL = 27,
1172 RU_RUS = 30,
1173};
1174}
1175
1176enum MessageType{
1177 kRejectMsg0 = 0,
1178 kRejectMsg1,
1179 kRejectMsg2,
1180 kRejectMsg3,
1181 kCoolMsg,
1182 kObjErrorMsg,
1183 kCarJackMsg,
1184 kSpannerMsg,
1185 kLastChanceMsg,
1186 kGiveUpMsg,
1187 kAvoidBeesMsg,
1188 kBoatEmptyMsg,
1189 kTooHardWoodMsg,
1190 kBooMsg,
1191 kDontPushLuckMsg,
1192 kOrdinaryHaystackMsg,
1193 kNeedleHaystackMsg,
1194 kNoPotatoMsg,
1195 kTrousersMsg,
1196 kLifeIsBrutalMsg,
1197 kLifeBrutalMsg,
1198 kTickledMsg,
1199 kItsGoneMsg,
1200 kMonstersMsg,
1201 kNoHandsMsg,
1202 kTotalEmptyMsg,
1203 kOneSmallStepMsg,
1204 kNoChanceMsg,
1205 kDinoBoneMsg,
1206 kWallShakenMsg,
1207 kKindaDarkMsg,
1208 kNotInDarkMsg,
1209 kShutValveMsg,
1210 kNeedSunglassesMsg,
1211 kNotBestPlaceMsg,
1212 kNotHereMsg,
1213 kCantTalkUnderwaterMsg,
1214 kNotSwimmingThereMsg,
1215 kTooLittleAirMsg,
1216 kHookedAnchorMsg,
1217 kSeaweedMsg,
1218 kFishBoatMsg,
1219 kFishSomethingMsg,
1220 kFishDontWorryMsg,
1221 kNotRedHerringMsg,
1222 kNiceDownMsg,
1223 kHeyLetGoMsg,
1224 kAaahhhMsg,
1225 kOopsMsg,
1226 kFoundFoodMsg,
1227 kComeHereMsg,
1228 kCantCatchMsg,
1229 kTrappedMouseMsg,
1230 kYikesMsg,
1231 kMouseNerveMsg,
1232 kDrawersEmptyMsg,
1233 kRidBushMsg,
1234 kMouseGoneMsg,
1235 kNonsenseMsg,
1236 kGoodDoggyMsg,
1237 kHereBoyMsg,
1238 kFriendsNowMsg,
1239 kNotThinkRightPlaceMsg,
1240 kCutsceneMsgA,
1241 kCutsceneMsgB,
1242 kFoundCrudeOilMsg,
1243 kMyLifeMsg,
1244 kConfusionMsg,
1245 kGrandpaPromiseMsg,
1246 kOhLetsGoMsg,
1247 kByeMsg,
1248 kNoNeedMsg,
1249 kGirlTalkMsg,
1250 kDontWorkPurposeMsg,
1251 kNutRealMsg,
1252 kHenFlyMsg,
1253 kFirstTestFailMsg,
1254 kRidFrustationsMsg,
1255 kRoadNowhereMsg,
1256 kOpenBootMsg,
1257 kShutTightMsg,
1258 kBootEmptyMsg,
1259 kClothesDryMsg,
1260 kCrowKillMsg,
1261 kGetRidOfGuardFirstMsg,
1262 kWallTooSmoothMsg,
1263 kTooMuchResinToClimbMsg,
1264 kOnlyGreenRectMsg,
1265 kDontWannaTouchHedgehogMsg,
1266 kNotHungryMsg,
1267 kNoLongHandsMsg,
1268 kTooFarToSwimMsg,
1269 kEchoMsg,
1270 kLoudEchoMsg,
1271 kWhoThereMsg,
1272 kLoudWhoThereMsg,
1273 kDontCopyMsg,
1274 kLoudDontCopyMsg,
1275 kThrowRockMsg,
1276 kOrIWillMsg,
1277 kStillThereMsg,
1278 kNoBucketMsg,
1279 kDontNeedToOpenMsg,
1280 kHmmGrassMsg,
1281 kFindNutMsg,
1282 kNotHornyMsg,
1283 kCantJumpMsg,
1284 kDontNeedItMsg,
1285 kNotSantaClausMsg,
1286 kNoPlasticImitationsMsg,
1287 kTooFragileMsg,
1288 kKeepItOpenMsg,
1289 kNotTakingSocksMsg,
1290 kNotTiredMsg,
1291 kTooBigMsg,
1292 kNoSecretPassageMsg,
1293 kNoFruitMsg,
1294 kJugMeMsg,
1295 kLeaveFlowersAloneMsg,
1296 kMirrorMirrorMsg,
1297 kThinkTooLongMsg,
1298 kHintMaleMsg,
1299 kOkWaitMsg,
1300 kBusyThinkingMsg,
1301 kNoDentistsMsg,
1302 kTooHeavyMsg,
1303 kWhatGotMsg,
1304 kStrawberryJamMsg,
1305 kGooseberryJamMsg,
1306 kBlackberryJamMsg,
1307 kBilberryJamMsg,
1308 kGetMeOutJamMsg,
1309 kRosemaryJamMsg,
1310 kKnowRosemaryMsg,
1311 kUnwantedJamsMsg,
1312 kTooDarkMsg,
1313 kYeowMsg,
1314 kYawnMsg,
1315 kLaughterMsg,
1316 kNoHandsSharpThornsMsg,
1317 kNoChainsawFuelMsg,
1318 kThornsTooThinMsg,
1319 kRockWalkingGeeMsg,
1320 kButterflyMsg,
1321 kNotSureIfAliveMsg,
1322 kUnknownLanguageMsg,
1323 kHoleTooNarrowMsg,
1324 kBirdAttackMsg,
1325 kNoSearchWarrantMsg,
1326 kUninterestingHaystackMsg,
1327 kMoreComplicatedMsg,
1328 kNutRakeMsg,
1329 kPaddleBrokenMsg,
1330 kBranchNotPaddleMsg,
1331 kTrySomewhereElseMsg,
1332 kSharpenNotPulverizeMsg,
1333 kCantDoTooDarkMsg,
1334 kBribeMsg,
1335 kBankNoteMsg,
1336 kShowHerMoneyMsg,
1337 kHundredBucksMsg,
1338 kWantBloodMsg,
1339 kDontLeaveMansionMsg,
1340 kWimpMsg,
1341 kStrangeDrawerMsg,
1342 kNotOrdinaryDrawersMsg,
1343 kDrawerOpenMsg,
1344 kBlueInteriorMsg,
1345 kRedInteriorMsg,
1346 kGreyInteriorMsg,
1347 kGreenInteriorMsg,
1348 kBrownInteriorMsg,
1349 kPinkInteriorMsg,
1350 kDictaphoneInsideMsg,
1351 kFoundPolaroidMsg,
1352 kBookHeldMsg,
1353 kSecretCompartmentMsg,
1354 kDontMessMsg,
1355 kFullAutomaticMsg,
1356 kNoMoreSheetsMsg,
1357 kNoDepraveMsg,
1358 kNoReadAgainMsg,
1359 kTvOffMsg,
1360 kNotHappenMsg,
1361 kTapeStartedMsg,
1362 kMuchBetterMsg,
1363 kNoSleepMsg,
1364 kJustCorkMsg,
1365 kEnoughPhotosMsg,
1366 kRecordScareMsg,
1367 kAlreadyRecordedMsg,
1368 kCantRecordNoBatteriesMsg,
1369 kNoBatteriesNoFunMsg,
1370 kNotRightMomentMsg,
1371 kCookAroundMsg,
1372 kSameBottleMsg,
1373 kBreakFlattenMsg,
1374 kWhatInsideMsg,
1375 kRestUselessMsg,
1376 kTwoBatteriesMsg,
1377 kOneTakenMsg,
1378 kSlightMadMsg,
1379 kPaperBurntMsg,
1380 kBurnBabyMsg,
1381 kVoilaMsg,
1382 kTooHotMsg,
1383 kFrozenShelfMsg,
1384 kYummyMsg,
1385 kDislikeVealMsg,
1386 kNoReasonMsg,
1387 kFooledOnceMsg,
1388 kMikeVoiceTestMsg,
1389 kNotMyVoiceMsg,
1390 kSingingMsg,
1391 kMikeScentTestMsg,
1392 kMikeViewTestMsg,
1393 kCutsceneMsg0,
1394 kCantHideMsg,
1395 kJohnOutsideMsg,
1396 kWasCloseMsg,
1397 kCorkInHoleMsg,
1398 kFitsPerfectMsg,
1399 kEnoughWaterMsg,
1400 kNoHotWaterMsg,
1401 kLabelOffMsg,
1402 kCorkTooSmallMsg,
1403 kNotTryNowMsg,
1404 kNoSaladMsg,
1405 kNahMsg,
1406 kVentFirstMsg,
1407 kCatchJohnFirstMsg,
1408 kOnlyChilliMsg,
1409 kWaterHotMsg,
1410 kSinkFullMsg,
1411 kNoSockStoreMsg,
1412 kShowPapersMsg,
1413 kGotPermissionMsg,
1414 kSavingFineMsg,
1415 kLoveCaptainMsg,
1416 kSoccerRulzMsg,
1417 kTreeCutMsg,
1418 kVisaAcceptedMsg,
1419 kOtherGraffitiMsg,
1420 kFirstTrialMsg,
1421 kLockedMsg,
1422 kThanksMsg,
1423 kUnkUsageMsg,
1424 kIdeaMsg,
1425 kCheckWorksMsg,
1426 kTimeToCallMsg,
1427 kMealFinishedMsg,
1428 kBowlWeldedMsg,
1429 kGotchaMsg,
1430 kNoPocketMsg,
1431 kDoesNotWorkMsg,
1432 kFnMsg1,
1433 kFnMsg2,
1434 kFnMsg3,
1435 kFnMsg4,
1436 kPullObjMsg1,
1437 kDontWantToTouchMsg,
1438 kFenceBlocksMsg,
1439 kNotWantToSleepMsg,
1440 kPullObjMsg2,
1441 kHelloQMsg,
1442 kTotallyAddictedMsg,
1443 kWhatAboutMsg,
1444 kHotOffMsg,
1445 kFullColorMsg,
1446 kSpecialEdMsg,
1447 kSoldierNewsMsg,
1448 kPoleClimbDoneMsg,
1449 kVacMsg,
1450 kCutsceneMsg1,
1451 kCutsceneMsg2,
1452 kNowOpenMsg,
1453 kCmonBabyMsg,
1454 kTalkNotNowMsg,
1455 kYeahRightMsg,
1456 kBarmanTooCloseMsg,
1457 kYuckMsg,
1458 kPreferWaterMsg,
1459 kTooWeakToClimbMsg,
1460 kSpringPrickMsg,
1461 kFoodAliveMsg,
1462 kDoorClosedMsg,
1463 kEmptyMsg,
1464 kGeographyClassMsg,
1465 kDontNeedMessMsg,
1466 kSeenSofterRocksMsg,
1467 kTooBluntMsg,
1468 kUselessModelsMsg,
1469 kBarmanWillNoticeMsg,
1470 kTooMuchToDrinkMsg,
1471 kNotThiefMsg,
1472 kTooManyToSearchMsg,
1473 kCaptainWouldNotFitMsg,
1474 kChickenNeverMsg,
1475 kCantOpenItMsg,
1476 kDontNeedThemMsg,
1477 kPeepingTomMsg,
1478 kBigPocketsMsg,
1479 kTroubleWithStairsMsg,
1480 k9LivesToReadMsg,
1481 kThanksNotTiredMsg,
1482 kNoNeedToTurnOnMsg,
1483 kWontBearWeightMsg,
1484 kNeverLearntMsg,
1485 kSoSharpMsg,
1486 kCognacMsg,
1487 kNoTimeForPleasuresMsg,
1488 kNotSocksWithBareHandsMsg,
1489 kNotHalloweenMsg,
1490 kNotManualMsg,
1491 kNothingToPlayMsg,
1492 kNotMineMsg,
1493 kHeyWtmQMsg,
1494 kItsOpenMsg,
1495 kOutOfOrderMsg,
1496 kCaptainWatchingMsg,
1497 kBluntSickleMsg,
1498 kFirstBusinessMsg,
1499 kNoDiggingKnifeMsg,
1500 kNoMessOnTableMsg,
1501 kThrowCrumbsToBirdQMsg,
1502 kDontWasteCrumbsMsg,
1503 kMightSlipFallInMsg,
1504 kBookColorMsg0,
1505 kBookColorMsg1,
1506 kBookColorMsg2,
1507 kBookColorMsg3,
1508 kBookColorMsg4,
1509 kBookColorMsg5,
1510
1511 kObjCombineErrorMsg,
1512};
1513
1514// Number of resources in teenagent.dat file
1515const byte kNumResources = 7;
1516
1517enum ResourceType {
1518 kResDialogStacks = 0,
1519 kResDialogs,
1520 kResItems,
1521 kResCredits,
1522 kResSceneObjects,
1523 kResMessages,
1524 kResCombinations,
1525};
1526
1528 byte _id;
1529 uint32 _offset;
1530 uint32 _size;
1531};
1532
1534public:
1535 Resources();
1536 ~Resources();
1537 bool loadArchives(const ADGameDescription *gd);
1538
1539 void loadOff(Graphics::Surface &surface, byte *palette, int id);
1540 Common::SeekableReadStream *loadLan(uint32 id) const;
1541 Common::SeekableReadStream *loadLan000(uint32 id) const;
1542
1543 /*
1544 * PSP (as the other sony playstation consoles - to be confirmed and 'ifdef'ed here too)
1545 * is very sensitive to the number of simultaneously opened files.
1546 * This is an attempt to reduce their number to zero.
1547 * TransientFilePack does not keep opened file descriptors and reopens it on each request.
1548 */
1549#ifdef __PSP__
1550 TransientFilePack off, on, ons, lan000, lan500, sam_mmm, sam_sam, mmm, voices;
1551#else
1552 FilePack off, on, ons, lan000, lan500, sam_mmm, sam_sam, mmm, voices;
1553#endif
1554
1555 Segment dseg;
1556 Font font7, font8;
1557
1558 //const byte *getDialog(uint16 dialogNum) { return eseg.ptr(dialogOffsets[dialogNum]); }
1559 uint32 getDialogStartPos() { return _dialogsStartOffset; }
1560 uint32 getDialogAddr(uint16 dialogNum) { return dialogOffsets[dialogNum]; }
1561 uint32 getCreditAddr(uint16 creditNum) { return creditsOffsets[creditNum]; }
1562 uint32 getItemAddr(uint16 itemNum) { return itemOffsets[itemNum]; }
1563 uint32 getMessageAddr(MessageType msgType) { return messageOffsets[msgType]; }
1564 uint32 getCombinationAddr(uint16 msgNum) { return combinationOffsets[msgNum]; }
1565
1566 uint16 sceneObjectsBlockSize() { return _sceneObjectsBlockSize; }
1567 uint32 getSceneObjectsStartPos() { return _sceneObjectsStartOffset; }
1568
1569 uint16 getVoiceIndex(uint32 addr) {
1570 if (_addrToVoiceIndx.contains(addr))
1571 return _addrToVoiceIndx[addr];
1572 return 0;
1573 }
1574 void setVoiceIndex(uint32 addr, uint16 index) { _addrToVoiceIndx[addr] = index; }
1575
1576 // Artificial segment that contains various
1577 // string items (messages, dialogs, item names, etc.)
1578 // Used to support multiple languages
1579 Segment eseg;
1580
1581private:
1582 void precomputeAllOffsets(const Common::Array<ResourceInfo> &resourceInfos);
1583 void precomputeResourceOffsets(const ResourceInfo &resInfo, Common::Array<uint32> &offsets, uint numTerminators = 2);
1584
1585 void precomputeDialogOffsets(const ResourceInfo &resInfo);
1586 void precomputeCreditsOffsets(const ResourceInfo &resInfo);
1587 void precomputeItemOffsets(const ResourceInfo &resInfo);
1588 void precomputeMessageOffsets(const ResourceInfo &resInfo);
1589 void precomputeCombinationOffsets(const ResourceInfo &resInfo);
1590
1591 void precomputeVoiceIndices(const Common::Array<ResourceInfo> &resourceInfos);
1592 bool isVoiceIndexEmpty(uint16 index);
1593
1594 void readDialogStacks(byte *src);
1595
1596 Common::Array<uint32> dialogOffsets;
1597 Common::Array<uint32> creditsOffsets, itemOffsets;
1598 Common::Array<uint32> messageOffsets;
1599 Common::Array<uint32> combinationOffsets;
1600
1601 uint32 _sceneObjectsStartOffset;
1602 uint32 _sceneObjectsBlockSize; // Needed to know how much to write to savefile
1603
1604 uint32 _dialogsStartOffset;
1605
1606 Common::HashMap<uint32, uint16> _addrToVoiceIndx;
1607};
1608
1609} // End of namespace TeenAgent
1610
1611#endif
Definition: array.h:52
Definition: stream.h:745
FilePack keeps opened file and returns substream for each request.
Definition: pack.h:47
Definition: font.h:32
Definition: resources.h:1533
Definition: segment.h:30
Definition: pack.h:66
bool contains(const Key &key) const
Definition: hashmap.h:598
Definition: actor.h:32
Definition: advancedDetector.h:164
Definition: surface.h:67
Definition: resources.h:1527