What's New in 32bit?
If you are not experienced with scripting, go ahead and skip straight to the Introduction👍
If you are experienced with GPC (or C) you will be happy to know that Cronus has finally added 32bit support for scripts!
GPC scripting is now available in both 16bit and 32bit flavors. Coding in 32bit allows for a much larger address space, which means more memory can be accessed and used by the GamePack. This can be hugely beneficial for programs that require large amounts of memory. Additionally, 32-bit systems also support more advanced features, enabling an infinitely higher accuracy in calculations - directly benefiting MODs such as Anti-Recoil and Aim Assist.
16bit has a maximum of 2^16 possible values and 32bit has a maximum of 2^32 possible values.
16bit: 0000 0000 0000 0000
32bit: 0000 0000 0000 0000 0000 0000 0000 0000
The default compiler mode of Zen Studio is now 32bit. If you wish to compile an older 16bit script (every script ever released before Cronus Zen v1.2.0), you must use the 16bit compiler.
What is 32bit?
32bit scripting support allows for vastly greater calculations, enabling more precision, more accuracy, and more automation - especially for MODS such as Aim Assist and Anti-Recoil.
Previously, the variable calculation range with 16bit (-32768 to 32767), but now with 32bit that range has increased to a massive (−2,147,483,648 to 2,147,483,647), allowing for much more complex calculations that can be scaled up then back down while retaining a high level of accuracy, enabling a degree of precision not previously available.
Size | Minimum Value | Maximum Value |
8-bits | -(2^8) = -128 | 2^8 - 1 = 127 |
16-bits | -(2^16) = -32,768 | 2^16 - 1 = 32,767 |
32-bits | -(2^32) = -2,147,483,648 | 2^32 - 1 = 2,147,483,647 |
We've also added three new incredibly powerful GPC functions, get_polar , get_ipolar and get_info
The default compiler mode of Zen Studio is now 32bit. If you wish to compile an older 16bit script (every script ever released before Cronus Zen v1.2.0), you must use the 16bit compiler. Older scripts may also break due to using deprecated code. If you know what you are doing, you will know how to fix these issues from the information on this page.

