Register - Login
Views: 99383255
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-24-22 02:01:55 AM
Jul - The Cutting Room Floor - Beyond Two Souls New poll - New thread - New reply
Next newer thread | Next older thread
Hugo_Peters

Level: 26


Posts: 116/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 04-03-14 08:28:03 PM (last edited by Hugo_Peters at 09-23-14 10:44:49 PM) Link | Quote



Since everyone kept asking me for models... https://www.youtube.com/watch?v=fUqPOOoC8xU



Forget all this stuff, check where we are now: (warning, spoilers) https://www.youtube.com/watch?v=4ikhbv4xkGk



Update: first version of the Beyond: Two Souls extractor released!



Beyond Two Souls is one of my favorite games of all time. Some people say it's not a game, but a movie, but even if it was then would that matter? There are no rules to what a game should be. Not like literature. God, so many unnecessary rules.

To the point of this thread!
Beyond's files are huge and contain concatenated individual files.
The .d01 - .d04 files contain textures, models, and also some sound entries, though not much.
The .d05, .d06, .d07 and .d08 files all contain sound effects, dialog, and music.

SFX, Dialog, Music (.d05 - .d08)

The structure of the audio .d0x's is actually quite simple.

The file starts at 0x800, before that is just the "tab header". There are actually no tabs used in these .d0x files, only in the ones before .d05. The .d0x files are split up into blocks.
Each block consists of the following entries:
PARTITIO
PARTOFFS
STREAMAB
HEADER__

Each block has a header of its own:
0x8: Name
0x4: Version?
0x4: Total length of the block.

The PARTITIO block contains the actual file data.
The PARTOFFS block contains some data. Not really what for. Doesn't seem to be the offset of the PARTITIO block.
The STREAMAB block has different contents for each type of data (SFX, Dialog, Music). It could contain stuff like the sampling rate (mostly 44100 Hz, but sometimes 16000 Hz) when it's not in the HEADER__ block.
The HEADER__ block contains more info, and even more when it's not in the STREAMAB block.

The PARTOFFS, STREAMAB and HEADER__ blocks probably give more info into the audio length, file size, audio frames, etc. But nothing that is required to export the file.

The PARTITIO block requires more explanation.
It starts with the normal 16 bytes header.
Then there are 0x7f8 padding bytes until the stream starts.
The stream starts with the magic(?) 0x3f80.
Then 0x0a padding bytes.

This is where I determine what type the audio is.
Every audio frame starts with 0xfffa. Every frame has a size of 418 bytes.

Most of the audio types (SFX & Dialog) contain of a single "chunk" of audio frames.
To export them, just take the length of the PARTITIO block and substract the offset to the data stream.
You could also export the individual frames of audio by moving 418 bytes forward from every frame until the first two bytes aren't 0xfffa (note: for some reason, sometimes the audio frame is 417 bytes).

The song blocks (for soundtracks, ambience but also some sound effects) are a bit different.
They start with the 0x3f80 magic, but after 0x0a bytes it defines the amount of channels(?/versions: stereo, mono, surround?) and after that [amount of channels] x 4 bytes of chunk sizes. These chunks are (?always?) one second worth of data. I haven't seen any audio block that defines more than 3 (or less) channels.
After the chunks definition it starts the stream of chunk 1 for channel 1. Then directly after that chunk there's chunk 1 for channel 2, etc. After all [channel chunk sizes] x [amount of channels] data there are some 0x00 padding bytes and then it starts the definition of the new channel chunks. This keeps going on until the end of the total PARTITIO block length.

For example, lets say there are 3 channels, and all channels have 0x3fad as chunk size.
It would look like this:


00 00 00 03 00 00 3f ad 00 00 3f ad 00 00 3f ad
ff fa <0x3fad (-2) bytes of data for channel 1 chunk>
ff fa <0x3fad (-2) bytes of data for channel 2 chunk>
ff fa <0x3fad (-2) bytes of data for channel 3 chunk>

00 00 00 03 00 00 3f ad 00 00 3f ad 00 00 3f ad
ff fa <0x3fad (-2) bytes of data for channel 1 chunk>
ff fa <0x3fad (-2) bytes of data for channel 2 chunk>
ff fa <0x3fad (-2) bytes of data for channel 3 chunk>

00 00 00 03 00 00 3f ad 00 00 3f ad 00 00 3f ad
ff fa <0x3fad (-2) bytes of data for channel 1 chunk>
ff fa <0x3fad (-2) bytes of data for channel 2 chunk>
ff fa <0x3fad (-2) bytes of data for channel 3 chunk>


To export the files, you just take all data for each channel and paste it right after each other.

There's another format which starts off with NULL, zeros and "SKA". I have no idea what format it is.
It could be AC3 or DTS as that format is listed in the credits of Beyond, but I'm having no luck playing them.

< I might add info on the other .d0x files later >

Here's some extracted stuff!


The song that plays at the bar in the "Like Other Girls" chapter:
http://djek.nl/shit/beyond/1515%20%20(0x297C2000).mp3

Warning: spoilers!

And now for something quite disturbing:
In that same scene (the bar) Jodie almost gets abused, but Aiden comes to rescue her just in time.
But........ judging by these audio clips... at some point in development it was still possible to actually get abused.

Warning: this shit's fucked up.

http://djek.nl/shit/beyond/1928%20%20(0x2E5C9000).mp3
http://djek.nl/shit/beyond/1934%20%20(0x2EED2000).mp3
http://djek.nl/shit/beyond/2056%20%20(0x319D8800).mp3
http://djek.nl/shit/beyond/2171%20%20(0x34F0B800).mp3

So... yeah.

And also, some nice music!

http://djek.nl/shit/beyond/5681%20(0x70C7E800)%20version%201.mp3
http://djek.nl/shit/beyond/2487%20(0x3C3D6000)%20version%201.mp3
http://djek.nl/shit/beyond/3960%20(0x5B30E800)%20version%201.mp3
Fucking epic: http://djek.nl/shit/beyond/3147%20(0x522F1800)%20version%201.mp3

I will be posting the extractor soon! Every .d0x file spits out around 6000 mp3's.

____________________
I have a blog: clyck!
einstein95
Member
Level: 37


Posts: 121/318
EXP: 325755
For next: 12498

Since: 04-11-13


Since last post: 3.3 years
Last activity: 3.3 years

Posted on 04-04-14 01:23:28 AM Link | Quote
So it's like Heavy Rain or Farenheit?

____________________
The more I type, the less gooder it sounds does.
Darkdata
Ruins!? ♥
Level: 103


Posts: 2763/2892
EXP: 11436319
For next: 35087

Since: 07-04-07


Since last post: 193 days
Last activity: 1 day

Posted on 04-04-14 01:39:04 AM Link | Quote
Just as a note, it's possible with a camera hack to see the Main Character naked in the shower with obvious unused textures. Just as a caution for when the page is made, since the Main Character is almost creepily based on the voice actor it might be best to not show those shots in that context. Just a mention without an image, or the flat texture file may be for the best.

It might not have came up at all, but this one stuck out in my mind.

____________________
einstein95
Member
Level: 37


Posts: 122/318
EXP: 325755
For next: 12498

Since: 04-11-13


Since last post: 3.3 years
Last activity: 3.3 years

Posted on 04-04-14 01:59:32 AM Link | Quote
Originally posted by Darkdata
Just as a note, it's possible with a camera hack to see the Main Character naked in the shower with obvious unused textures. Just as a caution for when the page is made, since the Main Character is almost creepily based on the voice actor it might be best to not show those shots in that context. Just a mention without an image, or the flat texture file may be for the best.

It might not have came up at all, but this one stuck out in my mind.


Oh, I already did that (mentioned, instead of showing) http://tcrf.net/Beyond:_Two_Souls

____________________
The more I type, the less gooder it sounds does.
Hugo_Peters

Level: 26


Posts: 117/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 04-04-14 05:52:50 AM Link | Quote
Originally posted by einstein95
So it's like Heavy Rain or Farenheit?

The upper layer structure is almost the same, but the entry structure (the data itself) is completely different.


Originally posted by Darkdata
Just as a note, it's possible with a camera hack to see the Main Character naked in the shower with obvious unused textures. Just as a caution for when the page is made, since the Main Character is almost creepily based on the voice actor it might be best to not show those shots in that context. Just a mention without an image, or the flat texture file may be for the best.

It might not have came up at all, but this one stuck out in my mind.

Yeah, I've seen that. I didn't check out the shower scenes with the debug mode though, I went to the scene where you "meet" Aiden, so I could see his face! And it's just fun to explore the environments.

____________________
I have a blog: clyck!
Celice
Member
Level: 31


Posts: 144/196
EXP: 177829
For next: 7534

Since: 10-24-10


Since last post: 5.7 years
Last activity: 3.9 years

Posted on 04-04-14 06:32:09 AM Link | Quote
Originally posted by Darkdata
Just as a note, it's possible with a camera hack to see the Main Character naked in the shower with obvious unused textures. Just as a caution for when the page is made, since the Main Character is almost creepily based on the voice actor it might be best to not show those shots in that context. Just a mention without an image, or the flat texture file may be for the best.

It might not have came up at all, but this one stuck out in my mind.

Metro: Last Light similarly had some nude full-body models, though the player only normally saw some titty during a cutscene. The rest of the body is rendered, but often is distorted through curtains or glass or the like.

I'm not sure whether to call these two examples cases of unused nudity, necessarily, as they are loaded during the cutscene/map. It's only that the player is not in a position to normally see this. I'd think that these models would themselves have to be in the game, but never used no matter what to be truly unused.

But I still think both examples belong on the wiki, because they are parts of the game that one might never know of, even if one had already played the game before.
Hugo_Peters

Level: 26


Posts: 118/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 04-04-14 07:48:57 AM Link | Quote
Originally posted by Celice
Originally posted by Darkdata
Just as a note, it's possible with a camera hack to see the Main Character naked in the shower with obvious unused textures. Just as a caution for when the page is made, since the Main Character is almost creepily based on the voice actor it might be best to not show those shots in that context. Just a mention without an image, or the flat texture file may be for the best.

It might not have came up at all, but this one stuck out in my mind.

Metro: Last Light similarly had some nude full-body models, though the player only normally saw some titty during a cutscene. The rest of the body is rendered, but often is distorted through curtains or glass or the like.

I'm not sure whether to call these two examples cases of unused nudity, necessarily, as they are loaded during the cutscene/map. It's only that the player is not in a position to normally see this. I'd think that these models would themselves have to be in the game, but never used no matter what to be truly unused.

But I still think both examples belong on the wiki, because they are parts of the game that one might never know of, even if one had already played the game before.

The nude model has been discussed widely already. Can we get on topic now?
I'm pretty sure they removed the rape scene (and visibility of the nude model) to maintain the PEGI 16 rating.

____________________
I have a blog: clyck!
Celice
Member
Level: 31


Posts: 145/196
EXP: 177829
For next: 7534

Since: 10-24-10


Since last post: 5.7 years
Last activity: 3.9 years

Posted on 04-05-14 03:12:00 AM Link | Quote
Originally posted by Hugo_Peters

The nude model has been discussed widely already. Can we get on topic now?
I'm pretty sure they removed the rape scene (and visibility of the nude model) to maintain the PEGI 16 rating.

Can you give a link to the previous TCRF discussion?
einstein95
Member
Level: 37


Posts: 123/318
EXP: 325755
For next: 12498

Since: 04-11-13


Since last post: 3.3 years
Last activity: 3.3 years

Posted on 04-05-14 07:08:56 AM Link | Quote
Originally posted by Celice
Originally posted by Hugo_Peters

The nude model has been discussed widely already. Can we get on topic now?
I'm pretty sure they removed the rape scene (and visibility of the nude model) to maintain the PEGI 16 rating.

Can you give a link to the previous TCRF discussion?


I think he means outside of TCRF, like the media attention it got.

____________________
The more I type, the less gooder it sounds does.
Celice
Member
Level: 31


Posts: 146/196
EXP: 177829
For next: 7534

Since: 10-24-10


Since last post: 5.7 years
Last activity: 3.9 years

Posted on 04-05-14 06:53:32 PM Link | Quote
Originally posted by einstein95
Originally posted by Celice
Originally posted by Hugo_Peters

The nude model has been discussed widely already. Can we get on topic now?
I'm pretty sure they removed the rape scene (and visibility of the nude model) to maintain the PEGI 16 rating.

Can you give a link to the previous TCRF discussion?


I think he means outside of TCRF, like the media attention it got.

If that's what he meant, then it should probably be quite clear that the discussion outside sources had about the content is going to be pretty different from our discussion about whether it ought to be added to the wiki.

Unless you pull some weird shit like trying to argue such imagery is immoral and no one should try and preserve or detail such things because of such.
Hugo_Peters

Level: 26


Posts: 119/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 04-05-14 07:03:40 PM (last edited by Hugo_Peters at 04-05-14 07:04:46 PM) Link | Quote
Originally posted by Celice
Originally posted by einstein95
Originally posted by Celice
Originally posted by Hugo_Peters

The nude model has been discussed widely already. Can we get on topic now?
I'm pretty sure they removed the rape scene (and visibility of the nude model) to maintain the PEGI 16 rating.

Can you give a link to the previous TCRF discussion?


I think he means outside of TCRF, like the media attention it got.

If that's what he meant, then it should probably be quite clear that the discussion outside sources had about the content is going to be pretty different from our discussion about whether it ought to be added to the wiki.

Unless you pull some weird shit like trying to argue such imagery is immoral and no one should try and preserve or detail such things because of such.

My point was that I made this topic to discuss the file formats of Beyond, and my finds related to that.
Not a discussion about the nudity of the character.

Since you all seem to be over excited for a normally non visible nude model, let me give my view of it:
Should it be pointed out on the wiki? Sure. Why not. It's something unseen and unseen stuff belongs on the wiki. Should there be a picture of it? No. Why? Out of respect to Ellen Page, and because the sentence using the debug camera it's possible to see the naked body of Jodie is probably enough for anyone to understand what's going on.
I'm really not that shocked over a nude model in a game, even though it was not meant to be seen. Far Cry 3 had nudity as well, but no problem there, as it was intentional.

Update: got the SEGS entries decompressed using QuickBMS and the script by Aluigi / Ekey.

____________________
I have a blog: clyck!
Hugo_Peters

Level: 26


Posts: 120/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 04-10-14 08:31:30 PM (last edited by Hugo_Peters at 04-10-14 09:46:50 PM) Link | Quote
Big update!
First, I want to show my progress in reverse engineering the Dynamic Communicator (DynCom) blocks of Beyond!

But... the fuck is a Dynamic Communicator?

A Dynamic Communicator is a block of events, parameters and attributes for a certain script function in the game.
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). The name of these blocks is COM_CONT, which is short for Dynamic Communicator Content.

There's a more than 200 KB script file in BigFile_PS3.dat which defines many Dynamic Communicator (but not their content of course!). An example is this:


-- Dynamic COM for fAddNPC function

if (QDT.fAddNPC == nil) then
local nDynType = CreateDynCommunicator("fAddNPC", 4411)
AddDynAttribute(nDynType, "CHARACTER", "a01Character", 0)
AddDynAttribute(nDynType, "CATALOG", "A02Catalog", 0)
AddDynAttribute(nDynType, "GMK_ANIMATION_DATABASE", "a03AnimDatabase", 0)
AddDynAttribute(nDynType, "GMK_MOVEMENT_GRAPH", "a04MovementGraph", 0)
AddDynAttribute(nDynType, "ADDRESS", "a05SpawnAddress", 0)
AddDynAttribute(nDynType, "SCENE", "a06Scene", 0)
AddDynAttribute(nDynType, "bool", "a07IsSelectable", 0)
AddDynAttribute(nDynType, "VARIABLE_CONNECTOR", "MKInternal", 6)
local nDynEvent = AddDynEvent(nDynType, "OnInit")
AddDynEventParam(nDynType, nDynEvent, "CHARACTER", "CharacterFONCTION")
AddDynEventParam(nDynType, nDynEvent, "ADDRESS", "AddressFONCTION")
RegisterDynCommunicator(nDynType)
end



So the game's content is basically arguments for functions.

A DynCom block can exist of multiple things. The most common usage is for Lua scripts, providing the content for the DynComs of the game.
So far, I have reversed engineered most of the important stuff related to DynCom blocks themselves, and a basic disassembler for the Lua scripts, though I would have to make a decompiler to make it readable. This shouldn't be impossible, but we'll see if I get around to that.

Anyways, here's an output of a DynCom block:

