| 
 New Particle Engine by Arevulopapo - arevulopapo -  06-21-2009
 
 
 New Particle Engineby Arevulopapo
 Posted by PK8, sorries!
 Introduction
 Quoting from Anaryu's particles topic because it just fits the description.
 
 Anaryu Wrote:You've seen these effects all over, in sprite or 3D games, from console to MMOs like World of Warcraft, a Particle Engine is just a fancy term for taking a series of pictures and making them change size, fade out, and move around many times over to make it look like a flame or a bolt of lightning Script
 
 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)
 #sines
 when 'black'
 sprite='star_sine'
 add_particles(object, x, y, sprite, [(rand(7)-3)*0.2, 0], [0,0.15], [255,8+rand(5)], lock, 1)
 #sines end
 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
Instructions
 Instructions on how to use are in the script. If you're looking to create your own particle effects, refer to line 74 and below to see how these effects are made.
 
 Compatibility
 This script aliases the following:
 Spriteset_Map's initialize
Spriteset_Map's update
Spriteset_Map's dispose
 Other
 The particle graphics should be put into the Graphics/Pictures/Particles/ directory.
 
 Downloads
 Download these sample particles for this script. Note, they must be placed within the Graphics/Pictures/Particles/ directory.
 
 
  Particles.zip (Size: 136.69 KB / Downloads: 400) 
 
 New Particle Engine by Arevulopapo - Prof. Meow Meow -  11-11-2009
 
 This sounds awesome.. Can we have a screenshot?
 
 
 New Particle Engine by Arevulopapo - Bolt -  11-12-2009
 
 The real question is, does this work in RMXP or RMVX?
 
 If RMXP, I'm all over it ^_^
 
 
 New Particle Engine by Arevulopapo - DerVVulfman -  11-12-2009
 
 It's dated 2007, and has the prefix reading RMXP in our forum.
 
 Enjoy, Bolt.
   
 
 New Particle Engine by Arevulopapo - EJlol -  11-13-2009
 
 just 2 days... and then there will be a new particle system :)
 
 
 New Particle Engine by Arevulopapo - computerwizoo7 -  11-13-2009
 
 I thought that it was a 2009 version!
 oh well...
 
 
 RE: New Particle Engine by Arevulopapo - Ahzoh -  07-29-2013
 
 so..how do you use it? the script doesn't exactly show me where to put stuff. or I missed it
 
 
 RE: New Particle Engine by Arevulopapo - DerVVulfman -  07-29-2013
 
 
 And it mentions having to look at the spriteset map for a list of 'effects'Code: # Effects are called from "Script" command like this:# $scene.effect(EVENT_ID, EFFECT, LOCK, X, Y)
 For example
 $scene.effect(12, 'blue', 'event', 15, 8)
 would place the blue particle effect (as listed in the Spriteset Map), around event 12.  the effect is tied to the event ('event') rather than the spriteset itself (there are differences in how it behaves), and initially puts it over the event (again event 12) about 15 pixels off horizontally and 8 vertically.
 
 
 RE: New Particle Engine by Arevulopapo - Ahzoh -  07-29-2013
 
 i knew that part, i just didn't know where put that information(found where)
 
 so where would i put this "$scene.effect" in the script? at the bottom?
 
 
 RE: New Particle Engine by Arevulopapo - DerVVulfman -  07-29-2013
 
 Oh.... it's called a script call.
 
 When you make an event on the map, set the trigger to 'parallel process' (NOT 'autorun') and go to the right window in the screen to create a command. The 'third' page tab has a command called 'Script call' (bottom right).
 
 From there, you enter your RGSS script command... namely that.
   
 
 
 |