mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
151 lines
4.0 KiB
C++
151 lines
4.0 KiB
C++
/* 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 "sci/engine/features.h"
|
|
#include "sci/engine/hoyle5poker.h"
|
|
#include "sci/engine/kernel.h"
|
|
#include "sci/engine/script.h"
|
|
#include "sci/engine/selector.h"
|
|
#include "sci/engine/vm.h"
|
|
|
|
namespace Sci {
|
|
|
|
#ifdef ENABLE_SCI32
|
|
|
|
// The logic for the poker game in Hoyle Classic Games (Hoyle 5) is hardcoded
|
|
// in PENGIN16.DLL, which is then loaded and invoked via the kWinDLL kernel call.
|
|
// Note that the first player is the left one.
|
|
|
|
enum Hoyle5PokerSuits {
|
|
kSuitSpades = 0,
|
|
kSuitClubs = 1,
|
|
kSuitDiamonds = 2,
|
|
kSuitHearts = 3
|
|
};
|
|
|
|
enum Hoyle5PokerData {
|
|
kTotalChips = 1,
|
|
kCurrentPot = 2,
|
|
kCurrentBet = 3,
|
|
kChipsPlayer1 = 4,
|
|
kChipsPlayer2 = 5,
|
|
kChipsPlayer3 = 6,
|
|
kChipsPlayer4 = 7,
|
|
kStatusPlayer1 = 8,
|
|
kStatusPlayer2 = 9,
|
|
kStatusPlayer3 = 10,
|
|
kStatusPlayer4 = 11,
|
|
// 12 - 16 seem to be unused?
|
|
kCurrentPlayer = 17,
|
|
kCurrentStage = 18 // Stage 1: Card changes, 2: Betting
|
|
// 19 - 28: current player's cards (number + suit)
|
|
// 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 - 67 seem to be unused?
|
|
// 77 seems to be a bit array?
|
|
};
|
|
|
|
#if 0
|
|
Common::String getCardDescription(int16 card, int16 suit) {
|
|
Common::String result;
|
|
|
|
if (card >= 2 && card <= 10)
|
|
result += Common::String::format("%d", card);
|
|
else if (card == 11)
|
|
result = "Jack";
|
|
else if (card == 12)
|
|
result = "Queen";
|
|
else if (card == 13)
|
|
result = "King";
|
|
else if (card == 14)
|
|
result = "Ace";
|
|
else
|
|
result = "Unknown";
|
|
|
|
switch (suit) {
|
|
case kSuitSpades:
|
|
return result + " of spades";
|
|
case kSuitClubs:
|
|
return result + " of clubs";
|
|
case kSuitDiamonds:
|
|
return result + " of diamonds";
|
|
case kSuitHearts:
|
|
return result + " of hearts";
|
|
default:
|
|
return result + " of unknown";
|
|
}
|
|
}
|
|
|
|
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());
|
|
}
|
|
}
|
|
#endif
|
|
|
|
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));
|
|
}
|
|
#endif
|
|
|
|
warning("The Poker game logic has not been implemented yet");
|
|
return NULL_REG; // Returning 0 is a DLL invocation error for the game scripts
|
|
}
|
|
#endif
|
|
|
|
}
|