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のキャラについてはテストしながらバランスをとらないと何とも言えない。