[Scummvm-cvs-logs] scummvm master -> 3bcc4ce1fdd22de41a2e772f8dedcb17c4a48347

tramboi bertrand_augereau at yahoo.fr
Tue Sep 6 16:24:06 CEST 2011


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:
3bcc4ce1fd DREAMWEB: 'useroutine' ported to C++


Commit: 3bcc4ce1fdd22de41a2e772f8dedcb17c4a48347
    https://github.com/scummvm/scummvm/commit/3bcc4ce1fdd22de41a2e772f8dedcb17c4a48347
Author: Bertrand Augereau (bertrand_augereau at yahoo.fr)
Date: 2011-09-02T07:41:54-07:00

Commit Message:
DREAMWEB: 'useroutine' ported to C++

Changed paths:
  A engines/dreamweb/use.cpp
    devtools/tasmrecover/tasm-recover
    engines/dreamweb/dreamgen.cpp
    engines/dreamweb/dreamgen.h
    engines/dreamweb/module.mk
    engines/dreamweb/stubs.h



diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index bf0f134..78c2bb6 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -191,6 +191,7 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'showryanpage',
 	'findallryan',
 	'fillryan',
+	'useroutine',
 	], skip_output = [
 	# These functions are processed but not output
 	'dreamweb',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 6e56a68..9584765 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -8162,91 +8162,6 @@ douse:
 	useroutine();
 }
 
-void DreamGenContext::useroutine() {
-	STACK_CHECK;
-	_cmp(data.byte(kReallocation), 50);
-	if (flags.c())
-		goto nodream7;
-	_cmp(data.byte(kPointerpower), 0);
-	if (!flags.z())
-		goto powerok;
-	return;
-powerok:
-	data.byte(kPointerpower) = 0;
-nodream7:
-	getanyad();
-	dx = data;
-	ds = dx;
-	si = offset_uselist;
-checkuselist:
-	push(si);
-	_lodsb();
-	_sub(al, 'A');
-	_cmp(al, es.byte(bx+12));
-	if (!flags.z())
-		goto failed;
-	_lodsb();
-	_sub(al, 'A');
-	_cmp(al, es.byte(bx+13));
-	if (!flags.z())
-		goto failed;
-	_lodsb();
-	_sub(al, 'A');
-	_cmp(al, es.byte(bx+14));
-	if (!flags.z())
-		goto failed;
-	_lodsb();
-	_sub(al, 'A');
-	_cmp(al, es.byte(bx+15));
-	if (!flags.z())
-		goto failed;
-	_lodsw();
-	si = pop();
-	__dispatch_call(ax);
-	return;
-failed:
-	si = pop();
-	_add(si, 6);
-	_cmp(ds.byte(si), 140);
-	if (!flags.z())
-		goto checkuselist;
-	delpointer();
-	getobtextstart();
-	findnextcolon();
-	_cmp(al, 0);
-	if (flags.z())
-		goto cantuse2;
-	findnextcolon();
-	_cmp(al, 0);
-	if (flags.z())
-		goto cantuse2;
-	al = es.byte(si);
-	_cmp(al, 0);
-	if (flags.z())
-		goto cantuse2;
-	usetext();
-	cx = 400;
-	hangonp();
-	putbackobstuff();
-	return;
-cantuse2:
-	createpanel();
-	showpanel();
-	showman();
-	showexit();
-	obicons();
-	di = 33;
-	bx = 100;
-	al = 63;
-	dl = 241;
-	printmessage();
-	worktoscreenm();
-	cx = 50;
-	hangonp();
-	putbackobstuff();
-	data.byte(kCommandtype) = 255;
-}
-
 void DreamGenContext::wheelsound() {
 	STACK_CHECK;
 	al = 17;
@@ -17326,7 +17241,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
 		case addr_printcurs: printcurs(); break;
 		case addr_delcurs: delcurs(); break;
 		case addr_useobject: useobject(); break;
-		case addr_useroutine: useroutine(); break;
 		case addr_wheelsound: wheelsound(); break;
 		case addr_runtap: runtap(); break;
 		case addr_playguitar: playguitar(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 42beacb..34c2ed9 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -368,7 +368,6 @@ public:
 	static const uint16 addr_playguitar = 0xc590;
 	static const uint16 addr_runtap = 0xc58c;
 	static const uint16 addr_wheelsound = 0xc588;
-	static const uint16 addr_useroutine = 0xc584;
 	static const uint16 addr_useobject = 0xc580;
 	static const uint16 addr_delcurs = 0xc57c;
 	static const uint16 addr_printcurs = 0xc578;
@@ -642,7 +641,6 @@ public:
 	static const uint16 offset_openchangesize = 0x0a1c;
 	static const uint16 offset_keys = 0x0b14;
 	static const uint16 offset_mainlist2 = 0x1440;
-	static const uint16 offset_uselist = 0x0ba8;
 	static const uint16 offset_gameerror2 = 0x0fb2;
 	static const uint16 offset_loadlist = 0x0ef0;
 	static const uint16 offset_gameerror6 = 0x10be;
@@ -1817,7 +1815,7 @@ public:
 	//void turnanypathon();
 	void restorereels();
 	void setwalk();
-	void useroutine();
+	//void useroutine();
 	void zoomicon();
 	//void findlen();
 	void findpathofpoint();
diff --git a/engines/dreamweb/module.mk b/engines/dreamweb/module.mk
index bdacbe7..8cacbdc 100644
--- a/engines/dreamweb/module.mk
+++ b/engines/dreamweb/module.mk
@@ -11,6 +11,7 @@ MODULE_OBJS := \
 	saveload.o \
 	sprite.o \
 	stubs.o \
+	use.o \
 	vgagrafx.o
 
 # This module can be built as a plugin
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index a2d25b9..fc92e57 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -230,4 +230,5 @@
 	void findallryan();
 	void findallryan(uint8 *inv);
 	void fillryan();
+	void useroutine();
 
diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp
new file mode 100644
index 0000000..237c8d4
--- /dev/null
+++ b/engines/dreamweb/use.cpp
@@ -0,0 +1,169 @@
+/* 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 "dreamweb/dreamweb.h"
+
+namespace DreamGen {
+
+
+typedef void (DreamGenContext::*UseCallback)(void);
+
+struct UseListEntry {
+	uint8  id[5]; // 0-terminal because it is easier syntatically to initialize the array
+	UseCallback callback;
+};
+
+void DreamGenContext::useroutine() {
+
+	static const UseListEntry kUseList[] = {
+		{ "NETW", &DreamGenContext::usemon },
+		{ "ELVA", &DreamGenContext::useelevator1 },
+		{ "ELVB", &DreamGenContext::useelevator2 },
+		{ "ELVC", &DreamGenContext::useelevator3 },
+		{ "ELVE", &DreamGenContext::useelevator4 },
+		{ "ELVF", &DreamGenContext::useelevator5 },
+		{ "CGAT", &DreamGenContext::usechurchgate },
+		{ "REMO", &DreamGenContext::usestereo },
+		{ "BUTA", &DreamGenContext::usebuttona },
+		{ "CBOX", &DreamGenContext::usewinch },
+		{ "LITE", &DreamGenContext::uselighter },
+		{ "PLAT", &DreamGenContext::useplate },
+		{ "LIFT", &DreamGenContext::usecontrol },
+		{ "WIRE", &DreamGenContext::usewire },
+		{ "HNDL", &DreamGenContext::usehandle },
+		{ "HACH", &DreamGenContext::usehatch },
+		{ "DOOR", &DreamGenContext::useelvdoor },
+		{ "CSHR", &DreamGenContext::usecashcard },
+		{ "GUNA", &DreamGenContext::usegun },
+		{ "CRAA", &DreamGenContext::usecardreader1 },
+		{ "CRBB", &DreamGenContext::usecardreader2 },
+		{ "CRCC", &DreamGenContext::usecardreader3 },
+		{ "SEAT", &DreamGenContext::sitdowninbar },
+		{ "MENU", &DreamGenContext::usemenu },
+		{ "COOK", &DreamGenContext::usecooker },
+		{ "ELCA", &DreamGenContext::callhotellift },
+		{ "EDCA", &DreamGenContext::calledenslift },
+		{ "DDCA", &DreamGenContext::calledensdlift },
+		{ "ALTR", &DreamGenContext::usealtar },
+		{ "LOKA", &DreamGenContext::openhoteldoor },
+		{ "LOKB", &DreamGenContext::openhoteldoor2 },
+		{ "ENTA", &DreamGenContext::openlouis },
+		{ "ENTB", &DreamGenContext::openryan },
+		{ "ENTE", &DreamGenContext::openpoolboss },
+		{ "ENTC", &DreamGenContext::openyourneighbour },
+		{ "ENTD", &DreamGenContext::openeden },
+		{ "ENTH", &DreamGenContext::opensarters },
+		{ "WWAT", &DreamGenContext::wearwatch },
+		{ "POOL", &DreamGenContext::usepoolreader },
+		{ "WSHD", &DreamGenContext::wearshades },
+		{ "GRAF", &DreamGenContext::grafittidoor },
+		{ "TRAP", &DreamGenContext::trapdoor },
+		{ "CDPE", &DreamGenContext::edenscdplayer },
+		{ "DLOK", &DreamGenContext::opentvdoor },
+		{ "HOLE", &DreamGenContext::usehole },
+		{ "DRYR", &DreamGenContext::usedryer },
+		{ "HOLY", &DreamGenContext::usechurchhole },
+		{ "WALL", &DreamGenContext::usewall },
+		{ "BOOK", &DreamGenContext::usediary },
+		{ "AXED", &DreamGenContext::useaxe },
+		{ "SHLD", &DreamGenContext::useshield },
+		{ "BCNY", &DreamGenContext::userailing },
+		{ "LIDC", &DreamGenContext::usecoveredbox },
+		{ "LIDU", &DreamGenContext::useclearbox },
+		{ "LIDO", &DreamGenContext::useopenbox },
+		{ "PIPE", &DreamGenContext::usepipe },
+		{ "BALC", &DreamGenContext::usebalcony },
+		{ "WIND", &DreamGenContext::usewindow },
+		{ "PAPR", &DreamGenContext::viewfolder },
+		{ "UWTA", &DreamGenContext::usetrainer },
+		{ "UWTB", &DreamGenContext::usetrainer },
+		{ "STAT", &DreamGenContext::entersymbol },
+		{ "TLID", &DreamGenContext::opentomb },
+		{ "SLAB", &DreamGenContext::useslab },
+		{ "CART", &DreamGenContext::usecart },
+		{ "FCAR", &DreamGenContext::usefullcart },
+		{ "SLBA", &DreamGenContext::slabdoora },
+		{ "SLBB", &DreamGenContext::slabdoorb },
+		{ "SLBC", &DreamGenContext::slabdoorc },
+		{ "SLBD", &DreamGenContext::slabdoord },
+		{ "SLBE", &DreamGenContext::slabdoore },
+		{ "SLBF", &DreamGenContext::slabdoorf },
+		{ "PLIN", &DreamGenContext::useplinth },
+		{ "LADD", &DreamGenContext::useladder },
+		{ "LADB", &DreamGenContext::useladderb },
+		{ "GUMA", &DreamGenContext::chewy },
+		{ "SQEE", &DreamGenContext::wheelsound },
+		{ "TAPP", &DreamGenContext::runtap },
+		{ "GUIT", &DreamGenContext::playguitar },
+		{ "CONT", &DreamGenContext::hotelcontrol },
+		{ "BELL", &DreamGenContext::hotelbell },
+	};
+
+	if (data.byte(kReallocation) >= 50) {
+		if (data.byte(kPointerpower) == 0)
+			return;
+		data.byte(kPointerpower) = 0;
+	}
+
+	getanyad();
+	const uint8 *id = es.ptr(bx + 12, 4);
+
+	for (size_t i = 0; i < sizeof(kUseList)/sizeof(UseListEntry); ++i) {
+		const UseListEntry &entry = kUseList[i];
+		if (('A' + id[0] == entry.id[0]) && ('A' + id[1] == entry.id[1]) && ('A' + id[2] == entry.id[2]) && ('A' + id[3] == entry.id[3])) {
+			(this->*entry.callback)();
+			return;
+		}
+	}
+
+	delpointer();
+	getobtextstart();
+	findnextcolon();
+	if (al != 0) {
+		findnextcolon();
+		if (al != 0) {
+			al = es.byte(si);
+			if (al != 0) {
+				usetext();
+				cx = 400;
+				hangonp();
+				putbackobstuff();
+				return;
+			}
+		}
+	}
+
+	createpanel();
+	showpanel();
+	showman();
+	showexit();
+	obicons();
+	printmessage(33, 100, 63, 241, true);
+	worktoscreenm();
+	cx = 50;
+	hangonp();
+	putbackobstuff();
+	data.byte(kCommandtype) = 255;
+}
+
+} /*namespace dreamgen */
+






More information about the Scummvm-git-logs mailing list