[Scummvm-cvs-logs] scummvm master -> a0d4dec3704d7eaa7a5a5ec051b1f4719cd82c9c

dreammaster dreammaster at scummvm.org
Thu Oct 31 13:41:25 CET 2013


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:
a0d4dec370 TSAGE: In progress work implementing R2R unused spaceport scene


Commit: a0d4dec3704d7eaa7a5a5ec051b1f4719cd82c9c
    https://github.com/scummvm/scummvm/commit/a0d4dec3704d7eaa7a5a5ec051b1f4719cd82c9c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2013-10-31T05:40:52-07:00

Commit Message:
TSAGE: In progress work implementing R2R unused spaceport scene

Changed paths:
    engines/tsage/ringworld2/ringworld2_logic.cpp
    engines/tsage/ringworld2/ringworld2_scenes1.cpp
    engines/tsage/ringworld2/ringworld2_scenes1.h



diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 1d6b998..c4bae98 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -137,6 +137,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
 		// Spaceport
 		return new Scene1550();
 	case 1575:
+		// Spaceport - unused ship scene
 		return new Scene1575();
 	case 1580:
 		// Inside wreck
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index b9906c8..6a16125 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -9294,178 +9294,208 @@ void Scene1550::enterArea() {
 }
 
 /*--------------------------------------------------------------------------
- * Scene 1575 -
+ * Scene 1575 - Spaceport - unused ship scene
  *
  *--------------------------------------------------------------------------*/
 
-Scene1575::Scene1575() {
-	_field412 = 0;
-	_field414 = 0;
-	_field416 = 0;
-	_field418 = 0;
-	_field41A = 0;
+Scene1575::Button::Button() {
+	_buttonId = 0;
+	_pressed = false;
 }
 
-void Scene1575::synchronize(Serializer &s) {
-	SceneExt::synchronize(s);
+void Scene1575::Button::synchronize(Serializer &s) {
+	NamedHotspot::synchronize(s);
 
-	s.syncAsSint16LE(_field412);
-	s.syncAsSint16LE(_field414);
-	s.syncAsSint16LE(_field416);
-	s.syncAsSint16LE(_field418);
-	s.syncAsSint16LE(_field41A);
+	s.syncAsSint16LE(_buttonId);
+	s.syncAsSint16LE(_pressed);
 }
 
-Scene1575::Hotspot1::Hotspot1() {
-	_field34 = 0;
-	_field36 = 0;
-}
+void Scene1575::Button::process(Event &event) {
+	Scene1575 *scene = (Scene1575 *)R2_GLOBALS._sceneManager._scene;
+	bool isInBounds = _bounds.contains(event.mousePos);
+	CursorType cursor = R2_GLOBALS._events.getCursor();
 
-void Scene1575::Hotspot1::synchronize(Serializer &s) {
-	NamedHotspot::synchronize(s);
+	if ((event.eventType == EVENT_BUTTON_DOWN && cursor == CURSOR_USE && isInBounds) ||
+		(_pressed && _buttonId != 1 && event.eventType == EVENT_BUTTON_UP && isInBounds)) {
+		// Button pressed
+		_pressed = true;
+		Common::Point pos = scene->_actor1._position;
+		event.handled = true;
 
-	s.syncAsSint16LE(_field34);
-	s.syncAsSint16LE(_field36);
-}
+		if (!R2_GLOBALS.getFlag(18) || _buttonId <= 1 || _buttonId >= 6) {
+			switch (_buttonId) {
+			case 1:
+				if (R2_GLOBALS.getFlag(18)) {
+					scene->_actor14.hide();
+					scene->_actor15.hide();
+					R2_GLOBALS.clearFlag(18);
+				} else if ((scene->_actor12._position.x == 85) && (scene->_actor12._position.y == 123)) {
+					scene->_actor14.show();
+					scene->_actor15.show();
+					R2_GLOBALS.setFlag(18);
+				} else {
+					SceneItem::display("That's probably not a good thing, ya know!");
+				}
+				break;
+			case 2:
+				if (scene->_field41A < 780) {
+					if (pos.x > 54)
+						pos.x -= 65;
+					pos.x += 2;
+					scene->_field41A += 2;
+
+					for (int i = 0; i < 17; i++)
+						scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x + 2, scene->_arrActor[i]._position.y));
+
+					scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x + 2, scene->_actor13._position.y));
+					scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x + 2, scene->_actor12._position.y));
+					scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+					scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+					scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+				}
+				break;
+			case 3:
+				if (scene->_field41A > 0) {
+					if (pos.x < -8)
+						pos.x += 65;
+
+					pos.x -= 2;
+					scene->_field41A -= 2;
+					for (int i = 0; i < 17; i++)
+						scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x - 2, scene->_arrActor[i]._position.y));
+
+					scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x - 2, scene->_actor13._position.y));
+					scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x - 2, scene->_actor12._position.y));
+					scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+					scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+					scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+				}
+				break;
+			case 4: {
+					if (pos.y < 176) {
+						++pos.y;
+						for (int i = 0; i < 17; ++i)
+							scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y + 1));
+
+						scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y + 1));
+						scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y + 1));
+						scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+						scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+						scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+					}
+				}
+				break;
+			case 5: {
+					if (pos.y > 145) {
+						--pos.y;
+						for (int i = 0; i < 17; ++i)
+							scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y - 1));
+
+						scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y - 1));
+						scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y - 1));
+						scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+						scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+						scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+					}
+				}
+				break;
+			case 6:
+				R2_GLOBALS._sceneManager.changeScene(1550);
+				break;
+			default:
+				break;
+			}
 
