[Scummvm-git-logs] scummvm master -> f9035f83bbd236156b10c82793a1b3bd78119ec0
mduggan
mgithub at guarana.org
Tue Apr 28 05:50:42 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f9035f83bb ULTIMA8: Fix lots of coverity issues
Commit: f9035f83bbd236156b10c82793a1b3bd78119ec0
https://github.com/scummvm/scummvm/commit/f9035f83bbd236156b10c82793a1b3bd78119ec0
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-04-28T14:50:06+09:00
Commit Message:
ULTIMA8: Fix lots of coverity issues
Changed paths:
engines/ultima/ultima8/audio/audio_process.h
engines/ultima/ultima8/audio/music_process.cpp
engines/ultima/ultima8/graphics/palette_fader_process.cpp
engines/ultima/ultima8/graphics/raw_shape_frame.cpp
engines/ultima/ultima8/gumps/bark_gump.cpp
engines/ultima/ultima8/gumps/book_gump.cpp
engines/ultima/ultima8/gumps/credits_gump.cpp
engines/ultima/ultima8/gumps/game_map_gump.cpp
engines/ultima/ultima8/gumps/gump.cpp
engines/ultima/ultima8/gumps/gump_notify_process.cpp
engines/ultima/ultima8/gumps/minimap_gump.cpp
engines/ultima/ultima8/gumps/paperdoll_gump.cpp
engines/ultima/ultima8/gumps/readable_gump.cpp
engines/ultima/ultima8/gumps/scroll_gump.cpp
engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
engines/ultima/ultima8/gumps/slider_gump.cpp
engines/ultima/ultima8/gumps/widgets/button_widget.cpp
engines/ultima/ultima8/gumps/widgets/text_widget.cpp
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/usecode/uc_process.cpp
engines/ultima/ultima8/world/actors/actor_anim_process.cpp
engines/ultima/ultima8/world/actors/ambush_process.cpp
engines/ultima/ultima8/world/actors/animation_tracker.cpp
engines/ultima/ultima8/world/actors/combat_process.cpp
engines/ultima/ultima8/world/actors/loiter_process.cpp
engines/ultima/ultima8/world/actors/pathfinder_process.cpp
engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
engines/ultima/ultima8/world/camera_process.cpp
engines/ultima/ultima8/world/fireball_process.cpp
engines/ultima/ultima8/world/gravity_process.cpp
engines/ultima/ultima8/world/item.cpp
engines/ultima/ultima8/world/item.h
engines/ultima/ultima8/world/split_item_process.cpp
diff --git a/engines/ultima/ultima8/audio/audio_process.h b/engines/ultima/ultima8/audio/audio_process.h
index 2f2b63a558..abcf5d326e 100644
--- a/engines/ultima/ultima8/audio/audio_process.h
+++ b/engines/ultima/ultima8/audio/audio_process.h
@@ -52,7 +52,8 @@ public:
SampleInfo() : _sfxNum(-1) { }
SampleInfo(int32 s, int32 p, ObjId o, int32 l, int32 c, uint32 ps, uint16 v, int16 lv, int16 rv) :
_sfxNum(s), _priority(p), _objId(o), _loops(l), _channel(c),
- _pitchShift(ps), _volume(v), _lVol(lv), _rVol(rv) { }
+ _pitchShift(ps), _volume(v), _lVol(lv), _rVol(rv),
+ _curSpeechStart(0), _curSpeechEnd(0) { }
SampleInfo(const Std::string &b, int32 shpnum, ObjId o, int32 c,
uint32 s, uint32 e, uint32 ps, uint16 v, int16 lv, int16 rv) :
_sfxNum(-1), _priority(shpnum), _objId(o), _loops(0), _channel(c), _barked(b),
diff --git a/engines/ultima/ultima8/audio/music_process.cpp b/engines/ultima/ultima8/audio/music_process.cpp
index b5a4163dd8..fe23c61b04 100644
--- a/engines/ultima/ultima8/audio/music_process.cpp
+++ b/engines/ultima/ultima8/audio/music_process.cpp
@@ -119,7 +119,7 @@ void MusicProcess::restoreTrackState() {
}
void MusicProcess::playMusic_internal(int track) {
- if (track < 0 || track > 128) {
+ if (track < 0 || track >= 128) {
playMusic_internal(0);
return;
}
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index 6b3fa3de19..bcaa497a7a 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -33,7 +33,8 @@ PaletteFaderProcess *PaletteFaderProcess::_fader = nullptr;
// p_dynamic_class stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(PaletteFaderProcess, Process)
-PaletteFaderProcess::PaletteFaderProcess() : Process() {
+PaletteFaderProcess::PaletteFaderProcess() : Process(), _priority(0),
+ _counter(0), _maxCounter(0) {
}
PaletteFaderProcess::PaletteFaderProcess(PalTransforms trans,
diff --git a/engines/ultima/ultima8/graphics/raw_shape_frame.cpp b/engines/ultima/ultima8/graphics/raw_shape_frame.cpp
index f9fceb02a4..dea5b53725 100644
--- a/engines/ultima/ultima8/graphics/raw_shape_frame.cpp
+++ b/engines/ultima/ultima8/graphics/raw_shape_frame.cpp
@@ -36,7 +36,8 @@ namespace Ultima8 {
parse data and fill class
*/
RawShapeFrame::RawShapeFrame(const uint8 *data, uint32 size, const ConvertShapeFormat *format,
- const uint8 special[256], ConvertShapeFrame *prev) : _line_offsets(0) {
+ const uint8 special[256], ConvertShapeFrame *prev) : _line_offsets(0),
+ _rle_data(nullptr) {
// Load it as u8
if (!format || format == &U8ShapeFormat || format == &U82DShapeFormat)
loadU8Format(data, size);
diff --git a/engines/ultima/ultima8/gumps/bark_gump.cpp b/engines/ultima/ultima8/gumps/bark_gump.cpp
index ff58feda30..b38d84c2d4 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.cpp
+++ b/engines/ultima/ultima8/gumps/bark_gump.cpp
@@ -36,13 +36,14 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(BarkGump, ItemRelativeGump)
// TODO: Remove all the hacks
BarkGump::BarkGump() : ItemRelativeGump(), _counter(0), _textWidget(0),
- _speechShapeNum(0), _speechLength(0), _totalTextHeight(0) {
+ _speechShapeNum(0), _speechLength(0), _totalTextHeight(0),
+ _textDelay(20) {
}
BarkGump::BarkGump(uint16 owner, const Std::string &msg, uint32 speechShapeNum) :
ItemRelativeGump(0, 0, 100, 100, owner, FLAG_KEEP_VISIBLE, LAYER_ABOVE_NORMAL),
_barked(msg), _counter(100), _speechShapeNum(speechShapeNum),
- _speechLength(0), _totalTextHeight(0), _textWidget(0) {
+ _speechLength(0), _totalTextHeight(0), _textWidget(0), _textDelay(20) {
SettingManager::get_instance()->get("textdelay", _textDelay);
}
@@ -208,8 +209,9 @@ bool BarkGump::loadData(Common::ReadStream *rs, uint32 version) {
_barked = "";
}
-
TextWidget *widget = p_dynamic_cast<TextWidget *>(getGump(_textWidget));
+ if (!widget)
+ return false;
SettingManager::get_instance()->get("textdelay", _textDelay);
diff --git a/engines/ultima/ultima8/gumps/book_gump.cpp b/engines/ultima/ultima8/gumps/book_gump.cpp
index 1485c0cb32..0a7d976b09 100644
--- a/engines/ultima/ultima8/gumps/book_gump.cpp
+++ b/engines/ultima/ultima8/gumps/book_gump.cpp
@@ -40,12 +40,13 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(BookGump, ModalGump)
// TODO: Remove all the hacks
BookGump::BookGump()
- : ModalGump() {
+ : ModalGump(), _textWidgetL(0), _textWidgetR(0) {
}
BookGump::BookGump(ObjId owner_, const Std::string &msg) :
- ModalGump(0, 0, 100, 100, owner_), _text(msg) {
+ ModalGump(0, 0, 100, 100, owner_), _text(msg),
+ _textWidgetL(0), _textWidgetR(0) {
}
BookGump::~BookGump(void) {
diff --git a/engines/ultima/ultima8/gumps/credits_gump.cpp b/engines/ultima/ultima8/gumps/credits_gump.cpp
index 1859114558..52bb81b06e 100644
--- a/engines/ultima/ultima8/gumps/credits_gump.cpp
+++ b/engines/ultima/ultima8/gumps/credits_gump.cpp
@@ -44,14 +44,9 @@ CreditsGump::CreditsGump()
CreditsGump::CreditsGump(const Std::string &text, int parskip,
uint32 flags, int32 layer)
- : ModalGump(0, 0, 320, 200, 0, flags, layer) {
- _text = text;
- _parSkip = parskip;
-
- _timer = 0;
- _title = nullptr;
- _nextTitle = nullptr;
- _state = CS_PLAYING;
+ : ModalGump(0, 0, 320, 200, 0, flags, layer), _text(text), _parSkip(parskip),
+ _timer(0), _title(nullptr), _nextTitle(nullptr), _state(CS_PLAYING),
+ _nextTitleSurf(0), _currentSurface(0), _currentY(0) {
}
CreditsGump::~CreditsGump() {
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index a2dff41023..1cdcc9a5bc 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -64,8 +64,9 @@ GameMapGump::GameMapGump() :
}
GameMapGump::GameMapGump(int x, int y, int width, int height) :
- Gump(x, y, width, height, 0, FLAG_DONT_SAVE | FLAG_CORE_GUMP, LAYER_GAMEMAP),
- _displayList(0), _displayDragging(false) {
+ Gump(x, y, width, height, 0, FLAG_DONT_SAVE | FLAG_CORE_GUMP, LAYER_GAMEMAP),
+ _displayList(0), _displayDragging(false), _draggingShape(0), _draggingFrame(0),
+ _draggingFlags(0) {
// Offset the gump. We want 0,0 to be the centre
_dims.x -= _dims.w / 2;
_dims.y -= _dims.h / 2;
diff --git a/engines/ultima/ultima8/gumps/gump.cpp b/engines/ultima/ultima8/gumps/gump.cpp
index f37e0a386f..faaf4dc6c2 100644
--- a/engines/ultima/ultima8/gumps/gump.cpp
+++ b/engines/ultima/ultima8/gumps/gump.cpp
@@ -38,7 +38,10 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(Gump, Object)
-Gump::Gump() : Object(), _parent(nullptr), _children() {
+Gump::Gump() : Object(), _parent(nullptr), _owner(0),
+ _x(0), _y(0), _flags(0), _layer(0), _index(-1),
+ _shape(nullptr), _frameNum(0), _focusChild(nullptr),
+ _notifier(0), _processResult(0) {
}
Gump::Gump(int inX, int inY, int width, int height, uint16 inOwner,
diff --git a/engines/ultima/ultima8/gumps/gump_notify_process.cpp b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
index 03c16f0851..643f042d5d 100644
--- a/engines/ultima/ultima8/gumps/gump_notify_process.cpp
+++ b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
@@ -31,7 +31,7 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(GumpNotifyProcess, Process)
GumpNotifyProcess::GumpNotifyProcess()
- : Process() {
+ : Process(), _gump(0) {
}
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 4ac718eca3..dced26df23 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -46,7 +46,7 @@ MiniMapGump::MiniMapGump(int x, int y) :
TEX_FMT_NATIVE);
}
-MiniMapGump::MiniMapGump() : Gump() {
+MiniMapGump::MiniMapGump() : Gump() , _lastMapNum(0){
}
MiniMapGump::~MiniMapGump(void) {
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
index 90ede2eeef..7c5a905d1f 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
@@ -266,9 +266,11 @@ bool PaperdollGump::GetLocationOfItem(uint16 itemid, int32 &gx, int32 &gy,
int32 lerp_factor) {
Item *item = getItem(itemid);
- Item *parent_ = item->getParentAsContainer();
- if (!parent_) return false;
- if (parent_->getObjId() != _owner) return false;
+ if (!item)
+ return false; // item gone - shouldn't happen?
+ Item *parent = item->getParentAsContainer();
+ if (!parent || parent->getObjId() != _owner)
+ return false;
//!!! need to use lerp_factor
diff --git a/engines/ultima/ultima8/gumps/readable_gump.cpp b/engines/ultima/ultima8/gumps/readable_gump.cpp
index 2a4bc13374..c02214e2b7 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.cpp
+++ b/engines/ultima/ultima8/gumps/readable_gump.cpp
@@ -43,7 +43,7 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(ReadableGump, ModalGump)
const int jpsub_font = 6;
ReadableGump::ReadableGump()
- : ModalGump() {
+ : ModalGump(), _shapeNum(0), _fontNum(0) {
}
diff --git a/engines/ultima/ultima8/gumps/scroll_gump.cpp b/engines/ultima/ultima8/gumps/scroll_gump.cpp
index 9957a65948..54b8c284a5 100644
--- a/engines/ultima/ultima8/gumps/scroll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/scroll_gump.cpp
@@ -40,12 +40,12 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(ScrollGump, ModalGump)
// TODO: Remove all the hacks
ScrollGump::ScrollGump()
- : ModalGump() {
+ : ModalGump(), _textWidget(0) {
}
ScrollGump::ScrollGump(ObjId owner_, Std::string msg) :
- ModalGump(0, 0, 100, 100, owner_), _text(msg) {
+ ModalGump(0, 0, 100, 100, owner_), _text(msg), _textWidget(0) {
}
ScrollGump::~ScrollGump(void) {
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index b1160f1a2e..83a3da2474 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -53,7 +53,7 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(ShapeViewerGump, ModalGump)
ShapeViewerGump::ShapeViewerGump()
: ModalGump(), _curFlex(0), _flex(nullptr), _curShape(0),
- _curFrame(0), _background(0) {
+ _curFrame(0), _background(0), _shapeW(0), _shapeH(0), _shapeX(0), _shapeY(0) {
}
@@ -62,7 +62,7 @@ ShapeViewerGump::ShapeViewerGump(int x, int y, int width, int height,
uint32 flags, int32 layer)
: ModalGump(x, y, width, height, 0, flags, layer),
_flexes(flexes), _curFlex(0), _curShape(0), _curFrame(0),
- _background(0), _fontNo(0) {
+ _background(0), _fontNo(0), _shapeW(0), _shapeH(0), _shapeX(0), _shapeY(0) {
if (_flexes.size())
_flex = _flexes[0].second;
else
diff --git a/engines/ultima/ultima8/gumps/slider_gump.cpp b/engines/ultima/ultima8/gumps/slider_gump.cpp
index 45d6212918..e34fef4a69 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.cpp
+++ b/engines/ultima/ultima8/gumps/slider_gump.cpp
@@ -40,14 +40,15 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(SliderGump, ModalGump)
-SliderGump::SliderGump() : ModalGump(), _renderedText(nullptr) {
+SliderGump::SliderGump() : ModalGump(), _renderedText(nullptr), _min(0), _max(0),
+ _delta(0), _value(0), _usecodeNotifyPID(0), _renderedValue(-1) {
}
SliderGump::SliderGump(int x, int y, int16 min, int16 max,
int16 value_, int16 delta)
: ModalGump(x, y, 5, 5), _min(min), _max(max), _delta(delta), _value(value_),
- _usecodeNotifyPID(0), _renderedText(nullptr) {
+ _usecodeNotifyPID(0), _renderedText(nullptr), _renderedValue(-1) {
}
SliderGump::~SliderGump() {
diff --git a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
index 9f76663680..18da138879 100644
--- a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
@@ -37,14 +37,15 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(ButtonWidget, Gump)
ButtonWidget::ButtonWidget() : Gump(), _shapeUp(nullptr), _shapeDown(nullptr),
- _mouseOver(false), _origW(0), _origH(0) {
+ _mouseOver(false), _origW(0), _origH(0), _frameNumUp(0),
+ _frameNumDown(0), _mouseOverBlendCol(0), _textWidget(0) {
}
ButtonWidget::ButtonWidget(int x, int y, Std::string txt, bool gamefont,
int font, uint32 mouseOverBlendCol,
int w, int h, int32 layer) :
Gump(x, y, w, h, 0, 0, layer), _shapeUp(nullptr), _shapeDown(nullptr),
- _mouseOver(false), _origW(w), _origH(h) {
+ _mouseOver(false), _origW(w), _origH(h), _frameNumUp(0), _frameNumDown(0) {
TextWidget *widget = new TextWidget(0, 0, txt, gamefont, font, w, h);
_textWidget = widget->getObjId();
_mouseOverBlendCol = mouseOverBlendCol;
diff --git a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
index 263a05b06d..d15b263bab 100644
--- a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
@@ -44,7 +44,7 @@ TextWidget::TextWidget() : Gump(), _gameFont(false), _fontNum(0), _blendColour(0
TextWidget::TextWidget(int x, int y, const Std::string &txt, bool gamefont_, int font,
int w, int h, Font::TextAlign align) :
Gump(x, y, w, h), _text(txt), _gameFont(gamefont_), _fontNum(font),
- _blendColour(0), _currentStart(0), _currentEnd(0),
+ _blendColour(0), _currentStart(0), _currentEnd(0), _tx(0), _ty(0),
_targetWidth(w), _targetHeight(h), _cachedText(nullptr), _textAlign(align) {
}
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 6b3968f730..4aef9e7494 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -140,7 +140,8 @@ Ultima8Engine::Ultima8Engine(OSystem *syst, const Ultima::UltimaGameDescription
_frameSkip(false), _frameLimit(true), _interpolate(true), _animationRate(100),
_avatarInStasis(false), _paintEditorItems(false), _inversion(0), _painting(false),
_showTouching(false), _timeOffset(0), _hasCheated(false), _cheatsEnabled(false),
- _ttfOverrides(false), _audioMixer(0) {
+ _ttfOverrides(false), _audioMixer(0), _memoryManager(nullptr), _scalerGump(nullptr),
+ _inverterGump(nullptr), _lerpFactor(256), _inBetweenFrame(false) {
_application = this;
for (uint16 key = 0; key < HID_LAST; ++key) {
@@ -313,7 +314,7 @@ void Ultima8Engine::startupGame() {
CANT_HAPPEN_MSG("Invalid game type.");
}
- _inBetweenFrame = 0;
+ _inBetweenFrame = false;
_lerpFactor = 256;
// Initialize _world
diff --git a/engines/ultima/ultima8/usecode/uc_process.cpp b/engines/ultima/ultima8/usecode/uc_process.cpp
index 1f8f5900b9..a1bdb1e4c8 100644
--- a/engines/ultima/ultima8/usecode/uc_process.cpp
+++ b/engines/ultima/ultima8/usecode/uc_process.cpp
@@ -32,18 +32,15 @@ namespace Ultima8 {
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(UCProcess, Process)
-UCProcess::UCProcess() : Process() { // !! fixme
+UCProcess::UCProcess() : Process(), _classId(0xFFFF), _ip(0xFFFF),
+ _bp(0x0000), _temp32(0) { // !! fixme
_usecode = GameData::get_instance()->getMainUsecode();
}
UCProcess::UCProcess(uint16 classid_, uint16 offset_, uint32 this_ptr,
int thissize, const uint8 *args, int argsize)
- : Process() {
- _classId = 0xFFFF;
- _ip = 0xFFFF;
- _bp = 0x0000;
+ : Process(), _classId(0xFFFF), _ip(0xFFFF), _bp(0x0000), _temp32(0) {
_usecode = GameData::get_instance()->getMainUsecode();
- _temp32 = 0;
load(classid_, offset_, this_ptr, thissize, args, argsize);
}
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index 80fcc48e4d..108665d6a6 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -59,14 +59,17 @@ static const int watchactor = WATCHACTOR;
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(ActorAnimProcess, Process)
-ActorAnimProcess::ActorAnimProcess() : Process(), _tracker(nullptr) {
-
+ActorAnimProcess::ActorAnimProcess() : Process(), _tracker(nullptr),
+ _dir(0), _action(Animation::walk), _steps(0), _firstFrame(true),
+ _currentStep(0), _repeatCounter(0), _animAborted(false),
+ _attackedSomething(false) {
}
ActorAnimProcess::ActorAnimProcess(Actor *actor_, Animation::Sequence action_,
uint32 dir_, uint32 steps_) :
_dir(dir_), _action(action_), _steps(steps_), _tracker(nullptr),
- _firstFrame(true), _currentStep(0) {
+ _firstFrame(true), _currentStep(0), _repeatCounter(0),
+ _animAborted(false), _attackedSomething(false) {
assert(actor_);
_itemNum = actor_->getObjId();
diff --git a/engines/ultima/ultima8/world/actors/ambush_process.cpp b/engines/ultima/ultima8/world/actors/ambush_process.cpp
index 0a32042f81..ca35f89a84 100644
--- a/engines/ultima/ultima8/world/actors/ambush_process.cpp
+++ b/engines/ultima/ultima8/world/actors/ambush_process.cpp
@@ -33,16 +33,14 @@ namespace Ultima8 {
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(AmbushProcess, Process)
-AmbushProcess::AmbushProcess() : Process() {
+AmbushProcess::AmbushProcess() : Process(), _delayCount(0) {
}
-AmbushProcess::AmbushProcess(Actor *actor_) {
- assert(actor_);
- _itemNum = actor_->getObjId();
+AmbushProcess::AmbushProcess(Actor *actor) : _delayCount(0) {
+ assert(actor);
+ _itemNum = actor->getObjId();
_type = 0x21E; // CONSTANT !
-
- _delayCount = 0;
}
void AmbushProcess::run() {
@@ -53,6 +51,12 @@ void AmbushProcess::run() {
_delayCount = 10;
Actor *a = getActor(_itemNum);
+ if (!a) {
+ // this shouldn't happen
+ terminate();
+ return;
+ }
+
CombatProcess *cp = a->getCombatProcess();
if (!cp) {
// this shouldn't have happened
diff --git a/engines/ultima/ultima8/world/actors/animation_tracker.cpp b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
index 23d31500d2..79554adf63 100644
--- a/engines/ultima/ultima8/world/actors/animation_tracker.cpp
+++ b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
@@ -57,7 +57,8 @@ bool AnimationTracker::init(Actor *actor_, Animation::Sequence action_,
uint32 shape = actor_->getShape();
_animAction = GameData::get_instance()->getMainShapes()->
getAnim(shape, action_);
- if (!_animAction) return false;
+ if (!_animAction)
+ return false;
_dir = dir_;
@@ -102,7 +103,7 @@ bool AnimationTracker::init(Actor *actor_, Animation::Sequence action_,
unsigned int AnimationTracker::getNextFrame(unsigned int frame) const {
frame++;
- if (frame == _endFrame)
+ if (!_animAction || frame == _endFrame)
return _endFrame;
// loop if necessary
diff --git a/engines/ultima/ultima8/world/actors/combat_process.cpp b/engines/ultima/ultima8/world/actors/combat_process.cpp
index a82404dddc..8537b31c15 100644
--- a/engines/ultima/ultima8/world/actors/combat_process.cpp
+++ b/engines/ultima/ultima8/world/actors/combat_process.cpp
@@ -73,7 +73,7 @@ void CombatProcess::run() {
// They should not try to approach.
Actor *a = getActor(_itemNum);
- if (!a->hasFlags(Item::FLG_FASTAREA))
+ if (!a || !a->hasFlags(Item::FLG_FASTAREA))
return;
Actor *t = getActor(_target);
@@ -239,6 +239,8 @@ ObjId CombatProcess::seekTarget() {
int CombatProcess::getTargetDirection() {
Actor *a = getActor(_itemNum);
+ if (!a)
+ return 0; // shouldn't happen
Actor *t = getActor(_target);
return a->getDirToItemCentre(*t);
@@ -246,6 +248,8 @@ int CombatProcess::getTargetDirection() {
void CombatProcess::turnToDirection(int direction) {
Actor *a = getActor(_itemNum);
+ if (!a)
+ return;
int curdir = a->getDir();
int step = 1;
if ((curdir - direction + 8) % 8 < 4) step = -1;
@@ -275,6 +279,8 @@ void CombatProcess::turnToDirection(int direction) {
bool CombatProcess::inAttackRange() {
Actor *a = getActor(_itemNum);
+ if (!a)
+ return false; // shouldn't happen
ShapeInfo *shapeinfo = a->getShapeInfo();
MonsterInfo *mi = nullptr;
if (shapeinfo) mi = shapeinfo->_monsterInfo;
@@ -298,6 +304,8 @@ bool CombatProcess::inAttackRange() {
void CombatProcess::waitForTarget() {
Actor *a = getActor(_itemNum);
+ if (!a)
+ return; // shouldn't happen
ShapeInfo *shapeinfo = a->getShapeInfo();
MonsterInfo *mi = nullptr;
if (shapeinfo) mi = shapeinfo->_monsterInfo;
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.cpp b/engines/ultima/ultima8/world/actors/loiter_process.cpp
index d01cf423f5..6ff259a85f 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.cpp
+++ b/engines/ultima/ultima8/world/actors/loiter_process.cpp
@@ -34,13 +34,12 @@ namespace Ultima8 {
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(LoiterProcess, Process)
-LoiterProcess::LoiterProcess() : Process() {
+LoiterProcess::LoiterProcess() : Process(), _count(0) {
}
-LoiterProcess::LoiterProcess(Actor *actor, int32 c) {
+LoiterProcess::LoiterProcess(Actor *actor, int32 c) : _count(c) {
assert(actor);
_itemNum = actor->getObjId();
- _count = c;
_type = 0x205; // CONSTANT!
}
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
index a43cc0fd84..f84691b72f 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
@@ -36,16 +36,17 @@ static const unsigned int PATH_FAILED = 0;
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(PathfinderProcess, Process)
-PathfinderProcess::PathfinderProcess() : Process() {
-
+PathfinderProcess::PathfinderProcess() : Process(),
+ _currentStep(0), _targetItem(0), _hitMode(false),
+ _targetX(0), _targetY(0), _targetZ(0) {
}
-PathfinderProcess::PathfinderProcess(Actor *actor_, ObjId item_, bool hit) {
- assert(actor_);
- _itemNum = actor_->getObjId();
+PathfinderProcess::PathfinderProcess(Actor *actor, ObjId item_, bool hit) :
+ _currentStep(0), _targetItem(item_), _hitMode(hit) {
+ assert(actor);
+ _itemNum = actor->getObjId();
_type = 0x0204; // CONSTANT !
-
Item *item = getItem(item_);
if (!item) {
perr << "PathfinderProcess: non-existent target" << Std::endl;
@@ -55,15 +56,12 @@ PathfinderProcess::PathfinderProcess(Actor *actor_, ObjId item_, bool hit) {
return;
}
- _currentStep = 0;
- _targetItem = item_;
- _hitMode = hit;
assert(_targetItem);
item->getLocation(_targetX, _targetY, _targetZ);
Pathfinder pf;
- pf.init(actor_);
+ pf.init(actor);
pf.setTarget(item, hit);
bool ok = pf.pathfind(_path);
@@ -77,7 +75,7 @@ PathfinderProcess::PathfinderProcess(Actor *actor_, ObjId item_, bool hit) {
}
// TODO: check if flag already set? kill other pathfinders?
- actor_->setActorFlag(Actor::ACT_PATHFINDING);
+ actor->setActorFlag(Actor::ACT_PATHFINDING);
}
PathfinderProcess::PathfinderProcess(Actor *actor_,
diff --git a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
index d4f9266e2d..e8923b572b 100644
--- a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
@@ -31,14 +31,12 @@ namespace Ultima8 {
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(TargetedAnimProcess, ActorAnimProcess)
-TargetedAnimProcess::TargetedAnimProcess() : ActorAnimProcess() {
-
+TargetedAnimProcess::TargetedAnimProcess() : ActorAnimProcess(),
+ _x(0), _y(0), _z(0) {
}
-TargetedAnimProcess::TargetedAnimProcess(Actor *actor_, Animation::Sequence action_, uint32 dir_, int32 coords[3]) : ActorAnimProcess(actor_, action_, dir_) {
- _x = coords[0];
- _y = coords[1];
- _z = coords[2];
+TargetedAnimProcess::TargetedAnimProcess(Actor *actor_, Animation::Sequence action_, uint32 dir_, int32 coords[3]) : ActorAnimProcess(actor_, action_, dir_),
+ _x(coords[0]), _y(coords[1]), _z(coords[2]) {
}
bool TargetedAnimProcess::init() {
diff --git a/engines/ultima/ultima8/world/camera_process.cpp b/engines/ultima/ultima8/world/camera_process.cpp
index 32a0912e21..7f9c225adb 100644
--- a/engines/ultima/ultima8/world/camera_process.cpp
+++ b/engines/ultima/ultima8/world/camera_process.cpp
@@ -46,7 +46,9 @@ int32 CameraProcess::_earthquake = 0;
int32 CameraProcess::_eqX = 0;
int32 CameraProcess::_eqY = 0;
-CameraProcess::CameraProcess() : Process() {
+CameraProcess::CameraProcess() : Process(), _sx(0), _sy(0), _sz(0),
+ _ex(0), _ey(0), _ez(0), _time(0), _elapsed(0),
+ _itemNum(0), _lastFrameNum(0) {
}
CameraProcess::~CameraProcess() {
@@ -260,6 +262,7 @@ uint16 CameraProcess::FindRoof(int32 factor) {
GetLerped(x, y, z, factor);
_earthquake = earthquake_old;
Item *avatar = getItem(1);
+ assert(avatar);
int32 dx, dy, dz;
avatar->getFootpadWorld(dx, dy, dz);
uint16 roofid;
diff --git a/engines/ultima/ultima8/world/fireball_process.cpp b/engines/ultima/ultima8/world/fireball_process.cpp
index 748b61311a..c6a0e601b5 100644
--- a/engines/ultima/ultima8/world/fireball_process.cpp
+++ b/engines/ultima/ultima8/world/fireball_process.cpp
@@ -40,7 +40,7 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(FireballProcess, Process)
FireballProcess::FireballProcess()
- : Process() {
+ : Process(), _xSpeed(0), _ySpeed(0), _age(0), _target(0) {
}
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index c2b9c608d3..8afb0a3d3f 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -165,6 +165,8 @@ void GravityProcess::run() {
bool termFlag = true;
Item *hititem = getItem(hititemid);
+ if (!hititem)
+ return; // shouldn't happen..
if (_zSpeed < -2 && !p_dynamic_cast<Actor *>(item)) {
#ifdef BOUNCE_DIAG
pout << "item " << _itemNum << " bounce ["
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index efab005ac4..72eb4298b7 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -72,7 +72,8 @@ Item::Item()
_flags(0), _quality(0), _npcNum(0), _mapNum(0),
_extendedFlags(0), _parent(0),
_cachedShape(nullptr), _cachedShapeInfo(nullptr),
- _gump(0), _gravityPid(0), _lastSetup(0) {
+ _gump(0), _gravityPid(0), _lastSetup(0),
+ _ix(0), _iy(0), _iz(0) {
}
@@ -896,6 +897,8 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
bool we_were_released = false;
for (it = collisions.begin(); it != collisions.end(); it++) {
Item *item = getItem(it->_item);
+ if (!item)
+ continue; // shouldn't happen..
// Hitting us at the start and end, don't do anything
if (!_parent && it->_hitTime == 0x0000 &&
@@ -2837,7 +2840,7 @@ uint32 Item::I_canReach(const uint8 *args, unsigned int /*argsize*/) {
// TODO: add cheat to make this always return 1
- if (item->canReach(other, range))
+ if (item && item->canReach(other, range))
return 1;
else
return 0;
diff --git a/engines/ultima/ultima8/world/item.h b/engines/ultima/ultima8/world/item.h
index 404bafe519..c7d0cd7bde 100644
--- a/engines/ultima/ultima8/world/item.h
+++ b/engines/ultima/ultima8/world/item.h
@@ -554,6 +554,7 @@ protected:
// This is stuff that is used for displaying and interpolation
struct Lerped {
+ Lerped() : _x(0), _y(0), _z(0), _shape(0), _frame(0) {};
int32 _x, _y, _z;
uint32 _shape, _frame;
};
diff --git a/engines/ultima/ultima8/world/split_item_process.cpp b/engines/ultima/ultima8/world/split_item_process.cpp
index 176e7bb115..82582f74ad 100644
--- a/engines/ultima/ultima8/world/split_item_process.cpp
+++ b/engines/ultima/ultima8/world/split_item_process.cpp
@@ -32,7 +32,7 @@ namespace Ultima8 {
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(SplitItemProcess, Process)
-SplitItemProcess::SplitItemProcess() : Process() {
+SplitItemProcess::SplitItemProcess() : Process(), _target(0) {
}
More information about the Scummvm-git-logs
mailing list