Added hooks: HOOK_ON_LEVEL_INIT, HOOK_ON_WARP, HOOK_ON_SYNC_VALID

This commit is contained in:
MysterD 2022-03-16 23:53:01 -07:00
parent 580c5baeb3
commit 7252d836a9
7 changed files with 40 additions and 3 deletions

View file

@ -5282,7 +5282,16 @@ HOOK_ON_HUD_RENDER = 9
HOOK_ON_INTERACT = 10 HOOK_ON_INTERACT = 10
--- @type LuaHookedEventType --- @type LuaHookedEventType
HOOK_MAX = 11 HOOK_ON_LEVEL_INIT = 11
--- @type LuaHookedEventType
HOOK_ON_WARP = 12
--- @type LuaHookedEventType
HOOK_ON_SYNC_VALID = 13
--- @type LuaHookedEventType
HOOK_MAX = 14
--- @class ModelExtendedId --- @class ModelExtendedId

View file

@ -1858,7 +1858,10 @@
| HOOK_ON_PLAYER_DISCONNECTED | 8 | | HOOK_ON_PLAYER_DISCONNECTED | 8 |
| HOOK_ON_HUD_RENDER | 9 | | HOOK_ON_HUD_RENDER | 9 |
| HOOK_ON_INTERACT | 10 | | HOOK_ON_INTERACT | 10 |
| HOOK_MAX | 11 | | HOOK_ON_LEVEL_INIT | 11 |
| HOOK_ON_WARP | 12 |
| HOOK_ON_SYNC_VALID | 13 |
| HOOK_MAX | 14 |
[:arrow_up_small:](#) [:arrow_up_small:](#)

View file

@ -97,6 +97,9 @@ The lua functions sent to `hook_event()` will be automatically called by SM64 wh
| HOOK_ON_PLAYER_DISCONNECTED | Called when a player disconnects | [MarioState](structs.md#MarioState) disconnector | | HOOK_ON_PLAYER_DISCONNECTED | Called when a player disconnects | [MarioState](structs.md#MarioState) disconnector |
| HOOK_ON_HUD_RENDER | Called when the HUD is being rendered | None | | HOOK_ON_HUD_RENDER | Called when the HUD is being rendered | None |
| HOOK_ON_INTERACT | Called when mario interacts with an object | [MarioState](structs.md#MarioState) interactor, [Object](structs.md#Object) interactee, [enum InteractionType](constants.md#enum-InteractionType) interactType, bool interactValue | | HOOK_ON_INTERACT | Called when mario interacts with an object | [MarioState](structs.md#MarioState) interactor, [Object](structs.md#Object) interactee, [enum InteractionType](constants.md#enum-InteractionType) interactType, bool interactValue |
| HOOK_ON_LEVEL_INIT | Called when the level is initialized | None |
| HOOK_ON_WARP | Called when the local player warps | None |
| HOOK_ON_SYNC_VALID | Called when the current area is synchronized | None |
### Parameters ### Parameters

View file

@ -36,6 +36,7 @@
#include "pc/configfile.h" #include "pc/configfile.h"
#include "pc/network/network.h" #include "pc/network/network.h"
#include "pc/djui/djui.h" #include "pc/djui/djui.h"
#include "pc/lua/smlua_hooks.h"
#include "game/screen_transition.h" #include "game/screen_transition.h"
@ -521,6 +522,7 @@ void init_mario_after_warp(void) {
} }
#endif #endif
} }
smlua_call_event_hooks(HOOK_ON_WARP);
} }
// used for warps inside one level // used for warps inside one level
@ -1413,6 +1415,8 @@ s32 init_level(void) {
sound_banks_disable(SEQ_PLAYER_SFX, SOUND_BANKS_DISABLED_DURING_INTRO_CUTSCENE); sound_banks_disable(SEQ_PLAYER_SFX, SOUND_BANKS_DISABLED_DURING_INTRO_CUTSCENE);
} }
smlua_call_event_hooks(HOOK_ON_LEVEL_INIT);
return 1; return 1;
} }

View file

@ -1900,7 +1900,10 @@ char gSmluaConstants[] = ""
"HOOK_ON_PLAYER_DISCONNECTED = 8\n" "HOOK_ON_PLAYER_DISCONNECTED = 8\n"
"HOOK_ON_HUD_RENDER = 9\n" "HOOK_ON_HUD_RENDER = 9\n"
"HOOK_ON_INTERACT = 10\n" "HOOK_ON_INTERACT = 10\n"
"HOOK_MAX = 11\n" "HOOK_ON_LEVEL_INIT = 11\n"
"HOOK_ON_WARP = 12\n"
"HOOK_ON_SYNC_VALID = 13\n"
"HOOK_MAX = 14\n"
"E_MODEL_NONE = 0\n" "E_MODEL_NONE = 0\n"
"E_MODEL_MARIO = 1\n" "E_MODEL_MARIO = 1\n"
"E_MODEL_SMOKE = 2\n" "E_MODEL_SMOKE = 2\n"

View file

@ -16,6 +16,9 @@ enum LuaHookedEventType {
HOOK_ON_PLAYER_DISCONNECTED, HOOK_ON_PLAYER_DISCONNECTED,
HOOK_ON_HUD_RENDER, HOOK_ON_HUD_RENDER,
HOOK_ON_INTERACT, HOOK_ON_INTERACT,
HOOK_ON_LEVEL_INIT,
HOOK_ON_WARP,
HOOK_ON_SYNC_VALID,
HOOK_MAX, HOOK_MAX,
}; };
@ -31,6 +34,9 @@ static char* LuaHookedEventTypeName[] = {
"HOOK_ON_PLAYER_DISCONNECTED", "HOOK_ON_PLAYER_DISCONNECTED",
"HOOK_ON_HUD_RENDER", "HOOK_ON_HUD_RENDER",
"HOOK_ON_INTERACT", "HOOK_ON_INTERACT",
"HOOK_ON_LEVEL_INIT",
"HOOK_ON_WARP",
"HOOK_ON_SYNC_VALID",
"HOOK_MAX" "HOOK_MAX"
}; };

View file

@ -1,9 +1,14 @@
#include <stdio.h> #include <stdio.h>
#include "../network.h" #include "../network.h"
#include "pc/lua/smlua_hooks.h"
//#define DISABLE_MODULE_LOG 1 //#define DISABLE_MODULE_LOG 1
#include "pc/debuglog.h" #include "pc/debuglog.h"
void network_send_sync_valid(struct NetworkPlayer* toNp, s16 courseNum, s16 actNum, s16 levelNum, s16 areaIndex) { void network_send_sync_valid(struct NetworkPlayer* toNp, s16 courseNum, s16 actNum, s16 levelNum, s16 areaIndex) {
if (toNp == gNetworkPlayerLocal && !toNp->currAreaSyncValid) {
smlua_call_event_hooks(HOOK_ON_SYNC_VALID);
}
// set the NetworkPlayers sync valid // set the NetworkPlayers sync valid
toNp->currLevelSyncValid = true; toNp->currLevelSyncValid = true;
toNp->currAreaSyncValid = true; toNp->currAreaSyncValid = true;
@ -55,6 +60,10 @@ void network_receive_sync_valid(struct Packet* p) {
return; return;
} }
if (np == gNetworkPlayerLocal && !np->currAreaSyncValid) {
smlua_call_event_hooks(HOOK_ON_SYNC_VALID);
}
np->currLevelSyncValid = true; np->currLevelSyncValid = true;
np->currAreaSyncValid = true; np->currAreaSyncValid = true;