U0 AnimationDelaySet() { animation_delay=PopUpRangeF64(0,100,25,"%3f% %%","Animation Delay\n")/100; } U0 TurnNew() { I64 i,j; for (j=0;j<2;j++) for (i=0;i=PHASE_END) { IndirectResolveAll; TurnNew; } SleepUntil(msg_off_timeout); msg_off_timeout=cnts.jiffies+JIFFY_FREQ*2*animation_delay+1; Snd(74); switch (phase) { case PHASE_INDIRECT0: case PHASE_INDIRECT1: StrPrint(msg_buf,"Player %d Artillery Plot",cur_player+1); break; case PHASE_MOVE0: case PHASE_MOVE1: StrPrint(msg_buf,"Player %d Move",cur_player+1); break; case PHASE_DIRECT0: case PHASE_DIRECT1: StrPrint(msg_buf,"Player %d Fire",cur_player+1); break; } } U0 CharDo(U8 ch) { I64 old_inhibit,old_draw_it; Bool old_cursor; switch (ch) { case CH_ESC: case CH_SHIFT_ESC: throw('ExitGame',TRUE); case CH_SPACE: throw('PhaseOvr',TRUE); case '\n': throw('NewGame',TRUE); case '1': ViewPlayerSet(0); break; case '2': ViewPlayerSet(1); break; case 'c': old_draw_it=Fs->draw_it; old_inhibit=Fs->win_inhibit; Fs->draw_it=Fs->next_settings->draw_it; Fs->win_inhibit=WIG_USER_TASK_DFT; old_cursor=DocCursor(ON); DocBottom; "\n$$GREEN$$$$FG$$ to return to game.\n"; View; DocBottom; DocCursor(old_cursor); Fs->win_inhibit=old_inhibit; Fs->draw_it=old_draw_it; break; case 'd': AnimationDelaySet; break; } } U0 UserChk() { I64 ch; if (!alive_cnt[0] || !alive_cnt[1]) throw('GameOver',TRUE); if (ch=ScanChar) CharDo(ch); } U0 TaskEndCB() { Snd; progress4=progress4_max=progress1=progress1_max=0; Exit; } I64 PhaseDo() { I64 res='ExitGame'; PhaseNew; try { if (phase&~1==PHASE_INDIRECT) Call(player_indirect[cur_player]); else if (phase&~1==PHASE_MOVE) Call(player_move[cur_player]); else Call(player_direct[cur_player]); } catch { res=Fs->except_ch; Fs->catch_except=TRUE; } return res; } U0 ToTheFront() { I64 res,ch; map_dc=DCNew(MAP_WIDTH,MAP_HEIGHT); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Cd(__DIR__); Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R|WIG_DBL_CLICK; MenuPush( "File {" " Abort(,CH_SHIFT_ESC);" " Exit(,CH_ESC);" "}" "Play {" " EndPhase(,CH_SPACE);" " Restart(,'\n');" "}" "View {" " Player1(,'1');" " Player2(,'2');" " OddsCalculations(,'c');" " LOS(,0,SCF_SHIFT);" "}" "Settings {" " AnimationDelay(,'d');" "}" ); AutoComplete; WinBorder; WinMax; DocCursor; DocMax; Init; PlayerPick("AIs",0); PlayerPick("AIs",1); PopUpOk("$$PURPLE$$$$TX+CX,\"ToTheFront\"$$$$FG$$\n\n" "$$GREEN$${Left-click}$$FG$$ to move or fire units.\n" "$$GREEN$$$$FG$$\tor $$GREEN$${Right-click}$$FG$$ to end phase.\n" "$$GREEN$$$$FG$$\tto show line-of-sight.\n" "$$GREEN$$$$FG$$\tto start new game.\n" "$$GREEN$$1$$FG$$\tPlayer 1 view.\n" "$$GREEN$$2$$FG$$\tPlayer 2 view.\n" "$$GREEN$$c$$FG$$\tView odds calculations.\n" "$$GREEN$$d$$FG$$\tSet animation delay."); Fs->task_end_cb=&TaskEndCB; // Fs->draw_it=&DrawIt; try { do { res=PhaseDo; if (res=='GameOver') { while (TRUE) { msg_off_timeout=0; StrCpy(msg_buf,"Game Over"); Snd; ch=GetChar(,FALSE); if (ch=='\n') { CleanUp; Init; break; } else if (ch==CH_ESC || ch==CH_SHIFT_ESC) { res='ExitGame'; break; } else if (ch=='1') ViewPlayerSet(0); else if (ch=='2') ViewPlayerSet(1); else if (ch=='d') AnimationDelaySet; } } else if (res=='NewGame') { CleanUp; Init; } } while (res!='ExitGame'); } catch PutExcept; ProgressBarsRst; SettingsPop; DCDel(map_dc); CleanUp; MenuPop; Seed; }