Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Barabian

1
Script Troubleshooting / Re: MCES - Error when Saving
December 06, 2021, 05:18:44 am
Thanks. You're irreplaceable.
2
Script Troubleshooting / Re: MCES - Error when Saving
December 01, 2021, 05:10:35 pm
Yes i am sure. I checked on a clean project, only XPA + Mouse Controller by Blizzard v2.3 + MCES v1.74
3
Script Troubleshooting / MCES - Error when Saving
December 01, 2021, 06:13:01 am
Split topic from XPA - KK20

I have a compatibility problem with the Nathmatt MCES script. The error occurs while saving the game: no marshall_dump is defined for class MCES::Msg_Sprite. I don't know what to do with it.

MCES link
4
Thank you for your time. I used this fix and now the error has changed to this:

divided by 0
[0182]ATAN2 FIX:6:in `/'
[0182]ATAN2 FIX:6:in `atan2'
[0165]Sprite Shadow:254:in `update'
...


Edit:
After changing x and y to flat it seems to work fine. Thank you.

module Math
  class << self
    alias fix_atan2_domain_error atan2
    def atan2(y, x)
      if y == 0.0 && x == 0.0
        if 1/x.to_f > 0 # x is 0.0
          return y
        else      # x is -0.0
          return 1/y.to_f > 0 ? Math::PI : -Math::PI
        end
      end
      fix_atan2_domain_error(y, x)
    end
  end
end
5
Hi everyone, I need some help. I am using Rataim's dynamic shadow script, xpace and some others. I haven't had a problem with the shadows until today. I sometimes get the error: "Numerical argument is out of domain -" atan2 "when 2 light source events are moving and I change their speed to 1 first and then back to 4, while they are moving. I change it by using script call $game_map.events[5].move_speed.  These events have a trough and allways on top function; sometimes pass each other or by the player or other events that can be a source of shadow. How I can fix this? When I am not using the event speed change the problem does not occur.

error line: "self.angle      = 57.3 * Math.atan2(@deltax, @deltay)"

script:
#==============================================================================
# ** Sprite Shadow (Sprite_Ombre )
#------------------------------------------------------------------------------
#    Based on Genzai Kawakami's shadows
#    dynamisme & features by Rataime
#    extra features Boushy
#    New Edits by DerVVulfman
#    February 12, 2013
#
#------------------------------------------------------------------------------
#
# Introduction:
#
#  This system allows you and all 'prepared' events to generate shadows while
#  on the field map.  The player can move around  a 'light source' event and
#  display a shadow.  Likewise,  events with a special comment  within their
#  event list can also generate shadows.
#
#------------------------------------------------------------------------------
#
# Instructions:
#
#  -- The Light Source
#    To create a light source, you need to create a map event that is to be
#    used 'as' the light source.  Most of the time,  these could be events
#    that sport 'torch' or 'lantern' charactersets.  Just examples :)
#
#    To make one of these events a light source,  you need  to insert a few
#    things into that event's  "List of Event Commands".  These things are
#    nothing more than comments. 
#
#    The first comment to add is "begin Shadow Source" (without quotes). It
#    informs the system  that this event is a light source.  The remaining
#    three values are optional and have default values in the configuration
#    section  (only just added  into the script).  They too  are added  as
#    comments.
#
#    anglemin 'number'    --- Starting position of a lightsource's arc.
#    anglemax 'number'    --- Ending position of a lightsource's arc.
#    distancemax 'number'  --- How far away from the 'source' you can go
#    self_opacity 'number' --- How dark the shadow will grow.
#
#    After that, your characters can now move about and generate shadows.
#
#  -- Other Events
#    Events do not know that they can generate shadows.  To let them gene-
#    rate a shadow,  all you need to do is add a special comment into their
#    "List of Event Commands".  This comment needed  is merely  the phrase
#    'begin Shadow' (again, without quotes).
#
#
#  -- Blocking Shadows
#    To prevent shadows  from passing through  solid objects such as doors,
#    walls, cabinets or other forms of furniture,  you will want to apply a
#    priority flag of '1' or higher on these items.  Normally, walls in the
#    default database do not have a priority flag as they merely block  the
#    player from passing through.
#   
#
#------------------------------------------------------------------------------
#
# Revisions to note:
#
#  1) Added formatted headers and comments throughout the script.
#  2) Encapsulated a comment/parameter code in an XPML module.
#  3) Set the shadow array into an instance value to lower resource costs.
#  4) Compatability with Near Fantastica's Squad Movement systems.
#  5) Compatability with Ccoa's Caterpillar system.
#  6) Compatability with Trickster's Caterpillar system.
#  7) Added default shadow settings into the configuration section.
#  8) Compatability with DerVVulfman's Lycan ABS.
#
#==============================================================================



  #========================================================================
  #  **  C  O  N  F  I  G  U  R  A  T  I  O  N      S  Y  S  T  E  M  **  #
  #========================================================================
    # Caterpillar Systems
    CATERPILLAR_COMPATIBLE      = true      # Toggle for Fukuyama's original 
    SQUAD_MOVE_COMPATIBLE      = false    # Toggle for Near Fantastica's SBABS
    CCOA_CATER_COMPATIBLE      = false    # Toggle for Ccoa's Caterpillar
    TRICKSTER_CATER_COMPATIBLE  = false    # Toggle for Trickster's Caterpillar
    LYCAN_ABS_COMPATIBLE        = false    # Toggle for DerVVulfman's Lycan ABS
   
    # Shadow Specific Systems
    SHADOW_WARN                = false    # Checks for older shadow system
    SHADOW_MIN                  = 0      # Start setting of shadow arc *
    SHADOW_MAX                  = 0      # Ending setting of shadow arc *
    SHADOW_OPACITY              = 50    # Darkness level of shadow
    SHADOW_DISTANCE            = 500    # Maximum range in pixels

    # * SHADOW ARC:  Set in degrees,  this controls whether a light source
    #                can 'force' shadows in certain directions.  Useful if
    #                a light source is hanging on a wall so it cannot make
    #                a shadow THROUGH a wall.
    #
    #                It may take some practice  to set  the desired angles
    #                as it recognizes 90°  being the  top most part  of an
    #                arc,  180° being the leftmost side and so on...  pro-
    #                ceeding in a counter-clockwise motion.
   
  #========================================================================
  #  ****  E N D  O F  C O N F I G U R A T I O N  S Y S T E M  ****  #
  #========================================================================
 
 

#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
#  This class handles temporary data that is not included with save data.
#  Refer to "$game_temp" for the instance of this class.
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :shadow_spriteset        # holds shadow spritesets
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
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader :characters
end



#==============================================================================
# ** Sprite_Shadow
#------------------------------------------------------------------------------
#  This sprite is used to display the character's shadow.  It observes the
#  Game_Character class and automatically changes sprite conditions.
#==============================================================================

class Sprite_Shadow < RPG::Sprite
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :character
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    viewport  : viewport
  #    character : character (Game_Character)
  #    id        : id
  #--------------------------------------------------------------------------
  def initialize(viewport, character = nil, id = 0)
    super(viewport)
    params  = $game_temp.shadow_spriteset.shadows[id]
    @source = params[0]
    # Default settings
    @anglemin    = SHADOW_MIN
    @anglemax    = SHADOW_MAX
    @self_opacity = SHADOW_OPACITY
    @distancemax  = SHADOW_DISTANCE
    # Settings changed by parameters
    @anglemin    = params[1]  if params.size > 1
    @anglemax    = params[2]  if params.size > 2
    @distancemax  = params[3]  if params.size > 3
    @self_opacity = params[4]  if params.size > 4
    @daydepend    = params[5]  if params.size > 5 #!
    @character = character
    update
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # If shadow not in range of light source
    if $game_switches[72] == true and $game_switches[125] == false    #EDIT
      if self.opacity >= 0
        self.opacity = 0
        viewport.update
        end
        return
    end                              #<---
    if !in_range?(@character, @source, @distancemax)
      self.opacity = 0
      return
    end
    super
    # If tile ID, file name, or hue are different from current ones
    if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_hue != @character.character_hue
      # Remember tile ID, file name, and hue
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      # If tile ID value is valid
      if @tile_id >= 384
        self.bitmap = RPG::Cache.tile($game_map.tileset_name,
          @tile_id, @character.character_hue)
        self.src_rect.set(0, 0, 32, 32)
        self.ox = 16
        self.oy = 32
      # If tile ID value is invalid       
      else
        self.bitmap = RPG::Cache.character(@character.character_name,
          @character.character_hue)
        @cw = bitmap.width / 4
        @ch = bitmap.height / 4
        self.ox = @cw / 2
        self.oy = @ch
      end
    end
    # Set visible situation
    self.visible = (not @character.transparent)
    # If graphic is character
    if @tile_id == 0
      # Set rectangular transfer
      sx = @character.pattern * @cw
      sy = (@character.direction - 2) / 2 * @ch
      if self.angle > 90 or angle < -90
        sy = ( 4 - 2) / 2 * @ch  if @character.direction == 6
        sy = ( 6 - 2) / 2 * @ch  if @character.direction == 4
        sy = ( 8 - 2) / 2 * @ch  if @character.direction == 2
        sy = ( 2 - 2) / 2 * @ch  if @character.direction == 8
      end
      self.src_rect.set(sx, sy, @cw, @ch)
    end
    # Set sprite coordinates   
    self.x = @character.screen_x
    self.y = @character.screen_y-5
    self.z = @character.screen_z(@ch)-1
    # Set blend method and bush depth
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    # Animation
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
    @deltax      = @source.screen_x - self.x
    @deltay      = @source.screen_y - self.y
    self.color    = Color.new(0, 0, 0)
    @distance    = ((@deltax ** 2) + (@deltay ** 2))
    # Set opacity level based on light source distance
    self.opacity  = @self_opacity * 13000 / ((@distance * 370 / @distancemax) + 6000)
    @liczkat      = 57.3 * Math.atan2(@deltax, @deltay)
    self.angle    = @liczkat.to_f
    @angle_trigo  = self.angle+90
    if @angle_trigo < 0
        @angle_trigo = 360 + @angle_trigo
    end
    if @anglemin != 0 or @anglemax != 0
      if (@angle_trigo < @anglemin or @angle_trigo > @anglemax) and
          @anglemin < @anglemax
        self.opacity = 0
        return
      end
      if (@angle_trigo < @anglemin and @angle_trigo > @anglemax) and
          @anglemin > @anglemax
        self.opacity=0
        return
      end   
    end
  end
  #--------------------------------------------------------------------------
  # * In Range?  (From Near's Anti Lag Script, edited)
  #    element    : element
  #    object      : object
  #    range      : range in tiles
  #-------------------------------------------------------------------------- 
  def in_range?(element, object, range)
    x = (element.screen_x - object.screen_x) * (element.screen_x - object.screen_x)
    y = (element.screen_y - object.screen_y) * (element.screen_y - object.screen_y)
    r = x + y
    if r <= (range * range)
      return true
    else
      return false
    end
  end
end



#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
#  This sprite is used to display the character.It observes the Game_Character
#  class and automatically changes sprite conditions.
#==============================================================================

class Sprite_Character < RPG::Sprite
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias shadow_initialize initialize
  alias shadow_update update 
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    viewport  : viewport
  #    character : character (Game_Character)
  #--------------------------------------------------------------------------
  def initialize(viewport, character = nil)
    @character = character
    super(viewport)
    @ombrelist = []
    # If there are no shadows
    if $game_temp.shadow_spriteset.shadows == []
      # Just perform the original call and exit
      return shadow_initialize(viewport, @character)
    end
    # Initialize any Map Event with Shadows
    if character.is_a?(Game_Event)
      params = XPML.XPML_read("Shadow", @character.id, 5)
      if params != nil
        init_char_shadows(character, viewport, Game_Event)
      end
    end
    # Initialize the Player
    init_char_shadows(character, viewport,  Game_Player)
    # Perform the original call
    shadow_initialize(viewport, @character)
  end
  #--------------------------------------------------------------------------
  # * Initialize Character Shadows
  #    character  : character (Game_Character)
  #    viewport  : viewport
  #    char_class : type of character to test
  #--------------------------------------------------------------------------
  def init_char_shadows(character, viewport, char_class)
    if character.is_a?(char_class)
      for i in 0...$game_temp.shadow_spriteset.shadows.size
        @ombrelist.push(Sprite_Shadow.new(viewport, character, i))
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    shadow_update
    if @ombrelist != []
      for i in 0...@ombrelist.size
        @ombrelist[i].update
      end
    end
  end 
end



#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
#  This class deals with events. It handles functions including event page
#  switching via condition determinants, and running parallel process events.
#  It's used within the Game_Map class.
#==============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :id
end



#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
#  This class brings together map screen sprites, tilemaps, etc.
#  It's used within the Scene_Map class.
#==============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #-------------------------------------------------------------------------- 
  attr_accessor :shadows
  #--------------------------------------------------------------------------
  # * Alias Listings
  #-------------------------------------------------------------------------- 
  alias shadow_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #-------------------------------------------------------------------------- 
  def initialize
    $game_temp.shadow_spriteset = self
    @shadows = []
    warn = false
    for k in $game_map.events.keys.sort
      if ($game_map.events[k].list != nil and
            $game_map.events[k].list[0].code == 108 and
            ($game_map.events[k].list[0].parameters == ["s"] or
            $game_map.events[k].list[0].parameters == ["o"]))
        warn = true       
      end
      params = XPML.XPML_read("Shadow Source", k, 5)
      if params != nil
          $game_temp.shadow_spriteset.shadows.push([$game_map.events[k]] + params)
      end
    end
    if warn == true and SHADOW_WARN
      p "Warning : At least one event on this map uses an obsolete way to add shadows"
    end
    # Perform the original call
    shadow_initialize
  end 
end



#==============================================================================
# ** module XPML
#------------------------------------------------------------------------------
#  This module handles the reading and passing of 'comment' parameters
#
#  The main XPML method is used to check and read event comments.
#  * It returns 'nil' if the markup 'check' text isn't even present.
#  * It returns [] if no parameters are passed
#  * It returns a parameter list with "int" converted as int.
#      eg :
#      begin first
#      begin second
#      param1 1
#      param2 two
#      begin third
#      anything 3
#
#  p XPML_read("first", event_id) -> []
#  p XPML_read("second", event_id) -> [1,"two"]
#  p XPML_read("third", event_id) -> [3]
#  p XPML_read("forth", event_id) -> nil
#===================================================

module XPML
  module_function
  #--------------------------------------------------------------------------
  # * XPML_read
  #    markup          : text in event comment to check
  #    event_id        : event ID
  #    max_param_number : maximum number of parameter/comments to load
  #-------------------------------------------------------------------------- 
  def XPML_read(markup, event_id, max_param_number = 0)
    parameter_list = nil
    event = $game_map.events[event_id]
    return if event.list == nil
      for i in 0...event.list.size
        if event.list[i].code == 108 and
          event.list[i].parameters[0].downcase == "begin " + markup.downcase
          parameter_list = [] if parameter_list == nil
          for j in i + 1...event.list.size
            if event.list[j].code == 108
              parts = event.list[j].parameters[0].split
              if parts.size != 1 and parts[0].downcase != "begin"
                if parts[1].to_i != 0 or parts[1] == "0"
                  parameter_list.push(parts[1].to_i)
                else
                  parameter_list.push(parts[1])
                end
              else
                return parameter_list
              end
            else
              return parameter_list
            end
            if max_param_number != 0 and j == i + max_param_number
              return parameter_list
            end
          end
        end
      end
    return parameter_list
  end
end
6
It works now, thank you very much.
7
Hi! It's passible to make this script working with XPAce script? It returns the following error:
 
undefined method `id' for #<Game_Map:0xb01542c>

[0141]Dynamic Sounds:675:in `interpret_dynamic_sounds_data_bgs'
[0141]Dynamic Sounds:273:in `interpret_dee_data'
[0141]Dynamic Sounds:251:in `block (2 levels) in dee_comment_search'
[0141]Dynamic Sounds:248:in `gsub'
[0141]Dynamic Sounds:248:in `block in dee_comment_search'
[0141]Dynamic Sounds:247:in `each'
[0141]Dynamic Sounds:247:in `dee_comment_search'
[0141]Dynamic Sounds:262:in `block (2 levels) in event_search'
[0141]Dynamic Sounds:260:in `each'
[0141]Dynamic Sounds:260:in `block in event_search'
[0141]Dynamic Sounds:258:in `each_value'
[0141]Dynamic Sounds:258:in `event_search'
[0141]Dynamic Sounds:708:in `setup'
[0076]Scene_Title:132:in `command_new_game'
[0076]Scene_Title:99:in `update'
[0076]Scene_Title:74:in `block in main'
[0076]Scene_Title:68:in `loop'
[0076]Scene_Title:68:in `main'
[0142][XPA] Main:37:in `block in <main>'
:1:in `block in rgss_main'
:1:in `loop'
:1:in `rgss_main'
[0142][XPA] Main:28:in `<main>'
ruby:in `eval'