Converted document

OpenHoldem

Outdated Features and Incompatibilities between OpenHoldem and WinHoldem

The original main goal of the OpenHoldem development team was the attempt to create a WinHoldem-compatible botting-platform to support existing bots, DLLs and TableMaps. However there has been functionality such as “Teaming”, that always has been a tabu for the OpenHoldem development team. Other functionality did never get implemented due to lack of documentation and practical relevance. And now that OpenHoldem is far more advanced and WinHoldem is practically dead, backward-compatibility is no longer such an important issue. Recently the development team revisits some features that look a bit mal-designed and tries to improve them carefully, trying to affect the end-user as little as possible. This chapter will tell you about such incompatibilities.

No Collusion aka “Teaming”

OpenHoldem does not support any kind of collusion. There is no support for WinHoldems WinTellem-server and card-sharing either because such activities are simply illegal in every country of the world, and — even more important — because we consider them unfair too.
figure images/winholdem_table.png

TableMaps

Table Maps are in a different format due to hypothetical copyright-issues. For some time it was possible to convert a WinHoldem "profile" to an OpenHoldem "Table Map" with OpenScrape. But this is no longer of any practical relevance, as all WinHoldem-”profiles” are supposed to be outdated and there is no longer any maintenance going on. So finally we removed support for WinHoldem-tablemaps completely.

Formula-File-Format

The formula is saved in a single file instead of two. It uses the extension *.ohf instead of *.whf and *.whx. Old WH-formulae could be converted for some time, but as there was no longer any demand for this feature we were happy to simplify OpenHoldems code. OpenHoldem does still use a plain-text-format, so *.ohf-files can be edited using your favourite text-editor. or the built-in formula-editor.

ManualMode

ManualMode is not directly integrated into OpenHoldem, but became a stand-alone application. This did simplify the GUI of OpenHoldem extremely and made it far more easy to use.

f$evrais and f$evcall

Calculating expectation values is only one possible way (out of many) to implement a poker bot, but not necessary in general. Furthermore it proved to be cumbersome and unpopular. So the functions f$evrais and f$evcall from WinHoldems demo-bot have been degraded to user-defined-functions.

f$play-Function

The function f$play has been a quite messy concept to handle sitting in, sitting out and leaving the table. Some extra coution was necessary to avoid multiple button-clicks within a short time-frame on identical or outdated game-states. With OpenHoldem 4.0.0 f$play got replaced by three indivudal functions: f$sitin, f$sitout and f$leave, which get executed exactly once every 4 seconds. Furthermore we added a f$close-function to click the [x] in the titlebar of a window if the user desires to leave a table.

f$swag function

f$swag (short for “stated wager”) was WinHoldems way to define the betsize for No-Limit games. As online casinos interpret your input in at least three different ways some adjustment was necessary, including:
f$srai the desired amount to raise (the part which exceeds the bet of the aggressor)
f$swag the final amount to be entered into the software
f$swag_adjust the casino-specific adjustment between f$srai and f$swag
swagtextmethod the casino-specific way to interpret swag, as defined in the tablemap
sraimin the smallest possible raise
sraimax the largest possible raise.
sraiprev the difference between the two largest unique wagers
All these computations had to be done by the user at the formula level. With OpenHoldem 4.0.0 this mess got replaced by a single function f$betsize and OpenHoldem cares about all the rest automatically (depending on the swagtextmethod specified in your tablemap, but that is all work that’s left). The supporting tablemap symbols got renamed.
Former TM-symbol New TM-symbol
swagselectionmethod betsizeselectionmethod
swagdeletionmethodmethod betsizedeletionmethodmethod
swagconfirmationmethod betsizeconfirmationmethod
swagtextmethod betsizeinterpretationmethod

Statistic-Symbols: “risk of ruin”

The symbols to calculate “risk of ruin” have never been implemented due to lack of documentation and lack of practical relevance. As of OpenHoldem 2.0.0 the risk-of-ruin-symbols are officially abolished and removed from the code-base. The original documentation for these symbols can be found here:

Outdated Symbols

OpenHoldem is now half a dozen years old. During these long period of usage it became noticeable that some symbols and features of WinHoldem were unnecessary (risk of ruin), some others unusable, some undocumented (versus2), and some even undesired.
Symbol Explanation Reason for removal
nfriendsdealt 1 if you are dealt, 0 otherwise (0-1) OpenHoldem does not support any kind of collusion, so the friend-symbols are completely meaningless. Only nfriendsseated, nfriendsactive and nfriendsplaying got kept for some time for backward-compatibility, as they were quite convenient to use in the f$sitin, f$sitout and f$leave-formulas. They did consider hero as the one and only “friend”. The last friend symbols (with the same restricted meaning) got removed from the code-base in OpenHoldem 4.0.0. We simply don’t want that sh**, not even for backward-compatibility to WinHoldem.
nfriendsblind 1 if you are in a blind, 0 otherwise (0-1)
friendsseatedbits bits 9-0: 1=seated 0=unseated, you only
friendsactivebits bits 9-0: 1=active 0=inactive, you only
friendsdealtbits bits 9-0: 1=dealt 0=notdealt, you only
friendsplayingbits bits 9-0: 1=playing 0=notplaying, you only
friendsblindbits bits 9-0: 1=blind 0=notblind, you only
swagdelay Autoplayer delay in milliseconds between swag keystrokes and button click as defined in Preferences (formerly TableMap) Some tablemap symbols have been exposed to the scripting level without necessity. They got removed in OpenHoldem 2.2.0 and are now only accessible internally.
allidelay Autoplayer delay in milliseconds between alli slider jam and button click as defined in Preferences (formerly TableMap);
allinmethod used to detrmine which method to use for allin
OpenHoldem will now automatically chose an appropriate method
  1. try to click allin (or max), optionally followed by clicking raise (if allinconfirmationmethod is non-zero).
  2. try to use the slider if it exists in the tablemap.
  3. finally try to swag the balance.
This new behaviour tries the most fail-safe and most human-like methods first and in addition reacts flexibly on the options available.
islistcall true if your hand is in list 0 The list symbols below seem to be mis-conceptions by WinHoldems author and — to our best knowledge — have never been used in any serious poker bot. They finally got removed from the code base in version 4.0.0 of OpenHoldem.
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
handnumber the site hand number if available
Removing formula symbol "handnumber" for various reasons from the formula level:
  • there is no need for it at the formula level.
  • it may contain characters and therefore doesn’t fit into a variable of type double.
  • its length may exceed the precision of double.
"Handnumber" gets now used only internally to trigger handresets.
isfiveofakind true when you have a five of a kind Removed, as never used in Texas Hold’em
fiveofakind 0xff000000 (pokerval constant)
isppro true if you’re connected to a ppro server Removed together with the support for WinHoldem PokerPro-server, which did not get used and did no longer work due to undocumented changes in the network-protocal.
site 0=user/ppro 1=scraped
bankroll the user defined, real world bankroll Removed, as these symbols have rarely been used and should better get handled by a user-defined formula.
rake percentage amount added/subtracted to/from the pot
defcon
defense level is typically used in the f$P formula, which defines the adapted number of opponents to be used in standard prwin. defcon therefore controls the optimism of the prwin-simulation.
0.000=maxoffense 1.000=maxdefense
The Formula Editor parameters dialog uses values 0-10
Defcon looked like a WinHoldem-misconception which has been very rarely (if ever) used. People who need it can create a UDF for that, but it clearly is not necessary for the majority of users and does not deserve symbols and an extra settings dialog.
isdefmode true when defcon is at max
isaggmode true when defcon is at min
clocks number of CPU clocks since the last screen scrape Useless information and always a fraction of a second
nclockspersecond number of CPU clocks per second Simply never used
ncps synonym for nclockspersecond
nflopc short for ncommoncardsknow Removed, because duplicate functionality and lack of verbosity are bad software-engineering
br short for betround
ncps short for nclockspersecond
oppdealt short for nopponentsdealt
isbring true if OpenHoldem is attached to a Bring client window Removed, because there is no need for that info at the formula-level
ismanual true if you’re in manual mode, false otherwise
handrank one of the handrank-symbols based on the option specified in preferences Getting rid of the symbol handrank and the option symbols->Value of Handrank. We have handrank169, handrank1000, handrank1326, handrank2625 and handrankp at the formula level. So the user can clearly specify what he wants. But these symbols can hardly get used interchangeably, so this option was only confusing and superfluos.
randomround1 ... randomround4 random number in the range [0.000..1.000) for round 1 - 4. Value is calculated only once in that round. Removed the symbols randomround1..randomround4 from the codebase, because we have randomround for the current betting round and additionally randomhand, randomheartbeat and random, which gets calculated each time new. This simplified the code and looks more clean.
callshort total amount that will be added to the pot if all players call The symbols "callshort" and "raisshort" got removed from the code-base because they got designed for Fixed-Limit no-foldem Hold’em only. Better use a function to estimate future pot-sizes.
raisshort callshort + bet * nplayersplaying
seatposition your seat position relative to the dealer Removing the symbol seatposition which counted both active and inactive players and even empty chairs and was of no real use for practical play.
elapsed1970 time in seconds since 1970-01-01 00:00:00 GMT (Thursday) Removing the symbol elapsed1970 because there was no real use for it.
ncommoncardspresent number of common cards present (normal or highlighted) Removing the symbol "ncommoncardspresent", because it was never implemented correctly, but always had the same value as "ncommoncardsknown". Furthermore its value would only differ at some casinos and at showdown (highlighted cards / bad scrapes), but this point of time is pretty meaningless for both OH-script and OpenPPL, which evaluate mainly on the users turn, whereas DLLers still have access to all info.
ac_pf_bets
  1. no callers or blinds only
  2. called Pot — 1 bet to call
  3. raised Back — 1 more bet to call because someone behind you raised after you’ve already bet/called/raised
  4. raised Pot — 2 bets to call
  5. reraised Pot — 3+ bets to call
Only valid when betround == 1
Removed the symbols ac_pf_bets, because it was for fixed limit only, worked only on the first orbit preflop, because that task can be done with other symbols and finally we have the OpenPPL-library, so there is really no longer any need for that.
ac_aggressor which chair was aggressor (might be from previous round) Removed, as it was duplicate functionality to raischair
nplayersblind number of players blind (including you) (0-10) Removed with the introduction of of the more practical symbols smallbindchair and bigblindchair
nopponentsblind number of opponents blind (not including you) (0-9)
playersblindbits bits 9-0: 1=blind 0=not blind
opponentsblindbits bits 9-0: 1=blind 0=not blind
bblindbits bits 9-0: 1=big blind 0=not big blind
ron$ / run$ symbols These symbols 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 will be seen that many times Removed the run$/ron$-symbols, because they looked like a mis-conception, nobody used them, some numbers were wrong and the code was unfixable (1000s of undocumented number)
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$... similar like the ron$symbols above, just for the user

PrWin-functions

Some supporting functions and symbols for the PrWin-simulations got renamed in OpenHoldem 4.0.0 to achieve more verbosity and better formula-grouping in the editor.
Former Name New Name
f$P f$prwin_number_of_opponents
NIT f$prwin_number_of_iterations
f$topclip f$prwin_topclip
f$mustplay f$prwin_mustplay
f$willplay f$prwin_willplay
f$wontplay f$prwin_wontplay