WinHoldEm Help - Formula Editor

Home Help Download Support My license License agreement Pricing System requirements Notices


Dialog Buttons
Formulas Call/Rais/Alli EV P Play Test Debug
Symbols Hand Symbols Poker Value Card Symbols Card Values Rank Bits
C Programming Expressions Tutorial
Syntax Constants Operators

WH Formula Editor Dialog

WinHoldem is a fully programmable poker bot. WinHoldem by itself is just a tool. But it is very powerful tool given the right formulas. These formulas are the real brains inside your bot. Use a bad formula and lose. Use a good one and win.

Buttons

Pressing the OK button will apply all of your formula changes and close the dialog.
Pressing the APPLY button will apply all of your formula changes but continue the dialog.
Pressing the CANCEL button will diregard any unapplied changes and close the dialog.
Pressing the RESET button will change only the visible formula tab to the default
Pressing the RESETALL button will change all the formulas to their default values.
Pressing the CALCULATE button will evaluate the currently visible formula and display the result.
Pressing any of the window tabs will display the selected formula for that tab.
Additional Format Buttons

All of your formulas are saved in a file called WH.DAT.
winholdem.dat is loaded when you launch WinHoldem.
winholdem.dat is saved when you close the formula editor.

Primary Formulas

During a game of holdem and poker in general there are a minimum of two questions that must be answered.
The first question is 'Should I Call?".
The second question is 'Should I Raise? (or bet)".
When Playing No Limit Holdem there is a third qestion as well.
The third question is "Should I Allin?".

The first three window tabs on the WinHoldem Formula Editor Dialog are 'call', 'rais', 'alli'. Left clicking on any of these tabs will display the corresponding formula. And these three formulas are the very emphatic non-ambiguous YES/NO answers to the big 3 poker questions.

These three primary formulas are sometimes referred to as the 'should' formulas. Because they are the last formulas that get evaluated right before WinHoldem decides whether or not he 'should' or 'should' not push a button for you.

AUTOPLAYER PROCESSING LOGIC

EV Formulas

The next two window tabs on the WinHoldem Formula Editor Dialog are 'evcall' and 'evrais'. Left clicking on any of these tabs will display the corresponding formula. The letters EV stand for 'Expected Value'. And the purpose of the EV formulas is to assign a number to their respective actions. The evcall formula assigns a number value to calling the current bet. The evrais formula assigns a number value to raising the current bet. The Primary formulas then use these values in part to decide whether or not you 'should' call or raise.

In general the EV formulas should be written in such a way so that they evaluate to large positive numbers when that action is desirable and evaluate to large negative numbers when that action is undesirable. Ideally the EV formulas should evaluate to the exact average amount of money you would win or lose if you played this exact poker moment over and over millions of times. The default primary formulas will select the poker action based on the best EV.

P Formula

Left clicking on the P formula tab will display the P formula. The letter P stands for opponent - more specifically the number of opponents that the analyzers should use.

The WinHoldem analyzers are constantly looking at your odds of winning the hand. Anytime the game state changes they will recalculate your chances. The P value is important to the analyzers because it determines how many opposing hands the analyzers simulate. And the P value will radically effect the resulting win,los,tie probabilities. The higher the P value the more opponent hands will be simulated and your win probability will be lower. The lower the P value the less opponent hands will be simulated and your win probability will be higher. For instance, AA against 9 opponents (P=9) has about a 30% chance of success assuming every hand stays for the showdown. AA against 1 opponent (P=1) has about an 80% chance or more of success.

By default, the possible values for P are 0-9 inclusive regardless of the value of your P formula. You can modify the maximum P value (1-22) from the options/analyzer menu.

If you are in solo mode (no friends) then when the analzyers encounter a P value of 0 they will abruptly stop calculating because it looks like the hand is over if there are zero opponents remaining. Be very careful with the P formula and 0 value. In solo mode 0 means stop calculating; and the autoplayer will not press any buttons if the analyzers were stopped in the middle of a calculation. The analyzers must do a complete run in order for the autoplayer to act.

If you are playing in team mode, and the analyzers encounter a P value of 0 and there are 2 or more friendly hands remaining in the game, the analyzers will drop into comparison mode and measure each friendly hand against the other.

In manual mode this is also a great way to see how each holdem hand will do against any other.

Play Formula

Left clicking on the play formula tab will display the play formula.

The purpose of the play formula is to give you the ability to control whether or not to play another hand. For instance you may have a formula set that is tuned to play one to three opponents and so you would like to sitout as soon as a fourth opponent joins the game.

Play Formula ResultWinHoldEm Autoplayer Action
null/empty/blank feature disabled no action taken
(-2) negative two the autoplayer will press the leave table button
(-1) negative one feature disabled no action taken
(0) zero the autoplayer will select sit out
(+1) positive one the autoplayer will select sit in *

* NOTE: when the play formula is active and sittingin, the autoplayer will also select auto-post blinds.

Test Formula

Left clicking on the test tab will display the test formula. The purpose of the test formula is to provide a workbench where you can develop new formulas and make changes to existing ones. It is purely for your own use. It is also very useful to test different symbol values as play professes.

Debug Tab

The debug tab operates differently than the other formula tabs. The debug tab allows you to examine individual formula expressions. Each formula expression occupies a single line in the edit window. To add a new expression simply add the expression at the beginning of a new line or add the expresion anywhere on the line preceded by an equal sign as in the following examples:

2+2 // two plus two
... = 2+2 // two plus two
// line comments must start at the beginning of a line
4 = 2+2 // or after an equal sign
/*
block comments must open and close
at the beginning of a line
*/

Press the calculate button to recalc all of the lines in the window.

There are several formatting buttons used by the debug tab:
Formatting Options
Button Result Field
< decrease width
> increase width
- decrease precision
+ increase precision
. fixed precision
| fixed width
Auto calculate once per second

If you have autocalc enabled and you click in the edit window then autocalc will switch off.

Remember that each line must be a valid formula expression. An invalid expression will be indicated as an error.

Syntax

The C Programming Expressions Tutorial (syntax)

WinHoldem Formula Numeric Constants

The C Programming Expressions Tutorial (constants)

WinHoldem Formula Operators

The C Programming Expressions Tutorial (operators)

WinHoldem Formula Symbols

symbolmeaning
ismanual true if you're in manual mode, false otherwise
isppro true if you're connected to a ppro server
site 0=user/ppro 1=uniscraper
nchairs the integer value for unscraper symbol s$nchairs
isbring true if winholdem is attached to a bring client window
session the current logging instance (0-9)
handnumber the site hand number if available (negative values are scraper simulated)
profile (optional) 
sitename$abc true if user defined string abc appears within uniscraper symbol s$sitename
swagdelay autoplayer delay in milliseconds between swag keystrokes and button click
allidelay autoplayer delay in milliseconds between alli slider jam and button click
swagtextmethod the site interpretation for swag edit text (uniscraper symbol)
1=f$srai 2=f$srai+call 3=f$srai+call+currentbet
formula file 
rake percentage amount added/subtracted to/from the pot
nit number of iterations tested by the analyzer(s)
bankroll the user defined real world bankroll
LIMITS 
bblind the big blind amount
sblind the small blind amount
ante the current pre-deal ante requirement
lim the current table limit 0=NL 1=PL 2=FL
isnl (lim==0)
ispl (lim==1)
isfl (lim==2)
sraiprev the difference between the two largest unique wagers
sraimin direct connect - the greater of bet and the current raise
scraped connect - (currentbet+call)
sraimax (balance-call)
istournament true if a tournament table is detected
HAND RANK(HAND RANKINGS TABLE) (NOFOLDEM PROBABILITIES TABLE)
handrank one of the following based on your selected option
handrank169 your pocket holdem hand rank 1-169 (see table)
handrank2652 your pocket holdem hand rank 12-2652 (see table)
handrank1326 your pocket holdem hand rank 6-1326 (handrank2652/2)
handrank1000 your pocket holdem hand rank 4-1000 (1000*handrank2652/2652)
handrankp 2652 / (1+nopponents)
CHAIRS 
chair your chair number 0-9 ... 0 is usually top right
userchair user chair number (0-9)
dealerchair dealer chair number (0-9)
raischair raising chair number (0-9)
chair$abc player abc chair number (0-9); -1 if not found
chairbit$abc player abc chairbit (1 << chair$abc); 0 if not found
ROUNDS
POSITIONS
 
betround betting round (1-4) 1=preflop, 2=flop, 3=turn, 4=river
br abbreviation for betround
betposition your bet position (1=sblind,2=bblind,...,nplayersdealt=dealer)
betposition will change as players fold in front of you.
dealposition your deal position (1=sblind,2=bblind ... nplayersdealt=dealer)
dealposition will not change as players fold.
callposition your numbered offset from the raising player (who is 0)
seatposition your seat position relative to the dealer
dealpositionrais the deal position of the raising player (1-10)
betpositionrais the bet position of the raising player (1-10)
PROBABILITIES 
prwin the probability of winning this hand (0.000 - 1.000)
prlos the probability of losing this hand (0.000 - 1.000)
prtie the probability of pushing this hand (0.000 - 1.000)
random random number between (0.000-1.000)
randomhand random number between (0.000-1.000) for the hand
randomround random number between (0.000-1.000) for the current round
randomround1 random number between (0.000-1.000) for round 1
randomround2 random number between (0.000-1.000) for round 2
randomround3 random number between (0.000-1.000) for round 3
randomround4 random number between (0.000-1.000) for round 4
STATISTICS 
callror the statistical risk of ruin for call decision
raisror the statistical risk of ruin for rais decision
srairor the statistical risk of ruin for srai decision
alliror the statistical risk of ruin for alli decision
callmean the statistical mean for call decision
raismean the statistical mean for rais decision
sraimean the statistical mean for srai decision
allimean the statistical mean for alli decision
callvariance the statistical variance for call decision
raisvariance the statistical variance for rais decision
sraivariance the statistical variance for srai decision
allivariance the statistical variance for alli decision
FORMULAS 
f$name reference the specified formula
f$name_default reference the specified formula default if it exists
P FORMULA 
defcondefense level used in P formula
determines the number of analyzer opponents
(0.000=maxoffense 1.000=maxdefense)
(the defense level dialog uses values 0-10)
isdefmodetrue when defcon is at max
isaggmodetrue when defcon is at min
CHIP AMOUNTS 
balance your balance
balance0 - balance9 specific player/chair balance
stack0 - stack9 sorted playersplaying balances from 0=biggest to 9=smallest
currentbet your current amount of chips in play
currentbet0 - currentbet9 specific player/chair currentbet
call the amount you need to call
bet the amount of a single initial bet or raise for current round
bet1 the amount of a single initial bet or raise for round 1
bet2 the amount of a single initial bet or raise for round 2
bet3 the amount of a single initial bet or raise for round 3
bet4 the amount of a single initial bet or raise for round 4
pot the total amount of chips in play including player bets
potcommon the total amount of chips in the middle
potplayer the total amount of chips in front of all players
callshort total amount that will be added to the pot if all players call
raisshort callshort + bet * nplayersplaying
NUMBER OF BETS 
nbetstocall total number of additional bets required to call.
nbetstorais total number of additional bets required to raise.
ncurrentbets total number of bets currently in front of you.
ncallbets total number of bets you would have on the table if you call
nraisbets total number of bets you would have on the table if you raise
LIST TESTS 
islist0 - islist31 true if your hand is in the numbered (0-31) list
islistcall true if your hand is in list 0
islistrais true if your hand is in list 1
islistalli true if your hand is in list 7
isemptylistcall true if the call list is empty
isemptylistrais true if the rais list is empty
isemptylistalli true if the alli list is empty
LIST NUMBERS 
nlistmax highest list number in which your hand is listed
nlistmin lowest list number in which your hand is listed
POKER VALUES
pokerval absolute poker value for your 5 card hand
pokervalplayer absolute poker value for your 2 card pocket hand only.
pokervalcommon absolute poker value for the common cards
pcbitsbit list of where your pocket cards are used in your 5 card hand
npcbitsnumber (0-2) of your pocket cards used in your 5 card hand
POKER VALUE CONSTANTS 
hicard 1<< 0 (2 ** 0)
onepair 1<<24 (2 ** 24)
twopair 1<<25 (2 ** 25)
threeofakind 1<<26 (2 ** 26)
straight 1<<27 (2 ** 27)
flush 1<<28 (2 ** 28)
fullhouse 1<<29 (2 ** 29)
fourofakind 1<<30 (2 ** 30)
straightflush 1<<31 (2 ** 31)
royalflush 0x800edcba
fiveofakind 0xff000000
HAND
TESTS
 
$CCcsee the hand symbol reference for details
ishandup true if your hand has gone up a level
(i.e. from 1 pair to 2 pair)
ishandupcommon true if common hand has gone up a level
(i.e. from 1 pair to 2 pair)
ishicard true when you have hicard hand
isonepair true when you have one pair
istwopair true when you have two pair
isthreeofakind true when you have three of a kind
isstraight true when you have a straight
isflush true when you have a flush
isfullhouse true when you have a full house
isfourofakind true when you have four of a kind
isstraightflush true when you have a straight flush
isroyalflush true when you have a royal flush
isfiveofakind true when you have a five of a kind
POCKET
TESTS
 
ispair true when your two dealt pocket cards are rank equal (0-1)
issuited true when your two dealt pocket cards are suit equal (0-1)
isconnector true when your two dealt pocket cards are rank adjacent (0-1)
POCKET/COMMON
TESTS
 
ishipair true when you have hi pair (0-1)
islopair true when you have lo pair (0-1)
ismidpair true when you have mid pair (0-1)
ishistraight true when you have the highest straight possible
ishiflush true when you have the highest flush possible
PLAYERS
FRIENDS
OPPONENTS
 
nopponents P formula value for the userchair iterator
nopponentsmax maximum allowable value for nopponents (1-22 default=9)
nplayersseated number of players seated (including you) (0-10)
nplayersactive number of players active (including you) (0-10)
nplayersdealt number of players dealt (including you) (0-10)
nplayersplaying number of players playing (including you) (0-10)
nplayersblind number of players blind (including you) (0-10)
nfriendssseated number of friends seated (including you) (1-10)
nfriendssactive number of friends active (including you) (1-10)
nfriendsdealt number of friends dealt (including you) (1-10)
nfriendsplaying number of friends playing (including you) (1-10)
nfriendsblind number of friends blind (including you) (1-10)
nopponentsseated number of opponents seated (not including you) (0-9)
nopponentssactive number of opponents active (not including you) (0-9)
nopponentsdealt number of opponents dealt (not including you) (0-9)
nopponentsplaying number of opponents playing (not including you) (0-9)
nopponentsblind number of opponents blind (not including you) (0-9)
nopponentschecking number of opponents playing with a zero current bet equal to the previous bettor (0-9)
nopponentscalling number of opponents playing with a non-zero current bet equal to the previous bettor (0-9)
nopponentsraising number of opponents playing with a current bet greater than the previous bettor (0-9)
nopponentsbetting number of opponents playing with a non zero current bet (0-9)
nopponentsfolded number of opponents that have folded this hand (0-9)
nplayerscallshort number of players that must call to stay in the hand
nchairsdealtright number of chairs dealt before your chair
nchairsdealtleft number of chairs dealt after your chair
playersseatedbits bits 9-0: 1=seated 0=unseated
playersactivebits bits 9-0: 1=active 0=inactive
playersdealtbits bits 9-0: 1=dealt 0=notdealt
playersplayingbits bits 9-0: 1=playing 0=notplaying
playersblindbits bits 9-0: 1=blind 0=notblind
opponentsseatedbits bits 9-0: 1=seated 0=unseated
opponentsactivebits bits 9-0: 1=active 0=inactive
opponentsdealtbits bits 9-0: 1=dealt 0=notdealt
opponentsplayingbits bits 9-0: 1=playing 0=notplaying
opponentsblindbits bits 9-0: 1=blind 0=notblind
friendsseatedbits bits 9-0: 1=seated 0=unseated
friendsactivebits bits 9-0: 1=active 0=inactive
friendsdealtbits bits 9-0: 1=dealt 0=notdealt
friendsplayingbits bits 9-0: 1=playing 0=notplaying
friendsblindbits bits 9-0: 1=blind 0=notblind
FLAGS 
fmax highest numbered flag button pressed
f0 true if flag 0 button is pressed false otherwise
f1 true if flag 1 button is pressed false otherwise
f2 true if flag 2 button is pressed false otherwise
f3 true if flag 3 button is pressed false otherwise
f4 true if flag 4 button is pressed false otherwise
f5 true if flag 5 button is pressed false otherwise
f6 true if flag 6 button is pressed false otherwise
f7 true if flag 7 button is pressed false otherwise
f8 true if flag 8 button is pressed false otherwise
f9 true if flag 9 button is pressed false otherwise
fbits flag button bits 9-0 - 1=pressed 0=notpressed
COMMON CARDS 
ncommoncardspresent number of common cards present (normal or highlighted)
ncommoncardsknown number of common cards known (normal not highlighted)
nflopc short for ncommoncardsknown
(UN)KNOWN CARDS 
nouts the total number of unseen single cards that if dealt to the board might put your hand in the lead. to be counted as an out, the card must be able to bump your level and your new level must be higher than the resulting common level
ncardsknown total number of cards you can see (yours and commons)
ncardsunknown total number of cards you cannot see (deck and opponents)
ncardsbetter total number of single unknown cards that can beat you, e.g. if the board is four suited in hearts, and you have two spades, then ncardsbetter will be at least 9, because of the possible flush.
NHANDS 
nhands total possible number of two-card hands using the unseen cards
(nhandshi+nhandslo+nhandsti)
nhandshi number of hands that can beat you in a showdown right now
nhandslo number of hands that you can beat in a showdown right now
nhandsti number of hands that can tie you in a showdown right now
prwinnow probability that all opponents have a lower hand right now
prlosnow probability that any opponents have a higher hand right now
FLUSHES
SETS
STRAIGHTS
 
nsuited total number of same suited cards you have (1-7)
nsuitedcommon total number of same suited cards in the middle (1-5)
tsuit specific card suit for nsuited (1-4)
tsuitcommon specific card suit for nsuitedcommon (1-4)
nranked total number of same ranked cards you have (1-4)
nrankedcommon total number of same ranked cards in the middle (1-4)
trank specific card rank for nranked (2-14)
trankcommon specific card rank for nrankedcommon (2-14)
nstraight total number of connected cards you have (1-7)
nstraightcommontotal number of connected common cards (1-5)
nstraightfill total number of cards needed to fill a straight (0-5)
nstraightfillcommon total number of cards needed to fill a common straight (0-5)
nstraightflush total number of suited connected cards you have (1-7)
nstraightflushcommontotal number of suited connected common cards (1-5)
nstraightflushfill total number of cards needed to fill a straightflush (0-5)
nstraightflushfillcommon total number of cards needed to fill a common straightflush (0-5)
RANK BITS(* aces are hi and lo *)
rankbits bit list of card ranks (yours and commons)
rankbitscommon bit list of card ranks (commons)
rankbitsplayer bit list of card ranks (yours)
rankbitspoker bit list of card ranks (pokerval)
srankbits bit list of suited card ranks (yours and commons tsuit)
srankbitscommon bit list of suited card ranks (commons tsuitcommon)
srankbitsplayer bit list of suited card ranks (yours tsuit)
srankbitspoker bit list of suited card ranks (pokerval tsuit)
RANK HI(* aces are hi *)
rankhi highest card rank (14-2) (yours and commons)
rankhicommon highest card rank (14-2) (commons)
rankhiplayer highest card rank (14-2) (yours)
rankhipoker highest card rank (14-2) (pokerval)
srankhi highest suited card rank (14-2) (yours and commons tsuit)
srankhicommon highest suited card rank (14-2) (commons tsuitcommon)
srankhiplayer highest suited card rank (14-2) (yours tsuit)
srankhipoker highest suited card rank (14-2) (pokerval tsuit)
RANK LO(* aces are hi *)
ranklo lowest card rank (14-2) (yours and commons)
ranklocommon lowest card rank (14-2) (commons)
rankloplayer lowest card rank (14-2) (yours)
ranklopoker lowest card rank (14-2) (pokerval)
sranklo lowest suited card rank (14-2) (yours and commons tsuit)
sranklocommon lowest suited card rank (14-2) (commons tsuitcommon)
srankloplayer lowest suited card rank (14-2) (yours tsuit)
sranklopoker lowest suited card rank (14-2) (pokerval tsuit)
TIME 
elapsed time in seconds since sitting down
elapsedhand time in seconds since end of previous hand
elapsedauto time in seconds since autoplayer took action
elapsedtoday time in seconds since midnight GMT
elapsed1970 time in seconds since 1970-01-01 00:00:00 GMT (THURSDAY)
clocks number of cpu clocks since the last scrape
nclockspersecond number of cpu clocks per second
ncps number of cpu clocks per second
AUTOPLAYER 
myturnbits bits 3210 correspond to buttons ARCF (alli rais call fold)
ismyturn (myturnbits & 7) (rais or call/chec or fold)
issittingin true when you are not being dealt out
issittingout true when you are being dealt out
isautopost true when you are autoposting
isfinalanswer true when autoplayer preparing to act; false any other time.
HISTORY 
nplayersround1 number of players that began betting round 1 (deal)
nplayersround2 number of players that began betting round 2 (flop)
nplayersround3 number of players that began betting round 3 (turn)
nplayersround4 number of players that began betting round 4 (river)
nplayersround number of players that began the current betting round
prevaction record of previously attempted autoplayer action
(-1=fold 0=chec 1=call 2=rais 3=swag 4=alli)
didchec true if the autoplayer has checked during current round
didcall true if the autoplayer has called during current round
didrais true if the autoplayer has raised during current round
didswag true if the autoplayer has swag'd during current round
nbetsround1 the largest number of bets in front of any player during round1
nbetsround2 the largest number of bets in front of any player during round2
nbetsround3 the largest number of bets in front of any player during round3
nbetsround4 the largest number of bets in front of any player during round4
nbetsround the largest number of bets in front of any player right now
didchecround1 true if userchair checked during round1
didchecround2 true if userchair checked during round2
didchecround3 true if userchair checked during round3
didchecround4 true if userchair checked during round4
didcallround1 true if userchair called during round1
didcallround2 true if userchair called during round2
didcallround3 true if userchair called during round3
didcallround4 true if userchair called during round4
didraisround1 true if userchair raised during round1
didraisround2 true if userchair raised during round2
didraisround3 true if userchair raised during round3
didraisround4 true if userchair raised during round4
didswaground1 true if userchair swag'd during round1
didswaground2 true if userchair swag'd during round2
didswaground3 true if userchair swag'd during round3
didswaground4 true if userchair swag'd during round4
ron$...
run$...
these symbols defined below report the total number of possible river endings for the opponent (ron$) and the user (run$). a value of zero means that type of poker hand is not possible. any non-zero value means that type of poker hand was seen that many times.
POKER HAND FREQUENCY TABLE
ron$ 
ron$royfl river opponent number : possible royal flush
ron$strfl river opponent number : possible straight flush
ron$4kind river opponent number : possible four of a kind
ron$fullh river opponent number : possible full house
ron$flush river opponent number : possible flush
ron$strai river opponent number : possible straight
ron$3kind river opponent number : possible three of a kind
ron$2pair river opponent number : possible two pair
ron$1pair river opponent number : possible one pair
ron$hcard river opponent number : possible high card
ron$total river opponent number : sum of all possible river endings
ron$pokervalmax the maximum possible pokerval for the opponent
ron$prnuts opponent chances of hitting the nuts on or before the river
ron$prbest opponent chances of hitting pokervalmax on or before the river
ron$clocks total number of cpu clocks used to calculate the ron$ symbols
run$ 
run$royfl river user number : possible royal flush
run$strfl river user number : possible straight flush
run$4kind river user number : possible four of a kind
run$fullh river user number : possible full house
run$flush river user number : possible flush
run$strai river user number : possible straight
run$3kind river user number : possible three of a kind
run$2pair river user number : possible two pair
run$1pair river user number : possible one pair
run$hcard river user number : possible high card
run$total river user number : sum of all possible river endings
run$pokervalmax the maximum possible pokerval for the user
run$prnuts user chances of hitting the nuts on or before the river
run$prbest user chances of hitting pokervalmax on or before the river
run$clocks total number of cpu clocks used to calculate the run$ symbols
SYMBOL CACHE 
scnhit total number of symbol resolutions from the cache (more is better)
scnmiss total number of symbol recalculations (less is better)
scnused total number of symbol records in the cache
scage the incrementing age of the cache

Hand Symbols

You can reference your dealt hand directly by using the $ symbols.
The general form of the $ hand symbols are:
$RRs

The $ character is required followed by 1 or 2 standard card rank characters:
A,K,Q,J,T,9-2 or by X or x which is a wild card that will match any rank.
followed by an optional suit indicator:
s - suited
o - offsuit
If the suit indicator is omitted then suit does not matter.
The hand symbols are not case sensitvie. (case does not matter)

Here are some examples with explanation:
$AAtrue if you were dealt aces
$JTtrue if you were dealt jack ten
$AKstrue if you were dealt ace king suited
$49otrue if you were dealt four nine offsuit
$QXstrue if you were dealt queen any suited
$Jtrue if you were dealt any jack
$XXstrue if you were dealt any suited hand
$XXotrue if you were dealt any offsuited hand
$q2true if you were dealt queen two

Card Symbols

You can reference the actual card value or rank/suit value for both your hand and the flop using the card symbols.
The general form of the $$ card symbols are:
$$AB#

$$ is required.
A - is p for player, c for common
B - is c for card, r for rank, s for suit
# - is the card number (player 0-1, common 0-4)
The card symbols are not case sensitive. (case does not matter)

Here are some examples with explanation:
$$pc0the card value for player card zero (1st dealt card).
$$pr1the rank value of player card one (2nd dealt card).
$$cr0the rank value of common card zero (1st common card dealt).
$$cs4the suit value of common card four (5th common card dealt - river).

Card Values

A single WinHoldEm internal card value is stored in a single 8-bit byte. All bits (7-0) are used.
The card rank is stored in the hi-order 4 bit nibble (bits 7-4).
The card suit is stored in the lo-order 4 bit nibble (bits 3-0).
The valid values for card rank are 1-14 as follows:
#CardRank
14Ace
13King
12Queen
11Jack
10-2Ten-Two
1Ace (in lo straight)

The valid values for card suit are 1-4:
#CardSuit
4Spade
3Heart
2Diamond
1Club

Poker Value

Winholdem uses the following strategy to classify and order poker hands into a single ordinal 32bit value. The following diagram shows an expanded view of of a winholdem 32-bit poker value:


- 5-of-a-kind is indicated when bits 31-24 are set to 1.
- High-card is indicated when bits 31-24 are set to 0.
- Bits 23-20 are not used and should be set to 0.
- Numeric values for individual ranks are:
#CardRank
14Ace
13King
12Queen
11Jack
10-2Ten-Two
1Ace (in lo straight)


The single most important property of the winholdem pokerval function is that it maps every 0 to 7 card poker hand onto the 32bit number space in correct order of game precedence. Therefore, 2 poker hands can be compared to see which is the better hand - higher values are better. The lowest possible value is 0 (no cards). The highest possible value is 5-aces which is encoded as 0xFF0EEEEE.

Player/Pocket Card List

The formula symbol pcbits is a bit list that indicates where your dealt pocket cards are used in your 5 card poker hand. Ony the lower order 5 bits are significant - one bit per card in your 5 card poker hand.
Each bit corresponds to a pokerval rank field as follows:
bit#pokerval
bit4rank5
bit3rank4
bit2rank3
bit1rank2
bit0rank1

If all bits in pcbits are zero then neither of your two cards are used in your 5 card hand.
The following formula fragment will be true if you have a sucker straight:
((nstraight==5) && (pcbits==1))
The following formula fragment will be true if you are filling an inside straight:
((nstraight==5) && (pcbits&14))

The formula symbol npcbits contains the number of your pocket cards being used in your 5 card poker hand.
The possible values are: 0,1,2.

Rank Bits

Winholdem uses the following method to classify a group of cards according to rank within a single value

Note that if an ace is present then both the 14 bit and the 1 bit will be set.
example: $JT = 3072
example: $65432 = 124
example: $KJ9753 = 10920
example: $AQT8642 = 21846


home top