[Scummvm-git-logs] scummvm master -> af7ab851678d6cceb3d12cb7953bbd63ac7955da

mduggan mgithub at guarana.org
Mon Sep 21 07:14:27 UTC 2020


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

Summary:
af7ab85167 UILTIMA8: More crusder intrinisc improvements


Commit: af7ab851678d6cceb3d12cb7953bbd63ac7955da
    https://github.com/scummvm/scummvm/commit/af7ab851678d6cceb3d12cb7953bbd63ac7955da
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-09-21T16:13:19+09:00

Commit Message:
UILTIMA8: More crusder intrinisc improvements

* Implement some PaletteFader methods for Remorse and Regret
* Decode a bunch more Regret intriniscs
* Fixed naming for music process intrinsics

Changed paths:
    engines/ultima/ultima8/audio/music_process.cpp
    engines/ultima/ultima8/audio/music_process.h
    engines/ultima/ultima8/audio/remorse_music_process.h
    engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
    engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
    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
    engines/ultima/ultima8/usecode/u8_intrinsics.h


diff --git a/engines/ultima/ultima8/audio/music_process.cpp b/engines/ultima/ultima8/audio/music_process.cpp
index 243fdfca58..6f81033714 100644
--- a/engines/ultima/ultima8/audio/music_process.cpp
+++ b/engines/ultima/ultima8/audio/music_process.cpp
@@ -45,7 +45,7 @@ MusicProcess::~MusicProcess() {
 	_theMusicProcess = nullptr;
 }
 
-uint32 MusicProcess::I_musicStop(const uint8 * /*args*/,
+uint32 MusicProcess::I_stopMusic(const uint8 * /*args*/,
                                  unsigned int /*argsize*/) {
 	if (_theMusicProcess) _theMusicProcess->playMusic_internal(0);
 	return 0;
@@ -58,5 +58,21 @@ uint32 MusicProcess::I_playMusic(const uint8 *args,
 	return 0;
 }
 
+
+uint32 MusicProcess::I_pauseMusic(const uint8 *args,
+								 unsigned int /*argsize*/) {
+	// This is only used in Crusader: No Regret.
+	warning("TODO: MusicProcess::I_pauseMusic Implement me");
+	return 0;
+}
+
+uint32 MusicProcess::I_unpauseMusic(const uint8 *args,
+								 unsigned int /*argsize*/) {
+	// This is only used in Crusader: No Regret.
+	warning("TODO: MusicProcess::I_unpauseMusic Implement me");
+	return 0;
+}
+
+
 } // End of namespace Ultima8
 } // End of namespace Ultima
diff --git a/engines/ultima/ultima8/audio/music_process.h b/engines/ultima/ultima8/audio/music_process.h
index 9b2b4d503e..b938fefe7e 100644
--- a/engines/ultima/ultima8/audio/music_process.h
+++ b/engines/ultima/ultima8/audio/music_process.h
@@ -73,7 +73,9 @@ public:
 	virtual void restoreTrackState() = 0;
 
 	INTRINSIC(I_playMusic);
-	INTRINSIC(I_musicStop);
+	INTRINSIC(I_stopMusic);
+	INTRINSIC(I_pauseMusic);
+	INTRINSIC(I_unpauseMusic);
 
 };
 
diff --git a/engines/ultima/ultima8/audio/remorse_music_process.h b/engines/ultima/ultima8/audio/remorse_music_process.h
index b7baac08cf..6ee50432b6 100644
--- a/engines/ultima/ultima8/audio/remorse_music_process.h
+++ b/engines/ultima/ultima8/audio/remorse_music_process.h
@@ -77,9 +77,6 @@ public:
 	//! Bring back the track state from before it was put on hold
 	void restoreTrackState() override;
 
-	INTRINSIC(I_playMusic);
-	INTRINSIC(I_musicStop);
-
 	void run() override;
 
 	bool loadData(Common::ReadStream *rs, uint32 version);
diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
index 5355d15d3e..211f2c9095 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
@@ -194,7 +194,7 @@ const char* const ConvertUsecodeCrusader::_intrinsics[] = {
 	"int16 Item::I_getNPCNum(Item *)", // part of same coff set 067, 06D, 089, 08E, 0AD, 0F8, 100, 102, 105, 107, 109, 10B, 10D, 10F, 111, 115, 11C, 123, 129
 	"void PaletteFaderProcess::I_jumpToAllBlack(void)",
 	// 0090
-	"void MusicProcess::I_musicStop(void)",
+	"void MusicProcess::I_stopMusic(void)",
 	"void I_setSomeMovieGlobal(void)", // sets some global (cleared by 93)
 	"void I_playFlic092(char *)", // same coff as 0A9
 	"void I_clearSomeMovieGlobal(void)", // clears some global (set by 91)
diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
index 637234ea70..9e401e4103 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
@@ -40,7 +40,7 @@ private:
 
 const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	// 0000
-	"Intrinsic0000()",
+	"World::I_getAlertActive()",
 	"Item::getFrame(void)",
 	"Item::setFrame(uint16)",
 	"Item::getMapNum(void)",
@@ -50,7 +50,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::isEntirelyOnScreen()",
 	"Item::isNpc(void)",
 	"Item::getZ(void)",
-	"Intrinsic000A()",
+	"World::I_gameDifficulty()",
 	"Item::getQLo(void)",
 	"Item::destroy(void)",
 	"Intrinsic000D()",
@@ -59,56 +59,56 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	// 0010
 	"Item::playSfxCru()",
 	"Item::getShape(void)",
-	"Intrinsic0012()",
-	"Intrinsic0013()",
+	"Item::I_explode()",
+	"UCMachine::I_rndRange()",
 	"Item::legalCreateAtCoords(uint16,uint16,uint16,uint16,uint16)",
 	"Item::andStatus(void)",
-	"Intrinsic0016()",
-	"Intrinsic00C3()",
-	"Intrinsic00DA()",
+	"World::I_getControlledNPCNum()",
+	"Actor::I_getDir()",
+	"Actor::I_getLastAnimSet()",
 	"Intrinsic0019()",
 	"Item::create(uint16,uint16)",
 	"Item::popToCoords(uint16,uint16,uint8)",
-	"Intrinsic00FA()",
+	"Actor::I_setDead()",
 	"Item::push(void)",
-	"Intrinsic001E()",
+	"Item::I_getEtherealTop()",
 	"Item::getQLo(void)",
 	// 0020
 	"Item::setQLo(sint16)",
 	"Item::getQHi(void)",
 	"Item::setQHi(sint16)",
-	"Intrinsic0023()",
+	"Item::I_getClosestDirectionInRange()",
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	"Item::getCY(void)",
 	"Item::getCX(void)",
-	"Intrinsic0027()",
+	"SpriteProcess::I_createSprite()",
 	"Item::setNpcNum(sint16)",
-	"Intrinsic0029()",
+	"AudioProcess::I_playSFXCru()",
 	"Item::setShape()",
 	"Item::pop(void)",
-	"Intrinsic002C()",
+	"AudioProcess::I_stopSFXCru()",
 	"Item::isCompletelyOn(uint16)",
 	"Item::popToContainer(uint16)",
-	"Intrinsic002F()",
+	"Actor::I_getHp()",
 	// 0030
-	"Intrinsic0030()",
+	"Actor::I_getMana()",
 	"Item::getFamily(void)",
 	"Actor::destroyContents(void)",
 	"Intrinsic0033()",
 	"Item::getDirToItem(uint16)",
 	"Intrinsic0035()",
 	"Intrinsic0036()",
-	"Intrinsic0037()",
+	"udioProcess::I_playSFXCru()",
 	"Item::andStatus(void)",
 	"Kernel::resetRef(uint16,ProcessType)",
 	"Item::touch(void)",
 	"Egg::getEggId(void)",
-	"Intrinsic003C()",
-	"Intrinsic003D()",
+	"MainActor::I_addItemCru()",
+	"Actor::I_getMap()",
 	"Item::callEvent11(sint16)",
 	"Intrinsic003F()",
 	// 0040
-	"Intrinsic0040()",
+	"AudioProcess::I_stopSFXCru()",
 	"Item::isOn(uint16)",
 	"Item::getQHi(void)",
 	"Item::isOn(uint16)",
@@ -121,30 +121,30 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::getQHi(void)",
 	"Item::isOn(uint16)",
 	"Item::getQHi(void)",
-	"Intrinsic004D()",
-	"Npc::isDead(void)",
-	"Intrinsic009C()",
+	"Actor::I_getCurrentActivityNo()",
+	"Actor::isDead(void)",
+	"Actor::I_clrInCombat()",
 	// 0050
-	"Intrinsic0050()",
-	"Intrinsic0051()",
-	"Intrinsic0052()",
-	"Intrinsic00BD()",
-	"Intrinsic0054()",
+	"Actor::I_setDefaultActivity0",
+	"Actor::I_setDefaultActivity1",
+	"Actor::I_setDefaultActivity2",
+	"Actor::I_setActivity",
+	"World::I_setControlledNPCNum",
 	"Intrinsic0055()",
-	"Intrinsic0056()",
-	"Intrinsic0057()",
+	"Game::I_isReleaseBuild()",
+	"MainActor::I_setMana()",
 	"Item::use(void)",
 	"Item::setUnkEggType(sint16)",
-	"Intrinsic005A()",
+	"MusicProcess::I_playMusic()",
 	"Item::getSurfaceWeight(void)",
-	"Intrinsic005C()",
+	"Item::I_isCentreOn()",
 	"Item::setFrame(uint16)",
-	"Intrinsic00DA()",
-	"Intrinsic005F()",
+	"Actor::I_getLastAnimSet()",
+	"Ultima8Engine::I_setAvatarInStasis()",
 	// 0060
-	"Intrinsic0060()",
+	"Actor::I_isBusy()",
 	"Intrinsic0061()",
-	"Intrinsic0062()",
+	"Actor::I_doAnim()",
 	"Item::legalCreateAtPoint(uint16,uint16,WorldPoint&)",
 	"Item::getPoint(WorldPoint&)",
 	"Item::legalMoveToPoint(WorldPoint&,uint16,uint16)",
@@ -154,43 +154,43 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::getCY(void)",
 	"Intrinsic006A()",
 	"Intrinsic006B()",
-	"Intrinsic006C()",
+	"MusicProcess::I_pauseMusic()",
 	"Intrinsic006D()",
-	"Intrinsic006E()",
+	"MusicProcess::I_unpauseMusic()",
 	"Item::isInNpc(void)",
 	// 0070
-	"Intrinsic0070()",
-	"Intrinsic0071()",
+	"Ultima8Engine::I_setCruStasis()",
+	"Ultima8Engine::I_clrCruStasis()",
 	"Intrinsic0072()",
-	"Intrinsic0073()",
-	"Npc::isDead(void)",
+	"PaletteFaderProcess::I_fadeFromBlack()",
+	"Actor::isDead(void)",
 	"Item::getNpcNum(void)",
 	"IntrinsicReturn0",
-	"Intrinsic0077()",
+	"Game::I_isViolenceEnabled()",
 	"Item::unequip(sint16)",
 	"Item::andStatus(void)",
 	"Item::move(uint16,uint16,uint8)",
-	"Intrinsic007B()",
-	"Intrinsic007C()",
-	"Intrinsic007D()",
-	"Intrinsic007E()",
-	"Intrinsic007F()",
+	"Ultima8Engine::I_getUnkCrusaderFlag()",
+	"Ultima8Engine::I_setUnkCrusaderFlag()",
+	"Ultima8Engine::I_clrUnkCrusaderFlag()",
+	"Actor::I_turnToward()",
+	"PaletteFaderProcess::I_fadeToBlack()",
 	// 0080
-	"Intrinsic0080()",
-	"Intrinsic0081()",
-	"Intrinsic0082()",
-	"Intrinsic0083()",
-	"Intrinsic0084()",
+	"MainActor::I_clrKeycards()",
+	"MusicProcess::I_stopMusic()",
+	"PaletteFaderProcess::I_jumpToAllBlack()",
+	"I_setUnkFlagA4()",
+	"I_clearUnkFlagA4()",
 	"Intrinsic0085()",
 	"teleportToEgg(sint16,int,uint8)",
-	"Intrinsic0087()",
-	"Intrinsic0088()",
-	"Intrinsic00BD()",
+	"PaletteFaderProcess::I_fadeFromBlack()",
+	"Actor::I_clrImmortal()",
+	"Actor::I_setActivity()",
 	"Item::getQuality(void)",
 	"Item::setQuality(sint16)",
-	"Intrinsic008C()",
-	"Intrinsic008D()",
-	"Intrinsic008E()",
+	"MainActor::I_getMaxEnergy()",
+	"CameraProcess::I_moveTo(x,y,z)",
+	"Actor::I_setImmortal()",
 	"Camera::getX(void)",
 	// 0090
 	"Camera::getY(void)",
@@ -202,12 +202,12 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::setBroken()",
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	"Item::getNpcNum(void)",
-	"Intrinsic0099()",
+	"Ultima8Engine::I_moveKeyDownRecently()",
 	"teleportToEgg(sint16,uint8)",
-	"Intrinsic009B()",
-	"Intrinsic009C()",
-	"Intrinsic009D()",
-	"Intrinsic009E()",
+	"Actor::I_createActor()",
+	"Actor::I_clrInCombat()",
+	"PaletteFaderProcess::I_jumpToGreyScale()",
+	"PaletteFaderProcess::I_jumpToNormalPalette()",
 	"Intrinsic009F()",
 	// 00A0
 	"Item::andStatus(void)",
@@ -217,11 +217,11 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::overlaps(uint16)",
 	"Item::isOn(uint16)",
 	"Item::getQHi(void)",
-	"Intrinsic00DA()",
+	"Actor::I_getLastAnimSet()",
 	"Item::getCY(void)",
 	"Intrinsic00A9()",
 	"Item::isOn(uint16)",
-	"Npc::isDead(void)",
+	"Actor::isDead(void)",
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	"Intrinsic00AD()",
 	"Item::getQHi(void)",
@@ -238,48 +238,48 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::getCY(void)",
 	"Item::isOn(uint16)",
 	"Item::getFootpad(sint16&,sint16&,sint16&)",
-	"Npc::isDead(void)",
-	"Npc::createNPCCru()",
-	"Intrinsic00BD()",
-	"Intrinsic00BE()",
+	"Actor::isDead(void)",
+	"Actor::createNPCCru()",
+	"Actor::I_setActivity()",
+	"KeypadGump::I_showKeypad()",
 	"Item::andStatus(void)",
 	// 00C0
-	"Intrinsic00C0()",
-	"Intrinsic00C1()",
+	"ComputerGump::I_readComputer()",
+	"UCMachine::I_numToStr()",
 	"IntrinsicReturn0",
-	"Intrinsic00C3()",
+	"Actor::I_getDir()",
 	"Item::getQHi(void)",
 	"Item::setQuality(sint16)",
 	"Item::hurl(sint16,sint16,sint16,sint16)",
-	"Intrinsic00C7()",
+	"Actor::I_addHp()",
 	"Intrinsic00C8()",
 	"Item::callEvent0A(sint16)",
 	"Item::setBroken()",
 	"Item::isOn(uint16)",
-	"Intrinsic00CC()",
-	"Intrinsic00CD()",
+	"Actor::I_teleport()",
+	"Item::I_getDirFromTo16()",
 	"Item::getQHi(void)",
 	"Item::isOn(uint16)",
 	// 00D0
-	"Intrinsic00D0()",
-	"Intrinsic00D1()",
-	"Intrinsic00D2()",
-	"Intrinsic00FA()",
-	"Camera::getY(void)",
-	"Intrinsic00D5()",
-	"Intrinsic00D6()",
-	"Intrinsic00D7()",
-	"Intrinsic00D8()",
-	"Intrinsic00D9()",
-	"Intrinsic00DA()",
-	"Intrinsic00DB()",
+	"Actor::I_isInCombat()",
+	"Actor::I_getNPCDataField0x4()",
+	"Actor::I_setCombatTactic()",
+	"Actor::I_setDead())",
+	"CameraProcess::I_getCameraY()",
+	"Actor::I_getEquip()",
+	"Actor::I_setEquip()",
+	"Actor::I_getDefaultActivity0()",
+	"Actor::I_getDefaultActivity1()",
+	"Actor::I_getDefaultActivity2()",
+	"Actor::I_getLastAnimSet()",
+	"Actor::I_isInCombat()",
 	"Item::getQLo(void)",
 	"Item::getQHi(void)",
 	"Item::getNpcNum(void)",
 	"Intrinsic00DF()",
 	// 00E0
 	"Item::hurl(sint16,sint16,sint16,sint16)",
-	"Intrinsic00FA()",
+	"Actor::I_setDead()",
 	"Item::getQLo(void)",
 	"Item::getCY(void)",
 	"Item::getNpcNum(void)",
@@ -303,22 +303,22 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	"Item::getNpcNum(void)",
 	"Item::andStatus(void)",
-	"Intrinsic00FA()",
+	"Actor::I_setDead()",
 	"Item::getQLo(void)",
-	"Intrinsic00FA()",
-	"Intrinsic00FB()",
-	"Intrinsic00FC()",
+	"Actor::I_setDead()",
+	"Dtable::I_getMaxHPForNPC()",
+	"Actor::I_setHP()",
 	"Item::getQLo(void)",
 	"Intrinsic00FE()",
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	// 0100
 	"Item::andStatus(void)",
 	"Item::isOn(uint16)",
-	"Npc::isDead(void)",
-	"Intrinsic00BD()",
+	"Actor::isDead(void)",
+	"Actor::I_setActivity()",
 	"Item::getQHi(void)",
-	"Intrinsic00DA()",
-	"Intrinsic00FA()",
+	"Actor::I_getLastAnimSet()",
+	"Actor::I_setDead()",
 	"Item::getQLo(void)",
 	"Item::isOn(uint16)",
 	"Item::getQHi(void)",
@@ -330,18 +330,18 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	// 0110
 	"Item::isOn(uint16)",
-	"Intrinsic0111()",
+	"MainActor::I_hasKeycard()",
 	"IntrinsicReturn0",
-	"Npc::isDead(void)",
-	"Intrinsic0088()",
-	"Intrinsic00C1()",
+	"Actor::isDead(void)",
+	"Actor::I_clrImmortal()",
+	"UCMachine::I_numToStr()",
 	"Item::getQHi(void)",
-	"Intrinsic00BD()",
+	"Actor::I_setActivity()",
 	"Item::andStatus(void)",
 	"Item::getNpcNum(void)",
 	"Item::andStatus(void)",
 	"Item::getNpcNum(void)",
-	"Intrinsic011C()",
+	"Item::I_isCrusTypeNPC()",
 	"Item::andStatus(void)",
 	"Item::getNpcNum(void)",
 	"Item::AvatarStoleSomehting(uint16)",
@@ -360,7 +360,7 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Item::getNpcNum(void)",
 	"Item::andStatus(void)",
 	"Item::getNpcNum(void)",
-	"Intrinsic00C3()",
+	"Actor::I_getDir()",
 	"Item::andStatus(void)",
 	// 0130
 	"Item::getNpcNum(void)",
@@ -371,45 +371,45 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
 	"Camera::getY(void)",
 	"Camera::getZ(void)",
 	"Intrinsic0137()",
-	"Intrinsic009C()",
+	"Actor::I_clrInCombat()",
 	"Item::getTypeFlagCrusader(sint16)",
 	"Item::getNpcNum(void)",
 	"Item::hurl(sint16,sint16,sint16,sint16)",
 	"Item::getCY(void)",
 	"Item::getCZ(void)",
 	"Item::setFrame(uint16)",
-	"Intrinsic013F()",
+	"AudioProcess::I_playAmbientSFX()",
 	// 0140
-	"Intrinsic0140()",
-	"Intrinsic0141()",
-	"Intrinsic0142()",
-	"Npc::isDead(void)",
-	"Intrinsic00FA()",
+	"AudioProcess::I_isSFXPlaying()",
+	"World::I_clrAlertActiveRegret()",
+	"PaletteFaderProcess::I_fadeToGivenColor()",
+	"Actor::isDead(void)",
+	"Actor::I_setDead()",
 	"Intrinsic0145()",
-	"Intrinsic0146()",
-	"Intrinsic0147()",
+	"PaletteFaderProcess::I_jumpToAllGrey()",
+	"Item::I_getFamilyOfType()",
 	"Item::getNpcNum(void)",
 	"Item::getQLo(void)",
 	"Item::andStatus(void)",
 	"Ultima8Engine::getCurrentTimerTick()",
-	"Intrinsic014C()",
-	"Intrinsic014D()",
-	"Intrinsic003C()",
+	"World::I_setAlertActiveRegret()",
+	"Ultima8Engine::I_getAvatarInStasis()",
+	"MainActor::I_addItemCru()",
 	"Egg::getEggXRange(void)",
 	// 0150
-	"Intrinsic009C()",
+	"Actor::I_clrInCombat()",
 	"Intrinsic0072()",
 	"Item::setFrame(uint16)",
-	"Intrinsic00C1()",
-	"Intrinsic00C3()",
-	"Intrinsic00C1()",
+	"UCMachine::I_numToStr()",
+	"Actor::I_getDir()",
+	"UCMachine::I_numToStr()",
 	"Item::isOn(uint16)",
-	"Intrinsic00C3()",
-	"Intrinsic00FA()",
+	"Actor::I_getDir()",
+	"Actor::I_setDead()",
 	"Item::getQHi(void)",
 	"Item::getQLo(void)",
-	"Intrinsic00C1()",
-	"Intrinsic00C3()",
+	"UCMachine::I_numToStr()",
+	"Actor::I_getDir()",
 	"Intrinsic015D()",
 	0
 };
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index 24c2014458..ef1f4fd91e 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -151,6 +151,10 @@ uint32 PaletteFaderProcess::I_fadeToBlack(const uint8 *args,
 	if (argsize > 0) {
 		ARG_UINT16(n);
 		nsteps = n;
+		if (argsize > 2) {
+			ARG_UINT16(unk);
+			warning("PaletteFaderProcess::I_fadeToBlackWithParam: Ignoring param %d", unk);
+		}
 	}
 
 	_fader = new PaletteFaderProcess(0x00000000, false, 0x7FFF, nsteps, true);
@@ -166,6 +170,10 @@ uint32 PaletteFaderProcess::I_fadeFromBlack(const uint8 *args,
 	if (argsize > 0) {
 		ARG_UINT16(n);
 		nsteps = n;
+		if (argsize > 2) {
+			ARG_UINT16(unk);
+			warning("PaletteFaderProcess::I_fadeFromBlackWithParam: Ignoring param %d", unk);
+		}
 	}
 
 	_fader = new PaletteFaderProcess(0x00000000, true, 0x7FFF, nsteps, false);
@@ -209,6 +217,12 @@ static const int16 GreyFadeMatrix[] = {612, 1202, 233, 0,
 					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 AllBlackMatrix[] = {0, 0, 0, 0,
 					0, 0, 0, 0,
 					0, 0, 0, 0
@@ -223,6 +237,26 @@ unsigned int /*argsize*/) {
 	return Kernel::get_instance()->addProcess(_fader);
 }
 
+uint32 PaletteFaderProcess::I_fadeToGivenColor(const uint8 *args,
+		unsigned int /*argsize*/) {
+	if (_fader && _fader->_priority > 0x7FFF) return 0;
+	else if (_fader) _fader->terminate();
+
+	ARG_UINT8(r);
+	ARG_UINT8(g);
+	ARG_UINT8(b);
+	ARG_UINT16(nsteps);
+	ARG_UINT16(unk);
+
+	uint32 target = (r << 16) | (g << 8) | (b << 0);
+
+	warning("PaletteFaderProcess::I_fadeToGivenColor: Ignoring param %d", unk);
+
+	_fader = new PaletteFaderProcess(target, true, 0x7FFF, nsteps, false);
+	return Kernel::get_instance()->addProcess(_fader);
+}
+
+
 uint32 PaletteFaderProcess::I_jumpToGreyScale(const uint8 * /*args*/,
         unsigned int /*argsize*/) {
 	if (_fader && _fader->_priority > 0x7FFF) return 0;
@@ -243,16 +277,44 @@ uint32 PaletteFaderProcess::I_jumpToAllBlack(const uint8 * /*args*/,
 	return 0;
 }
 
-uint32 PaletteFaderProcess::I_jumpToNormalPalette(const uint8 * /*args*/,
+uint32 PaletteFaderProcess::I_jumpToAllGrey(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,
-													 NoFadeMatrix);
+													 AllGreyMatrix);
+	return 0;
+}
+
+uint32 PaletteFaderProcess::I_jumpToAllGivenColor(const uint8 *args,
+		unsigned int /*argsize*/) {
+	if (_fader && _fader->_priority > 0x7FFF) return 0;
+	else if (_fader) _fader->terminate();
+
+	ARG_UINT8(r);
+	ARG_UINT8(g);
+	ARG_UINT8(b);
+
+	const int16 color_matrix[] = {0, 0, 0, r << 4,
+						0, 0, 0, g << 4,
+						0, 0, 0, b << 4
+	};
+
+	PaletteManager::get_instance()->transformPalette(PaletteManager::Pal_Game,
+													 color_matrix);
 	return 0;
 }
 
+uint32 PaletteFaderProcess::I_jumpToNormalPalette(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,
+													 NoFadeMatrix);
+	return 0;
+}
 
 } // End of namespace Ultima8
 } // End of namespace Ultima
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.h b/engines/ultima/ultima8/graphics/palette_fader_process.h
index c098733005..8838419b16 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.h
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.h
@@ -58,8 +58,11 @@ public:
 	INTRINSIC(I_fadeFromBlack);
 	INTRINSIC(I_lightningBolt);
 	INTRINSIC(I_fadeToGreyScale);
