mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Added "print_text" script function
This commit is contained in:
@@ -348,6 +348,8 @@
|
|||||||
#define obj_under_cursor(onlyCritter, includeDude) sfall_func2("obj_under_cursor", onlyCritter, includeDude)
|
#define obj_under_cursor(onlyCritter, includeDude) sfall_func2("obj_under_cursor", onlyCritter, includeDude)
|
||||||
#define objects_in_radius(tile, radius, elev, type) sfall_func4("objects_in_radius", tile, radius, elev, type)
|
#define objects_in_radius(tile, radius, elev, type) sfall_func4("objects_in_radius", tile, radius, elev, type)
|
||||||
#define outlined_object sfall_func0("outlined_object")
|
#define outlined_object sfall_func0("outlined_object")
|
||||||
|
#define print_text(text, winType, x, y, color) sfall_func5("print_text", text, winType, x, y, color)
|
||||||
|
#define print_text_width(text, winType, x, y, color, w) sfall_func6("print_text", text, winType, x, y, color, w)
|
||||||
#define real_dude_obj sfall_func0("real_dude_obj")
|
#define real_dude_obj sfall_func0("real_dude_obj")
|
||||||
#define remove_all_timer_events sfall_func0("remove_timer_event")
|
#define remove_all_timer_events sfall_func0("remove_timer_event")
|
||||||
#define remove_timer_event(fixedParam) sfall_func1("remove_timer_event", fixedParam)
|
#define remove_timer_event(fixedParam) sfall_func1("remove_timer_event", fixedParam)
|
||||||
|
|||||||
@@ -676,7 +676,7 @@ optional argument:
|
|||||||
- displays the specified hidden script window or the one previously hidden with the sfall_func0("hide_window") function
|
- displays the specified hidden script window or the one previously hidden with the sfall_func0("hide_window") function
|
||||||
- winName: the window name, assigned to the window by the CreateWin/create_win function
|
- winName: the window name, assigned to the window by the CreateWin/create_win function
|
||||||
|
|
||||||
> void sfall_func3("set_window_flag", string/int winName/winID, int flag, bool value)
|
> void sfall_func3("set_window_flag", string winName/int winID, int flag, bool value)
|
||||||
- changes the specified flag for the created script or game interface window
|
- changes the specified flag for the created script or game interface window
|
||||||
- winName: the window name, assigned to the window by the CreateWin/create_win function
|
- winName: the window name, assigned to the window by the CreateWin/create_win function
|
||||||
- winID: the ID number of the interface or script window obtained with the get_window_under_mouse function, or 0 for the current game interface
|
- winID: the ID number of the interface or script window obtained with the get_window_under_mouse function, or 0 for the current game interface
|
||||||
@@ -734,16 +734,16 @@ optional arguments:
|
|||||||
- flags: mode flags (see MSGBOX_* constants in define_extra.h). Pass -1 to skip setting the flags (default flags are NORMAL and YESNO)
|
- flags: mode flags (see MSGBOX_* constants in define_extra.h). Pass -1 to skip setting the flags (default flags are NORMAL and YESNO)
|
||||||
- color1/color2: the color index in Fallout palette. color1 sets the text color for the first line, and color2 for all subsequent lines of text (default color is 145)
|
- color1/color2: the color index in Fallout palette. color1 sets the text color for the first line, and color2 for all subsequent lines of text (default color is 145)
|
||||||
|
|
||||||
> int sfall_func1("get_stat_min", stat)
|
> int sfall_func1("get_stat_min", int stat)
|
||||||
> int sfall_func1("get_stat_max", stat)
|
> int sfall_func1("get_stat_max", int stat)
|
||||||
> int sfall_func2("get_stat_min", stat, bool who)
|
> int sfall_func2("get_stat_min", int stat, bool who)
|
||||||
> int sfall_func2("get_stat_max", stat, bool who)
|
> int sfall_func2("get_stat_max", int stat, bool who)
|
||||||
- returns the maximum or minimum set value of the specified stat (see set_stat_max/min functions)
|
- returns the maximum or minimum set value of the specified stat (see set_stat_max/min functions)
|
||||||
- who: 0 (false) or omitting the argument - returns the value of the player, 1 (true) - returns the value set for other critters
|
- who: 0 (false) or omitting the argument - returns the value of the player, 1 (true) - returns the value set for other critters
|
||||||
|
|
||||||
> int sfall_func4("interface_art_draw", int winType, string/int artFile/artId, int x, int y)
|
> int sfall_func4("interface_art_draw", int winType, string artFile/int artID, int x, int y)
|
||||||
> int sfall_func5("interface_art_draw", int winType, string/int artFile/artId, int x, int y, int frame)
|
> int sfall_func5("interface_art_draw", int winType, string artFile/int artID, int x, int y, int frame)
|
||||||
> int sfall_func6("interface_art_draw", int winType, string/int artFile/artId, int x, int y, int frame, array param)
|
> int sfall_func6("interface_art_draw", int winType, string artFile/int artID, int x, int y, int frame, array param)
|
||||||
- draws the specified PCX or FRM image in the game interface window, returns -1 in case of any error
|
- draws the specified PCX or FRM image in the game interface window, returns -1 in case of any error
|
||||||
- winType: the type number of the interface window (see WINTYPE_* constants in sfall.h)
|
- winType: the type number of the interface window (see WINTYPE_* constants in sfall.h)
|
||||||
this also takes the value of the flag (0x10000) to prevent immediate redrawing of the interface window
|
this also takes the value of the flag (0x10000) to prevent immediate redrawing of the interface window
|
||||||
@@ -755,6 +755,18 @@ optional arguments:
|
|||||||
index 0 - sprite direction for multi-directional FRM
|
index 0 - sprite direction for multi-directional FRM
|
||||||
index 1/index 2 - the new width/height to scale the image to. Pass -1 to use the original width/height
|
index 1/index 2 - the new width/height to scale the image to. Pass -1 to use the original width/height
|
||||||
|
|
||||||
|
> int sfall_func5("print_text", string text, int winType, int x, int y, int color)
|
||||||
|
> int sfall_func6("print_text", string text, int winType, int x, int y, int color, int width)
|
||||||
|
- displays the text in the specified interface window with the current font. Use vanilla SetFont function to set the font
|
||||||
|
- text: the text to be printed. Use the \n control character to move text to a new line (example: "Hello\nWorld!")
|
||||||
|
- winType: the type number of the interface window (see WINTYPE_* constants in sfall.h)
|
||||||
|
- x/y: offset relative to the top-left corner of the window
|
||||||
|
- color: the color index in Fallout palette. Pass 0 if the text color was previously set by vanilla SetTextColor function
|
||||||
|
it can also take additional flags (via bwor) for displaying text:
|
||||||
|
0x0010000 - adds a shadow to the text, the 'textshadow' compiler constant
|
||||||
|
0x2000000 - fills the background of the text with black color, the 'textnofill' compiler constant (works the other way around)
|
||||||
|
- width: the maximum width of the text. The text will be wrapped to fit within the specified width
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
------ MORE INFO -------
|
------ MORE INFO -------
|
||||||
------------------------
|
------------------------
|
||||||
|
|||||||
@@ -103,6 +103,10 @@ void dev_printf(...) {}
|
|||||||
__asm push arg8 \
|
__asm push arg8 \
|
||||||
WRAP_WATCOM_FCALL7(offs, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
WRAP_WATCOM_FCALL7(offs, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
|
||||||
|
|
||||||
|
#define WRAP_WATCOM_FCALL9(offs, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \
|
||||||
|
__asm push arg9 \
|
||||||
|
WRAP_WATCOM_FCALL8(offs, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
|
||||||
|
|
||||||
// prints message to debug.log file
|
// prints message to debug.log file
|
||||||
void __declspec(naked) debug_printf(const char* fmt, ...) {
|
void __declspec(naked) debug_printf(const char* fmt, ...) {
|
||||||
__asm jmp fo::funcoffs::debug_printf_;
|
__asm jmp fo::funcoffs::debug_printf_;
|
||||||
@@ -266,10 +270,10 @@ void __fastcall window_trans_cscale(long i_width, long i_height, long s_width, l
|
|||||||
push w_width;
|
push w_width;
|
||||||
push s_height;
|
push s_height;
|
||||||
push s_width;
|
push s_width;
|
||||||
mov ebx, edx; // i_height
|
|
||||||
mov edx, ecx; // i_width
|
|
||||||
call fo::funcoffs::windowGetBuffer_;
|
call fo::funcoffs::windowGetBuffer_;
|
||||||
add eax, xy_shift;
|
add eax, xy_shift;
|
||||||
|
mov ebx, edx; // i_height
|
||||||
|
mov edx, ecx; // i_width
|
||||||
push eax; // to_buff
|
push eax; // to_buff
|
||||||
mov eax, data;
|
mov eax, data;
|
||||||
call fo::funcoffs::trans_cscale_; // *from_buff<eax>, i_width<edx>, i_height<ebx>, i_width2<ecx>, to_buff, width, height, to_width
|
call fo::funcoffs::trans_cscale_; // *from_buff<eax>, i_width<edx>, i_height<ebx>, i_width2<ecx>, to_buff, width, height, to_width
|
||||||
@@ -481,6 +485,11 @@ long __fastcall get_game_config_string(const char* outValue, const char* section
|
|||||||
WRAP_WATCOM_FCALL8(name##_, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
|
WRAP_WATCOM_FCALL8(name##_, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define WRAP_WATCOM_FFUNC9(retType, name, arg1t, arg1, arg2t, arg2, arg3t, arg3, arg4t, arg4, arg5t, arg5, arg6t, arg6, arg7t, arg7, arg8t, arg8, arg9t, arg9) \
|
||||||
|
retType __fastcall name(arg1t arg1, arg2t arg2, arg3t arg3, arg4t arg4, arg5t arg5, arg6t arg6, arg7t arg7, arg8t arg8, arg9t arg9) { \
|
||||||
|
WRAP_WATCOM_FCALL9(name##_, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \
|
||||||
|
}
|
||||||
|
|
||||||
#include "Functions_def.h"
|
#include "Functions_def.h"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,6 +129,9 @@ long __fastcall get_game_config_string(const char* outValue, const char* section
|
|||||||
#define WRAP_WATCOM_FFUNC8(retType, name, arg1t, arg1, arg2t, arg2, arg3t, arg3, arg4t, arg4, arg5t, arg5, arg6t, arg6, arg7t, arg7, arg8t, arg8) \
|
#define WRAP_WATCOM_FFUNC8(retType, name, arg1t, arg1, arg2t, arg2, arg3t, arg3, arg4t, arg4, arg5t, arg5, arg6t, arg6, arg7t, arg7, arg8t, arg8) \
|
||||||
retType __fastcall name(arg1t arg1, arg2t arg2, arg3t arg3, arg4t arg4, arg5t arg5, arg6t arg6, arg7t arg7, arg8t arg8);
|
retType __fastcall name(arg1t arg1, arg2t arg2, arg3t arg3, arg4t arg4, arg5t arg5, arg6t arg6, arg7t arg7, arg8t arg8);
|
||||||
|
|
||||||
|
#define WRAP_WATCOM_FFUNC9(retType, name, arg1t, arg1, arg2t, arg2, arg3t, arg3, arg4t, arg4, arg5t, arg5, arg6t, arg6, arg7t, arg7, arg8t, arg8, arg9t, arg9) \
|
||||||
|
retType __fastcall name(arg1t arg1, arg2t arg2, arg3t arg3, arg4t arg4, arg5t arg5, arg6t arg6, arg7t arg7, arg8t arg8, arg9t arg9);
|
||||||
|
|
||||||
#include "Functions_def.h"
|
#include "Functions_def.h"
|
||||||
|
|
||||||
#undef WRAP_WATCOM_FUNC0
|
#undef WRAP_WATCOM_FUNC0
|
||||||
@@ -148,6 +151,7 @@ long __fastcall get_game_config_string(const char* outValue, const char* section
|
|||||||
#undef WRAP_WATCOM_FFUNC6
|
#undef WRAP_WATCOM_FFUNC6
|
||||||
#undef WRAP_WATCOM_FFUNC7
|
#undef WRAP_WATCOM_FFUNC7
|
||||||
#undef WRAP_WATCOM_FFUNC8
|
#undef WRAP_WATCOM_FFUNC8
|
||||||
|
#undef WRAP_WATCOM_FFUNC9
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ WRAP_WATCOM_FFUNC3(long, scr_set_local_var, long, sid, long, varId, long, value)
|
|||||||
WRAP_WATCOM_FFUNC3(long, tile_num_in_direction, long, tile, long, rotation,long, distance)
|
WRAP_WATCOM_FFUNC3(long, tile_num_in_direction, long, tile, long, rotation,long, distance)
|
||||||
WRAP_WATCOM_FFUNC8(void, trans_cscale, void*, fromBuff, long, width, long, height, long, pitch, void*, toBuff, long, toWidth, long, toHeight, long, toPitch)
|
WRAP_WATCOM_FFUNC8(void, trans_cscale, void*, fromBuff, long, width, long, height, long, pitch, void*, toBuff, long, toWidth, long, toHeight, long, toPitch)
|
||||||
WRAP_WATCOM_FFUNC3(void, win_clip, Window*, window, RectList**, rects, void*, buffer)
|
WRAP_WATCOM_FFUNC3(void, win_clip, Window*, window, RectList**, rects, void*, buffer)
|
||||||
|
WRAP_WATCOM_FFUNC9(long, windowWrapLineWithSpacing, long, winID, const char*, text, long, width, long, height, long, x, long, y, long, color, long, alignment, long, unknown)
|
||||||
|
|
||||||
WRAP_WATCOM_FFUNC3(const char*, interpretGetString, Program*, scriptPtr, DWORD, dataType, DWORD, strId)
|
WRAP_WATCOM_FFUNC3(const char*, interpretGetString, Program*, scriptPtr, DWORD, dataType, DWORD, strId)
|
||||||
|
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ void mf_intface_redraw(OpcodeContext& ctx) {
|
|||||||
if (ctx.arg(0).rawValue() == 0) {
|
if (ctx.arg(0).rawValue() == 0) {
|
||||||
fo::func::intface_redraw();
|
fo::func::intface_redraw();
|
||||||
} else {
|
} else {
|
||||||
fo::func::RefreshGNW(1); // redraw all interfaces
|
fo::func::RefreshGNW(2); // fake redraw all interfaces (TODO: need a real redraw of interfaces)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,6 +420,7 @@ void mf_hide_window(OpcodeContext& ctx) {
|
|||||||
void mf_set_window_flag(OpcodeContext& ctx) {
|
void mf_set_window_flag(OpcodeContext& ctx) {
|
||||||
long bitFlag = ctx.arg(1).rawValue();
|
long bitFlag = ctx.arg(1).rawValue();
|
||||||
switch (bitFlag) {
|
switch (bitFlag) {
|
||||||
|
case fo::WinFlags::DontMoveTop:
|
||||||
case fo::WinFlags::MoveOnTop:
|
case fo::WinFlags::MoveOnTop:
|
||||||
case fo::WinFlags::Hidden:
|
case fo::WinFlags::Hidden:
|
||||||
case fo::WinFlags::Exclusive:
|
case fo::WinFlags::Exclusive:
|
||||||
@@ -707,5 +708,39 @@ void mf_get_window_attribute(OpcodeContext& ctx) {
|
|||||||
ctx.setReturn(result);
|
ctx.setReturn(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mf_print_text(OpcodeContext& ctx) { // same as vanilla PrintRect
|
||||||
|
fo::Window* win = Interface::GetWindow(ctx.arg(1).rawValue());
|
||||||
|
if (win == nullptr || (int)win == -1) {
|
||||||
|
ctx.printOpcodeError("%s() - the game interface window is not created or invalid value for the interface.", ctx.getMetaruleName());
|
||||||
|
ctx.setReturn(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const char* text = ctx.arg(0).strValue();
|
||||||
|
long x = ctx.arg(2).rawValue();
|
||||||
|
long y = ctx.arg(3).rawValue();
|
||||||
|
long color = ctx.arg(4).rawValue();
|
||||||
|
long width = ctx.arg(5).rawValue();
|
||||||
|
|
||||||
|
int maxHeight = win->height - y;
|
||||||
|
int maxWidth = win->width - x;
|
||||||
|
if (width <= 0) {
|
||||||
|
width = maxWidth;
|
||||||
|
} else if (width > maxWidth) {
|
||||||
|
width = maxWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
color ^= 0x2000000; // fills background with black color if the flag is set
|
||||||
|
if ((color & 0xFF) == 0) {
|
||||||
|
__asm call fo::funcoffs::windowGetTextColor_; // set from SetTextColor
|
||||||
|
__asm mov byte ptr color, al;
|
||||||
|
}
|
||||||
|
if (color & 0x10000) { // shadow
|
||||||
|
fo::func::windowWrapLineWithSpacing(win->wID, text, width, maxHeight, x, y, 0x201000F, 0, 0);
|
||||||
|
color ^= 0x10000;
|
||||||
|
}
|
||||||
|
ctx.setReturn(fo::func::windowWrapLineWithSpacing(win->wID, text, width, maxHeight, x, y, color, 0, 0));
|
||||||
|
fo::func::GNW_win_refresh(win, &win->rect, 0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,5 +117,7 @@ void mf_unwield_slot(OpcodeContext&);
|
|||||||
|
|
||||||
void mf_get_window_attribute(OpcodeContext&);
|
void mf_get_window_attribute(OpcodeContext&);
|
||||||
|
|
||||||
|
void mf_print_text(OpcodeContext& ctx);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ static const SfallMetarule metarules[] = {
|
|||||||
{"obj_under_cursor", mf_obj_under_cursor, 2, 2, 0, {ARG_INT, ARG_INT}},
|
{"obj_under_cursor", mf_obj_under_cursor, 2, 2, 0, {ARG_INT, ARG_INT}},
|
||||||
{"objects_in_radius", mf_objects_in_radius, 3, 4, 0, {ARG_INT, ARG_INT, ARG_INT, ARG_INT}},
|
{"objects_in_radius", mf_objects_in_radius, 3, 4, 0, {ARG_INT, ARG_INT, ARG_INT, ARG_INT}},
|
||||||
{"outlined_object", mf_outlined_object, 0, 0},
|
{"outlined_object", mf_outlined_object, 0, 0},
|
||||||
|
{"print_text", mf_print_text, 5, 6, -1, {ARG_STRING, ARG_INT, ARG_INT, ARG_INT, ARG_INT, ARG_INT}},
|
||||||
{"real_dude_obj", mf_real_dude_obj, 0, 0},
|
{"real_dude_obj", mf_real_dude_obj, 0, 0},
|
||||||
{"remove_timer_event", mf_remove_timer_event, 0, 1, -1, {ARG_INT}},
|
{"remove_timer_event", mf_remove_timer_event, 0, 1, -1, {ARG_INT}},
|
||||||
{"set_can_rest_on_map", mf_set_rest_on_map, 3, 3, -1, {ARG_INT, ARG_INT, ARG_INT}},
|
{"set_can_rest_on_map", mf_set_rest_on_map, 3, 3, -1, {ARG_INT, ARG_INT, ARG_INT}},
|
||||||
|
|||||||
Reference in New Issue
Block a user