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