2019年 2月 16日
ユニットとアイテムをマナポイントを消費して好きな時に作成できる「TALENT]と「ORDER」ボタンを実装した。
BUILDは建築でまだ作ってません。
TALENT(タレント)はユニットをスカウトしてくるボタンで、魔術 Lvとマナポイント残量に応じてランダムにユニットを引きます。
消費するマナポイントは出現 LVに応じて 1=100で後は今の所 1.09倍ずつ増加します。
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
; 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倍ずつです。
近距離は剣、大剣、棍棒を
中距離は槍と杖を
遠距離は弓、クロスボウ、銃、キャノンを
防具は鎧と盾
アクセサリー
アイテム
魔法
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 |
; 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 |
という訳で、これでゲーム的に弱くても逆転できる要素ができてゲームに幅がでてきたと思います。