Skip to content

Commit

Permalink
KYRA: (EOB) - minor code size reduction
Browse files Browse the repository at this point in the history
  • Loading branch information
athrxx authored and Johannes Schickel committed Dec 26, 2011
1 parent ff8a030 commit aa031bf
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 65 deletions.
5 changes: 3 additions & 2 deletions engines/kyra/eobcommon.cpp
Expand Up @@ -297,8 +297,9 @@ Common::Error EobCoreEngine::init() {
memset(_itemNames[i], 0, 35);
}

_flyingObjects = new EobFlyingObject[10];
memset(_flyingObjects, 0, 10 * sizeof(EobFlyingObject));
_flyingObjects = new EobFlyingObject[_numFlyingObjects];
_flyingObjectsPtr = _flyingObjects;
memset(_flyingObjects, 0, _numFlyingObjects * sizeof(EobFlyingObject));

_spellAnimBuffer = new uint8[4096];
memset(_spellAnimBuffer, 0, 4096);
Expand Down
19 changes: 0 additions & 19 deletions engines/kyra/eobcommon.h
Expand Up @@ -228,22 +228,6 @@ struct ScriptTimer {
uint32 next;
};

struct EobFlyingObject {
uint8 enable;
uint8 objectType;
int16 attackerId;
Item item;
uint16 curBlock;
uint16 u2;
uint8 u1;
uint8 direction;
uint8 distance;
int8 callBackIndex;
uint8 curPos;
uint8 flags;
uint8 unused;
};

class EobInfProcessor;

