[Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.131,1.132 game.cpp,1.64,1.65 interface.cpp,1.89,1.90 interface.h,1.48,1.49 render.cpp,1.57,1.58 resnames.h,1.25,1.26 saga.h,1.90,1.91 scene.cpp,1.103,1.104 scene.h,1.53,1.54 script.cpp,1.66,1.67 sfuncs.cpp,1.115,1.116 sprite.cpp,1.49,1.50

Andrew Kurushin h00ligan at users.sourceforge.net
Sun May 22 05:02:16 CEST 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1344

Modified Files:
	actor.cpp game.cpp interface.cpp interface.h render.cpp 
	resnames.h saga.h scene.cpp scene.h script.cpp sfuncs.cpp 
	sprite.cpp 
Log Message:
fixes some todo (hardcoded resource ids -> customized per game)
preparation for option dialog (wip)

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/actor.cpp,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -d -r1.131 -r1.132
--- actor.cpp	22 May 2005 01:20:46 -0000	1.131
+++ actor.cpp	22 May 2005 11:59:15 -0000	1.132
@@ -201,7 +201,7 @@
 			error("Actor::Actor(): Couldn't load actor module resource context.");
 		}
 	
-		result = RSC_LoadResource(_actorContext, RID_ITE_ACTOR_NAMES, &stringsPointer, &stringsLength); // fixme: IHNM
+		result = RSC_LoadResource(_actorContext, _vm->getResourceDescription()->actorsStringsResourceId, &stringsPointer, &stringsLength);
 		if ((result != SUCCESS) || (stringsLength == 0)) {
 			error("Error loading strings list resource");
 		}

Index: game.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/game.cpp,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -d -r1.64 -r1.65
--- game.cpp	10 May 2005 22:55:52 -0000	1.64
+++ game.cpp	22 May 2005 11:59:16 -0000	1.65
@@ -73,6 +73,12 @@
 	{kPanelButtonArrow,			257,41,	9,6,	1,'d',0,	1,5,3}, 
 };
 
+static PanelButton ITE_OptionPanelButtons[] = {
+	{kPanelButtonOption,	113,18, 45,17,	13,'r',0,	0,0,0}, //read speed
+
+	{kPanelButtonOption,	13,98, 135,17,	17,'c',0,	0,0,0}, //continue
+};
+
 static GameDisplayInfo ITE_DisplayInfo = {
 	320, 200,		// logical width&height
 	
@@ -86,6 +92,9 @@
 	2,				// status text y offset
 	186,			// status text color
 	15,				// status BG color
+	308,138,		// save reminder pos
+	12,12,			// save reminder w & h
+	6,7,			// save reminder sprite numbers
 
 	147,			// verb text color
 	15,				// verb text shadow color
@@ -105,14 +114,24 @@
 
 	0, 149,			// converse panel offsets
 	ARRAYSIZE(ITE_ConversePanelButtons),
-	ITE_ConversePanelButtons
+	ITE_ConversePanelButtons,
+	
+	8, 8,			// option panel offsets
+	ARRAYSIZE(ITE_OptionPanelButtons),
+	ITE_OptionPanelButtons
 };
 
 static GameResourceDescription ITE_Resources = {
 	RID_ITE_SCENE_LUT,  // Scene lookup table RN
 	RID_ITE_SCRIPT_LUT, // Script lookup table RN
-	RID_ITE_COMMAND_PANEL,
-	RID_ITE_DIALOGUE_PANEL
+	RID_ITE_MAIN_PANEL,
+	RID_ITE_CONVERSE_PANEL,
+	RID_ITE_OPTION_PANEL,
+	RID_ITE_MAIN_SPRITES,
+	RID_ITE_MAIN_PANEL_SPRITES,
+	RID_ITE_DEFAULT_PORTRAITS,
+	RID_ITE_MAIN_STRINGS,
+	RID_ITE_ACTOR_NAMES
 };
 
 // Inherit the Earth - DOS Demo version
@@ -225,6 +244,10 @@
 	{kPanelButtonConverseText, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
 };
 
