From bbb9da3f8ce19421e7fe9f12e7401f7d84989cc0 Mon Sep 17 00:00:00 2001 From: Antoine Cellerier Date: Sat, 16 Jun 2007 23:12:41 +0000 Subject: [PATCH] Add "Puzzle" game type to jewels. Idea from Sam Hocevar's MonsterZ (http://sam.zoy.org/monsterz). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13644 a1c6a512-1295-4272-9138-f99709370657 --- .../bitmaps/native/jewels.112x64x1.bmp | Bin 318 -> 798 bytes .../bitmaps/native/jewels.128x128x16.bmp | Bin 4982 -> 14222 bytes .../bitmaps/native/jewels.138x110x2.bmp | Bin 2742 -> 5862 bytes .../bitmaps/native/jewels.160x128x16.bmp | Bin 6200 -> 17718 bytes .../bitmaps/native/jewels.160x128x2.bmp | Bin 3126 -> 6966 bytes .../bitmaps/native/jewels.220x176x16.bmp | Bin 12024 -> 34462 bytes .../bitmaps/native/jewels.320x240x16.bmp | Bin 22136 -> 63534 bytes apps/plugins/jewels.c | 234 +++++++++++++++--- 8 files changed, 202 insertions(+), 32 deletions(-) diff --git a/apps/plugins/bitmaps/native/jewels.112x64x1.bmp b/apps/plugins/bitmaps/native/jewels.112x64x1.bmp index 447df6d1da4372ce3ef1ced77f6d788ccc2d6be1..f245f330e5346804623d3a64ca75c8e36896f439 100644 GIT binary patch literal 798 zcmaiuu?oUK5JXqgh?e%&enmL!{il3@pCEpRoo5;J7nF#Vh?Rwf#W|B?aFGO0p0hWz zdz-~_mRWsr{LjG{Y{39Oo@!_|oiv~{!jn?6do;TOp0bhpE??^N6fygQ&-otbe2>rN ztB+ct;RdMQ*M9oSHSg8un(xcytB;z2L#y1Wy;7fR-mA|w-~&161C%zd+puXaDg5-uwwF delta 71 ucmbQowvWly$=8mN0SxSbqy`Xk0kH!RGXfzPKq&|ZLH_^$f3qwTBO?IerUvu? diff --git a/apps/plugins/bitmaps/native/jewels.128x128x16.bmp b/apps/plugins/bitmaps/native/jewels.128x128x16.bmp index c22c8d917ecaaba8dd2d9cb50e55df56081905c5..0061df3c3d91da102c7ad77b145c6f013ca01fd1 100644 GIT binary patch literal 14222 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 delta 66 zcmeCn|E8wndp^sd_M}Q@eoy{EBCzl0a0UN%)-U)EFlRj*b418Ev zSRhG~BuJVxDJ(55kt|sUMT!(inKC6( zrAh@yM@Kk0Ilt`Qhj1hXMr(z~A2=0RaIhSg;@p6)J?ng$tudks>Hs zv?z)dD~965i=#w|5-3@+Bmx5iQL0oa1O)}5bm`J4Q>F~cmMx2N<;o#AI2h&2mq&#P z6;QEaMO3O(2_YdN2n`KI<;s;278ZsoRjQzB)vBmgts1IVuZ|iuYM^G#n$YQVs8y>L zYS*rfI(6!xZr!@5SFawz!^2U(etk4(&;Sh^HbkRFjnKGpV?;zmph=S^h>VOx)22<) ztXVTOZ{8d&TC_mRmMzh$RV%b^-5PD$v_adpZPBh>JG5`#9vwP#K*x?9(Wz4>bne_4 zUAlBZ*REaBty?#A@7^6fdh|fgo;}g4S1rIE)`Z z9up=^z{H6YF=^5yOrAU$Q>IM8)TvW3ZQ3+UpFSNkX3W6MnKLnK)-24PJsWf8%)#8b zb1`q;Jj|az9}5;Nz`}(Kv1rjEEMB}AOO`Cb(xpqWY}qm_U%nhsQBhd2Vg**NT!~ey zR$=w()mXD;4c4w*i*@VPVg35`*sx&(Hg4RAO`A4h^XARivSkalZrzG)+qPl*_U(v{ zj>e81JFs)-PVCyX3%hsk#-2TUuy^lX?Ax~w`}gn1fddC{@ZdolI&=t!4*e_z;gCJ;LM1kMZQm6FhzT6wjVL!}I6Q5f>MS7cXAm<;$0N_39PkBkvc`vlb(*i6(L?ps!2;AdP5uLH zpoM_QU&KNH(YB^F4SyTkAa?^S_Se$WPHXpIUkIr+@igT_POHGb(;tD}ztZzh>Z!go zk@<$PFM$vZHhceMhzZs9!^mGFiqhI>?w3Td=ucS7CuO9!0T%a1^f!mac+coygZzob z(;6Fz@)z|QIe((@qFs!4>gr=EUZJPh|BW8v#D`2%fl9ysB>o+GjP^%-o{Iey`X9z#*h5M5 zZ|KMG(DSSP_h3J=Tr_%YgzsDaeA3#*?`xqyM*S80DPnW+S>oy`*Duj9;$tq}+Q;#y z@z%c126l7#ME>+Xr|pjrPbNOtx-$KfIF{apsi0in?EcXE_RstUeMb8s_DAq1sLjuN zp{d7+N=vev9uggeKXg%AehfxQ3*4WeURp>DlbQXP<_=`1WIFcqnleb3LAJ_|L{lox zk364Djwni4rEd}|esVlduErB0N>oa!XTYD!(My8J&M+^Sz?Zpe?BpQmXA7GAtO|)! z>uYo`oSQ%3@o`a(R(GsthO z*GQkp|0kIDlMzw-NxM%&;ll|F{PbLo+%L0y&GHxe$plJ-d4FW?bTWbY{i?B(7@k2n zY5PZ)4q|#98(&m?F8q^p05mi29ehM_9k9pBxUi>Jv zTeCk=#4q9cVgJHn3+nZzXFBQnqMl0egxMzn(}FGmOOFF}|0#-wQeS0jaz9iLDN2PV J^!=~xe*p>VR0041 delta 50 ucmaE+yG>NZ$#)wU0~naGFfeEUS-e1;0mO_99ANPVwv8%cESs|gYS;kBY6n&T diff --git a/apps/plugins/bitmaps/native/jewels.160x128x16.bmp b/apps/plugins/bitmaps/native/jewels.160x128x16.bmp index 5d9606d012713fe91ab89b0e2d034336bb2ade48..68745645851eb67b016403e0d37e47121f57ff84 100644 GIT binary patch literal 17718 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 Rv>%hl9xIPK@CWR`zX8rP0-FE; delta 72 zcmdni#kj-3%*oe6f&mQ7fTRWx3jlEg5Hm7BB$$Ad5H|z^g~4F5qOs-XeBI;XObiSF DGUf;A diff --git a/apps/plugins/bitmaps/native/jewels.160x128x2.bmp b/apps/plugins/bitmaps/native/jewels.160x128x2.bmp index 603925f14524cc6f7ba1d5168b8a866a8bb7c6af..f6b5e9ea61cb524597c82faeba5936a70e455201 100644 GIT binary patch literal 6966 zcmd^DWq8~;5PfONn5LLg$|-YGNHHlhrp(OD%*@Q(ZpzGzDKj%OGi7havSUk|Tra)+ z=zTZex3=EQ=xJuOmL+?a^-Ks&Ji`KMsO3Vx_D+BkA__x1AXXIdBPAO&adL7(m@r}B z?CgxNVZ$O^xNry`K0G2sh=7O@BO+3yNQfLcGNMF@f~ZlWB3iU)h#oyUV#J667Z(@A zj2RQIuC9m`D;8qMj*U2R;vjC^xQG`o9^%K34>vbABuJ0|2@@tnqC|<1IB{YmNsw;pyp#T)A=~ckbNClP3@I=FJN) zFE8ZFmk;^#=SP781yHbHK@=)f2!#t5hPSsje0+RRq(~7IEm{=CiWNig;>A&-LesK21`QgZVZ(-K)Tj{}H*Sn3 zO`4!-)23+FtQnd&Z;lo%TA*dimT1+g6XxFYC+P80y4jnq6W5kj z7&mSl#*ZJ52@@t@;>3xVG-(nhPo9h^Q>I|*)Tx*@Z5pOepN<(bW?<&bnV2s#UA7di83oS+fRf*RI97b?dNx{d#QJumKx4Zp5Zdo3MHFW^CEA1zWdn z#kOtRuzmY>?AWmbJ9qBHu3fvZd-rba*|P_G_wL2MefzL~|9%`eZ~zAn9>k$Thj94t zVH`Pf1pfa1IC}IbjvYIO{ z3%GdkA}(FJgv*yN({U2#*G`edGjW2-MWR_w{PRlojbUD_b%?; zyNCPt@8iLP2YC4KAs#(?gvXB`44yo;`bp=g*(x#fuks`SK-Ry?TY$uV3TM zn>Tp-_ATDMdx!V$-{ZrF5BT`;BR+llgwLNp&S+xcgA)m8y+32~)=GBk^U$yve_kc62)_|kgd5=P_W7A+2nObR$o8s@{Gfa`#Y z6?a}c+-Nx?;g*{lkK!1w8lQ^kVGkzWp!w(_l>AjbnpDZo@rnFtt&Aj=Rc_J3sfe1d ziWPTWA0-i^{JB?pk4U2Cqvoq()t}x09^o}5w>&(8o-cKNR7@|OVCE~dE2+k>Vl`hC ztN!$!lO(j`4Z5DRa7*=4>q!f=Wap^O$i(w0GBNqBnEAx>FYGE7zI-+N(_5Xy#M~0% zs;wsm;`Kp|*I+XIe}(C#Bjuy=(MwLU2gS!aBYxT}0TH4{HL#kminXrVg(LQ%O^YFB zmVa)`asFweN83^N1izQR;G^9c31=Ph^`A>=)+-Kebe)||9NI0%{ArU4#LtrU_wp}K zn@>YRJ67g%tS4<$EcJ4Ho@m1=+0FWLONfXxRpIOeX@jl%o9mshPx$UncG{TecD*y* zgq`-*6{BfNf%)nfuljtdmZM2wfY5~WV31H)g#o9IvbKV8iD|Kye$f1XC=NJR%5Js&myK37+foi@n9%7o&4vKoemj)lYeN&$6O`pusX9VjKNK2LN|lk95$UtyI`#lPyW+SUFlrjH;YikA+z+H9mS@*_y;845Cse07H)u;fpfNqn5CG@f0Fhr*KM4O!N{rn_hcX0A8%T9_q) zsK4n)rLar~2W**so+_?~ULGxa4O1r?ny%EDC!6njELJvFIbibDUByj-c3*=@@(La( z{W%tkGXd)XiQ}}Km_+!23WhW~f5>AFf|MOK=*J5FX^{W_!h!$&cIu=-_MmEL1<^xb z1=lGsB2s8P7KO#iS_K9={<@*f1Lw~|dH7QNhG_G{lf^U~A>RY@Gad-TA#lP)0Sq(u zUb;3}@}GK*<&apt;a;(oIZfW#E9V14@`Y$*j#6 z$6(XzK?+}*CQ6fMmkpGXR!T10i8cgm zq_Ar`9s6ktyRp8}%0~|NKupf;U}8VJ=pd$;K6kSNsZ31tR;-OjQzXVC3yTqtHu)mv Kf1cz2*7Glo0=u99 delta 54 zcmdmHwoO9C$=8gB0SwGo7#K8wECC>H0AfZ44j>5x92-@{SSE{!C~uAxzR3;%!h#2d diff --git a/apps/plugins/bitmaps/native/jewels.220x176x16.bmp b/apps/plugins/bitmaps/native/jewels.220x176x16.bmp index 36d4f51249c5e5123c67bca04c873a58b298a57d..64f54b03919eea27522fbc01caf889e4682d796f 100644 GIT binary patch literal 34462 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 delta 72 zcmbQ&%k(4G#L4%E9s?Md0Z9!Y76al9K+MP>0VEk14guwbxFHxUz%Y42W9VkXh-^KU H6rcbAvq}pI diff --git a/apps/plugins/bitmaps/native/jewels.320x240x16.bmp b/apps/plugins/bitmaps/native/jewels.320x240x16.bmp index 201c178183496af87b1197ef4860c95677a2b728..67b2d16541aa290ad9d8727aa8be1db378e86a6e 100644 GIT binary patch delta 6958 zcmeydhH>2oW)&x2y&nuLfLIQQH!(3VFfvGh#eaOCsA4d2qufL@xyb@N3fNep zV1*#!KN6Uzs}9mYBS~!TfQo%o@SUV+2SJk;h)H-LIqE;$sc;7IvJ*Fo412RCqlX?a z-tmMr?IIX&y20-v{IYlrrjaBb7omsuuuoys%tcsIYvJSt3a*7kUEfi>t3 zW~{y#Dp5eLJF$6sXx4lv)g9DZrtn&il*RzCJ3oXpVv9kX;}?ibNu%x`USkoqlg`3x zFpVVfxN14t(UX%0Ez&HH7yS^y`*0Mppa%m4rY delta 91 zcmZ4Yf%(T8Mja>LiZBK+FawerKr9EuAAp#VK>|oJFgO9_g}6a@vI3*VWP|$P&GCzT bWti&gC$HNV1){k2gQ(4E`;S?$fJ^}ZWNH=E diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c index c6efcbccef..20fb60c808 100644 --- a/apps/plugins/jewels.c +++ b/apps/plugins/jewels.c @@ -203,15 +203,22 @@ PLUGIN_HEADER /* animation frame rate */ #define MAX_FPS 20 +/* Game types */ +enum game_type { + GAME_TYPE_NORMAL, + GAME_TYPE_PUZZLE +}; + /* menu values */ #define FONT_HEIGHT 8 -#define MAX_MITEMS 5 +#define MAX_MITEMS 6 #define MENU_WIDTH 100 /* menu results */ enum menu_result { MRES_NONE, MRES_NEW, + MRES_PUZZLE, MRES_SAVE, MRES_RESUME, MRES_SCORES, @@ -240,8 +247,9 @@ struct jewels_menu { enum menu_result res; } items[MAX_MITEMS]; } bjmenu[] = { - {"Jewels", false, 0, 5, + {"Jewels", false, 0, 6, {{"New Game", MRES_NEW}, + {"Puzzle", MRES_PUZZLE}, {"Resume Game", MRES_RESUME}, {"High Scores", MRES_SCORES}, {"Help", MRES_HELP}, @@ -283,19 +291,76 @@ struct tile { * score is the current level score * segments is the number of cleared segments in the current run * level is the current level + * type is the game type (normal or puzzle) * highscores is the list of high scores * resume denotes whether to resume the currently loaded game * dirty denotes whether the high scores are out of sync with the saved file * playboard is the game playing board (first row is hidden) + * num_jewels is the number of different jewels to use */ struct game_context { unsigned int score; unsigned int segments; unsigned int level; + unsigned int type; unsigned int highscores[NUM_SCORES]; bool resume; bool dirty; struct tile playboard[BJ_HEIGHT][BJ_WIDTH]; + unsigned int num_jewels; +}; + +#define MAX_NUM_JEWELS 7 + +#define MAX_PUZZLE_TILES 4 +#define NUM_PUZZLE_LEVELS 10 + +struct puzzle_tile { + int x; + int y; + int tile_type; +}; + +struct puzzle_level { + unsigned int num_jewels; + unsigned int num_tiles; + struct puzzle_tile tiles[MAX_PUZZLE_TILES]; +}; + +#define PUZZLE_TILE_UP 1 +#define PUZZLE_TILE_DOWN 2 +#define PUZZLE_TILE_LEFT 4 +#define PUZZLE_TILE_RIGHT 8 + +struct puzzle_level puzzle_levels[NUM_PUZZLE_LEVELS] = { + { 5, 2, { {3, 3, PUZZLE_TILE_RIGHT}, + {4, 2, PUZZLE_TILE_LEFT} } }, + { 5, 2, { {3, 2, PUZZLE_TILE_DOWN}, + {3, 4, PUZZLE_TILE_UP} } }, + { 6, 3, { {3, 2, PUZZLE_TILE_DOWN}, + {3, 4, PUZZLE_TILE_UP|PUZZLE_TILE_DOWN}, + {3, 6, PUZZLE_TILE_UP} } }, + { 6, 3, { {3, 2, PUZZLE_TILE_RIGHT}, + {4, 3, PUZZLE_TILE_LEFT|PUZZLE_TILE_RIGHT}, + {5, 4, PUZZLE_TILE_LEFT} } }, + { 6, 2, { {3, 4, PUZZLE_TILE_RIGHT}, + {4, 2, PUZZLE_TILE_LEFT} } }, + { 6, 2, { {3, 2, PUZZLE_TILE_DOWN}, + {4, 4, PUZZLE_TILE_UP} } }, + { 7, 4, { {3, 2, PUZZLE_TILE_LEFT|PUZZLE_TILE_DOWN}, + {4, 3, PUZZLE_TILE_LEFT|PUZZLE_TILE_UP}, + {3, 4, PUZZLE_TILE_RIGHT|PUZZLE_TILE_DOWN}, + {4, 4, PUZZLE_TILE_RIGHT|PUZZLE_TILE_UP} } }, + { 6, 3, { {3, 2, PUZZLE_TILE_DOWN}, + {4, 4, PUZZLE_TILE_UP|PUZZLE_TILE_DOWN}, + {3, 6, PUZZLE_TILE_UP} } }, + { 7, 3, { {2, 2, PUZZLE_TILE_RIGHT}, + {4, 1, PUZZLE_TILE_LEFT|PUZZLE_TILE_RIGHT}, + {5, 4, PUZZLE_TILE_LEFT} } }, + { 7, 4, { {3, 0, PUZZLE_TILE_LEFT|PUZZLE_TILE_DOWN}, + {5, 0, PUZZLE_TILE_LEFT|PUZZLE_TILE_UP}, + {2, 7, PUZZLE_TILE_RIGHT|PUZZLE_TILE_DOWN}, + {4, 7, PUZZLE_TILE_RIGHT|PUZZLE_TILE_UP} } }, }; /***************************************************************************** @@ -574,7 +639,7 @@ static void jewels_putjewels(struct game_context* bj){ done = true; for(j=0; jplayboard[1][j].type == 0) { - bj->playboard[0][j].type = rb->rand()%7+1; + bj->playboard[0][j].type = rb->rand()%bj->num_jewels+1; } for(i=BJ_HEIGHT-2; i>=0; i--) { if(!mark && bj->playboard[i+1][j].type == 0) { @@ -584,7 +649,7 @@ static void jewels_putjewels(struct game_context* bj){ if(mark) bj->playboard[i][j].falling = true; } /*if(bj->playboard[1][j].falling) { - bj->playboard[0][j].type = rb->rand()%7+1; + bj->playboard[0][j].type = rb->rand()%bj->num_jewels+1; bj->playboard[0][j].falling = true; }*/ mark = false; @@ -697,7 +762,8 @@ static unsigned int jewels_clearjewels(struct game_context* bj) { run = 1; for(j=0; jplayboard[i][j].type == last && - bj->playboard[i][j].type != 0) { + bj->playboard[i][j].type != 0 && + bj->playboard[i][j].type <= MAX_NUM_JEWELS) { run++; if(run == 3) { @@ -723,7 +789,8 @@ static unsigned int jewels_clearjewels(struct game_context* bj) { run = 1; for(i=1; iplayboard[i][j].type != 0 && - bj->playboard[i][j].type == last) { + bj->playboard[i][j].type == last && + bj->playboard[i][j].type <= MAX_NUM_JEWELS) { run++; if(run == 3) { @@ -930,6 +997,7 @@ static bool jewels_movesavail(struct game_context* bj) { for(i=1; iplayboard[i][j].type; + if(mytype == 0 || mytype > MAX_NUM_JEWELS) continue; /* check horizontal patterns */ if(j <= BJ_WIDTH-3) { @@ -1014,6 +1082,91 @@ static bool jewels_movesavail(struct game_context* bj) { return moves; } +/***************************************************************************** +* jewels_puzzle_is_finished(bj) checks if the puzzle is finished. +******************************************************************************/ +static int jewels_puzzle_is_finished(struct game_context* bj) { + unsigned int i, j; + for(i=0; iplayboard[i][j].type; + if(mytype>MAX_NUM_JEWELS) { + mytype -= MAX_NUM_JEWELS; + if(mytype&PUZZLE_TILE_UP) { + if(i==0 || bj->playboard[i-1][j].type<=MAX_NUM_JEWELS || + !((bj->playboard[i-1][j].type-MAX_NUM_JEWELS) + &PUZZLE_TILE_DOWN)) + return 0; + } + if(mytype&PUZZLE_TILE_DOWN) { + if(i==BJ_HEIGHT-1 || + bj->playboard[i+1][j].type<=MAX_NUM_JEWELS || + !((bj->playboard[i+1][j].type-MAX_NUM_JEWELS) + &PUZZLE_TILE_UP)) + return 0; + } + if(mytype&PUZZLE_TILE_LEFT) { + if(j==0 || bj->playboard[i][j-1].type<=MAX_NUM_JEWELS || + !((bj->playboard[i][j-1].type-MAX_NUM_JEWELS) + &PUZZLE_TILE_RIGHT)) + return 0; + } + if(mytype&PUZZLE_TILE_RIGHT) { + if(j==BJ_WIDTH-1 || + bj->playboard[i][j+1].type<=MAX_NUM_JEWELS || + !((bj->playboard[i][j+1].type-MAX_NUM_JEWELS) + &PUZZLE_TILE_LEFT)) + return 0; + } + } + } + } + return 1; +} + +/***************************************************************************** +* jewels_initlevel() initialises a level. +******************************************************************************/ +static unsigned int jewels_initlevel(struct game_context* bj) { + unsigned int points = 0; + + switch(bj->type) { + case GAME_TYPE_NORMAL: + bj->num_jewels = MAX_NUM_JEWELS; + break; + + case GAME_TYPE_PUZZLE: + { + unsigned int i, j; + struct puzzle_tile *tile; + + bj->num_jewels = puzzle_levels[bj->level-1].num_jewels; + + for(i=0; iplayboard[i][j].type = (rand()%bj->num_jewels)+1; + bj->playboard[i][j].falling = false; + bj->playboard[i][j].delete = false; + } + } + jewels_runboard(bj); + tile = puzzle_levels[bj->level-1].tiles; + for(i=0; ilevel-1].num_tiles; i++, tile++) { + bj->playboard[tile->y][tile->x].type = MAX_NUM_JEWELS + +tile->tile_type; + } + } + break; + } + + jewels_drawboard(bj); + + /* run the play board */ + jewels_putjewels(bj); + points += jewels_runboard(bj); + return points; +} + /***************************************************************************** * jewels_nextlevel() advances the game to the next level and returns * points earned. @@ -1022,30 +1175,34 @@ static unsigned int jewels_nextlevel(struct game_context* bj) { int i, x, y; unsigned int points = 0; - /* roll over score, change and display level */ - while(bj->score >= LEVEL_PTS) { - bj->score -= LEVEL_PTS; - bj->level++; - rb->splash(HZ*2, "Level %d", bj->level); - jewels_drawboard(bj); + switch(bj->type) { + case GAME_TYPE_NORMAL: + /* roll over score, change and display level */ + while(bj->score >= LEVEL_PTS) { + bj->score -= LEVEL_PTS; + bj->level++; + rb->splash(HZ*2, "Level %d", bj->level); + jewels_drawboard(bj); + } + + /* randomly clear some jewels */ + for(i=0; i<16; i++) { + x = rb->rand()%8; + y = rb->rand()%8; + + if(bj->playboard[y][x].type != 0) { + points++; + bj->playboard[y][x].type = 0; + } + } + break; + + case GAME_TYPE_PUZZLE: + bj->level++; + break; } - /* randomly clear some jewels */ - for(i=0; i<16; i++) { - x = rb->rand()%8; - y = rb->rand()%8; - - if(bj->playboard[y][x].type != 0) { - points++; - bj->playboard[y][x].type = 0; - } - } - jewels_drawboard(bj); - - /* run the play board */ - jewels_putjewels(bj); - points += jewels_runboard(bj); - return points; + return jewels_initlevel(bj); } /***************************************************************************** @@ -1207,6 +1364,12 @@ static int jewels_main(struct game_context* bj) { switch(res) { case MRES_NEW: startgame = true; + bj->type = GAME_TYPE_NORMAL; + continue; + + case MRES_PUZZLE: + startgame = true; + bj->type = GAME_TYPE_PUZZLE; continue; case MRES_RESUME: @@ -1396,9 +1559,7 @@ static int jewels_main(struct game_context* bj) { /******************** * setup the board * ********************/ - jewels_drawboard(bj); - jewels_putjewels(bj); - bj->score += jewels_runboard(bj); + bj->score += jewels_initlevel(bj); if (!jewels_movesavail(bj)) return BJ_LOSE; /********************** @@ -1572,7 +1733,16 @@ static int jewels_main(struct game_context* bj) { break; } - if(bj->score >= LEVEL_PTS) bj->score = jewels_nextlevel(bj); + switch(bj->type) { + case GAME_TYPE_NORMAL: + if(bj->score >= LEVEL_PTS) bj->score = jewels_nextlevel(bj); + break; + + case GAME_TYPE_PUZZLE: + if(jewels_puzzle_is_finished(bj)) + bj->score += jewels_nextlevel(bj); + break; + } } }