MRDN Corporation Presents

THE PIZZA
CONNECTION

One Lifetime. Six Phases.
An Immersive Tale by Michael D. Subrizi
01
The Pitch
HBO prestige drama meets
1990s coin-op arcade.

One lifetime. Six phases.
No two runs the same.

Nothing plays like this.

A single-player, stat-driven crime saga for iPad and Steam. You play a lifetime, not a history. The Ceremony sets your dice. The Contemporary collects the debt. Every minigame is life or death. There is no respawn.

02
03
The World

Beauty and Brutality
In the Same Frame.

A baptism and a massacre happen in the same church. The sacred and the profane share the same altar. You play a lifetime, not a history. The Ceremony sets your dice. The Contemporary collects the debt.

I. AMARO

Bittersweet tragedy. Every victory has a cost. Finality is non-negotiable. The sacred and the profane on the same altar.

II. ARCADE CAMP

Minigames are 1990s coin-op absurdity. The story is prestige drama. The contrast is intentional. Jackpot vs. Scar.

III. GENERATIONAL WEIGHT

You are playing a lifetime. The Ceremony sets. The Contemporary collects. Everything in between is yours to ruin.

04
Story Architecture

Six Phases. One Lifetime. No Rewind.

I
Phase I
Ceremony

The blood oath in Nonna's kitchen. The dice fall for the first time. The Arch Enemy is assigned.

II
Phase II
Origins

Establishing power. Every street corner is a negotiation. The Family Boss watches.

III
Phase III
Expansion

Aggressive growth. Territory wars. The empire stretches across locations worldwide.

IV
Phase IV
Golden

Maximum influence. Maximum exposure. The most dangerous moment — when everything is working.

V
Phase V
Decline

Internal rot. External heat. Betrayal from within. The Arch Enemy circles closer.

VI
Phase VI
Contemporary

Digital laundering. Legacy and reckoning. The Contemporary collects the debt.

05
The Engine

Basement Craps.
Generous in Victory.
Brutal in Failure.

D&D-inspired rolling blended with arcade action. Dice determine the quality of success and the severity of failure — never a binary outcome. Skull Multipliers can exponentially compound both.

D4
FATE
D6
QUICK
D8
MODERATE
D10
SKILL
D12
MAJOR
D20
BIG SCORE
☠ ×2–5
SKULL MULT

Starting Capital is rolled at Ceremony: (3d6 × 100) + 700 WADD — range 1,000 to 2,500. Respect grows at 0.3× multiplier. Legendary status sets a permanent Heat floor of floor(respect / 5). You cannot go cold once you are feared.

06
Stats & Economy

Six Stats. One Currency.
All Of It On The Table.

CORE STATS

Fists
Brains
Guts
Heart
Respect
Heat
WADD — Walking Around Dough
Lifestyle Cost by Rank: 100 → 3,000 WADD / cycle
Crew upkeep: 10 WADD per member per story
Heat fine (>75): 50 – 200 WADD
Arrest fine: 500 – 2,000 WADD
Emergency: Nonna Loan — 500 WADD, one-time

FAMIGLIA RANKS

RankRespectGate
Picciotto0–9None
Associate10–24None
Soldier25–50None
Made Man51–67Ceremony required
Capo68–84Ceremony required
Don85+Ceremony required

Respect alone does not promote you. Each tier requires the story ceremony event to fire.

07
Story Events

The Full Event Lane.

Every run triggers a sequence of escalating events. The Arch Enemy who appears never disappears. The Sitdown might be your only way out of a war. Events are queued, paced, and permanent.

Ritual
Made Man Ceremony
Vendetta
Arch Enemy
Diplomacy
The Sitdown
Law
Court Battle
Prison
Jailhouse Showdown
Incarceration
Prison Events
Betrayal
Crew Mutiny
Terminus
Final Fate
08
Arcade Mandate

Arcade Minigames.
Every One Is Life or Death.

Jackpot on success. Permanent Scar on failure. These are not breaks from the story — they ARE the story's highest-stakes resolution mechanics.

01
Big Score
Heist · D20
02
Espresso Rush
Speed · Reflex
03
Nuclear War
Territory · Risk
04
Pump & Dump
Economy · Timing
05
Guess Da Snitch
Deduction · Heat
06
Pizza Slinger
Classic · Arcade
07
Steel Nerves
Pressure · Guts
08
Shadow Tail
Stealth · Heat
09
Smuggler's Run
Transit · WADD
10
Gym Rat
Fists · Stat Boost
11
Clean Hands
Laundering · Brains
12
Da Collector
Debt · Violence
13
Fort Vaffanculo
Defense · War
14
Carrier Pigeon Club
Message · Intel
15
Il Circolo
Politics · Heart
16
Il Sapore Degli Uomini
Prestige · Culture
17
Amore Scandaloso
Romance · Risk
18
Good Deeds
Respect · Legacy
19
Nonna & Zia
Family · Stability
20
Pasta Trivia
Culture · Bonus
09
The Terminus

50 Unique Fates.
Heat. Respect. WADD.

Every run ends exactly once. No good endings — only earned ones. Pick from what you've unlocked, or gamble everything on a d20.

50
Endings
11
Fate Types
3
Trigger Paths
d20
Second Chance
★ TRIUMPH
Pizza King
Anonymous Legend
Don Supreme
Business Mogul
◈ LEGACY
Mentor Figure
Family Man
International Escape
Alzheimer's King
✕ FALL
Federal Informant
Prison Lifer
War Casualty
◉ THE GAMBLE
d20 + GUTS vs DC 15

Hit → best earned
Miss → worst earned

GUTS 18 → 65% odds
GUTS 1 → 5% odds
10
Market Position

The DNA of a Genre
That Doesn't Exist Yet.

Narrative
Coppola · Scorsese · Puzo

The moral gravity of The Godfather. The electric chaos of Goodfellas. Devastating consequences.

Gameplay DNA
Dope Wars + D&D

Brutal economy loop married to dice ceremony and stat progression. Pure cause-and-effect.

Design
Papers Please + CYOA

Every choice matters and compounds. CYOA's branching consequence at scale. No undo.

Arcade Spirit
Sierra + Carmen Sandiego

Sierra's world-building ambition. Carmen's global scope. Cabinet-era design — zero friction.

"A crime saga where the story has HBO weight
and the gameplay has 1990s arcade teeth.
The tone alone is the moat."
11
Platform & Tech

Flutter. iPad First.
Steam Ready.

PLATFORM

PrimaryiPad (iPadOS)
SecondarymacOS (Steam)
FutureWindows (Steam)
EngineFlutter / Dart (SDK 3.0+)
StateProvider 6.1.0 (ChangeNotifier)
AudioAudioplayers 6.5.1
SteamSteamworks 0.4.7
CrashSentry Flutter 8.14.0
SaveFile-backed JSON, 3 slots

SCOPE

MinigamesAll complete
CharactersFull named cast
ItemsCommon · Rare · Legendary
TerritoriesGlobal locations
Story chaptersSix life phases
Final Fates50 unique endings, 11 fate types
TestsFull unit/widget suite
ArchitectureSingle-player, no backend

Arcade Mandate enforced: zero scrolling. Every core screen fits a single cabinet frame.

12
Current Build — April 2026

Nearly Across the Line.

✓ COMPLETE

All arcade minigames — playable, balance-tuned
Full event lane: Made Man → Capo → Don → Sitdown → Arch Enemy → Court → Prison → Mutiny → Final Fate
Full character cast portraits wired throughout all event screens
Save/load: 3 slots, legacy migration, metadata previews
Music system live — location-keyed tracks + SFX wired
Lay Low, World Tour, Crew management, Underground Market
Steam SDK integrated (macOS + Windows)
Full test suite — flutter analyze: zero errors
Nonna rescue reward — escalating item (grappa → dice → medallion → stiletto) on all three rescue paths
Crew loyalty tab CONFISCATED blind — management locked at deferral tick 11+ until Nonna rescued
IL DON hub state — full degraded hub when rank lost under pressure
50 Final Fate endings — Prison Lifer heatTolerance bug fixed, all endings reachable

→ REMAINING

Final SFX mix and playtest verification pass
Physical iPad profiling (simulator clean; real-device pass required)
Sentry DSN configuration (wired, DSN not yet set)
App Store metadata, screenshots, and rating declaration
Steam capsule art and store page publication
Store Listings

Ready to Ship.

13
Steam — Short Description
The Pizza Connection
One lifetime. Six phases. No two runs the same.
You play a lifetime, not a history. The Ceremony sets your dice. The Contemporary collects the debt. A stat-driven crime saga where every choice permanently scars the family — across six phases, across one irreversible life.
Arcade minigames — each a life-or-death story resolution
50 unique Final Fates determined by Heat, Respect & WADD
Six life phases · global territories · items · full cast
D4–D20 dice · Skull Multipliers ×2–×5
Mature — adult themes, organized crime, consequence
Apple App Store — Description
The Pizza Connection
An immersive tale by Michael D. Subrizi · MRDN Corporation
Nonna is watching. She always watches.

A generational crime drama for iPad — HBO prestige weight, 1990s arcade reflex, the brutal economy of a dice game played in a basement with men who don't forgive debts.

Your run begins in Nonna's kitchen. It ends in one of many possible fates.
iPad-first — built for the cabinet. Zero scrolling.
3 save slots · location-keyed soundtrack · full SFX
Mature 17+ — violence, adult themes, consequence
II
Part Two

The Inside Game

Architecture, atmosphere, forbidden patterns, and everything the engine runs on. This is the bible — for the team and for the machines.

Blood. Bones. WADD.

14
15
Atmosphere

Six Tone Pillars.
The Quality Gate.

These are not suggestions. Every screen, every label, every line of dialogue is evaluated against them. If a feature fails any pillar, it fails the Nonna Standard.

I. AMARO

Bittersweet tragedy. Every victory costs. A baptism and a massacre in the same church. The sacred and profane on the same altar.

II. ARCADE CAMP

1990s coin-op absurdity meets prestige drama. The contrast is intentional. Jackpot vs. permanent Scar. Play is the hook; consequence is the weight.

III. GENERATIONAL WEIGHT

You play a lifetime. The Ceremony sets. The Contemporary collects. Everything in between is the accounting.

IV. PHYSICAL WEIGHT

The Lead (atmospheric fade-in). The Slam (screenshake + haptics + SFX on consequence). The Countdown (Insert Coin finality).

V. STREET LEVEL

Visceral, present-tense, superstition-soaked. Not corporate. Not web-app. Not documentation. If it sounds like a settings page, cut it.

VI. NONNA STANDARD

The ultimate quality gate. Would a street-level Sicilian grandmother find this insulting? If it sounds like corporate onboarding, it fails.

16
Critical Rules

Forbidden Patterns.

These failures have been hardened against. Do not reintroduce them.

Never call Image.asset() directly — use ImageUtils.safeAsset().Direct calls crash silently on missing assets. No silent failures.
Never modify PlayerStats fields directly — use the provided methods (addMoney, changeRespect, changeHeat).Direct mutation bypasses clamping and the Heat Floor rule.
Never trigger events inline — always use gameProvider.addEventToQueue().Inline triggers bypass pacing, deduplication, and the 3-event queue cap.
Never hardcode WADD values in screens — all constants live in EconomicBalanceConfig.Hardcoded values break balance tuning globally.
Never hardcode character data in screens — use CharacterDatabase.getCharacterById(id).Static data in screens will desync from the database.
Never allow scrolling in core gameplay screens.The Arcade Mandate: every core screen fits a single cabinet frame. Scroll = design failure.
Never use emojis in game text or UI labels.Emojis are web-app language. The Nonna Standard forbids it.
Never allow rank promotion without the story ceremony event.Respect threshold + ceremony flag required. Grinding respect alone does nothing.
17
UX Standards

The Arcade Mandate.
The UX Constitution.

1
ZERO SCROLLING — Every core screen must fit a single cabinet frame.If it scrolls, the design failed. Tier or paginate within the frame. No exceptions.
2
HIGH IMPACT VISUALS — High-contrast monospace. Faction/category color coding consistently applied. 60fps animations via flutter_animate.
3
THE LEAD — Every scene opens with an atmospheric fade-in or tagline whisper.This is not optional decoration. It is the sensory contract with the player.
4
THE SLAM — Critical outcomes hit the frame with screenshake + haptics + heavy SFX.Big Score, Arch Enemy confrontations, Final Fate reveal — all must physically impact the frame.
5
THE COUNTDOWN — Insert Coin style timers for finality in decision moments.Decision screens with permanent consequences must feel like a coin-op timer.
6
ASSET INTEGRITY — All assets declared in pubspec.yaml. Missing assets throw AssetNotFoundException.Use ImageUtils.safeAsset() and AudioService. No silent failures.
18
Visual System

Color Coding.
Every Color Is Functional.

Color communicates category — not decoration. Apply these consistently across all screens. Color is faction language.

INTEL (Gray)
Data, facts, character dossiers, neutral information. No judgment.
VIOLENCE (Red)
Combat, Heat increases, Arch Enemy encounters, warnings, forbidden actions.
MONEY (Green)
WADD transactions, economic status, jackpots, successful arcade outcomes.
FAMILY (Gold)
Respect, Nonna, bloodline milestones, rank ceremonies, prestige.
BRAINS (Blue)
Intelligence stat displays, strategy, court/legal contexts.
HEAT AMBER
Heat warning state (medium pressure). Below critical but rising.
ASSOCIATE (Cyan)
Associate rank color. Used in rank display and crew tier indicators.
19
Architecture

Core Models.

All JSON-serializable via build_runner. Never deserialize manually. Run flutter pub run build_runner build after any model change.

GameState — the save blob
selectedCharacter    Character?
customPlayerName     String?         // Overrides archetype name
currentFamilyBoss    Character?      // Nonna at start
stats                PlayerStats     // All numeric state
currentStoryId       String          // Active story node
completedStories     List<String>
inventory            List<GameItem>
equippedItems        List<GameItem>
crewMembers          List<CrewMember>
flags                Map<String,dyn> // Named state
archEnemy            String?         // Character ID
archEnemyState       ArchEnemyState? // Full rivalry
characterAge         double          // 14–80+
lifePhase            String          // young|prime|veteran|elderly
generation           int             // 1=original, 2+=successors
currentLocation      String?         // e.g. 'new_york'
locationReputations  Map             // Per-city memory
PlayerStats — all numeric state
money         int    // WADD — use addMoney() / subtractMoney()
guts          int    // 1–18 — improveGuts() / setGuts()
heart         int    // 1–18 — improveHeart() / setHeart()
brains        int    // 1–18 — improveBrains() / setBrains()
fists         int    // 1–18 — improveFists() / setFists()
respect       int    // 0–100 — changeRespect()
heat          int    // 0–100 — changeHeat()
               //   floor = respect/5 (HEAT FLOOR RULE)
               //   You cannot cool off once you are feared.
madeManCeremonyDone  bool // Story gate, not auto-set
capoCeremonyDone     bool // Story gate
donCeremonyDone      bool // Story gate
20
Economy & Balance

EconomicBalanceConfig.
One Source. No Exceptions.

Every WADD constant lives here. Change numbers here — nowhere else. Hardcoded values break global balance.

ConstantValueContext
Starting Capital(3d6 × 100) + 700Rolled at Ceremony. Range: 1,000–2,500 WADD
lifestyleCost Picciotto100 WADDRespect 0–9, every 30 stories
lifestyleCost Associate200 WADDRespect 10–24
lifestyleCost Soldier400 WADDRespect 25–50
lifestyleCost Made Man800 WADDRespect 51–74
lifestyleCost Capo1,500 WADDRespect 75–89
lifestyleCost Don3,000 WADDRespect 90+
crewUpkeepPerStory10 WADDPer crew member, per story
heatFine (Heat > 75)50–200 WADDApplied each story cycle when hot
arrestFine500–2,000 WADD+ 5–15 respect loss, 30–50 heat reduction
nonnaLoan500 WADDOne-time emergency bailout. Prevents softlock.
respectGainMultiplier0.3×All respect gains. Earned over years, not days.
21
The Nonna System

Nonna. The Kidnapping Cycle.

Persistent, serializable, gated by tutorial. Must never fire before the player has entered the main hub. All flags survive game state serialization.

