スクリプト/冒険に役立つスクリプト
最終投稿者: rurun9
更新:2011/11/20 14:39:54
RPG型ゲーム作成のテクニックとして、
これまでに掲示板などで話題に上がったスクリプトをまとめてみました。
・お金
・経験値
・図鑑
【お金】
RPGには欠かせないお金。
今回はお金の名前を「カネー」、数える単位(記号)を「K」とする事にします。
初期設定として最初に開始スクリプトに記入
ゲーム中の増減は、イベントのスクリプト欄に以下のように記入
で表示できます。
ただし、これだけだといつでも所持金を確認できるわけではありません。
そこで
(マップ上のどこか1マスに、setTextでお金を表示させる自動開始イベントを設置。
有効条件にフラグを与えて、このイベント内でフラグをfalseにする。
お金の増減がある毎にこのフラグをtrueにする)
などの工夫をすると良いでしょう。
【経験値】
レベルが関数で上げられるようになったので、
変数で経験値を管理し、経験値の貯まり具合でレベルが上がるという仕組みを考えてみました。
今回はゲーム開始時から3人固定パーティとし、
経験値とレベルをそれぞれ別個に配列変数で管理する事にします。
開始スクリプトに記入
「経験値」が「次のレベルまで」に届いたら、レベルが上がります。
このとき「経験値」を一度減らして「次のレベルまで」を2倍に増やしています。
つまり、レベルが上がるほど次に必要な経験値が多くなる、という形になっています。
「累積総合経験値」を別に数えているので、必要なときに表示可能です。
そして、経験値を増やしたい所(戦闘勝利後の部分とか)には以下のように記入
敵の出現頻度&一匹から得られる経験値と「次のレベルまで」の伸び率のバランスが、RPGゲーム全体の難易度(Lv上げ作業の必要性)に大きく関わってきます。
あらゆる可能性を試しつつ、冗談ではなくテストプレーを死ぬほど行って調整していきましょー。
【図鑑】
入手したアイテムや、倒した敵を一覧で確認できる機能。
配列変数で管理します。
■単純追加版
開始スクリプトでリストとなる配列変数を用意しておきます
そして追加したい項目名を文字列でリスト配列 a に加えていくだけです。
この図鑑を開くときの例
■順序が決まっている版
全部で3品の図鑑だとします。
開始スクリプトに記入
見ての通り、変数は結局単なる「入れ物」でしかありません。
中に何を入れるのか、それがどういう意味なのか、を決めるのは作成者本人なのです。
次にアイテムをゲットした所に記入
これで図鑑に載るわけです。
最後に図鑑を開くときは、演出方法によってどんな風にもできますが、
今回は選択肢で図鑑の項目を並べて、選んだものの説明文を表示する、という簡単な例です。
こんな感じです。
長々とありがとうございました!
参考にした掲示板、wiki
・掲示板「経験値」
・掲示板「リストの作り方」
・掲示板「確率」
・wiki 「スクリプト/コツ/敵を倒すとお金が手に入る」
・wiki 「お店の作り方」 ←おまけ
ツイート
これまでに掲示板などで話題に上がったスクリプトをまとめてみました。
・お金
・経験値
・図鑑
【お金】
RPGには欠かせないお金。
今回はお金の名前を「カネー」、数える単位(記号)を「K」とする事にします。
初期設定として最初に開始スクリプトに記入
setMoneyName("カネー") setDenomination("K") addMoney(0) #ゲームが始まった時の所持金もセット
ゲーム中の増減は、イベントのスクリプト欄に以下のように記入
addMoney(100) #カネーを増やす場合 subMoney(852) #カネーが減る場合
speak("現在のカネー ", getMoney() )
で表示できます。
ただし、これだけだといつでも所持金を確認できるわけではありません。
そこで
- カスタムメニューを作成して表示させる方法
- 常時画面上にText配置してしまう方法
(マップ上のどこか1マスに、setTextでお金を表示させる自動開始イベントを設置。
有効条件にフラグを与えて、このイベント内でフラグをfalseにする。
お金の増減がある毎にこのフラグをtrueにする)
などの工夫をすると良いでしょう。
【経験値】
レベルが関数で上げられるようになったので、
変数で経験値を管理し、経験値の貯まり具合でレベルが上がるという仕組みを考えてみました。
今回はゲーム開始時から3人固定パーティとし、
経験値とレベルをそれぞれ別個に配列変数で管理する事にします。
開始スクリプトに記入
setVariable("経験値",createArray()) #0=プレイヤー, 1=仲間A, 2=仲間B setVariable("累積総合経験値",createArray()) setVariable("キャラID",createArray()) #パーティメンバーのキャラID番号を格納しておく #注意:自分で用意したキャラの番号を調べて半角数字で入れて下さい getVariable("キャラID")[0]="playerCharacter" getVariable("キャラID")[1]=仲間AのID番号 getVariable("キャラID")[2]=仲間BのID番号 setVariable("次のレベルまで",createArray()) i=0 while i<3 #用意してあるキャラ数分、初期値をセットします getVariable("経験値")[i]=0 getVariable("累積総合経験値")[i]=0 getVariable("次のレベルまで")[i]=10 i=i+1 end #ユーザー定義関数でレベルが上がったかどうかを確認する処理をつくります def expcheck( point ) i=0 while i<3 #三人を順にチェック。HP0だと経験値が入らない if 0<getPartyMemberHP( getVariable("キャラID")[i] ) getVariable("経験値")[i]=getVariable("経験値")[i]+point getVariable("累積総合経験値")[i]=getVariable("累積総合経験値")[i]+point while getVariable("次のレベルまで")[i] <= getVariable("経験値")[i] levelUpPartyMember( getVariable("キャラID")[i] ) getVariable("経験値")[i]=getVariable("経験値")[i]-getVariable("次のレベルまで")[i] getVariable("次のレベルまで")[i]= 2*getVariable("次のレベルまで")[i] end end i=i+1 end end #expcheck終
このとき「経験値」を一度減らして「次のレベルまで」を2倍に増やしています。
つまり、レベルが上がるほど次に必要な経験値が多くなる、という形になっています。
「累積総合経験値」を別に数えているので、必要なときに表示可能です。
そして、経験値を増やしたい所(戦闘勝利後の部分とか)には以下のように記入
point=得られる経験値 #敵毎に設定して配列に入れておくなど各自で工夫してください expcheck( point )
あらゆる可能性を試しつつ、冗談ではなくテストプレーを死ぬほど行って調整していきましょー。
【図鑑】
入手したアイテムや、倒した敵を一覧で確認できる機能。
配列変数で管理します。
■単純追加版
開始スクリプトでリストとなる配列変数を用意しておきます
setVariable("a",createArray()) #実際にはもっとわかり易い名前で構いません
そして追加したい項目名を文字列でリスト配列 a に加えていくだけです。
word="ぴか中" #今回の新単語をwordに入れます i=0; judge=true while i<getArrayLength( getVariable("a") ) if word==getVariable("a")[i] judge=false #既に同じものがリストaに在るならダメ end i=i+1 end if judge #リストにまだない、つまりtrueのままなら項目として追加 pushArray(getVariable("a"), word ) end
i=0; z="" while i<getArrayLength(getVariable("a")) z=z+i+". "+getVariable("a")[i]+"\n" i=i+1 end speak(z)
■順序が決まっている版
全部で3品の図鑑だとします。
開始スクリプトに記入
setVariable("max",3) #全部でいくつなのか setVariable("a",createArray()) i=0 while i<getVariable("max") getVariable("a")[i]=createArray() #二次元配列で管理します getVariable("a")[i][0]=false i=i+1 end #a[n][m]について # n...番号。0~2の全部で三個 # m...0=図鑑に載っているtrue 載っていないfalse, 1=名前, 2=説明文, とします getVariable("a")[0][1]="ポーション" getVariable("a")[0][2]="HPを30回復する" getVariable("a")[1][1]="ハイポーション" getVariable("a")[1][2]="HPを50回復する" getVariable("a")[2][1]="エリクサー" getVariable("a")[2][2]="HPを最大まで回復する"
中に何を入れるのか、それがどういう意味なのか、を決めるのは作成者本人なのです。
次にアイテムをゲットした所に記入
giveItem(ポーションのアイテムID番号) #自分で用意したアイテムID番号を調べて入れて下さい speak("ポーションを手に入れた") getVariable("a")[0][0]=true
これで図鑑に載るわけです。
最後に図鑑を開くときは、演出方法によってどんな風にもできますが、
今回は選択肢で図鑑の項目を並べて、選んだものの説明文を表示する、という簡単な例です。
b=createArray() i=0 while i<getVariable("max") if getVariable("a")[i][0] pushArray(b,getVariable("a")[i][1]) #図鑑に載っている品だけの選択肢配列 b をつくる end i=i+1 end pushArray(b,"図鑑を閉じる") #終わらせる選択肢も追加 k=true while k c=speakWithSelectArray(b,"参照したい項目を選んでね") i=0 while i<getVariable("max") if b[c]==getVariable("a")[i][1] #選んだのと同じものを図鑑一覧から探して詳細を表示 speak("No.",i," : ",getVariable("a")[i][1],"\n ",getVariable("a")[i][2]) elsif b[c]=="図鑑を閉じる" k=false end i=i+1 end end #kループ終
こんな感じです。
長々とありがとうございました!
参考にした掲示板、wiki
・掲示板「経験値」
・掲示板「リストの作り方」
・掲示板「確率」
・wiki 「スクリプト/コツ/敵を倒すとお金が手に入る」
・wiki 「お店の作り方」 ←おまけ
コメントする
コメントするには、ログインする必要があります。
コメント一覧
退会したユーザー(投稿日:2011/11/20 14:39,
履歴)
無答ワロタ
退会したユーザー(投稿日:2011/11/20 10:39,
履歴)
ちなみにスクリプトはこれです
case speakWithSelect(4,"図鑑","ストーリー","目的","説明", "なにを読みますか?") when 0 case speakWithSelect(2,"モンスター図鑑","レアモンスター図鑑", "どれを見ますか?") when 0 b=createArray() i=0 while i<getVariable("max") if getVariable("モンスター図鑑")[i][0] pushArray(b,getVariable("モンスター図鑑")[i][1]) #図鑑に載っている品だけの選択肢配列 b をつくる end i=i+1 end pushArray(b,"図鑑を閉じる") #終わらせる選択肢も追加 k=true while k c=speakWithSelectArray(b,"参照したい項目を選んでね") i=0 while i<getVariable("max") if b[c]==getVariable("モンスター図鑑")[i][1] #選んだのと同じものを図鑑一覧から探して詳細を表示 speak("No.",i," : ",getVariable("モンスター図鑑")[i][1],"\n ",getVariable("モンスター図鑑")[i][2]) elsif b[c]=="図鑑を閉じる" k=false end i=i+1 end end #kループ終 when 1 end when 1 speak("~ストーリー~\n前置き\nこのストーリーはこのモンスターたちと出会う前からの話です。\n") speak("ある日、あなたは1匹のモンスターを拾いました。\nそのモンスターはひどく弱っていて今にも死にそうでした。\nなのであなたはご飯をあげてそのモンスターを助けました。\nそこであなたはある情報を耳にします。それは、コロシアムでモンスターの大会が行われるということでした。\nなのであなたはこの1匹のモンスターを野生のモンスターを戦わせて\n強くすることにしました。") when 2 speak("~目的~\n前置き\nストーリーを読んでいれば分かっているかも") speak("このモンスターを野性のモンスターを戦わせて\n強くし、コロシアムで優勝することが目的です。\nコロシアムで優勝すれば賞品としてモンスターエッグが贈られます\nもちろん賞金も贈られます。") when 3 case speakWithSelect(2,"メニューの説明","パーティの説明", "どれを読みますか?") when 0 speak("~メニューの説明~\n前置き\nXキーかCキーを押すことででてくるメニューの説明をします") speak("このメニューはステータス、モンスター手帳、アイテム、パーティ整列、\nバックログ、セーブ、ロード、メニューを閉じるの7つで出来ています\nステータスでは、今モンスターが何レベかを見ることができます\nモンスター手帳ではお金、モンスターに出会った数、モンスターを捕まえた数、\nレアモンスターに出会った数、レアモンスターを捕まえた数が書いてあります\nアイテムでは、今もっているアイテムを見ることができ、\n使えるものはZキーを押して使うで使うことができます\nパーティ整列では、パーティメンバーの順番を入れ替えることが出来ます\nバックログでは過去の文章を読み直すことが出来ます。\nセーブは今の状態でセーブをします。\nロードは過去にセーブした場所にセーブしたときのデータで\nロードすることが出来ます\nメニューを閉じるでメニューを閉じます") when 1 speak("~パーティの説明~\n前置き\nこのゲームの中で最も重要なパーティについて説明します") speak("下の黒いバーは今のパーティを示しています。\n書いてある画像と数字はその画像のパーティメンバーの体力と魔力です。\nパーティメンバーはメニューのパーティ整列から\n順番を変えることが出来ます。\nパーティーメンバーを外したり加えたり、逃がしたりするときは、モンスターに話しかけてください") end end
退会したユーザー(投稿日:2011/11/20 10:38,
履歴)
今まで
で、できていたのに、
aの変数名を変えると
1st argument is not array. line : 40
1st argument is not array. line : 41
と出てきました。
なぜでしょう?
b=createArray() i=0 while i<getVariable("max") if getVariable("a")[i][0] pushArray(b,getVariable("a")[i][1]) #図鑑に載っている品だけの選択肢配列 b をつくる end i=i+1 end pushArray(b,"図鑑を閉じる") #終わらせる選択肢も追加 k=true while k c=speakWithSelectArray(b,"参照したい項目を選んでね") i=0 while i<getVariable("max") if b[c]==getVariable("a")[i][1] #選んだのと同じものを図鑑一覧から探して詳細を表示 speak("No.",i," : ",getVariable("a")[i][1],"\n ",getVariable("a")[i][2]) elsif b[c]=="図鑑を閉じる" k=false end i=i+1 end
で、できていたのに、
aの変数名を変えると
1st argument is not array. line : 40
1st argument is not array. line : 41
と出てきました。
なぜでしょう?
退会したユーザー(投稿日:2011/11/17 19:11,
履歴)
あれ、どうだっけ、やべ、ど忘れした
退会したユーザー(投稿日:2011/11/17 19:10,
履歴)
↓なぜにまちがえたし
{{code
getVariable("a")[1][0]
}}}
{{code
getVariable("a")[1][0]
}}}
退会したユーザー(投稿日:2011/11/17 19:05,
履歴)
つまり、{{{code
getVariable("a")[1][0]=true
}}}
とするといいのですね
getVariable("a")[1][0]=true
}}}
とするといいのですね
退会したユーザー(投稿日:2011/11/17 19:02,
履歴)
なるほどー納得です
ありがとうございました
ありがとうございました
図鑑用の配列aは開始スクリプトに書いた通り、コレは作ってる人が勝手に決めた俺ルール&意味なのです
何の部分…0...載ってるtrue 載って無いfalse, 1...アイテム名, 2...説明
でa[0][0]てのは、0番はポーションと決めてあるので、ゲット時に「図鑑に載ってるtrue」にしてるだけ。
つまり他のアイテムなら番号を変える。ハイポーションなら1番てこと。
仮にゲーム中のアイテムが50種なら開始スクリプトで50種つまり0~49番までを全部書いておく必要があるワケです
更に言うなら、アイテムとして作成してあるのだからアイテム名を表示する事も当然可能、つまりこの図鑑配列a[n][1]にアイテム名が入れてあるけど、実はコレも不要だったりするワケw
a[何番のアイテムか][何]
何の部分…0...載ってるtrue 載って無いfalse, 1...アイテム名, 2...説明
でa[0][0]てのは、0番はポーションと決めてあるので、ゲット時に「図鑑に載ってるtrue」にしてるだけ。
つまり他のアイテムなら番号を変える。ハイポーションなら1番てこと。
仮にゲーム中のアイテムが50種なら開始スクリプトで50種つまり0~49番までを全部書いておく必要があるワケです
更に言うなら、アイテムとして作成してあるのだからアイテム名を表示する事も当然可能、つまりこの図鑑配列a[n][1]にアイテム名が入れてあるけど、実はコレも不要だったりするワケw
退会したユーザー(投稿日:2011/11/17 17:24,
履歴)
getVariable("a")[0][0]=true
の[0][0]のところっていじりますか?いじりませんか?
退会したユーザー(投稿日:2011/11/03 13:13,
履歴)
図鑑のスクリプト丸々コピーしたらエラーがでました。
第一引数は配列でなければいけませんというエラーが。
第一引数は配列でなければいけませんというエラーが。
退会したユーザー(投稿日:2011/08/18 02:40,
履歴)
>two2様
僕は[3][4]に座標入れてwarp関数使ったりしました^^
僕は[3][4]に座標入れてwarp関数使ったりしました^^
退会したユーザー(投稿日:2011/06/30 00:03,
履歴)
>#ここは引っかからない
の直前に全角スペースがあります。
あ、なんで全角入れる必要あったんだろ・・・
誤解を生んでしまいました。すみません。これではないようです。
>その改行は本当に見易くなってるんでしょうか…
改行しないと入らない所があるんです。したがって見易さとかではないです。
の直前に全角スペースがあります。
あ、なんで全角入れる必要あったんだろ・・・
誤解を生んでしまいました。すみません。これではないようです。
>その改行は本当に見易くなってるんでしょうか…
改行しないと入らない所があるんです。したがって見易さとかではないです。
getVariable("a")[0][1]="まじたい" getVariable("a")[0][2]= "おっさん顔の公式キャラ。\nHP 25\nEXP 2\nGold 5" getVariable("a")[0][3]=9329 getVariable("a")[1][1]="まじたいイエロー" getVariable("a")[1][2]= "まじたいの色違い。黄色は似合わないと思う。\nHP 90\nEXP 12\nGold 23"
退会したユーザー(投稿日:2011/06/27 22:20,
履歴)
文字数制限解決しました。ありがとうございます。
何度もすみません。上のように文法エラーが出ます。
getVariable("a")[28]を消すと
#aで改行するのが駄目なら、何故前の配列は引っかからず、最後のみエラーになるのでしょうか?
それともまた違う理由なのでしょうか?
getVariable("a")[26][1]="ガーゴイル" getVariable("a")[26][2]= "" #ここは引っかからない getVariable("a")[26][3]=9708 getVariable("a")[27][1]="巨大イカ" getVariable("a")[27][2]= "ただただ大きいだけのイカ。だけど強い。\nHP 1200\nEXP 300\nGold 800" getVariable("a")[27][3]=9707 getVariable("a")[28][1]="ホワイトドラゴン"#220 getVariable("a")[28][2]= "" #この行がおかしいらしい getVariable("a")[28][3]=9709
何度もすみません。上のように文法エラーが出ます。
getVariable("a")[28]を消すと
getVariable("a")[26][1]="ガーゴイル" getVariable("a")[26][2]= "" #ここは引っかからない getVariable("a")[26][3]=9708 getVariable("a")[27][1]="巨大イカ" getVariable("a")[27][2]=#a "ただただ大きいだけのイカ。だけど強い。\nHP 1200\nEXP 300\nGold 800"#ここでエラーになる getVariable("a")[27][3]=9707
#aで改行するのが駄目なら、何故前の配列は引っかからず、最後のみエラーになるのでしょうか?
それともまた違う理由なのでしょうか?
退会したユーザー(投稿日:2011/06/25 21:10,
履歴)
3-IDを抜いて出ないようでしたらokだと思います
退会したユーザー(投稿日:2011/06/25 18:30,
履歴)
# m...0=trueまたはfalse 持っているかどうか, 1=名前, 2=説明文, とします
これを
# m...0=trueまたはfalse 持っているかどうか, 1=名前, 2=説明文, 3=ID,とします
にしたら開始スクリプトが2032エラーで詰みました・・・
開始スクリプト
getVariable("a")[0][1]="まじたい" getVariable("a")[0][2]="おっさん顔の公式キャラ。\nHP 25\nEXP 2\nGold 5" getVariable("a")[0][3]=9329
通常イベント
if b[c]==getVariable("a")[i][1] setEventCharacter("event19", getVariable("a")[i][3])#キャラ変更を利用し表示する speak("No.",i+1," : ",getVariable("a")[i][1],"\n ",getVariable("a")[i][2]) setEventCharacter("event19", default)#透明に戻す elsif b[c]=="図鑑を閉じる" k=false end
なんでこうなったんでしょ。自分にはサッパリです。
退会したユーザー(投稿日:2011/06/19 10:57,
履歴)
ようやく解読できました^^
退会したユーザー(投稿日:2010/10/31 14:36,
履歴)
って図鑑ってやっぱり全て開始スクリプトですよね?
退会したユーザー(投稿日:2010/10/27 16:09,
履歴)
図鑑ってこう作るんですね!
φ(。_。*)メモメモ
φ(。_。*)メモメモ