mirror of https://github.com/nmlgc/ReC98.git
266 lines
6.2 KiB
C++
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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|