aboutsummaryrefslogtreecommitdiff
path: root/engines/agi
diff options
context:
space:
mode:
authorMatthew Hoops2007-09-06 23:45:32 +0000
committerMatthew Hoops2007-09-06 23:45:32 +0000
commitae0ff88bda70b492e60fd476419baee7fd2c2a48 (patch)
tree22afccc3356ae2277f1034527438c37bc93cfb7b /engines/agi
parent4a467ee492e857a19b6fcc8eb75dc83683cde913 (diff)
downloadscummvm-rg350-ae0ff88bda70b492e60fd476419baee7fd2c2a48.tar.gz
scummvm-rg350-ae0ff88bda70b492e60fd476419baee7fd2c2a48.tar.bz2
scummvm-rg350-ae0ff88bda70b492e60fd476419baee7fd2c2a48.zip
enable inventory in Winnie
svn-id: r28872
Diffstat (limited to 'engines/agi')
-rw-r--r--engines/agi/preagi_winnie.cpp54
-rw-r--r--engines/agi/preagi_winnie.h5
2 files changed, 55 insertions, 4 deletions
diff --git a/engines/agi/preagi_winnie.cpp b/engines/agi/preagi_winnie.cpp
index d7f19c062c..006b715fdc 100644
--- a/engines/agi/preagi_winnie.cpp
+++ b/engines/agi/preagi_winnie.cpp
@@ -65,6 +65,18 @@ void Winnie::readRoom(int iRoom, uint8 *buffer, int buflen) {
file.close();
}
+void Winnie::readObj(int iObj, uint8 *buffer, int buflen) {
+ char szFile[256] = {0};
+ sprintf(szFile, IDS_WTP_PATH_OBJ, iObj);
+ Common::File file;
+ if (!file.open(szFile))
+ return;
+ uint32 filelen = file.size();
+ memset(buffer, 0, sizeof(buffer));
+ file.read(buffer, filelen);
+ file.close();
+}
+
void Winnie::randomize() {
int iObj = 0;
int iRoom = 0;
@@ -362,6 +374,42 @@ int Winnie::parser(int pc, int index, uint8 *buffer) {
}
}
+void Winnie::keyHelp() {
+ //Winnie_PlaySound(IDI_WTP_SND_KEYHELP);
+ _vm->printStr(IDS_WTP_HELP_0);
+ _vm->waitAnyKeyChoice();
+ _vm->printStr(IDS_WTP_HELP_1);
+ _vm->waitAnyKeyChoice();
+}
+
+void Winnie::inventory() {
+ char szMissing[41] = {0};
+
+ if (game.iObjHave)
+ printObjStr(game.iObjHave, IDI_WTP_OBJ_TAKE);
+ else {
+ _vm->clearTextArea();
+ _vm->drawStr(IDI_WTP_ROW_MENU, IDI_WTP_COL_MENU, IDA_DEFAULT, IDS_WTP_INVENTORY_0);
+ }
+
+ sprintf(szMissing, IDS_WTP_INVENTORY_1, game.nObjMiss);
+ _vm->drawStr(IDI_WTP_ROW_OPTION_4, IDI_WTP_COL_MENU, IDA_DEFAULT, szMissing);
+ _vm->_gfx->doUpdate();
+ _vm->_system->updateScreen();
+ _vm->waitAnyKeyChoice();
+}
+
+void Winnie::printObjStr(int iObj, int iStr) {
+ WTP_OBJ_HDR hdr;
+ uint8 *buffer = (uint8 *)malloc(2048);
+
+ readObj(iObj, buffer, 2048);
+ memcpy(&hdr, buffer, sizeof(hdr));
+ _vm->printStrXOR((char *)(buffer + hdr.ofsStr[iStr] - IDI_WTP_OFS_OBJ));
+
+ free(buffer);
+}
+
void Winnie::drawMenu(char *szMenu, int iSel, int fCanSel[]) {
int iRow = 0, iCol = 0;
@@ -504,7 +552,7 @@ void Winnie::getMenuSel(char *szMenu, int *iSel, int fCanSel[]) {
*iSel = IDI_WTP_SEL_BACK;
return;
case Common::KEYCODE_c:
- //Winnie_Inventory();
+ inventory();
break;
case Common::KEYCODE_SPACE:
case Common::KEYCODE_RIGHT:
@@ -522,7 +570,7 @@ void Winnie::getMenuSel(char *szMenu, int *iSel, int fCanSel[]) {
if (fCanSel[*iSel + IDI_WTP_SEL_REAL_OPT_1]) {
return;
} else {
- //Winnie_KeyHelp();
+ keyHelp();
clrMenuSel(iSel, fCanSel);
}
break;
@@ -573,7 +621,7 @@ void Winnie::getMenuSel(char *szMenu, int *iSel, int fCanSel[]) {
break;
}
default:
- //Winnie_KeyHelp();
+ keyHelp();
clrMenuSel(iSel, fCanSel);
break;
}
diff --git a/engines/agi/preagi_winnie.h b/engines/agi/preagi_winnie.h
index 3965212408..aadbc9e801 100644
--- a/engines/agi/preagi_winnie.h
+++ b/engines/agi/preagi_winnie.h
@@ -318,12 +318,15 @@ private:
int getObjInRoom(int);
bool getSelOkBack();
void getMenuSel(char*, int*, int[]);
- void keyHelp() {}
+ void keyHelp();
void clrMenuSel(int*, int[]);
void incMenuSel(int*, int[]);
void decMenuSel(int*, int[]);
void drawMenu(char*, int, int[]);
void printRoomStr(int, int);
+ void inventory();
+ void printObjStr(int, int);
+ void readObj(int, uint8*, int);
};
}