Game modes
Around the management loop, six systems chase something other than Cash: XP, evolution items, Stars, ranking — and, for one of them, other players’ cards. None replaces working: they are deliberately throttled to stay complements.
The Midnight Pass
A turn-based fight on a board of coloured balls. You trace chains of same-coloured balls; each colour strikes with one of your squad’s stats. The opponent answers on a script known in advance.
Dégâts = ⌊ Stat × facteur_couleur × longueur × (1 + 0,1 × (longueur − 1)) × (1 + 0,25 × index_tracé) × élémentaire ⌋Length counts twice (linearly, then as a bonus): a 6-chain does far more than double a 3-chain. And the trace index rewards chaining within a turn — the fourth trace hits at +75 %.
Implemented in src/domain/duel.ts
Two things matter far more than they look: the trace length, which counts twice, and chaining within a turn, each additional trace hitting harder than the last.
facteur_couleur : charme ×1 · ruse ×2,2 · sangfroid ×2,45 · tchatche ×2,6These factors are not arbitrary: they are the inverse of the squad-power ratio measured in game (charme 1002 · ruse 462 · sangfroid 408 · tchatche 381). Without them, Charme — already king of the economy — would have won the duel too. This is an anti-cannibalisation correction, not a bonus.
Implemented in src/domain/duel.ts
| Colour | Damage factor |
|---|---|
| Charme | ×1 |
| Ruse | ×2.2 |
| Composure | ×2.45 |
| Patter | ×2.6 |
The catch
Charme, king of the economy, is the weakest in duels — and that is deliberate. Without this correction, one stat would have won both games, and there would have been only one way to build a squad. Your best earners are not your best fighters.
Every House has a colour weakness and resistance, a target turn count, and a rage ramp past a certain turn.
| House | Unlocks at (Cash earned) | Power required | Target turns | Weakness | Resists |
|---|---|---|---|---|---|
| The Counter | from the start | 115 | 4 | Charme | Composure |
| The Jukebox | $15,000 | 130 | 4 | Patter | Ruse |
| The Aquarium | $60,000 | 235 | 5 | Composure | Charme |
| The Friday | $200,000 | 295 | 5 | Ruse | Patter |
| The Butterfly | $600,000 | 475 | 6 | Charme | Ruse |
| The Mirror | $1,500,000 | 690 | 6 | Composure | Patter |
| The Gold Record | $4,000,000 | 1,010 | 7 | Patter | Charme |
| The Elder’s Table | $9,000,000 | 1,550 | 8 | Ruse | Composure |
PV_max = round( pReq × hpTurnFactor × tours_cible )A House’s HP is derived from the power it demands and the intended turn count, never hand-set. Two invariants are checked by config validation: the House must be winnable (its attacks over the target turns stay under 100 % of your HP) and bounded (enrage climbs 20 %/turn, uncapped).
Implemented in src/domain/duel.ts
Dégâts_ennemi = round( dégâts_de_base × (1 + stepPct × max(0 ; tour − afterTurn)) )Past its patience turn, the opponent ramps up without ceiling: stalling always loses. Its attacks, however, follow a scripted rotation (turn − 1) modulo the attack count — no randomness, which is why the game can telegraph them.
Implemented in src/domain/duel.ts
Cash = round( cash_base × (première victoire : ×2) × (rejoué hors Passe du soir : ×0,5) )Stars drop on the first win only. The 50 % replay share exists because at the reference scale — one rung is worth about 6× working — an unbridled repeatable mode would replace the economy instead of complementing it.
Implemented in src/domain/duel.ts
Worth knowing
Stars only drop on the first win against a House, and a replayed duel returns only 50% of its Cash outside the nightly Pass. Duelling is a source of items and milestones, not an income machine — which is what stops it replacing the economy.
Zip Coaching
A single-stroke path to trace, passing through every number in order and filling the whole grid. It is the most direct way to level a specific card.
| Tier | Grid | Numbers | Time | Reward |
|---|---|---|---|---|
| 1 | 5 × 5 | 6 | 45 s | 10% of a level |
| 2 | 6 × 6 | 10 | 60 s | 25% of a level |
| 3 | 8 × 8 | 20 | 80 s | 50% of a level |
XP = round( ⌊ XP_requise(niveau) × fraction_du_palier ⌋ × (1 + bonus_perso) × (1 + bonus_Stratège) )The reward is a fraction of the current level, so Coaching stays useful at every level instead of becoming negligible. Tier 3 grants half a level in one go.
Implemented in src/domain/zip.ts
The catch
What makes a tier hard is not the grid size but the number of checkpoints to honour. A bigger grid with few numbers leaves a huge number of valid paths; adding numbers eliminates them. Difficulty was tuned by counting the remaining valid traces, not by enlarging the board.
Since the reward is a fraction of the current level, Coaching stays useful at every level: tier 3 grants half a level, whether you are level 5 or 45.
Squad contracts
The board offers 5 contracts, refreshed once per game day. You send a squad for a set duration: the cards are tied up, and come back with evolution items, Cash, XP and Influence.
Puissance = Σ stat_dominante_de_chaque_membre × (1 + Σ % du domaine / 100)Only the stat matching the contract’s domain counts: a Charme squad is worthless on a Ruse contract. The domain’s ability percentages add up first, then multiply the sum.
Implemented in src/domain/contracts.ts
CRITIQUE ≥ 1,5 × pReq · RÉUSSITE ≥ pReq · PARTIEL ≥ 0,8 × pReq · sinon ÉCHECRewards ×1.5 / ×1 / ×0.5 / ×0, and Happiness +5 / 0 / 0 / −10. Aiming for a critical at 150 % therefore beats chaining two bare successes — but a failure costs Happiness on top of the time tied up.
Implemented in src/domain/contracts.ts
| Outcome | Condition | Rewards | Happiness |
|---|---|---|---|
| Critical | ≥ ×1.5 the required power | ×1.5 | +5 |
| Success | ≥ the required power | ×1 | — |
| Partial | ≥ 80% of the required power | ×0.5 | — |
| Failure | below that | nothing | -10 |
pReq = max( 1 ; round( pReq_du_palier × facteur_du_domaine ) )The exact mirror of the duel’s colour factor, in the other direction: Charme demands 100 % of the listed power, other domains 40–45 %. Without this correction, non-Charme contracts would have been impossible.
Implemented in src/domain/contracts.ts
Worth knowing
The listed power is that of a Charme contract. A Ruse, Composure or Patter contract demands only 40–45 % of it, because the game produces far less of those stats. Never compare two contracts of different domains by their displayed number.
The Gala is the exceptional contract: 2 h, a power computed from your three best cards in the domain, and a reward indexed on your real hourly income — plus 10 Influence and 8 Stars.
And there is one contract you will almost never see: Bribing the Insurer. It is not part of the board draw — it has its own roll, a one in 20 chance per game day, never two at once, and it only opens at rank 5, meaning $25,000,000 of cumulative Cash. You have 72 hours to accept it.
It is the hardest contract in the game: 25% more required power than its rank, which puts it out of reach of an improvised squad and makes a critical unreachable in every domain. You either clear it or you don’t.
The catch
On top of its rank’s rewards, it pays an Insurance Claim: the right to demolish a building, which exists nowhere else. Demolishing frees the plot (which you keep) and refunds 50 % of what you invested, upgrades included; the level and staff posts are lost, and you must empty the building of its occupants first. Careful: the insurer only signs on a success — a partial pays no more than an ordinary contract.
The Trials
8 challenges to complete once each, in order: every one demands a squad of a given domain and unlocks by beating the previous. These are the game’s milestones, not an income source — they grant items and open systems.
| Trial | Domain | Power required |
|---|---|---|
| The Pool Hall Baptism | Charme | 55 |
| Regulars’ Night | Patter | 45 |
| The Back-Room Bets | Ruse | 85 |
| The Midnight Rounds | Composure | 105 |
| The Gala of Shadows | Ruse | 170 |
| The Penthouse Siege | Charme | 450 |
| The Downtown Crowning | Patter | 250 |
| The Legend of the City | Composure | 320 |
Missions
3 daily and 3 weekly missions, drawn at each new game day. They pay in Cash, Influence and above all in recruitment tickets — the reliable ticket source.
Cible = round( (base + perBoss × Boss) × croissance^Boss )Missions track your Boss level, affine then geometric. Volume missions use a gentler growth, because the number of clients served saturates (around 8,200/day) where income keeps climbing.
Implemented in src/domain/missions.ts
Worth knowing
Targets track your Boss level, but not all at the same pace. Volume missions (serve N clients) climb more gently than income missions, because the number of clients an empire can serve saturates while its earnings keep climbing. Late game, volume missions are the easiest.
Poaching
The only mode that touches other players. The Pact explicitly allows it: *we don’t hold on* — an unhappy artist is free in fact, and the House that leaves her unhappy deserves to lose her. Mechanically, that sentence is the whole rule.
You scout a target, assemble a squad of three, pay the premium — then you play. A theft is no longer rolled: it is fought over five Midnight Pass boards, and the defender answers with a squad of his own.
I = Σ Ruse_eff × (1 + ΣPassePartout + BeauParleur) × (1 + SangDeGlace) × (1 + bonus_archétype) + points_platsYour infiltration squad’s score. Against it, the defender’s stealth is `I × (1 + reduction)` — the code applies (1 + r) where the design doc wrote (1 − r); the divergence is deliberate and documented.
Implemented in src/domain/poach.ts
p_vol = clamp( 0,20 + 0,012 × (25 − Bonheur) + 0,0006 × (I − S) ; 0,05 ; 0,90 )Despite its name, `p_vol` is no longer a probability: a theft is played, not rolled. It does two things — at the floor (0.05) the target is out of reach and the attack is refused with no charge; above it, it becomes a handicap on your squad (×0.80 to ×1.25) for the deciding round. The target’s Happiness weighs twenty times more than the score gap: keeping your girls happy is still the first PvP defence — no longer the last one, since you can now defend by playing.
Implemented in src/domain/poach.ts
vol = score_attaquant > score_défenseur, sur 5 tableaux × 3 tracésThe decision. Both sides play the same boards (same seed) with 3 girls each, on the Midnight Pass engine; the score is total damage. The defender has 24 h: not answering is a forfeit, and a forfeit costs the card. On a tie the defender keeps her. All six committed girls leave for 24 h on Operation — unstealable, but unproductive.
Implemented in src/server/game/poach-duel.ts
Worth knowing
Look at the coefficients: one point less Happiness on the target weighs twenty times one point of score gap. A happy card is flatly out of reach — the attack is refused before any charge. Below the threshold, `p_vol` no longer decides the theft: it decides the attacking squad’s striking power, between ×0.80 and ×1.25. Keeping your girls happy is still your first defence — the second being to show up and play.
p_détection = clamp( 0,10 + 0,0035 × (S − D) ; 0,05 ; 0,95 )The defender’s surveillance against your stealth. It is now the only thing detection decides: the defender is always told someone is coming for one of his girls — otherwise he could not defend her — but he only learns your name (and your squad’s) if he spotted you. A detection also locks that defender for 48 h.
Implemented in src/domain/poach.ts
Prime = max( base × rareté × ville ; Cash_total_de_montée(1 → niveau) × part ) × (1 − meilleure_réduction)A theft’s price is the maximum of two scales: the rarity flat rate, and a share of what the card actually cost to level. Stealing a heavily levelled card costs what it is worth, not what its rarity suggests.
Implemented in src/domain/poach.ts
The victim is compensated in Stars, in proportion to the lost card’s level. Daily quotas limit harassment: a target can only be attempted a limited number of times per day, a detection locks that defender for two days, and a girl can only be at stake in one Pass at a time. The premium is owed at launch and never comes back — unless the target vanishes before the verdict, in which case the Pass is voided and the Cash returned.
- Defending — keep Happiness high, post lookouts, and never leave a valuable card sitting below the discontent threshold.
- Attacking — hunt unhappy cards, not weak players. Scouting gives each target’s Happiness band; the Tailing ability gives the exact value.
- Leaving does not protect you — a roster left at work keeps sinking while you are away, and stays stealable for as long as it is. Logging off shelters nothing: only a happy card is safe.