1
Trigger
Story choice sets show_nonna_takeover. Arch Enemy assigned. First kidnapping armed but NOT fired.
show_nonna_takeover = true
2
Tutorial Gate
Nothing fires until tutorial_complete and player is on a hub-accessible story. Card never renders in tutorial.
gate: tutorial_complete
3
Kidnapping
Story nonna_first_kidnapping fires. Ransom note from Sister Maria Crisci. New York framed as hunt destination.
nonna_kidnapped = true
4
Rescue or Pay
Three paths: pay full ransom (save menu), pay half/third at on-site sentinel story, or win arch enemy combat. All award a rescue item scaled to kidnap count.
pending_nonna_story set
5
Resolution
Story resolves. nonna_kidnapped set false. Rescue reward awarded. Card disappears. Recurring cycle re-arms via nonna_recurring_kidnapping.
nonna_kidnapped = false
Do NOT show the MISSING PERSON card before tutorial completion.shouldShowNonnaMissingCard() has explicit guards. Do not bypass them.
Three rescue paths are implemented: ransom payment, on-site payment, combat victory.All paths call giveNonnaRescueReward() before resolving the return story.
22
The Arch Enemy System

Permanent Vendetta.
It Gets Worse.

Not a one-time boss. A persistent shadow that scales with the player. Assigned at first blood. Removed only through Sitdown or Street War.

HARASSMENT
SABOTAGE
CONFRONTATION
STREET WAR
FieldBehavior
lastVendettaLevelCarries over. Floor 30. Ceiling 90. Never zero.
scaledFistsbaseFists + (confrontations × 2). Enemy grows harder.
rivalryLabelFIRST ENCOUNTER → LIFELONG ENEMIES
hasCalledCopsPermanent flag. Ratting has consequences.
hospitalVisitsNarrative weight. Feeds Final Fate context.
Assignment
// Via story choice effects:
ChoiceEffects(setArchEnemy: 'RANDOM')
// Or specific character:
ChoiceEffects(setArchEnemy: 'tano_garofalo')

// Always resolves through CharacterDatabase.
// Never store character data on GameState directly.
23
Event System

The Event Queue.
Queued. Paced. Never Inline.

Events are queued, paced, and deduplicated. Hard cap: 3 events. Priority ≥ 85 auto-launches. Priority ≥ 95 bypasses pacing.

Always via queue
// CORRECT
gameProvider.addEventToQueue(event);
gameProviderQueueDynamicEvent(
  provider, event, allowAutoLaunch: true);

// NEVER inline — bypasses everything
navigator.push(MaterialPageRoute(
  builder:(_) => MyEventScreen()));
Priority Tiers
95+  Mandatory. Bypasses anti-spam pacing.
     Ceremonies, Final Fate.
85–94 Auto-launch candidate. High urgency.
      Arch Enemy confrontations.
<85  Queued normally. Subject to 3-story
     cooldown between random events.
Pacing Rules
// Anti-spam: if pacing_counter < 3,
//   skip random events (priority < 95)
// Queue cap: hard limit of 3 events
// Dedup: event.id must be unique in queue
// Asset guard: empty backgroundImagePath
//   or empty phases → event skipped
// Mutiny: checked separately via
//   gameProviderCheckForMutiny()

The pacing_counter lives in gameState.flags and resets to 0 when an event is successfully queued.

24
Character System

Character Database.
Always Via Lookup.

All character data lives in CharacterDatabase. Never hardcode names, portraits, or dialogue in screens. ID must match image filename exactly.

Lookup & Portrait Convention
final c = CharacterDatabase.getCharacterById('nonna');
final portrait = ImageUtils.safeAsset(c.imagePath);
// Path: assets/images/characters/{id}.png
// Victory: victory_defeat/{Name}_Victory.png
// Defeat:  victory_defeat/{Name}_Defeat.png

// For atmospheric reveals — always:
ImageUtils.arcadePortraitStage(character)
// bleed bg + foreground + accent glow
Gender/Identity flags are strict — all story text must align with the character's gender field. GENDER_TEXT_USAGE protocol is non-negotiable.
Character Fields
id               String  // snake_case, stable across saves
name             String
nickname         String  // 'The Bear', 'The Volcano'
gender           String  // 'male' | 'female'
startingLocation String
backstory        String  // Multi-paragraph
bonuses          CharacterBonuses
voicePattern     String  // 'enforcer_professional'
generation       int     // 1=original, 2+=successors
dialogue         CharacterDialogue
  greeting, success, failure, threat, family
storyModifiers   StoryModifiers
  businessDeals, violence, family, law
25
Persistence

Save System.
File-Backed JSON. Three Slots.

