[Decompilation] [th01] Sara: Phase 3 (with externally selected pattern)

Part of P0227, funded by nrook.
This commit is contained in:
nmlgc 2022-12-12 09:16:09 +01:00
parent 9a8f15a2ab
commit b638e2d965
2 changed files with 46 additions and 84 deletions

View File

@ -22,6 +22,7 @@ extern "C" {
// ---------
static const int PHASE_2_PATTERN_START_FRAME = 16;
static const int PHASE_3_PATTERN_START_FRAME = 32;
enum sara_colors_t {
COL_GATHER_1 = 9,
@ -145,3 +146,46 @@ void near pattern_red_stacks(void)
snd_se_play(15);
}
}
void near phase_3_with_pattern(void)
{
if(boss.phase_frame < PHASE_3_PATTERN_START_FRAME) {
gather_add_only_3stack(
(boss.phase_frame - 16), COL_GATHER_1, COL_GATHER_2
);
if(boss.phase_frame == 16) {
snd_se_play(8);
boss.sprite = PAT_SARA_SPIN;
state->phase_3.angle_clockwise = (0x40 - 0x08);
state->phase_3.angle_counterclockwise = (0x40 + 0x08);
state->phase_3.ring_speed.set(1.5f);
}
return;
}
if(boss.phase_frame < 64) {
boss.sprite++;
} else if(boss.phase_frame < 96) {
if((boss.phase_frame % 2) == 0) {
boss.sprite++;
}
} else if(boss.phase_frame < 128) {
if((boss.phase_frame % 4) == 0) {
boss.sprite++;
}
} else if((boss.phase_frame < 160)) {
if((boss.phase_frame % 8) == 0) {
boss.sprite++;
}
}
if(boss.sprite >= (PAT_SARA_SPIN_last + 1)) {
boss.sprite = PAT_SARA_SPIN;
}
phase_2_3_pattern();
if(boss.phase_frame >= state->phase_3.pattern_duration) {
boss.phase_frame = 0;
boss.mode = 0;
boss.sprite = PAT_SARA_STAY;
}
}

View File

@ -10259,93 +10259,11 @@ B1_UPDATE_TEXT segment byte public 'CODE' use16
@pattern_blue_curve_clockwise$qv procdesc near
@pattern_aimed_red_spread_stack$qv procdesc near
@pattern_red_stacks$qv procdesc near
@phase_3_with_pattern$qv procdesc near
B1_UPDATE_TEXT ends
B4_UPDATE_TEXT segment byte public 'CODE' use16
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_1833B proc near
push bp
mov bp, sp
cmp _boss_phase_frame, 32
jge short loc_1837B
mov ax, _boss_phase_frame
add ax, -16
call @gather_add_only_3stack$qiii pascal, ax, large (9 shl 16) or 8
cmp _boss_phase_frame, 16
jnz loc_183F3
call snd_se_play pascal, 8
mov _boss_sprite, PAT_SARA_SPIN
mov _boss_statebyte[15], 38h
mov _boss_statebyte[14], 48h
mov _boss_statebyte[13], 18h
pop bp
retn
; ---------------------------------------------------------------------------
loc_1837B:
cmp _boss_phase_frame, 64
jl short loc_183C4
cmp _boss_phase_frame, 96
jge short loc_18398
mov ax, _boss_phase_frame
mov bx, 2
cwd
idiv bx
or dx, dx
jnz short loc_183C8
jmp short loc_183C4
; ---------------------------------------------------------------------------
loc_18398:
cmp _boss_phase_frame, 128
jge short loc_183AF
mov ax, _boss_phase_frame
mov bx, 4
cwd
idiv bx
or dx, dx
jnz short loc_183C8
jmp short loc_183C4
; ---------------------------------------------------------------------------
loc_183AF:
cmp _boss_phase_frame, 160
jge short loc_183C8
mov ax, _boss_phase_frame
mov bx, 8
cwd
idiv bx
or dx, dx
jnz short loc_183C8
loc_183C4:
inc _boss_sprite
loc_183C8:
cmp _boss_sprite, (PAT_SARA_SPIN + SPIN_CELS)
jb short loc_183D4
mov _boss_sprite, PAT_SARA_SPIN
loc_183D4:
call _sara_phase_2_3_pattern
mov al, _boss_statebyte[9]
mov ah, 0
cmp ax, _boss_phase_frame
jg short loc_183F3
mov _boss_phase_frame, 0
mov _boss_mode, 0
mov _boss_sprite, PAT_SARA_STAY
loc_183F3:
pop bp
retn
sub_1833B endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
@ -10819,7 +10737,7 @@ loc_18862:
; ---------------------------------------------------------------------------
loc_18884:
call sub_1833B
call @phase_3_with_pattern$qv
cmp _boss_phase_frame, 0
jnz short loc_1889D
cmp _boss_statebyte[9], -4Ch