[Scummvm-cvs-logs] CVS: scummvm/kyra kyra.cpp,1.103,1.104 kyra.h,1.58,1.59 script_v1.cpp,1.53,1.54 staticres.cpp,1.31,1.32

Johannes Schickel lordhoto at users.sourceforge.net
Sat Dec 31 09:26:06 CET 2005


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

Modified Files:
	kyra.cpp kyra.h script_v1.cpp staticres.cpp 
Log Message:
Implemented:
 - cmd_drinkPotionAnimation
 - cmd_fillFlaskWithWater
 - cmd_getIdolGem
 - cmd_itemOnGroundHere
 - cmd_queryCrystalState
 - cmd_setCrystalState
 - cmd_setBrandonScaleXAndY
 - cmd_resetScaleMode
 - cmd_getScaleDepthTableValue
 - cmd_setScaleDepthTableValue
 - cmd_brandonHealingSequence


Index: kyra.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.cpp,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -d -r1.103 -r1.104
--- kyra.cpp	31 Dec 2005 15:41:37 -0000	1.103
+++ kyra.cpp	31 Dec 2005 17:25:47 -0000	1.104
@@ -189,9 +189,18 @@
 	_itemList_Size = _takenList_Size = _placedList_Size = _droppedList_Size = _noDropList_Size = 0;
 	_putDownFirst = _waitForAmulet = _blackJewel = _poisonGone = _healingTip = 0;
 	_putDownFirst_Size = _waitForAmulet_Size = _blackJewel_Size = _poisonGone_Size = _healingTip_Size = 0;
+	_thePoison = _fluteString = _wispJewelStrings = _magicJewelString = _flaskFull = _fullFlask = 0;
+	_thePoison_Size = _fluteString_Size = _wispJewelStrings_Size = 0;
+	_magicJewelString_Size = _flaskFull_Size = _fullFlask_Size = 0;
 	
 	_defaultShapeTable = _healingShapeTable = _healingShape2Table = 0;
 	_defaultShapeTableSize = _healingShapeTableSize = _healingShape2TableSize = 0;
+	_posionDeathShapeTable = _fluteAnimShapeTable = 0;
+	_posionDeathShapeTableSize = _fluteAnimShapeTableSize = 0;
+	_winterScrollTable = _winterScroll1Table = _winterScroll2Table = 0;
+	_winterScrollTableSize = _winterScroll1TableSize = _winterScroll2TableSize = 0;
+	_drinkAnimationTable = _brandonToWispTable = _magicAnimationTable = _brandonStoneTable = 0;
+	_drinkAnimationTableSize = _brandonToWispTableSize = _magicAnimationTableSize = _brandonStoneTableSize = 0;
 
 	// Setup mixer
 	if (!_mixer->isReady()) {
@@ -352,6 +361,7 @@
 	_noDrawShapesFlag = 0;
 
 	_cauldronState = 0;
+	_crystalState[0] = _crystalState[1] = -1;
 
 	_brandonStatusBit = 0;
 	_brandonStatusBit0x02Flag = _brandonStatusBit0x20Flag = 10;
@@ -1420,6 +1430,78 @@
 	_screen->showMouse();
 }
 
+void KyraEngine::seq_fillFlaskWithWater(int item, int type) {
+	debug(9, "seq_fillFlaskWithWater(%d, %d)", item, type);
+	int newItem = -1;
+	static const uint8 flaskTable1[] = { 0x46, 0x48, 0x4A, 0x4C };
+	static const uint8 flaskTable2[] = { 0x47, 0x49, 0x4B, 0x4D };
+	
+	if (item >= 60 && item <= 77) {
+		assert(_flaskFull);
+		characterSays(_flaskFull[0], 0, -2);
+	} else if (item == 78) {
+		assert(type >= 0 && type < ARRAYSIZE(flaskTable1));
+		newItem = flaskTable1[type];
+	} else if (item == 79) {
+		assert(type >= 0 && type < ARRAYSIZE(flaskTable2));
+		newItem = flaskTable2[type];
+	}
+	
+	if (newItem == -1)
+		return;
+	
+	_screen->hideMouse();
+	setMouseItem(newItem);
+	_screen->showMouse();
+	_itemInHand = newItem;
+	assert(_fullFlask);
+	assert(type < _fullFlask_Size && type >= 0);
+	characterSays(_fullFlask[type], 0, -2);
+}
+
+void KyraEngine::seq_playDrinkPotionAnim(int unk1, int unk2, int flags) {
+	debug(9, "seq_playDrinkPotionAnim(%d, %d, %d)", unk1, unk2, flags);
+	// XXX
+	_screen->hideMouse();
+	checkAmuletAnimFlags();
+	_currentCharacter->facing = 5;
+	animRefreshNPC(0);
+	assert(_drinkAnimationTable);
+	setupShapes123(_drinkAnimationTable, 9, flags);
+	setBrandonAnimSeqSize(5, 54);
+	
+	for (int i = 123; i <= 131; ++i) {
+		_currentCharacter->currentAnimFrame = i;
+		animRefreshNPC(0);
+		delayWithTicks(5);
+	}	
+	// snd_playSoundEffect(0x34);
+	for (int i = 0; i < 2; ++i) {
+		_currentCharacter->currentAnimFrame = 130;
+		animRefreshNPC(0);
+		delayWithTicks(7);
+		_currentCharacter->currentAnimFrame = 131;
+		animRefreshNPC(0);
+		delayWithTicks(7);
+	}
+	
+	if (unk2) {
+		// XXX
+	}
+	
+	for (int i = 131; i >= 123; --i) {
+		_currentCharacter->currentAnimFrame = i;
+		animRefreshNPC(0);
+		delayWithTicks(5);
+	}
+	
+	resetBrandonAnimSeqSize();	
+	_currentCharacter->currentAnimFrame = 7;
+	animRefreshNPC(0);
+	freeShapes123();
+	_screen->showMouse();
+}
+
 bool KyraEngine::seq_skipSequence() const {
 	debug(9, "KyraEngine::seq_skipSequence()");
 	return _quitFlag || _abortIntroFlag;

Index: kyra.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.h,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -d -r1.58 -r1.59
--- kyra.h	31 Dec 2005 15:41:37 -0000	1.58
+++ kyra.h	31 Dec 2005 17:25:47 -0000	1.59
@@ -573,6 +573,8 @@
 	void seq_makeBrandonNormal2();
 	void seq_makeBrandonWisp();
 	void seq_dispelMagicAnimation();
+	void seq_fillFlaskWithWater(int item, int type);
+	void seq_playDrinkPotionAnim(int unk1, int unk2, int flags);
 
 	void wsa_processFrame(WSAMovieV1 *wsa, int frameNum, uint8 *dst);
 
@@ -686,6 +688,7 @@
 	int8 _foyerItemTable[3];
 	
 	int8 _cauldronState;
+	int8 _crystalState[2];
 
 	uint16 _brandonStatusBit;
 	int _brandonStatusBit0x02Flag;
@@ -805,6 +808,8 @@
 	char **_fluteString;
 	char **_wispJewelStrings;
 	char **_magicJewelString;
+	char **_flaskFull;
+	char **_fullFlask;
 	
 	int _itemList_Size;
 	int _takenList_Size;
@@ -820,6 +825,8 @@
 	int _fluteString_Size;
 	int _wispJewelStrings_Size;
 	int _magicJewelString_Size;
+	int _flaskFull_Size;
+	int _fullFlask_Size;
 	
 	char **_characterImageTable;
 	int _characterImageTableSize;

Index: script_v1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/script_v1.cpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- script_v1.cpp	31 Dec 2005 15:41:37 -0000	1.53
+++ script_v1.cpp	31 Dec 2005 17:25:47 -0000	1.54
@@ -1441,7 +1441,8 @@
 }
 
 int KyraEngine::cmd_drinkPotionAnimation(ScriptState *script) {
-	warning("STUB: cmd_drinkPotionAnimation");
+	debug(3, "cmd_drinkPotionAnimation(0x%X) (%d, %d, %d)", script);
+	seq_playDrinkPotionAnim(stackPos(0), stackPos(1), stackPos(2));
 	return 0;
 }
 
@@ -1594,7 +1595,8 @@
 }
 
 int KyraEngine::cmd_fillFlaskWithWater(ScriptState *script) {
-	warning("STUB: cmd_fillFlaskWithWater");
+	debug(3, "cmd_fillFlaskWithWater(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
+	seq_fillFlaskWithWater(stackPos(0), stackPos(1));
 	return 0;
 }
 
@@ -1636,8 +1638,8 @@
 }
 
 int KyraEngine::cmd_getIdolGem(ScriptState *script) {
-	warning("STUB: cmd_getIdolGem");
-	return 0;
+	debug(3, "cmd_getIdolGem(0x%X) (%d)", script, stackPos(0));
+	return _idolGemsTable[stackPos(0)];;
 }
 
 int KyraEngine::cmd_setIdolGem(ScriptState *script) {
@@ -1697,7 +1699,13 @@
 }
 
 int KyraEngine::cmd_itemOnGroundHere(ScriptState *script) {
-	warning("STUB: cmd_itemOnGroundHere");
+	debug(3, "cmd_itemOnGroundHere(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
+	assert(stackPos(0) < _roomTableSize);
+	Room *curRoom = &_roomTable[stackPos(0)];
+	for (int i = 0; i < 12; ++i) {
+		if (curRoom->itemsTable[i] == stackPos(1))
+			return 1;
+	}
 	return 0;
 }
 
@@ -1713,13 +1721,23 @@
 }
 
 int KyraEngine::cmd_queryCrystalState(ScriptState *script) {
-	warning("STUB: cmd_queryCrystalState");
-	return 0;
+	debug(3, "cmd_queryCrystalState(0x%X) (%d)", script, stackPos(0));
+	if (!stackPos(0)) {
+		return _crystalState[0];
+	} else if (stackPos(0) == 1) {
+		return _crystalState[1];
+	}
+	return -1;
 }
 
 int KyraEngine::cmd_setCrystalState(ScriptState *script) {
-	warning("STUB: cmd_setCrystalState");
-	return 0;
+	debug(3, "cmd_setCrystalState(0x%X) (%d)", script, stackPos(0), stackPos(1));
+	if (!stackPos(0)) {
+		_crystalState[0] = stackPos(1);
+	} else if (stackPos(0) == 1) {
+		_crystalState[1] = stackPos(1);
+	}
+	return stackPos(1);
 }
 
 int KyraEngine::cmd_setPaletteRange(ScriptState *script) {
@@ -1738,23 +1756,29 @@
 }
 
 int KyraEngine::cmd_setBrandonScaleXAndY(ScriptState *script) {
-	warning("STUB: cmd_setBrandonScaleXAndY");
+	debug(3, "cmd_setBrandonScaleXAndY(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
+	_brandonScaleX = stackPos(0);
+	_brandonScaleY = stackPos(1);
 	return 0;
 }
 
 int KyraEngine::cmd_resetScaleMode(ScriptState *script) {
-	warning("STUB: cmd_resetScaleMode");
+	debug(3, "cmd_setBrandonScaleXAndY(0x%X) ()", script);
+	_scaleMode = 0;
 	return 0;
 }
 
 int KyraEngine::cmd_getScaleDepthTableValue(ScriptState *script) {
-	warning("STUB: cmd_getScaleDepthTableValue");
-	return 0;
+	debug(3, "cmd_getScaleDepthTableValue(0x%X) (%d)", script, stackPos(0));
+	assert(stackPos(0) < ARRAYSIZE(_scaleTable));
+	return _scaleTable[stackPos(0)];
 }
 
 int KyraEngine::cmd_setScaleDepthTableValue(ScriptState *script) {
-	warning("STUB: cmd_setScaleDepthTableValue");
-	return 0;
+	debug(3, "cmd_setScaleDepthTableValue(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
+	assert(stackPos(0) < ARRAYSIZE(_scaleTable));
+	_scaleTable[stackPos(0)] = stackPos(1);
+	return stackPos(1);
 }
 
 int KyraEngine::cmd_message(ScriptState *script) {
@@ -1814,7 +1838,8 @@
 }
 
 int KyraEngine::cmd_brandonHealingSequence(ScriptState *script) {
-	warning("STUB: cmd_brandonHealingSequence");
+	debug(3, "cmd_brandonHealingSequence(0x%X) ()", script);
+	seq_brandonHealing();
 	return 0;
 }
 

Index: staticres.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/staticres.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- staticres.cpp	29 Dec 2005 22:18:40 -0000	1.31
+++ staticres.cpp	31 Dec 2005 17:25:47 -0000	1.32
@@ -26,7 +26,7 @@
 
 namespace Kyra {
 
-#define RESFILE_VERSION 9
+#define RESFILE_VERSION 10
 
 #define GAME_FLAGS (GF_FLOPPY | GF_TALKIE | GF_DEMO | GF_AUDIOCD)
 #define LANGUAGE_FLAGS (GF_ENGLISH | GF_FRENCH | GF_GERMAN | GF_SPANISH | GF_LNGUNK)
@@ -238,6 +238,9 @@
 		
 		res_loadLangTable("WISPJEWEL.", &resFile, (byte***)&_wispJewelStrings, &_wispJewelStrings_Size, loadNativeLanguage);
 		res_loadLangTable("MAGICJEWEL.", &resFile, (byte***)&_magicJewelString, &_magicJewelString_Size, loadNativeLanguage);
+		
+		res_loadLangTable("FLASKFULL.", &resFile, (byte***)&_flaskFull, &_fullFlask_Size, loadNativeLanguage);
+		res_loadLangTable("FULLFLASK.", &resFile, (byte***)&_fullFlask, &_fullFlask_Size, loadNativeLanguage);
 	}
 
 #undef loadRooms
@@ -344,6 +347,9 @@
 		delete [] _brandonStoneTable;
 		_brandonStoneTable = 0;
 		_brandonStoneTableSize = 0;
+		
+		res_freeLangTable(&_flaskFull, &_flaskFull_Size);
+		res_freeLangTable(&_fullFlask, &_fullFlask_Size);
 	}
 }
 





More information about the Scummvm-git-logs mailing list