Post AwG4tzZOdUHDX5EOCu by [email protected] | |
More posts by [email protected] | |
Post #AwDjECwq1H3hVYVhmi by [email protected] | |
0 likes, 0 repeats | |
I started hacking on another game (Super Star Wars for DOS (which Mobygames doe… | |
Post #AwDjiJvIeOAPpR9L5k by [email protected] | |
0 likes, 0 repeats | |
@foone Some good memories there. | |
Post #AwDjvRKEROBGYC4EKG by [email protected] | |
0 likes, 0 repeats | |
@foone Looks like the EXE is just a loader, yeah, all the chonk is in the Resou… | |
Post #AwDkWUoSRACC56sIqG by [email protected] | |
0 likes, 0 repeats | |
the game switches between cutscenes, platforming stages, and 3d speedracer segm… | |
Post #AwDkzp1QNYn99mvKSG by [email protected] | |
0 likes, 0 repeats | |
@foone I bet they had some assembly programmer very proud of his loader. | |
Post #AwDlfGzrH4aVn9xMoq by [email protected] | |
0 likes, 0 repeats | |
hah, it's got files named like T_MODE7.PAL in the resource file. mode7 is a… | |
Post #AwDnQ99qKxJ52oXeW8 by [email protected] | |
0 likes, 0 repeats | |
oh they're doing some fun shit here. one of the first things the EXE does i… | |
Post #AwDnctUjsnQSEOOUlc by [email protected] | |
0 likes, 0 repeats | |
@foone The developers were Danish, maybe the demoscene is where they got their … | |
Post #AwDoHvAqXp77JOeWxM by [email protected] | |
0 likes, 0 repeats | |
@foone My DOS days and my programming days are far enough apart, that I don'… | |
Post #AwDpG3VegKs4XV3my0 by [email protected] | |
0 likes, 0 repeats | |
okay so the new intf1 looks at AX. if it's FFFF it quits to DOS. otherwise … | |
Post #AwDq37IjNE2IUKPQ9o by [email protected] | |
0 likes, 0 repeats | |
ooh, all the strings are $-terminated.this isn't C! this is some manual ass… | |
Post #AwDqKxlhYSNM8STArg by [email protected] | |
0 likes, 0 repeats | |
"This program requires at least a 386 SX (So go out and buy one and become… | |
Post #AwDrPQohayOzL8ZGBE by [email protected] | |
0 likes, 0 repeats | |
@foone "Detroit: Buy a 386 SX" | |
Post #AwDvxf79LMADLTm4GW by [email protected] | |
0 likes, 0 repeats | |
@foone Not really Fx interrupts are reserved for user programs. A convention ex… | |
Post #AwE4YUD3eIhzsBbkNk by [email protected] | |
0 likes, 0 repeats | |
@foone that's a memory mapper overlay manager alright | |
Post #AwE78CBKLyv4IGxBQW by [email protected] | |
0 likes, 1 repeats | |
@foone I stuck with my 4.7 MHz 8088 PC until the 386 SX clones came around. | |
Post #AwE7YspaPHtu66VgoK by [email protected] | |
0 likes, 0 repeats | |
@foone Does this mean that I get to skip being a human if I don't go out an… | |
Post #AwE7oLVu32ydOlg0m0 by [email protected] | |
0 likes, 0 repeats | |
@foone wonder if it counts if it's in a Cool Whip tub in my garage | |
Post #AwE7rvPt1C4ZcOZLDU by [email protected] | |
0 likes, 0 repeats | |
@foone Could have been somebody's idea of a shared library in MS-DOS world? | |
Post #AwE7wETg5ikhtTOdhA by [email protected] | |
0 likes, 0 repeats | |
@foone could it be some fun way to do cooperative multitasking? | |
Post #AwEGk4qqxFcA9QW0GW by [email protected] | |
0 likes, 0 repeats | |
@riley @foone custom overlay? C++-style virtual table? | |
Post #AwEz6DxSApMGkRyOdU by [email protected] | |
0 likes, 0 repeats | |
@foone The $ termination suggests DOS strings (inherited from CP/M and used wit… | |
Post #AwFLsSC4kKUBn8DPWa by [email protected] | |
0 likes, 0 repeats | |
@baljemmett oh, right, DOS, not bios. I misremembered. | |
Post #AwFerOVarPazCYYLiq by [email protected] | |
0 likes, 0 repeats | |
So I wrote some code to list the contents of resource.001. Resource.dir is a pr… | |
Post #AwFeuJbXYAtorPj9cW by [email protected] | |
0 likes, 0 repeats | |
first idea: breakpoint the game in DOSBox, find it reading a chunk, and see wha… | |
Post #AwFexedpn8jKyTOPR2 by [email protected] | |
0 likes, 0 repeats | |
Int 21/AH=3Fh, where are you? | |
Post #AwFfIZpMsvbw7plQyu by [email protected] | |
0 likes, 0 repeats | |
I wonder how hard it would be to make this better (IO tracing).probably "q… | |
Post #AwFfOTdeo9iKfV6FXc by [email protected] | |
0 likes, 0 repeats | |
maybe I make it generic and hack in a way to add ad-hoc logging to dosbox. like… | |
Post #AwFfRENG19CWC9k4Dg by [email protected] | |
0 likes, 0 repeats | |
then build an IO tracer on that | |
Post #AwFfVc5Fo8Pwt5PWvA by [email protected] | |
0 likes, 0 repeats | |
@foone lzw lossless algorithm | |
Post #AwFfuv2gSPdMvTH8FM by [email protected] | |
0 likes, 0 repeats | |
hmm. they read resource.dir in one read of 16384 bytes. but the file is current… | |
Post #AwFfyqJPzAPFPjyQZE by [email protected] | |
0 likes, 0 repeats | |
reverse engineering is a fun drug that makes you think about potential bugs tha… | |
Post #AwFg5xNE86UHLG9CEK by [email protected] | |
0 likes, 0 repeats | |
I did some manual tracing of file handles to file names.it turns out that file … | |
Post #AwFgGdzkWGeOQRGJBQ by [email protected] | |
0 likes, 0 repeats | |
hmm. that may be just designed into their IO system, it seems they're readi… | |
Post #AwFgJWpfbdwl50vHpA by [email protected] | |
0 likes, 0 repeats | |
@foone It's even more fun when you do that and it ends in a CVE for a curre… | |
Post #AwFhCBL1Du74LLeA3k by [email protected] | |
0 likes, 0 repeats | |
oh hey that's the EMS page size. that's definitely related | |
Post #AwFhVr38Mgi3DAf6Yq by [email protected] | |
0 likes, 0 repeats | |
oh fuck me do they just inhale the whole file into RAM? | |
Post #AwFhZxaE0y6MdM67P6 by [email protected] | |
0 likes, 0 repeats | |
the pirates who wrote the info.txt file say the minimum ram is 4mb, and the dat… | |
Post #AwFhzrvLg7FubwKfIW by [email protected] | |
0 likes, 0 repeats | |
this code is an interesting mixture I've not personally run into before: it… | |
Post #AwFi3jBw5TX8gavmpk by [email protected] | |
0 likes, 0 repeats | |
at least for now. maybe it switches into protected mode for each sub-game? | |
Post #AwFibrG0bc57Xz6uxM by [email protected] | |
0 likes, 0 repeats | |
@foone do you not? | |
Post #AwFir0aiBVZyq71D5k by [email protected] | |
0 likes, 0 repeats | |
@neko yeah but I live in 2025 where I have 16gb of ram even on this shit laptop… | |
Post #AwFj8HL9AKUxhyyP1U by [email protected] | |
0 likes, 0 repeats | |
@foone Oh, no way, I live in 2025 too!... wouldn't recommend it. | |
Post #AwFjBSatmP9VTsrGQS by [email protected] | |
0 likes, 0 repeats | |
hmm. this code reads 0x8000 bytes each pass, but the pointer stays the same: 0.… | |
Post #AwFjf08CAWjbtNWD20 by [email protected] | |
0 likes, 0 repeats | |
the game definitely does seem to be trying to read the whole datafile into RAM.… | |
Post #AwFkCHiLoeSDyvIiIq by [email protected] | |
0 likes, 0 repeats | |
it only allocates one (16kb) page? WHAT ARE YOU EVEN DOING | |
Post #AwFkGkHfXKhRkNwofg by [email protected] | |
0 likes, 0 repeats | |
@foone time lord allocation | |
Post #AwFkO3GFNXj8d9lZqa by [email protected] | |
0 likes, 0 repeats | |
I'm looking at the wrong fucking code.this is the code to load the resource… | |
Post #AwFkRHG9myUWunGKTQ by [email protected] | |
0 likes, 0 repeats | |
@ozzelot ooh, I want a tardis::malloc function! reserve ram in chips that are b… | |
Post #AwFkiUBQzXhrv8G7kW by [email protected] | |
0 likes, 0 repeats | |
okay. the first file it loads is "main.drv". makes sense. | |
Post #AwFl5bcbVDu3eMzYY4 by [email protected] | |
0 likes, 0 repeats | |
@foone My 60GB iPod had a tendency to show up as being implausibly large; don&#… | |
Post #AwFn92BrNS98pQFGIS by [email protected] | |
0 likes, 0 repeats | |
arg. can't find the compression. the CPU trace starts skipping after a poin… | |
Post #AwFntGdxyLYWyXRB0S by [email protected] | |
0 likes, 0 repeats | |
hey future foone: this is past foone. hi. turn off the dynamic core. it fucks u… | |
Post #AwFoPCY4jVKDXduQiW by [email protected] | |
0 likes, 0 repeats | |
ugh. this call goes directly to a function that instantly RETs.that makes me su… | |
Post #AwFpCPuZq3AvAwtysK by [email protected] | |
0 likes, 0 repeats | |
hmm. a bunch of functions start with NOP. and a bunch start with RET.those are … | |
Post #AwFqaec0vwQ7fmL9n6 by [email protected] | |
0 likes, 0 repeats | |
@foone new debugger plugin which monitors for writes to code and makes the comp… | |
Post #AwFqaeiOYDWZzZKFjk by [email protected] | |
0 likes, 0 repeats | |
@alilly I tend to scream anyway when that happens | |
Post #AwFsHu9H934EGT5M24 by [email protected] | |
0 likes, 0 repeats | |
@foone could be an optimization to remove a dynamic check on something that cha… | |
Post #AwFtIouyB6WuHlOVpQ by [email protected] | |
0 likes, 0 repeats | |
this game makes use of the optimization that filenames are exactly 4 words long. | |
Post #AwFtMsmrjZmVRbXbBQ by [email protected] | |
0 likes, 0 repeats | |
12345678.ABCit writes it as one 32bit int (1234), another (5678), and a third (… | |
Post #AwFtPtDuZJvvfLcpA8 by [email protected] | |
0 likes, 0 repeats | |
except 4321,8765,CBA. because little endian | |
Post #AwFvsZGi2Uhe5DjijY by [email protected] | |
0 likes, 0 repeats | |
@foone Did the game come from Eastern Europe? | |
Post #AwFvsZMjg5WWNuYX7w by [email protected] | |
0 likes, 0 repeats | |
@riley Denmark, apparently. | |
Post #AwFywqsApRF3hcziSm by [email protected] | |
0 likes, 0 repeats | |
I still can't find the decompression routine! I've manually stepped thr… | |
Post #AwG0YWXGzQZTaQkHsu by [email protected] | |
0 likes, 0 repeats | |
ugh i think I found the dynamic code. it doesn't make any sense, it's o… | |
Post #AwG1Zg3ZB1cxMIxrG4 by [email protected] | |
0 likes, 0 repeats | |
I found a function that vaguely looks like a decompression routine... naturally… | |
Post #AwG4tzZOdUHDX5EOCu by [email protected] | |
0 likes, 0 repeats | |
@foone automation | |
Post #AwG5IrWBi1wJnfabI0 by [email protected] | |
0 likes, 0 repeats | |
@foone This shows up in some historic stuff, like how OS/8 on the PDP-8 had two… | |
Post #AwG7at2YzKc7drSHh2 by [email protected] | |
0 likes, 0 repeats | |
I've mapped out 27 of the 80 possible f1 subfunctions | |
Post #AwGAMB6fps7VBz3WWe by [email protected] | |
0 likes, 0 repeats | |
@foone I wrote a game like that back in the day, probably in a similar timefram… | |
Post #AwGECvExr9qDC6m9Ts by [email protected] | |
0 likes, 0 repeats | |
@foone although widely believed to have been released by Intel in 1985, new res… | |
Post #AwGHwPGdMasrDNw8dk by [email protected] | |
0 likes, 0 repeats | |
@foone Unreal Mode? | |
Post #AwGHwPN0yrzJXAvEaO by [email protected] | |
0 likes, 0 repeats | |
@NekoEd no, they're not doing anything tricky with segment registers, they&… | |
Post #AwGKRQOlPL4hbmeq9Y by [email protected] | |
0 likes, 0 repeats | |
@foone Ah. | |
Post #AwGQrJnt9I3oPR8jjM by [email protected] | |
0 likes, 0 repeats | |
@deater78 @foone can you set a segment to be 32-bit in real mode or do you just… | |
Post #AwGQrc4VEG2t4B3G7s by [email protected] | |
0 likes, 0 repeats | |
@gloriouscow @foone It's been a *really* long time since I did this but I t… | |
Post #AwHJpqblhrML3BmZ9s by [email protected] | |
0 likes, 0 repeats | |
okay so I can breakpoint two points:A. when (and thus where) the compressed dat… | |
Post #AwHJzP9EepsymPzeVs by [email protected] | |
0 likes, 0 repeats | |
the main problem is that I'm not 100% sure that there's only one step A… | |
Post #AwHK72SOuDGSipb8YS by [email protected] | |
0 likes, 0 repeats | |
back to the debugger mines | |
Post #AwHNKN7Th51uQtrRIm by [email protected] | |
0 likes, 0 repeats | |
okay so I've identified f1 subfunction 0501, which looks up a chunk by name… | |
Post #AwHNN5YDTEEyoTfAIq by [email protected] | |
0 likes, 0 repeats | |
why must you do this to me, game | |
Post #AwHNUdLeDAGRf1Njge by [email protected] | |
0 likes, 1 repeats | |
sometimes I dream of a world where every game doesn't design their own WAD … | |
Post #AwHNvXvoSUI0gD8AdM by [email protected] | |
0 likes, 0 repeats | |
@foone *raises hand* I was guilty of that as recently as Acronia.Never again. | |
Post #AwHOb7yRMIC4KuBfe4 by [email protected] | |
0 likes, 0 repeats | |
@foone You know it's weird. One of the times I got far enough along in game… | |
Post #AwHOb85suc9GhzfcFU by [email protected] | |
0 likes, 0 repeats | |
@trysdyn @foone I love how devs sometimes get so bent out of shape doing this t… | |
Post #AwHOb8CGWtFj1meiC8 by [email protected] | |
0 likes, 0 repeats | |
@rotopenguin @trysdyn I know people who use FAT32 in 2025 and they're all c… | |
Post #AwHPc3T9gxfWbpYmcC by [email protected] | |
0 likes, 0 repeats | |
@foone "find the entry point and shove it into unicorn"? | |
Post #AwHQ4UaCTfqcoDPnrU by [email protected] | |
0 likes, 0 repeats | |
@whitequark possibly! I gotta find it first, which is proving to be the tricky … | |
Post #AwHQAdedf8mWgJQEAy by [email protected] | |
0 likes, 0 repeats | |
@foone A wannabe game developer I knew claimed in the early 2000s that games co… | |
Post #AwHQAdl1HPsz06PK7c by [email protected] | |
0 likes, 0 repeats | |
@juliancalaby @foone i think this observation is still true today, though somew… | |
Post #AwHQI7lm5sBs6oKTia by [email protected] | |
0 likes, 0 repeats | |
@foone i do wonder what you would do with all your free time in that timeline :P | |
Post #AwHQZWiuZM1UQOHvYe by [email protected] | |
0 likes, 0 repeats | |
@foone Me too. | |
Post #AwHR5JB2TB3tg6bCu8 by [email protected] | |
0 likes, 0 repeats | |
@rakslice hack more games, since I wouldn't have spent half my game-hacking… | |
Post #AwHRE6WqrfL73Zzp4K by [email protected] | |
0 likes, 0 repeats | |
okay it seems to be decompressing in the function I called load_some_chunks.it&… | |
Post #AwHRIDe6LVegHuLiGu by [email protected] | |
0 likes, 0 repeats | |
my kingdom for a step-to-return in dosbox's debugger | |
Post #AwHRLdXiWAVzTUzbkm by [email protected] | |
0 likes, 0 repeats | |
I'm gonna rewrite the whole debugger in python so I can add 5000 features. … | |
Post #AwHRye6kLpGiWLyj3Y by [email protected] | |
0 likes, 0 repeats | |
Finally got an example of compressed data & uncompressed data | |
Post #AwHSUA5vTVe2hecf3o by [email protected] | |
0 likes, 0 repeats | |
@fooneDo it. I believe in you. | |
Post #AwHTjnT3T8wj79Sap6 by [email protected] | |
0 likes, 0 repeats | |
@foone That's so weird, what is all the '...' padding for in the un… | |
Post #AwHcfdro7bmhld8DiK by [email protected] | |
0 likes, 0 repeats | |
@Ra @foone Fixed length fields maybe? Inefficient with space but very easy to a… | |
Post #AwHcjLkJR8S2izOTxo by [email protected] | |
0 likes, 0 repeats | |
me repairing windows by reformatting the 100mb fat32 ESP partition and rebuildi… | |
Post #AwHfitnxcYqRvfZpo0 by [email protected] | |
0 likes, 0 repeats | |
@foone but but we can't assume there will always be a filesystem! /s | |
Post #AwHkrOp8g06qDj06iG by [email protected] | |
0 likes, 0 repeats | |
@foone hey so I have good news for you about Kitsune Tails | |
Post #AwHoraFObUnZSycqOG by [email protected] | |
0 likes, 0 repeats | |
@foone #PortalFoxesTD uses the open GLB format for models, WAV for audio, and t… | |
Post #AwHyD0RZIhwoNiborg by [email protected] | |
0 likes, 0 repeats | |
@foone you can get the game here, I was going to link the internet archive vers… | |
Post #AwHyD0YItfKqiblCMa by [email protected] | |
0 likes, 0 repeats | |
@deater78 @foone The banned sequel: Damage to Realistic Objects. | |
Post #AwIp3wxICDNmWk0xNY by [email protected] | |
0 likes, 0 repeats | |
@foone sorry we love to just mmap | |
Post #AwJAQ1MYaVDnbZCHz6 by [email protected] | |
0 likes, 0 repeats | |
@pyromuffin this is game from 1995! there is no mmap yet! | |
Post #AwJYuDBTbBZJr5wXxI by [email protected] | |
0 likes, 0 repeats | |
the code looks relatively RLE but from looking closer at the compressed/uncompr… | |
Post #AwJZrOvPadMtM2eXRI by [email protected] | |
0 likes, 0 repeats | |
cleaned up the output of my resources script, using the rtable formatter I was … | |
Post #AwJaT6HtKcxEYW8zR2 by [email protected] | |
0 likes, 0 repeats | |
this compression uses BP as the variable for how much into the loaded data it i… | |
Post #AwJb87c1JN3sXM7TMm by [email protected] | |
0 likes, 0 repeats | |
@foone It's a free register. | |
Post #AwJbUDzoG27YhrmoeO by [email protected] | |
0 likes, 0 repeats | |
compression_mask = (1 << num_bits) - 1;oh hey math! that formula gives yo… | |
Post #AwJc9pcdGkZXH6mjia by [email protected] | |
0 likes, 0 repeats | |
interesting. this code keeps a running checksum of the decompression, using the… | |
Post #AwJcdlEi8kEwMNrq6q by [email protected] | |
0 likes, 0 repeats | |
@foone uncheckedsum | |
Post #AwJctVZM9og0P326nA by [email protected] | |
0 likes, 0 repeats | |
they read every byte twice in their inner loop. come on guys, AL already has th… | |
Post #AwJdcY6tYaShJaCJhA by [email protected] | |
0 likes, 0 repeats | |
every time they read a byte, they rotate a 16bit word in memory that's init… | |
Post #AwJdiGzk6WfvyCa7Ki by [email protected] | |
0 likes, 0 repeats | |
this saves like one byte on the traditional way to do this, where you have a va… | |
Post #AwJdkpyr01RJ3UO9WS by [email protected] | |
0 likes, 0 repeats | |
which is a nice optimization on something they forgot to use | |
Post #AwJgGa9hZVXj9LjA1I by [email protected] | |
0 likes, 0 repeats | |
there are definitely two functions that read chunks, but they do it slightly di… | |
Post #AwJhXOiNSeSKXnWqPo by [email protected] | |
0 likes, 0 repeats | |
ahh! one of them allocates some memory for the loaded chunk, the other one take… | |
Post #AwJiar2Yhhn9DWBGGO by [email protected] | |
0 likes, 0 repeats | |
@cinebox nice | |
Post #AwJyNLXK7b4n0n9Rlg by [email protected] | |
0 likes, 0 repeats | |
I've named 121 of 123 functions.but keep in mind, at least 16 of them are N… | |
Post #AwfH4NlPaxATrkZQ0m by [email protected] | |
0 likes, 0 repeats | |
@foone Couldn't the first one just call the second one after allocation? | |
Post #AwfJYi7Ch1jna4LvLk by [email protected] | |
0 likes, 0 repeats | |
@marcel you'd think. maybe there's more to it that I don't understa… | |
Post #AwfVfSZG5yzuq1SZHc by [email protected] | |
0 likes, 0 repeats | |
@foone Maybe the original author(s) didn't completely understand what they … |