// Platdude's Minecart Challenge
// by Jayenkai
// Created 2021/9/6

// https://GotoJSE.com/G6pRrJFn.BAS

Symbol 0,"1__0_0_0_0_0_0_0II0_0?II0@z0?I0_z0?BB0@z0?B0B0!A_A_A_A?0C_C?00A_A?00A_A?0,C_C,0.A_A,0.A_A,";
Symbol 1,"1__0_0_0_0_0_0_0II0_0?II0_0?I0_0!BB0_0?B0B";
Symbol 2,"0__00y.0,yx.y0yxxzwxxyyxzzwwxyyxwwzzxyyxxwzxxy0yx.y0,y.";
Symbol 3,"1__0_0_0_0_0_0_0_0_0_0_0_0_0.yz_z?yxzzyyzzyyzzyyzzx0zz00zz00zz00zz00zz00zz00zz00zz";
Symbol 4,"24_R_R_R_R_R_R_R_R,QR@SR_R_R_R_R_R,SR_R_R_R_R_R_R,QR_R_R_R_R_R_R_R_R_R_RSR_R_RRQR_R_R_R_R_R_R.SR_R_R_R_R_R.SR_SR_R_R_R_R_R_R_R_R_R_R,QR_R_R_R_R_SR_R_R_R_R_SR_R_R_R_R_R_RRQR_R_R_R_R_R_R_R_R_R_R_R_R_R_R_R_RQR,SR_R_R.SR_R_R.SR_R_R_R_R_R_R_R/QR_R!SR_R_R_R_R_R_R_R_R_RR";
Symbol 5,"24_R_R_R_R_R_R_R_R_R_R_R_R!SR_R_R_R_R!SR_R_R_R_RQR_R?QR_R_R_R_R_R_R_R_R_R_R_R_R_R_R_R_RSR_R_R,QR_R_R_R_R_R,SR_R_R_R_R_R_R_RRQR_R@SR_R_R_R_R_R@QR_R@SR_RRSR@SR_R_R_R_R_R_R_R_R_R_R_R_R_R_R_R_R_R!QR_QR_R_R_R_R/QQR_R_R!SR_R_R_R_R/SR_R_R_R_R!QR_R_R_R_R_R_R_R_R_R_R_RR";
Symbol 6,"24_R_R_R_R_R_R_SR_R_R_R_R_R_R_R_R@SR/QR_R?SR,QR_R_R_R_R?SR@QR_R_R_R_R_R_R_R_R_R_R_R_R_R_R_R@QR_R_R_R_R_RSR_R_R_R_R,QR_R!QR_R_RRSR_QR_RRSR_R_R_R_R_R?SR_R_R_R_R_QR.SR_R_R_R_R,QR_R_R_R_R_R_R_R_RRQR_R_R_R_R_R_R_R_RSR_R_R_R_R_R_R_R_RRSR_R!SR_R_RQR_R_R_R_R_R.QR_R_R_R_R_R_R_R?";
Symbol 7,"24_R_R_R_R_R_R_R_RSR_R@QR_R_R.SR_R_R_R_R_R.QR_R_R_R_R,SR_R@SR_R_R_R_R_R.QR_R_R_R_R_R/SR_R_R_R_R_R_R_R_R@SR_RRQR_R_R_R_R_R_R_R_R_R@SR_R/QR,SR_R_R_R_R_R_R_R_R,QR_R_R_R_R,QR_R_R_R_R_R/SR_R_SR_R_R_R,QR_R_R_R_R_R_R_R!SR_R_R_R_RQR_R_R_R_R_R_R_R_R,SR?QR_R_QR_R_R?SR_R/QR_R_R_R/";
Symbol 8,"24_0_0_0_0_0_0_0_0_0R0_00S0_0_0_0_0_0_0_0_0/S0_0_R0_0_00S0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0.R0_0_0_0_0_00R0_00R0_0_0_0,S0_0.R0_0_0_0_0?S0_0_0_0_0_0?S0_0_0_0_0_0_0_0_0_R00S0_0_0!R0_0?R0_0_0_0_0,S0_0_0_0_0_0_0_0_0_0_00R0_0_0_0_0_0_0_0_00RS0_0,S";
Symbol 9,"24_0_0_0_0_0_0_0_0_0_0S0/R0_S0_0_0_0_00R0_0_0_0_0_0_0_0_0_0_0_0_0S0_0/R0_0_0.R0_0_0_0_0_0_0_0_0_0_0R0/S0/S0/R0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0?R0_0/R0_0_0!S0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0,S0,R0_0_0_0_0_0_0_0_S0_0?R0_0_0_0_0_0_0R0_0_0_0_S0_00R";
Symbol 10,"24_0_0_0_0_0!R0_0_0R0_0_S0_0_0_0_00R0_0_0_0S0_0!S0_0_0_0_0_0_0_0@R0_0_0_0_0_0@R0_0_0@S0!S0_0_0_0_0_0_0_0_0@R0_0_0S0_0_0_0_0_0_R0_0_0,S0_0_0.S0_0?R0_0_0_0_0_0_0_0_0_0!R0_0,S0_0_0_0_0_0_0S0_0@S0_0_0_0_00S0_0_0_0_0_0.R0_0_0_0_S0_0_0_0@R0_0,S0_0_0_0_0_0_0,R0_0.R";
Symbol 11,"24_0_0_0.R0_0_S0/S0_0_0_0_0_0.R0_0_0_0_0_0_0_0_00R0_0_0_0_0_0_0_0_0@R0_0_0!S0_0_0_0_0_0,R0_0_0_0@S0_0_0,S0_0_0_0_0_0@R0_0_0_0_0_0_0_0_0_0/S0_00S0_0_0_0_0_0_0_0.R0@S0.R0_R0_0_0_0_0!S0_0!S0_0_0_0_0_0!R0_0_0_0_0_0_0_0_0S0_0!S0_0_0!S0_0_0_0_0_0_0,R0!R0_0_0_0_0_S0_0_0_0R";
Symbol 12,"2__0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0@x@;_;/x@w@:_:/w_w/:_:/w_w/:_:/w@v@z_z/v_v/z_z/v_v/z_z/v_v/z_z/v@z@v_v/z_z/v_v/z_z/v_v/z_z/v_v/z_z/v_v/z_z/v_v/z_z/v_v/z_z/v_v/z@";
Symbol 13,"1__0_0_0?440_0?440_0.4.0_0,4.0_0,4.0/4_4?0,4_4,0!4@0_4!0_04!0_4@0@4@0/4,0.4,0?440@44";
Symbol 14,"0__0_0H0_0H0_00H0_0,H0.H";

