← Devlog / DeckBall v3.9

Goalkeeper Mode &
Stability

34 commits, +11,447 lines. v3.8 gave your career progression and identity. v3.9 lets you play a whole new position — in goal — while quietly tearing out the crashes and memory bloat that were costing real players their game.

Commits ec2fe59 → b0458b9

v3.9 carries two things at once. On one side, the most-requested feature in DeckBall's history — a real goalkeeper career — plus reworked transfers and a much deeper relationship system. On the other, a stability pass driven straight off the Play Console crash dashboard and player reviews: a crash that hit every married player, a memory leak that took out older phones, and the repetition that made long careers feel samey. Both packages ship together.

Major Features
01

Goalkeeper Mode

New System

The headline of v3.9, and the feature players asked for most. Pick goalkeeper at character creation and the whole game reshapes around the position. Keepers never step into attacking moments — they play through their own match scenes: a reflex save, a penalty stop, sweeping behind the line and organising the defence, all narrated in 8 languages. Three archetypes give it range: the Wall (reflexes), the Sweeper-Keeper (playing out from the back), and the Commander (marshalling the defence).

  • 8 goalkeeper-only cards — diving save, punch clear, claiming crosses, marshalling the wall, quick distribution, sweeping, penalty reading (3 in the starting deck, 5 in the shop)
  • 3 archetypes: Wall / Sweeper-Keeper / Commander — incompatible field-player builds simply can't be created
  • Saves and clean sheets tracked as real stats — the career screen shows those instead of goals & assists
  • Stats read in a keeper's own language: Reflexes, Leadership, Playmaking, Long Kick, Footwork
  • Dedicated keeper art — 3 match scenes and a keeper profile photo, so you're never shown as an outfield player
02

Fairness for Keepers

Deep Fix

Adding a position is easy; making it play fair is the hard part. Two old systems quietly punished goalkeepers, and both got fixed. Keeper decks never touched shooting or dribbling, so those training weeks were wasted — we added a "Long Goal Kick" (shot) and "Footwork" (dribble) card so all five stats matter. And transfer reputation used to be a flat average of five stats, so a keeper who trained reflexes correctly looked mediocre and never got the big offer. Now a keeper's reputation weights the stats they actually use, and their CV is read through saves and clean sheets.

  • No more dead stats — every one of the five now feeds a card a keeper can play
  • Transfer reputation weighted to the position, not a flat average
  • Star Season bonus finally reachable for keepers, read off save performance
03

Reworked Transfers

New System

Offers no longer look only at your stat average — they read your season. Goal and assist contribution now earns a reputation bonus that flows into every offer filter. And a new Star Season rule rewards a breakout: average 0.8+ contributions per match and you're guaranteed a monster offer from the five strongest prestige clubs you can realistically reach. Have the season of your life and the game finally treats you like it.

  • Offers weigh season performance, not just raw stats
  • Star Season: 0.8+ contributions/match → a guaranteed top-club offer
  • Wage protection after a breakout season
04

Deeper Relationships

New Content

Life off the pitch got heavier. A full cheating chain runs from a nightclub temptation to a gossip photo to being caught in the headlines, with real, consequential choices at each step. A baby pack adds a "spend time with the baby" activity, partner-specific responses, and story beats — a first word ("Goal!"), a stadium debut, a sleepless week. A drama pack layers in 8 new relationship events, and your partner now reacts in context to your injuries, your low morale, and your peak form.

  • Cheating chain: temptation → gossip photo → caught in the headlines (confess / deny / apologise / divorce)
  • Baby pack: new activity, partner-specific replies, and 3 baby events
  • Drama pack: 8 new relationship events that actually move your relationship score
  • Contextual chit-chat that responds to injury, morale, and form
Critical Crash Fixes

