| Post AWfg6KVhfDUftKb3IW 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 #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… |