# Version History

## v. 4.2.0 - Aug 4, 2025

{% hint style="success" %}
This release marks the 20th Anniversary since Sanny Builder's first release in 2005! Thank you for being part of the journey!
{% endhint %}

* new [spread operator](https://docs.sannybuilder.com/language/instructions/expressions#spreading-arrays) to unwrap array to a list of arguments (e.g. `...pos = get_char_coordinates $scplayer`)
* compiler support for [variadic functions](https://docs.sannybuilder.com/language/functions#variadic-functions)
* compiler support for [array arguments in functions](https://docs.sannybuilder.com/language/functions#array-arguments)
* [options](https://docs.sannybuilder.com/editor/options/general) have been reworked to move out Disassembler and Compiler options from General and Formats to their own tabs
* new disassembler syntax options to select between opcodes, commands or classes outputs
* new edit mode: LCS Mobile
* new color theme Neon Dark by Vital
* bug fixes and minor improvements

Thanks to everyone who contributed to the release and helped with testing. Shout out to my [Patreon](https://www.patreon.com/seemann) supporters, you're best!

See [the complete list of changes](https://github.com/sannybuilder/dev/issues/379) for additional information.

## v. 4.1.0 - Mar 15, 2025

* edit mode enhancements, including a new feature to customize edit mode list
* two new experimental modes for GTA San Andreas: one with [Somersault compiler](https://next.sannybuilder.com/) and one with support for SAMPFUNCS extension
* autocomplete (`Ctrl+Space`) improvements
* code formatter (`Ctrl+Alt+3`)
* main menu updates with new icons
* new theme Night Blue by Vital
* updated Turkish translation by Bloodriver the Conqueror
* bug fixes

See the [complete list of changes](https://github.com/sannybuilder/dev/issues/355). Visit [SannyBuilder Discord](https://sannybuilder.com/discord) for additional information and support.

## v. 4.0.0 - Aug 4, 2024

* [functions support](https://docs.sannybuilder.com/language/functions) (`function..end`)
* [CLEO 5 modules](https://docs.sannybuilder.com/language/import-export) support
* [new SBL edit modes](https://docs.sannybuilder.com/edit-modes#available-modes)
* [debugger](https://docs.sannybuilder.com/editor/scm-debugger) for main.scm scripts
* [`switch..end`](https://docs.sannybuilder.com/language/control-flow/switch)
* binary number format (`0b101010`)
* new tabs
* other improvements and fixes

See the [complete list of changes](https://github.com/sannybuilder/dev/issues/277). Visit [SannyBuilder Discord](https://sannybuilder.com/discord) for additional information and support.

{% hint style="info" %}
This release won't be possible without great feedback and testing from Sanny Builder community as well as support from my [Patreon](https://www.patreon.com/seemann).
{% endhint %}

## v. 3.9.1 - Sep 18, 2023

* array name in expressions without opcode could be a constant [#250](https://github.com/sannybuilder/dev/issues/250)
* preserve global variable index when disassembling with extra info [#251](https://github.com/sannybuilder/dev/issues/251)
* default choice for option [Case converting](https://github.com/sannybuilder/docs/blob/en/broken-reference/README.md) should be "As is" [#256](https://github.com/sannybuilder/dev/issues/256)
* fix an issue with compiling opcode 0B17 [#254](https://github.com/sannybuilder/dev/issues/254)
* fix an issue when Sanny doesn't present the option to use the included script text. [#258](https://github.com/sannybuilder/dev/issues/258)
* fixed some issues with string variables [#259](https://github.com/sannybuilder/dev/issues/259), [#265](https://github.com/sannybuilder/dev/issues/265)

## v. 3.9.0 - Sep 9, 2023

* command names defined in [Sanny Builder Library](https://library.sannybuilder.com) JSON files are now valid [keywords](https://docs.sannybuilder.com/language/instructions/keywords)
* [HEX..END](https://docs.sannybuilder.com/language/instructions/hex..end#byte-repetition) improvements (repeat the same byte N times, include binary files)
* simplified [const](https://docs.sannybuilder.com/language/data-types/constants#syntax) and [variable](https://docs.sannybuilder.com/language/data-types/variables#declaring-a-variable-type) declarations (`const x = 1, y = 2`, `float x, y, z`)
* new [operators](https://docs.sannybuilder.com/language/instructions/expressions#bitwise) (`bitwise`, `=@`, `=#`)
* `{$INCLUDE_ONCE}` [directive](https://docs.sannybuilder.com/language/directives#usdinclude_once)
* adding new [edit modes](https://docs.sannybuilder.com/edit-modes) can be done by copying them into the `data` folder, the `modes.xml` is gone
* bug fixes and other changes

👏 Thanks to all people who helped and contributed to this release, and many thanks to my supporters on [Patreon](https://patreon.com/seemann).

{% hint style="warning" %}
Previous versions allowed the compilation of some broken code. Now, it will produce an error. You can find examples of such code [here](https://github.com/sannybuilder/dev/issues/231#issuecomment-1627984136).
{% endhint %}

[Complete list of changes](https://github.com/sannybuilder/dev/issues/231)

## v. 3.8.5 - Feb 22, 2023

* fix bug [#216](https://github.com/sannybuilder/dev/issues/216)

## v. 3.8.4 - Feb 17, 2023

* keep previously opened documents when launching SB with an input file (Open with) [#151](https://github.com/sannybuilder/dev/issues/151)
* add "--decompile" parameter to [CLI](https://docs.sannybuilder.com/editor/cli#decompile)
* fix bugs [#212](https://github.com/sannybuilder/dev/issues/212), [#213](https://github.com/sannybuilder/dev/issues/213), [#180](https://github.com/sannybuilder/dev/issues/180)
* fix some compilation issues with classes using string literals

## v. 3.8.3 - Jan 8, 2023

* fix bugs [#210](https://github.com/sannybuilder/dev/issues/210), [#204](https://github.com/sannybuilder/dev/issues/204), [#168](https://github.com/sannybuilder/dev/issues/168)
* fix [a bug](https://github.com/sannybuilder/GetObjectID/issues/1) in model search
* update CLEO+ plugin to [1.1.3](https://github.com/JuniorDjjr/CLEOPlus/releases/tag/v1.1.3)

## v. 3.8.2 - Sep 8, 2022

* fix bugs [#200](https://github.com/sannybuilder/dev/issues/200), [#187](https://github.com/sannybuilder/dev/issues/187)

## v. 3.8.1 - Sep 1, 2022

* added support for more commands terminating an if statement with multiple conditions [#133](https://github.com/sannybuilder/dev/issues/133)

```
    if and
        0AB0: is_key_pressed 9
	0AB0: is_key_pressed 10
    0AA0: gosub_if_false @label // was not working before, now compiles
```

* new and updated [translations](https://github.com/sannybuilder/translations) (Spanish, Ukrainian, Romanian, Armenian)
* [new color themes](https://github.com/sannybuilder/themes) contributed by the users
* [massive update](https://github.com/MatiDragon-YT/help-system) for local help files (CHM)
* new [edit mode](https://docs.sannybuilder.com/edit-modes) for GTA SA PS2 with PS2 CLEO commands
* updated local [CLEO](https://cleo.li/) and plugin files:
  * CLEO for San Andreas 4.4.1
  * CLEO for GTA III and Vice City 2.0.0.6
  * plugin [CLEO+ 1.1.2](https://github.com/JuniorDjjr/CLEOPlus/releases/tag/v1.1.2)
* fixed bugs [#172](https://github.com/sannybuilder/dev/issues/172), [#189](https://github.com/sannybuilder/dev/issues/189)

👏 Thanks to everyone who contributed to this version: [NicusorN5](https://github.com/NicusorN5), [Junior\_Djjr](https://github.com/JuniorDjjr), [wmysterio](https://github.com/wmysterio), [MatiDragon](https://github.com/MatiDragon-YT), [DanielSant0s](https://github.com/DanielSant0s), [JaggerJam69](https://github.com/JaggerJam69), [Vital](https://github.com/VitalRus95), [Sdas50](https://github.com/Sdas50), [nick7](https://github.com/nick7)

[Complete list of changes](https://github.com/sannybuilder/dev/issues/182)

## v. 3.8.0 - Aug 4, 2021

* [integration with Sanny Builder Library](https://docs.sannybuilder.com/editor/features#integration-with-sanny-builder-library): a new portal documenting all known opcodes
* 16 [new color themes](https://github.com/sannybuilder/themes)
* disassembler now outputs the content of a `hex..end` block as a string if it's a sequence of ASCII characters ending with 00 [#33](https://github.com/sannybuilder/dev/issues/33)
* [new debug option](https://docs.sannybuilder.com/editor/debug-options#skip_extra_info) to let disassembler ignore custom information attached to the compiled script
* [new CLI parameter](https://docs.sannybuilder.com/editor/cli#option) to launch the editor with custom options
* [custom user templates](https://docs.sannybuilder.com/edit-modes/code-templates#adding-a-new-template) are now stored in a separate file and kept between updates
* [hotkeys](https://docs.sannybuilder.com/editor/hotkeys) using Numpad buttons have been changed (Zoom text: Ctrl + +/- and Navigate to label and back: Alt + Right/Left)
* updated [CLEO+](https://github.com/JuniorDjjr/CLEOPlus) plugin to v1.0.8
* updated translations to Hungarian, Spanish, Ukrainian and Chinese languages
* [fixed 16 bugs](https://github.com/sannybuilder/dev/issues/130#issue-805022048)

👏 Kudos to contributors to this release: [forms55](https://github.com/forms55), [MatiDragon](https://github.com/MatiDragon-YT), [Vital](https://github.com/VitalRus95), [wmysterio](https://github.com/wmysterio), [XMDS](https://github.com/XMDS)

[Complete list of changes](https://github.com/sannybuilder/dev/issues/130)

## v. 3.7.0 - Jan 30, 2021

* declared [constants](https://docs.sannybuilder.com/language/data-types/constants) are getting highlighted ([#28](https://github.com/sannybuilder/dev/issues/28))
* the autocomplete list displays declared constants ([#40](https://github.com/sannybuilder/dev/issues/40))
* each editor tab maintains its own [edit mode](https://docs.sannybuilder.com/edit-modes) selection ([#87](https://github.com/sannybuilder/dev/issues/87))
* new VC Mobile mode with CLEO Android opcodes ([sannybuilder/data#11](https://github.com/sannybuilder/data/pull/11))
* added spaceeinstein's [Opcode Restoration project](https://github.com/cleolibrary/opcodes-restoration-project) opcodes in VC PC mode
* error messages now have a link to localized documentation if possible ([#101](https://github.com/sannybuilder/dev/issues/101))
* [user tools](https://docs.sannybuilder.com/editor/features#external-tools-menu) configuration supports **@sb:** and **@game:** variables ([#72](https://github.com/sannybuilder/dev/issues/72))
* [CLEO+](https://github.com/JuniorDjjr/CLEOPlus) plugin updated to v1.0.7
* fixed bugs: [#103](https://github.com/sannybuilder/dev/issues/103) [#114](https://github.com/sannybuilder/dev/issues/114) [#120](https://github.com/sannybuilder/dev/issues/120)

{% hint style="info" %}
Read more on constants highlighting there: [Language service](https://docs.sannybuilder.com/editor/language-service).
{% endhint %}

[Complete list of changes](https://github.com/sannybuilder/dev/issues/90)

:clap: Kudos to [XMDS](https://github.com/XMDS) for contributions to this release.

## v. 3.6.2 - Nov 29, 2020

* fixed a bug with labels missing in disassembled CLEO scripts [#99](https://github.com/sannybuilder/dev/issues/99)

## v. 3.6.1 - Nov 27, 2020

* updated translation to Ukrainian language
* updated CLEO+ plugin to v1.0.4
* updated opcode definitions and keywords for CLEO opcodes [#95](https://github.com/sannybuilder/dev/issues/95)
* fixed several regression bugs in compiler [#96](https://github.com/sannybuilder/dev/issues/96), [#98](https://github.com/sannybuilder/dev/issues/98)
* minor fixes and improvements (see the [complete list](https://github.com/sannybuilder/dev/issues/91))

:clap: Kudos to [wmysterio](https://github.com/wmysterio/) and [XMDS](https://github.com/XMDS) for their contributions.

## v. 3.6.0 - Nov 11, 2020

* support for [enumerated types](https://docs.sannybuilder.com/language/instructions/classes#class-constants) in classes
* new [types](https://docs.sannybuilder.com/edit-modes/opcodes-list-scm.ini#parameter-types) of opcode parameters: [`m%`](https://github.com/sannybuilder/dev/issues/10) and [`k%`](https://github.com/sannybuilder/dev/issues/21)
* initial support for language [extensions](https://docs.sannybuilder.com/edit-modes/extensions)
* better integration with CLEO library:
  * updated third-party tools in the `tools` directory:
    * CLEO v4.4
    * SCRLog v2020.2
    * added [CLEO+ plugin](https://github.com/sannybuilder/dev/issues/71) for GTA SA with 250+ new opcodes
  * [recognize Cleo for Android](https://github.com/sannybuilder/dev/issues/64) scripts (`*.csa`, `*.csi`) as compiled scripts
  * compiler uses CLEO opcodes `0A9E`, `0A9F`, `0A90`, `0A91` [in certain expressions when no opcode is supplied](https://github.com/sannybuilder/dev/issues/58#issuecomment-723376464)
  * unified description and keywords for CLEO opcodes across different edit modes
* added [keywords](https://docs.sannybuilder.com/language/instructions/keywords) for all opcodes in GTA SA SCR mode
* word *thread* has been replaced with *script* in opcode definitions and keywords ([see why](https://gtamods.com/wiki/Talk:Script#Thread-%3EScript\).))
* IDE updates:
  * the game directory is no longer required to compile a script ([#48](https://github.com/sannybuilder/dev/issues/48))
  * the "Compile and Copy" destination could be configured ([#9](https://github.com/sannybuilder/dev/issues/9))
  * updated Spanish and Italian translations
  * added option to associate Sanny Builder with `*.csa` and `*.csi` files (CLEO Android scripts).

[Complete list of changes](https://github.com/sannybuilder/dev/issues/61)

:clap: Kudos to [MatiDragon](https://github.com/MatiDragon-YT) and [Wesser](https://gtaforums.com/profile/172776-wesser/) for updated translations.

## v. 3.5.1 - Aug 21, 2020

* fixed a bug with LCS and VCS compilation ([#56](https://github.com/sannybuilder/dev/issues/56))
* arrays in LCS and VCS now get custom names from `CustomVariables.ini` and `CustomArrays.ini` ([#53](https://github.com/sannybuilder/dev/issues/53))

:clap: Kudos to [darkdraggy](https://gtaforums.com/profile/1097463-darkdraggy/) for reporting the first bug and helping to test the fix.

## v. 3.5.0 - Aug 18, 2020

* updated [command line interface](https://docs.sannybuilder.com/editor/cli)
  * Unix-style syntax with hyphens ([#42](https://github.com/sannybuilder/dev/issues/42))
  * new options [`-x`](https://docs.sannybuilder.com/editor/cli#x), [`--game`](https://docs.sannybuilder.com/editor/cli#game), [`--mode`](https://docs.sannybuilder.com/editor/cli#mode)
* improved [edit modes](https://docs.sannybuilder.com/edit-modes)
  * `games.xml` renamed to `modes.xml`, inner [structure](https://docs.sannybuilder.com/edit-modes#file-format) updated
  * modes can now [inherit](https://docs.sannybuilder.com/edit-modes#extends) properties of other modes (useful for different versions of one game)
  * a new mode for SA v2.0 (using [`CustomLabels_v2.ini`](https://docs.sannybuilder.com/edit-modes/customlabels.ini))
  * separate modes for VCS PSP and VCS PS2 ([#41](https://github.com/sannybuilder/dev/issues/41))
  * support for [custom IDE/DAT](https://docs.sannybuilder.com/edit-modes#ide) files
  * "hot" reloading of modes configuration ([#15](https://github.com/sannybuilder/dev/issues/15))
  * increased available space for the mode name section ([#8](https://github.com/sannybuilder/dev/issues/8))
* updated opcode definitions for LCS/VCS\*
* removed SAMB to SB converter ([#27](https://github.com/sannybuilder/dev/issues/27))
* fixed [file association](https://docs.sannybuilder.com/editor/options/general#file-association) ([#43](https://github.com/sannybuilder/dev/issues/43#issuecomment-670219723))
* fixed a bug with LCS and VCS compilation ([#49](https://github.com/sannybuilder/dev/issues/49), [#0053](http://bugs.sannybuilder.com/view.php?id=53), [#0064](http://bugs.sannybuilder.com/view.php?id=64))
* fixed an issue with [Opcode Search Tool](https://docs.sannybuilder.com/editor/opcode-search-tool) window not available after minimize ([#35](https://github.com/sannybuilder/dev/issues/35))

{% hint style="warning" %}
New opcode definitions for GTA LCS and GTA VCS are incompatible with the previous definitions. You must disassemble the `main.scm` prior to making any scripts for those games.
{% endhint %}

:clap: Kudos to [marcelo\_20xx](https://gtaforums.com/profile/95582-marcelo_20xx/) and [fastman92](https://gtaforums.com/profile/423631-fastman92/) for their awesome contribution to this release.

## v. 3.4.1 - Aug 6, 2020

* fixed incorrect number of parameters in opcode `04E3` in `VCSSCM.INI`
* fixed the issue with the disassembler ignoring `Write opcodes` [option](https://docs.sannybuilder.com/editor/options/general#write-opcodes) and producing a callable label when a regular label is expected

## v. 3.4.0 - Aug 4, 2020

* added compiler support for the `SCM` format of GTA: Vice City Stories ([#2](https://github.com/sannybuilder/dev/issues/2))
* added syntax for [declaring](https://docs.sannybuilder.com/language/data-types/variables#shorter-form-of-declaration) local variables with custom names ([#32](https://github.com/sannybuilder/dev/issues/32))
* added a simpler form of calling subroutines using [labels](https://docs.sannybuilder.com/language/data-types#labels): a label name followed by a pair of parentheses `()` substitutes a `gosub` command
* added more customization points for [edit modes](https://docs.sannybuilder.com/edit-modes):
  * path to a GXT file used by the disassembler ([#7](https://github.com/sannybuilder/dev/issues/7))
  * path to `opcodes.txt` ([#5](https://github.com/sannybuilder/dev/issues/5))
  * exclusive [code templates](https://docs.sannybuilder.com/edit-modes/code-templates)
* added a new tutorial on higher level constructions in the Sanny Builder language, see `help\examples` directory
* IDE updates:
  * `Run San Andreas` menu action now checks for `gta-sa.exe` (Steam)
  * a new menu item to quickly bootstrap a CLEO script file (see the bottom note in [Code Templates](https://docs.sannybuilder.com/edit-modes/code-templates))
  * links to the new documentation portal in the main menu and error messages
* minor updates:
  * updated opcode descriptions (player money += in SA, award\_achievement in SA Mobile, `0479` in VCS)
  * renamed variables `script_controlled_player` and `flag_player_on_mission` to `PLAYER_ACTOR` and `ONMISSION` respectively in GTA III's `CustomVariables.ini` ([#3](https://github.com/sannybuilder/data/issues/3))
  * reverted files in the `help\GXT Strings` directory to the older version ([#25](https://github.com/sannybuilder/dev/issues/25))
  * renamed `macroes.txt` to `templates.txt`
* [translation updates](https://github.com/sannybuilder/translations/milestone/1)

:clap: Kudos to [OrionSR](https://gtaforums.com/profile/213525-orionsr/), [ZAZ](https://gtaforums.com/profile/67506-zaz/), [XMDS](https://gtaforums.com/profile/1034872-xmds), and [Wesser](https://gtaforums.com/profile/172776-wesser/) for their awesome contribution to this release.

## v. 3.3.3 - Oct 20, 2019

* fixed a [bug](http://bugs.sannybuilder.com/view.php?id=52) causing incorrect external scripts compilation

## v. 3.3.2 - Oct 19, 2019

* fixed bugs [#0036](http://bugs.sannybuilder.com/view.php?id=36), [#0050](http://bugs.sannybuilder.com/view.php?id=50)
* fixed the opcode `059C` in the Vice City mode

## v. 3.3.1 - Sep 14, 2019

* fixed the bug [#0048](http://bugs.sannybuilder.com/view.php?id=48)
* included `constants.txt` missing in the `GTA SA` mode

## v. 3.3.0 - Sep 8, 2019

* added compiler support for the Liberty City Stories `SCM` format
* added aliases for the [timer variables](https://docs.sannybuilder.com/language/data-types/variables#timer-variables): `TIMERA` and `TIMERB`
* changed the [Ranges check](https://docs.sannybuilder.com/editor/options/general#ranges-check) option to apply to the global variables

## v. 3.2.4 - Aug 4, 2019

* fixed bugs [#0031](http://bugs.sannybuilder.com/view.php?id=31), [#0032](http://bugs.sannybuilder.com/view.php?id=32), [#0033](http://bugs.sannybuilder.com/view.php?id=33), [#0040](http://bugs.sannybuilder.com/view.php?id=40), [#0044](http://bugs.sannybuilder.com/view.php?id=44)
* fixed a regression defect when a CHM help file can not be open
* updated opcode definitions for GTA 3 and Vice City
* added IDE support for CLEO 2.0 for III and VC

## v. 3.2.3 - Jul 7, 2019

* improved support for the version of GTA San Andreas for Wi﻿nStore, Xbox 360, and P﻿S3
* fixed an issue with opcodes `09A4` and `0A18` not being properly decompiled in the SA\_Mobile mode

## v. 3.2.2 - Jul 5, 2014

* added translation into Korean language (thanks to MINE)
* improved [HEX..END](https://docs.sannybuilder.com/language/instructions/hex..end) construct processing
* fixed the bug [#0000028](http://bugs.sannybuilder.com/view.php?id=28)

## v. 3.2.1 - May 4, 2014

* added translation into Indonesian language (thanks to IMasterFX)
* CLEO for GTA III and CLEO for Vice City updated (thanks to Silent)
* fixed bugs [#0000026](http://bugs.sannybuilder.com/view.php?id=26), [#0000027](http://bugs.sannybuilder.com/view.php?id=27)

## v. 3.2.0 - Mar 22, 2014

* adding custom edit modes by editing the `games.xml` file is now possible
* new edit mode - `GTA SA SCR`
* variables can be quickly declared using a type name prefix
* CLEO updated to the version 4.3.16
* added the [InstaSearch](https://docs.sannybuilder.com/editor/features#instasearch) feature (formerly 'jump to label' function)
* mission names can be changed by editing appropriate `missions.txt` files
* improved [association](https://docs.sannybuilder.com/editor/options/general#file-association) of the script file extensions with Sanny Builder
* Sanny Builder only checks if the game directory path is not empty, no checks for specific files (such as an `.exe`)
* minor improvements in the SB updating feature
* changed the Sanny Builder icon and the menu icons
* fixed the bug [#0000024](http://bugs.sannybuilder.com/view.php?id=24)

## v. 3.1.4 -Feb 22, 2014

* CLEO updated to the version 4.3.14
* fixed minor interface glitches for hi-res displays
* updated German, Polish, Chinese, Ukrainian translations

## v. 3.1.3 - Dec 22, 2013

* added support for iOS and Android versions of GTA San Andreas
* a [code scan](https://docs.sannybuilder.com/editor/options/editor#code-scan-distance) value is now used when making a list of constants
* updated Chinese and German translations

## v. 3.1.2 - Oct 6, 2013

* added Czech translation
* added options to associate file extensions `.cs` and `.cm` with Sanny Builder
* fixed bugs [#0000011](http://bugs.sannybuilder.com/view.php?id=11), [#0000020](http://bugs.sannybuilder.com/view.php?id=20)

## v. 3.1.1 - Sep 22, 2013

* added a new directive [$OPCODE](https://docs.sannybuilder.com/language/directives#usdopcode) to register a new opcode in the script
* corrected behavior of the directive [$INCLUDE](https://docs.sannybuilder.com/language/directives#usdinclude) while scanning directories for the file
* fixed bugs [#0000005](http://bugs.sannybuilder.com/view.php?id=5), [#0000019](http://bugs.sannybuilder.com/view.php?id=19)

## v. 3.1.0 - Sep 14, 2013

* `VCSCM.ini` is updated to include opcodes for the GTA VC mobile version and unsupported opcodes
* when the option [Add extra info to SCM](https://docs.sannybuilder.com/editor/options/general#add-extra-info-to-scm) is enabled, Sanny Builder remembers the game a script is compiled for, to use the proper edit mode when decompiling
* when the option `Add extra info to SCM` is enabled, Sanny Builder adds a source code into a script file (only when the directive [$EXTERNAL](https://docs.sannybuilder.com/language/directives#usdexternal) or [$CLEO](https://docs.sannybuilder.com/language/directives#usdcleo) is present)
* added a new directive [$NOSOURCE](https://docs.sannybuilder.com/language/directives#usdnosource) to prohibit including a source code into a compiled script
* some hotkeys are now customizable in the options
* added a feature to check automatically if an update exists at the program startup
* [directives ](https://docs.sannybuilder.com/language/directives)`$VERSION` and `$VERSION_RESTORE` are deprecated
* updated Spanish and Chinese translations
* Coords manager is now able to change the player's angle in GTA VC
* The Sanny Builder installation now includes the [SCRLog CLEO plugin](http://www.gtagarage.com/mods/show.php?id=23846) by LINK/2012 (can be found in the `tools` folder)
* fixed bugs [#0000010](http://bugs.sannybuilder.com/view.php?id=10), [#0000014](http://bugs.sannybuilder.com/view.php?id=14), [#0000015](http://bugs.sannybuilder.com/view.php?id=15), [#0000016](http://bugs.sannybuilder.com/view.php?id=16)

## v. 3.09 - Jul 28, 2013

* Sanny Builder is licensed under the Sanny Builder Freeware/Donationware License Agreement
* added a feature to report found bugs via [the official bug tracker](http://bugs.sannybuilder.com)
* added a feature to check if an update is available
* Coords manager is upgraded to work with all known versions of GTA3, VC and SA (thanks to Silent)
* added an updated Chinese translation
* fixed bugs [#0000002](http://bugs.sannybuilder.com/view.php?id=2), [#0000003](http://bugs.sannybuilder.com/view.php?id=3), [#0000004](http://bugs.sannybuilder.com/view.php?id=4), [#0000006](http://bugs.sannybuilder.com/view.php?id=6), [#0000009](http://bugs.sannybuilder.com/view.php?id=9)
* minor design changes

## v. 3.08 - Jul 5, 2013

* added [Silent's ASI Loader](http://www.gtagarage.com/mods/show.php?id=21709) v1.1 as a default ASI loader for CLEO 3 and CLEO 4
* added Chinese translation
* added classes `File` and `Audiostream` for backward compatibility with CLEO 4 by Alien

{% hint style="info" %}
`File.Open`, `Audiostream.Load`, `Audiostream.Load3D` were methods in CLEO 4. Now they are properties. It means, if you get an error when compiling old sources with these commands, change their syntax to:\
`var = File.Open(file_name, mode)`\
`var = Audiostream.Load(file_name)`\
`var = Audiostream.Load3D(file_name)`
{% endhint %}

* the compiler now accepts a string literal as a parameter in a class property

{% hint style="info" %}
There is a [limit](https://docs.sannybuilder.com/language/instructions/classes#properties) on using space characters in such parameter.
{% endhint %}

* the compiler now throws an error for a malformed string literal like `text1"text2"` or `text1'text2'` (without a leading quotation mark)
* the compiler is able to compile comment markers (curly braces) within a string (`"{text1}text2"`)
* the semicolon (`;`) can not be used to comment out a line of the code
* changed the syntax of the [\debug](https://docs.sannybuilder.com/readme#command-line-usage) parameter
* added flag icons for the available languages in the options
* fixed some issues with disassembling of the VCS SCM format

## v. 3.06 - Jun 17, 2013

* added new [operators ](https://docs.sannybuilder.com/language/instructions/built-in-commands)`++` and `--`
* added support for block [comments](https://docs.sannybuilder.com/editor/features#commenting-code) `/* */`
* `SASCM.INI` got an update from the [GTAG Database](https://gtagmodding.com/opcode-database/)
* replaced properties `Actor.Armour` and `Actor.Car` with their correct versions `Actor.AddArmour` and `Actor.MissionCar`
* added a new property `Actor.CurrentCar` for the opcode `03C0` in the SA and VC classes.
* added new hotkeys `Ctrl+Num+` and `Ctrl+Num-` to quickly change the text size
* Sanny Builder now remembers a number of closed files for the option [Load all closed files](https://docs.sannybuilder.com/editor/options/editor#editor-configuration)
* fixed a bug when the compiler failed to compile a source with multiple [HEX..END](https://docs.sannybuilder.com/language/instructions/hex..end) constructs
* fixed a bug of version 3.05 when the program hung on startup trying to open a file

## v. 3.05 - Jun 5, 2013

* added new translations for the following languages: Finnish, Polish, Hungarian, Turkish, Ukrainian
* the CLEO library updated to version 4.1.1.30f (CLEO 4 by Alien)
* added a possibility to install CLEO for GTA III and Vice City (made by Alien)
* opcode files (\*\*SCM.ini, opcodes.txt) replaced with the ones from the CLEO 4 library installation
* new [command line parameter](https://docs.sannybuilder.com/readme#command-line-usage) `\nosplash`

## v. 3.04 - Aug 17, 2008

* the editor is able to to convert hexadecimal numbers to decimal ones and vice versa (`Ctrl+H`), and convert the model names to their IDs (`Ctrl+Alt+H`)
* removed a warning message about `script.img` being used by the game when compiling a CLEO script
* the post-compilation report shows the size of a CLEO script (as `Largest script`)
* fixed a bug when compiling an array with constant numeric indexes
* the installer no longer requires the system administrator rights

## v. 3.03 - Nov 17, 2007

* the previous version of CLEO had a bug
* minor changes (the toolbar position wasn't saved)

## v. 3.02 - Nov 16, 2007

* new version of the CLEO library
* main toolbar is movable
* the Compile+Copy feature (`F7`) does not create a copy of the output file if the source has `$E` or `$CLEO` directives
* during a compilation run after pressing `F6`, the output file for a source file with the `$CLEO` directive

  is created in the same directory; after `F7` the output file is created in the CLEO directory (similarly to `SCM` files)
* new translations: Italian, Portuguese

## v. 3.01- Aug 6, 2007

* bug-fixes update

## v. 3.00 - Aug 4, 2007

* the CLEO 3 library is integrated into Sanny Builder
* disassembler supports the `SCM` format of Vice City Stories
* [constants ](https://docs.sannybuilder.com/language/data-types/constants)support
* new [directives](https://docs.sannybuilder.com/language/directives) `$INCLUDE`,`$EXTERNAL`,`$CLEO`
* [writing of the additional info](https://docs.sannybuilder.com/editor/options/general#add-extra-info-to-scm) to the end of a script file
* [custom arrays](https://github.com/sannybuilder/docs/blob/en/broken-reference/README.md) support
* a [possibility](https://docs.sannybuilder.com/editor/debug-options#skip_scm_header) to decompile SCM files having no header
* an ability to create an external script named `AAA`
* a new [command line parameter](https://docs.sannybuilder.com/readme#command-line-usage) `\compile`
* a possibility to use a floating-point value as the counter value in a [FOR..END](https://docs.sannybuilder.com/language/control-flow/loops#for-end) loop
* dropped support for the commands `WriteMem` and `ReadMem`
* a possibility to use regular expressions when searching
* a possibility to save a source file in the `RTF` or `HTML` formats
* an ability to skip the splashes at SA startup
* a new key combo `Ctrl+Enter`
* updated `SASCM.INI`

## v. 2.99e - Jan 1, 2007

* fixed a bug when parts of the code within the [HEX..END](https://docs.sannybuilder.com/language/instructions/hex..end) construct disappeared in [debug mode](https://docs.sannybuilder.com/editor/debug-options#debug-options)
* a HEX..END construct now accepts the [aDMA](https://docs.sannybuilder.com/language/instructions/hex..end#using-adma-numbers) type and string literals
* a [FOR ](https://docs.sannybuilder.com/language/control-flow/loops#for-end)loop accepts model identifiers as the counter values

## v. 2.99d - Dec 3, 2006

* Memory Hacker became a [separate tool](https://sannybuilder.com/downloads).
* fixed a decompiler bug

## v. 2.99c - Nov 30, 2006

* added the Memory Hacker plug-in
* disassembler supports the `SCM` format of Liberty City Stories
* support for constant numbers as indexes of global [arrays](https://docs.sannybuilder.com/language/data-types/arrays)
* a global variable gets disassembled with the type [aDMA](https://docs.sannybuilder.com/language/data-types#variables) (`&`) if its address is not divisible by 4
* the compiler uses default values during compilation of a`main.scm` with the missing header segments (`DEFINE XXX`)
* a possibility to Drag\&Drop a file into the editor to open it
* new preprocessor [directives](https://docs.sannybuilder.com/language/directives): `{$VERSION}`, `{$VERSION_RESTORE}`

{% hint style="info" %}
If you get a compiler error message like `Unknown directive xxxx` when compiling the sources from v2.99, replace the line `{$VERSION xxxx}` to any place after the header, for instance before the comment `//-------------MAIN---------------`
{% endhint %}

## v. 2.99 - Sep 27, 2006

* added new commands `WriteMem` and `ReadMem`
* support for [hexadecimal](https://docs.sannybuilder.com/language/data-types#hexadecimal-numbers) numbers
* `HEX..END` statement accepts labels and global variables
* full support for the [ADMA](https://docs.sannybuilder.com/language/data-types#variables) datatype
* an opportunity to give [custom names](https://github.com/sannybuilder/docs/blob/en/broken-reference/README.md) to labels
* an opportunity to choose a [different case](https://github.com/sannybuilder/docs/blob/en/broken-reference/README.md) for custom names and strings
* added console to switch [debug options](https://docs.sannybuilder.com/editor/debug-options)
* decompiler supports `GXT` files of GTA III & GTA VC
* added escape sequences in [long string literals](https://docs.sannybuilder.com/language/data-types#string-literals)
* information about [INI](https://docs.sannybuilder.com/edit-modes/opcodes-list-scm.ini) file (version, author, date)
* classes support the original order of the parameters (like in `SASCM.INI` by PLPynton). The script should have a line {`$VERSION x.0.xxxx`} to support such order, see comments in the `INI` about this
* added option to confirm an exit from the program
* a dropdown menu to switch [edit modes](https://docs.sannybuilder.com/edit-modes)
* converting of the selected piece of code
* an opportunity to pass the current file name to an [external tool](https://docs.sannybuilder.com/editor/features#external-tools-plug-ins-menu)
* corrected some mistakes in the configuration files
* removed auto-casting of an integer number to the float one when a variable is declared as `Float`. Now the compiler chooses an opcode depending on the number type only (in math expressions without opcodes)
* reading/writing of the player's z\_angle in [Coord Manager](https://docs.sannybuilder.com/editor/features#player-coordinates-management); quick insertion of the z\_angle value in the script by pressing `Ctrl+Shift+E` (for SA)

{% hint style="info" %}
The following opcodes were changed in `SASCM.INI`: `0181`, `00c3`, `00c4` in order to support the commands `WriteMem` and `ReadMem`. The original scripts did not use these opcodes and the unmodified games do not implement them so it should not break existing scripts.
{% endhint %}

{% hint style="info" %}
The class member `Car.SetSpeedInstantly` was named incorrectly (with a wrong opcode) in the `classes.db` for SA. If you get an error message about this method during compilation, rename it to`Actor.DrivingPlane`. We apologize.
{% endhint %}

## v. 2.98 - Aug 4, 2006

* Sanny Builder became multilingual
* added menu for [external applications](https://docs.sannybuilder.com/editor/features#external-tools-plug-ins-menu)
* a special version of [Opcode Search Tool](https://docs.sannybuilder.com/editor/opcode-search-tool) has been built into SB. The details can be found in the file `OST Readme.txt`
* validating math expressions during disassembling when [Write opcodes](https://docs.sannybuilder.com/editor/options/general#write-opcodes) is disabled (to ensure that opcodes are used properly)
* an [opportunity to choose](https://docs.sannybuilder.com/editor/options/general#manual-img-opening) a `script.img` file manually if the folder with the `main.scm` file does not have one
* an opportunity to add a new [code template](https://docs.sannybuilder.com/editor/features#code-templates) directly from the editor; added template descriptions
* the list of models can be sorted alphabetically/by value (`Alt+S` when the list is active)
* minor corrections and changes

## v. 2.97 - Jun 11, 2006

* new data type: `&` for direct byte address ([ADMA](https://docs.sannybuilder.com/language/data-types)).
* minor updates

## v. 2.96 - Apr 1, 2006

* improved the [jump to label](https://docs.sannybuilder.com/editor/features#instasearch) option
* added an opportunity to show the list of templates
* added an [option](https://docs.sannybuilder.com/editor/options/general#replace-mission-numbers) to replace mission numbers with their names
* fixed some bugs

## v. 2.9f - Feb 18, 2006

* the `DEFINE OBJECT` list is now optional (the compiler can make it out of model names used in the script)
* support for block comments `{}`
* keypress [recording](https://docs.sannybuilder.com/editor/features#keypress-recording-macro)
* minor changes

## v. 2.9 - Dec 15, 2005

* added [additional commands](https://docs.sannybuilder.com/language/instructions/built-in-commands)
* new operator `IN`
* added [IF..THEN..ELSE..END](https://docs.sannybuilder.com/language/control-flow/conditions#high-level-constructs)
* added support for `WHILE` and `REPEAT` [loops](https://docs.sannybuilder.com/language/control-flow/loops)
* added support for nested loops
* added a new function [Alloc](https://docs.sannybuilder.com/language/instructions/built-in-commands#alloc), allowing to assign a specific memory address to a global variable
* new comment style: `//`
* the editor now remembers the position of markers and the cursor in closed files

## v. 2.6 - Nov 5, 2005

* full support of `SCM` formats of Vice City and GTA 3
* an opportunity to [declare](https://docs.sannybuilder.com/language/instructions/classes#declaring-a-class-instance) variables and arrays as class instances
* added a feature to display the list of variables and labels
* added [loops](https://docs.sannybuilder.com/language/control-flow/loops) (`FOR..END`)
* minor changes:
  * missions can be referenced by their name (`start_mission MYMISSION` where `MYMISSION` is the label defined in line`DEFINE MISSION XX at @MYMISSION`)
  * `Ctrl+Space` displays the list of imported models (`DEFINE OBJECT`)
  * new [operator](https://docs.sannybuilder.com/language/control-flow/conditions#relational-operators) `<>`
  * if the disassembler can't find a `script.img` file, it uses the one from the game folder
  * added `handle` type for [arrays](https://docs.sannybuilder.com/language/data-types/arrays)
  * an [opportunity](https://docs.sannybuilder.com/editor/options/general#show-warning) to switch off a warning that the `script.img` file is being used by the game

## v. 2.5 - Oct 10, 2005

* added [properties](https://docs.sannybuilder.com/language/instructions/classes#properties) support
* added [code templates](https://docs.sannybuilder.com/editor/features#code-templates) support
* added construction [VAR...END](https://docs.sannybuilder.com/language/data-types/variables#var-end-construct) for variables declaration
* all math commands can be used without opcodes (`0004..008B`)
* new [operators](https://docs.sannybuilder.com/language/control-flow/conditions#relational-operators) `<` and `<=`
* added a capability that the compiler itself set necessary value for the [IF command](https://docs.sannybuilder.com/language/control-flow/conditions#low-level-if-statements)
* added [extended parameters](https://docs.sannybuilder.com/language/instructions/classes#extended-parameters-class-constants) support
* added models list showing
* minor changes and fixes

## v. 2.0 - Sep 18, 2005

* added [classes](https://docs.sannybuilder.com/language/instructions/classes) support
* added [keywords](https://docs.sannybuilder.com/language/instructions/keywords) support
* some math commands can be written without opcodes (e.g.`0004`, `0005`, `0006`, `0007`, `0038`, `0039`, `0042`, `0043`)
* for the opcode `00D6` the default parameter is `0` (`if` = `if 0`)
* added the [option](https://github.com/sannybuilder/docs/blob/en/broken-reference/README.md) to customize labels output
* added [keywords](https://docs.sannybuilder.com/language/instructions/keywords) `True` and `False` which correspond to `1` and `0`
* added construction [HEX...END](https://docs.sannybuilder.com/language/instructions/hex..end) for writing hexadecimal values directly in a binary output

## v. 1.1 - Sep 7, 2005

* added [coords manager](https://docs.sannybuilder.com/editor/features#player-coordinates-management)
* some bugs fixed

## v. 1.0 - Sep 4, 2005

* new format of [labels](https://docs.sannybuilder.com/language/data-types#labels)
* added [converter](https://docs.sannybuilder.com/editor/features#sa-mission-builder-source-code-converter) from the BW's SA Mission Builder syntax
* disassembler adds the model names and the text from `american.gxt` in a source file
* added new options
* fixed some bugs

## v. 0.8 - Aug 20, 2005

* added an ability to [associate](https://docs.sannybuilder.com/editor/options/general#file-association) `SCM` files with Sanny Builder
* disassembler adds an additional index to the file name if a file with the same name already exists (e.g, if `main.scm.txt` already exists, a new file will be `main.scm[0].txt`)
* more informative error messages
* added a check for duplicated labels
* fixed some bugs

## v. 0.7 - Aug 10, 2005

* added new options for text editing
* added an ability to work with multiple files simultaneously
* added a function to auto-complete an opcode with the `F1` button (beta)

## v. 0.6 - Aug 4, 2005

* disassembling support for GTA SA `SCM` format
* compilation of text sources into `main.scm` and `script.img`
* basic features for text editing
