Friendships are hard to maintain. So much energy is wasted maintaining friendships that might not actually provide any tangible returns. I find myself thinking “Sure I’ve known her since kindergarten, she introduced me to my wife, and let me crash at her place for 6 months when I was evicted, but is this really a worthwhile friendship?”.

I need to decide which friends to ditch. But what’s the criteria? Looks? Intelligence? Money?

Surely, the value of an individual is subjective. There’s no way to benchmark it empirically, right? WRONG. …


I recently came across this question:

I have a functional React component that computes a value when the component is mounted. After mounting, this value is never updated. Which is the better approach?

const value = useMemo(() => computeValue(), [])

or

const [value] = useState(() => computeValue())

?

And the answer is that they both work, but neither is ideal. Let’s see why.

useMemo

At a first glance, useMemo might seem perfect for this. It only recomputes the value if the list of dependencies (second argument) changes. With an empty array as the dependency list, the value will only be…


You’re a North Korean engineer who’s been selected to develop a new government project. It’s an HTML form, which North Korean political leaders will fill in for [REDACTED] purposes.

One of the fields requires the user to select the title by which they prefer to be addressed. Since the list can get pretty long, you decide to go for your good old <select> element. It looks like this:


Originally posted to blog.bravebunny.co

On the previous part of this series, I mentioned the node.js addon Greenworks. It allows our javascript code to make calls to the Steamworks API, which is basically how we interact with some of the fun stuff Steam has to offer, like:

  • User information
  • Achievements
  • Steam Cloud
  • Steam Workshop

It is a really amazing project, has helped a lot of people, and I’m sure most people (me included) wouldn’t even know where to start if they had to do it themselves. …


Originally posted to blog.bravebunny.co

Since this is a web game, it runs inside a web browser. This obviously doesn’t work for Steam games, so we need a wrapper to make it into an executable.

I went with NW.js, but there are other alternatives, like Electron. I am going to continue refering mainly to NW.js throughout this series from now on, so if for one reason or another you are using a different approach, this information might not be as useful.

NW.js

Right now, we’re only developing for Windows, and I’m not sure if these steps are similar for other systems, but…


Originally posted to blog.bravebunny.co

Our game, Curvatron, was originally conceived as a mobile game with simple touch controls. Some changes had to be made to the way the game works and to how it is presented to make it feel better on PC. These changes would also make sense on consoles, even if we don’t plan on ever releasing a console version.

User Interface

Our initial idea with the user interface was to make everything as simple as possible, with large, round, touch-friendly buttons, using only icons for the buttons, no text at all. The only text on the menus was the…


Originally posted to blog.bravebunny.co

In this series I’ll document the steps taken to get a game made with Phaser up and running on Steam, from the Greenlight process to publishing. This will also include steps to integrate your game with Steam services like leaderboards and achievements.

Keep in mind that the only reason this series deals with the Phaser framework is because that’s the one we used. Most of the steps will be very similar, if not identical, to the ones you’d have to take on another framework. So this isn’t really a general guide but more of a diary…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store