aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/kstring.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/kstring.cpp')
-rw-r--r--engines/sci/engine/kstring.cpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index 0de81724b4..21ca298d18 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -727,9 +727,6 @@ reg_t kGetFarText(EngineState *s, int funct_nr, int argc, reg_t *argv) {
static MessageState state;
reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
- if (!state.isInitialized())
- message_state_initialize(s->resmgr, &state);
-
MessageTuple tuple;
switch (UKPV(0)) {
@@ -738,9 +735,6 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
case 3:
case 4:
case 5:
- if (!state.loadRes(UKPV(1)))
- return NULL_REG;
-
tuple.noun = UKPV(2);
tuple.verb = UKPV(3);
tuple.cond = UKPV(4);
@@ -749,7 +743,7 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
switch (UKPV(0)) {
case 0 :
- if (state.getMessage(&tuple)) {
+ if (state.loadRes(s->resmgr, UKPV(1), true) && state.getMessage(&tuple)) {
char *buffer = NULL;
if ((argc == 7) && (argv[6] != NULL_REG))
@@ -759,6 +753,7 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
if (buffer)
state.getText(buffer);
+
// Talker id
return make_reg(0, talker);
} else {
@@ -783,6 +778,7 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
if (buffer)
state.getText(buffer);
+
// Talker id
return make_reg(0, talker);
} else {
@@ -796,11 +792,14 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
return NULL_REG;
}
- case 2:
- if (state.getMessage(&tuple))
- return make_reg(0, state.getLength() + 1);
+ case 2: {
+ MessageState tempState;
+
+ if (tempState.loadRes(s->resmgr, UKPV(1), false) && tempState.getMessage(&tuple))
+ return make_reg(0, tempState.getLength() + 1);
else
return NULL_REG;
+ }
default:
warning("kMessage subfunction %i invoked (not implemented)", UKPV(0));
}
@@ -809,9 +808,6 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
}
reg_t kGetMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
- if (!state.isInitialized())
- message_state_initialize(s->resmgr, &state);
-
MessageTuple tuple;
tuple.noun = UKPV(0);
int module = UKPV(1);
@@ -819,7 +815,7 @@ reg_t kGetMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
tuple.cond = 0;
tuple.seq = 0;
- if (state.loadRes(module) && state.getMessage(&tuple)) {
+ if (state.loadRes(s->resmgr, module, true) && state.getMessage(&tuple)) {
int len = state.getLength();
char *buffer = kernel_dereference_char_pointer(s, argv[3], len + 1);