Sign in

Epsilon sinfulSinewave ~

@sin.sinewave.technology
625 followers 295 following 5.1K posts

adult :: it/she(/se) :: plural :: 🦈 ΘΔ :: finnish :: CEO of SineTech :: shameless homestuck :: even more shameless communist no minors, theres 18+ stuff sometimes

PostsRepliesMedia
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 27/09/2026
well i got EBX exporting in a more readable format mostly done the exporter itself is ass but it works
part of the EBX for the stock exhaust of the mazda RX-7 in NFS unbound, exported into an object notation format
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 26/09/2026
like some clown ass shit also i think they're licensing the firmware under a CC license?? like y'all that's that's not a software license and there's a perfectly fine EUPL right there
opentools' statement that the open source resources will be available "once the final product is ready, to prevent malfunctions and avoid having multiple inconsistent versions"
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 23/09/2026
anyway creating an EBX instance now looks like this the structure type automatically populates itself with a bunch of defaults; although really that wouldn't be needed since my mod spec will probably require you to define all fields for new instances anyway
a bit of kotlin creating a new EBX instance and assigning some of its fields
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 23/09/2026
idk if anything actually returns code 8 but i failed to resist the urge after recognising this is possible
the return code smiley feature of my ZSH prompt where it includes a smiley representing last return code, with a green happy face for success and various yellow and red sad faces for failures. on code 8 it now is a sad face with four colons for the eyes, in blue
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 21/09/2026
once again thinking about this diagram specifically the non-aggressive front view
wikipedia chart of a grey reef shark's agonistic displays. it is very sillythe front view from the non-aggressive side of the chart, it's a shark facing directly at the viewer and looking incredibly clueless
171
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 21/09/2026
..well that's new
NFS unbound having crashed with a DirectX error claiming my GPU has crashed

said GPU is fine
030
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 15/09/2026
btw as an example of how hilariously weak 4-digit numeric codes are, freon bruteforces a 4-digit salt in order to map a bunch of hashes to strings this takes a fraction of a second to find the seed/salt knownHashes has 4113 elements for context
a couple of methods in kotlin that bruteforce a 4-digit salt for an SHA256 hash of a string using 7 reference values it hashes and compares to a 4113-element list of known hashes
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 13/09/2026
this time in bsky is a perfectly functional website, my home feed exploded everything else works fine
the server gave an invalid response and may be out of date
040
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 08/09/2026
so audi has published the new A2 e-tron and i see they're respecting the identity of the original A2 in being ugly as all fuck seriously what the fuck, is there something in the water at the design department??
new audi A2 e-tron
220
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 06/09/2026
still no actual mod file format, but freon has gotten a lot less annoying to use lately i think i'll rewrite the EBX serialisation next just because i don't like it currently, and then implement a file format either that or caches so it takes a bit less time to do stuff
a main method from freon; it modifies NFS unbound's EBX to show a normally hidden car part, setting a custom texture and display name for it; nearly everything is referred to by name rather than numeric hash like in the past, and boilerplate is relatively minimal
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 06/09/2026
damn i wish it were this shrimple
"edit body parts" in the NFS unbound menus
031
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 06/09/2026
i love modern video gaming
my GPU drawing 280 watts to run need for speed unbound
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 04/09/2026
guess i'm a fuckin new yorker now (in reality i speak weird finnish-british english with some extra flourish) also wdym the yanks don't just call a sandwich a sandwich
dialect map of the US, my dialect is mostly eastern and concentrated towards new york, philadelphia, and boston
450
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 02/09/2026
this thing is going to be a bloody nightmare to print isn't it thank goodness i designed a damn good cooling duct so the overhangs shouldn't be a huge problem at least
that horn i modeled, now sliced in orcaslicer
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 02/09/2026
well i certainly _can_ do it it just requires one hundred morbillion parameters to the point that i stopped even bothering to add them to the modifier, and could be done much better
previous horn, now with a hooked tip; as a consequence of which the geometry nodes are now an utter tangled up shitshow
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 02/09/2026
this was supposed to be a quick and simple modeling project alas, the geometry node editor always lurks in my blender install calling to me like the fucking green goblin mask
one (1) troll horn modeled in blender using nothing but geometry node spaghetti
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 01/09/2026
you can probably tell who currently has no windows PC to test this on
line of code setting file permissions, with a comment: "TODO: make sure this doesn't cause windows computers to explode"
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 26/08/2026
..ok then
this file is generated by drone. please do not edit it!
140
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 26/08/2026
frostbite is such a sensible and reasonable engine
code that reads an UUID, with a comment noting that said UUID is in the big endian format, but has to be read backwards because it's stored backwards for some reason
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 25/08/2026
æugh thanks past epsilon real fucking nice code again, dumbass
code that skips a header with a comment: "todo: actually validate this shit or something"
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 25/08/2026
and with a bit of generic majyyks it can now do this too
now the at() method supports direct assignment of it's block return valuethe definition, with the method taking a generic type argument
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 25/08/2026
as much as i tend to not be a fan of functional programming, kotlin's FP features do allow for some cool stuff sometimes
a method called 'at' being called on a position, with a block as the second parameterthe definition for 'at()', which runs a block of methods with DynamicBuffer as their receiver at a defined position in the backing array, then returns to the previous position
110
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 25/08/2026
i'm also doing so in a very lazy manner
partial kotlin implementation of a dynamically rescaling byte buffer thing, using temporary bytebuffers for writes because i can't be arsed to do this properly
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 23/08/2026
on the note of random images from my device btw apparently i have this
DDR flag in lesbian colours, with the ribbons on the insignia in trans colours
0185
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 23/08/2026
if you see this, we implore you to post a picture from whatever device you're using without explanation
sandwich emoji with bottom eyes
030
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 20/08/2026
look at this it's so clean
an Sha1 instance being created with a static infix function in kotlin
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 20/08/2026
amusingly as annoying as me being so tired all the time is it does give me mild species euphoria because like
whitetip reef sharks, captioned "whitetip reef sharks spend much of the day laying still on the bottom"
060
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 19/08/2026
i see _someone_ has been considering book shopping, one of my browsers has grown new tabs while i wasn't looking
browser tab for a local bookstore's product page for a copy of Carmilla
030
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 16/08/2026
this is such a mess but i guess it works for now
a snippet of kotlin code which retrieves a hash for a boxed value/array and sticks it into an array along with some other data. it is a mess and garnished with comments featuring appropriate language
040
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 11/08/2026
I believe I have now Finally found a horn paint scheme I like enough to finish experimenting The colours are Revell's no.30 gloss orange for the base, no.310 "Lufthansa" yellow for the middle, and no.15 yellow for the tip
Yet more troll horn hair pins, now with an overall slightly more yellowish paint scheme
130
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 11/08/2026
I have experimented further, I believe so-called Lufthansa Yellow combined with orange tips is the best colour scheme thus far. This photo is from when they were still freshly painted, now that they are starting to have dried they look slightly better still
More hairpins, now with a less aggressive contrast
030
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 09/08/2026
also because Kotlin has when guards i replaced what Frosty has an entire giant method for with.. this
an else branch of a kotlin when statement, with a guard specifying that it only matches on the pointer writing pass, on which it writes nothing and just seeks the node's size forward
110
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 09/08/2026
I have painted a second set of horns. These have the orange part in the base PETG print colour. The semi-matte red paint appears to perfectly conform to and match the glossiness of the underlying plastic, and as I could not find matte red and orange, I may try to instead find semi-matte yellow
Two hair pins modeled after the horns of jade-blooded trolls, currently drying on my makeshift painting stands. They have a slightly more pale centre section compared to my other ones (which are in the background), and the red base has a texture near-perfectly matching said centre section
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 09/08/2026
"Vampire Comrade" is a remarkably uninteresting result, however I cannot dispute its accuracy, at least regarding myself specifically The generator can be found here: generatorland.com/usergenerato...
Sexual identity generator helpfully informing me that I am a "vampire comrade", something I in fact already knew
030
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 09/08/2026
right i forgot a hex 0x8 was causing confusion and proceeded to experience neuron activation writing the bundle format detection still got no idea what the fuck is going on there 8tw, it works though so whatever
comment from Freon's source code about how a hex 0xBB is supposed to be 0xB8. after the eight is mentioned the letter be in the comment is replaced by 8, and information is spelled "inform8ion"
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 08/08/2026
ok which one of these diagrams do y'all think is the clearest? or something else i didn't think of? the data structure described is a struct from the Frostbite EBX type descriptor table, for context
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 07/08/2026
disregard my placeholders, i have made progress on serializing EBX the structure looks to match the original on quick inspection, it's just missing the string and array tables; which the GCATs are pointers to; i can't write those yet because i don't know the table positions
a partial RIFF EBX object from NFS unbound in ImHex. there's a lot of GCAT in there
161
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 06/08/2026
yay it works the names are just manually from a hashmap for debugging, and i still don't handle every type, but like, i can read EBX
first instance of NFS: Unbound's EBX entry "systems/render/mesh/defaultlodgroup" printed out as a tree
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 06/08/2026
this should work, i might convert the remaining aliases to subclasses too tbh they're a nice idea but with the duplicated generics they don't really work perfectly and also everything being a subclass would let me seal EbxPrimitive
the same EbxPrimitive class, now with EbxInt and EbxEnum as well as EbxString and EbxCString separated into their own subclasses, as they would share the generic type otherwise, leading to them being aliases for the same type
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 06/08/2026
so i remembered type aliases exist and that getters exist, meaning i now only need to pass a field index to EBX nodes the only issues are the enum and CString, i may still need to make subclasses for those
class EbxPrimitive from Freon, representing an EBX node holding a primitive type. previously it consisted of a pile of subtypes of EbxPrimitive, now it is simply type aliases for an EbxPrimitive that takes in a generic
130
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 05/08/2026
Now that I have tried them in practice I would indeed describe these hair pins as a success, as pictured. And yes, I am aware I need to re-dye and cut my hair, again Now, if only they would come up with a kind of HRT that makes you bioluminescent (and gives you fangs)
Me, a very pale black-haired woman wearing the hair pins I have posted about before.
290
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 05/08/2026
i had to move my main monitor slightly to the left to fit the other two and now there's not enough space for Kerfuś between my DAC and monitor so i guess this is the best solution
Kerfuś plushie behind my monitor, their top half sticking out
140
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 05/08/2026
I have successfully painted hair pins. The result is not perfect as no matte orange or red paint was available, and the yellow could stand to be slightly more orange-ish. However, they are still relatively successful considering my hatred of and lack of skill in painting, and the paints available
My Homestuck troll horn hair pins, now painted
030
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 05/08/2026
i have successfully read an EBX i do feel like reworking how i handle types though, the current setup is kinda a circuitous thing that sucks ass
NFS: Unbound's EBX entry called DefaultLodGroup inspected in IDEA's debugger, decoded into a very overengineered class structure
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 04/08/2026
I have tested a different style of painting on one of the old test prints, I think I prefer this The orange base is used for the middle part rather than paint, it is slightly lighter than the paint I could find, and more matte, as apparently no store nearby sells matte orange model paint
One of the hair pins I posted earlier, now with the orange part painted on and drying. Next to it is a second one, where only the tip is painted yellow and the base red, while the middle is left unpainted as the pins are printed of orange filament
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 04/08/2026
so i *think* this is the missing string table from the shared type descriptor table in NFS Unbound's InitFS this is an excerpt from the exe, if anyone recognises the data structure and how to parse it, do tell
030
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 04/08/2026
I have successfully painted the first layer on two of my hair pins Despite this success, I still hate painting, but at the minimum the results do appear to so far be worth it
Two hair pins on painting stands made of clothespins and.. hair pins, painted yellow. They are shaped like the horns of jade-blooded trolls from Homestuck. In the background is a practice piece and three tins of Revell model paints in yellow, orange, and red
120
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 31/07/2026
for those curious
an explanation for the compression header. it's a 64-bit bitfield that contains a buffer size, a short int always set to 7, a compression type enum, the decompressed size, and flags. the compression type can be none, zlib, lz4, zstd, or OodleLZ's kraken, selkie, and leviathan variants
010
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 29/07/2026
can you tell i don't like huffman coding
a huffman decoder implemented in Kotlin, with rather undescriptive documentation containing many instances of the word "bullshit". the decoder object is also described as an "utter bullshitfest plagiarised from the internet"
020
Epsilon sinfulSinewave ~ @sin.sinewave.technology · 28/07/2026
when like, if you want the thing to look good, you need to account for the fact that the roof line is designed to swoop down at the back, not just end abruptly this is already kilometres better, just by adding side panels to part of the tray (🧵)
the same S90 ute, now with triangular side panels at the cut off point
110