HOOK_ON_DIALOG fixes, expose set_dialog_box_state

This commit is contained in:
Isaac0-dev 2025-02-10 18:31:59 +10:00
parent 932c36ffb3
commit d53d20c11c
9 changed files with 59 additions and 19 deletions

View file

@ -87,7 +87,7 @@ override_allowed_functions = {
"src/game/level_update.h": [ "level_trigger_warp", "get_painting_warp_node", "initiate_painting_warp", "warp_special", "lvl_set_current_level", "level_control_timer_running", "fade_into_special_warp", "get_instant_warp" ], "src/game/level_update.h": [ "level_trigger_warp", "get_painting_warp_node", "initiate_painting_warp", "warp_special", "lvl_set_current_level", "level_control_timer_running", "fade_into_special_warp", "get_instant_warp" ],
"src/game/area.h": [ "area_get_warp_node" ], "src/game/area.h": [ "area_get_warp_node" ],
"src/engine/level_script.h": [ "area_create_warp_node" ], "src/engine/level_script.h": [ "area_create_warp_node" ],
"src/game/ingame_menu.h": [ "set_min_dialog_width", "set_dialog_override_pos", "reset_dialog_override_pos", "set_dialog_override_color", "reset_dialog_override_color", "set_menu_mode", "create_dialog_box", "create_dialog_box_with_var", "create_dialog_inverted_box", "create_dialog_box_with_response", "reset_dialog_render_state", "close_dialog_box", ], "src/game/ingame_menu.h": [ "set_min_dialog_width", "set_dialog_override_pos", "reset_dialog_override_pos", "set_dialog_override_color", "reset_dialog_override_color", "set_menu_mode", "create_dialog_box", "create_dialog_box_with_var", "create_dialog_inverted_box", "create_dialog_box_with_response", "reset_dialog_render_state", "set_dialog_box_state", ],
"src/audio/seqplayer.h": [ "sequence_player_set_tempo", "sequence_player_set_tempo_acc", "sequence_player_set_transposition", "sequence_player_get_tempo", "sequence_player_get_tempo_acc", "sequence_player_get_transposition" ] "src/audio/seqplayer.h": [ "sequence_player_set_tempo", "sequence_player_set_tempo_acc", "sequence_player_set_transposition", "sequence_player_get_tempo", "sequence_player_get_tempo_acc", "sequence_player_get_transposition" ]
} }

View file

@ -12517,7 +12517,7 @@ MAX_VERSION_LENGTH = 32
MINOR_VERSION_NUMBER = 1 MINOR_VERSION_NUMBER = 1
--- @type string --- @type string
SM64COOPDX_VERSION = "v1.1.1" SM64COOPDX_VERSION = "v1.2.0"
--- @type integer --- @type integer
VERSION_NUMBER = 38 VERSION_NUMBER = 38

View file

@ -4214,6 +4214,11 @@ function set_first_person_enabled(enable)
-- ... -- ...
end end
--- @param state integer
function set_dialog_box_state(state)
-- ...
end
--- @param dialog integer --- @param dialog integer
function create_dialog_box(dialog) function create_dialog_box(dialog)
-- ... -- ...

View file

