aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guess.c37
-rw-r--r--map.c12
-rw-r--r--puzzles.but16
-rw-r--r--undead.c26
4 files changed, 80 insertions, 11 deletions
diff --git a/guess.c b/guess.c
index a59e54e..949641a 100644
--- a/guess.c
+++ b/guess.c
@@ -411,20 +411,45 @@ static game_ui *new_ui(const game_state *state)
{
game_ui *ui = snew(game_ui);
memset(ui, 0, sizeof(game_ui));
- ui->params = state->params; /* structure copy */
- ui->curr_pegs = new_pegrow(state->params.npegs);
- ui->holds = snewn(state->params.npegs, bool);
+ if (state != NULL) {
+ ui->params = state->params; /* structure copy */
+ ui->curr_pegs = new_pegrow(state->params.npegs);
+ ui->holds = snewn(state->params.npegs, bool);
+ memset(ui->holds, 0, sizeof(bool)*state->params.npegs);
+ }
ui->display_cur = getenv_bool("PUZZLES_SHOW_CURSOR", false);
- memset(ui->holds, 0, sizeof(bool)*state->params.npegs);
ui->drag_opeg = -1;
return ui;
}
+static config_item *get_prefs(game_ui *ui)
+{
+ config_item *ret;
+
+ ret = snewn(2, config_item);
+
+ ret[0].name = "Label colours with numbers";
+ ret[0].kw = "show-labels";
+ ret[0].type = C_BOOLEAN;
+ ret[0].u.boolean.bval = ui->show_labels;
+
+ ret[1].name = NULL;
+ ret[1].type = C_END;
+
+ return ret;
+}
+
+static void set_prefs(game_ui *ui, const config_item *cfg)
+{
+ ui->show_labels = cfg[0].u.boolean.bval;
+}
+
static void free_ui(game_ui *ui)
{
if (ui->hint)
free_pegrow(ui->hint);
- free_pegrow(ui->curr_pegs);
+ if (ui->curr_pegs)
+ free_pegrow(ui->curr_pegs);
sfree(ui->holds);
sfree(ui);
}
@@ -1518,7 +1543,7 @@ const struct game thegame = {
free_game,
true, solve_game,
false, NULL, NULL, /* can_format_as_text_now, text_format */
- NULL, NULL, /* get_prefs, set_prefs */
+ get_prefs, set_prefs,
new_ui,
free_ui,
encode_ui,
diff --git a/map.c b/map.c
index 966ab75..127db04 100644
--- a/map.c
+++ b/map.c
@@ -2337,7 +2337,7 @@ static config_item *get_prefs(game_ui *ui)
{
config_item *ret;
- ret = snewn(2, config_item);
+ ret = snewn(3, config_item);
ret[0].name = "Victory flash effect";
ret[0].kw = "flash-type";
@@ -2346,8 +2346,13 @@ static config_item *get_prefs(game_ui *ui)
ret[0].u.choices.choicekws = ":cyclic:each-white:all-white";
ret[0].u.choices.selected = ui->flash_type;
- ret[1].name = NULL;
- ret[1].type = C_END;
+ ret[1].name = "Number regions";
+ ret[1].kw = "show-numbers";
+ ret[1].type = C_BOOLEAN;
+ ret[1].u.boolean.bval = ui->show_numbers;
+
+ ret[2].name = NULL;
+ ret[2].type = C_END;
return ret;
}
@@ -2355,6 +2360,7 @@ static config_item *get_prefs(game_ui *ui)
static void set_prefs(game_ui *ui, const config_item *cfg)
{
ui->flash_type = cfg[0].u.choices.selected;
+ ui->show_numbers = cfg[1].u.boolean.bval;
}
static void free_ui(game_ui *ui)
diff --git a/puzzles.but b/puzzles.but
index 1e0ebb7..c427d7b 100644
--- a/puzzles.but
+++ b/puzzles.but
@@ -1443,6 +1443,13 @@ that, use one extra colour.
this increases the search space (making things harder), and is turned on by
default.
+\H{guess-prefs} \I{preferences, for Guess}Guess user preferences
+
+On platforms that support user preferences, the \q{Preferences} option
+on the \q{Game} menu will let you configure whether pegs are labelled
+with their numbers. Unlike the \q{L} key, this will persist between
+games.
+
\C{pegs} \i{Pegs}
@@ -2004,7 +2011,7 @@ Unreasonable puzzles may require guessing and backtracking.
On platforms that support user preferences, the \q{Preferences} option
on the \q{Game} menu will let you configure the style of the victory
-flash.
+flash and also whether the regions start out labelled with numbers.
\C{loopy} \i{Loopy}
@@ -3288,6 +3295,13 @@ These parameters are available from the \q{Custom...} option on the
\dd Controls the difficulty of the generated puzzle.
+\H{undead-prefs} \I{preferences, for Undead}Undead user preferences
+
+On platforms that support user preferences, the \q{Preferences} option
+on the \q{Game} menu will let you configure whether Undead uses letters
+or pictures to represent monsters.
+
+
\C{unruly} \i{Unruly}
\cfg{winhelp-topic}{games.unruly}
diff --git a/undead.c b/undead.c
index 74dbefc..4784754 100644
--- a/undead.c
+++ b/undead.c
@@ -1656,6 +1656,30 @@ static game_ui *new_ui(const game_state *state)
return ui;
}
+static config_item *get_prefs(game_ui *ui)
+{
+ config_item *ret;
+
+ ret = snewn(2, config_item);
+
+ ret[0].name = "Monster representation";
+ ret[0].kw = "monsters";
+ ret[0].type = C_CHOICES;
+ ret[0].u.choices.choicenames = ":Pictures:Letters";
+ ret[0].u.choices.choicekws = ":pictures:letters";
+ ret[0].u.choices.selected = ui->ascii;
+
+ ret[1].name = NULL;
+ ret[1].type = C_END;
+
+ return ret;
+}
+
+static void set_prefs(game_ui *ui, const config_item *cfg)
+{
+ ui->ascii = cfg[0].u.choices.selected;
+}
+
static void free_ui(game_ui *ui) {
sfree(ui);
return;
@@ -2784,7 +2808,7 @@ const struct game thegame = {
free_game,
true, solve_game,
true, game_can_format_as_text_now, game_text_format,
- NULL, NULL, /* get_prefs, set_prefs */
+ get_prefs, set_prefs,
new_ui,
free_ui,
NULL, /* encode_ui */