1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
#include "xev.h"
#include "enemy.h"
PRIVATE Pixmap pixmap[4],pixmap_mask[4];
PRIVATE GC gc[4];
PRIVATE char *fn[] = {
"grobd1.img",
"grobd2.img",
"grobd3.img",
"grobd4.img"
};
void GrobdSetChar()
{
int c_no;
char img[CSIZE*CSIZE] , mask[128];
XGCValues gcv;
gcv.graphics_exposures = False;
for(c_no = 0 ; c_no < 4 ; c_no++) {
int x,y;
sprintf(tpath , "%s/%s",IMAGE_DIR,fn[c_no]);
LoadChar(tpath,img , sizeof(img));
pixmap[c_no] = XCreatePixmap(d,w,CSIZE,CSIZE,depth);
gc[c_no] = XCreateGC(d,w,GCGraphicsExposures,&gcv);
bzero(mask , sizeof(mask));
for(y = 0 ; y < CSIZE ; y++)
for(x = 0 ; x < CSIZE ; x++) {
if(img[y*CSIZE+x] != 100) {
mask[y*4+x/8] |= (1<< (x%8));
XSetForeground(d,gc[c_no],
pixel[img[y*CSIZE+x]]);
XDrawPoint(d,pixmap[c_no],gc[c_no],x,y);
}
}
pixmap_mask[c_no]
= XCreateBitmapFromData(d,w,mask,CSIZE,CSIZE);
XSetClipMask(d,gc[c_no],pixmap_mask[c_no]);
}
}
void GrobdFree()
{
int i;
for(i = 0 ; i > 4 ; i++) {
XFreePixmap(d,pixmap[i]);
XFreePixmap(d,pixmap_mask[i]);
XFreeGC(d,gc[i]);
}
}
int Grobd(enemy_no)
int enemy_no;
{
int sx,sy;
int gvy[2][GROBDDS+1] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,2,0,2,2,2,2,2,2,2,-1,4}
};
int ganim[2][GROBDDS+1] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1}
};
int g_score[GROBDDS+1] = {
0,0,0,0,0,0,0,500,200,0,0,0,0,0,0,0,100,10000};
sx = enemy_chijou[enemy_no].x.sht[UNION];
sy = enemy_chijou[enemy_no].y.sht[UNION];
enemy_chijou[enemy_no].y.dummy += enemy_chijou[enemy_no].vy;
enemy_chijou[enemy_no].y.dummy
+= gvy[enemy_chijou[enemy_no].tmp2][enemy_chijou[enemy_no].enemy_no]*32768;
SetSprite(sx,sy,pixmap[enemy_chijou[enemy_no].tmp1],
gc[enemy_chijou[enemy_no].tmp1],
CSIZE,CSIZE);
enemy_chijou[enemy_no].tmp1
+= ganim[enemy_chijou[enemy_no].tmp2][enemy_chijou[enemy_no].enemy_no];
enemy_chijou[enemy_no].tmp1 &= 3;
if(sy > YSIZE) {
enemy_chijou[enemy_no].enemy_no = 0;
}
if((jx.sht[UNION] - sx) > -20 &&
(jx.sht[UNION] - sx) < 20 &&
(jy.sht[UNION] - sy) > 192 &&
(jy.sht[UNION] - sy) < 224) {
shojun_flag = 1;
enemy_chijou[enemy_no].tmp2 = 1;
}
if(shot_chi.z == 1) {
if((shot_chi.x.sht[UNION] - sx) > -10 &&
(shot_chi.x.sht[UNION] - sx) < 32 &&
(shot_chi.y.sht[UNION] - sy) > -10 &&
(shot_chi.y.sht[UNION] - sy) < 42) {
score += g_score[enemy_chijou[enemy_no].enemy_no];
BombCInit(enemy_no);
return 1;
}
}else
return 0;
}
|