Monday, May 9, 2022

Thoughts on Playdate’s Pulp

Playdate launched!

The console.

Everyone’s attention is on the tiny yellow box with the kooky crank, but I’m more excited by what Panic has provided to the developer side: free and accessible ways for people of all skill levels to make a game and play it on a real console they can hold in their hands and pass to a friend. Even if you don’t have the console, you can still play game .pdx files on the Playdate Simulator included with the SDK, on Windows/Mac/Linux. There’s also a screen mirroring application, and I could easily see myself using the physical console primarily as a controller for this, rather than playing on the device’s tiny screen once mine arrives (Group 3). The SDK and tools are free, you can distribute and sell your creations however you please, and files can easily be sideloaded onto the device or dragged and dropped like any USB volume. It’s refreshing to see a device that’s this open and “homebrew by default” released in 2022, when most other major platformers lock theirs down, take cuts of revenue, and generally do the opposite.

Panic co-founder Steven Frank talks about this philosophy here, in a note he wrote when the first Playdate orders started shipping. He also mentions “Playdate’s appeal to people who may find modern games intimidating or out of reach due to their complexity”, and says, “Learning how to write games can be easier and more inclusive than it is. Playdate’s developer tools are an order of magnitude less complex than any other current game platform I can think of. Dare I say: it’s even fun?” Which brings me to Pulp.

I’ve been meaning to give the Playdate SDK a proper try, but I just can’t stop making little prototypes in Pulp.

Pulp's room editor, showing a little digging game in the works.

Pulp is a website tool to make low- (or no-)code games in a WYSIWYG-style editor with all batteries included, inspired by bitsy. From , it is a “Web-based game editor for Playdate. Pixel art, chiptune music, and simple scripting built right in. It's fun!”

All of that is true, but like the quote from Steven above, emphasis on the last part -- it really is fun and delightful to use. Why?

1. Constrained design spaces. The “constraints breed creativity” philosophy applies to everything Playdate, but especially Pulp. In Pulp, the Playdate’s native resolution of 400x240 pixels is halved to 200x120, and everything is based on 8x8 tiles, so the game screen always displays a “room” of 25x15 tiles. Each pixel in a tile can be black or white (except for the player tile which can include transparent pixels). Songs have limited length and only sine, square, sawtooth, triangle, and noise waveforms to work with. Pulpscript has no compound expressions, traditional functions, local variables, or data types other than string and number. All of these constraints reduce the number of choices you have to make when designing and building a game. The result is that some game types are unviable (smoothly animating real-time action fests), but other games can be put together extremely quickly. It feels great to have an idea (within the space that Pulp allows) and be able to start building it right away, to make changes and see the effects instantly. If you use no code at all, players of your game can only walk between rooms and display messages when bumping into stationary Sprites, collecting Items, and finishing the game. Can you find a way to make a game interesting despite all those constraints? Or because of them?

Pulp's tile editor. I'm no artist, but it's fun to find ways to be expressive in an 8x8 grid.

2. Usability. As a piece of software that humans interact with, Pulp’s user interface and operations are simple and friendly. Tile and room editing icons are intuitive. Common operations have common shortcuts, for both the main editor view and the Pulpscript text editor. There are 7 color themes to choose from. After editing your game, pressing Command-B to build and play it anew only takes a second or two. In order to use Pulp you have to create an account, but this is quick (just email and password) and means that all of your work and projects are available from any browser on any computer. There’s a save button, but Pulp also routinely autosaves when editing and playing your project. There are buttons for importing and exporting the whole game, or just certain assets from it (pulp game source is just JSON). Art, code, sounds, and songs are all in one place so it’s easy to integrate them. There are feature requests for various quality-of-life improvements like multi-tile selection and tile organization options within categories (versus changing things 1 tile at a time), but when there’s a design tradeoff to be made Pulp consistently goes with the simplest, most value-for-your-mental-overhead option. No popups nag you, unless you try to run invalid Pulpscript, or your project files have changed on server since your last local edit and Pulp warns you before you overwrite something. 

3. Pulpscript is interesting. Maybe frustrating if you’ve programmed before and you’re used to being able to say “if A and B” on the same line, but interesting. The minimal syntax and limitations mentioned above mean that you can learn it all within a day or two. Documentation is clear. Again it’s obvious that keeping things simple was a priority, considering that this may be someone’s first experience with programming. Even if you have programming experience, trying to implement some feature in Pulpscript can feel like a puzzle game itself. Like #1, if anything is possible it can feel overwhelming and paralyzing, but in this restricted environment you have a more concrete starting point and a quick feedback loop to actually get something going. It becomes a fun challenge to break free and "outsmart" the restrictions, doing things in Pulp that it wasn’t originally intended for. For example, I put together a prototype for a match-3 style casual puzzle game, except it’s match-4 in a square shape. It’s on hold for now, since I don’t think the twist in design makes the game much more interesting, but maybe I’ll revisit it later. The point is that I was able to put it together in a few hours, and the process was fun. Creating different pieces using only black and white 8x8 tiles that feel visually distinct when looking at a board of them was fun. Implementing piece swapping and matching and new pieces falling in from above in Pulpscript was fun. I'm now working on a different kind of puzzle game and it's gotten to be spaghetti-codey in places, but that has steered me to keep the scope small, leading to a project that will likely get finished and released.

The match-4 prototype. Might revisit someday.

I think once you’ve decided you like a tool it’s tempting to see shortcomings as non-issues (or as features), and maybe I’ve done that a bit above. If I had to give one criticism I think the song mode is the least intuitive of the editors. Misclicks and misdrags can throw stuff off, you often have to fiddle with note octaves, and it took me a little while to figure out a good workflow (and that you have to drag the “Notes” bar to change which section of the song is shown in the piano roll view).

Pulp's song editor.

Pulp isn’t perfect, but it is extremely successful at what it aims to accomplish. It has won me over, and judging by the number of wonderful creations being shared on, the Playdate Pulp developer forums, Pulp Discord, and elsewhere, I'm not the only one. More on these creations later.

Saturday, July 3, 2021

Ten Years On The Same Macbook Pro

I've used the same Macbook Pro as my main personal computer for over 10 years now, which is a pretty long lifespan for electronic devices these days.

Still alive and well.

It's a 13-inch, early 2011 model with a 2.3 GHz i5. It came with 4 GB of RAM and a 320 GB HDD, which I later swapped out for 8 GB RAM and a 500 GB SSD, because this computer is from a time long past, when Apple let you do those kinds of upgrades yourself. I never replaced the battery, so it drains fast and the Service Battery alert has been on for years, but the machine is still fine for casual use around the house. It served me well throughout college, post-graduation work, moving to Japan, and the bumps and dings along the way.

I'm a grumpy old man when it comes to technology updates, so it was on OS X 10.9 (Mavericks) until December 2020, when I reluctantly updated for app compatibility reasons. I updated it to 10.13.6 (High Sierra), which is the furthest this old machine officially supports. That was a mistake, of course.

I traded stability and speed I was used to for general sluggishness, an annoying issue where pressing keys to wake the computer from sleep takes measurable seconds but pressing the power button wakes it instantly, and... spammy app store software update notifications, I guess?

Apps feeling slower and slower isn't a new phenomenon, but when I opened Facebook Messenger in a browser tab to send my parents a picture while video calling them at the same time, the machine really started to struggle. I bought some more RAM afterward, maxing it out at 16 GB, but that's probably going to be this machine's final upgrade.

The last surgery


I'm not sure what I'll do when this laptop croaks, but it definitely won't be replaced by a 2016~2019 model. I'm carrying a 13-inch 2017 Macbook Pro from my company, which I've been using for work almost daily since 2019. It has a 2.5 GHz i7 and 16 GB RAM so it runs macOS 10.14.6 (Mojave) fine, and it's still compatible with most apps for now.

It's lighter, and I can plug USB-C things into it, but that's about it in terms of noticeable benefits. 

Sometimes when multiple apps are open this machine slows down until I either unplug the USB hub connecting it to an external monitor, or the machine decides it needs to reboot (either suddenly by itself, or with the multilingual "You need to restart your computer" error). Sometimes it just stays on a black screen when waking up from sleep, until I'm forced to hard reboot it.

Once in a while the screen flickers a glitchy horizontal stripe of black across the screen, about 70% of the way down. It's rare but it happens, even when placed flat on a stable surface, not holding by one corner or moving the hinge or anything. That reminds me, the hinge is also really weak, compared to my 10 year old model.

This machine is wimpy from a hardware perspective in general.
  • There's only two ports on mine. I plug an Anker dongle into one of them, which gives me barely enough ports to make do with.
  • The headphone jack is on the wrong side, where right-handed mouse users want to put their external mouse.
  • The keyboard is the flat, clicky "butterfly" keyboard, which Apple has thankfully revised in newer models.
  • The left command key doesn't work on mine about 1 in 20 presses, but even without these key pressing problems (which have become common complaints and inspired an Apple repair program), this keyboard still seems to say, "Plug in an external keyboard and don't touch me."
  • I don't have big hands, but even for me there's not enough space between the bottom of the keyboard and the huge trackpad, so the bottom part of my thumb/palm which naturally falls there can cause touch detection issues. The trackpad itself works great though.
  • The arrow key shape makes the keyboard look nice and symmetric, but in practice it's hard to quickly know which key in that area your finger is on just by touch, so I ended up putting a nice textured piece of tape on the down arrow key (goodbye aesthetics).
  • My model doesn't have a touch bar, but if it did I'm sure I'd hate it.
  • The caps lock key's green light is dimmer than the one on my 2011 model and sometimes it's hard to tell if it's on or off in direct lighting.

How to make these keys usable by touch

And of course, you can't upgrade the internals yourself. That hasn't been news for a while though, it looks like users haven't been able to upgrade their Macbook's RAM since 2012 models. Still, hope you picked a decent SSD size the first time, and hope nothing breaks that requires sending it in and getting the whole board replaced (and maybe your data wiped), oh and also good luck using this machine years later when apps get even more bloated and the RAM standard needs to be raised again. "Oh but the new M1 chips!" They sound great now, since current users are indeed enjoying objectively faster computing experiences, but eventually software always eats whatever gains the hardware guys bring to the table.

Speaking of hardware, my 2011 model is slower and heavier of course, but it has some nice features which I'm going to lament here for posterity. Who knows if they'll ever be brought back.

The 2011 Macbook Pro has:
  • A MagSafe charging port, with a little indicator light so you can tell from afar if it's fully charged.
  • A physical button and indicator lights on the left side, which show you how much charge remains without having to open it up and check the screen.
  • The lit up apple logo on the top of the casing which brightens and dims along with the screen
  • The little light on the front that tells you whether the machine is on or off or sleeping
  • A variety of useful ports in general (not exactly a standout feature compared to laptops from other manufacturers)
  • A CD drive, which barely gets used nowadays but does come in handy when you buy a language-learning book that comes with an audio CD, or you want to burn a copy of a movie using HandBrake, or the sound guy from the live house you just gigged at hands you the video recording of your band on a DVD.
  • None of the keyboard problems of the newer models, it still works and feels fine to type on. Not really a pro so much as lack of a con, but a reminder that Apple can make great-feeling hardware if they want to.
Actual ports and hardware!

I also used a 2015 Macbook Pro (13-inch Retina) at my previous workplace, and that seemed like a nice middle ground between the two. Light enough without the CD drive, but still had a decent keyboard with the inverted T-shaped arrow keys, no touch bar, useful ports, and the 3.5 mm headphone jack on the correct (left) side. This model also gets a lot of love on the internet, according to certain forum commenters, many of whom say they’re still dearly holding on to theirs (or looking for one refurbished), so that’s some nice confirmation bias.

I went laptop shopping with a friend recently and we found a used 2015 Macbook Air in great shape that fit the bill (and with 8 GB RAM and 512 GB SSD) for around $400 at Janpara. The battery has some wear, but since purchase the machine has seen daily use for a few months so far with no issues. The old models still hold their value!

It does seem like Apple is easing up on the design anorexia a bit with the newer Macbooks, nice to see they backpedaled on the Touch bar models' virtual Esc key, unreliable keyboards, and went back to the inverted T arrow keys design. Maybe the next generation will be another step in the right direction, but for now, long live old hardware!

Friday, April 30, 2021

How to Unclog My Shower Room Drain

A few weeks ago the floor drain in my shower room started to have trouble draining properly. Unclogging it was quite the experience so I tweeted about it. I didn't post pictures because is cursed enough already, but more than one sicko has asked to see them, so here you go, the full story in detail. It's gross, you've been warned. Hopefully this helps at least one other person out there make sense of the drainage system in Japanese apartment bathrooms and avoid a similar surprise.

In the past whenever my drain showed signs of getting stopped up, I poured pipe cleaner (or "pipeman") or fizzy cleaner tablets down the problem area, rinsed it after a while, and that did the trick. This time, dumping tablets and cleaner in the sink, shower, and floor drains wasn't enough. I had to go deeper.

Pipeman couldn't save me this time.

Here's what the drains look like, with some residual grossness from drain water that overflowed while I was experimenting.

Raw and unfiltered.

The floor drain trap (circle on the lower right) holds standing water. There's a grate over it, which is supposed to keep stuff from getting into the inner part with the water, which has a cylindrical plastic piece you can remove for cleaning. It's icky, but I'd pulled bits of hair and gunk out of there during routine cleanings in the past. I could see two holes on the "north" and "west" sides of the inside of the trap after taking the center cylindrical  piece out, so I got a long wire brush at the 100 yen store to poke inside them. I figured the arrangement was something like this:

I tried swishing the wire brush through both holes, but it came back clean. There was no blockage there!

I felt around the inside of the drain trap some more, confident that I'd disassembled it as much as I could. I could feel an edge around the inner "ring" of the trap, but no way to get my fingers any further.

Then, while fishing around randomly with the brush, I found another opening. A third hole, beyond the inner ring.

After pulling back the wirebrush from this hidden opening, it had some hair and soap gunk on it. Bingo. I pulled at the hair, which peeled off from around the whole ring. After a few more passes of the wirebrush, I had pulled out the following monstrosity.

Gross, but fulfilling to remove. Like clipping off a big toenail.

It actually didn't smell much, maybe due to all the pipe cleaner and orangey fresh tablets I'd put in earlier. I threw it away and ran the faucet to check.

But the drain still clogged almost just as fast as before!

I put the brush down the hidden opening again, as far as it would go, fishing out sometimes a few hairs, but not much. I jammed it in there repeatedly, trying to dig out something, anything besides frustration.

Then I landed the big one. Another big wad of scummy hair strands. They must have been plastered against the piping this whole time, dodging all past jabs of the wire brush. I kept pulling at them, getting more and more horrified as the mess kept going. This was the final boss, I could feel it. The final pile of ropey soapy slimy grimy gunkberg hair is pictured below.

Hard to tell with it all coiled up like that, but this thing had the mass of a small household pet.

It was basically a full head of hair. I could have sold this thing to a wig shop.

With the exorcism complete, I ran the faucet for a minute to verify (for real this time), threw away the demon, and went to go tell the long-haired human I live with that they're on dish duty for the next month.

TL;DR the drain arrangement is actually like this:

Sunday, April 11, 2021

Want to work at Atlus? Part 2: Job Postings

Disclaimer: I have no connection to Atlus, just taking a look as a curious surfer of the web. All pictures are from the linked recruiting pages, screenshotted early April 2021.

Job Postings

In Part 1, we looked at Atlus's recruiting site and general terms of employment for the company. So what actual skills do you need to get a job there as a programmer? A graphic designer? A planner? Let's see some job postings from the mid-career category page.

There are some application requirements common across positions:
  1. A personal CV with your photo and contact details (履歴書)
  2. A resume with your working history (職務経歴書). (Note: some places in the world just use the general term "resume", but Japanese companies separate into these two documents.)
  3. A filled out questionnaire which Atlus provides for download on the position page
  4. Certain development positions request some kind of work sample, depending on the role (see below for examples).
Let's look at specifics for a few common development positions: Programmer, Designer, and Planner.


Responsibilities include programming the actual game software, as well as creating and upgrading various development tools, company-internal libraries, scripts and plugins for DCC tools (refers to Digital Content Creation tools, like 3ds Max, Maya, Blender).

