aboutsummaryrefslogtreecommitdiff
path: root/scumm/script_v2.cpp
diff options
context:
space:
mode:
authorJames Brown2003-05-23 06:35:47 +0000
committerJames Brown2003-05-23 06:35:47 +0000
commit73c6cf8bc9601347ec364e6549fa1794925748e5 (patch)
tree8929eda4376ff11051a761862d0dcc0a920d2bd6 /scumm/script_v2.cpp
parent7bcdf0d5688d55cfebbc464bace906cc10fb4d03 (diff)
downloadscummvm-rg350-73c6cf8bc9601347ec364e6549fa1794925748e5.tar.gz
scummvm-rg350-73c6cf8bc9601347ec364e6549fa1794925748e5.tar.bz2
scummvm-rg350-73c6cf8bc9601347ec364e6549fa1794925748e5.zip
Patch #742132: o2_setobjectname script overwrite fix
svn-id: r7854
Diffstat (limited to 'scumm/script_v2.cpp')
-rw-r--r--scumm/script_v2.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/scumm/script_v2.cpp b/scumm/script_v2.cpp
index 4d3c1f78c0..16631148a4 100644
--- a/scumm/script_v2.cpp
+++ b/scumm/script_v2.cpp
@@ -1292,7 +1292,7 @@ void Scumm_v2::o2_pickupObject() {
void Scumm_v2::o2_setObjectName() {
int obj = getVarOrDirectWord(0x80);
- int size;
+ int size = 0;
int a;
int i = 0;
byte *name = NULL;
@@ -1303,7 +1303,6 @@ void Scumm_v2::o2_setObjectName() {
a = fetchScriptByte();
work[i++] = a;
} while (a);
- work[i] = 0;
if (obj < _numActors)
error("Can't set actor %d name with new-name-of", obj);
@@ -1312,19 +1311,21 @@ void Scumm_v2::o2_setObjectName() {
if (name == NULL)
return; // Silently abort
- byte *objptr;
- byte offset = 0;
+ while(name[size++])
+ ;
- objptr = getOBCDFromObject(obj);
- offset = *(objptr + 14);
- size = READ_LE_UINT16(objptr) - offset;
-
- if (i >= size) {
+ if (i > size) {
warning("New name of object %d too long (old *%s* new *%s*)", obj, name, work);
- i = size - 1;
+ i = size;
}
- memcpy(name, work, i + 1);
+ while (i < size) {
+ work[i-1] = '@';
+ i++;
+ }
+ work[i-1] = 0;
+
+ memcpy(name, work, i);
redrawV2Inventory();
}