ツクールVX Ace 初心者救済、質問スレ Part.2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
スクリプトやイベントの組み方などが苦手な人を救済するスレです。 このスレが繁栄する事はAceの繁栄につながり、過疎スレとなるとAceの衰退につながります。 質問者を煽ったり、馬鹿にするような書き込みはしないでください。 あまり酷い場合はアクセス禁止依頼を出します。 >>708 雑魚戦はなく、固定敵でそれぞれオンオフを切り替えたいんです、アドバイスありがとうございます、試してみます! サイドビューのSceneをScene_Battleのサブクラスにして戦闘開始時に飛ぶScene自体を分岐しないとダメ ワールドマップのランダムエンカウントに特定のスイッチや変数が入ってる時のみエンカウントって出来るのかな 具体的にやりたいのは昼夜でエンカウントが変わるようにしたいんだがこれスクリプト使わないとダメかな? どうしてもランダムでやりたいなら>>712 だろうな イベント差し込みたいならシンボルにして透明にしたらいいと思うけど システム画像について分からないんですが Window画像の左上が背景色になるのはわかったんですが左上を黒に塗っても青いままなんですが何故でしょうか? ごめん716で変わってるのか じゃあツール>データベース>システム>ウィンドウカラーを変更してみて Game_Interpreterの追加定義として、 スイッチがOFFの時にスイッチをONにし、対応するキャラクタの名前を表示する スクリプトを作っています。 しかし、実行しても処理の最後のキャラクタしか名前が呼び出されません。 何が問題なのでしょうか? ソースは以下になります。 変数定義は、 i, スイッチ番号指定用の変数 j, アクター番号指定用の変数 game_variables[12],指定したアクター番号を入れておく変数、制御文字で呼び出す def test i = 82;j = 12; $game_variables[12] = j; while j <= 19; actor = $game_actors[j]; if $game_party.members.include?(actor); if $game_switches[i] == false; $game_switches[i] = true; $game_message.add("\\N[\\V[12]]が出現") end end i = i + 1; j = j + 1; $game_variables[12] = $game_variables[12] + 1; end 自分ひとりで考えても、解決策が浮かびませんでした。 よろしくお願いします……。 色々と無駄な書き方が多いけど実データと併せて見ない事にはなんとも。 「処理の最後のキャラクタしか名前が呼び出されません」という挙動になる理由はここからは読み取れない。 文意を読み取って最適化するとこういう感じかな。 指定のアクターIDからアクターID19番目までを対象に 現在パーティに含まれているかチェックしてメッセージキューに詰め込む、って事で良いんだよね。 class Game_Interpreter def test aid_start = 12 aid_last = 19 sid_base = 70 (aid_start..aid_last).each{|actor_id| actor = $game_actors[actor_id] next unless $game_party.members.include?(actor) next if $game_switches[sid_base + actor_id] $game_switches[sid_base + actor_id] = true $game_message.add(actor.name + "が出現") } end end addした時点で制御文字が変換されるわけじゃないだけ マップ名表示を画面に出し続けるにはどうすればよいでしょうか? Scene_Mapのstart時に@map_name_window.openする Window_MapNameのupdateで@show_countの減算をなくす class Scene_Map < Scene_Base alias _start start def start _start @map_name_window.open #~ @map_name_window.contents_opacity = 255 end end class Window_MapName < Window_Base alias _update update def update _update @show_count += 1 if @show_count > 0 && $game_map.name_display end end 選択肢について質問なのですが とある同人ゲームで、下図のように 通常メッセージウィンドウ枠で横二列、縦に複数の選択肢を表示してるのですが ┌────────────────┐ | 少年A ▽少年B | | おねえさん おじさん | | 少女A 少女B | | じいちゃん ばあちゃん |↓下にスクロールできます └────────────────┘ 色々ググってみたり、その同人ゲーム製作クレジットの 借用スクリプト先を探してみたのですがそれらしいものが見つかりませんでした。 やり方もしくは配布されているスクリプトを知っている方がいましたら 教えてもらえないしょうか? そのメッセージウィンドウ枠とやらが上側に表示されてたなら 十中八九ただのイベントコマンド イベントコマンドのタブ1をよく見て閃くかツール違うけどMVの新機能講座を見るか サンプルゲームのきみは勇者じゃない!2 〜ニルスのお仕事〜あたりをやれば分かる >>730 ご教授ありがとうございます、教えていただいた先を見ながら試し、 下部に表示させるスプリクトをみつけて使用したところイメージどおりにできました。 ありがとうございました 例:◯G→\◯ のように通貨単位の表示を右側ではなく左側にしたいのですが、スクリプトのどこをいじればよいでしょうか? Window_Baseのdraw_currency_value >>733 ありがとうございます! 申し訳ありませんが、スクリプトに関して無知であり、draw_currency_valueの部分をどのようにいじれば通貨単位を左に変更できるのか、よろしければ教えていただけないでしょうか? 敵の能力値を変数で決めることって出来る? 攻撃力:v1とか敏捷性v1 * 2とか あとこれって魔物図鑑でも反映される? >>734 def draw_currency_value(value, unit, x, y, width) cx = text_size(value).width change_color(normal_color) draw_text(x, y, width, line_height, value, 2) change_color(system_color) draw_text(x, y, width - cx - 2 , line_height, unit, 2) end >>735 スクリプトコマンドで $data_enemies[id].params[pn] = $game_variables[vn] 3:ホーネットの攻撃力を変数100の値に設定する例 $data_enemies[3].params[2] = $game_variables[100] id: 敵番号 初期状態では1:スライム 2:こうもり pn: ヘルプより params 能力値。以下の ID を添字とする整数の配列です。 0 : 最大HP 1 : 最大MP 2 : 攻撃力 3 : 防御力 4 : 魔法力 5 : 魔法防御 6 : 敏捷性 7 : 運 vn: 変数番号 >あとこれって魔物図鑑でも反映される? スクリプトによる 自分で確かめて 試しにやってみたけどエラーもでなければ適用もされてないなあ 戦闘テストじゃだめ? >>739 いやスクリプトコマンドでできると思うけど没案なのでなかったことにしてから以下のスクリプト導入して # 使用方法 # 敵キャラのメモ欄に以下のような書式で記述 # <攻撃力: v[1] * 99> # <防御力: v[2]> # など class Game_Enemy < Game_Battler def param_base(param_id) v = $game_variables case param_id when 0; enemy.params[param_id] = eval($1) if enemy.note =~ /\<最大HP: (.*)\>/ when 1; enemy.params[param_id] = eval($1) if enemy.note =~ /\<最大MP: (.*)\>/ when 2; enemy.params[param_id] = eval($1) if enemy.note =~ /\<攻撃力: (.*)\>/ when 3; enemy.params[param_id] = eval($1) if enemy.note =~ /\<防御力: (.*)\>/ when 4; enemy.params[param_id] = eval($1) if enemy.note =~ /\<魔法力: (.*)\>/ when 5; enemy.params[param_id] = eval($1) if enemy.note =~ /\<魔法防御: (.*)\>/ when 6; enemy.params[param_id] = eval($1) if enemy.note =~ /\<敏捷性: (.*)\>/ when 7; enemy.params[param_id] = eval($1) if enemy.note =~ /\<運: (.*)\>/ end enemy.params[param_id] end end 以下のスクリプトもくっつけておいたほうが良いな class Scene_Map < Scene_Base alias aaaa_start start def start aaaa_start $data_enemies.each{|enemy| next if enemy.nil? change_enemy_params(enemy) } end def change_enemy_params(enemy) v = $game_variables enemy.params[0] = eval($1) if enemy.note =~ /\<最大HP: (.*)\>/ enemy.params[1] = eval($1) if enemy.note =~ /\<最大MP: (.*)\>/ enemy.params[2] = eval($1) if enemy.note =~ /\<攻撃力: (.*)\>/ enemy.params[3] = eval($1) if enemy.note =~ /\<防御力: (.*)\>/ enemy.params[4] = eval($1) if enemy.note =~ /\<魔法力: (.*)\>/ enemy.params[5] = eval($1) if enemy.note =~ /\<魔法防御: (.*)\>/ enemy.params[6] = eval($1) if enemy.note =~ /\<敏捷性: (.*)\>/ enemy.params[7] = eval($1) if enemy.note =~ /\<運: (.*)\>/ end end >>736 無事できました! 丁寧にありがとうございました 戦闘画面でバトルログ・メッセージを全面的に廃止したいのですが、どうすればいいですか? vx aceのデフォルトだと戦闘経過が文章で表示されますがアレを全て消したいです ・モンスターとエンカウントしたとき「〇〇(モンスター名)が出現した!」みたいなメッセージが出ず、そのまま戦闘に突入する ・敵・味方が行動した時、メッセージ(エリックの攻撃! スライムに350のダメージを与えた! スライムは倒れた! みたいな文章)が表示されないようにする ・戦闘勝利後、(〇〇Gを獲得 〇〇の経験値を獲得!みたいな文章を消す ドラクエではなくファイナルファンタジーのような戦闘画面が理想です 何としても実現したいのでどなたか方法をお願いします! BattleManagerモジュールの$game_message.addを全部コメントアウトすればいいんじゃないかな それでも余計なメッセージが出たらVocabモジュールでそのメッセージの定数を調べて全文検索して同じくaddしてる所をコメントアウト >>745 教えて頂いた通りにやったら出来ました! 助かりました! ありがとうございます!! VXです。 ドラクエのりりょくのつえのように、通常攻撃でMPが減るような武器は作れますか? 「武器依存スキル(RGSS2)」で検索して出る所のならどうかな? >>748 ありがとうございます 「スキル使用者の装備している武器によってスキルの性能を変化させることができます」との事なので 通常攻撃に適用できるかわかりませんが、このスクリプトで一度試してみようと思います とあるイベントでゲームオーバーになって、そのセーブデータを開いたら別のイベントが始まってセーブデータが壊れるみたいなのはどうやれば出来るんでしょうか? 1度でも見たらはじめからスタートしても別のセーブデータをロードしても二度と見られないイベントとか、セーブデータじゃなくゲーム本体に影響をおこすイベントの作り方が知りたいです オートセーブのスクリプト使って ロードした瞬間ゲームオーバーになるところでオートセーブさせればいいのでは? セーブデータ壊すとかそういうの無理ではないかと。 セーブしないでそのセーブデータに影響させる変数とか宣言できるのかは知らないけど 出来たとしたら他のセーブデータすべてに影響する内容になりそう。 結論から言うと無理 自分自身を書き換える事が出来ないから 似たような事は ・スクリプトから個別セーブデータを壊す(オープンして空にして保存) ・グローバルセーブデータを作る(もしくは壊す) ・グローバルセーブの状態によってその特別なイベントを出さない で出来るけど結局以前のデータを残されてたり、ダウンロードしなおされると元に戻る グローバルセーブをゲームフォルダ以外にこっそり作れば回避は難しくなるけど セキュリティソフトによっては警告が出る というかそんなギミックは苦情が来るからやめたほうが良い >>751 自分がやったゲームはそんな感じでした、ありがとうございます調べてみます! >>752 グローバルセーブデータというのは共有セーブデータの事でしょうか? それも勉強してみます!ありがとうございます >>753 >>754 苦情が出ない程度のクソゲーつくりを頑張ります! 回復魔法の属性補正って通常属性攻撃と同じ? たとえば燃えてる系の敵に水属性有効率が200%に設定してあると仮定した時、炎に水の回復技使うと回復効果も2倍になるのかな 条件分岐のスクリプトでアクター(変数)がステートxになっているかどうかっていう表記はどうかけばいいですかね? 自己解決 $game_party.members[$game_variables[1]].state?(1) これだけでよかったのね 自分もしくは敵の攻撃・防御・アイテムを封じるステート作りたいな 独自のシステム作ろうとして 値保存用にスクリプトでグローバル変数使ってるんですが ゲームを終了して、再度立ち上げ直すとグローバル変数が初期化されてしまっています。 スイッチや変数はちゃんと保持されるのにこちらが保持されないのは 何かやり方が悪いんでしょうか。。。 ゲーム終了時にグローバル変数は保存してるの? 起動時に読み込んでる? セーブデータをいじらないといけない module DataManager class << self #-------------------------------------------------------------------------- # ● セーブ内容の作成 #-------------------------------------------------------------------------- alias _make_save_contents make_save_contents def make_save_contents contents = _make_save_contents contents[:hoge] = $hoge contents[:fuga] = $fuga contents[:piyo] = $piyo contents end #-------------------------------------------------------------------------- # ● セーブ内容の展開 #-------------------------------------------------------------------------- alias _extract_save_contents extract_save_contents def extract_save_contents(contents) _extract_save_contents(contents) $hoge = contents[:hoge] $fuga = contents[:fuga] $piyo = contents[:piyo] end end end >>766 そういうことしないとダメなんですね… 夜にでも確認してみます。 サイドビューで自軍のキャラの初期位置を移動させようとしてるんですけど http://blog.livedoor.jp/trb_surasura/archives/10203367.html これを使おうとしてるんですが、プラグインでも戦闘中のスクリプトでもエラーが起きます 恐らくMVのものだったからでしょうか、何か代替できるものがあれば教えていただきたく存じます サイドビューのプラグインはRPG探検隊様のものを流用させていただいています >>768 VX ACEの言語はRuby MVの言語はJavaScript この時点でそのまま使うなんて無理だから。 PS4のソフトをXbox Oneでやろうとしてるくらい無理な話。 >>770 やっぱり無理なんですね… ところで、VXAceでバトラーを移動させるスクリプトは見つからないんですが、サイドビュースクリプトにキャラクターの位置を指定させたりする記述はないんですかね…? 「vxace サイドビュー スクリプト」で検索すれば複数出てくるけどそれらには問題があるの? >>722 サイドビュー自体は適応できたんですよね ただ、キャラクターの立ち位置が画面上でY軸方向に上に行き過ぎているので、その位置調節をしたいんです RPG探検隊の奴だと「SideViewアクション設定」のACTOR_POSITION弄れば良いんじゃないかな? そういうことではない? >>774 あー!すいません、1番上に出ていますね…! 申し訳ないです、重ねてありがとうございました…! 敵が技出すときに動く(画像を入れ替える)ようにしたかったんだけど、攻撃時に敵のバトラー画像を変更する方法はありませんか? データベース>アニメーション>SEとフラッシュのタイミングで対象消去してエフェクトを敵グラフィックにするとか? データベース>敵グループ>バトルイベント>イベントコマンド3>敵キャラの変身を毎回やったほうがいいかな? データベース的にはアニメーションのほうがいいかもね すいません、ネット回線が落ち込んでてなかなかお礼が言えませんでしたが、今更ながら感謝させていただきます。対処できました、ありがとうございます! 戦闘中、味方パーティーが逃げだしたときに「途中から出現」する設定をしてまだ現れてない敵が 最後に強制的に現れて見えてしまうんですが何か対処法ってありますか? >778 画像が大き過ぎたのでアニメーションで無理だったので変身にしようと思ったんですが、変身(バトルイベント)って技をフラグにできるんですかね…? >>782 データベース>スキルで敵専用のスキルを作成 データベース>スキル>使用効果>その他>コモンイベントでスイッチ操作 データベース>敵グループ>バトルイベントで条件をスイッチに、スパンをモーメントとかならどうだろう? 実際試してないのでうまくいくか…… >>784 助言ありがとうございます!まだ完璧にできたわけではないですが、アニメーションさせることに成功しました。 取り敢え他の人の助けにもなるようにメモをしておくと、アニメーションのようにするにはフレーム数分の敵キャラクターの設定が必要です、設定などは>>784 さんのいう通りにすればできます。 攻撃が一通り成功したらまた追記しようと思います、改めてありがとうございました。 擬似アニメーションについて色々わかってきたので纏めておきます ・アニメーションさせる敵キャラは基本的にスキルは覚えさせないのが吉、アニメーションやスキルが暴発する可能性がある ・アニメーションをさせてから戻す場合は最初の立ち絵を最後に入れる必要がある 当たり前のことかもしれませんが、参考にして頂ければ… アニメーションは上手くいくんですが、よく見て見たら全体の動きが アニメーションもどき ↓ 実際の戦闘(移動、ダメージ、攻撃演出など) ↓ アニメーション とおかしなことになってますね… 入力しているのは スキル:スイッチON →バトルイベント:アニメーション、スイッチOFFにしてるんですが、なんでこうなるんだろう… >>782 >画像が大き過ぎた アニメーションのセル画像を複数並べて大きな1枚絵にしたら? ttp://www.dotup.org/uploda/www.dotup.org1267902.png >>789 それも考えたんですけど、アニメーション枚数もそれなりに量あるのでグラフィックの枠内に収まらないんですよね…治ればよかったんですけど(そもそも分割しても入りきってないんですけれども) アニメーションの方でも何か大きな画像を扱えるしようみたいなのがあればいいんですけどね… 自分としては移動→攻撃アニメーション→ダメージの流れが理想なんですが、攻撃のタイミングを弄る場所が見当たらないですし 細かな演出タイミングは設定ではどうにもならないと思うので妥協できない場合は スクリプトのScene_Battleを弄るしかなさそう AceでRPG探検隊様のサイドビュースクリプトを使わせてもらってるのですが アクターに魔法詠唱を指示した直後に、再びそのアクターにターンが回ってきてしまい 何事も無かったかのように命令コマンドを指示し直すことになる、という現象が時々起きます。 ただ他にも戦闘関連のスクリプトを入れている為、デフォルトのエラーではないのかもしれません。 仮にサイドビュースクリプトに限った場合、どこら辺を見直してみるべきか、ご教示頂けますと有難いです。 教会でセーブするようにして、セーブするときにいずれかのセーブ欄にちゃんと記録したときと キャンセルしたときで神父のメッセージが変わるようにするのって 難しいんでしょうか? 例えば @セーブ欄1に記録したとき 神父「無事書きとめました。 他に何か用はありますか? Aセーブせずにキャンセルしたとき 神父「書きとめなくてよろしいのですか? それでは 他に用はありますか? という感じになるようにしたいのですが。 >>793 まず問題の切り分けを自分でやってもらえるかな? サイドビュー戦闘以外の戦闘関連スクリプトを全部外して起こるかどうか 無数にあるスクリプト素材が相互にどう影響するかは誰にも分からないし入れる順番で起こる現象も違うから >>794 こいつを応用してみて class Scene_Save < Scene_File alias _on_save_success on_save_success def on_save_success _on_save_success $game_switches[123] = true #セーブしたらスイッチ123がONになる end end ところでなんですが、キャラチップの仕様として!$で大きなキャラチップも使えますがアニメーションにも同様な仕様はないですかね? >>794 class Scene_File < Scene_MenuBase alias _start start def start _start $game_variables[123] = 0 #セーブしなければ変数123に0代入 end end class Scene_Save < Scene_File alias _on_save_success on_save_success def on_save_success _on_save_success $game_variables[123] = 1 #セーブしたら変数123に1代入 end end class Scene_Load < Scene_File alias _on_load_success on_load_success def on_load_success _on_load_success $game_variables[123] = 2 #ロードされたときは変数123に2代入 end end ファイル名頭に$を入れたアニメーションはビッグサイズで表示するテスト class Sprite_Base < Sprite def big_size 384 end def animation_set_sprites(frame)#override cell_data = frame.cell_data @ani_sprites.each_with_index do |sprite, i| next unless sprite pattern = cell_data[i, 0] if !pattern || pattern < 0 sprite.visible = false next end sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2 sign = (pattern < 100 ? @animation.animation1_name : @animation.animation2_name)[/^\$./] size = sign ? big_size : 192 sprite.visible = true sprite.src_rect.set(pattern % 5 * size, pattern % 100 / 5 * size, size, size) if @ani_mirror sprite.x = @ani_ox - cell_data[i, 1] sprite.y = @ani_oy + cell_data[i, 2] sprite.angle = (360 - cell_data[i, 4]) sprite.mirror = (cell_data[i, 5] == 0) else sprite.x = @ani_ox + cell_data[i, 1] sprite.y = @ani_oy + cell_data[i, 2] sprite.angle = cell_data[i, 4] sprite.mirror = (cell_data[i, 5] == 1) end sprite.z = self.z + 300 + i sprite.ox = size / 2 sprite.oy = size / 2 sprite.zoom_x = cell_data[i, 3] / 100.0 sprite.zoom_y = cell_data[i, 3] / 100.0 sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 sprite.blend_type = cell_data[i, 7] end end end マップを飛ばすと座標がずれる(X:左に8Y:上に36くらい)んですが、これってマップが大きすぎるのと関係あるのでしょうか?マップの大きさは51×310で、マップチップを組み込むものではなく背景をもとに作ったマップです すいません、飛ばした先の座標がずれるというのは誤りでした、正確には、マップの背景と指定したマップチップの位置がずれる、でした マップの位置情報が左上にずれる感じです >>795 返信ありがとうございます。確かにそうですよね。もっと正確に把握してみます。 >>804 parallax mappingかな? ループさせると遠景とマップチップのスクロール速度が違うからずれて見えるけど 遠景は固定? >>806 詳しくないので単語はよくわからないんですが、ココ数時間調査して見て分かったことを書いておきます… ・導入したスクリプトは関係ない(新規プロジェクトにて同様の問題が発生したことを確認) ・マップを小さくしてみたり、飛ばし先の座標を変更してもバグる 実際に起動した時のバグり方としては、マップのシステム情報(動ける範囲や画像(マップ)の端の設定など)が左上に寄せられ、左上の限界位置はそのままといった感じです、感覚的には右と下の枠を同倍率で狭めている感じでしょうか ○マップの基本設定 スクロールタイプ:ループしない 大きさ:51×310 使用タイル:自前で用意した透明タイル二種(歩行可能、不可能) すいません今マップを歩いていたら上部26マス分も歩けませんでした、もう自分には何が何だか… >>807 遠景自体はループしない設定? 遠景のCGサイズはマップの大きさと同じ? 遠景を床にするスクリプトは入れてる? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる