#include #include #include "pad.h" #include "action.h" #include "actinit.h" extern short activeBuff; extern GsOT WorldOT[2]; extern long padinfo; GsSPRITE spKubi[1]; void KubiStart( action * ); void KubiByebye( action * ); void KubiMain( action * ); /*---------------------------------------------------------------------- くび登場 ----------------------------------------------------------------------*/ void KubiStart( action *cw ){ cw->sp->scalex += 20; if ( cw->sp->scalex > 4096 ){ cw->sp->scalex = ONE; cw->sp->rotate = 0; cw->posX = 320-128; cw->posY = 240/2; ChangeAction( KubiMain ); KubiMain( cw ); return; } cw->sp->scaley = cw->sp->scalex; cw->sp->rotate += 4096*15; if ( cw->sp->rotate > 1470464 ){ cw->sp->rotate = 0; } cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortSprite(cw->sp, &WorldOT[activeBuff], 2); } /*---------------------------------------------------------------------- くび退散 ----------------------------------------------------------------------*/ void KubiByebye( action *cw ){ cw->sp->cy = 481; cw->sp->scalex -= 20; if ( cw->sp->scalex < 0 ){ ResetAction(); InitHige(); return; } cw->sp->scaley = cw->sp->scalex; cw->sp->rotate -= 4096*15; if ( cw->sp->rotate < 0 ){ cw->sp->rotate = 1470464; } cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortSprite(cw->sp, &WorldOT[activeBuff], 2); } /*---------------------------------------------------------------------- くび標準 ----------------------------------------------------------------------*/ void KubiMain( action *cw ){ if (cw->message&COLLISION){ /* 受動的当り判定 */ if ( cw->work1++ >=50 ){ ChangeAction( KubiByebye ); } cw->sp->cy = 480; cw->message&=~COLLISION; }else{ cw->sp->cy = 481; } if ( cw->posY > 320-128 ) cw->vectY = -4; if ( cw->posY < 0 ) cw->vectY = 4; cw->posY += cw->vectY; FntPrint( "Hits = %d\n",cw->work1 ); cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortFastSprite(cw->sp, &WorldOT[activeBuff], 2); } /*---------------------------------------------------------------------- くび初期化 ----------------------------------------------------------------------*/ void InitKubi(void){ short tpage; action *ap; GsSPRITE *sp; sp = spKubi; tpage = GetTPage( 0, 0, 320+64, 0); sp->attribute = 0x00000000&(1<<27); /* 属性 */ sp->w = 128; /* 横幅 */ sp->h = 128; /* 高さ */ sp->tpage = tpage; /* テクスチャページ番号 */ sp->u = 0; /* ページ内オフセット */ sp->v = 0; sp->cx = 0; /* CLUT位置 */ sp->cy = 481; sp->r = sp->g = sp->b = 0x80; /* 輝度 */ sp->mx = sp->my = 64; /* 回転拡大時中心座標 */ sp->scalex = sp->scaley = 0; /* スケール値 */ sp->rotate = 0; /* 回転角 */ ap = GetEmptyActPtr(); ap->ID = ENEMY; ap->fnAction = KubiStart; /* 処理ルーチン */ ap->WorkSize = sizeof(*ap); /* ワークサイズ */ ap->message = 0; /* メッセージ */ ap->count0 = 0; /* カウンタ */ ap->count1 = 0; ap->work0 = 0; /* 作業用 */ ap->work1 = 0; ap->posX = 320-128+64; ap->posY = 240/2+64; ap->vectX = 0; ap->vectY = 4; ap->speed = 0; ap->collision.x = 32; ap->collision.y = 32; ap->collision.w = 96-32; ap->collision.h = 96-32; ap->sp->x = ap->posX; ap->sp->y = ap->posY; ap->sp = sp; }