Currently I'm working on implementation of "real" Projects and Mods. Mainly I want to move all of my projects "brains" out of the program into the projects themselves and "teach" Launcher how to use that. This will allow you to edit the process of patching with my projects. I also want to add the ability to change project used in simple patching to any other suitable project. Along with that I might also finalize Project/Mods auto-updates.
All those things combined together will finally allow all interested BDO patch creators to redistribute their patch easier and for everyone who uses that patch to update it without waiting the update from patch creator.
I'm currently stuck at the way of saving project info, here is what it looks like now:
Code: Select all
[General]
Name = KAMI JP
Author = KAMIKADzE
Description = Description
Version = 2.9d
FolderPath = KAMI JP
Server = JP
[Web]
HomePage = https://dota.invokami.com/viewtopic.php?t=1002
Update = https://googledrive.com/host/0B6hl_qHX1yIsT2JqbmlyZnBocVU/KAMI%20JP.bpc
[RAW]
GetFullRAW = false
[ProjectFiles]
JP1 = \languagedata.xml
JP2 = \stringtable_jp.xml
JP3 = \stringtable_cutscene_jp.xml
JP4 = \symbolnostringtable_jp.xml
[Steps]
1 = Merge|M1|RAW1|JP1
2 = Push|M1|1
3 = Merge|M2|RAW2|JP2
4 = Push|M2|2
5 = Merge|M3|RAW3|JP3
6 = Push|M3|3
7 = Merge|M4|RAW4|JP4
8 = Push|M4|4
[StepsDev]
1 = Merge|M1|RAW1|JP1
2 = Out|XML|M1
3 = Out|Log|\languagedata.txt
4 = Push|M1|1
5 = Merge|M2|RAW2|JP2
6 = Out|XML|M2
7 = Out|Log|\stringtable_jp.txt
8 = Push|M2|2
9 = Merge|M3|RAW3|JP3
10 = Out|XML|M3
11 = Out|Log|\stringtable_cutscene_jp.txt
12 = Push|M3|3
13 = Merge|M4|RAW4|JP4
14 = Out|XML|M4
15 = Out|Log|\symbolnostringtable_jp.txt
16 = Push|M4|4
Now you're like
Don't worry I'll explain it all when I'll be done with it.
Originally I wanted to make it as human-readable as I can, and the KAMI JP project was just like that^ for quite a while already. On top of that I don't think that I'll add the possibility to create/edit Projects/Mods from the program itself for a very long time after the release of this version, as that will take a lot of time.
Now the problem is in this particular line (and similar ones):
Code: Select all
1 = Merge|M1|RAW1|JP1
So basically this line says - as a first step after getting everything ready - merge RAW languagedata with Project's languagedata, save the result in M1 (for a later use). The thing is that there also should be a place for actions (after JP1), and in theory there could be a lot of those, basically all planned features related to regex and other automatic text editing/google translation, etc. will go there, so the lines will end up redunculously long. This is also not the best thing from programming standpoint.
There is a workaround with this "style" (to create a lot of entries for each action, like for example 1_1, 1_2, 1_3...), but this will get clunky very fast + not the best thing from programming standpoint.
Of course there is a way to avoid all of that with more nested structure, similar to what I use in scheme, e.g. here is the piece of it:
Code: Select all
{
"languagedata": {
"1_LongSword": {
"Keys": {
"Index": "^Index",
"Enchant": "^Enchant"
},
"Values": {
"Description": "~Description"
},
"Actions": {
"AllowNullKeys": false
}
},
"2_Blunt": {
"Keys": {
"Index": "^Index",
"Enchant": "^Enchant"
},
"Values": {
"Description": "~Description"
},
"Actions": {
"AllowNullKeys": false
}
},
"3_TwoHandSword": {
"Keys": {
"Index": "^Index",
"Enchant": "^Enchant"
},
"Values": {
"Description": "~Description"
},
"Actions": {
"AllowNullKeys": false
}
},
The thing is, that it might not look like hard to edit (especially when it is as repetitive and simple as this scheme), but it is a lot less human-readable than the first one. No one will care when it will be editable from the program itself, but as I said - it won't be soon.
For now I'm the only one who's using projects, so I don't really mind to change it. If you'll happen to have some better idea then let me know, and I'll think about a better way myself, I just don't want to change it when(if) it will be used by quite a few patch creators.