[Scummvm-git-logs] scummvm master -> bef7e08c6c36cae911627c6d4fa0a137e0b2d39c
mduggan
mgithub at guarana.org
Sun Sep 6 05:57:00 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:
bef7e08c6c ULTIMA8: Add initial intrinsic table for No Regret
Commit: bef7e08c6c36cae911627c6d4fa0a137e0b2d39c
https://github.com/scummvm/scummvm/commit/bef7e08c6c36cae911627c6d4fa0a137e0b2d39c
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-09-06T14:56:28+09:00
Commit Message:
ULTIMA8: Add initial intrinsic table for No Regret
The initial list comes from the Pentagram codebase, will need some disassembly
of regret.exe to get much further.
Also removed the (now unused) code that did usecode disassembly things for
Pentagram.
Changed paths:
A engines/ultima/ultima8/convert/convert_usecode.h
A engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
A engines/ultima/ultima8/usecode/regret_intrinsics.h
engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
engines/ultima/ultima8/games/start_crusader_process.cpp
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/usecode/uc_machine.cpp
engines/ultima/ultima8/usecode/uc_machine.h
diff --git a/engines/ultima/ultima8/convert/convert_usecode.h b/engines/ultima/ultima8/convert/convert_usecode.h
new file mode 100644
index 0000000000..098ace91e0
--- /dev/null
+++ b/engines/ultima/ultima8/convert/convert_usecode.h
@@ -0,0 +1,40 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ULTIMA8_CONVERT_CONVERTUSECODE_H
+#define ULTIMA8_CONVERT_CONVERTUSECODE_H
+
+namespace Ultima {
+namespace Ultima8 {
+
+class ConvertUsecode {
+public:
+ virtual ~ConvertUsecode() {}
+
+ virtual const char* const *intrinsics() = 0;
+ virtual const char* const *event_names() = 0;
+};
+
+} // End of namespace Ultima8
+} // End of namespace Ultima
+
+#endif
diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
index b7e0286f60..5355d15d3e 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_crusader.h
@@ -23,11 +23,7 @@
#ifndef ULTIMA8_CONVERT_U8_CONVERTUSECODECRUSADER_H
#define ULTIMA8_CONVERT_U8_CONVERTUSECODECRUSADER_H
-#ifndef INCLUDE_CONVERTUSECODEU8_WITHOUT_BRINGING_IN_FOLD
-#include "ultima/ultima8/convert/convert.h"
-#else
-#include "ultima/ultima8/convert/u8/convert_usecode_u8.h"
-#endif
+#include "ultima/ultima8/convert/convert_usecode.h"
namespace Ultima {
namespace Ultima8 {
@@ -36,32 +32,10 @@ class ConvertUsecodeCrusader : public ConvertUsecode {
public:
const char* const *intrinsics() override { return _intrinsics; };
const char* const *event_names() override { return _event_names; };
- void readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset) override;
- void readevents(Common::SeekableReadStream *ucfile, const UsecodeHeader &/*uch*/) override
- {
-#ifndef INCLUDE_CONVERTUSECODEU8_WITHOUT_BRINGING_IN_FOLD
- EventMap.clear();
- uint32 num_crusader_routines = uch.offset / 6;
- for (uint32 i=0; i<32; ++i)
- {
- /*uint32 size =*/ ucfile->readUint16LE();
- uint32 offset = ucfile->readUint32LE();
- EventMap[offset] = i;
-#ifdef DISASM_DEBUG
- pout << "Crusader Routine: " << i << ": " << Std::hex << Std::setw(4) << offset << Std::dec << endl;
-#endif
- }
-#endif
- }
-
- void readOp(TempOp &op, Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
- { readOpGeneric(op, ucfile, dbg_symbol_offset, debugSymbols, done, true); };
- Node *readOp(Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
- { return readOpGeneric(ucfile, dbg_symbol_offset, debugSymbols, done, true); };
+ static const char* const _event_names[];
private:
static const char* const _intrinsics[512];
- static const char* const _event_names[];
};
// By convention, last pushed argument goes first on the list.
@@ -423,7 +397,7 @@ const char * const ConvertUsecodeCrusader::_event_names[] = {
"justMoved()", // 0x12
"avatarStoleSomething(uword)", // 0x13
"animGetHit()", // 0x14
- "guardianBark(word)", // 0x15
+ "unhatch(word)", // 0x15
"func16", // 0x16
"func17", // 0x17
"func18", // 0x18
@@ -437,22 +411,6 @@ const char * const ConvertUsecodeCrusader::_event_names[] = {
0
};
-void ConvertUsecodeCrusader::readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset) {
- #ifdef DISASM_DEBUG
- perr << Std::setfill('0') << Std::hex;
- perr << "unknown1: " << Std::setw(4) << ucfile->readUint32LE() << endl; // unknown
- uch.maxOffset = ucfile->readUint32LE() - 0x0C; // file size
- perr << "maxoffset: " << Std::setw(4) << maxOffset << endl;
- perr << "unknown2: " << Std::setw(4) << ucfile->readUint32LE() << endl; // unknown
- curOffset = 0;
- #else
- ucfile->readUint32LE(); // unknown
- uch._maxOffset = ucfile->readUint32LE() - 0x0C; // file size
- ucfile->readUint32LE(); // unknown
- curOffset = 0;
- #endif
-}
-
} // End of namespace Ultima8
} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
new file mode 100644
index 0000000000..637234ea70
--- /dev/null
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
@@ -0,0 +1,421 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ULTIMA8_CONVERT_U8_CONVERTUSECODEREGRET_H
+#define ULTIMA8_CONVERT_U8_CONVERTUSECODEREGRET_H
+
+#include "ultima/ultima8/convert/convert_usecode.h"
+#include "ultima/ultima8/convert/crusader/convert_usecode_crusader.h"
+
+namespace Ultima {
+namespace Ultima8 {
+
+class ConvertUsecodeRegret : public ConvertUsecode {
+public:
+ const char* const *intrinsics() override { return _intrinsics; };
+ const char* const *event_names() override { return ConvertUsecodeCrusader::_event_names; };
+
+private:
+ static const char* const _intrinsics[512];
+};
+
+const char* const ConvertUsecodeRegret::_intrinsics[] = {
+ // 0000
+ "Intrinsic0000()",
+ "Item::getFrame(void)",
+ "Item::setFrame(uint16)",
+ "Item::getMapNum(void)",
+ "Item::getStatus(void)",
+ "Item::orStatus(sint16)",
+ "Item::equip(sint16)",
+ "Item::isEntirelyOnScreen()",
+ "Item::isNpc(void)",
+ "Item::getZ(void)",
+ "Intrinsic000A()",
+ "Item::getQLo(void)",
+ "Item::destroy(void)",
+ "Intrinsic000D()",
+ "Item::getX(void)",
+ "Item::getY(void)",
+ // 0010
+ "Item::playSfxCru()",
+ "Item::getShape(void)",
+ "Intrinsic0012()",
+ "Intrinsic0013()",
+ "Item::legalCreateAtCoords(uint16,uint16,uint16,uint16,uint16)",
+ "Item::andStatus(void)",
+ "Intrinsic0016()",
+ "Intrinsic00C3()",
+ "Intrinsic00DA()",
+ "Intrinsic0019()",
+ "Item::create(uint16,uint16)",
+ "Item::popToCoords(uint16,uint16,uint8)",
+ "Intrinsic00FA()",
+ "Item::push(void)",
+ "Intrinsic001E()",
+ "Item::getQLo(void)",
+ // 0020
+ "Item::setQLo(sint16)",
+ "Item::getQHi(void)",
+ "Item::setQHi(sint16)",
+ "Intrinsic0023()",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getCY(void)",
+ "Item::getCX(void)",
+ "Intrinsic0027()",
+ "Item::setNpcNum(sint16)",
+ "Intrinsic0029()",
+ "Item::setShape()",
+ "Item::pop(void)",
+ "Intrinsic002C()",
+ "Item::isCompletelyOn(uint16)",
+ "Item::popToContainer(uint16)",
+ "Intrinsic002F()",
+ // 0030
+ "Intrinsic0030()",
+ "Item::getFamily(void)",
+ "Actor::destroyContents(void)",
+ "Intrinsic0033()",
+ "Item::getDirToItem(uint16)",
+ "Intrinsic0035()",
+ "Intrinsic0036()",
+ "Intrinsic0037()",
+ "Item::andStatus(void)",
+ "Kernel::resetRef(uint16,ProcessType)",
+ "Item::touch(void)",
+ "Egg::getEggId(void)",
+ "Intrinsic003C()",
+ "Intrinsic003D()",
+ "Item::callEvent11(sint16)",
+ "Intrinsic003F()",
+ // 0040
+ "Intrinsic0040()",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Intrinsic004D()",
+ "Npc::isDead(void)",
+ "Intrinsic009C()",
+ // 0050
+ "Intrinsic0050()",
+ "Intrinsic0051()",
+ "Intrinsic0052()",
+ "Intrinsic00BD()",
+ "Intrinsic0054()",
+ "Intrinsic0055()",
+ "Intrinsic0056()",
+ "Intrinsic0057()",
+ "Item::use(void)",
+ "Item::setUnkEggType(sint16)",
+ "Intrinsic005A()",
+ "Item::getSurfaceWeight(void)",
+ "Intrinsic005C()",
+ "Item::setFrame(uint16)",
+ "Intrinsic00DA()",
+ "Intrinsic005F()",
+ // 0060
+ "Intrinsic0060()",
+ "Intrinsic0061()",
+ "Intrinsic0062()",
+ "Item::legalCreateAtPoint(uint16,uint16,WorldPoint&)",
+ "Item::getPoint(WorldPoint&)",
+ "Item::legalMoveToPoint(WorldPoint&,uint16,uint16)",
+ "Item::fall(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Kernel::getNumProcesses(uint16,ProcessType)",
+ "Item::getCY(void)",
+ "Intrinsic006A()",
+ "Intrinsic006B()",
+ "Intrinsic006C()",
+ "Intrinsic006D()",
+ "Intrinsic006E()",
+ "Item::isInNpc(void)",
+ // 0070
+ "Intrinsic0070()",
+ "Intrinsic0071()",
+ "Intrinsic0072()",
+ "Intrinsic0073()",
+ "Npc::isDead(void)",
+ "Item::getNpcNum(void)",
+ "IntrinsicReturn0",
+ "Intrinsic0077()",
+ "Item::unequip(sint16)",
+ "Item::andStatus(void)",
+ "Item::move(uint16,uint16,uint8)",
+ "Intrinsic007B()",
+ "Intrinsic007C()",
+ "Intrinsic007D()",
+ "Intrinsic007E()",
+ "Intrinsic007F()",
+ // 0080
+ "Intrinsic0080()",
+ "Intrinsic0081()",
+ "Intrinsic0082()",
+ "Intrinsic0083()",
+ "Intrinsic0084()",
+ "Intrinsic0085()",
+ "teleportToEgg(sint16,int,uint8)",
+ "Intrinsic0087()",
+ "Intrinsic0088()",
+ "Intrinsic00BD()",
+ "Item::getQuality(void)",
+ "Item::setQuality(sint16)",
+ "Intrinsic008C()",
+ "Intrinsic008D()",
+ "Intrinsic008E()",
+ "Camera::getX(void)",
+ // 0090
+ "Camera::getY(void)",
+ "Item::setMapNum(sint16)",
+ "Item::getNpcNum(void)",
+ "Item::shoot(WorldPoint&,sint16,sint16)",
+ "Intrinsic0094()",
+ "Item::enterFastArea(void)",
+ "Item::setBroken()",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Intrinsic0099()",
+ "teleportToEgg(sint16,uint8)",
+ "Intrinsic009B()",
+ "Intrinsic009C()",
+ "Intrinsic009D()",
+ "Intrinsic009E()",
+ "Intrinsic009F()",
+ // 00A0
+ "Item::andStatus(void)",
+ "Item::getUnkEggType(void)",
+ "Egg::setEggXRange(uint16)",
+ "Item::setFrame(uint16)",
+ "Item::overlaps(uint16)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Intrinsic00DA()",
+ "Item::getCY(void)",
+ "Intrinsic00A9()",
+ "Item::isOn(uint16)",
+ "Npc::isDead(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Intrinsic00AD()",
+ "Item::getQHi(void)",
+ "Item::andStatus(void)",
+ // 00B0
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::andStatus(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::andStatus(void)",
+ "Item::getDirToCoords(uint16,uint16)",
+ "Intrinsic00B5()",
+ "Intrinsic00B6()",
+ "Item::getNpcNum(void)",
+ "Item::getCY(void)",
+ "Item::isOn(uint16)",
+ "Item::getFootpad(sint16&,sint16&,sint16&)",
+ "Npc::isDead(void)",
+ "Npc::createNPCCru()",
+ "Intrinsic00BD()",
+ "Intrinsic00BE()",
+ "Item::andStatus(void)",
+ // 00C0
+ "Intrinsic00C0()",
+ "Intrinsic00C1()",
+ "IntrinsicReturn0",
+ "Intrinsic00C3()",
+ "Item::getQHi(void)",
+ "Item::setQuality(sint16)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Intrinsic00C7()",
+ "Intrinsic00C8()",
+ "Item::callEvent0A(sint16)",
+ "Item::setBroken()",
+ "Item::isOn(uint16)",
+ "Intrinsic00CC()",
+ "Intrinsic00CD()",
+ "Item::getQHi(void)",
+ "Item::isOn(uint16)",
+ // 00D0
+ "Intrinsic00D0()",
+ "Intrinsic00D1()",
+ "Intrinsic00D2()",
+ "Intrinsic00FA()",
+ "Camera::getY(void)",
+ "Intrinsic00D5()",
+ "Intrinsic00D6()",
+ "Intrinsic00D7()",
+ "Intrinsic00D8()",
+ "Intrinsic00D9()",
+ "Intrinsic00DA()",
+ "Intrinsic00DB()",
+ "Item::getQLo(void)",
+ "Item::getQHi(void)",
+ "Item::getNpcNum(void)",
+ "Intrinsic00DF()",
+ // 00E0
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Intrinsic00FA()",
+ "Item::getQLo(void)",
+ "Item::getCY(void)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ // 00F0
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::andStatus(void)",
+ "Intrinsic00FA()",
+ "Item::getQLo(void)",
+ "Intrinsic00FA()",
+ "Intrinsic00FB()",
+ "Intrinsic00FC()",
+ "Item::getQLo(void)",
+ "Intrinsic00FE()",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ // 0100
+ "Item::andStatus(void)",
+ "Item::isOn(uint16)",
+ "Npc::isDead(void)",
+ "Intrinsic00BD()",
+ "Item::getQHi(void)",
+ "Intrinsic00DA()",
+ "Intrinsic00FA()",
+ "Item::getQLo(void)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Item::isOn(uint16)",
+ "Item::getQHi(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getNpcNum(void)",
+ "Item::getCY(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ // 0110
+ "Item::isOn(uint16)",
+ "Intrinsic0111()",
+ "IntrinsicReturn0",
+ "Npc::isDead(void)",
+ "Intrinsic0088()",
+ "Intrinsic00C1()",
+ "Item::getQHi(void)",
+ "Intrinsic00BD()",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Intrinsic011C()",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Item::AvatarStoleSomehting(uint16)",
+ // 0120
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Item::getQ(void)",
+ "Item::setQ(uint)",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Item::andStatus(void)",
+ "Item::getNpcNum(void)",
+ "Intrinsic00C3()",
+ "Item::andStatus(void)",
+ // 0130
+ "Item::getNpcNum(void)",
+ "Intrinsic0131()",
+ "Item::andStatus(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::andStatus(void)",
+ "Camera::getY(void)",
+ "Camera::getZ(void)",
+ "Intrinsic0137()",
+ "Intrinsic009C()",
+ "Item::getTypeFlagCrusader(sint16)",
+ "Item::getNpcNum(void)",
+ "Item::hurl(sint16,sint16,sint16,sint16)",
+ "Item::getCY(void)",
+ "Item::getCZ(void)",
+ "Item::setFrame(uint16)",
+ "Intrinsic013F()",
+ // 0140
+ "Intrinsic0140()",
+ "Intrinsic0141()",
+ "Intrinsic0142()",
+ "Npc::isDead(void)",
+ "Intrinsic00FA()",
+ "Intrinsic0145()",
+ "Intrinsic0146()",
+ "Intrinsic0147()",
+ "Item::getNpcNum(void)",
+ "Item::getQLo(void)",
+ "Item::andStatus(void)",
+ "Ultima8Engine::getCurrentTimerTick()",
+ "Intrinsic014C()",
+ "Intrinsic014D()",
+ "Intrinsic003C()",
+ "Egg::getEggXRange(void)",
+ // 0150
+ "Intrinsic009C()",
+ "Intrinsic0072()",
+ "Item::setFrame(uint16)",
+ "Intrinsic00C1()",
+ "Intrinsic00C3()",
+ "Intrinsic00C1()",
+ "Item::isOn(uint16)",
+ "Intrinsic00C3()",
+ "Intrinsic00FA()",
+ "Item::getQHi(void)",
+ "Item::getQLo(void)",
+ "Intrinsic00C1()",
+ "Intrinsic00C3()",
+ "Intrinsic015D()",
+ 0
+};
+
+
+} // End of namespace Ultima8
+} // End of namespace Ultima
+
+#endif
diff --git a/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h b/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
index 3f23813001..6ac278f4db 100644
--- a/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
+++ b/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
@@ -23,41 +23,7 @@
#ifndef ULTIMA8_CONVERT_U8_CONVERTUSECODEU8_H
#define ULTIMA8_CONVERT_U8_CONVERTUSECODEU8_H
-#ifndef INCLUDE_CONVERTUSECODEU8_WITHOUT_BRINGING_IN_FOLD
-#include "ultima/ultima8/convert/convert.h"
-#else
-
-namespace Ultima {
-namespace Ultima8 {
-
-class ConvertUsecode {
-public:
- virtual ~ConvertUsecode() { }
- class TempOp;
- class Node;
- typedef int DebugSymbol;
- struct UsecodeHeader
- {
- uint32 _maxOffset;
- };
- uint32 _curOffset;
-
- virtual const char* const *intrinsics()=0;
- virtual const char* const *event_names()=0;
- virtual void readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset)=0;
- virtual void readevents(Common::SeekableReadStream *ucfile, const UsecodeHeader &uch)=0;
- virtual void readOp(TempOp &op, Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done)=0;
- virtual Node *readOp(Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done)=0;
- void readOpGeneric(TempOp &, Common::SeekableReadStream *, uint32 &, Std::vector<DebugSymbol> &,
- bool &, const bool ) { }
- Node *readOpGeneric(Common::SeekableReadStream *, uint32 &, Std::vector<DebugSymbol> &,
- bool &, const bool ) { return nullptr; }
-};
-
-} // End of namespace Ultima8
-} // End of namespace Ultima
-
-#endif
+#include "ultima/ultima8/convert/convert_usecode.h"
namespace Ultima {
namespace Ultima8 {
@@ -66,28 +32,7 @@ class ConvertUsecodeU8 : public ConvertUsecode {
public:
const char* const *intrinsics() override { return _intrinsics; };
const char* const *event_names() override { return _event_names; };
- void readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset) override;
- void readevents(Common::SeekableReadStream *ucfile, const UsecodeHeader &/*uch*/) override
- {
-#ifndef INCLUDE_CONVERTUSECODEU8_WITHOUT_BRINGING_IN_FOLD
- EventMap.clear();
- for (uint32 i=0; i<32; ++i)
- {
- uint32 offset = readUint32LE(ucfile);
- EventMap[offset] = i;
-#ifdef DISASM_DEBUG
- pout << "Event " << i << ": " << Std::hex << Std::setw(4) << offset << Std::dec << endl;
-#endif
- }
-#endif
- }
- void readOp(TempOp &op, Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
- { readOpGeneric(op, ucfile, dbg_symbol_offset, debugSymbols, done, false); };
- Node *readOp(Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
- { return readOpGeneric(ucfile, dbg_symbol_offset, debugSymbols, done, false); };
-
-
private:
static const char* const _intrinsics[];
static const char* const _event_names[];
@@ -408,22 +353,6 @@ const char * const ConvertUsecodeU8::_event_names[] = {
0
};
-void ConvertUsecodeU8::readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset_) {
- #ifdef DISASM_DEBUG
- perr << Std::setfill('0') << Std::hex;
- perr << "unknown1: " << Std::setw(4) << ucfile->readUint32LE() << endl; // unknown
- uch.maxOffset = ucfile->readUint32LE() - 0x0C; // file size
- perr << "maxoffset: " << Std::setw(4) << maxOffset << endl;
- perr << "unknown2: " << Std::setw(4) << ucfile->readUint32LE() << endl; // unknown
- curOffset_ = 0;
- #else
- ucfile->readUint32LE(); // unknown
- uch._maxOffset = ucfile->readUint32LE() - 0x0C; // file size
- ucfile->readUint32LE(); // unknown
- curOffset_ = 0;
- #endif
-}
-
} // End of namespace Ultima8
} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index 767c866f0a..e8e24ab6db 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -91,24 +91,28 @@ void StartCrusaderProcess::run() {
Ultima8Engine::get_instance()->setCheatMode(true);
if (!_skipStart) {
- MainActor *avatar = getMainActor();
- int mapnum = avatar->getMapNum();
- // The game doesn't do the weapon this way, but it's the same for our purposes..
- Item *weapon = ItemFactory::createItem(0x32E, 0, 0, 0, 0, mapnum, 0, true);
- avatar->addItemCru(weapon, false);
- Item *datalink = ItemFactory::createItem(0x4d4, 0, 0, 0, 0, mapnum, 0, true);
- avatar->addItemCru(datalink, false);
- Item *smiley = ItemFactory::createItem(0x598, 0, 0, 0, 0, mapnum, 0, true);
- smiley->moveToContainer(avatar);
-
- // TODO: How is this created in the game??
- Egg *miss1egg = new Egg();
- miss1egg->setShape(2317);
- miss1egg->setMapNum(mapnum);
- miss1egg->assignObjId();
- miss1egg->callUsecodeEvent_hatch();
-
- avatar->setDir(dir_east);
+ if (GAME_IS_REMORSE) {
+ MainActor *avatar = getMainActor();
+ int mapnum = avatar->getMapNum();
+ // The game doesn't do the weapon this way, but it's the same for our purposes..
+ Item *weapon = ItemFactory::createItem(0x32E, 0, 0, 0, 0, mapnum, 0, true);
+ avatar->addItemCru(weapon, false);
+ Item *datalink = ItemFactory::createItem(0x4d4, 0, 0, 0, 0, mapnum, 0, true);
+ avatar->addItemCru(datalink, false);
+ Item *smiley = ItemFactory::createItem(0x598, 0, 0, 0, 0, mapnum, 0, true);
+ smiley->moveToContainer(avatar);
+
+ // TODO: How is this created in the game??
+ Egg *miss1egg = new Egg();
+ miss1egg->setShape(2317);
+ miss1egg->setMapNum(mapnum);
+ miss1egg->assignObjId();
+ miss1egg->callUsecodeEvent_hatch();
+
+ avatar->setDir(dir_east);
+ } else if (GAME_IS_REGRET) {
+ // TODO: Give the appropriate startup objects to the avatar
+ }
// TODO: The game actually teleports to egg 0x1f (31) which has another
// egg to teleport to egg 99. Is there any purpose to that?
@@ -118,7 +122,7 @@ void StartCrusaderProcess::run() {
Kernel::get_instance()->addProcess(fader);
}
- //MusicProcess::get_instance()->playMusic(2);
+ MusicProcess::get_instance()->playMusic(2);
Ultima8Engine::get_instance()->setAvatarInStasis(false);
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index faefa8652c..88be4868eb 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -79,6 +79,7 @@
#include "ultima/ultima8/world/actors/targeted_anim_process.h"
#include "ultima/ultima8/usecode/u8_intrinsics.h"
#include "ultima/ultima8/usecode/remorse_intrinsics.h"
+#include "ultima/ultima8/usecode/regret_intrinsics.h"
#include "ultima/ultima8/world/egg.h"
#include "ultima/ultima8/world/current_map.h"
#include "ultima/ultima8/graphics/inverter_process.h"
@@ -335,8 +336,7 @@ void Ultima8Engine::startupGame() {
} else if (_gameInfo->_type == GameInfo::GAME_REMORSE) {
_ucMachine = new UCMachine(RemorseIntrinsics, 308);
} else if (_gameInfo->_type == GameInfo::GAME_REGRET) {
- // TODO: Do these work the same as remorse?
- _ucMachine = new UCMachine(RemorseIntrinsics, 308);
+ _ucMachine = new UCMachine(RegretIntrinsics, 350);
} else {
CANT_HAPPEN_MSG("Invalid game type.");
}
diff --git a/engines/ultima/ultima8/usecode/regret_intrinsics.h b/engines/ultima/ultima8/usecode/regret_intrinsics.h
new file mode 100644
index 0000000000..994dc17504
--- /dev/null
+++ b/engines/ultima/ultima8/usecode/regret_intrinsics.h
@@ -0,0 +1,410 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ULTIMA8_USECODE_REGRETINTRINSICS_H
+#define ULTIMA8_USECODE_REGRETINTRINSICS_H
+
+#include "ultima/ultima8/usecode/intrinsics.h"
+#include "ultima/ultima8/world/item.h"
+
+namespace Ultima {
+namespace Ultima8 {
+
+// Crusader: No Regret Intrinsics
+Intrinsic RegretIntrinsics[] = {
+ 0, // Intrinsic000()
+ Item::I_getFrame, // Intrinsic001()
+ Item::I_setFrame, // Intrinsic002()
+ Item::I_getMapArray, // Intrinsic003()
+ Item::I_getStatus, // Intrinsic004()
+ Item::I_orStatus, // Intrinsic005()
+ Item::I_equip, // Intrinsic006()
+ Item::I_isOnScreen, // Intrinsic007()
+ Actor::I_isNPC, // Intrinsic008()
+ Item::I_getZ, // Intrinsic009()
+ 0, // Intrinsic00A()
+ Item::I_getQLo, // Intrinsic00B()
+ Item::I_destroy, // Intrinsic00C()
+ 0, // Intrinsic00D()
+ Item::I_getX, // Intrinsic00E()
+ Item::I_getY, // Intrinsic00F()
+ // 0010
+ AudioProcess::I_playSFXCru, // Intrinsic010()
+ Item::I_getShape, // Intrinsic011()
+ 0, // Intrinsic012()
+ 0, // Intrinsic013()
+ Item::I_legalCreateAtCoords, // Intrinsic014()
+ Item::I_andStatus, // Intrinsic015()
+ 0, // Intrinsic016()
+ 0, // Intrinsic017()
+ 0, // Intrinsic018()
+ 0, // Intrinsic019()
+ Item::I_create, // Intrinsic01A()
+ Item::I_popToCoords, // Intrinsic01B()
+ 0, // Intrinsic01C()
+ Item::I_push, // Intrinsic01D()
+ 0, // Intrinsic01E()
+ Item::I_getQLo, // Intrinsic01F()
+ // 0020
+ Item::I_setQLo, // Intrinsic020()
+ Item::I_getQHi, // Intrinsic021()
+ Item::I_setQHi, // Intrinsic022()
+ 0, // Intrinsic023()
+ 0, // Intrinsic024()
+ Item::I_getCY, // Intrinsic025()
+ Item::I_getCX, // Intrinsic026()
+ 0, // Intrinsic027()
+ Item::I_setNpcNum, // Intrinsic028()
+ 0, // Intrinsic029()
+ Item::I_setShape, // Intrinsic02A()
+ Item::I_pop, // Intrinsic02B()
+ 0, // Intrinsic02C()
+ Item::I_isCompletelyOn, // Intrinsic02D()
+ Item::I_popToContainer, // Intrinsic02E()
+ 0, // Intrinsic02F()
+ // 0030
+ 0, // Intrinsic030()
+ Item::I_getFamily, // Intrinsic031()
+ Actor::I_destroyContents, // Intrinsic032()
+ 0, // Intrinsic033()
+ Item::I_getDirToItem, // Intrinsic034()
+ 0, // Intrinsic035()
+ 0, // Intrinsic036()
+ 0, // Intrinsic037()
+ Item::I_andStatus, // Intrinsic038()
+ Kernel::I_resetRef, // Intrinsic039()
+ Item::I_touch, // Intrinsic03A()
+ Egg::I_getEggId, // Intrinsic03B()
+ 0, // Intrinsic03C()
+ 0, // Intrinsic03D()
+ 0, // Intrinsic03E()
+ 0, // Intrinsic03F()
+ // 0040
+ 0, // Intrinsic040()
+ Item::I_isOn, // Intrinsic041()
+ Item::I_getQHi, // Intrinsic042()
+ Item::I_isOn, // Intrinsic043()
+ Item::I_getQHi, // Intrinsic044()
+ Item::I_isOn, // Intrinsic045()
+ Item::I_getQHi, // Intrinsic046()
+ Item::I_isOn, // Intrinsic047()
+ Item::I_getQHi, // Intrinsic048()
+ Item::I_isOn, // Intrinsic049()
+ Item::I_getQHi, // Intrinsic04A()
+ Item::I_isOn, // Intrinsic04B()
+ Item::I_getQHi, // Intrinsic04C()
+ 0, // Intrinsic04D()
+ Actor::I_isDead, // Intrinsic04E()
+ 0, // Intrinsic04F()
+ // 0050
+ 0, // Intrinsic050()
+ 0, // Intrinsic051()
+ 0, // Intrinsic052()
+ 0, // Intrinsic053()
+ 0, // Intrinsic054()
+ 0, // Intrinsic055()
+ 0, // Intrinsic056()
+ 0, // Intrinsic057()
+ Item::I_use, // Intrinsic058()
+ 0, // Intrinsic059()
+ 0, // Intrinsic05A()
+ Item::I_getSurfaceWeight, // Intrinsic05B()
+ 0, // Intrinsic05C()
+ Item::I_setFrame, // Intrinsic05D()
+ 0, // Intrinsic05E()
+ 0, // Intrinsic05F()
+ // 0060
+ 0, // Intrinsic060()
+ 0, // Intrinsic061()
+ 0, // Intrinsic062()
+ Item::I_legalCreateAtPoint, // Intrinsic063()
+ Item::I_getPoint, // Intrinsic064()
+ Item::I_legalMoveToPoint, // Intrinsic065()
+ Item::I_fall, // Intrinsic066()
+ 0, // Intrinsic067()
+ Kernel::I_getNumProcesses, // Intrinsic068()
+ Item::I_getCY, // Intrinsic069()
+ 0, // Intrinsic06A()
+ 0, // Intrinsic06B()
+ 0, // Intrinsic06C()
+ 0, // Intrinsic06D()
+ 0, // Intrinsic06E()
+ Item::I_isInNpc, // Intrinsic06F()
+ // 0070
+ 0, // Intrinsic070()
+ 0, // Intrinsic071()
+ 0, // Intrinsic072()
+ 0, // Intrinsic073()
+ Actor::I_isDead, // Intrinsic074()
+ Actor::I_getNpcNum, // Intrinsic075()
+ 0, // Intrinsic076()
+ 0, // Intrinsic077()
+ Item::I_unequip, // Intrinsic078()
+ Item::I_andStatus, // Intrinsic079()
+ Item::I_move, // Intrinsic07A()
+ 0, // Intrinsic07B()
+ 0, // Intrinsic07C()
+ 0, // Intrinsic07D()
+ 0, // Intrinsic07E()
+ 0, // Intrinsic07F()
+ // 0080
+ 0, // Intrinsic080()
+ 0, // Intrinsic081()
+ 0, // Intrinsic082()
+ 0, // Intrinsic083()
+ 0, // Intrinsic084()
+ 0, // Intrinsic085()
+ 0, // Intrinsic086()
+ 0, // Intrinsic087()
+ 0, // Intrinsic088()
+ 0, // Intrinsic089()
+ Item::I_getQuality, // Intrinsic08A()
+ Item::I_setQuality, // Intrinsic08B()
+ 0, // Intrinsic08C()
+ 0, // Intrinsic08D()
+ 0, // Intrinsic08E()
+ CameraProcess::I_getCameraX, // Intrinsic08F()
+ // 0090
+ CameraProcess::I_getCameraY, // Intrinsic090()
+ Item::I_setMapArray, // Intrinsic091()
+ Actor::I_getNpcNum, // Intrinsic092()
+ 0, // Intrinsic093()
+ 0, // Intrinsic094()
+ Item::I_enterFastArea, // Intrinsic095()
+ Item::I_setBroken, // Intrinsic096()
+ 0, // Intrinsic097()
+ Actor::I_getNpcNum, // Intrinsic098()
+ 0, // Intrinsic099()
+ 0, // Intrinsic09A()
+ 0, // Intrinsic09B()
+ 0, // Intrinsic09C()
+ 0, // Intrinsic09D()
+ 0, // Intrinsic09E()
+ 0, // Intrinsic09F()
+ // 00A0
+ Item::I_andStatus, // Intrinsic0A0()
+ Egg::I_getUnkEggType, // Intrinsic0A1()
+ Egg::I_setEggXRange, // Intrinsic0A2()
+ Item::I_setFrame, // Intrinsic0A3()
+ Item::I_overlaps, // Intrinsic0A4()
+ Item::I_isOn, // Intrinsic0A5()
+ Item::I_getQHi, // Intrinsic0A6()
+ 0, // Intrinsic0A7()
+ Item::I_getCY, // Intrinsic0A8()
+ 0, // Intrinsic0A9()
+ Item::I_isOn, // Intrinsic0AA()
+ Actor::I_isDead, // Intrinsic0AB()
+ 0, // Intrinsic0AC()
+ 0, // Intrinsic0AD()
+ Item::I_getQHi, // Intrinsic0AE()
+ Item::I_andStatus, // Intrinsic0AF()
+ // 00B0
+ 0, // Intrinsic0B0()
+ Item::I_andStatus, // Intrinsic0B1()
+ 0, // Intrinsic0B2()
+ Item::I_andStatus, // Intrinsic0B3()
+ 0, // Intrinsic0B4()
+ 0, // Intrinsic0B5()
+ 0, // Intrinsic0B6()
+ Actor::I_getNpcNum, // Intrinsic0B7()
+ Item::I_getCY, // Intrinsic0B8()
+ Item::I_isOn, // Intrinsic0B9()
+ Item::I_getFootpadData, // Intrinsic0BA()
+ Actor::I_isDead, // Intrinsic0BB()
+ Actor::I_createActorCru, // Intrinsic0BC()
+ 0, // Intrinsic0BD()
+ 0, // Intrinsic0BE()
+ Item::I_andStatus, // Intrinsic0BF()
+ // 00C0
+ 0, // Intrinsic0C0()
+ 0, // Intrinsic0C1()
+ 0, // Intrinsic0C2()
+ 0, // Intrinsic0C3()
+ Item::I_getQHi, // Intrinsic0C4()
+ Item::I_setQuality, // Intrinsic0C5()
+ 0, // Intrinsic0C6()
+ 0, // Intrinsic0C7()
+ 0, // Intrinsic0C8()
+ Item::I_equip, // Intrinsic0C9()
+ Item::I_setBroken, // Intrinsic0CA()
+ Item::I_isOn, // Intrinsic0CB()
+ 0, // Intrinsic0CC()
+ 0, // Intrinsic0CD()
+ Item::I_getQHi, // Intrinsic0CE()
+ Item::I_isOn, // Intrinsic0CF()
+ // 00D0
+ 0, // Intrinsic0D0()
+ 0, // Intrinsic0D1()
+ 0, // Intrinsic0D2()
+ 0, // Intrinsic0D3()
+ CameraProcess::I_getCameraY, // Intrinsic0D4()
+ 0, // Intrinsic0D5()
+ 0, // Intrinsic0D6()
+ 0, // Intrinsic0D7()
+ 0, // Intrinsic0D8()
+ 0, // Intrinsic0D9()
+ 0, // Intrinsic0DA()
+ 0, // Intrinsic0DB()
+ Item::I_getQLo, // Intrinsic0DC()
+ Item::I_getQHi, // Intrinsic0DD()
+ Actor::I_getNpcNum, // Intrinsic0DE()
+ 0, // Intrinsic0DF()
+ // 00E0
+ 0, // Intrinsic0E0()
+ 0, // Intrinsic0E1()
+ Item::I_getQLo, // Intrinsic0E2()
+ Item::I_getCY, // Intrinsic0E3()
+ Actor::I_getNpcNum, // Intrinsic0E4()
+ 0, // Intrinsic0E5()
+ Actor::I_getNpcNum, // Intrinsic0E6()
+ 0, // Intrinsic0E7()
+ Actor::I_getNpcNum, // Intrinsic0E8()
+ 0, // Intrinsic0E9()
+ Actor::I_getNpcNum, // Intrinsic0EA()
+ 0, // Intrinsic0EB()
+ Actor::I_getNpcNum, // Intrinsic0EC()
+ 0, // Intrinsic0ED()
+ Actor::I_getNpcNum, // Intrinsic0EE()
+ 0, // Intrinsic0EF()
+ // 00F0
+ Actor::I_getNpcNum, // Intrinsic0F0()
+ 0, // Intrinsic0F1()
+ Actor::I_getNpcNum, // Intrinsic0F2()
+ 0, // Intrinsic0F3()
+ Actor::I_getNpcNum, // Intrinsic0F4()
+ 0, // Intrinsic0F5()
+ Actor::I_getNpcNum, // Intrinsic0F6()
+ Item::I_andStatus, // Intrinsic0F7()
+ 0, // Intrinsic0F8()
+ Item::I_getQLo, // Intrinsic0F9()
+ 0, // Intrinsic0FA()
+ 0, // Intrinsic0FB()
+ 0, // Intrinsic0FC()
+ Item::I_getQLo, // Intrinsic0FD()
+ 0, // Intrinsic0FE()
+ 0, // Intrinsic0FF()
+ // 0100
+ Item::I_andStatus, // Intrinsic100()
+ Item::I_isOn, // Intrinsic101()
+ Actor::I_isDead, // Intrinsic102()
+ 0, // Intrinsic103()
+ Item::I_getQHi, // Intrinsic104()
+ 0, // Intrinsic105()
+ 0, // Intrinsic106()
+ Item::I_getQLo, // Intrinsic107()
+ Item::I_isOn, // Intrinsic108()
+ Item::I_getQHi, // Intrinsic109()
+ Item::I_isOn, // Intrinsic10A()
+ Item::I_getQHi, // Intrinsic10B()
+ 0, // Intrinsic10C()
+ Actor::I_getNpcNum, // Intrinsic10D()
+ Item::I_getCY, // Intrinsic10E()
+ 0, // Intrinsic10F()
+ // 0110
+ Item::I_isOn, // Intrinsic110()
+ 0, // Intrinsic111()
+ 0, // Intrinsic112()
+ Actor::I_isDead, // Intrinsic113()
+ 0, // Intrinsic114()
+ 0, // Intrinsic115()
+ Item::I_getQHi, // Intrinsic116()
+ 0, // Intrinsic117()
+ Item::I_andStatus, // Intrinsic118()
+ Actor::I_getNpcNum, // Intrinsic119()
+ Item::I_andStatus, // Intrinsic11A()
+ Actor::I_getNpcNum, // Intrinsic11B()
+ 0, // Intrinsic11C()
+ Item::I_andStatus, // Intrinsic11D()
+ Actor::I_getNpcNum, // Intrinsic11E()
+ 0, // Intrinsic11F()
+ // 0120
+ Item::I_andStatus, // Intrinsic120()
+ Actor::I_getNpcNum, // Intrinsic121()
+ Item::I_getQ, // Intrinsic122()
+ Item::I_setQ, // Intrinsic123()
+ Item::I_andStatus, // Intrinsic124()
+ Actor::I_getNpcNum, // Intrinsic125()
+ Item::I_andStatus, // Intrinsic126()
+ Actor::I_getNpcNum, // Intrinsic127()
+ Item::I_andStatus, // Intrinsic128()
+ Actor::I_getNpcNum, // Intrinsic129()
+ Item::I_andStatus, // Intrinsic12A()
+ Actor::I_getNpcNum, // Intrinsic12B()
+ Item::I_andStatus, // Intrinsic12C()
+ Actor::I_getNpcNum, // Intrinsic12D()
+ 0, // Intrinsic12E()
+ Item::I_andStatus, // Intrinsic12F()
+ // 0130
+ Actor::I_getNpcNum, // Intrinsic130()
+ 0, // Intrinsic131()
+ Item::I_andStatus, // Intrinsic132()
+ 0, // Intrinsic133()
+ Item::I_andStatus, // Intrinsic134()
+ CameraProcess::I_getCameraY, // Intrinsic135()
+ CameraProcess::I_getCameraZ, // Intrinsic136()
+ 0, // Intrinsic137()
+ 0, // Intrinsic138()
+ 0, // Intrinsic139()
+ Actor::I_getNpcNum, // Intrinsic13A()
+ 0, // Intrinsic13B()
+ Item::I_getCY, // Intrinsic13C()
+ Item::I_getCZ, // Intrinsic13D()
+ Item::I_setFrame, // Intrinsic13E()
+ 0, // Intrinsic13F()
+ // 0140
+ 0, // Intrinsic140()
+ 0, // Intrinsic141()
+ 0, // Intrinsic142()
+ Actor::I_isDead, // Intrinsic143()
+ 0, // Intrinsic144()
+ 0, // Intrinsic145()
+ 0, // Intrinsic146()
+ 0, // Intrinsic147()
+ Actor::I_getNpcNum, // Intrinsic148()
+ Item::I_getQLo, // Intrinsic149()
+ Item::I_andStatus, // Intrinsic14A()
+ Ultima8Engine::I_getCurrentTimerTick, // Intrinsic14B()
+ 0, // Intrinsic14C()
+ 0, // Intrinsic14D()
+ 0, // Intrinsic14E()
+ Egg::I_getEggXRange, // Intrinsic14F()
+ // 0150
+ 0, // Intrinsic150()
+ 0, // Intrinsic151()
+ Item::I_setFrame, // Intrinsic152()
+ 0, // Intrinsic153()
+ 0, // Intrinsic154()
+ 0, // Intrinsic155()
+ Item::I_isOn, // Intrinsic156()
+ 0, // Intrinsic157()
+ 0, // Intrinsic158()
+ Item::I_getQHi, // Intrinsic159()
+ Item::I_getQLo, // Intrinsic15A()
+ 0, // Intrinsic15B()
+ 0, // Intrinsic15C()
+ 0 // Intrinsic15D()
+};
+
+} // End of namespace Ultima8
+} // End of namespace Ultima
+
+#endif
diff --git a/engines/ultima/ultima8/usecode/uc_machine.cpp b/engines/ultima/ultima8/usecode/uc_machine.cpp
index 3b0f86c306..b9955374f6 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.cpp
+++ b/engines/ultima/ultima8/usecode/uc_machine.cpp
@@ -37,9 +37,9 @@
#include "ultima/ultima8/world/get_object.h"
#include "ultima/ultima8/filesys/idata_source.h"
-#define INCLUDE_CONVERTUSECODEU8_WITHOUT_BRINGING_IN_FOLD
#include "ultima/ultima8/convert/u8/convert_usecode_u8.h"
#include "ultima/ultima8/convert/crusader/convert_usecode_crusader.h"
+#include "ultima/ultima8/convert/crusader/convert_usecode_regret.h"
#include "ultima/ultima8/world/actors/main_actor.h"
namespace Ultima {
@@ -100,9 +100,9 @@ UCMachine::UCMachine(Intrinsic *iset, unsigned int icount) {
} else {
_globals = new ByteSet(0x1000);
// slight hack: set global 003C to start as avatar number.
+ // TODO: is this the same offset in regret?
_globals->setEntries(0x3C, 2, 1);
- // TODO: Need a separate convertor for Regret
- _convUse = new ConvertUsecodeCrusader();
+ _convUse = new ConvertUsecodeRegret();
}
loadIntrinsics(iset, icount); //!...
diff --git a/engines/ultima/ultima8/usecode/uc_machine.h b/engines/ultima/ultima8/usecode/uc_machine.h
index 528b2988a4..a119bc37c9 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.h
+++ b/engines/ultima/ultima8/usecode/uc_machine.h
@@ -88,7 +88,6 @@ public:
INTRINSIC(I_urandom);
INTRINSIC(I_rndRange);
INTRINSIC(I_numToStr);
- INTRINSIC(I_getCurrentTimerTick);
protected:
void loadIntrinsics(Intrinsic *i, unsigned int icount);
More information about the Scummvm-git-logs
mailing list