Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.04.2011, 12:07

Auslöser in Map-Dateien einbauen

Hallo zusammen,

ich habe mich in der Vergangenheit viel mit dem Mappen und Modden rund um WC3 und der Source Engine beschäftigt.
Aufgefallen sind mir bei beiden die vielen Möglichkeiten die man hat, Spielereignisse direkt in der Map zu erstellen.
Meine Frage ist nun wie man soetwas umsetzen könnte.
Könnte man soetwas direkt mit lua lösen?
Wäre etwas wie "AddEvent(Position, Kill())" möglich/sinnvoll?
Wie würde man die Events im Programm abfragen?
Gibt es evtl. Ressourcen darüber wie Blizzard und Valve diese Probleme angegangen sind?

Grüße

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

20.04.2011, 12:17

Naja du hast ja normal irgendeine Art von Trigger/Auslöser in deinem Code. Sagen wir mal du hast die Klasse Trigger. Davon gibt es jetzt mehrere verschiedene. Zum Beispiel so einen Killtrigger. Von dem Trigger platzierst du mit deinem Mapeditor einfach ein Objekt auf deiner Map. Ist ja dann in etwa wie bei WC3 oder nicht? Im Spiel wird das Objekt einfach erzeugt, wie jedes andere Objekt im Spiel auch. Wenn du die Startposition für einen Spieler setzt machst du ja in etwa das gleiche. Und das was passieren soll, wenn der Trigger ausgelöst wird, kannst du dann natürlich immer noch in Lua umsetzen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

20.04.2011, 16:47

Hallo, ich nutze für spezifische Trigger in Spielen immer einfach die Kollisionsabfrage / Physik im Spiel. Trigger sind somit einfach CollisonSkins (Box, Sphere, etc.), die keinen entsprechenden Gegenpart im Grafikteil haben, also unsichtbar sind (anders als Objekte im Spiel). Somit brauchst du für Trigger nichts anderes als ein beliebiges Kollisionssystem das dann diese Events produziert, falls Kollisionen auftreten.

Für die meisten Arten reichen solche Trigger, alles andere (z.B. Einheit stirbt) würde ich eher als Event bezeichnen, dort gibt es bei meinen Projekten immer einen kleinen Unterschied. Denn Events können überall auftreten (vom Netzwerk, Eingabe, Physik, etc.). Diese Events kannst du dann (wie auch Trigger) in Lua z.B. verarbeiten. Allerdings ist es allein Dir überlassen ob du hier nochmal einen semantischen Unterschied definierst oder nicht.

In dem Buch Game Coding Compete (verfügbar bei Amazon) findet du einiges über Event-basierte Systeme und Lua

@Schrosch: Walter Moers verbindet ;o)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »koschka« (20.04.2011, 18:18)


4

20.04.2011, 18:31

Erst einmal vielen Dank für die Antworten!
So habe ich mir das ganze schon gedacht. Ich werde das mal versuchen umzusetzen, danke!
Noch eine weitere Frage,
ist es eher eine gute oder eher eine schlechte Lösung seine Levels als einzelne .dll zuerstellen um dann jeweils vorher durchdachte Funktionen a la "Load" & "Update" etc. zu rufen?
( Es sei gesagt das ich eher ein Anfänger in Sachen .dll's bin und ich mich bisher nur kurz in das Thema eingelesen habe, daher kann es sein, dass das hier totaler Blödsinn ist :P )

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

20.04.2011, 18:43

DLLs sind binäre Code-Dateien, die Code dynamisch zur Laufzeit nachladen können sollen und nicht für reine Datenhaltung konzipiert sind. Das wäre daher eher keine so gute Idee, speziell weil Du den Speicher-Verbrauch nicht mehr los wirst. Geladen is geladen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

21.04.2011, 00:23

Was genau meinst Du mit reine Datenhaltung?
Ich würde das eher so gestalten, dass die Init funktion dann gewisse Initialisierungen für bestimmte map parameter und die Updatefunktion dann bestimmtes Verhalten dieser.
Evtl. dann sogar etwas wie CheckWin usw.
Ich weiß, dass die Mods für Spiele von Valves Source Engine auch komplett .dll basiert sind.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

21.04.2011, 00:26

Hallo, ich nutze für spezifische Trigger in Spielen immer einfach die Kollisionsabfrage / Physik im Spiel. Trigger sind somit einfach CollisonSkins (Box, Sphere, etc.), die keinen entsprechenden Gegenpart im Grafikteil haben, also unsichtbar sind (anders als Objekte im Spiel). Somit brauchst du für Trigger nichts anderes als ein beliebiges Kollisionssystem das dann diese Events produziert, falls Kollisionen auftreten.
Schon klar. Aber für die Kollision muss von nem Trigger ja irgendwie ne Position und ein Radius oä gespeichert werden. Das passier ja normal in irgendeiner art von "Objekt". Das meinte ich damit;) Wie du das dann genau ausbaust ist ja relativ egal.
Walter Moers verbindet ;o)
Das will ich wohl meinen;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

21.04.2011, 00:28

Es ist ein nicht das gleiche wenn du Mods und somit normal auch Spiellogik in einer DLL hast oder du Leveldaten darin transportierst. Ein Level hat normalerweise keine direkte Logik die es implementiert. Du hast ja normalerweise nur Daten. Zum Beispiel Spawnpunkte oder Geometrie der Map etc. Dies sind reine Daten und sollten so nicht in eine DLL. Guck nochmal was BlueCobold geschrieben hat.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

9

21.04.2011, 00:40

Und komplexeres Verhalten von NPC's oder der Umgebung wird dann innerhalb der Mapdatei "gescripted"? Ich stelle mir das alles sehr umfangreich innerhalb einer Datei vor, und "hardcoded" eher schlechten Stil :P

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

21.04.2011, 07:05

Hardcoded wäre in einer DLL, da eine DLL nicht geändert werden kann, sobald sie einmal kompiliert wurde. Scripts in einer Map-Datei sind genau das Gegenteil und genau das, was vernünftige Spiele heutzutage machen. Das hast Du sogar selbst in Deinem ersten Post geschrieben: WC3 bindet alle Scripte, Ereignisse und Trigger in die Map-Datei ein, nicht in eine DLL. Zum Thema DLL wäre es gut, wenn Du Dich mal beliest, WAS eine DLL überhaupt ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige