戦闘シーン

ツ▲ールには負けられない!ってな事と、要望が多いRPGを作る為に必要そうな『簡易ツ▲ールマクロ』を作るコーナー。
『RPGはすべてがオブジェクト指向!』(言ってみたいだけ。)
(理解が必要ですが)ひとりタイプの戦闘ならほぼ完成しています。

戦闘とその他RPG化に必要なマクロ ご挨拶と概要

このページはきまぐれに追記しています。ごめんなさい。
今はPTではなく一人なので配列化してきます。
ひとり戦闘でよければ、既に書いてあります。
『ティラノスクリプト 戦闘』で検索をかければ、偉大な先人さま達が作成されています。
のでそちらをご覧いただくともっといいかも。(その場合、基本は、配列のテキスト表示とメッセージレイヤーの操作です。)
  1. キャラクターの初期設定マクロ
  2. システム初期設定マクロ:[macro name=patyArray]パーティ化の"準備"設定
  3. 初期メンバー設定マクロ
  4. メンバーの確認マクロ:[macro name=Member確認]
>>案がある場合は追記&指摘のほどお願いします♪ほぼ配列とマクロの応用問題…

戦闘の前に定義しておきたいマクロ。初期設定マクロをつくる

f.プレイヤーの配列などの設定。 CSVをつかう場合は参考程度でOK

キャラクター初期設定マクロ1:[macro name=初期設定]

[macro name=初期設定]
キャラクターの初期設定をする。
PTは最大6人の予定 通常:f.chara1~f.chara5が登場キャラ枠で、f.プレイヤーがプレイヤーの分身枠
(とりあえずこのままマクロ呼び出すイメージ。たとえ主人公以外のキャラが一人しかでなくとも)
引数で配列のインデックス番号を変えたりパラメータを代入する方法ないのかなあ
[macro name=初期設定]
[eval exp="f.プレイヤー=['主人公名',1,100,100,20,20]"]
[eval exp="f.chara1=['キャラ名1',1,100,100,20,20]"]
[eval exp="f.chara2=['キャラ名2',1,100,100,20,20]"]
[eval exp="f.chara3=['キャラ名3',1,100,100,20,20]"]
[eval exp="f.chara4=['キャラ名4',1,100,100,20,20]"]
[eval exp="f.chara5=['キャラ名5',1,100,100,20,20]"]
[endmacro]
数値は何でもいい。名前,lv,hp,maxhp,mp,maxMpの順番 
(あとはbadstとかあるけどやらないString値)
デバッグ表示[r]
@emb exp="f.プレイヤー"
[r]
@emb exp="f.chara1"
[r]
@emb exp="f.chara2"
[r]
@emb exp="f.chara3"
[r]
@emb exp="f.chara4"
[r]
@emb exp="f.chara5"
[r]
@emb exp="f.chara6"
表示完了[r]


素敵な予備知識
配列をptextとかに表示>>配列
配列の中に変数を代入できるとパラメーター表示画面と協力できそう!
@eval exp="f.shujinkou_name=f.プレイヤー[0]" 代入
@eval exp="f.para_shujinkou_HP_now=f.プレイヤー[2]"

システム初期設定マクロ:[macro name=patyArray]パーティ化の"準備"設定をする

[macro name=patyArray]
これも初期設定同様、とりあえずマクロを呼び出すイメージで。

f.patyの【0】~【6】番地は配列だと宣言する。
[macro name=patyArray]
[if exp="f.p_aray=='true'"]
[iscript]
console.log("配列化は済んでいます");
[endscript]
[else]
@eval exp="f.paty=[] "
@eval exp="f.paty[0] = []"
@eval exp="f.paty[1] = []"
@eval exp="f.paty[2] = []"
@eval exp="f.paty[3] = []"
@eval exp="f.paty[4] = []"
@eval exp="f.paty[5] = []"
@eval exp="f.paty[6] = []" //予備配列※一時脱退用

@eval exp="f.p_aray='true'"//二度防止
[endif]
[endmacro]
下の項目と一緒にするか悩みましたが、別の方がいいかな~と。
if(mp.p_aray)で二度防止分岐加えてますがお好みで。

初期メンバー設定マクロ:[macro name=初期patyMenver]パーティメンバーの設定をする

初期隊列をセットしておく。
Qはじめに二人しかいなんだけど・・・A:[patyMemver メンバー数=6]の数を調整してください。
これは初期メンバー設定マクロです。
隊列が初期化されていい場合は何度も利用してください。※だめ絶対
(このマクロは決められた配列indexにセットされるだけです。※つまり上書きの恐れがある。)
デフォルトでf.プレイヤーはf.paty[0]に入ります。

[macro name=初期patyMenver]

[macro name=初期patyMemver]
@eval exp="f.paty[0] =f.プレイヤー"
[if exp="mp.メンバー数==2"]
@eval exp="f.paty[1] =f.chara1"
[endif]
[if exp="mp.メンバー数==3"]
@eval exp="f.paty[1] =f.chara1"
@eval exp="f.paty[2] =f.chara2"
[endif]
[if exp="mp.メンバー数==4"]
@eval exp="f.paty[1] =f.chara1"
@eval exp="f.paty[2] =f.chara2"
@eval exp="f.paty[3] =f.chara3"
[endif]
[if exp="mp.メンバー数==5"]
@eval exp="f.paty[1] =f.chara1"
@eval exp="f.paty[2] =f.chara2"
@eval exp="f.paty[3] =f.chara3"
@eval exp="f.paty[4] =f.chara4"
[endif]
[if exp="mp.メンバー数==6"]
@eval exp="f.paty[1] =f.chara1"
@eval exp="f.paty[2] =f.chara2"
@eval exp="f.paty[3] =f.chara3"
@eval exp="f.paty[4] =f.chara4"
@eval exp="f.paty[5] =f.chara5"
[endif]
;セット完了3[r]
;本構文ではデバッグ表示まで含めてあります。お好みで。
[endmacro]

[初期patyMemver メンバー数=6]


デバッグ表示[r]
@emb exp="f.paty[0][0]"
[r]
;主人公名と表示される
@emb exp="f.paty[0]"
[r]
@emb exp="f.paty[1]"
[r]
@emb exp="f.paty[2]"
[r]
@emb exp="f.paty[3]"
[r]
@emb exp="f.paty[4]"
[r]
@emb exp="f.paty[5]"
表示完了[r]





メンバーの確認マクロ:[macro name=Member確認]

f.pt0-7の配列が空かどうか確認する。length;にすると無い場合の答えがもらえないので規定値のi<=7;にしてある。
配列ptYesにtrue,falseが入る。デバッグ表示例: true,true,true,true,true,true,false
ついでに配列数も取得numver
Memvernumは現在のパーティ人数を取得する。デバッグ表示例:6人

[macro name=Memver確認]
[iscript]
i=0;
var number=f.paty.length[]
var ptYes=[];
for(var i; i<=7; i++){
if(f.paty[i]==undefined){
ptYes[i]=false;
}
else{
ptYes[i]=true;
var Memvernum=i; 
}
}
$(".current_span").text(ptYes);
//$(".current_span").text(Memvernum+"人");
[endscript]
;デバッグ表示はメッセージレイヤーに表示されます。
[endmacro]
完了[r]
[Memver確認]
ptyes.JPG

隊列の変更:指定したパーティ配列indexに指定したパーティ配列indexと入れ替えする

更に配列が空かどうかlength確認が必要→[macro name=Member確認]と併用?
上書きしないようにしなければならない。
【tjs】insert(<位置>, <値>)insert メソッドは、指定された値を指定された位置に挿入します。
【js】配列名.splice(1, 1, "XXX");
index=1;
partyMember.splice(index-1, 2, partyMember[index], partyMember[index-1]);
012
345 の隊列移動前ボタンを押す→例0ボタン→exp="mp.移動元パーティ枠=0"

012
345 の隊列移動後ボタンを押す→例4ボタンexp=mp.移動後パーティ枠=4

マクロ側ではexpでの判断のみを行う。UIの表示方法はボタンか選択肢を各自が自由に用意する

      • -------------------------------------

[隊列 移動元パーティ枠=0 移動後パーティ枠=1] 



jsをつかう エラーはでないがデバッグにも反応変化なし構文ミスかな

http://otomegtx.web.fc2.com/Rabo_js/majime_js/Hikisu.html の多次元配列の項目をもとに。

動きません




もっと単純にやろう

単純ゆえに長い。未知数なところがある。

[macro name=隊列]
@eval exp="mp.copy_paty=[]"
;危険な香りがしそうだけど一時コピー置き場をつくる。
[if exp="mp.移動元パーティ枠==0"]
  [if exp="mp.移動後パーティ枠==0"]
  @eval exp="f.paty[0] =f.paty[0]"
  [endif]
       [if exp="mp.移動後パーティ枠==1"]
                  ;0番目から1番目に移動。
                  @eval exp="mp.copy_paty[1]=f.paty[1]"
                  ;一時避難
         @eval exp="f.paty[1] =f.paty[0]"
         @eval exp="f.paty[0] =mp.copy_paty[1]"
                  ;1番目は0番目に移動。
         
       [endif]
    [if exp="mp.移動後パーティ枠==2"]
                  ;0番目から2番目に移動。
                  @eval exp="mp.copy_paty[2]=f.paty[2]"
                  ;一時避難
         @eval exp="f.paty[2] =f.paty[0]"
         @eval exp="f.paty[0] =mp.copy_paty[2]"
                  ;2番目は0番目に移動。
       [endif]
       [if exp="mp.移動後パーティ枠==3"]
                  ;0番目から3番目に移動。
                  @eval exp="mp.copy_paty[3]=f.paty[3]"
                  ;一時避難
         @eval exp="f.paty[3] =f.paty[0]"
         @eval exp="f.paty[0] =mp.copy_paty[3]"
                  ;3番目は0番目に移動。
         
       [endif]
    [if exp="mp.移動後パーティ枠==4"]
                  ;0番目から4番目に移動。
                  @eval exp="mp.copy_paty[4]=f.paty[4]"
                  ;一時避難
         @eval exp="f.paty[4] =f.paty[0]"
         @eval exp="f.paty[0] =mp.copy_paty[4]"
                  ;4番目は0番目に移動。
       [endif]
        [if exp="mp.移動後パーティ枠==5"]
                  ;0番目から4番目に移動。
                  @eval exp="mp.copy_paty[5]=f.paty[5]"
                  ;一時避難
         @eval exp="f.paty[5] =f.paty[0]"
         @eval exp="f.paty[0] =mp.copy_paty[5]"
                  ;4番目は0番目に移動。
       [endif]

・
・
・
・


[endif]


;セット完了3[r]
;デバッグ表示4
;@emb exp="f.paty[0]"
;[r]
;@emb exp="f.paty[1]"
;[p]
表示完了4[r]
[endmacro]



[隊列 移動元パーティ枠=0 移動後パーティ枠=1]
ティラノスクリプトは、|は使わないみたい・・・

kiken.JPG
ptextはもう一回作らないと変化しないみたいね。
ちょっとどうなるか想像つきにくい。


[macro name=NewMenver] メンバー新規加入。

空のパーティ枠(index)に指定キャラを代入する。

[NewMenver パーティ枠=1 | キャラ=1]




[macro name=ByeMenver] メンバー脱退。

指定した配列index(f.paty[x])からパーティメンバーををはずず.(予備枠に移動。)


[macro name=getiten]

[アイテム名]をプレイヤーの持物に追加する。[フラグ名]を指定した場合、[フラグ名]をTrueにする



[macro name=アイテム減少]

[アイテム名]をプレイヤーの持ち物から削除する。
個数が0の場合、アイテムごとのフラグ変数をfalseにする

未確認未完成

[macro name=アイテム減少]
[eval exp="mp.アイテム名-=mp.個数"]
[endmacro]

希望使用例[アイテム減少 アイテム名=f.薬草 個数=1]


function calc(a,b){
  n=a-b;
   return n;
}
i=calc(100, 200);//i=calc(f.yakusou,1);
っていうのをやりたいのね。

[macro name=お金増加]

所持金(f.お金)を指定値で増加させる。
増加された場合の文面をつけてもいい。[cm]@emb exp="mp.お金"を得ました。[p]
[macro name=お金増加]
[eval exp="f.お金+=mp.money"]
[endmacro]

使用例[お金増加 money=20]

[macro name=お金増加]
[eval exp="f.お金=f.お金+&f.hensu"]
[endmacro]

[お金増加 hensu=&f.hensu]


[macro name=お金減少]

所持金(f.お金)を指定値で減少させる。
0の場合は借金ってわけにはいかないので分岐をつけましたが、自由度がないかも。
マイナスされた場合の文面をつけてもいい。[cm]@emb exp="mp.お金"を使いました[p]

[macro name=お金減少]
[if exp="f.お金<mp.money"]
[cm]お金が足りません。[p]
[else]
[eval exp="f.お金-=mp.money"]
[cm]
[endif]
[endmacro]
使用例
[お金減少 money=20]

[macro name=has]

[アイテム名]を所持している場合、次の行を実行。持っていない場合、endhasまで処理をスキップする(いるかなぁ)

[macro name=nothas]

[アイテム名]を所持していない場合、次の行を実行。持っている場合、endhasまで処理をスキップする


[macro name=upLifeOne]

指定したキャラクターの体力を[HP]増加させる


[macro name=downLifeOne]

指定したキャラクターの体力を[HP]減少させる。
0以下になった場合は0を代入?



[macro name=upLifeAll]

全キャラクターの体力を[HP] 指定数増加させる


[macro name=downLifeAll]

全キャラクターの体力を[HP]指定数減少させる

PT配列のそぞれのlength値「空有」を確認し、分岐。1割 3割 5割のバージョンをつくる。

[macro name=downLifeAll]
[eval exp="f.paty[0][2]-=mp.damage"]
[endmacro]

[攻撃 damage=20]
;1割

;3割

隊列の設定で戦闘の順番を(ユーザーに)きめてもらう選択肢をおく 

無理だ~~と思っていたのがLESSON1のころLESSON2も無理だ~~けど上から作れば問題なさそう
tairetu1.JPG完成イメージ用
ゲームのボキャブラリーがないのでシンプルなアレ
最大6人の予定。(配列的には1枠が秘密裏にある)
名前の部分か横のシンボルマークをクリックしたら表示の位置を変更させる。
↑変化する配列の中身をボタンのテキストに表示できればいいのですが。

隊列の設定画面への表示

"[macro name=隊列表示]"
paty_back.jpg練習用背景
paty_messege.png練習用メッセージボックス
画像についてのCC

f.patyのつかって表示する!デバッグ用のメッセージは気にせず。
frameについてのデバックはジャンプ後のみの再表示では反映されないのでツールバーの表示などで再スタートで。 配列が空の場合はtextを表示する。
作成中。マクロが終わったら。
pt3.JPG
[macro name=隊列表示]
[cm]
@bg storage ="paty.jpg"
[position layer="message0" height="70" width="600" top="19"]
;↑上の説明用メッセージ
[cm]
[position layer="message1" frame="paty.png" width=600 height=240 top=243 left=20 margint="1" marginl="1" marginr="1" marginb="1"]
↑メッセージボックスに変更しました。合わせて下記をのせるイメージで。
@layopt layer=message1 visible=true
[ptext name="chara_name_area" layer=message1 width="200" color=snow x=220 y=270 size=16 text=&f.paty[0][0]]
[ptext name="chara_name_area" layer=message1 width="200" color=snow x=220 y=296 size=16 text=&f.paty[1][0]]
[ptext name="chara_name_area" layer=message1 width="200" color=snow x=220 y=322 size=16 text=&f.paty[2][0]]

