diff options
Diffstat (limited to 'sky/disk.cpp')
-rw-r--r-- | sky/disk.cpp | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/sky/disk.cpp b/sky/disk.cpp index 5571f9e705..571596dceb 100644 --- a/sky/disk.cpp +++ b/sky/disk.cpp @@ -52,15 +52,7 @@ void SkyState::initialiseDisk() { debug(1, "Entries in dinner table: %d", dinnerTableEntries); - if (dinnerTableEntries < 400) - _isDemo = true; - else - _isDemo = false; - - if (dinnerTableEntries > 1600) - _isCDVersion = true; - else - _isCDVersion = false; + determineGameVersion(dinnerTableEntries); dinnerTableArea = (uint8 *)malloc(dinnerTableEntries * 8); entriesRead = dnrHandle->read(dinnerTableArea, 8 * dinnerTableEntries) / 8; @@ -203,6 +195,55 @@ uint8 *SkyState::getFileInfo(uint16 fileNr) { return (uint8 *)NULL; } +void SkyState::determineGameVersion(uint32 dnrEntries) { + + //determine game version based on number of entries in dinner table + + switch (dnrEntries) { + + case 247: + //floppy demo (v0.0267) + _isDemo = true; + _isCDVersion = false; + _gameVersion = 267; + break; + + case 1404: + //floppy (v0.0288) + _isDemo = false; + _isCDVersion = false; + _gameVersion = 288; + break; + + case 1445: + //floppy (v0.0331) + _isDemo = false; + _isCDVersion = false; + _gameVersion = 331; + break; + + case 1711: + //cd demo (v0.0365) + _isDemo = true; + _isCDVersion = true; + _gameVersion = 365; + break; + + case 5099: + //cd (v0.0368) + _isDemo = false; + _isCDVersion = true; + _gameVersion = 368; + break; + + default: + //unknown version + warning("Unknown game version!"); + break; + } + +} + void SkyState::dumpFile(uint16 fileNr) { char buf[128]; File out; |