The thing we're proudest of in v3.9 isn't the new position — it's the crashes we killed. The worst one hit every married player: six marriage_crisis events called a translation function, but in the six non-Turkish languages the i18n module was never imported, so the moment the event fired the game closed with a ReferenceError. It's fixed, verified across all 8 languages — and we added a permanent safeguard so this whole class of bug can't ship again.

  • Marriage-event crash — fixed (B10) — the highest-impact bug in the game. Any married player whose relationship score dropped hit it. All 48 events × 480 text keys now verified.
  • Indonesian crashes — fixed (B8) — training, resting and the dating app crashed because several profile and event functions were never defined in the Indonesian data files.
  • Permanent safeguarddataManager now falls back to English content when a language is missing a function instead of crashing. This error class can't reach production again.
Memory & Performance

A cluster of OutOfMemoryError crashes and GC-driven ANRs was hitting roughly 70 players on the Console. We went after the root causes rather than the symptoms, and the biggest win came from the asset pipeline: the app was holding far more in memory than any screen ever needed.

Lazy Language Loading

Only the active language is loaded into memory now, instead of all 8 at once — a large, constant saving for every device.

Assets: ~158 MB → ~49 MB

Images are downsized on disk (cards 1254²→512², lifestyle/cleats/events ≤768px) and decoded at view size on Android via resizeMethod="resize".

Match Scenes

7-layer match scenes were decoding at full resolution — about 58 MB each. Now they resolve at screen size, not source size.

Chat History Capped

Dating chat history is limited to 80 messages (save file, render and old-save repair) — an unbounded log was bloating both the save and the UI. Plus largeHeap in the manifest.

Systems & Balance
  • Novelty-first event engine — every event's seen-count is now saved. Unseen events get 8× priority; events seen 3+ times get rarer with longer cooldowns. Measured on the real pool (159 events · 300 simulated careers), first-season novelty rose 60% → 77% and the most-repeated event dropped from 3.7 to 2.5 appearances. Long-career repetition is bounded by pool depth, not the algorithm — expanding the unconditional pool is the v4.0 job.
  • Text variants — the same event can now arrive with different wording. First pack: the 5 most-recurring events, 2 variants each, in all 8 languages.
  • Big-match pressure — card success cap against elite opponents (strength ≥85) lowered 95% → 90%. Even a maxed player can now slip against the giants; normal matches keep the 95% cap.
  • Weak opponents can score — a floor was added to opponent expected goals and output raised (≈0.8 in even games, ≈1.4 vs elite). The "Getafe never creates a chance" complaint is closed.
  • Faster development — the mid-band of the training curve (60–90) is 35–45% faster; the 90+ zone is deliberately left slow.
  • Displayed chance = real chance (B3) — the on-screen percentage and the real dice could pull from different sources mid-match; bound to a single source.
Carried-Over Fixes & Pre-Release Audit
  • Trophies no longer vanishcupWonThisSeason / europeanWonThisSeason flags weren't saved, so quitting after a cup win lost it from the trophy cabinet. Now persisted, along with pending penalties and the guaranteed-event counter.
  • Season no longer runs forever (B4) — stale national-team/cup weeks could extend a season indefinitely; the header now shows the true total week count.
  • Purchased cleats stay bought (B5) — cleats, including gem-bought ones, were never written to the save. Fixed.
  • End-of-match & end-of-season summaries were Turkish in every language — those fixed templates (plus embedded league names and generic European team names) are now localised to all 8 languages, with the undefined-opponent edge case fixed.
  • Active-tab indicator fixed — the bottom bar was hard-coded to HUB, so the red mark stayed on HUB even inside league, shop, team or profile. It now marks the open page.
  • Indonesian completed — 12 missing events and 11 micro-events added, ~1,200 strings translated; plus a fresh sweep of hardcoded Turkish (injury names, the entire World Cup screen, milestone events) that non-Turkish players were still seeing.
What's Next

The novelty engine made repetition fairer, but the real ceiling is pool depth: of 159 events, only 34 can recur unconditionally. So v4.0's headline job is widening that unconditional event pool — more situations that can come round again, told more ways. On top of that, keeper-specific card art is ready to swap in as soon as the assets land.

If you're jumping into v3.9, try a keeper career from scratch — and if you're married, the game finally won't crash on you when things get dramatic.

Play DeckBall v3.9 ← All Devlogs
Available now on Android

Ready to build your career?

15 countries. 764 clubs. Now play in goal, too. A full life on and off the pitch. Free to download.

Download on Google Play