[Scummvm-cvs-logs] CVS: scummvm/queen logic.h,1.79,1.80 logic.cpp,1.122,1.123 cutaway.h,1.27,1.28 cutaway.cpp,1.86,1.87

Gregory Montoir cyx at users.sourceforge.net
Wed Dec 10 06:20:01 CET 2003


Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1:/tmp/cvs-serv17195

Modified Files:
	logic.h logic.cpp cutaway.h cutaway.cpp 
Log Message:
cleanup, split Cutaway::specialMove() into several methods ; this should allow us minor changes in order to support different/other special moves (demo, interview)

Index: logic.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/logic.h,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -d -r1.79 -r1.80
--- logic.h	5 Dec 2003 13:56:06 -0000	1.79
+++ logic.h	10 Dec 2003 14:19:04 -0000	1.80
@@ -273,15 +273,6 @@
 	void inventoryDeleteItem(uint16 itemNum, bool refresh = true);
 	void inventoryScroll(uint16 count, bool up);
 
-	//! Ugly hack from original code
-	void sceneReset() { _scene = 0; }
-
-	//! Make a scene
-	void sceneStart();
-
-	//! Stop making a scene
-	void sceneStop();
-
 	//! Copy data from dummy object to object
 	void objectCopy(int dummyObjectIndex, int objectIndex);
 
@@ -293,15 +284,65 @@
 
 	void update();
 
-	void useJournal();
-
 	bool gameSave(uint16 slot, const char *desc);
 	bool gameLoad(uint16 slot);
 
+	//! Ugly hack from original code
+	void sceneReset() { _scene = 0; }
+
+	//! Make a scene
+	void sceneStart();
+
+	//! Stop making a scene
+	void sceneStop();
+
+	void useJournal();
+
+	void executeSpecialMove(uint16 sm);
+
+	void asmMakeJoeUseDress();
+	void asmMakeJoeUseNormalClothes();
+	void asmMakeJoeUseUnderwear();
+	void asmSwitchToDressPalette();
+	void asmSwitchToNormalPalette();
+	void asmStartCarAnimation();
+	void asmStopCarAnimation();
+	void asmStartFightAnimation();
+	void asmWaitForFrankPosition();
+	void asmMakeFrankGrowing();
+	void asmMakeRobotGrowing();
+	void asmShrinkRobot();
+	void asmEndGame();
+	void asmPutCameraOnDino();
+	void asmPutCameraOnJoe();
+	void asmSetAzuraInLove();
+	void asmPanRightFromJoe();
+	void asmSetLightsOff();
+	void asmSetLightsOn();
+	void asmSetManequinAreaOn();
+	void asmPanToJoe();
+	void asmTurnGuardOn();
+	void asmPanLeft320To144();
+	void asmSmooch();
+	void asmMakeLightningHitPlane();
+	void asmScaleBlimp();
+	void asmScaleEnding();
+	void asmWaitForCarPosition();
+	void asmShakeScreen();
+	void asmAttemptPuzzle();
+	void asmScaleTitle();
+	void asmPanRightToHugh();
+	void asmMakeWhiteFlash();
+	void asmPanRightToJoeAndRita();
+	void asmPanLeftToBomb();
+
 	Walk *walk() const { return _walk; }
 	Display *display() const { return _display; }
 	Command *command() const { return _cmd; }
 	Resource *resource() const { return _resource; }
+
+
+	typedef void (Logic::*SpecialMoveProc)();
 
 	enum {
 		MAX_ZONES_NUMBER   = 32,

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/logic.cpp,v
retrieving revision 1.122
retrieving revision 1.123
diff -u -d -r1.122 -r1.123
--- logic.cpp	6 Dec 2003 13:15:17 -0000	1.122
+++ logic.cpp	10 Dec 2003 14:19:04 -0000	1.123
@@ -1103,8 +1103,7 @@
 
 	// check the object is in the current room
 	if (pod->room != _currentRoom) {
-		warning("Logic::roomRefreshObject() - Trying to display an object (%i=%s) that is not in room (object room=%i, current room=%i)",
-			obj, _objName[ABS(pod->name)], pod->room, _currentRoom);
+		debug(0, "Trying to display an object (%i=%s) that is not in room (object room=%i, current room=%i)", obj, _objName[ABS(pod->name)], pod->room, _currentRoom);
 		return curImage;
 	}
 
@@ -2600,6 +2599,655 @@
 
 	}
 }
