aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek
diff options
context:
space:
mode:
Diffstat (limited to 'engines/startrek')
-rw-r--r--engines/startrek/actors.cpp15
-rw-r--r--engines/startrek/object.h9
-rw-r--r--engines/startrek/saveload.cpp17
3 files changed, 19 insertions, 22 deletions
diff --git a/engines/startrek/actors.cpp b/engines/startrek/actors.cpp
index 876499c14b..b2912497d2 100644
--- a/engines/startrek/actors.cpp
+++ b/engines/startrek/actors.cpp
@@ -164,8 +164,7 @@ void StarTrekEngine::updateActorAnimations() {
actor->animFile->read(animFrameFilename, 16);
sprite->setBitmap(loadAnimationFrame(animFrameFilename, actor->scale));
- memset(actor->bitmapFilename, 0, 10);
- strncpy(actor->bitmapFilename, animFrameFilename, 9);
+ actor->bitmapFilename = animFrameFilename;
actor->animFile->seek(10 + actor->animFrame * 22, SEEK_SET);
uint16 xOffset = actor->animFile->readUint16();
@@ -430,8 +429,8 @@ void StarTrekEngine::drawActorToScreen(Actor *actor, const Common::String &_anim
Common::String animFilename = _animName;
if (_animName.hasPrefixIgnoreCase("stnd") /* && word_45d20 == -1 */) // TODO
animFilename += 'j';
- memcpy(actor->animFilename, _animName.c_str(), sizeof(actor->animFilename));
+ actor->animFilename = _animName;
actor->animType = 2;
actor->animFile = loadFile(animFilename + ".anm");
actor->numAnimFrames = actor->animFile->size() / 22;
@@ -454,12 +453,10 @@ void StarTrekEngine::drawActorToScreen(Actor *actor, const Common::String &_anim
_gfx->addSprite(sprite);
sprite->setBitmap(loadAnimationFrame(firstFrameFilename, scale));
- memset(actor->bitmapFilename, 0, sizeof(char) * 10);
- strncpy(actor->bitmapFilename, firstFrameFilename, sizeof(char) * 9);
-
+ actor->bitmapFilename = firstFrameFilename;
actor->scale = scale;
-
actor->animFile->seek(10, SEEK_SET);
+
uint16 xOffset = actor->animFile->readUint16();
uint16 yOffset = actor->animFile->readUint16();
uint16 basePriority = actor->animFile->readUint16();
@@ -525,9 +522,7 @@ void StarTrekEngine::updateActorPositionWhileWalking(Actor *actor, int16 x, int1
actor->scale = getActorScaleAtPosition(y);
Common::String animName = Common::String::format("%s%02d", actor->animationString2.c_str(), actor->field92 & 7);
actor->sprite.setBitmap(loadAnimationFrame(animName, actor->scale));
-
- memset(actor->bitmapFilename, 0, 10);
- strncpy(actor->bitmapFilename, animName.c_str(), 9);
+ actor->bitmapFilename = animName;
Sprite *sprite = &actor->sprite;
sprite->drawPriority = _gfx->getPriValue(0, y);
diff --git a/engines/startrek/object.h b/engines/startrek/object.h
index 19d9b4b314..6a32983ff1 100644
--- a/engines/startrek/object.h
+++ b/engines/startrek/object.h
@@ -77,10 +77,10 @@ enum Objects {
struct Actor {
bool spriteDrawn;
- char animFilename[16];
+ Common::String animFilename;
uint16 animType;
Sprite sprite;
- char bitmapFilename[10];
+ Common::String bitmapFilename;
Fixed8 scale;
SharedPtr<FileStream> animFile;
uint16 numAnimFrames;
@@ -134,10 +134,8 @@ struct Actor {
public:
Actor() :
spriteDrawn(false),
- //animFilename[16],
animType(0),
sprite(),
- //bitmapFilename[10],
scale(0),
animFile(),
numAnimFrames(0),
@@ -167,13 +165,10 @@ public:
direction(0),
field94(0),
field96(0),
- //char animationString[10];
fielda2(0),
fielda4(0),
fielda6(0) {
- memset(animFilename, 0, sizeof(animFilename));
- memset(bitmapFilename, 0, sizeof(bitmapFilename));
}
};
diff --git a/engines/startrek/saveload.cpp b/engines/startrek/saveload.cpp
index 7966537fd5..d3018f4920 100644
--- a/engines/startrek/saveload.cpp
+++ b/engines/startrek/saveload.cpp
@@ -148,7 +148,7 @@ bool StarTrekEngine::loadGame(int slot) {
Actor *a = &_actorList[i];
if (a->spriteDrawn) {
if (a->animType != 1)
- a->animFile = loadFile(Common::String(a->animFilename) + ".anm");
+ a->animFile = loadFile(a->animFilename + ".anm");
_gfx->addSprite(&a->sprite);
a->sprite.setBitmap(loadAnimationFrame(a->bitmapFilename, a->scale));
}
@@ -243,12 +243,19 @@ bool StarTrekEngine::saveOrLoadGameData(Common::SeekableReadStream *in, Common::
for (int i = 0; i < NUM_ACTORS; i++) {
Actor *a = &_actorList[i];
ser.syncAsUint16LE(a->spriteDrawn);
- ser.syncBytes((byte *)a->animFilename, 16);
+ ser.syncString(a->animFilename);
+ filler = 0;
+ for (uint j = 0; j < 16 - a->animFilename.size() - 1; ++j)
+ ser.syncAsByte(filler); // make sure that exactly 16 bytes are synced
+
ser.syncAsUint16LE(a->animType);
a->sprite.saveLoadWithSerializer(ser);
- ser.syncBytes((byte *)a->bitmapFilename, 10);
+ ser.syncString(a->bitmapFilename);
+ filler = 0;
+ for (uint j = 0; j < 10 - a->bitmapFilename.size() - 1; ++j)
+ ser.syncAsByte(filler); // make sure that exactly 10 bytes are synced
a->scale.saveLoadWithSerializer(ser);
// Can't save "animFile" (will be reloaded)
ser.syncAsUint16LE(a->numAnimFrames);
@@ -262,7 +269,7 @@ bool StarTrekEngine::saveOrLoadGameData(Common::SeekableReadStream *in, Common::
ser.syncAsUint16LE(a->finishedAnimActionParam);
ser.syncString(a->animationString2);
filler = 0;
- for (uint i = 0; i < 8 - a->animationString2.size() - 1; ++i)
+ for (uint j = 0; j < 8 - a->animationString2.size() - 1; ++j)
ser.syncAsByte(filler); // make sure that exactly 8 bytes are synced
ser.syncAsUint16LE(a->field70);
ser.syncAsUint16LE(a->field72);
@@ -283,7 +290,7 @@ bool StarTrekEngine::saveOrLoadGameData(Common::SeekableReadStream *in, Common::
ser.syncAsUint16LE(a->field96);
ser.syncString(a->animationString);
filler = 0;
- for (uint i = 0; i < 10 - a->animationString.size() - 1; ++i)
+ for (uint j = 0; j < 10 - a->animationString.size() - 1; ++j)
ser.syncAsByte(filler); // make sure that exactly 10 bytes are synced
ser.syncAsUint16LE(a->fielda2);
ser.syncAsUint16LE(a->fielda4);