Descentforum.DE Forum Index Descentforum.DE
Search | FAQ | Memberlist | Usergroups | Newsfeed Newsfeed  Register
Profile | Log in to check your private messages | Log in 
Chat | D3-Tactics | Downloads | Map | Links | Serverlist | Teamspeak 

[SDK] Spieler in anderen Raum setzen

 
Post new topic   Reply to topic    Descentforum.DE Forum Index -> Level-, Design und Entwicklungs - Forum
View previous topic :: View next topic  
Author Message
D.Cent
Forum-Nutzer


Joined: 05 Mar 2006
Posts: 506
Location: Stuttgart

PostPosted: 04.06.2007, 17:04    Post subject: [SDK] Spieler in anderen Raum setzen Reply with quote

Wir entwickeln gerade einen Mod und haben eine Frage:
In dem Mod soll ein Spieler unter bestimmten Bedingungen in seinen eigenen Goalroom zurückgesetzt werden. Wie wir diesen Goalroom erkennen, wissen wir schon, aber wir haben keine Ahnung, wie wir den Spieler in einen anderen Raum setzen. Die Variable roomnum zu verändern bringt leider nur Fehler.

Hat jemand eine Idee?

Greetz, Lo und Cent
Back to top
View user's profile Send private message
Dark
Forum-Nutzer


Joined: 15 Nov 2001
Posts: 1244
Location: Berlin

PostPosted: 04.06.2007, 19:03    Post subject: Reply with quote

Ist ja eigentlich nichts anderes als nen spieler zu teleportieren - so wie ich es auch in anderen multileveln schon gesehen habe.
Anleitung dazu gibts - glaube ich - bei Fischlein.

Beim teleportieren wird der spieler allerdings nicht zu einem raum teleportiert, sondern zu einem unsichtbaren objekt.
Also ein Invisible in dem gewünschten raum positionieren und nen eindeutigen namen vergeben.
Beim eintreten der gewünschten bedingung dann den spieler zu diesem objekt teleportieren.

So oder so ähnlich sollte es funktionieren. Denkt da mal ein bischen drauf herum.

PS:
Das Invisible muss man übrigends noch ghosten damit man im spiel an dieser stelle nicht einen
rätselhaften fleck sieht.

_________________
Dark

wo alle das selbe denken, wird nicht viel gedacht

Es kommt meistens anders wenn man denkt!
Back to top
View user's profile Send private message
Fischlein
Co-Admin


Joined: 06 Feb 2001
Posts: 933
Location: Piesau

PostPosted: 04.06.2007, 19:23    Post subject: Reply with quote

Ja genau und hier gleich der Link dazu Smilie

Teleporter

Ist schon cool was man alles damit machen kann Smilie

Fischlein
Back to top
View user's profile Send private message
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 04.06.2007, 22:40    Post subject: Reply with quote

"DLLObjSetPos" evtl.? (gamedll_header.h)
Back to top
View user's profile Send private message
D.Cent
Forum-Nutzer


Joined: 05 Mar 2006
Posts: 506
Location: Stuttgart

PostPosted: 05.06.2007, 14:24    Post subject: Reply with quote

Danke für die schnellen Antworten zwinkern

Leider kann man mit Linux weder D3Edit noch den Dallas-Script-Editor benutzen. Wisst ihr zufällig, wie die benötigte Funktion heißt?

@Floyd: Hatten wir auch schon versucht, aber das Problem ist leider das gleiche, als wenn man die room-num des Spielers ändert: ein verschwommener Bildschirm.

Die Definition ist
typedef void (*ObjSetPos_fp)(object *obj,vector *pos,int roomnum,matrix *orient,bool f_update_attached_children);

