︙ | | | ︙ | |
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
static volatile Uint8 timerflag;
static int exam_scroll;
static Uint8*inputs;
static int inputs_size,inputs_count;
static Uint8 side_mode=255;
static Uint8 should_record_solution;
static void setup_game(void) {
const char*v;
optionquery[1]=Q_showInventory;
v=xrm_get_resource(resourcedb,optionquery,optionquery,2)?:"";
side_mode=boolxrm(v,1);
if(main_options['r']) {
should_record_solution=0;
} else {
optionquery[1]=Q_saveSolutions;
v=xrm_get_resource(resourcedb,optionquery,optionquery,2)?:"";
should_record_solution=boolxrm(v,0);
}
|
>
>
>
>
>
|
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
static volatile Uint8 timerflag;
static int exam_scroll;
static Uint8*inputs;
static int inputs_size,inputs_count;
static Uint8 side_mode=255;
static Uint8 should_record_solution;
static Uint8 replay_speed;
static Uint8 replay_time;
static void setup_game(void) {
const char*v;
optionquery[1]=Q_showInventory;
v=xrm_get_resource(resourcedb,optionquery,optionquery,2)?:"";
side_mode=boolxrm(v,1);
optionquery[1]=Q_replaySpeed;
v=xrm_get_resource(resourcedb,optionquery,optionquery,2)?:"";
replay_speed=strtol(v,0,10)?:16;
if(main_options['r']) {
should_record_solution=0;
} else {
optionquery[1]=Q_saveSolutions;
v=xrm_get_resource(resourcedb,optionquery,optionquery,2)?:"";
should_record_solution=boolxrm(v,0);
}
|
︙ | | | ︙ | |
285
286
287
288
289
290
291
292
293
294
295
296
297
298
|
replay_list=0;
}
}
}
static void begin_level(int id) {
const char*t;
if(replay_count) save_replay();
inputs_count=0;
replay_pos=0;
t=load_level(id)?:init_level();
load_replay();
if(t) {
gameover=-1;
|
>
|
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
|
replay_list=0;
}
}
}
static void begin_level(int id) {
const char*t;
replay_time=0;
if(replay_count) save_replay();
inputs_count=0;
replay_pos=0;
t=load_level(id)?:init_level();
load_replay();
if(t) {
gameover=-1;
|
︙ | | | ︙ | |
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
|
replay_count=i;
if(i) memcpy(replay_list,sqlite3_column_blob(st,1),i);
}
static int game_command(int prev,int cmd,int number,int argc,sqlite3_stmt*args,void*aux) {
switch(cmd) {
case '\' ': // Play a move
if(solution_replay) {
screen_message("You cannot play your own moves during the solution replay");
return -3;
}
if(inputs_count>=inputs_size) {
inputs=realloc(inputs,inputs_size+=32);
if(!inputs) fatal("Allocation failed\n");
}
inputs[inputs_count++]=number;
return 0;
case '+ ': replay: // Replay
if(number>replay_count-replay_pos) number=replay_count-replay_pos;
if(number<=0) return prev;
if(inputs_count+number>=inputs_size) {
inputs=realloc(inputs,inputs_size+=number+1);
if(!inputs) fatal("Allocation failed\n");
}
memcpy(inputs+inputs_count,replay_list+replay_pos,number);
|
>
>
>
>
>
|
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
|
replay_count=i;
if(i) memcpy(replay_list,sqlite3_column_blob(st,1),i);
}
static int game_command(int prev,int cmd,int number,int argc,sqlite3_stmt*args,void*aux) {
switch(cmd) {
case '\' ': // Play a move
if(replay_time) {
replay_time=0;
return -3;
}
if(solution_replay) {
screen_message("You cannot play your own moves during the solution replay");
return -3;
}
if(inputs_count>=inputs_size) {
inputs=realloc(inputs,inputs_size+=32);
if(!inputs) fatal("Allocation failed\n");
}
inputs[inputs_count++]=number;
return 0;
case '+ ': replay: // Replay
replay_time=0;
if(number>replay_count-replay_pos) number=replay_count-replay_pos;
if(number<=0) return prev;
if(inputs_count+number>=inputs_size) {
inputs=realloc(inputs,inputs_size+=number+1);
if(!inputs) fatal("Allocation failed\n");
}
memcpy(inputs+inputs_count,replay_list+replay_pos,number);
|
︙ | | | ︙ | |
725
726
727
728
729
730
731
732
733
734
735
736
737
738
|
return prev;
case '^g': // Display global variables
global_examine();
return prev;
case '^o': // List objects
list_objects_at(number-65);
return prev;
case '^s': // Toggle solution replay
if(replay_count) save_replay();
solution_replay^=1;
if(replay_count) replay_count=0,begin_level(level_id); else load_replay();
return 1;
case 'go': // Select level
begin_level(number);
|
>
>
>
|
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
|
return prev;
case '^g': // Display global variables
global_examine();
return prev;
case '^o': // List objects
list_objects_at(number-65);
return prev;
case '^p': // Slow replay
replay_time=replay_time?0:1;
return 0;
case '^s': // Toggle solution replay
if(replay_count) save_replay();
solution_replay^=1;
if(replay_count) replay_count=0,begin_level(level_id); else load_replay();
return 1;
case 'go': // Select level
begin_level(number);
|
︙ | | | ︙ | |
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
|
}
void run_game(void) {
int i;
SDL_Event ev;
set_caption();
replay_count=0;
if(side_mode==255) setup_game();
begin_level(level_id);
redraw_game();
timerflag=0;
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;
break;
case SDL_MOUSEBUTTONDOWN:
if(ev.button.x<left_margin) {
if(ev.button.y<48) break;
if(side_mode) {
// Inventory
//TODO
|
>
>
>
>
>
|
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
|
}
void run_game(void) {
int i;
SDL_Event ev;
set_caption();
replay_count=0;
replay_time=0;
if(side_mode==255) setup_game();
begin_level(level_id);
redraw_game();
timerflag=0;
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;
if(replay_time && !--replay_time && !game_command(1,'+ ',1,0,0,0)) {
replay_time=replay_speed;
goto replay;
}
break;
case SDL_MOUSEBUTTONDOWN:
if(ev.button.x<left_margin) {
if(ev.button.y<48) break;
if(side_mode) {
// Inventory
//TODO
|
︙ | | | ︙ | |