AspectDetail
Slots3 named slots with metadata previews
FormatJSON — GameState.toJson() / fromJson()
Code genjson_serializable — all .g.dart files
MigrationLegacy shared-prefs → file on first load
Regressionsave_service_regression_test.dart
Crash DSNWired. Not yet configured.
!
Set Sentry DSN in crash_reporting_service.dart before App Store / Steam submission.
Rules
// Always serialize through the model
final json = gameState.toJson();
await saveService.saveSlot(idx, json);

// After any model field change:
flutter pub run build_runner build \
  --delete-conflicting-outputs

// The [STORY SELECT] AppLogger line in
// story_screen.dart is intentional.
// It logs which story loaded and why.
// Do NOT remove it.
26
Tech Stack

Stack & Architecture.

PackageVersionRole
FlutterSDK 3.0+Framework
Provider6.1.0State — ChangeNotifier
Audioplayers6.5.1Location-keyed audio
Steamworks0.4.7macOS dylib + Win DLL
Sentry Flutter8.14.0Crash reporting
json_serializableModel .g.dart files
flutter_animate60fps The Lead / Slam
Provider Mixin Map
GameProvider (root ChangeNotifier)
├── game_provider_economy     WADD, market, lay low
├── game_provider_crew        Crew, mutiny check
├── game_provider_event_queue Events, pacing, auto-launch
├── game_provider_story_prog  Story selection by phase
├── game_provider_persistence Save/load, migration
├── game_provider_legendary   Legendary moments
├── game_provider_territory   Territory, location travel
└── game_provider_empire      Empire pressure, bosses

// STATE IS THE ENEMY
// Logic lives in services. UI only renders state.
// No business logic in build() methods.
27
Conventions

Naming Conventions.

PatternExample
Event screensarch_enemy_confrontation_screen.dart
Minigame screenspizza_slinger_screen_arcade.dart
Servicesdice_service.dart
Provider mixinsgame_provider_economy.dart
Story databasesstory_database_origins.dart
Generated filesgame_state.g.dart — do not edit
Test filesnonna_hub_visibility_test.dart
Character IDstano_garofalo — must match image filename
Story IDsnonna_first_kidnapping — stable, save key
Flag keysnonna_kidnapped — snake_case, stable
story_screen.dart — 11 Sections
// ~3,470 lines. Navigate with ═══ dividers.
// Cmd+F on section number to jump.

Section 1   State variables
Section 2   Immersion hooks (music, typewriter)
Section 3   Input handling (keyboard, save/load)
Section 4   Build + leave dialog
Section 5   RPG dialog popup
Section 6   Location label resolution
Section 7   Choice dispatch (5 typed handlers)
Section 8   Dice engine + ceremony maps
Section 9   Consequence + arcade moments
Section 10  _buildContestedRoll
Section 11  Vendetta reveal

// Wrappers at bottom:
// _QuickEncounterWrapper
// _BossTakeoverWrapper
// _ArchEnemyRevealDialog
28
Hard Rules

Before You Ship.

Run flutter analyze — must return zero errors before any commit.
Run flutter test — minigame_screen_smoke_test.dart covers UI stability.
Check pubspec.yaml — all new assets declared before first use.
Nonna Standard audit — read all new dialogue out loud. If it sounds corporate, cut it.
Frame check — load on 16:9 and 16:10 aspect ratios. Zero UI overflows permitted.
Feedback loop — all Big Score outcomes trigger screenshake. Verify in playtest.
!
Real iPad required for profiling before ship. Simulator clean ≠ device clean.Haptics, memory, and frame-rate behave differently on real hardware.
!
Configure Sentry DSN before App Store / Steam submission.Crash reporting is wired. DSN not yet set in crash_reporting_service.dart.
HIERARCHY OF TRUTH
1. GRAND VISION — Check first. Branding, atmosphere, purpose.
2. SOURCE CODE — Internal logic, mechanical recipe, engine soul.
3. PRINCIPLES — State is the Enemy. Fail Loudly. Non-negotiable.
4. README.md — Public-facing. Scrubbed of emojis.
29
MRDN Corporation
One Lifetime. Six Phases. — iPad & Steam
An Immersive Tale Created by
Michael D. Subrizi
Beauty and Brutality  ·  In the Same Frame  ·  Blood. Bones. WADD.