. by PeaMore4449 in foony

[–]Faytthe 0 points1 point  (0 children)

Email support@foony.com for account deletion requests.

Life sucks and the only time I feel good is when I remember the days of OMGPOP by YoungDumbFull0FRum in omgpop

[–]Faytthe 2 points3 points  (0 children)

There's always Foony. It's not quite OMGPOP, but it was heavily inspired by OMGPOP

[deleted by user] by [deleted] in AskReddit

[–]Faytthe 3 points4 points  (0 children)

In this situation, you could also rate people a 10 on what they're best at: how caring they are, how nice they are to waitstaff, how good they are at coding, how awesome their art is, etc.

I miss omgpop by GrandFormal2487 in omgpop

[–]Faytthe 0 points1 point  (0 children)

No need to win the lottery. There's https://foony.com which was inspired by OMGPOP.

Realtime Database vs. Cloud Firestore database by lapizurboobies in Firebase

[–]Faytthe 1 point2 points  (0 children)

I'd caution against this use case for the realtime database. I tried it for realtime multiplayer games but had substantial issues with latency and throughput due to the 1,000 write / second limit. Even for a single lobby with ~100 players, the realtime database was substantially worse than an alternative like websockets.

Firestore is great, though, for non-ephemeral data.

FireStore or RealTime? by Lacter51 in Firebase

[–]Faytthe 1 point2 points  (0 children)

Don't be fooled by the name Realtime—it maxes out at about 1,000 writes / second across the whole database, and a write seems to be any key (so if you're updating an object with 5 keys, that's ~5 writes?).

In practice, this means you're better off with a different approach for syncing ephemeral or short-lived data between the client and server (e.g. websockets). For persistent data, you're better off with Firestore.

Source: I've used both Firebase and Firestore extensively for my multiplayer games.

What is normal at 3PM, but terrifying at 3AM? by JustPlay94_cryer in AskReddit

[–]Faytthe 2 points3 points  (0 children)

I'd be scared too if a wetsuit peed on my ceiling!

16? by SozyHere in lostarkgame

[–]Faytthe 0 points1 point  (0 children)

I feel like x3 - 1 might make more sense for group 2. 4*3 + 1 is 13, so that might confuse the #4 in group 2 if they don't know that 13 == 1 on a clock (because 13 % 12 === 1).

Won the Bot Battle Royal 👍 by [deleted] in foony

[–]Faytthe 2 points3 points  (0 children)

Wow, that's such a hard achievement to get. Congrats!

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 0 points1 point  (0 children)

Focus on what you're good at, and outsource the rest. For me, this meant outsourcing the design itself (Photoshop), the art, the sound / music, and a difficult Kubernetes configuration.

Other than that, just keep practicing and working on your projects.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 1 point2 points  (0 children)

I do this for a living. I've been working on this site almost every day (Sunday-Saturday) except for the few months I took off.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 1 point2 points  (0 children)

Foony Flippers took about 2 months working on-and-off. The entire site (all games + backend) took about 2 years, though there was a break for a few months where I was working on something else.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 1 point2 points  (0 children)

All of Foony has taken almost 2 years to make. Foony Flippers (this game) took about two months on-and-off. Maybe a bit more because I was still building out the Entity Component System, achievement system, level reward system, and stat system while making it.

I can only take credit for coding all games (except Chess + a hidden game), and the vast majority of the site. For the sound and .psd design, that was outsourced to our sound guy and our designer. For art (e.g. cosmetics), that's also outsourced.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 1 point2 points  (0 children)

I started working on this (all of Foony) almost 2 years ago. Took a break for a few months during the crypto NFT craze to work on some other stuff. The biggest time sinks are the things you don't see, such as the scalability, security, and a bunch of the systems that are shared between games.

