diff options
| author | Vladimir Menshakov | 2009-11-09 23:22:35 +0000 | 
|---|---|---|
| committer | Vladimir Menshakov | 2009-11-09 23:22:35 +0000 | 
| commit | a1496515ce02e3ab39ce076622c639d18577311f (patch) | |
| tree | e809f2320dc11a43fdc981de104a600fc0080a2e | |
| parent | 1c5d8849ab61a02fad4f1930fb655bcd085997ca (diff) | |
| download | scummvm-rg350-a1496515ce02e3ab39ce076622c639d18577311f.tar.gz scummvm-rg350-a1496515ce02e3ab39ce076622c639d18577311f.tar.bz2 scummvm-rg350-a1496515ce02e3ab39ce076622c639d18577311f.zip  | |
more fixes for chapter 3. 
svn-id: r45790
| -rw-r--r-- | engines/teenagent/callbacks.cpp | 197 | ||||
| -rw-r--r-- | engines/teenagent/teenagent.cpp | 4 | ||||
| -rw-r--r-- | engines/teenagent/teenagent.h | 2 | 
3 files changed, 129 insertions, 74 deletions
diff --git a/engines/teenagent/callbacks.cpp b/engines/teenagent/callbacks.cpp index 44bb94903e..eaad15dd5f 100644 --- a/engines/teenagent/callbacks.cpp +++ b/engines/teenagent/callbacks.cpp @@ -1844,7 +1844,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  		return true;  	case 0x70bb: -		Dialog::pop(scene, 0xdb24, 709); +		Dialog::pop(scene, 0xdb24, 0, 709, 0xd1, 0xef, 0, 1);  		return true;  	case 0x71ae: @@ -1965,6 +1965,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  			//call 73e6  			playSound(71, 3);  			playActorAnimation(700); +			playAnimation(0, 0, true);  		} else {  			SET_FLAG(0xdbc5, 1); @@ -1973,7 +1974,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  			playSound(71, 3);  			playActorAnimation(700); -			playAnimation(CHECK_FLAG(0xDBC6, 0) ? 701 : 702, 1); +			playAnimation(CHECK_FLAG(0xDBC6, 0) ? 701 : 702, 0, true, true, true);  			if (CHECK_FLAG(0xDBC6, 1)) {  				displayMessage(0x4da6); @@ -2036,25 +2037,29 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  				playSound(88, 4);  				playActorAnimation(979);  				loadScene(37, 51, 183); -				Dialog::show(scene, 0x54ea, 768, 769); -				playActorAnimation(770, true); -				playAnimation(771, 1, true); -				waitAnimation(); -				Dialog::show(scene, 0x5523, 768, 769); + +				Dialog::show(scene, 0x54ea, 768, 769, 0xd9, 0xe5, 1, 2); +				playAnimation(770, 0, true, true, true); +				playAnimation(771, 1, true, true, true); +				Dialog::show(scene, 0x5523, 0, 0, 0xd1, 0xd1, 0, 0); +				playAnimation(770, 0, true, true, true); +				playAnimation(771, 1, true, true, true);  				playSound(5, 3);  				playSound(56, 12);  				playSound(23, 20);  				playSound(75, 25);  				playActorAnimation(772); -				playActorAnimation(774, true); -				playAnimation(773, 1, true); +				playActorAnimation(773, true); +				playAnimation(774, 0, true);  				waitAnimation();  				setOns(0, 74); -				Dialog::show(scene, 0x5556, 775); -				playAnimation(776, 1); -				Dialog::show(scene, 0x55f7, 777, 778); -				playActorAnimation(779, true); +				hideActor(); +				Dialog::show(scene, 0x5556, 775, 775, 0xd0, 0xd0, 1, 1); +				playAnimation(771, 1, true, true, true); +				playAnimation(776, 0); +				Dialog::show(scene, 0x55f7, 777, 778, 0xd0, 0xe5, 1, 2); //i have to kill you anyway +				playAnimation(779, 0, true);  				playAnimation(780, 1, true);  				waitAnimation(); @@ -2067,8 +2072,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  				playAnimation(781, 2, true);  				playAnimation(782, 3, true);  				waitAnimation(); -				setOns(1, 75); -				setOns(2, 76); +				  				for (byte i = 1; i <= 6; ++i)  					playSound(58, i);  				playSound(58, 9); @@ -2080,13 +2084,16 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  				playAnimation(784, 3, true);  				waitAnimation(); -				setOns(1, 77); -				setOns(2, 78); +				setOns(1, 75); +				setOns(2, 76);  				playAnimation(785, 2, true);  				playAnimation(786, 3, true);  				waitAnimation(); +				setOns(1, 77); +				setOns(2, 78); +  				moveTo(112, 183, 2);  				setOns(3, 79);  				setOns(0, 0); @@ -2098,17 +2105,18 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  				playSound(32, 2);  				playSound(24, 7); -				playAnimation(789, 2, true);  				playAnimation(790, 3, true); +				playAnimation(789, 2, true);  				waitAnimation();  				setOns(0, 80); -				Dialog::show(scene, 0x5665); -				playAnimation(792, 3); +				Dialog::show(scene, 0x5665, 0, 791, 0xd1, 0xd0, 0, 4); +				playAnimation(792, 3, true);  				moveTo(40, 171, 4);  				setOns(3, 81, 35);  				enableObject(12, 35); +				playAnimation(0, 3, true);  				loadScene(31, 298, 177, 4);  				SET_FLAG(0xDBD9, 1); @@ -2131,6 +2139,13 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  	case 0x7ad0:  	case 0x7ad7:  		return !processCallback(0x70e0); +		 +	case 0x7ab9: +		if (CHECK_FLAG(0xDBB6, 1)) +			return false; +		Dialog::show(scene, 0x37d0, 0, 0, 0xd1, 0xd1, 0, 0); +		SET_FLAG(0xDBB6, 1); +		return true;  	case 0x7ade:  		if (CHECK_FLAG(0xdbcd, 1)) { @@ -2933,9 +2948,10 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  	case 0x6805:  		processCallback(0x6849); +		playSound(32, 12);  		playActorAnimation(694);  		playSound(15, 8); -		playAnimation(693, 1); +		playAnimation(693, 0);  		setOns(6, 0);  		displayMessage(0x4cc7);  		inventory->add(54); @@ -2965,7 +2981,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  				}  			} else {  				playSound(15, 8); //secret compartment -				playAnimation(692, 1); +				playAnimation(692, 0);  				setOns(6, 59);  				enableObject(4);  				displayMessage(0x4c84); @@ -3136,7 +3152,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  		return true;  	case 0x6c83: -		Dialog::pop(scene, 0xdb2e); +		Dialog::pop(scene, 0xdb2e, 0, 727, 0xd1, 0xef, 0, 1);  		scene->getObject(1)->setName((const char *)res->dseg.ptr(0xaa94));  		SET_FLAG(0xDBD1, 1);  		return true; @@ -3151,63 +3167,74 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  	case 0x6cc4: //secret diary  		playActorAnimation(754); +		hideActor(); +		  		displayCutsceneMessage(0x517b, 30430);  		playMusic(3);  		loadScene(11, scene->getPosition()); +  		playAnimation(750, 2); -		Dialog::show(scene, 0x4f50, 751, 529); +		Dialog::show(scene, 0x4f50, 751, 529, 0xe5, 0xd9, 2, 1); -		playActorAnimation(752, true); +		playAnimation(752, 0, true);  		playAnimation(753, 1, true);  		waitAnimation(); -		Dialog::show(scene, 0x5168, 751, 529); - +		Dialog::show(scene, 0x5168, 529, 751, 0xd9, 0xe5, 1, 2); +		  		loadScene(30, scene->getPosition()); -		Dialog::show(scene, 0x5168, 733, 734); +		Dialog::show(scene, 0x449e, 733, 734, 0xe5, 0xd0, 2, 3);  		playSound(75, 13);  		playSound(32, 22); -		playActorAnimation(735, true); -		playAnimation(736, 1, true); +		playAnimation(735, 1, true); +		playAnimation(736, 2, true);  		waitAnimation(); -		Dialog::show(scene, 0x46cf, 737, 738); +		Dialog::show(scene, 0x46cf, 737, 738, 0xd0, 0xe5, 3, 2); +  		playSound(32, 1); -		playActorAnimation(739, true); -		playAnimation(740, 1, true); +		playAnimation(739, 1, true); +		playAnimation(740, 2, true);  		waitAnimation(); -		Dialog::show(scene, 0x4772, 733, 734); +		Dialog::show(scene, 0x4772, 733, 734, 0xe5, 0xd0, 2, 3); -		playActorAnimation(742, true); -		playAnimation(741, 1, true); +		playAnimation(742, 1, true); +		playAnimation(741, 2, true);  		waitAnimation(); -		Dialog::show(scene, 0x481c, 733, 743); +		Dialog::show(scene, 0x481c, 743, 733, 0xd0, 0xe5, 3, 2); //where's my wallet?? -		playActorAnimation(744, true); -		playAnimation(745, 1, true); +		playAnimation(744, 1, true); +		playAnimation(745, 2, true);  		waitAnimation(); -		Dialog::show(scene, 0x4873, 733, 734); +		Dialog::show(scene, 0x4873, 734, 733, 0xd0, 0xe5, 3, 2); -		playActorAnimation(746, true); -		playAnimation(747, 1, true); +		playAnimation(746, 1, true); +		playAnimation(747, 2, true);  		waitAnimation(); -		Dialog::show(scene, 0x4da5, 734); -		Dialog::show(scene, 0x4eb9, 748); -		Dialog::show(scene, 0x4f15, 749); -		Dialog::show(scene, 0x4f2f, 748); + +		 +		Dialog::show(scene, 0x4da5, 734, 734, 0xd0, 0xd0, 3, 3); +		Dialog::show(scene, 0x4eb9, 748, 748, 0xd0, 0xd0, 3, 3); +		Dialog::show(scene, 0x4f15, 749, 749, 0xd0, 0xd0, 3, 3); +		Dialog::show(scene, 0x4f2f, 748, 748, 0xd0, 0xd0, 3, 3);  		playMusic(10);  		loadScene(32, scene->getPosition()); +		showActor();  		playSound(26, 10);  		playActorAnimation(755);  		moveRel(0, 0, 3); -		Dialog::show(scene, 0x51bf); +		Dialog::show(scene, 0x51bf, 0, 0, 0xd1, 0xd1, 0, 0); + +		hideActor();  		loadScene(31, scene->getPosition()); -		Dialog::show(scene, 0x539f, 763, 764); +		Dialog::show(scene, 0x539f, 763, 764, 0xd9, 0xd0, 1, 2); +  		loadScene(32, scene->getPosition()); -		Dialog::show(scene, 0x52c3); +		showActor(); +		Dialog::show(scene, 0x52c3, 0, 0, 0xd1, 0xd1, 0, 0); //i have to hide somewhere  		disableObject(3);  		enableObject(7); @@ -3225,8 +3252,10 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  	case 0x6f75: //hiding in left corner  		moveRel(0, 0, 3);  		playActorAnimation(756); +		hideActor();  		playAnimation(758, 1); -		Dialog::show(scene, 0x52e6, 759); +		Dialog::show(scene, 0x52e6, 759, 759, 0xd0, 0xd0, 2, 2); //I have to buy... +  		playSound(40, 5);  		playSound(52, 13);  		playSound(52, 17); @@ -3241,12 +3270,12 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  		playSound(58, 12);  		playSound(58, 14);  		playAnimation(765, 1); -		Dialog::show(scene, 0x5443, 766); -		loadScene(31, scene->getPosition()); -		Dialog::show(scene, 0x5358, 761); -		playAnimation(762, 1); +		Dialog::show(scene, 0x5443, 766, 766, 0xd9, 0xd9, 1, 1);  		loadScene(32, scene->getPosition()); +		Dialog::show(scene, 0x5358, 761, 761, 0xd0, 0xd0, 2, 2); +		playAnimation(762, 1);  		setOns(2, 0); +		showActor();  		playActorAnimation(757);  		moveRel(0, 0, 1);  		displayMessage(0x51e7); @@ -3308,6 +3337,12 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  		playActorAnimation(976);  		displayMessage(0x5955);  		return true; +		 +	case 0x77d5: +		playSound(89, 6); +		playActorAnimation(978); +		loadScene(31, 298, 177, 4); +		return true;  	case 0x79e4:  		processCallback(0x6849); @@ -3372,6 +3407,13 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  			return true;  		} else  			return false; +			 +	case 0x7af7: +		if (CHECK_FLAG(0xDBD0, 1)) { +			displayMessage(0x5082); +			return true; +		} else  +			return false;  	case 0x7b09: {  		byte v = GET_FLAG(0xDBD6); @@ -3435,12 +3477,14 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  		}  		displayMessage(0x50e1); +		waitLanAnimationFrame(1, 1); +  		playSound(5, 3);  		playSound(5, 39); - -		displayMessage(0x5124); //fixme: async! delay 35? position 40388 +		displayAsyncMessage(0x5124, 40388, 9, 35, 0xd0);  		playActorAnimation(728); -		Dialog::show(scene, 0x3d17); +		//fixme: add 727 animation +		Dialog::show(scene, 0x3d17, 0, 0, 0xd1, 0xef, 0, 1);  		SET_FLAG(0xDBD2, 1);  		processCallback(0x9175);  		return true; @@ -3454,10 +3498,13 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  			return true;  		}  		displayMessage(0x5138); +		waitLanAnimationFrame(1, 1); +  		playSound(5, 3);  		playSound(5, 23);  		playActorAnimation(729); -		Dialog::show(scene, 0x3d70); +		//fixme: add 727 animation +		Dialog::show(scene, 0x3d70, 0, 0, 0xd1, 0xef, 0, 1);  		SET_FLAG(0xDBD3, 1);  		processCallback(0x9175);  		return true; @@ -3471,10 +3518,13 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  			return true;  		}  		displayMessage(0x5161); +		waitLanAnimationFrame(1, 1); +  		playSound(5, 3);  		playSound(5, 25);  		playActorAnimation(730); -		Dialog::show(scene, 0x3dd6); +		//fixme: add 727 animation +		Dialog::show(scene, 0x3dd6, 0, 0, 0xd1, 0xef, 0, 1);  		SET_FLAG(0xDBD4, 1);  		processCallback(0x9175);  		return true; @@ -3485,36 +3535,39 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  		playSound(52, 10);  		playActorAnimation(711);  		moveRel(0, 0, 4); -		Dialog::show(scene, 0x3b21); +		Dialog::show(scene, 0x3b21, 0, 709, 0xd1, 0xef, 0, 1);  		moveTo(300, 190, 4);  		inventory->remove(64);  		disableObject(8); -		playAnimation(712, 1); +		playAnimation(712, 0);  		setOns(2, 0);  		playSound(15, 26);  		playSound(15, 28);  		playSound(16, 37); -		playAnimation(713, 1); -		Dialog::show(scene, 0x3c0d); +		playAnimation(713, 0); +		Dialog::show(scene, 0x3c0d, 0, 709, 0xd1, 0xef, 0, 1);  		playSound(85, 2); -		playAnimation(714, 1); +		playAnimation(714, 0);  		setLan(1, 0);  		disableObject(1);  		{  			Object *obj = scene->getObject(2); -			obj->actor_rect = Rect(81, 160, 81, 160); +			obj->actor_rect.left = obj->actor_rect.right = 81; +			obj->actor_rect.top = obj->actor_rect.bottom = 160;  			obj->actor_orientation = 4;  			obj->save();  		}  		{  			Object *obj = scene->getObject(3); -			obj->actor_rect = Rect(63, 168, 63, 168); +			obj->actor_rect.left = obj->actor_rect.right = 64; +			obj->actor_rect.top = obj->actor_rect.bottom = 168;  			obj->actor_orientation = 4;  			obj->save();  		}  		{  			Object *obj = scene->getObject(10); -			obj->actor_rect = Rect(105, 160, 105, 160); +			obj->actor_rect.left = obj->actor_rect.right = 105; +			obj->actor_rect.top = obj->actor_rect.bottom = 160;  			obj->actor_orientation = 1;  			obj->save();  		} @@ -3582,10 +3635,10 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  				if (CHECK_FLAG(0xDBC5, 1)) { //tv on  					if (!CHECK_FLAG(0xDBC7, 1))  						displayMessage(0x4d93); //the tape started -					playAnimation(702, 1); //fixme: we need some overlay animation support +					playAnimation(702, 0, true, true, true); //fixme: we need some overlay animation support  					SET_FLAG(0xDBC6, 1);  					if (!CHECK_FLAG(0xDBC7, 1)) { -						Dialog::show(scene, 0x392c, 702); +						Dialog::show(scene, 0x392c, 0, 0, 0xd1, 0xd0, 0, 1);  						SET_FLAG(0xDBC7, 1);  					}  					reloadLan(); @@ -3865,12 +3918,14 @@ bool TeenAgentEngine::processCallback(uint16 addr) {  			Dialog::show(scene, 0x58a9);  			Object *obj = scene->getObject(1); -			obj->actor_rect = Rect(270, 193, 270, 193); +			obj->actor_rect.left = obj->actor_rect.right = 270; +			obj->actor_rect.top = obj->actor_rect.bottom = 193;  			obj->actor_orientation = 2;  			obj->save();  			obj = scene->getObject(3); -			obj->actor_rect = Rect(254, 193, 254, 193); +			obj->actor_rect.left = obj->actor_rect.right = 254; +			obj->actor_rect.top = obj->actor_rect.bottom = 193;  			obj->actor_orientation = 1;  			obj->save(); diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp index 3a5db2df94..f59271e14d 100644 --- a/engines/teenagent/teenagent.cpp +++ b/engines/teenagent/teenagent.cpp @@ -501,10 +501,10 @@ void TeenAgentEngine::moveRel(int16 x, int16 y, byte o, bool warp) {  	scene->push(event);  } -void TeenAgentEngine::playAnimation(uint16 id, byte slot, bool async, bool ignore) { +void TeenAgentEngine::playAnimation(uint16 id, byte slot, bool async, bool ignore, bool loop) {  	SceneEvent event(SceneEvent::kPlayAnimation);  	event.animation = id; -	event.slot = slot | (ignore? 0x20: 0); +	event.slot = slot | (ignore? 0x20: 0) | (loop? 0x80: 0);  	scene->push(event);  	if (!async)  		waitAnimation(); diff --git a/engines/teenagent/teenagent.h b/engines/teenagent/teenagent.h index b357b75509..7da0eb5f35 100644 --- a/engines/teenagent/teenagent.h +++ b/engines/teenagent/teenagent.h @@ -77,7 +77,7 @@ public:  	void moveTo(Object *obj);  	void moveRel(int16 x, int16 y, byte o, bool warp = false);  	void playActorAnimation(uint16 id, bool async = false, bool ignore = false); -	void playAnimation(uint16 id, byte slot, bool async = false, bool ignore = false); +	void playAnimation(uint16 id, byte slot, bool async = false, bool ignore = false, bool loop = false);  	void loadScene(byte id, const Common::Point &pos, byte o = 0);  	void loadScene(byte id, uint16 x, uint16 y, byte o = 0);  	void setOns(byte id, byte value, byte scene_id = 0);  | 
