# alias: PuppetStayman2N # button-text: 2N Puppet # gib-works: false # bba-works: true # auction-filter: Note....2N-3C Puppet # convention-card-ns: 21GF-MSTandMSS # convention-card-ew: 21GF-GIB /*@chat --- Puppet Stayman after 2NT (20-21) After a 2NT opening (20-21 HCP balanced), responder uses 3!C to ask about opener's major suits. Opener's responses: • 3!D - No 5-card major, but has at least one 4-card major • 3!H - 5-card heart suit • 3!S - 5-card spade suit • 3NT - No 4-card or 5-card major Responder's follow-ups after 3!D (one or both 4-card majors): • Bid the major you DO NOT hold (with one 4-card major) This lets the strong hand (opener) declare if a fit exists. • 4!D - both 4-card majors, no slam interest; opener picks • 4!C - both 4-card majors WITH slam interest After 3!H or 3!S (opener shows 5-card major): • 3NT - denies a fit • Bid the OTHER major - slam try agreeing opener's suit • Raise to game/slam - standard After 3NT (no majors): natural minor-suit slam investigation. Bid Puppet 3!C with: • Any 4-card major (looking for 4-4 fit) • 3-card support for one or both majors (looking for 5-3 fit) • Game or slam-going values opposite 20-21 NT Reference: https://www.bridgebum.com/puppet_stayman.php @chat*/ dealer south # South opens 2NT (20-21 balanced) ntShape = shape(south,any 4333+any 4432+any 5332-5xxx-x5xx) ntRange = hcp(south)>19 and hcp(south)<22 twoN = ntShape and ntRange # North's hand qualifies for Puppet: # - at least one 4-card major, OR # - 3-card support for both majors (looking for 5-3 fit with opener) sN = spades(north) hN = hearts(north) nHas4SAndNot4H = sN==4 and hN<4 nHas4HAndNot4S = hN==4 and sN<4 nHasBoth4M = sN==4 and hN==4 nHas3S3H = sN==3 and hN==3 nQualifies = nHas4SAndNot4H or nHas4HAndNot4S or nHasBoth4M or nHas3S3H # Exclude very long suits (would use a different system) nNoLongSuit = sN<5 and hN<5 and diamonds(north)<6 and clubs(north)<6 # Define HCP zones for North (responder). # After 2NT (20-21), responder with 5+ HCP can invoke Puppet for game. # 0-4: too weak (would pass 2NT) # 5-10: game-going # 11-13: slam invite # 14+: slam force tooWeak = hcp(north)<5 game = hcp(north)>4 and hcp(north)<11 slamInvite = hcp(north)>10 and hcp(north)<14 slamForce = hcp(north)>13 #include "script/Leveling" # Leveling: balance game and slam outcomes. # Game-zone (5-10) is the most common range; slam ranges rarer. levGame = game and keep33 levSlamInv = slamInvite and keep levSlamForce = slamForce and keep levelTheDeal = levGame or levSlamInv or levSlamForce # Combine twoN and nQualifies and nNoLongSuit and levelTheDeal action average "Has 4!S only " 100 * nHas4SAndNot4H, average "Has 4!H only " 100 * nHas4HAndNot4S, average "Has both 4M " 100 * nHasBoth4M, average "Has 3-3 in majors " 100 * nHas3S3H, average "Game range (5-10) " 100 * game, average "Slam invite (11-13)" 100 * slamInvite, average "Slam force (14+) " 100 * slamForce,