Hextrategy マナPを消費してユニットとアイテムを作成できる要素を実装


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

 
 
 という訳で、これでゲーム的に弱くても逆転できる要素ができてゲームに幅がでてきたと思います。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です