PWE progress report: it's basically at the point where I can spawn whatever objects I want and set up their properties, link them to other objects, etc. as well as modifying existing objects. The main thing still left to do before all the pre-release features are finished is creating/deleting objects. Creating is mostly done after a few more fixes and deleting is half implemented. When that's done there are a few bugs that need fixing and a few new convenience features I want to look into implementing, then I should be ready to release... I will probably make a new thread when I reach that point.
So, I decided to look into how saves are written to the memory card and found something out that makes sense in hindsight: Save are encrypted, the overall logic is pretty straight forward, but difficult to understand at a glance, as a matter of fact I'm still not 100% certain on what's happening yet, but cleaning up the code should help clear up my confusion. https://gist.github.com/Antidote/649ebd8c16ab1f817324
Took me about an hour to RE then test, but it SEEMS to work fine (albeit with incorrect endianness)
All major features are finished, need to add some minor features/fix some bugs/clean a few things up and I will finally be release-ready. If I had to guess I'd say it should be good to go within a week.
If anyone happens to be around right now I'm going to stream myself screwing around with MP1 and testing the editor on my Twitch channel for a couple hours.
So, last night I decided to take a look at the save again, and reverse engineered the bitstream completely and properly (the implementation above has a few bugs)
I added some really useful copy/paste and clone functionality to the editor; as a test I tried copy pasting an entire cinematic to a new room. It worked perfectly and it's super easy to do in the editor. Right click pickup, select all connected objects, copy, load new area, paste. This is the result: https://twitter.com/Paraxade0/status/711665355244986368
Does anyone know if there's a way to automate creating a ton of wiki pages? I'd like to have a page up for each script object type in each game, now that PWE is out and anyone can download the editor and help us figure out what properties do. I could easily generate the page source for each of them, but I don't know of a way to automatically push them to the wiki and I don't want to have to manually create every page with the generated source.
So I've figured out what the two unknown long type values for counter objects do. One of them is the master counter itself, while the other is some sort of subtraction counter type deal where it takes the value it is set to and subtracts that from the master counter. For example, the E.I 2 fight's counter for the holes we need to destroy is set to 11 by default, while the subtraction counter is set to 0. so the game waits until 11 have been destroyed, then activates E.I. 3. If the counter is changed to say, 6 instead of 11, then we only need to kill 6 for the next phase to start. Now, if we set the subtraction counter to 2 then we only need to kill 4 of the holes. Why this subtraction counter exists is beyond me, but it's there. There two values are below the unknown value set to 3, they go subtraction counter, master counter in that order if anyone was interested in updating the names on their PWE.
oh, those values are marked in the MP1 Counter template. The first long is the starting value, and the second long is the max value. The counter's initial value is the first long, and then it enters the MaxReached state when it hits the number set as the max in the properties.
Well here I though I had made some new discovery >_<. Oh well. Also, I've noticed like every object in echoes has an unkown value always set to 3, any clue what that might be at all?
MP2+ have IDs for every property while MP1 doesn't. So any changes you make on the MP2 templates will be applied to other instances of that property ID in MP2, plus in MP3 and DKCR. But since MP1 doesn't have the IDs there's no way to identify the same property in MP1, which means the MP1 templates aren't synced with the rest and there's some properties that are marked in the MP1 templates that aren't marked in the MP2 templates (and vice versa).
Quote from Gunert:
Also, I've noticed like every object in echoes has an unkown value always set to 3, any clue what that might be at all?
no clue what it is, it doesn't do anything as far as I can tell. Best guess is it's something their editor used but isn't used by the game.
well, I figured out 3 unknown values for the camera shaker object. unknown value 1 effects horizontal shake, unknown 5 effects vertical shake and unknown 7 effects the length of camera shaking. strangely, unknown 6 has values assigned to it equal to the vertical shake, but changing it doesn't seem to do anything. values 2,3 and 4 also don't seem to do anything.
I think those are new, don't think anyone has looked into CameraShaker yet :P Can you clarify which game you're talking about and provide the ID path of the properties? You can find it in the edit template dialog after right clicking the property name
oh right, the game is prime one, I.D path for horizontal shake (unknown value 1) is 0x00000001. I.D. path for vertical shake (unknown 5) is 0x00000005 and I.D. path for shake length (unknown 7) is 0x00000007 Also, someone made a site for all of this stuff already right? Is there a link for that somewhere?
I made a little mockup of what a script object page might look like. Pretend the Script Object and Script Struct headers are separate pages. Does anyone have any feedback on anything? This needs to be absolutely perfect before we go ahead with the page generation. I don't want to have to go update 1000 pages if we decide to change how these pages should be laid out. http://www.metroid2002.com/retromodding/wiki/User:Parax0/Object_Page#Script_Object