474 karma · joined January 12, 2010
https://mastodon.social/@madmoose
All the areas where you currently need to manually change cicoparser, Dune does everywhere. It jumps based on flags, makes indirect jumps and calls (Dune dynamically loads in video, pcm audio and midi drivers), it jumps wildly around, into, and out of the middle of other procedures, and so on. I'd love to see you try, though.
Secondly, I don't really see a great advantage of cicoparser over emulating the CPU. You've converted the disassembled code to assembler-in-C, but you haven't reverse engineered the application. If I've successfully converted an application with cicoparser, yes, I can run it, but I haven't learned much about how the original application works. It can be a good starting point for reverse engineering though.
We had an engine in ScummVM that was created with a similar process. The application was organized well enough (with clear function boundaries, etc.) that the engine could gradually be transitioned to proper C.
C++ is not, in any sense, a memory safe language.
If we're being pedantic, "example" has seven letters!
:-)
In the early days we did have a lengthy back-and-forth with a tenacious lawyer from LucasLegal but they backed off when we convinced them that we didn't support piracy.
It is not uncommon for rereleases of older games to use the ScummVM engine instead of the original engine, see for instance the recent rerelease of Westwood's Blade Runner on GOG.com, which wouldn't have happened without ScummVM.
It doesn't really make sense to call it a SCUMM emulator, ScummVM has a reimplementation of the whole engine.
Of course there's also other engines in ScummVM, some based on the original source kindly donated to us by the developers, but most created by painstaking disassembly.
ScummVM does have emulation for various pieces of audio hardware but that's the only part I would consider emulation.
I've certainly had a lot of fun figuring out how you did what you did, so thank you for that, no matter what you call it :)
You certainly crammed a lot of tech into one engine! Full screen 15 BPP videos with full z-buffer with smaller alpha-channeled videos rendered on top, character models with lighting. Even the UI is looping videos.
Once I get proper path finding working Blade Runner will be a lot more playable in our ScummVM engine.
I've probably rewatched the opening scene of the game a thousand times while working on it...
I only wished that you had used a scripting language for your game code instead of compiling it to DLLs. I know you optimized heavily for speed but it would have made our task a lot easier :)
> What we are using is not voxels, but sort of 'voxels plus.'
So "not voxels". Louis Castle probably called it voxel-like because he didn't want to get too technical in an interview. Their technique has not been described in detail in the press but see http://deadendthrills.com/future-imperfect-the-lost-art-of-w... for an article that calls it a "slice model"-technique.
I'm not an expert on voxels but I've reverse engineered and reimplemented most of the Blade Runner rendering engine and in my opinion it doesn't count as voxels. For one, you're never going to be able to rotate the models around any axis other than the vertical.
The 3D models were sliced from bottom to top into a couple of hundred slices (depending on desired quality) by intersecting the model with a horizontal plane and storing the resulting polygons.
The engine can only rotate the models around the vertical axis.
I made a hacky javascript version of the renderer a long time ago: http://thomas.fach-pedersen.net/bladerunner/mccoy_anim_13_fr...
EDIT: Let me also plug our WIP Blade Runner engine for ScummVM: https://github.com/scummvm/scummvm/tree/master/engines/blade...
I'm assuming you speak English. Do you really think there's any lawyer in the EU, competent to litigate EU law, who doesn't speak near-fluent English?
(Actually, if the lawyer is from continental Europe, and you only speak English, they do speak at least one language you don't, but I'm guessing that's not what you meant.)
My children still occasionally make mistakes when saying numbers in the range 50-99 in Danish, they haven't said the English numbers wrong for years.
That the word for 50 contains the word "tre" (three) and the word for 90 contains the word "fem" (five) is very confusing to our children, especially when the English equivalents are so simple in comparison.
> Will Apple continue progress and built in PinchID - a tiny needle that sting you to test if you are you based on your blood/DNA?
I struggle to believe you when you say that's a serious question...
> Im also concerned about the data Apple will collect.
The FaceID data will be stored in the secure enclave locally on your phone, just like TouchID data was. Apple will not collect it.
word* target = segmentStart + farPointer.offset;
if (target < segmentStart || target >= segmentEnd) {
throwBoundsError();
}
doSomething(*target);
Here's how I'd do it. (Caveat emptor, not knowing all the relevant types in the example, etc.) size_t segmentLength = segmentEnd - segmentStart;
if (farPointer.offset >= segmentLength) {
throwBoundsError();
}
word* target = segmentStart + farPointer.offset;
doSomething(*target);
In general you can never compare pointers unless they point into the same array or object. In fact, even creating an invalid pointer is UB, you don't event have to compare or dereference it.Video: H264 - MPEG-4 AVC (part 10) (avc1) Audio: MPEG AAC Audio (mp4a) at 48000 Hz
Sadly it maxes out at 1080p.