Correct string for temp save/load, original load/save screens now displays in HE 71+ games.

svn-id: r15346
This commit is contained in:
Travis Howell 2004-09-29 11:25:21 +00:00
parent 468758fa6c
commit fa149a52d4
4 changed files with 115 additions and 11 deletions

View file

@ -755,6 +755,7 @@ protected:
void o72_printWizImage(); void o72_printWizImage();
void o72_getArrayDimSize(); void o72_getArrayDimSize();
void o72_getNumFreeArrays(); void o72_getNumFreeArrays();
void o72_roomOps();
void o72_actorOps(); void o72_actorOps();
void o72_verbOps(); void o72_verbOps();
void o72_findObject(); void o72_findObject();

View file

@ -240,7 +240,7 @@ void ScummEngine_v72he::setupOpcodes() {
OPCODE(o6_invalid), OPCODE(o6_invalid),
OPCODE(o70_resourceRoutines), OPCODE(o70_resourceRoutines),
/* 9C */ /* 9C */
OPCODE(o60_roomOps), OPCODE(o72_roomOps),
OPCODE(o72_actorOps), OPCODE(o72_actorOps),
OPCODE(o72_verbOps), OPCODE(o72_verbOps),
OPCODE(o6_getActorFromXY), OPCODE(o6_getActorFromXY),
@ -905,12 +905,111 @@ void ScummEngine_v72he::o72_getNumFreeArrays() {
push (num); push (num);
} }
void ScummEngine_v72he::o72_roomOps() {
int a, b, c, d, e;
byte op;
byte filename[100];
op = fetchScriptByte();
switch (op) {
case 172: // SO_ROOM_SCROLL
b = pop();
a = pop();
if (a < (_screenWidth / 2))
a = (_screenWidth / 2);
if (b < (_screenWidth / 2))
b = (_screenWidth / 2);
if (a > _roomWidth - (_screenWidth / 2))
a = _roomWidth - (_screenWidth / 2);
if (b > _roomWidth - (_screenWidth / 2))
b = _roomWidth - (_screenWidth / 2);
VAR(VAR_CAMERA_MIN_X) = a;
VAR(VAR_CAMERA_MAX_X) = b;
break;
case 174: // SO_ROOM_SCREEN
b = pop();
a = pop();
initScreens(a, _screenHeight);
break;
case 175: // SO_ROOM_PALETTE
d = pop();
c = pop();
b = pop();
a = pop();
setPalColor(d, a, b, c);
break;
case 179: // SO_ROOM_INTENSITY
c = pop();
b = pop();
a = pop();
darkenPalette(a, a, a, b, c);
break;
case 180: // SO_ROOM_SAVEGAME
_saveTemporaryState = true;
_saveLoadSlot = pop();
_saveLoadFlag = pop();
break;
case 181: // SO_ROOM_FADE
// Defaults to 1 but doesn't use fade effects
a = pop();
break;
case 182: // SO_RGB_ROOM_INTENSITY
e = pop();
d = pop();
c = pop();
b = pop();
a = pop();
darkenPalette(a, b, c, d, e);
break;
case 213: // SO_ROOM_NEW_PALETTE
a = pop();
setPalette(a);
break;
case 220:
a = pop();
b = pop();
copyPalColor(a, b);
break;
case 221:
copyScriptString(filename);
_saveLoadFlag = pop();
_saveLoadSlot = 1;
_saveTemporaryState = true;
break;
case 234:
b = pop();
a = pop();
swapObjects(a, b);
break;
case 236:
b = pop();
a = pop();
warning("o72_roomOps: case %d (%d, %d)", op, b, a);
break;
default:
error("o72_roomOps: default case %d", op);
}
}
void ScummEngine_v72he::o72_actorOps() { void ScummEngine_v72he::o72_actorOps() {
Actor *a; Actor *a;
int i, j, k; int i, j, k;
int args[32]; int args[32];
byte b; byte b;
byte name[256]; byte string[256];
b = fetchScriptByte(); b = fetchScriptByte();
if (b == 197) { if (b == 197) {
@ -1007,8 +1106,8 @@ void ScummEngine_v72he::o72_actorOps() {
a->talkColor = pop(); a->talkColor = pop();
break; break;
case 88: // SO_ACTOR_NAME case 88: // SO_ACTOR_NAME
copyScriptString(name); copyScriptString(string);
loadPtrToResource(rtActorName, a->number, name); loadPtrToResource(rtActorName, a->number, string);
break; break;
case 89: // SO_INIT_ANIMATION case 89: // SO_INIT_ANIMATION
a->_initFrame = pop(); a->_initFrame = pop();
@ -1091,7 +1190,6 @@ void ScummEngine_v72he::o72_actorOps() {
break; break;
case 225: case 225:
{ {
byte string[128];
copyScriptString(string); copyScriptString(string);
int slot = pop(); int slot = pop();
@ -1737,13 +1835,13 @@ void ScummEngine_v72he::o72_openFile() {
mode = pop(); mode = pop();
copyScriptString(filename); copyScriptString(filename);
debug(1,"File %s", filename);
for (r = strlen((char*)filename); r != 0; r--) { for (r = strlen((char*)filename); r != 0; r--) {
if (filename[r - 1] == '\\') if (filename[r - 1] == '\\')
break; break;
} }
debug(1,"File %s", filename + r);
slot = -1; slot = -1;
for (l = 0; l < 17; l++) { for (l = 0; l < 17; l++) {
if (_hFileTable[l].isOpen() == false) { if (_hFileTable[l].isOpen() == false) {
@ -1758,7 +1856,7 @@ void ScummEngine_v72he::o72_openFile() {
else if (mode == 2) else if (mode == 2)
_hFileTable[slot].open((char*)filename + r, File::kFileWriteMode); _hFileTable[slot].open((char*)filename + r, File::kFileWriteMode);
else else
error("o60_openFile(): wrong open file mode %d", mode); error("o72_openFile(): wrong open file mode %d", mode);
if (_hFileTable[slot].isOpen() == false) if (_hFileTable[slot].isOpen() == false)
slot = -1; slot = -1;
@ -1867,10 +1965,15 @@ void ScummEngine_v72he::o72_findAllObjects() {
void ScummEngine_v72he::o72_deleteFile() { void ScummEngine_v72he::o72_deleteFile() {
byte filename[100]; byte filename[100];
int r;
copyScriptString(filename); copyScriptString(filename);
for (r = strlen((char*)filename); r != 0; r--) {
if (filename[r - 1] == '\\')
break;
}
debug(1, "stub o72_deleteFile(%s)", filename); debug(1, "stub o72_deleteFile(%s)", filename + r);
} }
void ScummEngine_v72he::o72_getPixel() { void ScummEngine_v72he::o72_getPixel() {

View file

@ -240,7 +240,7 @@ void ScummEngine_v80he::setupOpcodes() {
OPCODE(o6_invalid), OPCODE(o6_invalid),
OPCODE(o70_resourceRoutines), OPCODE(o70_resourceRoutines),
/* 9C */ /* 9C */
OPCODE(o60_roomOps), OPCODE(o72_roomOps),
OPCODE(o72_actorOps), OPCODE(o72_actorOps),
OPCODE(o72_verbOps), OPCODE(o72_verbOps),
OPCODE(o6_getActorFromXY), OPCODE(o6_getActorFromXY),

View file

@ -240,7 +240,7 @@ void ScummEngine_v90he::setupOpcodes() {
OPCODE(o6_invalid), OPCODE(o6_invalid),
OPCODE(o70_resourceRoutines), OPCODE(o70_resourceRoutines),
/* 9C */ /* 9C */
OPCODE(o60_roomOps), OPCODE(o72_roomOps),
OPCODE(o72_actorOps), OPCODE(o72_actorOps),
OPCODE(o90_unknown9E), OPCODE(o90_unknown9E),
OPCODE(o6_getActorFromXY), OPCODE(o6_getActorFromXY),