ReC98/th05_op.asm

940 lines
20 KiB
NASM
Raw Blame History

;
; +-------------------------------------------------------------------------+
; | This file has been generated by The Interactive Disassembler (IDA) |
; | Copyright (c) 2009 by Hex-Rays, <support@hex-rays.com> |
; +-------------------------------------------------------------------------+
;
; Input MD5 : F97D1B72F01476639E9D33E361F57330
; File Name : th05/OP.EXE
; Format : MS-DOS executable (EXE)
; Base Address: 0h Range: 0h-14240h Loaded length: 1280Ah
; Entry Point : 0:0
; OS type : MS DOS
; Application type: Executable 16bit
.386
.model use16 large _TEXT
BINARY = 'O'
include ReC98.inc
include th05/th05.inc
include th04/hardware/grppsafx.inc
include th04/sprites/op_cdg.inc
include th05/op/music.inc
include th05/op/piano.inc
op_01 group OP_SETUP_TEXT, op_01_TEXT, HI_VIEW_TEXT
; ===========================================================================
_TEXT segment word public 'CODE' use16
extern PALETTE_BLACK_IN:proc
extern PALETTE_BLACK_OUT:proc
extern FILE_CLOSE:proc
extern FILE_CREATE:proc
extern FILE_EXIST:proc
extern FILE_READ:proc
extern FILE_ROPEN:proc
extern FILE_SEEK:proc
extern FILE_WRITE:proc
extern GRCG_BYTEBOXFILL_X:proc
extern GRCG_POLYGON_C:proc
extern GRCG_SETCOLOR:proc
extern GRAPH_CLEAR:proc
extern GRAPH_COPY_PAGE:proc
extern PALETTE_SHOW:proc
extern IRAND:proc
extern TEXT_CLEAR:proc
extern HMEM_ALLOCBYTE:proc
extern HMEM_FREE:proc
extern SUPER_FREE:proc
extern SUPER_ENTRY_BFNT:proc
extern SUPER_PUT_RECT:proc
extern SUPER_PUT:proc
extern GRAPH_GAIJI_PUTS:proc
extern GRAPH_GAIJI_PUTC:proc
extern PFSTART:proc
extern PFEND:proc
_TEXT ends
; ===========================================================================
; Segment type: Pure code
OP_SETUP_TEXT segment byte public 'CODE' use16
assume cs:op_01
assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing
include th04/zunsoft.asm
OP_SETUP_TEXT ends
op_01_TEXT segment byte public 'CODE' use16
@TRACK_UNPUT_OR_PUT$QUCI procdesc pascal near \
track_sel:byte, boot:word
@TRACKLIST_PUT$QUC procdesc pascal near \
sel:byte
include th02/op/music.asm
include th05/op/music_cmt_load.asm
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public DRAW_CMT_LINES
draw_cmt_lines proc pascal near
local @@y:word
push si
push di
call graph_putsa_fx pascal, (320 shl 16) or 32, 7, ds, offset _music_cmt
mov si, offset _music_cmt + MUSIC_CMT_LINE_LEN
mov di, 1
mov @@y, 180
jmp short loc_C36D
; ---------------------------------------------------------------------------
loc_C351:
cmp byte ptr [si], ';'
jz short loc_C365
call graph_putsa_fx pascal, 320, @@y, 7, ds, si
loc_C365:
inc di
add @@y, 16
add si, MUSIC_CMT_LINE_LEN
loc_C36D:
cmp di, MUSIC_CMT_LINE_COUNT
jl short loc_C351
pop di
pop si
ret
draw_cmt_lines endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_C376 proc near
push bp
mov bp, sp
push si
mov si, FX_MASK
jmp short loc_C390
; ---------------------------------------------------------------------------
loc_C37F:
mov _graph_putsa_fx_func, si
call draw_cmt_lines
call music_flip
call draw_cmt_lines
call music_flip
inc si
loc_C390:
cmp si, FX_MASK_END
jl short loc_C37F
mov _graph_putsa_fx_func, FX_WEIGHT_BOLD
call draw_cmt_lines
call music_flip
call draw_cmt_lines
pop si
pop bp
retn
sub_C376 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_C3A7 proc near
push bp
mov bp, sp
mov _graph_putsa_fx_func, FX_WEIGHT_BOLD
call bgimage_put_rect_16 pascal, (320 shl 16) or 32, (320 shl 16) or 16
call bgimage_put_rect_16 pascal, (320 shl 16) or 180, (320 shl 16) or 144
call music_flip
call bgimage_put_rect_16 pascal, (320 shl 16) or 32, (320 shl 16) or 16
call bgimage_put_rect_16 pascal, (320 shl 16) or 180, (320 shl 16) or 144
pop bp
retn
sub_C3A7 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public DRAW_CMT
draw_cmt proc near
@@track = word ptr 4
push bp
mov bp, sp
cmp byte_13E96, 0
jz short loc_C406
call sub_C3A7
loc_C406:
call music_cmt_load pascal, [bp+@@track]
call screen_back_B_put
call bgimage_put_rect_16 pascal, (320 shl 16) or 64, (320 shl 16) or 256
cmp byte_13E96, 0
jz short loc_C42C
call sub_C376
jmp short loc_C43A
; ---------------------------------------------------------------------------
loc_C42C:
mov byte_13E96, 1
call draw_cmt_lines
call music_flip
call draw_cmt_lines
loc_C43A:
call screen_back_B_put
pop bp
retn 2
draw_cmt endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_C441 proc near
arg_0 = word ptr 4
push bp
mov bp, sp
push si
mov si, [bp+arg_0]
call bgimage_put_rect_16 pascal, large (0 shl 16) or 32, (320 shl 16) or 16
call bgimage_put_rect_16 pascal, large (0 shl 16) or 96, (320 shl 16) or 192
call @tracklist_put$quc pascal, si
call music_flip
call bgimage_put_rect_16 pascal, large (0 shl 16) or 32, (320 shl 16) or 16
call bgimage_put_rect_16 pascal, large (0 shl 16) or 96, (320 shl 16) or 192
call @tracklist_put$quc pascal, si
pop si
pop bp
retn 2
sub_C441 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public _musicroom
_musicroom proc near
@@sel = byte ptr -1
enter 2, 0
push si
xor si, si
mov _track_id_at_top, 0
mov _track_playing, 0
mov _music_sel, 0
mov bx, _game_sel
add bx, bx
mov ax, _TRACK_COUNT[bx]
mov _track_count_cur, ax
mov byte_13E96, 0
call cdg_free_all
call text_clear
mov _music_page, 1
mov PaletteTone, 0
call far ptr palette_show
graph_showpage 0
graph_accesspage al
call graph_clear
graph_accesspage 1
call pi_load pascal, 0, ds, offset aMusic_pi
call pi_palette_apply pascal, 0
call pi_put_8 pascal, large 0, 0
call pi_free pascal, 0
call @piano_setup_and_put_initial$qv
call screen_back_B_snap
call _bgimage_snap
call @tracklist_put$quc pascal, word ptr _music_sel
call graph_copy_page pascal, 0
graph_accesspage 1
graph_showpage 0
call pfend
call pfstart pascal, ds, offset aMusic_dat ; "music.dat"
mov al, _music_sel
mov ah, 0
call draw_cmt pascal, ax
mov PaletteTone, 100
call far ptr palette_show
loc_C555:
call _input_reset_sense_held
cmp _key_det, INPUT_NONE
jz short loc_C57F
cmp si, 18h
jl short loc_C579
cmp _key_det, INPUT_UP
jz short loc_C574
cmp _key_det, INPUT_DOWN
jnz short loc_C579
loc_C574:
mov si, 14h
jmp short loc_C57F
; ---------------------------------------------------------------------------
loc_C579:
inc si
call music_flip
jmp short loc_C555
; ---------------------------------------------------------------------------
loc_C57F:
call _input_reset_sense_held
test _key_det.lo, low INPUT_UP
jz short loc_C5EB
mov al, _music_sel
mov [bp+@@sel], al
cmp _music_sel, 0
jbe short loc_C5D5
dec _music_sel
mov al, _music_sel
mov ah, 0
cmp ax, _track_id_at_top
jge short loc_C5AE
mov al, _music_sel
mov ah, 0
jmp short loc_C61C
; ---------------------------------------------------------------------------
loc_C5AE:
call @track_unput_or_put$quci pascal, word ptr [bp+@@sel], 0
call @track_unput_or_put$quci pascal, word ptr _music_sel, 1
call music_flip
call @track_unput_or_put$quci pascal, word ptr [bp+@@sel], 0
call @track_unput_or_put$quci pascal, word ptr _music_sel, 1
jmp short loc_C5EB
; ---------------------------------------------------------------------------
loc_C5D5:
mov al, byte ptr _track_count_cur
mov _music_sel, al
mov ax, _track_count_cur
add ax, -11
mov _track_id_at_top, ax
push _track_count_cur
call sub_C441
loc_C5EB:
test _key_det.lo, low INPUT_DOWN
jz short loc_C666
mov al, _music_sel
mov [bp+@@sel], al
mov ah, 0
cmp ax, _track_count_cur
jge short loc_C652
inc _music_sel
mov al, _music_sel
mov ah, 0
mov dx, _track_id_at_top
add dx, 12
cmp ax, dx
jl short loc_C62B
mov al, _music_sel
mov ah, 0
add ax, -11
loc_C61C:
mov _track_id_at_top, ax
mov al, _music_sel
mov ah, 0
push ax
call sub_C441
jmp loc_C6E3
; ---------------------------------------------------------------------------
loc_C62B:
call @track_unput_or_put$quci pascal, word ptr [bp+@@sel], 0
call @track_unput_or_put$quci pascal, word ptr _music_sel, 1
call music_flip
call @track_unput_or_put$quci pascal, word ptr [bp+@@sel], 0
call @track_unput_or_put$quci pascal, word ptr _music_sel, 1
jmp short loc_C666
; ---------------------------------------------------------------------------
loc_C652:
mov _music_sel, 0
mov _track_id_at_top, 0
mov al, _music_sel
mov ah, 0
push ax
call sub_C441
loc_C666:
test _key_det.lo, low INPUT_LEFT
jz short loc_C680
dec _game_sel
cmp _game_sel, 0
jge short loc_C698
mov _game_sel, 4
jmp short loc_C698
; ---------------------------------------------------------------------------
loc_C680:
test _key_det.lo, low INPUT_RIGHT
jz short loc_C6E3
inc _game_sel
cmp _game_sel, 5
jl short loc_C698
mov _game_sel, 0
loc_C698:
mov _music_sel, 0
mov _track_playing, 0
mov _track_id_at_top, 0
mov bx, _game_sel
add bx, bx
mov ax, _TRACK_COUNT[bx]
mov _track_count_cur, ax
push 0
call sub_C441
kajacall KAJA_SONG_FADE, 32
call draw_cmt pascal, 0
mov bx, _game_sel
imul bx, 78h
call snd_load pascal, dword ptr _MUSIC_FILES[bx], SND_LOAD_SONG
kajacall KAJA_SONG_PLAY
loc_C6E3:
test _key_det.lo, low INPUT_SHOT
jnz short loc_C6F1
test _key_det.hi, high INPUT_OK
jz short loc_C767
loc_C6F1:
mov al, _music_sel
mov ah, 0
cmp ax, _track_count_cur
jz loc_C77F
kajacall KAJA_SONG_FADE, 32
mov al, byte ptr _track_playing
mov [bp+@@sel], al
mov al, _music_sel
mov ah, 0
mov _track_playing, ax
call @track_unput_or_put$quci pascal, word ptr [bp+@@sel], 0
call @track_unput_or_put$quci pascal, word ptr _music_sel, 1
call music_flip
call @track_unput_or_put$quci pascal, word ptr [bp+@@sel], 0
call @track_unput_or_put$quci pascal, word ptr _music_sel, 1
mov al, _music_sel
mov ah, 0
call draw_cmt pascal, ax
mov bx, _game_sel
imul bx, 78h
mov al, _music_sel
mov ah, 0
shl ax, 2
add bx, ax
call snd_load pascal, dword ptr _MUSIC_FILES[bx], SND_LOAD_SONG
kajacall KAJA_SONG_PLAY
loc_C767:
test _key_det.hi, high INPUT_CANCEL
jnz short loc_C77F
cmp _key_det, INPUT_NONE
jnz loc_C555
xor si, si
call music_flip
jmp loc_C57F
; ---------------------------------------------------------------------------
loc_C77F:
call _input_reset_sense_held
cmp _key_det, INPUT_NONE
jz short loc_C790
call music_flip
jmp short loc_C77F
; ---------------------------------------------------------------------------
loc_C790:
call pfend
call pfstart pascal, ds, offset aKaikidan1_dat1
kajacall KAJA_SONG_FADE, 16
call screen_back_B_free
graph_showpage 0
graph_accesspage al
push 1
call palette_black_out
call _bgimage_free
call snd_load pascal, ds, offset aH_op+2, SND_LOAD_SONG
kajacall KAJA_SONG_PLAY
pop si
leave
retn
_musicroom endp
include th04/formats/scoredat_decode_both.asm
include th04/formats/scoredat_encode.asm
include th05/formats/scoredat_recreate_op.asm
include th05/formats/scoredat_load_for.asm
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_CA1B proc near
var_2 = word ptr -2
arg_0 = word ptr 4
@@y = word ptr 6
arg_4 = word ptr 8
enter 2, 0
push si
push di
mov si, [bp+arg_4]
mov di, [bp+arg_0]
mov bx, di
shl bx, 3
mov al, _hi.score.g_score[bx][SCORE_DIGITS - 1]
mov ah, 0
add ax, -gb_0_
cmp ax, 10
jl short loc_CA5B
lea ax, [si-16]
push ax
push [bp+@@y]
mov bx, di
shl bx, 3
mov al, _hi.score.g_score[bx][SCORE_DIGITS - 1]
mov ah, 0
add ax, -gb_0_
mov bx, 10
cwd
idiv bx
push ax
call super_put
loc_CA5B:
push si
push [bp+@@y]
mov bx, di
shl bx, 3
mov al, _hi.score.g_score[bx][SCORE_DIGITS - 1]
mov ah, 0
add ax, -gb_0_
mov bx, 10
cwd
idiv bx
push dx
call super_put
add si, 16
mov [bp+var_2], 6
jmp short loc_CAA4
; ---------------------------------------------------------------------------
loc_CA83:
push si
push [bp+@@y]
mov bx, di
shl bx, 3
add bx, [bp+var_2]
mov al, _hi.score.g_score[bx]
mov ah, 0
add ax, -gb_0_
push ax
call super_put
dec [bp+var_2]
add si, 16
loc_CAA4:
cmp [bp+var_2], 0
jge short loc_CA83
pop di
pop si
leave
retn 6
sub_CA1B endp
include th04/hiscore/hiscore_stage_put.asm
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_CB00 proc near
@@color = word ptr -2
arg_0 = word ptr 4
arg_2 = word ptr 6
enter 2, 0
push si
push di
cmp [bp+arg_0], 0
jnz short loc_CB3A
mov bx, [bp+arg_2]
cmp bx, 3
ja short loc_CB33
add bx, bx
jmp cs:off_CBD4[bx]
loc_CB1B:
mov si, 8
jmp short loc_CB23
; ---------------------------------------------------------------------------
loc_CB20:
mov si, 328
loc_CB23:
mov di, 88
jmp short loc_CB33
; ---------------------------------------------------------------------------
loc_CB28:
mov si, 8
jmp short loc_CB30
; ---------------------------------------------------------------------------
loc_CB2D:
mov si, 328
loc_CB30:
mov di, 224
loc_CB33:
mov [bp+@@color], 7
jmp short loc_CB74
; ---------------------------------------------------------------------------
loc_CB3A:
mov bx, [bp+arg_2]
cmp bx, 3
ja short loc_CB6F
add bx, bx
jmp cs:off_CBCC[bx]
loc_CB49:
mov si, 8
jmp short loc_CB51
; ---------------------------------------------------------------------------
loc_CB4E:
mov si, 328
loc_CB51:
mov ax, [bp+arg_0]
shl ax, 4
add ax, 96
jmp short loc_CB6D
; ---------------------------------------------------------------------------
loc_CB5C:
mov si, 8
jmp short loc_CB64
; ---------------------------------------------------------------------------
loc_CB61:
mov si, 328
loc_CB64:
mov ax, [bp+arg_0]
shl ax, 4
add ax, 232
loc_CB6D:
mov di, ax
loc_CB6F:
mov [bp+@@color], 2
loc_CB74:
lea ax, [si+2]
push ax
lea ax, [di+2]
push ax
push GAIJI_W
mov ax, [bp+arg_0]
imul ax, (SCOREDAT_NAME_LEN + 1)
add ax, offset _hi.score.g_name
push ds
push ax
push 14
call graph_gaiji_puts
push si
push di
push GAIJI_W
mov ax, [bp+arg_0]
imul ax, (SCOREDAT_NAME_LEN + 1)
add ax, offset _hi.score.g_name
push ds
push ax
push [bp+@@color]
call graph_gaiji_puts
lea ax, [si+150]
call sub_CA1B pascal, ax, di, [bp+arg_0]
lea ax, [si+286]
push ax
push di
mov bx, [bp+arg_0]
mov al, _hi.score.g_stage[bx]
mov ah, 0
push ax
call hiscore_stage_put
pop di
pop si
leave
retn 4
sub_CB00 endp
; ---------------------------------------------------------------------------
off_CBCC dw offset loc_CB49
dw offset loc_CB4E
dw offset loc_CB5C
dw offset loc_CB61
off_CBD4 dw offset loc_CB1B
dw offset loc_CB20
dw offset loc_CB28
dw offset loc_CB2D
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public _score_render
_score_render proc near
push bp
mov bp, sp
push si
push di
graph_accesspage 1
call pi_palette_apply pascal, 0
call pi_put_8 pascal, large 0, 0
graph_accesspage 0
call pi_palette_apply pascal, 0
call pi_put_8 pascal, large 0, 0
xor si, si
jmp short loc_CC27
; ---------------------------------------------------------------------------
loc_CC13:
call scoredat_load_for pascal, si
xor di, di
jmp short loc_CC21
; ---------------------------------------------------------------------------
loc_CC1B:
push si
push di
call sub_CB00
inc di
loc_CC21:
cmp di, 5
jl short loc_CC1B
inc si
loc_CC27:
cmp si, 4
jl short loc_CC13
push (496 shl 16) or 376
mov al, _rank
mov ah, 0
add ax, ax
add ax, 20
push ax
call super_put
push (560 shl 16) or 376
mov al, _rank
mov ah, 0
add ax, ax
add ax, 21
push ax
call super_put
pop di
pop si
pop bp
retn
_score_render endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public _regist_view_menu
_regist_view_menu proc near
push bp
mov bp, sp
kajacall KAJA_SONG_STOP
call snd_load pascal, ds, offset aName, SND_LOAD_SONG
kajacall KAJA_SONG_PLAY
kajacall KAJA_SONG_FADE, -128
push 1
call palette_black_out
les bx, _resident
mov al, es:[bx+resident_t.rank]
mov _rank, al
call pi_load pascal, 0, ds, offset aHi01_pi
loc_CC9F:
call _score_render
call palette_black_in pascal, 1
loc_CCA9:
call _input_reset_sense_held
call @frame_delay$qi pascal, 1
test _key_det.hi, high INPUT_OK
jnz short loc_CD17
test _key_det.lo, low INPUT_SHOT
jnz short loc_CD17
test _key_det.hi, high INPUT_CANCEL
jnz short loc_CD17
test _key_det.hi, high INPUT_OK
jnz short loc_CD17
test _key_det.lo, low INPUT_LEFT
jz short loc_CCF8
cmp _rank, RANK_EASY
jz short loc_CCF8
dec _rank
mov PaletteTone, 0
call far ptr palette_show
call _score_render
call palette_black_in pascal, 1
loc_CCF8:
test _key_det.lo, low INPUT_RIGHT
jz short loc_CCA9
cmp _rank, RANK_EXTRA
jnb short loc_CCA9
inc _rank
mov PaletteTone, 0
call far ptr palette_show
jmp short loc_CC9F
; ---------------------------------------------------------------------------
loc_CD17:
kajacall KAJA_SONG_FADE, 1
call palette_black_out pascal, 1
call pi_free pascal, 0
graph_accesspage 1
call pi_load pascal, 0, ds, offset aOp1_pi_1
call pi_palette_apply pascal, 0
call pi_put_8 pascal, large 0, 0
call pi_free pascal, 0
call graph_copy_page pascal, 0
call palette_black_in pascal, 1
loc_CD64:
call _input_reset_sense_held
call @frame_delay$qi pascal, 1
cmp _key_det, INPUT_NONE
jnz short loc_CD64
kajacall KAJA_SONG_STOP
call snd_load pascal, ds, offset aOp_1, SND_LOAD_SONG
kajacall KAJA_SONG_PLAY
pop bp
retn
_regist_view_menu endp
op_01_TEXT ends
HI_VIEW_TEXT segment byte public 'CODE' use16
_cleardata_and_regist_view_sprite procdesc near
HI_VIEW_TEXT ends
; ===========================================================================
SHARED segment word public 'CODE' use16
include th02/snd/snd.inc
extern GRAPH_PUTSA_FX:proc
extern SND_SE_PLAY:proc
extern _snd_se_update:proc
extern _bgimage_snap:proc
extern _bgimage_put:proc
extern _bgimage_free:proc
extern @POLAR$QIII:proc
extern @piano_render$qv:proc
extern @piano_setup_and_put_initial$qv:proc
extern BGIMAGE_PUT_RECT_16:proc
extern SND_LOAD:proc
extern SND_KAJA_INTERRUPT:proc
extern PI_LOAD:proc
extern PI_PUT_8:proc
extern PI_PALETTE_APPLY:proc
extern PI_FREE:proc
extern _input_reset_sense_held:proc
extern SND_DELAY_UNTIL_MEASURE:proc
extern @FRAME_DELAY$QI:proc
extern CDG_FREE_ALL:proc
SHARED ends
.data
; libs/master.lib/pal[data].asm
extern PaletteTone:word
; libs/master.lib/sin8[data].asm
extern _SinTable8:word:256
extern _CosTable8:word:256
; th04/hardware/grppsafx[data].asm
extern _graph_putsa_fx_func:word
; th05/hardware/vram_planes[data].asm
extern _VRAM_PLANE_B:dword
include th04/zunsoft[data].asm
extern _MUSIC_FILES:dword
extern _game_sel:word
extern _TRACK_COUNT:word:5
extern _polygons_initialized:byte
aH_op = ($ - 530)
include th05/op/music_cmt_load[data].asm
aMusic_pi db 'music.pi',0
aMusic_dat db 'music.dat',0
aKaikidan1_dat1 db '<27><><EFBFBD>Y<EFBFBD>k1.dat',0
db 0
include th05/formats/scoredat_load_for[data].asm
aName db 'name',0
aHi01_pi db 'hi01.pi',0
aOp1_pi_1 db 'op1.pi',0
aOp_1 db 'op',0
.data?
extern _resident:dword
; libs/master.lib/pal[bss].asm
extern Palettes:byte:48
; libs/master.lib/vs[bss].asm
extern vsync_Count1:word
; th02/hardware/input_sense[bss].asm
extern _key_det:word
include th04/zunsoft[bss].asm
db 104 dup(?)
include th02/op/music[bss].asm
byte_13E96 db ?
db ?
include th03/op/cmt_back[bss].asm
include th02/op/music_cmt[bss].asm
public _track_id_at_top, _track_playing, _track_count_cur
_track_id_at_top dw ?
_track_playing dw ?
_track_count_cur dw ?
extern _hi:scoredat_section_t
extern _hi2:scoredat_section_t
extern _rank:byte
end