New Functions
⚙ get_ipolar
get_ipolar() is the latest brand new function that can be used to gain information to retrieve the unmodified input value of the analog stick. It can be used with both left and right analog sticks, get_ipolar() uses 2 parameters in the function, 1st is the stick you want to use and the 2nd parameter is either Angle or Radius. Only Angle or Radius can be retrieved at once.
- The POLAR_ANGLE can be within the range of 0 - 359 and this depends on the current direction the stick has been pushed.
- The POLAR_RADIUS has a range of 0 - 32767 and this represents how far from the center the stick is pushed.
🔴 Syntax
⚪ Parameters
<POLAR_ANGLE> : Returns the unmodified Angle on an analog stick POLAR_LS or POLAR_RS (0-359)
<POLAR_RADIUS> : Returns the unmodified radius of an analog stick POLAR_LS or POLAR_RS (0 - 32767)
🔵 Returns
Either the unmodified angle or radius will be returned depending on the given parameter.
⚙ get_polar
get_polaris a brand new function that can be used to gain information on the current angle or radius of the analog stick. It can be used with both left and right analog sticks, get_polar() uses 2 parameters in the function, 1st is the stick you want to use and the 2nd parameter is either Angle or Radius. Only Angle or Radius can be retrieved at once.
- The POLAR_ANGLE can be within the range of 0 - 359 and this depends on the current direction the stick has been pushed.
- The POLAR_RADIUS has a range of 0 - 32767 and this represents how far from the center the stick is pushed.
🔴 Syntax
⚪ Parameters
<POLAR_ANGLE> : Returns the Angle on an analog stick POLAR_LS or POLAR_RS (0-359)
<POLAR_RADIUS> : Returns the radius of an analog stick POLAR_LS or POLAR_RS (0 - 32767)
🔵 Returns
Either the angle or radius will be returned depending on the given parameter
⚙ set_polar2
set_polar2is a virtual stick that you can use to quickly calculate values without the hassle of time-consuming trigonometry functions.
- POLAR_GHOST is the virtual stick where an angle and radius can be assigned using set_polar2.
- ANALOG_GHOSTX is the virtual X AXIS to be used with both math and trigonometry functions.
- ANALOG_GHOSTY is the virtual Y AXIS to be used with both math and trigonometry functions.
⚙ get_info
get_info is a new function that checks the active state of the MK Profile. A MK Profile has upto 6 different states as follows (0 = HIP, 1 = ADS, 2 = AUX1, 3 = AUX2, 4 = AUX3, 5 = AUX4). With this information, you are able to script for any specific state and take action accordingly. For example, you can have mods automatically toggle ON/OFF based on if you are HIP firing, Aiming Down Sights (ADS), or using any of the 4 Auxiliary MK profiles. Think of the possibilities.......
🔴 Syntax
⚪ Parameters
<PENDING_CONFIG> : Shows usage for the pending config
<ACTIVE_CONFIG> : Shows the usage for the active config
🔵 Returns
Active profile in use by MK Settings:
Return | Profile |
0 | HIP |
1 | ADS |
2 | AUX1 |
3 | AUX2 |
4 | AUX3 |
5 | AUX4 |
⚙ int32
int32 is a brand new 32bit function that is used to create an array that holds values greater than 32767 and less than -32768.
⚙ 32bit Traces
Traces are commonly used for debugging a script and viewing information from a script or game.
There is six TRACE debug fields found in Device Monitor that can be used by a GPC script for feedback information, flow control checking, and variables monitoring. TRACE_1 to TRACE_3 are for 32bit values, TRACE_4 to TRACE_6 are for 16bit values.
Trace Number | Integer Value |
TRACE_1 | 32bit |
TRACE_2 | 32bit |
TRACE_3 | 32bit |
TRACE_4 | 16bit |
TRACE_5 | 16bit |
TRACE_6 | 16bit |
For example, if you wanted to see the current value of a variable that was over the 16bit limit you could set a trace using TRACE_1, TRACE_2, or TRACE_3 for the variable to see its value:
⚙ 32bit SPVARS
With the use of int32 and the 32bit update, you can save much higher values to SPVAR than ever before.
Each 32bit SPVAR can hold 1 x 32bit(4 bytes) value of −2,147,483,648 to 2,147,483,647. Whereas the previous 16bit SPVARs were only 16bit(2bytes) of -32,767 to 32,767. This can be extremely useful if you need to scale and save values for more advanced movements such as Anti Recoil and Aim Assist.
Additionally, advanced developers who use bit packing in their GPC scripts are now able to store twice as much information in a SPVAR as they were before. With 16bit you were only able to store 2 x 8bit values with a range of -32768 to 32767; with 32bit you can store double that amount with 4 x 8bit values.
Bitpacking SPVARs
32bit Examples
⚙ get_polar
Here is an example of a Strafe Mod not being possible using 16bit. The new get_polar function is used to return the current radius of the left analog stick. This value is then multiplied by a set number or 50 in this example, then once more by 100 to scale input. Then to scale the value back down it is divided by 20000. The resulting value is then used as a strength that is applied to the left stick to strafe left and right.
Info: While GPC does not support float, a far higher degree of accuracy is achieved by first scaling up and then back down.
Scaling with 32bit
Here's an example of scaling a recoil value though this time it is for 32bit. Here the value is much higher which leads to much greater accuracy when calculating a value. The value seen in TRACE_3 could be applied to either stick as a polar value leading to much greater results. In the example, the recoil value is scaled up based on sensitivity, deadzone, and a modifier (accounts for attachments).
Scaling with 16bit
Here's an example of how you could scale an Anti-Recoil value using 16bit. Though due to value limitations and truncation you do lose a little accuracy.
16bit vs 32bit
Here's an example of Anti-Recoil using a 16bit GamePack vs Anti-Recoil using a 32bit GamePack.
Legacy 16bit Compiler
The 16bit compiler is still available for older scripts not designed for 32bit. If you get an error while compiling a script, it's likely because you're trying to compile a 16bit script in the 32bit compiler - or the script has deprecated functions that no longer work and needs to be updated.

Introduction