____01/12/2014 We all knew it had to happen some day!
- 20/10/2014 I talk about scripts and Lua and show some more shit. And eat chips.
- 10/10/2014 2 scenes ran by NATIVE SCRIPTS ONLY.
- 18/09/2014 TEXTURES ARE FINALLY COMING!!!
- 02/09/2014 Exploit found in the actual Lua kernel, let the fun begin!
- 22/08/2014 Very early demo on CHOICE PATHS!
- 16/08/2014 KERNEL PART ~2~: Executing multiple byte-code scripts, loading resources and shit actually doing stuff (see vid for more info so tired)
- 07/08/2014 KERNEL PART ~1~: First real-world test of new engine rewrite, with native kernel.
- 28/07/2014 MILESTONE: Full sequence playing with scenery, camera's, dialog, music, etc!
- 27/07/2014 Early progress on area's / scenery!
- 20/07/2014 Camera keyframe animation figured out + implemented (video link in post)
- 18/07/2014 Passed final exams, will move out of house!
- 06/07/2014 Models, now in Mogre, and beginnings of skeleton / bones!
- 02/07/2014 Models (catalogs) seem to have a bright future!
- 01/07/2014 Timeline structure figured out, parsing in such a shape that we can now playback sequences (audio only)!
- 07/06/2014 Announcement new tool "InfraViewer"
Model-to-do-list Disclaimer: list subject to change
Todo
- Make a to-do list
Doing
- Research SCRIPT_ZONE's (ZONE_SHAPE_BOX, ZONE_SHAPE_SPHERE, ZONE_SHAPE_HEXAHEDRON)
- Research areas.
Done
I forgot to update this list #lol.
Except for the skeleton & materials everything is done: meshes are parsed, textures decoded.
Sequence-to-do-list Disclaimer: list subject to change
Todo
- Implement MOVIE_VIEWPORT_FADE_FX_ACTION
- Implement MOVIE_PAD_VIBRATION_FX_ACTION
Doing
- Implement PAR_ELEMENT_STANDARD
- Implement PAR_ELEMENT_HOLD
- Implement PAR_ELEMENT_LOOP
- Implement PAR_ELEMENT_MASH
- Implement MPAR_ELEMENT_AXIS_TRANSLATION
- Implement MPAR_ELEMENT_AXIS_ROTATION
- Implement MPAR_ELEMENT_ABC (?)
- Implement MPAR_ELEMENT_STANDARD
- Implement MPAR_ELEMENT_HOLD
- Implement MPAR_ELEMENT_LOOP
- Implement MPAR_ELEMENT_MASH
- Implement MOVIE_USER_ACTION_CONDITION
Done
- Create a "flexible" interface for playing / controlling sequences.
- Implement SEQUENCE_CONTROLLER (SEQ_CHK_), which only defines basic (but important) stuff like the root movie.
- Implement MOVIE_SCRIPT_CONDITION
- Implement SEQUENCE_CONTROLLER_PLAY[
- Rewrite audio streamer for the third time (this time asynchronous)
- Make it better.
- Perform first tests!!
- Write a custom high-resolution Timer class (using a thread and a stopwatch!)
- Implement MOVIE_PLAY_ANIM_ACTION
- Implement MOVIE_GO_TO_MOVIE_CONDITION
- Implement PLAY_SCRIPT_TOP
- Implement MOVIE_PLAY_SHOT_ACTION
- Implement MOVIE_WATCH_FX_ACTION
- Implement MOVIE_CAMERA_MODIFIER_FX_ACTION
- Implement MOVIE_CAMERA_QUAKE_FX_ACTION
- Implement MOVIE_PLAY_SOUND_ACTION
- Implement MOVIE_DIALOG_GROUP_CONDITION
- Implement MOVIE_PLAY_DIALOG_ACTION
- Implement MPA_CHK_ and the other entity Communicators (camera shots, sounds, dialog, etc.)
- Research camera "sub-shots".
- Implement MOV_ELEM (also relies on other stuff)
- Implement MOV_MISC
- Implement MOV_GUID
- Implement MOV_ENT_ (relies on other stuff though)
- Find out what PAR/MPAR stands for (Physical Action Reaction / Motion Physical Action Reaction)
Kernel-to-do-list Disclaimer: list subject to change
Todo
- Implement version 2 of CAC_____ (as seen in 0802 The Party Clash -> main scene com).
- Check out different DATA_CONTAINER => DC_DATA version formats and implement
- Implement SCRIPT_ZONEs
- Start my own blog(???)
- Check out non-empty SC_FRM_W (in 1802 Hunted Train)
- Audio features (stop, pause, resume, seek, insert silence)
Doing
- Perform tests to make sure everything works!
- Set up MOGRE (now Paradox) environment
- Spam XeNTaX with pointless update videos
Done
- Research PAR/MPAR events and choice events.
- Implement Lua "actions" system (partly completed)
- Re-implement dynamic loading for SCRIPT_FUNCTION_CALL.
- Proper meta-data reading (needs: SINT_SEC reader rewrite, modification to DC_DATA_ reader and preloader FIX)
- FIX: preloading of resources
- Partly rewrite, partly port the Sequence parser/player.
- Port usable code over from older tools (mainly InfraViewer)
- Completely revise attribute reading and data loading.
- Finish audio streaming engine (needs minor performance adjustments)
- Change FMOD audio engine to BASS audio engine (much better support for custom data streaming and easier DSP mixing)
- Research loading of resources.
- MILESTONE: Execute -FULL- scene, including sub-scripts, dynamic loading (100% with Broken (scene after Prologue) and Prologue)
- Implement SendEvent(...)
- Make some sort of Lua execution manager to make sure there are no cross-thread executions. (seems to be fixed using <lock>)
- [HIGH PRIORITY] Dynamic loading for LOADING_ZONEs & LOADING_ZONE_TIMERs. (seems to work fine, needs more testing though!)
- Implement SCRIPT_FUNCTION and SCRIPT_FUNCTION_CALL (major)
- Reorder classes into separate .cs files...
- MILESTONE: perform test using scene name, -> load scene loadzone, load scene datacontainer, execute scene (and load resources) -> call <scene>.OnInit().
- Research COM_INSTANCE_LIST's
- Implement EndVarFreedom()
- Converter for PS3 (PPC, big endian) LUAC chunks to PC (little endian) chunks.
- Temporary video play management, with threaded pre-loading and threaded playing. Note: needs actual playing! XD
- Audio system (FMOD) with global functions, events, and threading. (3D support will be written later)
- Implement SCRIPT_DELAY
- Implement MESSAGE_LAUNCHER & MESSAGE_CONTROLLER (TESTED)
- Proper resource management and properly working clean up functions (stress tested!)
- Make multithreaded loading manager with managed stacks and event callbacks
- "BinaryCore" for BigFiles (IDM file reading, handle assignments)
- Implement runtime.sdat reading
- Implement PARAM.SFO reader
- Implement Dynamic Communicator system (register, attributes, events, paramaters, actions (partly), unregister, linking)
- Implement Lua "variables" system.
- Implement Lua "events" system.
- Implement Lua "attributes" system.
- Neatly working kernel enviroment with easy-to-plug-in features and support.
- Create basic "instances" environment.
Support
As you may know, this category of XeNTaX doesn't get as much attention as we'd like it to get!
That's why I made this badge:
Code: Select all
[url=http://forum.xentax.com/viewtopic.php?f=32&t=11411][img]http://i.imgur.com/EUcneAM.png[/img][/url]
Donations
Some people have asked me if they can donate somewhere, so I decided to put a PayPal donation thing up here:
To anyone who donates: THANK YOU! You're the best.
After you donate, make sure to send the receipt to hugo ~a t~ djek ~d o t~ nl with your nickname, so you can be in the credits once any tools / ports are released.
Where will the money go to? I haven't really thought of any situations where this project would cost money, but it will be primarily spent on this project. This means we could for instance set up a website, or pay people to reverse some assembly for us It could also be spent on hardware / software (such as the PS4 version of Beyond, when it comes out).
WARNING!!! The info under here is inaccurate and very outdated!
Here's my second tool since joining here!
This tool can extract all data blocks from Beyond: Two Souls, including audio (SFX, Dialog, Music & Ambience (multi channel)), segs entries (and decompress them using QuickBMS), scripts and dialog text (very limited support right now).
It also partly works with Heavy Rain. Let me know if you want me to investigate those formats too.
Here's a screenshot:
What's coming?
Okay, first a little explanation about how Beyond works.
Beyond (and Heavy Rain) store its data in blocks called Communicators.
(The following text is correct for around 60% )
A Communicator is a table containing data for a certain function in the game. These are formatted as precompiled Lua "function chunks". The values of these "settings" are stored either compressed (as a segs entry, which is a split up ZLIB archive), or uncompressed (as a QZIP entry, which is funny, because "ZIP" normally indicates a compressed file entry). Aside from storing just values as Lua functions, modified versions of Communicators are also used for storing the "actual" scene scripts, model data, animation data, (very small amounts of) audio, video (like the sport scenes and cartoons on the in-game TVs), textures, dialog sequence text, and more.
Right now, I'm working on a universal parser for these blocks. That's basically what the extractor does, but the difference is that this new parser can get useful data out of the blocks, rather than just extracting them.
>> Download Beyond: Two Souls -Extractor- v1.0
ANOTHER NOTE: Even though this is v1.0 it's still very much a beta. Please let me know if you get errors during export!!
So, there you go! I wonder if I will be getting any comments on this one!