Compare commits
4 Commits
v4.3-beta1
...
master
Author | SHA1 | Date | |
---|---|---|---|
f920cdcaf5 | |||
40cad381af | |||
0d20a1fe44 | |||
599e9a6ef0 |
@ -191,6 +191,9 @@ class BBP_OT_game_camera(bpy.types.Operator):
|
||||
) # type: ignore
|
||||
|
||||
rotation_kind: bpy.props.EnumProperty(
|
||||
# YYC MAKR:
|
||||
# This property is not shown on UI layout,
|
||||
# but it should be translated because it is not PURE assistant property.
|
||||
name = "Rotation Angle Kind",
|
||||
description = "",
|
||||
items = _g_EnumHelper_RotationKind.generate_items(),
|
||||
@ -198,9 +201,9 @@ class BBP_OT_game_camera(bpy.types.Operator):
|
||||
translation_context = 'BBP_OT_game_camera/property'
|
||||
) # type: ignore
|
||||
preset_rotation_angle: bpy.props.EnumProperty(
|
||||
# I18N: Property not showen should not have name and desc.
|
||||
# name = "Preset Rotation Angle",
|
||||
# description = "",
|
||||
name = "Preset Rotation Angle",
|
||||
description = "",
|
||||
translation_context = 'BBP_OT_game_camera/property',
|
||||
options = {'HIDDEN'},
|
||||
items = _g_EnumHelper_RotationAngle.generate_items(),
|
||||
default = _g_EnumHelper_RotationAngle.to_selection(RotationAngle.Deg0),
|
||||
|
@ -1,18 +1,25 @@
|
||||
# Add Floor
|
||||
|
||||
!!! info "Not latest version"
|
||||
This translated page is not the latest version because the modification of source page. Please see source page of the latest version.
|
||||
!!! info "BME is extensible"
|
||||
BME's floor adder is extensible, each item in the menu is actually described by a set of JSON data. You can read the [Technical Information](./tech-infos.md) section to learn how we write this JSON, and you can even expand the types of floors that BME can create to suit your needs.
|
||||
|
||||
## Start Generating
|
||||
|
||||
### From Menu
|
||||
|
||||
In the 3D view, click `Add - Floors` to expand the Add Floors menu. The menu is shown below.
|
||||
|
||||

|
||||
|
||||
Click on the menu to see all supported floor types in the submenu that pops up. Their names and icons hint at the style and shape of the floor it is intended to create.
|
||||
Click on the menu to see all supported floor types by categories in the submenu that pops up. Their names and icons hint at the style and shape of the floor it is intended to create.
|
||||
|
||||
!!! info "BME is extensible"
|
||||
BME's floor adder is extensible, each item in the menu is actually described by a set of JSON data. You can read the [Technical Information](./tech-infos.md) section to learn how we write this JSON, and you can even expand the types of floors that BME can create to suit your needs.
|
||||
### From Sidebar
|
||||
|
||||
Additionally, you can press `N` on keyboard to expand the sidebar of 3D view and find `Ballance` tab inside it. You also can find these adder by clicking it and expanding `Floor` panel as presented in following image:
|
||||
|
||||

|
||||
|
||||
Comparing with menu, the advantage of this solution is that the sidebar is persistent in UI layout. It is more convenient and effective when adding multiple floors by reducing the time of repetitive opening add menu. Also, there is Rail and Component adder panels under this tab. This will not be introduced again in following chapters.
|
||||
|
||||
## Configure Floor
|
||||
|
||||
@ -26,11 +33,14 @@ Then it also asks us to provide the height of the platform, which defaults to 5,
|
||||
|
||||
Finally, it tells us which sides of the floor we need to configure to display. Note that Top and Bottom are the top and bottom surfaces along the height direction (Z axis), while Front, Back, Left, and Right are the front, back, left, and right surfaces when looking down with your head on the -X axis and your eyes on the -Z axis. You may notice that there is a perspective cube in the center of these six face buttons, and in fact the positions of these six face options correspond to the positions of the six faces of this perspective cube.
|
||||
|
||||
## Extra Transform
|
||||
|
||||
At the bottom of the BME configuration dialog, you can always find an area called Extra Transform. In this area, there are two options for configuration: extra translation and rotation. These fields are primarily intended for visual edit.
|
||||
|
||||
Before explaining the actual functions of these fields, it is important to understand that the floor created by BME is always generated based on the current position of the 3D cursor. In other words, wherever the 3D cursor is located, the newly created surface will be positioned accordingly. This design primarily considers visual edit, allowing users to first move the 3D cursor to the desired location for adding a floor, and then add the corresponding BME structure. This enables users to preview results in real-time while adjusting parameters. Sometimes, the position of your 3D cursor may not be entirely accurate, or the final generated structure may require certain rotation to meet your expectations. In such cases, Extra Transform fields can be utilized to apply extra translation and rotation to the generated structure in relation to the 3D cursor, ensuring it is accurately positioned. In this way, the correct results can be previewed when adjusting the parameters.
|
||||
|
||||
## Tips
|
||||
|
||||
Each floor type has a different number of configuration entries, so for different floor types, you will need to follow the configuration hint text to understand what the corresponding configuration does. Some floor types may have a large number of configuration entries, while others may have no configuration entries at all.
|
||||
|
||||
The default values for the floor type configuration are set to the values that were most commonly used when the floor was created. The values are reset to the defaults each time the floor type is switched or recreated.
|
||||
|
||||
|
||||
|
||||
|
@ -1,8 +1,5 @@
|
||||
# Compile and Distribute Plugin
|
||||
|
||||
!!! info "Not latest version"
|
||||
This translated page is not the latest version because the modification of source page. Please see source page of the latest version.
|
||||
|
||||
This page will guide you in compiling the plugin as well as distributing it.
|
||||
|
||||
## Compiling LibCmo with BMap
|
||||
@ -15,11 +12,93 @@ Then we need to configure PyBMap, which comes with LibCmo. Please follow the man
|
||||
|
||||
Then we need to copy the configured PyBMap to our project under `bbp_ng/PyBMap` to complete this step.
|
||||
|
||||
## Generate Thumbnails and Compress JSON
|
||||
## Generate Resources
|
||||
|
||||
BBP comes with a built-in set of custom icons, as well as the JSON files needed by its component BME to describe the structure. By batch generating thumbnails and compressing JSON operations, the size of these parts can be reduced, making them suitable for loading in Blender and easier to distribute.
|
||||
BBP needs some resoures to run, and these resources need to be processed before using them.
|
||||
|
||||
Go to the `bbp_ng/tools` folder and run `python3 build_icons.py` which will batch generate thumbnails (this requires the PIL library, please install it via pip in advance). It actually generates thumbnails from the original images in the `bbp_ng/raw_icons` directory and stores them in the `bbp_ng/icons` folder. Running `python3 build_jsons.py` will compress the JSON, which actually reads, compresses, and writes the raw JSON files from the `bbp_ng/raw_jsons` directory into the `bbp_ng/jsons` folder.
|
||||
For generating these resrouces, we firstly need to navigate to `scripts` directory, and execute `uv sync` to restore the environment for scripts (Astral UV required).
|
||||
|
||||
### Generate Thumbnails
|
||||
|
||||
BBP comes with a built-in set of custom icons, however these icons are stored as their original size in repository for keeping convenient editing and high quality. We need to reduce the size of these icons to make them are easy to be loaded on Blender and easy for distribution by generating thumbnails for them.
|
||||
|
||||
Execute `uv run build_icons.py` to generate thumbnails. It actually generates thumbnails from the original images in the `assets/icons` directory and stores them in the `bbp_ng/icons` folder.
|
||||
|
||||
### Generate JSONs
|
||||
|
||||
The BME component in BBP relies on a series of JSON files to describe the prototype. These profiles are stored in the library in JSON5 format, making them easy for writers to read and write. We converte these JSON5 files to JSON files and compressing their size makes them easier to load in Blender, as well as to facilitate plugin distribution, by batchly generating them.
|
||||
|
||||
If you are the plugin developer or writer of these prototypes, you need to do an additional thing before generating these JSON files: verify these JSON files. The BBP plugin will assume that these JSON files are correct when loading them. If you put a JSON file with errors (e.g. missing some fields or has some typos, etc.), it will cause Blender to throw an error when creating prototype. Therefore, it is necessary to verify these JSON files. Execute `uv run validate_jsons.py` to verify all prototype files. If there are no errors, it means that everything is okey. It is important to note that the validator is not perfect, it can only verify the data as much as possible to ensure that some common erros (e.g. typo in field name) will not occur. It can not make 100% sure about that there is no error inside these files.
|
||||
|
||||
For compilers, all you need to do is that execute `uv run build_jsons.py` to generate JSON files. It actually reads, compresses, and writes the original JSON5 files in `assets/jsons` directory to the `bbp_ng/jsons` folder in JSON format.
|
||||
|
||||
### Generate Element Meshes
|
||||
|
||||
BBP has built-in mesh data for all Ballance element placeholders. Execute `uv run build_jsons.py` to deploy these meshes, which simply copies the mesh files under `assets/jsons` folder to `bbp_ng/jsons` folder.
|
||||
|
||||
## Translation
|
||||
|
||||
The BBP plugin supports multilingual functionality, so we need to extract and update the content to be translated before the official release, and then proceed to the next step after translating all the content.
|
||||
|
||||
Blender's multilingual support for plugins is not satisfactory, and BBP's design is relatively special, so BBP adopts a different way to manage translations than the official recommended plugin translation management method of Blender: that is, use PO files to manage translations instead of the officially recommended Python script format.
|
||||
|
||||
!!! info "Do NOT submit translations in Python format"
|
||||
As mentioned above, BBP uses PO files to manage translations, rather than the Python source format recommended by Blender. However, this does not prevent Blender's multilingual plugins from writing translations in the Python source format into the plugin's source code. Submitting duplicate translations not only increases the repository size but also complicates management. Therefore, BBP requires you to delete the Python-format translations before submission.
|
||||
|
||||
The specific operational method is to open the `bbp_ng/UTIL_translation.py` file before submission and change the value of the translation tuple variable `translations_tuple` to an empty tuple (i.e., `translations_tuple = ()`).
|
||||
|
||||
### Extract Translation Template
|
||||
|
||||
Before translating, it is important to first recognize that the text requiring translation for BBP consists of two parts. One part is the BBP plugin itself, whose text to be translated can be extracted by Blender's built-in multilingual plugin. The other part is the JSON file in the BME component that describes the structure, where the names of various showcase fields need to be translated. However, this part cannot be handled by Blender's multilingual plugin, as it is dynamically loaded. Fortunately, we have written an extractor that can extract the relevant text to be translated from the BME's JSON file. To do this, execute `uv run extract_jsons.py` in the folder where the previous script was run, and the script will extract the text to be translated and write it into the `i18n/bme.pot` file. Therefore, the next task is simply to extract the translation for the plugin portion.
|
||||
|
||||
First, you need to enable Blender's built-in multilingual plugin, "Manage UI translations". To enable it, you may also need to download the source code and translation repository corresponding to your version of Blender. For specific instructions, please refer to the [official Blender Documentation](https://developer.blender.org/docs/handbook/translating/translator_guide/). Once you have enabled the plugin and configured the appropriate related paths in the preferences, you can find the "I18n Update Translation" panel under the "Render" panel. You can then proceed to extract the translations by following these steps:
|
||||
|
||||
1. First, ensure that all Blender processes are closed; otherwise, the plugin will remain in a loading state, and modifications to the translated tuple variables will not take effect.
|
||||
1. Change the value of the translation tuple variable `translations_tuple` in the plugin to an empty tuple (refer to the earlier mentioned submission notes). Setting the translation tuple to empty can reset the translation status of the plugin, ensuring that subsequent text extraction operations are not affected by any existing translations.
|
||||
1. Open Blender, go to the "I18n Update Translation" panel, click "Deselect All" to uncheck all languages, and then only check the boxes next to the following languages (as BBP currently supports a limited number of languages):
|
||||
* Simplified Chinese (简体中文)
|
||||
1. Click the "Refresh I18n Data" button at the bottom of the section, then in the pop-up window, select "Ballance Blender Plugin". After a short wait, the plugin will complete the extraction of the characters to be translated. At this point, the plugin merely extracts the translation fields into the source code of the plugin in a format recommended by Blender, using Python source code.
|
||||
1. In order to obtain the desired editable POT file, you need to click the "Export PO" button. In the pop-up window, select the "Ballance Blender Plugin", and you can choose any folder for saving the location (for example, the desktop, as it will generate many files, including our desired POT file). Uncheck the "Update Existing" option on the right and ensure that "Export POT" is checked, then proceed to save. After the export is complete, you will find a translation template file named `blender.pot` and numerous `.po` files named after language identifiers in the folder you selected.
|
||||
1. You need to copy `blender.pot` to the `i18n` folder and rename it to `bbp_ng.pot`. At this point, we have extracted all the content that needs to be translated.
|
||||
|
||||
### Merge Translation Template
|
||||
|
||||
There are currently two POT files in the `i18n` folder, which represent two sets of extracted text awaiting translation. We need to merge them. Execute `xgettext -o blender.pot bbp_ng.pot bme.pot` in the `i18n` folder to perform the merge. The merged `i18n/blender.pot` will serve as the translation template.
|
||||
|
||||
### Create New Language Translation
|
||||
|
||||
If BBP needs to support more languages in the future, you will need to create the corresponding PO translation files for the new languages from the POT files. You can create them through one of the following methods.
|
||||
|
||||
* By using software such as Poedit to open the POT file, select function like create new translation from it, and then save to create.
|
||||
* Create a new language PO translation file using commands such as `msginit -i blender.pot -o zh_HANS.po -l zh_CN.utf8`.
|
||||
|
||||
There are various ways to create, but the only point to note is that you need to set the file name (if the file name is incorrect, Blender will refuse to accept it) and the area name (which will be used when using `msginit`, with the purpose of ensuring UTF8 format encoding) as shown in the table below.
|
||||
|
||||
|Language|File Name|Area Name|
|
||||
|:---|:---|:---|
|
||||
|Simplified Chinese (简体中文)|`zh_HANS.po`|`zh_CN.utf8`|
|
||||
|
||||
### Update Language Translation
|
||||
|
||||
Creating new language translations is not common; a more common practice is to update existing language translation files based on translation templates. You can update them through one of the following methods.
|
||||
|
||||
* Open the PO file using software such as Poedit, and then select to update from the POT file.
|
||||
* Update using commands such as `msgmerge -U zh-HANS.po blender.pot --backup=none`.
|
||||
|
||||
### Start Translating
|
||||
|
||||
After updating the PO translation files for all languages, you may choose your preferred method for translation, such as using Poedit or editing directly.
|
||||
|
||||
The BBP requires the use of the KDE community's translation standards to standardize the translations of plugins. For example, you can find the KDE community's translation standards for Simplified Chinese on the [KDE China](https://kde-china.org/tutorial.html) website.
|
||||
|
||||
### Write Translation Back
|
||||
|
||||
The translation in PO format cannot be recognized by Blender. Therefore, after the translation is completed, you also need to utilize Blender's multilingual plugin to convert the PO file back into a translation in Python source code format that Blender can recognize. Due to issues with the design of Blender's multilingual plugin, we cannot directly use the "Import PO" function to convert the PO file back into Python source code format. You need to follow the steps below sequentially in order to import the PO translation into the plugin:
|
||||
|
||||
1. First, ensure that all Blender processes are closed; otherwise, the plugin will remain in a loading state, and modifications to the translated tuple variables will not take effect.
|
||||
1. Change the value of the translation tuple variable `translations_tuple` in the plugin to an empty tuple (refer to the earlier notes regarding submissions). The purpose of this step is to ensure that the entire plugin lacks translation entries, so that when using the "Import PO" feature, Blender's multilingual plugin will consider all fields stored in the PO file as needing translation, thereby preventing situations where only a portion of the translations is imported (as the translations for the BME portion were merged later).
|
||||
1. Open Blender, navigate to the "I18n Update Translation" panel, and following the procedure used when extracting the translation template, select only the languages that need to be translated from the language list.
|
||||
1. Click the "Import PO" button in the bottom row, then select the "Ballance Blender Plugin" in the pop-up window, and choose the `i18n` folder for import. In this way, we have completed the process of importing the PO file into a Python source code format recognizable by Blender.
|
||||
|
||||
## Packaging
|
||||
|
||||
@ -29,13 +108,11 @@ Assuming that the final output file is `redist/bbp_ng.zip`. If you are in the ro
|
||||
|
||||
Blender will package the plugin according to the instructions in `blender_manifest.toml` with the following files excluded:
|
||||
|
||||
* `bbp_ng/raw_icons`: raw thumbnail folder.
|
||||
* `bbp_ng/raw_jsons`: raw JSON folder.
|
||||
* `bbp_ng/tools`: tools for compiling.
|
||||
* `bbp_ng/.style.yapf`: code style description file.
|
||||
* `bbp_ng/.gitignore`: gitignore
|
||||
* `bbp_ng/icons/.gitkeep`: folder placeholder
|
||||
* `bbp_ng/jsons/.gitkeep`: folder placeholder
|
||||
* `__pycache__/`:Python cache.
|
||||
* `.style.yapf`:code style description file.
|
||||
* `.gitignore`:gitignore
|
||||
* `.gitkeep`:folder placeholder
|
||||
* `.md`:documentation
|
||||
|
||||
## Generating Help Documentation
|
||||
|
||||
|
@ -19,7 +19,9 @@ The BBP plugin currently has 2 settings to configure.
|
||||
|
||||
Please fill in the `Texture` directory of Ballance, from which the plugin will use the external texture files (i.e. the ones Ballance originally came with). Click on the folder button on the right to browse the folders and select it.
|
||||
|
||||
This is crucial for BBP to work properly, and only if it is filled out correctly will BBP not make errors during operation.
|
||||
This option is almost mandatory. If you don't fill it, various core functions like Virtools file import export, BME creation, rail creation, etc. will not be available (button is in grey color).
|
||||
|
||||
This is crucial for BBP to work properly, and only if it is filled correctly will BBP not make errors during operation.
|
||||
|
||||
### No Component Collection
|
||||
|
||||
|
@ -1,8 +1,5 @@
|
||||
# Import and Export Virtools Document
|
||||
|
||||
!!! info "Not latest version"
|
||||
This translated page is not the latest version because the modification of source page. Please see source page of the latest version.
|
||||
|
||||
!!! warning "This is experimental content"
|
||||
Native importing and exporting of Virtools documents is experimental content for the BBP plugin, it may have many problems, see the [Report Issue](./report-bugs.md) section to learn more. When problems are encountered, please report them. the authors of the BBP plugin are not responsible for any consequences resulting from problems with the BBP plugin.
|
||||
|
||||
@ -12,7 +9,7 @@ Virtools files can be imported by clicking `File - Import - Virtools File`. Impo
|
||||
|
||||
### Conflict Options
|
||||
|
||||
The Conflict Options section indicates what to do when the importer encounters duplicate object names. There are 4 levels, for Object, Mesh, Material and Texture. There are 2 ways to handle it: Rename and Use Current. When Rename is selected and a duplicate name is encountered, a suffix will be added to the name to make it unique. By choosing Use Current, the import of the item from the file will be ignored and the item with the same name will be used instead, which already exists in the Blender document.
|
||||
The Conflict Options section indicates what to do when the importer encounters duplicate object names. There are 5 levels, for Object, Light, Mesh, Material and Texture. There are 2 ways to handle it: Rename and Use Current. When Rename is selected and a duplicate name is encountered, a suffix will be added to the name to make it unique. By choosing Use Current, the import of the item from the file will be ignored and the item with the same name will be used instead, which already exists in the Blender document.
|
||||
|
||||
!!! info "Differences from Virtools conflict resolution"
|
||||
Compared to the conflict resolution dialog in Virtools, the conflict resolution options provided by the BBP plugin do not support replacement, and the granularity is not fine-tuned to individual instances, but only for an entire type. So you can't set a different conflict resolution for each instance of a conflict individually. However, this setting is sufficient for most scenarios.
|
||||
@ -21,7 +18,7 @@ The default values for the options in the Conflict Options section are the solut
|
||||
|
||||
### Virtools Params
|
||||
|
||||
It is well known that Virtools uses a system-based multi-byte character encoding to process documents, and is therefore prone to what is known as garbling; Blender itself does not suffer from garbling, however, if we do not read a Virtools document with the correct encoding, the characters stored in it may still appear garbled when the Virtools document is imported into Blender. The Encodings property in the Virtools Params section specifies the encodings for reading Virtools documents. Multiple encodings can be specified, separated by a `;` (semicolon). Some common encodings are listed below:
|
||||
It is well known that Virtools uses a system-based multi-byte character encoding to process documents, and is therefore prone to what is known as garbling; Blender itself does not suffer from garbling, however, if we do not read a Virtools document with the correct encoding, the characters stored in it may still appear garbled when the Virtools document is imported into Blender. The Encodings property in the Virtools Params section specifies the encodings for reading Virtools documents. Multiple encodings may be specified, with the encodings higher up in the list being prioritized for use. The next level of encoding will only be utilized when decoding with the current level fails. Some common encodings are listed below:
|
||||
|
||||
* cp1252: Western European encoding used by Ballance.
|
||||
* gbk: The default encoding for Chinese Windows system.
|
||||
@ -42,7 +39,12 @@ Virtools files can be exported by clicking `File - Export - Virtools File`. Clic
|
||||
|
||||
### Export Target
|
||||
|
||||
The Export Target section is used to determine which objects you need to export to a Virtools document. You can choose to export a collection or an object and select the corresponding collection or object below. Note that selecting a collection will export the objects in the internal collection as well, i.e. exporting nested collections is supported.
|
||||
The Export Target section is used to determine which objects you need to export to a Virtools document. You can choose 1 of 4 options:
|
||||
|
||||
* Object: Export single object. Select an object in following input box.
|
||||
* Collection: Export single collection. **This is the most commonly used option.** Select a collection in following input box. Note that selecting a collection will export the objects in the internal collection as well, i.e. exporting nested collections is supported.
|
||||
* Selected Object: Export selected objects. Select the objects to be exported before enter this dialog.
|
||||
* All Objects: Export all objects inside this document. This option should be used with caution. Because it brutely iterate the list of document objects to export, and it is likely to export many objects you don't need.
|
||||
|
||||
### Virtools Params
|
||||
|
||||
@ -59,3 +61,11 @@ The Ballance Params section contains parameters that optimize the export process
|
||||
Successive Sector is an option to work around a bug that occurs when exporting groups of sectors. For some reason, if there are no elements in a sector (actually, no objects are grouped in a sector group), the export plugin thinks that the sector group doesn't exist and misses the export. And since Ballance determines the final sector, i.e. the sector where the spaceships appears, by incrementing the number of sectors from 1 to the last sector group that exists, the combination of the two causes Ballance to incorrectly determine the number of sectors in the map, and thus display the spaceships in the wrong sector, which is an export bug. when this option is checked, the exported document will be pre-defined according to the number of sectors specified in the Ballance Map information in the current Blender file. When this option is checked, the exported document will pre-create all of the sectors according to the number of sectors specified in the Ballance map information in the current Blender file before exporting, so that you don't miss creating some sector groups, and the spaceships will be displayed in the correct sectors.
|
||||
|
||||
This option is usually checked when exporting playable maps, if you just want to export some models then you need to turn this option off, otherwise it will create a lot of useless sector groups in the final file.
|
||||
|
||||
## Can't Import or Export
|
||||
|
||||
In general, after you have properly installed and configured the plugin according to the previously introduced steps, you should theoretically be able to use the import and export functions for Virtools documents. However, unexpected issues may arise. The inability to import or export refers to the buttons for importing and exporting Virtools documents being greyed out and unclickable. You will need to follow the steps outlined below for checking. If you are referring to an error occurring during the import and export process, please refer to the warning information at the top of this page.
|
||||
|
||||
First, check whether you have correctly configured the `External Texture Folder` setting of the plugin in the [Configure Plugin](configure-plugin.md) section. If you have not configured it, you will naturally be unable to import or export Virtools files. This is because importing and exporting Virtools files relies on the original Ballance texture data. Please configure this setting carefully according to the tutorial.
|
||||
|
||||
If you are certain that you have set the correct texture path, you may try clicking the menu `Window - Toggle System Console` to open the console. There may be some relevant error messages outputted there, such as a failure to load the underlying BMap library, etc. The failure to load the underlying BMap library typically only occurs on machines with rare architectures, such as Windows systems using Snapdragon processors, as the plugin we packaged does not include the Virtools file underlying reading library BMap that supports these platforms. In this situation, you have two options: one is to report this to the developers and wait for support, and the other is to compile the library on yourself (this is only recommended for those with extensive computer knowledge).
|
||||
|
@ -3,6 +3,16 @@
|
||||
!!! info "May be Outdated"
|
||||
This document is translated from other languages and may not always be up to date.
|
||||
|
||||
<!---
|
||||
!!! info "Not latest version"
|
||||
This translated page is not the latest version because the modification of source page. Please see source page of the latest version.
|
||||
--->
|
||||
|
||||
<!---
|
||||
!!! info "No Translation"
|
||||
This page has not been translated. Please see source page of this page.
|
||||
--->
|
||||
|
||||
Welcome to the Ballance Blender Plugin, the user manual for the free and open source Ballance map creation suite.
|
||||
|
||||
Ballance Blender Plugin (aka BBP) is a plugin that focuses on the creation of Ballance custom maps. It offers a wide range of features that can be used to create Ballance maps by anyone from novice to experienced mappers. BBP provides the ability to import and export formats used in Ballance maps, and a series of convenient features tailored to the creation of Ballance maps: for novice mappers, you can quickly assemble a map with prefabricated road blocks, and for the experienced mappers, the mapping tools needed to build complex structures are also provided.
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
## Determining the Version
|
||||
|
||||
The principle of BBP's Blender support is to support the latest **LTS** version, and to spend some time migrating the plugin after the latest LTS version is released. The current plugin version **4.0** is based on Blender version **4.2.x**.
|
||||
The principle of BBP's Blender support is to support the latest **LTS** version, and to spend some time migrating the plugin after the latest LTS version is released. The current plugin version **4.3** is based on Blender version **4.5.x**.
|
||||
|
||||
Theoretically, BBP will work fine on other versions of Blender if no major changes have been made. For example you can try to run BBP plugin based on Blender 3.6 LTS on Blender 4.0. However, the developers of BBP do not deal with bugs that only appear in non-LTS versions. before installing the plugin, please select the appropriate version.
|
||||
|
||||
|
@ -14,9 +14,11 @@ Legacy alignment supports aligning multiple objects to a single object by first
|
||||
|
||||
In the panel, `Align Axis` specifies the axis you want to align to, you can multi-select here to specify more than one axis, without specifying any axis you will not be able to do the alignment operation, and thus you will not be able to click the `Apply` button.
|
||||
|
||||
`Current Object` is the alignment reference object, which is the active object in the scene, usually the last object you selected. This option specifies what value you need to reference for alignment, with `Min` (minimum value on axis), `Center (Bounding Box)` (center of the bounding box), `Center (Axis)` (origin of the object), and `Max` (maximum value on axis) available. These options are consistent with the alignment options in 3ds Max.
|
||||
`Current Object` indicates which instance was picked as the alignment reference. You may choose an active object in the scene, typically the last object you selected, or the 3D cursor. It is important to note that if you select active object mode, the active object will be excluded from the alignment operation and will not be moved, as the reference object is immovable. Conversely, if you select the 3D cursor, the active object will be included within the scope of the alignment operation.
|
||||
|
||||
The `Target Objects` are the objects that are being aligned, there may be many of them, in this option it is also specified what values you need to refer to them for alignment. The options have the same meaning as `Current Object`.
|
||||
`Current Object Align Mode` is the alignment mode for aligning to a reference object, which only appears when you select the active object in `Current Object`. Since the 3D cursor is merely a point, while objects occupy a certain space, we need to select a point in this space according to a specific pattern (described later) to be used for subsequent alignment operations. In this option, you specify what value you need to align to, with available selections including `Min` (minimum value on axis), `Center (Bounding Box)` (center of the bounding box), `Center (Axis)` (origin of the object), and `Max` (maximum value on axis). These options are consistent with the alignment options in 3ds Max.
|
||||
|
||||
The `Target Objects Align Mode` are the objects that are being aligned, there may be many of them, in this option it is also specified what values you need to refer to them for alignment. The options have the same meaning as `Current Object`.
|
||||
|
||||
The `Apply` button, when clicked, will press the current page's configuration into the operation stack and reset the settings above, allowing you to start a new round of alignment operations without having to perform a legacy alignment again. The number of operations in the stack is shown below the `Apply` button.
|
||||
|
||||
|
@ -1,8 +1,5 @@
|
||||
# Add Rail
|
||||
|
||||
!!! info "Not latest version"
|
||||
This translated page is not the latest version because the modification of source page. Please see source page of the latest version.
|
||||
|
||||
In the 3D view, click `Add - Rails` to expand the Add Rails menu. The menu is shown on the left side of the image below.
|
||||
|
||||

|
||||
@ -63,6 +60,8 @@ The first thing you need to do with an arc rail is to specify the Angle and Radi
|
||||
|
||||
Steps of the arc rail, the number of steps indicates the number of segments of the arc rail, the larger the number, the smoother the arc rail looks, relatively, the vertices will be more, the storage space and rendering requirements are also higher, so you need to choose a reasonable value.
|
||||
|
||||
The Flip option for arc rail allows you to flip (in other word, mirror) the generated structure along a specified axis, and the flip options available on all three axes can accommodate the generation of all possible arc rail structures.
|
||||
|
||||
Arc rails also support double-rail mono-rail selection, you can create mono-rail arc rails and double-rail arc rails. The capping attribute is also supported.
|
||||
|
||||
### Spiral Rail
|
||||
@ -73,7 +72,7 @@ Spiral rails have an Iterations property, which indicates how many times the rai
|
||||
|
||||
The spiral rail also needs to set the Steps property, which has the same meaning as the arc rail. However, it should be noted that the number of steps refers to the number of steps in each iteration, not the overall number of steps. Therefore, when adjusting the iteration attribute, you do not need to change the Steps attribute again.
|
||||
|
||||
Side Spiral Rail also has a capping property.
|
||||
Side Spiral Rail also has capping and flip property.
|
||||
|
||||
### Side Spiral Rail
|
||||
|
||||
@ -82,3 +81,9 @@ Side Spiral Rail, similar to spiral rail, but the ball is rolled along the side,
|
||||
Side Spiral Rail does not have a Screw property, because Side Spiral Rail is designed so that adjacent spins share a common edge, so the screw is fixed.
|
||||
|
||||
The Radius, Iterations and Steps attributes in the Side Spiral Rail settings have the same meaning as the spiral rail. Side Spiral Rail also have a capping attribute.
|
||||
|
||||
Spiral Rail also has capping and flip property.
|
||||
|
||||
## Extra Transform
|
||||
|
||||
When adding straight rails and curved rails, you can always set a property known as the Extra Transform. Its effect is consistent with the Extra Transform field in adding floors, both serving the purpose of visual edit.
|
||||
|
@ -1,8 +1,5 @@
|
||||
# Report Issue
|
||||
|
||||
!!! info "Not latest version"
|
||||
This translated page is not the latest version because the modification of source page. Please see source page of the latest version.
|
||||
|
||||
## What Can Go Wrong
|
||||
|
||||
BBP is not perfect, and since BBP's Virtools file import/export module is written in C++, BBP is more prone to errors than other plugins, and the consequences of errors can be more serious (including but not limited to memory leaks, accidental deletion of user files, etc.).
|
||||
@ -15,7 +12,7 @@ In Blender, you will observe if the plugin execution goes wrong:
|
||||
|
||||
## What Part Went Wrong
|
||||
|
||||
For the BBP plugin, if you observe something like `BMap operation failed` in the Python exception output, or the `IronPad.log` file in the `<Plugin-Install-Location>/PyBMap` folder, it means that The BBP plugin's BMap section, written in C++, is in error, and **you need to immediately save your current Blender document and exit Blender**. Because the plugin is in an abnormal state at this point, you should not continue any operations.
|
||||
For the BBP plugin, if you observe something like `BMap operation failed` in the Python exception output, or the `blender.exe.<xxx>.log` file (`<xxx>` is a string of numbers) in the `%LOCALAPPDATA%/CrashDumps` folder (`%LOCALAPPDATA%` is a Windows environment variable. If you are not familiar with its purpose, you can simply copy and paste this address directly into the Windows Explorer, which will automatically navigate you to the correct location), it means that The BBP plugin's BMap section, written in C++, is in error, and **you need to immediately save your current Blender document and exit Blender**. Because the plugin is in an abnormal state at this point, you should not continue any operations.
|
||||
|
||||
If there is no such thing as the above, then this is just a normal Python code execution error and you don't need to worry too much about it, but the error is still fatal and it is recommended to exit Blender and report the error after doing all the necessary operations.
|
||||
|
||||
@ -29,4 +26,4 @@ If you can't do that and you have proper way to contact with plugin author, then
|
||||
|
||||
First of all you need to describe in detail how you raise this error and what are the results of this error. If you can upload the documentation that led to the error, please try to do so (if it's not convenient to post it publicly, you can send it to the author through a private way such as email).
|
||||
|
||||
You also need to provide the Python stack report output in the Blender console (use `Window - Toggle System Console` to open the console). If your error is an error in the BMap section, you also need to provide the `IronPad.log` and `IronPad.dmp` files in the `<Plugin-Install-Location>/PyBMap` folder to make it easier for developers to locate the error.
|
||||
You also need to provide the Python stack report output in the Blender console (use `Window - Toggle System Console` to open the console). If your error is an error in the BMap section, you also need to provide the error log file `blender.exe.<xxx>.log` (where `<xxx>` represents a string of numbers) and the memory dump file `blender.exe.<xxx>.dmp` generated by the BMap module. These files can also be found in the `%LOCALAPPDATA%/CrashDumps` folder.
|
||||
|
@ -1,12 +1,30 @@
|
||||
# Technical Information
|
||||
|
||||
## Standards and Protocol Documentation
|
||||
|
||||
* BM File Specification: https://github.com/yyc12345/gist/blob/master/BMFileSpec/BMSpec_ZH.md
|
||||
* Mapping toolchain standards and format of files in the `meshes' folder: https://github.com/yyc12345/gist/blob/master/BMFileSpec/YYCToolsChainSpec_ZH.md
|
||||
* Format of the JSON file for BMERevenge: https://github.com/yyc12345/gist/blob/master/BMERevenge/DevDocument_v2.0_ZH.md
|
||||
|
||||
## Development Auxiliary Package
|
||||
|
||||
This plugin works with the `fake-bpy-module` module to implement type hinting to speed up development. Use the following command to install Blender's type hinting library.
|
||||
|
||||
* Blender 3.6: `pip install fake-bpy-module-latest==20230627`
|
||||
* Blender 4.2: `pip install fake-bpy-module-latest==20240716`
|
||||
* Blender 4.5: `pip install fake-bpy-module-latest==20250604`
|
||||
|
||||
The main reason for doing this is that `fake-bpy-module` doesn't release an official package for the given Blender version, so I had to install it by choosing the daily build closest to the release time of the corresponding Blender version.
|
||||
The primary reason for this is that the `fake-bpy-module` has not timely released packages suitable for the specified Blender version. Therefore, I can only install it by selecting the daily build version that is closest to the date of the corresponding Blender version leaving from the `main` branch (as daily builds only compile from the `main` branch).
|
||||
|
||||
!!! question "Why not use Blender's official bpy module?"
|
||||
Blender provides an official package named `bpy` on PyPI, but we will not adopt it as our development auxiliary package. This is because it basically repackages Blender into a module (which basically means you are downloading Blender again), allowing you to manipulate Blender through Python. This is contrary to our purpose of using a package that only provides type hints to assist in plugin development.
|
||||
|
||||
## Version Rule
|
||||
|
||||
The version number format of BBP follows [Semantic Versioning](https://semver.org), but with slight differences:
|
||||
|
||||
* The major version number is only increased when the entire plugin is reconstructed.
|
||||
* The minor version number is used for regular updates.
|
||||
* The patch version number is incremented when there is no modification for any functionalities. For example, version 4.2.1 only includes updates for macOS Blender without changing any features.
|
||||
|
||||
Before the formal release of BBP, there are typically three phased versions: Alpha version, Beta version, and RC version. The Alpha version focuses on functional updates, used to verify whether newly added or modified features are functioning correctly, and does not include documentation or translations. The Beta version is focus on plugin documentation, while the RC version concentrates on plugin translations. However, these three versions do not always exist; if the update content is minimal, some versions may be skipped, or a direct release may occur.
|
||||
|
@ -1,8 +1,5 @@
|
||||
# Virtools Properties
|
||||
|
||||
!!! info "Not latest version"
|
||||
This translated page is not the latest version because the modification of source page. Please see source page of the latest version.
|
||||
|
||||
## Virtools Group
|
||||
|
||||
The BBP plugin adds a new property to every Blender object, called Virtools Group. has the same functionality as Group in Virtools. Select an object and the `Virtools Group` panel can be found in the `Object` properties panel.
|
||||
@ -13,6 +10,8 @@ In the `Virtools Group` panel, you can click Add to group objects. After clickin
|
||||
|
||||
BBP also provides access to Virtools groups in Blender's other menus, see [Group Operation](./group-operations.md).
|
||||
|
||||
It is important to note that the Virtools group only works on mesh objects. When you open the Virtools group panel on other objects, you will see a warning message in the panel indicating that the Virtools group is invalid for that object. Although the Virtools group data set on non-mesh objects will be recognized and stored by Blender, it will not be saved to the Virtools file when exporting.
|
||||
|
||||
## Virtools Material
|
||||
|
||||
The plugin adds a new property to every Blender material, called Virtools Material, which bridges the gap between Virtools materials and Blender materials. Go to the `Material` properties panel and select a material to find the `Virtools Material` panel.
|
||||
@ -59,4 +58,12 @@ The BBP plugin adds a new property to all Blender meshes called Virtools Mesh. g
|
||||
|
||||

|
||||
|
||||
The Virtools Mesh is currently only used as a compatibility feature. It has only one property, Lit Mode, that can be set. Most early maps had black floor issue because they didn't know how to set the material correctly, so the Lit Mode was often set to Prelit to get the floor to show up properly. This attribute exists for compatibility with this compromise and the user usually does not need to set this option.
|
||||
The Virtools Mesh is currently only used as a compatibility feature. It has only one property, Lit Mode, that can be set. Most early maps had black floor issue because they didn't know how to set the material correctly, so the Lit Mode was often set to Prelit to get the floor to show up properly. This attribute exists for compatibility with this compromise and the user usually does not need to set this option.
|
||||
|
||||
## Virtools Light
|
||||
|
||||
The BBP plugin adds a new property called Virtools Light to all Blender lights. You can find the Virtools Light panel by navigating to the Data properties panel.
|
||||
|
||||

|
||||
|
||||
Similar to the materials in Virtools, the lighting system in Virtools differs significantly from that in Blender. The Virtools Light acts as a bridge, accurately reflecting the settings of Virtools, allowing for seamless storage within Blender files and providing necessary data during import and export. Additionally, this panel includes an Apply button to apply the Virtools lighting settings to Blender's lighting.
|
||||
|
@ -1,4 +1,37 @@
|
||||
# ZZQ Features
|
||||
|
||||
!!! info "No Translation"
|
||||
This page has not been translated. Please see source page of this page.
|
||||
This plugin received many suggestions from ZZQ during its development process, resulting in a rather disordered set of features, which are therefore described together on a separate page.
|
||||
|
||||
## Snoop Group then to Mesh
|
||||
|
||||
Snoop Group then to Mesh, fully referred to as: snoop and copy the Virtools Group infomations into corresponding curve object and convert it into mesh object. You can select certain objects and then right-click to find this function in the context menu of the object.
|
||||
|
||||
This function, as its name, converts the selected object into a mesh. If the selected object is a curve and there is a beveled object set, the grouping information of the beveled object will be assigned to the current curve (overriding the curve's current grouping settings). If the selected object is not a curve, or if it is a curve but lacks a beveled object, then this function is basically the same as executing a conversion to mesh. This function is extremely useful in loft modeling, as it only requires the correct grouping of the section object, after which using this function to convert the curve to a mesh will ensure that the grouping of the lofted object is correct.
|
||||
|
||||
## Game Camera
|
||||
|
||||
Many map makers often lack a clear concept of the size of their maps when creating them, which can easily lead to the production of maps that are either too large or too small. The in-game camera function of the menu item `Ballance - Game Camera` offers a way to preview the map from the perspective of the in-game camera within Blender, allowing map makers to better grasp the dimensions of the map.
|
||||
|
||||
In order to use this feature, there must first be a camera in your scene, set as the active camera of the scene (when no camera is present, a newly added camera through the add menu will be automatically set). Additionally, you will need an active object, which cannot be the same as this camera.
|
||||
|
||||
!!! question "Why is it necessary to have active object?"
|
||||
Due to the limitations of the Blender plugin, an active object is required since the in-game camera functionality supports targeting either the 3D cursor **or an active object**.
|
||||
|
||||
Typically, the situation where there are no active objects available only occurs in a blank Blender document, which consequently renders the functionality unavailable. In a custom map, there is no any lack of objects which can become active objects; simply clicking on any object is enough (when wishing to use the 3D cursor as a target).
|
||||
|
||||
After clicking this function, the view will automatically switch to the perspective of the active camera, facilitating your preview. You can adjust the relevant settings in the panel located at the bottom left.
|
||||
|
||||

|
||||
|
||||
First, select the target, which essentially means choosing the position of the player's ball. If 3D cursor is selected, it is treated as the origin of player's ball. If active object is selected, the player's ball is placed at the origin of the active object.
|
||||
|
||||
!!! info "The position of the player's ball is not that straightforward."
|
||||
Regardless of whether one chooses 3D cursor or active object, if no extremely fine adjustments are made, the preview results may have slight differences compared with in-game result.
|
||||
|
||||
When you use the 3D cursor mode and simply snap it to the ground, it does not represent the position of player ball. Since the radius of player ball is 2, you actually need to move 2 units in +Z direction to achieve the exact same perspective as in the game. However, this operation is too complex, and not performing this action does not cause a significant difference in the preview effect.
|
||||
|
||||
When using active object mode, it is important to note that the origin of the object corresponds to the position of the dot displayed in viewport when the object is selected. For most objects, this may not be what you desire, as they may be located inside or outside the object, and are not always positioned on the surface of the object or at the center of a particular face. To address this situation, I recommend using the 3D cursor as a target and, by entering edit mode, utilizing snapping and the `Shift + S` menu to place the cursor in the correct position.
|
||||
|
||||
Next is the selection of the camera's rotation angles. We offer 8 common used in-game preset angles, corresponding to 4 each for 90 degrees camera and 45 degrees camera. Furthermore, if these preset angles do not meet your requirements, you can also set custom angles.
|
||||
|
||||
Finally, there is the selection of camera perspectives, which can be divided into 3 types: Ordinary (standard perspective), Lift (perspective activated by holding the spacebar), and Easter Egg (special Easter Egg perspective).
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
在BME配置对话框的底部,您总是可以找到一个被称为额外变换的区域。在这个区域中,有额外移动和额外旋转两个选项可以配置。这些字段主要是为了可视化服务的。
|
||||
|
||||
在说明这些字段的实际作用前,你需要知道,BME创建的路面总是以当前3D游标的位置进行创建的,即3D游标在哪里,新创建的路面就在哪里。这主要是为了可视化来考虑到,用户可以先将3D游标移动到想要添加路面的位置,再添加对应的BME结构,便可以在调整参数的时候即时预览到结果。有时候你的3D游标的位置不是那么的准确,又或者最终生成的结构需要一定的旋转才是你期望的,此时就可以利用额外变换字段,为最终生成的结构,增加相对于3D游标的额外的移动和旋转,使之处于正确的位置,这样就可以在调整参数的时候实时预览到结果了。
|
||||
在说明这些字段的实际作用前,你需要知道,BME创建的路面总是以当前3D游标的位置进行创建的,即3D游标在哪里,新创建的路面就在哪里。这主要是为了可视化来考虑到,用户可以先将3D游标移动到想要添加路面的位置,再添加对应的BME结构,便可以在调整参数的时候即时预览到结果。有时候你的3D游标的位置不是那么的准确,又或者最终生成的结构需要一定的旋转才是你期望的,此时就可以利用额外变换字段,为最终生成的结构,增加相对于3D游标的额外的移动和旋转,使之处于正确的位置,这样就可以在调整参数的时候预览到正确的结果了。
|
||||
|
||||
## 小贴士
|
||||
|
||||
|
@ -69,8 +69,8 @@ Blender对于插件的多语言支持不尽如人意,且BBP的设计比较特
|
||||
|
||||
如果未来BBP需要支持更多语言,你需要从POT文件为新语言创建其对应的PO翻译文件。你可以通过以下方式之一来创建它们。
|
||||
|
||||
1. 通过使用Poedit等软件打开POT文件,选择创建新的翻译,再进行保存来创建。
|
||||
1. 通过诸如`msginit -i blender.pot -o zh_HANS.po -l zh_CN.utf8`的命令来创建新语言的PO翻译文件。
|
||||
* 通过使用Poedit等软件打开POT文件,选择创建新的翻译,再进行保存来创建。
|
||||
* 通过诸如`msginit -i blender.pot -o zh_HANS.po -l zh_CN.utf8`的命令来创建新语言的PO翻译文件。
|
||||
|
||||
创建的方式多种多样,唯一需要注意的是你需要按下表所示设定文件名(文件名错误,Blender会拒绝接受)和区域名称(使用`msginit`时会用到,目的是确保是UTF8格式编码的)。
|
||||
|
||||
@ -82,8 +82,8 @@ Blender对于插件的多语言支持不尽如人意,且BBP的设计比较特
|
||||
|
||||
创建新的语言翻译并不常见,更为常见的操作是根据翻译模板,对现有语言翻译文件进行更新。你可以通过以下方式之一来更新它们
|
||||
|
||||
1. 通过Poedit等软件打开PO文件,再选择从POT文件更新。
|
||||
1. 通过诸如`msgmerge -U zh-HANS.po blender.pot --backup=none`的命令来更新。
|
||||
* 通过Poedit等软件打开PO文件,再选择从POT文件更新。
|
||||
* 通过诸如`msgmerge -U zh-HANS.po blender.pot --backup=none`的命令来更新。
|
||||
|
||||
### 进行翻译
|
||||
|
||||
@ -108,14 +108,11 @@ PO格式的翻译并不能被Blender识别,因此在翻译完成后,你还
|
||||
|
||||
Blender会根据`blender_manifest.toml`的指示,在排除下列文件的情况下将插件打包:
|
||||
|
||||
* `bbp_ng/i18n`:翻译文件夹。
|
||||
* `bbp_ng/raw_icons`:原始图片文件夹。
|
||||
* `bbp_ng/raw_jsons`:原始JSON文件夹。
|
||||
* `bbp_ng/tools`:编译用工具。
|
||||
* `bbp_ng/.style.yapf`:代码风格描述文件
|
||||
* `bbp_ng/.gitignore`:gitignore
|
||||
* `bbp_ng/icons/.gitkeep`:文件夹占位符
|
||||
* `bbp_ng/jsons/.gitkeep`:文件夹占位符
|
||||
* `__pycache__/`:Python缓存
|
||||
* `.style.yapf`:代码风格描述文件
|
||||
* `.gitignore`:gitignore
|
||||
* `.gitkeep`:文件夹占位符
|
||||
* `.md`:文档
|
||||
|
||||
## 生成帮助文档
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
### 冲突解决选项
|
||||
|
||||
Conflict Options(冲突解决选项)章节指示了当导入器遇到物体名称重复的情况时,该如何处理。分为4个等级,分别针对Object(物体),Light(灯光),Mesh(网格),Material(材质),Texture(贴图)。处理方式则有2种:Rename(重命名)和Use Current(使用当前)。选择重命名后,当遇到重复名称时,将会自动为其添加名称后缀使其名称唯一化。而选择使用当前,则会忽略从文件中导入此项,转而使用Blender文档中已经存在的同名的项目。
|
||||
Conflict Options(冲突解决选项)章节指示了当导入器遇到物体名称重复的情况时,该如何处理。分为5个等级,分别针对Object(物体),Light(灯光),Mesh(网格),Material(材质),Texture(贴图)。处理方式则有2种:Rename(重命名)和Use Current(使用当前)。选择重命名后,当遇到重复名称时,将会自动为其添加名称后缀使其名称唯一化。而选择使用当前,则会忽略从文件中导入此项,转而使用Blender文档中已经存在的同名的项目。
|
||||
|
||||
!!! info "与Virtools冲突解决的不同"
|
||||
相比较于在Virtools的冲突解决对话框,BBP插件提供的冲突解决选项不支持替换功能,同时其粒度也不支持精细到单个实例,只能针对一整个类型进行设定。因此你无法单独为每一个冲突的实例设置不同的冲突解决方案。但目前这种设置已经能满足绝大对数的使用场景了。
|
||||
@ -66,6 +66,6 @@ Successive Sector(小节连续)是一个解决导出小节组时出现的Bug
|
||||
|
||||
通常而言,在你正确按照之前介绍的步骤安装和配置插件后,你理论上就可以使用Virtools文档的导入导出功能了。但难免有意外发生。这里说的无法导入导出指的是导入和导出Virtools文档的按钮是灰色的,不可点击的。你需要按照下述步骤检查。如果你所指的是在导入导出过程中出错了,请参考本页页首的警告信息。
|
||||
|
||||
首先检查你是否已经在[配置插件](configure-plugin.md)章节正确配置了插件的`External Texture Folder`设置项。如果你没有配置,则自然无法导入导出Virtools文件。因为导入导出Virtools文件需要依赖Ballance原版关卡数据。请按教程认真配置这一设置项。
|
||||
首先检查你是否已经在[配置插件](configure-plugin.md)章节正确配置了插件的`External Texture Folder`设置项。如果你没有配置,则自然无法导入导出Virtools文件。因为导入导出Virtools文件需要依赖Ballance原版贴图数据。请按教程认真配置这一设置项。
|
||||
|
||||
如果你确定你已经设置了正确的贴图路径,你可以尝试点击菜单`Window - Toggle System Console`来打开控制台。在控制台中,可能会有一些相关的错误信息输出在其中,例如加载底层BMap库时失败等。加载底层BMap库失败通常只发生在一些罕见架构的机器上,例如使用Snapdragon处理器的Windows系统等,因为我们打包的插件中,并未包含支持这些平台的Virtools文件底层读取库BMap。在面对这种情况时,你有两个选择,一是汇报给开发者,等待开发者主动支持,二是自行编译该库(仅建议有丰富计算机知识的人这样做)。
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-26 21:47+0800\n"
|
||||
"POT-Creation-Date: 2025-09-04 09:55+0800\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -1648,6 +1648,7 @@ msgid "Preset Rotation Angle"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'1'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg0
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "0 Degree"
|
||||
msgstr ""
|
||||
@ -1657,6 +1658,7 @@ msgid "0 degree"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'2'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg45
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "45 Degree"
|
||||
msgstr ""
|
||||
@ -1666,6 +1668,7 @@ msgid "45 degree"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'3'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg90
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "90 Degree"
|
||||
msgstr ""
|
||||
@ -1675,6 +1678,7 @@ msgid "90 degree"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'4'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg135
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "135 Degree"
|
||||
msgstr ""
|
||||
@ -1684,6 +1688,7 @@ msgid "135 degree"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'5'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg180
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "180 Degree"
|
||||
msgstr ""
|
||||
@ -1693,6 +1698,7 @@ msgid "180 degree"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'6'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg225
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "225 Degree"
|
||||
msgstr ""
|
||||
@ -1702,6 +1708,7 @@ msgid "225 degree"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'7'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg270
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "270 Degree"
|
||||
msgstr ""
|
||||
@ -1711,6 +1718,7 @@ msgid "270 degree"
|
||||
msgstr ""
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'8'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg315
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "315 Degree"
|
||||
msgstr ""
|
||||
@ -3708,17 +3716,17 @@ msgctxt "BBP_OT_fix_all_materials/draw"
|
||||
msgid "Fix {0}/{1} materials."
|
||||
msgstr ""
|
||||
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:248
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:305
|
||||
msgctxt "BBP_OT_game_camera/draw"
|
||||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:253
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:310
|
||||
msgctxt "BBP_OT_game_camera/draw"
|
||||
msgid "Rotation"
|
||||
msgstr ""
|
||||
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:264
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:333
|
||||
msgctxt "BBP_OT_game_camera/draw"
|
||||
msgid "Perspective"
|
||||
msgstr ""
|
||||
|
@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Ballance Blender Plugin 4.2.0 (0)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-26 21:47+0800\n"
|
||||
"POT-Creation-Date: 2025-09-04 09:55+0800\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@ -1667,6 +1667,7 @@ msgid "Preset Rotation Angle"
|
||||
msgstr "预设旋转角度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'1'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg0
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "0 Degree"
|
||||
msgstr "0 度"
|
||||
@ -1676,6 +1677,7 @@ msgid "0 degree"
|
||||
msgstr "0 度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'2'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg45
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "45 Degree"
|
||||
msgstr "45 度"
|
||||
@ -1685,6 +1687,7 @@ msgid "45 degree"
|
||||
msgstr "45 度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'3'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg90
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "90 Degree"
|
||||
msgstr "90 度"
|
||||
@ -1694,6 +1697,7 @@ msgid "90 degree"
|
||||
msgstr "90 度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'4'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg135
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "135 Degree"
|
||||
msgstr "135 度"
|
||||
@ -1703,6 +1707,7 @@ msgid "135 degree"
|
||||
msgstr "135 度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'5'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg180
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "180 Degree"
|
||||
msgstr "180 度"
|
||||
@ -1712,6 +1717,7 @@ msgid "180 degree"
|
||||
msgstr "180 度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'6'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg225
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "225 Degree"
|
||||
msgstr "225 度"
|
||||
@ -1721,6 +1727,7 @@ msgid "225 degree"
|
||||
msgstr "225 度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'7'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg270
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "270 Degree"
|
||||
msgstr "270 度"
|
||||
@ -1730,6 +1737,7 @@ msgid "270 degree"
|
||||
msgstr "270 度"
|
||||
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle:'8'
|
||||
#. :src: bpy.types.BBP_OT_game_camera.preset_rotation_angle_deg315
|
||||
msgctxt "BBP_OT_game_camera/property"
|
||||
msgid "315 Degree"
|
||||
msgstr "315 度"
|
||||
@ -3742,17 +3750,17 @@ msgctxt "BBP_OT_fix_all_materials/draw"
|
||||
msgid "Fix {0}/{1} materials."
|
||||
msgstr "修复 {0}/{1} 材质。"
|
||||
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:248
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:305
|
||||
msgctxt "BBP_OT_game_camera/draw"
|
||||
msgid "Target"
|
||||
msgstr "目标"
|
||||
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:253
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:310
|
||||
msgctxt "BBP_OT_game_camera/draw"
|
||||
msgid "Rotation"
|
||||
msgstr "旋转"
|
||||
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:264
|
||||
#: extensions/user_default/bbp_ng/OP_OBJECT_game_view.py:333
|
||||
msgctxt "BBP_OT_game_camera/draw"
|
||||
msgid "Perspective"
|
||||
msgstr "视角"
|
||||
@ -5187,6 +5195,30 @@ msgctxt "BBP/BME/Proto/floor_wide_x_crossing/[3]"
|
||||
msgid "Whether has some faces."
|
||||
msgstr "是否生成某些面。"
|
||||
|
||||
#~ msgid "0 Degree"
|
||||
#~ msgstr "0 度"
|
||||
|
||||
#~ msgid "45 Degree"
|
||||
#~ msgstr "45 度"
|
||||
|
||||
#~ msgid "90 Degree"
|
||||
#~ msgstr "90 度"
|
||||
|
||||
#~ msgid "135 Degree"
|
||||
#~ msgstr "135 度"
|
||||
|
||||
#~ msgid "180 Degree"
|
||||
#~ msgstr "180 度"
|
||||
|
||||
#~ msgid "225 Degree"
|
||||
#~ msgstr "225 度"
|
||||
|
||||
#~ msgid "270 Degree"
|
||||
#~ msgstr "270 度"
|
||||
|
||||
#~ msgid "315 Degree"
|
||||
#~ msgstr "315 度"
|
||||
|
||||
#~ msgctxt "BBP_PG_legacy_align_history/property"
|
||||
#~ msgid "Target Objects (Selected Objects)"
|
||||
#~ msgstr "目标物体 (选择的物体)"
|
||||
|
Reference in New Issue
Block a user