Rain World Mod Loader

A patcher that takes the Unity assembly from the game files, and injects the hooks needed to start loading custom code.

A small modding framework with which to start writing mods. Each mod is built as a separate assembly, which receives a callback on initialization. From there each mod can start hooking into Rain Word’s existing systems.

I had a lot of fun learning about the nuts and bolts of DotNot assemblies, the assembly-like Intermediate Language found within, and getting it to do my bidding.

This also introduced me to the wonderful tool called dnSpy, which you can use to decompile and browse any DotNot executable or assembly! Well, as long as the code has not been obfuscated. Ever since using this to explore Rain World’s code, any time I come across a new Unity-based game I’ll open it up in dnSpy. It’s such a great opportunity to learn, as you can see how other programmer did particular things.

Burst Renderer

It’s a CPU-based ray tracer based on Peter Shirley’s Raytracing in one Weekend book series, which I can strongly recommend if you’re looking to try your hand at some graphics programming.

Specifically, this was one of my first non-trivial projects for which I used Burst, Unity’s new high performance job system and compiler. It takes a bit of getting used to, but the performance benefits, memory management, and safety guarantees are super welcome. I look forward to using it more, much like the new Entity Component System.

NeuroToy

This project represented my first foray into Machine Learning. I coded up my own framework for creating neural networks, and hooked them up to:

MNIST : The canonical handwritten character recognition test

CIFAR10: images of stuff, with categories

Unity’s physics engine, for robot locomotion

After a first iteration I started modifying this to use Burst as well, which gave it a nice speedup.

When I pick this project up next, there’s a bunch I want to do:

Free composition of neural network topology

Automatic differentiation, getting gradients to be calculated and propagated automatically

Use a physics engine more suited to offline and parallel computation

Recurrent networks for handling temporal sequences

Some exciting tricks I want to keep to myself for now

]]>http://ramjetanvil.com/2019/03/23/some-open-source-projects/feed/094Hello world!http://ramjetanvil.com/2019/03/23/hello-world/?utm_source=rss&utm_medium=rss&utm_campaign=hello-world
http://ramjetanvil.com/2019/03/23/hello-world/#commentsSat, 23 Mar 2019 14:54:35 +0000http://167.99.212.25/?p=1It’s time for a new blog! There’s lots of writing on programming and design I want to share, and I need a place to put it all.

Expect posts on:

Rust

Unity

Real-time simulation

Graphics

Machine Learning & AI

Sound & Music

While I’m setting things up, here’s a random snipped of C# for you to look at.