aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2013-09-15 14:54:47 -0400
committerPaul Gilbert2013-09-15 14:54:47 -0400
commite2a8dc1b2f1d634a844848ff7bc5793d616dfc78 (patch)
treed74eefc3176497c5f11f36d73d69d34a56b54379
parentfcdaa86831a964b82b17bafc4c87bc86387ebf13 (diff)
downloadscummvm-rg350-e2a8dc1b2f1d634a844848ff7bc5793d616dfc78.tar.gz
scummvm-rg350-e2a8dc1b2f1d634a844848ff7bc5793d616dfc78.tar.bz2
scummvm-rg350-e2a8dc1b2f1d634a844848ff7bc5793d616dfc78.zip
TSAGE: Further renaming and work on R2R Balloon Scene
-rw-r--r--engines/tsage/globals.cpp4
-rw-r--r--engines/tsage/globals.h2
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp2
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes2.cpp140
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes2.h10
5 files changed, 85 insertions, 73 deletions
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 8f70c2926e..6976a6b249 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -461,7 +461,7 @@ void Ringworld2Globals::reset() {
for (int i = 0; i < 1000; i++)
_v566AB[i] = 0;
_v56A93 = -1;
- _v56A99 = 5;
+ _balloonAltitude = 5;
_scene1925CurrLevel = 0; //_v56A9C
_v56A9E = 0;
_v56AA0 = 0;
@@ -568,7 +568,7 @@ void Ringworld2Globals::synchronize(Serializer &s) {
s.syncAsByte(_spillLocation[i]);
for (i = 0; i < 1000; ++i)
s.syncAsByte(_v566AB[i]);
- s.syncAsByte(_v56A99);
+ s.syncAsByte(_balloonAltitude);
for (i = 0; i < 12; ++i)
s.syncAsByte(_stripManager_lookupList[i]);
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index cf4649247e..22820d0118 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -280,7 +280,7 @@ public:
byte _v566AA;
byte _v566AB[1000];
int _v56A93;
- byte _v56A99;
+ byte _balloonAltitude;
int _scene1925CurrLevel; //_v56A9C
int _v56A9E;
byte _v56AA0;
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index ae83c08966..e679b3835c 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -525,6 +525,8 @@ void SceneExt::refreshBackground(int xAmount, int yAmount) {
Common::copy(dataP, dataP + (s.w * s.h), destP);
_backSurface.unlockSurface();
+ R2_GLOBALS._screenSurface.addDirtyRect(_backSurface.getBounds());
+
// Free the resource data
DEALLOCATE(dataP);
}
diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp
index d2c4f3d8c0..b6aacd7b0b 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp
@@ -4608,15 +4608,19 @@ bool Scene2900::KnobLeft::startAction(CursorType action, Event &event) {
switch (action) {
case CURSOR_USE:
- if (scene->_field416 != 0 || scene->_field414 != 0 || scene->_field425 != scene->_field426) {
+ if (scene->_field416 || scene->_altitudeChanging ||
+ scene->_field425 != scene->_field426) {
+ // Let your altitude stablize first
SceneItem::display2(2900, 17);
- } else if (R2_GLOBALS._v56A99 / 48 == 0) {
+ } else if (R2_GLOBALS._balloonAltitude / 48 == 0) {
+ // Maximum altitude
SceneItem::display2(2900, 15);
} else {
+ // Increase altitude
R2_GLOBALS._sound2.fadeSound(282);
- scene->_field414 = 1;
- scene->_field41E = -1;
- scene->_field426 = 100 - ((R2_GLOBALS._v56A99 / 48) - 1) * 25;
+ scene->_altitudeChanging = true;
+ scene->_altitudeMajorChange = -1;
+ scene->_field426 = 100 - ((R2_GLOBALS._balloonAltitude / 48) - 1) * 25;
}
break;
@@ -4641,15 +4645,19 @@ bool Scene2900::KnobRight::startAction(CursorType action, Event &event) {
switch (action) {
case CURSOR_USE:
- if (scene->_field416 != 0 || scene->_field414 != 0 || scene->_field425 != scene->_field426) {
+ if (scene->_field416 || scene->_altitudeChanging ||
+ scene->_field425 != scene->_field426) {
+ // Let your altitude stablize first
SceneItem::display2(2900, 17);
- } else if (R2_GLOBALS._v56A99 / 48 == 0) {
+ } else if (R2_GLOBALS._balloonAltitude / 48 >= 3) {
+ // Altitude is too low - cannot land here
SceneItem::display2(2900, 16);
} else {
+ // Decrease altitude
R2_GLOBALS._sound2.fadeSound(212);
- scene->_field414 = 1;
- scene->_field41E = 1;
- scene->_field426 = 100 - ((R2_GLOBALS._v56A99 / 48) + 1) * 25;
+ scene->_altitudeChanging = true;
+ scene->_altitudeMajorChange = 1;
+ scene->_field426 = 100 - ((R2_GLOBALS._balloonAltitude / 48) + 1) * 25;
}
break;
@@ -4675,10 +4683,10 @@ void Scene2900::Action1::signal() {
Scene2900 *scene = (Scene2900 *)R2_GLOBALS._sceneManager._scene;
setDelay(3);
- if (scene->_field416 == 0 && scene->_field414 == 0) {
+ if (!scene->_field416 && !scene->_altitudeChanging) {
scene->_field427 = 2;
scene->_field412 = 0;
- } else if (scene->_field416 != 0) {
+ } else if (scene->_field416) {
R2_GLOBALS._sound2.fadeOut2(NULL);
} else if (scene->_field427 == 0) {
R2_GLOBALS._sound2.fadeOut2(NULL);
@@ -4813,6 +4821,7 @@ int Scene2900::Map::adjustRect(Common::Rect &r1, const Common::Rect &r2) {
}
void Scene2900::Map::drawBlock(const byte *data, int xp, int yp, const Rect &r1, const Rect &r2) {
+ Scene2900 *scene = (Scene2900 *)R2_GLOBALS._sceneManager._scene;
Rect blockRect(xp, yp, xp + 160, yp + 100);
const byte *src = data;
@@ -4824,7 +4833,7 @@ void Scene2900::Map::drawBlock(const byte *data, int xp, int yp, const Rect &r1,
int height = blockRect.height();
src += (blockRect.top - yp) * 160 + blockRect.left - xp;
- GfxSurface &surface = R2_GLOBALS.gfxManager().getSurface();
+ GfxSurface &surface = R2_GLOBALS._sceneManager._scene->_backSurface;
Graphics::Surface s = surface.lockSurface();
for (int yCtr = 0; yCtr < height; ++yCtr, src += 160) {
@@ -4833,7 +4842,7 @@ void Scene2900::Map::drawBlock(const byte *data, int xp, int yp, const Rect &r1,
}
surface.unlockSurface();
- surface.addDirtyRect(blockRect);
+ R2_GLOBALS.gfxManager().copyFrom(surface, blockRect, blockRect);
}
}
}
@@ -4897,30 +4906,30 @@ void Scene2900::Map::moveLine(int xpSrc, int ypSrc, int xpDest, int ypDest, int
Scene2900::Scene2900(): SceneExt() {
_field412 = 0;
- _field414 = 0;
- _field416 = 0;
+ _altitudeChanging = false;
+ _field416 = false;
_offsetPos = Common::Point(550, 550);
_field41C = 0;
- _field41E = 0;
+ _altitudeMajorChange = 0;
_pos = Common::Point(160, 100);
- _field424 = 0;
+ _newAltitude = 0;
_field425 = 100;
_field426 = 100;
_field427 = 0;
- _field8F8 = 0;
+ _field8F8 = false;
}
void Scene2900::synchronize(Serializer &s) {
s.syncAsSint16LE(_field412);
- s.syncAsSint16LE(_field414);
+ s.syncAsSint16LE(_altitudeChanging);
s.syncAsSint16LE(_field416);
s.syncAsSint16LE(_field41C);
- s.syncAsSint16LE(_field41E);
+ s.syncAsSint16LE(_altitudeMajorChange);
s.syncAsSint16LE(_offsetPos.x);
s.syncAsSint16LE(_offsetPos.y);
s.syncAsSint16LE(_pos.x);
s.syncAsSint16LE(_pos.y);
- s.syncAsSint16LE(_field424);
+ s.syncAsSint16LE(_newAltitude);
s.syncAsSint16LE(_field425);
s.syncAsSint16LE(_field426);
s.syncAsSint16LE(_field427);
@@ -4940,6 +4949,7 @@ void Scene2900::postInit(SceneObjectList *OwnerList) {
loadScene(2900);
SceneExt::postInit();
+ R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
_leftEdge.setup(2900, 6, 1, 22, 0, 25);
_rightEdge.setup(2900, 6, 1, 280, 0, 25);
@@ -4971,7 +4981,7 @@ void Scene2900::postInit(SceneObjectList *OwnerList) {
_knobLeft.setDetails(Rect(165, 160, 228, 200), 2900, -1, -1, -1, 2, (SceneItem *)NULL);
_knobRight.setDetails(Rect(228, 160, 285, 200), 2900, -1, -1, -1, 2, (SceneItem *)NULL);
-//**DEBUG** setAction(&_action1);
+ setAction(&_action1);
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.setVisage(2900);
R2_GLOBALS._player.setStrip2(3);
@@ -4982,7 +4992,7 @@ void Scene2900::postInit(SceneObjectList *OwnerList) {
if (R2_GLOBALS._sceneManager._previousScene == 2350 &&
R2_GLOBALS._balloonPosition.x == 0 && R2_GLOBALS._balloonPosition.y == 0) {
- R2_GLOBALS._v56A99 = 5;
+ R2_GLOBALS._balloonAltitude = 5;
_map.setPosition(Common::Point(_offsetPos.x - 120, _offsetPos.y - 100));
_sceneMode = 10;
@@ -4995,9 +5005,9 @@ void Scene2900::postInit(SceneObjectList *OwnerList) {
_offsetPos.x = R2_GLOBALS._balloonPosition.x + 120;
_offsetPos.y = R2_GLOBALS._balloonPosition.y + 100;
- if ((R2_GLOBALS._v56A99 % 8) == 0)
+ if ((R2_GLOBALS._balloonAltitude % 8) == 0)
_offsetPos.x -= 70;
- else if ((R2_GLOBALS._v56A99 % 8) == 7)
+ else if ((R2_GLOBALS._balloonAltitude % 8) == 7)
_offsetPos.x += 70;
if (_offsetPos.x <= 120)
@@ -5005,12 +5015,12 @@ void Scene2900::postInit(SceneObjectList *OwnerList) {
else if (_offsetPos.x >= 680)
_pos.x = _offsetPos.x - 520;
- if ((R2_GLOBALS._v56A99 / 6) == 5)
+ if ((R2_GLOBALS._balloonAltitude / 6) == 5)
_offsetPos.y -= 50;
if (_offsetPos.y <= 100)
_pos.y = _offsetPos.y;
- _field425 = _field426 = 100 - (R2_GLOBALS._v56A99 / 48) * 25;
+ _field425 = _field426 = 100 - (R2_GLOBALS._balloonAltitude / 48) * 25;
_map.setPosition(Common::Point(_offsetPos.x - 120, _offsetPos.y - 100));
_sceneMode = 11;
@@ -5036,7 +5046,8 @@ void Scene2900::remove() {
R2_GLOBALS._sound1.fadeOut2(NULL);
R2_GLOBALS._sound2.stop();
-
+
+ R2_GLOBALS._interfaceY = UI_INTERFACE_Y;
SceneExt::remove();
}
@@ -5057,35 +5068,35 @@ void Scene2900::signal() {
void Scene2900::dispatch() {
if (_sceneMode == 11) {
- _offsetPos.x += balloonData[R2_GLOBALS._v56A99].x;
- _offsetPos.y += balloonData[R2_GLOBALS._v56A99].y;
- _field41C = balloonData[R2_GLOBALS._v56A99].v3;
+ _offsetPos.x += balloonData[R2_GLOBALS._balloonAltitude].x;
+ _offsetPos.y += balloonData[R2_GLOBALS._balloonAltitude].y;
+ _field41C = balloonData[R2_GLOBALS._balloonAltitude].v3;
if (_field41C == 0) {
- _field416 = 0;
+ _field416 = false;
} else {
- _field416 = 1;
- _field414 = 0;
- _field41C += R2_GLOBALS._v56A99 / 48;
+ _field416 = true;
+ _altitudeChanging = false;
+ _field41C += R2_GLOBALS._balloonAltitude / 48;
_field426 = 100 - (_field41C * 25);
}
if (_field425 == _field426) {
- _field416 = 0;
+ _field416 = false;
} else {
- if (_field416 == 0) {
- _field425 = _field425 - _field41E;
+ if (!_field416) {
+ _field425 = _field425 - _altitudeMajorChange;
} else {
_field425 = _field425 - _field41C;
}
- if (_field41C == -1 || _field41E == -1) {
+ if (_field41C == -1 || _altitudeMajorChange == -1) {
if (_altimeterContent._frame == 1) {
_altimeterContent.setFrame2(10);
} else {
_altimeterContent.setFrame2(_altimeterContent._frame - 1);
}
- } else if (_field41C == -1 || _field41E == 1) {
+ } else if (_field41C == -1 || _altitudeMajorChange == 1) {
if (_altimeterContent._frame == 10)
_altimeterContent.setFrame2(1);
else
@@ -5096,16 +5107,14 @@ void Scene2900::dispatch() {
R2_GLOBALS._player.changeZoom(_field425);
}
- if (_field8F8 == 0) {
+ if (!_field8F8) {
R2_GLOBALS._scenePalette.loadPalette(2950);
R2_GLOBALS._scenePalette.refresh();
}
- // TODO: Verify param 3
R2_GLOBALS._balloonPosition = _map.setPosition(
- Common::Point(_offsetPos.x - 120, _offsetPos.y - 100),
- _field8F8 + (_field8F8 ? 1 : 0));
- _field8F8 = 1;
+ Common::Point(_offsetPos.x - 120, _offsetPos.y - 100), !_field8F8);
+ _field8F8 = true;
if (_offsetPos.x <= 120)
_pos.x = _offsetPos.x + 40;
@@ -5117,33 +5126,34 @@ void Scene2900::dispatch() {
R2_GLOBALS._player.setPosition(_pos);
- if ((_offsetPos.y % 100) == 50 && _field416 == 0) {
- _field424 = R2_GLOBALS._v56A99;
- if (_field414 != 0) {
- _field424 += _field41E * 48;
- _field414 = 0;
+ if ((_offsetPos.x % 100) == 50 && (_offsetPos.y % 100) == 50 && !_field416) {
+ _newAltitude = R2_GLOBALS._balloonAltitude;
+ if (_altitudeChanging) {
+ _newAltitude += _altitudeMajorChange * 48;
+ _altitudeChanging = false;
}
- if (balloonData[R2_GLOBALS._v56A99].x > 0) {
- ++_field424;
- } else if (balloonData[R2_GLOBALS._v56A99].x < 0) {
- --_field424;
+ if (balloonData[R2_GLOBALS._balloonAltitude].x > 0) {
+ ++_newAltitude;
+ } else if (balloonData[R2_GLOBALS._balloonAltitude].x < 0) {
+ --_newAltitude;
}
- if (balloonData[R2_GLOBALS._v56A99].y > 0) {
- _field424 += 240;
- } else if (balloonData[R2_GLOBALS._v56A99].x < 0) {
- _field424 += 8;
+ if (balloonData[R2_GLOBALS._balloonAltitude].y > 0) {
+ _newAltitude += 240;
+ } else if (balloonData[R2_GLOBALS._balloonAltitude].x < 0) {
+ _newAltitude += 8;
}
- if (balloonData[R2_GLOBALS._v56A99].v3 > 0) {
- _field424 += 48;
- } else if (balloonData[R2_GLOBALS._v56A99].v3 < 0) {
- _field424 += 208;
+ if (balloonData[R2_GLOBALS._balloonAltitude].v3 > 0) {
+ _newAltitude += 48;
+ } else if (balloonData[R2_GLOBALS._balloonAltitude].v3 < 0) {
+ _newAltitude += 208;
}
- R2_GLOBALS._v56A99 = _field424;
- if (R2_GLOBALS._v56A99 == 189) {
+ R2_GLOBALS._balloonAltitude = _newAltitude;
+ if (R2_GLOBALS._balloonAltitude == 189) {
+ // Finally reached landing point
_sceneMode = 12;
R2_GLOBALS._player.disableControl();
diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h
index 55c3d55365..b09e4495eb 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes2.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes2.h
@@ -734,17 +734,17 @@ public:
Map _map;
int _field412;
- int _field414;
- int _field416;
+ bool _altitudeChanging;
+ bool _field416;
int _field41C;
- int _field41E;
+ int _altitudeMajorChange;
Common::Point _offsetPos;
Common::Point _pos;
- int _field424;
+ int _newAltitude;
int _field425;
int _field426;
int _field427;
- int _field8F8;
+ bool _field8F8;
Scene2900();
virtual void synchronize(Serializer &s);