Skip to content

Instantly share code, notes, and snippets.

@twist84
Created October 22, 2025 19:45
Show Gist options
  • Select an option

  • Save twist84/a6161a1eb2c86fafb47ce7be106854bc to your computer and use it in GitHub Desktop.

Select an option

Save twist84/a6161a1eb2c86fafb47ce7be106854bc to your computer and use it in GitHub Desktop.
#pragma region MACRO_FUNCTION_EVALUATE
#define EVAL0(...) __VA_ARGS__
#define EVAL1(...) EVAL0(EVAL0(__VA_ARGS__))
#define EVAL2(...) EVAL1(EVAL1(__VA_ARGS__))
#define EVAL3(...) EVAL2(EVAL2(__VA_ARGS__))
#define EVAL(...) EVAL3(EVAL3(__VA_ARGS__))
#define FORCE_EXPAND(macro, ...) EVAL(macro(__VA_ARGS__))
#define EXPAND_IMPL(macro, args) macro args
#define EXPAND_TYPES_0()
#define EXPAND_TYPES_1(A1) A1##_
#define EXPAND_TYPES_2(A1, A2) EXPAND_TYPES_1(A1), A2##_
#define EXPAND_TYPES_3(A1, A2, A3) EXPAND_TYPES_2(A1, A2), A3##_
#define EXPAND_TYPES_4(A1, A2, A3, A4) EXPAND_TYPES_3(A1, A2, A3), A4##_
#define EXPAND_TYPES_5(A1, A2, A3, A4, A5) EXPAND_TYPES_4(A1, A2, A3, A4), A5##_
#define EXPAND_TYPES_6(A1, A2, A3, A4, A5, A6) EXPAND_TYPES_5(A1, A2, A3, A4, A5), A6##_
#define EXPAND_TYPES_7(A1, A2, A3, A4, A5, A6, A7) EXPAND_TYPES_6(A1, A2, A3, A4, A5, A6), A7##_
#define EXPAND_TYPES_8(A1, A2, A3, A4, A5, A6, A7, A8) EXPAND_TYPES_7(A1, A2, A3, A4, A5, A6, A7), A8##_
#define EXPAND_TYPES_9(A1, A2, A3, A4, A5, A6, A7, A8, A9) EXPAND_TYPES_8(A1, A2, A3, A4, A5, A6, A7, A8), A9##_
#define EXPAND_TYPES_10(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) EXPAND_TYPES_9(A1, A2, A3, A4, A5, A6, A7, A8, A9), A10##_
#define EXPAND_TYPES_11(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) EXPAND_TYPES_10(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10), A11##_
#define EXPAND_TYPES_12(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) EXPAND_TYPES_11(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11), A12##_
#define EXPAND_CALLS_0()
#define EXPAND_CALLS_1(A1) *(A1##_*)&actual_parameters[0]
#define EXPAND_CALLS_2(A1, A2) EXPAND_CALLS_1(A1), *(A2##_*)&actual_parameters[1]
#define EXPAND_CALLS_3(A1, A2, A3) EXPAND_CALLS_2(A1, A2), *(A3##_*)&actual_parameters[2]
#define EXPAND_CALLS_4(A1, A2, A3, A4) EXPAND_CALLS_3(A1, A2, A3), *(A4##_*)&actual_parameters[3]
#define EXPAND_CALLS_5(A1, A2, A3, A4, A5) EXPAND_CALLS_4(A1, A2, A3, A4), *(A5##_*)&actual_parameters[4]
#define EXPAND_CALLS_6(A1, A2, A3, A4, A5, A6) EXPAND_CALLS_5(A1, A2, A3, A4, A5), *(A6##_*)&actual_parameters[5]
#define EXPAND_CALLS_7(A1, A2, A3, A4, A5, A6, A7) EXPAND_CALLS_6(A1, A2, A3, A4, A5, A6), *(A7##_*)&actual_parameters[6]
#define EXPAND_CALLS_8(A1, A2, A3, A4, A5, A6, A7, A8) EXPAND_CALLS_7(A1, A2, A3, A4, A5, A6, A7), *(A8##_*)&actual_parameters[7]
#define EXPAND_CALLS_9(A1, A2, A3, A4, A5, A6, A7, A8, A9) EXPAND_CALLS_8(A1, A2, A3, A4, A5, A6, A7, A8), *(A9##_*)&actual_parameters[8]
#define EXPAND_CALLS_10(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) EXPAND_CALLS_9(A1, A2, A3, A4, A5, A6, A7, A8, A9), *(A10##_*)&actual_parameters[9]
#define EXPAND_CALLS_11(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) EXPAND_CALLS_10(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10), *(A11##_*)&actual_parameters[10]
#define EXPAND_CALLS_12(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) EXPAND_CALLS_11(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11), *(A12##_*)&actual_parameters[11]
#define MACRO_FUNCTION_EVALUATE__hs_type_void(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) \
int32 result = 0; \
if constexpr (FORMAL_PARAMETER_COUNT == 0) \
{ \
reinterpret_cast<void(__cdecl*)()>(FUNCTION)(); \
hs_return(thread_index, result); \
} \
else if (int32* actual_parameters = hs_macro_function_evaluate(function_index, thread_index, initialize)) \
{ \
reinterpret_cast<void(__cdecl*)(FORCE_EXPAND(EXPAND_TYPES_##FORMAL_PARAMETER_COUNT, __VA_ARGS__))>(FUNCTION)(FORCE_EXPAND(EXPAND_CALLS_##FORMAL_PARAMETER_COUNT, __VA_ARGS__)); \
hs_return(thread_index, result); \
}
#define MACRO_FUNCTION_EVALUATE_IMPL(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) \
int32 result = 0; \
if constexpr (FORMAL_PARAMETER_COUNT == 0) \
{ \
*(RETURN_TYPE##_*)&result = reinterpret_cast<RETURN_TYPE##_(__cdecl*)()>(FUNCTION)(); \
hs_return(thread_index, result); \
} \
else if (int32* actual_parameters = hs_macro_function_evaluate(function_index, thread_index, initialize)) \
{ \
*(RETURN_TYPE##_*)&result = reinterpret_cast<RETURN_TYPE##_(__cdecl*)(FORCE_EXPAND(EXPAND_TYPES_##FORMAL_PARAMETER_COUNT, __VA_ARGS__))>(FUNCTION)(FORCE_EXPAND(EXPAND_CALLS_##FORMAL_PARAMETER_COUNT, __VA_ARGS__)); \
hs_return(thread_index, result); \
}
#define MACRO_FUNCTION_EVALUATE__hs_type_bool(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_boolean(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_real(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_short_integer(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_long_integer(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_string(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_script(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_string_id(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_unit_seat_mapping(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_trigger_volume(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_cutscene_flag(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_cutscene_camera_point(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_cutscene_title(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_cutscene_recording(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_device_group(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_ai(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_ai_command_list(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_ai_command_script(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_ai_behavior(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_ai_orders(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_ai_line(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_starting_profile(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_conversation(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_zone_set(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_designer_zone(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_point_ref(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_style(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_object_list(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_folder(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_sound(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_effect(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_damage(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_looping_sound(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_animation_graph(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_damage_effect(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_object_definition(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_bitmap(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_shader(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_render_model_definition(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_structure_bsp_definition(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_structure_lightmap_definition(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_cinematic_definition(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_cinematic_scene_definition(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_bink_definition(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_any_tag(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_any_tag_not_resolving(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_game_difficulty(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_team(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_mp_team(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_controller(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_button_preset(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_joystick_preset(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_player_color(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_player_character_type(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_voice_output_setting(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_voice_mask(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_subtitle_setting(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_actor_type(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_model_state(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_event(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_character_physics_override(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_primary_skull(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_enum_secondary_skull(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_object(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_unit(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_vehicle(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_weapon(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_device(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_scenery(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_effect_scenery(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_object_name(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_unit_name(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_vehicle_name(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_weapon_name(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_device_name(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_scenery_name(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_effect_scenery_name(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_cinematic_lightprobe(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_budget_reference_animation_graph(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_budget_reference_looping_sound(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE__hs_type_budget_reference_sound(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, ...) EXPAND_IMPL(MACRO_FUNCTION_EVALUATE_IMPL, (RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__))
#define MACRO_FUNCTION_EVALUATE(STRUCT_NAME, EXTRA_BYTES_SIZE, RETURN_TYPE, NAME, FLAGS, FUNCTION, DOCUMENTATION, PARAMETERS, FORMAL_PARAMETER_COUNT, ...) \
COMPILE_ASSERT(EXTRA_BYTES_SIZE == sizeof(int16) * FORMAL_PARAMETER_COUNT); \
COMPILE_ASSERT(VALID_COUNT(FORMAL_PARAMETER_COUNT, MAX_HS_FUNCTION_PARAMETERS)); \
void NAME##_##FUNCTION##_##FORMAL_PARAMETER_COUNT##_evaluate(int16 function_index, int32 thread_index, bool initialize) \
{ \
MACRO_FUNCTION_EVALUATE_##RETURN_TYPE(RETURN_TYPE, FUNCTION, FORMAL_PARAMETER_COUNT, __VA_ARGS__) \
} \
static $##STRUCT_NAME##$_extra_bytes_##EXTRA_BYTES_SIZE NAME##_##FORMAL_PARAMETER_COUNT##_definition = \
{ \
.return_type = (RETURN_TYPE), \
.name = #NAME, \
.flags = (FLAGS), \
.parse = hs_macro_function_parse, \
.evaluate = NAME##_##FUNCTION##_##FORMAL_PARAMETER_COUNT##_evaluate, \
.documentation = (DOCUMENTATION), \
.parameters = (PARAMETERS), \
.formal_parameter_count = (FORMAL_PARAMETER_COUNT), \
.formal_parameters = { __VA_ARGS__ }, \
}
#pragma endregion // MACRO_FUNCTION_EVALUATE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment