diff --git a/th05/main/boss/b1.cpp b/th05/main/boss/b1.cpp index c97e5afe..627e1f8d 100644 --- a/th05/main/boss/b1.cpp +++ b/th05/main/boss/b1.cpp @@ -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; + } +} diff --git a/th05_main.asm b/th05_main.asm index 2306df61..ccecb7dd 100644 --- a/th05_main.asm +++ b/th05_main.asm @@ -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