+	INTRINSIC(I_fadeToGivenColor);
 	INTRINSIC(I_jumpToGreyScale);
 	INTRINSIC(I_jumpToAllBlack);
+	INTRINSIC(I_jumpToAllGrey);
+	INTRINSIC(I_jumpToAllGivenColor);
 	INTRINSIC(I_jumpToNormalPalette);
 
 	bool loadData(Common::ReadStream *rs, uint32 version);
diff --git a/engines/ultima/ultima8/usecode/regret_intrinsics.h b/engines/ultima/ultima8/usecode/regret_intrinsics.h
index 4047d50650..39bfb2ae97 100644
--- a/engines/ultima/ultima8/usecode/regret_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/regret_intrinsics.h
@@ -74,7 +74,7 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_getCX, // Intrinsic026()
 	SpriteProcess::I_createSprite, // Intrinsic027()
 	Item::I_setNpcNum, // Intrinsic028()
-	0, // Intrinsic029()
+	AudioProcess::I_playSFXCru, // Intrinsic029() TODO: Not exactly the same.
 	Item::I_setShape, // Intrinsic02A()
 	Item::I_pop, // Intrinsic02B()
 	AudioProcess::I_stopSFXCru, // Intrinsic02C(), I_stopAllSFXForItem
@@ -89,12 +89,12 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_getDirToItem, // Intrinsic034()
 	0, // Intrinsic035()
 	0, // Intrinsic036()
