In celebration of 25 years of Quake (1996), I decided to make a
spookin'-ass Quake level of my own. Years ago I played with
WorldCraft (later Hammer) making my own Half-Life levels, and
although I never produced anything worth playing back then, that ancient
knowledge proved useful.
Hammer is strongly tied up in the Valve ecosystem now, even more than it
was back then. Poking around the Quake community, it's clear that
everyone is now using
TrenchBroom. And wow, I sure
recommend that you do, too. The 'Broom makes it simple to shape complex
brushes in a way I could never before. Instead of a series of carefully
crafted carving operations, painstakingly positioned within your three
standard orthographic projection views, one can essentially just draw
the shape in 3D.
About the Map
You had just escaped one fortress, only to find yourself in the eerily
quiet eye of the storm. Surrounded by castle walls on all sides, and the
door from whence you came barred shut, you have no choice but to proceed
along the dilapidated boardwalk over caustic slime lake and search on
for your way out.
... and where is all that slime coming from? Something is very wrong
with this green pond. The answers may reveal themselves to you with
This being essentially my first ever Quake map, I wanted to keep it simple.
The textures are all either from the WAD used by the "start" map (Quake's
episode and difficulty menu level), or some gently modified/hue shifted
variant created by me. I built the ominous island structure first, and the
rest of the level sprang up organically around it.
If you are feeling brave, venture into Krak's Slime
Factory. Let me know if you play it
(p.s.: The armor you can see from the island is quite attainable, and
requires nothing more than a
You have two options for downloading. If you already have
QuakeSpasm, Mark V,
or some other modern Quake engine installed, download this file which includes
the playable map, as well as the source files so that you can open it up in
TrenchBroom yourself. Place the BSP and LIT files in your Quake directory
under id1\maps\. Launch the game, open the console with ~, and type "map
If you do not have a Quake engine installed and are running Windows, download
this version instead which includes QuakeSpasm and the map files. This download
also includes a "Krak.bat" file which you can double-click to launch directly
into the level.
You have possibly heard of NaNoWriMo, a yearly November challenge
for writers to author a novel in just 30 days. Completely ignoring the
expansion of the acronym, I decided I would make a NaNoGaMo... a
complete game in the month of November!
My NaNoGaMo idea was simple... a text-only telnet MMO, set in some remote
space station. Players connect and interact with the station, and although
they cannot see other players, they can see things that have been done by
other players (receive mail, graffiti, position of objects, etc). It's
essentially a museum game (less charitably termed a walking
simulator), where you log in to hang out. The nature of telnet is such
that sound is essentially impossible, and so the working title was Quiet
Writing a novel is hard. Making a complete game is hard, too. I did not
complete my NaNoGaMo. My ambition was too large. I had to aim smaller...
and what's smaller than a nanogamo? A Picogamo! I wanted my game to
be portable to at least Windows and Linux, and so I set to work creating a
game engine in C++ with SDL. Almost immediately this got completely out of
control, as I realized I could probably write a software 3D renderer on top
of SDL's 2D-only graphics. The project is on-going and has stretched well
beyond its humble beginnings. Which is to say, I did not complete my
Picogamo in a month, either.
Ok, ok, I had to reel it in. Ignore the 3D renderer, just make a simple 2D
game, a Fermigamo (following the natural order of Pico, Fermi,
Bagel), and that's what this post is actually about. I chose a
ridiculously small resolution of 256x150, and decided to make a blackjack
simulator. The graphics are cute, the sounds are bloopin', and you can
download it now for free on
ENDLESS WAR is a text-based MMO playable entirely inside your browser.
ENDLESS WAR is also a community, built around the
and YouTube channels. The in-game New Los Angeles City (aka Neo Milwaukee)
is full of graphic artists, musicians, story tellers, ... and gamers.
Together they form a community that's as clever, inviting, and inventive as they are blood-thirsty.
It is a world of gang violence, all in the shadow of the titular monolith.
approached me in April of 2018 looking for help with his new game idea,
I knew immediately it was going to be a lot of work. I wasn't sure if
he'd really be able to tackle it himself, having no programming
I started working, and in a few long days the game took shape. You
could gain slime, and use your slime to attack other players.
It was a chaotic mess.
The game evolved continuously, until what would be termed
"the end of season one."
I worked 24/7 for a month, catching bugs moments after players
encountered them, at all hours of the night, and immediately patching
the game and correcting the database... and also adding new features.
Season One was characterized, at least in my mind, by unbelievably
rapid and responsive emergent game design. Players would suggest ideas,
and they would be in the game within hours.
Season Two came after a long break; a break longer than the entirety of
Season One. Most players thought it would never come. This was the
moment when the game transitioned from a novelty, to an actual,
playable game. With Season Two, came the map.
Instead of global chat channels, the game was now split up into
geographic zones, with travel time between them, on a realistic map of
Boston. This paved the way for territory control, inventory and items,
apartments, and so much more.
Throughout seasons two and three, the game has grown continuously. The
current development team is so large, I can't keep track of who's
involved anymore. It has flown far beyond its humble beginnings.
Over the past half year I've been uploading quick (mostly) acoustic
covers of songs over on SoundCloud. It's been an interesting experience...
getting into the habit of recording more often and less formally has
been valuable, and I feel like every day I'm getting better at
singing and playing simultaneously.
The goal last year was to cut together a little EP of songs that I
thought were cool when I was in high school. Sort of a nostalgic
trip to practice recording and improve my singing. Given the
soundcloud tracks, I think it's safe to skip this project entirely
and get on to what I really want to do: some original material.
This cover of Scars is probably my magnum opus thus far,
although the Die Young cover is a close second favorite. This
song is cheesy as hell, but man, it really does help me feel better
when I'm down, thinking about every wrong turn I ever took, and bad
decision I ever made.
I put together a little demo of DOS EGA graphics in the low-resolution
640x200 mode. It's a "playable" game of bouncing balls, where the player
controls one ball that can kind of move. Check out the video:
If you want to try it yourself, or check out the source code, here's a ZIP
with everything as it was in the video: GFX.zip.
Note that you'll have to run the executable in DOSBox or actual DOS, and
that the EGAVGA.BGI file included in the ZIP needs to be in the same
directory. This file is some kind of Turbo-C++ specific graphics driver...
BGI perhaps standing for "Borland Graphics Interface" or similar.
New for 2018... it's 2013!! I'm taking a page out of my own old playbook,
and setting the clock back half a decade. This is a return to that fresh
out of university and ready to take on the world feeling!
I'm bringing back the nasty old green/black/blue/gray/white colorscheme
that I've always desperately loved. It's loud and amateurish looking, but
also bold. The colors are inspired by the bright tones of a beautiful late
summer's day on the road.
This year I'm committing to being my truest self. I'm bringing back the
reckless courage I used to be so proud of, and breaking the shackles of
shyness that have in the last few years held me back.
So begins the s u m m e r o f k r a k. AWOOOOOOOO!
It's always a struggle trying to produce music by yourself. My
latest project was a cover of "Fell in Love With a Girl" by The
White Stripes. You can check it out on YouTube.
Most White Stripes songs are essentially three tracks: vocals,
guitar, and drums. That simplicity made it the perfect song to get
back into recording with. This was the first time I would be using
my new old Gibson SG. In fact, the entire setup was completely
different than last time with The
To get a better drum track than last time, I sequenced every hit
myself in Reaper. The sequence is extremely plain, though, featuring
only one interesting fill in the entire short song. Next time I'm
hoping to have real percussion.
I wanted to get a more old-school sounding crunch with the
distortion on this song, so I used both the SD-1 and DS-1 at the
The actual recording was done via direct XLR connection from the
preamp output of the Ampeg head. Given the chance to do it again, I
think I would record a blend of the live speaker sound on mic and
the direct connection to get some of the natural reverb of my small
studio room. Altogether, though, the guitar sound is on point.
Way back in 2015 I low-sided my Honda. The damage was minor enough
that I fixed everything myself, except for a tiny gap between the
cowl and dash surround that wouldn't close up. I could press on the
cowl, and it would kind of snap together...but a few miles down the
road it would pop apart.
Fixing that little gap means removing the dash surround... no big deal, you
just need to remove the windshield and mirrors, and the fairings around the
headlight. Of course, those fairings don't come off without removing the
ones bridging the tank and dashboard... and those don't come off without
removing the entire side fairings and turn signals.
With the whole machine apart, it was just a matter of bending the
tube structure the cowl sits on with a screwdriver about a quarter
of an inch. It took an hour to get to the point where I could do the
actual one minute job I set out to do.
After an amazing five year run, it's finally time to close Krakchat.
It's kind of unbelievable that it lasted as long as it did. The
mythical "krakchat2," which seemed to be in development and Coming
Soon™ for ages has now been out a year longer than the
original chat lasted. KC2 introduced MySQL as a database, to replace
the completely unreliable and broken sqlite3 implementation. It also
introduced a chat API with crude JSON interfaces, replacing even
more crude query parameters. Some may even remember the earliest KC,
in which everybody was just an IP address and couldn't set their
username at all.
At its heart, Krakchat was always just a science project. I wrote it
in college in an attempt to learn about AJAX/XHR and web development
best practices. Along with Kraknet, it helped me to get my first
real job in software development.