aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/kscripts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/kscripts.cpp')
-rw-r--r--engines/sci/engine/kscripts.cpp49
1 files changed, 27 insertions, 22 deletions
diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp
index 2479696630..d82f8ff132 100644
--- a/engines/sci/engine/kscripts.cpp
+++ b/engines/sci/engine/kscripts.cpp
@@ -125,19 +125,27 @@ reg_t kLoad(EngineState *s, int funct_nr, int argc, reg_t *argv) {
}
reg_t kLock(EngineState *s, int funct_nr, int argc, reg_t *argv) {
- int restype = argv[0].toUint16() & 0x7f;
- int resnr = argv[1].toUint16();
int state = argc > 2 ? argv[2].toUint16() : 1;
+ ResourceType type = (ResourceType)(argv[0].toUint16() & 0x7f);
+ ResourceId id = ResourceId(type, argv[1].toUint16());
Resource *which;
switch (state) {
case 1 :
- s->resmgr->findResource((ResourceType)restype, resnr, 1);
+ s->resmgr->findResource(id, 1);
break;
case 0 :
- which = s->resmgr->findResource((ResourceType)restype, resnr, 0);
- s->resmgr->unlockResource(which, resnr, (ResourceType)restype);
+ which = s->resmgr->findResource(id, 0);
+
+ if (which)
+ s->resmgr->unlockResource(which);
+ else {
+ if (id.type == kResourceTypeInvalid)
+ warning("[Resmgr] Attempt to unlock resource %i of invalid type %i", id.number, type);
+ else
+ warning("[Resmgr] Attempt to unlock non-existant resource %s", id.toString().c_str());
+ }
break;
}
return s->r_acc;
@@ -155,26 +163,23 @@ reg_t kUnLoad(EngineState *s, int funct_nr, int argc, reg_t *argv) {
}
reg_t kResCheck(EngineState *s, int funct_nr, int argc, reg_t *argv) {
+ Resource *res = NULL;
ResourceType restype = (ResourceType)(argv[0].toUint16() & 0x7f);
- switch (restype) {
- case kResourceTypeAudio36:
- case kResourceTypeSync36: {
- assert(argc >= 6);
-
- uint module = argv[1].toUint16();
- uint noun = argv[2].toUint16();
- uint verb = argv[3].toUint16();
- uint cond = argv[4].toUint16();
- uint seq = argv[5].toUint16();
- warning("ResCheck: checking for currently unsupported %s resource: module %i; tuple (%i, %i, %i, %i)",
- getResourceTypeName(restype), module, noun, verb, cond, seq);
- return make_reg(0, 1);
- }
- default:
- Resource *res = s->resmgr->testResource(restype, argv[1].toUint16());
- return make_reg(0, res != NULL);
+ if ((restype == kResourceTypeAudio36) || (restype == kResourceTypeSync36)) {
+ if (argc >= 6) {
+ uint noun = argv[2].toUint16() & 0xff;
+ uint verb = argv[3].toUint16() & 0xff;
+ uint cond = argv[4].toUint16() & 0xff;
+ uint seq = argv[5].toUint16() & 0xff;
+
+ res = s->resmgr->testResource(ResourceId(restype, argv[1].toUint16(), noun, verb, cond, seq));
+ }
+ } else {
+ res = s->resmgr->testResource(ResourceId(restype, argv[1].toUint16()));
}
+
+ return make_reg(0, res != NULL);
}
reg_t kClone(EngineState *s, int funct_nr, int argc, reg_t *argv) {