A couple of murdered bugs, today.
-=-=-
The "Return from inside an If" and other such things, should now behave like you'd expect.
If things don't run how you're expecting, let me know what and where.
WARNING : This is a fairly significant update to how the main parser works, and although I've tried my best to "Only Fix", there might be occasions where things might've broken.
DO, absolutely DO let me know if anything has done that.
Meanwhile, have a stress test!!
// Falling Petals
// by Jayenkai
// Created 2021/6/9
Symbol 0,"0__220.2,4400442046.40,60060.60060,46.4024400442,0.22";
Graphics 512,512,2
petals=30
flrs=5
skips=3
pt=0
Dim petl(500,10)
Dim flr(500,10)
y=ScreenHeight()/(flrs+2)
for n=0 to flrs
flr(n,2)=y*(n+1)
w=jRand(160,256)
h=jRand(-32,32)
flr(n,1)=jRand(0,ScreenWidth()-w)
flr(n,3)=flr(n,1)+w
flr(n,4)=flr(n,2)+h
flr(n,5)=Neg(0.1)
if h>0 then flr(n,5)=0.1
next
for d=0 to petals
petl(d,1)=jRand(16,ScreenWidth()-16)
petl(d,2)=0-jRand(16,ScreenHeight())
petl(d,3)=0
petl(d,4)=0
petl(d,5)=h
next
Repeat
CLS
pt=((pt+1) mod skips)
SetFontSize 32
SetCol 255,128,0
for n=0 to flrs
SetSize 1
x1=flr(n,1);y1=flr(n,2);x2=flr(n,3);y2=flr(n,4)
Line(x1,y1,x2,y2)
next
for d=0 to petals
ResetDraw()
if pt==(d mod skips)
x1=petl(d,1)
y1=petl(d,2)
x2=petl(d,1)
y2=petl(d,2)+petl(d,4)+7
for n=0 to flrs
if CollideLineToLine(flr(n,1),flr(n,2),flr(n,3),flr(n,4),x1,y1,x2,y2)
petl(d,2)=LineCollidePointY-6
ang=flr(n,5)
petl(d,3)=petl(d,3)+ang
petl(d,4)=0.5
endif
next
petl(d,2)=petl(d,2)+4+petl(d,4)
petl(d,4)=petl(d,4)
petl(d,4)=petl(d,4)+0.5
if petl(d,4)>6 then petl(d,4)=6
if petl(d,2)>jscrh+32
petl(d,2)=-32
petl(d,1)=jRand(16,ScreenWidth()-16);
petl(d,3)=0
petl(d,4)=0
endif
s=petl(d,3)
petl(d,1)=petl(d,1)+s*4
petl(d,3)=s*0.94
petl(d,5)=petl(d,5)+s*8
endif
x=petl(d,1);y=petl(d,2)
SetSize 0.25;SetRot petl(d,5)
DrawImg x,y,0
next
Flip
Forever