[Scummvm-git-logs] scummvm master -> 9de37d3f6a030867c0a03bb42e8dbd68ade332ba
fracturehill
noreply at scummvm.org
Thu Aug 10 11:33:48 UTC 2023
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
71bbbea4a8 NANCY: Fix incorrect cursor when hotspots overlap
e4f2cb4acd NANCY: Improve sound reading
5fd55ecb60 DEVTOOLS: Fix nancy4 Russian strings in nancy.dat
6763eba9ce DEVTOOLS: Rework nancy.dat structure
d8fe9cb4c1 NANCY: Implement new nancy.dat format
5ecbabb9a7 DEVTOOLS: Add nancy5 data to nancy.dat
9de37d3f6a DISTS: Update nancy.dat
Commit: 71bbbea4a88e6e5414282f52690d5d6d89dcbb5a
https://github.com/scummvm/scummvm/commit/71bbbea4a88e6e5414282f52690d5d6d89dcbb5a
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2023-08-10T14:28:49+03:00
Commit Message:
NANCY: Fix incorrect cursor when hotspots overlap
Overlapping hotspots with different hover cursors now
work correctly (only the first one is respected). This fixes the
stairs in nancy3.
Changed paths:
engines/nancy/action/actionmanager.cpp
diff --git a/engines/nancy/action/actionmanager.cpp b/engines/nancy/action/actionmanager.cpp
index 18482444396..be3418cd481 100644
--- a/engines/nancy/action/actionmanager.cpp
+++ b/engines/nancy/action/actionmanager.cpp
@@ -35,6 +35,7 @@ namespace Nancy {
namespace Action {
void ActionManager::handleInput(NancyInput &input) {
+ bool setHoverCursor = false;
for (auto &rec : _records) {
if (rec->_isActive) {
// Send input to all active records
@@ -45,7 +46,12 @@ void ActionManager::handleInput(NancyInput &input) {
rec->_hasHotspot &&
rec->_hotspot.isValidRect() && // Needed for nancy2 scene 1600
NancySceneState.getViewport().convertViewportToScreen(rec->_hotspot).contains(input.mousePos)) {
- g_nancy->_cursorManager->setCursorType(rec->getHoverCursor());
+ if (!setHoverCursor) {
+ // Hotspots may overlap, but we want the hover cursor for the first one we encounter
+ // This fixes the stairs in nancy3
+ g_nancy->_cursorManager->setCursorType(rec->getHoverCursor());
+ setHoverCursor = true;
+ }
if (input.input & NancyInput::kLeftMouseButtonUp) {
input.input &= ~NancyInput::kLeftMouseButtonUp;
Commit: e4f2cb4acdd6cfb6e7de6e4732a2d9c0566db2d6
https://github.com/scummvm/scummvm/commit/e4f2cb4acdd6cfb6e7de6e4732a2d9c0566db2d6
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2023-08-10T14:28:49+03:00
Commit Message:
NANCY: Improve sound reading
Fixed several inaccuracies with reading sound data. Added
enumerations describing the sound playing commands
introduced in nancy3. Added a flag for sound debugging,
which will be used in implementing said play commands.
Changed paths:
engines/nancy/commontypes.cpp
engines/nancy/commontypes.h
engines/nancy/detection.cpp
engines/nancy/detection.h
engines/nancy/sound.cpp
engines/nancy/sound.h
engines/nancy/state/scene.cpp
engines/nancy/state/scene.h
diff --git a/engines/nancy/commontypes.cpp b/engines/nancy/commontypes.cpp
index d9b9db23fab..940a51aace2 100644
--- a/engines/nancy/commontypes.cpp
+++ b/engines/nancy/commontypes.cpp
@@ -105,12 +105,13 @@ void SoundDescription::readNormal(Common::SeekableReadStream &stream) {
s.skip(2); // PLAY_SOUND_FROM_HD = 1, PLAY_SOUND_FROM_CDROM = 2
s.skip(2); // PLAY_SOUND_AS_DIGI = 1, PLAY_SOUND_AS_STREAM = 2
+ s.syncAsUint16LE(playCommands);
- s.skip(4, kGameTypeVampire, kGameTypeNancy2);
+ s.skip(2, kGameTypeVampire, kGameTypeNancy2);
s.syncAsUint32LE(numLoops);
-
- s.skip(2);
+
+ s.skip(2, kGameTypeVampire, kGameTypeNancy2);
s.syncAsUint16LE(volume);
s.skip(2); // Second volume, always (?) same as the first
@@ -128,7 +129,8 @@ void SoundDescription::readDIGI(Common::SeekableReadStream &stream) {
s.syncAsUint16LE(channelID);
s.skip(2); // PLAY_SOUND_FROM_HD = 1, PLAY_SOUND_FROM_CDROM = 2
- s.skip(2); // PLAY_SOUND_AS_DIGI = 1, PLAY_SOUND_AS_STREAM = 2
+ s.skip(2, kGameTypeVampire, kGameTypeVampire);
+ s.syncAsUint16LE(playCommands, kGameTypeNancy1);
s.syncAsUint32LE(numLoops);
@@ -171,24 +173,23 @@ void SoundDescription::readScene(Common::SeekableReadStream &stream) {
readFilename(s, name);
- s.skip(4);
- s.syncAsUint16LE(channelID);
+ s.skip(2); // PLAY_SOUND_FROM_HD = 1, PLAY_SOUND_FROM_CDROM = 2
+ s.skip(2); // PLAY_SOUND_AS_DIGI = 1, PLAY_SOUND_AS_STREAM = 2
- s.skip(2, kGameTypeVampire, kGameTypeNancy2); // PLAY_SOUND_FROM_HD = 1, PLAY_SOUND_FROM_CDROM = 2
- s.skip(2, kGameTypeVampire, kGameTypeNancy2); // PLAY_SOUND_AS_DIGI = 1, PLAY_SOUND_AS_STREAM = 2
+ s.syncAsUint16LE(channelID);
+ s.syncAsUint16LE(playCommands);
- s.skip(2, kGameTypeNancy3);
+ s.skip(2, kGameTypeVampire, kGameTypeNancy2);
s.syncAsUint32LE(numLoops);
s.skip(2, kGameTypeVampire, kGameTypeNancy2);
+
s.syncAsUint16LE(volume);
s.skip(2); // Second volume, always (?) same as the first
- s.skip(2);
+ s.skip(2, kGameTypeVampire, kGameTypeNancy2);
s.skip(4, kGameTypeVampire, kGameTypeNancy2); // Panning, always? at center
s.syncAsUint32LE(samplesPerSec, kGameTypeVampire, kGameTypeNancy2);
-
- s.skip(14, kGameTypeNancy3);
}
void ConditionalDialogue::readData(Common::SeekableReadStream &stream) {
diff --git a/engines/nancy/commontypes.h b/engines/nancy/commontypes.h
index 258775139c3..96e138d9ff2 100644
--- a/engines/nancy/commontypes.h
+++ b/engines/nancy/commontypes.h
@@ -162,6 +162,7 @@ struct SecondaryVideoDescription {
struct SoundDescription {
Common::String name;
uint16 channelID = 0;
+ uint16 playCommands = 1;
uint16 numLoops = 0;
uint16 volume = 0;
uint16 panAnchorFrame = 0;
diff --git a/engines/nancy/detection.cpp b/engines/nancy/detection.cpp
index 9e366da4129..18b98b7775c 100644
--- a/engines/nancy/detection.cpp
+++ b/engines/nancy/detection.cpp
@@ -31,9 +31,10 @@ const char *const directoryGlobs[] = {
};
static const DebugChannelDef debugFlagList[] = {
- { Nancy::kDebugEngine, "Engine", "Engine debug level" },
- { Nancy::kDebugActionRecord, "ActionRecord", "Action Record debug level" },
- { Nancy::kDebugScene, "Scene", "Scene debug level" },
+ { Nancy::kDebugEngine, "Engine", "Engine general debug" },
+ { Nancy::kDebugActionRecord, "ActionRecord", "Action Record debug" },
+ { Nancy::kDebugScene, "Scene", "Scene debug" },
+ { Nancy::kDebugSound, "Sound", "Sound debug" },
DEBUG_CHANNEL_END
};
diff --git a/engines/nancy/detection.h b/engines/nancy/detection.h
index a90c7a9894a..dfc3427319a 100644
--- a/engines/nancy/detection.h
+++ b/engines/nancy/detection.h
@@ -49,7 +49,8 @@ struct NancyGameDescription {
enum NancyDebugChannels {
kDebugEngine = 1 << 0,
kDebugActionRecord = 1 << 1,
- kDebugScene = 1 << 2
+ kDebugScene = 1 << 2,
+ kDebugSound = 1 << 3
};
} // End of namespace Nancy
diff --git a/engines/nancy/sound.cpp b/engines/nancy/sound.cpp
index 65cdc5199f6..7a8766c16db 100644
--- a/engines/nancy/sound.cpp
+++ b/engines/nancy/sound.cpp
@@ -303,6 +303,7 @@ void SoundManager::loadSound(const SoundDescription &description, bool panning)
chan.stream = nullptr;
chan.name = description.name;
+ chan.playCommands = description.playCommands;
chan.numLoops = description.numLoops;
chan.volume = description.volume;
chan.panAnchorFrame = description.panAnchorFrame;
@@ -321,6 +322,10 @@ void SoundManager::playSound(uint16 channelID) {
Channel &chan = _channels[channelID];
chan.stream->seek(0);
+ if (chan.playCommands != 1) {
+ debugC(kDebugSound, "Unhandled playCommand type 0x%08x! Sound name: %s", chan.playCommands, chan.name.c_str());
+ }
+
_mixer->playStream( chan.type,
&chan.handle,
Audio::makeLoopingAudioStream(chan.stream, chan.numLoops),
@@ -511,7 +516,9 @@ void SoundManager::setRate(const Common::String &chunkName, uint32 rate) {
}
void SoundManager::stopAndUnloadSpecificSounds() {
- if (g_nancy->getGameType() == kGameTypeVampire && Nancy::State::Map::hasInstance()) {
+ Nancy::GameType gameType = g_nancy->getGameType();
+
+ if (gameType == kGameTypeVampire && Nancy::State::Map::hasInstance()) {
// Don't stop the map sound in certain scenes
uint nextScene = NancySceneState.getNextSceneInfo().sceneID;
if (nextScene != 0 && (nextScene < 15 || nextScene > 27)) {
diff --git a/engines/nancy/sound.h b/engines/nancy/sound.h
index d5da394260c..e062059fdd7 100644
--- a/engines/nancy/sound.h
+++ b/engines/nancy/sound.h
@@ -42,6 +42,28 @@ class NancyEngine;
class SoundManager {
public:
+ // Settings for playing a sound, used in nancy3 and up
+ // Older versions had a different, non-bitflag enum, but testing
+ // indicates those were never actually implemented
+ enum PlayCommandFlags {
+ kPlaySequential = 1 << 0, // Same as kPlaySequentialAndDie
+ kPlayPosition = 1 << 1, // Play at fixed position in 3D space
+ kPlayFrameAnchor = 1 << 2, // Position in 3D space is tied to a background frame, ignoring 3D coordinates
+
+ kPlayRandomTime = 1 << 4, // Play at random time intervals
+ kPlayRandomPosition = 1 << 5, // Play at random 3D positions
+
+ kPlayMoveLinear = 1 << 8, // Move sound position in 3D space. The movement is linear unless kPlayMoveCircular is also set
+ kPlayMoveCircular = 1 << 9, // Move sound position in a circular direction (see SoundRotationAxis)
+ kPlayRandomMove = 1 << 10 // Move along random vector. Does not combine with kPlayMoveCircular
+ };
+
+ enum SoundRotationAxis {
+ kRotateAroundX = 0,
+ kRotateAroundY = 1,
+ kRotateAroundZ = 2
+ };
+
SoundManager();
~SoundManager();
@@ -88,6 +110,7 @@ protected:
struct Channel {
Common::String name;
Audio::Mixer::SoundType type;
+ uint16 playCommands = 1;
uint16 numLoops = 0;
uint volume = 0;
uint16 panAnchorFrame = 0;
diff --git a/engines/nancy/state/scene.cpp b/engines/nancy/state/scene.cpp
index 24d036abaf5..19f3dd86a49 100644
--- a/engines/nancy/state/scene.cpp
+++ b/engines/nancy/state/scene.cpp
@@ -70,15 +70,19 @@ void Scene::SceneSummary::read(Common::SeekableReadStream &stream) {
sound.readScene(stream);
ser.syncAsUint16LE(panningType);
- ser.syncAsUint16LE(numberOfVideoFrames);
- ser.syncAsUint16LE(soundPanPerFrame, kGameTypeVampire, kGameTypeNancy2);
+ ser.syncAsUint16LE(numberOfVideoFrames, kGameTypeVampire, kGameTypeNancy2);
+ ser.syncAsUint16LE(soundPanPerFrame);
ser.syncAsUint16LE(totalViewAngle, kGameTypeVampire, kGameTypeNancy2);
- ser.syncAsUint16LE(horizontalScrollDelta, kGameTypeVampire, kGameTypeNancy2); // horizontalScrollDelta
- ser.syncAsUint16LE(verticalScrollDelta, kGameTypeVampire, kGameTypeNancy2); // verticalScrollDelta
+ ser.syncAsUint32LE(startX, kGameTypeNancy3);
+ ser.syncAsUint32LE(startY, kGameTypeNancy3);
+ ser.syncAsUint32LE(startZ, kGameTypeNancy3);
+ ser.syncAsUint16LE(horizontalScrollDelta);
+ ser.syncAsUint16LE(verticalScrollDelta);
ser.syncAsUint16LE(horizontalEdgeSize);
ser.syncAsUint16LE(verticalEdgeSize);
ser.syncAsUint16LE((uint32 &)slowMoveTimeDelta);
ser.syncAsUint16LE((uint32 &)fastMoveTimeDelta);
+ ser.skip(1); // CD required for scene
if (g_nancy->_bootSummary->overrideMovementTimeDeltas) {
slowMoveTimeDelta = g_nancy->_bootSummary->slowMovementTimeDelta;
diff --git a/engines/nancy/state/scene.h b/engines/nancy/state/scene.h
index 3dfedf8bd2e..8df4f77ce75 100644
--- a/engines/nancy/state/scene.h
+++ b/engines/nancy/state/scene.h
@@ -95,12 +95,12 @@ public:
struct SceneSummary { // SSUM
Common::String description;
Common::String videoFile;
- //
+
uint16 videoFormat;
Common::Array<Common::String> palettes;
Common::String audioFile;
SoundDescription sound;
- //
+
byte panningType;
uint16 numberOfVideoFrames;
uint16 soundPanPerFrame;
@@ -111,7 +111,11 @@ public:
uint16 verticalEdgeSize;
Time slowMoveTimeDelta;
Time fastMoveTimeDelta;
- //
+
+ // Sound start vectors, used in nancy3 and up
+ uint32 startX = 0;
+ uint32 startY = 0;
+ uint32 startZ = 0;
void read(Common::SeekableReadStream &stream);
};
Commit: 5fd55ecb60db74ebc2c6d80da9e47485b432e861
https://github.com/scummvm/scummvm/commit/5fd55ecb60db74ebc2c6d80da9e47485b432e861
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2023-08-10T14:28:49+03:00
Commit Message:
DEVTOOLS: Fix nancy4 Russian strings in nancy.dat
The strings in Russian were in the wrong order, which is
now fixed.
Changed paths:
devtools/create_nancy/nancy4_data.h
diff --git a/devtools/create_nancy/nancy4_data.h b/devtools/create_nancy/nancy4_data.h
index 00970c3e22d..2fa7dc0dfe5 100644
--- a/devtools/create_nancy/nancy4_data.h
+++ b/devtools/create_nancy/nancy4_data.h
@@ -389,76 +389,91 @@ const Common::Array<Common::Array<const char *>> _nancy4ConditionalDialogueTexts
"I'm trying to decide what to do next. Any thoughts?<h><n>" // NNN71
},
{ // Russian
+ // 00
"S batareej v moej komnate yto-to ne tak. Ona wipit i stuyit. V% mogete poyinit+ ee?<h><n>",
"V% mogete otremontirovat+ batare/ v moej komnate?<h><n>",
"Mister Ihan, v% pomnite o bataree v moej komnate? Moget, v% ee kak-nibud+ poyinite?<h><n>",
") b% ne xotela nadoedat+ vam s pros+bami... No, mister Ihan, yto s moej batareej?<h><n>",
"Professor Xoykis skazala, yto na ugin ona b% s=ela kuskus.<h><n>",
+ // 05
"Missis Xoykis izmenila svoe mnenie. Kagets&, u nee prosnuls& appetit k garen%m kurin%m nogkam. Ona zakazala p&t+des&t wtuk!<h><n>",
") exala na lifte, i on zastr&l megdu ;tagami! Mne priwlos+ v%birat+s& yerez l/k v potolke lifta, i & ele dostala do dveri sledu/qeho ;taga.<h><n>",
"V% proveli svoe detstvo v ;toj mestnosti?<h><n>",
"V% znali vladel+ca zamka Yzru Uikforda?<h><n>",
"Mister Ihan, mne vse izvestno. V starom nomere 'Dnevnoho obozreni&' & proyitala, yto v% v%rosli v ;tom zamke.<h><n>",
+ // 10
"V% ne znaete, b%lo li u Yzr% mesto, hde on l/bil spokojno porazm%wl&t+? Mesto, hde on yuvstvoval seb& v bezopasnosti.<h><n>",
") ne xoyu vas bespokoit+, no mne nugno najti sad Yzr% Uikforda. Ne znaete, hde on?<h><n>",
") p%ta/s+ popast+ v bawn/, no ne mohu projti mimo kolodca.<h><n>",
") prowla mimo kolodca, no ne mohu podn&t+s& po stupen+kam v bawn/.<h><n>",
"Po-moemu, na stene korolevskoj bawni est+ kaka&-to holovolomka. Vam tak ne kagets&?<h><n>",
+ // 15
"V% davno zdes+ rabotaete?<h><n>",
"Mister Ihan, & dolgna vam koe v yem priznat+s&. Krasna& p%l+ na moix botinkax - iz tunnel&, kotor%j vedet v korolevsku/ bawn/. Mne nugno b%lo srazu skazat+ vam ob ;tom, no & prosto ispuhalas+.<h><n>",
"V polu komnat% bawni est+ kakie-to v%emki. V% znaete, zayem oni?<h><n>",
- ") poznakomilas+ s l%gn%m instruktorom, Gakom Brun;. On nasto&qij francuz.<h><n>",
- ") poznakomilas+ s Lizoj Ostrum. Mila& genqina.<h><n>",
- ") xoyu uznat+, yto ukrali iz nomera professora Xoykis, no ona ne otkr%vaet dver+.<h><n>",
- "Kagd%j raz, kohda & razhovariva/ s Deksterom, on daet mne novoe zadanie!<h><n>",
- "Predstavl&ete, & vs/ noy+ sl%wala kakoj-to skrip i stuk.<h><n>",
- ") nawla sekretnu/ komnatu v biblioteke.<h><n>",
- "Pered smert+/ Uikford napisal Deksteru stixotvorenie.<h><n>",
- ") sluyajno otkr%la wkafyik Liz% i obnarugila tam neskol+ko fal+wiv%x pasportov.<h><n>",
- "Kohda & oynulas+, Dekster pozval men& i sprosil, otkuda na moix botinkax vz&las+ krasna& p%l+.<h><n>",
- "Duma/, vo vrem& s=emki professor Xoykis sdelala vagnoe otkr%tie.<h><n>",
- ") zdes+ poyitala knihu o Marii-Antuanette.<h><n>",
- "Nikohda ne dohadaetes+, yto mne skazala Liza!<h><n>",
- "Duma/, u Xoykis toge est+ medal+on Marii-Antuanett%! On kak-to sv&zan s ee rabotoj.<h><n>",
- "Tak stranno: v komnate Xoykis & nawla medal+on s holub%m kamnem iz wkafyika Gaka. No ona hovorit, yto ee medal+on b%l s zelen%m kamnem!<h><n>",
- ") videla sad Yzr% Uikforda. Uhadajte, yto & tam nawla?!<h><n>",
- "V wkafyike Gaka & nawla brow/ru o brilliantax, pis+mo eho nevest% i predupregdenie slugb% immihracii!<h><n>",
- "Zdes+ oyen+ mnoho hovor&t o brilliantax!<h><n>",
- "Podruhi, mne sroyno nugna podskazka!<h><n>",
- "Pomohite! ) ne zna/, yto delat+ dal+we.<h><n>",
"Jto v% znaete o Gake Brun;?<h><n>",
"So wkafyikami v%wla putanica, i & sluyajno otkr%la vaw.<h><n>",
+ // 20
"Rasskagite mne o gizni fotogurnalista. Navernoe, ona oyen+ interesna&.<h><n>",
"V% yasto ezdite v komandirovki v ;kzotiyeskie stran%?<h><n>",
"V% znaete, yto professor Xoykis napisala knihu o Marii-Antuanette?<h><n>",
"Kohda v% osmatrivali zamok, v% nawli kakie-nibud+ upominani& o sade?<h><n>",
") oyen+ xoyu popast+ v bawn/. Hde ob%yno dela/t sekretn%j xod v osobn&kax na Srednem Zapade?<h><n>",
+ // 25
"Rasskagite mne o korobkax, kotor%e v% delaete.<h><n>",
"Liza skazala, yto v% uyastvovali v Olimpijskix ihrax. I kak uspexi?<h><n>",
"V% znaete, yto sluyilos+ v biblioteke? Mne skazali, yto tam vse razhromleno.<h><n>",
"Navernoe, inohda vam odinoko. V% ne skuyaete po svoej sem+e?<h><n>",
"Jto v% znaete o zakr%toj bawne? Hovor&t, yto xoz&in zamka privez ee iz Francii.<h><n>",
+ // 30
"Deksteru nugna vawa pomoq+, ytob% razmorozit+ bol+woj paket kurin%x nogek.<h><n>",
"Dekster skazal, yto moj wkafyik nomer 310 i kod k nemu - 5-1-7. ) probovala eho otkr%t+, no u men& ne poluyilos+.<h><n>",
"Mne nugno otnesti professoru Xoykis ee botinki. Oni u vas?<h><n>",
"Jto znayit 'Lespuar a se ki werw'?<h><n>",
"V% mogete perevesti ;tu frazu: 'Le diamon de mizer dan mon gernal+'?<h><n>",
+ // 35
"Pogalujsta, pomohite mne s perevodom: 'L& sol/s+on se truv dedon'.<h><n>",
"Jto v% imeli v vidu, kohda skazali, yto Mari&-Antuanetta b%la ne pon&ta?<h><n>",
"Jto v% znaete o tiare, kotoru/ podarili Marii-Antuanette?<h><n>",
"Na vawem stole & videla pis+mo ot baroness% fon Xansel+dorf. Medal+on, kotor%j ona vam podarila, sluyajno, ne s holub%m kamnem?<h><n>",
"Jto v% dumaete o Lize Ostrum?<h><n>",
+ // 40
") nawla to, yto dolgno vas zainteresovat+. Duma/, ;to dnevnik Marii-Antuanett%!<h><n>",
+ ") poznakomilas+ s l%gn%m instruktorom, Gakom Brun;. On nasto&qij francuz.<h><n>",
+ ") poznakomilas+ s Lizoj Ostrum. Mila& genqina.<h><n>",
+ ") xoyu uznat+, yto ukrali iz nomera professora Xoykis, no ona ne otkr%vaet dver+.<h><n>",
+ "Kagd%j raz, kohda & razhovariva/ s Deksterom, on daet mne novoe zadanie!<h><n>",
+ // 45
+ "Predstavl&ete, & vs/ noy+ sl%wala kakoj-to skrip i stuk.<h><n>",
+ ") nawla sekretnu/ komnatu v biblioteke.<h><n>",
+ "Pered smert+/ Uikford napisal Deksteru stixotvorenie.<h><n>",
+ ") sluyajno otkr%la wkafyik Liz% i obnarugila tam neskol+ko fal+wiv%x pasportov.<h><n>",
+ "Kohda & oynulas+, Dekster pozval men& i sprosil, otkuda na moix botinkax vz&las+ krasna& p%l+.<h><n>",
+ // 50
+ "Duma/, vo vrem& s=emki professor Xoykis sdelala vagnoe otkr%tie.<h><n>",
+ ") zdes+ poyitala knihu o Marii-Antuanette.<h><n>",
+ "Nikohda ne dohadaetes+, yto mne skazala Liza!<h><n>",
+ "Duma/, u Xoykis toge est+ medal+on Marii-Antuanett%! On kak-to sv&zan s ee rabotoj.<h><n>",
+ "Tak stranno: v komnate Xoykis & nawla medal+on s holub%m kamnem iz wkafyika Gaka. No ona hovorit, yto ee medal+on b%l s zelen%m kamnem!<h><n>",
+ // 55
+ ") videla sad Yzr% Uikforda. Uhadajte, yto & tam nawla?!<h><n>",
+ "V wkafyike Gaka & nawla brow/ru o brilliantax, pis+mo eho nevest% i predupregdenie slugb% immihracii!<h><n>",
+ "Zdes+ oyen+ mnoho hovor&t o brilliantax!<h><n>",
+ "Podruhi, mne sroyno nugna podskazka!<h><n>",
+ "Pomohite! ) ne zna/, yto delat+ dal+we.<h><n>",
+ // 60
"Mne nugno popast+ v biblioteku, no dver+ zakr%ta, a druhoho vxoda & ne mohu najti.<h><n>",
"Vero&tno, v bawne zamka dergali Mari/-Antuanettu.<h><n>",
"T% hotov k oweloml&/qej novosti?<h><n>",
"Noy+/ & sl%wala kakie-to strann%e zvuki! ) ne zna/, kto ili yto ix proizvodit.<h><n>",
"Kak mne dobrat+s& do potajnoj dveri, esli ee zakr%vaet lift?<h><n>",
+ // 65
") raswifrovala simvol% na vitrage. Vot yto poluyilos+: 'V lilovoj roze kl/y k brilliantu korolev%'.<h><n>",
"Kakim obrazom k Yzre Uikfordu popal medal+on Marii-Antuanett% s krasn%m kamnem?<h><n>",
"Kakim obrazom k professoru Xoykis popal medal+on Marii-Antuanett% s zelen%m kamnem?<h><n>",
"Jto oznayaet 'nade/s+ na tex, kto iqet'?<h><n>",
"Jto oboznayaet fraza: 'brilliant stradanij v moem dnevnike'?<h><n>",
+ // 70
"Jto znayit 'otvet najdets& vnutri'?<h><n>",
") nakonec-to vstretila professora Xoykis v xolle. V tri yasa noyi! Okaz%vaets&, ona prepodaet istori/ Francii i piwet rabotu o Marii-Antuanette.<h><n>",
"Mne nugna podskazka.<h><n>",
Commit: 6763eba9ce2fd2e30b97572f9529185430f7d073
https://github.com/scummvm/scummvm/commit/6763eba9ce2fd2e30b97572f9529185430f7d073
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2023-08-10T14:28:50+03:00
Commit Message:
DEVTOOLS: Rework nancy.dat structure
More fields needed to be added to each nancy game's entry
in nancy.dat. Since this would've required bumping up the
file version anyway, the opportunity was taken to rework
its structure so future changes are smoother.
The new format is based around sections, each with a tag
denoting its contents, and an offset for easy skipping.
Conditions for dialogue, goodbyes, and hints have an
additional type field, with the newly-added difficulty type
being required by nancy5's data. Data for sound
channel types has also been added, since nancy4 and up
changed the structure of the channel data. And lastly, files
that were incorrectly using spaces for indentation have been
switched to tabs.
Changed paths:
devtools/create_nancy/create_nancy.cpp
devtools/create_nancy/file.cpp
devtools/create_nancy/file.h
devtools/create_nancy/nancy1_data.h
devtools/create_nancy/nancy2_data.h
devtools/create_nancy/nancy3_data.h
devtools/create_nancy/nancy4_data.h
devtools/create_nancy/tvd_data.h
devtools/create_nancy/types.h
diff --git a/devtools/create_nancy/create_nancy.cpp b/devtools/create_nancy/create_nancy.cpp
index 3ded917bdf4..e409c4ae4ca 100644
--- a/devtools/create_nancy/create_nancy.cpp
+++ b/devtools/create_nancy/create_nancy.cpp
@@ -26,8 +26,8 @@
#include "nancy3_data.h"
#include "nancy4_data.h"
-#define NANCYDAT_MAJOR_VERSION 0
-#define NANCYDAT_MINOR_VERSION 2
+#define NANCYDAT_MAJOR_VERSION 1
+#define NANCYDAT_MINOR_VERSION 0
#define NANCYDAT_NUM_GAMES 5
@@ -38,214 +38,179 @@
* 1 byte Minor version number
* 2 bytes Number of games (ignoring multiple languages)
* 4 bytes per game File offsets for every game's data
+ * Rest of file Game data
*
- * Game data order:
- * Game constants structure
- * Array with the order of game languages
- * Conditional dialogue (logic)
- * Goodbyes (logic)
- * Hints (logic)
- * Conditional dialogue (text)
- * Goodbyes (text)
- * Hints (text)
- * Telephone ringing text
- * Item names
- * Event flag names
+ * Game data contents:
+ * Various data sections, depending on title;
+ * e.g.: only nancy1 has a hint section, since later
+ * titles abandoned the dedicated hint system.
+ * Each section has the following structure:
+ * 4 bytes Offset to next section
+ * 4 bytes Section tag (generated using MKTAG macro)
+ * variable Section data
*
* Arrays in the game data are variable-size.
* All arrays are preceded by a 2-byte size property.
* 2D arrays with strings (e.g conditional dialogue) are also preceded
* by a list of 4-byte offsets (one per language).
- * Nonexistent data isn't skipped, but has size 0.
- * All offsets are absolute (relative to start of file)
+ * All offsets are absolute (relative to start of file).
+ * All data is little endian.
*
* Game order:
* The Vampire Diaries
* Nancy Drew: Secrets Can Kill
* Nancy Drew: Stay Tuned for Danger
- * Nancy Drew: Message in a Haunted Mansion
+ * Nancy Drew: Message in a Haunted Mansion
+ * Nancy Drew: Treasure in the Royal Tower
*/
+// Add the offset to the next tagged section before the section itself for easier navigation
+#define WRAPWITHOFFSET(x) beginOffset = output.pos();\
+ output.skip(4);\
+ x;\
+ endOffset = output.pos();\
+ output.seek(beginOffset);\
+ output.writeUint32(endOffset);\
+ output.seek(endOffset);
+
void NORETURN_PRE error(const char *s, ...) {
printf("%s\n", s);
exit(1);
}
-void writeGameData( File &output,
- const GameConstants &gameConstants,
- const Common::Array<Common::Language> &languages,
- const Common::Array<Common::Array<ConditionalDialogue>> *conditionalDialogue,
- const Common::Array<Goodbye> *goodbyes,
- const Common::Array<Common::Array<Hint>> *hints,
- const Common::Array<Common::Array<const char *>> *dialogueTexts,
- const Common::Array<Common::Array<const char *>> *goodbyeTexts,
- const Common::Array<Common::Array<const char *>> *hintTexts,
- const Common::Array<const char *> *ringingTexts,
- const Common::Array<const char *> &eventFlagNames) {
-
- // Write game constants
- output.writeUint16(gameConstants.numItems);
- output.writeUint16(gameConstants.numEventFlags);
- writeToFile(output, gameConstants.mapAccessSceneIDs);
- writeToFile(output, gameConstants.genericEventFlags);
- output.writeUint16(gameConstants.numNonItemCursors);
- output.writeUint16(gameConstants.numCurtainAnimationFrames);
- output.writeUint32(gameConstants.logoEndAfter);
-
- // Write languages
- writeToFile(output, languages);
-
- // Write conditional dialogue logic
- if (conditionalDialogue) {
- writeToFile(output, *conditionalDialogue);
- } else {
- output.writeUint16(0);
- }
-
- // Write Goodbyes logic
- if (goodbyes) {
- writeToFile(output, *goodbyes);
- } else {
- output.writeUint16(0);
- }
-
- // Write hints logic
- if (hints) {
- writeToFile(output, *hints);
- } else {
- output.writeUint16(0);
- }
-
- // Write conditional dialogue text
- if (dialogueTexts) {
- writeMultilangArray(output, *dialogueTexts);
- } else {
- output.writeUint16(0);
- }
-
- // Write goodbyes text
- if (goodbyeTexts) {
- writeMultilangArray(output, *goodbyeTexts);
- } else {
- output.writeUint16(0);
- }
-
- // Write hints text
- if (hintTexts) {
- writeMultilangArray(output, *hintTexts);
- } else {
- output.writeUint16(0);
- }
-
- // Write hints text
- if (ringingTexts) {
- writeToFile(output, *ringingTexts);
- } else {
- output.writeUint16(0);
- }
-
- // Write event flag names
- writeToFile(output, eventFlagNames);
+void writeConstants(File &output, const GameConstants &gameConstants) {
+ output.writeUint32(MKTAG('C', 'O', 'N', 'S'));
+ output.writeUint16(gameConstants.numItems);
+ output.writeUint16(gameConstants.numEventFlags);
+ writeToFile(output, gameConstants.mapAccessSceneIDs);
+ writeToFile(output, gameConstants.genericEventFlags);
+ output.writeUint16(gameConstants.numNonItemCursors);
+ output.writeUint16(gameConstants.numCurtainAnimationFrames);
+ output.writeUint32(gameConstants.logoEndAfter);
+}
+
+void writeSoundChannels(File &output, const SoundChannelInfo &soundChannelInfo) {
+ output.writeUint32(MKTAG('S', 'C', 'H', 'N'));
+ output.writeByte(soundChannelInfo.numChannels);
+ output.writeByte(soundChannelInfo.numSceneSpecificChannels);
+ writeToFile(output, soundChannelInfo.speechChannels);
+ writeToFile(output, soundChannelInfo.musicChannels);
+ writeToFile(output, soundChannelInfo.sfxChannels);
+}
+
+void writeLanguages(File &output, const Common::Array<Common::Language> &languages) {
+ output.writeUint32(MKTAG('L', 'A', 'N', 'G'));
+ writeToFile(output, languages);
+}
+
+void writeConditionalDialogue(File &output, const Common::Array<Common::Array<ConditionalDialogue>> &conditionalDialogue, const Common::Array<Common::Array<const char *>> &dialogueTexts) {
+ output.writeUint32(MKTAG('C', 'D', 'L', 'G'));
+ writeToFile(output, conditionalDialogue);
+ writeMultilangArray(output, dialogueTexts);
+}
+
+void writeGoodbyes(File &output, const Common::Array<Goodbye> &goodbyes, const Common::Array<Common::Array<const char *>> &goodbyeTexts) {
+ output.writeUint32(MKTAG('G', 'D', 'B', 'Y'));
+ writeToFile(output, goodbyes);
+ writeMultilangArray(output, goodbyeTexts);
+}
+
+void writeHints(File &output, const Common::Array<Common::Array<Hint>> &hints, const SceneChangeDescription &hintSceneChange, const Common::Array<Common::Array<const char *>> &hintTexts) {
+ output.writeUint32(MKTAG('H', 'I', 'N', 'T'));
+ writeToFile(output, hintSceneChange);
+ writeToFile(output, hints);
+ writeMultilangArray(output, hintTexts);
+}
+
+void writeRingingTexts(File &output, const Common::Array<const char *> &ringingTexts) {
+ output.writeUint32(MKTAG('R', 'I', 'N', 'G'));
+ writeToFile(output, ringingTexts);
+}
+
+void writeEventFlagNames(File &output, const Common::Array<const char *> &eventFlagNames) {
+ output.writeUint32(MKTAG('E', 'F', 'L', 'G'));
+ writeToFile(output, eventFlagNames);
}
int main(int argc, char *argv[]) {
- File output;
+ File output;
if (!output.open("nancy.dat", kFileWriteMode)) {
error("Unable to open nancy.dat");
}
- Common::Array<uint32> gameOffsets;
-
- // Write header
- output.writeByte('N');
- output.writeByte('N');
- output.writeByte('C');
- output.writeByte('Y');
- output.writeByte(NANCYDAT_MAJOR_VERSION);
- output.writeByte(NANCYDAT_MINOR_VERSION);
- output.writeUint16(NANCYDAT_NUM_GAMES);
-
- // Skip game offsets, they'll be written at the end
- uint32 offsetsOffset = output.pos();
- output.skip(NANCYDAT_NUM_GAMES * 4);
-
- // The Vampire Diaries data
- gameOffsets.push_back(output.pos());
- writeGameData( output,
- _tvdConstants,
- _tvdLanguagesOrder,
- &_tvdConditionalDialogue,
- &_tvdGoodbyes,
- nullptr,
- &_tvdConditionalDialogueTexts,
- &_tvdGoodbyeTexts,
- nullptr,
- nullptr,
- _tvdEventFlagNames);
-
- // Nancy Drew: Secrets Can Kill data
- gameOffsets.push_back(output.pos());
- writeGameData( output,
- _nancy1Constants,
- _nancy1LanguagesOrder,
- &_nancy1ConditionalDialogue,
- &_nancy1Goodbyes,
- &_nancy1Hints,
- &_nancy1ConditionalDialogueTexts,
- &_nancy1GoodbyeTexts,
- &_nancy1HintTexts,
- &_nancy1TelephoneRinging,
- _nancy1EventFlagNames);
+ Common::Array<uint32> gameOffsets;
+ uint32 beginOffset, endOffset;
+
+ // Write header
+ output.writeByte('N');
+ output.writeByte('N');
+ output.writeByte('C');
+ output.writeByte('Y');
+ output.writeByte(NANCYDAT_MAJOR_VERSION);
+ output.writeByte(NANCYDAT_MINOR_VERSION);
+ output.writeUint16(NANCYDAT_NUM_GAMES);
+
+ // Skip game offsets, they'll be written at the end
+ uint32 offsetsOffset = output.pos();
+ output.skip(NANCYDAT_NUM_GAMES * 4);
+
+ // The Vampire Diaries data
+ gameOffsets.push_back(output.pos());
+ WRAPWITHOFFSET(writeConstants(output, _tvdConstants))
+ WRAPWITHOFFSET(writeSoundChannels(output, _tvdToNancy2SoundChannelInfo))
+ WRAPWITHOFFSET(writeLanguages(output, _tvdLanguagesOrder))
+ WRAPWITHOFFSET(writeConditionalDialogue(output, _tvdConditionalDialogue, _tvdConditionalDialogueTexts))
+ WRAPWITHOFFSET(writeGoodbyes(output, _tvdGoodbyes, _tvdGoodbyeTexts))
+ WRAPWITHOFFSET(writeEventFlagNames(output, _tvdEventFlagNames))
+
+ // Nancy Drew: Secrets Can Kill data
+ gameOffsets.push_back(output.pos());
+ WRAPWITHOFFSET(writeConstants(output, _nancy1Constants))
+ WRAPWITHOFFSET(writeSoundChannels(output, _tvdToNancy2SoundChannelInfo))
+ WRAPWITHOFFSET(writeLanguages(output, _nancy1LanguagesOrder))
+ WRAPWITHOFFSET(writeConditionalDialogue(output, _nancy1ConditionalDialogue, _nancy1ConditionalDialogueTexts))
+ WRAPWITHOFFSET(writeGoodbyes(output, _nancy1Goodbyes, _nancy1GoodbyeTexts))
+ WRAPWITHOFFSET(writeHints(output, _nancy1Hints, _nancy1HintSceneChange, _nancy1HintTexts))
+ WRAPWITHOFFSET(writeRingingTexts(output, _nancy1TelephoneRinging))
+ WRAPWITHOFFSET(writeEventFlagNames(output, _nancy1EventFlagNames))
// Nancy Drew: Stay Tuned for Danger data
- gameOffsets.push_back(output.pos());
- writeGameData( output,
- _nancy2Constants,
- _nancy2LanguagesOrder,
- &_nancy2ConditionalDialogue,
- &_nancy2Goodbyes,
- nullptr,
- &_nancy2ConditionalDialogueTexts,
- &_nancy2GoodbyeTexts,
- nullptr,
- &_nancy2TelephoneRinging,
- _nancy2EventFlagNames);
+ gameOffsets.push_back(output.pos());
+ WRAPWITHOFFSET(writeConstants(output, _nancy2Constants))
+ WRAPWITHOFFSET(writeSoundChannels(output, _tvdToNancy2SoundChannelInfo))
+ WRAPWITHOFFSET(writeLanguages(output, _nancy2LanguagesOrder))
+ WRAPWITHOFFSET(writeConditionalDialogue(output, _nancy2ConditionalDialogue, _nancy2ConditionalDialogueTexts))
+ WRAPWITHOFFSET(writeGoodbyes(output, _nancy2Goodbyes, _nancy2GoodbyeTexts))
+ WRAPWITHOFFSET(writeRingingTexts(output, _nancy2TelephoneRinging))
+ WRAPWITHOFFSET(writeEventFlagNames(output, _nancy2EventFlagNames))
// Nancy Drew: Message in a Haunted Mansion data
- gameOffsets.push_back(output.pos());
- writeGameData( output,
- _nancy3Constants,
- _nancy3LanguagesOrder,
- &_nancy3ConditionalDialogue,
- &_nancy3Goodbyes,
- nullptr,
- &_nancy3ConditionalDialogueTexts,
- &_nancy3GoodbyeTexts,
- nullptr,
- &_nancy3TelephoneRinging,
- _nancy3EventFlagNames);
+ gameOffsets.push_back(output.pos());
+ WRAPWITHOFFSET(writeConstants(output, _nancy3Constants))
+ WRAPWITHOFFSET(writeSoundChannels(output, _nancy3to5SoundChannelInfo))
+ WRAPWITHOFFSET(writeLanguages(output, _nancy3LanguagesOrder))
+ WRAPWITHOFFSET(writeConditionalDialogue(output, _nancy3ConditionalDialogue, _nancy3ConditionalDialogueTexts))
+ WRAPWITHOFFSET(writeGoodbyes(output, _nancy3Goodbyes, _nancy3GoodbyeTexts))
+ WRAPWITHOFFSET(writeRingingTexts(output, _nancy3TelephoneRinging))
+ WRAPWITHOFFSET(writeEventFlagNames(output, _nancy3EventFlagNames))
// Nancy Drew: Treasure in the Royal Tower data
- gameOffsets.push_back(output.pos());
- writeGameData( output,
- _nancy4Constants,
- _nancy4LanguagesOrder,
- &_nancy4ConditionalDialogue,
- &_nancy4Goodbyes,
- nullptr,
- &_nancy4ConditionalDialogueTexts,
- &_nancy4GoodbyeTexts,
- nullptr,
- &_nancy4TelephoneRinging,
- _nancy4EventFlagNames);
-
- // Write the offsets for each game in the header
- output.seek(offsetsOffset);
- for (uint i = 0; i < gameOffsets.size(); ++i) {
- output.writeUint32(gameOffsets[i]);
- }
-
- output.close();
-
- return 0;
+ gameOffsets.push_back(output.pos());
+ WRAPWITHOFFSET(writeConstants(output, _nancy4Constants))
+ WRAPWITHOFFSET(writeSoundChannels(output, _nancy3to5SoundChannelInfo))
+ WRAPWITHOFFSET(writeLanguages(output, _nancy4LanguagesOrder))
+ WRAPWITHOFFSET(writeConditionalDialogue(output, _nancy4ConditionalDialogue, _nancy4ConditionalDialogueTexts))
+ WRAPWITHOFFSET(writeGoodbyes(output, _nancy4Goodbyes, _nancy4GoodbyeTexts))
+ WRAPWITHOFFSET(writeRingingTexts(output, _nancy4TelephoneRinging))
+ WRAPWITHOFFSET(writeEventFlagNames(output, _nancy4EventFlagNames))
+
+ // Write the offsets for each game in the header
+ output.seek(offsetsOffset);
+ for (uint i = 0; i < gameOffsets.size(); ++i) {
+ output.writeUint32(gameOffsets[i]);
+ }
+
+ output.close();
+
+ return 0;
}
diff --git a/devtools/create_nancy/file.cpp b/devtools/create_nancy/file.cpp
index c027b6099db..bb22a74f59d 100644
--- a/devtools/create_nancy/file.cpp
+++ b/devtools/create_nancy/file.cpp
@@ -24,220 +24,218 @@
#include "common/endian.h"
bool File::open(const char *filename, AccessMode mode) {
- _memPtr = nullptr;
- _f = fopen(filename, (mode == kFileReadMode) ? "rb" : "wb+");
- return (_f != NULL);
+ _memPtr = nullptr;
+ _f = fopen(filename, (mode == kFileReadMode) ? "rb" : "wb+");
+ return (_f != NULL);
}
bool File::open(const byte *data, uint size) {
- close();
- _f = nullptr;
- _memPtr = data;
- _size = size;
- return true;
+ close();
+ _f = nullptr;
+ _memPtr = data;
+ _size = size;
+ return true;
}
void File::close() {
- if (_f) {
- fclose(_f);
- }
+ if (_f) {
+ fclose(_f);
+ }
- _f = nullptr;
- delete[] _memPtr;
- _memPtr = nullptr;
+ _f = nullptr;
+ delete[] _memPtr;
+ _memPtr = nullptr;
}
uint File::pos() const {
- if (_f) {
- return ftell(_f);
- } else {
- return _offset;
- }
+ if (_f) {
+ return ftell(_f);
+ } else {
+ return _offset;
+ }
}
uint File::size() const {
- if (_f) {
- uint currentPos = pos();
- fseek(_f, 0, SEEK_END);
- uint result = pos();
- fseek(_f, currentPos, SEEK_SET);
- return result;
- } else if (_memPtr) {
- return _size;
- } else {
- return 0;
- }
+ if (_f) {
+ uint currentPos = pos();
+ fseek(_f, 0, SEEK_END);
+ uint result = pos();
+ fseek(_f, currentPos, SEEK_SET);
+ return result;
+ } else if (_memPtr) {
+ return _size;
+ } else {
+ return 0;
+ }
}
bool File::eof() const {
- if (_f) {
- return feof(_f) != 0;
- } else if (_memPtr) {
- return _offset >= _size;
- }
+ if (_f) {
+ return feof(_f) != 0;
+ } else if (_memPtr) {
+ return _offset >= _size;
+ }
- return false;
+ return false;
}
int File::seek(int offset, int whence) {
- if (_f) {
- return fseek(_f, offset, whence);
- }
-
- switch (whence) {
- case SEEK_SET:
- _offset = offset;
- break;
- case SEEK_CUR:
- _offset += offset;
- break;
- case SEEK_END:
- _offset = _size + offset;
- break;
- default:
- break;
- }
-
- return _offset;
+ if (_f) {
+ return fseek(_f, offset, whence);
+ }
+
+ switch (whence) {
+ case SEEK_SET:
+ _offset = offset;
+ break;
+ case SEEK_CUR:
+ _offset += offset;
+ break;
+ case SEEK_END:
+ _offset = _size + offset;
+ break;
+ default:
+ break;
+ }
+
+ return _offset;
}
void File::skip(int offset) {
- if (_f) {
- fseek(_f, offset, SEEK_CUR);
- } else {
- _offset += offset;
- }
+ if (_f) {
+ fseek(_f, offset, SEEK_CUR);
+ } else {
+ _offset += offset;
+ }
}
long File::read(void *buffer, size_t len) {
- if (_f) {
- return fread(buffer, 1, len, _f);
- }
+ if (_f) {
+ return fread(buffer, 1, len, _f);
+ }
- uint bytesToRead = CLIP(len, (size_t)0, _size - _offset);
- memcpy(buffer, &_memPtr[_offset], bytesToRead);
- _offset += bytesToRead;
- return bytesToRead;
+ uint bytesToRead = CLIP(len, (size_t)0, _size - _offset);
+ memcpy(buffer, &_memPtr[_offset], bytesToRead);
+ _offset += bytesToRead;
+ return bytesToRead;
}
byte File::readByte() {
- byte v;
- read(&v, sizeof(byte));
- return v;
+ byte v;
+ read(&v, sizeof(byte));
+ return v;
}
void File::write(const void *buffer, size_t len) {
- assert(_f);
- fwrite(buffer, 1, len, _f);
+ assert(_f);
+ fwrite(buffer, 1, len, _f);
}
void File::writeByte(byte v) {
- write(&v, sizeof(byte));
+ write(&v, sizeof(byte));
}
void File::writeByte(byte v, int len) {
- byte *b = new byte[len];
- memset(b, v, len);
- write(b, len);
- delete[] b;
+ byte *b = new byte[len];
+ memset(b, v, len);
+ write(b, len);
+ delete[] b;
}
void File::writeUint16(uint16 v) {
- uint16 vTemp = TO_LE_16(v);
- write(&vTemp, sizeof(uint16));
+ uint16 vTemp = TO_LE_16(v);
+ write(&vTemp, sizeof(uint16));
}
void File::writeUint32(uint v) {
- uint vTemp = TO_LE_32(v);
- write(&vTemp, sizeof(uint));
+ uint vTemp = TO_LE_32(v);
+ write(&vTemp, sizeof(uint));
}
void File::writeString(const char *msg) {
- if (!msg) {
- writeByte(0);
- } else {
- do {
- writeByte(*msg);
- } while (*msg++);
- }
+ if (!msg) {
+ writeByte(0);
+ } else {
+ do {
+ writeByte(*msg);
+ } while (*msg++);
+ }
}
template<>
void writeToFile(File &file, const Common::Array<const char *> &obj) {
- file.writeUint16(obj.size());
- for (uint i = 0; i < obj.size(); ++i) {
- file.writeString(obj[i]);
- }
+ file.writeUint16(obj.size());
+ for (uint i = 0; i < obj.size(); ++i) {
+ file.writeString(obj[i]);
+ }
}
template<>
void writeToFile(File &file, const EventFlagDescription &obj) {
- file.writeUint16((uint)obj.label);
- file.writeByte(obj.flag);
+ file.writeByte(obj.type);
+ file.writeUint16((uint)obj.label);
+ file.writeByte(obj.flag);
}
template<>
void writeToFile(File &file, const SceneChangeDescription &obj) {
- file.writeUint16(obj.sceneID);
- file.writeUint16(obj.frameID);
- file.writeUint16(obj.verticalOffset);
- file.writeUint16(obj.doNotStartSound);
+ file.writeUint16(obj.sceneID);
+ file.writeUint16(obj.frameID);
+ file.writeUint16(obj.verticalOffset);
+ file.writeUint16(obj.doNotStartSound);
}
template<>
void writeToFile(File &file, const ConditionalDialogue &obj) {
- file.writeByte(obj.textID);
- file.writeUint16(obj.sceneID);
- file.writeString(obj.soundID);
- writeToFile(file, obj.flagConditions);
- writeToFile(file, obj.inventoryConditions);
+ file.writeByte(obj.textID);
+ file.writeUint16(obj.sceneID);
+ file.writeString(obj.soundID);
+ writeToFile(file, obj.conditions);
}
template<>
void writeToFile(File &file, const GoodbyeSceneChange &obj) {
- writeToFile(file, obj.sceneIDs);
- writeToFile(file, obj.flagConditions);
- writeToFile(file, obj.flagToSet);
+ writeToFile(file, obj.sceneIDs);
+ writeToFile(file, obj.flagConditions);
+ writeToFile(file, obj.flagToSet);
}
template<>
void writeToFile(File &file, const Goodbye &obj) {
- file.writeString(obj.soundID);
- writeToFile(file, obj.sceneChanges);
+ file.writeString(obj.soundID);
+ writeToFile(file, obj.sceneChanges);
}
template<>
void writeToFile(File &file, const Hint &obj) {
- file.writeByte(obj.textID);
- file.writeUint16((uint16)obj.hintWeight);
- writeToFile(file, obj.sceneChange);
- // always three
- file.writeString(obj.soundIDs[0]);
- file.writeString(obj.soundIDs[1]);
- file.writeString(obj.soundIDs[2]);
- writeToFile(file, obj.flagConditions);
- writeToFile(file, obj.inventoryConditions);
+ file.writeByte(obj.textID);
+ file.writeUint16((uint16)obj.hintWeight);
+ // always three
+ file.writeString(obj.soundIDs[0]);
+ file.writeString(obj.soundIDs[1]);
+ file.writeString(obj.soundIDs[2]);
+ writeToFile(file, obj.conditions);
}
void writeMultilangArray(File &file, const Common::Array<Common::Array<const char *>> &array) {
- Common::Array<uint32> offsets;
- uint32 offsetsOffset = file.pos();
+ Common::Array<uint32> offsets;
+ uint32 offsetsOffset = file.pos();
- file.skip(array.size() * 4 + 4 + 2);
+ file.skip(array.size() * 4 + 4 + 2);
- for (uint i = 0; i < array.size(); ++i) {
- offsets.push_back(file.pos());
- writeToFile(file, array[i]);
- }
+ for (uint i = 0; i < array.size(); ++i) {
+ offsets.push_back(file.pos());
+ writeToFile(file, array[i]);
+ }
- uint end = file.pos();
- file.seek(offsetsOffset);
+ uint end = file.pos();
+ file.seek(offsetsOffset);
- file.writeUint16(array.size());
- file.writeUint32(end);
- for (uint i = 0; i < array.size(); ++i) {
- file.writeUint32(offsets[i]);
- }
+ file.writeUint16(array.size());
+ file.writeUint32(end);
+ for (uint i = 0; i < array.size(); ++i) {
+ file.writeUint32(offsets[i]);
+ }
- file.seek(end);
+ file.seek(end);
}
diff --git a/devtools/create_nancy/file.h b/devtools/create_nancy/file.h
index 28a4dbe5b4b..6b16f7b702c 100644
--- a/devtools/create_nancy/file.h
+++ b/devtools/create_nancy/file.h
@@ -29,6 +29,8 @@
#include "types.h"
+#define MKTAG(a0,a1,a2,a3) ((uint32)((a3) | ((a2) << 8) | ((a1) << 16) | ((a0) << 24)))
+
enum AccessMode {
kFileReadMode = 1,
kFileWriteMode = 2
@@ -48,9 +50,9 @@ public:
void close();
- uint pos() const;
- uint size() const;
- bool eof() const;
+ uint pos() const;
+ uint size() const;
+ bool eof() const;
int seek(int offset, int whence = SEEK_SET);
void skip(int offset);
@@ -67,15 +69,15 @@ public:
template <class T>
void writeToFile(File &file, T &obj) {
- file.write(&obj, sizeof(obj));
+ file.write(&obj, sizeof(obj));
}
template<class T>
void writeToFile(File &file, const Common::Array<T> &obj) {
- file.writeUint16(obj.size());
- for (uint i = 0; i < obj.size(); ++i) {
- writeToFile(file, obj[i]);
- }
+ file.writeUint16(obj.size());
+ for (uint i = 0; i < obj.size(); ++i) {
+ writeToFile(file, obj[i]);
+ }
}
template<>
diff --git a/devtools/create_nancy/nancy1_data.h b/devtools/create_nancy/nancy1_data.h
index affcbe7b954..b8f9f187bfc 100644
--- a/devtools/create_nancy/nancy1_data.h
+++ b/devtools/create_nancy/nancy1_data.h
@@ -25,798 +25,728 @@
#include "types.h"
const GameConstants _nancy1Constants = {
- 11,
- 168,
- { 9, 10, 11, 666, 888, 1200, 1250, 1666 },
- { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84 },
- 12,
- 7,
- 7000
+ 11,
+ 168,
+ { 9, 10, 11, 666, 888, 1200, 1250, 1666 },
+ { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84 },
+ 12,
+ 7,
+ 7000
};
const Common::Array<Common::Language> _nancy1LanguagesOrder = {
- Common::Language::EN_ANY,
- Common::Language::RU_RUS
+ Common::Language::EN_ANY,
+ Common::Language::RU_RUS
};
const Common::Array<Common::Array<ConditionalDialogue>> _nancy1ConditionalDialogue = {
-{ // Daryl, 18 responses
- { 17, 124, "DIC1",
- { { 0x1D, kTrue }, { 0x39, kFalse } },
- { } },
- { 16, 127, "DIC2",
- { { 0x13, kTrue }, { 0x37, kFalse } },
- { } },
- { 15, 129, "DIC3",
- { { 0xB, kTrue }, { 0x38, kFalse } },
- { } },
- { 14, 131, "DIC4",
- { { 0, kTrue }, { 1, kFalse }, { 0x6B, kFalse } },
- { } },
- { 13, 132, "DIC5",
- { { 0x64, kTrue }, { 0x1E, kFalse }, { 0x14, kFalse }, { 0xC, kFalse }, { 0x6C, kFalse } },
- { } },
- { 12, 134, "DIC6",
- { { 0x6D, kFalse }, { 0x6, kTrue }, { 0x8, kTrue }, { 0x5E, kTrue }, { 0x17, kTrue }, { 0x24, kTrue }, { 0x9, kTrue } },
- { } },
- { 11, 139, "DIC7",
- { { 0x6E, kFalse }, { 0x24, kTrue }, { 0x9, kTrue }, { 0x5E, kFalse }, { 0x8, kFalse } },
- { } },
- { 10, 141, "DIC8",
- { { 0x6F, kFalse }, { 0x5E, kTrue }, { 0x24, kTrue }, { 0x9, kTrue }, { 0x8, kFalse } },
- { } },
- { 9, 143, "DIC9",
- { { 0x70, kFalse }, { 0x24, kTrue }, { 0x9, kTrue }, { 0x6, kTrue }, { 0x8, kTrue }, { 0x5E, kFalse } },
- { } },
- { 8, 144, "DIC10",
- { { 0x71, kFalse }, { 0x5E, kTrue }, { 0x24, kFalse }, { 0x8, kFalse } },
- { } },
- { 7, 145, "DIC10",
- { { 0x72, kFalse }, { 0x5E, kTrue }, { 0x8, kTrue }, { 0x6, kTrue }, { 0x24, kFalse } },
- { } },
- { 6, 146, "DIC12",
- { { 0x73, kFalse }, { 0x8, kTrue }, { 0x6, kTrue }, { 0x5E, kFalse }, { 0x24, kFalse } },
- { } },
- { 5, 150, "DIC13",
- { { 0x74, kFalse }, { 0x1D, kTrue }, { 0x13, kTrue }, { 0xB, kTrue }, { 0x5E, kFalse }, { 0x24, kFalse }, { 0x8, kFalse } },
- { } },
- { 4, 151, "DIC14",
- { { 0x27, kFalse }, { 0x5, kTrue } },
- { } },
- { 3, 156, "DIC15",
- { { 0x28, kTrue }, { 0x75, kFalse } },
- { } },
- { 2, 147, "DIC16",
- { { 0xC, kFalse }, { 0x6, kTrue }, { 0x76, kFalse } },
- { } },
- { 1, 148, "DIC17",
- { { 0x14, kFalse }, { 0x4, kTrue }, { 0x77, kFalse } },
- { } },
- { 0, 149, "DIC18",
- { { 0x1E, kFalse }, { 0x63, kTrue }, { 0x78, kFalse } },
- { } }
+{ // Daryl, 18 responses
+ { 17, 124, "DIC1",
+ { { kEv, 0x1D, kTrue }, { kEv, 0x39, kFalse } } },
+ { 16, 127, "DIC2",
+ { { kEv, 0x13, kTrue }, { kEv, 0x37, kFalse } } },
+ { 15, 129, "DIC3",
+ { { kEv, 0xB, kTrue }, { kEv, 0x38, kFalse } } },
+ { 14, 131, "DIC4",
+ { { kEv, 0x0, kTrue }, { kEv, 0x1, kFalse }, { kEv, 0x6B, kFalse } } },
+ { 13, 132, "DIC5",
+ { { kEv, 0x64, kTrue }, { kEv, 0x1E, kFalse }, { kEv, 0x14, kFalse }, { kEv, 0xC, kFalse }, { kEv, 0x6C, kFalse } } },
+ { 12, 134, "DIC6",
+ { { kEv, 0x6D, kFalse }, { kEv, 0x6, kTrue }, { kEv, 0x8, kTrue }, { kEv, 0x5E, kTrue }, { kEv, 0x17, kTrue }, { kEv, 0x24, kTrue }, { kEv, 0x9, kTrue } } },
+ { 11, 139, "DIC7",
+ { { kEv, 0x6E, kFalse }, { kEv, 0x24, kTrue }, { kEv, 0x9, kTrue }, { kEv, 0x5E, kFalse }, { kEv, 0x8, kFalse } } },
+ { 10, 141, "DIC8",
+ { { kEv, 0x6F, kFalse }, { kEv, 0x5E, kTrue }, { kEv, 0x24, kTrue }, { kEv, 0x9, kTrue }, { kEv, 0x8, kFalse } } },
+ { 9, 143, "DIC9",
+ { { kEv, 0x70, kFalse }, { kEv, 0x24, kTrue }, { kEv, 0x9, kTrue }, { kEv, 0x6, kTrue }, { kEv, 0x8, kTrue }, { kEv, 0x5E, kFalse } } },
+ { 8, 144, "DIC10",
+ { { kEv, 0x71, kFalse }, { kEv, 0x5E, kTrue }, { kEv, 0x24, kFalse }, { kEv, 0x8, kFalse } } },
+ { 7, 145, "DIC10",
+ { { kEv, 0x72, kFalse }, { kEv, 0x5E, kTrue }, { kEv, 0x8, kTrue }, { kEv, 0x6, kTrue }, { kEv, 0x24, kFalse } } },
+ { 6, 146, "DIC12",
+ { { kEv, 0x73, kFalse }, { kEv, 0x8, kTrue }, { kEv, 0x6, kTrue }, { kEv, 0x5E, kFalse }, { kEv, 0x24, kFalse } } },
+ { 5, 150, "DIC13",
+ { { kEv, 0x74, kFalse }, { kEv, 0x1D, kTrue }, { kEv, 0x13, kTrue }, { kEv, 0xB, kTrue }, { kEv, 0x5E, kFalse }, { kEv, 0x24, kFalse }, { kEv, 0x8, kFalse } } },
+ { 4, 151, "DIC14",
+ { { kEv, 0x27, kFalse }, { kEv, 0x5, kTrue } } },
+ { 3, 156, "DIC15",
+ { { kEv, 0x28, kTrue }, { kEv, 0x75, kFalse } } },
+ { 2, 147, "DIC16",
+ { { kEv, 0xC, kFalse }, { kEv, 0x6, kTrue }, { kEv, 0x76, kFalse } } },
+ { 1, 148, "DIC17",
+ { { kEv, 0x14, kFalse }, { kEv, 0x4, kTrue }, { kEv, 0x77, kFalse } } },
+ { 0, 149, "DIC18",
+ { { kEv, 0x1E, kFalse }, { kEv, 0x63, kTrue }, { kEv, 0x78, kFalse } } }
},
-{ // Connie, 10 responses
- { 26, 233, "CIC1",
- { { 0x1D, kTrue }, { 0x18, kFalse } },
- { } },
- { 25, 234, "CIC2",
- { { 0x1F, kTrue }, { 0x19, kFalse } },
- { } },
- { 24, 235, "CIC3",
- { { 0xB, kTrue }, { 0x1A, kFalse } },
- { } },
- { 23, 236, "CIC4",
- { { 0x26, kTrue }, { 0x1C, kFalse } },
- { } },
- { 22, 237, "CIC5",
- { { 0, kTrue }, { 1, kFalse }, { 0x79, kFalse } },
- { } },
- { 21, 238, "CIC6",
- { { 2, kTrue }, { 3, kTrue }, { 0x17, kFalse } },
- { } },
- { 13, 239, "DIC5",
- { { 0x64, kTrue }, { 0x16, kFalse } },
- { } },
- { 20, 240, "CIC8",
- { { 0x5, kTrue }, { 0x14, kFalse } },
- { } },
- { 19, 245, "CIC9",
- { { 0x28, kTrue } },
- { } },
- { 18, 231, "CIC10",
- { { 0xD, kTrue }, { 0x5E, kFalse } },
- { } }
+{ // Connie, 10 responses
+ { 26, 233, "CIC1",
+ { { kEv, 0x1D, kTrue }, { kEv, 0x18, kFalse } } },
+ { 25, 234, "CIC2",
+ { { kEv, 0x1F, kTrue }, { kEv, 0x19, kFalse } } },
+ { 24, 235, "CIC3",
+ { { kEv, 0xB, kTrue }, { kEv, 0x1A, kFalse } } },
+ { 23, 236, "CIC4",
+ { { kEv, 0x26, kTrue }, { kEv, 0x1C, kFalse } } },
+ { 22, 237, "CIC5",
+ { { kEv, 0, kTrue }, { kEv, 1, kFalse }, { kEv, 0x79, kFalse } } },
+ { 21, 238, "CIC6",
+ { { kEv, 2, kTrue }, { kEv, 3, kTrue }, { kEv, 0x17, kFalse } } },
+ { 13, 239, "DIC5",
+ { { kEv, 0x64, kTrue }, { kEv, 0x16, kFalse } } },
+ { 20, 240, "CIC8",
+ { { kEv, 0x5, kTrue }, { kEv, 0x14, kFalse } } },
+ { 19, 245, "CIC9",
+ { { kEv, 0x28, kTrue } } },
+ { 18, 231, "CIC10",
+ { { kEv, 0xD, kTrue }, { kEv, 0x5E, kFalse } } }
},
-{ // Hal, 9 responses
- { 33, 435, "hic1",
- { { 0x1D, kTrue }, { 0x11, kFalse } },
- { } },
- { 16, 437, "DIC2",
- { { 0x13, kTrue }, { 0xE, kFalse } },
- { } },
- { 32, 438, "hic3",
- { { 0x1B, kTrue }, { 0xF, kFalse } },
- { } },
- { 31, 439, "hic4",
- { { 0x26, kTrue }, { 0x10, kFalse } },
- { } },
- { 30, 441, "hic5",
- { { 0, kTrue }, { 1, kFalse }, { 0x68, kFalse } },
- { } },
- { 29, 442, "hic6",
- { { 0, kTrue }, { 1, kFalse }, { 0x20, kTrue }, { 0x69, kFalse } },
- { } },
- { 13, 443, "DIC5",
- { { 0x6A, kFalse }, { 0x64, kTrue }, { 0x5, kFalse } },
- { } },
- { 28, 444, "hic8",
- { { 0x8, kTrue }, { 0x6, kTrue }, { 0xC, kFalse } },
- { } },
- { 27, 446, "hic9",
- { { 0x28, kTrue } },
- { } },
+{ // Hal, 9 responses
+ { 33, 435, "hic1",
+ { { kEv, 0x1D, kTrue }, { kEv, 0x11, kFalse } } },
+ { 16, 437, "DIC2",
+ { { kEv, 0x13, kTrue }, { kEv, 0xE, kFalse } } },
+ { 32, 438, "hic3",
+ { { kEv, 0x1B, kTrue }, { kEv, 0xF, kFalse } } },
+ { 31, 439, "hic4",
+ { { kEv, 0x26, kTrue }, { kEv, 0x10, kFalse } } },
+ { 30, 441, "hic5",
+ { { kEv, 0, kTrue }, { kEv, 1, kFalse }, { kEv, 0x68, kFalse } } },
+ { 29, 442, "hic6",
+ { { kEv, 0, kTrue }, { kEv, 1, kFalse }, { kEv, 0x20, kTrue }, { kEv, 0x69, kFalse } } },
+ { 13, 443, "DIC5",
+ { { kEv, 0x6A, kFalse }, { kEv, 0x64, kTrue }, { kEv, 0x5, kFalse } } },
+ { 28, 444, "hic8",
+ { { kEv, 0x8, kTrue }, { kEv, 0x6, kTrue }, { kEv, 0xC, kFalse } } },
+ { 27, 446, "hic9",
+ { { kEv, 0x28, kTrue } } },
},
-{ // Hulk, 9 responses
- { 39, 333, "hdic1",
- { { 0x13, kTrue }, { 0x3A, kFalse } },
- { } },
- { 24, 336, "CIC3",
- { { 0xB, kTrue }, { 0x25, kFalse } },
- { } },
- { 38, 339, "hdic3",
- { { 0x12, kTrue }, { 0x21, kFalse } },
- { } },
- { 31, 340, "hic4",
- { { 0x26, kTrue }, { 0x22, kFalse } },
- { } },
- { 37, 341, "hdic5",
- { { 0, kTrue }, { 1, kFalse }, { 0x66, kFalse } },
- { } },
- { 13, 342, "DIC5",
- { { 0x67, kFalse }, { 0x64, kTrue } },
- { } },
- { 36, 343, "hdic7",
- { { 0x63, kTrue }, { 0x24, kFalse } },
- { } },
- { 35, 344, "hdic8",
- { { 0x5, kTrue }, { 0x1E, kFalse } },
- { } },
- { 34, 345, "hdic9",
- { { 0x28, kTrue } },
- { } },
+{ // Hulk, 9 responses
+ { 39, 333, "hdic1",
+ { { kEv, 0x13, kTrue }, { kEv, 0x3A, kFalse } } },
+ { 24, 336, "CIC3",
+ { { kEv, 0xB, kTrue }, { kEv, 0x25, kFalse } } },
+ { 38, 339, "hdic3",
+ { { kEv, 0x12, kTrue }, { kEv, 0x21, kFalse } } },
+ { 31, 340, "hic4",
+ { { kEv, 0x26, kTrue }, { kEv, 0x22, kFalse } } },
+ { 37, 341, "hdic5",
+ { { kEv, 0, kTrue }, { kEv, 1, kFalse }, { kEv, 0x66, kFalse } } },
+ { 13, 342, "DIC5",
+ { { kEv, 0x67, kFalse }, { kEv, 0x64, kTrue } } },
+ { 36, 343, "hdic7",
+ { { kEv, 0x63, kTrue }, { kEv, 0x24, kFalse } } },
+ { 35, 344, "hdic8",
+ { { kEv, 0x5, kTrue }, { kEv, 0x1E, kFalse } } },
+ { 34, 345, "hdic9",
+ { { kEv, 0x28, kTrue } } },
}
};
const Common::Array<Goodbye> _nancy1Goodbyes = {
- { "nd0d", { { { 3220, 3221, 3222, 3223 }, {}, NOFLAG } } }, // Daryl
- { "nd0c", { { { 252, 2520, 2521, 2523 }, {}, NOFLAG } } }, // Connie
- { "nd0hl", { { { 451, 452, 453, 454 }, {}, NOFLAG } } }, // Hal
- { "nd0h", { { { 3298, 3296 }, {}, NOFLAG } } } // Hulk, only two answers
+ { "nd0d", { { { 3220, 3221, 3222, 3223 }, {}, NOFLAG } } }, // Daryl
+ { "nd0c", { { { 252, 2520, 2521, 2523 }, {}, NOFLAG } } }, // Connie
+ { "nd0hl", { { { 451, 452, 453, 454 }, {}, NOFLAG } } }, // Hal
+ { "nd0h", { { { 3298, 3296 }, {}, NOFLAG } } } // Hulk, only two answers
};
const Common::Array<Common::Array<Hint>> _nancy1Hints = {
-{ // Ned, 8 hints
- { 1, -1, { 501, 0, 0, true },
- { "hn01", "hn02", "hn03" },
- { { 0, kFalse } },
- { } },
- { 2, -1, { 501, 0, 0, true },
- { "hn04", "hn05", "hn06" },
- { { 0, kTrue }, { 1, kFalse } },
- { } },
- { 3, -1, { 501, 0, 0, true },
- { "hn07", "hn08", "hn09" },
- { { 1, kFalse } },
- { { 3, kFalse } } },
- { 4, -1, { 501, 0, 0, true },
- { "hn10", "hn11", "hn09" },
- { { 0x55, kFalse } },
- { { 3, kTrue } } },
- { 5, -1, { 501, 0, 0, true },
- { "hn13", "hn14", "hn15" },
- { { 0x55, kTrue }, { 0x56, kFalse } },
- { } },
- { 6, -1, { 501, 0, 0, true },
- { "hn16", "hn17", "hn18" },
- { { 0x57, kFalse }, { 0x56, kTrue } },
- { } },
- { 7, -1, { 501, 0, 0, true },
- { "hn21", "hn21", "hn20" },
- { { 0xA, kTrue }, { 0x3B, kTrue } },
- { { 7, kFalse } } },
- { 0, 0, { 501, 0, 0, true }, // Out of hints
- { "hn19", "hn19", "hn19" },
- { },
- { } }
+{ // Ned, 8 hints
+ { 1, -1,
+ { "hn01", "hn02", "hn03" },
+ { { kEv, 0, kFalse } } },
+ { 2, -1,
+ { "hn04", "hn05", "hn06" },
+ { { kEv, 0, kTrue }, { kEv, 1, kFalse } } },
+ { 3, -1,
+ { "hn07", "hn08", "hn09" },
+ { { kEv, 1, kFalse }, { kIn, 3, kFalse } } },
+ { 4, -1,
+ { "hn10", "hn11", "hn09" },
+ { { kEv, 0x55, kFalse }, { kIn, 3, kTrue } } },
+ { 5, -1,
+ { "hn13", "hn14", "hn15" },
+ { { kEv, 0x55, kTrue }, { kEv, 0x56, kFalse } } },
+ { 6, -1,
+ { "hn16", "hn17", "hn18" },
+ { { kEv, 0x57, kFalse }, { kEv, 0x56, kTrue } } },
+ { 7, -1,
+ { "hn21", "hn21", "hn20" },
+ { { kEv, 0xA, kTrue }, { kEv, 0x3B, kTrue }, { kIn, 7, kFalse } } },
+ { 0, 0, // Out of hints
+ { "hn19", "hn19", "hn19" },
+ { } }
},
-{ // Bess, 9 hints
- { 9, -1, { 501, 0, 0, true },
- { "hb01", "hb02", "hb03" },
- { { 0x57, kFalse } },
- { } },
- { 10, -1, { 501, 0, 0, true },
- { "hb04", "hb05", "hb06" },
- { { 0x57, kTrue }, { 0x3C, kFalse } },
- { } },
- { 11, -1, { 501, 0, 0, true },
- { "hb07", "hb08", "hb09" },
- { { 0x5A, kFalse }, { 0x3C, kTrue }, { 0x56, kFalse } },
- { } },
- { 12, -1, { 501, 0, 0, true },
- { "hb11", "hb10", "hb12" },
- { { 0x5A, kTrue }, { 0x56, kFalse } },
- { } },
- { 13, -1, { 501, 0, 0, true },
- { "hb14", "hb15", "hb16" },
- { { 0x5A, kFalse }, { 0x3C, kTrue }, { 0x56, kTrue } },
- { } },
- { 14, -1, { 501, 0, 0, true },
- { "hb17", "hb18", "hb19" },
- { { 0x59, kTrue }, { 0xA, kFalse }, { 0x56, kTrue } },
- { { 0, kFalse } } },
- { 15, -1, { 501, 0, 0, true },
- { "hb20", "hb21", "hb22" },
- { { 0xA, kTrue }, { 0x3B, kTrue } },
- { { 0, kTrue }, { 7, kFalse } } },
- { 16, -1, { 501, 0, 0, true },
- { "hb24", "hb23", "hb25" },
- { { 0x59, kFalse }, { 0xA, kTrue }, { 0x3B, kTrue } },
- { { 7, kFalse } } },
- { 8, 0, { 501, 0, 0, true }, // Out of hints
- { "hb26", "hb26", "hb26" },
- { },
- { } }
+{ // Bess, 9 hints
+ { 9, -1,
+ { "hb01", "hb02", "hb03" },
+ { { kEv, 0x57, kFalse } } },
+ { 10, -1,
+ { "hb04", "hb05", "hb06" },
+ { { kEv, 0x57, kTrue }, { kEv, 0x3C, kFalse } } },
+ { 11, -1,
+ { "hb07", "hb08", "hb09" },
+ { { kEv, 0x5A, kFalse }, { kEv, 0x3C, kTrue }, { kEv, 0x56, kFalse } } },
+ { 12, -1,
+ { "hb11", "hb10", "hb12" },
+ { { kEv, 0x5A, kTrue }, { kEv, 0x56, kFalse } } },
+ { 13, -1,
+ { "hb14", "hb15", "hb16" },
+ { { kEv, 0x5A, kFalse }, { kEv, 0x3C, kTrue }, { kEv, 0x56, kTrue } } },
+ { 14, -1,
+ { "hb17", "hb18", "hb19" },
+ { { kEv, 0x59, kTrue }, { kEv, 0xA, kFalse }, { kEv, 0x56, kTrue }, { kIn, 0, kFalse } } },
+ { 15, -1,
+ { "hb20", "hb21", "hb22" },
+ { { kEv, 0xA, kTrue }, { kEv, 0x3B, kTrue }, { kIn, 0, kTrue }, { kIn, 7, kFalse } } },
+ { 16, -1,
+ { "hb24", "hb23", "hb25" },
+ { { kEv, 0x59, kFalse }, { kEv, 0xA, kTrue }, { kEv, 0x3B, kTrue }, { kIn, 7, kFalse } } },
+ { 8, 0, // Out of hints
+ { "hb26", "hb26", "hb26" },
+ { } }
},
-{ // George, 9 hints
- { 25, -1, { 501, 0, 0, true }, // Easter egg
- { "GeorBark", "GeorBark", "GeorBark" },
- { { 0x4A, kTrue } },
- { } },
- { 18, -1, { 501, 0, 0, true },
- { "hg01", "hg02", "hg03" },
- { { 0x5B, kFalse } },
- { } },
- { 19, -1, { 501, 0, 0, true },
- { "hg16", "hg15", "hg17" },
- { { 0x5B, kTrue } },
- { { 9, kFalse } } },
- { 20, -1, { 501, 0, 0, true },
- { "hg18", "hg19", "hg20" },
- { { 0x5B, kTrue }, { 0x5C, kFalse }, { 0x5D, kFalse } },
- { { 9, kTrue } } },
- { 21, -1, { 501, 0, 0, true },
- { "hg08", "hg09", "hg10" },
- { { 0x5B, kTrue }, { 0x5C, kTrue }, { 0x5D, kFalse } },
- { { 9, kFalse } } },
- { 22, -1, { 501, 0, 0, true },
- { "hg04", "hg05", "hg06" },
- { { 0x5B, kTrue }, { 0x5C, kTrue }, { 0x5D, kTrue }, { 0x3B, kFalse } },
- { { 9, kTrue } } },
- { 23, -1, { 501, 0, 0, true },
- { "hg22", "hg21", "hg13" },
- { { 0xA, kFalse }, { 0x3B, kTrue } },
- { { 9, kTrue } } },
- { 24, -1, { 501, 0, 0, true },
- { "hg11", "hg12", "hg13" },
- { { 0x3B, kTrue }, { 0xA, kTrue } },
- { { 7, kFalse } } },
- { 17, 0, { 501, 0, 0, true }, // Out of hints
- { "hg14", "hg14", "hg14" },
- { },
- { } }
+{ // George, 9 hints
+ { 25, -1, // Easter egg
+ { "GeorBark", "GeorBark", "GeorBark" },
+ { { kEv, 0x4A, kTrue } } },
+ { 18, -1,
+ { "hg01", "hg02", "hg03" },
+ { { kEv, 0x5B, kFalse } } },
+ { 19, -1,
+ { "hg16", "hg15", "hg17" },
+ { { kEv, 0x5B, kTrue }, { kIn, 9, kFalse } } },
+ { 20, -1,
+ { "hg18", "hg19", "hg20" },
+ { { kEv, 0x5B, kTrue }, { kEv, 0x5C, kFalse }, { kEv, 0x5D, kFalse }, { kIn, 9, kTrue } } },
+ { 21, -1,
+ { "hg08", "hg09", "hg10" },
+ { { kEv, 0x5B, kTrue }, { kEv, 0x5C, kTrue }, { kEv, 0x5D, kFalse }, { kIn, 9, kFalse } } },
+ { 22, -1,
+ { "hg04", "hg05", "hg06" },
+ { { kEv, 0x5B, kTrue }, { kEv, 0x5C, kTrue }, { kEv, 0x5D, kTrue }, { kEv, 0x3B, kFalse }, { kIn, 9, kTrue } } },
+ { 23, -1,
+ { "hg22", "hg21", "hg13" },
+ { { kEv, 0xA, kFalse }, { kEv, 0x3B, kTrue }, { kIn, 9, kTrue } } },
+ { 24, -1,
+ { "hg11", "hg12", "hg13" },
+ { { kEv, 0x3B, kTrue }, { kEv, 0xA, kTrue }, { kIn, 7, kFalse } } },
+ { 17, 0, // Out of hints
+ { "hg14", "hg14", "hg14" },
+ { }, }
}
};
+const SceneChangeDescription _nancy1HintSceneChange = { 501, 0, 0, true };
+
const Common::Array<Common::Array<const char *>> _nancy1ConditionalDialogueTexts = {
-{ // English
- // 00
- "<c1>W<c0>hat do you know about the break-in at the pharmacy?<h><n>",
- "<c1>W<c0>as Jake interested in Judo?<h><n>",
- "<c1>W<c0>hy would Jake have an old English book in his locker?<h><n>",
- "<c1>D<c0>aryl, we're going to find the person who killed Jake. If you help out now, the case will move a lot quicker.<h><n>",
- "<c1>I<c0> saw Jake's tape, Daryl. I know he was blackmailing you.<h><n>",
- // 05
- "<c1>H<c0>al, Connie, and Hulk didn't seem to like Jake very much. I think they all know something about Jake's death, I just don't know what.<h><n>",
- "<c1>H<c0>al had a reason to hate Jake, but it's hard to picture him as a murderer.<h><n>",
- "<c1>J<c0>ake had some kind of hold on Connie and Hal. Is it possible that one of them could have resorted to murder?<h><n>",
- "<c1>C<c0>onnie lied about her dating Jake. Could something have happened between them that would push her to murder?<h><n>",
- "<c1>J<c0>ake was pressuring both Hal and Hulk. It could have been either of them. This is really complicated.<h><n>",
- // 10
- "<c1>L<c0>ooks like Jake had a hold on both Hulk and Connie. What now?<h><n>",
- "<c1>I<c0> think Jake had some sensitive information on Hulk Sanchez. Do you think Hulk could have killed Jake?<h><n>",
- "<c1>H<c0>al, Hulk and Connie were all involved with Jake. He had information that could jeopardize Hal's career. Connie once dated Jake and Hulk seems awfully touchy about that break-in at the Drug Depot.<h><n>",
- "<c1>D<c0>o you know why Jake had a video camera in his locker?<h><n>",
- "<c1>D<c0>aryl, do you know where I could get Jake Roger's locker combination?<h><n>",
- // 15
- "<c1>W<c0>hat can you tell me about Hal Tanaka?<h><n>",
- "<c1>D<c0>o you know Connie Watson?<h><n>",
- "<c1>H<c0>ow well do you know Hulk Sanchez?<h><n>",
- "<c1>D<c0>idn't I hear you were dating Jake?<h><n>",
- "<c1>C<c0>onnie, we're going to find the person who killed Jake. If you help out now, the case will move a lot quicker.<h><n>",
- // 20
- "<c1>I<c0> know you're the unknown winner of that judo competition. Jake Rogers had it all on videotape.<h><n>",
- "<c1>Y<c0>ou're wearing a Japanese medallion with a symbol that means crane, and Crane is the name of the judo school on the poster in the gym.<h><n>",
- "<c1>D<c0>o you know the combination to Jake Roger's locker?<h><n>", // Misspelled in the original game
- "<c1>H<c0>ow well do you know Daryl Gray?<h><n>",
- "<c1>D<c0>o you know Hal Tanaka?<h><n>",
- // 25
- "<c1>H<c0>ulk told me money's been tight for you these days.<h><n>",
- "<c1>W<c0>hat do you know about Hulk Sanchez?<h><n>",
- "<c1>H<c0>al, we're going to find the person who killed Jake. If you help out now, this case will move a lot quicker.<h><n>",
- "<c1>J<c0>ake knew you copied your essay from that book of English essays, didn't he?<h><n>",
- "<c1>H<c0>ulk said your locker was right next to Jake's. Are you sure you don't know the combination?<h><n>",
- // 30
- "<c1>D<c0>o you know the combination to Jake Rogers' locker?<h><n>",
- "<c1>W<c0>hat can you tell me about Daryl Gray?<h><n>",
- "<c1>C<c0>onnie told me you study too hard. Is that true?<h><n>",
- "<c1>H<c0>ave you heard of Hulk Sanchez?<h><n>",
- "<c1>H<c0>ulk, we're going to find the person who killed Jake. If you help out now, this case will move a lot quicker.<h><n>",
- // 35
- "<c1>J<c0>ake knew you broke into the Drug Depot. He was blackmailing you, wasn't he?<h><n>",
- "<c1>T<c0>ell me about the robbery at the Drug Depot pharmacy.<h><n>",
- "<c1>H<c0>ow could I get into Jake's locker?<h><n>",
- "<c1>I<c0>'m really sorry you got injured. Does that affect your chances of playing college ball?<h><n>",
- "<c1>W<c0>hat can you tell me about Connie Watson?<h><n>",
+{ // English
+ // 00
+ "<c1>W<c0>hat do you know about the break-in at the pharmacy?<h><n>",
+ "<c1>W<c0>as Jake interested in Judo?<h><n>",
+ "<c1>W<c0>hy would Jake have an old English book in his locker?<h><n>",
+ "<c1>D<c0>aryl, we're going to find the person who killed Jake. If you help out now, the case will move a lot quicker.<h><n>",
+ "<c1>I<c0> saw Jake's tape, Daryl. I know he was blackmailing you.<h><n>",
+ // 05
+ "<c1>H<c0>al, Connie, and Hulk didn't seem to like Jake very much. I think they all know something about Jake's death, I just don't know what.<h><n>",
+ "<c1>H<c0>al had a reason to hate Jake, but it's hard to picture him as a murderer.<h><n>",
+ "<c1>J<c0>ake had some kind of hold on Connie and Hal. Is it possible that one of them could have resorted to murder?<h><n>",
+ "<c1>C<c0>onnie lied about her dating Jake. Could something have happened between them that would push her to murder?<h><n>",
+ "<c1>J<c0>ake was pressuring both Hal and Hulk. It could have been either of them. This is really complicated.<h><n>",
+ // 10
+ "<c1>L<c0>ooks like Jake had a hold on both Hulk and Connie. What now?<h><n>",
+ "<c1>I<c0> think Jake had some sensitive information on Hulk Sanchez. Do you think Hulk could have killed Jake?<h><n>",
+ "<c1>H<c0>al, Hulk and Connie were all involved with Jake. He had information that could jeopardize Hal's career. Connie once dated Jake and Hulk seems awfully touchy about that break-in at the Drug Depot.<h><n>",
+ "<c1>D<c0>o you know why Jake had a video camera in his locker?<h><n>",
+ "<c1>D<c0>aryl, do you know where I could get Jake Roger's locker combination?<h><n>",
+ // 15
+ "<c1>W<c0>hat can you tell me about Hal Tanaka?<h><n>",
+ "<c1>D<c0>o you know Connie Watson?<h><n>",
+ "<c1>H<c0>ow well do you know Hulk Sanchez?<h><n>",
+ "<c1>D<c0>idn't I hear you were dating Jake?<h><n>",
+ "<c1>C<c0>onnie, we're going to find the person who killed Jake. If you help out now, the case will move a lot quicker.<h><n>",
+ // 20
+ "<c1>I<c0> know you're the unknown winner of that judo competition. Jake Rogers had it all on videotape.<h><n>",
+ "<c1>Y<c0>ou're wearing a Japanese medallion with a symbol that means crane, and Crane is the name of the judo school on the poster in the gym.<h><n>",
+ "<c1>D<c0>o you know the combination to Jake Roger's locker?<h><n>", // Misspelled in the original game
+ "<c1>H<c0>ow well do you know Daryl Gray?<h><n>",
+ "<c1>D<c0>o you know Hal Tanaka?<h><n>",
+ // 25
+ "<c1>H<c0>ulk told me money's been tight for you these days.<h><n>",
+ "<c1>W<c0>hat do you know about Hulk Sanchez?<h><n>",
+ "<c1>H<c0>al, we're going to find the person who killed Jake. If you help out now, this case will move a lot quicker.<h><n>",
+ "<c1>J<c0>ake knew you copied your essay from that book of English essays, didn't he?<h><n>",
+ "<c1>H<c0>ulk said your locker was right next to Jake's. Are you sure you don't know the combination?<h><n>",
+ // 30
+ "<c1>D<c0>o you know the combination to Jake Rogers' locker?<h><n>",
+ "<c1>W<c0>hat can you tell me about Daryl Gray?<h><n>",
+ "<c1>C<c0>onnie told me you study too hard. Is that true?<h><n>",
+ "<c1>H<c0>ave you heard of Hulk Sanchez?<h><n>",
+ "<c1>H<c0>ulk, we're going to find the person who killed Jake. If you help out now, this case will move a lot quicker.<h><n>",
+ // 35
+ "<c1>J<c0>ake knew you broke into the Drug Depot. He was blackmailing you, wasn't he?<h><n>",
+ "<c1>T<c0>ell me about the robbery at the Drug Depot pharmacy.<h><n>",
+ "<c1>H<c0>ow could I get into Jake's locker?<h><n>",
+ "<c1>I<c0>'m really sorry you got injured. Does that affect your chances of playing college ball?<h><n>",
+ "<c1>W<c0>hat can you tell me about Connie Watson?<h><n>",
},
-{ // Russian
- // 00
- "<c1>Wto t= znaew% o krage v apteke?<c0><h><n>",
- "<c1>Dgek zanimals* dzydo?<c0><h><n>",
- "<c1>Poqemu Dgek xranil v svoem wkafqike staruy knihu?<c0><h><n>",
- "<c1>D&ril, m= sobiraems* pojmat% ubijcu. I nam oqen% nugna tvo* pomoQ%.<c0><h><n>",
- "<c1>D&ril, * videla videokassetu Dgeka. Y znay, qto on teb* wantagiroval.<c0><h><n>",
- // 05
- "<c1>Xolu, Konni i Xalku Dgek ne osobo nravils*. Dumay, im qto-to izvestno o eho smerti, no oni ne xot*t hovorit%.<c0><h><n>",
- "<c1>U Xola b=li priqin= nenavidet% Dgeka. No predstavit% eho ubijcej slogno.<c0><h><n>",
- "<c1>Dgek wantagiroval Konni i Xola. Moh kto-to iz nix pojti na ubijstvo?<c0><h><n>",
- "<c1>Konni ne skazala, qto <n>vstreqalas% s Dgekom. <n>Ona mohla pojti na <n>ubijstvo, potomu qto <n>oni possorilis%?<c0><h><n>",
- "<c1>Dgek wantagiroval i Xola, i Xalka. U oboix b=l motiv.<c0><h><n>",
- // 10
- "<c1>Poxoge, Dgek wantagiroval i Xola, i Konni. Wto teper%?<c0><h><n>",
- "<c1>Dgeku b=lo qto-to izvestno o Xalke Sanqese. Dumaew%, Xalk moh ubit% eho?<c0><h><n>",
- "<c1>Xol, Xalk i Konni b=li kak-to sv*zan= s Dgekom. U neho b=li svedeni*, kotor=e mohli navredit% kar%ere Xola. <n>Konni odin raz xodila s Dgekom na svidanie, a Xalka zadel moj vopros o krage v apteke.<c0><h><n>",
- "<c1>T= znaew%, zaqem Dgek xranil v svoem wkafqike videokameru?<c0><h><n>",
- "<c1>D&ril, kak mne uznat% kod k wkafqiku Dgeka?<c0><h><n>",
- // 15
- "<c1>Wto t= znaew% o Xole Tanake?<c0><h><n>",
- "<c1>T= znaew% Konni Vatson?<c0><h><n>",
- "<c1>T= xorowo znaew% Xalka Sanqesa?<c0><h><n>",
- "<c1>Y sl=wala, qto t= vstreqalas% s Dgekom.<c0><h><n>",
- "<c1>Konni, m= sobiraems* najti ubijcu Dgeka. Nam oqen% nugna tvo* pomoQ%.<c0><h><n>",
- // 20
- "<c1>Y znay, qto t= pobedila v sorevnovani*x po dzydo. Dgek Rodgers zapisal vse na video.<c0><h><n>",
- "<c1>U teb* na medal%one narisovan ierohlif 'guravl%'. Toqno tak ge naz=vaets* wkola dzydo. <n>Y videla plakat vozle sportzala.<c0><h><n>",
- "<c1>T= znaew% kod k wkafqiku Dgeka Rodgersa?<c0><h><n>",
- "<c1>T= xorowo znaew% D&rila Hre*?<c0><h><n>",
- "<c1>T= znaew% Xola Tanaku?<c0><h><n>",
- // 25
- "<c1>Xalk skazal, qto u teb* sejqas trudn=e vremena. Cto pravda?<c0><h><n>",
- "<c1>Wto t= znaew% o Xalke Sanqese?<c0><h><n>",
- "<c1>Xol, m= sobiraems* pojmat% <n>ubijcu Dgeka. Nam oqen% nugna <n>tvo* pomoQ%.<c0><h><n>",
- "<c1>Dgek znal, qto t= spisal <n>soqinenie iz knihi. Y prava?<c0><h><n>",
- "<c1>Xalk skazal, qto tvoj wkafqik <n>naxodits* r*dom so wkafqikom <n>Dgeka. T= toqno ne znaew% <n>kod ot eho zamka?<c0><h><n>",
- // 30
- "<c1>T= znaew% kod k wkafqiku <n>Dgeka Rodgersa?<c0><h><n>",
- "<c1>Wto t= znaew% o <n>D&rile Hree?<c0><h><n>",
- "<c1>Konni skazala, qto t= <n>sliwkom mnoho zanimaew%s*.<c0><h><n>",
- "<c1>Wto t= znaew% o <n>Xalke Sanqese?<c0><h><n>",
- "<c1>Xalk, m= sobiraems* pojmat% ubijcu Dgeka. Nam oqen% nugna tvo* pomoQ%.<c0><h><n>",
- // 35
- "<c1>Dgek znal, qto t= soverwil kragu v apteke. On wantagiroval teb*?<c0><h><n>",
- "<c1>Rasskagi o krage v apteke.<c0><h><n>",
- "<c1>T= znaew%, kak otkr=t% wkafqik Dgeka?<c0><h><n>",
- "<c1>Mne gal%, qto t= poluqil travmu. Teper% u teb* budet men%we wansov postupit% v prestign=j kolledg?<c0><h><n>",
- "<c1>Wto t= mogew% skazat% o <n>Konni Vatson?<c0><h><n>"
+{ // Russian
+ // 00
+ "<c1>Wto t= znaew% o krage v apteke?<c0><h><n>",
+ "<c1>Dgek zanimals* dzydo?<c0><h><n>",
+ "<c1>Poqemu Dgek xranil v svoem wkafqike staruy knihu?<c0><h><n>",
+ "<c1>D&ril, m= sobiraems* pojmat% ubijcu. I nam oqen% nugna tvo* pomoQ%.<c0><h><n>",
+ "<c1>D&ril, * videla videokassetu Dgeka. Y znay, qto on teb* wantagiroval.<c0><h><n>",
+ // 05
+ "<c1>Xolu, Konni i Xalku Dgek ne osobo nravils*. Dumay, im qto-to izvestno o eho smerti, no oni ne xot*t hovorit%.<c0><h><n>",
+ "<c1>U Xola b=li priqin= nenavidet% Dgeka. No predstavit% eho ubijcej slogno.<c0><h><n>",
+ "<c1>Dgek wantagiroval Konni i Xola. Moh kto-to iz nix pojti na ubijstvo?<c0><h><n>",
+ "<c1>Konni ne skazala, qto <n>vstreqalas% s Dgekom. <n>Ona mohla pojti na <n>ubijstvo, potomu qto <n>oni possorilis%?<c0><h><n>",
+ "<c1>Dgek wantagiroval i Xola, i Xalka. U oboix b=l motiv.<c0><h><n>",
+ // 10
+ "<c1>Poxoge, Dgek wantagiroval i Xola, i Konni. Wto teper%?<c0><h><n>",
+ "<c1>Dgeku b=lo qto-to izvestno o Xalke Sanqese. Dumaew%, Xalk moh ubit% eho?<c0><h><n>",
+ "<c1>Xol, Xalk i Konni b=li kak-to sv*zan= s Dgekom. U neho b=li svedeni*, kotor=e mohli navredit% kar%ere Xola. <n>Konni odin raz xodila s Dgekom na svidanie, a Xalka zadel moj vopros o krage v apteke.<c0><h><n>",
+ "<c1>T= znaew%, zaqem Dgek xranil v svoem wkafqike videokameru?<c0><h><n>",
+ "<c1>D&ril, kak mne uznat% kod k wkafqiku Dgeka?<c0><h><n>",
+ // 15
+ "<c1>Wto t= znaew% o Xole Tanake?<c0><h><n>",
+ "<c1>T= znaew% Konni Vatson?<c0><h><n>",
+ "<c1>T= xorowo znaew% Xalka Sanqesa?<c0><h><n>",
+ "<c1>Y sl=wala, qto t= vstreqalas% s Dgekom.<c0><h><n>",
+ "<c1>Konni, m= sobiraems* najti ubijcu Dgeka. Nam oqen% nugna tvo* pomoQ%.<c0><h><n>",
+ // 20
+ "<c1>Y znay, qto t= pobedila v sorevnovani*x po dzydo. Dgek Rodgers zapisal vse na video.<c0><h><n>",
+ "<c1>U teb* na medal%one narisovan ierohlif 'guravl%'. Toqno tak ge naz=vaets* wkola dzydo. <n>Y videla plakat vozle sportzala.<c0><h><n>",
+ "<c1>T= znaew% kod k wkafqiku Dgeka Rodgersa?<c0><h><n>",
+ "<c1>T= xorowo znaew% D&rila Hre*?<c0><h><n>",
+ "<c1>T= znaew% Xola Tanaku?<c0><h><n>",
+ // 25
+ "<c1>Xalk skazal, qto u teb* sejqas trudn=e vremena. Cto pravda?<c0><h><n>",
+ "<c1>Wto t= znaew% o Xalke Sanqese?<c0><h><n>",
+ "<c1>Xol, m= sobiraems* pojmat% <n>ubijcu Dgeka. Nam oqen% nugna <n>tvo* pomoQ%.<c0><h><n>",
+ "<c1>Dgek znal, qto t= spisal <n>soqinenie iz knihi. Y prava?<c0><h><n>",
+ "<c1>Xalk skazal, qto tvoj wkafqik <n>naxodits* r*dom so wkafqikom <n>Dgeka. T= toqno ne znaew% <n>kod ot eho zamka?<c0><h><n>",
+ // 30
+ "<c1>T= znaew% kod k wkafqiku <n>Dgeka Rodgersa?<c0><h><n>",
+ "<c1>Wto t= znaew% o <n>D&rile Hree?<c0><h><n>",
+ "<c1>Konni skazala, qto t= <n>sliwkom mnoho zanimaew%s*.<c0><h><n>",
+ "<c1>Wto t= znaew% o <n>Xalke Sanqese?<c0><h><n>",
+ "<c1>Xalk, m= sobiraems* pojmat% ubijcu Dgeka. Nam oqen% nugna tvo* pomoQ%.<c0><h><n>",
+ // 35
+ "<c1>Dgek znal, qto t= soverwil kragu v apteke. On wantagiroval teb*?<c0><h><n>",
+ "<c1>Rasskagi o krage v apteke.<c0><h><n>",
+ "<c1>T= znaew%, kak otkr=t% wkafqik Dgeka?<c0><h><n>",
+ "<c1>Mne gal%, qto t= poluqil travmu. Teper% u teb* budet men%we wansov postupit% v prestign=j kolledg?<c0><h><n>",
+ "<c1>Wto t= mogew% skazat% o <n>Konni Vatson?<c0><h><n>"
}
};
const Common::Array<Common::Array<const char *>> _nancy1GoodbyeTexts = {
-{ // English
- "<c1>S<c0>ee ya' later.<h>", // Daryl
- "<c1>G<c0>ood Bye.<h>", // Connie
- "<c1>T<c0>alk to ya' later.<h>", // Hal
- "<c1>B<c0>ye.<h>" // Hulk
+{ // English
+ "<c1>S<c0>ee ya' later.<h>", // Daryl
+ "<c1>G<c0>ood Bye.<h>", // Connie
+ "<c1>T<c0>alk to ya' later.<h>", // Hal
+ "<c1>B<c0>ye.<h>" // Hulk
},
-{ // Russian
- "<c1>Udaqi.<c0><h>", // Daryl
- "<c1>Poka.<c0><h>", // Connie
- "<c1>Pohovorim pozge.<c0><h>", // Hal
- "<c1>Poka.<c0><h>" // Hulk
+{ // Russian
+ "<c1>Udaqi.<c0><h>", // Daryl
+ "<c1>Poka.<c0><h>", // Connie
+ "<c1>Pohovorim pozge.<c0><h>", // Hal
+ "<c1>Poka.<c0><h>" // Hulk
}
};
const Common::Array<Common::Array<const char *>> _nancy1HintTexts = {
-{ // English
- // 00
- "Nancy, I don't know how else to help.<n>Just be careful, OK?<n><e>",
- "Nancy, I don't know how else to help.<n>Just be careful, OK?<n><e>",
- "Nancy, I don't know how else to help.<n>Just be careful, OK?<n><e>",
- // 01
- "Try to find the victim's locker,<n>it may hold some clues.<n><e>",
- "I'd definitely search the crime<n>scene for clues.<n><e>",
- "Nancy, put on your detective's cap<n>and begin at the beginning!<n><e>",
- // 02
- "Nancy, to open the victim's<n>locker, I'd think of a way to make<n>the owner's name into<n>numbers, like maybe on a phone.<n><e>",
- "On my locker, my combination<n>is related to my name.<n><e>",
- "To open the victim's locker,<n>I'd think of how letters and<n>numbers could be related.<n><e>",
- // 03
- "Are you sure nothing fell out<n>of Jake's locker and onto the floor?<n><e>",
- "Search that locker, there's<n>bound to be something useful<n>there.<n><e>",
- "Nancy, be careful. I was<n>afraid that Jake's locker was<n>booby trapped.<n><e>",
- // 04
- "Use the glasscutter you found<n>by the locker to open up<n>a window, like outside<n>the school.<n><e>",
- "That Jake Rogers was sneaky,<n>he probably used that glasscutter<n>in his locker to break into<n>the school.<n><e>",
- "Nancy, be careful. I was<n>afraid that Jake's locker was<n>booby trapped.<n><e>",
- // 05
- "There must be a computer in<n>the teacher's lounge.<n>Can you access it?<n><e>",
- "There must be clues in the<n>teacher's lounge somewhere.<n>Search around the desk!<n><e>",
- "I can't believe you broke into<n>the teacher's lounge!<n>I'm sure you'll find some very<n>important information there!<n><e>",
- // 06
- "Nancy perhaps you can use your<n>Aunt Eloise's login and<n>password to access<n>the school computer. Doesn't<n>she keep the password in her safe<n>at home?<n><e>",
- "Nancy perhaps you can use your<n>Aunt Eloise's login and<n>password to access<n>the school computer. She's<n>probably hidden it somewhere at<n>home in a safe place.<n><e>",
- "Try your Aunt Eloise's name to<n>log onto the school computer.<n>She must keep her password<n>and login at home somewhere.<n><e>",
- // 07
- "I bet the first boiler lever<n>controls whether the second<n>and third lever can move.<n><e>",
- "I bet the first boiler lever<n>controls whether the second<n>and third lever can move.<n><e>",
- "I think the level of each<n>lever may have something to do<n>with reducing the boiler<n>pressure and temperature.<n><e>",
- // 08
- "Nancy, I've run out of ideas.<n>Please be careful, okay?<n><e>",
- "Nancy, I've run out of ideas.<n>Please be careful, okay?<n><e>",
- "Nancy, I've run out of ideas.<n>Please be careful, okay?<n><e>",
- // 09
- "Oh, I'm sure your Aunt Eloise<n>will be helpful. She<n>just LOVES to hide things!<n><e>",
- "Oh, I'm sure your Aunt Eloise<n>will be helpful.<n><e>",
- "How is your Aunt Eloise?<n>Her house is so beautiful!<n><e>",
- // 10
- "Those letters on your Aunt's safe<n>are definitely Greek letters.<n>I bet the combination is related<n>to the Greek letters on that note<n>from her college sorority!<n><e>",
- "Those letters on your Aunt's safe<n>are definitely Greek letters.<n>I bet there's a note somewhere<n>in the house that also has<n>Greek letters.<n><e>",
- "Those letters on your Aunt's safe<n>are definitely Greek letters.<n><e>",
- // 11
- "That box in Aunt Eloise's safe<n>must hold an important clue!<n><e>",
- "Aunt Eloise must have some important<n>items in the safe.<n><e>",
- "This is such a puzzling situation!<n><e>",
- // 12
- "Can you use Aunt Eloise's login<n>and password to access the <n>school administration computers?<n>I bet they're in the teacher's<n>lounge.<n><e>",
- "Can you use Aunt Eloise's login<n>and password to access the <n>school administration computer?<n><e>",
- "Oh Nancy, are you sure your Aunt<n>wouldn't mind you poking around<n>with her school stuff?<n><e>",
- // 13
- "I bet that box in Aunt Eloise's<n>safe hides her login ID<n>and password.<n><e>",
- "Aunt Eloise probably hid her<n>login ID and password in<n>the safe at home.<n><e>",
- "Aunt Eloise just loves to hide things!<n>Why not go to her house and take<n>a look around?<n><e>",
- // 14
- "This sounds dangerous, Nancy!<n>You'll need to find something in the<n>kitchen that will prop up the<n>gas line so you can take<n>the bolt cutters!<n><e>",
- "Could something take the place<n>of the bolt cutters and hold<n>up that gas line?<n><e>",
- "Nancy, this sounds too dangerous!<n>There must be another way to prop<n>up that gas line instead<n>of the bolt cutter!<n><e>",
- // 15
- "Well, the bolt cutters cut the chain.<n>Can you move the levers on the<n>boiler to change the<n>dials so they match<n>the poster with the gauges?<n><e>",
- "There must be a poster down there<n>that shows the right position<n>of the levers so the pressure<n>goes down!<n><e>",
- "Can you find the right level<n>for the levers so the pressure<n>will lower?<n><e>",
- // 16
- "Nancy! Could that correct combination<n>be in the boiler room?<n>Maybe written on a wall<n>or something.<n><e>",
- "Nancy! Could that correct combination<n>be in the boiler room?<n><e>",
- "Nancy! Have you searched the boiler<n>room for a clue?<n><e>",
- // 17
- "I'm stumped, Nancy.<n>I'm afraid I'm not very much help.<n><e>",
- "I'm stumped, Nancy.<n>I'm afraid I'm not very much help.<n><e>",
- "I'm stumped, Nancy.<n>I'm afraid I'm not very much help.<n><e>",
- // 18
- "Why not go to the school library<n>and look around. There's<n>always so much to learn there.<n><e>",
- "Why don't you head for the library?<n>You might find some interesting<n>information there.<n><e>",
- "There must be some place to go where<n>you can find out lots of information.<n><e>",
- // 19
- "I bet an extra key to the library<n>is hidden in Aunt Eloise's house.<n>Go check the walls. Maybe there's<n>a secret compartment!<n><e>",
- "I bet an extra key to the library<n>is hidden in Aunt Eloise's house.<n><e>",
- "Your Aunt Eloise is head librarian.<n>Have her open up the school library.<n><e>",
- // 20
- "Have you checked the school basement?<n>You should find the maintenance door<n>and take a look down there!<n><e>",
- "There must be other places to<n>investigate around the school.<n>Have you checked the basement?<n><e>",
- "There must be other places<n>around the school to investigate<n>Have you checked all over?<n><e>",
- // 21
- "That maintenance door lock is definitely<n>in Braille.<n>I'd look in the school computer<n>for a password.<n><e>",
- "The maintenance door lock uses Braille;<n>you can probably find a password<n>on the school computer.<n><e>",
- "That maintenance door lock is definitely<n>in Braille, but I bet the password isn't!<n><e>",
- // 22
- "You found the password!<n>The encyclopedias in the school<n>library can help you to translate<n>the maintenance door's password<n>into Braille.<n><e>",
- "You found the password!<n>Now you have to translate it into Braille<n>at the library.<n><e>",
- "You found the password!<n>Now you'll have to translate it<n>into Braille.<n><e>",
- // 23
- "I bet the school basement is full<n>of clues. Be careful, Nancy,<n>I have a bad feeling about<n>that old boiler.<n><e>",
- "I bet the school basement is full of clues.<n><e>",
- "If I were the boiler room room supervisor,<n>I would keep the combination on<n>something close by.<n><e>",
- // 24
- "I would check out the numbers<n>on that stone that tells us<n>when the school was built.<n><e>",
- "I would look around the boiler room<n>for the combination.<n>It's a smart place to start.<n><e>",
- "If I were the boiler room room supervisor,<n>I would keep the combination on<n>something close by.<n><e>",
- // 25
- "Get down on your knees and bark<n>like a dog!<n><e>",
- "Get down on your knees and bark<n>like a dog!<n><e>",
- "Get down on your knees and bark<n>like a dog!<n><e>"
+{ // English
+ // 00
+ "Nancy, I don't know how else to help.<n>Just be careful, OK?<n><e>",
+ "Nancy, I don't know how else to help.<n>Just be careful, OK?<n><e>",
+ "Nancy, I don't know how else to help.<n>Just be careful, OK?<n><e>",
+ // 01
+ "Try to find the victim's locker,<n>it may hold some clues.<n><e>",
+ "I'd definitely search the crime<n>scene for clues.<n><e>",
+ "Nancy, put on your detective's cap<n>and begin at the beginning!<n><e>",
+ // 02
+ "Nancy, to open the victim's<n>locker, I'd think of a way to make<n>the owner's name into<n>numbers, like maybe on a phone.<n><e>",
+ "On my locker, my combination<n>is related to my name.<n><e>",
+ "To open the victim's locker,<n>I'd think of how letters and<n>numbers could be related.<n><e>",
+ // 03
+ "Are you sure nothing fell out<n>of Jake's locker and onto the floor?<n><e>",
+ "Search that locker, there's<n>bound to be something useful<n>there.<n><e>",
+ "Nancy, be careful. I was<n>afraid that Jake's locker was<n>booby trapped.<n><e>",
+ // 04
+ "Use the glasscutter you found<n>by the locker to open up<n>a window, like outside<n>the school.<n><e>",
+ "That Jake Rogers was sneaky,<n>he probably used that glasscutter<n>in his locker to break into<n>the school.<n><e>",
+ "Nancy, be careful. I was<n>afraid that Jake's locker was<n>booby trapped.<n><e>",
+ // 05
+ "There must be a computer in<n>the teacher's lounge.<n>Can you access it?<n><e>",
+ "There must be clues in the<n>teacher's lounge somewhere.<n>Search around the desk!<n><e>",
+ "I can't believe you broke into<n>the teacher's lounge!<n>I'm sure you'll find some very<n>important information there!<n><e>",
+ // 06
+ "Nancy perhaps you can use your<n>Aunt Eloise's login and<n>password to access<n>the school computer. Doesn't<n>she keep the password in her safe<n>at home?<n><e>",
+ "Nancy perhaps you can use your<n>Aunt Eloise's login and<n>password to access<n>the school computer. She's<n>probably hidden it somewhere at<n>home in a safe place.<n><e>",
+ "Try your Aunt Eloise's name to<n>log onto the school computer.<n>She must keep her password<n>and login at home somewhere.<n><e>",
+ // 07
+ "I bet the first boiler lever<n>controls whether the second<n>and third lever can move.<n><e>",
+ "I bet the first boiler lever<n>controls whether the second<n>and third lever can move.<n><e>",
+ "I think the level of each<n>lever may have something to do<n>with reducing the boiler<n>pressure and temperature.<n><e>",
+ // 08
+ "Nancy, I've run out of ideas.<n>Please be careful, okay?<n><e>",
+ "Nancy, I've run out of ideas.<n>Please be careful, okay?<n><e>",
+ "Nancy, I've run out of ideas.<n>Please be careful, okay?<n><e>",
+ // 09
+ "Oh, I'm sure your Aunt Eloise<n>will be helpful. She<n>just LOVES to hide things!<n><e>",
+ "Oh, I'm sure your Aunt Eloise<n>will be helpful.<n><e>",
+ "How is your Aunt Eloise?<n>Her house is so beautiful!<n><e>",
+ // 10
+ "Those letters on your Aunt's safe<n>are definitely Greek letters.<n>I bet the combination is related<n>to the Greek letters on that note<n>from her college sorority!<n><e>",
+ "Those letters on your Aunt's safe<n>are definitely Greek letters.<n>I bet there's a note somewhere<n>in the house that also has<n>Greek letters.<n><e>",
+ "Those letters on your Aunt's safe<n>are definitely Greek letters.<n><e>",
+ // 11
+ "That box in Aunt Eloise's safe<n>must hold an important clue!<n><e>",
+ "Aunt Eloise must have some important<n>items in the safe.<n><e>",
+ "This is such a puzzling situation!<n><e>",
+ // 12
+ "Can you use Aunt Eloise's login<n>and password to access the <n>school administration computers?<n>I bet they're in the teacher's<n>lounge.<n><e>",
+ "Can you use Aunt Eloise's login<n>and password to access the <n>school administration computer?<n><e>",
+ "Oh Nancy, are you sure your Aunt<n>wouldn't mind you poking around<n>with her school stuff?<n><e>",
+ // 13
+ "I bet that box in Aunt Eloise's<n>safe hides her login ID<n>and password.<n><e>",
+ "Aunt Eloise probably hid her<n>login ID and password in<n>the safe at home.<n><e>",
+ "Aunt Eloise just loves to hide things!<n>Why not go to her house and take<n>a look around?<n><e>",
+ // 14
+ "This sounds dangerous, Nancy!<n>You'll need to find something in the<n>kitchen that will prop up the<n>gas line so you can take<n>the bolt cutters!<n><e>",
+ "Could something take the place<n>of the bolt cutters and hold<n>up that gas line?<n><e>",
+ "Nancy, this sounds too dangerous!<n>There must be another way to prop<n>up that gas line instead<n>of the bolt cutter!<n><e>",
+ // 15
+ "Well, the bolt cutters cut the chain.<n>Can you move the levers on the<n>boiler to change the<n>dials so they match<n>the poster with the gauges?<n><e>",
+ "There must be a poster down there<n>that shows the right position<n>of the levers so the pressure<n>goes down!<n><e>",
+ "Can you find the right level<n>for the levers so the pressure<n>will lower?<n><e>",
+ // 16
+ "Nancy! Could that correct combination<n>be in the boiler room?<n>Maybe written on a wall<n>or something.<n><e>",
+ "Nancy! Could that correct combination<n>be in the boiler room?<n><e>",
+ "Nancy! Have you searched the boiler<n>room for a clue?<n><e>",
+ // 17
+ "I'm stumped, Nancy.<n>I'm afraid I'm not very much help.<n><e>",
+ "I'm stumped, Nancy.<n>I'm afraid I'm not very much help.<n><e>",
+ "I'm stumped, Nancy.<n>I'm afraid I'm not very much help.<n><e>",
+ // 18
+ "Why not go to the school library<n>and look around. There's<n>always so much to learn there.<n><e>",
+ "Why don't you head for the library?<n>You might find some interesting<n>information there.<n><e>",
+ "There must be some place to go where<n>you can find out lots of information.<n><e>",
+ // 19
+ "I bet an extra key to the library<n>is hidden in Aunt Eloise's house.<n>Go check the walls. Maybe there's<n>a secret compartment!<n><e>",
+ "I bet an extra key to the library<n>is hidden in Aunt Eloise's house.<n><e>",
+ "Your Aunt Eloise is head librarian.<n>Have her open up the school library.<n><e>",
+ // 20
+ "Have you checked the school basement?<n>You should find the maintenance door<n>and take a look down there!<n><e>",
+ "There must be other places to<n>investigate around the school.<n>Have you checked the basement?<n><e>",
+ "There must be other places<n>around the school to investigate<n>Have you checked all over?<n><e>",
+ // 21
+ "That maintenance door lock is definitely<n>in Braille.<n>I'd look in the school computer<n>for a password.<n><e>",
+ "The maintenance door lock uses Braille;<n>you can probably find a password<n>on the school computer.<n><e>",
+ "That maintenance door lock is definitely<n>in Braille, but I bet the password isn't!<n><e>",
+ // 22
+ "You found the password!<n>The encyclopedias in the school<n>library can help you to translate<n>the maintenance door's password<n>into Braille.<n><e>",
+ "You found the password!<n>Now you have to translate it into Braille<n>at the library.<n><e>",
+ "You found the password!<n>Now you'll have to translate it<n>into Braille.<n><e>",
+ // 23
+ "I bet the school basement is full<n>of clues. Be careful, Nancy,<n>I have a bad feeling about<n>that old boiler.<n><e>",
+ "I bet the school basement is full of clues.<n><e>",
+ "If I were the boiler room room supervisor,<n>I would keep the combination on<n>something close by.<n><e>",
+ // 24
+ "I would check out the numbers<n>on that stone that tells us<n>when the school was built.<n><e>",
+ "I would look around the boiler room<n>for the combination.<n>It's a smart place to start.<n><e>",
+ "If I were the boiler room room supervisor,<n>I would keep the combination on<n>something close by.<n><e>",
+ // 25
+ "Get down on your knees and bark<n>like a dog!<n><e>",
+ "Get down on your knees and bark<n>like a dog!<n><e>",
+ "Get down on your knees and bark<n>like a dog!<n><e>"
},
-{ // Russian
- // 00
- "N&nsi, * ne znay, qem pomoq%. <n>Bud% ostorogna.<n><e>",
- "N&nsi, * ne znay, qem pomoq%. <n>Bud% ostorogna.<n><e>",
- "N&nsi, * ne znay, qem pomoq%. <n>Bud% ostorogna.<n><e>",
- // 01
- "Najdi wkafqik ubitoho. <n>Tam mohut b=t% uliki.<n><e>",
- "Y b= na tvoem meste ob=skal <n>mesto prestupleni*.<n><e>",
- "N&nsi, poprobuj naqat% s <n>samoho naqala!<n><e>",
- // 02
- "N&nsi, poprobuj otkr=t% <n>wkafqik Dgeka. Navernoe, u neho <n>ne oqen% slogn=j kod. <n>Moget b=t%, u teb* vse <n>poluqits*, esli zamenit% <n>bukv= v eho imeni na <n>cifr=. Kak na telefone.<n><e>",
- "Kod k moemu wkafqiku sv*zan <n>s moim imenem.<n><e>",
- "Wtob= uznat% kod k wkafqiku <n>Dgeka, nugno zamenit% bukv= v <n>eho imeni na cifr=.<n><e>",
- // 03
- "T= xorowo osmotrela wkafqik <n>Dgeka? Moget, iz neho qto-to <n>v=palo?<n><e>",
- "Osmotri wkafqik. Tam dolgno <n>b=t% qto-to interesnoe.<n><e>",
- "N&nsi, bud% ostorogna. <n>)kafqik Dgeka opeqatan <n>policiej.<n><e>",
- // 04
- "Ispol%zuj steklorez, qtob= <n>otkr=t% okno s bokovoj <n>storon= wkol=.<n><e>",
- "Navernoe, Dgek Rodgers <n>ispol%zoval steklorez ili <n>nog, qtob= popast% v <n>wkolu.<n><e>",
- "N&nsi, bud% ostorogna. <n>)kafqik Dgeka opeqatan <n>policiej.<n><e>",
- // 05
- "V uqitel%skoj dolgen b=t% <n>komp%yter. T= mogew% tuda <n>popast%?<n><e>",
- "V uqitel%skoj dolgn= b=t% <n>kakie-to uliki. Osmotri stol <n>s komp%yterom.<n><e>",
- "Ne mohu poverit%, qto t= <n>popala v uqitel%skuy! <n>Dumay, t= najdew% tam <n>qto-to vagnoe.<n><e>",
- // 06
- "Tebe nugno vvesti v komp%yter <n>parol% i lohin teti Cloiz=. <n>Po-moemu, ona xranit &ti dann=e <n>v sejfe u seb* doma.<n><e>",
- "Tebe nugno vvesti v komp%yter <n>parol% i lohin teti Cloiz=. <n>Navernoe, ona xranit &ti dann=e <n>u seb* doma.<n><e>",
- "Wtob= vojti v komp%yter, tebe <n>nugno znat% parol% i lohin <n>teti Cloiz=. Vozmogno, ona <n>xranit &ti dann=e u seb* doma.<n><e>",
- // 07
- "Skoree vseho, perv=j <n>r=qah kotla upravl*et vtor=m <n>i tret%im.<n><e>",
- "Skoree vseho, perv=j <n>r=qah kotla upravl*et vtor=m <n>i tret%im.<n><e>",
- "Dumay, s pomoQ%y r=qahov <n>mogno ponigat% v kotle <n>davlenie i temperaturu vod=.<n><e>",
- // 08
- "N&nsi, u men* net nikakix idej. <n>Bud% ostorogna, ladno?<n><e>",
- "N&nsi, u men* net nikakix idej. <n>Bud% ostorogna, ladno?<n><e>",
- "N&nsi, u men* net nikakix idej. <n>Bud% ostorogna, ladno?<n><e>",
- // 09
- "Dumay, tebe pomoget tet* <n>Cloiza. Ona OBOGAET <n>pr*tat% veQi!<n><e>",
- "Dumay, tebe pomoget tet* Cloiza.<n><e>",
- "Kak pogivaet tet* Cloiza? <n>U nee takoj krasiv=j dom!<n><e>",
- // 10
- "Na zamke sejfa bukv= hreqeskoho <n>alfavita, a v sekretere teti <n>Cloiz= est% zapiska s hreqeskimi <n>bukvami. <n>Navern*ka, oni kak-to sv*zan=!<n><e>",
- "Na zamke sejfa bukv= hreqeskoho <n>alfavita. Navern*ka, hde-to v dome teti <n>Cloiz= est% zapiska s hreqeskimi <n>bukvami.<n><e>",
- "Na zamke sejfa bukv= hreqeskoho <n>alfavita.<n><e>",
- // 11
- "Kagets*, v wkatulke sejfa est% <n>qto-to vagnoe!<n><e>",
- "Dumay, tet* Cloiza xranit v <n>sejfe qto-to vagnoe.<n><e>",
- "Vot tak zadaqka!<n><e>",
- // 12
- "T= mogew% ispol%zovat% lohin i <n>parol% teti Cloiz=, qtob= vojti <n>v hlavn=j wkol%n=j komp%yter. <n>Navern*ka, on naxodits* v <n>uqitel%skoj.<n><e>",
- "T= mogew% ispol%zovat% lohin i <n>parol% teti Cloiz=, qtob= vojti <n>v hlavn=j komp%yter wkol=.<n><e>",
- "N&nsi, a t= uverena, qto tet* <n>Cloiza razrewila tebe vse <n>osmotret%?<n><e>",
- // 13
- "Tet* Cloiza xranit svoj lohin <n>i parol% v wkatulke, kotora* <n>stoit v sejfe.<n><e>",
- "Skoree vseho, tet* Cloiza <n>pr*qet svoj lohin i parol% <n>v sejfe.<n><e>",
- "Tet* Cloiza obogaet pr*tat% <n>veQi! Tebe nugno kak sleduet <n>osmotret% ee dom.<n><e>",
- // 14
- "N&nsi, &to oqen% opasno! <n>Tebe nugno najti to, qto budet <n>dergat% hazovuy trubu. <n>Tohda t= smogew% vz*t% <n>boltorez!<n><e>",
- "PoiQi to, qem mogno zamenit% <n>boltorez pod hazovoj truboj.<n><e>",
- "N&nsi, &to oqen% opasno!<n>PoiQi to, qto budet dergat%<n>hazovuy trubu vmesto<n>boltoreza.<n><e>",
- // 15
- "(ep% pererezana. Teper% tebe <n>nugno dvihat% r=qahi kotla, <n>qtob= pokazani* datqikov <n>sootvetstvovali sxeme.<n><e>",
- "V kotel%noj dolgna b=t% <n>sxema s pravil%n=mi <n>pokazani*mi priborov.<n><e>",
- "Tebe nugno dvihat% r=qahi, <n>qtob= snizit% davlenie.<n><e>",
- // 16
- "N&nsi! Moget b=t%, kod hde-to <n>v kotel%noj? Vnimatel%no <n>osmotri sten=.<n><e>",
- "N&nsi! Moget b=t%, kod hde-to <n>v kotel%noj?<n><e>",
- "T= xorowo osmotrela kotel%nuy?<n><e>",
- // 17
- "Izvini, N&nsi. U men* net <n>nikakix idej.<n><e>",
- "Izvini, N&nsi. U men* net <n>nikakix idej.<n><e>",
- "Izvini, N&nsi. U men* net <n>nikakix idej.<n><e>",
- // 18
- "Pojdi v biblioteku i vse tam <n>osmotri. Dumay, t= uznaew% <n>mnoho interesnoho.<n><e>",
- "Poqemu b= tebe ne sxodit% v <n>biblioteku? T= najdew% tam <n>mnoho interesnoho.<n><e>",
- "Tebe nugno pojti tuda, hde <n>mogno poqitat% interesn=e <n>knihi.<n><e>",
- // 19
- "Y dumay, zapasnoj klyq ot <n>biblioteki spr*tan v dome <n>teti Cloiz=. Prover% sten=. <n>Tam dolgen b=t% sejf.<n><e>",
- "PoiQi zapasnoj klyq <n>ot biblioteki v <n>dome teti Cloiz=.<n><e>",
- "Tet* Cloiza - bibliotekar%. U nee <n>navern*ka est% klyq ot <n>biblioteki.<n><e>",
- // 20
- "Vnimatel%no osmotri <n>kotel%nuy.<n><e>",
- "V wkole mnoho razn=x <n>pomeQenij. T= uge <n>osmotrela podval?<n><e>",
- "V wkole est% mnoho razn=x <n>pomeQenij. T= uge vse <n>osmotrela?<n><e>",
- // 21
- "Na zamke kotel%noj bukv= <n>napisan= wriftom Brajl*. <n>PoiQi parol% v <n>komp%ytere.<n><e>",
- "Na zamke kotel%noj bukv= <n>napisan= wriftom Brajl*. <n>PoiQi parol% v <n>komp%ytere.<n><e>",
- "Bukv= na zamke kotel%noj - <n>wrift Brajl*. Takim ge nugno <n>sdelat% i parol%.<n><e>",
- // 22
- "T= znaew% parol% v kotel%nuy! <n>V biblioteke est% &nciklopedi*, <n>kotora* pomoget perevesti eho <n>v wrift Brajl*.<n><e>",
- "T= znaew% parol%! Teper% <n>nugno perevesti eho v wrift <n>Brajl*.<n><e>",
- "T= znaew% parol%! Teper% nugno <n>perevesti eho v wrift Brajl*.<n><e>",
- // 23
- "Dumay, v podvale est% mnoho <n>ulik. N&nsi, bud% ostorogna <n>so star=m kotlom.<n><e>",
- "Dumay, v podvale est% mnoho <n>ulik.<n><e>",
- "Esli b= * rabotala v kotel%noj, <n>* zapisala b= kod na samom <n>vidnom meste.<n><e>",
- // 24
- "Vnimatel%no posmotri na <n>datu osnovani* wkol=.<n><e>",
- "Vnimatel%no osmotri kotel%nuy. <n>Kod dolgen b=t% hde-to tam.<n><e>",
- "Esli b= * rabotala v kotel%noj, <n>* zapisala b= kod na samom <n>vidnom meste.<n><e>",
- // 25
- "Opustis% na koleni i laj, kak sobaka!<n><e>",
- "Opustis% na koleni i laj, kak sobaka!<n><e>",
- "Opustis% na koleni i laj, kak sobaka!<n><e>",
+{ // Russian
+ // 00
+ "N&nsi, * ne znay, qem pomoq%. <n>Bud% ostorogna.<n><e>",
+ "N&nsi, * ne znay, qem pomoq%. <n>Bud% ostorogna.<n><e>",
+ "N&nsi, * ne znay, qem pomoq%. <n>Bud% ostorogna.<n><e>",
+ // 01
+ "Najdi wkafqik ubitoho. <n>Tam mohut b=t% uliki.<n><e>",
+ "Y b= na tvoem meste ob=skal <n>mesto prestupleni*.<n><e>",
+ "N&nsi, poprobuj naqat% s <n>samoho naqala!<n><e>",
+ // 02
+ "N&nsi, poprobuj otkr=t% <n>wkafqik Dgeka. Navernoe, u neho <n>ne oqen% slogn=j kod. <n>Moget b=t%, u teb* vse <n>poluqits*, esli zamenit% <n>bukv= v eho imeni na <n>cifr=. Kak na telefone.<n><e>",
+ "Kod k moemu wkafqiku sv*zan <n>s moim imenem.<n><e>",
+ "Wtob= uznat% kod k wkafqiku <n>Dgeka, nugno zamenit% bukv= v <n>eho imeni na cifr=.<n><e>",
+ // 03
+ "T= xorowo osmotrela wkafqik <n>Dgeka? Moget, iz neho qto-to <n>v=palo?<n><e>",
+ "Osmotri wkafqik. Tam dolgno <n>b=t% qto-to interesnoe.<n><e>",
+ "N&nsi, bud% ostorogna. <n>)kafqik Dgeka opeqatan <n>policiej.<n><e>",
+ // 04
+ "Ispol%zuj steklorez, qtob= <n>otkr=t% okno s bokovoj <n>storon= wkol=.<n><e>",
+ "Navernoe, Dgek Rodgers <n>ispol%zoval steklorez ili <n>nog, qtob= popast% v <n>wkolu.<n><e>",
+ "N&nsi, bud% ostorogna. <n>)kafqik Dgeka opeqatan <n>policiej.<n><e>",
+ // 05
+ "V uqitel%skoj dolgen b=t% <n>komp%yter. T= mogew% tuda <n>popast%?<n><e>",
+ "V uqitel%skoj dolgn= b=t% <n>kakie-to uliki. Osmotri stol <n>s komp%yterom.<n><e>",
+ "Ne mohu poverit%, qto t= <n>popala v uqitel%skuy! <n>Dumay, t= najdew% tam <n>qto-to vagnoe.<n><e>",
+ // 06
+ "Tebe nugno vvesti v komp%yter <n>parol% i lohin teti Cloiz=. <n>Po-moemu, ona xranit &ti dann=e <n>v sejfe u seb* doma.<n><e>",
+ "Tebe nugno vvesti v komp%yter <n>parol% i lohin teti Cloiz=. <n>Navernoe, ona xranit &ti dann=e <n>u seb* doma.<n><e>",
+ "Wtob= vojti v komp%yter, tebe <n>nugno znat% parol% i lohin <n>teti Cloiz=. Vozmogno, ona <n>xranit &ti dann=e u seb* doma.<n><e>",
+ // 07
+ "Skoree vseho, perv=j <n>r=qah kotla upravl*et vtor=m <n>i tret%im.<n><e>",
+ "Skoree vseho, perv=j <n>r=qah kotla upravl*et vtor=m <n>i tret%im.<n><e>",
+ "Dumay, s pomoQ%y r=qahov <n>mogno ponigat% v kotle <n>davlenie i temperaturu vod=.<n><e>",
+ // 08
+ "N&nsi, u men* net nikakix idej. <n>Bud% ostorogna, ladno?<n><e>",
+ "N&nsi, u men* net nikakix idej. <n>Bud% ostorogna, ladno?<n><e>",
+ "N&nsi, u men* net nikakix idej. <n>Bud% ostorogna, ladno?<n><e>",
+ // 09
+ "Dumay, tebe pomoget tet* <n>Cloiza. Ona OBOGAET <n>pr*tat% veQi!<n><e>",
+ "Dumay, tebe pomoget tet* Cloiza.<n><e>",
+ "Kak pogivaet tet* Cloiza? <n>U nee takoj krasiv=j dom!<n><e>",
+ // 10
+ "Na zamke sejfa bukv= hreqeskoho <n>alfavita, a v sekretere teti <n>Cloiz= est% zapiska s hreqeskimi <n>bukvami. <n>Navern*ka, oni kak-to sv*zan=!<n><e>",
+ "Na zamke sejfa bukv= hreqeskoho <n>alfavita. Navern*ka, hde-to v dome teti <n>Cloiz= est% zapiska s hreqeskimi <n>bukvami.<n><e>",
+ "Na zamke sejfa bukv= hreqeskoho <n>alfavita.<n><e>",
+ // 11
+ "Kagets*, v wkatulke sejfa est% <n>qto-to vagnoe!<n><e>",
+ "Dumay, tet* Cloiza xranit v <n>sejfe qto-to vagnoe.<n><e>",
+ "Vot tak zadaqka!<n><e>",
+ // 12
+ "T= mogew% ispol%zovat% lohin i <n>parol% teti Cloiz=, qtob= vojti <n>v hlavn=j wkol%n=j komp%yter. <n>Navern*ka, on naxodits* v <n>uqitel%skoj.<n><e>",
+ "T= mogew% ispol%zovat% lohin i <n>parol% teti Cloiz=, qtob= vojti <n>v hlavn=j komp%yter wkol=.<n><e>",
+ "N&nsi, a t= uverena, qto tet* <n>Cloiza razrewila tebe vse <n>osmotret%?<n><e>",
+ // 13
+ "Tet* Cloiza xranit svoj lohin <n>i parol% v wkatulke, kotora* <n>stoit v sejfe.<n><e>",
+ "Skoree vseho, tet* Cloiza <n>pr*qet svoj lohin i parol% <n>v sejfe.<n><e>",
+ "Tet* Cloiza obogaet pr*tat% <n>veQi! Tebe nugno kak sleduet <n>osmotret% ee dom.<n><e>",
+ // 14
+ "N&nsi, &to oqen% opasno! <n>Tebe nugno najti to, qto budet <n>dergat% hazovuy trubu. <n>Tohda t= smogew% vz*t% <n>boltorez!<n><e>",
+ "PoiQi to, qem mogno zamenit% <n>boltorez pod hazovoj truboj.<n><e>",
+ "N&nsi, &to oqen% opasno!<n>PoiQi to, qto budet dergat%<n>hazovuy trubu vmesto<n>boltoreza.<n><e>",
+ // 15
+ "(ep% pererezana. Teper% tebe <n>nugno dvihat% r=qahi kotla, <n>qtob= pokazani* datqikov <n>sootvetstvovali sxeme.<n><e>",
+ "V kotel%noj dolgna b=t% <n>sxema s pravil%n=mi <n>pokazani*mi priborov.<n><e>",
+ "Tebe nugno dvihat% r=qahi, <n>qtob= snizit% davlenie.<n><e>",
+ // 16
+ "N&nsi! Moget b=t%, kod hde-to <n>v kotel%noj? Vnimatel%no <n>osmotri sten=.<n><e>",
+ "N&nsi! Moget b=t%, kod hde-to <n>v kotel%noj?<n><e>",
+ "T= xorowo osmotrela kotel%nuy?<n><e>",
+ // 17
+ "Izvini, N&nsi. U men* net <n>nikakix idej.<n><e>",
+ "Izvini, N&nsi. U men* net <n>nikakix idej.<n><e>",
+ "Izvini, N&nsi. U men* net <n>nikakix idej.<n><e>",
+ // 18
+ "Pojdi v biblioteku i vse tam <n>osmotri. Dumay, t= uznaew% <n>mnoho interesnoho.<n><e>",
+ "Poqemu b= tebe ne sxodit% v <n>biblioteku? T= najdew% tam <n>mnoho interesnoho.<n><e>",
+ "Tebe nugno pojti tuda, hde <n>mogno poqitat% interesn=e <n>knihi.<n><e>",
+ // 19
+ "Y dumay, zapasnoj klyq ot <n>biblioteki spr*tan v dome <n>teti Cloiz=. Prover% sten=. <n>Tam dolgen b=t% sejf.<n><e>",
+ "PoiQi zapasnoj klyq <n>ot biblioteki v <n>dome teti Cloiz=.<n><e>",
+ "Tet* Cloiza - bibliotekar%. U nee <n>navern*ka est% klyq ot <n>biblioteki.<n><e>",
+ // 20
+ "Vnimatel%no osmotri <n>kotel%nuy.<n><e>",
+ "V wkole mnoho razn=x <n>pomeQenij. T= uge <n>osmotrela podval?<n><e>",
+ "V wkole est% mnoho razn=x <n>pomeQenij. T= uge vse <n>osmotrela?<n><e>",
+ // 21
+ "Na zamke kotel%noj bukv= <n>napisan= wriftom Brajl*. <n>PoiQi parol% v <n>komp%ytere.<n><e>",
+ "Na zamke kotel%noj bukv= <n>napisan= wriftom Brajl*. <n>PoiQi parol% v <n>komp%ytere.<n><e>",
+ "Bukv= na zamke kotel%noj - <n>wrift Brajl*. Takim ge nugno <n>sdelat% i parol%.<n><e>",
+ // 22
+ "T= znaew% parol% v kotel%nuy! <n>V biblioteke est% &nciklopedi*, <n>kotora* pomoget perevesti eho <n>v wrift Brajl*.<n><e>",
+ "T= znaew% parol%! Teper% <n>nugno perevesti eho v wrift <n>Brajl*.<n><e>",
+ "T= znaew% parol%! Teper% nugno <n>perevesti eho v wrift Brajl*.<n><e>",
+ // 23
+ "Dumay, v podvale est% mnoho <n>ulik. N&nsi, bud% ostorogna <n>so star=m kotlom.<n><e>",
+ "Dumay, v podvale est% mnoho <n>ulik.<n><e>",
+ "Esli b= * rabotala v kotel%noj, <n>* zapisala b= kod na samom <n>vidnom meste.<n><e>",
+ // 24
+ "Vnimatel%no posmotri na <n>datu osnovani* wkol=.<n><e>",
+ "Vnimatel%no osmotri kotel%nuy. <n>Kod dolgen b=t% hde-to tam.<n><e>",
+ "Esli b= * rabotala v kotel%noj, <n>* zapisala b= kod na samom <n>vidnom meste.<n><e>",
+ // 25
+ "Opustis% na koleni i laj, kak sobaka!<n><e>",
+ "Opustis% na koleni i laj, kak sobaka!<n><e>",
+ "Opustis% na koleni i laj, kak sobaka!<n><e>",
}
};
const Common::Array<const char *> _nancy1TelephoneRinging = {
- "ringing...<n><e>", // English
- "Hudki... <n><e>" // Russian
+ "ringing...<n><e>", // English
+ "Hudki... <n><e>" // Russian
};
const Common::Array<const char *> _nancy1EventFlagNames = {
- "Tried the locker",
- "Locker open",
- "Read Kanji",
- "Seen the poster",
- "Has magazine",
- "Viewed the tape",
- "Read Literature book",
- "Gone To Teachers Lounge (Found Backpack)",
- "Seen Paper",
- "Researched drug",
- "Has Letter",
- "Met Hal",
- "Hal confessed",
- "Hal said date",
- "Hal told Connie",
- "Hal said lie",
- "Hal told Daryl",
- "Hal told Hulk",
- "Hal said injury",
- "Met Connie",
- "Connie confessed",
- "Connie suspicious",
- "Connie worried",
- "Connie scared",
- "Connie told Hulk",
- "Connie said lie",
- "Connie told Hal",
- "Connie said load",
- "Connie told Daryl",
- "Met Hulk",
- "Hulk confessed",
- "Hulk said money",
- "Hulk said locker",
- "Hulk said lie",
- "Hulk told Daryl",
- "Hulk worried",
- "Hulk angry",
- "Hulk told Hal",
- "Met Daryl",
- "Daryl confessed",
- "Set up sting",
- "Time for end game",
- "Player won game",
- "Stop player scrolling",
- "Generic 0",
- "Generic 1",
- "Generic 2",
- "Generic 3",
- "Generic 4",
- "Generic 5",
- "Generic 6",
- "Generic 7",
- "Generic 8",
- "Generic 9",
- "Jukebox Is Playing",
- "Daryl talked about Connie",
- "Daryl talked about Hal",
- "Daryl talked about Hulk",
- "Hulk told Connie",
- "Solved Boiler Door Puzzle",
- "Solved Aunt Safe Puzzle",
- "Boiler Has Chains on it",
- "Solved Boiler Lever Puzzle",
- "Generic 10",
- "Generic 11",
- "Generic 12",
- "Generic 13",
- "Generic 14",
- "Generic 15",
- "Generic 16",
- "Generic 17",
- "Generic 18",
- "Generic 19",
- "Generic 20",
- "Generic 21",
- "Generic 22",
- "Generic 23",
- "Generic 24",
- "Generic 25",
- "Generic 26",
- "Generic 27",
- "Generic 28",
- "Generic 29",
- "Generic 30",
- "Lounge Window Open",
- "Tried Computer",
- "Seen Aunt Safe",
- "Boiler Die",
- "Kitchen Die",
- "Solved Slider Puzzle",
- "Tried Library Door",
- "Seen Boiler Door",
- "Player Has Boiler Pwd",
- "Connie Said Date",
- "Connie Chickens",
- "Hal Chickens",
- "Hulk Chickens",
- "Solved Boiler Lock",
- "Seen the drug depot robbery article",
- "Seen video camera in Jake's locker",
- "Has soup ladle",
- "HDIC 5 Loop",
- "HDIC 6 Loop",
- "HIC 5 Loop",
- "HIC 6 Loop",
- "HIC 7 Loop",
- "DIC 4 Loop",
- "DIC 5 Loop",
- "DIC 6 Loop",
- "DIC 7 Loop",
- "DIC 8 Loop",
- "DIC 9 Loop",
- "DIC 10 Loop",
- "DIC 11 Loop",
- "DIC 12 Loop",
- "DIC 13 Loop",
- "DIC 15 Loop",
- "DIC 16 Loop",
- "DIC 17 Loop",
- "DIC 18 Loop",
- "CIC 5 Loop",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty",
- "empty"
+ "Tried the locker",
+ "Locker open",
+ "Read Kanji",
+ "Seen the poster",
+ "Has magazine",
+ "Viewed the tape",
+ "Read Literature book",
+ "Gone To Teachers Lounge (Found Backpack)",
+ "Seen Paper",
+ "Researched drug",
+ "Has Letter",
+ "Met Hal",
+ "Hal confessed",
+ "Hal said date",
+ "Hal told Connie",
+ "Hal said lie",
+ "Hal told Daryl",
+ "Hal told Hulk",
+ "Hal said injury",
+ "Met Connie",
+ "Connie confessed",
+ "Connie suspicious",
+ "Connie worried",
+ "Connie scared",
+ "Connie told Hulk",
+ "Connie said lie",
+ "Connie told Hal",
+ "Connie said load",
+ "Connie told Daryl",
+ "Met Hulk",
+ "Hulk confessed",
+ "Hulk said money",
+ "Hulk said locker",
+ "Hulk said lie",
+ "Hulk told Daryl",
+ "Hulk worried",
+ "Hulk angry",
+ "Hulk told Hal",
+ "Met Daryl",
+ "Daryl confessed",
+ "Set up sting",
+ "Time for end game",
+ "Player won game",
+ "Stop player scrolling",
+ "Generic 0",
+ "Generic 1",
+ "Generic 2",
+ "Generic 3",
+ "Generic 4",
+ "Generic 5",
+ "Generic 6",
+ "Generic 7",
+ "Generic 8",
+ "Generic 9",
+ "Jukebox Is Playing",
+ "Daryl talked about Connie",
+ "Daryl talked about Hal",
+ "Daryl talked about Hulk",
+ "Hulk told Connie",
+ "Solved Boiler Door Puzzle",
+ "Solved Aunt Safe Puzzle",
+ "Boiler Has Chains on it",
+ "Solved Boiler Lever Puzzle",
+ "Generic 10",
+ "Generic 11",
+ "Generic 12",
+ "Generic 13",
+ "Generic 14",
+ "Generic 15",
+ "Generic 16",
+ "Generic 17",
+ "Generic 18",
+ "Generic 19",
+ "Generic 20",
+ "Generic 21",
+ "Generic 22",
+ "Generic 23",
+ "Generic 24",
+ "Generic 25",
+ "Generic 26",
+ "Generic 27",
+ "Generic 28",
+ "Generic 29",
+ "Generic 30",
+ "Lounge Window Open",
+ "Tried Computer",
+ "Seen Aunt Safe",
+ "Boiler Die",
+ "Kitchen Die",
+ "Solved Slider Puzzle",
+ "Tried Library Door",
+ "Seen Boiler Door",
+ "Player Has Boiler Pwd",
+ "Connie Said Date",
+ "Connie Chickens",
+ "Hal Chickens",
+ "Hulk Chickens",
+ "Solved Boiler Lock",
+ "Seen the drug depot robbery article",
+ "Seen video camera in Jake's locker",
+ "Has soup ladle",
+ "HDIC 5 Loop",
+ "HDIC 6 Loop",
+ "HIC 5 Loop",
+ "HIC 6 Loop",
+ "HIC 7 Loop",
+ "DIC 4 Loop",
+ "DIC 5 Loop",
+ "DIC 6 Loop",
+ "DIC 7 Loop",
+ "DIC 8 Loop",
+ "DIC 9 Loop",
+ "DIC 10 Loop",
+ "DIC 11 Loop",
+ "DIC 12 Loop",
+ "DIC 13 Loop",
+ "DIC 15 Loop",
+ "DIC 16 Loop",
+ "DIC 17 Loop",
+ "DIC 18 Loop",
+ "CIC 5 Loop",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty",
+ "empty"
};
#endif // NANCY1DATA_H
diff --git a/devtools/create_nancy/nancy2_data.h b/devtools/create_nancy/nancy2_data.h
index f4ee8bcfbef..75e4d3ffbc4 100644
--- a/devtools/create_nancy/nancy2_data.h
+++ b/devtools/create_nancy/nancy2_data.h
@@ -25,312 +25,251 @@
#include "types.h"
const GameConstants _nancy2Constants ={
- 18,
- 240,
- { }, // No Map state
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 },
- 15,
- 7,
- 7000
+ 18,
+ 240,
+ { }, // No Map state
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 },
+ 15,
+ 7,
+ 7000
};
const Common::Array<Common::Language> _nancy2LanguagesOrder = {
- Common::Language::EN_ANY,
- Common::Language::RU_RUS
+ Common::Language::EN_ANY,
+ Common::Language::RU_RUS
};
const Common::Array<Common::Array<ConditionalDialogue>> _nancy2ConditionalDialogue = {
{ // Dwayne, 7 responses + 2 repeats
- { 0, 816, "nda33",
- { { 0x32, kTrue }, { 0x76, kFalse } },
- { } },
- { 1, 817, "nda34",
- { { 0x31, kTrue }, { 0x77, kFalse } },
- { } },
- { 2, 820, "nda35",
- { { 0x37, kTrue }, { 0x78, kFalse }, { 0x4C, kFalse } },
- { } },
- { 3, 821, "nda15",
- { { 0x43, kTrue }, { 0x79, kFalse }, { 0x50, kFalse } },
- { } },
- { 4, 823, "nda19",
- { { 0x7B, kTrue }, { 0x7A, kFalse } },
- { } },
- { 5, 824, "nda22",
- { { 0x7C, kFalse }, { 0x44, kTrue } },
- { } },
- { 5, 824, "nda22",
- { { 0x7C, kFalse }, { 0x44, kFalse }, { 0x40, kTrue } },
- { } },
- { 6, 826, "nda27",
- { { 0x7E, kFalse }, { 0x38, kTrue } },
- { } },
- { 6, 826, "nda27",
- { { 0x7E, kFalse }, { 0x38, kFalse }, { 0x3A, kTrue } },
- { } },
- { 7, 829, "nda28",
- { { 0x27, kTrue }, { 0x7F, kFalse } },
- { } }
+ { 0, 816, "nda33",
+ { { kEv, 0x32, kTrue }, { kEv, 0x76, kFalse } } },
+ { 1, 817, "nda34",
+ { { kEv, 0x31, kTrue }, { kEv, 0x77, kFalse } } },
+ { 2, 820, "nda35",
+ { { kEv, 0x37, kTrue }, { kEv, 0x78, kFalse }, { kEv, 0x4C, kFalse } } },
+ { 3, 821, "nda15",
+ { { kEv, 0x43, kTrue }, { kEv, 0x79, kFalse }, { kEv, 0x50, kFalse } } },
+ { 4, 823, "nda19",
+ { { kEv, 0x7B, kTrue }, { kEv, 0x7A, kFalse } } },
+ { 5, 824, "nda22",
+ { { kEv, 0x7C, kFalse }, { kEv, 0x44, kTrue } } },
+ { 5, 824, "nda22",
+ { { kEv, 0x7C, kFalse }, { kEv, 0x44, kFalse }, { kEv, 0x40, kTrue } } },
+ { 6, 826, "nda27",
+ { { kEv, 0x7E, kFalse }, { kEv, 0x38, kTrue } } },
+ { 6, 826, "nda27",
+ { { kEv, 0x7E, kFalse }, { kEv, 0x38, kFalse }, { kEv, 0x3A, kTrue } } },
+ { 7, 829, "nda28",
+ { { kEv, 0x27, kTrue }, { kEv, 0x7F, kFalse } } }
},
{ // Rick, 4 responses + 1 repeat
- { 8, 729, "NRD29",
- { { 0x73, kFalse }, { 0x44, kTrue } },
- { } },
- { 8, 729, "NRD29",
- { { 0x73, kFalse }, { 0x44, kFalse }, { 0x40, kTrue } },
- { } },
- { 9, 728, "NRD28",
- { { 0x32, kTrue }, { 0x72, kFalse } },
- { } },
- { 10, 717, "NRD18",
- { { 0x30, kTrue }, { 0x70, kFalse } },
- { } },
- { 11, 721, "NRD21",
- { { 0x97, kTrue }, { 0x71, kFalse } },
- { } }
+ { 8, 729, "NRD29",
+ { { kEv, 0x73, kFalse }, { kEv, 0x44, kTrue } } },
+ { 8, 729, "NRD29",
+ { { kEv, 0x73, kFalse }, { kEv, 0x44, kFalse }, { kEv, 0x40, kTrue } } },
+ { 9, 728, "NRD28",
+ { { kEv, 0x32, kTrue }, { kEv, 0x72, kFalse } } },
+ { 10, 717, "NRD18",
+ { { kEv, 0x30, kTrue }, { kEv, 0x70, kFalse } } },
+ { 11, 721, "NRD21",
+ { { kEv, 0x97, kTrue }, { kEv, 0x71, kFalse } } }
},
{ // Millie, 2 responses
- { 12, 317, "NPR12",
- { { 0x34, kTrue }, { 0x85, kFalse } },
- { } },
- { 13, 321, "NPR15",
- { { 0x40, kTrue }, { 0x86, kFalse } },
- { } }
+ { 12, 317, "NPR12",
+ { { kEv, 0x34, kTrue }, { kEv, 0x85, kFalse } } },
+ { 13, 321, "NPR15",
+ { { kEv, 0x40, kTrue }, { kEv, 0x86, kFalse } } }
},
{ // Lillian, 4 responses + 1 repeat
- { 14, 503, "NLR07",
- { { 0x41, kTrue }, { 0x81, kFalse } },
- { } },
- { 15, 504, "NLR08",
- { { 0x97, kTrue }, { 0x82, kFalse } },
- { } },
- { 16, 510, "NLR15",
- { { 0x83, kFalse }, { 0x44, kTrue } },
- { } },
- { 16, 510, "NLR15",
- { { 0x83, kFalse }, { 0x44, kFalse }, { 0x40, kTrue } },
- { } },
- { 17, 512, "NLR17",
- { { 0x84, kTrue }, { 0x35, kTrue }, { 0x83, kTrue }, { 0x7B, kFalse } },
- { } }
+ { 14, 503, "NLR07",
+ { { kEv, 0x41, kTrue }, { kEv, 0x81, kFalse } } },
+ { 15, 504, "NLR08",
+ { { kEv, 0x97, kTrue }, { kEv, 0x82, kFalse } } },
+ { 16, 510, "NLR15",
+ { { kEv, 0x83, kFalse }, { kEv, 0x44, kTrue } } },
+ { 16, 510, "NLR15",
+ { { kEv, 0x83, kFalse }, { kEv, 0x44, kFalse }, { kEv, 0x40, kTrue } } },
+ { 17, 512, "NLR17",
+ { { kEv, 0x84, kTrue }, { kEv, 0x35, kTrue }, { kEv, 0x83, kTrue }, { kEv, 0x7B, kFalse } } }
},
{ // Ned, 9 responses
- { 18, 3007, "NNP08",
- { { 0x34, kTrue }, { 0x65, kFalse }, { 0x49, kFalse } },
- { } },
- { 19, 3010, "NNP11",
- { { 0x29, kTrue }, { 0x4F, kFalse }, { 0x66, kFalse } },
- { } },
- { 20, 3013, "NNP14",
- { { 0x67, kFalse } },
- { { 0xF, kTrue } } },
- { 21, 3014, "NNP15",
- { { 0x69, kTrue }, { 0x2D, kFalse }, { 0x5C, kFalse } },
- { } },
- { 22, 3015, "NNP16",
- { { 0x44, kTrue }, { 0x40, kTrue }, { 0x3B, kFalse }, { 0x6A, kFalse } },
- { } },
- { 23, 3016, "NNP17",
- { { 0x38, kTrue }, { 0x39, kFalse }, { 0x6B, kFalse }, { 0x3A, kTrue } },
- { } },
- { 24, 3017, "NNP28",
- { { 0x39, kTrue }, { 0x6B, kTrue }, { 0x6C, kFalse } },
- { } },
- { 25, 3019, "NNP20",
- { { 0x43, kTrue }, { 0x50, kFalse }, { 0x6D, kFalse } },
- { } },
- { 26, 3020, "NNP21",
- { { 0x43, kTrue }, { 0x50, kFalse }, { 0x6E, kFalse } },
- { } }
+ { 18, 3007, "NNP08",
+ { { kEv, 0x34, kTrue }, { kEv, 0x65, kFalse }, { kEv, 0x49, kFalse } } },
+ { 19, 3010, "NNP11",
+ { { kEv, 0x29, kTrue }, { kEv, 0x4F, kFalse }, { kEv, 0x66, kFalse } } },
+ { 20, 3013, "NNP14",
+ { { kEv, 0x67, kFalse }, { kIn, 0xF, kTrue } } },
+ { 21, 3014, "NNP15",
+ { { kEv, 0x69, kTrue }, { kEv, 0x2D, kFalse }, { kEv, 0x5C, kFalse } } },
+ { 22, 3015, "NNP16",
+ { { kEv, 0x44, kTrue }, { kEv, 0x40, kTrue }, { kEv, 0x3B, kFalse }, { kEv, 0x6A, kFalse } } },
+ { 23, 3016, "NNP17",
+ { { kEv, 0x38, kTrue }, { kEv, 0x39, kFalse }, { kEv, 0x6B, kFalse }, { kEv, 0x3A, kTrue } } },
+ { 24, 3017, "NNP28",
+ { { kEv, 0x39, kTrue }, { kEv, 0x6B, kTrue }, { kEv, 0x6C, kFalse } } },
+ { 25, 3019, "NNP20",
+ { { kEv, 0x43, kTrue }, { kEv, 0x50, kFalse }, { kEv, 0x6D, kFalse } } },
+ { 26, 3020, "NNP21",
+ { { kEv, 0x43, kTrue }, { kEv, 0x50, kFalse }, { kEv, 0x6E, kFalse } } }
},
{ // Bess, 18 responses
- { 27, 3123, "NBES32g",
- { { 0x50, kTrue }, { 0x2C, kFalse }, { 0x9B, kFalse } },
- { } },
- { 28, 3124, "NBES35",
- { { 0x55, kTrue }, { 0x3E, kFalse }, { 0x9C, kFalse } },
- { } },
- { 29, 3125, "NBES36",
- { { 0x56, kTrue }, { 0x4C, kFalse }, { 0x9D, kFalse } },
- { } },
- { 30, 3127, "NBES38",
- { { 0x57, kTrue }, { 0x3B, kFalse }, { 0x9F, kFalse } },
- { } },
- { 31, 3128, "NBES39g",
- { { 0x84, kTrue }, { 0x35, kFalse }, { 0xA0, kFalse } },
- { } },
- { 32, 3129, "NBES41g",
- { { 0x84, kTrue }, { 0x23, kTrue }, { 0xA1, kFalse } },
- { } },
- { 33, 3130, "NBES43",
- { { 0x7B, kTrue }, { 0xA2, kFalse } },
- { } },
- { 34, 3131, "NBES46",
- { { 0x58, kTrue }, { 0xA3, kFalse } },
- { } },
- { 35, 3133, "NBES48",
- { { 0x3D, kTrue }, { 0xA6, kFalse } },
- { { 0xC, kFalse } } },
- { 36, 3136, "NBES53",
- { { 0x40, kTrue }, { 0xA8, kFalse } },
- { } },
- { 37, 3137, "NBES55",
- { { 0x55, kFalse }, { 0x3E, kTrue }, { 0xA9, kFalse } },
- { } },
- { 38, 3138, "NBES61g",
- { { 0x40, kTrue }, { 0x44, kFalse }, { 0xAA, kFalse } },
- { } },
- { 39, 3139, "NBES65",
- { { 0x2A, kTrue }, { 0x2B, kFalse }, { 0x9B, kFalse } },
- { } },
- { 40, 3140, "NBES66",
- { { 0x53, kTrue }, { 0x4A, kFalse }, { 0xAB, kFalse } },
- { } },
- { 41, 3141, "NBES67g",
- { { 0x48, kTrue }, { 0xAC, kFalse } },
- { } },
- { 42, 3142, "NBES72",
- { { 0xA8, kTrue }, { 0x44, kTrue }, { 0xAD, kFalse } },
- { } },
+ { 27, 3123, "NBES32g",
+ { { kEv, 0x50, kTrue }, { kEv, 0x2C, kFalse }, { kEv, 0x9B, kFalse } } },
+ { 28, 3124, "NBES35",
+ { { kEv, 0x55, kTrue }, { kEv, 0x3E, kFalse }, { kEv, 0x9C, kFalse } } },
+ { 29, 3125, "NBES36",
+ { { kEv, 0x56, kTrue }, { kEv, 0x4C, kFalse }, { kEv, 0x9D, kFalse } } },
+ { 30, 3127, "NBES38",
+ { { kEv, 0x57, kTrue }, { kEv, 0x3B, kFalse }, { kEv, 0x9F, kFalse } } },
+ { 31, 3128, "NBES39g",
+ { { kEv, 0x84, kTrue }, { kEv, 0x35, kFalse }, { kEv, 0xA0, kFalse } } },
+ { 32, 3129, "NBES41g",
+ { { kEv, 0x84, kTrue }, { kEv, 0x23, kTrue }, { kEv, 0xA1, kFalse } } },
+ { 33, 3130, "NBES43",
+ { { kEv, 0x7B, kTrue }, { kEv, 0xA2, kFalse } } },
+ { 34, 3131, "NBES46",
+ { { kEv, 0x58, kTrue }, { kEv, 0xA3, kFalse } } },
+ { 35, 3133, "NBES48",
+ { { kEv, 0x3D, kTrue }, { kEv, 0xA6, kFalse }, { kIn, 0xC, kFalse } } },
+ { 36, 3136, "NBES53",
+ { { kEv, 0x40, kTrue }, { kEv, 0xA8, kFalse } } },
+ { 37, 3137, "NBES55",
+ { { kEv, 0x55, kFalse }, { kEv, 0x3E, kTrue }, { kEv, 0xA9, kFalse } } },
+ { 38, 3138, "NBES61g",
+ { { kEv, 0x40, kTrue }, { kEv, 0x44, kFalse }, { kEv, 0xAA, kFalse } } },
+ { 39, 3139, "NBES65",
+ { { kEv, 0x2A, kTrue }, { kEv, 0x2B, kFalse }, { kEv, 0x9B, kFalse } } },
+ { 40, 3140, "NBES66",
+ { { kEv, 0x53, kTrue }, { kEv, 0x4A, kFalse }, { kEv, 0xAB, kFalse } } },
+ { 41, 3141, "NBES67g",
+ { { kEv, 0x48, kTrue }, { kEv, 0xAC, kFalse } } },
+ { 42, 3142, "NBES72",
+ { { kEv, 0xA8, kTrue }, { kEv, 0x44, kTrue }, { kEv, 0xAD, kFalse } } },
{ 43, 3144, "NBES76",
- { { 0x24, kTrue }, { 0xAE, kFalse } },
- { } },
+ { { kEv, 0x24, kTrue }, { kEv, 0xAE, kFalse } } },
{ 44, 3145, "NBES79g",
- { { 0x1F, kTrue }, { 0xAF, kFalse } },
- { } }
+ { { kEv, 0x1F, kTrue }, { kEv, 0xAF, kFalse } } }
},
{ // George, 6 responses
{ 45, 3207, "NGEO14",
- { { 0x68, kTrue }, { 0xB1, kFalse }, { 0x3D, kFalse } },
- { { 0xA, kFalse }} },
+ { { kEv, 0x68, kTrue }, { kEv, 0xB1, kFalse }, { kEv, 0x3D, kFalse }, { kIn, 0xA, kFalse } } },
{ 46, 3209, "NGEO16",
- { { 0x3D, kFalse }, { 0xB3, kFalse } },
- { { 0xA, kTrue }} },
+ { { kEv, 0x3D, kFalse }, { kEv, 0xB3, kFalse }, { kIn, 0xA, kTrue } } },
{ 47, 3210, "NGEO17",
- { { 0x3D, kTrue }, { 0xB4, kFalse } },
- { } },
+ { { kEv, 0x3D, kTrue }, { kEv, 0xB4, kFalse } } },
{ 48, 3213, "NGEO18",
- { { 0xB5, kFalse } },
- { { 0x4, kTrue }} },
+ { { kEv, 0xB5, kFalse }, { kIn, 0x4, kTrue } } },
{ 49, 3214, "NGEO19",
- { { 0x29, kTrue }, { 0x9A, kFalse }, { 0x4F, kFalse } },
- { } },
+ { { kEv, 0x29, kTrue }, { kEv, 0x9A, kFalse }, { kEv, 0x4F, kFalse } } },
{ 50, 3215, "NGEO20",
- { { 0xB6, kFalse }, { 0x49, kFalse } },
- { { 0xE, kTrue } } }
+ { { kEv, 0xB6, kFalse }, { kEv, 0x49, kFalse }, { kIn, 0xE, kTrue } } }
},
{ // Security guard, 3 responses + 1 repeat
{ 51, 401, "NG01",
- { { 0x3D, kFalse } },
- { { 0xA, kFalse }, { 0x4, kFalse } } },
+ { { kEv, 0x3D, kFalse }, { kIn, 0xA, kFalse }, { kIn, 0x4, kFalse } } },
{ 52, 403, "NG02",
- { { 0x75, kTrue } },
- { { 0x4, kFalse } } },
+ { { kEv, 0x75, kTrue }, { kIn, 0x4, kFalse } } },
{ 53, 409, "NG04",
- { },
- { { 0xA, kTrue } } },
+ { { kIn, 0xA, kTrue } } },
{ 53, 409, "NG04",
- { },
- { { 0xA, kFalse }, { 0x4, kTrue } } }
+ { { kIn, 0xA, kFalse }, { kIn, 0x4, kTrue } } }
},
{ // Mattie, 2 responses
{ 54, 215, "NMD20",
- { { 0x97, kTrue }, { 0x89, kFalse } },
- { } },
+ { { kEv, 0x97, kTrue }, { kEv, 0x89, kFalse } } },
{ 55, 230, "NMD31",
- { { 0x40, kTrue }, { 0x8A, kFalse } },
- { } }
+ { { kEv, 0x40, kTrue }, { kEv, 0x8A, kFalse } } }
}
};
const Common::Array<Goodbye> _nancy2Goodbyes = {
- { "NDA29", { { { 890, 891, 892, 893 }, {}, NOFLAG } } }, // Dwayne
- { "NRD35", { { { 791, 792, 793, 794 }, {}, NOFLAG } } }, // Rick
- { "NPR16", { { { 391, 392, 394 }, {}, NOFLAG } } }, // Millie
- { "NLR18", { { { 590, 591, 593 }, {}, NOFLAG } } }, // Lillian
- { "NPR16", { { { 3090, 3092, 3093 }, {}, NOFLAG } } }, // Ned
- { "NBES86", { { { 3190 }, {}, NOFLAG } } }, // Bess
- { "NGEO90", { { { 3290 }, {}, NOFLAG } } }, // George
- { "", { { {}, {}, NOFLAG } } }, // Security guard, no goodbye
- { "NMD32", { { { 290, 291, 292, 293 }, {}, NOFLAG } } }, // Mattie
+ { "NDA29", { { { 890, 891, 892, 893 }, {}, NOFLAG } } }, // Dwayne
+ { "NRD35", { { { 791, 792, 793, 794 }, {}, NOFLAG } } }, // Rick
+ { "NPR16", { { { 391, 392, 394 }, {}, NOFLAG } } }, // Millie
+ { "NLR18", { { { 590, 591, 593 }, {}, NOFLAG } } }, // Lillian
+ { "NPR16", { { { 3090, 3092, 3093 }, {}, NOFLAG } } }, // Ned
+ { "NBES86", { { { 3190 }, {}, NOFLAG } } }, // Bess
+ { "NGEO90", { { { 3290 }, {}, NOFLAG } } }, // George
+ { "", { { {}, {}, NOFLAG } } }, // Security guard, no goodbye
+ { "NMD32", { { { 290, 291, 292, 293 }, {}, NOFLAG } } }, // Mattie
};
const Common::Array<Common::Array<const char *>> _nancy2ConditionalDialogueTexts {
-{ // English
+{ // English
// 00
- "Have you met the prop master at Worldwide? She seems...rather strange.<h><n>", // nda33
- "I'm afraid that I'm not making a very good impression on Lillian. She doesn't seem to like me very much.<h><n>", // nda34
- "Do you know how I could get into the control room at the studio?<h><n>", // nda35
- "Can I get a pass that let's me get into the studio during the night?<h><n>", // ..nda15
- "I'm afraid I've upset Lillian - did she call about terminating my employment with the studio?<h><n>", // nda19
+ "Have you met the prop master at Worldwide? She seems...rather strange.<h><n>", // nda33
+ "I'm afraid that I'm not making a very good impression on Lillian. She doesn't seem to like me very much.<h><n>", // nda34
+ "Do you know how I could get into the control room at the studio?<h><n>", // nda35
+ "Can I get a pass that let's me get into the studio during the night?<h><n>", // ..nda15
+ "I'm afraid I've upset Lillian - did she call about terminating my employment with the studio?<h><n>", // nda19
// 05
- "Do you have many employees working for you at Worldwide?<h><n>", // nda22
- "What do you make of these threats against Rick? Mattie's very concerned about them.<h><n>", // nda27
- "The producer seems pretty upset lately - he's always yelling.<h><n>", // nda28
- "Tell me Rick, do you know a guy by the name of Owen Spayder?<h><n>", // NRD29
- "What's the story with the prop master?<h><n>", // NRD28
+ "Do you have many employees working for you at Worldwide?<h><n>", // nda22
+ "What do you make of these threats against Rick? Mattie's very concerned about them.<h><n>", // nda27
+ "The producer seems pretty upset lately - he's always yelling.<h><n>", // nda28
+ "Tell me Rick, do you know a guy by the name of Owen Spayder?<h><n>", // NRD29
+ "What's the story with the prop master?<h><n>", // NRD28
// 10
- "Can I ask your advice? Dwayne Powers is my agent - he's pretty good isn't he?<h><n>", // NRD18
- "So tell me Rick, who haven't you dated on 'Light Of Our Love'? You've got quite a reputation on the set.<h><n>", // NRD21
- "It must be wonderful to work with Rick Arlen. Is he really that exciting in real life as he is on stage?<h><n>", // NPR12
- "Do you know where I can find Owen Spayder? He's a stage hand, I believe.<h><n>", // NPR15
- "I thought you might be interested to know that I found a light clamp on the set. It looked as if it had been sawed off. That was no accident on the set - it was a deliberate attempt on Rick's life.<h><n>", // NLR07
+ "Can I ask your advice? Dwayne Powers is my agent - he's pretty good isn't he?<h><n>", // NRD18
+ "So tell me Rick, who haven't you dated on 'Light Of Our Love'? You've got quite a reputation on the set.<h><n>", // NRD21
+ "It must be wonderful to work with Rick Arlen. Is he really that exciting in real life as he is on stage?<h><n>", // NPR12
+ "Do you know where I can find Owen Spayder? He's a stage hand, I believe.<h><n>", // NPR15
+ "I thought you might be interested to know that I found a light clamp on the set. It looked as if it had been sawed off. That was no accident on the set - it was a deliberate attempt on Rick's life.<h><n>", // NLR07
// 15
- "Can I ask your advice on something? Rick's really been flirty with me - should I take him seriously?<h><n>", // NLR08
- "Can you tell me something about Owen Spayder?<h><n>", // NLR15
- "Lillian, I have reason to believe you're the one threatening Rick. I know for a fact you sent him those chocolates. <h><n>", // NLR17
- "I finally met the Rick Arlen. That man has an ego the size of Texas - he's worse than Daryl Gray!<h><n>", // NNP08
- "Ned, are you very good at riddles?<h><n>", // NNP11
+ "Can I ask your advice on something? Rick's really been flirty with me - should I take him seriously?<h><n>", // NLR08
+ "Can you tell me something about Owen Spayder?<h><n>", // NLR15
+ "Lillian, I have reason to believe you're the one threatening Rick. I know for a fact you sent him those chocolates. <h><n>", // NLR17
+ "I finally met the Rick Arlen. That man has an ego the size of Texas - he's worse than Daryl Gray!<h><n>", // NNP08
+ "Ned, are you very good at riddles?<h><n>", // NNP11
// 20
- "What do you think I should look for on that death threat tape?<h><n>", // NNP14
- "There's a locked area of the prop room. I wonder what the prop master is hiding there.<h><n>", // NNP15
- "I got into the locked area of the prop room and found an employee ID for one of Dwayne's contract workers, Owen Spayder.<h><n>", // NNP16
- "Guess what, I got a look at the letters Rick has been getting. Some of them have the letters cut out of magazines and some of them are typewritten. But get this, the 'Y' is dropped on the typewritten letters.<h><n>", // NNP17
- "This case is getting stranger by the minute. Now I found out that the prop master has a typewriter and guess what? The Y's on her machine are dropped!<h><n>", // NNP28
+ "What do you think I should look for on that death threat tape?<h><n>", // NNP14
+ "There's a locked area of the prop room. I wonder what the prop master is hiding there.<h><n>", // NNP15
+ "I got into the locked area of the prop room and found an employee ID for one of Dwayne's contract workers, Owen Spayder.<h><n>", // NNP16
+ "Guess what, I got a look at the letters Rick has been getting. Some of them have the letters cut out of magazines and some of them are typewritten. But get this, the 'Y' is dropped on the typewritten letters.<h><n>", // NNP17
+ "This case is getting stranger by the minute. Now I found out that the prop master has a typewriter and guess what? The Y's on her machine are dropped!<h><n>", // NNP28
// 25
- "I'd like to get into the studio at night, but it's locked. Any ideas?<h><n>", // .NNP20
- "I found a side entrance to the studio, but there's a keypad lock on it.<h><n>", // NNP21
- "I need to get into Lillian's office at night. I think there's more to her than meets the eye.<h><n>", // NBES32g
- "Now I need to find an access code to the system computers.<h><n>", // NBES35
- "If only I could find the password into the control room.<h><n>", // NBES36
+ "I'd like to get into the studio at night, but it's locked. Any ideas?<h><n>", // .NNP20
+ "I found a side entrance to the studio, but there's a keypad lock on it.<h><n>", // NNP21
+ "I need to get into Lillian's office at night. I think there's more to her than meets the eye.<h><n>", // NBES32g
+ "Now I need to find an access code to the system computers.<h><n>", // NBES35
+ "If only I could find the password into the control room.<h><n>", // NBES36
// 30
- "I can't get the employee log to print.<h><n>", // NBES38
- "You'll never guess what I found in Lillian's office. A bottle of castor oil.<h><n>", // NBES39g
- "Lillian must've been the one who sent Rick those threats. I found a bottle of castor oil and the number of a chocolate shop in her drawer.<h><n>", // NBES41g
- "Lillian just kicked me off the set!<h><n>", // NBES43
- "I found the sound mixer but am not sure what I am looking for.<h><n>", // NBES46
+ "I can't get the employee log to print.<h><n>", // NBES38
+ "You'll never guess what I found in Lillian's office. A bottle of castor oil.<h><n>", // NBES39g
+ "Lillian must've been the one who sent Rick those threats. I found a bottle of castor oil and the number of a chocolate shop in her drawer.<h><n>", // NBES41g
+ "Lillian just kicked me off the set!<h><n>", // NBES43
+ "I found the sound mixer but am not sure what I am looking for.<h><n>", // NBES46
// 35
- "If only I could find a surveillance video.<h><n>", // NBES48
- "I found an employee badge for an Owen Spayder in the lost and found.<h><n>", // NBES53
- "I found Millie's computer login.<h><n>", // NBES55
- "I really need to get into Dwayne's office. I need to find more information on this Owen Spayder guy. Do you think I should sneak into Dwayne's office?<h><n>", // NBES61g
- "I can't get into Dwayne's office.<h><n>", // NBES65
+ "If only I could find a surveillance video.<h><n>", // NBES48
+ "I found an employee badge for an Owen Spayder in the lost and found.<h><n>", // NBES53
+ "I found Millie's computer login.<h><n>", // NBES55
+ "I really need to get into Dwayne's office. I need to find more information on this Owen Spayder guy. Do you think I should sneak into Dwayne's office?<h><n>", // NBES61g
+ "I can't get into Dwayne's office.<h><n>", // NBES65
// 40
- "I can't get into Dwayne's briefcase.<h><n>", // NBES66
- "Dwayne's agency is not doing so well. I found all of these outstanding bills. I also found several checks that Mattie wrote to Dwayne.<h><n>", // NBES67g
- "I found out that Owen Spayder worked at the same theater where Dwayne and Mattie met.<h><n>", // NBES72
- "Oh Bess, this is awful. I just got a phony bomb threat in the mail!<h><n>", // NBES76
- "Lillian just called me. She wants me to meet her at the studio. Do you think I should go?<h><n>", // NBES79g
+ "I can't get into Dwayne's briefcase.<h><n>", // NBES66
+ "Dwayne's agency is not doing so well. I found all of these outstanding bills. I also found several checks that Mattie wrote to Dwayne.<h><n>", // NBES67g
+ "I found out that Owen Spayder worked at the same theater where Dwayne and Mattie met.<h><n>", // NBES72
+ "Oh Bess, this is awful. I just got a phony bomb threat in the mail!<h><n>", // NBES76
+ "Lillian just called me. She wants me to meet her at the studio. Do you think I should go?<h><n>", // NBES79g
// 45
- "Mattie got me a visitor's pass, but I don't see it anywhere.<h><n>", // NGEO14
- "I wonder how I can get into the sound stage.<h><n>", // NGEO16
- "Rick was almost killed by a falling klieg light!<h><n>", // NGEO17
- "I'm officially an extra on the set, but there's not much to do.<h><n>", // NGEO18
- "Are you any good at riddles?<h><n>", // NGEO19
+ "Mattie got me a visitor's pass, but I don't see it anywhere.<h><n>", // NGEO14
+ "I wonder how I can get into the sound stage.<h><n>", // NGEO16
+ "Rick was almost killed by a falling klieg light!<h><n>", // NGEO17
+ "I'm officially an extra on the set, but there's not much to do.<h><n>", // NGEO18
+ "Are you any good at riddles?<h><n>", // NGEO19
// 50
- "I found a pair of wire cutters!<h><n>", // NGEO20
- "Yes, Mattie Jensen left a visitor's pass for me. It should be listed under Nancy Drew.<h><n>", // NG01
- "Hi, I've been hired as an extra by the Powers Agency.<h><n>", // NG02
- "Hello...here is my pass.<h><n>", // NG04
- "Did Lillian and Rick date after you both broke up?<h><n>", // NMD20
+ "I found a pair of wire cutters!<h><n>", // NGEO20
+ "Yes, Mattie Jensen left a visitor's pass for me. It should be listed under Nancy Drew.<h><n>", // NG01
+ "Hi, I've been hired as an extra by the Powers Agency.<h><n>", // NG02
+ "Hello...here is my pass.<h><n>", // NG04
+ "Did Lillian and Rick date after you both broke up?<h><n>", // NMD20
// 55
- "Tell me, do you know someone by the name of Owen Spayder?<h><n>" // NMD31
+ "Tell me, do you know someone by the name of Owen Spayder?<h><n>" // NMD31
},
-{ // Russian
+{ // Russian
// 00
- "V= znakom= s zaveduyQej rekvizitom? Kagets*, ona nemnoho... stranna*.<h><n>",
+ "V= znakom= s zaveduyQej rekvizitom? Kagets*, ona nemnoho... stranna*.<h><n>",
"Po-moemu, * proizvela ploxoe vpeqatlenie na Lilian.<h><n>",
"Kak popast% v apparatnuy telestudii?<h><n>",
"Mogno poluqit% propusk, qtob= zaxodit% v telestudiy noq%y?<h><n>",
@@ -401,18 +340,18 @@ const Common::Array<Common::Array<const char *>> _nancy2ConditionalDialogueTexts
};
const Common::Array<Common::Array<const char *>> _nancy2GoodbyeTexts = {
-{ // English
- "Well, I should get back to the set. Thanks for your help.<h>", // NDA29
- "Listen, I gotta' go, Rick. Be careful, Okay?<h>", // NRD35
- "I should get back to the set. Goodbye!<h>", // NPR16
- "Well, I'll let you get back to your business.<h>", // NLR18
- "I should get back to the set. Goodbye!<h>", // NPR16
- "I'll talk to you later. Bye!<h>", // NBES86
- "Talk to you later.<h>", // NGEO90
+{ // English
+ "Well, I should get back to the set. Thanks for your help.<h>", // NDA29
+ "Listen, I gotta' go, Rick. Be careful, Okay?<h>", // NRD35
+ "I should get back to the set. Goodbye!<h>", // NPR16
+ "Well, I'll let you get back to your business.<h>", // NLR18
+ "I should get back to the set. Goodbye!<h>", // NPR16
+ "I'll talk to you later. Bye!<h>", // NBES86
+ "Talk to you later.<h>", // NGEO90
"", // No goodbye, empty string
- "Well, I'll see you later, Mattie.<h>", // NMD32
+ "Well, I'll see you later, Mattie.<h>", // NMD32
},
-{ // Russian
+{ // Russian
"Nu, mne pora. Spasibo za pomoQ%.<h>",
"Rik, mne nugno idti. Bud%te ostorogn=.<h>",
"Mne pora. Poka!<h>",
@@ -426,8 +365,8 @@ const Common::Array<Common::Array<const char *>> _nancy2GoodbyeTexts = {
};
const Common::Array<const char *> _nancy2TelephoneRinging = {
- "ringing...<n><e>", // English
- "Hudki... <n><e>" // Russian
+ "ringing...<n><e>", // English
+ "Hudki... <n><e>" // Russian
};
const Common::Array<const char *> _nancy2EventFlagNames = {
diff --git a/devtools/create_nancy/nancy3_data.h b/devtools/create_nancy/nancy3_data.h
index 49a95343fe3..2185df377b7 100644
--- a/devtools/create_nancy/nancy3_data.h
+++ b/devtools/create_nancy/nancy3_data.h
@@ -24,321 +24,238 @@
#include "types.h"
-const GameConstants _nancy3Constants ={
- 18,
- 336,
- { }, // No Map state
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 },
- 24,
- 7,
- 7000
+const GameConstants _nancy3Constants = {
+ 18,
+ 336,
+ { }, // No Map state
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 },
+ 24,
+ 7,
+ 4000
+};
+
+const SoundChannelInfo _nancy3to5SoundChannelInfo = {
+ 32, 14,
+ { 12, 13, 30 },
+ { 0, 1, 2, 3, 19, 26, 27, 29 },
+ { 4, 5, 6, 7, 8, 9, 10, 11, 17, 18, 20, 21, 22, 23, 24, 25, 31 }
};
const Common::Array<Common::Language> _nancy3LanguagesOrder = {
- Common::Language::EN_ANY,
- Common::Language::RU_RUS
+ Common::Language::EN_ANY,
+ Common::Language::RU_RUS
};
const Common::Array<Common::Array<ConditionalDialogue>> _nancy3ConditionalDialogue = {
{ // Abby, 13 responses
- { 0, 1050, "NAS50",
- { { 215, true }, { 49, false }, { 218, false } },
- { } },
- { 1, 1053, "NAS53",
- { { 169, true }, { 37, false } },
- { } },
- { 2, 1054, "NAS54",
- { { 213, true }, { 46, false } },
- { } },
- { 3, 1055, "NAS55",
- { { 171, true }, { 44, false } },
- { } },
- { 4, 1056, "NAS56",
- { { 173, true }, { 50, false } },
- { } },
- { 5, 1057, "NAS57",
- { { 211, true }, { 45, false }, { 109, false } },
- { } },
- { 6, 1059, "NAS59",
- { { 146, true }, { 39, false }, { 218, false } },
- { } },
- { 7, 1062, "NCL60",
- { { 109, true }, { 43, false } },
- { } },
- { 8, 1064, "NAS64",
- { { 218, true }, { 225, true }, { 209, true }, { 38, false } },
- { } },
- { 9, 1067, "NAS67",
- { { 223, true }, { 37, true }, { 36, false } },
- { } },
- { 10, 1070, "NAS70",
- { { 37, true }, { 53, false } },
- { } },
- { 11, 1071, "NAS71",
- { { 46, true }, { 41, false } },
- { } },
- { 12, 1074, "NAS74",
- { { 191, true }, { 37, true }, { 218, false }, { 294, false } },
- { { 13, false } } },
- { 13, 1075, "NAS75",
- { { 220, true }, { 51, false }, { 45, false }, { 218, false } },
- { } }
+ { 0, 1050, "NAS50",
+ { { kEv, 215, true }, { kEv, 49, false }, { kEv, 218, false } } },
+ { 1, 1053, "NAS53",
+ { { kEv, 169, true }, { kEv, 37, false } } },
+ { 2, 1054, "NAS54",
+ { { kEv, 213, true }, { kEv, 46, false } } },
+ { 3, 1055, "NAS55",
+ { { kEv, 171, true }, { kEv, 44, false } } },
+ { 4, 1056, "NAS56",
+ { { kEv, 173, true }, { kEv, 50, false } } },
+ { 5, 1057, "NAS57",
+ { { kEv, 211, true }, { kEv, 45, false }, { kEv, 109, false } } },
+ { 6, 1059, "NAS59",
+ { { kEv, 146, true }, { kEv, 39, false }, { kEv, 218, false } } },
+ { 7, 1062, "NCL60",
+ { { kEv, 109, true }, { kEv, 43, false } } },
+ { 8, 1064, "NAS64",
+ { { kEv, 218, true }, { kEv, 225, true }, { kEv, 209, true }, { kEv, 38, false } } },
+ { 9, 1067, "NAS67",
+ { { kEv, 223, true }, { kEv, 37, true }, { kEv, 36, false } } },
+ { 10, 1070, "NAS70",
+ { { kEv, 37, true }, { kEv, 53, false } } },
+ { 11, 1071, "NAS71",
+ { { kEv, 46, true }, { kEv, 41, false } } },
+ { 12, 1074, "NAS74",
+ { { kEv, 191, true }, { kEv, 37, true }, { kEv, 218, false }, { kEv, 294, false }, { kIn, 13, false } } },
+ { 13, 1075, "NAS75",
+ { { kEv, 220, true }, { kEv, 51, false }, { kEv, 45, false }, { kEv, 218, false } } }
},
{ // Bess & George, 11 responses
- { 14, 1120, "NBG20",
- { { 169, true }, { 72, false } },
- { } },
- { 15, 1121, "NBG21",
- { { 171, true }, { 77, false }, { 208, false } },
- { } },
- { 16, 1122, "NBG22",
- { { 197, true }, { 73, false }, { 248, false } },
- { } },
- { 17, 1124, "NBG24",
- { { 73, true }, { 75, false }, { 202, true }, { 246, false } },
- { } },
- { 18, 1125, "NBG25",
- { { 222, true }, { 79, false }, { 218, false } },
- { } },
- { 19, 1126, "NBG26",
- { { 241, true }, { 74, false } },
- { } },
- { 20, 1127, "NBG27",
- { { 223, true }, { 80, false }, { 72, true } },
- { } },
- { 21, 1130, "NBG30",
- { { 208, true }, { 77, true }, { 203, false }, { 295, false } },
- { } },
- { 22, 1131, "NBG31",
- { { 203, true }, { 76, false } },
- { } },
- { 23, 1132, "NBG32",
- { { 297, true }, { 71, false }, { 208, false } },
- { } },
- { 24, 1133, "NBG33",
- { { 168, true } },
- { } }
+ { 14, 1120, "NBG20",
+ { { kEv, 169, true }, { kEv, 72, false } } },
+ { 15, 1121, "NBG21",
+ { { kEv, 171, true }, { kEv, 77, false }, { kEv, 208, false } } },
+ { 16, 1122, "NBG22",
+ { { kEv, 197, true }, { kEv, 73, false }, { kEv, 248, false } } },
+ { 17, 1124, "NBG24",
+ { { kEv, 73, true }, { kEv, 75, false }, { kEv, 202, true }, { kEv, 246, false } } },
+ { 18, 1125, "NBG25",
+ { { kEv, 222, true }, { kEv, 79, false }, { kEv, 218, false } } },
+ { 19, 1126, "NBG26",
+ { { kEv, 241, true }, { kEv, 74, false } } },
+ { 20, 1127, "NBG27",
+ { { kEv, 223, true }, { kEv, 80, false }, { kEv, 72, true } } },
+ { 21, 1130, "NBG30",
+ { { kEv, 208, true }, { kEv, 77, true }, { kEv, 203, false }, { kEv, 295, false } } },
+ { 22, 1131, "NBG31",
+ { { kEv, 203, true }, { kEv, 76, false } } },
+ { 23, 1132, "NBG32",
+ { { kEv, 297, true }, { kEv, 71, false }, { kEv, 208, false } } },
+ { 24, 1133, "NBG33",
+ { { kEv, 168, true } } }
},
{ // Charlie, 13 responses
- { 25, 1250, "NCM50",
- { { 171, true }, { 93, false }, { 298, false } },
- { } },
- { 26, 1253, "NCM53",
- { { 173, true }, { 84, false }, { 223, false } },
- { } },
- { 27, 1254, "NCM54",
- { { 228, true }, { 100, false }, { 219, false } },
- { } },
- { 28, 1255, "NCM55",
- { { 223, true }, { 299, true }, { 97, false } },
- { } },
- { 29, 1257, "NCM57",
- { { 167, true }, { 83, false } },
- { } },
- { 30, 1260, "NCM60",
- { { 219, true }, { 87, false } },
- { } },
- { 31, 1263, "NEF40",
- { { 109, true }, { 91, false } },
- { } },
- { 32, 1265, "NCM65",
- { { 183, true }, { 94, false } },
- { { 13, false } } },
- { 33, 1267, "NCM67",
- { { 145, true }, { 300, false }, { 122, false }, { 218, false } },
- { } },
- { 34, 1269, "NCM69",
- { { 241, true }, { 301, false } },
- { } },
- { 35, 1270, "NCM70",
- { { 297, true }, { 302, false } },
- { } },
- { 36, 1273, "NCM73",
- { { 213, true }, { 303, false } },
- { } },
- { 37, 1274, "NCM74",
- { { 304, true }, { 240, false }, { 305, false } },
- { } }
+ { 25, 1250, "NCM50",
+ { { kEv, 171, true }, { kEv, 93, false }, { kEv, 298, false } } },
+ { 26, 1253, "NCM53",
+ { { kEv, 173, true }, { kEv, 84, false }, { kEv, 223, false } } },
+ { 27, 1254, "NCM54",
+ { { kEv, 228, true }, { kEv, 100, false }, { kEv, 219, false } } },
+ { 28, 1255, "NCM55",
+ { { kEv, 223, true }, { kEv, 299, true }, { kEv, 97, false } } },
+ { 29, 1257, "NCM57",
+ { { kEv, 167, true }, { kEv, 83, false } } },
+ { 30, 1260, "NCM60",
+ { { kEv, 219, true }, { kEv, 87, false } } },
+ { 31, 1263, "NEF40",
+ { { kEv, 109, true }, { kEv, 91, false } } },
+ { 32, 1265, "NCM65",
+ { { kEv, 183, true }, { kEv, 94, false }, { kIn, 13, false } } },
+ { 33, 1267, "NCM67",
+ { { kEv, 145, true }, { kEv, 300, false }, { kEv, 122, false }, { kEv, 218, false } } },
+ { 34, 1269, "NCM69",
+ { { kEv, 241, true }, { kEv, 301, false } } },
+ { 35, 1270, "NCM70",
+ { { kEv, 297, true }, { kEv, 302, false } } },
+ { 36, 1273, "NCM73",
+ { { kEv, 213, true }, { kEv, 303, false } } },
+ { 37, 1274, "NCM74",
+ { { kEv, 304, true }, { kEv, 240, false }, { kEv, 305, false } } }
},
{ // Emily, 10 responses
- { 38, 1330, "NEF30",
- { { 204, true }, { 110, false } },
- { } },
- { 39, 1331, "NEF31",
- { { 200, true }, { 108, false } },
- { } },
- { 40, 1332, "NEF32",
- { { 205, true }, { 157, false }, { 111, false } },
- { } },
- { 41, 1333, "NEF33",
- { { 197, true }, { 107, false } },
- { } },
- { 42, 1334, "NEF34",
- { { 171, true }, { 113, false } },
- { } },
- { 43, 1335, "NEF35",
- { { 206, true }, { 112, false } },
- { } },
- { 44, 1338, "NEF38",
- { { 234, true }, { 106, false } },
- { } },
- { 45, 1340, "NEF40",
- { { 203, true }, { 109, false } },
- { } },
- { 46, 1341, "NEF41",
- { { 307, true }, { 118, false } },
- { } },
- { 47, 1344, "NEF44",
- { { 167, true }, { 116, false }, { 107, false } },
- { } }
+ { 38, 1330, "NEF30",
+ { { kEv, 204, true }, { kEv, 110, false } } },
+ { 39, 1331, "NEF31",
+ { { kEv, 200, true }, { kEv, 108, false } } },
+ { 40, 1332, "NEF32",
+ { { kEv, 205, true }, { kEv, 157, false }, { kEv, 111, false } } },
+ { 41, 1333, "NEF33",
+ { { kEv, 197, true }, { kEv, 107, false } } },
+ { 42, 1334, "NEF34",
+ { { kEv, 171, true }, { kEv, 113, false } } },
+ { 43, 1335, "NEF35",
+ { { kEv, 206, true }, { kEv, 112, false } } },
+ { 44, 1338, "NEF38",
+ { { kEv, 234, true }, { kEv, 106, false } } },
+ { 45, 1340, "NEF40",
+ { { kEv, 203, true }, { kEv, 109, false } } },
+ { 46, 1341, "NEF41",
+ { { kEv, 307, true }, { kEv, 118, false } } },
+ { 47, 1344, "NEF44",
+ { { kEv, 167, true }, { kEv, 116, false }, { kEv, 107, false } } }
},
{ // Hannah, 12 responses
- { 48, 1420, "NHG20",
- { { 167, true }, { 218, false }, { 129, false } },
- { } },
- { 49, 1423, "NHG23",
- { { 169, true }, { 131, false } },
- { } },
- { 50, 1426, "NHG26",
- { { 171, true }, { 136, false } },
- { } },
- { 51, 1429, "NHG29",
- { { 222, true }, { 140, false } },
- { } },
- { 52, 1433, "NHG33",
- { { 140, true }, { 215, false }, { 139, false } },
- { } },
- { 53, 1434, "NHG34",
- { { 234, true }, { 130, false } },
- { } },
- { 54, 1437, "NHG37",
- { { 241, true }, { 133, false } },
- { } },
- { 55, 1438, "NHG38",
- { { 133, true }, { 214, false }, { 138, false } },
- { } },
- { 56, 1439, "NHG39",
- { { 131, true }, { 223, true }, { 141, false }, { 97, false } },
- { } },
- { 57, 1440, "NHG40",
- { { 208, true }, { 143, false } },
- { } },
- { 58, 1441, "NHG41",
- { { 143, true }, { 203, true }, { 134, false }, { 109, false } },
- { } },
- { 59, 1442, "NHG42",
- { { 97, true }, { 141, true }, { 132, false } },
- { } }
+ { 48, 1420, "NHG20",
+ { { kEv, 167, true }, { kEv, 218, false }, { kEv, 129, false } } },
+ { 49, 1423, "NHG23",
+ { { kEv, 169, true }, { kEv, 131, false } } },
+ { 50, 1426, "NHG26",
+ { { kEv, 171, true }, { kEv, 136, false } } },
+ { 51, 1429, "NHG29",
+ { { kEv, 222, true }, { kEv, 140, false } } },
+ { 52, 1433, "NHG33",
+ { { kEv, 140, true }, { kEv, 215, false }, { kEv, 139, false } } },
+ { 53, 1434, "NHG34",
+ { { kEv, 234, true }, { kEv, 130, false } } },
+ { 54, 1437, "NHG37",
+ { { kEv, 241, true }, { kEv, 133, false } } },
+ { 55, 1438, "NHG38",
+ { { kEv, 133, true }, { kEv, 214, false }, { kEv, 138, false } } },
+ { 56, 1439, "NHG39",
+ { { kEv, 131, true }, { kEv, 223, true }, { kEv, 141, false }, { kEv, 97, false } } },
+ { 57, 1440, "NHG40",
+ { { kEv, 208, true }, { kEv, 143, false } } },
+ { 58, 1441, "NHG41",
+ { { kEv, 143, true }, { kEv, 203, true }, { kEv, 134, false }, { kEv, 109, false } } },
+ { 59, 1442, "NHG42",
+ { { kEv, 97, true }, { kEv, 141, true }, { kEv, 132, false } } }
},
{ // Louis, 15 responses
- { 60, 1550, "NLC50",
- { { 211, true }, { 165, false } },
- { } },
- { 61, 1551, "NLC51",
- { { 287, true }, { 151, false }, { 241, false} },
- { } },
- { 62, 1552, "NLC52",
- { { 171, true }, { 148, false }, { 98, false } },
- { } },
- { 63, 1553, "NLC53",
- { { 173, true }, { 154, false }, { 148, false } },
- { } },
- { 64, 1554, "NLC54",
- { { 191, true }, { 161, false } },
- { { 13, false } } },
- { 65, 1555, "NLC55",
- { { 213, true }, { 159, false }, { 160, true } },
- { } },
- { 66, 1557, "NLC57",
- { { 95, true }, { 162, false } },
- { } },
- { 67, 1558, "NLC58",
- { { 98, true }, { 164, false } },
- { } },
- { 68, 1559, "NLC59",
- { { 190, true }, { 163, false } },
- { } },
- { 69, 1560, "NLC60",
- { { 109, true }, { 153, false } },
- { } },
- { 70, 1562, "NLC62",
- { { 206, true }, { 157, false } },
- { } },
- { 71, 1565, "NLC65",
- { { 205, true }, { 156, false }, { 165, true } },
- { } },
- { 72, 1566, "NAS54",
- { { 213, true }, { 160, false } },
- { } },
- { 73, 1567, "NLC67",
- { { 169, true }, { 37, true }, { 160, false } },
- { } },
- { 74, 1568, "NLC68",
- { { 288, true }, { 153, false }, { 123, false }, { 157, true } },
- { } },
+ { 60, 1550, "NLC50",
+ { { kEv, 211, true }, { kEv, 165, false } } },
+ { 61, 1551, "NLC51",
+ { { kEv, 287, true }, { kEv, 151, false }, { kEv, 241, false} } },
+ { 62, 1552, "NLC52",
+ { { kEv, 171, true }, { kEv, 148, false }, { kEv, 98, false } } },
+ { 63, 1553, "NLC53",
+ { { kEv, 173, true }, { kEv, 154, false }, { kEv, 148, false } } },
+ { 64, 1554, "NLC54",
+ { { kEv, 191, true }, { kEv, 161, false }, { kIn, 13, false } } },
+ { 65, 1555, "NLC55",
+ { { kEv, 213, true }, { kEv, 159, false }, { kEv, 160, true } } },
+ { 66, 1557, "NLC57",
+ { { kEv, 95, true }, { kEv, 162, false } } },
+ { 67, 1558, "NLC58",
+ { { kEv, 98, true }, { kEv, 164, false } } },
+ { 68, 1559, "NLC59",
+ { { kEv, 190, true }, { kEv, 163, false } } },
+ { 69, 1560, "NLC60",
+ { { kEv, 109, true }, { kEv, 153, false } } },
+ { 70, 1562, "NLC62",
+ { { kEv, 206, true }, { kEv, 157, false } } },
+ { 71, 1565, "NLC65",
+ { { kEv, 205, true }, { kEv, 156, false }, { kEv, 165, true } } },
+ { 72, 1566, "NAS54",
+ { { kEv, 213, true }, { kEv, 160, false } } },
+ { 73, 1567, "NLC67",
+ { { kEv, 169, true }, { kEv, 37, true }, { kEv, 160, false } } },
+ { 74, 1568, "NLC68",
+ { { kEv, 288, true }, { kEv, 153, false }, { kEv, 123, false }, { kEv, 157, true } } },
},
{ // Ned, 0 responses
},
{ // Rose,
- { 75, 1750, "NRM17",
- { { 211, true }, { 186, false } },
- { } },
- { 76, 1751, "NRM18",
- { { 169, true }, { 179, false } },
- { } },
- { 77, 1752, "NRM19",
- { { 171, true }, { 185, false } },
- { } },
- { 78, 1753, "NRM20",
- { { 167, true }, { 177, false } },
- { } },
- { 79, 1754, "NRM21",
- { { 241, true }, { 214, true }, { 187, false } },
- { } },
- { 80, 1755, "NRM55",
- { { 196, true }, { 178, false } },
- { } },
- { 81, 1757, "NRM22",
- { { 206, true }, { 184, false } },
- { } },
- { 82, 1758, "NRM23",
- { { 167, true }, { 222, false }, { 192, false } },
- { } },
- { 83, 1759, "NRM24",
- { { 213, true }, { 227, true }, { 188, false } },
- { } },
- { 84, 1761, "NRM25",
- { { 84, true }, { 308, false }, { 179, true } },
- { } },
- { 85, 1762, "NAS67",
- { { 84, true }, { 97, false }, { 299, false }, { 179, true } },
- { } },
- { 86, 1763, "NRM27",
- { { 225, true }, { 38, false }, { 309, false }, { 310, true } },
- { } },
- { 87, 1764, "NRM28",
- { { 311, true }, { 312, false }, { 171, false } },
- { } },
- { 88, 1765, "NRM29",
- { { 220, true }, { 38, false }, { 310, false } },
- { } },
- { 89, 1756, "NLC60",
- { { 203, true }, { 124, false } },
- { } },
+ { 75, 1750, "NRM17",
+ { { kEv, 211, true }, { kEv, 186, false } } },
+ { 76, 1751, "NRM18",
+ { { kEv, 169, true }, { kEv, 179, false } } },
+ { 77, 1752, "NRM19",
+ { { kEv, 171, true }, { kEv, 185, false } } },
+ { 78, 1753, "NRM20",
+ { { kEv, 167, true }, { kEv, 177, false } } },
+ { 79, 1754, "NRM21",
+ { { kEv, 241, true }, { kEv, 214, true }, { kEv, 187, false } } },
+ { 80, 1755, "NRM55",
+ { { kEv, 196, true }, { kEv, 178, false } } },
+ { 81, 1757, "NRM22",
+ { { kEv, 206, true }, { kEv, 184, false } } },
+ { 82, 1758, "NRM23",
+ { { kEv, 167, true }, { kEv, 222, false }, { kEv, 192, false } } },
+ { 83, 1759, "NRM24",
+ { { kEv, 213, true }, { kEv, 227, true }, { kEv, 188, false } } },
+ { 84, 1761, "NRM25",
+ { { kEv, 84, true }, { kEv, 308, false }, { kEv, 179, true } } },
+ { 85, 1762, "NAS67",
+ { { kEv, 84, true }, { kEv, 97, false }, { kEv, 299, false }, { kEv, 179, true } } },
+ { 86, 1763, "NRM27",
+ { { kEv, 225, true }, { kEv, 38, false }, { kEv, 309, false }, { kEv, 310, true } } },
+ { 87, 1764, "NRM28",
+ { { kEv, 311, true }, { kEv, 312, false }, { kEv, 171, false } } },
+ { 88, 1765, "NRM29",
+ { { kEv, 220, true }, { kEv, 38, false }, { kEv, 310, false } } },
+ { 89, 1756, "NLC60",
+ { { kEv, 203, true }, { kEv, 124, false } } },
}
};
const Common::Array<Goodbye> _nancy3Goodbyes = {
- { "NAS90", { { { 1090, 1091, 1092, 1093, 1094, 1095, 1096 }, {}, NOFLAG } } }, // Abby
- { "NBG90", { { { 1190, 1191, 1192, 1193, 1194 }, {}, NOFLAG } } }, // Bess & George
- { "NCM90", { { { 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298 }, {}, NOFLAG } } }, // Charlie
- { "NEF90", { { { 1390, 1391, 1392, 1393, 1394 }, {}, NOFLAG } } }, // Emily
- { "NHG90", { { { 1490, 1491, 1492, 1493, 1494 }, {}, NOFLAG } } }, // Hannah
- { "NLC90", { { { 1590, 1591, 1592, 1593, 1594 }, {}, NOFLAG } } }, // Louis
- { "NNN90", { { { 1690, 1691, 1692, 1693, 1694 }, {}, NOFLAG } } }, // Ned
- { "NRG90", { { { 1790, 1791, 1792, 1793, 1795, 1796 }, {}, NOFLAG } } }, // Rose
+ { "NAS90", { { { 1090, 1091, 1092, 1093, 1094, 1095, 1096 }, {}, NOFLAG } } }, // Abby
+ { "NBG90", { { { 1190, 1191, 1192, 1193, 1194 }, {}, NOFLAG } } }, // Bess & George
+ { "NCM90", { { { 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298 }, {}, NOFLAG } } }, // Charlie
+ { "NEF90", { { { 1390, 1391, 1392, 1393, 1394 }, {}, NOFLAG } } }, // Emily
+ { "NHG90", { { { 1490, 1491, 1492, 1493, 1494 }, {}, NOFLAG } } }, // Hannah
+ { "NLC90", { { { 1590, 1591, 1592, 1593, 1594 }, {}, NOFLAG } } }, // Louis
+ { "NNN90", { { { 1690, 1691, 1692, 1693, 1694 }, {}, NOFLAG } } }, // Ned
+ { "NRG90", { { { 1790, 1791, 1792, 1793, 1795, 1796 }, {}, NOFLAG } } }, // Rose
};
const Common::Array<Common::Array<const char *>> _nancy3ConditionalDialogueTexts {
@@ -565,7 +482,7 @@ const Common::Array<Common::Array<const char *>> _nancy3ConditionalDialogueTexts
};
const Common::Array<Common::Array<const char *>> _nancy3GoodbyeTexts = {
-{ // English
+{ // English
"I'll let you get back to what you were doing.<h>", // NAS90
"I should get going. Talk to you later.<h>", // NBG90
"I'll let you get back to your renovation.<h>", // NCM90
@@ -575,7 +492,7 @@ const Common::Array<Common::Array<const char *>> _nancy3GoodbyeTexts = {
"Goodbye, Ned.<h>", // NNN90
"I can see you're busy - I'll let you go.<h>" // NRG90
},
-{ // Russian
+{ // Russian
"Yt ;ele dfv ;jkmit vtifnm.<h>", // NAS90
"Vyt gjhf blnb. Tot edblbvcz.<h>", // NBG90
"Vyt gjhf blnb. Tot edblbvcz.<h>", // NCM90
@@ -588,8 +505,8 @@ const Common::Array<Common::Array<const char *>> _nancy3GoodbyeTexts = {
};
const Common::Array<const char *> _nancy3TelephoneRinging = {
- "ringing...<n><e>", // English
- "Cjtlbytybt...<n><e>" // Russian
+ "ringing...<n><e>", // English
+ "Cjtlbytybt...<n><e>" // Russian
};
const Common::Array<const char *> _nancy3EventFlagNames = {
diff --git a/devtools/create_nancy/nancy4_data.h b/devtools/create_nancy/nancy4_data.h
index 2fa7dc0dfe5..1da9f672260 100644
--- a/devtools/create_nancy/nancy4_data.h
+++ b/devtools/create_nancy/nancy4_data.h
@@ -33,7 +33,7 @@ const GameConstants _nancy4Constants ={
21, 22, 23, 24, 25, 26, 27, 28, 29, 30 },
36,
7,
- 7000
+ 4000
};
const Common::Array<Common::Language> _nancy4LanguagesOrder = {
@@ -44,246 +44,169 @@ const Common::Array<Common::Language> _nancy4LanguagesOrder = {
const Common::Array<Common::Array<ConditionalDialogue>> _nancy4ConditionalDialogue = {
{ // Mr. Egan, 17 responses
{ 0, 1050, "NDE50",
- { { 172, true }, { 249, false } },
- { } },
+ { { kEv, 172, true }, { kEv, 249, false } } },
{ 1, 1051, "NDE51",
- { { 249, true }, { 218, false }, { 246, false } },
- { } },
+ { { kEv, 249, true }, { kEv, 218, false }, { kEv, 246, false } } },
{ 2, 1052, "NDE52",
- { { 249, true }, { 70, false }, { 218, false } },
- { } },
+ { { kEv, 249, true }, { kEv, 70, false }, { kEv, 218, false } } },
{ 3, 1053, "NDE53",
- { { 249, true }, { 218, true }, { 116, true }, { 82, false } },
- { } },
+ { { kEv, 249, true }, { kEv, 218, true }, { kEv, 116, true }, { kEv, 82, false } } },
{ 4, 1054, "NDE54",
- { { 222, true }, { 77, false } },
- { } },
+ { { kEv, 222, true }, { kEv, 77, false } } },
{ 5, 1055, "NDE55",
- { { 223, true }, { 69, false } },
- { } },
+ { { kEv, 223, true }, { kEv, 69, false } } },
{ 6, 1057, "NDE57",
- { { 290, true }, { 85, false } },
- { } },
+ { { kEv, 290, true }, { kEv, 85, false } } },
{ 7, 1058, "NDE58",
- { { 262, true }, { 72, false } },
- { } },
+ { { kEv, 262, true }, { kEv, 72, false } } },
{ 8, 1059, "NDE59",
- { { 262, true }, { 67, false } },
- { } },
+ { { kEv, 262, true }, { kEv, 67, false } } },
{ 9, 1061, "NDE61",
- { { 275, true }, { 72, true }, { 81, false }, { 69, true }, { 61, false } },
- { } },
+ { { kEv, 275, true }, { kEv, 72, true }, { kEv, 81, false }, { kEv, 69, true }, { kEv, 61, false } } },
{ 10, 1062, "NDE62",
- { { 262, true }, { 60, false }, { 69, true } },
- { } },
+ { { kEv, 262, true }, { kEv, 60, false }, { kEv, 69, true } } },
{ 11, 1065, "NDE41b",
- { { 262, true }, { 83, true }, { 60, true }, { 89, false } },
- { } },
+ { { kEv, 262, true }, { kEv, 83, true }, { kEv, 60, true }, { kEv, 89, false } } },
{ 12, 1067, "NDE67",
- { { 331, true }, { 278, false }, { 63, false }, { 83, true } },
- { } },
+ { { kEv, 331, true }, { kEv, 278, false }, { kEv, 63, false }, { kEv, 83, true } } },
{ 13, 1068, "NDE68",
- { { 335, true }, { 286, false }, { 84, false }, { 83, true } },
- { } },
+ { { kEv, 335, true }, { kEv, 286, false }, { kEv, 84, false }, { kEv, 83, true } } },
{ 14, 1069, "NDE69",
- { { 332, true }, { 280, false }, { 65, false }, { 83, true } },
- { } },
+ { { kEv, 332, true }, { kEv, 280, false }, { kEv, 65, false }, { kEv, 83, true } } },
{ 15, 1071, "NDE71",
- { { 223, false }, { 172, true }, { 252, false } },
- { } },
+ { { kEv, 223, false }, { kEv, 172, true }, { kEv, 252, false } } },
{ 16, 1074, "NDE74",
- { { 75, true }, { 66, false } },
- { } },
+ { { kEv, 75, true }, { kEv, 66, false } } },
{ 17, 1078, "NDE78",
- { { 258, true }, { 279, false }, { 64, false }, { 83, true } },
- { } }
+ { { kEv, 258, true }, { kEv, 279, false }, { kEv, 64, false }, { kEv, 83, true } } }
},
{ // Lisa, 7 responses
{ 18, 2050, "NLO50",
- { { 173, true }, { 163, false } },
- { } },
+ { { kEv, 173, true }, { kEv, 163, false } } },
{ 19, 2051, "NLO51",
- { { 256, true }, { 162, false }, { 164, true } },
- { } },
+ { { kEv, 256, true }, { kEv, 162, false }, { kEv, 164, true } } },
{ 20, 2052, "NLO52",
- { { 256, true }, { 164, false } },
- { } },
+ { { kEv, 256, true }, { kEv, 164, false } } },
{ 21, 2053, "NLO53",
- { { 164, true }, { 105, false } },
- { } },
+ { { kEv, 164, true }, { kEv, 105, false } } },
{ 22, 2055, "NLO55",
- { { 270, true }, { 167, false } },
- { } },
+ { { kEv, 270, true }, { kEv, 167, false } } },
{ 23, 2056, "NLO56",
- { { 60, true }, { 89, false }, { 160, false } },
- { } },
+ { { kEv, 60, true }, { kEv, 89, false }, { kEv, 160, false } } },
{ 24, 2057, "NLO57",
- { { 338, true }, { 169, false } },
- { } }
+ { { kEv, 338, true }, { kEv, 169, false } } }
},
{ // Jacques, 8 responses + 1 repeat
{ 25, 3050, "NJB50",
- { { 173, true }, { 147, false } },
- { } },
+ { { kEv, 173, true }, { kEv, 147, false } } },
{ 26, 3052, "NJB52",
- { { 163, true }, { 150, false } },
- { } },
+ { { kEv, 163, true }, { kEv, 150, false } } },
{ 27, 3053, "NJB53",
- { { 127, true }, { 37, false } },
- { } },
+ { { kEv, 127, true }, { kEv, 37, false } } },
{ 27, 3053, "NJB53",
- { { 338, true }, { 37, false } },
- { } },
+ { { kEv, 338, true }, { kEv, 37, false } } },
{ 28, 3054, "NJB54",
- { { 145, false } },
- { } },
+ { { kEv, 145, false } } },
{ 29, 3056, "NJB56",
- { { 255, true }, { 151, false }, { 50, false } },
- { } },
+ { { kEv, 255, true }, { kEv, 151, false }, { kEv, 50, false } } },
{ 30, 3062, "NJB62",
- { { 69, true }, { 146, false } },
- { } },
+ { { kEv, 69, true }, { kEv, 146, false } } },
{ 31, 3063, "NJB63",
- { { 339, true }, { 334, true }, { 144, false } },
- { } },
+ { { kEv, 339, true }, { kEv, 334, true }, { kEv, 144, false } } },
{ 32, 3060, "NJB60",
- { { 238, false } },
- { { 5, false } } }
+ { { kEv, 238, false }, { kIn, 5, false } } }
},
{ // Professor Hotchkiss, 8 responses
{ 33, 5050, "NHL50",
- { { 272, true }, { 136, false } },
- { } },
+ { { kEv, 272, true }, { kEv, 136, false } } },
{ 34, 5051, "NHL51",
- { { 264, true }, { 131, false } },
- { } },
+ { { kEv, 264, true }, { kEv, 131, false } } },
{ 35, 5052, "NHL52",
- { { 254, true }, { 129, false } },
- { } },
+ { { kEv, 254, true }, { kEv, 129, false } } },
{ 36, 5053, "NHL53",
- { { 176, true }, { 229, false } },
- { } },
+ { { kEv, 176, true }, { kEv, 229, false } } },
{ 37, 5055, "NHL55",
- { { 239, true }, { 38, false } },
- { } },
+ { { kEv, 239, true }, { kEv, 38, false } } },
{ 38, 5057, "NHL57",
- { { 153, true }, { 265, true }, { 225, false } },
- { { 14, true } } },
+ { { kEv, 153, true }, { kEv, 265, true }, { kEv, 225, false }, { kIn, 14, true } } },
{ 39, 5058, "NHL58",
- { { 256, true }, { 326, true }, { 227, false } },
- { } },
+ { { kEv, 256, true }, { kEv, 326, true }, { kEv, 227, false } } },
{ 40, 5060, "NHL60",
- { { 49, false } },
- { { 6, true } } }
+ { { kEv, 49, false }, { kIn, 6, true } } }
},
{ // Bess and George, 19 responses + 1 repeat
{ 41, 6520, "NBG20A",
- { { 145, true }, { 40, false } },
- { } },
+ { { kEv, 145, true }, { kEv, 40, false } } },
{ 42, 6521, "NBG21a",
- { { 338, true }, { 170, false }, { 122, false } },
- { } },
+ { { kEv, 338, true }, { kEv, 170, false }, { kEv, 122, false } } },
{ 43, 6522, "NBG22a",
- { { 175, true }, { 287, false }, { 119, false } },
- { } },
+ { { kEv, 175, true }, { kEv, 287, false }, { kEv, 119, false } } },
{ 44, 6523, "NBG23A",
- { { 172, true }, { 70, true }, { 69, false }, { 180, false } },
- { } },
+ { { kEv, 172, true }, { kEv, 70, true }, { kEv, 69, false }, { kEv, 180, false } } },
{ 45, 6524, "NBG24a",
- { { 338, true }, { 50, false }, { 133, true }, { 41, false } },
- { } },
+ { { kEv, 338, true }, { kEv, 50, false }, { kEv, 133, true }, { kEv, 41, false } } },
{ 46, 6525, "NBG25A",
- { { 263, true }, { 177, true }, { 244, false } },
- { } },
+ { { kEv, 263, true }, { kEv, 177, true }, { kEv, 244, false } } },
{ 47, 6526, "NBG26a",
- { { 271, true }, { 187, false } },
- { { 1, true } } },
+ { { kEv, 271, true }, { kEv, 187, false }, { kIn, 1, true } } },
{ 48, 6527, "NBG27a",
- { { 338, true }, { 340, true }, { 183, false } },
- { } },
+ { { kEv, 338, true }, { kEv, 340, true }, { kEv, 183, false } } },
{ 49, 6528, "NBG28a",
- { { 75, true }, { 66, false }, { 178, false } },
- { } },
+ { { kEv, 75, true }, { kEv, 66, false }, { kEv, 178, false } } },
{ 50, 6530, "NBG30a",
- { { 184, true }, { 277, true }, { 190, false } },
- { } },
+ { { kEv, 184, true }, { kEv, 277, true }, { kEv, 190, false } } },
{ 51, 6531, "NBG31a",
- { { 239, true }, { 177, true }, { 187, true }, { 189, false } },
- { } },
+ { { kEv, 239, true }, { kEv, 177, true }, { kEv, 187, true }, { kEv, 189, false } } },
{ 52, 6532, "NBG32a",
- { { 166, true }, { 170, false }, { 327, false }, { 185, false } },
- { } },
+ { { kEv, 166, true }, { kEv, 170, false }, { kEv, 327, false }, { kEv, 185, false } } },
{ 53, 6533, "NBG33a",
- { { 184, true }, { 265, true }, { 190, false }, { 328, false }, { 182, false } },
- { { 11, false } } },
+ { { kEv, 184, true }, { kEv, 265, true }, { kEv, 190, false }, { kEv, 328, false }, { kEv, 182, false }, { kIn, 11, false } } },
{ 54, 6534, "NBG34a",
- { { 225, true }, { 179, false } },
- { { 14, true } } },
+ { { kEv, 225, true }, { kEv, 179, false }, { kIn, 14, true } } },
{ 55, 6535, "NBG35a",
- { { 120, false } },
- { { 7, true } } },
+ { { kEv, 120, false }, { kIn, 7, true } } },
{ 56, 6536, "NBG36a",
- { { 153, true }, { 266, true }, { 267, true }, { 260, true }, { 121, false } },
- { } },
+ { { kEv, 153, true }, { kEv, 266, true }, { kEv, 267, true }, { kEv, 260, true }, { kEv, 121, false } } },
{ 57, 6537, "NBG37a",
- { { 189, true }, { 260, true }, { 360, false }, { 277, true } },
- { } },
+ { { kEv, 189, true }, { kEv, 260, true }, { kEv, 360, false }, { kEv, 277, true } } },
{ 57, 6537, "NBG37a",
- { { 189, true }, { 260, true }, { 360, false }, { 159, true } },
- { } },
+ { { kEv, 189, true }, { kEv, 260, true }, { kEv, 360, false }, { kEv, 159, true } } },
{ 58, 6570, "NBG70",
- { { 171, true }, { 42, false } },
- { } },
+ { { kEv, 171, true }, { kEv, 42, false } } },
{ 59, 6571, "NBG71a",
- { { 171, true }, { 42, true } },
- { } },
+ { { kEv, 171, true }, { kEv, 42, true } } },
},
{ // Ned, 14 responses + 1 repeat
{ 60, 7020, "NDN20a",
- { { 338, true }, { 257, false }, { 201, false } },
- { } },
+ { { kEv, 338, true }, { kEv, 257, false }, { kEv, 201, false } } },
{ 61, 7021, "NDN21a",
- { { 173, true }, { 261, true }, { 181, false } },
- { } },
+ { { kEv, 173, true }, { kEv, 261, true }, { kEv, 181, false } } },
{ 62, 7022, "NDN22a",
- { { 255, true }, { 261, true }, { 193, false } },
- { } },
+ { { kEv, 255, true }, { kEv, 261, true }, { kEv, 193, false } } },
{ 62, 7022, "NDN22a",
- { { 255, true }, { 274, true }, { 193, false } },
- { } },
+ { { kEv, 255, true }, { kEv, 274, true }, { kEv, 193, false } } },
{ 63, 7023, "NDN23a",
- { { 133, true }, { 50, false }, { 197, false } },
- { } },
+ { { kEv, 133, true }, { kEv, 50, false }, { kEv, 197, false } } },
{ 64, 7024, "NDN24a",
- { { 273, true }, { 289, false }, { 191, false } },
- { } },
+ { { kEv, 273, true }, { kEv, 289, false }, { kEv, 191, false } } },
{ 65, 7025, "NDN25a",
- { { 259, true }, { 117, false }, { 202, false } },
- { } },
+ { { kEv, 259, true }, { kEv, 117, false }, { kEv, 202, false } } },
{ 66, 7026, "NDN26",
- { { 193, true }, { 195, false } },
- { { 7, true }} },
+ { { kEv, 193, true }, { kEv, 195, false }, { kIn, 7, true }} },
{ 67, 7027, "NDN27",
- { { 265, true }, { 198, false } },
- { } },
+ { { kEv, 265, true }, { kEv, 198, false } } },
{ 68, 7028, "NDN28",
- { { 136, true }, { 247, false } },
- { } },
+ { { kEv, 136, true }, { kEv, 247, false } } },
{ 69, 7029, "NDN29",
- { { 131, true }, { 248, false } },
- { } },
+ { { kEv, 131, true }, { kEv, 248, false } } },
{ 70, 7030, "NDN30a",
- { { 129, true }, { 248, true }, { 49, false }, { 194, false } },
- { { 6, false } } },
+ { { kEv, 129, true }, { kEv, 248, true }, { kEv, 49, false }, { kEv, 194, false }, { kIn, 6, false } } },
{ 71, 7031, "NDN31a",
- { { 176, true }, { 138, false }, { 186, false } },
- { } },
+ { { kEv, 176, true }, { kEv, 138, false }, { kEv, 186, false } } },
{ 72, 7070, "NNN70",
- { { 174, true }, { 199, false } },
- { } },
+ { { kEv, 174, true }, { kEv, 199, false } } },
{ 73, 7071, "NNN71",
- { { 174, true }, { 199, true } },
- { } },
+ { { kEv, 174, true }, { kEv, 199, true } } },
}
};
diff --git a/devtools/create_nancy/tvd_data.h b/devtools/create_nancy/tvd_data.h
index 2c7bde9fb14..7e63e7edfeb 100644
--- a/devtools/create_nancy/tvd_data.h
+++ b/devtools/create_nancy/tvd_data.h
@@ -25,560 +25,482 @@
#include "types.h"
const GameConstants _tvdConstants = {
- 24,
- 120,
- { 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 125, 219, 220 },
- { 110, 111, 112, 113, 114 },
- 8,
- 10,
- 167000
+ 24,
+ 120,
+ { 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 125, 219, 220 },
+ { 110, 111, 112, 113, 114 },
+ 8,
+ 10,
+ 167000
+};
+
+const SoundChannelInfo _tvdToNancy2SoundChannelInfo = {
+ 32, 9,
+ { 7, 8, 30 },
+ { 0, 1, 2, 19, 27, 28, 29 },
+ { 3, 4, 5, 6, 17, 18, 20, 21, 22, 23, 24, 25, 26, 31 }
};
const Common::Array<Common::Language> _tvdLanguagesOrder = {
- Common::Language::EN_ANY
+ Common::Language::EN_ANY
};
const Common::Array<Common::Array<ConditionalDialogue>> _tvdConditionalDialogue = {
-{ // Damon?, empty
+{ // Damon, empty
},
-{ // Security guard, empty
+{ // Security guard, empty
},
-{ // Mrs. Flowers, 20 responses
- { 19, 759, "FIC_01",
- { { 0x4, kFalse }, { 0x49, kTrue } },
- { { 0x7, kFalse } } },
- { 18, 758, "FIC_02",
- { { 0x7, kFalse }, { 0x4F, kTrue } },
- { { 0x3, kFalse } } },
- { 17, 757, "FIC_03",
- { { 0x10, kFalse }, { 0x18, kTrue }, { 0x1E, kFalse }, { 0x22, kTrue } },
- { } },
- { 16, 756, "FIC_04",
- { { 0x10, kFalse }, { 0x18, kTrue }, { 0x1E, kFalse }, { 0x22, kFalse } },
- { } },
- { 15, 755, "FIC_05",
- { { 0xD, kFalse }, { 0x1C, kTrue } },
- { { 0x14, kFalse } } },
- { 14, 754, "FIC_06",
- { { 0x4A, kTrue }, { 0x52, kFalse }, { 0x1, kFalse } },
- { { 0x10, kFalse } } },
- { 13, 753, "FIC_07",
- { { 0x4A, kTrue }, { 0x52, kFalse }, { 0x9, kFalse } },
- { { 0x7, kFalse } } },
- { 12, 753, "FIC_08",
- { { 0x4A, kTrue }, { 0x52, kFalse }, { 0x8, kFalse } },
- { { 0x2, kFalse } } },
- { 11, 751, "FIC_09",
- { { 0x4A, kTrue }, { 0x52, kFalse }, { 0x11, kFalse } },
- { { 0x3, kFalse } } },
- { 10, 750, "FIC_10",
- { { 0x21, kTrue }, { 0xE, kFalse } },
- { { 0x9, kTrue } } },
- { 9, 749, "FIC_11",
- { { 0x21, kTrue }, { 0x5D, kFalse } },
- { { 0xD, kTrue } } },
- { 8, 748, "FIC_12",
- { { 0x21, kTrue }, { 0x5A, kFalse } },
- { { 0x10, kTrue } } },
- { 7, 747, "FIC_13",
- { { 0x21, kTrue }, { 0x5B, kFalse } },
- { { 0x7, kTrue } } },
- { 6, 746, "FIC_14",
- { { 0x21, kTrue }, { 0x5C, kFalse } },
- { { 0x2, kTrue } } },
- { 5, 745, "FIC_15",
- { { 0x21, kTrue }, { 0x5E, kFalse } },
- { { 0x5, kTrue } } },
- { 4, 744, "FIC_16",
- { { 0x21, kTrue }, { 0x60, kFalse } },
- { { 0x8, kTrue } } },
- { 3, 743, "FIC_17",
- { { 0x21, kTrue }, { 0x5F, kFalse } },
- { { 0xB, kTrue } } },
- { 2, 742, "FIC_18",
- { { 0x21, kTrue }, { 0x61, kFalse } },
- { { 0x14, kTrue } } },
- { 1, 741, "FIC_19",
- { { 0xC, kFalse }, { 0x46, kTrue }, { 0x1D, kFalse } },
- { } },
- { 0, 740, "FIC_20",
- { { 0xF, kFalse }, { 0x1D, kTrue } },
- { } }
+{ // Mrs. Flowers, 20 responses
+ { 19, 759, "FIC_01",
+ { { kEv, 0x4, kFalse }, { kEv, 0x49, kTrue }, { kIn, 0x7, kFalse } } },
+ { 18, 758, "FIC_02",
+ { { kEv, 0x7, kFalse }, { kEv, 0x4F, kTrue }, { kIn, 0x3, kFalse } } },
+ { 17, 757, "FIC_03",
+ { { kEv, 0x10, kFalse }, { kEv, 0x18, kTrue }, { kEv, 0x1E, kFalse }, { kEv, 0x22, kTrue } } },
+ { 16, 756, "FIC_04",
+ { { kEv, 0x10, kFalse }, { kEv, 0x18, kTrue }, { kEv, 0x1E, kFalse }, { kEv, 0x22, kFalse } } },
+ { 15, 755, "FIC_05",
+ { { kEv, 0xD, kFalse }, { kEv, 0x1C, kTrue }, { kIn, 0x14, kFalse } } },
+ { 14, 754, "FIC_06",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x52, kFalse }, { kEv, 0x1, kFalse }, { kIn, 0x10, kFalse } } },
+ { 13, 753, "FIC_07",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x52, kFalse }, { kEv, 0x9, kFalse }, { kIn, 0x7, kFalse } } },
+ { 12, 753, "FIC_08",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x52, kFalse }, { kEv, 0x8, kFalse }, { kIn, 0x2, kFalse } } },
+ { 11, 751, "FIC_09",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x52, kFalse }, { kEv, 0x11, kFalse }, { kIn, 0x3, kFalse } } },
+ { 10, 750, "FIC_10",
+ { { kEv, 0x21, kTrue }, { kEv, 0xE, kFalse }, { kIn, 0x9, kTrue } } },
+ { 9, 749, "FIC_11",
+ { { kEv, 0x21, kTrue }, { kEv, 0x5D, kFalse }, { kIn, 0xD, kTrue } } },
+ { 8, 748, "FIC_12",
+ { { kEv, 0x21, kTrue }, { kEv, 0x5A, kFalse }, { kIn, 0x10, kTrue } } },
+ { 7, 747, "FIC_13",
+ { { kEv, 0x21, kTrue }, { kEv, 0x5B, kFalse }, { kIn, 0x7, kTrue } } },
+ { 6, 746, "FIC_14",
+ { { kEv, 0x21, kTrue }, { kEv, 0x5C, kFalse }, { kIn, 0x2, kTrue } } },
+ { 5, 745, "FIC_15",
+ { { kEv, 0x21, kTrue }, { kEv, 0x5E, kFalse }, { kIn, 0x5, kTrue } } },
+ { 4, 744, "FIC_16",
+ { { kEv, 0x21, kTrue }, { kEv, 0x60, kFalse }, { kIn, 0x8, kTrue } } },
+ { 3, 743, "FIC_17",
+ { { kEv, 0x21, kTrue }, { kEv, 0x5F, kFalse }, { kIn, 0xB, kTrue } } },
+ { 2, 742, "FIC_18",
+ { { kEv, 0x21, kTrue }, { kEv, 0x61, kFalse }, { kIn, 0x14, kTrue } } },
+ { 1, 741, "FIC_19",
+ { { kEv, 0xC, kFalse }, { kEv, 0x46, kTrue }, { kEv, 0x1D, kFalse } } },
+ { 0, 740, "FIC_20",
+ { { kEv, 0xF, kFalse }, { kEv, 0x1D, kTrue } } }
},
-{ // Bonnie, 9 responses + 2 repeats
- { 29, 928, "BIC_01",
- { { 0x7, kFalse }, { 0x4F, kTrue }, { 0x4A, kFalse } },
- { } },
- { 28, 927, "BIC_02",
- { { 0x10, kFalse }, { 0x22, kTrue }, { 0x1E, kFalse } },
- { } },
- { 28, 927, "BIC_02",
- { { 0x10, kFalse }, { 0x22, kFalse }, { 0x18, kTrue }, { 0x1E, kFalse } },
- { } },
- { 27, 926, "BIC_03",
- { { 0xC, kFalse }, { 0x46, kTrue } },
- { { 0xB, kFalse } } },
- { 27, 926, "BIC_03",
- { { 0xC, kFalse }, { 0x46, kTrue } },
- { { 0xB, kTrue }, { 0x8, kFalse } } },
- { 26, 925, "BIC_04",
- { { 0xD, kFalse }, { 0x1C, kTrue } },
- { } },
- { 25, 924, "BIC_05",
- { { 0xA, kFalse }, { 0x47, kTrue }, { 0x3C, kTrue } },
- { { 0xB, kFalse } } },
- { 24, 923, "BIC_06",
- { { 0x4A, kTrue }, { 0x1, kFalse } },
- { { 0x10, kFalse } } },
- { 23, 922, "BIC_07",
- { { 0x4A, kTrue }, { 0x4, kFalse } },
- { { 0x7, kFalse } } },
- { 22, 921, "BIC_08",
- { { 0x4A, kTrue }, { 0x8, kFalse } },
- { { 0x2, kFalse } } },
- { 21, 920, "BIC_09",
- { { 0x4A, kTrue }, { 0x11, kFalse } },
- { { 0x3, kFalse } } },
- { 20, 919, "BIC_10",
- { { 0x4A, kTrue }, { 0xF, kFalse }, { 0x1D, kTrue } },
- { } }
+{ // Bonnie, 9 responses + 2 repeats
+ { 29, 928, "BIC_01",
+ { { kEv, 0x7, kFalse }, { kEv, 0x4F, kTrue }, { kEv, 0x4A, kFalse } } },
+ { 28, 927, "BIC_02",
+ { { kEv, 0x10, kFalse }, { kEv, 0x22, kTrue }, { kEv, 0x1E, kFalse } } },
+ { 28, 927, "BIC_02",
+ { { kEv, 0x10, kFalse }, { kEv, 0x22, kFalse }, { kEv, 0x18, kTrue }, { kEv, 0x1E, kFalse } } },
+ { 27, 926, "BIC_03",
+ { { kEv, 0xC, kFalse }, { kEv, 0x46, kTrue }, { kIn, 0xB, kFalse } } },
+ { 27, 926, "BIC_03",
+ { { kEv, 0xC, kFalse }, { kEv, 0x46, kTrue }, { kIn, 0xB, kTrue }, { kIn, 0x8, kFalse } } },
+ { 26, 925, "BIC_04",
+ { { kEv, 0xD, kFalse }, { kEv, 0x1C, kTrue } } },
+ { 25, 924, "BIC_05",
+ { { kEv, 0xA, kFalse }, { kEv, 0x47, kTrue }, { kEv, 0x3C, kTrue }, { kIn, 0xB, kFalse } } },
+ { 24, 923, "BIC_06",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x1, kFalse }, { kIn, 0x10, kFalse } } },
+ { 23, 922, "BIC_07",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x4, kFalse }, { kIn, 0x7, kFalse } } },
+ { 22, 921, "BIC_08",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x8, kFalse }, { kIn, 0x2, kFalse } } },
+ { 21, 920, "BIC_09",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x11, kFalse }, { kIn, 0x3, kFalse } } },
+ { 20, 919, "BIC_10",
+ { { kEv, 0x4A, kTrue }, { kEv, 0xF, kFalse }, { kEv, 0x1D, kTrue } } }
},
-{ // Caroline, 4 responses
- { 33, 846, "CIC_01",
- { { 0x4, kFalse }, { 0x49, kTrue } },
- { { 0x7, kFalse } } },
- { 32, 845, "CIC_02",
- { { 0x5, kFalse } },
- { } },
- { 31, 844, "CIC_03",
- { { 0x6, kFalse }, { 0x56, kTrue } },
- { { 0x16, kFalse } } },
- { 30, 843, "CIC_04",
- { { 0x10, kFalse }, { 0x18, kTrue } },
- { { 0x14, kFalse } } }
+{ // Caroline, 4 responses
+ { 33, 846, "CIC_01",
+ { { kEv, 0x4, kFalse }, { kEv, 0x49, kTrue }, { kIn, 0x7, kFalse } } },
+ { 32, 845, "CIC_02",
+ { { kEv, 0x5, kFalse } } },
+ { 31, 844, "CIC_03",
+ { { kEv, 0x6, kFalse }, { kEv, 0x56, kTrue }, { kIn, 0x16, kFalse } } },
+ { 30, 843, "CIC_04",
+ { { kEv, 0x10, kFalse }, { kEv, 0x18, kTrue }, { kIn, 0x14, kFalse } } }
},
-{ // Stefan, 10 responses
- { 43, 342, "SIC_10",
- { { 0x52, kTrue } },
- { } },
- { 42, 351, "SIC_01",
- { { 0x52, kFalse }, { 0x4, kFalse }, { 0x49, kTrue } },
- { { 0x7, kFalse } } },
- { 41, 350, "SIC_02",
- { { 0x52, kFalse }, { 0x10, kFalse }, { 0x18, kTrue } },
- { { 0x14, kFalse } } },
- { 40, 349, "SIC_03",
- { { 0x52, kFalse }, { 0xD, kFalse }, { 0x1C, kTrue } },
- { { 0xB, kFalse } } },
- { 39, 348, "SIC_04",
- { { 0x52, kFalse }, { 0xA, kFalse }, { 0x47, kTrue }, { 0x3C, kTrue } },
- { { 0xB, kFalse } } },
- { 38, 347, "SIC_05",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x1, kFalse } },
- { { 0x10, kFalse } } },
- { 37, 346, "SIC_06",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x8, kFalse } },
- { { 0x2, kFalse } } },
- { 36, 345, "SIC_07",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x11, kFalse } },
- { { 0x3, kFalse } } },
- { 35, 344, "SIC_08",
- { { 0x52, kFalse }, { 0xC, kFalse }, { 0x46, kTrue }, { 0x1D, kFalse } },
- { } },
- { 34, 343, "SIC_09",
- { { 0x52, kFalse }, { 0xF, kFalse }, { 0x1D, kTrue } },
- { { 0x12, kFalse } } }
+{ // Stefan, 10 responses
+ { 43, 342, "SIC_10",
+ { { kEv, 0x52, kTrue } } },
+ { 42, 351, "SIC_01",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4, kFalse }, { kEv, 0x49, kTrue }, { kIn, 0x7, kFalse } } },
+ { 41, 350, "SIC_02",
+ { { kEv, 0x52, kFalse }, { kEv, 0x10, kFalse }, { kEv, 0x18, kTrue }, { kIn, 0x14, kFalse } } },
+ { 40, 349, "SIC_03",
+ { { kEv, 0x52, kFalse }, { kEv, 0xD, kFalse }, { kEv, 0x1C, kTrue }, { kIn, 0xB, kFalse } } },
+ { 39, 348, "SIC_04",
+ { { kEv, 0x52, kFalse }, { kEv, 0xA, kFalse }, { kEv, 0x47, kTrue }, { kEv, 0x3C, kTrue }, { kIn, 0xB, kFalse } } },
+ { 38, 347, "SIC_05",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x1, kFalse }, { kIn, 0x10, kFalse } } },
+ { 37, 346, "SIC_06",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x8, kFalse }, { kIn, 0x2, kFalse } } },
+ { 36, 345, "SIC_07",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x11, kFalse }, { kIn, 0x3, kFalse } } },
+ { 35, 344, "SIC_08",
+ { { kEv, 0x52, kFalse }, { kEv, 0xC, kFalse }, { kEv, 0x46, kTrue }, { kEv, 0x1D, kFalse } } },
+ { 34, 343, "SIC_09",
+ { { kEv, 0x52, kFalse }, { kEv, 0xF, kFalse }, { kEv, 0x1D, kTrue }, { kIn, 0x12, kFalse } } }
},
-{ // Mrs. Grimesby, 20 responses + 2 repeats
- { 63, 714, "EGS_02A",
- { { 0x17, kTrue }, { 0x28, kFalse } },
- { } },
- { 63, 714, "EGS_02A",
- { { 0x17, kFalse }, { 0x4F, kTrue }, { 0x28, kFalse } },
- { } },
- { 62, 713, "EGS_02B",
- { { 0x17, kTrue }, { 0x28, kTrue } },
- { } },
- { 62, 713, "EGS_02B",
- { { 0x17, kFalse }, { 0x4F, kTrue }, { 0x28, kTrue } },
- { } },
- { 61, 712, "EGS_02C",
- { { 0x50, kTrue }, { 0x1D, kFalse }, { 0x2C, kFalse } },
- { } },
- { 60, 711, "EGS_02D",
- { { 0x50, kTrue }, { 0x1D, kFalse }, { 0x2C, kTrue } },
- { } },
- { 59, 719, "EGS_02E",
- { { 0x47, kTrue }, { 0x13, kTrue }, { 0x27, kFalse } },
- { } },
- { 58, 709, "EGS_02F",
- { { 0x47, kTrue }, { 0x13, kTrue }, { 0x27, kTrue } },
- { } },
- { 57, 708, "EGS_02G",
- { { 0x1E, kFalse }, { 0x18, kTrue }, { 0x2D, kFalse } },
- { } },
- { 56, 707, "EGS_02H",
- { { 0x1E, kFalse }, { 0x18, kTrue }, { 0x2D, kTrue } },
- { } },
- { 55, 706, "EGS_02I",
- { { 0x1E, kFalse }, { 0x1C, kTrue }, { 0x2A, kFalse } },
- { { 0x14, kFalse } } },
- { 54, 705, "EGS_02J",
- { { 0x1E, kFalse }, { 0x1C, kTrue }, { 0x2A, kTrue } },
- { { 0x14, kFalse } } },
- { 53, 704, "EGS_02K",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x25, kFalse } },
- { { 0x10, kFalse } } },
- { 52, 703, "EGS_02L",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x25, kTrue } },
- { { 0x10, kFalse } } },
- { 51, 702, "EGS_02M",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x29, kFalse } },
- { { 0x2, kFalse } } },
- { 50, 701, "EGS_02N",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x29, kTrue } },
- { { 0x2, kFalse } } },
- { 49, 700, "EGS_02O",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x2E, kFalse } },
- { { 0x3, kFalse } } },
- { 48, 699, "EGS_02P",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x2E, kTrue } },
- { { 0x3, kFalse } } },
- { 47, 698, "EGS_02Q",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x26, kFalse } },
- { { 0x7, kFalse } } },
- { 46, 697, "EGS_02R",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x26, kTrue } },
- { { 0x7, kFalse } } },
- { 45, 696, "EGS_02S",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x1D, kTrue }, { 0x2B, kFalse } },
- { } },
- { 44, 695, "EGS_02T",
- { { 0x52, kFalse }, { 0x4A, kTrue }, { 0x1D, kTrue }, { 0x2B, kTrue } },
- { } }
+{ // Mrs. Grimesby, 20 responses + 2 repeats
+ { 63, 714, "EGS_02A",
+ { { kEv, 0x17, kTrue }, { kEv, 0x28, kFalse } } },
+ { 63, 714, "EGS_02A",
+ { { kEv, 0x17, kFalse }, { kEv, 0x4F, kTrue }, { kEv, 0x28, kFalse } } },
+ { 62, 713, "EGS_02B",
+ { { kEv, 0x17, kTrue }, { kEv, 0x28, kTrue } } },
+ { 62, 713, "EGS_02B",
+ { { kEv, 0x17, kFalse }, { kEv, 0x4F, kTrue }, { kEv, 0x28, kTrue } } },
+ { 61, 712, "EGS_02C",
+ { { kEv, 0x50, kTrue }, { kEv, 0x1D, kFalse }, { kEv, 0x2C, kFalse } } },
+ { 60, 711, "EGS_02D",
+ { { kEv, 0x50, kTrue }, { kEv, 0x1D, kFalse }, { kEv, 0x2C, kTrue } } },
+ { 59, 719, "EGS_02E",
+ { { kEv, 0x47, kTrue }, { kEv, 0x13, kTrue }, { kEv, 0x27, kFalse } } },
+ { 58, 709, "EGS_02F",
+ { { kEv, 0x47, kTrue }, { kEv, 0x13, kTrue }, { kEv, 0x27, kTrue } } },
+ { 57, 708, "EGS_02G",
+ { { kEv, 0x1E, kFalse }, { kEv, 0x18, kTrue }, { kEv, 0x2D, kFalse } } },
+ { 56, 707, "EGS_02H",
+ { { kEv, 0x1E, kFalse }, { kEv, 0x18, kTrue }, { kEv, 0x2D, kTrue } } },
+ { 55, 706, "EGS_02I",
+ { { kEv, 0x1E, kFalse }, { kEv, 0x1C, kTrue }, { kEv, 0x2A, kFalse }, { kIn, 0x14, kFalse } } },
+ { 54, 705, "EGS_02J",
+ { { kEv, 0x1E, kFalse }, { kEv, 0x1C, kTrue }, { kEv, 0x2A, kTrue }, { kIn, 0x14, kFalse } } },
+ { 53, 704, "EGS_02K",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x25, kFalse }, { kIn, 0x10, kFalse } } },
+ { 52, 703, "EGS_02L",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x25, kTrue }, { kIn, 0x10, kFalse } } },
+ { 51, 702, "EGS_02M",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x29, kFalse }, { kIn, 0x2, kFalse } } },
+ { 50, 701, "EGS_02N",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x29, kTrue }, { kIn, 0x2, kFalse } } },
+ { 49, 700, "EGS_02O",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x2E, kFalse }, { kIn, 0x3, kFalse } } },
+ { 48, 699, "EGS_02P",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x2E, kTrue }, { kIn, 0x3, kFalse } } },
+ { 47, 698, "EGS_02Q",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x26, kFalse }, { kIn, 0x7, kFalse } } },
+ { 46, 697, "EGS_02R",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x26, kTrue }, { kIn, 0x7, kFalse } } },
+ { 45, 696, "EGS_02S",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x1D, kTrue }, { kEv, 0x2B, kFalse } } },
+ { 44, 695, "EGS_02T",
+ { { kEv, 0x52, kFalse }, { kEv, 0x4A, kTrue }, { kEv, 0x1D, kTrue }, { kEv, 0x2B, kTrue } } }
},
-{ // Aunt Judith, 11 responses
- { 74, 493, "JIC_01",
- { { 0x4, kFalse }, { 0x49, kTrue } },
- { { 0x7, kFalse } } },
- { 73, 492, "JIC_02",
- { { 0x10, kFalse }, { 0x18, kTrue } },
- { { 0xD, kFalse } } },
- { 72, 491, "JIC_03",
- { { 0xD, kFalse }, { 0x1C, kTrue } },
- { { 0xD, kFalse } } },
- { 71, 490, "JIC_04",
- { { 0xA, kFalse }, { 0x47, kTrue } },
- { { 0xD, kFalse } } },
- { 70, 489, "JIC_05",
- { { 0x4A, kTrue }, { 0x1, kFalse } },
- { { 0x10, kFalse } } },
- { 69, 488, "JIC_06",
- { { 0x4A, kTrue }, { 0x9, kFalse } },
- { { 0x7, kFalse } } },
- { 68, 487, "JIC_07",
- { { 0x4A, kTrue }, { 0x8, kFalse } },
- { { 0x2, kFalse } } },
- { 67, 486, "JIC_08",
- { { 0x4A, kTrue }, { 0x11, kFalse } },
- { { 0x3, kFalse } } },
- { 66, 485, "JIC_09",
- { { 0xC, kFalse }, { 0x46, kTrue }, { 0x1D, kFalse } },
- { } },
- { 65, 484, "JIC_10",
- { { 0xF, kFalse }, { 0x1D, kTrue } },
- { { 0x12, kFalse } } },
- { 64, 483, "JIC_11",
- { { 0xB, kFalse }, { 0x48, kTrue } },
- { { 0x5, kFalse } } },
+{ // Aunt Judith, 11 responses
+ { 74, 493, "JIC_01",
+ { { kEv, 0x4, kFalse }, { kEv, 0x49, kTrue }, { kIn, 0x7, kFalse } } },
+ { 73, 492, "JIC_02",
+ { { kEv, 0x10, kFalse }, { kEv, 0x18, kTrue }, { kIn, 0xD, kFalse } } },
+ { 72, 491, "JIC_03",
+ { { kEv, 0xD, kFalse }, { kEv, 0x1C, kTrue }, { kIn, 0xD, kFalse } } },
+ { 71, 490, "JIC_04",
+ { { kEv, 0xA, kFalse }, { kEv, 0x47, kTrue }, { kIn, 0xD, kFalse } } },
+ { 70, 489, "JIC_05",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x1, kFalse }, { kIn, 0x10, kFalse } } },
+ { 69, 488, "JIC_06",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x9, kFalse }, { kIn, 0x7, kFalse } } },
+ { 68, 487, "JIC_07",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x8, kFalse }, { kIn, 0x2, kFalse } } },
+ { 67, 486, "JIC_08",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x11, kFalse }, { kIn, 0x3, kFalse } } },
+ { 66, 485, "JIC_09",
+ { { kEv, 0xC, kFalse }, { kEv, 0x46, kTrue }, { kEv, 0x1D, kFalse } } },
+ { 65, 484, "JIC_10",
+ { { kEv, 0xF, kFalse }, { kEv, 0x1D, kTrue }, { kIn, 0x12, kFalse } } },
+ { 64, 483, "JIC_11",
+ { { kEv, 0xB, kFalse }, { kEv, 0x48, kTrue }, { kIn, 0x5, kFalse } } }
},
-{ // Mr. Richards, empty
+{ // Mr. Richards, empty
},
-{ // Mikhail, 6 responses
- { 80, 452, "MIC_01",
- { { 0x10, kFalse } },
- { { 0xD, kTrue }, { 0x14, kFalse } } },
- { 79, 451, "MIC_02",
- { { 0x4A, kTrue }, { 0x1, kFalse } },
- { { 0x10, kFalse } } },
- { 78, 450, "MIC_03",
- { { 0x4A, kTrue }, { 0x4, kFalse } },
- { { 0x7, kFalse } } },
- { 77, 449, "MIC_04",
- { { 0x4A, kTrue }, { 0x8, kFalse } },
- { { 0x2, kFalse } } },
- { 76, 448, "MIC_05",
- { { 0x4A, kTrue }, { 0x11, kFalse } },
- { { 0x3, kFalse } } },
- { 75, 448, "MIC_06",
- { { 0xF, kFalse }, { 0x1D, kTrue } },
- { { 0x12, kFalse } } }
+{ // Mikhail, 6 responses
+ { 80, 452, "MIC_01",
+ { { kEv, 0x10, kFalse }, { kIn, 0xD, kTrue }, { kIn, 0x14, kFalse } } },
+ { 79, 451, "MIC_02",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x1, kFalse }, { kIn, 0x10, kFalse } } },
+ { 78, 450, "MIC_03",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x4, kFalse }, { kIn, 0x7, kFalse } } },
+ { 77, 449, "MIC_04",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x8, kFalse }, { kIn, 0x2, kFalse } } },
+ { 76, 448, "MIC_05",
+ { { kEv, 0x4A, kTrue }, { kEv, 0x11, kFalse }, { kIn, 0x3, kFalse } } },
+ { 75, 448, "MIC_06",
+ { { kEv, 0xF, kFalse }, { kEv, 0x1D, kTrue }, { kIn, 0x12, kFalse } } }
}
};
static Common::Array<Goodbye> _tvdGoodbyes = {
- // Damon
- { "DAMBYE", { { { 809 }, {}, NOFLAG } } },
- // Security guard
- { "EGBYE", { { { 1108 }, {}, NOFLAG } } },
- // Mrs. Flowers
- { "FLOWBYE", { { { 1112, 1113, 1114 }, { { 0x3E, kFalse } }, NOFLAG },
- { { 1109, 1110, 1111 }, {}, NOFLAG } } },
- // Bonnie
- { "BONBYE", { { { 1103, 1104, 1105 }, { { 0x3E, kTrue } }, NOFLAG },
- { { 997 }, { { 0x3E, kFalse }, { 0x15, kTrue }, { 0x1B, kTrue }, { 0x20, kTrue }, { 0x3F, kTrue } }, { 0x41, kTrue } },
- { { 1100, 1101, 1102 }, {}, NOFLAG } } },
- // Caroline; S1142.IFF appears to be missing
- { "CAROLBYE", { { { 1140, 1141/*, 1142,*/ }, { { 0x3E, kFalse }, { 0x42, kTrue } }, NOFLAG },
- { { 1115, 1116, 1117 }, { { 0x3E, kFalse }, { 0x42, kFalse } }, NOFLAG },
- { { 1119 }, {}, NOFLAG } } },
- // Stefan
- { "STEFBYE", { { { 1121, 1122, 1123 }, { { 0x23, kTrue }, { 0x42, kTrue } }, NOFLAG },
- { { 1150 }, {}, NOFLAG } } },
- // Mrs. Grimesby
- { "GRMBYE", { { { 1124 }, {}, NOFLAG } } },
- // Aunt Judith
- { "JUDYBYE", { { { 1125 }, { { 0x3E, kFalse }, { 0x42, kFalse } }, NOFLAG },
- { { 1126 }, { { 0x3E, kFalse }, { 0x42, kTrue } }, NOFLAG },
- { { 1127 }, {}, NOFLAG } } },
- // Mr. Richards
- { "RICHBYE", { { { 1128 }, { { 0x59, kTrue } }, NOFLAG },
- { { 1129 }, {}, NOFLAG } } },
- // Mikhail
- { "EGBYE", { { { 1130 }, {}, NOFLAG } } }
+ // Damon
+ { "DAMBYE", { { { 809 }, {}, NOFLAG } } },
+ // Security guard
+ { "EGBYE", { { { 1108 }, {}, NOFLAG } } },
+ // Mrs. Flowers
+ { "FLOWBYE", { { { 1112, 1113, 1114 }, { { kEv, 0x3E, kFalse } }, NOFLAG },
+ { { 1109, 1110, 1111 }, {}, NOFLAG } } },
+ // Bonnie
+ { "BONBYE", { { { 1103, 1104, 1105 }, { { kEv, 0x3E, kTrue } }, NOFLAG },
+ { { 997 }, { { kEv, 0x3E, kFalse }, { kEv, 0x15, kTrue }, { kEv, 0x1B, kTrue }, { kEv, 0x20, kTrue }, { kEv, 0x3F, kTrue } }, { kEv, 0x41, kTrue } },
+ { { 1100, 1101, 1102 }, {}, NOFLAG } } },
+ // Caroline; S1142.IFF appears to be missing
+ { "CAROLBYE", { { { 1140, 1141/*, 1142,*/ }, { { kEv, 0x3E, kFalse }, { kEv, 0x42, kTrue } }, NOFLAG },
+ { { 1115, 1116, 1117 }, { { kEv, 0x3E, kFalse }, { kEv, 0x42, kFalse } }, NOFLAG },
+ { { 1119 }, {}, NOFLAG } } },
+ // Stefan
+ { "STEFBYE", { { { 1121, 1122, 1123 }, { { kEv, 0x23, kTrue }, { kEv, 0x42, kTrue } }, NOFLAG },
+ { { 1150 }, {}, NOFLAG } } },
+ // Mrs. Grimesby
+ { "GRMBYE", { { { 1124 }, {}, NOFLAG } } },
+ // Aunt Judith
+ { "JUDYBYE", { { { 1125 }, { { kEv, 0x3E, kFalse }, { kEv, 0x42, kFalse } }, NOFLAG },
+ { { 1126 }, { { kEv, 0x3E, kFalse }, { kEv, 0x42, kTrue } }, NOFLAG },
+ { { 1127 }, {}, NOFLAG } } },
+ // Mr. Richards
+ { "RICHBYE", { { { 1128 }, { { kEv, 0x59, kTrue } }, NOFLAG },
+ { { 1129 }, {}, NOFLAG } } },
+ // Mikhail
+ { "EGBYE", { { { 1130 }, {}, NOFLAG } } }
};
const Common::Array<Common::Array<const char *>> _tvdConditionalDialogueTexts = { {
- // 00
- "<c1>D<c0>id you find a ring in the cemetery the other night? It was made of silver and Lapis.<h><n>",
- "<c1>I<c0>'m looking for silver and Lapis for a project I'm doing. Do you know where I could find some?<h><n>",
- "<c1>W<c0>ill you trade the vervain for this rune?<h><n>",
- "<c1>W<c0>ill you trade the vervain for some Lapis?<h><n>",
- "<c1>W<c0>ill you trade the vervain for my class ring?<h><n>",
- // 05
- "<c1>W<c0>ill you trade the vervain for this key?<h><n>",
- "<c1>W<c0>ill you trade the vervain for an owl feather?<h><n>",
- "<c1>W<c0>ill you trade the vervain for the dagger?<h><n>",
- "<c1>W<c0>ill you trade the vervain for this black candle?<h><n>",
- "<c1>I<c0>'ve got some gold to trade for the vervain, Mrs. Flowers. Would you take that?<h><n>",
- // 10
- "<c1>I<c0>'ve got something to trade for the vervain, Mrs. Flowers.It's a beautiful antique mortar and pestle I found in my attic. It belonged to my mother.<h><n>",
- "<c1>Y<c0>ou wouldn't happen to know what vervain is, would you, Mrs. Flowers?<h><n>",
- "<c1>I<c0>'m looking for an owls feather. Do you have any idea where I could find one?<h><n>",
- "<c1>T<c0>his sounds strange, I know, but I'm looking for a dagger.<h><n>",
- "<c1>Y<c0>ou wouldn't happen to have any black candles, would you, Mrs. Flowers?<h><n>",
- // 15
- "<c1>M<c0>rs. Flowers, how can someone my age get a loan? There's something at the gallery I have to have.<h><n>",
- "<c1>H<c0>ave you ever heard of runes, Mrs. Flowers? Bonnie swears they're for real, but I'm not so sure I should believe her.<h><n>",
- "<c1>W<c0>hat was that you told me about runes, Mrs. Flowers? I'm sorry, I forgot.<h><n>",
- "<c1>Y<c0>ou seem to know a lot of strange stuff, Mrs. Flowers. Do you know anything about Druids, by any chance?<h><n>",
- "<c1>H<c0>ave you seen the newspaper article on Mr. Richards' collection? Now he's got some weird dagger. Pretty creepy, huh?<h><n>",
- // 20
- "<c1>I<c0> went to the graveyard, at night, just like your grandmother said in her diary. And I did the Ring Ceremony. But I don't have the Ring and I can't find the silver or Lapis either. What do I do?<h><n>",
- "<c1>I<c0>n the spell book, it said I need vervain to power the binding spell. Do you have any vervain, Bonnie? What about Mr. Richards?<h><n>",
- "<c1>A<c0>ccording to the spell book, I need an owl feather -- of all things -- in the binding spell. If anybody has seen an owl around, I figured it would be you.<h><n>",
- "<c1>T<c0>he spell book said I need a dagger to complete the binding spell. There's only one dagger I can think of. Can you help me?<h><n>",
- "<c1>B<c0>onnie, the spell book said I need a black candle for the binding spell. But I don't know where to find one, do you?<h><n>",
- // 25
- "<c1>I<c0> read that ghost story about Adelaide Chambers, you remember it. I think there really is gold buried in her grave. But I can't get past the ghost that's guarding it. Do you have any ideas?<h><n>",
- "<c1>I<c0> think I found a rune to replace the one you're missing, Bonnie. It's in Mikhail's art gallery. But Caroline said it will cost loads of money? Do you have any idea what I can do?<h><n>",
- "<c1>I<c0> read your grandmother's diary, Bonnie. She says you need silver and Lapis to make a Ring of Power. Do you have any idea where I could find some?<h><n>",
- "<c1>I<c0> know you know something about Runes, Bonnie. What can you tell me about them?<h><n>",
- "<c1>H<c0>ave you ever heard of Druids, Bonnie? I heard they believed in magic, so I thought you might know something about them.<h><n>",
- // 30
- "<c1>T<c0>hat's a rune over there, isn't it? Bonnie would sure like that for her birthday. How much is it?<h><n>",
- "<c1>D<c0>o you know anything about the display Mr. Smith is doing for the high school?<h><n>",
- "<c1>M<c0>r. Smith gave you a ride home from the hospital, right? What do you know about him?<h><n>",
- "<c1>H<c0>ave you heard anything about that new dagger Gary Richards has added to his collection? Has Mikhail said mentioned it?<h><n>",
- "<c1>W<c0>hat am I going to do, Stefan? I did the ceremony to summon the Ring Maker, but nothing happened. And now I don't have the silver, or the Lapis, or the Ring of Power!<h><n>",
- // 35
- "<c1>A<c0>ccording to the diary of Bonnie's grandmother, I need silver and Lapis for a Ring of Power. But I don't have any silver or Lapis. And I need to summon the ring maker once I have the ingredients..<h><n>",
- "<c1>T<c0>here's one more thing that I need for the binding spell, Stefan. Some vervain. But I have no idea where to find any. Do you have any ideas?<h><n>",
- "<c1>O<c0>kay, I've got the binding spell, but I need an owl feather. You wouldn't happen to be an owl in your other form, would you?<h><n>",
- "<c1>N<c0>ow that I've found the binding spell, I need a black candle. But why does it have to be a black candle, and not a red or white candle?<h><n>",
- "<c1>D<c0>o you have any idea how I could get rid of Adelaide Chambers' ghost, Stefan? I need to find out if there's gold buried there. But every time I try to get near, she drives me off.<h><n>",
- // 40
- "<c1>I<c0> think I found a rune to replace the one that Bonnie is missing. The only snag is that it's for sale in Mikhail's art gallery. Which means that a need a whole lot of money to buy it. You wouldn'thappen to have any money you could lend me, do you?<h><n>",
- "<c1>B<c0>onnie told me that she's missing one of her grandmother's runes, Stefan. You wouldn't know where I could find it, do you?<h><n>",
- "<c1>I<c0> read about the Brasov Dagger in the paper, Stefan. They said it had something to do with immortality. But that doesn't sound right. What can you tell me about it?<h><n>",
- "<c1>I<c0>'ve got everything. Stefan. And -- it's the weirdest thing -- Bonnie and Mrs. Flowers just came to tell me it's time, that he's drawing in his power. Will you come with me, please?<h><n>",
- "<c1>H<c0>as anyone mentioned finding a silver and lapis ring yet, Mrs. Grimesby?<h><n>",
- // 45
- "<c1>I<c0>'m looking for a ring, made of silver and lapis. Have you seen it?<h><n>",
- "<c1>I<c0>'m still trying to find out about that weird dagger. Can you tell me anything more?<h><n>",
- "<c1>H<c0>ave you ever heard of a magical dagger that has something to do with ULTIMATE POWER?<h><n>",
- "<c1>W<c0>hat else can you tell me about vervain?<h><n>",
- "<c1>W<c0>hat's vervain?<h><n>",
- // 50
- "<c1>I<c0>'m still looking for an owl feather. What can I do?<h><n>",
- "<c1>D<c0>o you have any idea where I can find an owl feather?<h><n>",
- "<c1>I<c0>'m still looking for a black candle, Mrs. Grimesby. Can you help me?<h><n>",
- "<c1>I<c0>'m looking for a black candle. Do you know where I can find one?<h><n>",
- "<c1>I<c0>'m still trying to find enough money to buy something from the art gallery. Do you have any idea what I can do?<h><n>",
- // 55
- "<c1>M<c0>rs. Grimesby, do you have any idea where I can get enough money to buy something from the art gallery?<h><n>",
- "<c1>W<c0>here was that information about Runes again, please?<h><n>",
- "<c1>W<c0>here can I find something about Runes? You know, those Viking fortune-telling things.<h><n>",
- "<c1>W<c0>here did you say I could find something from that Civil War ghost story, Mrs. Grimesby?<h><n>",
- "<c1>I<c0> read a ghost story about the daughter of a Union general who was in love with a Confederate soldier. Do you know if it's true?<h><n>",
- // 60
- "<c1>W<c0>hat was it you said about a Ring of Power?<h><n>",
- "<c1>H<c0>ave you ever heard of something called a Ring of Power?<h><n>",
- "<c1>C<c0>an you tell about Druids again, please?<h><n>",
- "<c1>W<c0>hat can you tell me about Druids?<h><n>",
- "<c1>A<c0>unt Judith, do you know what Margaret did with the key to my jewelry box?<h><n>",
- // 65
- "<c1>I<c0> was looking for a silver ring. Have you seen one, Aunt Judith?<h><n>",
- "<c1>D<c0>o you have any idea where I could find any silver or Lapis jewelry, Aunt Judith?<h><n>",
- "<c1>A<c0>unt Judith, do you know where I could find some vervain?<h><n>",
- "<c1>W<c0>ould you know how I could get an owl feather?<h><n>",
- "<c1>H<c0>ow could I get Mr. Richards to lend me his new dagger?<h><n>",
- // 70
- "<c1>D<c0>o you know where I could find a black candle, Aunt Judith?<h><n>",
- "<c1>D<c0>o you remember the old ghost story about Adelaide Chambers, Aunt Judith? A book in the library says she was buried with gold. Do you think it's true?<h><n>",
- "<c1>I<c0> want to buy something from the art gallery, Aunt Judith. Can you help me?<h><n>",
- "<c1>D<c0>o you know anything about runes, Aunt Judith? Bonnie said one of her's is missing and I'd like to get her another one.<h><n>",
- "<c1>D<c0>o you know anything about that dagger Mr. Richards just added to his collection, Aunt Judith?<h><n>",
- // 75
- "<c1>I<c0> lost a ring, it was made of silver and Lapis. You haven't seen it, have you?<h><n>",
- "<c1>I<c0>'m trying to find some vervain. Do you know where I could find some?<h><n>",
- "<c1>H<c0>ave you by any chance seen any owl feathers anywhere around?<h><n>",
- "<c1>I<c0>'m looking for a special dagger, it's supposed to have something to do with Ultimate Power or something. Can you help me?<h><n>",
- "<c1>C<c0>ould you tell me where I could find a black candle, please?<h><n>",
- // 80
- "<c1>I<c0>'m interested in buying a rune you have for sale.<h><n>"
+ // 00
+ "<c1>D<c0>id you find a ring in the cemetery the other night? It was made of silver and Lapis.<h><n>",
+ "<c1>I<c0>'m looking for silver and Lapis for a project I'm doing. Do you know where I could find some?<h><n>",
+ "<c1>W<c0>ill you trade the vervain for this rune?<h><n>",
+ "<c1>W<c0>ill you trade the vervain for some Lapis?<h><n>",
+ "<c1>W<c0>ill you trade the vervain for my class ring?<h><n>",
+ // 05
+ "<c1>W<c0>ill you trade the vervain for this key?<h><n>",
+ "<c1>W<c0>ill you trade the vervain for an owl feather?<h><n>",
+ "<c1>W<c0>ill you trade the vervain for the dagger?<h><n>",
+ "<c1>W<c0>ill you trade the vervain for this black candle?<h><n>",
+ "<c1>I<c0>'ve got some gold to trade for the vervain, Mrs. Flowers. Would you take that?<h><n>",
+ // 10
+ "<c1>I<c0>'ve got something to trade for the vervain, Mrs. Flowers.It's a beautiful antique mortar and pestle I found in my attic. It belonged to my mother.<h><n>",
+ "<c1>Y<c0>ou wouldn't happen to know what vervain is, would you, Mrs. Flowers?<h><n>",
+ "<c1>I<c0>'m looking for an owls feather. Do you have any idea where I could find one?<h><n>",
+ "<c1>T<c0>his sounds strange, I know, but I'm looking for a dagger.<h><n>",
+ "<c1>Y<c0>ou wouldn't happen to have any black candles, would you, Mrs. Flowers?<h><n>",
+ // 15
+ "<c1>M<c0>rs. Flowers, how can someone my age get a loan? There's something at the gallery I have to have.<h><n>",
+ "<c1>H<c0>ave you ever heard of runes, Mrs. Flowers? Bonnie swears they're for real, but I'm not so sure I should believe her.<h><n>",
+ "<c1>W<c0>hat was that you told me about runes, Mrs. Flowers? I'm sorry, I forgot.<h><n>",
+ "<c1>Y<c0>ou seem to know a lot of strange stuff, Mrs. Flowers. Do you know anything about Druids, by any chance?<h><n>",
+ "<c1>H<c0>ave you seen the newspaper article on Mr. Richards' collection? Now he's got some weird dagger. Pretty creepy, huh?<h><n>",
+ // 20
+ "<c1>I<c0> went to the graveyard, at night, just like your grandmother said in her diary. And I did the Ring Ceremony. But I don't have the Ring and I can't find the silver or Lapis either. What do I do?<h><n>",
+ "<c1>I<c0>n the spell book, it said I need vervain to power the binding spell. Do you have any vervain, Bonnie? What about Mr. Richards?<h><n>",
+ "<c1>A<c0>ccording to the spell book, I need an owl feather -- of all things -- in the binding spell. If anybody has seen an owl around, I figured it would be you.<h><n>",
+ "<c1>T<c0>he spell book said I need a dagger to complete the binding spell. There's only one dagger I can think of. Can you help me?<h><n>",
+ "<c1>B<c0>onnie, the spell book said I need a black candle for the binding spell. But I don't know where to find one, do you?<h><n>",
+ // 25
+ "<c1>I<c0> read that ghost story about Adelaide Chambers, you remember it. I think there really is gold buried in her grave. But I can't get past the ghost that's guarding it. Do you have any ideas?<h><n>",
+ "<c1>I<c0> think I found a rune to replace the one you're missing, Bonnie. It's in Mikhail's art gallery. But Caroline said it will cost loads of money? Do you have any idea what I can do?<h><n>",
+ "<c1>I<c0> read your grandmother's diary, Bonnie. She says you need silver and Lapis to make a Ring of Power. Do you have any idea where I could find some?<h><n>",
+ "<c1>I<c0> know you know something about Runes, Bonnie. What can you tell me about them?<h><n>",
+ "<c1>H<c0>ave you ever heard of Druids, Bonnie? I heard they believed in magic, so I thought you might know something about them.<h><n>",
+ // 30
+ "<c1>T<c0>hat's a rune over there, isn't it? Bonnie would sure like that for her birthday. How much is it?<h><n>",
+ "<c1>D<c0>o you know anything about the display Mr. Smith is doing for the high school?<h><n>",
+ "<c1>M<c0>r. Smith gave you a ride home from the hospital, right? What do you know about him?<h><n>",
+ "<c1>H<c0>ave you heard anything about that new dagger Gary Richards has added to his collection? Has Mikhail said mentioned it?<h><n>",
+ "<c1>W<c0>hat am I going to do, Stefan? I did the ceremony to summon the Ring Maker, but nothing happened. And now I don't have the silver, or the Lapis, or the Ring of Power!<h><n>",
+ // 35
+ "<c1>A<c0>ccording to the diary of Bonnie's grandmother, I need silver and Lapis for a Ring of Power. But I don't have any silver or Lapis. And I need to summon the ring maker once I have the ingredients..<h><n>",
+ "<c1>T<c0>here's one more thing that I need for the binding spell, Stefan. Some vervain. But I have no idea where to find any. Do you have any ideas?<h><n>",
+ "<c1>O<c0>kay, I've got the binding spell, but I need an owl feather. You wouldn't happen to be an owl in your other form, would you?<h><n>",
+ "<c1>N<c0>ow that I've found the binding spell, I need a black candle. But why does it have to be a black candle, and not a red or white candle?<h><n>",
+ "<c1>D<c0>o you have any idea how I could get rid of Adelaide Chambers' ghost, Stefan? I need to find out if there's gold buried there. But every time I try to get near, she drives me off.<h><n>",
+ // 40
+ "<c1>I<c0> think I found a rune to replace the one that Bonnie is missing. The only snag is that it's for sale in Mikhail's art gallery. Which means that a need a whole lot of money to buy it. You wouldn'thappen to have any money you could lend me, do you?<h><n>",
+ "<c1>B<c0>onnie told me that she's missing one of her grandmother's runes, Stefan. You wouldn't know where I could find it, do you?<h><n>",
+ "<c1>I<c0> read about the Brasov Dagger in the paper, Stefan. They said it had something to do with immortality. But that doesn't sound right. What can you tell me about it?<h><n>",
+ "<c1>I<c0>'ve got everything. Stefan. And -- it's the weirdest thing -- Bonnie and Mrs. Flowers just came to tell me it's time, that he's drawing in his power. Will you come with me, please?<h><n>",
+ "<c1>H<c0>as anyone mentioned finding a silver and lapis ring yet, Mrs. Grimesby?<h><n>",
+ // 45
+ "<c1>I<c0>'m looking for a ring, made of silver and lapis. Have you seen it?<h><n>",
+ "<c1>I<c0>'m still trying to find out about that weird dagger. Can you tell me anything more?<h><n>",
+ "<c1>H<c0>ave you ever heard of a magical dagger that has something to do with ULTIMATE POWER?<h><n>",
+ "<c1>W<c0>hat else can you tell me about vervain?<h><n>",
+ "<c1>W<c0>hat's vervain?<h><n>",
+ // 50
+ "<c1>I<c0>'m still looking for an owl feather. What can I do?<h><n>",
+ "<c1>D<c0>o you have any idea where I can find an owl feather?<h><n>",
+ "<c1>I<c0>'m still looking for a black candle, Mrs. Grimesby. Can you help me?<h><n>",
+ "<c1>I<c0>'m looking for a black candle. Do you know where I can find one?<h><n>",
+ "<c1>I<c0>'m still trying to find enough money to buy something from the art gallery. Do you have any idea what I can do?<h><n>",
+ // 55
+ "<c1>M<c0>rs. Grimesby, do you have any idea where I can get enough money to buy something from the art gallery?<h><n>",
+ "<c1>W<c0>here was that information about Runes again, please?<h><n>",
+ "<c1>W<c0>here can I find something about Runes? You know, those Viking fortune-telling things.<h><n>",
+ "<c1>W<c0>here did you say I could find something from that Civil War ghost story, Mrs. Grimesby?<h><n>",
+ "<c1>I<c0> read a ghost story about the daughter of a Union general who was in love with a Confederate soldier. Do you know if it's true?<h><n>",
+ // 60
+ "<c1>W<c0>hat was it you said about a Ring of Power?<h><n>",
+ "<c1>H<c0>ave you ever heard of something called a Ring of Power?<h><n>",
+ "<c1>C<c0>an you tell about Druids again, please?<h><n>",
+ "<c1>W<c0>hat can you tell me about Druids?<h><n>",
+ "<c1>A<c0>unt Judith, do you know what Margaret did with the key to my jewelry box?<h><n>",
+ // 65
+ "<c1>I<c0> was looking for a silver ring. Have you seen one, Aunt Judith?<h><n>",
+ "<c1>D<c0>o you have any idea where I could find any silver or Lapis jewelry, Aunt Judith?<h><n>",
+ "<c1>A<c0>unt Judith, do you know where I could find some vervain?<h><n>",
+ "<c1>W<c0>ould you know how I could get an owl feather?<h><n>",
+ "<c1>H<c0>ow could I get Mr. Richards to lend me his new dagger?<h><n>",
+ // 70
+ "<c1>D<c0>o you know where I could find a black candle, Aunt Judith?<h><n>",
+ "<c1>D<c0>o you remember the old ghost story about Adelaide Chambers, Aunt Judith? A book in the library says she was buried with gold. Do you think it's true?<h><n>",
+ "<c1>I<c0> want to buy something from the art gallery, Aunt Judith. Can you help me?<h><n>",
+ "<c1>D<c0>o you know anything about runes, Aunt Judith? Bonnie said one of her's is missing and I'd like to get her another one.<h><n>",
+ "<c1>D<c0>o you know anything about that dagger Mr. Richards just added to his collection, Aunt Judith?<h><n>",
+ // 75
+ "<c1>I<c0> lost a ring, it was made of silver and Lapis. You haven't seen it, have you?<h><n>",
+ "<c1>I<c0>'m trying to find some vervain. Do you know where I could find some?<h><n>",
+ "<c1>H<c0>ave you by any chance seen any owl feathers anywhere around?<h><n>",
+ "<c1>I<c0>'m looking for a special dagger, it's supposed to have something to do with Ultimate Power or something. Can you help me?<h><n>",
+ "<c1>C<c0>ould you tell me where I could find a black candle, please?<h><n>",
+ // 80
+ "<c1>I<c0>'m interested in buying a rune you have for sale.<h><n>"
} };
const Common::Array<Common::Array<const char *>> _tvdGoodbyeTexts = { {
- "<c1>I<c0> think I'd better go.<h>", // DAMBYE
- "<c1>b<c0>ye.<h>", // EGBYE
- "<c1>I<c0> should go now, Mrs. Flowers. I'll see you later, okay?.<h>", // FLOWBYE
- "<c1>S<c0>ee you later, Bonnie..<h>", // BONBYE
- "<c1>F<c0>ine. I am out of here..<h>", // CAROLBYE
- "<c1>I<c0>'ll be back soon, Stefan. I promise..<h>", // STEFBYE
- "<c1>b<c0>ye.<h>", // GRMBYE
- "<c1>S<c0>ee you later, Aunt Judith..<h>", // JUDYBYE
- "<c1>I<c0> guess it's time for me to go..<h>", // RICHBYE
- "<c1>b<c0>ye.<h>", // EGBYE, again
+ "<c1>I<c0> think I'd better go.<h>", // DAMBYE
+ "<c1>b<c0>ye.<h>", // EGBYE
+ "<c1>I<c0> should go now, Mrs. Flowers. I'll see you later, okay?.<h>", // FLOWBYE
+ "<c1>S<c0>ee you later, Bonnie..<h>", // BONBYE
+ "<c1>F<c0>ine. I am out of here..<h>", // CAROLBYE
+ "<c1>I<c0>'ll be back soon, Stefan. I promise..<h>", // STEFBYE
+ "<c1>b<c0>ye.<h>", // GRMBYE
+ "<c1>S<c0>ee you later, Aunt Judith..<h>", // JUDYBYE
+ "<c1>I<c0> guess it's time for me to go..<h>", // RICHBYE
+ "<c1>b<c0>ye.<h>", // EGBYE, again
} };
const Common::Array<const char *> _tvdEventFlagNames = {
- "Aristocrat Bonnie told about mikhails bgnd",
- "AskedCandle asked about a black candle",
- "AskedCaroline asked Mikhail about caroline (in EG)",
- "AskedChildren ask Mik about children EG",
- "AskedDagger asked about the dagger",
- "AskedDamon asked about Damon",
- "AskedDisplay ask about display at school",
- "AskedDruids asked about druids",
- "AskedFeather asked about owl feathers",
- "AskedGetDagger ask about getting dagger",
- "AskedGold ask how to get gold from ghost",
- "AskedKey ask about key to her jewelry box",
- "AskedLapis asked about Lapis",
- "AskedMoney asked to borrow money",
- "AskedMortar asked to trade the Mortar",
- "AskedRing asked if whoever has seen the ring",
- "AskedRunes asked about runes",
- "AskedVervain asked about Vervain",
- "AskedWhy asked Mikhail why he is doing this",
- "BeenToGrave ",
- "BeenToHospitalOnce ",
- "BonieIntro met Bonnie",
- "BonnieMad Bonnie mad during convo at party",
- "BonnieSaidDruid Bonnie mentioned her druid relatives",
- "BonnieToldRunes Bonnie said missing rune",
- "BonnieToldJob Bonnie told about her job",
- "CarolineAngry made Caroline angry",
- "CarolineIntro met Caroline",
- "CarolineSaidMoney Caroline told rune costs",
- "DoneRingCeremony ",
- "DoneRuneReading",
- "DumbGuySaveGame Not really used",
- "FlowersIntro met Mrs Flowers",
- "FlowersSaidTrade Flowers told about trade",
- "FlowersToldRunes Flowers talked about runes",
- "GoneToLounge",
- "GrimesbyTalked talked to Grimesby",
- "GToldCandle Grimesby has mentioned candles",
- "GToldDagger Grimesby has mentioned dagger",
- "GToldDisplay Grimesby mentioned display",
- "GToldDruid",
- "GToldFeather Grimesby talked about feathers",
- "GToldGold Grimesby talked about gold",
- "GToldLapisRing mentioned ring to Grimesby",
- "GToldRingOfPower asked Grimesby ring of power",
- "GToldRunes Grimesby told where to find runes info",
- "GToldVervain Grimesby player about vervain ",
- "GuardCaught",
- "GuardMad player makes the guard mad",
- "GuardToldKey guard tells the player about the key",
- "School door chain is broken",
- "IntoThePit",
- "Elena Gone To Bed",
- "Damon At Desk",
- "Caroline Hospital Done",
- "Mikhail Working",
- "End Game Puzzle",
- "Judith Talked Once",
- "Stefan Talked Once",
- "Player Won Game",
- "Seen Ghost Attack",
- "Ghost Kiss Done",
- "IntroDone",
- "JudithIntro met Aunt Judy",
- "JudithToldCandle Judy told where the candle is",
- "LastToTalk ",
- "MargaretAttacked ",
- "MikhailMet player has met Mikhail",
- "MikhailTrapped ",
- "Dream Done",
- "ReadDiary ",
- "ReadGhostStory ",
- "ReadMargaretNote ",
- "ReadPaper ",
- "ReadSpellBook ",
- "RichardsIntro met Gary Richards",
- "RingCeremonyStarted ",
- "StefanIntro player has met Stefan",
- "StefanSaidBrother Stefan has mentioned his brother",
- "StefanSaidDruid Stefan mentioned druids",
- "StefanSaidRingOfPower Stefan mentioned ring of power",
- "TalkedToMikhail talked to Mikhail",
- "TimeForEndgame",
- "ToldAboutMary player mentioned Bonnies sister to Gary",
- "ToldBite ",
- "ToldDangerous ",
- "ToldDisplay player been told about school display",
- "ToldInnocent player been told about innocent blood?",
- "ToldVampire player been told Stefan is a vampire",
- "ToldVampireDagger player been told relation between dagger and vampires?",
- "TradeCandle player has offered the candle to Flowers",
- "TradeDagger player offered dagger to Flowers",
- "TradeFeather player offered the feather to flowers",
- "TradeGold player has offered gold to flowers",
- "TradeKey player has offered the key to flowers",
- "TradeLapis player has offered the lapis to flowers",
- "TradeClassRing offered class ring to flowers",
- "TradeRune player offered the rune to flowers",
- "TriedToOpenDoor tried door at Gary's house during day",
- "TriggerScream ",
- "WhereIsMikhail ",
- "Stop player scrolling ",
- "GaryRichardsMezzDragonSlider ",
- "GaryRichardsSpiralStaircase ",
- "SirenSoundEffect",
- "Stormy",
- "Dagger Puzzle",
- "Owl Puzzle",
- "Magic Book Movie",
- "Mask Used On Door",
- "Generic 0, single scene only - clear, set, clear",
- "Generic 1, single scene only - clear, set, clear",
- "Generic 2, single scene only - clear, set, clear",
- "Generic 3, single scene only - clear, set, clear",
- "Generic 4, single scene only - clear, set, clear",
- " ",
+ "Aristocrat Bonnie told about mikhails bgnd",
+ "AskedCandle asked about a black candle",
+ "AskedCaroline asked Mikhail about caroline (in EG)",
+ "AskedChildren ask Mik about children EG",
+ "AskedDagger asked about the dagger",
+ "AskedDamon asked about Damon",
+ "AskedDisplay ask about display at school",
+ "AskedDruids asked about druids",
+ "AskedFeather asked about owl feathers",
+ "AskedGetDagger ask about getting dagger",
+ "AskedGold ask how to get gold from ghost",
+ "AskedKey ask about key to her jewelry box",
+ "AskedLapis asked about Lapis",
+ "AskedMoney asked to borrow money",
+ "AskedMortar asked to trade the Mortar",
+ "AskedRing asked if whoever has seen the ring",
+ "AskedRunes asked about runes",
+ "AskedVervain asked about Vervain",
+ "AskedWhy asked Mikhail why he is doing this",
+ "BeenToGrave ",
+ "BeenToHospitalOnce ",
+ "BonieIntro met Bonnie",
+ "BonnieMad Bonnie mad during convo at party",
+ "BonnieSaidDruid Bonnie mentioned her druid relatives",
+ "BonnieToldRunes Bonnie said missing rune",
+ "BonnieToldJob Bonnie told about her job",
+ "CarolineAngry made Caroline angry",
+ "CarolineIntro met Caroline",
+ "CarolineSaidMoney Caroline told rune costs",
+ "DoneRingCeremony ",
+ "DoneRuneReading",
+ "DumbGuySaveGame Not really used",
+ "FlowersIntro met Mrs Flowers",
+ "FlowersSaidTrade Flowers told about trade",
+ "FlowersToldRunes Flowers talked about runes",
+ "GoneToLounge",
+ "GrimesbyTalked talked to Grimesby",
+ "GToldCandle Grimesby has mentioned candles",
+ "GToldDagger Grimesby has mentioned dagger",
+ "GToldDisplay Grimesby mentioned display",
+ "GToldDruid",
+ "GToldFeather Grimesby talked about feathers",
+ "GToldGold Grimesby talked about gold",
+ "GToldLapisRing mentioned ring to Grimesby",
+ "GToldRingOfPower asked Grimesby ring of power",
+ "GToldRunes Grimesby told where to find runes info",
+ "GToldVervain Grimesby player about vervain ",
+ "GuardCaught",
+ "GuardMad player makes the guard mad",
+ "GuardToldKey guard tells the player about the key",
+ "School door chain is broken",
+ "IntoThePit",
+ "Elena Gone To Bed",
+ "Damon At Desk",
+ "Caroline Hospital Done",
+ "Mikhail Working",
+ "End Game Puzzle",
+ "Judith Talked Once",
+ "Stefan Talked Once",
+ "Player Won Game",
+ "Seen Ghost Attack",
+ "Ghost Kiss Done",
+ "IntroDone",
+ "JudithIntro met Aunt Judy",
+ "JudithToldCandle Judy told where the candle is",
+ "LastToTalk ",
+ "MargaretAttacked ",
+ "MikhailMet player has met Mikhail",
+ "MikhailTrapped ",
+ "Dream Done",
+ "ReadDiary ",
+ "ReadGhostStory ",
+ "ReadMargaretNote ",
+ "ReadPaper ",
+ "ReadSpellBook ",
+ "RichardsIntro met Gary Richards",
+ "RingCeremonyStarted ",
+ "StefanIntro player has met Stefan",
+ "StefanSaidBrother Stefan has mentioned his brother",
+ "StefanSaidDruid Stefan mentioned druids",
+ "StefanSaidRingOfPower Stefan mentioned ring of power",
+ "TalkedToMikhail talked to Mikhail",
+ "TimeForEndgame",
+ "ToldAboutMary player mentioned Bonnies sister to Gary",
+ "ToldBite ",
+ "ToldDangerous ",
+ "ToldDisplay player been told about school display",
+ "ToldInnocent player been told about innocent blood?",
+ "ToldVampire player been told Stefan is a vampire",
+ "ToldVampireDagger player been told relation between dagger and vampires?",
+ "TradeCandle player has offered the candle to Flowers",
+ "TradeDagger player offered dagger to Flowers",
+ "TradeFeather player offered the feather to flowers",
+ "TradeGold player has offered gold to flowers",
+ "TradeKey player has offered the key to flowers",
+ "TradeLapis player has offered the lapis to flowers",
+ "TradeClassRing offered class ring to flowers",
+ "TradeRune player offered the rune to flowers",
+ "TriedToOpenDoor tried door at Gary's house during day",
+ "TriggerScream ",
+ "WhereIsMikhail ",
+ "Stop player scrolling ",
+ "GaryRichardsMezzDragonSlider ",
+ "GaryRichardsSpiralStaircase ",
+ "SirenSoundEffect",
+ "Stormy",
+ "Dagger Puzzle",
+ "Owl Puzzle",
+ "Magic Book Movie",
+ "Mask Used On Door",
+ "Generic 0, single scene only - clear, set, clear",
+ "Generic 1, single scene only - clear, set, clear",
+ "Generic 2, single scene only - clear, set, clear",
+ "Generic 3, single scene only - clear, set, clear",
+ "Generic 4, single scene only - clear, set, clear",
+ " ",
" ",
" ",
" ",
diff --git a/devtools/create_nancy/types.h b/devtools/create_nancy/types.h
index ac46452098e..97e9d06c048 100644
--- a/devtools/create_nancy/types.h
+++ b/devtools/create_nancy/types.h
@@ -26,9 +26,10 @@
#include "common/array.h"
#include "common/language.h"
-#define NOFLAG { -1, kFalse }
+#define NOFLAG { kEv, -1, kFalse }
enum NancyFlag : byte { kFalse = 1, kTrue = 2 };
+enum ConditionType : byte { kEv = 0, kIn = 1, kDi = 2 };
struct GameConstants {
uint16 numItems;
@@ -41,6 +42,7 @@ struct GameConstants {
};
struct EventFlagDescription {
+ byte type;
int16 label;
byte flag; // NancyFlag up to nancy2, bool from nancy3 up
};
@@ -53,11 +55,10 @@ struct SceneChangeDescription {
};
struct ConditionalDialogue {
- byte textID;
- uint16 sceneID;
- const char *soundID;
- Common::Array<EventFlagDescription> flagConditions;
- Common::Array<EventFlagDescription> inventoryConditions;
+ byte textID;
+ uint16 sceneID;
+ const char *soundID;
+ Common::Array<EventFlagDescription> conditions;
};
struct GoodbyeSceneChange {
@@ -72,12 +73,18 @@ struct Goodbye {
};
struct Hint {
- byte textID;
- int16 hintWeight;
- SceneChangeDescription sceneChange;
- const char *soundIDs[3];
- Common::Array<EventFlagDescription> flagConditions;
- Common::Array<EventFlagDescription> inventoryConditions;
+ byte textID;
+ int16 hintWeight;
+ const char *soundIDs[3];
+ Common::Array<EventFlagDescription> conditions;
+};
+
+struct SoundChannelInfo {
+ byte numChannels;
+ byte numSceneSpecificChannels;
+ Common::Array<byte> speechChannels; // 0 in the original engine
+ Common::Array<byte> musicChannels; // 1
+ Common::Array<byte> sfxChannels; // 2
};
#endif // CREATE_NANCY_TYPES_H
Commit: d8fe9cb4c132ca550043c9ef2077573720484441
https://github.com/scummvm/scummvm/commit/d8fe9cb4c132ca550043c9ef2077573720484441
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2023-08-10T14:28:50+03:00
Commit Message:
NANCY: Implement new nancy.dat format
The new nancy.dat structure is now read correctly by
the engine. As a result, sound channels are no longer
hardcoded, and some new logic has been added to
dialogue condition handling.
Changed paths:
engines/nancy/action/conversation.cpp
engines/nancy/action/recordtypes.cpp
engines/nancy/commontypes.cpp
engines/nancy/commontypes.h
engines/nancy/nancy.cpp
engines/nancy/sound.cpp
engines/nancy/sound.h
diff --git a/engines/nancy/action/conversation.cpp b/engines/nancy/action/conversation.cpp
index 18f38ca3c33..d22da4909eb 100644
--- a/engines/nancy/action/conversation.cpp
+++ b/engines/nancy/action/conversation.cpp
@@ -299,16 +299,30 @@ void ConversationSound::addConditionalDialogue() {
for (const auto &res : g_nancy->getStaticData().conditionalDialogue[_conditionalResponseCharacterID]) {
bool isSatisfied = true;
- for (const auto &cond : res.flagConditions) {
- if (!NancySceneState.getEventFlag(cond.label, cond.flag)) {
- isSatisfied = false;
+ for (const auto &cond : res.conditions) {
+ switch (cond.type) {
+ case (byte)StaticDataConditionType::kEvent :
+ if (!NancySceneState.getEventFlag(cond.label, cond.flag)) {
+ isSatisfied = false;
+ }
+
+ break;
+ case (byte)StaticDataConditionType::kInventory :
+ if (NancySceneState.hasItem(cond.label) != cond.flag) {
+ isSatisfied = false;
+ }
+
+ break;
+ case (byte)StaticDataConditionType::kDifficulty :
+ if ( (NancySceneState.getDifficulty() != cond.label && cond.flag == true) ||
+ (NancySceneState.getDifficulty() == cond.label && cond.flag == false) ) {
+ isSatisfied = false;
+ }
+
break;
}
- }
- for (const auto &cond : res.inventoryConditions) {
- if (NancySceneState.hasItem(cond.label) != cond.flag) {
- isSatisfied = false;
+ if (!isSatisfied) {
break;
}
}
@@ -335,16 +349,37 @@ void ConversationSound::addGoodbye() {
uint sceneChangeID = 0;
for (uint i = 0; i < res.sceneChanges.size(); ++i) {
const GoodbyeSceneChange &sc = res.sceneChanges[i];
- if (sc.flagConditions.size() == 0) {
+ if (sc.conditions.size() == 0) {
// No conditions, default choice
sceneChangeID = i;
break;
} else {
bool isSatisfied = true;
- for (const auto &cond : sc.flagConditions) {
- if (!NancySceneState.getEventFlag(cond.label, cond.flag)) {
- isSatisfied = false;
+ for (const auto &cond : sc.conditions) {
+ switch (cond.type) {
+ case (byte)StaticDataConditionType::kEvent :
+ if (!NancySceneState.getEventFlag(cond.label, cond.flag)) {
+ isSatisfied = false;
+ }
+
+ break;
+ case (byte)StaticDataConditionType::kInventory :
+ if (NancySceneState.hasItem(cond.label) != cond.flag) {
+ isSatisfied = false;
+ }
+
+ break;
+ case (byte)StaticDataConditionType::kDifficulty :
+ if ( (NancySceneState.getDifficulty() != cond.label && cond.flag == true) ||
+ (NancySceneState.getDifficulty() == cond.label && cond.flag == false) ) {
+ isSatisfied = false;
+ }
+
+ break;
+ }
+
+ if (!isSatisfied) {
break;
}
}
@@ -362,7 +397,8 @@ void ConversationSound::addGoodbye() {
newResponse.sceneChange.sceneID = sceneChange.sceneIDs[g_nancy->_randomSource->getRandomNumber(sceneChange.sceneIDs.size() - 1)];
// Set an event flag if applicable
- NancySceneState.setEventFlag(sceneChange.flagToSet);
+ // Assumes flagToSet is an event flag
+ NancySceneState.setEventFlag(sceneChange.flagToSet.label, sceneChange.flagToSet.flag);
newResponse.sceneChange.continueSceneSound = kContinueSceneSound;
}
diff --git a/engines/nancy/action/recordtypes.cpp b/engines/nancy/action/recordtypes.cpp
index 2e3365b25e8..23ae84a2a7e 100644
--- a/engines/nancy/action/recordtypes.cpp
+++ b/engines/nancy/action/recordtypes.cpp
@@ -670,17 +670,19 @@ void HintSystem::readData(Common::SeekableReadStream &stream) {
void HintSystem::execute() {
switch (_state) {
- case kBegin:
+ case kBegin: {
+ uint16 difficulty = NancySceneState.getDifficulty();
selectHint();
- _genericSound.name = selectedHint->soundIDs[NancySceneState.getDifficulty()];
+ _genericSound.name = selectedHint->soundIDs[difficulty];
NancySceneState.getTextbox().clear();
- NancySceneState.getTextbox().addTextLine(g_nancy->getStaticData().hintTexts[selectedHint->textID + NancySceneState.getDifficulty()]);
+ NancySceneState.getTextbox().addTextLine(g_nancy->getStaticData().hintTexts[selectedHint->textID * 3 + difficulty]);
g_nancy->_sound->loadSound(_genericSound);
g_nancy->_sound->playSound(_genericSound);
_state = kRun;
break;
+ }
case kRun:
if (!g_nancy->_sound->isSoundPlaying(_genericSound)) {
g_nancy->_sound->stopSound(_genericSound);
@@ -710,31 +712,37 @@ void HintSystem::selectHint() {
for (uint i = 1; i < g_nancy->getStaticData().hints[_characterID].size(); ++i) {
const auto &hint = g_nancy->getStaticData().hints[_characterID][i];
- bool satisfied = true;
+ bool isSatisfied = true;
+
+ for (const auto &cond : hint.conditions) {
+ switch (cond.type) {
+ case (byte)StaticDataConditionType::kEvent :
+ if (!NancySceneState.getEventFlag(cond.label, cond.flag)) {
+ isSatisfied = false;
+ }
- for (const auto &flag : hint.flagConditions) {
- if (flag.label == kFlagNoLabel) {
break;
- }
+ case (byte)StaticDataConditionType::kInventory :
+ if (NancySceneState.hasItem(cond.label) != cond.flag) {
+ isSatisfied = false;
+ }
- if (!NancySceneState.getEventFlag(flag.label, flag.flag)) {
- satisfied = false;
break;
- }
- }
+ case (byte)StaticDataConditionType::kDifficulty :
+ if ( (NancySceneState.getDifficulty() != cond.label && cond.flag == true) ||
+ (NancySceneState.getDifficulty() == cond.label && cond.flag == false) ) {
+ isSatisfied = false;
+ }
- for (const auto &inv : hint.inventoryConditions) {
- if (inv.label == kFlagNoLabel) {
break;
}
- if (NancySceneState.hasItem(inv.label) != inv.flag) {
- satisfied = false;
+ if (!isSatisfied) {
break;
}
}
- if (satisfied) {
+ if (isSatisfied) {
selectedHint = &hint;
break;
}
diff --git a/engines/nancy/commontypes.cpp b/engines/nancy/commontypes.cpp
index 940a51aace2..9332ff37cd1 100644
--- a/engines/nancy/commontypes.cpp
+++ b/engines/nancy/commontypes.cpp
@@ -198,17 +198,11 @@ void ConditionalDialogue::readData(Common::SeekableReadStream &stream) {
soundID = stream.readString();
uint16 num = stream.readUint16LE();
- flagConditions.resize(num);
+ conditions.resize(num);
for (uint16 i = 0; i < num; ++i) {
- flagConditions[i].label = stream.readSint16LE();
- flagConditions[i].flag = stream.readByte();
- }
-
- num = stream.readUint16LE();
- inventoryConditions.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- inventoryConditions[i].label = stream.readSint16LE();
- inventoryConditions[i].flag = stream.readByte();
+ conditions[i].type = stream.readByte();
+ conditions[i].label = stream.readSint16LE();
+ conditions[i].flag = stream.readByte();
}
}
@@ -220,12 +214,14 @@ void GoodbyeSceneChange::readData(Common::SeekableReadStream &stream) {
}
num = stream.readUint16LE();
- flagConditions.resize(num);
+ conditions.resize(num);
for (uint16 i = 0; i < num; ++i) {
- flagConditions[i].label = stream.readSint16LE();
- flagConditions[i].flag = stream.readByte();
+ conditions[i].type = stream.readByte();
+ conditions[i].label = stream.readSint16LE();
+ conditions[i].flag = stream.readByte();
}
+ flagToSet.type = stream.readByte();
flagToSet.label = stream.readSint16LE();
flagToSet.flag = stream.readByte();
}
@@ -243,144 +239,221 @@ void Goodbye::readData(Common::SeekableReadStream &stream) {
void Hint::readData(Common::SeekableReadStream &stream) {
textID = stream.readByte();
hintWeight = stream.readSint16LE();
- sceneChange.readData(stream);
soundIDs[0] = stream.readString();
soundIDs[1] = stream.readString();
soundIDs[2] = stream.readString();
uint16 num = stream.readUint16LE();
- flagConditions.resize(num);
+ conditions.resize(num);
for (uint16 i = 0; i < num; ++i) {
- flagConditions[i].label = stream.readSint16LE();
- flagConditions[i].flag = stream.readByte();
- }
-
- num = stream.readUint16LE();
- inventoryConditions.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- inventoryConditions[i].label = stream.readSint16LE();
- inventoryConditions[i].flag = stream.readByte();
+ conditions[i].type = stream.readByte();
+ conditions[i].label = stream.readSint16LE();
+ conditions[i].flag = stream.readByte();
}
}
-void StaticData::readData(Common::SeekableReadStream &stream, Common::Language language) {
- numItems = stream.readUint16LE();
- numEventFlags = stream.readUint16LE();
+void SoundChannelInfo::readData(Common::SeekableReadStream &stream) {
+ numChannels = stream.readByte();
+ numSceneSpecificChannels = stream.readByte();
uint16 num = stream.readUint16LE();
- mapAccessSceneIDs.resize(num);
+ speechChannels.resize(num);
for (uint16 i = 0; i < num; ++i) {
- mapAccessSceneIDs[i] = stream.readUint16LE();
+ speechChannels[i] = stream.readByte();
}
num = stream.readUint16LE();
- genericEventFlags.resize(num);
+ musicChannels.resize(num);
for (uint16 i = 0; i < num; ++i) {
- genericEventFlags[i] = stream.readUint16LE();
+ musicChannels[i] = stream.readByte();
}
- numNonItemCursors = stream.readUint16LE();
- numCurtainAnimationFrames = stream.readUint16LE();
- logoEndAfter = stream.readUint32LE();
-
- // Check for language
num = stream.readUint16LE();
- int languageID = -1;
+ sfxChannels.resize(num);
for (uint16 i = 0; i < num; ++i) {
- if (stream.readByte() == language) {
- languageID = i;
- }
- }
-
- if (languageID == -1) {
- error("Language not present in nancy.dat");
+ sfxChannels[i] = stream.readByte();
}
+}
- // Read the strings logic
- num = stream.readUint16LE();
- conditionalDialogue.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- uint16 num2 = stream.readUint16LE();
- conditionalDialogue[i].resize(num2);
- for (uint j = 0; j < num2; ++j) {
- conditionalDialogue[i][j].readData(stream);
+void StaticData::readData(Common::SeekableReadStream &stream, Common::Language language, uint32 endPos) {
+ uint16 num;
+ int languageID;
+
+ while (stream.pos() < endPos) {
+ uint32 nextSectionOffset = stream.readUint32LE();
+
+ switch(stream.readUint32LE()) {
+ case MKTAG('C', 'O', 'N', 'S') :
+ // Game constants
+ numItems = stream.readUint16LE();
+ numEventFlags = stream.readUint16LE();
+
+ num = stream.readUint16LE();
+ mapAccessSceneIDs.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ mapAccessSceneIDs[i] = stream.readUint16LE();
+ }
+
+ num = stream.readUint16LE();
+ genericEventFlags.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ genericEventFlags[i] = stream.readUint16LE();
+ }
+
+ numNonItemCursors = stream.readUint16LE();
+ numCurtainAnimationFrames = stream.readUint16LE();
+ logoEndAfter = stream.readUint32LE();
+
+ break;
+ case MKTAG('S', 'C', 'H', 'N') :
+ // Sound channels data
+ soundChannelInfo.readData(stream);
+
+ break;
+ case MKTAG('L', 'A', 'N', 'G') :
+ // Order of languages inside game data
+ num = stream.readUint16LE();
+ languageID = -1;
+ for (uint16 i = 0; i < num; ++i) {
+ if (stream.readByte() == language) {
+ languageID = i;
+ }
+ }
+
+ if (languageID == -1) {
+ error("Language not present in nancy.dat");
+ }
+
+ break;
+ case MKTAG('C', 'D', 'L', 'G') :
+ // Conditional dialogue
+ num = stream.readUint16LE();
+ conditionalDialogue.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ uint16 num2 = stream.readUint16LE();
+ conditionalDialogue[i].resize(num2);
+ for (uint j = 0; j < num2; ++j) {
+ conditionalDialogue[i][j].readData(stream);
+ }
+ }
+
+ num = stream.readUint16LE();
+ if (num > 0) {
+ uint32 endOffset = stream.readUint32LE();
+ stream.skip(languageID * 4);
+ stream.seek(stream.readUint32LE());
+ num = stream.readUint16LE();
+ conditionalDialogueTexts.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ conditionalDialogueTexts[i] = stream.readString();
+ }
+
+ stream.seek(endOffset);
+ }
+
+ break;
+ case MKTAG('G', 'D', 'B', 'Y') :
+ // Goodbyes
+ num = stream.readUint16LE();
+ goodbyes.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ goodbyes[i].readData(stream);
+ }
+
+ num = stream.readUint16LE();
+ if (num > 0) {
+ uint32 endOffset = stream.readUint32LE();
+ stream.skip(languageID * 4);
+ stream.seek(stream.readUint32LE());
+ num = stream.readUint16LE();
+ goodbyeTexts.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ goodbyeTexts[i] = stream.readString();
+ }
+
+ stream.seek(endOffset);
+ }
+
+ break;
+ case MKTAG('H', 'I', 'N', 'T') : {
+ // Hints (nancy1 only)
+ SceneChangeDescription sceneChange;
+ sceneChange.readData(stream, false);
+
+ num = stream.readUint16LE();
+ hints.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ uint16 num2 = stream.readUint16LE();
+ hints[i].resize(num2);
+ for (uint j = 0; j < num2; ++j) {
+ hints[i][j].readData(stream);
+ hints[i][j].sceneChange = sceneChange;
+ }
+ }
+
+ num = stream.readUint16LE();
+ if (num > 0) {
+ uint32 endOffset = stream.readUint32LE();
+ stream.skip(languageID * 4);
+ stream.seek(stream.readUint32LE());
+ num = stream.readUint16LE();
+ hintTexts.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ hintTexts[i] = stream.readString();
+ }
+
+ stream.seek(endOffset);
+ }
+
+ break;
+ }
+ case MKTAG('R', 'I', 'N', 'G') :
+ // Ringing text (nancy1 and up)
+ num = stream.readUint16LE();
+ for (int i = 0; i < num; ++i) {
+ if (i == languageID) {
+ ringingText = stream.readString();
+ } else {
+ stream.readString();
+ }
+ }
+
+ break;
+ case MKTAG('E', 'F', 'L', 'G') :
+ // Event flag names
+ num = stream.readUint16LE();
+ eventFlagNames.resize(num);
+ for (uint16 i = 0; i < num; ++i) {
+ eventFlagNames[i] = stream.readString();
+ }
+
+ break;
+ default:
+ stream.seek(nextSectionOffset);
}
}
+
- num = stream.readUint16LE();
- goodbyes.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- goodbyes[i].readData(stream);
- }
+
- num = stream.readUint16LE();
- hints.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- uint16 num2 = stream.readUint16LE();
- hints[i].resize(num2);
- for (uint j = 0; j < num2; ++j) {
- hints[i][j].readData(stream);
- }
- }
+ // Read the strings logic
+
- // Read the in-game strings, making sure to pick the correct language
- num = stream.readUint16LE();
- if (num > 0) {
- uint32 endOffset = stream.readUint32LE();
- stream.skip(languageID * 4);
- stream.seek(stream.readUint32LE());
- num = stream.readUint16LE();
- conditionalDialogueTexts.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- conditionalDialogueTexts[i] = stream.readString();
- }
+
- stream.seek(endOffset);
- }
+
- num = stream.readUint16LE();
- if (num > 0) {
- uint32 endOffset = stream.readUint32LE();
- stream.skip(languageID * 4);
- stream.seek(stream.readUint32LE());
- num = stream.readUint16LE();
- goodbyeTexts.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- goodbyeTexts[i] = stream.readString();
- }
+ // Read the in-game strings, making sure to pick the correct language
- stream.seek(endOffset);
- }
- num = stream.readUint16LE();
- if (num > 0) {
- uint32 endOffset = stream.readUint32LE();
- stream.skip(languageID * 4);
- stream.seek(stream.readUint32LE());
- num = stream.readUint16LE();
- hintTexts.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- hintTexts[i] = stream.readString();
- }
+
- stream.seek(endOffset);
- }
+
- num = stream.readUint16LE();
- for (int i = 0; i < num; ++i) {
- if (i == languageID) {
- ringingText = stream.readString();
- } else {
- stream.readString();
- }
- }
+
// Read debug strings
- num = stream.readUint16LE();
- eventFlagNames.resize(num);
- for (uint16 i = 0; i < num; ++i) {
- eventFlagNames[i] = stream.readString();
- }
+
}
} // End of namespace Nancy
diff --git a/engines/nancy/commontypes.h b/engines/nancy/commontypes.h
index 96e138d9ff2..bb850f17651 100644
--- a/engines/nancy/commontypes.h
+++ b/engines/nancy/commontypes.h
@@ -177,20 +177,22 @@ struct SoundDescription {
// Structs inside nancy.dat, which contains all the data that was
// originally stored inside the executable
+enum class StaticDataConditionType : byte { kEvent = 0, kInventory = 1, kDifficulty = 2 };
+struct StaticDataFlag { byte type; int16 label; byte flag; };
+
struct ConditionalDialogue {
byte textID;
uint16 sceneID;
Common::String soundID;
- Common::Array<FlagDescription> flagConditions;
- Common::Array<FlagDescription> inventoryConditions;
+ Common::Array<StaticDataFlag> conditions;
void readData(Common::SeekableReadStream &stream);
};
struct GoodbyeSceneChange {
Common::Array<uint16> sceneIDs;
- Common::Array<FlagDescription> flagConditions;
- FlagDescription flagToSet;
+ Common::Array<StaticDataFlag> conditions;
+ StaticDataFlag flagToSet;
void readData(Common::SeekableReadStream &stream);
};
@@ -207,12 +209,21 @@ struct Hint {
int16 hintWeight;
SceneChangeDescription sceneChange;
Common::String soundIDs[3];
- Common::Array<FlagDescription> flagConditions;
- Common::Array<FlagDescription> inventoryConditions;
+ Common::Array<StaticDataFlag> conditions;
void readData(Common::SeekableReadStream &stream);
};
+struct SoundChannelInfo {
+ byte numChannels;
+ byte numSceneSpecificChannels;
+ Common::Array<byte> speechChannels;
+ Common::Array<byte> musicChannels;
+ Common::Array<byte> sfxChannels;
+
+ void readData(Common::SeekableReadStream &stream);
+};
+
struct StaticData {
// Default values are for nancy1, provided for debugging purposes
uint16 numItems = 11;
@@ -223,6 +234,9 @@ struct StaticData {
uint16 numCurtainAnimationFrames = 7;
uint32 logoEndAfter = 7000;
+ // Data for sound channels
+ SoundChannelInfo soundChannelInfo;
+
// In-game strings and related logic
Common::Array<Common::Array<ConditionalDialogue>> conditionalDialogue;
Common::Array<Goodbye> goodbyes;
@@ -236,7 +250,7 @@ struct StaticData {
// Debug strings
Common::Array<Common::String> eventFlagNames;
- void readData(Common::SeekableReadStream &stream, Common::Language language);
+ void readData(Common::SeekableReadStream &stream, Common::Language language, uint32 endPos);
};
} // End of namespace Nancy
diff --git a/engines/nancy/nancy.cpp b/engines/nancy/nancy.cpp
index 8a333e145f9..7e44027ebdc 100644
--- a/engines/nancy/nancy.cpp
+++ b/engines/nancy/nancy.cpp
@@ -53,8 +53,8 @@ NancyEngine::NancyEngine(OSystem *syst, const NancyGameDescription *gd) :
Engine(syst),
_gameDescription(gd),
_system(syst),
- _datFileMajorVersion(0),
- _datFileMinorVersion(2),
+ _datFileMajorVersion(1),
+ _datFileMinorVersion(0),
_false(gd->gameType <= kGameTypeNancy2 ? 1 : 0),
_true(gd->gameType <= kGameTypeNancy2 ? 2 : 1) {
@@ -409,6 +409,7 @@ void NancyEngine::bootGameEngine() {
_raycastPuzzleLevelBuilderData = new RCLB(chunkStream);
}
+ _sound->initSoundChannels();
_sound->loadCommonSounds(boot);
delete boot;
@@ -511,22 +512,32 @@ void NancyEngine::readDatFile() {
byte major = datFile->readByte();
byte minor = datFile->readByte();
- if (major != _datFileMajorVersion || minor != _datFileMinorVersion) {
+ if (major != _datFileMajorVersion) {
error("Incorrect nancy.dat version. Expected '%d.%d', found %d.%d",
_datFileMajorVersion, _datFileMinorVersion, major, minor);
+ } else {
+ if (minor != _datFileMinorVersion) {
+ warning("Incorrect nancy.dat version. Expected '%d.%d', found %d.%d. Game may still work, but expect bugs",
+ _datFileMajorVersion, _datFileMinorVersion, major, minor);
+ }
}
uint16 numGames = datFile->readUint16LE();
- if (getGameType() > numGames) {
+ uint16 gameType = getGameType();
+ if (gameType > numGames) {
+ // Fallback for when no data is present for the current game:
+ // throw a warning and use the last available game data
warning("Data for game type %d is not in nancy.dat", getGameType());
- return;
+ gameType = numGames;
}
// Seek to offset containing current game
- datFile->skip((getGameType() - 1) * 4);
- datFile->seek(datFile->readUint32LE());
+ datFile->skip((gameType - 1) * 4);
+ uint32 thisGameOffset = datFile->readUint32LE();
+ uint32 nextGameOffset = gameType == numGames ? datFile->size() : datFile->readUint32LE();
+ datFile->seek(thisGameOffset);
- _staticData.readData(*datFile, _gameDescription->desc.language);
+ _staticData.readData(*datFile, _gameDescription->desc.language, nextGameOffset);
}
Common::Error NancyEngine::synchronize(Common::Serializer &ser) {
diff --git a/engines/nancy/sound.cpp b/engines/nancy/sound.cpp
index 7a8766c16db..66d6ea293f9 100644
--- a/engines/nancy/sound.cpp
+++ b/engines/nancy/sound.cpp
@@ -41,42 +41,6 @@ enum SoundType {
kSoundTypeOgg
};
-// Table valid for vampire diaries and nancy1, could be (and probably is) different between games
-static const Audio::Mixer::SoundType channelSoundTypes[] = {
- Audio::Mixer::kMusicSoundType, // channel 0
- Audio::Mixer::kMusicSoundType,
- Audio::Mixer::kMusicSoundType,
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSFXSoundType, // 5
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSpeechSoundType,
- Audio::Mixer::kSpeechSoundType,
- Audio::Mixer::kPlainSoundType,
- Audio::Mixer::kPlainSoundType, // 10
- Audio::Mixer::kPlainSoundType,
- Audio::Mixer::kPlainSoundType,
- Audio::Mixer::kPlainSoundType,
- Audio::Mixer::kPlainSoundType,
- Audio::Mixer::kPlainSoundType, // 15
- Audio::Mixer::kPlainSoundType,
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kMusicSoundType,
- Audio::Mixer::kSFXSoundType, // 20
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kSFXSoundType, // 25
- Audio::Mixer::kSFXSoundType,
- Audio::Mixer::kMusicSoundType,
- Audio::Mixer::kMusicSoundType,
- Audio::Mixer::kMusicSoundType,
- Audio::Mixer::kSpeechSoundType, // 30
- Audio::Mixer::kSFXSoundType
-};
-
bool readDiamondwareHeader(Common::SeekableReadStream *stream, SoundType &type, uint16 &numChannels,
uint32 &samplesPerSec, uint16 &bitsPerSample, uint32 &size) {
stream->skip(2);
@@ -249,8 +213,6 @@ Audio::SeekableAudioStream *SoundManager::makeHISStream(Common::SeekableReadStre
SoundManager::SoundManager() {
_mixer = g_system->getMixer();
-
- initSoundChannels();
}
void SoundManager::loadCommonSounds(IFF *boot) {
@@ -516,9 +478,9 @@ void SoundManager::setRate(const Common::String &chunkName, uint32 rate) {
}
void SoundManager::stopAndUnloadSpecificSounds() {
- Nancy::GameType gameType = g_nancy->getGameType();
+ byte numSSChans = g_nancy->getStaticData().soundChannelInfo.numSceneSpecificChannels;
- if (gameType == kGameTypeVampire && Nancy::State::Map::hasInstance()) {
+ if (g_nancy->getGameType() == kGameTypeVampire && Nancy::State::Map::hasInstance()) {
// Don't stop the map sound in certain scenes
uint nextScene = NancySceneState.getNextSceneInfo().sceneID;
if (nextScene != 0 && (nextScene < 15 || nextScene > 27)) {
@@ -526,7 +488,7 @@ void SoundManager::stopAndUnloadSpecificSounds() {
}
}
- for (uint i = 0; i < 10; ++i) {
+ for (uint i = 0; i < numSSChans; ++i) {
stopSound(i);
}
@@ -534,9 +496,20 @@ void SoundManager::stopAndUnloadSpecificSounds() {
}
void SoundManager::initSoundChannels() {
- // Channel types are hardcoded in the original engine
- for (uint i = 0; i < 31; ++i) {
- _channels[i].type = channelSoundTypes[i];
+ const SoundChannelInfo &channelInfo = g_nancy->getStaticData().soundChannelInfo;
+
+ _channels.resize(channelInfo.numChannels);
+
+ for (const short id : channelInfo.speechChannels) {
+ _channels[id].type = Audio::Mixer::SoundType::kSpeechSoundType;
+ }
+
+ for (const short id : channelInfo.musicChannels) {
+ _channels[id].type = Audio::Mixer::SoundType::kMusicSoundType;
+ }
+
+ for (const short id : channelInfo.sfxChannels) {
+ _channels[id].type = Audio::Mixer::SoundType::kSFXSoundType;
}
}
diff --git a/engines/nancy/sound.h b/engines/nancy/sound.h
index e062059fdd7..97a2433ae60 100644
--- a/engines/nancy/sound.h
+++ b/engines/nancy/sound.h
@@ -68,6 +68,7 @@ public:
~SoundManager();
void loadCommonSounds(IFF *boot);
+ void initSoundChannels();
// Load a sound into a channel without starting it
void loadSound(const SoundDescription &description, bool panning = false);
@@ -109,7 +110,7 @@ public:
protected:
struct Channel {
Common::String name;
- Audio::Mixer::SoundType type;
+ Audio::Mixer::SoundType type = Audio::Mixer::SoundType::kPlainSoundType;
uint16 playCommands = 1;
uint16 numLoops = 0;
uint volume = 0;
@@ -120,10 +121,9 @@ protected:
bool isPersistent = false;
};
- void initSoundChannels();
Audio::Mixer *_mixer;
- Channel _channels[32];
+ Common::Array<Channel> _channels;
Common::HashMap<Common::String, SoundDescription> _commonSounds;
};
Commit: 5ecbabb9a79913465591ac9c3f9306b58dbfbdad
https://github.com/scummvm/scummvm/commit/5ecbabb9a79913465591ac9c3f9306b58dbfbdad
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2023-08-10T14:28:50+03:00
Commit Message:
DEVTOOLS: Add nancy5 data to nancy.dat
Changed paths:
A devtools/create_nancy/nancy5_data.h
devtools/create_nancy/create_nancy.cpp
diff --git a/devtools/create_nancy/create_nancy.cpp b/devtools/create_nancy/create_nancy.cpp
index e409c4ae4ca..4f5b9294a72 100644
--- a/devtools/create_nancy/create_nancy.cpp
+++ b/devtools/create_nancy/create_nancy.cpp
@@ -25,11 +25,12 @@
#include "nancy2_data.h"
#include "nancy3_data.h"
#include "nancy4_data.h"
+#include "nancy5_data.h"
#define NANCYDAT_MAJOR_VERSION 1
#define NANCYDAT_MINOR_VERSION 0
-#define NANCYDAT_NUM_GAMES 5
+#define NANCYDAT_NUM_GAMES 6
/**
* Format specifications for nancy.dat:
@@ -62,6 +63,7 @@
* Nancy Drew: Stay Tuned for Danger
* Nancy Drew: Message in a Haunted Mansion
* Nancy Drew: Treasure in the Royal Tower
+ * Nancy Drew: The Final Scene
*/
// Add the offset to the next tagged section before the section itself for easier navigation
@@ -204,6 +206,16 @@ int main(int argc, char *argv[]) {
WRAPWITHOFFSET(writeRingingTexts(output, _nancy4TelephoneRinging))
WRAPWITHOFFSET(writeEventFlagNames(output, _nancy4EventFlagNames))
+ // Nancy Drew: The Final Scene data
+ gameOffsets.push_back(output.pos());
+ WRAPWITHOFFSET(writeConstants(output, _nancy5Constants))
+ WRAPWITHOFFSET(writeSoundChannels(output, _nancy3to5SoundChannelInfo))
+ WRAPWITHOFFSET(writeLanguages(output, _nancy5LanguagesOrder))
+ WRAPWITHOFFSET(writeConditionalDialogue(output, _nancy5ConditionalDialogue, _nancy5ConditionalDialogueTexts))
+ WRAPWITHOFFSET(writeGoodbyes(output, _nancy5Goodbyes, _nancy5GoodbyeTexts))
+ WRAPWITHOFFSET(writeRingingTexts(output, _nancy5TelephoneRinging))
+ WRAPWITHOFFSET(writeEventFlagNames(output, _nancy5EventFlagNames))
+
// Write the offsets for each game in the header
output.seek(offsetsOffset);
for (uint i = 0; i < gameOffsets.size(); ++i) {
diff --git a/devtools/create_nancy/nancy5_data.h b/devtools/create_nancy/nancy5_data.h
new file mode 100644
index 00000000000..b27ebadd0a0
--- /dev/null
+++ b/devtools/create_nancy/nancy5_data.h
@@ -0,0 +1,818 @@
+/* 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 NANCY5DATA_H
+#define NANCY5DATA_H
+
+#include "types.h"
+
+const GameConstants _nancy5Constants ={
+ 33,
+ 456,
+ { }, // No Map state
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 },
+ 36,
+ 7,
+ 7000
+};
+
+const Common::Array<Common::Language> _nancy5LanguagesOrder = {
+ Common::Language::EN_ANY,
+ Common::Language::RU_RUS
+};
+
+const Common::Array<Common::Array<ConditionalDialogue>> _nancy5ConditionalDialogue = {
+{ // Brady, 7 responses + 1 repeat
+ { 0, 1050, "NBA50",
+ { { kEv, 142, true }, { kEv, 47, false } } },
+ { 1, 1051, "NBA51",
+ { { kEv, 116, true }, { kEv, 46, false } } },
+ { 1, 1051, "NBA51",
+ { { kEv, 138, true }, { kEv, 46, false } } },
+ { 2, 1052, "NBA52",
+ { { kEv, 129, true }, { kEv, 40, false } } },
+ { 3, 1053, "NBA53",
+ { { kEv, 129, true }, { kEv, 42, false } } },
+ { 4, 1054, "NNF652",
+ { { kEv, 129, true }, { kEv, 119, true }, { kEv, 37, false } } },
+ { 5, 1060, "NBA61",
+ { { kEv, 43, true }, { kEv, 45, false } } },
+ { 6, 1061, "NNF654",
+ { { kEv, 58, true }, { kEv, 44, false } } },
+},
+{ // Simone, 7 responses
+ { 7, 1250, "NSM250",
+ { { kEv, 138, true }, { kEv, 46, true }, { kEv, 213, false } } },
+ { 8, 1251, "NSM251",
+ { { kEv, 183, true }, { kEv, 223, false } } },
+ { 9, 1252, "NSM252",
+ { { kEv, 119, true }, { kEv, 222, false } } },
+ { 6, 1253, "NNF654",
+ { { kEv, 58, true }, { kEv, 133, true }, { kEv, 218, false } } },
+ { 10, 1254, "NSM254",
+ { { kEv, 202, true }, { kEv, 215, false } } },
+ { 4, 1255, "NNF652",
+ { { kEv, 138, true }, { kEv, 119, true }, { kEv, 212, false } } },
+ { 11, 1256, "NSM256",
+ { { kEv, 49, true }, { kEv, 216, false } } },
+},
+{ // Joseph, 9 responses
+ { 12, 1450, "NJH450",
+ { { kEv, 132, true }, { kEv, 164, true }, { kEv, 105, false } } },
+ { 13, 1452, "NJH452",
+ { { kEv, 270, true }, { kEv, 59, false }, { kEv, 117, false } } },
+ { 14, 1453, "NJH453",
+ { { kEv, 107, true }, { kEv, 152, true }, { kEv, 120, false } } },
+ { 15, 1455, "NJH455",
+ { { kEv, 152, true }, { kEv, 155, true }, { kEv, 108, false } } },
+ { 16, 1456, "NJH456",
+ { { kEv, 166, true }, { kEv, 111, false } } },
+ { 17, 1457, "NJH457",
+ { { kEv, 238, true }, { kEv, 118, false } } },
+ { 18, 1459, "NJH459",
+ { { kEv, 58, true }, { kEv, 81, true }, { kEv, 101, false } } },
+ { 19, 1460, "NJH460",
+ { { kEv, 105, true }, { kEv, 187, true }, { kEv, 112, false } } },
+ { 20, 1465, "NJH465",
+ { { kEv, 59, true }, { kEv, 102, false } } },
+},
+{ // Nicholas, 7 responses + 1 repeat
+ { 21, 1650, "NNF650",
+ { { kEv, 159, true }, { kEv, 156, false } } },
+ { 21, 1650, "NNF650",
+ { { kEv, 166, true }, { kEv, 156, false } } },
+ { 22, 1651, "NNF651",
+ { { kEv, 165, true }, { kEv, 155, false } } },
+ { 4, 1652, "NNF652",
+ { { kEv, 135, true }, { kEv, 119, true }, { kEv, 147, false } } },
+ { 6, 1654, "NNF654",
+ { { kEv, 58, true }, { kEv, 133, true }, { kEv, 154, false } } },
+ { 23, 1655, "NNF655",
+ { { kEv, 58, true }, { kEv, 219, true }, { kEv, 169, false }, { kEv, 150, false } } },
+ { 24, 1658, "NNF658",
+ { { kEv, 155, true }, { kEv, 148, false } } },
+ { 25, 1659, "NNF659",
+ { { kEv, 108, true }, { kEv, 153, false } } },
+},
+{ // Bess and George, 14 responses
+ { 26, 1820, "NBG20",
+ { { kEv, 105, true }, { kEv, 187, true }, { kEv, 386, false } } },
+ { 27, 1821, "NBG21",
+ { { kEv, 54, true }, { kEv, 383, false } } },
+ { 28, 1822, "NBG22",
+ { { kEv, 166, true }, { kEv, 399, false } } },
+ { 29, 1823, "NBG23",
+ { { kEv, 214, true }, { kEv, 385, false } } },
+ { 30, 1824, "NBG24",
+ { { kEv, 219, true }, { kEv, 168, false }, { kEv, 390, false } } },
+ { 31, 1825, "NBG25",
+ { { kEv, 46, true }, { kEv, 393, false } } },
+ { 32, 1826, "NBG26",
+ { { kEv, 58, true }, { kEv, 207, false }, { kEv, 398, false } } },
+ { 33, 1827, "NBG27",
+ { { kEv, 135, true }, { kEv, 395, false } } },
+ { 34, 1828, "NBG28",
+ { { kEv, 152, true }, { kEv, 397, false } } },
+ { 35, 1830, "NBG30",
+ { { kEv, 201, true }, { kEv, 234, false }, { kEv, 387, false } } },
+ { 36, 1831, "NBG31",
+ { { kEv, 55, true }, { kEv, 51, true }, { kEv, 52, false }, { kEv, 384, false } } },
+ { 37, 1832, "NBG32",
+ { { kEv, 81, true }, { kEv, 392, false } } },
+ { 38, 1870, "NBG70",
+ { { kEv, 401, true }, { kEv, 389, false }, { kDi, 2, true } } },
+ { 39, 1871, "NBG71",
+ { { kEv, 389, true }, { kDi, 2, true } } },
+},
+{ // Ned, 14 responses + 3 repeats
+ { 40, 1920, "NDN20",
+ { { kEv, 138, true }, { kEv, 415, false } } },
+ { 41, 1921, "NDN21",
+ { { kEv, 108, true }, { kEv, 153, true }, { kEv, 406, false } } },
+ { 42, 1922, "NDN22",
+ { { kEv, 324, true }, { kEv, 413, false } } },
+ { 43, 1923, "NDN23",
+ { { kEv, 169, true }, { kEv, 168, false }, { kEv, 184, true }, { kEv, 85, false }, { kEv, 410, false } } },
+ { 44, 1924, "NDN24",
+ { { kEv, 232, true }, { kEv, 408, false }, { kIn, 4, true } } },
+ { 45, 1925, "NDN25",
+ { { kEv, 202, true }, { kEv, 405, false } } },
+ { 45, 1925, "NDN25",
+ { { kEv, 167, true }, { kEv, 405, false } } },
+ { 45, 1925, "NDN25",
+ { { kEv, 104, true }, { kEv, 405, false } } },
+ { 46, 1926, "NDN26",
+ { { kEv, 211, true }, { kEv, 419, false } } },
+ { 47, 1927, "NDN27",
+ { { kEv, 148, true }, { kEv, 50, false }, { kEv, 414, false } } },
+ { 48, 1928, "NDN28",
+ { { kEv, 117, true }, { kEv, 93, false }, { kEv, 411, false } } },
+ { 49, 1929, "NDN29",
+ { { kEv, 346, true } } },
+ { 49, 1929, "NDN29",
+ { { kEv, 171, true }, { kEv, 412, false } } },
+ { 50, 1930, "NDN30",
+ { { kEv, 268, true }, { kEv, 208, false }, { kEv, 409, false } } },
+ { 51, 1931, "NDNj",
+ { { kEv, 238, true }, { kEv, 403, false } } },
+ { 52, 1970, "NDN70",
+ { { kEv, 402, true }, { kEv, 422, false }, { kDi, 2, true } } },
+ { 53, 1970, "NDN71",
+ { { kEv, 402, true }, { kDi, 0, true } } },
+}
+};
+
+const Common::Array<Goodbye> _nancy5Goodbyes = {
+ { "NBA090", { { { 1090, 1091, 1092, 1094 }, {}, NOFLAG } } }, // Brady
+ { "NSM290", { { { 1290, 1291, 1292, 1293 }, {}, NOFLAG } } }, // Simone
+ { "NJH90", { { { 1490, 1491, 1492, 1493 }, {}, NOFLAG } } }, // Joseph
+ { "NNF690", { { { 1690, 1691, 1692 }, {}, NOFLAG } } }, // Nicholas
+ { "NBG90", { { { 1890, 1891, 1892, 1893, 1894 }, {}, NOFLAG } } }, // Bess & George
+ { "NDN90", { { { 1990, 1991, 1992, 1993, 1994, 1995, 1996 }, {}, NOFLAG } } }, // Ned
+};
+
+const Common::Array<Common::Array<const char *>> _nancy5ConditionalDialogueTexts {
+{ // English
+ // 00
+ "Don't you want to know what Maya's article was about?<h><n>", // NBA50
+ "Who's this 'Simone' and how do you know her?<h><n>", // NBA051
+ "How do you keep up with all of your fans, Brady? A big star like you must get hundreds of emails.<h><n>", // NBA052
+ "Do you mind if I take a look around in here?<h><n>", // NBA053
+ "I'm asking everyone. Where were you when the kidnapping happened?<h><n>", // NNF652
+ // 05
+ "Why are you interested in helping me?<h><n>", // NBA061
+ "Have you seen Joseph?<h><n>", // NNF654
+ "How long have you been Brady's agent?<h><n>", // NSM250
+ "What do you think about Brady's new project?<h><n>", // NSM251
+ "Joseph says the building was probably locked when the kidnapping happened and that the kidnapper had to be someone who was inside the theater. Care to comment?<h><n>", // NSM252
+ // 10
+ "Have you heard about this ransom demand?<h><n>", // NSM254
+ "Brady seems uncomfortable with some of your, uh, 'tactics.'<h><n>", // NSM256
+ "So, where will you go after the demolition? Are you planning to retire?<h><n>", // NJH450
+ "Tell me about that old key making machine in the lobby. Has it been out of order long?<h><n>", // NJH452
+ "Who was this JJ Thompson character, anyway?<h><n>", // NJH453
+ // 15
+ "The history of this theater is so rich. I'm surprised the city of St. Louis isn't more interested in preserving it.<h><n>", // NJH455
+ "The police told me Nicholas Falcone is known for using 'extreme tactics' to further his political causes. Why are you letting him use the lobby as his headquarters?<h><n>", // NJH456
+ "I was backstage earlier and one of the stage lights came crashing down. It almost hit me!<h><n>", // NJH457
+ "I got another threat from the kidnapper! That creepy voice came on the PA and told me to stop searching for Maya!<h><n>", // NJH459
+ "Joseph - I did some checking. You don't really have any family in Greasewood, do you?<h><n>", // NJH460
+ // 20
+ "It's only a matter of hours until the demolition! How are you holding up, Joseph?<h><n>", // NJH465
+ "Tell me about your relationship with the police.<h><n>", // NNF650
+ "So, 'Humans Against the Destruction of Illustrious Theaters.' Tell me about it.<h><n>", // NNF651
+ "Can you believe Brady's agent has called this press conference to trump up his heroics? She can barely even remember Maya's name.<h><n>", // NNF655
+ "Do you know what they plan to build on this spot after the theater is gone?<h><n>", // NNF658
+ // 25
+ "Joseph told me that the St. Louis Historical Society is in the process of trying to declare this building a historical landmark.<h><n>", // NNF659
+ "I asked Joseph where he would go after the theater is demolished, and he said he was moving to Arizona to start a movie theater with his brother.<h><n>", // NBG20
+ "I took Joseph's advice and called County Administration to see about the blueprints for the theater.<h><n>", // NBG21
+ "When I spoke to the police about Maya's press pass, they said that Nicholas is known for using extreme tactics and that he might even have been involved in a staged kidnapping last year in Nashville.<h><n>", // NBG22
+ "I think Simone Mueller would do just about anything for publicity.<h><n>", // NBG23
+ // 30
+ "Simone has called a press conference. I'd like to hear what's being said, but I get the feeling I'm not welcome.<h><n>", // NBG24
+ "Brady said Simone wants him to appear 'wholesomely smoldering' to his public. What in the world do you think that means?<h><n>", // NBG25
+ "When I arrived at the theater this morning, someone had delivered a funeral wreath!<h><n>", // NBG26
+ "I met Nicholas Falcone, the leader of HAD IT. His organization is camped out in front of the theater, demonstrating against the demolition.<h><n>", // NBG27
+ "Nicholas told me that his grandmother did a lot of the artwork inside the theater, but that JJ Thompson, the original owner, never paid her or even gave her credit for it!<h><n>", // NBG28
+ // 35
+ "I came across this old book that explains how to do a bunch of magic tricks.<h><n>", // NBG30
+ "I spoke to Sherman Trout at the Library of Congress. He said he'll search Houdini's letters for some indication of what happened to Houdini's half of the theater.<h><n>", // NBG31
+ "I received another threat! This time the kidnapper addressed me by name!<h><n>", // NBG32
+ "Help! I'm a little stuck!<h><n>", // NBG70
+ "Ladies, I need a hint!<h><n>", // NBG71
+ // 40
+ "By the time I finally got to talk to Simone Mueller, she had heard all about the kidnapping and cancelled the premiere of Vanishing Destiny.<h><n>", // NDN20
+ "According to Joseph, the St. Louis Historical society has been scrambling to get the Royal Palladium declared a historical landmark.<h><n>", // NDN21
+ "I listened in on a call between Brady and Simone. It was weird. Brady sounds like he's cracking up.<h><n>", // NDN22
+ "I found an old stage technician's guide that explains how some of the illusions were done in the old days when the theater was still used for stage performances.<h><n>", // NDN23
+ "I outsmarted the Amazing Monty, now why can't I catch this kidnapper?<h><n>", // NDN24
+ // 45
+ "I can't understand how the police could've received a ransom call from Granite City! And why would the kidnapper suddenly demand cash, without even mentioning the demolition!<h><n>", // NDN25
+ "I confronted Simone about the receipt for the funeral wreath, and she claimed she just needed something for a photo shoot. Would you buy that?<h><n>", // NDN26
+ "I've got to think of a way to get this demolition stopped!<h><n>", // NDN27
+ "There's this cool machine in the lobby that makes souvenir keys. You can make a key in any shape and call it the key to your heart. I wanted to make one for you -- not that this is any time to think of souvenirs.<h><n>", // NDN28
+ "Harry Houdini must've been quite a character!<h><n>", // NDN29
+ // 50
+ "Nicholas says that the police are about to start clearing the building.<h><n>", // NDN30
+ "I was backstage earlier and I almost got hit with by a falling stage light!<h><n>", // NDNj
+ "I could use a hint.<h><n>", // NDN70
+ "I'm trying to decide what to do next. Any thoughts?<h><n>" // NDN71
+},
+{ // Russian
+ // Unlike previous titles which just mapped Russian letters to ASCII,
+ // nancy5's Russian translation introduces strings in Windows-1251 encoding
+ // These are escaped here for portability's sake
+
+ // 00
+ "\xc2\xfb \xed\xe5 \xf5\xee\xf2\xe8\xf2\xe5 \xf3\xe7\xed\xe0\xf2\xfc, \xee \xf7\xe5\xec \xf1\xee\xe1\xe8\xf0\xe0\xeb\xe0\xf1\xfc \xef\xe8\xf1\xe0\xf2\xfc \xcc\xe0\xe9\xff?<h><n>", // NBA50
+ "\xca\xf2\xee \xf2\xe0\xea\xe0\xff \xd1\xe8\xec\xee\xed\xe0 \xe8 \xee\xf2\xea\xf3\xe4\xe0 \xe2\xfb \xe5\xe5 \xe7\xed\xe0\xe5\xf2\xe5?<h><n>", // NBA051
+ "\xc1\xf0\xfd\xe4\xe8, \xe2\xfb \xef\xee\xe4\xe4\xe5\xf0\xe6\xe8\xe2\xe0\xe5\xf2\xe5 \xef\xe5\xf0\xe5\xef\xe8\xf1\xea\xf3 \xf1\xee \xf1\xe2\xee\xe8\xec\xe8 \xef\xee\xea\xeb\xee\xed\xed\xe8\xea\xe0\xec\xe8? \xd2\xe0\xea\xe0\xff \xe7\xe2\xe5\xe7\xe4\xe0, \xea\xe0\xea \xe2\xfb, \xed\xe0\xe2\xe5\xf0\xed\xee\xe5, \xef\xee\xeb\xf3\xf7\xe0\xe5\xf2 \xf1\xee\xf2\xed\xe8 \xef\xe8\xf1\xe5\xec.<h><n>", // NBA052
+ "\xcc\xee\xe6\xed\xee \xee\xf1\xec\xee\xf2\xf0\xe5\xf2\xfc \xe2\xe0\xf8\xf3 \xe3\xf0\xe8\xec\xe5\xf0\xed\xf3\xfe?<h><n>", // NBA053
+ "\xdf \xe2\xf1\xe5\xec \xe7\xe0\xe4\xe0\xfe \xfd\xf2\xee\xf2 \xe2\xee\xef\xf0\xee\xf1: \xe3\xe4\xe5 \xe2\xfb \xe1\xfb\xeb\xe8 \xe2\xee \xe2\xf0\xe5\xec\xff \xef\xee\xf5\xe8\xf9\xe5\xed\xe8\xff?<h><n>", // NNF652
+ // 05
+ "\xcf\xee\xf7\xe5\xec\xf3 \xe2\xfb \xf5\xee\xf2\xe8\xf2\xe5 \xef\xee\xec\xee\xf7\xfc \xec\xed\xe5?<h><n>", // NBA061
+ "\xc2\xfb \xe2\xe8\xe4\xe5\xeb\xe8 \xc4\xe6\xee\xe7\xe5\xf4\xe0?<h><n>", // NNF654
+ "\xca\xe0\xea \xe4\xee\xeb\xe3\xee \xe2\xfb \xf0\xe0\xe1\xee\xf2\xe0\xe5\xf2\xe5 \xe0\xe3\xe5\xed\xf2\xee\xec \xc1\xf0\xfd\xe4\xe8?<h><n>", // NSM250
+ "\xd7\xf2\xee \xe2\xfb \xe4\xf3\xec\xe0\xe5\xf2\xe5 \xee \xed\xee\xe2\xee\xec \xef\xf0\xee\xe5\xea\xf2\xe5 \xc1\xf0\xfd\xe4\xe8?<h><n>", // NSM251
+ "\xc4\xe6\xee\xe7\xe5\xf4 \xf1\xea\xe0\xe7\xe0\xeb, \xf7\xf2\xee \xf2\xe5\xe0\xf2\xf0, \xe2\xe5\xf0\xee\xff\xf2\xed\xee, \xe7\xe0\xea\xf0\xfb\xeb\xe8 \xef\xe5\xf0\xe5\xe4 \xef\xee\xf5\xe8\xf9\xe5\xed\xe8\xe5\xec. \xc0 \xe7\xed\xe0\xf7\xe8\xf2, \xef\xf0\xe5\xf1\xf2\xf3\xef\xed\xe8\xea \xed\xe0\xf5\xee\xe4\xe8\xf2\xf1\xff \xe2\xed\xf3\xf2\xf0\xe8.<h><n>", // NSM252
+ // 10
+ "\xc2\xfb \xf1\xeb\xfb\xf8\xe0\xeb\xe8 \xee \xf2\xf0\xe5\xe1\xee\xe2\xe0\xed\xe8\xe8 \xe2\xfb\xea\xf3\xef\xe0?<h><n>", // NSM254
+ "\xca\xe0\xe6\xe5\xf2\xf1\xff, \xc1\xf0\xfd\xe4\xe8 \xed\xe5 \xed\xf0\xe0\xe2\xe8\xf2\xf1\xff \xe2\xe0\xf8\xe0 \xf2\xe0\xea\xf2\xe8\xea\xe0.<h><n>", // NSM256
+ "\xd7\xf2\xee \xe2\xfb \xe1\xf3\xe4\xe5\xf2\xe5 \xe4\xe5\xeb\xe0\xf2\xfc \xef\xee\xf1\xeb\xe5 \xf2\xee\xe3\xee, \xea\xe0\xea \xf2\xe5\xe0\xf2\xf0 \xf1\xed\xe5\xf1\xf3\xf2? \xca\xf3\xe4\xe0-\xed\xe8\xe1\xf3\xe4\xfc \xf3\xe5\xe4\xe5\xf2\xe5?<h><n>", // NJH450
+ "\xc2\xfb \xec\xee\xe6\xe5\xf2\xe5 \xf0\xe0\xf1\xf1\xea\xe0\xe7\xe0\xf2\xfc \xf7\xf2\xee-\xed\xe8\xe1\xf3\xe4\xfc \xee\xe1 \xe0\xe2\xf2\xee\xec\xe0\xf2\xe5 \xef\xee \xf1\xee\xe7\xe4\xe0\xed\xe8\xfe \xea\xeb\xfe\xf7\xe5\xe9, \xea\xee\xf2\xee\xf0\xfb\xe9 \xf1\xf2\xee\xe8\xf2 \xe2 \xf5\xee\xeb\xeb\xe5? \xce\xed \xe4\xe0\xe2\xed\xee \xf1\xeb\xee\xec\xe0\xed?<h><n>", // NJH452
+ "\xd7\xf2\xee \xe2\xfb \xe7\xed\xe0\xe5\xf2\xe5 \xee \xc4\xe6\xee\xed\xe0\xf2\xe0\xed\xe5 \xd2\xee\xec\xef\xf1\xee\xed\xe5?<h><n>", // NJH453
+ // 15
+ "\xd3 \xfd\xf2\xee\xe3\xee \xf2\xe5\xe0\xf2\xf0\xe0 \xf2\xe0\xea\xe0\xff \xe1\xee\xe3\xe0\xf2\xe0\xff \xe8\xf1\xf2\xee\xf0\xe8\xff. \xd1\xf2\xf0\xe0\xed\xed\xee, \xf7\xf2\xee \xe6\xe8\xf2\xe5\xeb\xe8 \xd1\xe5\xed\xf2-\xcb\xf3\xe8\xf1\xe0 \xed\xe5 \xe7\xe0\xe8\xed\xf2\xe5\xf0\xe5\xf1\xee\xe2\xe0\xed\xfb \xe2 \xe5\xe3\xee \xf1\xee\xf5\xf0\xe0\xed\xe5\xed\xe8\xe8.<h><n>", // NJH455
+ "\xce\xf4\xe8\xf6\xe5\xf0 \xef\xee\xeb\xe8\xf6\xe8\xe8 \xf1\xea\xe0\xe7\xe0\xeb, \xf7\xf2\xee \xcd\xe8\xea\xee\xeb\xe0\xf1 \xd4\xe0\xeb\xfc\xea\xee\xed\xe5 \xec\xee\xe6\xe5\xf2 \xef\xee\xe9\xf2\xe8 \xed\xe0 \'\xea\xf0\xe0\xe9\xed\xe8\xe5 \xec\xe5\xf0\xfb\', \xf7\xf2\xee\xe1\xfb \xe4\xee\xe1\xe8\xf2\xfc\xf1\xff \xf1\xe2\xee\xe5\xe9 \xf6\xe5\xeb\xe8. \xcf\xee\xf7\xe5\xec\xf3 \xe2\xfb \xf0\xe0\xe7\xf0\xe5\xf8\xe8\xeb\xe8 \xe5\xec\xf3 \xf3\xf1\xf2\xf0\xee\xe8\xf2\xfc \xf1\xe2\xee\xe9 \xf8\xf2\xe0\xe1 \xe2 \xf5\xee\xeb\xeb\xe5?<h><n>", // NJH456
+ "\xcd\xe5\xe4\xe0\xe2\xed\xee \xff \xe1\xfb\xeb\xe0 \xe7\xe0 \xea\xf3\xeb\xe8\xf1\xe0\xec\xe8, \xe8 \xee\xe4\xe8\xed \xe8\xe7 \xef\xf0\xee\xe6\xe5\xea\xf2\xee\xf0\xee\xe2 \xf1\xe2\xe0\xeb\xe8\xeb\xf1\xff \xf1 \xf0\xe0\xec\xef\xfb \xef\xf0\xff\xec\xee \xef\xe5\xf0\xe5\xe4\xee \xec\xed\xee\xe9!<h><n>", // NJH457
+ "\xdf \xef\xee\xeb\xf3\xf7\xe8\xeb\xe0 \xe5\xf9\xe5 \xee\xe4\xed\xee \xf1\xee\xee\xe1\xf9\xe5\xed\xe8\xe5 \xee\xf2 \xef\xee\xf5\xe8\xf2\xe8\xf2\xe5\xeb\xff! \xc6\xf3\xf2\xea\xe8\xe9 \xe3\xee\xeb\xee\xf1 \xf1\xea\xe0\xe7\xe0\xeb \xe8\xe7 \xe3\xf0\xee\xec\xea\xee\xe3\xee\xe2\xee\xf0\xe8\xf2\xe5\xeb\xff, \xf7\xf2\xee \xed\xf3\xe6\xed\xee \xee\xf1\xf2\xe0\xed\xee\xe2\xe8\xf2\xfc \xf1\xed\xee\xf1 \xf2\xe5\xe0\xf2\xf0\xe0.<h><n>", // NJH459
+ "\xc4\xe6\xee\xe7\xe5\xf4, \xff \xea\xee\xe5-\xf7\xf2\xee \xef\xf0\xee\xe2\xe5\xf0\xe8\xeb\xe0. \xcd\xe0 \xf1\xe0\xec\xee\xec \xe4\xe5\xeb\xe5 \xf3 \xe2\xe0\xf1 \xf3\xe6\xe5 \xed\xe5\xf2 \xe1\xf0\xe0\xf2\xe0 \xe2 \xc3\xf0\xe8\xe7\xe2\xf3\xe4\xe5.<h><n>", // NJH460
+ // 20
+ "\xd2\xe5\xe0\xf2\xf0 \xf1\xea\xee\xf0\xee \xe1\xf3\xe4\xe5\xf2 \xf0\xe0\xe7\xf0\xf3\xf8\xe5\xed. \xc2\xfb \xe2\xf1\xe5 \xe5\xf9\xe5 \xe4\xe5\xf0\xe6\xe8\xf2\xe5\xf1\xfc?<h><n>", // NJH465
+ "\xd0\xe0\xf1\xf1\xea\xe0\xe6\xe8\xf2\xe5, \xef\xee\xe6\xe0\xeb\xf3\xe9\xf1\xf2\xe0, \xee \xf1\xe2\xee\xe8\xf5 \xee\xf2\xed\xee\xf8\xe5\xed\xe8\xff\xf5 \xf1 \xef\xee\xeb\xe8\xf6\xe8\xe5\xe9.<h><n>", // NNF650
+ "\xc2\xfb \xec\xee\xe6\xe5\xf2\xe5 \xf0\xe0\xf1\xf1\xea\xe0\xe7\xe0\xf2\xfc \xee \xcc\xee\xeb\xee\xe4\xe5\xe6\xed\xee\xec \xee\xe1\xf9\xe5\xf1\xf2\xe2\xe5 \xf1\xef\xe0\xf1\xe5\xed\xe8\xff \xf2\xe5\xe0\xf2\xf0\xee\xe2?<h><n>", // NNF651
+ "\xd1\xe8\xec\xee\xed\xe0 \xef\xee\xe7\xe2\xe0\xeb\xe0 \xe6\xf3\xf0\xed\xe0\xeb\xe8\xf1\xf2\xee\xe2, \xf7\xf2\xee\xe1\xfb \xf0\xe0\xf1\xf1\xea\xe0\xe7\xe0\xf2\xfc \xee \xf2\xe0\xea \xed\xe0\xe7\xfb\xe2\xe0\xe5\xec\xee\xec \xe3\xe5\xf0\xee\xe9\xf1\xf2\xe2\xe5 \xc1\xf0\xfd\xe4\xe8! \xce\xed\xe0 \xe4\xe0\xe6\xe5 \xed\xe5 \xe2\xf1\xef\xee\xec\xe8\xed\xe0\xe5\xf2 \xee \xcc\xe0\xe9\xe5!<h><n>", // NNF655
+ "\xc2\xfb \xe7\xed\xe0\xe5\xf2\xe5, \xf7\xf2\xee \xf1\xee\xe1\xe8\xf0\xe0\xfe\xf2\xf1\xff \xef\xee\xf1\xf2\xf0\xee\xe8\xf2\xfc \xed\xe0 \xec\xe5\xf1\xf2\xe5 \xf2\xe5\xe0\xf2\xf0\xe0?<h><n>", // NNF658
+ // 25
+ "\xc4\xe6\xee\xe7\xe5\xf4 \xf1\xea\xe0\xe7\xe0\xeb, \xf7\xf2\xee \xe8\xf1\xf2\xee\xf0\xe8\xf7\xe5\xf1\xea\xee\xe5 \xee\xe1\xf9\xe5\xf1\xf2\xe2\xee \xd1\xe5\xed\xf2-\xcb\xf3\xe8\xf1\xe0 \xf5\xee\xf7\xe5\xf2 \xef\xf0\xe8\xe7\xed\xe0\xf2\xfc \xfd\xf2\xee\xf2 \xf2\xe5\xe0\xf2\xf0 \xed\xe0\xf6\xe8\xee\xed\xe0\xeb\xfc\xed\xfb\xec \xef\xe0\xec\xff\xf2\xed\xe8\xea\xee\xec.<h><n>", // NNF659
+ "\xdf \xe2\xfb\xff\xf1\xed\xe8\xeb\xe0, \xf7\xf2\xee \xef\xee\xf1\xeb\xe5 \xf1\xed\xee\xf1\xe0 \xf2\xe5\xe0\xf2\xf0\xe0 \xc4\xe6\xee\xe7\xe5\xf4 \xf1\xee\xe1\xe8\xf0\xe0\xe5\xf2\xf1\xff \xef\xe5\xf0\xe5\xe5\xf5\xe0\xf2\xfc \xe2 \xc0\xf0\xe8\xe7\xee\xed\xf3. \xd2\xe0\xec \xee\xed\xe8 \xf1 \xe1\xf0\xe0\xf2\xee\xec \xf5\xee\xf2\xff\xf2 \xee\xf2\xea\xf0\xfb\xf2\xfc \xf1\xe2\xee\xe9 \xea\xe8\xed\xee\xf2\xe5\xe0\xf2\xf0.<h><n>", // NBG20
+ "\xcf\xee \xf1\xee\xe2\xe5\xf2\xf3 \xc4\xe6\xee\xe7\xe5\xf4\xe0 \xff \xef\xee\xe7\xe2\xee\xed\xe8\xeb\xe0 \xe2 \xe3\xee\xf0\xee\xe4\xf1\xea\xf3\xfe \xe0\xe4\xec\xe8\xed\xe8\xf1\xf2\xf0\xe0\xf6\xe8\xfe \xe8 \xf1\xef\xf0\xee\xf1\xe8\xeb\xe0 \xee \xef\xeb\xe0\xed\xe5 \xf2\xe5\xe0\xf2\xf0\xe0.<h><n>", // NBG21
+ "\xce\xf4\xe8\xf6\xe5\xf0 \xef\xee\xeb\xe8\xf6\xe8\xe8 \xf1\xea\xe0\xe7\xe0\xeb, \xf7\xf2\xee \xe8\xed\xee\xe3\xe4\xe0 \xcd\xe8\xea\xee\xeb\xe0\xf1 \xe4\xee\xe1\xe8\xe2\xe0\xe5\xf2\xf1\xff \xf1\xe2\xee\xe8\xf5 \xf6\xe5\xeb\xe5\xe9 \xed\xe5\xe7\xe0\xea\xee\xed\xed\xfb\xec \xef\xf3\xf2\xe5\xec. \xcf\xee\xeb\xe8\xf6\xe8\xff \xf1\xf7\xe8\xf2\xe0\xe5\xf2, \xf7\xf2\xee \xee\xed \xef\xf0\xe8\xf7\xe0\xf1\xf2\xe5\xed \xea \xef\xee\xf5\xe8\xf9\xe5\xed\xe8\xfe \xe4\xe5\xe2\xf3\xf8\xea\xe8 \xe8\xe7 \xf2\xe5\xe0\xf2\xf0\xe0 \xe2 \xcd\xfd\xf8\xe2\xe8\xeb\xeb\xe5.<h><n>", // NBG22
+ "\xcc\xed\xe5 \xea\xe0\xe6\xe5\xf2\xf1\xff, \xf7\xf2\xee \xd1\xe8\xec\xee\xed\xe0 \xcc\xfe\xeb\xeb\xe5\xf0 \xe3\xee\xf2\xee\xe2\xe0 \xed\xe0 \xe2\xf1\xe5 \xf0\xe0\xe4\xe8 \xf1\xeb\xe0\xe2\xfb.<h><n>", // NBG23
+ // 30
+ "\xd1\xe8\xec\xee\xed\xe0 \xee\xf0\xe3\xe0\xed\xe8\xe7\xee\xe2\xe0\xeb\xe0 \xef\xf0\xe5\xf1\xf1-\xea\xee\xed\xf4\xe5\xf0\xe5\xed\xf6\xe8\xfe. \xdf \xee\xf7\xe5\xed\xfc \xf5\xee\xf7\xf3 \xf3\xe7\xed\xe0\xf2\xfc, \xee \xf7\xe5\xec \xf2\xe0\xec \xf0\xe0\xe7\xe3\xee\xe2\xe0\xf0\xe8\xe2\xe0\xfe\xf2, \xed\xee \xe2\xe5\xe4\xfc \xec\xe5\xed\xff \xed\xe5 \xef\xf0\xe8\xe3\xeb\xe0\xf8\xe0\xeb\xe8.<h><n>", // NBG24
+ "\xd1\xe8\xec\xee\xed\xe0 \xf5\xee\xf7\xe5\xf2, \xf7\xf2\xee\xe1\xfb \xe4\xeb\xff \xf1\xe2\xee\xe8\xf5 \xe7\xf0\xe8\xf2\xe5\xeb\xe5\xe9 \xc1\xf0\xfd\xe4\xe8 \xe1\xfb\xeb \xe2\xf1\xe5\xe3\xe4\xe0 \'\xf3\xec\xee\xef\xee\xec\xf0\xe0\xf7\xe8\xf2\xe5\xeb\xfc\xed\xee \xef\xf0\xe8\xe2\xeb\xe5\xea\xe0\xf2\xe5\xeb\xfc\xed\xfb\xec\'. \xd7\xf2\xee \xfd\xf2\xee \xe7\xed\xe0\xf7\xe8\xf2?<h><n>", // NBG25
+ "\xd1\xe5\xe3\xee\xe4\xed\xff \xf3\xf2\xf0\xee\xec \xea\xf2\xee-\xf2\xee \xef\xf0\xe8\xf1\xeb\xe0\xeb \xe2 \xf2\xe5\xe0\xf2\xf0 \xef\xee\xf5\xee\xf0\xee\xed\xed\xfb\xe9 \xe2\xe5\xed\xee\xea!<h><n>", // NBG26
+ "\xdf \xef\xee\xe7\xed\xe0\xea\xee\xec\xe8\xeb\xe0\xf1\xfc \xf1 \xcd\xe8\xea\xee\xeb\xe0\xf1\xee\xec \xd4\xe0\xeb\xfc\xea\xee\xed\xe5, \xeb\xe8\xe4\xe5\xf0\xee\xec \xee\xf0\xe3\xe0\xed\xe8\xe7\xe0\xf6\xe8\xe8 \xcc\xce\xd1\xd2. \xc5\xe3\xee \xee\xf0\xe3\xe0\xed\xe8\xe7\xe0\xf6\xe8\xff \xf0\xe0\xe7\xe1\xe8\xeb\xe0 \xef\xe0\xeb\xe0\xf2\xea\xe8 \xe2\xee\xe7\xeb\xe5 \xf2\xe5\xe0\xf2\xf0\xe0, \xe2\xfb\xf0\xe0\xe6\xe0\xff \xf1\xe2\xee\xe9 \xef\xf0\xee\xf2\xe5\xf1\xf2 \xef\xf0\xee\xf2\xe8\xe2 \xf1\xed\xee\xf1\xe0.<h><n>", // NBG27
+ "\xcd\xe8\xea\xee\xeb\xe0\xf1 \xf1\xea\xe0\xe7\xe0\xeb, \xf7\xf2\xee \xe5\xe3\xee \xe1\xe0\xe1\xf3\xf8\xea\xe0 \xe2\xfb\xef\xee\xeb\xed\xff\xeb\xe0 \xe2\xed\xf3\xf2\xf0\xe5\xed\xed\xfe\xfe \xee\xf2\xe4\xe5\xeb\xea\xf3 \xf2\xe5\xe0\xf2\xf0\xe0. \xcd\xee \xc4\xe6\xee\xed\xe0\xf2\xe0\xed \xd2\xee\xec\xef\xf1\xee\xed, \xef\xe5\xf0\xe2\xfb\xe9 \xe2\xeb\xe0\xe4\xe5\xeb\xe5\xf6 \'\xd0\xee\xe9\xff\xeb \xcf\xe0\xeb\xeb\xe0\xe4\xe8\xf3\xec\xe0\', \xf2\xe0\xea \xe8 \xed\xe5 \xe7\xe0\xef\xeb\xe0\xf2\xe8\xeb \xe5\xe9 \xe7\xe0 \xf0\xe0\xe1\xee\xf2\xf3!<h><n>", // NBG28
+ // 35
+ "\xdf \xed\xe0\xf8\xeb\xe0 \xea\xed\xe8\xe3\xf3, \xe2 \xea\xee\xf2\xee\xf0\xee\xe9 \xee\xef\xe8\xf1\xfb\xe2\xe0\xe5\xf2\xf1\xff \xe2\xfb\xef\xee\xeb\xed\xe5\xed\xe8\xe5 \xf0\xe0\xe7\xeb\xe8\xf7\xed\xfb\xf5 \xf4\xee\xea\xf3\xf1\xee\xe2.<h><n>", // NBG30
+ "\xdf \xf0\xe0\xe7\xe3\xee\xe2\xe0\xf0\xe8\xe2\xe0\xeb\xe0 \xf1 \xd8\xe5\xf0\xec\xe0\xed\xee\xec \xd2\xf0\xe0\xf3\xf2\xee\xec \xe8\xe7 \xe1\xe8\xe1\xeb\xe8\xee\xf2\xe5\xea\xe8 \xea\xee\xed\xe3\xf0\xe5\xf1\xf1\xe0. \xce\xed \xef\xee\xee\xe1\xe5\xf9\xe0\xeb \xed\xe0\xe9\xf2\xe8 \xef\xe8\xf1\xfc\xec\xe0 \xee \xf2\xee\xec, \xea\xe0\xea \xc3\xf3\xe4\xe8\xed\xe8 \xf0\xe0\xf1\xef\xee\xf0\xff\xe4\xe8\xeb\xf1\xff \xf1\xe2\xee\xe5\xe9 \xef\xee\xeb\xee\xe2\xe8\xed\xee\xe9 \xf2\xe5\xe0\xf2\xf0\xe0.<h><n>", // NBG31
+ "\xdf \xef\xee\xeb\xf3\xf7\xe8\xeb\xe0 \xe5\xf9\xe5 \xee\xe4\xed\xf3 \xf3\xe3\xf0\xee\xe7\xf3! \xcd\xe0 \xfd\xf2\xee\xf2 \xf0\xe0\xe7 \xef\xee\xf5\xe8\xf2\xe8\xf2\xe5\xeb\xfc \xee\xe1\xf0\xe0\xf2\xe8\xeb\xf1\xff \xea\xee \xec\xed\xe5 \xef\xee \xe8\xec\xe5\xed\xe8!<h><n>", // NBG32
+ "\xcf\xee\xec\xee\xe3\xe8\xf2\xe5! \xdf \xed\xe5 \xe7\xed\xe0\xfe, \xf7\xf2\xee \xe4\xe5\xeb\xe0\xf2\xfc \xe4\xe0\xeb\xfc\xf8\xe5!<h><n>", // NBG70
+ "\xc4\xe5\xe2\xf7\xee\xed\xea\xe8, \xec\xed\xe5 \xed\xf3\xe6\xed\xe0 \xef\xee\xe4\xf1\xea\xe0\xe7\xea\xe0!<h><n>", // NBG71
+ // 40
+ "\xca \xf2\xee\xec\xf3 \xe2\xf0\xe5\xec\xe5\xed\xe8, \xea\xe0\xea \xec\xed\xe5 \xf3\xe4\xe0\xeb\xee\xf1\xfc \xef\xee\xe3\xee\xe2\xee\xf0\xe8\xf2\xfc \xf1 \xd1\xe8\xec\xee\xed\xee\xe9 \xcc\xfe\xeb\xeb\xe5\xf0, \xee\xed\xe0 \xf3\xe6\xe5 \xe7\xed\xe0\xeb\xe0 \xee \xef\xee\xf5\xe8\xf9\xe5\xed\xe8\xe8 \xe8 \xee\xf2\xec\xe5\xed\xe8\xeb\xe0 \xef\xf0\xe5\xec\xfc\xe5\xf0\xf3.<h><n>", // NDN20
+ "\xc4\xe6\xee\xe7\xe5\xf4 \xe3\xee\xe2\xee\xf0\xe8\xf2, \xf7\xf2\xee \xe8\xf1\xf2\xee\xf0\xe8\xf7\xe5\xf1\xea\xee\xe5 \xee\xe1\xf9\xe5\xf1\xf2\xe2\xee \xd1\xe5\xed\xf2-\xcb\xf3\xe8\xf1\xe0 \xe4\xee\xe1\xe8\xe2\xe0\xe5\xf2\xf1\xff \xef\xf0\xe8\xe7\xed\xe0\xed\xe8\xff \xf2\xe5\xe0\xf2\xf0\xe0 \xed\xe0\xf6\xe8\xee\xed\xe0\xeb\xfc\xed\xfb\xec \xef\xe0\xec\xff\xf2\xed\xe8\xea\xee\xec.<h><n>", // NDN21
+ "\xdf \xf1\xeb\xf3\xf7\xe0\xe9\xed\xee \xf3\xf1\xeb\xfb\xf8\xe0\xeb\xe0 \xf2\xe5\xeb\xe5\xf4\xee\xed\xed\xfb\xe9 \xf0\xe0\xe7\xe3\xee\xe2\xee\xf0 \xc1\xf0\xfd\xe4\xe8 \xe8 \xd1\xe8\xec\xee\xed\xfb. \xce\xf7\xe5\xed\xfc \xf1\xf2\xf0\xe0\xed\xed\xee. \xcf\xee\xf5\xee\xe6\xe5, \xf3 \xc1\xf0\xfd\xe4\xe8 \xe4\xe5\xef\xf0\xe5\xf1\xf1\xe8\xff.<h><n>", // NDN22
+ "\xdf \xed\xe0\xf8\xeb\xe0 \xf2\xe5\xf5\xed\xe8\xf7\xe5\xf1\xea\xe8\xe9 \xf1\xef\xf0\xe0\xe2\xee\xf7\xed\xe8\xea. \xc2 \xed\xe5\xec \xee\xef\xe8\xf1\xfb\xe2\xe0\xfe\xf2\xf1\xff \xed\xe5\xea\xee\xf2\xee\xf0\xfb\xe5 \xf2\xf0\xfe\xea\xe8 \xe8\xeb\xeb\xfe\xe7\xe8\xee\xed\xe8\xf1\xf2\xee\xe2, \xe2\xfb\xf1\xf2\xf3\xef\xe0\xe2\xf8\xe8\xf5 \xed\xe0 \xf1\xf6\xe5\xed\xe5 \'\xd0\xee\xe9\xff\xeb \xcf\xe0\xeb\xeb\xe0\xe4\xe8\xf3\xec\xe0\'.<h><n>", // NDN23
+ "\xdf \xe2\xfb\xe8\xe3\xf0\xe0\xeb\xe0 \xe2 \xe8\xe3\xf0\xe5 \'\xd3\xe3\xe0\xe4\xe0\xe9 \xea\xe0\xf0\xf2\xf3\'. \xc8 \xff \xed\xe5\xef\xf0\xe5\xec\xe5\xed\xed\xee \xed\xe0\xe9\xe4\xf3 \xef\xee\xf5\xe8\xf2\xe8\xf2\xe5\xeb\xff.<h><n>", // NDN24
+ // 45
+ "\xdf \xed\xe5 \xec\xee\xe3\xf3 \xef\xee\xed\xff\xf2\xfc, \xef\xee\xf7\xe5\xec\xf3 \xef\xee\xf5\xe8\xf2\xe8\xf2\xe5\xeb\xfc \xe7\xe2\xee\xed\xe8\xeb \xe8\xe7 \xc3\xf0\xe0\xed\xe8\xf2-\xf1\xe8\xf2\xe8 \xe8 \xef\xee\xf7\xe5\xec\xf3 \xee\xed \xef\xee\xf2\xf0\xe5\xe1\xee\xe2\xe0\xeb \xe2\xfb\xea\xf3\xef, \xe4\xe0\xe6\xe5 \xed\xe5 \xf3\xef\xee\xec\xff\xed\xf3\xe2 \xee \xf1\xed\xee\xf1\xe5 \xf2\xe5\xe0\xf2\xf0\xe0!<h><n>", // NDN25
+ "\xdf \xf1\xef\xf0\xee\xf1\xe8\xeb\xe0 \xd1\xe8\xec\xee\xed\xf3 \xee \xea\xe2\xe8\xf2\xe0\xed\xf6\xe8\xe8 \xed\xe0 \xef\xee\xf5\xee\xf0\xee\xed\xed\xfb\xe9 \xe2\xe5\xed\xee\xea. \xce\xea\xe0\xe7\xe0\xeb\xee\xf1\xfc, \xf7\xf2\xee \xee\xed\xe0 \xe7\xe0\xea\xe0\xe7\xe0\xeb\xe0 \xe5\xe3\xee \xe4\xeb\xff \xee\xf7\xe5\xf0\xe5\xe4\xed\xee\xe9 \xf4\xee\xf2\xee\xf1\xe5\xf1\xf1\xe8\xe8. \xcf\xf0\xe5\xe4\xf1\xf2\xe0\xe2\xeb\xff\xe5\xf2\xe5?<h><n>", // NDN26
+ "\xcc\xed\xe5 \xed\xe0\xe4\xee \xef\xf0\xe8\xe4\xf3\xec\xe0\xf2\xfc, \xea\xe0\xea \xee\xf1\xf2\xe0\xed\xee\xe2\xe8\xf2\xfc \xf1\xed\xee\xf1 \xf2\xe5\xe0\xf2\xf0\xe0!<h><n>", // NDN27
+ "\xc2 \xf5\xee\xeb\xeb\xe5 \xe5\xf1\xf2\xfc \xe0\xe2\xf2\xee\xec\xe0\xf2 \xe4\xeb\xff \xe8\xe7\xe3\xee\xf2\xee\xe2\xeb\xe5\xed\xe8\xff \xea\xeb\xfe\xf7\xe5\xe9. \xc2 \xed\xe5\xec \xec\xee\xe6\xed\xee \xf1\xe4\xe5\xeb\xe0\xf2\xfc \xea\xeb\xfe\xf7 \xeb\xfe\xe1\xee\xe9 \xf4\xee\xf0\xec\xfb. \xc8 \xe4\xe0\xe6\xe5 \xea\xeb\xfe\xf7 \xea \xf1\xe5\xf0\xe4\xf6\xf3. \xdf \xf5\xee\xf2\xe5\xeb\xe0 \xf1\xe4\xe5\xeb\xe0\xf2\xfc \xf2\xe0\xea\xee\xe9 \xe4\xeb\xff \xf2\xe5\xe1\xff, \xed\xee \xe2\xe5\xe4\xfc \xf1\xe5\xe9\xf7\xe0\xf1 \xed\xe5 \xe2\xf0\xe5\xec\xff \xe4\xf3\xec\xe0\xf2\xfc \xee \xf1\xf3\xe2\xe5\xed\xe8\xf0\xe0\xf5.<h><n>", // NDN28
+ "\xca\xe0\xea \xff \xf3\xe7\xed\xe0\xeb\xe0, \xc3\xe0\xf0\xf0\xe8 \xc3\xf3\xe4\xe8\xed\xe8 \xe2\xeb\xe0\xe4\xe5\xeb \xef\xee\xeb\xee\xe2\xe8\xed\xee\xe9 \xf2\xe5\xe0\xf2\xf0\xe0 \'\xd0\xee\xe9\xff\xeb \xcf\xe0\xeb\xeb\xe0\xe4\xe8\xf3\xec\'. \xca\xe0\xe6\xe5\xf2\xf1\xff, \xee\xed \xe1\xfb\xeb \xe1\xee\xeb\xfc\xf8\xe8\xec \xee\xf0\xe8\xe3\xe8\xed\xe0\xeb\xee\xec!<h><n>", // NDN29
+ // 50
+ "\xcd\xe8\xea\xee\xeb\xe0\xf1 \xe3\xee\xe2\xee\xf0\xe8\xf2, \xf7\xf2\xee \xef\xee\xeb\xe8\xf6\xe8\xff \xf3\xe6\xe5 \xee\xe1\xfb\xf1\xea\xe8\xe2\xe0\xe5\xf2 \xe7\xe4\xe0\xed\xe8\xe5 \xef\xe5\xf0\xe5\xe4 \xf1\xed\xee\xf1\xee\xec.<h><n>", // NDN30
+ "\xcd\xe5\xe4\xe0\xe2\xed\xee \xff \xe1\xfb\xeb\xe0 \xe7\xe0 \xea\xf3\xeb\xe8\xf1\xe0\xec\xe8, \xe8 \xee\xe4\xe8\xed \xe8\xe7 \xef\xf0\xee\xe6\xe5\xea\xf2\xee\xf0\xee\xe2 \xf1\xe2\xe0\xeb\xe8\xeb\xf1\xff \xf1 \xf0\xe0\xec\xef\xfb \xef\xf0\xff\xec\xee \xef\xe5\xf0\xe5\xe4\xee \xec\xed\xee\xe9!<h><n>", // NDNj
+ "\xdf \xed\xe5 \xee\xf2\xea\xe0\xe6\xf3\xf1\xfc \xee\xf2 \xef\xee\xe4\xf1\xea\xe0\xe7\xea\xe8.<h><n>", // NDN70
+ "\xdf \xed\xe5 \xe7\xed\xe0\xfe, \xf7\xf2\xee \xe4\xe5\xeb\xe0\xf2\xfc \xe4\xe0\xeb\xfc\xf8\xe5. \xc5\xf1\xf2\xfc \xe8\xe4\xe5\xe8?<h><n>" // NDN71
+}
+};
+
+const Common::Array<Common::Array<const char *>> _nancy5GoodbyeTexts = {
+{ // English
+ "I'll talk to you later, Brady.<h>", // NBA090
+ "OK, you two. I'll talk to you soon!<h>", // NBG90
+ "I think your phone's about to ring.<h>", // NSM290
+ "Gotta go now!<h>", // NJH90
+ "Catch ya later.<h>", // NNF690
+ "Bye, Ned.<h>" // NDN90
+},
+{ // Russian
+ "\xcf\xee\xe3\xee\xe2\xee\xf0\xe8\xec \xef\xee\xe7\xe6\xe5, \xc1\xf0\xfd\xe4\xe8.<h>", // NBA090
+ "\xcc\xed\xe5 \xef\xee\xf0\xe0. \xdf \xe2\xe0\xec \xef\xe5\xf0\xe5\xe7\xe2\xee\xed\xfe!<h>", // NBG90
+ "\xca\xe0\xe6\xe5\xf2\xf1\xff, \xf3 \xe2\xe0\xf1 \xec\xed\xee\xe3\xee \xe4\xe5\xeb. \xcd\xe5 \xe1\xf3\xe4\xf3 \xec\xe5\xf8\xe0\xf2\xfc.<h>", // NSM290
+ "\xcc\xed\xe5 \xef\xee\xf0\xe0!<h>", // NJH90
+ "\xcf\xee\xea\xe0.<h>", // NNF690
+ "\xcf\xee\xea\xe0, \xcd\xfd\xe4.<h>", // NDN90
+}
+};
+
+const Common::Array<const char *> _nancy5TelephoneRinging = {
+ "ringing...<n><e>", // English
+ "\xc3\xf3\xe4\xea\xe8... <n><e>" // Russian
+};
+
+const Common::Array<const char *> _nancy5EventFlagNames = {
+ "EV_Generic0",
+ "EV_Generic1",
+ "EV_Generic2",
+ "EV_Generic3",
+ "EV_Generic4",
+ "EV_Generic5",
+ "EV_Generic6",
+ "EV_Generic7",
+ "EV_Generic8",
+ "EV_Generic9",
+ "EV_Generic10",
+ "EV_Generic11",
+ "EV_Generic12",
+ "EV_Generic13",
+ "EV_Generic14",
+ "EV_Generic15",
+ "EV_Generic16",
+ "EV_Generic17",
+ "EV_Generic18",
+ "EV_Generic19",
+ "EV_Generic20",
+ "EV_Generic21",
+ "EV_Generic22",
+ "EV_Generic23",
+ "EV_Generic24",
+ "EV_Generic25",
+ "EV_Generic26",
+ "EV_Generic27",
+ "EV_Generic28",
+ "EV_Generic29",
+ "EV_Generic30",
+ "EV_TimeForEndgame",
+ "EV_PlayerWonGame",
+ "EV_StopPlayerScrolling",
+ "EV_Easter_Eggs",
+ "EV_BA_Available",
+ "EV_BA_Bust",
+ "EV_BA_Said_Alibi",
+ "EV_BA_Said_Balcony",
+ "EV_BA_Said_Complicated",
+ "EV_BA_Said_Email",
+ "EV_BA_Said_Falcone",
+ "EV_BA_Said_Guest",
+ "EV_BA_Said_Help",
+ "EV_BA_Said_Joseph",
+ "EV_BA_Said_Kidnap_Me",
+ "EV_BA_Said_My_Agent",
+ "EV_BA_Said_Politician",
+ "EV_BA_Said_Radicals",
+ "EV_BA_Said_RunawayBus",
+ "EV_BA_Said_Tinseltown",
+ "EV_Bulb_Popped",
+ "EV_Bulb_Replaced",
+ "EV_CageLock_On",
+ "EV_Called_CntyAdmin",
+ "EV_Called_LibCong",
+ "EV_Called_Widow",
+ "EV_Day1",
+ "EV_Day2",
+ "EV_Day3",
+ "EV_FaderLft_On",
+ "EV_FaderLft01",
+ "EV_FaderLft02",
+ "EV_FaderLft03",
+ "EV_FaderLft04",
+ "EV_FaderLft05",
+ "EV_FaderRt_On",
+ "EV_FaderRt01",
+ "EV_FaderRt02",
+ "EV_FaderRt03",
+ "EV_FaderRt04",
+ "EV_FaderRt05",
+ "EV_Flashed_Joseph",
+ "EV_Focused_Slide",
+ "EV_Found_Secret_Passage",
+ "EV_Got_CntyAdmin_Number",
+ "EV_Greased_TileMove",
+ "EV_Heard_JH_Call01",
+ "EV_Heard_MicTest",
+ "EV_Heard_Scream01",
+ "EV_Heard_Threat01",
+ "EV_Heard_Threat02",
+ "EV_Hooked_Crate",
+ "EV_In_Basement",
+ "EV_In_Closet",
+ "EV_In_SwitcherooBox",
+ "EV_Insert_Blueprint",
+ "EV_Insert_Houdini",
+ "EV_Insert_Intermission",
+ "EV_Iron_Security_Removed",
+ "EV_JH_Available",
+ "EV_JH_Bust_Depo",
+ "EV_JH_Bust_EOD1",
+ "EV_JH_Fixed_Keymaker",
+ "EV_JH_Page_EOD1",
+ "EV_JH_Said_Alibi",
+ "EV_JH_Said_AllOver",
+ "EV_JH_Said_Blaze",
+ "EV_JH_Said_Blueprints",
+ "EV_JH_Said_CallPolice_EOD2",
+ "EV_JH_Said_CantLetYou",
+ "EV_JH_Said_CrowdControl",
+ "EV_JH_Said_Fix_Keymaker",
+ "EV_JH_Said_GoHome02",
+ "EV_JH_Said_GraniteCity",
+ "EV_JH_Said_Greasewood",
+ "EV_JH_Said_Inside_Line",
+ "EV_JH_Said_JJ",
+ "EV_JH_Said_Landmark",
+ "EV_JH_Said_LastCase",
+ "EV_JH_Said_NeverMeant",
+ "EV_JH_Said_NF_Kid",
+ "EV_JH_Said_Not_Desperate",
+ "EV_JH_Said_NotSoFast",
+ "EV_JH_Said_Ransom",
+ "EV_JH_Said_Secret_Passage",
+ "EV_JH_Said_Simone",
+ "EV_JH_Said_Souvenir",
+ "EV_JH_Said_StageLight",
+ "EV_JH_Said_Suspects",
+ "EV_JH_Said_Wheelerdealer",
+ "EV_JH_Said_Wreath",
+ "EV_JH_Showed_PressPass",
+ "EV_JH_Suggested_Police",
+ "EV_Knob_Lost",
+ "EV_Knob_Replaced",
+ "EV_Lowered_CageLft",
+ "EV_Lowered_CageRt",
+ "EV_Magnet_On",
+ "EV_Met_BA01",
+ "EV_Met_BA02",
+ "EV_Met_BA03",
+ "EV_Met_JH01",
+ "EV_Met_JH02",
+ "EV_Met_JH03",
+ "EV_Met_NF01",
+ "EV_Met_NF02",
+ "EV_Met_NF03",
+ "EV_Met_SM01",
+ "EV_Met_SM02",
+ "EV_Met_SM03",
+ "EV_Mic_On",
+ "EV_ND_Said_Article",
+ "EV_ND_Said_Fingers",
+ "EV_NF_Available",
+ "EV_NF_Gave_Number",
+ "EV_NF_Said_411",
+ "EV_NF_Said_Alibi",
+ "EV_NF_Said_Boloney",
+ "EV_NF_Said_Booth",
+ "EV_NF_Said_Cowboy",
+ "EV_NF_Said_Generica",
+ "EV_NF_Said_Grandmother",
+ "EV_NF_Said_HocusPocus",
+ "EV_NF_Said_Joseph",
+ "EV_NF_Said_Megaplex",
+ "EV_NF_Said_Most_Wanted",
+ "EV_NF_Said_No_EcoTerror",
+ "EV_NF_Said_Package",
+ "EV_NF_Said_Police",
+ "EV_NF_Said_Wrecking_Crew",
+ "EV_Placed_Coin_Balcony",
+ "EV_Placed_Coin_Souvenir",
+ "EV_Police_Bust",
+ "EV_PoliceCall_Intro",
+ "EV_PoliceCall_PizzaBox",
+ "EV_PoliceCall_PressPass",
+ "EV_PoliceCall_Ransom",
+ "EV_Press_Conf_Over",
+ "EV_Press_Conf_Started",
+ "EV_Projector_On",
+ "EV_Reported_JJ_Docs",
+ "EV_Ripped_ManEnvelope",
+ "EV_Rope_Fasten01",
+ "EV_Rope_Fasten02",
+ "EV_Rope_Fasten03",
+ "EV_Rope_Fasten04",
+ "EV_Rope_Fasten05",
+ "EV_Rope_Untied01",
+ "EV_Rope_Untied02",
+ "EV_Rope_Untied03",
+ "EV_Rope_Untied04",
+ "EV_Rope_Untied05",
+ "EV_Saw_BA_Project",
+ "EV_Saw_CageTrick_Book",
+ "EV_Saw_CageTrick_Review",
+ "EV_Saw_DigiCam",
+ "EV_Saw_Greasewood_Evidence",
+ "EV_Saw_Houdini_ChllngePost",
+ "EV_Saw_JJ_Docs",
+ "EV_Saw_LouisaDoc",
+ "EV_Saw_ManEnvelope",
+ "EV_Saw_Manual_Bulb",
+ "EV_Saw_Manual_Focus",
+ "EV_Saw_Maya_Depo",
+ "EV_Saw_Maya_Email",
+ "EV_Saw_Maya_Magician",
+ "EV_Saw_Maya_Notebook",
+ "EV_Saw_Maya_Pizza",
+ "EV_Saw_Maya_Shoe",
+ "EV_Saw_Missing_Poster",
+ "EV_Saw_PencilTrick_Book",
+ "EV_Saw_Ransom",
+ "EV_Saw_Slide_Blueprint",
+ "EV_Saw_VoiceDistort",
+ "EV_Saw_Wreath",
+ "EV_Saw_Wreath_Note",
+ "EV_Saw_Wreath_Receipt",
+ "EV_ShowDown",
+ "EV_SM_Available",
+ "EV_SM_Dis",
+ "EV_SM_Fessed_Wreath",
+ "EV_SM_Said_Alibi",
+ "EV_SM_Said_Coneydog",
+ "EV_SM_Said_FancyJackson",
+ "EV_SM_Said_Fifty_Grand",
+ "EV_SM_Said_Ponytail",
+ "EV_SM_Said_Posters",
+ "EV_SM_Said_PotatoTruck",
+ "EV_SM_Said_Press_Conference",
+ "EV_SM_Said_SamQuick",
+ "EV_SM_Said_StageName",
+ "EV_SM_Said_Troll",
+ "EV_SM_Said_What_Project",
+ "EV_Solved_TileMove",
+ "EV_Solved_Cntrl_Keypad",
+ "EV_Solved_Coin_Souvenir",
+ "EV_Solved_DepoDoor",
+ "EV_Solved_JJBox_Coin",
+ "EV_Solved_JJBox_Lid",
+ "EV_Solved_JJPanel_Puzzle",
+ "EV_Solved_Keymaker",
+ "EV_Solved_Monty",
+ "EV_Solved_Palm_Pilot",
+ "EV_Solved_PencilTrick",
+ "EV_Solved_Ropes",
+ "EV_Solved_Safe",
+ "EV_Solved_SparkGate",
+ "EV_Stagelight_Fell",
+ "EV_Stairs_Down",
+ "EV_Through_CeilingHatch",
+ "EV_Time_For_Endgame",
+ "EV_Took_Slide_Houdini",
+ "EV_Trap_Lft_Opn",
+ "EV_Trap_Rt_Opn",
+ "EV_TrickSeat_Unstuck",
+ "EV_Tried_TileMove",
+ "EV_Tried_Cntrl_Keypad",
+ "EV_Tried_Coin_Souvenir",
+ "EV_Tried_DepoDoor",
+ "EV_Tried_JJBox_Coin",
+ "EV_Tried_JJBox_Lid",
+ "EV_Tried_JJPanel_Puzzle",
+ "EV_Tried_Keymaker",
+ "EV_Tried_Monty",
+ "EV_Tried_Palm_Pilot",
+ "EV_Tried_PencilTrick",
+ "EV_Tried_Ropes",
+ "EV_Tried_Safe",
+ "EV_Tried_SparkGate",
+ "EV_BA_Said_Dazed",
+ "EV_BA_Said_Outlaw",
+ "EV_BA_Said_Verify",
+ "EV_ND_Said_Bobby_Comment",
+ "EV_ND_Said_Electrified",
+ "EV_ND_Said_Hack_Useless",
+ "EV_ND_Said_Hercules",
+ "EV_ND_Said_Stick",
+ "EV_NF_Said_GO",
+ "EV_Passage_Opn",
+ "EV_Saw_Keymaker",
+ "EV_Saw_TrapDr_Anim",
+ "EV_Thru_Mag_Exit",
+ "EV_Took_Wand",
+ "EV_Tried_Coin_Balcony",
+ "EV_Tried_Drawer",
+ "EV_Tried_Stuck_Seat",
+ "EV_Tried_TileMove_Stuck",
+ "EV_Unlocked_Drawer",
+ "EV_Saw_Intermission",
+ "EV_Tried_CageTrick",
+ "EV_Solved_CageTrick",
+ "EV_ND_Said_Testing",
+ "EV_ND_Said_Attention",
+ "EV_ND_Said_Outwitted",
+ "EV_NF_Said_Spill",
+ "EV_Empty1286",
+ "EV_Empty1287",
+ "EV_Empty1288",
+ "EV_Empty1289",
+ "EV_Empty1290",
+ "EV_Empty1291",
+ "EV_Empty1292",
+ "EV_Empty1293",
+ "EV_Empty1294",
+ "EV_Empty1295",
+ "EV_Empty1296",
+ "EV_Empty1297",
+ "EV_Empty1298",
+ "EV_Empty1299",
+ "EV_Empty1300",
+ "EV_Empty1301",
+ "EV_Empty1302",
+ "EV_Empty1303",
+ "EV_Empty1304",
+ "EV_Empty1305",
+ "EV_Empty1306",
+ "EV_Empty1307",
+ "EV_Empty1308",
+ "EV_Empty1309",
+ "EV_Empty1310",
+ "EV_Empty1311",
+ "EV_Empty1312",
+ "EV_Empty1313",
+ "EV_Empty1314",
+ "EV_Empty1315",
+ "EV_Empty1316",
+ "EV_Empty1317",
+ "EV_Empty1318",
+ "EV_Empty1319",
+ "EV_StartEndGameTimer",
+ "EV_BA_CrackUp01",
+ "EV_BA_CrackUp02",
+ "EV_BA_CrackUp03",
+ "EV_BA_CrackUp04",
+ "EV_Called_CntyAdmin01",
+ "EV_Called_CntyAdmin02",
+ "EV_Called_CntyAdmin03",
+ "EV_Called_CntyAdmin04",
+ "EV_Called_CntyAdmin05",
+ "EV_Called_LibCong01",
+ "EV_Called_LibCong02",
+ "EV_Called_LibCong03",
+ "EV_Called_LibCong04",
+ "EV_Called_LibCong05",
+ "EV_Called_LibCong06",
+ "EV_Called_Widow11",
+ "EV_Called_Widow12",
+ "EV_Called_Widow13",
+ "EV_Called_Widow14",
+ "EV_Called_Widow15",
+ "EV_JH_Said_Arcade57",
+ "EV_JH_Said_Arcade58",
+ "EV_JH_Said_Arcade59",
+ "EV_JH_Said_Houdini54",
+ "EV_JH_Said_Houdini55",
+ "EV_JH_Said_Houdini56",
+ "EV_NF_Said_Asbestos",
+ "EV_NF_Said_Mustache",
+ "EV_JH_Said_Rendezvous52",
+ "EV_JH_Said_Rendezvous53",
+ "EV_SM_Said_Hydrate20",
+ "EV_SM_Said_Hydrate21",
+ "EV_SM_Said_Hydrate22",
+ "EV_SM_Said_Sniveller",
+ "EV_Empty1355",
+ "EV_Empty1356",
+ "EV_Empty1357",
+ "EV_Empty1358",
+ "EV_Empty1359",
+ "EV_Empty1360",
+ "EV_Empty1361",
+ "EV_Empty1362",
+ "EV_Empty1363",
+ "EV_Empty1364",
+ "EV_Empty1365",
+ "EV_Empty1366",
+ "EV_Empty1367",
+ "EV_Empty1368",
+ "EV_Empty1369",
+ "EV_Empty1370",
+ "EV_Empty1371",
+ "EV_Empty1372",
+ "EV_Empty1373",
+ "EV_Empty1374",
+ "EV_Empty1375",
+ "EV_Empty1376",
+ "EV_Empty1377",
+ "EV_Empty1378",
+ "EV_Empty1379",
+ "EV_Empty1380",
+ "EV_Empty1381",
+ "EV_Empty1382",
+ "EV_B_Said_Blueberry",
+ "EV_B_Said_Decipher",
+ "EV_B_Said_Disco",
+ "EV_B_Said_Fresh",
+ "EV_B_Said_Impressionable",
+ "EV_B_Said_NoBrainer",
+ "EV_B_Said_Silver_Platter",
+ "EV_B_Said_Snoop",
+ "EV_B_Said_Standard",
+ "EV_B_Said_WideOpen",
+ "EV_G_Said_ApplePie",
+ "EV_G_Said_Broadcast",
+ "EV_G_Said_Generic",
+ "EV_G_Said_Hi",
+ "EV_G_Said_JJ",
+ "EV_G_Said_Limelight",
+ "EV_G_Said_Sword",
+ "EV_Heard_Press_Conf",
+ "EV_Met_BG",
+ "EV_Met_NN",
+ "EV_NN_Said_Accident",
+ "EV_NN_Said_Anchovies",
+ "EV_NN_Said_Bandwagon",
+ "EV_NN_Said_Cynicism",
+ "EV_NN_Said_Drawer",
+ "EV_NN_Said_Flash",
+ "EV_NN_Said_Instincts",
+ "EV_NN_Said_Jump",
+ "EV_NN_Said_KeyChain",
+ "EV_NN_Said_Lapse",
+ "EV_NN_Said_Overboard",
+ "EV_NN_Said_Postpone",
+ "EV_NN_Said_Profit",
+ "EV_NN_Said_Projection",
+ "EV_NN_Said_Snoop",
+ "EV_NN_Said_Sparks",
+ "EV_NN_Said_Twisted",
+ "EV_Empty1420",
+ "EV_Empty1421",
+ "EV_Empty1422",
+ "EV_Empty1423",
+ "EV_Empty1424",
+ "EV_Empty1425",
+ "EV_Empty1426",
+ "EV_Empty1427",
+ "EV_Empty1428",
+ "EV_Empty1429",
+ "EV_Empty1430",
+ "EV_Empty1431",
+ "EV_Empty1432",
+ "EV_Empty1433",
+ "EV_Empty1434",
+ "EV_Empty1435",
+ "EV_Empty1436",
+ "EV_Empty1437",
+ "EV_Empty1438",
+ "EV_Empty1439",
+ "EV_Empty1440",
+ "EV_Empty1441",
+ "EV_Empty1442",
+ "EV_Empty1443",
+ "EV_Empty1444",
+ "EV_Empty1445",
+ "EV_Empty1446",
+ "EV_Empty1447",
+ "EV_Empty1448",
+ "EV_Empty1449",
+ "EV_Empty1450",
+ "EV_Empty1451",
+ "EV_Empty1452",
+ "EV_Empty1453",
+ "EV_Empty1454",
+ "EV_TBD"
+};
+
+#endif // NANCY5DATA_H
Commit: 9de37d3f6a030867c0a03bb42e8dbd68ade332ba
https://github.com/scummvm/scummvm/commit/9de37d3f6a030867c0a03bb42e8dbd68ade332ba
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2023-08-10T14:28:50+03:00
Commit Message:
DISTS: Update nancy.dat
Due to the changes in the file format, nancy.dat needed
regeneration in order for the engine to work. The file now
contains data for all games up to and including nancy5.
Changed paths:
dists/engine-data/nancy.dat
diff --git a/dists/engine-data/nancy.dat b/dists/engine-data/nancy.dat
index b99742d5b87..dc3631dad52 100644
Binary files a/dists/engine-data/nancy.dat and b/dists/engine-data/nancy.dat differ
More information about the Scummvm-git-logs
mailing list