various gameplay/balance adjustments and fixes
mostly it's boss HP buffs. very roughly playtested, so may be far from ideal. improved spread of item drops fixed extraspell deaths affecting lives, power, bombs, etc. increased the value of spell bonuses very substantially made some tweaks to Elly's non-spells
This commit is contained in:
parent
fdc303016e
commit
7fc2839fcb
16 changed files with 115 additions and 77 deletions
28
src/boss.c
28
src/boss.c
|
@ -368,6 +368,24 @@ void boss_finish_current_attack(Boss *boss) {
|
|||
} else {
|
||||
boss->failed_spells++;
|
||||
}
|
||||
|
||||
if(t != AT_SurvivalSpell) {
|
||||
double i_base = 6.0, i_pwr = 1.0, i_pts = 1.0;
|
||||
|
||||
if(t == AT_ExtraSpell) {
|
||||
i_pwr *= 1.25;
|
||||
i_pts *= 2.0;
|
||||
}
|
||||
|
||||
if(!boss->current->failtime) {
|
||||
i_base *= 2.0;
|
||||
}
|
||||
|
||||
spawn_items(boss->pos,
|
||||
Power, (int)(i_base * i_pwr),
|
||||
Point, (int)(i_base * i_pts),
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
boss->current->endtime = global.frames + attack_end_delay(boss);
|
||||
|
@ -458,10 +476,6 @@ void process_boss(Boss **pboss) {
|
|||
stage_gameover();
|
||||
}
|
||||
|
||||
if(extra && boss->current->finished && !boss->current->failtime) {
|
||||
spawn_items(boss->pos, Point, 20, NULL);
|
||||
}
|
||||
|
||||
for(;;) {
|
||||
boss->current++;
|
||||
|
||||
|
@ -554,7 +568,11 @@ Attack* boss_add_attack(Boss *boss, AttackType type, char *name, float timeout,
|
|||
a->starttime = global.frames;
|
||||
|
||||
// FIXME: figure out a better value/formula, i pulled this out of my ass
|
||||
a->scorevalue = 500.0 + hp * 0.2;
|
||||
a->scorevalue = 2000.0 + hp * 0.6;
|
||||
|
||||
if(a->type == AT_ExtraSpell) {
|
||||
a->scorevalue *= 1.25;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
|
|
@ -156,7 +156,7 @@ int collision_item(Item *i) {
|
|||
|
||||
void spawn_item(complex pos, ItemType type) {
|
||||
tsrand_fill(2);
|
||||
create_item(pos, 5*cexp(I*tsrand_a(0)/afrand(1)*M_PI*2), type);
|
||||
create_item(pos, (12 + 6 * afrand(0)) * (cexp(I*(3*M_PI/2 + anfrand(1)*M_PI/11))), type);
|
||||
}
|
||||
|
||||
void spawn_items(complex pos, ...) {
|
||||
|
|
27
src/player.c
27
src/player.c
|
@ -93,6 +93,7 @@ void player_move(Player *plr, complex delta) {
|
|||
}
|
||||
|
||||
void player_draw(Player* plr) {
|
||||
// FIXME: death animation?
|
||||
if(plr->deathtime > global.frames)
|
||||
return;
|
||||
|
||||
|
@ -239,27 +240,31 @@ void player_realdeath(Player *plr) {
|
|||
plr->respawntime = global.frames;
|
||||
plr->inputflags &= ~INFLAGS_MOVE;
|
||||
|
||||
const double arc = 0.3 * M_PI;
|
||||
int drop = max(2, (plr->power * 0.15) / POWER_VALUE);
|
||||
|
||||
for(int i = 0; i < drop; ++i) {
|
||||
double ofs = arc * (i/((double)drop - 1));
|
||||
create_item(plr->pos, (12+3*frand()) * (cexp(I*(1.5*M_PI - 0.5*arc + ofs)) - 1.0*I), Power);
|
||||
}
|
||||
complex death_origin = plr->pos;
|
||||
|
||||
plr->pos = VIEWPORT_W/2 + VIEWPORT_H*I+30.0*I;
|
||||
plr->recovery = -(global.frames + DEATH_DELAY + 150);
|
||||
plr->bombs = PLR_START_BOMBS;
|
||||
plr->bomb_fragments = 0;
|
||||
|
||||
if(plr->iddqd)
|
||||
return;
|
||||
|
||||
player_fail_spell(plr);
|
||||
player_set_power(plr, plr->power * 0.7);
|
||||
|
||||
if(plr->lives-- == 0 && global.replaymode != REPLAY_PLAY)
|
||||
if(global.stage->type != STAGE_SPELL && global.boss && global.boss->current && global.boss->current->type == AT_ExtraSpell) {
|
||||
// deaths in extra spells "don't count"
|
||||
return;
|
||||
}
|
||||
|
||||
int drop = max(2, (plr->power * 0.15) / POWER_VALUE);
|
||||
spawn_items(death_origin, Power, drop, NULL);
|
||||
|
||||
player_set_power(plr, plr->power * 0.7);
|
||||
plr->bombs = PLR_START_BOMBS;
|
||||
plr->bomb_fragments = 0;
|
||||
|
||||
if(plr->lives-- == 0 && global.replaymode != REPLAY_PLAY) {
|
||||
stage_gameover();
|
||||
}
|
||||
}
|
||||
|
||||
void player_death(Player *plr) {
|
||||
|
|
|
@ -29,8 +29,8 @@ enum {
|
|||
PLR_START_LIVES = 2,
|
||||
PLR_START_BOMBS = 3,
|
||||
|
||||
PLR_SCORE_PER_LIFE_FRAG = 50000,
|
||||
PLR_SCORE_PER_BOMB_FRAG = 20000,
|
||||
PLR_SCORE_PER_LIFE_FRAG = 55000,
|
||||
PLR_SCORE_PER_BOMB_FRAG = 22000,
|
||||
|
||||
PLR_SPELLPRACTICE_POWER = 200,
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
struct stage1_spells_s stage1_spells = {
|
||||
.mid = {
|
||||
.perfect_freeze = {{ 0, 1, 2, 3}, AT_Spellcard, "Freeze Sign ~ Perfect Freeze", 32, 20000,
|
||||
.perfect_freeze = {{ 0, 1, 2, 3}, AT_Spellcard, "Freeze Sign ~ Perfect Freeze", 32, 24000,
|
||||
cirno_perfect_freeze, cirno_pfreeze_bg, VIEWPORT_W/2.0+100.0*I},
|
||||
},
|
||||
|
||||
|
|
|
@ -162,7 +162,7 @@ void cirno_mid_flee(Boss *c, int time) {
|
|||
Boss *create_cirno_mid(void) {
|
||||
Boss* cirno = create_boss("Cirno", "cirno", "dialog/cirno", VIEWPORT_W + 220 + 30.0*I);
|
||||
boss_add_attack(cirno, AT_Move, "Introduction", 2, 0, cirno_intro, NULL);
|
||||
boss_add_attack(cirno, AT_Normal, "Icy Storm", 20, 20000, cirno_icy, NULL);
|
||||
boss_add_attack(cirno, AT_Normal, "Icy Storm", 20, 22000, cirno_icy, NULL);
|
||||
boss_add_attack_from_info(cirno, &stage1_spells.mid.perfect_freeze, false);
|
||||
boss_add_attack(cirno, AT_Move, "Flee", 5, 0, cirno_mid_flee, NULL);
|
||||
|
||||
|
@ -386,9 +386,9 @@ void cirno_superhardspellcard(Boss *c, int t) {
|
|||
Boss *create_cirno(void) {
|
||||
Boss* cirno = create_boss("Cirno", "cirno", "dialog/cirno", -230 + 100.0*I);
|
||||
boss_add_attack(cirno, AT_Move, "Introduction", 2, 0, cirno_intro_boss, NULL);
|
||||
boss_add_attack(cirno, AT_Normal, "Iceplosion 0", 20, 20000, cirno_iceplosion0, NULL);
|
||||
boss_add_attack(cirno, AT_Normal, "Iceplosion 0", 20, 22000, cirno_iceplosion0, NULL);
|
||||
boss_add_attack_from_info(cirno, &stage1_spells.boss.crystal_rain, false);
|
||||
boss_add_attack(cirno, AT_Normal, "Iceplosion 1", 20, 20000, cirno_iceplosion1, NULL);
|
||||
boss_add_attack(cirno, AT_Normal, "Iceplosion 1", 20, 22000, cirno_iceplosion1, NULL);
|
||||
boss_add_attack_from_info(cirno, &stage1_spells.boss.icicle_fall, false);
|
||||
boss_add_attack_from_info(cirno, &stage1_spells.extra.crystal_blizzard, false);
|
||||
|
||||
|
|
|
@ -20,9 +20,9 @@
|
|||
|
||||
struct stage2_spells_s stage2_spells = {
|
||||
.boss = {
|
||||
.amulet_of_harm = {{ 0, 1, 2, 3}, AT_Spellcard, "Shard ~ Amulet of Harm", 26, 36000,
|
||||
.amulet_of_harm = {{ 0, 1, 2, 3}, AT_Spellcard, "Shard ~ Amulet of Harm", 26, 50000,
|
||||
hina_amulet, hina_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.bad_pick = {{ 4, 5, 6, 7}, AT_Spellcard, "Lottery Sign ~ Bad Pick", 30, 36000,
|
||||
.bad_pick = {{ 4, 5, 6, 7}, AT_Spellcard, "Lottery Sign ~ Bad Pick", 30, 43200,
|
||||
hina_bad_pick, hina_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.wheel_of_fortune_easy = {{ 8, 9, -1, -1}, AT_Spellcard, "Lottery Sign ~ Wheel of Fortune", 20, 36000,
|
||||
hina_wheel, hina_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
|
|
|
@ -252,7 +252,7 @@ void wiggle_mid_flee(Boss *w, int t) {
|
|||
Boss *create_wriggle_mid(void) {
|
||||
Boss* wriggle = create_boss("Wriggle", "wriggle", "dialog/wriggle", VIEWPORT_W + 150 - 30.0*I);
|
||||
boss_add_attack(wriggle, AT_Move, "Introduction", 4, 0, wriggle_intro, NULL);
|
||||
boss_add_attack(wriggle, AT_Normal, "Small Bug Storm", 20, 20000, wriggle_small_storm, NULL);
|
||||
boss_add_attack(wriggle, AT_Normal, "Small Bug Storm", 20, 26000, wriggle_small_storm, NULL);
|
||||
boss_add_attack(wriggle, AT_Move, "Flee", 5, 0, wiggle_mid_flee, NULL);;
|
||||
|
||||
start_attack(wriggle, wriggle->attacks);
|
||||
|
@ -623,9 +623,9 @@ void hina_spell_bg(Boss *h, int time) {
|
|||
Boss *create_hina(void) {
|
||||
Boss* hina = create_boss("Kagiyama Hina", "hina", "dialog/hina", VIEWPORT_W + 150 + 100.0*I);
|
||||
boss_add_attack(hina, AT_Move, "Introduction", 2, 0, hina_intro, NULL);
|
||||
boss_add_attack(hina, AT_Normal, "Cards1", 20, 15000, hina_cards1, NULL);
|
||||
boss_add_attack(hina, AT_Normal, "Cards1", 20, 25000, hina_cards1, NULL);
|
||||
boss_add_attack_from_info(hina, &stage2_spells.boss.amulet_of_harm, false);
|
||||
boss_add_attack(hina, AT_Normal, "Cards2", 17, 15000, hina_cards2, NULL);
|
||||
boss_add_attack(hina, AT_Normal, "Cards2", 17, 30000, hina_cards2, NULL);
|
||||
boss_add_attack_from_info(hina, &stage2_spells.boss.bad_pick, false);
|
||||
|
||||
if(global.diff < D_Hard) {
|
||||
|
|
|
@ -20,16 +20,16 @@
|
|||
|
||||
struct stage3_spells_s stage3_spells = {
|
||||
.mid = {
|
||||
.deadly_dance = {{ 0, 1, 2, 3}, AT_Spellcard, "Venom Sign ~ Deadly Dance", 25, 40000,
|
||||
.deadly_dance = {{ 0, 1, 2, 3}, AT_Spellcard, "Venom Sign ~ Deadly Dance", 25, 50000,
|
||||
stage3_mid_a1, stage3_mid_spellbg, BOSS_DEFAULT_GO_POS},
|
||||
.acid_rain = {{-1, -1, 4, 5}, AT_Spellcard, "Venom Sign ~ Acid Rain", 30, 50000,
|
||||
stage3_mid_a2, stage3_mid_spellbg, BOSS_DEFAULT_GO_POS},
|
||||
},
|
||||
|
||||
.boss = {
|
||||
.moonlight_rocket = {{ 6, 7, 8, 9}, AT_Spellcard, "Firefly Sign ~ Moonlight Rocket", 30, 35000,
|
||||
.moonlight_rocket = {{ 6, 7, 8, 9}, AT_Spellcard, "Firefly Sign ~ Moonlight Rocket", 30, 40000,
|
||||
stage3_boss_a1, stage3_boss_spellbg, BOSS_DEFAULT_GO_POS},
|
||||
.wriggle_night_ignite = {{10, 11, 12, 13}, AT_Spellcard, "Light Source ~ Wriggle Night Ignite", 25, 40000,
|
||||
.wriggle_night_ignite = {{10, 11, 12, 13}, AT_Spellcard, "Light Source ~ Wriggle Night Ignite", 30, 46000,
|
||||
stage3_boss_a2, stage3_boss_spellbg, BOSS_DEFAULT_GO_POS},
|
||||
.unspellable_spell_name = {{14, 15, 16, 17}, AT_Spellcard, "Bug Sign ~ Phosphaenus Hemipterus", 35, 40000,
|
||||
stage3_boss_a3, stage3_boss_spellbg, BOSS_DEFAULT_GO_POS},
|
||||
|
|
|
@ -922,11 +922,11 @@ void stage3_boss_extra(Boss *boss, int time) {
|
|||
Boss* stage3_create_boss(void) {
|
||||
Boss *wriggle = create_boss("Wriggle EX", "wriggleex", "dialog/wriggle", VIEWPORT_W/2 - 200.0*I);
|
||||
boss_add_attack(wriggle, AT_Move, "Introduction", 2, 0, stage3_boss_intro, NULL);
|
||||
boss_add_attack(wriggle, AT_Normal, "", 20, 20000, stage3_boss_prea1, NULL);
|
||||
boss_add_attack(wriggle, AT_Normal, "", 20, 30000, stage3_boss_prea1, NULL);
|
||||
boss_add_attack_from_info(wriggle, &stage3_spells.boss.moonlight_rocket, false);
|
||||
boss_add_attack(wriggle, AT_Normal, "", 20, 20000, stage3_boss_prea2, NULL);
|
||||
boss_add_attack(wriggle, AT_Normal, "", 20, 32000, stage3_boss_prea2, NULL);
|
||||
boss_add_attack_from_info(wriggle, &stage3_spells.boss.wriggle_night_ignite, false);
|
||||
boss_add_attack(wriggle, AT_Normal, "", 20, 20000, stage3_boss_prea3, NULL);
|
||||
boss_add_attack(wriggle, AT_Normal, "", 20, 34000, stage3_boss_prea3, NULL);
|
||||
boss_add_attack_from_info(wriggle, &stage3_spells.boss.unspellable_spell_name, false);
|
||||
boss_add_attack_from_info(wriggle, &stage3_spells.extra.moonlight_wraith, false);
|
||||
|
||||
|
|
|
@ -20,20 +20,20 @@
|
|||
|
||||
struct stage4_spells_s stage4_spells = {
|
||||
.mid = {
|
||||
.gate_of_walachia = {{ 0, 1, 2, 3}, AT_Spellcard, "Bloodless ~ Gate of Walachia", 25, 40000,
|
||||
.gate_of_walachia = {{ 0, 1, 2, 3}, AT_Spellcard, "Bloodless ~ Gate of Walachia", 25, 44000,
|
||||
kurumi_slaveburst, kurumi_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.dry_fountain = {{ 4, 5, -1, -1}, AT_Spellcard, "Bloodless ~ Dry Fountain", 30, 40000,
|
||||
.dry_fountain = {{ 4, 5, -1, -1}, AT_Spellcard, "Bloodless ~ Dry Fountain", 30, 44000,
|
||||
kurumi_redspike, kurumi_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.red_spike = {{-1, -1, 6, 7}, AT_Spellcard, "Bloodless ~ Red Spike", 30, 44000,
|
||||
.red_spike = {{-1, -1, 6, 7}, AT_Spellcard, "Bloodless ~ Red Spike", 30, 46000,
|
||||
kurumi_redspike, kurumi_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
},
|
||||
|
||||
.boss = {
|
||||
.animate_wall = {{ 8, 9, -1, -1}, AT_Spellcard, "Limit ~ Animate Wall", 30, 45000,
|
||||
.animate_wall = {{ 8, 9, -1, -1}, AT_Spellcard, "Limit ~ Animate Wall", 30, 50000,
|
||||
kurumi_aniwall, kurumi_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.demon_wall = {{-1, -1, 10, 11}, AT_Spellcard, "Summoning ~ Demon Wall", 30, 50000,
|
||||
.demon_wall = {{-1, -1, 10, 11}, AT_Spellcard, "Summoning ~ Demon Wall", 30, 55000,
|
||||
kurumi_aniwall, kurumi_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.blow_the_walls = {{12, 13, 14, 15}, AT_Spellcard, "Power Sign ~ Blow the Walls", 30, 52000,
|
||||
.blow_the_walls = {{12, 13, 14, 15}, AT_Spellcard, "Power Sign ~ Blow the Walls", 30, 55000,
|
||||
kurumi_blowwall, kurumi_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.bloody_danmaku = {{-1, -1, 16, 17}, AT_Spellcard, "Fear Sign ~ Bloody Danmaku", 30, 55000,
|
||||
kurumi_danmaku, kurumi_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
|
|
|
@ -1057,13 +1057,13 @@ void kurumi_extra(Boss *b, int time) {
|
|||
Boss *create_kurumi(void) {
|
||||
Boss* b = create_boss("Kurumi", "kurumi", "dialog/kurumi", -400.0*I);
|
||||
boss_add_attack(b, AT_Move, "Introduction", 4, 0, kurumi_boss_intro, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Sin Breaker", 20, 30000, kurumi_sbreaker, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Sin Breaker", 20, 33000, kurumi_sbreaker, NULL);
|
||||
if(global.diff < D_Hard) {
|
||||
boss_add_attack_from_info(b, &stage4_spells.boss.animate_wall, false);
|
||||
} else {
|
||||
boss_add_attack_from_info(b, &stage4_spells.boss.demon_wall, false);
|
||||
}
|
||||
boss_add_attack(b, AT_Normal, "Cold Breaker", 20, 30000, kurumi_breaker, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Cold Breaker", 20, 36000, kurumi_breaker, NULL);
|
||||
boss_add_attack_from_info(b, &stage4_spells.boss.blow_the_walls, false);
|
||||
if(global.diff > D_Normal) {
|
||||
boss_add_attack_from_info(b, &stage4_spells.boss.bloody_danmaku, false);
|
||||
|
|
|
@ -20,11 +20,11 @@
|
|||
|
||||
struct stage5_spells_s stage5_spells = {
|
||||
.boss = {
|
||||
.atmospheric_discharge = {{ 0, 1, 2, 3}, AT_Spellcard, "High Voltage ~ Atmospheric Discharge", 30, 40000,
|
||||
.atmospheric_discharge = {{ 0, 1, 2, 3}, AT_Spellcard, "High Voltage ~ Atmospheric Discharge", 30, 44000,
|
||||
iku_atmospheric, iku_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.artificial_lightning = {{ 4, 5, 6, 7}, AT_Spellcard, "Charge Sign ~ Artificial Lightning", 30, 42000,
|
||||
.artificial_lightning = {{ 4, 5, 6, 7}, AT_Spellcard, "Charge Sign ~ Artificial Lightning", 45, 60000,
|
||||
iku_lightning, iku_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.natural_cathode = {{ 8, 9, 10, 11}, AT_Spellcard, "Spark Sign ~ Natural Cathode", 30, 50000,
|
||||
.natural_cathode = {{ 8, 9, 10, 11}, AT_Spellcard, "Spark Sign ~ Natural Cathode", 30, 44000,
|
||||
iku_cathode, iku_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
.induction_field = {{12, 13, -1, -1}, AT_Spellcard, "Current Sign ~ Induction Field", 30, 50000,
|
||||
iku_induction, iku_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
|
@ -32,7 +32,7 @@ struct stage5_spells_s stage5_spells = {
|
|||
iku_induction, iku_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
},
|
||||
|
||||
.extra.overload = {{ 0, 1, 2, 3}, AT_ExtraSpell, "Circuit Sign ~ Overload", 60, 40000,
|
||||
.extra.overload = {{ 0, 1, 2, 3}, AT_ExtraSpell, "Circuit Sign ~ Overload", 60, 44000,
|
||||
iku_extra, iku_spell_bg, BOSS_DEFAULT_GO_POS},
|
||||
};
|
||||
|
||||
|
|
|
@ -761,11 +761,11 @@ Boss *create_iku(void) {
|
|||
Boss *b = create_boss("Nagae Iku", "iku", "dialog/iku", VIEWPORT_W/2-200.0*I);
|
||||
|
||||
boss_add_attack(b, AT_Move, "Introduction", 3, 0, iku_intro, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Bolts1", 20, 20000, iku_bolts, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Bolts1", 20, 24000, iku_bolts, NULL);
|
||||
boss_add_attack_from_info(b, &stage5_spells.boss.atmospheric_discharge, false);
|
||||
boss_add_attack(b, AT_Normal, "Bolts2", 25, 20000, iku_bolts2, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Bolts2", 25, 27000, iku_bolts2, NULL);
|
||||
boss_add_attack_from_info(b, &stage5_spells.boss.artificial_lightning, false);
|
||||
boss_add_attack(b, AT_Normal, "Bolts3", 20, 20000, iku_bolts3, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Bolts3", 20, 30000, iku_bolts3, NULL);
|
||||
boss_add_attack_from_info(b, &stage5_spells.boss.natural_cathode, false);
|
||||
|
||||
if(global.diff < D_Hard) {
|
||||
|
|
|
@ -20,25 +20,25 @@
|
|||
|
||||
struct stage6_spells_s stage6_spells = {
|
||||
.scythe = {
|
||||
.occams_razor = {{ 0, 1, 2, 3}, AT_Spellcard, "Newton Sign ~ Occam’s razor", 60, 40000,
|
||||
.occams_razor = {{ 0, 1, 2, 3}, AT_Spellcard, "Newton Sign ~ Occam’s razor", 50, 60000,
|
||||
elly_newton, elly_spellbg_classic, BOSS_DEFAULT_GO_POS},
|
||||
.orbital_clockwork = {{24, 25, 26, 27}, AT_Spellcard, "Kepler Sign ~ Orbital Clockwork", 60, 40000,
|
||||
.orbital_clockwork = {{24, 25, 26, 27}, AT_Spellcard, "Kepler Sign ~ Orbital Clockwork", 45, 60000,
|
||||
elly_kepler, elly_spellbg_classic, BOSS_DEFAULT_GO_POS},
|
||||
.wave_theory = {{ 4, 5, 6, 7}, AT_Spellcard, "Maxwell Sign ~ Wave Theory", 25, 26000,
|
||||
.wave_theory = {{ 4, 5, 6, 7}, AT_Spellcard, "Maxwell Sign ~ Wave Theory", 25, 30000,
|
||||
elly_maxwell, elly_spellbg_classic, BOSS_DEFAULT_GO_POS},
|
||||
},
|
||||
|
||||
.baryon = {
|
||||
.many_world_interpretation = {{ 8, 9, 10, 11}, AT_Spellcard, "Eigenstate ~ Many-World Interpretation", 60, 30000,
|
||||
.many_world_interpretation = {{ 8, 9, 10, 11}, AT_Spellcard, "Eigenstate ~ Many-World Interpretation", 40, 60000,
|
||||
elly_eigenstate, elly_spellbg_modern, BOSS_DEFAULT_GO_POS},
|
||||
.spacetime_curvature = {{12, 13, 14, 15}, AT_Spellcard, "Ricci Sign ~ Spacetime Curvature", 50, 100000,
|
||||
.spacetime_curvature = {{12, 13, 14, 15}, AT_Spellcard, "Ricci Sign ~ Spacetime Curvature", 50, 90000,
|
||||
elly_ricci, elly_spellbg_modern, BOSS_DEFAULT_GO_POS},
|
||||
.higgs_boson_uncovered = {{16, 17, 18, 19}, AT_Spellcard, "LHC ~ Higgs Boson Uncovered", 60, 50000,
|
||||
.higgs_boson_uncovered = {{16, 17, 18, 19}, AT_Spellcard, "LHC ~ Higgs Boson Uncovered", 50, 60000,
|
||||
elly_lhc, elly_spellbg_modern, BOSS_DEFAULT_GO_POS}
|
||||
},
|
||||
|
||||
.extra = {
|
||||
.curvature_domination = {{ 0, 1, 2, 3}, AT_ExtraSpell, "Forgotten Universe ~ Curvature Domination", 40, 40000,
|
||||
.curvature_domination = {{ 0, 1, 2, 3}, AT_ExtraSpell, "Forgotten Universe ~ Curvature Domination", 60, 60000,
|
||||
elly_curvature, elly_spellbg_modern, BOSS_DEFAULT_GO_POS}
|
||||
},
|
||||
|
||||
|
|
|
@ -221,7 +221,7 @@ int scythe_infinity(Enemy *e, int t) {
|
|||
float w = min(0.15, 0.0001*(t-40));
|
||||
e->pos = VIEWPORT_W/2 + 200.0*I + 200*cos(w*(t-40)+M_PI/2.0) + I*80*sin(creal(e->args[0])*w*(t-40));
|
||||
|
||||
create_projectile2c("ball", e->pos+80*cexp(I*creal(e->args[1])), rgb(cos(creal(e->args[1])), sin(creal(e->args[1])), cos(creal(e->args[1])+2.1)), asymptotic, (1+0.2*global.diff)*cexp(I*creal(e->args[1])), 3);
|
||||
create_projectile2c("ball", e->pos+80*cexp(I*creal(e->args[1])), rgb(cos(creal(e->args[1])), sin(creal(e->args[1])), cos(creal(e->args[1])+2.1)), asymptotic, (1+0.4*global.diff)*cexp(I*creal(e->args[1])), 3 + 0.2 * global.diff);
|
||||
}
|
||||
|
||||
scythe_common(e, t);
|
||||
|
@ -706,22 +706,15 @@ int baryon_nattack(Enemy *e, int t) {
|
|||
|
||||
e->pos = global.boss->pos + (e->pos-global.boss->pos)*cexp(0.006*I);
|
||||
|
||||
FROM_TO(30, 10000, 7-global.diff) {
|
||||
FROM_TO(30, 10000, (7 - global.diff)) {
|
||||
float a = 0.2*_i + creal(e->args[2]) + 0.006*t;
|
||||
create_projectile2c("ball", e->pos+40*cexp(I*a), rgb(cos(a), sin(a), cos(a+2.1)), asymptotic, (1+0.2*global.diff)*cexp(I*a), 3);
|
||||
float ca = a + t/60.0f;
|
||||
create_projectile2c("ball", e->pos+40*cexp(I*a), rgb(cos(ca), sin(ca), cos(ca+2.1)), asymptotic, (1+0.2*global.diff)*cexp(I*a), 3);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void elly_baryonattack(Boss *b, int t) {
|
||||
TIMER(&t);
|
||||
AT(0)
|
||||
set_baryon_rule(baryon_nattack);
|
||||
AT(EVENT_DEATH)
|
||||
set_baryon_rule(baryon_reset);
|
||||
}
|
||||
|
||||
#define SAFE_RADIUS_DELAY 300
|
||||
#define SAFE_RADIUS_BASE 100
|
||||
#define SAFE_RADIUS_STRETCH 100
|
||||
|
@ -918,6 +911,14 @@ void elly_ricci(Boss *b, int t) {
|
|||
#undef SAFE_RADIUS_PHASE_NORMALIZED
|
||||
#undef SAFE_RADIUS_PHASE_NUM
|
||||
|
||||
void elly_baryonattack(Boss *b, int t) {
|
||||
TIMER(&t);
|
||||
AT(0)
|
||||
set_baryon_rule(baryon_nattack);
|
||||
AT(EVENT_DEATH)
|
||||
set_baryon_rule(baryon_reset);
|
||||
}
|
||||
|
||||
void elly_baryonattack2(Boss *b, int t) {
|
||||
TIMER(&t);
|
||||
AT(0)
|
||||
|
@ -926,13 +927,27 @@ void elly_baryonattack2(Boss *b, int t) {
|
|||
set_baryon_rule(baryon_reset);
|
||||
|
||||
FROM_TO(100, 100000, 200-5*global.diff) {
|
||||
int x, y;
|
||||
int w = 1+(global.diff > D_Normal);
|
||||
complex n = cexp(I*carg(global.plr.pos-b->pos));
|
||||
|
||||
for(x = -w; x <= w; x++)
|
||||
for(y = -w; y <= w; y++)
|
||||
create_projectile2c("bigball", b->pos+30*(x+I*y)*n, rgb(0,0.2,0.9), asymptotic, n, 3);
|
||||
if(_i % 2) {
|
||||
int cnt = 5;
|
||||
for(int i = 0; i < cnt; ++i) {
|
||||
float a = M_PI/4;
|
||||
a = a * (i/(float)cnt) - a/2;
|
||||
complex n = cexp(I*(a+carg(global.plr.pos-b->pos)));
|
||||
|
||||
for(int j = 0; j < 3; ++j) {
|
||||
create_projectile2c("bigball", b->pos, rgb(0,0.2,0.9), asymptotic, n, 2 * j)->draw = ProjDrawAdd;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int x, y;
|
||||
int w = 1+(global.diff > D_Normal);
|
||||
complex n = cexp(I*carg(global.plr.pos-b->pos));
|
||||
|
||||
for(x = -w; x <= w; x++)
|
||||
for(y = -w; y <= w; y++)
|
||||
create_projectile2c("bigball", b->pos+25*(x+I*y)*n, rgb(0,0.2,0.9), asymptotic, n, 3)->draw = ProjDrawAdd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1282,16 +1297,16 @@ Boss *create_elly(void) {
|
|||
Boss *b = create_boss("Elly", "elly", "dialog/elly", -200.0*I);
|
||||
|
||||
boss_add_attack(b, AT_Move, "Catch the Scythe", 6, 0, elly_intro, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Frequency", 30, 26000, elly_frequency, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Frequency", 40, 50000, elly_frequency, NULL);
|
||||
boss_add_attack_from_info(b, &stage6_spells.scythe.occams_razor, false);
|
||||
boss_add_attack(b, AT_Normal, "Frequency2", 40, 23000, elly_frequency2, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Frequency2", 40, 50000, elly_frequency2, NULL);
|
||||
boss_add_attack_from_info(b, &stage6_spells.scythe.orbital_clockwork, false);
|
||||
boss_add_attack_from_info(b, &stage6_spells.scythe.wave_theory, false);
|
||||
boss_add_attack(b, AT_Move, "Unbound", 3, 10, elly_unbound, NULL);
|
||||
boss_add_attack_from_info(b, &stage6_spells.baryon.many_world_interpretation, false);
|
||||
boss_add_attack(b, AT_Normal, "Baryon", 40, 23000, elly_baryonattack, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Baryon", 40, 50000, elly_baryonattack, NULL);
|
||||
boss_add_attack_from_info(b, &stage6_spells.baryon.spacetime_curvature, false);
|
||||
boss_add_attack(b, AT_Normal, "Baryon", 25, 23000, elly_baryonattack2, NULL);
|
||||
boss_add_attack(b, AT_Normal, "Baryon", 40, 50000, elly_baryonattack2, NULL);
|
||||
boss_add_attack_from_info(b, &stage6_spells.baryon.higgs_boson_uncovered, false);
|
||||
boss_add_attack(b, AT_Move, "Explode", 6, 10, elly_baryon_explode, NULL);
|
||||
boss_add_attack_from_info(b, &stage6_spells.extra.curvature_domination, false);
|
||||
|
|
Loading…
Reference in a new issue