[Decompilation] [th01] Elis: Phase 5 girl pattern selection

The phase 3 selection logic was fine! No need to reinvent it with even
more convoluted logic, in a function that should not exist to begin
with. (Phase 4 is another one that only consists of a teleport and a
bat transformation.)

Part of P0195, funded by Yanga.
This commit is contained in:
nmlgc 2022-05-19 20:09:10 +02:00
parent be7e88ceaf
commit 9299df2f53
2 changed files with 56 additions and 108 deletions

View File

@ -1659,3 +1659,52 @@ elis_starpattern_ret_t pattern_aimed_5_spreads_and_lasers_followed_by_ring(void)
#undef circle
}
elis_phase_5_subphase_t phase_5_girl(bool16 reset = false)
{
#define star_of_david_then(in, pattern_cur, func) { \
if(subphase == SP_STAR_OF_DAVID) { \
subphase = star_of_david(); \
return P5_PATTERN; \
} \
/* subphase == SP_PATTERN */ \
subphase = func(); \
if(subphase == SP_STAR_OF_DAVID) { \
subphase = SP_STAR_OF_DAVID; \
pattern_cur = CHOOSE_NEW; \
return P5_TRANSFORM; \
} \
return P5_PATTERN; \
}
#define pattern_cur phase_5_girl_pattern_cur
#define subphase phase_5_girl_subphase
extern int pattern_cur;
extern elis_starpattern_ret_t subphase;
if(reset == true) {
pattern_cur = CHOOSE_NEW;
subphase = SP_STAR_OF_DAVID;
return P5_PATTERN;
}
switch(pattern_cur) {
case CHOOSE_NEW:
pattern_cur = ((rand() % 3) + 1);
break;
case 1: /* return */ star_of_david_then(subphase, pattern_cur,
pattern_three_symmetric_4_stacks_then_symmetric_arc
);
case 2: /* return */ star_of_david_then(subphase, pattern_cur,
pattern_safety_circle_and_rain_from_top
);
case 3: /* return */ star_of_david_then(subphase, pattern_cur,
pattern_aimed_5_spreads_and_lasers_followed_by_ring
);
}
return P5_PATTERN;
#undef subphase
#undef pattern_cur
#undef star_of_david_then
}

View File

@ -17408,7 +17408,6 @@ ELIS_BASE_TOP = (PLAYFIELD_TOP + ((PLAYFIELD_H / 21) * 5) - (ELIS_GIRL_H / 2))
extern @elis_free$qv:proc
extern @wave_teleport$qii:proc
extern @phase_1$qi:proc
@star_of_david$qv procdesc near
extern @phase_3$qi:proc
extern @transform_girl_to_bat$qv:proc
extern @transform_bat_to_girl$qv:proc
@ -17417,9 +17416,7 @@ ELIS_BASE_TOP = (PLAYFIELD_TOP + ((PLAYFIELD_H / 21) * 5) - (ELIS_GIRL_H / 2))
extern @pattern_bat_alternating_narrow_a$qv:proc
extern @pattern_bat_alternating_2_and_3_$qv:proc
extern @pattern_bat_random_rain$qv:proc
extern @pattern_three_symmetric_4_stacks$qv:proc
extern @pattern_safety_circle_and_rain_f$qv:proc
extern @pattern_aimed_5_spreads_and_lase$qv:proc
extern @phase_5_girl$qi:proc
main_35_TEXT ends
main_35__TEXT segment byte public 'CODE' use16
@ -17428,104 +17425,6 @@ main_35__TEXT segment byte public 'CODE' use16
; Attributes: bp-based frame
sub_27AC1 proc far
arg_0 = word ptr 6
push bp
mov bp, sp
cmp [bp+arg_0], 1
jnz short loc_27AD9
mov word_35D44, 0
mov word_35D46, 0
jmp loc_27B5B
; ---------------------------------------------------------------------------
loc_27AD9:
mov bx, word_35D44
cmp bx, 3
ja short loc_27B5B
add bx, bx
jmp cs:off_27B5F[bx]
loc_27AE9:
call IRand
mov bx, 3
cwd
idiv bx
inc dx
mov word_35D44, dx
jmp short loc_27B5B
; ---------------------------------------------------------------------------
loc_27AFB:
cmp word_35D46, 0
jnz short loc_27B04
jmp short loc_27B34
; ---------------------------------------------------------------------------
loc_27B04:
call @pattern_three_symmetric_4_stacks$qv
mov word_35D46, ax
cmp word_35D46, 0
jnz short loc_27B5B
jmp short loc_27B4A
; ---------------------------------------------------------------------------
loc_27B14:
cmp word_35D46, 0
jnz short loc_27B1D
jmp short loc_27B34
; ---------------------------------------------------------------------------
loc_27B1D:
call @pattern_safety_circle_and_rain_f$qv
mov word_35D46, ax
cmp word_35D46, 0
jnz short loc_27B5B
jmp short loc_27B4A
; ---------------------------------------------------------------------------
loc_27B2D:
cmp word_35D46, 0
jnz short loc_27B3C
loc_27B34:
call @star_of_david$qv
mov word_35D46, ax
jmp short loc_27B5B
; ---------------------------------------------------------------------------
loc_27B3C:
call @pattern_aimed_5_spreads_and_lase$qv
mov word_35D46, ax
cmp word_35D46, 0
jnz short loc_27B5B
loc_27B4A:
mov word_35D46, 0
mov word_35D44, 0
mov ax, 1
pop bp
retf
; ---------------------------------------------------------------------------
loc_27B5B:
xor ax, ax
pop bp
retf
sub_27AC1 endp
; ---------------------------------------------------------------------------
off_27B5F dw offset loc_27AE9
dw offset loc_27AFB
dw offset loc_27B14
dw offset loc_27B2D
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_27B67 proc far
arg_0 = dword ptr 6
@ -17539,8 +17438,7 @@ arg_C = word ptr 12h
jnz short loc_27B85
mov word_35D48, 0
mov word_35D4A, 0
push 1
call sub_27AC1
call @phase_5_girl$qi stdcall, 1
pop cx
pop bp
retf
@ -17610,8 +17508,7 @@ loc_27BE7:
loc_27C06:
cmp word_35D48, 0
jnz short loc_27C19
push 0
call sub_27AC1
call @phase_5_girl$qi stdcall, 0
pop cx
mov word_35D48, ax
pop bp
@ -19171,8 +19068,10 @@ aTamayen_ptn db 'tamayen.ptn',0
public _phase_3_pattern_cur
_phase_3_pattern_cur dw 0
word_35D44 dw 0
word_35D46 dw 0
public _phase_5_girl_pattern_cur, _phase_5_girl_subphase
_phase_5_girl_pattern_cur dw 0
_phase_5_girl_subphase dw 0
word_35D48 dw 0
word_35D4A dw 0
word_35D4C dw 0