diff --git a/th01/main/boss/b15j.cpp b/th01/main/boss/b15j.cpp index 47943f71..65cded85 100644 --- a/th01/main/boss/b15j.cpp +++ b/th01/main/boss/b15j.cpp @@ -77,6 +77,7 @@ extern int8_t boss_phase; // -------- static const int SOUL_COUNT = 2; +static const int SOUL_CELS = 3; static const int TEAR_COUNT = 10; @@ -202,3 +203,15 @@ bool16 near kikuri_hittest_orb(void) } return false; } + +void pascal near soul_move_and_render(int i, pixel_t delta_x, pixel_t delta_y) +{ + souls[i].move_lock_unput_and_put_8(0, delta_x, delta_y, 1); + if((boss_phase_frame % 12) == 0) { + if(souls[i].bos_image >= (SOUL_CELS - 1)) { + souls[i].bos_image = 0; + } else { + souls[i].set_image(souls[i].bos_image + 1); + } + } +} diff --git a/th01_reiiden.asm b/th01_reiiden.asm index 1fbb1981..3135f7b6 100644 --- a/th01_reiiden.asm +++ b/th01_reiiden.asm @@ -14706,6 +14706,8 @@ main_34_TEXT segment byte public 'CODE' use16 extern @kikuri_load$qv:proc extern @kikuri_free$qv:proc @kikuri_hittest_orb$qv procdesc near + @SOUL_MOVE_AND_RENDER$QIII procdesc pascal near \ + soul:word, delta_x:word, delta_y:word main_34_TEXT ends main_34__TEXT segment byte public 'CODE' use16 @@ -14713,64 +14715,6 @@ main_34__TEXT segment byte public 'CODE' use16 ;org 4 assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -_kikuri_soul_move_and_render proc near - -@@image_new = word ptr -2 -@@delta_y = word ptr 4 -@@delta_x = word ptr 6 -@@soul = word ptr 8 - - enter 2, 0 - push si - mov si, [bp+@@soul] - push 1 ; lock_frames - push [bp+@@delta_y] ; delta_y - push [bp+@@delta_x] ; delta_x - push 0 ; unused - mov ax, si - imul ax, size CBossEntity - add ax, offset _kikuri_souls - push ds ; this (segment) - push ax ; this (offset) - call @CBossEntity@move_lock_unput_and_put_8$qiiii - add sp, 0Ch - mov ax, _boss_phase_frame - mov bx, 12 - cwd - idiv bx - or dx, dx - jnz short loc_23689 - mov bx, si - imul bx, size CBossEntity - cmp _kikuri_souls[bx].BE_bos_image, 2 - jl short loc_23673 - mov bx, si - imul bx, size CBossEntity - mov _kikuri_souls[bx].BE_bos_image, 0 - jmp short loc_23689 -; --------------------------------------------------------------------------- - -loc_23673: - mov bx, si - imul bx, size CBossEntity - mov ax, _kikuri_souls[bx].BE_bos_image - inc ax - mov [bp+@@image_new], ax - mov bx, si - imul bx, size CBossEntity - mov _kikuri_souls[bx].BE_bos_image, ax - -loc_23689: - pop si - leave - retn 6 -_kikuri_soul_move_and_render endp - - ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame @@ -15729,8 +15673,12 @@ loc_23F62: idiv bx or dx, dx jnz short loc_23F99 - call _kikuri_soul_move_and_render stdcall, -3, large (-4 and 0FFFFh) or (0 shl 16) - call _kikuri_soul_move_and_render stdcall, -3, large ( 4 and 0FFFFh) or (1 shl 16) + push large (0 shl 16) or (-4 and 0FFFFh) + push -3 + call @soul_move_and_render$qiii + push large (1 shl 16) or (+4 and 0FFFFh) + push -3 + call @soul_move_and_render$qiii cmp kikuri_soul_0.BE_cur_top, 96 jge short loc_23F99 mov ax, 1 @@ -15758,8 +15706,12 @@ var_6 = byte ptr -6 enter 8, 0 push si - call _kikuri_soul_move_and_render stdcall, 0, large 0 or (0 shl 16) - call _kikuri_soul_move_and_render stdcall, 0, large 0 or (1 shl 16) + push large (0 shl 16) or 0 + push 0 + call @soul_move_and_render$qiii + push large (1 shl 16) or 0 + push 0 + call @soul_move_and_render$qiii push 70 or (60 shl 16) ; (for_hard) or (for_lunatic) push 100 or (80 shl 16) ; (for_easy) or (for_normal) push ss ; ret (segment) @@ -15869,13 +15821,16 @@ loc_24092: sar eax, 8 mov di, ax call sub_23715 - call _kikuri_soul_move_and_render stdcall, di, si, 0 + push 0 + push si + push di + call @soul_move_and_render$qiii push 1 mov ax, si neg ax push ax push di - call _kikuri_soul_move_and_render + call @soul_move_and_render$qiii pop di pop si pop bp @@ -15981,13 +15936,16 @@ loc_2419B: sar eax, 8 mov di, ax call sub_23715 - call _kikuri_soul_move_and_render stdcall, di, si, 0 + push 0 + push si + push di + call @soul_move_and_render$qiii push 1 mov ax, si neg ax push ax push di - call _kikuri_soul_move_and_render + call @soul_move_and_render$qiii pop di pop si pop bp