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.

Is there a way to deactivate scripts via switches or the like?

I'm using the caterpillar script in the Rye CBS starter pack, and I'd like to be able to deactivate it when a certain switch is on, and reactivate it when the switch is off. How do I go about this?
 
sithlord999;242732 said:
If you're using the SDK, there's a way you can disable and enable scripts with it.

Thanks!

Also: It uses the script's name for that, but does it mean the name in the list on the left or the class?

With the name of the class, the script doesn't disable when it's supposed to.

Please help, I can't make head nor tails of this.
 
DraycosGoldaryn;243151 said:
Activating and deactivating scripts is difficult, If you post the script, I (or someone else who knows how) will modify it to be able to be toggled on and off.

Code:
# train_actor 
=begin

?c?p?V?X?e???X?N???v?g Train_Actor
Author:: yf30 at users.sourceforge.jp (http://sourceforge.jp/users/yf30/)
Date:: 2004/11/14?@2006/01/25
Copyright:: Copyright (C) 2004,2005,2006 fukuyama
URL:: http://sourceforge.jp/projects/rgss-lib/

=end
	
# Config.rb 
#==============================================================================
# ?? Train_Actor::Config
#------------------------------------------------------------------------------
# ?}?b?v????A?N?^?[???????????????
#==============================================================================

module Train_Actor

# ??????????p?X?C?b?`???
# true ????X?C?b?`???????s??
# TRANSPARENT_SWITCH = true
TRANSPARENT_SWITCH = false

# ??????????p?X?C?b?`???
# TRANSPARENT_SWITCH ?? true ??A????????X?C?b?`??ON???????????
TRANSPARENT_SWITCHES_INDEX = 20

# ???A?N?^?[????
# ?????I????l???p?[?e?B???o???????????????c
TRAIN_ACTOR_SIZE_MAX = 4

# ??
DOWN_LEFT  = 1
DOWN_RIGHT = 3
UP_LEFT    = 7
UP_RIGHT   = 9
JUMP       = 5

end
 
# rgss 
	
# Game_Event_Module.rb 
#==============================================================================
# ?? Game_Event_Module
#------------------------------------------------------------------------------
# ?}?b?v????A?N?^?[???????????????
#==============================================================================

module Train_Actor

module Game_Event_Module
  #--------------------------------------------------------------------------
  # ?? ??s??\????
  #     x  : X ???W
  #     y  : Y ???W
  #     d  : ???? (0,2,4,6,8)  ?? 0 = ?S??????s?s?????????? (?W?????v?p)
  # return : ??s?s?? false ??\ true
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    result = super(x, y, d)
    if result
      # ?V???????W???????
      new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
      new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
      # ?g???C???A?N?^?[????[?v
      for actor in $game_party.characters
        # ?\?????????????
        if not actor.character_name.empty?
          # ?A?N?^?[????W???????????v??????
          if actor.x == new_x and actor.y == new_y
            # ???????C?x???g???
            if self != $game_player
              # ??s?s??
              return false
            end
          end
        end
      end
    end
    return result
  end
end

end

class Game_Event
  include Train_Actor::Game_Event_Module
end
 
# Game_Party_Module.rb 
#==============================================================================
# ?? Game_Party_Module
#------------------------------------------------------------------------------
# ?}?b?v????A?N?^?[???????????????
#==============================================================================

module Train_Actor

module Game_Party_Module
  attr_reader :characters
  def actors_dead?
    for actor in actors
      if actor.dead?
        return true
      end
    end
    return false
  end
  def update_party_order
    if not actors_dead?
      return actors
    end
    alive_actors = []
    dead_actors = []
    for actor in actors
      if actor.dead?
        dead_actors.push actor
      else
        alive_actors.push actor
      end
    end
    return alive_actors + dead_actors
  end
  def setup_actor_character_sprites
    if @characters.nil?
      @characters = []
      for i in 1 ... TRAIN_ACTOR_SIZE_MAX
        @characters.push(Game_Party_Actor.new)
      end
    end
    setup_actors = update_party_order
    for i in 1 ... TRAIN_ACTOR_SIZE_MAX
      @characters[i - 1].setup(setup_actors[i])
    end
    if $scene.class.method_defined?('setup_actor_character_sprites')
      $scene.setup_actor_character_sprites(@characters)
    end
  end
  if TRANSPARENT_SWITCH
    def transparent_switch
      transparent = $game_player.transparent
      if transparent == false
        transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
      end
      return transparent
    end
  else
    def transparent_switch
      return $game_player.transparent
    end
  end
  def update_party_actors
    update_party_order
    setup_actor_character_sprites
    transparent = transparent_switch
    for character in @characters
      character.transparent = transparent
      character.move_speed = $game_player.move_speed
      character.step_anime = $game_player.step_anime
      character.update
    end
  end
  def moveto_party_actors( x, y )
    setup_actor_character_sprites
    for character in @characters
      character.moveto( x, y )
    end
    if @move_list == nil
      @move_list = []
    end
    move_list_setup
  end
  def move_party_actors
    if @move_list == nil
      @move_list = []
      move_list_setup
    end
    @move_list.each_index do |i|
      if @characters[i] != nil
        case @move_list[i].type
          when Input::DOWN
            @characters[i].move_down(@move_list[i].args[0])
          when Input::LEFT
            @characters[i].move_left(@move_list[i].args[0])
          when Input::RIGHT
            @characters[i].move_right(@move_list[i].args[0])
          when Input::UP
            @characters[i].move_up(@move_list[i].args[0])
          when DOWN_LEFT
            @characters[i].move_lower_left
          when DOWN_RIGHT
            @characters[i].move_lower_right
          when UP_LEFT
            @characters[i].move_upper_left
          when UP_RIGHT
            @characters[i].move_upper_right
          when JUMP
            @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
        end
      end
    end
  end
  class Move_List_Element
    def initialize(type,args)
      @type = type
      @args = args
    end
    def type() return @type end
    def args() return @args end
  end
  def move_list_setup
    for i in 0 .. TRAIN_ACTOR_SIZE_MAX
      @move_list[i] = nil
    end
  end
  def add_move_list(type,*args)
    @move_list.unshift(Move_List_Element.new(type,args)).pop
  end
  def move_down_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::DOWN,turn_enabled)
  end
  def move_left_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::LEFT,turn_enabled)
  end
  def move_right_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::RIGHT,turn_enabled)
  end
  def move_up_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::UP,turn_enabled)
  end
  def move_lower_left_party_actors
    move_party_actors
    add_move_list(DOWN_LEFT)
  end
  def move_lower_right_party_actors
    move_party_actors
    add_move_list(DOWN_RIGHT)
  end
  def move_upper_left_party_actors
    move_party_actors
    add_move_list(UP_LEFT)
  end
  def move_upper_right_party_actors
    move_party_actors
    add_move_list(UP_RIGHT)
  end
  def jump_party_actors(x_plus, y_plus)
    move_party_actors
    add_move_list(JUMP,x_plus, y_plus)
  end
end

end

class Game_Party
  include Train_Actor::Game_Party_Module
# ?????
if Train_Actor::TRAIN_ACTOR_SIZE_MAX != 4
  #--------------------------------------------------------------------------
  # ?? ?A?N?^?[????????
  #     actor_id : ?A?N?^?[ ID
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
    # ?A?N?^?[????
    actor = $game_actors[actor_id]
    # ?p?[?e?B?l???? 4 ?l??????A????A?N?^?[???p?[?e?B????????
    if @actors.size < Train_Actor::TRAIN_ACTOR_SIZE_MAX and not @actors.include?(actor)
      # ?A?N?^?[?????
      @actors.push(actor)
      # ?v???C???[?????t???b?V??
      $game_player.refresh
    end
  end
end

end
 
# Game_Player_Module.rb 
#==============================================================================
# ?? Game_Player_Module
#------------------------------------------------------------------------------
# ?}?b?v????A?N?^?[???????????????
#==============================================================================

module Train_Actor

module Game_Player_Module
  attr_reader :move_speed
  attr_reader :step_anime

  def update_party_actors
    if $game_party.actors.empty?
      return
    end
    $game_party.update_party_actors
    actor = $game_party.actors[0]
    if not actor.dead?
      if not @prev_dead.nil?
        @character_name = actor.character_name
        @character_hue = actor.character_hue
        @prev_dead = nil
      end
      return
    end
    @prev_dead = true
    $game_party.actors.each do |actor|
      if actor.dead?
        next
      end
      @character_name = actor.character_name
      @character_hue = actor.character_hue
      break
    end
  end
  def update
    update_party_actors
    super
  end
  def moveto( x, y )
    $game_party.moveto_party_actors( x, y )
    super( x, y )
  end
  def move_down(turn_enabled = true)
    if passable?(@x, @y, Input::DOWN)
      $game_party.move_down_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_left(turn_enabled = true)
    if passable?(@x, @y, Input::LEFT)
      $game_party.move_left_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_right(turn_enabled = true)
    if passable?(@x, @y, Input::RIGHT)
      $game_party.move_right_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_up(turn_enabled = true)
    if passable?(@x, @y, Input::UP)
      $game_party.move_up_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_lower_left
    # ???????A?????? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
      $game_party.move_lower_left_party_actors
    end
    super
  end
  def move_lower_right
    # ?????E?A?E???? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
      $game_party.move_lower_right_party_actors
    end
    super
  end
  def move_upper_left
    # ?????A?????? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
      $game_party.move_upper_left_party_actors
    end
    super
  end
  def move_upper_right
    # ???E?A?E???? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
      $game_party.move_upper_right_party_actors
    end
    super
  end
  def jump(x_plus, y_plus)
    # ?V???????W???v?Z
    new_x = @x + x_plus
    new_y = @y + y_plus
    # ???Z?l?? (0,0) ??????A?W?????v????s??\???
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
      $game_party.jump_party_actors(x_plus, y_plus)
    end
    super(x_plus, y_plus)
  end
end

end

class Game_Player
  include Train_Actor::Game_Player_Module
end
 
# Scene_Map_Module.rb 
#==============================================================================
# ?? Scene_Map_Module
#------------------------------------------------------------------------------
# ?}?b?v????A?N?^?[???????????????
#==============================================================================

module Train_Actor

module Scene_Map_Module
  def setup_actor_character_sprites(characters)
    @spriteset.setup_actor_character_sprites(characters)
  end
end

end

class Scene_Map
  include Train_Actor::Scene_Map_Module
end
 
# Spriteset_Map_Module.rb 
#==============================================================================
# ?? Spriteset_Map_Module
#------------------------------------------------------------------------------
# ?}?b?v????A?N?^?[???????????????
#==============================================================================

module Train_Actor

module Spriteset_Map_Module
  def setup_actor_character_sprites?
    return @setup_actor_character_sprites_flag != nil
  end
  def setup_actor_character_sprites(characters)
    if !setup_actor_character_sprites?
      for character in characters.reverse
        @character_sprites.unshift(
          Sprite_Character.new(@viewport1, character)
        )
      end
      @setup_actor_character_sprites_flag = true
    end
  end
end

end

class Spriteset_Map
  include Train_Actor::Spriteset_Map_Module
end
  
# Game_Party_Actor.rb 
#==============================================================================
# ?? Game_Party_Actor
#------------------------------------------------------------------------------
# ?}?b?v????A?N?^?[???????????????
#==============================================================================

module Train_Actor

class Game_Party_Actor < Game_Character
  attr_writer :move_speed
  attr_writer :step_anime

  def initialize
    super()
    @through = true
  end
  def setup(actor)
    # ?L?????N?^?[??t?@?C??????F???????
    if actor != nil and (not actor.dead?) # ????????????? ?????A????????c
      @character_name = actor.character_name
      @character_hue = actor.character_hue
    else
      @character_name = ""
      @character_hue = 0
    end
    # ?s?????x????????@????????
    @opacity = 255
    @blend_type = 0
  end
  def screen_z(height = 0)
    if $game_player.x == @x and $game_player.y == @y
      return $game_player.screen_z(height) - 1
    end
    super(height)
  end
  #--------------------------------------------------------------------------
  # ?? ??????
  #     turn_enabled : ?????????????X??????????t???O
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # ???????*
    if turn_enabled
      turn_down
    end
    # ??s??\???
    if passable?(@x, @y, Input::DOWN)
      # ???????*
      turn_down
      # ???W???X?V
      @y += 1
    end
  end
  #--------------------------------------------------------------------------
  # ?? ??????
  #     turn_enabled : ?????????????X??????????t???O
  #--------------------------------------------------------------------------
  def move_left(turn_enabled = true)
    # ???????*
    if turn_enabled
      turn_left
    end
    # ??s??\???
    if passable?(@x, @y, Input::LEFT)
      # ???????*
      turn_left
      # ???W???X?V
      @x -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ?? ?E????
  #     turn_enabled : ?????????????X??????????t???O
  #--------------------------------------------------------------------------
  def move_right(turn_enabled = true)
    # ?E?????*
    if turn_enabled
      turn_right
    end
    # ??s??\???
    if passable?(@x, @y, Input::RIGHT)
      # ?E?????*
      turn_right
      # ???W???X?V
      @x += 1
    end
  end
  #--------------------------------------------------------------------------
  # ?? ??????
  #     turn_enabled : ?????????????X??????????t???O
  #--------------------------------------------------------------------------
  def move_up(turn_enabled = true)
    # ???????*
    if turn_enabled
      turn_up
    end
    # ??s??\???
    if passable?(@x, @y, Input::UP)
      # ???????*
      turn_up
      # ???W???X?V
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ?? ????????
  #--------------------------------------------------------------------------
  def move_lower_left
    # ?????Å’???????
    unless @direction_fix
      # ?E??????????????????A??????????????????????*
      @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
    end
    # ???????A?????? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
      # ???W???X?V
      @x -= 1
      @y += 1
    end
  end
  #--------------------------------------------------------------------------
  # ?? ?E??????
  #--------------------------------------------------------------------------
  def move_lower_right
    # ?????Å’???????
    unless @direction_fix
      # ????????????????E???A??????????????????????*
      @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
    end
    # ?????E?A?E???? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
      # ???W???X?V
      @x += 1
      @y += 1
    end
  end
  #--------------------------------------------------------------------------
  # ?? ????????
  #--------------------------------------------------------------------------
  def move_upper_left
    # ?????Å’???????
    unless @direction_fix
      # ?E??????????????????A??????????????????????*
      @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
    end
    # ?????A?????? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
      # ???W???X?V
      @x -= 1
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ?? ?E??????
  #--------------------------------------------------------------------------
  def move_upper_right
    # ?????Å’???????
    unless @direction_fix
      # ????????????????E???A??????????????????????*
      @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
    end
    # ???E?A?E???? ????????R?[?X????s??\???
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
      # ???W???X?V
      @x += 1
      @y -= 1
    end
  end
end

end
 
Ok, not what i was expecting... I was expecting something in english... I'll try though. It may take me some time. Unless someone more skilled than I finishes before me, i will attempt to convert this to SDK and make the neccesary changes to enable toggling.

Meanwhile, have you looked at any of the caterpillar scripts hosted on this site? They would probably be easier to edit, I think.
 
Why don't you try just using
Code:
if ($game_switches[switch_ID] == value))
switch_ID beign the ID number of the switch, value beign true or false
, maybe this is what you want...
At least that's what I understood...
 
The only problem with that, is you can not just put it in only one place, you must put it at the beginning of every method, and then you have to state what to do if it is not true. What I will be trying to do is figure out which default methods are overwritten, alias them, use an if statement for each to test if the script is enabled and if so, it will run fukuyama's method, and if not, it will run the default method.

Unfortunately, since i work all day saturday and sunday, I will not be able to start on this until monday. It may take me two to three days to finish because when I'm at home, real life intrudes and I don't get as much computer time as I would like. however, I will attempt this. I know it is possible, and besides, I've been wanting to make a script toggle-able for sometime now, and this will give me practice. If i can accomplish this, imagine the possibilities.....
 
DraycosGoldaryn;243656 said:
The only problem with that, is you can not just put it in only one place, you must put it at the beginning of every method, and then you have to state what to do if it is not true. What I will be trying to do is figure out which default methods are overwritten, alias them, use an if statement for each to test if the script is enabled and if so, it will run fukuyama's method, and if not, it will run the default method.

Unfortunately, since i work all day saturday and sunday, I will not be able to start on this until monday. It may take me two to three days to finish because when I'm at home, real life intrudes and I don't get as much computer time as I would like. however, I will attempt this. I know it is possible, and besides, I've been wanting to make a script toggle-able for sometime now, and this will give me practice. If i can accomplish this, imagine the possibilities.....


What if you put:

Code:
if $game_switches[switch_ID] == true
return
end

at the beginning of the update method [or whatever the update section is called]. Wouldn't that stop the script before it updated? Thus, stopping the script?

EDIT:

essentially it would be this:

Code:
if $game_switches[switch_ID] == true
return
end

at this line:

Code:
def update_party_actors
if $game_party.actors.empty?
      return
    end

so this would be it:

Code:
def update_party_actors
if $game_switches[switch_ID] == true
return
end    
if $game_party.actors.empty?
      return
    end


----------------

Wouldn't that work?
 

ccoa

Member

Um, this script comes with the function he wants already built in.

Change these lines:

Code:
# TRANSPARENT_SWITCH = true
TRANSPARENT_SWITCH = false

to:

Code:
TRANSPARENT_SWITCH = true
# TRANSPARENT_SWITCH = false

And then this line:

Code:
TRANSPARENT_SWITCHES_INDEX = 20

To the number of the switch you want to use.

Then, when you turn that switch on, the train disappears, when you turn it off, they reappear.
 
Darn you ccoa... just kidding. I had just barely glanced over the script since I knew I'd have to test at home and was planning on looking into it in more detail there. I'm pretty sure i would have eventually caught that, maybe, but ccoa saved me allot of work (probably needless work) so, thank you ccoa.

So I'm not needed after all. Oh well. Dann Woolf should be happy with that.
 

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