Game designer at Naughty Dog, software engineer, Canadian abroad
658 stories
·
30 followers

Proterozoic Rocks

2 Shares
These rocks are from a time before eyes, brains, and bones, pieces of a land warmed by an unseen sun.
Read the whole story
Gangles
13 days ago
reply
Santa Monica, California
Share this story
Delete

Google Is Shutting Down Its URL Shortener, Breaking All Links

2 Shares

Sumit Chandel and Eldhose Mathokkil Babu, writing for the Google Developers blog:

In 2018, we announced the deprecation and transition of Google URL Shortener to Firebase Dynamic Links because of the changes we’ve seen in how people find content on the internet, and the number of new popular URL shortening services that emerged in that time. This meant that we no longer accepted new URLs to shorten but that we would continue serving existing URLs.

Today, the time has come to turn off the serving portion of Google URL Shortener. Please read on below to understand more about how this will impact you if you’re using Google URL Shortener.

Any developers using links built with the Google URL Shortener in the form https://goo.gl/* will be impacted, and these URLs will no longer return a response after August 25th, 2025.

How much money could it possible cost to just keep this service running in perpetuity? Tim Berners-Lee wrote his seminal essay, “Cool URIs Don’t Change” back in 1998. It’s bad enough when companies go out of business, taking their web servers down with them. But Google isn’t struggling financially. In fact, they’re thriving.

Read the whole story
Gangles
123 days ago
reply
Santa Monica, California
Share this story
Delete

Balatro & Auto Chess

1 Share

A composite screenshot of two games. On the left, Teamfight Tactics with a grid of characters. On the right, Balatro with several playing cards and jokers.

Like many other game designers with a systems bent, I have spent copious enjoyable hours this year with the breakout indie hit Balatro. It’s usually described as a “poker roguelike”, which is a perfect logline for onboarding curious new players. Framed this way, it makes sense that it often invites comparison to Slay The Spire, another hugely popular deckbuilding roguelike.

It’s therefore ironic that the developer’s primary inspiration was not poker, but rather a Cantonese card game called Big Two. Furthermore, LocalThunk has stated that he drew initial inspiration from the score-chasing roulette game Luck Be A Landlord, but otherwise intentionally avoided playing other roguelikes during development. This often makes Balatro feel mechanically distinct from other roguelikes, since it does not always converge on the consensus “best practices” in the genre.

Seeing the game this way led me to an offbeat hypothesis. In returning to first principles on a deckbuilding roguelike, I believe Balatro’s design had a sort of convergent evolution towards a different game genre. A genre where players also seek synergies while drafting an evolving build, banking funds is rewarded with interest, risk mitigation is a fundamental skill, and the winner must survive multiple structured rounds with escalating stakes.

That genre is “auto chess”, which exploded in 2019 with the release of the popular mod Dota Auto Chess1. While there are many thriving games in the genre today, the one I’m most familiar with is Teamfight Tactics (TFT), which uses the game engine and characters from League of Legends. Riot’s president of esports claims it is “the number one strategy game in the world” in terms of popularity. For the sake of this comparison I will use it as representative of the wider auto chess genre.

Structurally, both Teamfight Tactics and Balatro always progress through an ordered structure of stages (antes) and rounds (blinds). The games are divided between the core phase (champions autobattling or playing poker hands) and the deckbuilding phase (drafting champions or buying jokers). The player’s performance in the core phase generates the currency for the deckbuilding phase. Both games also feature special rounds scheduled at the end of each stage (a carousel draft or a boss blind).

Note that, unlike Balatro, modern roguelikes do not usually follow this kind of regular sequence. Most have instead structurally converged on Slay The Spire’s randomly generated branching adventure map. Furthermore, it’s uncommon for deckbuilders to use currency for drafting; most favor the simpler “choose one from three options” mechanic.

More conspicuously, Balatro shares interest as a mechanic with auto chess: players receive additional currency at the end of each round for each $5 they’re sitting on, like interest in a bank account. This is an exceedingly rare mechanic in video games more broadly, even in the strategy genre. It suggests to me that the designers of both games had a similar need to incentivize conservative purchasing decisions. Otherwise, the player’s existential drive to win each round would discourage them from sitting on unproductive money. The interest mechanic rewards players who just barely win each round, leaving the remainder of their unspent resources to grow.

In terms of drafting, champions in auto chess and jokers in Balatro provide specific roles within a build. TFT gives buffs for stacking several champions of the same class and origin, and generally rewards balancing combat roles (tank, damage, healer). Balatro players can seek to maximize their score engine by assembling +Chips, +Mult, and ×Mult rewards across multiple jokers, ideally with significant overlap in their trigger conditions.

A tactical element of both games is the power curve of certain champions and jokers. To survive the early rounds, a player needs to draft for things that provide immediate value and tempo. Cheap $1 and $2 champions carry the early rounds in TFT. Similarly, jokers like Ice Cream and Popcorn provide immediate value, but decrease in potency after each round. As the game progresses to later stages, players need to pivot their build towards scaling power2. Managing this transition is a major skill element in both games.

Another shared strategic element is the ability of players to viably target “high” or “low” builds. For instance, an obvious strategy in Balatro is to build around high-value hands such as Flush and Straight. However, there are also competitive strategies for building around the lowest hand possible: High Card. Similarly, there are team compositions in TFT that seek to level up stacks of $2 champions, and others that count on turning out a $5 hypercarry.

Having a broad range of meta builds gives skillful players the opportunity to adjust their strategy on the fly based on the luck of the draft. Additionally, both games have mechanics that disincentivize relying on the same build every run regardless of circumstance. In TFT, all players are drafting from the same pool of champions. If another player is attempting the same team composition, those champions will get snatched up and become harder to find. Skillful TFT players can use this information to their advantage, pivoting their build towards undervalued champions.

In Balatro, the boss blinds create a similar dynamic. For instance, in the first week of the game’s release, the most popular strategy was to build a single-suit Flush deck. However, savvy players noticed that this choice was risky; there are four different boss blinds that each debuff a particular suit, which hard counters this build3. The philosophy that “a burnt hand is the best teacher” coaxes players to mitigate risk and integrate a secondary strategy into their drafting.

Screenshot of Balatro. The joker card Pareidolia is hovered, showing the text: All cards are considered face cards. The boss blind is The Mark: All face cards are drawn face down.

I have read and listened to several developer interviews about Balatro, and LocalThunk has been very open about his process and design values. I firmly believe that the similarities to auto chess that I’ve established here cannot be attributed to direct inspiration. Rather, I believe there are certain game design patterns that emerge organically when seeking to craft a particular kind of experience. Perhaps we’re all following these ley lines of game design, unwittingly tracing some underlying truth of mathematics and systems.

1. Another connection: Dota Auto Chess was also inspired by a Chinese board game: Mahjong.
2. Balatro even plays with this as a difficulty element: adding “Eternal” stickers to jokers so they cannot be sold is a significant challenge.
3. LocalThunk discusses this design choice in detail in an interview on the podcast “Eggplant: The Secret Lives of Games” around the 20 minute mark.

Read the whole story
Gangles
136 days ago
reply
Santa Monica, California
digdoug
131 days ago
Balatro absorbed me like few games have for a solid month. It felt like oldschool CIV2 or XCOM days. I dreamed in gameplay
Share this story
Delete

Saturday Morning Breakfast Cereal - Cortex

1 Share
Read the whole story
Gangles
136 days ago
reply
Santa Monica, California
Share this story
Delete

All I want for Christmas is a negative leap second

1 Share
Blog » I just want to see it. Just once. I want to watch that earthquake ripple through all of global electronic timekeeping. I want to see which organisations make it to January morning with nothing on fire. You know what a leap second is. The short version is that planet Earth is a terrible clock. I love leap seconds. I love the unsolvable problem which birthed leap seconds, I love the technical challenge of implementing leap seconds, I love that they are rare and delightful and that they solve a problem, and I love that this solution is hugely irritating to a huge number of people who have more investment in and knowledge of time measurement than I do. It is a huge hassle to deal with leap seconds and I love that there is no universal agreement on how to deal with them. What should Unix time, for example, do during a leap second? Unix time is a simple number. There's no way to express 23:59:60. Should it stall for a second? Should it overrun for a second and then instantaneously ...
Read the whole story
Gangles
139 days ago
reply
Santa Monica, California
Share this story
Delete

Inbox ten

1 Share

I pride myself on being quick to respond to messages and my colleagues often express surprise at how up to date I am on information that has been sent to me. I do this because I am an information worker. If you are reading this there is a good chance that you are, too. And to be effective in these roles you need to actively and ruthlessly maintain your information ecosystem.

In our line of work we create value when we generate new code, or designs, or any other form of idea. But no sufficiently ambitious idea lives in a vacuum. Ideas only make sense in the context of other work done by other workers. Ideas are constantly in competition with others in the marketplace. Being informed about the context and market for our ideas is as important to our success as the ideas themselves.

Your ability to be effective is a function of your ability to efficiently ingest the information around you. Without this you have no chance of synthesizing something valuable. And this is why you end up plugged into vast communication networks of email, messages, slacks, chats, posts, video calls, all-hands, meetings, and any number of other channels.

In information work the cardinal sin is to block another team. You are one person and they may be many which means every second wasted risks being multiplied. We should all aspire to develop reputations of increasing leverage.

On the other hand, if you aren’t careful you could spend the whole day unblocking others only to find you haven’t made any progress of your own. You cannot allow the urgent to overtake the important and many of these channels convey only the urgency of a task.

How do you stay informed and advance your own work while also keeping others informed so they can do the same?

1/ Have A System for managing your communication across all channels.

No single system for managing communication is inherently better than another, it is just a matter of what works for you. The properties of a system that is working well for you:

  • You feel well informed and rarely hear new information secondhand.
  • If you do get information later than would have been useful, you debug what channel you weren’t in and amend your systems to prevent it from happening again.
  • You feel the communication you consume is high signal and reading it is a good use of time.
  • If you have just consumed information that is noisy, figure out how to eliminate it from that channel in the future. Do this in real time as the action to be taken on that item. You can unsubscribe, set up inbox rules, or give feedback to the author.
  • You instinctively know what channel to use to send a message given your goal and audience.
  • If you aren’t getting timely responses or thoughtful ones you may need to reconsider. But also do not abuse high urgency channels like chat when the content does not merit it.
  • You feel in control of your time and attention and you don’t allow others to hijack it.
  • You confidently redirect them to the proper channel. For example I often respond to chat messages that are not urgent with a simple “Thanks, please email this to me and I’ll take a look.”

Managing your information ecosystems is a bit like tending a garden. It is a small amount of work to maintain order if you do it every day, but if you aren’t proactive things can be quickly overrun.

2/ Know your role and set expectations.

  • If you are the decision maker then you can either make a decision or ask for more information that you require to be able to do so.
  • If you aren’t the decision maker then you should supply any additional commentary you have as quickly as possible so that person has full context.
  • If the decision maker is not on the thread you should either add them or do whatever you can to unblock getting it to them. * If you aren’t sure who is the decision maker, then that is the first thing to clarify.
  • Even the best system can be overwhelmed during busy times, and at those times it can be helpful to send short expectation setting responses so people understand the timeline you are working on. Something as simple as “I’ll get to this by the end of the week” can help people plan effectively.
  • If you are constantly overwhelmed, but you feel your system is working as effectively as possible, then you need to either delegate more or ask your manager for help.

3/ Be proactive but not formulaic.

Your communication preferences do not live in a vacuum and affect those around you. If you ignore emails or send disruptive work chats then you are contributing to a net decrease in overall productivity. One thing you can do is be more proactive.

Reactive communication is much more expensive as it is interrupt driven and tends to be piecemeal rather than comprehensive. It is beneficial to be more proactive in sending out thoughtful communication to a consistent group of peers to ensure you are all on the same page. Those regular communications can also serve as a shorthand reference for future ad hoc conversations which will save time. However if they become formulaic they end up being a chore to compose and are rarely read. So if you don’t have anything new to say or a new way to say it then don’t bother.

What Works For Me: Inbox Ten

For those who are curious, my system is Inbox Ten. That means I aim to end every day with fewer than ten emails in my inbox. I also have fewer than ten open chat threads across all interfaces. I’ve also read all relevant notifications in internal tools, read all relevant posts in internal groups I care about, and started rough drafts of any relevant proactive communications I intend to produce.

Email is the backbone of my system and I treat every email I receive as an action to be taken.

  • If an email doesn’t require action, then I delete immediately after reading. I can always search my archives if I need to reference it later.
  • If an email is low signal, then I immediately find a way to unsubscribe from things like it in the future.
  • If an email duplicates another channel (such as internal tools), I eliminate it from my email inbox
  • If an email can be handled with a short response I reply immediately and then delete
  • If an email requires a longer or more researched response then I skip it for now and use blocks of time set aside during the day to respond and then delete.
  • If an email contains details for an appointment I add it to my calendar and then delete.
  • If someone sends me a chat that isn’t time sensitive, I redirect them to email
  • If there is a group chat thread that is too noisy or not time sensitive, I mute it indefinitely
  • I hide or archive all chats once they have concluded, and remove myself from irrelevant group chats
  • I proactively consume feeds, notification channels, and groups once or twice a day.

One of the most important tools you can use, regardless of channel, is to just decline to engage. If you don’t have anything to add, don’t have time to take on more, or just aren’t interested: say so. Don’t let it linger in your inbox or get yourself talked into work you don’t think is a good use of your time.

When I am initiating communication:

  • If I have a question that is important but not time sensitive I send it over email
  • If I need a decision that is important but not time sensitive I gather all the information required including a timeline by which I hope for a response and send it over email
  • If I have information that is important for them to have but not time sensitive, I send it over email and label it as an FYI.
  • If I have a time sensitive or urgent question (which should be relatively rare, if I am doing things correctly) I will send it over chat either 1:1 or to an ad hoc group.
  • If we are doing real time coordination (for example during a meeting) I will create an ad hoc chat group for it
  • If I’d like to have an informal discussion I generally do it with standing group chats or group posts, though sometimes create an ad hoc group.

One thing you don’t see here are Google Docs. I do create them from time to time, mostly to allow for line level comments and questions, but they are payloads for these messages and not the content themselves.

A good sign your system is functioning is if you use it on yourself. For example, I often email myself throughout the day with work I need to attend to.

Read the whole story
Gangles
163 days ago
reply
Santa Monica, California
Share this story
Delete
Next Page of Stories