mirror of
				https://github.com/coop-deluxe/sm64coopdx.git
				synced 2025-10-30 08:01:01 +00:00 
			
		
		
		
	Compare commits
	
		
			3 commits
		
	
	
		
			770d28dcef
			...
			833271d50f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							 | 
						833271d50f | ||
| 
							 | 
						3c84097e15 | ||
| 
							 | 
						e9a48ee4f5 | 
					 8 changed files with 40 additions and 5 deletions
				
			
		| 
						 | 
					@ -8123,7 +8123,8 @@ HOOK_MARIO_OVERRIDE_FLOOR_CLASS             = 56 --- @type LuaHookedEventType
 | 
				
			||||||
HOOK_ON_ADD_SURFACE                         = 57 --- @type LuaHookedEventType
 | 
					HOOK_ON_ADD_SURFACE                         = 57 --- @type LuaHookedEventType
 | 
				
			||||||
HOOK_ON_CLEAR_AREAS                         = 58 --- @type LuaHookedEventType
 | 
					HOOK_ON_CLEAR_AREAS                         = 58 --- @type LuaHookedEventType
 | 
				
			||||||
HOOK_ON_PACKET_BYTESTRING_RECEIVE           = 59 --- @type LuaHookedEventType
 | 
					HOOK_ON_PACKET_BYTESTRING_RECEIVE           = 59 --- @type LuaHookedEventType
 | 
				
			||||||
HOOK_MAX                                    = 60 --- @type LuaHookedEventType
 | 
					HOOK_OBJECT_UPDATE                          = 60 --- @type LuaHookedEventType
 | 
				
			||||||
 | 
					HOOK_MAX                                    = 61 --- @type LuaHookedEventType
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @alias LuaHookedEventType
 | 
					--- @alias LuaHookedEventType
 | 
				
			||||||
--- | `HOOK_UPDATE`
 | 
					--- | `HOOK_UPDATE`
 | 
				
			||||||
| 
						 | 
					@ -8186,6 +8187,7 @@ HOOK_MAX                                    = 60 --- @type LuaHookedEventType
 | 
				
			||||||
--- | `HOOK_ON_ADD_SURFACE`
 | 
					--- | `HOOK_ON_ADD_SURFACE`
 | 
				
			||||||
--- | `HOOK_ON_CLEAR_AREAS`
 | 
					--- | `HOOK_ON_CLEAR_AREAS`
 | 
				
			||||||
--- | `HOOK_ON_PACKET_BYTESTRING_RECEIVE`
 | 
					--- | `HOOK_ON_PACKET_BYTESTRING_RECEIVE`
 | 
				
			||||||
 | 
					--- | `HOOK_OBJECT_UPDATE`
 | 
				
			||||||
--- | `HOOK_MAX`
 | 
					--- | `HOOK_MAX`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HUD_DISPLAY_LIVES         = 0 --- @type HudDisplayValue
 | 
					HUD_DISPLAY_LIVES         = 0 --- @type HudDisplayValue
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3523,7 +3523,8 @@
 | 
				
			||||||
| HOOK_ON_ADD_SURFACE | 57 |
 | 
					| HOOK_ON_ADD_SURFACE | 57 |
 | 
				
			||||||
| HOOK_ON_CLEAR_AREAS | 58 |
 | 
					| HOOK_ON_CLEAR_AREAS | 58 |
 | 
				
			||||||
| HOOK_ON_PACKET_BYTESTRING_RECEIVE | 59 |
 | 
					| HOOK_ON_PACKET_BYTESTRING_RECEIVE | 59 |
 | 
				
			||||||
| HOOK_MAX | 60 |
 | 
					| HOOK_OBJECT_UPDATE | 60 |
 | 
				
			||||||
 | 
					| HOOK_MAX | 61 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[:arrow_up_small:](#)
 | 
					[:arrow_up_small:](#)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -151,7 +151,7 @@ The lua functions sent to `hook_event()` will be automatically called by SM64 wh
 | 
				
			||||||
| HOOK_MARIO_OVERRIDE_FLOOR_CLASS | Called when Mario's floor class logic updates, return a `SURFACE_CLASS_*` constant to override the type. | [MarioState](../structs.md#MarioState) mario, `integer` surfaceClass |
 | 
					| HOOK_MARIO_OVERRIDE_FLOOR_CLASS | Called when Mario's floor class logic updates, return a `SURFACE_CLASS_*` constant to override the type. | [MarioState](../structs.md#MarioState) mario, `integer` surfaceClass |
 | 
				
			||||||
| HOOK_ON_ADD_SURFACE | Called when collision surfaces are added. | [Surface](../structs.md#Surface) surface, `boolean` dynamic |
 | 
					| HOOK_ON_ADD_SURFACE | Called when collision surfaces are added. | [Surface](../structs.md#Surface) surface, `boolean` dynamic |
 | 
				
			||||||
| HOOK_ON_CLEAR_AREAS | Called when a level's areas are unloaded. | None |
 | 
					| HOOK_ON_CLEAR_AREAS | Called when a level's areas are unloaded. | None |
 | 
				
			||||||
 | 
					| HOOK_OBJECT_UPDATE | Called once per object per frame | [Object](../structs.md#Object) obj |
 | 
				
			||||||
### Parameters
 | 
					### Parameters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| Field | Type |
 | 
					| Field | Type |
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1457,6 +1457,8 @@ cur_obj_update_begin:;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    smlua_call_event_hooks(HOOK_OBJECT_UPDATE, gCurrentObject);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // call the network area timer's run-once callback
 | 
					    // call the network area timer's run-once callback
 | 
				
			||||||
cur_obj_update_end:;
 | 
					cur_obj_update_end:;
 | 
				
			||||||
    if (gCurrentObject->areaTimerType != AREA_TIMER_TYPE_NONE) {
 | 
					    if (gCurrentObject->areaTimerType != AREA_TIMER_TYPE_NONE) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3487,7 +3487,8 @@ char gSmluaConstants[] = ""
 | 
				
			||||||
"HOOK_ON_ADD_SURFACE=57\n"
 | 
					"HOOK_ON_ADD_SURFACE=57\n"
 | 
				
			||||||
"HOOK_ON_CLEAR_AREAS=58\n"
 | 
					"HOOK_ON_CLEAR_AREAS=58\n"
 | 
				
			||||||
"HOOK_ON_PACKET_BYTESTRING_RECEIVE=59\n"
 | 
					"HOOK_ON_PACKET_BYTESTRING_RECEIVE=59\n"
 | 
				
			||||||
"HOOK_MAX=60\n"
 | 
					"HOOK_OBJECT_UPDATE=60\n"
 | 
				
			||||||
 | 
					"HOOK_MAX=61\n"
 | 
				
			||||||
"HUD_DISPLAY_LIVES=0\n"
 | 
					"HUD_DISPLAY_LIVES=0\n"
 | 
				
			||||||
"HUD_DISPLAY_COINS=1\n"
 | 
					"HUD_DISPLAY_COINS=1\n"
 | 
				
			||||||
"HUD_DISPLAY_STARS=2\n"
 | 
					"HUD_DISPLAY_STARS=2\n"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,3 +58,4 @@ SMLUA_EVENT_HOOK(HOOK_MARIO_OVERRIDE_FLOOR_CLASS, HOOK_RETURN_ON_OUTPUT_SET, str
 | 
				
			||||||
SMLUA_EVENT_HOOK(HOOK_ON_ADD_SURFACE, HOOK_RETURN_NEVER, struct Surface *surface, bool dynamic)
 | 
					SMLUA_EVENT_HOOK(HOOK_ON_ADD_SURFACE, HOOK_RETURN_NEVER, struct Surface *surface, bool dynamic)
 | 
				
			||||||
SMLUA_EVENT_HOOK(HOOK_ON_CLEAR_AREAS, HOOK_RETURN_NEVER)
 | 
					SMLUA_EVENT_HOOK(HOOK_ON_CLEAR_AREAS, HOOK_RETURN_NEVER)
 | 
				
			||||||
SMLUA_EVENT_HOOK(HOOK_ON_PACKET_BYTESTRING_RECEIVE, HOOK_RETURN_NEVER, s32 modIndex, s32 valueIndex)
 | 
					SMLUA_EVENT_HOOK(HOOK_ON_PACKET_BYTESTRING_RECEIVE, HOOK_RETURN_NEVER, s32 modIndex, s32 valueIndex)
 | 
				
			||||||
 | 
					SMLUA_EVENT_HOOK(HOOK_OBJECT_UPDATE, HOOK_RETURN_NEVER, struct Object *obj)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1863,3 +1863,30 @@ bool smlua_call_event_hooks_HOOK_ON_PACKET_BYTESTRING_RECEIVE(s32 modIndex, s32
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return hookResult;
 | 
					    return hookResult;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool smlua_call_event_hooks_HOOK_OBJECT_UPDATE(struct Object *obj) {
 | 
				
			||||||
 | 
					    lua_State *L = gLuaState;
 | 
				
			||||||
 | 
					    if (L == NULL) { return false; }
 | 
				
			||||||
 | 
					    bool hookResult = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct LuaHookedEvent *hook = &sHookedEvents[HOOK_OBJECT_UPDATE];
 | 
				
			||||||
 | 
					    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 obj
 | 
				
			||||||
 | 
					        smlua_push_object(L, LOT_OBJECT, obj, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // call the callback
 | 
				
			||||||
 | 
					        if (0 != smlua_call_hook(L, 1, 0, 0, hook->mod[i], hook->modFile[i])) {
 | 
				
			||||||
 | 
					            LOG_LUA("Failed to call the callback for hook %s", sLuaHookedEventTypeName[HOOK_OBJECT_UPDATE]);
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        hookResult = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        lua_settop(L, prevTop);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return hookResult;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,6 +74,7 @@ enum LuaHookedEventType {
 | 
				
			||||||
    HOOK_ON_ADD_SURFACE,
 | 
					    HOOK_ON_ADD_SURFACE,
 | 
				
			||||||
    HOOK_ON_CLEAR_AREAS,
 | 
					    HOOK_ON_CLEAR_AREAS,
 | 
				
			||||||
    HOOK_ON_PACKET_BYTESTRING_RECEIVE,
 | 
					    HOOK_ON_PACKET_BYTESTRING_RECEIVE,
 | 
				
			||||||
 | 
					    HOOK_OBJECT_UPDATE,
 | 
				
			||||||
    HOOK_MAX,
 | 
					    HOOK_MAX,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue