if-de :: Forum Foren-Übersicht
Autor Nachricht
<  Eine Frage der Theorie
Basti
BeitragVerfasst am: Di, 13 März 2007 - 23:22  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Hallo zusammen!

Wird wohl langsam Zeit, dass hier mal entstaubt wird.
Ich beschäftige mich seit längerem mit dem Gedanken ein Rollenspiel zu entwickeln und habe mich nach kurzem Abwägen für Inform 7 entschieden, auch wenn es für solche Experimente wahrscheinlich nicht die beste Basis bietet. Allerdings hören die Ambitionen hier noch nicht auf fürchte ich.

Momentan bin ich noch bei den Grundlagen, betreffs der Einarbeitung in die Sprache selbst als auch bei den generellen Aufbau des Spiels (also Objekte-, Raumverteilung, Beschreibungen etc.) und stehe bereits vor den ersten Hürden. Damit ich mich nicht vollkommen verrenne, wollte ich vorsichtshalber die Leute fragen, die bereits Erfahrungen mit Inform gemacht haben, ob die verschiedenen Ansätze die ich plane in Inform überhaupt realisierbar sind.

Zuerst das wohl schwierigste Hindernis. Die Umgebung sollte nicht Raum sondern Sektor orientiert dargestellt werden, also nach dem herkömmlichen Schachbrettschema um später ein Kampfsystem implementieren zu können. Natürlich ist nun das Problem, dass Objekte sich zwar in einem Sektor (jeder ein individuell erstellter Raum in Inform) befinden können, diese aber von anderen Sektoren aus nicht sichtbar sind. Meine Notlösung war es nun diese Objekte ein zweites mal als backdrop erscheinen zu lassen für den Rest einer area (der Raum), was wiederum zu einen Namenskonflikt zwischen den eigentlichen Objekt und dem backdrop führt. Außerdem bietet dieses Vorgehen keine Lösung für nicht statische Objekte bzw. Personen. Bevor ich nun für jedes einzelne Objekt sozusagen area über area pappe wollte ich mich erkundigen ob es evtl. eine komfortablere Lösung gibt.

Frage Nr.2:
Zeiteinteilung. Es wird zwar erwähnt das Inform Schritte abzählen kann, aber ich würde gerne wissen, ob sich dies auch zu einer simulierte Zeit umstrukturieren ließe. In anderen Worten eine Uhr, die je nach den Handlungen, die der Benutzer ausführt, die verstrichene Zeit zu der gegebenen Uhrzeit aufaddiert(z.B. Es ist 12:13:05. Öffne Tür. Es ist 12:13:18 usw.)

Frage Nr.3:
Attribute und Fähigkeiten. Da es sich um ein Rollenspiel handeln soll sind solche Zahlenspielereien wohl unvermeidlich. Könnten diese variablen Größen einfach einer Person 'angehaftet' werden ähnlich wie Kleidung? Ich glaube, als ich die Anleitung überflog, in den späteren Kapiteln etwas mit Größe einer Person gelesen zu haben, daher die Hoffnung.

Frage Nr.4:
Multiple Choice. Ein nicht minder wichtiges Thema für mich. Ich wollte die Dialoge nach diesem Schema realisieren, indem ich einzelne Zahlen als neue directions einfügte. Da das aber in der momentanen Version nicht möglich ist und es auch genau genommen eine etwas umständliche Lösung wäre hatte ich die Idee schnell verworfen. Aber was bleibt als Alternative?

Frage Nr.5:
Textlänge. Eigentlich ein ähnlicher Themenbereich. Ich wollte, dass der Benutzer zwischen verschieden Charaktere auswählen kann. Sobald er das tat wurde eine Beschreibung aufgelistet, die einen groben Eindruck über Hintergrund und Fertigkeiten vermitteln sollten. Das Problem war nur, dass für Inform die Texte zu lang ausfielen, so dass es als Fehler aufgefasst wurde. Ich hab zwar auch hier über Umwegen eine Lösung gefunden aber ich fände es trotzdem besser wenn man das Wortmaximum weiter erhöhen könnte. Vielleicht auch nach einen press enter - text continue Verfahren für die bessere Übersicht, wenn das möglich ist.

Und weil das noch nicht genug ist noch ein paar blauäugige Anfängerfragen
Frage Nr.6:
Trigger. Gut zu diesem Thema komme ich in der Anleitung wohl noch. Aber mich interessiert jetzt bereits wie trigger in Inform gehandhabt werden. Existieren booleans ähnlich wie in java?

Frage Nr.7:
Veränderte Beschreibungen. Ist es möglich die Beschreibung für eine bestimmte Handlung zu verändern, wenn sie mehrmals ausgeführt wird? Etwa wenn versucht wird zweimal hintereinander ein bestimmtes Objekt aufzunehmen. Bisher kenne ich nur die unvisit Bedingung aber die funktioniert ja allein bei Räumen.


Das reicht wohl fürs Erste.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mi, 14 März 2007 - 8:44  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Zu Inform 7 kann ich nicht sehr viel sagen. Zu den meisten anderen Punkten aber schon :-)

Basti hat folgendes geschrieben:
Zuerst das wohl schwierigste Hindernis. Die Umgebung sollte nicht Raum sondern Sektor orientiert dargestellt werden, also nach dem herkömmlichen Schachbrettschema um später ein Kampfsystem implementieren zu können. Natürlich ist nun das Problem, dass Objekte sich zwar in einem Sektor (jeder ein individuell erstellter Raum in Inform) befinden können, diese aber von anderen Sektoren aus nicht sichtbar sind.

Man kann sich hier eine Lösung überlegen, in der das übliche Modell der Räume verwendet wird. Darübergelegt wird ein Raster, das nur in Kampfszenen benutzt wird. der Spieler, jedes Objekt und jeder NPC (bzw. jedes "Monster") haben dann eine x- und y-Koordinate, die im Kampf betrachtet werden. Vielleicht hat auch jeder Raum eine Grenze, so dass man in einem Verlies an die Wand gedrängt werden kann, in einem Kornfeld aber nicht.

Ein einfacheres Modell könnte einen eindimensionalen Abstand verwenden, so dass sich ein Gegner auf den Spieler zu oder von ihm weg bewegen kann.

In jedem Fall musst du dann den Abstand zum Spieler bzw. die Position der Gegenstände selbst implementieren, das es dafür noch keine Routine gibt. Außerdem stellt sich natürlich die Frage, wie sich der Spieler innerhalb des Raums durch die Sektoren bewegt. Was heißt also zum Beispiel "gehe nach Westen" während des Kampfes? Sollen im Kampf die Gegner grafisch (so wie in Nethack?) dargestellt werden?

In einem solchen System ist die Sichtbarkeit geklärt - alles, was im Raum ist, ist auch sichtbar. Es gibt aber zahlreiche andere Probleme. Trotzdem ist diese Methode aber besser, als jeden Sektor als Raum zu implementieren und die Sichtbarkeit von Hand nachzutragen allein schon, weil nicht so viele Raumdefinitionen entstehen.

Basti hat folgendes geschrieben:
Frage Nr.2:
Zeiteinteilung. Es wird zwar erwähnt das Inform Schritte abzählen kann, aber ich würde gerne wissen, ob sich dies auch zu einer simulierte Zeit umstrukturieren ließe. In anderen Worten eine Uhr, die je nach den Handlungen, die der Benutzer ausführt, die verstrichene Zeit zu der gegebenen Uhrzeit aufaddiert(z.B. Es ist 12:13:05. Öffne Tür. Es ist 12:13:18 usw.)

Das ist eine Sache, nach der sehr oft gefragt wird. Man kann natürlich zu jeder Aktion eine Zeit angeben, die dann verstreicht. Aber das macht die Sache für den Autor sehr kompliziert und ist auch für den Spieler nicht unbedingt durchsichtig.

In den meisten Fällen, wenn der Spieler zum Beispiel alleine in einem Raum ist, spielt die Zeit keine große Rolle. Ein exaktes Timing ist nur sinnvoll, wenn nebenher andere zeitabhängige Dinge passieren. Eine Zündschnur brennt ab, oder ein Kobold oder was weiß ich, wer so dein Rollenspiel bevölkern soll, piekt den Spieler alle zehn Sekunden mit seinem Speer bis er tot umfällt. Selbst in solchen Fällen ist eine Beschränkung auf Runden wohl besser.

Außerdem ist es in den meisten Spielen störend, wenn man neben den ganzen anderen Sachen auch noch auf seine Zeitplanung achten muss. (Die einzige Ausnahme, die mir hier einfällt, sind Spiele, in denen die Zeitplanung im Vordergrund steht, etwa bei der Durchführung eines Raubes in einem Museum mit zeitabhängig geschalteten Überwachungskameras.)

Mein Rat für den Anfänger: Lass es draußen. (Denselben Ratschlag würde ich übrigens auch Fortgeschrittenen geben. Eine interessante Diskussion über Zeit in Textadventures wurde hier vor Längerem einmal geführt.)

Basti hat folgendes geschrieben:
Frage Nr.3:
Attribute und Fähigkeiten. Da es sich um ein Rollenspiel handeln soll sind solche Zahlenspielereien wohl unvermeidlich. Könnten diese variablen Größen einfach einer Person 'angehaftet' werden ähnlich wie Kleidung? Ich glaube, als ich die Anleitung überflog, in den späteren Kapiteln etwas mit Größe einer Person gelesen zu haben, daher die Hoffnung.

Na, das geht auf jeden Fall. Du kannst Daten in Tabellen ablegen, und natürlich kann jedes Objekt (also auch jeder Charakter) Eigenschaften besitzen, die sich verändern lassen.

Basti hat folgendes geschrieben:
Frage Nr.4:
Multiple Choice. Ein nicht minder wichtiges Thema für mich. Ich wollte die Dialoge nach diesem Schema realisieren, indem ich einzelne Zahlen als neue directions einfügte. Da das aber in der momentanen Version nicht möglich ist und es auch genau genommen eine etwas umständliche Lösung wäre hatte ich die Idee schnell verworfen. Aber was bleibt als Alternative?

Die Dialogführung mit Multiple Choice ist ein sehr beliebtes System der Konversation mit NPCs. Für Inform 6 gibt es da schon einige fertige Module und ich kann mir vorstellen, dass sich auch schon jemand für I7 die Mühe gemacht hat, etwas Passendes zu entwerfen.

Basti hat folgendes geschrieben:
Frage Nr.5:
Textlänge. Eigentlich ein ähnlicher Themenbereich. Ich wollte, dass der Benutzer zwischen verschieden Charaktere auswählen kann. Sobald er das tat wurde eine Beschreibung aufgelistet, die einen groben Eindruck über Hintergrund und Fertigkeiten vermitteln sollten. Das Problem war nur, dass für Inform die Texte zu lang ausfielen, so dass es als Fehler aufgefasst wurde.

Die Texte waren für Inform zu lang? Das kann ich mir nicht vorstellen. Vielleicht meinen wir auch nicht dasselbe. Ein Text, der zur Ausgabe bestimmt ist, kann so lang sein, wie er will.

Okay, das stimmt natürlich nicht ganz. Erstens gibt es wohl eine Beschränkung des Compilers, wie lang der temporäre Puffer für Texte ist. Der sollte aber für die meisten Texte ausreichend dimensioniert sein. Und wenn nicht, kann man einen Text immer in Untertexte aufteilen, die dann nacheinander ausgegeben werden.

Außerdem ist die Spieldatei in ihrer Größe beschränkt. In der Version 8 kann sie höchstens 512 Kilobytes groß sein. Der Text wird zwar komprimiert, aber nur sehr ineffektiv. Außerdem werden doppelt angegebene Texte auch meistens doppelt abgelegt. Bist du an diese Grenze gestoßen?

Basti hat folgendes geschrieben:
Frage Nr.7:
Veränderte Beschreibungen. Ist es möglich die Beschreibung für eine bestimmte Handlung zu verändern, wenn sie mehrmals ausgeführt wird? Etwa wenn versucht wird zweimal hintereinander ein bestimmtes Objekt aufzunehmen.

Ja, das geht. Ich kenne mich nicht gut (sprich: eigentlich gar nicht) mit Inform 7 aus, aber da gibt es doch auch so Konstrukte wie:

Code:

After taking the golden apple for the first time, say "Na endlich!".

After taking the towel when it is wet, say "Igitt!".
After taking the towel, say "Hmm, flauschig".

(Bitte die genaue Syntax nachschlagen. So oder so ähnlich habe ich das jedenfalls schon einmal gesehen.)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Basti
BeitragVerfasst am: Mi, 14 März 2007 - 17:30  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Vielen Dank für diese schnelle, ausführliche Antwort.
Ein überlagerndes Raster für die einzelnen Räume wäre wirklich eine enorme Arbeitserleichterung, wenn es sich verwirklichen lässt. Da kein 'freies' (also wandloses) Umfeld in dem von mir erdachten Szenario existiert könnte man dem auch leicht logische Grenzen setzten. Allerdings gibt es da noch mehr was ich einführten wollte und was die Situationen komplizierter gestalten kann als bloß Kampf und Nichtkampf.

Am besten Umreiße ich mal kurz die Spielidee. Es soll ein survival horror RPG in SciFi Ambiente werden. Ein heimtückischer Sabotageakt an einer Überwachungseinrichtung irgendwo im nirgendwo hinterlässt nur eine handvoll Überlebende, die sich in vollständiger Isolation und dazu noch in lebensfeindlicher Umgebung behaupten müssen. Unter den Überlebenden ist auch der Spieler. Eine kleinere Außenstation dient als Rast- und Treffpunkt mit den anderen NPCs. Das Große Herzstück ist allerdings der nunmehr zerstörten Hauptkomplex, den entweder der Spieler oder NPCs (oder beides gleichzeitig) auf Erkundungsmission (mit anderen Worten Plünderungszüge) besuchen werden. Dies ist notwendig um die letzten Nahrungsvorräte zusammenzukratzen, die noch spärlich vorhanden sind. Denn die Attribute des Charakters beginnen im Laufe der Zeit zu degenerieren, was mit der regelmäßigen Einnahme von verschieden Nahrungssorten verlangsamt werden kann. Dies gilt allerdings ebenfalls für die NPCs.

Aber über kurz oder lang beginnen sich die Probleme immer weiter anzuhäufen (vor allem wenn der Spieler nicht aktiv eingreift). Die aggressive Fauna des Planeten fängt an sich (an fest vorgegebenen Stellen) einzunisten, sich dort fortzupflanzen und auf Jagd zu gehen. Ranken zwängen in die beschädigte Außenhülle der Station und reißen Löcher in die Wände, was der gesundheitsschädlichen Atmosphäre des Planeten Tür und Tor öffnet. Einige von diesen Ereignissen sind fest geskriptet (etwa das überraschende Ausfallen des letzten Energiegenerators an Tag X, was die Charaktere plötzlich in völliger Dunkelheit zurücklässt. Quests werden von NPCs freigeschaltet etc.) andere sollen vom Zufall gesteuert sein (etwa das Jagdverhalten der verschiedenen Raubtiere, die durchaus auch über andere Artgenossen herfallen können). Das Szenario sollte also weniger mit Abwechslung in der Szenerie als vielmehr den langsamen Entwicklungsprozess innerhalb des eingeschränkten Spielraumes trumpfen. Dies macht einen fest strukturierten Zeitablauf (also Einteilung in Sek. , Min. , Std. , Tage, Monate) in meinen Augen unabdingbar, da während einer Handlung oder Nicht-Handlung des Spielers sowohl NPCs als auch Kreaturen ebenfalls Handlungen ausführen können (und damit meine ich in der gesamten Spielwelt nicht allein in dem Raum im welchen sich der Spieler befindet) und werden (dazu kommen noch andere Faktoren. So soll der PC sich Krankheiten einfangen können die ihn behindern, bis nach einer Weile die Genesung eintritt. Gelegentlich soll er auch über längere Zeit das Bewusstsein verlieren können, ohne das die Welt um ihn herum währenddessen stillsteht).
Eigentliches Ziel ist schlicht das Überleben der eigenen Spielfigur über einen bestimmten Zeitraum. Ob er andere NPCs dabei unterstützt liegt allein beim moralischen Empfinden des Spielers.

Aber es entsteht auch ein Problem zum Thema Raster. Um die richtige Atmosphäre zu erzeugen wollte ich nämlich auch dass die Gegner in der Lage sind den Spieler zu belauern. Sich vielleicht gelegentlich etwa nach routinierter Horror Manier von der Decke auf den Spieler stürzen wenn er unter ihnen herläuft. Oder sie erst versuchen den Spieler von etwaigen Fluchtmöglichkeiten abzuschneiden. Es kann also davon ausgegangen werden, dass ein Kampf nicht sofort bei Sichtkontakt eintritt. Außerdem soll der Spieler auch während einer Handlung (z.B. das Lesen einer Email) plötzlich unterbrochen werden können (entweder von freundlichen NPCs oder Gegnern) und, wenn er nicht schnell genug reagiert, möglicherweise übel Prügel kassieren. Zumindest soll dies gelten wenn besagte Handlung länger dauert als ein Angriff des Gegenspielers (Beispiel: Der Charakter will dreizahligen Code eingeben während von hinten jemand versucht auf ihn einzuschlagen. Sagen wir grob er braucht eine Sekunde pro eingegebener Ziffer, sein Gegner für jeden Hieb ebenfalls eine Sekunde. PC hat die Initiative tippt also die erste Zahl ein. Gegner greift an und verfehlt. Spieler tippt zweite Zahl. Gegner greift erneut an und trifft. Handlung wird unterbrochen und der Spieler müsste wieder von vorn beginnen. Zwar muss die erzwungene Wiederholung nicht für jede Handlung gelten aber ein großes Spektrum wäre damit wohl bereits abgedeckt). Ich könnte mir vorstellen, dass man den Kampfmodus in diesem Fall etwas umständlich zu implementieren ist. Am Besten wäre es wohl das Gatter im Hintergrund quasi weiterlaufen zu lassen und das Programm darauf zu trimmen einzelne Zeitschritte (etwa Sekunden) im friedlichen Modus einfach zu überspringen. Etwa wenn der Spieler einen Raum betritt und ein Objekt am anderen Ende untersuchen möchte. Das Programm sucht eine möglichst gerade Route zum Ziel und addiert die notwendige Zeit pro Schritt zu der der eigentlichen Handlung, während es gleichzeitig die Position des Spielers auf dem Raster verändert wird. Gleichzeitig werden die Handlungen der anderen Figuren auf der Weltkarte ebenfalls in diesem Zeitrahmen berechnet. Im Kampfmodus hingegen wird jeder einzelne Zeitschritt simuliert, (etwa in Sekunden) in denen der Spieler seine Figur frei im Raum bewegen kann. Das wäre zumindest der Ansatz.

Gah! Aber genug mit dem Geschwafel weiter mit den Taten.

Antwort Nr.3
Gut zu wissen.

Antwort Nr.4
Mh, ich werd mal schauen ob ich was finde.

Antwort Nr.5
Ich glaube wir reden über das gleiche Thema. Es läuft darauf hinaus, dass Inform fälschlicherweise davon ausgeht, dass ein Anführungszeichen vergessen wurde (die Wortanzahl beträgt ca. 320 Wörter). Die Lösung war eigentlich genau die, die du vorgeschlagen hast. Schätze es liegt tatsächlich am Compiler.

Antwort Nr.7
Hoppla, das war etwas ungenau meinerseits. Eigentlich wollte ich wissen ob bei instead Situationen ebenfalls neuer Text einfügen lässt. Praktisch wollte ich einen kaputten Türschalter implementieren. Drückt der Spieler in einmal (beim Befehl close door) passiert nichts weiter. Beim zweiten Mal spielt der Charakter gelangweilt etwas daran herum aber sonst geschieht erneut nichts. So etwas in der Richtung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Basti
BeitragVerfasst am: Di, 20 März 2007 - 3:01  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Kleine Zwischenfrage bei der mir vielleicht jemand helfen kann:

Ich versuche bereits Parameter für die verschiedenen Funktionen einzubauen die später noch vollständig hinzufügen möchte (z.B. verschiedene Schwierigkeitsgrade). Die bisher beste Möglichkeit wie es mir bisher scheint ist es die Begrifflichkeit unter der ein thing aufgelistet ist aufzustocken.
Also etwa:

Zitat:
Schwierigkeitsgrad is a thing. It can be leicht or mittel or schwer.


Problem ist nun, dass es Inform nach einer Weile wohl zuviel wird oder die Anzahl solcher Deklarationen begrenzt ist. Denn wenn ich eine bestimmte Anzahl der solchen erstelle meckert das Programm plötzlich rum, dass die Beschreibung für das Hauptmenü 'zu kompliziert' ausfällt um compiliert zu werden. Komischerweise auch nur für diesen einen Raum, obwohl es da auch andere Objekte mit nicht minder komplizierten Beschreibungen gibt. Ich stell den Code einfach mal rein (leider etwas unübersichtlich, sorry):

Zitat:
The description is "[if unvisited and Sprache is deutsch]Willkommen im Hort mein Freund! Wo willste dich breitmachen?:[line break][line break]N:Such dir ne Bleibe! (Neues Spiel)[line break]E:Oder leih dir eine... (Lade altes Spiel)[line break]S:Rennen ist aber auch eine Alternative. (Beende)[end if][if visited and Sprache is deutsch]Wieder auf den Beinen, eh? Wo soll[apostrophe]s denn hingehen?:[line break][line break]N:Diese Behausung ist eine Zumutung! Suche dir was Neues. (Neues Spiel)[line break]E:Geh zu deinem Lager zurück bevors dir jemand wegschnappt. (Lade altes Spiel)[line break]S:Versuch dein Glück lieber in der Außenwelt. (Beende)[end if] [if unvisited and Sprache is english]Welcome in the hoard my friend! Where shall we store your entrails?:[line break][line break]N:Search for a new home! (New Game)[line break]E:Or borrow one... (Load game)[line break]S:But running is always an alternative, I guess. (End Game)[end if][if visited and Sprache is english]Back on your feet, eh? Where d'ya want to go?:[line break][line break]N:This hole is an impertinence! Search for something else. (New Gamel)[line break]E:Go back to your little piece of home before it is taken away. (Load Game)[line break]S:Better try your luck in the outside world. (End Game)[end if][line break] ".


Sprache ist bereits implementiert und der Text wurde bisher auch immer korrekt ausgeworfen.

Fehlermeldung:

Zitat:
In 'The description is "Blah Blah" , the phrase being constructed is just too long and complicated, and will need to be simplified.


Der Fehler tritt seltsamerweise nur auf, wenn mindestens drei Umschreibungen für ein thing existieren. Weiß vielleicht jemand Rat?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Di, 20 März 2007 - 10:08  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Zitat:
Schwierigkeitsgrad is a thing. It can be leicht or mittel or schwer.

Naja, der Schwierigkeitsgrad ist ja kein Objekt, und ein Objekt kann auch nicht leicht oder schwer oder mittel sein, sondern nur eine Eigenschaft haben, die diese Werte hat.

In der Sprache von Inform 6 (und den meisten anderen Sprachen) ist der Schwierigkeitsgrad wohl eher eine globale Variable, und die wird in I7, wenn ich Kapitel 4 richtig gelesen habe, wohl so definiert:
Zitat:

A Schwierigkeitsgrad is a kind of value. The Schwierigkeitsgrads
are leicht, mittel and schwer.

Schwierigkeit is a Schwierigkeitsgrad that varies. Schwierigkeit is mittel.

Das klingt zwar irgendwie etwas umständlich, aber wahrscheinlich denke ich auch zu sehr in Inform-6-Syntax.

Und noch ein Tipp, den Du sicher nicht hören möchtest: Schreib Dein Spiel nur in einer Sprache. Die Sprache umzuschalten mag zwar eine gute Idee sein, aber du musst ja dann alles doppelt machen. Und dann wirst du bei Deinem eh schon ehrgeizigen Projekt schnell an die Grezen des Z-Codes stoßen; gerade die Texte nehmen ja relativ viel Platz in der Z-Code-Datei ein. Außerdem musst Du auch die Texteingabe auf beide Sprachen abstimmen. Und das Spiel in beiden Sprachen testen lassen.

Ich würde auch den Schwierigkeitsgrad erst einmal weglassen. Du bist ja auf viele Schwierigkeiten gestoßen, die Du, wie mir scheint, erst einmal konzepzionell lösen solltest: Wie soll der Kampf aussehen, und wie sol das Spiel außerhalb der Kampfszenen ablaufen? Wie soll eine Zeitabhängigkeit im Spiel realisiert werden? Das, was Du im letzten Post halt geschildert hast.

(Ich bin übrigens nicht von der Notwendigkeit eines Zeitsystems überzeugt. In Deinen Beispielen hast Du immer nur Sekunden benutzt, also äquidistante Schritte. Dann kannst Du das Ganze auch weglassen. Du müsstest vielleicht nur zwischen Zeiten während und außerhalb der Kampfszenen unterscheiden, damit Tage vergehen können.

Und dass die Gegner dem Spieler auflauern, hat ja nichts mit der Sichtbarkeit vorher zu tun - wenn sie auf der Lauer liegen, sieht der Spieler sie nicht, es sei denn, er untersucht die Umgebung genau. Und wenn die Gegner die Deckung verlassen, sind sie sichtbar. Das implementiertst Du genau so wie einen Schlüssel unter einer Fußmatte.)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Basti
BeitragVerfasst am: Di, 20 März 2007 - 11:16  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Values hatte ich bereits ausprobiert. Immer noch das gleiche Problem und da Schwierigkeitsgrad sich von der Beschreibung her eigentlich nicht verändert habe ich es schlicht als thing deklariert um Arbeitsfläche zu sparen. Faul, ich weiß, aber bis gestern schien alles zu funktionieren. Es ist halt eben nur merkwürdig, dass das Problem wirklich nur im Hauptmenü (aka den Startraum) auftritt, während alle anderen nicht betroffen sind. (Was vielleicht noch erwähnt werden sollte: Zwischen Satz und (Erklärung) liegen mehrere Leerzeichen, den der Zitattext nicht aufschreiben möchte).

Klar möchte ich den Tipp mit den Rauslassen nicht hören. :P
Aber da gibt es zum einen den Umfang und zum anderen meine Sturheit. Ich will mal austesten was was überbietet. Die Hoffnung, das ganze auf einen Z-Code packen zu können war eh von vornherein gering.

Die Konzeptphase ist momentan in der was-geht-was-geht-nicht Phase (zumindest das was man realisieren kann bei einem Wissensstand der bis Kapitel 4 reicht. Kämpfe müssen also noch warten. Der Schwierigkeitsgrad kommt somit erst später. Ich wollte ihn nur schon mal probeweise im Spiel wissen für einige kleine Experimente. Dabei bin ich gerade erst auf das Problem gestoßen).

Thema Zeit: Ja, das stimmt wohl. Vielleicht lässt sich das Ganze mit einem schlichten Counter realisieren. Wäre jedenfalls angenehm stressfrei.

Na ja, erst einmal möchte ich mit einer vernünftigen Umgebung für ne Alpha fertig werden. Dann sieht man mal weiter.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Basti
BeitragVerfasst am: Di, 1 Mai 2007 - 23:08  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Hallo ich bin's wieder und diesmal sogar mit einem richtigen Problem. Bisher laufen die Arbeiten leider nicht so schnell wie ich es gerne hätte aber immerhin wurde (obs nun gut ist oder schlecht) die 256 K Marke gesprengt. Allerdings ist mir dabei etwas aufgefallen, was ziemlich katastrophale Auswirkung auf das Projekt haben könnte und wohl auch haben wird.

Ich hatte mir nach den Anregungen hier ein wenig im I-Net umgesehen und mir diese Conversation Extension von Mark Tilord heruntergeladen:

http://www.inform-fiction.org/I7Downloads/Extensions/Mark%20Tilford/Simple%20Chat

Schätze die Leute mit deutlich mehr Ahnung als ich erkennen sofort, dass diese Ext. nicht im Glulx Format kompilierbar ist.
Da ich allerdings später wohl einen ziemlich hohen Speicherbedarf haben werde (momentan habe ich gerade mal eine handvoll Räume und einige Menüs) bin ich quasi technisch aufgeschmissen.
Gibt es irgendeine einfache Möglichkeit den Code doch noch zu retten, oder muss ich nun endgültig Inform 6 Programmierung lernen? ;)

Edit: Genauer wäre die Frage wohl, was kann an dem oben aufgeführten Quellcode zum Kompilierungsfehler führen? Ich habe leider wenig Ahnung von Glulx. Was sind den die merklichsten Unterschiede zwischen Z-Code und Glulx Kompilierung?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Basti
BeitragVerfasst am: Do, 3 Mai 2007 - 18:29  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Ok, habe hier eine Lösung gefunden.

Das Problem schien zu sein, dass Glulx keine vollständige Wortreihe lesen kann sondern diese einzeln eingelesen werden müssen über den Befehl KeyboardPrimitive().

Man muss lediglich die Zeile read buffer parse; mit KeyboardPrimitive(buffer, parse); ersetzen und von da an sollte sich der Code in Glulx kompilieren lassen.
Außerdem kann man statdessen auch

#ifdef TARGET_ZCODE;
read buffer parse;
#ifnot; ! TARGET_GLULX;
KeyboardPrimitive(buffer, parse);
#endif;


eingeben, so dass Inform gegebenenfalls von Z-Code zu Glulx überspringt. Aber ob das was bringt weiß ich leider nicht.
Ich hoffe das hilft anderen Inform 7 Neueinsteigern.

Es gibt allerdings einen neuen Bug der wohl von der aktuellen 4S08 Version herrührt. Wenn ich versuche über run a conversation from Y von einem chat node X aus nach Y zu springen wird plötzlich eine neue Konversation gestartet, die parallel zu der vorherigen läuft (dies ist soweit ich mich zurückerinnern kann bei der älteren Version nicht der Fall gewesen. Ich müsste allerdings mal nachschauen). Soll: heißen nach einigen Malen hin und her gibt es einen overflow crash, da zu viele rulebooks simultan laufen. Sehr ärgerlich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Basti
BeitragVerfasst am: So, 20 Mai 2007 - 14:56  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Hallo noch mal,

Ganz dämliche Frage: Ich habe momentan Probleme Trefferpunkte für einzelne Körperteile in das System zu integrieren, weil es scheinbar keine doppelten Referenzen akzeptiert, also zB. Gesundheit of Torso of Person X. Für Gesundheit habe ich eine (spezifische) Kind of Value verwendet um es flexibler zu gestalten und um nicht für jeden einzelnen Charakter eine variable Nummer zu erstellen. Torso ist eine Kind of Körperteil welches wiederum ein thing und Szenerie ist (um später auch Ganzkörperschäden zu ermöglichen. Zumindest theoretisch).

Zwar funktioniert: say Gesundheit of your Torso,
aber wenn ich was anderes ähnlich wie das obere Beispiel versuche schafft es Inform nicht die Referenz richtig zu deuten und nimmt of X of Y als eine einzige zusammenhängende Beschreibung.

Weiß vielleicht jemand Rat?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Clive
BeitragVerfasst am: Di, 22 Mai 2007 - 12:39  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 29.08.2002
Beiträge: 60

Bin mir nicht sicher, was du jetzt wie implementiert hast, darum einfach mal ein funktionierendes Stück Quellcode (mit aktueller Version 4U65).

Code:

"Meeting Chuck Norris" by me

A body part is a kind of thing.
Health is a kind of value. The health is good and bad.

A torso is a kind of body part. Every torso has health.
The description of a torso is usually
"[if the health of the noun is bad]Blood drips from many wounds in[otherwise]Your eyes fall on the flawless skin of[end if]
[the noun]."

A torso is part of every person.

Home is a room. The description is "You are at home."

The Health of your torso is bad.

Chuck Norris is a man in Home. The description of Chuck Norris is "You think that you know him from... somewhere."

The Health of the torso which is part of Chuck Norris is good.


Ich glaube für dich ist vor allem die letzte Zeile interessant. Doppelt "of" geht nicht, aber "which is bla of bla" wird problemlos angenommen.

edit: Ich halte es für keine gute Idee, ein nicht-englischsprachiges Spiel mit Inform 7 zu schreiben. Aber das interessiert wohl eh keinen. Just my 2 cent.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Crowley
BeitragVerfasst am: Di, 22 Mai 2007 - 14:18  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 15.12.2005
Beiträge: 32
Wohnort: Düsseldorf

Clive hat folgendes geschrieben:
Ich halte es für keine gute Idee, ein nicht-englischsprachiges Spiel mit Inform 7 zu schreiben. Aber das interessiert wohl eh keinen.

Ich bin 100%ig Deiner Ansicht!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Basti
BeitragVerfasst am: Di, 22 Mai 2007 - 18:55  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

@Clive

Nah, das which hatte ich schon ausprobiert und es funktioniert leider in meinen Fall nicht so wie es sollte. Ich geb mal die Codefragmente an:

Code:
Health is a kind of value. 100 HP specifies Health.

Every Person has a Health. Health of a person is 100 HP.
Body Part is a kind of thing. Body Part is scenery.
[Wie bereits ewähnt eigentlich nur dazu da, um später etwas schreiben zu können wie: Change health of every body part which is part of a person to 10 TP. Falls so etwas überhaupt möglich ist. Ich habe meine Zweifel]
Every Body Part has a Health. Health of a body part is 100 TP.
Head is a kind of Body Part. A Head is part of every person.
A Torso is a kind of Body Part... usw.

[Jetzt der experimentelle Teil]

Adam is a person. Adam is in room.

Every turn:
Say Health of your Head;
change Health of your Head to health of your Head - 10 TP;
say Health of adam's Head.

[Soweit so gut alles wird problemlos angezeigt und verändert. Will ich aber so etwas wie:]

Every turn: if a person (called current) is in room two, change Health of Head which is part of current to 10 TP.

[...geht das in die Hose ob ich nun sage, dass es part of current ist oder nich]


Was den Rest angeht.. Klar interessiere ich mich für deine Meinung aber noch mehr für das Warum.
Etwa wegen der englischen Platzhaltersätze, die hie und da auftauchen könnten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Clive
BeitragVerfasst am: Di, 22 Mai 2007 - 23:45  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 29.08.2002
Beiträge: 60

Nach ewigem Rumprobieren hab ich endlich eine funktionstüchtige Version gefunden:
Code:

Every turn:
   repeat with target running through heads which are part of persons in room begin;
      if the target is part of the player begin;
      decrease health of target by 10 HP;
      say Health of target;
      say "   ";
      otherwise;
      decrease health of target by 20 HP;
      say Health of target;
      end if;
   end repeat.

Das ist nicht praktisch. Aber es klappt, und in der Dokumentation hab ich auch leider keine Hinweise gefunden, wie es anders zu lösen ist (ich hab aber auch mehr probiert als nachgelesen).
Dass aber solch einfache Sachen eines solchen Aufwands bedürfen, zeigt imho wieder einmal, dass Inform 7 entworfen wurde, um eine Geschichte in natürlicher Sprache erzählen und in ein Spiel umwandeln zu können.
Das geht schon nicht mehr, wenn man ein deutsches Spiel mit Inform 7 schreiben möchte. Dazu kommt noch die deutsche Grammatik.
Wer gern eine komplexe Spielwelt, gar ein Kampfsystem haben will, dem rate ich dringend zu Inform 6. Einige Gründe:

- Fast alle deine bisherigen Probleme in diesem Thread wären mit Inform 6 im Vergleich leicht zu lösen
- Dabei wäre der Quellcode sehr viel übersichtlicher
- Du hast fertig übersetzte, oft verbesserte Libraries
- Ganz zu schweigen von den vielen Tutorials
- Martin z.B. würde dir für die meisten Fragen gleich die richtige Lösung servieren können ;-)

Ich will dich nicht entmutigen, aber ich kann beim besten Willen keinen guten Grund erkennen, der bei deinem Vorhaben für Inform 7 spricht.


Zuletzt bearbeitet von Clive am Mi, 23 Mai 2007 - 17:22, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Clive
BeitragVerfasst am: Mi, 23 Mai 2007 - 13:29  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 29.08.2002
Beiträge: 60

So, ich konnte nicht widerstehen und hab ein kleines Inform 7-Kampfsystem gebastelt, in dem Personen freundlich oder feindlich gesinnt sind. Feindliche Personen im selben Raum greifen den Spieler jede Runde an, freundliche werden feindlich, wenn der Spieler sie angreift.
Außerdem wird automatisch der Torso angegriffen, wenn man eine Person angreift, es sei denn, man greift ein bestimmtes Körperteil an. Ich finde es unsinnig, zusätzlich health für die ganze Person zu haben, denn wenn z.B. der Kopf zu Brei geschlagen wurde, ist die Person schließlich auch tot.
Bisher ist nur der Torso als Körperteil implementiert, aber in dieser Form ist das leicht zu erweitern.
Code:

"Kampfsystem" by Clive

Health is a kind of value. 100 HP specifies Health.

A body part is a kind of thing.
Every body part has health. Health of a body part is usually 100 HP.

A person is either friendly or hostile. The player is friendly.

A torso is a kind of body part.
A torso is a part of every person.

Adam is a friendly person. Adam is in room.

Every turn when a hostile person is in the location:
   repeat with enemy running through hostile persons in the location begin;
      try the enemy fighting the player;
   end repeat.

Instead of attacking something:
   if the noun is the player begin;
      say "That would be ridiculous.";
   otherwise;
   try fighting the noun;
   if the noun is a friendly person, now the noun is hostile;
   if the noun is a body part begin;
      repeat with victim running through friendly persons in the location begin;
         if the noun is part of the victim, now the victim is hostile;
      end repeat;
   end if;
   end if.

Fighting is an action applying to one touchable thing.
Carry Out fighting:
   if the noun is a body part, decrease health of the noun by 10 HP;
   if the noun is a person begin;
      repeat with target running through torsos begin;
         if the target is part of the noun, decrease health of the target by 10 HP;
      end repeat;
   end if.
Report fighting:
   if the noun is a body part, say "You attack [the noun]. The health of [the noun] is now [health of the noun].";
   if the noun is a person begin;
      repeat with target running through torsos begin;
         if the target is part of the noun, say "You attack [the target]. The health of [the target] is now [health of the target].";
      end repeat;
   end if.

Check someone fighting:
   if the noun is the player begin;
      if the person asked is friendly, stop the action;
   end if.
Carry Out someone fighting:
      if the noun is a body part, decrease health of the noun by 10 HP;
   if the noun is a person begin;
      repeat with target running through torsos begin;
         if the target is part of the noun, decrease health of the target by 10 HP;
      end repeat;
   end if.
Report someone fighting:
   if the noun is the player begin;
      say "[The person asked] attacks you and hits your torso. The health of your torso is now [health of your torso].";
   otherwise;
      if the noun is a person begin;
      repeat with target running through torsos begin;
         if the target is part of the noun, say "[The person asked] attacks [the target]. The health of [the target] is now [health of the target].";
      end repeat;
      end if;
   end if.

Was mich stört ist nur der extensive Gebrauch von Schleifen, aber wie gesagt... hab noch nicht herausgefunden, wie es anders zu lösen ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Basti
BeitragVerfasst am: Mi, 23 Mai 2007 - 23:09  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

Ok, es ist ziemlich spät und ich bin müde aber trotzdem:

Ich könnte mir noch vorstellen, dass man mit relate das ganze ein wenig besser aufteilen könnte in verschiedenen Angriffsarten (Nah- Fernkampf, Einsatz von Hitze oder Elektrizität usw.) aber das würde auch in deinem Beispiel wohl problemlos funktionieren (etwas wenn man vermerkt welche Waffe gerade der Angreifer benutzt).

Nur kurz zu den Personen TP, die sind für einen leichteren Schwierigkeitsgrad gedacht. Ist dieser ausgewählt sollen die aufgeteilte Trefferzonen (zumindest für den Spielercharakter) entfallen und mit einem einzigen Gesundheitsbalken ersetzt werden, welcher mehr TP fasst als Torso und Kopf es einzeln tun würden (deren Verlust im normalen oder schweren Schwierigkeitsgrad natürlich das Leben kostet) und sämtliche Handicaps für den Spieler, wie sie etwa bei einem schwer verletztes Bein entstehen könnten, werden vollkommen entfernt.
Der Spieler überlebt also deutlich länger und ist nicht mehr anfällig gegenüber gezielten Angriffe seiner Gegner.

Aber jetzt erstmal danke. Ich weiß die Mühe wirklich zu würdigen.
Jetzt stehen erst einmal Präsenzklausuren an und ich bin mit dem Üben ein wenig im Verzug. Ich werde versuchen mich am Wochenende ausgiebiger damit zu beschäftigen und schauen was sich ergibt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 2
Gehe zu Seite 1, 2  Weiter
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05