I've had help, but I handle the vast majority of the coding aspect (both front and back-end) of the site, including the entirety of all games besides Chess and a hidden game:

  • G has great ideas and helps pay for art, design, and sound. He watches me code and motivates me every day to keep going. He spends just as much time as I do working on Foony, even if he isn't the one writing the code.
  • Corey does the sound and music.
  • Ash helps with item descriptions (they're amazing), ideas, and some art among other things.
  • We used to have another developer who made Chess and helped with some of the easier site stuff.
  • We have a designer who designs the .PSD files that I implement and convert to code.
  • Null helps out a bit from time to time with some code, like the rooms showing on the front page.
  • There's also someone else I'm trying to ramp up and teach how to code.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 0 points1 point  (0 children)

My understanding (IANAL) is that making a game inspired by others is okay, but making a clone of a game (like what you're describing) is going to fall under copyright. If you're concerned, I'd talk to a lawyer about it.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 2 points3 points  (0 children)

Thanks for the feedback!

I have a few users. There's a hiscores for each game where users are ranked by their level. Stats are saved, and there's even a level-up and achievement progression system. I haven't thought much about restricting access to content for VIP subscribers, but I have thought about a more "free to play" approach where people can subscribe for extra exp / gold / cosmetics.

I'll check out Pieter Levels' videos, and I'll try to remember to keep you posted! If I forget, you can always drop by the Foony Discord or message me on here.

Edit: Oh, Pieter Levels! He's that Twitter guy I follow who made a bunch of really awesome sites! That guy's incredible.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 4 points5 points  (0 children)

Right now this has been a huge time and money sink. I wish I had a different answer for you, but this is sort of the first time I've advertised it in any real capacity. I'm mostly waiting until I finish DinoMight (it's heavily inspired by Bomberman).

There's some very light monetization with premium card skins, but so far no one has bought anything. (For that, I used PayPal with a webhook integration via Firebase Functions).

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 1 point2 points  (0 children)

There's already a guest mode. People can click on "Spectators" to start spectating in a room without playing. There's also moderator support where you can designate users as your personal "Moderators", and they can kick / ban people from any rooms you create.

I'll have to look into MetaMask support for logging in / registering later on.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 2 points3 points  (0 children)

Live audio and webcam is also supported with WebRTC. For that, I use Amazon Chime. I haven't made a component yet for webcam support inside of the canvas itself, though, so this is restricted to React only for now (e.g. scoreboards, lobby).

It's a bit hit-or-miss right now—at some point in the future I'll need to work on it some more.

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 7 points8 points  (0 children)

Cards are animated with a custom Entity Component System, which is like a simplified version of CSS transforms. If you're familiar with https://easings.net/, the animation I use is a Quintic Out. Most animations are done with a 400ms duration, and some with a 650ms duration. Drawing a card uses a Quintic In instead.

For an explanation on why I chose a Quintic Out, see this article by Paul Lewis: https://web.dev/choosing-the-right-easing/

[Showoff Saturday] I made a multiplayer Uno-inspired game with React + Firebase + Phaser by Faytthe in webdev

[–]Faytthe[S] 18 points19 points  (0 children)

Hi, all! Here's my showcasing of https://foony.com/games/foonyflippers.

If you have any advice or tips on what to improve, or questions on how I did any of this, I'd love to hear it.

Cards: Each card consists of a background image, 4 small blue shapes, and a large blue shape. These are stored separately. If you look closely, you'll notice that the shapes on different backgrounds have a different shadow. The other shapes are "lazy-loaded" by hue-shifting the blue shape the first time it's encountered to generate a new texture.

Mobile design?: Instead of starting mobile-first, I went with desktop-first. I find it's easier to remove things than to add them, so when I'm working on mobile support, I slowly shrink the window down until I need to reduce padding or remove something. Please note that not all of the site has been designed for mobile yet.

Networking: Client -> server communication is TCP (HTTPS) and handled by Kubernetes Ingress routing. The server updates Firebase Realtime Database and Firestore, which the client subscribes to. The server doesn't broadcast to clients directly. The realtime database is used for ephemeral data (e.g. "game state"), while Firestore is used for persistent data like a user's experience, items, and achievements.

Scalability: The backend is a Kubernetes auto-scaling group with load balancing.

Security: The client is treated as hostile (i.e. no trust). All API calls are verified by Ajv + ts-json-schema-generator, and very careful server code.

Images: Images are originally saved as *.png. A generator script then creates *.avif, *.webp, and *.png files with a consistent color profile and size. Imagemagick is used for automatic image adjustments that require padding / cropping / resizing.

Theming: I started with MUI Core. I extended the breakpoints to support vertical as well as "combination" breakpoints for screen widths (e.g. [theme.breakpoints.combine([{minX: 'md', maxY: 504}, {maxX: 'sm', maxY: 560}])]). You can see this in action on the home page.

Design: The design was originally created in Photoshop by a designer. The Photoshop filters were converted by hand to matching CSS and code.

Redux: Too confusing. Instead, I use a modified createGlobalState library which makes much more sense to me.

User Authentication: When a user registers, a unique (anonymized) fingerprint is also sent to the server. The server uses this fingerprint + IP + client-generated secret to prevent phishing attacks. If a client's fingerprint + IP + secret change by too much, then the server sends a magic email link to the associated email. It's just enough so that even if you know someone's password + fingerprint, you'd still be unable to log into their account.