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
という訳で、これでゲーム的に弱くても逆転できる要素ができてゲームに幅がでてきたと思います。