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 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-08 21:33:41 +00:00
co-authored by Claude Opus 4.6
parent c876998601
commit cc0fb4553a
+25 -4
View File
@@ -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<number, number[]> = {
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()