ありがちなラスボス戦のテンプレート(RPGエディタ)

投稿者:            mini mosmoss 投稿日:2016/05/03 22:41

「剣と天秤」で実際に使っているスクリプトを紹介していこうと思います。
関数リファレンスや初心者向けマニュアル、Wiki、質問掲示板に書かれていることの
いち使用例にすぎませんが、初心者がRPGエディタに慣れる手段の一つになればと思います。

ラスボス戦つくるのが面倒…
そんなときに!?

必要なイベントは
これを書くイベントがひとつと
登場人物のキャラクタイベント
(テンプレでは仲間A,仲間B,悪者W,助っ人D,助っ人E,助っ人F,助っ人Gの7つ。
それぞれにキャラクタを設定しイベントの名前をつける。
なお、テンプレでは仲間AとBはあたり判定なしイベントの設定です)

必要ないキャラやシーンは削除する、
台詞を変える、
キャラの移動する座標の位置を変える、
渡すアイテムをマップに登録したものに書き直す、
戦う敵やパーティーメンバーをマップに登録したキャラに書き直す、
負けたらゲームオーバーにする、
など適宜修正してください

キャラクタの移動位置をそのまま使う場合は
マップを横60,縦100にするとマップの右下の角でイベントが実行されます




#ありがちなラスボス戦のテンプレート


#最終決戦のイベント
if !getFlag("決戦終了")

#台詞で登場するキャラクタの名前を設定

a = "男の仲間"       #仲間のNPC1
b = "女の仲間"       #仲間のNPC2
u = "主人公"

w = "王さま"         #悪者W
j = "裁判長"          #被害者J
k = "メイド"         #被害者K

d = "騎士団団長"  #助っ人D
e = "医師"            #助っ人E
f = "文官"             #助っ人F

g = "犬"               #助っ人G

#登場するキャラクタのイベント名を設定

#ここでは台詞で登場する名前をそのままイベントの名前につけているという設定です
A = a
B = b
U = "playerCharacterEvent"

W = w

D = d
E = e
F = f

G = g

#キャラクターの動き

warpEvent(W,  49, 95) #悪者の位置を固定

warpEvent("playerCharacterEvent", 48, 90) #主人公入場


setEventTarget("playerCharacterEvent", 48, 90)
runEventMove()
setEventTarget("playerCharacterEvent", 44, 90)
runEventMove()
setEventTarget("playerCharacterEvent", 44, 98)
runEventMove()
setEventTarget("playerCharacterEvent", 49, 98)
runEventMove()
setEventTarget("playerCharacterEvent", 49, 97)
runEventMove()

#主人公の仲間入場

warpEvent(A,  49, 97)
warpEvent(B, 49 ,97)
setEventTarget(A, 50, 98)
setEventTarget(B, 48, 98)
runEventMove()

setEventDirection("playerCharacterEvent",getUpDirection())
setEventDirection(A,getUpDirection())
setEventDirection(B,getUpDirection())


#会話開始

speak(w +"\n「話は聞いた」")
speak(w +"\n「犯人に襲われ返り討ちにしたそうだな。\n よくやった」")
speak(w +"\n「おまえたちと文官には褒美を取らせよう」")
speak(w +"\n「して、犯人は誰だったのか?」")


case speakWithSelect(2, w , k ,     u + " \n「犯人は……」")
  when 0
    speak(u + " \n「"+ w +"、あんただ。」")
  when 1
    speak(u + " \n「" + k + "だ。 \n でも、指示したのはあんただ」")
    
end

speak(w + " \n「……」")
speak(w + " \n「……」")
speak(w + " \n「ふん。\n 冒険者程度にみやぶられたか。\n 私もまだまだだ」")
speak(w + " \n「まぁ、よい。\n おまえたちを殺し、\n 襲われたとでも言えばすむ」")
speak(w + " \n「騎士団はおまえたちを雇った文官に怒り\n 文官は騎士団をさらに疑うだろう。\n それもおもしろい」")

speak(a + " \n「"+ k + "はあなたが\n 改心することを信じていました。\n 今から罪を償い、\n やり直すつもりはないですか」")
speak(b + "\n「言うだけ無駄よ。\n こいつ、完全に開き直ってるじゃない」")


#悪者Wと会話、事件の真相が明らかになる場面

while !getFlag("会話終了")
case speakWithSelect(4,"なぜ" + j + "を?","なぜ俺たちを?","楽しいか?","もういい", 
    "")
  when 0
    speak(u + " \n「なぜ"+ j +"を殺した?」")
    speak(w +" \n「長く興味があったのだ。\n あれを殺せば更に面白いことが\n 起るのではないか、とな。\n 騎士団と文官はもっと憎み合ってもよい」")
  when 1
    speak(u + " \n「なぜ俺たちを殺そうとした?」") 
    speak(w +" \n「殺す?それは無理だろう。\n おまえたちはそこそこ強い。\n "+ k +"もかなわないと知りつつ従ったのだろう」")  
    speak(b + "\n「死ぬとわかっていて行かせたのね」") 
    speak(a + " \n「むごいことを……。\n いったいなんのために……」")
    speak(w + " \n「お前たちを襲わせたのは、\n 先に犯人を見つけさせるためだ。\n そうすれば騎士団たちは名誉を傷つけられ\n 苛立つだろう」")  
    speak(b + "\n「そんなつまらないことで!?」") 
  when 2
    speak(u + " \n「こんなことをして楽しいか?」")    
    speak(w +" \n「楽しいか、だと?」")
    speak(w +" \n「はっはっはっはっは!」")
    speak(w +" \n「楽しいに決まっているだろう」")
    speak(w +" \n「積み木を高く積み上げて\n 崩して遊んだことはないかね?」")
    speak(w +" \n「はらはらしながら均衡を保たせ\n どのくらい積み上げられるか挑戦する」")
    speak(w +" \n「そして自分が作り上げたものを壊す快感!\n 私がやっているのはこれだ」")
    speak(b + "\n「大人しく積み木で遊んでいなさいよ」") 
    speak(w +" \n「まぁ、そう言うな。\n 人を憎み合わせ傷つけ合わせ\n 心を歪ませるのを見るのはおもしろい」")  
    speak(a + "\n「心が歪んでいるのはあなたです」") 
    speak(w +" \n「ふん。滑稽なのが、\n この楽しみのために役立ったものが\n 「法」や「正義心」、「忠誠心」だということだ。\n 笑えるであろう?」")   


  when 3
    speak(u + " \n「もう聞くべきことはない」")
    speak(w +" \n「それは残念だな。\n 私はもっと喋っていたいのだが」")   
    speak(w +" \n「なにせ胸の内を話せる相手は\n 死に行く者だけだからな」")  
    setFlag("会話終了",true)
    
end
end

#仲間NPCがパーティに入る

addPartyMember(32942) #パーティーメンバーのIDを適宜変えてください
addPartyMember(32943) #パーティーメンバーのIDを適宜変えてください

speak(a + "\n「きます」")
speak(b + "\n「くるわっ」")


    speak(w +" \n「私の楽しみのために」") 
    speak(w +" \n「死んでもらおう」") 


startTurnBattle(33554) #悪者Wとバトル開始


if getTurnBattleResult() == 
    getTurnBattleWin()
  #勝ったとき
  
    speak(w +" \n「ぐっ、なかなかやるな……」")   

    speak(w +" \n「しかしこれだけ派手に戦えば、\n 階下の者も気づく。\n 時期に人が来るだろう」") 
    speak(w +" \n「おまえたちは一国の王に刃を向けた。\n 罪人としてむごい死をむかえることになる」") 

    speak("???\n「それはどうかな」") 
    speak(w +" \n「!!?」")  

#助っ人DEF入場

warpEvent(D,  48, 90)

setEventTarget(D, 48, 90)
runEventMove()
setEventTarget(D, 44, 90)
runEventMove()
setEventTarget(D, 44, 98)
runEventMove()

setEventDirection(D,getRightDirection())

warpEvent(E,  48, 90)

