From cc0fb4553a1492668e9d6ecb8f85b45fa7f7ef02 Mon Sep 17 00:00:00 2001 From: Dorian Date: Sun, 8 Mar 2026 21:33:41 +0000 Subject: [PATCH] feat: tier-gated entrance animations Tier 0-1: simple entrances (skateboard, backflip, ice slide, moonwalk). Tier 2: + vehicles (car, shopping cart, girlfriend, bouncer). Tier 3: + dramatic drops (space fall, helicopter, underground, parachute). Tier 4: + teleport/effects (portal, lightning, jetpack, crowd surf). Tier 5+: all entrances including spotlight, robe, cannon. THE CREATOR golden portal entrance unchanged. Co-Authored-By: Claude Opus 4.6 --- frontend/src/game/FightScene.ts | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/frontend/src/game/FightScene.ts b/frontend/src/game/FightScene.ts index 570ec64..7fb7e44 100644 --- a/frontend/src/game/FightScene.ts +++ b/frontend/src/game/FightScene.ts @@ -9899,10 +9899,31 @@ export async function createFightScene(config: FightSceneConfig) { rainDrops.forEach(r => { if (r.exists()) r.destroy() }) } - // Pick random entrance for each bot (different ones) - const idxA = Math.floor(Math.random() * entrances.length) - let idxB = Math.floor(Math.random() * entrances.length) - while (idxB === idxA && entrances.length > 1) idxB = Math.floor(Math.random() * entrances.length) + // Tier-gated entrance pools — higher tiers get access to more dramatic entrances + // Tier 0-1: simple walk-ins and slides + // Tier 2: + vehicles and dust-trail entrances + // Tier 3: + dramatic drops from above with screen shake + // Tier 4: + teleport/lightning/portal effects + // Tier 5+: + spotlight/robe/cannon (full dramatic) + const tierPools: Record = { + 0: [6, 9, 11, 13], // skateboard, backflip, ice slide, moonwalk + 1: [6, 9, 11, 13], + 2: [0, 3, 6, 9, 11, 13, 14, 17], // + car, girlfriend, bouncer, shopping cart + 3: [0, 1, 3, 4, 6, 9, 10, 11, 12, 13, 14, 17], // + space fall, helicopter, underground, parachute + 4: [0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], // + teleport, jetpack, portal, lightning, crowd surf + 5: [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], // + robe, spotlight, cannon (all) + } + + function pickTierEntrance(tier: number): number { + const pool = tierPools[Math.min(tier, 5)] || tierPools[0] + return pool[Math.floor(Math.random() * pool.length)] + } + + const idxA = pickTierEntrance(botA.tier) + let idxB = pickTierEntrance(botB.tier) + // Avoid same entrance for both fighters when possible + let attempts = 0 + while (idxB === idxA && attempts < 5) { idxB = pickTierEntrance(botB.tier); attempts++ } // Play entrances with slight stagger — creator always gets special entrance announceDeepIntro()