[Scummvm-cvs-logs] SF.net SVN: scummvm: [28876] scummvm/trunk/engines/agi

mthreepwood at users.sourceforge.net mthreepwood at users.sourceforge.net
Fri Sep 7 22:47:31 CEST 2007


Revision: 28876
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28876&view=rev
Author:   mthreepwood
Date:     2007-09-07 13:47:31 -0700 (Fri, 07 Sep 2007)

Log Message:
-----------
wind and owl's help works in Winnie

Modified Paths:
--------------
    scummvm/trunk/engines/agi/preagi_winnie.cpp
    scummvm/trunk/engines/agi/preagi_winnie.h

Modified: scummvm/trunk/engines/agi/preagi_winnie.cpp
===================================================================
--- scummvm/trunk/engines/agi/preagi_winnie.cpp	2007-09-07 20:30:10 UTC (rev 28875)
+++ scummvm/trunk/engines/agi/preagi_winnie.cpp	2007-09-07 20:47:31 UTC (rev 28876)
@@ -52,7 +52,7 @@
 	room = IDI_WTP_ROOM_HOME;
 
 	mist = -1;
-	wind = false;
+	doWind = false;
 	winnie_event = false;
 }
 
@@ -240,14 +240,14 @@
 		done = false;
 		while (!done) {
 			// run wind if it's time
-			//if (wind)
-			//	Winnie_Wind();
+			if (doWind)
+				wind();
 
 			// get menu selection
 			getMenuSel(szMenu, &iSel, fCanSel);
 
 			if (++game.nMoves == IDI_WTP_MAX_MOVES_UNTIL_WIND)
-				wind = true;
+				doWind = true;
 
 			if (winnie_event && (room <= IDI_WTP_MAX_ROOM_TELEPORT)) {
 				if (!tigger_mist) {
@@ -330,7 +330,7 @@
 			case IDO_WTP_DROP_OBJ:
 				opcode = *(buffer + pc++);
 				opcode = -1;
-				//Winnie_DropObjRnd();
+				dropObjRnd();
 				break;
 			case IDO_WTP_FLAG_CLEAR:
 				opcode = *(buffer + pc++);
@@ -364,7 +364,7 @@
 				return IDI_WTP_PAR_GOTO;
 			case IDO_WTP_OWL_HELP:
 				opcode = *(buffer + pc++);
-				//Winnie_ShowOwlHelp();
+				showOwlHelp();
 				break;
 			case IDO_WTP_GOTO_RND:
 				room = _vm->rnd(IDI_WTP_MAX_ROOM_TELEPORT) + 1;
@@ -540,6 +540,81 @@
 	}
 }
 
+void Winnie::dropObjRnd() {
+	if (!game.iObjHave)
+		return;
+	
+	int iRoom;
+	bool done = false;
+
+	while (!done) {
+		iRoom = _vm->rnd(IDI_WTP_MAX_ROOM_NORMAL);
+		done = true;
+		if (iRoom == room)
+			done = false;
+		for (int j = 0; j < IDI_WTP_MAX_ROOM_OBJ; j++) {
+			if (game.iObjRoom[j] == iRoom) {
+				done = false;
+			}
+		}
+	}
+
+	game.iObjRoom[game.iObjHave] = iRoom;
+	game.iObjHave = 0;
+}
+
+void Winnie::wind() {
+	int iRoom;
+	bool done;
+
+	doWind = 0;
+	game.nMoves = 0;
+	if (!game.nObjMiss)
+		return;
+
+	_vm->printStr(IDS_WTP_WIND_0);
+	//Winnie_PlaySound(IDI_WTP_SND_WIND_0);
+	_vm->waitAnyKeyChoice();
+	_vm->printStr(IDS_WTP_WIND_1);
+	//Winnie_PlaySound(IDI_WTP_SND_WIND_0);
+	_vm->waitAnyKeyChoice();
+
+	dropObjRnd();
+
+	// randomize positions of objects at large
+	for (int i = 0; i < IDI_WTP_MAX_OBJ_MISSING; i++) {
+		if (!(game.iUsedObj[i] & IDI_XOR_KEY)) {
+			done = false;
+			while (!done) {
+				iRoom = _vm->rnd(IDI_WTP_MAX_ROOM_NORMAL);
+				done = true;
+				for (int j = 0; j < IDI_WTP_MAX_ROOM_OBJ; j++) {
+					if (game.iObjRoom[j] == iRoom) {
+						done = false;
+					}
+				}
+			}
+			game.iObjRoom[game.iUsedObj[i]] = iRoom;
+		}
+	}
+}
+
+void Winnie::showOwlHelp() {
+	if (game.iObjHave) {
+		_vm->printStr(IDS_WTP_OWL_0);
+		_vm->waitAnyKeyChoice();
+		printObjStr(game.iObjHave, IDI_WTP_OBJ_HELP);
+		_vm->waitAnyKeyChoice();
+	}
+	if (getObjInRoom(room)) {
+		_vm->printStr(IDS_WTP_OWL_0);
+		_vm->waitAnyKeyChoice();
+		printObjStr(getObjInRoom(room), IDI_WTP_OBJ_HELP);
+		_vm->waitAnyKeyChoice();
+	}
+}
+
+
 void Winnie::drawMenu(char *szMenu, int iSel, int fCanSel[]) {
 	int iRow = 0, iCol = 0;
 

Modified: scummvm/trunk/engines/agi/preagi_winnie.h
===================================================================
--- scummvm/trunk/engines/agi/preagi_winnie.h	2007-09-07 20:30:10 UTC (rev 28875)
+++ scummvm/trunk/engines/agi/preagi_winnie.h	2007-09-07 20:47:31 UTC (rev 28876)
@@ -285,6 +285,8 @@
 	uint16	o1138;		// 1138		can be ignored
 };
 
+#define IDI_XOR_KEY			0x80
+
 class Winnie {
 	friend class PreAgiEngine;
 public:
@@ -299,7 +301,7 @@
 	WTP_SAVE_GAME game;
 	int room;
 	int	mist;
-	bool wind;
+	bool doWind;
 	bool winnie_event;
 	int	tigger_mist;
 
@@ -339,6 +341,9 @@
 	void loadGame();
 	void writeSaveGame(uint8*);
 	void readSaveGame(uint8*);
+	void dropObjRnd();
+	void wind();
+	void showOwlHelp();
 };
 
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list