.params = 0, .returns = 1, .data = (void *)offsetof(scene_state_t, v) \ } #define MAKE_SEED_ALIAS_OP(n, v) MAKE_SEED_OP(n, v) static void op_peek_seed_i16(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_poke_seed_i16(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_SEED_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_SEED_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); // clang-format off const tele_op_t op_SEED = MAKE_GET_SET_OP(SEED, op_SEED_get, op_SEED_set, 0, true); const tele_op_t op_RAND_SEED = MAKE_SEED_OP(RAND.SEED, rand_states.s.rand); const tele_op_t op_SYM_RAND_SD = MAKE_SEED_ALIAS_OP(RAND.SD, rand_states.s.rand); const tele_op_t op_SYM_R_SD = MAKE_SEED_ALIAS_OP(R.SD, rand_states.s.rand); const tele_op_t op_TOSS_SEED = MAKE_SEED_OP(TOSS.SEED, rand_states.s.toss); const tele_op_t op_SYM_TOSS_SD = MAKE_SEED_ALIAS_OP(TOSS.SD, rand_states.s.toss); const tele_op_t op_PROB_SEED = MAKE_SEED_OP(PROB.SEED, rand_states.s.prob); const tele_op_t op_SYM_PROB_SD = MAKE_SEED_ALIAS_OP(PROB.SD, rand_states.s.prob); const tele_op_t op_DRUNK_SEED = MAKE_SEED_OP(DRUNK.SEED, rand_states.s.drunk); const tele_op_t op_SYM_DRUNK_SD = MAKE_SEED_ALIAS_OP(DRUNK.SD, rand_states.s.drunk); const tele_op_t op_P_SEED = MAKE_SEED_OP(P.SEED, rand_states.s.pattern); const tele_op_t op_SYM_P_SD = MAKE_SEED_ALIAS_OP(P.SD, rand_states.s.pattern); // clang-format on static void op_peek_seed_i16(const void *data, scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) {
exec_state_t *es, command_state_t *cs); static void op_CHAOS_ALG_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_CHAOS_ALG_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); // clang-format off const tele_op_t op_ADD = MAKE_GET_OP(ADD , op_ADD_get , 2, true); const tele_op_t op_SUB = MAKE_GET_OP(SUB , op_SUB_get , 2, true); const tele_op_t op_MUL = MAKE_GET_OP(MUL , op_MUL_get , 2, true); const tele_op_t op_DIV = MAKE_GET_OP(DIV , op_DIV_get , 2, true); const tele_op_t op_MOD = MAKE_GET_OP(MOD , op_MOD_get , 2, true); const tele_op_t op_RAND = MAKE_GET_OP(RAND , op_RAND_get , 1, true); const tele_op_t op_RRAND = MAKE_GET_OP(RRAND , op_RRAND_get , 2, true); const tele_op_t op_R = MAKE_GET_OP(R , op_R_get , 0, true); const tele_op_t op_R_MIN = MAKE_GET_SET_OP(R.MIN, op_R_MIN_get, op_R_MIN_set, 0, true); const tele_op_t op_R_MAX = MAKE_GET_SET_OP(R.MAX, op_R_MAX_get, op_R_MAX_set, 0, true); const tele_op_t op_TOSS = MAKE_GET_OP(TOSS , op_TOSS_get , 0, true); const tele_op_t op_MIN = MAKE_GET_OP(MIN , op_MIN_get , 2, true); const tele_op_t op_MAX = MAKE_GET_OP(MAX , op_MAX_get , 2, true); const tele_op_t op_LIM = MAKE_GET_OP(LIM , op_LIM_get , 3, true); const tele_op_t op_WRAP = MAKE_GET_OP(WRAP , op_WRAP_get , 3, true); const tele_op_t op_QT = MAKE_GET_OP(QT , op_QT_get , 2, true); const tele_op_t op_AVG = MAKE_GET_OP(AVG , op_AVG_get , 2, true); const tele_op_t op_EQ = MAKE_GET_OP(EQ , op_EQ_get , 2, true); const tele_op_t op_NE = MAKE_GET_OP(NE , op_NE_get , 2, true); const tele_op_t op_LT = MAKE_GET_OP(LT , op_LT_get , 2, true); const tele_op_t op_GT = MAKE_GET_OP(GT , op_GT_get , 2, true); const tele_op_t op_LTE = MAKE_GET_OP(LTE , op_LTE_get , 2, true); const tele_op_t op_GTE = MAKE_GET_OP(GTE , op_GTE_get , 2, true); const tele_op_t op_NZ = MAKE_GET_OP(NZ , op_NZ_get , 1, true);
static void op_SCRIPT_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_KILL_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); const tele_mod_t mod_PROB = MAKE_MOD(PROB, mod_PROB_func, 1); const tele_mod_t mod_IF = MAKE_MOD(IF, mod_IF_func, 1); const tele_mod_t mod_ELIF = MAKE_MOD(ELIF, mod_ELIF_func, 1); const tele_mod_t mod_ELSE = MAKE_MOD(ELSE, mod_ELSE_func, 0); const tele_mod_t mod_L = MAKE_MOD(L, mod_L_func, 2); const tele_op_t op_SCRIPT = MAKE_GET_OP(SCRIPT, op_SCRIPT_get, 1, false); const tele_op_t op_KILL = MAKE_GET_OP(KILL, op_KILL_get, 0, false); const tele_op_t op_SCENE = MAKE_GET_SET_OP(SCENE, op_SCENE_get, op_SCENE_set, 0, true); static void mod_PROB_func(scene_state_t *NOTUSED(ss), exec_state_t *es, command_state_t *cs, tele_command_t *sub_command) { int16_t a = cs_pop(cs); if (rand() % 101 < a) { process(es, sub_command); } } static void mod_IF_func(scene_state_t *NOTUSED(ss), exec_state_t *es, command_state_t *cs, tele_command_t *sub_command) { es->if_else_condition = false; if (cs_pop(cs)) { es->if_else_condition = true; process(es, sub_command);
const tele_op_t op_DRUNK_MAX = MAKE_SIMPLE_VARIABLE_OP(DRUNK.MAX , variables.drunk_max ); const tele_op_t op_DRUNK_MIN = MAKE_SIMPLE_VARIABLE_OP(DRUNK.MIN , variables.drunk_min ); const tele_op_t op_DRUNK_WRAP = MAKE_SIMPLE_VARIABLE_OP(DRUNK.WRAP, variables.drunk_wrap); const tele_op_t op_O_INC = MAKE_SIMPLE_VARIABLE_OP(O.INC , variables.o_inc ); const tele_op_t op_O_MAX = MAKE_SIMPLE_VARIABLE_OP(O.MAX , variables.o_max ); const tele_op_t op_O_MIN = MAKE_SIMPLE_VARIABLE_OP(O.MIN , variables.o_min ); const tele_op_t op_O_WRAP = MAKE_SIMPLE_VARIABLE_OP(O.WRAP , variables.o_wrap ); const tele_op_t op_T = MAKE_SIMPLE_VARIABLE_OP(T , variables.t ); const tele_op_t op_TIME = MAKE_SIMPLE_VARIABLE_OP(TIME , variables.time ); const tele_op_t op_TIME_ACT = MAKE_SIMPLE_VARIABLE_OP(TIME.ACT , variables.time_act ); const tele_op_t op_LAST = MAKE_GET_OP(LAST , op_LAST_get, 1, true); const tele_op_t op_X = MAKE_SIMPLE_VARIABLE_OP(X , variables.x ); const tele_op_t op_Y = MAKE_SIMPLE_VARIABLE_OP(Y , variables.y ); const tele_op_t op_Z = MAKE_SIMPLE_VARIABLE_OP(Z , variables.z ); const tele_op_t op_DRUNK = MAKE_GET_SET_OP(DRUNK, op_DRUNK_get, op_DRUNK_set, 0, true); const tele_op_t op_FLIP = MAKE_GET_SET_OP(FLIP , op_FLIP_get , op_FLIP_set , 0, true); const tele_op_t op_O = MAKE_GET_SET_OP(O , op_O_get , op_O_set , 0, true); const tele_op_t op_I = MAKE_GET_SET_OP(I , op_I_get, op_I_set, 0, true); // clang-format on static void op_LAST_get(const void *NOTUSED(data), scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) { int16_t script_number = cs_pop(cs) - 1; int16_t last = ss_get_script_last(ss, script_number); cs_push(cs, last); } static void op_DRUNK_get(const void *NOTUSED(data), scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) { int16_t min = ss->variables.drunk_min;
static void op_M_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_M_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_M_SYM_EXCLAMATION_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_M_SYM_EXCLAMATION_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_M_ACT_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_M_ACT_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_M_RESET_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); const tele_op_t op_M = MAKE_GET_SET_OP(M, op_M_get, op_M_set, 0, true); static void op_M_get(const void *NOTUSED(data), scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) { cs_push(cs, ss->variables.m); } static void op_M_set(const void *NOTUSED(data), scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) { int16_t m = cs_pop(cs); if (m < METRO_MIN_MS) m = METRO_MIN_MS; ss->variables.m = m; tele_metro_updated(); } // clang-format off