Author Topic: [PC] Final Fantasy XV  (Read 2483 times)

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
[PC] Final Fantasy XV
« on: 2018-02-09 15:32:35 »
The benchmark is available on:
http://benchmark.finalfantasyxv.com/na/

Game engine that parses FFXV files. Uses EARC for archives, tool is available here.
PDB available on torrent site, due to PDB availibility let's all work on r1138403 debug build

Make sure for your comfort to rebase software to 140000000 (default 64 bit entry point) and disable ASLR (0x1EE & 0xBF)

EARC is known

XMB2 (.exml):
Code: [Select]
char[4] IDENTIFIER = "XMB2"
uint FileSize [yes, 4 byte, not qword]
ushort flags
ushort version
uint RootElementOffset <- this points to element root
« Last Edit: 2018-07-25 12:12:01 by Maki »

LeonhartGR

  • No life
  • *
  • Posts: 2375
  • Karma: 31
  • ~Whatever...~ Finally married to my "Rinoa"!
    • View Profile
    • LeonhartGR Productions
Re: [PC] Final Fantasy XV
« Reply #1 on: 2018-02-09 18:50:00 »
That feels more exciting than playing the actual game! :D

obesebear

  • Administrator
  • No life
  • *
  • Posts: 3237
  • Karma: 112
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #2 on: 2018-02-09 19:09:08 »
Very entertaining read.  Keep up the good work!

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #3 on: 2018-02-09 19:18:25 »
FOUND THE FUCKER!
ucrtbase.dll:00007FFF8A01D800 ucrtbase__Exit -this is called asynchronous by one thread. Suspending thread toally makes the game playable with debugger attached.

UPDATE:
Unfortunately it doesn't print any cool debug stuff (maybe before level loading I saw something with [klang])

Okay, now I'm not quite sure how to enable input here xD I bet the input must be on some thread

DUMP TIME!

Luminous.RenderInterface.DefaultWindow
.rdata:00007FF6374128B0 0000000A C GLADIOLUS   

Hm, maybe this script:
SQEX.Ebony.Framework.Sequence.Event.SequenceEventKeyboardInput
EDIT_DISABLED_KEYBOARD_PAD   

Grab 73k lines of all engine scripts/paths/etc here:
https://www.dropbox.com/s/wytfrid4r3ju5nd/FFXV_dumped.txt?dl=0

UPDATE:
I saw "Luminous" only one time, it's always refered as "Black":
BlackConfig.xml

ucrtbase_exit is called by sub_7FF634CAC230 which is called by sub_7FF634CAC79


[klang][info]version 16.2.26.A

UPDATE:

Code: [Select]
.rdata:00007FF637646990 00000007 C ESCAPE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF6376469C8 00000008 C PRT_SCR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF6376469D0 00000007 C SCR_LK                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF6376469F0 0000000B C BACK_QUOTE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
.rdata:00007FF637646A00 00000005 C CAPS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646A08 00000008 C L_SHIFT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF637646A10 00000007 C L_CTRL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF637646A18 00000008 C WINDOWS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF637646A20 00000006 C L_ALT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646A28 00000006 C MINUS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646A30 00000006 C EQUAL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646A38 0000000B C BACK_SPACE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
.rdata:00007FF637646A48 0000000D C OPEN_BRACKET                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
.rdata:00007FF637646A58 0000000E C CLOSE_BRACKET                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
.rdata:00007FF637646A68 0000000B C BACK_SLASH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
.rdata:00007FF637646A78 0000000B C SEMI_COLON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
.rdata:00007FF637646A88 0000000B C APOSTROPHE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
.rdata:00007FF637646A94 00000006 C ENTER                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646A9C 00000006 C COMMA                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646AA4 00000007 C PERIOD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF637646AAC 00000006 C SLASH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646AB8 00000008 C R_SHIFT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
.rdata:00007FF637646AC0 00000006 C SPACE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646AC8 00000006 C R_ALT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646AD0 00000005 C FUNC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.rdata:00007FF637646AD8 00000005 C MENU                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
« Last Edit: 2018-02-09 20:09:48 by Maki »

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #4 on: 2018-02-09 21:46:29 »
Uhm


Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #5 on: 2018-02-10 11:50:27 »
ffxv.exe parameters as said in launcher (which is written in C# and is not obfuscated):

Code: [Select]
string text = "ffxv.exe";
string text2 = string.Empty;
if (this.QualityComboIndex2 == MainWindow.QualityComboIndexes.LowQuality)
{
text2 += "--graphicsIni config\\GraphicsConfig_BenchmarkLow.ini";
}
else if (this.QualityComboIndex2 == MainWindow.QualityComboIndexes.MiddleQuality)
{
text2 += "--graphicsIni config\\GraphicsConfig_BenchmarkMiddle.ini";
}
else if (this.QualityComboIndex2 == MainWindow.QualityComboIndexes.HighQuality)
{
text2 += "--graphicsIni config\\GraphicsConfig_BenchmarkHigh.ini";
}
if (this.WindowModeComboIndex2 == MainWindow.WindowModeComboIndexes.FullScreen)
{
text2 += " -f";
}
if (this.ResolutionComboIndex2 == MainWindow.ResolutionComboIndexes.Resolution_1280x720)
{
text2 += " --displayResolution 1280 720 --renderingResolution 1280 720";
}
else if (this.ResolutionComboIndex2 == MainWindow.ResolutionComboIndexes.Resolution_1920x1080)
{
text2 += " --displayResolution 1920 1080 --renderingResolution 1920 1080";
}
else if (this.ResolutionComboIndex2 == MainWindow.ResolutionComboIndexes.Resolution_3840x2160)
{
text2 += " --displayResolution 3840 2160 --renderingResolution 3840 2160";
}
if (this.IsAutoLoop)
{
text2 += " --loop_mode";
}
text2 = text2 + " --locale=" + this.LanguageLabels[this.LanguageComboIndex].LocaleText;
ProcessStartInfo startInfo = new ProcessStartInfo
{
UseShellExecute = false,
FileName = text,
Arguments = text2
};
try
{
this.gameProcess = Process.Start(startInfo);
}

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #6 on: 2018-02-10 15:59:32 »
All possible parameters:
Code: [Select]
.rdata:00007FF637501D40 0000000A C --locale=
.rdata:00007FF637501D50 0000000A C --ui_lang
.rdata:00007FF637501D60 0000000D C --numThreads
.rdata:00007FF637501D70 00000012 C --numAsyncThreads
.rdata:00007FF637501D88 0000000C C --loop_mode
.rdata:00007FF637501D98 0000000E C --graphicsIni
.rdata:00007FF637501DA8 00000007 C --720p
.rdata:00007FF637501DB0 00000008 C --2160p
.rdata:00007FF637501DB8 00000014 C --displayResolution
.rdata:00007FF637501DD0 00000016 C --renderingResolution
.rdata:00007FF637501DE8 00000014 C --noNvidiaAfterMath

for config see this:
Code: [Select]
.rdata:00007FF637501E40 000002A5 C +wEAAJ8CAAD/W0Jhc2ljU2X/dHRpbmdzXQr/RGlzcGxheVL/ZXNvbHV0aW//bldIPTEyODD/eDcyMApNYXj/RnJhbWVyYXT/ZT0yNDAKUmWPbmRlcvjwBQ8XAUf/cmFwaGljc1D/cmVzZXQ9MAr/U2hvd0Nvbma7aWdZBEZQU1kACnlb/vT0/lNjYWz48O9Nb2RlWQBGUDH/NkJhY2tCdWb/ZmVyPTEKRnX/bGxTY3JlZW7+lAFPblN0YXJ0+3VwWQBIYXJkd+dhcmWsC8MBRFJH72FtbWGNAWU9MfsuM94BTHVtaW5vYW5jZecEMDDEAHdpZ2hTAGNpcwwA3iwDVGFyZ1cCVlP3eW5jcAJOVklE+0lB4gBlV29ya/1z9PdOdmlkaWHPRmxvd1kARxNIYfNpcjgSURZTaGFk3293TGliYhdUZf9ycmFpblRlc89zZWxhCwF2F3VyPWZRFlZYQU9wAiwGXvT3QW50aY8AYWIR/0FtYmllbnRPj2NjbHUREcMBCRBTT3BlY0GIEFgBTAkQNvfxUXWPAHR5WQCUAe9sTE9EjQQ9NzX9CrADRmlsdGVyP0RldGFpbKkAbBPC/vB0+QUQJW0SNQc9Nf8wClRleHR1cv9lQW5pc290co9vcGljHSNZAFkkU+90cmVh9gBnTWUXbW9yACAA
Looks familar? Yeah, that's base64...

Code: [Select]
����[BasicSettings]
DisplayResolutionWH=1280x720
MaxFramerate=240
RenderGraphicsPreset=0
ShowConfigYFPSY�
y[ScalModeY�FP16BackBuffer=1
FullScreenOnStartupY�Hardware DRGammae=1.3Luminoance00�wighS�cis �,TargWVSyncpNVIDIA�eWorksNvidiaFlowY�GHair8QShadowLibbTerrainTessela vur=fQVXAOp,^Anti�abAmbientOcclu SOpecAXL 6Qu�tyY�lLOD=75
Filter?Detail�lt%m5=50
TextureAnisotropic#Y�Y$Strea�gMemor� �

KeyConfig.ini in root directory actually has it all, not quite sure why it doesn't seem to work for input.
Game reads the file as said in Process IO:
Code: [Select]
18:12:40,8167929 ffxv.exe 6832 QueryDirectory E:\FINAL FANTASY XV BENCHMARK\KeyConfig.ini SUCCESS Filter: KeyConfig.ini, 1: KeyConfig.ini
18:12:40,8169401 ffxv.exe 6832 CreateFile E:\FINAL FANTASY XV BENCHMARK\KeyConfig.ini SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: R, ShareMode: Read, Write, AllocationSize: n/a, OpenResult: Opened

« Last Edit: 2018-02-10 16:20:23 by Maki »

LeonhartGR

  • No life
  • *
  • Posts: 2375
  • Karma: 31
  • ~Whatever...~ Finally married to my "Rinoa"!
    • View Profile
    • LeonhartGR Productions
Re: [PC] Final Fantasy XV
« Reply #7 on: 2018-02-10 16:48:41 »
Hahaha! This hacking image is gonna stay in history!

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #8 on: 2018-02-10 18:00:26 »
I'm out of ideas... I just can't happen to enable input, and alcochol doesn't seem to help me...

DLPB

  • No life
  • *
  • Posts: 9241
  • Karma: 298
  • For I realized that God's a young man, too.
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #9 on: 2018-02-12 04:02:27 »
Alcohol never helps programming... not after first hour anyway :P

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #10 on: 2018-02-18 10:25:20 »
Quest unpacked, names:

Code: [Select]
entities_.benchmark_demo.nodes_.[1]
entities_.benchmark_demo.nodes_.[3]
entities_.benchmark_demo.nodes_.[4]
entities_.benchmark_demo.nodes_.[5]
entities_.benchmark_demo.nodes_.[6]
entities_.benchmark_demo.nodes_.[7]
entities_.benchmark_demo.nodes_.[9]
entities_.benchmark_demo.nodes_.[11]
entities_.benchmark_demo.nodes_.[12]
entities_.benchmark_demo.nodes_.[13]
entities_.benchmark_demo.nodes_.[16]
entities_.benchmark_demo.nodes_.[18]
entities_.benchmark_demo.nodes_.[19]
entities_.benchmark_demo.nodes_.[20]
entities_.benchmark_demo.nodes_.[21]
entities_.benchmark_demo.nodes_.[22]
entities_.benchmark_demo.nodes_.[23]
entities_.benchmark_demo.nodes_.[24]
entities_.benchmark_demo.nodes_.[25]
entities_.benchmark_demo.nodes_.[26]
entities_.benchmark_demo.nodes_.[28]
entities_.benchmark_demo.nodes_.[29]
entities_.benchmark_demo.nodes_.[30]
entities_.benchmark_demo.nodes_.[32]
entities_.benchmark_demo.nodes_.[34]
entities_.benchmark_demo.nodes_.[35]
entities_.benchmark_demo.nodes_.[37]
entities_.benchmark_demo.nodes_.[39]
entities_.benchmark_demo.nodes_.[41]
entities_.benchmark_demo.nodes_.[42]
entities_.benchmark_demo.nodes_.[43]
entities_.benchmark_demo.nodes_.[44]
entities_.benchmark_demo.nodes_.[45]
entities_.benchmark_demo.nodes_.[47]
entities_.benchmark_demo.nodes_.[48]
entities_.benchmark_demo.nodes_.[49]
entities_.benchmark_demo.nodes_.[51]
entities_.benchmark_demo.nodes_.[52]
entities_.benchmark_demo.nodes_.[53]
entities_.benchmark_demo.nodes_.[54]
entities_.benchmark_demo.nodes_.[56]
entities_.benchmark_demo.nodes_.[59]
entities_.benchmark_demo.nodes_.[60]
entities_.benchmark_demo.nodes_.[61]
entities_.benchmark_demo.nodes_.[62]
entities_.benchmark_demo.nodes_.[63]
entities_.benchmark_demo.nodes_.[66]
entities_.benchmark_demo.nodes_.[67]
entities_.benchmark_demo.nodes_.[70]
entities_.benchmark_demo.nodes_.[71]
entities_.benchmark_demo.nodes_.[72]
entities_.benchmark_demo.nodes_.[74]
entities_.benchmark_demo.nodes_.[75]
entities_.benchmark_demo.nodes_.[76]
entities_.benchmark_demo.nodes_.[77]
entities_.benchmark_demo.nodes_.[78]
entities_.benchmark_demo.nodes_.[79]
entities_.benchmark_demo.nodes_.[84]
entities_.benchmark_demo.nodes_.[86]
entities_.benchmark_demo.nodes_.[96]
entities_.benchmark_demo.nodes_.[100]
entities_.benchmark_demo.nodes_.[101]
entities_.benchmark_demo.nodes_.[102]
entities_.benchmark_demo.nodes_.[103]
entities_.benchmark_demo.nodes_.[104]
entities_.benchmark_demo.nodes_.[105]
entities_.benchmark_demo.nodes_.[108]
entities_.benchmark_demo.nodes_.[110]
entities_.benchmark_demo.nodes_.[111]
entities_.benchmark_demo.nodes_.[112]
entities_.benchmark_demo.nodes_.[113]
entities_.benchmark_demo.nodes_.[114]
entities_.benchmark_demo.nodes_.[115]
entities_.benchmark_demo.nodes_.[116]
entities_.benchmark_demo.nodes_.[117]
entities_.benchmark_demo.nodes_.[118]
entities_.benchmark_demo.nodes_.[119]
entities_.benchmark_demo.nodes_.[120]
entities_.benchmark_demo.nodes_.[121]
entities_.benchmark_demo.nodes_.[122]
entities_.benchmark_demo.nodes_.[123]
entities_.benchmark_demo.nodes_.[124]
entities_.benchmark_demo.nodes_.[125]
entities_.benchmark_demo.nodes_.[127]
entities_.benchmark_demo.nodes_.[128]
entities_.benchmark_demo.nodes_.[129]
entities_.benchmark_demo.nodes_.[130]
entities_.benchmark_demo.nodes_.[131]
entities_.benchmark_demo.nodes_.[133]
entities_.benchmark_demo.nodes_.[134]
entities_.benchmark_demo.nodes_.[135]
entities_.benchmark_demo.nodes_.[136]
entities_.benchmark_demo.nodes_.[137]
entities_.benchmark_demo.nodes_.[138]
entities_.benchmark_demo.nodes_.[139]
entities_.benchmark_demo.nodes_.[140]
entities_.benchmark_demo.nodes_.[141]
entities_.benchmark_demo.nodes_.[144]
entities_.benchmark_demo.nodes_.[145]
entities_.benchmark_demo.nodes_.[146]
entities_.benchmark_demo.nodes_.[147]
entities_.benchmark_demo.nodes_.[152]
entities_.benchmark_demo.nodes_.[153]
entities_.benchmark_demo.nodes_.[155]
entities_.benchmark_demo.nodes_.[156]
entities_.benchmark_demo.nodes_.[157]
entities_.benchmark_demo.nodes_.[159]
entities_.benchmark_demo.nodes_.[160]
entities_.benchmark_demo.nodes_.[162]
entities_.benchmark_demo.nodes_.[164]
entities_.benchmark_demo.nodes_.[165]
entities_.benchmark_demo.nodes_.[166]
entities_.benchmark_demo.nodes_.[167]
entities_.benchmark_demo.nodes_.[171]
entities_.benchmark_demo.nodes_.[173]
entities_.benchmark_demo.nodes_.[174]
entities_.benchmark_demo.nodes_.[175]
entities_.benchmark_demo.nodes_.[177]
entities_.benchmark_demo.nodes_.[179]
entities_.benchmark_demo.nodes_.[180]
entities_.benchmark_demo.nodes_.[181]
entities_.benchmark_demo.nodes_.[182]
entities_.benchmark_demo.nodes_.[183]
entities_.benchmark_demo.nodes_.[184]
entities_.benchmark_demo.nodes_.[185]
entities_.benchmark_demo.nodes_.[186]
entities_.benchmark_demo.nodes_.[187]
entities_.benchmark_demo.nodes_.[188]
entities_.benchmark_demo.nodes_.[189]
entities_.benchmark_demo.nodes_.[191]
entities_.benchmark_demo.nodes_.[195]
entities_.benchmark_demo.nodes_.[196]
entities_.benchmark_demo.nodes_.[197]
entities_.benchmark_demo.nodes_.[198]
entities_.benchmark_demo.nodes_.[200]
entities_.benchmark_demo.nodes_.[205]
entities_.benchmark_demo.nodes_.[206]
entities_.benchmark_demo.nodes_.[210]
entities_.benchmark_demo.nodes_.[211]
entities_.benchmark_demo.nodes_.[212]
entities_.benchmark_demo.nodes_.[213]
entities_.benchmark_demo.nodes_.[214]
entities_.benchmark_demo.nodes_.[215]
entities_.benchmark_demo.nodes_.[216]
entities_.benchmark_demo.nodes_.[219]
entities_.benchmark_demo.nodes_.[222]
entities_.benchmark_demo.nodes_.[224]
entities_.benchmark_demo.nodes_.[226]
entities_.benchmark_demo.nodes_.[227]
entities_.benchmark_demo.nodes_.[229]
entities_.benchmark_demo.nodes_.[231]
entities_.benchmark_demo.nodes_.[232]
entities_.benchmark_demo.nodes_.[233]
entities_.benchmark_demo.nodes_.[234]
entities_.benchmark_demo.nodes_.[235]
entities_.benchmark_demo.nodes_.[236]
entities_.benchmark_demo.nodes_.[237]
entities_.benchmark_demo.nodes_.[238]
entities_.benchmark_demo.nodes_.[239]
entities_.benchmark_demo.nodes_.[245]
entities_.benchmark_demo.nodes_.[248]
entities_.benchmark_demo.nodes_.[249]
entities_.benchmark_demo.nodes_.[250]
entities_.benchmark_demo.nodes_.[251]
entities_.benchmark_demo.nodes_.[252]
entities_.benchmark_demo.nodes_.[253]
entities_.benchmark_demo.nodes_.[254]
entities_.benchmark_demo.nodes_.[255]
entities_.benchmark_demo.nodes_.[256]
entities_.benchmark_demo.nodes_.[257]
entities_.benchmark_demo.nodes_.[258]
entities_.benchmark_demo.nodes_.[259]
entities_.benchmark_demo.nodes_.[260]
entities_.benchmark_demo.nodes_.[261]
entities_.benchmark_demo.nodes_.[262]
entities_.benchmark_demo.nodes_.[263]
entities_.benchmark_demo.nodes_.[264]
entities_.benchmark_demo.nodes_.[265]
entities_.benchmark_demo.nodes_.[266]
entities_.benchmark_demo.nodes_.[267]
entities_.benchmark_demo.nodes_.[269]
entities_.benchmark_demo.nodes_.[270]
entities_.benchmark_demo.nodes_.[272]
entities_.benchmark_demo.nodes_.[275]
entities_.benchmark_demo.nodes_.[276]
entities_.benchmark_demo.nodes_.[277]
entities_.benchmark_demo.nodes_.[278]
entities_.benchmark_demo.nodes_.[279]
entities_.benchmark_demo.nodes_.[280]
entities_.benchmark_demo.nodes_.[281]
entities_.benchmark_demo.nodes_.[282]
entities_.benchmark_demo.nodes_.[283]
entities_.benchmark_demo.nodes_.[284]
entities_.benchmark_demo.nodes_.[285]
entities_.benchmark_demo.nodes_.[286]
entities_.benchmark_demo.nodes_.[287]
entities_.benchmark_demo.nodes_.[288]
entities_.benchmark_demo.nodes_.[289]
entities_.benchmark_demo.nodes_.[290]
entities_.benchmark_demo.nodes_.[291]
entities_.benchmark_demo.nodes_.[292]
entities_.benchmark_demo.nodes_.[293]
entities_.benchmark_demo.nodes_.[294]
entities_.benchmark_demo.nodes_.[295]
entities_.benchmark_demo.nodes_.[296]
entities_.benchmark_demo.nodes_.[297]
entities_.benchmark_demo.nodes_.[298]
entities_.benchmark_demo.nodes_.[299]
entities_.benchmark_demo.nodes_.[300]
entities_.benchmark_demo.nodes_.[301]
entities_.benchmark_demo.nodes_.[302]
entities_.benchmark_demo.nodes_.[303]
entities_.benchmark_demo.nodes_.[304]
entities_.benchmark_demo.nodes_.[305]
entities_.benchmark_demo.nodes_.[306]
entities_.benchmark_demo.nodes_.[308]
entities_.benchmark_demo.nodes_.[309]
entities_.benchmark_demo.nodes_.[310]
entities_.benchmark_demo.nodes_.[311]
entities_.benchmark_demo.nodes_.[314]
entities_.benchmark_demo.nodes_.[315]
entities_.benchmark_demo.nodes_.[318]
entities_.benchmark_demo.nodes_.[319]
entities_.benchmark_demo.nodes_.[321]
entities_.benchmark_demo.nodes_.[323]
entities_.benchmark_demo.nodes_.[324]
entities_.benchmark_demo.nodes_.[325]
entities_.benchmark_demo.nodes_.[326]
entities_.benchmark_demo.nodes_.[327]
entities_.benchmark_demo.nodes_.[328]
entities_.benchmark_demo.nodes_.[329]
entities_.benchmark_demo.nodes_.[330]
entities_.benchmark_demo.nodes_.[331]
entities_.benchmark_demo.nodes_.[332]
entities_.benchmark_demo.nodes_.[333]
entities_.benchmark_demo.nodes_.[334]
entities_.benchmark_demo.nodes_.[335]
entities_.benchmark_demo.nodes_.[336]
entities_.benchmark_demo.nodes_.[337]
entities_.benchmark_demo.nodes_.[338]
entities_.benchmark_demo.nodes_.[339]
entities_.benchmark_demo.nodes_.[340]
entities_.benchmark_demo.nodes_.[341]
nodes_
lastCenterX_
lastCenterY_
bIsPrefabTopSequence_
entities_.benchmark_demo.connectors_.[0]
entities_.benchmark_demo.connectors_.[1]
entities_.benchmark_demo.connectors_.[2]
entities_.benchmark_demo.connectors_.[3]
entities_.benchmark_demo.connectors_.[4]
entities_.benchmark_demo.connectors_.[5]
entities_.benchmark_demo.connectors_.[6]
entities_.benchmark_demo.connectors_.[7]
entities_.benchmark_demo.connectors_.[8]
entities_.benchmark_demo.connectors_.[9]
entities_.benchmark_demo.connectors_.[10]
entities_.benchmark_demo.connectors_.[11]
entities_.benchmark_demo.connectors_.[12]
connectors_
benchmark_demo
SQEX.Ebony.Framework.Sequence.SequenceContainer
isBrowsable_
inValue_
inVehicleActor_
connections_
actor_
kind_
ACTOR_VEHICLE
[1]
Black.Sequence.Actor.SequenceVariableActorObject
pinName_
Arg0
pinValueType_
arg0_
SQEX.Ebony.Framework.Node.GraphVariableInputPin
refInPorts_
out_
in_
in1_
eventId_
WM_G_COMM_VE_RIDE
pDependencyPin_
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.benchmark_demo.nodes_.[3].refInPorts_.arg0_
refInPorts_.arg0_
pointer
table_
param
prefix_
VEHICLE_RIDE_PATTERN_
value_
DEFAULT_NOCT_DRIVER
SQEX.Ebony.Framework.Sequence.Variable.Primitive.SequencePrimitiveFixid
arguments_
printLog_
notifyRange_
LOCAL_MACHINE_REMOTE_EVENT
[3]
Black.Sequence.Event.Trigger.SequenceRemoteEventRequest
Isolated_
floatPin_
floatKeepTimePin_
floatKeepSpeedPin_
boolPin_
integerPin_
stopped_
target_
AUTO_DRIVE_DEFINED_ROUTE
floatValue_
floatKeepTimeValue_
floatKeepSpeedValue_
destId_
DU_PARKING_12
isStop_
standingTime_
isKeepDirection_
destList_0
Black.Sequence.Actor.AI.Vehicle.VehicleNavigationDestIdItem
destList_
isLoopValue_
loopNumValue_
int
isStopEngineAtEnd_
boolValue_
getOffType_
VRG_AUTO
isNeedChangeVehicleCamera_
[4]
Black.Sequence.Actor.AI.Vehicle.SequenceActionAIVehicleSetAssist
true_
layCheckNG_
rayCheckSuccess_
positionOffset_
rotationOffset_
entityGroupFlag_
pointNodeActorVarOutPin_
targetActorPin_
isTeleportCamera_
affectRotTypeForTargetActorPin_
ROT_Y
isUseRayCheck_
isForceCreateActor_EvenRayCheckNG_
upperRayOffset
lowerRayOffset
bRayCastShiftBlockCollision_
isRaycastBGOnly_
waitCollisionAfterSetTrans_
isAffectRotYTargetActorPin_
isWorldRotationOffset_
isMoveToTargetActorScene_
rotatePositionOffsetWithTargetActorRotation
[5]
Black.Sequence.Action.Actor.SequenceActionActorSetTransform
in2_
wakeUpPin_
VE_COMM_REGALIA_RIDE_ON
[6]
Black.Sequence.Event.Trigger.SequenceRemoteEventTrigger
reset_
[7]
SQEX.Ebony.Framework.Sequence.Action.SequenceActionSync2
VE_COMM_EVENT_WRECKER
[9]
VE_COMM_EVENT_WRECKER_END_JET_BENCH
[11]
[12]
false_
finished_
createdVehicle_
isSetTranslate_
isOverwriteLoadData_
spawnPointPin_
upperExtentOffset_
lowerExtentOffset_
isSetVehicleType_
vehicleType_
CAR_REGALIA
isDisposePreviewVehicle_
isSetKinematic_
isUpdateSaveData_
[13]
Black.Sequence.Actor.AI.Vehicle.SequenceActionCreatePlayerVehicle
entityPointer_
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.vehicle_road
entities_.spawn.entities_.vehicle_road
[16]
Black.Sequence.Variable.SequenceConstSpawnPointEntity
operatorType_
BOC_OPERATOR_NOT_NULL
operatorTypeLast_
A
dynamicVarInputPin2_
condition_
resultPin_
[18]
Black.Sequence.Operator.Compare.SequenceOperatorCompareObject
[19]
[20]
Black.Sequence.Control.SequenceActionControlIf
[21]
ACTOR_NOCTIS
[22]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.noctis
entities_.spawn.entities_.noctis
[23]
label_
WS_IS_STOP_ECOLOGY
valuePin_
labelPin_
isFixid_
[24]
Black.Sequence.Control.GameFlag.SequenceActionControlSetGameFlagFixId
bUseFrame_
[25]
Black.Sequence.Actor.AI.SequenceActionAINone
inCharEntryPath_
overwriteParameterIDPin_
spawnSets_
spawnSet_
actorType_
ENEMY
autoLoadCharaEntry_
charaEntry_
character/em/em04/entry/em04_020_armor_d_kargo.ebex
overwriteParameterID_
NONE
defaultAIControllerType_
CONTROLLER_TYPE_SEQUENCE_VS0
overwriteInteractionParamId_
teritoryFixId_
isOverwriteDefaultControllerType_
overrideAIParamId_
maxSpawnNum_
minSpawnNum_
maxAliveNum_
minAliveNum_
[26]
Black.Sequence.Actor.SceneControl.SequenceActionSCPersonalSetting
isSameActorRayCheckNG_
isHoldLODLevel_
deleteActorsAtDestroy_
setInactiveAtSpawn_
setFadeAtSpawn_
failAtNoResource_
deleteWhenEnterTray_
useSystemTime_
abortInputPin_
recoverInputPin_
recoverStopPin_
failed_
eachSpawned_
allSpawned_
recoverSuccess_
spawnedList_
lastSpawnedList_
actor2Pin_
lastSpawned_
lastRecovered_
spawnPointType_
BSSPT_SpecifiedPointOnly
spawnRadius_
isUseEachBlackPathNodeRadius_
retryCountWhenRadius_
retryLimitRayCheckNGCount_
teamName_
NOTEAM
teamType_
NOTYPE
teamNameId_
NO_TEAM
teamTypeId_
NO_TYPE
teamParamID_
INVALID_ID
tacticsID_
TACTICS_NONE
roleSetType_
ROLE_SET_TYPE_VS0
bAutoTeamMerge_
spawnWeightType1_
BSSWT_NoWeight
spawnWeightType2_
spawnWeightType3_
spawnPointWeightThreshhold_
spawnPointSamePointWeightImpact_
afterSpawnWaitTime_
isDeathActorRecover_
m_SceneNoWhenActivated
m_bIsScriptActivated
m_SelectRotationType
BlkSCSRT_SpecificVector
autoRandomYawMin_
autoRandomYawMax_
TimeBetweenPawnSpawns
MinTimeBetweenPawnSpawns
isIKRayCheck_
[28]
Black.Sequence.Action.Actor.SceneControl.SequenceActionSCActorCreate
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.enemy
entities_.spawn.entities_.enemy
[29]
[30]
battleAreaPin_
moveTobattleAreaPin_
moveToSpawnedList_
isPlayerBattleAreaIn_
battleAreaOutActorListPin_
movedToBattleAreaOutPin_
isTeritoryOutTimerDeath_
[32]
Black.Sequence.Action.Level.SequenceActionSetBattleArea
extinctionOut_
stop_
battle_
updateStatusFlag_
changeActivate_
[34]
Black.Sequence.Action.Level.SequenceActionGetBattleAreaStatus
prefixType_
TERITORY_FIXID_PREFIX_TERITORY_LAYOUT
JET_BENCH_ENEMY
teritoryFixId_sub_
[35]
Black.Sequence.Action.Level.SequenceActionBattleAreaNotification
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.battleareaentity01
[37]
Black.Sequence.Variable.SequenceConstPointEntityBase
autoBattle_
[39]
Black.Sequence.Action.Debug.SequenceActionDebugSetAutoBattleMode
actors_
invincible_
damage9999_
saveDataState_
SAVE_DATA_STATE_AS_IS
[41]
Black.Sequence.SequenceActionSetPlayerInvincible
gage_
encountGage_
second_
resultReset_
_tool_nodeStyle_
[42]
Black.Sequence.Action.Level.BattleArea.SequenceActionSetForceEncountGage
summonId_
SAVE_SUMMON_SHIVA
addAmount_
drawMenu_
randomPlayer_
menu_finish_
success_
fail_
[43]
Black.Sequence.Action.Actor.Accessory.SequenceActionActorGetSummon
cancel_
stopPin_
disable_
timePin_
delayType_
DT_TIME
leftValueOut_
time_
isRandom_
randomMin_
randomMax_
forceAtPause_
forceFrameCount_
[44]
SQEX.Ebony.Framework.Sequence.Action.SequenceActionWaitTime
UCon_
summonDirection_
SAVE_SUMMON_DIRECTION_FULL_SPEC
startSummonStage_
SUMMON_STAGE_PRESAGE
isCheckPlayerDead_
[45]
Black.Sequence.Action.Level.Summon.SequenceActionStartSummonForce
lastSceneKeepPin_
actorPin_
vector1Pin_
float1Pin_
int1Pin_
commandSetPin_
functionIdPin_
functionId_
GAME_LEVEL_ATTENTION_MODE_NONPRAIABLE
lastSceneKeep_
[47]
Black.Sequence.Control.SequenceActionCameraCallSequenceFixId
[48]
inPin_
fadeTime_
interpMode_
IM_SPLINE
[49]
Black.Sequence.Action.Actor.SequenceActionActorDelete
openMenu_
suspendMenu_
SETUP_RUN_END_JET_BENCH
[51]
[52]
outIn_
succeeded_
bEndByDamage_
bEndByEncountGauge_
bCancelByBattle_
bReturnNormalModeWhenFinish_
bForceExec_
bWaitAction_
bEnableNormalPosture_
bHideForReset_
bHideReturnNormal_
bHideEndDanage_
bHideNormalPosture_
movement_
JOG
speedRate_
timeout_
bCorrectionOfcoordinates_
arrivalDistance_
[53]
Black.Sequence.Action.Actor.AI.AIMode.SequenceActionExecAIModeGoTo
[54]
[56]
isRelease_
finish_
completed_
packagePathPin_
packagePath_
level/world/worldshare/plan/stay/camp/camp_event_group_jet_bench.ebex
valueUniqueId_
valueLoadPosition_
positionTargetActor_
isRelese_
isLoadSubPackage_
forAreaLoading_
isToLocateSequencePackagePosition_
checkReleasedAtInitialLoadMode_
isEnableSamePackageLoading_
uniqueId_
loadPosition_
priorityType_
PRIORITY_TYPE_DEFAULT
[59]
Black.Sequence.Action.Level.SequenceActionSetLevelPackageLoad
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.point_du_share_camp21
[60]
color_
Color
fadeSound_
NONE_SOUND_FADE
[61]
Black.Sequence.ScreenEffect.SequenceActionColorFadeOut
enable_
up_
right_
down_
a_
b_
x_
y_
triangle_
circle_
cross_
square_
select_
start_
l1_
r1_
l2_
r2_
l3_
r3_
lt_
rt_
lx_
ly_
rx_
ry_
[62]
Black.Sequence.Pad.SequenceActionPadSimulation
push_
bIsNeedShiftPress_
bIsNeedCtrlPress_
bIsNeedAltPress_
inputKey_
NumPad9
[63]
SQEX.Ebony.Framework.Sequence.Event.SequenceEventKeyboardInput
[66]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.noctis_camp_point
entities_.spawn.entities_.noctis_camp_point
[67]
[70]
isEnabled_
[71]
SQEX.Ebony.Framework.Sequence.Event.SequenceEventFrameUpdated
[72]
GETOFF_VEHICLE
VRG_NORMAL
[74]
addGil_
get_gil_
[75]
Black.Sequence.Action.Actor.Accessory.SequenceActionActorGetGil
[76]
WALK
[77]
actor1_
[78]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.chocobo
entities_.spawn.entities_.chocobo
[79]
two_
itemId_
SQ_ITEM_CHOCOBO_WHISTLE
checkDouble_
add_amount_
add_item_
add_item_fixid_
[84]
Black.Sequence.Action.Actor.Accessory.SequenceActionActorGetItem
MAIN_QT_CHAP_CHOCOBO
[86]
WM_G_CHOC_CALLING
[96]
rentalDays_
[100]
Black.Sequence.Action.Chocobo.SequenceActionChocoboRental
[101]
SQEX.Ebony.Framework.Sequence.Variable.SequenceConstInt
timeoutValue_
[102]
Black.Sequence.Action.Actor.SequenceActionActorWaitLoading
actor2_
ACTOR_CHOCOBO
[103]
open_
[104]
left_
[105]
[108]
float_
A2A_DISTANCE
joint1_
joint2_
[110]
Black.Sequence.Actor.SequenceVariableCalcActor2Actor
argumentNum_
ŠŁíń╗Âň╝Ć1  <=,5
activateAndClose_
dynamicTriggerOutputPin8_
ŠŁíń╗Âň╝Ć2
dynamicTriggerOutputPin7_
expression1
<=,5
expression3
>,150,<=,300
expression4
>,300
[111]
Black.Sequence.Control.SequenceActionControlIfCompare
close_
toggle_
closing_
closed_
[112]
SQEX.Ebony.Framework.Sequence.Action.SequenceActionGate
interval_
[113]
SQEX.Ebony.Framework.Sequence.Event.SequenceEventCyclicUpdated
[114]
IS_RIDE
intPin_
chocoboPin_
[115]
Black.Sequence.Actor.AI.Vehicle.SequenceActionAIChocoboGetStatus
[116]
routeId_
__PLACE_HOLDER__CHOCOBO_BENCH
activateMode_
ACTIVATE_MODE_NORMAL
SLOW
[117]
Black.Sequence.Action.Actor.AI.AIMode.SequenceActionExecAIModeRoute
[118]
[119]
[120]
bool_
action_target_
INTERACTION_REACTION
mask_
[121]
Black.Sequence.Actor.SequenceActionInteractionMask
ACTOR_PC
[122]
[123]
[124]
[125]
enablePin_
touch_
disablePin_
entityLableId_
statusExScope_
ScopeOutTriggerStatus_None
[127]
Black.Sequence.Action.Quest.SequenceActionQuestSetTriggerEntity
triggerPointPin_
remoteEvent_
unTouch_
attackIn_
attackOut_
causedActorList_
causedActor_
triggerActor_
waitEntity_
eventType_
ET_ENTITY
eventTypeLast_
canCatchSameTimeEvents_
canCatchSameTimeEventsPerfectly_
[128]
Black.Sequence.Event.SequenceEventTriggerMultiStatus2
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.trigger_chocobo_camera
[129]
[130]
[131]
[133]
[134]
[135]
[136]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.chocobo_root
entities_.spawn.entities_.chocobo_root
[137]
speedPin_
speed_
[138]
Black.Sequence.Action.System.SequenceActionSetWorldTimerSpeed
weatherTransitionTime_
overrideType_
NORMAL_EVENT
weatherType_
WEATHER_TYPE_A
weatherKey_
cleigne
saveTarget_
[139]
Black.Sequence.Action.Weather.SequenceActionOverrideWeather2
WEATHER_TYPE_C
[140]
[141]
[144]
[145]
[146]
Black.Sequence.ScreenEffect.SequenceActionColorFadeIn
[147]
[152]
[153]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.noctis_camp_battle
entities_.spawn.entities_.noctis_camp_battle
[155]
[156]
BSSPT_InRadius
BlkSCSRT_AutoRandom
[157]
character/es/es00/entry/es00_000_soldier.ebex
[159]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.enemy_box
entities_.spawn.entities_.enemy_box
[160]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.noctis_fishing_point
entities_.spawn.entities_.noctis_fishing_point
[162]
hour_
unsigned int
minute_
setting_
varSet_
[164]
Black.Sequence.Action.System.SequenceActionSetWorldTimerValue
[165]
dayTime_
hourFloat_
days_
enabled_
passingDay2_
instantUpdate2_
passingDay_
instantUpdate_
[166]
Black.Sequence.Variable.SequenceVariableWorldTimer
[167]
[171]
Bool
dynamicPin1_
SQEX.Ebony.Framework.Node.GraphVariableOutputPin
refOutPorts_
labelScope_
LS_Global_Scope
isCreateWhenNotFound_
useTimer_
timerType_
TT_DECREMENT
stopTimerValue_
GAME_MODE_LOOP
labelType_
TYPE_BOOL
labelTypeLast_
[173]
Black.Sequence.Variable.Labeled.SequenceVariableLabeledFixId
[174]
Black.Sequence.Action.System.SequenceActionExitGame
closeMenu_
refOutPorts_.dynamicPin1_
[175]
[177]
FRAME_COUNT_START_RESET
[179]
[180]
[181]
playerBankNumber_
SAVE_PLAYER_NOCTIS
level_
level_pin_
[182]
Black.Sequence.Action.Actor.StatusGrow.SequenceActionActorAddLevel
SAVE_PLAYER_GLADIOLUS
[183]
SAVE_PLAYER_IGNIS
[184]
SAVE_PLAYER_PROMPTO
[185]
[186]
[187]
[188]
[189]
refInPorts_.dynamicPin1_
[191]
SQEX.Ebony.Framework.Sequence.Action.SequenceActionSetBoolVariableDirect
[195]
[196]
[197]
[198]
[200]
opened_
canceled_
pressButtonDecided_
pressButtonOther_
dialogFixId_
keyHelpFixId_
dialogString_
 GAME_MODE_LOOP -> True
dialogPos_
outputID_
inputID_
dialogSeconds_
disableCloseSeconds_
messageSpecificationType_
SPECIFICATION_STRING
forceDisp_
enablePause_
enableCancelClose_
[205]
Black.Sequence.Action.Menu.SequenceActionInfoWindow
[206]
speedRatePin_
[210]
[211]
[212]
[213]
WEATHER_TYPE_B
[214]
[215]
__PLACE_HOLDER__NOCTIS_BENCH
[216]
refActor_
SET_GASOLINE
fixidValue_
intValue_
envStateValue_
ENV_STATE_NORMAL
timeToUnfreeze_
[219]
Black.Sequence.Actor.AI.Vehicle.SequenceActionAIVehicleSetStatus
level/world/worldshare/plan/stay/worldshare_stay_bonamik.ebex
[222]
WM_G_STAY_CAMP_START_JET_BENCH
[224]
[226]
WM_G_STAY_CAMP_END_JET_BENCH
[227]
 ŃéźŃâíŃâęńŻťŠłÉšöĘŃâçŃâÉŃââŃé░ -> ON
[229]
one_
answerString1_
ŃâëŃâęŃéĄŃâľ
answerString2_
ŃâüŃâžŃé│Ńâť
isPlayerControlOff_
bSetPause_
[231]
Black.Sequence.Action.Menu.SequenceActionSelectMenuInOut
SETUP_RUN_END_JET_BENCH_CAMERA
[232]
[233]
[234]
[235]
BENCH_DRIVE_CAMERA_START
[236]
BENCH_DRIVE_CAMERA_END
[237]
three_
four_
five_
six_
cancelled_
reqNext_
reqPreview_
Ńâ¬ŃâŚŃâČŃéĄŃüÖŃéő
[238]
[239]
[245]
BENCH_CHOCOBO_CAMERA_END
[248]
BENCH_CHOCOBO_CAMERA_START
[249]
[250]
[251]
[252]
[253]
[254]
[255]
isEnableBGCollision_
bgEnabledInterpolationTime_
bgEnabledSearchGroundLength_
[256]
Black.Sequence.Actor.SequenceActionActorSetCollisionEnable
ACTOR_CHOCOBO_GLADIO
[257]
ACTOR_CHOCOBO_PROMPT
[258]
ACTOR_CHOCOBO_IGNIS
[259]
pinNum_
swfEntryEntity_
outValue_
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.swfentryentity01
[260]
Black.Sequence.Variable.SequenceVariableSwfEntryEntity
requestAddMenu_
cancelRequestMenu_
quitMenu_
resumeMenu_
[261]
Black.Sequence.Action.Menu.SequenceActionMenuLogic
blackLevelMode_
BLM_EVENT
eventModeLayer_
BEML_BASE
pcControlFlag_
cameraFadeFlag_
isEnableMotionBlur_
isNeedToShowRegalia_
preparedFadeInFrame_
fadeOutFrame_
fadeInFrame_
isEnableSkip_
eventSkipFadeOutFrame_
eventSkipFadeInFrame_
preparedPin_
[262]
Black.Sequence.Action.Level.LevelMode.SequenceActionSetLevelModeNew
[263]
[264]
WM_G_STAY_FIRST_TIMELINE_START
[265]
[266]
SM00_03SIV_10
in3_
[267]
Black.Sequence.Event.Event.SequenceEventEventFinished
[269]
SQEX.Ebony.Framework.Sequence.Action.SequenceActionSync3
[270]
JET_BENCHMARK_FISHING_START
[272]
FishingSettings
refIn1
FishSpwanEntities
entity_
refIn2
Š░┤ŔŹëEntityŃâ¬Ńé╣Ńâł/Ńé░ŃâźŃâ╝ŃâŚ
refIn3
Š░┤ÚŁóÚźśŃüĽEntity
refIn4
ForceStop
delayTime_
delayMaxTime_
pinType_
PT_ARBITRARY
triIn1
SQEX.Ebony.Framework.Node.GraphTriggerInputPin
triInPorts_
Finished
triOut1
SQEX.Ebony.Framework.Node.GraphTriggerOutputPin
InteractedToIcon
triOut2
FinishFadeoutFinished
triOut3
triOutPorts_
trayname_
PrefabTray1
headerColorUserDefine_
bodyColorUserDefine_
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.fishing_jet_benchmark
isOpen
[275]
SQEX.Ebony.Framework.Sequence.Tray.PrefabTray
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.fishing.entities_.fishingfishspawnentity01
entities_.fishing.entities_.fishingfishspawnentity01
refInPorts_.refIn2
entities_.fishing_jet_benchmark.entities_.plan_fishing.entities_.sequence_fishing.nodes_.[181]
entities_.benchmark_demo.nodes_.[276].entity_
[276]
SQEX.Ebony.Framework.Sequence.Variable.SequenceConstantTransformEntity
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.fishing.entities_.water_height_point
entities_.fishing.entities_.water_height_point
refInPorts_.refIn4
entities_.benchmark_demo.nodes_.[277].pointNodeActorVarOutPin_
[277]
[278]
[279]
[280]
[281]
[282]
JET_BENCHMARK_FISHING_END
[283]
[284]
[285]
[286]
outStop_
finishByDamage_
finishByEncount_
[287]
Black.Sequence.Action.Actor.AI.AIMode.SequenceActionExecAIModeReset
[288]
category_
MC_BASIC
isEnableAccel_
isEnableBrake_
isEnableHandle_
isEnableGetOff_
isEnableCamera_
isEnableMusic_
isEnableRoof_
isEnableKlaxon_
isEnableUturn_
isEnableAutoSave_
isEnableDriveMenu_
isEnableWaitGetoff_
isEnableCameraRoll_
isEnableTakeOff_
isEnableJump_
[289]
Black.Sequence.Action.Vehicle.SequenceActionSetVehicleController
entitySearchLabelId_
MENUENTRY_NAVIMAP
swfEntryPackagePath_
menu/navimap/script/MenuSwfEntry_NaviMap.ebex
[290]
Black.Sequence.Variable.SequenceVariableResidentSwfEntryEntity
IsVisible
Buddy
SetVisibleEnemy
SetVisibleBuddy
SetVisibleGoal
SetVisibleCar
SetVisibleBuddyEach
SetVisibleTime
SetVisibleOut
[291]
[292]
IS_VE_REGALIA_KEYHELP_MASK
[293]
BLM_RTE
[294]
[295]
[296]
bgmtype_mode_
EVENT_BGM_TYPE
idxFilePath_
sound/resources/20001Music2/jp/bgm_altissia.max
fadeIn_
fadeOut_
isSameSkip_
isSetFade_
[297]
Black.Sequence.Actor.SequenceActionSetBgmset
mode_
MODE_NORMAL
isWeakPlay_
isPlayRecalcSlot_
[298]
Black.Sequence.Actor.SequenceActionChangeBgmMode
isPose_
isKeepContinue_
[299]
Black.Sequence.Actor.SequenceActionStopBgm
[300]
sound/resources/20001Music2/jp/bgm_chocobo.max
[301]
[302]
[303]
sound/resources/20001Music2/jp/bgm_bat_nifuru.max
[304]
[305]
[306]
outPin_
materialType_
MATERIAL_TYPE_NUM
setType_
SET_TYPE_SET
setValue_
controlType_
CONTROL_TYPE_NONE
[308]
Black.Sequence.Action.Actor.Material.SequenceActionActorSetBodyMaterialParameter
attack_
WEAPON_ATTACK_MAIN_DOWN
equipmentId_
WEAPON_WE01_SWORD_009
checkNew_
[309]
Black.Sequence.Action.Actor.Accessory.SequenceActionActorEquipWeapon
[310]
Black.Sequence.Action.Actor.Accessory.SequenceActionActorFullOpenAbilityTree
[311]
[314]
[315]
wetControlType_
FORCE_DRY
gettingDryTime_
gettingWetTime_
perCharacterControl_
[318]
Black.Sequence.Action.Actor.SequenceActionActorWetnessControl
[319]
BENCH_AIRCRAFT_PREPARE
[321]
BENCH_AIRCRAFT_START
[323]
BENCH_AIRCRAFT_END
[324]
Int
UI_P_COMM_JOB_COMMAND_MENU_DECIDE_COMMAND
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.benchmark_demo.nodes_.[325].refInPorts_.arg0_
SQEX.Ebony.Framework.Sequence.Variable.Primitive.SequencePrimitiveInt
[325]
WEAPON_ATTACK_MAIN_UP
[326]
[327]
WEAPON_ATTACK_MAIN_RIGHT
WEAPON_WE03_SPEAR_001
[328]
WEAPON_ATTACK_MAIN_LEFT
[329]
[330]
[331]
[332]
[333]
Black.Sequence.Action.Debug.SequenceActionDebugSetGameSpeed
[334]
actorIgnisPin_
[335]
actorListPin_
actorNoctisPin_
actorGladiolusPin_
actorPromptoPin_
actorGuestPin_
isExcludingUCPC_
[336]
Black.Sequence.Action.Level.Party.SequenceActionGetPartyMembers
[337]
[338]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.ignis_camp_battle
entities_.spawn.entities_.ignis_camp_battle
[339]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.prompto_camp_battle
entities_.spawn.entities_.prompto_camp_battle
[340]
root.entities_.area_duscae_jet_bench.entities_.area_duscae_share_jet_bench.entities_.area_du_share_quest_jet_bench.entities_.spawn.entities_.gladio_camp_battle
entities_.spawn.entities_.gladio_camp_battle
[341]
connectorNo_
[0]
SQEX.Ebony.Framework.Sequence.Connector.SequenceConnectorIn
SQEX.Ebony.Framework.Sequence.Connector.SequenceConnectorOut
[2]
[8]
[10]
jointId_
scriptVisible_
pointType_
TYPE_POINT
paramId_
interactionParamId_
interactionItemId_
positionAttribute_
warpAutoTurnMode_
WATM_CENTER_OF_GRAVITY
warpPostCameraMode_
WPCM_OVER_SHOULDER
warpPostCameraBlendMode_
BLEND_CUBIC
warpPostCameraBlendTime_
warpPostCameraBlendSpeed_
warpGroupId_
magicThunderDamageRangeRadius_
wallCoverRangeRadius_
wallCoverDirection_
RIGHT
point_du_share_camp21
Black.Entity.Node.PointNodeEntity
isEnable_
seedPointFixid_
DEFAULT
areaType_
AREA_BATTLE
groupNo_
battleAreaConditionFixId_
BA_DEFAULT
isAutoMakeBattleTeritory_
triggerType_
TYPE_SPHERE
seedCollisionType_
TYPE_CYLINDER
radius_
summonSuccessRate_
summonIfritLot_
summonIfritDirection_
summonSivaLot_
summonSivaDirection_
summonRamuhLot_
summonRamuhDirection_
summonTitanLot_
summonTitanDirection_
summonLeviathanLot_
summonLeviathanDirection_
summonBahamutLot_
summonBahamutDirection_
elementFirePower_
elementIcePower_
elementThunderPower_
elementEarthPower_
elementWaterPower_
elementLightPower_
elementDarkPower_
isAreaInfoRelease_
battleareaentity01
Black.Entity.Node.BattleAreaEntity
entities_.spawn.entities_.gladiolus
entities_.spawn.entities_.prompto
entities_.spawn.entities_.ignis
entities_.spawn.entities_.vehicle_gas
entities_.spawn.entities_.noctis_fishing_hut
spawn
Black.Entity.EntityGroup
capacity_
battleAreaSeedPointFixid_
noctis
Black.Entity.Node.SpawnPointNodeEntity
gladiolus
prompto
ignis
vehicle_road
vehicle_gas
noctis_camp_point
chocobo
enemy
chocobo_root
noctis_fishing_hut
noctis_fishing_point
noctis_camp_battle
enemy_box
Black.Entity.Node.SpawnBoxNodeEntity
gladio_camp_battle
prompto_camp_battle
ignis_camp_battle
entities_.routeentity01.entities_.routepointentity10
entities_.routeentity01.entities_.routepointentity20
entities_.routeentity01.entities_.routepointentity30
entities_.routeentity01.entities_.routepointentity31
entities_.routeentity01.entities_.routepointentity40
entities_.routeentity01.entities_.routepointentity41
entities_.routeentity01.entities_.routepointentity42
entities_.routeentity01.entities_.routepointentity50
entities_.routeentity01.entities_.routepointentity51
entities_.routeentity01.entities_.routepointentity60
bLoop_
routeMoveType_
ROUTEMOVE_TYPE_ONCE
routeentity01
Black.Entity.RoutePoint.RouteEntity
GROUND
destinationPointRandomRange_
movementOverride_
moveSpeedOverride_
arrivalMoveSpeedOverride_
isEnableDynamicRandomDestination_
destinationDistanceRatioMin_
destinationDistanceRatioMax_
routepointentity10
Black.Entity.RoutePoint.RoutePointEntity
routepointentity20
routepointentity30
routepointentity31
routepointentity40
routepointentity41
routepointentity42
routepointentity50
routepointentity51
routepointentity60
entities_.routeentity02.entities_.routepointentity01
entities_.routeentity02.entities_.routepointentity02
routeentity02
routepointentity01
routepointentity02
touchTarget_
UCPC
characterSelectID_
touchStatus_
TOUCH
touchStatus2_
UNTOUCH
touchStatus3_
touchStatus4_
height_
depth_
width_
count_
enableTrigger_
checkInSameScene_
scaleTriggerWithParent_
isNoCheckFirst_
isNoCheckAtUCOff_
isSetEventModeAtTouch_
touchKind_
TK_ALL
trigger_chocobo_camera
Black.Entity.Node.TriggerEntityQuest
./area_du_share_quest_drive_jet_bench.ebex
495a4cb7-d113-41fc-9e61-6164ecf1433b
area_du_share_quest_drive_jet_bench
SQEX.Ebony.Framework.Entity.EntityPackageReference
./area_du_share_quest_chocobo_jet_bench.ebex
f2b64393-bb64-420c-8ee5-90f008002f6f
area_du_share_quest_chocobo_jet_bench
menuFixID_
menu/jet_bench/script/MenuSwfEntry_JetBenchLogo.ebex
swfentryentity01
Black.Entity.Menu.SwfEntryEntity
8.651421E-06,-132.9797,8.651422E-06,1
../../level/levelresource/prefab/fishing/fishing_jet_benchmark.prefab
21fea4dd-04a2-460f-a6cb-1338233cd4c0
bArchiveDiffResource_
umbraIsTarget_
umbraIsOccluder_
sequenceUpdateOrder_
fishing_jet_benchmark
Black.Entity.Prefab.Prefab
fishing
8.651421E-06,-132.3124,8.651422E-06,1
water_height_point
spawnAreaType_
AREA_ELLIPSE
boxEllipseWidth_
boxEllipseDepth_
circleRadius_
spawnLevel_
AREA_LEVEL_2
spawnMaxCount_
fishingfishspawnentity01
Black.Entity.Minigame.Fishing.FishingFishSpawnEntity
./area_du_share_quest_aircraft_jet_bench.ebex
615d9b55-49fc-491b-a59c-b067c0c36673
area_du_share_quest_aircraft_jet_bench
objects
package

Due to the structure I'm more then sure that it's something like Unreal Engine's 4 Blueprint scripting.

NODE 229:
isPlayerControlOff_

NODE 288:
Bunch of disabling for auto controlling

XMB2:
Code: [Select]
0x00 char[4] header(XMB2)
0x04 uint32 EOF
0x08 uint32 padding?
0x0C uint32 sizeof(section1)
0x10 uint32 padding?
0x14 uint32 Section1

Section1:
uint32 - pointer
byte[4] - type
byte[4] - null?
« Last Edit: 2018-02-18 11:39:12 by Maki »

LeonhartGR

  • No life
  • *
  • Posts: 2375
  • Karma: 31
  • ~Whatever...~ Finally married to my "Rinoa"!
    • View Profile
    • LeonhartGR Productions
Re: [PC] Final Fantasy XV
« Reply #11 on: 2018-02-23 15:11:22 »
Keep drinking!!! :P

« Last Edit: 2018-02-23 15:19:35 by LeonhartGR »

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #12 on: 2018-06-28 14:30:52 »
Mod organizer got release some times ago- looks like C# WPF application- and in fact it is. 64 bit build- free to download for everyone, even if you don't own FFXV directly from Steam. Mod organizer is not protected and you can easily decompile full source code via ILSpy including archive tool with .EARC builder algorithm including debug strings:
Code: [Select]
if (!File.Exists(temp_earc))
{
Console.WriteLine(temp_earc + " が出力されていない");
return -1;
}

UPDATE:
Nope, no archive building, everything it does is calling an exe in a thread to:
%REBLACK_ROOT%"), "luminous\\sdk\\tools\\Backend\\AssetConverterFramework\\BuildCoordinator\\bin\\tonberry.exe"


Code: [Select]
string fullName = Directory.GetParent(tonberry_FullPath).FullName;
string text = additional_args + " --force --protect --encrypt --server " + ebex + "@";
CommandProcess.Execute(tonberry_FullPath, text, out num, null, fullName, null, true);
« Last Edit: 2018-06-28 14:34:34 by Maki »

spiderman1216

  • Newbie
  • *
  • Posts: 1
  • Karma: 0
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #13 on: 2018-06-29 07:05:48 »
I'm interested in figuring out the node based scripting for this game



I have replaced a cutscene for a test it

The replacement played but it hung though you could press the skip button then you can right into the game

I'm going to play around with the FFXV files and see what ticks

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #14 on: 2018-07-19 11:21:37 »
I just got an e-mail from "Haggy" with an amazing report- due to mistake SquareEnix uploaded debug build of FFXV with PDB !!!
Whole build with pseudocode is available to download on the bay, just search for "Final Fantasy XV Debug Symbols".

UPDATE:
Full debug information with even troubleshooting is there xD



Important functions (changed argument names for clarity):
Code: [Select]
void ** SQEX::Luminous::AssetManager::LmArcFileSystem::OpenFile (LmArcFileSystem *this, LmAssetID *i_id, LmEAssetLoadPriority priority)


File read:
SQEX::Luminous::AssetManager::LmArcFileSystem::ReadFile -> determines if compressed or not by LmArcInterface::FindAssetInfo ->


int64 SQEX::Luminous::AssetManager::LmArcFileSystem::ReadCompressed(LmArcFileSystem *this, FileSystemEntry *i_pFileEntry, ArcAssociation *i_pArchive /* this one is archive name in 80%*/, void *o_pAddress, unsigned int i_length, void **io_asyncHandle, LmEAssetLoadPriority priority, SQEX::Luminous::Core::IO::IFileDevice::FileAttribute attribute)

struct LmArcInterface::ArcAssociation (this is what we know so far despite being a copy-of AssetManager:LmAssetKey):

Code: [Select]
QWORD entry ; offset // It's in fact in code as LmArcCatalogShortEntry
DWORD arcMountIndex
BYTE UNK ; undefined
BYTE UNK ; undefined
BYTE UNK ; undefined
BYTE UNK ; undefined

LmArcCatalogShortEntry:
Code: [Select]
QWORD nameTypeHash    dq ?
QWORD dataStart
std::string name
std::string pAbsolutePath
DWORD originalSize
DWORD compressedSize
USHORT flags
BYTE localizeType
BYTE localizeLocale
SHORT encryptKey
BYTE UNK
BYTE UNK


Visual Studio works as expected:
« Last Edit: 2018-07-19 22:27:12 by Maki »

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #15 on: 2018-07-20 13:54:40 »
Just a quick hint- FFXV_s.exe base is dynamic, therefore patch:
Code: [Select]
ffxv_s.exe:0x1EE = 0x20 (replacing 0x60, 2nd bit from 1 to 0)
this will disable ASLR and base image on 0x140000000

any further notes I'll write here will consider 0x140000000 as the base instead of 0x00007FF*

If you're using IDA make sure to rebase the database last time by Edit>Segment>Rebase, for CE or Olly it doesn't matter, anyway I'll try to post relative addresses like ffxv_s.exe+0xFFFF like in CE style

Okay, about XML20 (exml):
Xmb2document:
Code: [Select]
00000000 identifier dd ?
00000004 fileSize dd ?
00000008 flags dw ?
0000000A version dw ?
0000000C rootElementOffset dd ? <-- relative to root

Getting elements (useful for offset strawberries):
Code: [Select]
SQEX::Luminous::Xml::Xmb2Element::GetElementByName(Xmb2Element el, char* name);example:
000000016459061C SQEX::Luminous::Xml::Xmb2Element <elementStartOffset_: 0B44h, attributeStartOffset_: 0F58h, elementCount: 1, attribCount: 1h>

int64 i = 0;
var v7 = &xmb->elementStartOffset + 4* i + xmb->elementStartOffset + *((xmb->elementStartOffset)+&xmb->elementStartOffset)
Let's simplify it: we just jump to relative pointer of i * 4 of pointer address of XMB document + element start offset, like this:
Code: [Select]
uint64 pointer = XMBdocument + elementStartOffset + i*4;
uint64 v7 = pointer + *(pointer);

Now the unknown pointer:
char* v8 = v7 + (*(v7 + 4)+4);
if v8 is not null, then treat as array of objects:

v10 = v9 + *(v9+5) + 5

UPDATE2:
The abstraction level of everything here is so high... struct with struct with struct, that's not assembler-level friendly.

UPDATE3:
initialize1.exml:
Code: [Select]
0: reference
1: entities_.common_textures_list
2: entities_.initialize1_list
3: entities_.system_no_autoload
4: entities_
5: hasTransform_
6: bool
7: position_
8: float4
9: rotation_
10: scaling_
11: float
12: canManipulate_
13: sourcePath_
14: common/initialize1.ebex
15: string
16: name_
17: dff7c814-9313-45a9-b8fd-5fc7ca670db7
18: isTemplateTraySourceReference_
19: isShared_
20: startupLoad_
21: object
22: initialize1
23: SQEX.Ebony.Framework.Entity.EntityPackage
24:
25: filePath_
26: textures/ebony_required_textures.txt
27: isAutoLoad_
28: common_textures_list
29: Black.Entity.Data.EarcResourceList
30: common/initialize1_list.txt
31: initialize1_list
32: common/system_no_autoload.txt
33: system_no_autoload
34: objects
35: package

UPDATE4:
Looks like it's raw data that is treated via struct. Currently it looks like the pointers and attribute+element count is stored in the middle of the file.
ai/commonai/commontpslibrary.exml ->
debug::63140000 = XMB2
debug::6314016C = XMBDocument

Looks like EXML contains many XMBDocuments
« Last Edit: 2018-07-25 12:04:48 by Maki »

Maki

  • Software hacker
  • Freak
  • *
  • Posts: 521
  • Karma: 99
  • Paranoid
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #16 on: 2018-07-25 13:34:07 »
Python code for getting 'objects' element, also contains structure data:

Code: [Select]
import sys
import struct

#CONFIG
filePath = sys.argv[1]
#END OF CONFIG

print(filePath)
#XmbDocument
f = open(filePath, 'rb')
xmb2 = f.read(4)
eof = struct.unpack('L', f.read(4))[0]
flags = struct.unpack('H', f.read(2))[0]
version = struct.unpack('H', f.read(2))[0]
rootElement = struct.unpack('L', f.read(4))[0]
f.seek(rootElement-4,1) #xmbDocument is casted now to XmbElement

#XmbElement
xmb2Element_elementStartOffset = struct.unpack('L', f.read(4))[0] #v6
xmb2Element_attributeStartOffset = struct.unpack('L', f.read(4))[0]
xmb2Element_elementCount = struct.unpack('H', f.read(2))[0]
xmb2Element_attributeCount = struct.unpack('H', f.read(2))[0] >> 8

f.seek(-12,1) #going back to XMB2Element root
AbsoluteXmb2ElementRoot = f.tell() # &v3->elementStartOffset_
IndexPointer = 0 #v4
SignedPointer = AbsoluteXmb2ElementRoot + 4 * IndexPointer + xmb2Element_elementStartOffset
f.seek(SignedPointer, 0)
SignedPointerValue = struct.unpack('i', f.read(4))[0]
v7 = AbsoluteXmb2ElementRoot + (4*IndexPointer) + xmb2Element_elementStartOffset + SignedPointerValue
#(char *)(v7 + *(_DWORD *)(v7 + 4) + 4i64);
v8Pointer = v7 + 4
f.seek(v8Pointer, 0)
v8PointerValue = struct.unpack('I', f.read(4))[0]
_ = v7 + v8PointerValue + 4
f.seek(_,0)
#v9 = &v8[*(_DWORD *)v8];
v8 = struct.unpack('i', f.read(4))[0]
f.seek(-4,1)
v8Pointer = f.tell()
v9 = v8Pointer + v8
f.seek(v9, 0)
v9Pt = struct.unpack('B', f.read(1))[0]
if v9Pt == 1:
f.seek(v9+5, 0)
v10Pt = struct.unpack('I', f.read(4))[0]
v10 = v9+v10Pt+5
f.seek(v10,0)
objectName = f.read().split('\0')[0]
print('Index: ' + str(IndexPointer) + ': ' + objectName)
« Last Edit: 2018-07-25 13:38:04 by Maki »

fiercystorm

  • Newbie
  • *
  • Posts: 1
  • Karma: 1
  • A figure that lies asleep in fantasy...
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #17 on: 2018-07-31 20:38:28 »
Can someone reup or PM me the "73k lines of all engine scripts/paths/etc" that Maki uploaded? The dropbox link is dead now. Thanks in advance.
« Last Edit: 2018-08-01 12:29:45 by fiercystorm »

Xeeynamo

  • Fast newbie
  • *
  • Posts: 11
  • Karma: 2
    • View Profile
Re: [PC] Final Fantasy XV
« Reply #18 on: 2018-10-15 13:04:02 »
I have updates for FFXV reverse.
I recently created a GitHub repo (https://github.com/xeeynamo/ffxv) where some source-code and stuff can be found.

Following Maki's research, I am now able to deserialize and serialize EXML files from Episode Duscae and Platinum Demo. Those files contains information like how displaying the menu, how to set some specific values inside specific structures, create quests, expand the worldmap and edit almost every aspect of the game.

These EXML files are called "Package", where each package contains those information and let the engine knows what files to load and display. A package has a very complex structure of information, with nodes inside nodes and types that represents the actual game data by reflection. I have a PackageService which parse those XML packages and map them to known types, so creating editors from that should be straight forward.

My plan is to be able to restore some cut content from both Episode Duscae and Platinum demo, then be able to use XMB2 format and import the assets to PC version. Any help to the project, of course, is appreciated :)