Forum moved to if-forum.org
Autor Nachricht
<  Jemanden umarmen
Mario Donick
BeitragVerfasst am: So, 22 Apr 2012 - 12:33  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

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:

Code:

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:

Code:

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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Mario Donick
BeitragVerfasst am: So, 22 Apr 2012 - 12:57  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

Okay, ich habe es selbst rausgefunden:

Code:

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*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
ChristianB
BeitragVerfasst am: Mo, 23 Apr 2012 - 0:52  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Mario Donick hat folgendes geschrieben:
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):

Hugging is an action applying to one thing. Report hugging: say "Du umarmst [den noun]."

Understand "umarm [something]" as hugging.


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

Understand the commands "herz" and "liebkos" as "umarm".

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

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

Code:
Verb 'umarm'
* 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:

Code:
Verb 'umarm'  'herz' 'liebkos'
* noun -> Hugging;


An den Grammar-Lines (die mit dem Stern) hat sich nichts geändert, nur die Verben wurden erweitert.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mario Donick
BeitragVerfasst am: Mo, 23 Apr 2012 - 10:57  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
ChristianB
BeitragVerfasst am: Mo, 23 Apr 2012 - 11:23  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

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.

Before entering the dumpster when dumpster is closed: try opening the dumpster.

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

After opening the dumpster, say "Gestank schlägt dir entgegen, als du den Müllcontainer öffnest."

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.

After opening the dumpster, say "Gestank schlägt dir entgegen, als du den Müllcontainer öffnest."; continue the action.
_________________
Worichtung willst du ingehen?


Zuletzt bearbeitet von ChristianB am Mo, 23 Apr 2012 - 15:22, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 23 Apr 2012 - 11:32  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Mario Donick hat folgendes geschrieben:
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.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mario Donick
BeitragVerfasst am: Mo, 23 Apr 2012 - 11:39  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

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

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

Code:
var umarm : action  // Variable vom Typ "action" definieren
 
umarm = new (hugging)   // Variable als Objekt der Klasse "hugging" initialisieren


Und dann gäbe es

Code:
function umarm.check()
function umarm.report () ...
function umarm.carryout () ...


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

Code:
function umarm.constructor;
begin
  umarm.commands := 'umarm/knuddel/drück';
end;


Und dann noch:

Code:
function umarm.report (n: actor);
begin
  writeln ('Du umarmst ' + actor.name + '.');
end;



Kann man diese ganzen natürlichsprachlichen Befehle in etwa so verstehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Mario Donick
BeitragVerfasst am: Mo, 23 Apr 2012 - 11:42  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

ChristianB hat folgendes geschrieben:

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).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Mikawa
BeitragVerfasst am: Mo, 23 Apr 2012 - 13:00  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 23 Apr 2012 - 13:13  Antworten mit Zitat
Experte
Experte


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

Mario Donick hat folgendes geschrieben:
Hm, nein, das geht nicht, dann kann ich zwar "frag arzt nach mein schwester" schreiben, aber nicht "frag arzt nach meiner schwester".

Das liegt dann aber daran, dass es irgendwo anders Definitionen gibt, die "meine" oder "meiner" mit Endung benutzen.

Wie es Christian schon gesagt hat: GerX und deform mögen Endungen nicht, die werden vor der Satzanalyse einfach abgeschnitten, und zwar so:

  • Wenn es das Wort gibt, wird nichts abgeschnitten.
  • Wenn man -e, -s oder -n abschneiden kann und dann ein Wort erhält, das es gibt, wird der letzte Buchstabe abgeschnitten.
  • Wenn man -em, -en, -er oder -es abschneiden kann und dann ein Wort erhält, das es gibt, werden die letzten beiden Buchstaben abgeschnitten.
  • Wenn kein Wort gefunden wird, bleibt das Wort so, wie es ist.

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.

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.

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.)

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

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 "stop the action" "return true" und "continue the action" heißt "return false".)

Die Priorität wird intern von I7 bestimmt. Je spezieller eine Regel ist, umso höher ist ihre Priorität. "Report taking the banana if monkey feeding is happening" hat also eine höhere Priorität als "Report taking".

Eine Regel ist quasi eine Liste von Routinen, im Pseudocode:
Code:

    function exec(funct rule[]): bool
    begin
        foreach r in rule begin
            if r() then return true;
        end;
        return false;
    end;

(Nur, dass es in Pascal keine Funktions-Zeiger gibt. Und kein foreach.) Die letzte Funktion ist immer die allgemeine Regel aus der Standardbibliothek.

Ein Zug geht dann, grob gesprochen, so:
Code:

    function turn(funct rule[]): bool
    begin
        if exec(before) then return true;
        if exec(instead) then return true;
        if exec(check) then return true;
        if exec(carry_out) then return true;
        if exec(after) then return true;
        if exec(report) then return true;
        return false;
    end;

Einige der Regeln hören, wenn man nichts anderes angibt mit "stop", andere mit "continue" auf. Aus

Instead of taking the rod when it is hot, say "Ouch!".

wird:
Code:

rule::instead begin
    if (action = Take) and (noun = rod) and (is(rod, hot)) begin
        writeln("Ouch!");
        return true; (* Nicht explizit angegeben! *)
    end;
    return false; (* Kein heißes Eisen *)
end;
Aus

Report opening the treasure chest: "Auf diesen Augenblick hast du schon seit [turn count in words] Zügen gewartet!"

wird:
Code:

rule::report begin
    if (action = Open) and (noun = chest) begin
        writeln("Auf diesen Augenblick hast du schon seit ",
            num(turns), "Zügen gewartet!");
        (* Kein return true hier *)
    end;
    return false;
end;

_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 23 Apr 2012 - 14:57  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Martin hat folgendes geschrieben:
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.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mario Donick
BeitragVerfasst am: Mo, 23 Apr 2012 - 21:15  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

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:

Code:
instead of thinking about "Wetter":
    if FWetter is 1:
        say "Immer das gleiche Mistwetter.";
    otherwise:
        say "Wie schön, die Sonne scheint.";
        increase the value of FStimmung by 1.


Soll ich stattdessen lieber schreiben:

Code:
carry out thinking about "Wetter":
   say "Immer das gleiche Mistwetter.";

instead of thinking about "Wetter" when FWetter is 1:
   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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
ChristianB
BeitragVerfasst am: Mo, 23 Apr 2012 - 22:28  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Mario Donick hat folgendes geschrieben:
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" ...

Code:
Check thinking about (this is the block thinking about 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:

The block thinking rule is not listed in any rulebook.

(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.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mario Donick
BeitragVerfasst am: Di, 24 Apr 2012 - 6:37  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
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