Kingdom Ablaze
Sponsor
so i am using arevulopapo's particle engine and i wanted to make a better snow effect however im not very good at working with the math fuctions, so i was hoping some one would help me make a forula to look like falling snow. here is the script(not in its orginal form ive added some effects, nothing special tho)
Code:
#===============================================================================
# New Particle Engine
# Â by arevulopapo with updates by plague180
# Â 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)
  when 'plague_cells'
   sprite='particle_purple'
   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) Â
  when 'plague_spirt'
   sprite='water'
   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)
  when 'plague_sign'
   sprite='sign04'
   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)  Â
  when 'plague_exp'
   sprite='explosion'
   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 'plague_smoke'
   sprite='explosionsmoke'
   add_particles(object, x, y, sprite, [0.1*(-25+rand(50))/10, 0], [0,0.13], [128,3], lock, 1) Â
  when 'plague_effect'
   sprite='portal'
   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 'plague_sparks'
   sprite='particle_blue'
   add_particles(object, x, y, sprite, [2.5*(-35+rand(75))/10, -4], [0,-0.5], [255,20], lock, 1)
  when 'plague_snow'
   sprite='particle_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) Â
   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