Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Projektplanung und -Management (https://www.delphipraxis.net/85-projektplanung-und-management/)
-   -   Eigenes 3D MMORPG mit Delphi möglich? (https://www.delphipraxis.net/164975-eigenes-3d-mmorpg-mit-delphi-moeglich.html)

Zudomon 8. Dez 2011 10:03

Eigenes 3D MMORPG mit Delphi möglich?
 
Huhu!

Ich habe schon ein wenig Erfahrung mit Programmieren und habe auch schon Spiele wie Snake und Tetris gemacht. :-D
Aber nun würde ich gerne etwas größeres machen. Ich denke da an ein 3D-MMORPG.

Dazu hätte ich einige Fragen...
* Kann man das mit Delphi schaffen oder brauch ich doch C++?
* Wie lange würde man etwa brauchen, sowas alleine zu machen?
* Wären 5€ für einen Monat Spielzeit zu viel oder wäre das noch akzeptabel?

Danke für eure Antworten!
Zudo

Coffeecoder 8. Dez 2011 10:19

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Hey,

Da hast du dir einiges vorgenommen.
Ich habe bisschen für dich gesucht und bin auf diese Seite gestossen was die Grafik angeht: Delphi DGL.

Zitat:

Zitat von Zudomon (Beitrag 1140247)
* Kann man das mit Delphi schaffen oder brauch ich doch C++?

Mit Delphi ist es möglich.

Zitat:

Zitat von Zudomon (Beitrag 1140247)
* Wie lange würde man etwa brauchen, sowas alleine zu machen?

Alleine bist vermutlich einige Monate bis ein/zwei Jahre damit beschäftigt.

Zitat:

Zitat von Zudomon (Beitrag 1140247)
* Wären 5€ für einen Monat Spielzeit zu viel oder wäre das noch akzeptabel?

Da will ich nichts dazu sagen, das hat noch Zeit.

Neutral General 8. Dez 2011 10:32

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Ich war auch schon mal an diesem Thema dran.
Nur dass ich erst mal bei 2D bleiben wollte.

Ich glaube alleine ist es sehr sehr schwer. Und ein gutes, zuverlässiges Team zu finden ist auch sone Sache für sich.

Ich muss sagen, dass in meinen Tests und Prototypen immer die Netzwerk-Kommunikation das Problem war.
Es ist gar nicht so einfach mehrere 100 oder sogar 1000 Spieler/Verbindungen effizient und zuverlässig zu verwalten.

Wegen den monatlichen Kosten: Das Problem ist, dass es ne ganze Menge (auch z.T. recht gute) komplett kostenlose (3D) MMORPGs gibt. Und wenn die Spieler bezahlen müssen/sollen dann musst du Ihnen auch nen guten Grund geben und ihnen für ihr Geld was bieten. Ansonsten wirst du einen leeren Server haben befürchte ich.

DeddyH 8. Dez 2011 10:35

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zitat:

Zitat von Coffeecoder (Beitrag 1140249)
Zitat:

Zitat von Zudomon (Beitrag 1140247)
* Wie lange würde man etwa brauchen, sowas alleine zu machen?

Alleine bist vermutlich einige Monate bis ein/zwei Jahre damit beschäftigt.

Ich kenne mich zwar überhaupt nicht mit MMORPGs aus, aber selbst diese Zeitangabe halte ich für unrealistisch. Nach meiner Kenntnis sitzen da ganze Entwickler- und Designerteams Jahre dran (Vollzeit), als Einzelkämpfer dürfte das um Einiges länger dauern, gerade, wenn es auch noch etwas kosten und dementsprechende Qualität aufweisen soll. Wenn man sich dann ggf. auch noch in die Materie einarbeiten muss kann man es fast vergessen.

Zudomon 8. Dez 2011 11:44

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Ich bin ja schon einige Wochen am Entwickeln... und hatte mich schon für die Direct3D API entschieden.
Aber irgendwie habe ich bisher niemanden getroffen, der selbst ein 3D MMORPG gemacht hat, geschweige denn mit Delphi. Irgendwie machen die meisten ja nur C++. Deswegen wollte ich sicher gehen, dass man mit Delphi auch ein größeres Projekt wie eben dieses umsetzen kann.

Zitat:

Zitat von Neutral General (Beitrag 1140251)
Es ist gar nicht so einfach mehrere 100 oder sogar 1000 Spieler/Verbindungen effizient und zuverlässig zu verwalten.

Gedacht war, dass es nur eine große Welt gibt... also wenn es später eine Million Spieler gibt, dass die sich dann alle in einer Welt treffen.

Ausserdem wäre ich gerne innovativ und hätte es später gerne so, dass jedes Objekt in der Welt einzigartig ist. Pflanzen, Bäume, Tiere usw.

Ich würde dann gerne in einem Monat oder so mit dem Verkauf anfangen. 8-)

Neutral General 8. Dez 2011 11:53

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zitat:

Zitat von Zudomon (Beitrag 1140264)
Ich bin ja schon einige Wochen am Entwickeln... und hatte mich schon für die Direct3D API entschieden.
Aber irgendwie habe ich bisher niemanden getroffen, der selbst ein 3D MMORPG gemacht hat, geschweige denn mit Delphi. Irgendwie machen die meisten ja nur C++. Deswegen wollte ich sicher gehen, dass man mit Delphi auch ein größeres Projekt wie eben dieses umsetzen kann.

Zitat:

Zitat von Neutral General (Beitrag 1140251)
Es ist gar nicht so einfach mehrere 100 oder sogar 1000 Spieler/Verbindungen effizient und zuverlässig zu verwalten.

Gedacht war, dass es nur eine große Welt gibt... also wenn es später eine Million Spieler gibt, dass die sich dann alle in einer Welt treffen.

Ausserdem wäre ich gerne innovativ und hätte es später gerne so, dass jedes Objekt in der Welt einzigartig ist. Pflanzen, Bäume, Tiere usw.

Ich würde dann gerne in einem Monat oder so mit dem Verkauf anfangen. 8-)

Öh na dann viel Erfolg :lol:

mleyen 8. Dez 2011 11:58

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Wo kann ich mich zur Beta anmelden?

BUG 8. Dez 2011 12:00

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Um es mal auf den Punkt zu bringen: du wirst vermutlich viel eher an deine Grenzen stoßen als an die der gewählten Programmiersprache :mrgreen:

DeddyH 8. Dez 2011 12:03

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zitat:

Zitat von Zudomon (Beitrag 1140264)
Ich würde dann gerne in einem Monat oder so mit dem Verkauf anfangen. 8-)

Ist heute der 08.12. oder der 01.04.? :shock:

Zudomon 8. Dez 2011 12:17

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Warum habe ich auf einmal das Gefühl, ihr nehmt mich nicht ernst?

DeddyH 8. Dez 2011 12:19

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zumindest in meinem Fall gilt dasselbe andersherum.

borncrush 8. Dez 2011 12:22

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Weil man das Gefühl gewinnt, dass Du darauf aus bist.

Ganz ehrlich, wenn Du schon Spiele programmiert hast; warum fragst Du dann nach der ungefähren Entwicklungszeit, wenn Du im Gegenzug schon in einem Monat launchen willst. Außerdem wolltest Du doch einen Zugriff vermieten und nicht verkaufen, oder?

Zeig doch mal ein paar Screenshots oder ähnliches von deinen Spiel(en) ?
:twisted: :lol:

shmia 8. Dez 2011 12:32

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
@Zudomon
Ich möchte gerne mein eigenes Auto entwickeln und selbst herstellen.
Das Auto soll mehr als 250PS haben und leichter als 800kg werden.
Eine komplett ausgestattete Werkstatt (Drehbank, Fräse, Rohrbiegemaschine,...) steht mir zur Verfügung aber ich bin kein ausgebildeter Konstrukteur/Mechaniker sondern nur ein Hobbyschrauber.
Aber ich hab noch ein paar Kumpels die mithelfen können.
Was meinst du, in 6 Monaten sollte das doch zu schaffen sein, oder ?
Und zu welchem Preis könnte man das Auto verkaufen?

>Warum habe ich auf einmal das Gefühl, ihr nehmt mich nicht ernst?
Weiss auch nicht, aber würdest du nicht auch denken, dass ein Hobbyschrauber
der in 6 Monaten ein Auto bauen möchte ein Traumtänzer ist?

