• Arranging Mega Man tiles with Block-Swapping MCMC

    Discrete Markov Random Fields, or Undirected Graphical Models, can be sampled from using Gibbs Sampling and approximately optimized with Simulated Annealing (a family of algorithms which often employ Gibbs Sampling). Gibbs sampling unfortunately lacks the ability to deal with one-of-each constraints over the graph. In this post, I show how it is possible to enforce the one-of-each constraint by swapping variables (rather than resampling them conditioned under a Markov blanket). This can be applied to optimizing tileset palette arrangements.

    Continue Reading.


  • Improved Controls for Castlevania 1

    Previously I’ve written about how Castlevania 3 has an outdated control scheme and how I hacked it to have more modern controls. Today I was able to do the same for the original NES Castlevania!

    Continue Reading.


  • ipsnect, an IPS patch inspector

    Today while trying to track down a stray byte I accidentally edited in a binary file I’m hacking, I decided to write my own utility to help in the endeavour.

    Continue Reading.


  • Very Short Guide to Git

    I’ve been introducing lots of first-timers to git recently and I haven’t been able to find any good guides that are both (a) short and (b) simple. Here’s an attempt.

    Continue Reading.


  • Assembly for the NES 6502 processor (Hacking Castlevania)

    AKA The Process of Making a ROMhack (it’s not that hard)

    (In my last post, I talked about how a lot of NES games suffered from having bad control schemes. In this post, I’ll explain the technical details of hacking a game to improve its control scheme.)

    A few days ago somebody told me it would be too hard to hack the Castlevania 3 ROM in order to improve its control scheme and let Trevor turn around in mid-air – a feature that, in my opinion, is sorely lacking in the original game. So to prove them wrong I learned NES assembly and downloaded FCEUX, a tool for playing, debugging, and editing NES ROMs, and I got to work. As I learned, hacking uncommented assembly code turns out not to be nearly so hard as I thought it would be. (At least, it wasn’t that hard for this NES game.)

    Continue Reading.


  • Bad Controls and Castlevania 3

    There are some quirks of modern games that seem very strange if one pauses to think about them, but are so ubiquitous that one rarely does. For example, it’s a staple of modern platformers that one can change direction in mid-air while jumping; this may sound strange if you don’t play a lot of platformers, but it is so intuitive that I’d never questioned this peculiarity of platforming physics until I played a game that didn’t have it.

    Continue Reading.


  • How to remove files in a topic branch in git and still be able to merge with master

    Recently the devteam for Make a Good Mega Man Level 2 switched from GameMaker 8.1 to Game Maker: Studio, which, in addition to allowing git to be used for continued development, had the unfortunate side effect of introducing long compilation times due to the very large size of the project, in particular setting up texture pages. To help facilitate quick development, one of the devs, Ren, had the idea of creating a branch with all the large parts of the game removed.

    Right away though, there was a problem making this work with git. If we forked the master branch into a lightweight branch and removed certain files, then later when merging back into master, those files would again be deleted as the removal commit entered master.

    remove on lightweight

    The red circle represents the commit where large assets were intentionally deleted

    Continue Reading.


  • Program a Mega Man Boss (in GML)

    I made a tutorial for how to program a boss fight in GML. It’s geared toward the MaGMML2 engine, but the techniques should be generally applicable.

    Here’s the link!

    Here’s the example boss created in the tutorial (Quick Man from Mega Man 2): Final Battle

    Continue Reading.


  • Rockman CX; or: How Bad Level Design Ruined a Game Built On a Great Engine; or: Why You Should Use Save States When Fighting Cheat Man

    A review with as few spoilers as possible!

    I recently had both the pleasure and misfortune to play Rockman CX, a romhack of Mega Man 2. I present my breakdown and analysis of it here.

    Continue Reading.


  • Rockman CX: Levels that are actually good

    (Read my other post about this if this post seems random and confusing.)

    Continue Reading.


  • Git-Your-Own-Adventure

    (Or you can call it crowd-sourced interactive fiction, or decentralized narration, or whatever you want.)

    (Or just click here if you want to see what it’s all about. Server uptime variable.)

    Webmaster’s note, 2018-01: this site is experiencing some downtime while I relocate it.

    Back in the early 2000s, there was a website called HeroQuest. It was basically a choose-your-own-adventure game, but with a twist: if you reach a part of the story that hasn’t been written yet, you get to write it yourself.

    This was an extremely entertaining concept to little 6-year-old NaOH. Every time I logged in and saw that familiar “begin your adventure…” button, my heart was filled with anticipation. And when I reached the end of some branch in the story there was always the satisfying reward of writing the next bit for future readers to experience. I probably introduced most of the typos in that story (oops). It has always remained an entertaining concept to me, so a few years ago I went back to see what became of that site.

    I discovered something peculiar.

    Continue Reading.


Subscribe via RSS