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 
27 namespace LastExpress {
28 
30 // Sound
32 
33 enum 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 */
102 enum 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 
163 enum AmbientSoundState : uint {
164  kAmbientSoundEnabled = 1,
165  kAmbientSoundSteam = 2,
166  kAmbientLooping = 69
167 };
168 
169 enum SoundDriverFlag : uint {
170  kSoundDriverInitState = 0x1,
171  kSoundDriverNISHasRequestedDelay = 0x2,
172  kSoundDriverClearBufferRequested = 0x4,
173  kSoundDriverClearBufferProcessed = 0x8,
174  kSoundDriverNISHasRequestedFade = 0x20,
175  kSoundDriverStarted = 0x8000
176 };
177 
178 enum 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 
188 enum EventChannel : int {
189  kEventChannelMouse = 1,
190  kEventChannelTimer = 3,
191  kEventChannelEngine = 4
192 };
193 
194 enum 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 
204 enum 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 
224 enum 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 
237 enum 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
523 enum ArchiveIndex {
524  kArchiveAll = 0,
525  kArchiveCd1 = 1,
526  kArchiveCd2 = 2,
527  kArchiveCd3 = 3
528 };
529 
530 enum 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
542 enum 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
604 enum JacketType {
605  kJacketOriginal = 0,
606  kJacketBlood = 1,
607  kJacketGreen = 2
608 };
609 
611 // City
613 enum 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
636 enum GameId {
637  kGameBlue = 0,
638  kGameRed,
639  kGameGreen,
640  kGamePurple,
641  kGameTeal,
642  kGameGold
643 };
644 
645 enum SavegameType {
646  kSavegameTypeIndex = 0,
647  kSavegameTypeTime = 1,
648  kSavegameTypeEvent = 2,
649  kSavegameTypeEvent2 = 3,
650  kSavegameTypeAuto = 4,
651  kSavegameTypeTickInterval = 5
652 };
653 
655 // Cursor style
657 enum 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
722 typedef unsigned char PositionOld;
723 
725 // EntityPosition
727 enum 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
846 enum Location {
847  kLocationOutsideCompartment = 0,
848  kLocationInsideCompartment = 1,
849  kLocationOutsideTrain = 2
850 };
851 
853 // Car
855 enum 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
871 enum ClothesIndex {
872  kClothesDefault = 0,
873  kClothes1 = 1,
874  kClothes2 = 2,
875  kClothes3 = 3,
876 
877  kClothesInvalid
878 };
879 
881 // Objects (doors)
883 enum 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 
898 enum 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
915 enum EntityDirection {
916  kDirectionNone = 0,
917  kDirectionUp = 1,
918  kDirectionDown = 2,
919  kDirectionLeft = 3,
920  kDirectionRight = 4,
921  kDirectionSwitch = 5
922 };
923 
925 // Combat
927 enum 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
938 enum 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
990 enum 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
1125 enum 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
1178 enum 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
1457 enum 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
1876 enum 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
1903 enum 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
1954 enum 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
1975 enum 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