Thousands of colorful points of light lazily drift and fade in and out, as the viewer floats ever forward across an expansive dreamscape.

hi there.

My name's Ricky.

I design and code.

Let's build something incredible.

things i've done.

Cave Story HTML5

Cave Story HTML5

Cave Story is a free 2004 hit indie title by one developer: Daisuke Amaya. I love the game's blend of exploration and action gameplay.

In September 2011, I was itching for a new hobby project, and web browsers supported a lot of stuff. WebGL, Web Audio, gamepads and more made games a real possibility on the web platform.

I found an independent clone of Cave Story's game engine called NXEngine, written in C++. So, I decided to try to get it working in a web browser!

Three stacked screenshots showing off various portions of the game.

I learned a lot of things working on this project. To start, it involved manually porting tens of thousands of lines of C++ to JavaScript – something I'd never attempted. This was also the first time I used WebGL, and the first time I synthesized audio. I'd never worked with game loops or scripting systems before either.

The process involved first trying to run the C++ files as JavaScript. I would fix whatever syntax errors appeared, re-run the code, and repeat. As I did this, more and more of the logic would run in the browser. Eventually I got to a point where the game logic would run, but nothing drew to the screen. Then I wrote code to bridge SDL calls so they'd draw graphics, play sounds, and accept input. After that the game was playable, but buggy, so I spent many weeks fixing each bug I ran into, one by one, as I played through the game. Anything that didn't match the original game needed fixing.

After months of work in my spare time, all by myself, the game was playable from the title screen right up to the end credits.

I aimed to deliver a flawless port of Cave Story for the web platform that fans could enjoy anytime, without installing it. A port which showed off the raw capabilities and performance of web browsers. A port which you could run on a laptop without spinning the fans up.

The final result speaks for itself. Even in 2012 and on a modest system, the game ran at a flawless 60 frames per second. And, thanks to huge leaps in mobile performance, it's possible to play it on some unexpected hardware...

I'd love to end this article by linking to the game, but I unfortunately wasn't able to release this work due to licensing constraints.


I loved working on this project, because it taught me about tons of software engineering concepts and challenges. So! Do you have a moonshot project like this that I can learn even more from? If so, please get in touch!

Heroic painting of the protagonist as seen from behind. Scarf flapping in the wind, he gazes upward, holding the Blade in one hand and the Polar Star in the other.

what i can do.

  • 3D modeling
  • After Effects
  • Blender
  • brainstorming
  • color management
  • design critique
  • design systems
  • Figma
  • graphic design
  • icon design
  • Illustrator
  • image optimization
  • interaction design
  • photography
  • Photoshop
  • prototyping
  • responsive design
  • Sketch
  • UX design
  • UI design
  • user testing
  • visual design
  • wireframing
  • Auto Layout (Xcode)
  • babel
  • CSS
  • code review
  • docker-compose
  • Docker
  • eslint
  • Express.js
  • Framer Motion
  • Git
  • GitHub Actions
  • GLSL
  • HTML
  • JavaScript (vanilla)
  • Markdown
  • Next.js
  • Node
  • npm/yarn
  • PostCSS
  • Puppeteer
  • react-three-fiber
  • React
  • Sass
  • SQL
  • stylelint
  • Swift
  • SwiftUI
  • three.js
  • WebGL
  • Webpack

more about me.

Portrait photo of Ricky Romero

My name's Ricky Romero.

I'm a designer and engineer in the scenic Bay Area of California. I've worked in web design and development (mobile and desktop) for over 15 years, and I'm dipping my toes in Swift and WebGL now. I've designed for both product and marketing teams, and done both visual and interaction design. I've also written product and marketing code for use in production.

I've produced my best work in roles leveraging both my design and engineering talents. However, I can specialize in design only when needed.

In my spare time I like to take photos, build small hobby projects, and play video games (Nintendo for life).

Follow me on Dribbble and GitHub!

let's go.

What do you want to build together?

I want to hear about it. Drop me a line.