Posts: 5 
	Threads: 1 
	Joined: Jun 2010
	
	 
 
	
	
		So I am currently working on a part of my game in a cave in the desert, so I am using the default "Cave of Earth" tileset. Using this, on any given cave map I have put the "light" tiles to evidence where you came from at the bottom of the map, and regular cave entrance tiles to use as passages., as shown in this pic: 
http://i725.photobucket.com/albums/ww257...1277435835
Going forward has been no problem. 
What I have been unable to do, however, is create an event at the bottom of the map that takes you to the previous map by simply being in the light at the bottom of the screen and pressing down, essentially "going through" the passage. Is it possible to do this WITHOUT altering the map?
	  
	
	
	
	
 
 
	
	
	
		
	Posts: 5 
	Threads: 1 
	Joined: Jun 2010
	
	 
 
	
	
		So I think I finally figured it out. It works to an extent, which I am happy with for now. If anyone wants to see what I came up with I'll be happy to post it.  
 
But I do have another, non-related question if anyone could help me out. I want to create an item that works in scope on both an hp 0 ally and an ally regularly. However I can only seem to get it to be one or the other. Is there a solution to this?
	 
	
	
	
	
 
 
	
	
	
		
	Posts: 992 
	Threads: 74 
	Joined: Jan 2010
	
	 
 
	
	
		NO! THAT IS NOT POSSIBLE AT ALL! 
Just joking around, while it is not possible by default, I made you a script for it.
 Code: #============================================================================== 
# ** Scene_Title 
#------------------------------------------------------------------------------ 
#  This class performs title screen processing. 
#============================================================================== 
 
class Scene_Title 
  #-------------------------------------------------------------------------- 
  # * Main Processing 
  #-------------------------------------------------------------------------- 
  alias old_main main 
  def main 
    old_main 
    $data_items = load_data("Data/Items.rxdata") 
    for i in 1..($data_items.size - 1) 
      a = $data_items[i] 
      if a.name =~ Regexp.new(/(.)*%/){/i/}.to_s  
       a.scope = 8 
       a.name = a.name.gsub("%", " ") 
      end 
    end 
  end 
end 
 
class Scene_Battle 
  def update_phase3_item_select 
    # Make item window visible 
    @item_window.visible = true 
    # Update item window 
    @item_window.update 
    # If B button was pressed 
    if Input.trigger?(Input::B) 
      # Play cancel SE 
      $game_system.se_play($data_system.cancel_se) 
      # End item selection 
      end_item_select 
      return 
    end 
    # If C button was pressed 
    if Input.trigger?(Input::C) 
      # Get currently selected data on the item window 
      @item = @item_window.item 
      # If it can't be used 
      unless $game_party.item_can_use?(@item.id) 
        # Play buzzer SE 
        $game_system.se_play($data_system.buzzer_se) 
        return 
      end 
      # Play decision SE 
      $game_system.se_play($data_system.decision_se) 
      # Set action 
      @active_battler.current_action.item_id = @item.id 
      # Make item window invisible 
      @item_window.visible = false 
      # If effect scope is single enemy 
      if @item.scope == 1  
        # Start enemy selection 
        start_enemy_select 
      # If effect scope is single ally 
      elsif @item.scope == 3 or @item.scope == 5 or @item.scope == 8 
        # Start actor selection 
        start_actor_select 
      # If effect scope is not single 
      else 
        # End item selection 
        end_item_select 
        # Go to command input for next actor 
        phase3_next_actor 
      end 
      return 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # * Start Actor Selection 
  #-------------------------------------------------------------------------- 
  def start_actor_select 
    # Make actor arrow 
    @actor_arrow = Arrow_Actor.new(@spriteset.viewport2) 
    @actor_arrow.index = @actor_index 
    # Associate help window 
    @actor_arrow.help_window = @help_window 
    # Disable actor command window 
    @actor_command_window.active = false 
    @actor_command_window.visible = false 
  end 
  #-------------------------------------------------------------------------- 
  # * Make Item Action Results 
  #-------------------------------------------------------------------------- 
  def make_item_action_result 
    # Get item 
    @item = $data_items[@active_battler.current_action.item_id] 
    # If unable to use due to items running out 
    unless $game_party.item_can_use?(@item.id) 
      # Shift to step 1 
      @phase4_step = 1 
      return 
    end 
    # If consumable 
    if @item.consumable 
      # Decrease used item by 1 
      $game_party.lose_item(@item.id, 1) 
    end 
    # Display item name on help window 
    @help_window.set_text(@item.name, 1) 
    # Set animation ID 
    @animation1_id = @item.animation1_id 
    @animation2_id = @item.animation2_id 
    # Set common event ID 
    @common_event_id = @item.common_event_id 
    # Decide on target 
    index = @active_battler.current_action.target_index 
    target = $game_party.smooth_target_actor(index) 
    # Set targeted battlers 
    set_target_battlers(@item.scope) 
    # Apply item effect 
    for target in @target_battlers 
      target.item_effect(@item) 
    end 
  end 
   
   
  def set_target_battlers(scope) 
    # If battler performing action is enemy 
    if @active_battler.is_a?(Game_Enemy) 
      # Branch by effect scope 
      case scope 
      when 1  # single enemy 
        index = @active_battler.current_action.target_index 
        @target_battlers.push($game_party.smooth_target_actor(index)) 
      when 2  # all enemies 
        for actor in $game_party.actors 
          if actor.exist? 
            @target_battlers.push(actor) 
          end 
        end 
      when 3  # single ally 
        index = @active_battler.current_action.target_index 
        @target_battlers.push($game_troop.smooth_target_enemy(index)) 
      when 4  # all allies 
        for enemy in $game_troop.enemies 
          if enemy.exist? 
            @target_battlers.push(enemy) 
          end 
        end 
      when 5  # single ally (HP 0)  
        index = @active_battler.current_action.target_index 
        enemy = $game_troop.enemies[index] 
        if enemy != nil and enemy.hp0? 
          @target_battlers.push(enemy) 
        end 
      when 6  # all allies (HP 0)  
        for enemy in $game_troop.enemies 
          if enemy != nil and enemy.hp0? 
            @target_battlers.push(enemy) 
          end 
        end 
      when 7  # user 
        @target_battlers.push(@active_battler) 
       
      when 8 # ally any 
        index = @active_battler.current_action.target_index 
        actor = $game_party.actors[index] 
        @target_battlers.push(actor) 
       
      end 
    end 
    # If battler performing action is actor 
    if @active_battler.is_a?(Game_Actor) 
      # Branch by effect scope 
      case scope 
      when 1  # single enemy 
        index = @active_battler.current_action.target_index 
        @target_battlers.push($game_troop.smooth_target_enemy(index)) 
      when 2  # all enemies 
        for enemy in $game_troop.enemies 
          if enemy.exist? 
            @target_battlers.push(enemy) 
          end 
        end 
      when 3  # single ally 
        index = @active_battler.current_action.target_index 
        @target_battlers.push($game_party.smooth_target_actor(index)) 
      when 4  # all allies 
        for actor in $game_party.actors 
          if actor.exist? 
            @target_battlers.push(actor) 
          end 
        end 
      when 5  # single ally (HP 0)  
        index = @active_battler.current_action.target_index 
        actor = $game_party.actors[index] 
        if actor != nil and actor.hp0? 
          @target_battlers.push(actor) 
        end 
      when 6  # all allies (HP 0)  
        for actor in $game_party.actors 
          if actor != nil and actor.hp0? 
            @target_battlers.push(actor) 
          end 
        end 
      when 7  # user 
        @target_battlers.push(@active_battler) 
      when 8 # ally any 
        index = @active_battler.current_action.target_index 
        actor = $game_party.actors[index] 
        @target_battlers.push(actor) 
      end 
    end 
  end 
end 
 
#============================================================================== 
# ** Game_Battler (part 3) 
#------------------------------------------------------------------------------ 
#  This class deals with battlers. It's used as a superclass for the Game_Actor 
#  and Game_Enemy classes. 
#============================================================================== 
 
class Game_Battler 
  #-------------------------------------------------------------------------- 
  # * Determine Usable Skills 
  #     skill_id : skill ID 
  #-------------------------------------------------------------------------- 
  def skill_can_use?(skill_id) 
    # If there's not enough SP, the skill cannot be used. 
    if $data_skills[skill_id].sp_cost > self.sp 
      return false 
    end 
    # Unusable if incapacitated 
    if dead? 
      return false 
    end 
    # If silent, only physical skills can be used 
    if $data_skills[skill_id].atk_f == 0 and self.restriction == 1 
      return false 
    end 
    # Get usable time 
    occasion = $data_skills[skill_id].occasion 
    # If in battle 
    if $game_temp.in_battle 
      # Usable with [Normal] and [Only Battle] 
      return (occasion == 0 or occasion == 1) 
    # If not in battle 
    else 
      # Usable with [Normal] and [Only Menu] 
      return (occasion == 0 or occasion == 2) 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # * Applying Normal Attack Effects 
  #     attacker : battler 
  #-------------------------------------------------------------------------- 
  def attack_effect(attacker) 
    # Clear critical flag 
    self.critical = false 
    # First hit detection 
    hit_result = (rand(100) < attacker.hit) 
    # If hit occurs 
    if hit_result == true 
      # Calculate basic damage 
      atk = [attacker.atk - self.pdef / 2, 0].max 
      self.damage = atk * (20 + attacker.str) / 20 
      # Element correction 
      self.damage *= elements_correct(attacker.element_set) 
      self.damage /= 100 
      # If damage value is strictly positive 
      if self.damage > 0 
        # Critical correction 
        if rand(100) < 4 * attacker.dex / self.agi 
          self.damage *= 2 
          self.critical = true 
        end 
        # Guard correction 
        if self.guarding? 
          self.damage /= 2 
        end 
      end 
      # Dispersion 
      if self.damage.abs > 0 
        amp = [self.damage.abs * 15 / 100, 1].max 
        self.damage += rand(amp+1) + rand(amp+1) - amp 
      end 
      # Second hit detection 
      eva = 8 * self.agi / attacker.dex + self.eva 
      hit = self.damage < 0 ? 100 : 100 - eva 
      hit = self.cant_evade? ? 100 : hit 
      hit_result = (rand(100) < hit) 
    end 
    # If hit occurs 
    if hit_result == true 
      # State Removed by Shock 
      remove_states_shock 
      # Substract damage from HP 
      self.hp -= self.damage 
      # State change 
      @state_changed = false 
      states_plus(attacker.plus_state_set) 
      states_minus(attacker.minus_state_set) 
    # When missing 
    else 
      # Set damage to "Miss" 
      self.damage = "Miss" 
      # Clear critical flag 
      self.critical = false 
    end 
    # End Method 
    return true 
  end 
  #-------------------------------------------------------------------------- 
  # * Apply Skill Effects 
  #     user  : the one using skills (battler) 
  #     skill : skill 
  #-------------------------------------------------------------------------- 
  def skill_effect(user, skill) 
    # Clear critical flag 
    self.critical = false 
    # If skill scope is for ally with 1 or more HP, and your own HP = 0, 
    # or skill scope is for ally with 0, and your own HP = 1 or more 
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or 
       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1) 
      # End Method 
      return false 
    end 
    # Clear effective flag 
    effective = false 
    # Set effective flag if common ID is effective 
    effective |= skill.common_event_id > 0 
    # First hit detection 
    hit = skill.hit 
    if skill.atk_f > 0 
      hit *= user.hit / 100 
    end 
    hit_result = (rand(100) < hit) 
    # Set effective flag if skill is uncertain 
    effective |= hit < 100 
    # If hit occurs 
    if hit_result == true 
      # Calculate power 
      power = skill.power + user.atk * skill.atk_f / 100 
      if power > 0 
        power -= self.pdef * skill.pdef_f / 200 
        power -= self.mdef * skill.mdef_f / 200 
        power = [power, 0].max 
      end 
      # Calculate rate 
      rate = 20 
      rate += (user.str * skill.str_f / 100) 
      rate += (user.dex * skill.dex_f / 100) 
      rate += (user.agi * skill.agi_f / 100) 
      rate += (user.int * skill.int_f / 100) 
      # Calculate basic damage 
      self.damage = power * rate / 20 
      # Element correction 
      self.damage *= elements_correct(skill.element_set) 
      self.damage /= 100 
      # If damage value is strictly positive 
      if self.damage > 0 
        # Guard correction 
        if self.guarding? 
          self.damage /= 2 
        end 
      end 
      # Dispersion 
      if skill.variance > 0 and self.damage.abs > 0 
        amp = [self.damage.abs * skill.variance / 100, 1].max 
        self.damage += rand(amp+1) + rand(amp+1) - amp 
      end 
      # Second hit detection 
      eva = 8 * self.agi / user.dex + self.eva 
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100 
      hit = self.cant_evade? ? 100 : hit 
      hit_result = (rand(100) < hit) 
      # Set effective flag if skill is uncertain 
      effective |= hit < 100 
    end 
    # If hit occurs 
    if hit_result == true 
      # If physical attack has power other than 0 
      if skill.power != 0 and skill.atk_f > 0 
        # State Removed by Shock 
        remove_states_shock 
        # Set to effective flag 
        effective = true 
      end 
      # Substract damage from HP 
      last_hp = self.hp 
      self.hp -= self.damage 
      effective |= self.hp != last_hp 
      # State change 
      @state_changed = false 
      effective |= states_plus(skill.plus_state_set) 
      effective |= states_minus(skill.minus_state_set) 
      # If power is 0 
      if skill.power == 0 
        # Set damage to an empty string 
        self.damage = "" 
        # If state is unchanged 
        unless @state_changed 
          # Set damage to "Miss" 
          self.damage = "Miss" 
        end 
      end 
    # If miss occurs 
    else 
      # Set damage to "Miss" 
      self.damage = "Miss" 
    end 
    # If not in battle 
    unless $game_temp.in_battle 
      # Set damage to nil 
      self.damage = nil 
    end 
    # End Method 
    return effective 
  end 
  #-------------------------------------------------------------------------- 
  # * Application of Item Effects 
  #     item : item 
  #-------------------------------------------------------------------------- 
  def item_effect(item) 
    # Clear critical flag 
    self.critical = false 
    # If item scope is for ally with 1 or more HP, and your own HP = 0, 
    # or item scope is for ally with 0 HP, and your own HP = 1 or more 
    if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or 
       ((item.scope == 5 or item.scope == 6) and self.hp >= 1) 
      # End Method 
      return false #unless item.scope == 8 
    end 
    # Clear effective flag 
    effective = false 
    # Set effective flag if common ID is effective 
    effective |= item.common_event_id > 0 
    # Determine hit 
    hit_result = (rand(100) < item.hit) 
    # Set effective flag is skill is uncertain 
    effective |= item.hit < 100 
    # If hit occurs 
    if hit_result == true 
      # Calculate amount of recovery 
      recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp 
      recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp 
      if recover_hp < 0 
        recover_hp += self.pdef * item.pdef_f / 20 
        recover_hp += self.mdef * item.mdef_f / 20 
        recover_hp = [recover_hp, 0].min 
      end 
      # Element correction 
      recover_hp *= elements_correct(item.element_set) 
      recover_hp /= 100 
      recover_sp *= elements_correct(item.element_set) 
      recover_sp /= 100 
      # Dispersion 
      if item.variance > 0 and recover_hp.abs > 0 
        amp = [recover_hp.abs * item.variance / 100, 1].max 
        recover_hp += rand(amp+1) + rand(amp+1) - amp 
      end 
      if item.variance > 0 and recover_sp.abs > 0 
        amp = [recover_sp.abs * item.variance / 100, 1].max 
        recover_sp += rand(amp+1) + rand(amp+1) - amp 
      end 
      # If recovery code is negative 
      if recover_hp < 0 
        # Guard correction 
        if self.guarding? 
          recover_hp /= 2 
        end 
      end 
      # Set damage value and reverse HP recovery amount 
      self.damage = -recover_hp 
      # HP and SP recovery 
      last_hp = self.hp 
      last_sp = self.sp 
      self.hp += recover_hp 
      self.sp += recover_sp 
      effective |= self.hp != last_hp 
      effective |= self.sp != last_sp 
      # State change 
      @state_changed = false 
      effective |= states_plus(item.plus_state_set) 
      effective |= states_minus(item.minus_state_set) 
      # If parameter value increase is effective 
      if item.parameter_type > 0 and item.parameter_points != 0 
        # Branch by parameter 
        case item.parameter_type 
        when 1  # Max HP 
          @maxhp_plus += item.parameter_points 
        when 2  # Max SP 
          @maxsp_plus += item.parameter_points 
        when 3  # Strength 
          @str_plus += item.parameter_points 
        when 4  # Dexterity 
          @dex_plus += item.parameter_points 
        when 5  # Agility 
          @agi_plus += item.parameter_points 
        when 6  # Intelligence 
          @int_plus += item.parameter_points 
        end 
        # Set to effective flag 
        effective = true 
      end 
      # If HP recovery rate and recovery amount are 0 
      if item.recover_hp_rate == 0 and item.recover_hp == 0 
        # Set damage to empty string 
        self.damage = "" 
        # If SP recovery rate / recovery amount are 0, and parameter increase 
        # value is ineffective. 
        if item.recover_sp_rate == 0 and item.recover_sp == 0 and 
           (item.parameter_type == 0 or item.parameter_points == 0) 
          # If state is unchanged 
          unless @state_changed 
            # Set damage to "Miss" 
            self.damage = "Miss" 
          end 
        end 
      end 
    # If miss occurs 
    else 
      # Set damage to "Miss" 
      self.damage = "Miss" 
    end 
    # If not in battle 
    unless $game_temp.in_battle 
      # Set damage to nil 
      self.damage = nil 
    end 
    # End Method 
    return effective 
  end 
  #-------------------------------------------------------------------------- 
  # * Application of Slip Damage Effects 
  #-------------------------------------------------------------------------- 
  def slip_damage_effect 
    # Set damage 
    self.damage = self.maxhp / 10 
    # Dispersion 
    if self.damage.abs > 0 
      amp = [self.damage.abs * 15 / 100, 1].max 
      self.damage += rand(amp+1) + rand(amp+1) - amp 
    end 
    # Subtract damage from HP 
    self.hp -= self.damage 
    # End Method 
    return true 
  end 
  #-------------------------------------------------------------------------- 
  # * Calculating Element Correction 
  #     element_set : element 
  #-------------------------------------------------------------------------- 
  def elements_correct(element_set) 
    # If not an element 
    if element_set == [] 
      # Return 100 
      return 100 
    end 
    # Return the weakest object among the elements given 
    # * "element_rate" method is defined by Game_Actor and Game_Enemy classes, 
    #    which inherit from this class. 
    weakest = -100 
    for i in element_set 
      weakest = [weakest, self.element_rate(i)].max 
    end 
    return weakest 
  end 
end 
 
 
#============================================================================== 
# ** Game_Party 
#------------------------------------------------------------------------------ 
#  This class handles the party. It includes information on amount of gold  
#  and items. Refer to "$game_party" for the instance of this class. 
#============================================================================== 
 
class Game_Party 
  #-------------------------------------------------------------------------- 
  # * Determine if Item is Usable 
  #     item_id : item ID 
  #-------------------------------------------------------------------------- 
  def item_can_use?(item_id) 
    # If item quantity is 0 
    if item_number(item_id) == 0 
      # Unusable 
      return false 
    end 
    # Get usable time 
    occasion = $data_items[item_id].occasion 
    # If in battle 
    if $game_temp.in_battle 
      # If useable time is 0 (normal) or 1 (only battle) it's usable 
      return (occasion == 0 or occasion == 1) 
    end 
    # If useable time is 0 (normal) or 2 (only menu) it's usable 
    return (occasion == 0 or occasion == 2) 
  end 
end
  
Here is what you need to do:
 
Go to the script editor in your game, create a new script above main and past the script above.
 
Now, to make an item have the scope you requested, make it's name end with %.
 
So for example, if you want an item called "Potion" to be like you requested, change it's name to "Potion%". The "%" will not be shown in the game, it is visible only in the editor ;)
	  
	
	
	
	
 
 
	
	
	
		
	Posts: 5 
	Threads: 1 
	Joined: Jun 2010
	
	 
 
	
	
		Wow! Thank you so much, it works just fine! 
 
Obviously I am a bit new to RMXP, so the help is appreciated. I might get into learning the scripting language later, if I get more time, but for now I'm just concentrating on making a good game. 
 
Just curious, how long did it take you to "make" that script?
	 
	
	
	
	
 
 
	
	
	
		
	Posts: 992 
	Threads: 74 
	Joined: Jan 2010
	
	 
 
	
	
		Half an hour ;) 
No need to hurry about learning to script, there are plenty of scripts on rpg maker sites like this that you can use.  
Why don't you post some info about your game in the projects section? :)
	 
	
	
	
	
 
 
	
	
	
		
	Posts: 5 
	Threads: 1 
	Joined: Jun 2010
	
	 
 
	
	
		Okay, well thank you very much! 
I'll probably get around to posting info later too... :) 
 
There is one more thing I've been searching for, and I don't feel like making a new thread... and that is either one of two things:  
1. A way to trigger an event based off of a certain character leveling up. I want to create a way for players to choose their skills as they level, and so I think if an event could be triggered on level up to bring up a menu of sorts for them to do this, that would be awesome.  
2. A way to create the aforementioned menu, and have access to it through the touch of a button. (Like the "Press A for email" program in the sample game - KNight Blade). 
 
Could you or someone else point me in the right direction?
	 
	
	
	
	
 
 
	
	
	
		
	Posts: 992 
	Threads: 74 
	Joined: Jan 2010
	
	 
 
 
	
	
	
		
	Posts: 5 
	Threads: 1 
	Joined: Jun 2010
	
	 
 
	
	
		Sort of, though not exactly. The idea of accessing said skill menu from the menu is good, I'll want that. 
However,correct me if I am wrong, but that system needs to link equipment to the skills you are learning, as that does not seem necessary. More of what I want is a system that goes more like: 
1. Player Character attains level in which they learn a new skill. (Example, a elemental mage) 
2. The player goes to a skill menu or tree. From there they have a few choices of what to learn. (Example: choice of earth skill, fire skill, water skill, air skill) 
3. They choose which skill they want, which opens up further options for further levels. (Ex: choose earth skill, get the option next skill level to gain a more advanced earth skill, while retaining the abilities to learn the fire, air, water, etc) 
If there is a way to do this with the aforementioned system, please let me know!!
 
Also I have seen this system, and am thinking of using it, just for skills - 
 http://www.rpgrevolution.com/forums/inde...opic=20562
I think it might work for my purposes, we will see though. It's a lot of extra eventing, and I would almost prefer a menu system instead. But hey, i'll use what I can find, eh? :)
	  
	
	
	
	
 
 
	
	
	
		
	Posts: 992 
	Threads: 74 
	Joined: Jan 2010
	
	 
 
	
	
		That looks good. You should use a common event for the triggering.  
http://bb.xieke.com/files/Project8.exe
Here is a demo. You'll have to change/modify it to your liking though.
	  
	
	
	
	
 
 
	 
 |