chiark
/
gitweb
/
~ian
/
sgt-puzzles.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pearl: reinstate a conditioned-out assertion.
[sgt-puzzles.git]
/
pearl.c
diff --git
a/pearl.c
b/pearl.c
index ff1296449f56b9673da1a299a09b9a9916182a3e..f44365630d25ebbf4e4a80567c5522837ed099f5 100644
(file)
--- a/
pearl.c
+++ b/
pearl.c
@@
-1509,11
+1509,7
@@
static void dsf_update_completion(game_state *state, int *loopclass,
assert(INGRID(state, bx, by)); /* should not have a link off grid */
bc = by*w+bx;
assert(INGRID(state, bx, by)); /* should not have a link off grid */
bc = by*w+bx;
-#if 0
assert(state->lines[bc] & F(dir)); /* should have reciprocal link */
assert(state->lines[bc] & F(dir)); /* should have reciprocal link */
-#endif
- /* TODO put above assertion back in once we stop generating partially
- * soluble puzzles. */
if (!(state->lines[bc] & F(dir))) return;
ae = dsf_canonify(dsf, ac);
if (!(state->lines[bc] & F(dir))) return;
ae = dsf_canonify(dsf, ac);
@@
-1737,7
+1733,7
@@
static char *game_text_format(const game_state *state)
for (r = 0; r < h; ++r) {
for (c = 0; c < w; ++c) {
int i = r*w + c, cell = r*ch*gw + c*cw;
for (r = 0; r < h; ++r) {
for (c = 0; c < w; ++c) {
int i = r*w + c, cell = r*ch*gw + c*cw;
- board[cell] =
state->shared->clues[i]["+BW"
];
+ board[cell] =
"+BW"[(unsigned char)state->shared->clues[i]
];
if (c < w - 1 && (state->lines[i] & R || state->lines[i+1] & L))
memset(board + cell + 1, '-', cw - 1);
if (r < h - 1 && (state->lines[i] & D || state->lines[i+w] & U))
if (c < w - 1 && (state->lines[i] & R || state->lines[i+1] & L))
memset(board + cell + 1, '-', cw - 1);
if (r < h - 1 && (state->lines[i] & D || state->lines[i+w] & U))
@@
-2024,10
+2020,14
@@
static char *interpret_move(const game_state *state, game_ui *ui,
if (!ui->cursor_active) {
ui->cursor_active = TRUE;
} else if (control | shift) {
if (!ui->cursor_active) {
ui->cursor_active = TRUE;
} else if (control | shift) {
+ char *move;
if (ui->ndragcoords > 0) return NULL;
ui->ndragcoords = -1;
if (ui->ndragcoords > 0) return NULL;
ui->ndragcoords = -1;
-
return
mark_in_direction(state, ui->curx, ui->cury,
+
move =
mark_in_direction(state, ui->curx, ui->cury,
KEY_DIRECTION(button), control, tmpbuf);
KEY_DIRECTION(button), control, tmpbuf);
+ if (control && !shift && *move)
+ move_cursor(button, &ui->curx, &ui->cury, w, h, FALSE);
+ return move;
} else {
move_cursor(button, &ui->curx, &ui->cury, w, h, FALSE);
if (ui->ndragcoords >= 0)
} else {
move_cursor(button, &ui->curx, &ui->cury, w, h, FALSE);
if (ui->ndragcoords >= 0)
@@
-2054,6
+2054,11
@@
static char *interpret_move(const game_state *state, game_ui *ui,
}
}
}
}
+ if (button == 27 || button == '\b') {
+ ui->ndragcoords = -1;
+ return "";
+ }
+
if (release) {
if (ui->ndragcoords > 0) {
/* End of a drag: process the cached line data. */
if (release) {
if (ui->ndragcoords > 0) {
/* End of a drag: process the cached line data. */