De tas in de winkel
Op de eerste winkeldagen van januari verkopen Japanse warenhuizen en boetieks fukubukuro: ondoorzichtige tassen tegen een ronde prijs, gevuld met onverkochte voorraad waarvan de winkel zegt dat die meer waard is dan de prijs. De rij vormt zich voordat de winkel opengaat. Het plezier zit in de verzegeling, niet in de inhoud; je weet dat de tas in totaal een goede deal is, maar je weet niet wat er in jouw tas zit. Het is een loterij waarbij het lot gegarandeerd iets waard is, wat een zeldzame vorm is voor een loterij.
Die vorm is wat ons spel behoudt. De tas heeft een prijs, het openen is één trekking, en het item is een veelvoud van de prijs waard, nooit nul. Wat wegvalt is de belofte van de winkel dat de inhoud de prijs overtreft, want een spel kan die belofte niet doen en toch een spel blijven. In plaats daarvan publiceert het de tabel.
Twee tassen, vijftien items
| ITEM | UITBETALING | KANS | GEWICHT (MILJOENSTEN) |
|---|---|---|---|
| 手拭 Tenugui, een handdoek | ×0,20 | 45% | 450.000 |
| 御守 Omamori, een amulet | ×0,50 | 29% | 290.000 |
| 招 Maneki-neko | ×1 | 14% | 140.000 |
| 達磨 Daruma | ×2 | 7% | 70.000 |
| 鯉 Koinobori | ×5 | 3,2% | 32.000 |
| 扇 Sensu, een waaier | ×10 | 1,26% | 12.600 |
| 刀 Katana | ×25 | 0,5% | 5.000 |
| 金招 Gouden maneki-neko | ×100 | 0,04% | 400 |
Gewichten tellen op tot 1.000.000. Rendement = Σ kans × uitbetaling = 0,090 + 0,145 + 0,140 + 0,140 + 0,160 + 0,126 + 0,125 + 0,040 = 96,6%.
| ITEM | BETAALT | KANS | GEWICHT (MILJOENSTEN) |
|---|---|---|---|
| 箸 Hashi, eetstokjes | ×0,10 | 58% | 580.000 |
| 風鈴 Fūrin, een windgong | ×0,50 | 26% | 260.000 |
| 面 Kitsune-masker | ×1 | 1,98% | 19.800 |
| 提灯 Chōchin, een lantaarn | ×2 | 8,5% | 85.000 |
| 兜 Kabuto, een helm | ×6 | 4% | 40.000 |
| 龍 Ryū, een draak | ×20 | 1,5% | 15.000 |
| 鳳凰 Hōō, een feniks | ×250 | 0,02% | 200 |
Return = 0,058 + 0,130 + 0,0198 + 0,170 + 0,240 + 0,300 + 0,050 = 96,78%. De twee zakken zijn qua prijs binnen 0,18 punten van elkaar.
DOOR DE ENGINE GEVERIFIEERDfuku/derive.ts: UME_ITEMS en MATSU_ITEMS geven per item de mult100 (uitbetaling in honderdsten van de prijs) en weight ("trekgewicht in miljoensten van de worp") weer; de commentaren bovenaan berekenen "RTP = Σ w/1e6 × mult" als 96,6% voor Ume en 96,78% voor Matsu. FUKU_BAGS omschrijft Ume als "de gebalanceerde zak — stabiele trekkingen, ×100 als bonus" en Matsu als "de wilde zak — een harder minimum, met een verborgen ×250". De kansen hierboven zijn de gewichten gedeeld door een miljoen; de cijfers voor 'minstens de prijs' (26,0% Ume, 16,0% Matsu) zijn de sommen van de rijen ×1 en hoger, berekend voor dit artikel.
Lees de twee tabellen als één ontwerpkeuze die twee keer is gemaakt. Ume legt 74% van zijn openingen op de twee goedkoopste items en verspreidt de rest over een geleidelijke ladder; Matsu legt 84% op zijn twee goedkoopste, maakt zijn bodem half zo genereus, en betaalt daarvoor met een ×20 draak vijftien keer op de duizend en een ×250 feniks twee keer op de tienduizend. Dezelfde prijs, twee vormen. Een speler die vijftig zakken wil openen en het meeste geld wil behouden, kiest Ume; een speler die wil dat één opening ertoe kan doen, kiest Matsu. Geen van beide is goedkoper.
Eén getal, één zak
De trekking is de simpelste in de engine. De hash van de ronde geeft één uniform getal; vermenigvuldig het met een miljoen en rond naar beneden af, en je hebt een geheel getal tussen 0 en 999.999. Loop de itemlijst van de zak af en tel de gewichten op: het eerste item waarvan het cumulatieve gewicht de worp overschrijdt, is degene die je hebt geopend. Dat is het hele mechanisme. Er is geen reel-fysica, geen stoppositie, geen tweede trekking. De animatie die volgt laat de reels voor het effect draaien, en het resultaat waarop hij landt was al beslist voordat hij begon.
ENGINE-VERIFIEDfuku/derive.ts deriveFuku: u = u64(HMAC-SHA256(serverSeed, `${clientSeed}-${nonce}-0`)); roll = min(floor(u × 1,000,000), 999,999); items worden in volgorde gescand en het eerste item met een cumulatief gewicht boven de roll wordt geretourneerd. _shared/demoLocal.ts: “Één nonce per bag; cursor 0 trekt het item … Geld wordt verrekend bij openen; de reel-animatie is puur theater.” demoFukuOpen debiteert de prijs, leidt het item af, en crediteert centsFloor(price × mult100 / 100).
Hieruit volgen twee gevolgen, en beide zijn de moeite waard om te weten voordat je opent. Ten eerste: volgorde is alleen van belang voor de rekenkunde, niet voor de kansen: de kans van een item is zijn gewicht, waar het ook in de lijst staat, omdat de roll uniform is. Ten tweede: een bag is precies zo verifieerbaar als een dobbelsteenworp, want dat is het: onthul de seed, herbereken de enkele hash, doorloop de tabel, en je hebt het item. De verifier gebruikt dezelfde functie.
Waarom elke bag uitbetaalt
De vloer is het ene dat fukubukuro onderscheidt van een lotenlot, en het is een bewuste keuze met een prijs. Een item ter waarde van ×0.20 is een verlies van 80% van de prijs, wat een slechtere uitkomst is dan de meeste verliezende spins op een slot, en toch is het niet niets, en niets is meestal wat een lotenlot oplevert. Het ontwerp leent het idee van de winkel dat een verzegelde bag nooit leeg mag zijn, en betaalt daarvoor door de gewone items goedkoop te maken: de handdoek en de amulet samen kosten Ume 0,235 van zijn 0,966 return, geld dat in een game zonder vloer naar de top van de ladder zou gaan.
- De vloer is een feature, geen vriendelijkheid. Het verplaatst return van de zeldzame items naar de gewone. De bag is er niet gulziger door; hij is anders gevormd.
- “Betaalt altijd iets” is niet “betaalt meestal terug”. Ume betaalt ongeveer één op de vier opens minstens de prijs terug, Matsu ongeveer één op de zes. De meeste bags zijn minder waard dan ze kosten, zoals het return-getal al aangeeft.
- De twee bags hebben dezelfde prijs. Kiezen voor Matsu in plaats van Ume verandert hoe het edge van 3,3% wordt geïnd, niet hoeveel. Lees de vorm die je wilt en open die.
De tabellen hierboven zijn afgelezen uit de client-derivatiemodule, die de bron beschrijft als gedeeld door de demo-engine en de browser-verifier; de house service is de betalende autoriteit. Itemnamen en glyphs zijn van de engine. Dit is een designnotitie, geen aanbeveling om bags te openen.
FAQ
Wat is Fukubukuro op deze site?
Een game met één trekking: betaal de bagprijs, open het, ontvang een item ter waarde van een vast multiple van de prijs. Twee bags, Ume met acht items tot ×100 en Matsu met zeven items tot ×250.
Wat levert elke bag op?
Ume 96,6% en Matsu 96,78% van de prijs gemiddeld, berekend uit de gewichtstabellen van de engine als kans × payout, opgeteld over de items.
Betaalt elke bag echt iets uit?
Ja. Het goedkoopste item is ×0,20 van de prijs in Ume en ×0,10 in Matsu, dus een open levert nooit nul op. De meeste opens leveren minder dan de prijs op: Ume betaalt minstens de prijs terug in ongeveer 26% van de opens, Matsu in ongeveer 16%.
Hoe wordt het item gekozen?
Één getal uit de hash van de ronde, geschaald naar een geheel getal tussen 0 en 999.999, wordt vergeleken met de cumulatieve gewichten van de bag in miljoensten. Het eerste item waarvan het cumulatieve gewicht de roll overschrijdt is het resultaat. De reel-animatie daarna is alleen voor de weergave.
Welke bag is beter?
Geen van beide, qua return. Ume is de stabielere vorm met een top van ×100; Matsu heeft een hardere vloer en een top van ×250. Ze verschillen in volatiliteit bij bijna dezelfde prijs.
BRONNEN & REFERENTIES
- Betkyo-engine bron: fuku/derive.ts (UME_ITEMS, MATSU_ITEMS, FUKU_BAGS, deriveFuku), _shared/demoLocal.ts (demoFukuOpen)
- De at-least-price cijfers zijn de sommen van de ×1-en-hoger gewichten berekend voor dit artikel: 260.000 / 1.000.000 voor Ume en 160.000 / 1.000.000 voor Matsu
DE GAMES IN DIT ARTIKEL
Fukubukuro — regels & gratis spelen →Omikuji — regels & gratis spelen →