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 *|
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:
|Auto||calculate once per second|
The C Programming Expressions Tutorial (syntax)
The C Programming Expressions Tutorial (constants)
The C Programming Expressions Tutorial (operators)
|ismanual||true if you're in manual mode, false otherwise|
|isppro||true if you're connected to a ppro server|
|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)|
|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
|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|
|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|
|sraiprev||the difference between the two largest unique wagers|
|sraimin||direct connect - the greater of bet and the current raise|
scraped connect - (currentbet+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)|
|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|
|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)|
|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|
|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|
|f$name||reference the specified formula|
|f$name_default||reference the specified formula default if it exists|
|P FORMULA|| |
|defcon||defense level used in P formula|
determines the number of analyzer opponents
(the defense level dialog uses values 0-10)
|isdefmode||true when defcon is at max|
|isaggmode||true when defcon is at min|
|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|
|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|
|nlistmax||highest list number in which your hand is listed|
|nlistmin||lowest list number in which your hand is listed|
|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)|
|$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|
|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)|
|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|
|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|
|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|
|ncommoncardspresent||number of common cards present (normal or highlighted)|
|ncommoncardsknown||number of common cards known (normal not highlighted)|
|nflopc||short for ncommoncardsknown|
|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||total possible number of two-card hands using the unseen cards|
|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|
|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)|
|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|
|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.|
|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|
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$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$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|
|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:
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:
$$ 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:
|1||Ace (in lo straight)|
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:
|1||Ace (in lo straight)|
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:
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