2018年 12月 5日
ゲームバランス改善の一環として、キャラの能力を抜本的に改定することにした。
キャラの能力も、とりあえずで適当に作ったものだったが、Lvに比例して各能力が平均的に上がるので、どうしても Lvがあればそれだけで強いという事になっていたし、各キャラに特徴も無かった。
そこでキャラの能力を平均的にでは無く、絶対値的に作る事にした。
どういう事かと言うと、例えば高 Lvの魔術師の魔力や知力は 20台や 30台で高いが、腕力は人間の平均的な値と定める 10台で、Lvの低いファイターより腕力は低いとかそんな感じの絶対的な味付けをする事にした訳だ。
逆にミノタウロスみたいな腕力だけで頭の悪そうなキャラは、知力を低めに設定してアイテムを沢山装備できない、魔法を使えない、イニシアティブで不利、つまり攻撃が遅いなどの特徴を持つ事になる。
そこで相対的なキャラの味付けをするために能力値に基づいて横並びに表示できるキャラ能力エディッターを作った。
これで○○のキャラは、この能力は○○のキャラより低いだろうとか、3ポイント程高いんじゃなかろうか、などとキャラを眺めながら相対的に評価、味付けができるという訳だ。
キャラクリエイター
ほんとはキャラエディッターと名乗るのが良い気がするが、それは始めに作ったキャラエディッターで使ってしまった、まあそんな話はどうでもいい。
このツールはキャラエディッターを改造して 2日程で作った。
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 |
/////// キャラクリエイター //////////////////////////// ;#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のキャラについてはテストしながらバランスをとらないと何とも言えない。