ReC98/th05/p_yuuka.cpp

266 lines
6.2 KiB
C++

/* ReC98
* -----
* Yuuka's shot control functions
*/
#pragma codeseg main_01_TEXT
extern "C" {
#include "th05/th05.hpp"
#define cycle _AL
#define YUUKA_INNER_L4 \
switch(sai.i - 1) { \
case 0: sai.angle = 186; break; \
case 1: sai.angle = 192; shot->pos.cur.x -= 8; break; \
case 2: sai.angle = 192; shot->pos.cur.x += 8; break; \
case 3: sai.angle = 198; break; \
} \
shot->damage = 7;
#define YUUKA_INNER_L5 \
switch(sai.i - 1) { \
case 0: sai.angle = 180; break; \
case 1: sai.angle = 186; break; \
case 2: sai.angle = 192; break; \
case 3: sai.angle = 198; break; \
case 4: sai.angle = 204; break; \
} \
shot->damage = 7;
void pascal near shot_yuuka_l2(void)
{
SHOT_FUNC_INIT(1, SC_3X, SC_1X, i += 2);
while(( shot = shots_add() ) != NULL) {
if(sai.i == 1) {
sai.angle = randring_angle(15, 184);
shot->damage = 9;
} else {
if(sai.i == 3) { shot->from_option_l(); sai.angle = 184; }
else/*i == 2*/ { shot->from_option_r(); sai.angle = 200; }
shot->set_option_sprite_and_damage(6);
}
shot_velocity_set(&shot->pos.velocity, sai.angle);
if(sai.next() <= 0) {
break;
}
}
}
void pascal near shot_yuuka_l3(void)
{
SHOT_FUNC_INIT(2, SC_3X, SC_2X, add_secondary(2));
char option_only = cycle & SC_3X;
while(( shot = shots_add() ) != NULL) {
if(sai.i <= 2) {
if(sai.i == 2) { shot->pos.cur.x -= 8; }
else/*i == 1*/ { shot->pos.cur.x += 8; }
shot->damage = 8;
} else {
if(sai.i == 4) {
shot->from_option_l();
sai.angle = 184;
} else {
shot->from_option_r();
sai.angle = 200;
if(option_only == 0) {
sai.i = 1;
}
}
shot->set_option_sprite_and_damage(6);
shot_velocity_set(&shot->pos.velocity, sai.angle);
}
if(sai.next() <= 0) {
break;
}
}
}
void pascal near shot_yuuka_l4(void)
{
SHOT_FUNC_INIT(3, SC_3X, SC_2X, add_secondary(2));
char option_only = cycle & SC_3X;
while(( shot = shots_add() ) != NULL) {
if(sai.i <= 3) {
if(sai.i == 3) {
sai.angle = 180;
}
shot->damage = 7;
sai.angle += 6;
} else {
if(sai.i == 5) {
shot->from_option_l();
sai.angle = randring_angle(7, 180);
} else {
shot->from_option_r();
sai.angle = randring_angle(7, 196);
if(option_only == 0) {
sai.i = 1;
}
}
shot->pos.velocity.y = 2;
shot->set_option_sprite_and_damage(6);
}
shot_velocity_set(&shot->pos.velocity, sai.angle);
if(sai.next() <= 0) {
break;
}
}
}
void pascal near shot_yuuka_l5(void)
{
SHOT_FUNC_INIT(3, SC_3X, SC_2X, add_secondary(4));
char option_only = cycle & SC_3X;
while(( shot = shots_add() ) != NULL) {
if(sai.i <= 3) {
shot->damage = 7;
if(sai.i == 3) {
sai.angle = 180;
}
sai.angle += 6;
} else {
switch(sai.i - 4u) {
case 0:
if(option_only == 0) {
sai.i = 1;
}
shot->from_option_l(); sai.angle = 178; break;
case 1: shot->from_option_r(); sai.angle = 206; break;
case 2: shot->from_option_l(); sai.angle = 186; break;
case 3: shot->from_option_r(); sai.angle = 198; break;
}
shot->set_option_sprite_and_damage(6);
}
shot_velocity_set(&shot->pos.velocity, sai.angle);
if(sai.next() <= 0) {
break;
}
}
}
void pascal near shot_yuuka_l6(void)
{
SHOT_FUNC_INIT(4, SC_3X, SC_2X, add_secondary(4));
char option_only = cycle & SC_3X;
while(( shot = shots_add() ) != NULL) {
if(sai.i <= 4) {
YUUKA_INNER_L4;
} else {
switch(sai.i - 5u) {
case 0: shot->from_option_l(); sai.angle = 176;
if(option_only == 0) {
sai.i = 1;
}
break;
case 1: shot->from_option_r(); sai.angle = 208; break;
case 2: shot->from_option_l(); sai.angle = 184; break;
case 3: shot->from_option_r(); sai.angle = 200; break;
}
shot->set_option_sprite_and_damage(6);
}
shot_velocity_set(&shot->pos.velocity, sai.angle);
if(sai.next() <= 0) {
break;
}
}
}
void pascal near shot_yuuka_l7(void)
{
SHOT_FUNC_INIT(4, SC_3X, SC_2X, add_secondary(6));
char option_only = cycle & SC_3X;
while(( shot = shots_add() ) != NULL) {
if(sai.i <= 4) {
YUUKA_INNER_L4;
} else {
switch(sai.i - 5u) {
case 0: shot->from_option_l(); sai.angle = 176;
if(option_only == 0) {
sai.i = 1;
}
break;
case 1: shot->from_option_r(); sai.angle = 208; break;
case 2: shot->from_option_l(); sai.angle = 183; break;
case 3: shot->from_option_r(); sai.angle = 201; break;
case 4: shot->from_option_l(); sai.angle = 190; break;
case 5: shot->from_option_r(); sai.angle = 194; break;
}
shot->set_option_sprite_and_damage(6);
}
shot_velocity_set(&shot->pos.velocity, sai.angle);
if(sai.next() <= 0) {
break;
}
}
}
void pascal near shot_yuuka_l8(void)
{
SHOT_FUNC_INIT(5, SC_3X, SC_2X, add_secondary(6));
char option_only = cycle & SC_3X;
while(( shot = shots_add() ) != NULL) {
if(sai.i <= 5) {
YUUKA_INNER_L5;
} else {
switch(sai.i - 6u) {
case 0: shot->from_option_l(); sai.angle = 176;
if(option_only == 0) {
sai.i = 1;
}
break;
case 1: shot->from_option_r(); sai.angle = 208; break;
case 2: shot->from_option_l(); sai.angle = 183; break;
case 3: shot->from_option_r(); sai.angle = 201; break;
case 4: shot->from_option_l(); sai.angle = 190; break;
case 5: shot->from_option_r(); sai.angle = 194; break;
}
shot->set_option_sprite_and_damage(6);
}
shot_velocity_set(&shot->pos.velocity, sai.angle);
if(sai.next() <= 0) {
break;
}
}
}
void pascal near shot_yuuka_l9(void)
{
SHOT_FUNC_INIT(5, SC_3X, SC_2X, add_secondary(8));
char option_only = cycle & SC_3X;
while(( shot = shots_add() ) != NULL) {
if(sai.i <= 5) {
YUUKA_INNER_L5;
} else {
switch(sai.i - 6u) {
case 0: shot->from_option_l(); sai.angle = 168;
if(option_only == 0) {
sai.i = 1;
}
break;
case 1: shot->from_option_r(); sai.angle = 216; break;
case 2: shot->from_option_l(); sai.angle = 176; break;
case 3: shot->from_option_r(); sai.angle = 208; break;
case 4: shot->from_option_l(); sai.angle = 184; break;
case 5: shot->from_option_r(); sai.angle = 200; break;
case 6: shot->from_option_l(); sai.angle = 193; break;
case 7: shot->from_option_r(); sai.angle = 191; break;
}
shot->set_option_sprite_and_damage(6);
}
shot_velocity_set(&shot->pos.velocity, sai.angle);
if(sai.next() <= 0) {
break;
}
}
}
}