What is this ? Scocl is high level script compiler for GTA IV and EFLC . This project is based on the c-like llvm compiler . As you already noticed from the name of the project , compiler allows you to create your own sco scripts , which can be interpreted on GTA IV script virtual machine without any plugins and extensions .
Installing : You must extract all archive contents as they are inside of the archive , so folder and file hierarchy must be the same as in the arch
What's the difference from Alice, Script Hook, etc ? All this utils were just using script functions , scocl allows to create plain sco scripts , like this was done by R*. Using scocl you have no script restrictions , code your scripts like R* developer .
Why so late ? Not late ! All RAGE games are using almost the same script bytecode , so it would be much easier to add support for new RAGE-based games .
<globals version> script version stamp , can be GTAIV or TLAD , or TBOGT , also you can use custom value with 0xHEXVERSION <filein> script source file <dirout> compiled script output folder <options> independent options set - GLOBALSEG , KEEPTEMP, DEBUGOUTPUT GLOBALSEG - compiling script with global segment , only startup script must be compiled with this key KEEPTEMP - don't delete temp files after compilation DEBUGOUTPUT - debug script compilation
Script writing : Warning , scocl can't compile any of decompiled scripts , because there is no info inside sufficient for compilation . It's not rly possible to write such decompiler to have all the needed info , so all scripts must be written from scratch .
Decompiled scripts : While writing new scripts you will need to look into the decompiled scripts anyway , so i had uploaded the pack of the OpenIV decompiled scripts from GTA IV , TLAD and TBOGT . I'm using Total Commander for text search inside of 'em. Note that scocl compiled scripts can't be decompiled using OpenIV or SparkIV becase they are tryn' to find high-level constructions by opcode patterns which were very specified for R* compiler . Scocl is using different pattern set , so you can decompile scocl scripts only to low level , if you will need this use scodcl.exe from the bin folder .
Script files : All scripts are placed in the script.img and script_network.img archives from <gta dir>\common\data\cdimages dir. We are only interested in the singleplayer. The first script that starts on new game is startup.sco , it loads all ambient scripts and main.sco , main.sco launches initial.sco and switching to the stat and mission control mode . Startup.sco must have global segment inside , all other scripts must not . All scripts in the script.img must have the same globals version (stamp) as startup.sco has .
Script functions : There are something like ~3000 of natives . Comparing to the scm-engine from previous GTA 3D series , which had one native to one opcode assigned , RAGE has less than 100 opcodes and they look like a real assembler , there is only one opcode for native calling . Native to call is the param of this opcode , this param is a hash of the native name . Before 5th (or something around) patch for GTA IV there was only one hash algorithm , after that patch hash was changed . Compiler is configured for the latest patches , so scocl is using new hash algo . Scripts which were compiled with new hash can't be used with old patches . You can see complete list of the GTA IV and EFLC natives in the inc\natives.h file.
Saves : Each script can be marked as "save this one" if it will call THIS_SCRIPT_SHOULD_BE_SAVED() native . By default script wont be saved . If you will change the script without wiping out saves , game will crash while loading the save , so you must delete all saves before you can use changed scripts , the same like it was in with scm.
Special features of the scripts : 1.Script.img must have puzzle.sco inside , game checks this script . 2. If you are using globals you must declare them in the separated *.h file , which you must include in all script projects . Global variable name must begin with G_ , for example G_BASE_X , so local var can't begin with G_ , for good examples look into the zombmod . 3. Only ~2000 of ~3000 natives were used in the original scripts , so some of that ~1000 can be broken , noped or even cause game crashing . 4. Almost all multiplayer related natives are commented , im not sure that someone will ever use them . 5. Script startup.sco can't be paused , cycled or saved . 6. In the original scripts some natives can use 3 float params as one Vector3 structure , so param count in the inc\natives.h can be not the same as in the decompiled code . 7. All data types are multiple of 4 , so for example array of 16 chars will look like int .
Examples : You can find script examples in the projects dir . All of 'em are Visual Studio 2010 projects .
Current example solutions : "stripped" - fully stripped game scripts with "superman" ability "zombmod" - classic zombie mod base , tested with GTA IV and TLAD , no idea about TBOGT . Here is the gameplay video of this example
Script editor : Scocl was desgined to be used with IDE from MSVS , this is the best choise for any script coder . Any MSVS C++ version is ok , starting from 2010 . If you have no MSVS you can download C++ expresshere , thats free , maybe you will be forced to create dev account before downloading , anyway this will be free too . For the script template project use the one from projects\dummy folder .
Plans for next time : CLEO IV . The same thing as was for SA . Project is already started and it works fine with my EFLC , im planning to add support of all patches and publish cleo . Cleo IV suports script saving , like it was in Cleo 3 for SA , also the most incredible thing is that u can create ur own cleo missions without affecting original scripts and saves !
This post has been edited by Alexander Blade on Friday, Apr 12 2013, 18:20
Amazing work, great for gameplay-replacing mods instead of additional mods. One thing though, how is the performance compared to ScriptHook? If I make a very long script in Scripthook which executes every tick, the game starts to lag. And is this like SA their SCM, modifying it makes you start a new game?
@ Alexander Blade below:
Thanks for the info. Heh, so it's all up to the scripter. Good to know
This post has been edited by ikt on Monday, Nov 7 2011, 22:37
GTARandom Try to find out what stats and globals ambtv is using
terreur69 Im planning to do the tutorial in the nearest future
ikt Yep , if any script was modified new game must be started , anyway with cleo iv everything will be okay with saves and additional mods . Btw there is always a way to rewrite script to make it less laggy Performance is a bit less than native code , anyway like i said , optimization can be done almost for every script .
r u using MSVC ide ? it's ok with command line too
Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001.
C:\Documents and Settings\Alexander>"C:\Documents and Settings\0.8\bin\scocl.exe" GTAIV D:\Dev\Gta\s cocl\release\0.8\projects\zombmod\startup.c D:\Dev\Gta\scocl\release\0.8\projects\zombmod\ "C:\Documents and Settings\0.8\bin\scocl.exe" GTAIV D:\Dev\Gta\scocl\release\0.8\projects\zombmod\st artup.c D:\Dev\Gta\scocl\release\0.8\projects\zombmod\ startup.c compile started startup.c compile finished, elapsed time 1234 ms
C:\Documents and Settings\Alexander>"C:\Documents and Settings\0.8\bin\scocl.exe" GTAIV D:\Dev\Gta\s cocl\release\0.8\projects\zombmod\startup.c D:\Dev\Gta\scocl\release\0.8\projects\zombmod\ KEEPTEMP "C:\Documents and Settings\0.8\bin\scocl.exe" GTAIV D:\Dev\Gta\scocl\release\0.8\projects\zombmod\st artup.c D:\Dev\Gta\scocl\release\0.8\projects\zombmod\ KEEPTEMP startup.c compile started startup.c compile finished, elapsed time 687 ms
C:\Documents and Settings\Alexander>"C:\Documents and Settings\0.8\bin\scocl.exe" GTAIV D:\Dev\Gta\s cocl\release\0.8\projects\zombmod\startup.c D:\Dev\Gta\scocl\release\0.8\projects\zombmod\ GLOBALSEG
"C:\Documents and Settings\0.8\bin\scocl.exe" GTAIV D:\Dev\Gta\scocl\release\0.8\projects\zombmod\st artup.c D:\Dev\Gta\scocl\release\0.8\projects\zombmod\ GLOBALSEG startup.c compile started startup.c compile finished, elapsed time 766 ms
C:\Documents and Settings\Alexander>
This post has been edited by Alexander Blade on Tuesday, Nov 8 2011, 19:27