Top

Particle Engine v1.1


mIRC Code
+ 4 likes
Please Register to submit score.
Bookmark and Share
Average Score  8.0 (of 3 scores)
Date Added  Jan 19, 2009
Last Updated  Jan 20, 2009
Tags  engine  fun  game  mirc  particle  picwin  simulator  sumwon 

Introduction

*Updates*
Added a close button in the top right corner.
Silenced a timer.
Removed mouse position text from top right corner.

This is a particle example made in mIRC. Feel free to use the particles in your own picwin project.



Instructions:

To start the engine, right click in a mIRC window and go to SumWon's Creations>Particle Engine, or type /pe.startup.

After it starts up, you can make particle explosions by clicking in the top part of the window.

You can edit many properties of the particles. These properties are:

Colour.
Minimum speed (speed1.)
Maximum speed (speed2.)
Amount of particles emitted at one time.
Size of particles.
Gravity of particles.
Nozzle size (When using stream)
Angle (When using stream)

There is also another particle emitter type, known as "Stream." To turn it on, click the stream radio button and particles will "stream" out from the mouse. You can change the angle of the stream as well as the nozzle size of stream.

*NOTES*:
Only 100 particles can exist at one time, this is to keep the frame rate up.
Don't expect to get a great frame rate.

Grab the Code

;###################################################
;#####           Particles by SumWon           #####
;#### Thanks for trying out my particle engine! ####
;###      To open it, right click and goto       ###
;####     SumWon's stuff>Particle Engine or     ####
;#####            type /pe.startup             #####
;###################################################
 
