[Scummvm-git-logs] scummvm master -> e749fb56c85f1d2b01d3f92e79c7b4028b2e37f2
mduggan
mgithub at guarana.org
Mon May 31 11:52:51 UTC 2021
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
58ab4d42a0 ULTIMA8: Still play Cruader cutscene on invalid object
d4e5b427dc ULTIMA8: JANITORIAL: Comments
f49f2dfde7 ULTIMA8: Add BoboBoomer and RollingThunder processes from No Regret
e749fb56c8 ULTIMA8: Wire up one No Regret intrinsic (isSfxPlayingForObject)
Commit: 58ab4d42a0bac0fed0ebbe792b41345b1412247c
https://github.com/scummvm/scummvm/commit/58ab4d42a0bac0fed0ebbe792b41345b1412247c
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-31T20:44:23+09:00
Commit Message:
ULTIMA8: Still play Cruader cutscene on invalid object
In Mission 5, one cutscene passes an invalid object.
Changed paths:
engines/ultima/ultima8/gumps/movie_gump.cpp
diff --git a/engines/ultima/ultima8/gumps/movie_gump.cpp b/engines/ultima/ultima8/gumps/movie_gump.cpp
index 5476890132..9a1fa841dc 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.cpp
+++ b/engines/ultima/ultima8/gumps/movie_gump.cpp
@@ -31,6 +31,7 @@
#include "ultima/ultima8/kernel/kernel.h"
#include "ultima/ultima8/usecode/uc_machine.h"
#include "ultima/ultima8/world/get_object.h"
+#include "ultima/ultima8/world/item.h"
#include "ultima/ultima8/gumps/gump_notify_process.h"
#include "ultima/ultima8/gumps/cru_status_gump.h"
#include "ultima/ultima8/gumps/widgets/text_widget.h"
@@ -300,7 +301,7 @@ uint32 MovieGump::I_playMovieCutscene(const uint8 *args, unsigned int /*argsize*
}
uint32 MovieGump::I_playMovieCutsceneAlt(const uint8 *args, unsigned int /*argsize*/) {
- ARG_ITEM_FROM_PTR(item);
+ ARG_ITEM_FROM_PTR(item); // TODO: Unused? Center on this first?
ARG_STRING(name);
ARG_UINT16(x);
ARG_UINT16(y);
@@ -310,11 +311,10 @@ uint32 MovieGump::I_playMovieCutsceneAlt(const uint8 *args, unsigned int /*argsi
if (!y)
y = 480;
- warning("MovieGump::I_playMovieCutsceneAlt: TODO: This intrinsic should pause and fade the background to grey");
+ warning("MovieGump::I_playMovieCutsceneAlt: TODO: This intrinsic should pause and fade the background to grey (%s, %d)",
+ name.c_str(), item ? item->getObjId() : 0);
- if (item) {
- CruMovieViewer(name, x * 3, y * 3, nullptr, nullptr);
- }
+ CruMovieViewer(name, x * 3, y * 3, nullptr, nullptr);
return 0;
}
Commit: d4e5b427dc588cf8aafe438686cdded6c952597a
https://github.com/scummvm/scummvm/commit/d4e5b427dc588cf8aafe438686cdded6c952597a
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-31T20:44:23+09:00
Commit Message:
ULTIMA8: JANITORIAL: Comments
Changed paths:
engines/ultima/ultima8/world/actors/main_actor.h
diff --git a/engines/ultima/ultima8/world/actors/main_actor.h b/engines/ultima/ultima8/world/actors/main_actor.h
index fa94d1f5fe..83aaeeb1a1 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.h
+++ b/engines/ultima/ultima8/world/actors/main_actor.h
@@ -134,16 +134,16 @@ public:
return _activeInvItem;
}
- //!< Swap to the next active weapon (in Crusader)
+ //! Swap to the next active weapon (Crusader)
void nextWeapon();
- //!< Swap to the next inventory item (in Crusader)
+ //! Swap to the next inventory item (Crusader)
void nextInvItem();
//! Check if we can absorb a hit with the shield. Returns the modified damage value.
int receiveShieldHit(int damage, uint16 damage_type) override;
- //! Detonate used bomb
+ //! Detonate used bomb (Crusader)
void detonateBomb();
bool loadData(Common::ReadStream *rs, uint32 version);
Commit: f49f2dfde7761da2c0b3b15e414962635821a2f9
https://github.com/scummvm/scummvm/commit/f49f2dfde7761da2c0b3b15e414962635821a2f9
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-31T20:51:46+09:00
Commit Message:
ULTIMA8: Add BoboBoomer and RollingThunder processes from No Regret
Also add the customizations to the tookHit function that exist in No Regret -
particularly, different SFX that get played depending on the NPC shape.
RollingThunder is just a stub process for now - needs implementing.
Changed paths:
A engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp
A engines/ultima/ultima8/world/actors/rolling_thunder_process.h
A engines/ultima/ultima8/world/bobo_boomer_process.cpp
A engines/ultima/ultima8/world/bobo_boomer_process.h
engines/ultima/module.mk
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/world/actors/actor.cpp
diff --git a/engines/ultima/module.mk b/engines/ultima/module.mk
index 4624525905..b5f517824e 100644
--- a/engines/ultima/module.mk
+++ b/engines/ultima/module.mk
@@ -511,6 +511,7 @@ MODULE_OBJS := \
ultima8/usecode/uc_stack.o \
ultima8/usecode/usecode.o \
ultima8/usecode/usecode_flex.o \
+ ultima8/world/bobo_boomer_process.o \
ultima8/world/camera_process.o \
ultima8/world/container.o \
ultima8/world/create_item_process.o \
@@ -571,6 +572,7 @@ MODULE_OBJS := \
ultima8/world/actors/pathfinder_process.o \
ultima8/world/actors/quick_avatar_mover_process.o \
ultima8/world/actors/resurrection_process.o \
+ ultima8/world/actors/rolling_thunder_process.o \
ultima8/world/actors/scheduler_process.o \
ultima8/world/actors/surrender_process.o \
ultima8/world/actors/targeted_anim_process.o \
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 15a16a2a89..ba97fdc86d 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -83,6 +83,8 @@
#include "ultima/ultima8/world/actors/attack_process.h"
#include "ultima/ultima8/world/actors/auto_firer_process.h"
#include "ultima/ultima8/world/actors/pace_process.h"
+#include "ultima/ultima8/world/actors/rolling_thunder_process.h"
+#include "ultima/ultima8/world/bobo_boomer_process.h"
#include "ultima/ultima8/world/super_sprite_process.h"
#include "ultima/ultima8/world/destroy_item_process.h"
#include "ultima/ultima8/world/actors/ambush_process.h"
@@ -303,6 +305,10 @@ bool Ultima8Engine::startup() {
ProcessLoader<AttackProcess>::load);
_kernel->addProcessLoader("AutoFirerProcess",
ProcessLoader<AutoFirerProcess>::load);
+ _kernel->addProcessLoader("BoboBoomerProcess",
+ ProcessLoader<BoboBoomerProcess>::load);
+ _kernel->addProcessLoader("RollingThunderProcess",
+ ProcessLoader<RollingThunderProcess>::load);
_objectManager = new ObjectManager();
_mouse = new Mouse();
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 48f38eab8e..3981f3f4a7 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -45,6 +45,8 @@
#include "ultima/ultima8/world/actors/attack_process.h"
#include "ultima/ultima8/world/actors/pace_process.h"
#include "ultima/ultima8/world/actors/surrender_process.h"
+#include "ultima/ultima8/world/actors/rolling_thunder_process.h"
+#include "ultima/ultima8/world/bobo_boomer_process.h"
#include "ultima/ultima8/world/world.h"
#include "ultima/ultima8/world/current_map.h"
#include "ultima/ultima8/world/sprite_process.h"
@@ -797,8 +799,8 @@ uint16 Actor::setActivityCru(int activity) {
return 0;
case 0xd:
// Only in No Regret
- perr << "Actor::setActivityCru: TODO: RollingThunderProcess (" << activity << ")";
- return doAnim(Animation::stand, dir_current);
+ setActorFlag(ACT_INCOMBAT);
+ return Kernel::get_instance()->addProcess(new RollingThunderProcess(this));
case 0x70:
return setActivity(getDefaultActivity(0));
case 0x71:
@@ -1026,8 +1028,15 @@ void Actor::receiveHitCru(uint16 other, Direction dir, int damage, uint16 damage
}
}
+#define RAND_ELEM(array) (array[getRandom() % ARRAYSIZE(array)])
+
void Actor::tookHitCru() {
+ AudioProcess *audio = AudioProcess::get_instance();
Animation::Sequence lastanim = getLastAnim();
+ bool isfemale = hasExtFlags(EXT_FEMALE);
+ if (!audio)
+ return;
+
if (lastanim == Animation::unknownAnim30 || lastanim == Animation::startRunLargeWeapon) {
Actor *controlled = getActor(World::get_instance()->getControlledNPCNum());
bool canseecontrolled = controlled && (getRangeIfVisible(*controlled) > 0);
@@ -1037,45 +1046,97 @@ void Actor::tookHitCru() {
else
setActivity(10);
}
- } else {
+ } else if (GAME_IS_REMORSE) {
uint32 shape = getShape();
- if (shape != 0x576) { // 0x576 = flaming guy
- if (shape < 0x577) {
- if (shape == 0x385 || shape == 0x4e6) {
- explode(2, 0);
- clearFlag(FLG_IN_NPC_LIST);
- clearFlag(FLG_GUMP_OPEN);
- }
- return;
- }
- if (shape != 0x596) {
- return;
- }
- }
+ if (shape == 0x385 || shape == 0x4e6) {
+ explode(2, 0);
+ clearFlag(FLG_IN_NPC_LIST | FLG_GUMP_OPEN);
+ } else if (shape == 0x576 || shape == 0x596) {
+ bool violence = true; // Game::I_isViolenceEnabled
+ if (!violence)
+ return;
- bool violence = true; // Game::I_isViolenceEnabled
- if (!violence)
- return;
+ static const uint16 FEMALE_SFX[] = {0xb, 0xa};
+ static const uint16 MALE_SFX[] = {0x65, 0x66, 0x67};
+ int nsounds = isfemale ? ARRAYSIZE(FEMALE_SFX) : ARRAYSIZE(MALE_SFX);
+ const uint16 *sounds = isfemale ? FEMALE_SFX : MALE_SFX;
- static const uint16 FEMALE_SCREAMS[] = {0xb, 0xa};
- static const uint16 MALE_SCREAMS[] = {0x65, 0x66, 0x67};
- int nsounds;
- const uint16 *sounds;
- if (hasExtFlags(EXT_FEMALE)) {
- nsounds = ARRAYSIZE(FEMALE_SCREAMS);
- sounds = FEMALE_SCREAMS;
- } else {
- nsounds = ARRAYSIZE(MALE_SCREAMS);
- sounds = MALE_SCREAMS;
+ for (int i = 0; i < nsounds; i++) {
+ if (audio->isSFXPlayingForObject(sounds[i], _objId))
+ return;
+ }
+
+ audio->playSFX(sounds[getRandom() % nsounds], 0x80, _objId, 1);
}
- AudioProcess *audio = AudioProcess::get_instance();
- if (!audio)
- return;
- for (int i = 0; i < nsounds; i++) {
- if (audio->isSFXPlayingForObject(sounds[i], _objId))
+ } else if (GAME_IS_REGRET) {
+ switch (getShape()) {
+ case 0x596: {
+ static const uint16 FEMALE_SFX[] = {0x212, 0x211};
+ static const uint16 MALE_SFX[] = {0x213, 0x214};
+ int sfxno = isfemale ? RAND_ELEM(FEMALE_SFX) : RAND_ELEM(MALE_SFX);
+ audio->playSFX(sfxno, 0x80, _objId, 1);
+ break;
+ }
+ case 0x576: {
+ static const uint16 FEMALE_SFX[] = {0x3D, 0x77, 0x210};
+ static const uint16 MALE_SFX[] = {0x24F, 0x250, 0x201, 0x200};
+ bool violence = true; // Game::I_isViolenceEnabled
+ if (!violence)
return;
+
+ int nsounds = isfemale ? ARRAYSIZE(FEMALE_SFX) : ARRAYSIZE(MALE_SFX);
+ const uint16 *sounds = isfemale ? FEMALE_SFX : MALE_SFX;
+
+ for (int i = 0; i < nsounds; i++) {
+ if (audio->isSFXPlayingForObject(sounds[i], _objId))
+ return;
+ }
+
+ audio->playSFX(sounds[getRandom() % nsounds], 0x80, _objId, 1);
+ return;
+ }
+ case 0x385:
+ case 0x4e6: {
+ explode(2, false);
+ clearFlag(FLG_GUMP_OPEN | FLG_IN_NPC_LIST);
+ break;
+ }
+ case 0x5d6: {
+ static const uint16 MALE_SFX[] = {0x21B, 0x21A, 0x21C};
+ static const uint16 FEMALE_SFX[] = {0x21D, 0x215};
+ int sfxno = isfemale ? RAND_ELEM(FEMALE_SFX) : RAND_ELEM(MALE_SFX);
+ audio->playSFX(sfxno, 0x80, _objId, 1);
+ break;
+ }
+ case 0x62d: {
+ static const uint16 MALE_SFX[] = {0x217, 0x218};
+ static const uint16 FEMALE_SFX[] = {0x219, 0x216};
+ int sfxno = isfemale ? RAND_ELEM(FEMALE_SFX) : RAND_ELEM(MALE_SFX);
+ audio->playSFX(sfxno, 0x80, _objId, 1);
+ break;
+ }
+ case 0x656:
+ case 0x278: {
+ static const uint16 MALE_SFX[] = {0x20B, 0x20C, 0x20D};
+ static const uint16 FEMALE_SFX[] = {0x20E, 0x20F};
+ int sfxno = isfemale ? RAND_ELEM(FEMALE_SFX) : RAND_ELEM(MALE_SFX);
+ audio->playSFX(sfxno, 0x80, _objId, 1);
+ break;
+ }
+ case 0x5b1: {
+ Process *proc = new BoboBoomerProcess(this);
+ Kernel::get_instance()->addProcess(proc);
+ break;
+ }
+ case 0x58f:
+ case 0x59c: {
+ static const uint16 SOUNDS[] = {0xD9, 0xDA};
+ audio->playSFX(RAND_ELEM(SOUNDS), 0x80, _objId, 1);
+ break;
+ }
+ default:
+ break;
}
- audio->playSFX(sounds[getRandom() % nsounds], 0x80, _objId, 1);
}
}
diff --git a/engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp b/engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp
new file mode 100644
index 0000000000..c1d7c467bb
--- /dev/null
+++ b/engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp
@@ -0,0 +1,74 @@
+/* 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.
+ *
+ */
+
+#include "ultima/ultima8/world/actors/rolling_thunder_process.h"
+#include "ultima/ultima8/world/actors/actor.h"
+#include "ultima/ultima8/kernel/kernel.h"
+#include "ultima/ultima8/kernel/delay_process.h"
+#include "ultima/ultima8/world/get_object.h"
+
+namespace Ultima {
+namespace Ultima8 {
+
+DEFINE_RUNTIME_CLASSTYPE_CODE(RollingThunderProcess)
+
+RollingThunderProcess::RollingThunderProcess() : Process() {
+}
+
+RollingThunderProcess::RollingThunderProcess(Actor *actor) {
+ assert(actor);
+ _itemNum = actor->getObjId();
+
+ _type = 0x263; // CONSTANT!
+}
+
+void RollingThunderProcess::run() {
+ Actor *actor = getActor(_itemNum);
+
+ if (!actor) {
+ // gone! maybe dead..
+ terminate();
+ return;
+ }
+
+ if (actor->isBusy()) {
+ Process *wait = new DelayProcess(60);
+ Kernel::get_instance()->addProcess(wait);
+ waitFor(wait);
+ return;
+ }
+
+ warning("TODO: Implement rolling thunder");
+ terminate();
+}
+
+void RollingThunderProcess::saveData(Common::WriteStream *ws) {
+ Process::saveData(ws);
+}
+
+bool RollingThunderProcess::loadData(Common::ReadStream *rs, uint32 version) {
+ if (!Process::loadData(rs, version)) return false;
+ return true;
+}
+
+} // End of namespace Ultima8
+} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/world/actors/rolling_thunder_process.h b/engines/ultima/ultima8/world/actors/rolling_thunder_process.h
new file mode 100644
index 0000000000..59f45ba071
--- /dev/null
+++ b/engines/ultima/ultima8/world/actors/rolling_thunder_process.h
@@ -0,0 +1,54 @@
+/* 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 WORLD_ACTORS_ROLLINGTHUNDERPROCESS_H
+#define WORLD_ACTORS_ROLLINGTHUNDERPROCESS_H
+
+#include "ultima/ultima8/kernel/process.h"
+
+namespace Ultima {
+namespace Ultima8 {
+
+class Actor;
+
+/**
+ * A process to roll out, shoot at the player, and roll back.
+ * Only used in No Regret.
+ */
+class RollingThunderProcess : public Process {
+public:
+ RollingThunderProcess();
+ RollingThunderProcess(Actor *actor);
+
+ ENABLE_RUNTIME_CLASSTYPE()
+
+ void run() override;
+
+ bool loadData(Common::ReadStream *rs, uint32 version);
+ void saveData(Common::WriteStream *ws) override;
+
+};
+
+} // End of namespace Ultima8
+} // End of namespace Ultima
+
+#endif
diff --git a/engines/ultima/ultima8/world/bobo_boomer_process.cpp b/engines/ultima/ultima8/world/bobo_boomer_process.cpp
new file mode 100644
index 0000000000..f39867bcd2
--- /dev/null
+++ b/engines/ultima/ultima8/world/bobo_boomer_process.cpp
@@ -0,0 +1,94 @@
+/* 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.
+ *
+ */
+
+#include "ultima/ultima8/world/bobo_boomer_process.h"
+#include "ultima/ultima8/games/game_data.h"
+#include "ultima/ultima8/kernel/kernel.h"
+#include "ultima/ultima8/kernel/delay_process.h"
+#include "ultima/ultima8/world/item.h"
+#include "ultima/ultima8/world/fire_type.h"
+
+namespace Ultima {
+namespace Ultima8 {
+
+DEFINE_RUNTIME_CLASSTYPE_CODE(BoboBoomerProcess)
+
+BoboBoomerProcess::BoboBoomerProcess() : Process(),
+_counter(0), _x(0), _y(0), _z(0)
+{}
+
+BoboBoomerProcess::BoboBoomerProcess(const Item *item) : Process(), _counter(0)
+{
+ assert(item);
+ item->getLocation(_x, _y, _z);
+ _type = 0x264;
+}
+
+void BoboBoomerProcess::run() {
+ const FireType *firetype = GameData::get_instance()->getFireType(4);
+ assert(firetype);
+
+ int32 randx = static_cast<int32>(getRandom() % 15) - 7;
+ int32 randy = static_cast<int32>(getRandom() % 15) - 7;
+ Point3 pt(_x + randx * 32, _y + randy * 32, _z);
+ firetype->makeBulletSplashShapeAndPlaySound(pt.x, pt.y, pt.z);
+
+ if (firetype->getRange() > 0) {
+ uint16 damage = firetype->getRandomDamage();
+ firetype->applySplashDamageAround(pt, damage, 1, nullptr, nullptr);
+ }
+
+ _counter++;
+ if (_counter > 9) {
+ terminate();
+ return;
+ }
+
+ int sleep = (getRandom() % 15) + 5;
+ Process *wait = new DelayProcess(sleep);
+ Kernel::get_instance()->addProcess(wait);
+ waitFor(wait);
+}
+
+
+void BoboBoomerProcess::saveData(Common::WriteStream *ws) {
+ Process::saveData(ws);
+
+ ws->writeSint32LE(_counter);
+ ws->writeSint32LE(_x);
+ ws->writeSint32LE(_y);
+ ws->writeSint32LE(_z);
+}
+
+bool BoboBoomerProcess::loadData(Common::ReadStream *rs, uint32 version) {
+ if (!Process::loadData(rs, version)) return false;
+
+ _counter = rs->readSint32LE();
+ _x = rs->readSint32LE();
+ _y = rs->readSint32LE();
+ _z = rs->readSint32LE();
+
+ return true;
+}
+
+} // End of namespace Ultima8
+} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/world/bobo_boomer_process.h b/engines/ultima/ultima8/world/bobo_boomer_process.h
new file mode 100644
index 0000000000..07a9aded5d
--- /dev/null
+++ b/engines/ultima/ultima8/world/bobo_boomer_process.h
@@ -0,0 +1,60 @@
+/* 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_WORLD_BOBOBOOMERPROCESS_H
+#define ULTIMA8_WORLD_BOBOBOOMERPROCESS_H
+
+#include "ultima/ultima8/kernel/process.h"
+#include "ultima/ultima8/misc/classtype.h"
+
+namespace Ultima {
+namespace Ultima8 {
+
+class Item;
+
+/**
+ * A process to make a bunch of explosions. bo-bo-boom!
+ * Only used in No Regret.
+ */
+class BoboBoomerProcess : public Process {
+public:
+ BoboBoomerProcess();
+ BoboBoomerProcess(const Item *item);
+
+ ENABLE_RUNTIME_CLASSTYPE()
+
+ void run() override;
+
+ bool loadData(Common::ReadStream *rs, uint32 version);
+ void saveData(Common::WriteStream *ws) override;
+
+private:
+ int32 _counter;
+ int32 _x;
+ int32 _y;
+ int32 _z;
+};
+
+} // End of namespace Ultima8
+} // End of namespace Ultima
+
+#endif
Commit: e749fb56c85f1d2b01d3f92e79c7b4028b2e37f2
https://github.com/scummvm/scummvm/commit/e749fb56c85f1d2b01d3f92e79c7b4028b2e37f2
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-31T20:52:06+09:00
Commit Message:
ULTIMA8: Wire up one No Regret intrinsic (isSfxPlayingForObject)
Changed paths:
engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
engines/ultima/ultima8/usecode/regret_intrinsics.h
diff --git a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
index 6837b10113..4138a27c81 100644
--- a/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
+++ b/engines/ultima/ultima8/convert/crusader/convert_usecode_regret.h
@@ -96,9 +96,9 @@ const char* const ConvertUsecodeRegret::_intrinsics[] = {
"Actor::destroyContents(void)",
"AudioProcess::I_setVolumeForItemSFX(uint16,uint16,byte)",
"Item::getDirToItem(uint16)",
- "Intrinsic0035()",
+ "AudioProcess::I_isSfxPlayingForObject(Item *,uint sfxno)",
"Item::I_getRangeIfVisible()",
- "udioProcess::I_playSFXCru()",
+ "AudioProcess::I_playSFXCru()",
"Item::andStatus(void)",
"Kernel::resetRef(uint16,ProcessType)",
"Item::touch(void)",
diff --git a/engines/ultima/ultima8/usecode/regret_intrinsics.h b/engines/ultima/ultima8/usecode/regret_intrinsics.h
index d3018fcf64..edb4cd5f6f 100644
--- a/engines/ultima/ultima8/usecode/regret_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/regret_intrinsics.h
@@ -87,7 +87,7 @@ Intrinsic RegretIntrinsics[] = {
Actor::I_destroyContents, // Intrinsic032()
0, // Intrinsic033() Item::I_SetVolumeForItemSFX
Item::I_getDirToItem, // Intrinsic034()
- 0, // Intrinsic035()
+ AudioProcess::I_isSFXPlayingForObject, // Intrinsic035()
Item::I_getRangeIfVisible, // Intrinsic036()
AudioProcess::I_playSFXCru, // Intrinsic037() TODO: Not exactly the same.
Item::I_andStatus, // Intrinsic038()
More information about the Scummvm-git-logs
mailing list