Here is a little one-nighter that never went anywhere - ripe for editing and making something good out of
If you run it as is then use the middle mouse button to zoom in/out - the starting camera angle is inside the camera tracked ship.
This has a few neat tricks in that might appear confusing if you are new, feel free to ask away.
I've put the media up for you to download (7mb):
http://freescape.successionthebetrayal.com/spaceMedia.zip.
I had some trouble picking out the exact files I wanted from those directories and left them in the root - I have adjusted the source code to match - and here is that source code:
`Gameplay
dim gamespeed#(11)
for set=2 to 11 : gameSpeed#(set)=set*50 : next set
dim lastTime(1)
dim getName(1)
dim objInUse(200)
dim lightInUse(4)
dim camX#(50)
dim camY#(50)
dim camZ#(50)
dim sunX(5000)
dim sunY(5000)
dim sunZ(5000)
dim sunO(5000)
dim sunN$(5000)
dim sunT(5000)
dim sunP(5000)
dim sunC(5000)
dim planetDay#(5000,10)
dim planetDaySpeed#(5000,10)
dim planetOrbit#(5000,10)
dim planetOrbitSpeed#(5000,10)
dim planetDist(5000,10)
dim planetType(5000,10)
dim planetO(5000,10)
dim planetSz(5000,10)
dim nebX(10)
dim nebY(10)
dim nebZ(10)
dim nebT(10)
dim nebSz(10)
dim nebA(10,10)
dim nebB(10,10)
dim nebC(10,10)
dim nebO(10,10)
dim nebN$(10)
dim shipDest(250)
dim shipO(250)
dim shipT(250)
dim shipDam(250)
dim shipArm(250)
dim shipAcc#(250)
dim shipSpd#(250)
dim shipSet#(250)
dim shipTop#(250)
dim shipTrn#(250)
dim shipRad(250)
dim shipStl(250)
dim shipWep(250)
dim shipFireRate(250)
dim shipFireDelay(250)
dim shipWastedTime(250)
dim wepO(100)
dim wepfX#(100)
dim wepfY#(100)
dim wepfZ#(100)
dim wepLife(100)
dim wepDam(100)
dim wepImmune(100)
dim planetN$(10)
planetN$(1)=" I" : planetN$(2)=" II" : planetN$(3)=" III" : planetN$(4)=" IV"
planetN$(5)=" V" : planetN$(6)=" VI" : planetN$(7)=" VII" : planetN$(8)=" VIII"
planetN$(9)=" IX" : planetN$(10)=" X"
init3d()
makeUniverse()
gosub nameUniverse
for ship=191 to 200
makeShip(ship,1+rnd(1))
position object shipO(ship),sunX(500)+rnd(50000)-rnd(50000),sunY(500)+rnd(20000)-rnd(20000),sunZ(500)+rnd(50000)-rnd(50000)
next ship
camTarg=100
lastTime(1)=timer()
do
update()
for ship=1 to 250
if shipDam(ship)>0
cpu(ship)
endIf
next ship
text 20,40,str$(shipDest(camTarg))
text 20,60,str$(shipSpd#(camTarg))
display()
if shipDam(camTarg)>0
cameraTrack(camTarg)
else
camTarg=rnd(250)
endIf
moveWarheads()
sync
loop
function cpu(ship)
if scancode()<>0
text 1004,20,str$(scancode())
endIf
if shipDest(ship)>0
s=shipDest(ship)
if object position x(shipO(ship))=>sunX(s)-((shipSpd#(ship)*15)+5)
if object position x(shipO(ship))<=sunX(s)+((shipSpd#(ship)*15)+5)
if object position y(shipO(ship))=>sunY(s)-((shipSpd#(ship)*15)+5)
if object position y(shipO(ship))<=sunY(s)+((shipSpd#(ship)*15)+5)
if object position z(shipO(ship))=>sunZ(s)-((shipSpd#(ship)*15)+5)
if object position z(shipO(ship))<=sunZ(s)+((shipSpd#(ship)*15)+5)
shipDest(ship)=1+rnd(4999)
endIf
endIf
endIf
endIf
endIf
endIf
dx=sunX(s)
dy=sunY(s)
dz=sunZ(s)
targ=rnd(250)
if shipDam(targ)>0
if targ<>ship
rngX=abs(object position x(shipO(ship))-object position x(shipO(targ)))
rngY=abs(object position y(shipO(ship))-object position y(shipO(targ)))
rngZ=abs(object position z(shipO(ship))-object position z(shipO(targ)))
rng=rngX+rngY+rngZ-(shipRad(ship)/shipStl(targ))
if rng<0 then shipDest(ship)=-targ
endIf
endIf
else
targ=abs(shipDest(ship))
if object exist(shipO(targ))
dx=object position x(shipO(targ))
dy=object position y(shipO(targ))
dz=object position z(shipO(targ))
fireAngle#=object angle x(shipO(ship))+object angle y(shipO(ship))+object angle z(shipO(ship))
else
shipDest(ship)=1+rnd(4999)
endIf
endIf
set object to object orientation 201,shipO(ship)
move object 201,100
point object 201,dx,dy,dz
move object 201,shipTrn#(ship)*gameSpeed#(1)
n=rnd(10) : if n=0 then turn object right 201,1 : move object 201,0.5
point object shipO(ship),object position x(201),object position y(201),object position z(201)
if shipFireDelay(ship)<1
if shipDest(ship)<0
fireResult#=object angle x(shipO(ship))+object angle y(shipO(ship))+object angle z(shipO(ship))
if fireAngle#=>fireResult#-0.01 and fireAngle#<=fireResult#+0.01
shipFireDelay(ship)=shipFireRate(ship)
launchWeapon(ship)
shipWastedTime(ship)=0
else
if shipDest(ship)<0
targ=abs(shipDest(ship))
if shipDam(targ)<0 then shipWastedTime(ship)=1000
shipWastedTime(ship)=shipWastedTime(ship)+1
if shipWastedTime(ship)>500
shipDest(ship)=1+rnd(4999)
shipWastedTime(ship)=0
endIf
endIf
endIf
endIf
else
shipFireDelay(ship)=shipFireDelay(ship)-1
endIf
rngX=abs(object position x(shipO(ship))-dx)
rngY=abs(object position y(shipO(ship))-dy)
rngZ=abs(object position z(shipO(ship))-dz)
rng#=rngX+rngY+rngZ
shipSet#(ship)=shipSet#(ship)+(rng#/150)
if shipSet#(ship)>shipSpd#(ship)
shipSpd#(ship)=shipSpd#(ship)+shipAcc#(ship)
if shipSpd#(ship)>shipTop#(ship) then shipSpd#(ship)=shipTop#(ship)
else
shipSpd#(ship)=shipSpd#(ship)-shipAcc#(ship)
if shipSpd#(ship)<0 then shipSpd#(ship)=0
endIf
move object shipO(ship),shipSpd#(ship)*gameSpeed#(1)
endfunction
function cameraTrack(ship)
camX#(1)=wrapvalue(camX#(1)+mouseMoveX())
camY#(1)=wrapvalue(camY#(1)+mouseMoveY())
camZ#(1)=camZ#(1)+mouseMoveZ()
position camera object position x(shipO(ship)),object position y(shipO(ship)),object position z(shipO(ship))
` point camera object position x(shipO(ship)),object position y(shipO(ship)),object position z(shipO(ship))
rotate camera camY#(1),camX#(1),0
move camera camZ#(1)/10
endfunction
function makeShip(ship,design)
if design=1
shipObj=findEmptyObject(302,600)
shipO(ship)=shipObj
load object "spirit.3ds",shipObj
set object rotation zyx shipObj
scale object shipObj,15,15,15
yrotate object shipObj,180
fix object pivot shipObj
shipDam(ship)=10
shipArm(ship)=0
shipAcc#(ship)=0.0001
shipSpd#(ship)=0
shipSet#(ship)=0
shipTop#(ship)=.25
shipTrn#(ship)=.03
shipDest(ship)=1+rnd(4999)
shipRad(ship)=20000
shipStl(ship)=4
shipWep(ship)=1
shipFireRate(ship)=50
endIf
if design=2
shipObj=findEmptyObject(302,600)
shipO(ship)=shipObj
load object "viper.3ds",shipObj
set object rotation zyx shipObj
scale object shipObj,15,15,15
yrotate object shipObj,180
fix object pivot shipObj
shipDam(ship)=7
shipArm(ship)=0
shipAcc#(ship)=0.0002
shipSpd#(ship)=0
shipSet#(ship)=0
shipTop#(ship)=.32
shipTrn#(ship)=.05
shipDest(ship)=1+rnd(4999)
shipRad(ship)=15000
shipStl(ship)=5
shipWep(ship)=1
shipFireRate(ship)=65
endIf
endfunction
function launchWeapon(ship)
if shipWep(ship)=1
wObj=findEmptyObject(101,600)
make object plain wObj,2,2
set object wObj,1,0,0,1,0,0,0
texture object wObj,201
position object wObj,object position x(shipO(ship)),object position y(shipO(ship)),object position z(shipO(ship))
w=wObj-100
wepO(w)=wObj
wepFx#(w)=object angle x(shipO(ship))
wepFy#(w)=object angle y(shipO(ship))
wepFz#(w)=object angle z(shipO(ship))
wepLife(w)=150
wepDam(w)=2
wepImmune(w)=ship
endIf
endfunction
function moveWarheads
for wep=1 to 100
if wepO(wep)>0
wObj=wepO(wep)
rotate object wObj,wepfX#(wep),wepfY#(wep),wepfZ#(wep)
move object wObj,.5*gameSpeed#(1)
point object wObj,camera position x(0),camera position y(0),camera position z(0)
wepLife(wep)=wepLife(wep)-1
for ship=1 to 250
if shipDam(ship)>0
sObj=shipO(ship)
if object exist(sObj)
if object position x(wObj)>object position x(sObj)-(.5*gameSpeed#(1))
if object position x(wObj)<object position x(sObj)+(.5*gameSpeed#(1))
if object position y(wObj)>object position y(sObj)-(.5*gameSpeed#(1))
if object position y(wObj)<object position y(sObj)+(.5*gameSpeed#(1))
if object position z(wObj)>object position z(sObj)-(.5*gameSpeed#(1))
if object position z(wObj)<object position z(sObj)+(.5*gameSpeed#(1))
if wepImmune(wep)<>ship
damage=rnd(wepDam(wep))
if damage>shipArm(ship)
shipDam(ship)=shipDam(ship)-damage
if shipDam(ship)<0
delete object sObj
endIf
endIf
endIf
endIf
endIf
endIf
endIf
endIf
endIf
endIf
endIf
next ship
if wepLife(wep)<1
delete object wObj
wepO(wep)=0
endIf
endIf
next wep
endfunction
function update()
now=timer()
gameSpeed#(1)=now-lastTime(1)
lastTime(1)=now
`Celestial Body Orbit Update
for set=2 to 11
gameSpeed#(set)=gameSpeed#(set)+gameSpeed#(1)
if gameSpeed#(set)>500
for s=(set*500)-999 to (set*500)-500
for p=1 to sunP(s)
planetOrbit#(s,p)=wrapvalue(planetOrbit#(s,p)+(planetOrbitSpeed#(s,p)*gameSpeed#(set)))
planetDay#(s,p)=wrapvalue(planetDay#(s,p)+(planetDaySpeed#(s,p)*gameSpeed#(set)))
next p
next s
gameSpeed#(set)=gameSpeed#(set)-500
endIf
next set
endfunction
function display()
for ship=1 to 250
if shipDam(ship)>0
if object exist(shipO(ship))
rng=camRange(shipO(ship))
if rng<=20000
show object shipO(ship)
else
hide object shipO(ship)
endIf
endIf
endIf
next ship
ink rgb(255,255,255),0
for s=1 to 5000
position object 1,sunX(s),sunY(s),sunZ(s)
if object in screen(1)
if camRange(1)<40000
if camRange(1)<10000
light=findEmptyLight(dummy)
lightInUse(light)=s
position light light,sunX(s),sunY(s),sunZ(s)
show light light
color light light,sunC(s)
endIf
if sunO(s)=0
sunObj=findEmptyObject(101,300)
sunO(s)=sunObj
make object plain sunObj,100,100
texture object sunObj,sunT(s)
ghost object on sunObj
position object sunObj,sunX(s),sunY(s),sunZ(s)
set object sunObj,1,0,0,1,0,0,0
endIf
point object sunO(s),camera position x(0),camera position y(0),camera position z(0)
show object sunO(s)
else
range=((250001-camRange(1))*255)/250000
brange=range+92
if range>255 then range=255
if brange>255 then brange=255
if range<0 then range=0
if brange<0 then brange=0
if range+brange>0
ink rgb(range,range,brange),0
dot object screen x(1),object screen y(1)
endIf
if sunO(s)>0
delete object sunO(s)
sunO(s)=0
endIf
endIf
if camRange(1)<50000
ink rgb(200,200,200),0
set text size 20
center text object screen x(1),object screen y(1)-18,sunN$(s)
endIf
else
if sunO(s)>0
if camRange(sunO(s))>15000
light=0
if lightInUse(1)=s then light=1
if lightInUse(2)=s then light=2
if lightInUse(3)=s then light=3
if lightInUse(4)=s then light=4
if light>0
lightInUse(light)=0
hide light light
endIf
delete object sunO(s)
sunO(s)=0
else
hide object sunO(s)
endIf
endIf
endIf
if camRange(1)<24000
for p=1 to sunP(s)
if planetType(s,p)>0
if planetO(s,p)=0
plnObj=findEmptyPlanetObject(dummy)
objInUse(plnObj)=1
planetO(s,p)=plnObj
texture object plnObj,planetType(s,p)
position object plnObj,sunX(s),sunY(s),sunZ(s)
show object plnObj
scale object plnObj,planetSz(s,p),planetSz(s,p),planetSz(s,p)
endIf
position object planetO(s,p),sunX(s),sunY(s),sunZ(s)
rotate object planetO(s,p),0,planetOrbit#(s,p),0
move object planetO(s,p),planetDist(s,p)
rotate object planetO(s,p),0,planetDay#(s,p),0
if object in screen(planetO(s,p))
set text size 12
ink rgb(192,192,192),0
center text object screen x(planetO(s,p)),object screen y(planetO(s,p))-10,sunN$(s)+planetN$(p)
endIf
endIf
next p
else
if planetO(s,1)>0
for p=1 to sunP(s)
if planetO(s,p)>0
plnObj=planetO(s,p)
hide object plnObj
ObjInUse(plnObj)=0
planetO(s,p)=0
endIf
next p
endIf
endIf
next s
for n=1 to 10
position object 1,nebX(n),nebY(n),nebZ(n)
if camRange(1)<400000
if nebO(n)=0
nebObj=findEmptyObject(101,300)
nebO(n)=nebObj
make object plain nebObj,nebSz(n),nebSz(n)
make mesh from object 1,nebObj
for l=1 to 10
if nebA(n,l)>0
add limb nebObj,l,1
rotate limb nebObj,l,nebA(n,l),nebB(n,l),nebC(n,l)
endIf
next l
delete mesh 1
set object nebObj,1,0,0,1,1,1,1
position object nebObj,nebX(n),nebY(n),nebZ(n)
rotate object nebObj,0,0,0
ghost object on nebObj
texture object nebObj,nebT(n)
endIf
if object in screen(nebO(n))
if camRange(1)<270000
ink rgb(255,255,255),0
set text size 20
center text object screen x(nebO(n)),object screen y(nebO(n))-18,nebN$(n)
endIf
endIf
else
if nebO(n)>0
delete object nebO(n)
nebO(n)=0
endIf
endIf
next n
` if leftkey() then turn camera left gamespeed#(1)/20
` if rightkey() then turn camera right gamespeed#(1)/20
` if upkey() then pitch camera up gamespeed#(1)/20
` if downkey() then pitch camera down gamespeed#(1)/20
` if shiftkey() then move camera gamespeed#(1)*25
` if controlkey() then move camera -gamespeed#(1)*25
ink rgb(255,128,0),0
set text size 8
text 20,20,"Fps: "+str$(screen fps())+" GameSpeed: "+str$(gamespeed#(1))
position light 0,camera position x(0),camera position y(0),camera position z(0)
endfunction
function findEmptyLight(sun)
light=1
for source=1 to 4
if lightInUse(source)=0 then light=source
next source
endfunction light
function findEmptyObject(start,last)
for obj=start to last
if object exist(obj)=0
foundObj=obj
obj=last+1
endIf
next obj
endfunction foundObj
function findEmptyPlanetObject(dummy)
obj=1
for plnObj=2 to 100
if objInUse(plnObj)=0
obj=plnObj
plnObj=101
endIf
next plnObj
endfunction obj
function camRange(obj)
rngX=abs(object position x(obj)-camera position x(0))
rngY=abs(object position y(obj)-camera position y(0))
rngZ=abs(object position z(obj)-camera position z(0))
rng=rngX+rngY+rngZ
endfunction rng
function init3d()
set display mode 1024,768,16
autocam off
set camera range 1,5000000
sync on
`Handler Object - rotate object
make object plain 1,0.0001,0.0001
hide object 1
`Handler Object - pitch/roll object
make object plain 201,0.0001,0.0001
hide object 201
set object rotation zyx 201
backdrop on
color backdrop rgb(0,0,0)
load image "sun01.bmp",2
load image "sun02.bmp",3
load image "sun03.bmp",4
load image "sun04.bmp",5
load image "sun05.bmp",6
load image "sun06.bmp",7
load image "sun07.bmp",8
load image "sun08.bmp",9
load image "sun09.bmp",10
load image "sun10.bmp",11
load image "bigCelest\celestial\gas1.bmp",21
load image "bigCelest\celestial\gas2.bmp",22
load image "bigCelest\celestial\gas3.bmp",23
load image "bigCelest\celestial\gas4.bmp",24
load image "bigCelest\celestial\gas5.bmp",25
load image "bigCelest\celestial\gas6.bmp",26
load image "bigCelest\celestial\toxic1.bmp",31
load image "bigCelest\celestial\toxic2.bmp",32
load image "bigCelest\celestial\toxic3.bmp",33
load image "bigCelest\celestial\toxic4.bmp",34
load image "bigCelest\celestial\toxic5.bmp",35
load image "bigCelest\celestial\barren1.bmp",41
load image "bigCelest\celestial\barren2.bmp",42
load image "bigCelest\celestial\barren3.bmp",43
load image "bigCelest\celestial\barren4.bmp",44
load image "bigCelest\celestial\barren5.bmp",45
load image "bigCelest\celestial\barren6.bmp",46
load image "bigCelest\celestial\barren7.bmp",47
load image "bigCelest\celestial\barren8.bmp",48
load image "bigCelest\celestial\barren9.bmp",49
load image "bigCelest\celestial\barren10.bmp",50
load image "bigCelest\celestial\desert1.bmp",61
load image "bigCelest\celestial\desert2.bmp",62
load image "bigCelest\celestial\desert3.bmp",63
load image "bigCelest\celestial\desert4.bmp",64
load image "bigCelest\celestial\ocean1.bmp",71
load image "bigCelest\celestial\ocean2.bmp",72
load image "bigCelest\celestial\ocean3.bmp",73
load image "bigCelest\celestial\ocean4.bmp",74
load image "bigCelest\celestial\ocean5.bmp",75
load image "bigCelest\celestial\gaia1.bmp",81
load image "bigCelest\celestial\gaia2.bmp",82
load image "bigCelest\nebula1.bmp",101
load image "nebula2.bmp",102
load image "bigCelest\nebula3.bmp",103
load image "bigCelest\nebula4.bmp",104
load image "bigCelest\nebula5.bmp",105
load image "bigCelest\nebula6.bmp",106
load image "energyBolt.bmp",201
load image "particle01.bmp",202
for plnObj=2 to 100
load object "gaia.x",plnObj
objInUse(plnObj)=0
xrotate object plnObj,90
fix object pivot plnObj
next plnObj
set ambient light 0
set point light 0,0,0,0
set light range 0,300000
color light 0,rgb(30,30,50)
set text font "arial"
for sL=1 to 4
make light sL
set point light sL,0,0,0
set light range sL,10000
color light sL,rgb(255,255,255)
next sL
endfunction
function makeUniverse()
randomize 0
`Solar placement
orbit#=0
dist#=0
for sweep=1 to 2500
spin#=spin#+rnd(250)
spin#=spin#/100
orbit#=wrapvalue(orbit#+spin#)
dist#=(sweep+rnd(2501-sweep))*10
position object 1,0,0,0
rotate object 1,0,orbit#,0
move object 1,dist#
sunX(sweep)=object position x(1)
sunY(sweep)=((2500-sweep)-(rnd(5000-(sweep*2))))*(1+rnd(9))
sunZ(sweep)=object position z(1)
move object 1,-(dist#*2)
sunX(sweep+2500)=object position x(1)
sunY(sweep+2500)=((2500-sweep)-(rnd(5000-(sweep*2))))*(1+rnd(9))
sunZ(sweep+2500)=object position z(1)
next sweep
for spaceOut=1 to 5000
sunX(spaceOut)=sunX(spaceOut)*24
sunY(spaceOut)=sunY(spaceOut)*10.5
sunZ(spaceOut)=sunZ(spaceOut)*18
sunT(spaceOut)=2+rnd(9)
if sunT(spaceOut)=2 then sunC(spaceOut)=rgb(200,200,255)
if sunT(spaceOut)=3 then sunC(spaceOut)=rgb(255,255,0)
if sunT(spaceOut)=4 then sunC(spaceOut)=rgb(255,200,0)
if sunT(spaceOut)=5 then sunC(spaceOut)=rgb(200,200,0)
if sunT(spaceOut)=6 then sunC(spaceOut)=rgb(255,255,0)
if sunT(spaceOut)=7 then sunC(spaceOut)=rgb(255,200,255)
if sunT(spaceOut)=8 then sunC(spaceOut)=rgb(200,175,0)
if sunT(spaceOut)=9 then sunC(spaceOut)=rgb(0,255,0)
if sunT(spaceOut)=10 then sunC(spaceOut)=rgb(0,0,255)
if sunT(spaceOut)=11 then sunC(spaceOut)=rgb(255,0,0)
next spaceOut
for nebula=1 to 10
nebX(nebula)=sunX(rnd(4999)+1)
nebY(nebula)=sunY(rnd(4999)+1)
nebZ(nebula)=sunZ(rnd(4999)+1)
nebT(nebula)=101+rnd(5)
nebSz(nebula)=(100+rnd(200))*300
for limb=1 to rnd(10)
nebA(nebula,limb)=rnd(360)
nebB(nebula,limb)=rnd(360)
nebC(nebula,limb)=rnd(360)
next limb
next nebula
for s=1 to 5000
pln=rnd(10)
if pln<=3
planets=rnd(4)+rnd(4)+rnd(2)
else
if pln<=6
planets=rnd(10)
else
if pln<=8
planets=rnd(4)
else
planets=0
endIf
endIf
endIf
if s<=200
planets=planets+rnd(2)
else
if s<350
planets=planets+rnd(1)
else
if s>1000 and s<=1500
planets=planets-rnd(1)
else
if s>1500 and s<=2000
planets=planets-1
else
if s>2000 and s<=2400
planets=planets-(1+rnd(1))
else
if s>2400
planets=planets-2
endIf
endIf
endIf
endIf
endIf
endIf
if planets>10 then planets=10
if planets<0 then planets=0
sunP(s)=planets
for p=1 to planets
planetOrbit#(s,p)=rnd(360)
planetDist(s,p)=planetDist(s,p-1)+((p*100)+rnd(p*100))
if planetDist(s,p)<=180
`Irradiated
planetType(s,p)=21+rnd(5)
planetSz(s,p)=2+rnd(4)
else
if planetDist(s,p)<=220
`Toxic
planetType(s,p)=31+rnd(4)
planetSz(s,p)=3+rnd(5)
else
if planetDist(s,p)<=280
`Barren
planetType(s,p)=41+rnd(9)
planetSz(s,p)=3+rnd(8)
else
if planetDist(s,p)<=300
`Desert
planetType(s,p)=61+rnd(3)
planetSz(s,p)=4+rnd(8)
else
if planetDist(s,p)<=330
`Ocean
planetType(s,p)=71+rnd(4)
planetSz(s,p)=5+rnd(8)
else
if planetDist(s,p)<=350
`Terran
planetType(s,p)=81+rnd(1)
planetSz(s,p)=5+rnd(10)
else
`More Barren
planetType(s,p)=41+rnd(9)
planetSz(s,p)=5+rnd(15)
endIf
endIf
endIf
endIf
endIf
endIf `
n=rnd(4)
if n=0
`Gas Giant
planetType(s,p)=21+rnd(5)
planetSz(s,p)=10+rnd(40)
endIf
planetOrbitSpeed#(s,p)=0.0001
divisor#=planetDist(s,p)
planetOrbitSpeed#(s,p)=planetOrbitSpeed#(s,p)*(1+(rnd(1000)/divisor#))
planetDaySpeed#(s,p)=0.0003*rnd(100)
next p
next s
endfunction
nameUniverse:
for s=1 to 5000
gosub prefix
gosub suffix
sunN$(s)=prefix$+suffix$
next s
for n=1 to 10
gosub prefix
gosub suffix
nebN$(n)=prefix$+suffix$+" Nebula"
next n
return
prefix:
data "Sol","Alpha Cent","Alpha Beth","Beta Cyg","Wolf"
data "Mur","Beta Uran","Urap","Plut","Vard"
data "Fel","Brigh","Stort","Har","Dral"
data "End","Rel","Pneum","Shad","Ven"
data "Corf","Per","Afr","Vign","Sl"
data "Valh","Yor","Lon","Card","Chelm"
data "Opr","Alh","Prag","Torn","Queb"
data "Bor","Alf","Rom","Fran","Ger"
data "Lithuan","Ukr","Parag","En","Ir"
data "Wol","Frank","Pol","Rus","Ukion"
data "Palac","Shad","Mag","Cler","Wiz"
data "Bes","Rit","Popul","Analg","Weff"
data "Iron","Big","Lit","Litt","Liff"
data "An","Nich","Joah","Sus","Mar"
data "Eran","Eron","Eixit","Eax","Rul"
data "Roll","Ran","Rop","Tan","Ton"
data "Tau","Tau Cet","Tap","Toun","Tip"
data "Yan","Yip","Ual","Uad","Inix"
data "Ixin","Ollan","Oran","Ok","Opal"
data "Par","Paren","Pipp","Pour","Pearc"
data "Asan","Asiz","Arrix","Ar","Aln"
data "Sod","Sil","San","Sup","Sort"
data "Def","Din","Dam","Don","Digin"
data "Friar","Frif","Frox","Fop","Gan"
data "Gam","Gidd","Gillin","Galour","Hot"
data "Hum","Ham","Hik","Jal","Jinol"
data "Kil","Kannar","Kir","Lim","Lam"
data "Lorr","Moth","Mard","Matal","Mar"
data "Nov","Niral","Norriol","Nohan","Bar"
data "Bick","Ballan","Birimbin","Ballah","Vic"
data "Char","Cheriol","Chah","Xan","Zul"
data "Quob","Qil","Qar","War","Wort"
data "Wher","Whor","Erron","Ech","El"
data "Rasc","Ric","Roll","Ron","Tur"
data "Tad","Tollon","Tarpion","Turq"
data "Yoy","Yah","Ulan","Uopin","Iog"
data "Iil","Ialalall","Orisk","Orn","Opidop"
data "Prunell","Ptel","Ptol","Piir","Parghr"
data "Asgul","Ascid","Altog","Arman","Almon"
data "Sir","Sol","Soppior","Sopran","Squel"
data "Dir","Delph","Daddar","Didling","Dittle"
data "Frisk","Frup","Frog","Furp","Gilch"
data "Gorman","Gluck","Garibal","Husk","Hoch"
data "Hilm","Jalfrez","Kikki","Kot","Kalad"
data "Leech","Loweigh","Lofit","Morbb","Musq"
data "Mual","Nar","Noch","Nivolam","Brun"
data "Bough","Baldin","Brok","Bvor","Caugh"
data "Chur","Chald","Cop","Curat","Cordon"
data "Xit","Xoren","Xat","Zorenth","Zillion"
restore prefix
for pref=1 to 1+rnd(244)
read prefix$
next pref
return
suffix:
data "ix","uim","ium","old","erd"
data "ar","ius","ard","orgik","alp"
data "ionis","iowniz","ok","alla","orp"
data "orch","urk","alk","eronius","ive"
data "elle","ion","uld","ard","al"
data "ince","onia","iford","an","ec"
data "ulio","ow","e","ic","ard"
data "olia","um","ulous","amion","amium"
data "ulous","ari","ilen","ue","on"
data "elli","opia","opan","apan","igi"
data "iu","o","e","a","i"
data "u","eu","ea","io","ou"
data "ouh","oue","us","ous","ellan"
data "par","pillo","parad","pox","purn"
data "ordo","ora","orni","olb","och"
data "ian","iana","iorno","ich","ie"
data "ual","uch","urn","uah","uw"
data "yan","yin","ying","yong","yar"
data "tar","tan","tang","tal","turn"
data "rom","rum","ring","ral","ru"
data "each","eoh","elm","eo","eep"
data "welch","wulp","walm","wisk","ward"
data "qin","qon","qil","qar","que"
data "asd","arf","arn","alm","arch"
data "san","son","sun","sarp","sing"
data "fro","frim","froth","farl","fichi"
data "garn","goulm","gone","gip","gan"
data "h","hoth","hol","hurt","ha"
data "jan","jil","jon","jix","jane"
data "kilo","kath","ko","ki","kal"
data "lim","lamb","lor","lommi","lam"
data "zaro","zinnini","zi","xi","xith"
data "vik","vino","va","vargh","vord"
data "bi","bicyl","bark","bu","bal"
data "numm","norr","na","nono","ni"
data "mor","mum","mal","muth","march"
restore suffix
for suf=1 to 1+rnd(179)
read suffix$
next suf
return
I did this a fair while a go as a technology tester for a much larger project i'm still working on, as i'm never going to return to it so i'm happy to let everyone have it as open-source. I am not sure but I think some of the planet textures might be copyrighted, can't remember what ones I used... /shrug
Anyway first exercise is to program it so you can fly around and take a look at the galaxy, it's quite fun to fly through the galactic arm and looks pretty if you zoom right out and look at the shape of the milky way (although you might have to flatten the universe so you can see it all when you do that, can't remember how I left it).
BTW: Unless you change it the middle mouse button zooms camera in and out, this is important because the camera starts inside a spaceship!
Andy
Pneumatic Dryll, Outrageous epic cleric of EQ/Xev
God made the world in 7 days, but we're still waiting for the patch.