RGSS3備忘録その5エネミー選択時のエネミーハイライト

こんばんわ( ^ω^)
いやぁ 涼しくなってきましたねぇ~。
このブログをご覧になっている皆さんにだけ、
とっておきのスクリプトを伝授したいと思います。

まずは下のスクリーンショットを見てください。
111222_01_weblog.jpg
神経質なあなたはきっと
「スライムMってどいつやねん!!(`・д・´)」
と思うはずです。

今日はそんなせっかちさんのために、
エネミー選択時に選択中のエネミーをハイライト
させるっていうスクリプトの改良をしました。
正確に言うと、選択していないエネミーを少し
暗くするんですがね。

以下スクリプトです。

module Suppon
  EnemyCursor004 = true #使用しない場合はfalseにしてください。
end

class Spriteset_Battle
  alias suppon004_initialize initialize
  def initialize
    create_enemy_cursor if Suppon::EnemyCursor004
    suppon004_initialize
  end
 
  alias suppon004_dispose dispose
  def dispose
    suppon004_dispose
    @triangle.dispose if Suppon::EnemyCursor004
  end
 
  alias suppon004_update update
  def update
    suppon004_update
    update_triangle if Suppon::EnemyCursor004
  end
 
  def create_enemy_cursor
    @triangle = Sprite.new(@viewport1)
    @triangle.bitmap = Bitmap.new(32, 32)
    @triangle.bitmap.font.size = 32
    @triangle.bitmap.draw_text(0, 0, 32, 32, "▼", 1)
    @triangle.opacity = 0
    @triangle.z = 1000
    @triangle_anime_count = 0
    @triangle_base_y = 0
  end
 
  def move_enemy_cursor(index)
    enemy_sprite = active_enemy_sprites[index]
    @triangle.opacity = 255
    @triangle.x = enemy_sprite.x
    @triangle_base_y = enemy_sprite.y - enemy_sprite.height - 10
    @triangle.y = @triangle_base_y
    change_color(index)
  end

  def active_enemy_sprites
    return @enemy_sprites.reverse.select{|e| e.battler.alive?}
  end
 
  def change_color(index)
    active_enemy_sprites.each{|s| s.set_dark_color}
    active_enemy_sprites[index].set_original_color
  end

  def end_enemy_selection
    active_enemy_sprites.each{|s| s.set_original_color}
    @triangle.opacity = 0
  end
 
  def update_triangle
    @triangle.y = @triangle_base_y + Math.sin(@triangle_anime_count) * 4
    @triangle_anime_count += 0.2
  end
end

class Window_BattleEnemy
  def select(index)
    super(index)
    call_handler(:cursor_moved) if Suppon::EnemyCursor004
  end
end

class Scene_Battle
  alias suppon004_create_enemy_window create_enemy_window
  def create_enemy_window
    suppon004_create_enemy_window
    if Suppon::EnemyCursor004
      @enemy_window.set_handler(:cursor_moved, method(:enemy_cursor_moved))
    end
  end
 
  alias suppon004_select_enemy_selection select_enemy_selection
  def select_enemy_selection
    suppon004_select_enemy_selection
    return unless Suppon::EnemyCursor004
    @skill_window.hide
    @item_window.hide
  end
 
  def enemy_cursor_moved
    @spriteset.move_enemy_cursor(@enemy_window.index)
  end
 
  alias suppon004_on_enemy_ok on_enemy_ok
  def on_enemy_ok
    @spriteset.end_enemy_selection if Suppon::EnemyCursor004
    suppon004_on_enemy_ok
  end
 
  alias suppon004_on_enemy_cancel on_enemy_cancel
  def on_enemy_cancel
    unless Suppon::EnemyCursor004
      suppon004_on_enemy_cancel
      return
    end
    @spriteset.end_enemy_selection
    @enemy_window.hide
    case @actor_command_window.current_symbol
    when :attack
      @actor_command_window.activate
    when :skill
      @skill_window.activate.show
    when :item
      @item_window.activate.show
    end
  end
end

class Sprite_Battler
  def set_dark_color
    @original_color = self.color.clone unless @original_color
    self.color.set(0, 0, 0, 150)
  end
  def set_original_color
    self.color.set(@original_color) if @original_color
    @original_color = nil
  end
end



長いですが、気にしないでください。(つω;`)
何一つ無駄はありませんから。(←嘘の確率98%)

このスクリプトをここに追加っていうところに挿入すると
こんな風になるはずです。

111222_02_weblog.jpg

これで、選択中のエネミーがどいつなのか、あるいはドイツなのか
わかるようになりました。ヤッタネ( ^ω^)

ちなみに、スキルや、アイテムのターゲットがエネミー単体の場合にも、
画面上のどのエネミーを選択しているのかわかるようにしました。
めでたしめでたし( ^ω^)
スポンサーサイト

テーマ : RPGツクール
ジャンル : ゲーム

RGSS3備忘録その4 装備ステータス完全表示

こんばんわ(`・д・´)
RGSS3備忘禄シリーズも早くもpart4です。
時の経つのははやいですねぇ( ^ω^)

今日やるのは、装備画面でのステータス画面に
最大HPと最大MPも表示させるっていうのをやります。

VX aceの装備品には、最大HPと最大MPを変化させるアイテムを
作れるようになりました。 ヤッタネ( ^ω^)
しかーし! デフォルトのままでは装備画面に最大HPと最大MPが表示されないので
パッと見ではどのくらい変化するのか、わかりません。( ^ω^)∩アウト!
そこで、今回それを表示させるスクリプトを考えました。

module Suppon
  EquipStatus003 = true #使用しない場合はfalseにしてください。
end

class Window_EquipStatus
  LineHeight = 20
 
  alias suppon003_initialize initialize
  def initialize(x, y)
   suppon003_initialize(x, y)
   self.contents.font.size = LineHeight if Suppon::EquipStatus003
  end
 
  alias suppon003_visible_line_number visible_line_number
  def visible_line_number
    return 9 if Suppon::EquipStatus003
    suppon003_visible_line_number
  end

  alias suppon003_refresh refresh
  def refresh
    unless Suppon::EquipStatus003
      suppon003_refresh
      return
    end
    contents.clear
    draw_actor_name(@actor, 4, 0) if @actor
    8.times {|i| draw_item(0, line_height * (1 + i), i) }
  end
 
  alias suppon003_line_height line_height
  def line_height
    return LineHeight if Suppon::EquipStatus003
    suppon003_line_height
  end
 
  alias suppon003_standard_padding standard_padding
  def standard_padding
    return 6 if Suppon::EquipStatus003
    suppon003_standard_padding
  end
 
end



111220_01_weblog.jpg

ちょっと窮屈ですが、我慢してください。
これ以上文字が小さいと老眼の人にはみづらいですから!(`・д・´)

では、今日はこの辺で( ^▽^)ノシ

テーマ : RPGツクール
ジャンル : ゲーム

RGSS3備忘録その3 キャラクターの回転表示

またまた、これもVXでやったやつのace版です。

111218_01_weblog.jpg


module Suppon
  Character_Rotation = true #使用しない場合はfalseにしてください。
end

class Game_CharacterBase

  attr_accessor :angle
 
  alias suppon002_init_public_members init_public_members
  def init_public_members
    suppon002_init_public_members
    @angle = 0
  end
end

class Sprite_Character
 
  alias suppon002_initialize initialize
  def initialize(viewport, character = nil)
    @adjust_y = 0
    suppon002_initialize(viewport, character)
  end
 
  alias suppon002_update update
  def update
    suppon002_update
    update_angle if Suppon::Character_Rotation
  end
 
  def update_angle
    if self.angle != @character.angle
      self.angle = @character.angle
      if self.angle != 0
        self.oy = @adjust_y = self.height / 2
      else
        self.oy = @ch
        @adjust_y = 0
      end
    end
    self.y = @character.screen_y - @adjust_y
  end
end



やり方はイベントの内容編集のスクリプトで

$game_map.events[@event_id].angle = 数値

といれてください。数値には、変えたい角度の数値を入れてね。
@event_idには、今編集中のイベントIDが入るので、
今編集中のイベントが対象となります。
ほかのイベントを操作してやりたい時は、対象にしたいイベントの番号を入れて
直接入れてください。
イベントのID番号はエディタの右下か、編集ウインドウの左上に
表示されてます。

最初から、回転された状態にしたいときは、
回転を指示するイベントを別に作って、自動実行するように
してください。

それでは、目の回る一日をお過ごしください。( ^ω^)ノシ

テーマ : RPGツクール
ジャンル : ゲーム

RGSS3備忘録エネミー大量ランダム出現

2011/12/19追記
クラスGame_Troopの @enemiesが初期化されない
バグを修正しました。


どうもSupponです。( ^▽^)
なにかと需要があるスクリプトらしいので、
今回も作ってみました。
恒例のエネミー大量ランダム出現です。( ^ω^)

111217_01_weblog.jpg

こちらがスクリプトです。
じゃじゃじゃーん

module Suppon
  Random_Appearance = true #使用しない場合はfalseにしてください。
end

class Game_Troop
 
  attr_reader :suppon001_random_troop
 
  alias suppon001_clear clear
  def clear
    suppon001_clear
    @suppon001_random_troop = false
  end
 
  alias suppon001_setup setup
  def setup(troop_id)
    unless Suppon::Random_Appearance and use_random_appearance?(troop_id)
      suppon001_setup(troop_id)
      return
    end
    clear
    @suppon001_random_troop = true
    @troop_id = troop_id
    index = 1
    enemy_size = 0
    while $data_troops[@troop_id].pages[0].list[index].parameters[0]
      a = eval($data_troops[@troop_id].pages[0].list[index].parameters[0])
      for i in 1..a[1]
        enemy_id = a[rand(a.size - 2) + 2]
        if (a[0] > rand(100)) or (enemy_size == 0)
          enemy = Game_Enemy.new(enemy_size, enemy_id)
          @enemies.push(enemy)
          enemy_size += 1
        end
      end
      index += 1
    end
    init_screen_tone
    make_unique_names
  end
 
  def use_random_appearance?(troop_id)
    list = $data_troops[troop_id].pages[0].list[0]
    return list.parameters[0] == "<random_appearance>"
  end

end

class Spriteset_Battle
  def lined_up_enemies
    whole_x = 0
    i = 1
    for sprite in @enemy_sprites.reverse
      base_y = (Graphics.height * 0.7).ceil
      depth = (Graphics.height * 0.15).ceil
      sprite.battler.screen_y = base_y
      whole_x += (sprite.width * sprite.zoom_x).ceil
      i += 1
    end
    line = (whole_x / Graphics.width) + 1
    j = 1
    for sprite in @enemy_sprites.reverse
      sprite.battler.screen_x=(Graphics.width/(1+@enemy_sprites.size)) * j
      sprite.battler.screen_y -= depth - (depth * 0.8 ** (j % line)).ceil
      j += 1
    end
  end
end

class Scene_Battle
  alias suppon001_create_spriteset create_spriteset
  def create_spriteset
    suppon001_create_spriteset
    c1 = Suppon::Random_Appearance
    c2 = $game_troop.suppon001_random_troop
    @spriteset.lined_up_enemies if c1 and c2
  end
end



使い方は、VXのときとほとんど同じですが、
イベントリストの1ページ目の1行目に<random_appearance>と入れた
場合に、動作するようにしました。

111217_02_weblog.jpg

括弧の中の意味は
[r, n, ID1, ID2, ID3・・・・]
r : 出現確率0~100の整数
n : 繰り返す回数 1以上の整数
ID1, ID2, ID3・・・ : エネミーのIDです。

括弧以外のことを書いたり、イベントを入れたりすると
エラーが発生するので注意してください。

では長い長いバトルをお楽しみください。( ^ω^)ノシ

テーマ : RPGツクール
ジャンル : ゲーム

RGSS3備忘録その1

よく考えてみたら、毎回ツクールシリーズを
買ってきたが、何一つまともなゲームをつくってないような・・・。

そんなことはどうでもいいんだよ(`・д・´)
自分が楽しければそれでいいんだよ!(`・д・´)

で、今日やりますのはタイトル画面の背景をランダムで変えるっていうやつです。( ^ω^)
RTP素材には、たくさんの背景画像が入っていますが、
1つのゲームで1種類の背景しか選べないのは、もったいない気がします。

そこで、タイトルシーンが呼び出されるたびに、背景画像がランダムで変わる
っていうスクリプトを考えました。

module Suppon
  Title_Random_Choice = true #使用しない場合はfalseにしてください。
end

class Scene_Title
  alias suppon_create_background create_background
  def create_background
    suppon_create_background
    return unless Suppon::Title_Random_Choice
    @sprite1 = Sprite.new
    @sprite1.bitmap = Cache.title1(random_choice_title1)
    @sprite2 = Sprite.new
    @sprite2.bitmap = Cache.title2(random_choice_title2)
    center_sprite(@sprite1)
    center_sprite(@sprite2)
  end
 
  def random_choice_title1
    list = ["Book", "Castle", "CrossedSwords", "Crystal", "DemonCastle",
    "Devil", "Dragon", "Fountain", "Gates", "Hexagram", "Island", "Night",
    "Plain", "Tower1", "Tower2", "Universe", "Volcano", "World",
    "WorldMap", ""]
    return list.sample
  end
 
  def random_choice_title2
    list = ["Dragons", "Fire", "Forest", "Gargoyles", "Heroes", "Leaves",
    "Metal", "Mist", "Mountains", ""]
    return list.sample
  end
end


このスクリプトを、(ここに追加)っていう部分に追加して、
あとはゲームを起動して、F12を連打してください。( ^ω^)
これで、約200通りのタイトル画面が自動で切り替わるようになりました。ヤッタネ( ^ω^)

次は、ご要望のあったエネミーランダム出現をやってみたいと思います。
でわ又( ^▽^)ノシ

テーマ : RPGツクール
ジャンル : ゲーム

プロフィール

Suppon

Author:Suppon
すっぽんでーす。(^▽^)
カルドラ鋭意制作中( ・`ω・´)
Twitter => suppon01
メールはこちらへ
suppon2008@gmail.com

Twitter...

Twitter Reload

最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
ブロとも申請フォーム

この人とブロともになる