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