+static PanelButton IHNM_OptionPanelButtons[] = {
+	{kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+};
+
 static GameDisplayInfo IHNM_DisplayInfo = { //TODO: fill it all
 	640, 480,	// logical width&height
 	
@@ -238,6 +261,9 @@
 	8,			// status text y offset
 	186,		// status text color
 	11,			// status BG color
+	0,0,		// save reminder pos
+	0,0,		// save reminder w&h
+	0,0,		// save reminder sprite numbers
 
 	147,		// verb text color
 	15,			// verb text shadow color
@@ -257,14 +283,24 @@
 
 	0, 0,		// converse panel offsets
 	ARRAYSIZE(IHNM_ConversePanelButtons),
-	IHNM_ConversePanelButtons
+	IHNM_ConversePanelButtons,
+	
+	0, 0,		// option panel offsets
+	ARRAYSIZE(IHNM_OptionPanelButtons),
+	IHNM_OptionPanelButtons
 };
 
 static GameResourceDescription IHNM_Resources = {
 	RID_IHNM_SCENE_LUT,  // Scene lookup table RN
 	RID_IHNM_SCRIPT_LUT, // Script lookup table RN
-	RID_IHNM_COMMAND_PANEL,
-	RID_IHNM_DIALOGUE_PANEL
+	RID_IHNM_MAIN_PANEL,
+	RID_IHNM_CONVERSE_PANEL,
+	0,
+	0,
+	0,
+	0,
+	0,
+	0
 };
 
 // I Have No Mouth and I Must Scream - Demo version

Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -d -r1.89 -r1.90
--- interface.cpp	15 May 2005 17:45:59 -0000	1.89
+++ interface.cpp	22 May 2005 11:59:16 -0000	1.90
@@ -107,11 +107,23 @@
 		&_conversePanel.imageLength, &_conversePanel.imageWidth, &_conversePanel.imageHeight);
 	RSC_FreeResource(resource);
 
