Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

TOWER OF TIME!

Shared-tower block stacking for Roblox — the arcade stacker genre rebuilt as pure property-tested laws: trim-to-overlap survival with an exact zero-contact collapse boundary, perfect-snap drops that restore width, streak-chained multipliers, and a monotone capped swing speed.

Core loop

  1. A neon block swings over the tower's top; click (or DROP!) to land it.
  2. Only the overlap with the block below survives — sloppy drops shrink your platform toward oblivion; EXACTLY zero contact topples the tower.
  3. Land within the perfect threshold to snap dead-center and RESTORE width. Chain perfects: each consecutive one raises the multiplier, capped at x25. One sloppy drop resets streak AND multiplier.
  4. The swing speeds up every floor (capped so it stays humanly reactable). Topple and the whole server's tower resets after a short victory lap.

Property-test contracts

  • Trim law: survivors are EXACTLY the overlap interval — width is min(rights) − max(lefts), center is its midpoint (verified inside the below-block across 300 random drops); landing requires STRICTLY positive overlap — edges kissing at exactly zero collapses; widths never go negative.
  • Perfect law: judgment is boundary-exact at ±PerfectThresholdStuds; snapped centers are EXACT (the below-block's center verbatim); restored width never exceeds the initial width — perfect play keeps the tower at full width forever (50-floor invariant).
  • Streak law: consecutive perfects increment by exactly 1 with the multiplier chaining 1 + streak up to the hard cap of 25; any non-perfect resets BOTH to exactly 0/1; garbage-negative streaks clamp defensively.
  • Speed law: swing speed grows monotonically per floor, hard-capped at MaxSwingSpeed (verified to 200 floors and at 100000); negative floor counts clamp to base speed.

Implementation catches

  • Three functions referenced before their locals existed would have hit nil-globals mid-game — caught in review, forward-declared.
  • The layer registry initially looked its part back up by name from the workspace (FindFirstChild("Layer"..n)) instead of using the placed part returned directly — fragile aliasing removed.

Layout

src/shared/     Config + StackMath (trim/perfect/streak/speed laws)
src/server/     Remotes + StackService (server-owned swing position,
                authoritative verdicts)
src/client/     Network + stats/feed/DROP button HUD
tests/          lune headless specs (12) incl. 300-drop trim sweep

Commands

lune run tests/run_tests.luau      # unit tests
lune run tests/syntax_check.luau   # compile-check all sources
rojo build -o tower-of-time.rbxlx  # validate project mapping
rojo serve                         # live-sync into Studio

CI runs tests, syntax checks, and a Rojo build on every push.

Known gaps (v0.1)

  • Shared single tower (co-op style); per-player towers with leaderboards are the roadmap
  • No falling-block physics drama beyond unanchoring on collapse
  • No Studio playtest yet (human dependency)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages