aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorlukaslw2014-07-21 17:20:16 +0200
committerlukaslw2014-07-21 17:20:16 +0200
commit2024fea1ec3d3188ed60233a5aa80f6b2c65efb6 (patch)
treec8b858543ea657904ca5d1807350020c67d709df /engines
parent6a4ea9ef878773057ed7c1897ac93f7959c995e6 (diff)
downloadscummvm-rg350-2024fea1ec3d3188ed60233a5aa80f6b2c65efb6.tar.gz
scummvm-rg350-2024fea1ec3d3188ed60233a5aa80f6b2c65efb6.tar.bz2
scummvm-rg350-2024fea1ec3d3188ed60233a5aa80f6b2c65efb6.zip
PRINCE: showHero(), scrollHero() update
Diffstat (limited to 'engines')
-rw-r--r--engines/prince/hero.cpp39
-rw-r--r--engines/prince/prince.cpp3
2 files changed, 29 insertions, 13 deletions
diff --git a/engines/prince/hero.cpp b/engines/prince/hero.cpp
index c52420deb6..afcaa551dc 100644
--- a/engines/prince/hero.cpp
+++ b/engines/prince/hero.cpp
@@ -53,6 +53,7 @@ Hero::~Hero() {
free(_shadowBitmap);
delete[] _shadowLine;
freeHeroAnim();
+ freeOldMove();
}
bool Hero::loadAnimSet(uint32 animSetNr) {
@@ -641,9 +642,8 @@ void Hero::heroStanding() {
}
void Hero::showHero() {
- if (_visible) {
- //cmp w FLAGI+NOHEROATALL,ax
- //jnz @@no_hero_visible
+ if (_visible && !_vm->_flags->getFlagValue(Flags::NOHEROATALL)) {
+
if (_talkTime != 0) {
_talkTime--;
}
@@ -860,13 +860,17 @@ void Hero::showHero() {
_middleY = READ_UINT16(_currCoords - 2);
selectZoom();
- free(_coords);
- _coords = nullptr;
- _currCoords = nullptr;
+ if (_coords != nullptr) {
+ free(_coords);
+ _coords = nullptr;
+ _currCoords = nullptr;
+ }
- free(_dirTab);
- _dirTab = nullptr;
- _currDirTab = nullptr;
+ if (_dirTab != nullptr) {
+ free(_dirTab);
+ _dirTab = nullptr;
+ _currDirTab = nullptr;
+ }
_boredomTime = 0;
_phase = 0;
@@ -933,22 +937,31 @@ void Hero::heroMoveGotIt(int x, int y, int dir) {
}
}
+//TODO - test this
void Hero::scrollHero() {
- //FLAGI+SCROLLTYPE ??
- //int scrollType = 0;
+ int scrollType = _vm->_flags->getFlagValue(Flags::SCROLLTYPE);
int position = _middleX;
+ int scrollValue, scrollValue2;
- /*
switch (scrollType) {
case 0:
position = _middleX;
break;
case 1:
+ scrollValue = _vm->_flags->getFlagValue(Flags::SCROLLVALUE);
+ position = _vm->_normAnimList[scrollValue]._currX + _vm->_normAnimList[scrollValue]._currW / 2;
break;
case 2:
+ scrollValue = _vm->_flags->getFlagValue(Flags::SCROLLVALUE);
+ scrollValue2 = _vm->_flags->getFlagValue(Flags::SCROLLVALUE2);
+ position = scrollValue;
+ if (scrollValue < scrollValue2) {
+ _vm->_flags->setFlagValue(Flags::SCROLLVALUE, 0);
+ } else {
+ _vm->_flags->setFlagValue(Flags::SCROLLVALUE, scrollValue - scrollValue2);
+ }
break;
}
- */
int locationWidth = _vm->_sceneWidth;
int difference = locationWidth - _vm->kNormalWidth / 2;
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp
index 0e23fcbe4a..dedbc0d665 100644
--- a/engines/prince/prince.cpp
+++ b/engines/prince/prince.cpp
@@ -469,6 +469,9 @@ bool PrinceEngine::loadLocation(uint16 locationNr) {
_graph->makeShadowTable(70, _graph->_shadowTable70);
_graph->makeShadowTable(50, _graph->_shadowTable50);
+ _mainHero->freeOldMove();
+ _secondHero->freeOldMove();
+
return true;
}