RSSAmplifier

Blog

@dansalvato

dansalva.toRSS feed ↗15 posts

Latest posts

Writing my own dialogue scripting language

Your browser does not support the video tag. Magicore Anomala is an Amiga game I'm working on. Watch the newest gameplay demo in full: Link I made Doki Doki Literature Club using Ren'Py, a Python-based visual novel engine that has some staggering capabilities. But thinking about it, there are tons of games with visual novel-like dialogue features—maybe even the majority of them at this point. How…

Shattering the Magicore 8-color limit

Watch the newest gameplay demo of Magicore Anomala : Link The technology behind Magicore Anomala requires the background to be 8 colors or less, although any Amiga fan will know that the system is capable of a rather incredible color range. As with many classic systems, Amiga's hardware limitations are extremely fascinating and follow rules that can be cleverly bent.

Decoding Impossible Mission 2 for Amiga

Impossible Mission (legally distinct from its extremely obvious permutation) was one of the more popular games on Commodore 64, and I think it still has its charm. I think the mechanics like basing floor detection on the position of your foot, and the unadjustable front-flip jump, make for an interesting game design study. I missed out on the famous original and grew up with Impossible Mission II…

Hot loading code on Amiga, the dumb way

In my opinion, an understated programming skill—one that only comes with experience—is knowing when to be "good practice", when to be clever, and when to be dumb. Today, we're being dumb.

Coding the anime "woosh" screen on Amiga

Your browser does not support the video tag. The Amiga was a spectacle of graphics and sound when it debuted in 1985. While it can trivially display colorful images like in the above example, doing so in the context of a game engine presents a lot of unique challenges.

Apple Vision Pro and ADHD

Apple Vision Pro reminds me that computers have become too efficient. I'm currently typing this blog post in a floating window in the middle of snow-covered Yosemite. I am a floating body manifested into the transcendental Tim Cook matrix. I look into the sky and follow the soft clouds as they pass overhead. They slowly part, revealing Steve Jobs' smiling face watching over me from the heavens…

Resurrecting a prototype Chromebook with Arch Linux

In 2011, I was selected to be a part of Google's Chrome OS Test Pilot Program . I received a free Google Cr-48 laptop, and it was an absolutely charming machine. The rubbery, matte-black chassis had absolutely no branding anywhere on it. Upon opening the lid, the system would boot into Chrome OS, which, at the time, was literally nothing more than a fullscreen Chrome browser—no desktop, no apps,…

My simple, life-changing keybinds

Your browser does not support the video tag. One day, I got fed up with constantly reaching for the arrow keys or the mouse while typing. So, I set up a few simple keybinds that let me jump the cursor around and select text without having to move my hands off the keyboard.

Rapidly building custom file formats for my game

Earlier this year, I had to figure out how I was going to load level data into Magicore Anomala . A level contains backgrounds, sprites, animations, dialogue scripts, and much more. Ideally, I want to pack all of these things into a single file, so that I can deal with the filesystem and file names as little as possible. I did some cursory searching on tools or frameworks that make it easy to…

There is no "if" in Assembly

If there was, it would be spelled "Assemblify", which is now the name of your next startup. So, the cool thing about Assembly is that whenever you perform an instruction, the CPU runs a bunch of comparisons automatically! They are stored in "condition flags", which you can use to branch (goto) or do other stuff if the right conditions are met.

Assembly tricks for fast bounds checking

I came across a cute little trick while looking to optimize my physics routine in Magicore Anomala. In the routine, I need to check if each object is inbounds, and deactivate it if it goes out of bounds. Pretty typical situation, and we'd probably see it written as something like this:

Getting clever with the Amiga blitter

Magicore Anomala is powered largely by the Amiga's blitter, allowing me to quickly clear the screen and draw hundreds of objects every frame at a full 60fps. It runs in parallel with the CPU and excels at copying or manipulating large blocks of data. But the blitter goes above and beyond the functionality of simply hauling bits around. You can shift, mask, and logically combine up to three…

Performant data structures for bullet hell

One interesting challenge when coding the game engine for Magicore Anomala is figuring out the ideal data structures for different scene objects. Since we're on a 7MHz CPU and need to process hundreds of objects per frame, every CPU cycle counts. Here are the requirements for the bullet objects:

CSS-only scrollable navigation bar with dynamic "more" arrow

I recently redesigned the Team Salvato website , moving it away from WordPress (thank goodness!) and into a static site generator, which I feel is appropriate for the content it serves. (I reused a lot of it for this website, because I'm too lazy to come up with something different!) When thinking about a mobile layout, I decided that I didn't want the typical "hamburger menu" icon, because I was…

Magicore Anomala: A bullet hell game for Amiga

These past two years, I've been working off and on to create a game for Amiga, a home computer first released in 1985. This post is a general overview of the project. In future posts, I will dive into the details of the design, code, game engine, and more.