Save-Point

Full Version: Non Kombatant XP
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Non Kombatant XP
Version 0.3.0

by Kyonides

Introduction

This scriptlet allows you to prevent a certain hero from being present during battles.

This feature can also be disabled at any given time.

There are separate calls for party members and individual heroes. This lets you include or exclude any hero no matter if he has ever joined the party or has recently left it. How convenient that is, don't you agree? Winking

RMXP Script

Code:
# * Non Kombatant XP * #
#   Scripter : Kyonides Arkanthes
#   v0.3.0 - 2024-12-29

# This scriptlet allows you to prevent a certain hero from being present during
# battles. This feature can also be disabled at any given time.

# There are separate calls for party members and individual heroes. This lets
# you include or exclude any hero no matter if he has ever joined the party or
# has recently left it.

# Warning: Game_Party#actors method has been aliased.

# * Script Calls * #
# - Set Party Member as NPC - Disabling him during battles
# $game_party.actor_as_npc(Index)

# - Set Party Single Hero as NPC - Disabling him during battles
# $game_actors[ID].is_npc = true

# - Set Party Member as Combatant - Enabling him during battles
# $game_party.npc_as_actor(Index)

# - Set Hero as Combatant - Enabling him during battles
# $game_actors[ID].is_npc = false

class Game_BattleAction
  alias :kyon_non_kombat_gm_bta_dc_rand_tgt_act :decide_random_target_for_actor
  alias :kyon_non_kombat_gm_bta_dc_rand_tgt_act :decide_random_target_for_enemy
  def decide_random_target_for_actor
    kyon_non_kombat_gm_bta_dc_rand_tgt_act
    clear unless @target_index
  end

  def decide_random_target_for_enemy
    kyon_non_kombat_gm_bta_dc_rand_tgt_act
    clear unless @target_index
  end
end

class Game_Actor
  attr_accessor :is_npc
end

class Game_Party
  alias :kyon_non_kombat_gm_pty_rand_trgt_actor :random_target_actor
  alias :actors_full :actors
  def npcs
    @actors.select {|actor| actor.is_npc }
  end

  def actors_without_npcs
    @actors.reject {|actor| actor.is_npc }
  end

  def actors
    $game_temp.in_battle ? actors_without_npcs : actors_full
  end

  def actor_as_npc(n)
    @actors[n].is_npc = true
  end

  def npc_as_actor(n)
    @actors[n].is_npc = false
  end

  def random_target_actor(hp0=false)
    actor = kyon_non_kombat_gm_pty_rand_trgt_actor(hp0)
    return if !actor or actor.is_npc
    actor
  end
end


Terms & Conditions

Free Beer for use in non commercial games but you gotta own a legal copy of the engine. Tongue sticking out
Due credit is mandatory.
That's it! Tongue sticking out
Maintenance Update

During my playtests I noticed that there was a slight chance for the enemy troopers to make your game crash in no time. This happened whenever they had ever picked an actor that had been excluded via one of the script calls available here.

Version 0.2.0 includes:

Two methods in the Game_BattleAction class and one in the Game_Party class have been aliased.

If the enemy trooper still picks an actor that has the is_npc flag turned on, the trooper will do nothing at the end.
The Script Has Been Ported to RMVX!

Now RMVX users that might still exist Happy with a sweat can also let their heroes Slayne Ghim become lazy enough as to stay away from battle and live another day just like RMXP heroes can! Laughing
Maintenance Upgrade

As a precaution, I shortened the name of one alias to make it easy to use in 1 of my aliased methods.
This change might ensure, in other versions of the engine, that all party members, including reservists, can be turned into NPC's and back to normal actors at will.
In RMXP's case it doesn't really change anything important, but I backported it to keep it in synch with the other ports.