ich habe schon länger wider mit Programmieren angefangen. Und habe eine Herausforderung gesucht.
Da ich MineCraft Tekit super fand, und die Möglichkeiten die sich mit den fielen Addons und Server
Modifikationen boten. Da jetzt auch noch dieser blöde Virus kram noch mehr Zeit beschert. Werde ich
das mal richtig in Angriff nehmen.
Leider sitze ich gerade in Antalya fest, und habe nur meinen Laptop dabei. Aber das ist dann genau
die richtige zutat um zu versuchen effizient zu coden.
Da ich finde das PB eine super Sprache ist. Und ganz fiele Möglichkeiten hat. Die leider durch dieses
vermaledeite OGRE ins Land der Unwichtigkeit verdrängt wurde. Möchte ich versuchen es trotzdem
mit OGRE zu follenden.
Der Arbeitsname ist OQE. Steht für OgreQubeEngine.
Jeder ist eingeladen mit Kommentaren oder Wissen sich daran zu beteiligen. Denn das Project ist
zwar von aussen gesehen sehr einfach. Aber es steckt eine menge Hirnschmalz dahinter. Vorallem
sich auf das wesentliche zu beschränken ist garnicht so einfach.
Mit Erlaubniss der Admins , würde ich dann gerne hier meine Vortschritte Posten, und gelegentlich
einen Download link Eintragen. Damit interessierte den Vorschritt selber mal anschauen können.
Hier schon-mal ein Bild.
Und hier der aktuelle Download Link vom 10.4.2020 10:00 Antalya Zeit.
http://www.sourcemagic.ch/MCC.zip
sowie ein Link zu einer Map.
http://www.sourcemagic.ch/Map-001.zip
Sowie ein kleines YouTube Video
https://www.youtube.com/watch?v=DLHvyH7 ... e=youtu.be
Ein Paar kurze Hinweise:
Code: Alles auswählen
;-------------------------------------------
OQE v0.1
MineCraftClone Versuch 003 v 018
Conzept und Umsetzung by TFT
Code by TFT and Daniel Dusentrieb
Temucin
Consulting & Consalting
Bahnhofstr. 15
CH-8447 Dachsen
info@sourcemagic.ch
Verwendete Werkzeuge:
PureBasic 5.71 , Oggre 3D Engine , Paint.net
Engine Vorlage von 1992, AMOS3D, AMIGA 500, TFT
Game Idee by MAJONG
Assets by Mincraft Java version
:--------------------------------------------
Besonderheit in dieser Version:
Full Window Support
Sounds für Button Klick, Laufen, Abbauen und aufbauen.
Funktionsleiste getrennt für Creator und Play Mode
Load und Save From Zip, Chunk und Mesh
Wenn eine Map geladen wird. Ist es immer LOAD_HIGHMAP = 1
DeleteBlocks : delb(X) , dela(X)
delb() löscht alle Blöcke im Actuellen Chunk mit der Nummer X
dela() löscht alle Blöcke im Actuellen Chunk mit dem Alpha Wert X*10 + 0-9
Zeitraffer = 1, dann wird die Actuelle Systemzeit verwendet
Ist ein Fenster geöffnet, werden keine Blöcke gesetzt oder gelöscht
Blöcke lassen sich nur bei SetMode = SetBlock löschen, das soll verhindern das beim
Wechsel oder rotieren ausversehen ein Block geköscht wird.
Hilfe Text Fenster aufruf. Mit RMB über den UI Elementen im Creator Modus.
Die Daten Strukture wurde grundlegend geänderd. Daten der Chunks und der Sichtbaren
Umgebung wurden von einander getrennt. Dadurch können alle Chunks im Chunk Verzeichniss
Dargestellt werden. (Bei fielen Chunks kostet Der Move Befehl zu fiel zeit)
Die Chunk und Mech Daten sind jetzt immer Local gespeichert. Im Dokumenten Ordner unter OQE.
Im Verzeichniss Maps werden die Mit Save gespeicherten Maps abgelegt.
Die Parameter.txt befindet sich ebenfals jatzt im Localen Ordner.
Die Absolute Position in Blocks wird nun berechnet und in der Console angezeigt.
Comando Load AC entfernt.
lhm0 schaltet den LOAD_HIGMAP Tag ab
lhm1 schaltet den LOAD_HIGMAP Tag ein
Bei 1 wird die automatische Ebenen Erzeugung eingeschaltet, Bei einer Highmap ist das
nicht gewollt.
home Damit kann man sich an die Standart Position der Map zurück Porten.
sethome Die actuelle Position wird als Standart Position in den Parametern gespeichert.
ws1 Damit wird der Schalter für den Automatische Zentrieren der Fenster bei start eingeschaltet
ws0 und das schaltet ihn aus
Bekante Bugs:
Console:
F1 Schaltet die NB Controll ansicht ein
Console aufrufen mit "c"
Comandoeingabe starten mit "Return"
Comandoeingabe beänden mit nochmaligem "Return"
- quit , beändet das programm
- ac(X) , stellt das AbientLight auf RGB(X,X,X)
- clear all , Löscht alle Chunk und Mesh Daten
und stellt die Default Daten wider her, Start
bei 0,0,0, LOAD_HIGHMAP = 0
- time(X) , es wird die Tageszeit gestelt. Wobei
nur die Stunden einem festen wert zugeteilt werden
- timelap(X) , der Ablauf der Tageszeit kann in der
geschwindigkeit eingestellt werden. 0 = Stop und alles
grösser gild als Multiplikator für Zeitraffer
- create , erzeugt aus einer HighMap Chunks
- free , Versetzt den Player an den Höchst möglichen Punkt
Das ist dafür, damit wenn man mal feststeckt oder
ins bodenlose fält.
- reset , Startet das Programm neu
- de , wechselt zur Deutschen Sprache
- en , wechselt zur Englischen Sprache
- full , wechselt in den Voll Window Modus
- smal , wechselt in den Kleinsten Windows Modus
- load , läd ein Chunk und Mesh verzeichniss aus einem Zip.
löscht vorher die orginal verzeichnisse und kopier das Zip
ins Hauptverzeichniss. Neustart.
- save , Speichert die Chunk und Mesh verzeichnisse in ein Zip
- delb() löscht alle Blöcke im Actuellen Chunk mit der Nummer X
- dela() löscht alle Blöcke im Actuellen Chunk mit dem Alpha Wert X*10 + 0-9
- lhm0 schaltet den LOAD_HIGMAP Tag ab
- lhm1 schaltet den LOAD_HIGMAP Tag ein
Bei 1 wird die automatische Ebenen Erzeugung eingeschaltet, Bei einer Highmap ist das
nicht gewollt.
- home Damit kann man sich an die Standart Position der Map zurück Porten.
- sethome Die actuelle Position wird als Standart Position in den Parametern gespeichert.
- ws1 Damit wird der Schalter für den Automatische Zentrieren der Fenster bei start eingeschaltet
- ws0 und das schaltet ihn aus
Player:
- F3 Schaltet den Flugmodus an
- F2 Schaltet das Info Fenster für die Blöcke ein
- F4 Schaltet die Player Colision an/aus
- WASD bewegt den Spieler in der X und Z Achse
- RF Bewegt den Spieler im Flugmodus hoch und runter.
- Mouserad bewegt die Camera vom Player Kopf weg.
- Mit der LMB wird der Block der in der Funktions
Leiste ausgewält wurde gesetzt.
- Tasten 1-0 wählen die zu setzenden Blöcke
- Mit der RMT werden Blocks entfernt.
- Mit der Space Taste kann gesprungen werden
- CTRL löst die Mouse von der Camerasicht um
Buttons zu betätigen.
- U schaltet das UI ein und aus
- O öffnet Blockauswahl Fenster, bei LMB übernimmt
der selektierte Button den Block.
- I öffnet Linkes Fenster
- INSERT Switscht die SetModi für das Setzen der
Blöcke / Set/Change/Rotate
- Die Kollisionsabfrage für den Spieler ist
etwa 2 Blöcke Hoch.
- Zur orientierung gibt es oben im Bild einen
Kompas.
- Im unteren Bereich sind 10 Funktions Icons. Diese
können entweder mit der Mouse oder den Tasten
1-0 angewählt werden. Dort werden die Items zur
benutzung abgelegt und selektiert.
Teran erzeugung:
Es kan mithilfe einer HighMap durch das Comando
create in der Console Chunks erzeugt werden. Die
vortlaufenden erzeugung von Chunks ist dabei abgeschaltet.
Es gibt 3 Ebenen. Die Luft Chunks über der Ebene 0.
Die Ebene wo Boden und Luft sich treffen.
Sowie die Erd Chunks, die Komplett mit Stein
gefüllt sind.
ChunkData:
die Daten die den Chunk representieren, bestehen
aus dem Header mit allgemeinen Chunk Informationen
sowie den Feldern ChunkData/Type/Rotate/Light.
Dazu wird mit Speicherblöcken gearbeitet die ent-
sprechend Adressiert werden. Das ist norwendig, weil
mit Feldern und Structuren das abspeichern und laden
zu lange dauert.
Mesh erzeugung:
Ein Chunk besteht aus dem DatenPaket das den Chunk
mit Blocks füllt. Die CreateMech() Funktion baut
aus diesen ChunkDaten ein Mesh und weist den Qube
Seiten die Texture Kachel zu und erzeugt nur dann
eine Site, wenn diese als Sichtbar gekenzeichnet
ist. Das Mesh wird gespeichert.
Texture:
Eine Material Texture ist in Kacheln aufgeteilt.
Diese sind im Orginal jeweils 16 * 16 Punkte und
es gibt 16 * 16 Kacheln die mit einer durchlaufenden
Nummer ereicht werden können.
BlockData:
Hir werden die Daten zu den Blöcken abgelegt. Dort
werden die Kacheln der Seiten Bestimmt und die
eigenschaften der Blöcke.
Multi Coding:
da mitlerweile noch jemand an dem Project mitaarbeitet
habe ich DROPBOX eingerichtet und den Main Code so
angepast, das der zusätzliche Coder unahängig von meinem
Code arbeiten kann.
Verfügung stehenden Plattenspeicher. Chunks die noch nicht existieren müssen erzeugt werden. Daher gibts
einen Ruckler.
Gruss TFT
PS: Ich habe auf meine Rechtschreibfehler (C) . Nachmachen ist unter Strafe verboten.