@ -4356,6 +4356,26 @@ Sets if first person is enabled
<br /> <br />
## [set_dialog_box_state](#set_dialog_box_state)
### Lua Example
`set_dialog_box_state(state)`
### Parameters
| Field | Type |
| ----- | ---- |
| state | `integer` |
### Returns
- None
### C Prototype
`void set_dialog_box_state(u8 state);`
[:arrow_up_small:](#)
<br />
## [create_dialog_box](#create_dialog_box) ## [create_dialog_box](#create_dialog_box)
### Lua Example ### Lua Example

View file

@ -842,6 +842,7 @@
<br /> <br />
- ingame_menu.h - ingame_menu.h
- [set_dialog_box_state](functions-3.md#set_dialog_box_state)
- [create_dialog_box](functions-3.md#create_dialog_box) - [create_dialog_box](functions-3.md#create_dialog_box)
- [create_dialog_box_with_response](functions-3.md#create_dialog_box_with_response) - [create_dialog_box_with_response](functions-3.md#create_dialog_box_with_response)
- [create_dialog_box_with_var](functions-3.md#create_dialog_box_with_var) - [create_dialog_box_with_var](functions-3.md#create_dialog_box_with_var)

View file

@ -1160,30 +1160,27 @@ void handle_special_dialog_text(s16 dialogID) { // dialog ID tables, in order
static u8 sHookString[255]; static u8 sHookString[255];
static bool sOverrideDialogString = false; static bool sOverrideDialogString = false;
void convert_string_ascii_to_sm64(u8 *str64, const char *strAscii, bool menu); void convert_string_ascii_to_sm64(u8 *str64, const char *strAscii, bool menu);
void handle_dialog_hook(s16 dialogId) { bool handle_dialog_hook(s16 dialogId) {
bool open = false; bool open = false;
const char *str = smlua_call_event_hooks_int_ret_bool_and_string(HOOK_ON_DIALOG, dialogId, &open); const char *str = smlua_call_event_hooks_int_ret_bool_and_string(HOOK_ON_DIALOG, dialogId, &open);
if (!open) {
if (gCamera->cutscene == CUTSCENE_READ_MESSAGE) { gCamera->cutscene = 0; }
return false;
}
sOverrideDialogString = str != NULL; sOverrideDialogString = str != NULL;
if (sOverrideDialogString) { convert_string_ascii_to_sm64(sHookString, str, false); } if (sOverrideDialogString) { convert_string_ascii_to_sm64(sHookString, str, false); }
if (!open) { return true;
gDialogLineNum = 1;
gDialogBoxState = DIALOG_STATE_CLOSING;
gDialogBoxOpenTimer = 20;
handle_special_dialog_text(dialogId);
}
} }
void create_dialog_box(s16 dialog) { void create_dialog_box(s16 dialog) {
handle_dialog_hook(dialog); if (handle_dialog_hook(dialog) && gDialogID == -1) {
if (gDialogID == -1) {
gDialogID = dialog; gDialogID = dialog;
gDialogBoxType = DIALOG_TYPE_ROTATE; gDialogBoxType = DIALOG_TYPE_ROTATE;
} }
} }
void create_dialog_box_with_var(s16 dialog, s32 dialogVar) { void create_dialog_box_with_var(s16 dialog, s32 dialogVar) {
handle_dialog_hook(dialog); if (handle_dialog_hook(dialog) && gDialogID == -1) {
if (gDialogID == -1) {
gDialogID = dialog; gDialogID = dialog;
gDialogVariable = dialogVar; gDialogVariable = dialogVar;
gDialogBoxType = DIALOG_TYPE_ROTATE; gDialogBoxType = DIALOG_TYPE_ROTATE;
@ -1191,16 +1188,14 @@ void create_dialog_box_with_var(s16 dialog, s32 dialogVar) {
} }
void create_dialog_inverted_box(s16 dialog) { void create_dialog_inverted_box(s16 dialog) {
handle_dialog_hook(dialog); if (handle_dialog_hook(dialog) && gDialogID == -1) {
if (gDialogID == -1) {
gDialogID = dialog; gDialogID = dialog;
gDialogBoxType = DIALOG_TYPE_ZOOM; gDialogBoxType = DIALOG_TYPE_ZOOM;
} }
} }
void create_dialog_box_with_response(s16 dialog) { void create_dialog_box_with_response(s16 dialog) {
handle_dialog_hook(dialog); if (handle_dialog_hook(dialog) && gDialogID == -1) {
if (gDialogID == -1) {
gDialogID = dialog; gDialogID = dialog;
gDialogBoxType = DIALOG_TYPE_ROTATE; gDialogBoxType = DIALOG_TYPE_ROTATE;
gLastDialogResponse = 1; gLastDialogResponse = 1;
@ -3596,7 +3591,7 @@ void reset_dialog_override_color(void) {
gOverrideDialogColor = 0; gOverrideDialogColor = 0;
} }
void close_dialog_box(u8 state) { void set_dialog_box_state(u8 state) {
if (state > DIALOG_STATE_CLOSING) { return; } if (state > DIALOG_STATE_CLOSING) { return; }
gDialogBoxState = state; gDialogBoxState = state;
} }

View file

@ -179,5 +179,6 @@ void set_dialog_override_pos(s16 x, s16 y);
void reset_dialog_override_pos(); void reset_dialog_override_pos();
void set_dialog_override_color(u8 bgR, u8 bgG, u8 bgB, u8 bgA, u8 textR, u8 textG, u8 textB, u8 textA); void set_dialog_override_color(u8 bgR, u8 bgG, u8 bgB, u8 bgA, u8 textR, u8 textG, u8 textB, u8 textA);
void reset_dialog_override_color(); void reset_dialog_override_color();
void set_dialog_box_state(u8 state);
#endif // INGAME_MENU_H #endif // INGAME_MENU_H

View file

@ -4318,7 +4318,7 @@ char gSmluaConstants[] = ""
"COOP_OBJ_FLAG_LUA = (1 << 1)\n" "COOP_OBJ_FLAG_LUA = (1 << 1)\n"
"COOP_OBJ_FLAG_NON_SYNC = (1 << 2)\n" "COOP_OBJ_FLAG_NON_SYNC = (1 << 2)\n"
"COOP_OBJ_FLAG_INITIALIZED = (1 << 3)\n" "COOP_OBJ_FLAG_INITIALIZED = (1 << 3)\n"
"SM64COOPDX_VERSION = 'v1.1.1'\n" "SM64COOPDX_VERSION = 'v1.2.0'\n"
"VERSION_TEXT = 'v'\n" "VERSION_TEXT = 'v'\n"
"VERSION_NUMBER = 38\n" "VERSION_NUMBER = 38\n"
"MINOR_VERSION_NUMBER = 1\n" "MINOR_VERSION_NUMBER = 1\n"

View file

@ -13388,6 +13388,23 @@ int smlua_func_set_first_person_enabled(lua_State* L) {
// ingame_menu.h // // ingame_menu.h //
/////////////////// ///////////////////
int smlua_func_set_dialog_box_state(lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 1) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "set_dialog_box_state", 1, top);
return 0;
}
u8 state = smlua_to_integer(L, 1);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_dialog_box_state"); return 0; }
set_dialog_box_state(state);
return 1;
}
int smlua_func_create_dialog_box(lua_State* L) { int smlua_func_create_dialog_box(lua_State* L) {
if (L == NULL) { return 0; } if (L == NULL) { return 0; }
@ -32805,6 +32822,7 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "set_first_person_enabled", smlua_func_set_first_person_enabled); smlua_bind_function(L, "set_first_person_enabled", smlua_func_set_first_person_enabled);
// ingame_menu.h // ingame_menu.h
smlua_bind_function(L, "set_dialog_box_state", smlua_func_set_dialog_box_state);
smlua_bind_function(L, "create_dialog_box", smlua_func_create_dialog_box); smlua_bind_function(L, "create_dialog_box", smlua_func_create_dialog_box);
smlua_bind_function(L, "create_dialog_box_with_response", smlua_func_create_dialog_box_with_response); smlua_bind_function(L, "create_dialog_box_with_response", smlua_func_create_dialog_box_with_response);
smlua_bind_function(L, "create_dialog_box_with_var", smlua_func_create_dialog_box_with_var); smlua_bind_function(L, "create_dialog_box_with_var", smlua_func_create_dialog_box_with_var);