mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-22 20:15:17 +00:00
Allow custom levels to use any active mod's variables
This commit is contained in:
parent
456ec2a2cc
commit
97f1182498
3 changed files with 40 additions and 1 deletions
|
@ -861,8 +861,13 @@ static void level_cmd_place_object_ext(void) {
|
||||||
gSmLuaConvertSuccess = true;
|
gSmLuaConvertSuccess = true;
|
||||||
enum BehaviorId behId = smlua_get_mod_variable(modIndex, behStr);
|
enum BehaviorId behId = smlua_get_mod_variable(modIndex, behStr);
|
||||||
|
|
||||||
|
if (!gSmLuaConvertSuccess) {
|
||||||
|
gSmLuaConvertSuccess = true;
|
||||||
|
behId = smlua_get_any_mod_variable(behStr);
|
||||||
|
}
|
||||||
|
|
||||||
if ((gLevelScriptModIndex == -1) || !gSmLuaConvertSuccess) {
|
if ((gLevelScriptModIndex == -1) || !gSmLuaConvertSuccess) {
|
||||||
LOG_ERROR("Failed to place custom object: %u", behId);
|
LOG_ERROR("Failed to place custom object: %u :: %s", behId, behStr);
|
||||||
sCurrentCmd = CMD_NEXT;
|
sCurrentCmd = CMD_NEXT;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -904,7 +909,17 @@ static void level_cmd_place_object_ext2(void) {
|
||||||
|
|
||||||
gSmLuaConvertSuccess = true;
|
gSmLuaConvertSuccess = true;
|
||||||
enum ModelExtendedId modelId = smlua_get_mod_variable(modIndex, modelStr);
|
enum ModelExtendedId modelId = smlua_get_mod_variable(modIndex, modelStr);
|
||||||
|
if (!gSmLuaConvertSuccess) {
|
||||||
|
gSmLuaConvertSuccess = true;
|
||||||
|
modelId = smlua_get_any_mod_variable(modelStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
gSmLuaConvertSuccess = true;
|
||||||
enum BehaviorId behId = smlua_get_mod_variable(modIndex, behStr);
|
enum BehaviorId behId = smlua_get_mod_variable(modIndex, behStr);
|
||||||
|
if (!gSmLuaConvertSuccess) {
|
||||||
|
gSmLuaConvertSuccess = true;
|
||||||
|
behId = smlua_get_any_mod_variable(behStr);
|
||||||
|
}
|
||||||
|
|
||||||
if ((gLevelScriptModIndex == -1) || !gSmLuaConvertSuccess) {
|
if ((gLevelScriptModIndex == -1) || !gSmLuaConvertSuccess) {
|
||||||
LOG_ERROR("Failed to place custom object: %u, %u", modelId, behId);
|
LOG_ERROR("Failed to place custom object: %u, %u", modelId, behId);
|
||||||
|
|
|
@ -395,6 +395,29 @@ s64 smlua_get_mod_variable(u16 modIndex, const char* variable) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s64 smlua_get_any_mod_variable(const char* variable) {
|
||||||
|
lua_State* L = gLuaState;
|
||||||
|
|
||||||
|
s64 value = 0;
|
||||||
|
for (s32 i = 0; i < gActiveMods.entryCount; i++) {
|
||||||
|
// figure out entry
|
||||||
|
struct Mod* mod = gActiveMods.entries[i];
|
||||||
|
|
||||||
|
int prevTop = lua_gettop(L);
|
||||||
|
lua_getglobal(L, "_G"); // get global table
|
||||||
|
lua_getfield(L, LUA_REGISTRYINDEX, mod->relativePath); // get the file's "global" table
|
||||||
|
value = smlua_get_integer_field(-1, (char*)variable);
|
||||||
|
lua_settop(L, prevTop);
|
||||||
|
|
||||||
|
if (gSmLuaConvertSuccess) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// return variable
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
char* smlua_lnt_to_str(struct LSTNetworkType* lnt) {
|
char* smlua_lnt_to_str(struct LSTNetworkType* lnt) {
|
||||||
|
|
|
@ -35,6 +35,7 @@ lua_Number smlua_get_number_field(int index, char* name);
|
||||||
char* smlua_lnt_to_str(struct LSTNetworkType* lnt);
|
char* smlua_lnt_to_str(struct LSTNetworkType* lnt);
|
||||||
|
|
||||||
s64 smlua_get_mod_variable(u16 modIndex, const char* variable) ;
|
s64 smlua_get_mod_variable(u16 modIndex, const char* variable) ;
|
||||||
|
s64 smlua_get_any_mod_variable(const char* variable) ;
|
||||||
|
|
||||||
void smlua_logline(void);
|
void smlua_logline(void);
|
||||||
void smlua_dump_stack(void);
|
void smlua_dump_stack(void);
|
||||||
|
|
Loading…
Reference in a new issue