Code archives/Miscellaneous/Interplanetary travel
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This demo shows simple interplanetary ship travel between two moving celestial bodies in 3D, initially inspired by the old game "Millennium 2.2" - I am using the exact body names from there (perhaps coding a remake some day) and real object radii / periods / sizes from Wikipedia (planets only, the moons would look weird and the scale wouldn't fit anymore without major modifications). The simulation doesn't use launch windows - the ship starts direct to its target and reaches full speed in a second. If set, the simulation calculates if the trajectory crosses the sun and calculates a future target position which leads to lower travel speeds (as the target object needs more time to reach the position). Just set a start and a target object (here: Moon > Callisto) and use these keys and the mouse to simulate the flight: LMB = advance time RMB = Zoom 10x Arrows = movement SHIFT = fly 10x faster with cam SPACE = turn planet/moon names on/off | |||||
AppTitle "Interplanetary Travel"
Graphics3D 800,600,32,2
SeedRnd MilliSecs()
; sun obstacle demo
;SeedRnd 6
Const MOONS = 29 ; number of moons to read
Const PLANETS = 9 ; number of planets to read
Const RANDOMIZE% = True ; random positions on/off
Const DAYINC# = 1.0/60 ; time increment per cycle
Const YEAR# = 365.256 ; earth year in days
Const AVOIDSUNCROSS%= True ; avoid sun crossing trajectory yes/no
Const AVOIDINCDAYS% = 10 ; days increment for new trajectory
Const START$ = "Moon" ; object to start at
Const TARGET$ = "Callisto" ; object to target
Const SHIPSPEED# = 20 ; ship speed (Mio. km/Day) (normal = 20 / hispeed = 40 / c=1079.9)
Global WIDTH%=GraphicsWidth() ; screen width
Global HEIGHT%=GraphicsHeight() ; screen height
Global SPEED#=DAYINC*SHIPSPEED ; calculated ship speed
Global TIMER%=CreateTimer(60) ; timer
Global INFO%=True ; Text info flag
Global STOPPER%=False ; Ship arrival flag
Global S.System=New System
Global DAYS#,MAXDIST#,CALCTIME#,ZOOM#
Global CAM%,PLANETORBITS%,SUN%,SUN0%,SUN1%,SUN2%,SUN3%,TRACER%,SHIP%,STARTOBJECT%,TARGETOBJECT%
Global MASTERPIVOT%,SOLIDPIVOT%,WIREDPIVOT%,TARGETPIVOT%
Type Moon
Field id%,parent%,name$,radius#,period#,size#,r%,g%,b%,SPEED#,random%,entity%,orbit%
End Type
Type Planet
Field id%,parent%,name$,radius#,period#,size#,r%,g%,b%,MOONS%,moon.Moon[MOONS],SPEED#,random%,entity%
End Type
Type System
Field planet.Planet[PLANETS]
End Type
; init scene
InitScene()
; init planet and moon objects and update once
Initialize()
UpdateObjects()
; set ship start position
InitShipPosition(SHIP,AVOIDSUNCROSS,AVOIDINCDAYS)
MoveMouse WIDTH/2,HEIGHT/2
;===========================================================================
; main loop
;===========================================================================
While Not KeyHit(1)
ZOOM=1.0
Local oldx#,oldy#,oldz#,multi%=1,l#=5.0
Local f#=Sqr(EntityDistance(CAM,MASTERPIVOT)/1000.0)
Local d#=EntityDistance(SHIP,TARGETPIVOT)
; store current ship position
oldx=EntityX(SHIP)
oldy=EntityY(SHIP)
oldz=EntityZ(SHIP)
; LMB = advance time
If MouseDown(1) And (Not STOPPER) Then
DAYS=DAYS+DAYINC
; near target? stop it
If d<=SPEED*2 Then
UpdateObjects()
STOPPER=True
PositionEntity SHIP,EntityX(TARGETOBJECT),EntityY(TARGETOBJECT),EntityZ(TARGETOBJECT)
CreateLine(TRACER,oldx,oldy,oldz,EntityX(SHIP),EntityY(SHIP),EntityZ(SHIP),0,255,0,1)
Else
; move ship to target
PointEntity SHIP,TARGETPIVOT
MoveEntity SHIP,0,0,SPEED
CreateLine(TRACER,oldx,oldy,oldz,EntityX(SHIP),EntityY(SHIP),EntityZ(SHIP),0,255,0,1)
EndIf
EndIf
; SHIFT = 10x faster cam flight
If KeyDown(42) Or KeyDown(54) Then multi=10
; RMB = Zoom
If MouseDown(2) Then ZOOM=20 : l=50.0
; SPACE = show/hide text info
If KeyHit(57) Then INFO=1-INFO
; camera movement
RotateEntity CAM,EntityPitch(CAM)+(MouseYSpeed()/l),EntityYaw(CAM)-(MouseXSpeed()/l),0
MoveEntity CAM,(KeyDown(205)-KeyDown(203))*f*multi,0,(KeyDown(200)-KeyDown(208))*f*multi
MoveMouse WIDTH/2,HEIGHT/2
CameraZoom CAM,ZOOM
; sun quads always point to cam
PointEntity SUN0,CAM
PointEntity SUN1,CAM
PointEntity SUN2,CAM
PointEntity SUN3,CAM
; wireframe render pass
WireFrame 1
ShowEntity WIREDPIVOT
HideEntity SOLIDPIVOT
CameraClsMode CAM,1,1
RenderWorld
; solid object render pass
WireFrame 0
HideEntity WIREDPIVOT
ShowEntity SOLIDPIVOT
CameraClsMode CAM,0,0
RenderWorld
; update object positions
UpdateObjects()
; text info
Text 0, 0,"Source > Target: "+START+" > "+TARGET
Text 0,15,"Distance.......: "+Round(d)+" Mio. km [total "+Round(MAXDIST)+" Mio. km]"
Text 0,30,"Ship Speed.....: "+Round(SPEED/DAYINC)+" Mio. km/Day ["+Round(SPEED/DAYINC/3600*1000000)+"km/sec.]"
Text 0,45,"Flight time....: "+Round(DAYS)+" Days ["+Round(CALCTIME)+" total]"
WaitTimer TIMER
Flip 0
Wend
End
;===========================================================================
; init scene objects
;===========================================================================
Function InitScene()
Local size#=13.92,suntex%
; pivots
MASTERPIVOT=CreatePivot()
SOLIDPIVOT=CreatePivot(MASTERPIVOT)
WIREDPIVOT=CreatePivot(MASTERPIVOT)
; cam
CAM=CreateCamera()
CameraRange CAM,1,32768
; orbit wireframe
PLANETORBITS=CreateMesh(WIREDPIVOT)
CreateSurface(PLANETORBITS)
EntityFX PLANETORBITS,1+2+16+32
; ship tracer wireframe
TRACER=CreateMesh()
CreateSurface(TRACER)
EntityFX TRACER,1+2+16+32
; ship
SHIP=CreateCone(16,1,SOLIDPIVOT)
RotateMesh SHIP,90,0,0
EntityFX SHIP,1
EntityColor SHIP,255,0,255
ScaleEntity SHIP,0.2,0.2,0.2
; sun
SUN=CreateSphere(8)
ScaleEntity SUN,size,size,size
EntityRadius SUN,size/2.0,size/2.0
EntityPickMode SUN,1
EntityAlpha SUN,0
; sun flares
suntex=CreateSunTexture()
SUN0=CreateQuad(SOLIDPIVOT,size*1.0,suntex,3,1+8,255,255,255,1.00)
SUN1=CreateQuad(SOLIDPIVOT,size*1.5,suntex,3,1+8,255,192,128,1.00)
SUN2=CreateQuad(SOLIDPIVOT,size*3.0,suntex,3,1+8,255,255,224,0.75)
SUN3=CreateQuad(SOLIDPIVOT,size*6.0,suntex,3,1+8,255,255,224,0.50)
End Function
;===========================================================================
; calculate ship trajectory from start object to target object
;===========================================================================
Function CalculateTrajectory(add#=0.0,avoidsun%=True)
Local pick%
; create ship target pivot
TARGETPIVOT=CreatePivot(MASTERPIVOT)
; calculate distance and estimated time to reach target position
MAXDIST#=EntityDistance(SHIP,TARGETOBJECT)
CALCTIME#=(MAXDIST/SPEED*DAYINC)+add
; calculate approximate future position of target object
DAYS=DAYS+CALCTIME
UpdateObjects()
; get ship position
Local sx#=EntityX(SHIP)
Local sy#=EntityY(SHIP)
Local sz#=EntityZ(SHIP)
; get target position
Local tx#=EntityX(TARGETOBJECT)
Local ty#=EntityY(TARGETOBJECT)
Local tz#=EntityZ(TARGETOBJECT)
; place target pivot to target object position and calc distance
PositionEntity TARGETPIVOT,tx,ty,tz
MAXDIST#=EntityDistance(SHIP,TARGETOBJECT)
; reset scene to initial position
DAYS=DAYS-CALCTIME
UpdateObjects()
; check free path avoiding sun crossing
If avoidsun Then
; check if sun is blocking
pick=LinePick(sx,sy,sz,tx-sx,ty-sy,tz-sz,10)
; free path?
If (Not pick) Then
; create a blue line and calculate the constant ship speed (should be slower than max ship speed)
CreateLine(TRACER,sx,sy,sz,tx,ty,tz,0,0,128,1)
SPEED#=(EntityDistance(SHIP,TARGETPIVOT)/(CALCTIME-DAYS)*DAYINC)
; position cam
PositionEntity CAM,sx,sy+20,sz-20
PointEntity CAM,SHIP
Else
; create a red line if occupied space (for debugging only)
CreateLine(TRACER,sx,sy,sz,tx,ty,tz,255,0,0,0.2)
EndIf
Else
; create a blue line
CreateLine(TRACER,sx,sy,sz,tx,ty,tz,0,0,128,1)
SPEED#=(EntityDistance(SHIP,TARGETPIVOT)/(CALCTIME-DAYS)*DAYINC)
; position cam
PositionEntity CAM,sx,sy+20,sz-20
PointEntity CAM,SHIP
EndIf
Return pick
End Function
;===========================================================================
; set a given object to start object position
;===========================================================================
Function InitShipPosition(obj%,avoidsun%=True,avoidinc%=1,addx#=0.0,addy#=0.0,addz#=0.0)
Local i%,pick%,c%,p.Planet,m.Moon
; check all planets
For p.Planet = Each Planet
; start or target found? store entity information
If p\name=START Then STARTOBJECT=p\entity
If p\name=TARGET Then TARGETOBJECT=p\entity
; check all moons
For i=1 To p\MOONS
m.Moon = MOONdata(p\id,i)
; start or target found? store entity information
If m\name=START Then STARTOBJECT=m\entity
If m\name=TARGET Then TARGETOBJECT=m\entity
Next
Next
; position object to start object position
PositionEntity obj,EntityX(STARTOBJECT)+addx,EntityY(STARTOBJECT)+addy,EntityZ(STARTOBJECT)+addz
PointEntity obj,TARGETOBJECT
; calculate direct trajectory (with optional avoiding sun crossing)
Repeat pick=CalculateTrajectory(c,avoidsun) : c=c+avoidinc : Until Not pick
End Function
;===========================================================================
; read planet/moon data and create objects, fill types
;===========================================================================
Function Initialize()
Local p%,m%
Local parent%,name$,radius#,period#,size#,r%,g%,b%
Local speed#,entity%,random%,orbit%
; read planet data
Restore PLANETDATA
For p=1 To PLANETS
Read parent,name,radius,period,size,r,g,b
; calc speed and initial position
speed=YEAR/Float(period)
If RANDOMIZE Then random=Rnd(0,2^16)
; create sphere object
entity=CreateSphere(16,SOLIDPIVOT)
EntityFX entity,1
EntityColor entity,r,g,b
ScaleEntity entity,0.5,0.5,0.5
; add orbit
CreateOrbit(360,PLANETORBITS,radius,radius,255,255,255,0.1,0,0,0)
; add planet
S\planet[p]=PLANETcreate(p,parent%,name$,radius#,period#,size#,r%,g%,b%,speed,entity,random)
Next
; read moon data
Restore MOONDATA
For m=1 To MOONS
Read parent,name,radius,period,size,r,g,b
; calc speed and initial position
speed=YEAR/Float(period)
If RANDOMIZE Then random=Rnd(0,2^16)
; create sphere object
entity=CreateSphere(16,SOLIDPIVOT)
EntityFX entity,1
EntityColor entity,r,g,b
ScaleEntity entity,0.125,0.125,0.125
; add orbit
orbit=CreateOrbit(360,0,radius,radius,255,255,255,0.1)
EntityFX orbit,1+16
EntityAlpha orbit,0.1
EntityAutoFade orbit,1,100
; increase planet's moon counter
S\planet[parent]\MOONS=S\planet[parent]\MOONS+1
; add moon
S\planet[parent]\moon[S\planet[parent]\MOONS]=MOONcreate(S\planet[parent]\MOONS,parent%,name$,radius#,period#,size#,r%,g%,b%,speed,entity,random,orbit)
Next
End Function
;===========================================================================
; update object positions
;===========================================================================
Function UpdateObjects()
Local p.Planet,m.Moon,i%
For p.Planet = Each Planet
UpdatePlanet(p\id)
; only show text if object is in view or text flag enabled
If EntityInView(p\entity,CAM) And INFO Then
CameraProject CAM,EntityX(p\entity),EntityY(p\entity),EntityZ(p\entity)
Text ProjectedX(),ProjectedY(),p\name,1
EndIf
For i=1 To p\MOONS
m.Moon = MOONdata(p\id,i)
If m<>Null Then
UpdateMoon(p\id,m\id)
; only show text if object is in view or text flag enabled
If EntityInView(m\entity,CAM) And INFO And EntityDistance(CAM,m\entity)<100*ZOOM Then
CameraProject CAM,EntityX(m\entity),EntityY(m\entity),EntityZ(m\entity)
Text ProjectedX(),ProjectedY(),m\name,1
EndIf
EndIf
Next
Next
End Function
;===========================================================================
; create a planet object
;===========================================================================
Function PLANETcreate.Planet(id%,parent%,name$,radius#,period#,size#,r%,g%,b%,speed#,entity%,random%)
Local p.Planet = New Planet
p\id=id
p\parent=parent
p\name=name
p\radius=radius
p\period=period
p\size=size
p\r=r
p\g=g
p\b=b
p\SPEED=speed
p\entity=entity
p\random=random
Return p
End Function
;===========================================================================
; create a moon object
;===========================================================================
Function MOONcreate.Moon(id%,parent%,name$,radius#,period#,size#,r%,g%,b%,speed#,entity%,random%,orbit%)
Local m.Moon = New Moon
m\id=id
m\parent=parent
m\name=name
m\radius=radius
m\period=period
m\size=size
m\r=r
m\g=g
m\b=b
m\SPEED=speed
m\entity=entity
m\random=random
m\orbit=orbit
Return m
End Function
;===========================================================================
; return a moon object handle
;===========================================================================
Function MOONdata.Moon(planet,moon)
Return S\planet[planet]\moon[moon]
End Function
;===========================================================================
; return a planet object handle
;===========================================================================
Function PLANETdata.Planet(planet)
Return S\planet[planet]
End Function
;===========================================================================
; update a single planet object position according to time
;===========================================================================
Function UpdatePlanet(id%)
Local radiusx#,radiusy#
Local xcos#=Cos(360)
Local xsin#=Sin(360)
Local tmpx#,tmpy#
Local p.Planet= PLANETdata(id)
radiusx=p\radius
radiusy=p\radius
tmpx#=(Cos((DAYS*(360.0/YEAR)*p\SPEED)+p\random)*radiusx#)
tmpy#=(Sin((DAYS*(360.0/YEAR)*p\SPEED)+p\random)*radiusy#)
PositionEntity p\entity,tmpx#*xcos#+tmpy*-xsin#,0,tmpx#*xsin#+tmpy*xcos#
End Function
;===========================================================================
; update a single moon object position according to time
;===========================================================================
Function UpdateMoon(planet%,id%)
Local radiusx#,radiusy#
Local xcos#=Cos(360)
Local xsin#=Sin(360)
Local tmpx#,tmpy#,addx#,addy#,addz#
Local p.Planet = PLANETdata(planet)
Local m.Moon= MOONdata(planet,id)
radiusx=m\radius
radiusy=m\radius
addx=EntityX(p\entity)
addy=EntityY(p\entity)
addz=EntityZ(p\entity)
tmpx#=(Cos((DAYS*(360.0/YEAR)*m\SPEED)+m\random)*radiusx#)+addx
tmpy#=(Sin((DAYS*(360.0/YEAR)*m\SPEED)+m\random)*radiusy#)+addz
PositionEntity m\entity,tmpx#*xcos#+tmpy*-xsin#,addy,tmpx#*xsin#+tmpy*xcos#
PositionEntity m\orbit,addx,addy,addz
End Function
;===========================================================================
; round cut a value for better display
;===========================================================================
Function Round$(value$,digits%=1)
Local midpoint%=Instr(value,".")
Local prefix$,suffix$,zero%,i%
If midpoint Then
prefix=Mid(value,1,midpoint-1)
suffix=Mid(value,midpoint+1,Len(value))
suffix=Mid(suffix,1,digits)
zero=digits-Len(suffix)
For i=1 To zero : suffix=suffix+"0" : Next
Else
prefix=Int(value)
For i=1 To digits : suffix=suffix+"0" : Next
EndIf
Return prefix+"."+suffix
End Function
;===========================================================================
; create a wireframe orbit mesh
;===========================================================================
Function CreateOrbit(segments%,mesh=0,r1#=1,r2#=1.5,r%=255,g%=255,b%=255,a#=1.0,sx#=0.0,sy#=0.0,sz#=0.0)
Local la#,na#,i%
For i = 1 To segments
na=la+(360.0/segments)
mesh=CreateLine(mesh,(Cos(la)*r1)+sx,sy,(Sin(la)*r2)+sz,(Cos(na)*r1)+sx,sy,(Sin(na)*r2)+sz,r,g,b,a)
la=na
Next
Return mesh
End Function
;===========================================================================
; create a single wireframe line
;===========================================================================
Function CreateLine(mesh,x0#,y0#,z0#,x1#,y1#,z1#,r%=255,g%=255,b%=255,a#=1.0)
Local surf%,v1%,v2%
If mesh Then
surf=GetSurface(mesh,1)
Else
mesh = CreateMesh()
surf = CreateSurface(mesh)
EntityFX mesh,1+2+16+32
End If
v1=AddVertex(surf,x1,y1,z1)
v2=AddVertex(surf,x0,y0,z0)
AddTriangle surf,v1,v1,v2
VertexColor surf,v1,r,g,b,a
VertexColor surf,v2,r,g,b,a
Return mesh
End Function
;==========================================================================
; create a quad
;===========================================================================
Function CreateQuad(parent%=False,scale#=1.0,tex%=False,blend%=False,fx%=False,r%=255,g%=255,b%=255,a#=1.0)
Local mesh%=CreateMesh()
Local surf%=CreateSurface(mesh)
Local v0%=AddVertex(surf, 1, 1,0,0,0)
Local v1%=AddVertex(surf,-1, 1,0,1,0)
Local v2%=AddVertex(surf,-1,-1,0,1,1)
Local v3%=AddVertex(surf, 1,-1,0,0,1)
AddTriangle surf,v0,v1,v2
AddTriangle surf,v0,v2,v3
If parent Then EntityParent mesh,parent
If fx Then EntityFX mesh,fx
If tex Then EntityTexture mesh,tex
If blend Then EntityBlend mesh,blend
EntityColor mesh,r,g,b
EntityAlpha mesh,a
VertexColor surf,v0,r,g,b,a
VertexColor surf,v1,r,g,b,a
VertexColor surf,v2,r,g,b,a
VertexColor surf,v3,r,g,b,a
ScaleEntity mesh,scale,scale,scale
Return mesh
End Function
;==========================================================================
; create sun texture
;===========================================================================
Function CreateSunTexture()
Local tex%=CreateTexture(512,512,3)
Local tb%=TextureBuffer(tex)
Local i#,j%,col%,rgb%
SetBuffer tb
LockBuffer tb
For j=0 To 255
col=255-j
If col>255 Then col=255
rgb=col*$1000000+col*$10000+col*$100+col
For i=0 To 360 Step 0.1
WritePixelFast 256+(Sin(i)*j),256+(Cos(i)*j),rgb,tb
Next
Next
UnlockBuffer tb
SetBuffer BackBuffer()
Return tex
End Function
.PLANETDATA
;==========================================================================
; Parent Name Radius Period Size R G B
;==========================================================================
Data 0 , "Mercury" , 57.909 , 87.989 , 4.878 , 255 , 128 , 0
Data 0 , "Venus" , 108.160 , 224.701 , 5.000 , 255 , 255 , 0
Data 0 , "Earth" , 149.600 , 365.256 , 12.756 , 0 , 0 , 255
Data 0 , "Mars" , 227.990 , 686.980 , 6.794 , 255 , 0 , 0
Data 0 , "Jupiter" , 778.360 , 4331.936 , 142.984 , 255 , 192 , 0
Data 0 , "Saturn" , 1433.400 , 10759.346 , 120.536 , 255 , 224 , 0
Data 0 , "Uranus" , 2872.400 , 30685.522 , 51.118 , 0 , 128 , 255
Data 0 , "Neptune" , 4495.000 , 60190.536 , 49.528 , 0 , 255 , 255
Data 0 , "Pluto" , 5906.400 , 90466.606 , 2.390 , 255 , 255 , 255
;==========================================================================
; Parent Name Radius Period Size R G B
;==========================================================================
.MOONDATA
Data 3 , "Moon" , 1.000 , 1.000 , 3.476 , 255 , 255 , 255
Data 4 , "Phobos" , 1.000 , 1.000 , 0.027 , 255 , 255 , 255
Data 4 , "Deimos" , 2.000 , 2.000 , 0.015 , 255 , 255 , 255
Data 5 , "Amalthea" , 1.000 , 1.000 , 0.167 , 255 , 255 , 255
Data 5 , "Io" , 2.000 , 2.000 , 3.643 , 255 , 255 , 255
Data 5 , "Europa" , 3.000 , 4.000 , 3.122 , 255 , 255 , 255
Data 5 , "Ganymede" , 4.000 , 8.000 , 5.262 , 255 , 255 , 255
Data 5 , "Callisto" , 5.000 , 16.000 , 4.821 , 255 , 255 , 255
Data 5 , "Leda" , 6.000 , 32.000 , 0.020 , 255 , 255 , 255
Data 5 , "Himalia" , 7.000 , 64.000 , 0.170 , 255 , 255 , 255
Data 5 , "Elara" , 8.000 , 128.000 , 0.086 , 255 , 255 , 255
Data 5 , "Pasiphae" , 9.000 , 256.000 , 0.056 , 255 , 255 , 255
Data 6 , "Mimas" , 1.000 , 1.000 , 0.397 , 255 , 255 , 255
Data 6 , "Enceladus" , 2.000 , 2.000 , 0.504 , 255 , 255 , 255
Data 6 , "Tethys" , 3.000 , 4.000 , 1.060 , 255 , 255 , 255
Data 6 , "Dione" , 4.000 , 8.000 , 1.127 , 255 , 255 , 255
Data 6 , "Rhea" , 5.000 , 16.000 , 1.528 , 255 , 255 , 255
Data 6 , "Titan" , 6.000 , 32.000 , 5.150 , 255 , 255 , 255
Data 6 , "Hyperion" , 7.000 , 64.000 , 0.266 , 255 , 255 , 255
Data 6 , "Iapetus" , 8.000 , 128.000 , 1.436 , 255 , 255 , 255
Data 6 , "Phoebe" , 9.000 , 256.000 , 0.220 , 255 , 255 , 255
Data 7 , "Miranda" , 1.000 , 1.00 , 0.472 , 255 , 255 , 255
Data 7 , "Ariel" , 2.000 , 2.00 , 1.158 , 255 , 255 , 255
Data 7 , "Umbriel" , 3.000 , 4.00 , 1.169 , 255 , 255 , 255
Data 7 , "Titania" , 4.000 , 8.00 , 1.578 , 255 , 255 , 255
Data 7 , "Oberon" , 5.000 , 16.00 , 1.523 , 255 , 255 , 255
Data 8 , "Triton" , 1.000 , 1.00 , 2.707 , 255 , 255 , 255
Data 8 , "Nereid" , 2.000 , 2.00 , 0.340 , 255 , 255 , 255
Data 9 , "Charon" , 1.000 , 1.00 , 1.212 , 255 , 255 , 255 |
Comments
| ||
| very nice, thanks |
| ||
| this is really cool, it looks like you put a lot of work into this. |
| ||
| This is really impressive! |
| ||
| This is Blitzmax code? I cant compile it. ok looks like blitzbasic Maybe this code arc can be sub divided into blitzbasic, blitzmax etc sections and a button just to dl the code without having to hightlight and copy and paste into the editor. prob will have a go at reverse enginering this and converting this to blitzmax |
| ||
| Yesh, the quickest way to determine the language of the code in this area is to hover the mouse over the "Download Source Code" link and see the file extension. I think it should be divided into separate areas per language as well. |
| ||
| Maybe this code arc can be sub divided into blitzbasic, blitzmax etc sections It already is. You can list just BB code, just BMX code or All code. All listings specify which language is being used. The listing for this code says:.bb Interplanetary travel Calculates and shows interplanetary ship travel between two moving celestial bodies in 3D I think the problem is you are trying to view it via the forums instead of using the actual code archives. and a button just to dl the code without having to hightlight and copy and paste into the editor. There is no need to copy and paste it into the editor. It downloads fine. Although the terms can vary by browser, simply right click on the link and select "Save As", "Save Linked Content As", "Save to Download Folder" or whatever your browser uses. |
| ||
| Excellent work Krischan. Very impressive :) |
| ||
| Very cool work! I've recently restarted tinkering in Blitz and like this very much. As an aside, your mention Millennium 2.2 which takes you to a wiki page which, at the bottom, references Millennium 2.2 Remake, which is a Blitz3d program written by me and a friend a few years ago. Very cool to find those little references unexpectedly. |
Code Archives Forum