sm64coopdx/autogen/lua_definitions/manual.lua

319 lines
10 KiB
Lua
Raw Normal View History

-------------
-- globals --
-------------
--- @type MarioState[]
--- Array of MarioStates, from 0 to MAX_PLAYERS - 1
--- - Uses the local index, which is different between every player
--- - Index 0 always refers to the local player
gMarioStates = {}
--- @type NetworkPlayer[]
--- Array of NetworkPlayers, from 0 to MAX_PLAYERS - 1
--- - Uses the local index, which is different between every player
--- - Index 0 always refers to the local player
gNetworkPlayers = {}
2022-04-23 01:44:59 +00:00
--- @type Mod[]
--- 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 = {}
--- @type Character[]
2023-11-21 00:37:03 +00:00
gCharacters = {}
2024-01-01 19:43:44 +00:00
--- @type Controller[]
gControllers = {}
--- @type GlobalTextures
gTextures = {}
--- @type GlobalObjectAnimations
gObjectAnimations = {}
--- @type GlobalObjectCollisionData
gGlobalObjectCollisionData = {}
2023-11-21 00:37:03 +00:00
--- @type PaintingValues
gPaintingValues = {}
--- @alias SyncTable table
--- @type SyncTable
--- Any keys added and modified to this table will be synced among everyone.
--- - This shouldn't be used to sync player-specific values; Use gPlayerSyncTable for that
--- - Note: Does not support tables as keys
gGlobalSyncTable = {}
--- @type SyncTable[]
--- An array of sync tables. Any change to any sync tables will be synced to everyone else.
--- - This array takes in a local index, however it automatically translates to the global index
--- - Note: Does not support tables as keys
gPlayerSyncTable = {}
--- @type LevelValues
gLevelValues = {}
2022-04-09 06:01:41 +00:00
--- @type BehaviorValues
gBehaviorValues = {}
2023-11-21 00:37:03 +00:00
--- @type FirstPersonCamera
--- The struct that contains the values for the first person camera
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
--- @type LakituState
--- The primary struct that controls the camera
--- - Local player only
gLakituState = {}
--- @type ServerSettings
gServerSettings = {}
2023-11-21 00:37:03 +00:00
--- @type NametagsSettings
gNametagsSettings = {}
-----------
-- hooks --
-----------
--- @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
function hook_behavior(behaviorId, objectList, replaceBehavior, initFunction, loopFunction, behaviorName)
-- ...
end
--- @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
--- @return nil
function hook_chat_command(command, description, func)
-- ...
end
--- @param command string The command to change the description of
--- @param description string The description to change to
function update_chat_command_description(command, description)
-- ...
end
--- @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.
function hook_event(hookEventType, func)
-- ...
end
--- @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
Fix issues Extended Moveset mod (+ extras) (#146) * Allow Lua action hooks to specify custom functions for more behavior ...like gravity, and update all current mods to match. Spin jump and wall slide from the Extended Moveset mod now have gravity code basically matching the original mod. Currently, any place you'd want to use one of these new action hooks still requires an O(n) check through all action hook per call. This should probably be changed. * Fix some remaining issues with Extended Moveset Lua port - Remove divergent spin jump code - Remove divergent roll code - Remap roll button to Y - Reimplement dive slide to make dive hop work like the original - Allow spin from double jump, backflip, side flip * Fix more issues with Extended Moveset Lua port - Reimplement all users of update_walking_speed to incorporate the Tight Controls edits and modified speed caps - Fix instances of angle arithmetic to wrap properly across the mod * Don't chop off group bits of custom action flags; assign missing groups in mods This fixes the Extended Moveset's underwater actions. Chopping off those bits was making the game consider the underwater actions to be a part of the Stationary group, which caused `check_common_stationary_cancels`, which upwarps Mario to the surface. * Tweak roll sliding angle tendency Rolling will now gradually (but fairly quckly) try to tend Mario's facing angle down the slope. This is cleaner than my old method that tries to flip Mario's angle (wrongly) when he begins moving downward, having that logic coexist with the logic for normal sliding actions that can also tend Mario to face backward down the slope. Just looks ugly now by comparison. * Disallow spin jump on slides in Extended Moveset port This matches the original mod * Extended Moveset: Crazy Box Bounce check * Extended Moveset: Fix hugging the wall when spin jumping after wall kick * Extended Moveset: Fix ledge drop snapping up to ground Just reimplement `act_air_hit_wall` ourselves. * Extended Moveset: Add Kaze's walking speed fix * smlua_hooks.c: Restore option to use old API for hook_mario_action The intent is to allow mods outside of this repo to continue working. Co-authored-by: djoslin0 <djoslin0@users.noreply.github.com>
2022-08-07 22:25:00 +00:00
function hook_mario_action(actionId, funcOrFuncTable, interactionType)
-- ...
end
--- @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
function hook_on_sync_table_change(syncTable, field, tag, func)
-- ...
end
---------------
-- functions --
---------------
2023-11-26 21:49:32 +00:00
--- @param t number Angle
--- @return number
function sins(t)
-- ...
end
2023-11-26 21:49:32 +00:00
--- @param t number Angle
--- @return number
function coss(t)
-- ...
end
--- @param y number
--- @param x number
--- @return integer
function atan2s(y, x)
-- ...
end
--- @param objFieldTable table<any, "u32"|"s32"|"f32">
--- @return nil
--- Keys must start with `o` and values must be `"u32"`, `"s32"`, or `"f32"`
function define_custom_obj_fields(objFieldTable)
-- ...
end
--- @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
--- @return nil
--- All synced fields must start with `o` and there should not be any keys, just values
function network_init_object(object, standardSync, fieldTable)
-- ...
end
--- @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
--- @return nil
--- Sends a sync packet to sync up the object with everyone else
function network_send_object(object, reliable)
-- ...
end
--- @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
2022-04-22 07:13:30 +00:00
--- @return nil
--- `dataTable` can only contain strings, integers, numbers, booleans, and nil
2022-04-22 07:13:30 +00:00
function network_send(reliable, dataTable)
-- ...
end
--- @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
2022-04-22 07:13:30 +00:00
--- @return nil
--- `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
--- @param textureName string
--- @return TextureInfo
--- 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
--- @param texInfo TextureInfo
--- @param x number
--- @param y number
--- @param scaleW number
--- @param scaleH number
--- @return nil
--- Renders a texture to the screen
2022-05-07 10:05:25 +00:00
function djui_hud_render_texture(texInfo, x, y, scaleW, scaleH)
-- ...
end
--- @param texInfo TextureInfo
--- @param x number
--- @param y number
--- @param scaleW number
--- @param scaleH number
--- @param tileX number
--- @param tileY number
--- @param tileW number
--- @param tileH number
--- @return nil
--- Renders a tile of a texture to the screen
function djui_hud_render_texture_tile(texInfo, x, y, scaleW, scaleH, tileX, tileY, tileW, tileH)
-- ...
end
--- @param texInfo TextureInfo
--- @param prevX number
--- @param prevY number
--- @param prevScaleW number
--- @param prevScaleH number
--- @param x number
--- @param y number
--- @param scaleW number
--- @param scaleH number
--- @return nil
--- Renders an interpolated texture to the screen
function djui_hud_render_texture_interpolated(texInfo, prevX, prevY, prevScaleW, prevScaleH, x, y, scaleW, scaleH)
-- ...
end
--- @param texInfo TextureInfo
--- @param prevX number
--- @param prevY number
--- @param prevScaleW number
--- @param prevScaleH number
--- @param x number
--- @param y number
--- @param scaleW number
--- @param scaleH number
--- @param tileX number
--- @param tileY number
--- @param tileW number
--- @param tileH number
--- @return nil
--- Renders an interpolated tile of a texture to the screen
function djui_hud_render_texture_tile_interpolated(texInfo, prevX, prevY, prevScaleW, prevScaleH, x, y, scaleW, scaleH, tileX, tileY, tileW, tileH)
-- ...
end
--- @param textureName string
--- @param overrideTexInfo TextureInfo
--- @return nil
--- Overrides a texture with a custom `TextureInfo`
--- * 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
function texture_override_set(textureName, overrideTexInfo)
-- ...
end
--- @param textureName string
--- @return nil
--- 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[])
--- @return nil
--- 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
--- @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
--- Registers an animation that can be used in objects if `smlua_anim_util_set_animation` is called
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.
--- @return nil
2023-11-26 21:49:32 +00:00
--- Logs a message to the in-game console
function log_to_console(message, level)
-- ...
end