Ascii23

I’ve been working on a project in C++ recently, and in so doing I realized that I could not find a good standardized C++ library for dealing with ASCII text. At least not besides the cctype header, which features some surprising and usually unwanted behavior.

So I recently wrote and published my first C++ library, named ascii23. It’s a small header-only library which provides some ASCII-related functions, such as checking whether an input is an ASCII whitespace character, or converting upper-case ASCII characters to their lower-case equivalents and vice versa. Unlike cctype, ascii23’s behavior is the same regardless of locale. Also unlike cctype, it behaves sensibly with Unicode code points and UTF-8 code units, correctly recognizing and handling non-ASCII inputs.

The library includes a benchmarking tool, which was used to write very performant implementations of these ASCII functions, as well as comprehensive unit tests. You can find it on GitHub here, and you can quickly make use of it in your own project by copying the file “src/ascii23.h” into an include directory and including that header in your project:

https://github.com/pineapplemachine/ascii23

Skill Points mod for TES4: Oblivion

I made my first ever mod for The Elder Scrolls IV: Oblivion, prompted by my first playthrough in about ten years. You can check it out here:

On files.pineapplemachine.com: https://files.pineapplemachine.com/public/tes4/skillpoints/

On the Oblivion Nexus: https://www.nexusmods.com/oblivion/mods/51159

There’s one thing about the Elder Scrolls series that I’ve never been especially fond of, and that’s how character progression has long been tied to performing grindy and repetitive actions to advance skill levels. Since when is grinding fun, especially in a single player game that can’t even bring a social aspect to those repetitive actions?

I realized, wouldn’t it be nice if the things I really enjoyed about Oblivion like quests and exploration could more directly contribute to my character’s skill progression? Then I could progress my character just by doing the things I enjoy, and I could stop thinking about grinding at all.

Well, that’s what this mod does. A range of different game achievements such as quest completion, new location discovery, and delving into dungeons can all reward the player with Skill Points, which can be spent to increase the player’s choice of skill levels. No grinding required, and which actions give Skill Point rewards in what amounts can be easily customized if you’re not fully happy with the default balancing decisions.

This Skill Points mod doesn’t replace or overhaul the game’s vanilla skill progression system, like the conceptually similar mods already out there always do. It’s just a small addition which gives players a new and potentially more engaging way to advance their skills, in addition to the ways that were available before.

Kunlun

I wrote a short story about the end of the world, or about god and the devil. It happens to be the first story I’ve finished in quite some time. You can read it here.


The creature crossed dried riverbeds. Rain was as a forgotten memory. The creature walked where grand forests had once stood. Now these sites were chilling images of death and decrepitude. What trees still stood upright were lifeless, gray and black in color. Not even the insects survived. It smelled like mummification. There was nothing left here to decompose the dead.

Jungle, an esoteric programming language

Recently I’ve been making some new esoteric programming languages, or “esolangs”. I haven’t been actively writing new esolangs since 2011! Most recently I published a language named Jungle to the esolang wiki. The structure and control flow of a Jungle program resemble that of a binary tree. You can learn about the language and download a reference implementation at https://esolangs.org/wiki/Jungle.

write_char "Hello world!";

Color Graph

I recently developed a tool to help me work through some math that was proving difficult to visualize any other way. You can use this tool here: https://files.pineapplemachine.com/public/web/color-graph

Using this webpage, you can describe a JavaScript function accepting two inputs, X and Y, and see its output or outputs visualized as color intensities. The first time you load the page, a more detailed help text should appear. You can make the help text appear again at any time by clicking the “?” question mark help button in the bottom-right corner of the page.

Screenshot of the color graph webpage

Nanopineapple 2018

During November 2018 I participated in NaNoWadMo, a challenge inspired by NaNoWriMo, or National Novel Writing Month. Where NaNoWriMo has participants drafting a fifty-thousand-word novel in thirty days, NaNoWadMo has participants performing a very different feat, comparable in difficulty: NaNoWadMo is all about creating a megawad – a single package of typically twenty-seven or thirty-two maps, depending on specifically what game the maps are for – in thirty days. I made a thirty-two map megawad for Doom 2! In December, I fixed some problems and added some polish, and then on New Year’s Day I made the most recent and likely final release.

Check out the Nanopineapple 2018 post on the Doomworld forums to find download links and other information about the megawad: doomworld.com/forum/topic/103281-nanopineapple-2018-megawad-in-1-month/

Screenshot of MAP25 of Nanopineapple 2018Screenshot of MAP25 of Nanopineapple 2018, “Mt. Brimstone”.
Screenshot of MAP06 of Nanopineapple 2018.Screenshot of MAP06 of Nanopineapple 2018, “Corridor Horror”.
Screenshot of MAP04 of Nanopineapple 2018.Screenshot of MAP04 of Nanopineapple 2018, “Courtyard”.

¶City – Ludum Dare #41

I made a game in less than 48 hours for Ludum Dare #41! You can learn more at the Ludum Dare compo page, or if you’d rather you can directly go and play ¶City here.

Ludum Dare #41’s theme was “Combine 2 Incompatible Genres”, so I created ¶City, the Text-Based City-Building Simulation RPG. In it you are charged with growing and maintaining a city with mechanics comparable to Simcity games, but presented with a much more personal (and more wordy) perspective.

¶City is played in your modern internet browser supporting ES6 JavaScript syntax. It was tested using Chrome; I recommend using Chrome to play unless you’re sure about your browser’s full support of ES6 functionality.

Canary

I published my first package on npm recently, and it became stable and well-documented enough for a v1.0 release!

Canary is an automated testing tool for JavaScript code. I created Canary because existing JavaScript testing tools didn’t quite agree with my philosophy toward writing automated tests.

Canary on GitHub: https://github.com/Mapita/Canary
Canary on npm: https://www.npmjs.com/package/canary-test
Canary on readthedocs: http://canary.readthedocs.io/