[Maintenance] [th05] Declare laser symbols in C land, using current conventions

Oh hey, these 2018 variable names weren't completely bad!

Part of P0185, funded by [Anonymous], -Tom-, and Blue Bolt.
This commit is contained in:
nmlgc 2022-02-26 23:46:19 +01:00
parent 96ed07f31e
commit 3850f8aafb
6 changed files with 200 additions and 163 deletions

View File

@ -0,0 +1,87 @@
enum laser_flag_t {
LF_FREE = 0,
LF_SHOOTOUT = 1,
LF_FIXED_WAIT_TO_GROW = 2,
LF_FIXED_GROW = 3,
// Fixed laser has reached its target width and will now actually kill the
// player on contact.
LF_FIXED_ACTIVE = 4,
LF_FIXED_SHRINK = 5,
LF_FIXED_SHRINK_AND_WAIT_TO_GROW = 6,
LF_DECAY = 7,
};
struct laser_coords_t {
PlayfieldPoint origin;
// Start and end point on the infinite [angle]° line starting at [origin]
// that make up the actually rendered (and damaging) laser.
Subpixel starts_at_distance;
Subpixel ends_at_distance;
unsigned char angle;
unsigned char width; // pixel_t
};
struct laser_t {
laser_flag_t flag;
uint4_t col;
laser_coords_t coords;
Subpixel shootout_speed;
int age;
union {
// [age] at which a fixed laser should transition from
// LF_FIXED_WAIT_TO_GROW to LF_FIXED_GROW.
int grow;
// [age] at which a shoot-out laser should stop growing and start
// moving along the infinite [angle]° line.
int moveout;
} active_at_age;
// [age] at which a fixed laser should transition from LF_FIXED_ACTIVE to
// LF_FIXED_SHRINK.
int shrink_at_age;
// [width] (in pixels) at which a fixed laser should transition from
// LF_FIXED_GROW to LF_FIXED_ACTIVE.
uint8_t grow_to_width;
uint8_t padding[3];
};
#define LASER_COUNT 32
extern laser_t lasers[LASER_COUNT];
extern laser_t laser_template;
/// Control
/// -------
/// "Manual" lasers ignore any age fields from the laser template.
// Spawns a new shoot-out laser based on the [laser_template].
void near lasers_shootout_add(void);
// Creates a new fixed laser based on the [laser_template] in the given [slot]
// if that one is currently empty.
void pascal near laser_fixed_spawn(int slot);
// Creates a new fixed, manually controlled laser based on the [laser_template]
// in the given [slot] if that one is currently empty.
void pascal near laser_manual_fixed_spawn(int slot);
// Starts the growing phase of the manually controlled fixed laser at [slot].
void pascal near laser_manual_grow(int slot);
// Transitions the laser at [slot] to a stopping phase appropriate for its
// current one.
void pascal near laser_stop(int slot);
/// -------
// Returns `true` if the laser is entirely off-screen.
bool16 pascal near laser_render_ray(laser_coords_t near *coords);
// Processes any collision between the given [laser] and the player.
void pascal near laser_hittest(laser_t near &laser);
void near lasers_update(void);
void near lasers_render(void);

View File

@ -49,11 +49,8 @@ build_line_in_pixels proc near
build_line_in_pixels endp
; Returns 1 if the laser is entirely off-screen.
; int pascal near laser_render_ray(laser_coords_t near *coords)
public LASER_RENDER_RAY
laser_render_ray proc near
public @LASER_RENDER_RAY$QP14LASER_COORDS_T
@laser_render_ray$qp14laser_coords_t proc near
point0 = Point ptr -20h
point1 = Point ptr -1Ch
point2 = Point ptr -18h
@ -124,12 +121,11 @@ point7 = Point ptr -4
pop si
leave
retn 2
laser_render_ray endp
@laser_render_ray$qp14laser_coords_t endp
; void pascal near laser_hittest(laser_t near *laser);
public LASER_HITTEST
laser_hittest proc near
public @LASER_HITTEST$QR7LASER_T
@laser_hittest$qr7laser_t proc near
testrect_center = byte ptr -4
laser = word ptr 4
@ -171,4 +167,4 @@ laser = word ptr 4
pop di
leave
ret 2
laser_hittest endp
@laser_hittest$qr7laser_t endp

View File

@ -1,63 +1,37 @@
; Modes
; -----
LM_NONE = 0
LM_SHOOTOUT = 1
LM_FIXED_WAIT_TO_GROW = 2
LM_FIXED_GROW = 3
; Fixed laser has reached its target width and will now actually kill the
; player on contact
LM_FIXED_ACTIVE = 4
LM_FIXED_SHRINK = 5
LM_FIXED_SHRINK_AND_WAIT_TO_GROW = 6
LM_DECAY = 7
; -----
LF_FREE = 0
LF_SHOOTOUT = 1
LF_FIXED_WAIT_TO_GROW = 2
LF_FIXED_GROW = 3
LF_FIXED_ACTIVE = 4
LF_FIXED_SHRINK = 5
LF_FIXED_SHRINK_AND_WAIT_TO_GROW = 6
LF_DECAY = 7
; Structures
; ----------
; TODO: Remove the anti-collision LASER_ prefixes once this gets decompiled.
; [origin] and the two distances are stored in units of 1/16th of a pixel.
laser_coords_t struc
origin Point <?>
; Start and end point on the infinite [angle]° line starting at [origin]
; that make up the actually rendered (and damaging) laser.
starts_at_distance dw ?
ends_at_distance dw ?
angle db ?
LASER_width db ?
laser_coords_t ends
laser_t struc
mode db ?
flag db ?
LASER_color db ?
coords laser_coords_t <?>
; 1/16th pixel units per frame.
shootout_speed dw ?
LASER_age dw ?
; [age] at which a fixed laser should transition from LM_FIXED_WAIT_TO_GROW
; to LM_FIXED_GROW.
grow_at_age label word
; [age] at which a shoot-out laser should stop growing and start moving
; along the infinite [angle]° line.
moveout_at_age label word
dw ?
; [age] at which a fixed laser should transition from LM_FIXED_ACTIVE to
; LM_FIXED_SHRINK.
shrink_at_age dw ?
; [width] at which a fixed laser should transition from LM_FIXED_GROW to
; LM_FIXED_ACTIVE.
grow_to_width db ?
db 3 dup(?)
laser_t ends
; ----------
LASER_COUNT = 32
public _lasers, _laser_template
_lasers laser_t LASER_COUNT dup(<?>)
_laser_template laser_t <?>

View File

