scummvm/engines/lastexpress/shared.h
2021-12-26 18:48:43 +01:00

1815 lines
58 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef LASTEXPRESS_SHARED_H
#define LASTEXPRESS_SHARED_H
#include "common/func.h"
namespace LastExpress {
//////////////////////////////////////////////////////////////////////////
// Sound
//////////////////////////////////////////////////////////////////////////
enum SoundTag {
kSoundTagNone = 0,
kSoundTagAmbient = 1,
kSoundTagOldAmbient = 2,
kSoundTagWalla = 3,
kSoundTagOldWalla = 4,
kSoundTagConcert = 5,
// 6 is unused
kSoundTagLink = 7,
kSoundTagOldLink = 8,
kSoundTagNIS = 9,
kSoundTagOldNIS = 10,
kSoundTagIntro = 11,
// 12 is unused
kSoundTagMenu = 13,
kSoundTagOldMenu = 14,
kSoundTagCredits = 15,
kSoundTagFirstNormal = 16
// every normal sound gets its own tag from an incrementing counter
// initialized as kSoundTagFirstNormal,
// so tags can have values not covered by this enum
};
/*
These are the flags used by the original game
to keep track of sound entry status.
They are directly exposed via savefiles,
so we should be aware of them
even though we don't use some of them internally.
Sound playback is asynchronous.
We have threads and mutexes for synchronization,
DOS games have main code and IRQ/interrupt handlers instead,
some flags come in pairs to deal with this:
the main code sets kSoundFlagXxxRequested as a signal
to the interrupt handler, the interrupt handler processes it
(e.g. stops using the associated buffer for Close and Mute requests)
and sets the corresponding result flag. The main code can proceed then
(e.g. release the associated buffer).
The original game has a limited number of sound buffers (namely, 6)
(plus 16 versions of ADPCM decoder in assembly language,
one for every non-zero volume, so I suppose the performance was an issue).
The original game has also many events that could happen in different areas
of the train at the same time, some of them are synchronized via the sound
(kActionEndSound). To deal with it, the original game uses kSoundFlagMute:
muted sounds don't have their own buffer, don't participate in mixing the channels,
but the interrupt handler still tracks their progress.
Non-audible sounds (e.g. because the corresponding event goes on in another car)
are always muted; if the number of audible sounds exceeds the number of buffers,
least-priority sounds are muted as well (the priority is the sum of a static
constant from the entry constructor and the current volume).
Normally the sound duration is read from (one of the fields
in the header of) the associated file. However, if the sound entry
is started as muted, the buffer is not allocated and no data are read;
in this case, the duration is estimated from file size.
Since HPF archives store all sizes as counts of 0x800-byte blocks,
this loses some precision, but nothing to really care about.
If a started-as-muted sound is unmuted later (Cath enters the car
where a dialog takes place), the exact duration is loaded from the file;
kSoundFlagHeaderProcessed says that the duration is exact.
We have more sound channels available, we are not so limited
by the performance, and we lose some control of how exactly the backend
processes the sound as a payment for portability, so we can afford
to just mix the silence without special processing of muted entries.
*/
enum SoundFlag {
kSoundVolumeEntityDefault = 0xFFFFFFFF, // special value for SoundManager::playSound; choose volume based on distance to the entity
kVolumeNone = 0x0,
kVolume1 = 0x1,
kVolume2 = 0x2,
kVolume3 = 0x3,
kVolume4 = 0x4,
kVolume5 = 0x5,
kVolume6 = 0x6,
kVolume7 = 0x7,
kVolume8 = 0x8,
kVolume9 = 0x9,
kVolume10 = 0xA,
kVolume11 = 0xB,
kVolume12 = 0xC,
kVolume13 = 0xD,
kVolume14 = 0xE,
kVolume15 = 0xF,
kVolumeFull = 0x10,
kSoundVolumeMask = 0x1F,
kSoundFlagPlayRequested = 0x20,
kSoundFlagPlaying = 0x40, // IRQ handler has seen kSoundFlagPlayRequested and has started the playback
kSoundFlagMuteRequested = 0x80,
kSoundFlagMuteProcessed = 0x100, // IRQ handler has seen kSoundFlagMuteRequested
kSoundFlagMute = kSoundFlagMuteRequested | kSoundFlagMuteProcessed,
kSoundFlagCloseRequested = 0x200, // close requested, waiting for IRQ handler to confirm
kSoundFlagClosed = 0x400, // IRQ handler has seen kSoundFlagClosing and is completely done with this sound
kSoundFlagCloseOnDataEnd = 0x800, // used as the opposite of kSoundFlagLooped
kSoundFlagLooped = 0x1000,
kSoundFlagCyclicBuffer = 0x2000, // when the decoder reaches the end of buffer, the decoder should continue from the beginning of buffer
kSoundFlagHasUnreadData = 0x4000, // stream has more data
kSoundFlagDelayedActivate = 0x8000, // start playing at _activateTime
kSoundFlagHasLinkAfter = 0x10000, // _linkAfter is valid and should be activated after this sound; used by xxx.NIS sounds for xxx.LNK
kSoundFlagHasSubtitles = 0x20000,
kSoundFlagPaused = 0x40000, // IRQ handler has seen kSoundFlagPauseRequested and does not use the buffer anymore
kSoundFlagFixedVolume = 0x80000, // Turns off the logic of volume adjusting for entity-related sounds when distance to entity is changed
kSoundFlagVolumeChanging = 0x100000, // smooth changing of the volume is in progress
kSoundFlagHeaderProcessed = 0x200000, // count of blocks is the accurate value from the header
kSoundFlagPauseRequested = 0x400000, // used when the reader needs to change the buffer
kSoundFlagDecodeStall = 0x800000, // the decoder has stopped because the reader is too slow and has not yet provided further data
kSoundTypeNormal = 0x0000000, // everything not included in any specific category
kSoundTypeAmbient = 0x1000000, // train sounds, steam, wind, restaurant sounds
kSoundTypeConcert = 0x2000000, // 1917.LNK
kSoundTypeMenu = 0x3000000, // menu screen, blinking egg after time travel; excluded from savefiles
kSoundTypeLink = 0x4000000, // xxx.LNK linked after NIS sound, except for 1917.LNK
kSoundTypeIntro = 0x5000000, // intro at game start before showing the menu
kSoundTypeWalla = 0x6000000, // LOOP8A.SND by kEntityTables2
kSoundTypeNIS = 0x7000000, // special entry managed by NIS code
kSoundTypeMask = 0x7000000,
kSoundFlagKeepAfterFinish = 0x8000000, // don't free the entry when it has stopped playing; used for kSoundTypeNIS
kSoundFlagDecodeError = 0x20000000, // error in compressed stream
kSoundFlagFading = 0x40000000, // prevents attempts to unfade once fade is requested
kSoundFlagUnmuteRequested = 0x80000000 // purely informational
};
enum AmbientSoundState {
kAmbientSoundEnabled = 1,
kAmbientSoundSteam = 2
};
//////////////////////////////////////////////////////////////////////////
// Time values
//////////////////////////////////////////////////////////////////////////
// Time is measured in ticks, with 15 ticks per second. One minute is 900
// ticks, one hour is 54,000 ticks, and one day is 1,296,000 ticks.
enum TimeValue {
kTimeNone = 0,
kTime5933 = 5933,
kTimeCityParis = 1037700, // Day 1, 19:13
kTime1039500 = 1039500, // Day 1, 19:15
kTimeStartGame = 1061100, // Day 1, 19:39
// Chapter 1
kTimeChapter1 = 1062000, // Day 1, 19:40
kTime1071000 = 1071000, // Day 1, 19:50
kTimeParisEpernay = 1075500, // Day 1, 19:55
kTime1080000 = 1080000, // Day 1, 20:00
kTime1084500 = 1084500, // Day 1, 20:05
kTime1089000 = 1089000, // Day 1, 20:10
kTime1093500 = 1093500, // Day 1, 20:15
kTime1094400 = 1094400, // Day 1, 20:16
kTime1096200 = 1096200, // Day 1, 20:18
kTime1098000 = 1098000, // Day 1, 20:20
kTime1102500 = 1102500, // Day 1, 20:25
kTime1107000 = 1107000, // Day 1, 20:30
kTime1111500 = 1111500, // Day 1, 20:35
kTime1120500 = 1120500, // Day 1, 20:45
kTime1125000 = 1125000, // Day 1, 20:50
kTime1134000 = 1134000, // Day 1, 21:00
kTime1138500 = 1138500, // Day 1, 21:05
kTime1143000 = 1143000, // Day 1, 21:10
kTimeEnterEpernay = 1147500, // Day 1, 21:15
kTimeCityEpernay = 1148400, // Day 1, 21:16
kTimeExitEpernay = 1150200, // Day 1, 21:18
kTime1156500 = 1156500, // Day 1, 21:25
kTime1161000 = 1161000, // Day 1, 21:30
kTime1162800 = 1162800, // Day 1, 21:32
kTime1165500 = 1165500, // Day 1, 21:35
kTime1167300 = 1167300, // Day 1, 21:37
kTimeEnterChalons = 1170000, // Day 1, 21:40
kTimeCityChalons = 1170900, // Day 1, 21:41
kTimeExitChalons = 1173600, // Day 1, 21:44
kTime1174500 = 1174500, // Day 1, 21:45
kTime1179000 = 1179000, // Day 1, 21:50
kTime1183500 = 1183500, // Day 1, 21:55
kTime1184400 = 1184400, // Day 1, 21:56
kTime1188000 = 1188000, // Day 1, 22:00
kTime1189800 = 1189800, // Day 1, 22:02
kTime1192500 = 1192500, // Day 1, 22:05
kTime1197000 = 1197000, // Day 1, 22:10
kTime1201500 = 1201500, // Day 1, 22:15
kTime1206000 = 1206000, // Day 1, 22:20
kTime1215000 = 1215000, // Day 1, 22:30
kTime1224000 = 1224000, // Day 1, 22:40
kTime1225800 = 1225800, // Day 1, 22:42
kTimeCityBarLeDuc = 1228500, // Day 1, 22:45
kTimeExitBarLeDuc = 1231200, // Day 1, 22:48
kTime1233000 = 1233000, // Day 1, 22:50
kTime1242000 = 1242000, // Day 1, 23:00
kTime1260000 = 1260000, // Day 1, 23:20
kTimeCityNancy = 1303200, // Day 2, 00:08
kTimeExitNancy = 1307700, // Day 2, 00:13
kTime1323000 = 1323000, // Day 2, 00:30
kTimeCityLuneville = 1335600, // Day 2, 00:44
kTimeExitLuneville = 1338300, // Day 2, 00:47
kTimeCityAvricourt = 1359900, // Day 2, 01:11
kTimeExitAvricourt = 1363500, // Day 2, 01:15
kTimeCityDeutschAvricourt = 1367100, // Day 2, 01:19
kTimeExitDeutschAvricourt = 1370700, // Day 2, 01:23
kTime1386000 = 1386000, // Day 2, 01:40
kTimeBedTime = 1404000, // Day 2, 02:00
kTime1417500 = 1417500, // Day 2, 02:15
kTimeEnterStrasbourg = 1424700, // Day 2, 02:23
kTime1449000 = 1449000, // Day 2, 02:50
kTime1458000 = 1458000, // Day 2, 03:00
kTime1485000 = 1485000, // Day 2, 03:30
kTime1489500 = 1489500, // Day 2, 03:35
kTimeCityStrasbourg = 1490400, // Day 2, 03:36
kTime1492200 = 1492200, // Day 2, 03:38
kTimeExitStrasbourg = 1493100, // Day 2, 03:39
kTimeChapter1End = 1494000, // Day 2, 03:40
kTime1503000 = 1503000, // Day 2, 03:50
kTime1512000 = 1512000, // Day 2, 04:00
kTimeCityBadenOos = 1539000, // Day 2, 04:30
kTimeExitBadenOos = 1541700, // Day 2, 04:33
kTimeCityKarlsruhe = 1563300, // Day 2, 04:57
kTimeCityStuttgart = 1656000, // Day 2, 06:40
kTimeChapter1End2 = 1647000, // Day 2, 06:30
kTimeChapter1End3 = 1674000, // Day 2, 07:00
kTimeCityGeislingen = 1713600, // Day 2, 07:44
kTime1714500 = 1714500, // Day 2, 07:45
kTimeCityUlm = 1739700, // Day 2, 08:13
// Chapter 2
kTimeChapter2 = 1750500, // Day 2, 08:25
kTime1759500 = 1759500, // Day 2, 08:35
kTime1755000 = 1755000, // Day 2, 08:30
kTime1764000 = 1764000, // Day 2, 08:40
kTime1768500 = 1768500, // Day 2, 08:45
kTime1773000 = 1773000, // Day 2, 08:50
kTime1777500 = 1777500, // Day 2, 08:55
kTime1782000 = 1782000, // Day 2, 09:00
kTime1786500 = 1786500, // Day 2, 09:05
kTime1791000 = 1791000, // Day 2, 09:10
kTime1800000 = 1800000, // Day 2, 09:20
kTime1801800 = 1801800, // Day 2, 09:22
kTime1806300 = 1806300, // Day 2, 09:27
kTime1809000 = 1809000, // Day 2, 09:30
kTimeCityAugsburg = 1809900, // Day 2, 09:31
kTime1813500 = 1813500, // Day 2, 09:35
kTime1818000 = 1818000, // Day 2, 09:40
kTime1818900 = 1818900, // Day 2, 09:41
kTime1820700 = 1820700, // Day 2, 09:43
kTime1822500 = 1822500, // Day 2, 09:45
kTime1827000 = 1827000, // Day 2, 09:50
kTime1831500 = 1831500, // Day 2, 09:55
kTime1836000 = 1836000, // Day 2, 10:00
kTime1845000 = 1845000, // Day 2, 10:10
kTime1849500 = 1849500, // Day 2, 10:15
kTimeCityMunich = 1852200, // Day 2, 10:18
// Chapter 3
kTimeChapter3 = 1944000, // Day 2, 12:00
kTime1953000 = 1953000, // Day 2, 12:10
kTime1966500 = 1966500, // Day 2, 12:25
kTime1969200 = 1969200, // Day 2, 12:28
kTime1971000 = 1971000, // Day 2, 12:30
kTimeEnterSalzbourg = 1982700, // Day 2, 12:43
kTime1983600 = 1983600, // Day 2, 12:44
kTimeCitySalzbourg = 1984500, // Day 2, 12:45
kTime1989000 = 1989000, // Day 2, 12:50
kTimeExitSalzbourg = 1989900, // Day 2, 12:51
kTime1993500 = 1993500, // Day 2, 12:55
kTime1998000 = 1998000, // Day 2, 13:00
kTime2002500 = 2002500, // Day 2, 13:05
kTime2011500 = 2011500, // Day 2, 13:15
kTime2016000 = 2016000, // Day 2, 13:20
kTime2020500 = 2020500, // Day 2, 13:25
kTime2025000 = 2025000, // Day 2, 13:30
kTime2034000 = 2034000, // Day 2, 13:40
kTime2038500 = 2038500, // Day 2, 13:45
kTime2040300 = 2040300, // Day 2, 13:47
kTime2043000 = 2043000, // Day 2, 13:50
kTimeEnterAttnangPuchheim = 2047500, // Day 2, 13:55
kTimeCityAttnangPuchheim = 2049300, // Day 2, 13:57
kTime2052000 = 2052000, // Day 2, 14:00
kTimeExitAttnangPuchheim = 2052900, // Day 2, 14:01
kTime2056500 = 2056500, // Day 2, 14:05
kTime2061000 = 2061000, // Day 2, 14:10
kTime2062800 = 2062800, // Day 2, 14:12
kTime2065500 = 2065500, // Day 2, 14:15
kTime2070000 = 2070000, // Day 2, 14:20
kTimeEnterWels = 2073600, // Day 2, 14:24
kTimeCityWels = 2075400, // Day 2, 14:26
kTime2079000 = 2079000, // Day 2, 14:30
kTimeExitWels = 2079900, // Day 2, 14:31
kTime2083500 = 2083500, // Day 2, 14:35
kTime2088000 = 2088000, // Day 2, 14:40
kTime2088900 = 2088900, // Day 2, 14:41
kTime2092500 = 2092500, // Day 2, 14:45
kTime2097000 = 2097000, // Day 2, 14:50
kTimeEnterLinz = 2099700, // Day 2, 14:53
kTimeCityLinz = 2101500, // Day 2, 14:55
kTimeExitLinz = 2105100, // Day 2, 14:59
kTime2106000 = 2106000, // Day 2, 15:00
kTime2110500 = 2110500, // Day 2, 15:05
kTime2115000 = 2115000, // Day 2, 15:10
kTime2117700 = 2117700, // Day 2, 15:13
kTime2119500 = 2119500, // Day 2, 15:15
kTime2124000 = 2124000, // Day 2, 15:20
kTime2133000 = 2133000, // Day 2, 15:30
kTime2138400 = 2138400, // Day 2, 15:36
kTime2142000 = 2142000, // Day 2, 15:40
kTime2146500 = 2146500, // Day 2, 15:45
kTime2147400 = 2147400, // Day 2, 15:46
kTime2151000 = 2151000, // Day 2, 15:50
kTimeCityAmstetten = 2154600, // Day 2, 15:54
kTime2155500 = 2155500, // Day 2, 15:55
kTime2160000 = 2160000, // Day 2, 16:00
kTime2169000 = 2169000, // Day 2, 16:10
kTime2173500 = 2173500, // Day 2, 16:15
kTime2187000 = 2187000, // Day 2, 16:30
kTime2182500 = 2182500, // Day 2, 16:25
kTime2196000 = 2196000, // Day 2, 16:40
kTime2200500 = 2200500, // Day 2, 16:45
kTime2205000 = 2205000, // Day 2, 16:50
kTime2214000 = 2214000, // Day 2, 17:00
kTime2218500 = 2218500, // Day 2, 17:05
kTime2223000 = 2223000, // Day 2, 17:10
kTime2227500 = 2227500, // Day 2, 17:15
kTime2241000 = 2241000, // Day 2, 17:30
kTime2248200 = 2248200, // Day 2, 17:38
kTime2250000 = 2250000, // Day 2, 17:40
kTime2254500 = 2254500, // Day 2, 17:45
kTime2259000 = 2259000, // Day 2, 17:50
kTime2263500 = 2263500, // Day 2, 17:55
kTime2266200 = 2266200, // Day 2, 17:58
kTimeCityVienna = 2268000, // Day 2, 18:00
// Chapter 4
kTime2349000 = 2349000, // Day 2, 19:30
kTimeChapter4 = 2353500, // Day 2, 19:35
kTime2354400 = 2354400, // Day 2, 19:36
kTime2356200 = 2356200, // Day 2, 19:38
kTime2358000 = 2358000, // Day 2, 19:40
kTime2360700 = 2360700, // Day 2, 19:43
kTime2362500 = 2362500, // Day 2, 19:45
kTime2361600 = 2361600, // Day 2, 19:44
kTime2367000 = 2367000, // Day 2, 19:50
kTime2370600 = 2370600, // Day 2, 19:54
kTime2378700 = 2378700, // Day 2, 20:03
kTimeEnterPoszony = 2381400, // Day 2, 20:06
kTimeCityPoszony = 2383200, // Day 2, 20:08
kTime2385000 = 2385000, // Day 2, 20:10
kTimeExitPoszony = 2386800, // Day 2, 20:12
kTime2389500 = 2389500, // Day 2, 20:15
kTime2394000 = 2394000, // Day 2, 20:20
kTime2398500 = 2398500, // Day 2, 20:25
kTime2403000 = 2403000, // Day 2, 20:30
kTime2407500 = 2407500, // Day 2, 20:35
kTime2410200 = 2410200, // Day 2, 20:38
kTime2412000 = 2412000, // Day 2, 20:40
kTime2414700 = 2414700, // Day 2, 20:43
kTime2415600 = 2415600, // Day 2, 20:44
kTimeEnterGalanta = 2416500, // Day 2, 20:45
kTimeCityGalanta = 2418300, // Day 2, 20:47
kTime2421000 = 2421000, // Day 2, 20:50
kTimeExitGalanta = 2421900, // Day 2, 20:51
kTime2422800 = 2422800, // Day 2, 20:52
kTime2428200 = 2428200, // Day 2, 20:58
kTime2425500 = 2425500, // Day 2, 20:55
kTime2430000 = 2430000, // Day 2, 21:00
kTime2434500 = 2434500, // Day 2, 21:05
kTime2439000 = 2439000, // Day 2, 21:10
kTime2443500 = 2443500, // Day 2, 21:15
kTime2448000 = 2448000, // Day 2, 21:20
kTime2452500 = 2452500, // Day 2, 21:25
kTime2455200 = 2455200, // Day 2, 21:28
kTime2457000 = 2457000, // Day 2, 21:30
kTime2466000 = 2466000, // Day 2, 21:40
kTime2470500 = 2470500, // Day 2, 21:45
kTime2475000 = 2475000, // Day 2, 21:50
kTime2479500 = 2479500, // Day 2, 21:55
kTime2484000 = 2484000, // Day 2, 22:00
kTime2488500 = 2488500, // Day 2, 22:05
kTime2493000 = 2493000, // Day 2, 22:10
kTime2506500 = 2506500, // Day 2, 22:25
kTime2507400 = 2507400, // Day 2, 22:26
kTime2511000 = 2511000, // Day 2, 22:30
kTime2511900 = 2511900, // Day 2, 22:31
kTime2517300 = 2517300, // Day 2, 22:37
kTime2519100 = 2519100, // Day 2, 22:39
kTime2520000 = 2520000, // Day 2, 22:40
kTime2533500 = 2533500, // Day 2, 22:55
kTime2535300 = 2535300, // Day 2, 22:57
kTime2538000 = 2538000, // Day 2, 23:00
kTimeCityBudapest = 2551500, // Day 2, 23:15
// Chapter 5
kTimeChapter5 = 2844000, // Day 3, 04:40
kTimeTrainStopped = 2898000, // Day 3, 05:40
kTime2907000 = 2907000, // Day 3, 05:50
kTime2916000 = 2916000, // Day 3, 06:00
kTime2934000 = 2934000, // Day 3, 06:20
kTimeTrainStopped2 = 2943000, // Day 3, 06:30
kTime2949300 = 2949300, // Day 3, 06:37
kTimeCityBelgrade = 2952000, // Day 3, 06:40
kTime2983500 = 2983500, // Day 3, 07:15
kTimeCityNish = 3205800, // Day 3, 11:22
kTimeCityTzaribrod = 3492000, // Day 3, 16:40
kTime3645000 = 3645000, // Day 3, 19:30
kTimeCitySofia = 3690000, // Day 3, 20:20
kTimeCityAdrianople = 4320900, // Day 4, 08:01
kTime4914000 = 4914000, // Day 4, 19:00
kTime4920300 = 4920300, // Day 4, 19:07
kTime4923000 = 4923000, // Day 4, 19:10
kTime4929300 = 4929300, // Day 4, 19:17
kTimeCityConstantinople = 4941000, // Day 4, 19:30
kTime10881000 = 10881000,
kTimeEnd = 15803100,
kTime16451100 = 16451100,
kTimeInvalid = 2147483647,
kTimeInvalid2 = 0xFFFFFEDA
};
//////////////////////////////////////////////////////////////////////////
// Archive & Chapter ID
//////////////////////////////////////////////////////////////////////////
enum ArchiveIndex {
kArchiveAll = 0,
kArchiveCd1 = 1,
kArchiveCd2 = 2,
kArchiveCd3 = 3
};
enum ChapterIndex {
kChapterAll = 0,
kChapter1 = 1,
kChapter2 = 2,
kChapter3 = 3,
kChapter4 = 4,
kChapter5 = 5
};
//////////////////////////////////////////////////////////////////////////
// Index of scenes
//////////////////////////////////////////////////////////////////////////
enum SceneIndex {
kSceneNone = 0,
kSceneMenu = 1,
kSceneIntro = 30,
// Inventory
kSceneMatchbox = 31,
kSceneTelegram = 32,
kScenePassengerList = 33,
kSceneScarf = 34,
kSceneParchemin = 35,
kSceneArticle = 36,
kScenePaper = 37,
kSceneFirebird = 38,
kSceneBriefcase = 39,
// Normal scenes
kSceneDefault = 40,
kScene41 = 41,
kSceneCompartmentCorpse = 42, // Tyler compartment with corpse on floor
// Fight
kSceneFightMilos = 43,
kSceneFightMilosBedOpened = 44,
kSceneFightAnna = 45,
kSceneFightIvo = 46,
kSceneFightSalko = 47,
kSceneFightVesna = 48,
kSceneEuropeMap = 49,
// Game over
kSceneGameOverStopPolice = 50,
kSceneGameOverTrainStopped = 51,
kSceneGameOverTrainStopped2 = 52,
kSceneGameOverTrainExplosion = 53,
kSceneGameOverTrainExplosion2 = 54,
kSceneGameOverBloodJacket = 55,
kSceneGameOverPolice = 56,
kSceneGameOverPolice1 = 57,
kSceneGameOverAnnaDied = 58,
kSceneGameOverVienna = 59,
kSceneGameOverVienna1 = 60,
kSceneGameOverVienna2 = 61,
kSceneGameOverAlarm = 62,
kSceneGameOverPolice2 = 63,
kSceneGameOverAlarm2 = 64,
// Start screen
kSceneStartScreen = 65,
kSceneBeetle = 128,
kSceneFightDefault = 820,
kSceneInvalid = 0xffffffff
};
//////////////////////////////////////////////////////////////////////////
// Jacket
//////////////////////////////////////////////////////////////////////////
enum JacketType {
kJacketOriginal = 0,
kJacketBlood = 1,
kJacketGreen = 2
};
//////////////////////////////////////////////////////////////////////////
// City
//////////////////////////////////////////////////////////////////////////
enum CityIndex {
kCityEpernay = 0,
kCityChalons,
kCityBarleduc,
kCityNancy,
kCityLuneville,
kCityAvricourt, // 5
kCityDeutschAvricourt,
kCityStrasbourg,
kCityBadenOos,
kCitySalzbourg,
kCityAttnangPuchheim, // 10
kCityWels,
kCityLinz,
kCityVienna,
kCityPoszony,
kCityGalanta, // 15
kCityPolice
};
//////////////////////////////////////////////////////////////////////////
// Savegame ID
//////////////////////////////////////////////////////////////////////////
enum GameId {
kGameBlue,
kGameRed,
kGameGreen,
kGamePurple,
kGameTeal,
kGameGold
};
enum SavegameType {
kSavegameTypeIndex = 0,
kSavegameTypeTime = 1,
kSavegameTypeEvent = 2,
kSavegameTypeEvent2 = 3,
kSavegameTypeAuto = 4,
kSavegameTypeTickInterval = 5
};
//////////////////////////////////////////////////////////////////////////
// Cursor style
//////////////////////////////////////////////////////////////////////////
enum CursorStyle {
kCursorNormal,
kCursorForward,
kCursorBackward,
kCursorTurnRight,
kCursorTurnLeft,
kCursorUp,
kCursorDown,
kCursorLeft,
kCursorRight,
kCursorHand,
kCursorHandKnock, // 10
kCursorMagnifier,
kCursorHandPointer,
kCursorSleep,
kCursorTalk,
kCursorTalk2, // Need better name
// Items
kCursorMatchBox,
kCursorTelegram,
kCursorPassengerList,
kCursorArticle,
kCursorScarf, // 20
kCursorPaper,
kCursorParchemin,
kCursorMatch,
kCursorWhistle,
kCursorKey,
kCursorBomb,
kCursorFirebird,
kCursorBriefcase,
kCursorCorpse,
// Combat
kCursorPunchLeft, // 30
kCursorPunchRight,
// Portraits
kCursorPortrait, // 32
kCursorPortraitSelected,
kCursorPortraitGreen,
kCursorPortraitGreenSelected,
kCursorPortraitYellow,
kCursorPortraitYellowSelected,
kCursorHourGlass,
kCursorEggBlue,
kCursorEggRed, // 40
kCursorEggGreen,
kCursorEggPurple,
kCursorEggTeal,
kCursorEggGold,
kCursorEggClock,
kCursorNormal2,
kCursorBlank,
kCursorMAX,
// Special
kCursorProcess = 128,
kCursorKeepValue = 255
};
//////////////////////////////////////////////////////////////////////////
// Position - should be between 0 & 100
//////////////////////////////////////////////////////////////////////////
typedef unsigned char Position;
//////////////////////////////////////////////////////////////////////////
// EntityPosition
//////////////////////////////////////////////////////////////////////////
enum EntityPosition {
kPositionNone = 0,
kPosition_1 = 1,
kPosition_3 = 3,
kPosition_4 = 4,
kPosition_500 = 500,
kPosition_540 = 540,
kPosition_750 = 750,
kPosition_849 = 849,
kPosition_850 = 850,
kPosition_851 = 851,
kPosition_1200 = 1200,
kPosition_1430 = 1430,
kPosition_1500 = 1500,
kPosition_1540 = 1540,
kPosition_1750 = 1750,
kPosition_2000 = 2000,
kPosition_2087 = 2087,
kPosition_2086 = 2086,
kPosition_2088 = 2088,
kPosition_2110 = 2110,
kPosition_2300 = 2300,
kPosition_2330 = 2330,
kPosition_2410 = 2410,
kPosition_2436 = 2436,
kPosition_2490 = 2490,
kPosition_2500 = 2500,
kPosition_2587 = 2587,
kPosition_2588 = 2588,
kPosition_2690 = 2690,
kPosition_2740 = 2740,
kPosition_2830 = 2830,
kPosition_2980 = 2980,
kPosition_3050 = 3050,
kPosition_3110 = 3110,
kPosition_3390 = 3390,
kPosition_3450 = 3450,
kPosition_3500 = 3500,
kPosition_3550 = 3550,
kPosition_3650 = 3650,
kPosition_3760 = 3760,
kPosition_3820 = 3820,
kPosition_3890 = 3890,
kPosition_3969 = 3969,
kPosition_3970 = 3970,
kPosition_4070 = 4070,
kPosition_4100 = 4100,
kPosition_4370 = 4370,
kPosition_4455 = 4455,
kPosition_4460 = 4460,
kPosition_4500 = 4500,
kPosition_4590 = 4590,
kPosition_4680 = 4680,
kPosition_4689 = 4689,
kPosition_4690 = 4690,
kPosition_4691 = 4691,
kPosition_4770 = 4470,
kPosition_4840 = 4840,
kPosition_5000 = 5000,
kPosition_5090 = 5090,
kPosition_5140 = 5140,
kPosition_5419 = 5419,
kPosition_5420 = 5420,
kPosition_5440 = 5440,
kPosition_5500 = 5500,
kPosition_5540 = 5540,
kPosition_5610 = 5610,
kPosition_5790 = 5790,
kPosition_5799 = 5799,
kPosition_5800 = 5800,
kPosition_5810 = 5810,
kPosition_5890 = 5890,
kPosition_5900 = 5900,
kPosition_5970 = 5970,
kPosition_6000 = 6000,
kPosition_6130 = 6130,
kPosition_6160 = 6160,
kPosition_6220 = 6220,
kPosition_6410 = 6410,
kPosition_6460 = 6460,
kPosition_6469 = 6469,
kPosition_6470 = 6470,
kPosition_6471 = 6471,
kPosition_6800 = 6800,
kPosition_6850 = 6850,
kPosition_7000 = 7000,
kPosition_7160 = 7160,
kPosition_7250 = 7250,
kPosition_7320 = 7320,
kPosition_7500 = 7500,
kPosition_7510 = 7510,
kPosition_7850 = 7850,
kPosition_7870 = 7870,
kPosition_7900 = 7900,
kPosition_7950 = 7950,
kPosition_8000 = 8000,
kPosition_8012 = 8012,
kPosition_8013 = 8013,
kPosition_8160 = 8160,
kPosition_8200 = 8200,
kPosition_8500 = 8500,
kPosition_8512 = 8512,
kPosition_8513 = 8513,
kPosition_8514 = 8514,
kPosition_8800 = 8800,
kPosition_9020 = 9020,
kPosition_9269 = 9269,
kPosition_9250 = 9250,
kPosition_9270 = 9270,
kPosition_9271 = 9271,
kPosition_9460 = 9460,
kPosition_9500 = 9500,
kPosition_9510 = 9510,
kPosition_30000 = 30000
};
//////////////////////////////////////////////////////////////////////////
// Location
//////////////////////////////////////////////////////////////////////////
enum Location {
kLocationOutsideCompartment = 0,
kLocationInsideCompartment = 1,
kLocationOutsideTrain = 2
};
//////////////////////////////////////////////////////////////////////////
// Car
//////////////////////////////////////////////////////////////////////////
enum CarIndex {
kCarNone = 0,
kCarBaggageRear = 1,
kCarKronos = 2,
kCarGreenSleeping = 3,
kCarRedSleeping = 4,
kCarRestaurant = 5,
kCarBaggage = 6,
kCarCoalTender = 7,
kCarLocomotive = 8,
kCar9 = 9
};
//////////////////////////////////////////////////////////////////////////
// Clothes
//////////////////////////////////////////////////////////////////////////
enum ClothesIndex {
kClothesDefault = 0,
kClothes1 = 1,
kClothes2 = 2,
kClothes3 = 3,
kClothesInvalid
};
//////////////////////////////////////////////////////////////////////////
// Objects (doors)
//////////////////////////////////////////////////////////////////////////
enum ObjectLocation {
kObjectLocationNone = 0,
kObjectLocation1 = 1, // Floor?
kObjectLocation2 = 2, // Bed ?
kObjectLocation3 = 3,
kObjectLocation4 = 4, // Window ?
kObjectLocation5 = 5,
kObjectLocation6 = 6,
kObjectLocation7 = 7,
kObjectLocation8 = 8,
kObjectLocation9 = 9,
kObjectLocation10 = 10,
kObjectLocation18 = 18
};
enum ObjectModel {
kObjectModelNone = 0,
kObjectModel1 = 1,
kObjectModel2 = 2,
kObjectModel3 = 3,
kObjectModel4 = 4,
kObjectModel5 = 5,
kObjectModel6 = 6,
kObjectModel7 = 7,
kObjectModel8 = 8,
kObjectModel9 = 9,
kObjectModel10 = 10
};
//////////////////////////////////////////////////////////////////////////
// Entity direction
//////////////////////////////////////////////////////////////////////////
enum EntityDirection {
kDirectionNone = 0,
kDirectionUp = 1,
kDirectionDown = 2,
kDirectionLeft = 3,
kDirectionRight = 4,
kDirectionSwitch = 5
};
//////////////////////////////////////////////////////////////////////////
// Combat
//////////////////////////////////////////////////////////////////////////
enum FightType {
kFightMilos = 2001,
kFightAnna = 2002,
kFightIvo = 2003,
kFightSalko = 2004,
kFightVesna = 2005
};
//////////////////////////////////////////////////////////////////////////
// Index of items in inventory data
//////////////////////////////////////////////////////////////////////////
enum InventoryItem {
kItemNone,
kItemMatchBox,
kItem2,
kItem3,
kItemTelegram,
kItem5, // 5
kItemPassengerList,
kItem7,
kItemScarf,
kItem9,
kItemParchemin, // 10
kItem11,
kItemMatch,
kItemWhistle,
kItemBeetle,
kItemKey, // 15
kItemBomb,
kItem17,
kItemFirebird,
kItemBriefcase,
kItemCorpse, // 20
kItemGreenJacket,
kItem22,
kItemPaper,
kItemArticle,
kItem25, // 25
kItem26,
kItem27,
kItem28,
kItem29,
kItem30, // 30
kItem31,
// Portrait (not an index)
kPortraitOriginal = 32,
kPortraitGreen = 34,
kPortraitYellow = 36,
kItemInvalid = 128,
kItem146 = 146,
kItem147 = 147,
// Toggles
kItemToggleHigh = 0x7F,
kItemToggleLow = 0xF7
};
//////////////////////////////////////////////////////////////////////////
// Object ID
//////////////////////////////////////////////////////////////////////////
enum ObjectIndex {
kObjectNone,
kObjectCompartment1,
kObjectCompartment2,
kObjectCompartment3,
kObjectCompartment4,
kObjectCompartment5, // 5
kObjectCompartment6,
kObjectCompartment7,
kObjectCompartment8,
kObjectOutsideTylerCompartment,
kObject10, // 10
kObject11,
kObject12,
kObject13,
kObject14,
kObject15, // 15
kObject16,
kObjectHandleBathroom,
kObjectHandleInsideBathroom,
kObjectKitchen,
kObject20, // 20
kObject21,
kObject22,
kObjectTrainTimeTable,
kObjectRedSleepingCar,
kObject25, // 25
kObjectHandleOutsideLeft,
kObjectHandleOutsideRight,
kObject28,
kObject29,
kObject30, // 30
kObject31,
kObjectCompartmentA,
kObjectCompartmentB,
kObjectCompartmentC,
kObjectCompartmentD, // 35
kObjectCompartmentE,
kObjectCompartmentF,
kObjectCompartmentG,
kObjectCompartmentH,
kObject40, // 40
kObject41,
kObject42,
kObject43,
kObjectOutsideBetweenCompartments,
kObjectOutsideAnnaCompartment, // 45
kObject46,
kObject47,
kObject48, // might be the egg
kObject49,
kObject50, // 50
kObject51,
kObject52,
kObject53,
kObject54,
kObjectRestaurantCar, // 55
kObject56,
kObject57,
kObject58,
kObject59,
kObject60, // 60
kObject61,
kObject62,
kObject63,
kObject64,
kObject65, // 65
kObject66,
kObject67,
kObject68,
kObject69,
kObject70, // 70
kObject71,
kObject72,
kObjectCeiling,
kObject74,
kObjectCompartmentKronos, // 75
kObject76,
kObject77,
kObject78,
kObject79,
kObject80, // 80
kObject81,
kObject82,
kObject83,
kObject84,
kObject85, // 85
kObject86,
kObject87,
kObject88,
kObject89,
kObject90, // 90
kObject91,
kObject92,
kObject93,
kObject94,
kObject95, // 95
kObject96,
kObject97,
kObject98,
kObject99,
kObject100, // 100
kObject101,
kObject102,
kObject103,
kObject104,
kObject105, // 105
kObject106,
kObject107,
kObject108,
kObjectCageMax,
kObject110, // 110
kObject111,
kObject112,
kObject113,
kObject114,
kObject115, // 115
kObject116,
kObject117,
kObject118,
kObject119,
kObject120, // 120
kObject121,
kObject122,
kObject123,
kObject124,
kObject125, // 125
kObject126,
kObject127,
kObjectMax
};
//////////////////////////////////////////////////////////////////////////
// Entity ID
//////////////////////////////////////////////////////////////////////////
enum EntityIndex {
kEntityPlayer,
kEntityAnna,
kEntityAugust,
kEntityMertens,
kEntityCoudert,
kEntityPascale, // 5
kEntityWaiter1,
kEntityWaiter2,
kEntityCooks,
kEntityVerges,
kEntityTatiana, // 10
kEntityVassili,
kEntityAlexei,
kEntityAbbot,
kEntityMilos,
kEntityVesna, // 15
kEntityIvo,
kEntitySalko,
kEntityKronos,
kEntityKahina,
kEntityFrancois, // 20
kEntityMmeBoutarel,
kEntityBoutarel,
kEntityRebecca,
kEntitySophie,
kEntityMahmud, // 25
kEntityYasmin,
kEntityHadija,
kEntityAlouan,
kEntityGendarmes,
kEntityMax, // 30
kEntityChapters,
kEntityTrain,
kEntityTables0,
kEntityTables1,
kEntityTables2, // 35
kEntityTables3,
kEntityTables4,
kEntityTables5,
kEntity39,
kEntitySteam = 255
};
//////////////////////////////////////////////////////////////////////////
// Events
// - a single D at the end means that Cath is on the right of the "scene" (D = Down the train, U = Up the train)
// - DD: during the day, coming down the train
// - DU: during the day, coming up the train
// - ND: during the night, coming down the train
// - NU: during the night, coming up the train
//////////////////////////////////////////////////////////////////////////
enum EventIndex {
kEventNone = 0,
kEventGotALight = 1,
kEventGotALightD = 2,
kEventDinerMindJoin = 3,
kEventDinerAugustOriginalJacket = 4,
kEventDinerAugust = 5,
kEventDinerAugustAlexeiBackground = 6,
kEventMeetAugustTylerCompartment = 7,
kEventMeetAugustTylerCompartmentBed = 8,
kEventMeetAugustHisCompartment = 9,
kEventMeetAugustHisCompartmentBed = 10,
kEventAugustFindCorpse = 11,
kEventAugustPresentAnna = 12,
kEventAugustPresentAnnaFirstIntroduction = 13,
kEventAnnaIntroductionRejected = 14,
kEventAnnaConversationGoodNight = 15,
kEventAnnaVisitToCompartmentGun = 16,
kEventInvalid_17 = 17,
kEventAnnaGoodNight = 18,
kEventAnnaGoodNightInverse = 19,
kEventAugustGoodMorning = 20,
kEventAugustMerchandise = 21,
kEventAugustTalkGold = 22,
kEventAugustTalkGoldDay = 23,
kEventAugustTalkCompartmentDoor = 24,
kEventAugustTalkCompartmentDoorBlueRedingote = 25,
kEventAugustLunch = 26,
kEventKronosVisit = 27,
kEventAnnaSearchingCompartment = 28,
kEventAugustBringEgg = 29,
kEventAugustBringBriefcase = 30,
kEventAugustTalkCigar = 31,
kEventAnnaBaggageArgument = 32,
kEventAnnaBagagePart2 = 33,
kEventAnnaConversation_34 = 34,
kEventAugustDrink = 35,
kEventAnnaTired = 36,
kEventAnnaTiredKiss = 37,
kEventAnnaBaggageTies = 38,
kEventAnnaBaggageTies2 = 39,
kEventAnnaBaggageTies3 = 40,
kEventAnnaBaggageTies4 = 41,
kEventAugustUnhookCarsBetrayal = 42,
kEventAugustUnhookCars = 43,
kEventLocomotiveAnnaStopsTrain = 44,
kEventInvalid_45 = 45,
kEventTrainStopped = 46,
kEventAnnaKissTrainHijacked = 47,
kEventTrainHijacked = 48,
kEventAnnaKilled = 49,
kEventKronosGoingToInvitation = 50,
kEventKronosConversation = 51,
kEventKahinaAskSpeakFirebird = 52,
kEventKahinaAskSpeak = 53,
kEventKronosConversationFirebird = 54,
kEventKahinaGunYellow = 55,
kEventKahinaGunBlue = 56,
kEventKahinaGun = 57,
kEventKronosBringEggCeiling = 58,
kEventKronosBringEgg = 59,
kEventKronosBringNothing = 60,
kEventKronosReturnBriefcase = 61,
kEventKronosHostageAnna = 62,
kEventKronosGiveFirebird = 63,
kEventKahinaPunchBaggageCarEntrance = 64,
kEventKahinaPunchBlue = 65,
kEventKahinaPunchYellow = 66,
kEventKahinaPunchSalon = 67,
kEventKahinaPunchKitchen = 68,
kEventKahinaPunchBaggageCar = 69,
kEventKahinaPunchCar = 70,
kEventKahinaPunchSuite4 = 71,
kEventKahinaPunchRestaurant = 72,
kEventKronosHostageAnnaNoFirebird = 73,
kEventKahinaPunch = 74,
kEventKahinaWrongDoor = 75,
kEventAlexeiDiner = 76,
kEventAlexeiDinerOriginalJacket = 77,
kEventAlexeiSalonVassili = 78,
kEventAlexeiSalonCath = 79,
kEventAlexeiSalonPoem = 80,
kEventTatianaAskMatchSpeakRussian = 81,
kEventTatianaAskMatch = 82,
kEventTatianaGivePoem = 83,
kEventVassiliSeizure = 84,
kEventTatianaBreakfastAlexei = 85,
kEventTatianaBreakfast = 86,
kEventTatianaBreakfastGivePoem = 87,
kEventTatianaAlexei = 88,
kEventTatianaCompartmentStealEgg = 89,
kEventTatianaCompartment = 90,
kEventVassiliCompartmentStealEgg = 91,
kEventTatianaTylerCompartment = 92,
kEventTylerCastleDream= 93,
kEventVassiliDeadAlexei = 94,
kEventCathFreePassengers = 95,
kEventTatianaVassiliTalk = 96,
kEventTatianaVassiliTalkNight = 97,
kEventMilosTylerCompartmentVisit = 98,
kEventMilosTylerCompartmentBedVisit = 99,
kEventMilosTylerCompartment = 100,
kEventMilosTylerCompartmentBed = 101,
kEventMilosTylerCompartmentDefeat = 102,
kEventMilosCorpseFloor = 103,
kEventMilosCompartmentVisitAugust = 104,
kEventMilosCorridorThanks = 105,
kEventMilosCorridorThanksD = 106,
kEventMilosCompartmentVisitTyler = 107,
kEventLocomotiveMilosDay = 108,
kEventLocomotiveMilosNight = 109,
kEventAbbotIntroduction = 110,
kEventAbbotWrongCompartment = 111,
kEventAbbotWrongCompartmentBed = 112,
kEventAbbotInvitationDrink = 113,
kEventAbbotDrinkGiveDetonator = 114,
kEventTrainExplosionBridge = 115,
kEventDefuseBomb = 116,
kEventAbbotDrinkDefuse = 117,
kEventMertensLastCar = 118,
kEventMertensLastCarOriginalJacket = 119,
kEventMertensKronosInvitation = 120,
kEventMertensKronosInvitationCompartment = 121,
kEventMertensKronosInvitationClosedWindows = 122,
kEventMertensBloodJacket = 123,
kEventCoudertBloodJacket = 124,
kEventMertensCorpseFloor = 125,
kEventMertensCorpseBed = 126,
kEventMertensDontMakeBed = 127,
kEventInvalid_128 = 128,
kEventGendarmesArrestation = 129,
kEventVergesSuitcase = 130,
kEventVergesSuitcaseStart = 131,
kEventVergesSuitcaseOtherEntry = 132,
kEventVergesSuitcaseOtherEntryStart = 133,
kEventVergesSuitcaseNight = 134,
kEventVergesSuitcaseNightStart = 135,
kEventVergesSuitcaseNightOtherEntry = 136,
kEventVergesSuitcaseNightOtherEntryStart = 137,
kEventMertensAskTylerCompartment = 138,
kEventMertensAskTylerCompartmentD = 139,
kEventMertensPushCallNight = 140,
kEventMertensPushCall = 141,
kEventMertensAugustWaiting = 142,
kEventMertensAugustWaitingCompartment = 143,
kEventIntroBroderbrund = 144,
kEventCoudertAskTylerCompartment = 145,
kEventMertensKronosConcertInvitation = 146,
kEventCoudertGoingOutOfVassiliCompartment = 147,
kEventLocomotiveConductorsDiscovered = 148,
kEventLocomotiveConductorsLook = 149,
kEventMahmudWrongDoor = 150,
kEventMahmudWrongDoorOriginalJacket = 151,
kEventMahmudWrongDoorDay = 152,
kEventVergesEscortToDiningCar = 153,
kEventVergesBaggageCarOffLimits = 154,
kEventVergesCanIHelpYou = 155,
kEventCoudertBaggageCar = 156,
kEventCathTurningDay = 157,
kEventCathTurningNight = 158,
kEventIntro = 159,
kEventCathDream = 160,
kEventCorpseDropBridge = 161,
kEventTrainPassing = 162,
kEventVergesAnnaDead = 163,
kEventViennaAugustUnloadGuns = 164,
kEventViennaKronosFirebird = 165,
kEventViennaContinueGame = 166,
kEventCathVesnaRestaurantKilled = 167,
kEventCathMaxCage = 168,
kEventCathMaxFree = 169,
kEventCathMaxLickHand = 170,
kEventCathIvoFight = 171,
kEventCathSalkoTrainTopFight = 172,
kEventCathVesnaTrainTopFight = 173,
kEventCathVesnaTrainTopKilled = 174,
kEventCathVesnaTrainTopWin = 175,
kEventCathSalkoTrainTopWin = 176,
kEventFrancoisWhistle = 177,
kEventFrancoisWhistleD = 178,
kEventFrancoisWhistleNight = 179,
kEventFrancoisWhistleNightD = 180,
kEventFrancoisShowBeetle = 181,
kEventFrancoisShowBeetleD = 182,
kEventFrancoisTradeWhistle = 183,
kEventFrancoisTradeWhistleD = 184,
kEventFrancoisShowEgg = 185,
kEventFrancoisShowEggD = 186,
kEventFrancoisShowEggNightD = 187,
kEventFrancoisShowEggNight = 188,
kEventKronosBringFirebird = 189,
kEventKronosOpenFirebird = 190,
kEventFinalSequence = 191,
kEventLocomotiveRestartTrain = 192,
kEventLocomotiveOldBridge = 193,
kEventLocomotiveAbbotGetSomeRest = 194,
kEventLocomotiveAbbotShoveling = 195,
kEventLocomotiveMilosShovelingDay = 196,
kEventLocomotiveMilosShovelingNight = 197,
kEventAnnaGiveScarf = 198,
kEventAnnaGiveScarfDiner = 199,
kEventAnnaGiveScarfSalon = 200,
kEventAnnaGiveScarfMonogram = 201,
kEventAnnaGiveScarfDinerMonogram = 202,
kEventAnnaGiveScarfSalonMonogram = 203,
kEventAnnaGiveScarfAsk = 204,
kEventAnnaGiveScarfDinerAsk = 205,
kEventAnnaGiveScarfSalonAsk = 206,
kEventAugustArrivalInMunich = 207,
kEventAnnaDialogGoToJerusalem = 208,
kEventConcertStart = 209,
kEventConcertEnd = 210,
kEventCathFallingAsleep = 211,
kEventCathWakingUp = 212,
kEventConcertCough = 213,
kEventConcertSit = 214,
kEventConcertLeaveWithBriefcase = 215,
kEventCorpseDropFloorOriginal = 216,
kEventCorpseDropFloorGreen = 217,
kEventCorpsePickFloorOriginal = 218,
kEventCorpsePickFloorGreen = 219,
kEventCorpsePickFloorOpenedBedOriginal = 220,
kEventCorpsePickBedOriginal = 221,
kEventCorpsePickBedGreen = 222,
kEventCorpseDropBedOriginal = 223,
kEventCorpseDropBedGreen = 224,
kEventCorpseDropWindowOriginal = 225,
kEventCorpseDropWindowGreen = 226,
kEventCathFindCorpse = 227,
kEventCathLookOutsideWindowDay = 228,
kEventCathLookOutsideWindowNight = 229,
kEventCathGoOutsideTylerCompartmentDay = 230,
kEventCathGoOutsideTylerCompartmentNight = 231,
kEventCathGoOutsideDay = 232,
kEventCathGoOutsideNight = 233,
kEventCathSlipTylerCompartmentDay = 234,
kEventCathSlipTylerCompartmentNight = 235,
kEventCathSlipDay = 236,
kEventCathSlipNight = 237,
kEventCathGetInsideTylerCompartmentDay = 238,
kEventCathGetInsideTylerCompartmentNight = 239,
kEventCathGetInsideDay = 240,
kEventCathGetInsideNight = 241,
kEventCathGettingInsideAnnaCompartment = 242,
kEventCathClimbUpTrainGreenJacket = 243,
kEventCathClimbUpTrainNoJacketNight = 244,
kEventCathClimbUpTrainNoJacketDay = 245,
kEventCathClimbDownTrainGreenJacket = 246,
kEventCathClimbDownTrainNoJacketNight = 247,
kEventCathClimbDownTrainNoJacketDay= 248,
kEventCathTopTrainGreenJacket = 249,
kEventCathTopTrainNoJacketNight = 250,
kEventCathTopTrainNoJacketDay = 251,
kEventCathBreakCeiling = 252,
kEventCathJumpDownCeiling = 253,
kEventCathJumpUpCeilingBriefcase = 254,
kEventCathJumpUpCeiling = 255,
kEventPickGreenJacket = 256,
kEventPickScarfGreen = 257,
kEventPickScarfOriginal = 258,
kEventCloseMatchbox = 259,
kEventCathStruggleWithBonds = 260,
kEventCathBurnRope = 261,
kEventCathRemoveBonds = 262,
kEventCathStruggleWithBonds2 = 263,
kEventCathDefusingBomb = 264,
kEventCathSmokeNight = 265,
kEventCathSmokeDay = 266,
kEventCathOpenEgg = 267,
kEventCathOpenEggNoBackground = 268,
kEventCathCloseEgg = 269,
kEventCathCloseEggNoBackground = 270,
kEventCathUseWhistleOpenEgg = 271,
kEventCathUseWhistleOpenEggNoBackground = 272
};
//////////////////////////////////////////////////////////////////////////
// Action ID (used by entity logic)
//////////////////////////////////////////////////////////////////////////
enum ActionIndex {
kActionNone = 0,
kAction1 = 1,
kActionEndSound = 2,
kActionExitCompartment = 3,
kAction4 = 4,
kActionExcuseMeCath = 5,
kActionExcuseMe = 6,
kActionKnock = 8,
kActionOpenDoor = 9,
kAction10 = 10,
kAction11 = 11,
kActionDefault = 12,
kAction16 = 16,
kActionDrawScene = 17,
kActionCallback = 18,
/////////////////////////////
// Abbot
/////////////////////////////
kAction100969180 = 100969180, // Anna
kAction101169422 = 101169422,
kAction104060776 = 104060776,
kAction135600432 = 135600432,
kAction136196244 = 136196244,
kAction157159392 = 157159392,
kAction157489665 = 157489665,
kAction158480160 = 158480160,
kAction192054567 = 192054567,
kAction203073664 = 203073664,
kAction222609266 = 222609266,
/////////////////////////////
// Alexei
/////////////////////////////
kAction100906246 = 100906246,
kAction123536024 = 123536024,
kAction124697504 = 124697504,
kAction135664192 = 135664192,
kAction135854208 = 135854208,
kAction188784532 = 188784532,
kAction221617184 = 221617184,
/////////////////////////////
// Alouan
/////////////////////////////
kAction189489753 = 189489753,
kAction190219584 = 190219584, // Francois
/////////////////////////////
// Anna
/////////////////////////////
kAction136702400 = 136702400,
kAction139254416 = 139254416,
kAction156049968 = 156049968,
kAction157370960 = 157370960,
kAction157894320 = 157894320,
kAction159332865 = 159332865, // August
kAction189299008 = 189299008,
kAction191668032 = 191668032, // some action during or before concert?
kAction201437056 = 201437056,
kAction235856512 = 235856512,
kAction236060709 = 236060709,
kAction238936000 = 238936000,
kAction259136835 = 259136835,
kAction291662081 = 291662081,
/////////////////////////////
// August
/////////////////////////////
kAction123793792 = 123793792,
kAction134611040 = 134611040,
kAction168046720 = 168046720,
kAction168627977 = 168627977,
kAction169032608 = 169032608,
kAction189426612 = 189426612,
kAction203859488 = 203859488,
kAction219522616 = 219522616, // Waiter1
kAction225182640 = 225182640,
kAction235257824 = 235257824,
/////////////////////////////
// Boutarel
/////////////////////////////
kAction125039808 = 125039808,
kAction134466544 = 134466544,
kAction135854206 = 135854206,
kAction159003408 = 159003408,
kAction203520448 = 203520448,
kAction237889408 = 237889408,
/////////////////////////////
// Chapters
/////////////////////////////
kAction135800432 = 135800432,
kActionChapter3 = 139122728,
kActionChapter5 = 139254416,
kAction156435676 = 156435676,
kAction169629818 = 169629818,
kAction171843264 = 171843264,
kAction190346110 = 190346110,
/////////////////////////////
// Cooks
/////////////////////////////
kAction101632192 = 101632192,
kAction224849280 = 224849280,
kAction236976550 = 236976550,
/////////////////////////////
// Coudert
/////////////////////////////
kAction123733488 = 123733488,
kAction154005632 = 154005632,
kAction155991520 = 155991520,
kAction157026693 = 157026693,
kAction168253822 = 168253822,
kAction168254872 = 168254872,
kAction168316032 = 168316032, // Tatiana
kAction169557824 = 169557824,
kAction171394341 = 171394341, // Mertens
kAction185671840 = 185671840,
kAction185737168 = 185737168,
kAction188570113 = 188570113,
kAction189026624 = 189026624,
kAction189750912 = 189750912,
kAction192063264 = 192063264, // Anna
kAction201431954 = 201431954, // Mertens / Verges
kAction201439712 = 201439712,
kAction205033696 = 205033696,
kAction205346192 = 205346192, // Francois
kAction219971920 = 219971920, // Anna
kAction223068211 = 223068211, // MmeBoutarel
kAction225932896 = 225932896,
kAction226031488 = 226031488, // Verges
kAction235061888 = 235061888, // Tatiana
kAction238358920 = 238358920, // Anna
kAction253868128 = 253868128, // Anna
kAction285528346 = 285528346, // Rebecca
kAction292048641 = 292048641,
kAction305159806 = 305159806,
kAction326348944 = 326348944,
kAction339669520 = 339669520, // Verges
/////////////////////////////
// Francois
/////////////////////////////
kAction100901266 = 100901266,
kAction100957716 = 100957716,
kAction101107728 = 101107728,
kAction189872836 = 189872836,
kAction190390860 = 190390860,
/////////////////////////////
// Gendarmes
/////////////////////////////
kAction168710784 = 168710784,
kAction169499649 = 169499649,
/////////////////////////////
// Kahina
/////////////////////////////
kAction92186062 = 92186062,
kAction137503360 = 137503360,
kAction237555748 = 237555748,
/////////////////////////////
// Kronos
/////////////////////////////
kAction137685712 = 137685712,
kAction138085344 = 138085344,
kAction171849314 = 171849314,
kAction235599361 = 235599361,
/////////////////////////////
// Mahmud
/////////////////////////////
kAction102227384 = 102227384, // Mertens
kAction156567128 = 156567128,
kAction170483072 = 170483072,
kAction225563840 = 225563840,
/////////////////////////////
// Max
/////////////////////////////
kAction71277948 = 71277948,
kAction158007856 = 158007856,
kAction101687594 = 101687594,
kAction122358304 = 122358304, // also Waiter2/Boutarel?
kActionMaxFreeFromCage = 135204609,
kAction156622016 = 156622016,
/////////////////////////////
// Mertens
/////////////////////////////
kAction155604840 = 155604840, // MmeBoutarel
kAction169633856 = 169633856,
kAction188635520 = 188635520,
kAction190082817 = 190082817,
kAction192849856 = 192849856,
kAction204379649 = 204379649,
kAction224122407 = 224122407,
kAction238732837 = 238732837,
kAction238790488 = 238790488, // Tatiana
kAction269436673 = 269436673,
kAction269624833 = 269624833,
kAction302614416 = 302614416,
kAction303343617 = 303343617,
/////////////////////////////
// Milos
/////////////////////////////
kAction88652208 = 88652208, // Coudert
kAction122865568 = 122865568,
kAction123852928 = 123852928,
kAction123199584 = 123199584, // Coudert
kAction157691176 = 157691176,
kAction208228224 = 208228224,
kAction221683008 = 221683008,
kAction259125998 = 259125998,
/////////////////////////////
// Mme Boutarel
/////////////////////////////
kAction102484312 = 102484312,
kAction102752636 = 102752636,
kAction134289824 = 134289824,
kAction168986720 = 168986720,
kAction202221040 = 202221040,
kAction242526416 = 242526416,
/////////////////////////////
// Pascale
/////////////////////////////
kAction101824388 = 101824388,
kAction136059947 = 136059947,
kAction169750080 = 169750080,
kAction190605184 = 190605184,
kAction191604416 = 191604416,
kAction207769280 = 207769280,
kAction223262556 = 223262556,
kAction239072064 = 239072064,
kAction257489762 = 257489762,
kAction269479296 = 269479296,
kAction352703104 = 352703104,
kAction352768896 = 352768896,
/////////////////////////////
// Rebecca
/////////////////////////////
kAction125496184 = 125496184,
kAction155465152 = 155465152,
kAction155980128 = 155980128,
kAction169358379 = 169358379,
kAction224253538 = 224253538,
kAction254915200 = 254915200,
/////////////////////////////
// Salko
/////////////////////////////
kAction55996766 = 55996766,
kAction101169464 = 101169464,
kAction102675536 = 102675536, // Ivo
kAction136184016 = 136184016,
/////////////////////////////
// Servers 0
/////////////////////////////
kAction170016384 = 170016384,
kAction188893625 = 188893625,
kAction201964801 = 201964801, // August
kAction204704037 = 204704037,
kAction207330561 = 207330561,
kAction218128129 = 218128129,
kAction218586752 = 218586752,
kAction218983616 = 218983616,
kAction223712416 = 223712416,
kAction237485916 = 237485916,
kAction252568704 = 252568704,
kAction268773672 = 268773672, // Anna / August
kAction270068760 = 270068760,
kAction270410280 = 270410280,
kAction286403504 = 286403504,
kAction286534136 = 286534136,
kAction292758554 = 292758554,
kAction304061224 = 304061224,
kAction337548856 = 337548856,
/////////////////////////////
// Servers 1
/////////////////////////////
kAction101106391 = 101106391,
kAction122288808 = 122288808, // Boutarel
kAction123712592 = 123712592, // Ivo
kAction125826561 = 125826561, // August
kAction134486752 = 134486752, // August
kAction168717392 = 168717392, // Boutarel
kAction189688608 = 189688608,
kAction219377792 = 219377792,
kAction223002560 = 223002560,
kAction236237423 = 236237423,
kAction256200848 = 256200848,
kAction258136010 = 258136010,
kAction269485588 = 269485588,
kAction291721418 = 291721418,
kAction302203328 = 302203328,
kAction302996448 = 302996448,
kAction326144276 = 326144276,
/////////////////////////////
// Sophie
/////////////////////////////
kActionProceedChapter5 = 70549068,
kAction123668192 = 123668192,
kAction125242096 = 125242096,
kAction136654208 = 136654208,
kAction259921280 = 259921280,
kAction292775040 = 292775040,
/////////////////////////////
// Tables
/////////////////////////////
kActionDrawTablesWithChairs = 103798704,
kAction136455232 = 136455232,
/////////////////////////////
// Tatiana
/////////////////////////////
kAction69239528 = 69239528,
kAction123857088 = 123857088,
kAction124973510 = 124973510,
kAction154071333 = 154071333,
kAction156444784 = 156444784,
kAction169360385 = 169360385,
kAction191198209 = 191198209,
kAction223183000 = 223183000, // August
kAction236053296 = 236053296, // Alexei
kAction236241630 = 236241630, // Anna
kAction236517970 = 236517970, // Anna
kAction268620864 = 268620864, // August
kAction290869168 = 290869168,
/////////////////////////////
// Train
/////////////////////////////
kAction191070912 = 191070912,
kActionTrainStopRunning = 191350523,
kActionCatchBeetle = 202613084,
kAction203339360 = 203339360,
kActionTrainStartRunning = 203419131,
kAction203863200 = 203863200,
kAction222746496 = 222746496,
kActionBreakCeiling = 225056224,
kAction290410610 = 290410610,
kActionJumpDownCeiling = 338494260,
/////////////////////////////
// Verges
/////////////////////////////
kAction125233040 = 125233040, // Abbot
kAction125499160 = 125499160,
kAction155853632 = 155853632,
kAction158617345 = 158617345,
kAction167854368 = 167854368,
kAction168187490 = 168187490,
kAction168255788 = 168255788,
kActionDeliverMessageToTyler = 191337656,
kAction202558662 = 202558662,
/////////////////////////////
// Vassili
/////////////////////////////
kAction122732000 = 122732000,
kAction168459827 = 168459827,
kAction191477936 = 191477936,
/////////////////////////////
// Vesna
/////////////////////////////
kAction124190740 = 124190740,
kAction134427424 = 134427424,
kAction135024800 = 135024800,
kAction137165825 = 137165825,
kAction155913424 = 155913424,
kAction190412928 = 190412928,
kAction203663744 = 203663744,
kAction204832737 = 204832737,
/////////////////////////////
// Misc
/////////////////////////////
kAction158610240 = 158610240,
kAction167992577 = 167992577,
kAction168646401 = 168646401,
kAction169300225 = 169300225,
kAction169773228 = 169773228,
kActionEndChapter = 190346110,
kAction191001984 = 191001984,
kAction192637492 = 192637492,
kAction201959744 = 201959744,
kAction202621266 = 202621266,
kAction202884544 = 202884544,
kAction203078272 = 203078272,
kAction205034665 = 205034665,
kAction205294778 = 205294778,
kActionUseWhistle = 270751616,
kAction272177921 = 272177921,
kAction224309120 = 224309120,
kAction225358684 = 225358684,
kAction225367984 = 225367984,
kAction226078300 = 226078300, // Whistle
kActionEnd
};
} // End of namespace LastExpress
#endif // LASTEXPRESS_SHARED_H