Appearance
Arcade › Hoop Rivals
When you score, the ball now **goes through the net** before falling to the ground. The player who retrieves it gets possession, leading to fast-paced gameplay and a more dynamic ball recovery experience. The net reacts realistically, adding to the immersion.
Click the game above and it runs right here in your browser. No download, no installer, no account needed. Clement, Colton built it with Cinevva, so it works on a phone or a tablet too.
Nobody has said anything about Hoop Rivals yet. Play it, then tell Clement, Colton what you would add next.
Hoop Rivals was built by Clement, Colton with the Cinevva game creator: describe the game you want in chat, watch it get built, and play it in your browser minutes later.
Remix Hoop Rivals opens the real game in the creator and forks its actual files, chat and design doc, so you start from the code rather than from a description.
Cinevva's analyzer read this game's design doc and its source, then wrote the brief below. "Make your own" hands it to the game creator as your opening message, so you start from a real spec rather than a one-line idea.
Create a 2D side-scrolling basketball game called "Hoop Rivals" with chunky pixel-art characters and the following features:
**Camera & Perspective:** Fixed side-view of a full basketball court, 960x600 logical resolution. The court spans the entire width with two hoops positioned on the left and right sides.
**Visual Style:** Retro pixel-art aesthetic with 4px-block chunky characters wearing numbered jerseys (#1 blue player, #2 red player). Dark blue gradient sky background (navy to deep purple), glossy orange-brown wooden court floor with diagonal shine lines, white court markings including center circle and three-point arcs. Basketball hoops have gray backboards, orange rims, and white hanging nets with realistic mesh rendering.
**Players:** Two blocky humanoid characters about 62px tall. Blue player (left side, jersey color #e8793f orange-ish) vs Red AI player (right side, jersey color #e85d59 reddish). Characters have visible faces, hair, jerseys with numbers, shorts, and white shoes. Animated walk cycles, jump arcs, and action poses (shooting, layup, dunk, steal, stumble).
**Core Mechanic:** Full basketball gameplay with possession-based ball handling. When a player has possession (indicated by "ballHolder"), they dribble an orange basketball with black seam lines that bounces realistically beside them. The dribble animation shows the ball bouncing from hand height to floor with motion lines during movement.
**Scoring System:** When the ball crosses through the hoop rim from above within 22 pixels horizontally, it triggers a score. The KEY FEATURE: the ball now physically drops through the net with a smooth animation (0.38 second duration) that shows the net deforming, then the ball falls to the ground where it becomes a loose ball. Colored particle burst matching the scorer's jersey color. Scoring adds 1 point and +3 seconds to the game timer. First to 3 points wins, or highest score when 60-second timer expires.
**Controls for Blue Player:**
- A/D or Arrow Left/Right: Move horizontally (max speed ~270 px/s)
- W or Arrow Up: Jump (initial velocity -650)
- E: Shoot - arcing shot toward opponent's hoop with calculated trajectory
- L: Layup - smooth bezier curve animation directly to rim (0.62s duration), player rushes forward
- Q: Slam Dunk - powerful aerial move where player leaps toward rim and follows ball with hang-time at apex
- U: Steal - when within 72px of opponent with ball, steal possession with stumble animation
**Ball Physics:**
- Gravity: 1500 px/s² (reduced to 0.72× for balls in flight)
- Ball radius: 15px with radial gradient shading (yellow-orange to brown)
- Bounces off floor with -0.58 velocity coefficient when speed > 110
- Layups and dunks use parametric curves (bezier-style) rather than physics
- After scoring, ball drops through net animation, then becomes loose ball on ground
- Loose balls can be picked up by either player within 36px touch radius
**AI Behavior (Red Player):**
- Tracks loose balls, active shots, and blue player position
- Attempts blocks when blue shoots (jumps with block cooldown 1.05s)
- Shoots layups when close (<210px to hoop) or regular shots from distance
- Steals when close to blue player with possession
- Has cooldown timers to prevent spam (2.1-2.8s between shot attempts)
**HUD:** Top-center scoreboard with dark rounded rectangle background showing:
- Blue score (left, cyan #4da3ff)
- "HOOP RIVALS" title (center, white)
- Red score (right, pink #fb7185)
- Timer countdown in seconds (center, white)
**On-screen Controls:** Bottom of screen shows labeled buttons in rounded brown rectangles:
- D-pad arrows (left group): Up triangle, Left/Right/Down arrows
- Action buttons (right group): "SHOOT [E]", "LAYUP [L]", "DUNK [Q]", "STEAL [U]"
**Court Details:**
- Floor at y=520 with perspective diagonal grid lines in light tan
- Ceiling lights create radial glow halos in background darkness
- Backboards at 98px (blue) and 862px (red) with glass transparency effect
- Rims at y=292, 24px ellipse width, with 7 vertical net strings hanging 35px down
- Net strings are semi-transparent white (#fff6) with slight curve at bottom
- Rim shakes briefly when ball scores
**Particles & Effects:**
- Scoring burst: 18 particles in scorer's color
- Steal: 10 yellow particles (#facc15)
- Layup launch: 7 yellow-white dash particles
- Landing burst with god mode: 20 yellow radial particles
- All particles have gravity, velocity, and fade-out life timers
**Game Flow:**
- 3.2 second countdown at start ("3, 2, 1, GO!")
- After each score, 0.8s restart timer before next possession begins
- Possession resets to blue player at starting positions after score
- Winner declared at 3 points or when timer reaches 0
- "Press T to rematch" message on game over
- H key opens pause menu, ENTER resumes
**Audio Cues:**
- Swish sound on scoring (volume 0.75)
- Movement sound on jumps, layups, dunks, steals (volume 0.4, 120ms cooldown between plays)
Make the ball-through-net animation smooth and visible, with the net strings reacting to the ball passing through them. The dropped ball should bounce once or twice on the floor before becoming fully stationary as a loose ball that both players race to retrieve. This creates dynamic possession changes and fast-paced "scramble for the ball" gameplay moments.