CDW 簡易戦闘表示を作った


2022年 2月 18日
 
 
 頻繁に戦闘画面に入るとチカチカするし、戦闘中はマップ画面を見れなくて不便なので、画面下のストックエリアに簡易戦闘画面を作る事にした。

 でも、これって表示速度の関係で最初に断念した元の表示形態なんだよね。
 
 

 なぜこれができるのかと言うと、HEXの大きさを大きくして表示個数が減ったのもあると思うけど、結局たぶん FPS 20(1秒間に 20回描画)は出てないのかもしれない。

 一応 await 1000/50で設定はしてあるけど。

訂正
 FPS 20の場合 1000/50ではなくて 1000/20でした。
 await 50の書き方なら FPS 20ですね、ややこしい。
 
 
 まあ STGや ACTゲームという訳では無いので FPS 20も要らないと言えば要らない。

 ただし mes表示は決定的に遅い、このHEXに例えば HEX番号みたいのを mes表示させたりすると、話にならないくらい遅低する。

 もちろん最終的に mes表示は全部使わない事になる、これは実機次第、つまり環境によって文字表示が変化してしまったりするためだけど。
 
 
 表示はこのダイス目を


 
 
 順番に表示して、数値も足されて表示するようにしている


 
 
 ソース

#deffunc btl_put2 ; 簡易戦闘表示

	font "",80 : color 255,255,255

; バックカラー
	cn1=clpn(pn1)-1
	color cld(cn1*3+1)*bacn/100,cld(cn1*3+2)*bacn/100,cld(cn1*3+3)*bacn/100
	 boxf 0,gk3y,270,wy

	cn2=clpn(pn2)-1
	color cld(cn2*3+1)*bacn/100,cld(cn2*3+2)*bacn/100,cld(cn2*3+3)*bacn/100
	 boxf 270,gk3y,540,wy


; エリア境界線

	gmulcolor 255,255,255
	repeat 540/8+1
	 pos 8*cnt,gw3y : celput wkw,46
	 pos 8*cnt,wy-8 : celput wkw,47
	loop

	n=20
	repeat n
	 pos 0,wy-n*8+8*cnt : celput wkw,44
	 pos wx-8,wy-n*8+8*cnt : celput wkw,45
	loop

	pos 0,wy-n*8	: celput wkw,36
	pos wx-8,wy-n*8	: celput wkw,37
	pos 0,wy-8		: celput wkw,38
	pos wx-8,wy-8	: celput wkw,39

; キャラ表示

	gmode 2
	 gmulcolor 248,248,248
	if ldcu(kln1)>0 : pos 6   ,807 : celput cuw(ldcu(kln1)),0,0.6,0.6
	if ldcu(kln2)>0 : pos wx-6,807 : celput cuw(ldcu(kln2)),0,-0.6,0.6


; ダイスの目 pn1
	if dn1f=0 and dpcb>dpc {
	 repeat dcpb
	  if dn1c>=dcpb : break
	  if p1dp(dn1c)=-1 : dn1c+ : continue
	  dn1=p1dp(dn1c) ; ダイスの目
	  cdwp1n=dn1c	 ; 金枠判定用
	  dn1f=1 : dn1c+
	  p1dnp+=dn1/2+1 ; 表示戦力
	  break
	 loop
	}

	dn1x=96 : dn1y=849
; 白目表示
	gmulcolor 255,255,255
	 pos dn1x,dn1y : celput dc64whw,dn1

; ダイス表示
	gmulcolor cld2(cn1*3+1),cld2(cn1*3+2),cld2(cn1*3+3)
	 pos dn1x,dn1y : celput dc64w,dn1

; cuダイス増の金枠表示
	if cdwp1(cdwp1n)>0 {
	 gmulcolor 255,255,255
	  pos dn1x-4,dn1y-4 : celput dc64wkw
	}

	dn1fc+ : if dn1fc=dn1fcb : dn1f=0 : dn1fc=0

; 戦力数字表示
	color 255,255,255
	pos 172,839 : mes ""+p1dnp


; ダイスの目 pn2
	if dn2f=0 and dpcb>dpc {
	 repeat dcpb
	  if dn2c>=dcpb : break
	  if p2dp(dn2c)=-1 : dn2c+ : continue
	  dn2=p2dp(dn2c) ; ダイスの目
	  cdwp2n=dn2c	 ; 金枠判定用
	  dn2f=1 : dn2c+
	  p2dnp+=dn2/2+1 ; 表示戦力
	  break
	 loop
	}

	dn2x=444-64 : dn2y=849
; 白目表示
	gmulcolor 255,255,255
	 pos dn2x,dn2y : celput dc64whw,dn2

; ダイス表示
	gmulcolor cld2(cn2*3+1),cld2(cn2*3+2),cld2(cn2*3+3)
	 pos dn2x,dn2y : celput dc64w,dn2

; cuダイス増の金枠表示
	if cdwp2(cdwp2n)>0 {
	 gmulcolor 255,255,255
	  pos dn1x-4,dn1y-4 : celput dc64wkw
	}

	dn2fc+ : if dn2fc=dn2fcb : dn2f=0 : dn2fc=0

; 戦力数字表示
	color 255,255,255
	pos 290,839 : mes ""+p2dnp


; ATTACK、DEFENSE表示
	font "",30

	n=clpn(pn1)-1
	color cld(n*3+1),cld(n*3+2),cld(n*3+3)
	 pos 6,wy-32
	  mes "ATTACK"

	n=clpn(pn2)-1
	color cld(n*3+1),cld(n*3+2),cld(n*3+3)
	 pos wx-110,wy-32
	  mes "DEFENSE"

	return

 dcpb = 最大ダイス数、16個 + 指揮官 3個で 19。

 dn1c でその何番目参照かを定義して、使われていない(-1)の時は次の dn1cを参照するようにしている。

 全ダイス表示しきったら後は wait分待つ。

 使われていない(-1)は全画面戦闘表示ではダイスが描かれない空白を表す。

 そんな所かな。

コメントを残す

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