KYRA: (EOB) - minor code size reduction

This commit is contained in:
athrxx 2011-06-09 16:30:41 +02:00 committed by Johannes Schickel
parent ff8a030c37
commit aa031bf98e
8 changed files with 56 additions and 65 deletions

View File

@ -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);

View File

@ -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 {
@ -770,11 +754,8 @@ protected:
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;

View File

@ -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));

View File

@ -1299,12 +1299,9 @@ private:
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;
};

View File

@ -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;
@ -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;

View File

@ -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:
@ -289,13 +305,16 @@ protected:
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);

View File

@ -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) {
@ -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];
@ -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();
@ -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);
@ -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

View File

@ -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];
@ -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();
@ -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);
@ -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;
@ -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