Memnarch 8. Dez 2011 12:39

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Bevor du ein MMORPG machst, solltest du vllt erstmal ein Singleplayer RPG machen. Dort kannst du dich erstmal mit den RPG elementen austoben und musst dir keine Gedanken über netzwerk machen.

Wenn da dannw as brauchbares bei rauskommt, dann kannst du dir erstmal Zeit nehmen Netzwerkkomunikation zu lernen und WENN das klappt KANNST du über ein konzept für ein MMO nachdenken ;).

MFG
Memnarch

Neutral General 8. Dez 2011 13:11

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Wollte zuerst darüber schreiben WARUM dich wohl keiner ernst nimmt.

Das haben ja schon einige andere für mich übernommen ;)

Sagen wirs so. Lass dich jetzt von diesen (berechtigten^^) Kommentaren nicht runterziehen.
Versuch ruhig es durchzusetzen. Ich weiß wie schwer es ist, wenn man bei so einem
Vorhaben nicht ernst genommen wird.

Du wirst mit Sicherheit mehrmals scheitern und merken, dass es doch eine ganze Menge mehr Arbeit ist als du jetzt vllt. glaubst und du wirst die Sache mehrmals komplett falsch angehen.

Aber du wirst hoffentlich jedes mal einiges lernen. Sowohl was den fachlichen Teil angeht, als auch wie man so ein großes Projekt durchführt.

Halt dich ran. Bevor man bei so einem Projekt nicht wirklich was vorzuweisen hat, wird man kaum positive Reaktionen ernten.

Progman 8. Dez 2011 13:50

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Man sollte sich mal vergegenwärtigen, dass die Entwicklung z.B. von Worl of Warcraft (Classic) 5 Jahre (!) gedauert hat und daran große Teams gearbeitet haben.
Wer ein neues MMORPG erstellen möchte, muss WoW (der Platzhirsch in diesem Genre mit ca. 10 Millionen zahlenden Usern) zwangsläufig zum Maßstab nehmen, sonst reicht es nichtmal zum Nischenprodukt :)
Also für einen Einzelkämpfer nicht zu schaffen.
Was Delphi betrifft: Seit Freigabe der Doom3-Engine (die dabei sehr hilfreich wäre) wäre C++ die Alternative, denn eine 3D-Engine selbst zu schreiben, die auch noch Delphi-konform ist, dürfte ebenfalls Jahre dauern.
Das wären meine Gedanken dazu :lol:

Zudomon 8. Dez 2011 13:52

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Krass wie ungläubig mein Vorhaben entgegen genommen wird.

Mit Verkauft meinte ich Vermieten. Aber im Moment hat es wirklich noch keinen großen Wert.

Was die Entwicklungszeit angeht, ich habe das Projekt jetzt am 10.08 gestartet. Und ich erfahre halt immer wieder, wie andere Ewigkeiten dafür brauchen bzw. es garnicht alleine hin bekommen. Deswegen meine Frage dazu.
Wobei ich dazu sagen muss, dass die 3D-Engine selbst programmiert ist. Physik werde ich später auch einbauen. Man kann schon ein paar Dinge machen, wie Blöcke abbauen und hinsetzen... allerdings wird noch nicht alles gespeichert. Und die Welt wird auch noch nicht vernünftig aktualisiert (Serverseitig).
Dafür ist da schon ein Autoupdating drin, also nur einmal installieren, wenn alles glatt läuft.

Beta gibt es nicht zum testen... aber die Pre-Alpha... ich denke aber, dass ich mit dieser so wie Minecraft in den Verkauf gehen werde. Bis das Spiel wirklich so komplett ist, wie ich es mir vorstellen, wird bestimmt noch ein Jahr ins Land gehen, vielleicht länger.

Wenn ihr es selbst testet, seid bitte gnädig... es ist alles noch ruckelig, und läuft nicht unbedingt stabil... aber die ToDo Liste wächst einfach um einiges schneller, als ich sei abarbeiten kann.

Ihr dürft mich ruhig ernst nehmen! :-D

Progman 8. Dez 2011 14:09

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Habe mir die Demo mal angeschaut.
Mein Ratschlag: Hole dir die Testversion von World of Warcraft und spiel das mal an.
Da siehst du nämlich erstmal, was ein MMORPG ist, wie es funktioniert und was es enthalten muss, um bei Usern "anzukommen". Und dann überleg dir, ob du sowas (ähnliches) auch machen willst.
Und ich garantiere dir, dass du auch in einem Jahr keine Annäherung daran schaffst. In dem Video ist nichts weiter zu sehen, als ein Terrain, über das man eben mal hinwegfliegen kann usw. Das schafft man z.B. schon mit Tutorials aus dem DGL-Forum :)
Spätestens beim Erstellen von 3D-Modellen (Tiere, NPCs, Spieler-Charaktere und ihre Kleidung/Rüstung) inclusive der entsprechenden Animationen, ein Himmel, an dem die Wolken wirklich ziehen, Wasser und vielem mehr, wirst du feststellen, dass du das zeitlich niemals allein schaffen wirst.
Dein Optimismus spricht für Dich, aber es gibt halt Sachen, die man heutzutage nicht mehr allein in einem annehmbaren Zeitraum schaffen kann.

Zudomon 8. Dez 2011 14:39

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Progman (Beitrag 1140305)
Habe mir die Demo mal angeschaut.
Mein Ratschlag: Hole dir die Testversion von World of Warcraft und spiel das mal an.
Da siehst du nämlich erstmal, was ein MMORPG ist, wie es funktioniert und was es enthalten muss, um bei Usern "anzukommen". Und dann überleg dir, ob du sowas (ähnliches) auch machen willst.
Und ich garantiere dir, dass du auch in einem Jahr keine Annäherung daran schaffst. In dem Video ist nichts weiter zu sehen, als ein Terrain, über das man eben mal hinwegfliegen kann usw. Das schafft man z.B. schon mit Tutorials aus dem DGL-Forum :)
Spätestens beim Erstellen von 3D-Modellen (Tiere, NPCs, Spieler-Charaktere und ihre Kleidung/Rüstung) inclusive der entsprechenden Animationen, ein Himmel, an dem die Wolken wirklich ziehen, Wasser und vielem mehr, wirst du feststellen, dass du das zeitlich niemals allein schaffen wirst.
Dein Optimismus spricht für Dich, aber es gibt halt Sachen, die man heutzutage nicht mehr allein in einem annehmbaren Zeitraum schaffen kann.

Tut mir leid, aber deine Aussage zeigt mir nur, wie wenig du von der Materie verstehst... also lass gut sein.
Welche Demo hast du denn angeschaut? Bisher haben die Demo nur 1080 Leute getestet... und seit dem ich hier das Video gepostet habe, ist auch keiner dazu gekommen. Außerdem frage ich mich, wo derjenige, der das Let's Play gemacht hat, über die Landschaft fliegt. Der kann nämlich nur da rum laufen, Tiere erlegen, buddeln und bauen.
Wenn du glaubst, man bekommt das mal eben so mit ein paar Tutorials aus dem DGL-Forum nachgemacht, dann würde ich sagen, bist du jetzt mal dran mit beweisen! :lol:
Alleine die Tatsache, dass da pro Frame etwa eine Million Grashalme berechnet werden, die auf Tiere, Waffen und Projektile Einfluss nehmen, habe ich so noch in keinem Spiel gesehen. In der neuen Version ( es ist zur Zeit die Christmas Edition draußen ) kann man zudem Schnee schippen und schauen, was die anderen bereits in der Matrix gebaut haben. (Noch kein echter Multiplayer, aber es geht schon in die Richtung) Wie gesagt, das ist alles noch in der roh Phase... aber das heißt nicht, dass sich das nicht bald ändert.
Ziehende 3D-Plasmawolken hatte ich da mal eingebaut mit Wolkenschatten
Ich habe schon einiges gemacht, aber eben keine kompletten Spiele...
Ein Charakter der über Inverse Kinematic animiert ist...

In meiner alten Engine hatte ich auch Wasser (Bild im Anhang)...
Und 3D-Modelle werde ich prozedural generieren.

Neutral General 8. Dez 2011 14:58

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Hallo,

Ok, also es ist auf jeden Fall mal mehr dahinter, als ich zuerst erwartet hatte :)

Es wundert mich dann nur, dass du fragst ob das mit Delphi möglich ist, wenn du wohl ja schon einige Zeit relativ erfolgreich daran programmierst :mrgreen:

Also ich würde auf jeden Fall dran bleiben!
Ob du damit Geld verdienen kannst, weiß ich nicht, aber interessant finde ich es auf jeden Fall!

Ich wäre evtl. auch gar nicht abgeneigt das Projekt zu unterstützen, falls du irgendwo Hilfe brauchen/wollen solltest.
Was DirectX angeht bin ich allerdings nicht wirklich fit.
Naja.. mal schauen.

Habe auf der Projektseite folgendes gelesen:

Zitat:

PS: Diesmal weder Klassen (außer wo ich es wirklich brauche), Patterns, oder sonst irgendwelche komischen Dinge... und diesmal werde ich auch nichts versuchen, polymorphisch zusammenzuziehen ( was ich eh ohne klassen nicht kann ) sondern alles schön per Hand proggen und dann mal sehen, was da raus kommt...
Ob du damit allerdings weit kommst, wage ich noch zu bezweifeln.
NOCH mag das ja gehen. Aber ich glaube wenn das Projekt noch etwas wachsen soll(te), dann wird der Code bald SEHR ungemütlich.
Das solltest du nochmal überdenken.

Gruß
Neutral General

Zudomon 8. Dez 2011 15:28

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Klassen entsprechen nicht unbedingt meiner Denkweise... in ITA und Studium bin ich immer mehr zu Klassen übergegangen... in meiner letzten Engine hatte ich dann auch mehrere Patterns verwendet... und als es dann zum Multithreading ging musste ich schmerzhaft erfahren, dass jedes erzeugen einer neuen Instanz das Programm zum stocken bringt... und das, obwohl jeder Thread einem eigenen Prozessorkern zugewiesen wurde. Dafür habe ich keine Lösung gefunden. Aber vielleicht wisst ihr ja Rat.

In dem neuen StoneQuest ist es sowieso sehr schwer, Multithreading einzubauen, weil es hier auch darum geht, die Daten zur Grafikkarte zu schicken und umgekehrt... z.B. werden die Cluster zum Teil auf GPU berechnet. Und wer glaubt, DX9 sei Multithreading, der hat sich geschnitten. Es gibt zwar ein Multithreading Flag, aber das bedeutet nur, dass man von verschiedenen Threads aus auf die API zugreifen kann, ohne dass es abstürzt. Intern wird das alles sequenziell verarbeitet. Anfangs hatte ich mich gewundert, wie ich noch nichtmals eine Textur füllen konnte im Workerthread, obwohl die währenddessen garnicht von DX genutzt wurde.

Medium 8. Dez 2011 18:10

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Gut, dass man sich die API locken sollte, wenn es passieren könnte, dass einem ein zeichnender Thread in einen auf der GPU rechnenden reingrätscht, das klingt nachvollziehbar ;). Um das "unruckeliger" zu machen - natürlich sehr von der konkreten implementierung abhängig - müsste man sich einen Mini-Scheduler zwischenbauen, und ggf. die Granularität der Rechnungen erhöhen, so dass ein Zeichenthread öfter mal dazwischen an die Reihe kommen kann.

Was man so bisher gesehen hat, so ist mir irgendwie nicht ganz klar, worauf deine Frage hier abzielt. Du hast ja bereits ausgesprochen umfangreiche Dinge fertig, und die nötige Theorie an der Hand. Alles, was nun noch fehlt, ist fast schon nur noch Content, Content, Content. Und Content.

Man reagierte hier übrigens so "seltsam hämisch", weil wir nicht allzuselten Gäste hier haben, die sich als ihr aller erstes Lernprojekt mal "sowas wie WoW, oder Assassins Creed" bauen wollen, aber beim Verstehen von IntToStr() schon scheitern. Um genau zu sein, bist du der erste seit grob geschätzt 5 Jahren die ich hier täglich lese, der derart vorzeigbare Ergebnisse vorweisen kann, bzw. auch das Hintergrundwissen dazu hat. Dein Eingangsposting klang in seiner Formulierung allerdings sehr ähnlich, wie die zuvor angesprochenen "mal eben nen Weltklassespiel in 2-3 Wochen machen, ich fang grad erst an mit Delphi". Sieh uns bitte nach, dass wir bezüglich "Spieleproggern" hier schon ziemlich geprügelt und getreten sind ;)

stahli 8. Dez 2011 18:48

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Ich habe mich ehrlich gesagt recht verarscht gefühlt bei den ersten Postings.
Die Demos finde ich aber dann schon beeindruckend - wobei mich die ganze Spielerei nicht wirklich interessiert.
Dass man das so mit Delphi so realisieren kann, hätte ich nicht gedacht.
Ich könnte mir aber vorstellen, dass es dennoch andere Entwicklungsumgebungen und Engines gibt, die einen diesbezüglich noch besser unterstützen.
Aber das solltest Du vermutlich selbst besser einschätzen können.

Ich nutze die VCL und mehr brauche ich auch nicht (maximal vielleicht mal FM o.ä.).
Grafische Anwendungen und Spiele sind hier eher selten vertreten. Insofern wirst Du vermutlich hier nicht von vielen Erfahrungen profitieren können.

Aber bis hierher: Respekt :thumb:

Zudomon 8. Dez 2011 19:14

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Liste der Anhänge anzeigen (Anzahl: 5)
Huhu!

Also ich muss mich auch bei euch entschuldigen. Ich mag es allerdings nicht, das Menschen immer so schnell im urteilen und Verurteilen sind. Heute hatte ich von jemanden erfahren, dass da wieder irgendwo ein 14er 10 anderen c++ und c# beibringen wollte um dann mit denen ein großes Projekt zu starten. Und er bräuchte aber dann noch jemanden, der das Team dann in Sachen 3D berät. Ich habe selbst auch schon oft solche Post gelesen und auch schon mal geurteilt. Allerdings immer unter dem Vorbehalt, dass alles möglich ist. Grenzen existieren nur im Kopf. Natürlich war ich auch so naiv und dachte, nachdem ich mein erstes Dreieck über 3D-Karte rendern konnte, dass ich in einem Monat mein 3D-Shooter fertig habe. Seit dem sind 12 Jahre harte Arbeit vergangen. Spiele entwickeln ist mein Leben und ich habe mir schon immer gewünscht, mal was großes zu machen... allerdings sind wirklich größere Sachen dabei noch nicht rum gekommen... wenngleich sich die Sachen die ich habe garantiert sehen lassen können.
Früher wurde mir auch immer gesagt, dass man keine Spiele mit Delphi machen kann, dass ich ein Team bräuchte, dass es Wahnsinn ist, eine eigene 3D-Engine zu schreiben usw. . Aber ich habe immer festgehalten an dem, was ich geglaubt habe. Und das, obwohl ich das Gefühl habe, die ganze Welt redet dagegen. Naja, und vorhin bin ich dann mal auf die Idee zu kommen, zu schauen, wie es wäre, wenn man mal selbst so einen größenwahnsinnigen Thread startet und vor allem, wie die Reaktionen sind, wenn dann da letztlich doch Ausnahmsweise etwas hinter steckt.
Also seit mir bitte nicht böse, dass ich am Anfang schon etwas den Anschein erwecken wollte, nicht zu wissen, wovon ich rede :oops:
Aber wenn ich euch eins sagen kann, dann nachdem ich so lange Zeit Erfahrung gesammelt habe, dass es auf jeden Fall möglich ist. Warum da normalerweise ganze Teams Jahre dran sitzen? Weil die anders arbeiten. Programmieren ist eine große Macht... hierarchie und prozeduralität Werkzeuge, die effektiver sind als tausende Menschen. Natürlich muss man abstriche machen... prozedural generierter Content hat nicht die menschliche Kreativität. Allerdings denke ich, dass man das schon mehr oder weniger vereinen kann. Wie genau, dass kann ich auch nicht sagen. Ich bin ja auch in der Lernphase und lerne jeden Tag immer einen ganz kleinen Teil dazu.

