aboutsummaryrefslogtreecommitdiff
path: root/loopy.c (follow)
Commit message (Collapse)AuthorAge
* Stop using CLUE2CHAR to translate clues into text; just do the obviousSimon Tatham2013-02-24
| | | | | | | | sprintf in both locations (screen and print) that need it. Fixes a bug in which clues greater than 9 came out as hex digits in printed puzzles. [originally from svn r9765]
* Stop the analysis pass in Loopy's redraw routine from beingSimon Tatham2013-01-19
| | | | | | | | | | | | | | | | | | conditionalised on !ds->started, so that we still do all the looping over everything even if we know it's all going to be redrawn. This is because deciding how much needs redrawing is not the only important thing in those loops - they also set up arrays like ds->clue_error, which tell the individual redraw functions _what_ to draw. Fixes a bug in which, if you start a Loopy game and make moves causing a clue to light up red for an error and then save your game, loading the same save file at the start of a Loopy run would fail to highlight the erroneous clue. (This commit diff looks large, but actually it changes almost nothing but whitespace.) [originally from svn r9751]
* New rule: interpret_move() is passed a pointer to the game_drawstateSimon Tatham2012-09-09
| | | | | | | | | | | | | | | | basically just so that it can divide mouse coordinates by the tile size, but is definitely not expected to _write_ to it, and it hadn't previously occurred to me that anyone might try. Therefore, interpret_move() now gets a pointer to a _const_ game_drawstate instead of a writable one. All existing puzzles cope fine with this API change (as long as the new const qualifier is also added to a couple of subfunctions to which interpret_move delegates work), except for the just-committed Undead, which somehow had ds->ascii and ui->ascii the wrong way round but is otherwise unproblematic. [originally from svn r9657]
* New puzzle! Or rather, new-ish, because this one has been lying aroundSimon Tatham2012-01-22
| | | | | | | | | | | | | in the 'unfinished' directory for a while, and has now been finished up thanks to James Harvey putting in some effort and galvanising me to put in the rest. This is 'Pearl', an implementation of Nikoli's 'Masyu'. The code in Loopy that generates a random loop along grid edges to use as the puzzle solution has been abstracted out into loopgen.[ch] so that Pearl can use it for its puzzle solutions too. I've also introduced a new utility module called 'tdq' (for 'to-do queue'). [originally from svn r9379]
* Changed my mind about midend_is_solved: I've now reprototyped it asSimon Tatham2011-06-19
| | | | | | | | | | | | | | | | midend_status(), and given it three return codes for win, (permanent) loss and game-still-in-play. Depending on what the front end wants to use it for, it may find any or all of these three states worth distinguishing from each other. (I suppose a further enhancement might be to add _non_-permanent loss as a fourth distinct status, to describe situations in which you can't play further without pressing Undo but doing so is not completely pointless. That might reasonably include dead-end situations in Same Game and Pegs, and blown-self-up situations in Mines and Inertia. However, I haven't done this at present.) [originally from svn r9179]
* Fix segfault in Loopy printing, introduced when I added the dynamicSimon Tatham2011-05-11
| | | | | | | | arrays 'textx' and 'texty' to the game_drawstate but failed to initialise them in the temporary drawstate used by game_print(). Thanks to Arun Giridhar for spotting this. [originally from svn r9173]
* Portability fixes, mostly from James for Palm purposes. MostlySimon Tatham2011-05-04
| | | | | | | | additions of missing 'static' and explicit 'void' in parameter lists, plus one or two other things like explicitly casting chars in variadic argument lists to int and using DBL_MAX if HUGE_VAL isn't available. [originally from svn r9166]
* Fix warnings generated by gcc 4.6.0 about variables set but notSimon Tatham2011-05-04
| | | | | | | | | | thereafter read. Most of these changes are just removal of pointless stuff or trivial reorganisations; one change is actually substantive, and fixes a bug in Keen's clue selection (the variable 'bad' was unreferenced not because I shouldn't have set it, but because I _should_ have referenced it!). [originally from svn r9164]
* Fix two memory leaks reported by Tiago Dionizio in recent LoopySimon Tatham2011-04-26
| | | | | | development. [originally from svn r9163]
* From James Harvey (via a period of collaborative polishing), a patchSimon Tatham2011-04-24
| | | | | | | | | | | | | | | | | | to add two kinds of Penrose tiling to the grid types supported by Loopy. This has involved a certain amount of infrastructure work, because of course the whole point of Penrose tilings is that they don't have to be the same every time: so now grid.c has grown the capacity to describe its grids as strings, and reconstitute them from those string descriptions. Hence a Penrose Loopy game description consists of a string identifying a particular piece of Penrose tiling, followed by the normal Loopy clue encoding. All the existing grid types decline to provide a grid description string, so their Loopy game descriptions have not changed encoding. [originally from svn r9159]
* Move most of face_text_pos() into grid.c, leaving in loopy.c only theSimon Tatham2011-04-23
| | | | | | | | | | part that converts from abstract grid coordinates into screen coordinates. This should speed up window-resizing by eliminating pointless reiteration of the complicated part of the algorithm: now when a game_drawstate is renewed, only the conversion into screen coordinates has to be redone. [originally from svn r9157]
* Replace my brute-force algorithm in face_text_pos with a more complexSimon Tatham2011-04-23
| | | | | | but faster and more mathematically sensible one. [originally from svn r9156]
* Stop calling face_text_pos() for faces that don't need to have text inSimon Tatham2011-04-23
| | | | | | them anyway. It's slow and pointless. [originally from svn r9155]
* Adjust the yellow used for LINE_UNKNOWN so that it's always a bitSimon Tatham2011-04-05
| | | | | | | darker than the background, because the Java front end demonstrates that it's a bit eyewatering when it _matches_ the background. [originally from svn r9145]
* Add a new deduction to Easy level, which is as small as I can make itSimon Tatham2011-04-03
| | | | | | | | | | to have the effect of enabling large Easy-level grids to be constructed in all grid types. Without this, some generations at Easy level (e.g. 'loopy --generate 1 7x7t9de') can spin forever because _even with all clues filled in_ the generated grids can't be solved at that level. [originally from svn r9143]
* Add a function to every game backend which indicates whether a gameSimon Tatham2011-04-02
| | | | | | | | | | | state is in a solved position, and a midend function wrapping it. (Or, at least, a situation in which further play is pointless. The point is, given that game state, would it be a good idea for a front end that does that sort of thing to proactively provide the option to start a fresh game?) [originally from svn r9140]
* Rework the Loopy grid drawing algorithm so that it doesn't assume whenSimon Tatham2011-04-02
| | | | | | | | | | | | | | | | it clears a clipping region that it knows what features will need redrawing in that region. Instead, I've moved all the clip/unclip/draw functionality out into a game_redraw_in_rect() function which checks _everything_ on the grid to see if it lies in the region. As far as I can tell the effect only shows up in grid types that aren't checked in, but it makes the code look nicer too. (It would be nicer still to avoid the brute-force loop over the whole grid checking it against the bounding box, particularly when we're drawing in multiple bounding boxes. But this will do for the moment.) [originally from svn r9138]
* Improve the algorithm for figuring out where the number should beSimon Tatham2011-04-02
| | | | | | | | | | | | drawn in a face: averaging the vertex positions works fine for regular or roughly regular convex polygons, but it'll start being a pain for odder or concave ones. This is a kludgey brute-force algorithm; I have ideas about more elegant ways of doing this job, but they're more fiddly, so I thought I'd start with something that basically worked. [originally from svn r9137]
* When a lot of edges meet the same point - and, in particular, whenSimon Tatham2011-04-02
| | | | | | | | | | they meet at sharp enough angles that the thick lines overlap noticeably outside the circle of the point - redrawing the edges in a different order each time looks ugly. Arrange to always redraw edges in order of colour, so that empty lines are drawn before indeterminate lines which in turn come before filled-in lines. [originally from svn r9136]
* Another patch from Chris Moore implementing two more grid types, bothSimon Tatham2011-02-24
| | | | | | involving dodecagons. [originally from svn r9109]
* Patch from Chris Moore to implement an extra grid type, the 'floret'Simon Tatham2011-02-23
| | | | | | pentagonal tiling. [originally from svn r9107]
* Patch from Mark Wooding to reorganise Loopy's redraw function to beSimon Tatham2010-05-29
| | | | | | | | properly antialiasing-safe: all redraws are now done by clearing a rectangle of the image, clipping to that rectangle, and redrawing everything in it exactly once. [originally from svn r8963]
* Patch from Mark Wooding to introduce a draw_thick_line() function inSimon Tatham2010-05-29
| | | | | | | | | | | | the drawing API, for use by Loopy. It's optional: drawing.c will construct an acceptable alternative using a filled polygon if the front end doesn't provide it. Net and Netslide previously had static functions called draw_thick_line(), whose claim to the name is less justified and so they've been renamed. [originally from svn r8962]
* Minor bug fixes from James Harvey.Simon Tatham2009-12-17
| | | | [originally from svn r8785]
* Patches from Frode Austvik to modify the effects of the mouseSimon Tatham2009-12-17
| | | | | | | | | | buttons in several games if STYLUS_BASED is defined: in games where you can set a puzzle element to 'on', 'off' or 'not yet set', when it's hard to mimic a second mouse button, it's better to have the one 'button' cycle between all three states rather than from 'on' back to 'unset'. [originally from svn r8784]
* Fix for the grid generation in the presence of particularly strangeSimon Tatham2009-11-16
| | | | | | grid types. [originally from svn r8750]
* More defensive-coding fixes from James H.Simon Tatham2009-07-01
| | | | [originally from svn r8605]
* Patch from Mark Wooding (though somewhat tampered with by me): haveSimon Tatham2009-06-21
| | | | | | | | | | | | Loopy mark LINE_NO grid edges with very faint lines, instead of leaving them totally undrawn. Helps in complex grid types where the line layout isn't entirely obvious to a player not already familiar with it. Disableable by setting LOOPY_FAINT_LINES=n in the environment, just in case anyone turns out to seriously dislike it. (You could probably disable it via LOOPY_COLOUR_6 too, but you'd have to know the exact shade of your background to get that right.) [originally from svn r8597]
* Patch from Lambros to make the Normal difficulty level easier, sinceSimon Tatham2009-01-07
| | | | | | | | | people have generally seemed to think Loopy is one of the more difficult puzzles in the collection. There's a new level called Tricky, between Normal and Hard, which is equivalent to the old Normal. [originally from svn r8398]
* Standalone solver for Loopy. Bit half-hearted, since the solverSimon Tatham2009-01-07
| | | | | | | | doesn't have diagnostics embedded and the ASCII formatter can't print non-square puzzles anyway; but it can grade difficulty, which is what I most immediately want it for. [originally from svn r8397]
* Patch from Lambros to improve the generality of path-generation. InSimon Tatham2008-11-04
| | | | | | | | particular, Great Hexagonal tilings previously had virtually every (if not _actually_ every) hexagon on the inside of the path, and now don't. [originally from svn r8277]
* Lambros points out that trying to generate a 3x3 Cairo Easy gridSimon Tatham2008-09-18
| | | | | | | | | | | | | spins forever, but observes that raising the limit to 4x4 across all grid types is not good for the complex grids like great-hexagonal. Introduce per-grid minimum sizes using mad macro trickery. (In fact, for each grid type I've put in a minimum size which _both_ dimensions must equal or exceed, plus another minimum size which _at least one_ must equal or exceed; that permits both 3x4 and 4x3 Cairo while disallowing 3x3.) [originally from svn r8191]
* Patch from Lambros implementing error highlighting in Loopy.Simon Tatham2008-09-18
| | | | [originally from svn r8190]
* Cosmetic: fix mismatch between game_compute_size() and game_redraw()Jacob Nevins2008-09-16
| | | | | | (was causing unwanted "drop-shadow" type effect). [originally from svn r8186]
* Since the lack of this has caused portability issues in the past:Simon Tatham2008-09-13
| | | | | | | add "-ansi -pedantic" to the main Unix makefile, and clean up a few minor problems pointed out thereby. [originally from svn r8175]
* Patch from James H to make new-Loopy port more easily.Simon Tatham2008-09-10
| | | | [originally from svn r8174]
* Having played new-Loopy a bit recently, I've had occasion to think aSimon Tatham2008-09-07
| | | | | | | bit harder about advanced solver techniques. Expand the comment at the top of the file. [originally from svn r8167]
* How did I manage to check this in without actually trying to buildSimon Tatham2008-09-07
| | | | | | | | | on Windows at all?! Fix some departures from the C standard, mostly declaring variables after a statement has already been issued in the same block. MSVC is picky about this where gcc is forgiving, and TBH I'd change the latter given the choice. [originally from svn r8166]
* Completely re-engineered version of Loopy, courtesy of LambrosSimon Tatham2008-09-06
| | | | | | | | | | | Lambrou. Now capable of handling triangular and hexagonal grids as well as square ones, and then a number of semiregular plane tilings and duals of semiregular ones. In fact, most of the solver code supports an _arbitrary_ planar graph (well, provided both the graph and its dual have no self-edges), so it could easily be extended further with only a little more effort. [originally from svn r8162]
* New infrastructure feature. Games are now permitted to beSimon Tatham2008-09-06
| | | | | | | | | | | | | | | | | | | | | | _conditionally_ able to format the current puzzle as text to be sent to the clipboard. For instance, if a game were to support playing on a square grid and on other kinds of grid such as hexagonal, then it might reasonably feel that only the former could be sensibly rendered in ASCII art; so it can now arrange for the "Copy" menu item to be greyed out depending on the game_params. To do this I've introduced a new backend function (can_format_as_text_now()), and renamed the existing static backend field "can_format_as_text" to "can_format_as_text_ever". The latter will cause compile errors for anyone maintaining a third-party front end; if any such person is reading this, I apologise to them for the inconvenience, but I did do it deliberately so that they'd know to update their front end. As yet, no checked-in game actually uses this feature; all current games can still either copy always or copy never. [originally from svn r8161]
* A user points out that Loopy's solver relies on elements of theSimon Tatham2007-07-05
| | | | | | | | `clues' array being able to be -1, so we must explicitly declare it as `signed char' or it will break on platforms whose default char is unsigned. [originally from svn r7636]
* Dariusz Olszewski's changes to support compiling for PocketPC. ThisSimon Tatham2007-02-26
| | | | | | | | | | | | is mostly done with ifdefs in windows.c; so mkfiles.pl generates a new makefile (Makefile.wce) and Recipe enables it, but it's hardly any different from Makefile.vc apart from a few definitions at the top of the files. Currently the PocketPC build is not enabled in the build script, but with any luck I'll be able to do so reasonably soon. [originally from svn r7337]
* Patch from James H which shouldn't change the functionality ofSimon Tatham2007-01-15
| | | | | | Loopy, but makes it build more sensibly on the Palm. [originally from svn r7114]
* HTML Help support for Puzzles, with the same kind of automaticSimon Tatham2006-12-24
| | | | | | fallback behaviour as PuTTY's support. [originally from svn r7009]
* Small printing fix from Gary Wong. Shows up when printing withSimon Tatham2006-12-21
| | | | | | | solutions: the rightmost and lowermost lines of the grid never get solution lines drawn on them. [originally from svn r7003]
* James H's Palm-compatibility updates to the latest Loopy changes,Simon Tatham2006-11-01
| | | | | | | working around bugs in the Palm compiler and removing Palm- incompatible diagnostics such as fprintf. [originally from svn r6889]
* Mike Pinna has done some major reworking of the Loopy solver, givingSimon Tatham2006-10-28
| | | | | | rise to a new Hard difficulty level. [originally from svn r6880]
* Cleanup patch from Ben Hutchings, fixing some odd-looking rangeSimon Tatham2006-05-20
| | | | | | | | checks. He thinks they were harmless (due to being followed by other range checks in RIGHTOF_DOT and friends) but it clearly can't hurt to fix them anyway. [originally from svn r6709]
* Patch from Ben Hutchings to prevent memory leakage during Loopy gameSimon Tatham2006-05-20
| | | | | | generation. [originally from svn r6708]
* Revert a change in an assertion made in r6299. It was right theSimon Tatham2006-01-05
| | | | | | | first time, and now has a comment explaining why! [originally from svn r6511] [r6299 == c389f623f66fe5296f7ef5c66d88884607b82cff]