No soy un diseñador de juegos, pero puedo ver algo que puede estar en el trabajo aquí ...
Object Oriented Programming permite este tipo de complejidad y dinamismo mediante la encapsulación de datos y la lógica perfectamente dentro de muchos objetos. Estos objetos pueden interactuar "verbalmente", utilizando mensajería entre objetos para delegar tareas entre sí. El remitente del mensaje no necesita saber cómo interpretará el receptor el mensaje, dejando el método de acción completamente al receptor. Al igual que en el mundo real, la delegación permite que todo funcione sin problemas.
Por ejemplo, cuando pides un risotto de champiñones de Del Posto en la ciudad de Nueva York, ¿lo pides volviendo a la cocina y hablando con el chef directamente? ¿Te pones un delantal y preparas el risotto tú mismo? ¿Conduces hasta la granja de hongos más cercana y recoges tus propios hongos? No, tu no. Simplemente delegue estas tareas al camarero, al equipo de chefs y al proveedor de productos, respectivamente. Para obtener su risotto de hongos, todo lo que tiene que hacer es decirle al camarero que lo quiere. El resto se hace automáticamente, a través de una cadena de delegación. Este mismo tipo de delegación probablemente exista en tu juego.
Ahora, volviendo a los objetos. Algunos objetos heredan datos y lógica de objetos primarios, y de esta manera, pueden tener una gran cantidad de datos/lógica en común; llamemos a estos hermanos En el ejemplo de la búsqueda de juegos, cada búsqueda es probablemente su propio "objeto de búsqueda", con los datos de línea base y la lógica heredada del padre 'quest padre'. Los hermanos de búsqueda se pueden diferenciar entre sí agregando datos/lógica adicionales que pertenecen a las misiones específicas.
Dependiendo de sus acciones en el juego (y sus selecciones en el menú del juego, tal vez), el objeto del juego puede intercambiar uno de los objetos de búsqueda activos para uno de sus hermanos. Muchas veces, esto se puede hacer con un comando muy simple (en pseudo-código, no el modelo de cualquier lenguaje de programación en particular):
gameObject.activeQuest -> getCurrentObject();
//returns the object containing all of the data/logic of the current active quest:
Gibbons_GoldenArtifacts
//Let's say the quest description is "Scour the Catacombs of Gibbon for a
mysterious treasure"
gameObject.activeQuest -> setCurrentObject(Gibbon_DefeatGhost)
//sets the activeQuest object (note that QUEST OBJECT contains baseline data/logic)
//assuming, say, Gibbon_DefeatGhost is an object like so:
Gibbon_DefeatGhost={QUEST OBJECT};
Gibbon_DefeatGhost.extend(
description="Defeat Gibbon's ghost to retrieve his golden artifacts";
objective="Defeat Gibbon's ghost";
questNPC="Gibbon's ghost";
questLocation="Gibbon's Inner Sanctum"
questTriggers[1]="When PLAYER enters Gibbon's Inner Sanction: Release Gibbon's ghost";
questTriggers[2]="When Gibbon is slain: Drop Gibbon's golden artifacts"
)
partir de ese momento, el propio objeto de juego probablemente va a interactuar con la búsqueda activa Objeto igual que siempre, pero el objeto de búsqueda activo puede percibir esas interacciones de formas que son diferentes de las formas de los objetos de búsqueda hermanos, lo que resulta en una experiencia de juego diferente.
espero no estar manipulando totalmente el payaso en éste ...
Una forma directa bastante para averiguar la respuesta a esto es abrir el juego en el editor oficial de mundo y ver cómo modelan estos datos. El editor está incluido en el juego. –