2014-10-06 12:50:05 +00:00
/* 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 2
* 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 , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
*/
/*
* This code is based on Labyrinth of Time code with assistance of
*
* Copyright ( c ) 1993 Terra Nova Development
* Copyright ( c ) 2004 The Wyrmkeep Entertainment Co .
*
*/
2015-07-17 07:52:30 +00:00
# include "common/config-manager.h"
2014-10-06 12:50:05 +00:00
# include "common/debug-channels.h"
# include "common/scummsys.h"
# include "common/error.h"
# include "common/fs.h"
# include "common/rect.h"
2015-07-17 07:52:30 +00:00
# include "engines/dialogs.h"
# include "engines/engine.h"
2014-10-06 12:50:05 +00:00
# include "engines/util.h"
2015-02-25 01:13:26 +00:00
# include "gui/message.h"
2015-12-01 19:10:42 +00:00
# include "engines/advancedDetector.h"
2015-02-25 01:13:26 +00:00
2014-10-06 12:50:05 +00:00
# include "lab/lab.h"
# include "lab/labfun.h"
2015-10-08 03:02:34 +00:00
# include "lab/resource.h"
2015-12-01 19:10:42 +00:00
# include "lab/anim.h"
2015-12-04 15:52:13 +00:00
# include "lab/graphics.h"
2014-12-27 11:23:20 +00:00
2014-10-06 12:50:05 +00:00
namespace Lab {
2014-12-25 18:13:52 +00:00
LabEngine * g_lab ;
2014-12-27 11:23:20 +00:00
LabEngine : : LabEngine ( OSystem * syst , const ADGameDescription * gameDesc )
2015-02-25 01:13:26 +00:00
: Engine ( syst ) , _gameDescription ( gameDesc ) , _extraGameFeatures ( 0 ) {
2014-12-25 18:13:52 +00:00
g_lab = this ;
2015-07-17 07:52:30 +00:00
2015-12-04 12:32:08 +00:00
_lastWaitTOFTicks = 0 ;
2015-11-24 22:59:30 +00:00
2015-11-29 23:12:01 +00:00
_isHiRes = false ;
2015-11-30 00:42:12 +00:00
_roomNum = - 1 ;
2015-11-30 06:13:09 +00:00
for ( int i = 0 ; i < MAX_CRUMBS ; i + + ) {
_breadCrumbs [ i ] . _roomNum = 0 ;
_breadCrumbs [ i ] . _direction = NORTH ;
}
_numCrumbs = 0 ;
_droppingCrumbs = false ;
_followingCrumbs = false ;
_followCrumbsFast = false ;
_isCrumbTurning = false ;
_isCrumbWaiting = false ;
2015-12-06 16:24:25 +00:00
_noUpdateDiff = false ;
_quitLab = false ;
2015-12-06 20:39:41 +00:00
_mainDisplay = true ;
2015-12-06 16:24:25 +00:00
_numInv = 0 ;
_manyRooms = 0 ;
_direction = 0 ;
_highestCondition = 0 ;
2015-11-30 06:13:09 +00:00
_crumbSecs = 0 ;
_crumbMicros = 0 ;
2015-11-29 23:34:43 +00:00
_event = nullptr ;
_resource = nullptr ;
2015-11-30 00:17:05 +00:00
_music = nullptr ;
2015-12-01 19:10:42 +00:00
_anim = nullptr ;
2015-12-04 12:32:08 +00:00
_graphics = nullptr ;
2015-12-06 20:39:41 +00:00
_rooms = nullptr ;
2015-11-29 23:34:43 +00:00
2015-12-04 12:32:08 +00:00
_lastTooLong = false ;
2015-12-03 00:06:04 +00:00
_interfaceOff = false ;
_alternate = false ;
for ( int i = 0 ; i < 20 ; i + + )
2015-12-03 01:06:39 +00:00
_moveImages [ i ] = nullptr ;
2015-12-02 19:32:06 +00:00
2015-12-04 15:52:13 +00:00
for ( int i = 0 ; i < 10 ; i + + ) {
2015-12-03 01:06:39 +00:00
_invImages [ i ] = nullptr ;
2015-12-06 17:16:26 +00:00
_numberImages [ i ] = nullptr ;
2015-12-04 15:52:13 +00:00
}
2015-12-03 00:06:04 +00:00
2015-12-06 17:16:26 +00:00
for ( int i = 0 ; i < 16 ; i + + )
_tiles [ i ] = nullptr ;
2015-12-03 00:06:04 +00:00
_curFileName = nullptr ;
_nextFileName = nullptr ;
_newFileName = nullptr ;
2015-12-01 09:35:31 +00:00
2015-12-04 12:32:08 +00:00
_curFileName = " " ;
2015-12-06 16:24:25 +00:00
_msgFont = nullptr ;
_inventory = nullptr ;
2015-12-03 18:49:55 +00:00
2015-12-04 21:04:48 +00:00
initTilePuzzle ( ) ;
2015-12-04 15:52:13 +00:00
2015-07-17 07:52:30 +00:00
//const Common::FSNode gameDataDir(ConfMan.get("path"));
//SearchMan.addSubDirectoryMatching(gameDataDir, "game");
//SearchMan.addSubDirectoryMatching(gameDataDir, "game/pict");
//SearchMan.addSubDirectoryMatching(gameDataDir, "game/spict");
//SearchMan.addSubDirectoryMatching(gameDataDir, "music");
2014-10-06 12:50:05 +00:00
}
LabEngine : : ~ LabEngine ( ) {
// Remove all of our debug levels here
DebugMan . clearAllDebugChannels ( ) ;
2015-11-29 23:34:43 +00:00
delete _event ;
delete _resource ;
2015-11-30 00:17:05 +00:00
delete _music ;
2015-12-01 19:10:42 +00:00
delete _anim ;
2015-12-04 12:32:08 +00:00
delete _graphics ;
2015-12-06 20:39:41 +00:00
free ( _rooms ) ;
2015-12-04 15:52:13 +00:00
for ( int i = 0 ; i < 16 ; i + + )
2015-12-06 17:16:26 +00:00
delete _tiles [ i ] ;
2014-10-06 12:50:05 +00:00
}
Common : : Error LabEngine : : run ( ) {
2014-12-27 13:18:40 +00:00
if ( getFeatures ( ) & GF_LOWRES )
initGraphics ( 320 , 200 , false ) ;
else
initGraphics ( 640 , 480 , true ) ;
2014-10-06 12:50:05 +00:00
2015-11-29 17:10:06 +00:00
_event = new EventManager ( this ) ;
2015-11-29 23:34:43 +00:00
_resource = new Resource ( this ) ;
2015-11-30 00:17:05 +00:00
_music = new Music ( this ) ;
2015-12-01 19:10:42 +00:00
_anim = new Anim ( this ) ;
2015-12-04 12:32:08 +00:00
_graphics = new DisplayMan ( this ) ;
2014-10-06 12:50:05 +00:00
2015-02-25 01:13:26 +00:00
if ( getPlatform ( ) = = Common : : kPlatformWindows ) {
// Check if this is the Wyrmkeep trial
Common : : File roomFile ;
bool knownVersion = true ;
bool roomFileOpened = roomFile . open ( " game/rooms/48 " ) ;
if ( ! roomFileOpened )
knownVersion = false ;
else if ( roomFile . size ( ) ! = 892 )
knownVersion = false ;
else {
roomFile . seek ( 352 ) ;
byte checkByte = roomFile . readByte ( ) ;
if ( checkByte = = 0x00 ) {
// Full Windows version
} else if ( checkByte = = 0x80 ) {
// Wyrmkeep trial version
_extraGameFeatures = GF_WINDOWS_TRIAL ;
GUI : : MessageDialog trialMessage ( " This is a trial Windows version of the game. To play the full version, you will need to use the original interpreter and purchase a key from Wyrmkeep " ) ;
trialMessage . runModal ( ) ;
} else {
knownVersion = false ;
}
2015-11-23 16:34:02 +00:00
2015-02-25 01:13:26 +00:00
roomFile . close ( ) ;
if ( ! knownVersion ) {
warning ( " Unknown Windows version found, please report this version to the ScummVM team " ) ;
return Common : : kNoGameDataFoundError ;
}
}
}
2014-12-27 13:18:40 +00:00
go ( ) ;
2014-10-06 12:50:05 +00:00
return Common : : kNoError ;
}
2015-02-19 13:20:05 +00:00
Common : : String LabEngine : : generateSaveFileName ( uint slot ) {
return Common : : String : : format ( " %s.%03u " , _targetName . c_str ( ) , slot ) ;
}
2015-12-06 13:36:49 +00:00
void LabEngine : : drawStaticMessage ( byte index ) {
_graphics - > drawMessage ( _resource - > getStaticText ( ( StaticText ) index ) . c_str ( ) ) ;
}
2015-12-06 13:49:50 +00:00
void LabEngine : : changeVolume ( int delta ) {
warning ( " STUB: changeVolume() " ) ;
}
void LabEngine : : waitTOF ( ) {
g_system - > copyRectToScreen ( _graphics - > _displayBuffer , _graphics - > _screenWidth , 0 , 0 , _graphics - > _screenWidth , _graphics - > _screenHeight ) ;
g_system - > updateScreen ( ) ;
_event - > processInput ( ) ;
uint32 now ;
for ( now = g_system - > getMillis ( ) ; now - _lastWaitTOFTicks < = 0xF ; now = g_system - > getMillis ( ) )
g_system - > delayMillis ( _lastWaitTOFTicks - now + 17 ) ;
_lastWaitTOFTicks = now ;
}
2014-10-06 12:50:05 +00:00
} // End of namespace Lab