Was aber nicht heißt, dass mich die Eingangs gestellten Fragen nicht interessieren würden... denn ich möchte eure Meinung wissen. Wenn ihr auch mal meine Meinung wissen wollt... also ich selbst bin mir sehr sicher, dass man ein MMORPG mit Delphi hinbekommt... für mich ist es sogar nur damit Möglich... weil ich mir bei Delphi vorkomme, wie ein Fisch im Wasser... mit C++ oder anderen Sprachen bin ich nicht annähernd so effektiv.

Eigentlich wollte ich auch bis Ende des Jahres die Finger vom Multiplayer lassen, aber dann ist es mir Anfang dieser Woche relativ klar geworden, wie man das ganze ohne allzu großen Aufwand realisieren kann.
Wie gesagt, Grenzen existieren nur im Kopf... ich glaube, dass man das MMORPG ohne Serverfarm laufen lassen kann. Jeder Cluster hat nur ein paar Kilobyte Daten... die werden hinterher über HTTP ( hab das jetzt noch über FTP ) an meinen Webserver als Backup übertragen. Untereinander tauschen die Clients die Daten aus. Dabei regelt noch eine Datenbank, welche User gerade eingeloggt sein und in welchem Cluster ( noch nicht implementiert ) diese sich befinden... und es wird dann eben immer ein p2p über UDP mit den nahesten Spielern aufgebaut. P2P Netzwerk für die erste Iteration von StoneQuest habe ich schon gemacht und es hatte funktioniert.
Da also jeder Spieler sich untereinander nur mit ein paar Clients austauscht... das ganze ist ja auch skalierbar, umso weiter die entfernt sind, oder umso mehr Leute in der Nähe sind, umso größer können die Sendeintervalle sein. An den Webserver braucht dann immer nur alle paar Sekunden eine Sicherung gemacht werden. Auch da kann man gut optimieren, weil sich ja Spieler untereinander absprechen können, wer dann letztlich das Cluster sendet... und falls die Daten zuviel werden, dann kann man einfach auf mehrere Webserver verteilen. Das einzige Problem sehe ich in der Datenbank... nehmen wir wirklich mal eine Million Spieler, die online sind, so weiß ich nicht, ob eine Datenbank das verwaltet bekommt in relativ kurzer Zeit, aber vielleicht kann man da auch aufteilen. Also wenn ich da nun kein gravierenden Denkfehler gemacht habe, dann sollte tatsächlich ein MMORPG mit beliebig vielen Spielern möglich sein.

Was den Content angeht, da es sich um ein Minecraft ähnliches Spiel handelt, wird der Content zum Teil vom Spieler geschaffen. Einen anderen Teil gebe ich vor, eben prozedural... das Gras funktioniert ja schon. Einen rudimentären Baumgenerator habe ich auch. Farnkraut habe ich bereits gemacht... also was Vegetation angeht, fühle ich mich gewappnet.
Wo ich noch etwas bedenken habe sind in der Tat Tier und Mensch... statt jedes Modell einzeln zu machen, würde ich mich gerne an einen Wirbeltiergenerator ran machen... ob das Erfolg hat, wird sich zeigen.

PS: Bisher habe ich mich nur immer auf ZFX herumgetrieben... ich freue mich, nun auch bei euch angekommen zu sein :thumb:

Im Anhang: Prozedurale Bäume, Gräser und Farne... wobei das Lebel von letzterem in meinem eigenen 3D-Editor gemacht sind.

Stevie 8. Dez 2011 19:20

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Und was hat jetzt nen Minecraft Klon (mit einer zugegebenermaßen recht ansehnlichen Engine) mit nem MMORPG zu tun?

wicht 8. Dez 2011 19:31

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Ich kenne Minecraft nur von Bildern - weiß also nicht, wie das läuft. Allerdings muss ich mich den anderen anschließen. Ich hatte am Anfang auch das Gefühl, dass hier ein Anfänger was ganz großes erledigen möchte.... Das nimmt man dann eben nicht so "ernst". Ich möchte an dieser Stelle meinen Respekt aussprechen, das sieht bis hier hin super aus - und um deine Frage zu beantworten, das kann man bestimmt mit Delphi(/FreePascal) hinbekommen!

Zudomon 8. Dez 2011 19:44

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Minecraft fand ich sehr faszinierend... die Möglichkeit zu bauen, blockbasiert, dass macht eine Menge Spass... dabei hat Minecraft auch einige RPG Elemente, aber eben nur auf sehr niedrigem Niveau. Das würde ich gerne besser machen. Im Unterschied zu WoW wird meine Welt dann von jedem Gestaltbar sein... und jeder geht dem nach, was am meisten Spass macht.
Hier hatte ich mal ein paar Dinge festgehalten, die mir gefallen würden.
Da es RPG Elemente und MMO wäre, würde ich sagen, es wird ein 3D-MMORPG... allerdings wird das ganze auch in einer sehr dynamischen Welt statt finden. Was zu Anfang nur als vereinfachung begann, das Autoupdating, stellt sich nun als mächtiges Instrument raus. Vorher war das ganze eher Sommerlich gehalten... seit dem ersten Advent spielt das ganze nun in einer gefrosteten Umgebung, die Hasen haben Weihnachtkapuzen auf... die Bäume sind Schneebedeckt und im Hintergrund dudelt Jingle Bells... und bald kommen dann Bäume mit geschmückten Lichtern dazu... ein großer Weihnachtsbaum soll da auch noch rein... natürlich ist das nur als kleines Gimmik, aber es zeigt, das die Welt dynamisch ist. Nicht nur durch das, was von den Spielern gebaut wird. Ich finde sowas sehr interessant und habe das Gefühl, eine eigene Matrix aufzubauen. Und ich kann es kaum erwarten zu erleben, wohin die Reise noch geht. Ideen habe ich unzählige ( auch andere haben schon sehr coole Ideen mit einfließen lassen ). StoneQuest könnte etwas werden, was so noch nicht existiert.
Wenn später jedes Modell einzigartig ist, dann wird auch jeder Zweig, den man von einem Baum schneidet dem Baum fehlen... und die Werkzeuge und Waffen die man daraus baut, sind entsprechend einzigartig. Lässt man an einem größeren Zweig ein Sprössling dran, so wird der da für immer dran hängen... auch wenn der Zweig schon zu einem Bogen verarbeitet ist.

implementation 8. Dez 2011 19:48

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Die Bilder sind echt beeindruckend. Weiter so! Vom P2P-Prinzip bin ich ebenso begeistert.
Gib nicht auf, du bist wirklich auf dem richtigen Weg!

Möglicherweise könntest du auch mal im DelphiGL-Forum vorbeischauen, die haben mit sowas mehr Erfahrung als die meisten hier in der DP. Fragt sich nur, ob man dort so begeistert davon ist, dass du dich für Direct3D entschieden hast ;)

Zudomon 8. Dez 2011 20:17

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
4 Jahre habe ich mit Delphi + OpenGL gearbeitet.:-D

Was natürlich nicht heißt, dass da nicht auch mal ein Softwarerenderer, diverse Raytracer und sogar ein D3DX9 Pathtracer entstanden wären :-D :-D :-D

Medium 8. Dez 2011 21:03

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Das ist schon ziemlich sexy Zeug! Vor allem glänzen meine Augen beim Begriff "prozedural" wie irre. Ich liebe berechneten Kram über alles, und dein Editor schaut durchaus sahnig aus. Nicht nur optisch, auch die Bearbeitungsfunktionen scheinen sehr ergonomisch umgesetzt, was vielen 3D Programmen (Game-Editoren wie CAD und Maya-Likes) oft abgeht. Daher an dieser Stelle auch erstmal ein großer :thumb:, nicht zuletzt, weil mir die Materie selbst nicht ganz unbekannt ist, und ich einschätzen kann, wie irre viel Zeit und Hirn da rein fließen muss, um bis da hin zu kommen, was ich gesehen habe. Ein wenig Neid kommt da aber auch mit, weil Beruf und mangelndes kontinuierliches Durchhaltevermögen (gibt so schrecklich viel Interessante Dinge, argh) bisher daran gehindert haben, mehr als eine Hand voll Proof-of-Concepts und diversen GPGPU Kram zu bauen.
Und gerade in der Delphi-Welt, ist man mit so weit getriebenen 3D-Dingen ein totaler Exot. Nicht, weil es mit Delphi nicht ginge - im Gegenteil. Eher, weil Delphi/Pascal seit je her in Industrie und Datenbankanwendungen, und somit eigentlich einer komplett anderen Welt verhaftet ist. Nicht technisch, aber was den Entwicklerkreis im Allgemeinen angeht. Eigentlich schade für so eine schöne Sprache, die gerade aus mathematischer Sicht so viel gefälliger ist als C-likes.

Die P2P-MMO Idee ist übrigens auch eine sehr geniale! Wobei ich die Bedenken bzgl. des Back-Backends nachvollziehen kann, zumal dieser Server dann ja regelmäßig eine Fülle von Paketen bekäme, die nur Teilweise die gleichen Infos beinhalten, und teilweise andere. Der erste Schritt wäre für ihn also schon mal das Herstellen einer Gesamtinfo ohne Dopplungen, wobei auch noch berücksichtigt werden muss, dass von multiplen Daten zu einem selben Sachverhalt nur der mit dem aktuellsten Timestamp gilt. Er müsste also eine Sekunde lang sammeln, dabei entscheiden was zu aktualisieren ist, und dann einen Snapshot davon der Persistenz zuführen. Vor allem aber hat man das Problem, dass man fortan keine Serverseitigen Constraints mehr realisieren kann, wie z.B. das Erkennen/Verhindern von Wallhacks o.ä., da als Entscheider für z.B. Hits nur noch der Client in Frage kommt, und kein Server mehr da wäre, die Korrektheit gegenzuprüfen. Es sei denn, man würde dafür eine separate Maschine abstellen. So dass man einen Datenhaltungs- und einen Mechanics-Knecht hätte. Die Frage wird dann, ob und was man gewonnen hätte. Letztlich käme ich, während ich hier so beim Schreiben denke, auf eine klassische Lösung zurück, die aber zusätzlich ein light-weigt P2P betreibt, um Latenzen unter den Spielern zu verringern. States von NPCs aber z.B. würden damit schwierig, insbesondere wenn mehrere Spieler das selbe sehen sollen, z.B. bei gescripteten Bosskämpfen und dergleichen. Hmmmm... herrliches Thema! :cheers:

Zudomon 9. Dez 2011 05:28

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Liste der Anhänge anzeigen (Anzahl: 5)
Danke für den regen Zuspruch! :-D

Ich werde mal noch etwas mehr Licht ins Dunkel bringen. Immer wenn ich etwas höre/lese, was mir aufzeigt, wo andere die Grenzen sehen, fällt mir immer Recht spontan ein: Wie würde es in der Realität umgesetzt? Damit meine ich, wenn ein paar Leute sich in der echten Welt treffen und irgendwas machen, würde da auch auffallen, wenn bei einem etwas nicht mit rechten Dingen zugeht. Weil man sich gegenseitig beobachtet. Wenn nun in der Matrix die Clients sich gegenseitig ihre Daten senden und diese von dem Empfänger daraufhin geprüft wird, ob alles mit rechten Dingen zugeht, so kann erkannt werden, ob gecheatet wird. Da nur noch einzelne Cluster übertragen werden könnte der Spieler nur noch eben diesen Zerstören. Vielleicht könnte man einen Hashwert von den Clustern bilden, und wenn dieser nicht korrekt ist, wird der vom Server bzw. von den anderen Clients nicht angenommen... also so, dass nicht einfach jemand das Cluster nach seinen Gutdünken umstrickt und dann an andere verteilt. Aber das ist noch Zukunftsmusik. Ich will das überhaupt erstmal ans laufen bekommen, bevor ich mir über Cheats Gedanken mache, denn ich muss immer ein Schritt nach dem anderen gehen, alle auf einmal kann ich nicht bewältigen.

Der WebSpace Server muss eigentlich kaum was machen und auch die Packete werden sich erstaunlich gering halten. Denn was passiert? Wenn der Spieler startet, werden alle Cluster runtergeladen. Im Moment noch wirklich einzeln. D.h. jede Clusterdatei wird einzeln vom Server geladen. Später soll es so sein, dass eine PHP Seite alle benötigten Cluster lädt, und die Information auf der Webseite ausgibt... da ja auch hier nur die Cluster in Frage kommen, die auch wirklich vom Spieler erstmal direkt sichtbar sind, rechne ich mal vielleicht mit 1 MB... im Moment sind es 160 KB auf 354 Cluster verteilt. Da die Welten eher flächig gebaut werden, als dreidimensional, wächst der Speicherverbauch hier auch zum Glück nur quadratisch, statt cubisch. Außerdem ist es ja erstmal wichtig, dass die Cluster, die in unmittelbarer Nähe sind korrekt dargestellt werden, was weiter im Hintergrund liegt, kann nach und nach nachgeladen werden. Auf Festplatte sollte das ganze natürlich noch zwischengespeichert um das Laden nochmal wesentlich zu beschleunigen. Mir ist Usability und kurze Ladezeiten sehr wichtig. Beim hochladen ist noch wesentlich weniger Traffic notwendig. Man Stelle sich vor, man hat 10 Spieler... die arbeiten gerade zusammen und nach einer Minuten haben sie an insgesamt 4 Clustern gearbeitet. Nun wird nach dieser Minute an vier der Spieler die Aufgabe verteilt, das Cluster auf dem Webserver zu sichern. D.H. jeder der vier ruft dann eine PHP-Seite auf, die die Clusterdaten, 32 byte - 50 kbyte entgegen nimmt. Das sollte man von einem Webserver als machbar erwarten. Ansonsten kann man das Intervall auch größer machen. Wichtig ist, dass vor dem Hochladen der Daten, der Client das entsprechende Cluster noch einmal runterlädt und die Voxel gemerged werden nach Timestamp.
Im Moment ist es noch so, dass die Daten direkt hochgeladen werden, sobald das Programm beendet wird. Damit wirklich auch die letzten Änderungen auch zwischen einem Intervall gespeichert werden.

Ich würden noch generell gerne was zu meiner Programmierweise sagen, denn ich glaube, die unterscheidet sich schon von anderen. Ich bin absoluter Try&Error programmierer. Ich habe schon Schwierigkeiten bei verketteten AND & OR Anweisungen (Also jetzt nicht, wenn man nur eine Art davon verknüpfen muss, sondern schon bei etwas längeren vor allem verschachtelten Anweisungen). Da probiere ich lieber direkt aus, Delphi kompiliert so wahnsinnig schnell. Ein Fullbuild von StoneQuest braucht, wenn keine Hinweise drin sind, nur etwa 2 Sekunden. Ich liebe Delphi dafür!!! Außerdem programmiere ich aus dem Bauch heraus. Ich mache mir kaum Gedanken über irgendwas. Es kommt einfach immer auf mich zu. Und wenns mal nicht klappt, schmeißt dann wieder raus und probiert es auf einen anderen Weg. Jedesmal lernt man dazu. Damit bin ich schneller, als andere, die lange für sowas planen. Außerdem bin ich, was Mathe betrifft der absolute Noob. Aber meine Projekte beweisen, man kann das alles ohne große Mathekenntnisse schaffen. Manche halten das bestimmt jetzt auch wieder für verarsche, ist es aber nicht. Und ich kann das auch logisch erklären: Ich habe zwar kein Plan, was mathematisch hinter Skalarprodukten und Kreuzprodukten hat, obwohl das gewiss mal in einer der langweiligen Mathevorlesungen erklärt wurde (aber da hab ich eh nichts verstanden und wenn ich mal hingegangen bin, dann konnte ich nicht wach bleiben). Aber ich weiß, wie man diese Dinge als Werkzeuge einsetzt. Und das ist alles was zählt.
Fast alles, was ich bisher gemacht habe, und ich habe euch jetzt noch nichtmals 2% von dem gezeigt, habe ich mir selbst ausgedacht. Ich bin autodidakt. Wenn man mir ein Verfahren als Animation zeigt, dann versteht ich das meist Instant, dafür verstehe ich das in Form von Formeln oder Quellcode überhaupt nicht. Man sagte mir damals dass man Physik machen kann, indem man einfach gewährleistet, dass Punkte zueinander immer den gleichen Abstand haben. Und das die Verletintegration für sowas besser geeignet ist, wo dann Geschwindigkeit immer aus den Positionen herausextrahiert wird. Zwei Wochen später hatte ich eine Reifensimulation (in wesentlich abgespeckterer Form war das nämlich Aufgabe für Multimediaprogrammieren 2). Da ich nicht weiß, in wie weit die Texturen dafür frei waren, werde ich es mal lassen, das hier als Anhang dazu zu legen. Aber ich werde diese Physik auch sehr bald in SQ haben.
Aber nun wollte ich ja noch ein Wort dazu sagen, wiso man auch ohne Mathe mathematische Probleme lösen kann: Nehmen wir mal etwas komplexes wie Inverse Kinematik. Mathematisch wohl hoch komplex. Aber trotzdem ist jeder Mensch und ich denke auch, jedes Tier in der Lage, invers kinematisch zu hantieren. Es wird einfach gelernt. Man lernt, wenn man einen Punkt im Raum mit einer gewissen Körperstelle erreichen möchte, dieses zu tun. Wenn ich so darüber schreibe, dann fällt mir ein, dass es nicht auf unseren Körper beschränkt ist. Wenn man sich einen Stock zur Hand nimmt, kann man das auch damit schaffen. Nun was passiert eigentlich? Man versucht den Stock so zu bewegen, dass dieser näher an den Punkt kommt, den man erreichen möchte. Entfernt man sich weiter, ist die Bewegung wohl falsch, also versucht man eine andere. Nicht anders ist auch meine IK gelöst... das wird bestimmt nicht die schnellste Möglichkeit sein, dass zu berechnen, weil es hier ja auch ein Try&Error Ansatz ist, aber erstmal funktioniert ist. Optimieren kann man immer noch.
Ein weiterer Punkt, der mich beim programmieren von anderen sehr unterscheidet ist, mein unübersichtlicher zusammengequetschter Code. Ich kann nicht so breit gefächert programmieren und schon gar nicht, mit Kommentaren. Für mich ist nämlich wichtig, dass die Codestelle ein gewisses Aussehen hat. Wenn man das so breit aufstellt, dann geht mir da die Übersicht komplett verloren.

