ScummVM API documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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 {
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  (kActionEndSound). 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 entity
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 entity-related sounds when distance to entity 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 kEntityTables2
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 {
164  kAmbientSoundEnabled = 1,
165  kAmbientSoundSteam = 2
166 };
167 
169 // Time values
171 
172 // Time is measured in ticks, with 15 ticks per second. One minute is 900
173 // ticks, one hour is 54,000 ticks, and one day is 1,296,000 ticks.
174 
175 enum TimeValue : uint {
176  kTimeNone = 0,
177  kTime5933 = 5933,
178 
179  kTimeCityParis = 1037700, // Day 1, 19:13
180  kTime1039500 = 1039500, // Day 1, 19:15
181  kTimeStartGame = 1061100, // Day 1, 19:39
182 
183  // Chapter 1
184  kTimeChapter1 = 1062000, // Day 1, 19:40
185  kTime1071000 = 1071000, // Day 1, 19:50
186  kTimeParisEpernay = 1075500, // Day 1, 19:55
187  kTime1080000 = 1080000, // Day 1, 20:00
188  kTime1084500 = 1084500, // Day 1, 20:05
189  kTime1089000 = 1089000, // Day 1, 20:10
190  kTime1093500 = 1093500, // Day 1, 20:15
191  kTime1094400 = 1094400, // Day 1, 20:16
192  kTime1096200 = 1096200, // Day 1, 20:18
193  kTime1098000 = 1098000, // Day 1, 20:20
194  kTime1102500 = 1102500, // Day 1, 20:25
195  kTime1107000 = 1107000, // Day 1, 20:30
196  kTime1111500 = 1111500, // Day 1, 20:35
197  kTime1120500 = 1120500, // Day 1, 20:45
198  kTime1125000 = 1125000, // Day 1, 20:50
199  kTime1134000 = 1134000, // Day 1, 21:00
200  kTime1138500 = 1138500, // Day 1, 21:05
201  kTime1143000 = 1143000, // Day 1, 21:10
202  kTimeEnterEpernay = 1147500, // Day 1, 21:15
203  kTimeCityEpernay = 1148400, // Day 1, 21:16
204  kTimeExitEpernay = 1150200, // Day 1, 21:18
205  kTime1156500 = 1156500, // Day 1, 21:25
206  kTime1161000 = 1161000, // Day 1, 21:30
207  kTime1162800 = 1162800, // Day 1, 21:32
208  kTime1165500 = 1165500, // Day 1, 21:35
209  kTime1167300 = 1167300, // Day 1, 21:37
210  kTimeEnterChalons = 1170000, // Day 1, 21:40
211  kTimeCityChalons = 1170900, // Day 1, 21:41
212  kTimeExitChalons = 1173600, // Day 1, 21:44
213  kTime1174500 = 1174500, // Day 1, 21:45
214  kTime1179000 = 1179000, // Day 1, 21:50
215  kTime1183500 = 1183500, // Day 1, 21:55
216  kTime1184400 = 1184400, // Day 1, 21:56
217  kTime1188000 = 1188000, // Day 1, 22:00
218  kTime1189800 = 1189800, // Day 1, 22:02
219  kTime1192500 = 1192500, // Day 1, 22:05
220  kTime1197000 = 1197000, // Day 1, 22:10
221  kTime1201500 = 1201500, // Day 1, 22:15
222  kTime1206000 = 1206000, // Day 1, 22:20
223  kTime1215000 = 1215000, // Day 1, 22:30
224  kTime1224000 = 1224000, // Day 1, 22:40
225  kTime1225800 = 1225800, // Day 1, 22:42
226  kTimeCityBarLeDuc = 1228500, // Day 1, 22:45
227  kTimeExitBarLeDuc = 1231200, // Day 1, 22:48
228  kTime1233000 = 1233000, // Day 1, 22:50
229  kTime1242000 = 1242000, // Day 1, 23:00
230  kTime1260000 = 1260000, // Day 1, 23:20
231  kTimeCityNancy = 1303200, // Day 2, 00:08
232  kTimeExitNancy = 1307700, // Day 2, 00:13
233  kTime1323000 = 1323000, // Day 2, 00:30
234  kTimeCityLuneville = 1335600, // Day 2, 00:44
235  kTimeExitLuneville = 1338300, // Day 2, 00:47
236  kTimeCityAvricourt = 1359900, // Day 2, 01:11
237  kTimeExitAvricourt = 1363500, // Day 2, 01:15
238  kTimeCityDeutschAvricourt = 1367100, // Day 2, 01:19
239  kTimeExitDeutschAvricourt = 1370700, // Day 2, 01:23
240  kTime1386000 = 1386000, // Day 2, 01:40
241  kTimeBedTime = 1404000, // Day 2, 02:00
242  kTime1417500 = 1417500, // Day 2, 02:15
243  kTimeEnterStrasbourg = 1424700, // Day 2, 02:23
244  kTime1449000 = 1449000, // Day 2, 02:50
245  kTime1458000 = 1458000, // Day 2, 03:00
246  kTime1485000 = 1485000, // Day 2, 03:30
247  kTime1489500 = 1489500, // Day 2, 03:35
248  kTimeCityStrasbourg = 1490400, // Day 2, 03:36
249  kTime1492200 = 1492200, // Day 2, 03:38
250  kTimeExitStrasbourg = 1493100, // Day 2, 03:39
251  kTimeChapter1End = 1494000, // Day 2, 03:40
252  kTime1503000 = 1503000, // Day 2, 03:50
253  kTime1512000 = 1512000, // Day 2, 04:00
254  kTimeCityBadenOos = 1539000, // Day 2, 04:30
255  kTimeExitBadenOos = 1541700, // Day 2, 04:33
256  kTimeCityKarlsruhe = 1563300, // Day 2, 04:57
257  kTimeCityStuttgart = 1656000, // Day 2, 06:40
258  kTimeChapter1End2 = 1647000, // Day 2, 06:30
259  kTimeChapter1End3 = 1674000, // Day 2, 07:00
260  kTimeCityGeislingen = 1713600, // Day 2, 07:44
261  kTime1714500 = 1714500, // Day 2, 07:45
262  kTimeCityUlm = 1739700, // Day 2, 08:13
263 
264  // Chapter 2
265  kTimeChapter2 = 1750500, // Day 2, 08:25
266  kTime1759500 = 1759500, // Day 2, 08:35
267  kTime1755000 = 1755000, // Day 2, 08:30
268  kTime1764000 = 1764000, // Day 2, 08:40
269  kTime1768500 = 1768500, // Day 2, 08:45
270  kTime1773000 = 1773000, // Day 2, 08:50
271  kTime1777500 = 1777500, // Day 2, 08:55
272  kTime1782000 = 1782000, // Day 2, 09:00
273  kTime1786500 = 1786500, // Day 2, 09:05
274  kTime1791000 = 1791000, // Day 2, 09:10
275  kTime1800000 = 1800000, // Day 2, 09:20
276  kTime1801800 = 1801800, // Day 2, 09:22
277  kTime1806300 = 1806300, // Day 2, 09:27
278  kTime1809000 = 1809000, // Day 2, 09:30
279  kTimeCityAugsburg = 1809900, // Day 2, 09:31
280  kTime1813500 = 1813500, // Day 2, 09:35
281  kTime1818000 = 1818000, // Day 2, 09:40
282  kTime1818900 = 1818900, // Day 2, 09:41
283  kTime1820700 = 1820700, // Day 2, 09:43
284  kTime1822500 = 1822500, // Day 2, 09:45
285  kTime1827000 = 1827000, // Day 2, 09:50
286  kTime1831500 = 1831500, // Day 2, 09:55
287  kTime1836000 = 1836000, // Day 2, 10:00
288  kTime1845000 = 1845000, // Day 2, 10:10
289  kTime1849500 = 1849500, // Day 2, 10:15
290  kTimeCityMunich = 1852200, // Day 2, 10:18
291 
292  // Chapter 3
293  kTimeChapter3 = 1944000, // Day 2, 12:00
294  kTime1953000 = 1953000, // Day 2, 12:10
295  kTime1966500 = 1966500, // Day 2, 12:25
296  kTime1969200 = 1969200, // Day 2, 12:28
297  kTime1971000 = 1971000, // Day 2, 12:30
298  kTimeEnterSalzbourg = 1982700, // Day 2, 12:43
299  kTime1983600 = 1983600, // Day 2, 12:44
300  kTimeCitySalzbourg = 1984500, // Day 2, 12:45
301  kTime1989000 = 1989000, // Day 2, 12:50
302  kTimeExitSalzbourg = 1989900, // Day 2, 12:51
303  kTime1993500 = 1993500, // Day 2, 12:55
304  kTime1998000 = 1998000, // Day 2, 13:00
305  kTime2002500 = 2002500, // Day 2, 13:05
306  kTime2011500 = 2011500, // Day 2, 13:15
307  kTime2016000 = 2016000, // Day 2, 13:20
308  kTime2020500 = 2020500, // Day 2, 13:25
309  kTime2025000 = 2025000, // Day 2, 13:30
310  kTime2034000 = 2034000, // Day 2, 13:40
311  kTime2038500 = 2038500, // Day 2, 13:45
312  kTime2040300 = 2040300, // Day 2, 13:47
313  kTime2043000 = 2043000, // Day 2, 13:50
314  kTimeEnterAttnangPuchheim = 2047500, // Day 2, 13:55
315  kTimeCityAttnangPuchheim = 2049300, // Day 2, 13:57
316  kTime2052000 = 2052000, // Day 2, 14:00
317  kTimeExitAttnangPuchheim = 2052900, // Day 2, 14:01
318  kTime2056500 = 2056500, // Day 2, 14:05
319  kTime2061000 = 2061000, // Day 2, 14:10
320  kTime2062800 = 2062800, // Day 2, 14:12
321  kTime2065500 = 2065500, // Day 2, 14:15
322  kTime2070000 = 2070000, // Day 2, 14:20
323  kTimeEnterWels = 2073600, // Day 2, 14:24
324  kTimeCityWels = 2075400, // Day 2, 14:26
325  kTime2079000 = 2079000, // Day 2, 14:30
326  kTimeExitWels = 2079900, // Day 2, 14:31
327  kTime2083500 = 2083500, // Day 2, 14:35
328  kTime2088000 = 2088000, // Day 2, 14:40
329  kTime2088900 = 2088900, // Day 2, 14:41
330  kTime2092500 = 2092500, // Day 2, 14:45
331  kTime2097000 = 2097000, // Day 2, 14:50
332  kTimeEnterLinz = 2099700, // Day 2, 14:53
333  kTimeCityLinz = 2101500, // Day 2, 14:55
334  kTimeExitLinz = 2105100, // Day 2, 14:59
335  kTime2106000 = 2106000, // Day 2, 15:00
336  kTime2110500 = 2110500, // Day 2, 15:05
337  kTime2115000 = 2115000, // Day 2, 15:10
338  kTime2117700 = 2117700, // Day 2, 15:13
339  kTime2119500 = 2119500, // Day 2, 15:15
340  kTime2124000 = 2124000, // Day 2, 15:20
341  kTime2133000 = 2133000, // Day 2, 15:30
342  kTime2138400 = 2138400, // Day 2, 15:36
343  kTime2142000 = 2142000, // Day 2, 15:40
344  kTime2146500 = 2146500, // Day 2, 15:45
345  kTime2147400 = 2147400, // Day 2, 15:46
346  kTime2151000 = 2151000, // Day 2, 15:50
347  kTimeCityAmstetten = 2154600, // Day 2, 15:54
348  kTime2155500 = 2155500, // Day 2, 15:55
349  kTime2160000 = 2160000, // Day 2, 16:00
350  kTime2169000 = 2169000, // Day 2, 16:10
351  kTime2173500 = 2173500, // Day 2, 16:15
352  kTime2187000 = 2187000, // Day 2, 16:30
353  kTime2182500 = 2182500, // Day 2, 16:25
354  kTime2196000 = 2196000, // Day 2, 16:40
355  kTime2200500 = 2200500, // Day 2, 16:45
356  kTime2205000 = 2205000, // Day 2, 16:50
357  kTime2214000 = 2214000, // Day 2, 17:00
358  kTime2218500 = 2218500, // Day 2, 17:05
359  kTime2223000 = 2223000, // Day 2, 17:10
360  kTime2227500 = 2227500, // Day 2, 17:15
361  kTime2241000 = 2241000, // Day 2, 17:30
362  kTime2248200 = 2248200, // Day 2, 17:38
363  kTime2250000 = 2250000, // Day 2, 17:40
364  kTime2254500 = 2254500, // Day 2, 17:45
365  kTime2259000 = 2259000, // Day 2, 17:50
366  kTime2263500 = 2263500, // Day 2, 17:55
367  kTime2266200 = 2266200, // Day 2, 17:58
368  kTimeCityVienna = 2268000, // Day 2, 18:00
369 
370  // Chapter 4
371  kTime2349000 = 2349000, // Day 2, 19:30
372  kTimeChapter4 = 2353500, // Day 2, 19:35
373  kTime2354400 = 2354400, // Day 2, 19:36
374  kTime2356200 = 2356200, // Day 2, 19:38
375  kTime2358000 = 2358000, // Day 2, 19:40
376  kTime2360700 = 2360700, // Day 2, 19:43
377  kTime2362500 = 2362500, // Day 2, 19:45
378  kTime2361600 = 2361600, // Day 2, 19:44
379  kTime2367000 = 2367000, // Day 2, 19:50
380  kTime2370600 = 2370600, // Day 2, 19:54
381  kTime2378700 = 2378700, // Day 2, 20:03
382  kTimeEnterPoszony = 2381400, // Day 2, 20:06
383  kTimeCityPoszony = 2383200, // Day 2, 20:08
384  kTime2385000 = 2385000, // Day 2, 20:10
385  kTimeExitPoszony = 2386800, // Day 2, 20:12
386  kTime2389500 = 2389500, // Day 2, 20:15
387  kTime2394000 = 2394000, // Day 2, 20:20
388  kTime2398500 = 2398500, // Day 2, 20:25
389  kTime2403000 = 2403000, // Day 2, 20:30
390  kTime2407500 = 2407500, // Day 2, 20:35
391  kTime2410200 = 2410200, // Day 2, 20:38
392  kTime2412000 = 2412000, // Day 2, 20:40
393  kTime2414700 = 2414700, // Day 2, 20:43
394  kTime2415600 = 2415600, // Day 2, 20:44
395  kTimeEnterGalanta = 2416500, // Day 2, 20:45
396  kTimeCityGalanta = 2418300, // Day 2, 20:47
397  kTime2421000 = 2421000, // Day 2, 20:50
398  kTimeExitGalanta = 2421900, // Day 2, 20:51
399  kTime2422800 = 2422800, // Day 2, 20:52
400  kTime2428200 = 2428200, // Day 2, 20:58
401  kTime2425500 = 2425500, // Day 2, 20:55
402  kTime2430000 = 2430000, // Day 2, 21:00
403  kTime2434500 = 2434500, // Day 2, 21:05
404  kTime2439000 = 2439000, // Day 2, 21:10
405  kTime2443500 = 2443500, // Day 2, 21:15
406  kTime2448000 = 2448000, // Day 2, 21:20
407  kTime2452500 = 2452500, // Day 2, 21:25
408  kTime2455200 = 2455200, // Day 2, 21:28
409  kTime2457000 = 2457000, // Day 2, 21:30
410  kTime2466000 = 2466000, // Day 2, 21:40
411  kTime2470500 = 2470500, // Day 2, 21:45
412  kTime2475000 = 2475000, // Day 2, 21:50
413  kTime2479500 = 2479500, // Day 2, 21:55
414  kTime2484000 = 2484000, // Day 2, 22:00
415  kTime2488500 = 2488500, // Day 2, 22:05
416  kTime2493000 = 2493000, // Day 2, 22:10
417  kTime2506500 = 2506500, // Day 2, 22:25
418  kTime2507400 = 2507400, // Day 2, 22:26
419  kTime2511000 = 2511000, // Day 2, 22:30
420  kTime2511900 = 2511900, // Day 2, 22:31
421  kTime2517300 = 2517300, // Day 2, 22:37
422  kTime2519100 = 2519100, // Day 2, 22:39
423  kTime2520000 = 2520000, // Day 2, 22:40
424  kTime2533500 = 2533500, // Day 2, 22:55
425  kTime2535300 = 2535300, // Day 2, 22:57
426  kTime2538000 = 2538000, // Day 2, 23:00
427  kTimeCityBudapest = 2551500, // Day 2, 23:15
428 
429  // Chapter 5
430  kTimeChapter5 = 2844000, // Day 3, 04:40
431  kTimeTrainStopped = 2898000, // Day 3, 05:40
432  kTime2907000 = 2907000, // Day 3, 05:50
433  kTime2916000 = 2916000, // Day 3, 06:00
434  kTime2934000 = 2934000, // Day 3, 06:20
435  kTimeTrainStopped2 = 2943000, // Day 3, 06:30
436  kTime2949300 = 2949300, // Day 3, 06:37
437  kTimeCityBelgrade = 2952000, // Day 3, 06:40
438  kTime2983500 = 2983500, // Day 3, 07:15
439  kTimeCityNish = 3205800, // Day 3, 11:22
440  kTimeCityTzaribrod = 3492000, // Day 3, 16:40
441  kTime3645000 = 3645000, // Day 3, 19:30
442  kTimeCitySofia = 3690000, // Day 3, 20:20
443  kTimeCityAdrianople = 4320900, // Day 4, 08:01
444  kTime4914000 = 4914000, // Day 4, 19:00
445  kTime4920300 = 4920300, // Day 4, 19:07
446  kTime4923000 = 4923000, // Day 4, 19:10
447  kTime4929300 = 4929300, // Day 4, 19:17
448  kTimeCityConstantinople = 4941000, // Day 4, 19:30
449 
450 
451  kTime10881000 = 10881000,
452  kTimeEnd = 15803100,
453  kTime16451100 = 16451100,
454 
455  kTimeInvalid = 2147483647,
456  kTimeInvalid2 = 0xFFFFFEDA
457 };
458 
460 // Archive & Chapter ID
462 enum ArchiveIndex {
463  kArchiveAll = 0,
464  kArchiveCd1 = 1,
465  kArchiveCd2 = 2,
466  kArchiveCd3 = 3
467 };
468 
469 enum ChapterIndex {
470  kChapterAll = 0,
471  kChapter1 = 1,
472  kChapter2 = 2,
473  kChapter3 = 3,
474  kChapter4 = 4,
475  kChapter5 = 5
476 };
477 
479 // Index of scenes
481 enum SceneIndex : uint {
482  kSceneNone = 0,
483  kSceneMenu = 1,
484 
485  kSceneIntro = 30,
486 
487  // Inventory
488  kSceneMatchbox = 31,
489  kSceneTelegram = 32,
490  kScenePassengerList = 33,
491  kSceneScarf = 34,
492  kSceneParchemin = 35,
493  kSceneArticle = 36,
494  kScenePaper = 37,
495  kSceneFirebird = 38,
496  kSceneBriefcase = 39,
497 
498  // Normal scenes
499  kSceneDefault = 40,
500  kScene41 = 41,
501  kSceneCompartmentCorpse = 42, // Tyler compartment with corpse on floor
502 
503  // Fight
504  kSceneFightMilos = 43,
505  kSceneFightMilosBedOpened = 44,
506  kSceneFightAnna = 45,
507  kSceneFightIvo = 46,
508  kSceneFightSalko = 47,
509  kSceneFightVesna = 48,
510 
511  kSceneEuropeMap = 49,
512 
513  // Game over
514  kSceneGameOverStopPolice = 50,
515  kSceneGameOverTrainStopped = 51,
516  kSceneGameOverTrainStopped2 = 52,
517  kSceneGameOverTrainExplosion = 53,
518  kSceneGameOverTrainExplosion2 = 54,
519  kSceneGameOverBloodJacket = 55,
520  kSceneGameOverPolice = 56,
521  kSceneGameOverPolice1 = 57,
522  kSceneGameOverAnnaDied = 58,
523  kSceneGameOverVienna = 59,
524  kSceneGameOverVienna1 = 60,
525  kSceneGameOverVienna2 = 61,
526  kSceneGameOverAlarm = 62,
527  kSceneGameOverPolice2 = 63,
528  kSceneGameOverAlarm2 = 64,
529 
530  // Start screen
531  kSceneStartScreen = 65,
532 
533  kSceneBeetle = 128,
534 
535  kSceneFightDefault = 820,
536 
537  kSceneInvalid = 0xffffffff
538 };
539 
541 // Jacket
543 enum JacketType {
544  kJacketOriginal = 0,
545  kJacketBlood = 1,
546  kJacketGreen = 2
547 };
548 
550 // City
552 enum CityIndex {
553  kCityEpernay = 0,
554  kCityChalons,
555  kCityBarleduc,
556  kCityNancy,
557  kCityLuneville,
558  kCityAvricourt, // 5
559  kCityDeutschAvricourt,
560  kCityStrasbourg,
561  kCityBadenOos,
562  kCitySalzbourg,
563  kCityAttnangPuchheim, // 10
564  kCityWels,
565  kCityLinz,
566  kCityVienna,
567  kCityPoszony,
568  kCityGalanta, // 15
569  kCityPolice
570 };
571 
573 // Savegame ID
575 enum GameId {
576  kGameBlue = 0,
577  kGameRed,
578  kGameGreen,
579  kGamePurple,
580  kGameTeal,
581  kGameGold
582 };
583 
584 enum SavegameType {
585  kSavegameTypeIndex = 0,
586  kSavegameTypeTime = 1,
587  kSavegameTypeEvent = 2,
588  kSavegameTypeEvent2 = 3,
589  kSavegameTypeAuto = 4,
590  kSavegameTypeTickInterval = 5
591 };
592 
594 // Cursor style
596 enum CursorStyle {
597  kCursorNormal,
598  kCursorForward,
599  kCursorBackward,
600  kCursorTurnRight,
601  kCursorTurnLeft,
602  kCursorUp,
603  kCursorDown,
604  kCursorLeft,
605  kCursorRight,
606  kCursorHand,
607  kCursorHandKnock, // 10
608  kCursorMagnifier,
609  kCursorHandPointer,
610  kCursorSleep,
611  kCursorTalk,
612  kCursorTalk2, // Need better name
613 
614  // Items
615  kCursorMatchBox,
616  kCursorTelegram,
617  kCursorPassengerList,
618  kCursorArticle,
619  kCursorScarf, // 20
620  kCursorPaper,
621  kCursorParchemin,
622  kCursorMatch,
623  kCursorWhistle,
624  kCursorKey,
625  kCursorBomb,
626  kCursorFirebird,
627  kCursorBriefcase,
628  kCursorCorpse,
629 
630  // Combat
631  kCursorPunchLeft, // 30
632  kCursorPunchRight,
633 
634  // Portraits
635  kCursorPortrait, // 32
636  kCursorPortraitSelected,
637  kCursorPortraitGreen,
638  kCursorPortraitGreenSelected,
639  kCursorPortraitYellow,
640  kCursorPortraitYellowSelected,
641  kCursorHourGlass,
642  kCursorEggBlue,
643  kCursorEggRed, // 40
644  kCursorEggGreen,
645  kCursorEggPurple,
646  kCursorEggTeal,
647  kCursorEggGold,
648  kCursorEggClock,
649  kCursorNormal2,
650  kCursorBlank,
651  kCursorMAX,
652 
653  // Special
654  kCursorProcess = 128,
655  kCursorKeepValue = 255
656 };
657 
659 // Position - should be between 0 & 100
661 typedef unsigned char Position;
662 
664 // EntityPosition
666 enum EntityPosition {
667  kPositionNone = 0,
668  kPosition_1 = 1,
669  kPosition_3 = 3,
670  kPosition_4 = 4,
671  kPosition_500 = 500,
672  kPosition_540 = 540,
673  kPosition_750 = 750,
674  kPosition_849 = 849,
675  kPosition_850 = 850,
676  kPosition_851 = 851,
677  kPosition_1200 = 1200,
678  kPosition_1430 = 1430,
679  kPosition_1500 = 1500,
680  kPosition_1540 = 1540,
681  kPosition_1750 = 1750,
682  kPosition_2000 = 2000,
683  kPosition_2087 = 2087,
684  kPosition_2086 = 2086,
685  kPosition_2088 = 2088,
686  kPosition_2110 = 2110,
687  kPosition_2300 = 2300,
688  kPosition_2330 = 2330,
689  kPosition_2410 = 2410,
690  kPosition_2436 = 2436,
691  kPosition_2490 = 2490,
692  kPosition_2500 = 2500,
693  kPosition_2587 = 2587,
694  kPosition_2588 = 2588,
695  kPosition_2690 = 2690,
696  kPosition_2740 = 2740,
697  kPosition_2830 = 2830,
698  kPosition_2980 = 2980,
699  kPosition_3050 = 3050,
700  kPosition_3110 = 3110,
701  kPosition_3390 = 3390,
702  kPosition_3450 = 3450,
703  kPosition_3500 = 3500,
704  kPosition_3550 = 3550,
705  kPosition_3650 = 3650,
706  kPosition_3760 = 3760,
707  kPosition_3820 = 3820,
708  kPosition_3890 = 3890,
709  kPosition_3969 = 3969,
710  kPosition_3970 = 3970,
711  kPosition_4070 = 4070,
712  kPosition_4100 = 4100,
713  kPosition_4370 = 4370,
714  kPosition_4455 = 4455,
715  kPosition_4460 = 4460,
716  kPosition_4500 = 4500,
717  kPosition_4590 = 4590,
718  kPosition_4680 = 4680,
719  kPosition_4689 = 4689,
720  kPosition_4690 = 4690,
721  kPosition_4691 = 4691,
722  kPosition_4770 = 4470,
723  kPosition_4840 = 4840,
724  kPosition_5000 = 5000,
725  kPosition_5090 = 5090,
726  kPosition_5140 = 5140,
727  kPosition_5419 = 5419,
728  kPosition_5420 = 5420,
729  kPosition_5440 = 5440,
730  kPosition_5500 = 5500,
731  kPosition_5540 = 5540,
732  kPosition_5610 = 5610,
733  kPosition_5790 = 5790,
734  kPosition_5799 = 5799,
735  kPosition_5800 = 5800,
736  kPosition_5810 = 5810,
737  kPosition_5890 = 5890,
738  kPosition_5900 = 5900,
739  kPosition_5970 = 5970,
740  kPosition_6000 = 6000,
741  kPosition_6130 = 6130,
742  kPosition_6160 = 6160,
743  kPosition_6220 = 6220,
744  kPosition_6410 = 6410,
745  kPosition_6460 = 6460,
746  kPosition_6469 = 6469,
747  kPosition_6470 = 6470,
748  kPosition_6471 = 6471,
749  kPosition_6800 = 6800,
750  kPosition_6850 = 6850,
751  kPosition_7000 = 7000,
752  kPosition_7160 = 7160,
753  kPosition_7250 = 7250,
754  kPosition_7320 = 7320,
755  kPosition_7500 = 7500,
756  kPosition_7510 = 7510,
757  kPosition_7850 = 7850,
758  kPosition_7870 = 7870,
759  kPosition_7900 = 7900,
760  kPosition_7950 = 7950,
761  kPosition_8000 = 8000,
762  kPosition_8012 = 8012,
763  kPosition_8013 = 8013,
764  kPosition_8160 = 8160,
765  kPosition_8200 = 8200,
766  kPosition_8500 = 8500,
767  kPosition_8512 = 8512,
768  kPosition_8513 = 8513,
769  kPosition_8514 = 8514,
770  kPosition_8800 = 8800,
771  kPosition_9020 = 9020,
772  kPosition_9269 = 9269,
773  kPosition_9250 = 9250,
774  kPosition_9270 = 9270,
775  kPosition_9271 = 9271,
776  kPosition_9460 = 9460,
777  kPosition_9500 = 9500,
778  kPosition_9510 = 9510,
779  kPosition_30000 = 30000
780 };
781 
783 // Location
785 enum Location {
786  kLocationOutsideCompartment = 0,
787  kLocationInsideCompartment = 1,
788  kLocationOutsideTrain = 2
789 };
790 
792 // Car
794 enum CarIndex {
795  kCarNone = 0,
796  kCarBaggageRear = 1,
797  kCarKronos = 2,
798  kCarGreenSleeping = 3,
799  kCarRedSleeping = 4,
800  kCarRestaurant = 5,
801  kCarBaggage = 6,
802  kCarCoalTender = 7,
803  kCarLocomotive = 8,
804  kCar9 = 9
805 };
806 
808 // Clothes
810 enum ClothesIndex {
811  kClothesDefault = 0,
812  kClothes1 = 1,
813  kClothes2 = 2,
814  kClothes3 = 3,
815 
816  kClothesInvalid
817 };
818 
820 // Objects (doors)
822 enum ObjectLocation {
823  kObjectLocationNone = 0,
824  kObjectLocation1 = 1, // Floor?
825  kObjectLocation2 = 2, // Bed ?
826  kObjectLocation3 = 3,
827  kObjectLocation4 = 4, // Window ?
828  kObjectLocation5 = 5,
829  kObjectLocation6 = 6,
830  kObjectLocation7 = 7,
831  kObjectLocation8 = 8,
832  kObjectLocation9 = 9,
833  kObjectLocation10 = 10,
834  kObjectLocation18 = 18
835 };
836 
837 enum ObjectModel {
838  kObjectModelNone = 0,
839  kObjectModel1 = 1,
840  kObjectModel2 = 2,
841  kObjectModel3 = 3,
842  kObjectModel4 = 4,
843  kObjectModel5 = 5,
844  kObjectModel6 = 6,
845  kObjectModel7 = 7,
846  kObjectModel8 = 8,
847  kObjectModel9 = 9,
848  kObjectModel10 = 10
849 };
850 
852 // Entity direction
854 enum EntityDirection {
855  kDirectionNone = 0,
856  kDirectionUp = 1,
857  kDirectionDown = 2,
858  kDirectionLeft = 3,
859  kDirectionRight = 4,
860  kDirectionSwitch = 5
861 };
862 
864 // Combat
866 enum FightType {
867  kFightMilos = 2001,
868  kFightAnna = 2002,
869  kFightIvo = 2003,
870  kFightSalko = 2004,
871  kFightVesna = 2005
872 };
873 
875 // Index of items in inventory data
877 enum InventoryItem {
878  kItemNone,
879  kItemMatchBox,
880  kItem2,
881  kItem3,
882  kItemTelegram,
883  kItem5, // 5
884  kItemPassengerList,
885  kItem7,
886  kItemScarf,
887  kItem9,
888  kItemParchemin, // 10
889  kItem11,
890  kItemMatch,
891  kItemWhistle,
892  kItemBeetle,
893  kItemKey, // 15
894  kItemBomb,
895  kItem17,
896  kItemFirebird,
897  kItemBriefcase,
898  kItemCorpse, // 20
899  kItemGreenJacket,
900  kItem22,
901  kItemPaper,
902  kItemArticle,
903  kItem25, // 25
904  kItem26,
905  kItem27,
906  kItem28,
907  kItem29,
908  kItem30, // 30
909  kItem31,
910 
911  // Portrait (not an index)
912  kPortraitOriginal = 32,
913  kPortraitGreen = 34,
914  kPortraitYellow = 36,
915 
916  kItemInvalid = 128,
917 
918  kItem146 = 146,
919  kItem147 = 147,
920 
921  // Toggles
922  kItemToggleHigh = 0x7F,
923  kItemToggleLow = 0xF7
924 };
925 
927 // Object ID
929 enum ObjectIndex {
930  kObjectNone,
931  kObjectCompartment1,
932  kObjectCompartment2,
933  kObjectCompartment3,
934  kObjectCompartment4,
935  kObjectCompartment5, // 5
936  kObjectCompartment6,
937  kObjectCompartment7,
938  kObjectCompartment8,
939  kObjectOutsideTylerCompartment,
940  kObject10, // 10
941  kObject11,
942  kObject12,
943  kObject13,
944  kObject14,
945  kObject15, // 15
946  kObject16,
947  kObjectHandleBathroom,
948  kObjectHandleInsideBathroom,
949  kObjectKitchen,
950  kObject20, // 20
951  kObject21,
952  kObject22,
953  kObjectTrainTimeTable,
954  kObjectRedSleepingCar,
955  kObject25, // 25
956  kObjectHandleOutsideLeft,
957  kObjectHandleOutsideRight,
958  kObject28,
959  kObject29,
960  kObject30, // 30
961  kObject31,
962  kObjectCompartmentA,
963  kObjectCompartmentB,
964  kObjectCompartmentC,
965  kObjectCompartmentD, // 35
966  kObjectCompartmentE,
967  kObjectCompartmentF,
968  kObjectCompartmentG,
969  kObjectCompartmentH,
970  kObject40, // 40
971  kObject41,
972  kObject42,
973  kObject43,
974  kObjectOutsideBetweenCompartments,
975  kObjectOutsideAnnaCompartment, // 45
976  kObject46,
977  kObject47,
978  kObject48, // might be the egg
979  kObject49,
980  kObject50, // 50
981  kObject51,
982  kObject52,
983  kObject53,
984  kObject54,
985  kObjectRestaurantCar, // 55
986  kObject56,
987  kObject57,
988  kObject58,
989  kObject59,
990  kObject60, // 60
991  kObject61,
992  kObject62,
993  kObject63,
994  kObject64,
995  kObject65, // 65
996  kObject66,
997  kObject67,
998  kObject68,
999  kObject69,
1000  kObject70, // 70
1001  kObject71,
1002  kObject72,
1003  kObjectCeiling,
1004  kObject74,
1005  kObjectCompartmentKronos, // 75
1006  kObject76,
1007  kObject77,
1008  kObject78,
1009  kObject79,
1010  kObject80, // 80
1011  kObject81,
1012  kObject82,
1013  kObject83,
1014  kObject84,
1015  kObject85, // 85
1016  kObject86,
1017  kObject87,
1018  kObject88,
1019  kObject89,
1020  kObject90, // 90
1021  kObject91,
1022  kObject92,
1023  kObject93,
1024  kObject94,
1025  kObject95, // 95
1026  kObject96,
1027  kObject97,
1028  kObject98,
1029  kObject99,
1030  kObject100, // 100
1031  kObject101,
1032  kObject102,
1033  kObject103,
1034  kObject104,
1035  kObject105, // 105
1036  kObject106,
1037  kObject107,
1038  kObject108,
1039  kObjectCageMax,
1040  kObject110, // 110
1041  kObject111,
1042  kObject112,
1043  kObject113,
1044  kObject114,
1045  kObject115, // 115
1046  kObject116,
1047  kObject117,
1048  kObject118,
1049  kObject119,
1050  kObject120, // 120
1051  kObject121,
1052  kObject122,
1053  kObject123,
1054  kObject124,
1055  kObject125, // 125
1056  kObject126,
1057  kObject127,
1058  kObjectMax
1059 };
1060 
1062 // Entity ID
1064 enum EntityIndex {
1065  kEntityPlayer,
1066  kEntityAnna,
1067  kEntityAugust,
1068  kEntityMertens,
1069  kEntityCoudert,
1070  kEntityPascale, // 5
1071  kEntityWaiter1,
1072  kEntityWaiter2,
1073  kEntityCooks,
1074  kEntityVerges,
1075  kEntityTatiana, // 10
1076  kEntityVassili,
1077  kEntityAlexei,
1078  kEntityAbbot,
1079  kEntityMilos,
1080  kEntityVesna, // 15
1081  kEntityIvo,
1082  kEntitySalko,
1083  kEntityKronos,
1084  kEntityKahina,
1085  kEntityFrancois, // 20
1086  kEntityMmeBoutarel,
1087  kEntityBoutarel,
1088  kEntityRebecca,
1089  kEntitySophie,
1090  kEntityMahmud, // 25
1091  kEntityYasmin,
1092  kEntityHadija,
1093  kEntityAlouan,
1094  kEntityGendarmes,
1095  kEntityMax, // 30
1096  kEntityChapters,
1097  kEntityTrain,
1098  kEntityTables0,
1099  kEntityTables1,
1100  kEntityTables2, // 35
1101  kEntityTables3,
1102  kEntityTables4,
1103  kEntityTables5,
1104  kEntity39,
1105 
1106  kEntitySteam = 255
1107 };
1108 
1110 // Events
1111 // - a single D at the end means that Cath is on the right of the "scene" (D = Down the train, U = Up the train)
1112 // - DD: during the day, coming down the train
1113 // - DU: during the day, coming up the train
1114 // - ND: during the night, coming down the train
1115 // - NU: during the night, coming up the train
1117 enum EventIndex {
1118  kEventNone = 0,
1119  kEventGotALight = 1,
1120  kEventGotALightD = 2,
1121  kEventDinerMindJoin = 3,
1122  kEventDinerAugustOriginalJacket = 4,
1123  kEventDinerAugust = 5,
1124  kEventDinerAugustAlexeiBackground = 6,
1125  kEventMeetAugustTylerCompartment = 7,
1126  kEventMeetAugustTylerCompartmentBed = 8,
1127  kEventMeetAugustHisCompartment = 9,
1128  kEventMeetAugustHisCompartmentBed = 10,
1129  kEventAugustFindCorpse = 11,
1130  kEventAugustPresentAnna = 12,
1131  kEventAugustPresentAnnaFirstIntroduction = 13,
1132  kEventAnnaIntroductionRejected = 14,
1133  kEventAnnaConversationGoodNight = 15,
1134  kEventAnnaVisitToCompartmentGun = 16,
1135  kEventInvalid_17 = 17,
1136  kEventAnnaGoodNight = 18,
1137  kEventAnnaGoodNightInverse = 19,
1138  kEventAugustGoodMorning = 20,
1139  kEventAugustMerchandise = 21,
1140  kEventAugustTalkGold = 22,
1141  kEventAugustTalkGoldDay = 23,
1142  kEventAugustTalkCompartmentDoor = 24,
1143  kEventAugustTalkCompartmentDoorBlueRedingote = 25,
1144  kEventAugustLunch = 26,
1145  kEventKronosVisit = 27,
1146  kEventAnnaSearchingCompartment = 28,
1147  kEventAugustBringEgg = 29,
1148  kEventAugustBringBriefcase = 30,
1149  kEventAugustTalkCigar = 31,
1150  kEventAnnaBaggageArgument = 32,
1151  kEventAnnaBagagePart2 = 33,
1152  kEventAnnaConversation_34 = 34,
1153  kEventAugustDrink = 35,
1154  kEventAnnaTired = 36,
1155  kEventAnnaTiredKiss = 37,
1156  kEventAnnaBaggageTies = 38,
1157  kEventAnnaBaggageTies2 = 39,
1158  kEventAnnaBaggageTies3 = 40,
1159  kEventAnnaBaggageTies4 = 41,
1160  kEventAugustUnhookCarsBetrayal = 42,
1161  kEventAugustUnhookCars = 43,
1162  kEventLocomotiveAnnaStopsTrain = 44,
1163  kEventInvalid_45 = 45,
1164  kEventTrainStopped = 46,
1165  kEventAnnaKissTrainHijacked = 47,
1166  kEventTrainHijacked = 48,
1167  kEventAnnaKilled = 49,
1168  kEventKronosGoingToInvitation = 50,
1169  kEventKronosConversation = 51,
1170  kEventKahinaAskSpeakFirebird = 52,
1171  kEventKahinaAskSpeak = 53,
1172  kEventKronosConversationFirebird = 54,
1173  kEventKahinaGunYellow = 55,
1174  kEventKahinaGunBlue = 56,
1175  kEventKahinaGun = 57,
1176  kEventKronosBringEggCeiling = 58,
1177  kEventKronosBringEgg = 59,
1178  kEventKronosBringNothing = 60,
1179  kEventKronosReturnBriefcase = 61,
1180  kEventKronosHostageAnna = 62,
1181  kEventKronosGiveFirebird = 63,
1182  kEventKahinaPunchBaggageCarEntrance = 64,
1183  kEventKahinaPunchBlue = 65,
1184  kEventKahinaPunchYellow = 66,
1185  kEventKahinaPunchSalon = 67,
1186  kEventKahinaPunchKitchen = 68,
1187  kEventKahinaPunchBaggageCar = 69,
1188  kEventKahinaPunchCar = 70,
1189  kEventKahinaPunchSuite4 = 71,
1190  kEventKahinaPunchRestaurant = 72,
1191  kEventKronosHostageAnnaNoFirebird = 73,
1192  kEventKahinaPunch = 74,
1193  kEventKahinaWrongDoor = 75,
1194  kEventAlexeiDiner = 76,
1195  kEventAlexeiDinerOriginalJacket = 77,
1196  kEventAlexeiSalonVassili = 78,
1197  kEventAlexeiSalonCath = 79,
1198  kEventAlexeiSalonPoem = 80,
1199  kEventTatianaAskMatchSpeakRussian = 81,
1200  kEventTatianaAskMatch = 82,
1201  kEventTatianaGivePoem = 83,
1202  kEventVassiliSeizure = 84,
1203  kEventTatianaBreakfastAlexei = 85,
1204  kEventTatianaBreakfast = 86,
1205  kEventTatianaBreakfastGivePoem = 87,
1206  kEventTatianaAlexei = 88,
1207  kEventTatianaCompartmentStealEgg = 89,
1208  kEventTatianaCompartment = 90,
1209  kEventVassiliCompartmentStealEgg = 91,
1210  kEventTatianaTylerCompartment = 92,
1211  kEventTylerCastleDream= 93,
1212  kEventVassiliDeadAlexei = 94,
1213  kEventCathFreePassengers = 95,
1214  kEventTatianaVassiliTalk = 96,
1215  kEventTatianaVassiliTalkNight = 97,
1216  kEventMilosTylerCompartmentVisit = 98,
1217  kEventMilosTylerCompartmentBedVisit = 99,
1218  kEventMilosTylerCompartment = 100,
1219  kEventMilosTylerCompartmentBed = 101,
1220  kEventMilosTylerCompartmentDefeat = 102,
1221  kEventMilosCorpseFloor = 103,
1222  kEventMilosCompartmentVisitAugust = 104,
1223  kEventMilosCorridorThanks = 105,
1224  kEventMilosCorridorThanksD = 106,
1225  kEventMilosCompartmentVisitTyler = 107,
1226  kEventLocomotiveMilosDay = 108,
1227  kEventLocomotiveMilosNight = 109,
1228  kEventAbbotIntroduction = 110,
1229  kEventAbbotWrongCompartment = 111,
1230  kEventAbbotWrongCompartmentBed = 112,
1231  kEventAbbotInvitationDrink = 113,
1232  kEventAbbotDrinkGiveDetonator = 114,
1233  kEventTrainExplosionBridge = 115,
1234  kEventDefuseBomb = 116,
1235  kEventAbbotDrinkDefuse = 117,
1236  kEventMertensLastCar = 118,
1237  kEventMertensLastCarOriginalJacket = 119,
1238  kEventMertensKronosInvitation = 120,
1239  kEventMertensKronosInvitationCompartment = 121,
1240  kEventMertensKronosInvitationClosedWindows = 122,
1241  kEventMertensBloodJacket = 123,
1242  kEventCoudertBloodJacket = 124,
1243  kEventMertensCorpseFloor = 125,
1244  kEventMertensCorpseBed = 126,
1245  kEventMertensDontMakeBed = 127,
1246  kEventInvalid_128 = 128,
1247  kEventGendarmesArrestation = 129,
1248  kEventVergesSuitcase = 130,
1249  kEventVergesSuitcaseStart = 131,
1250  kEventVergesSuitcaseOtherEntry = 132,
1251  kEventVergesSuitcaseOtherEntryStart = 133,
1252  kEventVergesSuitcaseNight = 134,
1253  kEventVergesSuitcaseNightStart = 135,
1254  kEventVergesSuitcaseNightOtherEntry = 136,
1255  kEventVergesSuitcaseNightOtherEntryStart = 137,
1256  kEventMertensAskTylerCompartment = 138,
1257  kEventMertensAskTylerCompartmentD = 139,
1258  kEventMertensPushCallNight = 140,
1259  kEventMertensPushCall = 141,
1260  kEventMertensAugustWaiting = 142,
1261  kEventMertensAugustWaitingCompartment = 143,
1262  kEventIntroBroderbrund = 144,
1263  kEventCoudertAskTylerCompartment = 145,
1264  kEventMertensKronosConcertInvitation = 146,
1265  kEventCoudertGoingOutOfVassiliCompartment = 147,
1266  kEventLocomotiveConductorsDiscovered = 148,
1267  kEventLocomotiveConductorsLook = 149,
1268  kEventMahmudWrongDoor = 150,
1269  kEventMahmudWrongDoorOriginalJacket = 151,
1270  kEventMahmudWrongDoorDay = 152,
1271  kEventVergesEscortToDiningCar = 153,
1272  kEventVergesBaggageCarOffLimits = 154,
1273  kEventVergesCanIHelpYou = 155,
1274  kEventCoudertBaggageCar = 156,
1275  kEventCathTurningDay = 157,
1276  kEventCathTurningNight = 158,
1277  kEventIntro = 159,
1278  kEventCathDream = 160,
1279  kEventCorpseDropBridge = 161,
1280  kEventTrainPassing = 162,
1281  kEventVergesAnnaDead = 163,
1282  kEventViennaAugustUnloadGuns = 164,
1283  kEventViennaKronosFirebird = 165,
1284  kEventViennaContinueGame = 166,
1285  kEventCathVesnaRestaurantKilled = 167,
1286  kEventCathMaxCage = 168,
1287  kEventCathMaxFree = 169,
1288  kEventCathMaxLickHand = 170,
1289  kEventCathIvoFight = 171,
1290  kEventCathSalkoTrainTopFight = 172,
1291  kEventCathVesnaTrainTopFight = 173,
1292  kEventCathVesnaTrainTopKilled = 174,
1293  kEventCathVesnaTrainTopWin = 175,
1294  kEventCathSalkoTrainTopWin = 176,
1295  kEventFrancoisWhistle = 177,
1296  kEventFrancoisWhistleD = 178,
1297  kEventFrancoisWhistleNight = 179,
1298  kEventFrancoisWhistleNightD = 180,
1299  kEventFrancoisShowBeetle = 181,
1300  kEventFrancoisShowBeetleD = 182,
1301  kEventFrancoisTradeWhistle = 183,
1302  kEventFrancoisTradeWhistleD = 184,
1303  kEventFrancoisShowEgg = 185,
1304  kEventFrancoisShowEggD = 186,
1305  kEventFrancoisShowEggNightD = 187,
1306  kEventFrancoisShowEggNight = 188,
1307  kEventKronosBringFirebird = 189,
1308  kEventKronosOpenFirebird = 190,
1309  kEventFinalSequence = 191,
1310  kEventLocomotiveRestartTrain = 192,
1311  kEventLocomotiveOldBridge = 193,
1312  kEventLocomotiveAbbotGetSomeRest = 194,
1313  kEventLocomotiveAbbotShoveling = 195,
1314  kEventLocomotiveMilosShovelingDay = 196,
1315  kEventLocomotiveMilosShovelingNight = 197,
1316  kEventAnnaGiveScarf = 198,
1317  kEventAnnaGiveScarfDiner = 199,
1318  kEventAnnaGiveScarfSalon = 200,
1319  kEventAnnaGiveScarfMonogram = 201,
1320  kEventAnnaGiveScarfDinerMonogram = 202,
1321  kEventAnnaGiveScarfSalonMonogram = 203,
1322  kEventAnnaGiveScarfAsk = 204,
1323  kEventAnnaGiveScarfDinerAsk = 205,
1324  kEventAnnaGiveScarfSalonAsk = 206,
1325  kEventAugustArrivalInMunich = 207,
1326  kEventAnnaDialogGoToJerusalem = 208,
1327  kEventConcertStart = 209,
1328  kEventConcertEnd = 210,
1329  kEventCathFallingAsleep = 211,
1330  kEventCathWakingUp = 212,
1331  kEventConcertCough = 213,
1332  kEventConcertSit = 214,
1333  kEventConcertLeaveWithBriefcase = 215,
1334  kEventCorpseDropFloorOriginal = 216,
1335  kEventCorpseDropFloorGreen = 217,
1336  kEventCorpsePickFloorOriginal = 218,
1337  kEventCorpsePickFloorGreen = 219,
1338  kEventCorpsePickFloorOpenedBedOriginal = 220,
1339  kEventCorpsePickBedOriginal = 221,
1340  kEventCorpsePickBedGreen = 222,
1341  kEventCorpseDropBedOriginal = 223,
1342  kEventCorpseDropBedGreen = 224,
1343  kEventCorpseDropWindowOriginal = 225,
1344  kEventCorpseDropWindowGreen = 226,
1345  kEventCathFindCorpse = 227,
1346  kEventCathLookOutsideWindowDay = 228,
1347  kEventCathLookOutsideWindowNight = 229,
1348  kEventCathGoOutsideTylerCompartmentDay = 230,
1349  kEventCathGoOutsideTylerCompartmentNight = 231,
1350  kEventCathGoOutsideDay = 232,
1351  kEventCathGoOutsideNight = 233,
1352  kEventCathSlipTylerCompartmentDay = 234,
1353  kEventCathSlipTylerCompartmentNight = 235,
1354  kEventCathSlipDay = 236,
1355  kEventCathSlipNight = 237,
1356  kEventCathGetInsideTylerCompartmentDay = 238,
1357  kEventCathGetInsideTylerCompartmentNight = 239,
1358  kEventCathGetInsideDay = 240,
1359  kEventCathGetInsideNight = 241,
1360  kEventCathGettingInsideAnnaCompartment = 242,
1361  kEventCathClimbUpTrainGreenJacket = 243,
1362  kEventCathClimbUpTrainNoJacketNight = 244,
1363  kEventCathClimbUpTrainNoJacketDay = 245,
1364  kEventCathClimbDownTrainGreenJacket = 246,
1365  kEventCathClimbDownTrainNoJacketNight = 247,
1366  kEventCathClimbDownTrainNoJacketDay= 248,
1367  kEventCathTopTrainGreenJacket = 249,
1368  kEventCathTopTrainNoJacketNight = 250,
1369  kEventCathTopTrainNoJacketDay = 251,
1370  kEventCathBreakCeiling = 252,
1371  kEventCathJumpDownCeiling = 253,
1372  kEventCathJumpUpCeilingBriefcase = 254,
1373  kEventCathJumpUpCeiling = 255,
1374  kEventPickGreenJacket = 256,
1375  kEventPickScarfGreen = 257,
1376  kEventPickScarfOriginal = 258,
1377  kEventCloseMatchbox = 259,
1378  kEventCathStruggleWithBonds = 260,
1379  kEventCathBurnRope = 261,
1380  kEventCathRemoveBonds = 262,
1381  kEventCathStruggleWithBonds2 = 263,
1382  kEventCathDefusingBomb = 264,
1383  kEventCathSmokeNight = 265,
1384  kEventCathSmokeDay = 266,
1385  kEventCathOpenEgg = 267,
1386  kEventCathOpenEggNoBackground = 268,
1387  kEventCathCloseEgg = 269,
1388  kEventCathCloseEggNoBackground = 270,
1389  kEventCathUseWhistleOpenEgg = 271,
1390  kEventCathUseWhistleOpenEggNoBackground = 272
1391 };
1392 
1394 // Action ID (used by entity logic)
1396 enum ActionIndex {
1397  kActionNone = 0,
1398  kAction1 = 1,
1399  kActionEndSound = 2,
1400  kActionExitCompartment = 3,
1401  kAction4 = 4,
1402  kActionExcuseMeCath = 5,
1403  kActionExcuseMe = 6,
1404  kActionKnock = 8,
1405  kActionOpenDoor = 9,
1406  kAction10 = 10,
1407  kAction11 = 11,
1408  kActionDefault = 12,
1409  kAction16 = 16,
1410  kActionDrawScene = 17,
1411  kActionCallback = 18,
1412 
1414  // Abbot
1416  kAction100969180 = 100969180, // Anna
1417  kAction101169422 = 101169422,
1418  kAction104060776 = 104060776,
1419  kAction135600432 = 135600432,
1420  kAction136196244 = 136196244,
1421  kAction157159392 = 157159392,
1422  kAction157489665 = 157489665,
1423  kAction158480160 = 158480160,
1424  kAction192054567 = 192054567,
1425  kAction203073664 = 203073664,
1426  kAction222609266 = 222609266,
1427 
1429  // Alexei
1431  kAction100906246 = 100906246,
1432  kAction123536024 = 123536024,
1433  kAction124697504 = 124697504,
1434  kAction135664192 = 135664192,
1435  kAction135854208 = 135854208,
1436  kAction188784532 = 188784532,
1437  kAction221617184 = 221617184,
1438 
1440  // Alouan
1442  kAction189489753 = 189489753,
1443  kAction190219584 = 190219584, // Francois
1444 
1446  // Anna
1448  kAction136702400 = 136702400,
1449  kAction139254416 = 139254416,
1450  kAction156049968 = 156049968,
1451  kAction157370960 = 157370960,
1452  kAction157894320 = 157894320,
1453  kAction159332865 = 159332865, // August
1454  kAction189299008 = 189299008,
1455  kAction191668032 = 191668032, // some action during or before concert?
1456  kAction201437056 = 201437056,
1457  kAction235856512 = 235856512,
1458  kAction236060709 = 236060709,
1459  kAction238936000 = 238936000,
1460  kAction259136835 = 259136835,
1461  kAction291662081 = 291662081,
1462 
1463 
1465  // August
1467  kAction123793792 = 123793792,
1468  kAction134611040 = 134611040,
1469  kAction168046720 = 168046720,
1470  kAction168627977 = 168627977,
1471  kAction169032608 = 169032608,
1472  kAction189426612 = 189426612,
1473  kAction203859488 = 203859488,
1474  kAction219522616 = 219522616, // Waiter1
1475  kAction225182640 = 225182640,
1476  kAction235257824 = 235257824,
1477 
1479  // Boutarel
1481  kAction125039808 = 125039808,
1482  kAction134466544 = 134466544,
1483  kAction135854206 = 135854206,
1484  kAction159003408 = 159003408,
1485  kAction203520448 = 203520448,
1486  kAction237889408 = 237889408,
1487 
1489  // Chapters
1491  kAction135800432 = 135800432,
1492  kActionChapter3 = 139122728,
1493  kActionChapter5 = 139254416,
1494  kAction156435676 = 156435676,
1495  kAction169629818 = 169629818,
1496  kAction171843264 = 171843264,
1497  kAction190346110 = 190346110,
1498 
1500  // Cooks
1502  kAction101632192 = 101632192,
1503  kAction224849280 = 224849280,
1504  kAction236976550 = 236976550,
1505 
1507  // Coudert
1509  kAction123733488 = 123733488,
1510  kAction154005632 = 154005632,
1511  kAction155991520 = 155991520,
1512  kAction157026693 = 157026693,
1513  kAction168253822 = 168253822,
1514  kAction168254872 = 168254872,
1515  kAction168316032 = 168316032, // Tatiana
1516  kAction169557824 = 169557824,
1517  kAction171394341 = 171394341, // Mertens
1518  kAction185671840 = 185671840,
1519  kAction185737168 = 185737168,
1520  kAction188570113 = 188570113,
1521  kAction189026624 = 189026624,
1522  kAction189750912 = 189750912,
1523  kAction192063264 = 192063264, // Anna
1524  kAction201431954 = 201431954, // Mertens / Verges
1525  kAction201439712 = 201439712,
1526  kAction205033696 = 205033696,
1527  kAction205346192 = 205346192, // Francois
1528  kAction219971920 = 219971920, // Anna
1529  kAction223068211 = 223068211, // MmeBoutarel
1530  kAction225932896 = 225932896,
1531  kAction226031488 = 226031488, // Verges
1532  kAction235061888 = 235061888, // Tatiana
1533  kAction238358920 = 238358920, // Anna
1534  kAction253868128 = 253868128, // Anna
1535  kAction285528346 = 285528346, // Rebecca
1536  kAction292048641 = 292048641,
1537  kAction305159806 = 305159806,
1538  kAction326348944 = 326348944,
1539  kAction339669520 = 339669520, // Verges
1540 
1542  // Francois
1544  kAction100901266 = 100901266,
1545  kAction100957716 = 100957716,
1546  kAction101107728 = 101107728,
1547  kAction189872836 = 189872836,
1548  kAction190390860 = 190390860,
1549 
1551  // Gendarmes
1553  kAction168710784 = 168710784,
1554  kAction169499649 = 169499649,
1555 
1557  // Kahina
1559  kAction92186062 = 92186062,
1560  kAction137503360 = 137503360,
1561  kAction237555748 = 237555748,
1562 
1564  // Kronos
1566  kAction137685712 = 137685712,
1567  kAction138085344 = 138085344,
1568  kAction171849314 = 171849314,
1569  kAction235599361 = 235599361,
1570 
1572  // Mahmud
1574  kAction102227384 = 102227384, // Mertens
1575  kAction156567128 = 156567128,
1576  kAction170483072 = 170483072,
1577  kAction225563840 = 225563840,
1578 
1580  // Max
1582  kAction71277948 = 71277948,
1583  kAction158007856 = 158007856,
1584  kAction101687594 = 101687594,
1585  kAction122358304 = 122358304, // also Waiter2/Boutarel?
1586  kActionMaxFreeFromCage = 135204609,
1587  kAction156622016 = 156622016,
1588 
1590  // Mertens
1592  kAction155604840 = 155604840, // MmeBoutarel
1593  kAction169633856 = 169633856,
1594  kAction188635520 = 188635520,
1595  kAction190082817 = 190082817,
1596  kAction192849856 = 192849856,
1597  kAction204379649 = 204379649,
1598  kAction224122407 = 224122407,
1599  kAction238732837 = 238732837,
1600  kAction238790488 = 238790488, // Tatiana
1601  kAction269436673 = 269436673,
1602  kAction269624833 = 269624833,
1603  kAction302614416 = 302614416,
1604  kAction303343617 = 303343617,
1605 
1607  // Milos
1609  kAction88652208 = 88652208, // Coudert
1610  kAction122865568 = 122865568,
1611  kAction123852928 = 123852928,
1612  kAction123199584 = 123199584, // Coudert
1613  kAction157691176 = 157691176,
1614  kAction208228224 = 208228224,
1615  kAction221683008 = 221683008,
1616  kAction259125998 = 259125998,
1617 
1619  // Mme Boutarel
1621  kAction102484312 = 102484312,
1622  kAction102752636 = 102752636,
1623  kAction134289824 = 134289824,
1624  kAction168986720 = 168986720,
1625  kAction202221040 = 202221040,
1626  kAction242526416 = 242526416,
1627 
1629  // Pascale
1631  kAction101824388 = 101824388,
1632  kAction136059947 = 136059947,
1633  kAction169750080 = 169750080,
1634  kAction190605184 = 190605184,
1635  kAction191604416 = 191604416,
1636  kAction207769280 = 207769280,
1637  kAction223262556 = 223262556,
1638  kAction239072064 = 239072064,
1639  kAction257489762 = 257489762,
1640  kAction269479296 = 269479296,
1641  kAction352703104 = 352703104,
1642  kAction352768896 = 352768896,
1643 
1645  // Rebecca
1647  kAction125496184 = 125496184,
1648  kAction155465152 = 155465152,
1649  kAction155980128 = 155980128,
1650  kAction169358379 = 169358379,
1651  kAction224253538 = 224253538,
1652  kAction254915200 = 254915200,
1653 
1655  // Salko
1657  kAction55996766 = 55996766,
1658  kAction101169464 = 101169464,
1659  kAction102675536 = 102675536, // Ivo
1660  kAction136184016 = 136184016,
1661 
1663  // Servers 0
1665  kAction170016384 = 170016384,
1666  kAction188893625 = 188893625,
1667  kAction201964801 = 201964801, // August
1668  kAction204704037 = 204704037,
1669  kAction207330561 = 207330561,
1670  kAction218128129 = 218128129,
1671  kAction218586752 = 218586752,
1672  kAction218983616 = 218983616,
1673  kAction223712416 = 223712416,
1674  kAction237485916 = 237485916,
1675  kAction252568704 = 252568704,
1676  kAction268773672 = 268773672, // Anna / August
1677  kAction270068760 = 270068760,
1678  kAction270410280 = 270410280,
1679  kAction286403504 = 286403504,
1680  kAction286534136 = 286534136,
1681  kAction292758554 = 292758554,
1682  kAction304061224 = 304061224,
1683  kAction337548856 = 337548856,
1684 
1686  // Servers 1
1688  kAction101106391 = 101106391,
1689  kAction122288808 = 122288808, // Boutarel
1690  kAction123712592 = 123712592, // Ivo
1691  kAction125826561 = 125826561, // August
1692  kAction134486752 = 134486752, // August
1693  kAction168717392 = 168717392, // Boutarel
1694  kAction189688608 = 189688608,
1695  kAction219377792 = 219377792,
1696  kAction223002560 = 223002560,
1697  kAction236237423 = 236237423,
1698  kAction256200848 = 256200848,
1699  kAction258136010 = 258136010,
1700  kAction269485588 = 269485588,
1701  kAction291721418 = 291721418,
1702  kAction302203328 = 302203328,
1703  kAction302996448 = 302996448,
1704  kAction326144276 = 326144276,
1705 
1707  // Sophie
1709  kActionProceedChapter5 = 70549068,
1710  kAction123668192 = 123668192,
1711  kAction125242096 = 125242096,
1712  kAction136654208 = 136654208,
1713  kAction259921280 = 259921280,
1714  kAction292775040 = 292775040,
1715 
1717  // Tables
1719  kActionDrawTablesWithChairs = 103798704,
1720  kAction136455232 = 136455232,
1721 
1723  // Tatiana
1725  kAction69239528 = 69239528,
1726  kAction123857088 = 123857088,
1727  kAction124973510 = 124973510,
1728  kAction154071333 = 154071333,
1729  kAction156444784 = 156444784,
1730  kAction169360385 = 169360385,
1731  kAction191198209 = 191198209,
1732  kAction223183000 = 223183000, // August
1733  kAction236053296 = 236053296, // Alexei
1734  kAction236241630 = 236241630, // Anna
1735  kAction236517970 = 236517970, // Anna
1736  kAction268620864 = 268620864, // August
1737  kAction290869168 = 290869168,
1738 
1740  // Train
1742  kAction191070912 = 191070912,
1743  kActionTrainStopRunning = 191350523,
1744  kActionCatchBeetle = 202613084,
1745  kAction203339360 = 203339360,
1746  kActionTrainStartRunning = 203419131,
1747  kAction203863200 = 203863200,
1748  kAction222746496 = 222746496,
1749  kActionBreakCeiling = 225056224,
1750  kAction290410610 = 290410610,
1751  kActionJumpDownCeiling = 338494260,
1752 
1754  // Verges
1756  kAction125233040 = 125233040, // Abbot
1757  kAction125499160 = 125499160,
1758  kAction155853632 = 155853632,
1759  kAction158617345 = 158617345,
1760  kAction167854368 = 167854368,
1761  kAction168187490 = 168187490,
1762  kAction168255788 = 168255788,
1763  kActionDeliverMessageToTyler = 191337656,
1764  kAction202558662 = 202558662,
1765 
1767  // Vassili
1769  kAction122732000 = 122732000,
1770  kAction168459827 = 168459827,
1771  kAction191477936 = 191477936,
1772 
1774  // Vesna
1776  kAction124190740 = 124190740,
1777  kAction134427424 = 134427424,
1778  kAction135024800 = 135024800,
1779  kAction137165825 = 137165825,
1780  kAction155913424 = 155913424,
1781  kAction190412928 = 190412928,
1782  kAction203663744 = 203663744,
1783  kAction204832737 = 204832737,
1784 
1786  // Misc
1788  kAction158610240 = 158610240,
1789  kAction167992577 = 167992577,
1790  kAction168646401 = 168646401,
1791  kAction169300225 = 169300225,
1792  kAction169773228 = 169773228,
1793  kActionEndChapter = 190346110,
1794  kAction191001984 = 191001984,
1795  kAction192637492 = 192637492,
1796  kAction201959744 = 201959744,
1797  kAction202621266 = 202621266,
1798  kAction202884544 = 202884544,
1799  kAction203078272 = 203078272,
1800  kAction205034665 = 205034665,
1801  kAction205294778 = 205294778,
1802  kActionUseWhistle = 270751616,
1803  kAction272177921 = 272177921,
1804  kAction224309120 = 224309120,
1805  kAction225358684 = 225358684,
1806  kAction225367984 = 225367984,
1807  kAction226078300 = 226078300, // Whistle
1808 
1809  kActionEnd
1810 };
1811 
1812 } // End of namespace LastExpress
1813 
1814 #endif // LASTEXPRESS_SHARED_H
Definition: animation.h:45