WAGE: Finished world loading.

Signed-off-by: Eugene Sandulenko <sev@scummvm.org>
This commit is contained in:
Eugene Sandulenko 2010-01-11 00:26:01 +02:00
parent 53029635b1
commit f488762703
7 changed files with 92 additions and 3 deletions

View File

@ -50,6 +50,8 @@ public:
SHIELD_ARMOR = 2
};
Chr(String name, byte *data) {}
int _index;
String _initialScene;
int _gender;

View File

@ -57,6 +57,7 @@ class Chr;
class Obj : public Weapon, public Designed {
public:
Obj() : _currentOwner(NULL), _currentScene(NULL) {}
Obj(String name, byte *data) : _currentOwner(NULL), _currentScene(NULL) {}
enum ObjectTypes {
REGULAR_WEAPON = 1,

View File

@ -25,8 +25,12 @@
#include "wage/wage.h"
#include "wage/sound.h"
#include "wage/world.h"
namespace Wage {
void World::loadExternalSounds(String fname) {
}
} // End of namespace Wage

View File

@ -54,4 +54,15 @@ Common::String readPascalString(Common::SeekableReadStream &in) {
return s;
}
Common::Rect *readRect(Common::SeekableReadStream &in) {
int x1, y1, x2, y2;
y1 = in.readUint16LE();
x1 = in.readUint16LE();
y2 = in.readUint16LE() + 4;
x2 = in.readUint16LE() + 4;
return new Common::Rect(x1, y1, x2, y2);
}
} // End of namespace Wage

View File

@ -30,6 +30,7 @@
#include "common/debug.h"
#include "gui/debugger.h"
#include "common/endian.h"
#include "common/rect.h"
struct ADGameDescription;
@ -50,6 +51,7 @@ enum {
};
Common::String readPascalString(Common::SeekableReadStream &in);
Common::Rect *readRect(Common::SeekableReadStream &in);
class WageEngine : public Engine {
public:

View File

@ -77,18 +77,86 @@ bool World::loadWorld(MacResManager *resMan) {
_soundLibrary1 = readPascalString(readS);
_soundLibrary2 = readPascalString(readS);
free(res);
// Load scenes
resArray = resMan->getResIDArray("ASCN");
for (iter = resArray.begin(); iter != resArray.end(); ++iter) {
res = resMan->getResource("ASCND", *iter, &resSize);
res = resMan->getResource("ASCN", *iter, &resSize);
Scene *scene = new Scene(resMan->getResName("ASCN", *iter), res);
res = resMan->getResource("ACOD", *iter, &resSize);
if (res != NULL)
scene->_script = new Script(res);
res = resMan->getResource("ATXT", *iter, &resSize);
if (res != NULL) {
Common::MemoryReadStream readT(res, resSize);
scene->_textBounds = readRect(readT);
scene->_fontType = readT.readUint16LE();
scene->_fontSize = readT.readUint16LE();
for (int i = 12; i < resSize; i++)
if (res[i] == 0x0d)
res[i] = '\n';
String text(&((char*)res)[12], resSize - 12);
scene->_text = text;
free(res);
}
addScene(scene);
}
// Load Objects
resArray = resMan->getResIDArray("AOBJ");
for (iter = resArray.begin(); iter != resArray.end(); ++iter) {
res = resMan->getResource("AOBJ", *iter, &resSize);
addObj(new Obj(resMan->getResName("AOBJ", *iter), res));
}
// Load Characters
resArray = resMan->getResIDArray("ACHR");
for (iter = resArray.begin(); iter != resArray.end(); ++iter) {
res = resMan->getResource("ACHR", *iter, &resSize);
Chr *chr = new Chr(resMan->getResName("ACHR", *iter), res);
addChr(chr);
// TODO: What if there's more than one player character?
if (chr->_playerCharacter)
_player = chr;
}
// Load Sounds
resArray = resMan->getResIDArray("ASND");
for (iter = resArray.begin(); iter != resArray.end(); ++iter) {
res = resMan->getResource("ASND", *iter, &resSize);
Sound *sound = new Sound(res);
sound->_name = resMan->getResName("ASND", *iter);
addSound(sound);
}
if (_soundLibrary1.size() > 0) {
loadExternalSounds(_soundLibrary1);
}
if (_soundLibrary2.size() > 0) {
loadExternalSounds(_soundLibrary2);
}
// Load Patterns
res = resMan->getResource("PAT#", 900, &resSize);
if (res != NULL) {
Common::MemoryReadStream readP(res, resSize);
int count = readP.readUint16LE();
for (int i = 0; i < count; i++) {
byte *pattern = (byte *)malloc(8);
for (int j = 0; j < 8; j++) {
pattern[j] = readP.readByte();
_patterns.push_back(pattern);
}
}
free(res);
}
return true;
}

View File

@ -42,6 +42,7 @@ public:
~World();
bool loadWorld(MacResManager *resMan);
void loadExternalSounds(String fname);
String _name;
String _aboutMessage;
@ -60,7 +61,7 @@ public:
Common::List<Sound *> _orderedSounds;
Common::List<byte *> _patterns;
Scene _storageScene;
Chr _player;
Chr *_player;
//List<MoveListener> moveListeners;
void addScene(Scene *room) {