Hextrategy キャラクリエイターを作った


2018年 12月 5日
 
 
 ゲームバランス改善の一環として、キャラの能力を抜本的に改定することにした。

 キャラの能力も、とりあえずで適当に作ったものだったが、Lvに比例して各能力が平均的に上がるので、どうしても Lvがあればそれだけで強いという事になっていたし、各キャラに特徴も無かった。

 そこでキャラの能力を平均的にでは無く、絶対値的に作る事にした。

 どういう事かと言うと、例えば高 Lvの魔術師の魔力や知力は 20台や 30台で高いが、腕力は人間の平均的な値と定める 10台で、Lvの低いファイターより腕力は低いとかそんな感じの絶対的な味付けをする事にした訳だ。

 逆にミノタウロスみたいな腕力だけで頭の悪そうなキャラは、知力を低めに設定してアイテムを沢山装備できない、魔法を使えない、イニシアティブで不利、つまり攻撃が遅いなどの特徴を持つ事になる。


 
 
 そこで相対的なキャラの味付けをするために能力値に基づいて横並びに表示できるキャラ能力エディッターを作った。

 これで○○のキャラは、この能力は○○のキャラより低いだろうとか、3ポイント程高いんじゃなかろうか、などとキャラを眺めながら相対的に評価、味付けができるという訳だ。
 
 
 キャラクリエイター


 
 
 ほんとはキャラエディッターと名乗るのが良い気がするが、それは始めに作ったキャラエディッターで使ってしまった、まあそんな話はどうでもいい。
 
 
 このツールはキャラエディッターを改造して 2日程で作った。

/////// キャラクリエイター ////////////////////////////

;#include "hsp3dish.as"


gosub *main : end

#include "mod_joystick.as"
#include "chara_data.hsp"
#include "kansu.hsp"
#include "put.hsp"
#include "syoki.hsp"


