Odin is on the journey to 1.0! You can read up on all changes in the monthly release notes.
Reddit #
Karl Zylinski opened up a reddit again! Check it out here Reddit. Personally I’ve left reddit but building up communities other than discord is good. The same applies to searching for odin help online.
Games #
We’ve got a whopping 3 Games this month! I’m very excited to show them off here, so please check them out.
Solar Storm from Jakub
#
“Solar Storm steam page is live! It’s still fairly work-in-progress, the screenshots are outdated and there is no trailer, but I’m working on it! Wishlists are greatly appereciated!!”
Also I’m also doing a first public playtest this weekend, if anyone is interested, join solar storm discord server to participate: https://discord.com/invite/wn5jMMMYe4
Steam: https://store.steampowered.com/app/2754920/Solar_Storm/
The Legend of Ján Ïtor from Colin Bellino
#
“Adventurers are spreading a lot of slime and other mess in the dungeon and you are the one tasked to clean it up before it becomes out of hand.
This game was created over a period of 2 weeks by a team of 3 people, this is a submission for the Pirate Game Jam 14.
Engine: This game was developed as an experiment and way of dog-fooding a custom, handmade game engine i am working on (written in the Odin language).”
CAT & ONION from karl_zylinski
#
“My game CAT & ONION is now released on itch! https://zylinski.itch.io/cat-and-onion
It’s a warm adventure game where you play as a cat who goes on a surreal lil journey 🐱
It has taken me months to make and I’m very proud to have finished a game all by myself. It is written in Odin + Raylib.
When you buy on itch you also get a drop of the source code. It’s quite a chaotic code base, full of both good and bad things. The good parts is in my opinion the editor tools and the hot reloading etc. The bad parts is the entity system and the physics.”
Community Contributions #
Dynlib Helpers by Jeroen #
Useful new helper added to core:dynlib
to automagically populate a struct with procedure and global pointers from a DLL (or other shared lib depending on platform).
package example
import "core:dynlib"
import "core:fmt"
Symbols :: struct {
// `foo_` is prefixed, so we look for the symbol `foo_add`.
add: proc "c" (int, int) -> int,
// We use the tag here to override the symbol to look for, namely `bar_sub`.
sub: proc "c" (int, int) -> int `dynlib:"bar_sub"`,
// Exported global (if exporting an i32, the type must be ^i32 because the symbol is a pointer to the export.)
// If it's not a pointer or procedure type, we'll skip the struct field.
hellope: ^i32,
// Handle to free library.
// We can have more than one of these so we can match symbols for more than one DLL with one struct.
_my_lib_handle: dynlib.Library,
}
main :: proc() {
sym: Symbols
// Load symbols from `lib.dll` into Symbols struct.
// Each struct field is prefixed with `foo_` before lookup in the DLL's symbol table.
// The library's Handle (to unload) will be stored in `sym._my_lib_handle`. This way you can load multiple DLLs in one struct.
count, ok := dynlib.initialize_symbols(&sym, "lib.dll", "foo_", "_my_lib_handle")
defer dynlib.unload_library(sym._my_lib_handle)
fmt.printf("ok: %v. %v symbols loaded from lib.dll (%p).\n", ok, count, sym._my_lib_handle)
if count > 0 {
fmt.println("42 + 42 =", sym.add(42, 42))
fmt.println("84 - 13 =", sym.sub(84, 13))
fmt.println("hellope =", sym.hellope^)
}
}
Output
Creating library W:\Odin\core\dynlib\example\lib.lib and object W:\Odin\core\dynlib\example\lib.exp
ok: true. 3 symbols loaded from lib.dll (7FFDCF510000).
42 + 42 = 84
84 - 13 = 71
hellope = 42
Odin / WASM / Webgl by thetarnav #
“I’ve been slowly getting into learning Odin, WASM and WebGL So I made a example project where I experiment with the three (and some js tooling for development/bundling) Maybe it could be useful for somebody for reference or as a template Also the wasm/js bindings there are rewritten into modules with types so it’s a bit easier to understand and extend them (no more random typos)”
Check it out here: https://thetarnav.github.io/odin-wasm
Community Showcase #
Repositories:
- red_black_tree - simple red black tree implementation
- odin-libpcap - libpcap bindings
- odin-libktx - libktx bindings
- odin-box2d - Box2D 3.0 bindings
- efsw-odin - ESFW bindings
- ogmo-loader - Ogmo Project and - Level Loader
- wcwidth - A simple implementation of wcwidth(3) and wcswidth(3)
- odin-box2c - Quick Box2c bindings
- odin-pkg - command line handling package
Gists:
- blas_bindings - BLAS Bindings for Odin
- sign_extension - Little sign-extension and zero-extension helpers
Miscellaneous #
My x86 disassembler disassembling itself. Sheesh now im realizing how long the SSE instructions really are - flysand
Experimenting with a coroutine API for odin-http - laytan
Finally, got raylib running on the web - Christhofer
got a simple http server reading requests - fridge777
minor update: odin-mustache now supports an explicit layout to render a given template inside of - b3lm0nt mustache
Got an LED to blink on my RP4 - thanks to @irvin for adding the freestanding_arm64 target and sharing his example code! - markersniffen
Video visualization of linear vs binary search, made by generating ppms and then running x264 encoder - NicknEma Based on this article
brainf* interpreter 😄 - NicknEma
optimized brainf* interpreter 😄 - NicknEma
Its a mess but Hello world Jolt running in Odin. Bindings still have a looong way to go though. - Sumofat
Game Development #
juiced up analog detection for translating them into cardinal inputs. bonus points for use of quadrance instead of using square roots - Krzysztoφορος
Initial POC of Odin in Unity 😉 (DOTS is really making this easy :P) - Dani
Heres our latest update on our 2D game engine @Marko - ScottCastle
My Tilengine journey is continuing with great success. I've been writing a little "engine" to handle level loading, game logic, sprites etc. to use with the bindings... - Akuspel
Still a spinning Unity Cube, but more stuff has been moved to odin (SystemState, EntityQueries & ComponentHandle usage.. also, dynamic dll loading) - Dani
SourceDay 1 - ҽʅʅσɾα
Day 2 - ҽʅʅσɾα
Just a small prototype I have whipped up for a top down hack and slash game. Everything is very crude and basic but there is something emerging. So much to work on... - Perlind
Day 3 - ҽʅʅσɾα
doing some funky collision-pair debug visualization using immediate mode rendering. This actually showed me that i forgot to delete the enemies once they go out of screen on the bottom side - The Lua Whisperer
randomly sized big explosions - The Lua Whisperer
i've made hex-chess with odin/sdl2, i've also managed to "link" sdl2 to wasm target so there is a web build if u want to check out - шоськудись Source
Odin+SDL+GOL - Glennwiz
Graphics #
Got my GPU driven animations to work. Basically doing all the computation and blending on the compute shader. The cpu just finds the animations frames indices and calculates the weight and are then sent to the gpu - Draoz
i had recently implemented rxi's cached renderer in compute which overcomplicated things - so this version does tiles per draw call + instances calls within each tile - Skytrias
Got my first working build of odin bindings for the Spine-c runtime (with raylib)! - Zealous
After some struggles, I got working Tilengine bindings in Odin! 🥳 - Akuspel
Back at it again fighting with my voxel engine, first pass at getting light sources to work done - Chris
I know I'm not the first, but here it is a basic Webgpu "Hello Triangle" application using a recent version of wgpu-native and some hand-made bindings - Vicix
not super fancy, but I drew a fish with the gpu, loaded from a .obj file. This is my first gpu project that isn't secretly a software renderer - Stvff
Achieved using Odin + SDL2 + OpenGL + @Jesse Blender importer-exporter - Smilex
crudely animating my fish programmatically - Stvff
CPU rendering transparency unlocked - Krzysztoφορος
Tools & UI #
whats this? 👀 - Skytrias
Been getting quite annoyed with the sluggish windows file explorer recently... - Francis_the_cat
The Focus text editor inspired me to try making my own editor with some things it doesn't have like identifier type coloring. Here's basic demo of it mostly working. Still have a long way to go, this just parses the file you're editing. Will look into parsing packages you declare through import statements now. - CasualKyle