class EobCoreEngine : public LolEobBaseEngine {
Expand Down Expand Up @@ -770,11 +754,8 @@ friend class CharacterGenerator;
Common::Error saveGameStateIntern(int slot, const char *saveName, const Graphics::Surface *thumbnail);

void *generateMonsterTempData(LevelTempData *tmp);
void *generateFlyingObjectTempData(LevelTempData *tmp);
void restoreMonsterTempData(LevelTempData *tmp);
void restoreFlyingObjectTempData(LevelTempData *tmp);
void releaseMonsterTempData(LevelTempData *tmp);
void releaseFlyingObjectTempData(LevelTempData *tmp);

int _saveLoadMode;

Expand Down
6 changes: 4 additions & 2 deletions engines/kyra/lol.cpp
Expand Up @@ -417,8 +417,10 @@ Common::Error LoLEngine::init() {
_tempBuffer5120 = new uint8[5120];
memset(_tempBuffer5120, 0, 5120);

_flyingObjects = new FlyingObject[8];
memset(_flyingObjects, 0, 8 * sizeof(FlyingObject));
_flyingObjects = new FlyingObject[_numFlyingObjects];
_flyingObjectsPtr = _flyingObjects;
_flyingObjectStructSize = sizeof(FlyingObject);
memset(_flyingObjects, 0, _numFlyingObjects * sizeof(FlyingObject));

memset(_globalScriptVars, 0, sizeof(_globalScriptVars));

Expand Down
3 changes: 0 additions & 3 deletions engines/kyra/lol.h
Expand Up @@ -1299,12 +1299,9 @@ friend class HistoryPlayer;
Common::Error saveGameStateIntern(int slot, const char *saveName, const Graphics::Surface *thumbnail);

void *generateMonsterTempData(LevelTempData *tmp);
void *generateFlyingObjectTempData(LevelTempData *tmp);
void restoreBlockTempData(int levelIndex);
void restoreMonsterTempData(LevelTempData *tmp);
void restoreFlyingObjectTempData(LevelTempData *tmp);
void releaseMonsterTempData(LevelTempData *tmp);
void releaseFlyingObjectTempData(LevelTempData *tmp);

Graphics::Surface *generateSaveThumbnail() const;
};
Expand Down
5 changes: 4 additions & 1 deletion engines/kyra/loleobbase.cpp
Expand Up @@ -29,7 +29,7 @@

namespace Kyra {

LolEobBaseEngine::LolEobBaseEngine(OSystem *system, const GameFlags &flags) : KyraEngine_v1(system, flags) {
LolEobBaseEngine::LolEobBaseEngine(OSystem *system, const GameFlags &flags) : KyraEngine_v1(system, flags), _numFlyingObjects(_flags.gameID == GI_LOL ? 8 : 10) {
_txt = 0;
_mouseClick = 0;
_preserveEvents = _buttonListChanged = false;
Expand Down Expand Up @@ -75,6 +75,9 @@ LolEobBaseEngine::LolEobBaseEngine(OSystem *system, const GameFlags &flags) : Ky
_updateFlags = _clickedSpecialFlag = 0;
_sceneDefaultUpdate = 0;
_sceneUpdateRequired = false;

_flyingObjectsPtr = 0;
_flyingObjectStructSize = sizeof(EobFlyingObject);

_clickedShapeXOffs = _clickedShapeYOffs = 0;

Expand Down
25 changes: 22 additions & 3 deletions engines/kyra/loleobbase.h
Expand Up @@ -63,6 +63,22 @@ struct LevelTempData {
uint8 monsterDifficulty;
};

struct EobFlyingObject {
uint8 enable;
uint8 objectType;
int16 attackerId;
Item item;
uint16 curBlock;
uint16 u2;
uint8 u1;
uint8 direction;
uint8 distance;
int8 callBackIndex;
uint8 curPos;
uint8 flags;
uint8 unused;
};

class LolEobBaseEngine : public KyraEngine_v1 {
friend class TextDisplayer_Eob;
public:
Expand Down Expand Up @@ -289,13 +305,16 @@ friend class TextDisplayer_Eob;
void restoreBlockTempData(int levelIndex);
void releaseTempData();
virtual void *generateMonsterTempData(LevelTempData *tmp) = 0;
virtual void *generateFlyingObjectTempData(LevelTempData *tmp) = 0;
virtual void restoreMonsterTempData(LevelTempData *tmp) = 0;
virtual void restoreFlyingObjectTempData(LevelTempData *tmp) = 0;
virtual void releaseMonsterTempData(LevelTempData *tmp) = 0;
virtual void releaseFlyingObjectTempData(LevelTempData *tmp) = 0;
void restoreFlyingObjectTempData(LevelTempData *tmp);
void *generateFlyingObjectTempData(LevelTempData *tmp);
void releaseFlyingObjectTempData(LevelTempData *tmp);

LevelTempData *_lvlTempData[29];
const int _numFlyingObjects;
uint32 _flyingObjectStructSize;
void *_flyingObjectsPtr;

// sound
virtual bool snd_processEnvironmentalSoundEffect(int soundId, int block);
Expand Down
37 changes: 20 additions & 17 deletions engines/kyra/saveload_eob.cpp
Expand Up @@ -127,6 +127,23 @@ void LolEobBaseEngine::releaseTempData() {
}
}

void *LolEobBaseEngine::generateFlyingObjectTempData(LevelTempData *tmp) {
assert(_flyingObjectStructSize == sizeof(EobFlyingObject));
EobFlyingObject *f = new EobFlyingObject[_numFlyingObjects];
memcpy(f, _flyingObjectsPtr, sizeof(EobFlyingObject) * _numFlyingObjects);
return f;
}

void LolEobBaseEngine::restoreFlyingObjectTempData(LevelTempData *tmp) {
assert(_flyingObjectStructSize == sizeof(EobFlyingObject));
memcpy(_flyingObjectsPtr, tmp->flyingObjects, sizeof(EobFlyingObject) * _numFlyingObjects);
}

void LolEobBaseEngine::releaseFlyingObjectTempData(LevelTempData *tmp) {
EobFlyingObject *p = (EobFlyingObject*)tmp->flyingObjects;
delete[] p;
}

#ifdef ENABLE_EOB

Common::Error EobCoreEngine::loadGameState(int slot) {
Expand Down Expand Up @@ -269,7 +286,7 @@ Common::Error EobCoreEngine::loadGameState(int slot) {
_lvlTempData[i]->flags = new uint16[1024];
EobMonsterInPlay *lm = new EobMonsterInPlay[30];
_lvlTempData[i]->monsters = lm;
EobFlyingObject *lf = new EobFlyingObject[10];
EobFlyingObject *lf = new EobFlyingObject[_numFlyingObjects];
_lvlTempData[i]->flyingObjects = lf;
LevelTempData *l = _lvlTempData[i];

Expand Down Expand Up @@ -305,7 +322,7 @@ Common::Error EobCoreEngine::loadGameState(int slot) {
m->sub = in.readByte();
}

for (int ii = 0; ii < 10; ii++) {
for (int ii = 0; ii < _numFlyingObjects; ii++) {
EobFlyingObject *m = &lf[ii];
m->enable = in.readByte();
m->objectType = in.readByte();
Expand Down Expand Up @@ -481,7 +498,7 @@ Common::Error EobCoreEngine::saveGameStateIntern(int slot, const char *saveName,
out->writeByte(m->sub);
}

for (int ii = 0; ii < 10; ii++) {
for (int ii = 0; ii < _numFlyingObjects; ii++) {
EobFlyingObject *m = &lf[ii];
out->writeByte(m->enable);
out->writeByte(m->objectType);
Expand Down Expand Up @@ -519,29 +536,15 @@ void *EobCoreEngine::generateMonsterTempData(LevelTempData *tmp) {
return m;
}

void *EobCoreEngine::generateFlyingObjectTempData(LevelTempData *tmp) {
EobFlyingObject *f = new EobFlyingObject[10];
memcpy(f, _flyingObjects, sizeof(EobFlyingObject) * 10);
return f;
}

void EobCoreEngine::restoreMonsterTempData(LevelTempData *tmp) {
memcpy(_monsters, tmp->monsters, sizeof(EobMonsterInPlay) * 30);
}

void EobCoreEngine::restoreFlyingObjectTempData(LevelTempData *tmp) {
memcpy(_flyingObjects, tmp->flyingObjects, sizeof(EobFlyingObject) * 10);
}

void EobCoreEngine::releaseMonsterTempData(LevelTempData *tmp) {
EobMonsterInPlay *p = (EobMonsterInPlay*)tmp->monsters;
delete[] p;
}

void EobCoreEngine::releaseFlyingObjectTempData(LevelTempData *tmp) {

}

#endif // ENABLE_EOB

} // End of namespace Kyra
Expand Down
21 changes: 3 additions & 18 deletions engines/kyra/saveload_lol.cpp
Expand Up @@ -195,7 +195,7 @@ Common::Error LoLEngine::loadGameState(int slot) {
_lvlTempData[i]->flags = new uint16[1024];
LolMonsterInPlay *lm = new LolMonsterInPlay[30];
_lvlTempData[i]->monsters = lm;
FlyingObject *lf = new FlyingObject[8];
FlyingObject *lf = new FlyingObject[_numFlyingObjects];
_lvlTempData[i]->flyingObjects = lf;
LevelTempData *l = _lvlTempData[i];

Expand Down Expand Up @@ -236,7 +236,7 @@ Common::Error LoLEngine::loadGameState(int slot) {
in.read(m->equipmentShapes, 4);
}

for (int ii = 0; ii < 8; ii++) {
for (int ii = 0; ii < _numFlyingObjects; ii++) {
FlyingObject *m = &lf[ii];
m->enable = in.readByte();
m->objectType = in.readByte();
Expand Down Expand Up @@ -420,7 +420,7 @@ Common::Error LoLEngine::saveGameStateIntern(int slot, const char *saveName, con
out->write(m->equipmentShapes, 4);
}

for (int ii = 0; ii < 8; ii++) {
for (int ii = 0; ii < _numFlyingObjects; ii++) {
FlyingObject *m = &lf[ii];
out->writeByte(m->enable);
out->writeByte(m->objectType);
Expand Down Expand Up @@ -489,12 +489,6 @@ void *LoLEngine::generateMonsterTempData(LevelTempData *tmp) {
return m;
}

void *LoLEngine::generateFlyingObjectTempData(LevelTempData *tmp) {
FlyingObject *f = new FlyingObject[8];
memcpy(f, _flyingObjects, sizeof(FlyingObject) * 8);
return f;
}

void LoLEngine::restoreTempDataAdjustMonsterStrength(int index) {
if (_lvlTempData[index]->monsterDifficulty == _monsterDifficulty)
return;
Expand Down Expand Up @@ -525,20 +519,11 @@ void LoLEngine::restoreMonsterTempData(LevelTempData *tmp) {
}
}

void LoLEngine::restoreFlyingObjectTempData(LevelTempData *tmp) {
memcpy(_flyingObjects, tmp->flyingObjects, sizeof(FlyingObject) * 8);
}

void LoLEngine::releaseMonsterTempData(LevelTempData *tmp) {
LolMonsterInPlay *p = (LolMonsterInPlay*)tmp->monsters;
delete[] p;
}

void LoLEngine::releaseFlyingObjectTempData(LevelTempData *tmp) {
FlyingObject *p = (FlyingObject*)tmp->flyingObjects;
delete[] p;
}

} // End of namespace Kyra

#endif // ENABLE_LOL

0 comments on commit aa031bf

Please sign in to comment.