A 99-player last-bird-flapping battle royale

Related tags

Games flappy-royale
Overview

Flappy Royale

A HTML5 Game, built to be embedded in apps using Phaser 3.

Setup

Clone, and run yarn install, run yarn start to load up into the app:

cd flappy-battle
yarn install
code .
yarn start

To build this app you will need access to our assets git submodule, I'm afraid we're not giving out access to that. So, think of this as a resource for learning from and not really for sending PRs to. Sorry, but games are just too easily cloned when the bar is that low.

Key Tech

To grok the codebase entirely, you'll see:

  • Phaser 3
  • TypeScript
  • Webpack
  • Firebase (DB/Functions/Hosting)

Deploy

  1. Running yarn build will create a dist folder, which is the game statically compiled.
  2. Running yarn deploy will:
  • Update all functions
  • Compile your app in webpack
  • Ship the webpack build to firebase hosting

Microsite

The site for the app lives inside the web/ folder.

Comments
  • Change

    Change "lives" icon in trial mode to a heart

    I wonder if it might make sense to completely kill the ghost birds, and the top-left "what position you are!" display for Daily Trial.

    I feel like it'll help differentiate the two modes, making trial feel more like a quiet personal high score thing, as opposed to a thing you're doing with other people. From a conceptual standpoint, it also helps drive home the Royale idea that a ghost bird is an actual real live human player, since we don't really pretend in Trial mode that the ghosts are live.

    Thoughts?

    opened by lazerwalker 10
  • Add

    Add "link with Game Center / Google Play" option in settings

    Would be very little integration work (a single PlayFab method, plus either a little custom native work or integrating PlayFab native SDKs), and would give us profile syncing across devices for free.

    Low-priority, as we don't currently properly support tablets, but /shrug

    opened by lazerwalker 8
  • Let iOS app work (or

    Let iOS app work (or "work") if the user has never had internet access

    Once #19 is done, we'll cache downloaded builds of the game.

    But if the user opens the app for the first time with no network connection, right now nothing will happen.

    Two options:

    1. We include a cached build of the game they can play

    2. We display a dedicated screen saying "hey, you need network connection to get the latest data" and don't let them do anything.

    I thiiink the latter makes more sense, it'll be easier and I'm okay saying we dont' care about this usecase too much.

    opened by lazerwalker 8
  • Invalid name entry should show some text

    Invalid name entry should show some text

    When we reject your name (too short / inappropriate / eventually because it's already taken), we should show a text reason instead of just outlining the box red.

    Just the color isn't great for accessibility, plus more possible reasons = more confusing.

    opened by lazerwalker 7
  • Think about how to improve performance for

    Think about how to improve performance for "laggy" clients (predominantly low-end Android phones)

    Our Play Store ratings are crappy, and a lot of the written reviews complain about how laggy the game is. Presumably we're not going to spend time optimizing the game (other than maybe #200), but just upping the minimum OS version we support might be effective at filtering for only allowing newer devices that have a better chance at a baseline of performance.

    Not sure how I philosophically feel about this. Assuming we aren't actually going to make the game perform well on shitty phones, there's a conceptual question about whether we should just let people try anyway, or actively say "no, the experience doesn't meet our bar".

    needs Android device 
    opened by lazerwalker 7
  • Put in hooks to ask the user to rate the game on the iOS App Store

    Put in hooks to ask the user to rate the game on the iOS App Store

    We don't need to figure out the logic of when to show it now, but it probably makes sense to thread through an API to JS so that we can push this later without an app update.

    (to throw out a logic proposal: if you've played at least 10 games, and hit a personal best score in either Royale or Trial, or after 30 games if neither of those has happened)

    done except for Android 
    opened by lazerwalker 7
  • Add death screen for Trial mode

    Add death screen for Trial mode

    Besides your score/ranking, we want to make a big deal out of you losing a life.

    We probably also want a big "play again" button. (We arguably also want this for Royale mode?)

    opened by lazerwalker 7
  • Test/tune haptics on Android

    Test/tune haptics on Android

    The web vibration API isn't supported in Mobile Safari, so we probably want to build our own Swift API and expose it in the WKWebView.

    It's supported in Android Web views; TBD how we want to handle that.

    needs Android device 
    opened by lazerwalker 7
  • Royale names are sometimes undefined

    Royale names are sometimes undefined

    Places to check:

    • Look in Playfab to see if we have users with no displayname set
    • Check in the client if there's some reason we'd be rendering 'undefined'
    • Check the replay upload and migration scripts to see if there's some way we'd be setting bad data
    opened by lazerwalker 6
  • Find some way to debounce or otherwise reduce false positives for share button

    Find some way to debounce or otherwise reduce false positives for share button

    I think if you die and tap rapidly it shouldn’t activate the share button That accidentally comes up a bunch because it’s where my finger was while I was tapping

    h/t @doctorpangloss

    opened by lazerwalker 6
  • Move away from PlayFab inventory

    Move away from PlayFab inventory

    Playfab free tier has a limit of 100 on any individual user's inventory.

    We can store what inventory they've unlocked in a JSON blob in UserData, which we have a ton of. We're already fetching UserData in many places, so this won't incur extra network traffic.

    I think this is technically client-writable, which means it's easier for users to fake this. There maybe a way to turn that off.

    Definitely do this for actual unlocked inventory. We might be able to get away with leaving unopened eggs as consumable items, but then we need to make sure we're sweeping away old eggs.

    opened by lazerwalker 5
  • Migrate all server-related things from Firebase to Azure

    Migrate all server-related things from Firebase to Azure

    • [x] Rewrite functions to use Azure Functions, deploy to Azure, test they work
    • [x] Remove references to Firebase in the main codebase, and update URLs
    • [x] Confirm access controls mean the seed JSON files are publicly-downloadable
    • [x] Stop the new functions from blowing up the non-function compilation pipeline with tsc errors
    • [x] Manually test updateAttire function
    • [x] Manually test openConsumableEgg function
    • [x] Figure out how to give Orta access to the Azure resource groups
    • [x] Port server tests over
    • [x] Confirm that the migration script properly works
    • [x] Do a one-time migration of JSON data for the hourly seed downloads
    • [x] When https://github.com/PlayFab/NodeSDK/issues/105 is fixed, remove npm / git submodule hack from functions dir
    • [x] Fix Azure Function CLI deploy to deploy functions AND migration task
    • [x] Add Azure Function deploy command to top-level package.json
    • [x] Set up Azure static site hosting for both staging and prod
    • [x] Remove all traces of Firebase from codebase
    • [ ] Figure out why iOS app has a white border around the game when pointed at the Azure-hosted version
    • [ ] Figure out why Azure static site hosting requires me to go to flappyroyale.io/prod/index.html instead of flappyroyale.io/prod/ (which is important, since the former would require us to push out new builds of the native apps via the App Store / Play Store)
    • [ ] Build and manually test Android app
    • [ ] Test Azure CDN right after a deploy to make sure our cache-busting strategies are working
    • [ ] Move DNS records for both staging and prod
    • [ ] Merge everything into master
    • [ ] Maybe: download all firehose bucket data from Firebase, potentially upload to Azure firehose bucket
    opened by lazerwalker 2
  • Audit our current Prompt() usage, switch ones over to HTML prompts that should be

    Audit our current Prompt() usage, switch ones over to HTML prompts that should be

    Previously, all modal prompts were Phaser scenes that couldn't be displayed over HTML forms, so there are a bunch of prompts (e.g. in the royale lobby if you have no lives) that would, on triggering them, take you to a fake main menu screen that just showed the prompt.

    We now have proper HTML-enabled modal prompts, so we can switch all these over.

    things tentatively on Em's plate before new job 
    opened by lazerwalker 0
Owner
Flappy Royale
Let's give it wings, and throw it through some pipes
Flappy Royale
swift implementation of flappy bird. More at fullstackedu.com

FlappySwift An implementation of Flappy Bird in Swift for iOS 8. Notes We're launching a course Game Programming with Swift If you are interested in e

newline (formerly Fullstack.io) 9.5k Dec 29, 2022
Flappy Bird in Swift

FlappySwift An implementation of Flappy Bird in Swift for iOS 8. Notes We're launching a course Game Programming with Swift If you are interested in e

null 0 Oct 30, 2021
Cloud Jumpers is a competitive 1-4 player platformer game for iPadOS, jumping through clouds and be the winner!

Cloud Jumpers Overview Cloud Jumpers is a competitive 1-4 player iOS platformer game. There are power-ups, different game modes, kill mechanics, and m

The Cloud Jumpers Development Team 5 Nov 5, 2022
This is a game in which the player has to match cards with the correct pair.

This is a game in which the player has to match cards with the correct pair. When they are paired, a funny record of a Peruvian influencer is played. Made with Swift and SwiftUI.

Augusto Galindo Ali 6 Jun 21, 2022
SGS Last Punch - SGS 2021 Dev Camp 2nd Team Last Punch

Snack 여러 협업 툴을 사용하면서 새 창을 키거나 알트탭은 그만! Slack과 Notion의 기능을 합친 Snack으로 쾌적한 협업을 경험해

Jihyo Kim 10 Oct 20, 2022
CRRateLimitTester - Simple Clash Royale Rate Limit Tester Written Using HummingBird and Swift

CRRateLimitTester Simple Clash Royale Rate Limit Tester Written Using HummingBir

Mahdi Bahrami 0 Jan 16, 2022
AudioKit Sample Player (ROM Player) - EXS24, Sound Font, Wave Player

AudioKit ROM / Sample Player Welcome to the official AudioKit example of a sample-based music instrument written in Swift. It can be modified to play

AudioKit 500 Dec 27, 2022
Tame async code with battle-tested promises

Then Reason - Example - Documentation - Installation fetchUserId().then { id in print("UserID : \(id)") }.onError { e in print("An error occur

Fresh 963 Jan 3, 2023
COVID Safe Paths (based on Private Kit) is an open and privacy preserving system to use personal information to battle COVID

COVID Safe Paths is a mobile app for digital contract tracing (DCT) sponsored by Path Check a nonprofit and developed by a growing global community of engineers, designers, and contributors. Safe Paths is based on research originally conducted at the MIT Media Lab.

PathCheck Foundation 470 Nov 6, 2022
🐦 Flappy Bird reincarnation [Swift 5.3, GameplayKit, SpriteKit, iOS 12].

?? Flappy Bird reincarnation [Swift 5.3, GameplayKit, SpriteKit, iOS 12].

Astemir Eleev 290 Dec 27, 2022
swift implementation of flappy bird. More at fullstackedu.com

FlappySwift An implementation of Flappy Bird in Swift for iOS 8. Notes We're launching a course Game Programming with Swift If you are interested in e

newline (formerly Fullstack.io) 9.5k Dec 29, 2022
iOS app which uses the Moves API to visualize which places you spent the most time at in the last seven days.

Places Places uses the Moves API to visualize which places you spent the most time at in the last seven days. It runs on iOS 7 only and you need to ob

Boris Bügling 43 Feb 9, 2022
swift implementation of flappy bird. More at fullstackedu.com

FlappySwift An implementation of Flappy Bird in Swift for iOS 8. Notes We're launching a course Game Programming with Swift If you are interested in e

newline (formerly Fullstack.io) 9.5k Dec 29, 2022
Flappy Bird in Swift

FlappySwift An implementation of Flappy Bird in Swift for iOS 8. Notes We're launching a course Game Programming with Swift If you are interested in e

null 0 Oct 30, 2021
MathEagle is named after the golden eagle, since this is the fastest bird in the world

Swift-MathEagle MathEagle is named after the golden eagle, since this is the fastest bird in the world (in horizontal flight). This project is meant t

Rugen Heidbuchel 40 Jul 9, 2022
The alternative last.fm client for iOS made with SwiftUI

first.fm - The alternative last.fm client for iOS (it's actually not available on the App Store... yet) Features Your profile (top artists, tracks and

Stanislas 22 Aug 22, 2022
A simple Last.fm client for iOS

vinylogue for Last.fm Vinylogue is a simple Last.fm client for iOS that shows you and your friends' charts from previous years. App Store (it's free).

Chris Trott 112 Dec 18, 2022
Reverie is a work-in-progress iOS app that displays your Last.fm scrobbles for each past year, for the current date.

Reverie is a work-in-progress iOS app that displays your Last.fm scrobbles for each past year, for the current date.

Dan Williams 1 Jan 31, 2022
Music Player for iOS which looks & feels like classic player

Prodigal Music Player APP looks and feels like a classic device. Bring back the good old player to life. Screenshots Home Page Album Gallery Home Page

bob.sun 40 Nov 11, 2022
Musical Player - A Simple Musical Player For iOS

Musical_Player The app is a musical player. It was written as an task for a mobi

null 1 Nov 26, 2022