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

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.

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.

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

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.

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.

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 Result | WinHoldEm 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

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.

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.

The C Programming Expressions Tutorial (syntax)

The C Programming Expressions Tutorial (constants)

The C Programming Expressions Tutorial (operators)

symbol | meaning |
---|---|

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 |

ROUNDSPOSITIONS | |

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$_default name | reference the specified formula default if it exists |

P FORMULA | |

defcon | defense 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) |

isdefmode | true when defcon is at max |

isaggmode | true 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 |

pcbits | bit list of where your pocket cards are used in your 5 card hand |

npcbits | number (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 |

HANDTESTS | |

$CCc | see 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 |

POCKETTESTS | |

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/COMMONTESTS | |

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 |

PLAYERSFRIENDS 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 |

FLUSHESSETS 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) |

nstraightcommon | total 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) |

nstraightflushcommon | total 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 |

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:

$AA | true if you were dealt aces |

$JT | true if you were dealt jack ten |

$AKs | true if you were dealt ace king suited |

$49o | true if you were dealt four nine offsuit |

$QXs | true if you were dealt queen any suited |

$J | true if you were dealt any jack |

$XXs | true if you were dealt any suited hand |

$XXo | true if you were dealt any offsuited hand |

$q2 | true if you were dealt queen two |

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:

$$pc0 | the card value for player card zero (1st dealt card). |

$$pr1 | the rank value of player card one (2nd dealt card). |

$$cr0 | the rank value of common card zero (1st common card dealt). |

$$cs4 | the suit value of common card four (5th common card dealt - river). |

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 |
---|---|

14 | Ace |

13 | King |

12 | Queen |

11 | Jack |

10-2 | Ten-Two |

1 | Ace (in lo straight) |

The valid values for card suit are 1-4:

# | CardSuit |
---|---|

4 | Spade |

3 | Heart |

2 | Diamond |

1 | Club |

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 |
---|---|

14 | Ace |

13 | King |

12 | Queen |

11 | Jack |

10-2 | Ten-Two |

1 | Ace (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.

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 |
---|---|

bit4 | rank5 |

bit3 | rank4 |

bit2 | rank3 |

bit1 | rank2 |

bit0 | rank1 |

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

The possible values are: 0,1,2.

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