Dim Track(256,5)

AntiAlias False
Graphics 800,400,1
GameHandler("Platdude's|Minecart|Challenge","Classic|Original|Random")

.StartGame
Act=0
Gosub GetLev
Return


.GetLev
Act=Act+1
Notify "Challenge "+Act,20,3

StarBump=ScreenWidth()
pbonus=0
starrest=0
stars=0
px=0
py=0
pspd=6
pgo=0
pfall=1
prot=0
pland=0
plandy=0
butt=0
bdis=1
LastLeap=0

pdead=0
pdead2=0
yeay=0


SeedRnd (GameType*3717)+Act
if GameType==3 then SeedRnd Mills()

SetBuffer BG:AntiAlias True:ResetDraw
SetCol 70,40,10
Rect 512,512,1100,1100,1
SetAlpha 0.5
For m=0 to 32
	SetSize Rand(4,16)
	x=Rnd(1024):y=Rnd(1024)
	For fx=-1 to 1
		For fy=-1 to 1
			DrawImg x+fx*1024,y+fy*1024,Rand(8,11)
		Next
	Next
Next
SetBuffer FG
AntiAlias False

y=0
r=0
rg=0
gap=jRand(24,32)
gapl=jRand(6,12)
For m=0 to 256
	Track(m,1)=x*16
	Track(m,2)=y
	Track(m,3)=r
	Track(m,4)=1
	Track(m,5)=0
	y=y+Sin(rg)*16
	
	if jRnd(0,10)<1 and m>4 then rg=jRand(-3,3)*8
	if jRnd(0,10)<1 and m>8 and m<254 then Track(m,5)=jRand(3,6)
	if m>251 then rg=0
	r=SmoothTo(r,rg,2)
	
	if m>250 then gap=10:gapl=10
	gap=gap-1
	if gap<0
		gapl=gapl-1
		Track(m,4)=0
		if gapl<0 then gap=jRand(24,32):gapl=jRand(6,12)
	endif
Next

aimx=0-ScreenWidth()*0.25
aimy=0-ScreenHeight()*0.5

scrx=aimx*0.5:scry=aimy*0.5


Return

.Ingame
CLS:ResetDraw
WrapBG 0-scrx*0.75,0-scry*0.75

aimx=px-ScreenWidth()*0.25
aimy=plandy-ScreenHeight()*0.5

scrx=SmoothTo(scrx,aimx,3)
scry=SmoothTo(scry,aimy,6)


pgo=pgo+1
if pspd>9 then pspd=9
if pspd<5 and px<16*256 then pspd=5
if pspd<0 then pspd=0

if pdead2>0 then pspd=0
if pgo==89 then JMTrackr(160,"G8G8G8G8A+8A+8A+8<C16D16C8C8C8>G8A+8A+8A8F8|>G16<G16>G16<G16>G16<G16>G16<G16>A+16<A+16>A+16<A+16>A+16<A+16>A+16<A+16C16<C16>C16<C16>C16<C16>C16<C16>>A+16<A+16>A+16<A+16>A16<A16>F16<F16|G8r16>G8G16A+16<D16C8r16>A+8r16A8<G8r16>G8G16A+16<D16C8r16>A+8r16A8|G8G8G16>G16A+16<D16G8G8G16>G16A+16<D16G8G8G16>G16A+16<D16G8G8G16>G16A+16<D16|r8G16G16G8A+8A+8r16F4r8r16G16G16G4r16G8A16A+8F8|G16D16G16A+16<D16>A+16G16A+16A+16F16A+16<D16F16D16>A+16<D16C16>G16<C16D16C16D16C16>G16A+16G16A+16G16F16D16F16A+16|<G8F8D8>A+4<D8F4G8F8D8>A+4<D8F4|r1r1|[d]|C8G+8D8r16G+16C8G+8D8r16G+16C8G+8D8r16G+16C8G+8D8r16G+16|r1|")
if pgo>90 then px=px+pspd

if pdead2>0 and pdead2<30 then pfall=0:pdead2=pdead2+1
py=py+pfall

pfall=pfall+0.25
butt=0
pland=pland-1
if GamePad(ButtonA)>0.5 or GamePad(ButtonUp)>0.5 or MouseDown()>0 then butt=1
if butt==0 and bdis<2 then bdis=0
if px>255*16
	bdis=1
	if lastleap==0 then bdis=0
endif

if butt==1 and bdis==0 and pland>0
	bdis=1
	pfall=-10
	PlaySFX("Metal_4")
	if px>255*16 then lastleap=1
endif

if butt==0 then pfall=pfall+0.4


l=Floor(px/16)-20
if l<0 then l=0
r=l+60

ly=Track(256,2)
pbonus=Floor(px-(256*16))*10

for n=l to r
	m=n
	if n>256 then m=256
		SetSize 0.55,4.05:SetRot 0
		x=(n*16)-scrx:y=(Track(m,2)-scry)
		If Track(m,4)==1 then 
		DrawImg x,y+68,4+(n mod 4)
		SetRot 180
		DrawImg x,y+196,4+((n+1) mod 4)
		SetRot 0		
		DrawImg x,y+324,4+((n+2) mod 4)
		
		SetSize 0.5,0.5
		SetRot Track(m,3)
		s=3:if n>256 then s=12
		DrawImg x,y,s
		endif
		
		
		if Track(m,5)>0
			SetSize 1,1
			SetRot(0)
			DrawImg x,y-Track(m,5)*16,13,2
			
			if Abs(x-(px-scrx))<32 and Abs((y-Track(m,5)*16)-(py-scry))<32
				for e=0 to 15
					ThrowParticle x,y-Track(m,5)*16,4,e*22.5,1,14,0
				next
				Track(m,5)=0
				stars=stars+1
				score=score+10
				PlaySFX("Beeper_Coin")
			endif
		endif

		if Abs((n*16)-px)<18
			ly=Track(m,2)
			if py>Track(m,2)+64 and pfall>=0 and Track(m,4)==0 and pdead2==0
				pdead2=1
				plandy=py
			endif
			
			if Abs(py-(Track(m,2)-12))<20 and pfall>=0 and Track(m,4)==1
				py=SmoothTo(py,Track(m,2)-12,2)
				prot=Track(m,3)
				if n<=256 then pspd=pspd+(prot*0.0005)
				if n>256
					prot=0
					if bdis==1 then bdis=2
					
					if stars<=0 then pspd=pspd-0.025:stars=0
					if stars>0
						v=1/Ceil(2+Stars)
						if v>0.15 then v=0.15
						stars=stars-v		
						if Ceil(stars)<starrest then starrest=Ceil(stars)
							ThrowParticle px-scrx-16,(py-24)-scry,4,-90,2,13,0
							ThrowParticle px-scrx-8,(py-16)-scry,4,-90,2,13,1
							ThrowParticle px-scrx,(py-8)-scry,4,-90,2,13,2
							ThrowParticle px-scrx-8,(py)-scry,4,-90,2,13,3
							ThrowParticle px-scrx-16,(py+8)-scry,4,-90,2,13,4
							c=0.5+((50-stars)*0.02)
							if c>5 then c=5
							if c<0.5 then c=0.5
							PlaySFX("Pickup_7",c)
						endif
					endif
				
				if pland<1 then PlaySFX("Noise_Thud_3")
				pland=4
				plandy=py
				pfall=0
			endif
		endif

next

if py>ly+64 and pdead2==0 then pdead2=1
if pdead2>0
	pdead=pdead+1
	if pdead>30 and pdead<80 then e=((120-pdead)/60)+1:PlaySFX("Whistle_Down",e)
	if pdead==90 then PlaySFX("Noise_Splash",jRnd(0.5,0.7)):PlaySFX("Noise_Rustle",jRnd(0.5,0.7)):PlaySFX("Noise_Crash",jRnd(0.5,0.7)):PlaySFX("Sonniss_Rattle_Metal",jRnd(0.5,0.7))
endif

if pspd<=0 and stars<=0 and px>=256*16
	pspd=0:stars=0
	if yeay==0
		PlaySFX("Beeper_Rise")
		for x=0 to ScreenWidth() step 16
			ThrowParticle x,(py-scry)+16,2,jRnd(-8,8),jRnd(1.5,3),13,jRnd(0,7)
		Next
		Score=Score+pbonus
	endif
	yeay=yeay+1
endif


ResetDraw:SetSize 0.5:SetRot prot
DrawImg px-scrx,py-scry,0
SetSize 0.15
SetRot px*3
DrawImg (px-scrx)+Sin(150+prot)*10,(py-scry)-Cos(150+prot)*10,2
SetRot (px*3)+45
DrawImg (px-scrx)+Sin(210+prot)*10,(py-scry)-Cos(210+prot)*10,2

prot=prot-4

if stars>starrest then starrest=stars


ResetDraw():SetFontSize 32
x=256*16-scrx
if x>ScreenWidth()-48 then x=ScreenWidth()-48
if x<ScreenWidth()*0.5 then x=ScreenWidth()*0.5
SetSize 3.5:DrawImg x,(ScreenHeight()*0.35)-8,13,2
SetSize 1:SetCol 0,0,0:Text x,ScreenHeight()*0.35,starrest,1

if pbonus>0 then SetCol 128,200,255:Text ScreenWidth()*0.5,ScreenHeight()*0.65,pbonus,1

if yeay>0 or pdead>0 or (px>256*16 and stars<=0) then JMStop

if yeay>120 or pdead>120 then
	if Act==3 then EndGame "Challenge Complete"
	if Act<3 then Gosub GetLev
endif

ResetDraw:TextScore jscrw/2,32,1


SetParticleSize 8
Flip
Return