@ -1,7 +1,4 @@
; Adds a new shoot-out laser based on the [laser_template].
; void near lasers_add_shoutout(void);
lasers_add_shoutout proc near
@lasers_shootout_add$qv proc near
@@speed = word ptr -2
push bp
@ -18,9 +15,9 @@ lasers_add_shoutout proc near
jmp short @@more?
@@loop:
cmp [si+laser_t.mode], LM_NONE
cmp [si+laser_t.flag], LF_FREE
jnz short @@next
mov [si+laser_t.mode], LM_SHOOTOUT
mov [si+laser_t.flag], LF_SHOOTOUT
mov [si+laser_t.coords.starts_at_distance], (16 shl 4)
mov [si+laser_t.coords.ends_at_distance], (16 shl 4)
mov [si+laser_t.LASER_age], 0
@ -59,14 +56,10 @@ lasers_add_shoutout proc near
pop si
leave
ret
lasers_add_shoutout endp
@lasers_shootout_add$qv endp
; Creates a new fixed laser based on the [laser_template] in the given [slot]
; if that one is currently empty.
; void pascal near lasers_new_fixed_in_slot(unsigned int slot);
lasers_new_fixed_in_slot proc near
@laser_fixed_spawn$qi proc near
@@slot = word ptr 4
push bp
@ -76,9 +69,9 @@ lasers_new_fixed_in_slot proc near
imul ax, size laser_t
add ax, offset _lasers
mov si, ax
cmp [si+laser_t.mode], LM_NONE
cmp [si+laser_t.flag], LF_FREE
jnz short @@ret
mov [si+laser_t.mode], LM_FIXED_WAIT_TO_GROW
mov [si+laser_t.flag], LF_FIXED_WAIT_TO_GROW
mov eax, _laser_template.coords.origin
mov dword ptr [si+laser_t.coords.origin], eax
mov [si+laser_t.coords.starts_at_distance], (16 shl 4)
@ -101,14 +94,10 @@ lasers_new_fixed_in_slot proc near
pop si
pop bp
ret 2
lasers_new_fixed_in_slot endp
@laser_fixed_spawn$qi endp
; Creates a new fixed, manually controlled laser based on the [laser_template]
; in the given [slot] if that one is currently empty.
; void pascal near lasers_new_fixed_and_manual_in_slot(unsigned int slot);
lasers_new_fixed_and_manual_in_slot proc near
@laser_manual_fixed_spawn$qi proc near
@@slot = word ptr 4
push bp
@ -118,9 +107,9 @@ lasers_new_fixed_and_manual_in_slot proc near
imul ax, size laser_t
add ax, offset _lasers
mov si, ax
cmp [si+laser_t.mode], LM_NONE
cmp [si+laser_t.flag], LF_FREE
jnz short @@ret
mov [si+laser_t.mode], LM_FIXED_WAIT_TO_GROW
mov [si+laser_t.flag], LF_FIXED_WAIT_TO_GROW
mov eax, _laser_template.coords.origin
mov dword ptr [si+laser_t.coords.origin], eax
mov [si+laser_t.coords.starts_at_distance], (16 shl 4)
@ -141,13 +130,10 @@ lasers_new_fixed_and_manual_in_slot proc near
pop si
pop bp
ret 2
lasers_new_fixed_and_manual_in_slot endp
@laser_manual_fixed_spawn$qi endp
; Starts the growing phase of the manually controlled fixed laser at [slot].
; void pascal near lasers_grow_manual_in_slot(unsigned int slot);
lasers_grow_manual_in_slot proc near
@laser_manual_grow$qi proc near
@@slot = word ptr 4
push bp
@ -156,25 +142,21 @@ lasers_grow_manual_in_slot proc near
mov si, [bp+@@slot]
mov bx, si
imul bx, size laser_t
cmp _lasers[bx].mode, LM_FIXED_WAIT_TO_GROW
cmp _lasers[bx].flag, LF_FIXED_WAIT_TO_GROW
jnz short @@ret
mov bx, si
imul bx, size laser_t
mov _lasers[bx].mode, LM_FIXED_GROW
mov _lasers[bx].flag, LF_FIXED_GROW
call snd_se_play pascal, 6
@@ret:
pop si
pop bp
ret 2
lasers_grow_manual_in_slot endp
@laser_manual_grow$qi endp
; Transitions the laser at [slot] to a stopping phase appropriate for its
; current one.
; void pascal lasers_stop_in_slot(unsigned int slot);
lasers_stop_in_slot proc near
@laser_stop$qi proc near
@@slot = word ptr 4
push bp
@ -182,39 +164,39 @@ lasers_stop_in_slot proc near
mov ax, [bp+@@slot]
mov bx, ax
imul bx, size laser_t
cmp _lasers[bx].mode, LM_FIXED_ACTIVE
cmp _lasers[bx].flag, LF_FIXED_ACTIVE
jnz short @@shootout?
mov bx, ax
imul bx, size laser_t
mov _lasers[bx].mode, LM_FIXED_SHRINK
mov _lasers[bx].flag, LF_FIXED_SHRINK
pop bp
ret 2
@@shootout?:
mov bx, ax
imul bx, size laser_t
cmp _lasers[bx].mode, LM_SHOOTOUT
cmp _lasers[bx].flag, LF_SHOOTOUT
jnz short @@fixed_shrink?
mov bx, ax
imul bx, size laser_t
mov _lasers[bx].mode, LM_DECAY
mov _lasers[bx].flag, LF_DECAY
pop bp
ret 2
@@fixed_shrink?:
mov bx, ax
imul bx, size laser_t
cmp _lasers[bx].mode, LM_FIXED_SHRINK
cmp _lasers[bx].flag, LF_FIXED_SHRINK
jz short @@ret
mov bx, ax
imul bx, size laser_t
cmp _lasers[bx].mode, LM_DECAY
cmp _lasers[bx].flag, LF_DECAY
jz short @@ret
mov bx, ax
imul bx, size laser_t
mov _lasers[bx].mode, LM_NONE
mov _lasers[bx].flag, LF_FREE
@@ret:
pop bp
ret 2
lasers_stop_in_slot endp
@laser_stop$qi endp

