diff options
author | Eugene Sandulenko | 2005-08-05 23:14:11 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2005-08-05 23:14:11 +0000 |
commit | 005843e55bf7dc8b326d802e75e0caa35816f0de (patch) | |
tree | 6eb48f6c6dbe576060c92034077a0eeae076a12b /saga | |
parent | 771373bfb92268ea90d2e0aa3760b800eb069f8b (diff) | |
download | scummvm-rg350-005843e55bf7dc8b326d802e75e0caa35816f0de.tar.gz scummvm-rg350-005843e55bf7dc8b326d802e75e0caa35816f0de.tar.bz2 scummvm-rg350-005843e55bf7dc8b326d802e75e0caa35816f0de.zip |
o Some cleanup
o Fix warnings
o Implemented IHNM changeChapter()
o WIP for metaResources
svn-id: r18618
Diffstat (limited to 'saga')
-rw-r--r-- | saga/actor.cpp | 3 | ||||
-rw-r--r-- | saga/game.cpp | 13 | ||||
-rw-r--r-- | saga/interface.h | 3 | ||||
-rw-r--r-- | saga/resnames.h | 4 | ||||
-rw-r--r-- | saga/rscfile.cpp | 44 | ||||
-rw-r--r-- | saga/rscfile.h | 26 | ||||
-rw-r--r-- | saga/saga.cpp | 2 | ||||
-rw-r--r-- | saga/scene.cpp | 34 | ||||
-rw-r--r-- | saga/scene.h | 2 | ||||
-rw-r--r-- | saga/script.h | 10 |
10 files changed, 125 insertions, 16 deletions
diff --git a/saga/actor.cpp b/saga/actor.cpp index 1e5be15044..c95bec2039 100644 --- a/saga/actor.cpp +++ b/saga/actor.cpp @@ -577,7 +577,8 @@ void Actor::updateActorsScene(int actorsEntrance) { if (actor->flags & kProtagonist) { actor->finalTarget = actor->location; _centerActor = _protagonist = actor; - } else if (_vm->_scene->currentSceneResourceId() == RID_ITE_OVERMAP_SCENE) { + } else if (_vm->getGameType() == GType_ITE && + _vm->_scene->currentSceneResourceId() == RID_ITE_OVERMAP_SCENE) { continue; } diff --git a/saga/game.cpp b/saga/game.cpp index 77cb8daf58..2f9f46cfdf 100644 --- a/saga/game.cpp +++ b/saga/game.cpp @@ -325,16 +325,7 @@ static GameFileDescription ITEMULTICD_GameFiles[] = { {"music.rsc", GAME_MUSICFILE} }; -// Inherit the Earth - Mac Dreamers version static GameFileDescription ITEMACCD_G_GameFiles[] = { - {"ITE Resources", GAME_RESOURCEFILE}, - {"ITE Scripts", GAME_SCRIPTFILE}, - {"ITE Sounds", GAME_SOUNDFILE}, - {"ITE Music", GAME_MUSICFILE_GM}, - {"ITE Voices", GAME_VOICEFILE} -}; - -static GameFileDescription ITEMACCD2_G_GameFiles[] = { {"ITE Resources.bin", GAME_RESOURCEFILE | GAME_MACBINARY}, {"ITE Scripts.bin", GAME_SCRIPTFILE | GAME_MACBINARY}, {"ITE Sounds.bin", GAME_SOUNDFILE | GAME_MACBINARY}, @@ -869,8 +860,8 @@ static GameDescription gameDescriptions[] = { &ITE_DisplayInfo, ITE_DEFAULT_SCENE, &ITE_Resources, - ARRAYSIZE(ITEMACCD2_G_GameFiles), - ITEMACCD2_G_GameFiles, + ARRAYSIZE(ITEMACCD_G_GameFiles), + ITEMACCD_G_GameFiles, ARRAYSIZE(ITEWINDEMO_GameFonts), ITEWINDEMO_GameFonts, &ITEMACCD_G_GameSound, diff --git a/saga/interface.h b/saga/interface.h index d46e20138a..96b3057247 100644 --- a/saga/interface.h +++ b/saga/interface.h @@ -69,7 +69,8 @@ enum PanelModes { kPanelProtect, kPanelPlacard, kPanelMap, - kPanelSceneSubstitute + kPanelSceneSubstitute, + kPanelUnknown // kPanelInventory }; diff --git a/saga/resnames.h b/saga/resnames.h index 809ff2917d..500fb0a82d 100644 --- a/saga/resnames.h +++ b/saga/resnames.h @@ -42,7 +42,9 @@ namespace Saga { //obj names #define ITE_OBJ_MAP 14 -#define ITE_MAGIC_HAT 0 +#define ITE_OBJ_MAGIC_HAT 0 + +#define IHNM_OBJ_PROFILE 0x4000 //actor names #define ITE_ACTOR_PUZZLE 176 diff --git a/saga/rscfile.cpp b/saga/rscfile.cpp index 5adb56c979..545c81f547 100644 --- a/saga/rscfile.cpp +++ b/saga/rscfile.cpp @@ -421,4 +421,48 @@ void Resource::loadResource(ResourceContext *context, uint32 resourceId, byte*&r } } +static int metaResourceTable[] = { 0, 326, 517, 677, 805, 968, 1165, 0, 1271 }; + +void Resource::loadGlobalResources(int chapter, int actorsEntrance) { + // TODO + //if (module.voiceLUT) + // free module.voiceLUT; + + // TODO: close chapeter context, or rather reassign it in our case + + ResourceContext *resourceContext; + + resourceContext = _vm->_resource->getContext(GAME_RESOURCEFILE); + if (resourceContext == NULL) { + error("Resource::loadGlobalResources() resource context not found"); + } + + byte *resourcePointer; + size_t resourceLength; + + _vm->_resource->loadResource(resourceContext, metaResourceTable[chapter], + resourcePointer, resourceLength); + + MemoryReadStream metaS(resourcePointer, resourceLength); + + _metaResource.sceneIndex = metaS.readSint16LE(); + _metaResource.obectCount = metaS.readSint16LE(); + _metaResource.field_4 = metaS.readSint32LE(); + _metaResource.field_8 = metaS.readSint32LE(); + _metaResource.mainSpritesID = metaS.readSint32LE(); + _metaResource.objectResourceID = metaS.readSint32LE(); + _metaResource.actorCount = metaS.readSint16LE(); + _metaResource.field_16 = metaS.readSint32LE(); + _metaResource.actorsResourceID = metaS.readSint32LE(); + _metaResource.protagFaceSpritesID = metaS.readSint32LE(); + _metaResource.field_22 = metaS.readSint32LE(); + _metaResource.field_26 = metaS.readSint16LE(); + _metaResource.field_28 = metaS.readSint16LE(); + _metaResource.field_2a = metaS.readSint32LE(); + _metaResource.cutawayListResourceID = metaS.readSint32LE(); + _metaResource.songTableID = metaS.readSint32LE(); + + free(resourcePointer); +} + } // End of namespace Saga diff --git a/saga/rscfile.h b/saga/rscfile.h index a1d385aa5d..fa603119c8 100644 --- a/saga/rscfile.h +++ b/saga/rscfile.h @@ -89,6 +89,29 @@ struct ResourceContext { } }; +struct MetaResource { + int16 sceneIndex; + int16 obectCount; + int32 field_4; + int32 field_8; + int32 mainSpritesID; + int32 objectResourceID; + int16 actorCount; + int32 field_16; + int32 actorsResourceID; + int32 protagFaceSpritesID; + int32 field_22; + int16 field_26; + int16 field_28; + int32 field_2a; + int32 cutawayListResourceID; + int32 songTableID; + + MetaResource() { + memset(this, 0, sizeof(*this)); + } +}; + class Resource { public: Resource(SagaEngine *vm); @@ -99,6 +122,8 @@ public: size_t getResourceSize(ResourceContext *context, uint32 resourceId); uint32 convertResourceId(uint32 resourceId); + void loadGlobalResources(int chapter, int actorsEntrance); + ResourceContext *getContext(uint16 fileType, int serial = 0) { int i; for (i = 0; i < _contextsCount; i++) { @@ -137,6 +162,7 @@ private: bool loadMacContext(ResourceContext *context); bool loadSagaContext(ResourceContext *context, uint32 contextOffset, uint32 contextSize); + MetaResource _metaResource; }; } // End of namespace Saga diff --git a/saga/saga.cpp b/saga/saga.cpp index eae240377b..d55bede34d 100644 --- a/saga/saga.cpp +++ b/saga/saga.cpp @@ -300,7 +300,7 @@ int SagaEngine::go() { _scene->changeScene(ConfMan.getInt("start_scene"), 0, kTransitionNoFade); } else if (ConfMan.hasKey("boot_param")) { if (getGameType() == GType_ITE) - _interface->addToInventory(_actor->objIndexToId(ITE_MAGIC_HAT)); + _interface->addToInventory(_actor->objIndexToId(ITE_OBJ_MAGIC_HAT)); _scene->changeScene(ConfMan.getInt("boot_param"), 0, kTransitionNoFade); } else if (ConfMan.hasKey("save_slot")) { // First scene sets up palette diff --git a/saga/scene.cpp b/saga/scene.cpp index 2dc3365ac4..d13a9aa87b 100644 --- a/saga/scene.cpp +++ b/saga/scene.cpp @@ -472,6 +472,38 @@ void Scene::changeScene(uint16 sceneNumber, int actorsEntrance, SceneTransitionT loadScene(&sceneParams); } +void Scene::changeChapter(int chapter, int16 sceneNumber, int actorsEntrance) { + if (chapter == 6) + _vm->_interface->setLeftPortrait(0); + + freeCutawayList(); + _vm->_script->freeModules(); + // deleteAllScenes(); + + // installSomeAlarm() + + _vm->_interface->clearInventory(); + _vm->_resource->loadGlobalResources(chapter, actorsEntrance); + _vm->_interface->addToInventory(IHNM_OBJ_PROFILE); + _vm->_interface->activate(); + + if (chapter == 8 || chapter == -1) + _vm->_interface->setMode(kPanelUnknown); + else + _vm->_interface->setMode(kPanelMain); + + _vm->_script->setVerb(kVerbIHNMWalkTo); + + if (sceneNumber != -2) + changeScene(sceneNumber, actorsEntrance, kTransitionFade); +} + +void Scene::freeCutawayList() { + // TODO + // It has to be in different class + warning("STUB: freeCutawayList()"); +} + void Scene::getSlopes(int &beginSlope, int &endSlope) { beginSlope = _vm->getSceneHeight() - _sceneDescription.beginSlope; endSlope = _vm->getSceneHeight() - _sceneDescription.endSlope; @@ -675,7 +707,7 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) { q_event = _vm->_events->chain(q_event, &event); - if (loadSceneParams->transitionType == kTransitionFade ) { + if (loadSceneParams->transitionType == kTransitionFade) { _vm->_interface->setFadeMode(kFadeOut); diff --git a/saga/scene.h b/saga/scene.h index 8c75581c5e..5805a44d89 100644 --- a/saga/scene.h +++ b/saga/scene.h @@ -249,6 +249,8 @@ class Scene { _sceneQueue.clear(); } void changeScene(uint16 sceneNumber, int actorsEntrance, SceneTransitionType transitionType); + void changeChapter(int chapter, int16 sceneNumber, int actorsEntrance); + void freeCutawayList(); bool isSceneLoaded() const { return _sceneLoaded; } diff --git a/saga/script.h b/saga/script.h index 5a5098ffa7..a0c00521d1 100644 --- a/saga/script.h +++ b/saga/script.h @@ -72,6 +72,16 @@ enum VerbTypes { kVerbWalkOnly = 13, kVerbLookOnly = 14, + kVerbIHNMNone = 0, + kVerbIHNMWalkTo = 1, + kVerbIHNMLookAt = 2, + kVerbIHNMTake = 3, + kVerbIHNMUse = 4, + kVerbIHNMTalkTo = 5, + kVerbIHNMSwallow = 6, + kVerbIHNMGive = 7, + kVerbIHNMPush = 8, + kVerbTypesMax = kVerbLookOnly + 1 }; |