Leider weiß ich weder, woher ich die Daten für pos nehmen soll, noch welche Daten orient braucht (vector braucht 3 Daten für 3 Dimensionen und matrix 3 Vektoren...). Ich habe einfach mal überall 0 eingesetzt, was aber zum oben genannten Resultat führt. Wenn man für matrix oder vector NULL übergibt kommt ein Speicherzugriffsfehler... Traurig
Back to top
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 05.06.2007, 15:22    Post subject: Reply with quote

D.Cent wrote:
Die Definition ist
typedef void (*ObjSetPos_fp)(object *obj,vector *pos,int roomnum,matrix *orient,bool f_update_attached_children);

Leider weiß ich weder, woher ich die Daten für pos nehmen soll, noch welche Daten orient braucht (vector braucht 3 Daten für 3 Dimensionen und matrix 3 Vektoren...). Ich habe einfach mal überall 0 eingesetzt, was aber zum oben genannten Resultat führt. Wenn man für matrix oder vector NULL übergibt kommt ein Speicherzugriffsfehler... :(


pos und orient gibt dir halt die absolute Position und die absolute Orientierung innerhalb des Levels an.
Am einfachsten ist es, wie Dark schon sagt, im Leveleditor an die gewünschte Stelle ein Dummy-Objekt hinzusetzen, und dann im Skript dessen Position, Orientierung, und Raumnummer zu kopieren.

Ansonsten kannst Du auch versuchen, die Geometrie (also Größe und Form) des Raumes (die Raumnummer kennst Du ja) auszulesen, um dann eine zufällige Position innerhalb der Mitte zu finden (Entropy positioniert so die Viren in den Laboren)
Jetzt weiß ich aber nicht, ob Descent nur konvexe Räume haben darf. Falls es auch nicht-konvexe Räume gibt, ist die Raummitte nicht unbedingt Teil des Raumes selbst.
Als Orientierungsmatrix kannst Du in jedem Fall die Einheitsmatrix benutzen, dann bekommst Du halt eine Orientierung entlang der Koordinatenachsen.
Back to top
View user's profile Send private message Send e-mail
D.Cent
Forum-Nutzer


Joined: 05 Mar 2006
Posts: 506
Location: Stuttgart

PostPosted: 05.06.2007, 16:06    Post subject: Reply with quote

Ah, wir habens dann doch gepackt:

Code:

         for(int i=0; i<RoomCount; i++)
          if(dRooms[i].flags & RF_GOAL2)
           {
            vector player_pos = { 0,0,0 };
            DLLComputeRoomCenter(&player_pos,&dRooms[i]);
            DLLObjSetPos(obj,&player_pos,i, NULL, true);
           }
         
Back to top
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 05.06.2007, 16:12    Post subject: Reply with quote

Nach DLLObjSetPos() willst Du sicherlich ein return oder break machen, ansonsten springt dir der Spieler in jeden Raum mit RF_GOAL2 nacheinander.
Back to top
View user's profile Send private message Send e-mail
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 05.06.2007, 18:25    Post subject: Reply with quote

die orientmatrix würde ich evtl. nicht null setzen bzw. willst du ja auch dass der spieler in eine bestimmte richtung schaut. wenn man müll in die matrix schreibt, werden objekte verzerrt dargestellt. wenn die orientierungsmatrix für die kamera müll enthält, kann ich mir gut vorstellen, dass alles verzerrt dargestellt wird.
zum erstellen einer orientierungsmatrix gibt es diverse funktionen. man bestimmt den vektor, wo die richtung "vorwärts" hinzeigen soll. aus diesem vektor kann man dann eine matrix generieren lassen.

das sieht ungefähr so aus:
Code:
DLLvm_VectorToMatrix(&orient_matrix, NULL, vorwaerts_vektor, NULL);
Back to top
View user's profile Send private message
King Lo
Forum-Nutzer


Joined: 14 Mar 2006
Posts: 320
Location: Stuttgart, BW

PostPosted: 05.06.2007, 19:26    Post subject: Reply with quote

Danke Floyd, wir werden es mal ausprobieren (aber eigtl. können wir die Richtung nicht mal genau angeben, da wir den Level ja nicht kennen...)

Munk wrote:
Nach DLLObjSetPos() willst Du sicherlich ein return oder break machen, ansonsten springt dir der Spieler in jeden Raum mit RF_GOAL2 nacheinander.


Das ist ein Problem... Ich dachte es gibt immer nur EINEN Goalroom pro Team? Kann es wirklich Level mit mehreren geben? o_O blaues auge
Back to top
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 05.06.2007, 20:03    Post subject: Reply with quote

Bleib auf der sicheren Seite und mach sowenig Annahmen wie möglich über dein Umfeld.
Selbst wenn es nur einen Raum mit dem Flag gibt, beschleunigt ein break dein Programm, weil es dann nicht in den anderen Räumen weitersucht.
Back to top
View user's profile Send private message Send e-mail
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 05.06.2007, 20:09    Post subject: Reply with quote

King Lo wrote:
(aber eigtl. können wir die Richtung nicht mal genau angeben, da wir den Level ja nicht kennen...)

dann übergebt die alte orient-matrix, oder erstellt eine zufällige.
Back to top
View user's profile Send private message
King Lo
Forum-Nutzer


Joined: 14 Mar 2006
Posts: 320
Location: Stuttgart, BW

PostPosted: 05.06.2007, 20:14    Post subject: Reply with quote

NULL reicht auch Smilie
Back to top
View user's profile Send private message
King Lo
Forum-Nutzer


Joined: 14 Mar 2006
Posts: 320
Location: Stuttgart, BW

PostPosted: 21.06.2007, 17:51    Post subject: Reply with quote

Eine Frage noch: Warum wird für die Orientierung des Objekts eine Matrix genommen? Würde ein Vektor nicht auch reichen? Frage
Back to top
View user's profile Send private message
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 21.06.2007, 17:53    Post subject: Reply with quote

einen vektor kannst du noch um seine eigene achse drehen. allerdings würden zwei vektoren genügen.
Back to top
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 21.06.2007, 19:26    Post subject: Reply with quote

Eigentlich reichen auch 3 Winkel.
Back to top
View user's profile Send private message Send e-mail
VEX-Eagle
Falschparker


Joined: 04 Feb 2003
Posts: 807
Location: Stelle (Hamburg)

PostPosted: 21.06.2007, 19:56    Post subject: Reply with quote

in der Matrix sind die X-, Y- und Z-Achse des Objekts gespeichert
Meiner Meinung nach die nützlichste Variante
Back to top
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 21.06.2007, 21:35    Post subject: Reply with quote

VEX-Eagle wrote:
in der Matrix sind die X-, Y- und Z-Achse des Objekts gespeichert
Meiner Meinung nach die nützlichste Variante


Ja, so werden Drehmatrizen im allgemeinen beschrieben.
Weil sich die "Länge" der drei Achsen bei ner Drehung nicht ändert, und paarweise alle 3 Winkel zwischen den Achsen auch nicht, läßt sich die Matrix (hat ja 9 Komponenten) auf 3 unabhängige Komponenten reduzieren.

Diese drei übrigen Komponenten kann man zu nem Vektor zusammenfassen, der dann die Drehachse vorgibt. Die Länge des Vektors ist dann der Drehwinkel um diese Achse.

Man kann für die drei übrigen Komponenten aber auch drei Winkel angeben, die jeweils die Drehung um die z/y/z-Achse beschreibt.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    Descentforum.DE Forum Index -> Level-, Design und Entwicklungs - Forum All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You can attach files in this forum
You can download files in this forum
PayPal


Descent is a trademark of Interplay Productions.
Descent, Descent II are © Parallax Software Corporation.
Descent III is © Outrage Entertainment.
Descentforum.DE and Descentforum.NET is © by Martin "Do_Checkor" Timmermann.
Powered by phpBB © 2001-2008 phpBB Group