diff count2.c @ 0:435ac1cdb64e

create task dandy directry.
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Sat, 11 Dec 2010 21:25:28 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/count2.c	Sat Dec 11 21:25:28 2010 +0900
@@ -0,0 +1,415 @@
+#include <stdlib.h>
+#include "object.h"
+#include "count2.h"
+#include "sound.h"
+#include "bom.h"
+#include "sankaku.h"
+//#include "libps.h"
+#include "sgoex.h"
+#include "debug.h"
+extern int SsUtKeyOn(int vabId, int prog, int tone, int note, int fine, int voll, int vlor);
+
+
+/*
+ *    debugging
+ */
+extern SGO_PAD pad[2];
+
+player jiki = { 60, 200, 3, 0, FALSE, 120, 3, 3 };
+
+laser laser_lv1[20];
+laser laser_lv2[20];
+stge lg = { 4096 };
+stge pg = { 4096 };
+
+int infg_level = { 0 };
+
+stge infg = { 1 };
+
+tama1 tama_lv1[20];
+tama2 tama_lv2[20];
+tama1 tlv3[3];
+
+int py;
+int bomcount = { 0 };
+int charcount = { 0 };
+int bania;
+
+int pointkakudo(int playerno);
+
+int bf = { 0 };
+
+int tama_lv1_end = { -1 };
+int tama_lv2_end = { -1 };
+int laser_lv1_end = { -1 };
+int laser_lv2_end = { -1 };
+
+laser laser_lv3[64] = { {0, 0, 0, 0, 64, 0} };
+
+int se_key[6] = { -1, -1, -1, -1, -1, -1 };
+
+void Player(int playerno)
+{
+    int i;
+    float wariai1, wariai2;
+    /*
+    if (jiki.zanki > 0) {
+      DefSprite(194, "remainder.bmp", 8 * (jiki.zanki - 1), 8, 480, effect);
+      count++;
+      PutSprite(count, 128, 224, 194);
+    }
+    */
+    if (jiki.bf == FALSE) {
+	Bom(jiki.x, jiki.y);
+	return;
+    }
+    /*時機無敵時間計算 */
+    if (jiki.muteki > 0 && jiki.bf == TRUE) {
+	count++;
+	//	PutSprite(count, jiki.x + 16, jiki.y + 16, 193);
+	PutSpriteEx(193, jiki.x + 16, jiki.y + 16, 2, 2, 1);
+	count++;
+	//	PutSprite(count, jiki.x + 16, jiki.y + 16, 193);
+	PutSpriteEx(193, jiki.x + 16, jiki.y + 16, 2, 2, 1);
+
+	jiki.muteki--;
+    }
+    /*コントローラ上限値-------------------------------- */
+    maxf(pad[0].right, 3);
+    maxf(pad[0].left, 3);
+    maxf(pad[0].up, 3);
+    maxf(pad[0].down, 3);
+
+
+    /*自機の動き---------------------------------------- */
+    jiki.x += pad[0].right - pad[0].left;
+    jiki.y += pad[0].down - pad[0].up;
+
+
+    /*自機の動き---------------------------------------- */
+    mini(jiki.x, 0);
+    maxf(jiki.x, 1688 - 128);
+    mini(jiki.y, 0);
+    maxf(jiki.y, 964 - 128);
+
+    if (pad[0].right > 0) {
+	if (charcount < 0)
+	    charcount = 0;
+	else
+	    charcount++;
+    }
+    if (pad[0].left > 0) {
+	if (charcount > 0)
+	    charcount = 0;
+	else
+	    charcount--;
+    }
+    if ((pad[0].left == 0) && (pad[0].right == 0))
+	charcount = 0;
+    jiki.ch =
+	3 * (charcount < 3) * (charcount > -3) + 2 * (charcount <
+						      -3) * (charcount >=
+							     -15) +
+	1 * (charcount < -15)
+	+ 4 * (charcount > 3) * (charcount <= 15) + 5 * (charcount > 15);
+
+
+    /*玉レベル1登録------------------------------------ */
+    if ((pad[0].k4 % 3 == 1) && (pad[0].k3 % 3 == 0)) {
+
+      PlaySdlMixer(0, SHOT_A);// output sound  
+      //se_voice[0] = SsUtKeyOn(vab[SHOT_A], 0, 0, 65, 0, 60, 60);
+	pad[0].k4 = 1;
+	tama_lv1_end++;
+	i = tama_lv1_end;
+
+	tama_lv1[i].x = jiki.x;
+	tama_lv1[i].y = jiki.y;
+	tama_lv1[i].r = 1;
+	tama_lv1[i].l = 1;
+
+	if (pg.stg <= MAXP)
+	    pg.stg += 1;
+    }
+    /*玉レベル2登録------------------------------------ */
+    if ((pad[0].k3 % 3 == 1) && (pad[0].k4 == 0) && (pg.stg > 64)) {
+
+      PlaySdlMixer(0, SHOT_B);// output sound                                                                               
+      //se_key[1] = SsUtKeyOn(vab[SHOT_B], 0, 0, 65, 0, 80, 80);
+	se_key[1] = SsUtKeyOn(vab[SHOT_B], 0, 0, 65, 0, 80, 80);
+	pad[0].k3 = 1;
+	tama_lv2_end++;
+	i = tama_lv2_end;
+
+	tama_lv2[i].x = jiki.x;
+	tama_lv2[i].y = jiki.y;
+	tama_lv2[i].rr = 1;
+	tama_lv2[i].sr = 1;
+	tama_lv2[i].sl = 1;
+	tama_lv2[i].ll = 1;
+
+	pg.stg -= 64;
+    }
+    /*玉レベル3登録------------------------------------- */
+    if ((pad[0].k3 % 5 > 0) && (pad[0].k4 % 5 > 0)) {
+	pad[0].k3 = 1;
+	pad[0].k4 = 1;
+	i = 0;
+	while (tlv3[i].y != -1) {
+	    i++;
+	}
+	if ((i < 1) && (pg.stg > 2000)) {
+	  PlaySdlMixer(0,SHOT_C); // re-za-                              
+          //se_voice[0] = SsUtKeyOn(vab[SHOT_C], 0, 0, 65, 0, 75, 75);  
+	    se_voice[0] = SsUtKeyOn(vab[SHOT_C], 0, 0, 65, 0, 75, 75);
+	    tlv3[i].x = jiki.x;
+	    tlv3[i].y = jiki.y;
+	    pg.stg -= 2000;
+	    tlv3[i].r = 90;
+	    jiki.muteki = 4;
+	}
+    }
+    /*押してないときの玉ゲージ回復---------------------- */
+    if ((pad[0].k3 == 0) && (pad[0].k4 == 0))
+	if (pg.stg <= MAXP)
+	    pg.stg += 4;
+    /*玉レベル1表示------------------------------ */
+    for (i = 0; i < tama_lv1_end + 1; i++) {
+	tama_lv1[i].y -= 64;
+	if (tama_lv1[i].r == 1) {
+	    count++;
+	    PutSprite(count, tama_lv1[i].x + 64, tama_lv1[i].y, 6);
+	}
+	if (tama_lv1[i].l == 1) {
+	    count++;
+	    PutSprite(count, tama_lv1[i].x, tama_lv1[i].y, 7);
+	}
+	if (tama_lv1[i].y < 0) {
+	    if (tama_lv1_end == i) {
+		tama_lv1_end--;
+		break;
+	    }
+	    if (tama_lv1_end > i) {
+		tama_lv1[i] = tama_lv1[tama_lv1_end];
+		tama_lv1_end--;
+		i--;
+	    }
+	}
+    }
+    /*玉レベル2表示------------------------------ */
+    for (i = 0; i < tama_lv2_end + 1; i++) {
+	tama_lv2[i].y -= 64;
+	if (tama_lv2[i].rr == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x + 128, tama_lv2[i].y-96, 8);
+	}
+	if (tama_lv2[i].sr == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x + 64, tama_lv2[i].y - 192, 8);
+	}
+	if (tama_lv2[i].sl == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x, tama_lv2[i].y - 192, 8);
+	}
+	if (tama_lv2[i].ll == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x - 64, tama_lv2[i].y-92, 8);
+	}
+	if (tama_lv2[i].y < 0) {
+	    if (tama_lv2_end == i) {
+		tama_lv2_end--;
+		break;
+	    }
+	    if (tama_lv2_end > i) {
+		tama_lv2[i] = tama_lv2[tama_lv2_end];
+		tama_lv2_end--;
+		i--;
+	    }
+	}
+    }
+    /*玉レベル3表示----------------------------------- */
+    if (tlv3[0].r > 0) {
+	/*波動砲本体 */
+	tlv3[0].x = jiki.x + 96;
+	tlv3[0].y = jiki.y;
+	count++;
+	//	PutSprite(count, tlv3[0].x, tlv3[0].y - 128, 9);
+	PutSpriteEx(9, tlv3[0].x, tlv3[0].y - 128, tlv3[0].r *2 /45, 3, 1);
+
+
+	/*干渉部分 */
+	//DefSprite(39, 0, 16, 112 - ((tlv3[0].r % 8) / 2) * 16, 16, 16,
+	//  480);
+
+	/*波動砲干渉部分 */
+	count++;
+	//	PutSprite(count, jiki.x + 16, jiki.y + 32, 39);
+	PutSpriteEx(39, jiki.x + 16, jiki.y + 32, 2, 2, 1);
+
+	/*終了フラグ */
+	tlv3[0].r--;
+	if (tlv3[0].r == 0)
+	    tlv3[0].y = -1;
+    }
+    /*  } */
+    /*玉ゲージの中身表示------------------------- */
+    wariai2 = pg.stg;
+    wariai1 = wariai2 / 4096.0;
+    py = 64.0 * wariai1;
+
+    //DefSprite(11, "offensivepower_gauge.bmp", 8, py, 480, effect);
+    count++;
+    //PutSprite(count, 0, 240 - 96 + 64 - py, 11);
+    /*レーザーゲージの中身表示------------------------ */
+    wariai2 = lg.stg;
+    wariai1 = wariai2 / 4096.0;
+    py = 64.0 * wariai1;
+    //DefSprite(15, "diffensivepower_gauge.bmp", 9, py, 480, effect);
+
+    count++;
+    //PutSprite(count, 18, 240 - 105, 15);
+    /*インフレゲージ------------------------------------- */
+    if (infg.stg > 640) {
+	infg.stg = 0;
+	infg_level++;
+	if (infg_level > 11) {
+	    infg_level = 11;
+	    infg.stg = 640;
+	}
+    }
+    py = infg.stg / 8;
+    //DefSprite(49, "inflation_meter.bmp", 16, py, 320, effect);
+
+#define REGULATION_PUTSIZE_X 5
+    count++;
+    //PutSprite(count, REGULATION_PUTSIZE_X + 4 - 7, 24 + 83 - py, 49);
+    count++;
+    //PutSprite(count, REGULATION_PUTSIZE_X + 0, 40 + 80, 200 + infg_level);
+
+    /*バーニアアニメーション----------------------------- */
+    bania++;
+    bania %= 3;
+    //DefSprite(12, "burner.bmp", 16, 16, 480, effect);
+    count++;
+    //PutSprite(count, jiki.x + 8, jiki.y + 32, 12);
+
+    /*照準コントロール----------------------------------- */
+    if (pad[0].r1 % 2 == 1) {
+	pad[0].r1 = 1;
+	jiki.point += 10;
+    }
+    if (pad[0].l1 % 2 == 1) {
+	pad[0].l1 = 1;
+	jiki.point -= 10;
+    }
+    jiki.point %= 360;
+    int siny = 50 * Mysin(jiki.point - 90) / SANKAKU;
+    int cosx = 30 + 50 * Mycos(jiki.point - 90) / SANKAKU;
+    count++;
+    DefSpriteEx(13, 4, 64);
+    //    PutSprite(count, jiki.x + 16, jiki.y, 13);
+    PutSpriteEx(13, jiki.x + cosx, jiki.y + siny, 2, 2, jiki.point);
+    /*押してないときレーザーゲージ回復------------------- */
+
+    if ((pad[0].k1 == 0) && (pad[0].k0 == 0))
+	if (lg.stg <= MAXP)
+	    lg.stg += 4;
+    /*レーザーレベル1登録------------------------------- */
+    if ((pad[0].k1 % 3 == 1) && (pad[0].k0 == 0) && (lg.stg > 16)) {
+      PlaySdlMixer(0, RING) ; // RING  
+
+      //se_key[3] = SsUtKeyOn(vab[LASER_A], 0, 0, 65, 0, 50, 50);
+	pad[0].k1 = 1;
+	laser_lv1_end++;
+	i = laser_lv1_end;
+
+	laser_lv1[i].sx = 32 * Mysin(jiki.point) / SANKAKU;
+	laser_lv1[i].sy = 32 * Mycos(jiki.point) / SANKAKU;
+	laser_lv1[i].x = jiki.x + 128;
+	laser_lv1[i].y = jiki.y + 128;
+	laser_lv1[i].r = 1000;
+	laser_lv1[i].s = 0.08;
+	lg.stg -= 16;
+    }
+    /*--------------------------------------------------*/
+    for (i = 0; i < laser_lv1_end + 1; i++) {
+	if (laser_lv1[i].r != -1) {
+	    laser_lv1[i].y -= laser_lv1[i].sy;
+	    laser_lv1[i].x += laser_lv1[i].sx;
+	    laser_lv1[i].r += 100;
+	    laser_lv1[i].s += 0.05;
+	    count++;
+	    DefSpriteEx(16, 16, 16);
+	    //	    PutSprite(count, laser_lv1[i].x, laser_lv1[i].y, 16);
+	    PutSpriteEx(16, laser_lv1[i].x, laser_lv1[i].y, laser_lv1[i].s, laser_lv1[i].s, 1);
+	}
+	if (waku(laser_lv1[i].x, laser_lv1[i].y)) {
+	    if (laser_lv1_end == i) {
+		laser_lv1_end--;
+		break;
+	    }
+	    if (laser_lv1_end > i) {
+		laser_lv1[i] = laser_lv1[laser_lv1_end];
+		laser_lv1_end--;
+		i--;
+	    }
+	}
+    }
+    /*レーザーレベル2登録------------------------------- */
+    if ((pad[0].k1 == 0) && (pad[0].k0 != 0) && (lg.stg > 200)) {
+      PlaySdlMixer(0, NEW) ;// SHIELD 
+
+	if (laser_lv2[0].r == 0) {
+	    laser_lv2[0].r = 1;
+	    lg.stg -= 100;
+	} else {
+	    laser_lv2[0].r %= 45;
+	    laser_lv2[0].r++;
+	    lg.stg -= 10;
+	}
+    } else {
+	laser_lv2[0].r = 0;
+    }
+    /*------------------------------------*/
+    if (laser_lv2[0].r != 0) {
+	laser_lv2[0].x = jiki.x + 128 + 256 * Mysin(jiki.point) / SANKAKU;
+	laser_lv2[0].y = jiki.y + 128  - 256 * Mycos(jiki.point) / SANKAKU;
+	count++;
+	//	PutSprite(count, laser_lv2[0].x, laser_lv2[0].y, 17);
+	PutSpriteEx(17, laser_lv2[0].x, laser_lv2[0].y, 2, 2, laser_lv2[0].r * 8);
+    }
+
+/*ここに特殊兵器ボムの関数をよろしく*/
+/*発射準備 (laser_lv3[playerno][0] は、爆発発生の種。)*/
+    if ((pad[0].k1 > 0) && (pad[0].k0 > 0)
+	&& (lg.stg > 2400) && (laser_lv3[0].r > 61)) {
+      PlaySdlMixer(0, BOM) ;// BOM 
+      //se_voice[0] = SsUtKeyOn(vab[LASER_C], 0, 0, 65, 0, 70, 70);
+
+	laser_lv3[0].x = jiki.x + 256 * Mysin(jiki.point) / SANKAKU;
+	laser_lv3[0].y = jiki.y - 256 * Mycos(jiki.point) / SANKAKU;
+	laser_lv3[0].r = 0;
+	lg.stg -= 2400;
+	jiki.muteki = 60;
+    }
+    if (laser_lv3[0].r < 62) {	/*ボムフラグ継続か */
+	laser_lv3[0].r++;
+	if (laser_lv3[0].r % 2 == 0) {	/*爆風発生 */
+	    laser_lv3[1 + laser_lv3[0].r / 2].r = 8;
+	    laser_lv3[1 + laser_lv3[0].r / 2].x =
+		laser_lv3[0].x + rand() % 640 - 320;
+	    laser_lv3[1 + laser_lv3[0].r / 2].y =
+		laser_lv3[0].y + rand() % 640 - 320;
+	}
+    }
+    /*ボムノアニメーション */
+    for (i = 1; i < 32; i++) {
+	if (laser_lv3[i].r > 0) {
+	    laser_lv3[i].r--;
+	    count++;
+	    //	    PutSprite(count, laser_lv3[i].x, laser_lv3[i].y,
+	    //		      47 - (laser_lv3[i].r));
+	    PutSpriteEx(47 - (laser_lv3[i].r), laser_lv3[i].x, laser_lv3[i].y, 4, 4, 1);
+	}
+    }
+}