return ret;
}
-static const game_params presets[] = {
+static const game_params loopy_presets_top[] = {
#ifdef SMALL_SCREEN
{ 7, 7, DIFF_EASY, LOOPY_GRID_SQUARE },
{ 7, 7, DIFF_NORMAL, LOOPY_GRID_SQUARE },
{ 7, 7, DIFF_HARD, LOOPY_GRID_SQUARE },
- { 7, 7, DIFF_HARD, LOOPY_GRID_HONEYCOMB },
{ 7, 7, DIFF_HARD, LOOPY_GRID_TRIANGULAR },
{ 5, 5, DIFF_HARD, LOOPY_GRID_SNUBSQUARE },
{ 7, 7, DIFF_HARD, LOOPY_GRID_CAIRO },
- { 5, 4, DIFF_HARD, LOOPY_GRID_GREATHEXAGONAL },
- { 5, 5, DIFF_HARD, LOOPY_GRID_OCTAGONAL },
{ 5, 5, DIFF_HARD, LOOPY_GRID_KITE },
- { 3, 3, DIFF_HARD, LOOPY_GRID_FLORET },
- { 3, 3, DIFF_HARD, LOOPY_GRID_DODECAGONAL },
- { 3, 3, DIFF_HARD, LOOPY_GRID_GREATDODECAGONAL },
- { 3, 2, DIFF_HARD, LOOPY_GRID_GREATGREATDODECAGONAL },
{ 6, 6, DIFF_HARD, LOOPY_GRID_PENROSE_P2 },
{ 6, 6, DIFF_HARD, LOOPY_GRID_PENROSE_P3 },
#else
{ 10, 10, DIFF_NORMAL, LOOPY_GRID_SQUARE },
{ 7, 7, DIFF_HARD, LOOPY_GRID_SQUARE },
{ 10, 10, DIFF_HARD, LOOPY_GRID_SQUARE },
- { 10, 10, DIFF_HARD, LOOPY_GRID_HONEYCOMB },
{ 12, 10, DIFF_HARD, LOOPY_GRID_TRIANGULAR },
{ 7, 7, DIFF_HARD, LOOPY_GRID_SNUBSQUARE },
{ 9, 9, DIFF_HARD, LOOPY_GRID_CAIRO },
+ { 5, 5, DIFF_HARD, LOOPY_GRID_KITE },
+ { 10, 10, DIFF_HARD, LOOPY_GRID_PENROSE_P2 },
+ { 10, 10, DIFF_HARD, LOOPY_GRID_PENROSE_P3 },
+#endif
+};
+
+static const game_params loopy_presets_more[] = {
+#ifdef SMALL_SCREEN
+ { 7, 7, DIFF_HARD, LOOPY_GRID_HONEYCOMB },
+ { 5, 4, DIFF_HARD, LOOPY_GRID_GREATHEXAGONAL },
+ { 5, 5, DIFF_HARD, LOOPY_GRID_OCTAGONAL },
+ { 3, 3, DIFF_HARD, LOOPY_GRID_FLORET },
+ { 3, 3, DIFF_HARD, LOOPY_GRID_DODECAGONAL },
+ { 3, 3, DIFF_HARD, LOOPY_GRID_GREATDODECAGONAL },
+ { 3, 2, DIFF_HARD, LOOPY_GRID_GREATGREATDODECAGONAL },
+#else
+ { 10, 10, DIFF_HARD, LOOPY_GRID_HONEYCOMB },
{ 5, 4, DIFF_HARD, LOOPY_GRID_GREATHEXAGONAL },
{ 7, 7, DIFF_HARD, LOOPY_GRID_OCTAGONAL },
- { 5, 5, DIFF_HARD, LOOPY_GRID_KITE },
{ 5, 5, DIFF_HARD, LOOPY_GRID_FLORET },
{ 5, 4, DIFF_HARD, LOOPY_GRID_DODECAGONAL },
{ 5, 4, DIFF_HARD, LOOPY_GRID_GREATDODECAGONAL },
{ 5, 3, DIFF_HARD, LOOPY_GRID_GREATGREATDODECAGONAL },
- { 10, 10, DIFF_HARD, LOOPY_GRID_PENROSE_P2 },
- { 10, 10, DIFF_HARD, LOOPY_GRID_PENROSE_P3 },
#endif
};
-static int game_fetch_preset(int i, char **name, game_params **params)
+static void preset_menu_add_preset_with_title(struct preset_menu *menu,
+ const game_params *params)
{
- game_params *tmppar;
char buf[80];
+ game_params *dup_params;
- if (i < 0 || i >= lenof(presets))
- return FALSE;
+ sprintf(buf, "%dx%d %s - %s", params->h, params->w,
+ gridnames[params->type], diffnames[params->diff]);
- tmppar = snew(game_params);
- *tmppar = presets[i];
- *params = tmppar;
- sprintf(buf, "%dx%d %s - %s", tmppar->h, tmppar->w,
- gridnames[tmppar->type], diffnames[tmppar->diff]);
- *name = dupstr(buf);
+ dup_params = snew(game_params);
+ *dup_params = *params;
- return TRUE;
+ preset_menu_add_preset(menu, dupstr(buf), dup_params);
+}
+
+static struct preset_menu *game_preset_menu(void)
+{
+ struct preset_menu *top, *more;
+ int i;
+
+ top = preset_menu_new();
+ for (i = 0; i < lenof(loopy_presets_top); i++)
+ preset_menu_add_preset_with_title(top, &loopy_presets_top[i]);
+
+ more = preset_menu_add_submenu(top, dupstr("More..."));
+ for (i = 0; i < lenof(loopy_presets_more); i++)
+ preset_menu_add_preset_with_title(more, &loopy_presets_more[i]);
+
+ return top;
}
static void free_params(game_params *params)
const struct game thegame = {
"Loopy", "games.loopy", "loopy",
default_params,
- game_fetch_preset, NULL,
+ NULL, game_preset_menu,
decode_params,
encode_params,
free_params,