2022-03-13 05:28:57 +00:00
-------------
-- globals --
-------------
--- @type MarioState[]
2024-06-02 00:52:43 +00:00
--- Array of `MarioState`s, from 0 to `MAX_PLAYERS` - 1
2023-07-18 22:00:35 +00:00
--- - Uses the local index, which is different between every player
--- - Index 0 always refers to the local player
2022-03-13 05:28:57 +00:00
gMarioStates = { }
--- @type NetworkPlayer[]
2024-06-02 00:52:43 +00:00
--- Array of `NetworkPlayer`s, from 0 to `MAX_PLAYERS` - 1
2023-07-18 22:00:35 +00:00
--- - Uses the local index, which is different between every player
--- - Index 0 always refers to the local player
2022-03-13 05:28:57 +00:00
gNetworkPlayers = { }
2022-04-23 01:44:59 +00:00
--- @type Mod[]
2023-07-18 22:00:35 +00:00
--- Array of all mods loaded, starting from 0
--- - All mods are loaded in the same order for every player
2023-11-21 22:44:36 +00:00
--- - Index 0 is the first mod in the list (the top of the mod list)
2022-04-23 01:44:59 +00:00
gActiveMods = { }
2022-03-13 05:28:57 +00:00
--- @type Character[]
2024-06-02 00:52:43 +00:00
--- Array of every character, from 0 to `CT_MAX` - 1
--- - The contents or order of the characters can never change
2023-11-21 00:37:03 +00:00
gCharacters = { }
2024-01-01 19:43:44 +00:00
--- @type Controller[]
2024-06-02 00:52:43 +00:00
--- Array of every controller, from 0 to `MAX_PLAYERS` - 1
--- - Uses the local index, which is different between every player
--- - Index 0 always refers to the local player
2024-01-01 19:43:44 +00:00
gControllers = { }
2022-03-13 05:28:57 +00:00
--- @type GlobalTextures
2024-06-02 00:52:43 +00:00
--- Struct containing HUD glyph textures
2022-03-13 05:28:57 +00:00
gTextures = { }
--- @type GlobalObjectAnimations
2024-06-02 00:52:43 +00:00
--- Struct containing every object animation
2022-03-13 05:28:57 +00:00
gObjectAnimations = { }
--- @type GlobalObjectCollisionData
2024-06-02 00:52:43 +00:00
--- Struct containing all object collision data
2022-03-13 05:28:57 +00:00
gGlobalObjectCollisionData = { }
2023-11-21 00:37:03 +00:00
--- @type PaintingValues
2024-06-02 00:52:43 +00:00
--- Struct containing all paintings and their fields
2023-11-21 00:37:03 +00:00
gPaintingValues = { }
2022-03-13 05:28:57 +00:00
--- @alias SyncTable table
--- @type SyncTable
2023-07-18 22:00:35 +00:00
--- Any keys added and modified to this table will be synced among everyone.
2024-06-02 00:52:43 +00:00
--- - This shouldn't be used to sync player-specific values; Use `gPlayerSyncTable` for that
2023-07-18 22:00:35 +00:00
--- - Note: Does not support tables as keys
2022-03-13 05:28:57 +00:00
gGlobalSyncTable = { }
--- @type SyncTable[]
2024-06-02 00:52:43 +00:00
--- Array of sync tables. Any change to any sync tables will be synced to everyone else.
2023-07-18 22:00:35 +00:00
--- - This array takes in a local index, however it automatically translates to the global index
--- - Note: Does not support tables as keys
2022-03-13 05:28:57 +00:00
gPlayerSyncTable = { }
2022-04-09 02:39:22 +00:00
--- @type LevelValues
2024-06-02 00:52:43 +00:00
--- Struct containing fields that modify specific gameplay or level properties
2022-04-09 02:39:22 +00:00
gLevelValues = { }
2022-04-09 06:01:41 +00:00
--- @type BehaviorValues
2024-06-02 00:52:43 +00:00
--- Struct containing fields that modify specific object behavior properties
2022-04-09 06:01:41 +00:00
gBehaviorValues = { }
2023-11-21 00:37:03 +00:00
--- @type FirstPersonCamera
2024-06-02 00:52:43 +00:00
--- Struct that contains the fields for the first person camera
2023-11-21 00:37:03 +00:00
gFirstPersonCamera = { }
Arbitrary shirt, pants, glove colors + settings menu (#145)
* Support for more granular player colors
You can now configure RGB values for shirt, pants, gloves, and shoes.
Due to some limitations, configuring shoes does nothing at the moment.
* Remove paletteIndex and friends
Restructured and filled in some remaining code to account for that.
* Add Edit Palette panel to Player panel
* Change PlayerPalette contents to an enum-indexed array, remove shoes
This gets rid of all the hokey code doing switch cases on the
different parts.
* Fix goof with player model selection box
Should actually have affect now even if a custom palette is being used.
* Fix gap in player color display list commands
The extra space was leftover from when I was trying to get shoes
working. Forgot to clean it up.
* Standardize PlayerParts enum, including for lua constants autogen
* djui_panel_player.c: Properly hook sending palette changes on unpause
Editing the palette and then unpausing should send out the packet to
everyone with the new palette changes (and update the palette preset
selection box), but since we weren't hooking that situation before, it
would stay changed only for you. You would have had to press the Back
button for it to work right.
* Allow Lua mods to continue using `paletteIndex`, `overridePaletteIndex`
This lets mod code like this still work unchanged:
if s.team == 2 then
np.overridePaletteIndex = 7
elseif s.team == 1 then
np.overridePaletteIndex = 15
else
np.overridePaletteIndex = np.paletteIndex
end
It's essentially faked, and would work strangely if the value of either
variable was inspected more closely directly. This should at least
handle the typical use case, though.
Every frame, `overridePaletteIndex` is checked to see if it was modified
from its previous value. If so, `overridePalette` is set to the preset
corresponding to the index. `paletteIndex` contains a special value that
when used to assign to `overridePaletteIndex`, it copies `palette` into
`overridePalette` to restore the real colors, which of course may not
follow the presets at all.
* characters.h: Pack `PlayerPalette` to eliminate size differences between computers
* mario_misc.c: Remove remaining "TODO GAG"
2022-08-07 22:13:19 +00:00
2022-11-30 08:37:43 +00:00
--- @type LakituState
2023-07-18 22:00:35 +00:00
--- The primary struct that controls the camera
--- - Local player only
2022-11-30 08:37:43 +00:00
gLakituState = { }
2023-03-07 22:46:09 +00:00
--- @type ServerSettings
2024-06-02 00:52:43 +00:00
--- Struct containing the settings for the server
--- - enablePlayersInLevelDisplay and enablePlayerList are not synced
2023-03-07 22:46:09 +00:00
gServerSettings = { }
2023-11-21 00:37:03 +00:00
--- @type NametagsSettings
2024-06-02 00:52:43 +00:00
--- Struct containing the settings for Nametags
2023-11-21 00:37:03 +00:00
gNametagsSettings = { }
2023-11-11 21:49:46 +00:00
2024-06-10 15:32:05 +00:00
--- @type Camera
--- Struct contaning camera fields
--- - This camera is the same as `gMarioStates[i].area.camera` or `gCurrentArea.camera`
gCamera = { }
2022-03-13 05:28:57 +00:00
-----------
-- hooks --
-----------
2023-07-18 22:00:35 +00:00
--- @param behaviorId BehaviorId | integer? The behavior id of the object to modify. Pass in as `nil` to create a custom object
--- @param objectList ObjectList | integer Object list
--- @param replaceBehavior boolean Whether or not to completely replace the behavior
--- @param initFunction? fun(obj:Object) Run on object creation
--- @param loopFunction? fun(obj:Object) Run every frame
--- @param behaviorName? string Optional
--- @return BehaviorId BehaviorId Use if creating a custom object, otherwise can be ignored
--- Modify an object's behavior or create a new custom object
2023-04-18 04:54:55 +00:00
function hook_behavior ( behaviorId , objectList , replaceBehavior , initFunction , loopFunction , behaviorName )
2022-03-13 05:28:57 +00:00
-- ...
end
2023-07-18 22:00:35 +00:00
--- @param command string The command to run. Should be easy to type
--- @param description string Should describe what the command does and how to use it
--- @param func fun(msg:string): boolean Run upon activating the command. Return `true` to confirm the command has succeeded
2022-03-13 05:28:57 +00:00
function hook_chat_command ( command , description , func )
-- ...
end
2023-07-18 22:00:35 +00:00
--- @param command string The command to change the description of
--- @param description string The description to change to
2023-05-31 23:56:57 +00:00
function update_chat_command_description ( command , description )
-- ...
end
2023-07-18 22:00:35 +00:00
--- @param hookEventType LuaHookedEventType When a function should run
--- @param func fun(...: any): any The function to run
--- Different hooks can pass in different parameters and have different return values. Be sure to read the hooks guide for more information.
2022-03-13 05:28:57 +00:00
function hook_event ( hookEventType , func )
-- ...
end
2023-07-18 22:00:35 +00:00
--- @class ActionTable
--- @field every_frame fun(m:MarioState):integer?
--- @field gravity fun(m:MarioState):integer?
--- @param actionId integer The action to replace
--- @param funcOrFuncTable fun(m:MarioState):integer? | ActionTable The new behavior of the action
--- @param interactionType? InteractionFlag Optional; The flag that determines how the action interacts with other objects
--- If a function table is used, it must be in the form of `{ act_hook = [func], ... }`. Current action hooks include:
--- - every_frame
--- - gravity
2022-08-07 22:25:00 +00:00
function hook_mario_action ( actionId , funcOrFuncTable , interactionType )
2022-03-13 05:28:57 +00:00
-- ...
end
2023-07-18 22:00:35 +00:00
--- @param syncTable SyncTable Must be the gGlobalSyncTable or gPlayerSyncTable[] or one of their child tables
--- @param field string Field name
--- @param tag any An additional parameter
--- @param func fun(tag:any, oldVal:any, newVal:any) Run when the specified field has been changed
2022-03-13 05:28:57 +00:00
function hook_on_sync_table_change ( syncTable , field , tag , func )
-- ...
end
2024-06-02 00:52:43 +00:00
--- @param name string The text to show on the button
--- @param func fun(index:integer) The function that is called when the button is pressed
2024-06-09 14:32:43 +00:00
--- Hooks a DJUI button into the mod menu
2024-06-02 00:52:43 +00:00
function hook_mod_menu_button ( name , func )
-- ...
end
--- @param name string The text to show on the left
--- @param defaultValue boolean The default state of the checkbox
--- @param func fun(index:integer, value:boolean) The function that is called when the checkbox is changed
--- Hooks a DJUI checkbox into the mod menu
function hook_mod_menu_checkbox ( name , defaultValue , func )
-- ...
end
--- @param name string The text to show on the left
--- @param defaultValue integer The default value of the slider
--- @param min integer The lowest the slider can go
--- @param max integer The highest the slider can go
--- @param func fun(index:integer, value:integer) The function that is called when the value of the slider changes
--- Hooks a DJUI slider into the mod menu
function hook_mod_menu_slider ( name , defaultValue , min , max , func )
-- ...
end
--- @param name string The text to show on the left
--- @param defaultValue string The default text in the inputbox
--- @param stringLength integer The max length of the inputbox
--- @param func fun(index:integer, value:string) The function that is called when the value of the inputbox changes
--- Hooks a DJUI inputbox into the mod menu
function hook_mod_menu_inputbox ( name , defaultValue , stringLength , func )
-- ...
end
--- @param index integer The index of the element in the order in which they were hooked
--- @param name string The name to change to
--- Updates a mod menu element's text
--- - NOTE: `index` is zero-indexed
function update_mod_menu_element_name ( index , name )
-- ...
end
2024-10-22 06:45:19 +00:00
--- @param index integer The index of the element in the order in which they were hooked
--- @param value boolean The boolean value to change to
--- Updates a mod menu checkbox element's boolean value
--- - NOTE: `index` is zero-indexed
function update_mod_menu_element_checkbox ( index , value )
-- ...
end
--- @param index integer The index of the element in the order in which they were hooked
--- @param value number The number value to change to
--- Updates a mod menu slider element's numerical value
--- - NOTE: `index` is zero-indexed
function update_mod_menu_element_slider ( index , value )
-- ...
end
--- @param index integer The index of the element in the order in which they were hooked
--- @param value string The text to change to
--- Updates a mod menu inputbox element's string value
--- - NOTE: `index` is zero-indexed
function update_mod_menu_element_inputbox ( index , value )
-- ...
end
2022-03-13 05:28:57 +00:00
---------------
-- functions --
---------------
2023-07-18 22:00:35 +00:00
--- @param objFieldTable table<any, "u32"|"s32"|"f32">
--- Keys must start with `o` and values must be `"u32"`, `"s32"`, or `"f32"`
2022-03-13 05:28:57 +00:00
function define_custom_obj_fields ( objFieldTable )
-- ...
end
2023-07-18 22:00:35 +00:00
--- @param object Object Object to sync
--- @param standardSync boolean Automatically syncs common fields and syncs with distance. If `false`, all syncing must be done with `network_send_object`.
--- @param fieldTable table<string> The fields to sync
--- All synced fields must start with `o` and there should not be any keys, just values
2022-03-13 05:28:57 +00:00
function network_init_object ( object , standardSync , fieldTable )
-- ...
end
2023-11-11 17:15:32 +00:00
--- @param object Object Object to sync
2023-12-10 15:12:00 +00:00
--- @param reliable boolean Whether or not the game should try to resend the packet in case it gets lost, good for important packets
2023-07-18 22:00:35 +00:00
--- Sends a sync packet to sync up the object with everyone else
2022-03-13 05:28:57 +00:00
function network_send_object ( object , reliable )
-- ...
end
2023-11-11 17:15:32 +00:00
--- @param reliable boolean Whether or not the game should try to resend the packet in case its lost, good for important packets
--- @param dataTable table Table of values to be included in the packet
--- `dataTable` can only contain strings, integers, numbers, booleans, and nil
2022-04-22 07:13:30 +00:00
function network_send ( reliable , dataTable )
-- ...
end
2023-11-11 17:15:32 +00:00
--- @param toLocalIndex integer The local index to send the packet to
--- @param reliable boolean Whether or not the game should try to resend the packet in case its lost, good for important packets
--- @param dataTable table Table of values to be included in the packet
--- `dataTable` can only contain strings, integers, numbers, booleans, and nil
2022-04-22 07:13:30 +00:00
function network_send_to ( toLocalIndex , reliable , dataTable )
-- ...
end
2022-05-07 10:05:25 +00:00
2024-06-02 00:52:43 +00:00
--- @param textureName string The texture name
2022-05-07 10:05:25 +00:00
--- @return TextureInfo
2023-11-11 17:15:32 +00:00
--- Gets the `TextureInfo` of a texture by name
--- - Note: This also works with vanilla textures
2022-05-07 10:05:25 +00:00
function get_texture_info ( textureName )
-- ...
end
2024-06-02 00:52:43 +00:00
--- @param texInfo TextureInfo The texture
--- @param x number Where the texture is horizontally (left anchored)
--- @param y number Where the texture is vertically (top anchored)
--- @param scaleW number The scaled width of the texture
--- @param scaleH number The scaled height of the texture
2023-11-11 17:15:32 +00:00
--- Renders a texture to the screen
2022-05-07 10:05:25 +00:00
function djui_hud_render_texture ( texInfo , x , y , scaleW , scaleH )
-- ...
2022-05-14 02:54:49 +00:00
end
2024-06-02 00:52:43 +00:00
--- @param texInfo TextureInfo The texture
--- @param x number Where the texture is horizontally (left anchored)
--- @param y number Where the texture is vertically (top anchored)
--- @param scaleW number The scaled width of the texture
--- @param scaleH number The scaled height of the texture
--- @param tileX number Where the tile is horizontally (left anchored)
--- @param tileY number Where the tile is vertically (top anchored)
--- @param tileW number The width of the tile
--- @param tileH number The height of the tile
2023-11-11 17:15:32 +00:00
--- Renders a tile of a texture to the screen
2022-11-03 02:45:20 +00:00
function djui_hud_render_texture_tile ( texInfo , x , y , scaleW , scaleH , tileX , tileY , tileW , tileH )
-- ...
end
2024-06-02 00:52:43 +00:00
--- @param texInfo TextureInfo The texture
--- @param prevX number Where the texture previously was horizontally (left anchored)
--- @param prevY number Where the texture previously was vertically (top anchored)
--- @param prevScaleW number The previous scaled width of the texture
--- @param prevScaleH number The previous scaled height of the texture
--- @param x number Where the texture is horizontally (left anchored)
--- @param y number Where the texture is vertically (top anchored)
--- @param scaleW number The scaled width of the texture
--- @param scaleH number The scaled height of the texture
2023-11-11 17:15:32 +00:00
--- Renders an interpolated texture to the screen
2022-05-14 02:54:49 +00:00
function djui_hud_render_texture_interpolated ( texInfo , prevX , prevY , prevScaleW , prevScaleH , x , y , scaleW , scaleH )
-- ...
end
2022-11-03 02:45:20 +00:00
2024-06-02 00:52:43 +00:00
--- @param texInfo TextureInfo The texture
--- @param prevX number Where the texture previously was horizontally (left anchored)
--- @param prevY number Where the texture previously was vertically (top anchored)
--- @param prevScaleW number The previous scaled width of the texture
--- @param prevScaleH number The previous scaled height of the texture
--- @param x number Where the texture is horizontally (left anchored)
--- @param y number Where the texture is vertically (top anchored)
--- @param scaleW number The scaled width of the texture
--- @param scaleH number The scaled height of the texture
--- @param tileX number Where the tile is horizontally (left anchored)
--- @param tileY number Where the tile is vertically (top anchored)
--- @param tileW number The width of the tile
--- @param tileH number The height of the tile
2023-11-11 17:15:32 +00:00
--- Renders an interpolated tile of a texture to the screen
2022-11-03 02:45:20 +00:00
function djui_hud_render_texture_tile_interpolated ( texInfo , prevX , prevY , prevScaleW , prevScaleH , x , y , scaleW , scaleH , tileX , tileY , tileW , tileH )
-- ...
end
2023-01-31 12:24:56 +00:00
2024-06-02 00:52:43 +00:00
--- @param textureName string The name of the texture
--- @param overrideTexInfo TextureInfo The texture to override with
2023-11-11 17:15:32 +00:00
--- Overrides a texture with a custom `TextureInfo`
2024-06-02 00:52:43 +00:00
--- - `textureName` must be the codename of a vanilla texture, you can find these in files such as `texture.inc.c`s
--- - `overrideTexInfo` can be any TextureInfo
2023-11-11 17:15:32 +00:00
function texture_override_set ( textureName , overrideTexInfo )
-- ...
end
2024-06-02 00:52:43 +00:00
--- @param textureName string The name of the texture
2023-11-11 17:15:32 +00:00
--- Resets an overridden texture
function texture_override_reset ( textureName )
-- ...
end
2023-11-26 21:49:32 +00:00
--- @class bhvData
--- @field behavior BehaviorId
--- @field behaviorArg integer
--- @param levelNum LevelNum | integer
--- @param func fun(areaIndex:number, bhvData:bhvData, macroBhvIds:BehaviorId[], macroBhvArgs:integer[])
--- When `func` is called, arguments are filled depending on the level command:
--- - `AREA` command: only `areaIndex` is filled. It's a number.
--- - `OBJECT` command: only `bhvData` is filled. `bhvData` is a table with two fields: `behavior` and `behaviorArg`.
--- - `MACRO` command: only `macroBhvIds` and `macroBhvArgs` are filled. `macrobhvIds` is a list of behavior ids. `macroBhvArgs` is a list of behavior params. Both lists have the same size and start at index 0.
function level_script_parse ( levelNum , func )
-- ...
end
2024-06-02 00:52:43 +00:00
--- @param name string The name of the animation
--- @param flags integer The flags of the animation (`ANIM_FLAG_*`)
--- @param animYTransDivisor integer The vertical animation translation divisor
--- @param startFrame integer What frame the animation starts on
--- @param loopStart integer When the loop starts
--- @param loopEnd integer When the loop ends
--- @param values table The table containing animation values
--- @param index table The table containing animation indices
2023-11-11 17:15:32 +00:00
--- Registers an animation that can be used in objects if `smlua_anim_util_set_animation` is called
2023-04-29 04:00:17 +00:00
function smlua_anim_util_register_animation ( name , flags , animYTransDivisor , startFrame , loopStart , loopEnd , values , index )
-- ...
end
2023-11-26 21:49:32 +00:00
--- @param message string The message to log
--- @param level? ConsoleMessageLevel Optional; Determines whether the message should appear as info, a warning or an error.
--- Logs a message to the in-game console
function log_to_console ( message , level )
2023-01-31 12:24:56 +00:00
-- ...
2024-05-08 12:12:55 +00:00
end
2024-06-17 17:03:35 +00:00
--- @param index integer The index of the scroll target, should match up with the behavior param of `RM_Scroll_Texture` or `editor_Scroll_Texture`
2024-05-08 12:12:55 +00:00
--- @param name string The name of the vertex buffer that should be used while scrolling the texture
2024-06-17 17:03:35 +00:00
--- Registers a vertex buffer to be used for a scrolling texture. Should be used with `RM_Scroll_Texture` or `editor_Scroll_Texture`
2024-05-08 12:12:55 +00:00
function add_scroll_target ( index , name )
-- ...
2024-06-17 17:03:35 +00:00
end
--- @param startX number Start position X
--- @param startY number Start position Y
--- @param startZ number Start position Z
--- @param dirX number Direction X
--- @param dirY number Direction Y
--- @param dirZ number Direction Z
--- @param precision? number Optional; How precise the raycast should be. The default value is 3.0, the higher the number, the more precise.
--- @return RayIntersectionInfo
--- Shoots a raycast from `startX`, `startY`, and `startZ` in the direction of `dirX`, `dirY`, and `dirZ`
function collision_find_surface_on_ray ( startX , startY , startZ , dirX , dirY , dirZ , precision )
-- ...
2024-10-18 02:20:36 +00:00
end