aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/fight
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lastexpress/fight')
-rw-r--r--engines/lastexpress/fight/fight.cpp7
-rw-r--r--engines/lastexpress/fight/fighter.cpp27
-rw-r--r--engines/lastexpress/fight/fighter.h3
3 files changed, 24 insertions, 13 deletions
diff --git a/engines/lastexpress/fight/fight.cpp b/engines/lastexpress/fight/fight.cpp
index b832d46a60..49a9b85657 100644
--- a/engines/lastexpress/fight/fight.cpp
+++ b/engines/lastexpress/fight/fight.cpp
@@ -31,6 +31,7 @@
#include "lastexpress/data/cursor.h"
#include "lastexpress/data/sequence.h"
+#include "lastexpress/game/entities.h"
#include "lastexpress/game/inventory.h"
#include "lastexpress/game/logic.h"
#include "lastexpress/game/object.h"
@@ -40,7 +41,6 @@
#include "lastexpress/sound/queue.h"
#include "lastexpress/graphics.h"
-#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
@@ -53,6 +53,8 @@ Fight::FightData::FightData() {
index = 0;
isFightRunning = false;
+
+ memset(&sequences, 0, sizeof(sequences));
}
Fight::FightData::~FightData() {
@@ -399,6 +401,9 @@ end_load:
}
void Fight::setOpponents() {
+ if (!_data)
+ error("[Fight::setOpponents] Data not initialized");
+
_data->player->setOpponent(_data->opponent);
_data->opponent->setOpponent(_data->player);
diff --git a/engines/lastexpress/fight/fighter.cpp b/engines/lastexpress/fight/fighter.cpp
index bae7728a2b..4b1cddabd4 100644
--- a/engines/lastexpress/fight/fighter.cpp
+++ b/engines/lastexpress/fight/fighter.cpp
@@ -53,20 +53,20 @@ Fighter::Fighter(LastExpressEngine *engine) : _engine(engine) {
}
Fighter::~Fighter() {
- clearSequences();
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Cleanup
-//////////////////////////////////////////////////////////////////////////
-void Fighter::clearSequences() {
// The original game resets the function pointers to default values, just before deleting the struct
getScenes()->removeAndRedraw(&_frame, false);
// Free sequences
- for (int i = 0; i < (int)_sequences.size(); i++)
+ for (uint i = 0; i < _sequences.size(); i++)
SAFE_DELETE(_sequences[i]);
+
+ // Zero-out passed pointers
+ _sequence = NULL;
+ _opponent = NULL;
+ _fight = NULL;
+
+ _engine = NULL;
}
//////////////////////////////////////////////////////////////////////////
@@ -113,6 +113,9 @@ void Fighter::draw() {
// Processing
//////////////////////////////////////////////////////////////////////////
void Fighter::process() {
+ if (!_fight)
+ error("[Fighter::handleAction] Fighter not initialized properly");
+
if (!_sequence) {
if (_frame) {
getScenes()->removeFromQueue(_frame);
@@ -188,6 +191,9 @@ void Fighter::process() {
// Default actions
//////////////////////////////////////////////////////////////////////////
void Fighter::handleAction(FightAction action) {
+ if (!_opponent || !_fight)
+ error("[Fighter::handleAction] Fighter not initialized properly");
+
switch (action) {
default:
return;
@@ -243,7 +249,10 @@ void Opponent::update() {
// Helpers
//////////////////////////////////////////////////////////////////////////
bool Fighter::checkFrame(uint32 val) {
- return (_frame->getInfo()->field_33 & val);
+ if (!_frame)
+ error("[Fighter::checkFrame] Invalid current frame");
+
+ return (bool)(_frame->getInfo()->field_33 & val);
}
} // End of namespace LastExpress
diff --git a/engines/lastexpress/fight/fighter.h b/engines/lastexpress/fight/fighter.h
index e37fe49d86..dad95af186 100644
--- a/engines/lastexpress/fight/fighter.h
+++ b/engines/lastexpress/fight/fighter.h
@@ -99,9 +99,6 @@ protected:
void draw();
void process();
- // Cleanup
- void clearSequences();
-
// Helpers
bool checkFrame(uint32 val);
};