How AI Ruined Picross S++: A Retrospective
Making a game that cannot be unmade
Disclaimer
I feel the need to open this retrospective with a disclaimer: I used AI as part of the development process for Picross S++. Specifically, I used local models for three purposes:
- To assist in locating data in game ROMs
- To write test cases for the site's features
- To speed up debugging after the site went live
I feel the need to start with this disclaimer because the use of those tools has ultimately stained my view on the project. And I promise I'll get to that, and my complicated feelings on whether the project should have even existed to begin with. But to get to that, we have to go back to the beginning.
The Idea
The idea was simple. I love Picross, a series of nonogram puzzle games developed by Jupiter Corporation in collaboration with Nintendo. A nonogram is a puzzle in which a grid of cells is filled in based on numbers at the edge of the grid corresponding to each row and column.
There are a ton of nonogram games out there, but the Picross series has always been on another level. Their presentation is fun and playful, the puzzles are incredibly consistent in both their quality and quantity. I first got into Picross with Pictologia Final Fantasy, before picking up Mario's Picross on the Game Boy and eventually, falling hard into the series with the Picross S games on Nintendo Switch.
For the longest time, I've been searching for a good browser-based Picross game, something that I could play at work or in a waiting room that feels just as good as Picross. But recently, after having spent weeks learning ROMhacking in order to make a Dragon Quest hack (and I promise that we'll get back to this article as well, which might seem inconsistent with my use of AI on this project), and learning to mod a more recent title in Final Fantasy Resonance, it hit me: I could do it myself.
Picross S++ was never intended to be a massive, polished project and it wasn't intended to be public, either. I built up a simple Picross engine, gave it enough polish to feel good on a phone and a mouse, and started with puzzles from Mario's Picross, initially copied by hand before looking into the ROM data directly. I wrote a script that could convert the puzzles into the format I was using for the site, and before I knew it one puzzle turned into two, turned into three, turned into 2561.
The Addiction of Scope
But I set my sights on a different game, Picross S. At time of writing, the Picross S series consists of 24 games—including ports of the 3DS' Picross e series, 15 without—each containing 150 standard Picross puzzles. It took about as much effort to get from one puzzle in Mario's Picross to the entire game, and what would happen if I went from one game to several? I'd have more puzzles than I could ever deal with.
It turned out that Picross S's puzzles were also quite easy to extract. While Picross S3 slightly changed the way puzzle files were packaged—inside of script objects instead of plaintext files—and there were minor differences between games, there were enough similarities to bang out game after game, puzzle after puzzle, watching the total count go up and up. It's an addicting feeling, really, to see the scale of a project get bigger and bigger while the work itself remains fairly straight forward: dig through each game's files, pull out the puzzles.
It's worth reiterating that at this point no AI had been used, and I had no intentions of making this project public.
At this point, I decided to make the site prettier. I love frontend design, though I have a tendency towards certain styles. Trying to create an interface similar to the Picross S games seemed like a fun and interesting challenge, and the games' assets were at my disposal.
While I was pretty happy with what I'd been making, there was still an urge in the back of my mind, gnawing at me. I could add more. The 3DS' Picross e games were covered by Picross S+, but the system still contained a number of other Picross titles, including Pictologia Final Fantasy. And to my luck, after spending some time digging through their files, the formats turned out to be fairly similar. I was hit with an idea: What if I included every Picross game? But I ultimately decided to focus more on the site's design instead, and on fleshing out what was already there. I polished the UI and UX into something I was happy with, and even decided to cut Mario's Picross from the plan to focus on replicating the Picross S games as closely as possible.
It was around this time that I started sending builds of the game to friends, not to formally test as much as to try out. Friends who had played Picross absolutely loved the idea as a more convenient way to play the game, and friends who hadn't got hooked. I went back to the Picross S games to extract puzzles from the other game modes, with no clear plan on implementing them. I also looked into other Picross games, most notably from the Super Nintendo. It was at this moment that I made my first fatal mistake: I chose to use AI.
AI - Part One
I should reiterate that at this point I had no plans to publicly release the game. While I've railed against the ways in which AI has seeped into the game industry and open source projects in the past, I've never been anything of an anti-AI hardliner. Open source projects and fan communities have been tormented by a deluge of low effort projects, and the environmental impact and theft are undeniable. But in a world where these models already exist, there's a part of me that wants to find a use for them, a silver lining to the future we've been thrust into.
One of the core issues with AI models is trust. At their core these models are fundamentally black boxes, and it's impossible to trust in the accuracy of their work. But locating puzzle, sprite, and palette data in a ROM seemed like low-stakes, easily-verifiable work, and I elected to use a local model to minimize the negative impact—a public plane to a private jet. And the results were largely helpful, allowing me to quickly locate the data I needed in order to keep pulling out puzzles en masse. At this point I wasn't even sure if I'd use the data, if it would fit well with the Picross S games. But there's still something satisfying about seeing the puzzle count go up. At this point, I made my second mistake: I promised to release the game.2
While I'd been posting about my experiences developing the game1, I'd largely focused on the visual elements rather than the technical. Anything beyond the Picross S game's standard Picross puzzles was entirely experimental, and consequentially I hadn't thought much of the AI use. It was a useful tool, one that had served its' purpose, and that was it.
What I had been thinking about was piracy. From the friends I'd shown the game to, having an easy way to experience these puzzles had gotten them hooked where Switch exclusivity never would have, and multiple friends told me that it made them interested in purchasing the games. And it was that idea that the project was ultimately centered around, and the justification for every regretful decision that followed.
The Rush
I re-implemented Mario's Picross, adding in the region-exclusive puzzles. I started experimenting with my own custom puzzles by making custom puzzle files by hand, an idea that would eventually evolve into a fully-fledged level editor. I let users pick an accent color straight out of the Nintendo DS options menu, because it seemed like a fun addition. And I continued adding Picross games. I continued to use the AI model, justifying the choice with the idea that none of its' work would end up in the final product, and it was ultimately me who it was taking work away from. And I was able to get all of the puzzles out, until I had 44 games to work with.
There was, of course, still more work to be done. I began implementing some of the other Picross modes—starting with Color Picross, my favorite, and ending with Mega Picross, my least favorite. My friend Emma created a friend system that seemed like a perfect fit, and we worked together to create a level editor.
In many ways, it was a blur. The promise of a public release felt like a pressure to deliver, and each new addition brought the project one step closer to completion. To help with development, we started using AI generated test cases, with similar justifications: they wouldn't make it into the final game, and we were still doing the work. And while many of them were junk or required retooling, enough of them worked well enough to keep development running smoothly, to keep the rush of progress going.
There were, of course, many things that didn't make it in. While I'd extracted the multiplayer-only puzzles from Picross DS and the battle mode puzzles from Pictologia Final Fantasy, their modes were too complicated to include in an additional release, although we ultimately chose to keep them in anyway without the dedicated modes. But in choosing to cut those features, we were able to keep the momentum of the project going.
The Trailer
It was around this time that I decided to make a trailer. The logic was simple: The point of the game was to get people to try Picross, so how can we make it seem exciting?
I'm very proud of the ultimate result (even if the production itself was a bit of an ordeal). Once again I need to thank Emma for helping write scripts to automatically play through and record puzzles so we could work on the game instead of just playing it. But as I was working on the trailer, I couldn't help but feel incredibly conflicted about the whole thing.
The goal with the trailer, as had been with the project, was to be polished enough to look professional, to stand alongside the original Picross S games as a comparable experience. But ultimately, we were repackaging someone else's work and releasing it for free, with the vague idea that someone who gets into the game might pickup the originals, games with puzzles they can already play.
As I worked on the trailer, a link to the game had made its' way onto Bluesky, and although it was removed quickly, a number of people started trying out the game. And the feedback was exactly what I'd hoped for! People who had never played Picross getting super into the games, and people who had played before having fun revisiting old puzzles and trying out games they'd never played. While there were still tweaks I wanted to make, features I wanted to add, we made a decision: once the trailer was done, we would release the game.
While the video rendered, I added links to purchase the original games, and a disclaimer to support the original release. I told myself that this was enough, that the project likely wouldn't escape our close circles anyway. And then it was rendered, and with a few finishing touches from the feedback we received, it was ready.
There was just one question left: AI Disclosure. While I hadn't thought much about the use of AI in the moment—it had always felt justified—as I waited for the video to finish rendering I knew that I wanted to be open about it, even when nothing was in the final product. I knew that I wanted to write the piece that would eventually become this piece, explaining what I had used and why, alongside many of the other design considerations that had gone into the project. But in the rush to finish the project, that piece went unwritten, and the site went live.
Release
I spent the first hour or so overwhelmed by the instant response, although it had largely stayed in my circles as I'd expected. I went to bed, intending to write up a disclosure when I woke up; it wasn't in the final product.
And when I woke up, the site had gotten more attention than I could have ever imagined. It already started to spread outside of my circles. I tried to keep up with feedback, note down any bugs to address, and in the process giving the proper disclosure slipped through the cracks. On some level I think I just didn't want to.
I went to work, but continued to work on the site. I added a few requested features, and tried to patch as many bugs as I could. But the project started getting more and more attention, and with it a couple of people asking about AI use. I knew I needed to write something up, when the update I'd released had completely broken the game for some users.
I was desperate, I was overwhelmed, trying to juggle the launch of a website with my day-to-day responsibilities at work. And I ultimately made a decision, one that kind of broke me: I used AI to fix the bug.
The Stain
As the AI model searched for the bug, I posted an initial AI disclosure on Bluesky3. And when I was done, the model had been able to identify the bug, and I was able to fix it quickly. The site was saved, but my conscience was not. The lingering guilt, around how the site was a walking copyright violation, about my decision to use AI on the project to save a few hours of work, came crashing down all at once. For a moment, I almost pulled the plug.
Honestly, part of me still wants to.
When I justified my original use of AI, I thought about trust. But there's another kind of trust, not between developer and machine, but between developer and user. Trust in the purity of a project, in the intentions of its' developers. And AI fundamentally violates that trust, because it presents a slippery slope that immediately complicates things.
Even when the use of AI was only to locate data, even when that work had not made its' way into the final product, the use of AI raises a number of complicated questions with subjective answers. No two people will agree on where to draw the line, where too much AI use turns a project into slop.
As I write this piece, a number of people have reached out and told me that they still enjoy the project, that they're having fun with it, and think that the use of AI was acceptable. And I am happy for them! I'm proud of the work that I made, and how everything came together, even if I'm ultimately conflicted about the final result. But in using AI, I've ultimately forced every user who comes across the project to ask themselves the same question: are they okay with this?
It's a stain on the project that will never go away. Even if I could go back to before the first use of AI and completely rebuild the project by hand, it would still be there. I'm still not sure what to do with the site, right now it's still up. Part of me hopes that Nintendo takes it down, another part of me feels like a coward for wanting that and not doing it myself. Another part of me wants to keep going, to prove that the site is more than its' use of AI, to finally implement Pictologia Final Fantasy's battle mode and Picross DS' online multiplayer. If you're reading this in the future, you'll be able to see what I do with the project, and you'll be able to judge me for it. But ultimately, even a single use of AI has complicated this entire project to the point in which doing anything is the wrong move, and so is doing nothing.
The narrative I've presented in this piece is very much biased, one that I've simplified and shaped to bring us to this moment, one where I still don't know how to feel. Was the entire project a mistake? I'm still proud of the work, and how it's gotten others into a series I've loved. Was the use of AI a mistake? Absolutely, and there's no justification that can fix that.2
Conclusion
There's a hypothetical uncomplicated version of this project, one that does not use AI and that requires you to provide your own ROMs to extract the files from. But it's a world in which the project only appeals to existing fans, and while I could have made my own puzzles, it's the spectacle of scale and the legitimacy of the source material that ultimately drew people in here. Much like generative AI, the best possible outcome would be for it to have never existed in the first place, and the simplicity that comes with that.
Ultimately, I'm glad that I made Picross S++. I am still proud of the project, of the work we put into it, and the reception it's received in getting people into the series. And while my feelings on the game's piracy are complicated and in retrospect the project would have worked just as well without any games available on modern platforms, I do think that in this case the game justifies these complications in the response its' received.
But I do unconditionally regret the use of generative AI, and have no plans to use it again in the future. When I talked about Yuji Horii's AI slop game I spent a lot of time talking about the limitations of AI, and how it could not create art. But at the time, I still believed that AI could be a useful (if ethically questionable) tool in the right contexts, that there was some light inside Pandora's box. But after using it for this project, I no longer believe this to be the case, that any use of AI to create art shifts the focus from that art onto the use of AI, and permanently marking the final project.
I made a lot of mistakes working on Picross S++, let myself get overwhelmed by the attention and excitement around the project, and ultimately made something that can never be unmade, a cursed project that I will never escape. And I will likely make more mistakes in the future—both regarding this project's impossible future and in future projects. But I never intend on using AI again.