Inspiration
We made Rogue Ralphy for OpenAI Build Week and approached the week like a small game jam. We wanted to take Ralphy, our ghost in a cowboy hat, and build a real game around him instead of another short demo. Room-based roguelikes and pixel shooters gave us the basic direction. The part we cared about most was item stacking: finding an artifact should change how the weapon behaves, not add another invisible five percent bonus.
What it does
Rogue Ralphy is a browser-based arena roguelite. You control Ralphy, fight waves of enemies with a six-shot revolver, collect stat upgrades during combat, and choose an artifact after each round. The run ends with a fight against the Dead Sheriff. The game has 36 artifacts. They can split bullets, add homing, create Tesla arcs, pierce enemies, freeze targets, summon helpers, or make projectiles orbit and ricochet. We also built a Combat Lab where players can equip any combination, spawn enemies or test dummies, and inspect live damage and weapon stats.
How we built it
We built the game with TypeScript, Vite, Bun, and Canvas 2D. The simulation uses a fixed timestep, while movement has a little momentum to keep dodging loose and slippery. Ralphy carries six rounds and reloads automatically, which gives each fight a simple rhythm: shoot, move, reload, repeat. The artifact system is data-driven. Each artifact modifies the player, weapon, projectile, or hit event, so new effects can work together without a separate implementation for every combination. We used generated pixel art for Ralphy, enemies, projectiles, artifact icons, room props, effects, and the HUD.
Challenges we ran into
Artifact stacking took most of the engineering time. One bullet might split, home toward an enemy, pierce it, trigger an electric arc, ricochet from a wall, and apply a status effect. We had to decide the order of those events and prevent effects from triggering themselves forever. Visual clarity was another problem. Strong builds fill the arena with projectiles and effects, but the player still needs to see enemies, incoming attacks, and Ralphy’s position. We spent a lot of Build Week tuning effect sizes, colors, timing, and damage feedback instead of adding more mechanics.
Accomplishments that we're proud of
We finished a complete playable loop within the game-jam schedule: combat waves, rewards, artifact choices, stat pickups, and a boss fight. The game also runs in the browser, so anyone can start playing without installing anything. The Combat Lab became one of our favorite parts of the project. We first made it for debugging, then realized it was fun to use as a sandbox. It helped us test all 36 artifacts, reproduce broken combinations, and compare builds without playing through a full run each time.
What we learned
Generated art needs clear constraints. Asking for "a pixel-art cowboy ghost" was not enough. We had to specify the pixel scale, palette, background transparency, character proportions, animation frames, and sprite-sheet layout. We also added asset checks so a missing image would fail during development instead of appearing as an empty space in the game. We learned the same lesson on the code side. Item interactions become complicated much faster than expected, so the stacking model needs to exist early. Once that foundation worked, adding strange artifacts became much easier and a lot more fun.
What's next for Rogue Ralphy
We would like to turn the arena demo into a full run with procedural rooms, branching paths, shops, and more bosses. More enemy patterns and environmental hazards would give players a reason to change their build between runs. Audio is also high on the list. The revolver, reload, artifact triggers, and boss attacks all need stronger sound feedback. After that, we want to add permanent progression and more artifacts that create combinations we did not plan by hand.
Built With
- bun
- typescript
- vite

Log in or sign up for Devpost to join the conversation.