Draft whitepaper / game agreement

RollTheBall

A Solana wallet-based idle football strategy game where owned Monkey League NFTs become the players, squad construction drives strategy, and every Energy point simulates seven mini-matches against another real wallet's ghost team.

01 / Concept

Football strategy without a live opponent requirement.

The game is asynchronous: the active player spends Energy, and the opponent is represented by the latest saved squad from a real wallet.

Game loop

Connect a Solana wallet.
Verify ownership of at least six eligible Monkey League NFTs.
Build a six-player squad and assign football roles.
Spend one Energy point to start a Play session.
Simulate seven mini-matches against a comparable ghost squad.
Receive RTD and XP according to performance.

Design principles

Owned NFTs matter. Eligibility and squad strength are based on real on-chain NFT ownership and real metadata attributes.

Strategy stays readable. The player makes meaningful decisions by choosing six NFTs and assigning them to roles, without being forced into a complex tactics screen.

Randomness creates tension. Stronger squads should win more often, not every time.

The game does not alter the NFT. Levels and XP are stored inside RollTheBall only.

02 / Squad construction

Six NFTs become six football roles.

Every NFT can technically fill any role, but the formula rewards correct placement. A defender-like NFT used as a striker should not be optimal.

Required formation

RoleCountPrimary value
Goalkeeper1Goalkeeping, stability, last-line defense
Defender2Defense, tackles, interceptions
Midfielder2Passing, control, pressing, possession
Striker1Accuracy, finishing, headers

Metadata used

Alpha ScoreAccuracyMax AccuracyPassingMax PassingDefenseMax DefenseControlMax ControlPrecision ShotHard HeaderFlank PassExtreme PressingPass InterceptionHard TackleDefensive AwarenessLast Stand DefenseGolden GlovesGoalie ResistanceGoalie Long BallProtective Holding

Role fit

Each selected NFT receives a role-fit multiplier from 0.90 to 1.10. The multiplier is based on how well the NFT's actual attributes match the assigned football position. This keeps the game strategic without adding a tactics burden.

03 / Formula book

The first scoring model.

These formulas are designed as version 0.1: transparent enough for partners, adjustable before production.

Normalize raw NFT values

Base stats are expected in low integer ranges, max stats near 0-100, perks as small decimals, and Alpha Score as a larger integer.

Base(stat) = clamp(stat / 25, 0, 1) * 100
Max(maxStat) = clamp(maxStat / 100, 0, 1) * 100
Perk(perk) = clamp(perk / 0.25, 0, 1) * 100
Alpha(alpha) = clamp((alpha - 250) / 450, 0, 1) * 100

NFT skill ratings

Attack = 0.50*Base(Accuracy) + 0.20*Max(MaxAccuracy)
       + 0.20*Perk(PrecisionShot) + 0.10*Perk(HardHeader)

Playmaking = 0.45*Base(Passing) + 0.20*Base(Control)
           + 0.15*Max(MaxPassing) + 0.10*Perk(FlankPass)
           + 0.10*Perk(ProtectiveHolding)

Defending = 0.45*Base(Defense) + 0.15*Max(MaxDefense)
          + 0.15*Perk(HardTackle) + 0.15*Perk(PassInterception)
          + 0.10*Perk(DefensiveAwareness)

Goalkeeping and stability

Goalkeeping = 0.35*Base(Defense) + 0.20*Perk(GoldenGloves)
            + 0.15*Perk(GoalieResistance) + 0.15*Perk(LastStandDefense)
            + 0.10*Perk(GoalieLongBall) + 0.05*Base(Control)

Stability = 0.45*Base(Control) + 0.25*Alpha(AlphaScore)
          + 0.15*average(MaxAccuracy, MaxPassing, MaxDefense, MaxControl)
          + 0.15*RoleFit

Team ratings

AttackRating = 0.62*Striker.Attack + 0.19*Mid1.Playmaking + 0.19*Mid2.Playmaking

MidfieldRating = 0.42*Mid1.Playmaking + 0.42*Mid2.Playmaking
              + 0.08*Def1.Defending + 0.08*Def2.Defending

DefenseRating = 0.34*GK.Goalkeeping + 0.28*Def1.Defending
              + 0.28*Def2.Defending + 0.05*Mid1.Defending + 0.05*Mid2.Defending

Spirit = average(all six Alpha ratings) * 0.60 + average(all six Stability) * 0.40

Mini-match simulation

For each of 7 mini-matches:
  PossessionDuel = My(MidfieldRating*0.55 + Spirit*0.20 + random(0..25))
                 - Opp(MidfieldRating*0.55 + Spirit*0.20 + random(0..25))

  Chances = 2 + bonusFrom(PossessionDuel)       // usually 2-4 chances

  For each chance:
    ChanceQuality = My(AttackRating*0.58 + MidfieldRating*0.22 + Spirit*0.08 + random(0..20))
                  - Opp(DefenseRating*0.62 + Spirit*0.08 + random(0..20))

    If ChanceQuality > threshold:
       Shot = My(AttackRating*0.65 + Striker.Stability*0.15 + random(0..25))
            - Opp(GK.Goalkeeping*0.68 + Opp.Spirit*0.10 + random(0..25))
       If Shot > goalThreshold: goal += 1

Final winner

MiniMatchPoints = win*3 + draw*1
GoalScore = goalsFor - goalsAgainst
FinalScore = MiniMatchPoints + clamp(GoalScore, -4, 4) * 0.35
Winner = higher FinalScore

Balance target

A clearly stronger squad should win most Play sessions, but not all of them. Initial target: a squad rated 10% stronger should win about 60-65% of sessions; 20% stronger should win about 72-78%.

04 / XP and levels

Progression is local to the game, not written to the NFT.

Max level is 10. Leveling should feel difficult, and ownership history must be wallet-specific.

Level table

LevelTotal XP requiredEstimated sessions per monkey*
100
212018-24
333048-66
4720100-144
51,350185-270
62,300315-460
73,700500-740
85,700770-1,140
98,5001,150-1,700
1012,5001,700-2,500

*Estimate assumes 5-8 XP per Play session for a monkey that is included in the active squad.

XP earnings

Selected in squad for a Play session+5 XP
Squad wins the Play session+2 XP
Monkey involved in scorer/key-event roll+1 XP
Daily XP cap per monkey24 XP
Maximum level10

The cap prevents farming loops from accelerating progression beyond the intended curve.

Wallet-specific ownership memory

RollTheBall stores levels using the pair Wallet Address + NFT Mint. If an NFT moves to a new wallet, it starts at Level 1 for that new wallet. If it later returns to a wallet where it had previous progress, that wallet's previous level is restored. The NFT itself is never modified.

StoredProgressKey = hash(walletAddress + nftMint)
VisibleLevel(wallet, mint) = progressTable[StoredProgressKey]
05 / RTD economy

Rewards should favor the active player without excluding passive winners.

The active player spends Energy, so the active side receives a larger reward coefficient. The ghost side can still earn when it wins.

Reward formula

BaseResult = win ? 10 : draw ? 4 : 1
GoalBonus = min(goalsFor, 5) * 0.8
UnderdogBonus = opponentRating > myRating ? min((opponentRating-myRating)/10, 4) : 0
ActiveMultiplier = 1.00
GhostMultiplier = 0.75
RTD = (BaseResult + GoalBonus + UnderdogBonus) * SideMultiplier

Example rewards

OutcomeActive playerGhost opponent
Active wins10-18 RTD0-2 RTD
Draw4-8 RTD3-6 RTD
Ghost wins1-4 RTD7-14 RTD

Near-term utility

Tournament entry, seasonal league registration, limited training actions, and marketplace-style RTD offers for NFTs.

Anti-inflation controls

Energy limits, reward caps, tournament sinks, optional entry fees, and tuning by season.

Future market layer

Players may offer RTD for NFTs, creating game-native demand around role fit, levels, and squad needs.

06 / Operating rules

Transparent rules before production starts.

This page is intentionally written as a shared agreement document for partners, not as marketing copy.

Eligibility and fairness

  • Only wallets holding at least six eligible NFTs can play for RTD.
  • Matchmaking targets squads with comparable Team Power and recent performance.
  • The same opponent should not be repeated too frequently.
  • Saved ghost squads allow gameplay without both players being online.
  • Formula changes should be versioned by season.

Non-custodial boundaries

  • The game reads public wallet ownership and metadata.
  • The game does not request seed phrases or private keys.
  • The game does not mutate NFT metadata.
  • XP, levels, Energy, and RTD accounting are stored in RollTheBall systems.
  • Wallet signatures, if added, should be limited to login verification.

Open parameters before build approval

ParameterDraft valueReason
Energy interval1 per 8 hoursCreates three natural play windows per day.
Mini-matches per Play7Enough variance and narrative without a long session.
Max level10Simple progression ceiling.
Level curveVery slowLevels become meaningful and cannot be rushed quickly.
Entry requirement6 eligible NFTsKeeps the game centered on owned NFT squads.
Initial visual scopeText/data-firstCore value is strategy, ownership, and simulation logic.