*main

	mainfb=8
	gosub *syoki

	mainf=0
	repeat

	 if ginfo_act=mw or ginfo_act=gw or ginfo_act=bmpsw {
	  getkey k,27 : if k : end ; Esc END
	 }
	 getkey k,17 : if k : gsel bmpw,1 : gsel gw,1 : gsel mw,1 ; ウインドウアクティブ


	 sk=0 : if kc=0 : stick sk,256

	 if kc>0  : kc- : else : ky=key()

	 if ky=1 : mainf- : if mainf<0 : mainf=mainfb
	 if ky=2 : mainf+ : if mainf>mainfb : mainf=0

	 if ky=256 : cn- : if cn<1 : cn=cb-1
	 if ky=512 : cn+ : if cn>=cb : cn=1


	 switch mainf

	  case 0 ; キャラNO.
	   if ky=4 or ky=16 : cn- : if cn<1 : cn=cb-1
	   if ky=8 or ky=32 : cn+ : if cn>=cb : cn=1
	  swbreak

	  case 1 ; HP
	   if ky=4 or ky=16 : cd(5,cn)- : if cd(5,cn)<0 : cd(5,cn)=999
	   if ky=8 or ky=32 : cd(5,cn)+ : if cd(5,cn)>=999 : cd(5,cn)=0
	  swbreak

	  case 2 : dn=1 : gosub *syori : swbreak ; 筋力
	  case 3 : dn=2 : gosub *syori : swbreak ; 魔力
	  case 4 : dn=3 : gosub *syori : swbreak ; 知力
	  case 5 : dn=4 : gosub *syori : swbreak ; 魅力


	  case 6 ; 出現Lv
	   if ky=4 : cd(15,cn)- : if cd(15,cn)<=0 : cd(15,cn)=100
	   if ky=8 : cd(15,cn)+ : if cd(15,cn)>=200 : cd(15,cn)=0
	   if ky=16 : cd(15,cn)-=25 : if cd(15,cn)<=0 : cd(15,cn)=200
	   if ky=32 : cd(15,cn)+=25 : if cd(15,cn)>=200 : cd(15,cn)=0
	  swbreak



	  case 7 ; save
	   if ky=4 or ky=8 : slf=1
	   if slf=1 {
			if ky=16 : save : slf=0
			if ky=32 or ky=64 : slf=0
	   }
	  swbreak

	  case 8 ; load
	   if ky=4 or ky=8 : slf=1
	   if slf=1 {
			if ky=16 : load : slf=0
			if ky=32 or ky=64 : slf=0
	   }
	  swbreak
	 swend


	 if ginfo_act=sw { ; 操作ウインドウ

	  gsel sw

	  x=mousex : y=mousey
	   bwin2=x/80+y/130*10+scly2*10+1 : if bwin2=cb : bwin2=cb-1

	  b=mousew
	   if b>0 and scly2>1		: scly2-	; ホイール上
	   if b<0 and scly2<sclb2	: scly2+	; ホイール下

	  if 80*10+50<x { ; 画面右端のスクロールエリア
	   scly2=int(double(100-bmpsb+1)/double(coy*bmpsb)*double(y))+1
	  }

	  switch swf
	   case 0
	    if sk=256 { ; キャラ選択
	     x2=(x-50)/cox : if x2>10 : x2=10
		 y2=y/coy
		  cpn=cp(x2,y2)
		 if cpn>0 : cn=cpn
	    }

	    if sk=512 { ; 右クリックで動かすキャラを選択
	     x2=(x-50)/cox : if x2>10 : x2=10
	      y2=y/coy
	     cpn=cp(x2,y2)
	     if cpn>0 : cn=cpn : swfcn=cn
	     swf=1 : kc=3
	    }
	   swbreak
	   case 1
	    if sk=256 { ; クリックした場所にステータスを移動
		 n=scly2+y/coy
		 if mainf=1 : cd(5,cn)=n ; HP
		 if mainf=2 : cd(1,cn)=n ; 筋力
		 if mainf=3 : cd(2,cn)=n ; 魔力
		 if mainf=4 : cd(3,cn)=n ; 知力
		 if mainf=5 : cd(4,cn)=n ; 魅力
		 if mainf=6 : cd(15,cn)=n ; Lv
	    swf=0 : kc=3 : swbreak
	    }
	    if sk=512 : swf=0 : kc=3 ; 選択をクリア
	   swbreak
	  swend

	 }


	 if ginfo_act=cw { ; キャラウインドウ

	  gsel cw

	  x=mousex : y=mousey
	   bwin=x/80+y/130*10+scly*10+1 : if bwin=cb : bwin=cb-1

	  b=mousew
	   if b>0 and scly>0		: scly-	; ホイール上
	   if b<0 and scly<sclb	: scly+	; ホイール下

	  repeat 1
	   if bmpwf=0 {
		if sk=256 : cn=bwin : break

		if mainf=1 : scly2=cd(5,cn)-4 ; HP
		if mainf=2 : scly2=cd(1,cn)-4 ; 筋力
		if mainf=3 : scly2=cd(2,cn)-4 ; 魔力
		if mainf=4 : scly2=cd(3,cn)-4 ; 知力
		if mainf=5 : scly2=cd(4,cn)-4 ; 魅力
		if mainf=6 : scly2=cd(15,cn)-4 ; Lv

		if scly2<1 : scly2=1
		if scly2>100-bmpsb : scly2=100-bmpsb
	   }
	  loop
	 }


	 gosub *put
	 gosub *sw_put ; 操作ウインドウ
	 gosub *cw_put ; キャラウインドウ

	 await 100
	loop


*syori

	if ky=4 : cd(dn,cn)- : if cd(dn,cn)<0 : cd(dn,cn)=999
	if ky=8 : cd(dn,cn)+ : if cd(dn,cn)>=999 : cd(dn,cn)=0

	if ky=16 : cd(dn,cn)- : if cd(dn,cn)<0 : cd(dn,cn)=999
	if ky=32 : cd(dn,cn)+ : if cd(dn,cn)>=999 : cd(dn,cn)=0

	return


/////// CHARA DATA ///////

; キャラデータ

*chara_data

	cb=210	; キャラ種類
	cdb=20	; データ量

	dim cd,cdb,cb	; キャラデータ
;(0=フラグ、
; 1=筋力、2=魔力、3=知性、4=魅力、5=HP、6=、
; 7=属性、8=特殊能力、9=特殊能力値、
; 10=装備種類、
; 15=出現Lv、
; 16=手スロット、17=防具スロット、18=特殊スロット、19=ITEMスロット)


	sdim cs,30,cb
	 notesel cs	; 名前
	  repeat cb
	   n=cnt : s=str(n) : noteadd s
	  loop
	 sdim is ; input str


	tksb=73
	dim tks,20,tksb
tks(0)="無","攻勢","守備","行政","魔術","祭司","制作","宝の番人"
tks(10)="火傷","コールド","麻痺","スタン","ターンアンデッド","毒","テンプテーション"
tks(20)="バーサーク","ディフェンサー","速攻","盗む","スナイピング","剛弓","貫通"
tks(30)="アンデッド","ネクロマンサー","吸血","再生","絶叫","ナイトメア"
tks(40)="2回攻撃","3回攻撃","兜割り"
tks(50)="ファイアーブレス","コールドブレス","サンダーブレス","咆哮","ホーリーブレス","ポイズンブレス","津波"
tks(60)="火の息","ファイアーボール","ファイアーストーム","コールドストーム","ダークスファイア","ウインドストーム"
tks(70)="ヒール","ヒールオール","ヒールソング",""
tks(99)=""
	zks="無","火","水","風","地","光","闇"

	return


*unit_syoki

	ub=200	; ユニットの最大数
	udb=60	; 1ユニットのデータ量

;(0=フラグ、所持キャラ、

; 1=筋力、2=魔力、3=知性、4=魅力、5=最大HP、6=現HP、
; 7=属性(1=火、2=水、3=風、4=土、5=光、6=闇)、
; 8=特殊能力(
;	0=無、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=暗闇)
;	銃+、ゴールド流星矢、刀+、妖精装備
;
; 9=能力値、10=所属PL、11=攻撃力、12=防御力、13=所持PL、
; 14=装備箇所(1=手スロット、2=防具スロット、3=特殊スロット、4=ITEMスロット)
; 15=制作Lv
; 16=アイテム種類(0=未使用、1=右手、2=右両手、3=左手、4=左両手、
;				  5=盾、6=防具、7=アクセサリー、8=特殊、9=アイテム、
;				  10=魔法、回復魔法、状態魔法)
;
; 17=射程、18=攻撃範囲、
; 19=武器種類(0=無、1=剣、2=大剣、3=槍、4=斧、5=槌、6=杖、
;			  7=弓、8=ボウガン、9=銃、10=手裏剣)
; 
; 20=GRNo.、21=GRx、22=GRy、23=x、24=y

; 属性値(31=火、32=水、33=風、34=地、35=光、36=闇)
; 37=必要装備INT

	return

//////// kansu ////////////

#deffunc dg var dg_a,int dg_b ; デバッグ
	gsel dgw : color 255,255,255 : boxf 0,dg_b*17,200,dg_b*17+16 : color 1,1,1 : pos 0,dg_b*17 : mes dg_a : gsel mw
	return
#deffunc dgs str dg_s,var dg_a,int dg_b
	gsel dgw : color 255,255,255 : boxf 0,dg_b*17,200,dg_b*17+16 : color 1,1,1 : pos 0,dg_b*17 : mes dg_s+" "+dg_a : gsel mw
	return


#module
#deffunc pkey ; プッシュキー
	while
	 if try1=0 {
	 			 stick k : if k=16 : try1=1 : _break
	 			}
		  else {
		  		 stick k : if k=16 : try1=0 : _break
		  	    }
	 wait 10	  		
	wend
	return
#global






; ver.6 ; バグ直し、マウス右ボタンで1が入るのを修正、このバージョンから正式動作と見る

#module	; キーコンフィング用多用途入力関数

#deffunc joy_set ; ジョイスティックが接続されているかどうか?

	repeat jyn
	 joyGetPosEx jk,cnt
	 if stat=0 : kyf(cnt+kyn)=1 : btf(cnt+btn)=1 : else : kyf(cnt+kyn)=0 : btf(cnt+btn)=0
	loop

	return


#deffunc key_set int n,int n2,int n3 ; key(a,b) : a=テンンキー(0=数字モード、1=テンキーモード(NumLock どちらの入力でも上下左右になる、キーボード数字は使えない)) : b=トグル(0=切れない(押しっ放し)、1=切れる(一瞬)) : 何ボタンか : ジョイスティックいくつ検知か


	km=n															; 数字モード
	bn=n2															; 何ボタンか
	jyn=n3															; ジョイスティックいくつ検知か

	kyn=3 : kynb=kyn+jyn	: dim kyf,kynb : kyf=1,1,0				; 上下左右キー何種類か	: どれを使うか
	btn=7 : btnb=btn+jyn	: dim btf,btnb : btf=1,1,1,1,0,1,0,0	; ボタンキー何種類か	: どれを使うか

	joy_set

	dim ktgf,4														; トグルフラグ
	dim btgf,bn

	jks1=3,3,2,2													; パッド、上下左右
	jks2=0,65535,0,65535											

	jbs1=8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8					; 20ボタン
	jbs2=1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288 ; ボタン1,2,3,4,5,6,7,8=1,2,4,8,16,32,64,128

	dim ks,4,kyn
	dim bs,20,8;bn,btn ; 20ボタン、操作8種類

	 ks(0,0)=38,40,37,39										; カーソル上下左右
	 ks(0,1)=87,83,65,68										; wsad
	 ks(0,2)=104,98,100,102										; テンキーカーソル

	 repeat jyn : ks(0,cnt+kyn)=cnt	: loop						; ジョイ
;			   1   2   3   4   5   6   7   8  IT  SK  OP
	 bs(0,0)= 90, 88, 67, 86, 66, 78, 77,188, 73, 75, 79		; zxcvbnm,.
	 bs(0,1)= 49, 50, 51, 52, 53, 54, 55, 56, 57, 48,189		; キーボード1~0
	 bs(0,2)= 97, 98, 99,100,101,102,103,104, 96,110,105		; テンキー1234567890
	 bs(0,3)= 36, 33, 35, 34,111,106,109,107, 45, 46,  0		; テンキーカーソル	、1=1:決定、2=0:キャンセル
	; bs(0,4)=96,97,99,105,103,101,0,0							; テンキー数字		、1=1:決定、2=0:キャンセル
	 bs(0,5)=112,113,114,115,116,117,118,119;, 96,105,  0		; ファンクションキー1~12	9~(120,121,122,123,124)
	; bs(0,6)=32,13,17,0,0,0,0,0								; スペース、エンター、ctl
	; bs(0,7)=1,2,16,0,0,0,0,0									; マウス右、左、SHIFT

	 repeat jyn : bs(0,cnt+btn)=cnt	: loop						; ジョイ
	
	 btcon=0,1,2,3,4,5,6,7,8 ; ボタンコンフィング

	return


#defcfunc key int tgl ; key(a,b) : a=テンンキー(0=数字モード、1=テンキーモード(NumLock どちらの入力でも上下左右になる、キーボード数字は使えない)) : b=トグル(0=切れない(押しっ放し)、1=切れる(一瞬))

	if ginfo_act=-1 : return 0 ; アクティブウインドウチェック

	k=0

	if tgl=1 : if tglf=0 & tglf2=1 : tglf=1 : tglf2=0 : return k : else : tglf=0 ; トグルスイッチonの時、始めの一つを無視
	if tgl=0 : tglf2=1

	joy_set											; 毎回検査joystick

	n=1
	repeat 4 : cnt2=cnt : btf2=0					; 上下左右

	 repeat kynb									; 種類
	  if km=0 & cnt=2 : continue					; 数字モード

	  if cnt<kyn {									; キーボード入力
					if kyf(cnt)=0 : continue		; 使ってなければ次へ
					getkey kg,1 : if kg=1 : continue
					getkey kg,ks(cnt2,cnt)
					if kg=1 : btf2=1 : break
					continue
				  }

	  if kyf(cnt)=0 : continue
	   joyGetPosEx jk,cnt-kyn						; パッド入力
	    if jks2(cnt2)=0		: if jk.jks1(cnt2)<28768 : btf2=1 : break
	    if jks2(cnt2)=65535	: if jk.jks1(cnt2)>36768 : btf2=1 : break
	 loop

	 repeat											; トグルスイッチ
	  if btf2=0 : ktgf(cnt2)=0: break
	  if tgl=1 & ktgf(cnt2)=1 : break
	  k=k or n : ktgf(cnt2)=1 : break
	 loop

	 n=n*2
	loop


	repeat bn : cnt2=cnt : btf2=0					; ボタン
	 repeat btnb									; 種類

	  if km=1 & cnt=2 : continue					; 数字モード

	  if cnt<btn {									; キーボード入力
					if btf(cnt)=0 : continue		; 使ってなければ次へ
					getkey kg,bs(cnt2,cnt)
					if kg=1 : btf2=1 : break
					continue
				  }

	  if btf(cnt)=0 : continue
	   joyGetPosEx jk,cnt-btn						; パッド入力
	   if jk.jbs1(cnt2) and jbs2(cnt2) : btf2=1 : break
	 loop

	 repeat											; トグルスイッチ
	  if btf2=0 : btgf(cnt2)=0: break
	  if tgl=1 & btgf(cnt2)=1 : break
	  k=k or n : btgf(cnt2)=1 : break
	 loop

	 n=n*2
	loop

	return k

#global



;----------- bmpフォント表示 --------------------------------
#module

#deffunc bfp str s,int x,int y,int t ; 英数字スモール、文字列
; s=文字列、x=x座標、y=y座標、t=文字色

	mw=0 : gsel mw
	bfp_cn=5 ; #module内なので定義し直す

	ss=s			; たしか一度受け渡さないとエラーが
	sg=strlen(s)	; 文字長さ、個数
	t2=t*26			; 文字色

	gmode 2

	repeat sg			; 文字の数だけ繰り返し
	 n=peek(ss,cnt)		; 1文字読み出し、n=アスキーコード
	 if n=32 : continue ; " " スペース

	  pos x+cnt*11,y

	   if n>=65 and n<=90	: n2=n-65 : celput bfp_cn,n2+t2 : continue	; 小文字も大文字で表示
	   if n>=97 and n<=122	: n2=n-97 : celput bfp_cn,n2+t2 : continue	; アルファベット
	   if n>=48 and n<=57	: n2=n-48	; 数字
	   if n=43 : n2=10	; +
	   if n=45 : n2=11	; -
	   if n=42 : n2=12	; *
	   if n=47 : n2=13	; /
	   if n=61 : n2=14	; =
	   if n=37 : n2=15	; %
	   if n=46 : n2=16	; .
	   if n=44 : n2=17	; ,
	   if n=58 : n2=18	; :
	   if n=59 : n2=19	; ;
	   if n=40 : n2=20	; (
	   if n=41 : n2=21	; )
	   if n=33 : n2=22	; !
	   if n=63 : n2=23	; ?
	   if n=126 : n2=24	; ~

	   celput bfp_cn,182+n2+t2	; 表示
	loop

	return
#global



#deffunc xx_pls int xx_plsn

	ns=str(xx_plsn)	; 文字に変換
	nb=strlen(ns)	; 個数確認

	xx=xx+nb*11+4
	
	return


#deffunc save

	bsave "c_data.dat",cd

	return

#deffunc load

	bload "c_data.dat",cd

	gsel cbw : pos 0,0 : picload "chara.bmp"

	noteload "c_name.txt"

	return


///// put //////////

#deffunc bmpw_put ; グラエリアに描く

	gsel bmpw

	x=((cn-1)\10)*80 : y=((cn-1)/10)*130
	pos x,y : gcopy mw,px,py,80,130

	return


*put_syoki

	cms="No.","名前","属性","HP","筋力 STR","魔力 MAG","知力 INT","魅力 CRI","手スロット","防具スロット","特殊スロット","ITEMスロット","装備タイプ","特殊能力","能力値","出現Lv","グラフィック","位置x","位置y","枠フレーム","背景","SAVE","LOAD"
; 1=HP、2=、3=筋力、4=魔力、5=知性、6=魅力、
; 7=属性、8=特殊能力、9=特殊能力値、10=出現Lv、
; 11=手スロット、12=防具スロット、13=特殊スロット、14=ITEMスロット、)
; 15=GRNo、16=GRx、17=GRy、18=枠、19=背景、

	mx1=30 : mx2=120 : mx3=210
	my1=10	; No.名前
	my2=45	; 属性
	my3=75	; HP
	my4=110	; 基本ステータス
	my5=210	; 装備スロット
	my6=360	; 特殊能力
	my7=390 ; 能力値
	my8=420	; 出現Lv
	my9=465	; グラ、その他
	my10=580 ; save、load

	dim cslx,30
	dim csly,30

	repeat 10
	 ;if cnt=1 : cslx(cnt)=mx2-19 : continue
	 ;if 16<=cnt and cnt<=22 : cslx(cnt)=mx3-19 : continue
	 cslx(cnt)=mx1-19
	loop

	csly(0)=my1 ; キャラNo.
	csly(1)=my3 ; HP
	;csly(2)=my2 : csly(3)=my3
	repeat 4 : csly(2+cnt)=my4+20*cnt : loop	; 基本ステータス
	;repeat 4 : csly(8+cnt)=my5+20*cnt : loop	; 装備スロット
	;csly(12)=my5+100							; 装備種類

	;csly(13)=my6 : csly(14)=my7					; 特殊能力
	csly(6)=my8								; 出現Lv
	;repeat 5 : csly(16+cnt)=my9+20*cnt : loop	; グラ、その他
	repeat 2 : csly(7+cnt)=my10+20*cnt : loop	; save、load

	css="未使用","右手","右両手","左手","左両手","盾","防具","特殊","アイテム","魔法","スロット拡張"
	ces="","手スロット","防具スロット","特殊スロット","ITEMスロット" ; 装備箇所

	sbs="無","筋力素アタック","盾+片手","2刀流","両手持ち","棍棒","投擲","槍","弓","魔力素アタック","魔術師","魔女","僧侶","複数手"
sbsb=13

	scly=0 ; スクロールy
	sclb=cb/10-bmpsb ; スクロール上限

	scly2=1 ; スクロールy
	sclb2=100-bmpsb ; スクロール上限

	return


*put

	gsel mw
	 color 0,0,0 : boxf : color 240,240,240

	font "",20 : color 0,255,0
	 pos mx1,my1 : mes ""+cms(0)+" "+cn
	 pos mx2,my1 : noteget s,cn : mes s

	 pos mx1,my2 : mes cms(2) : pos mx1+120,my2 : mes zks(cd(7,cn)) ; 属性
	 pos mx1,my3 : mes cms(3) : pos mx1+120,my3 : mes cd(5,cn) ; HP

	 repeat 4 ; 基本ステータス
	  pos mx1,my4+cnt*20 : mes cms(4+cnt)
	  pos mx1+120,my4+cnt*20 : mes cd(1+cnt,cn)
	 loop

	 repeat 4 ; 装備スロット
	  pos mx1,my5+cnt*20 : mes cms(8+cnt)
	  pos mx1+120,my5+cnt*20 : mes cd(16+cnt,cn)
	 loop

	 pos mx1,my5+100 : mes cms(12) : pos mx1+120,my5+100 : mes sbs(cd(10,cn)); 装備種類

	 pos mx1,my6 : mes cms(13) : pos mx1+120,my6 : mes tks(cd(8,cn)); 特殊能力
	 pos mx1,my7 : mes cms(14) : pos mx1+120,my7 : mes cd(9,cn)		; 能力値
	 pos mx1,my8 : mes cms(15) : pos mx1+120,my8 : mes cd(15,cn)	; 出現Lv

	 repeat 2
	  pos mx1,my10+cnt*20 : mes cms(21+cnt)
	 loop

	 pos cslx(mainf),csly(mainf) : mes "*"

	gsel mw : gmode 2 ; キャラ表示
	 pos px,py : gcopy cbw,((cn-1)\10)*80,((cn-1)/10)*130,80,130
	  if swf=1 : pos px,py : gcopy swakuw,0,0,cox,coy

	 if slf=1 { ; save、load
	  color 255,255,255
	   if mainf=7 : pos 20,620 : mes "SAVEしますか? 1=ハイ 2=イイエ"
	   if mainf=8 : pos 20,620 : mes "LOADしますか? 1=ハイ 2=イイエ"
	 }


	 redraw 1 : redraw 0



	return



*sw_put

	gsel sw : gmode 2

	repeat bmpsb : cnt2=cnt
	 repeat 10
	  cp(cnt,cnt2)=0 ; カーソルポイントクリア
	 loop
	loop

	color 1,1,1 : boxf
	repeat bmpsb : cnt2=cnt
	 n=scly2+cnt : x=50 : y=coy*cnt : xn=0
	 repeat cb-1,1

	 if mainf=0 : continue
	  if mainf=1 : if cd(5,cnt)!n : continue ; HP
	  if mainf=2 : if cd(1,cnt)!n : continue ; 筋力
	  if mainf=3 : if cd(2,cnt)!n : continue ; 魔力
	  if mainf=4 : if cd(3,cnt)!n : continue ; 知力
	  if mainf=5 : if cd(4,cnt)!n : continue ; 魅力
	  if mainf=6 : if cd(15,cnt)!n : continue ; Lv
	 if mainf=7 : continue
	 if mainf=8 : continue

	  pos x,y : gcopy cbw,((cnt-1)\10)*80,((cnt-1)/10)*130,80,130
	  if swf=1 : if swfcn=cnt : pos x,y : gcopy swakuw,0,0,cox,coy
	  x+=cox
	  cp(xn,cnt2)=cnt
	  xn+
	 loop
	loop


	color 240,240,240
	 line 49,0,49,130*8 ; 縦線
	 line 80*10+50,0,80*10+50,130*8

	font "",20,1
	repeat bmpsb ; 左の値表示
	 pos 8,50+coy*cnt : mes ""+(cnt+scly2)
	loop

	 redraw 1 : redraw 0

	return


*cw_put

	gsel cw : gmode 0
	 pos 0,0 : gcopy cbw,0,scly*130,80*10,bmpsb*130

	 redraw 1 : redraw 0


	return


	return


////// syoki ///////

*syoki

	key_set 0,8,3

	mw=0		; メイン
	cw=1		; キャラウインドウ
	cbw=2		; キャラグラバッファ
	sw=3		; 操作ウインドウ

	bfpw=6		; bmpフォント
	wakuw=8		; 枠

	swakuw=14	; 選択枠
	cslw=15		; カーソル



	gx=0 : gy=0
	cox=80 : coy=130 ; カード大きさ

	bmpsb=8 ; 縦の表示数

	cpb=10*bmpsb
	dim cp,20,cpb ; カーソルポジション(cn値)

	screen mw,320,650,,500,400 : gix=ginfo(6) : giy=ginfo(5)

	screen cw,cox*10,coy*bmpsb,,gix+24,10 ; キャラグラフィック
	 color 0,0,0 : boxf
	buffer cbw ; キャラグラバッファ

	screen sw,cox*10+100,coy*bmpsb,,gix+4,30 ; 操作ウインドウ
	 color 0,0,0 : boxf

	buffer bfpw : picload "bmp_font.png" ; bmpフォント

	buffer wakuw  : picload "waku_01g.bmp"

	buffer swakuw : picload "waku_02.bmp"

	buffer cslw : picload "csl.bmp"	; カーソル


	gosub *chara_data

	gosub *put_syoki

	px=210 : py=130		; カード表示位置
	cn=1				; キャラNo.

	return

 5つの.hspファイルをひとつにまとめているが、これで全部だ。
 
 
 メイン画面

 この画面で選択している要素が一覧表示画面に表示される。

 今は筋力になってるから、筋力値の並び順になってる。

 左の白線の左の数字が値。

 右の白線の右側にカーソルを当てると、100までの割り当てでその場所に飛んで表示してくれる。

 右クリックで選択し(枠が赤くなる)

 任意の場所で左クリックすれば、その欄の能力値に書き変わる。

 メイン画面での上げ下げもできて、一覧に反映される


 
 
 評価するのは HP、筋力、魔力、知力、魅力、それから出現 Lvだ。
 
 
 なお、絶対的な能力の評価目安は次の通り

0~10 ザコ
10~20 一般的な人間の能力
20~30 達人の領域
30~40 怪物や妖魔
40~50 S級の怪物や妖魔
50~60 魔神級
60~70 幻獣クラス(バハムートとか?)
70~80 ドラゴン級
80~90 神クラス
90~100 伝説

 まあ適当に考えた目安であって、ゲームバランス的にも能力値は低めに設定する予定なので、後半のはあてにならない。

 高 Lvのキャラについてはテストしながらバランスをとらないと何とも言えない。
 
 

コメントを残す

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