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