/**********************************/ /* 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 BG_ADD (0x80090600) #define START_ADD (0x80091000) #define MAX_OBJ (1000) #define MAX_BALL (50) #define NB_SPRITE (2*MAX_BALL) #define OT_LENGTH (1) #define UN (4096) static GsOT OTable_Header[2]; static GsOT_TAG OTable_Array[2][1<(debut+2*(3*8))) menu.y=debut; if (menu.y1 && pad==0 && menu.y==debut+2*(3*8)) {worms.nb_ball--;pad=1;} if ((PAD & PADright) && worms.nb_ballball[0].x<20){Worms->direction[0]=2;Worms->ball[0].x=20;} if (Worms->ball[0].x>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(perso *Worms) { long i,X,Y; for (i=1;iball[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;idirection[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 Select(select *menu) { short i; menu->line[3].x0=menu->line[0].x0=menu->x; menu->line[3].y0=menu->line[0].y0=menu->y; menu->line[0].x1=menu->line[1].x1=menu->x+menu->w; menu->line[0].y1=menu->line[1].y1=menu->y; menu->line[1].x0=menu->line[2].x0=menu->x+menu->w; menu->line[1].y0=menu->line[2].y0=menu->y+menu->h; menu->line[2].x1=menu->line[3].x1=menu->x; menu->line[2].y1=menu->line[3].y1=menu->y+menu->h; for (i=0;i<4;i++) { menu->line[i].attribute=0; if (menu->line[3].b0>150) menu->sens=1; if (menu->line[3].b0<10) menu->sens=0; if (menu->sens==0) { menu->line[i].r0+=6; menu->line[i].g0+=6; menu->line[i].b0+=6; menu->line[i].r1-=6; menu->line[i].g1-=6; menu->line[i].b1-=6; } else { menu->line[i].r0-=6; menu->line[i].g0-=6; menu->line[i].b0-=6; menu->line[i].r1+=6; menu->line[i].g1+=6; menu->line[i].b1+=6; } }; }; void PersoInit(perso *Worms) { short i; for (i=0;iball[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(100,60,120,200,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 SetBg(GsBG *Bg ,GsMAP *BgMap ,GsCELL *BgCell ,u_long addressTIM) { GsIMAGE Tim; u_long Clut; GsGetTimInfo((u_long *)(addressTIM+4),&Tim); Clut=1; BgCell->u=Tim.px-SCREEN_WIDTH; BgCell->v=Tim.py; BgCell->cba= GetClut(Tim.cx,Tim.cy); BgCell->flag=0; BgCell->tpage=GetTPage(Clut,0,Tim.px,Tim.py); // BgMap->cellw=Tim.pw; // BgMap->cellh=Tim.ph/2; BgMap->cellw=30; BgMap->cellh=30; BgMap->ncellw=1; BgMap->ncellh=1; BgMap->base=BgCell; BgMap->index=map; Bg->attribute=(1<<24); Bg->x=0; Bg->y=0; Bg->w=BgMap->cellw*BgMap->ncellw; Bg->h=BgMap->cellh*BgMap->ncellh; Bg->scrollx=0; Bg->scrolly=0; Bg->r=128; Bg->g=128; Bg->b=128; Bg->map=BgMap; Bg->mx=Bg->w/2; Bg->my=Bg->h/2; Bg->scalex=UN; Bg->scaley=UN; Bg->rotate=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() { DrawSync(0); VSync(0); GsSwapDispBuff(); GsSortClear(50,50,50,&OTable_Header[buff]); GsDrawOt(&OTable_Header[buff]); FntFlush(police); }; void RenderInit() { buff=GsGetActiveBuff(); GsClearOt(0,0,&OTable_Header[buff]); GsSetWorkBase((PACKET *) PacketMemory[buff]); };