thepsychdr.com / Resident Evil / RE7: 21

Resident Evil 7 · Banned Footage Vol. 2

21, decoded

The rules, trump cards and opponents of RE7's card game, read from the game's own data and code instead of pieced together from play. What the files settle, what they don't, and the odds that follow.

Two cards on a table A face-up ten and a face-down card, drawn as simple outlines, with a red 21 above them. 10 21

SpoilersNames the modes, opponents and unlocks of 21, including the three story-mode games. No ending details.

The basics

How a round works

You play against Hoffman. The game's code calls him the Banker.

  • One deck of 11. One card of each number from 1 to 11. Every deal the files write out uses four different numbers from that range, and a scripted deal places four cards and shuffles "the remaining 7".
  • Two cards each, one hidden. Both of you start with two cards. Every card has a face state, and the game totals a hand both in full and face-up only. His logic takes your face-up total (OpenPlayerSum) among its inputs and checks which numbers he can't see (BankerCantSeeCard).
  • Draw or stay. You take turns drawing a card or staying. Closest to the target wins; over it is a bust (the files spell it "Burst"). A drawn round exists too.
  • The target is 21 until someone plays Go for 17, Go for 24 or Go for 27, which rewrite it.
  • Life and bets. Each side has a life total and a bet. The files call the punishment for a lost round torture, and check whether the next one would finish a side. Bet trumps raise the other side's bet or lower your own.
  • Trumps. Both sides hold trump cards and play them onto the table. Some act once; the data marks others to stay on the table until something removes them.

Here's the one habit that wins more rounds than any trump: keep the 1 to 11 strip in your head and cross numbers off as they appear.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Example: 7 and 8 are yours, 10 is his face-up card, 3 was removed. The seven numbers left are the deck plus his hidden card.