-	if (_vm->_sprite->loadList(RID_ITE_COMMAND_BUTTONSPRITES, _mainPanel.sprites) != SUCCESS) { //TODO: move constant to ResourceDescription
+	_optionPanel.buttons = _vm->getDisplayInfo().optionPanelButtons;
+	_optionPanel.buttonsCount = _vm->getDisplayInfo().optionPanelButtonsCount;
+
+	result = RSC_LoadResource(_interfaceContext, _vm->getResourceDescription()->optionPanelResourceId, &resource, &resourceLength);
+	if ((result != SUCCESS) || (resourceLength == 0)) {
+		error("Interface::Interface unable to load optionPanel resource");
+	}
+	_vm->decodeBGImage(resource, resourceLength, &_optionPanel.image,
+		&_optionPanel.imageLength, &_optionPanel.imageWidth, &_optionPanel.imageHeight);
+	RSC_FreeResource(resource);
+
+
+	if (_vm->_sprite->loadList(_vm->getResourceDescription()->mainPanelSpritesResourceId, _mainPanel.sprites) != SUCCESS) {
 		error("Interface::Interface(): Unable to load sprite list");
 	}
 		
-	if (_vm->_sprite->loadList(RID_ITE_DEFAULT_PORTRAITS, _defPortraits) != SUCCESS) { //TODO: move constant to ResourceDescription
+	if (_vm->_sprite->loadList(_vm->getResourceDescription()->defaultPortraitsResourceId, _defPortraits) != SUCCESS) {
 		error("Interface::Interface(): Unable to load sprite list");
 	}
 
@@ -132,6 +144,10 @@
 	_leftPortrait = 0;
 	_rightPortrait = 0;
 
+	_optionPanel.x = _vm->getDisplayInfo().optionPanelXOffset;
+	_optionPanel.y = _vm->getDisplayInfo().optionPanelYOffset;
+	_optionPanel.currentButton = NULL;
+
 	_active = false;
 	_panelMode = _lockedMode = kPanelNull;
 	_savedMode = -1;
@@ -145,6 +161,7 @@
 	_inventoryEnd = 0;
 	_inventoryBox = 0;
 	_inventorySize = ITE_INVENTORY_SIZE;
+	_saveReminderState = 0;
 
 	_inventory = (uint16 *)calloc(_inventorySize, sizeof(uint16));
 	if (_inventory == NULL) {
@@ -170,8 +187,9 @@
 		_vm->_actor->_protagonist->targetObject = ID_NOTHING;
 		_vm->_gfx->showCursor(true);
 		unlockMode();
-		if (_panelMode == kPanelMain)
-			;// show save reminder
+		if (_panelMode == kPanelMain){
+			_saveReminderState = 1;
+		}
 		draw();
 	}
 
@@ -204,27 +222,27 @@
 	draw();
 }
 
-int Interface::setMode(int mode, bool force) {
+void Interface::setMode(int mode, bool force) {
 	// TODO: Is this where we should hide/show the mouse cursor?
-	int newMode = mode;
 
-	if (mode == kPanelConverse) {
-		_inMainMode = false;
+	if (mode == kPanelMain) {
+		_inMainMode = true;
+		_saveReminderState = 1; //TODO: blinking timeout
 	} else {
-		if (mode == kPanelInventory) {
-			_inMainMode = true;
-			newMode = kPanelMain;
-		}
+		if (mode == kPanelConverse) {
+			_inMainMode = false;
+		}		
+		_saveReminderState = 0;
 	}
 
 	// This lets us to prevents actors to pop up during initial
 	// scene fade in.
 	if (_savedMode != -1 && !force) {
-		_savedMode = newMode;
-		debug(0, "Saved mode: %d. my mode is %d", newMode, _panelMode);
+		_savedMode = mode;
+		debug(0, "Saved mode: %d. my mode is %d", mode, _panelMode);
 	}
 	else
-		_panelMode = newMode;
+		_panelMode = mode;
 	
 	if (_panelMode == kPanelMain) {
 		_mainPanel.currentButton = NULL;
@@ -232,12 +250,14 @@
 		if (_panelMode == kPanelConverse) {
 			_conversePanel.currentButton = NULL;
 			converseDisplayText();
-		}
+		} else {
+			if (_panelMode == kPanelOption) {
+				_optionPanel.currentButton = NULL;
+			}
+		}		
 	}
 
 	draw();
-
-	return SUCCESS;
 }
 
 bool Interface::processKeyCode(int keyCode) {
@@ -254,6 +274,16 @@
 			return true;
 		}
 		break;
+	case kPanelOption:
+		//TODO: check input dialog keys
+		for (i = 0; i < _optionPanel.buttonsCount; i++) {
+			panelButton = &_optionPanel.buttons[i];
+			if (panelButton->keyChar == keyCode) {
+				setOption(panelButton);				
+				return true;
+			}
+		}
+		break;
 	case kPanelMain:
 		for (i = 0; i < _mainPanel.buttonsCount; i++) {
 			panelButton = &_mainPanel.buttons[i];
@@ -271,7 +301,7 @@
 	case kPanelConverse:
 		switch (keyCode) {
 		case 'x':
-			setMode(kPanelInventory);
+			setMode(kPanelMain);
 			// FIXME: puzzle
 			break;
 
@@ -310,20 +340,6 @@
 	return _vm->_sprite->loadList(resourceId, _scenePortraits);
 }
 
-int Interface::setLeftPortrait(int portrait) {
-	_leftPortrait = portrait;
-	draw();
-
-	return SUCCESS;
-}
-
-int Interface::setRightPortrait(int portrait) {
-	_rightPortrait = portrait;
-	draw();
-
-	return SUCCESS;
-}
-
 void Interface::drawVerbPanel(SURFACE *backBuffer, PanelButton* panelButton) {
 	PanelButton * rightButtonVerbPanelButton;
 	PanelButton * currentVerbPanelButton;
@@ -354,10 +370,10 @@
 
 	_vm->_sprite->draw(backBuffer, _mainPanel.sprites, spriteNumber, point, 256);
 
-	drawPanelButtonText(backBuffer, &_mainPanel, panelButton, textColor, _vm->getDisplayInfo().verbTextShadowColor);
+	drawVerbPanelText(backBuffer, panelButton, textColor, _vm->getDisplayInfo().verbTextShadowColor);
 }
 
-int Interface::draw() {
+void Interface::draw() {
 	SURFACE *backBuffer;
 	int i;
 
@@ -368,7 +384,7 @@
 	backBuffer = _vm->_gfx->getBackBuffer();
 
 	if (_vm->_scene->isInDemo() || _panelMode == kPanelFade)
-		return SUCCESS;
+		return;
 
 
 	drawStatusBar();
@@ -405,7 +421,7 @@
 		}
 		
 
-	if (!_inMainMode && _vm->getDisplayInfo().rightPortraitXOffset >= 0) {
+	if (!_inMainMode && _vm->getDisplayInfo().rightPortraitXOffset >= 0) { //FIXME: should we change !_inMainMode to _panelMode == kPanelConverse ?
 		rightPortraitPoint.x = _mainPanel.x + _vm->getDisplayInfo().rightPortraitXOffset;
 		rightPortraitPoint.y = _mainPanel.y + _vm->getDisplayInfo().rightPortraitYOffset;
 
@@ -421,27 +437,67 @@
 	}
 
 	drawInventory(backBuffer);
-	return SUCCESS;
 }
 
-int Interface::update(const Point& mousePoint, int updateFlag) {
+void Interface::drawOption() {
+	SURFACE *backBuffer;
+	int i;
+	Point origin;
+
+	backBuffer = _vm->_gfx->getBackBuffer();
+	origin.x = _vm->getDisplayInfo().optionPanelXOffset;
+	origin.y = _vm->getDisplayInfo().optionPanelYOffset;
+
+	bufToSurface(backBuffer, _optionPanel.image, _optionPanel.imageWidth, _optionPanel.imageHeight, NULL, &origin);
+
+	for (i = 0; i < _optionPanel.buttonsCount; i++) {		
+		drawOptionPanelButtonText(backBuffer, &_optionPanel.buttons[i]);
+	}
+}
+
+void Interface::handleOptionUpdate(const Point& mousePoint) {
+	_optionPanel.currentButton = optionHitTest(mousePoint);	
+}
+
+
+void Interface::handleOptionClick(const Point& mousePoint) {
+	_optionPanel.currentButton = optionHitTest(mousePoint);
+
+	if (_optionPanel.currentButton == NULL) {
+		return;
+	}
+
+	setOption(_optionPanel.currentButton); //TODO: do it on mouse up
+}
+
+
+void Interface::setOption(PanelButton *panelButton) {
+	switch (panelButton->keyChar) {
+		case 'c':
+				setMode(kPanelMain);
+				break;
+	}
+}
+
+void Interface::update(const Point& mousePoint, int updateFlag) {
 	
-	if (_vm->_scene->isInDemo() || _panelMode == kPanelFade)
-		return SUCCESS;
+	if (_vm->_scene->isInDemo() || _panelMode == kPanelFade) {
+		return;
+	}
 
 	if (_panelMode == kPanelMain) {
 		if (updateFlag & UPDATE_MOUSEMOVE) {
 			bool lastWasPlayfield = _lastMousePoint.y < _vm->getSceneHeight();
 			if (mousePoint.y < _vm->getSceneHeight()) {
 				if (!lastWasPlayfield) {
-					handleCommandUpdate(mousePoint);
+					handleMainUpdate(mousePoint);
 				}
 				_vm->_script->whichObject(mousePoint);
 			} else {
 				if (lastWasPlayfield) {
 					_vm->_script->setNonPlayfieldVerb();
 				}
-				handleCommandUpdate(mousePoint);
+				handleMainUpdate(mousePoint);
 			}
 
 		} else {
@@ -450,7 +506,7 @@
 				if (mousePoint.y < _vm->getSceneHeight()) {
 					_vm->_script->playfieldClick(mousePoint, (updateFlag & UPDATE_LEFTBUTTONCLICK) != 0);										
 				} else {
-					handleCommandClick(mousePoint);
+					handleMainClick(mousePoint);
 				}
 			}
 		}
@@ -468,8 +524,20 @@
 		}
 	}
 
+	if (_panelMode == kPanelOption) {
+		if (updateFlag & UPDATE_MOUSEMOVE) {
+
+			handleOptionUpdate(mousePoint);
+
+		} else {
+			if (updateFlag & UPDATE_MOUSECLICK) {
+				handleOptionClick(mousePoint);
+			}
+		}
+	}
+
+
 	_lastMousePoint = mousePoint;
-	return SUCCESS;
 }
 
 void Interface::drawStatusBar() {
@@ -507,9 +575,20 @@
 	_vm->_font->draw(SMALL_FONT_ID, backBuffer, _statusText, 0, _vm->getDisplayInfo().statusXOffset + (_vm->getDisplayInfo().statusWidth / 2) - (string_w / 2),
 			_vm->getDisplayInfo().statusYOffset + _vm->getDisplayInfo().statusTextY, color, 0, 0);
 
+	if (_saveReminderState > 0) {
+		rect.left = _vm->getDisplayInfo().saveReminderXOffset;
+		rect.top = _vm->getDisplayInfo().saveReminderYOffset;
+	
+		rect.right = rect.left + _vm->getDisplayInfo().saveReminderWidth;
+		rect.bottom = rect.top + _vm->getDisplayInfo().saveReminderHeight;
+		_vm->_sprite->draw(backBuffer, _vm->_sprite->_mainSprites, 
+			_saveReminderState == 1 ? _vm->getDisplayInfo().saveReminderFirstSpriteNumber : _vm->getDisplayInfo().saveReminderSecondSpriteNumber,
+			rect, 256);
+
+	}
 }
 
-void Interface::handleCommandClick(const Point& mousePoint) {
+void Interface::handleMainClick(const Point& mousePoint) {
 
 	PanelButton *panelButton;
 
@@ -536,10 +615,22 @@
 				_vm->_script->doVerb();
 			}
 		}		
+	} else {
+		if (_saveReminderState > 0) {
+			Rect rect;
+			rect.left = _vm->getDisplayInfo().saveReminderXOffset;
+			rect.top = _vm->getDisplayInfo().saveReminderYOffset;
+
+			rect.right = rect.left + _vm->getDisplayInfo().saveReminderWidth;
+			rect.bottom = rect.top + _vm->getDisplayInfo().saveReminderHeight;
+			if (rect.contains(mousePoint)) {
+				setMode(kPanelOption);
+			}
+		}
 	}
 }
 
-void Interface::handleCommandUpdate(const Point& mousePoint) {
+void Interface::handleMainUpdate(const Point& mousePoint) {
 	PanelButton *panelButton;
 
 	panelButton = verbHitTest(mousePoint);
@@ -589,22 +680,6 @@
 
 }
 
-PanelButton *Interface::verbHitTest(const Point& mousePoint) {
-	PanelButton *panelButton;
-	Rect rect;
-	int i;
-	for (i = 0; i < kVerbTypesMax; i++) {
-		panelButton = _verbTypeToPanelButton[i];
-		if (panelButton != NULL) {
-			_mainPanel.calcPanelButtonRect(panelButton, rect);
-			if (rect.contains(mousePoint))
-				return panelButton;
-		}
-	}
-
-	return NULL;
-}
-
 //inventory stuff
 void Interface::inventoryChangePos(int chg) {
 	if ((chg < 0 && _inventoryStart + chg >= 0) ||
@@ -737,6 +812,31 @@
 	draw();
 }
 
+void Interface::drawOptionPanelButtonText(SURFACE *ds, PanelButton *panelButton) {
+	const char *text;
+	int textWidth;
+	int textHeight;
+	Point point;
+	int textColor;
+//TODO: draw box!
+
+	text = _vm->getTextString(panelButton->id);
+
+	textWidth = _vm->_font->getStringWidth(MEDIUM_FONT_ID, text, 0, 0);
+	textHeight = _vm->_font->getHeight(MEDIUM_FONT_ID);
+
+	point.x = _optionPanel.x + panelButton->xOffset + (panelButton->width / 2) - (textWidth / 2);
+	point.y = _optionPanel.y + panelButton->yOffset + (panelButton->height / 2) - (textHeight / 2);
+
+	if (panelButton == _optionPanel.currentButton) {
+		textColor = _vm->getDisplayInfo().verbTextActiveColor; //TODO: create Option button colors constant
+	} else {
+		textColor = _vm->getDisplayInfo().verbTextColor; //TODO: create Option button colors constant
+	}
+
+	_vm->_font->draw(MEDIUM_FONT_ID, ds, text, 0, point.x , point.y, textColor, _vm->getDisplayInfo().verbTextShadowColor, FONT_SHADOW);	 //TODO: create Option button colors constant
+}
+
 void Interface::drawPanelButtonArrow(SURFACE *ds, InterfacePanel *panel, PanelButton *panelButton) {
 	Point point;
 	int spriteNumber;
@@ -757,7 +857,7 @@
 	_vm->_sprite->draw(ds, _vm->_sprite->_mainSprites, spriteNumber, point, 256);
 }
 
-void Interface::drawPanelButtonText(SURFACE *ds, InterfacePanel *panel, PanelButton *panelButton, int textColor, int textShadowColor) {
+void Interface::drawVerbPanelText(SURFACE *ds, PanelButton *panelButton, int textColor, int textShadowColor) {
 	const char *text;
 	int textWidth;
 	Point point;
@@ -769,12 +869,11 @@
 		error("textId == -1");
 
 	text = _vm->getTextString(textId);
-
 	
 	textWidth = _vm->_font->getStringWidth(SMALL_FONT_ID, text, 0, 0);
 
-	point.x = panel->x + panelButton->xOffset + (panelButton->width / 2) - (textWidth / 2);
-	point.y = panel->y + panelButton->yOffset + 1;
+	point.x = _mainPanel.x + panelButton->xOffset + (panelButton->width / 2) - (textWidth / 2);
+	point.y = _mainPanel.y + panelButton->yOffset + 1;
 
 	_vm->_font->draw(SMALL_FONT_ID, ds, text, 0, point.x , point.y, textColor, textShadowColor, (textShadowColor != 0) ? FONT_SHADOW : 0);
 }

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -d -r1.48 -r1.49
--- interface.h	12 May 2005 17:00:08 -0000	1.48
+++ interface.h	22 May 2005 11:59:16 -0000	1.49
@@ -65,7 +65,7 @@
 	kPanelProtect,
 	kPanelPlacard,
 	kPanelMap,
-	kPanelInventory,
+//	kPanelInventory,
 	kPanelFade
 };
 
@@ -148,18 +148,29 @@
 
 	int activate();
 	int deactivate();
+	void setSaveReminderState(int state) {
+		_saveReminderState = state;
+		draw();
+	}
 	bool isActive() { return _active; }
-	int setMode(int mode, bool force = false);
+	void setMode(int mode, bool force = false);
 	int getMode(void) const { return _panelMode; }
 	void rememberMode();
 	void restoreMode();
 	bool isInMainMode() { return _inMainMode; }
 	void setStatusText(const char *text, int statusColor = -1);
 	int loadScenePortraits(int resourceId);
-	int setLeftPortrait(int portrait);
-	int setRightPortrait(int portrait);
-	int draw();
-	int update(const Point& mousePoint, int updateFlag);
+	void setLeftPortrait(int portrait) {
+		_leftPortrait = portrait;
+		draw();
+	}
+	void setRightPortrait(int portrait) {
+		_rightPortrait = portrait;
+		draw();
+	}
+	void draw();
+	void drawOption();
+	void update(const Point& mousePoint, int updateFlag);
 	void drawStatusBar();
 	void setVerbState(int verb, int state);
 
@@ -191,23 +202,34 @@
 	PanelButton *inventoryHitTest(const Point& mousePoint) {
 		return _mainPanel.hitTest(mousePoint, kPanelButtonInventory);
 	}
+	PanelButton *verbHitTest(const Point& mousePoint){
+		return _mainPanel.hitTest(mousePoint, kPanelButtonVerb);
+	}
 	void saveState(Common::File& out);
 	void loadState(Common::File& in);
 private:
-	PanelButton *verbHitTest(const Point& mousePoint);
-	void handleCommandUpdate(const Point& mousePoint);
-	void handleCommandClick(const Point& mousePoint);
+	void handleMainUpdate(const Point& mousePoint);					// main panel update
+	void handleMainClick(const Point& mousePoint);					// main panel click
+
 	PanelButton *converseHitTest(const Point& mousePoint) {
 		return _conversePanel.hitTest(mousePoint, kPanelAllButtons);
 	}
-	void handleConverseUpdate(const Point& mousePoint);
-	void handleConverseClick(const Point& mousePoint);
-	
+	void handleConverseUpdate(const Point& mousePoint);				// converse panel update
+	void handleConverseClick(const Point& mousePoint);				// converse panel click
+
+	PanelButton *optionHitTest(const Point& mousePoint) {
+		return _optionPanel.hitTest(mousePoint, kPanelAllButtons);
+	}
+	void handleOptionUpdate(const Point& mousePoint);				// option panel update
+	void handleOptionClick(const Point& mousePoint);				// option panel click
+
 	void lockMode() { _lockedMode = _panelMode; }
 	void unlockMode() { _panelMode = _lockedMode; }
 
-	void drawPanelButtonText(SURFACE *ds, InterfacePanel *panel, PanelButton *panelButton, int textColor, int textShadowColor);
+	void setOption(PanelButton *panelButton);
+	void drawOptionPanelButtonText(SURFACE *ds, PanelButton *panelButton);
 	void drawPanelButtonArrow(SURFACE *ds, InterfacePanel *panel, PanelButton *panelButton);
+	void drawVerbPanelText(SURFACE *ds, PanelButton *panelButton, int textColor, int textShadowColor);
 	void drawVerbPanel(SURFACE *backBuffer, PanelButton* panelButton);
 
 public:
@@ -241,7 +263,9 @@
 	SpriteList _defPortraits;
 	SpriteList _scenePortraits;
 	PanelButton *_verbTypeToPanelButton[kVerbTypesMax];
+	InterfacePanel _optionPanel;
 
+	int _saveReminderState;
 	bool _active;
 	int _panelMode;
 	int _savedMode;

Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- render.cpp	18 May 2005 18:28:09 -0000	1.57
+++ render.cpp	22 May 2005 11:59:21 -0000	1.58
@@ -97,8 +97,6 @@
 
 int Render::drawScene() {
 	SURFACE *backbuf_surface;
-	SCENE_BGINFO bg_info;
-	Point bg_pt;
 	char txt_buf[20];
 	int fps_width;
 	Point mouse_pt;
@@ -114,17 +112,11 @@
 	// Get mouse coordinates
 	mouse_pt = _vm->mousePos();
 
-	_vm->_scene->getBGInfo(&bg_info);
-	bg_pt.x = 0;
-	bg_pt.y = 0;
-
 	if (!(_flags & RF_PLACARD)) {
 		// Display scene background
-		_vm->_scene->draw(backbuf_surface);
+		_vm->_scene->draw();
 
 		if (_vm->_interface->getMode() != kPanelFade) {
-			// Display scene maps, if applicable
-
 			// Draw queued actors
 			_vm->_actor->drawActors();
 			if (getFlags() & RF_OBJECTMAP_TEST) {
@@ -139,6 +131,10 @@
 		}
 	}
 
+	if (_vm->_interface->getMode() == kPanelOption) {
+		_vm->_interface->drawOption();
+	}
+
 	// Draw queued text strings
 	_vm->textDrawList(_vm->_scene->_textList, backbuf_surface);
 

Index: resnames.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/resnames.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- resnames.h	8 Mar 2005 10:59:31 -0000	1.25
+++ resnames.h	22 May 2005 11:59:21 -0000	1.26
@@ -55,19 +55,19 @@
 #define RID_SMALL_FONT 2
 
 // INTERFACE IMAGES
-#define RID_ITE_COMMAND_PANEL 3
-#define RID_ITE_DIALOGUE_PANEL 4
-
-#define RID_IHNM_COMMAND_PANEL  9
-#define RID_IHNM_DIALOGUE_PANEL 10
-
-#define RID_ITE_SETUP_PANEL 5
+#define RID_ITE_MAIN_PANEL 3
+#define RID_ITE_CONVERSE_PANEL 4
+#define RID_ITE_OPTION_PANEL 5
 #define RID_ITE_MAIN_SPRITES 6
+#define RID_ITE_MAIN_PANEL_SPRITES 7
 #define RID_ITE_MAIN_STRINGS 35 //main strings
 #define RID_ITE_ACTOR_NAMES 36 //actors names
-#define RID_ITE_COMMAND_BUTTONSPRITES 7
 #define RID_ITE_DEFAULT_PORTRAITS 125
 
+#define RID_IHNM_MAIN_PANEL  9
+#define RID_IHNM_CONVERSE_PANEL 10
+
+
 // ITE Scene resource numbers
 #define RID_ITE_OVERMAP_SCENE 226
 #define RID_ITE_INTRO_ANIM_SCENE 1538

Index: saga.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/saga.h,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -d -r1.90 -r1.91
--- saga.h	15 May 2005 14:46:13 -0000	1.90
+++ saga.h	22 May 2005 11:59:21 -0000	1.91
@@ -144,7 +144,9 @@
 	kPanelButtonArrow = 2,
 	kPanelButtonConverseText = 4,
 	kPanelButtonInventory = 8,
-	kPanelAllButtons = 15
+	kPanelButtonOption = 0x10,
+	kPanelButtonReserved2 = 0x20,
+	kPanelAllButtons = 0xFFFFF
 };
 
 enum TextStringIds {
@@ -295,10 +297,16 @@
 };
 
 struct GameResourceDescription {
-	uint32 scene_lut_rn;
+	uint32 sceneLUTResourceId;
 	uint32 moduleLUTResourceId;
 	uint32 mainPanelResourceId;
 	uint32 conversePanelResourceId;
+	uint32 optionPanelResourceId;
+	uint32 mainSpritesResourceId;
+	uint32 mainPanelSpritesResourceId;
+	uint32 defaultPortraitsResourceId;
+	uint32 mainStringsResourceId;
+	uint32 actorsStringsResourceId;
 };
 
 struct GameFileDescription {
@@ -334,6 +342,13 @@
 	int statusTextY;
 	int statusTextColor;
 	int statusBGColor;
+	
+	int saveReminderXOffset;
+	int saveReminderYOffset;
+	int saveReminderWidth;
+	int saveReminderHeight;
+	int saveReminderFirstSpriteNumber;
+	int saveReminderSecondSpriteNumber;
 
 	int verbTextColor;
 	int verbTextShadowColor;
@@ -361,6 +376,11 @@
 	int conversePanelYOffset;
 	int conversePanelButtonsCount;
 	PanelButton *conversePanelButtons;
+
+	int optionPanelXOffset;
+	int optionPanelYOffset;
+	int optionPanelButtonsCount;
+	PanelButton *optionPanelButtons;
 };
 
 

Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -d -r1.103 -r1.104
--- scene.cpp	18 May 2005 18:28:09 -0000	1.103
+++ scene.cpp	22 May 2005 11:59:21 -0000	1.104
@@ -65,8 +65,8 @@
 
 
 	// Load scene lookup table
-	debug(0, "Loading scene LUT from resource %u.", RSC_ConvertID(_vm->getResourceDescription()->scene_lut_rn));
-	result = RSC_LoadResource(_sceneContext, RSC_ConvertID(_vm->getResourceDescription()->scene_lut_rn), &scene_lut_p, &scene_lut_len);
+	debug(0, "Loading scene LUT from resource %u.", RSC_ConvertID(_vm->getResourceDescription()->sceneLUTResourceId));
+	result = RSC_LoadResource(_sceneContext, RSC_ConvertID(_vm->getResourceDescription()->sceneLUTResourceId), &scene_lut_p, &scene_lut_len);
 	if (result != SUCCESS) {
 		warning("Scene::Scene(): Error: couldn't load scene LUT");
 		return;
@@ -539,7 +539,7 @@
 	if (loadSceneParams->sceneProc == NULL) {
 		if (!_inGame) {
 			_inGame = true;
-			_vm->_interface->setMode(kPanelInventory);
+			_vm->_interface->setMode(kPanelMain);
 		}
 
 		_vm->_sound->stopVoice();
@@ -843,23 +843,24 @@
 	return SUCCESS;
 }
 
-int Scene::draw(SURFACE *dst_s) {
+void Scene::draw() {
+	SURFACE *backBuffer;
 	BUFFER_INFO buf_info;
 	Point bgPoint(0, 0);
 
 	assert(_initialized);
 
+	backBuffer = _vm->_gfx->getBackBuffer();
+
 	_vm->_render->getBufferInfo(&buf_info);
 
 	if (_sceneDescription.flags & kSceneFlagISO) {
 		_vm->_isoMap->adjustScroll(false);
-		_vm->_isoMap->draw(dst_s);
+		_vm->_isoMap->draw(backBuffer);
 	} else {
-		bufToSurface(dst_s, buf_info.bg_buf, _vm->getDisplayWidth(),
+		bufToSurface(backBuffer, buf_info.bg_buf, _vm->getDisplayWidth(),
 						MAX(_vm->getSceneHeight(), _bg.h), NULL, &bgPoint);
 	}
-
-	return SUCCESS;
 }
 
 void Scene::endScene() {

Index: scene.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- scene.h	18 May 2005 18:28:09 -0000	1.53
+++ scene.h	22 May 2005 11:59:21 -0000	1.54
@@ -232,7 +232,7 @@
 		_sceneQueue.push_back(*sceneQueue);
 	}
 
-	int draw(SURFACE *);
+	void draw();
 	int getFlags() const { return _sceneDescription.flags; }
 	int getScriptModuleNumber() const { return _sceneDescription.scriptModuleNumber; }
 	bool isInDemo() { return !_inGame; }

Index: script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/script.cpp,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -d -r1.66 -r1.67
--- script.cpp	15 May 2005 17:45:59 -0000	1.66
+++ script.cpp	22 May 2005 11:59:21 -0000	1.67
@@ -139,7 +139,7 @@
 
 	RSC_FreeResource(resourcePointer);
 	
-	result = RSC_LoadResource(resourceContext, RID_ITE_MAIN_STRINGS, &stringsPointer, &stringsLength); // fixme: IHNM
+	result = RSC_LoadResource(resourceContext, _vm->getResourceDescription()->mainStringsResourceId, &stringsPointer, &stringsLength); // fixme: IHNM
 	if ((result != SUCCESS) || (stringsLength == 0)) {
 		error("Error loading strings list resource");
 	}

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -d -r1.115 -r1.116
--- sfuncs.cpp	22 May 2005 01:20:47 -0000	1.115
+++ sfuncs.cpp	22 May 2005 11:59:21 -0000	1.116
@@ -220,7 +220,7 @@
 	_vm->_actor->_centerActor = _vm->_actor->_protagonist;
 	showVerb();		
 	_vm->_interface->activate();
-	_vm->_interface->setMode(kPanelInventory);
+	_vm->_interface->setMode(kPanelMain);
 	setPointerVerb();
 }
 

Index: sprite.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sprite.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- sprite.cpp	8 May 2005 21:49:44 -0000	1.49
+++ sprite.cpp	22 May 2005 11:59:22 -0000	1.50
@@ -52,7 +52,7 @@
 		return;
 	}
 
-	loadList(RID_ITE_MAIN_SPRITES, _mainSprites); //fixme: IHNM may have no such list
+	loadList(_vm->getResourceDescription()->mainSpritesResourceId, _mainSprites);
 
 	_initialized = true;
 }





More information about the Scummvm-git-logs mailing list