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

sev- sev at scummvm.org
Sat Jan 4 23:54:13 CET 2014


This automated email contains information about 10 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
8b78fb5642 FULLPIPE: Implement MGM::buildExCommand2()
fb234a2d0c FULLPIPE: Implement Movement::countPhasesWithFlag()
c174883e05 FULLPIPE: Implement doSomeAnimation()
d1ba9ef26a FULLPIPE: Rename in MovInfo1 struct
5afe7cfb7b FULLPIPE: Initial code for scene23
2f82ff1eee FULLPIPE: Plug scene23 in
7cb50d7066 FULLPIPE: Implement scene23_updateCursor()
b0ddd171cb FULLPIPE: Implement scene23_setGiraffeState()
d8c3c774d1 FULLPIPE: Implement sceneHandler23()
d75c4d7f44 FULLPIPE: Enable scene23


Commit: 8b78fb5642c3648c34d341edb868525beee040fe
    https://github.com/scummvm/scummvm/commit/8b78fb5642c3648c34d341edb868525beee040fe
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:30-08:00

Commit Message:
FULLPIPE: Implement MGM::buildExCommand2()

Changed paths:
    engines/fullpipe/messages.cpp
    engines/fullpipe/messages.h
    engines/fullpipe/motion.cpp
    engines/fullpipe/motion.h



diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp
index 68ec3dc..4665712 100644
--- a/engines/fullpipe/messages.cpp
+++ b/engines/fullpipe/messages.cpp
@@ -145,7 +145,7 @@ void ExCommand::firef34() {
 	}
 }
 