The listing also notes that programmers at Atlus aren't limited to just programming, they're also welcome to contribute ideas and proposals in order to make the game even better.

Essential skills:

  • Programming in C, C++

Other desired skills/experience in any the following areas:

  • Work experience developing consumer RPGs/games is highly desired
  • Experience with platforms like PS4, Xbox One, Switch, Steam
  • Plugins/exporters for DCC tools
  • Shader programming (like HLSL)
  • Development experience using game engines like Unreal or Unity
  • Using middleware (like physics engines)
  • Graphics programming using OpenGL, Direct3D, etc.
  • Socket programming
  • IO programming (audio, file management, dealing with different devices, etc)

Work sample for optional submission:

A program you've created in the past. For example, an executable file and the source code, the file/code for some tool you created, some documentation or technical writing to reference, etc.


(at Atlus, this seems to be an umbrella position for many visual-related roles that might be listed separately at other companies. Looks like they call game design roles "planners", see the next section.)

Includes all aspects of visual design.
More concretely: Concept art, 3DCG (3D computer graphic) design of characters, 3DCG environments, motion design, event scenes (movies, cutscenes), effect design (like explosions, magic, rain), interface and UI design, technical designer (efficient workflows and development pipelines for HD graphics and video), riggers (technical animation, scripting, plugins).

Like the programmer posting, they note that designers at Atlus aren't limited to just graphic design work, and are encouraged to cross boundaries and share ideas to make the game even better.

Essential skills:

  • Overall:
    • Ideas and art skills necessary to clearly convey images to many other people
    • Flexible communication skills for working with many other development staff
  • 3DCG designer: Practical experience using Maya or 3ds Max
  • Motion designer: Practical experience developing motions in Maya, 3ds Max, or MotionBuilder
  • Technical designer: Experience as a 3DCG designer or motion designer, technical designer experience, and experience creating tools using scripts in various applications.
  • Interface designer: Work experience designing interfaces for games, or graphic design experience on the Web or DTP (means "Desktop Publishing", like Adobe design suite tools).

Desirable skills:

  • Overall:
    • Experience in game production
    • Experience in animation, or video direction
    • Leadership experience in the roles included in this posting
    • Experience managing the work quality and schedules of outsourcing companies
    • The ability to propose and create the production assets that are necessary for a given scenario or based on the game information that needs to be conveyed
  • Motion designer: 
    • 3DCG tool expertise, knowledge of scripting
    • Ability to create animation control rigs
  • Event scene creator: Experience creating game data using Maya or 3ds Max
  • Effect design: Ability to create hand-drawn 2D effects
  • Technical design: 
    • Specialized knowledge and technical ability related to shaders and shader programming languages
    • Knowledge and technical ability to optimize workflows and improve development.

Work sample for submission:

A portfolio (can be sketches, illustrations, 3DCG, video, anything that showcases your ability). If the submitted material is not your personal work, then please write concretely about the work you were responsible for. If it's some work that's already been published or sold, please include something that will help with understanding the content, if at all possible.


Game planners at Atlus are split into two categories: System planners mainly do things like create the game's rules, mechanics (systems) and do balance adjustments, and Scenario planners mainly draw up scenarios ("scenes" in the game, more like script or screenplay writing work).

There's a posting for system planners, one for scenario planners (experienced), and one for scenario planners (inexperienced) that's specifically for the Persona team.

The system planner posting is comparatively light on details, but that last scenario planner one sounds interesting. 

Scenario planner (no experience), for the Persona team

This role involves creating (writing) game scenarios, as well as creating the game data for things like event scenes and dialogue lines.

This listing is specifically for people with no experience producing scenarios. If you do have experience in commercial scenario creation (not limited to the gaming industry), please apply for the other "scenario planner" posting.
After joining the company, responsibilities for system and scenario planning work may change depending on your abilities and the actual situation at that time.
Also, this posting is only for the Persona team.


  • Someone who can construct detailed worlds, characters, and scenarios (for use in a game)
  • Someone who has completed and released some kind of creative work into the world, for commercial purposes or otherwise.


  • Someone who can take initiative and be proactive about sharing ideas day-to-day, in order to make the game being developed more interesting.
  • Someone who has experience playing the Persona series numbered titles.

Work sample for submission:

  • 1 or 2 things you've made in the past
  • Homework task: Create a scenario starring characters from the Persona series that could be used in a game.
    • The outline/theme (1-2 pages A4 size)
    • The plot (summary) (1-5 pages, A4 size)
    • A specific scene or scenes (some key scene, like the climax or a highlight) that takes place in the work (minimum one scene)

All of the pay ranges listed for these development positions are the same as mentioned in Part 1, 213,000~440,000 yen per month, though the Director listing is a bit higher at 230,000~526,000. The two non-development positions currently listed are also higher: Project Manager is 238,000~456,000 and Music Licensing Lead (音楽ライセンス担当) is 238,000~545,000. These are just ballpark estimates though. Each listing says the range is an example, and salary will be decided based on company guidelines, taking into account the applicant's skills and experience.

They also note for all positions that everyone joins the company as contract employees, then they have the opportunity to convert to regular, full-time employees later, 0.5 ~ 3 years after joining.

At the bottom of each posting is a link to apply.

「PROJECT Re FANTASY - A Fool's Journey Begins」

Finally, the main recruiting site also has a banner linking to a separate site where they're doing "large-scale recruiting" for a new RPG, "PROJECT Re FANTASY."

