Download Instructions
An ASI loader is required for CLEO 5 to work. CLEO 5 comes pre-packaged with several popular ASI Loaders (Silent's ASI Loader and Ultimate ASI Loader).
If you don't have an ASI loader installed already or unsure which one to download:
If you prefer Ultimate ASI Loader:
If you have an ASI loader installed already:
- Download this archive which contains ONLY CLEO 5 library and plugins.
Installation
- Unzip the archive to GTA San Andreas game directory.
Changelog
- support for CLEO modules feature sannybuilder/dev#264
- new Audio plugin
- audio related opcodes moved from CLEO core into separated plugin
- CLEO's audio now obey game's volume settings
- implemented Doppler effect for 3d audio streams (fast moving sound sources)
- CLEO's audio now follows game speed changes
- sound device can be now manually selected in .ini file
- new opcode 2500 (is_audio_stream_playing)
- new opcode 2501 (get_audio_stream_duration)
- new opcode 2502 (get_audio_stream_speed)
- new opcode 2503 (set_audio_stream_speed)
- new opcode 2504 (set_audio_stream_volume_with_transition)
- new opcode 2505 (set_audio_stream_speed_with_transition)
- new opcode 2506 (set_audio_stream_source_size)
- new opcode 2507 (get_audio_stream_progress)
- new opcode 2508 (set_audio_stream_progress)
- new opcode 2509 (get_audio_stream_type)
- new opcode 250A (set_audio_stream_type)
- new DebugUtils plugin
- new opcode 00C3 (debug_on)
- new opcode 00C4 (debug_off)
- new opcode 2100 (breakpoint)
- new opcode 2101 (trace)
- new opcode 2102 (log_to_file)
- implemented support of opcodes 0662, 0663 and 0664 (original Rockstar's script debugging opcodes. See DebugUtils.ini)
- new FileSystemOperations plugin
- forbidden scripts from accessing and changing any files outside game root or game settings directory
- file related opcodes moved from CLEO core into separated plugin
- opcode 0A9E (write_to_file) now supports literal numbers and strings
- fixed bug causing file stream opcodes not working correctly when read-write modes are used
- fixed buffer overflows in file stream read opcodes
- added/fixed support of all file stream opcodes in legacy mode (Cleo3)
- new opcode 2300 (get_file_position)
- new opcode 2301 (read_block_from_file)
- new opcode 2302 (write_block_to_file)
- new opcode 2303 (resolve_filepath)
- new opcode 2304 (get_script_filename)
- new Math plugin
- math related opcodes moved from CLEO core into separated plugin
- new opcode 2700 (is_bit_set)
- new opcode 2701 (set_bit)
- new opcode 2702 (clear_bit)
- new opcode 2703 (toggle_bit)
- new opcode 2704 (is_truthy)
- new opcode 2705 (pick_random_int)
- new opcode 2706 (pick_random_float)
- new opcode 2707 (pick_random_text)
- new opcode 2708 (random_chance)
- new MemoryOperations plugin
- memory related opcodes moved from CLEO core into separated plugin
- validation of input and output parameters for all opcodes
- opcode 0A8C (write_memory) now supports strings
- new opcode 2400 (copy_memory)
- new opcode 2401 (read_memory_with_offset)
- new opcode 2402 (write_memory_with_offset)
- new opcode 2403 (forget_memory)
- new opcode 2404 (get_script_struct_just_created)
- new opcode 2405 (is_script_running)
- new opcode 2406 (get_script_struct_from_filename)
- new opcode 2407 (is_memory_equal)
- new opcode 2408 (terminate_script)
- new Text plugin
- text related opcodes moved from CLEO core into separated plugin
- new opcode 2600 (is_text_empty)
- new opcode 2601 (is_text_equal)
- new opcode 2602 (is_text_in_text)
- new opcode 2603 (is_text_prefix)
- new opcode 2604 (is_text_suffix)
- new opcode 2605 (display_text_formatted)
- new opcode 2606 (load_fxt)
- new opcode 2607 (unload_fxt)
- new opcode 2608 (get_text_length)
- new and updated opcodes
- implemented support for memory pointer string arguments for all game's native opcodes
- 0B1E (sign_extend)
- 0DD5 (get_game_platform)
- 2000 (get_cleo_arg_count)
- 2002 (cleo_return_with)
- 2003 (cleo_return_fail)
- 'argument count' parameter of 0AB1 (cleo_call) is now optional.
cleo_call @LABEL args 0
can be written ascleo_call @LABEL
- 'argument count' parameter of 0AB2 (cleo_return) is now optional.
cleo_return 0
can be written ascleo_return
- SCM functions can return string literals and string variables
- SCM functions (0AB1) now keep their own GOSUB's call stack
- fixed bug in 0AD4 (scan_string) causing data overruns when reading strings longer than target variable
- fixed result register not being cleared before function call in opcodes 0AA7 and 0AA8
- fixed 0ABA (terminate_all_custom_scripts_with_this_name) terminating only first found script
- changes in file operations
- file paths can now use 'virtual absolute paths'. Use prefix in file path strings to access predefined locations:
root:\
for game root directoryuser:\
for game save files directory.\
for this script file directorycleo:\
for CLEO directorymodules:\
for CLEO\cleo_modules directory
- rewritten opcode 0A99 (set_current_directory). Now it no longer affects internal game state or current directory in other scripts
- file paths can now use 'virtual absolute paths'. Use prefix in file path strings to access predefined locations:
- improved error handling
- more detailed error messages in multiple scenarios
- some errors now cause the script to pause, instead of crashing the game
- updated included Silent's ASI Loader to version 1.3
Bug Fixes
- fixed error in 004E (terminate_this_script) allowing to run multiple missions
- fixed handling of strings longer than 128 characters causing errors in some cases
- fixed error in handling of first string argument in 0AF5 (write_string to_ini_file)
- fixed resolution dependent aspect ratio of CLEO text in main menu
- fixed clearing mission locals when new CLEO mission is started
- when reading less than 4 bytes with 0A9D (readfile) now remaining bytes of the target variable are set to zero
- fixed invalid 7 characters length limit of 0AAA (get_script_struct_named)
SDK AND PLUGINS
- now all opcodes in range 0-7FFF can be registered by plugins
- plugins moved to cleo\cleo_plugins directory
- new SDK methods:
- CLEO_RegisterCommand
- CLEO_RegisterCallback
- CLEO_GetVarArgCount
- CLEO_PeekIntOpcodeParam
- CLEO_PeekFloatOpcodeParam
- CLEO_PeekPointerToScriptVariable
- CLEO_SkipUnusedVarArgs
- CLEO_ReadParamsFormatted
- CLEO_ReadStringParamWriteBuffer
- CLEO_GetOpcodeParamsArray
- CLEO_GetParamsHandledCount
- CLEO_IsScriptRunning
- CLEO_TerminateScript
- CLEO_GetScriptVersion
- CLEO_GetScriptInfoStr
- CLEO_GetScriptFilename
- CLEO_GetScriptWorkDir
- CLEO_SetScriptWorkDir
- CLEO_ResolvePath
- CLEO_ListDirectory
- CLEO_ListDirectoryFree
- CLEO_GetGameDirectory
- CLEO_GetUserDirectory
- CLEO_GetScriptByName
- CLEO_GetScriptByFilename
- CLEO_GetScriptDebugMode
- CLEO_SetScriptDebugMode
- CLEO_Log
CLEO internal
- introduced unit test scripts
- project migrated to VS 2022
- configured game debugging settings
- plugins moved into single solution
- configured automatic releases on GitHub
- added setup_env.bat script
Special Thanks
- 123nir for the alpha-testing, troubleshooting and valuable bug reports
- Hamal for the beta-testing, troubleshooting and valuable bug reports