Gamestudio Links
Zorro Links
Newest Posts
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (7th_zorro), 1,390 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Hanky27, firatv, wandaluciaia, Mega_Rod, EternallyCurious
19051 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 2 of 3 1 2 3
Re: Multiplayer [Re: Michael_Schwarz] #22733
02/04/04 08:13
02/04/04 08:13
Joined: Aug 2003
Posts: 425
DocJoe Offline
Senior Member
DocJoe  Offline
Senior Member

Joined: Aug 2003
Posts: 425
Ich hatte vor über einem Jahr einmal einen kleinen MP-Workshop in Anlehnung an Alain's MP Workshops zu schreiben begonnen. Ich hab den Workshop eigentlich mehr für mich geschrieben, um mehr Klarheit bezüglich MP Programmierung zu erlangen. In der Zwischenzeit sind ein paar Funktionen/featues hinzugefügt worden etc., sodass vieles nicht mehr aktuell ist. Vielleicht hilft das Geschriebene trotzdem jemadem. Ich wollte den Workshop inkl. Testlevel beenden, aus Mangel an User Intersse hab ich's dann aber sein lassen.

Multiplayer Workshop 2.5

Ich hatte auch ein Demo geladen (bitte keine übermässige Kritiken, das Projekt ist schweine alt und ich bin diesbezüglich nicht mehr so auf dem laufenden, sorry).

Demo Version 1

Demo Version 2

Die MP Programmierung ist affengeil (find ich jedenfalls), benötigt aber eine gewisse Einarbeitung. Ich empfand die Einarbeitung als komplettes Umdenken. Nach der Niederschrift des obengenannten Workshops hatte ich die grundlegende Denkweise so einigermassen kapiert. In der Zwischenzeit wurde A5/A6 von DirectX Version 7 auf 8 geupdatet, was ebenfalls ein paar Änderungen mit sich zog. Um einen MP zu erschaffen, wie es viele möchten, bedarf es aber noch mehr, nämlich einiger C++ Funktionen mit der SDK. Ausserdem kommt man nicht umhin, sich weiter in DPlay zu vertiefen etc, was viel Studium von Fach-Literatur bedarf. Hmmm, ich würd mal sagen, so zwischen 40 bis 200 Seiten, je nach geballter Ladung inkl. Hardcore-Code und das meiste in Englisch.

Last edited by DocJoe; 02/04/04 08:41.

Don't take the cake to the party.
Re: Multiplayer [Re: DocJoe] #22734
02/04/04 08:49
02/04/04 08:49
Joined: Aug 2003
Posts: 425
DocJoe Offline
Senior Member
DocJoe  Offline
Senior Member

Joined: Aug 2003
Posts: 425
Hier noch ein Bild vom Mai letzten Jahres. Dies zeigt einen Ausschnitt aus einem Lobby-Entwurf.




Don't take the cake to the party.
Re: Multiplayer [Re: DocJoe] #22735
02/04/04 16:27
02/04/04 16:27
Joined: Aug 2003
Posts: 7,439
Red Dwarf
Michael_Schwarz Offline OP
Senior Expert
Michael_Schwarz  Offline OP
Senior Expert

Joined: Aug 2003
Posts: 7,439
Red Dwarf
Jo danke. Das mit den VAriablen hab ich auch scchon geklärt. Aber wenn es auf dem Server regnet( function let_it_rain() ). Regnet es auf den clients nicht. Irgendwie verstehe ich diese ganze "send" sCh**sse nicht. DAs mir dass villeicht mal ganz kurz und gebündelt erklären könnte. Also ich meine es regnet auf den clients schon aber erst nach langer verzögerung.

cya
Mike


"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
Re: Multiplayer [Re: Michael_Schwarz] #22736
02/04/04 17:11
02/04/04 17:11
Joined: Aug 2003
Posts: 133
Iblis Offline
Member
Iblis  Offline
Member

Joined: Aug 2003
Posts: 133
Wenn es auf den Clients auch regnet funktioniert es doch wie beabsichtigt oder nicht? Das eine Verzögerung auftritt ist bei MP ja normal. Wenn sie zu groß ist sollte man jedoch nochmal nachsehen ob was am eigenen Code nicht stimmt. (Regen, und somit Partikeleffekte würde ich z.B. lokal darstellen, und nur per variable den Clients mitteilen ob sie Regen ein-/ oder ausschalten sollen). Am besten startet man auch mal einen SV und einen CL sepperat auf ein und dem selben PC. Da dürfte keine wirkliche Verzögerung auftreten, insofern kann man dann recht gut testen ob sich alles so verhält wie man es beabsichtigt.

Zu den Send_... Befehlen: Die Welt existiert auf dem Server und muss an alle Clients gesendet werden. Der Acknex-MP Modus sorgt dafür, dass alle Engine relevanten Attribute (also keine Skills) einer Entity je nachdem welche NOSEND-Flags du gesetzt hast regelmäßig gesendet werden oder nicht. Um Bandbreite zu sparen sollte man so viele NOSENDs wie möglich benutzen (wenn es möglich ist). Alles andere im Spiel (Varibalen, Strings, Skills etc.pp.) werden NICHT austomatisch gesendet. Hier brauchst du die send_... Befehle. Ohne diese würden Veränderungen die der Client vornimmt (z.B. drücken einer Taste) niemals beim Server ankommen. Dieser würde sie also auch nicht verarbeiten und im MP würde nichts passieren. Andersrum würden auch SKILL/Variablen-Veränderungen die vom Server ausgeführt werden niemals beim Client ankommen. send_... Befehle müssen also sowohl auf Client- als auch auf Server-Seite ausgeführt werden. Je nachdem ob und welche spielrelevante Veränderung auftritt.

Für alles was aber sowieso nur auf dem Client stattfinden soll braucht man diese send_.. Funktionen natürlich nicht. Hier sind eher ent_createlocal, proc_local und proc_client von Interesse...

Re: Multiplayer [Re: Iblis] #22737
02/05/04 08:37
02/05/04 08:37
Joined: Aug 2003
Posts: 425
DocJoe Offline
Senior Member
DocJoe  Offline
Senior Member

Joined: Aug 2003
Posts: 425
Ja, Iblis erklärt das super gut!

Vielleicht noch ein paar prinzipielle und nützliche Ergänzungen.



Die Abbildung oben veranschaulicht das Konzept der Server/Client-Topographie, die in A6 implementiert ist.

Das Server/Client Konzept besteht aus individuellen Clients (=Spieler, hier vier Stück), die mit dem Server verbunden sind (falls am Server ebenfalls jemand spielt, haben wir dann im Ganzen 5 Spieler). Das Ganze muss nun so gemanagt werden, dass einzig und allein das Spiel auf dem Server für das eigentliche Spiel relevant ist. Man muss das Spiel so managen, dass die Clients das Serverspiel möglichst aktuell zu Gesicht bekommen.

Wenn ein Client seinen Player vorwärts laufen lassen möchte, muss er dies mit einer SEND_ Funtion dem Server mitteilen ("Client 1 hat Pfeil nach oben Taste gedrückt und möchte somit vorwärts laufen"). Sobald diese Mitteilung beim Server eintrifft, lässt dieser die Aktion ablaufen und meldet das Vorhaben allen andern Spielen (Clients), inklusive dem Spieler, der die Aktion wünscht (im MP gibt es also immer eine kleine Verzögerung). Damit die Leitung zwischen den PSs nicht übermässig belastet werden, muss man sich ein Konzept erarbeiten, damit nicht alle Daten x Mal pro Sekunde (bei jedem Frame) durch den Äther gesendet werden müssen.

Nehmen wir an, unser Player läuft vorwärts die Treppe hoch. Jetzt müssen wir nicht ständig die Leitungen zumüllen, indem wir währen jedem Frame allen Clients erzählen, dass sich der Player zu diesem Zeitpunkt am Punkt xyz befindet, mit dem linken Auge zwinkert und den Fuss mit dem 3. Zehe auf die Textur "wood" setzt. Dies ist absolut irrelevant, denn wenn wir allen Clients mitgeteilt haben, dass der Player von Client 1 vom Punkt 6/5/5 in Richtung 45° zu diesem und diesem Zeitpunkt vorwärts laufen soll, dann macht er dies auf allen Clients und er macht dies, bis auf dem Server etwas wichtiges passiert (zum Beispiel, dass der Client jetzt rückwärts laufen möchte oder dass die Figur von einem anderen Client abgeschossen wurde).

Natürlich kann es zu kleinen Unstimmigkeiten kommen. So kann es sein, dass wir einen Feind abschiessen wollen, den wir exakt im Visir haben, und wir teilen dies dem Server mit. Falls nun aber der Feind auf dem Server in der Zwischenzeit einen Meter weitergelaufen ist, so hat unser Player den Feind effektiv verfehlt (denn nur das Spiel auf dem Server ist relevant!!). In diesem Fall lebt der Feind putzmunter weiter und wir ärgern uns. Handkehrum dürfen problemlos ein paar irrelevante Effekte auf den Clients abgespielt werden, die auf allen Clients und auf dem Server nicht absolut gleich laufen müssen. So könnte es egal sein, dass auf einem Client 2 Sterne am Himmel zu sehen sind und auf einem anderen Client 7 Sterne. Dies zu managen, ist die Kunst des MP Spiels. Mit den beiden Möglichkeiten, (1) ein Spiel mehrmals auf einem PC starten und (2) Effekte/Entities nur lokal auf einem Client oder Server erschaffen zu lassen, hat Conitec das MP feature gewaltig vereinfacht.

Für die MP Spiel Programmierung und die richtige Kommunikation zwischen den PC müssen wir auf folgende 5 Programmier Funktionen ein spezielles Auge werfen:

1. LEVEL_LOAD
2. Die ENT_CREATE()/ENT_CREATELOCAL() Funktionen
3. Die verschiedenen SEND_ Funktionen (SEND_SKILL, SEND_VAR, SEND_STRING usw.)
4. Die von uns definierte ON_SERVER Funktion
5. Die von uns definierte ON_CLIENT Funktion

Bei einer LEVEL_LOAD Funktion auf dem Client werden sämtliche Entities vom Server auf den Client geupdated (macht A6 automatisch).

ENT_CREATE und ENT_CREATELOCAL() Funtionen werden von A6 gemanagt. Mit ENT_CREATE erschaffene Entities (und natürlich auch im Level gezeichnete Entities) werden auf alle Clients übertragen - lokal erschaffene Entities werden nicht übertragen resp. geupdatet.

Die SEND_SKILL Anweisungen werden automatisch auf dem Server und auf dem Client ausgeführt. Die SEND_VAR und SEND_STRING Anweisungen müssen mit den ON_SERVER und ON_CLIENT definierten Funktionen separat abgearbeitet verarbeitet werden (von uns programmiert werden).

Es ist alles eine Frage des Verständnissen und des richtigen Gamemanagements. Im MP Modus wird alles viel schwieriger und bedarf einer übersichtlichen Planung und Mehrinvestition an Zeit vor dem Drauflosprogrammieren als bei der Programmierung eines Einzelplatzspiels. Wenn man das Prinzip einmal richtig kapiert, wird's richtig geil!! Wer das Ganze nicht in den Schädel rein kriegt, soll nicht aufgeben und ein paar Tage darüber schlafen - dann fällt der Cent halt im Schlaf!


Don't take the cake to the party.
Re: Multiplayer [Re: DocJoe] #22738
02/05/04 23:55
02/05/04 23:55
Joined: Aug 2003
Posts: 133
Iblis Offline
Member
Iblis  Offline
Member

Joined: Aug 2003
Posts: 133
In Antwort auf:

Für die MP Spiel Programmierung und die richtige Kommunikation zwischen den PC müssen wir auf folgende 5 Programmier Funktionen ein spezielles Auge werfen:

1. LEVEL_LOAD
2. Die ENT_CREATE()/ENT_CREATELOCAL() Funktionen
3. Die verschiedenen SEND_ Funktionen (SEND_SKILL, SEND_VAR, SEND_STRING usw.)
4. Die von uns definierte ON_SERVER Funktion
5. Die von uns definierte ON_CLIENT Funktion



Wie schon erwähnt die neuen proc_local und proc_client nicht zu vergessen, mit denen man den Entities auf dem Client zusätzliche Funktionen zuweisen kann. Für mich mittlerweile die 2 wichtigsten Funktionen überhaupt!

Re: Multiplayer [Re: Iblis] #22739
02/06/04 02:17
02/06/04 02:17
Joined: Oct 2002
Posts: 806
Zapan@work Offline
User
Zapan@work  Offline
User

Joined: Oct 2002
Posts: 806
Wobei man aufpassen sollte, diese fuktionen so wenig wie irgend moeglich zu benutzen, da sie "sehr" langsam sind...

Zeigt zumindest unsere erfahrung.

Re: Multiplayer [Re: Zapan@work] #22740
02/06/04 03:19
02/06/04 03:19
Joined: Jul 2002
Posts: 185
T
TheZero Offline
Member
TheZero  Offline
Member
T

Joined: Jul 2002
Posts: 185
Im Handbuch steht genau das Gegenteil:
"Diese Anweisungen starten eine Client-seitige Function für die angebene Entity.
Proc_local startet die Function auf allen Clients.
Proc_client startet die Function nur auf dem Client, auf dem die Entity oder der Erzeuger der Entity erstellt wurde.
Proc_local oder proc_client kann dazu verwendet werden, lokale Mausevents abzufange, lokale Sounds oder Partikeleffekte zu starten, oder für lokale Entity Animationen. Dadurch kann bei geschickter Programmierung sehr viel Netzwerkbandbreite gespart werden. "

Das Tutorial hab ich zwar nur überflogen, aber sieht echt super aus ,
Wenn ich endlich Zeit finde, werde ich es durcharbeiten!

Re: Multiplayer [Re: TheZero] #22741
02/06/04 08:01
02/06/04 08:01
Joined: Oct 2002
Posts: 806
Zapan@work Offline
User
Zapan@work  Offline
User

Joined: Oct 2002
Posts: 806
Ich kann nur aus erfahrung sprechen. Probiers selber aus

Re: Multiplayer [Re: Zapan@work] #22742
02/06/04 08:12
02/06/04 08:12
Joined: Aug 2003
Posts: 133
Iblis Offline
Member
Iblis  Offline
Member

Joined: Aug 2003
Posts: 133
Was genau meinst du mit langsam Zapan? Das Aufrufen der Funktionen? Da ich die Funktion nicht allzu oft bzw. regelmäßig aufrufen muss ist das nicht weiter schlimm. Oder meinst du mit langsam etwas anderes?

Page 2 of 3 1 2 3

Moderated by  HeelX, Spirit 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1