SCI1 Mac games can call kGetFarText with a NULL destination, so we need to allocate the memory. King's Quest V Mac is now playable.
svn-id: r47950
This commit is contained in:
parent
71c222e340
commit
9183ab57a3
2 changed files with 11 additions and 8 deletions
|
@ -265,7 +265,7 @@ SciKernelFunction kfunct_mappers[] = {
|
|||
/*4a*/ DEFUN("StrLen", kStrLen, "Zr"),
|
||||
/*4b*/ DEFUN("StrCpy", kStrCpy, "rZri*"),
|
||||
/*4c*/ DEFUN("Format", kFormat, "r.*"),
|
||||
/*4d*/ DEFUN("GetFarText", kGetFarText, "iir"),
|
||||
/*4d*/ DEFUN("GetFarText", kGetFarText, "iiZr"),
|
||||
/*4e*/ DEFUN("ReadNumber", kReadNumber, "r"),
|
||||
/*4f*/ DEFUN("BaseSetter", kBaseSetter, "o"),
|
||||
/*50*/ DEFUN("DirLoop", kDirLoop, "oi"),
|
||||
|
|
|
@ -424,23 +424,26 @@ reg_t kGetFarText(EngineState *s, int argc, reg_t *argv) {
|
|||
char *seeker;
|
||||
int counter = argv[1].toUint16();
|
||||
|
||||
|
||||
if (!textres) {
|
||||
error("text.%d does not exist", argv[0].toUint16());
|
||||
return NULL_REG;
|
||||
}
|
||||
|
||||
seeker = (char *) textres->data;
|
||||
seeker = (char *)textres->data;
|
||||
|
||||
// The second parameter (counter) determines the number of the string inside the text
|
||||
// resource.
|
||||
while (counter--) {
|
||||
while (*seeker++)
|
||||
;
|
||||
}
|
||||
/* The second parameter (counter) determines the number of the string inside the text
|
||||
** resource.
|
||||
*/
|
||||
|
||||
s->_segMan->strcpy(argv[2], seeker); /* Copy the string and get return value */
|
||||
// If the third argument is NULL, allocate memory for the destination. This occurs in
|
||||
// SCI1 Mac games. The memory will later be freed by the game's scripts.
|
||||
if (argv[2] == NULL_REG)
|
||||
s->_segMan->allocDynmem(strlen(seeker) + 1, "Mac FarText", &argv[2]);
|
||||
|
||||
s->_segMan->strcpy(argv[2], seeker); // Copy the string and get return value
|
||||
return argv[2];
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue