mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 17:33:05 +00:00
WAGE: Finished world loading.
Signed-off-by: Eugene Sandulenko <sev@scummvm.org>
This commit is contained in:
parent
53029635b1
commit
f488762703
@ -50,6 +50,8 @@ public:
|
||||
SHIELD_ARMOR = 2
|
||||
};
|
||||
|
||||
Chr(String name, byte *data) {}
|
||||
|
||||
int _index;
|
||||
String _initialScene;
|
||||
int _gender;
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user