Post B1VB10UpGxOaz1DSpk by foone@digipres.club
(DIR) More posts by foone@digipres.club
(DIR) Post #B1PPsJs3vwZGMXszOS by foone@digipres.club
2025-12-19T10:45:22Z
0 likes, 1 repeats
2:45am is the perfect time to try to reverse engineer a PS2 game by strategically breaking the filesystem, right?
(DIR) Post #B1PPsKrkEbuLRqkFXM by foone@digipres.club
2025-12-19T10:53:38Z
0 likes, 0 repeats
well I can confirm that if you break the directory names for CHARAL and CHARAS in Robot Alchemic Drive, it gets to the first scene where it's supposed to display them and just softlocks forever
(DIR) Post #B1PPsM5bgYafF8Epma by foone@digipres.club
2025-12-19T10:53:48Z
0 likes, 0 repeats
so that's confirmation that they're at least being used, I guess
(DIR) Post #B1PPsMoH0UJrTf8VP6 by foone@digipres.club
2025-12-19T11:04:09Z
0 likes, 0 repeats
hmm. a switch with 7 subfunctions, two of which have already been identified as LoadLargeChara and LoadSmallChara.So... generic image loader, or dialogue script evaluator?
(DIR) Post #B1PPsNkPWKp8NyKw1Q by foone@digipres.club
2025-12-19T11:05:26Z
0 likes, 0 repeats
the load image looks like: cVar1 = (**(code **)(*(int *)(param_1 + 0xda8) + 0xc)) (param_1 + 0xda4,param_1 + 0x624,*(undefined1 *)(param_1 + 0xe1c),0);so we've got C++ with vtables, yay
(DIR) Post #B1PPsPB2CpiMopni9w by foone@digipres.club
2025-12-19T11:05:31Z
0 likes, 0 repeats
MY FAVORITE
(DIR) Post #B1PPsQ0R7ipbOFqlHM by foone@digipres.club
2025-12-19T11:06:17Z
0 likes, 0 repeats
vtables are contentious in reverse engineering. they can often reveal a lot of structure which is very useful to a reverse engineer.but they also make everything way more complicated which makes my head hurt
(DIR) Post #B1PPsQsfs4DU6TE4oq by foone@digipres.club
2025-12-19T11:28:36Z
0 likes, 0 repeats
okay thankfully they're using one of those vtable implementations where the first slot points to a string that describes the vtableso I've located C_Scenario and it seems to have a virtual member function that evaluates individual opcodes
(DIR) Post #B1PPsRkCf32CmUGpFo by foone@digipres.club
2025-12-19T11:41:15Z
0 likes, 0 repeats
Tomoe_Large_Normal.FACEwell, it's actually 友絵_大_通常but here's the fun part: it's shift-jis! nooooooo
(DIR) Post #B1PPsT8hTSDx6kju4m by foone@digipres.club
2025-12-19T11:59:21Z
0 likes, 0 repeats
found some text! it's encoded as shift-jis full width characters, then rendered as not-full-width characters
(DIR) Post #B1PPsUljPp2WA60aYK by foone@digipres.club
2025-12-19T12:00:11Z
0 likes, 0 repeats
it's also compressed somehow, it doesn't appear in the ISO, I've only spotted it in RAM
(DIR) Post #B1PPsVudADkhhzBD3w by foone@digipres.club
2025-12-19T12:04:44Z
0 likes, 0 repeats
and I can set a breakpoint on the buffer in ram to see when it changes, which gives me the address of... memcpy
(DIR) Post #B1PPsWWCuVoHaWlDdI by foone@digipres.club
2025-12-19T12:06:27Z
0 likes, 0 repeats
fortunately I can just look up the stack and find memcpy_wrapper
(DIR) Post #B1PPsXKXtM4m6eJQ5w by foone@digipres.club
2025-12-19T12:07:30Z
0 likes, 0 repeats
ugh I think they're using a C++ smart string library
(DIR) Post #B1PPsY1nIYfeGmXxVQ by foone@digipres.club
2025-12-19T12:12:15Z
0 likes, 0 repeats
BaB::C_Buffer<BaB::C_String *>YEP. it's a C_Buffer that's templated on C_Strings
(DIR) Post #B1PPsYdj1X0oAQIFd2 by foone@digipres.club
2025-12-19T12:13:36Z
0 likes, 0 repeats
from looking at constants in the binary, it looks like their library supports tags like: WAITKEYP, WAITKEY, CLEAR, COLOR, and WAITTIME
(DIR) Post #B1PPsZPw8HZoZwqkm8 by foone@digipres.club
2025-12-19T12:16:21Z
0 likes, 0 repeats
extracted some script from RAM:v1-3-1\x00Hello.<RET>We\u3000bring\u3000you\u3000breaking\u3000news.\x00v1-3-2\x00It’s...\x00
(DIR) Post #B1PPsarckpJn46oNZQ by foone@digipres.club
2025-12-19T12:17:52Z
0 likes, 0 repeats
so each line of script has a name at the beginning, then a nul, then the text, then another nulso like, the first line of text in the game is v1-3-1, then v1-3-2 through v-1-3-10
(DIR) Post #B1PPsbfxjfaHaEMa24 by foone@digipres.club
2025-12-19T12:18:44Z
0 likes, 0 repeats
and they use <RET> for newlines for some reason. why not just encode them as \n or \r or both?
(DIR) Post #B1PPscWQabYGCwuToG by foone@digipres.club
2025-12-19T12:23:27Z
0 likes, 0 repeats
text injection is possible!
(DIR) Post #B1PPsdlLyb5K3WtuiG by foone@digipres.club
2025-12-19T12:25:06Z
0 likes, 0 repeats
IS THIS ANOTHER FUCKING MEMCOPY?
(DIR) Post #B1PPsedwhckmmqRVo0 by foone@digipres.club
2025-12-19T12:26:37Z
0 likes, 0 repeats
oh god are they DMA'ing in text? why would you do this for TEXT? it's tiny!
(DIR) Post #B1PRRGdM3rQyPcEcVM by foone@digipres.club
2025-12-19T12:32:37Z
0 likes, 0 repeats
all this indirection makes it hard to figure out where the compression/encryption code actually is
(DIR) Post #B1PRRHdOLD3dW1GACW by foone@digipres.club
2025-12-19T12:42:29Z
0 likes, 0 repeats
so I have matched up some code from the CONTROL.DY file with the extracted RAMthe snippet: "tialize\00\xFD\xF8\x97\x09main" matches up with:"tialize\0\f8\0\0\0\0\0\x01\0\0\0\0\0\0main"so... some kind of RLE?
(DIR) Post #B1PRRIG21XxxRrL1Qe by foone@digipres.club
2025-12-19T12:58:54Z
0 likes, 0 repeats
okay so it turns out I already found the function that decodes the text:00159350 TextDecodeSo I know where to focus my efforts sometime when it's not 5am
(DIR) Post #B1PRTfBrjOyj9VWGqO by foone@digipres.club
2025-12-19T12:59:35Z
0 likes, 0 repeats
it appears it decodes the text in 16bit chunks, which is gonna be FUN to emulate
(DIR) Post #B1PRTgTGyAUr7mfgcC by foone@digipres.club
2025-12-19T13:00:06Z
0 likes, 0 repeats
I think it also might operator in 8-byte chunks?
(DIR) Post #B1PT9ocNAbomVYa77I by foone@digipres.club
2025-12-19T13:22:02Z
0 likes, 0 repeats
so I know which function it is that loads data from a VFS, if I can figure out how to extract the file directory from the VFS (either from the file or the in-ram representation), I can automate calling it for each file and saving the result, so I can extract the whole filesystem
(DIR) Post #B1PUH4g3xYBoITKh1c by maaneeack@noc.social
2025-12-19T15:11:34Z
0 likes, 0 repeats
@foone Grandma!
(DIR) Post #B1PVk8p9imDXVf0g3k by jonathankoren@sfba.social
2025-12-19T12:34:48Z
0 likes, 0 repeats
@foone what’s up with u3000 as space?
(DIR) Post #B1PVk9uVgM5usYWT2m by foone@digipres.club
2025-12-19T12:35:37Z
0 likes, 0 repeats
@jonathankoren it's U-3000 Ideographic Space, which is the full-width version of a space
(DIR) Post #B1PWgS1CW0p1prRqDo by ash@gayrobot.club
2025-12-19T12:29:25.781770Z
0 likes, 0 repeats
@foone can you extract the english dub voicelines? I always wanted a collection of them but my reverse fu is very weak
(DIR) Post #B1PWgTMVWHSY0EQN4S by foone@digipres.club
2025-12-19T12:29:52Z
0 likes, 0 repeats
@ash not yet. I need to understand the VFS files better for that, but it's on the TODO
(DIR) Post #B1PWgUJ00oFOvdn5F2 by ash@gayrobot.club
2025-12-19T12:31:55.207490Z
0 likes, 0 repeats
@foone please let the world know if the Nanao offing themselves route thing the one gamefaq about this game talks about is true or just a hoax. We could never get it and it sounds the most L is real thing ever.
(DIR) Post #B1PWgVGYRNszuLee4O by foone@digipres.club
2025-12-19T12:36:54Z
0 likes, 0 repeats
@ash I'll try!
(DIR) Post #B1PYnUpQfK8eUDQfPE by foone@digipres.club
2025-12-19T10:54:48Z
0 likes, 0 repeats
@zero well it's a combination of the PS2 DVD filesystem and the VFS the game implements
(DIR) Post #B1PYsgjtoD2esJJnUW by firefly@frogs.lgbt
2025-12-19T10:48:27Z
0 likes, 0 repeats
@foone yep
(DIR) Post #B1Q8qgTlOzo7q37Adk by disorderlyf@todon.eu
2025-12-19T17:03:34Z
0 likes, 0 repeats
@foone No.@news.
(DIR) Post #B1Q8qhbFEfNzJXcewK by foone@digipres.club
2025-12-19T22:46:03Z
0 likes, 0 repeats
@disorderlyf no news would actually be a comforting change, these days. seems there's a bit too much news
(DIR) Post #B1Q9ICklW15BkoBpzc by foone@digipres.club
2025-12-19T22:51:20Z
0 likes, 0 repeats
wake up next day, go to doctor, get back, relax into bed and check project status:reverse a decompression algorithmwell you know I'm still recovering from surgery, I should take it easy, maybe I'll just play Civilization V for a couple hours
(DIR) Post #B1Q9KTQQV5aq2Yl5Mm by foone@digipres.club
2025-12-19T22:51:32Z
1 likes, 0 repeats
there's no part of reverse engineering I hate more than fucking COMPRESSION ALGORITHMS
(DIR) Post #B1SvYecb7Zp3P3xCDo by foone@digipres.club
2025-12-21T07:01:29Z
0 likes, 0 repeats
okay so this compression algorithm first starts by erasing memory in 64-byte chunks, using 8 64bit writes each iterationerasing a total of... 4k? I think? it counts weird
(DIR) Post #B1SwjFllxcZpSvrZuy by foone@digipres.club
2025-12-21T07:14:37Z
0 likes, 0 repeats
okay decompression starts at the 4th byte, and it turns out the first DWORD is the decompression size
(DIR) Post #B1SwynvLG31Vjlkpfc by foone@digipres.club
2025-12-21T07:17:31Z
0 likes, 0 repeats
ahh, it sticks a temporary buffer at 70000000, which is the "scratchpad RAM"
(DIR) Post #B1Sx4NNyq3vNAUo4hs by foone@digipres.club
2025-12-21T07:18:32Z
0 likes, 0 repeats
on the PS2 the scratchpad RAM is RAM that's accessed as normal but only exists inside the CPU. It's got 16 entire kilobytes of it
(DIR) Post #B1SxIOiEhdTJKxy1QW by foone@digipres.club
2025-12-21T07:21:03Z
0 likes, 0 repeats
this would be a lot easier to understand if it wasn't trying to decode 8 bytes at a time
(DIR) Post #B1SxKtYL0geVZ9Wo1A by foone@digipres.club
2025-12-21T07:21:14Z
0 likes, 0 repeats
maybe I'll go look at the VFS directory implementation instead
(DIR) Post #B1SxyZlVzysjmOc45g by madengineering@mastodon.cloud
2025-12-21T07:28:36Z
0 likes, 0 repeats
@foone Oof, I'm expecting compression algorithms to be mostly "I am very smart" piles of abject insanity. Please promise me you'll take regular sanity breaks.
(DIR) Post #B1SyBv2SDUovWPtloG by foone@digipres.club
2025-12-21T07:31:04Z
0 likes, 0 repeats
okay I have manually extracted a 285 byte compressed chunk that decompresses to 421 bytesso I can test the decompression routine I'm gonna have to write
(DIR) Post #B1SzoztcBsUXpoxhbs by foone@digipres.club
2025-12-21T07:49:17Z
0 likes, 0 repeats
okay I can decode most of a directory listing. now I gotta figure out how different directories are linked together, since this VFS format doesn't have one big index, it's a bunch of hierarchical directories
(DIR) Post #B1T04orOzMcAF2THrE by foone@digipres.club
2025-12-21T07:52:12Z
0 likes, 0 repeats
AHHHHHHHHH the top directory uses a DIFFERENT FORMAT
(DIR) Post #B1T1CKEmpMeVXNYJ2u by foone@digipres.club
2025-12-21T08:04:41Z
0 likes, 0 repeats
got it. I can list all the files in all the subdirs. It only supports a top dir + a subdir, you can't nest deeper than that. There's a total of 1971 files in CONTROL.DY
(DIR) Post #B1T1REIdBekhSsSQK0 by foone@digipres.club
2025-12-21T08:07:25Z
0 likes, 0 repeats
there's two VFS files (CONTROl.DY and REMOTE.DAN) and they use DIFFERENT DIRECTORY FORMATSwhy? because FUCK ME that's why
(DIR) Post #B1T1sgsd26qTvOOCjA by foone@digipres.club
2025-12-21T08:12:25Z
0 likes, 0 repeats
oh good, nevermind, it's not. it seems to be the same
(DIR) Post #B1T2ADVqxVVI3X5rdo by foone@digipres.club
2025-12-21T08:15:35Z
0 likes, 0 repeats
I think DAN is mostly (or completely?) audio files, and it doesn't look like they compressed any of them.at least not using their homegrown compression, they're probably some other audio compression format
(DIR) Post #B1T3HNdDprFjQ7WIS0 by foone@digipres.club
2025-12-21T08:28:03Z
0 likes, 0 repeats
so what I think is the dialogue files are these genericly named files like:V58\10c-1no extension. They start with "BA", a file length, and 2k of zeroes
(DIR) Post #B1T49IDcB27aGmFYA4 by foone@digipres.club
2025-12-21T08:37:48Z
0 likes, 0 repeats
okay it's not 100% alright (it's clipping in some places) but using Tenacy and importing with VOX ADPCM, offset of 2080, and sample rate of 22050 gives me reasonable-sounding audio
(DIR) Post #B1T4CIjciKF8juejsO by foone@digipres.club
2025-12-21T08:38:00Z
0 likes, 0 repeats
so now I can extract all the dialogue!
(DIR) Post #B1T4Ji6AoK0jQljjFY by foone@digipres.club
2025-12-21T08:39:44Z
0 likes, 0 repeats
so I can find and extract all the dialogue (not compressed, I have a close enough code that works), and I can find all the other datafiles but not decompress them yet
(DIR) Post #B1T5ERZsuIW6hNgcLI by foone@digipres.club
2025-12-21T08:49:57Z
0 likes, 0 repeats
maybe I can procrastinate on the decompression routine by extracting all the audio, converting it to WAV, and then running it through a voice recognition model
(DIR) Post #B1UIJOLFrJ2kflUcjY by foone@digipres.club
2025-12-21T22:51:13Z
0 likes, 0 repeats
I think my problem with compression is that my ADHD means I am not good at holding a bunch of small numbers in mind. I can work around this limitation in most of my programming/reversing, but compression is inevitably a bunch of small numbers getting masked and bitshifted and indexed
(DIR) Post #B1UIVq7SPOiQIWyVPM by foone@digipres.club
2025-12-21T22:53:30Z
0 likes, 0 repeats
okays so broad strokes of the compression:it has a 4k scratchpad circular buffer, which it seems to keep updated on each iteration. it maintains two key variables, which I've named (somewhat arbitrarily) sliding_mask and control.
(DIR) Post #B1UIp9WgTj8BzOz3Pk by foone@digipres.club
2025-12-21T22:56:58Z
0 likes, 0 repeats
each iteration through the loop, control is set to sliding mask, and at the end of the loop sliding mask is shifted right by 1. in the loop, there's a first check:if sliding mask & 256 == 0, we set control to the 4 bytes off the input pointer (which I call "main pointer" for reasons).then the sliding mask is set to control OR'd with 0xFF00, and we advance the main pointer one byte
(DIR) Post #B1UIxLcbOLi3orexAO by foone@digipres.club
2025-12-21T22:58:29Z
0 likes, 0 repeats
then there's the big check:does control & 1 == 0? if so, we go into the RLE logic, which is Complicatedif not, we copy 1 byte from input to output, advance the pointer, and loop
(DIR) Post #B1UJ8K1xeC2S4Qko6K by foone@digipres.club
2025-12-21T23:00:25Z
0 likes, 0 repeats
in the RLE logic, control is set to the 4 bytes at the main pointer, OR'd with the second byte anded with 0xF0 and shifted left 4 bits.then we set write_len to the second byte of main_ptr ANDed with 0xF, and advance the main pointer by 2.
(DIR) Post #B1UJDLLCCfDPa993lA by foone@digipres.club
2025-12-21T23:01:23Z
0 likes, 0 repeats
and in the RLE logic, we are copying from the scratchpad to output, using the write_len (plus 2), at offset control
(DIR) Post #B1UJVXOk76I4BnTotU by foone@digipres.club
2025-12-21T23:04:37Z
0 likes, 0 repeats
like I've said before, compression isn't my strong point, but this seems like a simpler form of an LZ compression? just instead of a dictionary, they're using a circular buffer, and they've skipped any huffman coding steps
(DIR) Post #B1UJkuE3WUzvKcoF2u by foone@digipres.club
2025-12-21T23:07:26Z
0 likes, 0 repeats
normally I'd say this was probably hacked in at the last moment to save on space, but this is a 500mb PS2 game, they had space to spare.
(DIR) Post #B1UJyNd5VoACI3wWUS by foone@digipres.club
2025-12-21T23:09:51Z
0 likes, 0 repeats
yeah and if they didn't compress anything, they'd have wasted about 98 megabytes.Load speed, maybe? I'm playing on an emulator off an SSD but this might have been a nightmare on a real PS2, especially since they load a lot of files in no particular order and at CD speeds
(DIR) Post #B1UKBj0lKHUQMyNbhw by foone@digipres.club
2025-12-21T23:12:14Z
0 likes, 0 repeats
anyway the main complication in the RLE branch is that it tries to do 8 bytes at a time. I don't know if this was done manually or if it was a compiler trying to inline a memcpy
(DIR) Post #B1UKjIoLFEdsxMa5Oy by foone@digipres.club
2025-12-21T23:18:17Z
0 likes, 0 repeats
gonna try and punt and just copy-paste the ghidra code into a C file and see if I can hack it into working without having to fully understand it
(DIR) Post #B1ULUwcR3cKk1rjHxg by foone@digipres.club
2025-12-21T23:26:56Z
0 likes, 0 repeats
I have written too much fucking C++ code in my time.
(DIR) Post #B1UMD0g7KGaLMQSnzs by ozzelot@mstdn.social
2025-12-21T23:35:19Z
0 likes, 0 repeats
@fooneEveryone has, if they wrote even one line of C++
(DIR) Post #B1UMcxeJD8B7Ukza40 by foone@digipres.club
2025-12-21T23:39:34Z
0 likes, 0 repeats
of course before I can even get into the decompression I run into 32bit/64bit compatibility problems with just erasing the scratchpad
(DIR) Post #B1UMfqtOmvbjPOQew4 by foone@digipres.club
2025-12-21T23:39:45Z
0 likes, 0 repeats
don't cast your pointers to int kids
(DIR) Post #B1UMzeovNjgVl7mQS0 by foone@digipres.club
2025-12-21T23:43:40Z
0 likes, 0 repeats
I changed the type of scratchpad to a byte* instead of a void*, which removed all the int casts but did cause ghidra to unroll setting 64 bytes at once
(DIR) Post #B1UN37wpXil2xu8H7g by north@xn--8r9a.com
2025-12-21T23:44:17Z
0 likes, 0 repeats
@foone does an int kid grow up to be a char16_t?
(DIR) Post #B1UN6JW4zJ0XiH8huq by foone@digipres.club
2025-12-21T23:44:53Z
0 likes, 0 repeats
it decompressed without issue!
(DIR) Post #B1UNBsz4Y0BzA6MEVM by foone@digipres.club
2025-12-21T23:45:56Z
0 likes, 0 repeats
yay I love code I barely understand working. now to un-hardcode a few things and then try running it on all couple thousand files
(DIR) Post #B1UNV0jpwQhoiILoPo by foone@digipres.club
2025-12-21T23:49:24Z
1 likes, 0 repeats
int main(int argc,char *argv){I'm not sure what I hate more:that this compiles or that I typed it without realizing the obvious mistake
(DIR) Post #B1UP3hwXudzoVlP72W by foone@digipres.club
2025-12-22T00:06:49Z
0 likes, 0 repeats
okay I've got it running. extracted all of CONTROL.DY (1,971 files), and REMOTE.DAN (6,182 files)
(DIR) Post #B1UPEdEhknmb686fpo by foone@digipres.club
2025-12-22T00:08:48Z
0 likes, 0 repeats
remaining stuff to do:1. extract the scripts from the mission briefings / other text files?2. decode all the voicelines into WAVs2b. optionally autotranscribe them3. decode the font? I'm looking at the files and it's mostly obvious, but it may be WAY easier to use my Automatic Visual Font Extraction scheme on it
(DIR) Post #B1UPMOH9GEXV0zwuvI by lanodan@queer.hacktivis.me
2025-12-22T00:10:31.895708Z
0 likes, 0 repeats
@foone Oh yeah, accidentally done that one quite few times…
(DIR) Post #B1UPTVDrpWwuaWo1XE by foone@digipres.club
2025-12-22T00:11:31Z
0 likes, 0 repeats
huh. it uses a scripting system called "BAT" (not a real batch file, surely?) which seems to be a list of commands.Example file, SIREN.BAT:openmap map\map01CameraPos 0 700 0 700 3.14object object\Siren.vobobjectpad 4objectteam 1CameraPos 0 625 0 800 0probject object\player1.vob object\Siren.vob 0 0objectteam 0CameraPos 0 700 0 700 0console 0FadeIn 2
(DIR) Post #B1UPZr7RKhuqEgpSDY by foone@digipres.club
2025-12-22T00:12:40Z
0 likes, 0 repeats
yeah these may only be test scripts. debug menu, maybe?
(DIR) Post #B1UPfE9P84Ll7DJE0m by foone@digipres.club
2025-12-22T00:13:39Z
0 likes, 0 repeats
the game also definitely has the ability to load a USB keyboard driver (they stuffed the driver inside CONTROL.DY for some reason) but I don't know if that means it actually responds to any keyboard keys.
(DIR) Post #B1UPov6gmwHWwpf2ie by foone@digipres.club
2025-12-22T00:15:23Z
0 likes, 0 repeats
the MAP folder inside CONTROL.DY has MAP01 through MAP09, MAPBLK, and EFFECTTESTI'm guessing EFFECTTEST is unused
(DIR) Post #B1UQQCxPNsbl1Z6HEu by foone@digipres.club
2025-12-22T00:22:07Z
0 likes, 0 repeats
the first file under OBJECT in CONTROL.DY is "AISAMPLE.VOB"figures. even in 2002, you can't escape AI slop!
(DIR) Post #B1UQygFMzZk9i6wIQS by foone@digipres.club
2025-12-22T00:28:19Z
0 likes, 0 repeats
ah-ha! so Robot Alchemic Drive was made by Sandlot in 2002.In 2003 they released the first of the Earth Defense Force series, Simple 2000 Series Vol. 31: The Chikyū Bōeigun/Monster Attack.and I just checked: that game uses the same VFS format for its datafiles!
(DIR) Post #B1UR1J05sVNMTw2tkG by foone@digipres.club
2025-12-22T00:28:30Z
0 likes, 0 repeats
bet this is the same engine, just refined
(DIR) Post #B1URHf2zg0CFUZCX2m by foone@digipres.club
2025-12-22T00:31:47Z
0 likes, 0 repeats
I love hacking one game and finding out I hacked several other games I didn't know about in the process
(DIR) Post #B1URTUELidodQ39S0e by foone@digipres.club
2025-12-22T00:33:53Z
0 likes, 0 repeats
okay so extracting the script is going to be hard. they are stored inside IEX files, which I think contain binary code as well. So I can't easily statically figure out where the shift-JIS script is, even if it's mostly identical between missions
(DIR) Post #B1URemAfMAnUFKoOS8 by foone@digipres.club
2025-12-22T00:35:55Z
0 likes, 0 repeats
the menus are under SHINKOU which apparently means "faith"?
(DIR) Post #B1USf4vfiL88NUVSts by foone@digipres.club
2025-12-22T00:47:10Z
0 likes, 0 repeats
oh interesting! there's a prototype, which uses a different naming scheme for the two VFS files:it calls them RAD.EE and RAD.IOPThat's Emotion Engine (CPU/GPU) and I/O Processor.And that split makes sense for the CONTROL.DY/REMOTE.DAN too: CONTROL is files the CPU/GPU needs, like levels and textures and subtitles, while REMOTE is sound files
(DIR) Post #B1USkuDCTQeQsOU3qC by foone@digipres.club
2025-12-22T00:48:16Z
0 likes, 0 repeats
which might explain why they're not compressing the REMOTE/IOP files: without a CPU to decompress it, they're just DMAing straight from the DVD into IOP memory
(DIR) Post #B1USvN9liGWxXgrz60 by foone@digipres.club
2025-12-22T00:50:10Z
0 likes, 0 repeats
interesting: one of the modules it loads is called ISFSOUND and contains the string "ISF_SOUND_DRIVER_BY_BaB_2001/2002""BA" is the magic number for the voice files
(DIR) Post #B1UT5Mk074JP9JaA0e by foone@digipres.club
2025-12-22T00:51:59Z
0 likes, 0 repeats
no one with an obvious BAB name shows up in the credits.
(DIR) Post #B1UTaKWEQO81EbuH6u by foone@digipres.club
2025-12-22T00:57:33Z
0 likes, 0 repeats
maybe it's time to hook up some injection to extract textures/models
(DIR) Post #B1UU98K7l4gnXyq4qO by foone@digipres.club
2025-12-22T01:03:50Z
0 likes, 0 repeats
my kingdom for debuggers that let me set them to logging only and define what gets logged. I'm so tired of stepping through a bunch of OpenFile breakpoints, and having to click three times on each one to look up what file its trying tor read
(DIR) Post #B1UWQ0SGT0n5yRou7E by foone@digipres.club
2025-12-22T01:29:16Z
0 likes, 0 repeats
for some reason all the portraits are stored at 50% opacity
(DIR) Post #B1UXFpxCkpeGSq0Tuy by foone@digipres.club
2025-12-22T01:38:35Z
0 likes, 0 repeats
@ben I'm not sure what negative alpha would mean
(DIR) Post #B1UZcKhfJFB66vapEW by foone@digipres.club
2025-12-22T02:05:03Z
0 likes, 0 repeats
bunch of functions in a raw that are all mysteriously no-opssomebody used a define to turn off a logging function, I bet
(DIR) Post #B1UgZnhxiHOKsUTIAK by n_dimension@infosec.exchange
2025-12-22T02:08:18Z
0 likes, 0 repeats
@foone NOPs were sometimes used in assembly as a hacky and precise time delay as executing a nop took a clock pulse.
(DIR) Post #B1UgZp9IM8qjLYGdPM by foone@digipres.club
2025-12-22T03:22:56Z
0 likes, 0 repeats
@n_dimension I'm not talking about a NOP instruction, I meant a function that's called, but it does nothing, just returns.
(DIR) Post #B1Unb21oeih3GBIAQi by foone@digipres.club
2025-12-22T04:41:43Z
0 likes, 0 repeats
tried to put it aside for the day, managed nearly three hours.
(DIR) Post #B1UqNBDtyL4RaO21YG by foone@digipres.club
2025-12-22T05:12:53Z
0 likes, 0 repeats
I finally got the emulator in the right place to inject a different character name, typed in the 40-digit hex number, and hit resume, and waited... and the whole emulator crashed
(DIR) Post #B1UrZk847QJ9H1r8mu by foone@digipres.club
2025-12-22T05:26:19Z
0 likes, 0 repeats
this would be a lot easier if I understood japanese and my hex editor understood shift-jis
(DIR) Post #B1UrfcoAFcGWJ0LtwW by foone@digipres.club
2025-12-22T05:27:26Z
0 likes, 0 repeats
don't get me wrong, I totally understand why my hex editor doesn't understand shift-jis. it'd be a terrible feature to support such an insane text encoding that no one should use
(DIR) Post #B1UszDWM4szNclvc36 by foone@digipres.club
2025-12-22T05:42:04Z
0 likes, 0 repeats
The three versions of the 3 filenames I'm looking at, in shift-jis hex, translated name, original name.(I need to make a program to compile this shit for me, manually assembling this is a pain!)
(DIR) Post #B1UtYisnSzjh1kM76W by foone@digipres.club
2025-12-22T05:48:34Z
0 likes, 0 repeats
also I keep having to retype manually 36-character hex filenames. and not only is that boring and error prone, but remember, I'm me: I immediately start ADHDing off onto the idea of building a keyboard to automate this somehow
(DIR) Post #B1Uttj5vsFrvlWVzLE by foone@digipres.club
2025-12-22T05:52:24Z
0 likes, 0 repeats
if you ask a foone to type in a 36-character string, she'll start thinking about building a keyboard by digit 8, open an IDE at digit 16, and by digit 24 she's got a microcontroller connected over USB
(DIR) Post #B1UuJT67yML9gIsgE4 by foone@digipres.club
2025-12-22T05:57:03Z
0 likes, 0 repeats
wait am I mixing up UTF-8 with shift-JIS? that would explain some crashes
(DIR) Post #B1UuMzcxU88LRFuyfI by foone@digipres.club
2025-12-22T05:57:41Z
1 likes, 0 repeats
^^^ NO ONE SHOULD HAVE THIS PROBLEM IN 2025
(DIR) Post #B1Uunxbh6YayzWBZpI by foone@digipres.club
2025-12-22T06:02:33Z
0 likes, 0 repeats
ugh. this is just an artifact of how I'm generating the indexes in program A and printing filenames in program B and there's too much normalization between them
(DIR) Post #B1UuxTcpQm4QttFoVU by foone@digipres.club
2025-12-22T06:04:17Z
0 likes, 0 repeats
either I need to encode an intermediate file in shift-jis, or refactor program A to output jsonthe latter is unfun work compared to the ease of the former... but the former should be considered a crime in many countries. for the good of the internet, do not create more shift-jis files
(DIR) Post #B1UwYDBBdfXqYzPBMu by foone@digipres.club
2025-12-22T06:22:05Z
0 likes, 0 repeats
anyway it's time for a spreadsheet
(DIR) Post #B1V48vBGDiE58PtKEq by foone@digipres.club
2025-12-22T07:47:04Z
0 likes, 0 repeats
okay look I don't want everyone to think I took an hour and a half to add CSV export to my scripts and import it into google sheets and make it translate them allthere was some Life Events that took me away from video game hacking for an hour. I don't want you to think I'm losing my touch here
(DIR) Post #B1V4GBn4rZrGg12seu by foone@digipres.club
2025-12-22T07:48:28Z
0 likes, 0 repeats
so now I've got a list of every original filename's shift-jis encoded filename (for injection into the game at runtime, to make it load different images), the original kanji, and the translated version. cool.
(DIR) Post #B1V6JvvlyGjsYU1eme by foone@digipres.club
2025-12-22T08:11:33Z
0 likes, 0 repeats
hmm. I can't replace files on the disk (yet) because I don't have ability to rebuild the archives. and I can't just hex edit the ISO because they're compressed. ugh. I think I'm going to have to do everything in-ram, which is a pain
(DIR) Post #B1V8mISfznhsRw4JVI by foone@digipres.club
2025-12-22T08:39:00Z
0 likes, 0 repeats
well I got it to load the wrong level by modifying data while it's loading, but all I got out of it was a mostly blank window and a softlock:
(DIR) Post #B1V8qDtguKhbS5Zoqe by foone@digipres.club
2025-12-22T08:39:33Z
0 likes, 0 repeats
but before it ran the (dialogue) script, I saw where my character was located, and it was in the wrong level. Neat. Progress, even if short-lived
(DIR) Post #B1V9QvI92t1oSjVyJU by foone@digipres.club
2025-12-22T08:46:26Z
0 likes, 0 repeats
the bare minimum test when doing this kind of reverse engineering: CAN YOU BREAK IT? in this case, yes, yes I can. The portrait hasn't loaded properly, because I scrambled the filenames. That proves I'm poking in the right place!
(DIR) Post #B1VAQc0Kr4Wwb9bG64 by foone@digipres.club
2025-12-22T08:57:31Z
0 likes, 0 repeats
ah-ha! the first portrait shown in the second tutorial is Kaoruko News_Small_Tension.now I can inject over it!
(DIR) Post #B1VAXjHyAbfdDYF4JE by foone@digipres.club
2025-12-22T08:58:53Z
0 likes, 0 repeats
lets try swapping in Otawara_Small_Grin
(DIR) Post #B1VAaaPtc4BIZOJOjo by foone@digipres.club
2025-12-22T08:59:25Z
0 likes, 0 repeats
it's the same length, which is important because I don't think I can pad this string. if the string gets shorter, it breaks everything after it
(DIR) Post #B1VB10UpGxOaz1DSpk by foone@digipres.club
2025-12-22T09:04:10Z
0 likes, 0 repeats
we have portrait injection!
(DIR) Post #B1VBNoGAvtqnh3EjJI by foone@digipres.club
2025-12-22T09:08:16Z
0 likes, 0 repeats
now I just need to automate this. it took about an hour to figure out how to do this, now to do it 203 times in a row
(DIR) Post #B1VBZid3h6f5hjcQRE by foone@digipres.club
2025-12-22T09:10:24Z
0 likes, 0 repeats
I wonder if I can do a savestate between two instructions
(DIR) Post #B1VBkbOsuVOgTFB8Yi by foone@digipres.club
2025-12-22T09:12:22Z
0 likes, 0 repeats
I think I can. or close enough to it. I think it's time... for a keyboard
(DIR) Post #B1VCSznVZ0HesXrf0q by foone@digipres.club
2025-12-22T09:20:24Z
0 likes, 0 repeats
I skipped the keyboard and just edited the savestate as a test.FUN FACT: this is what happens if you fuck up the filename list! it loads the filename you told it to, then hangs.This is faster than letting the level finish loading, so now I'm going to crash it on purpose
(DIR) Post #B1VESZvDy55AXGP0nA by foone@digipres.club
2025-12-22T09:42:44Z
0 likes, 0 repeats
dang it. it doesn't always crash properly. it might crash improperly.I'm gonna need to carefully crash it.
(DIR) Post #B1VG6mPn2SGworQt5k by foone@digipres.club
2025-12-22T10:01:00Z
0 likes, 0 repeats
@sif I have stomping solutions:https://qwantz.com/index.php?comic=1
(DIR) Post #B1VG8z3B22aSaOuGMi by foone@digipres.club
2025-12-22T10:01:21Z
0 likes, 0 repeats
and now my (homemade) keyboard isn't working! why does this happen to me?
(DIR) Post #B1VGrb5ywSL7K5UYkq by cstross@wandering.shop
2025-12-22T10:04:58Z
0 likes, 0 repeats
@foone This REALLY calls for a Meme subtitled "rants in supervillain"
(DIR) Post #B1VGrcFEfXKst4pSoi by foone@digipres.club
2025-12-22T10:09:38Z
0 likes, 1 repeats
@cstross "supervillain" is one of the more fun moods to be in while programming.am I hacking this game the "right" way? absolutely not. I'm hacking it the way that's FUN TO CODE, and damn the "rules"
(DIR) Post #B1VGvUkOUCranDFjhg by foone@digipres.club
2025-12-22T10:09:53Z
0 likes, 0 repeats
@MxSpoon repeatedly!
(DIR) Post #B1VIQhayro79ZWIJrE by foone@digipres.club
2025-12-22T10:27:11Z
0 likes, 0 repeats
I think between when I wrote this code and now, some library I depend on changed in some way that's non-obvious.either that or I'm going mad.
(DIR) Post #B1VImkbyKm9fISGugq by foone@digipres.club
2025-12-22T10:31:13Z
0 likes, 0 repeats
@celestestormysea https://www.youtube.com/watch?v=8ZcqaolcjUILet's get mischievous and polyamorous
(DIR) Post #B1VJFGdsq0CMkMlP84 by foone@digipres.club
2025-12-22T10:36:22Z
0 likes, 0 repeats
ah-ha! I accidentally programmed my "Waveshare RP2040 One" as a "Waveshare RP2040 Plus"
(DIR) Post #B1VJMeq7Gs7Row0dma by foone@digipres.club
2025-12-22T10:37:44Z
0 likes, 0 repeats
and it makes no differenceWHAT THE ON IS FUCKING GOING
(DIR) Post #B1VJbc3zsJ1tYQdJcO by foone@digipres.club
2025-12-22T10:40:26Z
0 likes, 0 repeats
I should look up the 2bit hack that wrote this keyboard libraryunfortunately it's GPL'd to some clown named "Pagliacci"
(DIR) Post #B1VLEwwoGJWrZaanDM by foone@digipres.club
2025-12-22T10:58:42Z
0 likes, 0 repeats
MOTHERFUCKER CHANGED IN SEPTEMBER:https://github.com/earlephilhower/Keyboard/commit/3635ab65538a06083193718c02d55b3f08c73f11my code is failing because it doesn't call HID_Keyboard::begin() , but the last time I used this code, HID_Keyboard::begin() didn't exist
(DIR) Post #B1VLQ8ug7ABdrwvtFA by foone@digipres.club
2025-12-22T11:00:47Z
0 likes, 0 repeats
SHE LIVESman this library is a nightmare to get working every time I change computers. I need to shiny it up and release it I've been thinking that above paragraph since 2019
(DIR) Post #B1VMbR07IyVD6gQOaO by foone@digipres.club
2025-12-22T11:13:59Z
0 likes, 0 repeats
for not the first time and most certainly not the last time, my ass has stopped a program from working
(DIR) Post #B1VMhLckD2s6ATJPbk by foone@digipres.club
2025-12-22T11:15:03Z
0 likes, 0 repeats
I hit GO on the keyboard-automation program, and let go of the mouse to wait and observe.unfortunately since I'm still slightly bedridden, I'm in a recliner, and my mousepad is curving over one round arm. So the mouse slipped down, then hit my ass, which made it register a left click, switching away from my PS2 emulator and into File Explorer
(DIR) Post #B1VNJf6IFCgvZsP2tk by foone@digipres.club
2025-12-22T11:21:58Z
0 likes, 0 repeats
autoextracted my first portrait! this is Android_Small_Normal aka アンドロイド_小_通常
(DIR) Post #B1VNaHtVmG4MWnLtc8 by foone@digipres.club
2025-12-22T11:24:49Z
0 likes, 0 repeats
@sif me too!
(DIR) Post #B1VNe56lG5Ii1wMIOO by foone@digipres.club
2025-12-22T11:25:44Z
0 likes, 0 repeats
yep it worked on 6 of em. Next step, do all 203 of them, at something like 20 seconds an imageSee you in an hour and a bit? (hopefully. otherwise I'll post DAMN IT IT BROKE)
(DIR) Post #B1VRDHx3nXknrUIhtI by foone@digipres.club
2025-12-22T12:05:36Z
0 likes, 0 repeats
203 images extracted successfully!
(DIR) Post #B1VSAfblUGV2Jgegt6 by foone@digipres.club
2025-12-22T12:15:50Z
0 likes, 0 repeats
so that's #4 done. https://digipres.club/@foone/115760308462286847
(DIR) Post #B1WhfZMuQdxaPcrIAq by foone@digipres.club
2025-12-23T02:44:42Z
0 likes, 0 repeats
working on the backgrounds now. There's only 22 of them, so this hopefully will go quicker?
(DIR) Post #B1XCi3PGoeW4jRcyLQ by foone@digipres.club
2025-12-23T08:32:28Z
0 likes, 0 repeats
TWENTY THREE YEAR OLD TYPO SPOTTED
(DIR) Post #B1XDW6B2mzsvntpvTU by Wevah@mastodon.cloud
2025-12-23T08:41:33Z
0 likes, 0 repeats
@foone Map to Birman cats.
(DIR) Post #B1XLLkNtl50Cx7QLpI by foone@digipres.club
2025-12-23T10:09:16Z
0 likes, 0 repeats
@moin it had to have compiled, I'm looking at the decompiled binary! it's Robot Alchemic Drive, a PS2 giant robot game
(DIR) Post #B1XMtFFS81OwBY0iCe by foone@digipres.club
2025-12-23T10:26:35Z
0 likes, 0 repeats
okay this game 100% has a console in it, I'm seeing tons of references to it. I wonder if the code to render and interact with it is still here
(DIR) Post #B1XOvmvY57R57t2bTc by foone@digipres.club
2025-12-23T10:49:29Z
0 likes, 0 repeats
I don't understand enough about how the PS2 (not PS/2) keyboard works to figure out where these keystrokes are ending up
(DIR) Post #B1XQ8OgbcWAff9czR2 by foone@digipres.club
2025-12-23T11:02:55Z
0 likes, 0 repeats
I found a class called clKksCallback and another called clKksItouCallback. I typed "Itou" into google translate, only to learn it means "Ito"useful
(DIR) Post #B1XQDru8PnQ9jHZ55U by foone@digipres.club
2025-12-23T11:04:01Z
0 likes, 0 repeats
wiktionary suggests "to dislike, to mind; to take care of"
(DIR) Post #B1XQGjQsMzmUK5FEC8 by foone@digipres.club
2025-12-23T11:04:28Z
0 likes, 0 repeats
more code should have disliked callbacks
(DIR) Post #B1XSXbHI8phjrZvtq4 by foone@digipres.club
2025-12-23T11:29:56Z
0 likes, 0 repeats
also I just realized this game lists two programmers: Toshio Noguchi and Yoshihiro ItouI think Itou just named their callbacks
(DIR) Post #B1XdODFlC74uF1wW8m by foone@digipres.club
2025-12-23T13:31:27Z
0 likes, 0 repeats
arg. I finally got my injection code to properly pull out the backgrounds... but they are coming as multiple separate textures, thanks to how they're loaded. and I don't have the ability to put them back together. I'm gonna have to do something weirder
(DIR) Post #B1XdWAMBqY9ZZjk76m by foone@digipres.club
2025-12-23T13:32:57Z
0 likes, 0 repeats
this is what it looks like. maybe if I can just get her to disappear, I'll just screenshot them out?
(DIR) Post #B1Xewp8mw4edY0kWtU by foone@digipres.club
2025-12-23T13:48:55Z
0 likes, 0 repeats
sometimes I think I can still hear her voice
(DIR) Post #B1XgNYwzL4PL6hXnN2 by foone@digipres.club
2025-12-23T14:04:56Z
0 likes, 0 repeats
okay I've extracted them all, with caveats: the first two (these BNN ones) are too connected to separate them out, apparently. so I have one screenshot for two filenamesAlso, that screen is animated. and I can't really handle that: but it's the only one, so I'm just gonna let it be
(DIR) Post #B1XgVc05smOAsppozQ by foone@digipres.club
2025-12-23T14:06:28Z
0 likes, 0 repeats
Here's all 21.
(DIR) Post #B1Xh6TNUu5ogr7MHCq by foone@digipres.club
2025-12-23T14:13:09Z
0 likes, 0 repeats
actually I guess I can manually jigsaw all these 256x256 chunks together, since I know what the full size works like
(DIR) Post #B1XhidXDabQbMQ6RqC by foone@digipres.club
2025-12-23T14:19:58Z
0 likes, 0 repeats
nah, quality is virtually identical: 640x460 vs 640x448 so other than removing the animated part there'd be no point
(DIR) Post #B1XhpuG7o6jPG0ZfJQ by foone@digipres.club
2025-12-23T14:21:19Z
0 likes, 0 repeats
okay so I have all the small portraits and the backgrounds.next up, the large portraits!
(DIR) Post #B1XiIMOylZx4eIHe1A by foone@digipres.club
2025-12-23T14:26:24Z
0 likes, 0 repeats
some fun filenames:Mika 6 years ago, Big GutsYamano Dai looks like he's about to cryShadow of a fallen mother_LargeThe cameraman was delightedThe cameraman panicsThe cameraman is very surprised
(DIR) Post #B1XjItrOT9KIN8Oa4O by foone@digipres.club
2025-12-23T14:37:41Z
0 likes, 0 repeats
@domi you'd think, but this game predates HL2 (and thus gmod)
(DIR) Post #B1XvWITHTZFputGtWq by foone@digipres.club
2025-12-23T16:54:36Z
0 likes, 0 repeats
extracted 259 large portraits
(DIR) Post #B1eyyiRi9jLmYLV2I4 by MelGibsonafter4Beers@poa.st
2025-12-27T02:36:49.220563Z
2 likes, 0 repeats
@zero @foone The Minidisc still looks more futuristic than 99 percent of so-called "modern" technology.
(DIR) Post #B1gipx9ssNVEcssfA0 by foone@digipres.club
2025-12-27T22:44:56Z
0 likes, 0 repeats
The animated background: 90 frames of ballsturns out it loops perfectly!
(DIR) Post #B1giymyq5UHPfJva1g by foone@digipres.club
2025-12-27T22:46:37Z
0 likes, 0 repeats
ugh. gif2mp4 doesn't look great when it's a tiny pixel-art GIF, eh?
(DIR) Post #B1gjvr3OaNoxNuDvXc by foone@digipres.club
2025-12-27T22:57:14Z
0 likes, 0 repeats
so the CONTROL.DY file contains two font files:FONT.P2FFONTE.P2FWhich one is the dialogue font? NEITHER APPARENTLY
(DIR) Post #B1gjyxpDrmA3Fq4pkG by foone@digipres.club
2025-12-27T22:57:32Z
0 likes, 0 repeats
never use an obvious file when you can instead secretly encode another font somewhere else
(DIR) Post #B1gkMH6CNBKlgw8IK0 by foone@digipres.club
2025-12-27T23:02:01Z
0 likes, 0 repeats
yeah it seems to be loading (/generating?) 16x16 textures for each letter, then scaling them to 32x32 at runtime.
(DIR) Post #B1gkVCiy0VvajJWZ1c by foone@digipres.club
2025-12-27T23:03:39Z
0 likes, 0 repeats
as I've said before, I like my fonts like I like my women: NOT BLURRY
(DIR) Post #B1gkgAkvfLXdoJfjUW by ozzelot@mstdn.social
2025-12-27T23:06:03Z
0 likes, 0 repeats
@fooneAs a glasses wearer, I do like my women blurry, for they look the same no matter if I have my glasses.
(DIR) Post #B1gl18TVLG2aojWAoi by foone@digipres.club
2025-12-27T23:09:25Z
0 likes, 0 repeats
eww it's actually scaled up to 23x23?
(DIR) Post #B1glK78yVzyKBtxtj6 by foone@digipres.club
2025-12-27T23:12:51Z
0 likes, 0 repeats
so it actually is using CONTROL.DY/SYS/FONTE.P2F, it's just scaled so oddly that I didn't recognize it at first
(DIR) Post #B1glNdMfAwS8zU2uKO by foone@digipres.club
2025-12-27T23:13:32Z
0 likes, 0 repeats
the file doesn't look TOO hard to hack, but I'm not gonna. I'm just going to make it render every character in Latin1/fullwidth latin-1
(DIR) Post #B1gmqxksXi5IaCvC9g by foone@digipres.club
2025-12-27T23:29:56Z
0 likes, 0 repeats
okay I have text injection. repeatable and automatable.Also it turns out those special tags, like WAITKEY? only work if you spell them in full-width. So "<WAITKEY>", not "<WAITKEY>"
(DIR) Post #B1gmuIys5BGzHY3nCi by foone@digipres.club
2025-12-27T23:30:14Z
0 likes, 0 repeats
@cinebox ewwww
(DIR) Post #B1goUqb2g4fPuzu2LI by foone@digipres.club
2025-12-27T23:48:19Z
0 likes, 0 repeats
ugh. not all fullwidth characters can be encoded into shift-jis, of course. the whole point of fullwidth in unicode is to enable roundtripping with encodings like shift-jis, but there's 4 codepoints in the U+FF01 to U+FF5E range that aren't encodable in shift-his!
(DIR) Post #B1goXVZfIIbbaVWlbU by foone@digipres.club
2025-12-27T23:48:54Z
0 likes, 0 repeats
those four are:"/'/-/~
(DIR) Post #B1goaYB44WECWwTI00 by foone@digipres.club
2025-12-27T23:49:27Z
0 likes, 0 repeats
so does the game use non-fullwidth single quotes? I'm gonna have to find some dialogue that uses one
(DIR) Post #B1golaJYT1RMLLhjCC by foone@digipres.club
2025-12-27T23:51:25Z
0 likes, 0 repeats
nope they use U+2019 Right Single Quotation Mark: ’
(DIR) Post #B1gpflzUF3WGm16tcG by NuclearOatmeal@beige.party
2025-12-28T00:01:28Z
0 likes, 0 repeats
@foone And non-serif! And monospaced! And with ligatures!
(DIR) Post #B1gpoBt9q0cVPYADDs by bytex64@awesome.garden
2025-12-28T00:03:04Z
0 likes, 0 repeats
@foone I learned from the pixel art folks that it works better on social media (or anywhere that pre-processes uploads) when you upscale by 3 or 4x first.
(DIR) Post #B1grBLPGiTzlXqmtgO by foone@digipres.club
2025-12-28T00:18:28Z
0 likes, 0 repeats
weird dialogue scripting engine: it seems to stop paying attention to tags if it hits a missing character.I'm rendering "|A|<WAITKEY>" and it pauses, because of the WAITKEY. But if instead of A it's a character that isn't in the font, it renders a blank and then treats <WAITKEY> as plain text, so it doesn't pause, and my screenshotter goes off at the wrong time
(DIR) Post #B1h5pA7fUITjUSR648 by foone@digipres.club
2025-12-28T03:02:31Z
0 likes, 0 repeats
okay I have grabbed three unicode blocks: * general punctuation* latin-1* full-widthI haven't found a way to find out what characters are in the font, so that should be good coverage for non-japanese text. I've just extracted the characters, I'm going to need to spend a while massaging the image->font import script into doing what I need with this image pile
(DIR) Post #B1vQEERBIimBPMEXvU by foone@digipres.club
2026-01-04T00:57:06Z
0 likes, 0 repeats
looking into the IEX loading.the iex_load function takes a "on_cdrom" boolean, and if it's false, it prepends filenames with "host0:..\\KkItou\\__Data__\"so on a PS2 devkit I think that'd make it load from the dev system's hard drive instead of the CD/DVD
(DIR) Post #B1vUPG2K5zSlMy7Sro by foone@digipres.club
2026-01-04T01:43:53Z
0 likes, 0 repeats
good news: I was wrong, IEX files aren't just native MIPS binaries.They're interpreted bytecode!