-void Scene1575::Hotspot1::process(Event &event) {
-	if ((event.eventType != EVENT_BUTTON_DOWN) || (R2_GLOBALS._events.getCursor() != R2_STEPPING_DISKS) || (!_bounds.contains(event.mousePos))) {
-		if (_field36 == 0)
-			return;
-		if ((_field34 == 1)  || (event.eventType == EVENT_BUTTON_UP) || (!_bounds.contains(event.mousePos))) {
-			_field36 = 0;
-			return;
-		}
-	}
-	_field36 = 1;
-	Scene1575 *scene = (Scene1575 *)R2_GLOBALS._sceneManager._scene;
+			int j = 0;
+			for (int i = 0; i < 17; i++) {
+				if (scene->_arrActor[i]._bounds.contains(85, 116))
+					j = i;
+			}
 
-	event.handled = true;
-	if (R2_GLOBALS.getFlag(18) && (_field34 > 1) && (_field34 < 6)) {
-		warning("sub1A03B(\"Better not move the laser while it\'s firing!\", 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);");
-		return;
-	}
-	int di = scene->_actor1._position.x;
+			if (scene->_actor13._bounds.contains(85, 116))
+				j = 18;
 
-	switch (_field34 - 1) {
-	case 0:
-		if (R2_GLOBALS.getFlag(18)) {
-			scene->_actor14.hide();
-			scene->_actor15.hide();
-			R2_GLOBALS.clearFlag(18);
-		} else if ((scene->_actor12._position.x == 85) && (scene->_actor12._position.y == 123)) {
-			scene->_actor14.show();
-			scene->_actor15.show();
-			R2_GLOBALS.setFlag(18);
+			if (scene->_actor12._bounds.contains(85, 116))
+				j = 19;
+
+			if (j)
+				scene->_actor11.show();
+			else
+				scene->_actor11.hide();
 		} else {
-			warning("sub1A03B(\"That\'s probably not a good thing, ya know!\", 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);");
+			SceneItem::display("Better not move the laser while it's firing!");
 		}
-		break;
-	case 1:
-		if (scene->_field41A < 780) {
-			if (di > 54)
-				di -= 65;
-			di += 2;
-			scene->_field41A += 2;
+	} else {
+		_pressed = false;
+	}
+}
 
-			for (int i = 0; i < 17; i++)
-				scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x + 2, scene->_arrActor[i]._position.y));
+bool Scene1575::Button::startAction(CursorType action, Event &event) {
+	if (action == CURSOR_USE)
+		return false;
+	return SceneHotspot::startAction(action, event);
+}
 
