スクリプト/冒険に役立つスクリプト

最終投稿者:Nyan mini rurun9 更新:2011/11/20 14:39:54
RPG型ゲーム作成のテクニックとして、
これまでに掲示板などで話題に上がったスクリプトをまとめてみました。

・お金
・経験値
・図鑑

【お金】

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 )
敵の出現頻度&一匹から得られる経験値と「次のレベルまで」の伸び率のバランスが、RPGゲーム全体の難易度(Lv上げ作業の必要性)に大きく関わってきます。
あらゆる可能性を試しつつ、冗談ではなくテストプレーを死ぬほど行って調整していきましょー。


【図鑑】

入手したアイテムや、倒した敵を一覧で確認できる機能。
配列変数で管理します。


■単純追加版

開始スクリプトでリストとなる配列変数を用意しておきます
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 「お店の作り方」 ←おまけ

コメントする

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

コメント一覧

User icon mini 退会したユーザー(投稿日:2011/11/20 14:39, 履歴)
無答ワロタ
User icon mini 退会したユーザー(投稿日: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

User icon mini 退会したユーザー(投稿日:2011/11/20 10:38, 履歴)
今まで
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
と出てきました。

なぜでしょう?
      mini きゅうり(投稿日:2011/11/19 15:51, 履歴)
{{{code
文字
}}}

サンプル
文字
      mini きゅうり(投稿日:2011/11/19 15:51, 履歴)
{{{code
}}}

もしくは
[code
]

でokです。
User icon mini 退会したユーザー(投稿日:2011/11/17 19:11, 履歴)
あれ、どうだっけ、やべ、ど忘れした
User icon mini 退会したユーザー(投稿日:2011/11/17 19:10, 履歴)
↓なぜにまちがえたし
{{code
getVariable("a")[1][0]
}}}
User icon mini 退会したユーザー(投稿日:2011/11/17 19:05, 履歴)
つまり、{{{code
getVariable("a")[1][0]=true

}}}
とするといいのですね
User icon mini 退会したユーザー(投稿日:2011/11/17 19:02, 履歴)
なるほどー納得です
ありがとうございました
Nyan mini rurun9(投稿日:2011/11/17 18:09, 履歴)
図鑑用の配列aは開始スクリプトに書いた通り、コレは作ってる人が勝手に決めた俺ルール&意味なのです
a[何番のアイテムか][何]

何の部分…0...載ってるtrue 載って無いfalse, 1...アイテム名, 2...説明
でa[0][0]てのは、0番はポーションと決めてあるので、ゲット時に「図鑑に載ってるtrue」にしてるだけ。
つまり他のアイテムなら番号を変える。ハイポーションなら1番てこと。
仮にゲーム中のアイテムが50種なら開始スクリプトで50種つまり0~49番までを全部書いておく必要があるワケです

更に言うなら、アイテムとして作成してあるのだからアイテム名を表示する事も当然可能、つまりこの図鑑配列a[n][1]にアイテム名が入れてあるけど、実はコレも不要だったりするワケw
User icon mini 退会したユーザー(投稿日:2011/11/17 17:24, 履歴)
getVariable("a")[0][0]=true

の[0][0]のところっていじりますか?いじりませんか?
Nyan mini rurun9(投稿日:2011/11/04 12:02, 履歴)
単純追加版の方は、開始スクリプトにて図鑑に使う配列aをセットしないと動きませんよ
User icon mini 退会したユーザー(投稿日:2011/11/03 13:13, 履歴)
図鑑のスクリプト丸々コピーしたらエラーがでました。
第一引数は配列でなければいけませんというエラーが。
User icon mini 退会したユーザー(投稿日:2011/08/18 02:40, 履歴)
>two2様
僕は[3][4]に座標入れてwarp関数使ったりしました^^
Nyan mini rurun9(投稿日:2011/08/17 17:25, 履歴)
>two2様
speakで説明文を表示してる部分を書きかえれば良いのです。
     mini two2(投稿日:2011/08/15 10:08, 履歴)
この図鑑で、説明文ではなくなんかイベントが起こるような事をしたいのですが。
どうしたらいいでしょうか?
User icon mini 退会したユーザー(投稿日: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"
Nyan mini rurun9(投稿日:2011/06/29 20:08, 履歴)
#ここは引っかからない
の直前に全角スペースがあります。実はコレがエラッタの原因て事はないですか?

a="あ"

b=
"い"
と書いてるワケですが、その改行は本当に見易くなってるんでしょうか…
User icon mini 退会したユーザー(投稿日:2011/06/27 22:20, 履歴)
文字数制限解決しました。ありがとうございます。
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で改行するのが駄目なら、何故前の配列は引っかからず、最後のみエラーになるのでしょうか?
それともまた違う理由なのでしょうか?
User icon mini 退会したユーザー(投稿日:2011/06/25 21:10, 履歴)
3-IDを抜いて出ないようでしたらokだと思います
000 1  mini naoki(投稿日:2011/06/25 20:29, 履歴)
他に開始スクリプトを書き過ぎていませんか?
私も、作成中の「果てしない冒険の旅へ」で経験しましたが、
2032エラーは、開始スクリプトの文字数制限を超えていると思います。
開始スクリプトは、20000字まで書けますが。

ようするに、開始スクリプトに20000字以上書いていたら、2032エラーが起きたという
私の経験です。
User icon mini 退会したユーザー(投稿日: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

なんでこうなったんでしょ。自分にはサッパリです。
User icon mini 退会したユーザー(投稿日:2011/06/19 10:57, 履歴)
ようやく解読できました^^
Nyan mini rurun9(投稿日:2010/11/03 16:23, 履歴)
それぞれ、枠で区切ってある部分までですよ。

配列変数が使えないと何やってるのかサッパリでしょうから、
やはり基礎から順に覚えていかないとワカラン事が多いかと思われます。
User icon mini 退会したユーザー(投稿日:2010/10/31 14:36, 履歴)
って図鑑ってやっぱり全て開始スクリプトですよね?
Nyan mini rurun9(投稿日:2010/10/31 02:38, 履歴)
経験値でレベルアップをパーティメンバー用に対応。
図鑑を単純追加式と2次元配列式に変更しました。

「こんな考え方がある」てのが伝われば良いので、どんどん改良していきましょー
User icon mini 退会したユーザー(投稿日:2010/10/27 16:09, 履歴)
図鑑ってこう作るんですね!
φ(。_。*)メモメモ