Hier mal ein kleines Codebeispiel, allerdings in C++ geschrieben. Das einzige, was ich in Delphi vermisse sind Defines... aber vielleicht auch gut, weil sonst würde mein Quellcode noch viel "dreckiger" aussehen. Bitte sagt mir nicht, dass das schlecht ist, wie ich es mache. Das mag für andere zutreffen, aber für mich ist es Ideal.

Bei dem Code handelt es sich um eine relativ komplette Vektor- und Matrix-Klasse.
Code:
#define forExt(i, t)             for(int (i)=0; (i)<int(t); (i)++)
#define forExt2D(i,j,t1,t2)      forExt(i, t1) forExt(j, t2)
#define forExt3D(i,j,k,t1,t2,t3) forExt2D(i,j,t1,t2) forExt(k, t3)
 

#define VEC1(exp) TVec3 r; forExt(i, 3) r.v[i]=exp; return r;
#define VEC2(exp) forExt(i, 3) v[i]exp; return *this;

class TVec3{
  public:
    float v[3];
    TVec3&operator = (float s)  { forExt(i, 3) v[i]=s; return *this; };
    TVec3 operator - ()         { VEC1( -v[i]        ) };
    TVec3 operator - (TVec3 opp) { VEC1( v[i]-opp.v[i] ) };
    TVec3 operator - (float s)  { VEC1( v[i]-s       ) };
    TVec3 operator + (TVec3 opp) { VEC1( v[i]+opp.v[i] ) };
    TVec3 operator + (float s)  { VEC1( v[i]+s       ) };
    TVec3 operator * (float s)  { VEC1( v[i]*s       ) };
    TVec3 operator / (float s)  { DIV0( s, return operator=(0); , return operator*(1.0/s); ) };
    TVec3&operator -=(TVec3 opp) { VEC2( -=opp.v[i]   ) };
    TVec3&operator -=(float s)  { VEC2( -=s          ) };
    TVec3&operator +=(TVec3 opp) { VEC2( +=opp.v[i]   ) };
    TVec3&operator +=(float s)  { VEC2( +=s          ) };
    TVec3&operator *=(float s)  { VEC2( *=s          ) };
    TVec3&operator /=(float s)  { DIV0( s, return *this; , VEC2( /=s; ) ) };
    float&operator [](int index) { return v[index]; };
    float lngSQ()               { return sqr(v[0])+sqr(v[1])+sqr(v[2]); };
    float lng()                 { return sqrt(lngSQ()); };
    void writeTo( char *p )     { *(p++)=_Byte(v[0]); *(p++)=_Byte(v[1]); *p=_Byte(v[2]); } ;
};

TVec3 crt(float a, float b, float c)     { TVec3 r={a,b,c}; return r; };
float dot(TVec3 v1, TVec3 v2)              { float r=0; forExt(i,3) r+=v1[i]*v2[i]; return r; };
TVec3 crs(TVec3 v1, TVec3 v2)              { TVec3 r; forExt(i,3) r.v[i]=v1[(i+1)%3]*v2[(i+2)%3]-v1[(i+2)%3]*v2[(i+1)%3]; return r; };
TVec3 nrm(TVec3 v)                         { return v / v.lng(); }
TVec3 lrp(TVec3 v1, TVec3 v2, float s)     { TVec3 r; forExt(i,3)r.v[i]=v1[i]+s*(v2[i]-v1[i]); return r; };
TVec3 normal(TVec3 v1, TVec3 v2, TVec3 v3) { return crs(v2-v1, v3-v1); }
TVec3 sat(TVec3 v)                         { VEC1( sat(v[i]) ) };

bool same(TVec3*v1, TVec3*v2, float s)     { return (*v1-*v2).lng()<s; };

TVec3 min(TVec3 v1, TVec3 v2)              { VEC1( min(v1[i], v2[i]) ) };
TVec3 max(TVec3 v1, TVec3 v2)              { VEC1( max(v1[i], v2[i]) ) };
TVec3 min(TVec3 v, float s)               { VEC1( min(v[i],s) ) };
TVec3 max(TVec3 v, float s)               { VEC1( max(v[i],s) ) };

TVec3 reflect(TVec3 i, TVec3 n)            { return i-(n*dot(i,n)*2); }
TVec3 refract(TVec3 i, TVec3 n, float ind) { float w,k; w=-(dot(i,n)*ind); k=1.0+(w-ind)*(w+ind);
                                              return k>-ZERO_TOLERANCE?i*ind+n*(w-sqrt(k)):reflect(i, n); }

TVec3 barycentric(TVec3* v1, TVec3* v2, TVec3* v3, float f, float g) { return *v1 + (*v2-*v1)*f + (*v3-*v1)*g; };
float dist_point_line(TVec3 v, TVec3 lpos, TVec3 ldir)               { return crs(v-lpos,ldir).lng()/ldir.lng(); };
float projdist_point_line(TVec3 v, TVec3 lpos, TVec3 ldir)           { return dot(v-lpos,ldir); };

#undef VEC1
#undef VEC2
//---------------------------------------------------------------------------

class TMatrix4x4 {
  public:
    float m[16];
    TMatrix4x4&operator = (float s) { forExt(i, 16) m[i]=s; return *this; };
    TMatrix4x4 operator * (TMatrix4x4 mat) { TMatrix4x4 r; r=0; forExt3D(i,j,k,4,4,4) r.m[i*4+j]+=m[k*4+j]*mat.m[i*4+k]; return r; };
    TMatrix4x4&operator *=(TMatrix4x4 mat) { TMatrix4x4 r=*this; *this=0; forExt3D(i,j,k,4,4,4) m[i*4+j]+=r.m[k*4+j]*mat.m[i*4+k]; return *this; };
    TVec3 getAxisX(){ return crt(m[0], m[4], m[8]); };
    TVec3 getAxisY(){ return crt(m[1], m[5], m[9]); };
    TVec3 getAxisZ(){ return crt(m[2], m[6], m[10]); };
    TVec3 getPos() { return crt(m[3], m[7], m[11]); };
    TVec3 transformCoord(TVec3 v) { TVec3 r=transformNormal(v); forExt(i,3)r[i]+=m[i*4+3]; return r; };
    TVec3 transformNormal(TVec3 v) { TVec3 r; r=0; forExt2D(i,j,3,3)r.v[i]+=v[j]*m[i*4+j]; return r; };
};

