aboutsummaryrefslogtreecommitdiff
path: root/engines/wage
diff options
context:
space:
mode:
Diffstat (limited to 'engines/wage')
-rw-r--r--engines/wage/script.cpp8
-rw-r--r--engines/wage/script.h34
2 files changed, 31 insertions, 11 deletions
diff --git a/engines/wage/script.cpp b/engines/wage/script.cpp
index 355c5da0f8..eb500d7df0 100644
--- a/engines/wage/script.cpp
+++ b/engines/wage/script.cpp
@@ -88,7 +88,7 @@ bool Script::execute(World *world, int loopCount, String *inputText, Designed *i
{
Operand *op = readOperand();
// TODO check op type is string or number, or something good...
- appendText(op->_str);
+ appendText(op->toString());
byte d = _data->readByte();
if (d != 0xFD)
warning("Operand 0x8B (PRINT) End Byte != 0xFD");
@@ -99,7 +99,7 @@ bool Script::execute(World *world, int loopCount, String *inputText, Designed *i
Operand *op = readOperand();
// TODO check op type is string.
_handled = true;
- callbacks->playSound(op->_str);
+ callbacks->playSound(op->toString());
byte d = _data->readByte();
if (d != 0xFD)
warning("Operand 0x8B (PRINT) End Byte != 0xFD");
@@ -112,7 +112,7 @@ bool Script::execute(World *world, int loopCount, String *inputText, Designed *i
{
Operand *op = readStringOperand(); // allows empty menu
// TODO check op type is string.
- _callbacks->setMenu(op->_str);
+ _callbacks->setMenu(op->toString());
byte d = _data->readByte();
if (d != 0xFD)
warning("Operand 0x8B (PRINT) End Byte != 0xFD");
@@ -196,7 +196,7 @@ bool Script::execute(World *world, int loopCount, String *inputText, Designed *i
Script::Operand *Script::readOperand() {
byte operandType = _data->readByte();
- debug(2, "readOperand: 0x%x", operandType);
+ debug(2, "%x: readOperand: 0x%x", _data->pos(), operandType);
Context *cont = &_world->_player->_context;
switch (operandType) {
diff --git a/engines/wage/script.h b/engines/wage/script.h
index 7ac8356b18..1c69eb093b 100644
--- a/engines/wage/script.h
+++ b/engines/wage/script.h
@@ -87,43 +87,63 @@ private:
Designed *inputClick;
} _value;
OperandTypes _type;
- String _str;
+ Common::String _str;
Operand(Obj *value, OperandTypes type) {
_value.obj = value;
- _str = value->toString();
_type = type;
}
Operand(Chr *value, OperandTypes type) {
_value.chr = value;
- _str = value->toString();
_type = type;
}
Operand(Scene *value, OperandTypes type) {
_value.scene = value;
- _str = value->toString();
_type = type;
}
Operand(int value, OperandTypes type) {
_value.number = value;
- _str = value;
_type = type;
}
Operand(String *value, OperandTypes type) {
_value.string = value;
- _str = *value;
_type = type;
}
Operand(Designed *value, OperandTypes type) {
_value.inputClick = value;
- _str = value->toString();
_type = type;
}
+
+ Common::String toString() {
+ char buf[128];
+
+ if (_value.obj == NULL)
+ _str = "";
+
+ switch(_type) {
+ case NUMBER:
+ _str = snprintf(buf, 128, "%d", _value.number);
+ return _str;
+ case STRING:
+ case TEXT_INPUT:
+ return *_value.string;
+ case OBJ:
+ return _value.obj->toString();
+ case CHR:
+ return _value.chr->toString();
+ case SCENE:
+ return _value.scene->toString();
+ case CLICK_INPUT:
+ return _value.inputClick->toString();
+ default:
+ error("Unhandled operand type: _type");
+ }
+ }
};
public: