@Nicholas: Thanks for your input, what had happened is I was testing collision and dying before I posted that so I had set it to the highest to get it done quicker and forgotten about it. I set it back to a sync rate of 60 and it runs smooth for me, although we'll see what others say.
And now a gift, I give you Lander Remix v2. Now with more line art....and some other goodies I coded in because something told me they needed to be there.
`Project: Lander DBPro Challenge
`Coded By: Mike Horton aKa "Skrawl"
`Date Started: 03/02/06
`Date Completed: 03/07/06
sync on:sync rate 60:set display mode 1024,768,16:hide mouse:set window off `Setup Basic Screen Settings
randomize timer() `Use System Clock To Get Random Seed, Ensures A Different Game Every Time
`VARIABLES!!!
global pX#=510.0 `Ship X Position
global pY#=100.0 `Ship Y Position
global pT#=0.0 `Ship Thrust (Thrust>0 = UP | Thrust<0 = Down)
global pS#=0.0 `Ship Strafe (Strafe>0 = Right | Strafe<0 = Left)
global pLives=3 `Player Lives - DER!
global level=1 `Current Level
global gravity#=0.0 `Planet Gravity = Changes Descent And Climb Rate
global winds#=0.0 `Planet Solar Winds = Causes Random Side Movement
global fuel=500 `Ship Fuel
global red=128 `Logo Color Changer
global green=128
global blue=128
global uX#=0.0
global uY#=300.0
global uO=0
type linetype `Type For Each Line Segment Of Ground
p1 as float `X Position 1
p2 as float `Y Position 1
p3 as float `X Position 2
p4 as float `Y Position 2
endtype
type trail `Type For Smoke Circle
tX as float `x Coord
tY as float `Y Coord
life as integer `Life Of "Particle"
size as float `Size of "Particle"
endtype
global dim ground(10) as linetype `Create Array Of Line Segments To Define Ground
global dim vapor(30) as trail `Create Array Of Smoke Trail Circles
for n=1 to 30 step 1 `Fill In Smoke Array With Starter Variables
vapor(n-1).life=0
vapor(n-1).size=3
next n
createGround() `Fill In The Array For Ground
gameHelp() `Display Begining Help Screen
`Main Game Start
do
if uO=0 `If We Dont Draw The UFO
wee=rnd(50000) `Get New Random
endif
drawShip(pX#,pY#) `Draw The Ship
if wee<=10 or uO=1 `If We Draw The UFO Or wee=rnd(50000)<=10
drawUFO() `Update The UFO
endif
drawGround() `Draw Ground For Current Level
drawHUD() `Draw Our Game HUD
cycleTrail() `Cycle Through Out Smoke Trail And Update As Necessary
wind=rnd(1000) `Lets See If We Get Some Wind
if wind<=100 `Blow The Ship From Side To Side!
inc PS#,rnd(winds#*2)-(winds#)
endif
if scancode()=0 or fuel=0 `If No Keypress
if pT#>(-3-gravity#) then dec pT#,.1 `If thrust going up, decrement it to start gravity descent
if pS#>0 then dec pS#,.1 `If Strafe > 0 decrement Strafe back to 0
if pS#<0 then inc pS#,.1 `If Strafe < 0 increment Strafe back to 0
if ps#=0 then ps#=0 `If Strafe = 0 then keep it that way, had some wierd strafing without this code
endif
pY#=(pY#-pT#)+gravity# `Assign Ship Y Coord by subtracting Thrust and adding Gravity
pX#=(pX#+pS#) `Assign Ship X Coord by adding Strafe
if pX#<0 then pX#=1024 `If Ship Goes Of Screen Right, Bring It Back On Screen Left
if pX#>1024 then pX#=0 `If Ship Goes Of Screen Left, Bring It Back On Screen Right
if pY#<=-200 `If Ship Goes Too Far Off The Top Of The Screen
ink rgb(255,0,0),0
center text 512,300,"You Left Orbit, Chicken" `Let Them Know What They Did Wrong And How They Should Feel About It
sync
wait key
restartLvl() `Restart The Level And Make Them Feel Even Worse
endif
if pY#<0 `If Ship Leaves The Top Of The Screen
ink rgb(255,0,0),0
center text 512,384,"Warning!, Leaving Orbit" `Let The Player Know Whats About To Happen
endif
if upkey()=1 and fuel>0 `If Player Is Pushing The Up Arrow Key And The Ships Got Gas
if pT#<5 then inc pT#,.1 `Increase Thrust
dec fuel,1 `Decrease Fuel
newTrail() `Create A New Smoke Trail
endif
if leftkey()=1 and pS#>-5 then dec pS#,.1 `Strafe Left
if rightkey()=1 and pS#<5 then inc pS#,.1 `Strafe Right
if getCollision(pX#,pY#+10) `Check Collision
tmp#=abs(pS#) `Get The Absolute Value Of Strafe, For Some Reason A Negative Number Here Was Annoying
if pT#<=-1.0 or tmp#>=1.0 `See If The Ship is Moving Too Fast In Any Direction
restartLvl() `If It Is, Kill The Ship And Start The Level Over
else `If Not
advanceLvl() `Send That Player To The Next Level
endif
endif
sync
cls 0
loop
`End Main Loop
function gameHelp()
set text font "Arial"
set text size 30
sync
ink rgb(0,255,0),0
center text 512,250,"Lander Remix"
set text size 20
ink rgb(200,0,200),0
center text 512,300,"Welcome To Lander Remix"
center text 512,320,"Coded By Mike Horton"
center text 512,340,"Features Unlimited Levels With Increasing Difficulty"
center text 512,360,"Controls:"
center text 512,380,"Up - Increase Thrust"
center text 512,400,"Left/Right - Strafe Ship Left And Right"
center text 512,420,"Rules:"
center text 512,440,"Attempt To Land On The Planets Surface"
center text 512,460,"You May Land Anywhere, But The Flat Spots Are Easier."
center text 512,480,"Your Fuel Will Decrease As You Thrust"
center text 512,500,"When You Run Out Of Fuel You Will Crash"
center text 512,520,"The Planets Gravity Effects How Hard It Is To Climb"
center text 512,540,"And How Quickly You Go Down"
center text 512,560,"Solar Winds In The Atmoshphere Will Move Your Ship"
center text 512,580,"From Side To Side, Making Landing Even Tougher"
center text 512,600,"That Sums It Up, Enjoy!"
sync
wait key
endfunction
function newTrail()
for n=1 to 30 step 1
if vapor(n-1).life=0 `If Place In Array Is Empty (If The Smoke Circle Isn't Already On Screen)
vapor(n-1).tX=pX# `Grab The Smoke X Coord From The Ship
vapor(n-1).tY=pY#+20 `Grab The Smoke Y Coord From The Ship and Move It Down Some
vapor(n-1).life=25 `Give The Smoke Some Life (How Many Cycles It Will Stay On Screen)
vapor(n-1).size=3 `And Set It's Starting Size
n=30
endif
next n
endfunction
function cycleTrail()
for n=1 to 30 step 1
if vapor(n-1).life>0 `If The Smoke Hasn't Died Yet
dec vapor(n-1).life,1 `Take A Life Away
inc vapor(n-1).tY,3 `Move The Smoke Down
inc vapor(n-1).size,.1 `Make It A Little Bigger
ink rgb(vapor(n-1).life*8,vapor(n-1).life*8,vapor(n-1).life*8),0 `Make It A Little Darker
circle vapor(n-1).tX,vapor(n-1).tY,vapor(n-1).size `Draw That Puppy
endif
next n
endfunction
function createGround()
ground(0).p1=0 `Set The First X Coord Of The First Line
ground(0).p2=600 `Set The First Y Coord Of The First Line
for n=1 to 10 step 1
temp = rnd(200) + ground(n-1).p1 `Get Second X Coord
do
change= rnd(300) `Get Decision Variable
if change<100 `If Decision<100
temp2=ground(n-1).p2-rnd(200) `Get Second Y Coord Above First One
endif
if change>=100 and change <200 `If Decision>=100 and Decision<200
temp2=ground(n-1).p2 `Get Second Y Coord At The First One Making A Straight Line
endif
if change>=200 and change<=300 `If Decision>=200 and change <=300
temp2=ground(n-1).p2+rnd(200) `Get Second Y Coord Below First One
endif
if temp2>=400 and temp2<=650 then exit `If Second Y Coord Is Within Exceptable Range, Then Kick Us Out Of The Loop
loop
if n<10 `If We Aren't On Our Last Line
ground(n-1).p3=temp `Set Line's Second X Coord
ground(n-1).p4=temp2 `Set Line's Second Y Coord
else `If We Are On The Last Line
ground(n-1).p3=1024 `Set Line's Second X Coord
ground(n-1).p4=600 `Set Line's Second Y Coord
endif
if n<10 `If We Aren't On Our Last Line
ground(n).p1=temp `Set Next Lines First X Coord
ground(n).p2=temp2 `Set Next Lines First Y Coord
endif
next n
endfunction
function drawShip(x1 as float,y1 as float)
ink rgb(255,255,255),0
line x1,y1,(x1-5),(y1+15)
line (x1-5),(y1+15),(x1+5),(y1+15)
line (x1+5),(y1+15),x1,y1
endfunction
function drawUFO()
if uO=0
uY#=rnd(400)
uX#=0.0
uO=1
endif
inc uX#,1
if uX#=1024 then uO=0
ink rgb(255,255,255),0
ellipse uX#,uY#,15,8
line uX#-15,uY#-1,uX#+15,uY#-1
line uX#-15,uY#+1,uX#+15,uY#+1
for n=-15 to 15 step 3
ink rgb(rnd(255),rnd(255),rnd(255)),0
circle uX#+n,uY#,1
next n
endfunction
function drawGround()
ink rgb(255,255,255),0
for n=0 to 9
line ground(n).p1,ground(n).p2,ground(n).p3,ground(n).p4
next n
endfunction
function getCollision(x1 as float,y1 as float)
for n=0 to 9 step 1 `Step Through Every Line Segment In The Ground Array
for t#=0.0 to 100.0 step 1.0 `Used In Getting Each Point Along The Line
lX#=t#/100 `Get Percent
lX#=lX#*ground(n).p3 `Get Point At Percent Value Of Line X Coord
lX#=lX#+ground(n).p1 `Add First Point To Ensure We're On The Line
if lX# >= (ground(n).p3) then lX#=ground(n).p3 `Safeguard To Ensure We Dont Go Off The Line
if (ground(n).p4) = (ground(n).p2) then lY#=ground(n).p4 `If Line Y Coord Doesn't Change, Point Doesn't Either
if (ground(n).p4) <> (ground(n).p2) `If Line Y Coord Changes Go Here
lY#=t#/100 `Get Percent
if (ground(n).p4) > (ground(n).p2) `If Line Y Coords Go Down Do This
lY#=lY#*ground(n).p4 `Get Point At Percent Value Of Line Y Coord
lY#=lY#+ground(n).p2 `Add First Point To Ensure We're On The Line
if lY# >= (ground(n).p4) then lY#=ground(n).p4 `Safeguard To Ensure We Don't Go Off The Line
endif
if (ground(n).p2) > (ground(n).p4) `If Line Y Coords Go Up Do This
lY#=lY#*ground(n).p2 `Get Point At Percent Value Of Line Y Coord
lY#=ground(n).p2-lY# `Subtract First Point From Percent Value To Stay On The Line
if lY# <= (ground(n).p4) then lY#=ground(n).p4 `Safeguard To Ensure We Don't Go Off The Line
endif
endif
if (x1<=(lX#+5) and x1>=(lX#-5)) and (y1<=(lY#+5) and y1>=(lY#-5)) `See If Collision Has Occured
exitfunction 1 `Send Out That Collision Has Happened
endif
next t# `Increment T
next n `Goto Next Line Segment
endfunction 0
function restartLvl()
pLives=pLives-1
pX#=510.0
pY#=100.0
pT#=0.0
pS#=0.0
fuel=500
if pLives>=1
ink rgb(255,0,0),0
center text 512,384,"You Crashed!!"
else
ink rgb(255,0,0),0
center text 512,380,"You Lose!"
center text 512,400,"Press Escape To Run Away, Anything Else To Try Again"
pX#=510.0
pY#=100.0
pT#=0.0
pS#=0.0
pLives=3
level=1
gravity#=0.0
winds#=0.0
fuel=500
endif
sync
wait key
endfunction
function advanceLvl()
pX#=510.0
pY#=100.0
pT#=0.0
pS#=0.0
fuel=500
level=level+1
if gravity#<2
inc gravity#,.1
endif
if level=20
gravity#=0.0
endif
if level>=20 and winds#<1
inc winds#,.1
endif
ink rgb(0,255,0),0
center text 512,384,"You Landed!"
createGround()
sync
wait key
endfunction
function drawHUD()
ink rgb(0,0,255),0
text 10,740,"Lives: "+str$(pLives)
text 100,740,"Level: "+str$(level)
gTemp=gravity#*100
text 200,740,"Gravity: +"+str$(gTemp)
wTemp=winds#*100
text 300,740,"Winds: "+str$(wTemp)
text 400,740,"Fuel: "+str$(fuel)
if fuel<=200
ink rgb(255,0,0),0
text 500,740,"LOW FUEL!"
endif
if pT#<-1.5
ink rgb(255,0,0),0
text 600,740,"SLOW!"
endif
inc red,rnd(20)-10
inc green,rnd(20)-10
inc blue,rnd(20)-10
if red<0 then red=0
if red>255 then red=255
if blue<0 then blue=0
if blue>255 then blue=255
if green<0 then green=0
if green>255 then green=255
ink rgb(red,green,blue),0
line 0,700,1024,700
line 0,710,1024,710
line 700,710,700,767
line 700,767,885,767
line 700,710,885,710
line 750,767,750,755
line 750,755,720,755
line 720,755,720,710
line 740,755,740,740
line 760,767,760,710
line 730,730,750,730
line 770,767,770,750
line 780,710,780,727
line 790,710,790,767
line 810,767,820,760
line 820,760,820,717
line 820,717,810,710
line 810,730,810,740
line 850,767,850,710
line 850,750,840,750
line 850,730,840,730
line 885,767,885,710
line 870,767,865,750
line 860,730,870,730
set text to bold
ink rgb(255,0,0),0
text 890,750,"R E M I X"
set text to normal
endfunction
For now this is a final version, but who knows I may wake up at 3am with some crazy notion to add something or other. Now critique away, I await your slings and arrows.
2+2=5