diff options
| author | johndoe123 | 2012-10-23 17:04:35 +0000 | 
|---|---|---|
| committer | Willem Jan Palenstijn | 2013-05-08 20:47:35 +0200 | 
| commit | 1993d4165a8d2e3d2b956113b903899e0de4c6fa (patch) | |
| tree | df2dcf5c37fc27564d09de8a2e9932fa1d6b0d84 | |
| parent | 0dd4995af35aac2aabb5c535e6fef3668eedae93 (diff) | |
| download | scummvm-rg350-1993d4165a8d2e3d2b956113b903899e0de4c6fa.tar.gz scummvm-rg350-1993d4165a8d2e3d2b956113b903899e0de4c6fa.tar.bz2 scummvm-rg350-1993d4165a8d2e3d2b956113b903899e0de4c6fa.zip  | |
NEVERHOOD: Clean up Module2200 (like the ones before)
- Rename SceneInfo140 to HallOfRecordsInfo
| -rw-r--r-- | engines/neverhood/gamemodule.cpp | 7 | ||||
| -rw-r--r-- | engines/neverhood/module2200.cpp | 645 | ||||
| -rw-r--r-- | engines/neverhood/module2200.h | 39 | ||||
| -rw-r--r-- | engines/neverhood/staticdata.cpp | 32 | ||||
| -rw-r--r-- | engines/neverhood/staticdata.h | 6 | 
5 files changed, 337 insertions, 392 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp index adf2c49b88..5fec376464 100644 --- a/engines/neverhood/gamemodule.cpp +++ b/engines/neverhood/gamemodule.cpp @@ -307,6 +307,7 @@ void GameModule::startup() {  		setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);  	//setGlobalVar(V_PROJECTOR_LOCATION, 4);  	setGlobalVar(V_KEYDOOR_UNLOCKED, 1); +	setGlobalVar(V_LIGHTS_ON, 1);  	// <<<DEBUG  #if 1 @@ -317,9 +318,9 @@ void GameModule::startup() {  	//DEBUG<<<  	*/ -	_vm->gameState().which = 3; -	_vm->gameState().sceneNum = 0; -	createModule(2100, -1); +	_vm->gameState().which = 2; +	_vm->gameState().sceneNum = 41; +	createModule(2200, -1);  #endif  #if 0  	_vm->gameState().sceneNum = 0; diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp index 102704af2c..8616592c18 100644 --- a/engines/neverhood/module2200.cpp +++ b/engines/neverhood/module2200.cpp @@ -35,11 +35,10 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)  	_vm->_soundMan->addMusic(0x11391412, 0x601C908C);  -	if (which < 0) { +	if (which < 0)  		createScene(_vm->gameState().sceneNum, -1); -	} else { +	else  		createScene(0, 0); -	}  } @@ -48,158 +47,205 @@ Module2200::~Module2200() {  }  void Module2200::createScene(int sceneNum, int which) { -	// CHECKME if this can be used regardless of the new sceneNum -	if (sceneNum == 7 && which >= 0) -		_vm->gameState().which = _vm->gameState().sceneNum;  -	_vm->gameState().sceneNum = sceneNum; -	switch (_vm->gameState().sceneNum) { +	_sceneNum = sceneNum; +	switch (_sceneNum) {  	case 0: +		_vm->gameState().sceneNum = 0;  		_childObject = new Scene2201(_vm, this, which);  		break;  	case 1: +		_vm->gameState().sceneNum = 1;  		_vm->_soundMan->startMusic(0x601C908C, 0, 2);  		_childObject = new Scene2202(_vm, this, which);  		break;  	case 2: +		_vm->gameState().sceneNum = 2;  		_vm->_soundMan->startMusic(0x601C908C, 0, 2);  		_childObject = new Scene2203(_vm, this, which);  		break;  	case 3: +		_vm->gameState().sceneNum = 3;  		_vm->_soundMan->stopMusic(0x601C908C, 0, 2);  		_childObject = new DiskplayerScene(_vm, this, 3);  		break;  	case 4: +		_vm->gameState().sceneNum = 4;  		_vm->_soundMan->stopMusic(0x601C908C, 0, 2);  		_childObject = new Scene2205(_vm, this, which);  		break;  	case 5: +		_vm->gameState().sceneNum = 5;  		_vm->_soundMan->stopMusic(0x601C908C, 0, 2);  		_childObject = new Scene2206(_vm, this, which);  		break;  	case 6: -		_childObject = new Scene2207(_vm, this, which); +		_vm->gameState().sceneNum = 6; +		_childObject = new Scene2207(_vm, this);  		break;  	case 7: +		if (which >= 0) +			_vm->gameState().which = _vm->gameState().sceneNum; +		_vm->gameState().sceneNum = 7;  		_childObject = new Scene2208(_vm, this, which);  		break;  	case 8: +		_vm->gameState().sceneNum = 8;  		_childObject = new Scene2208(_vm, this, which);  		break;  	case 9: +		_vm->gameState().sceneNum = 9;  		createHallOfRecordsScene(which, 0x004B7180);  		break;  	case 10: +		_vm->gameState().sceneNum = 10;  		createHallOfRecordsScene(which, 0x004B7198);  		break;  	case 11: +		_vm->gameState().sceneNum = 11;  		createHallOfRecordsScene(which, 0x004B71B0);  		break;  	case 12: +		_vm->gameState().sceneNum = 12;  		createHallOfRecordsScene(which, 0x004B71C8);  		break;  	case 13: +		_vm->gameState().sceneNum = 13;  		createHallOfRecordsScene(which, 0x004B71E0);  		break;  	case 14: +		_vm->gameState().sceneNum = 14;  		createHallOfRecordsScene(which, 0x004B71F8);  		break;  	case 15: +		_vm->gameState().sceneNum = 15;  		createHallOfRecordsScene(which, 0x004B7210);  		break;  	case 16: +		_vm->gameState().sceneNum = 16;  		createHallOfRecordsScene(which, 0x004B7228);  		break;  	case 17: +		_vm->gameState().sceneNum = 17;  		createHallOfRecordsScene(which, 0x004B7240);  		break;  	case 18: +		_vm->gameState().sceneNum = 18;  		createHallOfRecordsScene(which, 0x004B7258);  		break;  	case 19: +		_vm->gameState().sceneNum = 19;  		createHallOfRecordsScene(which, 0x004B7270);  		break;  	case 20: +		_vm->gameState().sceneNum = 20;  		createHallOfRecordsScene(which, 0x004B7288);  		break;  	case 21: +		_vm->gameState().sceneNum = 21;  		createHallOfRecordsScene(which, 0x004B72A0);  		break;  	case 22: +		_vm->gameState().sceneNum = 22;  		createHallOfRecordsScene(which, 0x004B72B8);  		break;  	case 23: +		_vm->gameState().sceneNum = 23;  		createHallOfRecordsScene(which, 0x004B72D0);  		break;  	case 24: +		_vm->gameState().sceneNum = 24;  		createHallOfRecordsScene(which, 0x004B72E8);  		break;  	case 25: +		_vm->gameState().sceneNum = 25;  		createHallOfRecordsScene(which, 0x004B7300);  		break;  	case 26: +		_vm->gameState().sceneNum = 26;  		createHallOfRecordsScene(which, 0x004B7318);  		break;  	case 27: +		_vm->gameState().sceneNum = 27;  		createHallOfRecordsScene(which, 0x004B7330);  		break;  	case 28: +		_vm->gameState().sceneNum = 28;  		createHallOfRecordsScene(which, 0x004B7348);  		break;  	case 29: +		_vm->gameState().sceneNum = 29;  		createHallOfRecordsScene(which, 0x004B7360);  		break;  	case 30: +		_vm->gameState().sceneNum = 30;  		createHallOfRecordsScene(which, 0x004B7378);  		break;  	case 31: +		_vm->gameState().sceneNum = 31;  		createHallOfRecordsScene(which, 0x004B7390);  		break;  	case 32: +		_vm->gameState().sceneNum = 32;  		createHallOfRecordsScene(which, 0x004B73A8);  		break;  	case 33: +		_vm->gameState().sceneNum = 33;  		createHallOfRecordsScene(which, 0x004B73C0);  		break;  	case 34: +		_vm->gameState().sceneNum = 34;  		createHallOfRecordsScene(which, 0x004B73D8);  		break;  	case 35: +		_vm->gameState().sceneNum = 35;  		createHallOfRecordsScene(which, 0x004B73F0);  		break;  	case 36: +		_vm->gameState().sceneNum = 36;  		createHallOfRecordsScene(which, 0x004B7408);  		break;  	case 37: +		_vm->gameState().sceneNum = 37;  		createHallOfRecordsScene(which, 0x004B7420);  		break;  	case 38: +		_vm->gameState().sceneNum = 38;  		createHallOfRecordsScene(which, 0x004B7438);  		break;  	case 39: +		_vm->gameState().sceneNum = 39;  		createHallOfRecordsScene(which, 0x004B7450);  		break;  	case 40: +		_vm->gameState().sceneNum = 40;  		createHallOfRecordsScene(which, 0x004B7468);  		break;  	case 41: +		_vm->gameState().sceneNum = 41;  		_childObject = new Scene2242(_vm, this, which);  		break;  	case 42: +		_vm->gameState().sceneNum = 42;  		createHallOfRecordsScene(which, 0x004B7480);  		break;  	case 43: +		_vm->gameState().sceneNum = 43;  		createHallOfRecordsScene(which, 0x004B7498);  		break;  	case 44: +		_vm->gameState().sceneNum = 44;  		createHallOfRecordsScene(which, 0x004B74B0);  		break;  	case 45: +		_vm->gameState().sceneNum = 45;  		createHallOfRecordsScene(which, 0x004B74C8);  		break;  	case 46: +		_vm->gameState().sceneNum = 46;  		_childObject = new Scene2247(_vm, this, which);  		break;  	case 47: +		_vm->gameState().sceneNum = 47;  		if (!getGlobalVar(V_WORLDS_JOINED)) {  			if (getGlobalVar(V_LIGHTS_ON))  				createStaticScene(0x83110287, 0x10283839); @@ -222,50 +268,46 @@ void Module2200::createScene(int sceneNum, int which) {  void Module2200::updateScene() {  	if (!updateChild()) { -		switch (_vm->gameState().sceneNum) { +		switch (_sceneNum) {  		case 0: -			if (_moduleResult == 1) { +			if (_moduleResult == 1)  				createScene(2, 0); -			} else if (_moduleResult == 2) { +			else if (_moduleResult == 2)  				createScene(1, 0); -			} else { +			else  				leaveModule(0); -			}  			break;  		case 1:  			createScene(0, 2);  			break;  		case 2: -			if (_moduleResult == 1) { +			if (_moduleResult == 1)  				createScene(4, 0); -			} else if (_moduleResult == 2) { +			else if (_moduleResult == 2)  				createScene(3, 0); -			} else { +			else  				createScene(0, 1); -			}  			break;  		case 3:  			createScene(2, 2);  			break;  		case 4: -			if (_moduleResult == 1) { +			if (_moduleResult == 1)  				createScene(5, 0); -			} else if (_moduleResult == 2) { +			else if (_moduleResult == 2)  				createScene(4, 2); -			} else { +			else  				createScene(2, 1); -			}  			break;  		case 5: -			if (_moduleResult == 1) { +			if (_moduleResult == 1)  				createScene(46, 0); -			} else if (_moduleResult == 2) { +			else if (_moduleResult == 2)  				createScene(6, 0); -			} else if (_moduleResult == 3) { +			else if (_moduleResult == 3)  				createScene(8, 0); -			} else { +			else  				createScene(4, 1); -			}  			break;  		case 6:  			createScene(5, 2); @@ -399,8 +441,8 @@ void Module2200::updateScene() {  #undef HallOfRecordsSceneLink -void Module2200::createHallOfRecordsScene(int which, uint32 sceneInfo140Id) { -	_childObject = new HallOfRecordsScene(_vm, this, which, sceneInfo140Id); +void Module2200::createHallOfRecordsScene(int which, uint32 hallOfRecordsInfoId) { +	_childObject = new HallOfRecordsScene(_vm, this, which, hallOfRecordsInfoId);  }  // Scene2201 @@ -415,15 +457,15 @@ AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)  	SetUpdateHandler(&AnimatedSprite::update);  } -AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1) -	: AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _doorOpen(flag1) { +AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen) +	: AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _isOpen(isOpen) {  	_x = 408;  	_y = 290;	  	createSurface(900, 63, 266);  	SetUpdateHandler(&AsScene2201Door::update);  	SetMessageHandler(&AsScene2201Door::handleMessage); -	if (_doorOpen) { +	if (_isOpen) {  		startAnimation(0xE2CB0412, -1, -1);  		_countdown = 48;  		_newStickFrameIndex = STICK_LAST_FRAME; @@ -435,9 +477,8 @@ AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *  }  void AsScene2201Door::update() { -	if (_countdown != 0 && _doorOpen && (--_countdown == 0)) { +	if (_countdown != 0 && _isOpen && (--_countdown == 0))  		stCloseDoor(); -	}  	AnimatedSprite::update();  } @@ -446,24 +487,24 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,  	switch (messageNum) {  	case 0x100D:  		if (param.asInteger() == 0x11001090) { -			if (_doorOpen) +			if (_isOpen)  				_ssDoorLight->setVisible(true);  		} else if (param.asInteger() == 0x11283090) { -			if (!_doorOpen) +			if (!_isOpen)  				_ssDoorLight->setVisible(false);  		}  		break;  	case 0x2000: -		if (_doorOpen) +		if (_isOpen)  			_countdown = 144; -		messageResult = _doorOpen ? 1 : 0; +		messageResult = _isOpen ? 1 : 0;  		break;  	case 0x3002:  		gotoNextState();  		break;  	case 0x4808:  		_countdown = 144; -		if (!_doorOpen) +		if (!_isOpen)  			stOpenDoor();  		break;  	} @@ -471,14 +512,14 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam ¶m,  }  void AsScene2201Door::stOpenDoor() { -	_doorOpen = true; +	_isOpen = true;  	startAnimation(0xE2CB0412, 0, -1);  	_newStickFrameIndex = STICK_LAST_FRAME;  	playSound(0, calcHash("fxDoorOpen33"));  }  void AsScene2201Door::stCloseDoor() { -	_doorOpen = false; +	_isOpen = false;  	startAnimation(0xE2CB0412, -1, -1);  	_playBackwards = true;  	_newStickFrameIndex = 0; @@ -507,14 +548,12 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)  	loadDataResource(0x04104242);  	loadHitRectList(); -  	setBackground(0x40008208);  	setPalette(0x40008208);  	insertMouse433(0x0820C408);  	_asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);  	_vm->_collisionMan->addSprite(_asTape);  -  	_ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);  	for (uint32 cubeIndex = 0; cubeIndex < 9; cubeIndex++) @@ -526,42 +565,40 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)  	_clipRects[1].x2 = 640;  	_clipRects[1].y2 = 480; -	if (!getGlobalVar(V_TILE_PUZZLE_SOLVED)) { +	if (!getGlobalVar(V_TILE_PUZZLE_SOLVED))  		insertStaticSprite(0x00026027, 900); -	}  	tempSprite = insertStaticSprite(0x030326A0, 1100);  	_clipRects[0].x1 = tempSprite->getDrawRect().x; -	  	insertStaticSprite(0x811DA061, 1100); -  	tempSprite = insertStaticSprite(0x11180022, 1100);  	_clipRects[1].x1 = tempSprite->getDrawRect().x; -  	tempSprite = insertStaticSprite(0x0D411130, 1100);  	_clipRects[0].y2 = tempSprite->getDrawRect().y2();  	_clipRects[1].y1 = tempSprite->getDrawRect().y2(); -	  	_ssDoorLight = insertStaticSprite(0xA4062212, 900);  	if (which < 0) { +		// Restoring game  		insertKlayman<KmScene2201>(300, 427, _clipRects, 2);  		setMessageList(0x004B8118);  		_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);  	} else if (which == 1) { +		// Klaymen entering from the back  		insertKlayman<KmScene2201>(412, 393, _clipRects, 2);  		setMessageList(0x004B8130);  		_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);  	} else if (which == 2) { +		// Klaymen returning from the puzzle  		if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {  			insertKlayman<KmScene2201>(379, 427, _clipRects, 2);  			_klayman->setDoDeltaX(1); -		} else { +		} else  			insertKlayman<KmScene2201>(261, 427, _clipRects, 2); -		}  		setMessageList(0x004B8178);  		_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);  	} else { +		// Klaymen entering from the left  		NPoint pt = _dataResource.getPoint(0x0304D8DC);  		insertKlayman<KmScene2201>(pt.x, pt.y, _clipRects, 2);  		setMessageList(0x004B8120); @@ -591,34 +628,30 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit  	Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x100D: -		if (param.asInteger() == 0x402064D8) { +		if (param.asInteger() == 0x402064D8)  			sendEntityMessage(_klayman, 0x1014, _ssDoorButton); -		} else if (param.asInteger() == 0x35803198) { -			if (sendMessage(_asDoor, 0x2000, 0)) { +		else if (param.asInteger() == 0x35803198) { +			if (sendMessage(_asDoor, 0x2000, 0))  				setMessageList(0x004B81A0); -			} else { +			else  				setMessageList(0x004B81B8); -			}   		} else if (param.asInteger() == 0x51445010) { -			if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) { +			if (getGlobalVar(V_TILE_PUZZLE_SOLVED))  				setMessageList(0x004B8108); -			} else { +			else  				setMessageList(0x004B8150); -			} -		} else if (param.asInteger() == 0x1D203082) { +		} else if (param.asInteger() == 0x1D203082)  			setMessageList(0x004B8180); -		} else if (param.asInteger() == 0x00049091) { -			if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) { +		else if (param.asInteger() == 0x00049091) { +			if (getGlobalVar(V_TILE_PUZZLE_SOLVED))  				setMessageList(0x004B8138); -			} else { +			else  				setMessageList(0x004B8108); -			}  		}  		break;  	case 0x480B: -		if (sender == _ssDoorButton) { +		if (sender == _ssDoorButton)  			sendMessage(_asDoor, 0x4808, 0); -		}  		break;  	case 0x4826:  		if (sender == _asTape) { @@ -630,82 +663,65 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit  	return 0;  } -static const NPoint kSsScene2202PuzzleTilePoints[] = { -	{196, 105}, -	{323, 102}, -	{445, 106}, -	{192, 216}, -	{319, 220}, -	{446, 216}, -	{188, 320}, -	{319, 319}, -	{443, 322} +static const NPoint kSsScene2202PuzzleCubePoints[] = { +	{196, 105}, {323, 102}, {445, 106}, +	{192, 216}, {319, 220}, {446, 216}, +	{188, 320}, {319, 319}, {443, 322}  }; -static const uint32 kSsScene2202PuzzleTileFileHashes1[] = { -	0xA500800C, -	0x2182910C, -	0x2323980C, -	0x23049084, -	0x21008080, -	0x2303900C, -	0x6120980C, -	0x2504D808 +static const uint32 kSsScene2202PuzzleCubeFileHashes1[] = { +	0xA500800C, 0x2182910C, 0x2323980C, +	0x23049084, 0x21008080, 0x2303900C, +	0x6120980C, 0x2504D808  }; -static const uint32 kSsScene2202PuzzleTileFileHashes2[] = { -	0x0AAD8080, -	0x0A290291, -	0x0A2BA398, -	0x822B8490, -	0x86298080, -	0x0A2B8390, -	0x0A69A098, -	0x0E2D84D8 +static const uint32 kSsScene2202PuzzleCubeFileHashes2[] = { +	0x0AAD8080, 0x0A290291, 0x0A2BA398, +	0x822B8490, 0x86298080, 0x0A2B8390, +	0x0A69A098, 0x0E2D84D8  }; -SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value) -	: StaticSprite(vm, 900), _parentScene(parentScene), _value(value), _tileIndex(tileIndex), _isMoving(false) { +SsScene2202PuzzleCube::SsScene2202PuzzleCube(NeverhoodEngine *vm, Scene *parentScene, int16 cubePosition, int16 cubeSymbol) +	: StaticSprite(vm, 900), _parentScene(parentScene), _cubeSymbol(cubeSymbol), _cubePosition(cubePosition), _isMoving(false) {  	int surfacePriority;	 -	SetUpdateHandler(&SsScene2202PuzzleTile::update); -	SetMessageHandler(&SsScene2202PuzzleTile::handleMessage); -	if (_tileIndex >= 0 && _tileIndex <= 2) +	SetUpdateHandler(&SsScene2202PuzzleCube::update); +	SetMessageHandler(&SsScene2202PuzzleCube::handleMessage); +	if (_cubePosition >= 0 && _cubePosition <= 2)  		surfacePriority = 100; -	else if (_tileIndex >= 3 && _tileIndex <= 5) +	else if (_cubePosition >= 3 && _cubePosition <= 5)  		surfacePriority = 300;  	else  		surfacePriority = 500; -	loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0, -		kSsScene2202PuzzleTilePoints[_tileIndex].x, kSsScene2202PuzzleTilePoints[_tileIndex].y); +	loadSprite(kSsScene2202PuzzleCubeFileHashes2[_cubeSymbol], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0, +		kSsScene2202PuzzleCubePoints[_cubePosition].x, kSsScene2202PuzzleCubePoints[_cubePosition].y);  	loadSound(0, 0x40958621);  	loadSound(1, 0x51108241);  } -void SsScene2202PuzzleTile::update() { +void SsScene2202PuzzleCube::update() {  	handleSpriteUpdate();  	updatePosition();  } -uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { +uint32 SsScene2202PuzzleCube::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {  	uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x1011: -		if (!_isMoving && !getGlobalVar(V_TILE_PUZZLE_SOLVED)) { -			sendMessage(_parentScene, 0x2000, _tileIndex); -		} +		if (!_isMoving && !getGlobalVar(V_TILE_PUZZLE_SOLVED)) +			sendMessage(_parentScene, 0x2000, _cubePosition);  		messageResult = 1;  		break;  	case 0x2001:  		_isMoving = true; -		moveTile(param.asInteger()); +		moveCube(param.asInteger());  		break;  	}  	return messageResult;  } -void SsScene2202PuzzleTile::suMoveTileX() { +void SsScene2202PuzzleCube::suMoveCubeX() {  	bool done = false; @@ -732,15 +748,14 @@ void SsScene2202PuzzleTile::suMoveTileX() {  			_counterDirection = true;  	} -	if (done) { +	if (done)  		stopMoving();			 -	}  	updateBounds();  } -void SsScene2202PuzzleTile::suMoveTileY() { +void SsScene2202PuzzleCube::suMoveCubeY() {  	bool done = false; @@ -767,29 +782,26 @@ void SsScene2202PuzzleTile::suMoveTileY() {  			_counterDirection = true;  	} -	if (done) { +	if (done)  		stopMoving();			 -	}  	updateBounds();  } -void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) { +void SsScene2202PuzzleCube::moveCube(int16 newCubePosition) { -	loadSprite(kSsScene2202PuzzleTileFileHashes1[_value], kSLFCenteredDrawOffset); +	loadSprite(kSsScene2202PuzzleCubeFileHashes1[_cubeSymbol], kSLFCenteredDrawOffset); -	setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1); -	setSubVar(VA_CUBE_POSITIONS, newTileIndex, (uint32)_value); -	 -	_tileIndex = newTileIndex; +	setSubVar(VA_CUBE_POSITIONS, _cubePosition, (uint32)-1); +	setSubVar(VA_CUBE_POSITIONS, newCubePosition, (uint32)_cubeSymbol); +	_cubePosition = newCubePosition;  	_errValue = 0;  	_counterDirection = false;  	_counter = 0; - -	_newX = kSsScene2202PuzzleTilePoints[newTileIndex].x; -	_newY = kSsScene2202PuzzleTilePoints[newTileIndex].y; +	_newX = kSsScene2202PuzzleCubePoints[newCubePosition].x; +	_newY = kSsScene2202PuzzleCubePoints[newCubePosition].y;  	if (_x == _newX && _y == _newY)  		return; @@ -821,7 +833,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {  	}  	if (_xDelta > _yDelta) { -		SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileX); +		SetSpriteUpdate(&SsScene2202PuzzleCube::suMoveCubeX);  		if (_xIncr > 0) {  			if (_newX - _x >= 180)  				_xFlagPos = _newX - 90; @@ -835,7 +847,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {  		}  		playSound(0);  	} else { -		SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileY); +		SetSpriteUpdate(&SsScene2202PuzzleCube::suMoveCubeY);  		if (_yIncr > 0) {  			if (_newY - _y >= 180)  				_xFlagPos = _newY - 90; @@ -852,16 +864,16 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {  } -void SsScene2202PuzzleTile::stopMoving() { -	loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset); +void SsScene2202PuzzleCube::stopMoving() { +	loadSprite(kSsScene2202PuzzleCubeFileHashes2[_cubeSymbol], kSLFCenteredDrawOffset);  	SetSpriteUpdate(NULL);  	_isMoving = false; -	sendMessage(_parentScene, 0x2002, _tileIndex); +	sendMessage(_parentScene, 0x2002, _cubePosition);  }  Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which) -	: Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isTileMoving(false), -	_ssMovingTile(NULL), _ssDoneMovingTile(NULL) { +	: Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isCubeMoving(false), +	_ssMovingCube(NULL), _ssDoneMovingCube(NULL) {  	// TODO initScene2201Vars();  	SetMessageHandler(&Scene2202::handleMessage); @@ -872,11 +884,11 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)  	addEntity(_palette);  	insertMouse435(0x00A08089, 20, 620); -	for (uint32 index = 0; index < 9; index++) { -		int16 value = (int16)getSubVar(VA_CUBE_POSITIONS, index); -		if (value >= 0) { -			Sprite *puzzleTileSprite = insertSprite<SsScene2202PuzzleTile>(this, index, value); -			_vm->_collisionMan->addSprite(puzzleTileSprite); +	for (uint32 cubePosition = 0; cubePosition < 9; cubePosition++) { +		int16 cubeSymbol = (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition); +		if (cubeSymbol >= 0) { +			Sprite *puzzleCubeSprite = insertSprite<SsScene2202PuzzleCube>(this, cubePosition, cubeSymbol); +			_vm->_collisionMan->addSprite(puzzleCubeSprite);  		}  	} @@ -899,9 +911,8 @@ Scene2202::~Scene2202() {  void Scene2202::update() {  	Scene::update(); -	if (_leaveScene && !isSoundPlaying(1)) { +	if (_leaveScene && !isSoundPlaying(1))  		leaveScene(0); -	}  	if (_isSolved && !isSoundPlaying(0)) {  		playSound(1); @@ -909,19 +920,19 @@ void Scene2202::update() {  		_leaveScene = true;  	} -	if (_ssMovingTile && !_isTileMoving) { -		int16 freeTileIndex = getFreeTileIndex(_movingTileIndex); -		if (freeTileIndex != -1) { -			setSurfacePriority(_ssMovingTile->getSurface(), 700); -			sendMessage(_ssMovingTile, 0x2001, freeTileIndex); -			_ssMovingTile = NULL; -			_isTileMoving = true; +	if (_ssMovingCube && !_isCubeMoving) { +		int16 freeCubePosition = getFreeCubePosition(_movingCubePosition); +		if (freeCubePosition != -1) { +			setSurfacePriority(_ssMovingCube->getSurface(), 700); +			sendMessage(_ssMovingCube, 0x2001, freeCubePosition); +			_ssMovingCube = NULL; +			_isCubeMoving = true;  		}  	} -	if (_ssDoneMovingTile) { -		setSurfacePriority(_ssDoneMovingTile->getSurface(), _surfacePriority); -		_ssDoneMovingTile = NULL; +	if (_ssDoneMovingCube) { +		setSurfacePriority(_ssDoneMovingCube->getSurface(), _surfacePriority); +		_ssDoneMovingCube = NULL;  		if (testIsSolved()) {  			playSound(0);  			setGlobalVar(V_TILE_PUZZLE_SOLVED, 1); @@ -935,39 +946,37 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam ¶m, Entit  	Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x0001: -		if (param.asPoint().x <= 20 || param.asPoint().x >= 620) { +		if (param.asPoint().x <= 20 || param.asPoint().x >= 620)  			leaveScene(0); -		}  		break;  	case 0x2000: -		_movingTileIndex = (int16)param.asInteger(); -		_ssMovingTile = (Sprite*)sender; +		_movingCubePosition = (int16)param.asInteger(); +		_ssMovingCube = (Sprite*)sender;  		break;  	case 0x2002: -		_isTileMoving = false; -		_ssDoneMovingTile = (Sprite*)sender; -		if (param.asInteger() <= 2) { +		_isCubeMoving = false; +		_ssDoneMovingCube = (Sprite*)sender; +		if (param.asInteger() <= 2)  			_surfacePriority = 100; -		} else if (param.asInteger() >= 3 && param.asInteger() <= 5) { +		else if (param.asInteger() >= 3 && param.asInteger() <= 5)  			_surfacePriority = 300; -		} else { +		else  			_surfacePriority = 500; -		}  		break;  	}  	return 0;  } -int16 Scene2202::getFreeTileIndex(int16 index) { -	if (index >= 3 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 3) == -1) { -		return index - 3; -	} else if (index <= 5 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 3) == -1) { -		return index + 3; -	} else if (index != 0 && index != 3 && index != 6 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 1) == -1) { -		return index - 1; -	} else if (index != 2 && index != 5 && index != 8 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 1) == -1) { -		return index + 1; -	} else +int16 Scene2202::getFreeCubePosition(int16 cubePosition) { +	if (cubePosition >= 3 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition - 3) == -1) +		return cubePosition - 3; +	else if (cubePosition <= 5 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition + 3) == -1) +		return cubePosition + 3; +	else if (cubePosition != 0 && cubePosition != 3 && cubePosition != 6 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition - 1) == -1) +		return cubePosition - 1; +	else if (cubePosition != 2 && cubePosition != 5 && cubePosition != 8 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition + 1) == -1) +		return cubePosition + 1; +	else  		return -1;  } @@ -1087,8 +1096,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)  	setBackground(0x82C80334);  	setPalette(0x82C80334);  	insertMouse433(0x80330824); -  	setHitRects(0x004B8320); +	setRectList(0x004B8420);  	if (getGlobalVar(V_KEY3_LOCATION) == 1) {  		_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432); @@ -1097,37 +1106,35 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)  	_asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);  	_vm->_collisionMan->addSprite(_asTape); -  	_asLeftDoor = insertSprite<AsScene2203Door>(this, 0);  	_asRightDoor = insertSprite<AsScene2203Door>(this, 1); -	  	_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);  	_ssSmallRightDoor = insertStaticSprite(0x0A2C0432, 1100); -	  	_leftDoorClipRect.set(_ssSmallLeftDoor->getDrawRect().x, 0, 640, 480);  	_rightDoorClipRect.set(0, 0, _ssSmallRightDoor->getDrawRect().x2(), 480); -  	sendEntityMessage(_asLeftDoor, 0x2000, _asRightDoor);  	sendEntityMessage(_asRightDoor, 0x2000, _asLeftDoor); -	  	_vm->_collisionMan->addSprite(_asLeftDoor);  	_vm->_collisionMan->addSprite(_asRightDoor);  	if (which < 0) { +		// Restoring game  		insertKlayman<KmScene2203>(200, 427);  		setMessageList(0x004B8340);  	} else if (which == 1) { +		// Klaymen entering from the right  		insertKlayman<KmScene2203>(640, 427);  		setMessageList(0x004B8350);  	} else if (which == 2) { +		// Klaymen returning from the displayer  		if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {  			insertKlayman<KmScene2203>(362, 427);  			_klayman->setDoDeltaX(1); -		} else { +		} else  			insertKlayman<KmScene2203>(202, 427); -		}  		setMessageList(0x004B8358);  	} else { +		// Klaymen entering from the left  		insertKlayman<KmScene2203>(0, 427);  		setMessageList(0x004B8348);  	} @@ -1140,8 +1147,6 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)  		_klayman->setClipRect(_leftDoorClipRect);  	} -	setRectList(0x004B8420); -  }  Scene2203::~Scene2203() { @@ -1153,25 +1158,22 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit  	switch (messageNum) {  	case 0x2001:  		sendEntityMessage(_klayman, 0x1014, sender); -		if (sender == _asLeftDoor) { +		if (sender == _asLeftDoor)  			setMessageList2(0x004B83B0); -		} else { +		else  			setMessageList2(0x004B83C8); -		}  		break;  	case 0x2002: -		if (sender == _asLeftDoor) { +		if (sender == _asLeftDoor)  			setMessageList2(0x004B8370); -		} else { +		else  			setMessageList2(0x004B8360); -		}  		break;  	case 0x2003: -		if (sender == _asLeftDoor) { +		if (sender == _asLeftDoor)  			_ssSmallLeftDoor->setVisible(false); -		} else { +		else  			_ssSmallRightDoor->setVisible(false); -		}  		break;  	case 0x4808:  		if (sender == _asLeftDoor) { @@ -1220,7 +1222,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)  	SetUpdateHandler(&Scene2205::update);  	setHitRects(0x004B0620); - +	loadDataResource(0x00144822);  	if (getGlobalVar(V_LIGHTS_ON)) {  		_isLightOn = true;  		setBackground(0x0008028D); @@ -1236,41 +1238,36 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)  		insertMouse433(0xA0289D08);  		_ssLightSwitch = insertSprite<SsCommonPressButton>(this, 0x2D339030, 0xDAC86E84, 100, 0);  	} -  	_palette->addBasePalette(0xD00A028D, 0, 256, 0); -	  	_ssDoorFrame = insertSprite<SsScene2205DoorFrame>();  	if (which < 0) { +		// Restoring game  		insertKlayman<KmScene2205>(320, 417);  		setMessageList(0x004B0658); -		if (!getGlobalVar(V_LIGHTS_ON)) { +		if (!getGlobalVar(V_LIGHTS_ON))  			_palette->addPalette(0x68033B1C, 0, 65, 0); -		}  		_isKlaymanInLight = false;  	} else if (which == 1) { +		// Klaymen entering from the right  		insertKlayman<KmScene2205>(640, 417);  		setMessageList(0x004B0648); -		if (!getGlobalVar(V_LIGHTS_ON)) { +		if (!getGlobalVar(V_LIGHTS_ON))  			_palette->addPalette(0x68033B1C, 0, 65, 0); -		}  		_isKlaymanInLight = false;  	} else { +		// Klaymen entering from the left  		insertKlayman<KmScene2205>(0, 417);  		setMessageList(0x004B0640);  		_isKlaymanInLight = true;  	}  	_klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 640, 480); - -	loadDataResource(0x00144822);  	_klayman->setSoundFlag(true); -  }  void Scene2205::update() {  	Scene::update(); -  	if (!_isLightOn && getGlobalVar(V_LIGHTS_ON)) {  		_palette->addPalette(0x0008028D, 0, 256, 0);  		changeBackground(0x0008028D); @@ -1291,7 +1288,6 @@ void Scene2205::update() {  		}  		_isLightOn = false;  	} -  	if (!getGlobalVar(V_LIGHTS_ON)) {  		if (_isKlaymanInLight && _klayman->getX() > 85) {  			_palette->addBasePalette(0x68033B1C, 0, 65, 0); @@ -1303,20 +1299,18 @@ void Scene2205::update() {  			_isKlaymanInLight = true;  		}  	} -	  }  uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) {  	Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x100D: -		if (param.asInteger() == 0x6449569A) { +		if (param.asInteger() == 0x6449569A)  			setMessageList(0x004B0690); -		} else if (param.asInteger() == 0x2841369C) { +		else if (param.asInteger() == 0x2841369C)  			setMessageList(0x004B0630); -		} else if (param.asInteger() == 0x402064D8) { +		else if (param.asInteger() == 0x402064D8)  			sendEntityMessage(_klayman, 0x1014, _ssLightSwitch); -		}  		break;  	case 0x480B:  		setGlobalVar(V_LIGHTS_ON, getGlobalVar(V_LIGHTS_ON) ? 0 : 1); @@ -1326,21 +1320,15 @@ uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entit  }  static const int16 kScene2206XPositions[] = { -	384,  -	480,  -	572 +	384, 480, 572  };  static const uint32 kScene2206MessageIds1[] = { -	0x004B8998, -	0x004B89B8, -	0x004B89D8 +	0x004B8998, 0x004B89B8, 0x004B89D8  };  static const uint32 kScene2206MessageIds2[] = { -	0x004B89F8, -	0x004B8A20, -	0x004B8A48 +	0x004B89F8, 0x004B8A20, 0x004B8A48  };  static const int16 kAsScene2206DoorSpikesXDeltasOpen[] = { @@ -1371,15 +1359,15 @@ uint32 AsScene2206DoorSpikes::handleMessage(int messageNum, const MessageParam &  	switch (messageNum) {  	case 0x4808:  		_deltaIndex = 0; +		playSound(0, 0x032746E0);  		SetMessageHandler(NULL);  		SetSpriteUpdate(&AsScene2206DoorSpikes::suOpen); -		playSound(0, 0x032746E0);  		break;  	case 0x4809:  		_deltaIndex = 0; +		playSound(0, 0x002642C0);  		SetMessageHandler(NULL);  		SetSpriteUpdate(&AsScene2206DoorSpikes::suClose); -		playSound(0, 0x002642C0);  		break;  	}  	return messageResult; @@ -1422,9 +1410,9 @@ uint32 AsScene2206Platform::handleMessage(int messageNum, const MessageParam &pa  	uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x4803: +		_yDelta = 0;  		SetMessageHandler(NULL);  		SetSpriteUpdate(&AsScene2206Platform::suMoveDown); -		_yDelta = 0;  		break;  	}  	return messageResult; @@ -1441,9 +1429,8 @@ SsScene2206TestTube::SsScene2206TestTube(NeverhoodEngine *vm, Scene *parentScene  	if (getGlobalVar(V_HAS_TEST_TUBE)) {  		setVisible(false);  		SetMessageHandler(NULL); -	} else { +	} else  		SetMessageHandler(&SsScene2206TestTube::handleMessage); -	}  	_collisionBoundsOffset = _drawOffset;  	updateBounds();  } @@ -1499,38 +1486,37 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)  	}  	_asPlatform->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2()); -  	setBackground(fileHash); -  	setPalette(fileHash);  	addEntity(_palette); -  	_palette->addBasePalette(fileHash, 0, 256, 0); - -	if (!getGlobalVar(V_LIGHTS_ON)) { +	if (!getGlobalVar(V_LIGHTS_ON))  		_palette->addPalette(0x0263D144, 0, 65, 0); -	} -	  	_vm->_collisionMan->addSprite(_ssTestTube);  	if (which < 0) { +		// Restoring game  		insertKlayman<KmScene2206>(200, 430);  		setMessageList(0x004B88A8);  	} else if (which == 1) { +		// Klaymen entering from the right  		insertKlayman<KmScene2206>(640, 430);  		setMessageList(0x004B88B8);  	} else if (which == 2) { +		// Klaymen entering from the back  		insertKlayman<KmScene2206>(205, 396);  		setMessageList(0x004B88C8);  		_palette->addPalette(getGlobalVar(V_LIGHTS_ON) ? 0xB103B604 : 0x0263D144, 0, 65, 0);  		klaymanBehindSpikes();  		playSound(0, 0x53B8284A);  	} else if (which == 3) { +		// Klaymen entering from reading a text column  		insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)], 430);  		if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))  			_klayman->setDoDeltaX(1);  		setMessageList(0x004B8A70);  	} else { +		// Klaymen entering from the left  		insertKlayman<KmScene2206>(0, 430);  		setMessageList(0x004B88B0);  	} @@ -1548,11 +1534,11 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit  	uint32 messageResult = Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x100D: -		if (param.asInteger() == 0x800C6694) { +		if (param.asInteger() == 0x800C6694)  			readClickedColumn(); -		} else if (param.asInteger() == 0x402064D8) { +		else if (param.asInteger() == 0x402064D8)  			sendEntityMessage(_klayman, 0x1014, _ssButton); -		} else if (param.asInteger() == 0x11C40840) { +		else if (param.asInteger() == 0x11C40840) {  			if (getGlobalVar(V_SPIKES_RETRACTED))  				setMessageList(0x004B8948);  			else @@ -1616,26 +1602,17 @@ void Scene2206::readClickedColumn() {  	setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 183) / 7);  	setGlobalVar(V_COLUMN_TEXT_NAME, calcHash("stLineagex"));  	setGlobalVar(V_COLUMN_BACK_NAME, 0); -	if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144) { +	if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144)  		setMessageList2(kScene2206MessageIds1[getGlobalVar(V_CLICKED_COLUMN_INDEX)]); -	} else { +	else  		setMessageList2(kScene2206MessageIds2[getGlobalVar(V_CLICKED_COLUMN_INDEX)]); -	}  }  static const uint32 kScene2207FileHashes[] = { -	0x33B1E12E, -	0x33D1E12E, -	0x3311E12E, -	0x3291E12E, -	0x3191E12E, -	0x3791E12E, -	0x3B91E12E, -	0x2391E12E, -	0x1391E12E, -	0x3BB1E12E, -	0x23B1E12E, -	0x13B1E12E +	0x33B1E12E, 0x33D1E12E, 0x3311E12E, +	0x3291E12E, 0x3191E12E, 0x3791E12E, +	0x3B91E12E, 0x2391E12E, 0x1391E12E, +	0x3BB1E12E, 0x23B1E12E, 0x13B1E12E  };  AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene) @@ -1650,10 +1627,10 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene  	_y = pt.y;  	createSurface(1100, 129, 103);  	startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, 0, 0); +	_newStickFrameIndex = 0;  	SetUpdateHandler(&AsScene2207Elevator::update); -	SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);  	SetMessageHandler(&AsScene2207Elevator::handleMessage); -	_newStickFrameIndex = 0; +	SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);  }  AsScene2207Elevator::~AsScene2207Elevator() { @@ -1667,9 +1644,9 @@ void AsScene2207Elevator::update() {  		startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);  		_newStickFrameIndex = _pointIndex;		  		if (_destPointIndex + _destPointIndexDelta == _pointIndex) { -			if (_destPointIndexDelta != 0) { +			if (_destPointIndexDelta != 0)  				_destPointIndexDelta = 0; -			} else { +			else {  				_vm->_soundMan->deleteSound(0xD3B02847);  				playSound(0, 0x53B8284A);  			} @@ -1683,20 +1660,19 @@ void AsScene2207Elevator::update() {  		startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);  		_newStickFrameIndex = _pointIndex;		  		if (_destPointIndex + _destPointIndexDelta == _pointIndex) { -			if (_destPointIndexDelta != 0) { +			if (_destPointIndexDelta != 0)  				_destPointIndexDelta = 0; -			} else { +			else {  				_vm->_soundMan->deleteSound(0xD3B02847);  				playSound(0, 0x53B8284A);  			}  		}  	} -	if (_pointIndex > 20 && _surface->getPriority() != 900) { +	if (_pointIndex > 20 && _surface->getPriority() != 900)  		sendMessage(_parentScene, 0x2002, 900); -	} else if (_pointIndex < 20 && _surface->getPriority() != 1100) { +	else if (_pointIndex < 20 && _surface->getPriority() != 1100)  		sendMessage(_parentScene, 0x2002, 1100); -	}  	AnimatedSprite::update(); @@ -1738,13 +1714,12 @@ void AsScene2207Elevator::moveToY(int16 y) {  	}	  	if (_destPointIndex != _pointIndex) { -		if (_destPointIndex == 0 || _destPointIndex == (int)_pointArray->size() - 1) { +		if (_destPointIndex == 0 || _destPointIndex == (int)_pointArray->size() - 1)  			_destPointIndexDelta = 0; -		} else if (_destPointIndex < _pointIndex) { +		else if (_destPointIndex < _pointIndex)  			_destPointIndexDelta = -2; -		} else { +		else  			_destPointIndexDelta = 2; -		}  		_vm->_soundMan->addSound(0x02700413, 0xD3B02847);  		_vm->_soundMan->playSoundLooping(0xD3B02847);  	} @@ -1756,14 +1731,14 @@ void AsScene2207Elevator::moveToY(int16 y) {  AsScene2207Lever::AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int doDeltaX)  	: AnimatedSprite(vm, 1100), _parentScene(parentScene) { -	SetUpdateHandler(&AnimatedSprite::update); -	SetMessageHandler(&AsScene2207Lever::handleMessage); +	_x = x; +	_y = y;  	createSurface(1010, 71, 73);  	setDoDeltaX(doDeltaX);  	startAnimation(0x80880090, 0, -1);  	_newStickFrameIndex = 0; -	_x = x; -	_y = y; +	SetUpdateHandler(&AnimatedSprite::update); +	SetMessageHandler(&AsScene2207Lever::handleMessage);  }  uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1795,8 +1770,8 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam ¶m  void AsScene2207Lever::stLeverDown() {  	startAnimation(0x80880090, 1, -1); -	FinalizeState(&AsScene2207Lever::stLeverDownEvent);  	playSound(0, 0x40581882); +	FinalizeState(&AsScene2207Lever::stLeverDownEvent);  }  void AsScene2207Lever::stLeverDownEvent() { @@ -1805,9 +1780,9 @@ void AsScene2207Lever::stLeverDownEvent() {  void AsScene2207Lever::stLeverUp() {  	startAnimation(0x80880090, 6, -1); -	FinalizeState(&AsScene2207Lever::stLeverUpEvent);  	_playBackwards = true;  	playSound(0, 0x40581882); +	FinalizeState(&AsScene2207Lever::stLeverUpEvent);  }  void AsScene2207Lever::stLeverUpEvent() { @@ -1817,16 +1792,16 @@ void AsScene2207Lever::stLeverUpEvent() {  AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene)  	: AnimatedSprite(vm, 1200), _idle(true) { -	SetUpdateHandler(&AnimatedSprite::update); -	SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage); -	createSurface1(0xCCFD6090, 100);  	_x = 309;  	_y = 320; +	createSurface1(0xCCFD6090, 100);  	startAnimation(0xCCFD6090, 0, -1);  	_newStickFrameIndex = 0;  	loadSound(1, 0x40330872);  	loadSound(2, 0x72A2914A);  	loadSound(3, 0xD4226080); +	SetUpdateHandler(&AnimatedSprite::update); +	SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage);  }  AsScene2207WallRobotAnimation::~AsScene2207WallRobotAnimation() { @@ -1847,15 +1822,14 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag  				stopSound(2);  				stopSound(3);  				_vm->_soundMan->deleteSound(0x12121943); -			} else if (param.asInteger() == 0x3A980501) { +			} else if (param.asInteger() == 0x3A980501)  				playSound(1); -			} else if (param.asInteger() == 0x2A2AD498) { +			else if (param.asInteger() == 0x2A2AD498)  				playSound(2); -			} else if (param.asInteger() == 0xC4980008) { +			else if (param.asInteger() == 0xC4980008)  				playSound(3); -			} else if (param.asInteger() == 0x06B84228) { +			else if (param.asInteger() == 0x06B84228)  				playSound(0, 0xE0702146); -			}  		}  		break;  	case 0x2006: @@ -1899,13 +1873,13 @@ void AsScene2207WallRobotAnimation::cbStopAnimation() {  AsScene2207WallCannonAnimation::AsScene2207WallCannonAnimation(NeverhoodEngine *vm)  	: AnimatedSprite(vm, 1200), _idle(true) { -	SetUpdateHandler(&AnimatedSprite::update); -	SetMessageHandler(&AsScene2207WallCannonAnimation::handleMessage); -	createSurface1(0x8CAA0099, 100);  	_x = 309;  	_y = 320; +	createSurface1(0x8CAA0099, 100);  	startAnimation(0x8CAA0099, 0, -1);  	_newStickFrameIndex = 0; +	SetUpdateHandler(&AnimatedSprite::update); +	SetMessageHandler(&AsScene2207WallCannonAnimation::handleMessage);  }  uint32 AsScene2207WallCannonAnimation::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1952,7 +1926,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i  	updatePosition();	  } -Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which) +Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule)  	: Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {  	_vm->gameModule()->initCannonSymbolsPuzzle(); @@ -1965,66 +1939,47 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)  	insertKlayman<KmScene2207>(0, 0);  	_klayman->setRepl(64, 0); -	  	setMessageList(0x004B38E8); -	  	_asElevator = insertSprite<AsScene2207Elevator>(this);  	if (getGlobalVar(V_LIGHTS_ON)) { -  		setBackground(0x88C00241);  		setPalette(0x88C00241);  		insertMouse433(0x00245884); -	  		_ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200);  		_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);  		_ssMaskPart3 = insertStaticSprite(0x0043B038, 1100); -	  		_asTape = insertSprite<AsScene1201Tape>(this, 4, 1100, 277, 428, 0x9148A011);  		_vm->_collisionMan->addSprite(_asTape);  -	  		_asLever = insertSprite<AsScene2207Lever>(this, 527, 333, 0);  		_vm->_collisionMan->addSprite(_asLever); -		  		_asWallRobotAnimation = insertSprite<AsScene2207WallRobotAnimation>(this);  		_asWallCannonAnimation = insertSprite<AsScene2207WallCannonAnimation>(); -		  		_asWallRobotAnimation->setVisible(false);  		_asWallCannonAnimation->setVisible(false); -  		_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x2C4061C4, 100, 0); -	  		_asLever->setClipRect(0, 0, _ssMaskPart3->getDrawRect().x2(), 480);  		_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());  		_asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2()); -	  	} else { -  		setGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT, 1); -  		setBackground(0x05C02A55);  		setPalette(0x05C02A55);  		insertMouse433(0x02A51054); -  		_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200); -  		insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 0)], 0);  		insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 1)], 1);  		insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 2)], 2); -  		_asTape = NULL;  		_asLever = NULL;  		_asWallRobotAnimation = NULL;  		_asWallCannonAnimation = NULL;  		_ssButton = NULL; -  		_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480);  		_asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480); -  	}  	_dataResource.load(0x00524846); -  	setRectList(0x004B38B8);  	sendEntityMessage(_klayman, 0x1014, _asElevator); @@ -2041,9 +1996,8 @@ void Scene2207::update() {  		setSurfacePriority(_asElevator->getSurface(), _elevatorSurfacePriority);  		_elevatorSurfacePriority = 0;  	} -	if (_klayman->getY() == 423) { +	if (_klayman->getY() == 423)  		_klaymanAtElevator = _klayman->getX() > 459 && _klayman->getX() < 525; -	}  }  uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -2055,38 +2009,34 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit  				sendMessage(_asElevator, 0x2000, _mouseClickPos.y);  				sendEntityMessage(_klayman, 0x1014, _asElevator);  				sendMessage(_klayman, 0x2001, 0); -			} else { +			} else  				cancelMessageList(); -			}  		} else if (param.asInteger() == 0x34569073) {  			if (_klaymanAtElevator) {  				_isKlaymanBusy = true;  				sendMessage(_asElevator, 0x2000, 0);  				sendEntityMessage(_klayman, 0x1014, _asElevator);  				sendMessage(_klayman, 0x2001, 0); -			} else { +			} else  				cancelMessageList(); -			}  		} else if (param.asInteger() == 0x4054C877) {  			if (_klaymanAtElevator) {  				sendMessage(_asElevator, 0x2000, 480);  				sendEntityMessage(_klayman, 0x1014, _asElevator);  				sendMessage(_klayman, 0x2001, 0); -			} else { +			} else  				cancelMessageList(); -			}  		} else if (param.asInteger() == 0x0CBC6211) {  			sendEntityMessage(_klayman, 0x1014, _asElevator);  			sendMessage(_klayman, 0x2001, 0);  			setRectList(0x004B38B8); -		} else if (param.asInteger() == 0x402064D8) { +		} else if (param.asInteger() == 0x402064D8)  			sendEntityMessage(_klayman, 0x1014, _ssButton); -		} else if (param.asInteger() == 0x231DA241) { -			if (_ssButton) { +		else if (param.asInteger() == 0x231DA241) { +			if (_ssButton)  				setMessageList(0x004B38F0); -			} else { +			else  				setMessageList(0x004B37D8); -			}  		}  		break;  	case 0x2002: @@ -2183,14 +2133,11 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)  	_background->createSurface(0, 640, 528);  	_background->getSpriteResource().getPosition().y = 480;  	addBackground(_background); -	  	setPalette(0x08100289); -	addEntity(_palette); // Why? - +	addEntity(_palette);  	insertMouse435(0x0028D089, 40, 600);  	createFontSurface(); -	  	_backgroundSurface = new BaseSurface(_vm, 0, 640, 480);  	spriteResource.load2(0x08100289);  	_backgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0); @@ -2207,17 +2154,13 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)  	SetMessageHandler(&Scene2208::handleMessage);  	_visibleRowsCount = 10; -  	_newRowIndex = (int16)getGlobalVar(V_CLICKED_COLUMN_ROW);  	if (_newRowIndex + _visibleRowsCount > _maxRowIndex)  		_newRowIndex = _maxRowIndex - _visibleRowsCount;  	if (_newRowIndex < 6)  		_newRowIndex = 0; -  	_rowScrollY = 0; -  	_backgroundScrollY = 48 * _newRowIndex;		 -  	_currRowIndex = _newRowIndex;  	for (int16 rowIndex = 0; rowIndex < _visibleRowsCount; rowIndex++) @@ -2253,9 +2196,8 @@ void Scene2208::update() {  	}  	if (_currRowIndex < _newRowIndex) { -		if (_rowScrollY == 0) { +		if (_rowScrollY == 0)  			drawRow(_currRowIndex + _visibleRowsCount); -		}  		_backgroundScrollY += 4;  		_rowScrollY += 4;  		if (_rowScrollY == 48) { @@ -2284,9 +2226,8 @@ uint32 Scene2208::handleMessage(int messageNum, const MessageParam ¶m, Entit  	uint32 messageResult = Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x0001: -		if (param.asPoint().x <= 40 || param.asPoint().x >= 600) { +		if (param.asPoint().x <= 40 || param.asPoint().x >= 600)  			leaveScene(0); -		}  		break;  	}  	return messageResult; @@ -2372,17 +2313,21 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)  	_vm->_collisionMan->addSprite(_asTape);   	if (which < 0) { +		// Restoring game  		insertKlayman<KmScene2242>(200, 430);  		setMessageList(0x004B3C18);  	} else if (which == 1) { +		// Klaymen entering from looking through the window  		insertKlayman<KmScene2242>(530, 430);  		setMessageList(0x004B3D60);  	} else if (which == 2) { +		// Klaymen returning from reading a text column  		insertKlayman<KmScene2242>(kScene2242XPositions[!getGlobalVar(V_CLICKED_COLUMN_INDEX) ? 0 : 1], 430);  		setMessageList(0x004B3D48);  		if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))  			_klayman->setDoDeltaX(1);  	} else { +		// Klaymen entering from the left  		insertKlayman<KmScene2242>(0, 430);  		setMessageList(0x004B3C20);  	} @@ -2414,9 +2359,8 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entit  	uint32 messageResult = Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x100D: -		if (param.asInteger() == 0x800C6694) { +		if (param.asInteger() == 0x800C6694)  			readClickedColumn(); -		}  		break;  	case 0x4826:  		if (sender == _asTape) { @@ -2442,11 +2386,10 @@ void Scene2242::readClickedColumn() {  		index = 1;  	}  	setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7); -	if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133) { +	if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133)  		setMessageList2(kScene2242MessageListIds1[index]); -	} else { +	else  		setMessageList2(kScene2242MessageListIds2[index]); -	}  }  static const int16 kHallOfRecordsKlaymanXPos[] = { @@ -2464,38 +2407,42 @@ static const uint32 kHallOfRecordsSceneMessageListIds1[] = {  	0x004B2AF8,	0x004B2B20,	0x004B2B48  }; -HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id) +HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 hallOfRecordsInfoId)  	: Scene(vm, parentModule, true) { -	_sceneInfo140 = _vm->_staticData->getSceneInfo140Item(sceneInfo140Id); +	_hallOfRecordsInfo = _vm->_staticData->getHallOfRecordsInfoItem(hallOfRecordsInfoId);  	SetMessageHandler(&HallOfRecordsScene::handleMessage);  	SetUpdateHandler(&Scene::update); -	if (!getGlobalVar(V_LIGHTS_ON) && _sceneInfo140->bgFilename2) { +	if (!getGlobalVar(V_LIGHTS_ON) && _hallOfRecordsInfo->bgFilename2) {  		setRectList(0x004B2BF8); -		setBackground(_sceneInfo140->bgFilename2); -		setPalette(_sceneInfo140->bgFilename2); +		setBackground(_hallOfRecordsInfo->bgFilename2); +		setPalette(_hallOfRecordsInfo->bgFilename2);  		insertMouse433(0x14320138);  	} else {  		setRectList(0x004B2BB8); -		setBackground(_sceneInfo140->bgFilename1); -		setPalette(_sceneInfo140->bgFilename1); +		setBackground(_hallOfRecordsInfo->bgFilename1); +		setPalette(_hallOfRecordsInfo->bgFilename1);  		insertMouse433(0x63A40028);  	}  	if (which < 0) { +		// Restoring game  		insertKlayman<KmHallOfRecords>(200, 430);  		setMessageList(0x004B2900);  	} else if (which == 1) { +		// Klaymen entering from the right  		insertKlayman<KmHallOfRecords>(640, 430);  		setMessageList(0x004B2910);  	} else if (which == 2) { -		insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _sceneInfo140->xPosIndex], 430); +		// Klaymen returning from reading a text column +		insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _hallOfRecordsInfo->xPosIndex], 430);  		setMessageList(0x004B2B70);  		if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))  			_klayman->setDoDeltaX(1);  	} else { +		// Klaymen entering from the left  		insertKlayman<KmHallOfRecords>(0, 430);  		setMessageList(0x004B2908);  	} @@ -2513,9 +2460,8 @@ uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam &par  	uint32 messageResult = Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x100D: -		if (param.asInteger() == 0x800C6694) { +		if (param.asInteger() == 0x800C6694)  			readClickedColumn(); -		}  		break;  	}  	return messageResult; @@ -2523,22 +2469,20 @@ uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam &par  void HallOfRecordsScene::readClickedColumn() {  	int16 index = (_mouseClickPos.x - 23) / 89; -	if (index >= _sceneInfo140->count) { +	if (index >= _hallOfRecordsInfo->count)  		setMessageList2(0x004B2920); -	} else { -		setGlobalVar(V_CLICKED_COLUMN_INDEX, _sceneInfo140->xPosIndex + index); +	else { +		setGlobalVar(V_CLICKED_COLUMN_INDEX, _hallOfRecordsInfo->xPosIndex + index);  		setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7); -		setGlobalVar(V_COLUMN_TEXT_NAME, _sceneInfo140->txFilename); -		if (index == 0 && _sceneInfo140->bgFilename3) { -			setGlobalVar(V_COLUMN_BACK_NAME, _sceneInfo140->bgFilename3); -		} else { +		setGlobalVar(V_COLUMN_TEXT_NAME, _hallOfRecordsInfo->txFilename); +		if (index == 0 && _hallOfRecordsInfo->bgFilename3) +			setGlobalVar(V_COLUMN_BACK_NAME, _hallOfRecordsInfo->bgFilename3); +		else  			setGlobalVar(V_COLUMN_BACK_NAME, 0); -		} -		if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133) { +		if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133)  			setMessageList2(kHallOfRecordsSceneMessageListIds1[index]); -		} else { +		else  			setMessageList2(kHallOfRecordsSceneMessageListIds2[index]); -		}  	}  } @@ -2557,9 +2501,6 @@ static const uint32 kScene2247MessageListIds1[] = {  Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)  	: Scene(vm, parentModule, true) { -	//DEBUG -	setGlobalVar(V_LIGHTS_ON, 1); -  	SetMessageHandler(&Scene2247::handleMessage);  	SetUpdateHandler(&Scene::update); @@ -2576,17 +2517,21 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)  	}  	if (which < 0) { +		// Restoring game  		insertKlayman<KmScene2247>(200, 430);  		setMessageList(0x004B5428);  	} else if (which == 1) { +		// Klaymen entering from the right  		insertKlayman<KmScene2247>(640, 430);  		setMessageList(0x004B5438);  	} else if (which == 2) { +		// Klaymen returning from reading a text column  		insertKlayman<KmScene2247>(kScene2247XPositions[getGlobalVar(V_COLUMN_TEXT_NAME) == 0x0008E486 ? 0 : 1], 430);  		if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))  			_klayman->setDoDeltaX(1);  		setMessageList(0x004B5530);  	} else { +		// Klaymen entering from the left  		insertKlayman<KmScene2247>(0, 430);  		setMessageList(0x004B5430);  	} @@ -2603,9 +2548,8 @@ uint32 Scene2247::handleMessage(int messageNum, const MessageParam ¶m, Entit  	uint32 messageResult = Scene::handleMessage(messageNum, param, sender);  	switch (messageNum) {  	case 0x100D: -		if (param.asInteger() == 0x800C6694) { +		if (param.asInteger() == 0x800C6694)  			readClickedColumn(); -		}  		break;  	}  	return messageResult; @@ -2624,11 +2568,10 @@ void Scene2247::readClickedColumn() {  	}  	setGlobalVar(V_CLICKED_COLUMN_INDEX, 0);  	setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7); -	if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133) { +	if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133)  		setMessageList2(kScene2247MessageListIds1[index]); -	} else { +	else  		setMessageList2(kScene2247MessageListIds2[index]); -	}  }  } // End of namespace Neverhood diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h index 625990bfca..34be267645 100644 --- a/engines/neverhood/module2200.h +++ b/engines/neverhood/module2200.h @@ -38,9 +38,10 @@ public:  	Module2200(NeverhoodEngine *vm, Module *parentModule, int which);  	virtual ~Module2200();  protected: +	int _sceneNum;  	void createScene(int sceneNum, int which);  	void updateScene(); -	void createHallOfRecordsScene(int which, uint32 sceneInfo140Id); +	void createHallOfRecordsScene(int which, uint32 hallOfRecordsInfoId);  };  // Scene2201 @@ -63,11 +64,11 @@ public:  class AsScene2201Door : public AnimatedSprite {  public: -	AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1); +	AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen);  protected:  	Klayman *_klayman;  	Sprite *_ssDoorLight; -	bool _doorOpen; +	bool _isOpen;  	int _countdown;  	void update();  	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); @@ -95,13 +96,13 @@ protected:  	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);  }; -class SsScene2202PuzzleTile : public StaticSprite { +class SsScene2202PuzzleCube : public StaticSprite {  public: -	SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value); +	SsScene2202PuzzleCube(NeverhoodEngine *vm, Scene *parentScene, int16 cubePosition, int16 cubeSymbol);  protected:  	Scene *_parentScene;	 -	int16 _value; -	int16 _tileIndex; +	int16 _cubeSymbol; +	int16 _cubePosition;  	int16 _newX, _newY;  	int16 _xDelta, _yDelta;  	int16 _xIncr; @@ -113,9 +114,9 @@ protected:  	bool _isMoving;  	void update();  	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); -	void suMoveTileX(); -	void suMoveTileY(); -	void moveTile(int16 newTileIndex); +	void suMoveCubeX(); +	void suMoveCubeY(); +	void moveCube(int16 newCubePosition);  	void stopMoving();  }; @@ -124,16 +125,16 @@ public:  	Scene2202(NeverhoodEngine *vm, Module *parentModule, int which);  	~Scene2202();  protected: -	Sprite *_ssMovingTile; -	Sprite *_ssDoneMovingTile; -	bool _isTileMoving; -	int16 _movingTileIndex; +	Sprite *_ssMovingCube; +	Sprite *_ssDoneMovingCube; +	bool _isCubeMoving; +	int16 _movingCubePosition;  	int _surfacePriority;  	bool _leaveScene;  	bool _isSolved;  	void update();  	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); -	int16 getFreeTileIndex(int16 index); +	int16 getFreeCubePosition(int16 index);  	bool testIsSolved();	  }; @@ -298,7 +299,7 @@ public:  class Scene2207 : public Scene {  public: -	Scene2207(NeverhoodEngine *vm, Module *parentModule, int which); +	Scene2207(NeverhoodEngine *vm, Module *parentModule);  protected:  	Sprite *_asElevator;  	Sprite *_ssMaskPart1; @@ -332,7 +333,7 @@ protected:  	int16 _rowScrollY;  	int16 _maxRowIndex;  	int16 _visibleRowsCount; -	Common::Array<const char*> _strings; // TODO: Move to TextResource +	Common::Array<const char*> _strings;  	void update();  	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);  	void createFontSurface(); @@ -353,10 +354,10 @@ protected:  class HallOfRecordsScene : public Scene {  public: -	HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id); +	HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 hallOfRecordsInfoId);  	~HallOfRecordsScene();  protected: -	SceneInfo140 *_sceneInfo140; +	HallOfRecordsInfo *_hallOfRecordsInfo;  	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);  	void readClickedColumn();  }; diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp index 147a319d2e..1a633e289a 100644 --- a/engines/neverhood/staticdata.cpp +++ b/engines/neverhood/staticdata.cpp @@ -125,19 +125,19 @@ void StaticData::load(const char *filename) {  		_navigationLists[id] = navigationList;  	} -	// Load SceneInfo140 items -	uint32 sceneInfo140ItemsCount = fd.readUint32LE(); -	debug("sceneInfo140ItemsCount: %d", sceneInfo140ItemsCount); -	for (uint32 i = 0; i < sceneInfo140ItemsCount; i++) { -		SceneInfo140 *sceneInfo140 = new SceneInfo140(); +	// Load HallOfRecordsInfo items +	uint32 hallOfRecordsInfoItemsCount = fd.readUint32LE(); +	debug("hallOfRecordsInfoItemsCount: %d", hallOfRecordsInfoItemsCount); +	for (uint32 i = 0; i < hallOfRecordsInfoItemsCount; i++) { +		HallOfRecordsInfo *hallOfRecordsInfo = new HallOfRecordsInfo();  		uint32 id = fd.readUint32LE(); -		sceneInfo140->bgFilename1 = fd.readUint32LE(); -		sceneInfo140->bgFilename2 = fd.readUint32LE(); -		sceneInfo140->txFilename = fd.readUint32LE(); -		sceneInfo140->bgFilename3 = fd.readUint32LE(); -		sceneInfo140->xPosIndex = fd.readByte(); -		sceneInfo140->count = fd.readByte(); -		_sceneInfo140Items[id] = sceneInfo140; +		hallOfRecordsInfo->bgFilename1 = fd.readUint32LE(); +		hallOfRecordsInfo->bgFilename2 = fd.readUint32LE(); +		hallOfRecordsInfo->txFilename = fd.readUint32LE(); +		hallOfRecordsInfo->bgFilename3 = fd.readUint32LE(); +		hallOfRecordsInfo->xPosIndex = fd.readByte(); +		hallOfRecordsInfo->count = fd.readByte(); +		_hallOfRecordsInfoItems[id] = hallOfRecordsInfo;  	}  	// Load SceneInfo2700 items @@ -185,10 +185,10 @@ NavigationList *StaticData::getNavigationList(uint32 id) {  	return _navigationLists[id];  } -SceneInfo140 *StaticData::getSceneInfo140Item(uint32 id) { -	if (!_sceneInfo140Items[id]) -		error("StaticData::getSceneInfo140Item() SceneInfo140 with id %08X not found", id); -	return _sceneInfo140Items[id]; +HallOfRecordsInfo *StaticData::getHallOfRecordsInfoItem(uint32 id) { +	if (!_hallOfRecordsInfoItems[id]) +		error("StaticData::getHallOfRecordsInfoItem() HallOfRecordsInfo with id %08X not found", id); +	return _hallOfRecordsInfoItems[id];  }  SceneInfo2700 *StaticData::getSceneInfo2700(uint32 id) { diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h index 2a2db556e0..69a407bdcb 100644 --- a/engines/neverhood/staticdata.h +++ b/engines/neverhood/staticdata.h @@ -68,7 +68,7 @@ struct NavigationItem {  typedef Common::Array<NavigationItem> NavigationList; -struct SceneInfo140 { +struct HallOfRecordsInfo {  	uint32 bgFilename1;  	uint32 bgFilename2;  	uint32 txFilename; @@ -100,14 +100,14 @@ public:  	RectList *getRectList(uint32 id);  	MessageList *getMessageList(uint32 id);  	NavigationList *getNavigationList(uint32 id); -	SceneInfo140 *getSceneInfo140Item(uint32 id); +	HallOfRecordsInfo *getHallOfRecordsInfoItem(uint32 id);  	SceneInfo2700 *getSceneInfo2700(uint32 id);  protected:  	Common::HashMap<uint32, HitRectList*> _hitRectLists;  	Common::HashMap<uint32, RectList*> _rectLists;  	Common::HashMap<uint32, MessageList*> _messageLists;  	Common::HashMap<uint32, NavigationList*> _navigationLists; -	Common::HashMap<uint32, SceneInfo140*> _sceneInfo140Items; +	Common::HashMap<uint32, HallOfRecordsInfo*> _hallOfRecordsInfoItems;  	Common::HashMap<uint32, SceneInfo2700*> _sceneInfo2700Items;  };  | 
