-
Notifications
You must be signed in to change notification settings - Fork 85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: Extra Stage #261
base: remastered-staging
Are you sure you want to change the base?
WIP: Extra Stage #261
Conversation
src/stages/stagex/timeline.c
Outdated
} | ||
} | ||
} | ||
p->timeout = 1; // what is the proper way? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
kill_projectile(p)
?
src/stages/stagex/timeline.c
Outdated
Attack *opening_attack = boss_add_attack(boss, AT_Normal, "Opening", 60, 40000, NULL, NULL); | ||
|
||
boss_start_attack(boss, boss->attacks); | ||
INVOKE_TASK(stagex_midboss_nonspell_1, ENT_BOX(boss), opening_attack); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You probably want this:
boss_add_attack_task(boss, AT_Normal, "Opening", 60, 40000, TASK_INDIRECT(BossAttack, stagex_midboss_nonspell_1), NULL);
boss_start_attack(boss, boss->attacks);
I'm guessing you copied this from Yumemi's first non. That one is a special case, because the attack task starts during the dialogue there, before the attack phase actually begins, as far as the boss system is concerned. It spawns some slaves, and waits for the attack's initiated
event, to sync up with boss_start_attack
. That's why the setup there is a little more complicated than usual.
.pos.x = creal(p->pos), | ||
.pos.y = cimag(p->pos), | ||
.scale = {creal(p->scale), cimag(p->scale)}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.pos.x = creal(p->pos), | |
.pos.y = cimag(p->pos), | |
.scale = {creal(p->scale), cimag(p->scale)}, | |
.pos.as_cmplx = p->pos, | |
.scale.as_cmplx = p->scale, |
.sprite_ptr = animation_get_frame(ani, seq, global.frames), | ||
.color = &p->color, | ||
.rotation.angle = p->angle+M_PI/2, | ||
.rotation.vector = {0, 0, 1} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can omit the rotation axis, 0, 0, 1
is implied by default.
src/stages/stagex/timeline.c
Outdated
.color = RGBA(0,0.2,1,0), | ||
.move = move_towards(global.plr.pos, 0.015), | ||
.flags = PFLAG_NOCLEAR | PFLAG_NOCOLLISION, | ||
.max_viewport_dist = 10000, // how to do this properly? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is PFLAG_NOAUTOREMOVE
. But be careful not to get a projectile stuck somewhere out of view forever.
This broke collision lerping, and automatic angle calculation in cases where position is influenced by external tasks. A stage 2 pattern seems to have relied on this broken behavior, and was also fixed.
Helps with writing radially symmetrical patterns. Replace this: int cnt = 69; cmplx dir = initial_dir; cmplx turn = cdir(M_TAU/cnt); for(int = 0; i < cnt; ++i, dir *= turn) { pew_pew(dir); } with this: RADIAL_LOOP(l, 69, initial_dir) { pew_pew(l.dir); }
stage background is still fucked for now
Note: the actual music is not in yet, this just adds the menu entries.
…rame Needed to account for camera movement. Usage may need adjustments
Fixes some issues with curves that have degenerate samples at the start, and is more efficient for curves with lots of degenerate samples in general.
No description provided.