Welche Art von Operatoren oder Funktionen sollte eine magische Sprache haben?

Ich gehe sehr ins Detail, um eine magische Sprache für ein Spielsystem zu entwerfen. Die Welt ist eine klassische High-Fantasy-Welt mit den meisten Tropen, die man von D&D der alten Schule erwarten könnte. Das magische System ist insofern einzigartig, als ich es um Effekte, Funktionen und Operatoren herum entwerfe. Ich habe eine meiner Meinung nach ziemlich umfassende Liste von Effekten entwickelt, die auf verschiedene Weise kombiniert werden können, um die meisten der klassischen "Zaubersprüche" zu erzeugen, die in der klassischen Fantasy-Literatur existieren.

Wirkungen sind mit Energiekosten verbunden (was auf ein Punktesystem hinausläuft, das für diese Frage nicht allzu relevant ist). Ein „Zauber“ besteht aus einem oder mehreren „Effekten“, die durch Funktionen kombiniert werden können. Es gibt keine Obergrenze dafür, wie viele Effekte in einem "Zauber" kombiniert werden können, aber es sollte exponentiell steigende Punktkosten geben, wenn mehr und mehr Effekte zu einem einzelnen Zauber hinzugefügt werden.

Meine Frage ist: Welche Operatoren und Funktionen benötige ich, um eine flexible "Sprache" zu erreichen, mit der viele verschiedene Arten von Zaubersprüchen mit (derzeit) 26 "Effekten" entwickelt werden können? Außerdem muss ich sicherstellen, dass die Punktkosten nach 4-5 "Effekten" unerschwinglich werden, und ich denke, ich muss der Funktion Kosten zuordnen, die sich um ein Vielfaches der Anzahl der Funktionen erhöhen würden.

Ich habe mich mit symbolischer Logik befasst, aber es liegt ein großer Fokus auf Wahr/Falsch-Aussagen, was nicht unbedingt das ist, wonach ich suche. Ich denke an etwas mehr im Sinne einer sehr einfachen Programmiersprache. Ich möchte nichts Massives und Kompliziertes, also was wäre die minimale Anzahl und Art von Funktionen, um nützlich und flexibel zu sein?

[Bearbeiten] Als Antwort auf Fragen: Ich suche nach einigen bestimmten Dingen in Bezug auf Operatoren. Ich brauche die Fähigkeit, einem "Zauber" einen Effekt "hinzuzufügen". Ich brauche die Fähigkeit zu bestimmen, dass ein Effekt vor einem anderen kommt. Bedingtes Verhalten wäre eine gute Sache. "Wenn dies, dann X, wenn etwas anderes, dann Y". Ich möchte die Anzahl der bedingten Elemente, die in einen einzelnen Zauber eingebettet sind, begrenzen, weil ich nicht möchte, dass jemand in der Lage ist, einfach den „Das macht alles“-Zauber zu treffen, der im Grunde alle Effekte eingebettet hat, also sollte das Einbetten von Bedingungen etwas kosten. Ich möchte die Möglichkeit haben, einen Effekt zu verzögern: "Warte X Mal, bevor du Z machst". Ich denke, es gibt noch einige andere Grundlagen, die ich nur der Vollständigkeit halber einbeziehen sollte.

[Bearbeiten II] Als Antwort auf Kommentare. Hier ist, was ich mir mehr oder weniger als Anwendungsfall vorstelle: „Ich bin ein cooler, abenteuerlustiger Zauberertyp in einem Online-Spiel, ich habe diese Schriftrolle gefunden, auf der der Zauber „Brennende Finger der Flamme“ steht, zu der ich gehen werde meine Zauberwerkstatt und bearbeite sie, um einen benutzerdefinierten Zauber zu erstellen. Ich werde die "brennende" Komponente entfernen, indem ich einen visuellen Skript-Editor in der Benutzeroberfläche verwende. An ihrer Stelle füge ich einen "kalten" Effekt ein, füge einen hinzu Timer-Funktion, um den Effekt um 3 Sekunden zu verzögern und einen „Dunkelheits"-Effekt hinzuzufügen, der sofort eintritt. Jetzt verursacht mein benutzerdefinierter Zauber Dunkelheit und lässt dann einen kalten Frosteffekt auf ein Ziel fallen, wenn er gewirkt wird. Ich werde ihn in „Kälte Dark Hands" und speichere es in einer Schriftrolle.

Als Referenz meine Liste von "Effekten" (diese stellen jeweils ein "Spektrum" von sehr gering bis sehr groß dar, wobei die Punktkosten auf dieser Grundlage berechnet werden):

