UPDATE 0.97 - Documentation revamped!


0.97  (May 7, 2026)

--------------------

- The BROKUMENTATION is entirely revamped! 

Now it's organized by sections, no longer a huge list of stuff, and there's a search box!

Also plenty of missing functions now have proper documentation, missing attributes added, notes added...


- Added: SURFACENEW, SURFACEREMOVE, SURFACEREFRESH

Surfaces are temporary images in memory and can be generated using multiple IMAGE/TEXT instances.

They can then be manipulated like other images with IMAGEMOVE, IMAGEZOOM, IMAGEFADE.

- Added: TEXTCALCULATECENTER

Give it a text with several words, and it calculates the X/Y position of each to display them correctly centered, one by one.

- Added: MAPINTEGER and MAPSTRING types of variables.

This allows to store a pair: key => value

You can store a key/value with SETVAL/ADDVAL with (for example) ADDVAL=

You can remove a key with REMOVEVAL (which also removes the associated value)

You can retrieve a value from the key with (for example)  {VARIABLE,KEY}

You can also retrieve a value and specify a default value if it's not in the map with (for example)  {VARIABLE,KEY,DEFAULTVALUE}

- Added: TEXTREPLACE (works similarly to IMAGEREPLACE)

- Added: TEXTMOVE (works similarly to IMAGEMOVE)

- Added: TEXTZOOM (works similarly to IMAGEZOOM)

- Added: TEXTFADE (works similarly to IMAGEFADE)

- Added: SCALE, SCALEX/Y to TEXTNEW and TEXTREPLACE

- Added: ENDSCALEX/Y for zooms (so we can check size precisely against either scale)

- Added: SEPARATOR can be defined when setting a list of values with SETVAL or VARDEFAULT.

- Added: STRINGREPLACE to search for a substring and replace it in a STRING variable.

- Added: STRINGLOWER, STRINGUPPER to put a text into lowercase/uppercase.

- Added: STRINGCONCAT to concatenate several text bits.

- Added STRINGCOPY to extract a substring from a text.

- Added: EMPTY operator to check if a variable is empty.

- Added: WAITEVENT operator to check if an event is currently waiting to be called.