+
+
+void Logic::executeSpecialMove(uint16 sm) {
+	// FIXME: for now, we initialise the various 'asm' procs here but,
+	// in order to support the 'interview' mini-game', we will have to do
+	// that in a proper setupAsmForGame() or setupAsmForInterview() function.
+	static const SpecialMoveProc proc[40] = {
+		/* 00 */
+		NULL,
+		NULL,
+		&Logic::asmMakeJoeUseDress,
+		&Logic::asmMakeJoeUseNormalClothes,
+		/* 04 */
+		&Logic::asmMakeJoeUseUnderwear,
+		&Logic::asmSwitchToDressPalette,
+		&Logic::asmSwitchToNormalPalette,
+		&Logic::asmStartCarAnimation,
+		/* 08 */
+		&Logic::asmStopCarAnimation,
+		&Logic::asmStartFightAnimation,
+		&Logic::asmWaitForFrankPosition,
+		&Logic::asmMakeFrankGrowing,
+		/* 12 */
+		&Logic::asmMakeRobotGrowing,
+		&Logic::asmShrinkRobot,
+		&Logic::asmEndGame,
+		&Logic::asmPutCameraOnDino,
+		/* 16 */
+		&Logic::asmPutCameraOnJoe,
+		NULL, // XXX alternative introduction
+		NULL, // XXX alternative introduction
+		&Logic::asmSetAzuraInLove,
+		/* 20 */
+		&Logic::asmPanRightFromJoe,
+		&Logic::asmSetLightsOff,
+		&Logic::asmSetLightsOn,
+		&Logic::asmSetManequinAreaOn,
+		/* 24 */
+		&Logic::asmPanToJoe,
+		&Logic::asmTurnGuardOn,
+		&Logic::asmPanLeft320To144,
+		&Logic::asmSmooch,
+		/* 28 */
+		&Logic::asmMakeLightningHitPlane,
+		&Logic::asmScaleBlimp,
+		&Logic::asmScaleEnding,
+		&Logic::asmWaitForCarPosition,
+		/* 32 */
+		&Logic::asmShakeScreen,
+		&Logic::asmAttemptPuzzle,
+		&Logic::asmScaleTitle,
+		NULL, // XXX PC Demo ?
+		/* 36 */
+		&Logic::asmPanRightToHugh,
+		&Logic::asmMakeWhiteFlash,
+		&Logic::asmPanRightToJoeAndRita,
+		&Logic::asmPanLeftToBomb
+	};
+
+	if (sm >= ARRAYSIZE(proc) || proc[sm] == NULL) {
+		warning("unhandled / invalid special move : %d", sm);
+	}
+	else {
+		debug(0, "Special move: %d", sm);
+		(this->*proc[sm])();
+	}
+}
+
+
+void Logic::asmMakeJoeUseDress() {
+	
+	joeUseDress(false);
+}
+
+
+void Logic::asmMakeJoeUseNormalClothes() {
+	
+	joeUseClothes(false);
+}
+
+
+void Logic::asmMakeJoeUseUnderwear() {
+	
+	joeUseUnderwear();
+}
+
+
+void Logic::asmSwitchToDressPalette() {
+
+	_display->palSetJoe(JP_DRESS);
+}
+
+
+void Logic::asmSwitchToNormalPalette() {
+
+	_display->palSetJoe(JP_CLOTHES);
+}
+
+
+void Logic::asmStartCarAnimation() {
+
+	// Carbam background animation - room 74
+	_graphics->initCarBamScene();
+}
+
+
+void Logic::asmStopCarAnimation() {
+
+	// CR 2 - Turn off big oil splat and gun shots!
+	_graphics->cleanupCarBamScene(findBob(594)); // Oil object
+}
+
+
+void Logic::asmStartFightAnimation() {
+	
+	// Fight1 background animation - room 69
+	_graphics->initFightBamScene();
+	gameState(148, 1);
+}
+
+
+void Logic::asmWaitForFrankPosition() {
+
+	// c69e.cut
+	_graphics->bamData()->flag = 2;
+	while (_graphics->bamData()->flag) {
+		update();
+	}
+}
+
+
+void Logic::asmMakeFrankGrowing() {
+
+	// c69z.cut
+	_graphics->bankUnpack(1, 38, 15);
+	BobSlot *bobFrank = _graphics->bob(5);
+	bobFrank->frameNum = 38;
+	bobFrank->curPos(160, 200);
+	bobFrank->box.y2 = GAME_SCREEN_HEIGHT - 1;
+
+	int i;
+	for (i = 10; i <= 100; i += 4) {
+		bobFrank->scale = i;
+		update();
+	}
+	for (i = 0; i <= 20; ++i) {
+		update();
+	}
+
+	objectData(521)->name =  ABS(objectData(521)->name); // Dinoray
+	objectData(526)->name =  ABS(objectData(526)->name); // Frank obj
+	objectData(522)->name = -ABS(objectData(522)->name); // TMPD object off
+	objectData(525)->name = -ABS(objectData(525)->name); // Floda guards off
+	objectData(523)->name = -ABS(objectData(523)->name); // Sparky object off
+	gameState(157, 1); // No more Ironstein
+}
+
+
+void Logic::asmMakeRobotGrowing() { 
+
+	// c69z.cut
+	_graphics->bankUnpack(1, 38, 15);
+	BobSlot *bobRobot = _graphics->bob(5);
+	bobRobot->frameNum = 38;
+	bobRobot->curPos(160, 200);
+	bobRobot->box.y2 = GAME_SCREEN_HEIGHT - 1;
+
+	int i;
+	for (i = 10; i <= 100; i += 4) {
+		bobRobot->scale = i;
+		update();
+	}
+	for (i = 0; i <= 20; ++i) {
+		update();
+	}
+	
+	objectData(524)->name = -ABS(objectData(524)->name); // Azura object off
+	objectData(526)->name = -ABS(objectData(526)->name); // Frank object off
+}
+
+
+void Logic::asmShrinkRobot() {
+	
+	int i;
+	for (i = 100; i >= 35; i -= 5) {
+		_graphics->bob(6)->scale = i;
+		update();
+	}
+}
+
+
+void Logic::asmEndGame() {
+	
+	int i;
+	for (i = 0; i < 40; ++i) {
+		update();
+	}
+	OSystem::instance()->quit();
+	debug(0, "Game completed");
+}
+
+
+void Logic::asmPutCameraOnDino() {
+
+	_graphics->cameraBob(-1);
+	while (_display->horizontalScroll() < 320) {
+		_display->horizontalScroll(_display->horizontalScroll() + 16);
+		if (_display->horizontalScroll() > 320) {
+			_display->horizontalScroll(320);
+		}
+		update();
+	}
+	_graphics->cameraBob(1);
+}
+
+
+void Logic::asmPutCameraOnJoe() {
+
+	_graphics->cameraBob(0);
+}
+
+
+void Logic::asmSetAzuraInLove() {
+
+	gameState(VAR_AZURA_IN_LOVE, 1);
+}
+
+
+void Logic::asmPanRightFromJoe() {
+
+	_graphics->cameraBob(-1);
+	while (_display->horizontalScroll() < 320) {
+		_display->horizontalScroll(_display->horizontalScroll() + 16);
+		if (_display->horizontalScroll() > 320) {
+			_display->horizontalScroll(320);
+		}
+		update();
+	}
+}
+
+
+void Logic::asmSetLightsOff() {
+
+	_display->palCustomLightsOff(currentRoom());
+}
+
+
+void Logic::asmSetLightsOn() {
+
+	_display->palCustomLightsOn(currentRoom());
+}
+
+
+void Logic::asmSetManequinAreaOn() {
+
+	area(ROOM_FLODA_FRONTDESK, 7)->mapNeighbours = ABS(area(ROOM_FLODA_FRONTDESK, 7)->mapNeighbours);
+}
+
+
+void Logic::asmPanToJoe() {
+
+	int i = _graphics->bob(0)->x - 160;
+	if (i < 0) {
+		i = 0;
+	}
+	else if (i > 320) {
+		i = 320;
+	}
+	_graphics->cameraBob(-1);
+	if (i < _display->horizontalScroll()) {
+		while (_display->horizontalScroll() > i) {
+			_display->horizontalScroll(_display->horizontalScroll() - 16);
+			if (_display->horizontalScroll() < i) {
+				_display->horizontalScroll(i);
+			}
+			update();
+		}
+	}
+	else {
+		while (_display->horizontalScroll() < i) {
+			_display->horizontalScroll(_display->horizontalScroll() + 16);
+			if (_display->horizontalScroll() > i ) {
+				_display->horizontalScroll(i);
+			}
+		}
+		update();
+	}
+	_graphics->cameraBob(0);
+}
+
+
+void Logic::asmTurnGuardOn() {
+
+	gameState(85, 1);
+}
+
+
+void Logic::asmPanLeft320To144() {
+	
+	_graphics->cameraBob(-1);
+	while (_display->horizontalScroll() > 144) {
+		_display->horizontalScroll(_display->horizontalScroll() - 8);
+		if (_display->horizontalScroll() < 144) {
+			_display->horizontalScroll(144);
+		}
+		update();
+	}
+}
+
+
+void Logic::asmSmooch() {
+			
+	_graphics->cameraBob(-1);
+	BobSlot *bobAzura = _graphics->bob(5);
+	BobSlot *bobJoe = _graphics->bob(6);
+	while (_display->horizontalScroll() < 320) {
+		_display->horizontalScroll(_display->horizontalScroll() + 8);
+		if (bobJoe->x - bobAzura->x > 128) {
+			bobAzura->x += 10;
+			bobJoe->x += 6;
+		}
+		else {
+			bobAzura->x += 8;
+			bobJoe->x += 8;
+		}
+		update();
+	}
+}
+
+
+void Logic::asmMakeLightningHitPlane() {
+
+	_graphics->cameraBob(-1);
+	short iy = 0, x, ydir = -1, j, k;
+				
+	BobSlot *planeBob     = _graphics->bob(5);
+	BobSlot *lightningBob = _graphics->bob(20);
+
+	planeBob->box.y2 = lightningBob->box.y2 = 199;
+	planeBob->y = 135;
+
+	planeBob->scale = 20;
+
+	for (x = 660; x > 163; x -= 6) {
+		planeBob->x = x;
+		planeBob->y = 135 + iy;
+
+		iy -= ydir;
+		if (iy < -9 || iy > 9)
+			ydir = -ydir;
+
+		planeBob->scale++;
+		if (planeBob->scale > 100)
+			planeBob->scale = 100;
+
+		int scrollX = x - 163;
+		if (scrollX > 320)
+			scrollX = 320;
+		_display->horizontalScroll(scrollX);
+		update();
+	}
+
+	planeBob->scale = 100;
+	_display->horizontalScroll(0);
+
+	planeBob->x -= -8;
+	planeBob->y += 6;
+
+	lightningBob->x = 160;
+	lightningBob->y = 0;
+
+	// 23/2/95 - Play lightning SFX
+	// XXX sfxplay(NULLstr);
+
+	_graphics->bankUnpack(18, lightningBob->frameNum, 15);
+	_graphics->bankUnpack(4,  planeBob    ->frameNum, 15);
+
+	// Plane plunges into the jungle!
+	BobSlot *fireBob = _graphics->bob(6);
+
+	fireBob->animating = true;
+	fireBob->x = planeBob->x;
+	fireBob->y = planeBob->y + 10;
+				
+	_graphics->bankUnpack(19, fireBob->frameNum, 15);
+	update();
+
+	k = 20;
+	j = 1;
+
+	for (x = 163; x > -30; x -= 10) {
+		planeBob->y += 4;
+		fireBob->y += 4;
+		planeBob->x = fireBob->x = x;
+
+		if (k < 40) {
+			_graphics->bankUnpack(j, planeBob->frameNum, 15);
+			_graphics->bankUnpack(k, fireBob ->frameNum, 15);
+			k++;
+			j++;
+
+			if (j == 4)
+				j = 1;
+		}
+					
+		update();
+	}
+
+	_graphics->cameraBob(0);
+}
+
+
+void Logic::asmScaleBlimp() {
+
+	int16 z = 256;
+	BobSlot *bob = _graphics->bob(7);
+	int16 x = bob->x;
+	int16 y = bob->y;
+	while (bob->x > 150) {
+		bob->x = x * 256 / z + 150;
+		bob->x = y * 256 / z + 112;
+		bob->scale = 100 * 256 / z;
+
+		++z;
+		if (z % 6 == 0) {
+			--x;
+		}
+
+		update();
+	}
+}
+
+
+void Logic::asmScaleEnding() {
+
+	_graphics->bob(7)->active = false; // Turn off blimp
+	BobSlot *b = _graphics->bob(20);
+	b->x = 160;
+	b->y = 100;
+	int i;
+	for (i = 5; i <= 100; i += 5) {
+		b->scale = i;
+		update();
+	}
+	for (i = 0; i < 50; ++i) {
+		update();
+	}
+	_display->palFadeOut(0, 255, currentRoom());
+}
+
+
+void Logic::asmWaitForCarPosition() {
+
+	// Wait for car to reach correct position before pouring oil
+	while (_graphics->bamData()->index != 60) {
+		update();
+	}
+}
+
+
+void Logic::asmShakeScreen() {
+
+	OSystem::instance()->set_shake_pos(3);
+	update();
+	OSystem::instance()->set_shake_pos(0);
+	update();
+}
+
+
+void Logic::asmAttemptPuzzle() {
+	
+	static short n = 0;
+	++n;
+	if (n & 4) {
+		joeSpeak(226, true);
+	}
+}
+
+
+void Logic::asmScaleTitle() {
+
+	BobSlot *bob = _graphics->bob(5);
+	bob->animating = false;
+	bob->x = 161;
+	bob->y = 200;
+	bob->scale = 100;
+
+	int i;
+	for (i = 5; i <= 100; i +=5) {
+		bob->scale = i;
+		bob->y -= 4;
+		update();
+	}
+}
+
+
+void Logic::asmPanRightToHugh() {
+	
+	BobSlot *bob_thugA1 = _graphics->bob(20);
+	BobSlot *bob_thugA2 = _graphics->bob(21);
+	BobSlot *bob_thugA3 = _graphics->bob(22);
+	BobSlot *bob_hugh1  = _graphics->bob(1);
+	BobSlot *bob_hugh2  = _graphics->bob(23);
+	BobSlot *bob_hugh3  = _graphics->bob(24);
+	BobSlot *bob_thugB1 = _graphics->bob(25);
+	BobSlot *bob_thugB2 = _graphics->bob(26);
+
+	_graphics->cameraBob(-1);
+	_input->fastMode(true);
+	update();
+				
+	int i = 4, k = 160;
+
+	// Adjust thug1 gun so it matches rest of body
+	bob_thugA1->x += (k / 2) * 2 - 45; 
+	bob_thugA2->x += (k / 2) * 2; 
+	bob_thugA3->x += (k / 2) * 2;
+
+	bob_hugh1->x += (k / 2) * 3 + (k / 2);
+	bob_hugh2->x += (k / 2) * 3 + (k / 2);
+	bob_hugh3->x += (k / 2) * 3 + (k / 2);
+
+	bob_thugB1->x += (k / 2) * 4 + k; 
+	bob_thugB2->x += (k / 2) * 4 + k; 
+
+	if (i == 3) {
+		bob_thugB1->x += 10;
+		bob_thugB2->x += 10;
+	}
+
+	i *= 2;
+
+	int horizontalScroll = 0;
+	while (horizontalScroll < k) {
+
+		horizontalScroll = horizontalScroll + i;
+		if (horizontalScroll > k)
+			horizontalScroll = k;
+
+		//debug(0, "horizontalScroll = %i", horizontalScroll);
+
+		_display->horizontalScroll(horizontalScroll);
+
+		bob_thugA1->x -= i * 2; 
+		bob_thugA2->x -= i * 2; 
+		bob_thugA3->x -= i * 2;
+
+		bob_hugh1->x -= i * 3;
+		bob_hugh2->x -= i * 3;
+		bob_hugh3->x -= i * 3;
+
+		bob_thugB1->x -= i * 4;
+		bob_thugB2->x -= i * 4;
+
+		update();
+
+		if (_input->cutawayQuit())
+			return;
+	}
+
+	_input->fastMode(false);
+}
+
+
+void Logic::asmMakeWhiteFlash() {
+
+	_display->palCustomFlash();
+}
+
+
+void Logic::asmPanRightToJoeAndRita() { // cdint.cut
+
+	BobSlot *bob_box   = _graphics->bob(20);
+	BobSlot *bob_beam  = _graphics->bob(21);
+	BobSlot *bob_crate = _graphics->bob(22);
+	BobSlot *bob_clock = _graphics->bob(23);
+	BobSlot *bob_hands = _graphics->bob(24);
+
+	_graphics->cameraBob(-1);
+	_input->fastMode(true);
+					
+	update();
+
+	bob_box  ->x += 280 * 2;
+	bob_beam ->x += 30;
+	bob_crate->x += 180 * 3;
+
+	int horizontalScroll = _display->horizontalScroll();
+
+	int i = 1;
+	while (horizontalScroll < 290) {
+
+		horizontalScroll = horizontalScroll + i;
+		if (horizontalScroll > 290)
+			horizontalScroll = 290;
+
+		//debug(0, "horizontalScroll = %i", horizontalScroll);
+
+		_display->horizontalScroll(horizontalScroll);
+
+		bob_box  ->x -= i * 2;
+		bob_beam ->x -= i;
+		bob_crate->x -= i * 3;
+		bob_clock->x -= i * 2;
+		bob_hands->x -= i * 2;
+
+		update();
+
+		if (_input->cutawayQuit())
+			return;
+	}
+	_input->fastMode(false);
+}
+
+
+void Logic::asmPanLeftToBomb() { // cdint.cut
+		
+	BobSlot *bob21 = _graphics->bob(21);
+	BobSlot *bob22 = _graphics->bob(22);
+
+	_graphics->cameraBob(-1);
+	_input->fastMode(true);
+				
+	int horizontalScroll = _display->horizontalScroll();
+
+	int i = 5;
+	while (horizontalScroll > 0 || bob21->x < 136) {
+
+		horizontalScroll -= i;
+		if (horizontalScroll < 0)
+			horizontalScroll = 0;
+
+		//debug(0, "horizontalScroll = %i", horizontalScroll);
+		_display->horizontalScroll(horizontalScroll);
+
+		if (horizontalScroll < 272 && bob21->x < 136)
+			bob21->x += (i/2);
+
+		bob22->x += i;
+
+		update();
+
+		if (_input->cutawayQuit())
+			return;
+	}
+
+	_input->fastMode(false);
+}
+
 
 
 } // End of namespace Queen

Index: cutaway.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/cutaway.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- cutaway.h	1 Dec 2003 20:48:39 -0000	1.27
+++ cutaway.h	10 Dec 2003 14:19:04 -0000	1.28
@@ -229,9 +229,6 @@
 		//! Used by load to read string data
 		void loadStrings(byte *ptr);
 
-		//! Do something special
-		void actionSpecialMove(int index);
-
 		//! Get persons
 		byte *turnOnPeople(byte *ptr, CutawayObject &object);
 

Index: cutaway.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/cutaway.cpp,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -d -r1.86 -r1.87
--- cutaway.cpp	7 Dec 2003 15:19:00 -0000	1.86
+++ cutaway.cpp	10 Dec 2003 14:19:04 -0000	1.87
@@ -33,13 +33,6 @@
 namespace Queen {
 
 /*
-   TODO soon
-
-   - Implement SCENE_START and SCENE_END
-
-   - Finish Cutaway::actionSpecialMove
-
-
    TODO later
 
    - Finish Cutaway::stop
@@ -285,588 +278,6 @@
 
 }
 
-void Cutaway::actionSpecialMove(int index) {
-
-	if (index <= 0)
-		return;
-	
-	debug(0, "Special move: %i", index);
-
-	switch (index) {
-
-		case 2:
-			_logic->joeUseDress(false);
-			break;
-
-		// c74a.cut - use clothes
-		case 3:
-			_logic->joeUseClothes(false);
-			break;
-
-		case 4:
-			_logic->joeUseUnderwear();
-			break;
-
-		// cdres.cut
-		case 5:
-			_logic->display()->palSetJoe(JP_DRESS);
-			break;
-
-		// cdclo.cut - Set Joe's palette
-		case 6:
-			_logic->display()->palSetJoe(JP_CLOTHES);
-			break;
-
-		// c73e.cut - carbam background animation
-		case 7:
-			_graphics->initCarBamScene();
-			break;
-
-		// c74a.cut - Turn off big oil splat and gun shots!
-		case 8:
-			_graphics->cleanupCarBamScene(_logic->findBob(594)); // Oil object
-			break;
-
-		// c69e.cut -  Fight1 background animation
-		case 9:
-			_graphics->initFightBamScene();
-			_logic->gameState(148, 1);
-			break;
-
-		// c69e.cut
-		case 10:
-			_graphics->bamData()->flag = 2;
-			while (_graphics->bamData()->flag) {
-				_logic->update();
-			}
-			break;
-
-		// c69z.cut - Frank growing
-		case 11: {
-				_graphics->bankUnpack(1, 38, 15);
-				BobSlot *bobFrank = _graphics->bob(5);
-				bobFrank->frameNum = 38;
-				bobFrank->curPos(160, 200);
-				bobFrank->box.y2 = GAME_SCREEN_HEIGHT - 1;
-
-				int i;
-				for (i = 10; i <= 100; i += 4) {
-					bobFrank->scale = i;
-					_logic->update();
-				}
-				for (i = 0; i <= 20; ++i) {
-					_logic->update();
-				}
-
-				_logic->objectData(521)->name = ABS(_logic->objectData(521)->name); // Dinoray
-				_logic->objectData(526)->name = ABS(_logic->objectData(526)->name); // Frank obj
-				_logic->objectData(522)->name = -ABS(_logic->objectData(522)->name); // TMPD object off
-				_logic->objectData(525)->name = -ABS(_logic->objectData(525)->name); // Floda guards off
-				_logic->objectData(523)->name = -ABS(_logic->objectData(523)->name); // Sparky object off
-				_logic->gameState(157, 1); // No more Ironstein
-			}
-			break;
-
-		// c69z.cut - Robot growing
-		case 12: {
-				_graphics->bankUnpack(1, 38, 15);
-				BobSlot *bobRobot = _graphics->bob(5);
-				bobRobot->frameNum = 38;
-				bobRobot->curPos(160, 200);
-				bobRobot->box.y2 = GAME_SCREEN_HEIGHT - 1;
-
-				int i;
-				for (i = 10; i <= 100; i += 4) {
-					bobRobot->scale = i;
-					_logic->update();
-				}
-				for (i = 0; i <= 20; ++i) {
-					_logic->update();
-				}
-
-				_logic->objectData(524)->name = -ABS(_logic->objectData(524)->name); // Azura object off
-				_logic->objectData(526)->name = -ABS(_logic->objectData(526)->name); // Frank object off
-			}
-			break;
-
-		// Robot shrinking
-		case 13: {
-				int i;
-				for (i = 100; i >= 35; i -= 5) {
-					_graphics->bob(6)->scale = i;
-					_logic->update();
-				}
-			}
-			break;
-
-		// End game
-		case 14: {
-				int i;
-				for (i = 0; i < 40; ++i) {
-					_logic->update();
-				}
-				OSystem::instance()->quit();
-			}
-			break;
-
-        // Dinocam
-		case 15:
-			_graphics->cameraBob(-1);
-			while (_logic->display()->horizontalScroll() < 320) {
-				_logic->display()->horizontalScroll(_logic->display()->horizontalScroll() + 16);
-				if (_logic->display()->horizontalScroll() > 320) {
-					_logic->display()->horizontalScroll(320);
-				}
-				_logic->update();
-			}
-			_graphics->cameraBob(1);
-			break;
-
-		// cdint.cut / room 67 - put camera on Joe
-		case 16:
-			_graphics->cameraBob(0);
-			break;
-
-		// XXX sm17&18 : alternative intro
-
-		case 19:
-			_logic->gameState(VAR_AZURA_IN_LOVE, 1);
-			break;
-
-        // Pan right from Joe
-		case 20:
-			_graphics->cameraBob(-1);
-			while (_logic->display()->horizontalScroll() < 320) {
-				_logic->display()->horizontalScroll(_logic->display()->horizontalScroll() + 16);
-				if (_logic->display()->horizontalScroll() > 320) {
-					_logic->display()->horizontalScroll(320);
-				}
-				_logic->update();
-			}
-			break;
-
-		case 21:
-			_logic->display()->palCustomLightsOff(_logic->currentRoom());
-			break;
-
-		case 22:
-			_logic->display()->palCustomLightsOn(_logic->currentRoom());
-			break;
-
-		// manequin area on
-		case 23:
-			_logic->area(ROOM_FLODA_FRONTDESK, 7)->mapNeighbours = ABS(_logic->area(ROOM_FLODA_FRONTDESK, 7)->mapNeighbours);
-			break;
-
-		case 24: {
-			int i = _graphics->bob(0)->x - 160;
-			if (i < 0) {
-				i = 0;
-			}
-			else if (i > 320) {
-				i = 320;
-			}
-			_graphics->cameraBob(-1);
-			if (i < _logic->display()->horizontalScroll()) {
-				while (_logic->display()->horizontalScroll() > i) {
-					_logic->display()->horizontalScroll(_logic->display()->horizontalScroll() - 16);
-					if (_logic->display()->horizontalScroll() < i) {
-						_logic->display()->horizontalScroll(i);
-					}
-					_logic->update();
-				}
-			}
-			else {
-				while (_logic->display()->horizontalScroll() < i) {
-					_logic->display()->horizontalScroll(_logic->display()->horizontalScroll() + 16);
-					if (_logic->display()->horizontalScroll() > i ) {
-						_logic->display()->horizontalScroll(i);
-					}
-				}
-				_logic->update();
-			}
-			_graphics->cameraBob(0);
-			}
-			break;
-
-		// Turn guard on
-		case 25:
-			_logic->gameState(85, 1);
-			break;
-
-		// c69g.CUT - Pan left 320 to 144
-		case 26:
-			_graphics->cameraBob(-1);
-			while (_logic->display()->horizontalScroll() > 144) {
-				_logic->display()->horizontalScroll(_logic->display()->horizontalScroll() - 8);
-				if (_logic->display()->horizontalScroll() < 144) {
-					_logic->display()->horizontalScroll(144);
-				}
-				_logic->update();
-			}
-			break;
-
-		// smooch
-		case 27: {
-				_graphics->cameraBob(-1);
-				BobSlot *bobAzura = _graphics->bob(5);
-				BobSlot *bobJoe = _graphics->bob(6);
-				while (_logic->display()->horizontalScroll() < 320) {
-					_logic->display()->horizontalScroll(_logic->display()->horizontalScroll() + 8);
-					if (bobJoe->x - bobAzura->x > 128) {
-						bobAzura->x += 10;
-						bobJoe->x += 6;
-					}
-					else {
-						bobAzura->x += 8;
-						bobJoe->x += 8;
-					}
-					_logic->update();
-				}
-			}
-			break;
-
-		// c75b.cut - Lightning hits plane
-		case 28:
-			{
-				_graphics->cameraBob(-1);
-				
-				short iy = 0, x, ydir = -1, j, k;
-				
-				BobSlot *planeBob       = _graphics->bob(5);
-				BobSlot *lightningBob   = _graphics->bob(20);
-
-				planeBob->box.y2 = lightningBob->box.y2 = 199;
-				planeBob->y = 135;
-
-				planeBob->scale = 20;
-
-				for (x = 660; x > 163; x -= 6) {
-					planeBob->x = x;
-					planeBob->y = 135 + iy;
-
-					iy -= ydir;
-					if (iy < -9 || iy > 9)
-						ydir = -ydir;
-
-					planeBob->scale++;
-					if (planeBob->scale > 100)
-						planeBob->scale = 100;
-
-					int scrollX = x - 163;
-					if (scrollX > 320)
-						scrollX = 320;
-					_logic->display()->horizontalScroll(scrollX);
-
-					_logic->update();
-				}
-
-				planeBob->scale = 100;
-				_logic->display()->horizontalScroll(0);
-
-				planeBob->x -= -8;
-				planeBob->y += 6;
-
-				lightningBob->x = 160;
-				lightningBob->y = 0;
-
-				// 23/2/95 - Play lightning SFX
-				// XXX sfxplay(NULLstr);
-
-				_graphics->bankUnpack(18, lightningBob->frameNum, 15);
-				_graphics->bankUnpack(4,  planeBob    ->frameNum, 15);
-
-				// Plane plunges into the jungle!
-
-				BobSlot *fireBob = _graphics->bob(6);
-
-				fireBob->animating = true;
-				fireBob->x = planeBob->x;
-				fireBob->y = planeBob->y + 10;
-				
-				_graphics->bankUnpack(19, fireBob->frameNum, 15);
-				_logic->update();
-
-				k = 20;
-				j = 1;
-
-				for (x = 163; x > -30; x -= 10) {
-					planeBob->y += 4;
-					fireBob->y += 4;
-					planeBob->x = fireBob->x = x;
-
-					if (k < 40) {
-						_graphics->bankUnpack(j, planeBob->frameNum, 15);
-						_graphics->bankUnpack(k, fireBob ->frameNum, 15);
-						k++;
-						j++;
-
-						if (j == 4)
-							j = 1;
-					}
-					
-					_logic->update();
-				}
-
-				_graphics->cameraBob(0);
-			}
-			break;
-			
-		// Scale blimp - end game!
-		case 29: {
-				int16 z = 256;
-				BobSlot *bob = _graphics->bob(7);
-				int16 x = bob->x;
-				int16 y = bob->y;
-				while (bob->x > 150) {
-					bob->x = x * 256 / z + 150;
-					bob->x = y * 256 / z + 112;
-					bob->scale = 100 * 256 / z;
-
-					++z;
-					if (z % 6 == 0) {
-						--x;
-					}
-
-					_logic->update();
-				}
-			}
-			break;
-
-		// scale ending
-		case 30: {
-				_graphics->bob(7)->active = false; // Turn off blimp
-				BobSlot *b = _graphics->bob(20);
-				b->x = 160;
-				b->y = 100;
-				int i;
-				for (i = 5; i <= 100; i += 5) {
-					b->scale = i;
-					_logic->update();
-				}
-				for (i = 0; i < 50; ++i) {
-					_logic->update();
-				}
-				_logic->display()->palFadeOut(0, 255, _logic->currentRoom());
-			}
-            break;
-
-		// c74a.cut - Wait for car to reach correct position before pouring oil
-		case 31:
-			while (_graphics->bamData()->index != 60) {
-				_logic->update();
-			}
-			break;
-
-		// c75b.cut - Screen shake
-		case 32:
-			OSystem::instance()->set_shake_pos(3);
-			_logic->update();
-			OSystem::instance()->set_shake_pos(0);
-			_logic->update();
-			break;
-
-		// Attempt puzzle
-		case 33: {
-				static short n = 0;
-				++n;
-				if (n & 4) {
-					_logic->joeSpeak(226, true);
-				}
-			}
-			break;
-
-		// cred.cut - scale title
-		case 34:
-			{
-				BobSlot *bob = _graphics->bob(5);
-				bob->animating = false;
-				bob->x = 161;
-				bob->y = 200;
-				bob->scale = 100;
-
-				int i;
-				for (i = 5; i <= 100; i +=5) {
-					bob->scale = i;
-					bob->y -= 4;
-					_logic->update();
-				}
-			}
-			break;
-
-		// XXX sm35: demo
-
-		// cdint.cut - pan right fast
-		case 36:
-			{
-				Display *display = _logic->display();
-
-				BobSlot *bob_thugA1 = _graphics->bob(20);
-				BobSlot *bob_thugA2 = _graphics->bob(21);
-				BobSlot *bob_thugA3 = _graphics->bob(22);
-				BobSlot *bob_hugh1  = _graphics->bob(1);
-				BobSlot *bob_hugh2  = _graphics->bob(23);
-				BobSlot *bob_hugh3  = _graphics->bob(24);
-				BobSlot *bob_thugB1 = _graphics->bob(25);
-				BobSlot *bob_thugB2 = _graphics->bob(26);
-
-				_graphics->cameraBob(-1);
-				_input->fastMode(true);
-				_logic->update();
-				
-				int i = 4, k = 160;
-
-				// Adjust thug1 gun so it matches rest of body
-				bob_thugA1->x += (k / 2) * 2 - 45; 
-				bob_thugA2->x += (k / 2) * 2; 
-				bob_thugA3->x += (k / 2) * 2;
-
-				bob_hugh1->x += (k / 2) * 3 + (k / 2);
-				bob_hugh2->x += (k / 2) * 3 + (k / 2);
-				bob_hugh3->x += (k / 2) * 3 + (k / 2);
-
-				bob_thugB1->x += (k / 2) * 4 + k; 
-				bob_thugB2->x += (k / 2) * 4 + k; 
-
-				if (i == 3) {
-					bob_thugB1->x += 10;
-					bob_thugB2->x += 10;
-				}
-
-				i *= 2;
-
-				int horizontalScroll = 0;
-
-				while (horizontalScroll < k) {
-
-					horizontalScroll = horizontalScroll + i;
-					if (horizontalScroll > k)
-						horizontalScroll = k;
-
-					//debug(0, "horizontalScroll = %i", horizontalScroll);
-
-					display->horizontalScroll(horizontalScroll);
-
-					bob_thugA1->x -= i * 2; 
-					bob_thugA2->x -= i * 2; 
-					bob_thugA3->x -= i * 2;
-
-					bob_hugh1->x -= i * 3;
-					bob_hugh2->x -= i * 3;
-					bob_hugh3->x -= i * 3;
-
-					bob_thugB1->x -= i * 4;
-					bob_thugB2->x -= i * 4;
-
-					_logic->update();
-
-					if (_input->cutawayQuit())
-						return;
-				}
-
-				_input->fastMode(false);
-			}
-			break;
-
-		// cdint.cut - flash white
-		case 37:
-			_logic->display()->palCustomFlash();
-			break;
-
-		// cdint.cut - pan right
-		case 38:
-			{
-				Display *display = _logic->display();
-
-				BobSlot *bob_box   = _graphics->bob(20);
-				BobSlot *bob_beam  = _graphics->bob(21);
-				BobSlot *bob_crate = _graphics->bob(22);
-				BobSlot *bob_clock = _graphics->bob(23);
-				BobSlot *bob_hands = _graphics->bob(24);
-
-				_graphics->cameraBob(-1);
-				_input->fastMode(true);
-					
-				_logic->update();
-
-				bob_box  ->x += 280 * 2;
-				bob_beam ->x += 30;
-				bob_crate->x += 180 * 3;
-
-				int horizontalScroll = display->horizontalScroll();
-
-				int i = 1;
-				while (horizontalScroll < 290) {
-
-					horizontalScroll = horizontalScroll + i;
-					if (horizontalScroll > 290)
-						horizontalScroll = 290;
-
-					//debug(0, "horizontalScroll = %i", horizontalScroll);
-
-					display->horizontalScroll(horizontalScroll);
-
-					bob_box  ->x -= i * 2;
-					bob_beam ->x -= i;
-					bob_crate->x -= i * 3;
-					bob_clock->x -= i * 2;
-					bob_hands->x -= i * 2;
-
-					_logic->update();
-
-					if (_input->cutawayQuit())
-						return;
-
-				}
-
-				_input->fastMode(false);
-			}
-			break;
-
-		// cdint.cut - pan left to bomb
-		case 39: 
-			{
-				Display *display = _logic->display();
-
-				BobSlot *bob21 = _graphics->bob(21);
-				BobSlot *bob22 = _graphics->bob(22);
-
-				_graphics->cameraBob(-1);
-				_input->fastMode(true);
-				
-				int horizontalScroll = display->horizontalScroll();
-
-				int i = 5;
-				while (horizontalScroll > 0 || bob21->x < 136) {
-
-					horizontalScroll -= i;
-					if (horizontalScroll < 0)
-						horizontalScroll = 0;
-
-					//debug(0, "horizontalScroll = %i", horizontalScroll);
-					display->horizontalScroll(horizontalScroll);
-
-					if (horizontalScroll < 272 && bob21->x < 136)
-						bob21->x += (i/2);
-
-					bob22->x += i;
-
-					_logic->update();
-
-					if (_input->cutawayQuit())
-						return;
-
-				}
-
-				_input->fastMode(false);
-			}
-			break;
-
-		default:
-			warning("Unhandled special move: %i", index);
-			break;
-	}
-}
 
 byte *Cutaway::turnOnPeople(byte *ptr, CutawayObject &object) {
 	// Lines 1248-1259 in cutaway.c
@@ -1483,7 +894,7 @@
 				!object.moveToY && 
 				object.specialMove && 
 				object.objectNumber >= 0) {
-			actionSpecialMove(object.specialMove);
+			_logic->executeSpecialMove(object.specialMove);
 			object.specialMove = 0;
 		}
 
@@ -1778,7 +1189,7 @@
 		} // for()
 		
 		int16 specialMove = (int16)READ_BE_UINT16(ptr); ptr += 2;
-		actionSpecialMove(specialMove);
+		_logic->executeSpecialMove(specialMove);
 
 		_lastSong = (int16)READ_BE_UINT16(ptr); ptr += 2;
 	}





More information about the Scummvm-git-logs mailing list