Rain over the amber-lit noir city of Glass Eden

Before the rain and amber light, there was a city made of links, a backpack with a knife, a girl waiting beyond one brave choice, and me, still learning that code could carry a story.

Around 2008, I spent one quarter on a course learning php. Asyncro was one of my school projects.

I called it a dating sim, and the game I was inspired by EVE Burst Error. It gave you two protagonists: Kojiroh Amagi, a private investigator whose career had already gone wrong, and Marina Hojo, an intelligence agent with a 99 percent success rate. Its Multi Sight system let you switch between them whenever you wanted, and it was not decoration. You would get stuck as one of them, switch to the other, learn or trigger the thing that mattered, and only then find the first path open.

Asyncro understood half of that. It understood that a conversation could be progress and that a place could hold a mood. What it did not understand yet was what it should ask the player to carry.

Asyncro made you carry a knife. What should a story game ask you to carry instead?

A small city in PHP

Asyncro began in a one-bedroom apartment with a view over the city. From there, the player could walk to the city square, visit the mall, enter a lounge, eat at a restaurant, take an unwise turn into a back alley, or wander through a place called the Garden of Eden. There was even an abandoned factory at the edge of the map.

It was not a passive story. Moving between rooms cost stamina. Sleeping restored it. Coffee helped. So did standing beneath a holy waterfall. The player carried items in a backpack and needed the right ones to open certain paths. A knife made it possible to confront the thugs in the alley. Money bought food and coffee. A mysterious artifact somehow provided the courage needed to order a drink.

There were minigames too. Hangman turned searching into a puzzle. Pig became a fight. High and Low decided the future of a date. In the course we had to incorporate our other projects into this last big project and since they were also small games, it made sense to make them into obstacles in the game.

That date was the heart of the game. The player met Sarah at the lounge. She spilled a drink, returned with a towel, and later offered dinner to make up for the ruined shirt. After the meal, the game handed their entire romantic future to a round of High and Low. Win, and some time passed before the two of you married and lived happily ever after.

The ending did not hedge its bets. Asyncro had found love, displayed a wedding photograph, and written The END. That was that.

Looking at it now, I can see every stage of learning inside it. PHP loaded the current room. MySQL held the descriptions, pictures, exits, requirements, actions, and dialogue. A remembered the player’s stamina and whatever had found its way into the backpack. The world was a set of database rows joined together until they felt like streets.

Some parts are rough. The dialogue is brief, the spelling sometimes runs ahead of itself, and the route from spilled drink to marriage is wonderfully direct. I do not want to laugh it away, though. There is something honest in how much I tried to fit into one school project. I was learning a programming language, but I was already using it to build atmosphere, exploration, little systems, and a relationship the player could step into.

The code aged, same as me but the feelings of those games did not.

Returning to Eden

When I returned to Asyncro, I did not want to tidy the PHP and pretend no time had passed. I wanted to reimagine it.

ASYNCRO 2008 / GLASS EDEN 2026
Asyncro
A knife
Items gated the map. High and Low decided a marriage in one hand. One ending, a wedding photograph, and The END.
Glass Eden
Six clues
Evidence gates the ending. High and Low is optional and pays out a detail. Three endings, none of them clean.

That is how Glass Eden began.

The old map is still faintly visible beneath the new city. There is an apartment, a square, a restaurant, an alley, a garden, and a factory. Sarah is here again, now Sarah Quinn, but she is no longer waiting to be won through one successful card game. She arrives at Elias Vane’s door in the rain because her brother Jonah has disappeared, and because Elias is one of the few people who might still listen to her.

One night, and five people who each hold a different piece of it. Sarah, who is not telling Elias everything. Jonah, missing but not silent. Mara Voss, a reporter with her own reasons for what she kept. Dr. Ilya Ward, a winter garden caretaker whose cabin holds more than seed trays. Dorian Pike, who would prefer that certain paperwork stay unexamined.

I will not lay the night out beat by beat here. The shape of it is the part worth describing.

WHAT THE NIGHT ASKS OF YOU
01
Listen
Someone at the door has a version of events. It is not the whole one.
02
Read the city
Notice boards, plaques and receipts say more than the people do.
03
Compare
Paper against memory. The two do not always agree.
04
Decide
Not who to love. What survives the morning.

The backpack became a case file. The route requirements became questions of evidence. The minigames stayed, but they changed jobs, and that turned out to be the whole point.

Fourteen clues are written. Six of them have to be in the case file before the night can end honestly, and trust has a threshold of its own. Love is no longer a prize waiting at the end of the correct path. It is part of the evidence.

There are three endings and none of them lets everyone off. I am not going to summarise them, because the interesting thing about all three is that they are earned rather than awarded. What I will say is that one of them is reachable by being certain, and that it charges the most. I wanted at least one path where conviction has a price and the game does not soften it afterwards.

The machinery, and what it stopped needing

Glass Eden no longer needs PHP or MySQL. The scenes, choices, clues, items, puzzles, and endings live in readable JSON files, and the game runs in the browser from plain JavaScript modules. That makes it easier to preserve, and much easier to keep writing. The story is not trapped inside the machinery that presents it.

The music is MIDI, synthesized in the browser rather than streamed, which feels like the right inheritance from a 1995 chiptune score. Twelve short pieces, one per place, with titles that carry as much of the mood as the notes do: Tramlines in the Rain for the square, The Blind Camera for the alley, Coffee at the Night Window for the restaurant, Dates Instead of Names for the archive, and What the River Keeps for the dawn.

WHAT IS IN THE FILES

Glass Eden by the numbers

Every one of these lives in a readable file rather than a database row, which is the main reason the project is still editable.
Backgrounds
13 plates at 1600x900
Cast
5 on-screen characters, 3 poses each; Elias is never shown
Clues
14 written, 6 required for an honest ending
Puzzles
4, one of them optional
Endings
3
Score
12 MIDI pieces synthesized locally

Three poses per character rather than a full expression sheet was a deliberate limit. Neutral, guarded, vulnerable is enough vocabulary for a story about people deciding how much to admit. The artwork was generated and then processed by a build script that crops each identity-locked pose sheet onto a padded transparent canvas and validates dimensions and alpha. The prompts and the regeneration procedure are committed alongside the assets, which matters more to me than pretending a solo project drew thirteen backgrounds by hand.

Enter Glass Eden

Open Glass Eden in a full-screen page

Progress saves in the browser automatically. Music and sound are optional and begin only after pressing Begin. There are no timers and no failure states on the puzzles, because the tension is meant to come from what you decide to believe, not from your reflexes. It is a game made for reading, noticing, and choosing what survives.

Glass Eden is not an attempt to hide the beginner who made Asyncro. It is a conversation with him. He had a quarter of PHP, a database full of rooms, and an uncomplicated belief that a story could make code feel alive. He was right about that.

So, what should a story game ask you to carry?

Not a knife. Asyncro handed a marriage to one lucky card because carrying an object was the only kind of progress it knew how to model. EVE Burst Error had already shown me the better answer thirteen years before I wrote a line of PHP: the thing worth carrying between rooms is what you know. Glass Eden finally asks for that, and then charges for it. By the end you are holding more than you expected to, and the last thing the night wants from you is not courage or a winning hand. It is a decision about which of it you are willing to make public, knowing somebody pays either way.

The old city is still here, beneath the rain and newer names. Sarah waits at another door, not to be won, but heard. I kept the path between the rooms. I changed what the journey asks of me.


Buy Me a Coffee