#include #include #include "pad.h" #include "action.h" #include "actinit.h" extern short activeBuff; extern GsOT WorldOT[2]; extern long padinfo; GsSPRITE spHige[1]; GsSPRITE spRips[1]; void HigeMain( action * ); void HigeDamage( action * ); void HigeAttack( action * ); void HigeRips( action * ); void HigeRips2( action * ); void InitRips( action * ); /*---------------------------------------------------------------------- 総合ヒゲ標準 ----------------------------------------------------------------------*/ void HigeMain( action *cw ){ if (cw->message&COLLISION){ /* 受動的当り判定 */ cw->work1++; cw->message &= ~COLLISION; cw->sp->tpage =GetTPage( 0, 0, 576+64, 0); cw->count0 = 20; ChangeAction( HigeDamage ); }else{ cw->sp->tpage =GetTPage( 0, 0, 576, 0); cw->posY+=64; if ( cw->posY > 128 ) cw->vectY = -2; if ( cw->posY < 0 ) cw->vectY = 2; cw->posY-=64; cw->posY += cw->vectY; } if ( cw->count1++ == 274 ){ cw->count1 = 0; InitRips( cw ); ChangeAction( HigeAttack ); } FntPrint( "Hits = %d\n",cw->work1 ); cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortFastSprite(cw->sp, &WorldOT[activeBuff], 2); } /*---------------------------------------------------------------------- 総合ヒゲダメージ ----------------------------------------------------------------------*/ void HigeDamage( action *cw ){ if ( cw->count0-- >= 0 ){ if (cw->message&COLLISION){ /* 受動的当り判定 */ cw->work1++; cw->message &= ~COLLISION; } cw->sp->tpage =GetTPage( 0, 0, 576+64, 0); }else{ cw->sp->tpage =GetTPage( 0, 0, 576, 0); ChangeAction( HigeMain ); } FntPrint( "Hits = %d\n",cw->work1 ); cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortFastSprite(cw->sp, &WorldOT[activeBuff], 2); } /*---------------------------------------------------------------------- 総合ヒゲ攻撃チュウ ----------------------------------------------------------------------*/ void HigeAttack( action *cw ){ action *ap; ap = cw->ptr1; if ( ap->ID == EMPTY ){ /* チュウ終了? */ ChangeAction( HigeMain ); cw->message &= ~COLLISION; } cw->sp->tpage =GetTPage( 0, 0, 576, 0); cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortFastSprite(cw->sp, &WorldOT[activeBuff], 2); } /*---------------------------------------------------------------------- 総合ヒゲ初期化 ----------------------------------------------------------------------*/ void InitHige(void){ short tpage; action *ap; GsSPRITE *sp; sp = spHige; tpage = GetTPage( 0, 0, 320+64+64+64+64, 0); sp->attribute = 0x00000000; /* 属性 */ sp->w = 256; /* 横幅 */ sp->h = 256; /* 高さ */ sp->tpage = tpage; /* テクスチャページ番号 */ sp->u = 0; /* ページ内オフセット */ sp->v = 0; sp->cx = 0; /* CLUT位置 */ sp->cy = 483; sp->r = sp->g = sp->b = 0x80; /* 輝度 */ sp->mx = sp->my = 0; /* 回転拡大時中心座標 */ sp->scalex = sp->scaley = ONE; /* スケール値 */ sp->rotate = 0; /* 回転角 */ ap = GetEmptyActPtr(); ap->ID = ENEMY; ap->fnAction = HigeMain; /* 処理ルーチン */ ap->WorkSize = sizeof(*ap); /* ワークサイズ */ ap->message = 0; /* メッセージ */ ap->count0 = 0; /* カウンタ */ ap->count1 = 0; ap->posX = 200; ap->posY = 240; ap->vectX = 0; ap->vectY = -2; ap->speed = 0; ap->work0 = 0; ap->work1 = 0; ap->collision.x = 32; ap->collision.y = 32; ap->collision.w = 128-32; ap->collision.h = 192-32; ap->sp->x = ap->posX; ap->sp->y = ap->posY; ap->sp = sp; } /*---------------------------------------------------------------------- びろーん ----------------------------------------------------------------------*/ void HigeRips( action *cw ){ cw->posX += cw->vectX; cw->sp->scalex += 256; if (cw->posX < 32){ cw->vectX=2; ChangeAction( HigeRips2 ); HigeRips2( cw ); return; } cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortSprite(cw->sp, &WorldOT[activeBuff], 1); } /*---------------------------------------------------------------------- ずるずる ----------------------------------------------------------------------*/ void HigeRips2( action *cw ){ action *ap; ap = cw->ptr0; cw->posX += cw->vectX; cw->sp->scalex -= 256; if (cw->posX >= ap->posX+32){ cw->ID = 0; } cw->sp->x = cw->posX; cw->sp->y = cw->posY; GsSortSprite(cw->sp, &WorldOT[activeBuff], 1); } /*---------------------------------------------------------------------- 総合ヒゲ攻撃初期化 ----------------------------------------------------------------------*/ void InitRips( action *cw ){ short tpage; action *ap; GsSPRITE *sp; sp = spRips; tpage = GetTPage( 0, 0, 320+64+64+64+64, 0); sp->attribute = 0x00000000&(1<<27); /* 属性 */ sp->w = 32; /* 横幅 */ sp->h = 16; /* 高さ */ sp->tpage = tpage; /* テクスチャページ番号 */ sp->u = 32; /* ページ内オフセット */ sp->v = 157; sp->cx = 0; /* CLUT位置 */ sp->cy = 483; sp->r = sp->g = sp->b = 0x80; /* 輝度 */ sp->mx = sp->my = 0; /* 回転拡大時中心座標 */ sp->scalex = sp->scaley = ONE; /* スケール値 */ sp->rotate = 0; /* 回転角 */ ap = GetEmptyActPtr(); cw->ptr1 = ap; ap->ID = ENEMY; ap->fnAction = HigeRips; /* 処理ルーチン */ ap->WorkSize = sizeof(*ap); /* ワークサイズ */ ap->message = 0; /* メッセージ */ ap->count0 = 0; /* カウンタ */ ap->count1 = 0; ap->posX = cw->posX+32; ap->posY = cw->posY+157; ap->vectX = -2; ap->vectY = 0; ap->speed = 0; ap->work0 = 0; ap->work1 = 0; ap->collision.x = 0; ap->collision.y = 0; ap->collision.w = 0; ap->collision.h = 0; ap->ptr0 = cw; ap->sp->x = ap->posX; ap->sp->y = ap->posY; ap->sp = sp; }