plrmodes: streamline bomb sounds, improve preloads

This commit is contained in:
Andrei Alexeyev 2017-10-09 00:12:38 +03:00
parent 1992a62592
commit db50f671fa
10 changed files with 58 additions and 21 deletions

View file

@ -30,13 +30,7 @@ void player_stage_pre_init(Player *plr) {
plr->graze = 0;
plr->axis_lr = 0;
plr->axis_ud = 0;
assert(plr->mode != NULL);
plrchar_preload(plr->mode->character);
if(plr->mode->procs.preload) {
plr->mode->procs.preload(plr);
}
plrmode_preload(plr->mode);
}
void player_stage_post_init(Player *plr) {

View file

@ -102,3 +102,12 @@ PlayerMode* plrmode_parse(const char *name) {
return plrmode_find(char_id, shot_id);
}
void plrmode_preload(PlayerMode *mode) {
assert(mode != NULL);
plrchar_preload(mode->character);
if(mode->procs.preload) {
mode->procs.preload();
}
}

View file

@ -57,7 +57,7 @@ typedef void (*PlayerModeShotProc)(Player *plr);
typedef void (*PlayerModeBombProc)(Player *plr);
typedef void (*PlayerModePowerProc)(Player *plr, short npow);
typedef double (*PlayerModeSpeedModProc)(Player *plr, double speed);
typedef void (*PlayerModePreloadProc)(Player *plr);
typedef void (*PlayerModePreloadProc)(void);
typedef struct PlayerMode {
const char *name;
@ -84,3 +84,4 @@ void plrchar_preload(PlayerCharacter *pc);
PlayerMode* plrmode_find(CharacterID charid, ShotModeID shotid);
int plrmode_repr(char *out, size_t outsize, PlayerMode *mode);
PlayerMode* plrmode_parse(const char *name);
void plrmode_preload(PlayerMode *mode);

View file

@ -124,7 +124,7 @@ static int masterspark(Enemy *e, int t) {
}
static void marisa_laser_bomb(Player *plr) {
play_sound("masterspark");
play_sound("bomb_marisa_a");
create_enemy_p(&plr->slaves, 40.0*I, ENEMY_BOMB, masterspark_draw, masterspark, 280,0,0,0);
}
@ -169,16 +169,19 @@ static double marisa_laser_speed_mod(Player *plr, double speed) {
return speed;
}
static void marisa_laser_preload(Player *plr) {
static void marisa_laser_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_TEXTURE, flags,
"part/marilaser_part0",
"proj/marilaser",
"proj/marisa",
"masterspark",
"masterspark_ring",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
"masterspark",
"bomb_marisa_a",
NULL);
}

View file

@ -102,6 +102,7 @@ static int marisa_star_orbit(Projectile *p, int t) { // a[0]: x' a[1]: x''
}
static void marisa_star_bomb(Player *plr) {
play_sound("bomb_marisa_b");
for(int i = 0; i < 20; i++) {
float r = frand()*40 + 100;
float phi = frand()*2*M_PI;
@ -143,6 +144,20 @@ static void marisa_star_power(Player *plr, short npow) {
}
}
static void marisa_star_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_TEXTURE, flags,
"proj/marisa",
"proj/maristar",
"part/maristar_orbit",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
"bomb_marisa_b",
NULL);
}
PlayerMode plrmode_marisa_b = {
.name = "Star Sign",
.character = &character_marisa,
@ -151,5 +166,6 @@ PlayerMode plrmode_marisa_b = {
.bomb = marisa_star_bomb,
.shot = marisa_common_shot,
.power = marisa_star_power,
.preload = marisa_star_preload,
},
};

View file

@ -152,6 +152,7 @@ static int youmu_split(Enemy *e, int t) {
}
static void youmu_mirror_bomb(Player *plr) {
play_sound("bomb_youmu_a");
create_enemy_p(&plr->slaves, 40.0*I, ENEMY_BOMB, NULL, youmu_split, 280,0,0,0);
}
@ -163,6 +164,19 @@ static void youmu_mirror_think(Player *plr) {
}
}
static void youmu_mirror_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_TEXTURE, flags,
"proj/youmu",
"part/youmu_slice",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
"bomb_youmu_a",
NULL);
}
PlayerMode plrmode_youmu_a = {
.name = "Mirror Sign",
.character = &character_youmu,
@ -171,5 +185,6 @@ PlayerMode plrmode_youmu_a = {
.bomb = youmu_mirror_bomb,
.shot = youmu_common_shot,
.think = youmu_mirror_think,
.preload = youmu_mirror_preload,
},
};

View file

@ -210,15 +210,21 @@ static void youmu_haunting_shot(Player *plr) {
}
static void youmu_haunting_bomb(Player *plr) {
play_sound("haunt");
play_sound("bomb_youmu_b");
create_enemy_p(&plr->slaves, 40.0*I, ENEMY_BOMB, YoumuSlash, youmu_slash, 280,0,0,0);
}
static void youmu_haunting_preload(Player *plr) {
static void youmu_haunting_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_TEXTURE, flags,
"proj/youmu",
"part/youmu_slice",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
"haunt",
"bomb_youmu_b",
NULL);
}

View file

@ -464,12 +464,9 @@ void projectiles_preload(void) {
"part/boss_shadow",
"part/flare",
"part/lasercurve",
"part/marilaser_part0",
"part/maristar_orbit",
"part/petal",
"part/smoke",
"part/stain",
"part/youmu_slice",
"part/lightning0",
"part/lightning1",
"part/lightningball",
@ -480,16 +477,12 @@ void projectiles_preload(void) {
"proj/crystal",
"proj/flea",
"proj/hghost",
"proj/marilaser",
"proj/marisa",
"proj/maristar",
"proj/plainball",
"proj/rice",
"proj/soul",
"proj/thickrice",
"proj/wave",
"proj/youhoming",
"proj/youmu",
NULL);
preload_resources(RES_SFX, RESF_PERMANENT,