#include #include "pad.h" #include "gamemain.h" #include "commot.h" //モーション関連 キャラ共通ヘッダ(CHxMOT.Hより先にインクルードする) void ChBoomStand( MAN *p ); //前進モーション void ChBoomWalk_f( MAN *p ); //前ダッシュモーション void ChBoomFDash( MAN *p ); //ジャンプ準備モーション void ChBoomJump_b( MAN *p ); //ジャンプモーション void ChBoomJump( MAN *p ); //しゃがみモーション void ChBoomSit( MAN *p ); //振り向きモーション(振り向き動作のみ、モーションではなくキャラ全体の単純な回転) void ChBoomTurn( MAN *p ); //get void ChBoomGet( MAN *p ); //nageru void ChBoomTr( MAN *p ); //utu void ChBoomPut( MAN *p ); //utu void ChBoomLow( MAN *p ); void ChBoomJP0( MAN *p ); //歩き0 static MDATA wk0[] = { { -60, 185, -105, -150, 362, -70, //0 -142, 269, 150, //1 -108, -32, -19, //2 -207, 585, 686, //3 1480, 23, -9, //4 66, 1, 19, //5 -109, -84, -269, //6 1448, 28, 0, //7 0, -30, -8, //8 227, -10, 410, //9 -331, 0, -10, //10 256, -8, -6, //11 196, -34, -82, //12 -198, 0, 0, //13 -56, 0, 0, //14 } }; //1:歩き1 static MDATA wk1[] = { { 49, 219, -89, -86, 42, -40, //0 -291, 464, 305, //1 -101, -32, -17, //2 64, 592, 696, //3 1213, 79, 200, //4 66, 3, 17, //5 -347, 63, -280, //6 1135, 28, 0, //7 0, -30, 0, //8 -133, -10, 148, //9 -369, 0, -9, //10 221, 0, 0, //11 433, -14, 34, //12 -252, 0, 0, //13 -43, 0, 0, //14 } }; //2:歩き2 static MDATA wk2[] = { { 28, 564, 110, -110, 362, -70, //0 -332, 304, 200, //1 -38, -32, 0, //2 -226, 674, 942, //3 932, 80, 0, //4 66, 20, 0, //5 602,-412, -290, //6 1144, 28, 0, //7 0, -30, 0, //8 920, -10, 490, //9 -790, 0, 0, //10 -10, 0, 0, //11 364, 166, -416, //12 -738, 0, 0, //13 74, 0, 0, //14 } }; //boom0 static MDATA stand0[] = { { 28, 564, 110, -110, 362, -70, //0 -332, 304, 200, //1 32,-802, -222, //2 570,-184, 392, //3 906, 26, 0, //4 66, 20, 0, //5 624,-472, -286, //6 890, 28, 130, //7 0, -30, 0, //8 920, -10, 490, //9 -790, 0, 0, //10 -10, 0, 0, //11 364, 166, -416, //12 -738, 0, 0, //13 74, 0, 0, //14 } }; //boom0 static MDATA boom0[] = { { 62, 744, 110, -110, 362, -70, //0 -462, 304, 200, //1 202,-802, -222, //2 870,-254, 472, //3 896, 26, 0, //4 66, 20, 0, //5 824,-472, -286, //6 890, 28, 130, //7 0, -30, 0, //8 1060, -10, 490, //9 -890, 0, 0, //10 -10, 0, 0, //11 484, 166, -416, //12 -1188, 0, 0, //13 74, 0, 0, //14 } }; /* //しゃがみ static MDATA si0[] = { 50,1100, 0 , 28, 0, 2, //}, -442, 0, -246, //}, -152, -24, 40, //}, //2 200, 48, 204, //}, //3 1631, 0, -288, //}, //4 438, -216, -1036, //}, //5 48, -118, 525, //}, //6 1418, 0, -329, //}, //7 622, 0, -224, //}, //8 1114, 120, -196, //}, //9 -1456, 40, -70, //}, //10 275, 0, -84, //}, //11 554, -264, -182, //}, //12 -1652, 0, 0, //}, //13 -258, 0, -210, //} //14 }; //1536 -257 -402 //ジャンプ準備 static MDATA jb0[] = { 195,1085, -189 , -260, 362, 143, //}, -752, 229, 30, //}, 757, -658, -192, //}, //2 -575, -684, -268, //}, //3 1081, 26, -9, //}, //4 66, 5, 14, //}, //5 629, -312, -726, //}, //6 1280, 38, 0, //}, //7 9, -30, -8, //}, //8 1269, -20, 480, //}, //9 -1591, 2, -10, //}, //10 490, -80, -5, //}, //11 1210, 174, -326, //}, //12 -1588, 0, -10, //}, //13 454, 0, 0, //} //14 }; //ジャンプ0 static MDATA j0[] = { { 52, 462, 83, -88, 362, 47, //0 466, 225, 6, //1 -199,-642, -192, //2 133,-276, 216, //3 753, 26, -9, //4 66, 2, 17, //5 1123,-228, -628, //6 910, -22, 120, //7 9, -30, -8, //8 -43, -10, 490, //9 -425, 0, -10, //10 106, -8, -6, //11 238, 170, -318, //12 -732, 0, -10, //13 266, 0, 0, //14 } }; //ジャンプ1 static MDATA j1[] = { { -24, 558, -99, -150, 322, -40, //0 -452, 9, 70, //1 389,-482, -180, //2 654,-197, 732, //3 918, -94, 160, //4 66, -21, 91, //5 -722,-817, -304, //6 918, -12, 100, //7 0, -30, 90, //8 1113, -10, 580, //9 -1429, 0, 90, //10 -346, 0, 20, //11 862,-104, -80, //12 -1458, -60, 40, //13 -276, -40, 60, //14 } }; */ //tr0 static MDATA tr0[] = { { -437, 619, 110, -110, 362, -70, //0 -42, 484, 200, //1 22,-742, -22, //2 // 480, 466, 82, //3 1110, 686, 692, //3 906, 26, -230, //4 66, 20, 0, //5 1694, 48, -816, //6 890, 28, 130, //7 0, -30, 0, //8 950, -10, 490, //9 -560, 0, 0, //10 -260, 0, 0, //11 364, 166, -286, //12 -988, 0, 0, //13 74, 0, 0, //14 } }; //tr1 static MDATA tr1[] = { { 743, 514, 110, -215, 172, -75, //0 393, -826, 200, //1 27, 293, -132, //2 75, 216, 457, //3 1231, 26, -370, //4 66, 20, 0, //5 1734, 48,-1021, //6 265, 28, 130, //7 0, -30, 0, //8 740, -10, 550, //9 -780, 0, -150, //10 -25, 0, 0, //11 -121, -19, -226, //12 -633, 0, 0, //13 -111, 0, 0, //14 } }; //tr2 static MDATA tr2[] = { { 1218, 514, 110, -260, 92, -80, //0 148,-1356, 200, //1 32, 708, -182, //2 -90, 116, 612, //3 1366, 26, -430, //4 66, 20, 0, //5 1754, 48,-1106, //6 10, 28, 130, //7 0, -30, 0, //8 650, -10, 570, //9 -880, 0, -210, //10 70, 0, 0, //11 -316, -94, -196, //12 -488, 0, 0, //13 -186, 0, 0, //14 } }; //tr3(NAGURI) static MDATA tr3[] = { { 1218, 514, 110, -14, 74, -64, //0 -260, -816, 112, //1 -4, 562, -138, //2 1168, -126, -498, //3 168, 26, -402, //4 140, -20, -206, //5 814, 286,-1056, //6 290, 28, 40, //7 124, -30, -44, //8 742, -10, 418, //9 -994, 0, -182, //10 110, 0, -16, //11 -142, -128, -196, //12 -720, 0, 0, //13 -200, 0, -42, //14 } }; /*//tr1 static MDATA tr1[] = { { 1218, 514, 110, -110, 92, -80, //0 148,-1356, -40, //1 162, 698, -212, //2 -90, 116, 612, //3 1366, 26, -430, //4 66, 20, 0, //5 1754, 48, -826, //6 10, 28, 130, //7 0, -30, 0, //8 650, -10, 570, //9 -880, 0, -210, //10 70, 0, 0, //11 -316, -94, -266, //12 -488, 0, 0, //13 -186, 0, 0, //14 } }; */ static MOVDATA boom_stand[] = { // motion, px, py, pz, frame, flg, HITDATA { stand0, 0, 0, 0, 18, MOV_STAND|MOV_END, NULL}, //{ nomot, 0, 0, 0, 12, MOV_STAND|MOV_END, NULL}, }; MOVDATA boom_sit[] = { // motion, px, py, pz, frame, flg, HITDATA { si0, 0, 0, 0, 8, MOV_SIT|MOV_END, NULL}, }; static MOVDATA boom_get[] = { // motion, px, py, pz, frame, flg, HITDATA { si0, 0, 0, 0, 48, MOV_STAND, NULL}, { si0, 0, 0, 0, 48, MOV_STAND|MOV_END, NULL}, //{ nomot, 0, 0, 0, 12, MOV_STAND|MOV_END, NULL}, }; static MOVDATA boom_boom[] = { // motion, px, py, pz, frame, flg, HITDATA { boom0, 0, 0, 0, 18, MOV_STAND, NULL}, { boom0, 0, 0, 0, 36, MOV_STAND, NULL}, { stand0, 0, 0, 0, 18, MOV_STAND|MOV_END, NULL}, //{ nomot, 0, 0, 0, 12, MOV_STAND|MOV_END, NULL}, }; static MOVDATA boom_walk_f[] = { // motion, px, py, pz, frame, flg, HITDATA { wk0, 0, 0, 0, 12, MOV_STAND, NULL}, { wk1, 0, 0, 0, 9, MOV_STAND, NULL}, { wk2, 0, 0, 0, 14, MOV_STAND, NULL}, { wk1, 0, 0, 0, 19, MOV_STAND, NULL}, //{ st1, 0, 0, 0, 17, MOV_STAND|MOV_END, NULL}, }; static MOVDATA boom_fdash[] = { // motion, px, py, pz, frame, flg, HITDATA { jb0, 0, 0, 0, 11, MOV_DASH, NULL}, { wk2, 0, 0, 0, 10, MOV_DASH|MOV_END, NULL}, }; static MOVDATA boom_jump_b[] = { // motion, px, py, pz, frame, flg, HITDATA { jb0, 0, 0, 0, 8, MOV_STAND|MOV_END, NULL}, }; static MOVDATA boom_jump[] = { // motion, px, py, pz, frame, flg, HITDATA { j0, 0, 0, 0, 18, MOV_JUMP, NULL}, { j1, 0, 0, 0, 19, MOV_JUMP|MOV_END, NULL}, }; static MOVDATA boom_tr[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 10, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 6, MOV_STAND|MOV_JUMP, NULL}, { tr1, 0, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { tr2, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { tr2, 0, 0, 0, 19, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static HITDATA boxput_hit = { HF_HI | HF_KYO, //flg 8, 1200,1200, //判定パーツの番号、判定サイズ(x,y) 80,160, //吹き飛び量 30,20, //硬直時間 2, //ヒットストップ時間 20, //受け身不可時間 -1, //予備領域 30 //ダメージ }; static MOVDATA boom_boxput[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 4, MOV_STAND, NULL}, { tr0, 0, 0, 0, 2, MOV_STAND, NULL}, { tr1, 0, 0, 0, 7, MOV_STAND, NULL}, { tr3, 0, 0, 0, 4, MOV_STAND, &boxput_hit}, { tr3, 0, 0, 0, 19, MOV_STAND|MOV_END, NULL}, { stand0, 0, 0, 0, 6, MOV_STAND|MOV_END, NULL}, }; //boom0 static MDATA bmL0_0[] = { {-122, 619, 110, -60, 362, -70, //0 -302, 784, 540, //1 -478,-332, -632, //2 280,-184, 532, //3 1346, 26, 100, //4 66, 20, 0, //5 224,-472, -596, //6 890, 28, 130, //7 -1450, -30, 0, //8 890, -10, 490, //9 -700, 0, 0, //10 -10, 0, 0, //11 284, 166, -386, //12 -998, 0, 0, //13 74, 0, 0, //14 } }; //boom0 static MDATA bmL0_1[] = { { 998, 424, 110, -540, -38, -70, //0 228, -676, 50, //1 -258, 938, 88, //2 -660, 316, 732, //3 956, 26, 100, //4 66, 20, 0, //5 474, -402,-1136, //6 1040, 28, 130, //7 -1130, -30, 0, //8 1070, -10, 30, //9 -790, 0, 0, //10 380, 0, 0, //11 204, 176, -106, //12 -208, 0, 0, //13 74, 0, 0, //14 } }; static HITDATA bmL0_hit = { HF_HI | HF_JYA, //flg 8, 1200,1200, //判定パーツの番号、判定サイズ(x,y) 80,160, //吹き飛び量 19,8, //硬直時間 6, //ヒットストップ時間 20, //受け身不可時間 -1, //予備領域 12 //ダメージ }; static HITDATA bmL1_hit = { HF_HI | HF_TYU, //flg 8, 1200,1200, //判定パーツの番号、判定サイズ(x,y) 80,160, //吹き飛び量 19,8, //硬直時間 4, //ヒットストップ時間 20, //受け身不可時間 -1, //予備領域 16 //ダメージ }; static HITDATA bmL2_hit = { HF_HI | HF_UKI, //flg 8, 1200,1200, //判定パーツの番号、判定サイズ(x,y) 100,180, //吹き飛び量 15,8, //硬直時間 3, //ヒットストップ時間 20, //受け身不可時間 -1, //予備領域 18 //ダメージ }; static MOVDATA boom_l0[] = { // motion, px, py, pz, frame, flg, HITDATA { bmL0_0, 0, 0, 0, 3, MOV_STAND, NULL}, { bmL0_0, 0, 0, 0, 2, MOV_STAND, NULL}, { bmL0_1, 0, 0, 0, 4, MOV_STAND, NULL}, { bmL0_1, 0, 0, 0, 6, MOV_STAND, &bmL0_hit}, { stand0, 0, 0, 0, 12, MOV_STAND|MOV_END, NULL}, }; static MOVDATA boom_l1[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 350, 0, 0, 2, MOV_STAND, NULL}, { tr0, 350, 0, 0, 2, MOV_STAND, NULL}, { tr1, 100, 0, 0, 4, MOV_STAND, NULL}, { tr3, 50, 0, 0, 4, MOV_STAND, &bmL1_hit}, { tr3, 0, 0, 0, 8, MOV_STAND|MOV_END, NULL}, }; static MOVDATA boom_l2[] = { // motion, px, py, pz, frame, flg, HITDATA { tr3, 500, 0, 0, 3, MOV_STAND, NULL}, { tr3, 600, 0, 0, 2, MOV_STAND, NULL}, { tr1, 100, 0, 0, 4, MOV_STAND, NULL}, { tr0, 00, 0, 0, 4, MOV_STAND, &bmL2_hit}, { tr0, 100, 0, 0, 6, MOV_STAND|MOV_END, NULL}, }; static MOVDATA boom_jp0[] = { // motion, px, py, pz, frame, flg, HITDATA { bmL0_0, 0, 0, 0, 3, MOV_JUMP, NULL}, { bmL0_0, 0, 0, 0, 1, MOV_JUMP, NULL}, { bmL0_1, 0, 0, 0, 3, MOV_JUMP, &bmL0_hit}, { bmL0_1, 0, 0, 0, 4, MOV_JUMP|MOV_END, &bmL0_hit}, }; //ジャンプ右キック 通常 static MDATA JrkA0[] = { { 100, 700, 0 , 335, -854, 16, //}, -764, -635, -128, //}, -113, 811, -94, //}, //2 -315, -406, -116, //}, //3 1800, -5, -462, //}, //4 449, -12, 70, //}, //5 12, -25, -975, //}, //6 1430, 0, 29, //}, //7 593, 0, -214, //}, //8 444, -28, 1506, //}, //9 -1698, 6, 25, //}, //10 19, -201, -6, //}, //11 395, 281, -511, //}, //12 8, 0, -16, //}, //13 -421, 0, -10, //} //14 } }; static HITDATA Jh0_hit = { HF_JUMP | HF_TYU, //flg 14, 940,470, //判定パーツの番号、判定サイズ(x,y) 50,110, //吹き飛び量 22,7, //ヒット硬直時間、ヒット硬直時間 9, //ヒットストップ時間 20, //受け身不可時間 -1, //予備領域 20 //ダメージ }; //ジャンプ右キック 通常 static MOVDATA boom_jh0[]= { // motion, px, py, pz, frame, flg, HITDATA { JrkA0, 100, 0, 0, 4, MOV_JUMP, NULL}, { JrkA0, 100, 0, 0, 44, MOV_JUMP, &Jh0_hit}, { dmgA0, 0, 0, 0, 11, MOV_JUMP, NULL}, { dmgC0, 0, 0, 0, 19, MOV_JUMP|MOV_END, NULL}, }; static MOVDATA boom_juh0[] = { // motion, px, py, pz, frame, flg, HITDATA { tr3, 500, 0, 0, 3, MOV_JUMP, NULL}, { tr3, 600, 0, 0, 2, MOV_JUMP, NULL}, { tr1, 100, 0, 0, 4, MOV_JUMP, NULL}, { tr0, 00, 0, 0, 4, MOV_JUMP, &bmL2_hit}, { tr0, 100, 0, 0, 6, MOV_JUMP, NULL}, { j0, 0, 0, 0, 18, MOV_JUMP, NULL}, { j1, 0, 0, 0, 19, MOV_JUMP|MOV_END, NULL}, }; #define CH_GET 6 #define CH_STAND 7 #define CH_WALK_F 8 #define CH_FDASH 9 #define CH_JUMP_B 10 #define CH_JUMP 11 #define CH_JUMP2 12 #define CH_SIT 14 #define CH_TURN 17 #define CH_JP0 25 #define CH_TR -1 //nageru #define CH_PUT -2 //utu #define CH_LOW -3 //utu int PADfront,PADback; //前、後ろの入力判定生成 //これらはCh0Move()関数で毎回必要な値が代入される //ジャンプ発生判定 void SetChBoomJump(MAN *p) { //上が押されたならジャンプ準備に移行 //ここでは横移動量を0にしてジャンプ準備モーションに行くだけ //斜めジャンプ判定はジャンプ準備モーション中で行う。 if( p->cont & PADLup ) { p->g_pl.vx = 0; //ジャンプ中横移動量クリア p->st = CH_JUMP_B; //ジャンプ準備モーションに移行 SetNewMotion( p, &boom_jump_b[0], 0 ); return; } } //振り向き発生判定 void SetChBoomTurn(MAN *p) { //後ろが押されたなら回転 if( p->cont & PADback ) { if( p->face == LEFT ) p->face = RIGHT; //方向反転 else p->face = LEFT; p->r.vy = 2048; p->st = CH_TURN; //振り向きモーションへ // SetNewMotion( p, &stand[0], 0 ); //振り向きには特別なモーションはなく、現在のモーションを進行させながら回る。 //そのために上記の関数は呼ばれる必要がないため、コメントになっている。 return; } } //前ダッシュ発生判定 //前ダッシュが出た場合にはTRUEを返す BOOL SetChBoomFDash(MAN *p) { //ダッシュコマンドが入力されたならダッシュに移行 if( p->face == LEFT ) { //左向きの場合 if( p->Ldash_flg == -1 ) { //ダッシュの左入力の判定 p->Ldash_flg = 0; //ダッシュ入力フラグクリア p->st = CH_FDASH; SetNewMotion( p, &boom_fdash[0], 0 ); return TRUE; } } else { //右向きの場合 if( p->Rdash_flg == -1 ) { //ダッシュの右入力の判定 p->Rdash_flg = 0; //ダッシュ入力フラグクリア p->st = CH_FDASH; SetNewMotion( p, &boom_fdash[0], 0 ); return TRUE; } } return FALSE; } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU BOOL SetChBoomAtk(MAN *p) { int sp,m_cnt,gy; OTHER *op; MATRIX *m; p->hit_flg = HH_NO; //攻撃判定フラグクリア if( p->syu == 1 ) { if( p->gage2 >= GAGE_MAX ) { if( p->Lhd_flg == -1 || p->Rhd_flg == -1 ) { //波動件の左入力の判定 if( p->PB_flg ) { //弱攻撃ボタンが入力されていた場合 p->gage2 = 0;//p->gage2/3; p->hit_flg = HH_NO; p->PB_flg = 0; //弱攻撃入力フラグクリア p->Lhd_flg = 0; //波動件入力フラグクリア p->Rhd_flg = 0; //波動件入力フラグクリア p->dat4 = 100; //conbo num clear p->st = CH_TR; SetNewMotion( p, &boom_tr[0], 0 ); return ATK_HISSATU; } } } } //気弾 if( p->trg & PADRup ) { //飛び道具攻撃ボタンが入力されていた場合 //p->PB_flg = 0; //飛び道具攻撃フラグクリア p->dat4 = 0; //conbo num clear p->st = CH_TR; SetNewMotion( p, &boom_tr[0], 0 ); return ATK_TUUJYOU; } if( p->LB_flg ) { //飛び道具攻撃ボタンが入力されていた場合 p->LB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_LOW; p->dat4 = 0; SetNewMotion( p, &boom_l0[0], 0 ); return ATK_TUUJYOU; } if( p->HB_flg ) { //飛び道具攻撃ボタンが入力されていた場合 p->HB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_PUT; SetNewMotion( p, &boom_boxput[0], 0 ); return ATK_TUUJYOU; } if( p->PB_flg ) { //捨てるボタンが入力されていた場合 if( !( p->Lhd_flg == COM_ON || p->Rhd_flg == COM_ON ) )p->PB_flg = 0; //フラグクリア p->st = CH_PUT; op = p->hold_pt; m = &op->obj.co.workm; op->obj.mov.vx = m->t[0]; op->obj.mov.vy = m->t[1]; op->obj.mov.vz = m->t[2]; op->r.vx = 0; op->r.vy = 0; op->r.vz = 0; //if( p == & man[0] ) op->dat1 = 4; //else op->dat1 = 5; op->dat1 = -1; op->dat2 = 0; op->dat3 = 0; op->dat4 = -1; op->dat5 = -1; sp = 60; op->dat2 = -20; if( p->face == LEFT ) op->dat3 = sp; else op->dat3 = -sp; GsInitCoordinate2(WORLD,&op->obj.co); p->hold_pt = NULL; p->hold = HOLD_NO; p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); return ATK_TUUJYOU; } //ガード判定 if( p->GR_flg ) {//trg & PAD_GRD ) { //ガードボタンが押されているときに、 if( p->cont & PADLdown) { //下が押されていれば p->st = CH_SGUARD; //しゃがみガードする SetNewMotion( p, &Sguard[0], 0 ); return ATK_TUUJYOU; } else { //下が押されていなければ p->st = CH_GUARD; //立ちガードする SetNewMotion( p, &guard[0], 0 ); return ATK_TUUJYOU; } } return ATK_NO; } BOOL SetChBoomAttack(MAN *p) { MAN *e; if( SetChBoomAtk(p) == ATK_TUUJYOU ) { if( p == &man[0] ) e = &man[1]; else e = &man[0]; if( abs(p->pl.vx - e->pl.vx) < 4000 ) { if( p->pl.vx > e->pl.vx ) p->face = RIGHT; else p->face = LEFT; } } } void ChBoomMove(MAN *p,MAN *e) { int bx; OTHER *op; MATRIX *m; MOVDATA *pmv; p->conbo_num = 0; //FntPrint("Boom "); //if( p->conbo_num > 1 ) //FntPrint("CONBO [%d] ",p->conbo_num); //前後のキー判定作成 if( p->face == LEFT ) { //自分が左向きなら PADfront = PADLleft; //左が前 PADback = PADLright; } else { //自分が右向きなら PADfront = PADLright; //右が前になる PADback = PADLleft; } //技コマンド入力判定(入力判定のみで発生判定はしていない。発生判定は各動作関数内で)) GetCommand( p ); //硬直時間でなければフラグに応じて行動分岐 //新しい動作を作る場合にはこれを追加(3) if( p->hit_stop != 0 ) p->hit_stop--; //ヒット硬直中ならカウント減算 //if( (p->hit_stop & 1)== 0 ) else switch( p->st ) { //硬直中でなければ分岐 case CH_STAND: ChBoomStand(p); //立ち break; case CH_WALK_F: ChBoomWalk_f(p); //前進 break; case CH_FDASH: ChBoomFDash(p); //前ダッシュ break; case CH_JUMP_B: ChBoomJump_b(p); //ジャンプ準備 break; case CH_JUMP: //ジャンプ中 これら2つは case CH_JUMP2: ChBoomJump(p); //二段ジャンプ中  同じ関数に飛ぶ break; case CH_SIT: ChBoomSit(p); //sit break; case CH_GUARD: ChGuard(p); //立ちガード break; case CH_SGUARD: ChSGuard(p); //しゃがみガード break; case CH_JGUARD: ChJGuard(p); //空中ガード break; case CH_TURN: ChBoomTurn(p); //振り向き break; case CH_GET: ChBoomGet(p); //get break; case CH_TR: ChBoomTr(p); //nageru break; case CH_PUT: ChBoomPut(p); //utu break; case CH_LOW: ChBoomLow(p); //utu break; case CH_JP0: ChBoomJP0(p); //ジャンプぱんち0 break; default: if( p->hold_pt != NULL ) { op = p->hold_pt; m = &op->obj.co.workm; op->obj.mov.vx = m->t[0]; op->obj.mov.vy = m->t[1]; op->obj.mov.vz = m->t[2]; op->dat1 = -1; op->dat2 = -150; if( p->face == LEFT ) op->dat3 = -30; else op->dat3 = 30; GsInitCoordinate2(WORLD,&op->obj.co); p->hold_pt = NULL; op->dat4 = -1; op->dat5 = -1; } p->hold = HOLD_NO; } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) bx = p->pl.vx; ChkWallHit(p); pmv = &p->mv[p->m_no]; if( bx != p->pl.vx ) { if( !(e->mv[e->m_no].flg&MOV_JUMP) && ((pmv->flg&MOV_DMG) || ( p->grd_flg == GRD_AFTER )) ) { if( abs(p->pl.vx-e->pl.vx) < 5000 ) { e->pl.vx += (p->pl.vx-bx); } } } if( !(pmv->flg&MOV_JUMP) && !(pmv->flg&MOV_UKI) ) { int gy = GetGrandHeight(p->pl.vx); //現在の立ち位置の床の高さを求める if( p->pl.vy >= (gy + p->zero-200) ) { //地面と近いなら修正 p->pl.vy = gy + p->zero; } if( ChkGrandHit(p) == FALSE ) { p->g_pl.vy = 0; //垂直移動量初期値設定 p->st = CH_JUMP; SetNewMotion( p, &boom_jump[0], 0 ); } } //振り向き処理 if( p->r.vy > 0 ) { //回転中なら p->r.vy -= p->turn_sp; //振り向きスピード分回転を進める if( p->r.vy < 0 ) { //回転終了で立ちモーションに戻る p->r.vy = 0; //p->r.vy=0で正面を向く } } //人間の表示 SetManData( p ); //この関数で人間のすべてのパーツが表示される } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− // 基本動作 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //立ちモーション void ChBoomStand( MAN *p ) { p->g_pl.vx = 0; //ジャンプ中横移動量クリア p->dat4 = 0; //conbo num clear //前が押されたなら前進に移行 if( p->cont & PADfront ) { p->st = CH_WALK_F; SetNewMotion( p, &boom_walk_f[0], 0 ); return; } if( p->cont & PADLdown ) { p->st = CH_SIT; SetNewMotion( p, &boom_sit[0], 0 ); return; } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChBoomAttack(p); //後ろが押されたなら振り向き SetChBoomTurn( p ); //上が押されたならジャンプに移行 SetChBoomJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChBoomFDash( p ); //モーションを進めて、モーションが終わったならもう一度モーションを発動させる if( MoveNextMotion( p ) == FALSE ) { SetNewMotion( p, &boom_stand[0], 0 ); } } //前進モーション void ChBoomWalk_f( MAN *p ) { //FntPrint("for\n"); p->r.vy = 0; //振り向き中にキャンセルでここに来ても大丈夫なように回転を正面に補正 //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChBoomAttack(p); //上が押されたならジャンプに移行 SetChBoomJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChBoomFDash( p ); //前が押されたなら前進を継続 if( p->cont & PADfront ) { //モーションを進めて、モーションが終わったならもう一度歩きモーションを発動させる if( MoveNextMotion( p ) == FALSE ) { SetNewMotion( p, &boom_walk_f[0], 0 ); } //押されている方向に応じてキャラを移動(美しくない処理?) if( p->cont & PADLleft ) { p->pl.vx += p->walk_sp; p->g_pl.vx = p->walk_sp; //ジャンプ中横移動量クリア } else { p->pl.vx -= p->walk_sp; p->g_pl.vx = -p->walk_sp; //ジャンプ中横移動量クリア } return; } //前が押され続けていなければ立ちモーションに戻る p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } //前ダッシュモーション void ChBoomFDash( MAN *p ) { int sp; p->r.vy = 0; //振り向き中にキャンセルでここに来ても大丈夫なように回転を正面に補正 //FntPrint("fdash\n"); //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChBoomAttack(p); //後ろが押されたなら振り向き SetChBoomTurn( p ); //上が押されたならジャンプに移行 SetChBoomJump( p ); //ダッシュ移動 if( p->m_no == 0 ) sp = p->walk_sp*2; //最初の1モーションは通常の3倍の速さで移動 else sp = p->walk_sp+p->walk_sp/2; //残りは通常の2倍移動 //自分の向きに応じて左右移動 if( p->face == LEFT ) { p->pl.vx += sp; p->g_pl.vx = sp; //ジャンプ中横移動量クリア } else { p->pl.vx -= sp; p->g_pl.vx = -sp; //ジャンプ中横移動量クリア } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { if( p->cont & PADfront ) { SetNewMotion( p, &boom_fdash[0], 0 ); } else { p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } } } //しゃがみモーション void ChBoomSit( MAN *p ) { //FntPrint("sit\n"); //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChBoomAttack(p); //後ろが押されたなら振り向き SetChBoomTurn( p ); //上が押されたならジャンプに移行 SetChBoomJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChBoomFDash( p ); //下が押されているならしゃがみを継続 if( p->cont & PADLdown ) { //モーションを進めて、モーションが終わったならもう一度しゃがみモーションを発動させる if( MoveNextMotion( p ) == FALSE ) { SetNewMotion( p, &boom_sit[0], 0 ); } return; } //下が押され続けていなければ立ちモーションに戻る p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } //ジャンプ準備モーション void ChBoomJump_b( MAN *p ) { //FntPrint("jb\n"); p->r.vy = 0; //振り向き中にキャンセルできても大丈夫なように回転を補正 //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChBoomAttack(p); //左か右が押されると斜めジャンプ準備 //ジャンプ中の左右移動量の初期設定 if( p->cont & PADLleft ) p->g_pl.vx = p->walk_sp; if( p->cont & PADLright ) p->g_pl.vx = -p->walk_sp; //モーション終了でジャンプに移行 //(ジャンプ準備モーションのフレーム数はモーションデータに依存する) if( MoveNextMotion( p ) == FALSE ) { p->g_pl.vy = -p->jump_sp; //垂直移動量初期値設定 p->st = CH_JUMP; SetNewMotion( p, &boom_jump[0], 0 ); } } //ジャンプモーション void ChBoomJump( MAN *p ) { int sp; OTHER *op; MATRIX *m; //FntPrint("jump\n"); p->dat4 = 0; if( p->PB_flg ) { //捨てるボタンが入力されていた場合 p->PB_flg = 0; //フラグクリア p->st = CH_PUT; op = p->hold_pt; m = &op->obj.co.workm; op->obj.mov.vx = m->t[0]; op->obj.mov.vy = m->t[1]; op->obj.mov.vz = m->t[2]; op->r.vx = 0; op->r.vy = 0; op->r.vz = 0; //if( p == & man[0] ) op->dat1 = 4; //else op->dat1 = 5; op->dat1 = -1; op->dat5 = -1; sp = 60; op->dat2 = -20; if( p->face == LEFT ) op->dat3 = sp; else op->dat3 = -sp; GsInitCoordinate2(WORLD,&op->obj.co); p->hold_pt = NULL; p->hold = HOLD_NO; p->st = CH_JUMP; return; } if( p->GR_flg ) {//trg & PAD_GRD ) { //ガードボタンが押されているときに、 p->st = CH_JGUARD; //ジャンプガードする SetNewMotion( p, &Jguard[0], 0 ); return; } if( p->trg & PADRup ) { //飛び道具攻撃ボタンが入力されていた場合 //p->PB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_TR; SetNewMotion( p, &boom_tr[0], 1 ); if(p->cont&PADLleft) p->face = LEFT; if(p->cont&PADLright) p->face = RIGHT; return; } //ジャンプPANNTI if( p->LB_flg ) { p->LB_flg = 0; p->hit_flg = HH_NO; //攻撃判定フラグクリア p->st = CH_JP0; SetNewMotion( p, &boom_jp0[0], 0 ); return; } if( p->HB_flg ) { p->HB_flg = 0; p->hit_flg = HH_NO; //攻撃判定フラグクリア p->st = CH_JP0; SetNewMotion( p, &boom_jh0[0], 0 ); return; } //二段ジャンプ可能状態なら二段ジャンプ if( p->st != CH_JUMP2 ) { //ジャンプ二段めではなくて、 if( p->trg & PADLup ) { //上がトリガで押された場合 p->st = CH_JUMP2; SetNewMotion( p, &boom_jump[0], 0 ); if( p->cont & PADLleft ) p->g_pl.vx = p->walk_sp; if( p->cont & PADLright ) p->g_pl.vx = -p->walk_sp; p->g_pl.vy = -(p->jump_sp-p->jump_sp/8); //二段ジャンプする(少し高さは劣る) } } else { //ジャンプ二段目ならわずかに空中制動可能 if(0);//コンパイラのバグ? if( p->cont & PADLright ){ p->pl.vx-=11; p->g_pl.vx-=1; } if( p->cont & PADLleft ) { p->pl.vx+=11; p->g_pl.vx+=1; } } //空中制動可能 if(0);//コンパイラのバグ? if( p->cont & PADLright ){ p->pl.vx-=22; p->g_pl.vx-=3; } if( p->cont & PADLleft ) { p->pl.vx+=22; p->g_pl.vx+=3; } if( p->g_pl.vx > p->walk_sp+p->walk_sp/4 ) p->g_pl.vx = p->walk_sp+p->walk_sp/4; //左右移動制限 if( p->g_pl.vx < -(p->walk_sp+p->walk_sp/4) ) p->g_pl.vx = -(p->walk_sp+p->walk_sp/4); //左右移動制限 //重力にしたがって移動 p->pl.vx += p->g_pl.vx; //左右移動 p->pl.vy += p->g_pl.vy; //垂直落下 p->g_pl.vy += G_POINT+2; //重力分の移動量増加 //ジャンプ中モーションが終わってもモーションは変更ぜず if( MoveNextMotion( p ) == FALSE ) { SetNewMotion( p, &boom_jump[0], 1 ); } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { p->st = CH_STAND; //着地モーションへ SetNewMotion( p, &boom_stand[0], 0 ); } } //振り向きモーション(振り向き動作のみ、モーションではなくキャラ全体の単純な回転) void ChBoomTurn( MAN *p ) { //FntPrint("turn\n"); //振り向きキャンセル //上が押されたならジャンプに移行 SetChBoomJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChBoomFDash( p ); //モーションを進めて、モーションが終わったならもう一度モーションを発動させる if( MoveNextMotion( p ) == FALSE ) { p->m_no = 0; //モーションを戻す // SetNewMotion( p, &stand[0], 0 ); } //p->r.vy -= p->turn_sp; //回転 if( p->r.vy <= 0 ) { //回転終了で立ちモーションに戻る p->r.vy = 0; p->st = CH_STAND; } } //Getモーション void ChBoomGet( MAN *p ) { if( p->m_no == 0 && p->m_cnt == 1) { SetNewMotion( p, &boom_get[0], 1 ); p->m_cnt = 2; } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } } //nageruモーション void ChBoomTr( MAN *p ) { int sp; OTHER *op; MATRIX *m; //FntPrint("tro\n"); if( p->m_no == 0 && p->m_cnt == 1) { if(p->cont&PADLleft) p->face = LEFT; if(p->cont&PADLright) p->face = RIGHT; p->dat5 = 0; } if(p->cont&PADfront) p->dat5 |= PADfront; if(p->cont&PADLup) { p->dat5 |= PADLup; p->dat5 &= ~PADLdown;} if(p->cont&PADLdown) { p->dat5 |= PADLdown; p->dat5 &= ~PADLup;} if( p->hold_pt != NULL ) { if( p->m_no == 2 && p->m_cnt == 1){//m_cnt ) { op = p->hold_pt; m = &op->obj.co.workm; if( p == & man[0] ) op->dat1 = 2; else op->dat1 = 3; if( p->dat5 & PADLup ) { if( p->dat5 & PADfront ) { sp = 310; op->dat2 = -45;} else{ sp = 280; op->dat2 = -100;} } else if( p->dat5 & PADLdown ){if( p->dat5 & PADfront ) { sp = 370; op->dat2 = 280;} else{ sp = 150; op->dat2 = 350;} } else { if( p->dat5 & PADfront ) { sp = 350; op->dat2 = 215;} else { sp = 300; op->dat2 = 190;} } if( p->face == RIGHT ) { sp *= -1; } op->dat3 = sp; GsInitCoordinate2(WORLD,&op->obj.co); op->dat4 = 0; op->dat5 = p->face; op->dat6 = m->t[0];//+sp*10; op->dat7 = m->t[1]; if( p->dat4 == 100 ) op->dat8 = 170;//超業 op->dat9 = 0; //cnt op->obj.mov.vx = m->t[0]; op->obj.mov.vy = m->t[1]; op->obj.mov.vz = m->t[2]; op->r.vx = 300; p->hold_pt = NULL; } } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { // p->st = CH_STAND; //着地モーションへ // SetNewMotion( p, &fire_stand[0], 0 ); } else {//重力にしたがって移動 int gy; gy = GetGrandHeight(p->pl.vx);//現在の立ち位置の床の高さを求める if( p->pl.vy > gy ) p->pl.vy = gy; p->pl.vx += p->g_pl.vx; //左右移動 p->pl.vy += p->g_pl.vy; //垂直落下 p->g_pl.vy += G_POINT+2; //重力分の移動量増加 } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->hold = HOLD_NO; p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } } //Boomモーション void ChBoomPut( MAN *p ) { int px,py,face,flg; //FntPrint("boom\n"); if( p->m_no == 0 && p->m_cnt == 1) { if(p->cont&PADLleft) p->face = LEFT; if(p->cont&PADLright) p->face = RIGHT; } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } } //左パンチモーション void ChBoomLow( MAN *p ) { //FntPrint("lp0\n"); if( p->m_no > 2 ) { if( p->dat4 != 2 ) { //後ろが押されたなら振り向き //SetCh0Turn( p ); //必殺攻撃モーション発生判定 //if( SetCh0Hissatu( p ) == ATK_HISSATU ) { p->hit_flg = HH_NO; return; } //気弾 if( p->trg & PADRup ) { //飛び道具攻撃ボタンが入力されていた場合 //p->PB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_TR; p->hit_flg = HH_NO; //攻撃判定フラグクリア SetNewMotion( p, &boom_tr[0], 0 ); return; } if( p->HB_flg ) { //飛び道具攻撃ボタンが入力されていた場合 p->HB_flg = 0; //飛び道具攻撃フラグクリア p->hit_flg = HH_NO; //攻撃判定フラグクリア p->st = CH_PUT; SetNewMotion( p, &boom_boxput[0], 0 ); return; } } } ////FntPrint("d4=%d",p->dat4); //戻りキャンセル if( p->m_no > 3 ) { if( p->hit_flg != HH_NO ) { //攻撃判定フラグクリア if( p->dat4 == 0 ) { //conbo num if( p->LB_flg ) { p->LB_flg = 0; p->dat4 = 1; p->hit_flg = HH_NO; //攻撃判定フラグクリア SetNewMotion( p, &boom_l1[0], 0 ); return; } } if( p->dat4 == 1 ) { //conbo num if( p->LB_flg ) { p->LB_flg = 0; p->dat4 = 2; p->hit_flg = HH_NO; //攻撃判定フラグクリア SetNewMotion( p, &boom_l2[0], 0 ); return; } } } //攻撃モーション発生判定 if( p->dat4 != 2 ) SetChBoomAttack( p ); } //パンチ終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } } //ジャンプぱんちモーション void ChBoomJP0( MAN *p ) { //FntPrint("Jp\n"); //重力にしたがって移動 p->pl.vx += p->g_pl.vx; p->pl.vy += p->g_pl.vy; p->g_pl.vy += (G_POINT-3); //攻撃モーションが終わるとジャンプへ if( MoveNextMotion( p ) == FALSE ) { p->st = CH_JUMP2; SetNewMotion( p, &boom_jump[0], 0 ); } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { p->st = CH_STAND; SetNewMotion( p, &boom_stand[0], 0 ); } }