aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorVladimir Menshakov2009-11-12 10:32:29 +0000
committerVladimir Menshakov2009-11-12 10:32:29 +0000
commitec235d7463c69784fb2de1cdf915279f37a714e1 (patch)
tree654a934d1b7c5a43c19ce639dab296aff14050ee /engines
parent94f5c0a2f85a181c6b42f2851270b46de603e1cb (diff)
downloadscummvm-rg350-ec235d7463c69784fb2de1cdf915279f37a714e1.tar.gz
scummvm-rg350-ec235d7463c69784fb2de1cdf915279f37a714e1.tar.bz2
scummvm-rg350-ec235d7463c69784fb2de1cdf915279f37a714e1.zip
fixed dialog positioning for mark
svn-id: r45857
Diffstat (limited to 'engines')
-rw-r--r--engines/teenagent/callbacks.cpp7
-rw-r--r--engines/teenagent/dialog.cpp6
-rw-r--r--engines/teenagent/scene.cpp66
-rw-r--r--engines/teenagent/teenagent.cpp8
4 files changed, 51 insertions, 36 deletions
diff --git a/engines/teenagent/callbacks.cpp b/engines/teenagent/callbacks.cpp
index 91ce4b64f2..b638335e76 100644
--- a/engines/teenagent/callbacks.cpp
+++ b/engines/teenagent/callbacks.cpp
@@ -100,6 +100,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
setLan(2, 1);
Dialog::show(scene, 0x748e, 914, 915, 0xe7, 0xd7, 2, 1);
displayCredits(0xe3c2);
+
loadScene(42, 139, 156, 3);
playSound(15, 20);
playAnimation(916, 1);
@@ -112,7 +113,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
playAnimation(917, 1, true);
waitAnimation();
displayCredits(0xe3e6);
-
+
loadScene(40, 139, 156, 3);
playMusic(3);
Dialog::show(scene, 0x750d, 920, 924, 0xe7, 0xeb, 1, 2); //as i told you, our organization...
@@ -120,7 +121,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
playAnimation(925, 0, true);
playAnimation(926, 1, true);
waitAnimation();
- Dialog::show(scene, 0x78a6, 927, 920, 0xeb, 0xeb, 2, 1);
+ Dialog::show(scene, 0x78a6, 927, 920, 0xeb, 0xe7, 2, 1);
displayCredits(0xe3ff);
loadScene(39, 139, 156, 3);
@@ -163,7 +164,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
playAnimation(851, 0, true);
playActorAnimation(934, true);
waitAnimation();
- loadScene(10, 136, 153);
+ loadScene(10, 136, 153, 3);
return true;
diff --git a/engines/teenagent/dialog.cpp b/engines/teenagent/dialog.cpp
index fa4f509014..17a2378fb5 100644
--- a/engines/teenagent/dialog.cpp
+++ b/engines/teenagent/dialog.cpp
@@ -29,8 +29,6 @@
namespace TeenAgent {
void Dialog::show(Scene *scene, uint16 addr, uint16 animation1, uint16 animation2, byte color1, byte color2, byte slot1, byte slot2) {
- --slot1;
- --slot2;
debug(0, "Dialog::show(%04x, %u:%u, %u:%u)", addr, slot1, animation1, slot2, animation2);
Resources *res = Resources::instance();
int n = 0;
@@ -102,9 +100,9 @@ void Dialog::show(Scene *scene, uint16 addr, uint16 animation1, uint16 animation
SceneEvent e(SceneEvent::kMessage);
e.message = message;
e.color = color;
- if (animation1 != 0 && color == color1)
+ if (color == color1)
e.slot = slot1;
- if (animation2 != 0 && color == color2)
+ if (color == color2)
e.slot = slot2;
scene->push(e);
message.clear();
diff --git a/engines/teenagent/scene.cpp b/engines/teenagent/scene.cpp
index 48e0df5fe5..ed0de66be9 100644
--- a/engines/teenagent/scene.cpp
+++ b/engines/teenagent/scene.cpp
@@ -392,8 +392,16 @@ bool Scene::render(OSystem *system) {
}
}
+ //render on
+ if (on.pixels != NULL) {
+ if (_id != 16 || getOns(16)[0] != 0) {
+ on.render(surface); //do not render boat on isle. I double checked all callbacks, there's no code switching off the boat :(
+ }
+ }
+
bool got_any_animation = false;
+
for (byte i = 0; i < 4; ++i) {
Animation *a = custom_animation + i;
Surface *s = a->currentFrame();
@@ -495,14 +503,6 @@ bool Scene::render(OSystem *system) {
}
}
- //render on
- if (on.pixels != NULL) {
- if (_id != 16 || getOns(16)[0] != 0) {
- on.render(surface); //do not render boat on isle. I double checked all callbacks, there's no code switching off the boat :(
- }
- }
-
-
if (!message.empty()) {
bool visible = true;
if (message_first_frame != 0 && message_animation != NULL) {
@@ -634,8 +634,8 @@ bool Scene::processEventQueue() {
message_timer = 0;
message_first_frame = current_event.first_frame;
message_last_frame = current_event.last_frame;
- if (current_event.slot < 4) {
- message_animation = custom_animation + current_event.slot;
+ if (current_event.slot > 0) {
+ message_animation = custom_animation + (current_event.slot - 1);
//else if (!animation[current_event.slot].empty())
// message_animation = animation + current_event.slot;
} else
@@ -652,16 +652,19 @@ bool Scene::processEventQueue() {
} else {
p = current_event.dst;
}
- //FIXME: rewrite it:
- if (current_event.slot < 4) {
- const Surface *s = custom_animation[current_event.slot].currentFrame(0);
+
+ byte message_slot = current_event.slot;
+ if (message_slot != 0) {
+ --message_slot;
+ assert(message_slot < 4);
+ const Surface *s = custom_animation[message_slot].currentFrame(0);
if (s == NULL)
- s = animation[current_event.slot].currentFrame(0);
+ s = animation[message_slot].currentFrame(0);
if (s != NULL) {
p.x = s->x + s->w / 2;
p.y = s->y;
} else
- warning("no animation in slot %u", current_event.slot);
+ warning("no animation in slot %u", message_slot);
}
message_pos = messagePosition(message, p);
message_color = current_event.color;
@@ -671,20 +674,33 @@ bool Scene::processEventQueue() {
}
break;
- case SceneEvent::kPlayAnimation:
- if (current_event.animation != 0) {
- debug(0, "playing animation %u in slot %u", current_event.animation, current_event.slot & 3);
- playAnimation(current_event.slot & 3, current_event.animation, (current_event.slot & 0x80) != 0, (current_event.slot & 0x40) != 0, (current_event.slot & 0x20) != 0);
- } else {
- debug(0, "cancelling animation in slot %u", current_event.slot & 3);
- custom_animation[current_event.slot & 3].free();
+ case SceneEvent::kPlayAnimation: {
+ byte slot = current_event.slot & 7; //0 - mark's
+ if (current_event.animation != 0) {
+ if (slot != 0) {
+ --slot;
+ debug(0, "playing animation %u in slot %u", current_event.animation, slot);
+ assert(slot < 4);
+ playAnimation(slot, current_event.animation, (current_event.slot & 0x80) != 0, (slot & 0x40) != 0, (slot & 0x20) != 0);
+ }
+ } else {
+ if (slot != 0) {
+ --slot;
+ debug(0, "cancelling animation in slot %u", slot);
+ assert(slot < 4);
+ custom_animation[slot].free();
+ }
+ }
+ current_event.clear();
}
- current_event.clear();
break;
case SceneEvent::kPauseAnimation:
- debug(0, "pause animation in slot %u", current_event.slot & 3);
- custom_animation[current_event.slot & 3].paused = (current_event.slot & 0x80) != 0;
+ if (current_event.slot != 0) {
+ --current_event.slot;
+ debug(0, "pause animation in slot %u", current_event.slot & 3);
+ custom_animation[current_event.slot & 3].paused = (current_event.slot & 0x80) != 0;
+ }
current_event.clear();
break;
diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp
index f59271e14d..51f736d397 100644
--- a/engines/teenagent/teenagent.cpp
+++ b/engines/teenagent/teenagent.cpp
@@ -400,7 +400,7 @@ void TeenAgentEngine::displayMessage(const Common::String &str, byte color, uint
SceneEvent event(SceneEvent::kMessage);
event.message = str;
event.color = color;
- event.slot = 4;
+ event.slot = 0;
event.dst.x = position % 320;
event.dst.y = position / 320;
@@ -414,7 +414,7 @@ void TeenAgentEngine::displayMessage(uint16 addr, byte color, uint16 position) {
void TeenAgentEngine::displayAsyncMessage(uint16 addr, uint16 position, uint16 first_frame, uint16 last_frame, byte color) {
SceneEvent event(SceneEvent::kMessage);
event.message = parseMessage(addr);
- event.slot = 4;
+ event.slot = 0;
event.color = color;
event.dst.x = position % 320;
event.dst.y = position / 320;
@@ -427,7 +427,7 @@ void TeenAgentEngine::displayAsyncMessage(uint16 addr, uint16 position, uint16 f
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.slot = slot + 1;
event.color = color;
event.first_frame = first_frame;
event.last_frame = last_frame;
@@ -504,7 +504,7 @@ void TeenAgentEngine::moveRel(int16 x, int16 y, byte o, bool warp) {
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) | (loop? 0x80: 0);
+ event.slot = (slot + 1) | (ignore? 0x20: 0) | (loop? 0x80: 0);
scene->push(event);
if (!async)
waitAnimation();