Atlus's internal "Studio Zero" team is working on this totally new project, led by Persona series veterans (who've written messages on this site). There's some concept videos and artwork hinting at their vision for this new fantasy RPG. 

There's also a half-hour "Golden Recruiting Special Program" video (uploaded August 31, 2017). It's aimed at recruiting staff from the gaming industry, and has an intro and outro by Midnight Venus, from the Golden Theater (Catherine series).

The video features conversations with lead creators Katsura Hashino, Shigenori Soejima, and Shoji Meguro about this new venture, as well as some words from other Atlus staff about what it's like to work there.

As for the actual jobs on this site, they list positions for programmers, designers, and planners (and part-time designers).

*Actively* recruiting for programmers!

 Mobile game development (iOS and Android) is listed as a desired skill for programmers, so it seems this new title is coming to smartphones? The other job descriptions are mostly the same as the ones on the main site above, but aside from the part-time designer position, these postings seem geared towards more experienced applicants. The pay range for these positions is also slightly higher: all have (estimated) salary 3,250,000~6,700,000 yen yearly (so 270,833~558,333 monthly). Working conditions, terms, and other details about these employment opportunities are also mostly the same as on the main recruiting site.

There's a few other snippets of text and news on the new project site, but I'll let you discover those for yourself. If you do decide to apply, good luck!

Saturday, April 10, 2021

Want to work at Atlus? Part 1: Recruiting Site Info

Last time we looked at a translation from the Sega Tech Blog, which ended with a note that Atlus is hiring, and interested readers should check out their careers page.

What if we did that? What would it take to get a job at Atlus?

This won't be a full translation since this kind of information is very subject to change, but it will provide a snapshot of what to expect if you ever want to navigate a Japanese company's careers site and apply for a job. Enjoy it!

Disclaimer: I have no connection to Atlus, I'm just taking a look as a curious surfer of the web. All pictures are from the linked recruiting pages, screenshotted early April 2021.

Catherine: Full Body on the wall, Morgana to the side, but front and center under the company logo is... Jack Frost Decarabia!

Here on the home page there's a slideshow of company images, as well as a slick promo video [3.9 MB webm], [105 MB mp4].

At the top, there's a few headers which are common to most recruiting sites. The MESSAGE page has messages to potential applicants from directors and executives about the company and its goals. The ABOUT page has basic facts (name, address, date founded) about the company, and a breakdown of their different departments. Atlus's also has some neat statistics, like the number of titles they've developed and sold, the gender and age distributions of employees, average company tenure, and average amount of overtime work per month (20 hours, which is pretty low for a Japanese company, that's probably why they publish it here.)

Atlus by numbers: over 200 million total copies sold, across 239 titles released (as of October 2019).

There's also a timeline chronicling the company's history.

The History of Atlus. 1989's "Puzzle Boy" ("Kwirk" in North America) was their first title under the Atlus brand.

The PEOPLE page has links to employee profiles (no names, just job titles) introducing what their role is like. There's 13 in total, for both development positions (like designer, programmer, sound composer) and non-development positions (like corporate, sales, licensing). The profiles have interviews, games the person has worked on, example workday schedules, and short Q&A sessions.

This project manager joined Atlus in 2008. His favorite character is Aigis (from Persona 3).

Most companies have some form of the pages mentioned above on their recruiting (or リクルート、or キャリアー、or 採用) site. Atlus's SPECIAL section links to a nice photo gallery of the office space they moved to in September 2018, and to "働くパパママ座談会", a roundtable talk session between "working Mamas and Papas" about what it's like being both parents and company employees.

One of the company meeting rooms

Finally we get to the RECRUIT section, which links to a 待遇・条件 page, giving more detailed information about working conditions and terms of employment, and a Q&A page with frequently asked questions related to hiring. Let's look at the conditions page first. on April 6, 2021

The first section notes that applicants are welcome to apply even if they don't have experience working in the game industry, but if you're not a native Japanese speaker, you need to have Japanese skills at JLPT N1 level (or equivalent). This is the same for nearly all Japanese game companies. Some companies say N2, some say N1, and some (Platinum Games) do also say "we will consider hiring highly experienced and skilled applicants who can communicate in English". But look at what else they say around that:

A couple more from other companies:

I don't think the JLPT is a very good measure of your ability to function in a native Japanese working environment, but that's a topic for a later post. The point is, if you don't know Japanese and you want to work at a Japanese company, you need to learn Japanese (many books have been written on how to do this).

Continuing down the 待遇・条件 page, there's more general employment information for mid-career and contract hires. Trial period for new employees is 6 months, base monthly salary for development positions is in the range of 213,000円~440,000円 (in USD, currently about $1927.62 ~ $3981.94), but for non-development positions the range is slightly higher. They also pay special allowances for late night overtime work, working on holidays, and commuting costs. Raises happen once a year (in April), bonuses are twice a year (June and December) and they've got some kind of "title incentive system" (maybe if the title you worked on does well you get a bigger bonus?). There's no specifics here, but as a general note, Japanese bonuses can be misleading. Sometimes it's unclear if the "bonus" is included in your estimated yearly compensation, or in addition to it. At some places, the company divides your yearly salary into 14 pieces, gives you one each month, then twice a year you get the last two pieces (depending on performance conditions), so it's not really anything extra on top of your expected yearly salary. This depends on the company, so read the fine print if possible.