-ExCommand2::ExCommand2(int messageKind, int parentId, const Common::Point **points, int pointsSize) : ExCommand(parentId, messageKind, 0, 0, 0, 0, 1, 0, 0, 0) {
+ExCommand2::ExCommand2(int messageKind, int parentId, Common::Point **points, int pointsSize) : ExCommand(parentId, messageKind, 0, 0, 0, 0, 1, 0, 0, 0) {
 	_objtype = kObjTypeExCommand2;
 
 	_pointsSize = pointsSize;
diff --git a/engines/fullpipe/messages.h b/engines/fullpipe/messages.h
index 04355b2..7f70838 100644
--- a/engines/fullpipe/messages.h
+++ b/engines/fullpipe/messages.h
@@ -85,7 +85,7 @@ class ExCommand2 : public ExCommand {
 	Common::Point **_points;
 	int _pointsSize;
 
-	ExCommand2(int messageKind, int parentId, const Common::Point **points, int pointsSize);
+	ExCommand2(int messageKind, int parentId, Common::Point **points, int pointsSize);
 	ExCommand2(ExCommand2 *src);
 	virtual ~ExCommand2();
 
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 8e5e0c0..b24790c 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -1464,18 +1464,18 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 
 	int v34 = dx1 - cntX * x1;
 	int v35 = dy1 - cntY * y1;
-	int v72;
-	int x2;
-	int y2 = v34;
+	Common::Point x2;
+	Common::Point y2(v34, v35);
 
 	if (v34)
-		x2 = v34 / abs(v34);
+		x2.x = v34 / abs(v34);
 	else
-		x2 = 0;
+		x2.x = 0;
+
 	if (v35)
-		v72 = v35 / abs(v35);
+		x2.y = v35 / abs(v35);
 	else
-		v72 = 0;
+		x2.y = 0;
 
 	MessageQueue *mq = new MessageQueue(g_fp->_globalMessageQueueList->compact());
 	ExCommand *ex;
@@ -1906,12 +1906,56 @@ Common::Point *MGM::calcLength(Common::Point *point, Movement *mov, int x, int y
 	return point;
 }
 
-ExCommand2 *MGM::buildExCommand2(Movement *mov, int objId, int x1, int y1, int *x2, int *y2, int len) {
-	ExCommand2 *ex2 = new ExCommand2(20, objId, 0, 0);
+ExCommand2 *MGM::buildExCommand2(Movement *mov, int objId, int x1, int y1, Common::Point *x2, Common::Point *y2, int len) {
+	uint cnt;
+
+	if (mov->_currMovement)
+		cnt = mov->_currMovement->_dynamicPhases.size();
+	else
+		cnt = mov->_dynamicPhases.size();
+
+	if (len > 0 && cnt > len)
+		cnt = len;
+
+	Common::Point **points = (Common::Point **)malloc(sizeof(Common::Point *) * cnt);
+
+	for (uint i = 0; i < cnt; i++) {
+		int flags = mov->getDynamicPhaseByIndex(i)->getDynFlags();
+
+		points[i] = new Common::Point;
+
+		if (flags & 1) {
+			points[i]->x = x1 + x2->x;
+
+			y2->x -= x2->x;
+
+			if (!y2->x)
+				x2->x = 0;
+		}
+
+		if (flags & 2) {
+			points[i]->y = y1 + x2->y;
+
+			y2->y -= x2->y;
+
+			if ( !y2->y )
+				x2->y = 0;
+		}
+	}
+
+	ExCommand2 *ex = new ExCommand2(20, objId, points, cnt);
+	ex->_excFlags = 2;
+	ex->_messageNum = mov->_id;
+	ex->_field_14 = len;
+	ex->_field_24 = 1;
+	ex->_keyCode = -1;
+
+	for (int i = 0; i < cnt; i++)
+		delete points[i];
 
-	warning("STUB: MGM::buildExCommand2()");
+	free(points);
 
-	return ex2;
+	return ex;
 }
 
 MovGraphLink::MovGraphLink() {
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 2d39a27..713cafd 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -176,7 +176,7 @@ public:
 	void clearMovements2(int idx);
 	int recalcOffsets(int idx, int st1idx, int st2idx, bool flip, bool flop);
 	Common::Point *calcLength(Common::Point *point, Movement *mov, int x, int y, int *x1, int *y1, int flag);
-	ExCommand2 *buildExCommand2(Movement *mov, int objId, int x1, int y1, int *x2, int *y2, int len);
+	ExCommand2 *buildExCommand2(Movement *mov, int objId, int x1, int y1, Common::Point *x2, Common::Point *y2, int len);
 };
 
 struct MctlLadderMovementVars {


Commit: fb234a2d0ce535a01fb564927735ede756a245f6
    https://github.com/scummvm/scummvm/commit/fb234a2d0ce535a01fb564927735ede756a245f6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:30-08:00

Commit Message:
FULLPIPE: Implement Movement::countPhasesWithFlag()

Changed paths:
    engines/fullpipe/statics.cpp



diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp
index 7178538..d734032 100644
--- a/engines/fullpipe/statics.cpp
+++ b/engines/fullpipe/statics.cpp
@@ -1529,9 +1529,22 @@ int Movement::calcDuration() {
 }
 
 int Movement::countPhasesWithFlag(int maxidx, int flag) {
-	warning("STUB: Movement::countPhasesWithFlag()");
+	int res = 0;
+	int sz;
 
-	return 0;
+	if (_currMovement)
+		sz = _currMovement->_dynamicPhases.size();
+	else
+		sz = _dynamicPhases.size();
+
+	if (maxidx < 0)
+		maxidx = sz;
+
+	for (int i = 0; i < maxidx && i < sz; i++)
+		if (getDynamicPhaseByIndex(i)->_dynFlags & flag)
+			res++;
+
+	return res;
 }
 
 void Movement::setDynamicPhaseIndex(int index) {


Commit: c174883e0559e4c7e0f26f3e024bc255f6dfefde
    https://github.com/scummvm/scummvm/commit/c174883e0559e4c7e0f26f3e024bc255f6dfefde
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:30-08:00

Commit Message:
FULLPIPE: Implement doSomeAnimation()

Changed paths:
    engines/fullpipe/motion.cpp



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index b24790c..2d26a3e 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -2214,7 +2214,11 @@ int startWalkTo(int objId, int objKey, int x, int y, int a5) {
 }
 
 int doSomeAnimation(int objId, int objKey, int a3) {
-	warning("STUB: doSomeAnimation(%d, %d, %d)", objId, objKey, a3);
+	StaticANIObject *ani = g_fp->_currentScene->getStaticANIObject1ById(objId, objKey);
+	MctlCompound *cmp = getCurrSceneSc2MotionController();
+
+	if (ani && cmp)
+		return cmp->method3C(ani, a3);
 
 	return 0;
 }


Commit: d1ba9ef26aa4cea884a3926f8a2874e7fe930d23
    https://github.com/scummvm/scummvm/commit/d1ba9ef26aa4cea884a3926f8a2874e7fe930d23
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:30-08:00

Commit Message:
FULLPIPE: Rename in MovInfo1 struct

Changed paths:
    engines/fullpipe/motion.cpp
    engines/fullpipe/motion.h



diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 2d26a3e..8d6fe4a 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -391,7 +391,7 @@ MctlConnectionPoint::~MctlConnectionPoint() {
 }
 
 MovInfo1::MovInfo1(MovInfo1 *src) {
-	field_0 = src->field_0;
+	index = src->index;
 	pt1 = src->pt1;
 	pt2 = src->pt2;
 	distance1 = src->distance1;
@@ -404,7 +404,7 @@ MovInfo1::MovInfo1(MovInfo1 *src) {
 }
 
 void MovInfo1::clear() {
-	field_0 = 0;
+	index = 0;
 	pt1.x = pt1.y = 0;
 	pt2.x = pt2.y = 0;
 	distance1 = 0;
@@ -896,10 +896,10 @@ MessageQueue *MovGraph2::buildMovInfo1MessageQueue(MovInfo1 *movInfo) {
 
 			if (i >= movInfo->itemsCount - 2 || movInfo->items[i + 2]->subIndex != 10) {
 				movinfo.flags = 0;
-				mg2i = &_items2[movInfo->field_0]->_subItems[movInfo->items[i]->subIndex]._turnS[movInfo->items[i + 1]->subIndex];
+				mg2i = &_items2[movInfo->index]->_subItems[movInfo->items[i]->subIndex]._turnS[movInfo->items[i + 1]->subIndex];
 			} else {
 				movinfo.flags = 2;
-				mg2i = &_items2[movInfo->field_0]->_subItems[movInfo->items[i]->subIndex]._turn[movInfo->items[i + 1]->subIndex];
+				mg2i = &_items2[movInfo->index]->_subItems[movInfo->items[i]->subIndex]._turn[movInfo->items[i + 1]->subIndex];
 			}
 			if (i < movInfo->itemsCount - 2
 				|| (movInfo->items[i]->x == movInfo->items[i + 1]->x
@@ -909,10 +909,10 @@ MessageQueue *MovGraph2::buildMovInfo1MessageQueue(MovInfo1 *movInfo) {
 				 || movInfo->items[i + 1]->x == -1
 				 || movInfo->items[i + 1]->y == -1) {
 
-				ExCommand *ex = new ExCommand(_items2[movInfo->field_0]->_objectId, 1, mg2i->_movementId, 0, 0, 0, 1, 0, 0, 0);
+				ExCommand *ex = new ExCommand(_items2[movInfo->index]->_objectId, 1, mg2i->_movementId, 0, 0, 0, 1, 0, 0, 0);
 
 				ex->_excFlags |= 2;
-				ex->_keyCode = _items2[movInfo->field_0]->_obj->_okeyCode;
+				ex->_keyCode = _items2[movInfo->index]->_obj->_okeyCode;
 				ex->_field_24 = 1;
 				ex->_field_14 = -1;
 				mq->addExCommandToEnd(ex);
@@ -924,7 +924,7 @@ MessageQueue *MovGraph2::buildMovInfo1MessageQueue(MovInfo1 *movInfo) {
 
 				memset(&mgminfo, 0, sizeof(mgminfo));
 
-				mgminfo.ani = _items2[movInfo->field_0]->_obj;
+				mgminfo.ani = _items2[movInfo->index]->_obj;
 				mgminfo.staticsId2 = mg2i->_mov->_staticsObj2->_staticsId;
 				mgminfo.x1 = movInfo->items[i + 1]->x;
 				mgminfo.y1 = movInfo->items[i + 1]->y;
@@ -967,13 +967,13 @@ MessageQueue *MovGraph2::buildMovInfo1MessageQueue(MovInfo1 *movInfo) {
 					 || movInfo->items[i + 2]->subIndex == movInfo->items[i + 3]->subIndex) {
 					movinfo.flags &= 3;
 				} else {
-					MG2I *m = &_items2[movInfo->field_0]->_subItems[movInfo->items[i + 2]->subIndex]._turnS[movInfo->items[i + 3]->subIndex];
+					MG2I *m = &_items2[movInfo->index]->_subItems[movInfo->items[i + 2]->subIndex]._turnS[movInfo->items[i + 3]->subIndex];
 					movinfo.pt2.x -= m->_mx;
 					movinfo.pt2.y -= m->_my;
 					movinfo.flags &= 3;
 				}
 			} else {
-				MG2I *m = &_items2[movInfo->field_0]->_subItems[movInfo->items[i + 2]->subIndex]._turn[movInfo->items[i + 3]->subIndex];
+				MG2I *m = &_items2[movInfo->index]->_subItems[movInfo->items[i + 2]->subIndex]._turn[movInfo->items[i + 3]->subIndex];
 
 				if (movinfo.item1Index && movinfo.item1Index != 1) {
 					movinfo.pt2.y -= m->_my;
@@ -1384,16 +1384,16 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	int my1 = 0;
 
 	if (!(info->flags & 2)) {
-		mx1 = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mx;
-		my1 = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._my;
+		mx1 = _items2[info->index]->_subItems[info->subIndex]._walk[0]._mx;
+		my1 = _items2[info->index]->_subItems[info->subIndex]._walk[0]._my;
 	}
 
 	int mx2 = 0;
 	int my2 = 0;
 
 	if (!(info->flags & 4)) {
-		mx2 = _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mx;
-		my2 = _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._my;
+		mx2 = _items2[info->index]->_subItems[info->subIndex]._walk[2]._mx;
+		my2 = _items2[info->index]->_subItems[info->subIndex]._walk[2]._my;
 	}
 
 	Common::Point point;
@@ -1403,7 +1403,7 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	int a2;
 	int mgmLen;
 
-	_mgm.calcLength(&point, _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov, x, y, &mgmLen, &a2, info->flags & 1);
+	_mgm.calcLength(&point, _items2[info->index]->_subItems[info->subIndex]._walk[1]._mov, x, y, &mgmLen, &a2, info->flags & 1);
 
 	int x1 = point.x;
 	int y1 = point.y;
@@ -1411,7 +1411,7 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	if (!(info->flags & 1)) {
 		if (info->subIndex == 1 || info->subIndex == 0) {
 			a2 = -1;
-			x1 = mgmLen * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mx;
+			x1 = mgmLen * _items2[info->index]->_subItems[info->subIndex]._walk[1]._mx;
 			x = x1;
 			info->pt2.x = x1 + info->pt1.x + mx1 + mx2;
 		}
@@ -1420,7 +1420,7 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	if (!(info->flags & 1)) {
 		if (info->subIndex == 2 || info->subIndex == 3) {
 			a2 = -1;
-			y1 = mgmLen * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._my;
+			y1 = mgmLen * _items2[info->index]->_subItems[info->subIndex]._walk[1]._my;
 			y = y1;
 			info->pt2.y = y1 + info->pt1.y + my1 + my2;
 		}
@@ -1430,23 +1430,23 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 	int cntY = 0;
 
 	if (!(info->flags & 2)) {
-		cntX = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 1);
-		cntY = _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 2);
+		cntX = _items2[info->index]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 1);
+		cntY = _items2[info->index]->_subItems[info->subIndex]._walk[0]._mov->countPhasesWithFlag(-1, 2);
 	}
 
 	if (mgmLen > 1) {
-		cntX += (mgmLen - 1) * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 1);
-		cntY += (mgmLen - 1) * _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 2);
+		cntX += (mgmLen - 1) * _items2[info->index]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 1);
+		cntY += (mgmLen - 1) * _items2[info->index]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(-1, 2);
 	}
 
 	if (mgmLen > 0) {
-		cntX += _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 1);
-		cntY += _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 2);
+		cntX += _items2[info->index]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 1);
+		cntY += _items2[info->index]->_subItems[info->subIndex]._walk[1]._mov->countPhasesWithFlag(a2, 2);
 	}
 
 	if (!(info->flags & 4)) {
-		cntX += _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 1);
-		cntY += _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 2);
+		cntX += _items2[info->index]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 1);
+		cntY += _items2[info->index]->_subItems[info->subIndex]._walk[2]._mov->countPhasesWithFlag(-1, 2);
 	}
 
 	int dx1 = x - x1;
@@ -1482,9 +1482,9 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 
 	if (info->flags & 2) {
 		ex = new ExCommand(
-							_items2[info->field_0]->_objectId,
+							_items2[info->index]->_objectId,
 							5,
-							_items2[info->field_0]->_subItems[info->subIndex]._walk[1]._movementId,
+							_items2[info->index]->_subItems[info->subIndex]._walk[1]._movementId,
 							info->pt1.x,
 							info->pt1.y,
 							0,
@@ -1495,14 +1495,14 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 
 		ex->_field_14 = info->distance1;
 
-		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
+		ex->_keyCode = _items2[info->index]->_obj->_okeyCode;
 		ex->_field_24 = 1;
 		ex->_excFlags |= 2;
 	} else {
 		ex = new ExCommand(
-							 _items2[info->field_0]->_objectId,
+							 _items2[info->index]->_objectId,
 							 5,
-							 _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._movementId,
+							 _items2[info->index]->_subItems[info->subIndex]._walk[0]._movementId,
 							 info->pt1.x,
 							 info->pt1.y,
 							 0,
@@ -1513,21 +1513,21 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 
 		ex->_field_14 = info->distance1;
 
-		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
+		ex->_keyCode = _items2[info->index]->_obj->_okeyCode;
 		ex->_field_24 = 1;
 		ex->_excFlags |= 2;
 		mq->addExCommandToEnd(ex);
 
 		ex = _mgm.buildExCommand2(
-								  _items2[info->field_0]->_subItems[info->subIndex]._walk[0]._mov,
-								  _items2[info->field_0]->_objectId,
+								  _items2[info->index]->_subItems[info->subIndex]._walk[0]._mov,
+								  _items2[info->index]->_objectId,
 								  x1,
 								  y1,
 								  &x2,
 								  &y2,
 								  -1);
 		ex->_parId = mq->_id;
-		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
+		ex->_keyCode = _items2[info->index]->_obj->_okeyCode;
 	}
 
 	mq->addExCommandToEnd(ex);
@@ -1541,37 +1541,37 @@ MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
 			par = -1;
 
 		ex = _mgm.buildExCommand2(
-								  _items2[info->field_0]->_subItems[info->subIndex]._walk[1]._mov,
-								  _items2[info->field_0]->_objectId,
+								  _items2[info->index]->_subItems[info->subIndex]._walk[1]._mov,
+								  _items2[info->index]->_objectId,
 								  x1,
 								  y1,
 								  &x2,
 								  &y2,
 								  par);
 		ex->_parId = mq->_id;
-		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
+		ex->_keyCode = _items2[info->index]->_obj->_okeyCode;
 		mq->addExCommandToEnd(ex);
 	}
 
 	if (!(info->flags & 4)) {
 		ex = _mgm.buildExCommand2(
-								  _items2[info->field_0]->_subItems[info->subIndex]._walk[2]._mov,
-								  _items2[info->field_0]->_objectId,
+								  _items2[info->index]->_subItems[info->subIndex]._walk[2]._mov,
+								  _items2[info->index]->_objectId,
 								  x1,
 								  y1,
 								  &x2,
 								  &y2,
 								  -1);
 		ex->_parId = mq->_id;
-		ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
+		ex->_keyCode = _items2[info->index]->_obj->_okeyCode;
 
 		mq->addExCommandToEnd(ex);
 	}
 
-    ex = new ExCommand(_items2[info->field_0]->_objectId, 5, -1, info->pt2.x, info->pt2.y, 0, 1, 0, 0, 0);
+    ex = new ExCommand(_items2[info->index]->_objectId, 5, -1, info->pt2.x, info->pt2.y, 0, 1, 0, 0, 0);
 	ex->_field_14 = info->distance2;
 
-	ex->_keyCode = _items2[info->field_0]->_obj->_okeyCode;
+	ex->_keyCode = _items2[info->index]->_obj->_okeyCode;
 	ex->_field_24 = 0;
 	ex->_excFlags |= 2;
 
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 713cafd..cecde70 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -374,7 +374,7 @@ struct MovInfo1Sub {
 };
 
 struct MovInfo1 {
-	int field_0;
+	int index;
 	Common::Point pt1;
 	Common::Point pt2;
 	int distance1;


Commit: 5afe7cfb7bf21204ac4225c05e0fe4c6c074ef52
    https://github.com/scummvm/scummvm/commit/5afe7cfb7bf21204ac4225c05e0fe4c6c074ef52
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:30-08:00

Commit Message:
FULLPIPE: Initial code for scene23

Changed paths:
  A engines/fullpipe/scenes/scene23.cpp



diff --git a/engines/fullpipe/scenes/scene23.cpp b/engines/fullpipe/scenes/scene23.cpp
new file mode 100644
index 0000000..8898d5f9
--- /dev/null
+++ b/engines/fullpipe/scenes/scene23.cpp
@@ -0,0 +1,133 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "fullpipe/fullpipe.h"
+
+#include "fullpipe/objectnames.h"
+#include "fullpipe/constants.h"
+
+#include "fullpipe/gameloader.h"
+#include "fullpipe/motion.h"
+#include "fullpipe/scenes.h"
+#include "fullpipe/statics.h"
+
+#include "fullpipe/interaction.h"
+#include "fullpipe/behavior.h"
+
+
+namespace Fullpipe {
+
+void __thiscall scene23_initScene(Scene *sc) {
+	g_vars->scene23_var01 = 200;
+	g_vars->scene23_var02 = 200;
+	g_vars->scene23_var03 = 300;
+	g_vars->scene23_var04 = 300;
+	g_vars->scene23_calend0 = sc->getStaticANIObject1ById(ANI_CALENDWHEEL, 0);
+	g_vars->scene23_calend1 = sc->getStaticANIObject1ById(ANI_CALENDWHEEL, 1);
+	g_vars->scene23_calend2 = sc->getStaticANIObject1ById(ANI_CALENDWHEEL, 2);
+	g_vars->scene23_calend3 = sc->getStaticANIObject1ById(ANI_CALENDWHEEL, 3);
+	g_vars->scene23_var05 = 0;
+	g_vars->scene23_var06 = 0;
+	g_vars->scene23_var07 = 0;
+	g_vars->scene23_giraffeTop = sc->getStaticANIObject1ById(ANI_GIRAFFE_TOP, -1);
+	g_vars->scene23_giraffee = sc->getStaticANIObject1ById(ANI_GIRAFFEE, -1);
+
+	g_fp->_floaters->init(getGameLoaderGameVar()->getSubVarByName("SC_23"));
+
+	Scene *oldsc = g_fp->_currentScene;
+	g_fp->_currentScene = sc;
+
+	if (g_fp->getObjectState(sO_UpperHatch_23) == g_fp->getObjectEnumState(sO_UpperHatch_23, sO_Opened)) {
+		sc->getPictureObjectById(PIC_SC23_BOXOPEN, 0)->_flags |= 4;
+		sc->getPictureObjectById(PIC_SC23_BOXCLOSED, 0)->_flags &= 0xFFFB;
+		sc->getPictureObjectById(PIC_SC23_BTN1, 0)->_flags |= 4;
+		sc->getPictureObjectById(PIC_SC23_BTN2, 0)->_flags |= 4;
+		sc->getPictureObjectById(PIC_SC23_BTN3, 0)->_flags |= 4;
+		sc->getPictureObjectById(PIC_SC23_BTN4, 0)->_flags |= 4;
+
+		if (g_vars->scene23_giraffee->_statics->_staticsId == ST_GRFG_EMPTY || !(g_vars->scene23_giraffee->_flags & 4)) {
+			g_vars->scene23_giraffee->changeStatics2(ST_GRFG_BALD);
+			g_vars->scene23_giraffee->_flags |= 4;
+		}
+		g_vars->scene23_calend0->show1(-1, -1, -1, 0);
+		g_vars->scene23_calend1->show1(-1, -1, -1, 0);
+		g_vars->scene23_calend2->show1(-1, -1, -1, 0);
+		g_vars->scene23_calend3->show1(-1, -1, -1, 0);
+
+		sc->getStaticANIObject1ById(ANI_LUK23_U, -1)->changeStatics2(ST_LUK23U_OPEN);
+	} else {
+		sc->getPictureObjectById(PIC_SC23_BOXOPEN, 0)->_flags &= 0xFFFB;
+		sc->getPictureObjectById(PIC_SC23_BOXCLOSED, 0)->_flags |= 4;
+		sc->getPictureObjectById(PIC_SC23_BTN1, 0)->_flags &= 0xFFFB;
+		sc->getPictureObjectById(PIC_SC23_BTN2, 0)->_flags &= 0xFFFB;
+		sc->getPictureObjectById(PIC_SC23_BTN3, 0)->_flags &= 0xFFFB;
+		sc->getPictureObjectById(PIC_SC23_BTN4, 0)->_flags &= 0xFFFB;
+
+		g_vars->scene23_giraffee->hide();
+		g_vars->scene23_calend0->hide();
+		g_vars->scene23_calend1->hide();
+		g_vars->scene23_calend2->hide();
+		g_vars->scene23_calend3->hide();
+
+		sc->getStaticANIObject1ById(ANI_LUK23_U, -1)->changeStatics2(ST_LUK23U_CLOSED);
+
+		g_fp->_floaters->genFlies(sc, 600, 90, 0, 0);
+	}
+
+	if (g_fp->getObjectState(sO_LowerHatch_23) == g_fp->getObjectEnumState(sO_LowerHatch_23, sO_Opened)) {
+		g_vars->scene23_giraffeTop->show1(-1, -1, -1, 0);
+		g_vars->scene23_giraffeTop->changeStatics2(ST_GRFU_UP);
+
+		if (g_fp->getObjectState(sO_LowerPipe_21) == g_fp->getObjectEnumState(sO_LowerPipe_21, sO_IsOpened)) {
+			g_vars->scene23_giraffeTop->changeStatics2(ST_GRFU_KISS);
+			g_vars->scene23_giraffee->hide();
+		} else {
+			if (g_fp->getObjectState(sO_UpperHatch_23) == g_fp->getObjectEnumState(sO_UpperHatch_23, sO_Opened)
+				&& (g_vars->scene23_giraffee->_flags & 4))
+				g_vars->scene23_giraffeTop->setOXY(614, 362);
+			else
+				g_vars->scene23_giraffeTop->setOXY(618, 350);
+
+			if (sceneHandler23_testCalendar())
+				g_vars->scene23_calend1->_statics = g_vars->scene23_calend1->getStaticsById(ST_CND_5);
+		}
+
+		sc->getStaticANIObject1ById(sc, ANI_LUK23_D, -1)->changeStatics2(ST_LUK23_OPEN);
+
+		if (g_fp->getObjectState(sO_Lever_23) == g_fp->getObjectEnumState(sO_Lever_23, sO_Taken))
+			sc->getStaticANIObject1ById(ANI_INV_LEVERHANDLE, -1)->hide();
+
+		sc->getStaticANIObject1ById(ANI_HANDLE23, -1)->hide();
+	} else {
+		g_vars->scene23_giraffeTop->hide();
+
+		sc->getStaticANIObject1ById(ANI_LUK23_D, -1)->changeStatics2(ST_LUK23_WHANDLE2);
+
+		sc->getStaticANIObject1ById(ANI_INV_LEVERHANDLE, -1)->hide();
+	}
+	
+	StaticANIObject_hide();
+
+	g_fp->_currentScene = oldsc;
+}
+
+} // End of namespace Fullpipe


Commit: 2f82ff1eee40561c134f2035daf941fd78fcdb16
    https://github.com/scummvm/scummvm/commit/2f82ff1eee40561c134f2035daf941fd78fcdb16
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:31-08:00

Commit Message:
FULLPIPE: Plug scene23 in

Changed paths:
    engines/fullpipe/constants.h
    engines/fullpipe/module.mk
    engines/fullpipe/scenes.cpp
    engines/fullpipe/scenes.h
    engines/fullpipe/scenes/scene23.cpp



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index d75aa3d..b7ffcb8 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -776,6 +776,30 @@ namespace Fullpipe {
 #define ST_GRFM_NORM 1983
 #define ST_MSH_SIT 1756
 
+// Scene 23
+#define ANI_CALENDWHEEL 1702
+#define ANI_GIRAFFE_TOP 1645
+#define ANI_GIRAFFEE 1672
+#define ANI_HANDLE23 1978
+#define ANI_INV_LEVERHANDLE 1777
+#define ANI_LUK23_D 1813
+#define ANI_LUK23_U 1817
+#define PIC_SC23_BOXCLOSED 1728
+#define PIC_SC23_BOXOPEN 1723
+#define PIC_SC23_BTN1 1729
+#define PIC_SC23_BTN2 1730
+#define PIC_SC23_BTN3 1731
+#define PIC_SC23_BTN4 1732
+#define ST_CND_5 1713
+#define ST_GRFG_BALD 1675
+#define ST_GRFG_EMPTY 1674
+#define ST_GRFU_KISS 1681
+#define ST_GRFU_UP 1648
+#define ST_LUK23_OPEN 1816
+#define ST_LUK23_WHANDLE2 1977
+#define ST_LUK23U_CLOSED 1819
+#define ST_LUK23U_OPEN 1820
+
 // Scene 24
 #define ANI_DROP_24 3505
 #define ANI_INV_HAMMER 884
diff --git a/engines/fullpipe/module.mk b/engines/fullpipe/module.mk
index 6562e9a..5d426ee 100644
--- a/engines/fullpipe/module.mk
+++ b/engines/fullpipe/module.mk
@@ -43,6 +43,7 @@ MODULE_OBJS = \
 	scenes/scene20.o \
 	scenes/scene21.o \
 	scenes/scene22.o \
+	scenes/scene23.o \
 	scenes/scene24.o \
 	scenes/scene30.o \
 	scenes/scene31.o \
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index 34a8de6..ba6f887 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -264,6 +264,20 @@ Vars::Vars() {
 	scene22_craneIsOut = true;
 	scene22_numBagFalls = 1;
 
+	scene23_var01 = 0;
+	scene23_var02 = 0;
+	scene23_var03 = 0;
+	scene23_var04 = 0;
+	scene23_calend0 = 0;
+	scene23_calend1 = 0;
+	scene23_calend2 = 0;
+	scene23_calend3 = 0;
+	scene23_var05 = 0;
+	scene23_var06 = 0;
+	scene23_var07 = 0;
+	scene23_giraffeTop = 0;
+	scene23_giraffee = 0;
+
 	scene24_jetIsOn = false;
 	scene24_flowIsLow = false;
 	scene24_waterIsOn = false;
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index 7852d96..e2c5696 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -373,6 +373,20 @@ public:
 	bool scene22_craneIsOut;
 	int scene22_numBagFalls;
 
+	int scene23_var01;
+	int scene23_var02;
+	int scene23_var03;
+	int scene23_var04;
+	StaticANIObject *scene23_calend0;
+	StaticANIObject *scene23_calend1;
+	StaticANIObject *scene23_calend2;
+	StaticANIObject *scene23_calend3;
+	int scene23_var05;
+	int scene23_var06;
+	int scene23_var07;
+	StaticANIObject *scene23_giraffeTop;
+	StaticANIObject *scene23_giraffee;
+
 	bool scene24_jetIsOn;
 	bool scene24_flowIsLow;
 	bool scene24_waterIsOn;
diff --git a/engines/fullpipe/scenes/scene23.cpp b/engines/fullpipe/scenes/scene23.cpp
index 8898d5f9..5facd76 100644
--- a/engines/fullpipe/scenes/scene23.cpp
+++ b/engines/fullpipe/scenes/scene23.cpp
@@ -32,11 +32,17 @@
 
 #include "fullpipe/interaction.h"
 #include "fullpipe/behavior.h"
-
+#include "fullpipe/floaters.h"
 
 namespace Fullpipe {
 
-void __thiscall scene23_initScene(Scene *sc) {
+bool sceneHandler23_testCalendar() {
+	warning("STUB: sceneHandler23_testCalendar()");
+
+	return false;
+}
+
+void scene23_initScene(Scene *sc) {
 	g_vars->scene23_var01 = 200;
 	g_vars->scene23_var02 = 200;
 	g_vars->scene23_var03 = 300;
@@ -51,7 +57,7 @@ void __thiscall scene23_initScene(Scene *sc) {
 	g_vars->scene23_giraffeTop = sc->getStaticANIObject1ById(ANI_GIRAFFE_TOP, -1);
 	g_vars->scene23_giraffee = sc->getStaticANIObject1ById(ANI_GIRAFFEE, -1);
 
-	g_fp->_floaters->init(getGameLoaderGameVar()->getSubVarByName("SC_23"));
+	g_fp->_floaters->init(g_fp->getGameLoaderGameVar()->getSubVarByName("SC_23"));
 
 	Scene *oldsc = g_fp->_currentScene;
 	g_fp->_currentScene = sc;
@@ -111,7 +117,7 @@ void __thiscall scene23_initScene(Scene *sc) {
 				g_vars->scene23_calend1->_statics = g_vars->scene23_calend1->getStaticsById(ST_CND_5);
 		}
 
-		sc->getStaticANIObject1ById(sc, ANI_LUK23_D, -1)->changeStatics2(ST_LUK23_OPEN);
+		sc->getStaticANIObject1ById(ANI_LUK23_D, -1)->changeStatics2(ST_LUK23_OPEN);
 
 		if (g_fp->getObjectState(sO_Lever_23) == g_fp->getObjectEnumState(sO_Lever_23, sO_Taken))
 			sc->getStaticANIObject1ById(ANI_INV_LEVERHANDLE, -1)->hide();
@@ -125,8 +131,6 @@ void __thiscall scene23_initScene(Scene *sc) {
 		sc->getStaticANIObject1ById(ANI_INV_LEVERHANDLE, -1)->hide();
 	}
 	
-	StaticANIObject_hide();
-
 	g_fp->_currentScene = oldsc;
 }
 


Commit: 7cb50d7066ebebde5f9682f384cedd87462f6ccf
    https://github.com/scummvm/scummvm/commit/7cb50d7066ebebde5f9682f384cedd87462f6ccf
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:31-08:00

Commit Message:
FULLPIPE: Implement scene23_updateCursor()

Changed paths:
    engines/fullpipe/constants.h
    engines/fullpipe/scenes/scene23.cpp



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index b7ffcb8..7d74a1a 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -790,6 +790,7 @@ namespace Fullpipe {
 #define PIC_SC23_BTN2 1730
 #define PIC_SC23_BTN3 1731
 #define PIC_SC23_BTN4 1732
+#define PIC_SC23_LADDERU 3411
 #define ST_CND_5 1713
 #define ST_GRFG_BALD 1675
 #define ST_GRFG_EMPTY 1674
diff --git a/engines/fullpipe/scenes/scene23.cpp b/engines/fullpipe/scenes/scene23.cpp
index 5facd76..6d7d074 100644
--- a/engines/fullpipe/scenes/scene23.cpp
+++ b/engines/fullpipe/scenes/scene23.cpp
@@ -134,4 +134,22 @@ void scene23_initScene(Scene *sc) {
 	g_fp->_currentScene = oldsc;
 }
 
+int scene23_updateCursor() {
+	g_fp->updateCursorCommon();
+
+	if (g_fp->_objectIdAtCursor == PIC_SC23_LADDERU) {
+		if (g_vars->scene23_var05)
+			return g_fp->_cursorId;
+
+		g_fp->_cursorId = getGameLoaderInventory()->getSelectedItemId() ? PIC_CSR_GOU : PIC_CSR_ITN; // FIXME check
+	}
+
+	if (g_fp->_objectIdAtCursor == PIC_SC23_BTN1 || g_fp->_objectIdAtCursor == PIC_SC23_BTN2
+		|| g_fp->_objectIdAtCursor == PIC_SC23_BTN3 || g_fp->_objectIdAtCursor == PIC_SC23_BTN4
+		|| g_fp->_objectIdAtCursor == ANI_CALENDWHEEL)
+		g_fp->_cursorId = PIC_CSR_LIFT;
+
+	return g_fp->_cursorId;
+}
+
 } // End of namespace Fullpipe


Commit: b0ddd171cb69fde214897c078a1d809570355da8
    https://github.com/scummvm/scummvm/commit/b0ddd171cb69fde214897c078a1d809570355da8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:31-08:00

Commit Message:
FULLPIPE: Implement scene23_setGiraffeState()

Changed paths:
    engines/fullpipe/constants.h
    engines/fullpipe/scenes/scene23.cpp



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 7d74a1a..4a285e7 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -791,6 +791,8 @@ namespace Fullpipe {
 #define PIC_SC23_BTN3 1731
 #define PIC_SC23_BTN4 1732
 #define PIC_SC23_LADDERU 3411
+#define QU_GRFU_TURN_UD 1664
+#define QU_GRFU_TURN_UL 1662
 #define ST_CND_5 1713
 #define ST_GRFG_BALD 1675
 #define ST_GRFG_EMPTY 1674
diff --git a/engines/fullpipe/scenes/scene23.cpp b/engines/fullpipe/scenes/scene23.cpp
index 6d7d074..f381e1d 100644
--- a/engines/fullpipe/scenes/scene23.cpp
+++ b/engines/fullpipe/scenes/scene23.cpp
@@ -134,6 +134,13 @@ void scene23_initScene(Scene *sc) {
 	g_fp->_currentScene = oldsc;
 }
 
+void scene23_setGiraffeState() {
+	if (g_fp->getObjectState(sO_UpperHatch_23) == g_fp->getObjectEnumState(sO_UpperHatch_23, sO_Opened)) {
+		g_fp->_behaviorManager->setBehaviorEnabled(g_vars->scene23_giraffeTop, ST_GRFU_UP, QU_GRFU_TURN_UL, 0);
+		g_fp->_behaviorManager->setBehaviorEnabled(g_vars->scene23_giraffeTop, ST_GRFU_UP, QU_GRFU_TURN_UD, 0);
+	}
+}
+
 int scene23_updateCursor() {
 	g_fp->updateCursorCommon();
 


Commit: d8c3c774d1ef88e388037a903620716b42510d03
    https://github.com/scummvm/scummvm/commit/d8c3c774d1ef88e388037a903620716b42510d03
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:31-08:00

Commit Message:
FULLPIPE: Implement sceneHandler23()

Changed paths:
    engines/fullpipe/constants.h
    engines/fullpipe/scenes/scene22.cpp
    engines/fullpipe/scenes/scene23.cpp



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 4a285e7..8d2941e 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -784,12 +784,24 @@ namespace Fullpipe {
 #define ANI_INV_LEVERHANDLE 1777
 #define ANI_LUK23_D 1813
 #define ANI_LUK23_U 1817
+#define MSG_SC23_CLICKBTN1 1736
+#define MSG_SC23_CLICKBTN2 1737
+#define MSG_SC23_CLICKBTN3 1738
+#define MSG_SC23_CLICKBTN4 1739
+#define MSG_SC23_FROMSTOOL 3339
+#define MSG_SC23_HIDEGIRAFFEE 4650
+#define MSG_SC23_ONSTOOL 3334
+#define MSG_SC23_SPINWHEEL1 1740
+#define MSG_SC23_SPINWHEEL2 1741
+#define MSG_SC23_SPINWHEEL3 1742
+#define MSG_SC23_SPINWHEEL4 1743
 #define PIC_SC23_BOXCLOSED 1728
 #define PIC_SC23_BOXOPEN 1723
 #define PIC_SC23_BTN1 1729
 #define PIC_SC23_BTN2 1730
 #define PIC_SC23_BTN3 1731
 #define PIC_SC23_BTN4 1732
+#define PIC_SC23_LADDER 1628
 #define PIC_SC23_LADDERU 3411
 #define QU_GRFU_TURN_UD 1664
 #define QU_GRFU_TURN_UL 1662
diff --git a/engines/fullpipe/scenes/scene22.cpp b/engines/fullpipe/scenes/scene22.cpp
index 2f8bb26..657fe12 100644
--- a/engines/fullpipe/scenes/scene22.cpp
+++ b/engines/fullpipe/scenes/scene22.cpp
@@ -104,7 +104,7 @@ void sceneHandler22_showStool() {
 	chainQueue(QU_SC22_SHOWSTOOL, 0);
 }
 
-void sceneHandler22and23_hideStool() {
+void sceneHandler22_hideStool() {
 	g_fp->_currentScene->getStaticANIObject1ById(ANI_TABURETTE, -1)->hide();
 }
 
@@ -312,7 +312,7 @@ int sceneHandler22(ExCommand *cmd) {
 		break;
 
 	case MSG_SC22_HIDESTOOL:
-		sceneHandler22and23_hideStool();
+		sceneHandler22_hideStool();
 		break;
 
 	case MSG_SC22_FROMSTOOL:
diff --git a/engines/fullpipe/scenes/scene23.cpp b/engines/fullpipe/scenes/scene23.cpp
index f381e1d..161b38b 100644
--- a/engines/fullpipe/scenes/scene23.cpp
+++ b/engines/fullpipe/scenes/scene23.cpp
@@ -159,4 +159,188 @@ int scene23_updateCursor() {
 	return g_fp->_cursorId;
 }
 
+void sceneHandler23_showStool() {
+	warning("STUB: sceneHandler23_showStool()");
+}
+
+void sceneHandler23_hideStool() {
+	g_fp->_currentScene->getStaticANIObject1ById(ANI_TABURETTE, -1)->hide();
+}
+
+void sceneHandler23_spinWheel1() {
+	warning("STUB: sceneHandler23_spinWheel1()");
+}
+
+void sceneHandler23_spinWheel2() {
+	warning("STUB: sceneHandler23_spinWheel2()");
+}
+
+void sceneHandler23_spinWheel3() {
+	warning("STUB: sceneHandler23_spinWheel3()");
+}
+
+void sceneHandler23_spinWheel4() {
+	warning("STUB: sceneHandler23_spinWheel4()");
+}
+
+void sceneHandler23_pushButton(ExCommand *cmd) {
+	warning("STUB: sceneHandler23_pushButton(cmd)");
+}
+
+void sceneHandler23_sendClick(StaticANIObject *ani) {
+	warning("STUB: sceneHandler23_sendClick(ani)");
+}
+
+void sceneHandler23_checkReachingTop() {
+	warning("STUB: sceneHandler23_checkReachingTop()");
+}
+
+void sceneHandler23_exitCalendar() {
+	warning("STUB: sceneHandler23_exitCalendar()");
+}
+
+void sceneHandler23_lowerFromCalendar(ExCommand *cmd) {
+	warning("STUB: sceneHandler23_lowerFromCalendar(cmd)");
+}
+
+void sceneHandler23_fromStool(ExCommand *cmd) {
+	warning("STUB: sceneHandler23_fromStool(cmd)");
+}
+
+int sceneHandler23(ExCommand *cmd) {
+	if (cmd->_messageKind != 17)
+		return 0;
+
+	switch (cmd->_messageNum) {
+	case MSG_SC23_FROMSTOOL:
+		g_vars->scene23_var06 = 0;
+
+		getCurrSceneSc2MotionController()->setEnabled();
+		getGameLoaderInteractionController()->enableFlag24();
+
+		g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
+		break;
+
+	case MSG_SC23_HIDEGIRAFFEE:
+		g_vars->scene23_giraffee->queueMessageQueue(0);
+		g_vars->scene23_giraffee->_flags &= 0xFFFB;
+		break;
+
+	case MSG_SC23_ONSTOOL:
+		g_vars->scene23_var06 = 1;
+
+		getCurrSceneSc2MotionController()->clearEnabled();
+		getGameLoaderInteractionController()->disableFlag24();
+
+		g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0);
+		break;
+
+	case MSG_SC22_SHOWSTOOL:
+		sceneHandler23_showStool();
+		break;
+
+	case MSG_SC22_HIDESTOOL:
+		sceneHandler23_hideStool();
+		break;
+
+	case MSG_SC23_SPINWHEEL1:
+		sceneHandler23_spinWheel1();
+		break;
+
+	case MSG_SC23_SPINWHEEL2:
+		sceneHandler23_spinWheel2();
+		break;
+
+	case MSG_SC23_SPINWHEEL3:
+		sceneHandler23_spinWheel3();
+		break;
+
+	case MSG_SC23_SPINWHEEL4:
+		sceneHandler23_spinWheel4();
+		break;
+
+	case MSG_SC23_CLICKBTN1:
+	case MSG_SC23_CLICKBTN2:
+	case MSG_SC23_CLICKBTN3:
+	case MSG_SC23_CLICKBTN4:
+		sceneHandler23_pushButton(cmd);
+		break;
+
+	case 33:
+		if (g_fp->_aniMan2) {
+			int x = g_fp->_aniMan2->_ox;
+
+			if (x < g_fp->_sceneRect.left + g_vars->scene23_var01)
+				g_fp->_currentScene->_x = x - g_vars->scene23_var03 - g_fp->_sceneRect.left;
+
+			if (x > g_fp->_sceneRect.right - g_vars->scene23_var01)
+				g_fp->_currentScene->_x = x + g_vars->scene23_var03 - g_fp->_sceneRect.right;
+		}
+
+		g_fp->_floaters->update();
+		g_fp->_behaviorManager->updateBehaviors();
+
+		g_fp->startSceneTrack();
+
+		break;
+
+	case 29:
+		{
+			StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY);
+			int picId;
+
+			if (ani && ani->_id == ANI_CALENDWHEEL) {
+				sceneHandler23_sendClick(ani);
+				cmd->_messageKind = 0;
+			}
+
+			sceneHandler23_checkReachingTop();
+
+			if (g_vars->scene23_var05) {
+				picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY);
+
+				if (picId == PIC_SC23_LADDER) {
+					sceneHandler23_exitCalendar();
+
+					cmd->_messageKind = 0;
+					break;
+				}
+
+				if (cmd->_sceneClickY > 450) {
+					sceneHandler23_lowerFromCalendar(cmd);
+
+					cmd->_messageKind = 0;
+					break;
+				}
+				break;
+			}
+
+			if (!g_vars->scene23_var06) {
+				picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY);
+
+				if (picId == PIC_SC23_LADDERU && !g_vars->scene23_var05) {
+					sceneHandler23_pushButton(cmd);
+
+					cmd->_messageKind = 0;
+					break;
+				}
+				break;
+			}
+
+			if (ani && ani->_id == ANI_HANDLE23) {
+				handleObjectInteraction(g_fp->_aniMan, ani, cmd->_keyCode);
+				cmd->_messageKind = 0;
+			} else {
+				sceneHandler23_fromStool(cmd);
+
+				cmd->_messageKind = 0;
+			}
+
+			break;
+		}
+	}
+
+	return 0;
+}
+
 } // End of namespace Fullpipe


Commit: d75c4d7f447bc87ff0fcebc7c4abaa4e4f281f22
    https://github.com/scummvm/scummvm/commit/d75c4d7f447bc87ff0fcebc7c4abaa4e4f281f22
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-01-04T14:53:31-08:00

Commit Message:
FULLPIPE: Enable scene23

Changed paths:
    engines/fullpipe/scenes.cpp
    engines/fullpipe/scenes.h



diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index ba6f887..d11a923 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -708,7 +708,6 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) {
 		_updateCursorCallback = scene22_updateCursor;
 		break;
 
-#if 0
 	case SC_23:
 		sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_23");
 		scene->preloadMovements(sceneVar);
@@ -717,10 +716,9 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) {
 		scene->initObjectCursors("SC_23");
 		setSceneMusicParameters(sceneVar);
 		insertMessageHandler(sceneHandler23, 2, 2);
-		scene23_sub_423B00();
+		scene23_setGiraffeState();
 		_updateCursorCallback = scene23_updateCursor;
 		break;
-#endif
 
 	case SC_24:
 		sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_24");
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index e2c5696..b272608 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -113,6 +113,11 @@ void scene22_setBagState();
 int sceneHandler22(ExCommand *cmd);
 int scene22_updateCursor();
 
+void scene23_initScene(Scene *sc);
+void scene23_setGiraffeState();
+int sceneHandler23(ExCommand *cmd);
+int scene23_updateCursor();
+
 void scene24_initScene(Scene *sc);
 void scene24_setPoolState();
 int sceneHandler24(ExCommand *cmd);






More information about the Scummvm-git-logs mailing list