Combo Functions
A combo (short for combination) is a combination of pre-programmed instructions which are executed in sequence. Just like the main section, commands within a combo are performed in the order they are written. You can run any code you can run in the main section within a combo such as calling functions or setting variables, although this is generally unnecessary and usually results in nothing more than a waste of stack memory and bytecode space.
A combo is ideal suited to setting the output of a button for a specific length of time which is done using the wait command, a command that is unique to combos and cannot be used elsewhere.
Just as with variables, a combos name can start with either an underscore ( _ ) or a letter and can be followed by any combination of letters, digits or underscores.
Function | Description | Zen | Plus |
Runs a combo | ✔️ | ✔️ | |
Checks if a combo is running | ✔️ | ✔️ | |
Stops a running combo | ✔️ | ✔️ | |
Restarts a running combo | ✔️ | ✔️ | |
Suspends (pauses) a combo | ✔️ | ✔️ | |
Checks if a combo is in the suspended state | ✔️ | ✔️ | |
keywords returning the current step | ✔️ | ❌ | |
the time left of the currently executed step | ✔️ | ❌ | |
Stops all combos | ✔️ | ❌ | |
Suspends (pauses) all combos | ✔️ | ❌ | |
Resumes the suspended combo or already running combo | ✔️ | ❌ | |
Resumes all suspended combos | ✔️ | ❌ |
main {
if (event_press(XB1_A) {
combo_run(mycombo);
}
if (event_press(XB1_B) {
if(combo_running(mycombo)) {
combo_stop(mycombo);
}
}
if (event_press(XB1_X) {
combo_restart(mycombo);
}
}
combo mycombo {
set_val(XB1_A, 100);
wait(200);
wait(4000);
set_val(XB1_B, 100);
wait(200);
wait(4000);
set_val(XB1_X, 100);
wait(200);
wait(4000);
set_val(XB1_Y, 100);
wait(200);
wait(4000);
set_val(XB1_LB, 100);
wait(200);
wait(4000);
call(mycombo2);
}
combo mycombo2 {
}
combo_run
does precisely what the name suggests and runs a combo. However, unlike the combo_restart command, it has no effect if the combo is currently running. It will only start a combo is it is not already running.combo_run(mycombo);
combo_run( <combo_name> );
<combo_name> : The name assigned to a combo
Returns
🔵
Nothing
combo_running
is a function which can be used in your code to check is a combo is running is not. If the combo named in its parameter is running, then it will return TRUE. If not, it will return FALSE.combo_running(mycombo);
combo_running( <combo_name>);
<combo_name> : The name assigned to a combo
Returns
🔵
TRUE if the combo is currently running and FALSE if it is not.
combo_stop
does precisely what the name suggests and will stop a combo if it is running. As with combo_run, it has no effect if the combo is currently not running.combo_stop(mycombo);
combo_stop( <combo_name> );
<combo_name> : The name assigned to a combo
Returns
🔵
Nothing
combo_restart
will restart a running combo. If the combo started within its parameters is currently running, it will be restarted from the beginning. If the combo is not currently running, it will be run.combo_restart(mycombo);
combo_restart( <combo_name> );
<combo_name> : The name assigned to a combo
Returns
🔵
Nothing
combo_suspend
command suspends (pauses) a combo from running .main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
if(combo_running(mycombo)) {
combo_suspend(mycombo);
}
}
if (event_press(XB1_X)) {
combo_restart(mycombo);
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
combo_suspend( <combo_name> );
<combo_name> : The name assigned to a combo
Returns
🔵
Nothing
combo_suspended
Check to see if a combo is suspended.main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
if(combo_running(mycombo)) {
combo_suspend(mycombo);
}
}
if (event_press(XB1_Y) && combo_suspended(mycombo)) {
combo_restart(mycombo);
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
combo_suspended( <combo_name> );
<combo_name> : Checks the name assigned to a combo if suspended
Returns
🔵
Nothing
combo_current_step
keywords returning the current stepint combo_current_step = 100;
main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
if(combo_current_step(mycombo)) {
combo_suspend(mycombo);
}
}
if (event_press(XB1_Y) && combo_current_step) {
combo_restart(mycombo);
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
combo_step_time_left
Checks the time left of the currently executed step.int combo_current_step = 100;
int combo_step_time_left = 150;
main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
if(combo_current_step(mycombo)) {
combo_suspend(mycombo);
}
}
if (event_press(XB1_Y) && combo_current_step) {
if(combo_step_time_left == 150){
combo_restart(mycombo);
}
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
combo_stop_all
Stops all combos from running.main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
combo_stop_all(mycombo);
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
combo_suspend_all
Suspends all combos that is running.main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
if(combo_running(mycombo)) {
combo_suspend_all(mycombo);
}
}
if (event_press(XB1_Y) && combo_suspended(mycombo)) {
combo_restart(mycombo);
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
combo_resume
Will resume a combo if it is suspended or a running combo.main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
if(combo_running(mycombo)) {
combo_suspend(mycombo);
}
}
if (event_press(XB1_Y) && combo_suspended(mycombo)) {
combo_resume(mycombo);
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
combo_resume_all
Will resume all combos if it is suspended or a running combos.main {
if (event_press(XB1_A)) {
combo_run(mycombo);
}
if (event_press(XB1_B)) {
if(combo_running(mycombo)) {
combo_suspend(mycombo);
}
}
if (event_press(XB1_Y) && combo_suspended(mycombo)) {
combo_resume_all(mycombo);
}
}
combo mycombo {
set_val(XB1_A,100);
wait(2000);
set_val(XB1_A,0);
wait(100);
}
wait
command instructs the Virtual Machine within the Cronus on how long the last set of commands should be executed for. The length of time they instruct the VM to execute the commands for is represented in milliseconds and can rand from 1ms to 32 767ms (That's 1 millisecond to just over 32 seconds). The commands executed during the wait time are those placed between the current wait and the previous wait time, the current wait time and previous call command or the start of the combo, whichever comes first. As shown in the example below:
combo mycombo {
set_val(19, 100);//¯¯|
set_val(18, 100);// | These two buttons will be held
wait(1000); //←_| for 1000 milliseconds (1 second)
set_val(3, 100);//¯¯|
set_val(7, 100);// | These two buttons will be held
wait(1500); //←_| for 1500 milliseconds (1.5 seconds)
set_val(9, -100);//¯¯| This axis will be held
wait(2000); //←_| for 2000 milliseconds (2 seconds)
}
The wait command can only be used within a combo and must be at the first level of the combo block, it cannot be nested.
wait(300); // wait 300ms
wait( <time> );
<time> : The length of time the last commands should be executed for represented in milliseconds ranging from 10 to 4000.
Nothing
call
command can only be used in combos and pauses the current combo to execute the combo called. Once the combo has finished, the previous combo is resumed. combo _1st_combo {
set_val(XB1_B, 100);
wait(100);
wait(200);
call(_2nd_combo); //_1st_combo is paused until _2nd_combo is finished
set_val(XB1_Y, 100);
wait(100);
wait(200);
}
combo _2nd_combo {
set_val(XB1_RB, 100);
wait(100);
wait(200);
} //Once this combo has ended, the combo is was called from can resume
call( <combo_name );
<combo_name> : The name assigned to a combo
Nothing
Last modified 2yr ago