Contains all fixes from 3.6.2 Patch 9.
Own changes:
Common:
- Increased number of Audio Channels to 32 (was 16).
Editor:
- In General Settings added "Text language" option, that lets specify a base game language. This option is used whenever engine needs to identify the game text as being of a particular language or using particular alphabet (e.g. alphabetic string sorting).
- In General Settings added "Display single dialog option", which corresponds to the previously existing "game.show_single_dialog_option" variable in script.
- In General Settings added "Translate Text Parser" setting, which makes Editor export Text Parser's words dictionary to the translation file.
- Allow to rename custom properties in the Schema, in which case the Editor will process all the objects in all game and adjust property names there.
- Custom Properties Schema dialog now has a Cancel button which lets to revert any changes.
- Text Parser pane now allows to enter multiple comma-separated words per entry, which may be a more convenient way to create list of synonyms.
- Translation source is now divided on sections, using "//$SECTION" markers, where a section is created for each script module, each room, and each category of global objects.
- When updating a translation source, obsolete entries will now be removed, and if there's already a translated line present, then marked with a "//$OBSOLETE" tag for user to notice them.
- Translation compiler now supports "Language" setting, with the same meaning as the one in General Settings, but associated with the particular translation.
- Translation compiler supports "AutoTranslateParserSaid" setting, that, if enabled, instructs engine to automatically translate sentence patterns in Parser.Said().
Script API:
- Moved eAlignHas* constants from Alignment to AlignmentMask enum.
- Added two new options for StringCompareStyle: eCaseInsensitiveLocaleAware and eCaseSensitiveLocaleAware. These two "LocaleAware" styles compare strings using proper alphabetic rules, as opposed to comparing character code values. For example, with standard styles the accented letter 'À' is positioned after letter 'Z'. With locale aware style it is positioned after letter 'A'. But the exact result depends on the "Text language" setting set either in General Settings or current Translation.
- Added HitTestOptions enum with a eHit_Any and eHit_Interactable constants.
- For each GetAtScreenXY and GetAtRoomXY function added an optional "hitOptions" parameter, that lets tell whether to detect only clickable/enabled objects, or all of them regardless.
- Deprecated Character.AnimationVolume and Object.AnimationVolume, and added AudioVolume property to these types as a replacement.
- Added Character.AudioPanning and AudioSpeed properties, and Object.AudioPanning and AudioSpeed.
- Added Character.Inventory[] and InventoryCount readonly properties that let iterate all items that character currently holds, including item duplicates (if they are allowed).
- Added ListBox.SortItems() function.
- Added Mouse.IsAnyButtonDown().
- Added Utils.SortStrings(), Utils.SortInts() and Utils.SortFloats() array sort functions.
- Added IsAnyKeyPressed() function.
Engine:
- Number of individual items (including item duplicates) that a Character can hold is now 32k (was 500).
- Changing Character.InventoryQuantity[] now automatically adds and removes items from the Character's list of items; there's no need to call UpdateInventory() anymore.
- Inventory Item's hotspot now treats 0,0 value exactly, and not as "centered in graphic".
- Inventory Item's hotspot marker can now be drawn outside of the cursor graphic's boundaries.
- Text Parser supports translation and unicode strings.
- Parser.Said() does automatic translation of the sentence pattern (if respective option is enabled in the current translation).
- Fixed InventoryWindow not getting redrawn immediately if one of the item's has a dynamic sprite assigned as a graphic and that dynamic sprite gets edited (like, drawn upon).
- Fixed SetGameOption(OPT_PORTRAITSIDE) not always working correctly.