; ; +-------------------------------------------------------------------------+ ; | This file has been generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2009 by Hex-Rays, | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : 661F4F8FFAF1F3274F503D154133DEF0 ; File Name : th03/OP.EXE ; Format : MS-DOS executable (EXE) ; Base Address: 0h Range: 0h-FD80h Loaded length: E97Ah ; Entry Point : 0:0 ; OS type : MS DOS ; Application type: Executable 16bit .286 ; Force the .model directive to create 16-bit default segments... .model large .386 ; ... then switch to what we actually need. ; And yes, we can't move this to an include file for some reason. include ReC98.inc include th03/th03.inc include th02/music/music.inc extern SCOPY@:proc extern __mbcjmstojis:proc extern __mbctype:byte extern __ctype:byte extern _execl:proc extern _getch:proc extern _memcpy:proc ; =========================================================================== ; Segment type: Pure code _TEXT segment word public 'CODE' use16 assume cs:_TEXT assume es:nothing, ds:_DATA, fs:nothing, gs:nothing include libs/master.lib/bfnt_entry_pat.asm include libs/master.lib/bfnt_extend_header_skip.asm include libs/master.lib/bfnt_header_read.asm include libs/master.lib/bfnt_header_analysis.asm include libs/master.lib/bcloser.asm include libs/master.lib/bfill.asm include libs/master.lib/bfnt_palette_set.asm include libs/master.lib/bgetc.asm include libs/master.lib/palette_black_out.asm include libs/master.lib/bopenr.asm include libs/master.lib/bread.asm include libs/master.lib/bseek.asm include libs/master.lib/bseek_.asm include libs/master.lib/dos_axdx.asm include libs/master.lib/dos_keyclear.asm include libs/master.lib/dos_puts2.asm include libs/master.lib/dos_setvect.asm include libs/master.lib/egc.asm include libs/master.lib/egc_shift_left_all.asm include libs/master.lib/file_append.asm include libs/master.lib/file_close.asm include libs/master.lib/file_create.asm include libs/master.lib/file_exist.asm include libs/master.lib/file_read.asm include libs/master.lib/file_ropen.asm include libs/master.lib/file_seek.asm include libs/master.lib/file_write.asm include libs/master.lib/dos_close.asm include libs/master.lib/dos_ropen.asm include libs/master.lib/grcg_boxfill.asm include libs/master.lib/grcg_byteboxfill_x.asm include libs/master.lib/grcg_polygon_c.asm include libs/master.lib/grcg_pset.asm include libs/master.lib/grcg_setcolor.asm include libs/master.lib/gaiji_backup.asm include libs/master.lib/gaiji_entry_bfnt.asm include libs/master.lib/gaiji_putsa.asm include libs/master.lib/gaiji_read.asm include libs/master.lib/gaiji_write.asm include libs/master.lib/graph_400line.asm include libs/master.lib/graph_clear.asm include libs/master.lib/graph_copy_page.asm include libs/master.lib/graph_extmode.asm include libs/master.lib/graph_gaiji_puts.asm include libs/master.lib/graph_pi_free.asm include libs/master.lib/graph_pi_load_pack.asm include libs/master.lib/graph_pack_put_8.asm include libs/master.lib/graph_show.asm include libs/master.lib/graph_start.asm include libs/master.lib/js_end.asm include libs/master.lib/keybeep.asm include libs/master.lib/make_linework.asm include libs/master.lib/palette_init.asm include libs/master.lib/palette_show.asm include libs/master.lib/pfclose.asm include libs/master.lib/pfgetc.asm include libs/master.lib/pfread.asm include libs/master.lib/pfrewind.asm include libs/master.lib/pfseek.asm include libs/master.lib/random.asm include libs/master.lib/palette_entry_rgb.asm include libs/master.lib/rottbl.asm include libs/master.lib/smem_release.asm include libs/master.lib/smem_wget.asm include libs/master.lib/soundio.asm include libs/master.lib/text_clear.asm include libs/master.lib/txesc.asm include libs/master.lib/text_putsa.asm include libs/master.lib/vsync.asm include libs/master.lib/vsync_wait.asm include libs/master.lib/palette_white_in.asm include libs/master.lib/hmem_lallocate.asm include libs/master.lib/mem_assign_dos.asm include libs/master.lib/mem_assign.asm include libs/master.lib/memheap.asm include libs/master.lib/mem_unassign.asm include libs/master.lib/super_free.asm include libs/master.lib/super_entry_pat.asm include libs/master.lib/super_entry_at.asm include libs/master.lib/super_entry_bfnt.asm include libs/master.lib/super_cancel_pat.asm include libs/master.lib/super_put.asm include libs/master.lib/respal_exist.asm include libs/master.lib/respal_free.asm include libs/master.lib/pfint21.asm db 0 include libs/master.lib/js_start.asm include libs/master.lib/js_sense.asm db 0 include libs/master.lib/draw_trapezoid.asm include th03/formats/pfopen.asm include libs/master.lib/pf_str_ieq.asm _TEXT ends ; =========================================================================== ; Segment type: Pure code op_01_TEXT segment byte public 'CODE' use16 assume cs:op_01_TEXT ;org 8 assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing include th03/formats/cfg.asm ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public START_GAME start_game proc near var_4 = word ptr -4 var_2 = word ptr -2 enter 4, 0 push si les bx, _resident mov es:[bx+resident_t.demo_num], 0 mov es:[bx+resident_t.pid_winner], 0 mov es:[bx+resident_t.story_stage], 0 mov es:[bx+resident_t.RESIDENT_is_cpu][0], 0 mov es:[bx+resident_t.RESIDENT_is_cpu][1], 1 mov es:[bx+resident_t.game_mode], GM_STORY mov es:[bx+resident_t.story_lives], CREDIT_LIVES mov es:[bx+resident_t.show_score_menu], 0 mov es:[bx+resident_t.RESIDENT_playchar_paletted][1], -1 call sub_BD9A or al, al jz short loc_9A59 mov al, 1 jmp loc_9B9A ; --------------------------------------------------------------------------- loc_9A59: les bx, _resident mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][0] mov ah, 0 dec ax cwd sub ax, dx mov bx, ax sar bx, 1 mov al, [bx+0A0h] mov ah, 0 mov [bp+var_4], ax mov bx, word ptr _resident mov eax, es:[bx+resident_t.rand] mov random_seed, eax xor si, si jmp short loc_9ADB ; --------------------------------------------------------------------------- loc_9A85: call IRand mov bx, 7 cwd idiv bx mov [bp+var_2], dx mov bx, [bp+var_2] cmp byte ptr [bx+99h], 0 jnz short loc_9A85 mov ax, [bp+var_4] cmp ax, [bp+var_2] jz short loc_9A85 mov byte ptr [bx+99h], 1 mov ax, [bp+var_2] add ax, ax inc ax mov [bp+var_2], ax les bx, _resident add bx, si mov al, byte ptr [bp+var_2] mov es:[bx+resident_t.story_opponents], al mov bx, word ptr _resident mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][0] mov ah, 0 cmp ax, [bp+var_2] jnz short loc_9ADA add bx, si mov al, byte ptr [bp+var_2] inc al mov es:[bx+resident_t.story_opponents], al loc_9ADA: inc si loc_9ADB: cmp si, 6 jl short loc_9A85 les bx, _resident mov al, es:[bx+resident_t.story_opponents] mov es:[bx+resident_t.RESIDENT_playchar_paletted][1], al mov al, byte ptr [bp+var_4] add al, al inc al mov es:[bx+resident_t.story_opponents][6], al mov es:[bx+resident_t.story_opponents][7], (1 + (PLAYCHAR_CHIYURI * 2)) cmp es:[bx+resident_t.RESIDENT_playchar_paletted][0], (1 + (PLAYCHAR_CHIYURI * 2)) jnz short loc_9B07 inc es:[bx+resident_t.story_opponents][7] loc_9B07: les bx, _resident mov es:[bx+resident_t.story_opponents][8], (1 + (PLAYCHAR_YUMEMI * 2)) cmp es:[bx+resident_t.RESIDENT_playchar_paletted][0], (1 + (PLAYCHAR_YUMEMI * 2)) jnz short loc_9B1B inc es:[bx+resident_t.story_opponents][8] loc_9B1B: xor si, si jmp short loc_9B39 ; --------------------------------------------------------------------------- loc_9B1F: les bx, _resident add bx, si mov al, es:[bx+resident_t.story_opponents] mov ah, 0 dec ax cwd sub ax, dx sar ax, 1 cmp ax, 9 jge loc_9A59 inc si loc_9B39: cmp si, STAGE_COUNT jl short loc_9B1F xor si, si jmp short loc_9B4E ; --------------------------------------------------------------------------- loc_9B42: les bx, _resident add bx, si mov es:[bx+resident_t.score_last], 0 inc si loc_9B4E: cmp si, (PLAYER_COUNT * SCORE_DIGITS) jl short loc_9B42 les bx, _resident mov es:[bx+resident_t.rem_credits], 3 mov es:[bx+resident_t.op_skip_animation], 0 mov al, es:[bx+resident_t.rank] mov ah, 0 imul ax, 25 add al, 70 mov es:[bx+resident_t.skill], al call cfg_save call gaiji_restore kajacall KAJA_SONG_STOP call game_exit pushd 0 push ds push offset path ; "mainl" push ds push offset path ; "mainl" call _execl add sp, 0Ch mov al, 0 loc_9B9A: pop si leave retn start_game endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_9B9D proc near arg_0 = word ptr 4 arg_2 = word ptr 6 push bp mov bp, sp push si push di mov di, [bp+arg_2] mov si, [bp+arg_0] or di, di jnz short loc_9BB8 push 1B0012h push ds push offset gp1P_VS_CPU jmp short loc_9BD3 ; --------------------------------------------------------------------------- loc_9BB8: cmp di, 1 jnz short loc_9BC9 push 1B0013h push ds push offset gp1P_VS_2P jmp short loc_9BD3 ; --------------------------------------------------------------------------- loc_9BC9: push 1B0014h push ds push offset gpCPU_VS_CPU loc_9BD3: push si call gaiji_putsa pop di pop si pop bp retn 4 sub_9B9D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public START_VS start_vs proc near var_2 = word ptr -2 enter 2, 0 push si xor si, si les bx, _resident cmp es:[bx+resident_t.game_mode], GM_VS jnb loc_9C8B call text_clear call sub_B0AF mov [bp+var_2], 0 pushd 0E1h call sub_9B9D push 10001h call sub_9B9D push 20001h call sub_9B9D loc_9C1B: call input_mode_interface or si, si jnz short loc_9C7E test _input_sp.lo, low INPUT_UP jz short loc_9C4A push [bp+var_2] push 1 call sub_9B9D dec [bp+var_2] cmp [bp+var_2], 0 jge short loc_9C41 mov [bp+var_2], 2 loc_9C41: push [bp+var_2] push 0E1h call sub_9B9D loc_9C4A: test _input_sp.lo, low INPUT_DOWN jz short loc_9C70 push [bp+var_2] push 1 call sub_9B9D inc [bp+var_2] cmp [bp+var_2], 2 jle short loc_9C67 mov [bp+var_2], 0 loc_9C67: push [bp+var_2] push 0E1h call sub_9B9D loc_9C70: test _input_sp.lo, low INPUT_SHOT jnz short loc_9C9B test _input_sp.hi, high INPUT_OK jnz short loc_9C9B loc_9C7E: mov si, _input_sp push 1 call frame_delay jmp short loc_9C1B ; --------------------------------------------------------------------------- loc_9C8B: les bx, _resident mov al, es:[bx+resident_t.game_mode] mov ah, 0 add ax, -GM_VS mov [bp+var_2], ax loc_9C9B: cmp [bp+var_2], VS_CPU_CPU jnz short loc_9CA5 mov al, 1 jmp short loc_9CA7 ; --------------------------------------------------------------------------- loc_9CA5: mov al, 0 loc_9CA7: les bx, _resident mov es:[bx+resident_t.RESIDENT_is_cpu][0], al cmp [bp+var_2], VS_1P_2P jz short loc_9CB9 mov al, 1 jmp short loc_9CBB ; --------------------------------------------------------------------------- loc_9CB9: mov al, 0 loc_9CBB: les bx, _resident mov es:[bx+resident_t.RESIDENT_is_cpu][1], al mov es:[bx+resident_t.demo_num], 0 mov es:[bx+resident_t.pid_winner], 0 mov es:[bx+resident_t.story_stage], 0 mov al, byte ptr [bp+var_2] add al, GM_VS mov es:[bx+resident_t.game_mode], al mov es:[bx+resident_t.show_score_menu], 0 cmp [bp+var_2], 1 jnz short loc_9CEF call sub_BA88 or al, al jz short loc_9D03 jmp short loc_9CF6 ; --------------------------------------------------------------------------- loc_9CEF: call sub_BC1F or al, al jz short loc_9D03 loc_9CF6: les bx, _resident mov es:[bx+resident_t.game_mode], GM_NONE mov al, 1 jmp short loc_9D49 ; --------------------------------------------------------------------------- loc_9D03: mov [bp+var_2], 0 jmp short loc_9D19 ; --------------------------------------------------------------------------- loc_9D0A: les bx, _resident add bx, [bp+var_2] mov es:[bx+resident_t.score_last], 0 inc [bp+var_2] loc_9D19: cmp [bp+var_2], (PLAYER_COUNT * SCORE_DIGITS) jl short loc_9D0A call cfg_save call gaiji_restore kajacall KAJA_SONG_STOP call game_exit pushd 0 push ds push offset path ; "mainl" push ds push offset path ; "mainl" call _execl add sp, 0Ch mov al, 0 loc_9D49: pop si leave retn start_vs endp include th03/start.asm ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_9E16 proc near push bp mov bp, sp push si mov _input_sp, INPUT_NONE xor si, si jmp short loc_9E43 ; --------------------------------------------------------------------------- loc_9E24: call input_mode_interface les bx, _resident inc es:[bx+resident_t.rand] inc si cmp si, 208h jle short loc_9E3C call start_demo loc_9E3C: push 1 call frame_delay loc_9E43: cmp _input_sp, INPUT_NONE jz short loc_9E24 call super_put pascal, large (160 shl 16) or 256, 0 mov si, 176 jmp short loc_9E76 ; --------------------------------------------------------------------------- loc_9E5C: push si call sub_B10A call super_put pascal, si, large (256 shl 16) or 2 call frame_delay pascal, 1 add si, 8 loc_9E76: cmp si, 288 jl short loc_9E5C pop si pop bp retn sub_9E16 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public SCORE_MENU score_menu proc near push bp mov bp, sp push si les bx, _resident mov es:[bx+resident_t.story_stage], STAGE_NONE mov es:[bx+resident_t.show_score_menu], 1 mov es:[bx+resident_t.game_mode], GM_NONE xor si, si jmp short loc_9EA6 ; --------------------------------------------------------------------------- loc_9E9A: les bx, _resident add bx, si mov es:[bx+resident_t.score_last], 0 inc si loc_9EA6: cmp si, (PLAYER_COUNT * SCORE_DIGITS) jl short loc_9E9A call cfg_save call gaiji_restore kajacall KAJA_SONG_STOP call super_free call game_exit pushd 0 push ds push offset path ; "mainl" push ds push offset path ; "mainl" call _execl add sp, 0Ch mov al, 0 pop si pop bp retn score_menu endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public MAIN_PUT main_put proc near arg_0 = word ptr 4 arg_2 = word ptr 6 push bp mov bp, sp push si push di mov si, [bp+arg_2] mov di, [bp+arg_0] or si, si jnz short loc_9EF8 push (25 shl 16) + 17 push ds push offset gpSTART jmp short loc_9F4B ; --------------------------------------------------------------------------- loc_9EF8: cmp si, 1 jnz short loc_9F09 push (23 shl 16) + 18 push ds push offset gpVS_START jmp short loc_9F4B ; --------------------------------------------------------------------------- loc_9F09: cmp si, 2 jnz short loc_9F1A push (22 shl 16) + 19 push ds push offset gpMUSIC_ROOM jmp short loc_9F4B ; --------------------------------------------------------------------------- loc_9F1A: cmp si, 3 jnz short loc_9F2B push (24 shl 16) + 20 push ds push offset gpHISCORE jmp short loc_9F4B ; --------------------------------------------------------------------------- loc_9F2B: cmp si, 4 jnz short loc_9F3C push (25 shl 16) + 21 push ds push offset gpOPTION jmp short loc_9F4B ; --------------------------------------------------------------------------- loc_9F3C: cmp si, 5 jnz short loc_9F51 push (26 shl 16) + 22 push ds push offset gpQUIT loc_9F4B: push di call gaiji_putsa loc_9F51: pop di pop si pop bp retn 4 main_put endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public OPTION_PUT option_put proc near arg_0 = word ptr 4 arg_2 = word ptr 6 push bp mov bp, sp push si push di mov di, [bp+arg_2] mov si, [bp+arg_0] or di, di jnz short loc_9FD6 call gaiji_putsa pascal, (25 shl 16) + 17, ds offset gpRANK, si call text_putsa pascal, (37 shl 16) + 17, ds, offset asc_D965, TX_WHITE les bx, _resident mov al, es:[bx+resident_t.rank] mov ah, 0 mov bx, ax cmp bx, RANK_LUNATIC ja loc_A092 add bx, bx jmp cs:off_A099[bx] @@easy: push (38 shl 16) + 17 push ds push offset gpEASY jmp loc_A08C ; --------------------------------------------------------------------------- @@normal: push (37 shl 16) + 17 push ds push offset gpNORMAL jmp loc_A08C ; --------------------------------------------------------------------------- @@hard: push (38 shl 16) + 17 push ds push offset gpHARD jmp loc_A08C ; --------------------------------------------------------------------------- @@lunatic: push (37 shl 16) + 17 push ds push offset gpLUNATIC jmp loc_A08C ; --------------------------------------------------------------------------- loc_9FD6: cmp di, 1 jnz short loc_A02A call gaiji_putsa pascal, (25 shl 16) + 19, ds, offset gpMUSIC, si les bx, _resident mov al, es:[bx+resident_t.bgm_mode] mov ah, 0 or ax, ax jz short loc_A006 cmp ax, SND_BGM_FM jz short @@fm cmp ax, SND_BGM_MIDI jz short @@midi jmp loc_A092 ; --------------------------------------------------------------------------- loc_A006: push (35 shl 16) + 19 push ds push offset gpOFF jmp short loc_A08C ; --------------------------------------------------------------------------- @@fm: push (35 shl 16) + 19 push ds push offset gpFM_86 jmp short loc_A08C ; --------------------------------------------------------------------------- @@midi: push (35 shl 16) + 19 push ds push offset gpMIDI_SC88 jmp short loc_A08C ; --------------------------------------------------------------------------- loc_A02A: cmp di, 2 jnz short loc_A07D call gaiji_putsa pascal, (23 shl 16) + 21, ds, offset gpKEYCONFIG, si les bx, _resident mov al, es:[bx+resident_t.key_mode] mov ah, 0 or ax, ax jz short @@key_vs_key cmp ax, KM_JOY_KEY jz short @@joy_vs_key cmp ax, KM_KEY_JOY jz short @@key_vs_joy jmp short loc_A092 ; --------------------------------------------------------------------------- @@key_vs_key: push (37 shl 16) + 21 push ds push offset gpKEY_VS_KEY jmp short loc_A08C ; --------------------------------------------------------------------------- @@joy_vs_key: push (37 shl 16) + 21 push ds push offset gpJOY_VS_KEY jmp short loc_A08C ; --------------------------------------------------------------------------- @@key_vs_joy: push (37 shl 16) + 21 push ds push offset gpKEY_VS_JOY jmp short loc_A08C ; --------------------------------------------------------------------------- loc_A07D: cmp di, 3 jnz short loc_A092 push (32 shl 16) + 22 push ds push offset gpQUIT loc_A08C: push si call gaiji_putsa loc_A092: pop di pop si pop bp retn 4 ; --------------------------------------------------------------------------- db 0 off_A099 dw offset @@easy dw offset @@normal dw offset @@hard dw offset @@lunatic option_put endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public MENU_SEL_MOVE menu_sel_move proc near arg_0 = byte ptr 4 arg_2 = byte ptr 6 push bp mov bp, sp mov al, _menu_sel cbw push ax push 1 call _putfunc mov al, [bp+arg_0] add _menu_sel, al cmp _menu_sel, 0 jge short loc_A0C3 mov al, [bp+arg_2] mov _menu_sel, al loc_A0C3: mov al, _menu_sel cmp al, [bp+arg_2] jle short loc_A0D0 mov _menu_sel, 0 loc_A0D0: mov al, _menu_sel cbw push ax push 0E1h call _putfunc pop bp retn 4 menu_sel_move endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public MAIN_UPDATE_AND_RENDER main_update_and_render proc near push bp mov bp, sp push si cmp _main_menu_initialized, 0 jnz short @@main_initialized call text_clear cmp byte_D953, 0 jnz short loc_A0FA call sub_B0DB loc_A0FA: mov byte_D953, 0 mov _main_input_allowed, 0 xor si, si jmp short loc_A11E ; --------------------------------------------------------------------------- loc_A108: push si mov al, _menu_sel cbw cmp ax, si jnz short loc_A116 mov ax, 0E1h jmp short loc_A119 ; --------------------------------------------------------------------------- loc_A116: mov ax, 1 loc_A119: push ax call main_put inc si loc_A11E: cmp si, 6 jl short loc_A108 mov _putfunc, offset main_put mov _main_menu_initialized, 1 mov _main_input_allowed, 0 @@main_initialized: cmp _input_sp, INPUT_NONE jnz short loc_A13F mov _main_input_allowed, 1 loc_A13F: cmp _main_input_allowed, 0 jz @@no_main_input_allowed test _input_sp.lo, low INPUT_UP jz short loc_A156 call menu_sel_move pascal, 5, -1 loc_A156: test _input_sp.lo, low INPUT_DOWN jz short loc_A164 call menu_sel_move pascal, 5, 1 loc_A164: test _input_sp.hi, high INPUT_OK jnz short loc_A172 test _input_sp.lo, low INPUT_SHOT jz short loc_A1DB loc_A172: mov al, _menu_sel cbw mov bx, ax cmp bx, 5 ja short loc_A1DB add bx, bx jmp cs:off_A1F7[bx] menu_sel_start: call start_game jmp short loc_A19A ; --------------------------------------------------------------------------- menu_sel_vs_start: les bx, _resident mov es:[bx+resident_t.RESIDENT_playchar_paletted][0], (1 + (PLAYCHAR_REIMU * 2)) mov es:[bx+resident_t.RESIDENT_playchar_paletted][1], (1 + (PLAYCHAR_REIMU * 2)) call start_vs loc_A19A: call sub_B008 call sub_9E16 call sub_B3C3 mov _main_menu_initialized, 0 mov _main_input_allowed, 0 mov byte_D953, 1 jmp short @@no_main_input_allowed ; --------------------------------------------------------------------------- menu_sel_musicroom: nopcall musicroom jmp short loc_A19A ; --------------------------------------------------------------------------- menu_sel_hiscore: call score_menu jmp short loc_A1DB ; --------------------------------------------------------------------------- menu_sel_option: mov _main_menu_initialized, 0 mov _in_option, 1 mov _menu_sel, 0 jmp short loc_A1DB ; --------------------------------------------------------------------------- menu_sel_quit: mov _main_menu_initialized, 0 mov _quit, 1 loc_A1DB: test _input_sp.hi, high INPUT_CANCEL jz short loc_A1E7 mov _quit, 1 loc_A1E7: cmp _input_sp, INPUT_NONE jz short @@no_main_input_allowed mov _main_input_allowed, 0 @@no_main_input_allowed: pop si pop bp retn main_update_and_render endp ; --------------------------------------------------------------------------- db 0 off_A1F7 dw offset menu_sel_start dw offset menu_sel_vs_start dw offset menu_sel_musicroom dw offset menu_sel_hiscore dw offset menu_sel_option dw offset menu_sel_quit ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public OPTION_UPDATE_AND_RENDER option_update_and_render proc near push bp mov bp, sp push si cmp _option_initialized, 0 jnz short loc_A24A call text_clear call sub_B0AF mov _option_input_allowed, 0 xor si, si jmp short loc_A235 ; --------------------------------------------------------------------------- loc_A21F: push si mov al, _menu_sel cbw cmp ax, si jnz short loc_A22D mov ax, TX_WHITE jmp short loc_A230 ; --------------------------------------------------------------------------- loc_A22D: mov ax, TX_BLACK loc_A230: push ax call option_put inc si loc_A235: cmp si, 4 jl short loc_A21F mov _putfunc, offset option_put mov _option_initialized, 1 mov _option_input_allowed, 0 loc_A24A: cmp _input_sp, INPUT_NONE jnz short loc_A256 mov _option_input_allowed, 1 loc_A256: cmp _option_input_allowed, 0 jz loc_A414 test _input_sp.lo, low INPUT_UP jz short loc_A26D call menu_sel_move pascal, 3, -1 loc_A26D: test _input_sp.lo, low INPUT_DOWN jz short loc_A27B call menu_sel_move pascal, 3, 1 loc_A27B: test _input_sp.lo, low INPUT_RIGHT jz loc_A31D mov al, _menu_sel cbw or ax, ax jz short loc_A298 cmp ax, 1 jz short loc_A2AE cmp ax, 2 jz short loc_A2FE jmp short loc_A312 ; --------------------------------------------------------------------------- loc_A298: les bx, _resident inc es:[bx+resident_t.rank] cmp es:[bx+resident_t.rank], RANK_LUNATIC jbe short loc_A312 mov es:[bx+resident_t.rank], RANK_EASY jmp short loc_A312 ; --------------------------------------------------------------------------- loc_A2AE: cmp _snd_sel_disabled, 0 jnz short loc_A312 les bx, _resident cmp es:[bx+resident_t.bgm_mode], SND_BGM_OFF jnz short loc_A2DB mov es:[bx+resident_t.bgm_mode], SND_BGM_FM kajacall KAJA_SONG_STOP call snd_determine_mode kajacall KAJA_SONG_PLAY jmp short loc_A2F1 ; --------------------------------------------------------------------------- loc_A2DB: les bx, _resident mov es:[bx+resident_t.bgm_mode], SND_BGM_OFF kajacall KAJA_SONG_STOP mov _snd_active, 0 loc_A2F1: mov al, _menu_sel cbw push ax push 0E1h call option_put jmp short loc_A312 ; --------------------------------------------------------------------------- loc_A2FE: les bx, _resident inc es:[bx+resident_t.key_mode] cmp es:[bx+resident_t.key_mode], KM_KEY_JOY jbe short loc_A312 mov es:[bx+resident_t.key_mode], KM_KEY_KEY loc_A312: mov al, _menu_sel cbw push ax push 0E1h call option_put loc_A31D: test _input_sp.lo, low INPUT_LEFT jz loc_A3CC mov al, _menu_sel cbw or ax, ax jz short loc_A33B cmp ax, 1 jz short loc_A357 cmp ax, 2 jz short loc_A3A7 jmp loc_A3C1 ; --------------------------------------------------------------------------- loc_A33B: les bx, _resident cmp es:[bx+resident_t.rank], RANK_EASY jnz short loc_A34D mov es:[bx+resident_t.rank], RANK_LUNATIC jmp short loc_A3C1 ; --------------------------------------------------------------------------- loc_A34D: les bx, _resident dec es:[bx+resident_t.rank] jmp short loc_A3C1 ; --------------------------------------------------------------------------- loc_A357: cmp _snd_sel_disabled, 0 jnz short loc_A3C1 les bx, _resident cmp es:[bx+resident_t.bgm_mode], SND_BGM_OFF jnz short loc_A384 mov es:[bx+resident_t.bgm_mode], SND_BGM_FM kajacall KAJA_SONG_STOP call snd_determine_mode kajacall KAJA_SONG_PLAY jmp short loc_A39A ; --------------------------------------------------------------------------- loc_A384: les bx, _resident mov es:[bx+resident_t.bgm_mode], SND_BGM_OFF kajacall KAJA_SONG_STOP mov _snd_active, 0 loc_A39A: mov al, _menu_sel cbw push ax push 0E1h call option_put jmp short loc_A3C1 ; --------------------------------------------------------------------------- loc_A3A7: les bx, _resident cmp es:[bx+resident_t.key_mode], KM_KEY_KEY jnz short loc_A3B9 mov es:[bx+resident_t.key_mode], KM_KEY_JOY jmp short loc_A3C1 ; --------------------------------------------------------------------------- loc_A3B9: les bx, _resident dec es:[bx+resident_t.key_mode] loc_A3C1: mov al, _menu_sel cbw push ax push 0E1h call option_put loc_A3CC: test _input_sp.hi, high INPUT_OK jnz short loc_A3DA test _input_sp.lo, low INPUT_SHOT jz short loc_A3F2 loc_A3DA: mov al, _menu_sel cbw cmp ax, 3 jnz short loc_A3F2 mov _option_initialized, 0 mov _menu_sel, 4 mov _in_option, 0 loc_A3F2: test _input_sp.hi, high INPUT_CANCEL jz short loc_A408 mov _option_initialized, 0 mov _menu_sel, 4 mov _in_option, 0 loc_A408: cmp _input_sp, INPUT_NONE jz short loc_A414 mov _option_input_allowed, 0 loc_A414: pop si pop bp retn option_update_and_render endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __cdecl main(int argc, const char **argv, const char **envp) public _main _main proc far _argc = word ptr 6 _argv = dword ptr 8 _envp = dword ptr 0Ch push bp mov bp, sp call graph_400line call text_clear call respal_create cmp graph_VramZoom, 0 jz short loc_A452 push ds push offset aVfvcvbgngngbgn call dos_puts2 push ds push offset aUmx call dos_puts2 push ds push offset aViosrfvVVkvqbd loc_A446: call dos_puts2 call _getch pop bp retf ; --------------------------------------------------------------------------- loc_A452: call _game_init_op c, offset aCOul, ds or ax, ax jz short loc_A468 push ds push offset aGbgvgkxsslvVBb ; "\nメモリ不足です。メモリ空きを増やしてか"... jmp short loc_A446 ; --------------------------------------------------------------------------- loc_A468: call gaiji_backup push ds push offset aMikoft_bft ; "MIKOFT.bft" call gaiji_entry_bfnt call cfg_load les bx, _resident cmp es:[bx+resident_t.game_mode], GM_VS jb short loc_A497 cmp es:[bx+resident_t.demo_num], 0 jnz short loc_A497 call sub_B38D call sub_B3EF call sub_B3C3 call start_vs loc_A497: les bx, _resident cmp es:[bx+resident_t.op_skip_animation], 0 jnz short loc_A4B0 call sub_ADE2 les bx, _resident mov es:[bx+resident_t.op_skip_animation], 1 jmp short loc_A4BC ; --------------------------------------------------------------------------- loc_A4B0: les bx, _resident mov es:[bx+resident_t.op_skip_animation], 0 call sub_B008 loc_A4BC: call sub_9E16 mov _in_option, 0 mov _input_sp, INPUT_NONE call main_update_and_render call sub_B3C3 jmp short loc_A4FE ; --------------------------------------------------------------------------- loc_A4D2: call input_mode_interface mov al, _in_option cbw or ax, ax jz short @@not_in_option cmp ax, 1 jz short @@in_option jmp short loc_A4EE ; --------------------------------------------------------------------------- @@not_in_option: call main_update_and_render jmp short loc_A4EE ; --------------------------------------------------------------------------- @@in_option: call option_update_and_render loc_A4EE: les bx, _resident inc es:[bx+resident_t.rand] push 1 call frame_delay loc_A4FE: cmp _quit, 0 jz short loc_A4D2 call cfg_save_exit call gaiji_restore call text_clear call game_exit_to_dos call respal_free pop bp retf _main endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public DRAW_TRACK draw_track proc near var_1 = byte ptr -1 @@color = byte ptr 4 @@sel = byte ptr 6 enter 2, 0 mov al, 1 sub al, _music_page mov [bp+var_1], al graph_accesspage al push 16 mov al, [bp+@@sel] mov ah, 0 shl ax, 4 add ax, 40 push ax mov al, [bp+@@color] mov ah, 0 or ax, 20h push ax mov al, [bp+@@sel] mov ah, 0 shl ax, 2 mov bx, ax pushd _MUSIC_TITLES[bx] call graph_putsa_fx graph_accesspage _music_page push 16 mov al, [bp+@@sel] mov ah, 0 shl ax, 4 add ax, 40 push ax mov al, [bp+@@color] mov ah, 0 or ax, 20h push ax mov al, [bp+@@sel] mov ah, 0 shl ax, 2 mov bx, ax pushd _MUSIC_TITLES[bx] call graph_putsa_fx leave retn 4 draw_track endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public DRAW_TRACKS draw_tracks proc near @@sel = byte ptr 4 push bp mov bp, sp push si xor si, si jmp short loc_A5AD ; --------------------------------------------------------------------------- loc_A598: push si mov al, [bp+@@sel] mov ah, 0 cmp ax, si jnz short loc_A5A6 mov al, 0Fh jmp short loc_A5A8 ; --------------------------------------------------------------------------- loc_A5A6: mov al, 3 loc_A5A8: push ax call draw_track inc si loc_A5AD: cmp si, 15h jl short loc_A598 pop si pop bp retn 2 draw_tracks endp include th02/music/music.asm include th03/music/cmt_back_snap.asm include th02/music/music_cmt_load.asm include th03/music/cmt_back_free_put.asm include th03/music/draw_cmt.asm ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public MUSICROOM musicroom proc far push bp mov bp, sp push si xor si, si jmp short loc_AC15 ; --------------------------------------------------------------------------- loc_AC0E: call cdg_free pascal, si inc si loc_AC15: cmp si, CDG_SLOT_COUNT jl short loc_AC0E call super_free 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_slot_load pascal, 0, ds, offset aOp3_pi call pi_slot_palette_apply pascal, 0 call pi_slot_put pascal, large 0, 0 freePISlotLarge 0 mov al, music_track_playing mov _music_sel, al call draw_tracks pascal, word ptr _music_sel call graph_copy_page pascal, 0 graph_accesspage 1 graph_showpage 0 call screen_back_B_snap call cmt_back_snap graph_accesspage 1 mov al, music_track_playing mov ah, 0 call draw_cmt pascal, ax graph_accesspage 0 mov al, music_track_playing mov ah, 0 call draw_cmt pascal, ax mov PaletteTone, 100 call far ptr palette_show loc_ACC2: call input_mode_interface cmp _input_sp, INPUT_NONE jz short loc_ACD3 call music_flip jmp short loc_ACC2 ; --------------------------------------------------------------------------- loc_ACD3: call input_mode_interface test _input_sp.lo, low INPUT_UP jz short loc_AD0E call draw_track pascal, word ptr _music_sel, 3 cmp _music_sel, 0 jbe short loc_ACF5 dec _music_sel jmp short loc_ACFA ; --------------------------------------------------------------------------- loc_ACF5: mov _music_sel, 14h loc_ACFA: cmp _music_sel, 13h jnz short loc_AD05 dec _music_sel loc_AD05: call draw_track pascal, word ptr _music_sel, 15 loc_AD0E: test _input_sp.lo, low INPUT_DOWN jz short loc_AD44 call draw_track pascal, word ptr _music_sel, 3 cmp _music_sel, 14h jnb short loc_AD2B inc _music_sel jmp short loc_AD30 ; --------------------------------------------------------------------------- loc_AD2B: mov _music_sel, 0 loc_AD30: cmp _music_sel, 13h jnz short loc_AD3B inc _music_sel loc_AD3B: call draw_track pascal, word ptr _music_sel, 15 loc_AD44: test _input_sp.lo, low INPUT_SHOT jnz short loc_AD52 test _input_sp.hi, high INPUT_OK jz short loc_AD9A loc_AD52: cmp _music_sel, 14h jz short loc_ADB0 kajacall KAJA_SONG_STOP push SND_LOAD_SONG mov al, _music_sel mov ah, 0 shl ax, 2 mov bx, ax pushd _MUSIC_FILES[bx] call snd_load add sp, 6 kajacall KAJA_SONG_PLAY mov al, _music_sel mov music_track_playing, al mov ah, 0 call draw_cmt pascal, ax call music_flip mov al, _music_sel mov ah, 0 call draw_cmt pascal, ax loc_AD9A: test _input_sp.hi, high INPUT_CANCEL jnz short loc_ADB0 cmp _input_sp, INPUT_NONE jnz loc_ACC2 call music_flip jmp loc_ACD3 ; --------------------------------------------------------------------------- loc_ADB0: call input_mode_interface cmp _input_sp, INPUT_NONE jz short loc_ADC1 call music_flip jmp short loc_ADB0 ; --------------------------------------------------------------------------- loc_ADC1: call screen_back_B_free call cmt_back_free graph_showpage 0 graph_accesspage al call graph_clear graph_accesspage 1 mov al, 0 out dx, al pop si pop bp retf musicroom endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_ADE2 proc near @@page = byte ptr -3 var_2 = word ptr -2 enter 4, 0 push si mov [bp+var_2], 0 mov [bp+@@page], 0 call super_entry_bfnt pascal, ds, offset aOpwin_bft ; "opwin.bft" kajacall KAJA_SONG_STOP call snd_load c, offset aOp_m, ds, SND_LOAD_SONG call pi_slot_load pascal, 0, ds, offset aTl01_pi mov PaletteTone, 0 call far ptr palette_show graph_accesspage 1 call pi_slot_put pascal, large 0, 0 graph_accesspage 0 call pi_slot_palette_apply pascal, 0 call pi_slot_put pascal, large 0, 0 call egc_shift_left_all pascal, 2 mov Palettes+45, 0 mov Palettes+46, 0 mov Palettes+47, 0 call far ptr palette_show mov Palettes+33, 0 mov Palettes+34, 0 mov Palettes+35, 0 call far ptr palette_show freePISlotLarge 0 call pi_slot_load pascal, 0, ds, offset aTl02_pi graph_showpage 1 mov si, 0A0h jmp short loc_AF02 ; --------------------------------------------------------------------------- loc_AEA0: push 1 call frame_delay mov al, byte ptr [bp+var_2] mov Palettes+45, al mov Palettes+46, al mov Palettes+47, al call far ptr palette_show cmp [bp+var_2], 80h jg short loc_AECB mov al, byte ptr [bp+var_2] mov Palettes+33, al mov Palettes+34, al mov Palettes+35, al loc_AECB: call far ptr palette_show cmp [bp+var_2], 100 jg short loc_AEE1 mov ax, [bp+var_2] mov PaletteTone, ax call far ptr palette_show loc_AEE1: add [bp+var_2], 2 graph_showpage [bp+@@page] mov al, 1 sub al, [bp+@@page] mov [bp+@@page], al graph_accesspage al call egc_shift_left_all pascal, 4 sub si, 2 loc_AF02: cmp si, 11h jg short loc_AEA0 jmp short loc_AF25 ; --------------------------------------------------------------------------- loc_AF09: mov al, byte ptr [bp+var_2] mov Palettes+45, al mov Palettes+46, al mov Palettes+47, al call far ptr palette_show add [bp+var_2], 2 push 1 call frame_delay loc_AF25: cmp [bp+var_2], 0FFh jl short loc_AF09 mov vsync_Count1, 0 call sub_B3EF loc_AF35: cmp vsync_Count1, 10h jb short loc_AF35 xor si, si jmp short loc_AF65 ; --------------------------------------------------------------------------- loc_AF40: mov PaletteTone, 200 call far ptr palette_show push 1 call frame_delay mov PaletteTone, 100 call far ptr palette_show push 1 call frame_delay inc si loc_AF65: cmp si, 8 jl short loc_AF40 mov PaletteTone, 200 call far ptr palette_show kajacall KAJA_SONG_PLAY graph_showpage 0 graph_accesspage al call pi_slot_palette_apply pascal, 0 call pi_slot_put pascal, large 0, 0 push 1 call frame_delay mov PaletteTone, 100 call far ptr palette_show push 1 call frame_delay xor si, si jmp short loc_AFD9 ; --------------------------------------------------------------------------- loc_AFB4: mov PaletteTone, 200 call far ptr palette_show push 1 call frame_delay mov PaletteTone, 100 call far ptr palette_show push 1 call frame_delay inc si loc_AFD9: cmp si, 8 jl short loc_AFB4 graph_accesspage 1 call pi_slot_put pascal, large 0, 0 graph_accesspage 0 freePISlotLarge 0 call sub_B38D pop si leave retn sub_ADE2 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B008 proc near push bp mov bp, sp push si call super_entry_bfnt pascal, ds, offset aOpwin_bft ; "opwin.bft" kajacall KAJA_SONG_STOP call snd_load c, offset aOp_m, ds, SND_LOAD_SONG mov PaletteTone, 0 call far ptr palette_show call pi_slot_load pascal, 0, ds, offset aTl02_pi graph_showpage 0 call sub_B3EF graph_accesspage 1 call pi_slot_put pascal, large 0, 0 graph_accesspage 0 call pi_slot_palette_apply pascal, 0 call pi_slot_put pascal, large 0, 0 graph_accesspage 0 freePISlotLarge 0 call sub_B38D kajacall KAJA_SONG_PLAY xor si, si jmp short loc_B0A7 ; --------------------------------------------------------------------------- loc_B094: mov PaletteTone, si call far ptr palette_show push 1 call frame_delay add si, 4 loc_B0A7: cmp si, 100 jle short loc_B094 pop si pop bp retn sub_B008 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B0AF proc near push bp mov bp, sp push si mov si, 288 jmp short loc_B0D2 ; --------------------------------------------------------------------------- loc_B0B8: push si call sub_B10A call super_put pascal, si, large (256 shl 16) or 2 call frame_delay pascal, 1 add si, 8 loc_B0D2: cmp si, 392 jl short loc_B0B8 pop si pop bp retn sub_B0AF endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B0DB proc near push bp mov bp, sp push si mov si, 384 jmp short loc_B101 ; --------------------------------------------------------------------------- loc_B0E4: lea ax, [si+8] push ax call sub_B10A call super_put pascal, si, large (256 shl 16) or 2 call frame_delay pascal, 1 sub si, 8 loc_B101: cmp si, 280 jge short loc_B0E4 pop si pop bp retn sub_B0DB endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B10A proc near arg_0 = word ptr 4 push bp mov bp, sp push si push di mov ax, [bp+arg_0] shr ax, 3 mov di, 77B0h add di, ax mov ax, 0AD00h mov es, ax assume es:nothing loc_B11F: mov al, 1 out 0A6h, al mov dx, es:[di] mov ax, 0B500h mov es, ax assume es:nothing mov cx, es:[di] mov ax, 0BD00h mov es, ax assume es:nothing mov bx, es:[di] mov ax, 0E500h mov es, ax assume es:nothing mov si, es:[di] xor al, al out 0A6h, al mov es:[di], si mov ax, 0BD00h mov es, ax assume es:nothing mov es:[di], bx mov ax, 0B500h mov es, ax assume es:nothing mov es:[di], cx mov ax, 0AD00h mov es, ax assume es:nothing mov es:[di], dx sub di, 50h ; 'P' jnb short loc_B11F pop di pop si pop bp retn 2 sub_B10A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B168 proc near var_4 = word ptr -4 var_1 = byte ptr -1 arg_0 = word ptr 4 enter 4, 0 push si push di mov [bp+var_4], 0 call IRand mov byte_FC50, al call IRand mov byte_FC51, al call IRand mov byte_FBD7, al mov si, 2396h xor di, di jmp short loc_B19B ; --------------------------------------------------------------------------- loc_B192: mov al, [si] mov ah, 0 add [bp+var_4], ax inc di inc si loc_B19B: cmp di, 0CCh jl short loc_B192 mov ax, [bp+var_4] mov word_FB84, ax mov si, 2460h dec si mov al, byte_FC51 mov [bp+var_1], al mov di, 0CBh ; 'ヒ' jmp short loc_B1D4 ; --------------------------------------------------------------------------- loc_B1B6: mov al, [si] mov dl, byte_FC50 add dl, [bp+var_1] sub al, dl mov [si], al mov al, [si] mov [bp+var_1], al mov al, byte_FC51 ror [bp+var_1], 3 xor [bp+var_1], al dec di dec si loc_B1D4: or di, di jge short loc_B1B6 push ds push word_E1F2 call file_append mov ax, [bp+arg_0] imul ax, 0CEh movzx eax, ax push eax push 0 call file_seek push ds push offset word_FB84 push 0CEh call file_write call file_close pop di pop si leave retn 2 sub_B168 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B20D proc near var_1 = byte ptr -1 enter 2, 0 push si mov si, 2394h xor dx, dx jmp short loc_B235 ; --------------------------------------------------------------------------- loc_B219: mov al, [si+1] mov [bp+var_1], al mov al, byte_FC51 ror [bp+var_1], 3 xor [bp+var_1], al mov al, byte_FC50 add al, [bp+var_1] add al, [si] mov [si], al inc dx inc si loc_B235: cmp dx, 0CBh ; 'ヒ' jl short loc_B219 mov al, byte_FC50 add al, byte_FC51 add al, [si] mov [si], al pop si leave retn sub_B20D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B249 proc near var_1 = byte ptr -1 enter 2, 0 push si push di mov [bp+var_1], 29h ; ')' xor si, si jmp short loc_B28A ; --------------------------------------------------------------------------- loc_B257: xor di, di jmp short loc_B266 ; --------------------------------------------------------------------------- loc_B25B: mov bx, si shl bx, 3 mov byte ptr [bx+di+2396h], 2Ah ; '*' inc di loc_B266: cmp di, 8 jl short loc_B25B xor di, di jmp short loc_B27A ; --------------------------------------------------------------------------- loc_B26F: mov bx, si imul bx, 0Ah mov byte ptr [bx+di+23E8h], 20h ; ' ' inc di loc_B27A: cmp di, 0Ah jl short loc_B26F mov byte ptr [si+244Ch], 0 mov byte ptr [si+2456h], 21h ; '!' inc si loc_B28A: cmp si, 0Ah jl short loc_B257 mov byte_FBDC, 21h ; '!' mov di, 1 jmp short loc_B2A9 ; --------------------------------------------------------------------------- loc_B299: mov bx, di imul bx, 0Ah mov al, [bp+var_1] mov [bx+23EBh], al inc di dec [bp+var_1] loc_B2A9: cmp di, 0Ah jl short loc_B299 mov byte_FBD6, 12h xor si, si jmp short loc_B2BF ; --------------------------------------------------------------------------- loc_B2B7: push si call sub_B168 call sub_B20D inc si loc_B2BF: cmp si, 4 jl short loc_B2B7 pop di pop si leave retn sub_B249 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B2C8 proc near push bp mov bp, sp push si xor cx, cx mov si, 2396h xor dx, dx jmp short loc_B2DD ; --------------------------------------------------------------------------- loc_B2D5: mov al, [si] mov ah, 0 add cx, ax inc dx inc si loc_B2DD: cmp dx, 0CCh jl short loc_B2D5 cmp word_FB84, cx jz short loc_B2ED mov al, 1 jmp short loc_B2EF ; --------------------------------------------------------------------------- loc_B2ED: mov al, 0 loc_B2EF: pop si pop bp retn sub_B2C8 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B2F2 proc near arg_0 = word ptr 4 push bp mov bp, sp push ds push word_E1F2 call file_exist or ax, ax jnz short loc_B314 push ds push word_E1F2 call file_create call file_close jmp short loc_B34D ; --------------------------------------------------------------------------- loc_B314: push ds push word_E1F2 call file_ropen mov ax, [bp+arg_0] imul ax, 0CEh movzx eax, ax push eax push 0 call file_seek push ds push offset word_FB84 push 0CEh call file_read call file_close call sub_B20D call sub_B2C8 or al, al jz short loc_B357 loc_B34D: call sub_B249 mov ax, 1 pop bp retn 2 ; --------------------------------------------------------------------------- loc_B357: xor ax, ax pop bp retn 2 sub_B2F2 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B35D proc near var_1 = byte ptr -1 enter 2, 0 push si mov [bp+var_1], 7 xor si, si jmp short loc_B382 ; --------------------------------------------------------------------------- loc_B36A: push si call sub_B2F2 or ax, ax jz short loc_B376 mov al, 7 jmp short loc_B38A ; --------------------------------------------------------------------------- loc_B376: cmp byte_FBD6, 63h ; 'c' jnz short loc_B381 mov [bp+var_1], 9 loc_B381: inc si loc_B382: cmp si, 4 jl short loc_B36A mov al, [bp+var_1] loc_B38A: pop si leave retn sub_B35D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B38D proc near push bp mov bp, sp push si call hflip_lut_generate xor si, si jmp short loc_B3B0 ; --------------------------------------------------------------------------- loc_B39A: lea ax, [si+2] push ax mov bx, si shl bx, 2 pushd dword ptr [bx+0A0Eh] push 0 call cdg_load_single_forcealpha inc si loc_B3B0: cmp si, 3 jl short loc_B39A call cdg_load_all_noalpha pascal, 13, ds, offset aSlex_cd2 pop si pop bp retn sub_B38D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B3C3 proc near push bp mov bp, sp call cdg_load_single_forcealpha pascal, 1, ds, offset a99sl_cdg, 0 call cdg_load_single_noalpha pascal, 11, ds, offset aSlwin_cdg , 0 call cdg_load_single_noalpha pascal, 12, ds, offset aSlex_cdg, 0 pop bp retn sub_B3C3 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B3EF proc near push bp mov bp, sp push si call cdg_load_single_forcealpha pascal, 0, [off_E1FE], 0 mov si, 3 jmp short loc_B41C ; --------------------------------------------------------------------------- loc_B406: lea ax, [si+2] push ax mov bx, si shl bx, 2 pushd dword ptr [bx+0A0Eh] push 0 call cdg_load_single_forcealpha inc si loc_B41C: cmp si, 6 jl short loc_B406 pop si pop bp retn sub_B3EF endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B424 proc near push bp mov bp, sp push si mov vsync_Count1, 0 kajacall KAJA_SONG_STOP call snd_load c, offset aSelect_m, ds, SND_LOAD_SONG kajacall KAJA_SONG_PLAY mov word_FC64, 0C8h ; 'ネ' les bx, _resident assume es:nothing mov eax, es:[bx+resident_t.rand] mov random_seed, eax call text_clear call super_free call super_entry_bfnt pascal, ds, offset aChname_bft ; "chname.bft" graph_accesspage 0 call graph_clear graph_accesspage 1 call graph_clear graph_showpage 0 mov byte_FC5C, 0 push ds push offset aTlsl_rgb ; "TLSL.RGB" call palette_entry_rgb call far ptr palette_show mov si, 6 jmp short loc_B4BC ; --------------------------------------------------------------------------- loc_B4A6: lea ax, [si+2] push ax mov bx, si shl bx, 2 pushd dword ptr [bx+0A0Eh] push 0 call cdg_load_single_forcealpha inc si loc_B4BC: cmp si, 9 jl short loc_B4A6 loc_B4C1: cmp vsync_Count1, 1Eh jb short loc_B4C1 mov word_FC66, 8 call sub_B35D mov byte_FC68, al pop si pop bp retn sub_B424 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B4D7 proc near push bp mov bp, sp push si xor si, si jmp short loc_B4E6 ; --------------------------------------------------------------------------- loc_B4DF: call cdg_free pascal, si inc si loc_B4E6: cmp si, 22 jl short loc_B4DF call super_free pop si pop bp retn sub_B4D7 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B4F3 proc near push bp mov bp, sp push (32 shl 16) or 96 cmp byte_FC5A, 0 jnz short loc_B50C mov al, _playchars[0] cbw add ax, 2 jmp short loc_B50E ; --------------------------------------------------------------------------- loc_B50C: xor ax, ax loc_B50E: push ax call cdg_put push (416 shl 16) or 96 cmp byte_FC5B, 0 jnz short loc_B52A mov al, _playchars[1] cbw add ax, 2 jmp short loc_B52D ; --------------------------------------------------------------------------- loc_B52A: mov ax, 1 loc_B52D: push ax call cdg_put_hflip pop bp retn sub_B4F3 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B535 proc near push bp mov bp, sp push (32 shl 16) or 96 cmp byte_FC5A, 0 jnz short loc_B54E mov al, _playchars[0] cbw add ax, 2 jmp short loc_B550 ; --------------------------------------------------------------------------- loc_B54E: xor ax, ax loc_B550: push ax call cdg_put push (416 shl 16) or 96 push 1 call cdg_put pop bp retn sub_B535 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B565 proc near var_4 = word ptr -4 var_2 = word ptr -2 enter 4, 0 push si push di push (32 shl 16) or 304 push 11 call cdg_put_noalpha les bx, _resident cmp es:[bx+resident_t.game_mode], GM_STORY jz short loc_B590 push (416 shl 16) or 304 push 11 call cdg_put_noalpha loc_B590: call grcg_setcolor pascal, (GC_RMW shl 16) + 14 mov [bp+var_2], 0 mov [bp+var_4], 13Bh jmp short loc_B625 ; --------------------------------------------------------------------------- loc_B5A7: mov di, 5 mov si, 8Ch ; '・ jmp short loc_B5C7 ; --------------------------------------------------------------------------- loc_B5AF: push si push [bp+var_4] lea ax, [si+8] push ax mov ax, [bp+var_4] add ax, 15 push ax call grcg_boxfill dec di sub si, 0Bh loc_B5C7: mov al, _playchars[0] cbw imul ax, 3 add ax, [bp+var_2] mov bx, ax mov al, [bx+0A32h] mov ah, 0 cmp ax, di jl short loc_B5AF les bx, _resident cmp es:[bx+resident_t.game_mode], GM_STORY jz short loc_B61E mov di, 5 mov si, 20Ch jmp short loc_B608 ; --------------------------------------------------------------------------- loc_B5F0: push si push [bp+var_4] lea ax, [si+8] push ax mov ax, [bp+var_4] add ax, 15 push ax call grcg_boxfill dec di sub si, 0Bh loc_B608: mov al, _playchars[1] cbw imul ax, 3 add ax, [bp+var_2] mov bx, ax mov al, [bx+0A32h] mov ah, 0 cmp ax, di jl short loc_B5F0 loc_B61E: inc [bp+var_2] add [bp+var_4], 10h loc_B625: cmp [bp+var_2], 3 jl loc_B5A7 call grcg_off pop di pop si leave retn sub_B565 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B636 proc near push bp mov bp, sp push si push di mov di, 136 xor si, si jmp short loc_B663 ; --------------------------------------------------------------------------- loc_B642: push 256 push di mov ax, si add ax, ax push ax call super_put push 320 push di mov ax, si add ax, ax inc ax push ax call super_put inc si add di, 20 loc_B663: mov al, byte_FC68 mov ah, 0 cmp ax, si jg short loc_B642 pop di pop si pop bp retn sub_B636 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B670 proc near push bp mov bp, sp push (160 shl 16) or 304 push 12 call cdg_put_noalpha push (176 shl 16) or 316 mov al, _playchars[0] cbw add ax, 13 push ax call cdg_put_noalpha les bx, _resident cmp es:[bx+resident_t.game_mode], GM_STORY jz short loc_B6BE push (544 shl 16) or 304 push 12 call cdg_put_noalpha push (560 shl 16) or 316 mov al, _playchars[1] cbw add ax, 13 push ax call cdg_put_noalpha loc_B6BE: pop bp retn sub_B670 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B6C0 proc near var_7 = byte ptr -7 var_6 = word ptr -6 var_4 = word ptr -4 var_2 = word ptr -2 arg_0 = word ptr 4 arg_2 = word ptr 6 arg_4 = word ptr 8 arg_6 = byte ptr 0Ah arg_8 = byte ptr 0Ch enter 8, 0 push si mov si, [bp+arg_4] mov [bp+var_6], 0 jmp short loc_B73B ; --------------------------------------------------------------------------- loc_B6CF: mov al, byte ptr [bp+var_6] add al, [bp+arg_8] mov [bp+var_7], al mov ah, 0 imul [bp+arg_2] mov bx, 100h cwd idiv bx mov [bp+var_7], al mov ah, 0 add ax, ax mov bx, ax call vector1_at c, (RES_X / 2), si, _CosTable8[bx] mov [bp+var_2], ax mov al, byte ptr [bp+var_6] add al, [bp+arg_6] mov [bp+var_7], al mov ah, 0 imul [bp+arg_0] mov bx, 100h cwd idiv bx mov [bp+var_7], al mov ah, 0 add ax, ax mov bx, ax call vector1_at c, (RES_Y / 2), si, _SinTable8[bx] mov [bp+var_4], ax push [bp+var_2] push ax call grcg_pset inc [bp+var_6] loc_B73B: cmp [bp+var_6], 100h jb short loc_B6CF pop si leave retn 0Ah sub_B6C0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B747 proc near var_6 = word ptr -6 var_4 = word ptr -4 var_2 = word ptr -2 enter 6, 0 push si push di mov al, byte ptr word_FC52 mov ah, 0 mov si, ax cmp si, 80h jl short loc_B761 mov ax, 100h sub ax, si mov si, ax loc_B761: mov ax, si add ax, si add ax, 100h mov [bp+var_4], ax add si, 100h mov ax, si add ax, si mov [bp+var_2], ax call grcg_setcolor pascal, (GC_RMW shl 16) + 6 push word_FC52 mov al, byte ptr word_FC52 add al, al push ax push 0DCh ; 'ワ' push si push [bp+var_2] call sub_B6C0 mov al, 0 sub al, byte ptr word_FC52 push ax mov al, byte ptr word_FC52 mov ah, 0 cwd sub ax, dx sar ax, 1 push ax push 78h ; 'x' push [bp+var_4] push si call sub_B6C0 call grcg_setcolor pascal, (GC_RMW shl 16) + 5 mov ax, word_FC66 cwd sub ax, dx sar ax, 1 mov di, ax test byte ptr word_FC66, 1 jz short loc_B7CD inc di loc_B7CD: mov [bp+var_6], 1 jmp short loc_B824 ; --------------------------------------------------------------------------- loc_B7D4: mov al, byte ptr [bp+var_6] add al, al mov dl, byte ptr word_FC52 sub dl, al push dx mov al, byte ptr word_FC52 add al, al mov dl, byte ptr [bp+var_6] shl dl, 2 sub al, dl push ax push 0DCh ; 'ワ' push si push [bp+var_2] call sub_B6C0 mov al, 0 sub al, byte ptr word_FC52 mov dl, byte ptr [bp+var_6] add dl, dl add al, dl push ax mov al, byte ptr word_FC52 mov ah, 0 mov dx, [bp+var_6] add dx, dx sub ax, dx cwd sub ax, dx sar ax, 1 push ax push 78h ; 'x' push [bp+var_4] push si call sub_B6C0 inc [bp+var_6] loc_B824: cmp [bp+var_6], di jle short loc_B7D4 call grcg_setcolor pascal, (GC_RMW shl 16) + 1 lea ax, [di+1] mov [bp+var_6], ax jmp short loc_B88C ; --------------------------------------------------------------------------- loc_B83C: mov al, byte ptr [bp+var_6] add al, al mov dl, byte ptr word_FC52 sub dl, al push dx mov al, byte ptr word_FC52 add al, al mov dl, byte ptr [bp+var_6] shl dl, 2 sub al, dl push ax push 0DCh ; 'ワ' push si push [bp+var_2] call sub_B6C0 mov al, 0 sub al, byte ptr word_FC52 mov dl, byte ptr [bp+var_6] add dl, dl add al, dl push ax mov al, byte ptr word_FC52 mov ah, 0 mov dx, [bp+var_6] add dx, dx sub ax, dx cwd sub ax, dx sar ax, 1 push ax push 78h ; 'x' push [bp+var_4] push si call sub_B6C0 inc [bp+var_6] loc_B88C: mov ax, [bp+var_6] cmp ax, word_FC66 jle short loc_B83C call grcg_off mov al, byte ptr word_FC52 add al, 2 mov byte ptr word_FC52, al pop di pop si leave retn sub_B747 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public P_CURSOR_PUT p_cursor_put proc near @@y = word ptr -2 @@col = byte ptr 4 arg_2 = word ptr 6 enter 2, 0 push si push di mov si, [bp+arg_2] mov ax, si shl ax, 4 shl ax, 3 add ax, 240 mov di, ax mov al, [si+2468h] cbw imul ax, 20 add ax, 128 mov [bp+@@y], ax push di push ax push GAIJI_W push ds mov ax, si imul ax, (gc_GAIJI_W + 1) add ax, offset _P_CURSOR_TOP push ax mov al, [bp+@@col] mov ah, 0 push ax call graph_gaiji_puts push di mov ax, [bp+@@y] add ax, GLYPH_H push ax push GAIJI_W push ds mov ax, si imul ax, (gc_GAIJI_W + 1) add ax, offset _P_CURSOR_BOTTOM push ax mov al, [bp+@@col] mov ah, 0 push ax call graph_gaiji_puts pop di pop si leave retn 4 p_cursor_put endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B908 proc near var_2 = word ptr -2 arg_0 = word ptr 4 arg_2 = word ptr 6 enter 2, 0 push si push di mov di, [bp+arg_2] mov si, [bp+arg_0] cmp byte ptr [si+246Ah], 0 jnz loc_BA82 cmp byte ptr [si+0A59h], 0 jz short loc_B932 or di, di jnz loc_BA82 mov byte ptr [si+0A59h], 0 jmp loc_BA82 ; --------------------------------------------------------------------------- loc_B932: test di, 1 jz short loc_B951 dec byte ptr [si+2468h] cmp byte ptr [si+2468h], 0 jge short loc_B94C mov al, byte_FC68 dec al mov [si+2468h], al loc_B94C: mov byte ptr [si+0A59h], 1 loc_B951: test di, 2 jz short loc_B974 inc byte ptr [si+2468h] mov al, [si+2468h] cbw mov dl, byte_FC68 mov dh, 0 cmp ax, dx jl short loc_B96F mov byte ptr [si+2468h], 0 loc_B96F: mov byte ptr [si+0A59h], 1 loc_B974: test di, 20h ; Hack db 00fh db 084h db 07fh db 000h mov al, [si+2468h] cbw mov [bp+var_2], ax les bx, _resident add bx, si mov al, byte ptr [bp+var_2] add al, al inc al mov es:[bx+resident_t.RESIDENT_playchar_paletted], al push 1 call palette_white_in mov bx, 1 sub bx, si cmp byte ptr [bx+246Ah], 0 jz short loc_B9CC les bx, _resident mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][0] cmp al, es:[bx+resident_t.RESIDENT_playchar_paletted][1] jnz short loc_B9CC add bx, si inc es:[bx+resident_t.RESIDENT_playchar_paletted] push si mov bx, [bp+var_2] shl bx, 2 pushd dword ptr [bx+0A0Eh] push 1 jmp short loc_B9DA ; --------------------------------------------------------------------------- loc_B9CC: push si mov bx, [bp+var_2] shl bx, 2 pushd dword ptr [bx+0A0Eh] push 0 loc_B9DA: call cdg_load_single_forcealpha mov bx, 1 sub bx, si cmp byte ptr [bx+246Ah], 0 jz short loc_B9F1 mov word_FC62, 0 loc_B9F1: mov byte ptr [si+246Ah], 1 mov byte ptr [si+0A59h], 1 loc_B9FB: test di, 10h ; Hack db 00fh db 084h db 07fh db 000h mov al, [si+2468h] cbw mov [bp+var_2], ax les bx, _resident add bx, si mov al, byte ptr [bp+var_2] add al, al add al, 2 mov es:[bx+resident_t.RESIDENT_playchar_paletted], al push 1 call palette_white_in mov bx, 1 sub bx, si cmp byte ptr [bx+246Ah], 0 jz short loc_BA53 les bx, _resident mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][0] cmp al, es:[bx+resident_t.RESIDENT_playchar_paletted][1] jnz short loc_BA53 add bx, si dec es:[bx+resident_t.RESIDENT_playchar_paletted] push si mov bx, [bp+var_2] shl bx, 2 pushd dword ptr [bx+0A0Eh] push 0 jmp short loc_BA61 ; --------------------------------------------------------------------------- loc_BA53: push si mov bx, [bp+var_2] shl bx, 2 pushd dword ptr [bx+0A0Eh] push 1 loc_BA61: call cdg_load_single_forcealpha mov bx, 1 sub bx, si cmp byte ptr [bx+246Ah], 0 jz short loc_BA78 mov word_FC62, 0 loc_BA78: mov byte ptr [si+246Ah], 1 mov byte ptr [si+0A59h], 1 loc_BA82: pop di pop si leave retn 4 sub_B908 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BA88 proc near push bp mov bp, sp call sub_B424 call text_clear les bx, _resident mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][0] mov ah, 0 dec ax cwd sub ax, dx sar ax, 1 mov _playchars[0], al mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][1] mov ah, 0 dec ax cwd sub ax, dx sar ax, 1 mov _playchars[1], al mov byte_FC5A, 0 mov byte_FC5B, 0 cmp es:[bx+resident_t.key_mode], KM_KEY_KEY jnz short loc_BAD4 setfarfp _input_mode, input_mode_key_vs_key jmp short loc_BAF9 ; --------------------------------------------------------------------------- loc_BAD4: les bx, _resident cmp es:[bx+resident_t.key_mode], KM_JOY_KEY jnz short loc_BAED setfarfp _input_mode, input_mode_joy_vs_key jmp short loc_BAF9 ; --------------------------------------------------------------------------- loc_BAED: setfarfp _input_mode, input_mode_key_vs_joy loc_BAF9: push 10h call frame_delay mov word_FC62, 0 loc_BB06: call sub_B747 call sub_B4F3 call sub_B565 call sub_B636 call sub_B670 push 0 cmp byte_FC5A, 0 jz short loc_BB22 mov al, 0Fh jmp short loc_BB24 ; --------------------------------------------------------------------------- loc_BB22: mov al, 8 loc_BB24: push ax call p_cursor_put push 1 cmp byte_FC5B, 0 jz short loc_BB35 mov al, 0Fh jmp short loc_BB37 ; --------------------------------------------------------------------------- loc_BB35: mov al, 0Ah loc_BB37: push ax call p_cursor_put call _input_reset_sense_key_held call _input_mode push _input_mp_p1 push 0 call sub_B908 push _input_mp_p2 push 1 call sub_B908 test _input_sp.hi, high INPUT_CANCEL jz short loc_BB82 graph_accesspage 0 call graph_clear graph_showpage 0 call text_clear call sub_B4D7 kajacall KAJA_SONG_STOP mov al, 1 pop bp retn ; --------------------------------------------------------------------------- loc_BB82: cmp byte_FC5A, 0 jz short loc_BBB7 cmp byte_FC5B, 0 jz short loc_BBB7 call text_clear cmp word_FC62, 10h jb short loc_BBB0 mov ax, word_FC62 imul ax, 6 mov dx, 200 sub dx, ax mov PaletteTone, dx call far ptr palette_show loc_BBB0: cmp word_FC62, 20h ; ' ' ja short loc_BC18 loc_BBB7: cmp vsync_Count1, 3 jb short loc_BBB7 cmp vsync_Count1, 4 jbe short loc_BBD0 cmp word_FC66, 1 jle short loc_BBD0 dec word_FC66 loc_BBD0: mov vsync_Count1, 0 graph_accesspage byte_FC5C mov al, 1 sub al, byte_FC5C mov byte_FC5C, al graph_showpage al call grcg_setcolor pascal, (GC_RMW shl 16) + 0 call grcg_byteboxfill_x pascal, large 0, (((RES_X - 1) / 8) shl 16) or (RES_Y - 1) call grcg_off inc word_FC62 les bx, _resident inc es:[bx+resident_t.rand] jmp loc_BB06 ; --------------------------------------------------------------------------- loc_BC18: call sub_B4D7 mov al, 0 pop bp retn sub_BA88 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BC1F proc near push bp mov bp, sp push si call sub_B424 les bx, _resident mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][0] mov ah, 0 dec ax cwd sub ax, dx sar ax, 1 mov _playchars[0], al mov al, es:[bx+resident_t.RESIDENT_playchar_paletted][1] mov ah, 0 dec ax cwd sub ax, dx sar ax, 1 mov _playchars[1], al mov byte_FC5A, 0 mov byte_FC5B, 0 setfarfp _input_mode, input_mode_interface xor si, si jmp loc_BD8B ; --------------------------------------------------------------------------- loc_BC63: mov word_FC62, 0 loc_BC69: call sub_B747 call sub_B4F3 call sub_B565 call sub_B636 call sub_B670 call _input_reset_sense_key_held call _input_mode push 0 cmp byte_FC5A, 0 jz short loc_BC8E mov al, 0Fh jmp short loc_BC90 ; --------------------------------------------------------------------------- loc_BC8E: mov al, 8 loc_BC90: push ax call p_cursor_put cmp byte_FC5A, 0 jz short loc_BCAE push 1 cmp byte_FC5B, 0 jz short loc_BCA8 mov al, 0Fh jmp short loc_BCAA ; --------------------------------------------------------------------------- loc_BCA8: mov al, 0Ah loc_BCAA: push ax call p_cursor_put loc_BCAE: push _input_sp push si call sub_B908 test _input_sp.hi, high INPUT_CANCEL jz short loc_BCE3 graph_accesspage 0 call graph_clear graph_showpage 0 call text_clear call sub_B4D7 kajacall KAJA_SONG_STOP mov al, 1 jmp loc_BD97 ; --------------------------------------------------------------------------- loc_BCE3: or si, si jnz short loc_BCF7 cmp byte_FC5A, 0 jz short loc_BCF7 cmp word_FC62, 0Ch ja loc_BD8A loc_BCF7: or si, si jz short loc_BD29 cmp byte_FC5B, 0 jz short loc_BD29 call text_clear cmp word_FC62, 10h jb short loc_BD22 mov ax, word_FC62 imul ax, 6 mov dx, 200 sub dx, ax mov PaletteTone, dx call far ptr palette_show loc_BD22: cmp word_FC62, 20h ; ' ' ja short loc_BD8A loc_BD29: cmp vsync_Count1, 3 jb short loc_BD29 cmp vsync_Count1, 4 jbe short loc_BD42 cmp word_FC66, 1 jle short loc_BD42 dec word_FC66 loc_BD42: mov vsync_Count1, 0 graph_accesspage byte_FC5C mov al, 1 sub al, byte_FC5C mov byte_FC5C, al graph_showpage al call grcg_setcolor pascal, (GC_RMW shl 16) + 0 call grcg_byteboxfill_x pascal, large 0, (((RES_X - 1) / 8) shl 16) or (RES_Y - 1) call grcg_off inc word_FC62 les bx, _resident inc es:[bx+resident_t.rand] jmp loc_BC69 ; --------------------------------------------------------------------------- loc_BD8A: inc si loc_BD8B: cmp si, 2 jl loc_BC63 call sub_B4D7 mov al, 0 loc_BD97: pop si pop bp retn sub_BC1F endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BD9A proc near push bp mov bp, sp call sub_B424 mov _playchars[0], 0 mov byte_FC5A, 0 mov byte_FC5B, 1 setfarfp _input_mode, input_mode_interface mov word_FC62, 0 loc_BDC1: call sub_B747 call sub_B535 call sub_B565 call sub_B636 call sub_B670 push 0 cmp byte_FC5A, 0 jz short loc_BDDD mov al, 0Fh jmp short loc_BDDF ; --------------------------------------------------------------------------- loc_BDDD: mov al, 8 loc_BDDF: push ax call p_cursor_put call _input_reset_sense_key_held call _input_mode push _input_sp push 0 call sub_B908 test _input_sp.hi, high INPUT_CANCEL jz short loc_BE21 graph_accesspage 0 call graph_clear graph_showpage 0 call text_clear call sub_B4D7 kajacall KAJA_SONG_STOP mov al, 1 pop bp retn ; --------------------------------------------------------------------------- loc_BE21: cmp byte_FC5A, 0 jz short loc_BE4F call text_clear cmp word_FC62, 10h jb short loc_BE48 mov ax, word_FC62 imul ax, 6 mov dx, 200 sub dx, ax mov PaletteTone, dx call far ptr palette_show loc_BE48: cmp word_FC62, 20h ; ' ' ja short loc_BEB0 loc_BE4F: cmp vsync_Count1, 3 jb short loc_BE4F cmp vsync_Count1, 4 jbe short loc_BE68 cmp word_FC66, 1 jle short loc_BE68 dec word_FC66 loc_BE68: mov vsync_Count1, 0 graph_accesspage byte_FC5C mov al, 1 sub al, byte_FC5C mov byte_FC5C, al graph_showpage al call grcg_setcolor pascal, (GC_RMW shl 16) + 0 call grcg_byteboxfill_x pascal, large 0, (((RES_X - 1) / 8) shl 16) or (RES_Y - 1) call grcg_off inc word_FC62 les bx, _resident inc es:[bx+resident_t.rand] jmp loc_BDC1 ; --------------------------------------------------------------------------- loc_BEB0: call sub_B4D7 mov al, 0 pop bp retn sub_BD9A endp db 0 op_01_TEXT ends ; =========================================================================== ; Segment type: Pure code op_02_TEXT segment word public 'CODE' use16 assume cs:op_02_TEXT ;org 8 assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing include th02/exit_dos.asm include th01/hardware/vram_planes_set.asm include th02/snd/detmode.asm include th02/snd/pmd_res.asm include th02/snd/load.asm include th02/exit.asm include th03/math/vector1_at.asm db 0 include th03/formats/cdg_put.asm include th03/formats/cdg_put_hflip.asm include th02/hardware/frame_delay.asm db 0 include th03/hardware/input_sense.asm include th02/formats/pi_slot_palette_apply.asm include th02/formats/pi_slot_put.asm include th02/snd/kajaint.asm include th02/initop.asm include th03/formats/cdg_load.asm include th03/hardware/grppsafx.asm include th02/formats/pi_slot_load.asm include th03/hardware/input_modes.asm include th03/hardware/input_wait.asm db 0 include th03/formats/cdg_put_noalpha.asm include th03/formats/hfliplut.asm extern FRAME_DELAY_2:proc op_02_TEXT ends .data include th03/formats/cfg[data].asm db 0 db 0 db 0 db 0 db 0 db 0 db 0 db 1 db 0 db 0 db 2 db 0 db 3 db 5 db 4 db 6 gp1P_VS_CPU db 88h, 89h, 8Ah, 8Bh, 8Ch, 8Dh, 8Eh, 8Fh, 0 gp1P_VS_2P db 88h, 89h, 8Ah, 8Bh, 96h, 97h, 98h, 99h, 0 gpCPU_VS_CPU db 92h, 93h, 94h, 95h, 8Ch, 8Dh, 8Eh, 8Fh, 0 include th03/start[data].asm gpSTART db 30h, 31h, 32h, 0 gpVS_START db 33h, 34h, 35h, 36h, 37h, 38h, 0 gpMUSIC_ROOM db 41h, 42h, 43h, 44h, 45h, 46h, 47h, 0 gpHISCORE db 82h, 83h, 84h, 85h, 86h, 0 gpOPTION db 3Dh, 3Eh, 3Fh, 40h, 0 gpQUIT db 48h, 49h, 4Ah, 0 gpRANK db 6Eh, 6Fh, 70h, 0 gpMUSIC db 4Bh, 4Ch, 4Dh, 4Eh, 0 gpKEYCONFIG db 5Ch, 5Dh, 5Eh, 5Fh, 60h, 61h, 0 g4SPACES db 0CFh, 0CFh, 0CFh, 0CFh, 0 gpEASY db 71h, 72h, 73h, 0 gpNORMAL db 74h, 75h, 76h, 77h, 0 gpHARD db 78h, 79h, 7Ah, 0 gpLUNATIC db 7Bh, 7Ch, 7Dh, 7Eh, 0 gpOFF db 0CFh, 0CFh, 5Ah, 5Bh, 0CFh, 0CFh, 0CFh, 0 gpFM_86 db 0CFh, 4Fh, 50h, 51h, 52h, 0CFh, 0CFh, 0 gpMIDI_SC88 db 53h, 54h, 55h, 56h, 57h, 58h, 59h, 0 gpTYPE1 db 62h, 63h, 64h, 65h, 0 gpTYPE2 db 62h, 63h, 64h, 66h, 0 gpTYPE3 db 62h, 63h, 64h, 67h, 0 gpKEY_VS_KEY db 68h, 69h, 6Ch, 6Dh, 68h, 69h, 0 gpJOY_VS_KEY db 6Ah, 6Bh, 6Ch, 6Dh, 68h, 69h, 0 gpKEY_VS_JOY db 68h, 69h, 6Ch, 6Dh, 6Ah, 6Bh, 0 _menu_sel db 0 _quit db 0 byte_D953 db 1 _main_menu_initialized db 0 _option_initialized db 0 aYume_cfg db 'YUME.CFG',0 ; char path[] path db 'mainl',0 asc_D965 db ' ',0 aVfvcvbgngngbgn db 'GDCクロックが5MHzになっています。',0Ah,0 aUmx db '東方夢時空は2.5MHzでないと正常にゲームがプレイ出来ません',0Ah,0 aViosrfvVVkvqbd db 0Ah db 'お手数ですが2.5MHzに切り替えて、もう一度実行してね。',0Ah,0 aCOul db '夢時空1.dat',0 aGbgvgkxsslvVBb db 0Ah db 'メモリ不足です。メモリ空きを増やしてから実行してくりゃれ',0Ah,0 aMikoft_bft db 'MIKOFT.bft',0 db 0 include libs/master.lib/bfnt_id[data].asm include libs/master.lib/clip[data].asm include libs/master.lib/edges[data].asm include libs/master.lib/fil[data].asm include libs/master.lib/dos_ropen[data].asm include libs/master.lib/gaiji_backup[data].asm include libs/master.lib/gaiji_entry_bfnt[data].asm include libs/master.lib/grp[data].asm include libs/master.lib/js[data].asm include libs/master.lib/pal[data].asm include libs/master.lib/pf[data].asm include libs/master.lib/rand[data].asm include libs/master.lib/sin8[data].asm include libs/master.lib/tx[data].asm include libs/master.lib/vs[data].asm include libs/master.lib/wordmask[data].asm include libs/master.lib/mem[data].asm include libs/master.lib/super_entry_bfnt[data].asm include libs/master.lib/superpa[data].asm _snd_active db 0 db 0 include libs/master.lib/respal_exist[data].asm include libs/master.lib/draw_trapezoid[data].asm include th02/formats/pfopen[data].asm include th03/formats/cdg[data].asm public _MUSIC_TITLES _MUSIC_TITLES label dword dd aNo_1B@cVOul ; "NO.1  夢は時空を越えて " dd aNo_2B@B@Select ; "NO.2     Selection " dd aNo_3Umx ; "NO.3 東方妖恋談 " dd aNo_4Reincarnat ; "NO.4 Reincarnation " dd aNo_5Dim_Dream ; "NO.5 Dim. Dream " dd aNo_6TabulaRasa ; "NO.6 Tabula rasa 〜空白少女 " dd aNo_7B@Maniacal ; "NO.7   Maniacal Princess " dd aNo_8CPOBLostDr ; "NO.8 夢消失 〜Lost Dream " dd aNo_9CMCvlyBDre ; "NO.9 夢幻遊戯 〜Dream War " dd aNo_10Cvc@mirab ; "NO.10 魔法決戦!〜Fight it out!" dd aNo_11B@SailorO ; "NO.11   Sailor of Time " dd aNo_12Strawberr ; "NO.12 Strawberry Crisis!! " dd aNo_13F ; "NO.13 非統一魔法世界論 " dd aNo_14B@cvc@pri ; "NO.14  魔法鐘愛 " dd aNo_15B@lviuvC ; "NO.15  久遠の夢 " dd aNo_16Umx ; "NO.16 東方の青い空 " dd aNo_17IiiuvCumo ; "NO.17 永遠の満月 " dd aNo_18MapleDrea ; "NO.18 Maple Dream... " dd aNo_19CRlvLxu ; "NO.19 霊人の休日 " dd aB@b@ ; "    " dd aB@b@vpvxvivf ; "   Quit " public _MUSIC_FILES _MUSIC_FILES label dword dd aOp_m_0 ; "op.m" dd aSelect_m_0 ; "select.m" dd a00mm_m ; "00mm.m" dd a01mm_m ; "01mm.m" dd a02mm_m ; "02mm.m" dd a03mm_m ; "03mm.m" dd a04mm_m ; "04mm.m" dd a05mm_m ; "05mm.m" dd a06mm_m ; "06mm.m" dd aDec_m ; "dec.m" dd a07mm_m ; "07mm.m" dd a08mm_m ; "08mm.m" dd aDemo1_m ; "demo1.m" dd aDemo2_m ; "demo2.m" dd aDemo3_m ; "demo3.m" dd aDemo4_m ; "demo4.m" dd aDemo5_m ; "demo5.m" dd aEd_m ; "ed.m" dd aScore_m ; "score.m" include th02/music/polygons[data].asm music_track_playing db 0 aNo_1B@cVOul db 'NO.1  夢は時空を越えて ',0 aNo_2B@B@Select db 'NO.2     Selection ',0 aNo_3Umx db 'NO.3 東方妖恋談 ',0 aNo_4Reincarnat db 'NO.4 Reincarnation ',0 aNo_5Dim_Dream db 'NO.5 Dim. Dream ',0 aNo_6TabulaRasa db 'NO.6 Tabula rasa 〜空白少女 ',0 aNo_7B@Maniacal db 'NO.7   Maniacal Princess ',0 aNo_8CPOBLostDr db 'NO.8 夢消失 〜Lost Dream ',0 aNo_9CMCvlyBDre db 'NO.9 夢幻遊戯 〜Dream War ',0 aNo_10Cvc@mirab db 'NO.10 魔法決戦!〜Fight it out!',0 aNo_11B@SailorO db 'NO.11   Sailor of Time ',0 aNo_12Strawberr db 'NO.12 Strawberry Crisis!! ',0 aNo_13F db 'NO.13 非統一魔法世界論 ',0 aNo_14B@cvc@pri db 'NO.14  魔法鐘愛 ',0 aNo_15B@lviuvC db 'NO.15  久遠の夢 ',0 aNo_16Umx db 'NO.16 東方の青い空 ',0 aNo_17IiiuvCumo db 'NO.17 永遠の満月 ',0 aNo_18MapleDrea db 'NO.18 Maple Dream... ',0 aNo_19CRlvLxu db 'NO.19 霊人の休日 ',0 aB@b@ db '    ',0 aB@b@vpvxvivf db '   Quit ',0 aOp_m_0 db 'op.m',0 aSelect_m_0 db 'select.m',0 a00mm_m db '00mm.m',0 a01mm_m db '01mm.m',0 a02mm_m db '02mm.m',0 a03mm_m db '03mm.m',0 a04mm_m db '04mm.m',0 a05mm_m db '05mm.m',0 a06mm_m db '06mm.m',0 aDec_m db 'dec.m',0 a07mm_m db '07mm.m',0 a08mm_m db '08mm.m',0 aDemo1_m db 'demo1.m',0 aDemo2_m db 'demo2.m',0 aDemo3_m db 'demo3.m',0 aDemo4_m db 'demo4.m',0 aDemo5_m db 'demo5.m',0 aEd_m db 'ed.m',0 aScore_m db 'score.m',0 include th02/music/music_cmt_load[data].asm aOp3_pi db 'op3.pi',0 aOpwin_bft db 'opwin.bft',0 aOp_m db 'op.m',0 aTl01_pi db 'TL01.PI',0 aTl02_pi db 'TL02.PI',0 db 0 word_E1F2 dw 0A04h aYume_nem db 'YUME.NEM',0 db 0 off_E1FE dd a00sl_cd2 ; "00SL.CD2" dd a02sl_cd2 ; "02SL.CD2" dd a04sl_cd2 ; "04SL.CD2" dd a06sl_cd2 ; "06SL.CD2" dd a08sl_cd2 ; "08SL.CD2" dd a10sl_cd2 ; "10SL.CD2" dd a12sl_cd2 ; "12SL.CD2" dd a14sl_cd2 ; "14SL.CD2" dd a16sl_cd2 ; "16SL.CD2" db 3 db 1 db 5 db 4 db 4 db 2 db 3 db 4 db 3 db 2 db 3 db 1 db 4 db 1 db 4 db 2 db 2 db 5 db 4 db 5 db 1 db 5 db 2 db 4 db 5 db 5 db 3 include th03/strings/p_cursor[data].asm db 0 db 0 a00sl_cd2 db '00SL.CD2',0 a02sl_cd2 db '02SL.CD2',0 a04sl_cd2 db '04SL.CD2',0 a06sl_cd2 db '06SL.CD2',0 a08sl_cd2 db '08SL.CD2',0 a10sl_cd2 db '10SL.CD2',0 a12sl_cd2 db '12SL.CD2',0 a14sl_cd2 db '14SL.CD2',0 a16sl_cd2 db '16SL.CD2',0 aSlex_cd2 db 'slex.cd2',0 a99sl_cdg db '99sl.cdg',0 aSlwin_cdg db 'slwin.cdg',0 aSlex_cdg db 'slex.cdg',0 aSelect_m db 'select.m',0 aChname_bft db 'chname.bft',0 aTlsl_rgb db 'TLSL.RGB',0 db 041h, 0C1h, 0E1h, 0 .data? _main_input_allowed db ? _option_input_allowed db ? _in_option db ? db ? _putfunc dw ? include libs/master.lib/clip[bss].asm include libs/master.lib/fil[bss].asm include libs/master.lib/js[bss].asm include libs/master.lib/pal[bss].asm include libs/master.lib/vs[bss].asm include libs/master.lib/vsync[bss].asm include libs/master.lib/mem[bss].asm include libs/master.lib/superpa[bss].asm include th01/hardware/vram_planes[bss].asm include th02/snd/snd[bss].asm include th02/snd/load[bss].asm include libs/master.lib/pfint21[bss].asm include th03/hardware/input[bss].asm include th03/formats/cdg[bss].asm include th02/formats/pi_slots[bss].asm include th03/formats/hfliplut[bss].asm include th02/music/music[bss].asm include th03/music/cmt_back[bss].asm include th02/music/music_cmt[bss].asm word_FB84 dw ? dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; byte_FBD6 db ? byte_FBD7 db ? dd ? ; byte_FBDC db ? dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; dd ? ; db ? ; db ? ; db ? ; byte_FC50 db ? byte_FC51 db ? word_FC52 dw ? public _resident _resident dd ? public _playchars _playchars db PLAYER_COUNT dup (?) byte_FC5A db ? byte_FC5B db ? byte_FC5C db ? db ? include th03/hardware/input_modes[bss].asm word_FC62 dw ? word_FC64 dw ? word_FC66 dw ? byte_FC68 db ? db ? ; end