#define p1_color (ROP_EQU+LTGREEN) #define p2_color (ROP_EQU+PURPLE) #define enemy_fire_color (ROP_EQU+LTBLUE) #define friendly_fire_color (ROP_EQU+WHITE) GrBitMap *WG_base=GrAlias(grbase2,Fs); $PI,"+",1$ $PI,"+",3$ $PI,"+",2$ $PI,"+",4$ U1 *GrTrooper[7]={$IB,"",1$,$IB,"",3$,$IB,"",2$, $IB,"",4$, $IB,"",2$,$IB,"",3$,$IB,"",1$}; U8 fire_end_time=0; BoolU4 sound_off=TRUE; class Trooper { I8 num,x,y,dx,dy,fx,fy,att,def,rng,player; U8 fire_end_time; }; #define num_troopers 100 Trooper tr[num_troopers<<1]; U8 cnt1,cnt2; I8 text_area_size=(GR_HEIGHT/FONT_HEIGHT)*(GR_WIDTH/FONT_WIDTH); #define mm_none 1 #define mm_friendly_firepower 2 #define mm_laps_time 3 I8 map_mode=mm_none,cmd_intensity=128; U2 *map_values; #define ai_nothing 1 #define ai_target 2 #define ai_random 3 U8 ai; void UpdateMap(TssStruct *tss) { I8 i; for (i=tss->win_top;i<=tss->win_bottom;i++) { MemCpy(textbase+(i*TEXT_COLS+tss->win_left)*4, map_values+(i*TEXT_COLS+tss->win_left)*4, (tss->win_right+1-tss->win_left)*4); } } void ClearMapValues() { MemSet(map_values,0,text_area_size*sizeof(U4)); } void PutFriendlyFirepower(TssStruct *tss) { I8 i,d,x,y,dx,dy; I8 lt=tss->win_left,rt=tss->win_right, tp=tss->win_top, bm=tss->win_bottom; U4 *ptr; U8 v; for (y=0;y<=bm-tp;y++) { ptr=map_values+((y+tp)*TEXT_COLS+tss->win_left)*4; for (x=0;x<=rt-lt;x++) { v=0; for (i=0;i0 && tr[i].fire_end_time>16)-(x*FONT_WIDTH+FONT_WIDTH>>1); dy=(tr[i].y>>16)-(y*FONT_HEIGHT+FONT_HEIGHT>>1); d=dx*dx+dy*dy; if (ddx>>12,y=t->dy>>12,s,fire_col, speed=Sqrt(x*x+y*y); if (map_mode==mm_laps_time) { x=(t->x+500*t->dx)>>16; y=(t->y+500*t->dy)>>16; } else { x=t->x>>16; y=t->y>>16; } s=t->def; if (s>0) { s=s/3; WG_base->color=color; WG_base->bkcolor=BLACK; GrElemsPlot(WG_base,x,y,0,GrTrooper[(t->num+Jiffies*speed/JIFFY_FREQ)%7]); if (t->player==0) fire_col=friendly_fire_color; else fire_col=enemy_fire_color; if (Jiffiesfire_end_time) { Sound(2000); sound_off=FALSE; WG_base->color=fire_col; GrLine3(WG_base,x,y,0,t->fx>>16,t->fy>>16,0); } if (Jiffies>=fire_end_time) if (!sound_off) { sound_off=TRUE; Sound(0); } } } void DrawIt(TssStruct *tss) { I1 buf[32]; I8 i,c,x=ipx-tss->win_pixel_left,y=ipy-tss->win_pixel_top; cmd_intensity=(ip_throttle*128)>>32; UpdateMap(tss); LtfUpdateAuxLtf(tss); cnt1=0; cnt2=0; for (i=0;i0) { DrawTrooper(&tr[i],p1_color); cnt1++; } for (i=num_troopers;i0) { DrawTrooper(&tr[i],p2_color); cnt2++; } if (cmd_intensity>0) { if (ip_lb) c=ROP_EQU+LTGREEN; else c=ROP_EQU+GREEN; } else { if (ip_lb) c=ROP_EQU+LTBLUE; else c=ROP_EQU+BLUE; } WG_base->color=c; GrCircle(WG_base,x,y,AbsI8(cmd_intensity)); SPrintF(buf,"%03d %03d",cnt1,cnt2); PlotWinStr(tss,buf,WHITE,tss->win_right-8,0); } I8 targets[10]; void InitTroopers() { I8 i,j,dx,dy; Trooper *t; for (i=0;i<10;i++) { targets[i]=RandU2%num_troopers; dx=RandU2-0x8000; dy=RandU2-0x8000; for (j=0;j<10;j++) { t=&tr[i*10+j]; t->num=i*10+j; t->x=(GR_WIDTH-100-i*10)<<16; t->y=(GR_HEIGHT>>1-50+j*10)<<16; t->dx=0; t->dy=0; t->fire_end_time=Jiffies; t->att=3; t->def=10; t->rng=50*50; t->player=0; t=&tr[i*10+j+num_troopers]; t->num=i*10+j; t->x=(100+i*10)<<16; t->y=(GR_HEIGHT>>1-50+j*10)<<16; t->dx=0; t->dy=0; if (ai==ai_random) { t->dx=dx; t->dy=dy; } t->fire_end_time=Jiffies; t->att=3; t->def=10; t->rng=50*50; t->player=1; } } } void DoAiTarget() { I8 i,j; Trooper *t,*t2; for (i=0;i<10;i++) { t2=&tr[targets[i]]; for (j=0;j<10;j++) { t=&tr[i*10+j+num_troopers]; t->dx=(t2->x-t->x)>>11; t->dy=(t2->y-t->y)>>11; } } } void UpdatePositions() { I8 i; Trooper *t; for (i=0;ix+=t->dx; if (t->x>=GR_WIDTH<<16) t->x-=GR_WIDTH<<16; if (t->x<0) t->x+=GR_WIDTH<<16; t->y+=t->dy; if (t->y>=GR_HEIGHT<<16) t->y-=GR_HEIGHT<<16; if (t->y<0) t->y+=GR_HEIGHT<<16; } } void ResolveFiring() { I8 i,j,d,dx,dy; for (i=0;i0 && tr[j].def>0) { dx=(tr[i].x-tr[j].x)>>16; dy=(tr[i].y-tr[j].y)>>16; d=dx*dx+dy*dy; if (d>3; fire_end_time=tr[i].fire_end_time; tr[i].fx=tr[j].x; tr[i].fy=tr[j].y; tr[j].def=tr[j].def-tr[i].att; } if (d>3; fire_end_time=tr[i].fire_end_time; tr[j].fx=tr[i].x; tr[j].fy=tr[i].y; tr[i].def=tr[i].def-tr[j].att; } } } } void UpdateVelocities() { I8 i,x=ipx-Fs->win_pixel_left,y=ipy-Fs->win_pixel_top,dx,dy,d; Trooper *t; if (ip_lb) { for (i=0;ix>>16)); dy=(y-(t->y>>16)); d=dx*dx+dy*dy+1; dx=(cmd_intensity<<13*dx)/d; dy=(cmd_intensity<<13*dy)/d; t->dx=t->dx-dx; t->dy=t->dy-dy; } } } void SongEndTsk() { Sound(0); Exit; } void SongTsk() { Fs->end_task_cb=&SongEndTsk; ResetMusicSettings; while (TRUE) { Play("3qAG2eG3DqDeBGqEsARAReFA"); Play("qAG2eG3DqDeBGqEsARAReFA"); Play("sCCCC2qG3G2G3ABD2eGR"); Play("3sCCCC2qG3G2G3ABD2eGR"); } } void WarGame() { I8 ch=0,i=0; U8 sc=0,ms=0; void *old_update=Fs->update_win; Ltf *l,*m,*old_cur_ltf=Fs->cur_ltf,*old_aux_ltf=Fs->aux_ltf; BoolU4 old_has_menu; BoolU4 old_border=WinBorder(OFF); BoolU4 old_ip_double=Bts(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK); BoolU4 old_preempt=Preempt(OFF); TssStruct *song_tss=Spawn(&SongTsk,"WarGame Song",Fs); WinMax; map_values=MAlloc(text_area_size*sizeof(U4)); ip_throttle=-1<<30; Fs->cur_ltf=NULL; m=LtfRead("::/LT/Apps/WarGame/WarGame.MUZ"); old_has_menu=Bts(&Fs->crt_flags,CRTf_HAS_MENU); //todo aux ltf to show "MENU" Fs->aux_ltf=l=InitSysAuxLtf(TRUE); LtfPutSExt(l,"$$MA+A+TML+IV,\"Restart | \",\" \"$$"); LtfPutSExt(l,"$$MA+A+TML+IV,\"Normal | \",\"1\"$$"); LtfPutSExt(l,"$$MA+A+TML+IV,\"FirePower | \",\"2\"$$"); LtfPutSExt(l,"$$MA+A+TML+IV,\"LapseTime | \",\"3\"$$"); LtfPutSExt(l,"$$MA+A+TML+IV,\"Exit\",\"\\033\"$$"); ClearMapValues; InitTroopers(); Fs->update_win=&DrawIt; PopUpOk("Wheel Controls Command Strength"); while (ms!=101 && ch!=CH_ESC && ch!=CH_CTRLQ) { ch=0;ms=0; ai=RandU2%3+1; InitTroopers(); while (ch!=CH_ESC && ch!=CH_CR && ch!=CH_SPACE && ch!=CH_CTRLQ && ms!=101 && ms!=100) { ms=0; if (ScanKey(&ch,&sc)) { if (ch==CH_SPACE) { if (!l->best_d && l->cur_entry!=l) { LtfRunEntry(l,l->cur_entry,TRUE,old_preempt); ch=0; } } ClearMapValues; if (sc.u1[0]==SC_GUI) ms=DoMenu(m); if (ms==1 || ch=='1') map_mode=mm_none; else if (ms==2 || ch=='2') map_mode=mm_friendly_firepower; else if (ms==3 || ch=='3') map_mode=mm_laps_time; } if (!(++i&7) && map_mode==mm_friendly_firepower) PutFriendlyFirepower(Fs); Sleep(40); if (ai==ai_target) DoAiTarget; UpdateVelocities; UpdatePositions; ResolveFiring; } } Kill(song_tss); Sound(0); LtfDel(l); Fs->aux_ltf=old_aux_ltf; if (Fs->cur_ltf=old_cur_ltf) LtfBottom(Fs->cur_ltf); LtfDel(m); Fs->update_win=old_update; Free(map_values); AssignBit(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK,old_ip_double); AssignBit(&Fs->crt_flags,CRTf_HAS_MENU,old_has_menu); WinBorder(old_border); Preempt(old_preempt); } Tøÿÿÿýÿÿÿÿÿÿÿ þÿÿÿ|  ÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿýÿÿÿÿÿÿÿ þÿÿÿ|  øÿÿÿýÿÿÿÿÿÿÿ þÿÿÿ|  ÿÿÿÿ ÿÿÿÿ ÿÿÿÿøÿÿÿýÿÿÿÿÿÿÿ þÿÿÿ