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.

XP New Particle Script Edit

Though not sure if this is more of a request or support for this script, But im trying to figure out a way to make the New Particle script to create the particle on self event, like whatever event it is called from the particle will show on its self? Any help would be great!
 
Jaberwoky":1plxkibq said:
Add this:
Code:
class Interpreter

  attr_reader :event_id

end
Then use $game_map.events[event_id]?

Hmm that didnt work out to well.

Tried it out by inserting it into here.
Code:
$scene.effect(EVENT_ID, EFFECT, LOCK, X, Y)

 

 

This is the script Im using!
Code:
#===============================================================================

# New Particle Engine

#   by arevulopapo

#   Nov 15th 2007

#

# This script lets you create particle effects in your game.

# Particles are integrated into "Spriteset_Map,

# so the can be displayed over/under an event.

# Effects are called from "Script" command like this:

# $scene.effect(EVENT_ID, EFFECT, LOCK, X, Y)

# EVENT_ID  - ID of an event the particles will flow from.

#             (-1) for player, (1) and above for events.

# EFFECT    - name of the effect to call. Names are defined in the Spriteset_Map.

# LOCK      - alignment of the particles. 'event' to align particles

#             with event's map position, 'screen' to align with event's screen position.

#             For static events, like fireplaces, teleports, etc. 'event' alignment is recommended.

#             For moving events use 'screen' mode.

# X, Y      - number of pixels that will be added to the event's position

#             to determine the starting point of particles.

#             That's your most powerful weapon ;) See the demo for examples.

#===============================================================================

 

class Scene_Map

  

  def effect(event=1, effect='', lock='event', x=0, y=0)

    @spriteset.add_effect(event, effect, lock, x, y)

  end

  

end

#===============================================================================

#

#===============================================================================

class Spriteset_Map

  

  attr_reader :particles

  

  alias particle_ssm_init initialize

  alias particle_ssm_update update

  alias particle_ssm_dispose dispose

  #-----------------------------------------------------------------------------

  def initialize

    @particles = []

    particle_ssm_init

  end

  #-----------------------------------------------------------------------------

  def dispose

    @particles.each{ |d| d.dispose }

    particle_ssm_dispose

  end

  #-----------------------------------------------------------------------------

  def update

    @particles.each_with_index{ |p,i|

      @particles[i].update

      if p.opacity == 0

        p.dispose

        @particles.delete_at(i)

      end

      }

    particle_ssm_update

  end

  #-----------------------------------------------------------------------------

  def add_effect(event=1, effect='', lock='event', x=0, y=0)

    

    case event

    when -1

      object = $game_player

    else

      object = $game_map.events[event]

    end

    

    case effect

    # (sprite, acceleration[x,y], gravity[x,y], opacity[base,loss], blending)

    when 'blue'

      sprite='star_blue'

      add_particles(object, x, y, sprite, [1.00*(-15+rand(30))/10, 1.00*(-15+rand(30))/10], [0,0], [160,5+rand(15)], lock, 1)

    when 'red'

      sprite='star_red'

      add_particles(object, x, y, sprite, [1.00*(-15+rand(30))/10, 1.00*(-15+rand(30))/10], [0,0], [160,5+rand(15)], lock, 1)

    when 'green'

      sprite='star_green'

      add_particles(object, x, y, sprite, [1.00*(-15+rand(30))/10, 1.00*(-15+rand(30))/10], [0,0], [160,5+rand(15)], lock, 1)

    when 'yellow'

      sprite='star_yellow'

      add_particles(object, x, y, sprite, [1.00*(-15+rand(30))/10, 1.00*(-15+rand(30))/10], [0,0], [160,5+rand(15)], lock, 1)

    when 'smash'

      sprite='smash'

      add_particles(object, x, y, sprite, [1.00*(-15+rand(30))/10, 1.00*(-15+rand(30))/10], [0,0], [160,5+rand(15)], lock, 1)

    when 'fire'

      sprite='particle_yellow'

      add_particles(object, x, y, sprite, [(rand(7)-3)*0.2, 0], [0,0.15], [255,8+rand(5)], lock, 1)

    when 'fire2'

      sprite='particle_orange'

      add_particles(object, x, y, sprite, [(rand(7)-3)*0.2, 0], [0,0.15], [255,8+rand(5)], lock, 1)

    when 'sparks'

      sprite='particle_red'

      add_particles(object, x, y, sprite, [0.5*(-25+rand(50))/10, -4], [0,-0.5], [255,20], lock, 1)

    when 'smoke'

      sprite='smoke'

      add_particles(object, x, y, sprite, [0.1*(-25+rand(50))/10, 0], [0,0.13], [128,3], lock, 1)

    when 'cells'

      sprite='particle_red'

      dx = 1.00*(-100 + rand(200))/100

      dy = 1.00*(-100 + rand(200))/100

      add_particles(object, x, y, sprite, [5*dx, 5*dy], [0.3*dx,0.3*dy], [255,10], lock, 1)

    end

 

  end

  #-----------------------------------------------------------------------------

  def add_particles(object=$game_player, x=0, y=0, sprite='', acc=[0,0], grav=[0,0], opacity=[255,0], lock='event', blend=0)

    if lock=='event'

      @particles << Particle_Event.new(@viewport1, object, x, y, sprite, acc, grav, opacity, blend)

    elsif lock=='screen'

      @particles << Particle_Screen.new(@viewport1, object, x, y, sprite, acc, grav, opacity, blend)

    end

  end

  

end

#===============================================================================

#

#===============================================================================

class Particle_Screen < Sprite

  

  def initialize(viewport=Viewport.new(0,0,800,600), object=$game_player, x=0, y=0, sprite='', acc=[0,0], grav=[0,0], opacity=[255,3], blend=0)

    super(viewport)

    self.bitmap = RPG::Cache.picture('Particles/' + sprite)

    self.x = object.screen_x + x

    self.y = object.screen_y - 16 + y

    self.ox = self.oy = self.bitmap.width/2

    self.blend_type = blend

    self.opacity = opacity[0]

    @object = object

    @origin = [self.x, self.y]

    @acceleration = acc

    @gravity = grav

    @coords = [0.00, 0.00]

    @opacity = opacity[1]

    update

  end

  

  def update

    @acceleration[0] -= @gravity[0] if @gravity[0] != 0

    @acceleration[1] -= @gravity[1] if @gravity[1] != 0

    @coords[0] += @acceleration[0]

    @coords[1] += @acceleration[1]

    self.opacity -= @opacity

    self.x = @origin[0] + @coords[0]

    self.y = @origin[1] + @coords[1]

    if self.y > (@object.screen_y - 16)

      self.z = @object.screen_z + 32

    else

      self.z = @object.screen_z - 32

    end

  end

  

end

 

class Particle_Event < Sprite

  

  def initialize(viewport=Viewport.new(0,0,800,600), object=$game_player, x=0, y=0, sprite='', acc=[0,0], grav=[0,0], opacity=[255,3], blend=0)

    super(viewport)

    self.bitmap = RPG::Cache.picture('Particles/' + sprite)

    self.x = object.x*32 + 16 - $game_map.display_x / 4 + x

    self.y = object.y*32 + 32 - $game_map.display_y / 4 + y

    self.ox = self.oy = self.bitmap.width/2

    self.blend_type = blend

    self.opacity = opacity[0]

    @object = object

    @origin = [object.x*32 + x + 16, object.y*32 + y + 32]

    @acceleration = acc

    @gravity = grav

    @coords = [0.00, 0.00]

    @opacity = opacity[1]

    update

  end

  

  def update

    @acceleration[0] -= @gravity[0] if @gravity[0] != 0

    @acceleration[1] -= @gravity[1] if @gravity[1] != 0

    @coords[0] += @acceleration[0]

    @coords[1] += @acceleration[1]

    self.opacity -= @opacity

    self.x = @origin[0] + @coords[0] - $game_map.display_x / 4

    self.y = @origin[1] + @coords[1] - $game_map.display_y / 4 - 16

    if self.y > (@object.screen_y - 16)

      self.z = @object.screen_z + 32

    else

      self.z = @object.screen_z - 32

    end

  end

  

end
 
Hmm synaxerror occurred...

I think maybe cause when i put in this

$scene.effect(get_character(0).id,'cells','screen')

it turns it into this

$scene.effect(get_character
(0).id,'cells','screen')

but maybe not
 

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