3D-Space-Game-016.bb
;-------------------------------------------------------
;
; 3D Space Game Tutorial
;
; (C) by Turgut Frank Temucin alias TFT
;
; Alle Rechte verbleiben beim Autor. Die Veröffentlich-
; ung außerhalb des BlitzForums ist nur mit Genehmigung
; gestattet. Der Source-Code ist Freeware, und darf für den
; privaten Gebrauch frei verwendet werden.
;
;-------------------------------------------------------
; File: 3D-Space-Game-016
; Date: 1.08.03
;-------------------------------------------------------
; BB3D: 1.83
;-------------------------------------------------------
; Mein dank an: Markus und HotBit
;-------------------------------------------------------
;
; Jetzt kommt ein wenig bewegung ins Spiel. Der Frachter
; kann jetzt benutzt werden. Einfach als frachter.x Speichern
; Die Funktion "schiffe" Steuert die Frachter. Die Steuerung
; ist zwar primitiv. Aber wenn mann im Hangar landedet
; kommt die Optic schon nicht schlecht.
; ------------------------------------------------------
;
; Als erstes werden ein paar konstanten definiert. Diese
; sind unveränderbar und immer Global.
Const screen_x=640
Const screen_y=480
Const screen_m=2 ; Bildschirm Modus
; 2=Fenster 1=Fullscreen
Const screen_t=16; 16 Bit oder 32 Bit Bildschirm
Global hispeed ; Schalter Variable. Zum Ein und ausschalten
; der Schnellen geschwindigkeit.
Global location ; enthält -1 oder die nummer der Location in der
;sich das schiff gerade befindedet. Innerhalb
;der Location funktioniert kein HighSpeed.
Global ot ; Object Type bei gefahr oder -1
Global inHangar ; Schalter Variable, Ob sich das Schiff in einem
; Hangar befindet.
Global SchiffAlpha=1 ; ist das schiff sichtbar oder nicht
Global gefahr ;
Global tod ;
Global t2,t3,c1 ; Timing anzeige für Monitor Funktion
;*******
;
Global t5,trans_go,ziehl ; teimer für erzeuge transporter
;
;*******
; Dann wird der Bildschirm geöffnet
;
Graphics3D screen_x,screen_y,screen_t,screen_m ; Den Bildschirm öffnen
SetBuffer BackBuffer() ; das DoubleBuffering aktivieren
; Ein Object, welches mit DOGA L1 erstellt wurde, wird geladen
Global schiff=LoadMesh("schiff.x") ; Schiff-Object laden
PositionEntity schiff,0,0,0 ; Position beliebig
EntityType schiff,1 ; kollisions Type
EntityRadius schiff,1 ; kollisions Radius
; Danach die Kamera- und Licht- Einstellungen
;
Global cammerap=CreatePivot(schiff) ; Drehpunkt für aussenansicht
Global Cammera=CreateCamera(cammerap) ; Ohne Kamera sieht man nichts
; und es wird an das Schiff angebunden
CameraRange cammera,1,600000 ; Sichtweite der Kamera anpassen
MoveEntity cammera,0,.5,-4 ; Da die Kamera mitten im Schiff liegt,
; wird sie etwas nach hinten verschoben.
CameraZoom cammera,2 ; Fischaugen korrigieren
Global plp=CreatePivot() ; Ein sammel Punkt für das verschieben des ganzen
; Systems anlegen
Global licht=CreateLight(2,plp) ; Für das richtige Ambiente muß eine ordentliche
; Lichtquelle her.
PositionEntity licht,80000,0,0 ; Licht positionieren
LightRange licht,100000 ; Reichweite des Lichtes
AmbientLight 100,100,100 ; Umgebungslicht verstärkt oder schwächt den Kontrast
; Die SkyBox wird erstellt
;
Global skay=CreateSphere(12) ; Eine Kugel erstellen
Global skay_tex=LoadTexture("all.jpg") ; Die All-Textur laden
EntityTexture skay,skay_tex ; und dem Objekt zuweisen
ScaleEntity skay,500000,500000,500000 ; Den Weltraum vergrößern
FlipMesh skay ; Von innen sichtbar
EntityOrder skay,1 ; Immer als erstes darstellen
EntityFX skay,1 ; Kein Licht-Effekt für die SkyBox
; Das SonnenSystem erzeugen
;
Restore planeten_system_daten
Dim pl(10) ; enthält die Handler der Planeten Objecte
Dim plt(10) ; Zeiger auf Planeten Texture
Dim plr#(10) ; eigen rotation
Dim plsc(10) ; Speicher für Planeten/Location Durchmesser
; Für das abschalten des HighSped
Dim plg(10) ; Gefahrengrenze
Dim pld(10) ; Colisions grenze (Game Over) für Planeten etc
Dim pln(10) ; Sortiernummer der Planeten/Objecte damit
; eine identivikation im ereignissfall möglich ist
Dim plb(10) ; Object bindung
Global anz_pl ; Anzahl der Planeten im System
i=0 ; Das erste object ist die Sonne
Read anz_pl ; Anzahl Planeten Ohne Sonne
For i1=0To anz_pl
Read t$,sc,x,y,z,r#,sch,scg,scd,ty,i,b,nn$ ; Object daten holen
If ty=0 ; Erzeuge Sonne
plt(i)=LoadTexture(t$,2) ; Sonnen-Textur laden
pl(i)=CreateCube(plp) ; Objekt erzeugen
EntityTexture(pl(i),plt(i)) ; Textur aufbringen
EntityAlpha(pl(i),.9) ; Sonne etwas transparent machen
PositionEntity(pl(i),x,y,z) ; Im Raum positionieren
ScaleEntity(pl(i),sc,sc,1) ; Vergrößern
EntityFX pl(i),1 ; Kein Licht-Effekt für die Sonne
EntityRadius pl(i),sc
Else If ty=1 ; erzeuge Planeten
pl(i)=CreateSphere(16,plp) ; Eine Kugel erstellen
plt(i)=LoadTexture(t$) ; Die Welt-Textur laden
EntityTexture pl(i),plt(i) ; und dem Objekt zuweisen
ScaleEntity pl(i),sc,sc,sc ; Den Planet vergrößern
PositionEntity pl(i),x,y,z ; Und vor die Kamera stellen
EntityRadius pl(i),sc ;
Else If ty=2 ; erzeuge stationen
pl(i)=LoadMesh("station.x",plp) ; Station-Object laden
PositionEntity pl(i),x,y,z,1 ; Position beliebig
EntityType pl(i),2
Else If ty=3
pl(i)=CreatePivot(pl(b)) ;CreateSphere(5,pl(b))
ScaleEntity pl(i),sc,sc,sc
PositionEntity pl(i),x,y,z,1
EntityType pl(i),3
EntityRadius pl(i),sc
EndIf
plsc(i)=sc+sch ; Location durchmesser
plg(i)=sc+scg ; Gefahren grenze
pld(i)=sc+scd ; Todes grenze
plr(i)=r ; planeten Rotation
pln(i)=i ; object nummer
plb(i)=b ; Object bindung
NameEntity(pl(i),nn$) ; Info String zuordnen
Next
;******