diff --git a/artifacts/scripting/functions.yml b/artifacts/scripting/functions.yml index 887c2642..ca305d7e 100644 --- a/artifacts/scripting/functions.yml +++ b/artifacts/scripting/functions.yml @@ -983,7 +983,7 @@ detail: int gdialog_get_barter_mod opcode: 0x824c - name: set_inven_ap_cost - detail: void set_inven_ap_cost + detail: void set_inven_ap_cost(int cost) opcode: 0x824d - name: game_loaded detail: int game_loaded() diff --git a/artifacts/scripting/sfall opcode list.md b/artifacts/scripting/sfall opcode list.md index a18b34cc..a1c14a97 100644 --- a/artifacts/scripting/sfall opcode list.md +++ b/artifacts/scripting/sfall opcode list.md @@ -325,7 +325,7 @@ _^ - These functions require AllowUnsafeScripting to be enabled in ddraw.ini_ 0x824b - `int tile_under_cursor()`\ 0x824c - `int gdialog_get_barter_mod()`\ -0x824d - `void set_inven_ap_cost()` +0x824d - `void set_inven_ap_cost(int cost)` 0x825c - `void reg_anim_combat_check(int enable)`\ 0x825a - `void reg_anim_destroy(object object)`\ diff --git a/artifacts/scripting/sfall opcode list.txt b/artifacts/scripting/sfall opcode list.txt index eda12054..f0d6656a 100644 --- a/artifacts/scripting/sfall opcode list.txt +++ b/artifacts/scripting/sfall opcode list.txt @@ -325,7 +325,7 @@ 0x824b - int tile_under_cursor() 0x824c - int gdialog_get_barter_mod() -0x824d - void set_inven_ap_cost() +0x824d - void set_inven_ap_cost(int cost) 0x825c - void reg_anim_combat_check(int enable) 0x825a - void reg_anim_destroy(object object) diff --git a/sfall/Modules/Scripting/Handlers/Misc.cpp b/sfall/Modules/Scripting/Handlers/Misc.cpp index caab0781..13ec9aed 100644 --- a/sfall/Modules/Scripting/Handlers/Misc.cpp +++ b/sfall/Modules/Scripting/Handlers/Misc.cpp @@ -103,6 +103,15 @@ void __declspec(naked) op_eax_available() { } } +void __declspec(naked) op_set_eax_environment() { + __asm { + _GET_ARG_INT(end); + xor eax, eax; // EAX support has been removed since 2.1a +end: + retn; + } +} + static bool IsSpecialIni(const char* str, const char* end) { const char* pos = strfind(str, &IniReader::GetConfigFile()[2]); // TODO test if (pos && pos < end) return true; @@ -245,7 +254,10 @@ void op_set_palette(OpcodeContext& ctx) { //numbers subgame functions void __declspec(naked) op_nb_create_char() { - __asm retn; + __asm { + xor edx, edx; + _J_RET_VAL_TYPE(VAR_TYPE_INT); + } } void __declspec(naked) op_hero_select_win() { // for opening the appearance selection window diff --git a/sfall/Modules/Scripting/Handlers/Misc.h b/sfall/Modules/Scripting/Handlers/Misc.h index fb379476..50b24102 100644 --- a/sfall/Modules/Scripting/Handlers/Misc.h +++ b/sfall/Modules/Scripting/Handlers/Misc.h @@ -47,6 +47,8 @@ void op_get_year(OpcodeContext&); void __declspec() op_eax_available(); +void __declspec() op_set_eax_environment(); + void op_get_ini_setting(OpcodeContext&); void op_get_ini_string(OpcodeContext&); diff --git a/sfall/Modules/Scripting/Opcodes.cpp b/sfall/Modules/Scripting/Opcodes.cpp index fca27678..081241be 100644 --- a/sfall/Modules/Scripting/Opcodes.cpp +++ b/sfall/Modules/Scripting/Opcodes.cpp @@ -342,7 +342,7 @@ void Opcodes::InitNew() { opcodes[0x1a1] = op_set_hit_chance_max; opcodes[0x1a2] = op_set_skill_max; opcodes[0x1a3] = op_eax_available; - //opcodes[0x1a4] = op_set_eax_environment; + opcodes[0x1a4] = op_set_eax_environment; opcodes[0x1a6] = op_get_viewport_x; opcodes[0x1a7] = op_get_viewport_y; opcodes[0x1a8] = op_set_viewport_x;