[Scummvm-git-logs] scummvm master -> 24b312a76ca3d6a8836ec175945f02f30738836e

mduggan mgithub at guarana.org
Tue Jul 13 08:35:59 UTC 2021


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
92ab0f1e8f ULTIMA8: Resolve some more No Regret intrinsic functions
24b312a76c ULTIMA8: Correct various Crusader fade and palette intrinsics


Commit: 92ab0f1e8f38fc409779c6e2d7b4c65a613ff718
    https://github.com/scummvm/scummvm/commit/92ab0f1e8f38fc409779c6e2d7b4c65a613ff718
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-07-13T17:35:50+09:00

Commit Message:
ULTIMA8: Resolve some more No Regret intrinsic functions

Changed paths:
    engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
    engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
    engines/ultima/ultima8/usecode/regret_intrinsics.h
    engines/ultima/ultima8/usecode/uc_machine.cpp
    engines/ultima/ultima8/usecode/uc_machine.h
    engines/ultima/ultima8/world/actors/main_actor.cpp
    engines/ultima/ultima8/world/actors/main_actor.h


diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
index f9ae82e704..00fd2028b5 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
@@ -256,7 +256,7 @@ const char* const ConvertUsecodeCrusader::_intrinsics[] = {
 	"int16 Item::I_hurl(Item *,8 bytes)", // part of same coff set 028, 08D, 0BD, 0C0, 0C2, 0C8, 0F7, 0F9, 118, 11D
 	"int16 Item::I_getQHi(Item *)", // same as 026 based on same coff set 026, 045, 047, 049, 04B, 04D, 04F, 0AF, 0BE, 0C9, 0F0, 0F3, 0FB, 133
 	"byte Actor::I_addHp(Actor *, int)",
-	"void MainActort::I_switchMap(int16 mapnum)",
+	"void MainActor::I_switchMap(int16 mapnum)",
 	"byte Actor::I_getInCombat(Actor *)",
 	"void Actor::I_setActivity(Actor *, int)", // part of same coff set 055, 07D, 0CD, 0DB, 0F2, 131
 	"int16 Game::I_isReleaseBuild(void)", // whether the string "GAME COMPILE=1" has the 1.  Might be interesting to see what this does..
diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
index 4138a27c81..f55c7b33f4 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
@@ -53,7 +53,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"World::I_gameDifficulty()",
 	"Item::getQLo(void)",
 	"Item::destroy(void)",
-	"Actor::I_getField0x81()", // same as field 0x63 in No Remorse
+	"Actor::I_getUnkByte()", // same as field 0x63 in No Remorse
 	"Item::getX(void)",
 	"Item::getY(void)",
 	// 0010
@@ -153,7 +153,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Kernel::getNumProcesses(uint16,ProcessType)",
 	"Item::getCY(void)",
 	"U8Engine::I_isCfgAnimationOff()",
-	"Intrinsic006B()",
+	"ResetKeyboardState()",
 	"MusicProcess::I_pauseMusic()",
 	"MovieGump::I_playMovieCutsceneRegret()",
 	"MusicProcess::I_unpauseMusic()",
@@ -181,7 +181,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"PaletteFaderProcess::I_jumpToAllBlack()",
 	"I_setUnkFlagA4()",
 	"I_clearUnkFlagA4()",
-	"Intrinsic0085()",
+	"MainActor::I_switchMap(int16)",
 	"teleportToEgg(sint16,int,uint8)",
 	"PaletteFaderProcess::I_fadeFromBlack()",
 	"Actor::I_clrImmortal()",
@@ -232,8 +232,8 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	"Item::andStatus(void)",
 	"Item::getDirToCoords(uint16,uint16)",
-	"Intrinsic00B5()",
-	"Intrinsic00B6()",
+	"MainActor::I_removeItem(uint16)",
+	"I_updateInventoryUI()",
 	"Item::getNpcNum(void)",
 	"Item::getCY(void)",
 	"Item::isOn(uint16)",
@@ -385,7 +385,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"PaletteFaderProcess::I_fadeToGivenColor()",
 	"Actor::isDead(void)",
 	"Actor::I_setDead()",
-	"I_maybeShowCredits()",
+	"Game::I_playCredits()",
 	"PaletteFaderProcess::I_jumpToAllGrey()",
 	"Item::I_getFamilyOfType()",
 	"Item::getNpcNum(void)",
diff --git a/engines/ultima/ultima8/usecode/regret_intrinsics.h b/engines/ultima/ultima8/usecode/regret_intrinsics.h
index 7e4808f4ac..a8c0a4a4e6 100644
--- a/engines/ultima/ultima8/usecode/regret_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/regret_intrinsics.h
@@ -85,7 +85,7 @@ Intrinsic RegretIntrinsics[] = {
 	MainActor::I_getMana, // Intrinsic030()
 	Item::I_getFamily, // Intrinsic031()
 	Actor::I_destroyContents, // Intrinsic032()
-	0, // Intrinsic033() Item::I_SetVolumeForItemSFX
+	0, // Intrinsic033() AudioProcess::I_setVolumeForItemSFX
 	Item::I_getDirToItem, // Intrinsic034()
 	AudioProcess::I_isSFXPlayingForObject, // Intrinsic035()
 	Item::I_getRangeIfVisible, // Intrinsic036()
@@ -97,7 +97,7 @@ Intrinsic RegretIntrinsics[] = {
 	MainActor::I_addItemCru, // Intrinsic03C()
 	Actor::I_getMap, // Intrinsic03D()
 	Item::I_cast, // Intrinsic03E()
-	0, // Intrinsic03F()
+	0, // Intrinsic03F() - CameraProcess::I_somethingAboutCameraUpdate, not needed
 	// 0040
 	AudioProcess::I_stopSFXCru, // Intrinsic040()
 	Item::I_isOn, // Intrinsic041()
@@ -144,7 +144,7 @@ Intrinsic RegretIntrinsics[] = {
 	Kernel::I_getNumProcesses, // Intrinsic068()
 	Item::I_getCY, // Intrinsic069()
 	0, // Intrinsic06A() I_isAnimDisabled
-	0, // Intrinsic06B()
+	0, // Intrinsic06B() I_resetKeyboardState?
 	MusicProcess::I_pauseMusic, // Intrinsic06C()
 	MovieGump::I_playMovieCutsceneRegret, // Intrinsic06D()
 	MusicProcess::I_unpauseMusic, // Intrinsic06E()
@@ -152,11 +152,11 @@ Intrinsic RegretIntrinsics[] = {
 	// 0070
 	Ultima8Engine::I_setCruStasis, // Intrinsic070()
 	Ultima8Engine::I_clrCruStasis, // Intrinsic071()
-	0, // Intrinsic072() PaletteFaderProcess::I_jumpToColor
+	PaletteFaderProcess::I_jumpToAllGivenColor, // Intrinsic072() PaletteFaderProcess::I_jumpToColor
 	PaletteFaderProcess::I_fadeFromBlack, // Intrinsic073()
 	Actor::I_isDead, // Intrinsic074()
 	Actor::I_getNpcNum, // Intrinsic075()
-	0, // Intrinsic076() - null intrinsic
+	UCMachine::I_false, // Intrinsic076() - null intrinsic
 	UCMachine::I_true, // Actually Game::I_isViolenceEnabled
 	Item::I_unequip, // Intrinsic078()
 	Item::I_andStatus, // Intrinsic079()
@@ -172,7 +172,7 @@ Intrinsic RegretIntrinsics[] = {
 	PaletteFaderProcess::I_jumpToAllBlack, // Intrinsic082()
 	0, // I_setUnkFlagA4()
 	0, // I_clearUnkFlagA4()
-	0, // Intrinsic085()
+	MainActor::I_switchMap, // Intrinsic085()
 	MainActor::I_teleportToEgg, // Intrinsic086()
 	PaletteFaderProcess::I_fadeFromBlack, // Intrinsic087()
 	Actor::I_clrImmortal, // Intrinsic088()
@@ -223,8 +223,8 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_hurl, // Intrinsic0B2()
 	Item::I_andStatus, // Intrinsic0B3()
 	Item::I_getDirToCoords, // Intrinsic0B4()
-	0, // MainActor::I_addItemSimple()
-	0, // I_updateInventoryUI() - probably not needed?
+	MainActor::I_removeItemCru, // Intrinsic0B5()
+	UCMachine::I_true, // I_updateInventoryUI() - probably not needed?
 	Actor::I_getNpcNum, // Intrinsic0B7()
 	Item::I_getCY, // Intrinsic0B8()
 	Item::I_isOn, // Intrinsic0B9()
@@ -237,7 +237,7 @@ Intrinsic RegretIntrinsics[] = {
 	// 00C0
 	ComputerGump::I_readComputer, // Intrinsic0C0()
 	UCMachine::I_numToStr, // Intrinsic0C1()
-	0, // Intrinsic0C2() - return 0
+	UCMachine::I_false, // Intrinsic0C2() - return 0
 	Actor::I_getDir, // Intrinsic0C3()
 	Item::I_getQHi, // Intrinsic0C4()
 	Item::I_setQuality, // Intrinsic0C5()
@@ -322,7 +322,7 @@ Intrinsic RegretIntrinsics[] = {
 	// 0110
 	Item::I_isOn, // Intrinsic110()
 	MainActor::I_hasKeycard, // Intrinsic111()
-	0, // Intrinsic112() - null function (return 0)
+	UCMachine::I_false, // Intrinsic112() - null function (return 0)
 	Actor::I_isDead, // Intrinsic113()
 	Actor::I_clrImmortal, // Intrinsic114()
 	UCMachine::I_numToStr, // Intrinsic115()
@@ -389,7 +389,7 @@ Intrinsic RegretIntrinsics[] = {
 	Egg::I_getEggXRange, // Intrinsic14F()
 	// 0150
 	Actor::I_clrInCombat, // Intrinsic150()
-	0, // Intrinsic151() PaletteFaderProcess::I_jumpToColor
+	PaletteFaderProcess::I_jumpToAllGivenColor, // Intrinsic151() PaletteFaderProcess::I_jumpToColor
 	Item::I_setFrame, // Intrinsic152()
 	UCMachine::I_numToStr, // Intrinsic153()
 	Actor::I_getDir, // Intrinsic154()
@@ -427,6 +427,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Actor::I_getUnkByte,
 	Item::I_getX,
 	Item::I_getY,
+	// 0010
 	AudioProcess::I_playSFXCru,
 	Item::I_getShape,
 	Item::I_explode,
@@ -443,6 +444,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_push,
 	Item::I_getEtherealTop,
 	Item::I_getQLo,
+	// 0020
 	Item::I_setQLo,
 	Item::I_getQHi,
 	Item::I_setQHi,
@@ -459,6 +461,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_isCompletelyOn,
 	Item::I_popToContainer,
 	Actor::I_getHp,
+	// 0030
 	MainActor::I_getMana,
 	Item::I_getFamily,
 	Actor::I_destroyContents,
@@ -475,6 +478,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Kernel::I_resetRef,
 	Egg::I_getEggId,
 	MainActor::I_addItemCru,
+	// 0040
 	Actor::I_getMap,
 	Item::I_cast,
 	0,
@@ -491,6 +495,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_getQHi,
 	Item::I_isOn,
 	Item::I_getQHi,
+	// 0050
 	Item::I_isOn,
 	Item::I_getQHi,
 	Actor::I_getCurrentActivityNo,
@@ -507,6 +512,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_use,
 	Item::I_setUnkEggType,
 	MusicProcess::I_playMusic,
+	// 0060
 	Item::I_getSurfaceWeight,
 	Item::I_isCentreOn,
 	Item::I_setFrame,
@@ -523,22 +529,24 @@ Intrinsic RegretDemoIntrinsics[] = {
 	0,
 	0,
 	CruStatusGump::I_hideStatusGump,
+	// 0070
 	Actor::I_turnToward,
 	ComputerGump::I_readComputer,
 	MovieGump::I_playMovieCutsceneRegret,
-	0,
+	UCMachine::I_true, // update inventory ui updates (not needed)
 	MusicProcess::I_pauseMusic,
 	MusicProcess::I_unpauseMusic,
 	Item::I_isInNpc,
 	Ultima8Engine::I_setCruStasis,
 	Ultima8Engine::I_clrCruStasis,
-	0, // jump to color
+	PaletteFaderProcess::I_jumpToAllGivenColor,
 	PaletteFaderProcess::I_fadeFromBlack,
 	Actor::I_isDead,
 	Actor::I_getNpcNum,
-	0,
+	UCMachine::I_false,  // null intrinsic (returns 0)
 	UCMachine::I_true,
 	Item::I_unequip,
+	// 0080
 	Item::I_andStatus,
 	Item::I_move,
 	Ultima8Engine::I_getUnkCrusaderFlag,
@@ -555,6 +563,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	PaletteFaderProcess::I_fadeFromBlack,
 	Actor::I_clrImmortal,
 	Actor::I_setActivity,
+	// 0090
 	Item::I_getQuality,
 	Item::I_setQuality,
 	MainActor::I_getMaxEnergy,
@@ -571,6 +580,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_hurl,
 	Actor::I_getNpcNum,
 	Ultima8Engine::I_moveKeyDownRecently,
+	// 00A0
 	MainActor::I_teleportToEgg,
 	Actor::I_createActor,
 	Actor::I_clrInCombat,
@@ -587,6 +597,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_overlaps,
 	Item::I_isOn,
 	Egg::I_getEggXRange,
+	// 00B0
 	World::I_clrAlertActive,
 	PaletteFaderProcess::I_fadeToGivenColor,
 	Actor::I_setDead,
@@ -603,6 +614,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	World::I_setAlertActive,
 	Ultima8Engine::I_getAvatarInStasis,
 	MainActor::I_addItemCru,
+	// 00C0
 	Actor::I_getLastAnimSet,
 	Item::I_getCY,
 	CurrentMap::I_canExistAt,
@@ -619,6 +631,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	0,
 	Actor::I_getNpcNum,
 	Item::I_getCY,
+	// 00D0
 	Item::I_isOn,
 	Item::I_getFootpadData,
 	Actor::I_isDead,
@@ -627,7 +640,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	KeypadGump::I_showKeypad,
 	Item::I_andStatus,
 	UCMachine::I_numToStr,
-	0,
+	UCMachine::I_false, // null intrinsic
 	Actor::I_getDir,
 	Item::I_getQHi,
 	Item::I_setQuality,
@@ -635,6 +648,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_hurl,
 	Actor::I_addHp,
 	CruHealerProcess::I_create,
+	// 00E0
 	Item::I_equip,
 	Item::I_setBroken,
 	Item::I_isOn,
@@ -651,6 +665,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Actor::I_getDefaultActivity0,
 	Actor::I_getDefaultActivity1,
 	Actor::I_getDefaultActivity2,
+	// 00F0
 	Actor::I_getLastAnimSet,
 	Item::I_getQLo,
 	Item::I_getQHi,
@@ -667,6 +682,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Actor::I_getNpcNum,
 	Item::I_hurl,
 	Actor::I_getNpcNum,
+	// 0100
 	Item::I_hurl,
 	Actor::I_getNpcNum,
 	Item::I_hurl,
@@ -683,6 +699,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Actor::I_setDead,
 	Item::I_getQLo,
 	Actor::I_setDead,
+	// 0110
 	Actor::I_getMaxHp,
 	Actor::I_setHp,
 	Item::I_getQLo,
@@ -699,6 +716,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_isOn,
 	Item::I_getQHi,
 	Item::I_isOn,
+	// 0120
 	Item::I_getQHi,
 	Item::I_hurl,
 	Actor::I_getNpcNum,
@@ -706,7 +724,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Item::I_hurl,
 	Item::I_isOn,
 	MainActor::I_hasKeycard,
-	0,
+	UCMachine::I_false, // null intrinsic
 	Actor::I_isDead,
 	Actor::I_clrImmortal,
 	UCMachine::I_numToStr,
diff --git a/engines/ultima/ultima8/usecode/uc_machine.cpp b/engines/ultima/ultima8/usecode/uc_machine.cpp
index 9ec7c49e6e..f3fa903de1 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.cpp
+++ b/engines/ultima/ultima8/usecode/uc_machine.cpp
@@ -2411,6 +2411,10 @@ uint32 UCMachine::I_true(const uint8 * /*args*/, unsigned int /*argsize*/) {
 	return 1;
 }
 
+uint32 UCMachine::I_false(const uint8 * /*args*/, unsigned int /*argsize*/) {
+	return 1;
+}
+
 uint32 UCMachine::I_dummyProcess(const uint8 * /*args*/, unsigned int /*argsize*/) {
 	return Kernel::get_instance()->addProcess(new DelayProcess(4));
 }
diff --git a/engines/ultima/ultima8/usecode/uc_machine.h b/engines/ultima/ultima8/usecode/uc_machine.h
index 6942adaf8c..87d5850169 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.h
+++ b/engines/ultima/ultima8/usecode/uc_machine.h
@@ -83,6 +83,7 @@ public:
 	bool loadLists(Common::ReadStream *rs, uint32 version);
 
 	INTRINSIC(I_true);
+	INTRINSIC(I_false);
 	INTRINSIC(I_dummyProcess);
 	INTRINSIC(I_getName);
 	INTRINSIC(I_urandom);
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index 101b8a765d..9709786a71 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -327,6 +327,11 @@ int16 MainActor::addItemCru(Item *item, bool showtoast) {
 	return 0;
 }
 
+bool MainActor::removeItemCru(Item *item) {
+	warning("TODO: Implement MainActor::removeItemCru");
+	return false;
+}
+
 const ShapeInfo *MainActor::getShapeInfoFromGameInstance() const {
 	const ShapeInfo *info = Item::getShapeInfoFromGameInstance();
 
@@ -927,6 +932,21 @@ uint32 MainActor::I_switchMap(const uint8 *args,
 	return 0;
 }
 
+uint32 MainActor::I_removeItemCru(const uint8 *args,
+								 unsigned int /*argsize*/) {
+	MainActor *av = getMainActor();
+	ARG_ITEM_FROM_ID(item);
+
+	if (!av || !item)
+		return 0;
+
+	if (av->removeItemCru(item))
+		return 1;
+
+	return 0;
+}
+
+
 void MainActor::useInventoryItem(uint32 shapenum) {
 	Item *item = getFirstItemWithShape(shapenum, true);
 	useInventoryItem(item);
diff --git a/engines/ultima/ultima8/world/actors/main_actor.h b/engines/ultima/ultima8/world/actors/main_actor.h
index 2e98268590..f19f2080a7 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.h
+++ b/engines/ultima/ultima8/world/actors/main_actor.h
@@ -57,6 +57,9 @@ public:
 	//! ammo and credits, use batteries, etc.
 	int16 addItemCru(Item *item, bool showtoast);
 
+	//! Remove a single item - only called from an intrinsic
+	bool removeItemCru(Item *item);
+
 	//! teleport to the given location on the given map
 	void teleport(int mapNum, int32 x, int32 y, int32 z) override;
 
@@ -174,6 +177,7 @@ public:
 	INTRINSIC(I_addItemCru);
 	INTRINSIC(I_getNumberOfCredits);
 	INTRINSIC(I_switchMap);
+	INTRINSIC(I_removeItemCru);
 
 	void getWeaponOverlay(const WeaponOverlayFrame *&frame, uint32 &shape);
 


Commit: 24b312a76ca3d6a8836ec175945f02f30738836e
    https://github.com/scummvm/scummvm/commit/24b312a76ca3d6a8836ec175945f02f30738836e
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-07-13T17:35:50+09:00

Commit Message:
ULTIMA8: Correct various Crusader fade and palette intrinsics

This should make the green flashes from biohazard barrels work correctly.  Also
corrected the "fade from grey" which is actually fade from white, as VGA colors
are 0-63 not 0-255 in each channel.

Changed paths:
    engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
    engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
    engines/ultima/ultima8/games/start_crusader_process.cpp
    engines/ultima/ultima8/graphics/palette_fader_process.cpp
    engines/ultima/ultima8/graphics/palette_fader_process.h
    engines/ultima/ultima8/usecode/regret_intrinsics.h
    engines/ultima/ultima8/usecode/remorse_intrinsics.h


diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
index 00fd2028b5..267bc3c1f0 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
@@ -170,7 +170,7 @@ const char* const ConvertUsecodeCrusader::_intrinsics[] = {
 	"int16 PaletteFaderProcess::I_fadeToBlack(void)", // fade to black, no args (40 frames)
 	"void MainActor::I_clrKeycards(void)",
 	"int16 MainActor::I_teleportToEgg(int, int, int)",
-	"int16 PaletteFaderProcess::I_fadeFromBlack(void)", // from black, no arg (40 frames)
+	"int16 PaletteFaderProcess::I_fadeToGamePal(void)", // from black, no arg (40 frames)
 	"void Actor::I_clrImmortal(Actor *)", // same coff as 130
 	"int16 Actor::I_getHp(Actor *)",
 	"void Actor::I_setActivity(Actor *, int)", // part of same coff set 055, 07D, 0CD, 0DB, 0F2, 131
@@ -205,8 +205,8 @@ const char* const ConvertUsecodeCrusader::_intrinsics[] = {
 	"void I_resetVargasShieldTo500(void)",
 	"void Item::I_andStatus(Item *, uint16 status)", // part of same coff set 01A, 031, 069, 06E, 099, 0B2, 0BF, 0C1, 0C3, 0E9, 0FC, 101, 104, 106, 108, 10A, 10C, 10E, 110, 114, 117, 11A, 128, 132
 	"void PaletteFaderProcess::I_jumpToNormalPalette(void)",
-	"int16 PaletteFaderProcess::I_fadeFromBlack(nsteps)",
-	"int16 PaletteFaderProcess::I_fadeFromBlackWithParam(nsteps, unk)",
+	"int16 PaletteFaderProcess::I_fadeToGamePal(nsteps)",
+	"int16 PaletteFaderProcess::I_fadeToGamePalWithParam(nsteps, unk)",
 	"int16 PaletteFaderProcess::I_fadeToBlack(nsteps)",
 	"int16 PaletteFaderProcess::I_fadeToBlackWithParam(nsteps, unk)",
 	"int16 PaletteFaderProcess::I_fadeToColor(r, g, b, nsteps, unk)",
diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
index f55c7b33f4..2a9b35e371 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
@@ -162,7 +162,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Ultima8Engine::I_setCruStasis()",
 	"Ultima8Engine::I_clrCruStasis()",
 	"PaletteFaderProcess::I_jumpToColor()",
-	"PaletteFaderProcess::I_fadeFromBlack()",
+	"PaletteFaderProcess::I_fadeToGamePal()",
 	"Actor::isDead(void)",
 	"Item::getNpcNum(void)",
 	"IntrinsicReturn0",
@@ -183,7 +183,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"I_clearUnkFlagA4()",
 	"MainActor::I_switchMap(int16)",
 	"teleportToEgg(sint16,int,uint8)",
-	"PaletteFaderProcess::I_fadeFromBlack()",
+	"PaletteFaderProcess::I_fadeToGamePal()",
 	"Actor::I_clrImmortal()",
 	"Actor::I_setActivity()",
 	"Item::getQuality(void)",
diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index 60d5263764..092dab5f1c 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -66,7 +66,6 @@ void StartCrusaderProcess::run() {
 
 	// Try to load the save game, if succeeded this pointer will no longer be valid
 	if (_saveSlot >= 0 && Ultima8Engine::get_instance()->loadGameState(_saveSlot).getCode() == Common::kNoError) {
-		//PaletteFaderProcess::I_fadeFromBlack(0, 0);
 		return;
 	}
 
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index 841240e287..cb0aab5f37 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -49,7 +49,7 @@ PaletteFaderProcess::PaletteFaderProcess(PalTransforms trans,
 PaletteFaderProcess::PaletteFaderProcess(uint32 col32, bool from,
 		int priority, int frames, bool current) : _priority(priority),
 	_counter(frames), _maxCounter(frames) {
-	PaletteManager  *pm = PaletteManager::get_instance();
+	PaletteManager *pm = PaletteManager::get_instance();
 	Palette *pal = pm->getPalette(PaletteManager::Pal_Game);
 	if (!from) {
 		if (current)
@@ -228,9 +228,9 @@ static const int16 GreyFadeMatrix[] = {612, 1202, 233, 0,
 					612, 1202, 233, 0
 };
 
-static const int16 AllGreyMatrix[] = {0, 0, 0, 0x3ff,
-					0, 0, 0, 0x3ff,
-					0, 0, 0, 0x3ff
+static const int16 AllWhiteMatrix[] = {0, 0, 0, 0x7ff,
+					0, 0, 0, 0x7ff,
+					0, 0, 0, 0x7ff
 };
 
 static const int16 AllBlackMatrix[] = {0, 0, 0, 0,
@@ -252,9 +252,10 @@ uint32 PaletteFaderProcess::I_fadeToGivenColor(const uint8 *args,
 	if (_fader && _fader->_priority > 0x7FFF) return 0;
 	else if (_fader) _fader->terminate();
 
+	// TODO: guessing that color order should be same as other one below?
+	ARG_UINT8(b);
 	ARG_UINT8(r);
 	ARG_UINT8(g);
-	ARG_UINT8(b);
 	ARG_UINT16(nsteps);
 	ARG_UINT16(unk);
 
@@ -266,6 +267,29 @@ uint32 PaletteFaderProcess::I_fadeToGivenColor(const uint8 *args,
 	return Kernel::get_instance()->addProcess(_fader);
 }
 
+uint32 PaletteFaderProcess::I_fadeToGamePal(const uint8 *args,
+		unsigned int argsize) {
+	if (_fader && _fader->_priority > 0x7FFF)
+		return 0;
+	else if (_fader && !_fader->is_terminated())
+		_fader->terminate();
+
+	int nsteps = (GAME_IS_U8 ? 30 : 20);
+	if (argsize > 0) {
+		ARG_UINT16(n);
+		nsteps = n;
+		if (argsize > 2) {
+			ARG_UINT16(unk);
+			warning("PaletteFaderProcess::I_fadeToGamePalWithParam: Ignoring param %d", unk);
+		}
+	}
+
+	int16 curmatrix[12];
+	PaletteManager *pm = PaletteManager::get_instance();
+	pm->getTransformMatrix(curmatrix, PaletteManager::Pal_Game);
+	_fader = new PaletteFaderProcess(curmatrix, NoFadeMatrix, 0x7FFF, nsteps);
+	return Kernel::get_instance()->addProcess(_fader);
+}
 
 uint32 PaletteFaderProcess::I_jumpToGreyScale(const uint8 * /*args*/,
 		unsigned int /*argsize*/) {
@@ -287,13 +311,13 @@ uint32 PaletteFaderProcess::I_jumpToAllBlack(const uint8 * /*args*/,
 	return 0;
 }
 
-uint32 PaletteFaderProcess::I_jumpToAllGrey(const uint8 * /*args*/,
+uint32 PaletteFaderProcess::I_jumpToAllWhite(const uint8 * /*args*/,
 		unsigned int /*argsize*/) {
 	if (_fader && _fader->_priority > 0x7FFF) return 0;
 	else if (_fader) _fader->terminate();
 
 	PaletteManager::get_instance()->transformPalette(PaletteManager::Pal_Game,
-													 AllGreyMatrix);
+													 AllWhiteMatrix);
 	return 0;
 }
 
@@ -302,13 +326,14 @@ uint32 PaletteFaderProcess::I_jumpToAllGivenColor(const uint8 *args,
 	if (_fader && _fader->_priority > 0x7FFF) return 0;
 	else if (_fader) _fader->terminate();
 
+	ARG_UINT8(b);
 	ARG_UINT8(r);
 	ARG_UINT8(g);
-	ARG_UINT8(b);
 
-	const int16 r16 = static_cast<int16>(r) << 4;
-	const int16 g16 = static_cast<int16>(g) << 4;
-	const int16 b16 = static_cast<int16>(b) << 4;
+	// Transform matrix goes 0~2048, scale 0-63 vals from input
+	const int16 r16 = static_cast<int16>(r) * 32;
+	const int16 g16 = static_cast<int16>(g) * 32;
+	const int16 b16 = static_cast<int16>(b) * 32;
 
 	const int16 color_matrix[] = {0, 0, 0, r16,
 						0, 0, 0, g16,
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.h b/engines/ultima/ultima8/graphics/palette_fader_process.h
index e91e08369b..ce6ac4908a 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.h
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.h
@@ -59,9 +59,10 @@ public:
 	INTRINSIC(I_lightningBolt);
 	INTRINSIC(I_fadeToGreyScale);
 	INTRINSIC(I_fadeToGivenColor);
+	INTRINSIC(I_fadeToGamePal);
 	INTRINSIC(I_jumpToGreyScale);
 	INTRINSIC(I_jumpToAllBlack);
-	INTRINSIC(I_jumpToAllGrey);
+	INTRINSIC(I_jumpToAllWhite);
 	INTRINSIC(I_jumpToAllGivenColor);
 	INTRINSIC(I_jumpToNormalPalette);
 
diff --git a/engines/ultima/ultima8/usecode/regret_intrinsics.h b/engines/ultima/ultima8/usecode/regret_intrinsics.h
index a8c0a4a4e6..15656c1b92 100644
--- a/engines/ultima/ultima8/usecode/regret_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/regret_intrinsics.h
@@ -153,7 +153,7 @@ Intrinsic RegretIntrinsics[] = {
 	Ultima8Engine::I_setCruStasis, // Intrinsic070()
 	Ultima8Engine::I_clrCruStasis, // Intrinsic071()
 	PaletteFaderProcess::I_jumpToAllGivenColor, // Intrinsic072() PaletteFaderProcess::I_jumpToColor
-	PaletteFaderProcess::I_fadeFromBlack, // Intrinsic073()
+	PaletteFaderProcess::I_fadeToGamePal, // Intrinsic073()
 	Actor::I_isDead, // Intrinsic074()
 	Actor::I_getNpcNum, // Intrinsic075()
 	UCMachine::I_false, // Intrinsic076() - null intrinsic
@@ -174,7 +174,7 @@ Intrinsic RegretIntrinsics[] = {
 	0, // I_clearUnkFlagA4()
 	MainActor::I_switchMap, // Intrinsic085()
 	MainActor::I_teleportToEgg, // Intrinsic086()
-	PaletteFaderProcess::I_fadeFromBlack, // Intrinsic087()
+	PaletteFaderProcess::I_fadeToGamePal, // Intrinsic087()
 	Actor::I_clrImmortal, // Intrinsic088()
 	Actor::I_setActivity, // Intrinsic089()
 	Item::I_getQuality, // Intrinsic08A()
@@ -377,7 +377,7 @@ Intrinsic RegretIntrinsics[] = {
 	Actor::I_isDead, // Intrinsic143()
 	Actor::I_setDead, // Intrinsic144()
 	Game::I_playCredits, // Intrinsic145()
-	PaletteFaderProcess::I_jumpToAllGrey, // Intrinsic146()
+	PaletteFaderProcess::I_jumpToAllWhite, // Intrinsic146()
 	Item::I_getFamilyOfType, // Intrinsic147()
 	Actor::I_getNpcNum, // Intrinsic148()
 	Item::I_getQLo, // Intrinsic149()
@@ -540,7 +540,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	Ultima8Engine::I_setCruStasis,
 	Ultima8Engine::I_clrCruStasis,
 	PaletteFaderProcess::I_jumpToAllGivenColor,
-	PaletteFaderProcess::I_fadeFromBlack,
+	PaletteFaderProcess::I_fadeToGamePal,
 	Actor::I_isDead,
 	Actor::I_getNpcNum,
 	UCMachine::I_false,  // null intrinsic (returns 0)
@@ -560,7 +560,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	0, // clr unk flag A4
 	Game::I_playDemoScreen,
 	MainActor::I_teleportToEgg,
-	PaletteFaderProcess::I_fadeFromBlack,
+	PaletteFaderProcess::I_fadeToGamePal,
 	Actor::I_clrImmortal,
 	Actor::I_setActivity,
 	// 0090
@@ -602,7 +602,7 @@ Intrinsic RegretDemoIntrinsics[] = {
 	PaletteFaderProcess::I_fadeToGivenColor,
 	Actor::I_setDead,
 	Game::I_playCredits,
-	PaletteFaderProcess::I_jumpToAllGrey,
+	PaletteFaderProcess::I_jumpToAllWhite,
 	Actor::I_isFalling,
 	Item::I_getFamilyOfType,
 	Actor::I_getNpcNum,
diff --git a/engines/ultima/ultima8/usecode/remorse_intrinsics.h b/engines/ultima/ultima8/usecode/remorse_intrinsics.h
index 6bc90de7e9..8ebd305e6c 100644
--- a/engines/ultima/ultima8/usecode/remorse_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/remorse_intrinsics.h
@@ -164,7 +164,7 @@ Intrinsic RemorseIntrinsics[] = {
 	PaletteFaderProcess::I_fadeToBlack, // void Intrinsic077(void)
 	MainActor::I_clrKeycards, // void Intrinsic078(void)
 	MainActor::I_teleportToEgg, // different than U8's? void Intrinsic079(6 bytes)
-	PaletteFaderProcess::I_fadeFromBlack, // void Intrinsic07A(void)
+	PaletteFaderProcess::I_fadeToGamePal, // void Intrinsic07A(void)
 	Actor::I_clrImmortal, // based on disasm
 	Actor::I_getHp, // void Intrinsic07C(4 bytes)
 	Actor::I_setActivity, // void Intrinsic07D(6 bytes)
@@ -199,8 +199,8 @@ Intrinsic RemorseIntrinsics[] = {
 	World::I_resetVargasShield, // void Intrinsic098(void)
 	Item::I_andStatus, // void Intrinsic099(6 bytes)
 	PaletteFaderProcess::I_jumpToNormalPalette, // TODO: should also stop cycle process?
-	PaletteFaderProcess::I_fadeFromBlack, // fade to game pal with number of steps
-	PaletteFaderProcess::I_fadeFromBlack, // fade from black with nsteps and another unknown param
+	PaletteFaderProcess::I_fadeToGamePal, // fade to game pal with number of steps
+	PaletteFaderProcess::I_fadeToGamePal, // fade from black with nsteps and another unknown param
 	PaletteFaderProcess::I_fadeToBlack, // fade to black with number of steps
 	PaletteFaderProcess::I_fadeToBlack, // fade to black with nsteps and another unknown param
 	PaletteFaderProcess::I_fadeToGivenColor,
@@ -266,7 +266,7 @@ Intrinsic RemorseIntrinsics[] = {
 	Actor::I_getLastAnimSet, // void Intrinsic0D7(4 bytes)
 	Actor::I_setDead,
 	Item::I_getQLo, // based on same coff set as 02B
-	PaletteFaderProcess::I_jumpToAllGrey,
+	PaletteFaderProcess::I_jumpToAllWhite,
 	Actor::I_setActivity, // void Intrinsic0DB(6 bytes)
 	Item::I_isOn,
 	Actor::I_getLastActivityNo, // void Intrinsic0DD(4 bytes)
@@ -502,7 +502,7 @@ Intrinsic RemorseDemoIntrinsics[] = {
 	PaletteFaderProcess::I_fadeToBlack,
 	MainActor::I_clrKeycards,
 	MainActor::I_teleportToEgg,
-	PaletteFaderProcess::I_fadeFromBlack,
+	PaletteFaderProcess::I_fadeToGamePal,
 	Actor::I_setImmortal,
 	Actor::I_getHp,
 	Actor::I_setActivity,
@@ -537,8 +537,8 @@ Intrinsic RemorseDemoIntrinsics[] = {
 	World::I_resetVargasShield,
 	Item::I_andStatus,
 	PaletteFaderProcess::I_jumpToNormalPalette,
-	PaletteFaderProcess::I_fadeFromBlack,
-	PaletteFaderProcess::I_fadeFromBlack,
+	PaletteFaderProcess::I_fadeToGamePal,
+	PaletteFaderProcess::I_fadeToGamePal,
 	PaletteFaderProcess::I_fadeToBlack,
 	PaletteFaderProcess::I_fadeToBlack,
 	// 0xA0
@@ -603,7 +603,7 @@ Intrinsic RemorseDemoIntrinsics[] = {
 	Actor::I_getLastAnimSet,
 	Actor::I_setDead,
 	Item::I_getQLo,
-	PaletteFaderProcess::I_jumpToAllGrey,
+	PaletteFaderProcess::I_jumpToAllWhite,
 	Actor::I_setActivity,
 	Item::I_isOn,
 	Actor::I_getLastActivityNo,
@@ -829,7 +829,7 @@ Intrinsic RemorseEsIntrinsics[] = {
 	PaletteFaderProcess::I_fadeToBlack,
 	MainActor::I_clrKeycards,
 	MainActor::I_teleportToEgg,
-	PaletteFaderProcess::I_fadeFromBlack,
+	PaletteFaderProcess::I_fadeToGamePal,
 	Actor::I_setImmortal,
 	Actor::I_getHp,
 	Actor::I_setActivity,
@@ -862,8 +862,8 @@ Intrinsic RemorseEsIntrinsics[] = {
 	World::I_resetVargasShield,
 	Item::I_andStatus,
 	PaletteFaderProcess::I_jumpToNormalPalette,
-	PaletteFaderProcess::I_fadeFromBlack,
-	PaletteFaderProcess::I_fadeFromBlack,
+	PaletteFaderProcess::I_fadeToGamePal,
+	PaletteFaderProcess::I_fadeToGamePal,
 	PaletteFaderProcess::I_fadeToBlack,
 	PaletteFaderProcess::I_fadeToBlack,
 	PaletteFaderProcess::I_fadeToGivenColor,
@@ -937,7 +937,7 @@ Intrinsic RemorseEsIntrinsics[] = {
 	Actor::I_getLastAnimSet,
 	Actor::I_setDead,
 	Item::I_getQLo,
-	PaletteFaderProcess::I_jumpToAllGrey,
+	PaletteFaderProcess::I_jumpToAllWhite,
 	Item::I_equip,
 	Actor::I_setActivity,
 	Item::I_isOn,




More information about the Scummvm-git-logs mailing list