mirror of
				https://github.com/coop-deluxe/sm64coopdx.git
				synced 2025-10-30 08:01:01 +00:00 
			
		
		
		
	Add HOOK_USE_ACT_SELECT ; increase MAX_AUDIO_OVERRIDE to 128
This commit is contained in:
		
							parent
							
								
									8057c9e501
								
							
						
					
					
						commit
						618f468e06
					
				
					 8 changed files with 54 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -7900,7 +7900,10 @@ HOOK_ON_DEATH = 21
 | 
			
		|||
HOOK_ON_PACKET_RECEIVE = 22
 | 
			
		||||
 | 
			
		||||
--- @type LuaHookedEventType
 | 
			
		||||
HOOK_MAX = 23
 | 
			
		||||
HOOK_USE_ACT_SELECT = 23
 | 
			
		||||
 | 
			
		||||
--- @type LuaHookedEventType
 | 
			
		||||
HOOK_MAX = 24
 | 
			
		||||
 | 
			
		||||
--- @class HudDisplayFlags
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2782,7 +2782,8 @@
 | 
			
		|||
| HOOK_ON_OBJECT_RENDER | 20 |
 | 
			
		||||
| HOOK_ON_DEATH | 21 |
 | 
			
		||||
| HOOK_ON_PACKET_RECEIVE | 22 |
 | 
			
		||||
| HOOK_MAX | 23 |
 | 
			
		||||
| HOOK_USE_ACT_SELECT | 23 |
 | 
			
		||||
| HOOK_MAX | 24 |
 | 
			
		||||
 | 
			
		||||
