templeos-info/public/Wb/Apps/ToTheFront/ToTheFront.HC

215 lines
4.3 KiB
HolyC
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<UNITS_NUM;i++) {
units[j][i].remaining_movement=units[j][i].movement;
units[j][i].fired=FALSE;
}
phase=PHASE_START;
moving_unit=NULL;
SleepUntil(msg_off_timeout);
msg_off_timeout=cnts.jiffies+JIFFY_FREQ*2*animation_delay+1;
Snd(74);
StrPrint(msg_buf,"Turn %d",++turn);
VRSetUp(0);
VRSetUp(1);
VisRecalc(VR_ALL_UNITS);
cur_player=(turn&1)^1;
enemy_player=cur_player^1;
}
U0 PhaseNew()
{
cur_player^=1;
enemy_player=cur_player^1;
if (++phase>=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$$<SHIFT-ESC>$$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$$<SPACE>$$FG$$\tor $$GREEN$${Right-click}$$FG$$ to end phase.\n"
"$$GREEN$$<SHIFT>$$FG$$\tto show line-of-sight.\n"
"$$GREEN$$<ENTER>$$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; //<CTRL-ALT-x>
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;
}