Your Ad could be here.
Donate to support DoTA forum and Launcher development.

Working on v0.8

User avatar
KAMIKADzE
KAMIKADzE
KAMIKADzE
Blood Mage
Blood Mage
Posts: 3685
Joined: Thu 1998.01.01, 00:00
Honor: 3102
Points: 2423438202.90
BDO: Blader
Cabal: BL
Vindictus: Lann
C9: Blade Dancer
Gender: Male
Karma: 神風
: Assassin Black Star Winged Devotion Dedication Heavy 1st 20 HR BDO JP Volunteer BDO KR Translator BDO JP Translator BDO RU Translator Black Spirit inside Black Spirit's Partner
Medals: 17
Contact:

Re: Working on v0.8

Postby KAMIKADzE » Thu 2020.05.14, 19:20

Updated the development version.

  • Argument Snatcher (Main window menu Tools)
    Fixed issue that caused Argument Snatcher to not identify running Launcher, under certain circumstances, thus not sending arguments to it.
  • AOTP (Main window menu Tools)
    Fixed issue that could rarely result in error thrown during initial load of AOTP window, while computer was under load.



User avatar
kettle
NOOB
NOOB
Posts: 2
Joined: Fri 2020.05.15, 15:46
Honor: 0
Points: 2.20

Re: Working on v0.8

Postby kettle » Fri 2020.05.15, 15:50

Do you know what is .pae file?

User avatar
KAMIKADzE
KAMIKADzE
KAMIKADzE
Blood Mage
Blood Mage
Posts: 3685
Joined: Thu 1998.01.01, 00:00
Honor: 3102
Points: 2423438202.90
BDO: Blader
Cabal: BL
Vindictus: Lann
C9: Blade Dancer
Gender: Male
Karma: 神風
: Assassin Black Star Winged Devotion Dedication Heavy 1st 20 HR BDO JP Volunteer BDO KR Translator BDO JP Translator BDO RU Translator Black Spirit inside Black Spirit's Partner
Medals: 17
Contact:

Re: Working on v0.8

Postby KAMIKADzE » Fri 2020.05.15, 16:29

kettle » Fri 2020.05.15, 15:50 wrote:Do you know what is .pae file?

As far as I understand ".pae" means "Pearl Abyss Executable", which in reality is just renamed ".exe" file. You can rename it to .exe and start the game with that, and it'll work just fine.
Now if you'll wonder "why they renamed it?", as far as I understand - that was done for exactly that reason, to avoid users running it like that. From what I can tell "BlackDesertLauncher.exe" is basically a universal Downloader of the Patcher, which will download the correct patcher if for whatever reason you happen to not have it (e.g.: delete your "BlackDesertPatcher32.pae" to trigger it) and then start it, but patcher is still patching itself, so BlackDesertLauncher kind of doesn't make a whole lot of sense, and if devs would not include it then they would not need to rename Patcher into .pae to avoid users clicking on it, but then it would not be universal...and it's an endless loop of what if... =D



User avatar
kettle
NOOB
NOOB
Posts: 2
Joined: Fri 2020.05.15, 15:46
Honor: 0
Points: 2.20

Re: Working on v0.8

Postby kettle » Fri 2020.05.15, 16:36

Now I wonder why they distribute Launcher instead of not renamed Patcher.
I have one more question, can you add automatic updates to your launcher?

User avatar
KAMIKADzE
KAMIKADzE
KAMIKADzE
Blood Mage
Blood Mage
Posts: 3685
Joined: Thu 1998.01.01, 00:00
Honor: 3102
Points: 2423438202.90
BDO: Blader
Cabal: BL
Vindictus: Lann
C9: Blade Dancer
Gender: Male
Karma: 神風
: Assassin Black Star Winged Devotion Dedication Heavy 1st 20 HR BDO JP Volunteer BDO KR Translator BDO JP Translator BDO RU Translator Black Spirit inside Black Spirit's Partner
Medals: 17
Contact:

Re: Working on v0.8

Postby KAMIKADzE » Fri 2020.05.15, 17:02

kettle » Fri 2020.05.15, 16:36 wrote:Now I wonder why they distribute Launcher instead of not renamed Patcher.
I have one more question, can you add automatic updates to your launcher?

Might be a part of their plan in collecting all servers, then they could simply make a single client for all servers (maybe excluding Global Lab), with server selection box, but to be honest - I have no idea, doesn't make a whole lot of sense as of now, they could just as well patch it when needed (after collecting all servers, if that is the case), only devs can answer on that one, and probably they won't. Don't try to overthink it, there are many things that don't make sense, for example why devs build Black Desert as CrimsonDesert, now that Crimson Desert is a separate game? Sure, it was build as Crimson Desert before Crimson Desert, and then Crimson Desert was planned expansion, but now that it's a separate game they could rename it to not confuse themselves, unless...devs also update Black Desert with things added to new separate Shadow Arena...all 3 will unite? *EINSTEIN* devs clearly leave this as an option, but who knows...probably not even devs themselves.

As for the Launcher auto-updates - Yes, but No. To make proper auto-updates I'll need to spend even more $ (costs for server) on already unprofitable Launcher, which I'd like to avoid, and since I don't need this feature - I will avoid adding it. Technically I could make it in a very complicated manner by abusing Google Drive, but it'll be complicated and will be a major pain to maintain, so I don't want to. If Launcher will become profitable in some distant future, then, and only then I'll get back to this auto-update feature, if there will be demand for it.



User avatar
KAMIKADzE
KAMIKADzE
KAMIKADzE
Blood Mage
Blood Mage
Posts: 3685
Joined: Thu 1998.01.01, 00:00
Honor: 3102
Points: 2423438202.90
BDO: Blader
Cabal: BL
Vindictus: Lann
C9: Blade Dancer
Gender: Male
Karma: 神風
: Assassin Black Star Winged Devotion Dedication Heavy 1st 20 HR BDO JP Volunteer BDO KR Translator BDO JP Translator BDO RU Translator Black Spirit inside Black Spirit's Partner
Medals: 17
Contact:

Re: Working on v0.8

Postby KAMIKADzE » Sat 2020.09.05, 04:35

First of all - this version of Launcher is not intended for an average user, and is here only for those who need to work with new stringtable.bss files, so if you have no idea what that is - get yourself ALPHA1 instead. ALPHA2 has various "parts" that are currently "in progress" and thus may cause various errors and issues. Don't get me wrong - it is not going to burn a hole in the Universe or smth, it's just that benefits of upgrade are not worth it for an average user at the moment. Feel free to test it, but don't report possible issues that I'll mention below.
Due to this reason^ and the fact that I'll be repeating myself - I've decided to edit this post, instead of posting a new one.
To quickly summarize and expand on the message of original post: I've been working on Launcher for the past 4 months, when I happened to have time for it, and since it was periodical I've worked on various things, some of which include:
  • xigncode error decryptor
    It's almost complete, only the last part remains, but I had to leave it at that, due to the time constraints and considering that PA pushes Easy Anti-Cheat everywhere and seems like it plans to push it on the JP server as well, I pushed it aside of priority.
  • KAMI dlls
    I worked on various KAMI dlls, added new ciphers, improved zip, excel (this also allowed me to finally start adding BZip2, which is like 25% done now), and a lot of other improvements/additions.
    ALPHA2 has dropped reference to few, now unused, dlls, so if you plan to install it over one of the old versions you can delete all dlls in it, prior to installation (purely to reduce space taken, leaving them won't affect Launcher in any way).
  • PAZ cipher and compressor rework
    I started reworking PAZ cipher and compressor (to finally add InsertPAZ and to improve stability). Started with cipher, which since the addition of it to Black Desert got quite a few "fixes" from its developer. The thing is - its dev is clearly not extremely good at programming (doesn't need to be to design it) and the examples on his off site (which is now down by the way) are all over the place *THINK*, he has shown few example implementations in different programming languages and all of them are quite different (in a sense of approach, not the words), so I kind of tried to combine them according to whitepaper and made the "2020 version" of it, I've also improved the parts of my previous implementation (the one that was based on PA's), which 100% don't influence on the result (thus still 100% compatible with PA's) but improve stability a bit. I've named them Ice8 and Ice8Q respectively. I haven't tested them in every possible way at the time, as I didn't want to test them twice (wanted to test them when they'll be completely infused into Launcher UI and stuff), but both seemed to work fine. Have been using Ice8Q since then for more than a month now and it definitely works fine. So as you probably got it - both of them are implemented, but Ice8Q is hard-coded to the process at the moment and can't be changed/configured in settings. The plan is that you'll be able to set 1 up in settings as the primary one, and at the same time you'll be able to use either of them in FEX (just like you can use none). Few extra config options will be available. You can try to use Ice8 via FEX, but I don't recommend that, as I don't remember if everything is implemented for it to work properly.
  • Scheme
    I've slightly modified Data v3 schemes, so the older schemes will no longer be compatible and will require manual conversion (not difficult).
    Here's the new default scheme (including stringtable 2):

    Code: Select all

    {
      "languagedata": {
        "1_LongSword": {
          "Keys": {
            "Index": "^Index",
            "Enchant": "^Enchant"
          },
          "Values": {
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "2_Blunt": {
          "Keys": {
            "Index": "^Index",
            "Enchant": "^Enchant"
          },
          "Values": {
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "3_TwoHandSword": {
          "Keys": {
            "Index": "^Index",
            "Enchant": "^Enchant"
          },
          "Values": {
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "4_Bow": {
          "Keys": {
            "Index": "^Index",
            "Enchant": "^Enchant"
          },
          "Values": {
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "5_Dagger": {
          "Keys": {
            "Index": "^Index",
            "Enchant": "^Enchant"
          },
          "Values": {
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "6_Staff": {
          "Keys": {
            "Index": "^Index",
            "Enchant": "^Enchant"
          },
          "Values": {
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Attendance_Table": {
          "Keys": {
            "Key": "^Key"
          },
          "Values": {
            "Title": "~Title",
            "EventPeriod": "~EventPeriod",
            "EventExpired": "~EventExpired"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Auction_InfoTable": {
          "Keys": {
            "AuctionNo": "^AuctionNo"
          },
          "Values": {
            "AuctionDesc": "~AuctionDesc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "AudioMap_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "AreaName": "~AreaName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Awakening_Ability_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "AbilityName": "~AbilityName",
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Buff_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "BuffName": "~BuffName",
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "BuffCondition_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "ConditionDesc": "~ConditionDesc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Card_Table": {
          "Keys": {
            "Key": "^Key"
          },
          "Values": {
            "Name": "~Name",
            "Desc": "~Desc",
            "Keyword": "~Keyword"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "CashProduct_Table": {
          "Keys": {
            "ProductNo": "^ProductNo"
          },
          "Values": {
            "ProductName": "~ProductName",
            "DisplayName": "~DisplayName",
            "DisplaySubName": "~DisplaySubName",
            "ProductDesc": "~ProductDesc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Challenge_Table": {
          "Keys": {
            "Key": "^Key"
          },
          "Values": {
            "Title": "~Title",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Character_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "CharName": "~CharName",
            "DisplayName": "~DisplayName",
            "CharacterTitle": "~CharacterTitle"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "CharacterFunction_Table": {
          "Keys": {
            "CharacterKey": "^CharacterKey"
          },
          "Values": {
            "BuyingFromNpcName": "~BuyingFromNpcName",
            "SellingToNpcName": "~SellingToNpcName",
            "TradingName": "~TradingName",
            "ItemMarketName": "~ItemMarketName",
            "BuyingFromGuildShopNpcName": "~BuyingFromGuildShopNpcName",
            "SellingToGuildShopNpcName": "~SellingToGuildShopNpcName",
            "AuctionName": "~AuctionName",
            "MatingName": "~MatingName",
            "InnName": "~InnName",
            "ExploreKeyName": "~ExploreKeyName",
            "SkillName": "~SkillName",
            "RepairName": "~RepairName",
            "WarehouseName": "~WarehouseName",
            "StableName": "~StableName",
            "TransferName": "~TransferName",
            "TransferNamePerson": "~TransferNamePerson",
            "IntimacyName": "~IntimacyName",
            "GuildName": "~GuildName",
            "ExploreName": "~ExploreName",
            "LordMenuName": "~LordMenuName",
            "MinorLordMenuName": "~MinorLordMenuName",
            "ExtractName": "~ExtractName",
            "TerritoryTradeName": "~TerritoryTradeName",
            "TerritorySupplyName": "~TerritorySupplyName",
            "KnowledgeName": "~KnowledgeName",
            "SupplyShopName": "~SupplyShopName",
            "SupplyFishShopName": "~SupplyFishShopName",
            "GuildSupplyShopName": "~GuildSupplyShopName",
            "ChangeItemName": "~ChangeItemName",
            "isAwakenSkillName": "~isAwakenSkillName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Class_DataSkill_MeshType_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "ItemName": "~ItemName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "ContributionEXP_Table": {
          "Keys": {
            "TerritoryKey": "^TerritoryKey"
          },
          "Values": {
            "TerritoryName": "~TerritoryName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Coupon_Table": {
          "Keys": {
            "CouponKey": "^CouponKey"
          },
          "Values": {
            "Name": "~Name"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "CouponCategory_Table": {
          "Keys": {
            "CashCouponCategory_Main": "^CashCouponCategory_Main",
            "CashCouponCategory_Middle": "^CashCouponCategory_Middle",
            "CashCouponCategory_Small": "^CashCouponCategory_Small"
          },
          "Values": {
            "CashCouponCategory_Name": "~CashCouponCategory_Name"
          },
          "Actions": {
            "AllowNullKeys": true,
            "ExcludeFromMerge": {}
          }
        },
        "CutScene_Table": {
          "Keys": {
            "FileName": "^FileName"
          },
          "Values": {
            "CutSceneName": "~CutSceneName",
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Dialog_Table": {
          "Keys": {
            "Npc": "!Npc",
            "DialogIndex": "!DialogIndex",
            "Index": "^Index"
          },
          "Values": {
            "Name": "~Name",
            "MainScene": "~MainScene",
            "FuncDialog": "~FuncDialog",
            "MainDialog": "~MainDialog",
            "Button": "~Button",
            "Dialog": "~Dialog",
            "Bubble1": "~Bubble1",
            "Bubble2": "~Bubble2",
            "Bubble3": "~Bubble3",
            "Bubble4": "~Bubble4",
            "Bubble5": "~Bubble5",
            "Bubble6": "~Bubble6",
            "Bubble7": "~Bubble7",
            "Bubble8": "~Bubble8",
            "Bubble9": "~Bubble9",
            "Bubble10": "~Bubble10"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "DialogText_Table": {
          "Keys": {
            "Index": "^Index",
            "RandomIndex": "^RandomIndex"
          },
          "Values": {
            "Text": "~Text"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Encyclopedia_Table": {
          "Keys": {
            "Key": "^Key"
          },
          "Values": {
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "EquipSetOption": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "EquipSetOptionName": "~EquipSetOptionName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Explore_Table": {
          "Keys": {
            "WaypointKey": "^WaypointKey"
          },
          "Values": {
            "Name": "~Name",
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Field_Table": {
          "Keys": {
            "FieldNo": "^FieldNo"
          },
          "Values": {
            "FieldName": "~FieldName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Fusion_Table": {
          "Keys": {
            "Index": "^Index",
            "FusionGroup": "^FusionGroup",
            "FusionItemKey": "^FusionItemKey"
          },
          "Values": {
            "이 아이템은 무엇인가?": "~이 아이템은 무엇인가?",
            "이 것은 시드 아이템인가?": "~이 것은 시드 아이템인가?"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Group_MainQuest": {
          "Keys": {
            "MainQuestGroupKey": "^MainQuestGroupKey",
            "MainQuestType": "^MainQuestType"
          },
          "Values": {
            "MainQuestGroupName": "~MainQuestGroupName",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Group_Quest": {
          "Keys": {
            "QuestGroup": "^QuestGroup"
          },
          "Values": {
            "GroupName": "~GroupName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Group_RecommendationQuest": {
          "Keys": {
            "RecommendationQuestGroupKey": "^RecommendationQuestGroupKey",
            "RecommendationQuestType": "^RecommendationQuestType"
          },
          "Values": {
            "RecommendationQuestGroupName": "~RecommendationQuestGroupName",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Group_RepetitionQuest": {
          "Keys": {
            "RepetitionQuestGroupKey": "^RepetitionQuestGroupKey",
            "RepetitionQuestType": "^RepetitionQuestType"
          },
          "Values": {
            "RepetitionQuestGroupName": "~RepetitionQuestGroupName",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "GuildQuest_Table": {
          "Keys": {
            "GuildQuestNo": "^GuildQuestNo"
          },
          "Values": {
            "Title": "~Title",
            "Desc": "~Desc",
            "CompleteConditionText": "~CompleteConditionText"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "InstanceDungeonPcStat": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "ClassName": "~ClassName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Item_Exchange": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "워리어": "~워리어",
            "레인저": "~레인저",
            "소서러": "~소서러",
            "자이언트": "~자이언트",
            "금수랑": "~금수랑",
            "무사": "~무사",
            "매화": "~매화",
            "발키리": "~발키리",
            "쿠노이치": "~쿠노이치",
            "닌자": "~닌자",
            "다크나이트": "~다크나이트",
            "위자드": "~위자드",
            "위치": "~위치"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Item_ImprovementResult_Table": {
          "Keys": {
            "index": "^index"
          },
          "Values": {
            "ItemName": "~ItemName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Item_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "ItemName": "~ItemName",
            "Description": "~Description",
            "PopupDesc": "~PopupDesc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "ItemExchangeSource": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "PlantDescription": "~PlantDescription",
            "PlantDetailDescription": "~PlantDetailDescription"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "MainQuest_Table": {
          "Keys": {
            "MainQuestGroupKey": "^MainQuestGroupKey",
            "QuestGroup": "^QuestGroup",
            "QuestID": "^QuestID"
          },
          "Values": {
            "AcceptConditionText": "~AcceptConditionText"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Manufacture_Table": {
          "Keys": {
            "MaterialItem1": "^MaterialItem1",
            "MaterialItemCount1": "^MaterialItemCount1",
            "MaterialItem2": "^MaterialItem2",
            "MaterialItemCount2": "^MaterialItemCount2",
            "MaterialItem3": "^MaterialItem3",
            "MaterialItemCount3": "^MaterialItemCount3",
            "MaterialItem4": "^MaterialItem4",
            "MaterialItemCount4": "^MaterialItemCount4",
            "MaterialItem5": "^MaterialItem5",
            "MaterialItemCount5": "^MaterialItemCount5"
          },
          "Values": {
            "결과물": "~결과물"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "ManufactureCondition_Table": {
          "Keys": {
            "ActionName": "^ActionName"
          },
          "Values": {
            "가공 액션 명": "~가공 액션 명"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "MarketCategoryNameTag": {
          "Keys": {
            "MarketCategory1": "^MarketCategory1",
            "MarketCategory2": "^MarketCategory2",
            "MarketFilter1": "^MarketFilter1",
            "MarketFilter2": "^MarketFilter2"
          },
          "Values": {
            "NameTag": "~NameTag"
          },
          "Actions": {
            "AllowNullKeys": true,
            "ExcludeFromMerge": {}
          }
        },
        "NpcRelation": {
          "Keys": {
            "NpcKey": "^NpcKey"
          },
          "Values": {
            "CoveredDialog": "~CoveredDialog",
            "DiscoverDialog": "~DiscoverDialog",
            "DiscoverDialog1": "~DiscoverDialog1",
            "DiscoverDialog2": "~DiscoverDialog2",
            "DiscoverDialog3": "~DiscoverDialog3",
            "DiscoverDialog4": "~DiscoverDialog4",
            "DiscoverDialog5": "~DiscoverDialog5"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Object_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "InstallationMaxCount": "~InstallationMaxCount",
            "Desc_Feature1": "~Desc_Feature1",
            "Desc_Feature2": "~Desc_Feature2",
            "ArmorMaterial": "~ArmorMaterial"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "PC_Set_Table": {
          "Keys": {
            "ClassType": "^ClassType"
          },
          "Values": {
            "ClassName": "~ClassName",
            "ClassDesc": "~ClassDesc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "PetAction_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "Name": "~Name",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "PlantExchangeGroup_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "ExchangeGroupName": "~ExchangeGroupName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "PlantWorkerPassiveSkill_Table": {
          "Keys": {
            "Key": "^Key"
          },
          "Values": {
            "Name": "~Name",
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "ProductTool_Property": {
          "Keys": {
            "ItemKey": "^ItemKey",
            "EnchantLevel": "^EnchantLevel"
          },
          "Values": {
            "ItemName": "~ItemName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Profiling": {
          "Keys": {
            "Key": "^Key",
            "DialogKey": "^DialogKey"
          },
          "Values": {
            "ProfileMessage": "~ProfileMessage"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Quest_Table": {
          "Keys": {
            "QuestGroup": "^QuestGroup",
            "QuestID": "^QuestID"
          },
          "Values": {
            "Title": "~Title",
            "Desc": "~Desc",
            "CompleteDisplay": "~CompleteDisplay",
            "CompleteConditionText": "~CompleteConditionText",
            "AcceptDialog": "~AcceptDialog",
            "AcceptButton": "~AcceptButton",
            "ProgressDialog": "~ProgressDialog",
            "RetryButton": "~RetryButton",
            "CompleteDialog": "~CompleteDialog"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "ReceipeForTown_New": {
          "Keys": {
            "ReceipeKey": "^ReceipeKey"
          },
          "Values": {
            "Name": "~Name"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "RecommendationQuest_Table": {
          "Keys": {
            "RecommendationQuestGroupKey": "^RecommendationQuestGroupKey",
            "QuestGroup": "^QuestGroup",
            "QuestID": "^QuestID"
          },
          "Values": {
            "AcceptConditionText": "~AcceptConditionText"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Region_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "AreaName": "~AreaName",
            "ReturnPositionName": "~ReturnPositionName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "RegionMap_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "RegionWeather_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "AreaName": "~AreaName",
            "ReturnPositionName": "~ReturnPositionName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "RepetitionQuest_Table": {
          "Keys": {
            "RepetitionQuestGroupKey": "^RepetitionQuestGroupKey",
            "QuestGroup": "^QuestGroup",
            "QuestID": "^QuestID"
          },
          "Values": {
            "AcceptConditionText": "~AcceptConditionText",
            "HideConditions": "~HideConditions",
            "VisibleConditions": "~VisibleConditions"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Servant_Item_Mesh_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "ItemName": "~ItemName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "ServantSet_Table": {
          "Keys": {
            "CharacterKey": "^CharacterKey"
          },
          "Values": {
            "Name": "~Name"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Skill_Table_New": {
          "Keys": {
            "SkillNo": "^SkillNo",
            "SkillLevel": "^SkillLevel"
          },
          "Values": {
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "SkillCommand": {
          "Keys": {
            "ClassType": "^ClassType",
            "SkillNo": "^SkillNo"
          },
          "Values": {
            "SkillName": "~SkillName",
            "Control": "~Control"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "SkillType_Table_New": {
          "Keys": {
            "SkillNo": "^SkillNo"
          },
          "Values": {
            "SkillName": "~SkillName",
            "SkillShortName": "~SkillShortName",
            "Control": "~Control",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "SocialAction_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "SocialActionName": "~SocialActionName",
            "ChattingCommand": "~ChattingCommand",
            "ChattingKeyword": "~ChattingKeyword",
            "ConditionMessage": "~ConditionMessage"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "SupportPointEXP_Table": {
          "Keys": {
            "TerritoryKey": "^TerritoryKey"
          },
          "Values": {
            "TerritoryName": "~TerritoryName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Territory_Table": {
          "Keys": {
            "TerritoryKey": "^TerritoryKey"
          },
          "Values": {
            "NationalName": "~NationalName",
            "TerritoryName": "~TerritoryName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Theme_Table": {
          "Keys": {
            "Theme": "^Theme"
          },
          "Values": {
            "Name": "~Name",
            "표시용1": "~표시용1"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "Title_Table": {
          "Keys": {
            "Key": "^Key"
          },
          "Values": {
            "Title": "~Title",
            "Description": "~Description"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "TitleBuff_Table": {
          "Keys": {
            "Index": "^Index",
            "Count": "^Count",
            "SkillNo": "^SkillNo"
          },
          "Values": {
            "Description": "~Description",
            "BuffDescription": "~BuffDescription"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "VehicleSkill_Table": {
          "Keys": {
            "Index": "^Index"
          },
          "Values": {
            "Name": "~Name",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "VehicleSkillOwner_Table": {
          "Keys": {
            "CharacterKey": "^CharacterKey"
          },
          "Values": {
            "이름": "~이름"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "VehicleTrainingSkill_Item_Table": {
          "Keys": {
            "ItemKey": "^ItemKey",
            "SkillKey": "^SkillKey"
          },
          "Values": {
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "VillageSiege_Table": {
          "Keys": {
            "VillageSiegeKey": "^VillageSiegeKey"
          },
          "Values": {
            "RegionName": "~RegionName"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "WorldmapMonster": {
          "Keys": {
            "IndexKey": "^IndexKey"
          },
          "Values": {
            "MonsterName": "~MonsterName",
            "RegionName": "~RegionName",
            "Desc": "~Desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "ZodiacSign_Table": {
          "Keys": {
            "ZodiacSignKey": "^ZodiacSignKey"
          },
          "Values": {
            "ZodiacName": "~ZodiacName",
            "desc": "~desc"
          },
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        }
      },
      "stringtable_cutscene": {
        "CUTSCENE": {
          "Keys": [
            "^StringFormatKey"
          ],
          "Values": [
            "~StringFormat"
          ],
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        }
      },
      "stringtable": {
        "ACTIONCHART": {
          "Keys": [
            "^StringFormatKey"
          ],
          "Values": [
            "~StringFormat"
          ],
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "GAME": {
          "Keys": [
            "^StringFormatKey"
          ],
          "Values": [
            "~StringFormat"
          ],
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "RESOURCE": {
          "Keys": [
            "^StringFormatKey"
          ],
          "Values": [
            "~StringFormat"
          ],
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "TOOL": {
          "Keys": [
            "^StringFormatKey"
          ],
          "Values": [
            "~StringFormat"
          ],
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        },
        "WEB": {
          "Keys": [
            "^StringFormatKey"
          ],
          "Values": [
            "~StringFormat"
          ],
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        }
      },
      "symbolnostringtable": {
        "SymbolNo": {
          "Keys": [
            "^StringFormatKey"
          ],
          "Values": [
            "~StringFormat"
          ],
          "Actions": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {}
          }
        }
      },
      "languagedatav2": {
        "Keys": [
          "Index",
          "Key1",
          "Key2",
          "Key3"
        ],
        "Values": [
          "Original",
          "Translation",
          "Region"
        ],
        "Actions": {
          "": {
            "AllowNullKeys": false,
            "ExcludeFromMerge": {
              "Original": true,
              "Region": true
            }
          }
        }
      },
      "Data_v3": {
        "stringtable": {
          "Entries": {
            "Index": {
              "DataType": "int",
              "EntryType": "Key"
            },
            "^StringFormatKey": {
              "DataType": "string",
              "EntryType": "Key"
            },
            "~StringFormat": {
              "DataType": "string",
              "EntryType": "Value"
            }
          },
          "Structure": "Set",
          "Layout": "StringTable",
          "Actions": {},
          "CustomTabNames": null
        },
        "languagedata": {
          "Entries": {
            "Index": {
              "DataType": "int",
              "EntryType": "Key"
            },
            "Key1": {
              "DataType": "short",
              "EntryType": "Key"
            },
            "Key2": {
              "DataType": "byte",
              "EntryType": "Key"
            },
            "Key3": {
              "DataType": "byte",
              "EntryType": "Key"
            },
            "Translation": {
              "DataType": "string",
              "EntryType": "Value"
            }
          },
          "Structure": "Set",
          "Layout": "NamelessDataTableLCFL",
          "Actions": {},
          "CustomTabNames": null
        },
        "PABR stringtable": {
          "Entries": {
            "Index": {
              "DataType": "int",
              "EntryType": "Key",
              "BunchNumber": 1
            },
            "^StringFormatKey": {
              "DataType": "string",
              "EntryType": "Key",
              "BunchNumber": 2
            },
            "~StringFormat": {
              "DataType": "string",
              "EntryType": "Value",
              "BunchNumber": 2
            }
          },
          "Structure": "Set",
          "Layout": "PABR_2BunchNCNS",
          "Actions": {},
          "CustomTabNames": null
        },
        "PABR stringtable 2": {
          "Entries": {
            "Index": {
              "DataType": "int",
              "EntryType": "Key",
              "BunchNumber": 1
            },
            "^StringFormatKey": {
              "DataType": "string",
              "EntryType": "Key",
              "BunchNumber": 2
            },
            "~StringFormat": {
              "DataType": "string",
              "EntryType": "Value",
              "BunchNumber": 2
            },
            "Marker": {
              "DataType": "int",
              "EntryType": "ED",
              "BunchNumber": 1
            }
          },
          "Structure": "Set",
          "Layout": "PABR_2BunchNCNS",
          "Actions": {},
          "CustomTabNames": null
        },
        "PABR ExpToSkillExpRate": {
          "Entries": {
            "Index": {
              "DataType": "int",
              "EntryType": "Key"
            },
            "Level": {
              "DataType": "int",
              "EntryType": "Key"
            },
            "ExpToSkillExpRate": {
              "DataType": "int",
              "EntryType": "Value"
            }
          },
          "Structure": "Table",
          "Layout": "PABR_Simple12SEND",
          "Actions": {},
          "CustomTabNames": {
            "0": "ExpToSkillExpRate_Table"
          }
        }
      }
    }

    This change will be carried over to the next version, so even if you're not updating to ALPHA2, if you have custom schemes - prepare for the upcoming change.
    The change consists of 2 key points:
    • Keys and Values were merged into single array of Entries
      This is going to improve performance, but it was mainly done to allow more precise control over the table structure. Now Launcher will not interfere with the order of columns (previously all Keys were before Values, and albeit it's still the case for all PA tables that I know of - it might change in the future).
    • EntryType added to each entry.
      It is mandatory to set. This replaces Keys/Values differentiation. Currently it's used only in languagedata v2 <=> v3 conversion (others don't really need it and rely on the correct order of Entries).
      Here are the possible types:
      • None
        Can be used for those that you can't align with other options.
      • Key
        Substitute of "Keys" entries.
      • Value
        Substitute of "Values" entries.
      • ED
        Stands for Extra Data. This is the type of data that new PABR stringtable 2 uses. If you don't like the name you can use None just as well, it'll work just fine.
    So what's new in PABR stringtable 2? It contains new data that I called "Marker". As far as I understand it just designates the row to "mark" it for developers/translators and has no actual influence on the game (don't ask me why, I have no idea, it just takes extra space, which was the reason why devs moved from previous data types to bss in the first place). I don't want to search it up in the executable file, but most likely it's either ARGB value or RGB + font size (or vice-versa), so if you want to convert that data to colorization (for example) then you can change "Marker" from "int" to a set of 4 "byte" Entries and then interpret those as you want (ARGB, RGBA, etc. etc.). "Magic number" interpretation works just as well, to mark rows, albeit visually less eye-catching.
  • There are quite a number of other minor improvements, mainly related to BDO Patcher. I'm not going to mention all of those, as it'll take me a while~...
Launcher v0.8 ALPHA2 (167 MB)



User avatar
KAMIKADzE
KAMIKADzE
KAMIKADzE
Blood Mage
Blood Mage
Posts: 3685
Joined: Thu 1998.01.01, 00:00
Honor: 3102
Points: 2423438202.90
BDO: Blader
Cabal: BL
Vindictus: Lann
C9: Blade Dancer
Gender: Male
Karma: 神風
: Assassin Black Star Winged Devotion Dedication Heavy 1st 20 HR BDO JP Volunteer BDO KR Translator BDO JP Translator BDO RU Translator Black Spirit inside Black Spirit's Partner
Medals: 17
Contact:

Re: Working on v0.8

Postby KAMIKADzE » Mon 2021.01.11, 22:59

Updated ALPHA 2.

  • Various minor fixes and changes. It's been a while since the previous update, so I can't even recall all of those myself =D, but nothing important.
  • BDO Patcher (Main window menu Tools)
    • Added tray functionality to BDO Patcher (similarly to main window and other tools, but the tray icon will only appear when you send BDO Patcher to tray). With work in progress (like converting files or auto-patching) Black Spirit's eyes in tray icon will change to green color.
    • Advanced tab
      • Added "Continuous Auto-Patching" option for JP(PA) server.
        It will be turned on by default. Uncheck it if you want to continue pressing Auto-Patch manually each time.
      • Added "Cancel Auto-Patch" button for JP(PA) server.
        Works for both continuous and usual Auto-Patching.
        I have decided not to add any kind of warning messages or notifications, for when you press it while the game is running, as it will quickly become an annoyance to those that will use it in this way (maybe I'll add a tooltip or something like that later on), but be aware that you'll need to click restore patched files button after closing the game (just like you would if you would close BDO Patcher), as BDO Patcher will not restore patched files to the running game by design (some files are locked by the game, not even mentioning that it should trigger protection).
Those are all of the main changes for now.

I also have few more announcements regarding Launcher:
  • Few "upcoming" functionalities.
    Lately I have been working with various memory(RAM)-related things and I thought that it would be nice to see some parts of those in Launcher. For my use case I didn't need any UI, extra error checking (fool-proofing), etc., but the "functionality" itself is running just fine. So you can expect:
    • SME (Simple Memory Editor). Tool for editing memory of the process. There are plenty of those on the market already, but I needed simple and quick-to-use one, so I made it. Which parts of it I plan to port into the Launcher? Probably the simplest-simple parts of finding/modifying certain numbers and text. Most likely it'll be a stand-alone program, separate from Launcher, so you'll be able to install it separately or alongside with Launcher.
    • Still haven't decided how to name the other one, possibly they'll come bundled as 1 program in the end, let's call it "Process Limiter" for now. A small backstory - I was working with memory-leaking program, that would very quickly eat all of the available RAM, thus driving any PC unusable, and probably you already guessed what happened next. There are already similar things on the market as well, in case you need one right now. The main idea is that you can limit any process to certain amount of RAM (probably will add CPU-limiter alongside as well, why not), of course that is not a good idea to do this for normal processes (like BDO for example), as it may cause all kind of troubles for that process (depends on memory management of the program), from errors to crashes, but it will do the work and that's the point.
    When can you expect those? No idea, not even going to joke about "soon™".
    Most likely what will happen is that I'll add RAM-limiting functionality to Launcher's console commands in the nearest future, and sometime later I'll move it to separate process-manipulation program.
  • I'm probably abandoning 1 part of the initial goal for v0.8 - Projects, not completely, but for now, in order to return to the proper versioning (it doesn't bother me, but it confuses users), as there were quite a few changes over the years and projects need a complete overhaul, in order to be usable for current needs, and I don't see myself going through all of it any time soon (the idea is that users will be able to download project and with a click of a button "update" loc file, repatch pazs, select a combo-wombo to partially combine multiple translations on top of each other (e.g.: mods), etc. and all of that will be configurable by the creator of the project).
    Before releasing v0.8 I still need to finish with PAZ cipher rework (compressor will probably have to wait), because right now it's hanging in there partially ignoring settings, hence the reason for 2 alpha versions.
I've already typed quite a wall of text, so I'll leave it at that. Maybe I'll announce few other undecided additions with the next update.



User avatar
KAMIKADzE
KAMIKADzE
KAMIKADzE
Blood Mage
Blood Mage
Posts: 3685
Joined: Thu 1998.01.01, 00:00
Honor: 3102
Points: 2423438202.90
BDO: Blader
Cabal: BL
Vindictus: Lann
C9: Blade Dancer
Gender: Male
Karma: 神風
: Assassin Black Star Winged Devotion Dedication Heavy 1st 20 HR BDO JP Volunteer BDO KR Translator BDO JP Translator BDO RU Translator Black Spirit inside Black Spirit's Partner
Medals: 17
Contact:

Re: Working on v0.8

Postby KAMIKADzE » Mon 2021.01.25, 12:47

Decided to post today about the upcoming rework of memory management. Up until now Launcher was very aggressive in memory management, just for the ease of coding, but I've finally came around to rework its memory management. With the next update there will be several changes to how Launcher handles its RAM usage. The whole reason of this post is to get feedback, after the update, from the community, on how it all affected the RAM usage (more on that later). From my testing so far the only drawback is occasional increase in initial RAM used to load the Launcher on its startup (by about 2%), but since I have more stuff running in Launcher, than average user, this might not be the case for you (one of the things I want you to test, most likely there will be a slight increase, at least due to the EU/NA2 and new features). After the initial load and some extra time (this time will be different for different systems, as it takes into account multitudes of factors, but most likely won't take more than an hour or so) the RAM usage should drop by about 60% (most likely will be less for average user) in comparison to about 25% in older versions (most likely is less for average user). Of course it all depends on what you do with Launcher and what it loads at start, so most likely the figures will be less impressive on your end. In more active usage new memory management works significantly better than older aggressive one (for example converting files from one format to another in BDO Patcher offloads faster and more RAM).
So far from all of my testing the new memory management is a lot better than the old one, haven't spotted any errors or troubles associated with it either. I've also improved RAM release (Ctrl+Alt+F4 by default) feature, for those that need that extra RAM asap, but as always I don't recommend to use it.
So what type of feedback do I want and why did I post it before release? That's because I want you to take a few notes on the current RAM usage of Launcher. Take notes like this:
  • Initial RAM+Page consumption after the load.
  • RAM+Page consumption after extra time (probably within 30 min for average user).
  • RAM+Page consumption after converting file with BDO Patcher. Also note which file you converted to make sure that you'll convert the same file in the same way with renewed Launcher.
  • RAM+Page consumption after pressing Ctrl+Alt+F4.
RAM and Page consumption can be checked in Log (Launcher menu => Tools => Log) or the tooltips of Log tray icons. Just make sure to note "consumed" RAM and Page, not the used.
Restart Launcher and repeat the steps 2-3 times. All of the runs should be about the same, if not then note only average of those that are alike.
After the next Launcher update repeat the steps 2-3 times once again, then compare the results.
I don't need the exact figures, I'm interested in % comparison (e.g.: if you have now 400MB and after update 200MB that will be an improvement of 50% for step X).
I don't expect a whole lot of users to do the testing and I don't need to, 2-3 people will be enough to get the idea. You don't need to do it on purpose, just do what you do (e.g. you can convert multiple files, or change the steps, just make sure to do the exact same thing with the next release) and simply don't forget to take the notes on the memory usage. It might be a slight inconvenience, but the change will be here to stay, and if it causes problems or more memory usage for you then it's in your interest to revert the change while it's still possible. All testers, that will make a proper valid testing, with properly recorded results (Step X - Y% increase/decrease, etc.), will get +1 Honor, 50 Points and a Tester medal ;)



User avatar
KAMIKADzE
KAMIKADzE
KAMIKADzE
Blood Mage
Blood Mage
Posts: 3685
Joined: Thu 1998.01.01, 00:00
Honor: 3102
Points: 2423438202.90
BDO: Blader
Cabal: BL
Vindictus: Lann
C9: Blade Dancer
Gender: Male
Karma: 神風
: Assassin Black Star Winged Devotion Dedication Heavy 1st 20 HR BDO JP Volunteer BDO KR Translator BDO JP Translator BDO RU Translator Black Spirit inside Black Spirit's Partner
Medals: 17
Contact:

Re: Working on v0.8

Postby KAMIKADzE » Tue 2021.02.02, 01:57

Initially expected to post this on Thursday, but had no time for it till today, which has given me quite a bit more time to play with reworked memory management and in the end I decided to make it a bit more aggressive =D because sometimes Windows took veeeeryyyy looooong time to free up the memory, probably due to the reason that my PC is always doing something (one of the reasons for non-aggressive approach was to reduce CPU usage, when extra RAM is not needed). Now Launcher's memory management will be lazy-smart-aggressive, basically even more complicated, but to make it simple - it'll aggressively release RAM after certain actions (like initial startup), which will slightly increase those actions duration, but most likely you won't even notice the difference. I'll be tuning it in the future. More improvements related to memory management are planned, but I'm releasing this ALPHA3 for the test mentioned in the previous post, to see the impact, prior to those improvements.
With this smart-aggressive change I'm no longer interested in comparison to the ALPHA1/2 initial RAM+Page consumption (you can still post it if you want, but it's not needed), as ALPHA3 won't take extra time to release unneeded RAM, so you can compare ALPHA3 after the load with ALPHA1/2 after extra time.
  • RAM+Page consumption after extra time (probably within 30 min for average ALPHA1/2 user; no extra time required for ALPHA3).
  • RAM+Page consumption after converting file with BDO Patcher. Also note which file you converted to make sure that you'll convert the same file in the same way with renewed Launcher.
  • RAM+Page consumption after pressing Ctrl+Alt+F4.
Other than that:
  • It's now possible to "Clear Loaded Files" in BDO Patcher advanced tab (this is not necessary, and can be used only if you no longer need to work with those files and want to release RAM taken by them).
  • EU/NA(PA) added to Launcher. For now it's just a complete duplicate of EU/NA(K), until EU/NA volunteer will reach to me with the necessary info.
  • Added Default Cipher option to BDO Patcher settings. I still haven't completely implemented it in the Launcher, so here and there it'll still ignore the settings and will use I8Q regardless of your choice, but it's quite close to v0.8.
Launcher v0.8 ALPHA3 (167 MB)



User avatar
Margo
Acolyte
Acolyte
Posts: 46
Joined: Thu 2016.10.06, 09:43
Honor: 5
Points: 164.60
BDO: Tamer
: Tester
Medals: 1

Re: Working on v0.8

Postby Margo » Wed 2021.02.03, 02:43

Initial RAM+Page consumption after the load. Improvement of 69%
RAM+Page consumption after extra time. Improvement of 8%
RAM+Page consumption after converting file with BDO Patcher. Improvement of 75%
RAM+Page consumption after pressing Ctrl+Alt+F4. Improvement of 77%

How is it so much better?


Return to "Launcher"

Who is online

Users browsing this forum: No registered users and 5 guests

Your Ad could be here.
Donate to support DoTA forum and Launcher development.