2019年 7月 26日
前回からまた 1ヶ月あっという間に過ぎてしまいました。
デバッグにつぐデバッグで、やっとまともに動くようになりました。
総日数 4ヶ月、恐るべし戦略プログラム。
結局夏休み販売に間に合いませんでしたけど、これが最後の山(今度こそだと思う、あってくれ)で、あとは音要素と、オープニング、エンディング、タイトル、オプション、あー後 SAVE LOADかあ、これも大変そうだな、それとデバッグとゲームバランスの調整とか。
そろそろ仕上げの段階に入ると思う、でもまだ何ヶ月かかかるだろうなあ。
代わりに次週から夏休み企画として、今回の成果を元に、またゆっくり動画を 1週ずつ上げていく予定です。
お楽しみに。
それでは実演を。

赤がCPU。
攻めて行きます。

HEX内のの 1段目の数字は、その国の配備戦力。
2段目は、その国の隣接する国の脅威値、つまり必要防衛戦力。
3段目は、左がその国の建設物で、右は建設要求物。
1は城、7は砦で、攻める国の隣接する自領に建てられる。
砦が建てられた。

ただこのテストでは敵を弱くしてあるので、砦が立つ前に占領していってしまう。
要らなくなった砦は取り壊され、ユニット上限の要求が無ければ、まず鍛冶屋が優先的に建てられる。

鍛冶屋はその国のアイテム出現率とアイテムLvを上げてくれる、魔術値の一番高い国に建てられる。
サークルは第二人材発掘予定地で、その国のマナを上げてくれる。
画像だと、先に建てられたサークル(3)は解体要請され、別のもっとマナの高い地に建設要求されてる。
プレイヤーと隣接した。

隣接した国で戦力が足りない場合、外交館が建てられ、領主の魅力に応じて配備戦力値が 1.5~2.0倍くらいに評価される。
プレイヤーには意味が無いため、プレイヤー隣接の場合は砦にする予定。
塔は第二アイテム地で、魔術を上げる。
市場は第二人口地で、人口を上げる。
11国、14国は倉庫で、アイテム数が上限の時に上限を上げるために建てられる。
しかしこれはバグで、一度に 1つだけ建てるように修正しないと。
鍛冶屋の国の様子。

隣接する脅威が無いため、戦力配備はしてない。
24 / 30はユニットの現在数 / 最大数、50 / 150はアイテムの現在数 / 最大数。
pubsnは人材府の建設数で、ユニットの上限を上げる、pibsnは倉庫の数で 2個建てられていて、元値 + 1個 50アイテムなのが分かる。
鍛冶屋領主のユニット装備は知力装備だったはず。

警察なら筋力装備、人材なら魅力装備と自動装備してくれる。
デバッグ表示のため分かり難いが、ユニットが余っていたり、国の数が一定数だと政府(ガバメント)にも配備してくれる。

左の数字はユニット種類で、右は配備している場所、1000の値が政府配備。
画像はプレイヤーの政府だが、こんな感じ。

余ってる土地には、最後に寺院が建てられる。

寺院の効果はオールマイティで、かつ祈りによって災害を抑えるという効果を持つ。
なお、このテストでは治安が始めから 100%にしてあるため、警察署が建てられないが、普段は治安が 100%になるまで、ほとんどの土地に警察署が建てられる事になる。
ユニットが上限になった。

どこかに人材府が建てられるはず。

右上の 22国に人材府が建てられた。

人材府が最優先で建てられ、鍛冶屋が 2番目。
人材府が最初に建てられないのは、上限の他に城が第一人材地であるため、マナ値によって変わってくる。
以下優先順位順に、各建設物が建てかえられる。
上限が増えてる。

全ての国を占領し、こんな感じで落ち着いた。

プレイヤー隣接国は戦力が上回っているため、余裕の寺院配置。
ちなみに 1国で攻める場合は、相手国戦力の 2倍無いと攻めない。
隣接 2国で攻める場合、3国で攻める場合を作ってある。
まあ恐らく、この状態になったら膠着状態になって千日手の可能性がある、後日の課題。
以上、そんな感じです。
それでは今回はソースをそのまま上げます。
緑の部分はコメントアウトで、実行時には反映されませんが、格闘の跡が分かるでしょう。
ちなみに左に寄せてあるコードは、だいたいデバッグ用です。
*hero_per ; 英雄の行動順番
repeat 26 ; リセット
hmp(cnt)=0 ; ヒーローの勢力値
hap(cnt)=0 ; 順列
loop
repeat 25,1 : pn=mpl(cnt)
if pn=0 : continue ; ヒーローの勢力では無い
hmp(pn)+=wp(cnt) ; 戦力値+
loop
repeat 25,1 : pn1=cnt
if hf(pn1)=0 : continue ; 生存確認
repeat 25 ; 順列のソート
if hap(cnt)=0 : hap(cnt)=pn1 : break ; 空白なら入れて終わり
if hmp(pn1)>hmp(hap(cnt)) : continue ; 値比較
pn2=hap(cnt) : hap(cnt)=pn1 : pn1=pn2 ; 入れ替え
loop
loop
;hper_put
return
#deffunc eq_set int eq_setn ; 単un装備
eq_setc=0
repeat eq_setn
eq_setc+
if eq_setc\3=2 {
hrs_eq 2 : if un=0 : hrs_eq 1 ; 2回目
continue
}
hrs_eq 1 : if un=0 : hrs_eq 2 ; 1と3回目
loop
;hrt1c=0 : hrt2c=0 : hrt3c=0 ; 現在の列の順番をリセット
return
#deffunc haibi int haibim,int haibin ; 戦力配備
;if fff=1 : hrs_dpt : pkey
;if fff=1 : hrs_dpt : pkey : fff=0
haibic=0 ; どの部隊に配備するか
if mu(haibim*10+1)>0 : haibic=1 ; 第一部隊が既にいる
if mu(haibim*10+4)>0 : haibic=2 ; 第二部隊が既にいる
if mu(haibim*10+7)>0 : haibic=3 : return ; 全部体いるので配備無し
repeat haibin : cnt3=cnt ; 配備
if cnt3+haibic>2 : break
eq_set 3 ; 装備
knc=haibim*mdb+(cnt3+haibic)*3
repeat 3,1
if cnt=1 { ; 1列目
un=hrt1(hrt1c) : if un>0 : mu(knc+1)=un : ud(un*udb+13)=knc+1 : hrt1c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
un=hrt2(hrt2c) : if un>0 : mu(knc+1)=un : ud(un*udb+13)=knc+1 : hrt2c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
un=hrt3(hrt3c) : if un>0 : mu(knc+1)=un : ud(un*udb+13)=knc+1 : hrt3c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
}
if cnt=2 { ; 3列目
un=hrt3(hrt3c) : if un>0 : mu(knc+3)=un : ud(un*udb+13)=knc+3 : hrt3c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
un=hrt2(hrt2c) : if un>0 : mu(knc+3)=un : ud(un*udb+13)=knc+3 : hrt2c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
un=hrt1(hrt1c) : if un>0 : mu(knc+3)=un : ud(un*udb+13)=knc+3 : hrt1c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
}
if cnt=3 { ; 2列目
un=hrt2(hrt2c) : if un>0 : mu(knc+2)=un : ud(un*udb+13)=knc+2 : hrt2c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
un=hrt1(hrt1c) : if un>0 : mu(knc+2)=un : ud(un*udb+13)=knc+2 : hrt1c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
un=hrt3(hrt3c) : if un>0 : mu(knc+2)=un : ud(un*udb+13)=knc+2 : hrt3c+ : /*wp(m)+=ud(un*udb+27)*/ : continue
}
loop
;if hrt1(hrt1c)=0 and hrt2(hrt2c)=0 and hrt3(hrt3c)=0 : haibif=1 : break ; 全員使った
loop
wpck haibim
return
#deffunc hrs_pic int hrs_picn
un=0
if hrs_picn=1 { ; 筋力
repeat hub
un=hrs1(cnt) : if un>0 : hrs_del un : break
loop
}
if hrs_picn=2 { ; 魔力
repeat hub
un=hrs2(cnt) : if un>0 : hrs_del un : break
loop
}
if hrs_picn=3 { ; 知力
repeat hub
n=hrs5(cnt) : if n=0 : continue
if un=0 : un=n : continue
if ud(n*udb+3)>ud(un*udb+3) : un=n
loop
if un>0 : hrs_del un : return
}
if hrs_picn=4 { ; 魅力
repeat hub
n=hrs5(cnt) : if n=0 : continue
if un=0 : un=n : continue
if ud(n*udb+4)>ud(un*udb+4) : un=n
loop
if un>0 : hrs_del un : return
}
if hrs_picn=5 { ; 総力
repeat hub
un=hrs5(cnt) : if un>0 : hrs_del un : break
loop
}
return
;------- strategy ; 英雄勢力の人材とアイテムの発見と配置、戦略 -------
#deffunc mpn234_del int mpn234_deln
repeat 25
if mpn2(cnt)=mpn234_deln : mpn2(cnt)=0 : break
loop
repeat 25
if mpn3(cnt)=mpn234_deln : mpn3(cnt)=0 : break
loop
repeat 25
if mpn4(cnt)=mpn234_deln : mpn4(cnt)=0 : break
loop
return
#deffunc dependent_set ; 一時属領一覧セット
repeat 25 : mpn(cnt)=0 : loop ; 一時属領一覧リセット
mpnc=0
repeat 25,1 ; 一時属領一覧
if map(cnt)=0 or mpl(cnt)!pn : continue
mpn(mpnc)=cnt : mpnc+
loop
return
#deffunc mana_point ; マナポイント
repeat 25,1 : m=cnt : mdg=m*mdb
if map(m)=0 : continue ; マップ無い
if mpl(m)!pn : continue ; 勢力国では無い
pmp(pn)+=md(mdg+3)/100 ; マナポイント+
loop
return
#deffunc un_it_found ; 人材とアイテムの発見
repeat 25,1 : m=cnt
if map(m)=0 : continue ; マップ無い
if mpl(m)!pn : continue ; 勢力国では無い
; ユニット
repeat 1
if hf(pn)=1 and pubg(pn)>=pubn(pn) : break ; 登録が満杯
un_fd m : if un=0 : break ; 人材発見
hper_set pn,un ; 順列セット
un_find_put ; ユニット発見表示
;if pn=2 : gosub *jyun_put : pkey
;gosub *jyun_put
loop
; アイテム
n=1 ; 出現回数
mdg=m+mdb
n+=md(m*mdb+1)/250000 ; 人口
if md(mdg+7)=1 : n+ ; 城
if md(mdg+7)=2 : n+ ; 塔
if md(mdg+7)=6 : n+=2 ; 鍛冶屋
un=mu(m*10) : if un>0 { ; 領主
ug=un*udb
if ud(ug+8)=4 : n+ ; 魔術
if ud(ug+8)=6 : n+=2 ; 製作
}
if hf(pn)=1 and pibg(pn)>=pibn(pn) : n=0 ; 登録が満杯
repeat n ;md(m*mdb+3)/20000+2
it_fd m ; アイテムの発見
if in>0 {
hiper_set pn,in ; 順列セット
in_find_put ; アイテム発見表示
}
loop
loop
return
; 隣接国脅威値を算出
#deffunc hdn_cal ; 隣接国脅威値を算出
repeat 26 ; 脅威値をリセット
hdp(cnt)=0 ; 脅威国の順列
hdn(cnt)=0 ; 脅威値
;hdsn(cnt)=0 ; 脅威最小値
;hdsp(cnt)=0 ; の国
loop
hdfn=0 ; の部隊数
;wp
repeat 25,1 : m=cnt ; その国の脅威値を評価
if mpl(m)!pn : continue ; 自領では無い
repeat 6,1
n=hmv(m,cnt) : if n=0 : continue ; 隣接する国があるか
;if map(n)=0 : continue ; 地形が無い
if mpl(n)=pn or mpl(n)=0 : continue; 自領、NPC
if n=matp : continue ; 攻勢国
;if hf(mpl(n))=1 : wp(n)+=10000 ; プレイヤー国なら
if hdn(m)<wpb(n) : hdn(m)=wpb(n) ; 一番大きな値
;if hdn(m)<wp(n) : hdn(m)=wp(n) ; 一番大きな値
;if hdsn(m)=0 or hdsn(m)>wp(n) : hdsn(m)=wp(n) : hdsp(m)=n ; 一番小さな値の国
loop
/*
repeat 3 : cnt4=cnt
repeat 3,1
if mu(hdsp(m)*10+cnt4*3+cnt)>0 : hdfn(m)+ : break ; 部隊がある
loop
loop
*/
pn1=m
repeat 25 ; 脅威国順列のソート
if hdp(cnt)=0 : hdp(cnt)=pn1 : break ; 空白なら入れて終わり
if hdp(cnt)=mpc(pn) and hdn(hdp(cnt))=0 : continue ; 城
if hdn(pn1)<=hdn(hdp(cnt)) and mpc(pn)!pn1 : continue ; 値比較
;if hdn(pn1)<=hdn(hdp(cnt)) and mpc(pn)!pn1 : continue ; 値比較、首都は一番上
pn2=hdp(cnt) : hdp(cnt)=pn1 : pn1=pn2 ; 入れ替え
loop
loop
; 必要総防衛値
wp4=0
repeat 25,1
if mpl(cnt)!pn or map(cnt)=0 : continue
wp4+=hdn(cnt)
loop
return
#deffunc hdp_del int hdp_deln ; 脅威国の順列から1つ消去
repeat 25
if hdp(cnt)=hdp_deln : hdp(cnt)=0 : break
loop
return
#deffunc equipment_set1 ; 仮装備、装備と列の順列のセット
repeat hub ; 列の順列をリセット
hrt1(cnt)=0 : hrt2(cnt)=0 : hrt3(cnt)=0
loop
;hrt1c=0 : hrt2c=0 : hrt3c=0 ; 現在の列の順番をリセット
wp1=0 ; 総戦力値リセット
es1n=0
repeat hub ; 装備
;es1n+ : if es1n=10 : break
if es1n\3=2 { ; 2回目
hrs_eq 2 : if un=0 : hrs_eq 1
continue
}
hrs_eq 1 : if un=0 : hrs_eq 2 ; 1と3回目
loop
; 最大脅威値(最強部隊)算出
hdb(pn)=0 : n=0
repeat 10
un=hrt1(cnt) : if un>0 : hdb(pn)+=ud(un*udb+27) : n+ : if n>=9 : break
un=hrt2(cnt) : if un>0 : hdb(pn)+=ud(un*udb+27) : n+ : if n>=9 : break
un=hrt3(cnt) : if un>0 : hdb(pn)+=ud(un*udb+27) : n+ : if n>=9 : break
loop
repeat 25,1 ; MAP最大脅威値
if mpl(cnt)!pn : continue
wpb(cnt)=hdb(pn)
loop
;hrt1c=0 : hrt2c=0 : hrt3c=0 ; 現在の列の順番をリセット
return
#deffunc equipment_set ; 全装備、装備と列の順列のセット
es2n=0
repeat hub ; 装備
es2n+
if es2n\3=2 { ; 2回目
hrs_eq 2 : if un=0 : hrs_eq 1
continue
}
hrs_eq 1 : if un=0 : hrs_eq 2 ; 1と3回目
loop
return
#deffunc attack_point ; 攻勢点
matp=0 : wpn=0 ; 攻勢点と戦力値
hdkn=0 ; 攻められる国の数
repeat 25 ; 首都調べ
m=mpn(cnt) : if m=0 : break
repeat 6,1
n=hmv(m,cnt) : if n=0 : continue ; 隣接する国があるか
repeat 25,1
if cnt=pn or mpc(cnt)=0 or mpc(cnt)!n : continue ; 首都では無い
if wpn=0 or wpn>wp(n) : wpn=wp(n) : matp=n : break ; 最弱の首都
loop
loop
loop
repeat 6,1 ; 攻勢点の周辺国
if matp=0 : break
n=hmv(matp,cnt) : if n=0 : continue ; マップ無い
if mpl(n)!pn : continue ; 自領では無い
if hdn(n)=hdb(matp) : wp4d+=hdn(n) ; 攻める国の脅威しか無い場合、脅威値を無視
loop
if wp1-(wp4-wp4d)<wpn*2 : matp=0 : wpn=0 ; 首都攻勢点無し
if matp=0 {
wpn=0
repeat 25 ; その他の国
m=mpn(cnt) : if m=0 : break
repeat 6,1
n=hmv(m,cnt) : if n=0 : continue ; 隣接する国があるか
if map(n)=0 or mpl(n)=pn : continue ; 地形無い、自領
wpn2=wp(n)
if md(n*mdb+7)=10 {
n=ud(mu(n*10)*udb+24)/2 ; 領主補整
wpn2=wpn2*(150+n)/100 ; 外交館があれば1.5倍
}
if wpn=0 or wpn>wpn2 : wpn=wpn2 : matp=n : continue ; 最弱の国
loop
loop
repeat 6,1 ; 攻勢点の周辺国
if matp=0 : break
n=hmv(matp,cnt) : if n=0 : continue ; マップ無い
if mpl(n)!pn : continue ; 自領では無い
if hdn(n)=hdb(matp) : wp4d+=hdn(n) ; 攻める国の脅威しか無い場合、脅威値を無視
loop
if wp1-(wp4-wp4d)<wpn*2 : matp=0 : wpn=0 : return ; 攻勢点無し
}
if matp=0 : return ; 攻勢点無し
repeat 6 : hdk(cnt)=0 : loop ; 攻める国の順列リセット
repeat 6,1 ; 攻める国の順列
m1=hmv(matp,cnt) : if m1=0 : continue
if mpl(m1)!pn : continue ; 自領では無い
hdkn+
repeat 6 ; ソート
if hdk(cnt)=0 : hdk(cnt)=m1 : break
n1=hdn(hdk(cnt)) : if n1=hdb(matp) : n1=0
n2=hdn(m1) : if n2=hdb(matp) : n2=0
if n1<n2 : continue ; 脅威値の小さい順
m2=hdk(cnt) : hdk(cnt)=m1 : m1=m2
loop
loop
if hdkn>3 : hdkn=3 ; 最大数
hdfn=0
repeat 3 : cnt2=cnt ; 部隊数
repeat 3,1
if mu(matp*10+cnt2*3+cnt)>0 : hdfn+ : break ; 部隊がある
loop
loop
return
#deffunc fort_set ; 砦
repeat 25
m=mpn(cnt) : if m=0 : break
mdg=m*mdb
f=0
repeat 3 ; hdkn最大数
if matp=0 : break
if hdk(cnt)=0 : break
if m=hdk(cnt) : f=1 : break
loop
if f=0 { ; 砦必要無い
if md(mdg+7)=7 : md(mdg+9)=-1 ; 解体
if md(mdg+9)=7 : md(mdg+9)=0 ; 建設リセット
continue
}
; 砦建設
n=md(mdg+7)
if n=1 or n=7 or n=10 : continue
; 城、砦、外交館
n=md(cnt*mdb+9)
if n=7 or n=10 : continue
; 砦、外交館
if md(mdg+7)!0 : md(mdg+9)=-1
if md(mdg+7)=0 : md(mdg+9)=7
loop
return
/*
#deffunc not_enough ; 戦力が足りない
repeat 25 : st_cnt=cnt ; 戦力配備
if hdp(cnt)=0 : break
haibi hdp(cnt) : if haibif=1 : break
loop
if haibif=0 : return ; 終わり
repeat 25 ; 外交館建設要請
m=hdn(st_cnt) : if m=0 : break
st_cnt+
mdg=m*mdb
if md(mdg+7)>0 or md(mdg+9)!0 : continue
md(mdg+9)=10 ; 外交館建設要請
stmf(pn)=1 ; 建設モード
loop
if stmf(pn)=1 : return ; 終わり
stmf(pn)=2 ; タレント要請モード
return
*/
#deffunc mpn234_per ; 魔術、マナ、治安の順列
repeat 25
mpn2(cnt)=0 ; 魔術の順列リセット
mpn3(cnt)=0 ; マナの順列リセット
mpn4(cnt)=0 ; 治安の順列リセット
loop
repeat 25 ; 魔術の順列
m=mpn(cnt) : if m=0 : break
repeat 25 ; ソート
if mpn2(cnt)=0 : mpn2(cnt)=m : break
if md(mpn2(cnt)*mdb+2)>md(m*mdb+2) : continue ; 大きい順
n=mpn2(cnt) : mpn2(cnt)=m : m=n
loop
loop
repeat 25 ; マナの順列
m=mpn(cnt) : if m=0 : break
repeat 25 ; ソート
if mpn3(cnt)=0 : mpn3(cnt)=m : break
if md(mpn3(cnt)*mdb+3)>md(m*mdb+3) : continue ; 大きい順
n=mpn3(cnt) : mpn3(cnt)=m : m=n
loop
loop
repeat 25 ; 治安の順列
m=mpn(cnt) : if m=0 : break
repeat 25 ; ソート
if mpn4(cnt)=0 : mpn4(cnt)=m : break
if md(mpn4(cnt)*mdb+4)<md(m*mdb+4) : continue ; 小さい順
n=mpn4(cnt) : mpn4(cnt)=m : m=n
loop
loop
return
#deffunc bds int bdsn ; 建築処理
if bdsn=-1 : bdsn2=12 : else : bdsn2=bdsn
if bul_mp(bdsn2)>pmp(pn) : return ; マナが足りない
repeat 25,1 : m=cnt
if map(m)=0 or mpl(m)!pn : continue
mdg=m*mdb
if md(mdg+9)!bdsn : continue
if bul_mp(bdsn2)>pmp(pn) : break ; マナが足りない
pmp(pn)-=bul_mp(bdsn2) : md(mdg+9)=0 ; マナ消費、要請リセット
if bdsn=-1 { ; 解体
if md(ndg+7)=5 : pubn(pn)-=pubs : pubsn(pn)-
if md(ndg+7)=11 : pibn(pn)-=pibs : pibsn(pn)-
md(mdg+7)=0
continue
}
; 建築
if bdsn=5 : pubn(pn)+=pubs : pubsn(pn)+
if bdsn=11 : pibn(pn)+=pibs : pibsn(pn)+
md(mdg+7)=bdsn
loop
/*
pmp(pn)-=bul_mp(bdsn) ; マナ消費
if bdsn=12 : md(bdsm*mdb+7)=0 : return ; 解体
md(bdsm*mdb+7)=bdsn
*/
return
#deffunc build_syo ; 建設処理
if bul_mp(12)>pmp(pn) : return ; マナが足りない
bds -1 ; 解体
if bul_mp(10)>pmp(pn) : return ; マナが足りない
bds 10 ; 外交館
if bul_mp(5)>pmp(pn) : return ; マナが足りない
bds 5 ; 人材府
if bul_mp(8)>pmp(pn) : return ; マナが足りない
bds 8 ; 警察署
if bul_mp(7)>pmp(pn) : return ; マナが足りない
bds 7 ; 砦
if bul_mp(6)>pmp(pn) : return ; マナが足りない
bds 6 ; 鍛冶屋
if bul_mp(3)>pmp(pn) : return ; マナが足りない
bds 3 ; サークル
if bul_mp(2)>pmp(pn) : return ; マナが足りない
bds 2 ; 塔
if bul_mp(4)>pmp(pn) : return ; マナが足りない
bds 4 ; 市場
if bul_mp(9)>pmp(pn) : return ; マナが足りない
bds 9 ; 寺院
if bul_mp(11)>pmp(pn) : return ; マナが足りない
bds 11 ; 倉庫
return
#deffunc human_set ; 人材
repeat 25 : m=mpn3(cnt) ; 第一人材地の選定
if m=0 : continue
mdg=m*mdb
if md(mdg+4)<pbn : m=0 : continue ; 治安が足りない
n=md(mdg+7)
if n=7 or n=8 or n=10 : m=0 : continue ; 砦、警察、外交館
n=md(mdg+9)
if n=7 or n=8 or n=10 : m=0 : continue ; 砦、警察、外交館
break
loop
if m=0 : return
mpn234_del m ; 順列からmNo.消去
repeat 1 ; 人材配置
if mu(m*10)!0 : break ; 既に配備してる
if stmf=1 : break ; un無い
hrs_pic 4 : if un=0 : stmf=1 : break ; un選択、魅力
rh_eq un,4 ; 魅力装備
mu(m*10)=un : ud(un*udb+13)=m*10 ; 配備
loop
mdg=m*mdb
repeat 1 ; 建築要請
n=md(mdg+7)
if n=5 or n=7 or n=8 or n=10 or n=1 : break
; 人材府、砦、警察、外交府、城
if n>0 : md(mdg+9)=-1 : break ; 解体要請
n=md(mdg+9)
if n=5 or n=7 or n=8 or n=10 : break
; 人材府、砦、警察、外交府
if pubsn(pn)<pubsb : md(mdg+9)=5 : break ; 人材府建築要請
n=0 ; 解体する国
repeat 25,1 : m=cnt : mdg=m*mdb ; 人材府が最大の時、解体する弱小国
if md(mdg+7)!5 : continue ; 外交館
if n=0 : n=m : continue
if md(mdg+3)<md(n*mdb+3) : n=m ; 再弱国
loop
md(n*mdb+9)=-1 : break ; 解体要請
loop
;mgv_put m : pkey
return
#deffunc blacksmith_set ; 鍛冶
repeat 25 : m=mpn2(cnt) ; 第一鍛冶地の選定
if m=0 : continue
mdg=m*mdb
if md(mdg+4)<pbn : m=0 : continue ; 治安が足りない
n=md(mdg+7)
if n=5 or n=7 or n=8 or n=10 : m=0 : continue ; 人材府、砦、警察、外交館
n=md(mdg+9)
if n=5 or n=7 or n=8 or n=10 : m=0 : continue ; 人材府、砦、警察、外交館
break
loop
if m=0 : return
mpn234_del m ; 順列からmNo.消去
repeat 1 ; 人材配置
if mu(m*10)!0 : break ; 既に配備してる
if stmf=1 : break ; un無い
hrs_pic 3 : if un=0 : stmf=1 : break ; un選択、知力
rh_eq un,3 ; 知力装備
mu(m*10)=un : ud(un*udb+13)=m*10 ; 配備
loop
mdg=m*mdb
repeat 1 ; 建築要請
n=md(mdg+7)
if n=5 or n=6 or n=7 or n=8 or n=10 or n=1 : break
; 人材府、鍛冶屋、砦、警察、外交府、城
if n>0 : md(mdg+9)=-1 : break ; 解体要請
n=md(mdg+9)
if n=5 or n=6 or n=7 or n=8 or n=10 : break
; 人材府、鍛冶屋、砦、警察、外交府
md(mdg+9)=6 ; 鍛冶建築要請
loop
; 1箇所以外は解体
repeat 25,1 : m2=cnt
if map(m2)=0 or mpl(m2)!pn or m2=m : continue
mdg2=m2*mdb
if md(mdg2+7)=6 : md(mdg2+9)=-1
if md(mdg2+9)=6 : md(mdg2+9)=0
loop
;mgv_put m : pkey
return
#deffunc castle_set ; 城配備
m=mpc(pn) : mdg=m*mdb
mpn234_del m ; 順列からmNo.消去
if mu(m*10)>0 or stmf=1 : return ; 配備済み
chaibif=0
repeat 1
if md(mdg+4)<=pbn : chaibif=1 : break ; 筋力
repeat 25 ; 第二人材地
if mpn2(cnt)=0 : continue
m2=mpn2(cnt) : break
loop
if m=m2 : chaibif=4 : break ; 魅力
repeat 25 ; 第二鍛冶地
if mpn3(cnt)=0 : continue
m2=mpn3(cnt) : break
loop
if m=m2 : chaibif=3 : break ; 知力
chaibif=4 ; 魅力
loop
if mu(m*10)!0 : return ; 既に配備してる
hrs_pic chaibif : if un=0 : stmf=1 : return ; un選択
rh_eq un,chaibif ; 装備
mu(m*10)=un : ud(un*udb+13)=m*10 ; 配備
;mgv_put m : pkey
return
#deffunc force_set ; 部隊配備
haibif=0
repeat 3 : cnt3=cnt ; 配備
if haibif=1 : break ; 残戦力無し
repeat 25 : m=hdp(cnt)
if m=0 : break ; 終わり
if wp(m)>=hdn(m) or hdn(m)=0 /*and hdfn(m)<cnt3+1*/ : continue ; 必要戦力有り部隊数が揃ってる
haibi m,1 ; 配備
if haibif=1 : break ; 残戦力無し
loop
loop
/*
repeat 25,1 ; 戦力値評価
if mpl(cnt)=pn : wpck(cnt)
loop
*/
;repeat 25 : wp(cnt)=wp(cnt)\10000 : loop ; プレイヤー脅威値をリセット
;mu_dpt
;hrt_put 1
; 戦力評価
wp2=0 ; 総配備戦力
repeat 25,1 : m=cnt
if mpl(m)!pn : continue ; 勢力国では無い
wp2+=wp(cnt) ; 戦力値計測
loop
wp3=wp1-wp2 ; 残戦力値
return
#deffunc police_set ; 警察要請
;mgv_put m
; 政府の警察
n=0
repeat 25
m=mpn(cnt) : if m=0 : continue
if md(m*mdb+4)<pbn : n+
loop
if n>=3 : hrs_pic 1 : if un>0 { ; 治安が悪い国3つ以上の時、警察長官任命
mgv(pn*mgvb+5)=un
ud(un*udb+13)=1000+pn*mgvb+5 ; 配属場所登録
}
; 警察の解体処理
repeat 25,1 : m=cnt
if map(m)=0 or mpl(m)!pn : continue ; 自領では無い
mdg=m*mdb
if md(mdg+4)>=100000 and md(mdg+7)=8 : md(mdg+9)=-1 : mpn234_del m ; 解体要請
loop
;mgv_put m
repeat 25
m=mpn4(cnt) : if m=0 : continue
mdg=m*mdb
n=md(mdg+7)
if n=1 or n=7 or n=8 or n=10 : continue
; 城、砦、警察、外交府
n=md(mdg+9)
if n=7 or n=8 or n=10 or md(mdg+9)=-1 : continue
; 砦、警察、外交府
if md(mdg+7)=8 or md(mdg+4)>=pbn : continue ; 順列からmNo.消去
mpn234_del m ; 順列からmNo.消去
if md(mdg+7)>0 : md(mdg+9)=-1 : continue ; 解体要請
md(mdg+9)=8 ; 建築要請
loop
; 領主配備
if stmf=1 : return ; un無い
repeat 25
m=mpn(cnt) : if m=0 : continue
if mu(m*10)!0 : continue ; 既に配備してる
mdg=m*mdb
if md(mdg+4)>pbn and md(mdg+7)!8 : continue
hrs_pic 1 : if un=0 : stmf=1 : continue ; un選択
;if un=0 : talent_set pn : break ; いない
rh_eq un,1 ; 装備
mu(m*10)=un : ud(un*udb+13)=m*10 ; 配備
loop
return
#deffunc diplomacy_set ; 外交要請
repeat 25
m=hdp(cnt) : if m=0 : break
mdg=m*mdb
if md(mdg+7)=1 : continue ; 城
if wp(m)>=hdn(m) { ; 戦力が足りてる
if md(mdg+7)=10 : md(mdg+9)=-1 ; 解体要請
if md(mdg+9)=10 : md(mdg+9)=0
continue
}
if md(mdg+7)=0 : md(mdg+9)=10
if md(mdg+7)!0 and md(mdg+7)!10 : md(mdg+9)=-1 ; 建築要請
mpn234_del m ; 順列からmNo.消去
; 領主配備
if mu(m*10)!0 : continue ; 既に配備してる
if stmf=1 : continue ; un無い
hrs_pic 4 : if un=0 : stmf=1 : continue ; un選択
rh_eq un,4 ; 装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
loop
return
#deffunc government_set int gv_setf ; 政府
; gv_setf(0=領土数を考慮しない、1=領土数を考慮)
; 首領
if gv_setf=0 or mpnc>=5 { ; 領有国が5国以上
hrs_pic 5 ; 総力
if un=0 : stmf=1 : return
rh_eq un,4 ; 装備
mgv(pn*mgvb+1)=un ; 首領
ud(un*udb+13)=1000+pn*mgvb+1 ; 配属場所登録
}
if gv_setf=0 or mpnc>=3 { ; 領有国が3国以上
; 警察
if mgv(pn*mgvb+5)=0 {
hrs_pic 1 ; 筋力
if un=0 : stmf=1 : return
rh_eq un,1 ; 装備
mgv(pn*mgvb+5)=un ; 宗教
ud(un*udb+13)=1000+pn*mgvb+5 ; 配属場所登録
}
; 政務
hrs_pic 4 ; 魅力
if un=0 : stmf=1 : return
rh_eq un,4 ; 装備
mgv(pn*mgvb+2)=un ; 政務
ud(un*udb+13)=1000+pn*mgvb+2 ; 配属場所登録
; 魔術
hrs_pic 3 ; 知力
if un=0 : stmf=1 : return
rh_eq un,3 ; 装備
mgv(pn*mgvb+3)=un ; 魔術
ud(un*udb+13)=1000+pn*mgvb+3 ; 配属場所登録
; 宗教
hrs_pic 2 ; 魔力
if un=0 : stmf=1 : return
rh_eq un,2 ; 装備
mgv(pn*mgvb+4)=un ; 宗教
ud(un*udb+13)=1000+pn*mgvb+4 ; 配属場所登録
; 軍務
hrs_pic 5 ; 総力
if un=0 : stmf=1 : return
rh_eq un,1 ; 装備
mgv(pn*mgvb+6)=un ; 軍務
ud(un*udb+13)=1000+pn*mgvb+6 ; 配属場所登録
}
return
#deffunc mana2_set ; 第二マナ地
repeat 25 : m=mpn3(cnt) ; 人材地の選定
if m=0 or m=matp2 : continue
mdg=m*mdb
n=md(mdg+7) ; 建築物
if n=1 or n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : m=0 : continue
; 城、人材府、鍛冶屋、砦、警察、外交館、倉庫
n=md(mdg+9) ; 建築要請
if n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : m=0 : continue
; 人材府、鍛冶屋、砦、警察、外交館、倉庫
mpn234_del m ; 順列からmNo.消去
; 満員では無い
if pubn(pn)>pubg(pn) { ; 満員では無い場合はサークル
repeat 1
if md(mdg+7)=3 or md(mdg+9)=3 : break ; 既にサークルがある
if md(mdg+7)>0 : md(mdg+9)=-1 : break ; 解体要請
md(mdg+9)=3 ; サークル建築要請
loop
if stmf=0 and mu(m*10)=0 {
hrs_pic 2 : if un=0 : stmf=1 ; un選択、魔力
if un>0 {
rh_eq un,2 ; 魔力装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
}
}
break
}
; 満員の場合
if pubsn(pn)<pubsb { ; 人材府がまだ建てられる
if md(mdg+7)=0 : md(mdg+9)=5 : else : md(mdg+9)=-1 ; 建設要請
break
}
if pubsn(pn)>=pubsb { ; 人材府の数が最大
m1=m
repeat 25,1 : m2=cnt : mdg=m2*mdb
if map(m2)=0 or mpl(m2)!pn : continue
if md(mdg+7)!5 : continue
if md(m1*mdb+3)>md(m2*mdb+3) : m1=m2 ; 再弱国
loop
if m1=m { ; 現国が再弱国ならサークル
repeat 1
if md(mdg+7)=3 or md(mdg+9)=3 : break ; 既にサークルがある
if md(mdg+7)>0 : md(mdg+9)=-1 : break ; 解体要請
md(mdg+9)=3 ; サークル建築要請
loop
if stmf=0 and mu(m*10)=0 {
hrs_pic 2 : if un=0 : stmf=1 ; un選択、魔力
if un>0 {
rh_eq un,2 ; 魔力装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
}
}
break
}
md(m2*mdb+9)=-1 ; 再弱国解体要請
break
}
loop
; 領主配備
repeat 25,1 : m=cnt
if map(m)=0 or mpl(m)!pn : continue
mdg=m*mdb
if md(mdg+7)!5 : continue
if stmf=0 and mu(m*10)=0 { ; 配備
hrs_pic 4 : if un=0 : stmf=1 : break ; un選択、魅力
if un>0 {
rh_eq un,4 ; 魅力装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
}
}
loop
return
/*
#deffunc mana2_set ; 第二マナ地
m2sf=0 ; 満員フラグ
if pubn(pn)<=pubg(pn) : m2sf=1 ; 満員
m2sc=0 ; 配備カウンター
repeat 25,1 : m=cnt
if map(m)=0 or mpl(m)!pn : continue
if md(m*mdb+7)!5 or md(m*mdb+9)=0 : continue
m2sc+ ; 配備してる
loop
m2sbf=0 ; 建設フラグ
repeat 25,1 : m=cnt
if map(m)=0 or mpl(m)!pn : continue
if md(m*mdb+9)=5 : md(m*mdb+9)=0 ; 建設要請リセット
loop
repeat 25 : m=mpn3(cnt) ; 人材地の選定
if m=0 or m=matp2 : continue
mdg=m*mdb
n=md(mdg+7) ; 建築物
if n=1 or n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : m=0 : continue
; 城、人材府、鍛冶屋、砦、警察、外交館、倉庫
n=md(mdg+9) ; 建築要請
if n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : m=0 : continue
; 人材府、鍛冶屋、砦、警察、外交館、倉庫
if m2sc<pubsn(pn) { ; 現人材府数の配備を終えてない
mpn234_del m ; 順列からmNo.消去
if md(mdg+7)!5 : md(mdg+9)=-1 : break ; 解体要請
if md(mdg+7)=0 {
if pubsn(pn)<pubsb and m2sbf=0 : md(mdg+9)=5 : m2sbf=1 ; 建設要請
break
}
if stmf=0 and mu(m*10)=0 { ; 配備
hrs_pic 4 : if un=0 : stmf=1 ; un選択、魅力
if un>0 {
rh_eq un,4 ; 魅力装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
}
}
m2sc+
break
}
; 現人材府数の配備を終えてる
; 満員では無い
if m2sf=0 { ; 満員では無い場合はサークル
mpn234_del m ; 順列からmNo.消去
repeat 1
if md(mdg+7)=3 or md(mdg+9)=3 : break ; 既にサークルがある
if md(mdg+7)>0 : md(mdg+9)=-1 : break ; 解体要請
md(mdg+9)=3 ; サークル建築要請
loop
if stmf=0 and mu(m*10)=0 {
hrs_pic 2 : if un=0 : stmf=1 ; un選択、魔力
if un>0 {
rh_eq un,2 ; 魔力装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
}
}
break
}
; 満員の場合
if pubsn(pn)>=pubsb { ; 人材府の数が最大
n=0 : f=0
repeat 25,1 : m2=cnt : mdg=m2*mdb
if map(m2)=0 or mpl(cnt)!pn : continue
if md(mdg+7)!5 : continue
if md(mdg+9)=-1 : f=1 : break ; 既に解体要請がある
if n=0 : n=m2 : continue
if md(n*mdb+3)>md(m2*mdb+3) : n=m2 ; 再弱国
loop
if f=0 : if md(m*mdb+3)>md(m2*mdb+3) : md(m2*mdb+9)=-1 : break ; 解体要請
}
if md(mdg+7)!5 : md(mdg+9)=-1 : break ; 解体要請
if md(mdg+7)=0 {
if pubsn(pn)<pubsb : if m2sbf=0 : md(mdg+9)=5 : m2sbf=1 ; 建設要請
mpn234_del m ; 順列からmNo.消去
}
loop
return
*/
#deffunc magic2_set ; 第二魔術地
repeat 25 : m=mpn2(cnt) ; 人材地の選定
if m=0 or m=matp2 : continue
mdg=m*mdb
n=md(mdg+7) ; 建築物
if n=1 or n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : m=0 : continue
; 城、人材府、鍛冶屋、砦、警察、外交館、倉庫
n=md(mdg+9) ; 建築要請
if n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : m=0 : continue
; 人材府、鍛冶屋、砦、警察、外交館、倉庫
break
loop
if m=0 : return ; 用地無し
mpn234_del m ; 順列からmNo.消去
; 人材配置
if stmf=0 and mu(m*10)=0 {
hrs_pic 3 : if un=0 : stmf=1 ; un選択、知力
if un>0 {
rh_eq un,3 ; 知力装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
}
}
; 建築要請
mdg=m*mdb
n=md(mdg+7) ; 建築物
if n=0 : md(mdg+9)=2 ; 塔
if n!2 and n!0 : md(mdg+9)=-1 ; 解体要請
; 1箇所以外は解体
repeat 25,1 : m2=cnt
if map(m2)=0 or mpl(m2)!pn or m2=m : continue
mdg2=m2*mdb
if md(mdg2+7)=2 : md(mdg2+9)=-1
if md(mdg2+9)=2 : md(mdg2+9)=0
loop
return
#deffunc market_set ; 市場
m=0
repeat 25,1
if matp2=cnt : continue ; 今占領した国
if map(cnt)=0 or mpl(cnt)!pn : continue
n=md(cnt*mdb+7)
if n=1 or n=2 or n=3 or n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : continue
; 城、塔、サークル、人材府、鍛冶、砦、警察、外交館、倉庫
n=md(cnt*mdb+9)
if n=2 or n=3 or n=5 or n=6 or n=7 or n=8 or n=10 or n=11 : continue
; 塔、サークル、人材府、鍛冶、砦、警察、外交館、倉庫
if m=0 : m=cnt : continue
if md(cnt*mdb+1)>md(m*mdb+1) : m=cnt ; 一番人口が多い
loop
if m=0 : return ; 用地無し
mpn234_del m ; 順列からmNo.消去
; 人材配置
if stmf=0 and mu(m*10)=0 {
hrs_pic 4 : if un=0 : stmf=1 ; un選択、魅力
if m>0 {
rh_eq un,4 ; 魅力装備
mu(m*10)=un : ud(un*udb+13)=mdg ; 配備
}
}
mdg=m*mdb
n=md(mdg+7) ; 建築物
if n=0 : md(mdg+9)=4 ; 市場
if n!4 and n!0 : md(mdg+9)=-1 ; 解体要請
; 1箇所以外は解体
repeat 25,1 : m2=cnt
if map(m2)=0 or mpl(m2)!pn or m2=m : continue
mdg2=m2*mdb
if md(mdg2+7)=4 : md(mdg2+9)=-1
if md(mdg2+9)=4 : md(mdg2+9)=0
loop
return
#deffunc talent_set int talent_setn ; 人材登用
if pubg(pn)>=pubn(pn) : return ; 登録がいっぱい
c=100
repeat 100 ; マナがあるか
if tal_mp(c)<=pmp(pn) : break
c-
loop
if c=0 : return ; マナが無い
m=mpn3(0) ; 出現地、マナ基準
r=un_fd_rlv(m) ; 出現Lv
if r>c : r=c ; Lv分のマナポイントがあるか
;tal_fd m ; ユニット発掘
zn=map(m) ; 地形
cs=cha_syu(zn) ; その地形のキャラ種類総数
cz=cha_zoks(zn) ; その地形のキャラスタートNo.
n=cz+cs-1
repeat cs
cn=n-cnt
if r<cd(15,cn) : continue ; 出現Lvに満たない
r2=rnd(4) : if r2=0 : break; 4分の1でそのキャラを選択
loop
if cn>0 {
if pmp(pn)<tal_mp(cd(15,cn)) : return ; MPあるか
unt 1,cn ; ユニット登録
if un=0 : return ; 登録できなかった
hper_set pn,un ; 順列セット
}
pmp(pn)-=tal_mp(cd(15,cn)) ; マナポイント減少
return
*strategy ; 英雄勢力の人材とアイテムの発見と配置、戦略
repeat plb : pn=hap(cnt)
if pn=0 : continue ; 順列に無い
if hf(pn)=0 : continue ; 勢力が滅んでる
repeat 25 : hde(cnt)=0 : loop ; 既に攻め込むのに使ったかリセット
str_map_put ; マップ表示
dependent_set ; 一時属領一覧セット
mana_point ; マナポイント
un_it_found ; ユニットとアイテムの発見
build_syo ; 建設処理
;wpb_cal ; 最大脅威値算出
; プレイヤー
if hf(pn)=1 {
gosub *map_main
hdb(pn)=0 ; 最大戦力値の算出
repeat 9 : hdb_un(cnt)=0 : loop
repeat pubn(pn),udsh(pn) : un1=cnt
if ud(un1*udb)=0 : continue ; ユニットNo.
repeat 9 ; 大きいのに入れ替え
if hdb_un(cnt)=0 : hdb_un(cnt)=un1 : break
if ud(hdb_un(cnt)*udb+27)>ud(un1*udb+27) : continue
un2=hdb_un(cnt) : hdb_un(cnt)=un1 : un1=un2
loop
loop
repeat 9
hdb(pn)+=ud(hdb_un(cnt)*udb+27)
loop
;hdb_put
continue
}
; CPU
stmf=0 ; 人材全使用フラグ
haibif=0 ; un全使用フラグ
;eq_setn=0 ; 装備種別カウント
pmu_rst pn ; ユニット配置解除
;hp_dpt pn
peq_rst pn ; 装備解除
;hp_dpt pn
hrs_copy ; 英雄のユニット操作順列コピー
his_copy ; 英雄のアイテム操作順列コピー
mpn234_per ; 魔術、マナ、治安の順列
; 仮配備
hrt1c=0 : hrt2c=0 : hrt3c=0 ; 列の順番カウントをリセット
hrt1qc=0 : hrt2qc=0 : hrt3qc=0 ; 装備列の順番カウントをリセット
human_set ; 人材
blacksmith_set ; 鍛冶
castle_set ; 城配備
equipment_set1 ; 装備と列の順列のセット
matp=0 ; 攻勢点の国
matp2=0 ; 今攻略した国
hdn_cal ; 隣接国脅威値を算出
attack_point ; 攻勢点
if debugf=1 : map_dpt
/*
redraw 0
color 1,1,1 : boxf : color 255,255,255
map_put
redraw 1
pkey
hdn_put : pkey
*/
repeat 25 ; wpリセット
m=mpn(cnt) : if m=0 : break
wp(m)=0
loop
haibif=0 ; un全使用フラグ
pmu_rst pn ; ユニット配置解除
peq_rst pn ; 装備解除
hrs_copy ; 英雄のユニット操作順列コピー
his_copy ; 英雄のアイテム操作順列コピー
;info_dpt2
hrt1c=0 : hrt2c=0 : hrt3c=0 ; 列の順番カウントをリセット
hrt1qc=0 : hrt2qc=0 : hrt3qc=0 ; 装備列の順番カウントをリセット
repeat hub ; 列の順列をリセット
hrt1(cnt)=0 : hrt2(cnt)=0 : hrt3(cnt)=0
loop
mpn234_per ; 魔術、マナ、治安の順列
human_set ; 人材
if debugf=1 : bil_dpt 1
;map_dpt 1
;info_dpt2 1
blacksmith_set ; 鍛冶
if debugf=1 : bil_dpt 2
;map_dpt 2
;info_dpt2 2
castle_set ; 城配備
if debugf=1 : bil_dpt 3
;map_dpt 3
fort_set ; 砦
if debugf=1 : bil_dpt 4
;map_dpt 4
;info_dpt2 3
/*
repeat 25,1
if map(cnt)=0 or mpl(cnt)!pn : continue
mgv_put cnt
pkey
loop
*/
; 戦力が足りない
if matp=0 {;: not_enough : break
repeat 25 ;: st_cnt=cnt ; 戦力配備
if hdp(cnt)=0 : break
if hdn(hdp(cnt))=0 : continue ; 脅威が無い
haibi hdp(cnt),3 : if haibif=1 : break
loop
;if haibif=0 : break ; 終わり
/*
redraw 0
color 1,1,1 : boxf : color 255,255,255
map_put
redraw 1
pkey
hdn_put
pkey
repeat 25,1
if map(cnt)=0 or mpl(cnt)!pn : continue
mgv_put cnt
pkey
loop
*/
;stnf=0
repeat 25 ; 外交館建設要請
m=hdp(cnt) : if m=0 : break
mdg=m*mdb
if hdn(m)<=wp(m) { ; 戦力が足りてる
if md(mdg+7)=10 : md(mdg+9)=-1
if md(mdg+9)=10 : md(mdg+9)=0
continue
}
if md(mdg+7)=1 or md(mdg+7)=10 : continue
if md(mdg+7)>0 : md(mdg+9)=-1 : continue
if md(mdg+9)=10 : continue
md(mdg+9)=10
/*
if bul_mp(10)<pmp(pn) /*: stmf=1*/ ;: break ; マナが足りない
; md(mdg+7)=10 : pmp(pn)-=bul_mp(10) ; 外交館建設
loop
;if stmf=1 : return ; 終わり
talent_set pn ; タレント発掘
;build_syo ; 建設処理
;continue
;map_dpt 5
;info_dpt2 4
}
; 戦力が足りてる
if matp>0 {
;map_dpt -1
switch hdkn ; 攻める国数
case 1 ; 1国
m=hdk(0)
haibi m,3;hdfn :; hdp_del m ; 第一攻勢国、配備
/*
repeat 25,1
if map(cnt)=0 or mpl(cnt)!pn : continue
mgv_put cnt
pkey
loop
*/
;map_dpt 5
;info_dpt2 5
if wp(m)<wp(matp)*2 : swbreak ; 必要戦力が無い
war m,matp ; 攻める
; win_syorif!2 : swbreak ; 負けた
; wp_ck matp : if wp_ckf=0 : swbreak ; 脅威無し
; haibi matp,hdfn ; 再配備
swbreak
case 2 ; 2国
m1=hdk(0) : haibi m1,3;hdfn : ;hdp_del m1 ; 第一攻勢国、配備
if wp(m1)*10<wp(matp)*12 : swbreak ; 必要戦力が無い
m2=hdk(1) : haibi m2,3;hdfn : ;hdp_del m2 ; 第二攻勢国、配備
if wp(m2)*10<wp(matp)*8 : swbreak ; 必要戦力が無い
;map_dpt -1
;info_dpt2 6
war m1,matp ; 攻める
if win_syorif=2 : swbreak ; 勝った
; wp_ck m1 : if wp_ckf=0 : swbreak ; 脅威無し
; haibi m1,hdfn ; 再配備
;mgv_put m2 : pkey
map_dpt 2
war m2,matp ; 攻める
; win_syorif!2 : swbreak ; 負けた
; wp_ck m2 : if wp_ckf=0 : swbreak ; 脅威無し
; haibi m2,hdfn ; 再配備
swbreak
case 3 ; 3国
m1=hdk(0) : haibi m1,3;hdfn : ;hdp_del m1 ; 第一攻勢国、配備
if wp(m1)*10<wp(matp)*10 : swbreak ; 必要戦力が無い
m2=hdk(1) : haibi m2,3;hdfn :; hdp_del m2 ; 第二攻勢国、配備
if wp(m2)*10<wp(matp)*8 : swbreak ; 必要戦力が無い
m3=hdk(2) : haibi m3,3;hdfn : ;hdp_del m3 ; 第三攻勢国、配備
if wp(m3)*10<wp(matp)*6 : swbreak ; 必要戦力が無い
;map_dpt -1
;info_dpt2 7
war m1,matp ; 攻める
if win_syorif=2 : swbreak ; 勝った
; wp_ck m1 : if wp_ckf=0 : swbreak ; 脅威無し
; haibi m1.hdfn ; 再配備
;mgv_put m2 : pkey
map_dpt 2
war m2,matp ; 攻める
if win_syorif=2 : swbreak ; 勝った
; wp_ck m2 : if wp_ckf=0 : swbreak ; 脅威無し
; haibi m2,hdfn ; 再配備
;mgv_put m3 : pkey
map_dpt 3
war m3,matp ; 攻める
;win_syorif!2 : break ; 負けた
;wp_ck m3 : if wp_ckf=0 : swbreak ; 脅威無し
;haibi m3,hdfn ; 再配備
swbreak
swend
repeat 25,1 ; wp再計算
if map(cnt)=0 or mpl(cnt)!pn : continue
wpck cnt,1
loop
matp2=matp ; データ退避
matp=0 ; 攻勢国リセット
dependent_set ; 一時属領一覧セット
mpn234_per ; 魔術、マナ、治安の順列
hdn_cal ; 隣接国脅威値を算出
;hdn_put : pkey
;equipment_set ; 装備と列の順列のセット
;hrs_dpt : pkey
;hrt_dpt : pkey
;fff=1
force_set ; 部隊配備
;hrs_dpt : pkey
/*
hrt_dpt : pkey
repeat 25,1
if map(cnt)=0 or mpl(cnt)!pn : continue
mgv_put cnt
pkey
loop
*/
if haibif=1 : talent_set pn ;: continue ; ユニット足りない
}
if debugf=1 : map_dpt
stmf=0 ; 人材全使用フラグ
diplomacy_set ; 外交要請
if debugf=1 : bil_dpt 8
;map_dpt 8
;info_dpt2 8
police_set ; 警察要請
if debugf=1 : bil_dpt 9
;map_dpt 10
;info_dpt2
;hrs_dpt : pkey
/*
repeat 25,1
if map(cnt)=0 or mpl(cnt)!pn : continue
mgv_put cnt
pkey
loop
*/
government_set 1 ; 政府
;hrs_dpt : pkey
/*
repeat 25,1
if map(cnt)=0 or mpl(cnt)!pn : continue
mgv_put cnt
pkey
loop
*/
mana2_set ; 第二マナ地
if debugf=1 : bil_dpt 11
;map_dpt 11
;info_dpt2 11
magic2_set ; 第二魔術地
if debugf=1 : bil_dpt 12
;map_dpt 12
;info_dpt2 12
market_set ; 市場
if debugf=1 : bil_dpt 13
;map_dpt 13
;info_dpt2 13
;build_syo ; 建設処理
;map_dpt
repeat 25,1 : m=cnt ; 領主配備
if stmf=1 : break
if map(m)=0 or mpl(m)!pn : continue
if mu(m*10)!0 : continue ; 配備してる
if md(m*mdb+4)<pbn {
hrs_pic 1 : if un=0 : stmf=1 : break
rh_eq un,1 ; 装備
}
else {
hrs_pic 5 : if un=0 : stmf=1 : break
rh_eq un,4 ; 装備
}
mu(m*10)=un : ud(un*udb+13)=m*10 ; 配備
loop
if debugf=1 : bil_dpt 14
;map_dpt 14
;hrs_dpt : pkey
government_set 0 ; 政府
;hrs_dpt : pkey
;info_dpt2 100
;map_dpt 15
repeat 25 ; 寺院建設
m=mpn(cnt) : if m=0 : break
if m=matp2 : continue ; 今占領した国
mdg=m*mdb
if md(mdg+7)!0 or md(mdg+9)!0 : continue
if pibg(pn)<pibn(pn) : md(mdg+9)=9 : continue ; アイテム登録がいっぱいで無いなら寺院建設
if pibsn(pn)<pibsb : md(mdg+9)=11
loop
if debugf=1 : bil_dpt 15
if debugf=1 : map_dpt 16
;map_dpt 16
/*
repeat 25,1
if map(cnt)=0 or mpl(cnt)!pn : continue
mgv_put cnt
pkey
loop
*/
; 攻め込む
/*
repeat 25,1 ; 戦力値計算
if mpl(cnt)=pn : wpck cnt
loop
*/
if mainf!5 : break
loop
trn+ ; ターン+
return