| Autor |
Beitrag |
Amateur
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: So 11.09.05 00:40
hi
ich bin dabei in spieleprogrammierung einzusteigen.
nur damit das nicht falsch verstanden wird.
ich bin nicht auf der suche nach source oder tutorials.
ich will einfach nur wissen wie ne story in spielen wie half life oder so eingebaut wird.
wie man einen 3d raum und so macht hab ich schon teils gelesen. (opengl oder directx)
was ich mich frage ist wie baut man eine story in so ein spiel ein?
ich bin grad am entwickeln eines kleinen moorhuhnklons. da kann ich ja ganz einfach bilder zur laufzeit generieren da das spiel keine wirkliche story hat.
aber wie werden gegner in ego shootern geschaffen? wie schafft man es abzuspeichern wann welcher charakter auftaucht?
sowas frage ich mich schon die ganze zeit.
wird das einfach über ne klasse charakter gemacht und dann wenn ein bestimmter level erreicht is wird ein objekt vom typ charakter erschaffen oder wie macht man sowas?
kann man sowas überhaupt unter delphi realisieren? oder muss man zwingend erst ne 3d engine schreiben? denn wenn man sonst was über spieleprogrammierung hört hört man immer 3d engine programmiert und so.
wie kann man ne story einbringen? funktioniert das einfach über ganz viele variablen die bei verschiedenen werten ereignisse auslösen oder wie wird sowas gemacht?
ich hoffe meine frage is eindeutig. ich will jetzt auch keine komplette anleitung zur spieleprogrammierung oder wie man 3d räume erschafft sondern einfach nur wissen wie ne story in nem spiel verpackt wird. wie festgelegt wird wann ein charakter erscheint, wann ein dialog kommt, wann irgendein balken oder so runterstürzt etc. sowas gehört halt für mich zur story...
denn einfach nen 3d raum proggen und nen charakter reinsetzen krieg ich mit dem buch 3d programmierung für kids denk ich auch noch hin.
thx schonma für die antworten!
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 11.09.05 01:04
Die Story an einem Spiel hat weniger etwas mit der Grafik, denn mehr mit der Benutzerführung zu tun. D.h. Welche Ziele gibt es? Gibt es unterschiedliche Möglichkeiten, das Ziel zu erreichen? Lässt man dem Spieler eine Möglichkeit den Ablauf (z.B. die Levels) zu beeinflussen.
In der Stories wird die eigentliche Handlung "der Spieler tut was" versucht so mit einer Aufgabe zu verknüpfen, dass er durch unterschiedliches "Erfüllen" dieser Aufgabe Einfluss auf den Spielverlauf nimmt. Was jetzt nicht heißen soll "Spieler schlecht --> Game Over!"  , sondern eher etwas in der Art "Spieler kennt Trick A nicht, bekommt daher irgendwo Kniff B gezeigt".
Je nach dem, wie gut ein Spiel diese Möglichkeiten der Einflussnahme bietet, ist es für den Spieler interessant (auch wenn einige Egoshooter auch ohne Story auszukommen scheinen).
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
en!gma
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: So 11.09.05 01:10
hmm normalerweise ist es ja so geregelt, dass die positionen der chars usw, eigentlich das ganze script in den leveln gespeichert ist.
auch in half-life ist es ja so, dass zwischendurch gespeichert/geladen wird.
dort werden alle relevanten dinge für die story geladen.
chars neu erschaffen, bestimmte objekte gesetzt usw
|
|
Amateur 
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: So 11.09.05 01:13
ok und wie würde sowas in ein spiel implementiert? theoretisch wären es ja sehr sehr viele if abfragen.
if spieler macht trick a then kommt gegner von rechts else freund kommt von rechts und verrät trick b.
dazu kommt noch dass es ja bestimmte punkte geben muss wo dann genau diese abfrage kommt. werden diese punkte in der engine gesetzt? ich hab mir das früher immer so erklärt dass es "unsichtbare grenzen" gibt. d.h. gehe ich durch die tür, kommt der gegner, also überschreite ich die grenze.
is das in spielen wirklich so oder wie wird das gelöst?
also zu dem obigen beispiel: eine unsichtbare linie im spiel und wenn der spieler drüber läuft macht er trick a, geht er gerade aus und nicht durch die tür kommt die else anweisung...
läuft das in etwa so ab oder is das doch anders als ich mir vorstelle?
denn dann dürfte es ja nur programmier aufwand sein und das umgehn mit variablen procedures etc. und die grafik wäre das wirklich schwierige (abgesehn von der ki, das is noch nen kapitel für sich obwohls auch sehr viele if und case abfragen sein dürften)
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
LH_Freak
      
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: So 11.09.05 01:28
wenn du sowas machen willst solltest du dir eine Scriptsprache machen. Wie das genau geht hab ich keinen blassen Schimmer (  ) aber da wird dir sicher hier jemand anderes erklären können (es gibt auch noch ein paar Scripttutorials auf www.delphigl.com).
Das heißt du musst nicht für jedes kleine Ding das passiert eine if-Abfrage erstellen, sondern baust dir in Textform deine Events (also den Ablauf der Geschichte zusammen, könnte z.B. so aussehen:
Delphi-Quelltext 1: 2:
| if (MainChar.Position.X = 32.5) and (MainChar.Position.Z = 15.0) then Char[10].MoveTo(32.5,2.0,18.0,10); | ).
Damit dann in deinem Spiel der Charakter 10 zu dir kommt, musst du einen Interpreter über das Skript laufen lassen,
und jedes mal überprüfen ob ein Event eintrifft, sagt: "aha, der Held ist da und da. jetzt schick ma im den Gegner xy, der dies und dies sagt".
Wie das in der Praxis funktioniert hab ich keine Ahnung
Hoffe das hilft dir weiter
|
|
NeoInDerMATRIX
      
Beiträge: 245
Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
|
Verfasst: So 11.09.05 22:59
Hi,
also was ich hier lese ist alles nicht ganz koreckt aber auch nicht ganz falsch.
Es kommt darauf an was du genau erreichen willst. Wenn du keine lust hast eine engine zu coden, dann must du eine vorhandene engine nehmen. Dafür würden sich HL1, HL2 oder UT gut machen. Diese sind sehr leicht modifizierbar. In den eben erwähnten engine's benötigst du nur das wissen was die engine genau kann und zur verfügung stellt. Ich erläutere das mal an der HL1 engine. Diese ist Brush, Entitys und Trigger orientiert. Soll heissen, das alles was optisch ist wird über brushes erzeugt. Das sind wände, türen und so weiter. Entitys sind dann dinge die aktionen ausführen. Und trigger sind sowas wie schalter. Mit diesen drei Objekt gruppen kannst du eine Story ganz ohne script oder coden machen, basierend auf der orginal engine. OK.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| +----------------------------------------+ | D | | D | | +--------+<tür-a>+--------+ | | | | | | (C) | | | | | | | | +---+ +-----+ | +--(B)-+ | | | (F) | | | | +---------------+------+ | | | E | | | | E | | | +-----------------------------+ | | A | | | +---+ +------+ |
Nehmen wir an das hier ist unsere kleine aber feine MAP. Der Player startet bei punkt A.
Ok definieren wir den anfangs status:
(D) ist ein Trigger => verbunden mit Monster (C)
(C) ist ein Monster, sichtbar aber nicht aktiv
(B) ist ein Button => verbunden mit der (tür-a)
(F) ist ein Monster, nicht sichtbar, nicht aktiv
(E) ist ein trigger => verbunden mit Monster (F) und einer Engine Function leicht verzögert
OK, das ist nun unser anfangs status.
Unser Player läuft nun los und überschreitet dabei den Trigger (D). Da dieser mit dem Monster (C) verbunden ist, wird dieses nun aktiviert. Was nun natürlich nach unseren Player im Level sucht. Dies dauert allerdings seine Zeit da das Monster uns ja noch nicht sehen kann. Der Player sieht nun unsere (tür-a) und versucht diese zu durchschreiten. Mist. Verspert. Also was nun, wir müssen nun den schalter finden mit dem wir diese öffnen können. Also gehen wir den gann weiter. Nun kommen wir an die ecke, das monster sieht uns und greift uns natürlich an. Wir machen es platt. Und freuen uns das wir dafür mit einen Schalter belohnt werden. Diesen drücken wir natürlich sogleich. Und hören natürlich das irgend wo eine tür sich öffnet. Wir hoffen das es unsere ist. Und gehe zu ihr. Jep, es ist unsere. Nun gehen wir in den neuen raum. Dort befindet sich unser Monster (F) dieses ist nicht sichtbar. Also wissen wir als Player davon nichts, und gehen weiter. Jetzt gehen wir natürlich den einzigen weg, der uns zur verfügung steht. Und überschreiten damit den Trigger (E). Trigger (E) macht nun das Monster (F) sichtbar und aktiviert es. Was uns sieht und auf uns los rennt. Dies hören wir. Leicht verzögert wird nun das nächste level geladen oder das level beendet. durch den Engine funktion!
Warum wir die level exit function leicht verzögert aufgerufen haben sollte klar sein. Wenn nicht! Es ist nur dafür da dem Player noch eine schreck mit auf dem weg ins nächste level mit zu geben. Denn das Monster macht sich bemerkbar und rennt ja auf uns zu.
So kann man mit wenig aufwand eine story in ein 3D-Game bringen, ohne script sprache etc. Obwohl die heutigen engines einiges mehr möglich machen. Aber dazu gibt es genügend Foren die das genauer erklären.
Das laden und speichern ist so auch recht simpel. denn es muss nur der status der trigger etc. gespeichert werden. Fertig. Und wenn man die story richtig auf die engine anpast ist serh viel möglich. Das zeigen die vielen MAP's für HL1 und HL2 sehr deutlich. Dafür muss man nicht gleich eine neue engine aus den boden stampfen, denn das ist sehr sehr aufwendig. Und da spreche ich aus erfahrung.
Ich hoffe ich konnte ein wenig licht ins dunkel bringen.
Cu
Neo
|
|
Amateur 
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: Mo 12.09.05 17:26
ok alles klar .das mit den triggern hatte ich mir auch schon so in etwa gedacht... nun gut dann werd ich ma seh was das 3d programmierungsbuch noch so bringt(falls ich ma zeit hab weiter damit zu üben) und dann ma schaun in wie weit man son spielchen mit nen bisschen story auf die beine stellen kann. denn trigger sind ja wenn mans so will nur booleans die mit was verknüpft sind. natürlich durch die engine viel einfacher. wird also so wie ne ide die engine. man nimmt nen trigger, verknüpft ihn und packt ihn in seine map. den status speichert man und proggt noch die reaktion von dem monster, die ja auch bei den meisten monstern ungefähr gleich sein sollte.
nur noch eine frage zu der geschichte: wie zufallsbasiert sind spiele heutzutage? denn wenn ich mir das so überlege sind die ganzen monstersachen alle schon vorher festgelegt weshalb son monster immer gleich läuft. oder sind die wege die das monster geht zufällig. d.h. in obigem beispiel: bestimmt ein zufallsgenerator ob das monster hinter der ecke hervor kommt oder eher nicht? denn is ja irgendwie net schlau dass das monster da wartet bis man kommt auch wenns in den spielen heute meistens so is.
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
Speedmaster
      
Beiträge: 79
Windows XP
C#, VS2005 / VS2008
|
Verfasst: Mo 12.09.05 17:56
P.s.: Wenn du wirklich ins Spielegeschäft einsteigen willst, empfehle ich dir qantm.de !!!
|
|
NeoInDerMATRIX
      
Beiträge: 245
Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
|
Verfasst: Mo 12.09.05 20:38
Hi,
also die AI der Monster in den Spielen ist mitlerweile so das sie auf das reagiert was sie sieht oder hört. Und zudem werden den meisten Monstern noch eine gewisse anzahl von spielräumen eigeräumt. Soll heissen: Das monster ist aktiv, also wird geprüft was das monster sieht und hört. Wenn das Monster nun etwas sieht oder hört wird nun eine bestimmte vorgewählte vorgehensweise ausgeführt. Beispiel: Ein Monster bekommt eineige Vorgehensweisen mitgeliefert. (KI-Scripte) z.B.: MonterA_Agressiv_Suchen, MonsterA_Passiv_Dum Wobei das erste dann etwas mehr nach deiner richtung währe, weil es sobald es aktiviert wurde, los läfut und den player sucht. Der zweite dann ehrer nicht. Diese Scripts sind entweder durch die engine vorgegeben oder können evtl. sogar geändert werden.
Cu
Neo
P.S.: Fasl du noch mehr infos brauchst melde dich halt mal bei mir über neo@omorphia.de.
|
|
|