2014-02-22

003-デバッグ中!

Comment ShareLink
«002-制作中のキャラクターなど004-DOTQ公開後記»

うまくいけば半年以内にも公開できそうな予感!
デバッグ中とはいえ、まだ制作チームでの内輪デバッグですが。

「ここはやっぱこうしたほうがいい」
「もうすこしこの辺の確率下げたほうがいい」
「スキルのダメージやりすぎ…」

などなど。

やっぱり通しでやると、今まで気付かなかったバグも多く


「どこ修正すりゃいいんじゃー!!!」


ってなる事も度々です。


そこは時間と生活費とご褒美代(なんじゃそら;)があればなんとか凌げますが、
一応我々制作者も一応成人以上になってますから、仕事だとか悩みだとか、
云々と毎日浮き沈みしながら生きてます。
あまりお金に執着したくないけれど、これから増税だとか電気代値上げだとかキッツイ現実が待っており、それまでに創作心が折れてしまわないかと心配で…心配で…

というのはまあ置いといて(・ω・)


せっかくここまで漕ぎ着けたので
久々に制作中のスクリーンショットを公開っ!






情報の閲覧や、クエストを受諾することのできる掲示板。
前回制作ブログを書いた時はまだクエストについて凝り固まってませんでしたが、ようやく着手して現在はほぼ完成の状態です。



アイテムに「クエストリスト」なるものが入って
いつでもどこでも受けたクエストがチェックできるという…
便利(?)なシステムも作っておきました。






それからそれから。
コチラはミニゲームの「釣り」ができる海岸。



プロデューサーの私が
個人的に「○○のぬし釣り」や「ブレスオブ○○○○」が好きだった
というのが反映された一品。

これのせいで制作が難航したわけではないですが
やっぱり作るのは難しかったですね(・ω・`)




コツをつかめば簡単に魚が釣れます。
オマケ的なミニゲームなので、
魚の種類は4種類、釣りエサは3種類と少なめです。





フォントはフリーのものを使用して
ゲーム本体と同梱という形で
レトロ風味を引き出したいな、と思っています。


けれど、RPGツクールXPは
同梱するだけではフォントが反映されないんですよね。。。
ヘルプのフォント変更の項目にも システムにあるフォントを判定する と書いてありました。
VXならFontsフォルダに入れておけば判定されるみたいですね。

どのみち、MSゴシックも進行上必ず使用するので
同梱予定のフォントを適用しなくても遊べるようにはしてます。
プレイヤーからしてみれば、正直

「フォントを適用しろって?メンドクセ」

ってなるよな~…(遠い目)

なるべくわかりやすいように
取扱説明書やヘルプを出すように心がけるつもりです。



願わくば、

致命的なバグが出ずに
作品が完成しますように!!!

category:
2014-02-08

RGSS-複数分岐

Comment ShareLink
«RGSS一覧

複数分岐(選択肢)を使いたい!という
XPツクラーのためのスクリプトです。

最初はちょっとだけ手間がかかりますが、
メインスクリプトを書いた後からは
分岐項目を作ってからメソッドを呼び出すだけなので
毎回ごちゃごちゃっとイベントコマンドを書く手間もなく
スッキリと管理が容易になります。…多分。



【今回の変更点】
・Interpreter 7(インタプリタ内ならどこでもok)
・Scene_Map




■Interpreter 7

わかりやすいようにスクリプトエディタの
Interpreter 7 の最後あたり(一番下のendを除く)に
以下のスクリプトを書き込みます。

def multi_select(array, cancel = false, cancel_index = 0)
 window = Window_Command.new(横幅, array)
 window.x = 横位置
 window.y = 縦位置
 window.height = 縦幅
 loop do
  Input.update
  $game_map.update
  # 戦闘中でない場合(マップ画面で)
  unless $game_temp.in_battle
   $scene.spriteset_update
  end
  Graphics.update
  window.update
  # 決定ボタンを押した
  if Input.trigger?(Input::C)
   # 決定 SE 演奏
   $game_system.se_play($data_system.decision_se)
   @answer = window.index
   break
  # cancel が true の時キャンセルボタンを押した
  elsif cancel and Input.trigger?(Input::B)
   # キャンセル SE 演奏
   $game_system.se_play($data_system.cancel_se)
   @answer = cancel_index
   break
  end
 end
 window.dispose
 return true
end

■Scene_Map


キャラクターアニメーションが止まらないようにするため
スプライトセットをInterpreter内でもアップデートできるようにします。
わかりやすい場所に以下のスクリプトを書き込みます。
def spriteset_update
 @spriteset.update
 $game_player.update
end



以下は複数分岐のイベントの例です。
複数分岐がほしいところに配列で分岐用の項目を作り呼び出します。
◆スクリプト:s1 = "分岐1"
:      :s2 = "分岐2"
:      :s3 = "分岐3"
        :
:      :@array = [s1,s2,s3,s4,s5]

ひとつのスクリプトコマンドで11までしか入れられないので
足りない分は以下のようにpushで追加できます。
◆スクリプト:s12 = "分岐12"
:      :s13 = "分岐13"
        :
:     :@array.push s12,s13,s14,s15

あとは複数分岐スクリプトを呼び出すだけです。
@arrayは分岐項目、trueはキャンセルするかどうか、
-1はキャンセル時の分岐indexです。
◆スクリプト: multi_select(@array, true, -1)
その後は分岐別のイベントを作ります。
◆条件分岐: スクリプト: @answer == -1
 ◆注釈:ここにキャンセル用のイベント
 ◆
: 分岐終了

配列は0から数えるので、ひとつ目の分岐は0になります。
◆条件分岐: スクリプト: @answer == 0
 ◆注釈:ここにひとつめの項目のイベント
 ◆
:分岐終了

「ひとつ目なら1のほうが分かりやすい」と思うなら、
インタプリタに書いたスクリプトの
@answer = window.index 部分を
@answer = window.index + 1 に変更してご使用下さい。

※マップ、バトル以外で使う事はないと思いますが、それ以外で使うとエラーが起きます。

ウィンドウの位置などを臨機応変に変えたい!
という場合は、def multi_select(ココ) に追加します。
例えば横位置と縦位置を変えたいなら
def multi_select(省略, x, y)として
window.x = 横位置 を window.x = x
window.y = 縦位置 を window.y = y に変更。
呼び出す際にmulti_select(省略, 横位置数値, 縦位置数値)
というように入ればその数値が反映されるようになります。

他にも
メッセージウィンドウのように文章オプションで位置を変えたい時は
同じように$game_system.message_positionを使って
座標を調整すればOK。Window_Messageを参考にドウゾ。



★このスクリプトを使った関連作品

category:
2014-02-05

RGSS-SPダメージ表示

Comment ShareLink
«RGSS一覧

デフォルトではSPの回復量やダメージ量が表示されませんが
SPダメージを表示した方がわかりやすいだろ!
と思う人も少なくないハズ…

相変わらず説明が下手ですが
頑張ってSPダメージ表示スクリプトを作る方法を説明させていただきます!



【今回の変更点】
・RPG::Sprite(追加)
・Sprite_Battler
・Game_Battler 1
・Game_Battler 3
・Scene_Battle 4



■RPG::Sprite

組み込みクラスなのでヘルプから持ってくる。
RGSS-ダメージ文字・動作変更」にも書いてあるのでわからない人はソッチを参照に。

以下、☆マーク部分(青文字)を追加します。

def initialize の中に追加
☆@sp_damage_duration = 0
def dispose の中に追加
☆dispose_sp_damage

☆def sp_damage(value)
 dispose_sp_damage
 if value.is_a?(Numeric)
  damage_string = value.abs.to_s
 else
  damage_string = value.to_s
 end
 bitmap = Bitmap.new(160, 48)
 bitmap.font.name = "Arial Black"
 bitmap.font.size = 32
 bitmap.font.color.set(0, 0, 0)
 bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
 bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
 bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
 bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
 if value.is_a?(Numeric) and value < 0
  bitmap.font.color.set(200, 100, 255)
 else
  bitmap.font.color.set(255, 255, 255)
 end
 bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
 @_sp_damage_sprite = ::Sprite.new(nil)
 @_sp_damage_sprite.bitmap = bitmap
 @_sp_damage_sprite.ox = 80
 @_sp_damage_sprite.oy = 20
 @_sp_damage_sprite.x = self.x
 # y位置はHPダメージとかぶらないようにする
 @_sp_damage_sprite.y = self.y - self.oy / 2 + 24
 @_sp_damage_sprite.z = 3000
 @_sp_damage_duration = 40
end

☆ここまで

def dispose_damage の下あたりに
☆def dispose_sp_damage
 if @_sp_damage_sprite != nil
  @_sp_damage_sprite.bitmap.dispose
  @_sp_damage_sprite.dispose
  @_sp_damage_sprite = nil
  @_sp_damage_duration = 0
 end
end


if @_damage_duration > 0 の下に
☆if @_sp_damage_duration > 0
 @_sp_damage_duration -= 1
 case @_sp_damage_duration
 when 38..39
  @_sp_damage_sprite.y -= 4
 when 36..37
  @_sp_damage_sprite.y -= 2
 when 34..35
  @_sp_damage_sprite.y += 2
 when 28..33
  @_sp_damage_sprite.y += 4
 end
 @_sp_damage_sprite.opacity = 256 - (12 - @_sp_damage_duration) * 32
 if @_sp_damage_duration == 0
  dispose_sp_damage
 end
end

☆ここまで

■Game_Battler 1

公開インスタンス変数に
attr_accessor :sp_damage_pop
attr_accessor :sp_damage


オブジェクト初期化に
@sp_damage_pop = false
@sp_damage = nil
追加

■Game_Battler 3

アイテムの効果適用
「HP および SP を回復」の前に
self.sp_damage = -recover_sp
追加
# HP 回復率と回復量が 0 の場合の前に
if item.recover_sp_rate == 0 and item.recover_sp == 0
 self.sp_damage = ""
end

追加

# 戦闘中でない場合
unless $game_temp.in_battle
 # ダメージに nil を設定
 self.damage = nil
 ☆self.sp_damage = nil
end

■Sprite_Battler

フレーム更新に追加
☆if @battler.sp_damage_pop
 sp_damage(@battler.sp_damage)
 @battler.sp_damage = nil
 @battler.sp_damage_pop = false
end


■Scene_Battle 4

フレーム更新(メインフェーズステップ5:ダメージ表示)
for target in @target_battlers
 if target.damage != nil
  target.damage_pop = true
 end
 ☆if target.sp_damage != nil
   target.sp_damage_pop = true
  end☆

 end



★このスクリプトを使った関連作品

category: