From 41978f466d423e9b5f3c3980666c1beb4219b937 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Wed, 18 Nov 2015 16:25:42 +0100 Subject: ILLUSIONS: Add GAM archive reader for Duckman and adjust the resource reader/system --- engines/illusions/fileresourcereader.cpp | 79 ++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 engines/illusions/fileresourcereader.cpp (limited to 'engines/illusions/fileresourcereader.cpp') diff --git a/engines/illusions/fileresourcereader.cpp b/engines/illusions/fileresourcereader.cpp new file mode 100644 index 0000000000..c707c6535a --- /dev/null +++ b/engines/illusions/fileresourcereader.cpp @@ -0,0 +1,79 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "illusions/resourcesystem.h" +#include "illusions/fileresourcereader.h" +#include "illusions/illusions.h" +#include "common/file.h" +#include "common/str.h" + +namespace Illusions { + +byte *ResourceReaderFileReader::readResource(uint32 sceneId, uint32 resId, uint32 &dataSize) { + debug("ResourceReaderFileReader::readResource(%08X, %08X)", sceneId, resId); + + Common::String filename = buildResourceFilename(resId); + Common::File fd; + if (!fd.open(filename)) + error("Resource::loadData() Could not open %s for reading", filename.c_str()); + dataSize = fd.size(); + byte *data = (byte*)malloc(dataSize); + fd.read(data, dataSize); + return data; +} + +Common::String ResourceReaderFileReader::buildResourceFilename(uint32 resId) { + const char *ext = getResourceExtension(resId); + return Common::String::format("%08X%s", resId, ext); +} + +const char *ResourceReaderFileReader::getResourceExtension(uint32 resId) { + // TODO Make constants + switch (ResourceTypeId(resId)) { + case 0x00060000: + case 0x00100000: + // ActorResource + return ".act"; + case 0x00080000: + // SoundGroupResource + return ".sg"; + case 0x000D0000: + // ScriptResource + return ".scr"; + case 0x000F0000: + // TalkResource + return ".tlk"; + case 0x00110000: + // BackgroundResource + return ".bg"; + case 0x00120000: + // FontResource + return ".fnt"; + case 0x00170000: + // SpecialCode + return ""; + default: + return ""; + } +} + +} // End of namespace Illusions -- cgit v1.2.3