From the files: STATUS.md §1 and §5; fsm_findings.md (CardGameLayoutInit, CardGameCheckCondition fields, CardGameCheckBurst, CardGameCheckPlayerDraw, CardGameSetTorture, IsPlayerNextTortureDead); 21Research.lua (the card Face field, calcSum's face-up flag, player and banker life and bet, the ThinkParam fields); trump_effects_groundtruth.md §1 (GoalTargetNo, TableStayTime).

Story, Survival, Survival+

The modes

Story mode

Three games against the same Hoffman, each with its own stakes:

  • Fingers first, then shocks, then the saw (the files' bet types: Finger, Electric, Saw).
  • In the finger game Hoffman's settings are draw border 11 with "Chicken" on. The shock and saw games raise his border to 14, turn Chicken off and set his PlayerHand ranges.
  • Your trumps come from one small pool all story long. Hoffman's pool changes for the saw game: out go the 4 and 5 Cards and two of his three Two-Ups, in come two Destroys and a Go for 24.
  • Fixed hand-outs are written in too, such as a 6 Card for you as the shock game opens.
  • Some opening deals are scripted. See Scripted deals.

Survival

  • Five fights in a row. The files count kills from 0 to 4 and finish at 5.
  • Opponents: Attacker, Defence, Tricky and Molded, each with its own trump pool and settings, plus a weak Attacker (own pool and settings) and a strong Defence (own pool). The first fight's setup binds the story Hoffman's pool.
  • Hoffman starts Survival fights with trumps already in hand, from opening sets fixed in the files. Your opening hand comes from six hand-out slots with no fixed type.
  • Your trumps come from a 40-slot pool, three-tenths of it Two-Up.

Survival+

  • Ten fights. The Survival scene counts kills from 0 to 9 for it and finishes at 10.
  • Sharper opponents: Attacker, Defence and Tricky return with border 14 and their PlayerHand ranges set, and a last boss opens with Perfect Draw+, Dead Silence, Ultimate Draw and Oblivion.
  • The special guest: a rare Hoffman whose trump pool is a single Escape. The files roll for him in Survival+: a 10% lottery in its opponent switcher, and a 20% roll in the Survival scene from six kills on, tied to a rare-encounter flag. Beating him once earns a reward; beating him twice unlocks Replace.

From the files: fsm_findings.md: ChangeMaster (GameBetType per game), SetItemTable (pool per game and mode), Banker (settings), AddItem (fsm_200_introevent, fsm_spcardfirstset, fsm_plspcardfirstset), KillCount checks in levelfsm_c07_2_survivalmode.scn.20 (0–4 then 5, 0–9 then 10), fsm_changehoffmans_survival(_p) and fsm_cardgamemaster_suvival, CardGameRareEm9800Lottery (Percent 10; Percent 20 after KillCount ≥ 6); STATUS.md §3; trump_effects_groundtruth.md §2–3.

All 49

Every trump card

The DLC defines exactly one entry for each of its 49 trumps, and every effect below comes from that entry's own fields. Read each one from the side of whoever plays it: "opponent" is the other side, "your" is the card's player. BetUp is read as the other side's bet because its pair, MyBetDown, names the player's own. Where the data carries only a tag (the SP_ effects, Happiness, Gift), the real math lives in the game's code and isn't logged yet.

Trump catalog, grouped by what the card works on

CardData nameWhat the data says it doesWho gets it
Bets
One-UpBetUp_1p #10Opponent's bet +1. Stays on the tableHoffman
Two-UpBetUp_2 #11Opponent's bet +2. Stays on the tableYou + Hoffman
Two-UpBetUp_2p #12Opponent's bet +2. Stays on the tableYou + Hoffman
Two-Up+BetUp_2x #13Opponent's bet +2; takes a card out of play (RemoveType Remove: dead, not back in the deck). Stays on the tableYou + Hoffman
ShieldBetDown_1 #15Your own bet −1. Stays on the tableYou + Hoffman
Shield+BetDown_2 #16Your own bet −2. Stays on the tableYou
Twenty-One UpBetUp_21 #20A special bet change (SP_BetUp_21); its size is set in code, not data. Stays on the tableHoffman
Shield AssaultShieldAssault #61Opponent's bet +3; its removal field targets 3 bet-down (Shield-type) trumps on the table. Stays on the tableHoffman
Shield Assault+ShieldAssault_p #62Opponent's bet +5; its removal field targets 2 bet-down (Shield-type) trumps on the table. Stays on the tableHoffman
DesperationDesperation #60A special bet change (SP_Desperation); its size is set in code, not data; blocks drawing cards while it stays (IsBlockPlayerTakeCard). Stays on the tableHoffman
DesireDesire #66A special bet change (SP_Desire); its size is set in code, not data. Stays on the tableHoffman
Desire+Desire_p #67A special bet change (SP_Desire_p); its size is set in code, not data. Stays on the tableHoffman
ConjureConjuring #71A special bet change (SP_Conjuring); its size is set in code, not data. Stays on the tableHoffman
Draws
2 CardDraw_2 #30Draws the 2, if the 2 is still in the deck.You
3 CardDraw_3 #31Draws the 3, if the 3 is still in the deck.You
4 CardDraw_4 #32Draws the 4, if the 4 is still in the deck.You + Hoffman
5 CardDraw_5 #33Draws the 5, if the 5 is still in the deck.You + Hoffman
6 CardDraw_6 #34Draws the 6, if the 6 is still in the deck.You
7 CardDraw_7 #35Draws the 7, if the 7 is still in the deck.You
2 CardDraw_2p #36Draws the 2, if the 2 is still in the deck.Hoffman
3 CardDraw_3p #37Draws the 3, if the 3 is still in the deck.Hoffman
4 CardDraw_4p #38Draws the 4, if the 4 is still in the deck.Hoffman
5 CardDraw_5p #39Draws the 5, if the 5 is still in the deck.Hoffman
6 CardDraw_6p #40Draws the 6, if the 6 is still in the deck.Hoffman
7 CardDraw_7p #41Draws the 7, if the 7 is still in the deck.Not handed out
Perfect DrawPerfectDraw #45A best-card draw (SP_PerfectDraw); the game picks the card in code.You + Hoffman
Ultimate DrawPerfectDraw_x #46A best-card draw (SP_PerfectDraw); the game picks the card in code.You + Hoffman
Perfect Draw+PerfectDraw_p #47Opponent's bet +5; a best-card draw (SP_PerfectDraw); the game picks the card in code. Stays on the tableYou + Hoffman
GiftGift #50A special draw (SP_Gift); the game picks the card in code.You
CurseCurse #73A cursed draw (SP_Curse); the game picks the card in code; costs 1 of the user's own held trump.Hoffman
Black MagicBlackMagic #72Opponent's bet +10; a best-card draw (SP_PerfectDraw); the game picks the card in code; the user discards half of their own held trumps. Stays on the tableHoffman
Cards in play
ExchangeExchange #53Swaps cards between the two hands (IsCardExchange); which cards is set in code.You
ReturnReturn #54Puts a card back into the deck (RemoveType Return).You + Hoffman
RemoveRemove #55Takes a card out of play (RemoveType Remove: dead, not back in the deck).You + Hoffman
Target
Go for 24Goal_24 #80The target becomes 24; any other Go-for card on the table is cleared. Stays on the tableYou + Hoffman
Go for 27Goal_27 #81The target becomes 27; any other Go-for card on the table is cleared. Stays on the tableYou
Go for 17Goal_17 #82The target becomes 17; any other Go-for card on the table is cleared. Stays on the tableHoffman
Table trumps
DestroyDestroy #56Removes the last trump on the table.You + Hoffman
Destroy+Destroy_p #57Removes every trump on the table.You + Hoffman
Destroy++Destroy_pp #58Removes every trump on the table; stops trumps being played while it stays (IsBlockUseItem). Stays on the tableYou
Trumps in hand
Trump SwitchSPChange #51Costs 2 of the user's own held trumps.You
Trump Switch+SPChange_p #52Costs 1 of the user's own held trump.You + Hoffman
Mind ShiftMindShift #64Hits half of the other side's held trumps; cleared once they play 2 trumps. Stays on the tableHoffman
Mind Shift+MindShift_p #65Hits all of the other side's held trumps; cleared once they play 3 trumps. Stays on the tableHoffman
Special
HappinessHappiness #63No effect values in the data at all; the effect lives in code.Hoffman
ReplaceReplace #59Sets IsItemReplace while it stays; the effect is in code. Stays on the tableYou
Dead SilenceDeadSilence #69Blocks drawing cards while it stays (IsBlockPlayerTakeCard). Stays on the tableHoffman
EscapeEscape #68Sets IsEscape while it stays; the effect is in code. Stays on the tableHoffman
OblivionOblivion #70Forces the round to end (IsForceRoundEnd). Stays on the tableHoffman

"Stays on the table" marks the trumps whose data says they persist (a table time of −1; the one-shot cards have 0.5). Card names follow the names my helper uses; the names in italics have no confirmed on-screen name yet, so they show the data name. Two-Up appears twice (BetUp_2 in story mode's pools, BetUp_2p in Survival's) and so do the number cards (Draw_N and Draw_Np): same data, separate entries. "Who gets it" counts a trump pool, a hand-out written into the files, an unlock, or a scripted story play (Hoffman's Desperation and Perfect Draw).

What the data settles

  • Remove kills a card. Its removal type is Remove, not Return, and the game flags removed cards (isRemoved): the card is out of play, not back in the deck. Return is the one that puts a card back. Which card each picks isn't in the data; the helper's card text says the last face-up card, the opponent's for Remove and yours for Return.
  • Two-Up+ kills a card too: +2 to the opponent's bet, plus the same Remove-type removal.
  • Ultimate Draw's data is identical to Perfect Draw's. If it does anything extra, that's in the code, not the data.
  • The price tags: Trump Switch costs 2 of your held trumps (Trump Switch+ costs 1), Curse costs its player 1, Black Magic costs half.
  • Shield Assault pairs a bet raise with a Shield clear: +3 to the opponent's bet, and its removal field targets 3 bet-down trumps on the table (Shield Assault+: +5, and 2).
  • Mind Shift wears off: it's cleared once its target plays 2 trumps (Mind Shift+: 3).

From the files: trump_effects_groundtruth.md §1 (all 21 fields of cardgameitemtypedata.user.2, byte-exact) and §2–3 (pools, unlocks); STATUS.md §2; fsm_findings.md AddItem and ItemTable; 21Research.lua (each card's isRemoved flag). Cross-checked field by field by tools/odds_21.py --verify-research.

Story mode

The scripted opening deals

The shuffle takes four card numbers. When all four are set, it places your two cards and Hoffman's two first and shuffles only the other seven. The finger game's card setup writes four of these deals (one of them twice) and leaves two entries random. The story scene's own list repeats two of those and adds four more, without naming a game.

He shows one of his two cards and the other is under it; nothing in the files says which of the two is face-up, so read each row both ways. If your opening hand and his face-up card match a row, you know his hidden card and exactly which seven are left in the deck. A random deal matches one row's visible cards about once in 250 deals (2 in 495), so a match is far more likely the written deal than chance.

Authored story deals, from your seat: odds of your next card from the 7 left

You holdHis two cardsTotalsLeft in the deckNext card bustsMakes 21Beats his total
1116812 vs 14234579101/71/75/7
2117813 vs 15134569102/70/74/7
5631111 vs 14124789100/71/75/7
5641111 vs 15123789100/71/74/7
71051117 vs 1612346893/71/74/7
8961017 vs 16123457113/71/74/7
8107918 vs 16123456114/71/73/7
91071119 vs 1812345685/71/72/7
  • Holding 5 and 6: if he shows the 11, two written deals fit, with the 3 or the 4 under it; if he shows the 3 or the 4, the 11 is under it. Nothing left in the deck can bust you either way.
  • Holding 1 and 11 or 2 and 11, you're behind, and four or five of the seven cards left put you past him without a bust.
  • Holding 17 or more (7 and 10, 8 and 9, 8 and 10, 9 and 10), you're already ahead of his two cards, and a draw busts you on 3 to 5 of the 7.

Which round gets which deal isn't in the static data: the files list the deals, and one logged session in the game will pin the order. The story scene also writes one more deal, 1 and 2 for you against 4 and 11, beside Hoffman's scripted Desperation and Perfect Draw.

From the files: STATUS.md §1 (shuffle with four pre-placed cards, 7 shuffled); fsm_findings.md LayoutInit: mainflow\100_cardinitset.fsm.16 and levelfsm_c07_2_storymode.scn.20; odds computed by tools/odds_21.py.

The shuffle

Why nobody can predict your next card

  • The shuffle (app.CardGameMaster.shuffle) draws its numbers from the engine's one global random generator, an xorshift128-family design.
  • That generator is seeded once, when the game starts, from the wall clock in seconds (_time64).
  • The same stream feeds 1,684 places across the whole game: enemy AI, particles, item drops, IDs. By the time you're dealt in, it has moved on by however many numbers everything else took first.

So even knowing the exact second you launched the game wouldn't give you the next card. Per-card prediction needs live reads of the game's memory, on any platform. What does work is counting, which is the rest of this page. The one exception is by design: the scripted story deals above are fixed by the files, not by the generator.

From the files: STATUS.md §1; disasm/app.CardGameMaster.shuffle.v4.asm.txt, disasm/rng_helper_140051ee0.asm.txt, disasm/global_rng_seeder.asm.txt (the shuffle → helper → global state → time seeder chain, byte-verified).

Counting

Odds you can use

Count what you can't see

  1. Start from 1 to 11.
  2. Cross off both of your cards, every face-up card of his, and any card Remove took out of play.
  3. What's left is the deck plus his hidden card. Treat each of those as equally likely to be your next card: the deck order comes from the random generator, and nothing you can see tells them apart.
  4. Count the ones that would bust you (bigger than the target minus your total) and divide by how many are left.

Example. You hold 7 and 8 (15) and he shows 10. You can't see 1, 2, 3, 4, 5, 6, 9 and 11: eight cards. Anything over 6 busts you, so 9 and 11 do: 2 in 8, 25%. Exactly 21 needs the 6: 1 in 8.

His choices can hint at his hidden card. Staying on a low face-up card, for example, says something. The count above doesn't use that, so treat it as your floor of knowledge. It also treats the shuffle as fair: the files show where its randomness comes from, not a logged draw order.

Your opening total

There are 55 possible two-card hands. A natural 21 (10 and 11) is 1 in 55.

Opening totalHands (of 55)ChanceBar
311.8%
411.8%
523.6%
623.6%
735.5%
835.5%
947.3%
1047.3%
1159.1%
1259.1%
1359.1%
1447.3%
1547.3%
1635.5%
1735.5%
1823.6%
1923.6%
2011.8%
2111.8%

One more card, by total

At 10 or less no single card can bust you, so the table starts there. The chances average every opening hand with that total, before you've seen his card. Once you can see it, count exactly as above. The bust list always shrinks by whatever's already visible.

Your totalExactly 21 needsCards that bust youBust chanceExactly-21 chance
1011none0%11.1%
11101111.1%8.9%
129101117.8%8.9%
1389101126.7%8.9%
14789101133.3%11.1%
156789101141.7%8.3%
1656789101148.1%7.4%
17456789101155.6%11.1%
183456789101166.7%11.1%
1923456789101177.8%11.1%
20123456789101188.9%11.1%
21—1234567891011100%0%

Number cards: will it land?

A number card (2 Card to 7 Card) draws that exact number, so it only works while the number is in the deck. If you can't see the number, it's in the deck unless it's his hidden card, and his hidden card is equally likely to be any card you can't see.

Cards you can’t seeNumber card lands
87/8 = 87.5%
76/7 = 85.7%
65/6 = 83.3%
54/5 = 80%
43/4 = 75%
32/3 = 66.7%
21/2 = 50%

If the number is anywhere you can see it, the card can't land. The same holds against you: if Hoffman reaches for a number that's your face-down card, it can't come from the deck.

What a trump draw can be

Each pool is a plain list of slots with no weights in the data, so a share is the chance one draw lands on that card if every slot is equally likely. Starting hands and scripted hand-outs are on top of these.

Who drawsPool in the filesSlotsWhat a draw can be (share of slots)
You, story modePlayerTestTable9Two-Up ×2 (22%), Remove ×2 (22%), Return ×2 (22%), 3 Card ×1 (11%), 4 Card ×1 (11%), 5 Card ×1 (11%)
You, Survival and Survival+Survival_PL_Table40Two-Up ×12 (30%), Destroy ×4 (10%), Remove ×4 (10%), Return ×4 (10%), Shield ×3 (8%), Trump Switch ×3 (8%), 5 Card ×2 (5%), 6 Card ×2 (5%), Perfect Draw ×2 (5%), 2 Card ×1 (2%), 3 Card ×1 (2%), 4 Card ×1 (2%), 7 Card ×1 (2%)
Hoffman, story: finger and shock games, and the first Survival fightBankerTestTable8Two-Up ×3 (38%), 4 Card ×2 (25%), Remove ×2 (25%), 5 Card ×1 (12%)
Hoffman, story: saw gameBankerTable_StorySaw6Destroy ×2 (33%), Remove ×2 (33%), Two-Up ×1 (17%), Go for 24 ×1 (17%)
AttackerSurvival_1_AttackerItemTable6One-Up ×3 (50%), 2 Card ×1 (17%), 4 Card ×1 (17%), 6 Card ×1 (17%)
Attacker, weak variantSurvival_11_AttackerWeekItemTable6Twenty-One Up ×2 (33%), One-Up ×1 (17%), Two-Up ×1 (17%), 4 Card ×1 (17%), 6 Card ×1 (17%)
DefenceSurvival_2_DefenceItemTable7Shield ×7 (100%)
Defence, strong variantSurvival_218Shield ×6 (75%), One-Up ×2 (25%)
TrickySurvival_3_TrickyItemTable9Happiness ×3 (33%), Mind Shift ×3 (33%), Desire ×2 (22%), Return ×1 (11%)
MoldedSurvival_4_MoldedItemTable12Curse ×3 (25%), Two-Up ×2 (17%), Black Magic ×2 (17%), Conjure ×2 (17%), Go for 17 ×2 (17%), Destroy+ ×1 (8%)
Survival+ Attacker5_Attacker_p9Two-Up ×4 (44%), Twenty-One Up ×1 (11%), 2 Card ×1 (11%), 3 Card ×1 (11%), 4 Card ×1 (11%), 5 Card ×1 (11%)
Survival+ Defence6_Defence_p10Shield ×6 (60%), Two-Up ×2 (20%), Trump Switch+ ×1 (10%), Shield Assault+ ×1 (10%)
Survival+ Tricky7_Tricky_p11Happiness ×4 (36%), Mind Shift+ ×4 (36%), Desire+ ×2 (18%), Go for 24 ×1 (9%)
Survival+ last boss8_LassBoss9Two-Up+ ×3 (33%), Ultimate Draw ×3 (33%), Dead Silence ×2 (22%), Perfect Draw+ ×1 (11%)
Special guest (rare)9_Rare1Escape ×1 (100%)

From the files: the deck and deal rules above; trump_effects_groundtruth.md §1–2 (DrawNo, pool entries with no weight field); fsm_findings.md ItemTable. Every number in this section comes out of tools/odds_21.py, which ships with this page's source.

The opponent

How Hoffman plays

His settings

Every Hoffman carries the same seven settings, and every one of them has a good-hand border of 18. By their names, TakeCardBorder is a draw threshold, Chicken a cautious switch, and the two PlayerHand ranges judge your face-up total. The formula that turns them into "draw" or "stay" is the one part of his logic not logged yet, so read them as each opponent's profile rather than a rule.

OpponentTakeCardBorderChickenPlayerHandGoodPlayerHandBad
Story: finger game11yesoffoff
Story: shock and saw games14no9–135–18
Attacker11nooffoff
Attacker, weak variant17yesoffoff
Defence12yesoffoff
Tricky11nooffoff
Molded11nooffoff
Survival+ Attacker, Tricky, last boss, special guest14no9–135–18
Survival+ Defence14yes9–135–18

What he can see

His bust-risk number is worked out from the real remaining deck, the same as if he'd peeked at your face-down card. Whether it changes his play is still being decoded.

Rules written into his files

These are the conditions written next to each card in his files. The pairing comes from the files' structure, not from watching him play, but the numbers line up card for card.

  • Survival Hoffmans with number cardsHe plays a number card N only when his total is 21 − N or less and N is a number he can't see: 15 or less for a 6, 16 or less for a 5, 17 or less for a 4, 18 or less for a 3, 19 or less for a 2. A 4 Card from him means his total was 17 or less.
  • Story HoffmanHis number cards have tighter windows: the 5 Card at 13 to 16 (one file says 14 to 16) and the 4 Card at 14 to 16, each only when he can't see that number. He answers your bet-raising trumps with Two-Up, plays Remove when you stop drawing, plays Destroy once you have a trump on the table and have raised his bet, and plays Go for 24 at 22 to 24.
  • SurvivalAt 22 to 24, with no Go for 24 on the table, he plays Go for 24 to save the bust.
  • DefenceHe plays Shields when you've raised his bet, while 3 or fewer are down (2 or fewer once his life is 3 or less), and when the next punishment would finish him (2 or fewer down). At life 3 or less, with a total of 11 to 17 and no Go for 17 down, he plays Go for 17.
  • Survival+ AttackerHe keeps adding Two-Ups while his total isn't 21 and 2 or fewer are down (3 or fewer once his life is 6 or less).
  • Also in the filesThese checks sit near these cards too, with looser pairing: Tricky's Desire at 19 to 21; Molded's Curse after you draw a 5 or more, or an 8 or more; Survival+ Tricky's Return after his own last card is 8 or more. Nearly every Hoffman checks for 5 or more trumps on his side of the table, and your inventory file checks for 5 on yours, which suggests a table limit of 5.

From the files: fsm_findings.md: Banker (app.CardGameBanker per opponent), levelfsm_c07_2_common.scn.20 (the story Hoffman's rules, indices 1138–1366), item\fsm_bkitemusecheck.fsm.16, survival\hoffmans\1_attacker to 9_rare.fsm.16, levelfsm_c07_2_survivalmode.scn.20 (the Survival Go for 24 condition), item\fsm_useinventory.fsm.16; STATUS.md §3; banker_formula.md (updateBankerThinkParam: his bust-risk ratio, NextCardGoodRatio, counts the real deck; checked against the 2026-06-09 live log).

Rewards

Unlocks

The reward list ties these goals to rewards, in this order. Counts are as the files store them. Four goals, BurstWin and the three Survival-clear goals, use counters whose meaning isn't decoded, so they show the files' own names.

Reward list

GoalReward
5 wins in totalUnlocks Go for 24
15 wins in totalUnlocks Two-Up+
2 perfect wins in a rowUnlocks Shield+
3 21s in totalAddDrawNum reward (its text names Exchange)
3 21s in a rowUnlocks Go for 27
10 trumps played in totalUnlocks Exchange
15 trumps played in one roundUnlocks Trump Switch+
10 removes in totalUnlocks Destroy+
20 removes in totalUnlocks Destroy++
BurstWin, counter 30AddDrawNum reward (its text names Destroy++)
ClearSurvival1, counter 10Unlocks Perfect Draw+
PerfectClearSurvival1, counter 50Unlocks Ultimate Draw
PerfectClearSurvival2, counter 4Everywhere reward (its text names Ultimate Draw)
1 wins against the special guestAddDrawNum reward (its text names One-Up)
2 wins against the special guestUnlocks Replace

From the files: trump_effects_groundtruth.md §3 (prefab\reward\dlc\cp7cardgamereward.user.2: 15 rewards, AchieveType, Count, RewardType, the trump each reward names).

Honest gaps

Still open

Everything above comes from the static files. These need the game running, with a logger watching:

  • Hoffman's exact draw-or-stay formula. The settings are known; the code that reads them isn't logged yet.
  • Which story round gets which written deal, and which of his two cards is the face-up one.
  • Whether his bust-risk number, worked out from the real deck, changes his play, and whether anything else he uses reads your face-down card.
  • The effects that live in code: Happiness, Gift, Desire, Conjure, Desperation, Twenty-One Up, Escape and Replace, and anything extra Ultimate Draw does.
  • Whether "stays on the table" is exactly what a table time of −1 means. It fits every card, but it's inferred.
  • Which rare-guest roll, 10% or 20%, applies where, and the story 5 Card's exact window (13 or 14 to 16).

Until they're logged, this page doesn't guess.

The helper. My open-source helper for 21 is on GitHub, built for playing alongside the game.

Source: Resident Evil 7 Banned Footage Vol. 2, PC (Steam DLC 530610): the DLC's data, scene and state-machine files and the game's executable code, decoded by ThePsych (research notes dated 2026-06-09). Tables are derived from that decode by tools/odds_21.py; no game files or art are reproduced. Unofficial fan page, not affiliated with or endorsed by Capcom.