217 Commits
Author SHA1 Message Date
PeachyPeachSM64 917dc7a9e3 make visibleToObjects a boolean 2026-05-21 20:20:23 +02:00
Baconator2558 7e2e70660b Rename and expose visibleToObjects field (#1251)
* override_mario_visibility_to_objects

* Remove override_mario_visibility_to_objects in favor of exposing visibleToObjects

* Fix comment referencing the field's original name

* Reset visibility each frame

* Minor fix
2026-05-21 14:10:10 -04:00
PeachyPeach 23fd02fab1 Fix Lua/custom behaviors bugs and flaws (#1229)
* improve custom behaviors logic

* clarify description of get behavior functions; get name returns last name instead of first; create generic name only when needed

* review

* fix potential buffer overflow
2026-05-19 10:56:08 +10:00
Sunk f621f00620 Change romhack camera options (#1247)
* Change camera options

* Resolve suggestions
2026-05-16 22:07:51 -04:00
jayden 7505bd82b7 Add audio_stream_get/set_volume_channel (#1205)
Allows modders to play audio streams on channels other than level background music.
4 constants have been added for this purpose:
- `MOD_AUDIO_CHANNEL_MASTER` - sound is only affected by master volume
- `MOD_AUDIO_CHANNEL_MUSIC` - sound is affected by music volume, same as previous behaviour
- `MOD_AUDIO_CHANNEL_SFX` - sound is affected by sfx volume, same as sample behaviour
- `MOD_AUDIO_CHANNEL_ENV` - sound is affected by env volume 
This was done instead of using the existing `SEQ_PLAYER_*` constants to avoid confusion and because there isn't a `NONE`/`MASTER` option.

Additionally, sets the default to `MOD_AUDIO_CHANNEL_MUSIC` as to not break compatibility.

```lua
audio_stream_set_volume_channel(stream, MOD_AUDIO_CHANNEL_SFX) -- wow its just like a sample
audio_stream_get_volume_channel(stream) -- returns MOD_AUDIO_CHANNEL_SFX (its actually 2)
```
2026-05-03 17:59:11 +10:00
djoslin0andMysterD 7d02d52dcc Refactor collision surface systems and add the ability to add/remove/move surfaces (#1143)
- Add `smlua_collision_add_surface`, `_move_surface`, `_delete_surface` Lua APIs
- Add `remove_static_object_collision` to fully free a SOC and its surfaces
- Split surface pools into separate static, SOC, and dynamic pools
- Replace index-based SOC tracking with unique ID counter (`sSOCIdCounter`)
- Invalidate Lua CObjects for recycled surfaces on pool clear
- Expose `SURFACE_POOL_STATIC/DYNAMIC/SOC` constants to Lua
- Add `growing_array_swap_and_pop` and `growing_array_swap_and_pop_index` to memory utils

Co-authored-by: MysterD <myster@d>
2026-05-02 14:58:46 -04:00
EmeraldLockdown 7933f365b5 Expose gHudDisplay (#1158)
* Expose `gHudDisplay`

* Fix that
2026-05-01 22:25:06 -04:00
Cooliokid956 c46ab38a33 CObject Properties (#1068)
* CObject Properties

- Added property members to CObjects via `PROPERTY` macro
`PROPERTY(name, get, set)`
  - `name`: property name
  - `get`: `fun(self): value`
  - `set`: `fun(self, value)`
- Prettified `LuaObjectField` struct with unions for function/property value types
- Added properties to `struct ModAudio`
  - `position`
  - `looping`
  - `frequency`
  - `volume`
    - NOTE: only work with streams- the audio reform will come later

* Define array size only when necessary

- new `__pairs` metamethod for `CObject`s, cycles through all of an object's fields, in alphabetical order
- stray semicolon!
2026-05-01 22:12:51 -04:00
Blockyyy 082193f471 add stayInLevelAfterStar constants (#1210) 2026-04-30 12:24:57 +10:00
EmeraldLockdown 032f9cfab9 Fix cutscenes, syncing issues, and more (Yoshi!) (#1109)
* Fixes

* Lots more changes

* Yoshi :D

* Remove some unecessary changes

* Oops

* Remove temp code

* Revert changes made to king bobomb, will be handled in #1196

* copied from main not dev, oops

* Address review and do a minor improvement

* Nuke that
2026-04-21 23:37:30 -04:00
jayden 157c198953 Add mod_fs_file_set_compression (#1187)
* add compression level to modfs files

* document modfs compression

* correction in modfs guide

* undo text mode write check

* compression level use s32 instead of int

* fix missing s32
2026-04-10 23:25:58 +02:00
PeachyPeach 5f72569d84 DJUI Text improvements and bug fixes (#1131)
- Drastically improve and optimize display list usage for text
- Add text alignment with and without interpolation, and color codes, new lines and tabs are now handled properly
- Restored alpha color code (`#RGBA` or `#RRGGBBAA`) for `djui_print_text` functions (regular DJUI text allows alpha color codes, but ignores the alpha component)
- Add constants for common text alignment and rotation pivot values
- Fix interpolation issues with all `djui_hud` elements
- A few autogen fixes (missing `number` type for constants, missing return values for some functions)
- Fix recolorable hud font offsets on `e`, `i` and `o` letters
2026-03-11 08:38:24 +10:00
Agent X 275c398c41 get_mario_anim_part_rot() 2025-12-20 00:11:51 -05:00
Agent X 540ee2d365 Add behavior value for enabling GEO_RENDER_RANGE 2025-12-19 20:44:17 -05:00
PeachyPeach b444baf508 Fix djui hud texture unsupported formats (#995)
- `djui_hud_render_texture(_tile)` now accepts properly any `TextureInfo`
- Removed `bitSize`, added `format` and `size` to `TextureInfo`
- `texture_to_lua_table` can now convert any `Texture` into an RGBA table
2025-11-20 11:44:02 +10:00
PeachyPeachSM64 648bdba726 Bring back ChainSegment and PlayerPalette 2025-11-05 23:12:14 +01:00
PeachyPeachSM64 d11c8131ee Remove unused/unusable structs from autogen 2025-11-04 22:19:12 +01:00
PeachyPeach 4ee25c2995 ModFs improvements (#907)
* zip + json properties; check existing file in create file

* smlua_audio_utils_replace_sequence

* audio_stream_load, audio_sample_load, smlua_model_util_get_id

* get_texture_info + can also load PNG files

* smlua_collision_util_get

* add wildcard in properties files + set text mode

* filepath restrictions

* Some mod_storage improvements

- Cache mod storage files into a map to reduce file I/O
- Fix a bug in mod_storage_save
- Add mod_storage_load_all that returns all keys/values as a table

* shutdown; fix buffer overflow; fix warnings; lua table

* reject binary files starting with MZ or ELF

* function members

* better doc

* adding file rewind

* ModFS guide; replace yaml by ini; read string buffer changes
2025-10-21 19:42:06 +02:00
Cooliokid956andPeachyPeachSM64 07662b8bfd Static Object Collision / Check for freed CObject (#924)
* Static Object Collision

* no soc surface pool; bnot

* Isaac review

---------

Co-authored-by: PeachyPeachSM64 <72323920+PeachyPeachSM64@users.noreply.github.com>
2025-10-21 19:04:05 +02:00
PeachyPeachSM64 db3b5d2d22 Make painting textures replaceable by Lua
Fix `textureArray` type to be recognized by autogen.

Painting textures can be replaced with the following code:
```
local tex1 = get_texture_info("texture_bottom")
local tex2 = get_texture_info("texture_top")

gPaintingValues.bob_painting.textureArray[1] = tex1.texture
gPaintingValues.bob_painting.textureArray[2] = tex2.texture
```

Texture format must be RGBA 16-bit for built-in textures or
RGBA 32-bit for mod loaded textures.
2025-10-05 12:12:14 +02:00
PeachyPeach 843c060c6b Fix Texture type; add various get_name functions (#945) 2025-09-15 20:59:26 +02:00
PeachyPeachSM64 8c0eb6672c Revert "Reset Mario animations on server shutdown"
This reverts commit d5a25be431.

Make Animation and AnimationTable fields immutable

Fix variable type in music_changed_through_warp
2025-09-02 20:28:03 +02:00
PeachyPeachSM64 1055cebd27 Fix cap sequences not replaced/playing on dynos warp and level entry; Add gLevelValues.shellSequence 2025-08-29 22:54:40 +02:00
Cooliokid956 cc0557bd1a Restored OOB death + De-sorted fields + Read-Only marked as protected (#921)
* De-sort fields + Add `protected`

This fixes the atrocious ordering in autocomplete (a,b,g,r 😭)
also adds the protected scope for read-only fields

_ReadOnlyTable revision

* Restored OOB death (when alone)

also bubbles the player

* Rerun autogen

* Peachy Review

* kill goto

* Curly Brace
2025-08-28 18:06:55 +02:00
ManIsCat2 259b4a698a GEO_BONE GeoLayout command (#913) 2025-08-20 12:46:32 +10:00
PeachyPeach 39feb8a252 Fix graph node interpolation (#917)
Shared graph nodes were incorrectly interpolated, only the first object with a shared graph node was interpolated properly.
Thanks to @Cooliokid956 for noticing that most of node types were **never** interpolated.

- Use a double hashmap to store interpolated data for each graph node and object. All translations, rotations and scales are now interpolated correctly.
- Add `GraphNodeScaleXYZ` type to scale to all 3 dimensions; Add `GEO_SCALE_XYZ` command.

gMtxTbl was also reaching it's limit, so dynamic allocation was added.
2025-08-19 08:15:30 +10:00
PeachyPeachSM64 d5a25be431 Reset Mario animations on server shutdown 2025-08-14 00:49:09 +02:00
PeachyPeachSM64 e8dca33898 Fix palette editor cap on/off invulnerability 2025-08-13 21:01:39 +02:00
BeckowlandPeachyPeachSM64 5992090b79 Add `smlua_text_utils_allocate_dialog` (#896)
* wip

* get rid of seg2_dialog_table and fix crashes

* remove unused include

* change more types to s32

* remove dialog tables from eu_translation.h

* fix dialog_table_get signature

* Change `oToadMessageDialogId` to s32

* remove exit from dialog_table_add

* warning

* calloc allocated dialogs

* avoid memcpy on allocation fail

* Move dialog entry text field init to dialog_table_init

* Free original dialog entries' text field

* Put all reset logic in one place

* Run autogen

* Remove ``get_dialog_text_ascii`` from autogen

* minor fix

* free dialog->str if replaced

* nevermind

* remove get_dialog_unmodified from autogen

* Change -1 to DIALOG_NONE

* update stuff to s32

* use growing array functions

* Change limit to something more reasonable

* add null check

* remove explicit cast

* Minor fixes

* more type fix

* peachy review

* Fix weird enums in autogen

* remove extra newline :p

* add dialog restore

* bump max dialogs just a lil bit 🥺

* add lua behavior params

* all OBJECT fields are now Lua variables

* Revert lua behavior params changes

* isaac review

* fix segfault

---------

Co-authored-by: PeachyPeachSM64 <72323920+PeachyPeachSM64@users.noreply.github.com>
2025-08-03 17:49:45 +02:00
Agent X f4b4bd3fa5 Lighting engine full documentation and more improvements 2025-07-01 13:41:28 -04:00
PeachyPeach 4b10da6184 Mod file system (#850)
* modfs; optional function parameters in autogen

* errors and stuff

* script to turn a directory into a modfs file and vice versa

* bug fixes

* read: raise error on eof

* properly check eof on read_string

* fill; reload; check pointer validity; skip private files when loading non-active modfs

* added bytestrings

* move ByteString to smlua_utils.h
2025-07-01 01:53:47 +02:00
Beckowl f8974985ca Add smlua_text_utils_dialog_get_text and some other dialog functions (#860)
* Add new dialog functions

* Add missing symbols to charmap

* Fix the crashing

* Add braces to if statement

* Implement Isaac's suggestion

* Add override return type to autogen

* Update comment

* Add text field to `DialogEntry`

* wtf??

* Peachy requests
2025-06-28 14:28:28 +02:00
djoslin0andMysterD 3344e0fb05 Add mod development mode (#851)
With mod development mode on you can press the L bind while paused to
reload the active mods. This reload will rescan the directories for
the active modes and thus refresh their file caches.

Mod development mode also enables live lua module reloading. Any time
a lua module is updated, coop will live reload the functions that changed
and do its best to maintain the previous variable states.

---------

Co-authored-by: MysterD <myster@d>
2025-06-22 19:07:15 +10:00
djoslin0andMysterD 0b72937852 Fix bug in fixCollisionBugsRoundedCorners, add floorNormalMinY, ceilNormalMaxY (#856)
There was a bug in resolving wall collisions with fixCollisionBugsRoundedCorners enabled.
Due to the way a check was written, it would often ignore walls when it shouldn't have.

I've also added gLevelValues.floorNormalMinY and gLevelValues.ceilNormalMaxY
These will values will be used to determine which surfaces will become a wall, floor, or ceiling

Co-authored-by: MysterD <myster@d>
2025-06-19 17:15:31 +10:00
PeachyPeach 7c5cb8ac38 More math improvements (#820)
* More math improvements

* more math functions

* stack check

* added error message when trying to modify read-only table; fix gSmluaConstants printed to console
2025-05-29 02:52:31 +02:00
PeachyPeach 6b815db257 Fix hand/foot pos and get any Mario part position (#816)
* Fix hand/foot pos and get any Mario part position
2025-05-21 23:52:04 +02:00
PeachyPeach 8cf28867ca Improving math functions (#813)
* Improving math functions

* Isaac review
2025-05-21 23:50:49 +02:00
Sunk 653f5faeab Add gLevelValues.wallMaxRadius (#815) 2025-05-21 11:19:02 +10:00
Prince FrizzyandPeachyPeach b634201bcf More Optimizations (#792)
* Initial work on optimizations.

* Requested Changes Part 1

* Requested Changes Part 2

* Requested Changes Part 3

* Requested Changes Part 4

* Requested Changes Part 5

* Requested Changes Part 6

* Update deprecated.lua

---------

Co-authored-by: PeachyPeach <72323920+PeachyPeachSM64@users.noreply.github.com>
2025-05-16 20:27:49 -04:00
Isaac0-dev b53523bacb rename Area's unk04 to root and fix lookup error 2025-05-10 13:17:09 +10:00
Beckowl 2e0eebe327 Expose useful global graphnodes (#789)
* Add global node getters

* move pointer asterisk thing for consistency

* Run autogen

* Add geo prefix to new functions

* Run regen

* Rename functions

* run autogen

* Make viewport fields mutable

* Address code review comments
2025-05-07 17:09:08 -04:00
jayden 56ae96e80a change misleading switch case field label (#781) 2025-05-02 13:33:36 +02:00
Prince Frizzy 1876f0c4b2 Add some sanity checks to prevent bugs and exploits. (#767)
* Add some sanity checks to prevent bugs and exploits.

* Improve sanity check for Koopa Shell Riding.

* Sort and optimize MarioState structure.
2025-04-27 17:02:15 -04:00
Agent X 059fc65886 Document more functions! (83%) 2025-04-25 17:03:41 -04:00
PeachyPeach 20c5c29d6e Gfx set command: v2 + Gfx/Vtx dynamic alloc (#718)
* set_gfx_command part 2

* part 3

* get gfx/vtx from name; copy gfx/vtx

* gfx/vtx dynamic allocation lua

* gfx/vtx_new: don't take level/model/vanilla names

* Clean up gbi constants

* update example

* Isaac review; add gfx_get_next_command and vtx_get_next_vertex

* make all commands length 1; missing NULL checks
2025-04-12 18:19:14 -04:00
Agent X d081ebd501 Fix/optimize/improve lighting engine 2025-03-28 23:06:48 -04:00
Agent X 0ebb1ce21b Basic Vertex Point Lighting Engine (#716)
* CONCEPT: Basic vertex lighting engine

Set the geometry mode on your model to G_LIGHTING_ENGINE_EXT, spawn a `bhvAmbientLight`, spawn some `bhvPointLight`s, and then you got yourself a mighty interesting scene.

* Fixes

* How did I miss this

* Make light set home pos
2025-03-27 16:36:02 -04:00
Sunk eb70657178 More settings to the Camera settings menu (#555)
Sherbie's suggestions from #497 and #538, as well as suggestions from others on discord.
Add 2 new camera settings to free camera, being camera collision and dpad usage.
Add an entire new camera submenu for romhack camera, which are now no longer exclusive to romhacks.
2025-03-14 13:01:51 +10:00
Isaac0-devandManIsCat2 80d9c52ef8 allow Lua to manipulate displaylists and vertices (#675)
Co-authored-by: ManIsCat2 <137772623+ManIsCat2@users.noreply.github.com>
2025-02-27 14:27:55 +10:00
Isaac0-dev db1a47553b fix array typing in docs 2025-02-22 19:00:47 +10:00