Files
scummvm/engines/sci/engine/hoyle5poker.cpp
T

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
}