Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

[FILLED] Nearby "Action Key Event" Display

Hello, assorted scripters of RMXP.ORG. In my game I am hoping to make the characters surrounding's a bit more interactive.
What troubles me is that there isn't a way to alert the player they are near an interactive event.
What I want is a script that will FADE IN this image:

http://i253.photobucket.com/albums/hh73 ... terkey.png[/img]

in the bottom left corner, FLASHING slightly whenever the player is adjacent to AND facing an event which is triggered by the action key,
or when standing on an event which is triggered by the action key. (When standing on an event triggered by the action key, the player's direction doesn't matter.)
Only the action key.  :straightthumb:

      I would greatly appreciate it somebody could help me out.
 
Here you are:
Code:
class Sprite_ActionKeyEvent < RPG::Sprite
  X = 16
  Y = 16
  Folder = 'Graphics/Pictures/'
  Graphic = 'Action Key Event'
  def initialize(viewport)
    super(viewport)
    self.x, self.y = X, Y
    self.bitmap = RPG::Cache.load_bitmap(Folder, Graphic)
    self.opacity = 0
  end
  def update
    super
    if $game_map.spriteactionkey_update
      px, py, pd = $game_player.x, $game_player.y, $game_player.direction
      fx = pd == 4 ? px - 1 : pd == 6 ? px + 1 : px
      fy = pd == 2 ? py + 1 : pd == 8 ? py - 1 : py
      self.opacity = 0
      blink_off
      $game_map.events.values.each do |event| 
        next unless event.trigger == 0
        if (event.character_name == '' && event.x == px && event.y == py) ||
           (event.character_name != '' && event.x == fx && event.y == fy)
          self.opacity = 255
          blink_on
          break
        end
      end
      $game_map.spriteactionkey_update = false
    end
  end
end

class Spriteset_Map
  alias_method :seph_actionkeyevent_ssmap_init, :initialize
  alias_method :seph_actionkeyevent_ssmap_updt, :update
  alias_method :seph_acitonkeyevent_ssmap_disp, :dispose
  def initialize
    seph_actionkeyevent_ssmap_init
    @action_key_event_sprite = Sprite_ActionKeyEvent.new(@viewport2)
  end
  def dispose
    @action_key_event_sprite.dispose
    seph_acitonkeyevent_ssmap_disp
  end
  def update
    @action_key_event_sprite.update if @action_key_event_sprite != nil
    seph_actionkeyevent_ssmap_updt
  end
end

class Game_Map
  attr_accessor :spriteactionkey_update
end

class Game_Player
  alias_method :seph_actionkeyevent_gmplyr_mt, :moveto
  alias_method :seph_actionkeyevent_gmplyr_is, :increase_steps
  alias_method :seph_actionkeyevent_gmplyr_tb, :turn_base
  def moveto(x, y)
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_mt(x, y)
  end
  def increase_steps
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_is
  end
  def turn_base
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_tb
  end
end
class Game_Character
  for turn in ['turn_down', 'turn_left', 'turn_right', 'turn_up']
    s  = "alias_method :seph_macl_turnbase_#{turn}, :#{turn};"
    s += "def #{turn};"
    s += "  turn_base;"
    s += "  seph_macl_turnbase_#{turn};"
    s += "end;"
    eval s
  end
  def turn_base
  end
end
 
My mistake. Try this:
Code:
class Sprite_ActionKeyEvent < RPG::Sprite
  X = 16
  Y = 16
  Folder = 'Graphics/Pictures/'
  Graphic = 'Action Key Event'
  def initialize(viewport)
    super(viewport)
    self.x, self.y = X, Y
    self.bitmap = RPG::Cache.load_bitmap(Folder, Graphic)
    self.opacity = 0
  end
  def update
    super
    if $game_map.spriteactionkey_update
      px, py, pd = $game_player.x, $game_player.y, $game_player.direction
      fx = pd == 4 ? px - 1 : pd == 6 ? px + 1 : px
      fy = pd == 2 ? py + 1 : pd == 8 ? py - 1 : py
      self.opacity = 0
      blink_off
      $game_map.events.values.each do |event| 
        next unless event.trigger == 0
        if (event.character_name == '' && event.x == px && event.y == py) ||
           (event.character_name != '' && event.x == fx && event.y == fy)
          self.opacity = 255
          blink_on
          break
        end
      end
      $game_map.spriteactionkey_update = false
    end
  end
end

class Spriteset_Map
  alias_method :seph_actionkeyevent_ssmap_init, :initialize
  alias_method :seph_actionkeyevent_ssmap_updt, :update
  alias_method :seph_acitonkeyevent_ssmap_disp, :dispose
  def initialize
    seph_actionkeyevent_ssmap_init
    @action_key_event_sprite = Sprite_ActionKeyEvent.new(@viewport2)
  end
  def dispose
    @action_key_event_sprite.dispose
    seph_acitonkeyevent_ssmap_disp
  end
  def update
    @action_key_event_sprite.update if @action_key_event_sprite != nil
    seph_actionkeyevent_ssmap_updt
  end
end

class Game_Map
  attr_accessor :spriteactionkey_update
end

class Game_Character
  for turn in ['turn_down', 'turn_left', 'turn_right', 'turn_up']
    s  = "alias_method :seph_macl_turnbase_#{turn}, :#{turn};"
    s += "def #{turn};"
    s += "  turn_base;"
    s += "  seph_macl_turnbase_#{turn};"
    s += "end;"
    eval s
  end
  def turn_base
  end
end

class Game_Player
  alias_method :seph_actionkeyevent_gmplyr_mt, :moveto
  alias_method :seph_actionkeyevent_gmplyr_is, :increase_steps
  alias_method :seph_actionkeyevent_gmplyr_tb, :turn_base
  def moveto(x, y)
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_mt(x, y)
  end
  def increase_steps
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_is
  end
  def turn_base
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_tb
  end
end
 
Hey Seph, is there a way that same script could be used, but the picture only shows up if a comment used instead of just the push event trigger?
I understand if it's too much work so feel free to decline. :)
 
@saikyo765: You can try this. I haven't tested it, so let me know.

Just create a comment with :action key event

It shouldn't be case sensitive, but must be spelled like that.

Code:
class Sprite_ActionKeyEvent < RPG::Sprite
  X = 16
  Y = 16
  Folder = 'Graphics/Pictures/'
  Graphic = 'Action Key Event'
  def initialize(viewport)
    super(viewport)
    self.x, self.y = X, Y
    self.bitmap = RPG::Cache.load_bitmap(Folder, Graphic)
    self.opacity = 0
  end
  def update
    super
    if $game_map.spriteactionkey_update
      px, py, pd = $game_player.x, $game_player.y, $game_player.direction
      fx = pd == 4 ? px - 1 : pd == 6 ? px + 1 : px
      fy = pd == 2 ? py + 1 : pd == 8 ? py - 1 : py
      self.opacity = 0
      blink_off
      $game_map.events.values.each do |event| 
        next unless event.trigger == 0
        next unless event.action_key_event?
        if (event.character_name == '' && event.x == px && event.y == py) ||
           (event.character_name != '' && event.x == fx && event.y == fy)
          self.opacity = 255
          blink_on
          break
        end
      end
      $game_map.spriteactionkey_update = false
    end
  end
end

class Spriteset_Map
  alias_method :seph_actionkeyevent_ssmap_init, :initialize
  alias_method :seph_actionkeyevent_ssmap_updt, :update
  alias_method :seph_acitonkeyevent_ssmap_disp, :dispose
  def initialize
    seph_actionkeyevent_ssmap_init
    @action_key_event_sprite = Sprite_ActionKeyEvent.new(@viewport2)
  end
  def dispose
    @action_key_event_sprite.dispose
    seph_acitonkeyevent_ssmap_disp
  end
  def update
    @action_key_event_sprite.update if @action_key_event_sprite != nil
    seph_actionkeyevent_ssmap_updt
  end
end

class Game_Map
  attr_accessor :spriteactionkey_update
end

class Game_Character
  for turn in ['turn_down', 'turn_left', 'turn_right', 'turn_up']
    s  = "alias_method :seph_macl_turnbase_#{turn}, :#{turn};"
    s += "def #{turn};"
    s += "  turn_base;"
    s += "  seph_macl_turnbase_#{turn};"
    s += "end;"
    eval s
  end
  def turn_base
  end
end

class Game_Event
  alias_method :seph_actionkeyevent_gmevt_refresh, :refresh
  def action_key_event?
    return @action_key_event
  end
  def refresh
    seph_actionkeyevent_gmevt_refresh
    @action_key_event = false
    return if @erased || @list.nil? || @list.empty?
    @list.each do |ec|
      next unless ec.code == 108
      if ec.parameters[0].upcase.include?('action key event')
        @action_key_event = true
        break
      end
    end
  end
end  

class Game_Player
  alias_method :seph_actionkeyevent_gmplyr_mt, :moveto
  alias_method :seph_actionkeyevent_gmplyr_is, :increase_steps
  alias_method :seph_actionkeyevent_gmplyr_tb, :turn_base
  def moveto(x, y)
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_mt(x, y)
  end
  def increase_steps
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_is
  end
  def turn_base
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_tb
  end
end
 
Sorry. Its what I get for drunken scripting. Try this:
Code:
class Sprite_ActionKeyEvent < RPG::Sprite
  X = 16
  Y = 16
  Folder = 'Graphics/Pictures/'
  Graphic = 'Action Key Event'
  def initialize(viewport)
    super(viewport)
    self.x, self.y = X, Y
    self.bitmap = RPG::Cache.load_bitmap(Folder, Graphic)
    self.opacity = 0
  end
  def update
    super
    if $game_map.spriteactionkey_update
      px, py, pd = $game_player.x, $game_player.y, $game_player.direction
      fx = pd == 4 ? px - 1 : pd == 6 ? px + 1 : px
      fy = pd == 2 ? py + 1 : pd == 8 ? py - 1 : py
      self.opacity = 0
      blink_off
      $game_map.events.values.each do |event| 
        next unless event.trigger == 0
        next unless event.action_key_event?
        if (event.character_name == '' && event.x == px && event.y == py) ||
           (event.character_name != '' && event.x == fx && event.y == fy)
          self.opacity = 255
          blink_on
          break
        end
      end
      $game_map.spriteactionkey_update = false
    end
  end
end

class Spriteset_Map
  alias_method :seph_actionkeyevent_ssmap_init, :initialize
  alias_method :seph_actionkeyevent_ssmap_updt, :update
  alias_method :seph_acitonkeyevent_ssmap_disp, :dispose
  def initialize
    seph_actionkeyevent_ssmap_init
    @action_key_event_sprite = Sprite_ActionKeyEvent.new(@viewport2)
  end
  def dispose
    @action_key_event_sprite.dispose
    seph_acitonkeyevent_ssmap_disp
  end
  def update
    @action_key_event_sprite.update if @action_key_event_sprite != nil
    seph_actionkeyevent_ssmap_updt
  end
end

class Game_Map
  attr_accessor :spriteactionkey_update
end

class Game_Character
  for turn in ['turn_down', 'turn_left', 'turn_right', 'turn_up']
    s  = "alias_method :seph_macl_turnbase_#{turn}, :#{turn};"
    s += "def #{turn};"
    s += "  turn_base;"
    s += "  seph_macl_turnbase_#{turn};"
    s += "end;"
    eval s
  end
  def turn_base
  end
end

class Game_Event
  alias_method :seph_actionkeyevent_gmevt_refresh, :refresh
  def action_key_event?
    return @action_key_event
  end
  def refresh
    seph_actionkeyevent_gmevt_refresh
    @action_key_event = false
    return if @erased || @list.nil? || @list.empty?
    @list.each do |ec|
      next unless ec.code == 108
      if ec.parameters[0].upcase.include?('ACTION KEY EVENT')
        @action_key_event = true
        break
      end
    end
  end
end  

class Game_Player
  alias_method :seph_actionkeyevent_gmplyr_mt, :moveto
  alias_method :seph_actionkeyevent_gmplyr_is, :increase_steps
  alias_method :seph_actionkeyevent_gmplyr_tb, :turn_base
  def moveto(x, y)
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_mt(x, y)
  end
  def increase_steps
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_is
  end
  def turn_base
    $game_map.spriteactionkey_update = true
    seph_actionkeyevent_gmplyr_tb
  end
end
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top