Added "display_stats" script function #113

This commit is contained in:
NovaRain
2017-11-06 10:16:02 +08:00
parent bc38a02508
commit 9c1d439153
3 changed files with 23 additions and 12 deletions
+20 -12
View File
@@ -19,6 +19,7 @@
#include "..\..\..\FalloutEngine\Fallout2.h"
#include "..\..\..\InputFuncs.h"
#include "..\..\BarBoxes.h"
#include "..\..\LoadGameHook.h"
#include "..\..\ScriptExtender.h"
#include "..\OpcodeContext.h"
@@ -90,7 +91,7 @@ void __declspec(naked) op_get_mouse_x() {
mov eax, ecx;
mov edx, 0xc001;
call fo::funcoffs::interpretPushShort_
pop edx;
pop edx;
pop ecx;
retn;
}
@@ -107,7 +108,7 @@ void __declspec(naked) op_get_mouse_y() {
mov eax, ecx;
mov edx, 0xc001;
call fo::funcoffs::interpretPushShort_
pop edx;
pop edx;
pop ecx;
retn;
}
@@ -123,7 +124,7 @@ void __declspec(naked) op_get_mouse_buttons() {
mov eax, ecx;
mov edx, 0xc001;
call fo::funcoffs::interpretPushShort_
pop edx;
pop edx;
pop ecx;
retn;
}
@@ -139,7 +140,7 @@ void __declspec(naked) op_get_window_under_mouse() {
mov eax, ecx;
mov edx, 0xc001;
call fo::funcoffs::interpretPushShort_
pop edx;
pop edx;
pop ecx;
retn;
}
@@ -150,7 +151,7 @@ void __declspec(naked) op_get_screen_width() {
push edx
push eax
mov edx, ds:[FO_VAR_scr_size + 8] // _scr_size.offx
sub edx, ds : [FO_VAR_scr_size] // _scr_size.x
sub edx, ds:[FO_VAR_scr_size] // _scr_size.x
inc edx
call fo::funcoffs::interpretPushLong_
pop eax
@@ -166,7 +167,7 @@ void __declspec(naked) op_get_screen_height() {
push edx
push eax
mov edx, ds:[FO_VAR_scr_size + 12] // _scr_size.offy
sub edx, ds : [FO_VAR_scr_size + 4] // _scr_size.y
sub edx, ds:[FO_VAR_scr_size + 4] // _scr_size.y
inc edx
call fo::funcoffs::interpretPushLong_
pop eax
@@ -194,7 +195,7 @@ void __declspec(naked) op_resume_game() {
void __declspec(naked) op_create_message_window() {
__asm {
pushad
mov ebx, dword ptr ds : [FO_VAR_curr_font_num];
mov ebx, dword ptr ds:[FO_VAR_curr_font_num];
cmp ebx, 0x65;
je end;
@@ -281,8 +282,8 @@ void __declspec(naked) op_set_viewport_x() {
call fo::funcoffs::interpretPopLong_;
cmp dx, 0xC001;
jnz end;
mov ds : [FO_VAR_wmWorldOffsetX], eax
end :
mov ds:[FO_VAR_wmWorldOffsetX], eax
end:
pop edx;
pop ecx;
pop ebx;
@@ -302,8 +303,8 @@ void __declspec(naked) op_set_viewport_y() {
call fo::funcoffs::interpretPopLong_;
cmp dx, 0xC001;
jnz end;
mov ds : [FO_VAR_wmWorldOffsetY], eax
end :
mov ds:[FO_VAR_wmWorldOffsetY], eax
end:
pop edx;
pop ecx;
pop ebx;
@@ -384,7 +385,7 @@ void __declspec(naked) op_is_iface_tag_active() {
jmp end;
falloutfunc:
mov ecx, eax;
mov eax, dword ptr ds : [FO_VAR_obj_dude];
mov eax, dword ptr ds:[FO_VAR_obj_dude];
mov edx, esp;
mov eax, [eax + 0x64];
call fo::funcoffs::proto_ptr_;
@@ -449,5 +450,12 @@ void sf_set_cursor_mode(OpcodeContext& ctx) {
fo::func::gmouse_3d_set_mode(ctx.arg(0).asInt());
}
void sf_display_stats(OpcodeContext& ctx) {
// calling the function outside of inventory screen will crash the game
if (GetLoopFlags() & INVENTORY) {
__asm call fo::funcoffs::display_stats_
}
}
}
}
@@ -87,5 +87,7 @@ void sf_get_cursor_mode(OpcodeContext&);
void sf_set_cursor_mode(OpcodeContext&);
void sf_display_stats(OpcodeContext&);
}
}
@@ -78,6 +78,7 @@ static const SfallMetarule* currentMetarule;
static const SfallMetarule metarules[] = {
{"car_gas_amount", sf_car_gas_amount, 0, 0},
{"critter_inven_obj2", sf_critter_inven_obj2, 2, 2, {ARG_OBJECT, ARG_INT}},
{"display_stats", sf_display_stats, 0, 0},
{"exec_map_update_scripts", sf_exec_map_update_scripts, 0, 0},
{"get_cursor_mode", sf_get_cursor_mode, 0, 0},
{"get_flags", sf_get_flags, 1, 1, {ARG_OBJECT}},