- Added: VARDUPLICATES=1 when defining lists variables, to force duplicate values to be accepted. (by default they're not)

- Added: IF, SETVAL and ADDVAL now allow to use quotation marks " " (necessary if you want to add spaces for example)

- Added: Comparing the content of a list to a string now works. Eg: IF S01_MYLIST = "Chief|Dart|Kins"...

Note: Using quotation marks to compare a LISTSTRING/LISTINTEGER/STRING means a strict check: the list content must be exactly the one given, in the same order.

- Added: Additional startup messages for Linux version.

- Added: ROOMRESETALL allows to reinit all the variable values back to default.

Also removes the list of all events called from memory (including checks on if a dialogue was played.), the progress and time duration, and any possible assets left on screen (clickers, images...)

Use it when coming back to title screen (when you don't already use VN_RESTART.)

- Added: UITEXTWIDTHLARGE option in UI to define a larger interface when using "large fonts" option.

- Added: Instructions on how to import Notepad++ color syntaxing + a Python script to autodetect and set the correct language automatically when opening the text files

- Added: POPUP text and titles now play accessibilty files automatically if they exists with the same IDs.

- Added: We can use OUTLINE=0 or OUTLINEAMOUNT=0 to disable the outline on text. (before that we had to use exclusively OUTLINE=NONE)

- Added: We check that variables names only contain valid characters (only A-Z, a-z, 0-9, and _ allowed)

- Added: Debug Fonts menu option with F3.

- Added: "Starting..." message for Chinese/Japanese to let the engine start immediately, while it loads fonts (instead of waiting before anything is displayed)

- Added: We can now LOOP on multiple LIST variables at once, provided they have the same number of elements.

- Added: In addition to ORDER_..., LOOP now automatically creates a COUNT_... variable which has the total number of elements.

- Added: IF instruction can now compare a variable to another variable

Eg: IF VAR1 = {VAR2}

- Added: VARNEWLIST and VARNEWMAP to create new variables and init them immediately in a simple way.

We can init a map by two ways: separated by commas or with brackets.

       * Bracket Mode: [key-val][key-val]

       * Comma Mode: key-val, key-val

- Added: Compare list of VN files in debug menu (+ moved some options in a new "Debug Files" menu)

- Added: ENDIF allows to make sure the current IF terminates, and that the next IF will not be considered as an additional condition of the previous one.

- Added: We can now have alternative translations / texts when using Gamepad / Touch controls by suffixing the ID with "_GAMEPAD" or "_TOUCH".

- Added: We can now use nine coordinates for the ORIGIN of an image (CENTERLEFT, BOTTOMLEFT, BOTTOMCENTER, BOTTOMRIGHT, CENTERRIGHT, TOPRIGHT, TOPCENTER)

- Added: Warning message if we create overlapping clickers with identical depth, causing issues when reloaded.


- Changed: D= (duration setting) for a line is now used anyway if there's a voice line, can be used to lenghten the line display.

- Changed: Skipping "cutscenes" now requires to activate the option in menu, unless we're in creation mode (always active).

- Changed: TEXTONLY=1 doesn't disable the typing sound anymore.

- Changed: When skipping dialogue lines, everything else (animations etc) is also accelerated.

- Changed: The engine now automatically differenciates clickers which should get disabled when the IMAGEMODEL is not visible (those created when the IMAGEMODEL is visible/appearing/ALPHAMODEL) and those where the IMAGEMODEL is supposed to be invisible (those created when the IMAGEMODEL is invisible)

- Changed: Chinese and Japanese text now automatically display at 75% of normal speed.

- Changed: On a variable, doing VARDEFAULT=TEXT398 or SETVAL=TEXT398 (for example) will now take the translation of TEXT398 if it exists.

NB: If we want to keep the exact value "TEST398" then use quotes.

- Changed: In case of conflict (for example on a character name), translation files of the game now are priority over the engine TCOMMON file.

- Changed: Options languages list is now ordered alphabetically.

- Fixed: Displaying the value of a list now works.

- Fixed: Displaying an integer value alone in a text didn't work.

- Fixed: Displaying a list value in a dialogue didn't work properly + outputs in a human readable format.

- Fixed: Doing several IF conditions with a keyword didn't work.

- Fixed: Generate lypsync wasn't working correctly with the new lines ID prefixes.

- Fixed: Error messages sometimes lacked the event ID.

- Fixed: Export character scripts and missing voice acting reports no longer include "html" tags.

- Fixed: Voice lines at the start of a new dialogue starting directly after another were not played.

- Fixed: Identical text lines inside a dialogue no longer generate the exact same prefix ID 

(because we potentially want different voice files for them)

- Fixed: Sprites (images) now automatically attempt to get restored from disk when they're erased from RAM. (improved stability)

- Fixed: TIMERREMOVE wasn't working correctly.

- Fixed: "Subtitles off" option wasn't working.

- Fixed: Mouth animation was still happening when MOOD=THINK.

- Fixed: Automatic saves using SAVE=AUTO in the code now save one frame later to solve issues.

- Fixed: After an automatic memory flush, it was possible to have a character expression disappear.

- Fixed: Listing several effects to remove with EFFECTREMOVE didn't work.

- Fixed: Listing several sounds/voices in SOUND/STOPSOUND/VOICE/STOPVOICE didn't work.

- Fixed: The "bug" sound on error messages isn't played multiple times making it loud anymore when there's many errors.

- Fixed: It's now possible to skip dialogue with voices in automatic play mode.

- Fixed: Rebinding keys were not saved properly.

- Fixed: Checking inventory item would reactivate too many layers.

- Fixed: Changing special effect used a missing sprite.

- Fixed: Custom events defined were lost after loading a save.

- Fixed: VIDEO was no longer working in a build, only in AppData.

- Fixed: Recreating a clicker with a modelimage would potentially lose the modelimage and then not be clickable.

- Fixed: ENDSIZE for a TEXTZOOM/IMAGEZOOM can now use a variable.

- Fixed: FOCUSGAMEPAD can now use a variable.

- Fixed: MSGNB could not display INTEGER variables.

- Fixed: WIDTHMAX now correctly checks against the text width on screen, taking into account the SCALE (which it didn't do before)

- Fixed: Slower message speeds in options could get lines not displaying properly.

- Fixed: If using UInameuppercase, the name would not get translated.

- Fixed: When building a LIST/MAP, the values are no longer automatically trimmed.

- Fixed: List of languages in the options now span up to the fullest width possible.

- Fixed: LOOP calls with delays are now properly saved and restored.

- Fixed: Potential memory leak when doing IMAGEREPLACE after two save loads.

- Fixed: Binding an input to a clicker wasn't restored properly.

- Fixed: CLICKERDISABLE/ENABLE did not support a list of clickers.

Files

BROKVN_Engine_WIN_0.97.zip 89 MB
71 days ago
BROKVN_Engine_LINUX_0.96.AppImage 77 MB
Mar 28, 2026

Get BROKVN - Visual Novel Engine

Leave a comment

Log in with itch.io to leave a comment.