[:arrow_up_small:](#)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -109,6 +109,7 @@ The lua functions sent to `hook_event()` will be automatically called by SM64 wh
 | 
			
		|||
| HOOK_ON_OBJECT_RENDER | Called right before an object is rendered. **Note:** You must set the `hookRender` field of the object to a non-zero value | [Object](structs.md#Object) renderedObj |
 | 
			
		||||
| HOOK_ON_DEATH | Called when the local player dies, return `false` to prevent normal death sequence | [MarioState](structs.md#MarioState) localMario |
 | 
			
		||||
| HOOK_ON_PACKET_RECEIVE | Called when the mod receives a packet that used `network_send()` or `network_send_to()` | `table` dataTable |
 | 
			
		||||
| HOOK_USE_ACT_SELECT | Called when the level changes, return `true` to show act selection screen and `false` otherwise | `integer` levelNum |
 | 
			
		||||
 | 
			
		||||
### Parameters
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1527,9 +1527,15 @@ s32 lvl_set_current_level(UNUSED s16 arg0, s32 levelNum) {
 | 
			
		|||
    gCurrLevelNum = levelNum;
 | 
			
		||||
    gCurrCourseNum = get_level_course_num(levelNum - 1);
 | 
			
		||||
 | 
			
		||||
    bool foundHook = false;
 | 
			
		||||
    bool hookUseActSelect = false;
 | 
			
		||||
    smlua_call_event_hooks_use_act_select(HOOK_USE_ACT_SELECT, levelNum, &foundHook, &hookUseActSelect);
 | 
			
		||||
 | 
			
		||||
    if (!foundHook || !hookUseActSelect) {
 | 
			
		||||
        if (gCurrDemoInput != NULL || gCurrCreditsEntry != NULL || gCurrCourseNum == COURSE_NONE) {
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (gCurrLevelNum != LEVEL_BOWSER_1 && gCurrLevelNum != LEVEL_BOWSER_2
 | 
			
		||||
        && gCurrLevelNum != LEVEL_BOWSER_3) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1544,6 +1550,10 @@ s32 lvl_set_current_level(UNUSED s16 arg0, s32 levelNum) {
 | 
			
		|||
        disable_warp_checkpoint();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (foundHook) {
 | 
			
		||||
        return hookUseActSelect;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (gCurrCourseNum > COURSE_STAGES_MAX || warpCheckpointActive) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2814,7 +2814,8 @@ char gSmluaConstants[] = ""
 | 
			
		|||
"HOOK_ON_OBJECT_RENDER = 20\n"
 | 
			
		||||
"HOOK_ON_DEATH = 21\n"
 | 
			
		||||
"HOOK_ON_PACKET_RECEIVE = 22\n"
 | 
			
		||||
"HOOK_MAX = 23\n"
 | 
			
		||||
"HOOK_USE_ACT_SELECT = 23\n"
 | 
			
		||||
"HOOK_MAX = 24\n"
 | 
			
		||||
"HUD_DISPLAY_LIVES = 0\n"
 | 
			
		||||
"HUD_DISPLAY_COINS = 1\n"
 | 
			
		||||
"HUD_DISPLAY_STARS = 2\n"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -497,6 +497,35 @@ void smlua_call_event_hooks_value_param(enum LuaHookedEventType hookType, int mo
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void smlua_call_event_hooks_use_act_select(enum LuaHookedEventType hookType, int value, bool* foundHook, bool* returnValue) {
 | 
			
		||||
    lua_State* L = gLuaState;
 | 
			
		||||
    *foundHook = false;
 | 
			
		||||
    if (L == NULL) { return; }
 | 
			
		||||
    struct LuaHookedEvent* hook = &sHookedEvents[hookType];
 | 
			
		||||
    for (int i = 0; i < hook->count; i++) {
 | 
			
		||||
        s32 prevTop = lua_gettop(L);
 | 
			
		||||
 | 
			
		||||
        // push the callback onto the stack
 | 
			
		||||
        lua_rawgeti(L, LUA_REGISTRYINDEX, hook->reference[i]);
 | 
			
		||||
 | 
			
		||||
        // push value
 | 
			
		||||
        lua_pushinteger(L, value);
 | 
			
		||||
 | 
			
		||||
        // call the callback
 | 
			
		||||
        if (0 != smlua_call_hook(L, 1, 1, 0, hook->mod[i])) {
 | 
			
		||||
            LOG_LUA("Failed to call the callback: %u", hookType);
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // output the return value
 | 
			
		||||
        if (lua_type(L, -1) == LUA_TBOOLEAN) {
 | 
			
		||||
            *foundHook = true;
 | 
			
		||||
            *returnValue = smlua_to_boolean(L, -1);
 | 
			
		||||
        }
 | 
			
		||||
        lua_settop(L, prevTop);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  ////////////////////
 | 
			
		||||
 // hooked actions //
 | 
			
		||||
////////////////////
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@ enum LuaHookedEventType {
 | 
			
		|||
    HOOK_ON_OBJECT_RENDER,
 | 
			
		||||
    HOOK_ON_DEATH,
 | 
			
		||||
    HOOK_ON_PACKET_RECEIVE,
 | 
			
		||||
    HOOK_USE_ACT_SELECT,
 | 
			
		||||
    HOOK_MAX,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,6 +62,7 @@ static const char* LuaHookedEventTypeName[] = {
 | 
			
		|||
    "HOOK_ON_OBJECT_RENDER",
 | 
			
		||||
    "HOOK_ON_DEATH",
 | 
			
		||||
    "HOOK_ON_PACKET_RECEIVE",
 | 
			
		||||
    "HOOK_USE_ACT_SELECT",
 | 
			
		||||
    "HOOK_MAX"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +83,7 @@ void smlua_call_event_hooks_object_param(enum LuaHookedEventType hookType, struc
 | 
			
		|||
bool smlua_call_event_hooks_ret_int(enum LuaHookedEventType hookType, s32* returnValue);
 | 
			
		||||
void smlua_call_event_hooks_set_camera_mode_params(enum LuaHookedEventType hookType, struct Camera *c, s16 mode, s16 frames, bool* returnValue);
 | 
			
		||||
void smlua_call_event_hooks_value_param(enum LuaHookedEventType hookType, int modIndex, int valueIndex);
 | 
			
		||||
void smlua_call_event_hooks_use_act_select(enum LuaHookedEventType hookType, int value, bool* foundHook, bool* returnValue);
 | 
			
		||||
 | 
			
		||||
enum BehaviorId smlua_get_original_behavior_id(const BehaviorScript* behavior);
 | 
			
		||||
const BehaviorScript* smlua_override_behavior(const BehaviorScript* behavior);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
#include "bass_audio/bass_audio_helpers.h"
 | 
			
		||||
#include "pc/debuglog.h"
 | 
			
		||||
 | 
			
		||||
#define MAX_AUDIO_OVERRIDE 64
 | 
			
		||||
#define MAX_AUDIO_OVERRIDE 128
 | 
			
		||||
 | 
			
		||||
struct AudioOverride {
 | 
			
		||||
    bool enabled;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue