[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