Skip to content

Latest commit

ย 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒ€ Spin Clash ยท ็ˆ†ๆ—‹ๅฐๆฑบ

Growing up in Hong Kong, my friends and I were obsessed with ็ˆ†ๆ—‹้™€่žบ โ€” Beyblade-style spinning tops. You'd build your top, rip the launcher, and scream while two hunks of plastic and metal smashed each other around a stadium.

Then I moved to Singaporeโ€ฆ and couldn't find enough friends to battle with. ๐Ÿ˜…

So I built my own. Spin Clash is a browser game where you assemble a top, pick an arena, nail the ripcord launch, and watch a full 3D physics brawl play out โ€” complete with a roaring crowd, sweeping spotlights, sparks, lightning, and tops getting flung out of the ring.

Made for fun. Now I can battle anytime. XD

โ–ถ๏ธ Play it here โ†’

(Works on desktop and mobile โ€” any WebGL2 browser (Chrome / Edge / Firefox / Safari). Tap once to enable sound. Plays great in portrait on phones. ๐Ÿ“ฑ)


๐Ÿ“ธ Screenshots

Title screen โ€” inside a packed stadium Garage โ€” build your top, watch the radar
menu garage
Launch โ€” stop the bar in the green zone Battle โ€” 3D clash, your top is marked ๆˆ‘ๆ–น
launch battle

๐ŸŽฎ What is this?

A three-minute, build-deep spinning-top battler. You don't pilot the top during the fight โ€” the drama comes from three layers of decisions before the whistle, then a deterministic physics sim plays out your choices:

  1. ๐Ÿ”ง Garage โ€” slot 4 parts (attack ring / driver / weight disc / core chip). Every swap re-shapes your six-stat radar and re-skins that part of the 3D top.
  2. ๐ŸŸ๏ธ Arena โ€” your opponent's style is revealed; pick a stadium that counters it.
  3. ๐ŸŽฏ Launch โ€” choose a technique, then stop the ripcord bar in the green Perfect zone for an opening boost.
  4. โš”๏ธ Battle โ€” sit back and watch. The combat log explains why every hit landed, and your top is always tagged ๆˆ‘ๆ–น (green) so you never lose track of it.

๐Ÿ“Š The six stats (ๅ…ญๅœ)

Each top has six attributes. There's no "max everything" build โ€” every part is a trade-off (a top totals ~150 points).

Stat What it does
ๆ”ปๆ“Š ATK Attack Base damage per collision
้˜ฒ็ฆฆ DEF Defense Reduces incoming damage (diminishing โ€” never zero)
้€Ÿๅบฆ SPD Speed More collisions + dodgingโ€ฆ but burns stamina faster
้‡้‡ WGT Weight Bigger stamina pool, resists knockback & ring-out, low drain
็ˆ†็™ผ BST Burst Crit chance and crit damage
่ปŒ่ทก TRJ Trajectory Dodging and positioning

When a top runs out of stamina (็บŒ่ˆช), it stops spinning โ€” that's a ๆ“Šๅœ loss.


๐Ÿง  Strategy

The counter triangle (็›ธๅ‰‹) โ€” this is the heart of it. Each top has a dominant stat among Speed / Weight / Trajectory:

        ้€Ÿ SPD โ”€โ”€beatsโ”€โ”€โ–ถ ่ปŒ TRJ
         โ–ฒ                  โ”‚
         โ”‚ beats      beats โ”‚
         โ”‚                  โ–ผ
        ้‡ WGT โ—€โ”€โ”€beatsโ”€โ”€  ่ปŒ TRJ

้€Ÿๅ‰‹่ปŒ (speed beats trajectory) ยท ่ปŒๅ‰‹้‡ (trajectory beats weight) ยท ้‡ๅ‰‹้€Ÿ (weight beats speed)

Win the matchup and your hits do ร—1.14; lose it and they do ร—0.88. So a heavy tank shreds a glass-cannon speedster โ€” unless that speedster dodges enough to survive.

Other levers:

  • ็›ธ็”Ÿ (Synergy) โ€” stack a pair of stats high on the same top and you get bonus stats. A balanced 25/25/25 top is the neutral baseline; specialists snowball.
  • ๅฅ—่ฃ (Sets) โ€” match 2 or 4 parts of a set for effects: ็ƒˆ็„ฐ (attack/burn), ็ฃ็Ÿณ (defense/counter), ็–พ้ขจ (speed/dodge cyclone), ๆททๆฒŒ (burst/true-damage).
  • Arenas โ€” ๆจ™ๆบ– (neutral) ยท ๆทฑ็›† Abyss (forces attrition, almost no ring-outs) ยท ้—Šๅฐ Tempest (high friction + easy ring-outs โ€” great for flinging tanks out). A โ˜… marks the recommended counter to your opponent.
  • ๆ–ฌๆฎบ็ทš (Execution line) โ€” a top can only be ๅฝˆ้ฃ› (rung out) or ่งฃ้ซ” (burst apart) once it drops below 20% stamina (the white notch on the HP bar). Above the line it can only be ground down to a ๆ“Šๅœ.

Four ways to win: ๆ“Šๅœ (spin-out, 1pt) ยท ๅฝˆ้ฃ› (ring-out, 2pt) ยท ่งฃ้ซ” (burst, 2pt) ยท ๅˆคๅฎš (decision at the 60s timer, 1pt).


๐Ÿ”— ๅฅฝๅ‹ๅฐๆˆฐ (Friend battle)

No server, no sign-up โ€” just a link. After any battle, hit ๅฅฝๅ‹ๅฐๆˆฐ ๐Ÿ”— on the results screen, type your name, and Spin Clash encodes your current top into a share URL. Send it to a friend: they open the link, see your top as the incoming challenger (ๆ”ถๅˆฐๆŒ‘ๆˆฐ), and build their own to fight back. The whole challenge rides in the link, so it works on any device.


๐Ÿš€ Run it locally

npm install
npm run dev      # http://localhost:5188

Build a static bundle: npm run build โ†’ dist/ (deploys anywhere).


๐Ÿ› ๏ธ Made with

Pure Three.js (WebGL2) + vanilla JS + Vite โ€” no game engine. The tops, arenas, crowd, and all the VFX are procedural (generated in code), and the battle runs on a deterministic 60Hz physics sim that's decoupled from rendering. All sound effects are synthesized with the Web Audio API. Built by me, for fun. ๐ŸŒ€

๐ŸŽต Music credits

Background music by Kevin MacLeod (incompetech.com):

Inspired by Beyblade. Not affiliated with or endorsed by any spinning-top brand.

About

๐ŸŒ€ Spin Clash (็ˆ†ๆ—‹ๅฐๆฑบ) โ€” a browser 3D Beyblade-style battler. Build a top, pick an arena, launch, watch the 3D physics brawl. Three.js + Web Audio, all procedural.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages