Skip to content

Latest commit

 

History

History
199 lines (191 loc) · 7.97 KB

TODO.md

File metadata and controls

199 lines (191 loc) · 7.97 KB
  • Extract Preloader component (get from public/index.html)
  • Remove dynamic layout
  • Create script for generating media queries for game page Search: Does media query include scrollbar? Actually, the whole point is to avoid a scrollbar
  • Design game UI screens (new game, pausing)
  • Add user list to GamePanel
  • Design new game state (with Flow types)
    • Put curUser in Redux state
    • Derive playing state from users(status=playing).len
  • Add missing screens for multiplayer flows
  • PIVOT: Turn collaborative Flatris (2-8 players) into competitive 1vs1 Flatris
    • Redesign state and actions
      • Make MOVE, ROTATE, ENABLE_ACCELERATION, DISABLE_ACCELERATION userId based
      • Cancel ADVANCE loop on unmount
      • Disable acceleration on line drop
      • ADVANCE action for current user
      • Remove START/STOP actions
    • Clear onboarding screens (postpone UI this time until game mechanics are confirmed)
    • Update fixtures and tests
    • Add 2nd player
      • Start game when both players are ready
      • Render other player's grid in the background
  • Create server MVP database
    • Split client logic between starting or joining a game
  • Rename state.game to state.curGame
  • Add blocks to other player when clearing lines
  • Bring back "falling" block transition when lines are cleared
  • Transitions when clearing lines
    • Cleared lines should go down (not instantly disappear)
    • Lines from enemy should come up (not instantly appear)
    • getNextCellId(gameState) abstraction
  • Fix concomitant line clearing between players
    • Fix multiplayer test case: Clearing lines that aren't bottom ones
  • Expand memory db to multi games
  • Green/red wall flash when clearing lines (own vs enemy)
  • Earthquake effect when clearing lines
  • Make enemy grid visible on Firefox
  • Add hidden keyboard shortcut for stopping game
  • Clean up server scripts (Keep server with client together in prod, separate in dev)
  • [WORKING PROTOTYPE]
  • Handle wrong game ID with 404
  • Create server-side user sessions
  • Read game (Redux) state from server side in Page.getInitialProps
  • Use HTTP request instead of socket event to create game
  • Load entire game state on load
  • Don't join game if 2 players are already in
  • Create join/:id route
  • Turn sessionId, userId & gameId numbers into hashes
  • Grayscale loading state until JS is loaded
  • Subscribe to game events on game page, once JS is loaded
  • Continue game after hard refresh
  • Add fixtures for all components
  • Add disabled state to buttons (get rid of early exists in handlers)
  • Create "Invite or play" screen
  • Create "Game full" screen
  • Create "Join game" screen
  • Create "Get ready" screen
  • Create "Waiting for other" screen
  • Create "Game over" screen
    • Allow players to restart once game is over
  • Different layouts per device type/orientation
    • No controls on desktop
  • Drop Tetromino on SPACE key
  • Style "Auth" screen
    • When joining
    • When creating
    • Restrict name length
  • Reuse old public assets
    • Add meta tags from old index.html
  • Style GamePanel
    • Show both players' score in game panel
    • Show player READY state
    • New Flatris logo
    • Humanize numbers over 1K
    • Show lines instead of "wins" for single player
    • Make "2P insert coin" clickable
  • Add global score (how many games each player won)
  • Add ability to PING other player
  • Allow users to just watch
  • Onboarding screen
    • Left, right, up, down & space keys for desktop
    • Point to controls
    • Explain Flatris invention: line transferring
  • [ALPHA TESTING] feedback
    • Disable in-game auth after entering 1st time
    • Fade in game screens
    • Generate new Tetromino random sequence per game turn
    • Improve ending UI: Add WON green badge under player name
      • Regression: Change "WON" badge to not block user score
  • Encourage players to play "best x out of y"
  • Disable controls when user isn't playing
  • Side controls on landscape mobile
    • Extract portrait controls out of FlatrisGame
  • Don't request user auth when game is full (allow guests to watch)
  • Add copy to clipboard btn to "Invite or play" screen
    • Show share button when clicking on "2P insert coin"
  • [BEAUTIFUL MVP]
  • Ensure action consistency
    • Create action backfill if user has old state and new actions
      • Create action.id, action.prevId and game.player.lastActionId
      • Store actions on the server
      • Create backfill operation
  • UX: Disable Auth buttons while performing IO
  • UX: Disable buttons while JS is loading
    • 2P Insert Coin in GamePanel
    • screens/Auth name field
    • screens/GameFull Watch
    • screens/GameOver Again
    • screens/GetReady Ready
    • screens/JoinGame Watch and Join
    • screens/NewGame Play and Copy
    • screens/WaitingForOther Ping
  • Add pause & end game state for solo players with invite screen
  • Index page
    • Create reduxState.games
    • List all games
    • Beautiful grid
    • Animating games
    • Strip game effects when going back to index page
    • Push new games to dashboard
    • Remove inactive games
      • Mark inactive after 30 seconds
      • Remove expired after 15 minutes
      • Redirect to dashboard from expired game page
    • Style
      • Style NEW GAME button
      • Add Flatris header
      • Show blank state when no active games exist
      • Fade in fade out transition game previews
      • Highlight already joined games
  • BUG: Broadcast new game to global (without requiring an action)
  • BUG: Reset losses when 2nd player joins
  • Minimize network communication: Don't send noop actions
  • Throttle key down events
  • Profile browser performance (detect unnecessary renders)
  • Redesign onboarding
    • Screen 1: Game intro
    • Screen 2: Multiplayer game
    • Screen 3: Line transferring
    • Screen 4: Controls
  • Custom 404 page
  • Error page (via componentDidCatch)
  • Add empty game shell to Dashboard blank state
  • Link to Github
  • Game footer
  • Disable active Tetromino movement when game over (via mobile buttons)
  • [1.0]
  • Embed Teko font in JS bundle
  • Record stats
    • Store in Firebase (users, games)
    • Count Turns and lines
    • Count actions (left, right, accelerate, rotate)
    • Count time
  • BUG: Gracefully invalidate session after re-deploy
  • Sync game after player disconnect
  • Real time stats page
  • [2.0]
    • Share on HN, PH, Reddit, etc
  • Fix: Polyfill Set/Map https://reactjs.org/docs/javascript-environment-requirements.html
  • Increase speed logarithmically (game currently ends too abruptly)
  • "Paused" state for solo players (useful in dashboard to see if person paused or disappeared)
    • How about "idle" state?
  • Ask for permission to join game
    • "Waiting for permission..." screen
    • "Allow player to join?" screen
    • "Denied" screen
  • End of game screen

BACKLOG

  • Back/home button in end game screen
  • Allow watcher to select current player
    • Show current player visually
  • Don't show onboarding after every deploy
  • Freeze game on player disconnect
  • Create drop shadow from active Tetromino
  • Draw game status
  • Zoom in animation when opening game from dashboard
  • Algorithm for dispatching bundled actions at time interval
  • Sounds

PERF

  • Separate client from server (and run multiple instances of client)
  • Minimize state footprint
  • Batch dashboard actions

CHORES

  • Upgrade to Babel7
  • Extract ReduxActions Cosmos proxy

UX