/**********************************/ /* BOLL */ /* ecrit par MAGNIER Nicolas */ /* magnier@caramail.com */ /* ou magnier1 sur le site yaroze */ /**********************************/ #include #include "pad.h" #include "screen.h" // ---definitions--- #define SPRITE_ADD (0x80090000) #define NB_SPRITE (10) #define OT_LENGTH (NB_SPRITE+1) #define UN (4096) static GsOT OTable_Header[2]; static GsOT_TAG OTable_Array[2][1<300){Worms.direction[0]=-2;Worms.ball[0].x=300;} if (Worms.ball[0].y<20){Worms.direction[0]=1;Worms.ball[0].y=20;} if (Worms.ball[0].y>220){Worms.direction[0]=-1;Worms.ball[0].y=220;} }; void deplacement() { long i,X,Y; for (i=1;i<10;i++) { Y=Worms.ball[i-1].y-Worms.ball[i].y; X=Worms.ball[i-1].x-Worms.ball[i].x; if ( Worms.direction[i]!=0 || abs(X)>20 || abs(Y)>20 ) { if (Worms.direction[i-1]==1) {if (Worms.ball[i].y!=Worms.ball[i-1].y) {if (Y>0) Worms.direction[i]=-2; else Worms.direction[i]=2;} else {if (X>20) Worms.direction[i]=1; if (X<-20) Worms.direction[i]=-1;} } if (Worms.direction[i-1]==2) {if (Worms.ball[i].x!=Worms.ball[i-1].x) {if (X>0) Worms.direction[i]=1; else Worms.direction[i]=-1;} else {if (Y>20) Worms.direction[i]=-2; if (Y<-20) Worms.direction[i]=2;} } if (Worms.direction[i-1]==-1) {if (Worms.ball[i].y!=Worms.ball[i-1].y) {if (Y>0) Worms.direction[i]=-2; else Worms.direction[i]=2;} else {if (X>20) Worms.direction[i]=1; if (X<-20) Worms.direction[i]=-1;} } if (Worms.direction[i-1]==-2) {if (Worms.ball[i].x!=Worms.ball[i-1].x) {if (X>0) Worms.direction[i]=1; else Worms.direction[i]=-1;} else {if (Y>20) Worms.direction[i]=-2; if (Y<-20) Worms.direction[i]=2;} } } } for (i=0;i<10;i++) { if (Worms.direction[i]==1) Worms.ball[i].x+=2; if (Worms.direction[i]==-2) Worms.ball[i].y+=2; if (Worms.direction[i]==-1) Worms.ball[i].x-=2; if (Worms.direction[i]==2) Worms.ball[i].y-=2; if (Worms.ball[i].x==Worms.ball[i-1].x && Worms.ball[i].y==Worms.ball[i-1].y) Worms.direction[i]=0; } }; void Pad() { PAD=PadRead(); if (PAD & PADselect) Run=0; if (PAD & PADstart) FntPrint(police,"start"); if (PAD & PADcross) Worms.direction[0]=0; if (PAD & PADright) Worms.direction[0]=1; if (PAD & PADdown) Worms.direction[0]=-2; if (PAD & PADleft) Worms.direction[0]=-1; if (PAD & PADup) Worms.direction[0]=2; if (PAD & PADcircle) WormsInit(); }; void WormsInit() { short i; for (i=0;i<10;i++) { Worms.ball[i].x=100; Worms.ball[i].y=100; Worms.direction[i]=0; } }; void ScreenInit() { long i; SetVideoMode(VIDEO_MODE); GsInitGraph(SCREEN_WIDTH,SCREEN_HEIGHT,4,0,0); GsDefDispBuff(0,0,0,SCREEN_HEIGHT); for (i=0 ; i<2 ; i++) { OTable_Header[i].length=OT_LENGTH; OTable_Header[i].org=OTable_Array[i]; GsClearOt(0,0,&OTable_Header[i]); } }; void TextInit() { FntLoad(960,256); police=FntOpen(0,0,320,100,0,256); }; void LoadTIMData(u_long addressTIM) { RECT Rect; GsIMAGE Tim; GsGetTimInfo((u_long *)(addressTIM+4),&Tim); Rect.x=Tim.px; Rect.y=Tim.py; Rect.w=Tim.pw; Rect.h=Tim.ph; LoadImage(&Rect,Tim.pixel); Rect.x=Tim.cx; Rect.y=Tim.cy; Rect.w=Tim.cw; Rect.h=Tim.ch; LoadImage(&Rect,Tim.clut); DrawSync(0); }; void SetSprite(GsSPRITE *Sprite,u_long addressTIM,long X,long Y) { GsIMAGE Tim; u_long Clut; GsGetTimInfo((u_long *)(addressTIM+4),&Tim); Clut=1; Sprite->attribute=(1<<24); Sprite->w=Tim.pw*2; Sprite->h=Tim.ph; Sprite->x=X; Sprite->y=Y; Sprite->u=Tim.px-SCREEN_WIDTH; Sprite->v=Tim.py; Sprite->tpage=GetTPage(Clut,0,Tim.px,Tim.py); Sprite->cx=Tim.cx; Sprite->cy=Tim.cy; Sprite->r=128; Sprite->g=128; Sprite->b=128; Sprite->mx=Sprite->w/2; Sprite->my=Sprite->h/2; Sprite->scalex=UN; Sprite->scaley=UN; Sprite->rotate=0; }; void Render() { short i; for (i=0;i<10;i++) GsSortSprite(&Worms.ball[i],&OTable_Header[buff],i); DrawSync(0); VSync(0); GsSwapDispBuff(); GsSortClear(15,50,15,&OTable_Header[buff]); GsDrawOt(&OTable_Header[buff]); FntFlush(police); }; void RenderInit() { buff=GsGetActiveBuff(); GsClearOt(0,0,&OTable_Header[buff]); GsSetWorkBase((PACKET *) PacketMemory[buff]); };