1. Kraft

2. Flamme

3. Kalt

4. Dunkelheit

5.Wetter ändern

6.Wasser

7. Energiebolzen

8.Blitz

9. Verwandle den Caster

10.Ziel transformieren

11. Unsichtbarkeit

12. Größe ändern

13. Ziel schweben lassen

14.Drain Life

15.Flug

16.Beschwören

17.Teleportieren

18.Fluch/Segen

19.Änderung

20.Illusion

21.Zeug heraufbeschwören

  1. Bewusstseinskontrolle

  2. Kraftfeld

  3. Überlieferung/Objekt gelesen

  4. Magie zerstreuen

  5. Licht

Können Sie Beispiele/detailliertere Beschreibungen der Funktionen geben, die Sie am Ende haben möchten? Ich finde es nur schwierig, mir vorzustellen, was das gewünschte Ergebnis ist.
Ich stimme @LioElbammalf voll und ganz zu, weil ich die grundlegenden Programmieroperatoren und -funktionen (und, oder, nicht, wenn usw.) und ihre Funktionsweise detailliert beschreiben kann, aber wenn Sie nicht nach so etwas suchen, habe ich gewonnen Verschwende meine Zeit nicht mit Antworten.
Hier denke ich sofort an Powershell – erstelle eine Liste von Substantiven und eine Liste von Verben; Ihre "Zaubersprüche" werden dann zu einer Kombination aus einem Verb und einem Substantiv, und sie können auf verschiedene Weise miteinander verknüpft werden, um die gewünschten Endeffekte zu erzielen. Mit den Verben „Create“, „Apply“ und „Throw“ und den Substantiven „Object“, „Projectile“ und „Flame“ erhalten Sie beispielsweise „Create-Projectile | Throw-Object“ für das Äquivalent von Magic Missile und "Create-Projectile | Apply-Flame | Throw-Object" für das Äquivalent von Fireball.
Dies kann eine sehr schwierig zu beantwortende Frage sein. Die wirkliche Antwort hängt von der Art Ihres Spiels ab. Sie möchten diese Systeme an Ihre Benutzer anpassen. Wenn dies ein "lässiges" Rollenspiel ist, möchten Sie, dass es schnell, einfach und schnell ist. Wenn dies der Fall ist, möchten Sie vielleicht die Sprache tatsächlich reduzieren. Auf der anderen Seite, wenn Sie Veteranen von EVE (alias Online Spaceships) ansprechen, werden Sie eine sehr fortgeschrittene Sprache wollen. Ihr kausales Rollenspiel muss nicht sehr ausgewogen sein, während Ihr auf EVE ausgerichtetes Rollenspiel massive Ausgleichsbemühungen erfordert, die die Natur der Sprache prägen.
Außerdem ist etwas, das Ihnen vielleicht Spaß machen könnte, ein Hobby von mir: semantische Netze . Abhängig von Ihrer Benutzeroberfläche zum Zauberspruchsystem kann dies ein interessanter Ausgangspunkt für Sie sein.
Was bedeutet „Funktion“ im Kontext dieser Sprache? Und was verstehst du eigentlich unter „Sprache“? Menschliche Sprachen enthalten keine Funktionen oder Operatoren. Computersprachen enthalten Operatoren, aber selten mehr als eine Handvoll Funktionen – aber sie erlauben dem Benutzer, Funktionen zu definieren .
Zuerst einmal, hast du Ars Magica gesehen? Sie haben 10 Reiche, die von 5 Verben beeinflusst werden können (Create, Destroy, Perceive, Transmute, Control) und Sie können am Ende einige gute Kombinationen haben. Zweitens scheinen viele Ihrer Effekte sehr ähnlich zu sein. Lightning und Energy Bolt zum Beispiel. Außerdem macht es keinen Sinn, Transform Caster und Transform Target in einem modularen System zu haben, in dem „Transform“ der Effekt wäre und das Ziel durch ein „Zielwort“ oder so etwas bestimmt würde.
@CortAmmon, das ist für ein sehr ausgeklügeltes System viel näher an EVE als an einem Gelegenheits-Rollenspiel.
@AlexP guter Punkt. Dies kommt einer abgespeckten grundlegenden Computersprache viel näher als einer menschlichen Sprache. Es sollte dem Format folgen, Operatoren und möglicherweise benutzerdefinierte Funktionen einzuschließen.
@JeffZeitlin Das ist eine sehr interessante Idee. Das könnte sehr gut passen, da dies für ein Computerspiel entwickelt wurde. Vielen Dank!
@CM_Dayton Ich habe daran gedacht, und ich kann es dort versuchen, aber ich wollte es hier versuchen, weil dies nicht für ein Pen-and-Paper-Rollenspiel ist und die meisten Fragen zu diesem Austausch sich auf bestimmte Regelsysteme beziehen, bei denen dies wirklich ein ist allgemeinere Frage darüber, was ein "vollständiges" logisches Framework / eine "vollständige" logische Sprache ausmacht.
Ein weiterer Trick, mit dem Sie vielleicht spielen möchten, besteht darin, das Wirken von Zaubersprüchen dynamischer zu gestalten. Anstatt nur Zauberpunkte zu haben, machen Sie einige Zauber physisch schwieriger zu wirken, indem Sie mehr Präzision von Seiten des Benutzers verlangen. Ihre Optionen eröffnen sich erheblich, wenn der Vorgang des Castings eine dynamische Abfolge von Eingaben und nicht ein einziger Tastenklick ist. Würde ein solches System in Ihre Welt passen? Wenn ja, könnte ich eine Antwort anbieten, die weniger Teile hat, aber genauso mächtig oder sogar mächtiger sein kann.
Es gibt einen Minecraft-Mod namens Psi , der ein Zauberprogrammierungs-Mod ist, der vom Webroman /Anime The Irregular at Magic Highschool inspiriert ist . Sehr faszinierend, vielleicht bekommen Sie einige Ideen davon.
@JBiggs Was passiert, wenn Sie Magic Deep Learning machen? Golems?

