- functions support (
function..end
) - CLEO 5 modules support
- new SBL edit modes
- debugger for main.scm scripts
switch..end
- binary number format (
0b101010
) - new tabs
- other improvements and fixes
See the complete list of changes. Visit SannyBuilder 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. {% endhint %}
- array name in expressions without opcode could be a constant #250
- preserve global variable index when disassembling with extra info #251
- default choice for option Case converting should be "As is" #256
- fix an issue with compiling opcode 0B17 #254
- fix an issue when Sanny doesn't present the option to use the included script text. #258
- fixed some issues with string variables #259, #265
- command names defined in Sanny Builder Library JSON files are now valid keywords
- HEX..END improvements (repeat the same byte N times, include binary files)
- simplified const and variable declarations (
const x = 1, y = 2
,float x, y, z
) - new operators (
bitwise
,=@
,=#
) {$INCLUDE_ONCE}
directive- adding new edit modes can be done by copying them into the
data
folder, themodes.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.
{% 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. {% endhint %}
- fix bug #216
- keep previously opened documents when launching SB with an input file (Open with) #151
- add "--decompile" parameter to CLI
- fix bugs #212, #213, #180
- fix some compilation issues with classes using string literals
- added support for more commands terminating an if statement with multiple conditions #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 (Spanish, Ukrainian, Romanian, Armenian)
- new color themes contributed by the users
- massive update for local help files (CHM)
- new edit mode for GTA SA PS2 with PS2 CLEO commands
- updated local CLEO 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
- fixed bugs #172, #189
👏 Thanks to everyone who contributed to this version: NicusorN5, Junior_Djjr, wmysterio, MatiDragon, DanielSant0s, JaggerJam69, Vital, Sdas50, nick7
- integration with Sanny Builder Library: a new portal documenting all known opcodes
- 16 new color 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 - new debug option to let disassembler ignore custom information attached to the compiled script
- new CLI parameter to launch the editor with custom options
- custom user templates are now stored in a separate file and kept between updates
- hotkeys using Numpad buttons have been changed (Zoom text: Ctrl + +/- and Navigate to label and back: Alt + Right/Left)
- updated CLEO+ plugin to v1.0.8
- updated translations to Hungarian, Spanish, Ukrainian and Chinese languages
- fixed 16 bugs
👏 Kudos to contributors to this release: forms55, MatiDragon, Vital, wmysterio, XMDS
- declared constants are getting highlighted (#28)
- the autocomplete list displays declared constants (#40)
- each editor tab maintains its own edit mode selection (#87)
- new VC Mobile mode with CLEO Android opcodes (sannybuilder/data#11)
- added spaceeinstein's Opcode Restoration project opcodes in VC PC mode
- error messages now have a link to localized documentation if possible (#101)
- user tools configuration supports @sb: and @game: variables (#72)
- CLEO+ plugin updated to v1.0.7
- fixed bugs: #103 #114 #120
{% hint style="info" %} Read more on constants highlighting there: Language service. {% endhint %}
👏 Kudos to XMDS for contributions to this release.
- fixed a bug with labels missing in disassembled CLEO scripts #99
- updated translation to Ukrainian language
- updated CLEO+ plugin to v1.0.4
- updated opcode definitions and keywords for CLEO opcodes #95
- fixed several regression bugs in compiler #96, #98
- minor fixes and improvements (see the complete list)
👏 Kudos to wmysterio and XMDS for their contributions.
- support for enumerated types in classes
- new types of opcode parameters:
m%
andk%
- initial support for language extensions
- better integration with CLEO library:
- updated third-party tools in the
tools
directory:- CLEO v4.4
- SCRLog v2020.2
- added CLEO+ plugin for GTA SA with 250+ new opcodes
- recognize Cleo for Android scripts (
*.csa
,*.csi
) as compiled scripts - compiler uses CLEO opcodes
0A9E
,0A9F
,0A90
,0A91
in certain expressions when no opcode is supplied - unified description and keywords for CLEO opcodes across different edit modes
- updated third-party tools in the
- added keywords for all opcodes in GTA SA SCR mode
- word thread has been replaced with script in opcode definitions and keywords (see why)
- IDE updates:
👏 Kudos to MatiDragon and Wesser for updated translations.
- fixed a bug with LCS and VCS compilation (#56)
- arrays in LCS and VCS now get custom names from
CustomVariables.ini
andCustomArrays.ini
(#53)
👏 Kudos to darkdraggy for reporting the first bug and helping to test the fix.
- updated command line interface
- improved edit modes
games.xml
renamed tomodes.xml
, inner structure updated- modes can now inherit properties of other modes (useful for different versions of one game)
- a new mode for SA v2.0 (using
CustomLabels_v2.ini
) - separate modes for VCS PSP and VCS PS2 (#41)
- support for custom IDE/DAT files
- "hot" reloading of modes configuration (#15)
- increased available space for the mode name section (#8)
- updated opcode definitions for LCS/VCS*
- removed SAMB to SB converter (#27)
- fixed file association (#43)
- fixed a bug with LCS and VCS compilation (#49, #0053, #0064)
- fixed an issue with Opcode Search Tool window not available after minimize (#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 %}
👏 Kudos to marcelo_20xx and fastman92 for their awesome contribution to this release.
- fixed incorrect number of parameters in opcode
04E3
inVCSSCM.INI
- fixed the issue with the disassembler ignoring
Write opcodes
option and producing a callable label when a regular label is expected
- added compiler support for the
SCM
format of GTA: Vice City Stories (#2) - added syntax for declaring local variables with custom names (#32)
- added a simpler form of calling subroutines using labels: a label name followed by a pair of parentheses
()
substitutes agosub
command - added more customization points for edit modes:
- path to a GXT file used by the disassembler (#7)
- path to
opcodes.txt
(#5) - exclusive 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 forgta-sa.exe
(Steam)- a new menu item to quickly bootstrap a CLEO script file (see the bottom note in 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
andflag_player_on_mission
toPLAYER_ACTOR
andONMISSION
respectively in GTA III'sCustomVariables.ini
(#3) - reverted files in the
help\GXT Strings
directory to the older version (#25) - renamed
macroes.txt
totemplates.txt
- updated opcode descriptions (player money += in SA, award_achievement in SA Mobile,
- translation updates
👏 Kudos to OrionSR, ZAZ, XMDS, and Wesser for their awesome contribution to this release.
- fixed a bug causing incorrect external scripts compilation
- fixed the bug #0048
- included
constants.txt
missing in theGTA SA
mode
- added compiler support for the Liberty City Stories
SCM
format - added aliases for the timer variables:
TIMERA
andTIMERB
- changed the Ranges check option to apply to the global variables
- fixed bugs #0031, #0032, #0033, #0040, #0044
- 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
- improved support for the version of GTA San Andreas for WinStore, Xbox 360, and PS3
- fixed an issue with opcodes
09A4
and0A18
not being properly decompiled in the SA_Mobile mode
- added translation into Korean language (thanks to MINE)
- improved HEX..END construct processing
- fixed the bug #0000028
- added translation into Indonesian language (thanks to IMasterFX)
- CLEO for GTA III and CLEO for Vice City updated (thanks to Silent)
- fixed bugs #0000026, #0000027
- 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 feature (formerly 'jump to label' function)
- mission names can be changed by editing appropriate
missions.txt
files - improved 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
- CLEO updated to the version 4.3.14
- fixed minor interface glitches for hi-res displays
- updated German, Polish, Chinese, Ukrainian translations
- added support for iOS and Android versions of GTA San Andreas
- a code scan value is now used when making a list of constants
- updated Chinese and German translations
- added Czech translation
- added options to associate file extensions
.cs
and.cm
with Sanny Builder - fixed bugs #0000011, #0000020
- added a new directive $OPCODE to register a new opcode in the script
- corrected behavior of the directive $INCLUDE while scanning directories for the file
- fixed bugs #0000005, #0000019
VCSCM.ini
is updated to include opcodes for the GTA VC mobile version and unsupported opcodes- when the option 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 or $CLEO is present) - added a new directive $NOSOURCE 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
$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 by LINK/2012 (can be found in the
tools
folder) - fixed bugs #0000010, #0000014, #0000015, #0000016
- Sanny Builder is licensed under the Sanny Builder Freeware/Donationware License Agreement
- added a feature to report found bugs via the official bug tracker
- 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, #0000003, #0000004, #0000006, #0000009
- minor design changes
- added Silent's ASI Loader v1.1 as a default ASI loader for CLEO 3 and CLEO 4
- added Chinese translation
- added classes
File
andAudiostream
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 on using space characters in such parameter. {% endhint %}
- the compiler now throws an error for a malformed string literal like
text1"text2"
ortext1'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 parameter
- added flag icons for the available languages in the options
- fixed some issues with disassembling of the VCS SCM format
- added new operators
++
and--
- added support for block comments
/* */
SASCM.INI
got an update from the GTAG Database- replaced properties
Actor.Armour
andActor.Car
with their correct versionsActor.AddArmour
andActor.MissionCar
- added a new property
Actor.CurrentCar
for the opcode03C0
in the SA and VC classes. - added new hotkeys
Ctrl+Num+
andCtrl+Num-
to quickly change the text size - Sanny Builder now remembers a number of closed files for the option Load all closed files
- fixed a bug when the compiler failed to compile a source with multiple HEX..END constructs
- fixed a bug of version 3.05 when the program hung on startup trying to open a file
- 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
\nosplash
- 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
- the previous version of CLEO had a bug
- minor changes (the toolbar position wasn't saved)
-
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
directiveis created in the same directory; after
F7
the output file is created in the CLEO directory (similarly toSCM
files) -
new translations: Italian, Portuguese
- bug-fixes update
- the CLEO 3 library is integrated into Sanny Builder
- disassembler supports the
SCM
format of Vice City Stories - constants support
- new directives
$INCLUDE
,$EXTERNAL
,$CLEO
- writing of the additional info to the end of a script file
- custom arrays support
- a possibility to decompile SCM files having no header
- an ability to create an external script named
AAA
- a new command line parameter
\compile
- a possibility to use a floating-point value as the counter value in a FOR..END loop
- dropped support for the commands
WriteMem
andReadMem
- a possibility to use regular expressions when searching
- a possibility to save a source file in the
RTF
orHTML
formats - an ability to skip the splashes at SA startup
- a new key combo
Ctrl+Enter
- updated
SASCM.INI
- fixed a bug when parts of the code within the HEX..END construct disappeared in debug mode
- a HEX..END construct now accepts the aDMA type and string literals
- a FOR loop accepts model identifiers as the counter values
- Memory Hacker became a separate tool.
- fixed a decompiler bug
- added the Memory Hacker plug-in
- disassembler supports the
SCM
format of Liberty City Stories - support for constant numbers as indexes of global arrays
- a global variable gets disassembled with the type aDMA (
&
) 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:
{$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 %}
- added new commands
WriteMem
andReadMem
- support for hexadecimal numbers
HEX..END
statement accepts labels and global variables- full support for the ADMA datatype
- an opportunity to give custom names to labels
- an opportunity to choose a different case for custom names and strings
- added console to switch debug options
- decompiler supports
GXT
files of GTA III & GTA VC - added escape sequences in long string literals
- information about 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 theINI
about this - added option to confirm an exit from the program
- a dropdown menu to switch edit modes
- converting of the selected piece of code
- an opportunity to pass the current file name to an external tool
- 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; 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 toActor.DrivingPlane
. We apologize.
{% endhint %}
- Sanny Builder became multilingual
- added menu for external applications
- a special version of 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 is disabled (to ensure that opcodes are used properly)
- an opportunity to choose a
script.img
file manually if the folder with themain.scm
file does not have one - an opportunity to add a new code template 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
- new data type:
&
for direct byte address (ADMA). - minor updates
- improved the jump to label option
- added an opportunity to show the list of templates
- added an option to replace mission numbers with their names
- fixed some bugs
- 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
- minor changes
- added additional commands
- new operator
IN
- added IF..THEN..ELSE..END
- added support for
WHILE
andREPEAT
loops - added support for nested loops
- added a new function 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
- full support of
SCM
formats of Vice City and GTA 3 - an opportunity to declare variables and arrays as class instances
- added a feature to display the list of variables and labels
- added loops (
FOR..END
) - minor changes:
- missions can be referenced by their name (
start_mission MYMISSION
whereMYMISSION
is the label defined in lineDEFINE MISSION XX at @MYMISSION
) Ctrl+Space
displays the list of imported models (DEFINE OBJECT
)- new operator
<>
- if the disassembler can't find a
script.img
file, it uses the one from the game folder - added
handle
type for arrays - an opportunity to switch off a warning that the
script.img
file is being used by the game
- missions can be referenced by their name (
- added properties support
- added code templates support
- added construction VAR...END for variables declaration
- all math commands can be used without opcodes (
0004..008B
) - new operators
<
and<=
- added a capability that the compiler itself set necessary value for the IF command
- added extended parameters support
- added models list showing
- minor changes and fixes
- added classes support
- added 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 is0
(if
=if 0
) - added the option to customize labels output
- added keywords
True
andFalse
which correspond to1
and0
- added construction HEX...END for writing hexadecimal values directly in a binary output
- added coords manager
- some bugs fixed
- new format of labels
- added 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
- added an ability to associate
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 bemain.scm[0].txt
) - more informative error messages
- added a check for duplicated labels
- fixed some bugs
- 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)
- disassembling support for GTA SA
SCM
format - compilation of text sources into
main.scm
andscript.img
- basic features for text editing