Added all the remaining bullet types
This commit is contained in:
parent
593995d410
commit
025a30fd41
4 changed files with 1258 additions and 6 deletions
|
@ -9,6 +9,7 @@
|
|||
#include "Sound.h"
|
||||
#include "Main.h"
|
||||
#include "Game.h"
|
||||
#include "Shoot.h"
|
||||
|
||||
int gArmsEnergyX = 16;
|
||||
|
||||
|
@ -457,7 +458,7 @@ int RotationArms()
|
|||
if (!arms_num)
|
||||
return 0;
|
||||
|
||||
//ResetSpurCharge();
|
||||
ResetSpurCharge();
|
||||
|
||||
++gSelectedArms;
|
||||
while (gSelectedArms < arms_num && !gArmsData[gSelectedArms].code)
|
||||
|
@ -479,7 +480,7 @@ int RotationArmsRev()
|
|||
if (!arms_num)
|
||||
return 0;
|
||||
|
||||
//ResetSpurCharge();
|
||||
ResetSpurCharge();
|
||||
|
||||
if (--gSelectedArms < 0)
|
||||
gSelectedArms = arms_num - 1;
|
||||
|
|
883
src/Bullet.cpp
883
src/Bullet.cpp
|
@ -169,6 +169,198 @@ void SetBullet(int no, int x, int y, int dir)
|
|||
}
|
||||
}
|
||||
|
||||
void ActBullet_Frontia1(BULLET *bul)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
SetCaret(bul->x, bul->y, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bul->act_no)
|
||||
{
|
||||
bul->x += bul->xm;
|
||||
bul->y += bul->ym;
|
||||
}
|
||||
else
|
||||
{
|
||||
bul->ani_no = Random(0, 2);
|
||||
bul->act_no = 1;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm = -0x600;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym = -0x600;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm = 0x600;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym = 0x600;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (++bul->ani_wait > 0)
|
||||
{
|
||||
bul->ani_wait = 0;
|
||||
++bul->ani_no;
|
||||
}
|
||||
|
||||
if (bul->ani_no > 3)
|
||||
bul->ani_no = 0;
|
||||
|
||||
RECT rcLeft[4];
|
||||
RECT rcRight[4];
|
||||
|
||||
rcLeft[0] = {136, 80, 152, 80};
|
||||
rcLeft[1] = {120, 80, 136, 96};
|
||||
rcLeft[2] = {136, 64, 152, 80};
|
||||
rcLeft[3] = {120, 64, 136, 80};
|
||||
|
||||
rcRight[0] = {120, 64, 136, 80};
|
||||
rcRight[1] = {136, 64, 152, 80};
|
||||
rcRight[2] = {120, 80, 136, 96};
|
||||
rcRight[3] = {136, 80, 152, 80};
|
||||
|
||||
if (bul->direct == 0)
|
||||
bul->rect = rcLeft[bul->ani_no];
|
||||
else
|
||||
bul->rect = rcRight[bul->ani_no];
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_Frontia2(BULLET *bul, int level)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
SetCaret(bul->x, bul->y, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bul->act_no)
|
||||
{
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm -= 0x80;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym -= 0x80;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm += 0x80;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym += 0x80;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
if (bul->count1 % 5 == 2)
|
||||
{
|
||||
if (bul->ym < 0)
|
||||
bul->ym = 0x400;
|
||||
else
|
||||
bul->ym = -0x400;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1u:
|
||||
case 3u:
|
||||
if (bul->count1 % 5 == 2)
|
||||
{
|
||||
if (bul->xm < 0)
|
||||
bul->xm = 0x400;
|
||||
else
|
||||
bul->xm = -0x400u;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
bul->x += bul->xm;
|
||||
bul->y += bul->ym;
|
||||
}
|
||||
else
|
||||
{
|
||||
bul->ani_no = Random(0, 2);
|
||||
bul->act_no = 1;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm = -0x200;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym = -0x200;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm = 0x200;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym = 0x200;
|
||||
break;
|
||||
}
|
||||
|
||||
static unsigned int inc;
|
||||
++inc;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
if (inc % 2)
|
||||
bul->ym = 0x400;
|
||||
else
|
||||
bul->ym = -0x400;
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 3:
|
||||
if (inc % 2)
|
||||
bul->xm = -0x400;
|
||||
else
|
||||
bul->xm = 0x400;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ++bul->ani_wait > 0 )
|
||||
{
|
||||
bul->ani_wait = 0;
|
||||
++bul->ani_no;
|
||||
}
|
||||
|
||||
if ( bul->ani_no > 2 )
|
||||
bul->ani_no = 0;
|
||||
|
||||
RECT rect[3];
|
||||
|
||||
rect[0] = {192, 16, 208, 32};
|
||||
rect[1] = {208, 16, 224, 32};
|
||||
rect[2] = {224, 16, 240, 32};
|
||||
|
||||
bul->rect = rect[bul->ani_no];
|
||||
|
||||
if (level == 2)
|
||||
SetNpChar(129, bul->x, bul->y, 0, -0x200, bul->ani_no, 0, 0x100);
|
||||
else
|
||||
SetNpChar(129, bul->x, bul->y, 0, -0x200, bul->ani_no + 3, 0, 0x100);
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_PoleStar(BULLET *bul, int level)
|
||||
{
|
||||
if (++bul->count1 <= bul->life_count)
|
||||
|
@ -1091,6 +1283,332 @@ void ActBullet_Spine(BULLET *bul)
|
|||
}
|
||||
}
|
||||
|
||||
void ActBullet_Sword1(BULLET *bul)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
SetCaret(bul->x, bul->y, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bul->count1 == 3)
|
||||
bul->bbits &= ~4;
|
||||
|
||||
if (bul->count1 % 5 == 1)
|
||||
PlaySoundObject(34, 1);
|
||||
|
||||
if (bul->act_no)
|
||||
{
|
||||
bul->x += bul->xm;
|
||||
bul->y += bul->ym;
|
||||
}
|
||||
else
|
||||
{
|
||||
bul->act_no = 1;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm = -0x800;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym = -0x800;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm = 0x800;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym = 0x800;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
RECT rcLeft[4];
|
||||
RECT rcRight[4];
|
||||
|
||||
rcLeft[0] = {0, 48, 16, 64};
|
||||
rcLeft[1] = {16, 48, 32, 64};
|
||||
rcLeft[2] = {32, 48, 48, 64};
|
||||
rcLeft[3] = {48, 48, 64, 64};
|
||||
|
||||
rcRight[0] = {64, 48, 80, 64};
|
||||
rcRight[1] = {80, 48, 96, 64};
|
||||
rcRight[2] = {96, 48, 112, 64};
|
||||
rcRight[3] = {112, 48, 128, 64};
|
||||
|
||||
if (++bul->ani_wait > 1)
|
||||
{
|
||||
bul->ani_wait = 0;
|
||||
++bul->ani_no;
|
||||
}
|
||||
|
||||
if (bul->ani_no > 3)
|
||||
bul->ani_no = 0;
|
||||
|
||||
if (bul->direct == 0)
|
||||
bul->rect = rcLeft[bul->ani_no];
|
||||
else
|
||||
bul->rect = rcRight[bul->ani_no];
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_Sword2(BULLET *bul)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
SetCaret(bul->x, bul->y, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bul->count1 == 3)
|
||||
bul->bbits &= ~4;
|
||||
|
||||
if (bul->count1 % 7 == 1)
|
||||
PlaySoundObject(106, 1);
|
||||
|
||||
if (bul->act_no)
|
||||
{
|
||||
bul->x += bul->xm;
|
||||
bul->y += bul->ym;
|
||||
}
|
||||
else
|
||||
{
|
||||
bul->act_no = 1;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm = -0x800;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym = -0x800;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm = 0x800;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym = 0x800;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
RECT rcLeft[4];
|
||||
RECT rcRight[4];
|
||||
|
||||
rcLeft[0] = {160, 48, 184, 72};
|
||||
rcLeft[1] = {184, 48, 208, 72};
|
||||
rcLeft[2] = {208, 48, 232, 72};
|
||||
rcLeft[3] = {232, 48, 256, 72};
|
||||
|
||||
rcRight[0] = {160, 72, 184, 96};
|
||||
rcRight[1] = {184, 72, 208, 96};
|
||||
rcRight[2] = {208, 72, 232, 96};
|
||||
rcRight[3] = {232, 72, 256, 96};
|
||||
|
||||
if (++bul->ani_wait > 1)
|
||||
{
|
||||
bul->ani_wait = 0;
|
||||
++bul->ani_no;
|
||||
}
|
||||
|
||||
if (bul->ani_no > 3)
|
||||
bul->ani_no = 0;
|
||||
|
||||
if (bul->direct == 0)
|
||||
bul->rect = rcLeft[bul->ani_no];
|
||||
else
|
||||
bul->rect = rcRight[bul->ani_no];
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_Sword3(BULLET *bul)
|
||||
{
|
||||
RECT rcLeft[2];
|
||||
RECT rcUp[2];
|
||||
RECT rcDown[2];
|
||||
RECT rcRight[2];
|
||||
|
||||
rcLeft[0] = {272, 0, 296, 24};
|
||||
rcLeft[1] = {296, 0, 320, 24};
|
||||
|
||||
rcUp[0] = {272, 48, 296, 72};
|
||||
rcUp[1] = {296, 0, 320, 24};
|
||||
|
||||
rcRight[0] = {272, 24, 296, 48};
|
||||
rcRight[1] = {296, 24, 320, 48};
|
||||
|
||||
rcDown[0] = {296, 48, 320, 72};
|
||||
rcDown[1] = {296, 24, 320, 48};
|
||||
|
||||
switch (bul->act_no)
|
||||
{
|
||||
case 0:
|
||||
bul->act_no = 1;
|
||||
bul->xm = 0;
|
||||
bul->ym = 0;
|
||||
// Fallthrough
|
||||
case 1:
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm = -0x800;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym = -0x800;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm = 0x800;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym = 0x800;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bul->life != 100)
|
||||
{
|
||||
bul->act_no = 2;
|
||||
bul->ani_no = 1;
|
||||
bul->damage = -1;
|
||||
bul->act_wait = 0;
|
||||
}
|
||||
|
||||
if (++bul->act_wait % 4 == 1)
|
||||
{
|
||||
PlaySoundObject(106, 1);
|
||||
|
||||
if (++bul->count1 % 2)
|
||||
SetBullet(23, bul->x, bul->y, 0);
|
||||
else
|
||||
SetBullet(23, bul->x, bul->y, 2);
|
||||
}
|
||||
|
||||
if ( ++bul->count1 == 5 )
|
||||
bul->bbits &= ~4u;
|
||||
|
||||
if (bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
SetCaret(bul->x, bul->y, 3, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
bul->xm = 0;
|
||||
bul->ym = 0;
|
||||
++bul->act_wait;
|
||||
|
||||
if (Random(-1, 1) == 0)
|
||||
{
|
||||
PlaySoundObject(106, 1);
|
||||
|
||||
if (Random(0, 1) % 2)
|
||||
SetBullet(23, bul->x + (Random(-0x40, 0x40) * 0x200), bul->y + (Random(-0x40, 0x40) * 0x200), 0);
|
||||
else
|
||||
SetBullet(23, bul->x + (Random(-0x40, 0x40) * 0x200), bul->y + (Random(-0x40, 0x40) * 0x200), 2);
|
||||
}
|
||||
|
||||
if (bul->act_wait > 50)
|
||||
bul->cond = 0;
|
||||
}
|
||||
|
||||
bul->x += bul->xm;
|
||||
bul->y += bul->ym;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->rect = rcLeft[bul->ani_no];
|
||||
break;
|
||||
case 1:
|
||||
bul->rect = rcUp[bul->ani_no];
|
||||
break;
|
||||
case 2:
|
||||
bul->rect = rcRight[bul->ani_no];
|
||||
break;
|
||||
case 3:
|
||||
bul->rect = rcDown[bul->ani_no];
|
||||
break;
|
||||
}
|
||||
|
||||
if (bul->act_wait % 2)
|
||||
bul->rect.right = 0;
|
||||
}
|
||||
|
||||
void ActBullet_Edge(BULLET *bul)
|
||||
{
|
||||
RECT rcLeft[5];
|
||||
RECT rcRight[5];
|
||||
|
||||
switch (bul->act_no)
|
||||
{
|
||||
case 0:
|
||||
bul->act_no = 1;
|
||||
bul->y -= 0x1800;
|
||||
|
||||
if (bul->direct == 0)
|
||||
bul->x += 0x2000;
|
||||
else
|
||||
bul->x -= 0x2000;
|
||||
// Fallthrough
|
||||
case 1:
|
||||
if (++bul->ani_wait > 2)
|
||||
{
|
||||
bul->ani_wait = 0;
|
||||
++bul->ani_no;
|
||||
}
|
||||
|
||||
if (bul->direct == 0)
|
||||
bul->x -= 0x400;
|
||||
else
|
||||
bul->x += 0x400;
|
||||
|
||||
bul->y += 0x400;
|
||||
|
||||
if (bul->ani_no == 1)
|
||||
bul->damage = 2;
|
||||
else
|
||||
bul->damage = 1;
|
||||
|
||||
if (bul->ani_no > 4)
|
||||
bul->cond = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
rcLeft[0] = {0, 64, 24, 88};
|
||||
rcLeft[1] = {24, 64, 48, 88};
|
||||
rcLeft[2] = {48, 64, 72, 88};
|
||||
rcLeft[3] = {72, 64, 96, 88};
|
||||
rcLeft[4] = {96, 64, 120, 88};
|
||||
|
||||
rcRight[0] = {0, 88, 24, 112};
|
||||
rcRight[1] = {24, 88, 48, 112};
|
||||
rcRight[2] = {48, 88, 72, 112};
|
||||
rcRight[3] = {72, 88, 96, 112};
|
||||
rcRight[4] = {96, 88, 120, 112};
|
||||
|
||||
if (bul->direct == 0)
|
||||
bul->rect = rcLeft[bul->ani_no];
|
||||
else
|
||||
bul->rect = rcRight[bul->ani_no];
|
||||
}
|
||||
|
||||
void ActBullet_Drop(BULLET *bul)
|
||||
{
|
||||
RECT rc[1];
|
||||
|
||||
rc[0] = {0, 0, 0, 0};
|
||||
|
||||
if (++bul->act_wait > 2)
|
||||
bul->cond = 0;
|
||||
|
||||
bul->rect = rc[0];
|
||||
}
|
||||
|
||||
void ActBullet_SuperMissile(BULLET *bul, int level)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
|
@ -1344,6 +1862,313 @@ void ActBullet_SuperBom(BULLET *bul, int level)
|
|||
}
|
||||
}
|
||||
|
||||
void ActBullet_Nemesis(BULLET *bul, int level)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
SetCaret(bul->x, bul->y, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bul->act_no)
|
||||
{
|
||||
if (level == 1 && bul->count1 % 4 == 1)
|
||||
{
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
SetNpChar(4, bul->x, bul->y, -0x200, Random(-0x200, 0x200), 2, 0, 0x100);
|
||||
break;
|
||||
case 1:
|
||||
SetNpChar(4, bul->x, bul->y, Random(-0x200, 0x200), -0x200, 2, 0, 0x100);
|
||||
break;
|
||||
case 2:
|
||||
SetNpChar(4, bul->x, bul->y, 0x200, Random(-0x200, 0x200), 2, 0, 0x100);
|
||||
break;
|
||||
case 3:
|
||||
SetNpChar(4, bul->x, bul->y, Random(-0x200, 0x200), 0x200, 2, 0, 0x100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bul->x += bul->xm;
|
||||
bul->y += bul->ym;
|
||||
}
|
||||
else
|
||||
{
|
||||
bul->act_no = 1;
|
||||
bul->count1 = 0;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm = -0x1000;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym = -0x1000;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm = 0x1000;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym = 0x1000;
|
||||
break;
|
||||
}
|
||||
|
||||
if (level == 3)
|
||||
{
|
||||
bul->xm /= 3;
|
||||
bul->ym /= 3;
|
||||
}
|
||||
}
|
||||
|
||||
if (++bul->ani_no > 1)
|
||||
bul->ani_no = 0;
|
||||
|
||||
RECT rcL[2];
|
||||
RECT rcU[2];
|
||||
RECT rcR[2];
|
||||
RECT rcD[2];
|
||||
|
||||
rcL[0] = {0, 112, 32, 128};
|
||||
rcL[1] = {0, 128, 32, 144};
|
||||
|
||||
rcU[0] = {32, 112, 48, 144};
|
||||
rcU[1] = {48, 112, 64, 144};
|
||||
|
||||
rcR[0] = {64, 112, 96, 128};
|
||||
rcR[1] = {64, 128, 96, 144};
|
||||
|
||||
rcD[0] = {96, 112, 112, 144};
|
||||
rcD[1] = {112, 112, 128, 144};
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->rect = rcL[bul->ani_no];
|
||||
break;
|
||||
case 1:
|
||||
bul->rect = rcU[bul->ani_no];
|
||||
break;
|
||||
case 2:
|
||||
bul->rect = rcR[bul->ani_no];
|
||||
break;
|
||||
case 3:
|
||||
bul->rect = rcD[bul->ani_no];
|
||||
break;
|
||||
}
|
||||
|
||||
bul->rect.top += 32 * ((level - 1) / 2);
|
||||
bul->rect.bottom += 32 * ((level - 1) / 2);
|
||||
bul->rect.left += (level - 1) % 2 << 7;
|
||||
bul->rect.right += (level - 1) % 2 << 7;
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_Spur(BULLET *bul, int level)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
SetCaret(bul->x, bul->y, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bul->damage && bul->life != 100)
|
||||
bul->damage = 0;
|
||||
|
||||
if (bul->act_no)
|
||||
{
|
||||
bul->x += bul->xm;
|
||||
bul->y += bul->ym;
|
||||
}
|
||||
else
|
||||
{
|
||||
bul->act_no = 1;
|
||||
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->xm = -0x1000;
|
||||
break;
|
||||
case 1:
|
||||
bul->ym = -0x1000;
|
||||
break;
|
||||
case 2:
|
||||
bul->xm = 0x1000;
|
||||
break;
|
||||
case 3:
|
||||
bul->ym = 0x1000;
|
||||
break;
|
||||
}
|
||||
|
||||
if (level == 1)
|
||||
{
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->enemyYL = 0x400;
|
||||
break;
|
||||
case 1:
|
||||
bul->enemyXL = 0x400;
|
||||
break;
|
||||
case 2:
|
||||
bul->enemyYL = 0x400;
|
||||
break;
|
||||
case 3:
|
||||
bul->enemyXL = 0x400;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (level == 2)
|
||||
{
|
||||
switch (bul->direct)
|
||||
{
|
||||
case 0:
|
||||
bul->enemyYL = 0x800;
|
||||
break;
|
||||
case 1:
|
||||
bul->enemyXL = 0x800;
|
||||
break;
|
||||
case 2:
|
||||
bul->enemyYL = 0x800;
|
||||
break;
|
||||
case 3:
|
||||
bul->enemyXL = 0x800;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RECT rect1[2];
|
||||
RECT rect2[2];
|
||||
RECT rect3[2];
|
||||
|
||||
rect1[0] = {128, 32, 144, 48};
|
||||
rect1[1] = {144, 32, 160, 48};
|
||||
|
||||
rect2[0] = {160, 32, 176, 48};
|
||||
rect2[1] = {176, 32, 192, 48};
|
||||
|
||||
rect3[0] = {128, 48, 144, 64};
|
||||
rect3[1] = {144, 48, 160, 64};
|
||||
|
||||
bul->damage = bul->life;
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
if (bul->direct == 1 || bul->direct == 3)
|
||||
bul->rect = rect1[1];
|
||||
else
|
||||
bul->rect = rect1[0];
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (bul->direct == 1 || bul->direct == 3)
|
||||
bul->rect = rect2[1];
|
||||
else
|
||||
bul->rect = rect2[0];
|
||||
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (bul->direct == 1 || bul->direct == 3)
|
||||
bul->rect = rect3[1];
|
||||
else
|
||||
bul->rect = rect3[0];
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
SetBullet(level + 39, bul->x, bul->y, bul->direct);
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_SpurTail(BULLET *bul, int level)
|
||||
{
|
||||
if ( ++bul->count1 > 20 )
|
||||
bul->ani_no = bul->count1 - 20;
|
||||
if ( bul->ani_no > 2 )
|
||||
bul->cond = 0;
|
||||
if ( bul->damage && bul->life != 100 )
|
||||
bul->damage = 0;
|
||||
|
||||
RECT rc_h_lv1[3];
|
||||
RECT rc_v_lv1[3];
|
||||
RECT rc_h_lv2[3];
|
||||
RECT rc_v_lv2[3];
|
||||
RECT rc_h_lv3[3];
|
||||
RECT rc_v_lv3[3];
|
||||
|
||||
rc_h_lv1[0] = {192, 32, 200, 40};
|
||||
rc_h_lv1[1] = {200, 32, 208, 40};
|
||||
rc_h_lv1[2] = {208, 32, 216, 40};
|
||||
|
||||
rc_v_lv1[0] = {192, 40, 200, 48};
|
||||
rc_v_lv1[1] = {200, 40, 208, 48};
|
||||
rc_v_lv1[2] = {208, 40, 216, 48};
|
||||
|
||||
rc_h_lv2[0] = {216, 32, 224, 40};
|
||||
rc_h_lv2[1] = {224, 32, 232, 40};
|
||||
rc_h_lv2[2] = {232, 32, 240, 40};
|
||||
|
||||
rc_v_lv2[0] = {216, 40, 224, 48};
|
||||
rc_v_lv2[1] = {224, 40, 232, 48};
|
||||
rc_v_lv2[2] = {232, 40, 240, 48};
|
||||
|
||||
rc_h_lv3[0] = {240, 32, 248, 40};
|
||||
rc_h_lv3[1] = {248, 32, 256, 40};
|
||||
rc_h_lv3[2] = {256, 32, 264, 40};
|
||||
|
||||
rc_v_lv3[0] = {240, 32, 248, 40};
|
||||
rc_v_lv3[1] = {248, 32, 256, 40};
|
||||
rc_v_lv3[2] = {256, 32, 264, 40};
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
if (bul->direct == 0 || bul->direct == 2)
|
||||
bul->rect = rc_h_lv1[bul->ani_no];
|
||||
else
|
||||
bul->rect = rc_v_lv1[bul->ani_no];
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (bul->direct == 0 || bul->direct == 2)
|
||||
bul->rect = rc_h_lv2[bul->ani_no];
|
||||
else
|
||||
bul->rect = rc_v_lv2[bul->ani_no];
|
||||
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (bul->direct == 0 || bul->direct == 2)
|
||||
bul->rect = rc_h_lv3[bul->ani_no];
|
||||
else
|
||||
bul->rect = rc_v_lv3[bul->ani_no];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_EnemyClear(BULLET *bul)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
{
|
||||
bul->cond = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
bul->damage = 10000;
|
||||
bul->enemyXL = 0xC8000;
|
||||
bul->enemyYL = 0xC8000;
|
||||
}
|
||||
}
|
||||
|
||||
void ActBullet_Star(BULLET *bul)
|
||||
{
|
||||
if (++bul->count1 > bul->life_count)
|
||||
|
@ -1360,6 +2185,15 @@ void ActBullet()
|
|||
{
|
||||
switch (gBul[i].code_bullet)
|
||||
{
|
||||
case 1:
|
||||
ActBullet_Frontia1(&gBul[i]);
|
||||
break;
|
||||
case 2:
|
||||
ActBullet_Frontia2(&gBul[i], 2);
|
||||
break;
|
||||
case 3:
|
||||
ActBullet_Frontia2(&gBul[i], 3);
|
||||
break;
|
||||
case 4:
|
||||
ActBullet_PoleStar(&gBul[i], 1);
|
||||
break;
|
||||
|
@ -1417,7 +2251,21 @@ void ActBullet()
|
|||
case 22:
|
||||
ActBullet_Spine(&gBul[i]);
|
||||
break;
|
||||
// TODO everything else
|
||||
case 23:
|
||||
ActBullet_Edge(&gBul[i]);
|
||||
break;
|
||||
case 24:
|
||||
ActBullet_Drop(&gBul[i]);
|
||||
break;
|
||||
case 25:
|
||||
ActBullet_Sword1(&gBul[i]);
|
||||
break;
|
||||
case 26:
|
||||
ActBullet_Sword2(&gBul[i]);
|
||||
break;
|
||||
case 27:
|
||||
ActBullet_Sword3(&gBul[i]);
|
||||
break;
|
||||
case 28:
|
||||
ActBullet_SuperMissile(&gBul[i], 1);
|
||||
break;
|
||||
|
@ -1436,6 +2284,39 @@ void ActBullet()
|
|||
case 33:
|
||||
ActBullet_SuperBom(&gBul[i], 3);
|
||||
break;
|
||||
case 34:
|
||||
ActBullet_Nemesis(&gBul[i], 1);
|
||||
break;
|
||||
case 35:
|
||||
ActBullet_Nemesis(&gBul[i], 2);
|
||||
break;
|
||||
case 36:
|
||||
ActBullet_Nemesis(&gBul[i], 3);
|
||||
break;
|
||||
case 37:
|
||||
ActBullet_Spur(&gBul[i], 1);
|
||||
break;
|
||||
case 38:
|
||||
ActBullet_Spur(&gBul[i], 2);
|
||||
break;
|
||||
case 39:
|
||||
ActBullet_Spur(&gBul[i], 3);
|
||||
break;
|
||||
case 40:
|
||||
ActBullet_SpurTail(&gBul[i], 1);
|
||||
break;
|
||||
case 41:
|
||||
ActBullet_SpurTail(&gBul[i], 2);
|
||||
break;
|
||||
case 42:
|
||||
ActBullet_SpurTail(&gBul[i], 3);
|
||||
break;
|
||||
case 43:
|
||||
ActBullet_Nemesis(&gBul[i], 1);
|
||||
break;
|
||||
case 44:
|
||||
ActBullet_EnemyClear(&gBul[i]);
|
||||
break;
|
||||
case 45:
|
||||
ActBullet_Star(&gBul[i]);
|
||||
break;
|
||||
|
|
375
src/Shoot.cpp
375
src/Shoot.cpp
|
@ -10,6 +10,76 @@
|
|||
int empty;
|
||||
int spur_charge;
|
||||
|
||||
void ShootBullet_Frontia1(int level)
|
||||
{
|
||||
int bul_no;
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
bul_no = 1;
|
||||
break;
|
||||
case 2:
|
||||
bul_no = 2;
|
||||
break;
|
||||
case 3:
|
||||
bul_no = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
if (CountArmsBullet(1) <= 3 && gKeyTrg & gKeyShot)
|
||||
{
|
||||
if (!UseArmsEnergy(1))
|
||||
{
|
||||
ChangeToFirstArms();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMC.up)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0x600, gMC.y - 0x1400, 1);
|
||||
SetCaret(gMC.x - 0x600, gMC.y - 0x1400, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0x600, gMC.y - 0x1400, 1);
|
||||
SetCaret(gMC.x + 0x600, gMC.y - 0x1400, 3, 0);
|
||||
}
|
||||
}
|
||||
else if (gMC.down)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0x600, gMC.y + 0x1400, 3);
|
||||
SetCaret(gMC.x - 0x600, gMC.y + 0x1400, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0x600, gMC.y + 0x1400, 3);
|
||||
SetCaret(gMC.x + 0x600, gMC.y + 0x1400, 3, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x400, 0);
|
||||
SetCaret(gMC.x - 0x1800, gMC.y + 0x400, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x400, 2);
|
||||
SetCaret(gMC.x + 0x1800, gMC.y + 0x400, 3, 0);
|
||||
}
|
||||
}
|
||||
|
||||
PlaySoundObject(33, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShootBullet_PoleStar(int level)
|
||||
{
|
||||
int bul_no;
|
||||
|
@ -163,6 +233,7 @@ void ShootBullet_Machinegun1(int level)
|
|||
if (CountArmsBullet(4) < 5)
|
||||
{
|
||||
int bul_no;
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
|
@ -625,6 +696,283 @@ void ShootBullet_Bubblin2(int level)
|
|||
}
|
||||
}
|
||||
|
||||
void ShootBullet_Sword(int level)
|
||||
{
|
||||
if (CountArmsBullet(9) <= 0)
|
||||
{
|
||||
int bul_no;
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
bul_no = 25;
|
||||
break;
|
||||
case 2:
|
||||
bul_no = 26;
|
||||
break;
|
||||
case 3:
|
||||
bul_no = 27;
|
||||
break;
|
||||
}
|
||||
|
||||
if (gKeyTrg & gKeyShot)
|
||||
{
|
||||
if (gMC.up)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x800, 1);
|
||||
else
|
||||
SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x800, 1);
|
||||
}
|
||||
else if (gMC.down)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0xC00, 3);
|
||||
else
|
||||
SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0xC00, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
SetBullet(bul_no, gMC.x + 0xC00, gMC.y - 0x600, 0);
|
||||
else
|
||||
SetBullet(bul_no, gMC.x - 0xC00, gMC.y - 0x600, 2);
|
||||
}
|
||||
|
||||
PlaySoundObject(34, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShootBullet_Nemesis(int level)
|
||||
{
|
||||
int bul_no;
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
bul_no = 34;
|
||||
break;
|
||||
case 2:
|
||||
bul_no = 35;
|
||||
break;
|
||||
case 3:
|
||||
bul_no = 36;
|
||||
break;
|
||||
}
|
||||
|
||||
if (CountArmsBullet(12) <= 1 && gKeyTrg & gKeyShot)
|
||||
{
|
||||
if (!UseArmsEnergy(1))
|
||||
{
|
||||
PlaySoundObject(37, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMC.up)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1800, 1);
|
||||
SetCaret(gMC.x - 0x200, gMC.y - 0x1800, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1800, 1);
|
||||
SetCaret(gMC.x + 0x200, gMC.y - 0x1800, 3, 0);
|
||||
}
|
||||
}
|
||||
else if (gMC.down)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1800, 3);
|
||||
SetCaret(gMC.x - 0x200, gMC.y + 0x1800, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1800, 3);
|
||||
SetCaret(gMC.x + 0x200, gMC.y + 0x1800, 3, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0x2C00, gMC.y + 0x600, 0);
|
||||
SetCaret(gMC.x - 0x2000, gMC.y + 0x600, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0x2C00, gMC.y + 0x600, 2);
|
||||
SetCaret(gMC.x + 0x2000, gMC.y + 0x600, 3, 0);
|
||||
}
|
||||
}
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
PlaySoundObject(117, 1);
|
||||
break;
|
||||
case 2:
|
||||
PlaySoundObject(49, 1);
|
||||
break;
|
||||
case 3:
|
||||
PlaySoundObject(60, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ResetSpurCharge(void)
|
||||
{
|
||||
spur_charge = 0;
|
||||
|
||||
if (gArmsData[gSelectedArms].code == 13)
|
||||
ZeroExpMyChar();
|
||||
}
|
||||
|
||||
void ShootBullet_Spur(int level)
|
||||
{
|
||||
int bul_no;
|
||||
|
||||
bool bShot = false;
|
||||
|
||||
if (gKey & gKeyShot)
|
||||
{
|
||||
if (gMC.equip & 8)
|
||||
AddExpMyChar(3);
|
||||
else
|
||||
AddExpMyChar(2);
|
||||
|
||||
if (++spur_charge / 2 % 2)
|
||||
{
|
||||
if (level == 1)
|
||||
{
|
||||
PlaySoundObject(59, 1);
|
||||
}
|
||||
else if (level == 2)
|
||||
{
|
||||
PlaySoundObject(60, 1);
|
||||
}
|
||||
else if (level == 3)
|
||||
{
|
||||
if (!IsMaxExpMyChar())
|
||||
PlaySoundObject(61, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (spur_charge)
|
||||
bShot = true;
|
||||
|
||||
spur_charge = 0;
|
||||
}
|
||||
|
||||
static bool bMax;
|
||||
|
||||
if (IsMaxExpMyChar())
|
||||
{
|
||||
if (bMax == false)
|
||||
{
|
||||
bMax = true;
|
||||
PlaySoundObject(65, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bMax = false;
|
||||
}
|
||||
|
||||
if (gKey & gKeyShot == 0)
|
||||
ZeroExpMyChar();
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
bul_no = 6;
|
||||
bShot = false;
|
||||
break;
|
||||
case 2:
|
||||
bul_no = 37;
|
||||
break;
|
||||
case 3:
|
||||
if (bMax)
|
||||
bul_no = 39;
|
||||
else
|
||||
bul_no = 38;
|
||||
break;
|
||||
}
|
||||
|
||||
if (CountArmsBullet(13) <= 0 && CountArmsBullet(14) <= 0 && (gKeyTrg & gKeyShot || bShot))
|
||||
{
|
||||
if (!UseArmsEnergy(1))
|
||||
{
|
||||
PlaySoundObject(37, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMC.up)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1000, 1);
|
||||
SetCaret(gMC.x - 0x200, gMC.y - 0x1000, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1000, 1);
|
||||
SetCaret(gMC.x + 0x200, gMC.y - 0x1000, 3, 0);
|
||||
}
|
||||
}
|
||||
else if (gMC.down)
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1000, 3);
|
||||
SetCaret(gMC.x - 0x200, gMC.y + 0x1000, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1000, 3);
|
||||
SetCaret(gMC.x + 0x200, gMC.y + 0x1000, 3, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMC.direct == 0)
|
||||
{
|
||||
SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x600, 0);
|
||||
SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x600, 2);
|
||||
SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
|
||||
}
|
||||
}
|
||||
|
||||
switch (bul_no)
|
||||
{
|
||||
case 6:
|
||||
PlaySoundObject(49, 1);
|
||||
break;
|
||||
case 37:
|
||||
PlaySoundObject(62, 1);
|
||||
break;
|
||||
case 38:
|
||||
PlaySoundObject(63, 1);
|
||||
break;
|
||||
case 39:
|
||||
PlaySoundObject(64, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShootBullet()
|
||||
{
|
||||
if (empty)
|
||||
|
@ -647,6 +995,9 @@ void ShootBullet()
|
|||
{
|
||||
switch (gArmsData[gSelectedArms].code)
|
||||
{
|
||||
case 1:
|
||||
ShootBullet_Frontia1(gArmsData[gSelectedArms].level);
|
||||
break;
|
||||
case 2:
|
||||
ShootBullet_PoleStar(gArmsData[gSelectedArms].level);
|
||||
break;
|
||||
|
@ -673,13 +1024,31 @@ void ShootBullet()
|
|||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case 9:
|
||||
switch (gArmsData[gSelectedArms].level)
|
||||
{
|
||||
case 1:
|
||||
ShootBullet_Sword(1);
|
||||
break;
|
||||
case 2:
|
||||
ShootBullet_Sword(2);
|
||||
break;
|
||||
case 3:
|
||||
ShootBullet_Sword(3);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case 10:
|
||||
ShootBullet_Missile(gArmsData[gSelectedArms].level, true);
|
||||
break;
|
||||
case 12:
|
||||
ShootBullet_Nemesis(gArmsData[gSelectedArms].level);
|
||||
break;
|
||||
case 13:
|
||||
ShootBullet_Spur(gArmsData[gSelectedArms].level);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(gKeyTrg & gKeyShot))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
#pragma once
|
||||
void ResetSpurCharge(void);
|
||||
void ShootBullet();
|
||||
|
|
Loading…
Add table
Reference in a new issue