戦闘シーン

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

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

このページはきまぐれに追記しています。ごめんなさい。
今はPTではなく一人なので配列化してきます。
ひとり戦闘でよければ、既に書いてあります。
『ティラノスクリプト 戦闘』で検索をかければ、偉大な先人さま達が作成されています。
のでそちらをご覧いただくともっといいかも。(その場合、基本は、配列のテキスト表示とメッセージレイヤーの操作です。)
>>案がある場合は追記&指摘のほどお願いします♪ほぼ配列とマクロの応用問題…

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

[macro name=初期設定]
キャラクターの初期設定をする。
PTは最大6人の予定 通常:f.chara1~f.chara5が登場キャラ枠で、f.prayerがプレイヤーの分身枠
[macro name=初期設定]
[eval exp="f.prayer=['主人公名',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]"

アイテム

初期値を全て入れておく
[eval exp="f.item= []"]
;名前、初期所持数、効能値を,で置いてまとめておく 基本的に主人公たちと同じ
[eval exp="f.item[0]=['薬草',1,100]"]
[eval exp="f.item[1]=['薬草2',0,100]"]

アイテムの個数を増加させる

;0名前、1所持個数、2効能…[eval exp="f.item[0]=['薬草',1,100]"]

;使用するファイル側
[ macro name=get_item]
[eval exp="tf.num = mp.num]
[eval exp="tf.item_name=mp.name"]
@call storage="get_item.ks"
;callではなくて別にここに書いてもいいです
[endmacro]

マクロ使用 数と名前
[get_item num=1 name="薬草"]


;サブルーチン get_item.ks
;アイテム名を探す 個数が限界値の場合スルーする
[if exp="tf.item_name == f.item[0][0] && f.item[0][1] <= 99"]
;アイテムの数を足す
[eval exp="f.item[0][1] += tf.num"]
;アイテム名を探す
[elsif exp="tf.item_name == f.item[0][1] && f.item[1][1] <= 99
;アイテムの数を足す
[eval exp="f.item[1][1] += tf.num"]
[endif]
;エラー回避 もし過剰になったら正常化する
;例(80個の場合に30個入れたら場合等)
[if exp="f.item[0][1] > 99"]
持ちきれないので残りは捨てました
[eval exp="f.item[0][1] = 99"]
[elsif exp=f.item[1][1] > 99]
持ちきれないので残りは捨てました
[eval exp="f.item[1][1] = 99"]
[endif]

;戻る
@return

[macro name=lose_item]

0名前、1所持個数、2効能…[eval exp="f.item[0]=['薬草',1,100]"]

;使用するファイル側
[ macro name=lose_item]
[eval exp="tf.num = mp.num]
[eval exp="tf.item_name=mp.name"]
@call storage="get_item.ks"
;callではなくて別にここに書いてもいいです
[endmacro]

マクロ使用 数と名前
[get_item num=1 name="薬草"]


;サブルーチン get_item.ks
;アイテム名を探す、個数が限界値の場合スルーする
[if exp="tf.item_name == f.item[0][0] && f.item[0][1] != 0"]
;アイテムの数を引く
[eval exp="f.item[0][1] -= tf.num"]
;アイテム名を探す、個数が限界値の場合スルーする
[elsif exp="tf.item_name == f.item[0][1] && f.item[1][1] != 0"]
;アイテムの数を引く
[eval exp="f.item[1][1] -= tf.num"]
[else]
その様なアイテムは持っていません。
[endif]


;エラー回避 もし0以下なったら正常化する
;例(残り1個の場合に3個マイナスされたらの場合等)
[if exp="f.item[0][1] < 0"]
[eval exp="f.item[0][1] = 0"]
[elsif exp=f.item[1][1] < 0]
[eval exp="f.item[1][1] = 0"]
[endif]


;戻る
@return

[macro name=お金増加]

所持金(f.money)を指定値で増加させる。
[macro name=お金増加]
;計算用 変数 tf.money
[eval exp="tf.money = f.money"]
[eval exp="tf.money +=mp.money"]
;もし9999(任意の値)以下の場合に限り所持金増加
[if exp="tf.money <= 9999"]
[eval exp="f.money +=mp.money"]
[emb exp="mp.money"]増えた。[r]
[elsif exp="tf.money > 9999"]
[eval exp="f.money =9999"]
[emb exp="mp.money"]増えたが超えた残りは持ちきれませんでした。[r]
;計算用 使用しないのでコメント化
;[eval exp="mp.lose = 9999- tf.money"]
;[emb exp="mp.lose"]分は置いていきました。
[else]
例外
[endif]
[endmacro]

使用例
[お金増加 money=&tf.num]

[macro name=お金減少]

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

[macro name=お金減少]
[if exp="f.money < mp.money"]
[cm]お金が足りません。[p]
[else]
[eval exp="f.money -=mp.money"]
[endif]
;エラー回避 もし0以下なったら正常化する
[if exp=f.money < 0]
[eval exp="f.money = 0"]
[endif]
[endmacro]

使用例
[お金減少 money=20]

[macro name=downLifeOne]

指定したキャラクターの体力を減少させる。
;個人的には戦闘時は全ての値を計算用に渡してから、戦闘に入った方が楽で安全です。最後にリザルト画面で代入する等
;ここではそのまま入力してます。
[downLifeOne hp=&f.player[0][2] damage=20]

[macro name=downLifeOne]
;計算用 変数 tf.hp に現在のhpを代入
[eval exp="tf.hp = mp.hp"]
;回復値を計算用に仮に加算
[eval exp="tf.hp -=mp.damage"]
;もし0以上の場合に限りhp減少
[if exp="tf.hp > 0"]
[eval exp="mp.hp -=mp.damage"]
[emb exp="mp.damage"]減少[r]
[elsif exp="tf.hp < 0"]
[eval exp="mp.hp = 0"]
[else]
例外
[endif]
[endmacro]




[macro name=upLifeOne]

指定したキャラクターの体力を指定数増加させる
;個人的には戦闘時は全ての値を計算用に渡してから、戦闘に入った方が楽で安全です。最後にリザルト画面で代入する等
;ここではそのまま入力してます。
[upLifeOne hp=&f.player[0][2] cure=20]

[macro name=upLifeOne]
;計算用 変数 tf.hp に現在のhpを代入
[eval exp="tf.hp = mp.hp"]
;回復値を計算用に仮に加算
[eval exp="tf.hp+=mp.cure"]
;もし9999(任意の値)以下の場合に限りhp増加
[if exp="tf.hp <= 9999"]
[eval exp="mp.hp +=mp.cure"]
[emb exp="mp.cure"]回復しました。[r]
[elsif exp="tf.hp > 9999"]
[eval exp="mp.hp =9999"]
効果はありませんでした。
[else]
例外
[endif]
[endmacro]




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

* 戦闘コマンド

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

[position layer=message0 top=320" height=120 width=370]
[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]

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

  • 最終更新:2019-01-23 18:43:06

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

認証パスワード