#include #include "pad.h" #include "gamemain.h" #include "tpower.h" void ChFireStand( MAN *p ); //前進モーション void ChFireWalk_f( MAN *p ); //前ダッシュモーション void ChFireFDash( MAN *p ); //ジャンプ準備モーション void ChFireJump_b( MAN *p ); //ジャンプモーション void ChFireJump( MAN *p ); //しゃがみモーション void ChFireSit( MAN *p ); //振り向きモーション(振り向き動作のみ、モーションではなくキャラ全体の単純な回転) void ChFireTurn( MAN *p ); //get void ChFireGet( MAN *p ); //nageru void ChFireTr( MAN *p ); //utu void ChFirePut( MAN *p ); void ChFireFPut( 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 } }; //fire0 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 } }; //fire0 static MDATA fire0[] = { { 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 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 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 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[] = { { 118, 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 } }; */ //box_upper(NAGURI) static MDATA box_up0[] = { { -228, 819, 110, -110, 562, 100, //0 -1312, 414, 1530, //1 32, -802, -222, //2 440, -184, -392, //3 906, 26, 0, //4 66, 20, 0, //5 -6, -472, -286, //6 630, 28, 130, //7 0, -30, 0, //8 1110, -10, 490, //9 -1050, 0, 0, //10 -10, 0, 0, //11 894, 166, -866, //12 -1088, 0, 0, //13 74, 0, 0, //14 } }; //box_upper(NAGURI) static MDATA box_up1[] = { { 628, 639, 110, -100, 562, 100, //0 -502, 406, -520, //1 292, -422, 98, //2 1650, -184, 452, //3 586, 26, 0, //4 66, 20, 0, //5 1854, 28, -56, //6 0, 28, 130, //7 -340, -410, 0, //8 800, -210, 740, //9 -1050, 0, 0, //10 320, 0, 0, //11 74, -224, -346, //12 -768, 0, 0, //13 74, 0, 0, //14 } }; //box_upper(NAGURI) static MDATA box_up2[] = { { 223, 469, 110, -180, 562, 100, //0 -302, -604, -266, //1 72, 178, -212, //2 1420, -184, 272, //3 586, 26, 0, //4 66, 20, 0, //5 1744, 28, -56, //6 -10, 28, 130, //7 -500, -410, 0, //8 830, -310, 710, //9 -1050, 0, 0, //10 320, 0, 0, //11 -46, -424, -496, //12 -418, 0, 0, //13 74, 0, 0, //14 } }; static MOVDATA fire_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 fire_sit[] = { // motion, px, py, pz, frame, flg, HITDATA { si0, 0, 0, 0, 8, MOV_SIT|MOV_END, NULL}, }; MOVDATA fire_get[] = { // motion, px, py, pz, frame, flg, HITDATA { si0, 0, 0, 0, 10, MOV_STAND|MOV_JUMP, NULL}, { si0, 0, 0, 0, 10, MOV_STAND|MOV_JUMP|MOV_END, NULL}, //{ nomot, 0, 0, 0, 12, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_fire[] = { // motion, px, py, pz, frame, flg, HITDATA { fire0, 0, 0, 0, 3, MOV_JUMP, NULL}, { fire0, 0, 0, 0, 36, MOV_JUMP, NULL}, { stand0, 0, 0, 0, 5, MOV_JUMP|MOV_END, NULL}, //{ nomot, 0, 0, 0, 12, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_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|MOV_END, NULL}, //{ st1, 0, 0, 0, 17, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_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 fire_jump_b[] = { // motion, px, py, pz, frame, flg, HITDATA { jb0, 0, 0, 0, 8, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_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 fire_tr[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 6, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 5, 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, 3, MOV_STAND|MOV_JUMP|MOV_END, NULL}, //{ stand0,-900, 0, 0, 18, MOV_STAND|MOV_END, NULL}, }; static HITDATA boxm_hit = { HF_HI | HF_FUKITOBI | HF_GBREAK, //flg 8, 1900,1200, //判定パーツの番号、判定サイズ(x,y) 95,140, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 17, //受け身不可時間 -1, //予備領域 32 //ダメージ }; static HITDATA boxf_hit = { HF_HI | HF_FUKITOBI | HF_GBREAK, //flg 8, 2000,1200, //判定パーツの番号、判定サイズ(x,y) 90,250, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 50, //受け身不可時間 -1, //予備領域 52 //ダメージ }; //箱殴る static MOVDATA fire_boxputf[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 6, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 4, MOV_STAND, NULL}, { box_up1, 400, 0, 0, 7, MOV_STAND, &boxf_hit}, { box_up2, 800, 0, 0, 2, MOV_STAND, &boxf_hit}, { box_up2, 0, 0, 0, 13, MOV_STAND, NULL}, { stand0,-700, 0, 0, 15, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_boxputfm[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 4, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { box_up1, 400, 0, 0, 6, MOV_STAND, &boxm_hit}, { box_up2, 800, 0, 0, 2, MOV_STAND, &boxm_hit}, { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND, NULL}, { box_up1, 400, 0, 0, 6, MOV_STAND, &boxf_hit}, { box_up2, 800, 0, 0, 2, MOV_STAND, &boxf_hit}, { box_up2, 0, 0, 0, 10, MOV_STAND, NULL}, { stand0,-700, 0, 0, 15, MOV_STAND|MOV_END, NULL}, }; static HITDATA boxh_hit = { HF_HI | HF_FUKITOBI | HF_GBREAK, //flg 8, 2300,1200, //判定パーツの番号、判定サイズ(x,y) 260,140, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 35, //受け身不可時間 -1, //予備領域 45 //ダメージ }; //箱殴る static MOVDATA fire_boxputlh[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 5, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { box_up1, 600, 0, 0, 8, MOV_STAND, &boxh_hit}, { box_up1, 0, 0, 0, 2, MOV_STAND, &boxh_hit}, { box_up1, 0, 0, 0, 11, MOV_STAND, NULL}, { stand0,-600, 0, 0, 16, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_boxputlhm[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND, NULL}, { box_up1, 600, 0, 0, 6, MOV_STAND, &boxm_hit}, { box_up1, 0, 0, 0, 2, MOV_STAND, &boxm_hit}, { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND, NULL}, { box_up1, 600, 0, 0, 7, MOV_STAND, &boxm_hit}, { box_up1, 0, 0, 0, 1, MOV_STAND, &boxh_hit}, { box_up1, 0, 0, 0, 11, MOV_STAND, NULL}, { stand0,-600, 0, 0, 16, MOV_STAND|MOV_END, NULL}, }; //箱殴る static MOVDATA fire_boxputh[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 6, MOV_STAND, NULL}, { tr0, 0, 0, 0, 4, MOV_STAND, NULL}, { box_up1, 200, 0, 0, 8, MOV_STAND, &boxh_hit}, { box_up1, 0, 0, 0, 13, MOV_STAND, NULL}, { stand0,-200, 0, 0, 17, MOV_STAND|MOV_END, NULL}, }; static HITDATA boxl_hit = { HF_HI | HF_FUKITOBI | HF_GBREAK, //flg 8, 1900,1200, //判定パーツの番号、判定サイズ(x,y) 80,160, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 35, //受け身不可時間 -1, //予備領域 32 //ダメージ }; //箱殴る static MOVDATA fire_boxputl[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 5, MOV_STAND, NULL}, { tr0, 0, 0, 0, 4, MOV_STAND, NULL}, { tr1, 0, 0, 0, 5, MOV_STAND, NULL}, { tr3, 400, 0, 0, 4, MOV_STAND, &boxl_hit}, { tr3, 0, 0, 0, 12, MOV_STAND, NULL}, { stand0,-400, 0, 0, 16, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_boxputlm[] = { { tr0, 0, 0, 0, 3, MOV_STAND, NULL}, { tr0, 0, 0, 0, 2, MOV_STAND, NULL}, { tr1, 0, 0, 0, 3, MOV_STAND, NULL}, { tr3, 400, 0, 0, 4, MOV_STAND, &boxm_hit}, { tr0, 0, 0, 0, 3, MOV_STAND, NULL}, { tr0, 0, 0, 0, 2, MOV_STAND, NULL}, { tr1, 0, 0, 0, 3, MOV_STAND, NULL}, { tr3, 400, 0, 0, 4, MOV_STAND, &boxl_hit}, { tr3, 0, 0, 0, 10, MOV_STAND, NULL}, { stand0,-400, 0, 0, 12, MOV_STAND|MOV_END, NULL}, }; //箱殴る static MOVDATA fire_boxputld[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 5, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 1, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { tr3, 400, 0, 0, 8, MOV_STAND, &boxl_hit}, { tr3, 0, 0, 0, 12, MOV_STAND, NULL}, { stand0,-400, 0, 0, 15, MOV_STAND|MOV_END, NULL}, }; static MOVDATA fire_boxputldm[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 1, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 1, MOV_STAND, NULL}, { tr3, 400, 0, 0, 5, MOV_STAND, &boxl_hit}, { box_up0, 0, 0, 0, 3, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 1, MOV_STAND, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND, NULL}, { tr3, 400, 0, 0, 7, MOV_STAND, &boxl_hit}, { tr3, 0, 0, 0, 10, MOV_STAND, NULL}, { stand0,-400, 0, 0, 13, MOV_STAND|MOV_END, NULL}, }; static HITDATA boxff_hit = { HF_HI | HF_FUKITOBI | HF_GBREAK, //flg 8, 2100,1200, //判定パーツの番号、判定サイズ(x,y) 110,230, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 55, //受け身不可時間 -1, //予備領域 54 //ダメージ }; //空箱殴る static MOVDATA fire_boxputff[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 0, 0, 0, 6, MOV_STAND|MOV_JUMP, &boxff_hit}, { box_up2, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, &boxff_hit}, { box_up2, 0, 0, 0, 15, MOV_STAND|MOV_JUMP, NULL}, { stand0, 0, 0, 0, 15, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static MOVDATA fire_boxputffm[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 400, 0, 0, 5, MOV_STAND|MOV_JUMP, &boxm_hit}, { box_up2, 800, 0, 0, 4, MOV_STAND|MOV_JUMP, &boxm_hit}, { box_up0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 400, 0, 0, 5, MOV_STAND|MOV_JUMP, &boxf_hit}, { box_up2, 800, 0, 0, 4, MOV_STAND|MOV_JUMP, &boxf_hit}, { box_up2, 0, 0, 0, 8, MOV_STAND|MOV_JUMP, NULL}, { stand0,-700, 0, 0, 13, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static HITDATA boxhf_hit = { HF_HI | HF_FUKITOBI | HF_GBREAK, //flg 8, 2200,1200, //判定パーツの番号、判定サイズ(x,y) 260,140, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 40, //受け身不可時間 -1, //予備領域 48 //ダメージ }; //空箱殴る static MOVDATA fire_boxputlhf[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 600, 0, 0, 7, MOV_STAND|MOV_JUMP, &boxhf_hit}, { box_up1, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, &boxh_hit}, { box_up1, 0, 0, 0, 11, MOV_STAND|MOV_JUMP, NULL}, { stand0,-600, 0, 0, 15, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static MOVDATA fire_boxputlhfm[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 600, 0, 0, 5, MOV_STAND|MOV_JUMP, &boxm_hit}, { box_up1, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, &boxm_hit}, { box_up0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 600, 0, 0, 6, MOV_STAND|MOV_JUMP, &boxm_hit}, { box_up1, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, &boxh_hit}, { box_up1, 0, 0, 0, 10, MOV_STAND|MOV_JUMP, NULL}, { stand0,-600, 0, 0, 13, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; //箱殴る static MOVDATA fire_boxputhf[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 200, 0, 0, 7, MOV_STAND|MOV_JUMP, &boxhf_hit}, { box_up1, 0, 0, 0, 13, MOV_STAND|MOV_JUMP, NULL}, { stand0,-200, 0, 0, 16, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static HITDATA boxlf_hit = { HF_HI | HF_FUKITOBI | HF_GBREAK, //flg 8, 2000,1200, //判定パーツの番号、判定サイズ(x,y) 90,160, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 35, //受け身不可時間 -1, //予備領域 46 //ダメージ }; //空箱殴る static MOVDATA fire_boxputlf[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 1, MOV_STAND|MOV_JUMP, NULL}, { tr1, 0, 0, 0, 6, MOV_STAND|MOV_JUMP, NULL}, { tr3, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, &boxlf_hit}, { tr3, 0, 0, 0, 12, MOV_STAND|MOV_JUMP, NULL}, { stand0, 0, 0, 0, 16, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static MOVDATA fire_boxputlfm[] = { { tr0, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { tr1, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { tr3, 400, 0, 0, 5, MOV_STAND|MOV_JUMP, &boxm_hit}, { tr0, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { tr1, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { tr3, 400, 0, 0, 5, MOV_STAND|MOV_JUMP, &boxl_hit}, { tr3, 0, 0, 0, 12, MOV_STAND|MOV_JUMP, NULL}, { stand0,-400, 0, 0, 16, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; //箱殴る static MOVDATA fire_boxputldf[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { tr3, 400, 0, 0, 8, MOV_STAND|MOV_JUMP, &boxlf_hit}, { tr3, 0, 0, 0, 12, MOV_STAND|MOV_JUMP, NULL}, { stand0,-400, 0, 0, 16, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static MOVDATA fire_boxputldfm[] = { // motion, px, py, pz, frame, flg, HITDATA { box_up0, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { tr3, 400, 0, 0, 6, MOV_STAND|MOV_JUMP, &boxl_hit}, { box_up0, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 0, 0, 0, 3, MOV_STAND|MOV_JUMP, NULL}, { tr3, 400, 0, 0, 8, MOV_STAND|MOV_JUMP, &boxl_hit}, { tr3, 0, 0, 0, 12, MOV_STAND|MOV_JUMP, NULL}, { stand0,-400, 0, 0, 15, MOV_STAND|MOV_JUMP|MOV_END, NULL}, }; static HITDATA greH_hit = { HF_HI | HF_TYU, //flg 8, 700,1200, //判定パーツの番号、判定サイズ(x,y) 80,120, //吹き飛び量 8,20, //硬直時間 2, //ヒットストップ時間 15, //受け身不可時間 -1, //予備領域 10 //ダメージ }; static MOVDATA fire_greH[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { tr1, 0, 0, 0, 7, MOV_STAND|MOV_JUMP, NULL}, { tr3, 0, 0, 0, 4, MOV_STAND|MOV_JUMP, &greH_hit}, { tr3, 0, 0, 0, 18, MOV_STAND|MOV_END|MOV_JUMP, NULL}, }; static HITDATA greL_hit = { HF_HI | HF_JYA, //flg 8, 600,1200, //判定パーツの番号、判定サイズ(x,y) 80,120, //吹き飛び量 8,20, //硬直時間 2, //ヒットストップ時間 15, //受け身不可時間 -1, //予備領域 8 //ダメージ }; //箱殴る static MOVDATA fire_greL[] = { // motion, px, py, pz, frame, flg, HITDATA { tr0, 0, 0, 0, 6, MOV_STAND|MOV_JUMP, NULL}, { tr0, 0, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { tr1, 0, 0, 0, 7, MOV_STAND|MOV_JUMP, NULL}, { tr3, 400, 0, 0, 4, MOV_STAND|MOV_JUMP, &greL_hit}, { tr3, 0, 0, 0, 7, MOV_STAND|MOV_JUMP, NULL}, { stand0,-400, 0, 0, 10, MOV_STAND|MOV_END|MOV_JUMP, NULL}, }; static HITDATA boxS_hit = { HF_HI | HF_KYO | HF_GBREAK, //flg 8, 2000,1200, //判定パーツの番号、判定サイズ(x,y) 90,160, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 35, //受け身不可時間 -1, //予備領域 49 //ダメージ }; static HITDATA boxS4_hit = { HF_HI | HF_KYO | HF_GBREAK | HF_NOSYUUSEI, //flg 8, 2000,1200, //判定パーツの番号、判定サイズ(x,y) 90,-10, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 105, //受け身不可時間 -1, //予備領域 16 //ダメージ }; static HITDATA boxS6_hit = { HF_HI | HF_KYO | HF_GBREAK | HF_NOSYUUSEI, //flg 8, 2000,1200, //判定パーツの番号、判定サイズ(x,y) 90,160, //吹き飛び量 45,20, //硬直時間 2, //ヒットストップ時間 105, //受け身不可時間 -1, //予備領域 23 //ダメージ }; static MOVDATA Sfire_box[] = { { tr0, 400, 0, 0, 4, MOV_STAND, NULL}, { tr0, 200, 0, 0, 1, MOV_STAND, NULL}, { tr1, 400, 0, 0, 4, MOV_STAND, NULL}, { tr3, 500, 0, 0, 4, MOV_STAND, &boxS_hit}, { tr0, 400, 0, 0, 4, MOV_STAND, NULL}, { tr0, 200, 0, 0, 2, MOV_STAND, NULL}, { tr1, 400, 0, 0, 4, MOV_STAND, NULL}, { tr3, 300, 0, 0, 4, MOV_STAND, &boxS_hit}, { tr3, 200, 0, 0, 4, MOV_STAND, NULL}, { box_up0,400, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { box_up0,200, 0, 0, 1, MOV_STAND|MOV_JUMP, NULL}, { tr3, 400, 0, 0, 4, MOV_STAND|MOV_JUMP, &boxlf_hit}, { tr3, 200, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { tr0, 400, 0, 0, 4, MOV_STAND, NULL}, { tr0, 200, 0, 0, 2, MOV_STAND, NULL}, { box_up1, 400, 0, 0, 4, MOV_STAND, &boxS4_hit}, { box_up1, 200, 0, 0, 4, MOV_STAND, NULL}, { box_up0, 400, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 200, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 400, 0, 0, 4, MOV_STAND|MOV_JUMP, &boxhf_hit}, { box_up1, 400, 0, 0, 4, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 200, 0, 0, 5, MOV_STAND|MOV_JUMP, NULL}, { box_up0, 200, 0, 0, 2, MOV_STAND|MOV_JUMP, NULL}, { box_up1, 200, 0, 0, 3, MOV_STAND|MOV_JUMP, &boxS6_hit}, { box_up2, 200, 0, 0, 2, MOV_STAND|MOV_JUMP, &boxS6_hit}, { box_up2, 200, 0, 0, 15, MOV_STAND|MOV_JUMP, NULL}, { stand0, 200, 0, 0, 15, MOV_STAND|MOV_JUMP|MOV_END, NULL}, { stand0,-400, 0, 0, 16, MOV_STAND|MOV_END, NULL}, }; static MOVDATA Sfire_fire[] = { // motion, px, py, pz, frame, flg, HITDATA { fire0, 0, 0, 0, 3, MOV_JUMP, NULL}, { fire0, 0, 0, 0, 96, MOV_JUMP, NULL}, { stand0, 0, 0, 0, 5, MOV_JUMP|MOV_END, NULL}, //{ nomot, 0, 0, 0, 12, MOV_STAND|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_TR -1 //nageru #define CH_PUT -2 //utu #define CH_FPUT -3 //utu int PADfront,PADback; //前、後ろの入力判定生成 //これらはCh0Move()関数で毎回必要な値が代入される //ジャンプ発生判定 void SetChFireJump(MAN *p) { //上が押されたならジャンプ準備に移行 //ここでは横移動量を0にしてジャンプ準備モーションに行くだけ //斜めジャンプ判定はジャンプ準備モーション中で行う。 if( p->cont & PADLup ) { p->g_pl.vx = 0; //ジャンプ中横移動量クリア p->st = CH_JUMP_B; //ジャンプ準備モーションに移行 SetNewMotion( p, &fire_jump_b[0], 0 ); return; } } //振り向き発生判定 void SetChFireTurn(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 SetChFireFDash(MAN *p) { //ダッシュコマンドが入力されたならダッシュに移行 if( p->face == LEFT ) { //左向きの場合 if( p->Ldash_flg == -1 ) { //ダッシュの左入力の判定 p->Ldash_flg = 0; //ダッシュ入力フラグクリア p->st = CH_FDASH; SetNewMotion( p, &fire_fdash[0], 0 ); return TRUE; } } else { //右向きの場合 if( p->Rdash_flg == -1 ) { //ダッシュの右入力の判定 p->Rdash_flg = 0; //ダッシュ入力フラグクリア p->st = CH_FDASH; SetNewMotion( p, &fire_fdash[0], 0 ); return TRUE; } } return FALSE; } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU BOOL SetChFireAttack(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 -= p->gage2/3; p->hit_flg = HH_NO; p->PB_flg = 0; //弱攻撃入力フラグクリア p->Lhd_flg = 0; //波動件入力フラグクリア p->Rhd_flg = 0; //波動件入力フラグクリア if( p->hold == HOLD_GRE ) { p->gage2 = 0; anten_flg = ANTEN_ON; p->light_flg |= LIGHT_R|LIGHT_B; anten_cnt = 30; p->st = CH_TR; p->hold_pt->dat4 = COUNT_SPPED+COUNT_SPPED/4; SetNewMotion( p, &fire_tr[0], 0 ); return ATK_HISSATU; } p->st = CH_PUT; if( p->hold == HOLD_BOX ) { SetNewMotion( p, &Sfire_box[0], 0 ); return ATK_HISSATU;} if( p->hold == HOLD_FIREGUN ) { SetNewMotion( p, &Sfire_fire[0], 0 ); return ATK_HISSATU;} SetNewMotion( p, &Sfire_fire[0], 0 ); return ATK_HISSATU; return ATK_HISSATU; } } } } //気弾 if( p->trg & PADRup ) { //飛び道具攻撃ボタンが入力されていた場合 //p->PB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_TR; SetNewMotion( p, &fire_tr[0], 0 ); return ATK_TUUJYOU; } if( p->LB_flg ) { //飛び道具攻撃ボタンが入力されていた場合 p->LB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_PUT; if( p->hold == HOLD_GRE ) { SetNewMotion( p, &fire_greL[0], 0 ); return ATK_TUUJYOU;} if( p->hold == HOLD_FIREGUN ) { SetNewMotion( p, &fire_fire[0], 0 ); return ATK_TUUJYOU;} if( p->cont & PADLdown ) { if( p->syu == 1 ) SetNewMotion( p, &fire_boxputldm[0], 0 ); else SetNewMotion( p, &fire_boxputld[0], 0 ); } else { if( p->syu == 1 )SetNewMotion( p, &fire_boxputlm[0], 0 ); else SetNewMotion( p, &fire_boxputl[0], 0 ); } } if( p->HB_flg ) { //飛び道具攻撃ボタンが入力されていた場合 p->HB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_PUT; if( p->hold == HOLD_GRE ) { SetNewMotion( p, &fire_greH[0], 0 ); return ATK_TUUJYOU;} if( p->hold == HOLD_FIREGUN ) { SetNewMotion( p, &fire_fire[0], 0 ); return ATK_TUUJYOU;} if( p->cont & PADLdown ) { if( p->syu == 1 ) SetNewMotion( p, &fire_boxputfm[0], 0 ); else SetNewMotion( p, &fire_boxputf[0], 0 ); } else if( p->cont & PADfront ) { if( p->syu == 1 )SetNewMotion( p, &fire_boxputlhm[0], 0 ); else SetNewMotion( p, &fire_boxputlh[0], 0 ); } else { if( p->syu == 1 )SetNewMotion( p, &fire_boxputlhm[0], 0 ); else SetNewMotion( p, &fire_boxputh[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; 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; if( p->st != CH_FDASH ) { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } return ATK_TUUJYOU; } return ATK_NO; } void ChFireMove(MAN *p,MAN *e) { int bx; OTHER *op; MATRIX *m; MOVDATA *pmv; if( p->hold_pt->flg == FALSE) { p->hold = HOLD_NO; p->st = 4; } //前後のキー判定作成 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: ChFireStand(p); //立ち break; case CH_WALK_F: ChFireWalk_f(p); //前進 break; case CH_FDASH: ChFireFDash(p); //前ダッシュ break; case CH_JUMP_B: ChFireJump_b(p); //ジャンプ準備 break; case CH_JUMP: //ジャンプ中 これら2つは case CH_JUMP2: ChFireJump(p); //二段ジャンプ中  同じ関数に飛ぶ break; case CH_SIT: ChFireSit(p); //sit break; case CH_TURN: ChFireTurn(p); //振り向き break; case CH_GET: ChFireGet(p); //get break; case CH_TR: ChFireTr(p); //nageru break; case CH_PUT: ChFirePut(p); //utu break; case CH_FPUT: ChFireFPut(p); //utu 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 = -300; if( p->face == LEFT ) op->dat3 = -30; else op->dat3 = 30; GsInitCoordinate2(WORLD,&op->obj.co); p->hold_pt = NULL; } 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) || (pmv->flg&MOV_GUARD)) ) { 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, &fire_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 ChFireStand( MAN *p ) { p->g_pl.vx = 0; //ジャンプ中横移動量クリア p->conbo_num = 0; //コンボ数初期化 p->dat4 = 0; //conbo num clear //前が押されたなら前進に移行 if( p->cont & PADfront ) { p->st = CH_WALK_F; SetNewMotion( p, &fire_walk_f[0], 0 ); return; } if( p->cont & PADLdown ) { p->st = CH_SIT; SetNewMotion( p, &fire_sit[0], 0 ); return; } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChFireAttack(p); //後ろが押されたなら振り向き SetChFireTurn( p ); //上が押されたならジャンプに移行 SetChFireJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChFireFDash( p ); //モーションを進めて、モーションが終わったならもう一度モーションを発動させる if( MoveNextMotion( p ) == FALSE ) { SetNewMotion( p, &fire_stand[0], 0 ); } } //前進モーション void ChFireWalk_f( MAN *p ) { p->r.vy = 0; //振り向き中にキャンセルでここに来ても大丈夫なように回転を正面に補正 //上が押されたならジャンプに移行 SetChFireJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChFireFDash( p ); //前が押されたなら前進を継続 if( p->cont & PADfront ) { //モーションを進めて、モーションが終わったならもう一度歩きモーションを発動させる if( MoveNextMotion( p ) == FALSE ) { SetNewMotion( p, &fire_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; //ジャンプ中横移動量クリア } } else { //前が押され続けていなければ立ちモーションに戻る p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChFireAttack(p); } //前ダッシュモーション void ChFireFDash( MAN *p ) { int sp; p->r.vy = 0; //振り向き中にキャンセルでここに来ても大丈夫なように回転を正面に補正 //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChFireAttack(p); //後ろが押されたなら振り向き SetChFireTurn( p ); //上が押されたならジャンプに移行 SetChFireJump( 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, &fire_fdash[0], 0 ); } else { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } } //しゃがみモーション void ChFireSit( MAN *p ) { //後ろが押されたなら振り向き SetChFireTurn( p ); //上が押されたならジャンプに移行 SetChFireJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChFireFDash( p ); //下が押されているならしゃがみを継続 if( p->cont & PADLdown ) { //モーションを進めて、モーションが終わったならもう一度しゃがみモーションを発動させる if( MoveNextMotion( p ) == FALSE ) { SetNewMotion( p, &fire_sit[0], 0 ); } } else {//下が押され続けていなければ立ちモーションに戻る p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChFireAttack(p); } //ジャンプ準備モーション void ChFireJump_b( MAN *p ) { p->r.vy = 0; //振り向き中にキャンセルできても大丈夫なように回転を補正 //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChFireAttack(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, &fire_jump[0], 0 ); } } //ジャンプモーション void ChFireJump( MAN *p ) { int sp; OTHER *op; MATRIX *m; p->dat4 = 0; //気弾 if( p->trg & PADRup ) { //飛び道具攻撃ボタンが入力されていた場合 //p->PB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_TR; SetNewMotion( p, &fire_tr[0], 0 ); return; } 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; 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, &fire_stand[0], 0 ); return; } if( p->LB_flg ) { //飛び道具攻撃ボタンが入力されていた場合 p->LB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_FPUT; if( p->hold == HOLD_GRE ) { SetNewMotion( p, &fire_greL[0], 0 ); return ;} if( p->hold == HOLD_FIREGUN ) { SetNewMotion( p, &fire_fire[0], 0 ); return;} if( p->cont & PADLdown ) { if( p->syu == 1 ) SetNewMotion( p, &fire_boxputldfm[0], 0 ); else SetNewMotion( p, &fire_boxputldf[0], 0 ); } else { if( p->syu == 1 ) SetNewMotion( p, &fire_boxputlfm[0], 0 ); else SetNewMotion( p, &fire_boxputlf[0], 0 ); } } if( p->HB_flg ) { //飛び道具攻撃ボタンが入力されていた場合 p->HB_flg = 0; //飛び道具攻撃フラグクリア p->st = CH_FPUT; if( p->hold == HOLD_GRE ) { SetNewMotion( p, &fire_greH[0], 0 ); return ;} if( p->hold == HOLD_FIREGUN ) { SetNewMotion( p, &fire_fire[0], 0 ); return;} if( p->cont & PADLdown ) { if( p->syu == 1 ) SetNewMotion( p, &fire_boxputffm[0], 0 ); else SetNewMotion( p, &fire_boxputff[0], 0 ); } else if( p->cont & PADfront ) { if( p->syu == 1 ) SetNewMotion( p, &fire_boxputlhfm[0], 0 ); else SetNewMotion( p, &fire_boxputlhf[0], 0 ); } else { if( p->syu == 1 ) SetNewMotion( p, &fire_boxputlhfm[0], 0 ); else SetNewMotion( p, &fire_boxputhf[0], 0 ); } return; } //二段ジャンプ可能状態なら二段ジャンプ if( p->st != CH_JUMP2 ) { //ジャンプ二段めではなくて、 if( p->trg & PADLup ) { //上がトリガで押された場合 p->st = CH_JUMP2; SetNewMotion( p, &fire_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, &fire_jump[0], 1 ); } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { p->st = CH_STAND; //着地モーションへ SetNewMotion( p, &fire_stand[0], 0 ); } } //振り向きモーション(振り向き動作のみ、モーションではなくキャラ全体の単純な回転) void ChFireTurn( MAN *p ) { //振り向きキャンセル //上が押されたならジャンプに移行 SetChFireJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChFireFDash( 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 ChFireGet( MAN *p ) { if( p->m_no == 0 && p->m_cnt == 1) { SetNewMotion( p, &fire_get[0], 1 ); p->m_cnt = 2; } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) 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+3; //重力分の移動量増加 } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } //火炎投げる void ChFireFireGun( MAN *p ) { int sp,gy,no; OTHER *op; MATRIX *m; no = p->syu; /* if( p->hold == HOLD_GRE ) { if( p->hold_pt->dat4 == 0 ) p->hold_pt->dat4 = 9*35; } */ 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; op->obj.mov.vx = m->t[0]; op->obj.mov.vy = m->t[1]; op->obj.mov.vz = m->t[2]; if( p == & man[0] ) op->dat1 = 2; else op->dat1 = 3; if( p->dat5 & PADLup ) { if( p->dat5 & PADfront ) { sp = fire_f_up[no].px; op->dat2 = fire_f_up[no].py; } else { sp = fire_up[no].px; op->dat2 = fire_up[no].py; } } else if( p->dat5 & PADLdown ) { if( p->dat5 & PADfront ) { sp = fire_f_down[no].px; op->dat2 = fire_f_down[no].py; } else { sp = fire_down[no].px; op->dat2 = fire_down[no].py; } } else if( p->dat5 & PADfront ) { sp = fire_front[no].px; op->dat2 = fire_front[no].py; } else { sp = fire_nomal[no].px; op->dat2 = fire_nomal[no].py; } if( p->face == LEFT ) op->dat3 = sp; else op->dat3 = -sp; GsInitCoordinate2(WORLD,&op->obj.co); p->hold_pt = NULL; } } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { // p->st = CH_STAND; //着地モーションへ // SetNewMotion( p, &fire_stand[0], 0 ); } else {//重力にしたがって移動 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, &fire_stand[0], 0 ); } } //箱投げる void ChFireBox( MAN *p ) { int sp,m_cnt,gy,no; OTHER *op; MATRIX *m; no = p->syu; 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->cont & PADfront ) m_cnt = 1; else m_cnt = 6; 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; 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 = 2; else op->dat1 = 3; if( p->dat5 & PADLup ) { if( p->dat5 & PADfront ) { sp = box_f_up[no].px; op->dat2 = box_f_up[no].py; } else { sp = box_up[no].px; op->dat2 = box_up[no].py; } } else if( p->dat5 & PADLdown ) { if( p->dat5 & PADfront ) { sp = box_f_down[no].px; op->dat2 = box_f_down[no].py; } else { sp = box_down[no].px; op->dat2 = box_down[no].py; } } else if( p->dat5 & PADfront ) { sp = box_front[no].px; op->dat2 = box_front[no].py; } else { sp = box_nomal[no].px; op->dat2 = box_nomal[no].py; } if( p->face == LEFT ) op->dat3 = sp; else op->dat3 = -sp; GsInitCoordinate2(WORLD,&op->obj.co); p->hold_pt = NULL; } } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { // p->st = CH_STAND; //着地モーションへ // SetNewMotion( p, &fire_stand[0], 0 ); } else {//重力にしたがって移動 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, &fire_stand[0], 0 ); } } //nageruモーション void ChFireTr( MAN *p ) { switch( p->hold ) { case HOLD_GRE: case HOLD_FIREGUN: ChFireFireGun(p); break; case HOLD_BOX: ChFireBox(p); break; } } //火炎撃つ void ChFirePutFireGun( MAN *p) { int i,px,py,face,flg,cnt,size; MATRIX *mat; mat = &p->hold_pt->obj.co.workm; //代入 if( p->m_no == 0 && p->m_cnt == 1 ) { if( p->mv != &Sfire_fire[0] ) { if( p->hold_pt->dat4 == -1 ) {//ばくはつ hitdata.hit_flg = HF_HI | HF_KYO; hitdata.px = 100; hitdata.py = 2000*60/2048; hitdata.hit_cnt = 2000*10/2048; hitdata.grd_cnt = 5; hitdata.noukemi_cnt = 4; hitdata.dmy = -1; hitdata.damege = 8; SetOtherDmg( p, &hitdata, 0, p->face ); PlaySE( SE_KYO ); //指定番号のSEを鳴らす if( p->face == LEFT ) mat->t[0] += 1100; else mat->t[0] -= 1100; for(i=0; i<10; i++) { px = Random( 2000,-2000 ); py = Random( 2000,-2000 ); mat->t[0] += px; mat->t[1] += py; cnt = Random( 40, 5 ); size = Random( 5000, 1500 ); SetHitMark( MK_BOMB0,mat,cnt, size );//ヒットマークのセット mat->t[0] -= px; mat->t[1] -= py; } for(i=0; i<13; i++) { mat->t[0] += Random( 700,-700 ); mat->t[2] += Random( 600,-600 ); px = Random( 200,-200 ); py = Random( 200,-200 ); cnt = Random( 55, 10 ); size = Random( 5000, 1500 ); if( px < 0 ) face = RIGHT; else face = LEFT; SetFlyObject( 2, mat, FLG_ALL, face, px, py, 0, cnt, size ); } p->hold_pt->flg = FALSE; } if( Random(100,0) > 64 ) { p->light_flg |= LIGHT_R; p->hold_pt->dat4 = -1; SetNewMotion( p, &fire_fire[0], 1 ); p->m_cnt = 17; } } } if( p->hold_pt->dat4 == -1 ) { if(p->m_no == 1 && p->m_cnt <= 5 ) p->light_flg |= LIGHT_R; } if( p->mv == &Sfire_fire[0] ) { p->gage2 -= 38; p->pl.vy += 200; anten_flg = ANTEN_ON; anten_cnt = 10; p->light_flg |= LIGHT_R|LIGHT_B; if( p->m_no == 1 ) { if( p->face == LEFT ) { px = 330; mat->t[0] += 900; } else { px = -330; mat->t[0] -= 900; } if( px < 0 ) face = RIGHT; else face = LEFT; py = Random( 190,-120 ); if( p == &man[0] ) flg = FLG_1P; else flg = FLG_2P; if( p->m_cnt < 16 ) { if( (p->m_cnt%2) == 0 ) SetFlyObject( 2, mat, flg, face, px, py, 0, Random(55,28), 3000 ); } else { if( (p->m_cnt%2) == 0 ) SetFlyObject( 2, mat, flg, face, px, py, 0, Random(48,12), 3000 ); } } } else if( p->m_no == 1 ) { if( p->face == LEFT ) { px = 350; mat->t[0] += 900; } else { px = -350; mat->t[0] -= 900; } if( px < 0 ) face = RIGHT; else face = LEFT; py = Random( 180,0 ); if( p == &man[0] ) flg = FLG_1P; else flg = FLG_2P; if( p->m_cnt < 16 ) { if( (p->m_cnt%5) == 0 ) SetFlyObject( 2, mat, flg, face, px, py, 0, 21, 3000 ); } else { if( (p->m_cnt%3) == 0 ) SetFlyObject( 2, mat, flg, face, px, py, 0, 28, 3000 ); } } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { // p->st = CH_STAND; //着地モーションへ // SetNewMotion( p, &fire_stand[0], 0 ); } else {//重力にしたがって移動 int gy; p->pl.vx += p->g_pl.vx; //左右移動 p->pl.vy += p->g_pl.vy; //垂直落下 p->g_pl.vy += G_POINT+3; //重力分の移動量増加 gy = GetGrandHeight(p->pl.vx);//現在の立ち位置の床の高さを求める if( p->pl.vy > gy ) p->pl.vy = gy; } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { if( p->mv == &Sfire_fire[0] ) { p->hold_pt->dat4 = -1; p->st = CH_TR; SetNewMotion( p, &fire_tr[0], 0 ); } else { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } } //GRE殴る void ChFirePutGre( MAN *p) { int gy; int px,py,face,flg; if( p->m_no == 0 && p->m_cnt == 1 ) { if( p->hold_pt->dat4 > 1 ) { if( p->mv == fire_greL ) p->hold_pt->dat4 -= COUNT_SPPED; else p->hold_pt->dat4 -= COUNT_SPPED*2; if( p->hold_pt->dat4 < 1 ) p->hold_pt->dat4 = 2; } } if( p->m_no == 5 ) { //前が押されたなら前進に移行 if( p->cont & PADfront ) { p->st = CH_WALK_F; SetNewMotion( p, &fire_walk_f[0], 0 ); return; } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChFireAttack(p); //後ろが押されたなら振り向き SetChFireTurn( p ); //上が押されたならジャンプに移行 SetChFireJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChFireFDash( p ); } p->pl.vy += 200; if( ChkGrandHit( p ) == TRUE ) { // p->st = CH_STAND; //着地モーションへ // SetNewMotion( p, &fire_stand[0], 0 ); } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } //箱殴る void ChFirePutBox( MAN *p) { int gy; int px,py,face,flg; if( p->mv == &Sfire_box[0] ) { p->gage2 -= 38; p->pl.vy += 200; anten_flg = ANTEN_ON; anten_cnt = 10; p->light_flg |= LIGHT_R|LIGHT_B; if( p->mv[p->m_no-1].hf != NULL ) { if( p->hit_flg != HH_NO ) { p->gage2 -= 58; p->hit_flg = HH_NO; } } } if( p->m_no == 5 ) { if( p->syu == 1 ){ p->hit_flg = HH_NO; } else { //前が押されたなら前進に移行 if( p->cont & PADfront ) { p->st = CH_WALK_F; SetNewMotion( p, &fire_walk_f[0], 0 ); return; } //地上攻撃モーション発生判定 ATK_HISSATU ATK_TUUJYOU SetChFireAttack(p); //後ろが押されたなら振り向き SetChFireTurn( p ); //上が押されたならジャンプに移行 SetChFireJump( p ); //ダッシュ入力がされたならダッシュに移行 SetChFireFDash( p ); } } if( ChkGrandHit( p ) == TRUE ) { // p->st = CH_STAND; //着地モーションへ // SetNewMotion( p, &fire_stand[0], 0 ); } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { if( p->mv == &Sfire_box[0] ) { p->st = CH_TR; SetNewMotion( p, &fire_tr[0], 0 ); } else { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } } //空GRE殴る void ChFireFPutGre( MAN *p) { int gy; int px,py,face,flg; if( p->m_no == 0 && p->m_cnt == 1 ) { if( p->hold_pt->dat4 > 1 ) { if( p->mv == fire_greL ) p->hold_pt->dat4 -= COUNT_SPPED; else p->hold_pt->dat4 -= COUNT_SPPED*2; if( p->hold_pt->dat4 < 1 ) p->hold_pt->dat4 = 2; } } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) 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+3; //重力分の移動量増加 } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } //空火炎撃つ void ChFireFPutFireGun( MAN *p) { int i,px,py,face,flg,cnt,size; MATRIX *mat; mat = &p->hold_pt->obj.co.workm; //代入 if( p->m_no == 0 && p->m_cnt == 1 ) { if(p->cont&PADLleft) p->face = LEFT; if(p->cont&PADLright) p->face = RIGHT; if( p->hold_pt->dat4 == -1 ) {//ばくはつ if( p == &man[0] ) flg = FLG_2P; else flg = FLG_1P; SetFlyObject( 2, mat, flg, p->face, 0, 0, 0, 10,8000 ); if( p == &man[0] ) SetFlyObject( 2, mat, FLG_1P, p->face, 0, 0, 0, 10,2000 ); else SetFlyObject( 2, mat, FLG_2P, p->face, 0, 0, 0, 10,2000 ); PlaySE( SE_KYO ); //指定番号のSEを鳴らす if( p->face == LEFT ) mat->t[0] += 1100; else mat->t[0] -= 1100; for(i=0; i<10; i++) { px = Random( 2200,-2200 ); py = Random( 2200,-2200 ); mat->t[0] += px; mat->t[1] += py; cnt = Random( 40, 5 ); size = Random( 5000, 1500 ); SetHitMark( MK_BOMB0,mat,cnt, size );//ヒットマークのセット mat->t[0] -= px; mat->t[1] -= py; } for(i=0; i<13; i++) { mat->t[0] += Random( 700,-700 ); mat->t[2] += Random( 600,-600 ); px = Random( 200,-200 ); py = Random( 200,-200 ); cnt = Random( 55, 10 ); size = Random( 5000, 1500 ); if( px < 0 ) face = RIGHT; else face = LEFT; SetFlyObject( 2, mat, FLG_ALL, face, px, py, 0, cnt, size ); } p->hold_pt->flg = FALSE; } if( Random(100,0) > 64 ) { p->hold_pt->dat4 = -1; p->light_flg |= LIGHT_R; SetNewMotion( p, &fire_fire[0], 1 ); p->m_cnt = 17; } } if( p->hold_pt->dat4 == -1 ) { if(p->m_no == 1 && p->m_cnt <= 5 ) p->light_flg |= LIGHT_R; } if( p->m_no == 1 ) { if( p->face == LEFT ) { px = 370; mat->t[0] += 900; } else { px = -370; mat->t[0] -= 900; } if( px < 0 ) face = RIGHT; else face = LEFT; py = Random( 180,0 ); if( p == &man[0] ) flg = FLG_1P; else flg = FLG_2P; if( p->m_cnt < 16 ) { if( (p->m_cnt%5) == 0 ) SetFlyObject( 2, mat, flg, face, px, py, 0, 20, 3000 ); } else { if( (p->m_cnt%3) == 0 ) SetFlyObject( 2, mat, flg, face, px, py, 0, 29, 3000 ); } } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) 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+3; //重力分の移動量増加 } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } //空箱殴る void ChFireFPutBox( MAN *p) { int gy; int px,py,face,flg; if( p->m_no == 0 && p->m_cnt == 1) { if(p->cont&PADLleft) p->face = LEFT; if(p->cont&PADLright) p->face = RIGHT; } if( p->m_no == 5 ) { if( p->syu == 1 ){ p->hit_flg = HH_NO; } } //壁あたり判定(地面判定よりも先に行わないと壁判定がおかしくなる) ChkWallHit(p); //着地すると着地モーションに移行 if( ChkGrandHit( p ) == TRUE ) { // p->st = CH_STAND; //着地モーションへ // SetNewMotion( p, &fire_stand[0], 0 ); } else {//重力にしたがって移動 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+3; //重力分の移動量増加 } //終了で立ちモーションに if( MoveNextMotion( p ) == FALSE ) { p->st = CH_STAND; SetNewMotion( p, &fire_stand[0], 0 ); } } //Fireモーション void ChFirePut( MAN *p ) { switch( p->hold ) { case HOLD_GRE: ChFirePutGre(p); break; case HOLD_FIREGUN: ChFirePutFireGun(p); break; case HOLD_BOX: ChFirePutBox(p); break; } } //Fireモーション void ChFireFPut( MAN *p ) { switch( p->hold ) { case HOLD_GRE: ChFireFPutGre(p); break; case HOLD_FIREGUN: ChFireFPutFireGun(p); break; case HOLD_BOX: ChFireFPutBox(p); break; } }