ScummVM API documentation
shared.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 LASTEXPRESS_SHARED_H
23#define LASTEXPRESS_SHARED_H
24
25#include "common/func.h"
26
27namespace LastExpress {
28
30// Sound
32
33enum SoundTag : uint {
34 kSoundTagNone = 0,
35 kSoundTagAmbient = 1,
36 kSoundTagOldAmbient = 2,
37 kSoundTagWalla = 3,
38 kSoundTagOldWalla = 4,
39 kSoundTagConcert = 5,
40 // 6 is unused
41 kSoundTagLink = 7,
42 kSoundTagOldLink = 8,
43 kSoundTagNIS = 9,
44 kSoundTagOldNIS = 10,
45 kSoundTagIntro = 11,
46 // 12 is unused
47 kSoundTagMenu = 13,
48 kSoundTagOldMenu = 14,
49 kSoundTagCredits = 15,
50 kSoundTagFirstNormal = 16
51 // every normal sound gets its own tag from an incrementing counter
52 // initialized as kSoundTagFirstNormal,
53 // so tags can have values not covered by this enum
54};
55
56/*
57 These are the flags used by the original game
58 to keep track of sound entry status.
59
60 They are directly exposed via savefiles,
61 so we should be aware of them
62 even though we don't use some of them internally.
63
64 Sound playback is asynchronous.
65 We have threads and mutexes for synchronization,
66 DOS games have main code and IRQ/interrupt handlers instead,
67 some flags come in pairs to deal with this:
68 the main code sets kSoundFlagXxxRequested as a signal
69 to the interrupt handler, the interrupt handler processes it
70 (e.g. stops using the associated buffer for Close and Mute requests)
71 and sets the corresponding result flag. The main code can proceed then
72 (e.g. release the associated buffer).
73
74 The original game has a limited number of sound buffers (namely, 6)
75 (plus 16 versions of ADPCM decoder in assembly language,
76 one for every non-zero volume, so I suppose the performance was an issue).
77 The original game has also many events that could happen in different areas
78 of the train at the same time, some of them are synchronized via the sound
79 (kCharacterActionEndSound). To deal with it, the original game uses kSoundFlagMute:
80 muted sounds don't have their own buffer, don't participate in mixing the channels,
81 but the interrupt handler still tracks their progress.
82 Non-audible sounds (e.g. because the corresponding event goes on in another car)
83 are always muted; if the number of audible sounds exceeds the number of buffers,
84 least-priority sounds are muted as well (the priority is the sum of a static
85 constant from the entry constructor and the current volume).
86
87 Normally the sound duration is read from (one of the fields
88 in the header of) the associated file. However, if the sound entry
89 is started as muted, the buffer is not allocated and no data are read;
90 in this case, the duration is estimated from file size.
91 Since HPF archives store all sizes as counts of 0x800-byte blocks,
92 this loses some precision, but nothing to really care about.
93 If a started-as-muted sound is unmuted later (Cath enters the car
94 where a dialog takes place), the exact duration is loaded from the file;
95 kSoundFlagHeaderProcessed says that the duration is exact.
96
97 We have more sound channels available, we are not so limited
98 by the performance, and we lose some control of how exactly the backend
99 processes the sound as a payment for portability, so we can afford
100 to just mix the silence without special processing of muted entries.
101*/
102enum SoundFlag : uint {
103 kSoundVolumeEntityDefault = 0xFFFFFFFF, // special value for SoundManager::playSound; choose volume based on distance to the character
104
105 kVolumeNone = 0x0,
106 kVolume1 = 0x1,
107 kVolume2 = 0x2,
108 kVolume3 = 0x3,
109 kVolume4 = 0x4,
110 kVolume5 = 0x5,
111 kVolume6 = 0x6,
112 kVolume7 = 0x7,
113 kVolume8 = 0x8,
114 kVolume9 = 0x9,
115 kVolume10 = 0xA,
116 kVolume11 = 0xB,
117 kVolume12 = 0xC,
118 kVolume13 = 0xD,
119 kVolume14 = 0xE,
120 kVolume15 = 0xF,
121 kVolumeFull = 0x10,
122
123 kSoundVolumeMask = 0x1F,
124
125 kSoundFlagPlayRequested = 0x20,
126 kSoundFlagPlaying = 0x40, // IRQ handler has seen kSoundFlagPlayRequested and has started the playback
127 kSoundFlagMuteRequested = 0x80,
128 kSoundFlagMuteProcessed = 0x100, // IRQ handler has seen kSoundFlagMuteRequested
129 kSoundFlagMute = kSoundFlagMuteRequested | kSoundFlagMuteProcessed,
130 kSoundFlagCloseRequested = 0x200, // close requested, waiting for IRQ handler to confirm
131 kSoundFlagClosed = 0x400, // IRQ handler has seen kSoundFlagClosing and is completely done with this sound
132 kSoundFlagCloseOnDataEnd = 0x800, // used as the opposite of kSoundFlagLooped
133 kSoundFlagLooped = 0x1000,
134 kSoundFlagCyclicBuffer = 0x2000, // when the decoder reaches the end of buffer, the decoder should continue from the beginning of buffer
135 kSoundFlagHasUnreadData = 0x4000, // stream has more data
136 kSoundFlagDelayedActivate = 0x8000, // start playing at _activateTime
137 kSoundFlagHasLinkAfter = 0x10000, // _linkAfter is valid and should be activated after this sound; used by xxx.NIS sounds for xxx.LNK
138 kSoundFlagHasSubtitles = 0x20000,
139 kSoundFlagPaused = 0x40000, // IRQ handler has seen kSoundFlagPauseRequested and does not use the buffer anymore
140 kSoundFlagFixedVolume = 0x80000, // Turns off the logic of volume adjusting for character-related sounds when distance to character is changed
141 kSoundFlagVolumeChanging = 0x100000, // smooth changing of the volume is in progress
142 kSoundFlagHeaderProcessed = 0x200000, // count of blocks is the accurate value from the header
143 kSoundFlagPauseRequested = 0x400000, // used when the reader needs to change the buffer
144 kSoundFlagDecodeStall = 0x800000, // the decoder has stopped because the reader is too slow and has not yet provided further data
145
146 kSoundTypeNormal = 0x0000000, // everything not included in any specific category
147 kSoundTypeAmbient = 0x1000000, // train sounds, steam, wind, restaurant sounds
148 kSoundTypeConcert = 0x2000000, // 1917.LNK
149 kSoundTypeMenu = 0x3000000, // menu screen, blinking egg after time travel; excluded from savefiles
150 kSoundTypeLink = 0x4000000, // xxx.LNK linked after NIS sound, except for 1917.LNK
151 kSoundTypeIntro = 0x5000000, // intro at game start before showing the menu
152 kSoundTypeWalla = 0x6000000, // LOOP8A.SND by kCharacterTableC
153 kSoundTypeNIS = 0x7000000, // special entry managed by NIS code
154
155 kSoundTypeMask = 0x7000000,
156
157 kSoundFlagKeepAfterFinish = 0x8000000, // don't free the entry when it has stopped playing; used for kSoundTypeNIS
158 kSoundFlagDecodeError = 0x20000000, // error in compressed stream
159 kSoundFlagFading = 0x40000000, // prevents attempts to unfade once fade is requested
160 kSoundFlagUnmuteRequested = 0x80000000 // purely informational
161};
162
163enum AmbientSoundState : uint {
164 kAmbientSoundEnabled = 1,
165 kAmbientSoundSteam = 2,
166 kAmbientLooping = 69
167};
168
169enum SoundDriverFlag : uint {
170 kSoundDriverInitState = 0x1,
171 kSoundDriverNISHasRequestedDelay = 0x2,
172 kSoundDriverClearBufferRequested = 0x4,
173 kSoundDriverClearBufferProcessed = 0x8,
174 kSoundDriverNISHasRequestedFade = 0x20,
175 kSoundDriverStarted = 0x8000
176};
177
178enum MouseFlags : int {
179 kMouseFlagLeftButton = 0x1,
180 kMouseFlagRightButton = 0x2,
181 kMouseFlagLeftDown = 0x8,
182 kMouseFlagRightDown = 0x10,
183 kMouseFlagDoubleClick = 0x20,
184 kMouseFlagLeftUp = 0x80,
185 kMouseFlagRightUp = 0x100
186};
187
188enum EventChannel : int {
189 kEventChannelMouse = 1,
190 kEventChannelTimer = 3,
191 kEventChannelEngine = 4
192};
193
194enum NisFlags : uint {
195 kNisFlagHasSound = 0x1, // Set when a valid NIS sound exists
196 kNisFlagDataChunksAvailable = 0x100, // Used during initialization and chunk loading
197 kNisFlagPlaying = 0x200, // NIS is currently playing
198 kNisFlagBaseFlag = 0x4000, // Flag with which doNIS is always called
199 kNisFlagSoundFade = 0x8000, // Flag for sound fading operations
200 kNisFlagSoundInitialized = 0x40000, // First sound chunk has been loaded and initialized
201 kNisFlagAbortRequested = 0x80000 // Abort has been requested (e.g., via right mouse click)
202};
203
204enum NISEventTypes : uint {
205 kNISEventNone = 0,
206 kNISEventUnknown1 = 1,
207 kNISEventUnknown2 = 2,
208 kNISEventAudioInfo = 3,
209 kNISEventUnknown4 = 4,
210 kNISEventUnknown5 = 5,
211 kNISEventBackground1 = 10,
212 kNISEventSelectBackground1 = 11,
213 kNISEventBackground2 = 12,
214 kNISEventSelectBackground2 = 13,
215 kNISEventOverlay = 20,
216 kNISEventUpdate = 21,
217 kNISEventUpdateTransition = 22,
218 kNISEventSound1 = 30,
219 kNISEventSound2 = 31,
220 kNISEventAudioData = 32,
221 kNISEventAudioEnd = 99
222};
223
224enum SubtitlesFlags : int32 {
225 kSubFlagDrawOnScreen = 0x1,
226 kSubFlagLoaded = 0x2,
227 kSubFlagStatusKilled = 0x400
228};
229
231// Time values
233
234// Time is measured in ticks, with 15 ticks per second. One minute is 900
235// ticks, one hour is 54,000 ticks, and one day is 1,296,000 ticks.
236
237enum TimeValue : uint {
238 kTimeNone = 0,
239 kTime5933 = 5933,
240
241 kTimeCityParis = 1037700, // Day 1, 19:13
242 kTime1039500 = 1039500, // Day 1, 19:15
243 kTimeStartGame = 1061100, // Day 1, 19:39
244
245 // Chapter 1
246 kTimeChapter1 = 1062000, // Day 1, 19:40
247 kTime1071000 = 1071000, // Day 1, 19:50
248 kTimeParisEpernay = 1075500, // Day 1, 19:55
249 kTime1080000 = 1080000, // Day 1, 20:00
250 kTime1084500 = 1084500, // Day 1, 20:05
251 kTime1089000 = 1089000, // Day 1, 20:10
252 kTime1093500 = 1093500, // Day 1, 20:15
253 kTime1094400 = 1094400, // Day 1, 20:16
254 kTime1096200 = 1096200, // Day 1, 20:18
255 kTime1098000 = 1098000, // Day 1, 20:20
256 kTime1102500 = 1102500, // Day 1, 20:25
257 kTime1107000 = 1107000, // Day 1, 20:30
258 kTime1111500 = 1111500, // Day 1, 20:35
259 kTime1120500 = 1120500, // Day 1, 20:45
260 kTime1125000 = 1125000, // Day 1, 20:50
261 kTime1134000 = 1134000, // Day 1, 21:00
262 kTime1138500 = 1138500, // Day 1, 21:05
263 kTime1143000 = 1143000, // Day 1, 21:10
264 kTimeEnterEpernay = 1147500, // Day 1, 21:15
265 kTimeCityEpernay = 1148400, // Day 1, 21:16
266 kTimeExitEpernay = 1150200, // Day 1, 21:18
267 kTime1156500 = 1156500, // Day 1, 21:25
268 kTime1161000 = 1161000, // Day 1, 21:30
269 kTime1162800 = 1162800, // Day 1, 21:32
270 kTime1165500 = 1165500, // Day 1, 21:35
271 kTime1167300 = 1167300, // Day 1, 21:37
272 kTimeEnterChalons = 1170000, // Day 1, 21:40
273 kTimeCityChalons = 1170900, // Day 1, 21:41
274 kTimeExitChalons = 1173600, // Day 1, 21:44
275 kTime1174500 = 1174500, // Day 1, 21:45
276 kTime1179000 = 1179000, // Day 1, 21:50
277 kTime1183500 = 1183500, // Day 1, 21:55
278 kTime1184400 = 1184400, // Day 1, 21:56
279 kTime1188000 = 1188000, // Day 1, 22:00
280 kTime1189800 = 1189800, // Day 1, 22:02
281 kTime1192500 = 1192500, // Day 1, 22:05
282 kTime1197000 = 1197000, // Day 1, 22:10
283 kTime1201500 = 1201500, // Day 1, 22:15
284 kTime1206000 = 1206000, // Day 1, 22:20
285 kTime1215000 = 1215000, // Day 1, 22:30
286 kTime1224000 = 1224000, // Day 1, 22:40
287 kTime1225800 = 1225800, // Day 1, 22:42
288 kTimeCityBarLeDuc = 1228500, // Day 1, 22:45
289 kTimeExitBarLeDuc = 1231200, // Day 1, 22:48
290 kTime1233000 = 1233000, // Day 1, 22:50
291 kTime1242000 = 1242000, // Day 1, 23:00
292 kTime1260000 = 1260000, // Day 1, 23:20
293 kTimeCityNancy = 1303200, // Day 2, 00:08
294 kTimeExitNancy = 1307700, // Day 2, 00:13
295 kTime1323000 = 1323000, // Day 2, 00:30
296 kTimeCityLuneville = 1335600, // Day 2, 00:44
297 kTimeExitLuneville = 1338300, // Day 2, 00:47
298 kTimeCityAvricourt = 1359900, // Day 2, 01:11
299 kTimeExitAvricourt = 1363500, // Day 2, 01:15
300 kTimeCityDeutschAvricourt = 1367100, // Day 2, 01:19
301 kTimeExitDeutschAvricourt = 1370700, // Day 2, 01:23
302 kTime1386000 = 1386000, // Day 2, 01:40
303 kTimeBedTime = 1404000, // Day 2, 02:00
304 kTime1417500 = 1417500, // Day 2, 02:15
305 kTimeEnterStrasbourg = 1424700, // Day 2, 02:23
306 kTime1449000 = 1449000, // Day 2, 02:50
307 kTime1458000 = 1458000, // Day 2, 03:00
308 kTime1485000 = 1485000, // Day 2, 03:30
309 kTime1489500 = 1489500, // Day 2, 03:35
310 kTimeCityStrasbourg = 1490400, // Day 2, 03:36
311 kTime1492200 = 1492200, // Day 2, 03:38
312 kTimeExitStrasbourg = 1493100, // Day 2, 03:39
313 kTimeChapter1End = 1494000, // Day 2, 03:40
314 kTime1503000 = 1503000, // Day 2, 03:50
315 kTime1512000 = 1512000, // Day 2, 04:00
316 kTimeCityBadenOos = 1539000, // Day 2, 04:30
317 kTimeExitBadenOos = 1541700, // Day 2, 04:33
318 kTimeCityKarlsruhe = 1563300, // Day 2, 04:57
319 kTimeCityStuttgart = 1656000, // Day 2, 06:40
320 kTimeChapter1End2 = 1647000, // Day 2, 06:30
321 kTimeChapter1End3 = 1674000, // Day 2, 07:00
322 kTimeCityGeislingen = 1713600, // Day 2, 07:44
323 kTime1714500 = 1714500, // Day 2, 07:45
324 kTimeCityUlm = 1739700, // Day 2, 08:13
325
326 // Chapter 2
327 kTimeChapter2 = 1750500, // Day 2, 08:25
328 kTime1759500 = 1759500, // Day 2, 08:35
329 kTime1755000 = 1755000, // Day 2, 08:30
330 kTime1764000 = 1764000, // Day 2, 08:40
331 kTime1768500 = 1768500, // Day 2, 08:45
332 kTime1773000 = 1773000, // Day 2, 08:50
333 kTime1777500 = 1777500, // Day 2, 08:55
334 kTime1782000 = 1782000, // Day 2, 09:00
335 kTime1786500 = 1786500, // Day 2, 09:05
336 kTime1791000 = 1791000, // Day 2, 09:10
337 kTime1800000 = 1800000, // Day 2, 09:20
338 kTime1801800 = 1801800, // Day 2, 09:22
339 kTime1806300 = 1806300, // Day 2, 09:27
340 kTime1809000 = 1809000, // Day 2, 09:30
341 kTimeCityAugsburg = 1809900, // Day 2, 09:31
342 kTime1813500 = 1813500, // Day 2, 09:35
343 kTime1818000 = 1818000, // Day 2, 09:40
344 kTime1818900 = 1818900, // Day 2, 09:41
345 kTime1820700 = 1820700, // Day 2, 09:43
346 kTime1822500 = 1822500, // Day 2, 09:45
347 kTime1827000 = 1827000, // Day 2, 09:50
348 kTime1831500 = 1831500, // Day 2, 09:55
349 kTime1836000 = 1836000, // Day 2, 10:00
350 kTime1845000 = 1845000, // Day 2, 10:10
351 kTime1849500 = 1849500, // Day 2, 10:15
352 kTimeCityMunich = 1852200, // Day 2, 10:18
353
354 // Chapter 3
355 kTimeChapter3 = 1944000, // Day 2, 12:00
356 kTime1953000 = 1953000, // Day 2, 12:10
357 kTime1966500 = 1966500, // Day 2, 12:25
358 kTime1969200 = 1969200, // Day 2, 12:28
359 kTime1971000 = 1971000, // Day 2, 12:30
360 kTimeEnterSalzbourg = 1982700, // Day 2, 12:43
361 kTime1983600 = 1983600, // Day 2, 12:44
362 kTimeCitySalzbourg = 1984500, // Day 2, 12:45
363 kTime1989000 = 1989000, // Day 2, 12:50
364 kTimeExitSalzbourg = 1989900, // Day 2, 12:51
365 kTime1993500 = 1993500, // Day 2, 12:55
366 kTime1998000 = 1998000, // Day 2, 13:00
367 kTime2002500 = 2002500, // Day 2, 13:05
368 kTime2011500 = 2011500, // Day 2, 13:15
369 kTime2016000 = 2016000, // Day 2, 13:20
370 kTime2020500 = 2020500, // Day 2, 13:25
371 kTime2025000 = 2025000, // Day 2, 13:30
372 kTime2034000 = 2034000, // Day 2, 13:40
373 kTime2038500 = 2038500, // Day 2, 13:45
374 kTime2040300 = 2040300, // Day 2, 13:47
375 kTime2043000 = 2043000, // Day 2, 13:50
376 kTimeEnterAttnangPuchheim = 2047500, // Day 2, 13:55
377 kTimeCityAttnangPuchheim = 2049300, // Day 2, 13:57
378 kTime2052000 = 2052000, // Day 2, 14:00
379 kTimeExitAttnangPuchheim = 2052900, // Day 2, 14:01
380 kTime2056500 = 2056500, // Day 2, 14:05
381 kTime2061000 = 2061000, // Day 2, 14:10
382 kTime2062800 = 2062800, // Day 2, 14:12
383 kTime2065500 = 2065500, // Day 2, 14:15
384 kTime2070000 = 2070000, // Day 2, 14:20
385 kTimeEnterWels = 2073600, // Day 2, 14:24
386 kTimeCityWels = 2075400, // Day 2, 14:26
387 kTime2079000 = 2079000, // Day 2, 14:30
388 kTimeExitWels = 2079900, // Day 2, 14:31
389 kTime2083500 = 2083500, // Day 2, 14:35
390 kTime2088000 = 2088000, // Day 2, 14:40
391 kTime2088900 = 2088900, // Day 2, 14:41
392 kTime2092500 = 2092500, // Day 2, 14:45
393 kTime2097000 = 2097000, // Day 2, 14:50
394 kTimeEnterLinz = 2099700, // Day 2, 14:53
395 kTimeCityLinz = 2101500, // Day 2, 14:55
396 kTimeExitLinz = 2105100, // Day 2, 14:59
397 kTime2106000 = 2106000, // Day 2, 15:00
398 kTime2110500 = 2110500, // Day 2, 15:05
399 kTime2115000 = 2115000, // Day 2, 15:10
400 kTime2117700 = 2117700, // Day 2, 15:13
401 kTime2119500 = 2119500, // Day 2, 15:15
402 kTime2124000 = 2124000, // Day 2, 15:20
403 kTime2133000 = 2133000, // Day 2, 15:30
404 kTime2138400 = 2138400, // Day 2, 15:36
405 kTime2142000 = 2142000, // Day 2, 15:40
406 kTime2146500 = 2146500, // Day 2, 15:45
407 kTime2147400 = 2147400, // Day 2, 15:46
408 kTime2151000 = 2151000, // Day 2, 15:50
409 kTimeCityAmstetten = 2154600, // Day 2, 15:54
410 kTime2155500 = 2155500, // Day 2, 15:55
411 kTime2160000 = 2160000, // Day 2, 16:00
412 kTime2169000 = 2169000, // Day 2, 16:10
413 kTime2173500 = 2173500, // Day 2, 16:15
414 kTime2187000 = 2187000, // Day 2, 16:30
415 kTime2182500 = 2182500, // Day 2, 16:25
416 kTime2196000 = 2196000, // Day 2, 16:40
417 kTime2200500 = 2200500, // Day 2, 16:45
418 kTime2205000 = 2205000, // Day 2, 16:50
419 kTime2214000 = 2214000, // Day 2, 17:00
420 kTime2218500 = 2218500, // Day 2, 17:05
421 kTime2223000 = 2223000, // Day 2, 17:10
422 kTime2227500 = 2227500, // Day 2, 17:15
423 kTime2241000 = 2241000, // Day 2, 17:30
424 kTime2248200 = 2248200, // Day 2, 17:38
425 kTime2250000 = 2250000, // Day 2, 17:40
426 kTime2254500 = 2254500, // Day 2, 17:45
427 kTime2259000 = 2259000, // Day 2, 17:50
428 kTime2263500 = 2263500, // Day 2, 17:55
429 kTime2266200 = 2266200, // Day 2, 17:58
430 kTimeCityVienna = 2268000, // Day 2, 18:00
431
432 // Chapter 4
433 kTime2349000 = 2349000, // Day 2, 19:30
434 kTimeChapter4 = 2353500, // Day 2, 19:35
435 kTime2354400 = 2354400, // Day 2, 19:36
436 kTime2356200 = 2356200, // Day 2, 19:38
437 kTime2358000 = 2358000, // Day 2, 19:40
438 kTime2360700 = 2360700, // Day 2, 19:43
439 kTime2362500 = 2362500, // Day 2, 19:45
440 kTime2361600 = 2361600, // Day 2, 19:44
441 kTime2367000 = 2367000, // Day 2, 19:50
442 kTime2370600 = 2370600, // Day 2, 19:54
443 kTime2378700 = 2378700, // Day 2, 20:03
444 kTimeEnterPoszony = 2381400, // Day 2, 20:06
445 kTimeCityPoszony = 2383200, // Day 2, 20:08
446 kTime2385000 = 2385000, // Day 2, 20:10
447 kTimeExitPoszony = 2386800, // Day 2, 20:12
448 kTime2389500 = 2389500, // Day 2, 20:15
449 kTime2394000 = 2394000, // Day 2, 20:20
450 kTime2398500 = 2398500, // Day 2, 20:25
451 kTime2403000 = 2403000, // Day 2, 20:30
452 kTime2407500 = 2407500, // Day 2, 20:35
453 kTime2410200 = 2410200, // Day 2, 20:38
454 kTime2412000 = 2412000, // Day 2, 20:40
455 kTime2414700 = 2414700, // Day 2, 20:43
456 kTime2415600 = 2415600, // Day 2, 20:44
457 kTimeEnterGalanta = 2416500, // Day 2, 20:45
458 kTimeCityGalanta = 2418300, // Day 2, 20:47
459 kTime2421000 = 2421000, // Day 2, 20:50
460 kTimeExitGalanta = 2421900, // Day 2, 20:51
461 kTime2422800 = 2422800, // Day 2, 20:52
462 kTime2428200 = 2428200, // Day 2, 20:58
463 kTime2425500 = 2425500, // Day 2, 20:55
464 kTime2430000 = 2430000, // Day 2, 21:00
465 kTime2434500 = 2434500, // Day 2, 21:05
466 kTime2439000 = 2439000, // Day 2, 21:10
467 kTime2443500 = 2443500, // Day 2, 21:15
468 kTime2448000 = 2448000, // Day 2, 21:20
469 kTime2452500 = 2452500, // Day 2, 21:25
470 kTime2455200 = 2455200, // Day 2, 21:28
471 kTime2457000 = 2457000, // Day 2, 21:30
472 kTime2466000 = 2466000, // Day 2, 21:40
473 kTime2470500 = 2470500, // Day 2, 21:45
474 kTime2475000 = 2475000, // Day 2, 21:50
475 kTime2479500 = 2479500, // Day 2, 21:55
476 kTime2484000 = 2484000, // Day 2, 22:00
477 kTime2488500 = 2488500, // Day 2, 22:05
478 kTime2493000 = 2493000, // Day 2, 22:10
479 kTime2506500 = 2506500, // Day 2, 22:25
480 kTime2507400 = 2507400, // Day 2, 22:26
481 kTime2511000 = 2511000, // Day 2, 22:30
482 kTime2511900 = 2511900, // Day 2, 22:31
483 kTime2517300 = 2517300, // Day 2, 22:37
484 kTime2519100 = 2519100, // Day 2, 22:39
485 kTime2520000 = 2520000, // Day 2, 22:40
486 kTime2533500 = 2533500, // Day 2, 22:55
487 kTime2535300 = 2535300, // Day 2, 22:57
488 kTime2538000 = 2538000, // Day 2, 23:00
489 kTimeCityBudapest = 2551500, // Day 2, 23:15
490
491 // Chapter 5
492 kTimeChapter5 = 2844000, // Day 3, 04:40
493 kTimeTrainStopped = 2898000, // Day 3, 05:40
494 kTime2907000 = 2907000, // Day 3, 05:50
495 kTime2916000 = 2916000, // Day 3, 06:00
496 kTime2934000 = 2934000, // Day 3, 06:20
497 kTimeTrainStopped2 = 2943000, // Day 3, 06:30
498 kTime2949300 = 2949300, // Day 3, 06:37
499 kTimeCityBelgrade = 2952000, // Day 3, 06:40
500 kTime2983500 = 2983500, // Day 3, 07:15
501 kTimeCityNish = 3205800, // Day 3, 11:22
502 kTimeCityTzaribrod = 3492000, // Day 3, 16:40
503 kTime3645000 = 3645000, // Day 3, 19:30
504 kTimeCitySofia = 3690000, // Day 3, 20:20
505 kTimeCityAdrianople = 4320900, // Day 4, 08:01
506 kTime4914000 = 4914000, // Day 4, 19:00
507 kTime4920300 = 4920300, // Day 4, 19:07
508 kTime4923000 = 4923000, // Day 4, 19:10
509 kTime4929300 = 4929300, // Day 4, 19:17
510 kTimeCityConstantinople = 4941000, // Day 4, 19:30
511
512
513 kTime10881000 = 10881000,
514 kTimeEnd = 15803100,
515 kTime16451100 = 16451100,
516
517 kTimeInvalid = 0x7FFFFFFF
518};
519
521// Archive & Chapter ID
523enum ArchiveIndex {
524 kArchiveAll = 0,
525 kArchiveCd1 = 1,
526 kArchiveCd2 = 2,
527 kArchiveCd3 = 3
528};
529
530enum ChapterIndex {
531 kChapterAll = 0,
532 kChapter1 = 1,
533 kChapter2 = 2,
534 kChapter3 = 3,
535 kChapter4 = 4,
536 kChapter5 = 5
537};
538
540// Index of scenes
542enum SceneIndex : uint {
543 kSceneNone = 0,
544 kSceneMenu = 1,
545
546 kSceneIntro = 30,
547
548 // Inventory
549 kSceneMatchbox = 31,
550 kSceneTelegram = 32,
551 kScenePassengerList = 33,
552 kSceneScarf = 34,
553 kSceneParchemin = 35,
554 kSceneArticle = 36,
555 kScenePaper = 37,
556 kSceneFirebird = 38,
557 kSceneBriefcase = 39,
558
559 // Normal scenes
560 kSceneDefault = 40,
561 kScene41 = 41,
562 kSceneCompartmentCorpse = 42, // Tyler compartment with corpse on floor
563
564 // Fight
565 kSceneFightMilos = 43,
566 kSceneFightMilosBedOpened = 44,
567 kSceneFightAnna = 45,
568 kSceneFightIvo = 46,
569 kSceneFightSalko = 47,
570 kSceneFightVesna = 48,
571
572 kSceneEuropeMap = 49,
573
574 // Game over
575 kSceneGameOverStopPolice = 50,
576 kSceneGameOverTrainStopped = 51,
577 kSceneGameOverTrainStopped2 = 52,
578 kSceneGameOverTrainExplosion = 53,
579 kSceneGameOverTrainExplosion2 = 54,
580 kSceneGameOverBloodJacket = 55,
581 kSceneGameOverPolice = 56,
582 kSceneGameOverPolice1 = 57,
583 kSceneGameOverAnnaDied = 58,
584 kSceneGameOverVienna = 59,
585 kSceneGameOverVienna1 = 60,
586 kSceneGameOverVienna2 = 61,
587 kSceneGameOverAlarm = 62,
588 kSceneGameOverPolice2 = 63,
589 kSceneGameOverAlarm2 = 64,
590
591 // Start screen
592 kSceneStartScreen = 65,
593
594 kSceneBeetle = 128,
595
596 kSceneFightDefault = 820,
597
598 kSceneInvalid = 0xffffffff
599};
600
602// Jacket
604enum JacketType {
605 kJacketOriginal = 0,
606 kJacketBlood = 1,
607 kJacketGreen = 2
608};
609
611// City
613enum CityIndex {
614 kCityEpernay = 0,
615 kCityChalons,
616 kCityBarleduc,
617 kCityNancy,
618 kCityLuneville,
619 kCityAvricourt, // 5
620 kCityDeutschAvricourt,
621 kCityStrasbourg,
622 kCityBadenOos,
623 kCitySalzbourg,
624 kCityAttnangPuchheim, // 10
625 kCityWels,
626 kCityLinz,
627 kCityVienna,
628 kCityPoszony,
629 kCityGalanta, // 15
630 kCityPolice
631};
632
634// Savegame ID
636enum GameId {
637 kGameBlue = 0,
638 kGameRed,
639 kGameGreen,
640 kGamePurple,
641 kGameTeal,
642 kGameGold
643};
644
645enum SavegameType {
646 kSavegameTypeIndex = 0,
647 kSavegameTypeTime = 1,
648 kSavegameTypeEvent = 2,
649 kSavegameTypeEvent2 = 3,
650 kSavegameTypeAuto = 4,
651 kSavegameTypeTickInterval = 5
652};
653
655// Cursor style
657enum CursorStyle {
658 kCursorNormal,
659 kCursorForward,
660 kCursorBackward,
661 kCursorTurnRight,
662 kCursorTurnLeft,
663 kCursorUp,
664 kCursorDown,
665 kCursorLeft,
666 kCursorRight,
667 kCursorHand,
668 kCursorHandKnock, // 10
669 kCursorMagnifier,
670 kCursorHandPointer,
671 kCursorSleep,
672 kCursorTalk,
673 kCursorTalk2, // Need better name
674
675 // Items
676 kCursorMatchBox,
677 kCursorTelegram,
678 kCursorPassengerList,
679 kCursorArticle,
680 kCursorScarf, // 20
681 kCursorPaper,
682 kCursorParchemin,
683 kCursorMatch,
684 kCursorWhistle,
685 kCursorKey,
686 kCursorBomb,
687 kCursorFirebird,
688 kCursorBriefcase,
689 kCursorCorpse,
690
691 // Combat
692 kCursorPunchLeft, // 30
693 kCursorPunchRight,
694
695 // Portraits
696 kCursorPortrait, // 32
697 kCursorPortraitSelected,
698 kCursorPortraitGreen,
699 kCursorPortraitGreenSelected,
700 kCursorPortraitYellow,
701 kCursorPortraitYellowSelected,
702 kCursorHourGlass,
703 kCursorEggBlue,
704 kCursorEggRed, // 40
705 kCursorEggGreen,
706 kCursorEggPurple,
707 kCursorEggTeal,
708 kCursorEggGold,
709 kCursorEggClock,
710 kCursorNormal2,
711 kCursorBlank,
712 kCursorMAX,
713
714 // Special
715 kCursorProcess = 128,
716 kCursorKeepValue = 255
717};
718
720// Position - should be between 0 & 100
722typedef unsigned char PositionOld;
723
725// EntityPosition
727enum EntityPosition {
728 kPositionNone = 0,
729 kPosition_1 = 1,
730 kPosition_3 = 3,
731 kPosition_4 = 4,
732 kPosition_500 = 500,
733 kPosition_540 = 540,
734 kPosition_750 = 750,
735 kPosition_849 = 849,
736 kPosition_850 = 850,
737 kPosition_851 = 851,
738 kPosition_1200 = 1200,
739 kPosition_1430 = 1430,
740 kPosition_1500 = 1500,
741 kPosition_1540 = 1540,
742 kPosition_1750 = 1750,
743 kPosition_2000 = 2000,
744 kPosition_2087 = 2087,
745 kPosition_2086 = 2086,
746 kPosition_2088 = 2088,
747 kPosition_2110 = 2110,
748 kPosition_2300 = 2300,
749 kPosition_2330 = 2330,
750 kPosition_2410 = 2410,
751 kPosition_2436 = 2436,
752 kPosition_2490 = 2490,
753 kPosition_2500 = 2500,
754 kPosition_2587 = 2587,
755 kPosition_2588 = 2588,
756 kPosition_2690 = 2690,
757 kPosition_2740 = 2740,
758 kPosition_2830 = 2830,
759 kPosition_2980 = 2980,
760 kPosition_3050 = 3050,
761 kPosition_3110 = 3110,
762 kPosition_3390 = 3390,
763 kPosition_3450 = 3450,
764 kPosition_3500 = 3500,
765 kPosition_3550 = 3550,
766 kPosition_3650 = 3650,
767 kPosition_3760 = 3760,
768 kPosition_3820 = 3820,
769 kPosition_3890 = 3890,
770 kPosition_3969 = 3969,
771 kPosition_3970 = 3970,
772 kPosition_4070 = 4070,
773 kPosition_4100 = 4100,
774 kPosition_4370 = 4370,
775 kPosition_4455 = 4455,
776 kPosition_4460 = 4460,
777 kPosition_4500 = 4500,
778 kPosition_4590 = 4590,
779 kPosition_4680 = 4680,
780 kPosition_4689 = 4689,
781 kPosition_4690 = 4690,
782 kPosition_4691 = 4691,
783 kPosition_4770 = 4470,
784 kPosition_4840 = 4840,
785 kPosition_5000 = 5000,
786 kPosition_5090 = 5090,
787 kPosition_5140 = 5140,
788 kPosition_5419 = 5419,
789 kPosition_5420 = 5420,
790 kPosition_5440 = 5440,
791 kPosition_5500 = 5500,
792 kPosition_5540 = 5540,
793 kPosition_5610 = 5610,
794 kPosition_5790 = 5790,
795 kPosition_5799 = 5799,
796 kPosition_5800 = 5800,
797 kPosition_5810 = 5810,
798 kPosition_5890 = 5890,
799 kPosition_5900 = 5900,
800 kPosition_5970 = 5970,
801 kPosition_6000 = 6000,
802 kPosition_6130 = 6130,
803 kPosition_6160 = 6160,
804 kPosition_6220 = 6220,
805 kPosition_6410 = 6410,
806 kPosition_6460 = 6460,
807 kPosition_6469 = 6469,
808 kPosition_6470 = 6470,
809 kPosition_6471 = 6471,
810 kPosition_6800 = 6800,
811 kPosition_6850 = 6850,
812 kPosition_7000 = 7000,
813 kPosition_7160 = 7160,
814 kPosition_7250 = 7250,
815 kPosition_7320 = 7320,
816 kPosition_7500 = 7500,
817 kPosition_7510 = 7510,
818 kPosition_7850 = 7850,
819 kPosition_7870 = 7870,
820 kPosition_7900 = 7900,
821 kPosition_7950 = 7950,
822 kPosition_8000 = 8000,
823 kPosition_8012 = 8012,
824 kPosition_8013 = 8013,
825 kPosition_8160 = 8160,
826 kPosition_8200 = 8200,
827 kPosition_8500 = 8500,
828 kPosition_8512 = 8512,
829 kPosition_8513 = 8513,
830 kPosition_8514 = 8514,
831 kPosition_8800 = 8800,
832 kPosition_9020 = 9020,
833 kPosition_9269 = 9269,
834 kPosition_9250 = 9250,
835 kPosition_9270 = 9270,
836 kPosition_9271 = 9271,
837 kPosition_9460 = 9460,
838 kPosition_9500 = 9500,
839 kPosition_9510 = 9510,
840 kPosition_30000 = 30000
841};
842
844// Location
846enum Location {
847 kLocationOutsideCompartment = 0,
848 kLocationInsideCompartment = 1,
849 kLocationOutsideTrain = 2
850};
851
853// Car
855enum CarIndex {
856 kCarNone = 0,
857 kCarBaggageRear = 1,
858 kCarKronos = 2,
859 kCarGreenSleeping = 3,
860 kCarRedSleeping = 4,
861 kCarRestaurant = 5,
862 kCarBaggage = 6,
863 kCarCoalTender = 7,
864 kCarLocomotive = 8,
865 kCarVestibule = 9
866};
867
869// Clothes
871enum ClothesIndex {
872 kClothesDefault = 0,
873 kClothes1 = 1,
874 kClothes2 = 2,
875 kClothes3 = 3,
876
877 kClothesInvalid
878};
879
881// Objects (doors)
883enum ObjectLocation {
884 kObjectLocationNone = 0,
885 kObjectLocation1 = 1, // Floor?
886 kObjectLocation2 = 2, // Bed ?
887 kObjectLocation3 = 3,
888 kObjectLocation4 = 4, // Window ?
889 kObjectLocation5 = 5,
890 kObjectLocation6 = 6,
891 kObjectLocation7 = 7,
892 kObjectLocation8 = 8,
893 kObjectLocation9 = 9,
894 kObjectLocation10 = 10,
895 kObjectLocation18 = 18
896};
897
898enum ObjectModel {
899 kObjectModelNone = 0,
900 kObjectModel1 = 1,
901 kObjectModel2 = 2,
902 kObjectModel3 = 3,
903 kObjectModel4 = 4,
904 kObjectModel5 = 5,
905 kObjectModel6 = 6,
906 kObjectModel7 = 7,
907 kObjectModel8 = 8,
908 kObjectModel9 = 9,
909 kObjectModel10 = 10
910};
911
913// Entity direction
915enum EntityDirection {
916 kDirectionNone = 0,
917 kDirectionUp = 1,
918 kDirectionDown = 2,
919 kDirectionLeft = 3,
920 kDirectionRight = 4,
921 kDirectionSwitch = 5
922};
923
925// Combat
927enum FightType {
928 kFightMilos = 2001,
929 kFightAnna = 2002,
930 kFightIvo = 2003,
931 kFightSalko = 2004,
932 kFightVesna = 2005
933};
934
936// Index of items in inventory data
938enum InventoryItem {
939 kItemNone,
940 kItemMatchBox,
941 kItem2,
942 kItem3,
943 kItemTelegram,
944 kItem5, // 5
945 kItemPassengerList,
946 kItem7,
947 kItemScarf,
948 kItem9,
949 kItemParchemin, // 10
950 kItem11,
951 kItemMatch,
952 kItemWhistle,
953 kItemBeetle,
954 kItemKey, // 15
955 kItemBomb,
956 kItem17,
957 kItemFirebird,
958 kItemBriefcase,
959 kItemCorpse, // 20
960 kItemGreenJacket,
961 kItem22,
962 kItemPaper,
963 kItemArticle,
964 kItem25, // 25
965 kItem26,
966 kItem27,
967 kItem28,
968 kItem29,
969 kItem30, // 30
970 kItem31,
971
972 // Portrait (not an index)
973 kPortraitOriginal = 32,
974 kPortraitGreen = 34,
975 kPortraitYellow = 36,
976
977 kItemInvalid = 128,
978
979 kItem146 = 146,
980 kItem147 = 147,
981
982 // Toggles
983 kItemToggleHigh = 0x7F,
984 kItemToggleLow = 0xF7
985};
986
988// Door ID
990enum ObjectIndex {
991 kObjectNone,
992 kObjectCompartment1,
993 kObjectCompartment2,
994 kObjectCompartment3,
995 kObjectCompartment4,
996 kObjectCompartment5, // 5
997 kObjectCompartment6,
998 kObjectCompartment7,
999 kObjectCompartment8,
1000 kObjectOutsideTylerCompartment,
1001 kObject10, // 10
1002 kObject11,
1003 kObject12,
1004 kObject13,
1005 kObject14,
1006 kObject15, // 15
1007 kObject16,
1008 kObjectHandleBathroom,
1009 kObjectHandleInsideBathroom,
1010 kObjectKitchen,
1011 kObject20, // 20
1012 kObject21,
1013 kObject22,
1014 kObjectTrainTimeTable,
1015 kObjectRedSleepingCar,
1016 kObject25, // 25
1017 kObjectHandleOutsideLeft,
1018 kObjectHandleOutsideRight,
1019 kObject28,
1020 kObject29,
1021 kObject30, // 30
1022 kObject31,
1023 kObjectCompartmentA,
1024 kObjectCompartmentB,
1025 kObjectCompartmentC,
1026 kObjectCompartmentD, // 35
1027 kObjectCompartmentE,
1028 kObjectCompartmentF,
1029 kObjectCompartmentG,
1030 kObjectCompartmentH,
1031 kObject40, // 40
1032 kObject41,
1033 kObject42,
1034 kObject43,
1035 kObjectOutsideBetweenCompartments,
1036 kObjectOutsideAnnaCompartment, // 45
1037 kObject46,
1038 kObject47,
1039 kObject48, // might be the egg
1040 kObject49,
1041 kObject50, // 50
1042 kObject51,
1043 kObject52,
1044 kObject53,
1045 kObject54,
1046 kObjectRestaurantCar, // 55
1047 kObject56,
1048 kObject57,
1049 kObject58,
1050 kObject59,
1051 kObject60, // 60
1052 kObject61,
1053 kObject62,
1054 kObject63,
1055 kObject64,
1056 kObject65, // 65
1057 kObject66,
1058 kObject67,
1059 kObject68,
1060 kObject69,
1061 kObject70, // 70
1062 kObject71,
1063 kObject72,
1064 kObjectCeiling,
1065 kObject74,
1066 kObjectCompartmentKronos, // 75
1067 kObject76,
1068 kObject77,
1069 kObject78,
1070 kObject79,
1071 kObject80, // 80
1072 kObject81,
1073 kObject82,
1074 kObject83,
1075 kObject84,
1076 kObject85, // 85
1077 kObject86,
1078 kObject87,
1079 kObject88,
1080 kObject89,
1081 kObject90, // 90
1082 kObject91,
1083 kObject92,
1084 kObject93,
1085 kObject94,
1086 kObject95, // 95
1087 kObject96,
1088 kObject97,
1089 kObject98,
1090 kObject99,
1091 kObject100, // 100
1092 kObject101,
1093 kObject102,
1094 kObject103,
1095 kObject104,
1096 kObject105, // 105
1097 kObject106,
1098 kObject107,
1099 kObject108,
1100 kObjectCageMax,
1101 kObject110, // 110
1102 kObject111,
1103 kObject112,
1104 kObject113,
1105 kObject114,
1106 kObject115, // 115
1107 kObject116,
1108 kObject117,
1109 kObject118,
1110 kObject119,
1111 kObject120, // 120
1112 kObject121,
1113 kObject122,
1114 kObject123,
1115 kObject124,
1116 kObject125, // 125
1117 kObject126,
1118 kObject127,
1119 kObjectMax
1120};
1121
1123// Character ID
1125enum CharacterIndex {
1126 kCharacterCath,
1127 kCharacterAnna,
1128 kCharacterAugust,
1129 kCharacterCond1,
1130 kCharacterCond2,
1131 kCharacterHeadWait, // 5
1132 kCharacterWaiter1,
1133 kCharacterWaiter2,
1134 kCharacterCook,
1135 kCharacterTrainM,
1136 kCharacterTatiana, // 10
1137 kCharacterVassili,
1138 kCharacterAlexei,
1139 kCharacterAbbot,
1140 kCharacterMilos,
1141 kCharacterVesna, // 15
1142 kCharacterIvo,
1143 kCharacterSalko,
1144 kCharacterKronos,
1145 kCharacterKahina,
1146 kCharacterFrancois, // 20
1147 kCharacterMadame,
1148 kCharacterMonsieur,
1149 kCharacterRebecca,
1150 kCharacterSophie,
1151 kCharacterMahmud, // 25
1152 kCharacterYasmin,
1153 kCharacterHadija,
1154 kCharacterAlouan,
1155 kCharacterPolice,
1156 kCharacterMax, // 30
1157 kCharacterMaster,
1158 kCharacterClerk,
1159 kCharacterTableA,
1160 kCharacterTableB,
1161 kCharacterTableC, // 35
1162 kCharacterTableD,
1163 kCharacterTableE,
1164 kCharacterTableF,
1165 kCharacterMitchell,
1166
1167 kCharacterSteam = 255
1168};
1169
1171// Events
1172// - a single D at the end means that Cath is on the right of the "scene" (D = Down the train, U = Up the train)
1173// - DD: during the day, coming down the train
1174// - DU: during the day, coming up the train
1175// - ND: during the night, coming down the train
1176// - NU: during the night, coming up the train
1178enum EventIndex : uint {
1179 kEventNone = 0,
1180 kEventGotALight = 1,
1181 kEventGotALightD = 2,
1182 kEventDinerMindJoin = 3,
1183 kEventDinerAugustOriginalJacket = 4,
1184 kEventDinerAugust = 5,
1185 kEventDinerAugustAlexeiBackground = 6,
1186 kEventMeetAugustTylerCompartment = 7,
1187 kEventMeetAugustTylerCompartmentBed = 8,
1188 kEventMeetAugustHisCompartment = 9,
1189 kEventMeetAugustHisCompartmentBed = 10,
1190 kEventAugustFindCorpse = 11,
1191 kEventAugustPresentAnna = 12,
1192 kEventAugustPresentAnnaFirstIntroduction = 13,
1193 kEventAnnaIntroductionRejected = 14,
1194 kEventAnnaConversationGoodNight = 15,
1195 kEventAnnaVisitToCompartmentGun = 16,
1196 kEventInvalid_17 = 17,
1197 kEventAnnaGoodNight = 18,
1198 kEventAnnaGoodNightInverse = 19,
1199 kEventAugustGoodMorning = 20,
1200 kEventAugustMerchandise = 21,
1201 kEventAugustTalkGold = 22,
1202 kEventAugustTalkGoldDay = 23,
1203 kEventAugustTalkCompartmentDoor = 24,
1204 kEventAugustTalkCompartmentDoorBlueRedingote = 25,
1205 kEventAugustLunch = 26,
1206 kEventKronosVisit = 27,
1207 kEventAnnaSearchingCompartment = 28,
1208 kEventAugustBringEgg = 29,
1209 kEventAugustBringBriefcase = 30,
1210 kEventAugustTalkCigar = 31,
1211 kEventAnnaBaggageArgument = 32,
1212 kEventAnnaBaggagePart2 = 33,
1213 kEventAnnaConversation_34 = 34,
1214 kEventAugustDrink = 35,
1215 kEventAnnaTired = 36,
1216 kEventAnnaTiredKiss = 37,
1217 kEventAnnaBaggageTies = 38,
1218 kEventAnnaBaggageTies2 = 39,
1219 kEventAnnaBaggageTies3 = 40,
1220 kEventAnnaBaggageTies4 = 41,
1221 kEventAugustUnhookCarsBetrayal = 42,
1222 kEventAugustUnhookCars = 43,
1223 kEventLocomotiveAnnaStopsTrain = 44,
1224 kEventInvalid_45 = 45,
1225 kEventTrainStopped = 46,
1226 kEventAnnaKissTrainHijacked = 47,
1227 kEventTrainHijacked = 48,
1228 kEventAnnaKilled = 49,
1229 kEventKronosGoingToInvitation = 50,
1230 kEventKronosConversation = 51,
1231 kEventKahinaAskSpeakFirebird = 52,
1232 kEventKahinaAskSpeak = 53,
1233 kEventKronosConversationFirebird = 54,
1234 kEventKahinaGunYellow = 55,
1235 kEventKahinaGunBlue = 56,
1236 kEventKahinaGun = 57,
1237 kEventKronosBringEggCeiling = 58,
1238 kEventKronosBringEgg = 59,
1239 kEventKronosBringNothing = 60,
1240 kEventKronosReturnBriefcase = 61,
1241 kEventKronosHostageAnna = 62,
1242 kEventKronosGiveFirebird = 63,
1243 kEventKahinaPunchBaggageCarEntrance = 64,
1244 kEventKahinaPunchBlue = 65,
1245 kEventKahinaPunchYellow = 66,
1246 kEventKahinaPunchSalon = 67,
1247 kEventKahinaPunchKitchen = 68,
1248 kEventKahinaPunchBaggageCar = 69,
1249 kEventKahinaPunchCar = 70,
1250 kEventKahinaPunchSuite4 = 71,
1251 kEventKahinaPunchRestaurant = 72,
1252 kEventKronosHostageAnnaNoFirebird = 73,
1253 kEventKahinaPunch = 74,
1254 kEventKahinaWrongDoor = 75,
1255 kEventAlexeiDiner = 76,
1256 kEventAlexeiDinerOriginalJacket = 77,
1257 kEventAlexeiSalonVassili = 78,
1258 kEventAlexeiSalonCath = 79,
1259 kEventAlexeiSalonPoem = 80,
1260 kEventTatianaAskMatchSpeakRussian = 81,
1261 kEventTatianaAskMatch = 82,
1262 kEventTatianaGivePoem = 83,
1263 kEventVassiliSeizure = 84,
1264 kEventTatianaBreakfastAlexei = 85,
1265 kEventTatianaBreakfast = 86,
1266 kEventTatianaBreakfastGivePoem = 87,
1267 kEventTatianaAlexei = 88,
1268 kEventTatianaCompartmentStealEgg = 89,
1269 kEventTatianaCompartment = 90,
1270 kEventVassiliCompartmentStealEgg = 91,
1271 kEventTatianaTylerCompartment = 92,
1272 kEventTylerCastleDream= 93,
1273 kEventVassiliDeadAlexei = 94,
1274 kEventCathFreePassengers = 95,
1275 kEventTatianaVassiliTalk = 96,
1276 kEventTatianaVassiliTalkNight = 97,
1277 kEventMilosTylerCompartmentVisit = 98,
1278 kEventMilosTylerCompartmentBedVisit = 99,
1279 kEventMilosTylerCompartment = 100,
1280 kEventMilosTylerCompartmentBed = 101,
1281 kEventMilosTylerCompartmentDefeat = 102,
1282 kEventMilosCorpseFloor = 103,
1283 kEventMilosCompartmentVisitAugust = 104,
1284 kEventMilosCorridorThanks = 105,
1285 kEventMilosCorridorThanksD = 106,
1286 kEventMilosCompartmentVisitTyler = 107,
1287 kEventLocomotiveMilosDay = 108,
1288 kEventLocomotiveMilosNight = 109,
1289 kEventAbbotIntroduction = 110,
1290 kEventAbbotWrongCompartment = 111,
1291 kEventAbbotWrongCompartmentBed = 112,
1292 kEventAbbotInvitationDrink = 113,
1293 kEventAbbotDrinkGiveDetonator = 114,
1294 kEventTrainExplosionBridge = 115,
1295 kEventDefuseBomb = 116,
1296 kEventAbbotDrinkDefuse = 117,
1297 kEventMertensLastCar = 118,
1298 kEventMertensLastCarOriginalJacket = 119,
1299 kEventMertensKronosInvitation = 120,
1300 kEventMertensKronosInvitationCompartment = 121,
1301 kEventMertensKronosInvitationClosedWindows = 122,
1302 kEventMertensBloodJacket = 123,
1303 kEventCoudertBloodJacket = 124,
1304 kEventMertensCorpseFloor = 125,
1305 kEventMertensCorpseBed = 126,
1306 kEventMertensDontMakeBed = 127,
1307 kEventInvalid_128 = 128,
1308 kEventGendarmesArrestation = 129,
1309 kEventVergesSuitcase = 130,
1310 kEventVergesSuitcaseStart = 131,
1311 kEventVergesSuitcaseOtherEntry = 132,
1312 kEventVergesSuitcaseOtherEntryStart = 133,
1313 kEventVergesSuitcaseNight = 134,
1314 kEventVergesSuitcaseNightStart = 135,
1315 kEventVergesSuitcaseNightOtherEntry = 136,
1316 kEventVergesSuitcaseNightOtherEntryStart = 137,
1317 kEventMertensAskTylerCompartment = 138,
1318 kEventMertensAskTylerCompartmentD = 139,
1319 kEventMertensPushCallNight = 140,
1320 kEventMertensPushCall = 141,
1321 kEventMertensAugustWaiting = 142,
1322 kEventMertensAugustWaitingCompartment = 143,
1323 kEventIntroBroderbrund = 144,
1324 kEventCoudertAskTylerCompartment = 145,
1325 kEventMertensKronosConcertInvitation = 146,
1326 kEventCoudertGoingOutOfVassiliCompartment = 147,
1327 kEventLocomotiveConductorsDiscovered = 148,
1328 kEventLocomotiveConductorsLook = 149,
1329 kEventMahmudWrongDoor = 150,
1330 kEventMahmudWrongDoorOriginalJacket = 151,
1331 kEventMahmudWrongDoorDay = 152,
1332 kEventVergesEscortToDiningCar = 153,
1333 kEventVergesBaggageCarOffLimits = 154,
1334 kEventVergesCanIHelpYou = 155,
1335 kEventCoudertBaggageCar = 156,
1336 kEventCathTurningDay = 157,
1337 kEventCathTurningNight = 158,
1338 kEventIntro = 159,
1339 kEventCathDream = 160,
1340 kEventCorpseDropBridge = 161,
1341 kEventTrainPassing = 162,
1342 kEventVergesAnnaDead = 163,
1343 kEventViennaAugustUnloadGuns = 164,
1344 kEventViennaKronosFirebird = 165,
1345 kEventViennaContinueGame = 166,
1346 kEventCathVesnaRestaurantKilled = 167,
1347 kEventCathMaxCage = 168,
1348 kEventCathMaxFree = 169,
1349 kEventCathMaxLickHand = 170,
1350 kEventCathIvoFight = 171,
1351 kEventCathSalkoTrainTopFight = 172,
1352 kEventCathVesnaTrainTopFight = 173,
1353 kEventCathVesnaTrainTopKilled = 174,
1354 kEventCathVesnaTrainTopWin = 175,
1355 kEventCathSalkoTrainTopWin = 176,
1356 kEventFrancoisWhistle = 177,
1357 kEventFrancoisWhistleD = 178,
1358 kEventFrancoisWhistleNight = 179,
1359 kEventFrancoisWhistleNightD = 180,
1360 kEventFrancoisShowBeetle = 181,
1361 kEventFrancoisShowBeetleD = 182,
1362 kEventFrancoisTradeWhistle = 183,
1363 kEventFrancoisTradeWhistleD = 184,
1364 kEventFrancoisShowEgg = 185,
1365 kEventFrancoisShowEggD = 186,
1366 kEventFrancoisShowEggNightD = 187,
1367 kEventFrancoisShowEggNight = 188,
1368 kEventKronosBringFirebird = 189,
1369 kEventKronosOpenFirebird = 190,
1370 kEventFinalSequence = 191,
1371 kEventLocomotiveRestartTrain = 192,
1372 kEventLocomotiveOldBridge = 193,
1373 kEventLocomotiveAbbotGetSomeRest = 194,
1374 kEventLocomotiveAbbotShoveling = 195,
1375 kEventLocomotiveMilosShovelingDay = 196,
1376 kEventLocomotiveMilosShovelingNight = 197,
1377 kEventAnnaGiveScarf = 198,
1378 kEventAnnaGiveScarfDiner = 199,
1379 kEventAnnaGiveScarfSalon = 200,
1380 kEventAnnaGiveScarfMonogram = 201,
1381 kEventAnnaGiveScarfDinerMonogram = 202,
1382 kEventAnnaGiveScarfSalonMonogram = 203,
1383 kEventAnnaGiveScarfAsk = 204,
1384 kEventAnnaGiveScarfDinerAsk = 205,
1385 kEventAnnaGiveScarfSalonAsk = 206,
1386 kEventAugustArrivalInMunich = 207,
1387 kEventAnnaDialogGoToJerusalem = 208,
1388 kEventConcertStart = 209,
1389 kEventConcertEnd = 210,
1390 kEventCathFallingAsleep = 211,
1391 kEventCathWakingUp = 212,
1392 kEventConcertCough = 213,
1393 kEventConcertSit = 214,
1394 kEventConcertLeaveWithBriefcase = 215,
1395 kEventCorpseDropFloorOriginal = 216,
1396 kEventCorpseDropFloorGreen = 217,
1397 kEventCorpsePickFloorOriginal = 218,
1398 kEventCorpsePickFloorGreen = 219,
1399 kEventCorpsePickFloorOpenedBedOriginal = 220,
1400 kEventCorpsePickBedOriginal = 221,
1401 kEventCorpsePickBedGreen = 222,
1402 kEventCorpseDropBedOriginal = 223,
1403 kEventCorpseDropBedGreen = 224,
1404 kEventCorpseDropWindowOriginal = 225,
1405 kEventCorpseDropWindowGreen = 226,
1406 kEventCathFindCorpse = 227,
1407 kEventCathLookOutsideWindowDay = 228,
1408 kEventCathLookOutsideWindowNight = 229,
1409 kEventCathGoOutsideTylerCompartmentDay = 230,
1410 kEventCathGoOutsideTylerCompartmentNight = 231,
1411 kEventCathGoOutsideDay = 232,
1412 kEventCathGoOutsideNight = 233,
1413 kEventCathSlipTylerCompartmentDay = 234,
1414 kEventCathSlipTylerCompartmentNight = 235,
1415 kEventCathSlipDay = 236,
1416 kEventCathSlipNight = 237,
1417 kEventCathGetInsideTylerCompartmentDay = 238,
1418 kEventCathGetInsideTylerCompartmentNight = 239,
1419 kEventCathGetInsideDay = 240,
1420 kEventCathGetInsideNight = 241,
1421 kEventCathGettingInsideAnnaCompartment = 242,
1422 kEventCathClimbUpTrainGreenJacket = 243,
1423 kEventCathClimbUpTrainNoJacketNight = 244,
1424 kEventCathClimbUpTrainNoJacketDay = 245,
1425 kEventCathClimbDownTrainGreenJacket = 246,
1426 kEventCathClimbDownTrainNoJacketNight = 247,
1427 kEventCathClimbDownTrainNoJacketDay= 248,
1428 kEventCathTopTrainGreenJacket = 249,
1429 kEventCathTopTrainNoJacketNight = 250,
1430 kEventCathTopTrainNoJacketDay = 251,
1431 kEventCathBreakCeiling = 252,
1432 kEventCathJumpDownCeiling = 253,
1433 kEventCathJumpUpCeilingBriefcase = 254,
1434 kEventCathJumpUpCeiling = 255,
1435 kEventPickGreenJacket = 256,
1436 kEventPickScarfGreen = 257,
1437 kEventPickScarfOriginal = 258,
1438 kEventCloseMatchbox = 259,
1439 kEventCathStruggleWithBonds = 260,
1440 kEventCathBurnRope = 261,
1441 kEventCathRemoveBonds = 262,
1442 kEventCathStruggleWithBonds2 = 263,
1443 kEventCathDefusingBomb = 264,
1444 kEventCathSmokeNight = 265,
1445 kEventCathSmokeDay = 266,
1446 kEventCathOpenEgg = 267,
1447 kEventCathOpenEggNoBackground = 268,
1448 kEventCathCloseEgg = 269,
1449 kEventCathCloseEggNoBackground = 270,
1450 kEventCathUseWhistleOpenEgg = 271,
1451 kEventCathUseWhistleOpenEggNoBackground = 272
1452};
1453
1455// Character Actions
1457enum CharacterActions : uint {
1458 kCharacterActionNone = 0,
1459 kCharacterAction1 = 1,
1460 kCharacterActionEndSound = 2,
1461 kCharacterActionExitCompartment = 3,
1462 kCharacterAction4 = 4,
1463 kCharacterActionExcuseMeCath = 5,
1464 kCharacterActionExcuseMe = 6,
1465 kCharacterActionKnock = 8,
1466 kCharacterActionOpenDoor = 9,
1467 kCharacterAction10 = 10,
1468 kCharacterAction11 = 11,
1469 kCharacterActionDefault = 12,
1470 kCharacterAction16 = 16,
1471 kCharacterActionDrawScene = 17,
1472 kCharacterActionCallback = 18,
1473
1475 // Abbot
1477 kCharacterAction100969180 = 100969180, // Anna
1478 kCharacterAction101169422 = 101169422,
1479 kCharacterAction104060776 = 104060776,
1480 kCharacterAction135600432 = 135600432,
1481 kCharacterAction136196244 = 136196244,
1482 kCharacterAction157159392 = 157159392,
1483 kCharacterAction157489665 = 157489665,
1484 kCharacterAction158480160 = 158480160,
1485 kCharacterAction192054567 = 192054567,
1486 kCharacterAction203073664 = 203073664,
1487 kCharacterAction222609266 = 222609266,
1488
1490 // Alexei
1492 kCharacterAction100906246 = 100906246,
1493 kCharacterAction123536024 = 123536024,
1494 kCharacterAction124697504 = 124697504,
1495 kCharacterAction135664192 = 135664192,
1496 kCharacterAction135854208 = 135854208,
1497 kCharacterAction188784532 = 188784532,
1498 kCharacterAction221617184 = 221617184,
1499
1501 // Alouan
1503 kCharacterAction189489753 = 189489753,
1504 kCharacterAction190219584 = 190219584, // Francois
1505
1507 // Anna
1509 kCharacterAction136702400 = 136702400,
1510 kCharacterAction139254416 = 139254416,
1511 kCharacterAction156049968 = 156049968,
1512 kCharacterAction157370960 = 157370960,
1513 kCharacterAction157894320 = 157894320,
1514 kCharacterAction159332865 = 159332865, // August
1515 kCharacterAction189299008 = 189299008,
1516 kCharacterAction191668032 = 191668032, // some action during or before concert?
1517 kCharacterAction201437056 = 201437056,
1518 kCharacterAction235856512 = 235856512,
1519 kCharacterAction236060709 = 236060709,
1520 kCharacterAction238936000 = 238936000,
1521 kCharacterAction259136835 = 259136835,
1522 kCharacterAction291662081 = 291662081,
1523
1524
1526 // August
1528 kCharacterAction123793792 = 123793792,
1529 kCharacterAction134611040 = 134611040,
1530 kCharacterAction168046720 = 168046720,
1531 kCharacterAction168627977 = 168627977,
1532 kCharacterAction169032608 = 169032608,
1533 kCharacterAction189426612 = 189426612,
1534 kCharacterAction203859488 = 203859488,
1535 kCharacterAction219522616 = 219522616, // Waiter1
1536 kCharacterAction225182640 = 225182640,
1537 kCharacterAction235257824 = 235257824,
1538
1540 // Boutarel
1542 kCharacterAction125039808 = 125039808,
1543 kCharacterAction134466544 = 134466544,
1544 kCharacterAction135854206 = 135854206,
1545 kCharacterAction159003408 = 159003408,
1546 kCharacterAction203520448 = 203520448,
1547 kCharacterAction237889408 = 237889408,
1548
1550 // Chapters
1552 kCharacterAction135800432 = 135800432,
1553 kCharacterActionChapter3 = 139122728,
1554 kCharacterActionChapter5 = 139254416,
1555 kCharacterAction156435676 = 156435676,
1556 kCharacterAction169629818 = 169629818,
1557 kCharacterAction171843264 = 171843264,
1558 kCharacterAction190346110 = 190346110,
1559
1561 // Cooks
1563 kCharacterAction101632192 = 101632192,
1564 kCharacterAction224849280 = 224849280,
1565 kCharacterAction236976550 = 236976550,
1566
1568 // Coudert
1570 kCharacterAction123733488 = 123733488,
1571 kCharacterAction154005632 = 154005632,
1572 kCharacterAction155991520 = 155991520,
1573 kCharacterAction157026693 = 157026693,
1574 kCharacterAction168253822 = 168253822,
1575 kCharacterAction168254872 = 168254872,
1576 kCharacterAction168316032 = 168316032, // Tatiana
1577 kCharacterAction169557824 = 169557824,
1578 kCharacterAction171394341 = 171394341, // Mertens
1579 kCharacterAction185671840 = 185671840,
1580 kCharacterAction185737168 = 185737168,
1581 kCharacterAction188570113 = 188570113,
1582 kCharacterAction189026624 = 189026624,
1583 kCharacterAction189750912 = 189750912,
1584 kCharacterAction192063264 = 192063264, // Anna
1585 kCharacterAction201431954 = 201431954, // Mertens / Verges
1586 kCharacterAction201439712 = 201439712,
1587 kCharacterAction205033696 = 205033696,
1588 kCharacterAction205346192 = 205346192, // Francois
1589 kCharacterAction219971920 = 219971920, // Anna
1590 kCharacterAction223068211 = 223068211, // MmeBoutarel
1591 kCharacterAction225932896 = 225932896,
1592 kCharacterAction226031488 = 226031488, // Verges
1593 kCharacterAction235061888 = 235061888, // Tatiana
1594 kCharacterAction238358920 = 238358920, // Anna
1595 kCharacterAction253868128 = 253868128, // Anna
1596 kCharacterAction285528346 = 285528346, // Rebecca
1597 kCharacterAction292048641 = 292048641,
1598 kCharacterAction305159806 = 305159806,
1599 kCharacterAction326348944 = 326348944,
1600 kCharacterAction339669520 = 339669520, // Verges
1601
1603 // Francois
1605 kCharacterAction100901266 = 100901266,
1606 kCharacterAction100957716 = 100957716,
1607 kCharacterAction101107728 = 101107728,
1608 kCharacterAction189872836 = 189872836,
1609 kCharacterAction190390860 = 190390860,
1610
1612 // Gendarmes
1614 kCharacterAction168710784 = 168710784,
1615 kCharacterAction169499649 = 169499649,
1616
1618 // Kahina
1620 kCharacterAction92186062 = 92186062,
1621 kCharacterAction137503360 = 137503360,
1622 kCharacterAction237555748 = 237555748,
1623
1625 // Kronos
1627 kCharacterAction137685712 = 137685712,
1628 kCharacterAction138085344 = 138085344,
1629 kCharacterAction171849314 = 171849314,
1630 kCharacterAction235599361 = 235599361,
1631
1633 // Mahmud
1635 kCharacterAction102227384 = 102227384, // Mertens
1636 kCharacterAction156567128 = 156567128,
1637 kCharacterAction170483072 = 170483072,
1638 kCharacterAction225563840 = 225563840,
1639
1641 // Max
1643 kCharacterAction71277948 = 71277948,
1644 kCharacterAction158007856 = 158007856,
1645 kCharacterAction101687594 = 101687594,
1646 kCharacterAction122358304 = 122358304, // also Waiter2/Boutarel?
1647 kCharacterActionMaxFreeFromCage = 135204609,
1648 kCharacterAction156622016 = 156622016,
1649
1651 // Mertens
1653 kCharacterAction155604840 = 155604840, // MmeBoutarel
1654 kCharacterAction169633856 = 169633856,
1655 kCharacterAction188635520 = 188635520,
1656 kCharacterAction190082817 = 190082817,
1657 kCharacterAction192849856 = 192849856,
1658 kCharacterAction204379649 = 204379649,
1659 kCharacterAction224122407 = 224122407,
1660 kCharacterAction238732837 = 238732837,
1661 kCharacterAction238790488 = 238790488, // Tatiana
1662 kCharacterAction269436673 = 269436673,
1663 kCharacterAction269624833 = 269624833,
1664 kCharacterAction302614416 = 302614416,
1665 kCharacterAction303343617 = 303343617,
1666
1668 // Milos
1670 kCharacterAction88652208 = 88652208, // Coudert
1671 kCharacterAction122865568 = 122865568,
1672 kCharacterAction123852928 = 123852928,
1673 kCharacterAction123199584 = 123199584, // Coudert
1674 kCharacterAction157691176 = 157691176,
1675 kCharacterAction208228224 = 208228224,
1676 kCharacterAction221683008 = 221683008,
1677 kCharacterAction259125998 = 259125998,
1678
1680 // Mme Boutarel
1682 kCharacterAction102484312 = 102484312,
1683 kCharacterAction102752636 = 102752636,
1684 kCharacterAction134289824 = 134289824,
1685 kCharacterAction168986720 = 168986720,
1686 kCharacterAction202221040 = 202221040,
1687 kCharacterAction242526416 = 242526416,
1688
1690 // Pascale
1692 kCharacterAction101824388 = 101824388,
1693 kCharacterAction136059947 = 136059947,
1694 kCharacterAction169750080 = 169750080,
1695 kCharacterAction190605184 = 190605184,
1696 kCharacterAction191604416 = 191604416,
1697 kCharacterAction207769280 = 207769280,
1698 kCharacterAction223262556 = 223262556,
1699 kCharacterAction239072064 = 239072064,
1700 kCharacterAction257489762 = 257489762,
1701 kCharacterAction269479296 = 269479296,
1702 kCharacterAction352703104 = 352703104,
1703 kCharacterAction352768896 = 352768896,
1704
1706 // Rebecca
1708 kCharacterAction125496184 = 125496184,
1709 kCharacterAction155465152 = 155465152,
1710 kCharacterAction155980128 = 155980128,
1711 kCharacterAction169358379 = 169358379,
1712 kCharacterAction224253538 = 224253538,
1713 kCharacterAction254915200 = 254915200,
1714
1716 // Salko
1718 kCharacterAction55996766 = 55996766,
1719 kCharacterAction101169464 = 101169464,
1720 kCharacterAction102675536 = 102675536, // Ivo
1721 kCharacterAction136184016 = 136184016,
1722
1724 // Servers 0
1726 kCharacterAction170016384 = 170016384,
1727 kCharacterAction188893625 = 188893625,
1728 kCharacterAction201964801 = 201964801, // August
1729 kCharacterAction204704037 = 204704037,
1730 kCharacterAction207330561 = 207330561,
1731 kCharacterAction218128129 = 218128129,
1732 kCharacterAction218586752 = 218586752,
1733 kCharacterAction218983616 = 218983616,
1734 kCharacterAction223712416 = 223712416,
1735 kCharacterAction237485916 = 237485916,
1736 kCharacterAction252568704 = 252568704,
1737 kCharacterAction268773672 = 268773672, // Anna / August
1738 kCharacterAction270068760 = 270068760,
1739 kCharacterAction270410280 = 270410280,
1740 kCharacterAction286403504 = 286403504,
1741 kCharacterAction286534136 = 286534136,
1742 kCharacterAction292758554 = 292758554,
1743 kCharacterAction304061224 = 304061224,
1744 kCharacterAction337548856 = 337548856,
1745
1747 // Servers 1
1749 kCharacterAction101106391 = 101106391,
1750 kCharacterAction122288808 = 122288808, // Boutarel
1751 kCharacterAction123712592 = 123712592, // Ivo
1752 kCharacterAction125826561 = 125826561, // August
1753 kCharacterAction134486752 = 134486752, // August
1754 kCharacterAction168717392 = 168717392, // Boutarel
1755 kCharacterAction189688608 = 189688608,
1756 kCharacterAction219377792 = 219377792,
1757 kCharacterAction223002560 = 223002560,
1758 kCharacterAction236237423 = 236237423,
1759 kCharacterAction256200848 = 256200848,
1760 kCharacterAction258136010 = 258136010,
1761 kCharacterAction269485588 = 269485588,
1762 kCharacterAction291721418 = 291721418,
1763 kCharacterAction302203328 = 302203328,
1764 kCharacterAction302996448 = 302996448,
1765 kCharacterAction326144276 = 326144276,
1766
1768 // Sophie
1770 kCharacterActionProceedChapter5 = 70549068,
1771 kCharacterAction123668192 = 123668192,
1772 kCharacterAction125242096 = 125242096,
1773 kCharacterAction136654208 = 136654208,
1774 kCharacterAction259921280 = 259921280,
1775 kCharacterAction292775040 = 292775040,
1776
1778 // Tables
1780 kCharacterActionDrawTablesWithChairs = 103798704,
1781 kCharacterAction136455232 = 136455232,
1782
1784 // Tatiana
1786 kCharacterAction69239528 = 69239528,
1787 kCharacterAction123857088 = 123857088,
1788 kCharacterAction124973510 = 124973510,
1789 kCharacterAction154071333 = 154071333,
1790 kCharacterAction156444784 = 156444784,
1791 kCharacterAction169360385 = 169360385,
1792 kCharacterAction191198209 = 191198209,
1793 kCharacterAction223183000 = 223183000, // August
1794 kCharacterAction236053296 = 236053296, // Alexei
1795 kCharacterAction236241630 = 236241630, // Anna
1796 kCharacterAction236517970 = 236517970, // Anna
1797 kCharacterAction268620864 = 268620864, // August
1798 kCharacterAction290869168 = 290869168,
1799
1801 // Train
1803 kCharacterAction191070912 = 191070912,
1804 kCharacterActionTrainStopRunning = 191350523,
1805 kCharacterActionCatchBeetle = 202613084,
1806 kCharacterAction203339360 = 203339360,
1807 kCharacterActionTrainStartRunning = 203419131,
1808 kCharacterAction203863200 = 203863200,
1809 kCharacterAction222746496 = 222746496,
1810 kCharacterActionBreakCeiling = 225056224,
1811 kCharacterAction290410610 = 290410610,
1812 kCharacterActionJumpDownCeiling = 338494260,
1813
1815 // Verges
1817 kCharacterAction125233040 = 125233040, // Abbot
1818 kCharacterAction125499160 = 125499160,
1819 kCharacterAction155853632 = 155853632,
1820 kCharacterAction158617345 = 158617345,
1821 kCharacterAction167854368 = 167854368,
1822 kCharacterAction168187490 = 168187490,
1823 kCharacterAction168255788 = 168255788,
1824 kCharacterActionDeliverMessageToTyler = 191337656,
1825 kCharacterAction202558662 = 202558662,
1826
1828 // Vassili
1830 kCharacterAction122732000 = 122732000,
1831 kCharacterAction168459827 = 168459827,
1832 kCharacterAction191477936 = 191477936,
1833
1835 // Vesna
1837 kCharacterAction124190740 = 124190740,
1838 kCharacterAction134427424 = 134427424,
1839 kCharacterAction135024800 = 135024800,
1840 kCharacterAction137165825 = 137165825,
1841 kCharacterAction155913424 = 155913424,
1842 kCharacterAction190412928 = 190412928,
1843 kCharacterAction203663744 = 203663744,
1844 kCharacterAction204832737 = 204832737,
1845
1847 // Misc
1849 kCharacterAction158610240 = 158610240,
1850 kCharacterAction167992577 = 167992577,
1851 kCharacterAction168646401 = 168646401,
1852 kCharacterAction169300225 = 169300225,
1853 kCharacterAction169773228 = 169773228,
1854 kCharacterActionEndChapter = 190346110,
1855 kCharacterAction191001984 = 191001984,
1856 kCharacterAction192637492 = 192637492,
1857 kCharacterAction201959744 = 201959744,
1858 kCharacterAction202621266 = 202621266,
1859 kCharacterAction202884544 = 202884544,
1860 kCharacterAction203078272 = 203078272,
1861 kCharacterAction205034665 = 205034665,
1862 kCharacterAction205294778 = 205294778,
1863 kCharacterActionUseWhistle = 270751616,
1864 kCharacterAction272177921 = 272177921,
1865 kCharacterAction224309120 = 224309120,
1866 kCharacterAction225358684 = 225358684,
1867 kCharacterAction225367984 = 225367984,
1868 kCharacterAction226078300 = 226078300, // Whistle
1869
1870 kCharacterActionEnd
1871};
1872
1874// Menu Action IDs
1876enum MenuActions {
1877 kMenuActionNone = 0,
1878 kMenuActionPlayGame,
1879 kMenuActionCredits,
1880 kMenuActionQuit,
1881 kMenuAction4,
1882 kMenuAction5, // 5
1883 kMenuActionSwitchEggs,
1884 kMenuActionRewind,
1885 kMenuActionFastForward,
1886 kMenuAction9,
1887 kMenuActionGoToParis, // 10
1888 kMenuActionGoToStrasbourg,
1889 kMenuActionGoToMunich,
1890 kMenuActionGoToVienna,
1891 kMenuActionGoToBudapest,
1892 kMenuActionGoToBelgrad, // 15
1893 kMenuActionGoToCostantinople,
1894 kMenuActionVolumeDown,
1895 kMenuActionVolumeUp,
1896 kMenuActionBrightnessDown,
1897 kMenuActionBrightnessUp, // 20
1898};
1899
1901// Action IDs
1903enum Actions {
1904 kActionNone = 0,
1905 kActionInventory,
1906 kActionSendCathMessage,
1907 kActionPlaySound,
1908 kActionPlayMusic,
1909 kActionKnock, // 5
1910 kActionCompartment,
1911 kActionPlaySounds,
1912 kActionPlayAnimation,
1913 kActionSetDoor,
1914 kActionSetModel, // 10
1915 kActionSetItem,
1916 kActionKnockInside,
1917 kActionTakeItem,
1918 kActionDropItem,
1919 kActionLinkOnGlobal, // 15
1920 kActionRattle,
1921 kActionDummyAction1,
1922 kActionLeanOutWindow,
1923 kActionAlmostFall,
1924 kActionClimbInWindow, // 20
1925 kActionClimbLadder,
1926 kActionClimbDownTrain,
1927 kActionKronosSanctum,
1928 kActionEscapeBaggage,
1929 kActionEnterBaggage, // 25
1930 kActionBombPuzzle,
1931 kActionConductors,
1932 kActionKronosConcert,
1933 kActionLetterInAugustSuitcase,
1934 kActionCatchBeetle, // 30
1935 kActionExitCompartment,
1936 kActionOutsideTrain,
1937 kActionFirebirdPuzzle,
1938 kActionOpenMatchBox,
1939 kActionOpenBed, // 35
1940 kActionDummyAction2,
1941 kActionHintDialog,
1942 kActionMusicEggBox,
1943 kActionFindEggUnderSink,
1944 kActionBed, // 40
1945 kActionPlayMusicChapter,
1946 kActionPlayMusicChapterSetupTrain,
1947 kActionSwitchChapter,
1948 kActionEasterEgg
1949};
1950
1952// Node properties
1954enum NodeProperties {
1955 kNodeHasDoor = 1,
1956 kNodeHasItem,
1957 kNodeHas2Items,
1958 kNodeHasDoorItem,
1959 kNodeHas3Items,
1960 kNodeModelPad,
1961 kNodeSoftPoint,
1962 kNodeSoftPointItem,
1963
1964 kNodeAutoWalk = 128,
1965 kNodeSleepingOnBed,
1966 kNodeBeetle,
1967 kNodePullingStop,
1968 kNodeRebeccaDiary,
1969 kNodeExitFastWalk
1970};
1971
1973// Game Progress
1975enum GameGlobals {
1976 kGlobalJacket = 1,
1977 kGlobalCorpseMovedFromFloor,
1978 kGlobalReadLetterInAugustSuitcase,
1979 kGlobalFoundCorpse,
1980 kGlobalCharacterSearchingForCath,
1981 kGlobalPhaseOfTheNight,
1982 kGlobalCathIcon,
1983 kGlobalCorpseHasBeenThrown,
1984 kGlobalFrancoisHasSeenCorpseThrown,
1985 kGlobalAnnaIsEating,
1986 kGlobalChapter,
1987 kGlobalDoneSavePointAfterLeftCompWithNewJacket,
1988 kGlobalMetAugust,
1989 kGlobalIsDayTime,
1990 kGlobalPoliceHasBoardedAndGone,
1991 kGlobalConcertIsHappening,
1992 kGlobalKahinaKillTimeoutActive,
1993 kGlobalMaxHasToStayInBaggage,
1994 kGlobalUnknownDebugFlag,
1995 kGlobalTrainIsRunning,
1996 kGlobalAnnaIsInBaggageCar,
1997 kGlobalDoneSavePointAfterLeavingSuitcaseInCathComp,
1998 kGlobalTatianaFoundOutEggStolen,
1999 kGlobalOverheardAugustInterruptingAnnaAtDinner,
2000 kGlobalMetTatianaAndVassili,
2001 kGlobalOverheardTatianaAndAlexeiAtBreakfast,
2002 kGlobalKnowAboutAugust,
2003 kGlobalKnowAboutKronos,
2004 kGlobalEggIsOpen,
2005 kGlobalCanPlayKronosSuitcaseLeftInCompMusic,
2006 kGlobalCanPlayEggSuitcaseMusic,
2007 kGlobalCanPlayEggUnderSinkMusic,
2008 kGlobalCathInSpecialState,
2009 kGlobalOverheardAlexeiTellingTatianaAboutBomb,
2010 kGlobalOverheardAlexeiTellingTatianaAboutWantingToKillVassili,
2011 kGlobalOverheardTatianaAndAlexeiPlayingChess,
2012 kGlobalOverheardMilosAndVesnaConspiring,
2013 kGlobalOverheardVesnaAndMilosDebatingAboutCath,
2014 kGlobalFrancoisSawABlackBeetle,
2015 kGlobalOverheardMadameAndFrancoisTalkingAboutWhistle,
2016 kGlobalMadameDemandedMaxInBaggage,
2017 kGlobalMadameComplainedAboutMax,
2018 kGlobalMetMadame,
2019 kGlobalKnowAboutRebeccaDiary,
2020 kGlobalOverheardSophieTalkingAboutCath,
2021 kGlobalMetSophieAndRebecca,
2022 kGlobalKnowAboutRebeccaAndSophieRelationship,
2023 kGlobalRegisteredTimeAtWhichCathGaveFirebirdToKronos,
2024 kGlobalMetMahmud,
2025 kGlobalAlmostFallActionIsAvailable,
2026 kGlobalMetMilos,
2027 kGlobalMetMonsieur,
2028 kGlobalMetHadija,
2029 kGlobalMetYasmin,
2030 kGlobalMetAlouan,
2031 kGlobalMetFatima,
2032 kGlobalTatianaScheduledToVisitCath,
2033
2034 kGlobalCount = 128
2035};
2036
2037} // End of namespace LastExpress
2038
2039#endif // LASTEXPRESS_SHARED_H
Definition: archive.h:29