From FSG Wiki
ELEMENT Clear Mgun 127 200 250 0 1 1 1 1000 Clear 100 TEXT Mgun
// NEW STATUS MENU, ADDED THE BOUNCE ON OR OFF
TRIGGER newStatusmenu {
STATUS CLEAR
STATUS ADDTEXT "FPS: "
STATUS ADDNUMBER FPS
STATUS ADDTEXT " Over: "
STATUS ADDMOUSEOVER
STATUS ADDTEXT " X/Y: "
STATUS ADDNUMBER X
STATUS ADDTEXT "/"
STATUS ADDNUMBER Y
STATUS ADDTEXT " BOUNCE "
IF (Bounce == 1) <STATUS ADDTEXT "ON"> ELSE <STATUS ADDTEXT "OFF">
TIMER 1 FRAMES newStatusmenu
}
// USEFULL GET_ANGLE FUNCTION
TRIGGER GET_ANGLE {
SET tmpX ($0 - $2)
SET tmpY ($1 - $3)
SET tmp (SQRT ((tmpX * tmpX) + (tmpY * tmpY)))
}
TRIGGER KEYREPEAT_SPACE {
EXEC ShootPixel ELEMENT1 X Y
}
TRIGGER ShootPixel {
EXEC GET_ANGLE $1 $2 (1 RAND WIDTH) (1 RAND HEIGHT)
tmpX1 = ($1 * 50)
tmpY1 = ($2 * 50)
tmpX2 = ((tmpX * -50 ) / tmp)
tmpY2 = ((tmpY * -50 ) / tmp)
FlyElement = $0
EXEC MovePixel tmpX1 tmpY1 tmpX2 tmpY2 (1000 RAND 10000)
}
REMOVETRIGGER KEY_w
TRIGGER KEYREPEAT_w {
Bounce = (1 - Bounce)
}
TRIGGER MovePixel {
StopMoving = 0
// TEST THE FUTURE PIXEL TO BE DRAWN IF ITS EARTH
tstX = (($0 + $2) / 50)
tstY = (($1 + $3) / 50)
tstElement = (tstX PIXEL tstY)
IF (tstElement == ELEMENT:Earth) {
// IF ITS EARTH, WE CHECK IF THE BOUNCE IS ON (1) OR OFF (0)
IF (Bounce == 1) {
// IF BOUNCE IS ON, WE TEST 1 ANGLE TO BE BOUNCED TO, IF THE FUTURE PIXEL TO BE DRAWN IS EARTH
// WE TEST ANOTHER ANGLE, THEN IF THAT ANGLE FUTURE PIXEL RETURN EARTH, BE JUST BOUNCE BACK WERE HE CAME FROM
tstX = (($0 + ($2 * -1)) / 50)
tstY = (($1 + $3) / 50)
tstElement = (tstX PIXEL tstY)
IF (tstElement == ELEMENT:Clear) <StopMoving = 1>
IF (StopMoving == 0) {
tstX = (($0 + $2) / 50)
tstY = (($1 + ($3 * -1)) / 50)
tstElement = (tstX PIXEL tstY)
IF (tstElement == ELEMENT:Clear) <StopMoving = 2>
}
IF (StopMoving == 0) <StopMoving = 3>
}
}
// RETEST IF THE FUTURE PIXEL TO BE DRAWN IF ITS EARTH
tstX = (($0 + $2) / 50)
tstY = (($1 + $3) / 50)
tstElement = (tstX PIXEL tstY)
IF (tstElement != ELEMENT:Earth) {
// IF ITS NOT EARTH, WE CHECK FOR SANDBOX BORDER, THEN IF OUT OF BORDER MAKE IT BOUNCE TO CORRECT ANGLE
IF (($0 / 50) > WIDTH) <StopMoving = 1>
IF (($1 / 50) > HEIGHT) <StopMoving = 2>
IF (($0 / 50) < 0) <StopMoving = 1>
IF (($1 / 50) < 0) <StopMoving = 2>
IF ($4 < 0) <StopMoving = 4>
DRAW FlyElement POINT (($0 + $2) / 50) (($1 + $3) / 50)
}
// THIS CHANGE THE DIRECTION OF THE MOVEMENT BY CHANGE THE X OR Y MOVEMENT TO INVERTED VALUE (* -1)
IF (StopMoving == 1) <TIMER 1 FRAMES MovePixel ($0 + ($2 * -1)) ($1 + $3) ($2 * -1) $3 ($4 - 1) $5>
IF (StopMoving == 2) <TIMER 1 FRAMES MovePixel ($0 + $2) ($1 + ($3 * -1)) $2 ($3 * -1) ($4 - 1) $5>
IF (StopMoving == 3) <TIMER 1 FRAMES MovePixel ($0 + ($2 * -1)) ($1 + ($3 * -1)) ($2 * -1) ($3 * -1) ($4 - 1) $5>
IF (StopMoving == 0) <TIMER 1 FRAMES MovePixel ($0 + $2) ($1 + $3) $2 $3 ($4 - 1)>
}
// SET DEFAULT VALUE
ELEMENT1 = ELEMENT:Mgun
statustype = 1
Bounce = 1
KEYREPEATDELAY = 1
KEYREPEATRATE = 120
EXEC newStatusmenu
EXEC listgroups
EXEC listelements GROUP:Clear