BODLoader 2024 v3 Updated
Applicable to:
Classic, Reissue v109, Reissue major versions.
2024 v3
Update:
- Reissue adaptation mods (such as FugitiveII v1.01R) can now be run seamlessly in the major version.
- Adjust the font adaptation scheme of the classic version.
2024 v2
Update:
- Inject import code during game saving to ensure BODLoader is executed before DefFuncs.py.
TalkSystem v1.1
Features:
- Fixed an issue where assigned keys would not take effect immediately while input was disabled.
- Added an option to disable the outdated integrated TalkSystem in MODS
(disable integration: default is yes). - Now the TSmmp and TSFont items in the old TSCustom configuration file will no longer be applied.
If you want to customize them, you must define the identification variable TSCustomVers = "1.0" in the configuration file
BODLoader 2024
Partial Refactoring and Optimization.
by Sryml
Extract this BODLoader to the Blade installation directory, then run the Install.bat file in Blade/BODLoader.
This BODLoader includes a new TalkSystem.
If you are prompted for a missing library at runtime, you need to install Visual C++ Redistributable 2022
Not all maps/MODs can run in the major update version because some map model files (.bw) cannot be loaded correctly.
The currently known bw map that cannot be loaded in the major version is: FugitiveIII
Features:
- New compatibility layer module for major version compatibility.
- New text type providing more concise dynamic property modifications (including text content, color, focusable, etc.).
- Implementation of font widget size adjustment in the classic version.
- Optimized menu layout with different colors for different types of information.
- Added two new line spacing units
Float 0-1.0 (based on percentage of viewport height)
Number plus unit "1em" (relative character height) - Formatted code and optimized code structure.
- Support for resizing using the same font (adjustment range from 1% to 100%) instead of creating a font file for each size.
New Fonts:
- BLFont_Title
Primarily used for titles, character range is 0-255, using the Sherwood font.
Its style is almost identical to the BOD font. - BLFont_Common
A general-purpose font with better readability for multilingual support (currently includes some Simplified Chinese characters),
using the HarmonyOS Sans Medium font. - Both fonts include redrawn angle bracket characters to maintain the BOD font style.
Compatibility Layer Module
This module provides a compatibility layer to ensure that the same code can run seamlessly across different versions of the game.
It achieves this by utilizing both function wrappers and object proxies to handle variations in API behavior and functionality between game versions.
Version Detection:
The module includes mechanisms to detect the game version at runtime.
Based on the detected version, it dynamically applies the necessary wrappers and proxies.
Currently only compatible with file operations, path-related, and text widget, other interface differences are not included.
There is also a helper program, CompatLayerAux.exe, which retrieves the game window title to determine the version.
TalkSystem
v1.0
Partial Refactoring and Optimization, along with New Features
by Sryml
Based on BODLoader 2024
Features:
- Fixed the small HUD issue in the reissue version.
- Custom NPC names can now be displayed in dialogs instead of entity names.
- The journal will now record the position of the selected entry rather than defaulting to the last entry.
- Allows the addition of spaces and explicit line breaks in dialog or journal text (previous versions ignored extra spaces and explicit line breaks).
- Added the ability to select the previous journal entry with the left mouse button.
- New dialog and journal images to prevent the dialog box from excessively blocking the screen.
- New text layout method to support automatic calculation of the maximum number of lines.
- New automatic line-wrapping feature supporting multiple languages.
- New resolution adaptation feature to ensure consistent layout across different resolutions.
- Layout recalculates when changing resolution at runtime (for reissue).
- Increased UI animation speed and higher FPS.
- Removed unnecessary saved fields from the dialog database (they were never restored); now only custom variables and triggered journal IDs are saved.
- Formatted the code and optimized the code structure.
TSCustom.py (Configuration File)
TSCustomVers = "1.0" # Configuration File version TSmmp = "MyWidgets.mmp" # widget image TSFont = "MyFont.fnt" # or bmp font TSFontScale = 0.29 # font scale AnimSpeed = 6.0 # Animation Speed AnimFPS = 60 # Animation FPS TSTalkRange = 5000 TSHideDelay = 10.0 SelectNPCArea = 10000 # Dialogue configuration MaxLines = "auto" # Maximum number of lines. Integer or string "auto" TextVsep = "0em" # Line spacing, 1em represents the height of a line of text. TextMargin = { "top": 0.07, "right": 0.078, "bottom": 0.074, "left": 0.078 } # text margins # text color ColorDlg = 255, 255, 255 # Dialogue text ColorAns = 207, 144, 49 # Answer text ColorAnsSelected = 252, 247, 167 # Selected answer HUDBrightness = 1.0 # Journal configuration jMaxLines = "auto" # Maximum number of lines. Integer or string "auto" jTextVsep = "0em" # Line spacing, 1em represents the height of a line of text. jTextMargin = { "top": 0.076, "right": 0.107, "bottom": 0.075, "left": 0.107 } # text margins # text color ColorjTitle = 255, 204, 51 # Journal title ColorjText = 252, 247, 167 # Journal text ColorjTextSelected = 255, 204, 51 # Journal selected text jHUDBrightness = 0.628
Backend:
Custom Variables:
Custom variables are now saved with the game and restored on the next game load.
You no longer need to define them in the global scope of DefFuncs.py, as custom variables will ultimately be restored with the saved data.
This is because ObjStore data is restored after DefFuncs.py.
If you want to hide an NPC's name initially and only display it after certain conditions are met, you can use custom variables to dynamically set the NPC's name.
For example:
p = Bladex.CreateEntity("Ork_1","Ork",0,0,0,"Person") Talk.SetVar ("Ork_1", "???") # Use after certain conditions are met: # Talk.SetVar ("Ork_1", "Glofror")
Currently, this is just a partial refactoring of the TalkSystem, maybe I will rewrite a new TalkSystem to provide more functions in the future. 😄
Excellent work as usual!
Thank you for your hard work, Sryml! This is something I thought was impossible!