setEventTarget(E, 48, 90)
runEventMove()
setEventTarget(E, 44, 90)
runEventMove()
setEventTarget(E, 44, 97)
runEventMove()

setEventDirection(E,getRightDirection())

warpEvent(F,  48, 90)

setEventTarget(F, 48, 90)
runEventMove()
setEventTarget(F, 44, 90)
runEventMove()
setEventTarget(F, 44, 96)
runEventMove()

setEventDirection(F,getRightDirection())

    speak(d +"\n「話は全てこの耳で聞いた」") 
    speak(e +"\n「王よ、観念なさりませ」") 

setEventDirection(W,getLeftDirection())
    speak(w + " \n「!」")  

    speak(w +" \n「謀られたか……\n しかし証拠があるまい……」") 

    speak(f +"\n「"+ k +"が日記を付けておりました。\n こちらの記録とも一致する\n 信憑性の高い証拠です」") 

setEventDirection(W,getDownDirection())
    speak(w +"\n「くっ……\n あいつめ……」")

    speak(d +"\n「旅の武人よ、そこをどかれませ。\n その者は私が」") 

setEventTarget(B, 50, 97)
setEventTarget("playerCharacterEvent", 50, 96)
runEventMove()

setEventDirection("playerCharacterEvent",getLeftDirection())
setEventDirection(B,getLeftDirection())
setEventDirection(A,getLeftDirection())


setEventTarget(D, 49, 98)
runEventMove()
setEventTarget(D, 49, 96)
runEventMove()


    speak(w +" \n「くっくっ。\n 騎士団団長が王を殺すとはな」")
    speak(w +" \n「いいのか?\n 国王殺しは大罪だぞ」")

    speak(d +"\n「覚悟はできております」") 
    speak(d +"\n「例え、未来永劫汚名にまみれ\n 一族郎党路頭に迷い、いえ、\n 死罪になろうとも」") 
    speak(d +"\n「あなたを誅するのは\n この国の剣と自負する私の務め。\n 何人にも譲るつもりはございませぬ」") 

    speak(w +" \n「……」")
    speak(d +" \n「……」")

    speak(d +" \n「……覚悟」")

fadeOut(255, 255, 255)
setEventCharacter(W, 33515) #悪者Wが倒れます

fadeIn()

elsif getTurnBattleResult() ==
    getTurnBattleLose()
  #負けたとき
  
    speak(w +" \n「くちほどにもないやつらだ」")   
    speak(u + " \n「ぐっ……」")
    speak(a + " \n「強い……」")
    speak(b + " \n「なにあの剣……反則よ……」")
    speak(w +" \n「おまえたちの死は\n 有効に活用させてもらう」")   
    speak(u + " \n「っ……」")
    speak(w +" \n「死ね!」") 

    speak("???\n「そうはさせない!」") 
    speak(w +" \n「!!?」") 

#助っ人DEF入場 

warpEvent(D,  48, 90)

setEventTarget(D, 48, 90)
runEventMove()
setEventTarget(D, 44, 90)
runEventMove()
setEventTarget(D, 44, 98)
runEventMove()

setEventDirection(D,getRightDirection())

warpEvent(E,  48, 90)

setEventTarget(E, 48, 90)
runEventMove()
setEventTarget(E, 44, 90)
runEventMove()
setEventTarget(E, 44, 97)
runEventMove()

setEventDirection(E,getRightDirection())

warpEvent(F,  48, 90)

setEventTarget(F, 48, 90)
runEventMove()
setEventTarget(F, 44, 90)
runEventMove()
setEventTarget(F, 44, 96)
runEventMove()

setEventDirection(F,getRightDirection())

    speak(d +"\n「話は全てこの耳で聞いた」") 
    speak(e +"\n「王よ、観念なさりませ」") 

setEventDirection(W,getLeftDirection())
    speak(w +" \n「!」")  

    speak(w +" \n「ちっ、謀られたか……\n しかし証拠があるまい!」") 

    speak(f + "\n「"+ k + "が日記を付けておりました。\n こちらの記録とも一致する\n 信憑性の高い証拠です」") 

setEventDirection(W,getDownDirection())
    speak(w + " \n「くっ……\n あいつめ……」")

    speak(d + "\n「旅の武人よ、\n 国の剣が加勢いたす。\n この国の誇り、とくとご覧あれ!」") 


setEventTarget(D, 49, 98)
runEventMove()
setEventDirection(D,getUpDirection())
addPartyMember(33553) #助っ人Dがパーティに入ります



case speakWithSelect(2,"かたじけない","ふん", 
    "")
  when 0
        speak(u + " \n「……!\n かたじけない!」")
  when 1
        speak(u + " \n「ふん……。\n 気障な男だ……」")
end


    speak(w +" \n「くっくっくっ。\n 騎士団団長が王に刃をむけるか」")
    speak(w +" \n「やってみるがいい。\n その傷だらけの仲間と一緒に、な」")

    speak(e + "\n「ふぅむ。」")
    speak(e + "\n「たしかに傷だらけじゃのう。」")
    speak(e + "\n「でもまだ死んでおらん。\n ……ほぉれ!」") 

fadeOut(255, 255, 255)
addPlayerHP(500)
addPartyMemberHP(32942, 500) #パーティーメンバーのIDを適宜変えてください
addPartyMemberHP(32943, 500) #パーティーメンバーのIDを適宜変えてください
fadeIn()

    speak(u + " \n「……!?」")
    speak(b + " \n「傷が……癒えた……?」")
    speak(a + " \n「この光……神秘の秘術……」")


    speak(e +"\n「ほれほれ。\n きつけ薬に、回復薬もたーんとあるぞ。\n 使いなさい。\n いじわる王にやる分はないがな」")

setEventTarget(E, 48, 97)
runEventMove()
setEventTarget(E, 44, 97)
runEventMove()
setEventDirection(E,getRightDirection())

giveItem(20342)
giveItem(20342)
giveItem(20342)

giveItem(20349)

giveItem(20348)
giveItem(20348)
giveItem(20348)
giveItem(20348)
giveItem(20348)
giveItem(20348)
giveItem(20348)

#これらのアイテムは、マップに登録したものに変えてください

speak(e + "は" + u + "たちにアイテムを渡した")
 

    speak(w + " \n「……!?\n くっ……こしゃくな!」")

    speak(d + " \n「陛下……覚悟」")


startTurnBattle(33554) #悪者Wとバトル開始

if getTurnBattleResult() == 
    getTurnBattleWin()
  #勝ったとき
addPlayerHP(1)

    speak(d + "\n「旅の武人よ、剣をおおさめくだされ。\n この者は私が」") 

removePartyMember(33553) #助っ人Dがパーティから外れます


setEventTarget("playerCharacterEvent",50 , 97)
runEventMove()
setEventDirection("playerCharacterEvent",getLeftDirection())
setEventTarget(D, 49, 96)
runEventMove()


    speak(w +" \n「ふんっ……\n 騎士団団長が……王を殺すとはな……」")
    speak(w +" \n「いいのか……\n 国王殺しは大罪だぞ……」")

    speak(d +"\n「覚悟はできております」") 
    speak(d +"\n「例え、未来永劫汚名にまみれ\n 一族郎党路頭に迷い、いえ、\n 死罪になろうとも」") 
    speak(d +"\n「あなたを誅するのは\n この国の剣と自負する私の務め。\n 何人にも譲るつもりはございませぬ」") 

    speak(w +" \n「……」")
    speak(d + " \n「……」")

fadeOut(0, 0, 0)
setEventCharacter(W, 33515) #悪者Wが倒れます

fadeIn()

  

elsif getTurnBattleResult() ==
    getTurnBattleLose()
  #負けたとき
  
    speak(w +" \n「なかなかやるではないか。\n しかし我が伝説の剣にはかなわんようだな」")

    speak(d +" \n「無念……!」")

warpEvent(D, 48.2, 98) #助っ人Dの位置を微調整

setEventCharacter(D, 33517) #助っ人Dが倒れます


    speak(f + " \n「"+ d +"殿……!」")
removePartyMember(33553) #助っ人Dがパーティからはずれます

fadeOut(255, 255, 255)
addPlayerHP(10)
fadeIn()

    speak(e + "\n「すまぬ……さっきのはもうできんようじゃ。\n どうやら力を使いすぎてしもうたようだわい。\n 万事休すじゃ……」") 

setEventCharacter(E, 33514) #助っ人Eが倒れます


    speak(f + "\n「" + e + "殿……!\n お気をたしかに……!」")


case speakWithSelect(2,"・・・・・・","ここまでか", 
    "")
  when 0
    speak(u + " \n「……」")
    
  when 1
    speak(u + " \n「ここまでか……」")

end

waitTime(2000)

    speak("??? \n「わおーん!」")

shakeScreen(1000)
speak("ガシャーン!")

#助っ人Gが登場

warpEvent(G, 50, 99)
setEventDirection(G,getUpDirection())

    speak(g + "\n「わおーん!」")

warpEvent(G, 50, 98)
setEventTarget(G, 50, 97)
runEventMove()

addPartyMember(31180) #助っ人Gがパーティに入ります

startTurnBattle(33554) #悪者Wとのバトルに入ります


if getTurnBattleResult() == 
    getTurnBattleWin()
  #勝ったとき

addPlayerHP(1)


    speak(g + "\n「わおーん!」")
    speak(w + " \n「ぐぐっ……\n 犬ごときに……\n やられるとは……」")
    speak(w + " \n「笑える……な……」")

setEventCharacter(W, 33515) #悪者Wが倒れます

removePartyMember(31180) #助っ人Gがパーティから抜けます


  

elsif getTurnBattleResult() ==
    getTurnBattleLose()
  #負けたとき

addPlayerHP(1)

    speak(g + "\n「……」")
    speak(u + " \n「……」")
    speak(a + " \n「……」")
    speak(b + " \n「……」")

    speak(w + " \n「くくっ……\n はっはっは!\n 無様だな!\n しかし、殺しも案外楽しいものだ」")
    setEventDirection(W,getLeftDirection())
    speak(w + " \n「おい、そこのおいぼれふたり。\n 次はお前らだ。\n そこにいろ」")


setEventTarget(G, 50, 95)
runEventMove()
setEventDirection(G,getLeftDirection())

    speak(u + " \n「……!」")
    speak(w + " \n「!?」")

    setEventDirection(W,getRightDirection())


fadeOut(255, 255, 255)
setEventCharacter(W, 33515)  #悪者Wが倒れます
setEventCharacter(G, 33516)   #助っ人Gが倒れます
fadeIn()


    speak(g + "\n「……」")
    speak(w + "\n「……」")
    speak(u + "\n「……」")

removePartyMember(31180) #助っ人Gがパーティから抜けます
  

end #3戦目のバトルの終
  

end #2戦目のバトルの終


end #1戦目のバトルの終







#決戦のあとエンディングにむけての処理
fadeOutMusicStop(2000)


waitTime(3000)


setFlag("決戦終了",true)

#ここにプレイヤーワープ、イベントワープなどを書いて場面転換しても良いですし
#決戦終了フラグで自動開始する別イベントに書いてもいいと思います





end


これを製作の時短に使えるのかはよくわかりませんが、
なにかの参考になれば幸いです。

追記; 「剣と天秤」を作ったときは、
どこかにラスボス戦のテンプレート落ちてたらいいのに、
と思いながら、すごく面倒だと思いながら作ったので、
これを公開することにためらいはなかったのですが、
ちょっと冷静になると、ラスボス戦作りの面倒くささっていうのは、
そういうことじゃないよな…とわかります。

このスクリプトは、何かRPGエディタ作品を最後まで作りかけている人向きではなくて、
ゲームもスクリプトも作ったことがない人が
RPGエディタをちょっと触ってみたいときに使うといいのではないかと思いました。
でもそんな人がこのブログに辿り着くわけもなく…(^^;)

コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。