BODLoader v 0.5a - by Masklin Feb-2002 Translation by BirdMadBoy and Josh Dahlby Description: BODLoader is a mod manager for Blade of Darkness. It is capable of downloading, installing, and uninstalling various mods and maps that are created. The main features are: - Minimum Blade source code changes. It just adds one line to the bottom of Menu.py. - Integrated into Blade's interface. - Allows to install/uninstall compatible mods - Allows to activate/deactivate compatible mods. - Every mod can add its own Mods menu. - Easy adaptation of already developed mods to make them compatible with BODLoader. - Support for customized maps. - Support for multilanguage. - Supports downloading mods and maps from internet Things left todo: - Support for definable keys. - Compatibility tests for installed mods: functions and scripts. Note: This distribution does not include example mods. All the available mods and maps can be downloaded easily from the BODLoader 'DOWNLOAD' menu....

Post news Report RSS BODLoader 2024 & TalkSystem v1.0

Applicable to: Classic, Reissue v109, Reissue major versions.

Posted by on

BODLoader 2024 v3 Updated

Applicable to:
Classic, Reissue v109, Reissue major versions.

Download BODLoader2024_v3

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

TalkSystem v1.1


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

BODLoader 2024

BODLoader 2024

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

BODLoader 2024 & TalkSystem v1.0

BODLoader 2024 & TalkSystem v1.0

BODLoader 2024 & TalkSystem v1.0

BODLoader 2024 & TalkSystem v1.0

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. 😄

Post comment Comments
sfb
sfb - - 112 comments

Excellent work as usual!

Reply Good karma Bad karma+4 votes
TheLeadHead
TheLeadHead - - 366 comments

Thank you for your hard work, Sryml! This is something I thought was impossible!

Reply Good karma Bad karma+2 votes
Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: