Sign in

Admer456

@admer456.bsky.social
86 followers 16 following 51 posts

Eepyhead from the dry, dry rocks of Herzegovina. (February 2002, he/she/they) I'm also a/an: * GoldSRC mad scientist * generalist gamedev * small YouTuber * Arctic-fennec fox * VR enjoyer

PostsRepliesMedia
Admer456 @admer456.bsky.social · 22/09/2026
More work remains to be done though: parametres, input state/context (who fired this entity etc.) and building some actual logic entities (different triggers, gates, counters, filters etc.) But yeah, I get to have "Source at home" now :3 I'll write about the implementation someday..
030
Admer456 @admer456.bsky.social · 22/09/2026
It's worth noting the above case will work just fine with actor-based entity systems too. You'd make helper entities per-entity-class instead of per-component. Anyway, the fourth case is a combination of 2 and 3. Nothing special about this one, really. You can chain as many bundles as you want.
Case four: a trigger_once targets an io_bundle, which ends up targeting an io_printer which ultimately targets a func_printer.

Text says: "IO bundles and IO links can go together. Their delays are added up.

An IO link cannot target an IO bundle. An IO bundle can target another IO bundle."
110
Admer456 @admer456.bsky.social · 22/09/2026
Third case: actual input selection. There is a middleman entity that lets you select a particular input for a particular class. A door may open, close, lock, unlock, toggle and whatnot. Just like the cases above, this one gets boiled down to a keyvalue. The middleman entity does not actually exist.
Third case: a trigger_once targets an io_printer which targets a func_print in a special way.

Text says: "This is an IO link, or rather, one of many types of IO links. They are specific to components. A Printer component will have an io_printer, while a Door component will have an io_door etc.

The compiler knows what they are, based on the _emc_component key. It's a little extra data in the map project, but that's fine."
100
Admer456 @admer456.bsky.social · 22/09/2026
The second case gets interesting: imagine you want to trigger multiple different entities (+ different delays) from the same output. A trigger_once may target a bundle, which itself targets one or more entities. This one-to-many relationship gets baked to a keyvalue. It doesn't exist at runtime!
Case two: a trigger_once targets an io_bundle, which targets a func_print.

Text says: "An IO bundle is sorta the same as a Half-Life multi_manager. It lets you trigger multiple entities conveniently.

Multiple IO entries on 'bob' will be separated by a semicolon. Example: [...] This means it'll call 'joe.Printer.Print' twice: once immediately, and once after 2 seconds have elapsed."
100
Admer456 @admer456.bsky.social · 22/09/2026
For inputs, I imagined 4 different cases. The first one, traditional Quake-style triggers, will assume there's a default input. A door toggles, a train toggles, a breakable breaks, an explosion explodes. This simple trigger relationship is then translated to an actual keyvalue by the map compiler.
Case one: a trigger_once plainly targets a func_print, similar to before.

The text says: "Quake-style triggers are supported. An entity may have a certain amount of outputs, comparable to Half-Life's target and killtarget. These are then translated to Elegy's Source-style IO system.

_emc_default_input is provided by the FGD as a default. If the compiler doesn't see one, it won't know which input to use."

In retrospect, the comparison to 'killtarget' is a bit misleading, as this field acts more like an input than an output, but alas.
100
Admer456 @admer456.bsky.social · 22/09/2026
And yes, I was alluding to Source's outputs here. Back in my idTech 3 and 4 days, this is more or less what I used to do. But what about inputs, i.e. how do I specifically close/open/lock/unlock doors? What about delays? What about targeting multiple different entities from the same output? Well...
100
Admer456 @admer456.bsky.social · 22/09/2026
Modern Quake map editors provide very fundamental QoL features, such as autocomplete, drawing connection arrows etc. Also, this isn't limited to a single field named "target". With FGDs, you can mark any field as such, for example "target_on_enter", "target_on_exit" and whatnot...
A trigger_once targeting an env_explosion named "glorp", in the J.A.C.K. level editor. It draws arrows and provides a list of entities that can be targeted.
100
Admer456 @admer456.bsky.social · 22/09/2026
My engine has some kind of an ECS as opposed to an actor/class hierarchy-based entity system, so already some design decisions were made with Quake map editors in mind. The starting point is Quake's trigger-target mechanism. It's very simple: one entity has a 'targetname', the other has a 'target'.
A func_button entity is targeting a func_door named "bob"
120
Admer456 @admer456.bsky.social · 22/09/2026
Here's something I did earlier this month: I got Source-style I/O working in my engine, but ALSO, I built a "compatibility layer" for Quake/HL map editors (think TrenchBroom, J.A.C.K. etc.) which do not have the editing UI for that There's a lot to be said here, but I'll try to keep it brief! 🧵
A test map with some debug wireframes. There's a trigger volume to the left which activates an entity that prints a message
1111
Admer456 @admer456.bsky.social · 20/08/2026
Topic: non-planar faces, concave brushes, the grid. It's basically stuff that was cut from the previous video, refined. I started working on this some 4-5 months ago, got it ~40% done, then I got distracted. Suddenly, a few days ago, I got back to it, completed almost all the remaining work. Yay!
070
Admer456 @admer456.bsky.social · 20/08/2026
New Half-Life mapping video coming soon(tm)
Me pointing out that the grid snapping toggle is Shift+W. This is pretty bad because in a 3D view, you'd normally use WASD to move and Shift to speed up. Sometimes you press Shift before W and suddenly the grid is deactivated...A textual representation of a .map file, and what would roughly happen if you interpreted the raw data as triangles.
2204
Admer456 @admer456.bsky.social · 26/06/2026
Oh well, twas worth a shot
000
Admer456 @admer456.bsky.social · 25/06/2026
Alternatively, drag'n'dropping a supported model onto the 3D view - and having it instantiate as a designated prop entity type - is also a possibility Scenes are tricky though. I'm imagining a thingy that translates a Godot scene into a TB entity in the FGD - but that's more func_godot territory..
100
Admer456 @admer456.bsky.social · 25/06/2026
Meshes should be doable. You can already have "prop" entities in TB like prop_static, with a simple FGD entry. Then you just place an entity, select a model and... oh. The editor is missing an asset browser! :3c
100
Admer456 @admer456.bsky.social · 24/06/2026
As someone looking to improve general gamedev workflows (for a community fork of TB), I'd be very curious to hear all that's lame about the TB-Godot workflow :3 Some things can't be fixed, like the fact it's an external program, but I'm sure a lot can be done w.r.t. QoL and such
120
Admer456 @admer456.bsky.social · 22/06/2026
No worries, there's a bunch of non-code ways to participate. Documentation, testing new features (e.g. nightly builds, PRs), providing feedback etc. It's all participation. And that goes for many projects, not just NextBroom or UZDoom!
130
Admer456 @admer456.bsky.social · 06/06/2026
TL;DR most of the core functionality is done. I'll take a little break now and later work on bindless, multiview, OpenXR glue and Avalonia glue. After that, it's mostly just filling in the gaps, fixing issues and whatnot
040
Admer456 @admer456.bsky.social · 06/06/2026
Vulkan progress, June 2026 I refactored some stuff and wrote more examples: glTF and OBJ model loading, transparency (alphatest/masked and alphablend) and multithreaded rendering And! I published a blog and a repository so people can see, borrow and/or criticise :3c microfox.dev/blog/06-06-k...
61000 instances of bushes, rocks and grass, scattered across a piece of procedurally generated terrain.A bunch of transparent glass surfaces blending in the right order.
191
Admer456 @admer456.bsky.social · 14/05/2026
You may notice "Example" on the window titles and indeed, I'm building a "comfy" little Vulkan library for C# There will be lots of these :3c
010
Admer456 @admer456.bsky.social · 14/05/2026
Vulkan progress, May 2026 In March, I had a (coloured and resizable!) window In April, I had a triangle Now: compute shaders, textures, render-to-texture, instanced rendering, MSAA, ext. dynamic state... Next up: multiview (for VR), bindless textures, some smaller things Blog coming soon(tm)
A grid mesh updated on the CPU, later with a compute shader. Messing around with no frame limiterA tiling texture. The Y-down coordinate system messes with meInterleaved vertex buffers test. Vertex positions and normals in one buffer, colours in anotherInstanced rendering test
182
Admer456 @admer456.bsky.social · 05/04/2026
For a proper cycle, I'm thinking of having 4 skylights: sunrise, morning, afternoon, sunset. Night lighting is just a constant, static light, and it contributes to shadows during the day :) I'll be working on that + skybox blending, so stay tuned(tm)
010
Admer456 @admer456.bsky.social · 05/04/2026
So, one thing you can do is a "global RGB" soft skylight and a direct light with hard shadows. This might work quite well for a dynamic sky system that doesn't do a day-night cycle but rather a sunny-cloudy cycle! For day-night, it suffers from poor colour depth. It looks too jarring in the dark...
120
Admer456 @admer456.bsky.social · 05/04/2026
Caveats: - Different lights need a slightly different A-Z string, so they can get *unique* lightstyles - Max 4 lightstyles per luxel (practically per area due to light bouncing) - Colour depth is 26 values or so - May be VERY LAGGY on old Intel/AMD because of OpenGL texture upload inefficiencies...
110
Admer456 @admer456.bsky.social · 05/04/2026
The hack relies on the mapper inputting the full A-to-Z range in the editor, so that the lightmap compiler (HLRAD) can generate everything needed. There's a limit of 32 custom lightstyles in a level Then, at runtime, you may arbitrarily override a lightstyle, e.g. just "m" or "a" for on-off...
110
Admer456 @admer456.bsky.social · 05/04/2026
On light blending: Quake/HL's Flickering Lights(tm) technology is based on a string of lowercase characters (a "light style"), e.g. "mamamama" or "defghijklmlkijhgfe", where "a" is 0%, "m" is 100%" and "z" is like 200% They're interpreted at 10 Hz, but it's possible to override them at runtime...
120
Admer456 @admer456.bsky.social · 05/04/2026
New side quest: day-night cycle in GoldSRC (thread) Done: light blending (using a lightstyle hack) To do: skybox blending, custom skybox set (images = goals)
Sunrise sceneMorning sceneAfternoon sceneSunset scene
1114
Admer456 @admer456.bsky.social · 28/03/2026
(5/5) After 6 years, I'm finally close to where I wanna be, API-wise. I remember wanting to learn Vulkan in 2020, but I gave up after a day... the tutorial situation was also a bit messy back then. Anyway, time to replace my engine's render backend... eventually.
010
Admer456 @admer456.bsky.social · 28/03/2026
(4/5) ...that is, until I did some raw Vulkan! I'll write about it some other time though. One thing that helped me learn Vulkan was doing OpenXR stuff with Veldrid. Following the OpenXR tutorial, I got used to the Khronos API style, like the pattern of "the first call counts, the second fills".
120
Admer456 @admer456.bsky.social · 28/03/2026
(3/5) I've maintained a fork of a friend's fork of Veldrid. I use some extensions for VR (like multiview) and I planned to use more to make life easier (extended dynamic state etc.) I also wanted integration with Avalonia, a C# GUI framework. Their example code didn't fully make sense...
110
Admer456 @admer456.bsky.social · 28/03/2026
(2/5) For context: NVRHI is nVidia's RHI library. DX11, DX12, VK1.2, all under one API. Veldrid is the same but 1) C#, 2) DX11, VK1.0, OGL and MTL. I also tried some others like BGFX, DiligentCore, but NVRHI felt nicer at the time. If you want to get into graphics programming, these are all nice.
110
Admer456 @admer456.bsky.social · 28/03/2026
(1/5) In 2020, I learned some OpenGL. In 2021, I learned some NVRHI. In 2023, I switched to C# and learned some Veldrid. Veldrid was quite nice. But I never really cared for DX11, OGL or Metal. Just Vulkan. So, this year I picked up Vulkan 1.4 and honestly? It's lovely. Hello Triangle, the 4th!
A triangle with rainbow colours and a grid pattern, procedurally painted by a shader.
280
Admer456 @admer456.bsky.social · 05/11/2025
I can only say some surface-level stuff right now: * get LSP or CALF plugins + a DAW (e.g. Reaper) * look for Linux versions of your plugins * use your Windows VSTs with yabridge Coming from FL though, Reaper has been pretty fine. I'll write about it in detail once I've made a few songs in it :3c
010
Admer456 @admer456.bsky.social · 31/10/2025
Okay, now what if.. a VR fox that teaches you Half-Life mapping
A screenshot of DaVinci Resolve showing a bunch of footage in the timeline, but also an Arctic fox explaining Half-Life map surfacesThe same fox explaining a basic example layout for a level. And a fox blob character in the background
0191
Admer456 @admer456.bsky.social · 25/10/2025
Note that there's also a "part 2" which I wrote pretty recently, sort of a review after a couple months. microfox.dev/blog/10-26-l... Right now it's missing a few bits, but it should give you good enough of an idea, still.
010
Admer456 @admer456.bsky.social · 25/10/2025
Oh yeah I finally wrote that blog post! Here: microfox.dev/blog/10-25-l... Well, it's more like a bunch of notes along the way, with a few editor notes here and there.
141
Admer456 @admer456.bsky.social · 07/10/2025
35 minutes of yapping about Half-Life mapping. This will be my first video produced fully on Linux, so let's hope nothing goes wrong(tm)
Audio track in Reaper
011
Admer456 @admer456.bsky.social · 08/09/2025
I'll publish a far more detailed version of this on my website, eventually. Overall I'm quite happy. I expected there to be A LOT more tinkering, lasting up to 3 months to try all this out. Later, I also wanna package some Half-Life modding tools for Linux. It would make things much easier. (6/6)
Half-Life Asset Manager, displaying Barney from Half-Life. It only has a Debian package though.This is J.A.C.K., the de facto level editor for Half-Life and GoldSRC games. It has very poor-quality packaging though, with libraries just missing out of the box.
030
Admer456 @admer456.bsky.social · 08/09/2025
Right now I'm setting up environments for my programming projects. There's C++ stuff, C# stuff, and a bit of basic webdev stuff. nixOS has a non-standard filesystem, so for some situations, setting up these shells is a must. I managed to get my C# game engine to run, so that's pretty good! (5/6)
My game engine running as usual, nothing special here. It has a little test level with a bunch of physical boxes.
140
Admer456 @admer456.bsky.social · 08/09/2025
Music production took the longest. I had to tweak a lot of numbers to get low-latency, pop-free audio on my Scarlett 2i2, so I could play instruments in real time. Oh PipeWire... I tried out a couple DAWs, settled on Reaper for now. Coming from FL Studio, I'll need to get used to it more. (4/6)
Reaper, a recording of my guitar, and some plugins.This is when I was testing Ardour. Sadly it was unstable and had lots of pops, I don't know why. In either case, all these plugins worked, some through yabridge, others natively.
240
Admer456 @admer456.bsky.social · 08/09/2025
2D art, 3D art, Steam games, GoG games, it all just worked out of the box. Assetto Corsa needed some tinkering, and I needed to install a kernel module for my Logitech G29 wheel. VR (Pico 4, ALVR) worked just fine, with a bit more research & tinkering, in particular w.r.t. CUDA support. (3/6)
Abiotic Factor, an Unreal Engine 5 game, running just fine on nixOS. It's worth noting I mostly play singleplayer games and the occasional small multiplayer/co-op.Far Cry (2004), the starting level. I have it on GoG and I ran it through Lutris. Funnily enough, it would appear that DXVK fixes the water reflections. On Windows you'd have to install a patch yourself, here it comes out of the box.SteamVR environment with the "wlx-overlay-s" overlay, providing me with a virtual desktop.Here is what my CUDA troubles looked like, when connecting my headset to ALVR. A bunch of error boxes with rather vague messages. This was a rather easy fix though, and likely wouldn't have been an issue on AMD.
120
Admer456 @admer456.bsky.social · 08/09/2025
Over the years, I switched to more open-source apps. I switched to Blender from 3DS Max etc. for various reasons. I knew most of my hobbies would just work on Linux, but 4 things held me back: nVidia, VR, music making and sim racing. But that's exactly why I wanted to try it out. (2/6)
My "research notes" before I decided to embark on my Linux journey. Back then I still didn't know much about nixOS, and was planning to use EndeavourOS or something like that. My only prior experiences were Mint and Arch on my laptops.
120
Admer456 @admer456.bsky.social · 08/09/2025
Two years ago, I told myself Windows 10 was gonna be my last Windows, that I would switch to Linux at some point. 3 weeks ago, I finally gave it a proper try. Not in a VM, not on my old laptop, but on my main PC, dualbooting nixOS alongside Windows. It went well! (1/6)
My computer's boot menu with Windows 10, and 3 builds of nixOS.
192
Admer456 @admer456.bsky.social · 12/07/2025
I could do that, I only got 45 callbacks remaining. But until I sort out entity spawning, I'll be doing it gradually, setting them up as I go. I'm lazy. I'll have to do the same when I start porting the clientside. Now that's gonna be fun.
000
Admer456 @admer456.bsky.social · 14/05/2025
The author was mostly just exploring some environment art, seeing what they could cobble together (mostly with existing assets!) to reimagine some aspects of Quake's environments, not all of it, so it makes sense to me. Level design wasn't the intent here.
110
Admer456 @admer456.bsky.social · 12/03/2025
So, what's next? I dunno, I have the entire engine API ported, I could spawn some entities and port a few brush entities here'n'there. One thing I always do in game engines is spawn a model that rotates randomly, so I might as well do that. NGL part of this feels like I'm opening a portal to hell
100
Admer456 @admer456.bsky.social · 12/03/2025
Week 2 of porting Half-Life to C#: So I took my HostFxr wrapper from 2022, polished it up real good and tested a few basic things on .NET 8. Works perfectly fine in x86. After a bit of messing around with calling conventions, I got printing to Half-Life's console to work!
110
Admer456 @admer456.bsky.social · 10/03/2025
I'll most likely end up writing my own, minimalist .NET hosting library. All I really wanna do is obtain function pointers and exchange some more function pointers. The library I tried provides way, way more stuff which I don't need, like exposing the garbage collector, C#'s type system etc.
000
Admer456 @admer456.bsky.social · 10/03/2025
Week 1 of porting Half-Life to C#: Translated all the engine headers to C# (edict_t, entvars_t...), set up Coral (C++/C# interop library), only to realise Coral doesn't work in 32-bit apps? Yay!
120
Admer456 @admer456.bsky.social · 12/02/2025
I'll probably never replace this spawnpoint icon
A green smiley face attached to an "info_player_start" entity
062
Admer456 @admer456.bsky.social · 12/02/2025
June and December 2024
A rainbow-coloured "terrain" mesh, and a box labeled with XYZ axes.A little baseplate with X and Y axis markers, a few random objects and a couple lines for testing.
022