[Scummvm-git-logs] scummvm master -> d1205abb7ca14be199b9c5120140d56bb52ee8aa

bluegr bluegr at gmail.com
Tue Feb 4 23:35:14 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:
d1205abb7c SCI32: More work on Hoyle 5 poker logic


Commit: d1205abb7ca14be199b9c5120140d56bb52ee8aa
    https://github.com/scummvm/scummvm/commit/d1205abb7ca14be199b9c5120140d56bb52ee8aa
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-02-05T01:34:30+02:00

Commit Message:
SCI32: More work on Hoyle 5 poker logic

Changed paths:
    engines/sci/engine/hoyle5poker.cpp


diff --git a/engines/sci/engine/hoyle5poker.cpp b/engines/sci/engine/hoyle5poker.cpp
index eca840a..1223236 100644
--- a/engines/sci/engine/hoyle5poker.cpp
+++ b/engines/sci/engine/hoyle5poker.cpp
@@ -42,20 +42,39 @@ enum Hoyle5PokerSuits {
 	kSuitHearts = 3
 };
 
+enum Hoyle5Operations {
+	kCheckPlayerAction = 1,	// localproc_0df8
+	kCheckWinner = 2,	// localproc_3020
+	kCheckDiscard = 3,	// PokerHand::think
+	kCheckHand = 4		// PokerHand::whatAmI
+};
+
+enum Hoyle5PlayerActions {
+	kPlayerActionCheck = -2,
+	kPlayerActionFold = -1,
+	kPlayerActionCall = 0,
+	kPlayerActionRaise = 1
+};
+
 enum Hoyle5PokerData {
+	kOperation = 0,
 	kTotalChips = 1,
 	kCurrentPot = 2,
 	kCurrentBet = 3,
-	kChipsPlayer1 = 4,
-	kChipsPlayer2 = 5,
-	kChipsPlayer3 = 6,
-	kChipsPlayer4 = 7,
+	kTotalChipsPlayer1 = 4,
+	kTotalChipsPlayer2 = 5,
+	kTotalChipsPlayer3 = 6,
+	kTotalChipsPlayer4 = 7,
 	kStatusPlayer1 = 8,
 	kStatusPlayer2 = 9,
 	kStatusPlayer3 = 10,
 	kStatusPlayer4 = 11,
-	// 12 - 16 seem to be unused?
-	kCurrentPlayer = 17,
+	kTotalBetPlayer1 = 12,
+	kTotalBetPlayer2 = 13,
+	kTotalBetPlayer3 = 14,
+	kTotalBetPlayer4 = 15,
+	// 16: related to the current bet
+	kCurrentPlayer = 17,	// hand number
 	kCurrentStage = 18,	// Stage 1: Card changes, 2: Betting
 	kCard0 = 19,
 	kSuit0 = 20,
@@ -71,16 +90,31 @@ enum Hoyle5PokerData {
 	// 29 - 38: next clockwise player's cards (number + suit)
 	// 39 - 48: next clockwise player's cards (number + suit)
 	// 49 - 58: next clockwise player's cards (number + suit)
-	// 59 - 60 seem to be unused?
-	// ---- Return values -----------------------------------
+	kUnkVar = 59,		  // set by localproc_0df8 to global 906
+	// ---- Return values - start ---------------------------
+	kPlayerAction = 60,    // flag, checked by localproc_0df8
 	kWhatAmIResult = 61,  // bitmask, 0 - 128, checked by PokerHand::whatAmI. Determines what kind of card each player has
 	kWinningPlayers = 62, // bitmask, winning players (0000 - 1111 binary), checked by localproc_3020
 	kDiscardCard0 = 63,	  // flag, checked by PokerHand::think
 	kDiscardCard1 = 64,	  // flag, checked by PokerHand::think
 	kDiscardCard2 = 65,	  // flag, checked by PokerHand::think
 	kDiscardCard3 = 66,	  // flag, checked by PokerHand::think
-	kDiscardCard4 = 67	  // flag, checked by PokerHand::think
-	// 77 seems to be a bit array?
+	kDiscardCard4 = 67,	  // flag, checked by PokerHand::think
+	// ---- Return values - end -----------------------------
+	// 77 is a random number (0 - 32767)
+	kLastRaise1 = 78,
+	kLastRaise2 = 79,
+	kLastRaise3 = 80,
+	kLastRaise4 = 81,
+	kLastSaw1 = 82,
+	kLastSaw2 = 83,
+	kLastSaw3 = 84,
+	kLastSaw4 = 85,
+	kTookCard1 = 86,
+	kTookCard2 = 87,
+	kTookCard3 = 88,
+	kTookCard4 = 89
+	// 90 is a number
 };
 
 #if 0
@@ -114,13 +148,47 @@ Common::String getCardDescription(int16 card, int16 suit) {
 	}
 }
 
-void printPlayerCards(int player, SciArray *data) {
-	debug("Player %d cards:", player);
-	for (int i = 19 + player * 10; i < 29 + player * 10; i += 2) {
-		if (data->getAsInt16(i) > 0)
-			debug("- %s", getCardDescription(data->getAsInt16(i), data->getAsInt16(i + 1)).c_str());
+void debugInputData(SciArray* data) {
+	debug("Player %d's turn", data->getAsInt16(kCurrentPlayer));
+
+	debug("Pot: %d, bet: %d", data->getAsInt16(kCurrentPot), data->getAsInt16(kCurrentBet));
+
+	debug("Chips: %d %d %d %d - %d in total",
+		data->getAsInt16(kTotalChipsPlayer1),
+		data->getAsInt16(kTotalChipsPlayer2),
+		data->getAsInt16(kTotalChipsPlayer3),
+		data->getAsInt16(kTotalChipsPlayer4),
+		data->getAsInt16(kTotalChips)
+	);
+
+	debug("Player status: %d %d %d %d",
+		data->getAsInt16(kStatusPlayer1),
+		data->getAsInt16(kStatusPlayer2),
+		data->getAsInt16(kStatusPlayer3),
+		data->getAsInt16(kStatusPlayer4)
+	);
+
+	for (int player = 0; player < 4; player++) {
+		debug("Player %d cards:", player);
+		for (int i = 19 + player * 10; i < 29 + player * 10; i += 2) {
+			if (data->getAsInt16(i) > 0)
+				debug("- %s", getCardDescription(data->getAsInt16(i), data->getAsInt16(i + 1)).c_str());
+		}
+	}
+
+	for (int i = 0; i < data->size(); i++) {
+		if (i >= kTotalChipsPlayer1 && i <= kTotalChipsPlayer4)
+			continue;
+		if (i >= 8 && i <= 11)
+			continue;
+		if (i >= 19 && i <= 58)
+			continue;
+
+		if (data->getAsInt16(i) != 0)
+			debug("%d: %d", i, data->getAsInt16(i));
 	}
 }
+
 #endif
 
 int getCardValue(int card) {
@@ -265,56 +333,40 @@ int getWinner(SciArray *data) {
 }
 
 reg_t hoyle5PokerEngine(SciArray *data) {
-#if 0
-	debug("Player %d's turn", data->getAsInt16(kCurrentPlayer));
-
-	debug("Pot: %d, bet: %d", data->getAsInt16(kCurrentPot), data->getAsInt16(kCurrentBet));
-
-	debug("Chips: %d %d %d %d - %d in total",
-		data->getAsInt16(kChipsPlayer1),
-		data->getAsInt16(kChipsPlayer2),
-		data->getAsInt16(kChipsPlayer3),
-		data->getAsInt16(kChipsPlayer4),
-		data->getAsInt16(kTotalChips)
-	);
-
-	debug("Player status: %d %d %d %d",
-		data->getAsInt16(kStatusPlayer1),
-		data->getAsInt16(kStatusPlayer2),
-		data->getAsInt16(kStatusPlayer3),
-		data->getAsInt16(kStatusPlayer4)
-	);
-
-	for (int i = 0; i < 4; i++)
-		printPlayerCards(i, data);
-
-	for (int i = 0; i < data->size(); i++) {
-		if (i >= kChipsPlayer1 && i <= kChipsPlayer4)
-			continue;
-		if (i >= 8 && i <= 11)
-			continue;
-		if (i >= 19 && i <= 58)
-			continue;
-
-		if (data->getAsInt16(i) != 0)
-			debug("%d: %d", i, data->getAsInt16(i));
+	int16 operation = data->getAsInt16(kOperation);
+	Common::RandomSource& rng = g_sci->getRNG();
+
+	//debugInputData(data);
+
+	switch (operation) {
+	case kCheckPlayerAction:
+		// TODO: logic for player actions
+		data->setFromInt16(kPlayerAction, (int16)rng.getRandomNumber(3) - 2);
+		warning("The Poker player action logic has not been implemented yet");
+		break;
+	case kCheckWinner:
+		data->setFromInt16(kWinningPlayers, 1 << getWinner(data));
+		break;
+	case kCheckDiscard:
+		// TODO: logic for card discard
+		data->setFromInt16(kDiscardCard0, (int16)rng.getRandomBit());
+		data->setFromInt16(kDiscardCard1, (int16)rng.getRandomBit());
+		data->setFromInt16(kDiscardCard2, (int16)rng.getRandomBit());
+		data->setFromInt16(kDiscardCard3, (int16)rng.getRandomBit());
+		data->setFromInt16(kDiscardCard4, (int16)rng.getRandomBit());
+		warning("The Poker card discard logic has not been implemented yet");
+		break;
+	case kCheckHand:
+		data->setFromInt16(kWhatAmIResult, checkHand(data));
+		break;
+	default:
+		error("Unknown Poker logic operation: %d", operation);
+		break;
 	}
-#endif
-
-	data->setFromInt16(kWhatAmIResult, checkHand(data));
-	data->setFromInt16(kWinningPlayers, 1 << getWinner(data));
-
-	// Dummy logic for card discard
-	Common::RandomSource &rng = g_sci->getRNG();
-	data->setFromInt16(kDiscardCard0,  (int)rng.getRandomBit());
-	data->setFromInt16(kDiscardCard1,  (int)rng.getRandomBit());
-	data->setFromInt16(kDiscardCard2,  (int)rng.getRandomBit());
-	data->setFromInt16(kDiscardCard3,  (int)rng.getRandomBit());
-	data->setFromInt16(kDiscardCard4,  (int)rng.getRandomBit());
-
-	warning("The Poker game logic has not been implemented yet");
+	
 	return TRUE_REG;
 }
+
 #endif
 
 }




More information about the Scummvm-git-logs mailing list