[endmacro]






戦闘コマンド ひとりタイプ

* 戦闘コマンド

; 背景表示
[bg storage="haikei.jpg" time=100 waite=false]


[position layer=message0 top=320" height=120 width=370] http://tyrano.jp/home/tag
[position layer=message1 top=320 left=400 height=110 width=212]
[position layer=message2 height=110 width=212]
[position layer=message3 height=110 width=212 left=390]
[layopt layer=message1 visible=true]
[layopt layer=message2 visible=true]
[layopt layer=message3 visible=true]



; 戦闘開始
[current layer=message0]

[emb exp="f.敵"]があらわれた!

[jump target=*戦闘コマンド]
[s]

* 戦闘コマンド

[current layer=message2]
[er]
[emb exp=f.敵] HP:[emb exp=f.敵HP][r]

[current layer=message3]
[er]
[emb exp=f.プレイヤー] HP:[emb exp=f.プレイヤーHP]

[current layer=message1]
[er]
[link target=*たたかう]たたかう[endlink][r]
[link target=*アイテム]アイテム[endlink][r]
[link target=*にげる]にげる[endlink]



[s]

たたかう (labelたたかう) ひとりタイプ

[current layer=message0]
[er]
[eval exp="tf.乱数=Math.floor(Math.random() * 50 + 30),f.ダメージ=tf.乱数"]

[emb exp=f.プレイヤー]のこうげき![r]
[emb exp=f.敵]に[emb exp=f.ダメージ]のダメージ![l]
[er]

[eval exp="tf.乱数=Math.floor(Math.random() * 50 + 10),f.被ダメージ=tf.乱数"]
[emb exp=f.敵]のこうげき![r]
[emb exp=f.プレイヤー]に[emb exp=f.被ダメージ]のダメージ![r]

[eval exp="f.敵HP= f.敵HP-f.ダメージ"]
[eval exp="f.プレイヤーHP= f.プレイヤーHP-f.被ダメージ"]
[if exp="f.敵HP<=0"]
[jump target=*戦闘終了]
[endif]
[jump target=*戦闘コマンド]
[s]


にげる ラベル にげる ひとりタイプ

[current layer=message0]
[p]
[eval exp="tf.乱数=Math.floor(Math.random() * 3 + 1)"]
[if exp="tf.乱数==1"]
にげられない![l]
[jump target=*戦闘コマンド]
[endif]

にげきれた![l]
[jump target=*終了]
[s]



アイテム 基本タイプ

[current layer=message0]
[er]
[if exp=f.アイテム個数[0]>0]
  [link target=*やくそう使用]やくそう(HP100回復)
 [emb exp=f.アイテム個数[0]]個所持
[endlink][r]
[endif]
[if exp=f.アイテム個数[1]>0]
  [link target=*すごいやくそう使用]すごいやくそう(HP150回復)
[emb exp=f.アイテム個数[1]]個所持[endlink]
[endif]
[s]

やくそう使用 基本タイプ

[p]
やくそうを使った![r]
HPが100回復した!
[eval exp="f.プレイヤーHP= f.プレイヤーHP+100,f.アイテム個数[0]=f.アイテム個数[0]-1"]
[jump target=*戦闘コマンド][s]

MP回復使用 基本タイプ

[p]
MP回復を使った![r]
MPが150回復した!
[eval exp="f.プレイヤーMP= f.プレイヤーMP+100,f.アイテム個数[0]=f.アイテム個数[1]-1"]
[jump target=*戦闘コマンド][s]

戦闘終了

[current layer=message2]
[p]
[emb exp=f.敵] HP:0

[current layer=message0]
[l]
[freeimage layer=1]
[p]

勝ったッ![r]
経験値とゴールドを手に入れた![l]
[p]

改ページにしてあるけど自動改ページマクロにした方がいい。

  • 最終更新:2016-04-06 12:14:32

このWIKIを編集するにはパスワード入力が必要です

認証パスワード