2012-04-07

RGSS-購入・売却モードを別々に

Comment ShareLink
«RGSS一覧

どこのお店も購入と売却の両方ができちゃうのって
なんだかおかしいような…と思った事、ありませんか?
そんなアナタはちょっぴりリアリスト(笑)

あまり必要ないかな~とも思ったんですが
売却機能のない、販売オンリーの店を多くして
ほんの一部でしかアイテムを売れない! というシステムにすると、
意外と難易度やゲームバランスがとれたり。
また、現実を舞台にしたゲームを作る場合にも
効果的なのではないでしょうか。

というわけで、今回もやっちゃいました。
商品リストをスクリプトで管理するのは面倒なので
ショップの処理をそのまま利用します。



【今回の変更点】
・Scene_Shop



■Scene_Shop

「メイン処理」のトランジション実行の前に
下記を追加します。
case $buyorsell
when 0 # 購入モード
 @buy_window.active = true
 @buy_window.visible = true
 @status_window.visible = true
when 1 # 売却モード
 @sell_window.active = true
 @sell_window.visible = true
end

ここで登場するグローバル変数($buyorsell)は
ショップのモード管理に使用するだけなので、
分かりやすい名前を付けておけば大丈夫です。
好きな名前でいいです。

購入・売却を選択するコマンドは必要ないので
@command_window、@dummy_window
に関する項目を消します。

dispose、update、
「フレーム更新」79~83行あたりの
if @command_window.active…(4行)と
100~143行あたりの
「フレーム更新 (コマンドウィンドウがアクティブの場合)」
の項目も消去。

「フレーム更新 (購入ウィンドウがアクティブの場合)」
「フレーム更新 (売却ウィンドウがアクティブの場合)」
はどちらも、
# ウィンドウの状態を初期モードへ
@command_window.active = true
@dummy_window.visible = true
@sell_window.active = false
@sell_window.visible = false
@status_window.item = nil
# ヘルプテキストを消去
@help_window.set_text("")

を消して、
代わりに
# マップ画面に切り替え
$scene = Scene_Map.new

を追加します。
Bボタンが押された場合、
コマンドウィンドウへ行くのではなく
マップ画面に戻るようにします。


あとはイベントの編集で
モードを設定し、ショップの処理を実行するだけです。

イベントの編集で「ショップの処理」を使用する際は
ショップの処理の前に必ず
イベントコマンド「スクリプト」に
$buyorsell = 数値を書いて挿入して下さい。
ここに書いたやり方ですと、
0が購入モード、1が売却モードになります。

ショップの処理の商品リストに
ひとつでもアイテムを入れていないと
「商品リストが空です」と出てしまうので、
売却モードの場合特に商品リストは反映されないので
適当にひとつ、アイテムを登録しておきましょう。



デフォルトの表示だと
コマンドウィンドウを使わなくなると上にスペースができてしまうので、各ウィンドウの位置を調整したりと工夫する必要がありそうですね。

category:
2012-04-05

RGSS-レベルアップ・戦闘終了後に全回復

Comment ShareLink
«RGSS一覧

HP・SPが低めでギリギリの戦闘を楽しめる
そんなゲームを作る際にオススメなのが
戦闘終了後にHP、SP、状態が全回復するシステムです!

ちょこっとスクリプトを変更するだけなのでカンタンに作れます。
また、レベルアップ時のみ全回復する方法も書いておきますね。
…とは言っても、もともとある全回復のメソッドを呼び出すだけなので非常に簡単です。



【今回の変更点】
・Scene_Battle 1(戦闘終了時)
・Game_Actor(レベルアップ時)




■Scene_Battle 1

131~157行あたりの「バトル終了」の項目

# バトル用ステートを解除
for actor in $game_party.actors
 actor.remove_states_battle
end

この actor.remove_states_battle 部分を
actor.recover_all に書き換えるだけです。
これで勝利・敗北・逃走・バトル中断時にパーティのHP、SP、状態が全回復します。
remove_states…を書き換えてしまうのは、recover_allでステートも回復してしまうので「戦闘終了後回復するステート」の解除が必要なくなるためです。

■Game_Actor

レベルアップ時に全回復、という場合は
「EXPの変更」にある
@level += 1 の下に
recover_all を追記するだけです。

必ずこの下じゃないとダメだよ~ってコトはないですけど。
レベルアップしたら全回復、とわかりやすい順番に
記述した方がいいかな。と(´・ω・`)



よくあるシステムですが、これだけでも結構アイデアの幅が広がると思います。
ゲームはシステム重視か、ストーリー重視かと
悩みどころですが…
システムもストーリーも面白いのが一番ですよね(*・ω・*)
完成できるかどうかというのが最優先の気もしますが。。。

制作、頑張っていきましょう!!

category:
2012-04-02

RGSS-ダメージ文字・動作変更

Comment ShareLink
«RGSS一覧

ダメージのふち色や文字の色、書体を変えたい!
と思って、スクリプトエディタと睨めっこしても
ダメージ表示の詳細が見つからない…
そう思ってたら、ヘルプの中にありました!
読んでみるものです、ヘルプ(・ω・)
とりあえず、RPGツクールXPのヘルプを開いてみましょう。



【今回の変更点】
・RPG::Sprite(追加)



■RPG::Sprite

RGSS組み込みクラスなので、デフォルトのままでは
スクリプトエディタ上に「RPG::Sprite」はないので
ヘルプに記載されている定義をコピーしてエディタに持ってきます。

まずはRPGツクールXPのヘルプを開き
RGSSリファレンス>ゲームライブラリ>組み込みクラス>RPG::Sprite
を開きます。

RPG::Spriteの下の方にある「定義」
スクリプトがつらつら~っと記載されている部分をコピー。
スクリプトエディタの一番上に貼り付けます。
これでRPG::Spriteがエディタに貼り付けたものに
再定義される事になります。

注釈がないのでスクリプト始めたばかりだと
「わけわからん!!!」って思うかも知れませんが
そんな方は「def」部分に注目!

ダメージ文字の変更


disposeやらcollapseやらと書かれていますね?
丁度def collapseでくくられてるとこの下あたりに
def damage(value, critical)とあります。
ここがダメージ文字の描画部分です。

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(176, 255, 144)←回復色
  else
 bitmap.font.color.set(255, 255, 255)←ダメージ色
end


上記にboldやitalicを追加して、
太字や斜体表示にする事もできます。

青色にした4つの項目は文字の縁取りの役目をしています。
縁が必要ない場合は、縁取り色のカラーセットと一緒に
消してしまっても大丈夫です(・ω・)

この下にある、クリティカル表示の設定も同じように記述してあるので
ついでにクリティカル表示の色などを変更してみるのもいいかもしれません。

"CRITICAL"表記を
"会心の一撃"や"痛恨の一撃"に変える事もできます。



ダメージポップ動作の変更


こっちは「def update」の中身です。

if @_damage_duration > 0
 @_damage_duration -= 1
 case @_damage_duration
when 38..39
 @_damage_sprite.y -= 4
when 36..37
 @_damage_sprite.y -= 2
when 34..35
 @_damage_sprite.y += 2
when 28..33
 @_damage_sprite.y += 4
end
@_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
if @_damage_duration == 0
 dispose_damage
 end
end

…という所を探してみてください。

主に変更するのはsprite.xとyです。
ここを調整すればダメージポップの動作が変わります。
when 数値..数値は
表示される時間(@_damage_duration)と関係しているので
ここの数値を変更したり、
whenを増やして動きを細かくする事もできます。



書体を変更する際は、遊ぶ側の事も考えて
MS明朝、MSゴシックなどの
初期から入っているような書体を選びましょう。
変わった書体を使用したい時は
自作か、再配布が可能な(配布に許可をもらっている)書体をゲーム配布時に同梱するといいかもしれません。

書式を変えるだけでも、雰囲気は大分違ったものになります。

category: