/* 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(); uint8 *obText = getobtextstartCPP(); if (findnextcolon(&obText) != 0) { if (findnextcolon(&obText) != 0) { if (*obText != 0) { usetext(obText); hangonp(400); putbackobstuff(); return; } } } createpanel(); showpanel(); showman(); showexit(); obicons(); printmessage(33, 100, 63, 241, true); worktoscreenm(); hangonp(50); putbackobstuff(); data.byte(kCommandtype) = 255; } void DreamGenContext::usetext() { usetext(es.ptr(si, 0)); } void DreamGenContext::usetext(const uint8 *string) { createpanel(); showpanel(); showman(); showexit(); obicons(); printdirect(string, 36, 104, 241, true); worktoscreenm(); } } /*namespace dreamgen */