2018年 7月12日
リアルでゴタゴタがあって 1週間くらい時間がとんでしまった、まったく(プンプン)
それとウインドウズ、人が使ってるときにアップデートだからって勝手に落ちるんじゃない、まったく(イライラ)
という事で少し間が空いてしまったけど、今回は NPCの自動装備に引き続き、英雄勢力の自動装備を作った。
装備のアルゴリズム自体、思ったより膨大な量になったので、初めは NPC用と英雄用別々でいいかなと思ってたんだけど、これだと管理が大変で例えばソースの一部を変えると両方変えなければいけないから大変だ。
そこでなるべく共有できる部分は同じにした。
思うにデータベースからしてやはり 2種類に分けるというのは止したほうが良いと思った。
つまり NPCのデータベースもきっかり英雄のデータ量を確保して 1本化し、その分は無駄にはなるが致命的な量では無いし、ソースの管理の方が大変だと言う事が分かった、次回からはそうしよう。
テスト

1部隊 1列目

2列目、槍の射程は 2ある。

3列目、杖と手裏剣?こんなアルゴリズム作ったかな?、ダークネスは全体攻撃魔法だったかな。

第 2部隊 1列目、この時は遠隔装備ばかりの乱数だったのか。

2列目

3列目

第 3部隊 1列目、2丁拳銃か。

2列目、アイテム枯渇かな。

3列目

乱数がクレリックに偏ってたけど、一応先頭が戦士系で、後列が魔術師や僧侶になってると思う。
まだ色々と問題はあると思うけど、これで一応自動装備はできたので、後は調整していく。
後は複数国ある時のどの国から優先して部隊を置くかのプログラムだな。
それができたらやっと一通りシステムが出来て、初めてテストプレイができるという、ははは、何ヶ月かかってんだか。
最後にソースを張るけど、ソースが長いので自動装備の心臓部分だけ置いておくけど、結構カオスだと思うぞ。
; 自動装備 ========================================================
#deffunc sis1_syo ; 片手
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib1
in=sis1(cnt) : if in=0 : continue
equ_syo un,in ; 装備
sis_del in,1 : sis_del in,3 : sis_del in,4 : sis_del in,7 ; 順列消去、片手、槍、棍、投射
f=1
break
loop
return
#deffunc sis2_syo ; 両手
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib2
in=sis2(cnt) : if in=0 : continue
equ_syo un,in ; 装備処理
sis_del in,2 : sis_del in,4 ; 順列消去、両手、棍
f=1 : break
loop
return
#deffunc sis3_syo ; 槍
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib3
in=sis3(cnt) : if in=0 : continue
equ_syo un,in ; 装備処理
sis_del in,1 : sis_del in,3 ; 順列消去、片手、槍
f=1 : break
loop
return
#deffunc sis4_syo int sis4_syof ; 棍棒(sis4_syof=1は片手のみ,2は両手のみ選ぶ)
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib4
in=sis4(cnt) : if in=0 : continue
if sis4_syof=1 : if id(in*idb+16)!1 : continue ; 片手で無い
if sis4_syof=2 : if id(in*idb+16)!2 : continue ; 両手で無い
equ_syo un,in ; 装備処理
sis_del in,1 : sis_del in,2 : sis_del in,4 ; 順列消去、片手、両手、棍
f=1 : break
loop
return
#deffunc sis5_syo int sis5_syof ; 杖(sis5_syof=1は片手のみ,2は両手のみ選ぶ)
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib5
in=sis5(cnt) : if in=0 : continue
if sis5_syof=1 : if id(in*idb+16)!1 : continue ; 片手で無い
if sis5_syof=2 : if id(in*idb+16)!2 : continue ; 両手で無い
equ_syo un,in ; 装備処理
sis_del in,5 ; 順列消去、杖
f=1 : break
loop
return
#deffunc sis6_syo int sis6_syof ; 弓銃(sis6_syof=1は片手のみ選ぶ)
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib6
in=sis6(cnt) : if in=0 : continue
if sis6_syof=1 : if id(in*idb+16)!1 : continue ; 片手で無い
equ_syo un,in ; 装備処理
sis_del in,1 : sis_del in,6 ; 順列消去、片手、弓銃
f=1 : break
loop
return
#deffunc sis7_syo ; 投擲
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib7
in=sis7(cnt) : if in=0 : continue
equ_syo un,in ; 装備処理
sis_del in,1 : sis_del in,6 : sis_del in,7 ; 順列消去、片手、弓銃、投擲
f=1 : break
loop
return
#deffunc sis8_syo ; 盾
f=0
if ud(ug+16)=0 : return ; 手スロットは無い
repeat sib8
in=sis8(cnt)
if in>0 : equ_syo un,in : sis_del in,8 : f=1 : break ; 装備処理
loop
return
#deffunc sis9_syo ; 防具
f=0
if ud(ug+17)=0 : return ; 防具スロットは無い
repeat sib9
in=sis9(cnt)
if in>0 : equ_syo un,in : sis_del in,9 : f=1 : break ; 装備処理
loop
return
#deffunc sis10_syo ; アイテム
f=0
if ud(ug+19)=0 and toku12f=1 : return ; アイテムスロットは無い
repeat sib10
in=sis10(cnt)
if in>0 : equ_syo un,in : sis_del in,10 : f=1 : break ; 装備処理
loop
return
; 付与、魔剣、強化、加速、防壁、治癒、防護、回復、引き寄せ、
; 魅惑、
; 鈍足、召還、毒、麻痺、弱体、呪い、暗闇、
; 押し出し、返還、蘇生、
; 前列、後列、貫通、着弾、全体、乱列、
#deffunc sis11_syo ; 魔法
f=0
if ud(ug+19)=0 and toku12f=1 : : return ; アイテムスロットは無い
repeat sib11
in=sis11(cnt)
if in>0 : equ_syo un,in : sis_del in,11 : f=1 : break ; 装備処理
loop
return
#deffunc sis12_syo int sis12_syon ; 特殊(sis12_syon=必要スロット数)
f=0
if ud(ug+18)=0 : return ; 特殊スロットは無い
repeat sib12
in=sis12(cnt)
if in=0 or id(in*idb+9)>sis12_syon : continue ; 無いか能力がオーバー
equ_syo un,in : sis_del in,12 : f=1 : toku12f=1 : break ; 装備処理
loop
return
; アイテム選択 ------------------------------------------------
#deffunc ieqr_del int ieqr_deln ; アイテム選択テーブル消去
repeat ieqrn : cnt2=cnt ; アイテム選択テーブル
if ieqr(cnt2)!ieqr_deln : continue
repeat ieqrn-cnt2
ieqr(cnt2+cnt)=ieqr(cnt2+cnt+1)
loop
loop
ieqrn- ; テーブル数-
return
#deffunc nieq_1 ; 回復アイテム
ieqr_del 1 ; アイテム選択テーブルを消去
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!9 or id(ig+8)!29 : continue ; 回復で無い
ud(ug+40+eqn)=in : sis_del in,10 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_2 ; 状態異常回復アイテム
ieqr_del 2 ; アイテム選択テーブルを消去
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!9 : continue ; アイテムで無い
if id(ig+8)<40 or 47<id(ig+8) : continue ; 状態異常回復で無い
ud(ug+40+eqn)=in : sis_del in,10 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_3 ; 矢筒の装備
in=ud(ug+41) : if in<=0 : return
if id(in*idb+19)!7 : return ; 装備が弓か
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb : if id(ig)!223 : continue ; 矢筒で無い
ud(ug+40+eqn)=in : sis_del in,10 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
return
#deffunc nieq_4 ; 矢、弾、砲弾の装備
ieqr_del 4 ; アイテム選択テーブルを消去
nieq_4f=0
if ud(ug+40)>0 {
if id(ud(ug+40)*idb+19)=8 : nieq_4f=1 ; ボウガン
if id(ud(ug+40)*idb+19)=9 : nieq_4f=2 ; 銃
if id(ud(ug+40)*idb)=90 : nieq_4f=3 ; ハンドキャノン
}
if ud(ug+41)>0 {
if id(ud(ug+41)*idb+19)=7 : nieq_4f=1 ; 弓
if id(ud(ug+41)*idb+19)=9 : nieq_4f=2 ; 銃
}
if nieq_4f=0 : return ; 弓、ボウガン、銃装備で無い
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb
if nieq_4f=1 : if id(ig+8)=7 : f=1 : break ; 矢
if nieq_4f=2 : if id(ig+8)=8 : f=1 : break ; 弾
if nieq_4f=3 : if id(ig+8)=9 : f=1 : break ; 砲弾
loop
if f=0 : return ; 無かった
ud(ug+40+eqn)=in : sis_del in,10 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
return
#deffunc nieq_7 ; 爆弾
ieqr_del 7 ; アイテム選択テーブルを消去
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!9 or id(ig+8)!14 : continue ; 爆弾で無い
ud(ug+40+eqn)=in : sis_del in,10 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_8 ; アクセサリー
ieqr_del 8 ; アイテム選択テーブルを消去
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!7 : continue ; アクセサリーで無い
ud(ug+40+eqn)=in : sis_del in,10 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_9 ; 護符
ieqr_del 9 ; アイテム選択テーブルを消去
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!7 : continue ; アクセサリーで無い
if id(ig)!184 : continue ; ロザリオで無い
ud(ug+40+eqn)=in : sis_del in,10 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_10 ; 本
ieqr_del 10 ; アイテム選択テーブルを消去
f=0
repeat sib10 : in=sis10(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!7 : continue ; アクセサリーで無い
if id(ig)!215 or id(ig+8)!216 or id(ig+8)!217 : continue ; 本で無い
ud(ug+40+eqn)=in : sis_del in,10 : f=1 ; 装備
equ_syo un,in ; 装備補整
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_11 ; 単体魔法
ieqr_del 11 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!11 : continue ; 前列魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_12 ; 全体攻撃魔法
ieqr_del 12 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 : continue ; 魔法で無い
if id(ig+8)!14 and id(ig+8)!15 : continue ; 着弾、全体魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_13 ; 強化魔法
ieqr_del 13 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig)!253 and id(ig)!282 and id(ig)!292 and id(ig)!303 : continue ; 強化魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_14 ; 全体強化魔法
ieqr_del 14 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 : continue ; 魔法で無い
if id(ig)!256 and id(ig)!306 and id(ig)!309 : continue ; 全体強化魔法魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_15 ; 単体魔法
ieqr_del 15 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!25 : continue ; 防壁魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_16 ; 付与魔法
ieqr_del 16 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!28 : continue ; 付与魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_17 ; グラビティ、レイブレイド
ieqr_del 17 ; アイテム選択テーブルを消去
n1=0 : n2=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb : if id(ig)!294 : continue ; グラビティマグネットで無い
n1=in : break
loop
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb : if id(ig)!311 : continue ; レイブレイドで無い
n2=in : break
loop
f=0
repeat 1 ; 2つの場合
if n1=0 or n2=0 : break ; 両方揃って無い
if equsi(eqn+1)!6 : break ; 枠2つ無い
n=itd(37,294)+itd(37,311) ; 必要知性
if neq_int<n : break ; 知性無い
neq_int-=n ; 必要知性消費
ud(ug+40+eqn)=n1 : sis_del n1,11 : eqn+
ud(ug+40+eqn)=n2 : sis_del n2,11
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
loop
if f>0 : return ; 装備した
repeat 1 ; レイブレイド
if n2!311 : break ; 無かった
if neq_int<itd(311*itdb+37) : break ; 知性無い
neq_int-=itd(311*itdb+37) ; 必要知性消費
ud(ug+40+eqn)=n2 : sis_del n2,11
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
loop
if f>0 : return ; 装備した
repeat 1 ; グラビティマグネット
if n1!294 : break ; 無かった
if neq_int<itd(294*itdb+37) : break ; 知性無い
neq_int-=id(294*itdb+37) ; 必要知性消費
ud(ug+40+eqn)=n1 : sis_del n1,11
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
loop
if f>0 : return ; 装備した
return
#deffunc nieq_18 ; 回復魔法
ieqr_del 18 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!29 : continue ; 回復魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_19 ; 状態異常回復魔法
ieqr_del 19 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!30 : continue ; 状態異常回復魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_20 ; 蘇生魔法
ieqr_del 20 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!31 : continue ; 蘇生魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_21 ; ターンアンデッド
ieqr_del 21 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!17 : continue ; ターンアンデッドで無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_23 ; 状態異常魔法
ieqr_del 23 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 : continue ; 魔法で無い
if id(ig)!286 and id(ig)!296 and id(ig)!322 and id(ig)!323 and id(ig)!324 and id(ig)!325 and id(ig)!326 and id(ig)!327 : continue ; 状態異常魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_24 ; 召還魔法
ieqr_del 24 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!16 : continue ; 召還魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
#deffunc nieq_25 ; 押し出し魔法
ieqr_del 25 ; アイテム選択テーブルを消去
f=0
repeat sib11 : in=sis11(cnt)
if in=0 : continue ; 無し
ig=in*idb
if id(ig+16)!10 or id(ig+8)!18 : continue ; 押し出し魔法で無い
if neq_int<id(ig+37) : continue ; 必要知性が足りない
neq_int-=id(ig+37) ; 必要知性消費
ud(ug+40+eqn)=in : sis_del in,11 : f=1 ; 装備
eqn+ : if equsi(eqn)!6 : f=2 ; アイテム枠無し
break
loop
if f>0 : return ; 装備した
return
; アイテム装備 --------------------------------------------------------
#deffunc nieq_syo int nieq_syon ; アイテム装備処理
f=0
repeat sbkn : eqn=cnt ; 装備箇所
if equsi(eqn)!5 and equsi(eqn)!6 : continue ; 特殊かアイテム枠以外
if ud(ug+40+eqn)!0 : continue ; 装備してる
f=1 : break
loop
if f=0 : return ; 枠無かった
nieq_3 ; 矢筒の装備
repeat ieqrb : ieqr(cnt)=0 : loop ; テーブルリセット
; 1=回復、2=状態回復、3=矢筒、4=矢、弾、砲弾、7=爆弾、8=アクセ、9=護符、
; 10=本、11=単魔法、12=全体魔法、
; 13=強化、14=全体強化魔法、15=防壁魔法、
; 16=エンチャント、17=グラビティ、レイブレイド、
; 18=回復魔法、19=状態異常回復魔法、20=蘇生魔法、21=ターンアンデッド、
; 23=状態異常魔法、24=召還魔法、25=押し出し魔法
if nieq_syon=1 : ieqr(0)=1,2,4,7,8,8,9,11,13,16,17 ; 近接のアイテム選択テーブル
if nieq_syon=2 : ieqr(0)=2,4,7,8,11,12,13,14,15,16,18,19,21,23,24,25 ; 中距離のアイテム選択テーブル
if nieq_syon=3 : ieqr(0)=4,4,4,7,8,9,11,12,13,16,18,19,21,23,24,25 ; 弓銃のアイテム選択テーブル
if nieq_syon=4 : ieqr(0)=1,2,7,8,9,11,11,12,12,13,14,15,16,17,18,19,21,23,24 ; 魔力素アタックのアイテム選択テーブル
if nieq_syon=5 : ieqr(0)=8,9,10,11,11,11,12,12,12,13,14,15,18,19,21,23,24,25 ; 魔術師のアイテム選択テーブル
if nieq_syon=6 : ieqr(0)=1,2,8,10,11,11,11,12,12,12,23,24,25 ; 魔女のアイテム選択テーブル
if nieq_syon=7 : ieqr(0)=1,2,8,9,14,15,18,18,18,19,19,19,20,21,24,25 ; 僧侶のアイテム選択テーブル
ieqrn=0 ; テーブルの数
repeat ieqrb
if ieqr(cnt)=0 : break
ieqrn+
loop
if nieq_syon=5 or nieq_syon=6 : nieq_12 : nieq_11 ; 魔術師、魔女
repeat sbkn ; 装備枠最大数
repeat ieqrn
r=ieqr(rnd(ieqrn)) ; 何を装備するか
/*
redraw 0
color 0,0,0 : boxf : color 255,255,255
dgs "r ",r,1
dgs "f ",f,2
dgs "set",a,3
equ_put
dg_put
repeat 25
pos 10+cnt*25,5 : mes ieqr(cnt)
loop
redraw 1
pkey
*/
if r=1 : nieq_1 : if f=2 : break ; 回復
if r=2 : nieq_2 : if f=2 : break ; 状態異常回復
if r=4 : nieq_4 : if f=2 : break ; 矢、弾、砲弾
if r=7 : nieq_7 : if f=2 : break ; 爆弾
if r=8 : nieq_8 : if f=2 : break ; アクセサリー
if r=9 : nieq_9 : if f=2 : break ; 護符
if r=10 : nieq_10 : if f=2 : break ; 本
if r=11 : nieq_11 : if f=2 : break ; 単体魔法
if r=12 : nieq_12 : if f=2 : break ; 全体魔法
if r=13 : nieq_13 : if f=2 : break ; 強化魔法
if r=14 : nieq_14 : if f=2 : break ; 全体強化魔法
if r=15 : nieq_15 : if f=2 : break ; バリア
if r=16 : nieq_16 : if f=2 : break ; エンチャント
if r=17 : nieq_17 : if f=2 : break ; グラビティ、レイブレイド
if r=18 : nieq_18 : if f=2 : break ; 回復魔法
if r=19 : nieq_19 : if f=2 : break ; 状態異常回復魔法
if r=20 : nieq_20 : if f=2 : break ; 蘇生魔法
if r=21 : nieq_21 : if f=2 : break ; ターンアンデッド
if r=23 : nieq_23 : if f=2 : break ; 状態異常魔法
if r=24 : nieq_24 : if f=2 : break ; 召還魔法
if r=25 : nieq_25 : if f=2 : break ; 押し出し魔法
loop
if f=2 : break
loop
/*
redraw 0
color 0,0,0 : boxf : color 255,255,255
dgs "r ",r,1
dgs "f ",f,2
dgs "end",a,3
equ_put
dg_put
repeat 25
pos 10+cnt*25,5 : mes ieqr(cnt)
loop
redraw 1
pkey
*/
return
; 中立の装備 -------------------------------------------------------
#deffunc neq int neqn ; 中立の装備
; 10=装備タイプ
; (0=無、1=筋力素アタック、2=盾+片手、3=2刀流、4=両手持ち、5=棍棒、
; 6=投擲、7=槍、8=弓、9=魔力素アタック、10=魔術師、11=魔女、12=僧侶)
un=neqn : ug=un*udb : cn=ud(ug)
neqf=1 ; 1列目
sbk_syo ; 装備枠処理
neq_int=ud(ug+3) ; 魔法装備上限値
repeat 1 ; 防具装備
if ud(ug+17)=0 : break ; 防具欄無い
sis9_syo : if f=0 : break ; 防具無い
repeat sbkn
if equsi(cnt)=4 : ud(ug+40+cnt)=in : equ_syo un,in : break ; 防具欄に装備
loop
loop
n=7-(ud(ug+16)+ud(ug+17)+ud(ug+18)+ud(ug+19)+(ud(ug+3)/20)) ; 空きスロット数
repeat 1 ; 特殊アイテム装備
if n<=0 : break ; 空きスロット無い
toku12f=0 : sis12_syo n : if f=0 : break ; 特殊アイテムが有るか
repeat sbkn
if equsi(cnt)=5 : ud(ug+40+cnt)=in : equ_syo un,in : break ; 特殊欄に装備
loop
loop
; 筋力素アタック
if cd(10,cn)=1 {
nieq_syo 1 ; 近接のアイテム、魔法装備
}
; 盾+片手
if cd(10,cn)=2 {
repeat 1
sis8_syo : if f=1 { ; 盾が有るか
ud(ug+41)=in ; 左手装備
sis1_syo : if f=1 : ud(ug+40)=in : break ; 片手武器有るか
sis6_syo 1 : if f=1 : ud(ug+40)=in : break ; 片手銃有るか
sis7_syo : if f=1 : ud(ug+40)=in : break ; 投擲武器有るか
break
}
sis2_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 両手装備
sis3_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=2 : break ; 槍装備
sis1_syo : if f=1 { ; 片手武器(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
sis6_syo 1 : if f=1 { ; 片手銃有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
sis7_syo : if f=1 { ; 投擲武器有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
break
}
sis6_syo 0 : if f=1 { ; 弓銃
ig=in*idb
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=3 : break ; 右両手
if id(ig+16)=4 : ud(ug+40)=-2 : ud(ug+41)=in : neqf=3 : break ; 左両手
ud(ug+40)=in : neqf=2 ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 左手
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
break
}
loop
nieq_syo 1 ; 近接のアイテム、魔法装備
}
; 2刀流
if cd(10,cn)=3 {
repeat 1
sis1_syo : if f=1 { ; 片手武器有るか
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
sis6_syo 1 : if f=1 { ; 片手銃有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
sis7_syo : if f=1 { ; 投擲武器有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
sis2_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 両手装備
sis3_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=2 : break ; 槍装備
sis6_syo 0 : if f=1 { ; 弓銃
ig=in*idb : neqf=3
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 右両手
if id(ig+16)=4 : ud(ug+40)=-2 : ud(ug+41)=in : break ; 左両手
}
loop
nieq_syo 1 ; 近接のアイテム、魔法装備
}
; 両手
if cd(10,cn)=4 {
repeat 1
sis2_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 両手装備
sis8_syo : if f=1 { ; 盾が有るか
ud(ug+41)=in ; 左手装備
sis1_syo : if f=1 : ud(ug+40)=in : break ; 片手武器
sis6_syo 1 : if f=1 : ud(ug+40)=in : break ; 片手銃
sis7_syo : if f=1 : ud(ug+40)=in : break ; 投擲武器
break
}
sis1_syo : if f=1 { ; 片手武器(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
sis7_syo : if f=1 { ; 投擲武器有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
sis6_syo 1 : if f=1 { ; 片手銃有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
sis3_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=2 : break ; 槍
sis6_syo 0 : if f=1 { ; 弓銃
ig=in*idb : neqf=3
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 右両手
if id(ig+16)=4 : ud(ug+40)=-2 : ud(ug+41)=in : break ; 左両手
}
loop
nieq_syo 1 ; 近接のアイテム、魔法装備
}
; 棍棒
if cd(10,cn)=5 {
repeat 1
sis4_syo : if f=1 { ; 棍棒
if ud(ug+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 両手装備
ud(ug+40)=in ; 片手
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
sis3_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=2 : break ; 槍
sis6_syo 0 : if f=1 { ; 弓銃
ig=in*idb
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=3 : break ; 右両手
if id(ig+16)=4 : ud(ug+40)=-2 : ud(ug+41)=in : neqf=3 : break ; 左両手
ud(ug+40)=in : neqf=2 ; 右手
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
sis1_syo : if f=1 { ; 片手武器(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
sis7_syo : if f=1 { ; 投擲武器有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
loop
nieq_syo 1 ; 近接のアイテム、魔法装備
}
; 投擲
if cd(10,cn)=6 {
repeat 1
sis7_syo : if f=1 { ; 投擲武器
ud(ug+40)=in : neqf=2 ; 右手
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
sis6_syo 1 : if f=1 { ; 片手銃
ud(ug+40)=in : neqf=2 ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
sis3_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=2 : break ; 槍
sis6_syo 0 : if f=1 { ; 弓銃
ig=in*idb : neqf=3
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 右両手
if id(ig+16)=4 : ud(ug+40)=-2 : ud(ug+41)=in : break ; 左両手
break
}
sis1_syo : if f=1 { ; 片手武器有るか(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
break
}
sis2_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 両手装備
loop
nieq_syo 2 ; 中距離のアイテム、魔法装備
}
; 槍
if cd(10,cn)=7 {
repeat 1
sis3_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=2 : break ; 槍
sis6_syo 0 : if f=1 { ; 弓銃
ig=in*idb
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=3 : break ; 右両手
if id(ig+16)=4 : ud(ug+40)=-2 : ud(ug+41)=in : neqf=3 : break ; 左両手
ud(ug+40)=in : neqf=2 ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
sis7_syo : if f=1 { ; 投擲武器有るか
ud(ug+40)=in : neqf=2 ; 右手装備
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
sis2_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 両手装備
sis8_syo : if f=1 { ; 盾が有るか
ud(ug+41)=in ; 左手装備
sis1_syo : if f=1 : ud(ug+40)=in : break ; 片手武器
break
}
sis1_syo : if f=1 { ; 片手武器有るか(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
loop
nieq_syo 2 ; 中距離のアイテム、魔法装備
}
; 弓銃
if cd(10,cn)=8 {
repeat 1
sis6_syo 0 : if f=1 { ; 弓銃
ig=in*idb
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=3 : break ; 右両手
if id(ig+16)=4 : ud(ug+40)=-2 : ud(ug+41)=in : neqf=3 : break ; 左両手
ud(ug+40)=in : neqf=2 ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
}
sis7_syo : if f=1 { ; 投擲武器
ud(ug+40)=in : neqf=2 ; 右手
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
}
sis3_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : neqf=2 : break ; 槍
sis8_syo : if f=1 { ; 盾が有るか
ud(ug+41)=in ; 左手装備
sis1_syo : if f=1 : ud(ug+40)=in ; 片手武器有るか
break
}
sis2_syo : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 両手装備
sis1_syo : if f=1 { ; 片手武器有るか(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
loop
nieq_syo 3 ; 弓銃のアイテム、魔法装備
}
; 魔力素アタック
if cd(10,cn)=9 {
nieq_syo 4 ; 魔力素アタックのアイテム、魔法装備
}
; 魔術師
if cd(10,cn)=10 {
neqf=3
repeat 1
sis5_syo : if f=1 { ; 杖
ig=in*idb
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 右両手
ud(ug+40)=in ; 右手
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
}
sis7_syo : if f=1 { ; 投擲武器
ud(ug+40)=in ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
}
sis6_syo 1 : if f=1 { ; 片手銃
ud(ug+40)=in ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
sis8_syo : if f=1 { ; 盾が有るか
ud(ug+41)=in ; 左手装備
sis1_syo : if f=1 : ud(ug+40)=in ; 片手武器有るか
break
}
sis1_syo : if f=1 { ; 片手武器有るか(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
loop
nieq_syo 5 ; 魔術師のアイテム、魔法装備
}
; 魔女
if cd(10,cn)=11 {
neqf=3
repeat 1
sis5_syo : if f=1 { ; 杖
ig=in*idb
if id(ig+16)=2 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 右両手
ud(ug+40)=in ; 右手
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
}
sis7_syo : if f=1 { ; 投擲武器
ud(ug+40)=in ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis7_syo : if f=1 : ud(ug+41)=in : break ; 投擲武器
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
}
sis6_syo 1 : if f=1 { ; 片手銃
ud(ug+40)=in ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
sis8_syo : if f=1 : ud(ug+41)=in : break ; 盾
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
sis8_syo : if f=1 { ; 盾が有るか
ud(ug+41)=in ; 左手装備
sis1_syo : if f=1 : ud(ug+40)=in ; 片手武器有るか
break
}
sis1_syo : if f=1 { ; 片手武器有るか(2刀流)
ud(ug+40)=in ; 右手装備
sis1_syo : if f=1 : ud(ug+41)=in : break ; 片手武器
break
}
loop
nieq_syo 6 ; 魔女のアイテム、魔法装備
}
; 僧侶
if cd(10,cn)=12 {
neqf=2
repeat 1
sis8_syo : if f=1 { ; 盾が有るか
ud(ug+41)=in ; 左手装備
sis4_syo 1 : if f=1 : ud(ug+40)=in : break ; 棍棒
sis5_syo 1 : if f=1 : ud(ug+40)=in : break ; 杖
sis6_syo 1 : if f=1 : ud(ug+40)=in : break ; 片手銃有るか
break
}
sis4_syo 2 : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 棍棒
sis4_syo 1 : if f=1 : ud(ug+40)=in : break ; 片手棍棒有るか
sis5_syo 2 : if f=1 : ud(ug+40)=in : ud(ug+41)=-1 : break ; 杖
sis5_syo 1 : if f=1 : ud(ug+40)=in : break ; 片手杖有るか
sis6_syo 1 : if f=1 { ; 片手銃
ud(ug+40)=in : neqf=2 ; 右手
sis6_syo 1 : if f=1 : ud(ug+41)=in : break ; 片手銃
break
}
loop
nieq_syo 7 ; 僧侶のアイテム、魔法装備
}
return
; ------- 装備 --------
#deffunc hrs_eq int hrs_eqf ; 英雄の順列の装備(1=筋力、2=魔力)
un=0
repeat hub
if hrs_eqf=1 : un=hrs1(cnt) ; 筋力
if hrs_eqf=2 : un=hrs2(cnt) ; 魔力
if un>0 : hrs_del un : break
loop
if un=0 : return ; いない
neq un ; 英雄の装備
if neqf=1 : hrt1(hrt1c)=un : hrt1c+ ; 1列目の順列に放り込む
if neqf=2 : hrt2(hrt2c)=un : hrt2c+ ; 2列目の順列に放り込む
if neqf=3 : hrt3(hrt3c)=un : hrt3c+ ; 3列目の順列に放り込む
return
#deffunc nrs_eq int nrs_eqf ; 中立の順列の装備(1=筋力、2=魔力)
un=0
repeat nub
if nrs_eqf=1 : un=nrs1(cnt) ; 筋力
if nrs_eqf=2 : un=nrs2(cnt) ; 魔力
if un>0 : nrs_del un : break
loop
if un=0 : return ; いない
neq un ; 中立の装備
if neqf=1 : nrt1(nrt1c)=un : nrt1c+ ; 1列目の順列に放り込む
if neqf=2 : nrt2(nrt2c)=un : nrt2c+ ; 2列目の順列に放り込む
if neqf=3 : nrt3(nrt3c)=un : nrt3c+ ; 3列目の順列に放り込む
return