NOTE: I removed many code instruction blocks to make the output smaller for this post (even though it's fucking huge already).
NOTE2: There's quite a lot of stuff that hasn't been figured out yet. For the rest of the data I'm not sure if I interpreted it correctly, so it could be formatted completely different.

Here's a snippet from the output, to read the whole thing, go here: http://pastebin.com/jiEDDZZ8.
And here's another one: http://pastebin.com/pP8gYM1E



Meta
{
File: G:\Projects\Tools\BeyondTwoSouls\d01_0x377F4000.bin
QZIP: true
}

DC_INFO
{
Unknown1: 2
OffsetToDataHeader: 0x24
COM_Entries: 4
Entry #1: 0x87C, 0x89
Entry #2: 0xFED, 0x89
Entry #3: 0x869, 0x8098
Entry #4: 0x113A, 0x5B5
}

DC_DATA
{
NumberOfFlags: 18
FileSize: 21994
Flag #1: 0
Flag #2: 0
Flag #3: 0
Flag #4: 114
Flag #5: 0
Flag #6: 0
Flag #7: 0
Flag #8: 0
Flag #9: 1
Flag #10: 0
Flag #11: 0
Flag #12: 0
Flag #13: 0
Flag #14: 0
Flag #15: 0
Flag #16: 0
Flag #17: 0
Flag #18: 4
}

COM_CONT
{
ComID: 0x4
ComEntries: 0x2
Entry #1: 1: 0x1D, 2: 0x2AF3, 3: 0x1
Entry #2: 1: 0x22, 2: 0x2D89, 3: 0x1
}

LOADCONT
{
ComID: 0x2
}

LOADZONE
{
ComID: 0x5
DataType: 0x2
}

LOADZTIM
{
ComID: 0x1
}

COM_CONT
{
ComID: 0x4
ComEntries: 0x1
Entry #1: 1: 0x87C, 2: 0x89, 3: 0x1
}

LOADCONT
{
ComID: 0x2
}

SINT_SEC
{
ComID: 0x2
ResourceEntries: 5
- Resources: -ROOT- ChunkID: 0x4, 2: 0x1, 3: 0x27
- bDisableForceLoad: ChunkID: 0x0, Size: 0x1, 2: 0x1, 3: 0xB
- GameManager: -ROOT- ChunkID: 0x4, 2: 0x1, 3: 0x1078
- Delay: ChunkID: 0x0, Size: 0x4, 2: 0x1, 3: 0xD
- IsIntroEntity: ChunkID: 0x0, Size: 0x1, 2: 0x1, 3: 0xB
}

SFE_LOAD
{
ComID: 0x2
Unknown1: 0x1
Unknown2: 0x0
Unknown3: 0x87C
Unknown4: 0x89
}

SCPT_DAT
{
ComID: 0x2
Script_Name: _0601_ENTITIES_TimerDialogGoToBed
Script_Size: 0x1B06
HeaderSize: 0x1B
-- LUA
---- Script Header
LuaSignature: Lua
LuaVersion: 5.1
LuaFormat: 0x0
LuaEndianess: 0x0
Lua_size_int: 0x4
Lua_size_size_t: 0x4
Lua_size_Instruction: 0x4
Lua_size_lua_number: 0x4
Lua_integral: 0x0
-- LUA Function (0x208)
---- Function Header (0x208)
LuaFunctionName: (chunk #1)
Lua_linedefined: 0
Lua_lastlinedefined: 0
Lua_nups: 0x0
Lua_numparams: 0x0
Lua_is_vararg: 0x2
Lua_maxstacksize: 0x3
---- Code (0x218)
LuaCodeSize: 0x3A
Code Block #1: 0x5
Code Block #58: 0x80001E
---- Constants (K) (0x304)
LuaConstantsKsNumber: 21
LUA_TSTRING: QDR
LUA_TSTRING: nScId
LUA_TNIL: nil
LUA_TNUMBER: 0 (0x0)
LUA_TSTRING: _0601_ENTITIES_TimerDialogGoToBed_Var
LUA_TSTRING: default_ctx
LUA_TSTRING: QDT
LUA_TSTRING: SCRIPT_TIMER
LUA_TSTRING: New
LUA_TSTRING: _0601_ENTITIES_TimerDialogGoToBed
LUA_TNUMBER: 1124663296 (0x43090000)
LUA_TSTRING: SC_8_OnFinish
LUA_TSTRING: SB_177_FuncBloc
LUA_TSTRING: SC_194_OnMessage
LUA_TSTRING: SC_239_OnMessage
LUA_TSTRING: OnStop
LUA_TSTRING: _EmptyFunc
LUA_TSTRING: OnScriptEvent
LUA_TSTRING: OnResourceFail
LUA_TSTRING: OnKill
LUA_TSTRING: OnFinish
---- Constants (P) (0x45F)
LuaFunctionNumber: 5
---- LUA Function (0x463)
------ Function Header (0x463)
LuaFunctionName: (chunk #2)
Lua_linedefined: 24
Lua_lastlinedefined: 29
Lua_nups: 0x0
Lua_numparams: 0x1
Lua_is_vararg: 0x0
Lua_maxstacksize: 0x7
------ Code (0x473)
LuaCodeSize: 0xF
Code Block #1: 0x45
Code Block #15: 0x80001E
------ Constants (K) (0x4B3)
LuaConstantsKsNumber: 12
LUA_TSTRING: QDR
LUA_TSTRING: _0601_ENTITIES_Var
LUA_TSTRING: bDialColeDawkins
LUA_TBOOLEAN: true
LUA_TSTRING: Infraworld_Var
LUA_TSTRING: CSGlobalMessage
LUA_TSTRING: Dispatch
LUA_TSTRING: NewOS
LUA_TSTRING: Infraworld
LUA_TNUMBER: 1166262272 (0x4583C000)
LUA_TNUMBER: 1065353216 (0x3F800000)
LUA_TSTRING: StartColeCyc
------ Constants (P) (0x55E)
LuaFunctionNumber: 0
------ Lines (0x562)
LuaLinesSize: 0
------ Locals (0x566)
LuaLocals: 0
------ Upvalues (0x56A)
LuaUpvalues: 0
---- LUA Function (0x56E)
------ Function Header (0x56E)
LuaFunctionName: (chunk #3)
Lua_linedefined: 31
Lua_lastlinedefined: 98
Lua_nups: 0x0
Lua_numparams: 0x1
Lua_is_vararg: 0x0
Lua_maxstacksize: 0x8
------ Code (0x57E)
LuaCodeSize: 0xDA
Code Block #1: 0x45
Code Block #218: 0x80001E
------ Constants (K) (0x8EA)
LuaConstantsKsNumber: 84
LUA_TSTRING: QDR
LUA_TSTRING: Infraworld_Var
LUA_TSTRING: CSGlobalMessage
LUA_TSTRING: Dispatch
LUA_TSTRING: NewOS
LUA_TSTRING: Infraworld
LUA_TNUMBER: 1166262272 (0x4583C000)
LUA_TNUMBER: 1065353216 (0x3F800000)
LUA_TSTRING: StopBlastTV
LUA_TSTRING: _0601_ENTITIES_Var
LUA_TSTRING: zDialogParent
LUA_TSTRING: SetActive
LUA_TSTRING: zDialogDawkinsJesse
LUA_TSTRING: StopDawkinsCyc
LUA_TSTRING: _0601_ENTITIES_Dawkins
LUA_TNUMBER: 1165647872 (0x457A6000)
LUA_TNUMBER: 1150353408 (0x44910000)
LUA_TSTRING: TeleportToAddress
LUA_TSTRING: AdDefaultSpawn
LUA_TSTRING: _0601_ENTITIES_DoorObsRoom
LUA_TNUMBER: 1165643776 (0x457A5000)
LUA_TNUMBER: 1155317760 (0x44DCC000)
LUA_TSTRING: AdFromDoorObsRoomOpen
LUA_TSTRING: _0601_ENTITIES_ColeFolders
LUA_TNUMBER: 1156489216 (0x44EEA000)
LUA_TSTRING: Hide
LUA_TSTRING: _0601_ENTITIES_Mirco
LUA_TNUMBER: 1164066816 (0x45624000)
LUA_TSTRING: AdFromMircoCole
LUA_TSTRING: StopColeCyc
LUA_TSTRING: _0601_ENTITIES_TimerDialogGoToBed_Var
LUA_TSTRING: SC_8
LUA_TNIL: nil
LUA_TSTRING: QDT
LUA_TSTRING: SEQUENCE_CONTROLLER_PLAY
LUA_TSTRING: NewPlacedCtx
LUA_TNUMBER: 0 (0x0)
LUA_TSTRING: OnInstanceReleased
LUA_TSTRING: _EmptyFunc
LUA_TSTRING: OnInstanciated
LUA_TSTRING: OnScriptTop
LUA_TSTRING: OnChoiceEvent
LUA_TSTRING: OnMparEvent
LUA_TSTRING: OnParEvent
LUA_TSTRING: OnResume
LUA_TSTRING: OnPause
LUA_TSTRING: OnInterrupted
LUA_TSTRING: OnFinish
LUA_TSTRING: OnStart
LUA_TSTRING: OnResourceFail
LUA_TSTRING: OnStop
LUA_TSTRING: OnKill
LUA_TSTRING: SetbDisableForceLoad
LUA_TSTRING: SetGameManager
LUA_TSTRING: SetSequence
LUA_TSTRING: _0601_ENTITIES_sDialogGoToBed
LUA_TNUMBER: 1166409728 (0x45860000)
LUA_TNUMBER: 1154326528 (0x44CDA000)
LUA_TSTRING: SetGameplayStartAutomation
LUA_TSTRING: SetGameplayEndAutomationAtSuccess
LUA_TSTRING: SetGameplayEndAutomationAtFailure
LUA_TSTRING: SetEventsStartAutomation
LUA_TSTRING: SetEventsEndAutomationAtSuccess
LUA_TSTRING: SetEventsEndAutomationAtFailure
LUA_TSTRING: SetPhysicsStartAutomation
LUA_TSTRING: SetPhysicsEndAutomationAtSuccess
LUA_TSTRING: SetPhysicsEndAutomationAtFailure
LUA_TSTRING: SetMPARStartAutomations
LUA_TSTRING: SetMPAREndAutomationAtSuccess
LUA_TSTRING: SetMPAREndAutomationAtFailure
LUA_TSTRING: SetMPARClearAutomationsAtSuccess
LUA_TSTRING: SetMPARClearAutomationsAtFailure
LUA_TSTRING: SetStartTime
LUA_TSTRING: SetEndTime
LUA_TNUMBER: 3212836864 (0xBF800000)
LUA_TSTRING: SetForceHideOnStop
LUA_TSTRING: SetResetPositionAtEnd
LUA_TSTRING: SetInSequenceCamerasAreOverridable
LUA_TSTRING: SetInstanceContext
LUA_TSTRING: SetRootController
LUA_TSTRING: _0601_ENTITIES_TimerDialogGoToBed
LUA_TNUMBER: 1165938688 (0x457ED000)
LUA_TNUMBER: 1124663296 (0x43090000)
LUA_TSTRING: Play
------ Constants (P) (0xF87)
LuaFunctionNumber: 2

< See the link above for the complete output >
}





And now...




Here's the first version of the Beyond: Two Souls extractor!

What does it extract?
* Uncompressed segs entries
* Decompressed segs entries
* QZIP blocks (mostly Dynamic Communicators, but sometimes audio data, video data (.bik), and more)
* Audio (SFX, Dialog, multi channel (mostly music and ambience))
* ZLIB (??) entries (not 100% what these are)
* Scripts (only 1 known so far though)
* LOCALIZ blocks (sequence text, but the actual dialog text is hidden somewhere else)

That's most of the data in these files. It can also write a log of everything it's doing.

>> Download Beyond: Two Souls -Extractor- v1.0



NOTE: Even though this is version 1.0, it's very much still a beta. If there are any errors, please report them! I'll fix them as soon as possible.
NOTE 2: The extractor also works for the most part with Heavy Rain, though many file types aren't supported, as they're different in Beyond.

____________________
I have a blog: clyck!
Hugo_Peters

Level: 26


Posts: 121/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 04-27-14 10:21:37 PM (last edited by Hugo_Peters at 04-28-14 09:26:56 AM) Link | Quote

Update!


Alright, got quite a lot of stuff going on!
cra0 from XeNTaX and I are working on the ultimate Beyond tool!

I'm doing most of the tool itself, the GUI, parser, structure, base features, decompressor, extractor, etc. while cra0 is reversing the model format! And another big thing for me: I've made the switch from GameMaker to C# in Visual Studio..... and damn. It's like heaven. I really want to thank cra0 for helping we with all my noob questions, I'm already getting the hang of it!

Here are some screenshots from the tool in its current form (which is: very unfinished / very early):


Left is where you select the main entries group. The entries are defined from the decrypted BigFile_PS3.sdat file. Then once you loaded the entries group, you get a nice display of all the entries in that group!


Before you can actually begin looking in the entries to see what data they contain you must first Inspect them. You can Inspect every individual entry manually by selecting it, then going to the Inspector tab and then clicking the Inspect button, but you can also Inspect all entries at once by clicking the Tools menu.
Once entries have been Inspected you can do things like searching the entries for types of content (Communicators). The filter can be set by selecting the "Filter" tab on the left... you can also choose between two filter modes: the entry must contain all Communicators in the filter, or the entry must contain one or more of the Communicators in the filter! When you click "Add Communicator" you get a nice popup with a combo box consisting of all known Communicators.


You can also filter the currently loaded entries on offset!


This is the Inspector tab. On the Inspector's Base tab, you can see an overview of all Communicators found within the entry. As you can see in this example, it contains both Communicators set in the filter!


This is a feature in a very early stage: an output of how the entry is constructed.


Here's a neat one: when you double click a Communicator in the Inspector's Base tab, you will be taken to the Hex Viewer, and the selected offset will be automatically set to the offset of that Communicator!

Also, don't forget the decompressor! I found out more about how these files are built, and most of them consist of more than one segs archive!

So yeah, let me know what you guys think! If you have any suggestions, please let me know!

____________________
I have a blog: clyck!
Hugo_Peters

Level: 26


Posts: 122/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 06-27-14 08:01:09 AM (last edited by Hugo_Peters at 06-27-14 08:02:07 AM) Link | Quote

Even though this forum is as dead as it can be, check this relatively big update:
(warning, spoilers) https://www.youtube.com/watch?v=4ikhbv4xkGk



____________________
I have a blog: clyck!
Hugo_Peters

Level: 26


Posts: 124/147
EXP: 99205
For next: 3070

Since: 10-29-13

From: The Netherlands

Since last post: 1.9 years
Last activity: 1.1 years

Posted on 09-23-14 10:45:14 PM Link | Quote
^ check the first post for swag

____________________
I have a blog: clyck!
Next newer thread | Next older thread
Jul - The Cutting Room Floor - Beyond Two Souls New poll - New thread - New reply


Rusted Logic

Acmlmboard - commit 47be4dc [2021-08-23]
©2000-2022 Acmlm, Xkeeper, Kaito Sinclaire, et al.

30 database queries, 4 query cache hits.
Query execution time:  0.091430 seconds
Script execution time:  0.037918 seconds
Total render time:  0.129348 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 2 column 178 - Warning: unescaped & or unknown entity "&page"
line 119 column 11 - Warning: <form> isn't allowed in <table> elements
line 118 column 10 - Info: <table> previously mentioned
line 120 column 11 - Warning: missing <tr>
line 120 column 119 - Warning: missing </font> before </td>
line 124 column 16 - Warning: plain text isn't allowed in <tr> elements
line 120 column 11 - Info: <tr> previously mentioned
line 125 column 68 - Warning: missing </nobr> before </td>
line 141 column 68 - Warning: missing </nobr> before <tr>
line 147 column 35 - Warning: missing <tr>
line 147 column 50 - Warning: missing </font> before </td>
line 148 column 37 - Warning: unescaped & or unknown entity "&id"
line 147 column 187 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 91 - Warning: missing </font> before </table>
line 156 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 158 column 9 - Warning: missing <tr>
line 176 column 13 - Warning: missing <tr>
line 177 column 102 - Warning: unescaped & or unknown entity "&postid"
line 186 column 429 - Warning: missing </a> before <h1>
line 186 column 497 - Warning: inserting implicit <a>
line 186 column 568 - Warning: discarding unexpected </a>
line 288 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 290 column 9 - Warning: missing <tr>
line 308 column 13 - Warning: missing <tr>
line 309 column 102 - Warning: unescaped & or unknown entity "&postid"
line 314 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 316 column 9 - Warning: missing <tr>
line 334 column 13 - Warning: missing <tr>
line 335 column 102 - Warning: unescaped & or unknown entity "&postid"
line 337 column 74 - Warning: <style> isn't allowed in <td> elements
line 337 column 9 - Info: <td> previously mentioned
line 342 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 344 column 9 - Warning: missing <tr>
line 362 column 13 - Warning: missing <tr>
line 363 column 102 - Warning: unescaped & or unknown entity "&postid"
line 372 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 374 column 9 - Warning: missing <tr>
line 392 column 13 - Warning: missing <tr>
line 393 column 102 - Warning: unescaped & or unknown entity "&postid"
line 405 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 407 column 9 - Warning: missing <tr>
line 425 column 13 - Warning: missing <tr>
line 426 column 102 - Warning: unescaped & or unknown entity "&postid"
line 438 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 440 column 9 - Warning: missing <tr>
line 458 column 13 - Warning: missing <tr>
line 459 column 102 - Warning: unescaped & or unknown entity "&postid"
line 473 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 475 column 9 - Warning: missing <tr>
line 493 column 13 - Warning: missing <tr>
line 494 column 102 - Warning: unescaped & or unknown entity "&postid"
line 502 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 504 column 9 - Warning: missing <tr>
line 522 column 13 - Warning: missing <tr>
line 523 column 102 - Warning: unescaped & or unknown entity "&postid"
line 533 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 535 column 9 - Warning: missing <tr>
line 553 column 13 - Warning: missing <tr>
line 554 column 102 - Warning: unescaped & or unknown entity "&postid"
line 567 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 569 column 9 - Warning: missing <tr>
line 587 column 13 - Warning: missing <tr>
line 588 column 102 - Warning: unescaped & or unknown entity "&postid"
line 609 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 611 column 9 - Warning: missing <tr>
line 629 column 13 - Warning: missing <tr>
line 630 column 102 - Warning: unescaped & or unknown entity "&postid"
line 985 column 13689 - Warning: missing </a> before <h1>
line 985 column 13775 - Warning: inserting implicit <a>
line 985 column 13826 - Warning: discarding unexpected </a>
line 991 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 993 column 9 - Warning: missing <tr>
line 1011 column 13 - Warning: missing <tr>
line 1012 column 102 - Warning: unescaped & or unknown entity "&postid"
line 1046 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1048 column 9 - Warning: missing <tr>
line 1066 column 13 - Warning: missing <tr>
line 1067 column 102 - Warning: unescaped & or unknown entity "&postid"
line 1073 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1075 column 9 - Warning: missing <tr>
line 1093 column 13 - Warning: missing <tr>
line 1094 column 102 - Warning: unescaped & or unknown entity "&postid"
line 1099 column 17 - Warning: missing <tr>
line 1099 column 17 - Warning: discarding unexpected <table>
line 1102 column 35 - Warning: missing <tr>
line 1102 column 50 - Warning: missing </font> before </td>
line 1102 column 91 - Warning: missing </font> before </table>
line 1104 column 35 - Warning: missing <tr>
line 1104 column 50 - Warning: missing </font> before </td>
line 1105 column 37 - Warning: unescaped & or unknown entity "&id"
line 1104 column 187 - Warning: missing </font> before </table>
line 1106 column 17 - Warning: discarding unexpected </textarea>
line 1106 column 28 - Warning: discarding unexpected </form>
line 1106 column 35 - Warning: discarding unexpected </embed>
line 1106 column 43 - Warning: discarding unexpected </noembed>
line 1106 column 53 - Warning: discarding unexpected </noscript>
line 1106 column 64 - Warning: discarding unexpected </noembed>
line 1106 column 74 - Warning: discarding unexpected </embed>
line 1106 column 82 - Warning: discarding unexpected </table>
line 1106 column 90 - Warning: discarding unexpected </table>
line 1108 column 9 - Warning: missing </font> before <table>
line 1120 column 25 - Warning: discarding unexpected </font>
line 1129 column 57 - Warning: discarding unexpected </font>
line 1107 column 1 - Warning: missing </center>
line 120 column 63 - Warning: <img> lacks "alt" attribute
line 125 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 125 column 93 - Warning: <img> lacks "alt" attribute
line 141 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 141 column 98 - Warning: <img> lacks "alt" attribute
line 148 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 161 column 22 - Warning: <img> lacks "alt" attribute
line 161 column 63 - Warning: <img> lacks "alt" attribute
line 161 column 112 - Warning: <img> lacks "alt" attribute
line 161 column 162 - Warning: <img> lacks "alt" attribute
line 162 column 11 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 293 column 22 - Warning: <img> lacks "alt" attribute
line 293 column 63 - Warning: <img> lacks "alt" attribute
line 293 column 112 - Warning: <img> lacks "alt" attribute
line 293 column 162 - Warning: <img> lacks "alt" attribute
line 304 column 15 - Warning: <img> lacks "alt" attribute
line 318 column 11 - Warning: <font> attribute "color" has invalid value "orange"
line 319 column 23 - Warning: <img> lacks "alt" attribute
line 319 column 64 - Warning: <img> lacks "alt" attribute
line 319 column 113 - Warning: <img> lacks "alt" attribute
line 319 column 162 - Warning: <img> lacks "alt" attribute
line 320 column 11 - Warning: <img> lacks "alt" attribute
line 330 column 15 - Warning: <img> lacks "alt" attribute
line 347 column 22 - Warning: <img> lacks "alt" attribute
line 347 column 63 - Warning: <img> lacks "alt" attribute
line 347 column 112 - Warning: <img> lacks "alt" attribute
line 347 column 162 - Warning: <img> lacks "alt" attribute
line 358 column 15 - Warning: <img> lacks "alt" attribute
line 369 column 666 - Warning: <img> proprietary attribute value "absmiddle"
line 369 column 666 - Warning: <img> lacks "alt" attribute
line 377 column 22 - Warning: <img> lacks "alt" attribute
line 377 column 63 - Warning: <img> lacks "alt" attribute
line 377 column 112 - Warning: <img> lacks "alt" attribute
line 377 column 162 - Warning: <img> lacks "alt" attribute
line 378 column 11 - Warning: <img> lacks "alt" attribute
line 388 column 15 - Warning: <img> lacks "alt" attribute
line 410 column 22 - Warning: <img> lacks "alt" attribute
line 410 column 63 - Warning: <img> lacks "alt" attribute
line 410 column 112 - Warning: <img> lacks "alt" attribute
line 410 column 162 - Warning: <img> lacks "alt" attribute
line 421 column 15 - Warning: <img> lacks "alt" attribute
line 443 column 22 - Warning: <img> lacks "alt" attribute
line 443 column 63 - Warning: <img> lacks "alt" attribute
line 443 column 112 - Warning: <img> lacks "alt" attribute
line 443 column 162 - Warning: <img> lacks "alt" attribute
line 444 column 11 - Warning: <img> lacks "alt" attribute
line 454 column 15 - Warning: <img> lacks "alt" attribute
line 478 column 22 - Warning: <img> lacks "alt" attribute
line 478 column 63 - Warning: <img> lacks "alt" attribute
line 478 column 112 - Warning: <img> lacks "alt" attribute
line 478 column 162 - Warning: <img> lacks "alt" attribute
line 489 column 15 - Warning: <img> lacks "alt" attribute
line 507 column 22 - Warning: <img> lacks "alt" attribute
line 507 column 63 - Warning: <img> lacks "alt" attribute
line 507 column 112 - Warning: <img> lacks "alt" attribute
line 507 column 162 - Warning: <img> lacks "alt" attribute
line 518 column 15 - Warning: <img> lacks "alt" attribute
line 538 column 22 - Warning: <img> lacks "alt" attribute
line 538 column 63 - Warning: <img> lacks "alt" attribute
line 538 column 112 - Warning: <img> lacks "alt" attribute
line 538 column 162 - Warning: <img> lacks "alt" attribute
line 549 column 15 - Warning: <img> lacks "alt" attribute
line 572 column 22 - Warning: <img> lacks "alt" attribute
line 572 column 63 - Warning: <img> lacks "alt" attribute
line 572 column 112 - Warning: <img> lacks "alt" attribute
line 572 column 162 - Warning: <img> lacks "alt" attribute
line 573 column 11 - Warning: <img> lacks "alt" attribute
line 583 column 15 - Warning: <img> lacks "alt" attribute
line 614 column 22 - Warning: <img> lacks "alt" attribute
line 614 column 63 - Warning: <img> lacks "alt" attribute
line 614 column 112 - Warning: <img> lacks "alt" attribute
line 614 column 162 - Warning: <img> lacks "alt" attribute
line 615 column 11 - Warning: <img> lacks "alt" attribute
line 625 column 15 - Warning: <img> lacks "alt" attribute
line 970 column 12981 - Warning: <img> lacks "alt" attribute
line 996 column 22 - Warning: <img> lacks "alt" attribute
line 996 column 63 - Warning: <img> lacks "alt" attribute
line 996 column 112 - Warning: <img> lacks "alt" attribute
line 996 column 162 - Warning: <img> lacks "alt" attribute
line 997 column 11 - Warning: <img> lacks "alt" attribute
line 1007 column 15 - Warning: <img> lacks "alt" attribute
line 1022 column 707 - Warning: <img> lacks "alt" attribute
line 1025 column 1017 - Warning: <img> lacks "alt" attribute
line 1029 column 1908 - Warning: <img> lacks "alt" attribute
line 1032 column 2066 - Warning: <img> lacks "alt" attribute
line 1035 column 2371 - Warning: <img> lacks "alt" attribute
line 1038 column 2553 - Warning: <img> lacks "alt" attribute
line 1051 column 22 - Warning: <img> lacks "alt" attribute
line 1051 column 63 - Warning: <img> lacks "alt" attribute
line 1051 column 112 - Warning: <img> lacks "alt" attribute
line 1051 column 162 - Warning: <img> lacks "alt" attribute
line 1052 column 11 - Warning: <img> lacks "alt" attribute
line 1062 column 15 - Warning: <img> lacks "alt" attribute
line 1078 column 22 - Warning: <img> lacks "alt" attribute
line 1078 column 63 - Warning: <img> lacks "alt" attribute
line 1078 column 112 - Warning: <img> lacks "alt" attribute
line 1078 column 162 - Warning: <img> lacks "alt" attribute
line 1079 column 11 - Warning: <img> lacks "alt" attribute
line 1089 column 15 - Warning: <img> lacks "alt" attribute
line 1105 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 1105 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 1105 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 1114 column 25 - Warning: <img> lacks "alt" attribute
line 1119 column 267 - Warning: <img> lacks "alt" attribute
line 149 column 50 - Warning: trimming empty <font>
line 1099 column 17 - Warning: trimming empty <tr>
line 1102 column 50 - Warning: trimming empty <font>
line 125 column 68 - Warning: <nobr> is not approved by W3C
line 141 column 68 - Warning: <nobr> is not approved by W3C
line 177 column 27 - Warning: <nobr> is not approved by W3C
line 309 column 27 - Warning: <nobr> is not approved by W3C
line 335 column 27 - Warning: <nobr> is not approved by W3C
line 363 column 27 - Warning: <nobr> is not approved by W3C
line 393 column 27 - Warning: <nobr> is not approved by W3C
line 426 column 27 - Warning: <nobr> is not approved by W3C
line 459 column 27 - Warning: <nobr> is not approved by W3C
line 494 column 27 - Warning: <nobr> is not approved by W3C
line 523 column 27 - Warning: <nobr> is not approved by W3C
line 554 column 27 - Warning: <nobr> is not approved by W3C
line 588 column 27 - Warning: <nobr> is not approved by W3C
line 630 column 27 - Warning: <nobr> is not approved by W3C
line 1012 column 27 - Warning: <nobr> is not approved by W3C
line 1067 column 27 - Warning: <nobr> is not approved by W3C
line 1094 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 231 warnings and 0 errors!


The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.

For further advice on how to make your pages accessible
see http://www.w3.org/WAI/GL.
You are recommended to use CSS to specify the font and
properties such as its size and color. This will reduce
the size of HTML files and make them easier to maintain
compared with using <FONT> elements.

You are recommended to use CSS to control line wrapping.
Use "white-space: nowrap" to inhibit wrapping in place
of inserting <NOBR>...</NOBR> into the markup.

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md