diff --git a/auxmos.dll b/auxmos.dll index 44e011ff8de3..69d1f1afb9ce 100644 Binary files a/auxmos.dll and b/auxmos.dll differ diff --git a/auxmos.pdb b/auxmos.pdb index 7a7f2d12cb0e..40b2d2adb754 100644 Binary files a/auxmos.pdb and b/auxmos.pdb differ diff --git a/code/__DEFINES/bindings.dm b/code/__DEFINES/bindings.dm index f7d94e15b07e..c6fde9a16347 100644 --- a/code/__DEFINES/bindings.dm +++ b/code/__DEFINES/bindings.dm @@ -10,176 +10,176 @@ return __auxmos = "auxmos" #define AUXMOS (__auxmos || __detect_auxmos()) - -/datum/controller/subsystem/air/proc/process_turf_equalize_auxtools(remaining) - return LIBCALL(AUXMOS, "byond:equalize_hook_ffi")(src, remaining) - -/datum/controller/subsystem/air/proc/process_excited_groups_auxtools(remaining) - return LIBCALL(AUXMOS, "byond:groups_hook_ffi")(src, remaining) - -/datum/controller/subsystem/air/proc/process_turfs_auxtools(remaining) - return LIBCALL(AUXMOS, "byond:process_turf_hook_ffi")(src, remaining) - -/datum/controller/subsystem/air/proc/finish_turf_processing_auxtools(time_remaining) - return LIBCALL(AUXMOS, "byond:finish_process_turfs_ffi")(time_remaining) - -/datum/controller/subsystem/air/proc/thread_running() - return LIBCALL(AUXMOS, "byond:thread_running_hook_ffi")() - -/turf/proc/__update_auxtools_turf_adjacency_info() - return LIBCALL(AUXMOS, "byond:hook_infos_ffi")(src) - -/turf/proc/update_air_ref(flag) - return LIBCALL(AUXMOS, "byond:hook_register_turf_ffi")(src, flag) - -/proc/finalize_gas_refs() - return LIBCALL(AUXMOS, "byond:finalize_gas_refs_ffi")() - -/datum/controller/subsystem/air/proc/auxtools_update_reactions() - return LIBCALL(AUXMOS, "byond:update_reactions_ffi")() - -/proc/auxtools_atmos_init(gas_data) - return LIBCALL(AUXMOS, "byond:hook_init_ffi")(gas_data) - -/proc/_auxtools_register_gas(gas) - return LIBCALL(AUXMOS, "byond:hook_register_gas_ffi")(gas) - + /datum/gas_mixture/proc/__auxtools_parse_gas_string(string) - return LIBCALL(AUXMOS, "byond:parse_gas_string_ffi")(src, string) + return call_ext(AUXMOS, "byond:parse_gas_string_ffi")(src, string) /datum/controller/subsystem/air/proc/get_max_gas_mixes() - return LIBCALL(AUXMOS, "byond:hook_max_gas_mixes_ffi")() + return call_ext(AUXMOS, "byond:hook_max_gas_mixes_ffi")() /datum/controller/subsystem/air/proc/get_amt_gas_mixes() - return LIBCALL(AUXMOS, "byond:hook_amt_gas_mixes_ffi")() + return call_ext(AUXMOS, "byond:hook_amt_gas_mixes_ffi")() /proc/equalize_all_gases_in_list(gas_list) - return LIBCALL(AUXMOS, "byond:equalize_all_hook_ffi")(gas_list) + return call_ext(AUXMOS, "byond:equalize_all_hook_ffi")(gas_list) /datum/gas_mixture/proc/get_oxidation_power(temp) - return LIBCALL(AUXMOS, "byond:oxidation_power_hook_ffi")(src, temp) + return call_ext(AUXMOS, "byond:oxidation_power_hook_ffi")(src, temp) /datum/gas_mixture/proc/get_fuel_amount(temp) - return LIBCALL(AUXMOS, "byond:fuel_amount_hook_ffi")(src, temp) + return call_ext(AUXMOS, "byond:fuel_amount_hook_ffi")(src, temp) /datum/gas_mixture/proc/equalize_with(total) - return LIBCALL(AUXMOS, "byond:equalize_with_hook_ffi")(src, total) + return call_ext(AUXMOS, "byond:equalize_with_hook_ffi")(src, total) /datum/gas_mixture/proc/transfer_ratio_to(other, ratio) - return LIBCALL(AUXMOS, "byond:transfer_ratio_hook_ffi")(src, other, ratio) + return call_ext(AUXMOS, "byond:transfer_ratio_hook_ffi")(src, other, ratio) /datum/gas_mixture/proc/transfer_to(other, moles) - return LIBCALL(AUXMOS, "byond:transfer_hook_ffi")(src, other, moles) + return call_ext(AUXMOS, "byond:transfer_hook_ffi")(src, other, moles) /datum/gas_mixture/proc/adjust_heat(temp) - return LIBCALL(AUXMOS, "byond:adjust_heat_hook_ffi")(src, temp) + return call_ext(AUXMOS, "byond:adjust_heat_hook_ffi")(src, temp) /datum/gas_mixture/proc/react(holder) - return LIBCALL(AUXMOS, "byond:react_hook_ffi")(src, holder) + return call_ext(AUXMOS, "byond:react_hook_ffi")(src, holder) /datum/gas_mixture/proc/compare(other) - return LIBCALL(AUXMOS, "byond:compare_hook_ffi")(src, other) + return call_ext(AUXMOS, "byond:compare_hook_ffi")(src, other) /datum/gas_mixture/proc/clear() - return LIBCALL(AUXMOS, "byond:clear_hook_ffi")(src) + return call_ext(AUXMOS, "byond:clear_hook_ffi")(src) /datum/gas_mixture/proc/mark_immutable() - return LIBCALL(AUXMOS, "byond:mark_immutable_hook_ffi")(src) + return call_ext(AUXMOS, "byond:mark_immutable_hook_ffi")(src) /datum/gas_mixture/proc/scrub_into(into, ratio_v, gas_list) - return LIBCALL(AUXMOS, "byond:scrub_into_hook_ffi")(src, into, ratio_v, gas_list) + return call_ext(AUXMOS, "byond:scrub_into_hook_ffi")(src, into, ratio_v, gas_list) /datum/gas_mixture/proc/get_by_flag(flag_val) - return LIBCALL(AUXMOS, "byond:get_by_flag_hook_ffi")(src, flag_val) + return call_ext(AUXMOS, "byond:get_by_flag_hook_ffi")(src, flag_val) /datum/gas_mixture/proc/__remove_by_flag(into, flag_val, amount_val) - return LIBCALL(AUXMOS, "byond:remove_by_flag_hook_ffi")(src, into, flag_val, amount_val) + return call_ext(AUXMOS, "byond:remove_by_flag_hook_ffi")(src, into, flag_val, amount_val) /datum/gas_mixture/proc/divide(num_val) - return LIBCALL(AUXMOS, "byond:divide_hook_ffi")(src, num_val) + return call_ext(AUXMOS, "byond:divide_hook_ffi")(src, num_val) /datum/gas_mixture/proc/multiply(num_val) - return LIBCALL(AUXMOS, "byond:multiply_hook_ffi")(src, num_val) + return call_ext(AUXMOS, "byond:multiply_hook_ffi")(src, num_val) /datum/gas_mixture/proc/subtract(num_val) - return LIBCALL(AUXMOS, "byond:subtract_hook_ffi")(src, num_val) + return call_ext(AUXMOS, "byond:subtract_hook_ffi")(src, num_val) /datum/gas_mixture/proc/add(num_val) - return LIBCALL(AUXMOS, "byond:add_hook_ffi")(src, num_val) + return call_ext(AUXMOS, "byond:add_hook_ffi")(src, num_val) /datum/gas_mixture/proc/adjust_multi(...) var/list/args_copy = args.Copy() args_copy.Insert(1, src) - return LIBCALL(AUXMOS, "byond:adjust_multi_hook_ffi")(arglist(args_copy)) + return call_ext(AUXMOS, "byond:adjust_multi_hook_ffi")(arglist(args_copy)) /datum/gas_mixture/proc/adjust_moles_temp(id_val, num_val, temp_val) - return LIBCALL(AUXMOS, "byond:adjust_moles_temp_hook_ffi")(src, id_val, num_val, temp_val) + return call_ext(AUXMOS, "byond:adjust_moles_temp_hook_ffi")(src, id_val, num_val, temp_val) /datum/gas_mixture/proc/adjust_moles(id_val, num_val) - return LIBCALL(AUXMOS, "byond:adjust_moles_hook_ffi")(src, id_val, num_val) + return call_ext(AUXMOS, "byond:adjust_moles_hook_ffi")(src, id_val, num_val) /datum/gas_mixture/proc/set_moles(gas_id, amt_val) - return LIBCALL(AUXMOS, "byond:set_moles_hook_ffi")(src, gas_id, amt_val) + return call_ext(AUXMOS, "byond:set_moles_hook_ffi")(src, gas_id, amt_val) /datum/gas_mixture/proc/get_moles(gas_id) - return LIBCALL(AUXMOS, "byond:get_moles_hook_ffi")(src, gas_id) + return call_ext(AUXMOS, "byond:get_moles_hook_ffi")(src, gas_id) /datum/gas_mixture/proc/set_volume(vol_arg) - return LIBCALL(AUXMOS, "byond:set_volume_hook_ffi")(src, vol_arg) + return call_ext(AUXMOS, "byond:set_volume_hook_ffi")(src, vol_arg) /datum/gas_mixture/proc/partial_heat_capacity(gas_id) - return LIBCALL(AUXMOS, "byond:partial_heat_capacity_ffi")(src, gas_id) + return call_ext(AUXMOS, "byond:partial_heat_capacity_ffi")(src, gas_id) /datum/gas_mixture/proc/set_temperature(arg_temp) - return LIBCALL(AUXMOS, "byond:set_temperature_hook_ffi")(src, arg_temp) + return call_ext(AUXMOS, "byond:set_temperature_hook_ffi")(src, arg_temp) /datum/gas_mixture/proc/get_gases() - return LIBCALL(AUXMOS, "byond:get_gases_hook_ffi")(src) + return call_ext(AUXMOS, "byond:get_gases_hook_ffi")(src) /datum/gas_mixture/proc/temperature_share(...) var/list/args_copy = args.Copy() args_copy.Insert(1, src) - return LIBCALL(AUXMOS, "byond:temperature_share_hook_ffi")(arglist(args_copy)) + return call_ext(AUXMOS, "byond:temperature_share_hook_ffi")(arglist(args_copy)) /datum/gas_mixture/proc/copy_from(giver) - return LIBCALL(AUXMOS, "byond:copy_from_hook_ffi")(src, giver) + return call_ext(AUXMOS, "byond:copy_from_hook_ffi")(src, giver) /datum/gas_mixture/proc/__remove(into, amount_arg) - return LIBCALL(AUXMOS, "byond:remove_hook_ffi")(src, into, amount_arg) + return call_ext(AUXMOS, "byond:remove_hook_ffi")(src, into, amount_arg) /datum/gas_mixture/proc/__remove_ratio(into, ratio_arg) - return LIBCALL(AUXMOS, "byond:remove_ratio_hook_ffi")(src, into, ratio_arg) + return call_ext(AUXMOS, "byond:remove_ratio_hook_ffi")(src, into, ratio_arg) /datum/gas_mixture/proc/merge(giver) - return LIBCALL(AUXMOS, "byond:merge_hook_ffi")(src, giver) + return call_ext(AUXMOS, "byond:merge_hook_ffi")(src, giver) /datum/gas_mixture/proc/thermal_energy() - return LIBCALL(AUXMOS, "byond:thermal_energy_hook_ffi")(src) + return call_ext(AUXMOS, "byond:thermal_energy_hook_ffi")(src) /datum/gas_mixture/proc/return_volume() - return LIBCALL(AUXMOS, "byond:return_volume_hook_ffi")(src) + return call_ext(AUXMOS, "byond:return_volume_hook_ffi")(src) /datum/gas_mixture/proc/return_temperature() - return LIBCALL(AUXMOS, "byond:return_temperature_hook_ffi")(src) + return call_ext(AUXMOS, "byond:return_temperature_hook_ffi")(src) /datum/gas_mixture/proc/return_pressure() - return LIBCALL(AUXMOS, "byond:return_pressure_hook_ffi")(src) + return call_ext(AUXMOS, "byond:return_pressure_hook_ffi")(src) /datum/gas_mixture/proc/total_moles() - return LIBCALL(AUXMOS, "byond:total_moles_hook_ffi")(src) + return call_ext(AUXMOS, "byond:total_moles_hook_ffi")(src) /datum/gas_mixture/proc/set_min_heat_capacity(arg_min) - return LIBCALL(AUXMOS, "byond:min_heat_cap_hook_ffi")(src, arg_min) + return call_ext(AUXMOS, "byond:min_heat_cap_hook_ffi")(src, arg_min) /datum/gas_mixture/proc/heat_capacity() - return LIBCALL(AUXMOS, "byond:heat_cap_hook_ffi")(src) + return call_ext(AUXMOS, "byond:heat_cap_hook_ffi")(src) /datum/gas_mixture/proc/__gasmixture_unregister() - return LIBCALL(AUXMOS, "byond:unregister_gasmixture_hook_ffi")(src) + return call_ext(AUXMOS, "byond:unregister_gasmixture_hook_ffi")(src) /datum/gas_mixture/proc/__gasmixture_register() - return LIBCALL(AUXMOS, "byond:register_gasmixture_hook_ffi")(src) + return call_ext(AUXMOS, "byond:register_gasmixture_hook_ffi")(src) /proc/process_atmos_callbacks(remaining) - return LIBCALL(AUXMOS, "byond:atmos_callback_handle_ffi")(remaining) + return call_ext(AUXMOS, "byond:atmos_callback_handle_ffi")(remaining) + +/turf/proc/__update_auxtools_turf_adjacency_info() + return call_ext(AUXMOS, "byond:hook_infos_ffi")(src) + +/turf/proc/update_air_ref(flag) + return call_ext(AUXMOS, "byond:hook_register_turf_ffi")(src, flag) + +/datum/controller/subsystem/air/proc/process_turf_equalize_auxtools(remaining) + return call_ext(AUXMOS, "byond:equalize_hook_ffi")(src, remaining) + +/datum/controller/subsystem/air/proc/process_excited_groups_auxtools(remaining) + return call_ext(AUXMOS, "byond:groups_hook_ffi")(src, remaining) + +/datum/controller/subsystem/air/proc/process_turfs_auxtools(remaining) + return call_ext(AUXMOS, "byond:process_turf_hook_ffi")(src, remaining) + +/datum/controller/subsystem/air/proc/finish_turf_processing_auxtools(time_remaining) + return call_ext(AUXMOS, "byond:finish_process_turfs_ffi")(time_remaining) + +/datum/controller/subsystem/air/proc/thread_running() + return call_ext(AUXMOS, "byond:thread_running_hook_ffi")() + +/proc/finalize_gas_refs() + return call_ext(AUXMOS, "byond:finalize_gas_refs_ffi")() + +/datum/controller/subsystem/air/proc/auxtools_update_reactions() + return call_ext(AUXMOS, "byond:update_reactions_ffi")() + +/proc/auxtools_atmos_init(gas_data) + return call_ext(AUXMOS, "byond:hook_init_ffi")(gas_data) + +/proc/_auxtools_register_gas(gas) + return call_ext(AUXMOS, "byond:hook_register_gas_ffi")(gas) diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index ab0f7d4c1f60..d34a2038144d 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -186,6 +186,66 @@ #define rustg_http_request_async(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_async")(method, url, body, headers, options) #define rustg_http_check_request(req_id) RUSTG_CALL(RUST_G, "http_check_request")(req_id) +/// Generates a spritesheet at: [file_path][spritesheet_name]_[size_id].png +/// The resulting spritesheet arranges icons in a random order, with the position being denoted in the "sprites" return value. +/// All icons have the same y coordinate, and their x coordinate is equal to `icon_width * position`. +/// +/// hash_icons is a boolean (0 or 1), and determines if the generator will spend time creating hashes for the output field dmi_hashes. +/// These hashes can be heplful for 'smart' caching (see rustg_iconforge_cache_valid), but require extra computation. +/// +/// Spritesheet will contain all sprites listed within "sprites". +/// "sprites" format: +/// list( +/// "sprite_name" = list( // <--- this list is a [SPRITE_OBJECT] +/// icon_file = 'icons/path_to/an_icon.dmi', +/// icon_state = "some_icon_state", +/// dir = SOUTH, +/// frame = 1, +/// transform = list([TRANSFORM_OBJECT], ...) +/// ), +/// ..., +/// ) +/// TRANSFORM_OBJECT format: +/// list("type" = RUSTG_ICONFORGE_BLEND_COLOR, "color" = "#ff0000", "blend_mode" = ICON_MULTIPLY) +/// list("type" = RUSTG_ICONFORGE_BLEND_ICON, "icon" = [SPRITE_OBJECT], "blend_mode" = ICON_OVERLAY) +/// list("type" = RUSTG_ICONFORGE_SCALE, "width" = 32, "height" = 32) +/// list("type" = RUSTG_ICONFORGE_CROP, "x1" = 1, "y1" = 1, "x2" = 32, "y2" = 32) // (BYOND icons index from 1,1 to the upper bound, inclusive) +/// +/// Returns a SpritesheetResult as JSON, containing fields: +/// list( +/// "sizes" = list("32x32", "64x64", ...), +/// "sprites" = list("sprite_name" = list("size_id" = "32x32", "position" = 0), ...), +/// "dmi_hashes" = list("icons/path_to/an_icon.dmi" = "d6325c5b4304fb03", ...), +/// "sprites_hash" = "a2015e5ff403fb5c", // This is the xxh64 hash of the INPUT field "sprites". +/// "error" = "[A string, empty if there were no errors.]" +/// ) +/// In the case of an unrecoverable panic from within Rust, this function ONLY returns a string containing the error. +#define rustg_iconforge_generate(file_path, spritesheet_name, sprites, hash_icons) RUSTG_CALL(RUST_G, "iconforge_generate")(file_path, spritesheet_name, sprites, "[hash_icons]") +/// Returns a job_id for use with rustg_iconforge_check() +#define rustg_iconforge_generate_async(file_path, spritesheet_name, sprites, hash_icons) RUSTG_CALL(RUST_G, "iconforge_generate_async")(file_path, spritesheet_name, sprites, "[hash_icons]") +/// Returns the status of an async job_id, or its result if it is completed. See RUSTG_JOB DEFINEs. +#define rustg_iconforge_check(job_id) RUSTG_CALL(RUST_G, "iconforge_check")("[job_id]") +/// Clears all cached DMIs and images, freeing up memory. +/// This should be used after spritesheets are done being generated. +#define rustg_iconforge_cleanup RUSTG_CALL(RUST_G, "iconforge_cleanup") +/// Takes in a set of hashes, generate inputs, and DMI filepaths, and compares them to determine cache validity. +/// input_hash: xxh64 hash of "sprites" from the cache. +/// dmi_hashes: xxh64 hashes of the DMIs in a spritesheet, given by `rustg_iconforge_generate` with `hash_icons` enabled. From the cache. +/// sprites: The new input that will be passed to rustg_iconforge_generate(). +/// Returns a CacheResult with the following structure: list( +/// "result": "1" (if cache is valid) or "0" (if cache is invalid) +/// "fail_reason": "" (emtpy string if valid, otherwise a string containing the invalidation reason or an error with ERROR: prefixed.) +/// ) +/// In the case of an unrecoverable panic from within Rust, this function ONLY returns a string containing the error. +#define rustg_iconforge_cache_valid(input_hash, dmi_hashes, sprites) RUSTG_CALL(RUST_G, "iconforge_cache_valid")(input_hash, dmi_hashes, sprites) +/// Returns a job_id for use with rustg_iconforge_check() +#define rustg_iconforge_cache_valid_async(input_hash, dmi_hashes, sprites) RUSTG_CALL(RUST_G, "iconforge_cache_valid_async")(input_hash, dmi_hashes, sprites) + +#define RUSTG_ICONFORGE_BLEND_COLOR "BlendColor" +#define RUSTG_ICONFORGE_BLEND_ICON "BlendIcon" +#define RUSTG_ICONFORGE_CROP "Crop" +#define RUSTG_ICONFORGE_SCALE "Scale" + #define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET" #define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB" #define RUSTG_JOB_ERROR "JOB PANICKED" diff --git a/rust_g.dll b/rust_g.dll index 7d1aa3cf295c..7f35bb266a81 100644 Binary files a/rust_g.dll and b/rust_g.dll differ