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.
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:
- WinHoldEm Help - Formula Editor (http://www.winholdem.net/help/help-formula.html)
- WinHoldem-Forum: Risk Of Ruin (http://forum.winholdem.net/wbb/viewtopic.php?t=2120)
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
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:
"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 |
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 |