IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Jemanden umarmen
AntwortenNeues ThemaNeue Umfrage

Jemanden umarmen

Geschrieben um 13:33 am 22.04.2012 | Zitat | Editieren | Löschen
Mario Donick
Mitglied
Bachelor Gumby
Beiträge: 57

Hallo!

Mittlerweile habe ich auch die Schwester meines Protagonisten implementiert. Weil er sie zwei Jahre nicht gesehen hat, will er sie umarmen, und sie will auch, aber die GerX-Anstandsdame lässt die beiden nicht :D

Ich habe in der Extension nachgeguckt, und dort ist "umarm" als Synonym für Küssen implementiert:


Understand "kuess [someone]" as kissing.

Understand the commands "umarm" and "lieb" and "streichel" and "streichle" and "knutsch" and "liebkos" as "kuess".

Und das wird von GerX als "Konzentrier dich auf das Spiel" abgefangen. Ähnliches gilt übrigens auch für "drück", was als "Das wäre sehr unhöflich" abgefangen wird.

So weit, so gut, ich kann das ja, wie ich neulich gelernt habe, neu definieren und versuche daher folgendes:


Understand the command "umarm" as something new.

Understand the command "umarm [someone]" as touch.

Understand the command "knuddel [someone]" as "umarm [someone]".

Ich will also, dass "umarm someone" als Synonym für "berühr" verstanden wird.

Geht aber nicht. "umarm" und "knuddel" werden während des Spielens nicht erkannt.

Was mach ich hier schon wieder falsch?

Geschrieben um 13:57 am 22.04.2012 | Zitat | Editieren | Löschen
Mario Donick
Mitglied
Bachelor Gumby
Beiträge: 57

Okay, ich habe es selbst rausgefunden:



Understand the command "umarm" as something new.

Understand "umarm [someone]" as touching.

Understand the command "knuddel" as "umarm".```

Offensichtlich kommt es wirklich auf den Unterschied an, ob man

*Understand "Verb" as ...**-ing***

oder

*Understand the command "verb" as ... **(ohne -ing)***

sagt.

Das ist sehr undurchsichtig *seufz*
Geschrieben um 01:52 am 23.04.2012 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Mario Donick:

Das ist sehr undurchsichtig seufz

Aktionen und Kommandos sind zwei völlig unterschiedliche Dinge. Satzmuster können Aktionen auslösen; das Verb im Satz wird in I7 Kommando (command) genannt.

EDIT: In der Kurzdoku werden die Begriffe "Satzmuster" und "Kommando/Command" stellenweise synonym verwendet, zumindest wird der Unterschied nicht so deutlich. Das werde ich mal prüfen.

EDIT 2: Inform geht mit dem Begriff "command" ebenfalls lax um: Mal bezeichnet sie nur das Verb, manchmal aber auch die ganze Anweisung.

1.) Ein oder mehrere Satzmuster wird/werden definiert und einer Aktion (die alle auf -ing enden) zugewiesen, ggf. mit einer Bedingung versehen. Entweder löst das Satzmuster eine vordefinierte bestehede Aktion aus (nachzuschlagen im Actions-Index) oder man definiert eine neue (nach dem ersten Compilieren dann auch im Index zu sehen):

blue

2.) Ein neues Verb (das in I7 "command" heißt) wird als Synonym zu einem bestehenden Verb definiert.

blue

Wenn man hinter die I7-Kulissen schaut, sieht man den Unterschied ebenfalls:

In 1.) wird auf I6-Ebene in etwa Folgendes definiert:



* noun -> Hugging;```

In der ersten Zeile wird das Verb angelegt, nach dem Sternchen folgt das Satzmuster und nach dem Pfeil -> steht die Aktion, die das Satzmuster auslöst.

2.) Wenn man nun ein weiteres Verb-Synonym definiert, sieht die Verben-Definition so aus:

```Verb 'umarm'  'herz' 'liebkos'

* noun -> Hugging;```

An den Grammar-Lines (die mit dem Stern) hat sich nichts geändert, nur die Verben wurden erweitert.
Geschrieben um 11:57 am 23.04.2012 | Zitat | Editieren | Löschen
Mario Donick
Mitglied
Bachelor Gumby
Beiträge: 57

Danke wiedermal für die Erklärungen. Hast du dir das auch alles selbst erschlossen, oder wurde das für dich aus der englischen Doku deutlich?

Mir ist z.B. auch nicht klar, wo jetzt z.B. der Unterschied zwischen

"report verb-ing: say ..."

und

"instead of verb-ing: say ..."

ist. Ich benutz quasi IMMER instead of.

Und "carry out" gibt es (IIRC) ja auch noch.

Edit: Für mich wäre es klarer, wenn Inform folgendes zulassen würde:

**Hugging is an action applying to one thing.

Understand "umarm/herz/liebkos/knuddel [something]" as hugging.**

Synomyme mit / zu trennen, lässt Inform ja schon zum Teil zu, z.B. in

Understand "Ann/Schwester" or "meine/meiner Schwester" or "junge/junger Frau" as "[TalkTopicAnn]".

(Das nutze ich z.B. für Spielereingaben wie "frag nach Ann" und "frag nach meiner Schwester".)

Leider ist das immer beschränkt auf nur ein durch / getrenntes Wortpaar, drei funktionieren nicht.

Geschrieben um 12:23 am 23.04.2012 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Zitat:

Edit: Für mich wäre es klarer, wenn Inform folgendes zulassen würde:

Hugging is an action applying to one thing.

Understand "umarm/herz/liebkos/knuddel [something]" as hugging.

Das wäre sehr elegant, stimmt. Ist möglicherweise sogar in Arbeit.

Zitat:

Mir ist z.B. auch nicht klar, wo jetzt z.B. der Unterschied zwischen

"report verb-ing: say ..."

und

"instead of verb-ing: say ..."

ist. Ich benutz quasi IMMER instead of.

Und "carry out" gibt es (IIRC) ja auch noch.

Jede Aktion, egal, ob vordefiniert oder selbstgeschrieben, hat drei Standard-Regelbücher (rulebooks), die in festgelegter Reihenfolge abgearbeitet werden:

1.) CHECK: Hier können Bedingungen geprüft werden, die ggf. ein Ausführen der Aktion verhindern.;

2.) CARRY OUT: Hier geschehen Änderungen an der Spielwelt (z.B. wenn beim Anziehen ein Kleidungsstück das Attribut #worn# bekommt), wenn die Aktion nur Text ausgibt, kann hier auch schon der Ausgabetext erfolgen.

3.) REPORT: Dies ist der eigentliche Moment, an dem die Standardmeldung für die Aktion ausgegeben wird, nachdem die Carry-out-Regel erfolgreich war.

Diese drei Rulebooks steuern das Standard-Verhalten der Aktion. Es gibt drei weitere Rulebooks für jede Aktion, die die Ausnahmefälle behandeln:

4.) INSTEAD: Das ist sozusagen die Check-Rule für Sonderfälle, die wohl am häufigsten vom Autor benutzte Regelsammlung. Die Ausführung der Aktion wird verhindert, wenn diese Regel greift.

5.) BEFORE: Wenn klar ist, dass die Aktion ausgeführt werden darf (Check und Instead haben grünes Licht gegeben), kann vor dem Ausführen hier noch was veranlasst werden:

EDIT: Das ist falsch. Die Before-Regeln werden vor Instead und Check ausgeführt.

blue

6.) AFTER: Dieses Rulebook dient dazu, das Standard-Report-Rulebook zum Schweigen zu bringen. Hier lassen sich spezifische Meldungen anbringen, z.B.:

blue

Die Aktion wird nach After standardmäig beendet. Soll die Standardantwort nach der After-Rule dennoch ausgegeben werden, muss die Aktion "mit continue the action" fortgesetzt werden.

blue

Geschrieben um 12:32 am 23.04.2012 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Mario Donick:

Synomyme mit / zu trennen, lässt Inform ja schon zum Teil zu, z.B. in

Understand "Ann/Schwester" or "meine/meiner Schwester" or "junge/junger Frau" as "[TalkTopicAnn]".

(Das nutze ich z.B. für Spielereingaben wie "frag nach Ann" und "frag nach meiner Schwester".)

Leider ist das immer beschränkt auf nur ein durch / getrenntes Wortpaar, drei funktionieren nicht.

Das ist seltsam. Die Worte werden nacheinander in der consult_grammar abgearbeitet, ohne Mengenbegrenzung. Hast Du mal versucht, die Vokabeln ohne Endungen zu definieren, also nur "mein" und "jung" statt "meine/meiner" bzw. "junge/junger". Endungen in Vokabeln sind nicht gut. GerX und deform mögen morphologisch bereinigte Formen am liebsten.

Geschrieben um 12:39 am 23.04.2012 | Zitat | Editieren | Löschen
Mario Donick
Mitglied
Bachelor Gumby
Beiträge: 57

Könnte man also sagen, dass das alles sozusagen die "Methoden" des Aktions-"Objekts" sind?

In Pascal/Delphi-ähnlichem Pseudocode also sowas hier?



 

umarm = new (hugging)   // Variable als Objekt der Klasse "hugging" initialisieren```

Und dann gäbe es

```function umarm.check()

function umarm.report () ...

function umarm.carryout () ...```

Und Synonyme könnten z.B. hier angegeben werden

```function umarm.constructor;

begin

  umarm.commands := 'umarm/knuddel/drück';

end;```

Und dann noch:

```function umarm.report (n: actor);

begin

  writeln ('Du umarmst ' + actor.name + '.');

end;```

Kann man diese ganzen natürlichsprachlichen Befehle in etwa so verstehen?
Geschrieben um 12:42 am 23.04.2012 | Zitat | Editieren | Löschen
Mario Donick
Mitglied
Bachelor Gumby
Beiträge: 57

ChristianB:

Das ist seltsam. Die Worte werden nacheinander in der consult_grammar abgearbeitet, ohne Mengenbegrenzung. Hast Du mal versucht, die Vokabeln ohne Endungen zu definieren, also nur "mein" und "jung" statt "meine/meiner" bzw. "junge/junger". Endungen in Vokabeln sind nicht gut. GerX und deform mögen morphologisch bereinigte Formen am liebsten.

Hm, nein, das geht nicht, dann kann ich zwar "frag arzt nach mein schwester" schreiben, aber nicht "frag arzt nach meiner schwester".

Allerdings brauche ich sowieso beide Formen, denn ich nutze die gleichen TalkTopic-Definition mittlerweile auch für "denk an meine schwester". (Die alte Methode mit der Tabelle des Weltwissens (vgl. anderer Thread) war zu unübersichtlich und zu unflexibel).

Geschrieben um 14:00 am 23.04.2012 | Zitat | Editieren | Löschen
Mikawa
Avatar
Mitglied
Prof Gumby
Beiträge: 324

Zitat:

Das ist sehr undurchsichtig seufz

Vielleicht hilft ja ein Blick in meine Anleitung "Mariel - IF schreiben mit Inform 7" v.a. S. 12/13 und 21/22, um einen besseren Überblick über die Mechanik hinter I7 zu bekommen.

Grüße,

Michael

http://www.michaelbaltes.com/IF%20Mariel/index.html

Geschrieben um 14:13 am 23.04.2012 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634
<td valign="top"><div class="post"><p><strong>Mario Donick:</strong></p> <blockquote> <p>Hm, nein, das geht nicht, dann kann ich zwar &quot;frag arzt nach mein schwester&quot; schreiben, aber nicht &quot;frag arzt nach meiner schwester&quot;.</p> </blockquote> <p>Das liegt dann aber daran, dass es irgendwo anders Definitionen gibt, die &quot;meine&quot; oder &quot;meiner&quot; mit Endung benutzen.</p> <p>Wie es Christian schon gesagt hat: GerX und deform mögen Endungen nicht, die werden vor der Satzanalyse einfach abgeschnitten, und zwar so:</p> <ul> <li>Wenn es das Wort gibt, wird nichts abgeschnitten.</li> <li>Wenn man -e, -s oder -n abschneiden kann und dann ein Wort erhält, das es gibt, wird der letzte Buchstabe abgeschnitten.</li> <li>Wenn man -em, -en, -er oder -es abschneiden kann und dann ein Wort erhält, das es gibt, werden die letzten beiden Buchstaben abgeschnitten.</li> <li>Wenn kein Wort gefunden wird, bleibt das Wort so, wie es ist.</li> </ul> <p>Wenn bei dieser Vorgehensweise eine Methode zum Erfolg führt, werden die anderen nicht mehr betrachtet. Wenn es also 'meiner' gibt, wird nicht mehr versucht -er abzuschneiden.</p> <p>Diese Vorgehensweise ist praktikabel, funktioniert allerdings nur dann, wenn immer alles ohne Endung angegeben wird. Daher müssen die Verben auch ohne Endung angegeben werden.</p> <p>Das heißt leider auch, dass man manchmal bewusst falsche Wörter verwenden muss, wenn etwa eine Trage als 'trag' definiert werden sollte, damit das Verb 'trag' weiterhin mit -e funktioniert. (Es wäre natürlich schön, wenn einem Inform die Arbeit abhehmen würde und man sich nicht mit diesen ganzen technischen Details herumschlagen müsste.)</p> <p><strong>Mario:</strong></p> <blockquote> <p>Könnte man also sagen, dass das alles sozusagen die &quot;Methoden&quot; des Aktions-&quot;Objekts&quot; sind?</p> </blockquote> <p>Es sind Regeln, also Funktionen, die nacheinander mit absteigender Priorität aufgerufen werden, bis eine einen von falsch verschiedenen Wert zurückgibt. (Im I6-Sprech heißt &quot;stop the action&quot; &quot;return true&quot; und &quot;continue the action&quot; heißt &quot;return false&quot;.)</p> <p>Die Priorität wird intern von I7 bestimmt. Je spezieller eine Regel ist, umso höher ist ihre Priorität. &quot;Report taking the banana if monkey feeding is happening&quot; hat also eine höhere Priorität als &quot;Report taking&quot;.</p> <p>Eine Regel ist quasi eine Liste von Routinen, im Pseudocode:</p> <pre><code> &amp;nbsp; &amp;nbsp; function exec&amp;#40;funct rule&amp;#91;&amp;#93;&amp;#41;&amp;#58; bool &amp;nbsp; &amp;nbsp; begin &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; foreach r in rule begin &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if r&amp;#40;&amp;#41; then return true; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false; &amp;nbsp; &amp;nbsp; end; </code></pre> <p>(Nur, dass es in Pascal keine Funktions-Zeiger gibt. Und kein foreach.) Die letzte Funktion ist immer die allgemeine Regel aus der Standardbibliothek.</p> <p>Ein Zug geht dann, grob gesprochen, so:</p> <pre><code> &amp;nbsp; &amp;nbsp; function turn&amp;#40;funct rule&amp;#91;&amp;#93;&amp;#41;&amp;#58; bool &amp;nbsp; &amp;nbsp; begin &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if exec&amp;#40;before&amp;#41; then return true; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if exec&amp;#40;instead&amp;#41; then return true; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if exec&amp;#40;check&amp;#41; then return true; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if exec&amp;#40;carry_out&amp;#41; then return true; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if exec&amp;#40;after&amp;#41; then return true; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if exec&amp;#40;report&amp;#41; then return true; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false; &amp;nbsp; &amp;nbsp; end; </code></pre> <p>Einige der Regeln hören, wenn man nichts anderes angibt mit &quot;stop&quot;, andere mit &quot;continue&quot; auf. Aus</p> <h1>003366</h1> <p>wird:</p> <pre><code> rule&amp;#58;&amp;#58;instead begin &amp;nbsp; &amp;nbsp; if &amp;#40;action = Take&amp;#41; and &amp;#40;noun = rod&amp;#41; and &amp;#40;is&amp;#40;rod, hot&amp;#41;&amp;#41; begin &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writeln&amp;#40;"Ouch!"&amp;#41;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true; &amp;#40;* Nicht explizit angegeben! *&amp;#41; &amp;nbsp; &amp;nbsp; end; &amp;nbsp; &amp;nbsp; return false; &amp;#40;* Kein heißes Eisen *&amp;#41; end; ```Aus #003366 wird: </code></pre> <p>rule&#58;&#58;report begin</p> <p>    if &#40;action = Open&#41; and &#40;noun = chest&#41; begin</p> <p>        writeln&#40;&quot;Auf diesen Augenblick hast du schon seit &quot;,</p> <p>            num&#40;turns&#41;, &quot;Zügen gewartet!&quot;&#41;;</p> <p>        &#40;<em> Kein return true hier </em>&#41;</p> <p>    end;</p> <p>    return false;</p> <p>end;</p> <pre><code></code></pre></div></td>
Geschrieben um 15:57 am 23.04.2012 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Martin:

Diese Vorgehensweise ist praktikabel, funktioniert allerdings nur dann, wenn immer alles ohne Endung angegeben wird. Daher müssen die Verben auch ohne Endung angegeben werden.

In der GerX-Kurzdoku wird das Thema im Kapitel 3 und in Section 8.1 angerissen:

http://ifiction.pageturner.de/inform7/German.html#docsec8

http://ifiction.pageturner.de/inform7/German.html#docsec58

Übrigens: GerX unterscheidet sich von deform bei der Definition von Verben in einem Punkt: Die Imperative auf -le werden in GerX mit -e definiert, also z.B. "wedle", wohingegen in deform die "unvollständige" Form 'wedl' angelegt wird. Ich fand's damals eine gute Idee, keine inkorrekten Imperative zuzulassen, aber komplett ist diese Strategie erst mit der aktuellen Testversion umgesetzt. Möglicherweise war das aber auch gar nicht so klug.

Geschrieben um 22:15 am 23.04.2012 | Zitat | Editieren | Löschen
Mario Donick
Mitglied
Bachelor Gumby
Beiträge: 57

Danke an alle. Auch der Hinweis auf die Mariel-Anleitung war nochmal hilfreich; die hatte ich auch schon mal gelesen, hat aber einiges ins Gedächtnis gerufen.

Ich sagte ja schon, dass ich bisher eigentlich alles mit instead mache. Zum Beispiel das Denken:



    if FWetter is 1&#58;

        say "Immer das gleiche Mistwetter.";

    otherwise&#58;

        say "Wie schön, die Sonne scheint.";

        increase the value of FStimmung by 1.```

Soll ich stattdessen lieber schreiben:

```carry out thinking about "Wetter"&#58;

   say "Immer das gleiche Mistwetter.";

instead of thinking about "Wetter" when FWetter is 1&#58;

   say "Wie schön, die Sonne scheint";

   increase the value of FStimmung by 1.```

?

Der Normalfall wäre hier halt, dass es regnet, und die Sonne wäre die Ausnahme.

Aber das andere funktioniert genauso gut.
Geschrieben um 23:28 am 23.04.2012 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Mario Donick:

Der Normalfall wäre hier halt, dass es regnet, und die Sonne wäre die Ausnahme.

Also ich verstehe den "Normalfall" eher in Bezug auf die Aktion an sich, losgelöst von Besondrheiten des Spiels. Das "Wetter" ist ja schon ein besonderer Fall, der meiner Ansicht nach nicht das Standardverhalten der Aktion betrifft.

Das Standardverhalten von thinking about wird ja schon von der in German definierten "block thinking rule" ...



   say "Dir fällt jetzt nichts dazu ein.".```

... geregelt.

Alles andere, das im Spiel passiert, sind Spezialfälle, für die Before, Instead und After die geeigneten Rulebooks wären.

Du kannst aber auch das Standardverhalten der Aktion komplett ändern, z.B. um irgendwelche Listen mit schon gedachten Themen zu speichern; dann kannst du die "block thinking rule" löschen:

blue

(Damit man sie hinterher noch manipulieren, löschen, oder verschieben kann, haben alle neuen GerX-Rules einen Namen!)

Das Verwursten der Topic-Listen käme dann wohl ins "Carry out thinking about"-Rulebook und die Meldung "Du denkst und merkst dir das Thema oder so." wäre was fürs Report-Regelbuch der Aktion.
Geschrieben um 07:37 am 24.04.2012 | Zitat | Editieren | Löschen
Mario Donick
Mitglied
Bachelor Gumby
Beiträge: 57

Zitat:

Also ich verstehe den "Normalfall" eher in Bezug auf die Aktion an sich, losgelöst von Besondrheiten des Spiels. Das "Wetter" ist ja schon ein besonderer Fall, der meiner Ansicht nach nicht das Standardverhalten der Aktion betrifft.

Das Standardverhalten von thinking about wird ja schon von der in German definierten "block thinking rule" ...

Ah, ich verstehe! Im Prinzip brauche ich mich um Carry out und Reporting also nur zu kümmern, wenn ich neue Aktionen habe, oder wenn mir die Standardantwort nicht gefällt oder ausreicht.

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz