[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