FC2ブログ

Appendix

広告

ゲーム

Entries

装備変更時の効果音

久しぶりのスクリプト小ネタ。

装備変更時にはなぜか決定効果音と装備変更効果音が同時になりますが、あれってやっぱり無いほうがいいですよね。

スクリプトの中身見ると決定SE消さないのは、わかってても面倒だから放置してるっぽい気はします。
実際、鳴らさないようにするには、いろいろと手を加えないといけなくて面倒です。

なのでいっその事、鳴らさないのではなく鳴らした後SEを停止して装備変更SEを鳴らすというものにしてみました。


class Scene_Equip
  #--------------------------------------------------------------------------
  # ◯ コマンド[最強装備]
  #--------------------------------------------------------------------------
  alias _wdtk_command_optimize command_optimize
  def command_optimize
    Audio.se_stop
    _wdtk_command_optimize
  end
  #--------------------------------------------------------------------------
  # ◯ コマンド[全て外す]
  #--------------------------------------------------------------------------
  alias _wdtk_command_clear command_clear
  def command_clear
    Audio.se_stop
    _wdtk_command_clear
  end
  #--------------------------------------------------------------------------
  # ◯ アイテム[決定]
  #--------------------------------------------------------------------------
  alias _wdtk_on_item_ok on_item_ok
  def on_item_ok
    Audio.se_stop
    _wdtk_on_item_ok
  end
end



面倒くさいスクリプト作らずに小ネタ程度の量で済みました。
ですが、もしかしたら環境によっては一瞬決定SEが聞こえるかもしれないので、そこだけはご了承ください。

他のスクリプトが入ってない限り、多分大丈夫だとは思います。



ちょっとまた乗り物疑似3D化スクリプトのオプション作ってみようかと思い立ったのが前回の更新日辺り。
作り始めたときはすぐできるんじゃないかと思っていたけど、とんでもない間違いだった。

今までXからYを求めていた式を、YからXと逆計算できるようにするだけなのに、どうしてもこれがうまく行かない。

使う数値や式はだいたいわかってるのに、それらをどう組み合わせても思い通りの結果が出ない。

ひたすら悩み続けて出した答えが、YからじゃXを求められないという答えでした。
もっと数学に強い人なら分かるんでしょうけど、私にはこれが限界。

計算式で求めるのが無理なら、条件分岐やループ使って多少強引に導き出すしか無い。
と思ってもそれすらどうしていいかわからない。

もう適当に数値打ち込んで、適当な補正加えて、それっぽい動きをしてくれればいいやってことで一週間以上かけてやっと出来ました。

計算式1つだけ、ね。


今まで作ってきたスクリプトの中で、間違いなく一番苦戦した式です。
なんかもうこれでちょっと力尽きました。
なので、いつ完成するかわかりません。内容も秘密。



それとは別に、乗り物疑似3D化スクリプトのVXバージョンも作ってみようかなと思ってたりします。

でも、違う部分を修正するだけと思っていたのですが、これまたいろいろと厄介です。
VXAceばかりやってたせいか、VXのスクリプトの動きがあまり頭に入ってません。

これまた非常にスローペースなのでいつになるかわかりません。


『箱庭の勇者たち』はいろいろと紙にメモしたり頭のなかで組み立てたりばかりで、プロジェクトには全く手をつけてません。


ようするに最近は殆ど進展なし!

...続きを読む

移動ルート設定の処理改善

イベントの実行内容と移動ルートの設定とでは、処理の仕方が若干違ったりします。

イベント処理では1フレーム内に実行できるものは、全て1フレーム内で行います。
スイッチや変数の操作、アイテムやお金の増減など、ウェイトが必要ないものは全て一瞬で処理します。
ウェイトや文章表示などが実行されると、処理が一旦中断されます。

移動ルートの設定はというと、1フレームで1行処理します。
向きの変更や各種フラグのON/OFFなど、同時に出来るような処理でも1フレームに1つずつです。

つまり、移動ルートの設定は1行毎にウェイト1が入っているような状態です。


とはいっても、1フレーム処理が遅れて困るなんてことはそうはないでしょう。

ある処理を除いては・・・

その処理とは、グラフィックの変更です。
正確には、グラフィックの変更を使ったキャラクターのアニメーションです。

「アクイ ト アイ」ではキャラクターがちょこちょこ動作を見せます。
こういうふうにキャラクターに動きを付ける場合、グラフィックの変更と向きの変更を使って行います。
場合によってはスクリプトでパターンも変化させます。

しかし、先にもあげたように、移動ルートの処理は1フレーム1つです。
グラフィックの変更と向きの変更を同時に行なってはくれません。

そうなるとどうなるかというと、一瞬だけおかしなグラフィックが表示されてしまいます。

グラフィックの変更→向きの変更とやると、一瞬グラフィックの変更後のキャラクターが写り、
向きの変更→グラフィックの変更とやると、一瞬向きを変えたキャラが表示されてしまいます。

たかだか1フレーム。
しかし見えてしまう以上、プレイしてる人に違和感を与えてしまいます。
せっかくゲームにのめり込んでいる時に、あれ?っと別のことに意識が行ってしまうのは、あってほしくないことです。

なので、1フレーム内で処理できるものは処理してしまうスクリプトを作りました。


class Game_Character
  #--------------------------------------------------------------------------
  # ◯ ルートに沿った移動の更新
  #--------------------------------------------------------------------------
  alias _wooden_ex_update_routine_move update_routine_move
  def update_routine_move
    if @wait_count > 0
      @wait_count -= 1
    else
      _wooden_ex_update_routine_move
      if @move_route_forcing && @move_succeed && stopping? &&
        @wait_count == 0 && @move_route_index >= 0
        update_routine_move
      end
    end
  end
end



alias使ってますが、再定義でもいいような内容です。

ループ使っても良かったんですが、再帰呼び出しというのを使ってみたかったのでこんな感じです。
再帰呼び出しというのは知っていましたが、使ったのはこれが初めてだったりします。
またひとつかしこくなった!



話は変わって

「ぼくらの大革命!」の不具合修正とともにちょっと機能追加中です。
「アクイ ト アイ」を作った時に、リトライ機能をつけるのに作ったクイックセーブスクリプトが使えるんじゃないかと思って、付け足してます。
ワールドマップから町やダンジョンに入った時に自動で保存され、いつでもその状態までやり直しが出来るようにしたいなあと思ってます。

あと、1歩後退機能が付けたい所。
ただ、あの隊列スクリプトがちょっと特殊なので、1歩下げるというのがなかなか難しかったりします。
これは諦めるかもしれません。

あとはキャラクターの挙動を調整したいところなのですが、何百個もあるイベントを一つ一つ修正というのは非常につらいものがある・・・

まあ、あまり力を入れても仕方ないので、適当にきりがついたら更新しようと思います。

...続きを読む

移動完了までウェイト

イベント作ってる時にたまに困るのが、文章をちゃんと読みながら実行した時と、ボタン連打でスキップした時とで、キャラクターの位置が変わってしまうことです。

原因は前の「移動ルート設定」の実行が終わる前に、次の「移動ルート設定」が実行されて、前のが上書きされてしまうことです。
「アクイトアイ」ではキャラがちょこちょこ動く上に、文章スキップ機能も付いているのでよく悩まされました。

「移動ルートの設定」には「移動が終わるまでウェイト」というのもありますが、これだと会話文表示しながら動かすということができません。

ようするに、XPでいうところの「移動完了までウェイト」が欲しいんです。

というわけで作ってみました。


class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 移動ルート強制中の間ウェイト
  #--------------------------------------------------------------------------
  def wait_for_forcing
    Fiber.yield while $game_player.move_route_forcing
    Fiber.yield while $game_map.events.any? {|*,ev| ev.move_route_forcing }
  end
end


スクリプトは以上。メソッド名は適当です。
後はこの wait_for_forcing を、イベントコマンドのスクリプトに書くだけです。

移動ルートを実行中のイベントがひとつもない場合は、1フレームもウェイトしません。
安心して適度に挟んでおきましょう。

20130321b.jpg

こんな感じで使えばOK!



そして話はかわりますが・・・

...続きを読む

数値入力の初期カーソル位置変更

素材にするまでもない、ちょっとしたスクリプトです。


数値入力処理を行うときのカーソル位置って一番左側が標準になってますよね。
これってたまに不便だと思う時があります。

パスワード入力なんかでは左からでも結構です。
むしろそのほうが自然といえるでしょう。

しかし!

金額を入力するとなると、私は右側からじゃないと入力しにくくて仕方ないです。

なぜなら、カーソルを左に動かしながら「一、十、百、千、…」と数えているからです!


・・・わかってくれる方、いますよね?

というわけで、カーソルの初期位置を右側にするだけのスクリプトです。


#==============================================================================
# ■ Window_NumberInput
#==============================================================================
class Window_NumberInput < Window_Base
  #--------------------------------------------------------------------------
  # ◯ 入力処理の開始
  #--------------------------------------------------------------------------
  alias _wooden_init_start start
  def start
    _wooden_init_start
    @index = @digits_max - 1 if $game_switches[1]
  end
end



$game_switches[1] はスイッチ一番のことなので、スイッチ1がONのとき右側が初期位置になります。
数字を変えれば別のスイッチになります。


そして、この記事書いていて思ったのですが、私はこういうしょうもないスクリプト書いてるほうが性に合ってる気がします。
こういう小ネタは色々あるので、ちょくちょく出して行く予定。

そのうちいっぱいになったら、まとめようと思います。


あと一応書いておきますが、当然ながらこの程度のスクリプトに利用規約は適用されません。
使うのも改造も自由です。

...続きを読む

Appendix

プロフィール

木星ペンギン

Author:木星ペンギン
ほぼツクールのことばかり書いてます。
名前は↑から取りました。
木製ですが木星です。
トカゲは関係ありません。

ゲーム

  • 箱庭の勇者たち(体験版)
  • アクイ ト アイ
  • ぼくらの大革命!
  • 勇者がやらねば俺がやる!
  • 3Turn Battle!
  • 3TurnBattle!2nd
  • 走ってぶつかるゲーム

メールフォーム

wood_penguin@yahoo.co.jp

名前:
メール:
件名:
本文: