Overview
Comment: | Implement loading/saving the move list |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
eb23399aef22ffb7ff90733828378fbf |
User & Date: | user on 2021-01-08 02:29:43 |
Other Links: | manifest | tags |
Context
2021-01-08
| ||
09:14 | Implement defining the CollisionLayers value for a class. check-in: 34870ce7e8 user: user tags: trunk | |
02:29 | Implement loading/saving the move list check-in: eb23399aef user: user tags: trunk | |
00:32 | Change read_lump function; also add read_userstate and write_userstate. check-in: 7dab93e8a9 user: user tags: trunk | |
Changes
Modified game.c from [e1f2a7b97d] to [537835c926].
︙ | ︙ | |||
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | else strcpy(buf," "); } SDL_LockSurface(screen); draw_text(0,40,buf,0xF0,0xF1); SDL_UnlockSurface(screen); SDL_Flip(screen); } static void begin_level(int id) { const char*t; inputs_count=0; replay_pos=0; t=load_level(id)?:init_level(); if(t) { gameover=-1; screen_message(t); } else { gameover=0; } timerflag=0; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | else strcpy(buf," "); } SDL_LockSurface(screen); draw_text(0,40,buf,0xF0,0xF1); SDL_UnlockSurface(screen); SDL_Flip(screen); } static void end_level(void) { long sz=replay_size; if(!replay_list) return; if(sz<replay_count+4) { replay_list=realloc(replay_list,sz=replay_count+4); if(!replay_list) fatal("Allocation failed\n"); replay_size=(sz>0xFFFF?0xFFFF:sz); } sz=replay_count+4; replay_list[sz-4]=replay_mark>>8; replay_list[sz-3]=replay_mark; replay_list[sz-2]=replay_count>>8; replay_list[sz-1]=replay_count; write_userstate(FIL_LEVEL,level_id,sz,replay_list); } static void begin_level(int id) { const char*t; long sz; if(replay_count) end_level(); inputs_count=0; replay_pos=0; t=load_level(id)?:init_level(); free(replay_list); replay_list=read_userstate(FIL_LEVEL,level_id,&sz); if(sz>=2) { replay_size=(sz>0xFFFF?0xFFFF:sz); replay_count=(replay_list[sz-2]<<8)|replay_list[sz-1]; if(sz-replay_count>=4) replay_mark=(replay_list[replay_count]<<8)|replay_list[replay_count+1]; else replay_mark=0; } else { replay_count=replay_mark=replay_size=0; free(replay_list); replay_list=0; } if(t) { gameover=-1; screen_message(t); } else { gameover=0; } timerflag=0; |
︙ | ︙ | |||
557 558 559 560 561 562 563 564 565 566 567 568 569 570 | if(t) { screen_message(t); gameover=-1; return; } if(!key_ignored) { if(replay_pos>=replay_size) { replay_list=realloc(replay_list,replay_size+=0x200); if(!replay_list) fatal("Allocation failed\n"); } replay_list[replay_pos++]=k; if(replay_pos>replay_count) replay_count=replay_pos; } } | > > | 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 | if(t) { screen_message(t); gameover=-1; return; } if(!key_ignored) { if(replay_pos>=replay_size) { if(replay_size>0xFDFF) replay_size=0xFDFF; if(replay_size+0x200<=replay_pos) fatal("Confusion in input_move function\n"); replay_list=realloc(replay_list,replay_size+=0x200); if(!replay_list) fatal("Allocation failed\n"); } replay_list[replay_pos++]=k; if(replay_pos>replay_count) replay_count=replay_pos; } } |
︙ | ︙ | |||
580 581 582 583 584 585 586 | SDL_SetTimer(10,timer_callback); while(SDL_WaitEvent(&ev)) { switch(ev.type) { case SDL_VIDEOEXPOSE: redraw_game(); break; case SDL_QUIT: | | | 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 | SDL_SetTimer(10,timer_callback); while(SDL_WaitEvent(&ev)) { switch(ev.type) { case SDL_VIDEOEXPOSE: redraw_game(); break; case SDL_QUIT: goto quit; break; case SDL_MOUSEMOTION: show_mouse_xy(&ev); break; case SDL_USEREVENT: if(!gameover && !quiz_text) continue_animation(); timerflag=0; |
︙ | ︙ | |||
609 610 611 612 613 614 615 | } else { i=exec_key_binding(&ev,0,(ev.button.x-left_margin)/picture_size+1,ev.button.y/picture_size+1,game_command,0); goto command; } case SDL_KEYDOWN: i=exec_key_binding(&ev,0,0,0,game_command,0); command: | | > > > | 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 | } else { i=exec_key_binding(&ev,0,(ev.button.x-left_margin)/picture_size+1,ev.button.y/picture_size+1,game_command,0); goto command; } case SDL_KEYDOWN: i=exec_key_binding(&ev,0,0,0,game_command,0); command: if(i==-1) goto quit; if(i==-2) { main_options['e']=1; SDL_SetTimer(0,0); return; } replay: if(inputs_count) { //TODO: Check for solution replay for(i=0;i<inputs_count && !gameover;i++) if(inputs[i]) input_move(inputs[i]); inputs_count=0; } redraw_game(); timerflag=0; // ensure we have not missed a timer event break; } } quit: end_level(); exit(0); } void locate_me(int x,int y) { Uint8 c=7; SDL_Rect r,rh,rv; SDL_Event ev; if(!screen) return; |
︙ | ︙ |
Modified main.c from [926b9dec50] to [46407c4aee].
︙ | ︙ | |||
507 508 509 510 511 512 513 | if(stat(nam2,&fst)) fatal("Unable to stat '%s': %m\n",nam2); if(!fst.st_size) fatal("File '%s' has zero size\n",nam2); if(fst.st_mtime>t1 || fst.st_ctime>t1) leveluc=reset_usercache(levelfp,nam2,&fst,".LVL"); if(stat(nam3,&fst)) fatal("Unable to stat '%s': %m\n",nam3); if(fst.st_mtime>t2 || fst.st_ctime>t2) solutionuc=reset_usercache(solutionfp,nam3,&fst,".SOL"); free(nam2); free(nam3); | | | 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 | if(stat(nam2,&fst)) fatal("Unable to stat '%s': %m\n",nam2); if(!fst.st_size) fatal("File '%s' has zero size\n",nam2); if(fst.st_mtime>t1 || fst.st_ctime>t1) leveluc=reset_usercache(levelfp,nam2,&fst,".LVL"); if(stat(nam3,&fst)) fatal("Unable to stat '%s': %m\n",nam3); if(fst.st_mtime>t2 || fst.st_ctime>t2) solutionuc=reset_usercache(solutionfp,nam3,&fst,".SOL"); free(nam2); free(nam3); if(z=sqlite3_prepare_v3(userdb,"SELECT `OFFSET`, CASE WHEN ?3 THEN `USERSTATE` ELSE `DATA` END " "FROM `USERCACHEDATA` WHERE `FILE` = ?1 AND `LEVEL` = ?2;",-1,SQLITE_PREPARE_PERSISTENT,&readusercachest,0)) { fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); } if(z=sqlite3_exec(userdb,"COMMIT;",0,0,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); fprintf(stderr,"Done\n"); } |
︙ | ︙ |