¿Qué tipo de operadores o funciones debe tener un lenguaje mágico?

Voy a entrar en detalles considerables en el diseño de un lenguaje mágico para un sistema de juego. El mundo es un mundo clásico de alta fantasía, con la mayoría de los tropos que se pueden esperar de la vieja escuela D&D. El sistema mágico es algo único en el sentido de que lo estoy diseñando en torno a efectos, funciones y operadores. He desarrollado lo que creo que es una lista bastante completa de efectos que se pueden combinar de diferentes maneras para producir la mayoría de los "hechizos" clásicos que existen en la literatura fantástica clásica.

Los efectos tendrán costos asociados en energía (que se reducirán a un sistema de puntos que no es muy relevante para esta pregunta). Un "hechizo" consistirá en uno o más "Efectos" que se pueden combinar usando funciones. No hay un límite superior para la cantidad de efectos que se pueden combinar en un "hechizo", pero debe haber un costo de puntos que aumente exponencialmente a medida que se agregan más y más efectos a un solo hechizo.

Mi pregunta es: para lograr un "lenguaje" flexible que pueda usarse para desarrollar muchos tipos diferentes de hechizos con (a partir de ahora) 26 "Efectos", ¿qué operadores y funciones necesito? Además, debo asegurarme de que el costo de puntos se vuelva prohibitivo después de 4-5 "Efectos", y creo que debo asociar un costo a la función, que aumentaría en un múltiplo de cuántas funciones hay.

He investigado la lógica simbólica, pero hay mucho enfoque en las declaraciones de verdadero/falso, que no es necesariamente lo que busco. Estoy pensando en algo más en la línea de un lenguaje de programación muy simple. No quiero algo masivo y complicado, entonces, ¿cuál sería el número mínimo y el tipo de funciones para que sea útil y flexible?

[Editar] En respuesta a preguntas: estoy buscando algunas cosas específicas en cuanto a los operadores. Necesito la capacidad de "agregar" un efecto a un "hechizo". Necesito la habilidad de designar que un efecto viene antes que otro. El comportamiento condicional sería algo bueno. "Si esto, entonces X, si algo más, entonces Y". Quiero limitar la cantidad de elementos condicionales incrustados en un solo hechizo porque no quiero que alguien pueda simplemente presionar el hechizo "esto lo hace todo" que tiene básicamente todos los efectos incrustados, por lo que las condiciones incrustadas deberían tener un costo. Quiero la capacidad de retrasar un efecto: "esperar X tiempo antes de hacer Z". Creo que hay algunos otros conceptos básicos que debería incluir solo por el bien de la integridad.

[Editar II] En respuesta a los comentarios. Esto es lo que visualizo como un caso de uso más o menos: "Soy un mago aventurero genial en un juego en línea. Encontré este pergamino que tiene un hechizo de 'Dedos ardientes de llamas', lo llevaré a mi taller de magia y editarlo para crear un hechizo personalizado. Voy a eliminar el componente de "quema" mediante el uso de un editor de tipo de secuencias de comandos visuales en la interfaz de usuario. En su lugar, pondré un efecto "frío", agregaré un Función de temporizador para retrasar el efecto durante 3 segundos y agregar un efecto de "oscuridad" que se produce de inmediato. Ahora mi hechizo personalizado causará oscuridad y luego soltará un efecto de escarcha fría en un objetivo cuando se lance. Lo renombraré "Frío Dark Hands" y guárdelo en un pergamino.

Como referencia, mi lista de "Efectos" (cada uno representará un "espectro" de muy menor a muy mayor, con costos de puntos calculados sobre esa base):

1. Fuerza

2. Llama

3.Frío

4.oscuridad

5.Cambiar el clima

6 agua

7. Perno de energía

8. Rayo

9. Transformar lanzador

10. Transformar objetivo

11.Invisibilidad

12. Cambiar tamaño

13. Levitar objetivo

14. Drenar vida

15. Vuelo

16. Conjurar

17.Teletransportarse

18. Maldecir/Bendecir

19. Alteración

20.Ilusión

21. Conjurar cosas

  1. Control mental

  2. Campo de fuerza

  3. Lore/objeto de lectura

  4. disipar magia

  5. Luz

¿También puede obtener comentarios útiles sobre esta pregunta en rpg.stackexchange.com ?
¿Podría dar ejemplos o descripciones más detalladas de las funciones con las que le gustaría terminar? Simplemente me resulta difícil imaginar cuál es el resultado que deseas.
Estoy completamente de acuerdo con @LioElbammalf porque puedo detallar los operadores y funciones básicos de programación (y, o no, si, etc.) y cómo funcionarían, pero si no estás buscando algo así, gané No pierdas mi tiempo respondiendo.
Aquí es donde inmediatamente pienso en Powershell: proponga una lista de sustantivos y una lista de verbos; tus "spell-lets" se convierten entonces en una combinación de un verbo y un sustantivo, y pueden vincularse de varias maneras para producir los efectos finales que deseas. Por ejemplo, con los verbos "Crear", "Aplicar" y "Lanzar", y los sustantivos "Objeto", "Proyectil" y "Llama", puede obtener "Crear-Proyectil | Lanzar-Objeto" por el equivalente de Magia. Misil, y "Crear-Proyectil | Aplicar-Llama | Lanzar-Objeto" para el equivalente de Bola de Fuego.
Esta puede ser una pregunta muy difícil de responder. La respuesta real depende de la naturaleza de tu juego. Desea ajustar estos sistemas para que se ajusten a su usuario. Si se trata de un juego de rol "casual", querrás que sea rápido, fácil y rápido. Si es así, es posible que desee reducir el lenguaje. Por otro lado, si te diriges a los veteranos de EVE (también conocido como Online Spaceships), querrás un lenguaje muy avanzado. Su juego de rol causal no necesita estar muy equilibrado, mientras que su juego de rol dirigido a EVE requerirá esfuerzos de equilibrio masivos que dan forma a la naturaleza del lenguaje.
Además, algo con lo que quizás te diviertas es un pasatiempo mío: las redes semánticas . Dependiendo de la interfaz de usuario del sistema de lanzamiento de hechizos, puede ser un punto de partida interesante para explorar.
¿Qué significa "función" en el contexto de este lenguaje? Y, en realidad, ¿qué entiendes por "lenguaje"? Los lenguajes humanos no contienen funciones ni operadores. Los lenguajes informáticos incluyen operadores, pero rara vez incluyen más de un puñado de funciones, pero permiten al usuario definir funciones.
En primer lugar, ¿has visto Ars Magica? Tienen 10 reinos que pueden verse afectados por 5 verbos (Crear, Destruir, Percibir, Transmutar, Controlar) y puedes terminar con bastantes buenas combinaciones. En segundo lugar, muchos de sus efectos parecen muy similares. Lightning y Energy Bolt, por ejemplo. Además, tener Transform Caster y Transform Target no tiene sentido en un sistema modular, donde 'transformar' sería el efecto y el objetivo estaría determinado por una 'palabra objetivo' o algo así.
@CortAmmon, esto es para un sistema muy elaborado mucho más cercano a EVE que un juego de rol casual.
@AlexP buen punto. Esto está mucho más cerca de un lenguaje informático básico simplificado que de un lenguaje humano. Debe seguir el formato de incluir operadores y funciones potencialmente definidas por el usuario.
@JeffZeitlin Esa es una idea muy interesante. Eso podría encajar muy bien, ya que está siendo diseñado para un juego de computadora. ¡Gracias!
@CM_Dayton Pensé en eso, y puedo intentarlo allí, pero quería intentarlo aquí porque esto no es para un juego de rol de lápiz y papel, y la mayoría de las preguntas en ese intercambio se refieren a sistemas de reglas específicas, donde esto realmente es un pregunta más amplia sobre lo que constituye un marco/lenguaje lógico "completo".
Otro truco con el que quizás quieras jugar es hacer que el lanzamiento de hechizos sea más dinámico. En lugar de solo tener puntos de hechizo, haga que algunos hechizos sean físicamente más difíciles de lanzar al requerir más precisión por parte del usuario. Sus opciones se abren sustancialmente si el acto de lanzar es una secuencia dinámica de entradas en lugar de un solo clic de botón. ¿Encajaría tal sistema con su mundo? Si es así, podría ofrecer una respuesta que tiene menos piezas pero que puede ser igual de poderosa o incluso más poderosa.
Hay un mod de minecraft llamado Psi que es un mod de programación de hechizos inspirado en la novela/anime web The Irregular at Magic Highschool . Muy fascinante, podrías sacar algunas ideas de ello.
@JBiggs ¿Qué sucede cuando haces un aprendizaje mágico profundo? golems?

Respuestas (3)

No estoy del todo seguro de lo que quiere, pero si lo he imaginado correctamente, una interpretación de pseudocodificación puede ser algo como:

Las funciones toman los efectos y otras propiedades, de modo que podría tener un pergamino que, en forma básica, dice:

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

Donde podría tener una función para cada parte del cuerpo y una forma generalizada podría verse como:Scroll Title: object( Primary_effect, degree_of_primary_effect, primary_timing, secondary_effect, degree_of_secondary_effect, secondary_timing ...,mana_level)

Esta función también podría incluir otras características de un efecto que no sean el tiempo, la forma, el proyectil, la estática, la runa, etc.

Los detalles de la función se verían así:

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

Ahora, esto en realidad no le brinda todos los detalles sobre cómo su función realiza esta tarea, pero podría darle la libertad de escribir la función:

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

Lo cual, pasando por el código general anterior, sería:

  • Comprueba que el maná que se le ha dado no haya bajado a 0 (en este caso, nuestro pergamino quiere que se le den 200 maná) y repite lo que se requiere hasta que se agote todo el maná.

  • Verifique si hemos alcanzado nuestro tiempo principal (tiempo = 3 para nuestro caso, por lo que durante los primeros tres segundos seguimos adelante).

  • Continuando, llegamos al tiempo secundario (0 en nuestro caso, por lo que ingresamos la declaración if)

    • Ahora comprobamos si tenemos suficiente maná (es decir, mana_level es más alto que el coste de maná del efecto)
      • Si tenemos suficiente, ingresamos esta segunda declaración if y aplicamos el efecto a nuestro objeto y eliminamos la cantidad requerida de maná para realizar este efecto.

Recorremos con el tiempo aumentando en un segundo a medida que avanzamos y cada efecto se ejecuta solo mientras el maná que hemos proporcionado puede manejar.

No tengo idea si esto es lo que estás buscando, pero disfruté escribiéndolo de todos modos, aunque espero que te ayude.

Para desalentar el comportamiento de munchkin, necesitará equilibrar los costos con combinaciones. Si no lo hace, obtendrá algunas combinaciones bastante creativas de efectos aparentemente pequeños para dar un golpe que costará relativamente poco. Al mismo tiempo, los combos más poderosos rara vez se usarán y pondrán un freno al juego.

desea utilizar una fórmula que aumente a un nivel multiplicativo con un costo base, el mayor que se utilizará.

Entonces, para escribir un pseudocódigo para ti....

Los mínimos de costo combinado serían...

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

entonces se podrían calcular los costos...

E = efecto

Val = E1(costo) * E2(Costo) si val < x val = x

etcétera.

Entonces, podría hacer un costo base de un solo efecto, el costo del efecto.

Por el bien del argumento, digamos que el calor tiene un costo de 2 y el frío tiene un costo de dos, y al multiplicar sus costos, obtienes cuatro, pero estableces un costo base de 6, por lo que el combo cuesta seis, donde la luz tiene un costo de 3 y la calefacción con un coste de tres TAMBIÉN serían seis. La luz con un costo de tres y la oscuridad con un costo de tres serían nueve, no afectadas por el mínimo.

Puedes modificar la fórmula desde allí.

Muy útil y definitivamente una buena manera de calcular los costos. ¡Gracias! Todavía estoy tratando de entender el alcance total del lenguaje; qué operadores debo tener para tener un sistema de lenguaje razonablemente flexible.
@JBiggs también puede establecer un valor MAX si desea modificarlo para permitir combinaciones un poco más poderosas también.

¿Alguna vez has leído el libro de consulta de GURPS Magic? Contiene un lenguaje verbal para la magia que básicamente requiere que cada hechizo contenga un Sustantivo y un Verbo como un hechizo, con puntos de habilidad en los sustantivos que conoces y los verbos que conoces. Proporciona un par de ejemplos, pero se enumera como una regla opcional, por lo que solo obtiene aproximadamente la mitad de una página de texto en el libro de reglas, si la memoria no me falla.

Pero ese marco puede funcionar mejor que tener una lista de todos los hechizos posibles. Configure una gramática simple y luego deje que los jugadores elijan sus listas de hechizos al estilo de Mad Libs.

Entonces, un hechizo tiene, quizás, una estructura como Adjetivo Sustantivo Verbo .

Entonces, la PC podría tener hechizos que usan esa estructura como:

  • Flaming Arrow Shoots que es más o menos equivalente al hechizo (A)D&D Magic Missile.
  • Warm Hand Heals es un simple hechizo de curación basado en el tacto.
  • White Lightning Blasts dispara un rayo a un objetivo.
  • La potenciación de la luz resplandeciente puede hacer que una espada sea más fuerte (y brille).

etcétera.

Pero me centraría en las reglas de la gramática en lugar de una lista predefinida de todas las palabras/hechizos posibles. Esto permite que tus jugadores tengan más creatividad y también hace que la magia en sí sea más única.

Esa es una gran opción para un juego de rol de lápiz y papel, pero en realidad no se usará para un juego de rol PnP. Necesito que todo esté definido de antemano, aún sabiendo que va a ser un sistema grande, engorroso y muy detallado.
dado que es para un juego, creo que hacerlo como usted sugirió hará que sea considerablemente más difícil de codificar.