-	0, // Intrinsic037()
+	AudioProcess::I_playSFXCru, // Intrinsic037() TODO: Not exactly the same.
 	Item::I_andStatus, // Intrinsic038()
 	Kernel::I_resetRef, // Intrinsic039()
 	Item::I_touch, // Intrinsic03A()
 	Egg::I_getEggId, // Intrinsic03B()
-	0, // Intrinsic03C()
+	MainActor::I_addItemCru, // Intrinsic03C()
 	Actor::I_getMap, // Intrinsic03D()
 	Item::I_cast, // Intrinsic03E()
 	0, // Intrinsic03F()
@@ -126,7 +126,7 @@ Intrinsic RegretIntrinsics[] = {
 	MainActor::I_setMana, // Intrinsic057()
 	Item::I_use, // Intrinsic058()
 	0, // Intrinsic059()
-	0, // Intrinsic05A()
+	MusicProcess::I_playMusic, // Intrinsic05A()
 	Item::I_getSurfaceWeight, // Intrinsic05B()
 	Item::I_isCentreOn, // Intrinsic05C()
 	Item::I_setFrame, // Intrinsic05D()
@@ -145,15 +145,15 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_getCY, // Intrinsic069()
 	0, // Intrinsic06A()
 	0, // Intrinsic06B()
-	0, // Intrinsic06C()
+	MusicProcess::I_pauseMusic, // Intrinsic06C()
 	0, // Intrinsic06D()
-	0, // Intrinsic06E()
+	MusicProcess::I_unpauseMusic, // Intrinsic06E()
 	Item::I_isInNpc, // Intrinsic06F()
 	// 0070
-	0, // Intrinsic070()
-	0, // Intrinsic071()
+	Ultima8Engine::I_setCruStasis, // Intrinsic070()
+	Ultima8Engine::I_clrCruStasis, // Intrinsic071()
 	0, // Intrinsic072()
-	0, // Intrinsic073()
+	PaletteFaderProcess::I_fadeFromBlack, // Intrinsic073()
 	Actor::I_isDead, // Intrinsic074()
 	Actor::I_getNpcNum, // Intrinsic075()
 	0, // Intrinsic076()
@@ -161,20 +161,20 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_unequip, // Intrinsic078()
 	Item::I_andStatus, // Intrinsic079()
 	Item::I_move, // Intrinsic07A()
-	0, // Intrinsic07B()
-	0, // Intrinsic07C()
-	0, // Intrinsic07D()
+	Ultima8Engine::I_getUnkCrusaderFlag, // Intrinsic07B()
+	Ultima8Engine::I_setUnkCrusaderFlag, // Intrinsic07C()
+	Ultima8Engine::I_clrUnkCrusaderFlag, // Intrinsic07D()
 	Actor::I_turnToward, // Intrinsic07E()
-	0, // Intrinsic07F()
+	PaletteFaderProcess::I_fadeToBlack, // Intrinsic07F()
 	// 0080
 	MainActor::I_clrKeycards, // Intrinsic080()
-	0, // Intrinsic081()
-	0, // Intrinsic082()
-	0, // Intrinsic083()
-	0, // Intrinsic084()
+	MusicProcess::I_stopMusic, // Intrinsic081()
+	PaletteFaderProcess::I_jumpToAllBlack, // Intrinsic082()
+	0, // I_setUnkFlagA4()
+	0, // I_clearUnkFlagA4()
 	0, // Intrinsic085()
 	MainActor::I_teleportToEgg, // Intrinsic086()
-	0, // Intrinsic087()
+	PaletteFaderProcess::I_fadeFromBlack, // Intrinsic087()
 	Actor::I_clrImmortal, // Intrinsic088()
 	Actor::I_setActivity, // Intrinsic089()
 	Item::I_getQuality, // Intrinsic08A()
@@ -198,8 +198,8 @@ Intrinsic RegretIntrinsics[] = {
 	Actor::I_createActor, // Intrinsic09B()
 	Actor::I_clrInCombat, // Intrinsic09C()
 	PaletteFaderProcess::I_jumpToGreyScale, // Intrinsic09D()
-	0, // Intrinsic09E()
-	0, // Intrinsic09F()
+	PaletteFaderProcess::I_jumpToNormalPalette, // Intrinsic09E()
+	0, // Intrinsic09F(), same as Int05F in Remorse
 	// 00A0
 	Item::I_andStatus, // Intrinsic0A0()
 	Egg::I_getUnkEggType, // Intrinsic0A1()
@@ -223,8 +223,8 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_hurl, // Intrinsic0B2()
 	Item::I_andStatus, // Intrinsic0B3()
 	Item::I_getDirToCoords, // Intrinsic0B4()
-	0, // Intrinsic0B5()
-	0, // Intrinsic0B6()
+	0, // MainActor::I_addItemSimple()
+	0, // I_updateInventoryUI() - probably not needed?
 	Actor::I_getNpcNum, // Intrinsic0B7()
 	Item::I_getCY, // Intrinsic0B8()
 	Item::I_isOn, // Intrinsic0B9()
@@ -232,12 +232,12 @@ Intrinsic RegretIntrinsics[] = {
 	Actor::I_isDead, // Intrinsic0BB()
 	Actor::I_createActorCru, // Intrinsic0BC()
 	Actor::I_setActivity, // Intrinsic0BD()
-	0, // Intrinsic0BE()
+	KeypadGump::I_showKeypad, // Intrinsic0BE()
 	Item::I_andStatus, // Intrinsic0BF()
 	// 00C0
-	0, // Intrinsic0C0()
+	ComputerGump::I_readComputer, // Intrinsic0C0()
 	UCMachine::I_numToStr, // Intrinsic0C1()
-	0, // Intrinsic0C2()
+	0, // Intrinsic0C2() - return 0
 	Actor::I_getDir, // Intrinsic0C3()
 	Item::I_getQHi, // Intrinsic0C4()
 	Item::I_setQuality, // Intrinsic0C5()
@@ -291,7 +291,7 @@ Intrinsic RegretIntrinsics[] = {
 	Actor::I_getNpcNum, // Intrinsic0F2()
 	Item::I_hurl, // Intrinsic0F3()
 	Actor::I_getNpcNum, // Intrinsic0F4()
-	0, // Intrinsic0F5()
+	Item::I_hurl, // Intrinsic0F5()
 	Actor::I_getNpcNum, // Intrinsic0F6()
 	Item::I_andStatus, // Intrinsic0F7()
 	Actor::I_setDead, // Intrinsic0F8()
@@ -322,7 +322,7 @@ Intrinsic RegretIntrinsics[] = {
 	// 0110
 	Item::I_isOn, // Intrinsic110()
 	MainActor::I_hasKeycard, // Intrinsic111()
-	0, // Intrinsic112()
+	0, // Intrinsic112() - null function (return 0)
 	Actor::I_isDead, // Intrinsic113()
 	Actor::I_clrImmortal, // Intrinsic114()
 	UCMachine::I_numToStr, // Intrinsic115()
@@ -361,7 +361,7 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_andStatus, // Intrinsic134()
 	CameraProcess::I_getCameraY, // Intrinsic135()
 	CameraProcess::I_getCameraZ, // Intrinsic136()
-	0, // Intrinsic137()
+	0, // Intrinsic137(), same as Int05D in Remorse
 	Actor::I_clrInCombat, // Intrinsic138()
 	Item::I_getTypeFlag, // Intrinsic139()
 	Actor::I_getNpcNum, // Intrinsic13A()
@@ -369,15 +369,15 @@ Intrinsic RegretIntrinsics[] = {
 	Item::I_getCY, // Intrinsic13C()
 	Item::I_getCZ, // Intrinsic13D()
 	Item::I_setFrame, // Intrinsic13E()
-	0, // Intrinsic13F()
+	AudioProcess::I_playAmbientSFX, // Intrinsic13F()
 	// 0140
-	0, // Intrinsic140()
+	AudioProcess::I_isSFXPlaying, // Intrinsic140()
 	0, // TODO: World::I_clrAlertActive, but not the same as remorse
-	0, // Intrinsic142()
+	PaletteFaderProcess::I_fadeToGivenColor, // Intrinsic142()
 	Actor::I_isDead, // Intrinsic143()
 	Actor::I_setDead, // Intrinsic144()
 	0, // Intrinsic145()
-	0, // Intrinsic146()
+	PaletteFaderProcess::I_jumpToAllGrey, // Intrinsic146()
 	Item::I_getFamilyOfType, // Intrinsic147()
 	Actor::I_getNpcNum, // Intrinsic148()
 	Item::I_getQLo, // Intrinsic149()
@@ -385,7 +385,7 @@ Intrinsic RegretIntrinsics[] = {
 	Ultima8Engine::I_getCurrentTimerTick, // Intrinsic14B()
 	0, // TODO: World::I_setAlertActive, but not the same as remorse
 	Ultima8Engine::I_getAvatarInStasis, // Intrinsic14D()
-	0, // Intrinsic14E()
+	MainActor::I_addItemCru, // Intrinsic14E()
 	Egg::I_getEggXRange, // Intrinsic14F()
 	// 0150
 	Actor::I_clrInCombat, // Intrinsic150()
diff --git a/engines/ultima/ultima8/usecode/remorse_intrinsics.h b/engines/ultima/ultima8/usecode/remorse_intrinsics.h
index 3f0db04185..f92001ec31 100644
--- a/engines/ultima/ultima8/usecode/remorse_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/remorse_intrinsics.h
@@ -188,7 +188,7 @@ Intrinsic RemorseIntrinsics[] = {
 	Item::I_getNpcNum, // based on same coff as 102 (-> variable name in TRIGGER::ordinal21)
 	PaletteFaderProcess::I_jumpToAllBlack, // TODO: should also resume cycle process.
 	// 0x090
-	MusicProcess::I_musicStop, // void Intrinsic090(void)
+	MusicProcess::I_stopMusic, // void Intrinsic090(void)
 	0, // void Intrinsic091(void)
 	0, // TODO: I_playFlic(char *)? void Intrinsic092(void)
 	0, // void Intrinsic093(void)
@@ -200,10 +200,10 @@ Intrinsic RemorseIntrinsics[] = {
 	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
-	0, // TODO: PaletteFaderProcess::I_fadeFromBlackWithParam
+	PaletteFaderProcess::I_fadeFromBlack, // fade from black with nsteps and another unknown param
 	PaletteFaderProcess::I_fadeToBlack, // fade to black with number of steps
-	0, // TODO: PaletteFaderProcess::I_fadeToBlackWithParam
-	0, // TODO: PaletteFaderProcess::I_fadeToColor
+	PaletteFaderProcess::I_fadeToBlack, // fade to black with nsteps and another unknown param
+	PaletteFaderProcess::I_fadeToGivenColor,
 	// 0x0A0
 	Actor::I_setDead,
 	Item::I_getQLo, // based on same coff set as 02B
@@ -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
-	0, // TODO: PaletteFaderProcess::I_setPalToAllGrey // sets all colors to 0x3F3F3F
+	PaletteFaderProcess::I_jumpToAllGrey,
 	Actor::I_setActivity, // void Intrinsic0DB(6 bytes)
 	Item::I_isOn,
 	Actor::I_getLastActivityNo, // void Intrinsic0DD(4 bytes)
diff --git a/engines/ultima/ultima8/usecode/u8_intrinsics.h b/engines/ultima/ultima8/usecode/u8_intrinsics.h
index a59f86696f..7a1b68c3fe 100644
--- a/engines/ultima/ultima8/usecode/u8_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/u8_intrinsics.h
@@ -319,7 +319,7 @@ Intrinsic U8Intrinsics[] = {
 	AudioProcess::I_stopSFX,        // int16 ObjID
 	0, //U
 	0, //U
-	MusicProcess::I_musicStop,
+	MusicProcess::I_stopMusic,
 	0, //U
 	0, //U
 	FireballProcess::I_TonysBalls,




More information about the Scummvm-git-logs mailing list