View File

@ -1,6 +1,5 @@
; void pascal near lasers_update(void);
public LASERS_UPDATE
lasers_update proc near
public @lasers_update$qv
@lasers_update$qv proc near
push bp
mov bp, sp
push si
@ -10,7 +9,7 @@ lasers_update proc near
jmp @@more?
@@loop:
cmp [si+laser_t.mode], LM_NONE
cmp [si+laser_t.flag], LF_FREE
jz @@next
cmp _bullet_clear_time, 0
jnz short @@shootout
@ -18,9 +17,9 @@ lasers_update proc near
jz short @@switch
@@shootout:
cmp [si+laser_t.mode], LM_SHOOTOUT
cmp [si+laser_t.flag], LF_SHOOTOUT
jnz short @@switch
mov [si+laser_t.mode], LM_DECAY
mov [si+laser_t.flag], LF_DECAY
mov ax, [si+laser_t.shootout_speed]
cwd
sub ax, dx
@ -28,7 +27,7 @@ lasers_update proc near
mov [si+laser_t.shootout_speed], ax
@@switch:
mov al, [si+laser_t.mode]
mov al, [si+laser_t.flag]
mov ah, 0
dec ax
mov bx, ax
@ -51,7 +50,7 @@ loc_FC52:
add [si+laser_t.coords.starts_at_distance], ax
loc_FC60:
call laser_hittest pascal, si
call @laser_hittest$qr7laser_t pascal, si
jmp @@age_inc
; ---------------------------------------------------------------------------
@ -61,7 +60,7 @@ laser_update_fixed_wait_to_grow:
mov ax, [si+laser_t.LASER_age]
cmp ax, [si+laser_t.grow_at_age]
jl @@age_inc
inc [si+laser_t.mode]
inc [si+laser_t.flag]
call snd_se_play pascal, 6
jmp @@age_inc
; ---------------------------------------------------------------------------
@ -81,7 +80,7 @@ laser_update_fixed_grow:
; ---------------------------------------------------------------------------
laser_update_fixed_active:
call laser_hittest pascal, si
call @laser_hittest$qr7laser_t pascal, si
cmp [si+laser_t.shrink_at_age], 0
jle short @@age_inc
mov ax, [si+laser_t.LASER_age]
@ -89,7 +88,7 @@ laser_update_fixed_active:
jl short @@age_inc
@@next_mode:
inc [si+laser_t.mode]
inc [si+laser_t.flag]
jmp short @@age_inc
; ---------------------------------------------------------------------------
@ -116,7 +115,7 @@ laser_update_fixed_shrink_and_wait_to_grow:
@@shrink_and_wait_to_grow_step:
cmp [si+laser_t.coords.LASER_width], 1
jg short @@age_inc
mov [si+laser_t.mode], LM_FIXED_WAIT_TO_GROW
mov [si+laser_t.flag], LF_FIXED_WAIT_TO_GROW
mov [si+laser_t.LASER_age], 0
jmp short @@age_inc
; ---------------------------------------------------------------------------
@ -142,7 +141,7 @@ loc_FD02:
jb short @@age_inc
@@delete:
mov [si+laser_t.mode], LM_NONE
mov [si+laser_t.flag], LF_FREE
@@age_inc:
inc [si+laser_t.LASER_age]
@ -158,7 +157,7 @@ loc_FD02:
pop si
pop bp
retn
lasers_update endp
@lasers_update$qv endp
; ---------------------------------------------------------------------------
lasers_update_switch label word
@ -171,9 +170,8 @@ lasers_update_switch label word
dw offset laser_update_decay
; ---------------------------------------------------------------------------
; void pascal near lasers_render(void);
public LASERS_RENDER
lasers_render proc near
public @lasers_render$qv
@lasers_render$qv proc near
@@radius = byte ptr -0Ah
@@width_orig = byte ptr -9
@ -193,7 +191,7 @@ lasers_render proc near
; ---------------------------------------------------------------------------
@@laser_loop:
cmp [si+laser_t.mode], LM_NONE
cmp [si+laser_t.flag], LF_FREE
jz @@next_laser
mov al, [si+laser_t.coords.LASER_width]
mov [bp+@@width_orig], al
@ -214,7 +212,7 @@ lasers_render proc near
sar ax, 4
add ax, 16
mov [bp+@@draw_y], ax
cmp [si+laser_t.mode], LM_DECAY
cmp [si+laser_t.flag], LF_DECAY
jz @@decay
cmp [bp+@@radius], 2
jnb short @@draw_outer_circle?
@ -244,7 +242,7 @@ lasers_render proc near
mov [bp+@@end_distance_orig], ax
sub [si+laser_t.coords.ends_at_distance], (2 shl 4)
lea ax, [si+laser_t.coords]
call laser_render_ray pascal, ax
call @laser_render_ray$qp14laser_coords_t pascal, ax
mov ax, [bp+@@end_distance_orig]
mov [si+laser_t.coords.ends_at_distance], ax
@ -320,10 +318,10 @@ lasers_render proc near
@@draw_inner_ray:
lea ax, [si+laser_t.coords]
call laser_render_ray pascal, ax
call @laser_render_ray$qp14laser_coords_t pascal, ax
or ax, ax
jz @@width_reset
mov [si+laser_t.mode], LM_NONE
mov [si+laser_t.flag], LF_FREE
jmp @@width_reset
; ---------------------------------------------------------------------------
@ -416,4 +414,4 @@ lasers_render proc near
pop si
leave
retn
lasers_render endp
@lasers_render$qv endp

View File

@ -415,7 +415,7 @@ loc_AED7:
call _sparks_update
call sub_1214A
call sub_1240B
call lasers_update
call @lasers_update$qv
call _bullets_update
call enemies_update
call _midboss_update
@ -435,7 +435,7 @@ loc_AF2D:
call player_render
call _grcg_setmode_rmw_seg1
call _boss_custombullets_render
call lasers_render
call @lasers_render$qv
call _gather_render
call _sparks_render
call items_render
@ -12059,9 +12059,9 @@ loc_1859F:
mov _laser_template.coords.angle, -32
mov _laser_template.LASER_color, 8
mov _laser_template.coords.LASER_width, 8
call lasers_new_fixed_and_manual_in_slot pascal, 0
call @laser_manual_fixed_spawn$qi pascal, 0
mov _laser_template.coords.angle, -96
call lasers_new_fixed_and_manual_in_slot pascal, 1
call @laser_manual_fixed_spawn$qi pascal, 1
mov angle_2D085, 0
mov angle_2D084, 1
mov byte_2D083, 1
@ -12074,8 +12074,8 @@ loc_185DD:
jle loc_186B4
cmp _boss_phase_frame, 64
jnz short loc_185F7
call lasers_grow_manual_in_slot pascal, 0
call lasers_grow_manual_in_slot pascal, 1
call @laser_manual_grow$qi pascal, 0
call @laser_manual_grow$qi pascal, 1
loc_185F7:
mov al, byte_2D083
@ -12363,8 +12363,8 @@ loc_188C6:
mov _boss_mode_change, 1
loc_188D2:
call lasers_stop_in_slot pascal, 0
call lasers_stop_in_slot pascal, 1
call @laser_stop$qi pascal, 0
call @laser_stop$qi pascal, 1
mov _boss_phase_frame, 0
mov _boss_phase, PHASE_BOSS_EXPLODE_SMALL
jmp short loc_188EE
@ -13060,7 +13060,7 @@ loc_18F12:
jnz short loc_18F5A
cmp angle_2D085, 0
jz short loc_18F2B
call lasers_add_shoutout
call @lasers_shootout_add$qv
jmp short loc_18F40
; ---------------------------------------------------------------------------
@ -13068,7 +13068,7 @@ loc_18F2B:
mov al, 128
sub al, _laser_template.coords.angle
mov _laser_template.coords.angle, al
call lasers_add_shoutout
call @lasers_shootout_add$qv
mov al, 128
sub al, _laser_template.coords.angle
mov _laser_template.coords.angle, al
@ -14802,15 +14802,15 @@ loc_19E43:
push ax
call iatan2
mov _laser_template.coords.angle, al
call lasers_add_shoutout
call @lasers_shootout_add$qv
mov al, _laser_template.coords.angle
add al, 16
mov _laser_template.coords.angle, al
call lasers_add_shoutout
call @lasers_shootout_add$qv
mov al, _laser_template.coords.angle
add al, -32
mov _laser_template.coords.angle, al
call lasers_add_shoutout
call @lasers_shootout_add$qv
mov _bullet_template.spawn_type, BST_CLOUD_FORWARDS or BST_NO_SLOWDOWN
mov _bullet_template.BT_group, BG_RANDOM_ANGLE_AND_SPEED
mov _bullet_template.patnum, PAT_BULLET16_N_BLUE
@ -15641,12 +15641,12 @@ var_1 = byte ptr -1
mov _laser_template.coords.angle, al
mov _laser_template.LASER_color, 8
mov _laser_template.coords.LASER_width, 8
call lasers_new_fixed_and_manual_in_slot pascal, 0
call @laser_manual_fixed_spawn$qi pascal, 0
loc_1A7AF:
cmp _boss_phase_frame, 80
jnz short loc_1A7BB
call lasers_grow_manual_in_slot pascal, 0
call @laser_manual_grow$qi pascal, 0
loc_1A7BB:
mov ax, _boss_phase_frame
@ -15697,7 +15697,7 @@ loc_1A817:
loc_1A81A:
cmp _boss_phase_frame, 160
jnz short loc_1A82B
call lasers_stop_in_slot pascal, 0
call @laser_stop$qi pascal, 0
mov al, 1
leave
retn
@ -16383,9 +16383,9 @@ loc_1AE2C:
mov _boss2_mode_change, al
mov _boss_phase, PHASE_BOSS_EXPLODE_SMALL
mov _boss_phase_frame, 0
cmp _lasers[0 * size laser_t].mode, LM_NONE
cmp _lasers[0 * size laser_t].flag, LF_FREE
jz loc_1AFA7 ; default
call lasers_stop_in_slot pascal, 0
call @laser_stop$qi pascal, 0
jmp short loc_1AE69
; ---------------------------------------------------------------------------
@ -18502,19 +18502,19 @@ var_2 = word ptr -2
sub dl, byte ptr [bp+var_2]
sub dl, al
mov _laser_template.coords.angle, dl
call lasers_new_fixed_in_slot pascal, 0
call @laser_fixed_spawn$qi pascal, 0
mov al, _laser_template.coords.angle
add al, byte ptr [bp+var_2]
mov _laser_template.coords.angle, al
call lasers_new_fixed_in_slot pascal, 1
call @laser_fixed_spawn$qi pascal, 1
mov al, _laser_template.coords.angle
add al, byte ptr [bp+var_2]
mov _laser_template.coords.angle, al
call lasers_new_fixed_in_slot pascal, 2
call @laser_fixed_spawn$qi pascal, 2
mov al, _laser_template.coords.angle
add al, byte ptr [bp+var_2]
mov _laser_template.coords.angle, al
call lasers_new_fixed_in_slot pascal, 3
call @laser_fixed_spawn$qi pascal, 3
mov byte_2D083, -8
jmp loc_1C347
; ---------------------------------------------------------------------------
@ -18609,7 +18609,7 @@ loc_1C376:
idiv word_2CE3C
add al, byte ptr [bp+var_2]
mov _laser_template.coords.angle, al
call lasers_new_fixed_and_manual_in_slot pascal, si
call @laser_manual_fixed_spawn$qi pascal, si
inc si
loc_1C38B:
@ -18653,7 +18653,7 @@ loc_1C3DB:
; ---------------------------------------------------------------------------
loc_1C3EC:
call lasers_grow_manual_in_slot pascal, si
call @laser_manual_grow$qi pascal, si
inc si
loc_1C3F1:
@ -18672,7 +18672,7 @@ loc_1C3F9:
loc_1C404:
mov bx, si
imul bx, size laser_t
mov _lasers[bx].mode, LM_FIXED_SHRINK_AND_WAIT_TO_GROW
mov _lasers[bx].flag, LF_FIXED_SHRINK_AND_WAIT_TO_GROW
inc si
loc_1C40F:
@ -18945,7 +18945,7 @@ loc_1C6CB:
; ---------------------------------------------------------------------------
loc_1C6CF:
call lasers_stop_in_slot pascal, si
call @laser_stop$qi pascal, si
inc si
loc_1C6D4:
@ -19683,7 +19683,7 @@ loc_1CFC3:
mov _laser_template.coords.origin.x, ax
call player_angle_from pascal, ax, _laser_template.coords.origin.y, 0
mov _laser_template.coords.angle, al
call lasers_add_shoutout
call @lasers_shootout_add$qv
xor si, si
jmp short loc_1D02B
; ---------------------------------------------------------------------------
@ -20448,17 +20448,17 @@ sub_1D89A proc near
cmp _boss_phase_frame, 16
jnz short loc_1D8F7
mov _laser_template.coords.angle, 80
call lasers_new_fixed_and_manual_in_slot pascal, 0
call @laser_manual_fixed_spawn$qi pascal, 0
mov _laser_template.coords.angle, 72
call lasers_new_fixed_and_manual_in_slot pascal, 1
call @laser_manual_fixed_spawn$qi pascal, 1
mov _laser_template.coords.angle, 64
call lasers_new_fixed_and_manual_in_slot pascal, 2
call @laser_manual_fixed_spawn$qi pascal, 2
mov _laser_template.coords.angle, 64
call lasers_new_fixed_and_manual_in_slot pascal, 3
call @laser_manual_fixed_spawn$qi pascal, 3
mov _laser_template.coords.angle, 56
call lasers_new_fixed_and_manual_in_slot pascal, 4
call @laser_manual_fixed_spawn$qi pascal, 4
mov _laser_template.coords.angle, 48
call lasers_new_fixed_and_manual_in_slot pascal, 5
call @laser_manual_fixed_spawn$qi pascal, 5
call snd_se_play pascal, 8
mov _boss_sprite, 181
mov angle_2D085, 0
@ -20536,7 +20536,7 @@ loc_1D9AE:
; ---------------------------------------------------------------------------
loc_1D9BC:
call lasers_grow_manual_in_slot pascal, si
call @laser_manual_grow$qi pascal, si
inc si
loc_1D9C1:
@ -20568,7 +20568,7 @@ loc_1D9EA:
; ---------------------------------------------------------------------------
loc_1DA05:
call lasers_stop_in_slot pascal, si
call @laser_stop$qi pascal, si
inc si
loc_1DA0A:
@ -20909,13 +20909,13 @@ loc_1DD27:
mov _laser_template.coords.angle, 64
mov _laser_template.LASER_color, 14
add _laser_template.coords.origin.x, (96 shl 4)
call lasers_new_fixed_and_manual_in_slot pascal, 0
call @laser_manual_fixed_spawn$qi pascal, 0
sub _laser_template.coords.origin.x, (64 shl 4)
call lasers_new_fixed_and_manual_in_slot pascal, 1
call @laser_manual_fixed_spawn$qi pascal, 1
sub _laser_template.coords.origin.x, (64 shl 4)
call lasers_new_fixed_and_manual_in_slot pascal, 2
call @laser_manual_fixed_spawn$qi pascal, 2
sub _laser_template.coords.origin.x, (64 shl 4)
call lasers_new_fixed_and_manual_in_slot pascal, 3
call @laser_manual_fixed_spawn$qi pascal, 3
inc word_22852
call boss_explode_small pascal, 0
@ -21077,10 +21077,10 @@ loc_1DF48:
jl short loc_1DF73
cmp word_22852, 40h
jnz short loc_1DF79
call lasers_grow_manual_in_slot pascal, 0
call lasers_grow_manual_in_slot pascal, 1
call lasers_grow_manual_in_slot pascal, 2
call lasers_grow_manual_in_slot pascal, 3
call @laser_manual_grow$qi pascal, 0
call @laser_manual_grow$qi pascal, 1
call @laser_manual_grow$qi pascal, 2
call @laser_manual_grow$qi pascal, 3
loc_1DF73:
inc word_22852
@ -21588,10 +21588,10 @@ loc_1E481:
loc_1E488:
call boss_phase_end pascal, (ET_HORIZONTAL shl 16) or 0
mov word_2CE06, 10h
call lasers_stop_in_slot pascal, 0
call lasers_stop_in_slot pascal, 1
call lasers_stop_in_slot pascal, 2
call lasers_stop_in_slot pascal, 3
call @laser_stop$qi pascal, 0
call @laser_stop$qi pascal, 1
call @laser_stop$qi pascal, 2
call @laser_stop$qi pascal, 3
jmp short loc_1E527
; ---------------------------------------------------------------------------
@ -22533,7 +22533,7 @@ sub_1ECD4 proc near
mov _laser_template.coords.angle, al
mov ax, word_22870
inc word_22870
call lasers_new_fixed_in_slot pascal, ax
call @laser_fixed_spawn$qi pascal, ax
mov _bullet_template.spawn_type, BST_NO_SLOWDOWN
mov _bullet_template.patnum, PAT_BULLET16_D_GREEN
mov _bullet_template.BT_group, BG_RING
@ -22552,7 +22552,7 @@ loc_1ED46:
mov _laser_template.coords.angle, al
mov ax, word_22870
inc word_22870
call lasers_new_fixed_in_slot pascal, ax
call @laser_fixed_spawn$qi pascal, ax
loc_1ED67:
and word_22870, 0Fh
@ -22563,7 +22563,7 @@ loc_1ED67:
loc_1ED70:
mov bx, si
imul bx, size laser_t
cmp _lasers[bx].mode, LM_FIXED_WAIT_TO_GROW
cmp _lasers[bx].flag, LF_FIXED_WAIT_TO_GROW
jnz short loc_1EDA3
test si, 1
jz short loc_1ED8F
@ -22701,7 +22701,7 @@ loc_1EE83:
mov angle_2D085, 0
loc_1EE9E:
call lasers_add_shoutout
call @lasers_shootout_add$qv
loc_1EEA1:
cmp _boss_phase_frame, 256