Antworten (3)

Ich bin mir nicht ganz sicher, was Sie wollen, aber wenn ich es mir richtig vorgestellt habe, könnte eine Psudo-Codierungsinterpretation so aussehen:

Funktionen nehmen die Effekte und andere Eigenschaften auf, so dass Sie eine Schriftrolle haben könnten, die in einem einfachen Wort sagt:

burning fingers of flame: fingers(fire, burning,0,40)

Wo Sie für jeden Körperteil eine Funktion haben könnten und eine verallgemeinerte Form wie folgt aussehen könnte:Scroll Title: object( Primary_effect, degree_of_primary_effect, primary_timing, secondary_effect, degree_of_secondary_effect, secondary_timing ...,mana_level)

Diese Funktion könnte auch andere Merkmale eines Effekts als Timing, Form, Projektil, Statik, Rune usw. übernehmen

Die Details der Funktion würden wie folgt aussehen:

object( Primary_effect, degree_of_primary_effect, primary_timing, secondary_effect, degree_of_secondary_effect, secondary_timing ...,mana_level): time = 0 whilst(mana_level>0):
if time>=primary_timing: if mana_level-Effect(primary_effect,degree_of_primary_effect).ManaCost >0: object.Set.Effect(primary_effect,degree_of_primary_effect) mana_level=mana_level-Effect(primary_effect,degree_of_primary_effect).ManaCost if time>=secondary_timing: if mana_level-Effect(secondary_effect,degree_of_secondary_effect).ManaCost > 0: object->SetEffect(secondary_effect,degree_of_secondary_effect) mana_level=mana_level-Effect(secondary_effect,degree_of_secondary_effect).ManaCost time+=1

Das gibt Ihnen jetzt nicht alle Details darüber, wie Ihre Funktion diese Aufgabe ausführt, aber es könnte Ihnen die Freiheit geben, die Funktion zu schreiben:

Hand( cold, freezing, 3, Darkness, gloom,0 ,200):

Was, wenn man den obigen allgemeinen Code durchgeht, Folgendes bedeuten würde:

  • Überprüfe, ob das ihm gegebene Mana nicht auf 0 gefallen ist (in diesem Fall möchte unsere Schriftrolle 200 Mana erhalten) und überprüfe, was erforderlich ist, bis das gesamte Mana aufgebraucht ist.

  • Überprüfen Sie, ob wir unsere primäre Zeit erreicht haben (Zeit = 3 für unseren Fall, also gehen wir in den ersten drei Sekunden weiter).

  • Weiter kommen wir zum sekundären Timing (0 in unserem Fall, also geben wir die if-Anweisung ein)

    • Jetzt prüfen wir, ob wir genug Mana haben (dh mana_level ist höher als die manaCost des Effekts)
      • Wenn wir genug haben, geben wir diese zweite if-Anweisung ein und wenden den Effekt auf unser Objekt an und entfernen die erforderliche Menge an Mana, um diesen Effekt auszuführen.

Wir durchlaufen die Schleife, wobei die Zeit im Laufe der Zeit um eine Sekunde zunimmt und jeder Effekt nur so lange läuft, wie das von uns bereitgestellte Mana ausreicht.

Keine Ahnung, ob das das ist, wonach Sie suchen, aber ich habe es trotzdem genossen, es zu schreiben - hoffe es hilft trotzdem.

Um Munchkin-Verhalten zu entmutigen, müssen Sie die Kosten durch Kombinationen ausgleichen. Wenn Sie dies nicht tun, erhalten Sie einige ziemlich kreative Kombinationen von scheinbar kleinen Effekten, um einen Schlag zu erzielen, der relativ wenig kostet. Gleichzeitig werden die stärkeren Kombos selten verwendet und dämpfen den Spielverlauf.

Sie möchten eine Formel verwenden, die auf einer multiplikativen Ebene mit den Basiskosten steigt, je größer die zu verwendenden sind.

Also, um etwas Pseudo-Code für Sie zu schreiben ....

Combo-Kosten-Minimum wäre ....

X, X+A, X+B, X+C......

dann könnten die kosten berechnet werden....

E = Wirkung

Wert = E1(Kosten) * E2(Kosten) wenn Wert < x Wert = x

usw.

Sie könnten also Basiskosten eines einzelnen Effekts bilden, die Kosten des Effekts.

Sagen wir der Argumentation halber, Hitze kostet 2 und Kälte kostet zwei, und durch Multiplizieren ihrer Kosten erhalten Sie vier, aber Sie legen Basiskosten von 6 fest, sodass die Kombination sechs kostet, wobei Licht Kosten hat von 3 und Hitze mit Kosten von drei wären AUCH sechs. Licht mit Kosten von drei und Dunkel mit Kosten von drei wären neun, nicht vom Minimum betroffen.

Sie können die Formel von dort aus optimieren.

Sehr hilfreich und definitiv eine gute Möglichkeit, die Kosten zu ermitteln. Vielen Dank! Ich versuche immer noch, den gesamten Umfang der Sprache in den Griff zu bekommen; welche Operatoren ich haben sollte, um ein halbwegs flexibles Sprachsystem zu haben.
@JBiggs Sie können auch einen MAX-Wert festlegen, wenn Sie ihn optimieren möchten, um auch etwas stärkere Kombinationen zu ermöglichen.

Haben Sie jemals das GURPS Magic Sourcebook gelesen? Es enthält eine verbale Sprache für Magie, die im Grunde erfordert, dass jeder Zauberspruch ein Substantiv und ein Verb enthält, wie ein Zauberspruch, mit Fertigkeitspunkten in den Substantiven, die Sie kennen, und den Verben, die Sie kennen. Es enthält ein paar Beispiele, ist aber als optionale Regel aufgeführt, sodass es im Regelbuch nur etwa eine halbe Seite Text enthält, wenn das Gedächtnis reicht.

Aber dieser Rahmen funktioniert vielleicht besser als eine Liste aller möglichen Zaubersprüche. Erstellen Sie eine einfache Grammatik und lassen Sie die Spieler dann ihre Zauberlisten im Mad Libs-Stil auswählen.

Ein Zauber hat also vielleicht eine Struktur wie Adjektiv Nomen Verb .

Dann könnte der SC Zaubersprüche haben, die diese Struktur verwenden wie:

  • Flammender Pfeilschuss , der ungefähr dem (A)D&D Magic Missile-Zauber entspricht.
  • Warm Hand Heals ist ein einfacher berührungsbasierter Heilzauber.
  • White Lightning Blasts feuert einen Blitz auf ein Ziel.
  • Glowing Light Strengths kann dazu führen, dass ein Schwert stärker wird (und leuchtet).

usw.

Aber ich würde mich eher auf die Regeln der Grammatik konzentrieren als auf eine vordefinierte Liste aller möglichen Wörter / Zaubersprüche. Dadurch haben Ihre Spieler mehr Kreativität und die Magie selbst wird einzigartiger.

Das ist eine großartige Option für ein Pen-and-Paper-Rollenspiel, aber dies wird eigentlich nicht für ein PnP-RPG-Spiel verwendet. Ich muss alles im Voraus definieren, auch wenn ich weiß, dass es ein großes, umständliches und sehr detailliertes System sein wird.
Da es für ein Spiel ist, denke ich, dass es das Programmieren erheblich erschweren wird, wenn Sie es so machen, wie Sie es vorgeschlagen haben.