on *:LOAD:timer 1 1 $input(Thanks for installing my particle engine! To open it $+ $chr(44) right click and goto SumWon's Creations>Particle Engine or type /pe.startup,o,Welcome,)
 
menu status,channel {
  SumWon's Creations
  .Paricle Engine:{
    pe.startup
  }
}
menu @pe {
  sclick:{
    if ($inrect($mouse.x,$mouse.y,305,0,15,15)) {
    .timerpe off
      close -@ @pe
    }
 
    ;# Syntax for createParticle command: createparticle color size x y angle speed life gravity [picture]
    if ($mouse.y < 200) {
      if (%pe.intro) unset %pe.intro
      var %i = %pe.amount
      if (%pe.parttype == 1) {
        while (%i) { 
          if (%pe.break) {
            unset %pe.break
            echo breaking
            break
          }
          createparticle $rgb(%pe.red,%pe.green,%pe.blue) %pe.size $calc($mouse.x - %pe.size / 2) $calc($mouse.y - %pe.size / 2) $r(0,360) $r(%pe.mxspeed,%pe.mnspeed) %pe.life %pe.gravity
          dec %i
        }
      }
    }
    else {
      if ($mouse.y > 212 && $mouse.y < 223 && $mouse.x > $calc(60 + ( %pe.red / 2.55) - 2) && $mouse.x < $calc(60 + ( %pe.red / 2.55) + 6)) {
        %pe.redsel = 1
      }
      else if ($mouse.y > 227 && $mouse.y < 238 && $mouse.x > $calc(60 + ( %pe.green / 2.55) - 2) && $mouse.x < $calc(60 + ( %pe.green / 2.55) + 6)) {
        %pe.greensel = 1
      }
      else if ($mouse.y > 242 && $mouse.y < 253 && $mouse.x > $calc(60 + ( %pe.blue / 2.55) - 2) && $mouse.x < $calc(60 + ( %pe.blue / 2.55) + 6)) {
        %pe.bluesel = 1
      }
      else if ($mouse.y > 257 && $mouse.y < 268 && $mouse.x > $calc(60 + %pe.mnspeed - 2) && $mouse.x < $calc(60 + %pe.mnspeed + 6)) {
        %pe.mnspeedsel = 1
      }
      else if ($mouse.y > 272 && $mouse.y < 283 && $mouse.x > $calc(60 + %pe.mxspeed - 2) && $mouse.x < $calc(60 + %pe.mxspeed + 6)) {
        %pe.mxspeedsel = 1
      }
      else if (%pe.parttype == 1 && $mouse.y > 287 && $mouse.y < 298 && $mouse.x > $calc(60 + %pe.amount - 2) && $mouse.x < $calc(60 + %pe.amount + 6)) {
        %pe.amountsel = 1
      }
      else if (%pe.parttype == 2 && $mouse.y > 287 && $mouse.y < 298 && $mouse.x > $calc(60 + %pe.amount * 10  - 2) && $mouse.x < $calc(60 + %pe.amount * 10 + 6)) {
        %pe.amountsel = 1
      }
      else if ($mouse.y > 302 && $mouse.y < 313 && $mouse.x > $calc(60 + %pe.size - 2) && $mouse.x < $calc(60 + %pe.size + 6)) {
        %pe.sizesel = 1
      }
      else if ($mouse.y > 302 && $mouse.y < 313 && $mouse.x > $calc(238 + %pe.nozzle - 2) && $mouse.x < $calc(238 + %pe.nozzle + 6)) {
        %pe.nozzlesel = 1
      }
      else if ($mouse.y > 214 && $mouse.y < 224 && $mouse.x > 225 && $mouse.x < 234) {
        %pe.parttype = 1
        %pe.amount = $round($calc(%pe.amount * 10),0)
      }
      else if ($mouse.y > 229 && $mouse.y < 238 && $mouse.x > 225 && $mouse.x < 234) {
        %pe.parttype = 2
        %pe.amount = $round($calc(%pe.amount / 10),0)
      }
      else if ($mouse.y > $calc(254 + %pe.gravity * 25 - 2) && $mouse.y < $calc(254 + %pe.gravity * 25 + 6) && $mouse.x > 185 && $mouse.x < 197) {
        %pe.gravitysel = 1
      }
      else if ($mouse.y > 240 && $mouse.y < 300 && $mouse.x > 235 && $mouse.x < 295) {
        %pe.anglesel = 1
      }
    }
  }
  mouse:{
    if (%pe.redsel) {
      %pe.red = $calc(($mouse.x - 60)*2.55)
      if (%pe.red < 0) %pe.red = 0
      if (%pe.red > 254) %pe.red = 254
    }
    else if (%pe.greensel) {
      %pe.green = $calc(($mouse.x - 60)*2.55)
      if (%pe.green < 0) %pe.green = 0
      if (%pe.green > 254) %pe.green = 254
    }
    else if (%pe.bluesel) {
      %pe.blue = $calc(($mouse.x - 60)*2.55)
      if (%pe.blue < 0) %pe.blue = 0
      if (%pe.blue > 254) %pe.blue = 254
    }
    else if (%pe.mnspeedsel) {
      %pe.mnspeed = $calc(($mouse.x - 60))
      if (%pe.mnspeed < 0) %pe.mnspeed = 0
      if (%pe.mnspeed > 100) %pe.mnspeed = 100
      if (%pe.mxspeed < %pe.mnspeed) %pe.mxspeed = %pe.mnspeed
    }
    else if (%pe.mxspeedsel) {
      %pe.mxspeed = $calc(($mouse.x - 60))
      if (%pe.mxspeed < 0) %pe.mxspeed = 0
      if (%pe.mxspeed > 100) %pe.mxspeed = 100
      if (%pe.mnspeed > %pe.mxspeed) %pe.mnspeed = %pe.mxspeed
    }
    else if (%pe.amountsel) {
      if (%pe.parttype == 1) {
        %pe.amount = $calc(($mouse.x - 60))
        if (%pe.amount < 1) %pe.amount = 1
        if (%pe.amount > 100) %pe.amount = 100
      }
      if (%pe.parttype == 2) {
        %pe.amount = $calc(($mouse.x - 60) / 10)
        if (%pe.amount < 1) %pe.amount = 1
        if (%pe.amount > 10) %pe.amount = 10
      }
      %pe.amount = $round(%pe.amount,0)
    }
    else if (%pe.sizesel) {
      %pe.size = $calc(($mouse.x - 60))
      if (%pe.size < 2) %pe.size = 2
      if (%pe.size > 100) %pe.size = 100
    }
    else if (%pe.nozzlesel) {
      %pe.nozzle = $calc(($mouse.x - 238))
      if (%pe.nozzle < 0) %pe.nozzle = 0
      if (%pe.nozzle > 50) %pe.nozzle = 50
    }
    else if (%pe.gravitysel) {
      %pe.gravity = $calc(($mouse.y - 254) / 25)
      if (%pe.gravity < -1) %pe.gravity = -1
      if (%pe.gravity > 1) %pe.gravity = 1
    }
    else if (%pe.anglesel) {
      %pe.angle = $calc($pe.getangle(265,270,$mouse.x,$mouse.y) * -1)
    }
  }
  leave:{
    $pe.unsetmenubtns
  }
  uclick:{
    $pe.unsetmenubtns
  }
}
alias pe.unsetmenubtns {
  unset %pe.redsel
  unset %pe.greensel
  unset %pe.bluesel
  unset %pe.mxspeedsel
  unset %pe.mnspeedsel
  unset %pe.amountsel
  unset %pe.sizesel
  unset %pe.gravitysel
  unset %pe.anglesel
  unset %pe.nozzlesel
}
alias createparticle {
  if (!$hget(particles)) hmake particles 100
  var %x = 1
  while ($hget(particles,$+(color.,%x))) {
    ;echo . $hget(particles,$+(color.,%x)) %x
    inc %x
  }
  if (%x < 100) {
    hadd particles $+(color.,%x) $1
    hadd particles $+(size.,%x) $2
    hadd particles $+(x.,%x) $3
    hadd particles $+(y.,%x) $4
    hadd particles $+(xs.,%x) $calc(0 + ($6 * $cos($5).deg))
    hadd particles $+(ys.,%x) $calc(0 + ($6 * $sin($5).deg))
    hadd particles $+(life.,%x) $7
    hadd particles $+(grav.,%x) $8
    hadd particles $+(pic.,%x) $9
  }
  ;else %pe.break = 1
}
 
alias pe.startup {
  if ($hget(particles)) hfree particles
  if ($window(@pe)) close -@ @pe
  %pe.red = 254
  %pe.blue = 254
  %pe.green = 254
  %pe.mnspeed = 2
  %pe.mxspeed = 7
  %pe.life = 50
  %pe.size = 3
  %pe.gravity = 0.25
  %pe.amount = 20
  %pe.parttype = 1
  %pe.angle = 90
  %pe.nozzle = 0
  %pe.intro = 1
 
  window -paoCzdk0 +tndL @pe -1 -1 320 320
  pe.loop
}
 
alias pe.loop {
  clear -n @pe
  drawtext -n @pe 0 10 10 Particles: $calc($hget(particles,0).item / 9)
  if (%pe.intro) drawtext -n @pe 0 45 100 Click here to make particles
  ;if ($mouse.x != $null && $mouse.y != $null) drawtext -n @pe 0 250 10 $mouse.x $mouse.y
  ;###Draw Paricles###
  var %x = 1
  while (%x < 100) {
    if ($hget(particles,$+(color.,%x))) {
      hinc particles $+(ys.,%x)) $hget(particles,$+(grav.,%x))
      hinc particles $+(x.,%x) $hget(particles,$+(xs.,%x))
      hinc particles $+(y.,%x) $hget(particles,$+(ys.,%x))
      hdec particles $+(life.,%x)) 1
      if ($hget(particles,$+(life.,%x)) <= 0) {
        hdel -w particles $+(*,.,%x)
      }
      else drawrect -nrf @pe $hget(particles,$+(color.,%x)) 1 $hget(particles,$+(x.,%x)) $hget(particles,$+(y.,%x)) $hget(particles,$+(size.,%x)) $hget(particles,$+(size.,%x))
    }
    inc %x
  }
  ;###End Draw Paricles###
  ;###Draw Menu###
  drawline -n @pe 0 3 0 200 320 200
  drawfill -n @pe 1 0 1 210
  drawtext -n @pe 4 10 210 Red
  drawtext -n @pe 9 10 225 Green
  drawtext -n @pe 12 10 240 Blue
  drawtext -n @pe 0 10 255 Speed1
  drawtext -n @pe 0 10 270 Speed2
  drawtext -n @pe 0 10 285 Amount
  drawtext -n @pe 0 10 300 Size
 
  drawline -nr @pe $rgb(%pe.red,%pe.green,%pe.blue) 3 60 217 160 217
  drawline -nr @pe $rgb(%pe.red,%pe.green,%pe.blue) 3 60 232 160 232
  drawline -nr @pe $rgb(%pe.red,%pe.green,%pe.blue) 3 60 247 160 247
  drawline -n @pe 0 3 60 262 160 262
  drawline -n @pe 0 3 60 277 160 277
  drawline -n @pe 0 3 60 292 160 292
  drawline -n @pe 0 3 60 307 160 307
 
 
  drawline -n @pe 1 1 60 217 160 217
  drawline -n @pe 1 1 60 232 160 232
  drawline -n @pe 1 1 60 247 160 247
  drawline -n @pe 1 1 60 262 160 262
  drawline -n @pe 1 1 60 277 160 277
  drawline -n @pe 1 1 60 292 160 292
  drawline -n @pe 1 1 60 307 160 307
 
 
  drawrect -n @pe 0 1 $calc(60 + (%pe.red / 2.55)) 212 3 11
  drawrect -n @pe 0 1 $calc(60 + (%pe.green / 2.55)) 227 3 11
  drawrect -n @pe 0 1 $calc(60 + (%pe.blue / 2.55)) 242 3 11
  drawrect -n @pe 0 1 $calc(60 + %pe.mnspeed) 257 3 11
  drawrect -n @pe 0 1 $calc(60 + %pe.mxspeed) 272 3 11
  if (%pe.parttype == 1) drawrect -n @pe 0 1 $calc(60 + %pe.amount) 287 3 11
  else drawrect -n @pe 0 1 $calc(60 + %pe.amount * 10) 287 3 11
  drawrect -n @pe 0 1 $calc(60 + %pe.size) 302 3 11
 
 
  drawtext -n @pe 0 175 210 Grav
  drawline -n @pe 0 3 190 230 190 280
  drawline -n @pe 1 1 190 230 190 280
  drawrect -n @pe 0 1 185 $calc(254 + %pe.gravity * 25) 11 3
 
  drawdot -n @pe 0 5 230 220
  drawdot -n @pe 0 5 230 235
  drawtext -n @pe 0 240 210 Explosion
  drawtext -n @pe 0 240 225 Stream
  if (%pe.parttype == 1) drawdot -n @pe 1 3 230 220
  if (%pe.parttype == 2) {
    drawdot -n @pe 1 3 230 235
    drawdot -n @pe 0 30 265 270
    drawdot -n @pe 1 28 265 270
    ;var %ang = $calc($pe.getangle(265,280,$mouse.x,$mouse.y) * -1)
    ;%pe.angle = %ang
    drawline -n @pe 0 2 265 270 $calc(264 + (-28 * $cos(%pe.angle).deg)) $calc(269 + (-28 * $sin(%pe.angle).deg))
 
    drawtext -n @pe 0 185 300 nozzle
    drawline -n @pe 0 3 238 307 288 307
    drawline -n @pe 1 1 238 307 288 307
    drawrect -n @pe 0 1 $calc(238 + %pe.nozzle) 302 3 11
 
    if ($mouse.x && $mouse.y && $mouse.y < 200) {
      var %i = %pe.amount
      while (%i) { 
        if ($r(0,1)) {
          var %noz = $r(0,%pe.nozzle)
        }
        else var %noz = $calc($r(0,%pe.nozzle) * -1)
        if ($r(0,5) == 5) createparticle $rgb(%pe.red,%pe.green,%pe.blue) %pe.size $calc($mouse.x - %pe.size / 2) $calc($mouse.y - %pe.size / 2) $calc(%pe.angle + 180 + %noz) $r(%pe.mxspeed,%pe.mnspeed) %pe.life %pe.gravity
        dec %i
      }
    }
  }
  drawrect -n @pe 0 1 304 0 15 15
  drawline -n @pe 0 1 305 0 319 14
  drawline -n @pe 0 1 304 14 318 0
  ;###End Draw Menu###
  drawdot @pe
  .timerpe -o 1 0 pe.loop
}
 
;GetAngle by BlueThen
alias -l pe.getangle {
  %p1.x = $1 | %p1.y = $2 | %p2.x = $3 | %p2.y = $4 | %p3.x = %p2.x | %p3.y = %p1.y | %opposite = $sqrt($calc((%p2.x - %p3.x)^2 + (%p2.y - %p3.y)^2))
  %hypotenuse = $sqrt($calc((%p2.x - %p1.x)^2 + (%p2.y - %p1.y)^2)) | %angle = $asin($calc( %opposite / %hypotenuse )).deg
  if (%p1.y < %p2.y) %angle = $calc(360 - %angle) | if ((%p1.x > %p2.x) && (%p1.y > %p2.y)) %angle = $calc(180 - %angle)
  elseif ((%p1.x > %p2.x) && (%p1.y < %p2.y)) %angle = $calc(180 +(360 - %angle)) | return $calc(%angle - 180)
}
 
 

Comments

  (12)  RSS
BabyJesus
Comments: 21
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 1:20 am
This would be cool if i could get it to work, all im gettin is the dialog and some text but nothing else no sliders or anything.
SumWon
Comments: 17
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 1:40 am
Sorry about that BabyJesus. It didn't work for you because I made it with a black background in mIRC, and your background is white. I have changed it and it should work fine for you now =D.
BabyJesus
Comments: 21
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 1:57 am
Ahh ok pretty cool, your amount slider tends to disappear though. Great work.
BlueThen
Comments: 391
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 11:02 am
I love it!
jonesy44
Comments: 1,856
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 12:14 pm
Really awesome!! nice one :D Few suggestions for you though.

#1: Close button?
#2: Silence a timer (line 11)
^Neptune
Comments: 599
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 3:43 pm
This is brilliant! I really need to get to grips with picwins sometime, the stuff you can make is awesome :[
BabyJesus
Comments: 21
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 6:12 pm
Fail whale you're still alive? how ya?
Soulkeeper
Comments: 80
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 19, 2009 9:59 pm
Would be awesome if you had

/pe.close window -c @pe

Other than that, it's okay.

Would've rated higher than 6, but I wasn't too fond of having to dig through the help file to remember how to close a @window. >:|

Plus, it's just neat. Not really useful or anything for me.
^Neptune
Comments: 599
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 20, 2009 12:17 pm
I get this when I manually close it:

Code:
* /drawline: invalid window (line 220, script2)
^Neptune
Comments: 599
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 20, 2009 4:11 pm
When we all thought BT was conquering picwins, this guy comes along. D:
SumWon
Comments: 17
 
mIRC Snippet:  Particle Engine v1.1
Posted on Jan 20, 2009 7:12 pm
Thanks for the comments guys! Sorry about not making a close function for the window. I added a 'x' in the corner to close the window. Enjoy =D.
Priest
Comments: 5
 
mIRC Snippet:  Particle Engine v1.1
Posted on Mar 17, 2009 5:36 pm
It lagged for me but thats cause my comps crap... Was interesting, reminded me of the old star-travveling screensaver for windows.

Commenting Options

Register or Login to Hawkee.com or use your Facebook or Twitter account by clicking the corresponding button below.

  
Bottom