Introducción a la IA en Source

Bueno, yo voy a explicaros aquí lo mas básico e imprescindible para poder tener una inteligencia artificial sin ninguna complejidad pero funcional.

Info Node

Lo primero (y lo único realmente imprescindible) para crear la inteligencia artificial de los npcs es la entidad info_node. Para que lo entendáis, los npcs aparecen a oscuras y no pueden ver nada o casi nada nada mientras no les demos una linterna por así decirlo… pues esa linterna seria el info_node, le permite al npc ver el escenario y lo que le rodea con claridad. Sin esta entidad el npc apenas puede ver a unos metros de distancia y si con alguna entidad (como la scripted_sequence) le ordenásemos ir a un punto un poco alejado de el no podria ir (por poner un ejemplo vaya), asi que lo primero que deberemos hacer al colocar uno o varios npcs en el mapa es llenarlo de info_nodes, ponerlos cada pocos metros mas o menos como vemos en esta imagen:

tutorial_ia_1.jpg

Dependerá también un poco de la zona que estemos trabajando, si es un sitio amplio podemos dispersarlos un poco mas y no poner tantos, pero en sitios estrechitos y con esquinas (el rellano de una escalera por ejemplo) si convendría ponerlos mas seguidos y agrupados.

Una vez colocados los info_node los npcs ya tendrán la navegación hecha para poder moverse con soltura por el mapa para perseguir al jugador, siguirlo o interaccionar con otros npcs.

Ahora vamos a poner esta navegación en practica con un par de entidades IA muy muy sencillas cuya combinación va a pasar a un metropolice (o cualquier otro enemigo) del lado oscuro a nuestro bando, sii señor, será un aliado nuestro.

Ai Goal Follow

Ya que el metropolice va a ser un aliado resultaría muy útil que nos siga allá donde vayamos (como si fuese un escolta) así que vamos a utilizar para ello la entidad ai_goal_follow, da igual donde la coloquemos. Esta entidad simplemente hará que el metropolice se nos acople y nos siga hasta el fin del mundo nadando si hace falta y teneis que configurarla así:

tutorial_ia_2.jpg

Name: Si queremos activarla o desactivarla en algún momento necesitaremos un nombre para hacerlo pero si queremos que comience activada y no queremos desactivarla nunca no hará falta (poned nombre si queréis pero no hace falta).

Actor to affect: Aquí habrá que meter el nombre del npc que va a seguir al Target (nosotros meteremos el nombre del metropolice).

Target Entity: Aquí escribiremos en nombre del npc (o jugador) al que va a seguir el Actor (nosotros pondremos !player para que nos siga a nosotros).

Start Active: Su mismo nombre lo indica xD si le decimos que si el npc comenzara a seguirnos desde el comienzo del mapa y si le decimos que no entonces no (nosotros pondremos que yes para no tener que activar la entidad).

Y ya esta lista la entidad.

Ai Relationship

Esta entidad controla la relación que tienen los npcs con el jugador y entre ellos mismos. Un metropolice al ser un enemigo tiene una relación predeterminada con el jugador de hostilidad y a su vez tiene una relación de amistad con los otros metropolices ¿no? bien pues con esta entidad podemos cambiar esto a nuestro antojo. En este caso lo que nosotros queremos es cambiar esa relación inicial de hostilidad por una de amistad para que nos siga pero sin dispararnos y para eso tenemos que plantar en el mapa un ai_relationship (da igual donde) y configurarlo de la siguiente manera:

tutorial_ia_3.jpg

Name: Si queremos activarla o desactivarla en algún momento necesitaremos un nombre para hacerlo pero si queremos que comience activada y no queremos desactivarla nunca no hará falta (poned nombre si queréis pero no hace falta).

Subject: Aqui deberemos poner el nombre del npc al que se desea cambiar la relación que tiene con otro individuo (en este caso nosotros introduciremos el nombre del metropolice).

Target: Aqui deberemos escribir el nombre del npc (o jugador) objetivo de este cambio de relación (nosotros pondremos !player para que cambie la relación del Subject para con nosotros).

Lo que se alterará una vez introducidos los nombres sera la relación del Subject con el target pero no la relación del target con el Subject (dato a tener en cuenta). También podemos introducir una clase de npc en vez del nombre de un npc determinado en ambas casillas (podemos poner npc_metropolice en vez del nombre de un metropolice concreto y podemos hacer lo mismo con el Target), si hacemos esto todos los npcs de la clase que hayamos puesto en Subject cambiaran su relación con todos los npcs de la clase que hayamos escrito en Target.

Disposition: Esta sera la nueva relación que tendrá el Subject con el Target, podemos elegir entre Like (aliado), Neutral (ni enemigo ni amigo), Hate (enemigo) y Fear (es enemigo pero como con temor, tendrá mas precaución al enfrentarse al Target que si pones Hate). Nosotros vamos a poner Like.

Start Active: Si le decimos que si la relación ya estará aplicada al comenzar el mapa y si decimos que no pues no (nosotros vamos a decir que Yes para no tener que activar la entidad).

Reciprocal: “Reciproco” esto hace referencia a si el sentimiento es mutuo xDDD si le decimos que si entonces la relación también se aplicara al Target, ambos sujetos tendrán la misma relación uno con otro (en este caso al ser nosotros mismos el Target es una tontería poner que si).

Y ya esta lista la entidad.

Finalizando

Bueno pues ya tenemos un metropolice desertor a nuestro favor xDD tened en cuenta que si dejáis de poner una de las 2 entidades el metropolice no os seguirá u os disparara en cuanto os vea así que aseguraos de que colocáis las dos entidades correctamente configuradas, y si no meteis info_nodes o muy pocos tendrá algunos problemas en seguiros.

Y ya esta, ya teneis un poco la base de la inteligencia artificial y un par de herramientas que aparte de un escolta muy curioso os dará bastante juego con los npcs.

Eso es todo amigos, hasta el proximo tuto xDD ^^

Un saludo.

source/mapas/introduccion_ia_source.txt · Última modificación: 2011/06/15 17:31 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki



GAS Style basado en Prototype Style © 2008 ShadowFlames Development
Original Design by Frost - Maintained and Modified by Ika

Traducción al español por Huan Manwë