投稿記事

まるちゃん 2020/02/10 21:10

選択肢拡張のスクリプト

たまにスクリプトを作っていてこれ頭いいんじゃない?
って思うときが自分にはあります
eval というコマンドを発見して能力値を自由に設定できるスクリプトを
作ったときも自分は天才だって思っちゃいました ^^;
binding コマンドを発見したときは ruby ってすげーってなりました

また、そう思ってもしばらくすると大したことなかったなってときもあります
今回がそれでした。スクリプトとしては不完全ですね
動作確認をしっかりとしないですげーのできたと思ったら
そうじゃなかったっていう話でした
メッセージウィンドウが閉じてしまうのはいただけない

選択肢拡張のスクリプトは数多いと思いますが使うのが難しくありませんか?
別に批判してるわけじゃなくて、自分3行以上の文章が読めないっていうか
3行以上読む忍耐力がなくてわからんからいいやってなります
今回はまだアップグレードのシーンが納得行かなくて
また作っています
そのときにメッセージウィンドウを使って作ろうってことになって
スクリプトを使い文章を入力したりしてました
しかし、マルチバイト文字?とか言うののせいで
幅をきっちり合わせることができなくて断念しようかどうかとういところです


左側がスクリプトを使ってシーンを作りました
右側がメッセージウィンドウを使ったものです
そのときに選択肢もスクリプトで入力したんですけど
sprintf 構文で %12d でやってるのに右揃えにならないんですね
だからシーンを作るしかないのかなぁって

そのときにスクリプトを使って文章の表示をしたのです
$game_message.add(text) を使うことで表示できるのですが
その後にイベントコマンドで選択肢の表示をすると
メッセージウィンドウを一度閉じてから出ないと選択肢が表示されません
なので選択肢の表示もスクリプトを使い操作する必要がありました
ツクールではどのように選択肢を表示しているのかというと詳しくはここです

[[RGSS3]ツクールVXAceのスクリプトで選択肢の表示を行う方法]
(http://rpgmaker-script-wiki.xyz/sentakusi_vxace.php)
どういう感じか見るのにすごく役に立つページです

Ctrl + Shift + F で選択肢で検索して Game_Interpreter にあるのを見ました
setup_choice(@params) とあります
@params の内容は配列で [["はい", "いいえ"], 2 ] という感じです
第1引数が選択肢に表示する内容で配列を持ちます
第2引数がキャンセルの場合の index を示します
イベントコマンドでは "はい" が1番目の選択肢になります
プログラマーの人は0から数えてしまいがちですが違います

またスクリプトを使うので選択肢が4以上の場合も可能になります
[["1", "2", "3", "4", "5"], 6]と @params の場所にかけばおkです

多分正確にやるにはイベントコマンドのスクリプトにこう書きます
(def command_102 をみてください)
自分は setup_choice のみしかしてないけど動いてます

wait_for_message
setup_choices(@params)
Fiber.yield while $game_message.choice?

紹介した URL でも同様のことをしています
その後にどの選択肢を選んだかを調べるのが case $branch より下です
これは面倒ですのでスクリプトで解決しました

選択肢拡張.txt (1.02kB)

ダウンロード

Window_ChoiceList の call_ok_handler と call_cancel_handler で
どの選択肢を選んだのか変数を代入するスクリプトを作りました
つまり case $branch より下の処理がいらなくなります

もう少しこのスクリプトを使いやすくして
表示位置とか設定できるようになるといいなぁと…
自分が3行以上読めないのに説明するのに何行書いたんだか…

使い方のまとめ

イベントコマンドのスクリプトに以下のように書く
setup_choice(@params)
@params には例として [["1", "2", "3", "4", "5"], 6] とかく
6 というのはキャンセルしたときのインデックスです
選択肢は0からではなく1から数えます
CHOICE_INDEX には選択肢を選んだときの index を保持する
イベントコマンドで使用する変数の番号です


7行…

選択肢拡張|しいたけサイクロン
http://tentako.blog-fps.com/rgss/選択肢拡張
なんかこれのほうがもっとスマートかも…
唯一いいところは新たな関数を作らずにデフォルトのままできたところ

更新

まだちょっと安定した動作っていうのが望めないのかもしれない
Proc.new っていうのがよくわからない
なんか値が残って変な動作するかもしれない

$game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
これの書き方を変えたほうがいいのかも
Proc.new {|n| $game_variables = n } これでいいのかもしれない?
ぬ?難しいなメッセージウィンドウが閉じてしまう
スクリプトだけで作っているときはそうではなかったのに…
メッセージウィンドウが閉じてしまうのはだめだ!
もう少し作り直すか諦めます
しいたけサイクロンさんの使うといいと思います

Proc というのは通常関数を定義して内容を書きます
def foo
var = 1
end
みたいな
でもこの関数定義をしなくても内容だけ作れるっていうものみたいです
あれ?これすごそうだぞ!?

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2020/02/07 16:00

久しぶりにゲーム制作

ちょっと私生活が安定しなくてボーッとしてました
気持ちも落ち着いてきたのかゲーム制作をまた再開しました
現在はダンジョンを制作しています
宝箱のドロップをどうしようか悩んでいます


ダンジョンはこれです。もう少しかっこよくする予定ですけど
殆ど変わらない予定です。もうこれでいいです
ランダムダンジョンを探索してとか歩くのが面倒すぎて嫌です
シンボルエンカウントの自動生成マップでダンジョン探索がかったるいのです

100回戦闘します。そのための戦闘速度変更と自動戦闘機能を作りました
一生懸命リザルト画面やゲージを動かすスクリプトを作ったのですが
実際やってみると自分は邪魔だなぁと思いました
このゲージが動く時間すら惜しいっていうか…
ゲーマーがゲームを作るのには向いてないと確信しました

規定レベル以上のとき戦闘をスキップできる機能と
入手経験値を下げるのがあってもいいかなぁと思っています
戦闘シーンにいかないで勝利したものと考えてドロップや金と経験値を計算する機能です
でもその機能があると雑魚ダンジョンに篭ってレベル上げとかされるので
それをさせないようにレベルが既定値だと入手できる
経験値が少なくなる機能をつけたいと思います


ダンジョン内ではいくつかルールを決めました
敵を倒すと敵のレベルが1上昇する
敵の経験値と金はレベルを乗算した数値になる
1ターン以内に敵を倒すと入手経験値が2倍になる
1ターン以内に敵を倒すと敵の出現数が1増える
* 敵表示可能数が限界に達したとき敵を倒すと上がるレベルが2になる(未調整)

敵の最大出現数はA~Zの26体としました
敵1、敵2とかにしてもいいんですけどデフォルトのままでいいかなって
一応考えてステータスも作っているので結構殺されます
ダンジョン1なので通常攻撃のみしか考えていません。でも結構殺されます

このダンジョンは属性攻撃に弱いので最初に魔法使いを雇い
俊敏性が上昇する服装備と武器を強化すれば簡単にかてるようにしました
スピード&パワーって感じです
一応後半の敵はHPを多くしたのですが属性攻撃は2倍なので…
全撃という全体物理攻撃スキルもあるので、これだと少し時間かかるかなぁぐらいです
ダンジョン2では魔法防御力をあげようかなぁと思っています
自分事ですが Quick Save を作ってよかったなぁと
わざわざセーブ画面出さなくていいのですごい楽です

なにかダンジョンごとに攻略方法を与えたいと思います
ダンジョンは合計して9つ作ることにしました
ボスモンスターのキャラチップが9つしか用意できなかったからです

スクリプトをいくつか更新しました
装備アップグレードが参照する変数を間違えていて探すのが大変でした
もう一つはログ表示スクリプトの安定版です
Window_ScrollText というのがあり self.oy を移動させれば簡単に作れました

装備アップグレード.txt (装備アップグレード.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
https://ux.getuploader.com/Rpg_Maker_VXace_Maruchan_Uploard/download/66

ログ表示.txt (ログ表示.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
https://ux.getuploader.com/Rpg_Maker_VXace_Maruchan_Uploard/download/65

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2019/12/20 17:06

装備のステータスを考え中


Window.zip (5.59kB)

ダウンロード

ウィンドウ余白詳細設定.txt (4.74kB)

ダウンロード

ゲージの幅を変えたくて色々頑張ったんですが無理でした
スクリプト作っている人にはわかってもらえると思うんですけど
作ってない人は説明が下手すぎて伝わらないかもしれません

スプライトカーソルにしようと作ってみたはいいものの
なにげにデフォルトのカーソルは文字が書かれているところは多い重なっていません
文字が見えづらくなるっていうか…
Bitmap 拡張の物を使うと解決できると思うんですけど
ただの小物のスクリプトに他のスクリプトが必須っていうのは嫌でした
スプライトの上に更に window の contents の内容を重ねようとしました
でもそれってカーソルをスプライトにして
ウィンドウの内容を別のスプライトで用意するものです
カーソルをシュッシュッシュて動くようになるにはなるんですけど…
Sprite の中に draw_text して中身を描画することもあったんですが
せっかく Sprite を作って動かすことを考えると意味ないっていうか
動かすと文字も動かさないとおかしなことになります
さらに Sprite をわかりやすいように光らせると文字も光ってしまう
だから Sprite を2つもつ Spriteset みたいなのを作る必要があります
また座標が微妙にずれていて…

それだったらウィンドウの中身だけを表示するウィンドウを
ウィンドウの中に作ることにしました
なんかそれって違うよなぁって…
でも一応それで予想していたものは作れたけれど…
高さの padding は変更できません line_height を考えると
次の行が微妙に見えてしまって変だから変えられないことにしました
line_height = 16 のとき padding も 16 にするってなればセーフかなぁ?

ツクールのウィンドウの余白の部分は padding というもので設定できます
これは上下左右すべて同じサイズになるものです
上下は 12 px にして左右は 4 px の余白にしようということはできません
padding = 0 にして作って
contents_width = width - 4 * 2
contents_height = height - 12 * 2
みたいにしてやればそれっぽくはなるんですけど
しかし、Bitmap の座標は指定できないので左上に固定した形になるっていうか
padding = 12 にしてもやっぱり
(padding, padding, contents_width, contents_height)
この Bitmap が生成される

どうでもいいこと作っていて
でも作れないのが悔しかったので作りました


今度ゲームで使用するシステム素材を作りました
使いたい人は自由に使ってください


装備のステータスを考え中なのは短剣と爪です
今ステータスを価格に変換して考える作業をしています
攻撃力、防御力、魔法力、魔法防御力、俊敏性、運を
今の所1ステータスを10Gとして考えています
俊敏性と運はもう少し安くてもいいのかと思いますが
今回俊敏性は回避率にも影響を与えるので強いステータスです
今悩んでいるのは回避率の価格をどう設定するかです
一応決めていてこれでいいのかなぁって

<EVA (level + 1) * 0.0020> の価格を
<Price 20 + 30 * level ** 1.28> としたところで
クリティカル率も同じでいいのかな?今思った
<EVA (level + 1) * 0.0025>
<Price 50 + 40 * level ** 1.28>
こんなふうに考えています

1.28 乗しているのは価格は性能によって徐々に価値が上がるとして
ちょっと価格が二次関数的に伸びる感じです
これは僕の大好きなゲームの GrimDawn の敵のHPのステータスが
こうやって決めていたので真似しています
敵のHPも同じように 1.28 乗しようと思います

装備のスクリプトエラー吐いたから違うのかなぁって思ったら
普通に動いてる?謎だ。たまにツクールってある
さっきまでそれとおらなかったのに今通ってるじゃん!みたいな
弓装備はファナジーの定番なんだけど
装備スロットを1つ損しているのが可哀想だ
盾のところに矢を装備できたりとかしたいかも
魔法使いは杖の他に盾を許可してもいいけど
やっぱり損してる感じがする。杖2刀流とかも変
新たな装備を作るのがいいかもしれない

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2019/12/16 17:00

リザルト画面のスクリプトがやっと完成!

リザルト画面.txt (リザルト画面.txt)
https://ux.getuploader.com/Rpg_Maker_VXace_Maruchan_Uploard/download/64
戦闘終了後にリザルト画面を表示する


ついに完成しました
決定キーを押したときにゲージをスキップする機能を作るのに苦労しました
わざわざ現在の状況からレベルアップする数値を考えていました
初期値に取得した EXP を加算して計算すればいいのに
回りくどいことをしていました。本当に馬鹿だった

UI をどうするかやっぱり二転三転してこれに落ち着きました


以前はこれにしようと考えていました
やっぱりアクターのHPとか表示したいなぁと思って
今の感じに落ち着きました

ようやく戦闘に使用するスクリプトを作成し終わり
本当はログを動かしたいけど、どうしようかなぁとは思っています
これから敵のステータスを作成して本格的なゲーム制作がスタートします
自分はいつもゲームを作るときこんな感じになります
システム周りを作ってデータベースを作ってからのマップとかに取り掛かります
やっぱり自分のゲームの見せるところはシステムだからだと思います

(2019/12/17)
アクターが最大レベルのときを考慮するのを忘れていました…
がっくし

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2019/12/14 11:34

色々スクリプトを修正

ターン毎に隠れ属性解除.txt (ターン毎に隠れ属性解除.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
https://ux.getuploader.com/Rpg_Maker_VXace_Maruchan_Uploard/download/61

モンスター出現数設定.txt (モンスター出現数設定.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
https://ux.getuploader.com/Rpg_Maker_VXace_Maruchan_Uploard/download/63

全ステート表示.txt (全ステート表示.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
https://ux.getuploader.com/Rpg_Maker_VXace_Maruchan_Uploard/download/62


いくつかのスクリプトを修正しました
モンスターの出現数設定にはボスの設定ができるようにしました
これは <BOSS> とエネミーのメモ欄に記載すると
単体で出現するようになり座標が固定されます
出現数を増やす方法を変更しました
例えば5体の敵がデータベースの敵グループに設定されていて
変数で最大出現数を10体としているとき
それぞれ1体ずつ敵を均等に増やすように設定しています
あるエネミーを多く出現させたい場合は敵グループに多めに設定すればOKです
逆に少なく出現させたい場合は少なめにして他の敵を多めに設定すればOKです

ターン毎に隠れ属性の解除は変数で隠れ属性を解除してモンスターを出現させます
これは 0.5 と設定すると2ターン毎に1体の敵が出現するようになります
あ!作っていないところを思い出した
隠れ属性の敵が出現する前に勝利したら
隠れている敵のEXPやGOLDを取得できるようにするのを忘れていました
でも、通常通り隠れ属性は隠したままのほうがいい人もいるかも?
僕はこれを使って通常戦闘は徐々に出現するようにして
モンスターハウスの敵はこれをなくして一気に12体とか敵を出現させようと

全ステート表示は Window_BattleStatus のゲージがグイーンってなるときに
対応しきれていなかったので少し変更しました
なんかうまく行かなくてちょっと不満の残る編集です
gauge_area_width を変更しただけです
本当は draw_gauge_area_rect のメゾットを編集したかったのですが
これを alias をつけて変更すると何故か処理がループしてしまいました


今はリザルト画面を編集しようと思っているのですが
思ったより長かったのでモチベが下がっています
エリック Lv 5(少し大きめの空白)EXPゲージ
この空白に何を入れようか考えています
普通にアイコンがいいのかなぁと思いますが
HPとかわかったほうが回復させるのは誰かわかるかなぁ?って
でもゲージが2つもあると邪魔かなぁとも思うし空白がわからない
小さく表示すればいいんですけど
Window_BattleStatus が変化したように見せたいので同じ幅にしています
もう少し UI に才能があればいいんですけど…

ちょうど画像があったので貼っておきます
Window_MenuStatus を真似て作ったほうがいいのかな?
そうすると Window_MenuCommand と同じ幅の 160 しか残りが使えない
この残りに入手アイテムや経験値を表示するのは狭すぎるような…

既存のものを使えばいいんですけど自分で1から作りたい
ゲームを作るのにスクリプトをすべて作る必要はないです
でも自分が自由に制作できる範囲というのはスクリプトぐらいしかないので
やっぱりここは自分で作ったほうがオリジナリティーが出せると思っているのです
自分ができるところは自分で作ったほうがいいと思います


最近フリーゲームで見るのは(それほどやっていない)
素材紹介ゲームとかになってしまっているような気がします
言葉で表現するのは難しいです
絵が描けるひとはそれがオリジナリティーになります
アイテムを作るのが好きならそれがオリジナリティーになります
でも素材に引っ張られてゲームを作ってしまうと
素材を紹介するゲームになってオリジナリティーが出せない
そうなってしまうのは一番悲しい結果です

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

2 3 4 5 6 7 8

月別アーカイブ

限定特典から探す

記事を検索