Anyway, at Atlus, standard work days are 7.5 hours with 1 hour break, though exact hours can vary by position, everyone gets certain days off as well as annual paid vacation days... these kinds of details continue down the page.

Moving on to the Q&A page, which has 23 questions and answers about the application process and the working environment. 

If you aren't selected for a position, please wait at least one year before applying again to the same position. This applies for new graduate positions as well (and please refrain from applying for mid-career positions after you already applied for a new graduate position within the same year).

A lot of this page is repeat information from the previous page, or answering with policies standard for most companies, but there are a few interesting bits:
  • Overseas applicants are welcome, but they need to be able to communicate smoothly in Japanese and they will need to come to Japan for the final interview. 
  • Any information about student intern positions at Atlus will be posted on this recruiting site, or on their recruiting info Twitter account (@ATLUS_saiyo). 
  • For development-related positions, applicants can note which title or series they want to work on at the time of their application and this will be taken into consideration, but depending on suitability, they might start on a different project. Non-development positions (promotion, licensing) will work on various titles. 
  • For employee training and development, they have OJT (On-the-Job Training) for mid-career hires, and new graduates also spend a month in training with all the other new grads in Sega Group. 
  • Also, since Atlus is a part of Sega, employees can participate in other company events like SEGASAMMY College and Sega Development Conference. 

Last header: the ENTRY dropdown links to the same 4 employment categories as the recruiting homepage:
  1. 新卒採用、for new graduates (vocational school, university, graduate school). Hunting for and securing a post-graduation job is a Big Deal for Japanese university students, and this page reflects that. Usually students graduate in March, then start work in April. I'm writing this in early April, so most 2021 grads have just started work, and Atlus has already published application documents and guidelines for 2022 grads. On this page there's an example month-to-month schedule of the screening and interviewing process for different positions, and they're already accepting applications for 2022 programmer grads. There's also data from last year's new grad hires, including a monthly salary model: 2-year vocational school grads make the least (230,347円, around $2,100) and graduate school grads make the most (254,956円, around $2,325). Those numbers are for development positions (planner, designer, programmer) -- the numbers are slightly higher for non-development positions.
  2. 中途採用、for mid-career applicants (people who already have work experience). This is usually where most positions will be listed.
  3. アルバイト採用、for part-time or hourly positions. At time of writing, the only position listed here is デバッガー (debugger), basically playtesting games to find and report bugs.
  4. 障がい者採用、for people with disabilities. At time of writing, the only position listed is 一般事務アシスタント (general office assistant), an hourly position for administrative tasks.
Most Japanese companies big enough to have a dedicated recruiting website break down their employment opportunities into categories like these.

This post is getting long and we haven't even looked at any job postings yet! Those will be in Part 2 (link now updated).

Saturday, April 3, 2021

Finding Bugs Via Autoplay During Persona 5 Royal’s Development (Translation)

This is a translation from the Sega Tech Blog. In this post, Atlus programmer Takahiro Nowatari explains the system built during the development of Persona 5 Royal to automatically play through the game and find bugs. It’s interesting because he talks about things from an engineering perspective -- he goes over the problem requirements, time and resiliency constraints, result data, and the pros and cons of his approach. Enjoy it!

Note: This translation is for fan use only, and may not be accurate. Be cool, don’t repost without asking, link to this page, and credit Brando!

Original post (Japanese):

Finding Bugs Via Autoplay During Persona 5 Royal’s Development



Hi everyone, I’m Nowatari, a programmer at Atlus, and I’ll be your author for this entry of the Sega Tech Blog.

This time, I’d like to talk about how we implemented a system to automatically play and find bugs in Persona 5 Royal (P5R) while the game was still in development, and the results that it gave us. This post will be more about techniques devised for debugging work, rather than information about implementing the actual game.

That being said, I’ll be talking about the contents of P5R quite a lot, so if you haven’t played the game yet, I think it will help deepen your understanding if you’re able to do so before reading this.

[English site: ]

The Motivation for Implementing Autoplay

When I joined the company many years ago, bug detection was done by playing the game with a video recorder hooked up to the development hardware, and when a bug appeared, writing down in detail the sequence of events leading up to it in a bug report (on paper) and submitting that as a record of what happened.

These days, video recording features are integrated into the development tools themselves, and bug reports are managed via a Web-based ticketing system, so the whole environment has changed considerably since back then.

Not just methods to report bugs, but methods to find them have also changed. Before, testers would spend hours glued to the screen, manually playtesting to uncover bugs, but now there’s been a trend towards automating the things which can be tested mechanically.

The average playtime to complete P5R is approximately 100 hours, so even if someone devoted all of their working hours to just playing through the game, it would still take close to three weeks for them to reach the end.

That being the situation, I wanted to somehow increase the amount of hours we could spend playtesting the game, even just a little bit. If possible, I wanted to create some mechanism that would allow us to validate the game all the way through to the ending. From those ideas, I decided to implement a system that would automatically play through the game and test it for us, without human intervention.

On Implementing Autoplay

There were a few problems standing in the way of implementing autoplay.
  1. No dedicated hours were allotted for this project, so we couldn’t ask others to do work for it.
  2. For the same reason, we couldn’t spend a lot of time fixing and fine-tuning the autoplay system itself.
About #1, for example, even if I wanted to ask the designers or planners to do something to help support this system, their hands were already full with tasks from their own areas of responsibility, so I couldn’t ask them to take on additional work.

For #2 as well, I myself was responsible for the game’s everyday life and dungeon parts (the parts where you control the player and move around freely), so it wasn’t like I’d have plenty of time after making the autoplay system to update it in response to specification changes from the design and planning side.

Under these circumstances, the final system:
  • Should rely on specialized data as little as possible, since there was no time to create it.
  • Should be able to handle specification changes and adjustments [to the main game], since there was no time for fine-tuning it.
I started working on it with this kind of concept in mind.

Also, as implementation objectives:
  • It should be able to play the game automatically from beginning to end, without human interaction.
  • By adding random elements, it should be able to check as many areas of the game as possible.
Aiming for something that could achieve these goals, I started creating the autoplay system.

The Implementation

Before explaining the implementation details, allow me to briefly explain some of the systems in this game.

One of the characteristic features in the Persona games is the calendar system.

The calendar system

In the game, everything takes place within a one year timespan, so as the calendar days go by, the game moves forward. In the extreme case, even if the player lazily just went straight home and slept every day, they would still get closer to the ending.

Good things come to those who wait?

...But of course, just doing that is no way to make progress. The player does have to beat dungeons and defeat bosses at fixed intervals in order to beat the game. Also, just sleeping the days away is no way to find bugs either, so I also wanted to make the autoplay system trigger various in-game events as much as possible. For that, we needed a mechanism to make the player character go not just to bed, but to all sorts of locations.

So the question here became: how do we make the player character move to target locations and progress through the game?

For the dungeon parts, progressing through the game means solving puzzles and gimmicks and arriving at the boss. For the daily life parts, it means talking to NPCs to trigger events, going to the batting center, and activities like that. By completing these kinds of events, the calendar days pass by and the player can reach the ending without getting a game over.

As for the mechanism for moving to a target location, the very first thing that came to mind was replaying someone’s actual playthrough data, or possibly designating those sorts of movements using development tools. But, implementing that wasn’t possible because of the circumstances I mentioned earlier (no time to prepare special data for autoplay purposes).

Because of that, I decided to implement a rule-based movement system which wouldn’t require any extra data to be created.

The core of this rule-based logic is a mechanism to search for and activate nearby event hits.

Here, the term “event hit” refers to a region in-game that the player can access and trigger some event from.

Examples of event hits
  • Talk Hit for talking to NPCs
  • Check Hit for checking treasure chests and doors
  • Go-to Hit for going to a different area
  • ...etc
By using these event hit regions as the target locations, we’re able to make the player character move to them and trigger the aforementioned events that move the game forward, instead of just running around blindly.

In our implementation, we randomly search for locations the player can reach by moving in a straight line, without being blocked by obstacles, focusing on the area directly in front of them (the fan-shaped area in front of the player in the following screenshot).

Searching for event hits

However, with just this, the movement system had some trouble when there weren’t any event hits nearby, so we added one more rule.

That additional rule involves the use of a heatmap, tracking where the player has already been within a certain time period (the red-outlined blocks in the following screenshot).

The heatmap

We add this time-limited wandering history to the area the player has already walked around (in this case, using 100cm cubes). By doing so, we’re able to establish this rule: places with no heatmap are places the player hasn’t walked around (at least not recently).

With this rule, if we’re not able to find any event hits, we search the surrounding space for areas with no heatmap (blocks), and by using those areas as target locations, the player character is able to seek out and walk around places they haven’t been yet.

Example movement during autoplay

We move towards these unexplored areas that have no heatmap, without getting stuck even in winding passageways, and when we find an event hit we go and examine it. The general process should be clear now, I think.

Unexplored areas have a high probability of leading to event hits we haven’t triggered yet, and when we do trigger them, we get more unexplored areas, then we move there and find more unexplored areas... It creates this loop where we’re able to explore broader areas and go further and further, moving completely automatically.

Some other, minor adjustments were also made, but overall the two movement rules mentioned above enable the player character to navigate unexplored areas, and by triggering the event hits found along the way, they’re eventually able to reach the dungeon’s boss.

The daily life parts of the game don’t have one target destination like the final area of a dungeon, but with the previous mechanisms implemented, we made the system able to trigger all sorts of events in those parts as well, by using similar rules for interacting with various NPCs and in-game facilities.

With everything so far in place, we were able to handle the other parts of the game that don’t involve player movement (like battles and dialogue choices) with random input or something like that to progress, and eventually the system was able to reach the game’s ending.

The event hits used as target locations in our autoplay system were already in the game as usable data, so we were able to implement the system so that it didn’t need (hardly) any additional data, and didn’t need fixing after changes were made to the main game.

Because of that, from the middle of development to just before mastering, we started running the autoplay system on a development machine that wasn’t in use (such as when everyone left the office at the end of the day), and even though various changes were made [to the main game], the autoplay system itself was able to keep running with almost no adjustments.

Practical Results

We tested the game using this autoplay system, mainly checking for bugs which could cause the game to hang or make it impossible for the player to progress.

As a result, out of all the bug reports for those highest priority must-fix issues, the autoplay system was able to find about 5% of them.

This number might seem a little low, but considering that it only counts recorded bug tickets, I think the percentage is a little higher if we include other issues that the system discovered midway through development but weren’t recorded as bug reports.

Also, a lot of the bugs found by automatic play involved timing or methods difficult to reproduce by hand, so the fact that it discovered bugs which we couldn’t have predicted was another big win.
  • In battle, doing an All-Out Attack at a specific timing leaves the player unable to progress
  • Loading data while the game is saving causes the game to freeze
  • Doing a persona fusion with a specific timing and procedure causes the game to freeze
  • Etc...
Starting from the middle of the game’s development, one development machine was always used for the autoplay system, and it ran pretty much 24 hours a day. As a result, when the final development deadline arrived, the system had accumulated over 2000 hours of play time (roughly 250 man-days of work!!).


We were able to implement this autoplay system in a way that required almost no additional specialized data, and almost no adjustments to address changes in the main game.

It might seem like our implementation method had a lot of merits, but of course it also had some downsides too.
  • Since we used random elements, it couldn’t check every part of the game exhaustively
  • Similarly, because we used lots of random operations, it couldn’t check things which required complex conditions to be met
  • The player character’s movement wasn’t very efficient, so each playthrough took around 300 hours to finish
These are some of the problems and areas for improvement we felt after actually using the system.

As a follow-up exercise, I’d like to think about how to solve these problems and come up with ways to check the game more efficiently, and in further detail.

At Atlus, we’re looking for people interested in tackling these kinds of challenges. If you are interested, please have a look at the page linked below.

Saturday, March 27, 2021

Brando’s Guide to Food Delivery Services in Tokyo

(as of March 2021)

Food delivery services have been BOOMING in Tokyo during the Coronavirus pandemic. At least near Shibuya, you can’t go out to check your mailbox without seeing a Chompy biker or an Uber Eats moped whizzing by. Then when you do check your mailbox there’s a flyer in there for 1000 yen off your first order with some other service.

It feels like gangs having a turf war. Restaurant storefronts are tagged with colorful stickers showing which of the services deliver for them. You’ve got the Wolt guys biking around in their bright blue jackets, but they don’t support certain chains -- that’s Demaecan’s territory, shown by the red stickers out front. Each service covers different restaurants and different regions, but there’s overlap, so many restaurants are available from more than one. They also each have their own special promotions (50% off certain curry restaurants until calendar date X, ¥1000 off on some random Tuesday, things like that).

The good news for us normal people is, they’re all competing to win our business, and they’re giving out a ton of free coupons to try and get us hooked. I don’t know whose cash they’re burning through, but with first time user and referral discounts, you can save a ton on some food delivery just by signing up for each of the different services.

Here’s a rundown of the different services I’ve used. Not all of them have English available, but once you’ve used one food delivery app the others are pretty much the same. Disclaimer: I don’t have any connection to any of these companies, but I will include referral codes, so if you do sign up for a service and input the provided code, we both get some kind of credit or coupon. Free money!

Uber Eats

The most famous one. Their bikers are EVERYWHERE, so it seems like they have the most users. They also have the “Eats Pass”: Pay ¥980 per month and get free delivery (usually around ¥300) on orders of ¥1200 or more. You can free trial the pass for 30 days, just don’t forget that it will auto-renew unless you cancel it.

Referral promo code, currently good for a ¥1800 discount: eats-brandone16uue


This one comes from Japan. Apparently their staff are “ベテラン配達員による丁寧な配達” (“veteran deliverpeople, for a more courteous delivery”), so maybe they’re more selective about who can join their crew? I did get the cutest little handwritten note from one of their orders.

They have a service called らくとく便 (“rakutoku bin”), where if you order from participating restaurants before a certain time, your order will arrive within a later time window with free delivery. For lunch, order before 11:00 and it will arrive between 12:00 and 12:30. Helps them batch orders more efficiently, I guess. They used to offer this service for dinner, but not now, unfortunately. It probably got too popular, and they couldn’t fulfill all of the orders in time (if your food arrives late, they give you additional Chompy credit as an apology). Still a pretty good deal since you don’t need to buy any monthly pass to use this option.

Referral promo code, currently good for a ¥1000 discount: XPCJ8E


Also from Japan, they seem a bit more “commercial”. They offer delivery for chains more, and run ads on TV with Hamada Masatoshi from Downtown. They have a membership system where the more times the order, the higher your rank goes and you get special deals based on your rank. I haven’t used Demaecan enough to climb the ranks, but I love that the progression goes “Bronze”, “Silver”, “Gold”, and finally, “God”.


A Finnish company, delivery staff have bright blue jackets and boxes. Doesn’t seem like they have any special programs right now like a pass or a “God” rank, but they’ve got a functional app and customer support. One time a restaurant left out an item from my order, so I messaged their customer support chat from the app and the rep refunded me the price of the item plus a little extra in Wolt credit real quick.

Referral promo code, currently good for ¥500 off of each of your first 3 orders: K5EU8



Another one from Japan, another serviceable app. Used them a couple times, don’t know what else to say, didn’t really leave an impression one way or the other (just look at their app name). They’ve even got a “Menu Pass” that’s the exact same price as the Uber Eats pass (¥980 per month, 30 day free trial). Menu’s pass gives ¥300 off delivery fees, 5% off all items, and some kind of special coupons. Even if they don’t bring anything original to the table, discounts are discounts!

Referral promo code, currently for ¥2000 discount: tpg-7tvdr4 , or go to


This one was around before the big food delivery boom, but they’re similar enough to include here. No delivery fee, but each restaurant sets a minimum amount you have to spend. They support both English and Japanese. I don’t know how the app is, I’ve always just used the website.

The End

Those are just the ones I’ve personally used, but there are even more! Omakase, Kurumeshi Bento, and I just saw new ads this week for ones called FOODNEKO, foodpanda and X TABLE. Maybe this post will need a follow-up.

Featured Post

Thoughts on Playdate’s Pulp

Playdate launched! The console. Everyone’s attention is on the tiny yellow box with the kooky crank, but I’m more excited by what Panic has ...

Popular Posts