Welcome
Person using computer
Lily RL

Thanks for visiting my awesome website!!!

I'm interested in maths and computer science, specifically compiler/language design, functional programming, high performance/system's programming and other things, which have nothing to do with computers.

This page shows some of my projects.

Skeleton smoking a cigarette DEATH GRIPS I love red pikmin I love tetris This site is GAY

Doctor examining an infected computer
The Game Engine

Link: https://github.com/LilyRL/sge

Written in Rust and designed to be as simple and easy to use as possible, without requiring significant knowlage of the Rust langauge. Lots of documentation in the form of a book explaining the features and systems, and 74 (at time of writing) examples if you prefer.

It's got:
  • 2D and 3D
  • Physics
  • UI
  • Multiplayer
  • Advanced, pixel perfect shape rendering
  • Post processing effects
  • Much more

That's the best one by far, but I do have more...

Picture frame
Image format

Link: https://github.com/LilyRL/sge

Written in C. I wanted to try my hand at creating an image format with lossy compression, without doing much research on how other image formats worked. I did notice that jpegs seem to be split into tiles, which gave me the idea to use a tile based approach in my own format. I'm not great at C so the code isn't amazingly well organised. The files starting with stb_* and the harness.c were not written by me.

First, it checks if the image contains any transparency, and if it doesn't we set a flag at the start of the file and use RGB instead of RGBA for the rest of the file, saving space.

Then it splits the image into 8x8 tiles, and checks if each follows one of these criteria. It does this by computing the sum of the difference squared between the actual image data, and how it will look when decoded.

  1. Find the average color of the tile, if the tile as a whole is close to being a solid square of that color, just save it as a solid tile with that average colour (storing in 4/5 bytes, flag + rgb(a)).
  2. If not, try the same with a 4 point gradient on each of the corners (storing i).
  3. If not, does it only have 2 colours, we can store it using 1 bit per pixel.
  4. If not, does it only have 16 colours, we can store it using 4 bits per pixel.
  5. If not we store the full image data.

In the case of a tile that will be encoded using a solid block or gradient, I compute the DFT, using the Cooley-Tukey radix-2 FFT algorithm (as the tiles are guarenteed to be 8x8 anyway), to isolate the high frequency noise in that tile, and encode just the magnitude of this noise, so it can be approximated in decoding. The noise pattern will not be the same, but someone looking at the image hopefully wouldn't be able to tell that.

The resulting bytes are then compressed using huffman encoding.

Also I lowk forgot to ever get around to making it work with images that have dimensions not divisible by 8, so it just crops.

For more, check my github

Divider
Happy PC

PLEASE contact me if you have any questions or want to talk about programming/computer science, music, games, or pretty much anything else.

Find me around

/LilyRL on Github

@lily_lopes0 on YouTube

~evillily on RYM

LilyRL on crates.io

My website can be found here

My primary email where i have notifications turned on is joshrl@proton.me, I haven't got around to changing it

My Bitwarden master password is f7aWj3HQvkfpfC

Sharks for anya

swimming shark swimming shark swimming shark swimming shark swimming shark swimming shark

Bugs for lucas

dancing bug dancing bug dancing bug dancing bug dancing bug dancing bug

Edward <3

green square with the word bratgreen square with the word bratgreen square with the word bratgreen square with the word bratgreen square with the word bratgreen square with the word brat

Riley

surfing pig car money
Two people staring into eachothers eyes.