Skip to content

Commit

Permalink
added /opt.. slash commands to toggle client options (those in = menu)
Browse files Browse the repository at this point in the history
  • Loading branch information
CBlueGH committed Jun 15, 2021
1 parent 98fe8e1 commit 857d14e
Show file tree
Hide file tree
Showing 4 changed files with 258 additions and 22 deletions.
17 changes: 15 additions & 2 deletions TomeNET-Guide.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
.==========================================================================+--.
| TomeNET Guide |
+==========================================================================+-
| Latest update: 30. May 2021 - written by C. Blue (c_blue@gmx.net) |
| for TomeNET version v4.7.4a - official websites are: :
| Latest update: 15. June 2021 - written by C. Blue (c_blue@gmx.net) |
| for TomeNET version v4.7.4b - official websites are: :
| https://www.tomenet.eu/ (official main site, formerly www.tomenet.net)
| https://muuttuja.org/tomenet/ (Mikael's TomeNET site)
| Runes & Runemastery sections by Kurzel (kurzel.tomenet@gmail.com)
Expand Down Expand Up @@ -1523,6 +1523,19 @@ They all start with a slash '/' hence they're called slash commands:
/object
/obj Displays all objects known to you, same as ~4.

/opty <option>
/optvy <option>
Sets a client option to 'yes'. Eg: /opty big_map
The /optvy command will display a feedback message (v = verbose).
/optn <option>
/optvn <option>
Sets a client option to 'no'. Eg: /optn big_map
The /optvn command will display a feedback message (v = verbose).
/optt <option>
/optvt <option>
Toggles a client option between 'yes' or 'no'. Eg: /optt big_map
The /optvt command will display a feedback message (v = verbose).

/page <player-name> Sends beeps to that player to help you getting his
attention. (Using /ignore on a player will also
prevent getting paged by him.)
Expand Down
129 changes: 129 additions & 0 deletions src/client/c-cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -4639,6 +4639,135 @@ void cmd_message(void) {
c_msg_format("Destroy-all-unmatched mode (requires auto_destroy) is %s.", c_cfg.destroy_all_unmatched ? "on" : "off");
inkey_msg = FALSE;
return;
} else if (!strncasecmp(buf, "/opty", 5) || !strncasecmp(buf, "/optvy", 6)) {
bool redundant = FALSE, verbose;
int offset;

if (!strncasecmp(buf, "/opty", 5)) {
verbose = FALSE;
offset = 6;
if (buf[offset - 1] != ' ' || !buf[offset]) {
c_msg_print("Usage: /opty <option name>");
inkey_msg = FALSE;
return;
}
} else {
verbose = TRUE;
offset = 7;
if (buf[offset - 1] != ' ' || !buf[offset]) {
c_msg_print("Usage: /optvy <option name>");
inkey_msg = FALSE;
return;
}
}

for (i = 0; i < OPT_MAX; i++) {
if (!option_info[i].o_desc) continue;
if (strcmp(buf + offset, option_info[i].o_text)) continue;

if (*option_info[i].o_var) redundant = TRUE;
else {
options_immediate(TRUE);
*option_info[i].o_var = TRUE;
Client_setup.options[i] = TRUE;
options_immediate(FALSE);
}
break;
}
if (i == OPT_MAX) c_msg_format("Option '%s' does not exist.", buf + offset);
else if (redundant) {
if (verbose) c_msg_format("Option '%s' is already enabled.", buf + offset);
} else {
if (verbose) c_msg_format("Option '%s' has been enabled.", buf + offset);
check_immediate_options(i, *option_info[i].o_var, TRUE);
Send_options();
}
inkey_msg = FALSE;
return;
} else if (!strncasecmp(buf, "/optn", 5) || !strncasecmp(buf, "/optvn", 6)) {
bool redundant = FALSE, verbose;
int offset;

if (!strncasecmp(buf, "/optn", 5)) {
verbose = FALSE;
offset = 6;
if (buf[offset - 1] != ' ' || !buf[offset]) {
c_msg_print("Usage: /optn <option name>");
inkey_msg = FALSE;
return;
}
} else {
verbose = TRUE;
offset = 7;
if (buf[offset - 1] != ' ' || !buf[offset]) {
c_msg_print("Usage: /optvn <option name>");
inkey_msg = FALSE;
return;
}
}

for (i = 0; i < OPT_MAX; i++) {
if (!option_info[i].o_desc) continue;
if (strcmp(buf + offset, option_info[i].o_text)) continue;

if (!*option_info[i].o_var) redundant = TRUE;
else {
options_immediate(TRUE);
*option_info[i].o_var = FALSE;
Client_setup.options[i] = FALSE;
options_immediate(FALSE);
}
break;
}
if (i == OPT_MAX) c_msg_format("Option '%s' does not exist.", buf + offset);
else if (redundant) {
if (verbose) c_msg_format("Option '%s' is already disabled.", buf + offset);
} else {
if (verbose) c_msg_format("Option '%s' has been disabled.", buf + offset);
check_immediate_options(i, *option_info[i].o_var, TRUE);
Send_options();
}
inkey_msg = FALSE;
return;
} else if (!strncasecmp(buf, "/optt", 5) || !strncasecmp(buf, "/optvt", 6)) {
bool verbose;
int offset;

if (!strncasecmp(buf, "/optt", 5)) {
verbose = FALSE;
offset = 6;
if (buf[offset - 1] != ' ' || !buf[offset]) {
c_msg_print("Usage: /optt <option name>");
inkey_msg = FALSE;
return;
}
} else {
verbose = TRUE;
offset = 7;
if (buf[offset - 1] != ' ' || !buf[offset]) {
c_msg_print("Usage: /optt <option name>");
inkey_msg = FALSE;
return;
}
}

for (i = 0; i < OPT_MAX; i++) {
if (!option_info[i].o_desc) continue;
if (strcmp(buf + offset, option_info[i].o_text)) continue;
options_immediate(TRUE);
*option_info[i].o_var = !(*option_info[i].o_var);
Client_setup.options[i] = *option_info[i].o_var;
options_immediate(FALSE);
break;
}
if (i == OPT_MAX) c_msg_format("Option '%s' does not exist.", buf + offset);
else {
if (verbose) c_msg_format("Option '%s' has been toggled (%s).", buf + offset, *option_info[i].o_var ? "enabled" : "disabled");
check_immediate_options(i, *option_info[i].o_var, TRUE);
Send_options();
}
inkey_msg = FALSE;
return;
}

Send_msg(buf);
Expand Down
133 changes: 113 additions & 20 deletions src/client/c-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -5825,6 +5825,7 @@ void interact_macros(void) {
#define mw_slash 'n'
#define mw_custom 'N'
#define mw_load 'o'
#define mw_option 'O'
#define mw_equip 'p'
#define mw_dir_run 'q'
#define mw_dir_tunnel 'r'
Expand Down Expand Up @@ -5892,7 +5893,7 @@ void interact_macros(void) {
Term_putstr(8, l++, -1, TERM_L_GREEN, "l\377w/\377GL) Use a basic ability ('m') without \377w/\377G with target (Draconian breath).");
Term_putstr(8, l++, -1, TERM_L_GREEN, "m\377w/\377GM) Common commands and functions. \377w/\377G Pick breath element (Draconians).");
Term_putstr(8, l++, -1, TERM_L_GREEN, "n\377w/\377GN) Enter a slash command. \377w/\377G Enter a custom action (same as % a).");
Term_putstr(8, l++, -1, TERM_L_GREEN, "o\377w/\377Gp) Load a macro file. \377w/\377G Change equipment (wield/takeoff/swap).");
Term_putstr(6, l++, -1, TERM_L_GREEN, "o\377w/\377GO\377w/\377Gp) Load a macro file. \377w/\377G Modify an option. \377w/\377G Change equipment.");
Term_putstr(2, l++, -1, TERM_L_GREEN, "q\377w/\377Gr\377w/\377Gs\377w/\377Gt\377w/\377Gu) Directional running \377w/\377G tunneling \377w/\377G disarming \377w/\377G bashing \377w/\377G closing.");

while (TRUE) {
Expand All @@ -5911,7 +5912,7 @@ void interact_macros(void) {
if ((choice < 'a' || choice > mw_LAST) &&
choice != 'C' && choice != 'D' && choice != 'E' &&
choice != 'G' && choice != 'H' && choice != 'I' && choice != 'J' &&
choice != 'K' && choice != 'L' && choice != 'M' && choice != 'N') {
choice != 'K' && choice != 'L' && choice != 'M' && choice != 'N' && choice != 'O') {
//i = -1;
continue;
}
Expand Down Expand Up @@ -6326,6 +6327,48 @@ void interact_macros(void) {
Term_putstr(5, 16, -1, TERM_L_GREEN, "Exact file name:");
break;

case mw_option:
Term_putstr(5, 10, -1, TERM_GREEN, "Do you want to enable, disable or toggle (flip) an option?");
Term_putstr(5, 11, -1, TERM_L_GREEN, " y\377g) enable an option");
Term_putstr(5, 12, -1, TERM_L_GREEN, " n\377g) disable an option");
Term_putstr(5, 13, -1, TERM_L_GREEN, " t\377g) toggle an option");
Term_putstr(5, 15, -1, TERM_L_GREEN, " Y\377g) enable an option and display feedback message");
Term_putstr(5, 16, -1, TERM_L_GREEN, " N\377g) disable an option and display feedback message");
Term_putstr(5, 17, -1, TERM_L_GREEN, " T\377g) toggle an option and display feedback message");
/* hack: hide cursor */
Term->scr->cx = Term->wid;
Term->scr->cu = 1;

while (TRUE) {
switch (choice = inkey()) {
case ESCAPE:
case 'p':
case '\010': /* backspace */
i = -2; /* leave */
break;
case KTRL('T'):
/* Take a screenshot */
xhtml_screenshot("screenshot????");
continue;
case 'y': case 'n': case 't':
case 'Y': case 'N': case 'T':
break;
default:
continue;
}
break;
}
/* exit? */
if (i == -2) continue;

clear_from(10);
Term_putstr(5, 10, -1, TERM_GREEN, "Now please enter the exact name of an option, for example: \377Gbig_map");
Term_putstr(5, 12, -1, TERM_L_GREEN, "Enter exact option name: ");

j = choice;
choice = mw_option;
break;

case mw_equip:
Term_putstr(5, 10, -1, TERM_GREEN, "Do you want to wear/wield, take off or swap an item?");
Term_putstr(5, 11, -1, TERM_L_GREEN, " w\377g) primary wear/wield");
Expand Down Expand Up @@ -6703,6 +6746,7 @@ void interact_macros(void) {
choice != mw_dir_disarm && choice != mw_dir_bash && choice != mw_dir_close && choice != mw_prfele) {
if (choice == mw_load) Term_gotoxy(23, 16);
else if (choice == mw_poly) Term_gotoxy(47, 19);
else if (choice == mw_option) Term_gotoxy(30, 12);
else Term_gotoxy(47, 16);

/* Get an item/spell name */
Expand Down Expand Up @@ -6905,6 +6949,42 @@ void interact_macros(void) {
buf2[l + 2] = 0;
break;

case mw_option:
#if 0 /* actually invoke the options menu? */
buf2[3] = '%';
buf2[4] = 'z';
... implement locating the desired option ...
buf2[l] = '\\';
buf2[l + 1] = 'e';
buf2[l + 2] = '\\';
buf2[l + 3] = 'e';
buf2[l + 4] = 0;
#else /* use client-side option-toggling slash command? */
switch (j) {
case 'y':
strcat(buf2, ":/opty ");
break;
case 'n':
strcat(buf2, ":/optn ");
break;
case 't':
strcat(buf2, ":/optt ");
break;
case 'Y':
strcat(buf2, ":/optvy ");
break;
case 'N':
strcat(buf2, ":/optvn ");
break;
case 'T':
strcat(buf2, ":/optvt ");
break;
}
strcat(buf2, buf);
strcat(buf2, "\\n");
#endif
break;

case mw_equip:
if (!c_cfg.rogue_like_commands)
switch (j) {
Expand Down Expand Up @@ -7503,6 +7583,35 @@ void auto_inscriptions(void) {
inkey_msg = FALSE;
}

/* Helper function for option manipulation - check before and after, and refresh stuff if the changes made require it */
void options_immediate(bool init) {
static bool changed1, changed2, changed3;
static bool changed4a, changed4b, changed4c;
static bool changed5;

if (init) {
changed1 = c_cfg.exp_need; changed2 = c_cfg.exp_bar; changed3 = c_cfg.font_map_solid_walls;
changed4a = c_cfg.hp_bar; changed4b = c_cfg.mp_bar; changed4c = c_cfg.st_bar;
changed5 = c_cfg.equip_text_colour;
return;
}

/* for exp_need option changes: */
if (changed1 != c_cfg.exp_need || changed2 != c_cfg.exp_bar || changed3 != c_cfg.font_map_solid_walls)
prt_level(p_ptr->lev, p_ptr->max_lev, p_ptr->max_plv, p_ptr->max_exp, p_ptr->exp, exp_adv, exp_adv_prev);
/* in case hp/mp/st are displayed as bars,
or hp/mp/st have just been switched between number form and bar form */
if (changed3 != c_cfg.font_map_solid_walls ||
changed4a != c_cfg.hp_bar || changed4b != c_cfg.mp_bar || changed4c != c_cfg.st_bar) {
if (changed4a != c_cfg.hp_bar) hp_bar = c_cfg.hp_bar;
if (changed4b != c_cfg.mp_bar) sp_bar = c_cfg.mp_bar;
if (changed4c != c_cfg.st_bar) st_bar = c_cfg.st_bar;
prt_hp(hp_max, hp_cur, hp_bar, hp_boosted);
prt_sp(sp_max, sp_cur, sp_bar);
prt_stamina(st_max, st_cur, st_bar);
}
if (changed5 != c_cfg.equip_text_colour) p_ptr->window |= (PW_EQUIP);
}

/*
* Interact with some options
Expand Down Expand Up @@ -9135,9 +9244,7 @@ void do_cmd_options(void) {
int k;
char tmp[1024];

bool changed1 = c_cfg.exp_need, changed2 = c_cfg.exp_bar, changed3 = c_cfg.font_map_solid_walls;
bool changed4a = c_cfg.hp_bar, changed4b = c_cfg.mp_bar, changed4c = c_cfg.st_bar;
bool changed5 = c_cfg.equip_text_colour;
options_immediate(TRUE);

/* Save the screen */
Term_save();
Expand Down Expand Up @@ -9306,21 +9413,7 @@ void do_cmd_options(void) {
/* Verify the keymap */
keymap_init();

/* for exp_need option changes: */
if (changed1 != c_cfg.exp_need || changed2 != c_cfg.exp_bar || changed3 != c_cfg.font_map_solid_walls)
prt_level(p_ptr->lev, p_ptr->max_lev, p_ptr->max_plv, p_ptr->max_exp, p_ptr->exp, exp_adv, exp_adv_prev);
/* in case hp/mp/st are displayed as bars,
or hp/mp/st have just been switched between number form and bar form */
if (changed3 != c_cfg.font_map_solid_walls ||
changed4a != c_cfg.hp_bar || changed4b != c_cfg.mp_bar || changed4c != c_cfg.st_bar) {
if (changed4a != c_cfg.hp_bar) hp_bar = c_cfg.hp_bar;
if (changed4b != c_cfg.mp_bar) sp_bar = c_cfg.mp_bar;
if (changed4c != c_cfg.st_bar) st_bar = c_cfg.st_bar;
prt_hp(hp_max, hp_cur, hp_bar, hp_boosted);
prt_sp(sp_max, sp_cur, sp_bar);
prt_stamina(st_max, st_cur, st_bar);
}
if (changed5 != c_cfg.equip_text_colour) p_ptr->window |= (PW_EQUIP);
options_immediate(FALSE);

inkey_msg = inkey_msg_old;

Expand Down
1 change: 1 addition & 0 deletions src/client/externs.h
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,7 @@ extern void prt_lnum(cptr header, s32b num, int row, int col, byte color);
extern void interact_macros(void);
extern void auto_inscriptions(void);
extern void display_account_information(void);
extern void options_immediate(bool init);
extern void do_cmd_options(void);
extern void c_close_game(cptr reason);
extern void my_memfrob(void *s, int n);
Expand Down

0 comments on commit 857d14e

Please sign in to comment.