Cramming 'Papers, Please' onto Phones(dukope.com) |
Cramming 'Papers, Please' onto Phones(dukope.com) |
Another of my favorite games on the iPad is Darkest Dungeon. While perfectly legible and playable on the touch screen, the ignored opportunities for touch improvement (entire inches of “letterboxed” screen space, buttons sized for mouse but too small for pinkies, drag-to-scroll lists) are so disappointing.
The 'Auto Player Testing' is smart and a token of good design, as he must have completely decoupled IO from the main game logic. That seemed the most interesting to me.
> He added that the game would be available as an update to the 2014 iPad app
Here's some of his other huge devlogs on TIGSOURCE:
1. Papers, Please. https://forums.tigsource.com/index.php?topic=29750.0
2. Return of the Obra Dinn. https://forums.tigsource.com/index.php?topic=40832.0
And on top of that he composes the music and makes the art and literally everything else.
I honestly just don't understand how a person can get that good at that many things.
Parallel to all this I was interested in music too. Fooling around in ReBirth and Fruity Loops. Many years later got a guitar and tried to learn that, you get a lot of music theory from that. That theory is much easier than programming, still takes a lot of time.
Drawing I'm not really good at, but got an eye for what looks decent and can play with colors. On a computer it can almost be like cheating because you can be "inspired" by others. But books and tutorials on art exists too of course, how far that rabbit hole do you want to go? And 3D is a bit of a mix between tech and art, you could draw a cute character on paper front and side with a pencil. And when you model, texture, rig and animate that; it can be really impressive.
What I am trying to say, it looks like genius but it is a lot of work over a period. But it is creative/craft work, and not boring. And you can learn the basics of all the areas and make something great. When making apps, all those areas of you are unused. No music, no art. At best some graphic design (UI).
If you want to really put it in a compressed environment where it is not (?) overwhelming, but still technical, try C64 programming. There are lots of resources and step-by-step guides, and you will get a taste of everything and can build from there. We are many that have the desire to make our own games. Some are indeed geniuses, or very strong in multiple areas. Others just stumbled across Unity and are going through whatever guides there are with desire. These days you can choose your difficulty and dedication level.
For simpler games, getting your game to run on desktop, iOS and Android is not that hard. Because most platform code will be some glue, and then you are off inside your own game code. It takes weeks/months to figure that out, but then you are done and carry it with you for every game in the future. Then when you put it all together plus the uniqueness of your game (because it is unique right?!), you get a great and interesting blog post like this one!
[0] https://www.youtube.com/user/dukope1 [1] https://www.youtube.com/watch?v=qZFoBvJf8Ug
> Haxe can build cross-platform applications targeting JavaScript, C++, C#, Java, JVM, Python, Lua, PHP, Flash, and allows access to each platform's native capabilities. Haxe has its own VMs (HashLink and NekoVM) but can also run in interpreted mode.
Compiling from one language to another isnt particularly unusual, but compiling from one language to so many is very unusual. On first impression it sounds unserious—real compilers output machine code—it's tempting to denigrate it by calling it a transpiler. But there are a lot of advantages that come with this approach. You always have access to the full capabilities of your target platforms. From a single language you can write code that is massively portable while also targeting specific platforms with just an if statement.
The "real" compiler authors spend months working on linkage, calling conventions, runtimes, symbol mangling, allocators, and debuginfo trying to get their native code to link properly to the objective-c frameworks on iOS—and it never feels quite right. If you instead compile to objective-c, a lot of things get easier. It's a very pragmatic approach.
The blog post alone makes you want to purchase whatever this person has been working on based on how much passion is oozing off the explanation of how it's made.
Side note... A lot of YouTubers also work like this: pushing the craftsmanship to beyond expectation to almost cause an emotional reaction.
In this case though, it's genuine engineering with high standards.
While I’m aware of the “go fast alone, go far together” quote, I’m depressed by how inefficient app/ui development is at big tech companies compared to game studios, especially short staffed indies.
Really makes me wonder about the “engineering excellence” that tech leads and “architects” pride themselves in when games are developed much more quickly and are - to my eye - much more stable and performant.
The level of thought given to tiny UI interactions here is wonderful. Details like being able to swipe around to "play" with the dangling pull chain. Any other dev would just make it a static image and call it a day. But these little bits of magic working together transform one of the most boring possible topics into a real gem of a game. This post should be required reading for interaction designers.
I wonder if there's a solution to this.
Play store says there have been 4000 downloads so at least some people are getting to that page, but probably through direct links rather than search
Lucky this came up on HN so I found out. If that weren't the case I doubt I'd have thought about it again and wouldn't have ever bought/played it.
Maybe that's something that can be configured?
I scrolled several screens finding only knock offs without the comma. The App Store and Apple Music search experience is not great.
Anyway, happily bought this game again in this new format! Well done, sir!
Just something I’ve noticed about the indie games world. Seems like an inspiring, genuine space.
That kind of cross-discipline talent is so hard to find.
Perhaps I’m not curious enough to go exploring for these languages. I’ve used a few smaller ones in my years (usually because of an external forcing factor - like Squirrel running on ElecticImp devices) but I tend to stick to the big names we all know
Interesting look at the process of making the UI work well.
This is interesting to read. When I first played it I was dying for touch controls. It seemed like such a natural fit for the gameplay of sliding papers around.
My only regret was that I couldn’t play it more often, on the go, on my phone. I understood why, considering the intricate gameplay and the precise interface required, it wasn’t possible.
And then suddenly… this. Instant buy.
Most transpilers I've toyed with(admittedly, not many, and years ago) gave every variable and function awful autogenerated names.
Working in the gaming industry myself, everything here spoke to what I want gaming to be.
What a witty fellow.
No . Desktop and mobile are 2 different ecosystems. The users have desktops; those who are used, have mobile; those who are kings, have both.
I figured they were either running PHP/SQL or Node, so I wrote a simple backend in a way that would make it easy for to deploy to either one with minimal changes. By the time the provider finally replied, the project was nearly half way complete. It turned out that they were using a standard PHP/SQL stack, so had I gone with Javascript there would've been problems. Instead, all I had to do was change one flag in my build system.
I don't know if this is a big selling point for Haxe since it's such a highly specific situation... but it's probably at least worth mentioning :P
So it's completely comfortable for me. AND I can hit C++ if the platform demands it!
For example, you can define a json file, and have a macro that produce a class that matches that json file's fields. It would type-check (and you get auto-complete, for example, if you called that class's fields in another function). Of course, there's nothing special about a json file...why not use a live schema fetched from the internet! https://code.haxe.org/category/macros/completion-from-url.ht...
Don't worry: targeting high-level languages gives you a different, equally-frustrating set of problems! Actually, many of them have equivalents to the low-level ones: you also have to worry about calling conventions, name mangling, runtimes… they just look quite different.
Especially you want to support any kind of dynamic functionality, there are many uncomfortable trade-offs involved.
What? No, this is so wrong. “Real” compilers transform input from a source language to a target language. That’s it. A program could compile a language to itself with functions inlined and it would still be a compiler. Transpiler is a dumb word made up to identify compilers that output valid source for a chosen language.
Arguing about the technical definition of compiler misses the point outside of a scientific paper. Connotations are more important than an arbitrary definition you happen to agreee with.
Papers Please is nice, but Return of the Obra Dinn is a masterpiece. Honestly. A very cool concept with some impressive attention to detail. Pixel-perfect 1-bit dithered graphics, amazing soundtrack, and a nice story. I don’t have a link here but there was a forum thread somewhere where he discussed his progress as he was making the game. It’s a bit long but we’ll worth a read as well.
I also played Helsing's Fire on the iPad, which while not a masterpiece, is still pretty fun!
One can force true one bit graphics ("digital mode"), but the downside is greater flicker in the dithering dots when moving.
I'd also say it's about having the skill to do this: as other posters note, there are multiple competencies on display in that post; graphics, coding, testing, etc. Each of those takes time to hone. I've worked with any number of people that are not honing their skills, because when they get stuck or hit problems, will not take the time to dig into them and really understand exactly what problem they hit, why they hit it, and how whatever language/tool/system they're working with works. They'll guess until something appears to work, and then move on.
I'd put the detail in this blog post up there with Friday Factorio Facts, and that is also another top-notch game.
If your professional environment is just full of people working at or even above the level here, you should know you have it good. And I think they do exist: I've definitely joined places where there are just lots of incredible people; in hindsight I wish I'd done a better job of learning and listening, when I had that…
A phone can show one or two panels at a time, at best. There’s a lot of stuff you just can’t do. It’s a tiny, limited canvas, even before it gets shitted up with ads and pop ups.
Playing "Papers Please" on a phone requires a good memory. Do you remember what the recognized visa issuing cities for Kolechia are? You need to know that. If you have to swipe to the rulebook to look it up, your productivity will drop and you won't make enough money for the day to keep your family fed.
This isn't just in my community, it's noticeable enough in my travels that it seems to be a trend. I assume it is because of more short-format digestible content, along with the shift of social being one-to-one and one-to-many, to being many-to-many, in the sense that you're not necessarily seeking out those you had a direct relationship with, you're seeking out elements and segments of a topical zeitgeist, whether that be tech videos, memes, cat compilations etc.
I also have another hypothesis- when phones that provided a rich experience first debuted, it was the nerds and city folk who got it first. iPhone then brought this mobile-first-lifestyle to the stylemakers and artists and those whose inner monologue is narrated by Justin Long, folks who'd likely have bought anything apple anyway. From there, smartphones and rich experiences were disseminated into the lesser elements of the greater public who either are receptive to tastemaker's influences or have limited option to refute the convenience of popularity; popular hardware is cheap, ubiquitous and accessible, some might say in some regards modern smart phones are disposable.
What I'm getting at is this, this stuff is no longer a mystery to this generation. We are now 2 or 3 generations removed from this type of pocket-computer being anything wow-inducing. I think of it sometimes like when I was a youngster, the class of people who traveled via air vs everyone else at ground level. Air travel had a mystique and prestige, this person must be doing something to be enjoying a cigarette and being served a glass of wine however many feet in the air, direct to destination. The same way I might not be in admiration of my neighbors boots for having a good welt, because a good welt is a given, I assume the youngster of today are no longer enamored by the novelty of a mobile phone or pocket-computer. As such, it is no longer a status symbol for most. So what the new iPhone came out and you got one, that's only a valid status symbol for maybe a few weeks, for over 1,000 USD invested in some models.
Youth of today, I don't see them going for a pocket atlas or any such form factor, I see them going for augmented spectacles or lenses. Everything indicates that a new 'moores law' is taking effect around energy storage and thermodynamics - we are no longer optimizing per-core clock speed, we are optimizing core count and the amount of energy that can be stored to later be turned into CPU cycles rather than heat. As soon as the battery technology will allow it, you will see lenses, whether they be spectacles or contacts, that will take in and assimilate your surroundings, your focus, and the imperceptible changes to your heart rate, retinal dilation, and ocular pressure responses to commercial items. It's not far fetched, we already know of this research being done. Despite the cumbersome experience of VR, we are seeing a point where it is no longer 3D TV or bluray level tech, it's sub-standard as a whole but more and more people are buying it because it shows promise.
I see in the future that our interface devices, whether they be communicators like phones, or additive interfaces like AR spectacles that can dole out retail info in response to a brief biomarker-spike like pupil dilation when glancing at a new pair of shoes. These devices will be funded by corporations much the same way tech learning materials, operating systems, and software is today. It makes most sense that before wider adoption, they'd first be available to those with the most capacity for realizing an ad-prompt via converting to a purchase, so think of like snapchat goggles release, but at your local best buy.
pocket-held mobile phones are the least optimal form factor for every purpose or task it can accommodate other than "fits in pocket". Mark my words, as soon as it can be bonded to a wearable lens, it will be, and the corporations will subsidize it heavily. You think adtech is bad now, just wait.
The average young adult likes to use their phone one handed…
They're kidding, right? Nobody in their right mind actually believes that, do they?
Look at devices with foldable screens and external keyboards like the Asus Zenbook 17. Without getting lost in arguing semantics of if an iPad (mini/pro/regular) sized tablet counts as a mobile telephone, it's clearly not a desktop, and it's easy enough to imagine that desktop computers will go the way of the mainframe.
To your general question, I've heard a professor lament a student stating that all CAD applications should work on phones.
Engineering in most organisations will place stability and predictability very high among priorities, and pay a hefty price for it (sometimes, messing up along the way and getting neither benefit). An individually brilliant engineer can be a great asset if properly managed, but you need the majority of people to be less of an outlier.
As for stability and predictability, I’m not confident that AAA apps are hugely (or maybe even significantly) more stable or predictable than the best games. Maybe my tolerance for bugs is higher in games than apps, but I do seem to tolerate quite a lot of jank and slowness from apps, so I’m not sure.
I would certainly be interested in a "Unity for line-of-business apps." I guess this was VB6 lol.
I think Unity and the like have made the average project much more productive, but they don't add power to the top end. The power of having everything perfectly customisable by a team of experts with perfect domain knowledge is just too much for anyone else to match by getting quick wins off the work of others.
Grinding Gear Games, as an example, is a NZ based game studio that releases a new expansion to their famous RPG - Path of Exile - every three months.
The game is not a simple program by any stretch - which might be a fair criticism for Papers Please by comparison since it is purely client-side and all possible states of the game can be fairly easily enumerated.
Path of Exile is a persistent cross-platform 3D online multiplayer game that has daunting requirements for consistency, latency, and graphical performance.
Despite that, each three month release cycle introduces more new UI elements and features than I think the entirety of Google apps release in the same timeframe. And that’s not because Google isn’t trying to build new things - they are and I’ve written UI for several of those projects.
Does anyone else feel a real sense of deflation when it comes to app/web development velocity compared to games?
Is immediate mode GUI's just that much better? Instead of a complex React/Redux style setup, how much easier would state management be if we had a render loop like game dev? Does that even make sense?
I am very envious at the pure programming skills of so many game developers. UI's in indie games are just a side thing in the deep complexity of a game and they end up looking incredible compared to the level of effort required for year long web app projects.
I can imagine that the game studio has most if not everyone onboard helping collectively to make the game better each iteration. It is a common goal.
How many different product teams and managers get in the way for products at other companies where each is fighting for funding or privilege?
Being in that kind of environment is draining for the product teams.
Having worked at places that matched both these situations, I know where the quality and quantity of my output was greater.
Usually they have multiple leagues cooking up in the oven at any given time, so that if the league they want to release isn't ready in time, another, simpler idea will likely be within reach of completion.
The timeline is as such because their business model requires engagement spikes every three months. Remember that Path of Exile is free-to-play.
I also want to add that PoE has grown into one of, if not THE most complex games ever made; there are so many overlapping systems and mechanics that there were memes about what would happen if they added any more special destination buttons to the worldmap. And I'm not even talking about the initial release; it was a complicated game then, but now it has the mechanics of at least a dozen leagues baked into the core game play; many of those leagues are an entire game unto themselves (like Delve)
I love it for this, but it makes me sad that most gamers don't try and reason about this complex thing, and instead follow build guides and copy streamers, instead of experiment. Also, because of the nature of the game's deisgn, you need to play for a stupendous amount of hours to reach the end- endgame, and for most folks you also need to trade items with people IRL as the designers intentionally do not add a decent trade system. There are a lot of other quirks that reflect the designers' intent to not make life easy, either, and players both love and hate that.
A UI change can impact usage. Which can impact revenue. Which can impact stock price.
The end users for large tech companies are essentially shareholders and investors.
Remember 2 weeks ago, and you really wanted to implement CICD, but the DevOps team told you not to.
When you're developing any solo projects, you don't have anyone else telling you what you can't do.
This is amazing, but you can also easily spend countless hours building something nobody really likes. I've made a small handful of games, a few of them have been released publicly. If I had to guess, at most maybe 20 people have played my games.
But I taught myself everything I know via learning game development, and my career is amazing.
Even now, I'm trying out different engines and having a blast. Odds are. I'll probably never produce anything that becomes all that popular. It'll just be another throwaway game on itch that nobody plays, but I can say without a doubt I had a hell of a time building it.
Most of dev work is making sure other people can make sense of your work. With solo dev, that step is basically unnecessary.
I think it’s also why some indie games (eg binding of Isaac) get completely remade instead of making updates a year later. Walk away from the project for a couple months and it’s an untamable beast.
Elon once wanted to move his programmers to windows upon seeing how fast world of warcraft was developed. Goes to show how fast people can be if they care about the things that matter.
You need a win, but not that big of a win in the grand scheme of things
Six figures, a couple million
Whereas big studios need multiple hundred million+ hits
Other than the tactility of the UI (which is a major part of the game), the reason, i believe, it is fun is because the game's mechanics matches that of the actual role you play in the story. Many games don't really get this correct (https://en.wikipedia.org/wiki/Ludonarrative_dissonance).
In papers please, your decisions aren't clear cut, like in a regular RPG game, where you can "choose" to be a good guy or a bad guy by selecting one of two options, and one is clearly meant to be the good choice with the good ending, and the other bad. Papers please actually make you think like someone surviving a authoritarian regime, and your actions reflect that role too (you would, for example, choose not to feed, if family isn't absolutely hungry, or that you would attempt to deny entry as fast as possible, since a denied entry doesn't make you any money - no room for sympathies).
It makes the game feel "real".
This seemed obvious to me even when I was 14, but maybe our culture has been stuck in a place where people's understanding of good and evil does not match reality. Propaganda during WWII (or any was, really) would be an obvious culprit.
You think so? Games are often full of little things like that. That's a good thing to point out, but it certainly doesn't seem as unusual as you paint it. Letting the user be playful is generally what games are good at ;)
I’m trying to think of another instance of “sliding out a control” being given this level of attention, and I’m drawing a blank. It feels like an unusually high level of effort to put into a UI concession for a port that was going to sell well anyway.
Granted, this game is mostly about sliding UI elements around, so maybe it is more integral to the experience than in other games.
Well it was born in France in a web game company (some of their games were pretty famous domestically) as an internal language, and the main selling point at first was the multiple compilation targets (PHP, JS) which included Flash. It wasn't something developed in English in the open at first like a lot of new languages are nowadays, so obviously it took some time to get some international exposure.
I want smaller game engines to succeed, but the tooling is just painful to use.
From the time I spent with Haxe, it's very neat language. At the same time, half of why I make games is to learn.
If I have to use your custom language I'm not learning skills to use at work.
For example, with C# you can make games with several languages, you can also work on boring Fintech so you can pay your rent.
With .net core open source I'd love for more engines to use it. Godot 4 with Mono will be a very very strong contender.
I don’t think I’ve heard about it since then.
There was a demo I saw a while back where someone added Google search suggestions to their IDE by hitting a Google endpoint in a Haxe macro.
Caveat: I will note that technically speaking Elixir does not have a strictly separate compile time and runtime. However, in practice the language is used like it does. Compile time code is normally just a bunch of definitions of modules and macros and functions contained within. Executing the compile time code normally has no effect other than creating compiled modules. One can technically put things like loops or I/O etc at the top level, but that is normally only done if writing "scripts", rather than normal progarm code.
Thus for a normal program compiling it is basically just running an interpreter over the source code of the program. Indeed the elixir compiler executable is literally just the same as the interpreter used for scripts except with a flag to save compiled modules to disk rather than just leaving them in memory. (Plus a few other really minor differences that are not really relevant here.)
Runtime is then just asking the beam VM to execute the some function in the previously compiled module. While in theory one could try to define additional modules at runtime, this is not normally done. The language design strongly discourages this. If you need to generate modules programmatically, you are better off doing it as macros, which will run at compile time. Thus, normally the compiler is not used at runtime, and while I don't think elixir offers an option to remove the compiler at runtime, one could remove the underlying Erlang compiler at runtime, and without that the elixir compiler would just fail.
There are, of course, no artificial limitations in macros. They can run any code that could be run at runtime, in addition to modifying the AST, or defining new modules. In theory the macros could even present an interactive user interface, but obviously that would be absurd.
(of course, when I was young it was easy for me to get passionate not about the project itself, but on mere technical aspects of work I was doing for someone else; this kind of motivation, however, doesn't last very long unless you're able to change your job often to keep it fresh and challenging)
What I deeply regret is that I struggle with writing about stuff I'm doing. There's a lot of interesting knowledge one acquires from such projects, but it often gets almost lost and only really lives on as a vague "experience" you can indirectly apply to your future projects. I would like to have my own experiences written down in such a neat way like in this post, not just for publicity, but also for my own personal needs when I want to go back to something I've done years ago. Usually, my attempts end with an unfinished, incomplete document that gets so out of date before completion that it's best to throw it out and start over, which of course doesn't happen until the memory of what I've done becomes foggy enough to make reminding myself what to write about a challenge on its own :( As it is right now, I'd struggle to describe the vast majority of my past passion work if anyone asked me about it; I'd need plenty of time and some "detective work" to reconstruct my memories.
Of course, the tradeoffs in work-life balance for game development is massive, so it's not like that extra productivity is free (unless you're management). Nobody working at a typical software firm is going to be expected to crunch 12 hour work days for weeks just to ship.
Thanks for the context.
Obra Dinn, especially, is one of my favourite games of all time, it's such a unique experience.
As for Obra Dinn, I found it very cool that many puzzles have more than one answer, in particular when it's a subjective matter!
Though I actually enjoyed "Papers, Please" gameplay. I was overjoyed when I found it has an endless mode. I enjoy stamping those red "denied"!
Much value creation is already digital. If you’re reading this, you’re probably an information worker. You may not have thought about it this way, but the majority of your waking hours are probably spent in front of one screen or another a laptop for work, a phone on the go, a tablet for reading, and so on. So, most of your life is already spent in the Matrix, in a sense, even before the advent of widespread AR/VR. Short of a pullback to an Amish or Andaman Islander existence, most of your life is and will be digitally influenced in some form. Moreover, much of the value in the physical world comes from blueprints created on a computer in some form; eg, the iPhones manufactured in Shenzhen gain much of their value from the designers in California. So, a good fraction of value creation is largely digital.
Srinivasan, Balaji. The Network State: How To Start a New Country (p. 279). Kindle Edition.
No social network. If there’s no social network, you have no digital profiles, no messaging, no community fora, no mass media, and no easy way to recruit from the internet. You’d essentially be living an Amish life, relying on pieces of paper or offline cues to determine who was part of your new state and how they interacted. This isn’t going to succeed the nation state.
Srinivasan, Balaji. The Network State: How To Start a New Country (p. 371). Kindle Edition.
Agreed. Honestly if I had a way to comfortably write software on my phone I don't think I'd ever use my laptop ever again. Phones are simply too comfortable.
Unfortunately the vast majority of them are consumer devices: unlike real computers they don't come with the tools used to program them. I can't make a new app on my phone and run it.
And why is that such a lamentable idea? Modern phones have the processing power these days. Walking around a factory, building sites or a muddy field with a phone in your hand is a lot easier than walking around with a laptop. Plus modern phones have LiDAR and multiple cameras opening up for all kinds of interesting options. Frankly any CAD platform which doesn’t embrace mobile will probably fall out of favour over the next few years.
Perhaps you could share your own thoughts, opening yourself to criticism and a chance for interaction, and perhaps learning. I wrote a few comments on https://news.ycombinator.com/item?id=31990217 (discussing an opaque article titled “The Mysterious Return of Imposter Syndrome”).
I don't think any book could give the feeling of transitions as the webtoon format can, yes, its only a panel (or less!) at a time, but the artist can give a halting thought-by-thought feel of a man on his deathbed, or roll out an entire red carpet of flourishes to introduce a character of nobility
You can't go super transition-heavy in print, because well, printing and pages cost. and people need to move their big hands to flick the pages, there is an expected consumption rate for that effort put in, so even if cost wasn't an issue, people would get fed up with the transitions anyhow.
so yeah, 1 panel at a time, is a bit of a downside, but IMO its also an upside in that one can give each panel its own treatment and such. an infinite vertical strip as one's canvas
- - -
of course, getting all the bits into the right places with the right breathing rooms and the right flow is a true skill in of itself, but, I dunno, is it better to read 1 super good comic, or 100 entertaining enough ones? the bar is lowered by all of this, yes, but is that a bad thing?
That being said, I /do/ like the transition thing you mentioned.
Works best on the phone where you can have it fullscreen and smooth scrolling.
I don't enjoy fiddling with the scroll position, or things peeking in from the edges, I like a nicely laid out scene and a button or other control that takes me to the next "page" or scene without the fuss that scrolling to the right position adds.
He later adapted that talk for his "understanding comics" Ted talk. Worth a watch if you love the medium
It's pretty cool on a decent-sized screen, it was designed around the size of the iPad I'd just gotten when I started it. Not so cool on a phone. Try it on both and you'll see what I mean.