Post AWh8j0O7P5eceSEsgi by [email protected] | |
More posts by [email protected] | |
Post #AWfN1KsMykiORr6UeO by [email protected] | |
1 likes, 0 repeats | |
bad news: after extensive digging into how Wheel of Fortune (2010, Wii) loads r… | |
Post #AWfNRoOLrWLpWFghpQ by [email protected] | |
0 likes, 0 repeats | |
so it adds the / directory of the DVD to the searcxh path, then bundles (where … | |
Post #AWfNcUYrvo73CZhS88 by [email protected] | |
0 likes, 0 repeats | |
it queries the current language and tries to add /Audio/$ThatLanguage to the se… | |
Post #AWfNcXLVZwCxq0TKDo by [email protected] | |
0 likes, 0 repeats | |
Then it adds /Video (where the videos are) and then /MediaThere is no /Media on… | |
Post #AWfNrxFtWvkwXRCLCK by [email protected] | |
0 likes, 0 repeats | |
Finally it checks the language (again!) and adds /Speech/$ThatLanguage to the s… | |
Post #AWfNwrWOHBaCCdFo7E by [email protected] | |
0 likes, 0 repeats | |
it's not my job to offer code reviews of 13 year old games but this seems l… | |
Post #AWfOK1z5XdmhJTj0DI by [email protected] | |
0 likes, 0 repeats | |
The answer for scripts at least is that they implemented PackageAppInterface::g… | |
Post #AWfOODzmpGpXiw3EOm by [email protected] | |
0 likes, 0 repeats | |
Maybe they do the same thing with movies. The movies are probably getting playe… | |
Post #AWfOSJqh0OTj2HkYUK by [email protected] | |
0 likes, 0 repeats | |
not that it matters in this case: Wheel of Fortune is a US-only game so the onl… | |
Post #AWfOjFRqcWUqJICXXU by [email protected] | |
0 likes, 0 repeats | |
but this same engine is used in a bunch of games, many of which presumably had … | |
Post #AWfP4QcuFqVJ3oTPZA by [email protected] | |
0 likes, 0 repeats | |
You wanna know the weirdest thing this game does with regards to loading bundle… | |
Post #AWfP8jUe3BXgjVf5G4 by [email protected] | |
0 likes, 0 repeats | |
SURPRISE! It's a ROM Bundle! Wait this is a game shipped on an optical disc… | |
Post #AWfPFSOi0hZHjr5jOq by [email protected] | |
0 likes, 0 repeats | |
well, ROM bundle just means that instead of a filename to mount, you give it a … | |
Post #AWfPFVAdhT62L5X2O0 by [email protected] | |
0 likes, 0 repeats | |
there's no code in the game to load the memory location it loads the system… | |
Post #AWfPSinGMTcwM2twnI by [email protected] | |
0 likes, 0 repeats | |
they embedded it into the executable. That bundle's memory is loaded by the… | |
Post #AWfPSlhhXbxdNfK32e by [email protected] | |
0 likes, 0 repeats | |
and this quickly gets really confusing because one of the first things the game… | |
Post #AWfPdbS00EgulZ8zrc by [email protected] | |
0 likes, 0 repeats | |
except that one isn't used, because it's also in the "ROM bundle&q… | |
Post #AWfPk9ruwyf5FWOQd6 by [email protected] | |
0 likes, 0 repeats | |
which frankly is an underrated anti-reversing technique. Have multiple copies o… | |
Post #AWfPkDqe9e1PajpTCi by [email protected] | |
0 likes, 0 repeats | |
anyway I don't think they were intentionally trying to make this hard to re… | |
Post #AWfPung1nbJNbluFjE by [email protected] | |
0 likes, 0 repeats | |
since you can't just look at the bundle files on disc and interpret what da… | |
Post #AWfQ8M1LQ9TZt8L8Zk by [email protected] | |
0 likes, 0 repeats | |
anyway, this is only vaguely related, but there needs to be a tool that helps t… | |
Post #AWfQDJGB72kum2dooq by [email protected] | |
0 likes, 0 repeats | |
like, use the dynamic debugging traces to do things like annotate functions wit… | |
Post #AWfQOPGJ8ZemZfzdXU by [email protected] | |
0 likes, 0 repeats | |
or click a function and see what arguments it has been called with in traces | |
Post #AWfREMd2AohJSuOleK by [email protected] | |
0 likes, 0 repeats | |
sadly the wii balance board support classes in the engine are just leftovers fr… | |
Post #AWfRlGXDqoBI7dMvoW by [email protected] | |
0 likes, 0 repeats | |
@foone theoretically, Ghidra has an embedded debugger now, but I haven't he… | |
Post #AWfRlGbTazaGKpMKRc by [email protected] | |
0 likes, 0 repeats | |
@impiaaa and it's unlikely to work when my target binary is for the Wii. I … | |
Post #AWfRw6YXIAWSMJ9T9s by [email protected] | |
0 likes, 0 repeats | |
@foone no so what you do is enable Dolphin's debugger, then connect to it f… | |
Post #AWfRw6dUziUabhTQtU by [email protected] | |
0 likes, 0 repeats | |
@impiaaa if only that would work(I have never gotten dolphin's remote GDB s… | |
Post #AWfS29xfXmReeqnKtc by [email protected] | |
0 likes, 0 repeats | |
although given my reverse engineering work, it's possible that I may one da… | |
Post #AWfS6IlqjUhB8cF1ea by [email protected] | |
0 likes, 0 repeats | |
man I'm used to weird padding in structures and strange gaps, but 14 kiloby… | |
Post #AWfSAzLgN3fgLjEjlg by [email protected] | |
0 likes, 0 repeats | |
the struct WiiControllerPack has, at offset 1480, an array of 4 KPADStatus stru… | |
Post #AWfSHpLJyFJdLOKR4S by [email protected] | |
0 likes, 0 repeats | |
that's 14,448 bytes of nothin'. or maybe, given that it's left out … | |
Post #AWfSdMpGg1VJGrbhaq by [email protected] | |
0 likes, 0 repeats | |
wait. the revolution SDK defines KPADStatus about how I'd expect but then i… | |
Post #AWfSsILVcDudiio0lk by [email protected] | |
0 likes, 0 repeats | |
no these all seem to be smallerwhat the fuck | |
Post #AWfSyqwPu6foklCDfE by [email protected] | |
0 likes, 0 repeats | |
this is the worst thing about reverse engineering.you pretty much never can ass… | |
Post #AWfSyu18T1EMIGQWw4 by [email protected] | |
0 likes, 0 repeats | |
no, there is A Reason why the compiler did this, and you are going to have to f… | |
Post #AWfUkCO859nupnIZWK by [email protected] | |
0 likes, 0 repeats | |
@foone aww; the balance board opened up so many buttock-controlled gaming optio… | |
Post #AWfUkCSNpLCt2zHy9Q by [email protected] | |
0 likes, 0 repeats | |
@scruss that's why god invented buttplug.io! | |
Post #AWfWOWYQclXIuquNLE by [email protected] | |
0 likes, 0 repeats | |
me "well at least I have a bunch of types from the debug files, so I can f… | |
Post #AWfWTRNJJAruIh3IrA by [email protected] | |
0 likes, 0 repeats | |
@foone fully convinced now that you’re going to find a real world example of … | |
Post #AWfWTUv680g5ILspRA by [email protected] | |
0 likes, 0 repeats | |
@cinebox @foone I wonder if any devs of licensed games ever thought of trying t… | |
Post #AWfWTUzLsC53VXsE4G by [email protected] | |
0 likes, 0 repeats | |
@jrandomhacker that does sound like a great way to get Nintendo to permanently … | |
Post #AWfXMlUKEIWebiiKzg by [email protected] | |
0 likes, 0 repeats | |
@foone There’s always A Reason. The reason may be stupid, and it may not be w… | |
Post #AWfXMoBeCCMqyezxnU by [email protected] | |
0 likes, 0 repeats | |
@colinpeters @foone A funny example from ocarina of time: https://github.com/ze… | |
Post #AWfXMoGFv43PCx9dyq by [email protected] | |
0 likes, 0 repeats | |
@MrCheeze @colinpeters heh. it wouldn't surprise me if the issue is somethi… | |
Post #AWfbKj1YoqneCeXhOC by [email protected] | |
0 likes, 0 repeats | |
I'm pretty sure this game had two programmers who each compiled 50% of the … | |
Post #AWfbQ9GOgoJT1y4IAC by [email protected] | |
0 likes, 0 repeats | |
seriously. I have complete info telling me that void WorldObject::updateVisRes(… | |
Post #AWfcNboCCdVOeCEKae by [email protected] | |
0 likes, 0 repeats | |
@foone Is it possible that they're sloppily reusing code from another game?… | |
Post #AWfcNbsRwouMrODjDk by [email protected] | |
0 likes, 0 repeats | |
@daviwil well it's an engine that was used in something like 12-40 games, s… | |
Post #AWfcctAxujPSr3AO3c by [email protected] | |
0 likes, 0 repeats | |
I think the only thing this compiler has ever inlined is vector.push_back() | |
Post #AWfcwdSg36rBuQrobA by [email protected] | |
0 likes, 0 repeats | |
which is great because it really aids clarity of reverse engineering that every… | |
Post #AWfduSzY6XySoRlwH2 by [email protected] | |
0 likes, 0 repeats | |
just after I say this, guess what I find, plain as day, in the disassembly?MVec… | |
Post #AWfe3MDme7ksQ9faSW by [email protected] | |
0 likes, 0 repeats | |
it's inlined earlier in this same functionwhat the fuck | |
Post #AWfeOSE1WF8b7fqFQe by [email protected] | |
0 likes, 0 repeats | |
either they REALLY wanted to specify that this class initializes all the floats… | |
Post #AWfeTiptBj885W45i4 by [email protected] | |
0 likes, 0 repeats | |
I'm not really sure how you accidently code a floating point number to have… | |
Post #AWfelufbvZ980HvoIK by [email protected] | |
0 likes, 0 repeats | |
yeah after some dynamic testing, I think the reason this particular WStaticMesh… | |
Post #AWfeuMnXEUpvYbfXOa by [email protected] | |
0 likes, 0 repeats | |
it probably got left in because 1. codewarrior is terrible at dead code elimina… | |
Post #AWffPqoPgtNpcb5nlo by [email protected] | |
0 likes, 0 repeats | |
fs_QuequeRemoveTHIRTEEN YEAR OLD TYPO SPOTTED | |
Post #AWffX55b0VJzvcZqka by [email protected] | |
0 likes, 0 repeats | |
@marcan wow, that's some Advanced Evil | |
Post #AWffxUYExjuYQVZLAe by [email protected] | |
0 likes, 0 repeats | |
bPrevIngoreNunchuckCOME ON NOW | |
Post #AWfg6KVhfDUftKb3IW by [email protected] | |
0 likes, 0 repeats | |
there is not much gore in Wheel of Fortune.they meant Ignore | |
Post #AWfgX5hmohuLnE0cxU by [email protected] | |
0 likes, 0 repeats | |
@foone The deeper you go into this game's accursed pot of spaghetti bologne… | |
Post #AWfgX5m2YtJK0Q01aa by [email protected] | |
0 likes, 0 repeats | |
@pmzeitler bold of you to assume I didn't start out that way | |
Post #AWfhFyzOdKbVzkeUHg by [email protected] | |
0 likes, 0 repeats | |
ptTargWorlda pointer to the Target, in World coordinates? or the best fun park … | |
Post #AWfiHtHouJUaqDk944 by [email protected] | |
0 likes, 0 repeats | |
arg. how is WTrackCam perfectly documented in the debug data, but the surroundi… | |
Post #AWfie8wbNAUXm2QgaG by [email protected] | |
0 likes, 0 repeats | |
oh because it's only created by the fucking scripting language! | |
Post #AWfieBit2cIsON2H7g by [email protected] | |
0 likes, 0 repeats | |
MY KINGDOM FOR A DAMN SPIGOT SCRIPTING ENGINE DISASSEMBLER | |
Post #AWfirlGeCO14OcIc0O by [email protected] | |
0 likes, 0 repeats | |
(I'm going to have to write it. Well, finish writing it) | |
Post #AWfjvUBZkaFkWwGbLs by [email protected] | |
0 likes, 0 repeats | |
the nice thing about having a scripting language is sometimes I'll see that… | |
Post #AWfk5NDYVp4RoauL2m by [email protected] | |
0 likes, 0 repeats | |
this is like 90% of what I've been doing for the last three months.I'm … | |
Post #AWfmYTSIbCqPT2o8qO by [email protected] | |
0 likes, 0 repeats | |
BAD PROGRAMMER.in ResourceLoadPacket::finalize, they have two for() loops neste… | |
Post #AWfn95rdH3u30y7QUC by [email protected] | |
0 likes, 0 repeats | |
if (this->nVersion == 262) { if (this != (PropertyBook *)0x0) { // do some… | |
Post #AWfqkSMyrTDZOLHzvs by [email protected] | |
0 likes, 0 repeats | |
@foone could be worse, didn’t the old versions of MSVC let you access variabl… | |
Post #AWfqkSQscyKxaR770i by [email protected] | |
0 likes, 0 repeats | |
@8_bit_brett Yeah! MSVC 6.0 used to interpret:for(int i=0;i<10;i++){}like yo… | |
Post #AWfr4ouyjkGt7Ety8O by [email protected] | |
0 likes, 0 repeats | |
love to spend a while looking through the code to try and understand how a vari… | |
Post #AWfrBOWdGLDtHseHpY by [email protected] | |
0 likes, 0 repeats | |
PFuncSymbol takes a final boolean parameter. What does it do? We don't real… | |
Post #AWfreWqbOsI5Unsjh2 by [email protected] | |
0 likes, 0 repeats | |
@foone it's already way too late at that point. Modern compilers would prob… | |
Post #AWfreWvD7jydj62PsO by [email protected] | |
0 likes, 0 repeats | |
@gracicot this isn't a modern compiler, however. it's codewarrior, and … | |
Post #AWfwRins8WVuaCJjbk by [email protected] | |
0 likes, 0 repeats | |
@foone I wonder if you can use the trace to substitute in constants and do DCE | |
Post #AWfwRis7shusnOJ8Eq by [email protected] | |
0 likes, 0 repeats | |
@bnut DCE? | |
Post #AWfy81hQN6vzIw2Ou0 by [email protected] | |
0 likes, 0 repeats | |
DW_OP_regx 0xffff?the variable is stored in numbered register 65535? something&… | |
Post #AWfyr8P2IN9b7rwi3s by [email protected] | |
0 likes, 0 repeats | |
pPVar2 = stack[-1]NO NEGATIVE INDICESTHIS IS C++ | |
Post #AWfzaVkwJb6saOpQFE by [email protected] | |
0 likes, 0 repeats | |
basically the stack is defined as an array of pointers to PVariable*But they ch… | |
Post #AWfzq7m9F3FGqSq3WK by [email protected] | |
0 likes, 0 repeats | |
this is how some versions of new[] work in C++. but that's a compiler, not … | |
Post #AWfzqB0RENSUreY0i8 by [email protected] | |
0 likes, 0 repeats | |
this is C++. they could have just defined their stack as a class with two membe… | |
Post #AWg00MkgPmNaBo2Ltg by [email protected] | |
0 likes, 0 repeats | |
BUT NO, THE PROGRAMMERS HAD TO BE CLEVER | |
Post #AWg1aeAZEaREaW0YfA by [email protected] | |
0 likes, 0 repeats | |
@foone This isn’t decompiled code? Damn | |
Post #AWg1aeET05Ycmbpfk0 by [email protected] | |
0 likes, 0 repeats | |
@vi no, it is, but I have matching debug data so I have some insight into what … | |
Post #AWg1lfA9sgwCr24NLk by [email protected] | |
0 likes, 0 repeats | |
@foone you probably have a strong opinion on BSTR"A BSTR is a pointer. The… | |
Post #AWg1lfEPcsLB4E3lyq by [email protected] | |
0 likes, 0 repeats | |
@peturdainn yeah, I'm not a fan! | |
Post #AWguIQPT9GzqBCInSa by [email protected] | |
0 likes, 0 repeats | |
@foone how old is the game? Maybe only Stepanov knew how to use them. | |
Post #AWguIQUQqoxyQaclCC by [email protected] | |
0 likes, 0 repeats | |
@rogersm 2010. And they've already used STL (or an in-house clone) elsewher… | |
Post #AWh5KJyH9nlqHlgnwm by [email protected] | |
0 likes, 0 repeats | |
so there's 25 functions here which have the exact same bytes in their body.… | |
Post #AWh5KN3LhObxqN5Ols by [email protected] | |
0 likes, 0 repeats | |
they all are "pop the top value off the VM stack and static-cast it to a d… | |
Post #AWh5cNUYo1UAPwOt7o by [email protected] | |
0 likes, 0 repeats | |
I will never understand how and why CodeWarrior debugs the arguments to functio… | |
Post #AWh5cQBslvKMmsgVvc by [email protected] | |
0 likes, 0 repeats | |
and it's not like parameter 4 goes unused. It's clearly used in the fun… | |
Post #AWh6v9YGxW7YdgeZCC by [email protected] | |
0 likes, 0 repeats | |
line 1038 of E:\Build\WheelJeopardy\Parser\/PVMachine.cpp somehow declares two … | |
Post #AWh70jR8y00PNlyl7Y by [email protected] | |
0 likes, 0 repeats | |
@foone What's Parameter 0? | |
Post #AWh70jVOiBPNaxy9ke by [email protected] | |
0 likes, 0 repeats | |
@Globaltom that's the hidden this pointer | |
Post #AWh7dKHIRN0WeCmBVI by [email protected] | |
0 likes, 0 repeats | |
you've heard of the Single Instruction Computer? Well make way for the Sing… | |
Post #AWh8DTTrhbclc8tMiu by [email protected] | |
0 likes, 0 repeats | |
artists depiction of a programmer trying to instrument tracing into the game… | |
Post #AWh8j0O7P5eceSEsgi by [email protected] | |
0 likes, 0 repeats | |
I ran the game for 10 seconds. 4 seconds of blank screen, 6 seconds of the &quo… | |
Post #AWh8r0Htf1OMen8uqu by [email protected] | |
0 likes, 0 repeats | |
@foone If R27 is infinitely large, you can technically build a turing machine t… | |
Post #AWh8r0MVNt4ut5Ib2G by [email protected] | |
0 likes, 0 repeats | |
@moony given that my name is Foone Turing, all machines I build are Turing Mach… | |
Post #AWh9AqWdfM1qAhV3b6 by [email protected] | |
0 likes, 0 repeats | |
there are only two major problems in reverse engineering:1. not enough data2. t… | |
Post #AWh9LYq5lO7uVJhy6a by [email protected] | |
0 likes, 0 repeats | |
and that's with only one VM! This game supports multiple concurrent VMs exe… | |
Post #AWh9Lbu6Mw7I0cbiGu by [email protected] | |
0 likes, 0 repeats | |
guess I just have to write a log parser for dolphin to extract out execution tr… | |
Post #AWhALvBMnAFnkpOY08 by [email protected] | |
0 likes, 0 repeats | |
yeah that seems reasonable | |
Post #AWhAU1AgPPzEe4w5dA by [email protected] | |
0 likes, 0 repeats | |
@foone and 16bit segmented addressing software *hisses* 😾… then again, tha… | |
Post #AWhAU1FI8HfmsN5loW by [email protected] | |
0 likes, 0 repeats | |
@manawyrm GOD YESI was totally trying to think of a joke 3rd thing to put in, b… | |
Post #AWhAvItUclapQjuFkG by [email protected] | |
0 likes, 0 repeats | |
I may have figured out why function parameters sometimes get elided:I think it … | |
Post #AWhB2grBvft5mELskC by [email protected] | |
0 likes, 0 repeats | |
@foone like — damn it, why did I have to be born in the 16bit era and have al… | |
Post #AWhB2gvneXZe0WVYvY by [email protected] | |
0 likes, 0 repeats | |
@manawyrm exactly. if I just focused on 32bit and up I would be SO much happier… | |
Post #AWhE7wk6as2GM8Ef0C by [email protected] | |
0 likes, 0 repeats | |
NOPE! found a function with a const char* and it's included.whatta hell | |
Post #AWhEXbdjfxHiR6UXSa by [email protected] | |
0 likes, 0 repeats | |
but it calls a different function with the same arguments, and the const char* … | |
Post #AWhEXey3IsJokz1J2m by [email protected] | |
0 likes, 0 repeats | |
I'm gonna have to reverse engineer codewarrior next and see if there's … | |
Post #AWhGFQIJJrZtwbvZSa by [email protected] | |
0 likes, 0 repeats | |
I can find event A: a new VM is createdevent B: a script is loaded into the VMe… | |
Post #AWhHBYKjaWwzfmmObA by [email protected] | |
0 likes, 0 repeats | |
OH IT'S GOT BASTARD CACHINGit loads the script, creates a VM for it, then d… | |
Post #AWhJnmx7slwpvU64q8 by [email protected] | |
0 likes, 0 repeats | |
no it's mostly got "foone forgot the difference between a pointer and … | |
Post #AWhJuvWWPktEXG3aNM by [email protected] | |
0 likes, 0 repeats | |
I've got to dump a stack in a "language" that's not turing co… | |
Post #AWhLRVUqIrphKAN2sy by [email protected] | |
0 likes, 0 repeats | |
@fooneWhen you say it's not "Turing complete"...Is this the tradi… | |
Post #AWhLRVZS1jWFYSWj4K by [email protected] | |
0 likes, 0 repeats | |
@thanevim BOTH | |
Post #AWhLXqbqibx2Xhfgrw by [email protected] | |
0 likes, 0 repeats | |
never underestimate the power of loop unrolling and pointless logging | |
Post #AWhLjbhjxcp3n52BlI by [email protected] | |
0 likes, 0 repeats | |
help I ran the game for 45 seconds and I now have 2.8 gigabytes of logs | |
Post #AWhMQS75UpFMUpJw12 by [email protected] | |
0 likes, 0 repeats | |
@millions I think that might actually end up being smaller, given that for most… | |
Post #AWigt5vTGAIgK3mXJo by [email protected] | |
0 likes, 0 repeats | |
@foone but but but memory!Though you could use C99 flexible arrays for that so … | |
Post #AWigt5zj0LheXFlvwu by [email protected] | |
0 likes, 0 repeats | |
@mirabilos not sure a version of codewarrior this old even supports c99 feature… | |
Post #AWihLaCuGhZcLXWOg4 by [email protected] | |
0 likes, 0 repeats | |
@mirabilos also judging by the rest of this program, they were not super worrie… | |
Post #AWihqQILAjzsa4ljbE by [email protected] | |
0 likes, 0 repeats | |
@foone issue closed: expected behaviour, just buy a bigger drive. | |
Post #AWihqQMauvOqnGl8EK by [email protected] | |
0 likes, 0 repeats | |
@tr7zw I recently did a project where I scanned every Wii game for misplaced fi… | |
Post #AWikJTsb7gCI0NiB16 by [email protected] | |
0 likes, 0 repeats | |
@tr7zw @foone download mor rams tbh | |
Post #AWikJTwqrrbGDZhZeC by [email protected] | |
0 likes, 0 repeats | |
@jeff @tr7zw counterpoint: I have 64gb in my desktop, specifically because I… |