Skip to content

Commit 7d0f100

Browse files
committed
Add SCC for run generic frozen script
1 parent c249c94 commit 7d0f100

File tree

10 files changed

+96
-23
lines changed

10 files changed

+96
-23
lines changed

resources/docs/zstrings.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@ If x is negative, y is used for the warp return point (0 to 3; 5 for pit warp).
144144
'state' is 1 to turn on, 0 to turn off
145145
\134\map\screen\flag\state - Same as \133 above, for a remote map/screen
146146

147+
\136\generic_script_id\force_redraw
148+
- Runs a generic script in the Frozen mode (see 'genericdata->RunFrozen()')
149+
If 'force_redraw' is not '0', it will force the whole screen to be redrawn
150+
before running the frozen script.
151+
147152
+-----------------------------+
148153
| AUDIO EFFECT CODES |
149154
+-----------------------------+

src/base/zdefs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3353,7 +3353,8 @@ enum { msLINKED };
33533353
#define MSGC_SETSCREENSTATE 133 // 2 args (ind, state)
33543354
#define MSGC_SETSCREENSTATER 134 // 4 args (map, screen, ind, state)
33553355
#define MSGC_FONT 135 // 1 args (font)
3356-
//132+
3356+
#define MSGC_RUN_FRZ_GENSCR 136 // 1 args (script num)
3357+
//137+
33573358

33583359
enum
33593360
{

src/dialog/init_data.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ extern zcmodule moduledata;
1616
extern char *item_string[];
1717
extern script_data *genericscripts[NUMSCRIPTSGENERIC];
1818

19+
void call_geninit_wzrd(zinitdata& start, size_t index)
20+
{
21+
InitGenscriptWizard(start,index).show();
22+
}
1923
void call_init_dlg(zinitdata& sourcezinit, bool zc)
2024
{
2125
InitDataDialog(sourcezinit, zc,

src/dialog/stringcontrolcode.cpp

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ extern zinitdata zinit;
1313
extern ListData dmap_list;
1414
extern bool sorted_fontdd;
1515

16+
void call_geninit_wzrd(zinitdata& start, size_t index);
17+
1618
static std::string retstr;
1719
static MsgStr const* refstr = nullptr;
1820
static MsgStr def_refstr;
@@ -92,6 +94,7 @@ const GUI::ListData SCCListData()
9294
ld.add("Trigger Screen Secrets", 132);
9395
ld.add("Set Current Screen State", 133);
9496
ld.add("Set Screen State", 134);
97+
ld.add("Run Frozen Generic Script", 136);
9598
return ld;
9699
}
97100

@@ -156,7 +159,8 @@ SCCDialog::SCCDialog() :
156159
list_weffect(GUI::ZCListData::warpeffects()),
157160
list_sfx(GUI::ZCListData::sfxnames(true)),
158161
list_midi(GUI::ZCListData::midinames(true)),
159-
list_screenstate(GUI::ZCListData::screenstate())
162+
list_screenstate(GUI::ZCListData::screenstate()),
163+
list_genscr(GUI::ZCListData::generic_script())
160164
{
161165
memset(args, 0, sizeof(args));
162166
default_args();
@@ -231,6 +235,7 @@ std::string scc_help(byte scc)
231235
case MSGC_SETSCREENSTATE: return "Set a state of the current screen";
232236
case MSGC_SETSCREENSTATER: return "Set a state of any screen";
233237
case MSGC_FONT: return "Change the text font of text after the SCC";
238+
case MSGC_RUN_FRZ_GENSCR: return "Run a generic script in the frozen mode.";
234239
}
235240
return "";
236241
}
@@ -996,6 +1001,37 @@ std::shared_ptr<GUI::Widget> SCCDialog::view()
9961001
);
9971002
break;
9981003
}
1004+
case MSGC_RUN_FRZ_GENSCR:
1005+
{
1006+
sgrid = Column(padding = 0_px, vAlign = 0.0,
1007+
Row(
1008+
TXT("Script to Run:"),
1009+
DropDownList(data = list_genscr,
1010+
fitParent = true,
1011+
selectedValue = cur_args[0],
1012+
onSelectFunc = [&](int32_t val)
1013+
{
1014+
cur_args[0] = val;
1015+
miscbtn->setDisabled(!val);
1016+
}
1017+
)
1018+
),
1019+
miscbtn = Button(text = "Edit Script InitData",
1020+
disabled = !cur_args[0],
1021+
onPressFunc = [&]()
1022+
{
1023+
if(int indx = cur_args[0])
1024+
call_geninit_wzrd(zinit,indx);
1025+
}),
1026+
Checkbox(text = "Force Redraw",
1027+
checked = cur_args[1]!=0,
1028+
onToggleFunc = [&](bool state)
1029+
{
1030+
cur_args[1] = state?1:0;
1031+
})
1032+
);
1033+
break;
1034+
}
9991035
default:
10001036
sgrid = Row(padding = 0_px, vAlign = 0.0,TXT("WIP!"));
10011037
break;

src/dialog/stringcontrolcode.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ class SCCDialog: public GUI::Dialog<SCCDialog>
3131
byte curscc;
3232
int32_t args[256][6];
3333
GUI::ListData list_sccs, list_shtype, list_strings, list_items, list_counters, list_dmaps,
34-
list_weffect, list_sfx, list_midi, list_screenstate, list_font, list_font_order;
34+
list_weffect, list_sfx, list_midi, list_screenstate, list_font, list_font_order,
35+
list_genscr;
3536
std::shared_ptr<GUI::DropDownList> fontlist;
37+
std::shared_ptr<GUI::Button> miscbtn;
3638
int32_t* cur_args;
3739
bool warp_xy_toggle;
3840

src/guys.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22692,6 +22692,7 @@ bool bottom_margin_clip()
2269222692
&& cursor_y >= (msg_h + (get_bit(quest_rules,qr_STRING_FRAME_OLD_WIDTH_HEIGHT)?16:0) - msg_margins[down]);
2269322693
}
2269422694

22695+
void update_msgstr();
2269522696
bool parsemsgcode()
2269622697
{
2269722698
if(msgptr>=MsgStrings[msgstr].s.size()) return false;
@@ -22880,6 +22881,18 @@ bool parsemsgcode()
2288022881
ssc_tile_hei_buf = mh;
2288122882
return true;
2288222883
}
22884+
case MSGC_RUN_FRZ_GENSCR:
22885+
{
22886+
word scr_id = grab_next_argument();
22887+
bool force_redraw = grab_next_argument()!=0;
22888+
if(force_redraw)
22889+
{
22890+
update_msgstr();
22891+
draw_screen(tmpscr);
22892+
}
22893+
FFCore.runGenericFrozenEngine(scr_id);
22894+
return true;
22895+
}
2288322896
case MSGC_DRAWTILE:
2288422897
{
2288522898
int32_t tl = grab_next_argument();

src/zc/zelda.cpp

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3242,6 +3242,28 @@ void do_dcounters()
32423242
sfx(sfx_to_use);
32433243
}
32443244
}
3245+
3246+
void update_msgstr()
3247+
{
3248+
if(!msgstr) return;
3249+
3250+
set_clip_state(msg_bg_display_buf, 0);
3251+
blit(msg_bg_bmp_buf, msg_bg_display_buf, 0, 0, msg_xpos, msg_ypos, msg_w+16, msg_h+16);
3252+
set_clip_state(msg_txt_display_buf, 0);
3253+
if(get_bit(quest_rules,qr_OLD_STRING_EDITOR_MARGINS)!=0)
3254+
{
3255+
blit(msg_txt_bmp_buf, msg_txt_display_buf, 0, 0, msg_xpos, msg_ypos, msg_w+16, msg_h+16);
3256+
masked_blit(msg_menu_bmp_buf, msg_txt_display_buf, 0, 0, msg_xpos, msg_ypos, msg_w+16, msg_h+16);
3257+
}
3258+
else
3259+
{
3260+
blit(msg_txt_bmp_buf, msg_txt_display_buf, msg_margins[left], msg_margins[up], msg_xpos+msg_margins[left], msg_ypos+msg_margins[up], msg_w-msg_margins[left]-msg_margins[right], msg_h-msg_margins[up]-msg_margins[down]);
3261+
masked_blit(msg_menu_bmp_buf, msg_txt_display_buf, msg_margins[left], msg_margins[up], msg_xpos+msg_margins[left], msg_ypos+msg_margins[up], msg_w-msg_margins[left]-msg_margins[right], msg_h-msg_margins[up]-msg_margins[down]);
3262+
}
3263+
set_clip_state(msg_portrait_display_buf, 0);
3264+
blit(msg_portrait_bmp_buf, msg_portrait_display_buf, 0, 0, prt_x, prt_y, prt_tw*16, prt_th*16);
3265+
}
3266+
32453267
extern bool do_end_str;
32463268
#define F7 46+7
32473269
//bool zasmstacktrace = false;
@@ -3709,24 +3731,7 @@ void game_loop()
37093731
{
37103732
putmsg();
37113733

3712-
if(msgstr)
3713-
{
3714-
set_clip_state(msg_bg_display_buf, 0);
3715-
blit(msg_bg_bmp_buf, msg_bg_display_buf, 0, 0, msg_xpos, msg_ypos, msg_w+16, msg_h+16);
3716-
set_clip_state(msg_txt_display_buf, 0);
3717-
if(get_bit(quest_rules,qr_OLD_STRING_EDITOR_MARGINS)!=0)
3718-
{
3719-
blit(msg_txt_bmp_buf, msg_txt_display_buf, 0, 0, msg_xpos, msg_ypos, msg_w+16, msg_h+16);
3720-
masked_blit(msg_menu_bmp_buf, msg_txt_display_buf, 0, 0, msg_xpos, msg_ypos, msg_w+16, msg_h+16);
3721-
}
3722-
else
3723-
{
3724-
blit(msg_txt_bmp_buf, msg_txt_display_buf, msg_margins[left], msg_margins[up], msg_xpos+msg_margins[left], msg_ypos+msg_margins[up], msg_w-msg_margins[left]-msg_margins[right], msg_h-msg_margins[up]-msg_margins[down]);
3725-
masked_blit(msg_menu_bmp_buf, msg_txt_display_buf, msg_margins[left], msg_margins[up], msg_xpos+msg_margins[left], msg_ypos+msg_margins[up], msg_w-msg_margins[left]-msg_margins[right], msg_h-msg_margins[up]-msg_margins[down]);
3726-
}
3727-
set_clip_state(msg_portrait_display_buf, 0);
3728-
blit(msg_portrait_bmp_buf, msg_portrait_display_buf, 0, 0, prt_x, prt_y, prt_tw*16, prt_th*16);
3729-
}
3734+
update_msgstr();
37303735
}
37313736
#if LOGGAMELOOP > 0
37323737
al_trace("game_loop is calling: %s\n", "do_dcounters()\n");

src/zq/gui/msgstr_preview.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ void put_msg_str(char const* s, int32_t x, int32_t y, MsgStr const* str, int32_t
186186
ssc_tile_hei = wf_hei;
187187
break;
188188
}
189+
case MSGC_RUN_FRZ_GENSCR:
190+
{
191+
int scr_id = grab_next_argument(s2, &i);
192+
bool force_redraw = grab_next_argument(s2, &i)!=0;
193+
break;
194+
}
189195
case MSGC_SHDCOLOR:
190196
{
191197
int32_t cset = grab_next_argument(s2, &i);

src/zq/zq_strings.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1153,7 +1153,7 @@ bool is_msgc(byte cc)
11531153
case MSGC_MENUCHOICE: case MSGC_RUNMENU:
11541154
case MSGC_GOTOMENUCHOICE: case MSGC_TRIGSECRETS:
11551155
case MSGC_SETSCREENSTATE: case MSGC_SETSCREENSTATER:
1156-
case MSGC_FONT:
1156+
case MSGC_FONT: case MSGC_RUN_FRZ_GENSCR:
11571157
return true;
11581158
}
11591159
return false;
@@ -1196,6 +1196,7 @@ int32_t msg_code_operands(byte cc)
11961196
case MSGC_GOTOIFRAND:
11971197
case MSGC_GOTOMENUCHOICE:
11981198
case MSGC_SETSCREENSTATE:
1199+
case MSGC_RUN_FRZ_GENSCR:
11991200
return 2;
12001201

12011202
case MSGC_NEWLINE:

webdocs/zsdocs_main.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
},
7777
{
7878
"name": "String Control Codes ;; SCCs",
79-
"val": "<h3>String Control Codes</h3> [[v|Rev March 30th, 2023 for 2.55 A113]] \n\nSpecial effects can be created when ${message strings} are displayed by inserting special control codes into the string. All valid codes are listed below.\n\n<h3>Formatting Codes</h3>\nThese codes have formatting effects on the string being displayed, such as changing the font, text color, or inserting characters or tiles into the message.\n#{<ul><li>`\\1\\cset\\color` : Changes the text color to the specified color.</li>\n<li>`\\26\\cset\\color` : Changes the shadow color to the specified color.</li>\n<li>`\\27\\[[shadow_type|$Shadow Type]]` : Changes the shadow type to the specified style.</li>\n<li>`\\2\\speed` : Changes the text speed. 'speed' is the number of frames between each character, where '0' is instantaneous.</li>\n<li>`\\135\\font` : Changes the text font. 'font' is the ID number of the new font to use.</li>\n<li>`\\25` : New Line - breaks to the next line</li>\n<li>`\\22` : Inserts the save file name as text</li>\n<li>`\\28\\tile\\cset\\[[width|In pixels]]\\[[height|In pixels]]\\flip` : Draws a tile block inline with the text, as though it were a custom font character.</li>\n<li>`\\32` through `\\126` : Inserts the corresponding ASCII character. Ex: `\\91` shows `\\`</li>\n<li>`\\24\\???` : Unimplemented; reserved for changing portrait</li></ul>}\n\n<h3>Menu Codes</h3>\nThese codes relate to popping up a menu for the player to select a choice from.\n#{<ul><li>`\\128\\tile\\cset\\width\\height\\flip` : Sets the menu cursor, args same as '\\28' above.</li>\n<li>`\\129\\pos\\up_pos\\down_pos\\left_pos\\right_pos` : Creates a menu cursor position. 'pos' is the index of this position, while the 4 directional values are the position that will be moved to when that direction is pressed. If a directional pos is the same as 'pos', that direction will be disabled.</li>\n<li>`\\130` : Start running menu. If no '\\129' codes have been run, the menu instantly exitswith the '0' pos selected.</li>\n<li>`\\131\\pos\\newstring` : Goto if menu selection. Switches to the new string if 'pos' is the selected menu position.</li></ul>}\n\n<h3>Switch Codes</h3>\nThese codes change from the current string immediately to a different string. If you attempt to switch to a string that does not exist, it will instead act as though you switched to a string that is entirely empty.\n#{<ul><li>`\\3\\register\\value\\newstring` : if `Screen->D[register] &gt;= value`, switches to `newstring`.</li>\n<li>`\\23\\dmap\\screen\\register\\value\\newstring` : Same as `\\3`, but for any screen.</li>\n<li>`\\4\\factor\\newstring` : Randomly has a `1/factor` chance to switch to `newstring`.</li>\n<li>`\\5\\itemid\\newstring` : Goes to `newstring` if the specified item is owned.</li>\n<li>`\\6\\counter\\value\\newstring` : Goto `newstring` if the specified counter is `>= value`.</li>\n<li>`\\7\\counter\\percent\\newstring` : Goto `newstring` if the specified counter is at least `percent` full.</li>\n<li>`\\8\\levelid\\newstring` : Goto `newstring` if the triforce from the specified level is owned.</li>\n<li>`\\9\\numtriforce\\newstring` : Goto `newstring` if at least `numtriforce` triforce pieces are owned.</li>\n<li>`\\131\\pos\\newstring` : Goto if menu selection. Switches to the new string if 'pos' is the selected menu position.</li></ul>}\n\n<h3>Counter Mod Codes</h3>\nThese codes all center around modifying counter values.\n#{<ul><li>`\\10\\ctr\\val` : Adds 'val' to 'ctr'.</li>\n<li>`\\11\\ctr\\val` : Subtracts 'val' from 'ctr'.</li>\n<li>`\\12\\ctr\\val` : Sets 'ctr' to 'val'.</li>\n<li>`\\13\\ctr\\percent` : Adds 'percent' % to 'ctr'.</li>\n<li>`\\14\\ctr\\percent` : Subtracts 'percent' % from 'ctr'.</li>\n<li>`\\15\\ctr\\percent` : Sets 'ctr' to 'percent' % full.</li>\n<li>`\\16\\itemid` : Gives the player 'itemid', silently. The item is not held up, nor does its' pickup script run; though its' counter effects will.</li>\n<li>`\\17\\itemid` : Takes 'itemid' from the player, silently. Its' pickup counter modifications will be reversed when removed.</li></ul>}\n\n<h3>Misc Codes</h3>\n#{<ul><li>`\\18\\dmap\\screen\\[[x\\y|<block>If `x &lt; 0`, then y is treated as a return square(0-3 for return squares A-D, 5 for pit warp).\nIf `x &gt;= 0`, then x+y act as destination coordinates.</block>]]\\[[effect|$WARPEFFECT_]]\\sound` : Warps the player to 'dmap,screen'.</li>\n<li>`\\19\\dmap\\screen\\register\\value` : Sets `Screen->D[register] = value;` for the specified screen.</li>\n<li>`\\20\\sfxid` : Plays a specified sfx</li>\n<li>`\\21\\MIDIid` : Plays a specified quest midi (cannot play the built-in midis)</li>\n<li>`\\29` : Immediately exits the current string. If there is a 'next string', it will begin immediately. The prompt to press 'A' to continue will be skipped.</li>\n<li>`\\30` : Pauses the string and prompts the player to press A to continue (as normally occurs at the end of a string)</li>\n<li>`\\132\\perm` : Triggers secrets, which are permanent unless 'perm' is '0'</li>\n<li>`\\133\\[[flag|Use the 'ST_' constants from 'std_constants.zh']]\\[[state|1 for on, 0 for off]]` : Sets a screen state on the current screen.</li>\n<li>`\\134\\map\\screen\\[[flag|Use the 'ST_' constants from 'std_constants.zh']]\\[[state|1 for on, 0 for off]]` : Same as \\133 above, for a remote map/screen</li></ul>}"
79+
"val": "<h3>String Control Codes</h3> [[v|Rev April 16th, 2023 for 2.55 A114]] \n\nSpecial effects can be created when ${message strings} are displayed by inserting special control codes into the string. All valid codes are listed below.\n\n<h3>Formatting Codes</h3>\nThese codes have formatting effects on the string being displayed, such as changing the font, text color, or inserting characters or tiles into the message.\n#{<ul><li>`\\1\\cset\\color` : Changes the text color to the specified color.</li>\n<li>`\\26\\cset\\color` : Changes the shadow color to the specified color.</li>\n<li>`\\27\\[[shadow_type|$Shadow Type]]` : Changes the shadow type to the specified style.</li>\n<li>`\\2\\speed` : Changes the text speed. 'speed' is the number of frames between each character, where '0' is instantaneous.</li>\n<li>`\\135\\font` : Changes the text font. 'font' is the ID number of the new font to use.</li>\n<li>`\\25` : New Line - breaks to the next line</li>\n<li>`\\22` : Inserts the save file name as text</li>\n<li>`\\28\\tile\\cset\\[[width|In pixels]]\\[[height|In pixels]]\\flip` : Draws a tile block inline with the text, as though it were a custom font character.</li>\n<li>`\\32` through `\\126` : Inserts the corresponding ASCII character. Ex: `\\91` shows `\\`</li>\n<li>`\\24\\???` : Unimplemented; reserved for changing portrait</li></ul>}\n\n<h3>Menu Codes</h3>\nThese codes relate to popping up a menu for the player to select a choice from.\n#{<ul><li>`\\128\\tile\\cset\\width\\height\\flip` : Sets the menu cursor, args same as '\\28' above.</li>\n<li>`\\129\\pos\\up_pos\\down_pos\\left_pos\\right_pos` : Creates a menu cursor position. 'pos' is the index of this position, while the 4 directional values are the position that will be moved to when that direction is pressed. If a directional pos is the same as 'pos', that direction will be disabled.</li>\n<li>`\\130` : Start running menu. If no '\\129' codes have been run, the menu instantly exitswith the '0' pos selected.</li>\n<li>`\\131\\pos\\newstring` : Goto if menu selection. Switches to the new string if 'pos' is the selected menu position.</li></ul>}\n\n<h3>Switch Codes</h3>\nThese codes change from the current string immediately to a different string. If you attempt to switch to a string that does not exist, it will instead act as though you switched to a string that is entirely empty.\n#{<ul><li>`\\3\\register\\value\\newstring` : if `Screen->D[register] &gt;= value`, switches to `newstring`.</li>\n<li>`\\23\\dmap\\screen\\register\\value\\newstring` : Same as `\\3`, but for any screen.</li>\n<li>`\\4\\factor\\newstring` : Randomly has a `1/factor` chance to switch to `newstring`.</li>\n<li>`\\5\\itemid\\newstring` : Goes to `newstring` if the specified item is owned.</li>\n<li>`\\6\\counter\\value\\newstring` : Goto `newstring` if the specified counter is `>= value`.</li>\n<li>`\\7\\counter\\percent\\newstring` : Goto `newstring` if the specified counter is at least `percent` full.</li>\n<li>`\\8\\levelid\\newstring` : Goto `newstring` if the triforce from the specified level is owned.</li>\n<li>`\\9\\numtriforce\\newstring` : Goto `newstring` if at least `numtriforce` triforce pieces are owned.</li>\n<li>`\\131\\pos\\newstring` : Goto if menu selection. Switches to the new string if 'pos' is the selected menu position.</li></ul>}\n\n<h3>Counter Mod Codes</h3>\nThese codes all center around modifying counter values.\n#{<ul><li>`\\10\\ctr\\val` : Adds 'val' to 'ctr'.</li>\n<li>`\\11\\ctr\\val` : Subtracts 'val' from 'ctr'.</li>\n<li>`\\12\\ctr\\val` : Sets 'ctr' to 'val'.</li>\n<li>`\\13\\ctr\\percent` : Adds 'percent' % to 'ctr'.</li>\n<li>`\\14\\ctr\\percent` : Subtracts 'percent' % from 'ctr'.</li>\n<li>`\\15\\ctr\\percent` : Sets 'ctr' to 'percent' % full.</li>\n<li>`\\16\\itemid` : Gives the player 'itemid', silently. The item is not held up, nor does its' pickup script run; though its' counter effects will.</li>\n<li>`\\17\\itemid` : Takes 'itemid' from the player, silently. Its' pickup counter modifications will be reversed when removed.</li></ul>}\n\n<h3>Misc Codes</h3>\n#{<ul><li>`\\18\\dmap\\screen\\[[x\\y|<block>If `x &lt; 0`, then y is treated as a return square(0-3 for return squares A-D, 5 for pit warp).\nIf `x &gt;= 0`, then x+y act as destination coordinates.</block>]]\\[[effect|$WARPEFFECT_]]\\sound` : Warps the player to 'dmap,screen'.</li>\n<li>`\\19\\dmap\\screen\\register\\value` : Sets `Screen->D[register] = value;` for the specified screen.</li>\n<li>`\\20\\sfxid` : Plays a specified sfx</li>\n<li>`\\21\\MIDIid` : Plays a specified quest midi (cannot play the built-in midis)</li>\n<li>`\\29` : Immediately exits the current string. If there is a 'next string', it will begin immediately. The prompt to press 'A' to continue will be skipped.</li>\n<li>`\\30` : Pauses the string and prompts the player to press A to continue (as normally occurs at the end of a string)</li>\n<li>`\\132\\perm` : Triggers secrets, which are permanent unless 'perm' is '0'</li>\n<li>`\\133\\[[flag|Use the 'ST_' constants from 'std_constants.zh']]\\[[state|1 for on, 0 for off]]` : Sets a screen state on the current screen.</li>\n<li>`\\134\\map\\screen\\[[flag|Use the 'ST_' constants from 'std_constants.zh']]\\[[state|1 for on, 0 for off]]` : Same as \\133 above, for a remote map/screen</li>\n<li>`\\136\\generic_script_id\\[[force_redraw|If !=0, force the entire screen to redraw before running the frozen script.]]` : Run the specified generic script, in the ${genericdata::RunFrozen|RunFrozen} mode.</li></ul>}"
8080
},
8181
{
8282
"name": "Quest Rules ;; quest_rules / qrs",

0 commit comments

Comments
 (0)