[Scummvm-git-logs] scummvm master -> 4a4fcbc2ec0611aacd4f371938c8876d40701cdd
mduggan
mgithub at guarana.org
Mon Jul 5 23:18:54 UTC 2021
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
58fece40aa ULTIMA8: Add custom deaths for No Regret weapons
4544336793 ULTIMA8: Add another special No Regret death animation
4a4fcbc2ec ULTIMA8: Fixes for No Regret menu buttons
Commit: 58fece40aaf9abf6b8ecd5e719756c6f230da8a4
https://github.com/scummvm/scummvm/commit/58fece40aaf9abf6b8ecd5e719756c6f230da8a4
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-07-06T08:16:20+09:00
Commit Message:
ULTIMA8: Add custom deaths for No Regret weapons
Changed paths:
devtools/create_ultima/files/ultima8/regretweapons.ini
engines/ultima/ultima8/games/game_data.cpp
engines/ultima/ultima8/world/actors/actor.cpp
engines/ultima/ultima8/world/item.cpp
engines/ultima/ultima8/world/super_sprite_process.cpp
diff --git a/devtools/create_ultima/files/ultima8/regretweapons.ini b/devtools/create_ultima/files/ultima8/regretweapons.ini
index a04ac589fd..2fba79201b 100644
--- a/devtools/create_ultima/files/ultima8/regretweapons.ini
+++ b/devtools/create_ultima/files/ultima8/regretweapons.ini
@@ -183,7 +183,7 @@ energy=0x0D2
shape=0x05F6
sound=0x162
ammo_type=6
-damage_type=0x0E
+damage_type=0x10
display_shape=3
display_frame=0xE
overlay_shape=0x036E
@@ -213,7 +213,6 @@ ammo_type=0
display_shape=3
display_frame=0x10
overlay_shape=0x033B
-# TODO: check this
overlay=4
shot_delay=6
energy=0x8C
diff --git a/engines/ultima/ultima8/games/game_data.cpp b/engines/ultima/ultima8/games/game_data.cpp
index 291f1143e2..6c7e3a39a4 100644
--- a/engines/ultima/ultima8/games/game_data.cpp
+++ b/engines/ultima/ultima8/games/game_data.cpp
@@ -542,7 +542,11 @@ void GameData::loadRemorseData() {
ConfigFileManager *config = ConfigFileManager::get_instance();
// Load weapon, armour info
- config->readConfigFile("data/remorseweapons.ini", "weapons");
+ if (_gameInfo->_type == GameInfo::GAME_REMORSE)
+ config->readConfigFile("data/remorseweapons.ini", "weapons");
+ else
+ config->readConfigFile("data/regretweapons.ini", "weapons");
+
config->readConfigFile("data/remorse.ini", "game");
// Load typeflags
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 4872f8dc45..44d6989247 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -1460,6 +1460,23 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
setShape(0x59c);
setToStartOfAnim(Animation::fallBackwardsCru);
}
+ } else if ((damageType == 0x10) || (damageType == 0x12)) {
+ if (!is_robot) {
+ setShape(0x5d6);
+ setToStartOfAnim(Animation::fallBackwardsCru);
+ }
+ } else if (damageType == 0x11) {
+ if (!is_robot) {
+ setShape(0x62d);
+ setToStartOfAnim(Animation::fallBackwardsCru);
+ }
+ } else if (damageType == 0x14) {
+ if (!is_robot) {
+ if (true /*isViolenceEnabled()*/) {
+ setShape(0x278);
+ setToStartOfAnim(Animation::fallBackwardsCru);
+ }
+ }
} else if (damageType == 7 && _objId == 1) {
lastanim = doAnimAfter(Animation::electrocuted, dir_current, lastanim);
}
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 868c38671d..c616e7e610 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -1253,6 +1253,15 @@ uint16 Item::fireWeapon(int32 x, int32 y, int32 z, Direction dir, int firetype,
case 0x11: // No Regret only
spriteframe = dir * 6 + 0x78;
break;
+ case 0x14: // No Regret only
+ spriteframe = dir * 3 + 0xdc;
+ break;
+ case 0x15: // No Regret only
+ spriteframe = dir + 100;
+ break;
+ case 0x16: // No Regret only
+ spriteframe = dir + 0x11;
+ break;
default:
break;
}
diff --git a/engines/ultima/ultima8/world/super_sprite_process.cpp b/engines/ultima/ultima8/world/super_sprite_process.cpp
index 2fa4a35a28..fc46ff2c55 100644
--- a/engines/ultima/ultima8/world/super_sprite_process.cpp
+++ b/engines/ultima/ultima8/world/super_sprite_process.cpp
@@ -414,12 +414,19 @@ void SuperSpriteProcess::advanceFrame() {
Item *sprite = getItem(_spriteNo);
assert(sprite);
sprite->move(_nextpt);
+ uint32 frame = sprite->getFrame() + 1;
if (_fireType == 0xe) {
- uint32 frame = sprite->getFrame();
- frame++;
if (frame > 0x4b)
frame = 0x47;
sprite->setFrame(frame);
+ } else if (_fireType == 0x11) { // No Regret only
+ if (frame % 6 == 0)
+ frame = frame - 5;
+ sprite->setFrame(frame);
+ } else if (_fireType == 0x14) { // No Regret only
+ if ((frame - 0xdb) % 3 == 0)
+ frame = frame - 2;
+ sprite->setFrame(frame);
}
}
Commit: 45443367930abfb42e5f336747256e955b15111e
https://github.com/scummvm/scummvm/commit/45443367930abfb42e5f336747256e955b15111e
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-07-06T08:16:20+09:00
Commit Message:
ULTIMA8: Add another special No Regret death animation
Changed paths:
engines/ultima/ultima8/world/actors/actor.cpp
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 44d6989247..3ae2afd9eb 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -936,7 +936,7 @@ void Actor::receiveHitCru(uint16 other, Direction dir, int damage, uint16 damage
*/
}
- if (isDead())
+ if (isDead() && (getShape() != 0x5d6 || GAME_IS_REMORSE))
return;
_lastTickWasHit = Kernel::get_instance()->getTickNum();
@@ -1395,7 +1395,13 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
destroyContents();
giveTreasure();
- if (damageType == 3 || damageType == 4 || damageType == 10 || damageType == 12) {
+ if (getShape() == 0x5d6 && GAME_IS_REGRET) {
+ // you only die twice.. (frozen person breaking into pieces)
+ if (!isBusy()) {
+ setShape(0x5ef);
+ setToStartOfAnim(Animation::fallBackwardsCru);
+ }
+ } else if (damageType == 3 || damageType == 4 || damageType == 10 || damageType == 12) {
if (!is_robot /* && violence enabled */) {
const FireType *ft = GameData::get_instance()->getFireType(damageType);
assert(ft);
Commit: 4a4fcbc2ec0611aacd4f371938c8876d40701cdd
https://github.com/scummvm/scummvm/commit/4a4fcbc2ec0611aacd4f371938c8876d40701cdd
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-07-06T08:16:20+09:00
Commit Message:
ULTIMA8: Fixes for No Regret menu buttons
Put the buttons in the right place, and set layer to ensure the buttons stay
above the background frame.
Changed paths:
engines/ultima/ultima8/gumps/cru_menu_gump.cpp
diff --git a/engines/ultima/ultima8/gumps/cru_menu_gump.cpp b/engines/ultima/ultima8/gumps/cru_menu_gump.cpp
index 2c022ffe58..ba8634fb07 100644
--- a/engines/ultima/ultima8/gumps/cru_menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_menu_gump.cpp
@@ -85,22 +85,24 @@ void CruMenuGump::Close(bool no_del) {
ModalGump::Close(no_del);
}
-static const int frameTopLeft = 54;
-static const int firstMenuEntry = 58;
+static const int FRAME_TOP_LEFT = 54;
+static const int FIRST_MENU_ENTRY = 58;
-static const int numMenuEntries = 6;
-static const int menuEntryX[] = {45, 45, 45, 446, 488, 550};
-static const int menuEntryY[] = {50, 101, 151, 58, 151, 198};
+static const int NUM_MENU_ENTRIES = 6;
+static const int MENU_ENTRY_X_REM[] = {45, 45, 45, 446, 488, 550};
+static const int MENU_ENTRY_Y_REM[] = {50, 101, 151, 58, 151, 198};
+static const int MENU_ENTRY_X_REG[] = {45, 45, 45, 446, 489, 550};
+static const int MENU_ENTRY_Y_REG[] = {95, 147, 197, 103, 196, 243};
void CruMenuGump::InitGump(Gump *newparent, bool take_focus) {
ModalGump::InitGump(newparent, take_focus);
GumpShapeArchive *shapeArchive = GameData::get_instance()->getGumps();
- Shape *topLeft = shapeArchive->getShape(frameTopLeft);
- Shape *topRight = shapeArchive->getShape(frameTopLeft + 1);
- Shape *botLeft = shapeArchive->getShape(frameTopLeft + 2);
- Shape *botRight = shapeArchive->getShape(frameTopLeft + 3);
+ Shape *topLeft = shapeArchive->getShape(FRAME_TOP_LEFT);
+ Shape *topRight = shapeArchive->getShape(FRAME_TOP_LEFT + 1);
+ Shape *botLeft = shapeArchive->getShape(FRAME_TOP_LEFT + 2);
+ Shape *botRight = shapeArchive->getShape(FRAME_TOP_LEFT + 3);
if (!topLeft || !topRight || !botLeft || !botRight) {
error("Couldn't load shapes for menu background");
@@ -130,21 +132,24 @@ void CruMenuGump::InitGump(Gump *newparent, bool take_focus) {
_dims.setWidth(tlFrame->_width + trFrame->_width);
_dims.setHeight(tlFrame->_height + brFrame->_height);
- Gump *tlGump = new Gump(0, 0, tlFrame->_width, tlFrame->_height);
+ Gump *tlGump = new Gump(0, 0, tlFrame->_width, tlFrame->_height, 0, 0, _layer);
tlGump->SetShape(topLeft, 0);
tlGump->InitGump(this, false);
- Gump *trGump = new Gump(tlFrame->_width, 0, trFrame->_width, trFrame->_height);
+ Gump *trGump = new Gump(tlFrame->_width, 0, trFrame->_width, trFrame->_height, 0, 0, _layer);
trGump->SetShape(topRight, 0);
trGump->InitGump(this, false);
- Gump *blGump = new Gump(0, tlFrame->_height, blFrame->_width, blFrame->_height);
+ Gump *blGump = new Gump(0, tlFrame->_height, blFrame->_width, blFrame->_height, 0, 0, _layer);
blGump->SetShape(botLeft, 0);
blGump->InitGump(this, false);
- Gump *brGump = new Gump(blFrame->_width, trFrame->_height, brFrame->_width, brFrame->_height);
+ Gump *brGump = new Gump(blFrame->_width, trFrame->_height, brFrame->_width, brFrame->_height, 0, 0, _layer);
brGump->SetShape(botRight, 0);
brGump->InitGump(this, false);
- for (int i = 0; i < numMenuEntries; i++) {
- uint32 entryShapeNum = firstMenuEntry + i;
+ const int *MENU_ENTRY_X = GAME_IS_REMORSE ? MENU_ENTRY_X_REM : MENU_ENTRY_X_REG;
+ const int *MENU_ENTRY_Y = GAME_IS_REMORSE ? MENU_ENTRY_Y_REM : MENU_ENTRY_Y_REG;
+
+ for (int i = 0; i < NUM_MENU_ENTRIES; i++) {
+ uint32 entryShapeNum = FIRST_MENU_ENTRY + i;
Shape *menuEntry = shapeArchive->getShape(entryShapeNum);
if (!menuEntry) {
error("Couldn't load shape for menu entry %d", i);
@@ -160,7 +165,8 @@ void CruMenuGump::InitGump(Gump *newparent, bool take_focus) {
FrameID frame_up(GameData::GUMPS, entryShapeNum, 0);
FrameID frame_down(GameData::GUMPS, entryShapeNum, 1);
- Gump *widget = new ButtonWidget(menuEntryX[i], menuEntryY[i], frame_up, frame_down, true);
+ Gump *widget = new ButtonWidget(MENU_ENTRY_X[i], MENU_ENTRY_Y[i],
+ frame_up, frame_down, true, _layer + 1);
widget->InitGump(this, false);
widget->SetIndex(i + 1);
}
More information about the Scummvm-git-logs
mailing list