TMatrix4x4 matScaling(TVec3 v) { TMatrix4x4 m={v[0],0,0,0,0,v[1],0,0,0,0,v[2],0,0,0,0,1}; return m; };
TMatrix4x4 matScaling(float s) { TMatrix4x4 m={s,0,0,0,0,s,0,0,0,0,s,0,0,0,0,1}; return m; };
TMatrix4x4 matRot(float, TVec3);
TMatrix4x4 matRotX(float a) { TMatrix4x4 m={1,0,0,0,0,cos(a),-sin(a),0,0,sin(a),cos(a),0,0,0,0,1}; return m; };
TMatrix4x4 matRotY(float a) { TMatrix4x4 m={cos(a),0,sin(a),0,0,1,0,0,-sin(a),0,cos(a),0,0,0,0,1}; return m; };
TMatrix4x4 matRotZ(float a) { TMatrix4x4 m={cos(a),-sin(a),0,0,sin(a),cos(a),0,0,0,0,1,0,0,0,0,1}; return m; };
TMatrix4x4 matRotZXY(TVec3 v) { return matRotZ(v[2])*matRotX(v[0])*matRotY(v[1]); };
TMatrix4x4 matIdentity() { TMatrix4x4 m={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}; return m; };
TMatrix4x4 matTranslation(TVec3 v) { TMatrix4x4 m={1,0,0,v[0],0,1,0,v[1],0,0,1,v[2],0,0,0,1}; return m; };
TMatrix4x4 transpose(TMatrix4x4 m) { TMatrix4x4 r; forExt2D(i,j,4,4)r.m[i*4+j]=m.m[j*4+i]; return r; };
Der komplette Code für das aktuelle StoneQuest hat etwas über 31k Zeilen. Soweit ich weiß, ist das relativ wenig Code (vor allem, wenn man sich das Projekt mal wirklich anschaut und nicht einfach nur als Terraingenerator abtut :wink:).

Ich hoffe dass ich einen kleinen Einblick in meine Arbeitsweise geben konnte. Und auch wenn das viele vielleicht nun erschrecken sollte und die sich an den Kopf fassen, will ich ja nur eins erreichen:
Macht es so, wie ihr es für richtig haltet. Lasst euch nicht immer in eine Norm zwängen, wenn diese nicht eurer Denkweise entspricht! Letztendlich zählt das Ergebnis. Den Spieler interessiert herzlich wenig, in wie weit sauberes UML eingehalten wurde. Hauptsache es läuft hinterher auch stabil. Das tut meine Software nicht, aber eben nur am Anfang... denn auch da ist es Try&Error... dafür versuch ich auf alles zu verzichten, was das ganze zu komplex werden lässt. In dem SQ verwende ich keine eben keine Klassen (bis auf die, die Delphi für komplexere Dinge wie Streaming oder so bereit stellt). Auch Pointer sind bei mir Tabu... Pointer bringen mir früher oder später Exceptions... vielleicht bin ich nur zu blöd, damit umzugehen, wer weiß... bei mir ist alles programmtechnisch relativ einfach gelöst... z.B. wenn ich einen Fore/Back Mechanismus brauche, wo dann in den Backbuffer geschrieben wird, also als Datentyp gesehen ist es einfach ein Array[0..1] of TWasWeißIch und dann noch zwei Integer Variablen Fore = 0 und Back = 1... und dann kann man in den Index von Back schreiben und Fore benutzen... und wenn man fertig ist einfach Fore und Back swappen. Vielleicht wird sowas auch generell so gemacht, ich weiß es nicht. Aber ich könnte mir vorstellen, das einige da auch gleich mit Pointern anfangen. Wie auch immer, ist ja jedem auch überlassen wie er mag. Will ja nur erzählen, wie ich das mache.

Und noch etwas was mir einfällt, ich tendiere dazu, eher Blob-Strukturen zu schreiben. Früher hatte ich in der alten Engine (wo auch das Editor Video von ist) alles als Klassen realisiert. Also für den Modifierstack hatte ich z.B. ein Decorator Pattern verwendet. Es ist auch sehr einfach gewesen, das dann Instanztechnisch zu verbinden. Aber letztlich habe ich das Gefühl gehabt, die Komplexität über das Programm zu verteilen. Und das war nicht für mich. Mein neuer Ansatz wird sein, den Modifierstack einfach als Array zu realisieren, der angibt, was passieren soll. Eine einfache Baufunktion bekommt diese Blaupause und spuckt das fertige Objekt aus. Man hat zwar dann eine große bau Funktion, die auch zugegebenermaßen entsprechend unübersichtlich wird (aber mit Codefolding kann man das schön zusammenschrumpfen lassen), aber für mich ist das übersichtlicher, als die ganze Funktionalität auf etliche Klassen zu verteilen.
Ich versuche halt immer, die einfachste Lösung zu nehmen. Z.B. das Undo und Redo. Normalerweise würde man hergehen und dafür Klassen schreiben. Ich muss zugeben, ich kann mir garnicht genau vorstellen, wie das gehen soll. Soweit ich weiß würde das alles dann über Befehle laufen, die mit Protokolliert würden. Jeder Befehl müsste ja dann auch eine Art vorwärts und rückwärts Schritt beinhalten. Um ehrlich zu sein, dass ist mir schon wieder viel zu aufwendig... und faul bin ich auch! Und da im Editor die Objekte aus sehr kleinen Daten bestand, habe ich mir gedacht, warum nicht nach jeder Aktion die komplette Szene speichern. Und so ist es gemacht. Bei einem Undo wird einfach die Szene von davor geladen. Das ging so schnell, dass man es beim Editieren kaum merkt. Aber der Vorteil, den ich mir damit erkauft habe, war extrem. Ich hatte mit nichtmal 100 Zeilen Code ein funktionierendes Undo/Redo. Man sagt immer, man kann mit Klassen den Code einfacher warten. Ich denke, noch effektiver ist Code, der nicht existiert.
Was die Blob-Strukturen angeht, so ist es für mich deswegen einfacher, weil ich nicht so viele verschiedene Dinge benutzen muss. Auch wenn es sich seltsam anhört, aber die Namen sind für mich ausschlaggebend, ob ich etwas begreife oder nicht. Deswegen habe ich mir kurze Funktionen geschrieben, die bestimmte Aktionen machen... z.B. um bestimmte Renderstates zu setzen. Meine wohl unsauberste Struktur im Moment ist der TBuffer... in diesem werden 2D-, 3D-, Cube-Texturen, Surfaces, Vertex- und Index- und sogar Sounds abgelegt. Dabei werden die Funktionen soweit es geht zusammengezogen. Im Grunde passiert sowas ja auch in ähnlicher Form bei Klassen und Polymorphie. Allerdings verliere ich da den Überblick. Wenn ich eine Lock Funktion aufrufe und da drin einfach eine Case Anweisung ist, die je nach Typ entscheidet, was gemacht wird, so ist das für mich wesentlich angenehmer. Übrigens werden später 2D-, 3D-, 4D-Vektoren, Color, Quaternionen, Planes und Kugeln auch zu einem Typ zusammengezogen. :-D

Noch eine Randbemerkung: Natürlich ist ein solches arbeiten im Team unmöglich. Das verstehe ich. Die meisten erwähnten Dinge funktionieren nur, weil ich schließlich auch alleine Entwickel. Ich kann auch überhaupt nicht im Team arbeiten. Ich will auch überhaupt nicht im Team arbeiten. Ich bin quasi der schrecken jedes Arbeitgebers. Deswegen muss ich eben einen anderen Weg finden. Davon mal abgesehen, will ich auch einen anderen Weg finden, denn für jemand anderen programmieren empfinde ich als Quälerei. Vor allem, wenn man die Sachen, die man für krass hält, für nen Appel und nen Ei dann anderen überlässt!

Verdammt ist das wieder viel geworden! Ich hoffe, das liest auch jemand und hoffentlich bringt es auch jemandem was... :wink:

Diesmal im Anhang, der Reifen, IK und Kleidungsphysik.

Und aus tiefster Seele kann ich nur sagen:
Leb deinen Traum
und
Ich bin nur ein großer Träumer

