CSS-only reveal/frame comparison generator

Earlier this year, I made an image reveal/frame comparison generator for use with cohost!.

With website set to close at the end of this year, I have updated the tool to output that's easier to use outside of cohost!.

The idea is that you supply two image URLs, tweak a few settings, and get something like this back:

An image of the ct.js mascot, a sort of a blue blob-cat with an innocent smile
The same image, but the cat now has two knives 👀
?
Template by YellowAfterlife.
Dragging might not work with touch!

(if you are on iOS, resize-dragging is not currently supported - tap here for an animated preview)
An image of the ct.js mascot, a sort of a blue blob-cat with an innocent smile

And this works without any JavaScript!

The generator is available online, and in this post I go over how it works and what else it can do.

Continue reading

Writing Steam guides in Markdown


Markdown / BB Code / displayed result

Do you write Steam guides and walkthroughs? Or, perhaps, you are a game developer and you have to write game announcements and changelogs now and then?

And if either, has it recently occurred to you that it is not 2008 anymore and writing formatted text in BB Code isn't so convenient, even if sometimes slightly less ambiguous?

In process of working on the recent few big guides, it sure did to me, and this is a post on how to spare yourself of misery.

Continue reading

Fast approximate arctan2/atan2 function

(click to interact)

Alternatively titled "exciting adventures in doing trigonometry without CRT".

Continue reading

Preparing your game for deterministic netcode

A person asks "What is NETCODE?"
If this looks slightly familiar, that's because it is

Considering that frequency at which people ask me about what it takes to do netcode (and what they need ready for it) continues to rise year-to-year, I figured that it's about time that I finally make a blog post about this.

This one's about deterministic netcode as it is by far most requested and also the kind where it's possible to give more specific advice than "it depends".

Continue reading

A small guide on writing interpreters, part 2

label hello: select dialog("Hello! What would you like to do?") {
    option "Count to 5":
        for (var i = 1; i <= 5; i = i + 1) {
            wait(1);
            trace(i + "!");
        }
        return 1;
    option "Nothing": jump yousure;
}
label yousure: select dialog("You sure?") {
    option "Yes": trace("Well then,"); return 0;
    option "No": jump hello;
}

Example of supported syntax

As some might remember, earlier this year I have published a small guide on writing interpreters, which went over the process of implementing a basic interpreter capable of evaluating expressions consisting of numbers, operators, and variables.

This continuation of the guide further expands upon concept, outlining how to support calls, statements, and branching - enough for a small scripting language.

Continue reading