aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Menshakov2009-11-08 21:59:26 +0000
committerVladimir Menshakov2009-11-08 21:59:26 +0000
commit79409d8ef1b14c3bf6d0863cb5bd6b8c81277574 (patch)
treea3fb3c28dce9d0de7fd83b5f64fd8831d5c6e5f5
parentb257892387a61ee5d150f573b9178ccfa9e60c8f (diff)
downloadscummvm-rg350-79409d8ef1b14c3bf6d0863cb5bd6b8c81277574.tar.gz
scummvm-rg350-79409d8ef1b14c3bf6d0863cb5bd6b8c81277574.tar.bz2
scummvm-rg350-79409d8ef1b14c3bf6d0863cb5bd6b8c81277574.zip
more improvements, added setTimerCallback()
svn-id: r45766
-rw-r--r--engines/teenagent/callbacks.cpp100
-rw-r--r--engines/teenagent/scene.h18
-rw-r--r--engines/teenagent/teenagent.cpp18
-rw-r--r--engines/teenagent/teenagent.h4
4 files changed, 93 insertions, 47 deletions
diff --git a/engines/teenagent/callbacks.cpp b/engines/teenagent/callbacks.cpp
index 40e8ceded9..53fa80517f 100644
--- a/engines/teenagent/callbacks.cpp
+++ b/engines/teenagent/callbacks.cpp
@@ -298,9 +298,10 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
playActorAnimation(968);
displayMessage(0x5511);
} else {
- playSound(80);
+ playSound(80, 3);
+ playSound(79, 4);
playActorAnimation(968);
- loadScene(6, Common::Point(280, 186));
+ loadScene(6, 280, 186, 4);
}
return true;
@@ -558,8 +559,9 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
case 0x4af4: //taking the crumbs
setOns(0, 0);
+ playSound(49, 6);
+ playSound(5, 13);
playActorAnimation(861);
- playSound(49);
inventory->add(0x57);
disableObject(6);
return true;
@@ -626,23 +628,23 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
case 0x4cf1: { //talking with mansion guard
SET_FLAG(0xda96, 1);
- if (Dialog::pop(scene, 0xdaa6, 529) != 0x1b4)
+ if (Dialog::pop(scene, 0xdaa6, 0, 529, 0xd1, 0xd9, 0, 1) != 0x1b4)
return true;
Common::Point p = scene->getPosition();
- moveTo(159, 189, 0);
- waitLanAnimationFrame(1, 1);
+ moveTo(189, 159, 0);
+ //waitLanAnimationFrame(1, 1);
playSound(5, 2);
playSound(5, 19);
playActorAnimation(550, true);
- playAnimation(551, 1, true);
+ playAnimation(551, 0, true);
waitAnimation();
moveTo(p, 2);
inventory->add(0x13);
playAnimation(529, 1);
- Dialog::pop(scene, 0xdaa6);
+ Dialog::pop(scene, 0xdaa6, 0, 529, 0xd1, 0xd9, 0, 1);
}
return true;
@@ -738,6 +740,9 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
} else {
SET_FLAG(0xDB9E, 1);
setOns(2, 0);
+ playSound(21, 9);
+ playSound(34, 21);
+ playSound(26, 30);
playActorAnimation(552);
setOns(2, 0x12);
inventory->add(0x14);
@@ -750,13 +755,18 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
return true;
SET_FLAG(0xDB9C, 1); //guard's drinking, boo!
- playAnimation(544, 1);
- displayMessage(0x3563);
- playSound(17);
+ playAnimation(544, 0);
+
+
setOns(0, 16);
+
enableObject(2);
- playAnimation(545, 1);
- Dialog::show(scene, 0x0917);
+
+ playSound(17, 5);
+ displayAsyncMessageInSlot(0x3563, 1, 60, 70);
+ playAnimation(545, 0);
+
+ Dialog::show(scene, 0x0917, 0, 546, 0xd1, 0xd9, 0, 1);
playActorAnimation(546);
SET_FLAG(0xDA96, 1);
SET_FLAG(0xDA97, 0);
@@ -867,17 +877,18 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
if (CHECK_FLAG(0xDBA5, 1)) { //dry laundry
SET_FLAG(0xDBA5, 2);
Dialog::show(scene, 0x1F4F, 0, 523, 0xd1, 0xe5, 0, 1);
- waitLanAnimationFrame(1, 1);
- playAnimation(604, 1);
+ //waitLanAnimationFrame(1, 1); //another long waiting
+ playAnimation(604, 0);
loadScene(21, scene->getPosition());
setOns(0, 0);
disableObject(4);
enableObject(12);
- playSound(46);
+ playSound(46, 5);
playAnimation(606, 1);
+ setOns(0, 33);
loadScene(23, scene->getPosition());
- playAnimation(605, 1);
+ playAnimation(605, 0);
Dialog::show(scene, 0x2002, 0, 523, 0xd1, 0xe5, 0, 1);
} else {
uint16 d = Dialog::pop(scene, 0xdada, 0, 523, 0xd1, 0xe5, 0, 1);
@@ -1471,7 +1482,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
playActorAnimation(610);
playSound(5, 25);
playActorAnimation(611);
- moveTo(16, scene->getPosition().y, 4);
+ moveTo(16, scene->getPosition().y, 4, true);
inventory->add(38);
disableObject(12);
return true;
@@ -1494,7 +1505,9 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
if (!CHECK_FLAG(0xDB92, 1))
Dialog::show(scene, 0x15a0, 0, 522, 0xd1, 0xd8, 0, 1); //can I search your drawers?
- playSound(66);
+ playSound(66, 5);
+ playSound(67, 20);
+ playSound(5, 23);
playActorAnimation(631);
inventory->add(47);
SET_FLAG(0xDBA7, 1);
@@ -1505,7 +1518,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
if (CHECK_FLAG(0xDB92, 1)) {
inventory->add(2);
disableObject(7);
- playSound(32);
+ playSound(32, 7);
setOns(0, 0);
playActorAnimation(520);
} else {
@@ -1522,7 +1535,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
case 0x5d24: //getting the fan
if (CHECK_FLAG(0xDB92, 1)) {
setLan(2, 0);
- playSound(32);
+ playSound(32, 7);
playActorAnimation(508);
disableObject(13);
inventory->add(7);
@@ -2283,9 +2296,9 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
waitAnimation();
displayAsyncMessage(0x3ae6, 3870, 1, 9, 0xd9);
- playSound(35);
+ playSound(35, 1);
playActorAnimation(622, true);
- playAnimation(624, 1, true);
+ playAnimation(624, 0, true);
displayMessage(0x3afd);
inventory->remove(43);
@@ -2443,7 +2456,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
obj->rect.bottom += 20;
obj->rect.save();
}
- playSound(10);
+ playSound(10, 3);
playAnimation(503, 0);
setLan(1, 0, 22);
disableObject(1, 22);
@@ -2501,11 +2514,11 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
return true;
case 0x88de:
- playSound(5);
- Dialog::show(scene, 0x1B5F, 523);
+ playSound(5, 2);
+ Dialog::show(scene, 0x1B5F, 0, 523, 0xd1, 0xe5, 0, 1);
playActorAnimation(537);
- playAnimation(538, 1);
- Dialog::show(scene, 0x1BE0, 523);
+ playAnimation(538, 0);
+ Dialog::show(scene, 0x1BE0, 0, 523, 0xd1, 0xe5, 0, 1);
return true;
case 0x890b:
@@ -2612,9 +2625,15 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
case 0x8b82: //use fan on laundry
setOns(0, 0);
- playSound(5);
+ playSound(5, 3);
+ playSound(5, 6);
+ playSound(5, 10);
+ playSound(92, 20);
+ playSound(92, 38);
+ playSound(92, 58);
+ displayAsyncMessage(0x464a, 36510, 58, 67);
playActorAnimation(602);
- displayMessage(0x464a);
+ playSound(5, 3);
playActorAnimation(603);
setOns(0, 27);
SET_FLAG(0xDBA5, 1);
@@ -2724,17 +2743,17 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
case 0x8f1d:
Dialog::show(scene, 0x2dd6);
- setLan(3, 0);
- setLan(4, 0);
- displayMessage(0x34c7);
for (uint i = 16; i <= 30; i += 2)
playSound(56, i);
playSound(2, 64);
playSound(3, 74);
+ displayAsyncMessage(0x34c7, 25812, 35, 50);
playActorAnimation(516, true);
playAnimation(517, 2, true);
playAnimation(518, 3, true);
waitAnimation();
+ setLan(3, 0);
+ setLan(4, 0);
disableObject(2);
disableObject(3);
inventory->remove(2);
@@ -2773,7 +2792,6 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
} else {
playSound(5, 11);
playSound(49, 21);
- moveTo(scene->getPosition().x, 99, 0);
playActorAnimation(632);
setOns(5, 40);
moveTo(239, 139, 0, true);
@@ -3058,9 +3076,9 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
if (CHECK_FLAG(0xDBD9, 1)) {
displayMessage(0x5326); //i'd better catch johnny
} else {
- playSound(88);
+ playSound(88, 4);
playActorAnimation(808);
- loadScene(36, 41, 195);
+ loadScene(36, 41, 195, 2);
}
return true;
@@ -3689,7 +3707,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
playActorAnimation(618);
disableObject(5);
setOns(0, 0);
- playSound(31);
+ playSound(31, 1);
playActorAnimation(619);
inventory->add(42);
displayMessage(0x3989);
@@ -3730,7 +3748,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
playSound(24, 38);
playSound(23, 44);
playActorAnimation(664);
- playAnimation(665, 2);
+ playAnimation(665, 1);
displayMessage(0x3cbc);
displayMessage(0x3cea);
inventory->remove(37);
@@ -3802,11 +3820,13 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
return true;
case 0x9d90:
+ hideActor();
loadScene(34, scene->getPosition());
- Dialog::show(scene, 0x6f60, 987, 986);
- playActorAnimation(990, true);
+ Dialog::show(scene, 0x6f60, 986, 987, 0xd9, 0xd0, 1, 2);
+ playAnimation(990, 0, true);
playAnimation(991, 1, true);
waitAnimation();
+ showActor();
return true;
case 0x9de5:
diff --git a/engines/teenagent/scene.h b/engines/teenagent/scene.h
index 0dd04f5893..411cbb9477 100644
--- a/engines/teenagent/scene.h
+++ b/engines/teenagent/scene.h
@@ -54,14 +54,19 @@ struct SceneEvent {
kHideActor,
kWaitForAnimation,
kWaitLanAnimationFrame,
- kCreditsMessage,
- kQuit //16
+ kCreditsMessage, //16
+ kTimer,
+ kQuit
} type;
Common::String message;
byte color;
byte slot;
- uint16 animation;
+ union {
+ uint16 animation;
+ uint16 callback;
+ };
+ uint16 timer;
byte orientation;
Common::Point dst;
byte scene; //fixme: put some of these to the union?
@@ -78,7 +83,7 @@ struct SceneEvent {
byte object;
SceneEvent(Type type_) :
- type(type_), message(), color(0xd1), slot(0), animation(0), orientation(0), dst(),
+ type(type_), message(), color(0xd1), slot(0), animation(0), timer(0), orientation(0), dst(),
scene(0), ons(0), lan(0), music(0), sound(0), object(0) {}
void clear() {
@@ -88,6 +93,7 @@ struct SceneEvent {
slot = 0;
orientation = 0;
animation = 0;
+ timer = 0;
dst.x = dst.y = 0;
scene = 0;
ons = 0;
@@ -102,8 +108,8 @@ struct SceneEvent {
}
void dump() const {
- debug(0, "event[%d]: \"%s\"[%02x], slot: %d, animation: %u, dst: (%d, %d) [%u], scene: %u, ons: %u, lan: %u, object: %u, music: %u, sound: %u",
- (int)type, message.c_str(), color, slot, animation, dst.x, dst.y, orientation, scene, ons, lan, object, music, sound
+ debug(0, "event[%d]: \"%s\"[%02x], slot: %d, animation: %u, timer: %u, dst: (%d, %d) [%u], scene: %u, ons: %u, lan: %u, object: %u, music: %u, sound: %u",
+ (int)type, message.c_str(), color, slot, animation, timer, dst.x, dst.y, orientation, scene, ons, lan, object, music, sound
);
}
};
diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp
index 29f942f25d..39b60289a5 100644
--- a/engines/teenagent/teenagent.cpp
+++ b/engines/teenagent/teenagent.cpp
@@ -401,6 +401,18 @@ void TeenAgentEngine::displayAsyncMessage(uint16 addr, uint16 position, uint16 f
scene->push(event);
}
+void TeenAgentEngine::displayAsyncMessageInSlot(uint16 addr, byte slot, uint16 first_frame, uint16 last_frame, byte color) {
+ SceneEvent event(SceneEvent::kMessage);
+ event.message = parseMessage(addr);
+ event.slot = slot;
+ event.color = color;
+ event.first_frame = first_frame;
+ event.last_frame = last_frame;
+
+ scene->push(event);
+}
+
+
void TeenAgentEngine::displayCredits(uint16 addr) {
SceneEvent event(SceneEvent::kCreditsMessage);
@@ -580,6 +592,12 @@ void TeenAgentEngine::waitLanAnimationFrame(byte slot, uint16 frame) {
scene->push(event);
}
+void TeenAgentEngine::setTimerCallback(uint16 addr, uint16 frames) {
+ SceneEvent event(SceneEvent::kTimer);
+ event.callback = addr;
+ event.timer = frames;
+ scene->push(event);
+}
void TeenAgentEngine::playSoundNow(byte id) {
Resources *res = Resources::instance();
diff --git a/engines/teenagent/teenagent.h b/engines/teenagent/teenagent.h
index 6623654334..36ae9ba57b 100644
--- a/engines/teenagent/teenagent.h
+++ b/engines/teenagent/teenagent.h
@@ -69,6 +69,7 @@ public:
void displayMessage(uint16 addr, byte color = 0xd1, uint16 position = 0);
void displayMessage(const Common::String &str, byte color = 0xd1, uint16 position = 0);
void displayAsyncMessage(uint16 addr, uint16 position, uint16 first_frame, uint16 last_frame, byte color = 0xd1);
+ void displayAsyncMessageInSlot(uint16 addr, byte slot, uint16 first_frame, uint16 last_frame, byte color = 0xd1);
void displayCredits(uint16 addr);
void displayCutsceneMessage(uint16 addr, uint16 position);
void moveTo(const Common::Point &dst, byte o, bool warp = false);
@@ -85,7 +86,7 @@ public:
void rejectMessage();
void playMusic(byte id); //schedules play
- void playSound(byte id, byte skip_frames = 1);
+ void playSound(byte id, byte skip_frames);
void playSoundNow(byte id);
void enableObject(byte id, byte scene_id = 0);
void disableObject(byte id, byte scene_id = 0);
@@ -93,6 +94,7 @@ public:
void showActor();
void waitAnimation();
void waitLanAnimationFrame(byte slot, uint16 frame);
+ void setTimerCallback(uint16 addr, uint16 frames);
Common::RandomSource random;