2019年 2月 16日
ユニットとアイテムをマナポイントを消費して好きな時に作成できる「TALENT]と「ORDER」ボタンを実装した。
BUILDは建築でまだ作ってません。
TALENT(タレント)はユニットをスカウトしてくるボタンで、魔術 Lvとマナポイント残量に応じてランダムにユニットを引きます。
消費するマナポイントは出現 LVに応じて 1=100で後は今の所 1.09倍ずつ増加します。
ソース
; Talent、ユニット種類 #deffunc tal_fd int tal_fdm c=100 repeat 100 ; マナがあるか if tal_mp(c)<=pmp(pn) : break c- loop if c=0 : ord_ms_put 1 : return ; マナが無い m=tal_fdm : mdg=m*mdb ; 国 pn=mpl(m) ; プレイヤーNo. if pn>0 : mc=mpc(pn) ; 首都 if pn=0 : mc=m ; 中立 n0=int(round(double(md(mdg+2))/1000.0)) ; 魔術 n1=0 un1=mu(m*10) ; 領主 if un1>0 : n1=int(round(double(ud(un1*udb+24))*5.0/25.0)) ; 魅力補整 n2=0 un2=mu(mc*10) ; 首領 if un2>0 : n2=int(round(double(ud(un2*udb+24))*2.0/25.0)) ; 魅力補整 n3=0 if md(mdg+7)=1 : n3+=3 ; 城 r=(n0+n1+n2+n3) ; 出現Lv if r>c : r=c ; Lv分のマナポイントがあるか zn=map(m) ; 地形 cs=cha_syu(zn) ; その地形のキャラ種類総数 cz=cha_zoks(zn) ; その地形のキャラスタートNo. n=0 repeat cs cn=cz+cs-cnt-1 if cd(15,cn)<=r : urd(n)=cn : n+ if n=5 : break ; 上位5種 loop if n=0 : return ; 居なかった cn=urd(rnd(n)) ; キャラ種類 if cn>0 : unt 1,cn ; ユニット登録 pmp(pn)-=tal_mp(cd(15,cn)) ; マナポイント減少 tal_fd_put ; 発見表示 return ; Talent、ユニット #deffunc tal_put ;int tal_putf font "",24,0 n=mpl(m) if n=0 { color 240,240,240 : pos talx2,taly2 : mes ""+m+" 国" } if n>0{ color pld(n*10+1),pld(n*10+2),pld(n*10+3) ; 勢力 pos talx2,taly2 : mes ""+m+" 国" } color 240,240,240 pos talx3,taly2 : mes "魔術LEVEL "+r;ml pos talx4,taly2 : mes "MANA POINT "+pmp(pn) return #deffunc tal_fd_put f=0 : cf=1.0 : kb=0 x=320-cox/2 : y=135-coy/2 repeat redraw 0 color 1,1,1 : boxf : color 240,240,240 tal_put ;1 switch f case 0 pos x,y : celput owkw,0,cf cf-=0.1 : if cf<=0.0 : f=1 swbreak case 1 pos x,y : celput cw,cn-1,cf cf+=0.1 : if cf>=1.0 : f=2 swbreak case 2 pos x,y : celput cw,cn-1,cf stick kb : if kb=256 : f=3 swbreak swend pos 210,225 : celput cd_ftw,cn pos 230,270 : mes "LEVEL "+cd(15,cn) pos 190,310 : mes "MANA POINT "+tal_mp(cd(15,cn)) redraw 1 await 1000/40 if f=3 : break loop return #deffunc ord_ms_put int ord_ms_putf ; メッセージ repeat 20 redraw 0 color 1,1,1 : boxf : color 255,255,255 ord_put 1 color 240,240,240 : boxf 100,100,wx-100,wy-100 color 1,1,1 : boxf 100+2,100+2,wx-100-2,wy-100-2 color 240,240,240 pos 150,150 if ord_ms_putf=0 : mes "製作に失敗しました" if ord_ms_putf=1 : mes "マナポイントが足りません" redraw 1 await 1000/20 loop return
ORDER(オーダー)はアイテム作成依頼で、今の所 Lvに応じての消費マナ Pは 1.08倍ずつです。
近距離は剣、大剣、棍棒を
中距離は槍と杖を
遠距離は弓、クロスボウ、銃、キャノンを
防具は鎧と盾
アクセサリー
アイテム
魔法
ソース
; Order、アイテム *order mdg=m*mdb ; 国 c=100 repeat 100 ; マナがあるか if ord_mp(c)<=pmp(pn) : break c- loop if c=0 : ml=0 : ord_ms_put 1 : return ; マナが無い pn=mpl(m) ; プレイヤーNo. if pn>0 : mc=mpc(pn) ; 首都 if pn=0 : mc=m ; 中立 n0=int(round(double(md(mdg+2))/1000.0)) ; 魔術 n1=0 un1=mu(m*10) ; 領主 if un1>0 : n1=int(round(double(ud(un1*udb+23))*5.0/25.0)) ; 知力補整 n2=0 un2=mu(mc*10) ; 首領 if un2>0 : n2=int(round(double(ud(un2*udb+23))*2.0/25.0)) ; 知力補整 n3=0 if md(mdg+7)=1 : n3+=3 ; 城 mlr=(n0+n1+n2+n3) ; 出現Lv if mlr>c : ml=c : else : ml=mlr ; Lv分のマナポイントがあるか repeat ky=tal_key() : stick kb if kb=256 { if ky=4 or ky=7 or ky=9 : break ; 戻る ord_fd ky ; アイテムオーダー c=100 repeat 100 ; マナがあるか if ord_mp(c)<=pmp(pn) : break c- loop if c=0 : break ; マナが無い if mlr>c : ml=c : else : ml=mlr ; Lv分のマナポイントがあるか } redraw 0 color 1,1,1 : boxf : color 255,255,255 ord_put redraw 1 await 1000/20 loop return ; Order、アイテム -------------------------- #deffunc ord_fd int ord_fdf ; アイテムオーダー(ord_fdf=種類) ; 出現アイテム種類 r=ml ; 出現Lv n=0 switch ord_fdf ; 製作できるアイテムをピックアップ case 1 ; 近距離武器 repeat 100 if r=0 : break ; Lv0 repeat 40 : c=40-cnt;1 if itd(16,c)=0 : continue ; アイテム無い if itd(15,c)!r : continue ; 技術Lvに満たない ird(n)=c : n+ loop if n>=11 : break r- loop swbreak case 2 ; 中距離武器 repeat 100 if r=0 : break ; Lv0 repeat 30 : c=70-cnt;41 if itd(16,c)=0 : continue ; アイテム無い if itd(15,c)!r : continue ; 技術Lvに満たない ird(n)=c : n+ loop if n>=10 : break r- loop swbreak case 3 ; 遠距離武器 repeat 100 if r=0 : break ; Lv0 repeat 20 : c=90-cnt;71 if itd(16,c)=0 : continue ; アイテム無い if itd(15,c)!r : continue ; 技術Lvに満たない ird(n)=c : n+ loop if n>=8 : break r- loop swbreak case 5 ; 防具 repeat 100 if r=0 : break ; Lv0 repeat 40 : c=140-cnt;101 if itd(16,c)=0 : continue ; アイテム無い if itd(15,c)!r : continue ; 技術Lvに満たない ird(n)=c : n+ loop if n>=14 : break r- loop swbreak case 6 ; アクセサリー repeat 50,141 if itd(16,cnt)=0 : continue ; アイテム無い if itd(15,cnt)>r : continue ; 技術Lvに満たない ird(n)=cnt : n+ loop swbreak case 8 ; アイテム repeat 30,201 if itd(16,cnt)=0 : continue ; アイテム無い if itd(15,cnt)>r : continue ; 技術Lvに満たない ird(n)=cnt : n+ loop swbreak case 10 ; 魔法 ms=map(m) ; 地形種類 msimn=0,251,261,281,291,301,321 ; 魔法アイテムの属性別初No. msimc=0,10,10,10,10,20,10 ; 魔法アイテムの属性別探索数 repeat msimc(ms),msimn(ms) ; 魔法 if itd(16,cnt)=0 : continue ; アイテム無い if itd(15,cnt)>r : continue ; 技術Lvに満たない ird(n)=cnt : n+ loop swbreak swend if n=0 : ord_ms_put 0 : return ; 製作できるアイテムが無かった ; 出現処理 itn=ird(rnd(n)) pmp(pn)-=ord_mp(itd(15,itn)) ; マナポイント消費 itt 1,itn ; 英雄アイテム登録 ord_fd_put ; 発見表示 return ; Order、アイテム、表示 #deffunc ord_put int ord_putf font "",24,0 n=mpl(m) if n=0 { color 240,240,240 : pos talx2,taly2 : mes ""+m+" 国" } if n>0{ color pld(n*10+1),pld(n*10+2),pld(n*10+3) ; 勢力 pos talx2,taly2 : mes ""+m+" 国" } color 240,240,240 pos talx3,taly2 : mes "技術 LEVEL "+ml pos talx4,taly2 : mes "MANA POINT "+pmp(pn) if ord_putf=1 : return repeat 10 ; 枠 if cnt=3 or cnt=6 or cnt=8 : continue if cnt<5 : pos talx1+talxk*(cnt\5)+cox/2,taly1 : celput owkw if cnt>4 : pos talx1+talxk*(cnt\5)+cox/2,taly1+talyk : celput owkw loop font "",20,0 ; 近距離武器、中距離武器、遠距離武器、防具、アクセサリー、アイテム、魔法 ; SHORT、MEDIUM、LONG、GUARD、ACCESSORY、ITEM、MAGIC pos talkx1(1)+10,talky1(1)+10 mes "近距離" pos talkx1(1)+15,talky1(1)+55 mes "SHORT" pos talkx1(1)+10,talky1(1)+80 mes "WEAPON" pos talkx1(2)+10,talky1(2)+10 mes "中距離" pos talkx1(2)+10,talky1(2)+55 mes "MEDIUM" pos talkx1(2)+10,talky1(2)+80 mes "WEAPON" pos talkx1(3)+10,talky1(3)+10 mes "遠距離" pos talkx1(3)+20,talky1(3)+55 mes "LONG" pos talkx1(3)+10,talky1(3)+80 mes "WEAPON" pos talkx1(5)+10,talky1(5)+10 mes "防具" pos talkx1(5)+15,talky1(5)+55 mes "GUARD" pos talkx1(6)+10,talky1(6)+10 mes "アクセサリー" pos talkx1(6)+10,talky1(6)+55 mes "ACCES" pos talkx1(6)+30,talky1(6)+75 mes "SORY" pos talkx1(8)+10,talky1(8)+10 mes "アイテム" pos talkx1(8)+20,talky1(8)+55 mes "ITEM" pos talkx1(10)+10,talky1(10)+10 mes "魔法" pos talkx1(10)+15,talky1(10)+55 mes "MAGIC" return #deffunc ord_ms_put int ord_ms_putf ; メッセージ repeat 20 redraw 0 color 1,1,1 : boxf : color 255,255,255 ord_put 1 color 240,240,240 : boxf 100,100,wx-100,wy-100 color 1,1,1 : boxf 100+2,100+2,wx-100-2,wy-100-2 color 240,240,240 pos 150,150 if ord_ms_putf=0 : mes "製作に失敗しました" if ord_ms_putf=1 : mes "マナポイントが足りません" redraw 1 await 1000/20 loop return #deffunc ord_fd_put ; 発見表示 f=0 : cf=1.0 : kb=0 x=320-cox/2 : y=135-coy/2 repeat redraw 0 color 1,1,1 : boxf : color 240,240,240 ord_put 1 switch f case 0 pos x,y : celput owkw,0,cf cf-=0.1 : if cf<=0.0 : f=1 swbreak case 1 pos x,y : celput iw,itn-1,cf cf+=0.1 : if cf>=1.0 : f=2 swbreak case 2 pos x,y : celput iw,itn-1,cf stick kb : if kb=256 : f=3 swbreak swend pos 210,225 : celput it_ftw,itn pos 230,270 : mes "LEVEL "+itd(15,itn) pos 190,310 : mes "MANA POINT "+ord_mp(itd(15,itn)) redraw 1 await 1000/40 if f=3 : break loop return
という訳で、これでゲーム的に弱くても逆転できる要素ができてゲームに幅がでてきたと思います。