This page contains notes for the game Super Real Hanafuda: Koi Koi Shimasho 2.
This is split up by which ROM these fragments were found in. These can be seen at the hex addresses listed below.
|
|
'...But what does it mean?' |
u26.bin#
0x60404:
002,_G02_Ivt02_03,__G02_Ivt02_03
__mEsect_Cel 025,_G02_Ivt02_03,__G02_Ivt02_03
__mEsect_Cel 007,_G02_Ivt02_05,__G02_Ivt02_05
__mEsect_Cel 007,_G02_Ivt02_04,__G02_Ivt02_04
__mEsect_Cel 007,_G02_Ivt02_03,__G02_Ivt02_03
__mEsect_Cel 006,_G02_Ivt02_05,__G02_Ivt02_05
__mEsect_Cel 035,_G02_Ivt02_03,__G02_Ivt02_03
__mEsect_Cel 007,_G02_Ivt02_04,__G02_Ivt02_04
__mEsect_Cel 007,_G02_Ivt02_05,__G02_Ivt02_05
__mEsect_Cel 007,_G02_Ivt02_04,__G02_Ivt02_04
__mEsect_Cel 007,_G02_Ivt02_03,__G02_Ivt02_03
__mEsect_Cel 007,_G02_Ivt02_05,__G02_Ivt02_05
__mEsect_Cel 007,_G02_Ivt02_04,__G02_Ivt02_04
__mEsect_Cel 007,_G02_Ivt02_03,__G02_Ivt02_03
__mEsect_Cel 007,_G02_Ivt02_05,__G02_Ivt02_05
__mEsect_Cel 007,_G02_Ivt02_04,__G02_Ivt02_04
__mEsect_Cel 007,_G02_Ivt02_05,__G02_Ivt02_05
__mEsect_Cel 010,_G02_Ivt02_04,__G02_Ivt02_04
__mEsect_Cel $fff,_G02_Ivt02_03,__G02_Ivt02_03
STOP
tAnm_G02_Ivent21:
__mEsect_Anm 001,tCel_G02_Ivent21
tCel_G02_Ivent21:
__mEsect_Cel 032,_G02_Ivt02_06,__G02_Ivt02_06
__mEsect_Cel $130/002,_G02_Ivt02_06,__G02_Ivt02_06
__mEsect_Cel 002,_G02_Ivt02_06,__G02_Ivt02_06
__mEsect_Cel 002,_G02_Ivt02_07,__G02_Ivt02_07
__mEsect_Cel 002,_G02_Ivt02_08,__G02_Ivt02_08
__mEsect_Cel 002,_G02_Ivt02_09,__G02_Ivt02_09
__mEsect_Cel $fff,_G02_Ivt02_06,__G02_Ivt02_06
STOP
;-----------------------------------------------------------------------------
; イベント3
;-----------------------------------------------------------------------------
tEReqNatumiIvent3_0:
; BG
__mEsect_Init1 __EsectIventMain ;実行プログラム名
__mEsect_Init2 060,_NullData,__NullData ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 000,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt30,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_00,__G02_IvtBG03_00 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 000,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_01,__G02_IvtBG03_01 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $080,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_02,__G02_IvtBG03_02 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $100,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_03,__G02_IvtBG03_03 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $150,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_04,__G02_IvtBG03_04 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 000,$100 ;H、V
__mEsect_Init4 1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_08,__G02_Ivt03_08 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 000,$200 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_09,__G02_Ivt03_09 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $080,$200 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_10,__G02_Ivt03_10 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $100,$200 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 058,_G02_Ivt03_11,__G02_Ivt03_11 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $120,$190 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,tAnm_G02_Ivent30 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
STOP
tMov_G02_Ivnt30:
__StopDat 032 ; ワイプが開くまで
__StopDat $120/002
__StopDat 250
STOP
tMov_G02_Ivnt31:
__StopDat 032 ; ワイプが開くまで
__EsectDirDat $120/002,$08e,$002
__StopDat $fff
STOP
tAnm_G02_Ivent30:
__mEsect_Anm 001,tCel_G02_Ivent30
tCel_G02_Ivent30:
__mEsect_Cel 032,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel $120/002,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel 030,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel 007,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel 007,_G02_Ivt03_13,__G02_Ivt03_13
__mEsect_Cel 007,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel 007,_G02_Ivt03_13,__G02_Ivt03_13
__mEsect_Cel 007,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel 007,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel 007,_G02_Ivt03_13,__G02_Ivt03_13
__mEsect_Cel 006,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel 002,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel 002,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel 006,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel 006,_G02_Ivt03_13,__G02_Ivt03_13
__mEsect_Cel 006,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel 006,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel 006,_G02_Ivt03_13,__G02_Ivt03_13
__mEsect_Cel 006,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel 006,_G02_Ivt03_11,__G02_Ivt03_11
__mEsect_Cel 008,_G02_Ivt03_13,__G02_Ivt03_13
__mEsect_Cel 008,_G02_Ivt03_12,__G02_Ivt03_12
__mEsect_Cel $fff,_G02_Ivt03_11,__G02_Ivt03_11
STOP
;-----------------------------------------------------------------------------
end
�G01_Ivt03_14
__mEsect_Cel 005,_G01_Ivt03_16,__G01_Ivt03_16
__mEsect_Cel 005,_G01_Ivt03_15,__G01_Ivt03_15
__mEsect_Cel 005,_G01_Ivt03_14,__G01_Ivt03_14
__mEsect_Cel 005,_G01_Ivt03_16,__G01_Ivt03_16
__mEsect_Cel 007,_G01_Ivt03_15,__G01_Ivt03_15
__mEsect_Cel 007,_G01_Ivt03_16,__G01_Ivt03_16
__mEsect_Cel $fff,_G01_Ivt03_14,__G01_Ivt03_14
STOP
;-----------------------------------------------------------------------------
end
0x62001:
ら場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_TB_koi_ply: ;
pushm #r0/r10-r14/r21-r22 ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_TB_koi_ply ;
give_ini_TB_koi_ply: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
; mov.w [r14](r10),r0 ;目標札ワークの先頭
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_TB_koi_ply ;
get_ini_TB_koi_ply: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
; mov.w [r14](r10),r0 ;目標札ワークの先頭
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_TB_koi_ply: ;
dec.b wbPlyFudaCnt ;札枚数を減らす
mov.b #$02,wbSysCur ;カーソルをスリープモードに移行
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札から場札への移動
;-----------------------------------------------------------------------------
mov_TB_koi_ply: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_TB_koi_ply ;
next_mov_TB_koi_ply: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_TB_koi_ply_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_TB_koi_ply ;
next_mov_TB_koi_ply_ex: ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
; cmp.b #$ff,wbBtoT_fuda4 ;
; be next2_mov_TB_koi_ply ;
; mov.w #wBa_huda,r0 ;
; movz.bw wbFudaForP,r11 ;
; mov.b wbBtoT_fuda4,[r0](r11) ;
; mov.b #$ff,wbBtoT_fuda4 ;
next2_mov_TB_koi_ply: ;
inc.b wbKoiDist ;
end_mov_TB_koi_ply: ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札の詰め
;-----------------------------------------------------------------------------
srt_jam_koi_ply: ;
jsr _Fuda_Mon_SortP ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
end_srt_jam_koi_ply: ;
; dec.b wbPlyFudaCnt ;札枚数を減らす
mov.b #$00,wbKoiDist2_tim ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; 山札を探す(回避も含む)
;-----------------------------------------------------------------------------
src_Ym_koi_ply: ;
pushm #r10/r20 ;
dec.b wbActWaitTim ;ちょっと待った
bne end_src_Ym_koi_ply ;
jsr _Ba_Brk_Cnt ;ブランクのカウント
cmp.b #$01,r20 ;1枚以下なら
ble ex_src_Ym_koi_ply ;イカサマする
job_src_Ym_koi_ply: ;
jsr _Bahuda_Emp ;空き場所を探す
cmp.b #$ff,r20 ;空きがないよ
be ex_src_Ym_koi_ply ;
add.b #$02,wbKoiDist ;イカサマintは無し
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
br end_src_Ym_koi_ply ;
ex_src_Ym_koi_ply: ;イカサマの準備
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;イカサマしないといけないよ
end_src_Ym_koi_ply: ;
popm #r10/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; イカサマint
;-----------------------------------------------------------------------------
mag_mby_koi_ply: ;
pushm #r16-r17/r20 ;
mov.w #$00,r20 ;
mov.w #12,r16 ;
loop_mag_mby_koi_ply: ;
jsr _Koi_Ark_m00 ;
test.b r17 ;
bnz end_mag_mby_koi_ply ;
inc.w r20 ;
dec.w r16 ;
bnz loop_mag_mby_koi_ply ;
jsr Reset ;致命的エラーなのでリセット
end_mag_mby_koi_ply: ;
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
inc.b wbKoiDist ;
popm #r16-r17/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札のめくり動作
;-----------------------------------------------------------------------------
opn_Ym_koi_ply: ;
pushm #r10-r12 ;
mov.w #wFuda,r10 ;
movz.bw wbMtoB_fuda,r11 ;めくり札
shl.w #$05,r11 ;
add.w r10,r11 ;目的ワークの先頭
movz.bw wbKoiDist2_tim,r12 ;
mov.b tOpen__Fuda_Rot(r12),_Fuda_dsp[r11] ;
inc.b wbKoiDist2_tim ;
cmp.b #10,wbKoiDist2_tim ;
bne end_opn_Ym_koi_ply ;
inc.b wbKoiDist ;
jsr _init_Hit_Ok ;
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbTtoB_fuda ;
end_opn_Ym_koi_ply: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r10-r12 ;
rsr ;
;-----------------------------------------------------------------------------
; 叩ける札を探す(山札:場札)
;-----------------------------------------------------------------------------
src2_hit_koi_ply: ;叩ける札を探す(山札:場札)
push r20 ;
jsr _Eva2_hit_jd ;めくり札のヒット評価
test.b wbHitCkB ;
be give_src2_hit_koi_ply ;叩けない
cmp.b #$01,wbHitCkB ;
be sig_src2_hit_koi_ply ;1枚叩ける
cmp.b #$02,wbHitCkB ;
be dbl_src2_hit_koi_ply ;2枚叩ける
nop ;場に3枚以上存在する場合は、
nop ;とばない様に(すり抜けさせる様に)、
nop ;一時的に設定しておく
nop ;
give_src2_hit_koi_ply: ;場に捨てるとき
mov.b #$00,wbFudaMd ;モードの設定
jsr _Bahuda_Emp ;空き場所を探す
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
;; mov.b wbMtoB_fuda,wbBtoT_fuda1 ;
mov.b wbMtoB_fuda,wbTtoB_fuda ;
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b #$ff,wbFudaForN ;エラーを起こさせる
mov.b r20,wbFudaForP ;叩かれ側 札インデックス
br end_src2_hit_koi_ply ;
sig_src2_hit_koi_ply: ;
mov.b #$01,wbFudaMd ;モードの設定
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くやつ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbHitOkB,wbFudaForN ;叩かれ側 札ナンバー
mov.b wbHitOkB,wbBtoT_fuda3 ;起き札に叩かれるヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b wbHitPsB,wbFudaForP ;叩かれ側 札インデックス
mov.b wbHitPsB,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
br end_src2_hit_koi_ply ;
dbl_src2_hit_koi_ply: ;
mov.b #$02,wbFudaMd ;モードの設定
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
end_src2_hit_koi_ply: ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
mov.b #$ff,wbMtoB_fuda ;起き札登録の抹消
inc.b wbKoiDist ;
pop r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 3枚札の選択
;-----------------------------------------------------------------------------
cho2_tre_koi_ply: ;3枚札の選択
push r1 ;
cmp.b #$02,wbFudaMd ;3枚選択モードか?
bne end_cho2_tre_koi_ply ;
mov.b #$00,wbBaCurPos ;初期化
mov.b #$00,wbBaCurAnm ;
mov.b #$00,wbBaCurBusy ;
mov.b #$00,wbBaCurNum ;
mov.b #$00,wbBaYNPos ;
mov.b wbHitPs,wbBaCurPos ;
mov.w #tEsect_Ba_cur,r1 ;選択セットをリクエスト
jsr __Esect_Req ;
jsr __1PKEY_Init ;I/O再初期化
mov.b #ChoFrzIni,wbFudaMovTim ;選択初期硬直時間の設定
push r1 ;
mov.b #SE_Msg,r1 ;メッセージウインドウ
jsr __mya_se ;
pop r1 ;
end_cho2_tre_koi_ply: ;
inc.b wbKoiDist ;
pop r1 ;
rsr ;
;-----------------------------------------------------------------------------
; 3枚札のキー入力待ち
;-----------------------------------------------------------------------------
wat2_tre_koi_ply: ;3枚札のキー入力待ち
pushm #r10/r11/r15 ;
cmp.b #$02,wbFudaMd ;3枚選択モードか?
be frz_wat2_tre_koi_ply ;らしい
; mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;ベクタを進める
br end_wat2_tre_koi_ply ;
frz_wat2_tre_koi_ply: ;
test.b wbFudaMovTim ;
be mod_wat2_tre_koi_ply ;
dec.b wbFudaMovTim ;初期硬直
mov.w #$ff,r15 ;ダミー・ニュートラル
br ini_wat2_tre_koi_ply ;
mod_wat2_tre_koi_ply: ;
jsr __1PKEY_JD ;
ini_wat2_tre_koi_ply: ;
mov.b #$00,wbCurBusy2 ;コンフリクト回避用
mov.b #$00,r20 ;処理続行中
jsr _Sys_tim_gen ;
movz.bw wbBaCurNum,r10 ;ナンバー+α値取得
mov.w #wbHitPsB,r11 ;
mov.b [r11](r10),wbBaCurPos ;ポジションの登録
A_wat2_tre_koi_ply: ;Aボタンチェック
test.h whSysTimDsp ;キャンセルタイマーチェック
be fin_wat2_tre_koi_ply ;
test1 #$03,r15 ;
bne R_wat2_tre_koi_ply ;
PA_wat2_tre_koi_ply: ;
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
push r1 ;
mov.b #SE_Dec1,r1 ;決定音
jsr __mya_se ;
pop r1 ;
test.b wbBaYNPos ;Yesを選んだかいな?
be fin_wat2_tre_koi_ply ;
inc.b wbBaCurNum ;Noを選んだらしい
mov.b #ChoFrzTim,wbFudaMovTim ;硬直時間の再設定
mov.b #$00,wbBaYNPos ;Yesに合わせ直し
cmp.b #$02,wbBaCurNum ;
bne end_wat2_tre_koi_ply ;
mov.b #$00,wbBaCurNum ;
br end_wat2_tre_koi_ply ;
R_wat2_tre_koi_ply: ;右チェック
test1 #$04,r15 ;
bne L_wat2_tre_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$01,wbBaYNPos ;右ループしない
br end_wat2_tre_koi_ply ;
L_wat2_tre_koi_ply: ;左チェック
test1 #$05,r15 ;
bne end_wat2_tre_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$00,wbBaYNPos ;左ループしない
br end_wat2_tre_koi_ply ;
fin_wat2_tre_koi_ply: ;
movz.bw wbBaCurNum,r10 ;ナンバー+α値取得
mov.w #wbHitOkB,r11 ;場札ヒットワーク(3種)
mov.b [r11](r10),wbFudaForN ;叩かれ側 札ナンバー
mov.b [r11](r10),wbBtoT_fuda3 ;
inc.b wbBtoT_fudaC ;カウントする
mov.w #wbHitPsB,r11 ;場札ヒットポジション(3種)
mov.b [r11](r10),wbFudaForP ;叩かれ側 札インデックス
mov.b [r11](r10),r20 ;
jsr _Del_Bafuda ;場札登録の抹消
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;ベクタを進める
mov.b #$01,wbBaCurBusy ;終了!!
end_wat2_tre_koi_ply: ;
popm #r10/r11/r15 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_YB_koi_ply: ;山札から場札への移動のイニシャライズ
pushm #r0/r10-r14/r21-r22 ;
dec.b wbActWaitTim ;待つのだ
bne fin_end_ini_YB_koi_ply ;
init_ini_YB_koi_ply: ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_YB_koi_ply ;
give_ini_YB_koi_ply: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_YB_koi_ply ;
get_ini_YB_koi_ply: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_YB_koi_ply: ;
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
fin_end_ini_YB_koi_ply: ;
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動
;-----------------------------------------------------------------------------
mov_YB_koi_ply: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_YB_koi_ply ;
next_mov_YB_koi_ply: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_YB_koi_ply_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_YB_koi_ply ;
next_mov_YB_koi_ply_ex: ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
; cmp.b #$ff,wbBtoT_fuda1 ;
; be next2_mov_YB_koi_ply ;
; mov.w #wBa_huda,r0 ;
; movz.bw wbFudaForP,r11 ;
; mov.b wbBtoT_fuda1,[r0](r11) ;
; mov.b #$ff,wbBtoT_fuda1 ;
next2_mov_YB_koi_ply: ;
inc.b wbKoiDist ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
end_mov_YB_koi_ply: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_all_koi_ply: ;取った札すべての移動のイニシャライズ
pushm #r1/r10-r14 ;
dec.b wbActWaitTim ;
bne fin_ini_all_koi_ply ;
mov.b #$00,wbFuda1_Tim ;タイマー初期化
mov.b #$00,wbFuda2_Tim ;
mov.b #$00,wbFuda3_Tim ;
mov.b #$00,wbFuda4_Tim ;
mov.w #wbGetFudaP,r10 ;ワーク
jsr _Fuda_Shar_Cnt ;カウントしてみる
jsr _init_GetFuda_PosP ;ポジションの割り出し
job1_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda1,r1 ;
cmp.w #$ff,r1 ;
be job2_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
job2_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda2,r1 ;
cmp.w #$ff,r1 ;
be job3_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
job3_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda3,r1 ;
cmp.w #$ff,r1 ;
be job4_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
job4_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda4,r1 ;
cmp.w #$ff,r1 ;
be end_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
end_ini_all_koi_ply: ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
fin_ini_all_koi_ply: ;
popm #r1/r10-r14 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動
;-----------------------------------------------------------------------------
mov_all_koi_ply: ;
pushm #r0-r3/r10 ;
mov.w #wFuda,r1 ;
mov_all_koi_ply_job1: ;
movz.bw wbFuda1_Tim,r2 ;
mov.b tMov_All_Fuda1(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_job2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_ply_job2 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job1_ex ;
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_ply_job1_ex: ;
movz.bw wbBtoT_fuda1,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_job2: ;
movz.bw wbFuda2_Tim,r2 ;
mov.b tMov_All_Fuda2(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_job3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_ply_job3 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job2_ex ;
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_ply_job2_ex: ;
movz.bw wbBtoT_fuda2,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_job3: ;
movz.bw wbFuda3_Tim,r2 ;
mov.b tMov_All_Fuda3(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_job4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_ply_job4 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job3_ex
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_ply_job3_ex: ;
movz.bw wbBtoT_fuda3,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_job4: ;
movz.bw wbFuda4_Tim,r2 ;
mov.b tMov_All_Fuda4(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_jd1 ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_ply_jd1 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job4_ex
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_ply_job4_ex:
movz.bw wbBtoT_fuda4,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_jd1: ;
movz.bw wbGetIdxP,r2 ;取った札のインデックス
mov.w #wbGetFudaP,r3 ;取った札ワーク
inc.b wbFuda1_Tim ;
cmp.b #16,wbFuda1_Tim ;
bne mov_all_koi_ply_jd2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_ply_jd2 ;
mov.b wbBtoT_fuda1,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda1 ;
jsr _GetFuda_Shar_SetP ;
inc.w r2 ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd2: ;
inc.b wbFuda2_Tim ;
cmp.b #20,wbFuda2_Tim ;
bne mov_all_koi_ply_jd3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_ply_jd3 ;
mov.b wbBtoT_fuda2,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda2 ;
jsr _GetFuda_Shar_SetP ;
inc.w r2 ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd3: ;
inc.b wbFuda3_Tim ;
cmp.b #24,wbFuda3_Tim ;
bne mov_all_koi_ply_jd4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_ply_jd4 ;
mov.b wbBtoT_fuda3,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda3 ;
jsr _GetFuda_Shar_SetP ;
inc.w r2 ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd4: ;
inc.b wbFuda4_Tim ;
cmp.b #28,wbFuda4_Tim ;
bne end_mov_all_koi_ply ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_ply_jd_ex ;
mov.b wbBtoT_fuda4,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda4 ;
jsr _GetFuda_Shar_SetP ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd_ex: ;
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #10,wbActWaitTim ;ウェイトをかます
end_mov_all_koi_ply: ;
popm #r0-r3/r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札のソート
;-----------------------------------------------------------------------------
srt_pul_koi_ply: ;
; pushm #r15/r16 ;
dec.b wbActWaitTim ;
bne fin_srt_pul_koi_ply ;
; mov.w #wbGetFudaP,r15 ;P取った札のナンバー
; mov.w #wbGetIdxP,r16 ;P取った札のインデックス
; jsr _Get_Fuda_Req ;移動札を取り札として登録する
jsr _GetFuda_Sort_SetP ;
jsr _GetFuda_Shar_SetP ;
; mov.b #$ff,wbBtoT_fuda1 ;後始末
; mov.b #$ff,wbBtoT_fuda2 ;
; mov.b #$ff,wbBtoT_fuda3 ;
; mov.b #$ff,wbBtoT_fuda4 ;
job_srt_pul_koi_ply: ;
jsr _GetFuda_Arg_AgnP ;
mov.b #$ff,wbMtoB_fuda ;初期化
mov.b #$ff,wbTtoB_fuda ;
mov.b #$ff,wbBtoT_fuda1 ;
mov.b #$ff,wbBtoT_fuda2 ;
mov.b #$ff,wbBtoT_fuda3 ;
mov.b #$ff,wbBtoT_fuda4 ;
mov.b #$00,wbBtoT_fudaC ;
end_srt_pul_koi_ply: ;
inc.b wbKoiDist ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
; popm #r15/r16 ;
fin_srt_pul_koi_ply: ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札の評価
;-----------------------------------------------------------------------------
eva_pul_koi_ply: ;
pushm #r15-r20 ;
dec.b wbActWaitTim ;
bne end_eva_pul_koi_ply ;
mov.w #wbGetFudaP,r15 ;取った札ワークアドレス
mov.w #wbYakuJdP,r16 ;出来役判定用カウンターワークAD
jsr _Huda_val ;取った札の評価
mov.w #wbYakuJdP,r15 ;出来役判定用カウンターワーク
mov.w #wbYakuJd2P,r16 ;出来役成立用ワーク(総合)
mov.w #wbYakuJd3P,r17 ;出来役成立用ワーク(瞬間)
mov.w #wbYakuCnt2P,r18 ;各出来役文数カウンター
mov.w #wbYakuCntP,r19 ;総文数カウンター(1回での出来役)
mov.w #wbYakuRchP,r20 ;出来役リーチ用ワーク
jsr _Yaku_val ;出来役の評価
inc.b wbKoiDist ;
end_eva_pul_koi_ply: ;
popm #r15-r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 瞬間での出来役演出判定
;-----------------------------------------------------------------------------
ini_dir_mom_koi_ply: ;瞬間での出来役演出判定
push r10 ;
mov.w #wbYakuJd3P,r10 ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_ply ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_ply ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_ply ;
add.b #$06,wbKoiDist ;成立してないや
br end_ini_dir_mom_koi_ply ;
job_ini_dir_mom_koi_ply: ;
; mov.b #$01,wbDPltCk ;ウインドウのセット
mov.b #$00,wbDPltMode ;
mov.b #$01,wbJdKoiKoi ;コイコイをきく必要性がある
jsr _DPlate_Man ;
inc.b wbKoiDist ;
end_ini_dir_mom_koi_ply: ;
; dec.b wbPlyFudaCnt ;札枚数を減らす
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 瞬間での出来役演出
;-----------------------------------------------------------------------------
dir_mom_koi_ply: ;
jsr _DPlate_Man ;
test.b wbDPltCk ;
bne end_dir_mom_koi_ply ;
inc.b wbKoiDist ;
test.b wbMainTask ;
be end_dir_mom_koi_ply ;
test.b wbUpCnt ;
bne end_dir_mom_koi_ply ;
push r1 ;
mov.b #21,r1 ;こいこい後のアップテンポ
jsr __mya_bgm ;
pop r1 ;
inc.b wbUpCnt ;
end_dir_mom_koi_ply: ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイする?ウインドウ
;-----------------------------------------------------------------------------
win_ask_koi_ply: ;
push r25 ;
test.b wbJdKoiKoi ;
be next_win_ask_koi_ply ;
test.b wbPlyFudaCnt ;
be next_win_ask_koi_ply ;
mov.b #$02,wbKoiWindowAction ;こいこいする?
jsr Koi_Window ;
test.b r25 ;
bne end_win_ask_koi_ply ;
next_win_ask_koi_ply: ;
inc.b wbKoiDist ;
end_win_ask_koi_ply: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイの選択
;-----------------------------------------------------------------------------
cho_koi_koi_ply: ;
push r1 ;
test.b wbJdKoiKoi ;
be next_cho_koi_koi_ply ;
test.b wbPlyFudaCnt ;
be next_cho_koi_koi_ply ;
mov.b #$00,wbBaCurBusy ;
mov.b #$00,wbBaYNPos ;
test.b wbDipCntrol ;コンパネ判定
bne job_cho_koi_koi_ply_KB ;
job_cho_koi_koi_ply_JS: ;
mov.w #tEsect_Koi_Ok,r1 ;選択セットをリクエスト
jsr __Esect_Req ;
jsr __1PKEY_Init ;I/O再初期化
br job_cho_koi_koi_ply_ex ;
job_cho_koi_koi_ply_KB: ;
mov.w #tEsect_Koi_Ok2,r1 ;選択セットをリクエスト
jsr __Esect_Req ;
job_cho_koi_koi_ply_ex: ;
mov.b #ChoFrzIni,wbFudaMovTim ;選択初期硬直時間の設定
mov.b #$02,wbSysCur ;カーソルをスリープモードに移行
push r1 ;
mov.b #SE_Msg,r1 ;メッセージウインドウ
jsr __mya_se ;
pop r1 ;
next_cho_koi_koi_ply: ;
inc.b wbKoiDist ;
end_cho_koi_koi_ply: ;
pop r1 ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイのキー入力待ち
;-----------------------------------------------------------------------------
wat_koi_koi_ply: ;
push r15 ;
mov.b #$00,wbCurBusy2 ;コンフリクト回避用
mov.b #$00,r20 ;処理続行中
jsr _Sys_tim_gen ;
inc.b wbRandEx1 ;うりゃー、まわせー
test.b wbJdKoiKoi ;
be next_wat_koi_koi_ply ;
test.b wbPlyFudaCnt ;0枚?
bne ex_wat_koi_koi_ply ;
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
mov.b #$00,wbJdKoiKoi ;
mov.b #$01,wbJdKoiEnd ;
inc.b wbKoiDist ;
br next_wat_koi_koi_ply ;
ex_wat_koi_koi_ply: ;
test.b wbFudaMovTim ;
be job_wat_koi_koi_ply ;
dec.b wbFudaMovTim ;
mov.b #$ff,r15 ;
br end_wat_koi_koi_ply ;
job_wat_koi_koi_ply: ;
test.b wbDipCntrol ;コンパネ判定
bne job_wat_koi_koi_ply_KB ;
job_wat_koi_koi_ply_JS: ;
jsr __1PKEY_JD ;
br A_job_wat_koi_koi_ply ;
job_wat_koi_koi_ply_KB: ;
mov.b #$ff,r15 ;回避手段
jsr __KBKEY_JD ;
mov.b #$01,wbBaCurBusy ;
mov.b #$00,wbBaYNPos ;Y
cmp.b #$01,JOY1PKEY ;
be A_job_wat_koi_koi_ply_ex ;
mov.b #$01,wbBaYNPos ;N
cmp.b #14,JOY1PKEY ;
be A_job_wat_koi_koi_ply_ex ;
mov.b #$00,wbBaCurBusy ;
A_job_wat_koi_koi_ply: ;
; mov.b #$00,wbCurBusy2 ;コンフリクト回避用
; mov.b #$00,r20 ;処理続行中
; jsr _Sys_tim_gen ;
test.h whSysTimDsp ;キャンセルタイマーチェック
bne A_job_wat_koi_koi_ply_Ex ;
test.b wbBaYNPos ;
be AY_job_wat_koi_koi_ply ;
br AN_job_wat_koi_koi_ply ;
; be AN_job_wat_koi_koi_ply ;タイマー切れの場合はNOにする
A_job_wat_koi_koi_ply_Ex: ;
test1 #$03,r15 ;
bne R_job_wat_koi_koi_ply ;
A_job_wat_koi_koi_ply_ex: ;
push r1 ;
mov.b #SE_Dec1,r1 ;決定音
jsr __mya_se ;
pop r1 ;
test.b wbBaYNPos ;
bne AN_job_wat_koi_koi_ply ;
AY_job_wat_koi_koi_ply: ;
mov.b #$00,wbJdKoiEnd ;
br AX_job_wat_koi_koi_ply ;
AN_job_wat_koi_koi_ply: ;
mov.b #$00,wbJdKoiKoi ;
mov.b #$01,wbJdKoiEnd ;
inc.b wbKoiDist ;
AX_job_wat_koi_koi_ply: ;
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
mov.b #$00,wbBaYNPos ;
mov.b #$01,wbBaCurBusy ;
br next_wat_koi_koi_ply ;
R_job_wat_koi_koi_ply: ;
test1 #$04,r15 ;
bne L_job_wat_koi_koi_ply ;
test.b wbBaYNPos ;
bne end_wat_koi_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$01,wbBaYNPos ;
br end_wat_koi_koi_ply ;
L_job_wat_koi_koi_ply: ;
test1 #$05,r15 ;
bne end_wat_koi_koi_ply ;
test.b wbBaYNPos ;
be end_wat_koi_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$00,wbBaYNPos ;
br end_wat_koi_koi_ply ;
next_wat_koi_koi_ply: ;
inc.b wbKoiDist ;
end_wat_koi_koi_ply: ;
pop r15 ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイしてくれたウインドウ
;-----------------------------------------------------------------------------
win_koi_koi_ply: ;
push r25 ;
test.b wbJdKoiKoi ;
be next_win_koi_koi_ply ;
mov.b #$03,wbKoiWindowAction ;コイコイしてくれてアリガト
jsr Koi_Window ;
test.b r25 ;
bne end_win_koi_koi_ply ;
next_win_koi_koi_ply: ;
; mov.b #$01,wbSysCur ;カーソル解放
mov.b #$00,wbJdKoiKoi ;
inc.b wbKoiDist ;
inc.b wbKoiDist ;
end_win_koi_koi_ply: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 勝ち負けウインドウ
;-----------------------------------------------------------------------------
win_res_koi_ply: ;
push r25 ;
test.b wbJdKoiEnd ;
be next_win_res_koi_ply ;
mov.b #$01,wbRikoSysCk ;リコ・システムOFF
mov.b #$05,wbKoiWindowAction ;勝ったよぉ
jsr Koi_Window ;
test.b r25 ;
bne end_win_res_koi_ply ;
; mov.b #$01,wbSysCur ;カーソル解放
mov.b #$00,wbJdKoiEnd ;
; mov.b #$01,wbSPltCk ;
mov.b #$00,wbDPltMode ;
mov.b #24,wbKoiTask ;集計処理へ
mov.b #$00,wbKoiDist ;
br end_win_res_koi_ply ;
next_win_res_koi_ply: ;
inc.b wbKoiDist ;
end_win_res_koi_ply: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 後処理
;-----------------------------------------------------------------------------
next_koi_ply: ;
end_next_koi_ply: ;
mov.b #$00,wbKoiDist ;
inc.b wbKoiTask ;上位タスクも進める
rsr ;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; CPUの順番
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
tkoi_cpu_sec: ;
dw init_koi_cpu ;初期イニシャライズ
dw win_str_koi_cpu ;スタートウインドウ
dw src_hit_koi_cpu ;叩ける札を探す
dw ini_TB_koi_cpu ;手札から場札への移動のイニシャライズ
dw mov_TB_koi_cpu ;手札から場札への移動
dw srt_jam_koi_cpu ;手札の詰め
dw src_Ym_koi_cpu ;山札を探す(回避も含む)
dw mag_mby_koi_cpu ;イカサマint
dw opn_Ym_koi_cpu ;山札のめくり動作
dw src2_hit_koi_cpu ;叩ける札を探す(山札:場札)
dw ini_YB_koi_cpu ;山札から場札への移動のイニシャライズ
dw mov_YB_koi_cpu ;山札から場札への移動
dw ini_all_koi_cpu ;取った札すべての移動のイニシャライズ
dw mov_all_koi_cpu ;取った札すべての移動
dw srt_pul_koi_cpu ;取った札のソート
dw eva_pul_koi_cpu ;取った札の評価
dw ini_dir_mom_koi_cpu ;瞬間での出来役演出判定
dw dir_mom_koi_cpu ;瞬間での出来役演出
; dw win_ask_koi_cpu ;コイコイする?ウインドウ
dw cho_koi_koi_cpu ;コイコイの選択
; dw wat_koi_koi_cpu ;コイコイのキー入力待ち
dw win_koi_koi_cpu ;コイコイしてくれたウインドウ
dw win_res_koi_cpu ;勝ち負けウインドウ
dw next_koi_cpu ;後処理
;-----------------------------------------------------------------------------
koi_cpu_sec: ;CPUセクション
push r10 ;
movz.bw wbKoiDist,r10 ;
mov.w tkoi_cpu_sec(r10),r10 ;
jsr [r10] ;
jsr Fuda_Pri_Man ;
jsr Fuda_Esect ;
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 初期イニシャライズ
;-----------------------------------------------------------------------------
init_koi_cpu: ;
; jsr _init_Get_Fuda ;「取った札」用ワークの初期化
; jsr _Yaku_val_init ;出来役評価用ワークの初期化
mov.b #$00,wbJdKoiKoi ;
mov.b #$00,wbJdKoiEnd ;
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; スタートウインドウ
;-----------------------------------------------------------------------------
win_str_koi_cpu: ;
push r25 ;
cmp.b #$08,wbCpuFudaCnt ;初回判定
bne next_win_str_koi_cpu ;
test1 #$00,wbKoiOrd ;
be next_win_str_koi_cpu ;
mov.b #$01,wbKoiWindowAction ;スタートウインドウ
jsr Koi_Window ;
test.b r25 ;
bne end_win_str_koi_cpu ;
next_win_str_koi_cpu: ;
inc.b wbKoiDist ;
end_win_str_koi_cpu: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 叩ける札を探す
;-----------------------------------------------------------------------------
src_hit_koi_cpu: ;
pushm #r10/r15-r18/r20 ;
mov.w #wCpu_Tehuda,r10 ;
jsr _init_Hit_Ok ;札ヒットワークの初期化
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbMtoB_fuda ;初期化
mov.b #$ff,wbTtoB_fuda ;
mov.b #$ff,wbBtoT_fuda1 ;
mov.b #$ff,wbBtoT_fuda2 ;
mov.b #$ff,wbBtoT_fuda3 ;
mov.b #$ff,wbBtoT_fuda4 ;
mov.b #$00,wbBtoT_fudaC ;
mov.w #$00,wBrankFuda ;初期化
mov.w #$00,wBrankFuda+$04 ;
mov.w #$00,wBrankFuda+$08 ;
mov.b #$00,wbFudaMd ;モードセット
cmp.b #07,wbGameLv ;Lv.8で思考切り替え
bh src_hit_koi_cpu2 ;
src_hit_koi_cpu1: ;
jsr _Koi_Ai_m00 ;ノーマル思考
br src_hit_koi_cpu3 ;
src_hit_koi_cpu2: ;
jsr _Koi_Ai_m01 ;指向性思考
src_hit_koi_cpu3: ;
test.b wbAiHmax ;
bne sig_src_hit_koi_cpu ;
give_src_hit_koi_cpu: ;
mov.b r15,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b r15,wbTtoB_fuda ;移動札としての登録
mov.b #$ff,[r10](r17) ;手札内からの登録抹消
movt.wb r17,wbFudaFrmP ;叩く側(捨てる) 札インデックス
mov.b #$ff,wbFudaForN ;エラーを起こさせる
jsr _Bahuda_Emp ;場札の空き場所を探す
mov.b r20,wbFudaForP ;叩く側(捨てる) 札インデックス
br end_src_hit_koi_cpu ;
sig_src_hit_koi_cpu: ;
mov.b #$01,wbFudaMd ;モードの設定
mov.b r15,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b r15,wbBtoT_fuda2 ;手札移動登録
inc.b wbBtoT_fudaC ;カウントする
mov.b #$ff,[r10](r17) ;手札内からの登録抹消
movt.wb r17,wbFudaFrmP ;叩く側(捨てる) 札インデックス
mov.b r16,wbFudaForN ;叩かれ側 札ナンバー
mov.b r16,wbBtoT_fuda4 ;手札に叩かれ移動登録
inc.b wbBtoT_fudaC ;カウントする
movt.wb r18,wbFudaForP ;叩かれ側 札インデックス
movt.wb r18,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
end_src_hit_koi_cpu: ;
inc.b wbKoiDist ;
popm #r10/r15-r18/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札から場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_TB_koi_cpu: ;
pushm #r0/r10-r14/r21-r22 ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;
mov.w r0,r12 ;札を表に開く
shl.w #$05,r12 ;
add.w r11,r12 ;
mov.b #$04,_Fuda_dsp[r12] ;
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_TB_koi_cpu ;
give_ini_TB_koi_cpu: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_TB_koi_cpu ;
get_ini_TB_koi_cpu: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_TB_koi_cpu: ;
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札から場札への移動
;-----------------------------------------------------------------------------
mov_TB_koi_cpu: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_TB_koi_cpu ;
next_mov_TB_koi_cpu: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_TB_koi_cpu_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_TB_koi_cpu ;
next_mov_TB_koi_cpu_ex: ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
next2_mov_TB_koi_cpu: ;
inc.b wbKoiDist ;
end_mov_TB_koi_cpu: ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札の詰め
;-----------------------------------------------------------------------------
srt_jam_koi_cpu: ;
jsr _Fuda_Mon_SortC ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
end_srt_jam_koi_cpu: ;
mov.b #$00,wbKoiDist2_tim ;
add.h #26,whGetFudaBMaxC ;役札のMAXが増える
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; 山札を探す(回避も含む)
;-----------------------------------------------------------------------------
src_Ym_koi_cpu: ;
pushm #r10/r20 ;
dec.b wbActWaitTim ;
bne end_src_Ym_koi_cpu ;
jsr _Ba_Brk_Cnt ;ブランクのカウント
cmp.b #$01,r20 ;1枚以下なら
ble ex_src_Ym_koi_cpu ;イカサマする
job_src_Ym_koi_cpu: ;
jsr _Bahuda_Emp ;空き場所を探す
cmp.b #$ff,r20 ;空きがないよ
be ex_src_Ym_koi_cpu ;
add.b #$02,wbKoiDist ;イカサマintは無し
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
br end_src_Ym_koi_cpu ;
ex_src_Ym_koi_cpu: ;イカサマの準備
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;イカサマしないといけないよ
end_src_Ym_koi_cpu: ;
popm #r10/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; イカサマint
;-----------------------------------------------------------------------------
mag_mby_koi_cpu: ;
pushm #r16-r17/r20 ;
mov.w #$00,r20 ;
mov.w #12,r16 ;
loop_mag_mby_koi_cpu: ;
jsr _Koi_Ark_m00 ;
test.b r17 ;
bnz end_mag_mby_koi_cpu ;
inc.w r20 ;
dec.w r16 ;
bnz loop_mag_mby_koi_cpu ;
jsr Reset ;致命的エラーなのでリセット
end_mag_mby_koi_cpu: ;
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
inc.b wbKoiDist ;
popm #r16-r17/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札のめくり動作
;-----------------------------------------------------------------------------
opn_Ym_koi_cpu: ;
pushm #r10-r12 ;
mov.w #wFuda,r10 ;
movz.bw wbMtoB_fuda,r11 ;めくり札
shl.w #$05,r11 ;
add.w r10,r11 ;目的ワークの先頭
movz.bw wbKoiDist2_tim,r12 ;
mov.b tOpen__Fuda_Rot(r12),_Fuda_dsp[r11] ;
inc.b wbKoiDist2_tim ;
cmp.b #10,wbKoiDist2_tim ;
bne end_opn_Ym_koi_cpu ;
inc.b wbKoiDist ;
jsr _init_Hit_Ok ;
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbTtoB_fuda ;
end_opn_Ym_koi_cpu: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r10-r12 ;
rsr ;
;-----------------------------------------------------------------------------
; 叩ける札を探す(山札:場札)
;-----------------------------------------------------------------------------
src2_hit_koi_cpu: ;叩ける札を探す(山札:場札)
push r20 ;
jsr _Eva2_hit_jd ;めくり札のヒット評価
test.b wbHitCkB ;
be give_src2_hit_koi_cpu ;叩けない
cmp.b #$01,wbHitCkB ;
be sig_src2_hit_koi_cpu ;1枚叩ける
cmp.b #$02,wbHitCkB ;
be dbl_src2_hit_koi_cpu ;2枚叩ける
nop ;場に3枚以上存在する場合は、
nop ;とばない様に(すり抜けさせる様に)、
nop ;一時的に設定しておく
nop ;
give_src2_hit_koi_cpu: ;場に捨てるとき
mov.b #$00,wbFudaMd ;モードの設定
jsr _Bahuda_Emp ;空き場所を探す
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbTtoB_fuda ;
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b #$ff,wbFudaForN ;エラーを起こさせる
mov.b r20,wbFudaForP ;叩かれ側 札インデックス
br end_src2_hit_koi_cpu ;
sig_src2_hit_koi_cpu: ;
mov.b #$01,wbFudaMd ;モードの設定
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くやつ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbHitOkB,wbFudaForN ;叩かれ側 札ナンバー
mov.b wbHitOkB,wbBtoT_fuda3 ;起き札に叩かれるヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b wbHitPsB,wbFudaForP ;叩かれ側 札インデックス
mov.b wbHitPsB,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
br end_src2_hit_koi_cpu ;
dbl_src2_hit_koi_cpu: ;
mov.b #$02,wbFudaMd ;モードの設定
; mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
; mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くヤツ
; inc.b wbBtoT_fudaC ;カウントする
; mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くやつ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbHitOkB,wbFudaForN ;叩かれ側 札ナンバー
mov.b wbHitOkB,wbBtoT_fuda3 ;起き札に叩かれるヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b wbHitPsB,wbFudaForP ;叩かれ側 札インデックス
mov.b wbHitPsB,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
end_src2_hit_koi_cpu: ;
mov.b #$ff,wbMtoB_fuda ;起き札登録の抹消
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;
pop r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_YB_koi_cpu: ;山札から場札への移動のイニシャライズ
pushm #r0/r10-r14/r21-r22 ;
dec.b wbActWaitTim ;
bne fin_ini_YB_koi_cpu ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_YB_koi_cpu ;
give_ini_YB_koi_cpu: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_YB_koi_cpu ;
get_ini_YB_koi_cpu: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_YB_koi_cpu: ;
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
fin_ini_YB_koi_cpu: ;
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動
;-----------------------------------------------------------------------------
mov_YB_koi_cpu: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_YB_koi_cpu ;
next_mov_YB_koi_cpu: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_YB_koi_cpu_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_YB_koi_cpu ;
next_mov_YB_koi_cpu_ex: ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
next2_mov_YB_koi_cpu: ;
inc.b wbKoiDist ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
end_mov_YB_koi_cpu: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_all_koi_cpu: ;取った札すべての移動のイニシャライズ
pushm #r0/r10-r16/r21-r22 ;
dec.b wbActWaitTim ;
bne fin_ini_all_koi_cpu ;
mov.b #$00,wbFuda1_Tim ;タイマー初期化
mov.b #$00,wbFuda2_Tim ;
mov.b #$00,wbFuda3_Tim ;
mov.b #$00,wbFuda4_Tim ;
mov.w #wbGetFudaC,r10 ;ワーク
jsr _Fuda_Shar_Cnt ;カウントしてみる
jsr _init_GetFuda_PosC ;ポジションの割り出し
job1_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda1,r1 ;
cmp.w #$ff,r1 ;
be job2_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
job2_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda2,r1 ;
cmp.w #$ff,r1 ;
be job3_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
job3_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda3,r1 ;
cmp.w #$ff,r1 ;
be job4_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
job4_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda4,r1 ;
cmp.w #$ff,r1 ;
be end_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
end_ini_all_koi_cpu: ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
fin_ini_all_koi_cpu: ;
popm #r0/r10-r16/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動
;-----------------------------------------------------------------------------
mov_all_koi_cpu: ;
pushm #r0-r3/r10 ;
mov.w #wFuda,r1 ;
mov_all_koi_cpu_job1: ;
movz.bw wbFuda1_Tim,r2 ;
mov.b tMov_All_Fuda1(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_job2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_cpu_job2 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job1_ex
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_cpu_job1_ex:
movz.bw wbBtoT_fuda1,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_job2: ;
movz.bw wbFuda2_Tim,r2 ;
mov.b tMov_All_Fuda2(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_job3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_cpu_job3 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job2_ex
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_cpu_job2_ex:
movz.bw wbBtoT_fuda2,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_job3: ;
movz.bw wbFuda3_Tim,r2 ;
mov.b tMov_All_Fuda3(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_job4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_cpu_job4 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job3_ex
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_cpu_job3_ex:
movz.bw wbBtoT_fuda3,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_job4: ;
movz.bw wbFuda4_Tim,r2 ;
mov.b tMov_All_Fuda4(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_jd1 ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_cpu_jd1 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job4_ex
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_cpu_job4_ex:
movz.bw wbBtoT_fuda4,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_jd1: ;
movz.bw wbGetIdxC,r2 ;取った札のインデックス
mov.w #wbGetFudaC,r3 ;取った札ワーク
inc.b wbFuda1_Tim ;
cmp.b #16,wbFuda1_Tim ;
bne mov_all_koi_cpu_jd2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_cpu_jd2 ;
mov.b wbBtoT_fuda1,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda1 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd2: ;
inc.b wbFuda2_Tim ;
cmp.b #20,wbFuda2_Tim ;
bne mov_all_koi_cpu_jd3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_cpu_jd3 ;
mov.b wbBtoT_fuda2,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda2 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd3: ;
inc.b wbFuda3_Tim ;
cmp.b #24,wbFuda3_Tim ;
bne mov_all_koi_cpu_jd4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_cpu_jd4 ;
mov.b wbBtoT_fuda3,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda3 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd4: ;
inc.b wbFuda4_Tim ;
cmp.b #28,wbFuda4_Tim ;
bne end_mov_all_koi_cpu ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_cpu_jd_ex ;
mov.b wbBtoT_fuda4,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda4 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd_ex: ;
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #10,wbActWaitTim ;ウェイトをかます
end_mov_all_koi_cpu: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r0-r3/r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札のソート
;-----------------------------------------------------------------------------
srt_pul_koi_cpu: ;
; pushm #r15/r16 ;
dec.b wbActWaitTim ;
bne end_srt_pul_koi_cpu ;
; mov.w #wbGetFudaC,r15 ;P取った札のナンバー
; mov.w #wbGetIdxC,r16 ;P取った札のインデックス
; jsr _Get_Fuda_Req ;移動札を取り札として登録する
jsr _GetFuda_Sort_SetC ;
jsr _GetFuda_Shar_SetC ;
; mov.b #$ff,wbBtoT_fuda1 ;後始末
; mov.b #$ff,wbBtoT_fuda2 ;
; mov.b #$ff,wbBtoT_fuda3 ;
; mov.b #$ff,wbB
0x71C54:
ECT.MAC : Macro for Esect Initial data table
; written by Manaby
; Copyright (c) 1995-1997 VISCO corp. All rights reserved.
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; __mEsect_Init :データ形式用マクロ
; :詳しくは下を参照
; :4つで1組
; :
;-----------------------------------------------
0x74000:
;-----------------------------------------------------------------------------
; KOI_GAME.S : KOIKOI Game Program
; written by Manaby
; Copyright (c) 1995-1997 VISCO corp. All rights reserved.
;------------------------------------------------------------------------------
include mac\esect.mac
include inc\manaby.inc
include inc\system.inc
include inc\koikoi.inc
include inc\koi_sys.inc
xdef koi_ply_sec,koi_cpu_sec,koi_scr_sum
xdef tTehudaPosP,tTehudaPosC,Fuda_Pri_Man
xdef koi_ex_sum,_Fuda_Shar_Cnt
xdef _GetFuda_Arg_AgnC,_init_GetFuda_SetC,_init_GetFuda_PosC
xdef tEsect_Koi_Ok,tEsect_Koi_Ok2,_GetFuda_Arg_AgnP
xdef tMov_All_Fuda1,tMov_All_Fuda2,tMov_All_Fuda3,tMov_All_Fuda4
xdef _init_GetFuda_PosP,_init_GetFuda_SetP,_Ba_Brk_Cnt,_ActWaitTim
xdef tEsect_Ba_cur,ChoFrzIni,ChoFrzTim,tBahudaPos1,tBahudaPos2
xdef _Del_Bafuda,tEsect_Fuda_Hurry
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; EQU領域
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
ChoFrzIni equ 24 ;選択初期硬直時間
ChoFrzTim equ 16 ;選択再初期硬直時間
_ActWaitTim equ 06 ;ゲーム中のウェイト用タイマー値
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; ワーク領域
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
.section work
.align 4
xdefon
wbFudaMd ds 01 ;札モード(0:捨てる)
; (1:1枚叩く)
; (2:2枚から選択)
wbFudaFrmN ds 01 ;叩く側(捨てる) 札ナンバー
wbFudaFrmP ds 01 ;叩く側(捨てる) 札インデックス
wbFudaForN ds 01 ;叩かれ側 札ナンバー
wbFudaForP ds 01 ;叩かれ側 札インデックス
wbBaCurPos ds 01 ;場札3枚以上の場合の選択時のカーソルポインタ
wbBaCurAnm ds 01 ;場札3枚以上の場合の選択時のアニメポインタ
wbBaCurBusy ds 01 ;場札3枚以上の場合の選択時のbusyフラグ用
wbBaCurNum ds 01 ;候補の場札の何枚目を選択しているか?
wbFudaMovTim ds 01 ;札移動タイマー
wbBaYNPos ds 01 ;Yes・Noポジション
wbMtoB_fuda ds 01 ;めくり札から場札への移動札ワーク
wbTtoB_fuda ds 01 ;手札から場札への捨て札用ワーク
wbBtoT_fuda1 ds 01 ;起き札
wbBtoT_fuda2 ds 01 ;手札
wbBtoT_fuda3 ds 01 ;起き札に叩かれる方
wbBtoT_fuda4 ds 01 ;手札に叩かれる方
wbBtoT_fudaC ds 01 ;場札から取り札への移動札の枚数カウント用
wbFuda1_Tim ds 01 ;札移動タイマー1
wbFuda2_Tim ds 01 ;札移動タイマー2
wbFuda3_Tim ds 01 ;札移動タイマー3
wbFuda4_Tim ds 01 ;札移動タイマー4
wBrankFuda ds 12 ;空いている場札の場所を正確にチェックする
wbJdKoiKoi ds 01 ;コイコイ選択をする必要性があるか?
wbJdKoiEnd ds 01 ;コイコイしなかった(集計へ)
wbYakuOya ds 01 ;親権発生フラグ
wbFudaHurry ds 01 ;「札を切ってね」表示用
wbActWaitTim ds 01 ;ゲーム中のウェイト用タイマー
wbUpCnt ds 01 ;BGMアップテンポチェック用
xdefoff
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; メイン領域
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
.section main
.align 4
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; プレイヤーの順番
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
tkoi_ply_sec: ;
dw init_koi_ply ;初期イニシャライズ
dw win_str_koi_ply ;スタートウインドウ
dw src_hit_koi_ply ;叩ける札を探す
dw wat_key_koi_ply ;キー入力待ち
dw bra_key_koi_ply ;入力結果の分析
; dw cho_tre_koi_ply ;3枚札の選択
; dw wat_tre_koi_ply ;3枚札のキー入力待ち
dw ini_TB_koi_ply ;手札から場札への移動のイニシャライズ
dw mov_TB_koi_ply ;手札から場札への移動
dw srt_jam_koi_ply ;手札の詰め
dw src_Ym_koi_ply ;山札を探す(回避も含む)
dw mag_mby_koi_ply ;イカサマint
dw opn_Ym_koi_ply ;山札のめくり動作
dw src2_hit_koi_ply ;叩ける札を探す(山札:場札)
; dw cho2_tre_koi_ply ;3枚札の選択
; dw wat2_tre_koi_ply ;3枚札のキー入力待ち
dw ini_YB_koi_ply ;山札から場札への移動のイニシャライズ
dw mov_YB_koi_ply ;山札から場札への移動
dw ini_all_koi_ply ;取った札すべての移動のイニシャライズ
dw mov_all_koi_ply ;取った札すべての移動
dw srt_pul_koi_ply ;取った札のソート
dw eva_pul_koi_ply ;取った札の評価
dw ini_dir_mom_koi_ply ;瞬間での出来役演出判定
dw dir_mom_koi_ply ;瞬間での出来役演出
dw win_ask_koi_ply ;コイコイする?ウインドウ
dw cho_koi_koi_ply ;コイコイの選択
dw wat_koi_koi_ply ;コイコイのキー入力待ち
dw win_koi_koi_ply ;コイコイしてくれたウインドウ
dw win_res_koi_ply ;勝ち負けウインドウ
dw next_koi_ply ;後処理
;-----------------------------------------------------------------------------
koi_ply_sec: ;プレイヤーセクション
push r10 ;
movz.bw wbKoiDist,r10 ;
mov.w tkoi_ply_sec(r10),r10 ;オラオラオラオラー
jsr [r10] ;
jsr Fuda_Pri_Man ;
jsr Fuda_Esect ;
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 初期イニシャライズ
;-----------------------------------------------------------------------------
init_koi_ply: ;
; jsr _init_Get_Fuda ;「取った札」用ワークの初期化
; jsr _Yaku_val_init ;出来役評価用ワークの初期化
jsr __1PKEY_Init ;I/O初期化
mov.b #$ff,wbCurIO ;初期入力はニュートラルにする
mov.b #$00,wbCurBusy ;動作制限を解除
mov.b #$00,wbCurPos ;カーソルポジションの初期化
; mov.b #$01,wbSysCur ;カーソルをノーマルモードに移行
mov.b #$00,wbJdKoiKoi ;
mov.b #$00,wbJdKoiEnd ;
mov.b #$00,wbDPltVct ;
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; スタートウインドウ
;-----------------------------------------------------------------------------
win_str_koi_ply: ;
push r25 ;
cmp.b #$08,wbCpuFudaCnt ;初回判定
bne next_win_str_koi_ply ;
test1 #$00,wbKoiOrd ;
bne next_win_str_koi_ply ;
mov.b #$00,wbKoiWindowAction ;スタートウインドウ
jsr Koi_Window ;
test.b r25 ;
bne end_win_str_koi_ply ;
next_win_str_koi_ply: ;
mov.b #$01,wbSysCur ;カーソルをノーマルモードに移行
inc.b wbKoiDist ;
end_win_str_koi_ply: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 叩ける札を探す
;-----------------------------------------------------------------------------
src_hit_koi_ply: ;
pushm #r1/r3 ;
jsr _init_Hit_Ok ;札ヒットワークの初期化
mov.w #wPly_Tehuda,r3 ;
jsr _Eva_hit_jd ;札のヒット評価
inc.b wbKoiDist ;
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbMtoB_fuda ;初期化
mov.b #$ff,wbTtoB_fuda ;
mov.b #$ff,wbBtoT_fuda1 ;
mov.b #$ff,wbBtoT_fuda2 ;
mov.b #$ff,wbBtoT_fuda3 ;
mov.b #$ff,wbBtoT_fuda4 ;
mov.b #$00,wbBtoT_fudaC ;
mov.w #$00,wBrankFuda ;初期化
mov.w #$00,wBrankFuda+$04 ;
mov.w #$00,wBrankFuda+$08 ;
mov.w #$00,wbMarker ;
mov.w #$00,wbMarker+$04 ;
mov.b #$01,wbMarkerCk ;マーカー始動
mov.b #$01,wbFudaHurry ;「札を切ってね」パネルの始動
mov.w #tEsect_Fuda_Hurry,r1 ;「札を切ってね」をリクエスト
jsr __Esect_Req ;
; mov.b #$00,wbCurPos ;カーソルポジションの初期化
popm #r1/r3 ;
rsr ;
;-----------------------------------------------------------------------------
; キー入力待ち
;-----------------------------------------------------------------------------
wat_key_koi_ply: ;
pushm #r15/r20 ;
mov.b #$00,r20 ;処理続行中
jsr _Sys_tim_gen ;
inc.b wbRandEx1 ;うりゃー、まわせー
test.b wbDipCntrol ;コンパネ判定
bne wat_key_koi_ply_KB ;
wat_key_koi_ply_JS: ;
test.b wbDemoPlay ;
be wat2_key_koi_ply_JS ;
mov.b #$f7,r15 ;デモプレイ中は強制入力
br wat3_key_koi_ply_JS ;
wat2_key_koi_ply_JS: ;
jsr __1PKEY_JD ;
wat3_key_koi_ply_JS: ;
mov.b r15,wbCurIO ;
; mov.b JOY1PKEY,wbCurIO ;
br wat_key_koi_ply_ex ;
wat_key_koi_ply_KB: ;
test.b wbDemoPlay ;
be wat2_key_koi_ply_KB ;
mov.b #$01,JOY1PKEY ;デモプレイ中は強制入力
br wat3_key_koi_ply_KB ;
wat2_key_koi_ply_KB: ;
jsr __KBKEY_JD ;
test.b JOY1PKEY ;
be wat_key_koi_ply_ex ;
wat3_key_koi_ply_KB: ;
cmp.b wbPlyFudaCnt,JOY1PKEY ;
bh wat_key_koi_ply_ex ;
mov.b JOY1PKEY,r15 ;
dec.b r15 ;
mov.b r15,wbCurPos ;
mov.b #$01,wbCurBusy ;
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
wat_key_koi_ply_ex: ;
mov.b #$00,wbCurBusy2 ;コンフリクト回避用
; mov.b #$00,r20 ;処理続行中
; jsr _Sys_tim_gen ;
test.h whSysTimDsp ;タイマーは稼働終了か?
be det_wat_key_koi_ply ;強制終了へ
test.b wbCurBusy ;
be end_wat_key_koi_ply ;
det_wat_key_koi_ply: ;決定
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
mov.b #$00,wbCurBusy ;
inc.b wbKoiDist ;
mov.b #$00,wbMarkerCk ;マーカー停止
mov.b #$00,wbFudaHurry ;「札を切ってね」パネルの強制停止
end_wat_key_koi_ply: ;
popm #r15/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 入力結果の分析
;-----------------------------------------------------------------------------
bra_key_koi_ply: ;
; pushm #r3/r4 ;
pushm #r10-r15/r20 ;
movz.bw wbCurPos,r10 ;カーソル位置の取得
mov.w #wbHitOk,r11 ;札ヒットワーク(8枚*3種)
mov.w #wbHitCk,r12 ;札ヒットフラグ(8枚)
mov.w #wbHitPs,r13 ;札ヒットポジション(8枚*3種)
mov.w #wPly_Tehuda,r14 ;プレイヤー手札ワーク
test.b [r12](r10) ;こいつは叩くことが出来るか?
be give_bra_key_koi_ply ;こいつは叩けないよ
cmp.b #$01,[r12](r10) ;
be sig_bra_key_koi_ply ;1枚だけ叩ける
cmp.b #$02,[r12](r10) ;
be dbl_bra_key_koi_ply ;2枚も叩ける
nop ;場に3枚以上存在する場合は、
nop ;とばない様に(すり抜けさせる様に)、
nop ;一時的に設定しておく
nop ;
give_bra_key_koi_ply: ;場に捨てるとき
mov.b #$00,wbFudaMd ;モードの設定
jsr _Bahuda_Emp ;場札の空き場所を探す
mov.b [r14](r10),wbFudaFrmN ;叩く側(捨てる) 札ナンバー
;; mov.b [r14](r10),wbBtoT_fuda2 ;手札捨てるべし
mov.b [r14](r10),wbTtoB_fuda ;移動札としての登録
mov.b #$ff,[r14](r10) ;手札内からの登録抹消
movt.wb r10,wbFudaFrmP ;叩く側(捨てる) 札インデックス
mov.b #$ff,wbFudaForN ;エラーを起こさせる
mov.b r20,wbFudaForP ;叩く側(捨てる) 札インデックス
; mov.w #whAiBrainNo,r3 ;自動のーみそ吸い取り機
; movz.bh wbPlyFudaCnt,r4 ;
; add.h r4,[r3](r10) ;
br end_bra_key_koi_ply ;
sig_bra_key_koi_ply: ;合わせ札が1枚のとき
mov.b #$01,wbFudaMd ;モードの設定
mov.w r10,r15 ;逃がす
; mov.w #whAiBrainOk,r3 ;自動のーみそ吸い取り機
; movz.bh wbPlyFudaCnt,r4 ;
; add.h r4,[r3](r10) ;
mul.w #$03,r15 ;単位を合わせる
mov.b [r14](r10),wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b [r14](r10),wbBtoT_fuda2 ;手札移動登録
inc.b wbBtoT_fudaC ;カウントする
; mov.b [r14](r10),wbTtoB_fuda ;移動札としての登録
mov.b #$ff,[r14](r10) ;手札内からの登録抹消
movt.wb r10,wbFudaFrmP ;叩く側(捨てる) 札インデックス
mov.b [r11](r15),wbFudaForN ;叩かれ側 札ナンバー
mov.b [r11](r15),wbBtoT_fuda4 ;手札に叩かれ移動登録
inc.b wbBtoT_fudaC ;カウントする
; mov.b #$ff,[r11](r15) ;場札登録の抹消
mov.b [r13](r15),wbFudaForP ;叩かれ側 札インデックス
mov.b [r13](r15),r20 ;
jsr _Del_Bafuda ;場札登録の抹消
br end_bra_key_koi_ply ;
dbl_bra_key_koi_ply: ;合わせ札が2枚のとき
mov.b #$02,wbFudaMd ;モードの設定
; mov.w #whAiBrainOk,r3 ;自動のーみそ吸い取り機
; movz.bh wbPlyFudaCnt,r4 ;
; add.h r4,[r3](r10) ;
mov.b [r14](r10),wbFudaFrmN ;叩く側(捨てる) 札ナンバー
; mov.b [r14](r10),wbTtoB_fuda ;移動札としての登録
mov.b [r14](r10),wbBtoT_fuda2 ;手札移動登録
inc.b wbBtoT_fudaC ;カウントする
mov.b #$ff,[r14](r10) ;手札内からの登録抹消
movt.wb r10,wbFudaFrmP ;叩く側(捨てる) 札インデックス
end_bra_key_koi_ply: ;
inc.b wbKoiDist ;
popm #r10-r15/r20 ;
; popm #r3/r4 ;
rsr ;
;-----------------------------------------------------------------------------
; 3枚札の選択
;-----------------------------------------------------------------------------
cho_tre_koi_ply: ;
pushm #r1/r10-r11 ;
cmp.b #$02,wbFudaMd ;3枚選択モードか?
bne end_cho_tre_koi_ply ;違うっす
mov.b #$00,wbBaCurPos ;初期化
mov.b #$00,wbBaCurAnm ;
mov.b #$00,wbBaCurBusy ;
mov.b #$00,wbBaCurNum ;
mov.b #$00,wbBaYNPos ;
movz.bw wbCurPos,r10 ;カーソル位置の取得
mul.w #$03,r10 ;
mov.w #wbHitPs,r11 ;札ヒットポジション(8枚*3種)
mov.b [r11](r10),wbBaCurPos ;初期ポジションの登録
mov.w #tEsect_Ba_cur,r1 ;選択セットをリクエスト
jsr __Esect_Req ;
jsr __1PKEY_Init ;I/O再初期化
mov.b #ChoFrzIni,wbFudaMovTim ;選択初期硬直時間の設定
push r1 ;
mov.b #SE_Msg,r1 ;メッセージウインドウ
jsr __mya_se ;
pop r1 ;
end_cho_tre_koi_ply: ;
inc.b wbKoiDist ;
popm #r1/r10-r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 3枚札のキー入力待ち
;-----------------------------------------------------------------------------
wat_tre_koi_ply: ;
pushm #r10-r12/r15/r20 ;
cmp.b #$02,wbFudaMd ;3枚選択モードか?
be frz_wat_tre_koi_ply ;らしい
inc.b wbKoiDist ;ベクタを進める
br end_wat_tre_koi_ply ;
frz_wat_tre_koi_ply: ;
test.b wbFudaMovTim ;
be mod_wat_tre_koi_ply ;
dec.b wbFudaMovTim ;初期硬直
mov.w #$ff,r15 ;ダミー・ニュートラル
br ini_wat_tre_koi_ply ;
mod_wat_tre_koi_ply: ;
jsr __1PKEY_JD ;
ini_wat_tre_koi_ply: ;ワークセットしておかないと
mov.b #$00,wbCurBusy2 ;コンフリクト回避用
mov.b #$00,r20 ;処理続行中
jsr _Sys_tim_gen ;
movz.bw wbBaCurNum,r12 ;ナンバー+α値取得
movz.bw wbCurPos,r10 ;カーソル位置の取得
mul.w #$03,r10 ;
add.w r12,r10 ;ずらす
mov.w #wbHitPs,r11 ;札ヒットポジション(8枚*3種)
mov.b [r11](r10),wbBaCurPos ;ポジションの登録
A_wat_tre_koi_ply: ;Aボタンチェック
test.h whSysTimDsp ;タイマーは稼働中終了か?
be fin_wat_tre_koi_ply ;
test1 #$03,r15 ;
bne R_wat_tre_koi_ply ;
PA_wat_tre_koi_ply: ;Aボタンを押した場合
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
push r1 ;
mov.b #SE_Dec1,r1 ;決定音
jsr __mya_se ;
pop r1 ;
test.b wbBaYNPos ;Yesを選んだかいな?
be fin_wat_tre_koi_ply ;
inc.b wbBaCurNum ;Noを選んだらしい
mov.b #ChoFrzTim,wbFudaMovTim ;硬直時間の再設定
mov.b #$00,wbBaYNPos ;Yesに合わせ直し
cmp.b #$02,wbBaCurNum ;
bne end_wat_tre_koi_ply ;
mov.b #$00,wbBaCurNum ;
br end_wat_tre_koi_ply ;
R_wat_tre_koi_ply: ;右チェック
test1 #$04,r15 ;
bne L_wat_tre_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$01,wbBaYNPos ;右ループしない
br end_wat_tre_koi_ply ;
L_wat_tre_koi_ply: ;左チェック
test1 #$05,r15 ;
bne end_wat_tre_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$00,wbBaYNPos ;左ループしない
br end_wat_tre_koi_ply ;
fin_wat_tre_koi_ply: ;最終処理(未登録データの登録処理)
movz.bw wbBaCurNum,r12 ;ナンバー+α値取得
movz.bw wbCurPos,r10 ;カーソル位置の取得
mul.w #$03,r10 ;
add.w r12,r10 ;ずらす
mov.w #wbHitOk,r11 ;札ヒットワーク(8枚*3種)
mov.b [r11](r10),wbFudaForN ;叩かれ側 札ナンバー
mov.b [r11](r10),wbBtoT_fuda4 ;手札に叩かれ移動登録
inc.b wbBtoT_fudaC ;カウントする
mov.b #$ff,[r11](r10) ;場札登録の抹消
mov.w #wbHitPs,r11 ;札ヒットポジション(8枚*3種)
mov.b [r11](r10),wbFudaForP ;叩かれ側 札インデックス
mov.b [r11](r10),r20 ;
jsr _Del_Bafuda ;場札登録の抹消
inc.b wbKoiDist ;ベクタを進める
mov.b #$01,wbBaCurBusy ;終了!!
end_wat_tre_koi_ply: ;
popm #r10-r12/r15/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札から場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_TB_koi_ply: ;
pushm #r0/r10-r14/r21-r22 ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_TB_koi_ply ;
give_ini_TB_koi_ply: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
; mov.w [r14](r10),r0 ;目標札ワークの先頭
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_TB_koi_ply ;
get_ini_TB_koi_ply: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
; mov.w [r14](r10),r0 ;目標札ワークの先頭
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_TB_koi_ply: ;
dec.b wbPlyFudaCnt ;札枚数を減らす
mov.b #$02,wbSysCur ;カーソルをスリープモードに移行
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札から場札への移動
;-----------------------------------------------------------------------------
mov_TB_koi_ply: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_TB_koi_ply ;
next_mov_TB_koi_ply: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_TB_koi_ply_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_TB_koi_ply ;
next_mov_TB_koi_ply_ex: ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
; cmp.b #$ff,wbBtoT_fuda4 ;
; be next2_mov_TB_koi_ply ;
; mov.w #wBa_huda,r0 ;
; movz.bw wbFudaForP,r11 ;
; mov.b wbBtoT_fuda4,[r0](r11) ;
; mov.b #$ff,wbBtoT_fuda4 ;
next2_mov_TB_koi_ply: ;
inc.b wbKoiDist ;
end_mov_TB_koi_ply: ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札の詰め
;-----------------------------------------------------------------------------
srt_jam_koi_ply: ;
jsr _Fuda_Mon_SortP ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
end_srt_jam_koi_ply: ;
; dec.b wbPlyFudaCnt ;札枚数を減らす
mov.b #$00,wbKoiDist2_tim ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; 山札を探す(回避も含む)
;-----------------------------------------------------------------------------
src_Ym_koi_ply: ;
pushm #r10/r20 ;
dec.b wbActWaitTim ;ちょっと待った
bne end_src_Ym_koi_ply ;
jsr _Ba_Brk_Cnt ;ブランクのカウント
cmp.b #$01,r20 ;1枚以下なら
ble ex_src_Ym_koi_ply ;イカサマする
job_src_Ym_koi_ply: ;
jsr _Bahuda_Emp ;空き場所を探す
cmp.b #$ff,r20 ;空きがないよ
be ex_src_Ym_koi_ply ;
add.b #$02,wbKoiDist ;イカサマintは無し
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
br end_src_Ym_koi_ply ;
ex_src_Ym_koi_ply: ;イカサマの準備
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;イカサマしないといけないよ
end_src_Ym_koi_ply: ;
popm #r10/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; イカサマint
;-----------------------------------------------------------------------------
mag_mby_koi_ply: ;
pushm #r16-r17/r20 ;
mov.w #$00,r20 ;
mov.w #12,r16 ;
loop_mag_mby_koi_ply: ;
jsr _Koi_Ark_m00 ;
test.b r17 ;
bnz end_mag_mby_koi_ply ;
inc.w r20 ;
dec.w r16 ;
bnz loop_mag_mby_koi_ply ;
jsr Reset ;致命的エラーなのでリセット
end_mag_mby_koi_ply: ;
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
inc.b wbKoiDist ;
popm #r16-r17/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札のめくり動作
;-----------------------------------------------------------------------------
opn_Ym_koi_ply: ;
pushm #r10-r12 ;
mov.w #wFuda,r10 ;
movz.bw wbMtoB_fuda,r11 ;めくり札
shl.w #$05,r11 ;
add.w r10,r11 ;目的ワークの先頭
movz.bw wbKoiDist2_tim,r12 ;
mov.b tOpen__Fuda_Rot(r12),_Fuda_dsp[r11] ;
inc.b wbKoiDist2_tim ;
cmp.b #10,wbKoiDist2_tim ;
bne end_opn_Ym_koi_ply ;
inc.b wbKoiDist ;
jsr _init_Hit_Ok ;
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbTtoB_fuda ;
end_opn_Ym_koi_ply: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r10-r12 ;
rsr ;
;-----------------------------------------------------------------------------
; 叩ける札を探す(山札:場札)
;-----------------------------------------------------------------------------
src2_hit_koi_ply: ;叩ける札を探す(山札:場札)
push r20 ;
jsr _Eva2_hit_jd ;めくり札のヒット評価
test.b wbHitCkB ;
be give_src2_hit_koi_ply ;叩けない
cmp.b #$01,wbHitCkB ;
be sig_src2_hit_koi_ply ;1枚叩ける
cmp.b #$02,wbHitCkB ;
be dbl_src2_hit_koi_ply ;2枚叩ける
nop ;場に3枚以上存在する場合は、
nop ;とばない様に(すり抜けさせる様に)、
nop ;一時的に設定しておく
nop ;
give_src2_hit_koi_ply: ;場に捨てるとき
mov.b #$00,wbFudaMd ;モードの設定
jsr _Bahuda_Emp ;空き場所を探す
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
;; mov.b wbMtoB_fuda,wbBtoT_fuda1 ;
mov.b wbMtoB_fuda,wbTtoB_fuda ;
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b #$ff,wbFudaForN ;エラーを起こさせる
mov.b r20,wbFudaForP ;叩かれ側 札インデックス
br end_src2_hit_koi_ply ;
sig_src2_hit_koi_ply: ;
mov.b #$01,wbFudaMd ;モードの設定
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くやつ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbHitOkB,wbFudaForN ;叩かれ側 札ナンバー
mov.b wbHitOkB,wbBtoT_fuda3 ;起き札に叩かれるヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b wbHitPsB,wbFudaForP ;叩かれ側 札インデックス
mov.b wbHitPsB,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
br end_src2_hit_koi_ply ;
dbl_src2_hit_koi_ply: ;
mov.b #$02,wbFudaMd ;モードの設定
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
end_src2_hit_koi_ply: ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
mov.b #$ff,wbMtoB_fuda ;起き札登録の抹消
inc.b wbKoiDist ;
pop r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 3枚札の選択
;-----------------------------------------------------------------------------
cho2_tre_koi_ply: ;3枚札の選択
push r1 ;
cmp.b #$02,wbFudaMd ;3枚選択モードか?
bne end_cho2_tre_koi_ply ;
mov.b #$00,wbBaCurPos ;初期化
mov.b #$00,wbBaCurAnm ;
mov.b #$00,wbBaCurBusy ;
mov.b #$00,wbBaCurNum ;
mov.b #$00,wbBaYNPos ;
mov.b wbHitPs,wbBaCurPos ;
mov.w #tEsect_Ba_cur,r1 ;選択セットをリクエスト
jsr __Esect_Req ;
jsr __1PKEY_Init ;I/O再初期化
mov.b #ChoFrzIni,wbFudaMovTim ;選択初期硬直時間の設定
push r1 ;
mov.b #SE_Msg,r1 ;メッセージウインドウ
jsr __mya_se ;
pop r1 ;
end_cho2_tre_koi_ply: ;
inc.b wbKoiDist ;
pop r1 ;
rsr ;
;-----------------------------------------------------------------------------
; 3枚札のキー入力待ち
;-----------------------------------------------------------------------------
wat2_tre_koi_ply: ;3枚札のキー入力待ち
pushm #r10/r11/r15 ;
cmp.b #$02,wbFudaMd ;3枚選択モードか?
be frz_wat2_tre_koi_ply ;らしい
; mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;ベクタを進める
br end_wat2_tre_koi_ply ;
frz_wat2_tre_koi_ply: ;
test.b wbFudaMovTim ;
be mod_wat2_tre_koi_ply ;
dec.b wbFudaMovTim ;初期硬直
mov.w #$ff,r15 ;ダミー・ニュートラル
br ini_wat2_tre_koi_ply ;
mod_wat2_tre_koi_ply: ;
jsr __1PKEY_JD ;
ini_wat2_tre_koi_ply: ;
mov.b #$00,wbCurBusy2 ;コンフリクト回避用
mov.b #$00,r20 ;処理続行中
jsr _Sys_tim_gen ;
movz.bw wbBaCurNum,r10 ;ナンバー+α値取得
mov.w #wbHitPsB,r11 ;
mov.b [r11](r10),wbBaCurPos ;ポジションの登録
A_wat2_tre_koi_ply: ;Aボタンチェック
test.h whSysTimDsp ;キャンセルタイマーチェック
be fin_wat2_tre_koi_ply ;
test1 #$03,r15 ;
bne R_wat2_tre_koi_ply ;
PA_wat2_tre_koi_ply: ;
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
push r1 ;
mov.b #SE_Dec1,r1 ;決定音
jsr __mya_se ;
pop r1 ;
test.b wbBaYNPos ;Yesを選んだかいな?
be fin_wat2_tre_koi_ply ;
inc.b wbBaCurNum ;Noを選んだらしい
mov.b #ChoFrzTim,wbFudaMovTim ;硬直時間の再設定
mov.b #$00,wbBaYNPos ;Yesに合わせ直し
cmp.b #$02,wbBaCurNum ;
bne end_wat2_tre_koi_ply ;
mov.b #$00,wbBaCurNum ;
br end_wat2_tre_koi_ply ;
R_wat2_tre_koi_ply: ;右チェック
test1 #$04,r15 ;
bne L_wat2_tre_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$01,wbBaYNPos ;右ループしない
br end_wat2_tre_koi_ply ;
L_wat2_tre_koi_ply: ;左チェック
test1 #$05,r15 ;
bne end_wat2_tre_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$00,wbBaYNPos ;左ループしない
br end_wat2_tre_koi_ply ;
fin_wat2_tre_koi_ply: ;
movz.bw wbBaCurNum,r10 ;ナンバー+α値取得
mov.w #wbHitOkB,r11 ;場札ヒットワーク(3種)
mov.b [r11](r10),wbFudaForN ;叩かれ側 札ナンバー
mov.b [r11](r10),wbBtoT_fuda3 ;
inc.b wbBtoT_fudaC ;カウントする
mov.w #wbHitPsB,r11 ;場札ヒットポジション(3種)
mov.b [r11](r10),wbFudaForP ;叩かれ側 札インデックス
mov.b [r11](r10),r20 ;
jsr _Del_Bafuda ;場札登録の抹消
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;ベクタを進める
mov.b #$01,wbBaCurBusy ;終了!!
end_wat2_tre_koi_ply: ;
popm #r10/r11/r15 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_YB_koi_ply: ;山札から場札への移動のイニシャライズ
pushm #r0/r10-r14/r21-r22 ;
dec.b wbActWaitTim ;待つのだ
bne fin_end_ini_YB_koi_ply ;
init_ini_YB_koi_ply: ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_YB_koi_ply ;
give_ini_YB_koi_ply: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_YB_koi_ply ;
get_ini_YB_koi_ply: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_YB_koi_ply: ;
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
fin_end_ini_YB_koi_ply: ;
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動
;-----------------------------------------------------------------------------
mov_YB_koi_ply: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_YB_koi_ply ;
next_mov_YB_koi_ply: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_YB_koi_ply_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_YB_koi_ply ;
next_mov_YB_koi_ply_ex: ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
; cmp.b #$ff,wbBtoT_fuda1 ;
; be next2_mov_YB_koi_ply ;
; mov.w #wBa_huda,r0 ;
; movz.bw wbFudaForP,r11 ;
; mov.b wbBtoT_fuda1,[r0](r11) ;
; mov.b #$ff,wbBtoT_fuda1 ;
next2_mov_YB_koi_ply: ;
inc.b wbKoiDist ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
end_mov_YB_koi_ply: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_all_koi_ply: ;取った札すべての移動のイニシャライズ
pushm #r1/r10-r14 ;
dec.b wbActWaitTim ;
bne fin_ini_all_koi_ply ;
mov.b #$00,wbFuda1_Tim ;タイマー初期化
mov.b #$00,wbFuda2_Tim ;
mov.b #$00,wbFuda3_Tim ;
mov.b #$00,wbFuda4_Tim ;
mov.w #wbGetFudaP,r10 ;ワーク
jsr _Fuda_Shar_Cnt ;カウントしてみる
jsr _init_GetFuda_PosP ;ポジションの割り出し
job1_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda1,r1 ;
cmp.w #$ff,r1 ;
be job2_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
job2_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda2,r1 ;
cmp.w #$ff,r1 ;
be job3_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
job3_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda3,r1 ;
cmp.w #$ff,r1 ;
be job4_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
job4_ini_all_koi_ply: ;
movz.bw wbBtoT_fuda4,r1 ;
cmp.w #$ff,r1 ;
be end_ini_all_koi_ply ;
jsr _init_GetFuda_SetP ;
end_ini_all_koi_ply: ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
fin_ini_all_koi_ply: ;
popm #r1/r10-r14 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動
;-----------------------------------------------------------------------------
mov_all_koi_ply: ;
pushm #r0-r3/r10 ;
mov.w #wFuda,r1 ;
mov_all_koi_ply_job1: ;
movz.bw wbFuda1_Tim,r2 ;
mov.b tMov_All_Fuda1(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_job2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_ply_job2 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job1_ex ;
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_ply_job1_ex: ;
movz.bw wbBtoT_fuda1,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_job2: ;
movz.bw wbFuda2_Tim,r2 ;
mov.b tMov_All_Fuda2(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_job3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_ply_job3 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job2_ex ;
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_ply_job2_ex: ;
movz.bw wbBtoT_fuda2,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_job3: ;
movz.bw wbFuda3_Tim,r2 ;
mov.b tMov_All_Fuda3(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_job4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_ply_job4 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job3_ex
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_ply_job3_ex: ;
movz.bw wbBtoT_fuda3,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_job4: ;
movz.bw wbFuda4_Tim,r2 ;
mov.b tMov_All_Fuda4(r2),r3 ;
test.b r3 ;
be mov_all_koi_ply_jd1 ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_ply_jd1 ;
cmp.b #$02,r3 ;
bne mov_all_koi_ply_job4_ex
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_ply_job4_ex:
movz.bw wbBtoT_fuda4,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_ply_jd1: ;
movz.bw wbGetIdxP,r2 ;取った札のインデックス
mov.w #wbGetFudaP,r3 ;取った札ワーク
inc.b wbFuda1_Tim ;
cmp.b #16,wbFuda1_Tim ;
bne mov_all_koi_ply_jd2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_ply_jd2 ;
mov.b wbBtoT_fuda1,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda1 ;
jsr _GetFuda_Shar_SetP ;
inc.w r2 ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd2: ;
inc.b wbFuda2_Tim ;
cmp.b #20,wbFuda2_Tim ;
bne mov_all_koi_ply_jd3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_ply_jd3 ;
mov.b wbBtoT_fuda2,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda2 ;
jsr _GetFuda_Shar_SetP ;
inc.w r2 ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd3: ;
inc.b wbFuda3_Tim ;
cmp.b #24,wbFuda3_Tim ;
bne mov_all_koi_ply_jd4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_ply_jd4 ;
mov.b wbBtoT_fuda3,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda3 ;
jsr _GetFuda_Shar_SetP ;
inc.w r2 ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd4: ;
inc.b wbFuda4_Tim ;
cmp.b #28,wbFuda4_Tim ;
bne end_mov_all_koi_ply ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_ply_jd_ex ;
mov.b wbBtoT_fuda4,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda4 ;
jsr _GetFuda_Shar_SetP ;
inc.b wbGetIdxP ;
mov_all_koi_ply_jd_ex: ;
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #10,wbActWaitTim ;ウェイトをかます
end_mov_all_koi_ply: ;
popm #r0-r3/r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札のソート
;-----------------------------------------------------------------------------
srt_pul_koi_ply: ;
; pushm #r15/r16 ;
dec.b wbActWaitTim ;
bne fin_srt_pul_koi_ply ;
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbMtoB_fuda ;初期化
mov.b #$ff,wbTtoB_fuda ;
mov.b #$ff,wbBtoT_fuda1 ;
mov.b #$ff,wbBtoT_fuda2 ;
mov.b #$ff,wbBtoT_fuda3 ;
mov.b #$ff,wbBtoT_fuda4 ;
mov.b #$00,wbBtoT_fudaC ;
mov.w #$00,wBrankFuda ;初期化
mov.w #$00,wBrankFuda+$04 ;
mov.w #$00,wBrankFuda+$08 ;
; mov.w #wbGetFudaP,r15 ;P取った札のナンバー
; mov.w #wbGetIdxP,r16 ;P取った札のインデックス
; jsr _Get_Fuda_Req ;移動札を取り札として登録する
jsr _GetFuda_Sort_SetP ;
jsr _GetFuda_Shar_SetP ;
; mov.b #$ff,wbBtoT_fuda1 ;後始末
; mov.b #$ff,wbBtoT_fuda2 ;
; mov.b #$ff,wbBtoT_fuda3 ;
; mov.b #$ff,wbBtoT_fuda4 ;
job_srt_pul_koi_ply: ;
jsr _GetFuda_Arg_AgnP ;
jsr _GetFuda_Sort_SetC ;先攻時のダミープロセス
jsr _GetFuda_Shar_SetC ;
jsr _GetFuda_Arg_AgnC ;
end_srt_pul_koi_ply: ;
inc.b wbKoiDist ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
; popm #r15/r16 ;
fin_srt_pul_koi_ply: ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札の評価
;-----------------------------------------------------------------------------
eva_pul_koi_ply: ;
pushm #r15-r20 ;
dec.b wbActWaitTim ;
bne end_eva_pul_koi_ply ;
mov.w #wbGetFudaP,r15 ;取った札ワークアドレス
mov.w #wbYakuJdP,r16 ;出来役判定用カウンターワークAD
jsr _Huda_val ;取った札の評価
mov.w #wbYakuJdP,r15 ;出来役判定用カウンターワーク
mov.w #wbYakuJd2P,r16 ;出来役成立用ワーク(総合)
mov.w #wbYakuJd3P,r17 ;出来役成立用ワーク(瞬間)
mov.w #wbYakuCnt2P,r18 ;各出来役文数カウンター
mov.w #wbYakuCntP,r19 ;総文数カウンター(1回での出来役)
mov.w #wbYakuRchP,r20 ;出来役リーチ用ワーク
jsr _Yaku_val ;出来役の評価
inc.b wbKoiDist ;
end_eva_pul_koi_ply: ;
; mov.b #$00,wbFudaFrmN ;初期化
; mov.b #$00,wbFudaFrmP ;
; mov.b #$00,wbFudaForN ;
; mov.b #$00,wbFudaForP ;
;
; mov.b #$ff,wbMtoB_fuda ;初期化
; mov.b #$ff,wbTtoB_fuda ;
; mov.b #$ff,wbBtoT_fuda1 ;
; mov.b #$ff,wbBtoT_fuda2 ;
; mov.b #$ff,wbBtoT_fuda3 ;
; mov.b #$ff,wbBtoT_fuda4 ;
; mov.b #$00,wbBtoT_fudaC ;
;
; mov.w #$00,wBrankFuda ;初期化
; mov.w #$00,wBrankFuda+$04 ;
; mov.w #$00,wBrankFuda+$08 ;
;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r15-r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 瞬間での出来役演出判定
;-----------------------------------------------------------------------------
ini_dir_mom_koi_ply: ;瞬間での出来役演出判定
push r10 ;
mov.w #wbYakuJd3P,r10 ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_ply ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_ply ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_ply ;
add.b #$06,wbKoiDist ;成立してないや
br end_ini_dir_mom_koi_ply ;
job_ini_dir_mom_koi_ply: ;
; mov.b #$01,wbDPltCk ;ウインドウのセット
mov.b #$00,wbDPltMode ;
mov.b #$01,wbJdKoiKoi ;コイコイをきく必要性がある
jsr _DPlate_Man ;
inc.b wbKoiDist ;
end_ini_dir_mom_koi_ply: ;
; dec.b wbPlyFudaCnt ;札枚数を減らす
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 瞬間での出来役演出
;-----------------------------------------------------------------------------
dir_mom_koi_ply: ;
jsr _DPlate_Man ;
test.b wbDPltCk ;
bne end_dir_mom_koi_ply ;
inc.b wbKoiDist ;
test.b wbMainTask ;
be end_dir_mom_koi_ply ;
test.b wbUpCnt ;
bne end_dir_mom_koi_ply ;
push r1 ;
mov.b #21,r1 ;こいこい後のアップテンポ
jsr __mya_bgm ;
pop r1 ;
inc.b wbUpCnt ;
end_dir_mom_koi_ply: ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイする?ウインドウ
;-----------------------------------------------------------------------------
win_ask_koi_ply: ;
push r25 ;
test.b wbJdKoiKoi ;
be next_win_ask_koi_ply ;
test.b wbPlyFudaCnt ;
be next_win_ask_koi_ply ;
mov.b #$02,wbKoiWindowAction ;こいこいする?
jsr Koi_Window ;
test.b r25 ;
bne end_win_ask_koi_ply ;
next_win_ask_koi_ply: ;
inc.b wbKoiDist ;
end_win_ask_koi_ply: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイの選択
;-----------------------------------------------------------------------------
cho_koi_koi_ply: ;
push r1 ;
test.b wbJdKoiKoi ;
be next_cho_koi_koi_ply ;
test.b wbPlyFudaCnt ;
be next_cho_koi_koi_ply ;
mov.b #$00,wbBaCurBusy ;
mov.b #$00,wbBaYNPos ;
test.b wbDipCntrol ;コンパネ判定
bne job_cho_koi_koi_ply_KB ;
job_cho_koi_koi_ply_JS: ;
mov.w #tEsect_Koi_Ok,r1 ;選択セットをリクエスト
jsr __Esect_Req ;
jsr __1PKEY_Init ;I/O再初期化
br job_cho_koi_koi_ply_ex ;
job_cho_koi_koi_ply_KB: ;
mov.w #tEsect_Koi_Ok2,r1 ;選択セットをリクエスト
jsr __Esect_Req ;
job_cho_koi_koi_ply_ex: ;
mov.b #ChoFrzIni,wbFudaMovTim ;選択初期硬直時間の設定
mov.b #$02,wbSysCur ;カーソルをスリープモードに移行
push r1 ;
mov.b #SE_Msg,r1 ;メッセージウインドウ
jsr __mya_se ;
pop r1 ;
next_cho_koi_koi_ply: ;
inc.b wbKoiDist ;
end_cho_koi_koi_ply: ;
pop r1 ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイのキー入力待ち
;-----------------------------------------------------------------------------
wat_koi_koi_ply: ;
push r15 ;
mov.b #$00,wbCurBusy2 ;コンフリクト回避用
mov.b #$00,r20 ;処理続行中
jsr _Sys_tim_gen ;
inc.b wbRandEx1 ;うりゃー、まわせー
test.b wbJdKoiKoi ;
be next_wat_koi_koi_ply ;
test.b wbPlyFudaCnt ;0枚?
bne ex_wat_koi_koi_ply ;
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
mov.b #$00,wbJdKoiKoi ;
mov.b #$01,wbJdKoiEnd ;
inc.b wbKoiDist ;
br next_wat_koi_koi_ply ;
ex_wat_koi_koi_ply: ;
test.b wbFudaMovTim ;
be job_wat_koi_koi_ply ;
dec.b wbFudaMovTim ;
mov.b #$ff,r15 ;
br end_wat_koi_koi_ply ;
job_wat_koi_koi_ply: ;
test.b wbDipCntrol ;コンパネ判定
bne job_wat_koi_koi_ply_KB ;
job_wat_koi_koi_ply_JS: ;
jsr __1PKEY_JD ;
br A_job_wat_koi_koi_ply ;
job_wat_koi_koi_ply_KB: ;
mov.b #$ff,r15 ;回避手段
jsr __KBKEY_JD ;
mov.b #$01,wbBaCurBusy ;
mov.b #$00,wbBaYNPos ;Y
cmp.b #$01,JOY1PKEY ;
be A_job_wat_koi_koi_ply_ex ;
mov.b #$01,wbBaYNPos ;N
cmp.b #14,JOY1PKEY ;
be A_job_wat_koi_koi_ply_ex ;
mov.b #$00,wbBaCurBusy ;
A_job_wat_koi_koi_ply: ;
; mov.b #$00,wbCurBusy2 ;コンフリクト回避用
; mov.b #$00,r20 ;処理続行中
; jsr _Sys_tim_gen ;
test.h whSysTimDsp ;キャンセルタイマーチェック
bne A_job_wat_koi_koi_ply_Ex ;
test.b wbBaYNPos ;
be AY_job_wat_koi_koi_ply ;
br AN_job_wat_koi_koi_ply ;
; be AN_job_wat_koi_koi_ply ;タイマー切れの場合はNOにする
A_job_wat_koi_koi_ply_Ex: ;
test1 #$03,r15 ;
bne R_job_wat_koi_koi_ply ;
A_job_wat_koi_koi_ply_ex: ;
push r1 ;
mov.b #SE_Dec1,r1 ;決定音
jsr __mya_se ;
pop r1 ;
test.b wbBaYNPos ;
bne AN_job_wat_koi_koi_ply ;
AY_job_wat_koi_koi_ply: ;
mov.b #$00,wbJdKoiEnd ;
br AX_job_wat_koi_koi_ply ;
AN_job_wat_koi_koi_ply: ;
mov.b #$00,wbJdKoiKoi ;
mov.b #$01,wbJdKoiEnd ;
inc.b wbKoiDist ;
AX_job_wat_koi_koi_ply: ;
mov.b #$01,r20 ;タイマーカット
jsr _Sys_tim_gen ;
mov.b #$00,wbBaYNPos ;
mov.b #$01,wbBaCurBusy ;
br next_wat_koi_koi_ply ;
R_job_wat_koi_koi_ply: ;
test1 #$04,r15 ;
bne L_job_wat_koi_koi_ply ;
test.b wbBaYNPos ;
bne end_wat_koi_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$01,wbBaYNPos ;
br end_wat_koi_koi_ply ;
L_job_wat_koi_koi_ply: ;
test1 #$05,r15 ;
bne end_wat_koi_koi_ply ;
test.b wbBaYNPos ;
be end_wat_koi_koi_ply ;
push r1 ;
mov.b #SE_Cur1,r1 ;カーソル移動音
jsr __mya_se ;
pop r1 ;
mov.b #$00,wbBaYNPos ;
br end_wat_koi_koi_ply ;
next_wat_koi_koi_ply: ;
inc.b wbKoiDist ;
end_wat_koi_koi_ply: ;
pop r15 ;
rsr ;
;-----------------------------------------------------------------------------
; コイコイしてくれたウインドウ
;-----------------------------------------------------------------------------
win_koi_koi_ply: ;
push r25 ;
test.b wbJdKoiKoi ;
be next_win_koi_koi_ply ;
mov.b #$03,wbKoiWindowAction ;コイコイしてくれてアリガト
jsr Koi_Window ;
test.b r25 ;
bne end_win_koi_koi_ply ;
next_win_koi_koi_ply: ;
; mov.b #$01,wbSysCur ;カーソル解放
mov.b #$00,wbJdKoiKoi ;
inc.b wbKoiDist ;
inc.b wbKoiDist ;
end_win_koi_koi_ply: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 勝ち負けウインドウ
;-----------------------------------------------------------------------------
win_res_koi_ply: ;
push r25 ;
test.b wbJdKoiEnd ;
be next_win_res_koi_ply ;
mov.b #$01,wbRikoSysCk ;リコ・システムOFF
mov.b #$05,wbKoiWindowAction ;勝ったよぉ
jsr Koi_Window ;
test.b r25 ;
bne end_win_res_koi_ply ;
; mov.b #$01,wbSysCur ;カーソル解放
mov.b #$00,wbJdKoiEnd ;
; mov.b #$01,wbSPltCk ;
mov.b #$00,wbDPltMode ;
mov.b #24,wbKoiTask ;集計処理へ
mov.b #$00,wbKoiDist ;
br end_win_res_koi_ply ;
next_win_res_koi_ply: ;
inc.b wbKoiDist ;
end_win_res_koi_ply: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 後処理
;-----------------------------------------------------------------------------
next_koi_ply: ;
end_next_koi_ply: ;
mov.b #$00,wbKoiDist ;
inc.b wbKoiTask ;上位タスクも進める
rsr ;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; CPUの順番
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
tkoi_cpu_sec: ;
dw init_koi_cpu ;初期イニシャライズ
dw win_str_koi_cpu ;スタートウインドウ
dw src_hit_koi_cpu ;叩ける札を探す
dw ini_TB_koi_cpu ;手札から場札への移動のイニシャライズ
dw mov_TB_koi_cpu ;手札から場札への移動
dw srt_jam_koi_cpu ;手札の詰め
dw src_Ym_koi_cpu ;山札を探す(回避も含む)
dw mag_mby_koi_cpu ;イカサマint
dw opn_Ym_koi_cpu ;山札のめくり動作
dw src2_hit_koi_cpu ;叩ける札を探す(山札:場札)
dw ini_YB_koi_cpu ;山札から場札への移動のイニシャライズ
dw mov_YB_koi_cpu ;山札から場札への移動
dw ini_all_koi_cpu ;取った札すべての移動のイニシャライズ
dw mov_all_koi_cpu ;取った札すべての移動
dw srt_pul_koi_cpu ;取った札のソート
dw eva_pul_koi_cpu ;取った札の評価
dw ini_dir_mom_koi_cpu ;瞬間での出来役演出判定
dw dir_mom_koi_cpu ;瞬間での出来役演出
; dw win_ask_koi_cpu ;コイコイする?ウインドウ
dw cho_koi_koi_cpu ;コイコイの選択
; dw wat_koi_koi_cpu ;コイコイのキー入力待ち
dw win_koi_koi_cpu ;コイコイしてくれたウインドウ
dw win_res_koi_cpu ;勝ち負けウインドウ
dw next_koi_cpu ;後処理
;-----------------------------------------------------------------------------
koi_cpu_sec: ;CPUセクション
push r10 ;
movz.bw wbKoiDist,r10 ;
mov.w tkoi_cpu_sec(r10),r10 ;
jsr [r10] ;
jsr Fuda_Pri_Man ;
jsr Fuda_Esect ;
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 初期イニシャライズ
;-----------------------------------------------------------------------------
init_koi_cpu: ;
; jsr _init_Get_Fuda ;「取った札」用ワークの初期化
; jsr _Yaku_val_init ;出来役評価用ワークの初期化
mov.b #$00,wbJdKoiKoi ;
mov.b #$00,wbJdKoiEnd ;
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; スタートウインドウ
;-----------------------------------------------------------------------------
win_str_koi_cpu: ;
push r25 ;
cmp.b #$08,wbCpuFudaCnt ;初回判定
bne next_win_str_koi_cpu ;
test1 #$00,wbKoiOrd ;
be next_win_str_koi_cpu ;
mov.b #$01,wbKoiWindowAction ;スタートウインドウ
jsr Koi_Window ;
test.b r25 ;
bne end_win_str_koi_cpu ;
next_win_str_koi_cpu: ;
inc.b wbKoiDist ;
end_win_str_koi_cpu: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 叩ける札を探す
;-----------------------------------------------------------------------------
src_hit_koi_cpu: ;
pushm #r10/r15-r18/r20 ;
mov.w #wCpu_Tehuda,r10 ;
jsr _init_Hit_Ok ;札ヒットワークの初期化
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbMtoB_fuda ;初期化
mov.b #$ff,wbTtoB_fuda ;
mov.b #$ff,wbBtoT_fuda1 ;
mov.b #$ff,wbBtoT_fuda2 ;
mov.b #$ff,wbBtoT_fuda3 ;
mov.b #$ff,wbBtoT_fuda4 ;
mov.b #$00,wbBtoT_fudaC ;
mov.w #$00,wBrankFuda ;初期化
mov
u27.bin#
60400:
__mEsect_Init3 000,$200 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_09,__G02_IvtBG03_09 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $080,$200 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_10,__G02_IvtBG03_10 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $100,$200 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 060,_G02_IvtBG03_11,__G02_IvtBG03_11 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $150,$200 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
; 本体
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_00,__G02_Ivt03_00 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 000,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_01,__G02_Ivt03_01 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $080,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_02,__G02_Ivt03_02 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $100,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_03,__G02_Ivt03_03 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $150,000 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_04,__G02_Ivt03_04 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 000,$100 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_05,__G02_Ivt03_05 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $080,$100 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_06,__G02_Ivt03_06 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $100,$100 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Init1 __EsectIventMovParts ;実行プログラム名
__mEsect_Init2 059,_G02_Ivt03_07,__G02_Ivt03_07 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 $150,$100 ;H、V
__mEsect_Init4 tMov_G02_Ivnt31,000 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
__mEsect_Initr10](r17) ;手札内からの登録抹消
movt.wb r17,wbFudaFrmP ;叩く側(捨てる) 札インデックス
mov.b #$ff,wbFudaForN ;エラーを起こさせる
jsr _Bahuda_Emp ;場札の空き場所を探す
mov.b r20,wbFudaForP ;叩く側(捨てる) 札インデックス
br end_src_hit_koi_cpu ;
sig_src_hit_koi_cpu: ;
mov.b #$01,wbFudaMd ;モードの設定
mov.b r15,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b r15,wbBtoT_fuda2 ;手札移動登録
inc.b wbBtoT_fudaC ;カウントする
mov.b #$ff,[r10](r17) ;手札内からの登録抹消
movt.wb r17,wbFudaFrmP ;叩く側(捨てる) 札インデックス
mov.b r16,wbFudaForN ;叩かれ側 札ナンバー
mov.b r16,wbBtoT_fuda4 ;手札に叩かれ移動登録
inc.b wbBtoT_fudaC ;カウントする
movt.wb r18,wbFudaForP ;叩かれ側 札インデックス
movt.wb r18,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
end_src_hit_koi_cpu: ;
inc.b wbKoiDist ;
popm #r10/r15-r18/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札から場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_TB_koi_cpu: ;
pushm #r0/r10-r14/r21-r22 ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;
mov.w r0,r12 ;札を表に開く
shl.w #$05,r12 ;
add.w r11,r12 ;
mov.b #$04,_Fuda_dsp[r12] ;
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_TB_koi_cpu ;
give_ini_TB_koi_cpu: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_TB_koi_cpu ;
get_ini_TB_koi_cpu: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_TB_koi_cpu: ;
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札から場札への移動
;-----------------------------------------------------------------------------
mov_TB_koi_cpu: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_TB_koi_cpu ;
next_mov_TB_koi_cpu: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_TB_koi_cpu_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_TB_koi_cpu ;
next_mov_TB_koi_cpu_ex: ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
next2_mov_TB_koi_cpu: ;
inc.b wbKoiDist ;
end_mov_TB_koi_cpu: ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 手札の詰め
;-----------------------------------------------------------------------------
srt_jam_koi_cpu: ;
jsr _Fuda_Mon_SortC ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
end_srt_jam_koi_cpu: ;
mov.b #$00,wbKoiDist2_tim ;
add.h #26,whGetFudaBMaxC ;役札のMAXが増える
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; 山札を探す(回避も含む)
;-----------------------------------------------------------------------------
src_Ym_koi_cpu: ;
pushm #r10/r20 ;
dec.b wbActWaitTim ;
bne end_src_Ym_koi_cpu ;
jsr _Ba_Brk_Cnt ;ブランクのカウント
cmp.b #$01,r20 ;1枚以下なら
ble ex_src_Ym_koi_cpu ;イカサマする
job_src_Ym_koi_cpu: ;
jsr _Bahuda_Emp ;空き場所を探す
cmp.b #$ff,r20 ;空きがないよ
be ex_src_Ym_koi_cpu ;
add.b #$02,wbKoiDist ;イカサマintは無し
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
br end_src_Ym_koi_cpu ;
ex_src_Ym_koi_cpu: ;イカサマの準備
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;イカサマしないといけないよ
end_src_Ym_koi_cpu: ;
popm #r10/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; イカサマint
;-----------------------------------------------------------------------------
mag_mby_koi_cpu: ;
pushm #r16-r17/r20 ;
mov.w #$00,r20 ;
mov.w #12,r16 ;
loop_mag_mby_koi_cpu: ;
jsr _Koi_Ark_m00 ;
test.b r17 ;
bnz end_mag_mby_koi_cpu ;
inc.w r20 ;
dec.w r16 ;
bnz loop_mag_mby_koi_cpu ;
jsr Reset ;致命的エラーなのでリセット
end_mag_mby_koi_cpu: ;
push r1 ;
mov.b #SE_FRol,r1 ;ひっくり返すときの音
jsr __mya_se ;
pop r1 ;
jsr _Mak_Yamafuda ;
mov.b r20,wbMtoB_fuda ;めくり札に登録
movz.bw r20,r10 ;札ナンバー
mov.w #$ff,r20 ;予定は未定
jsr _fuda_req ;札のリクエスト
inc.b wbKoiDist ;
popm #r16-r17/r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札のめくり動作
;-----------------------------------------------------------------------------
opn_Ym_koi_cpu: ;
pushm #r10-r12 ;
mov.w #wFuda,r10 ;
movz.bw wbMtoB_fuda,r11 ;めくり札
shl.w #$05,r11 ;
add.w r10,r11 ;目的ワークの先頭
movz.bw wbKoiDist2_tim,r12 ;
mov.b tOpen__Fuda_Rot(r12),_Fuda_dsp[r11] ;
inc.b wbKoiDist2_tim ;
cmp.b #10,wbKoiDist2_tim ;
bne end_opn_Ym_koi_cpu ;
inc.b wbKoiDist ;
jsr _init_Hit_Ok ;
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbTtoB_fuda ;
end_opn_Ym_koi_cpu: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r10-r12 ;
rsr ;
;-----------------------------------------------------------------------------
; 叩ける札を探す(山札:場札)
;-----------------------------------------------------------------------------
src2_hit_koi_cpu: ;叩ける札を探す(山札:場札)
push r20 ;
jsr _Eva2_hit_jd ;めくり札のヒット評価
test.b wbHitCkB ;
be give_src2_hit_koi_cpu ;叩けない
cmp.b #$01,wbHitCkB ;
be sig_src2_hit_koi_cpu ;1枚叩ける
cmp.b #$02,wbHitCkB ;
be dbl_src2_hit_koi_cpu ;2枚叩ける
nop ;場に3枚以上存在する場合は、
nop ;とばない様に(すり抜けさせる様に)、
nop ;一時的に設定しておく
nop ;
give_src2_hit_koi_cpu: ;場に捨てるとき
mov.b #$00,wbFudaMd ;モードの設定
jsr _Bahuda_Emp ;空き場所を探す
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbTtoB_fuda ;
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b #$ff,wbFudaForN ;エラーを起こさせる
mov.b r20,wbFudaForP ;叩かれ側 札インデックス
br end_src2_hit_koi_cpu ;
sig_src2_hit_koi_cpu: ;
mov.b #$01,wbFudaMd ;モードの設定
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くやつ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbHitOkB,wbFudaForN ;叩かれ側 札ナンバー
mov.b wbHitOkB,wbBtoT_fuda3 ;起き札に叩かれるヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b wbHitPsB,wbFudaForP ;叩かれ側 札インデックス
mov.b wbHitPsB,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
br end_src2_hit_koi_cpu ;
dbl_src2_hit_koi_cpu: ;
mov.b #$02,wbFudaMd ;モードの設定
; mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
; mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くヤツ
; inc.b wbBtoT_fudaC ;カウントする
; mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbMtoB_fuda,wbFudaFrmN ;叩く側(捨てる) 札ナンバー
mov.b wbMtoB_fuda,wbBtoT_fuda1 ;叩くやつ
inc.b wbBtoT_fudaC ;カウントする
mov.b #$00,wbFudaFrmP ;1種類だけだから
mov.b wbHitOkB,wbFudaForN ;叩かれ側 札ナンバー
mov.b wbHitOkB,wbBtoT_fuda3 ;起き札に叩かれるヤツ
inc.b wbBtoT_fudaC ;カウントする
mov.b wbHitPsB,wbFudaForP ;叩かれ側 札インデックス
mov.b wbHitPsB,r20 ;
jsr _Del_Bafuda ;場札登録の抹消
end_src2_hit_koi_cpu: ;
mov.b #$ff,wbMtoB_fuda ;起き札登録の抹消
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
inc.b wbKoiDist ;
pop r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_YB_koi_cpu: ;山札から場札への移動のイニシャライズ
pushm #r0/r10-r14/r21-r22 ;
dec.b wbActWaitTim ;
bne fin_ini_YB_koi_cpu ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
movz.bw wbFudaFrmP,r11 ;叩く側(捨てる) 札インデックス
movz.bw wbFudaForN,r12 ;叩かれ側 札ナンバー
movz.bw wbFudaForP,r13 ;叩かれ側 札インデックス
mov.w #wFuda,r14 ;札ワーク
test.b wbFudaMd ;
bne get_ini_YB_koi_cpu ;
give_ini_YB_koi_cpu: ;場に捨てる場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos1(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos1(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
br end_ini_YB_koi_cpu ;
get_ini_YB_koi_cpu: ;札を叩く場合
shl.w #$05,r0 ;1つ32バイトだから
add.w r14,r0 ;
shl.w #$01,r13 ;
mov.h tBahudaPos2(r13),r21 ;目標H
inc.w r13 ;
mov.h tBahudaPos2(r13),r22 ;目標V
jsr _fuda_ptp_mov_init ;
end_ini_YB_koi_cpu: ;
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #16,wbFudaMovTim ;札移動タイマーをセット
fin_ini_YB_koi_cpu: ;
popm #r0/r10-r14/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 山札から場札への移動
;-----------------------------------------------------------------------------
mov_YB_koi_cpu: ;
pushm #r0/r10/r11 ;
; jsr Fuda_Esect ;
movz.bw wbFudaFrmN,r0 ;叩く側(捨てる) 札ナンバー
mov.w #wFuda,r11 ;札ワーク
shl.w #$05,r0 ;
add.w r11,r0 ;
jsr _fuda_ptp_mov ;
dec.b wbFudaMovTim ;
bnz end_mov_YB_koi_cpu ;
next_mov_YB_koi_cpu: ;
cmp.b #$ff,wbTtoB_fuda ;
bne next_mov_YB_koi_cpu_ex ;
push r1 ;
mov.b #SE_FHit2,r1 ;ひっくり返す音後半
jsr __mya_se ;
pop r1 ;
br next2_mov_YB_koi_cpu ;
next_mov_YB_koi_cpu_ex: ;
push r1 ;
mov.b #SE_FHit1,r1 ;札を置く
jsr __mya_se ;
pop r1 ;
mov.w #wBa_huda,r0 ;
movz.bw wbFudaForP,r11 ;
mov.b wbTtoB_fuda,[r0](r11) ;
mov.b #$ff,wbTtoB_fuda ;
next2_mov_YB_koi_cpu: ;
inc.b wbKoiDist ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
end_mov_YB_koi_cpu: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r0/r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動のイニシャライズ
;-----------------------------------------------------------------------------
ini_all_koi_cpu: ;取った札すべての移動のイニシャライズ
pushm #r0/r10-r16/r21-r22 ;
dec.b wbActWaitTim ;
bne fin_ini_all_koi_cpu ;
mov.b #$00,wbFuda1_Tim ;タイマー初期化
mov.b #$00,wbFuda2_Tim ;
mov.b #$00,wbFuda3_Tim ;
mov.b #$00,wbFuda4_Tim ;
mov.w #wbGetFudaC,r10 ;ワーク
jsr _Fuda_Shar_Cnt ;カウントしてみる
jsr _init_GetFuda_PosC ;ポジションの割り出し
job1_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda1,r1 ;
cmp.w #$ff,r1 ;
be job2_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
job2_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda2,r1 ;
cmp.w #$ff,r1 ;
be job3_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
job3_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda3,r1 ;
cmp.w #$ff,r1 ;
be job4_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
job4_ini_all_koi_cpu: ;
movz.bw wbBtoT_fuda4,r1 ;
cmp.w #$ff,r1 ;
be end_ini_all_koi_cpu ;
jsr _init_GetFuda_SetC ;
end_ini_all_koi_cpu: ;
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
fin_ini_all_koi_cpu: ;
popm #r0/r10-r16/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札すべての移動
;-----------------------------------------------------------------------------
mov_all_koi_cpu: ;
pushm #r0-r3/r10 ;
mov.w #wFuda,r1 ;
mov_all_koi_cpu_job1: ;
movz.bw wbFuda1_Tim,r2 ;
mov.b tMov_All_Fuda1(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_job2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_cpu_job2 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job1_ex
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_cpu_job1_ex:
movz.bw wbBtoT_fuda1,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_job2: ;
movz.bw wbFuda2_Tim,r2 ;
mov.b tMov_All_Fuda2(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_job3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_cpu_job3 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job2_ex
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_cpu_job2_ex:
movz.bw wbBtoT_fuda2,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_job3: ;
movz.bw wbFuda3_Tim,r2 ;
mov.b tMov_All_Fuda3(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_job4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_cpu_job4 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job3_ex
; push r1 ;
; mov.b #$52,r1 ;札を切る音
; jsr __mya_se ;
; pop r1 ;
mov_all_koi_cpu_job3_ex:
movz.bw wbBtoT_fuda3,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_job4: ;
movz.bw wbFuda4_Tim,r2 ;
mov.b tMov_All_Fuda4(r2),r3 ;
test.b r3 ;
be mov_all_koi_cpu_jd1 ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_cpu_jd1 ;
cmp.b #$02,r3 ;
bne mov_all_koi_cpu_job4_ex
push r1 ;
mov.b #SE_FCut,r1 ;札を切る音
jsr __mya_se ;
pop r1 ;
mov_all_koi_cpu_job4_ex:
movz.bw wbBtoT_fuda4,r10 ;
shl.w #$05,r10 ;
add.w r1,r10 ;
mov.w r10,r0 ;
jsr _fuda_ptp_mov ;
mov_all_koi_cpu_jd1: ;
movz.bw wbGetIdxC,r2 ;取った札のインデックス
mov.w #wbGetFudaC,r3 ;取った札ワーク
inc.b wbFuda1_Tim ;
cmp.b #16,wbFuda1_Tim ;
bne mov_all_koi_cpu_jd2 ;
cmp.b #$ff,wbBtoT_fuda1 ;
be mov_all_koi_cpu_jd2 ;
mov.b wbBtoT_fuda1,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda1 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd2: ;
inc.b wbFuda2_Tim ;
cmp.b #20,wbFuda2_Tim ;
bne mov_all_koi_cpu_jd3 ;
cmp.b #$ff,wbBtoT_fuda2 ;
be mov_all_koi_cpu_jd3 ;
mov.b wbBtoT_fuda2,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda2 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd3: ;
inc.b wbFuda3_Tim ;
cmp.b #24,wbFuda3_Tim ;
bne mov_all_koi_cpu_jd4 ;
cmp.b #$ff,wbBtoT_fuda3 ;
be mov_all_koi_cpu_jd4 ;
mov.b wbBtoT_fuda3,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda3 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd4: ;
inc.b wbFuda4_Tim ;
cmp.b #28,wbFuda4_Tim ;
bne end_mov_all_koi_cpu ;
cmp.b #$ff,wbBtoT_fuda4 ;
be mov_all_koi_cpu_jd_ex ;
mov.b wbBtoT_fuda4,[r3](r2) ;
mov.b #$ff,wbBtoT_fuda4 ;
; jsr _GetFuda_Shar_SetC ;
inc.w r2 ;
inc.b wbGetIdxC ;
mov_all_koi_cpu_jd_ex: ;
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
;; jsr waitblk ;まあ、待てや
inc.b wbKoiDist ;
mov.b #10,wbActWaitTim ;ウェイトをかます
end_mov_all_koi_cpu: ;
; jsr Fuda_Pri_Man ;
; jsr Fuda_Esect ;
popm #r0-r3/r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札のソート
;-----------------------------------------------------------------------------
srt_pul_koi_cpu: ;
; pushm #r15/r16 ;
dec.b wbActWaitTim ;
bne end_srt_pul_koi_cpu ;
; mov.w #wbGetFudaC,r15 ;P取った札のナンバー
; mov.w #wbGetIdxC,r16 ;P取った札のインデックス
; jsr _Get_Fuda_Req ;移動札を取り札として登録する
jsr _GetFuda_Sort_SetC ;
jsr _GetFuda_Shar_SetC ;
; mov.b #$ff,wbBtoT_fuda1 ;後始末
; mov.b #$ff,wbBtoT_fuda2 ;
; mov.b #$ff,wbBtoT_fuda3 ;
; mov.b #$ff,wbBtoT_fuda4 ;
jsr _GetFuda_Arg_AgnC ;
mov.b #$00,wbFudaFrmN ;初期化
mov.b #$00,wbFudaFrmP ;
mov.b #$00,wbFudaForN ;
mov.b #$00,wbFudaForP ;
mov.b #$ff,wbMtoB_fuda ;初期化
mov.b #$ff,wbTtoB_fuda ;
mov.b #$ff,wbBtoT_fuda1 ;
mov.b #$ff,wbBtoT_fuda2 ;
mov.b #$ff,wbBtoT_fuda3 ;
mov.b #$ff,wbBtoT_fuda4 ;
mov.b #$00,wbBtoT_fudaC ;
mov.w #$00,wBrankFuda ;初期化
mov.w #$00,wBrankFuda+$04 ;
mov.w #$00,wBrankFuda+$08 ;
inc.b wbKoiDist ;
mov.b #_ActWaitTim,wbActWaitTim ;ウェイトをかます
end_srt_pul_koi_cpu: ;
; popm #r15/r16 ;
rsr ;
;-----------------------------------------------------------------------------
; 取った札の評価
;-----------------------------------------------------------------------------
eva_pul_koi_cpu: ;
pushm #r15-r20 ;
dec.b wbActWaitTim ;
bne end_eva_pul_koi_cpu ;
mov.w #wbGetFudaC,r15 ;取った札ワークアドレス
mov.w #wbYakuJdC,r16 ;出来役判定用カウンターワークAD
jsr _Huda_val ;取った札の評価
mov.w #wbYakuJdC,r15 ;出来役判定用カウンターワーク
mov.w #wbYakuJd2C,r16 ;出来役成立用ワーク(総合)
mov.w #wbYakuJd3C,r17 ;出来役成立用ワーク(瞬間)
mov.w #wbYakuCnt2C,r18 ;各出来役文数カウンター
mov.w #wbYakuCntC,r19 ;総文数カウンター(1回での出来役)
mov.w #wbYakuRchC,r20 ;出来役リーチ用ワーク
jsr _Yaku_val ;出来役の評価
inc.b wbKoiDist ;
end_eva_pul_koi_cpu: ;
popm #r15-r20 ;
rsr ;
;-----------------------------------------------------------------------------
; 瞬間での出来役演出判定
;-----------------------------------------------------------------------------
ini_dir_mom_koi_cpu: ;瞬間での出来役演出判定
push r10 ;
mov.w #wbYakuJd3C,r10 ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_cpu ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_cpu ;
test.w [r10+] ;
bne job_ini_dir_mom_koi_cpu ;
add.b #$04,wbKoiDist ;
br end_ini_dir_mom_koi_cpu ;
job_ini_dir_mom_koi_cpu: ;
; mov.b #$01,wbDPltCk ;
mov.b #$01,wbDPltMode ;
jsr _DPlate_Man ;
mov.b #$01,wbJdKoiKoi ;コイコイをきく必要性がある
inc.b wbKoiDist ;
end_ini_dir_mom_koi_cpu: ;
dec.b wbCpuFudaCnt ;札枚数を減らす
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 瞬間での出来役演出
;-----------------------------------------------------------------------------
dir_mom_koi_cpu: ;
jsr _DPlate_Man ;
test.b wbDPltCk ;
bne end_dir_mom_koi_cpu ;
inc.b wbKoiDist ;
test.b wbMainTask ;
be end_dir_mom_koi_cpu ;
test.b wbUpCnt ;
bne end_dir_mom_koi_cpu ;
push r1 ;
mov.b #21,r1 ;こいこい後のアップテンポ
jsr __mya_bgm ;
pop r1 ;
inc.b wbUpCnt ;
end_dir_mom_koi_cpu: ;
rsr ;
;;-----------------------------------------------------------------------------
;; コイコイする?ウインドウ
;;-----------------------------------------------------------------------------
;win_ask_koi_cpu: ;
; inc.b wbKoiDist ;
; rsr ;
;-----------------------------------------------------------------------------
; コイコイの選択
;-----------------------------------------------------------------------------
cho_koi_koi_cpu: ;
push r10 ;
test.b wbCpuFudaCnt ;
be ex_cho_koi_koi_cpu ;
movz.bw wbPerNo,r10 ;
mov.b tJD_Cpu_KoiKoi(r10),r10 ;
cmp.b r10,wbCpuFudaCnt ;多い場合は、
bh end_cho_koi_koi_cpu ;こいこいします
mov.b #$01,wbJdKoiEnd ;こいこいしない
mov.b #$00,wbJdKoiKoi ;
inc.b wbKoiDist ;
br end_cho_koi_koi_cpu ;
ex_cho_koi_koi_cpu: ;最後の1枚の時は、
mov.b #$01,wbJdKoiEnd ;こいこいしない
mov.b #$00,wbJdKoiKoi ;
inc.b wbKoiDist ;
end_cho_koi_koi_cpu: ;
inc.b wbKoiDist ;
pop r10 ;
rsr ;
;;-----------------------------------------------------------------------------
;; コイコイのキー入力待ち
;;-----------------------------------------------------------------------------
;wat_koi_koi_cpu: ;
; inc.b wbKoiDist ;
; rsr ;
;-----------------------------------------------------------------------------
; コイコイしてくれたウインドウ
;-----------------------------------------------------------------------------
win_koi_koi_cpu: ;
push r25 ;
test.b wbJdKoiKoi ;
be next_win_koi_koi_cpu ;
mov.b #$04,wbKoiWindowAction ;こいこいするよ
jsr Koi_Window ;
test.b r25 ;
bne end_win_koi_koi_cpu ;
next_win_koi_koi_cpu: ;
mov.b #$00,wbJdKoiKoi ;
inc.b wbKoiDist ;
end_win_koi_koi_cpu: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 勝ち負けウインドウ
;-----------------------------------------------------------------------------
win_res_koi_cpu: ;
push r25 ;
test.b wbJdKoiEnd ;
be next_win_res_koi_cpu ;
mov.b #$01,wbRikoSysCk ;リコ・システムOFF
mov.b #$06,wbKoiWindowAction ;勝ったよぉ
jsr Koi_Window ;
test.b r25 ;
bne end_win_res_koi_cpu ;
mov.b #$00,wbJdKoiEnd ;
; mov.b #$01,wbSPltCk ;
mov.b #$01,wbDPltMode ;
mov.b #24,wbKoiTask ;集計処理へ
mov.b #$00,wbKoiDist ;
br end_win_res_koi_cpu ;
next_win_res_koi_cpu: ;
inc.b wbKoiDist ;
end_win_res_koi_cpu: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; 後処理
;-----------------------------------------------------------------------------
next_koi_cpu: ;
mov.b #$00,wbKoiDist ;
inc.b wbKoiTask ;上位タスクも進める
rsr ;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; 究極の選択 ;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
t_koi_ex_sum: ;
dw Init_koi_ex_sum ;
dw JobD_koi_ex_sum ;
dw JobS_koi_ex_sum ;
dw End_koi_ex_sum ;
koi_ex_sum: ;
push r10 ;
movz.bw wbKoiDist,r10 ;
mov.w t_koi_ex_sum(r10),r10 ;
jsr [r10] ;
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
Init_koi_ex_sum: ;
test1 #$00,wbKoiOrd ;
bne jdC_Init_koi_ex_sum ;
jdP_Init_koi_ex_sum: ;
mov.b #$01,wbYakuOya ;
mov.b #$01,wbRikoSysCk ;リコ・システムOFF
; mov.b #$01,wbDPltCk ;ウインドウのセット
mov.b #$00,wbDPltMode ;
jsr _DPlate_Man ;
br end_Init_koi_ex_sum ;
jdC_Init_koi_ex_sum: ;
mov.b #$02,wbYakuOya ;
mov.b #$01,wbRikoSysCk ;リコ・システムOFF
; mov.b #$01,wbDPltCk ;
mov.b #$01,wbDPltMode ;
jsr _DPlate_Man ;
end_Init_koi_ex_sum: ;
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
JobD_koi_ex_sum: ;
jsr _DPlate_Man ;
test.b wbDPltCk ;
bne end_JobD_koi_ex_sum ;
next_JobD_koi_ex_sum: ;
inc.b wbKoiDist ;
end_JobD_koi_ex_sum: ;
rsr ;
;-----------------------------------------------------------------------------
JobS_koi_ex_sum: ;
jsr __mya_bgm_stp ;演奏停止
jsr __mya_se_stp ;SE停止
jsr Kill_Se_Man ;SEバッファークリアー
jsr __mya_bgm_stp ;演奏停止
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
End_koi_ex_sum: ;
test1 #$00,wbKoiOrd ;
bne jobC_End_koi_ex_sum ;
jobP_End_koi_ex_sum: ;
; mov.b #$01,wbSPltCk ;
mov.b #$00,wbDPltMode ;
br next_end_End_koi_ex_sum ;
jobC_End_koi_ex_sum: ;
; mov.b #$01,wbSPltCk ;
mov.b #$01,wbDPltMode ;
next_end_End_koi_ex_sum: ;
mov.b #$00,wbKoiDist ;
inc.b wbKoiTask ;
end_End_koi_ex_sum: ;
rsr ;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; 集計タ~~~~イム
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
tkoi_scr_sum: ;
dw init_koi_scr_sum ;前処理
dw ent_koi_scr_sum ;ウインドウ登場
dw dsp_koi_scr_sum ;出来役表示
dw job_koi_scr_sum ;集計処理
dw reg_koi_scr_sum ;ウインドウ退場
dw next_koi_scr_sum ;後処理
;-----------------------------------------------------------------------------
koi_scr_sum: ;集計タイム
push r10 ;
movz.bw wbKoiDist,r10 ;
mov.w tkoi_scr_sum(r10),r10 ;オラオラオラオラー
jsr [r10] ;
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; 集計処理
;-----------------------------------------------------------------------------
init_koi_scr_sum: ;
jsr _SPlate_Man ;
test.b wbSPltCk ;ウインドウ処理
bne end_init_koi_scr_sum ;
inc.b wbKoiDist ;
end_init_koi_scr_sum: ;
rsr ;
;-----------------------------------------------------------------------------
; 通信対戦用勝ち負けフラグセット
;-----------------------------------------------------------------------------
ent_koi_scr_sum: ;
test.b wbRsMode ;
be next_ent_koi_scr_sum ;通信対戦以外は関係なし
test.b wbPntGirl ;
be win_ent_koi_scr_sum ;勝ち
test.b wbPntPly ;
be lose_ent_koi_scr_sum ;負け
cmp.b #$02,wbRsRound ;
bl next_ent_koi_scr_sum ;延長戦以外は通常続行
cmp.b #$02,wbRsRound ;
bne set_ent_koi_scr_sum ;
cmp.b wbPntGirl,wbPntPly ;最終戦の場合だね
be next_ent_koi_scr_sum ;
bl lose_ent_koi_scr_sum ;
br win_ent_koi_scr_sum ;
set_ent_koi_scr_sum: ;延長戦の場合だね
cmp.b wbPntGirl,wbPntPly ;
ble lose_ent_koi_scr_sum ;同点は無いと思うけど
win_ent_koi_scr_sum: ;プレイヤーの勝ち
mov.b #$01,wbRsWinJd ;勝ちフラグ
br next_ent_koi_scr_sum ;
lose_ent_koi_scr_sum: ;プレイヤーの負け
mov.b #$02,wbRsWinJd ;負けフラグ
next_ent_koi_scr_sum: ;
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; 勝ち負け演出
;-----------------------------------------------------------------------------
dsp_koi_scr_sum: ;
push r25 ;
test.b wbRsMode ;
be next_dsp_koi_scr_sum ;通常ゲームの場合は関係なし
test.b wbRsWinJd ;
be next_dsp_koi_scr_sum ;まだ勝負はついていない
mov.b wbRsWinJd,wbRs_MsgNo ;
dec.b wbRs_MsgNo ;
jsr Koi_Rs_Comm ;
test.b r25 ;
bne end_dsp_koi_scr_sum ;
next_dsp_koi_scr_sum: ;
inc.b wbKoiDist ;
end_dsp_koi_scr_sum: ;
pop r25 ;
rsr ;
;-----------------------------------------------------------------------------
; ワイプセット
;-----------------------------------------------------------------------------
job_koi_scr_sum: ;
mov.b #$00,wbWipeMode ;ワイプセット
mov.b #$00,wbWipeIO ;
mov.b #$01,wbWipeCk ;
mov.b #$00,wbYakuOya ;親権フラグを毎回クリア
; push r0 ;
; mov.b #$fe,r0 ;BGMフェードアウト
; jsr play_music ;
; pop r0 ;
inc.b wbKoiDist ;
rsr ;
;-----------------------------------------------------------------------------
; ワイプアウト
;-----------------------------------------------------------------------------
reg_koi_scr_sum: ;
test.b wbWipeCk ;
bne end_reg_koi_scr_sum ;
jsr __Esect_Kill_All ;エセクト強制終了
inc.b wbKoiDist ;
end_reg_koi_scr_sum: ;
rsr ;
;-----------------------------------------------------------------------------
; 後処理
;-----------------------------------------------------------------------------
next_koi_scr_sum: ;
mov.b #$00,wbKoiDist ;
inc.b wbKoiTask ;上位タスクも進める
rsr ;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; サブルーチンの類
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; _Ba_Cur_YN ; Yes/No選択パネル用
; in : nothing
; out : nothing
;-----------------------------------------------------------------------------
_Ba_Cur_YN: ;
pushm #r1/r2 ;
; jsr Esect_Anm ;
test.b wbBaCurBusy ;決定したかい?
bne kill_Ba_Cur_YN ;終了へ
mov.w _Ese_Anm_Tbl[r0],r1 ;アニメーションテーブルを確保
movz.bw wbBaYNPos,r2 ;
mov.w [r1](r2),r2 ;
movz.hw _Ese_Mov_Tim[r0],r1 ;
; shl.w #$01,r1 ;
; mov.h [r2](r1),_Ese_Cobj_Num[r0] ;子オブジェの数
mov.h [r2](r1),_Ese_Cobj_Pls[r0] ;子オブジェの場所
inc.h _Ese_Mov_Tim[r0] ;
cmp.h #18,_Ese_Mov_Tim[r0] ;
bne end_Ba_Cur_YN ;
mov.h #$00,_Ese_Mov_Tim[r0] ;
br end_Ba_Cur_YN ;
kill_Ba_Cur_YN: ;
jsr Esect_Kill ;コロる
end_Ba_Cur_YN: ;
popm #r1/r2 ;
rsr ;
;-----------------------------------------------------------------------------
; _Ba_Cur_Msg ; 「合わせ札はこれで良いかい?」パネル用
; in : nothing
; out : nothing
;-----------------------------------------------------------------------------
_Ba_Cur_Msg: ;
jsr Esect_Anm ;
test.b wbBaCurBusy ;決定したかい?
be end_Ba_Cur_Msg ;
kill_Ba_Cur_Msg: ;
jsr Esect_Kill ;コロる
end_Ba_Cur_Msg: ;
rsr ;
;-----------------------------------------------------------------------------
; _Ba_Cur ; 場札選択カーソル用
; in : nothing
; out : nothing
;-----------------------------------------------------------------------------
_Ba_Cur: ;
pushm #r1/r2 ;
test.b wbBaCurBusy ;決定したかい?
bne kill_Ba_Cur ;
pos_Ba_Cur: ;ポジションセット
movz.bw wbBaCurPos,r2 ;
shl.w #$01,r2 ;
mov.h tBaCurPos(r2),_Ese_Pos_H[r0] ;H
inc.w r2 ;
mov.h tBaCurPos(r2),_Ese_Pos_V[r0] ;V
anm_Ba_Cur: ;アニメーション・パターンセット
movz.bw wbBaCurAnm,r1 ;
shl.w #$01,r1 ;
mov.h tFuda_cel_cur(r1),_Ese_Cobj_Pls[r0] ;
inc.w r1 ;
mov.h tFuda_cel_cur(r1),_Ese_Cobj_Num[r0] ;
inc.b wbBaCurAnm ;
cmp.b #20,wbBaCurAnm ;
bne end_Ba_Cur ;
mov.b #$00,wbBaCurAnm ;
br end_Ba_Cur ;
kill_Ba_Cur: ;
jsr Esect_Kill ;コロる
end_Ba_Cur: ;
popm #r1/r2 ;
rsr ;
;-----------------------------------------------------------------------------
; _Del_Bafuda ; 場札の登録抹消(仮抹消)
; in : r20(.b) -> 登録抹消する札インデックス
; out : nothing
;-----------------------------------------------------------------------------
_Del_Bafuda: ;
pushm #r10-r12 ;
mov.w #wBa_huda,r10 ;
movz.bw r20,r11 ;
mov.w #wBrankFuda,r12 ;
mov.b #$ff,[r10](r11) ;
mov.b #$01,[r12](r11) ;こっちにも登録
popm #r10-r12 ;
rsr ;
;-----------------------------------------------------------------------------
; _Ba_Brk_Cnt ; 場札のブランクカウント
; in : nothing
; out : r20(.b) -> ブランク数
;-----------------------------------------------------------------------------
_Ba_Brk_Cnt: ;場札のブランクカウント
pushm #r10-r13 ;
mov.w #wBa_huda,r10 ;
mov.w #$00,r11 ;
mov.w #12,r12 ;
mov.w #wBrankFuda,r13 ;
mov.b #$00,r20 ;
job_Ba_Brk_Cnt: ;
cmp.b #$ff,[r10](r11) ;
bne loop_Ba_Brk_Cnt ;
test.b [r13](r11) ;正確にチェックする
bne loop_Ba_Brk_Cnt ;
inc.b r20 ;
loop_Ba_Brk_Cnt: ;
inc.w r11 ;
dec.w r12 ;
bnz job_Ba_Brk_Cnt ;
end_Ba_Brk_Cnt: ;
popm #r10-r13 ;
rsr ;
;;-----------------------------------------------------------------------------
;; _Get_Fuda_Req ;移動札を取り札として登録する
;; in :r15(.w) -> 取った札ワークアドレス
;; :r16(.w) -> 取った札インデックスアドレス
;; out :nothing
;;-----------------------------------------------------------------------------
;_Get_Fuda_Req: ;
; push r17 ;
; movz.bw [r16],r17 ;インデックスの取得
;_Get_Fuda_Req1: ;
; cmp.b #$ff,wbBtoT_fuda1 ;
; be _Get_Fuda_Req2 ;
; mov.b wbBtoT_fuda1,[r15](r17) ;
; inc.w r17 ;
; inc.b [r16] ;
;_Get_Fuda_Req2: ;
; cmp.b #$ff,wbBtoT_fuda2 ;
; be _Get_Fuda_Req3 ;
; mov.b wbBtoT_fuda2,[r15](r17) ;
; inc.w r17 ;
; inc.b [r16] ;
;_Get_Fuda_Req3: ;
; cmp.b #$ff,wbBtoT_fuda3 ;
; be _Get_Fuda_Req4 ;
; mov.b wbBtoT_fuda3,[r15](r17) ;
; inc.w r17 ;
; inc.b [r16] ;
;_Get_Fuda_Req4: ;
; cmp.b #$ff,wbBtoT_fuda4 ;
; be end_Get_Fuda_Req ;
; mov.b wbBtoT_fuda4,[r15](r17) ;
; inc.w r17 ;
; inc.b [r16] ;
;end_Get_Fuda_Req: ;
; pop r17 ;
; rsr ;
;-----------------------------------------------------------------------------
; _Fuda_Shar_Cnt ; 取った札の点数別カウント
; in : r10(.w) -> 取った札ワーク
; out : r11(.w) -> 00点札の枚数
; : r12(.w) -> 05点札の枚数
; : r13(.w) -> 10点札の枚数
; : r14(.w) -> 20点札の枚数
;-----------------------------------------------------------------------------
_Fuda_Shar_Cnt: ;
pushm #r15-r17 ;
mov.w #$00,r11 ;00点札の枚数
mov.w #$00,r12 ;05点札の枚数
mov.w #$00,r13 ;10点札の枚数
mov.w #$00,r14 ;20点札の枚数
mov.w #32,r15 ;LC
job_Fuda_Shar_Cnt: ;
movz.bw [r10+],r16 ;
cmp.w #$ff,r16 ;
be end_Fuda_Shar_Cnt ;
mov.b tFuda_points(r16),r17 ;
job_Fuda_Shar_Cnt00: ;
test.b r17 ;
bne job_Fuda_Shar_Cnt05 ;
inc.w r11 ;
br loop__Fuda_Shar_Cnt ;
job_Fuda_Shar_Cnt05: ;
cmp.b #$01,r17 ;
bne job_Fuda_Shar_Cnt10 ;
inc.w r12 ;
br loop__Fuda_Shar_Cnt ;
job_Fuda_Shar_Cnt10: ;
cmp.b #$02,r17 ;
bne job_Fuda_Shar_Cnt20 ;
inc.w r13 ;
br loop__Fuda_Shar_Cnt ;
job_Fuda_Shar_Cnt20: ;
inc.w r14 ;
loop__Fuda_Shar_Cnt: ;
dec.w r15 ;
bne job_Fuda_Shar_Cnt ;
end_Fuda_Shar_Cnt: ;
popm #r15-r17 ;
rsr ;
;-----------------------------------------------------------------------------
; _Fuda_Dir_Pos_Set: : 札の直接ポジションセット
; in : r0(.w) -> 札ナンバー
; : r1(.h) -> H
; : r2(.h) -> V
; out : nothing
;-----------------------------------------------------------------------------
_Fuda_Dir_Pos_Set: ;
push r10 ;
mov.w r0,r10 ;逃がす
shl.w #$05,r10 ;
add.w #wFuda,r10 ;
mov.h r1,_Fuda_posH+$2[r10] ;
mov.h r2,_Fuda_posV+$2[r10] ;
mov.h #$00,_Fuda_posH[r10] ;
mov.h #$00,_Fuda_posV[r10] ;
end_Fuda_Dir_Pos_Set: ;
pop r10 ;
rsr ;
;-----------------------------------------------------------------------------
; _init_GetFuda_PosP ; プレイヤーの札移動ポジション等の割り出し
; in : r11(.w) -> 00点札の枚数
; : r12(.w) -> 05点札の枚数
; : r13(.w) -> 10点札の枚数
; : r14(.w) -> 20点札の枚数
; out : nothing
;-----------------------------------------------------------------------------
_init_GetFuda_PosP: ;
pushm #r15-r17 ;
job_init_GetFuda_PosP00: ;
test.w r11 ;
bne job2_init_GetFuda_PosP00 ;
mov.h #Hpos_PFX00,whGetFudaPos00P ;
br job_init_GetFuda_PosP05 ;
job2_init_GetFuda_PosP00: ;
shl.w #$03,r11 ;00点札総ドット数
movt.wh r11,r11 ;
neg.h r11,r11 ;
add.h #Hpos_PFX00,r11 ;
add.h #-8,r11 ;
mov.h r11,whGetFudaPos00P ;置く位置セット
job_init_GetFuda_PosP05: ;
test.w r12 ;
bne job2_init_GetFuda_PosP05 ;
mov.h #Hpos_PFX05,whGetFudaPos05P ;
br job_init_GetFuda_PosP10 ;
job2_init_GetFuda_PosP05: ;
mov.w r12,r16 ;逃がす
mov.w r16,r17 ;
mul.w #26,r12 ;05点札総ドット数
mov.w #HsizGetFuda05,r15 ;
cmp.w r15,r12 ;
bh job3_init_GetFuda_PosP05 ;置き領域オーバー
movt.wh r12,r12 ;
neg.h r12,r12 ;
add.h #26,r12 ;
add.h #Hpos_PFX05,r12 ;
add.h #-4,r12 ;
mov.h r12,whGetFudaPos05P ;
br job_init_GetFuda_PosP10 ;
job3_init_GetFuda_PosP05: ;
movt.wh r15,r15 ;
neg.h r15,r15 ;
add.h #Hpos_PFX05,r15 ;
add.h #-4,r15 ;
mov.h r15,whGetFudaPos05P ;
job_init_GetFuda_PosP10: ;
test.w r13 ;
bne job2_init_GetFuda_PosP10 ;
mov.h #Hpos_PFX10,whGetFudaPos10P ;
br job_init_GetFuda_PosP20 ;
job2_init_GetFuda_PosP10: ;
mov.w r13,r16 ;逃がす
mul.w #26,r13 ;10点札総ドット数
mov.w #HsizGetFuda10,r15 ;
cmp.w r15,r13 ;
bh job3_init_GetFuda_PosP10 ;置き領域オーバー
movt.wh r13,r13 ;
neg.h r13,r13 ;
add.h #26,r13 ;
add.h #Hpos_PFX10,r13 ;
add.h #-4,r13 ;
mov.h r13,whGetFudaPos10P ;
br job_init_GetFuda_PosP20 ;
job3_init_GetFuda_PosP10: ;
movt.wh r15,r15 ;
neg.h r15,r15 ;
add.h #Hpos_PFX10,r15 ;
add.h #-4,r15 ;
mov.h r15,whGetFudaPos10P ;
job_init_GetFuda_PosP20: ;
test.w r14 ;
bne job2_init_GetFuda_PosP20 ;
mov.h #Hpos_PFX20,whGetFudaPos20P ;
br end_init_GetFuda_PosP ;
job2_init_GetFuda_PosP20: ;
mov.w r14,r16 ;逃がす
mul.w #26,r14 ;20点札総ドット数
mov.w #HsizGetFuda20,r15 ;
cmp.w r15,r14 ;
bh job3_init_GetFuda_PosP20 ;置き領域オーバー
movt.wh r14,r14 ;
neg.h r14,r14 ;
add.h #26,r14 ;
add.h #Hpos_PFX20,r14 ;
add.h #-4,r14 ;
mov.h r14,whGetFudaPos20P ;
br end_init_GetFuda_PosP ;
job3_init_GetFuda_PosP20: ;
movt.wh r15,r15 ;
neg.h r15,r15 ;
add.h #Hpos_PFX20,r15 ;
add.h #-4,r15 ;
mov.h r15,whGetFudaPos20P ;
end_init_GetFuda_PosP: ;
popm #r15-r17 ;
rsr ;
;-----------------------------------------------------------------------------
; _init_GetFuda_SetP ; プレイヤーの札移動直前?
; in : r1(.w) -> 札ナンバー
; out : nothing
;-----------------------------------------------------------------------------
_init_GetFuda_SetP: ;
pushm #r0/r21-r22 ;
job_init_GetFuda_SetP: ;
mov.w r1,r0 ;
shl.w #$05,r0 ;
add.w #wFuda,r0 ;ワーク先頭の確保
mov.b tFuda_points(r1),r1 ;
job_init_GetFuda_SetP00: ;
test.b r1 ;
bne job_init_GetFuda_SetP05 ;
mov.h whGetFudaPos00P,r21 ;
mov.h #Vpos_PFX00,r22 ;
jsr _fuda_ptp_mov_init ;
add.h #-8,whGetFudaPos00P ;
br end_init_GetFuda_SetP ;
job_init_GetFuda_SetP05: ;
cmp.b #$01,r1 ;
bne job_init_GetFuda_SetP10 ;
mov.h whGetFudaPos05P,r21 ;
mov.h #Vpos_PFX05,r22 ;
jsr _fuda_ptp_mov_init ;
add.h #-4,whGetFudaPos05P ;
br end_init_GetFuda_SetP ;
job_init_GetFuda_SetP10: ;
cmp.b #$02,r1 ;
bne job_init_GetFuda_SetP20 ;
mov.h whGetFudaPos10P,r21 ;
mov.h #Vpos_PFX10,r22 ;
jsr _fuda_ptp_mov_init ;
add.h #-4,whGetFudaPos10P ;
br end_init_GetFuda_SetP ;
job_init_GetFuda_SetP20: ;
mov.h whGetFudaPos20P,r21 ;
mov.h #Vpos_PFX20,r22 ;
jsr _fuda_ptp_mov_init ;
add.h #-4,whGetFudaPos20P ;
end_init_GetFuda_SetP: ;
popm #r0/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; _GetFuda_Arg_AgnP: ; 取った札の再配置(最新版)
; in : nothing
; out : nothing
;-----------------------------------------------------------------------------
_GetFuda_Arg_AgnP: ;
pushm #r0-r2/r10-r25 ;
mov.w #wbGetFudaP,r10 ;
jsr _Fuda_Shar_Cnt ;
mov.w #wbGet00FudaP,r20 ;
mov.w #wbGet05FudaP,r21 ;
mov.w #wbGet10FudaP,r22 ;
mov.w #wbGet20FudaP,r23 ;
mov.w r11,r15 ;LC00
mov.w r12,r16 ;LC05
mov.w r13,r17 ;LC10
mov.w r14,r18 ;LC20
job_GetFuda_Arg_AgnP: ;
init_GetFuda_Arg_AgnP00: ;00点札
test.w r11 ;
be init_GetFuda_Arg_AgnP05 ;
mov.h #Hpos_PFX00,r11 ;
job_GetFuda_Arg_AgnP00: ;
movz.bw [r20+],r24 ;
mov.w r24,r0 ;
mov.h r11,r1 ;
mov.h #Vpos_PFX00,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.h #-8,r11 ;
loop_GetFuda_Arg_AgnP00: ;
dec.w r15 ;
bnz job_GetFuda_Arg_AgnP00 ;
init_GetFuda_Arg_AgnP05: ;05点札
mov.w r12,r19 ;逃がす
test.w r12 ;
be init_GetFuda_Arg_AgnP10 ;除外対象
mul.w #26,r12 ;取った札の総ドット数
sha.w #16,r12 ;
mov.w #(HsizGetFuda05+26),r25 ;MAX幅
sha.w #16,r25 ;浮動小数点演算用
cmp.w r25,r12 ;
bh init2_GetFuda_Arg_AgnP05 ;MAX幅を越えているとき
mov.w #-26,r12 ;札重なり幅(この場合は無し)
sha.w #16,r12 ;浮動小数点演算用
mov.w #$00,r25 ;
br job_GetFuda_Arg_AgnP05 ;
init2_GetFuda_Arg_AgnP05: ;
sub.w r12,r25 ;ここでマイナス
dec.w r19 ;
div.w r19,r25 ;
add.w #$1a0000,r25 ;26*65536(浮動小数点演算用)
mov.w r25,r12 ;
neg.w r12,r12 ;
mov.w #$00,r25 ;
job_GetFuda_Arg_AgnP05: ;
movz.bw [r21+],r24 ;
mov.w r24,r0 ;
; mov.w r12,r1 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_PFX05,r1 ;
mov.h #Vpos_PFX05,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r12,r25 ;
loop_GetFuda_Arg_AgnP05: ;
dec.w r16 ;
bnz job_GetFuda_Arg_AgnP05 ;
;-----------------------------------------------------------------------------
init_GetFuda_Arg_AgnP10: ;
mov.w r13,r19 ;逃がす
test.w r13 ;
be init_GetFuda_Arg_AgnP20 ;除外対象
mul.w #26,r13 ;取った札の総ドット数
sha.w #16,r13 ;
mov.w #(HsizGetFuda10+26),r25 ;MAX幅
sha.w #16,r25 ;
cmp.w r25,r13 ;
bh init2_GetFuda_Arg_AgnP10 ;MAX幅を越えているとき
mov.w #-26,r13 ;札重なり幅(この場合は無し)
sha.w #16,r13 ;浮動小数点演算用
mov.w #$00,r25 ;
br job_GetFuda_Arg_AgnP10 ;
init2_GetFuda_Arg_AgnP10: ;
sub.w r13,r25 ;ここでマイナス
dec.w r19 ;
div.w r19,r25 ;
add.w #$1a0000,r25 ;26*65536(浮動小数点演算用)
mov.w r25,r13 ;
neg.w r13,r13 ;
mov.w #$00,r25 ;
job_GetFuda_Arg_AgnP10: ;
movz.bw [r22+],r24 ;
mov.w r24,r0 ;
; mov.w r13,r1 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_PFX10,r1 ;
mov.h #Vpos_PFX10,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r13,r25 ;
loop_GetFuda_Arg_AgnP10: ;
dec.w r17 ;
bnz job_GetFuda_Arg_AgnP10 ;
;-----------------------------------------------------------------------------
init_GetFuda_Arg_AgnP20: ;
mov.w r14,r19 ;逃がす
test.w r14 ;
be end_GetFuda_Arg_AgnP ;除外対象
mul.w #26,r14 ;取った札の総ドット数
sha.w #16,r14 ;
mov.w #(HsizGetFuda20+26),r25 ;MAX幅
sha.w #16,r25 ;
cmp.w r25,r14 ;
bh init2_GetFuda_Arg_AgnP20 ;MAX幅を越えているとき
mov.w #-26,r14 ;札重なり幅(この場合は無し)
sha.w #16,r14 ;浮動小数点演算用
mov.w #$00,r25 ;
br job_GetFuda_Arg_AgnP20 ;
init2_GetFuda_Arg_AgnP20: ;
sub.w r14,r25 ;ここでマイナス
dec.w r19 ;
div.w r19,r25 ;
add.w #$1a0000,r25 ;26*65536(浮動小数点演算用)
mov.w r25,r14 ;
neg.w r14,r14 ;
mov.w #$00,r25 ;
job_GetFuda_Arg_AgnP20: ;
movz.bw [r23+],r24 ;
mov.w r24,r0 ;
; mov.w r14,r1 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_PFX20,r1 ;
mov.h #Vpos_PFX20,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r14,r25 ;
loop_GetFuda_Arg_AgnP20: ;
dec.w r18 ;
bnz job_GetFuda_Arg_AgnP20 ;
end_GetFuda_Arg_AgnP: ;
popm #r0-r2/r10-r25 ;
rsr ;
;-----------------------------------------------------------------------------
; _init_GetFuda_PosC ; CPUの札移動ポジション等の割り出し
; in : r11(.w) -> 00点札の枚数
; : r12(.w) -> 05点札の枚数
; : r13(.w) -> 10点札の枚数
; : r14(.w) -> 20点札の枚数
; out : nothing
;-----------------------------------------------------------------------------
_init_GetFuda_PosC: ;
pushm #r15-r17 ;
job_init_GetFuda_PosC00: ;
test.w r11 ;
bne job2_init_GetFuda_PosC00 ;
mov.h #Hpos_CPUColKs,whGetFudaPos00C ;
br job_init_GetFuda_PosC05 ;
job2_init_GetFuda_PosC00: ;
mov.w r11,r16 ;逃がす
mov.w r16,r17 ;
mul.w #26,r11 ;00点札総ドット数
mov.w #HsizGetFudaC00,r15 ;
cmp.w r15,r11 ;
bh job3_init_GetFuda_PosC00 ;置き領域オーバー
movt.wh r11,r11 ;
add.h #-26,r11 ;
add.h #Hpos_CPUColKs,r11 ;
add.h #4,r11 ;
mov.h r11,whGetFudaPos00C ;
br job_init_GetFuda_PosC05 ;
job3_init_GetFuda_PosC00: ;
movt.wh r15,r15 ;
add.h #Hpos_CPUColKs,r15 ;
add.h #4,r15 ;
mov.h r15,whGetFudaPos00C ;
job_init_GetFuda_PosC05: ;
add.w r12,r13 ;
add.w r14,r13 ;3種混同
test.w r13 ;
bne job2_init_GetFuda_PosC05 ;
mov.h #Hpos_CPUColYaku,whGetFudaPos35C ;
br end_init_GetFuda_PosC ;
job2_init_GetFuda_PosC05: ;
mov.w r13,r16 ;逃がす
mul.w #26,r13 ;その他の札総ドット数
mov.w whGetFudaBMaxC,r15 ;
cmp.w r15,r13 ;
bh job3_init_GetFuda_PosC05 ;置き領域オーバー
movt.wh r13,r13 ;
add.h #-26,r13 ;
add.h #Hpos_CPUColYaku,r13 ;
add.h #4,r13 ;
mov.h r13,whGetFudaPos35C ;
br end_init_GetFuda_PosC ;
job3_init_GetFuda_PosC05: ;
movt.wh r15,r15 ;
add.h #Hpos_CPUColYaku,r15 ;
add.h #4,r15 ;
mov.h r15,whGetFudaPos35C ;
end_init_GetFuda_PosC: ;
popm #r15-r17 ;
rsr ;
;-----------------------------------------------------------------------------
; _init_GetFuda_SetC ; CPUの札移動直前?
; in : r1(.w) -> 札ナンバー
; out : nothing
;-----------------------------------------------------------------------------
_init_GetFuda_SetC: ;
pushm #r0/r21-r22 ;
job_init_GetFuda_SetC: ;
mov.w r1,r0 ;
shl.w #$05,r0 ;
add.w #wFuda,r0 ;ワーク先頭の確保
mov.b tFuda_points(r1),r1 ;
job_init_GetFuda_SetC00: ;
test.b r1 ;
bne job_init_GetFuda_SetC05 ;
mov.h whGetFudaPos00C,r21 ;
mov.h #Vpos_CPUColKs,r22 ;
jsr _fuda_ptp_mov_init ;
add.h #4,whGetFudaPos00C ;
br end_init_GetFuda_SetC ;
job_init_GetFuda_SetC05: ;
mov.h whGetFudaPos35C,r21 ;
mov.h #Vpos_CPUColYaku,r22 ;
jsr _fuda_ptp_mov_init ;
add.h #4,whGetFudaPos35C ;
end_init_GetFuda_SetC: ;
popm #r0/r21-r22 ;
rsr ;
;-----------------------------------------------------------------------------
; _GetFuda_Arg_AgnC: ; 取った札の再配置(最新版)
; in : nothing
; out : nothing
;-----------------------------------------------------------------------------
_GetFuda_Arg_AgnC: ;
pushm #r0-r2/r10-r25 ;
mov.w #wbGetFudaC,r10 ;
jsr _Fuda_Shar_Cnt ;
mov.w #wbGet00FudaC,r20 ;
mov.w #wbGet05FudaC,r21 ;
mov.w #wbGet10FudaC,r22 ;
mov.w #wbGet20FudaC,r23 ;
mov.w r11,r15 ;LC00
mov.w r12,r16 ;LC05
mov.w r13,r17 ;LC10
mov.w r14,r18 ;LC20
job_GetFuda_Arg_AgnC: ;
init_GetFuda_Arg_AgnC00: ;05点札
mov.w r11,r19 ;逃がす
test.w r11 ;
be init_GetFuda_Arg_AgnC05 ;除外対象
mul.w #26,r11 ;取った札の総ドット数
sha.w #16,r11 ;
mov.w #(HsizGetFudaC00+26),r25 ;MAX幅
sha.w #16,r25 ;浮動小数点演算用
cmp.w r25,r11 ;
bh init2_GetFuda_Arg_AgnC00 ;MAX幅を越えているとき
mov.w #26,r11 ;札重なり幅(この場合は無し)
sha.w #16,r11 ;浮動小数点演算用
mov.w #$00,r25 ;
br job_GetFuda_Arg_AgnC00 ;
init2_GetFuda_Arg_AgnC00: ;
sub.w r11,r25 ;ここでマイナス
dec.w r19 ;
div.w r19,r25 ;
add.w #$1a0000,r25 ;26*65536(浮動小数点演算用)
mov.w r25,r11 ;
mov.w #$00,r25 ;
job_GetFuda_Arg_AgnC00: ;
movz.bw [r20+],r24 ;
mov.w r24,r0 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_CPUColKs,r1 ;
mov.h #Vpos_CPUColKs,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r11,r25 ;
loop_GetFuda_Arg_AgnC00: ;
dec.w r15 ;
bnz job_GetFuda_Arg_AgnC00 ;
;-----------------------------------------------------------------------------
init_GetFuda_Arg_AgnC05: ;
mov.w r16,r15 ;
add.w r17,r16 ;LC
add.w r18,r16 ;LC
add.w r13,r12 ;
add.w r14,r12 ;
mov.w r12,r19 ;逃がす
test.w r12 ;
be end_GetFuda_Arg_AgnC ;除外対象
mul.w #26,r12 ;取った札の総ドット数
sha.w #16,r12 ;
movz.hw whGetFudaBMaxC,r25 ;MAX幅
add.w #26,r25 ;MAX幅+α
sha.w #16,r25 ;
cmp.w r25,r12 ;
bh init2_GetFuda_Arg_AgnC05 ;MAX幅を越えているとき
mov.w #26,r12 ;札重なり幅(この場合は無し)
sha.w #16,r12 ;浮動小数点演算用
mov.w #$00,r25 ;
br ex_job_GetFuda_Arg_AgnC05 ;
init2_GetFuda_Arg_AgnC05: ;
sub.w r12,r25 ;ここでマイナス
dec.w r19 ;
div.w r19,r25 ;
add.w #$1a0000,r25 ;26*65536(浮動小数点演算用)
mov.w r25,r12 ;
mov.w #$00,r25 ;
ex_job_GetFuda_Arg_AgnC05: ;
test.w r15 ;
be ex_job_GetFuda_Arg_AgnC10 ;
job_GetFuda_Arg_AgnC05: ;
movz.bw [r21+],r24 ;
cmp.w #$ff,r24 ;
be ex_job_GetFuda_Arg_AgnC10 ;コロル
mov.w r24,r0 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_CPUColYaku,r1 ;
mov.h #Vpos_CPUColYaku,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r12,r25 ;
loop_GetFuda_Arg_AgnC05: ;
dec.w r15 ;
bnz job_GetFuda_Arg_AgnC05 ;
ex_job_GetFuda_Arg_AgnC10: ;
test.w r17 ;
be ex_job_GetFuda_Arg_AgnC20 ;
job_GetFuda_Arg_AgnC10: ;
movz.bw [r22+],r24 ;
cmp.w #$ff,r24 ;
be ex_job_GetFuda_Arg_AgnC20 ;
mov.w r24,r0 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_CPUColYaku,r1 ;
mov.h #Vpos_CPUColYaku,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r12,r25 ;
loop_GetFuda_Arg_AgnC10: ;
dec.w r17 ;
bnz job_GetFuda_Arg_AgnC10 ;
ex_job_GetFuda_Arg_AgnC20: ;
test.w r18 ;
be end_GetFuda_Arg_AgnC ;
job_GetFuda_Arg_AgnC20: ;
movz.bw [r23+],r24 ;
cmp.w #$ff,r24 ;
be end_GetFuda_Arg_AgnC ;
mov.w r24,r0 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_CPUColYaku,r1 ;
mov.h #Vpos_CPUColYaku,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r12,r25 ;
loop_GetFuda_Arg_AgnC20: ;
dec.w r18 ;
bnz job_GetFuda_Arg_AgnC20 ;
end_GetFuda_Arg_AgnC: ;
popm #r0-r2/r10-r25 ;
rsr ;
;-----------------------------------------------------------------------------
; Fuda_Pri_Man ; 札表示プライオリティーコントローラー
; in : nothing
; out : nothing
;-----------------------------------------------------------------------------
Fuda_Pri_Man: ;下から表示すんぞぉ
pushm #r10/r11 ;
mov.b #100,wbFudaPriCnt ;試験的に100から始めてみる
mov.w #wPly_Tehuda,r10 ;プレイヤーの手札
mov.w #08,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wCpu_Tehuda,r10 ;CPUの手札
mov.w #08,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet00FudaP,r10 ;プレイヤーの取った00点札
mov.w #24,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet05FudaP,r10 ;プレイヤーの取った05点札
mov.w #10,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet10FudaP,r10 ;プレイヤーの取った10点札
mov.w #09,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet20FudaP,r10 ;プレイヤーの取った20点札
mov.w #05,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet00FudaC,r10 ;CPUの取った00点札
mov.w #24,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet05FudaC,r10 ;CPUの取った05点札
mov.w #10,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet10FudaC,r10 ;CPUの取った10点札
mov.w #09,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbGet20FudaC,r10 ;CPUの取った20点札
mov.w #05,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wBa_huda,r10 ;場札
mov.w #12,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbBtoT_fuda4,r10 ;手札に叩かれる方
mov.w #01,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbBtoT_fuda3,r10 ;起き札に叩かれる方
mov.w #01,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbBtoT_fuda2,r10 ;手札
mov.w #01,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbBtoT_fuda1,r10 ;起き札
mov.w #01,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbTtoB_fuda,r10 ;手札から場札への捨て札用ワーク
mov.w #01,r11 ;
jsr _Fuda_Pri_Set ;
mov.w #wbMtoB_fuda,r10 ;めくり札から場札への移動札ワーク
mov.w #01,r11 ;
jsr _Fuda_Pri_Set ;
popm #r10/r11 ;
rsr ;
;-----------------------------------------------------------------------------
; _Fuda_Pri_Set ; 札表示プライオリティーセット
; in : r10(.w) -> 札ナンバーの入っているワークAD
; : r11(.w) -> ワーク用LC
; out : nothing
;-----------------------------------------------------------------------------
_Fuda_Pri_Set: ;
push r0 ;
job_Fuda_Pri_Set: ;
mov.b [r10+],r0 ;
cmp.b #$ff,r0 ;
be loop_job_Fuda_Pri_Set ;
movz.bw r0,r0 ;
shl.w #$05,r0 ;
add.w #wFuda,r0 ;
mov.b wbFudaPriCnt,_Fuda_pri[r0] ;
dec.b wbFudaPriCnt ;
loop_job_Fuda_Pri_Set: ;
dec.w r11 ;
bnz job_Fuda_Pri_Set ;
pop r0 ;
rsr ;
;-----------------------------------------------------------------------------
; _Fuda_Hurry ; 「札を切ってね」表示内部用
; in : nothing
; out : nothing
;-----------------------------------------------------------------------------
_Fuda_Hurry: ;
test.b wbDemoPlay ;デモプレイ中は、
bne Kill_Fuda_Hurry ;コロる
jsr Esect_Anm ;
dec.w _Ese_Mov_Tbl[r0] ;
bz Kill_Fuda_Hurry ;タイマー切れでもコロる
test.b wbFudaHurry ;
bne end_Fuda_Hurry ;
Kill_Fuda_Hurry: ;
jsr Esect_Kill ;コロる
mov.b #$00,wbFudaHurry ;
end_Fuda_Hurry: ;
rsr ;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; データ領域
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
.section data
.align 4
tJD_Cpu_KoiKoi: ;CPU用コイコイ判断データ(残り枚数依存型)
db 01 ;1人目
db 02 ;2人目
db 03 ;3人目
db 04 ;4人目
db 04 ;5人目
; db 00 ;6人目(隠しキャラ)
; db 05 ;
; db 06 ;
; db 07 ;
; db 08 ;
tTehudaPosP: ;プレイヤー手札HV
dh Hpos_PLYHand1-2,Vpos_PLYHand1,Hpos_PLYHand2-2,Vpos_PLYHand2
dh Hpos_PLYHand3-2,Vpos_PLYHand3,Hpos_PLYHand4-2,Vpos_PLYHand4
dh Hpos_PLYHand5-2,Vpos_PLYHand5,Hpos_PLYHand6-2,Vpos_PLYHand6
dh Hpos_PLYHand7-2,Vpos_PLYHand7,Hpos_PLYHand8-2,Vpos_PLYHand8
tTehudaPosC: ;CPU手札HV
dh Hpos_CPUHand1,Vpos_CPUHand1,Hpos_CPUHand2,Vpos_CPUHand2
dh Hpos_CPUHand3,Vpos_CPUHand3,Hpos_CPUHand4,Vpos_CPUHand4
dh Hpos_CPUHand5,Vpos_CPUHand5,Hpos_CPUHand6,Vpos_CPUHand6
dh Hpos_CPUHand7,Vpos_CPUHand7,Hpos_CPUHand8,Vpos_CPUHand8
tBahudaPos1: ;場札位置HV
; dh Hpos_Table01,Vpos_Table01,Hpos_Table02,Vpos_Table02
dh Hpos_Table03,Vpos_Table03,Hpos_Table04,Vpos_Table04
dh Hpos_Table05,Vpos_Table05,Hpos_Table06,Vpos_Table06
dh Hpos_Table07,Vpos_Table07,Hpos_Table08,Vpos_Table08
dh Hpos_Table09,Vpos_Table09,Hpos_Table10,Vpos_Table10
dh Hpos_Table11,Vpos_Table11,Hpos_Table12,Vpos_Table12
dh Hpos_Table13,Vpos_Table13,Hpos_Table14,Vpos_Table14
tBahudaPos2: ;場札への合わせ位置HV
; dh Hpos_Table01+HSpos_Same,Vpos_Table01+VSpos_Same
; dh Hpos_Table02+HSpos_Same,Vpos_Table02+VSpos_Same
dh Hpos_Table03+HSpos_Same,Vpos_Table03+VSpos_Same
dh Hpos_Table04+HSpos_Same,Vpos_Table04+VSpos_Same
dh Hpos_Table05+HSpos_Same,Vpos_Table05+VSpos_Same
dh Hpos_Table06+HSpos_Same,Vpos_Table06+VSpos_Same
dh Hpos_Table07+HSpos_Same,Vpos_Table07+VSpos_Same
dh Hpos_Table08+HSpos_Same,Vpos_Table08+VSpos_Same
dh Hpos_Table09+HSpos_Same,Vpos_Table09+VSpos_Same
dh Hpos_Table10+HSpos_Same,Vpos_Table10+VSpos_Same
dh Hpos_Table11+HSpos_Same,Vpos_Table11+VSpos_Same
dh Hpos_Table12+HSpos_Same,Vpos_Table12+VSpos_Same
dh Hpos_Table13+HSpos_Same,Vpos_Table13+VSpos_Same
dh Hpos_Table14+HSpos_Same,Vpos_Table14+VSpos_Same
tBaCurPos: ;場札へのカーソル位置HV
; dh Hpos_Ba_Cur01,Vpos_Ba_Cur01,Hpos_Ba_Cur02,Vpos_Ba_Cur02
dh Hpos_Ba_Cur03,Vpos_Ba_Cur03,Hpos_Ba_Cur04,Vpos_Ba_Cur04
dh Hpos_Ba_Cur05,Vpos_Ba_Cur05,Hpos_Ba_Cur06,Vpos_Ba_Cur06
dh Hpos_Ba_Cur07,Vpos_Ba_Cur07,Hpos_Ba_Cur08,Vpos_Ba_Cur08
dh Hpos_Ba_Cur09,Vpos_Ba_Cur09,Hpos_Ba_Cur10,Vpos_Ba_Cur10
dh Hpos_Ba_Cur11,Vpos_Ba_Cur11,Hpos_Ba_Cur12,Vpos_Ba_Cur12
dh Hpos_Ba_Cur13,Vpos_Ba_Cur13,Hpos_Ba_Cur14,Vpos_Ba_Cur14
tAnm_Cur_Yes:
dw tAnm_Cur_Yes1,tAnm_Cur_Yes0
tAnm_Cur_No:
dw tAnm_Cur_No0,tAnm_Cur_No1
tAnm_Cur_Yes0: ;Yesアニメーション用データ(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
dh __Msg_yes0 ;Yes(暗)
tAnm_Cur_Yes1: ;Yesアニメーション用データ(明)
dh __Msg_yes1 ;Yes(明)0
dh __Msg_yes1 ;Yes(明)0
dh __Msg_yes1 ;Yes(明)0
dh __Msg_yes1 ;Yes(明)0
dh __Msg_yes1 ;Yes(明)0
dh __Msg_yes1 ;Yes(明)0
dh __Msg_yes2 ;Yes(明)1
dh __Msg_yes2 ;Yes(明)1
dh __Msg_yes2 ;Yes(明)1
dh __Msg_yes2 ;Yes(明)1
dh __Msg_yes2 ;Yes(明)1
dh __Msg_yes2 ;Yes(明)1
dh __Msg_yes3 ;Yes(明)2
dh __Msg_yes3 ;Yes(明)2
dh __Msg_yes3 ;Yes(明)2
dh __Msg_yes3 ;Yes(明)2
dh __Msg_yes3 ;Yes(明)2
dh __Msg_yes3 ;Yes(明)2
tAnm_Cur_No0: ;Noアニメーション用データ(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
dh __Msg_no0 ;No(暗)
tAnm_Cur_No1: ;Noアニメーション用データ(明)
dh __Msg_no1 ;No(明)0
dh __Msg_no1 ;No(明)0
dh __Msg_no1 ;No(明)0
dh __Msg_no1 ;No(明)0
dh __Msg_no1 ;No(明)0
dh __Msg_no1 ;No(明)0
dh __Msg_no2 ;No(明)1
dh __Msg_no2 ;No(明)1
dh __Msg_no2 ;No(明)1
dh __Msg_no2 ;No(明)1
dh __Msg_no2 ;No(明)1
dh __Msg_no2 ;No(明)1
dh __Msg_no3 ;No(明)2
dh __Msg_no3 ;No(明)2
dh __Msg_no3 ;No(明)2
dh __Msg_no3 ;No(明)2
dh __Msg_no3 ;No(明)2
dh __Msg_no3 ;No(明)2
tMov_All_Fuda4: ;札4の移動
db 0,0,0,0
tMov_All_Fuda3: ;札3の移動
db 0,0,0,0
tMov_All_Fuda2: ;札2の移動
db 0,0,0,0
tMov_All_Fuda1: ;札1の移動
db 2,1,1,1
db 1,1,1,1
db 1,1,1,1
db 1,1,1,1
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; エセクト用リクエストデータ
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
tEsect_Ba_cur: ;場カーソル、及びメッセージパネル、その他のリクエスト
;場カーソル
__mEsect_Init1 _Ba_Cur ;実行プログラム名
__mEsect_Init2 020,_NullData,__NullData ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 672,480 ;H、V
__mEsect_Init4 tFuda_pos_cur,tFuda_cel_cur ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
;合わせ札はこれでいいですか?
__mEsect_Init1 _Ba_Cur_Msg ;実行プログラム名
__mEsect_Init2 020,_Msg_hit1,__Msg_hit1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgSel,Vpos_DlgSel ;H、V
__mEsect_Init4 000,tAnm_Msg1 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
;Yes
__mEsect_Init1 _Ba_Cur_YN ;実行プログラム名
__mEsect_Init2 020,_Msg_yes1,__Msg_yes1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgYes,Vpos_DlgYes ;H、V
__mEsect_Init4 000,tAnm_Cur_Yes ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
;No
__mEsect_Init1 _Ba_Cur_YN ;実行プログラム名
__mEsect_Init2 020,_Msg_no0,__Msg_no0 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgNo,Vpos_DlgNo ;H、V
__mEsect_Init4 000,tAnm_Cur_No ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
STOP
tEsect_Koi_Ok: ;コイコイするかい? セット JS版
;こいこいする?
__mEsect_Init1 _Ba_Cur_Msg ;実行プログラム名
__mEsect_Init2 020,_Msg_koi1,__Msg_koi1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgCall,Vpos_DlgCall ;H、V
__mEsect_Init4 000,tAnm_Msg2 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
;Yes
__mEsect_Init1 _Ba_Cur_YN ;実行プログラム名
__mEsect_Init2 020,_Msg_yes1,__Msg_yes1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgYes2,Vpos_DlgYes2 ;H、V
__mEsect_Init4 000,tAnm_Cur_Yes ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
;No
__mEsect_Init1 _Ba_Cur_YN ;実行プログラム名
__mEsect_Init2 020,_Msg_no0,__Msg_no0 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgNo2,Vpos_DlgNo2 ;H、V
__mEsect_Init4 000,tAnm_Cur_No ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
STOP
tEsect_Koi_Ok2: ;コイコイするかい? セット KB版
;こいこいする?
__mEsect_Init1 _Ba_Cur_Msg ;実行プログラム名
__mEsect_Init2 020,_Msg_koi1,__Msg_koi1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgCall,Vpos_DlgCall ;H、V
__mEsect_Init4 000,tAnm_Msg2 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
;YesA
__mEsect_Init1 _Ba_Cur_Msg ;実行プログラム名
__mEsect_Init2 020,_MsgM_yes1,__MsgM_yes1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgYes2,Vpos_DlgYes2 ;H、V
__mEsect_Init4 000,tAnm_Yes_KB ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
;NoN
__mEsect_Init1 _Ba_Cur_Msg ;実行プログラム名
__mEsect_Init2 020,_MsgM_no1,__MsgM_no1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 Hpos_DlgNo2,Vpos_DlgNo2 ;H、V
__mEsect_Init4 000,tAnm_No_KB ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
STOP
tEsect_Fuda_Hurry: ;「札を切ってね」
__mEsect_Init1 _Fuda_Hurry ;実行プログラム名
__mEsect_Init2 020,_Msg_hury1,__Msg_hury1 ;プライオリティー,子オブジェの数,子オブジェの場所
__mEsect_Init3 16*8,16*3+8 ;H、V
__mEsect_Init4 120,tAnm_Msg3 ;移動テーブル先頭アドレス、アニメーションテーブルアドレス
STOP
;-----------------------------------------------------------------------------
; エセクト用アニメデータ
;-----------------------------------------------------------------------------
tAnm_Msg1:
__mEsect_Anm $ffff,tCel_Msg1
STOP
tCel_Msg1:
__mEsect_Cel 006,_Msg_hit1,__Msg_hit1 ;「合わせ札はこれでいい?」0
__mEsect_Cel 006,_Msg_hit2,__Msg_hit2 ;「合わせ札はこれでいい?」1
__mEsect_Cel 006,_Msg_hit3,__Msg_hit3 ;「合わせ札はこれでいい?」2
STOP
tAnm_Msg2:
__mEsect_Anm $ffff,tCel_Msg2
STOP
tCel_Msg2:
__mEsect_Cel 006,_Msg_koi1,__Msg_koi1 ;「こいこいする?」0
__mEsect_Cel 006,_Msg_koi2,__Msg_koi2 ;「こいこいする?」1
__mEsect_Cel 006,_Msg_koi3,__Msg_koi3 ;「こいこいする?」2
STOP
tAnm_Msg3:
__mEsect_Anm $ffff,tCel_Msg3
STOP
tCel_Msg3:
__mEsect_Cel 006,_Msg_hury1,__Msg_hury1 ;「札を切ってね」0
__mEsect_Cel 006,_Msg_hury2,__Msg_hury2 ;「札を切ってね」1
__mEsect_Cel 006,_Msg_hury3,__Msg_hury3 ;「札を切ってね」2
STOP
tAnm_Yes_KB:
__mEsect_Anm $ffff,tCel_Yes_KB
STOP
tCel_Yes_KB:
__mEsect_Cel 006,_MsgM_yes1,__MsgM_yes1 ;YesA(明)0
__mEsect_Cel 006,_MsgM_yes2,__MsgM_yes2 ;YesA(明)1
__mEsect_Cel 006,_MsgM_yes3,__MsgM_yes3 ;YesA(明)2
STOP
tAnm_No_KB:
__mEsect_Anm $ffff,tCel_No_KB
STOP
tCel_No_KB:
__mEsect_Cel 006,_MsgM_no1,__MsgM_no1 ;NoN(明)0
__mEsect_Cel 006,_MsgM_no2,__MsgM_no2 ;NoN(明)1
__mEsect_Cel 006,_MsgM_no3,__MsgM_no3 ;NoN(明)2
STOP
;-----------------------------------------------------------------------------
end
mov.w r24,r0 ;
mov.w r25,r1 ;
sha.w #-16,r1 ;
movt.wh r1,r1 ;
add.h #Hpos_CPUColKs,r1 ;
mov.h #Vpos_CPUColKs,r2 ;
jsr _Fuda_Dir_Pos_Set ;
add.w r11,r25 ;
loop_GetFuda_Arg_AgnC00: ;
dec.w r15 ;
bnz job_GetFuda_Arg_AgnC00 ;
;-----------------------------------------------------------------------------
init_