From 2aa6e1aa08c2c9eedcdbc92be0f0920b6aafab3a Mon Sep 17 00:00:00 2001 From: PeachyPeach <72323920+PeachyPeachSM64@users.noreply.github.com> Date: Sat, 29 Apr 2023 06:00:17 +0200 Subject: [PATCH] custom animations no dynos (#371) Load animations with smlua_anim_util_register_animation and set them with smlua_anim_util_set_animation. --- autogen/convert_functions.py | 2 + autogen/lua_definitions/functions.lua | 13 + autogen/lua_definitions/manual.lua | 13 + data/dynos_mgr_anim.cpp | 3 +- docs/lua/functions-4.md | 1331 +------------------------ docs/lua/functions-5.md | 1284 ++++++++++++++++++++++++ docs/lua/functions.md | 136 +-- src/pc/lua/smlua.c | 2 + src/pc/lua/smlua_functions.c | 65 ++ src/pc/lua/smlua_functions_autogen.c | 45 + src/pc/lua/utils/smlua_anim_utils.c | 113 +++ src/pc/lua/utils/smlua_anim_utils.h | 7 + 12 files changed, 1664 insertions(+), 1350 deletions(-) diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index 1f4486e1..8f90c70b 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -47,6 +47,7 @@ in_files = [ "src/pc/lua/utils/smlua_text_utils.h", "src/pc/lua/utils/smlua_audio_utils.h", "src/pc/lua/utils/smlua_level_utils.h", + "src/pc/lua/utils/smlua_anim_utils.h", "src/pc/lua/utils/smlua_deprecated.h", "src/game/object_helpers.c", "src/game/obj_behaviors.c", @@ -104,6 +105,7 @@ override_disallowed_functions = { "src/pc/lua/utils/smlua_audio_utils.h": [ "smlua_audio_utils_override", "audio_custom_shutdown"], "src/pc/djui/djui_hud_utils.h": [ "djui_hud_render_texture", "djui_hud_render_texture_raw", "djui_hud_render_texture_tile", "djui_hud_render_texture_tile_raw" ], "src/pc/lua/utils/smlua_level_utils.h": [ "smlua_level_util_reset" ], + "src/pc/lua/utils/smlua_anim_utils.h": [ "smlua_anim_util_reset", "smlua_anim_util_register_animation" ], "src/pc/network/lag_compensation.h": [ "lag_compensation_clear", "lag_compensation_store" ], } diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index bd3261e6..9fbcbfdc 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -7868,6 +7868,19 @@ function save_file_set_star_flags(fileIndex, courseIndex, starFlags) -- ... end +--- @param obj Object +--- @return string +function smlua_anim_util_get_current_animation_name(obj) + -- ... +end + +--- @param obj Object +--- @param name string +--- @return nil +function smlua_anim_util_set_animation(obj, name) + -- ... +end + --- @param audio BassAudio --- @return nil function audio_sample_destroy(audio) diff --git a/autogen/lua_definitions/manual.lua b/autogen/lua_definitions/manual.lua index 568a0cb7..309c3fe3 100644 --- a/autogen/lua_definitions/manual.lua +++ b/autogen/lua_definitions/manual.lua @@ -222,6 +222,19 @@ function djui_hud_render_texture_tile_interpolated(texInfo, prevX, prevY, prevSc -- ... end +--- @param name string +--- @param flags integer +--- @param animYTransDivisor integer +--- @param startFrame integer +--- @param loopStart integer +--- @param loopEnd integer +--- @param values table +--- @param index table +--- @return nil +function smlua_anim_util_register_animation(name, flags, animYTransDivisor, startFrame, loopStart, loopEnd, values, index) + -- ... +end + --- @param levelNum number --- @param func fun(areaIndex:number, bhvData:table, macroBhvIds:table, macroBhvArgs:table) --- @return nil diff --git a/data/dynos_mgr_anim.cpp b/data/dynos_mgr_anim.cpp index 19b42f46..983c88e0 100644 --- a/data/dynos_mgr_anim.cpp +++ b/data/dynos_mgr_anim.cpp @@ -4,6 +4,7 @@ extern "C" { #include "game/level_update.h" #include "game/object_list_processor.h" #include "pc/configfile.h" +#include "pc/lua/utils/smlua_anim_utils.h" } // @@ -25,7 +26,7 @@ static s32 RetrieveCurrentMarioAnimationIndex(u32 aPlayerIndex) { // Retrieve the current animation index // As we don't know the length of the table, let's hope that we'll always find the animation... static s32 RetrieveCurrentAnimationIndex(struct Object *aObject) { - if (!aObject->oAnimations || !aObject->header.gfx.animInfo.curAnim) { + if (!aObject->oAnimations || !aObject->header.gfx.animInfo.curAnim || smlua_anim_util_get_current_animation_name(aObject)) { return -1; } for (s32 i = 0; aObject->oAnimations[i] != NULL; ++i) { diff --git a/docs/lua/functions-4.md b/docs/lua/functions-4.md index 89c0b44f..4be078f6 100644 --- a/docs/lua/functions-4.md +++ b/docs/lua/functions-4.md @@ -6725,6 +6725,53 @@
+--- +# functions from smlua_anim_utils.h + +
+ + +## [smlua_anim_util_get_current_animation_name](#smlua_anim_util_get_current_animation_name) + +### Lua Example +`local stringValue = smlua_anim_util_get_current_animation_name(obj)` + +### Parameters +| Field | Type | +| ----- | ---- | +| obj | [Object](structs.md#Object) | + +### Returns +- `string` + +### C Prototype +`const char *smlua_anim_util_get_current_animation_name(struct Object *obj);` + +[:arrow_up_small:](#) + +
+ +## [smlua_anim_util_set_animation](#smlua_anim_util_set_animation) + +### Lua Example +`smlua_anim_util_set_animation(obj, name)` + +### Parameters +| Field | Type | +| ----- | ---- | +| obj | [Object](structs.md#Object) | +| name | `string` | + +### Returns +- None + +### C Prototype +`void smlua_anim_util_set_animation(struct Object *obj, const char *name);` + +[:arrow_up_small:](#) + +
+ --- # functions from smlua_audio_utils.h @@ -7665,1290 +7712,6 @@ [:arrow_up_small:](#) -
- ---- -# functions from smlua_misc_utils.h - -
- - -## [add_scroll_target](#add_scroll_target) - -### Lua Example -`add_scroll_target(index, name, offset, size)` - -### Parameters -| Field | Type | -| ----- | ---- | -| index | `integer` | -| name | `string` | -| offset | `integer` | -| size | `integer` | - -### Returns -- None - -### C Prototype -`void add_scroll_target(u32 index, const char* name, u32 offset, u32 size);` - -[:arrow_up_small:](#) - -
- -## [allocate_mario_action](#allocate_mario_action) - -### Lua Example -`local integerValue = allocate_mario_action(actFlags)` - -### Parameters -| Field | Type | -| ----- | ---- | -| actFlags | `integer` | - -### Returns -- `integer` - -### C Prototype -`u32 allocate_mario_action(u32 actFlags);` - -[:arrow_up_small:](#) - -
- -## [camera_config_enable_analog_cam](#camera_config_enable_analog_cam) - -### Lua Example -`camera_config_enable_analog_cam(enable)` - -### Parameters -| Field | Type | -| ----- | ---- | -| enable | `boolean` | - -### Returns -- None - -### C Prototype -`void camera_config_enable_analog_cam(bool enable);` - -[:arrow_up_small:](#) - -
- -## [camera_config_enable_free_cam](#camera_config_enable_free_cam) - -### Lua Example -`camera_config_enable_free_cam(enable)` - -### Parameters -| Field | Type | -| ----- | ---- | -| enable | `boolean` | - -### Returns -- None - -### C Prototype -`void camera_config_enable_free_cam(bool enable);` - -[:arrow_up_small:](#) - -
- -## [camera_config_enable_mouse_look](#camera_config_enable_mouse_look) - -### Lua Example -`camera_config_enable_mouse_look(enable)` - -### Parameters -| Field | Type | -| ----- | ---- | -| enable | `boolean` | - -### Returns -- None - -### C Prototype -`void camera_config_enable_mouse_look(bool enable);` - -[:arrow_up_small:](#) - -
- -## [camera_config_get_aggression](#camera_config_get_aggression) - -### Lua Example -`local integerValue = camera_config_get_aggression()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u32 camera_config_get_aggression(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_get_deceleration](#camera_config_get_deceleration) - -### Lua Example -`local integerValue = camera_config_get_deceleration()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u32 camera_config_get_deceleration(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_get_pan_level](#camera_config_get_pan_level) - -### Lua Example -`local integerValue = camera_config_get_pan_level()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u32 camera_config_get_pan_level(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_get_x_sensitivity](#camera_config_get_x_sensitivity) - -### Lua Example -`local integerValue = camera_config_get_x_sensitivity()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u32 camera_config_get_x_sensitivity(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_get_y_sensitivity](#camera_config_get_y_sensitivity) - -### Lua Example -`local integerValue = camera_config_get_y_sensitivity()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u32 camera_config_get_y_sensitivity(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_invert_x](#camera_config_invert_x) - -### Lua Example -`camera_config_invert_x(invert)` - -### Parameters -| Field | Type | -| ----- | ---- | -| invert | `boolean` | - -### Returns -- None - -### C Prototype -`void camera_config_invert_x(bool invert);` - -[:arrow_up_small:](#) - -
- -## [camera_config_invert_y](#camera_config_invert_y) - -### Lua Example -`camera_config_invert_y(invert)` - -### Parameters -| Field | Type | -| ----- | ---- | -| invert | `boolean` | - -### Returns -- None - -### C Prototype -`void camera_config_invert_y(bool invert);` - -[:arrow_up_small:](#) - -
- -## [camera_config_is_analog_cam_enabled](#camera_config_is_analog_cam_enabled) - -### Lua Example -`local booleanValue = camera_config_is_analog_cam_enabled()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool camera_config_is_analog_cam_enabled(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_is_free_cam_enabled](#camera_config_is_free_cam_enabled) - -### Lua Example -`local booleanValue = camera_config_is_free_cam_enabled()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool camera_config_is_free_cam_enabled(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_is_mouse_look_enabled](#camera_config_is_mouse_look_enabled) - -### Lua Example -`local booleanValue = camera_config_is_mouse_look_enabled()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool camera_config_is_mouse_look_enabled(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_is_x_inverted](#camera_config_is_x_inverted) - -### Lua Example -`local booleanValue = camera_config_is_x_inverted()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool camera_config_is_x_inverted(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_is_y_inverted](#camera_config_is_y_inverted) - -### Lua Example -`local booleanValue = camera_config_is_y_inverted()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool camera_config_is_y_inverted(void);` - -[:arrow_up_small:](#) - -
- -## [camera_config_set_aggression](#camera_config_set_aggression) - -### Lua Example -`camera_config_set_aggression(value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void camera_config_set_aggression(u32 value);` - -[:arrow_up_small:](#) - -
- -## [camera_config_set_deceleration](#camera_config_set_deceleration) - -### Lua Example -`camera_config_set_deceleration(value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void camera_config_set_deceleration(u32 value);` - -[:arrow_up_small:](#) - -
- -## [camera_config_set_pan_level](#camera_config_set_pan_level) - -### Lua Example -`camera_config_set_pan_level(value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void camera_config_set_pan_level(u32 value);` - -[:arrow_up_small:](#) - -
- -## [camera_config_set_x_sensitivity](#camera_config_set_x_sensitivity) - -### Lua Example -`camera_config_set_x_sensitivity(value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void camera_config_set_x_sensitivity(u32 value);` - -[:arrow_up_small:](#) - -
- -## [camera_config_set_y_sensitivity](#camera_config_set_y_sensitivity) - -### Lua Example -`camera_config_set_y_sensitivity(value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void camera_config_set_y_sensitivity(u32 value);` - -[:arrow_up_small:](#) - -
- -## [camera_freeze](#camera_freeze) - -### Lua Example -`camera_freeze()` - -### Parameters -- None - -### Returns -- None - -### C Prototype -`void camera_freeze(void);` - -[:arrow_up_small:](#) - -
- -## [camera_is_frozen](#camera_is_frozen) - -### Lua Example -`local booleanValue = camera_is_frozen()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool camera_is_frozen(void);` - -[:arrow_up_small:](#) - -
- -## [camera_unfreeze](#camera_unfreeze) - -### Lua Example -`camera_unfreeze()` - -### Parameters -- None - -### Returns -- None - -### C Prototype -`void camera_unfreeze(void);` - -[:arrow_up_small:](#) - -
- -## [course_is_main_course](#course_is_main_course) - -### Lua Example -`local booleanValue = course_is_main_course(courseNum)` - -### Parameters -| Field | Type | -| ----- | ---- | -| courseNum | `integer` | - -### Returns -- `boolean` - -### C Prototype -`bool course_is_main_course(u16 courseNum);` - -[:arrow_up_small:](#) - -
- -## [deref_s32_pointer](#deref_s32_pointer) - -### Lua Example -`local integerValue = deref_s32_pointer(pointer)` - -### Parameters -| Field | Type | -| ----- | ---- | -| pointer | `Pointer` <`integer`> | - -### Returns -- `integer` - -### C Prototype -`s32 deref_s32_pointer(s32* pointer);` - -[:arrow_up_small:](#) - -
- -## [get_current_save_file_num](#get_current_save_file_num) - -### Lua Example -`local integerValue = get_current_save_file_num()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`s16 get_current_save_file_num(void);` - -[:arrow_up_small:](#) - -
- -## [get_dialog_box_state](#get_dialog_box_state) - -### Lua Example -`local integerValue = get_dialog_box_state()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`s8 get_dialog_box_state();` - -[:arrow_up_small:](#) - -
- -## [get_dialog_id](#get_dialog_id) - -### Lua Example -`local integerValue = get_dialog_id()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`s16 get_dialog_id(void);` - -[:arrow_up_small:](#) - -
- -## [get_envfx](#get_envfx) - -### Lua Example -`local integerValue = get_envfx()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u16 get_envfx(void);` - -[:arrow_up_small:](#) - -
- -## [get_environment_region](#get_environment_region) - -### Lua Example -`local numberValue = get_environment_region(index)` - -### Parameters -| Field | Type | -| ----- | ---- | -| index | `integer` | - -### Returns -- `number` - -### C Prototype -`f32 get_environment_region(u8 index);` - -[:arrow_up_small:](#) - -
- -## [get_hand_foot_pos_x](#get_hand_foot_pos_x) - -### Lua Example -`local numberValue = get_hand_foot_pos_x(m, index)` - -### Parameters -| Field | Type | -| ----- | ---- | -| m | [MarioState](structs.md#MarioState) | -| index | `integer` | - -### Returns -- `number` - -### C Prototype -`f32 get_hand_foot_pos_x(struct MarioState* m, u8 index);` - -[:arrow_up_small:](#) - -
- -## [get_hand_foot_pos_y](#get_hand_foot_pos_y) - -### Lua Example -`local numberValue = get_hand_foot_pos_y(m, index)` - -### Parameters -| Field | Type | -| ----- | ---- | -| m | [MarioState](structs.md#MarioState) | -| index | `integer` | - -### Returns -- `number` - -### C Prototype -`f32 get_hand_foot_pos_y(struct MarioState* m, u8 index);` - -[:arrow_up_small:](#) - -
- -## [get_hand_foot_pos_z](#get_hand_foot_pos_z) - -### Lua Example -`local numberValue = get_hand_foot_pos_z(m, index)` - -### Parameters -| Field | Type | -| ----- | ---- | -| m | [MarioState](structs.md#MarioState) | -| index | `integer` | - -### Returns -- `number` - -### C Prototype -`f32 get_hand_foot_pos_z(struct MarioState* m, u8 index);` - -[:arrow_up_small:](#) - -
- -## [get_last_star_or_key](#get_last_star_or_key) - -### Lua Example -`local integerValue = get_last_star_or_key()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`s32 get_last_star_or_key(void);` - -[:arrow_up_small:](#) - -
- -## [get_lighting_dir](#get_lighting_dir) - -### Lua Example -`local numberValue = get_lighting_dir(index)` - -### Parameters -| Field | Type | -| ----- | ---- | -| index | `integer` | - -### Returns -- `number` - -### C Prototype -`f32 get_lighting_dir(u8 index);` - -[:arrow_up_small:](#) - -
- -## [get_network_area_timer](#get_network_area_timer) - -### Lua Example -`local integerValue = get_network_area_timer()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u32 get_network_area_timer(void);` - -[:arrow_up_small:](#) - -
- -## [get_os_name](#get_os_name) - -### Lua Example -`local stringValue = get_os_name()` - -### Parameters -- None - -### Returns -- `string` - -### C Prototype -`char* get_os_name(void);` - -[:arrow_up_small:](#) - -
- -## [get_skybox](#get_skybox) - -### Lua Example -`local integerValue = get_skybox()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`s8 get_skybox();` - -[:arrow_up_small:](#) - -
- -## [get_temp_s32_pointer](#get_temp_s32_pointer) - -### Lua Example -`local PointerValue = get_temp_s32_pointer(initialValue)` - -### Parameters -| Field | Type | -| ----- | ---- | -| initialValue | `integer` | - -### Returns -- `Pointer` <`integer`> - -### C Prototype -`s32* get_temp_s32_pointer(s32 initialValue);` - -[:arrow_up_small:](#) - -
- -## [get_time](#get_time) - -### Lua Example -`local integerValue = get_time()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`u32 get_time(void);` - -[:arrow_up_small:](#) - -
- -## [get_ttc_speed_setting](#get_ttc_speed_setting) - -### Lua Example -`local integerValue = get_ttc_speed_setting()` - -### Parameters -- None - -### Returns -- `integer` - -### C Prototype -`s16 get_ttc_speed_setting();` - -[:arrow_up_small:](#) - -
- -## [hud_get_value](#hud_get_value) - -### Lua Example -`local integerValue = hud_get_value(type)` - -### Parameters -| Field | Type | -| ----- | ---- | -| type | [enum HudDisplayValue](constants.md#enum-HudDisplayValue) | - -### Returns -- `integer` - -### C Prototype -`s32 hud_get_value(enum HudDisplayValue type);` - -[:arrow_up_small:](#) - -
- -## [hud_hide](#hud_hide) - -### Lua Example -`hud_hide()` - -### Parameters -- None - -### Returns -- None - -### C Prototype -`void hud_hide(void);` - -[:arrow_up_small:](#) - -
- -## [hud_is_hidden](#hud_is_hidden) - -### Lua Example -`local booleanValue = hud_is_hidden()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool hud_is_hidden(void);` - -[:arrow_up_small:](#) - -
- -## [hud_render_power_meter](#hud_render_power_meter) - -### Lua Example -`hud_render_power_meter(health, x, y, width, height)` - -### Parameters -| Field | Type | -| ----- | ---- | -| health | `integer` | -| x | `number` | -| y | `number` | -| width | `number` | -| height | `number` | - -### Returns -- None - -### C Prototype -`void hud_render_power_meter(s32 health, f32 x, f32 y, f32 width, f32 height);` - -[:arrow_up_small:](#) - -
- -## [hud_render_power_meter_interpolated](#hud_render_power_meter_interpolated) - -### Lua Example -`hud_render_power_meter_interpolated(health, prevX, prevY, prevWidth, prevHeight, x, y, width, height)` - -### Parameters -| Field | Type | -| ----- | ---- | -| health | `integer` | -| prevX | `number` | -| prevY | `number` | -| prevWidth | `number` | -| prevHeight | `number` | -| x | `number` | -| y | `number` | -| width | `number` | -| height | `number` | - -### Returns -- None - -### C Prototype -`void hud_render_power_meter_interpolated(s32 health, f32 prevX, f32 prevY, f32 prevWidth, f32 prevHeight, f32 x, f32 y, f32 width, f32 height);` - -[:arrow_up_small:](#) - -
- -## [hud_set_value](#hud_set_value) - -### Lua Example -`hud_set_value(type, value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| type | [enum HudDisplayValue](constants.md#enum-HudDisplayValue) | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void hud_set_value(enum HudDisplayValue type, s32 value);` - -[:arrow_up_small:](#) - -
- -## [hud_show](#hud_show) - -### Lua Example -`hud_show()` - -### Parameters -- None - -### Returns -- None - -### C Prototype -`void hud_show(void);` - -[:arrow_up_small:](#) - -
- -## [is_game_paused](#is_game_paused) - -### Lua Example -`local booleanValue = is_game_paused()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool is_game_paused(void);` - -[:arrow_up_small:](#) - -
- -## [is_transition_playing](#is_transition_playing) - -### Lua Example -`local booleanValue = is_transition_playing()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool is_transition_playing(void);` - -[:arrow_up_small:](#) - -
- -## [movtexqc_register](#movtexqc_register) - -### Lua Example -`movtexqc_register(name, level, area, type)` - -### Parameters -| Field | Type | -| ----- | ---- | -| name | `string` | -| level | `integer` | -| area | `integer` | -| type | `integer` | - -### Returns -- None - -### C Prototype -`void movtexqc_register(const char* name, s16 level, s16 area, s16 type);` - -[:arrow_up_small:](#) - -
- -## [play_transition](#play_transition) - -### Lua Example -`play_transition(transType, time, red, green, blue)` - -### Parameters -| Field | Type | -| ----- | ---- | -| transType | `integer` | -| time | `integer` | -| red | `integer` | -| green | `integer` | -| blue | `integer` | - -### Returns -- None - -### C Prototype -`void play_transition(s16 transType, s16 time, u8 red, u8 green, u8 blue);` - -[:arrow_up_small:](#) - -
- -## [save_file_set_using_backup_slot](#save_file_set_using_backup_slot) - -### Lua Example -`save_file_set_using_backup_slot(usingBackupSlot)` - -### Parameters -| Field | Type | -| ----- | ---- | -| usingBackupSlot | `boolean` | - -### Returns -- None - -### C Prototype -`void save_file_set_using_backup_slot(bool usingBackupSlot);` - -[:arrow_up_small:](#) - -
- -## [set_environment_region](#set_environment_region) - -### Lua Example -`set_environment_region(index, value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| index | `integer` | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void set_environment_region(u8 index, s32 value);` - -[:arrow_up_small:](#) - -
- -## [set_last_star_or_key](#set_last_star_or_key) - -### Lua Example -`set_last_star_or_key(value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| value | `integer` | - -### Returns -- None - -### C Prototype -`void set_last_star_or_key(u8 value);` - -[:arrow_up_small:](#) - -
- -## [set_lighting_dir](#set_lighting_dir) - -### Lua Example -`set_lighting_dir(index, value)` - -### Parameters -| Field | Type | -| ----- | ---- | -| index | `integer` | -| value | `number` | - -### Returns -- None - -### C Prototype -`void set_lighting_dir(u8 index, f32 value);` - -[:arrow_up_small:](#) - -
- -## [set_override_envfx](#set_override_envfx) - -### Lua Example -`set_override_envfx(envfx)` - -### Parameters -| Field | Type | -| ----- | ---- | -| envfx | `integer` | - -### Returns -- None - -### C Prototype -`void set_override_envfx(s32 envfx);` - -[:arrow_up_small:](#) - -
- -## [set_override_far](#set_override_far) - -### Lua Example -`set_override_far(far)` - -### Parameters -| Field | Type | -| ----- | ---- | -| far | `number` | - -### Returns -- None - -### C Prototype -`void set_override_far(f32 far);` - -[:arrow_up_small:](#) - -
- -## [set_override_fov](#set_override_fov) - -### Lua Example -`set_override_fov(fov)` - -### Parameters -| Field | Type | -| ----- | ---- | -| fov | `number` | - -### Returns -- None - -### C Prototype -`void set_override_fov(f32 fov);` - -[:arrow_up_small:](#) - -
- -## [set_override_near](#set_override_near) - -### Lua Example -`set_override_near(near)` - -### Parameters -| Field | Type | -| ----- | ---- | -| near | `number` | - -### Returns -- None - -### C Prototype -`void set_override_near(f32 near);` - -[:arrow_up_small:](#) - -
- -## [set_override_skybox](#set_override_skybox) - -### Lua Example -`set_override_skybox(background)` - -### Parameters -| Field | Type | -| ----- | ---- | -| background | `integer` | - -### Returns -- None - -### C Prototype -`void set_override_skybox(s8 background);` - -[:arrow_up_small:](#) - -
- -## [set_ttc_speed_setting](#set_ttc_speed_setting) - -### Lua Example -`set_ttc_speed_setting(speed)` - -### Parameters -| Field | Type | -| ----- | ---- | -| speed | `integer` | - -### Returns -- None - -### C Prototype -`void set_ttc_speed_setting(s16 speed);` - -[:arrow_up_small:](#) - -
- ---- -# functions from smlua_model_utils.h - -
- - -## [smlua_model_util_get_id](#smlua_model_util_get_id) - -### Lua Example -`local integerValue = smlua_model_util_get_id(name)` - -### Parameters -| Field | Type | -| ----- | ---- | -| name | `string` | - -### Returns -- `integer` - -### C Prototype -`u32 smlua_model_util_get_id(const char* name);` - -[:arrow_up_small:](#) -
--- diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 787b3de6..6910d378 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -5,6 +5,1290 @@ [< prev](functions-4.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | 5] +--- +# functions from smlua_misc_utils.h + +
+ + +## [add_scroll_target](#add_scroll_target) + +### Lua Example +`add_scroll_target(index, name, offset, size)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | +| name | `string` | +| offset | `integer` | +| size | `integer` | + +### Returns +- None + +### C Prototype +`void add_scroll_target(u32 index, const char* name, u32 offset, u32 size);` + +[:arrow_up_small:](#) + +
+ +## [allocate_mario_action](#allocate_mario_action) + +### Lua Example +`local integerValue = allocate_mario_action(actFlags)` + +### Parameters +| Field | Type | +| ----- | ---- | +| actFlags | `integer` | + +### Returns +- `integer` + +### C Prototype +`u32 allocate_mario_action(u32 actFlags);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_enable_analog_cam](#camera_config_enable_analog_cam) + +### Lua Example +`camera_config_enable_analog_cam(enable)` + +### Parameters +| Field | Type | +| ----- | ---- | +| enable | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_enable_analog_cam(bool enable);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_enable_free_cam](#camera_config_enable_free_cam) + +### Lua Example +`camera_config_enable_free_cam(enable)` + +### Parameters +| Field | Type | +| ----- | ---- | +| enable | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_enable_free_cam(bool enable);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_enable_mouse_look](#camera_config_enable_mouse_look) + +### Lua Example +`camera_config_enable_mouse_look(enable)` + +### Parameters +| Field | Type | +| ----- | ---- | +| enable | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_enable_mouse_look(bool enable);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_get_aggression](#camera_config_get_aggression) + +### Lua Example +`local integerValue = camera_config_get_aggression()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_config_get_aggression(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_get_deceleration](#camera_config_get_deceleration) + +### Lua Example +`local integerValue = camera_config_get_deceleration()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_config_get_deceleration(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_get_pan_level](#camera_config_get_pan_level) + +### Lua Example +`local integerValue = camera_config_get_pan_level()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_config_get_pan_level(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_get_x_sensitivity](#camera_config_get_x_sensitivity) + +### Lua Example +`local integerValue = camera_config_get_x_sensitivity()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_config_get_x_sensitivity(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_get_y_sensitivity](#camera_config_get_y_sensitivity) + +### Lua Example +`local integerValue = camera_config_get_y_sensitivity()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_config_get_y_sensitivity(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_invert_x](#camera_config_invert_x) + +### Lua Example +`camera_config_invert_x(invert)` + +### Parameters +| Field | Type | +| ----- | ---- | +| invert | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_invert_x(bool invert);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_invert_y](#camera_config_invert_y) + +### Lua Example +`camera_config_invert_y(invert)` + +### Parameters +| Field | Type | +| ----- | ---- | +| invert | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_invert_y(bool invert);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_is_analog_cam_enabled](#camera_config_is_analog_cam_enabled) + +### Lua Example +`local booleanValue = camera_config_is_analog_cam_enabled()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_analog_cam_enabled(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_is_free_cam_enabled](#camera_config_is_free_cam_enabled) + +### Lua Example +`local booleanValue = camera_config_is_free_cam_enabled()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_free_cam_enabled(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_is_mouse_look_enabled](#camera_config_is_mouse_look_enabled) + +### Lua Example +`local booleanValue = camera_config_is_mouse_look_enabled()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_mouse_look_enabled(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_is_x_inverted](#camera_config_is_x_inverted) + +### Lua Example +`local booleanValue = camera_config_is_x_inverted()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_x_inverted(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_is_y_inverted](#camera_config_is_y_inverted) + +### Lua Example +`local booleanValue = camera_config_is_y_inverted()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_y_inverted(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_set_aggression](#camera_config_set_aggression) + +### Lua Example +`camera_config_set_aggression(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void camera_config_set_aggression(u32 value);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_set_deceleration](#camera_config_set_deceleration) + +### Lua Example +`camera_config_set_deceleration(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void camera_config_set_deceleration(u32 value);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_set_pan_level](#camera_config_set_pan_level) + +### Lua Example +`camera_config_set_pan_level(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void camera_config_set_pan_level(u32 value);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_set_x_sensitivity](#camera_config_set_x_sensitivity) + +### Lua Example +`camera_config_set_x_sensitivity(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void camera_config_set_x_sensitivity(u32 value);` + +[:arrow_up_small:](#) + +
+ +## [camera_config_set_y_sensitivity](#camera_config_set_y_sensitivity) + +### Lua Example +`camera_config_set_y_sensitivity(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void camera_config_set_y_sensitivity(u32 value);` + +[:arrow_up_small:](#) + +
+ +## [camera_freeze](#camera_freeze) + +### Lua Example +`camera_freeze()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void camera_freeze(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_is_frozen](#camera_is_frozen) + +### Lua Example +`local booleanValue = camera_is_frozen()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_is_frozen(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_unfreeze](#camera_unfreeze) + +### Lua Example +`camera_unfreeze()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void camera_unfreeze(void);` + +[:arrow_up_small:](#) + +
+ +## [course_is_main_course](#course_is_main_course) + +### Lua Example +`local booleanValue = course_is_main_course(courseNum)` + +### Parameters +| Field | Type | +| ----- | ---- | +| courseNum | `integer` | + +### Returns +- `boolean` + +### C Prototype +`bool course_is_main_course(u16 courseNum);` + +[:arrow_up_small:](#) + +
+ +## [deref_s32_pointer](#deref_s32_pointer) + +### Lua Example +`local integerValue = deref_s32_pointer(pointer)` + +### Parameters +| Field | Type | +| ----- | ---- | +| pointer | `Pointer` <`integer`> | + +### Returns +- `integer` + +### C Prototype +`s32 deref_s32_pointer(s32* pointer);` + +[:arrow_up_small:](#) + +
+ +## [get_current_save_file_num](#get_current_save_file_num) + +### Lua Example +`local integerValue = get_current_save_file_num()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`s16 get_current_save_file_num(void);` + +[:arrow_up_small:](#) + +
+ +## [get_dialog_box_state](#get_dialog_box_state) + +### Lua Example +`local integerValue = get_dialog_box_state()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`s8 get_dialog_box_state();` + +[:arrow_up_small:](#) + +
+ +## [get_dialog_id](#get_dialog_id) + +### Lua Example +`local integerValue = get_dialog_id()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`s16 get_dialog_id(void);` + +[:arrow_up_small:](#) + +
+ +## [get_envfx](#get_envfx) + +### Lua Example +`local integerValue = get_envfx()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u16 get_envfx(void);` + +[:arrow_up_small:](#) + +
+ +## [get_environment_region](#get_environment_region) + +### Lua Example +`local numberValue = get_environment_region(index)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | + +### Returns +- `number` + +### C Prototype +`f32 get_environment_region(u8 index);` + +[:arrow_up_small:](#) + +
+ +## [get_hand_foot_pos_x](#get_hand_foot_pos_x) + +### Lua Example +`local numberValue = get_hand_foot_pos_x(m, index)` + +### Parameters +| Field | Type | +| ----- | ---- | +| m | [MarioState](structs.md#MarioState) | +| index | `integer` | + +### Returns +- `number` + +### C Prototype +`f32 get_hand_foot_pos_x(struct MarioState* m, u8 index);` + +[:arrow_up_small:](#) + +
+ +## [get_hand_foot_pos_y](#get_hand_foot_pos_y) + +### Lua Example +`local numberValue = get_hand_foot_pos_y(m, index)` + +### Parameters +| Field | Type | +| ----- | ---- | +| m | [MarioState](structs.md#MarioState) | +| index | `integer` | + +### Returns +- `number` + +### C Prototype +`f32 get_hand_foot_pos_y(struct MarioState* m, u8 index);` + +[:arrow_up_small:](#) + +
+ +## [get_hand_foot_pos_z](#get_hand_foot_pos_z) + +### Lua Example +`local numberValue = get_hand_foot_pos_z(m, index)` + +### Parameters +| Field | Type | +| ----- | ---- | +| m | [MarioState](structs.md#MarioState) | +| index | `integer` | + +### Returns +- `number` + +### C Prototype +`f32 get_hand_foot_pos_z(struct MarioState* m, u8 index);` + +[:arrow_up_small:](#) + +
+ +## [get_last_star_or_key](#get_last_star_or_key) + +### Lua Example +`local integerValue = get_last_star_or_key()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`s32 get_last_star_or_key(void);` + +[:arrow_up_small:](#) + +
+ +## [get_lighting_dir](#get_lighting_dir) + +### Lua Example +`local numberValue = get_lighting_dir(index)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | + +### Returns +- `number` + +### C Prototype +`f32 get_lighting_dir(u8 index);` + +[:arrow_up_small:](#) + +
+ +## [get_network_area_timer](#get_network_area_timer) + +### Lua Example +`local integerValue = get_network_area_timer()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 get_network_area_timer(void);` + +[:arrow_up_small:](#) + +
+ +## [get_os_name](#get_os_name) + +### Lua Example +`local stringValue = get_os_name()` + +### Parameters +- None + +### Returns +- `string` + +### C Prototype +`char* get_os_name(void);` + +[:arrow_up_small:](#) + +
+ +## [get_skybox](#get_skybox) + +### Lua Example +`local integerValue = get_skybox()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`s8 get_skybox();` + +[:arrow_up_small:](#) + +
+ +## [get_temp_s32_pointer](#get_temp_s32_pointer) + +### Lua Example +`local PointerValue = get_temp_s32_pointer(initialValue)` + +### Parameters +| Field | Type | +| ----- | ---- | +| initialValue | `integer` | + +### Returns +- `Pointer` <`integer`> + +### C Prototype +`s32* get_temp_s32_pointer(s32 initialValue);` + +[:arrow_up_small:](#) + +
+ +## [get_time](#get_time) + +### Lua Example +`local integerValue = get_time()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 get_time(void);` + +[:arrow_up_small:](#) + +
+ +## [get_ttc_speed_setting](#get_ttc_speed_setting) + +### Lua Example +`local integerValue = get_ttc_speed_setting()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`s16 get_ttc_speed_setting();` + +[:arrow_up_small:](#) + +
+ +## [hud_get_value](#hud_get_value) + +### Lua Example +`local integerValue = hud_get_value(type)` + +### Parameters +| Field | Type | +| ----- | ---- | +| type | [enum HudDisplayValue](constants.md#enum-HudDisplayValue) | + +### Returns +- `integer` + +### C Prototype +`s32 hud_get_value(enum HudDisplayValue type);` + +[:arrow_up_small:](#) + +
+ +## [hud_hide](#hud_hide) + +### Lua Example +`hud_hide()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void hud_hide(void);` + +[:arrow_up_small:](#) + +
+ +## [hud_is_hidden](#hud_is_hidden) + +### Lua Example +`local booleanValue = hud_is_hidden()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool hud_is_hidden(void);` + +[:arrow_up_small:](#) + +
+ +## [hud_render_power_meter](#hud_render_power_meter) + +### Lua Example +`hud_render_power_meter(health, x, y, width, height)` + +### Parameters +| Field | Type | +| ----- | ---- | +| health | `integer` | +| x | `number` | +| y | `number` | +| width | `number` | +| height | `number` | + +### Returns +- None + +### C Prototype +`void hud_render_power_meter(s32 health, f32 x, f32 y, f32 width, f32 height);` + +[:arrow_up_small:](#) + +
+ +## [hud_render_power_meter_interpolated](#hud_render_power_meter_interpolated) + +### Lua Example +`hud_render_power_meter_interpolated(health, prevX, prevY, prevWidth, prevHeight, x, y, width, height)` + +### Parameters +| Field | Type | +| ----- | ---- | +| health | `integer` | +| prevX | `number` | +| prevY | `number` | +| prevWidth | `number` | +| prevHeight | `number` | +| x | `number` | +| y | `number` | +| width | `number` | +| height | `number` | + +### Returns +- None + +### C Prototype +`void hud_render_power_meter_interpolated(s32 health, f32 prevX, f32 prevY, f32 prevWidth, f32 prevHeight, f32 x, f32 y, f32 width, f32 height);` + +[:arrow_up_small:](#) + +
+ +## [hud_set_value](#hud_set_value) + +### Lua Example +`hud_set_value(type, value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| type | [enum HudDisplayValue](constants.md#enum-HudDisplayValue) | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void hud_set_value(enum HudDisplayValue type, s32 value);` + +[:arrow_up_small:](#) + +
+ +## [hud_show](#hud_show) + +### Lua Example +`hud_show()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void hud_show(void);` + +[:arrow_up_small:](#) + +
+ +## [is_game_paused](#is_game_paused) + +### Lua Example +`local booleanValue = is_game_paused()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool is_game_paused(void);` + +[:arrow_up_small:](#) + +
+ +## [is_transition_playing](#is_transition_playing) + +### Lua Example +`local booleanValue = is_transition_playing()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool is_transition_playing(void);` + +[:arrow_up_small:](#) + +
+ +## [movtexqc_register](#movtexqc_register) + +### Lua Example +`movtexqc_register(name, level, area, type)` + +### Parameters +| Field | Type | +| ----- | ---- | +| name | `string` | +| level | `integer` | +| area | `integer` | +| type | `integer` | + +### Returns +- None + +### C Prototype +`void movtexqc_register(const char* name, s16 level, s16 area, s16 type);` + +[:arrow_up_small:](#) + +
+ +## [play_transition](#play_transition) + +### Lua Example +`play_transition(transType, time, red, green, blue)` + +### Parameters +| Field | Type | +| ----- | ---- | +| transType | `integer` | +| time | `integer` | +| red | `integer` | +| green | `integer` | +| blue | `integer` | + +### Returns +- None + +### C Prototype +`void play_transition(s16 transType, s16 time, u8 red, u8 green, u8 blue);` + +[:arrow_up_small:](#) + +
+ +## [save_file_set_using_backup_slot](#save_file_set_using_backup_slot) + +### Lua Example +`save_file_set_using_backup_slot(usingBackupSlot)` + +### Parameters +| Field | Type | +| ----- | ---- | +| usingBackupSlot | `boolean` | + +### Returns +- None + +### C Prototype +`void save_file_set_using_backup_slot(bool usingBackupSlot);` + +[:arrow_up_small:](#) + +
+ +## [set_environment_region](#set_environment_region) + +### Lua Example +`set_environment_region(index, value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void set_environment_region(u8 index, s32 value);` + +[:arrow_up_small:](#) + +
+ +## [set_last_star_or_key](#set_last_star_or_key) + +### Lua Example +`set_last_star_or_key(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void set_last_star_or_key(u8 value);` + +[:arrow_up_small:](#) + +
+ +## [set_lighting_dir](#set_lighting_dir) + +### Lua Example +`set_lighting_dir(index, value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | +| value | `number` | + +### Returns +- None + +### C Prototype +`void set_lighting_dir(u8 index, f32 value);` + +[:arrow_up_small:](#) + +
+ +## [set_override_envfx](#set_override_envfx) + +### Lua Example +`set_override_envfx(envfx)` + +### Parameters +| Field | Type | +| ----- | ---- | +| envfx | `integer` | + +### Returns +- None + +### C Prototype +`void set_override_envfx(s32 envfx);` + +[:arrow_up_small:](#) + +
+ +## [set_override_far](#set_override_far) + +### Lua Example +`set_override_far(far)` + +### Parameters +| Field | Type | +| ----- | ---- | +| far | `number` | + +### Returns +- None + +### C Prototype +`void set_override_far(f32 far);` + +[:arrow_up_small:](#) + +
+ +## [set_override_fov](#set_override_fov) + +### Lua Example +`set_override_fov(fov)` + +### Parameters +| Field | Type | +| ----- | ---- | +| fov | `number` | + +### Returns +- None + +### C Prototype +`void set_override_fov(f32 fov);` + +[:arrow_up_small:](#) + +
+ +## [set_override_near](#set_override_near) + +### Lua Example +`set_override_near(near)` + +### Parameters +| Field | Type | +| ----- | ---- | +| near | `number` | + +### Returns +- None + +### C Prototype +`void set_override_near(f32 near);` + +[:arrow_up_small:](#) + +
+ +## [set_override_skybox](#set_override_skybox) + +### Lua Example +`set_override_skybox(background)` + +### Parameters +| Field | Type | +| ----- | ---- | +| background | `integer` | + +### Returns +- None + +### C Prototype +`void set_override_skybox(s8 background);` + +[:arrow_up_small:](#) + +
+ +## [set_ttc_speed_setting](#set_ttc_speed_setting) + +### Lua Example +`set_ttc_speed_setting(speed)` + +### Parameters +| Field | Type | +| ----- | ---- | +| speed | `integer` | + +### Returns +- None + +### C Prototype +`void set_ttc_speed_setting(s16 speed);` + +[:arrow_up_small:](#) + +
+ +--- +# functions from smlua_model_utils.h + +
+ + +## [smlua_model_util_get_id](#smlua_model_util_get_id) + +### Lua Example +`local integerValue = smlua_model_util_get_id(name)` + +### Parameters +| Field | Type | +| ----- | ---- | +| name | `string` | + +### Returns +- `integer` + +### C Prototype +`u32 smlua_model_util_get_id(const char* name);` + +[:arrow_up_small:](#) + +
+ --- # functions from smlua_obj_utils.h diff --git a/docs/lua/functions.md b/docs/lua/functions.md index fbfaef7a..2c79d0ca 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -1459,6 +1459,12 @@
+- smlua_anim_utils.h + - [smlua_anim_util_get_current_animation_name](functions-4.md#smlua_anim_util_get_current_animation_name) + - [smlua_anim_util_set_animation](functions-4.md#smlua_anim_util_set_animation) + +
+ - smlua_audio_utils.h - [audio_sample_destroy](functions-4.md#audio_sample_destroy) - [audio_sample_load](functions-4.md#audio_sample_load) @@ -1524,75 +1530,75 @@
- smlua_misc_utils.h - - [add_scroll_target](functions-4.md#add_scroll_target) - - [allocate_mario_action](functions-4.md#allocate_mario_action) - - [camera_config_enable_analog_cam](functions-4.md#camera_config_enable_analog_cam) - - [camera_config_enable_free_cam](functions-4.md#camera_config_enable_free_cam) - - [camera_config_enable_mouse_look](functions-4.md#camera_config_enable_mouse_look) - - [camera_config_get_aggression](functions-4.md#camera_config_get_aggression) - - [camera_config_get_deceleration](functions-4.md#camera_config_get_deceleration) - - [camera_config_get_pan_level](functions-4.md#camera_config_get_pan_level) - - [camera_config_get_x_sensitivity](functions-4.md#camera_config_get_x_sensitivity) - - [camera_config_get_y_sensitivity](functions-4.md#camera_config_get_y_sensitivity) - - [camera_config_invert_x](functions-4.md#camera_config_invert_x) - - [camera_config_invert_y](functions-4.md#camera_config_invert_y) - - [camera_config_is_analog_cam_enabled](functions-4.md#camera_config_is_analog_cam_enabled) - - [camera_config_is_free_cam_enabled](functions-4.md#camera_config_is_free_cam_enabled) - - [camera_config_is_mouse_look_enabled](functions-4.md#camera_config_is_mouse_look_enabled) - - [camera_config_is_x_inverted](functions-4.md#camera_config_is_x_inverted) - - [camera_config_is_y_inverted](functions-4.md#camera_config_is_y_inverted) - - [camera_config_set_aggression](functions-4.md#camera_config_set_aggression) - - [camera_config_set_deceleration](functions-4.md#camera_config_set_deceleration) - - [camera_config_set_pan_level](functions-4.md#camera_config_set_pan_level) - - [camera_config_set_x_sensitivity](functions-4.md#camera_config_set_x_sensitivity) - - [camera_config_set_y_sensitivity](functions-4.md#camera_config_set_y_sensitivity) - - [camera_freeze](functions-4.md#camera_freeze) - - [camera_is_frozen](functions-4.md#camera_is_frozen) - - [camera_unfreeze](functions-4.md#camera_unfreeze) - - [course_is_main_course](functions-4.md#course_is_main_course) - - [deref_s32_pointer](functions-4.md#deref_s32_pointer) - - [get_current_save_file_num](functions-4.md#get_current_save_file_num) - - [get_dialog_box_state](functions-4.md#get_dialog_box_state) - - [get_dialog_id](functions-4.md#get_dialog_id) - - [get_envfx](functions-4.md#get_envfx) - - [get_environment_region](functions-4.md#get_environment_region) - - [get_hand_foot_pos_x](functions-4.md#get_hand_foot_pos_x) - - [get_hand_foot_pos_y](functions-4.md#get_hand_foot_pos_y) - - [get_hand_foot_pos_z](functions-4.md#get_hand_foot_pos_z) - - [get_last_star_or_key](functions-4.md#get_last_star_or_key) - - [get_lighting_dir](functions-4.md#get_lighting_dir) - - [get_network_area_timer](functions-4.md#get_network_area_timer) - - [get_os_name](functions-4.md#get_os_name) - - [get_skybox](functions-4.md#get_skybox) - - [get_temp_s32_pointer](functions-4.md#get_temp_s32_pointer) - - [get_time](functions-4.md#get_time) - - [get_ttc_speed_setting](functions-4.md#get_ttc_speed_setting) - - [hud_get_value](functions-4.md#hud_get_value) - - [hud_hide](functions-4.md#hud_hide) - - [hud_is_hidden](functions-4.md#hud_is_hidden) - - [hud_render_power_meter](functions-4.md#hud_render_power_meter) - - [hud_render_power_meter_interpolated](functions-4.md#hud_render_power_meter_interpolated) - - [hud_set_value](functions-4.md#hud_set_value) - - [hud_show](functions-4.md#hud_show) - - [is_game_paused](functions-4.md#is_game_paused) - - [is_transition_playing](functions-4.md#is_transition_playing) - - [movtexqc_register](functions-4.md#movtexqc_register) - - [play_transition](functions-4.md#play_transition) - - [save_file_set_using_backup_slot](functions-4.md#save_file_set_using_backup_slot) - - [set_environment_region](functions-4.md#set_environment_region) - - [set_last_star_or_key](functions-4.md#set_last_star_or_key) - - [set_lighting_dir](functions-4.md#set_lighting_dir) - - [set_override_envfx](functions-4.md#set_override_envfx) - - [set_override_far](functions-4.md#set_override_far) - - [set_override_fov](functions-4.md#set_override_fov) - - [set_override_near](functions-4.md#set_override_near) - - [set_override_skybox](functions-4.md#set_override_skybox) - - [set_ttc_speed_setting](functions-4.md#set_ttc_speed_setting) + - [add_scroll_target](functions-5.md#add_scroll_target) + - [allocate_mario_action](functions-5.md#allocate_mario_action) + - [camera_config_enable_analog_cam](functions-5.md#camera_config_enable_analog_cam) + - [camera_config_enable_free_cam](functions-5.md#camera_config_enable_free_cam) + - [camera_config_enable_mouse_look](functions-5.md#camera_config_enable_mouse_look) + - [camera_config_get_aggression](functions-5.md#camera_config_get_aggression) + - [camera_config_get_deceleration](functions-5.md#camera_config_get_deceleration) + - [camera_config_get_pan_level](functions-5.md#camera_config_get_pan_level) + - [camera_config_get_x_sensitivity](functions-5.md#camera_config_get_x_sensitivity) + - [camera_config_get_y_sensitivity](functions-5.md#camera_config_get_y_sensitivity) + - [camera_config_invert_x](functions-5.md#camera_config_invert_x) + - [camera_config_invert_y](functions-5.md#camera_config_invert_y) + - [camera_config_is_analog_cam_enabled](functions-5.md#camera_config_is_analog_cam_enabled) + - [camera_config_is_free_cam_enabled](functions-5.md#camera_config_is_free_cam_enabled) + - [camera_config_is_mouse_look_enabled](functions-5.md#camera_config_is_mouse_look_enabled) + - [camera_config_is_x_inverted](functions-5.md#camera_config_is_x_inverted) + - [camera_config_is_y_inverted](functions-5.md#camera_config_is_y_inverted) + - [camera_config_set_aggression](functions-5.md#camera_config_set_aggression) + - [camera_config_set_deceleration](functions-5.md#camera_config_set_deceleration) + - [camera_config_set_pan_level](functions-5.md#camera_config_set_pan_level) + - [camera_config_set_x_sensitivity](functions-5.md#camera_config_set_x_sensitivity) + - [camera_config_set_y_sensitivity](functions-5.md#camera_config_set_y_sensitivity) + - [camera_freeze](functions-5.md#camera_freeze) + - [camera_is_frozen](functions-5.md#camera_is_frozen) + - [camera_unfreeze](functions-5.md#camera_unfreeze) + - [course_is_main_course](functions-5.md#course_is_main_course) + - [deref_s32_pointer](functions-5.md#deref_s32_pointer) + - [get_current_save_file_num](functions-5.md#get_current_save_file_num) + - [get_dialog_box_state](functions-5.md#get_dialog_box_state) + - [get_dialog_id](functions-5.md#get_dialog_id) + - [get_envfx](functions-5.md#get_envfx) + - [get_environment_region](functions-5.md#get_environment_region) + - [get_hand_foot_pos_x](functions-5.md#get_hand_foot_pos_x) + - [get_hand_foot_pos_y](functions-5.md#get_hand_foot_pos_y) + - [get_hand_foot_pos_z](functions-5.md#get_hand_foot_pos_z) + - [get_last_star_or_key](functions-5.md#get_last_star_or_key) + - [get_lighting_dir](functions-5.md#get_lighting_dir) + - [get_network_area_timer](functions-5.md#get_network_area_timer) + - [get_os_name](functions-5.md#get_os_name) + - [get_skybox](functions-5.md#get_skybox) + - [get_temp_s32_pointer](functions-5.md#get_temp_s32_pointer) + - [get_time](functions-5.md#get_time) + - [get_ttc_speed_setting](functions-5.md#get_ttc_speed_setting) + - [hud_get_value](functions-5.md#hud_get_value) + - [hud_hide](functions-5.md#hud_hide) + - [hud_is_hidden](functions-5.md#hud_is_hidden) + - [hud_render_power_meter](functions-5.md#hud_render_power_meter) + - [hud_render_power_meter_interpolated](functions-5.md#hud_render_power_meter_interpolated) + - [hud_set_value](functions-5.md#hud_set_value) + - [hud_show](functions-5.md#hud_show) + - [is_game_paused](functions-5.md#is_game_paused) + - [is_transition_playing](functions-5.md#is_transition_playing) + - [movtexqc_register](functions-5.md#movtexqc_register) + - [play_transition](functions-5.md#play_transition) + - [save_file_set_using_backup_slot](functions-5.md#save_file_set_using_backup_slot) + - [set_environment_region](functions-5.md#set_environment_region) + - [set_last_star_or_key](functions-5.md#set_last_star_or_key) + - [set_lighting_dir](functions-5.md#set_lighting_dir) + - [set_override_envfx](functions-5.md#set_override_envfx) + - [set_override_far](functions-5.md#set_override_far) + - [set_override_fov](functions-5.md#set_override_fov) + - [set_override_near](functions-5.md#set_override_near) + - [set_override_skybox](functions-5.md#set_override_skybox) + - [set_ttc_speed_setting](functions-5.md#set_ttc_speed_setting)
- smlua_model_utils.h - - [smlua_model_util_get_id](functions-4.md#smlua_model_util_get_id) + - [smlua_model_util_get_id](functions-5.md#smlua_model_util_get_id)
diff --git a/src/pc/lua/smlua.c b/src/pc/lua/smlua.c index 9c9c27d5..2e0bd462 100644 --- a/src/pc/lua/smlua.c +++ b/src/pc/lua/smlua.c @@ -7,6 +7,7 @@ #include "pc/lua/utils/smlua_audio_utils.h" #include "pc/lua/utils/smlua_model_utils.h" #include "pc/lua/utils/smlua_level_utils.h" +#include "pc/lua/utils/smlua_anim_utils.h" #include "pc/djui/djui.h" lua_State* gLuaState = NULL; @@ -198,6 +199,7 @@ void smlua_shutdown(void) { smlua_clear_hooks(); smlua_model_util_reset(); smlua_level_util_reset(); + smlua_anim_util_reset(); lua_State* L = gLuaState; if (L != NULL) { lua_close(L); diff --git a/src/pc/lua/smlua_functions.c b/src/pc/lua/smlua_functions.c index 2cc491c4..3af72eb4 100644 --- a/src/pc/lua/smlua_functions.c +++ b/src/pc/lua/smlua_functions.c @@ -13,6 +13,7 @@ #include "pc/djui/djui_hud_utils.h" #include "include/level_misc_macros.h" #include "include/macro_presets.h" +#include "utils/smlua_anim_utils.h" bool smlua_functions_valid_param_count(lua_State* L, int expected) { int top = lua_gettop(L); @@ -647,6 +648,69 @@ void smlua_func_level_script_parse(lua_State* L) { gLevelScriptModIndex = currModIndex; } + /////////////////////// + // custom animations // +/////////////////////// + +static u16 *smlua_to_u16_list(lua_State* L, int index) { + + // Get number of values + s32 length = lua_rawlen(L, index); + if (!length) { LOG_LUA("smlua_to_u16_list: Table must not be empty"); return NULL; } + u16 *values = calloc(length, sizeof(u16)); + + // Retrieve values + lua_pushnil(L); + s32 top = lua_gettop(L); + while (lua_next(L, index) != 0) { + int indexKey = lua_gettop(L) - 1; + int indexValue = lua_gettop(L) - 0; + + s32 key = smlua_to_integer(L, indexKey); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_to_u16_list: Failed to convert table key"); return 0; } + + u16 value = smlua_to_integer(L, indexValue); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_to_u16_list: Failed to convert table value"); return 0; } + + values[key - 1] = value; + lua_settop(L, top); + } + lua_settop(L, top); + return values; +} + +int smlua_func_smlua_anim_util_register_animation(lua_State* L) { + if (!smlua_functions_valid_param_count(L, 8)) { return 0; } + + const char *name = smlua_to_string(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'name'"); return 0; } + + s16 flags = smlua_to_integer(L, 2); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'flags'"); return 0; } + + s16 animYTransDivisor = smlua_to_integer(L, 3); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'animYTransDivisor'"); return 0; } + + s16 startFrame = smlua_to_integer(L, 4); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'startFrame'"); return 0; } + + s16 loopStart = smlua_to_integer(L, 5); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'loopStart'"); return 0; } + + s16 loopEnd = smlua_to_integer(L, 6); + if (!gSmLuaConvertSuccess) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'loopEnd'"); return 0; } + + s16 *values = (s16 *) smlua_to_u16_list(L, 7); + if (!values) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'values'"); return 0; } + + u16 *index = (u16 *) smlua_to_u16_list(L, 8); + if (!index) { LOG_LUA("smlua_anim_util_register_animation: Failed to convert parameter 'index'"); return 0; } + + smlua_anim_util_register_animation(name, flags, animYTransDivisor, startFrame, loopStart, loopEnd, values, index); + + return 1; +} + ////////// // bind // ////////// @@ -671,4 +735,5 @@ void smlua_bind_functions(void) { smlua_bind_function(L, "djui_hud_render_texture_interpolated", smlua_func_djui_hud_render_texture_interpolated); smlua_bind_function(L, "djui_hud_render_texture_tile_interpolated", smlua_func_djui_hud_render_texture_tile_interpolated); smlua_bind_function(L, "level_script_parse", smlua_func_level_script_parse); + smlua_bind_function(L, "smlua_anim_util_register_animation", smlua_func_smlua_anim_util_register_animation); } diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index af1517a1..ac697a1f 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -30,6 +30,7 @@ #include "src/pc/lua/utils/smlua_text_utils.h" #include "src/pc/lua/utils/smlua_audio_utils.h" #include "src/pc/lua/utils/smlua_level_utils.h" +#include "src/pc/lua/utils/smlua_anim_utils.h" #include "src/pc/lua/utils/smlua_deprecated.h" #include "src/game/object_list_processor.h" #include "src/game/behavior_actions.h" @@ -25850,6 +25851,46 @@ int smlua_func_save_file_set_star_flags(lua_State* L) { return 1; } + //////////////////////// + // smlua_anim_utils.h // +//////////////////////// + +int smlua_func_smlua_anim_util_get_current_animation_name(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 1) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "smlua_anim_util_get_current_animation_name", 1, top); + return 0; + } + + struct Object* obj = (struct Object*)smlua_to_cobject(L, 1, LOT_OBJECT); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "smlua_anim_util_get_current_animation_name"); return 0; } + + lua_pushstring(L, smlua_anim_util_get_current_animation_name(obj)); + + return 1; +} + +int smlua_func_smlua_anim_util_set_animation(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 2) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "smlua_anim_util_set_animation", 2, top); + return 0; + } + + struct Object* obj = (struct Object*)smlua_to_cobject(L, 1, LOT_OBJECT); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "smlua_anim_util_set_animation"); return 0; } + const char* name = smlua_to_string(L, 2); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "smlua_anim_util_set_animation"); return 0; } + + smlua_anim_util_set_animation(obj, name); + + return 1; +} + ///////////////////////// // smlua_audio_utils.h // ///////////////////////// @@ -30705,6 +30746,10 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "save_file_set_flags", smlua_func_save_file_set_flags); smlua_bind_function(L, "save_file_set_star_flags", smlua_func_save_file_set_star_flags); + // smlua_anim_utils.h + smlua_bind_function(L, "smlua_anim_util_get_current_animation_name", smlua_func_smlua_anim_util_get_current_animation_name); + smlua_bind_function(L, "smlua_anim_util_set_animation", smlua_func_smlua_anim_util_set_animation); + // smlua_audio_utils.h smlua_bind_function(L, "audio_sample_destroy", smlua_func_audio_sample_destroy); smlua_bind_function(L, "audio_sample_load", smlua_func_audio_sample_load); diff --git a/src/pc/lua/utils/smlua_anim_utils.c b/src/pc/lua/utils/smlua_anim_utils.c index 851ad49f..271a2f2e 100644 --- a/src/pc/lua/utils/smlua_anim_utils.c +++ b/src/pc/lua/utils/smlua_anim_utils.c @@ -87,3 +87,116 @@ struct GlobalObjectAnimations gGlobalObjectAnimations = { .wiggler_seg5_anims_0500EC8C = (struct Animation**) wiggler_seg5_anims_0500EC8C, .yoshi_seg5_anims_05024100 = (struct Animation**) yoshi_seg5_anims_05024100, }; + + /////////////////////// + // custom animations // +/////////////////////// + +struct CustomAnimation { + const char *name; + struct Animation *anim; + struct CustomAnimation *next; +}; + +struct CustomAnimation* sCustomAnimationHead = NULL; + +static struct CustomAnimation *get_custom_animation_node(const char *name) { + for (struct CustomAnimation *node = sCustomAnimationHead; node; node = node->next) { + if (node->name && strcmp(node->name, name) == 0) { + return node; + } + } + return NULL; +} + +void smlua_anim_util_reset() { + for (struct CustomAnimation *node = sCustomAnimationHead; node;) { + struct CustomAnimation *next = node->next; + if (node->name) { + free((void *) node->name); + } + if (node->anim) { + if (node->anim->index) { + free((void *) node->anim->index); + } + if (node->anim->values) { + free((void *) node->anim->values); + } + } + free(node); + node = next; + } + sCustomAnimationHead = NULL; +} + +void smlua_anim_util_register_animation(const char *name, s16 flags, s16 animYTransDivisor, s16 startFrame, s16 loopStart, s16 loopEnd, const s16 *values, const u16 *index) { + + // NULL-checks + if (!name) { + LOG_LUA_LINE("smlua_anim_util_register_animation: Parameter 'name' is NULL"); + return; + } + + // Check if the name is not already taken + if (get_custom_animation_node(name)) { + LOG_LUA_LINE("smlua_anim_util_register_animation: An animation named '%s' already exists", name); + return; + } + + // Create a new node + struct CustomAnimation *node = calloc(1, sizeof(struct CustomAnimation)); + node->name = strdup(name); + node->anim = calloc(1, sizeof(struct Animation)); + node->anim->flags = flags; + node->anim->animYTransDivisor = animYTransDivisor; + node->anim->startFrame = startFrame; + node->anim->loopStart = loopStart; + node->anim->loopEnd = loopEnd; + node->anim->unusedBoneCount = 0; + node->anim->values = values; + node->anim->index = index; + node->anim->length = 0; + node->next = sCustomAnimationHead; + sCustomAnimationHead = node; + LOG_INFO("Registered custom animation: %s", name); +} + +void smlua_anim_util_set_animation(struct Object *obj, const char *name) { + + // NULL-checks + if (!obj) { + LOG_LUA_LINE("smlua_anim_util_set_animation: Parameter 'obj' is NULL"); + return; + } + if (!name) { + LOG_LUA_LINE("smlua_anim_util_set_animation: Parameter 'name' is NULL"); + return; + } + + // Check if the animation exists + struct CustomAnimation *node = get_custom_animation_node(name); + if (!node) { + LOG_LUA_LINE("smlua_anim_util_set_animation: Animation '%s' doesn't exist", name); + return; + } + + // Set animation + obj->header.gfx.animInfo.curAnim = node->anim; +} + +const char *smlua_anim_util_get_current_animation_name(struct Object *obj) { + + // NULL-checks + if (!obj) { + LOG_LUA_LINE("smlua_anim_util_set_animation: Parameter 'obj' is NULL"); + return NULL; + } + + // Check the animations + for (struct CustomAnimation *node = sCustomAnimationHead; node; node = node->next) { + if (node->anim == obj->header.gfx.animInfo.curAnim) { + return node->name; + } + } + return NULL; +} diff --git a/src/pc/lua/utils/smlua_anim_utils.h b/src/pc/lua/utils/smlua_anim_utils.h index 6991a7f5..f21006a6 100644 --- a/src/pc/lua/utils/smlua_anim_utils.h +++ b/src/pc/lua/utils/smlua_anim_utils.h @@ -1,6 +1,8 @@ #ifndef SMLUA_ANIM_UTILS_H #define SMLUA_ANIM_UTILS_H +#include "types.h" + typedef struct Animation* ObjectAnimPointer; struct GlobalObjectAnimations { @@ -64,4 +66,9 @@ struct GlobalObjectAnimations { extern struct GlobalObjectAnimations gGlobalObjectAnimations; +void smlua_anim_util_reset(); +void smlua_anim_util_register_animation(const char *name, s16 flags, s16 animYTransDivisor, s16 startFrame, s16 loopStart, s16 loopEnd, const s16 *values, const u16 *index); +void smlua_anim_util_set_animation(struct Object *obj, const char *name); +const char *smlua_anim_util_get_current_animation_name(struct Object *obj); + #endif