Zudo

mquadrat 9. Dez 2011 09:42

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Von dem ganzen Grafikzeugs hab ich wenig Ahnung, daher halte ich mich da mal zurück. Aber wie hast du dir das Backend dafür vorgestellt? Bei einer Zielgröße von 1.000.000 Usern, hast du da ne ganze Server-Farm stehen. Wie werden die Daten gehalten? Wie werden sie synchronisiert?

Zur Engine / Sprache: Wenn ich sowas hätte machen wollen, dann wäre ich wohl auf XNA gegangen. Da könnte man einfach mehr Leute erreichen via XBox / Windows Phone / Windows.

Zudomon 9. Dez 2011 10:38

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zitat:

Zitat von mquadrat (Beitrag 1140467)
Aber wie hast du dir das Backend dafür vorgestellt? Bei einer Zielgröße von 1.000.000 Usern, hast du da ne ganze Server-Farm stehen. Wie werden die Daten gehalten? Wie werden sie synchronisiert?

Beantwortet das nicht deine Frage? Falls nicht, frag nochmal explizit.
Zitat:

Zitat von Zudomon (Beitrag 1140372)
Wie gesagt, Grenzen existieren nur im Kopf... ich glaube, dass man das MMORPG ohne Serverfarm laufen lassen kann. Jeder Cluster hat nur ein paar Kilobyte Daten... die werden hinterher über HTTP ( hab das jetzt noch über FTP ) an meinen Webserver als Backup übertragen. Untereinander tauschen die Clients die Daten aus. Dabei regelt noch eine Datenbank, welche User gerade eingeloggt sein und in welchem Cluster ( noch nicht implementiert ) diese sich befinden... und es wird dann eben immer ein p2p über UDP mit den nahesten Spielern aufgebaut. P2P Netzwerk für die erste Iteration von StoneQuest habe ich schon gemacht und es hatte funktioniert.
Da also jeder Spieler sich untereinander nur mit ein paar Clients austauscht... das ganze ist ja auch skalierbar, umso weiter die entfernt sind, oder umso mehr Leute in der Nähe sind, umso größer können die Sendeintervalle sein. An den Webserver braucht dann immer nur alle paar Sekunden eine Sicherung gemacht werden. Auch da kann man gut optimieren, weil sich ja Spieler untereinander absprechen können, wer dann letztlich das Cluster sendet... und falls die Daten zuviel werden, dann kann man einfach auf mehrere Webserver verteilen. Das einzige Problem sehe ich in der Datenbank... nehmen wir wirklich mal eine Million Spieler, die online sind, so weiß ich nicht, ob eine Datenbank das verwaltet bekommt in relativ kurzer Zeit, aber vielleicht kann man da auch aufteilen. Also wenn ich da nun kein gravierenden Denkfehler gemacht habe, dann sollte tatsächlich ein MMORPG mit beliebig vielen Spielern möglich sein.


TiGü 9. Dez 2011 10:43

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zitat:

Zitat von Zudomon (Beitrag 1140501)
Untereinander tauschen die Clients die Daten aus. Dabei regelt noch eine Datenbank, welche User gerade eingeloggt sein und in welchem Cluster ( noch nicht implementiert ) diese sich befinden... und es wird dann eben immer ein p2p über UDP mit den nahesten Spielern aufgebaut. P2P Netzwerk für die erste Iteration von StoneQuest habe ich schon gemacht und es hatte funktioniert.

Nächster Spieler heißt logisch in der Spielwelt der Nachbar oder geographisch-regional-lokal in der Realität?

Zudomon 9. Dez 2011 10:45

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zitat:

Zitat von TiGü (Beitrag 1140505)
Zitat:

Zitat von Zudomon (Beitrag 1140501)
Untereinander tauschen die Clients die Daten aus. Dabei regelt noch eine Datenbank, welche User gerade eingeloggt sein und in welchem Cluster ( noch nicht implementiert ) diese sich befinden... und es wird dann eben immer ein p2p über UDP mit den nahesten Spielern aufgebaut. P2P Netzwerk für die erste Iteration von StoneQuest habe ich schon gemacht und es hatte funktioniert.

Nächster Spieler heißt logisch in der Spielwelt der Nachbar oder geographisch-regional-lokal in der Realität?

Das heißt in der Matrix... also von der Clusterentfernung her...

TiGü 9. Dez 2011 11:04

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Zitat:

Zitat von Zudomon (Beitrag 1140508)
Zitat:

Zitat von TiGü (Beitrag 1140505)
Zitat:

Zitat von Zudomon (Beitrag 1140501)
Untereinander tauschen die Clients die Daten aus. Dabei regelt noch eine Datenbank, welche User gerade eingeloggt sein und in welchem Cluster ( noch nicht implementiert ) diese sich befinden... und es wird dann eben immer ein p2p über UDP mit den nahesten Spielern aufgebaut. P2P Netzwerk für die erste Iteration von StoneQuest habe ich schon gemacht und es hatte funktioniert.

Nächster Spieler heißt logisch in der Spielwelt der Nachbar oder geographisch-regional-lokal in der Realität?

Das heißt in der Matrix... also von der Clusterentfernung her...

Was heißt das genau? Was ist die Clusterentfernung und wie ist die definiert?

Sorry, ich hatte mal ein paar Monate Shaiya gespielt, aber das war es dann schon mit Multiplayerspielen und dementsprechend stecke ich da nicht drin.

Zudomon 9. Dez 2011 11:31

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Die Welt von StoneQuest ist eine Welt voller Voxel... jede Einheit quasi ein Kubikmeter... ein Cluster sind 32x32x32 Voxel... und ich würde in der Datenbank speichern, in welchem Cluster sich der Spieler befindet.
Und da jeder Cluster im Raum angeordnet ist, haben diese auch eine Entfernung untereinander... und ein Client muss ja nun nur Daten an die Spieler senden, die sich in den Umliegenden Clustern befindet...

TiGü 9. Dez 2011 12:10

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Also ist ein Cluster eine logische Einheit deiner Spielwelt und müsste nur alle umliegenden 26 Cluster was senden und auch nur von denen empfangen...klingt nach einen guten Konzept! Aber wie weit "sieht" den der Spieler? Könnten nicht auch Erreignisse auftreten - weiß nicht, sowas wie Feuer auf einen Berg - was weit über 64 Voxel gehen würde und auch demensprechend visualisiert werden müsste?

TiGü 9. Dez 2011 12:14

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Ach so, wenn es nur eine logische Unterteilung ist, dann wirst du mit deinen P2P-Ansatz aber schon ganz schön laggen, oder meinste nicht?

Der Spieler 1 aus Voxel 001 sitzt meintewegen in Braunschweig und macht irgendwas was Spieler 2 aus Japan drei Voxel weiter theorhetisch sofort mitkriegen sollte, aber allein aufgrund der Signallaufzeiten wird das ganz schön hässlich.

Aphton 9. Dez 2011 12:24

AW: Eigenes 3D MMORPG mit Delphi möglich?
 
Es gibt genug Ein-Mann-Armeen, die interessante Dinge produzieren (Eskil Steenberg's Love - Tools/Editors)

Wichtig ist eben, dass man wirklich sich die Zeit nimmt und das nötige Wissen, dass du ja schon zum großen Teil dir angeeignet hast, aneignet.
Ich habe aber trotzdem das Gefühl, dass Wissen allein, nicht wirklich alles ist. Erfahrung wird auch sehr viel dazu beitragen.
Bzgl. deines Programmierstils - ist klar, dass der Programmierer selbst damit leben können muss usw. aber Klassen und das alles schöne drumherum hat auch seinen Sinn. Es sorgt dafür, dass im späteren Verlauf der Entwicklung man eben - wie schon offensichtlich - nicht den Überblick verliert und alles leichter Code-mäßig verwalten kann.
Ich bin auch mehr der Proof-Of-Concept Typ. Habe viele graphische Spielereien implementiert usw. Nur fehlt mir ganz sicher die Erfahrung dazu, ein komplettes und vorallem auffwändiges Spiel zu entwickeln (damit meine ich z.B ein MMORPG).

Auf jedenfall bin ich an deinem Projekt interessiert und werde still mitlesen =)

Wünsche dir viel Glück und Spaß


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz