Replaces references to set_mario_animation() with set_character_animation(), but the old function still exists as a way to play any character animation on any character. Waluigi has two animations, added as a test and may not be final. Exposed new functions to Lua for usage in mods.
Primary concern is that each character requires 209 lines indicating what animations they use, similar to Character Sounds.
* Properly set Mario's y vel to 0 on popping
* Change 0 to 0.0f, just in case
* Re-introduce a few vanilla bugs under gBehaviorValues
The Shell Mario glitch was patched as a side effect to patching a different bug, but several romhacks use it so I need it back.
The ability to collect multiple normal caps at once is needed for hat-in-hand using the hat factory glitch.
* Fix Shell Mario fix
Found the actual reason why the glitch doesn't work and figured that this change shouldn't affect anything else, so I removed its entry from gBehaviorValues.
* Add InfiniteRenderDistance to gBehaviorValues
I'm well aware that disabling the infinite render distance will be very desync prone, however a few glitches, most notably cloning and chuckya double jump, need objects load and unload from render distance.
* Allow mods to disable the camera centering from romhack camera
* Allow mods to disable romhack camera centering
Done again
* Update on network shutdown
* Remove a line which I have no idea why it returned
* Add set_exclamation_box_contents()
No way this is memory safe or even well made but I did what I could
* Added (most of) peachy's suggestions
Still need to figure out how to stop the game from reading further than the size of the array without using a hardcoded number
* Added more of peachy's suggestions
I figured a good way to cap how far the exclamation box reads is to pass in the length of the array as well
* add customizable dialogs
* remove testing mod
* add HOOK_ON_DIALOG
* Reset dialog overrides in `network_shutdown`
It may have compile errors idk editing code on phone sucks
* typo smh
* copy over the file from original repo so this fork can be synced
* run autogen again
* actually im stupid
* add cancels to HOOK_BEFORE_PHYS_STEP allowing for custom step systems
* give lua mods access to stepArg and nextPos from hanging and air step; fix a crash when m.floor is null
* [WIP] fix warnings
Committing now as is for Isaac to take a look at this.
Having issues with VERSION_TEXT
* Fix VERSION_TEXT crash and stop demos on host
* HOOK_JOINED_GAME
* expose VERSION_TEXT, and two more adjusments
* show if a constant type is a string with autogen
* fix another blunder by that guy
* should use an or operator here
* fix frame limiter stuff
* made all bools u8 for consistency with fixCollisionBugs
* preview blue coins + visible secrets
* preserve indexing
* star number
* hud cap timer
* red coins radar + secrets radar
* extended pause display
* autogen
* only sDynosBuiltinFuncs is sensitive to indexing
* rebased
* Small quality of life changes
Disabled fixed collision in sm74 by default.
Popping should now completely set the popped player's speed to 0.
* Add HOOK_BEFORE_SET_MARIO_ACTION
Param: incoming action
Return: changes incoming action
If the return value is 1, prevent the action from happening entirely.
0 can't be used here since it'll break the title screen.
* Update hooks.md
* Revert "Small quality of life changes"
This reverts commit 05dd235cd0.
* Small improvements to HUD and new functions
- Split HUD_DISPLAY_FLAG_CAMERA_AND_POWER into HUD_DISPLAY_FLAG_CAMERA and HUD_DISPLAY_FLAG_POWER
- Added hud_is_hidden()
- Added camera_is_frozen()
- Added extra sanity check to hud.c
* Re-add old flags
* Fixes and improvements
* Mod compatibility
* area_get_warp_node*
- Added area_get_warp_node to Lua
- Added area_get_warp_node_from_params to Lua
* area_create_warp_node and warp constants
Here you go Isaac!
* Add object param
* Commits work again, pushing everything else
* Character Sound Hook
* The rest of autogen to be safe
* Indentation Fix
* Fix more indentation
* Get rid of unneeded auto gen junk
* Run autogen again
* Add HOOK_CHARACTER_SOUND to guide
includes the message string and the mario state of the player
return false to prevent the message from showing (might be possible to make a chat flter with this?)
Added CAP color part; Player's cap no longer uses the SHIRT color
Added METAL color as an alias of CAP color; Metal characters now uses the CAP color to tint the metal texture (was SHIRT color)
Fixed the cap inside color (was HAIR color)
Fixed the near/far warning
* Fixed naming from ceil to cell
* Added HOOK_ON_QUICKSAND
* Modified hook and removed weird newlines
* Renamed hook and increased usage
HOOK_ALLOW_QUICKSAND -> HOOK_ALLOW_HAZARD_SURFACE
Now also works on lavaboost.
Suggestion by Agent X. May add this hook to the death barrier check.
* Autogen
* Fixed downwarping to quicksand upon popping
As a side effect though, Mario will no longer snap to the floor upon being popped.
* 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"
Fixed the following audio bugs:
Bug: Rom-hacks sequences don't seem to be affected by volume scaling and
muting
Fix: Force the BGM sequences to follow the vanilla behavior:
Volume can't go higher than default volume
Volume is reduced to 31% when the game is paused
Audio is stopped when the game is paused outside the Castle levels
Bug: (Pointed out by Draco) Mario's voice clips are not replaced by the
player's character's in the following instances: fall to death
barrier, "here we go" in the ending cutscene, "let's a go"
after selecting a star, "okey dokey" after starting the game.
Fix: The first two ones now call
play_character_sound(m, CHAR_SOUND_...) instead of
play_sound(SOUND_MARIO_..., pos). The last two ones couldn't be
fixed the same way for two reasons: First, the corresponding sounds
were not referenced in the sound table, second, the sound played is
always cut-off after a few frames (due to how sm64 resets the sound
banks after loading a level).
Added SOUND_*_LETS_A_GO and SOUND_*_OKEY_DOKEY sounds for each playable
character as Bass samples.
Character Bass sounds work the same way as vanilla sounds (i.e. can be
played with play_character_sound), but they cannot be prematurely stopped
by sm64 sound banks shenanigans.
This fixes the cut-off for both the star select and the castle grounds
entry, plays the sound corresponding to the player's character, and doesn't
need to extend or edit the sound table.
DynOS can detect texture duplicates when generating a bin or lvl file.
When a duplicate is detected, the name of the original texture node is
written instead of the whole PNG data, decreasing significantly the
resulting file size.
Improved level_info.c and added functions to LUA:
const char *get_level_name_ascii(s16 courseNum, s16 levelNum, s16 areaIndex, s16 charCase):
Return a level name as an ascii string. If charCase is 1, capitalize all letters.
If charCase is -1, decapitalize all letters except the first one of each word.
const u8 *get_level_name_sm64(s16 courseNum, s16 levelNum, s16 areaIndex, s16 charCase):
Return a level name as an sm64 u8 string.
If charCase is 1, capitalize all letters.
If charCase is -1, decapitalize all letters except the first one of each word.
const char *get_level_name(s16 courseNum, s16 levelNum, s16 areaIndex):
Shortcut for get_level_name_ascii(courseNum, levelNum, areaIndex, -1).
const char *get_star_name_ascii(s16 courseNum, s16 starNum, s16 charCase):
Return a star name as an ascii string.
If charCase is 1, capitalize all letters.
If charCase is -1, decapitalize all letters except the first one of each word.
const u8 *get_star_name_sm64(s16 courseNum, s16 starNum, s16 charCase):
Return a star name as an sm64 u8 string.
If charCase is 1, capitalize all letters.
If charCase is -1, decapitalize all letters except the first one of each word.
const char *get_star_name(s16 courseNum, s16 starNum):
Shortcut for get_star_name_ascii(courseNum, starNum, -1).
Added play_transition function to LUA.
I chose to copy the function declaration to smlua_misc_utils.h instead of adding area.h
to the autogen tool, as most structures, variables and functions in area.h aren't meant
to be used by LUA scripts.
Added a dev-only warp chat command.
This command signature is /warp [LEVEL] [AREA] [ACT]. Level can be either a number
or a shorthand name (bob, wf, ccm...). Area and Act are numbers.
This command is available only when building the game with DEBUG and DEVELOPMENT.
This command cannot be used if hosting through Discord.
Fixed a bug with moving sounds when they are played via a lua script.
Bug: Moving sounds (including terrain sounds, flying sound, quicksand sound)
are not played correctly when a lua script play them via a call of
play_sound or play_sound_with_freq_scale. This is due to how the moving
sounds are handled internally. They use the f32 pointer provided to the
play_sound functions to decide if the sound must be kept playing,
stopped or restarted. Most of the time, the pointer provided is the
cameraToObject field of Mario's object graph node. Since smlua uses a
circular buffer for Vec3f conversion, this pointer is lost, and the
sound engine can't decide what to do with the sound, resulting in a
weird and incorrect sound effect.
Fix: play_sound and play_sound_with_freq_scale now calls
smlua_get_vec3f_for_play_sound before filling the sound request queue,
to retrieve the correct pointer from the Vec3f provided by smlua.
approach_s32 now stays within 32 bits
Fixed SOUND_ARG_LOAD
Added OBJ_COL_FLAGS_*
Added reset_rumble_timers
Added get_hand_foot_pos_*
Added get_water_surface_pseudo_floor
Adjusted new hooks to be called at the appropriate times