* djui_hud_get_mouse_locked()
Adds a total of 1 function:
# `bool djui_hud_get_mouse_locked()`
Returns the DJUI mouse lock status
Tip: This won't return the true state of mouse lock, so make sure to use `get_first_person_enabled()` and `camera_config_is_mouse_look_enabled()` as well
---
This also fills in some descriptions left out by Isaac in his viewport/scissor functions
* djui_hud_is_mouse_locked()
Same as before but is
* this is better imo
* 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
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.
* 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
added these new djui hud tools for Lua:
- djui_hud_set_viewport
- djui_hud_reset_viewport
- djui_hud_set_scissor
- djui_hud_reset_scissor
- djui_hud_render_line - this code could already be done exactly. this is just to make rendering lines more efficient.
Also made nametags use a viewport for scaling in the credits.
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.
* 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>
plus limited frame rates on the loading and crash screens to go easy on the cpu.
during gameplay, this new system is able to stay true to your fps limit without frame drops.
Vsync causes occasional frame drops by just 1 frame. this is an sdl issue and i know of no workaround; luckily it's very minor.
this commit changes frame pacing by moving frame delaying to just before the frame is displayed. a more precise delay function is also used.
Lights are also zero indexed now which I could change to being one indexed but I think this is better anyway.
I restored ambient light objects setting it every frame since it broke a mod I was working on.
Sorry if any of these changes break anything you're working on dj.
Kaze would be proud though I bet
* 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
Adds network_send_bytestring(), network_send_bytestring_to(), and
HOOK_ON_PACKET_BYTESTRING_RECEIVE
This is as close to raw bytes as you can get in lua. It allows you
to efficiently pack as much data as possible into each packet.
The existing network_send() was built for ease of use, but is quite
inefficient when you want to send a lot of data. Each number or int
field in the table amounts to 9 bytes for the key and 9 bytes for the
value. (amounting to 18 bytes per value). Whereas with the new method
you can pack that information into 1, 2, 4, or 8 bytes depending on
your type's size.
---------
Co-authored-by: MysterD <myster@d>
Just making a brief commit and thats all to add onto dj's lighting engine improvements because I heard about the PR, in mine I
* allowed all Vtx objects to be manipulated/retrieved
* updated lighting engine demo to be an SM64 night mode with a flashlight
* Fixed longterm bug where lighting bugs out unless you spawn a light
* Added new default LE mode LE_MODE_AFFECT_ALL_SHADED_AND_COLORED which also affects vertex colored surfaces
* Lighting engine improvements
Now objects will be affected by the lighting engine. This is
accomplished by passing the renderer the object's model matrix
(uncombined with the view or projection). You can now setup the
lighting engine mode to affect all shaded surfaces, lighting can
be affected by surface normals, and you can control what type of
tone mapping is applied.
added le_set_mode(mode)
By default we retain the previous behavior.
When set to LE_MODE_AFFECT_ALL_SHADED the lighting engine will
affect every shaded material.
This way we don't have to recompile every object and level that
we want shaded with special coop-specific commands
added le_get_mode()
added le_set_tone_mapping(toneMapping)
Tone mapping is what happens when a color value exceeds its 0-255
range.
By default we retain the current tone mapping (called
LE_TONE_MAPPING_TOTAL_WEIGHTED).
LE_TONE_MAPPING_WEIGHTED is now accessible, it was the tone
mapping that was previously left out of the compile through ifdefs.
LE_TONE_MAPPING_CLAMP is just simple additive with a clamp at a
color value of 255.
LE_TONE_MAPPING_REINHARD is reinhard tone mapping
(vout = (vin + 1) / vin).
added le_set_light_use_surface_normals(id, useSurfaceNormals)
By default lights retain their previous behavior (of ignoring
surface normals).
When enabled lights cast on one side of the object will not
appear on the other side of the object.
It is kind of like backface culling, but for lights.
added le_calculate_lighting_color_with_normal(pos, normal, outColor, lightIntensityScalar)
It's just like le_calculate_lighting_color(), but you can pass
in normals now.
* Removed normal calculation from vertex colored surfaces - they don't have normals
* Use packed normals correctly
* made LE_MODE_AFFECT_ALL_SHADED the default
* made useSurfaceNormals the default for lights
* Set ambient color, performed le_is_enabled() checks
The ambient color was black, which is why everything was dark by default.
If we set ambient to white then people will never see the effects of their
lights unless they set ambient to a lower value. So I added checks for
if a light has ever been added. The alternative would be to have something
like le_set_enabled()
* Rewrite how we obtain the model matrix - invert the camera
* run autogen
* Change default tonemapper to weighted, make setting ambient enable LE, fix null deref
* Address Peachy's comments
---------
Co-authored-by: MysterD <myster@d>
* 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
* Added `xOffset` and `yOffset` to the `DjuiFont` struct to align the custom hud fonts
* Replaced `VL-Tones and CJes` CS pack with `The Originals` CS pack
* Removed the shading from the emblems and sideburns for `[CS] The Originals`
* Updated Djoslin0 Toad to give him recolorable hair and updated CJes and VL-Tones Luigi hud icons.
* Updated `[CS] The Originals` models to add missing reverts
* Wrong outdated Djoslin Toad model fix
* Added `math.tween` and along with common easing functions
* Fixed wrong implementation of `IN_OUT_ELASTIC`
* Added `OUT_IN` easing variants
* Fixed Incorrect `OUT_IN_SINE` function
* Fixed wrong `OUT_IN_ELASTIC` implementation
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>
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>
The old version was incrementing at the start of the code iteration, but it makes
more sense to increment after the frame is built. That way every event within one
visible game tick will get the same tick identifier
Co-authored-by: MysterD <myster@d>
Coop now maintains a counter that increments at the start of each game tick,
And another counter that increments at the start of each frame render.
This is to be able to identify specific frames regardless of mod load, hook,
and execution order.
---------
Co-authored-by: MysterD <myster@d>
I didn't add standard Lua require() because I've always been
afraid of it. I'm not sure we can guarantee which files it
will read (or not read).
Instead, here is a custom implementation. It should work more
or less the same and allow for more modular code.
For backwards compatibility reasons, all of the lua files in
the base mod folder will be loaded as in the past. Aka one at
a time and alphabetically.
However, now coop will look for Lua files in subdirectories
and will load them in when another Lua file calls require().
The file search order is more reasonable than normal Lua
require(). It will first look for files relative to the
currently running script. If there is no matching relative
file, it will pick from any Lua file that is in any of the
mod's subdirectories.
---------
Co-authored-by: MysterD <myster@d>