-			scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x + 2, scene->_actor13._position.y));
-			scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x + 2, scene->_actor12._position.y));
-			scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y));
-			scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y));
-			scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y));
-		}
+void Scene1575::Button::initButton(int buttonId) {
+	_buttonId = buttonId;
+	_pressed = false;
+	EventHandler::postInit();
+
+	switch (_buttonId) {
+	case 1:
+		setDetails(Rect(53, 165, 117, 190), -1, -1, -1, 2, 1, NULL);
 		break;
 	case 2:
-		if (scene->_field41A > 0) {
-			if (di < -8)
-				di += 65;
-
-			di -= 2;
-			scene->_field41A -= 2;
-			for (int i = 0; i < 17; i++)
-				scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x - 2, scene->_arrActor[i]._position.y));
-
-			scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x - 2, scene->_actor13._position.y));
-			scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x - 2, scene->_actor12._position.y));
-			scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y));
-			scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y));
-			scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y));
-		}
+		setDetails(Rect(151, 142, 189, 161), -1, -1, -1, 2, 1, NULL);
 		break;
-	case 3: {
-			int tmpPosY = scene->_actor1._position.y;
-			if (tmpPosY < 176) {
-				++tmpPosY;
-				for (int i = 0; i < 17; ++i)
-					scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y + 1));
-
-				scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y + 1));
-				scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y + 1));
-				scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y));
-				scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y));
-				scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y));
-			}
-		}
+	case 3:
+		setDetails(Rect(225, 142, 263, 161), -1, -1, -1, 2, 1, NULL);
 		break;
-	case 4: {
-			int tmpPosY = scene->_actor1._position.y;
-			if (tmpPosY > 145) {
-				tmpPosY--;
-				for (int i = 0; i < 17; ++i)
-					scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y - 1));
-
-				scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y - 1));
-				scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y - 1));
-				scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y));
-				scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y));
-				scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y));
-			}
-		}
+	case 4:
+		setDetails(Rect(188, 122, 226, 140), -1, -1, -1, 2, 1, NULL);
 		break;
 	case 5:
-		R2_GLOBALS._sceneManager.changeScene(1550);
+		setDetails(Rect(188, 162, 226, 180), -1, -1, -1, 2, 1, NULL);
+		break;
+	case 6:
+		setDetails(Rect(269, 169, 301, 185), -1, -1, -1, 2, 1, NULL);
 		break;
 	default:
 		break;
 	}
+}
 
-	int j = 0;
-	for (int i = 0; i < 17; i++) {
-		if (scene->_arrActor[i]._bounds.contains(85, 116))
-			j = i;
-	}
-
-	if (scene->_actor13._bounds.contains(85, 116))
-		j = 18;
-
-	if (scene->_actor12._bounds.contains(85, 116))
-		j = 19;
+/*--------------------------------------------------------------------------*/
 
-	if (j)
-		scene->_actor11.show();
-	else
-		scene->_actor11.hide();
+Scene1575::Scene1575() {
+	_field412 = 0;
+	_field414 = 390;
+	_field416 = 0;
+	_field418 = 0;
+	_field41A = 0;
 }
 
-bool Scene1575::Hotspot1::startAction(CursorType action, Event &event) {
-	if (action == CURSOR_USE)
-		return false;
-	return SceneHotspot::startAction(action, event);
+void Scene1575::synchronize(Serializer &s) {
+	SceneExt::synchronize(s);
+
+	s.syncAsSint16LE(_field412);
+	s.syncAsSint16LE(_field414);
+	s.syncAsSint16LE(_field416);
+	s.syncAsSint16LE(_field418);
+	s.syncAsSint16LE(_field41A);
 }
 
-void Scene1575::Hotspot1::subA910D(int indx) {
-	warning("STUB: Scene1575:Hotspot1::subA910D(%d)", indx);
+// TODO: Remove this method stub with proper sub-method call
+double unk(double v1, double v2) { 
+	return sqrt(v1 * v1 + v2 * v2); 
 }
 
+#define unk(x, y) (0)
 void Scene1575::postInit(SceneObjectList *OwnerList) {
 	loadScene(1575);
 	R2_GLOBALS._uiElements._active = false;
-	R2_GLOBALS._v5589E = Rect(0, 0, 320, 200);
 	SceneExt::postInit();
-	_field414 = 390;
+	R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
 
 	_actor1.postInit();
 	_actor1.setup(1575, 1, 1);
@@ -9484,8 +9514,17 @@ void Scene1575::postInit(SceneObjectList *OwnerList) {
 
 	for (int i = 0; i < 17; i++) {
 		_arrActor[i].postInit();
-		_arrActor[i].setup(1575, 2, k5A7F6[(3 * i) + 2]);
-		warning("TODO: immense pile of floating operations");
+		_arrActor[i].setup(1575, 2, k5A7F6[3 * i + 2]);
+
+		double v1 = unk(2.0, 3 - k5A7F6[3 * i]);
+		v1 += unk(2.0, 3 - k5A7F6[3 * i + 1]);
+		int yp = (int)(sqrt(v1) * 75.0 / 17.0 - 161.0);
+
+		int angle = R2_GLOBALS._gfxManagerInstance.getAngle(
+			Common::Point(3, 16), Common::Point(k5A7F6[3 * i], k5A7F6[3 * i + 1]));
+		int xp = angle * 78 / 9 - 319;
+
+		_arrActor[i].setPosition(Common::Point(xp, yp));
 		_arrActor[i].fixPriority(6);
 	}
 
@@ -9517,12 +9556,13 @@ void Scene1575::postInit(SceneObjectList *OwnerList) {
 	_actor10.setup(1575, 3, 2);
 	_actor10.setPosition(Common::Point(287, 91));
 
-	_item1.subA910D(1);
-	_item1.subA910D(2);
-	_item1.subA910D(3);
-	_item1.subA910D(4);
-	_item1.subA910D(5);
-	_item1.subA910D(6);
+	// Initialise buttons
+	_button1.initButton(1);
+	_button2.initButton(2);
+	_button3.initButton(3);
+	_button4.initButton(4);
+	_button5.initButton(5);
+	_button6.initButton(6);
 
 	_actor11.postInit();
 	_actor11.setup(1575, 4, 2);
@@ -9550,6 +9590,7 @@ void Scene1575::postInit(SceneObjectList *OwnerList) {
 	_actor13.postInit();
 	_actor13.setup(1575, 2, 4);
 
+	// TODO
 	warning("TODO: another immense pile of floating operations");
 
 	_actor12.postInit();
@@ -9572,6 +9613,7 @@ void Scene1575::postInit(SceneObjectList *OwnerList) {
 	_actor15.fixPriority(7);
 	_actor15.hide();
 }
+#undef unk
 
 void Scene1575::remove() {
 	SceneExt::remove();
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h
index 15475f9..5825320 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.h
@@ -576,14 +576,14 @@ public:
 };
 
 class Scene1575 : public SceneExt {
-	class Hotspot1 : public NamedHotspot {
+	class Button : public NamedHotspot {
 	public:
-		int _field34;
-		int _field36;
+		int _buttonId;
+		bool _pressed;
 
-		Hotspot1();
+		Button();
 		void synchronize(Serializer &s);
-		void subA910D(int indx);
+		void initButton(int buttonId);
 
 		virtual void process(Event &event);
 		virtual bool startAction(CursorType action, Event &event);
@@ -594,12 +594,12 @@ public:
 	int _field416;
 	int _field418;
 	int _field41A;
-	Hotspot1 _item1;
-	Hotspot1 _item2;
-	Hotspot1 _item3;
-	Hotspot1 _item4;
-	Hotspot1 _item5;
-	Hotspot1 _item6;
+	Button _button1;
+	Button _button2;
+	Button _button3;
+	Button _button4;
+	Button _button5;
+	Button _button6;
 	SceneActor _actor1;
 	SceneActor _actor2;
 	SceneActor _actor3;






More information about the Scummvm-git-logs mailing list