Curso: Modificando el Quake 2.

Iniciado por kain, Octubre 15, 2007, 03:17:34 AM

Tema anterior - Siguiente tema

kain

Hola

Visto que casi toda la info de Quake 2 esta en ingles, y en el foro todo esta centrado en Doom hago este pequeño "curso" si se le puede llamar asi de Programando el Quake 2, para aquellos que les gustaria que el hyperblaster disparara gallinas aqui lo puede hacer.

Pienso que la metologia de curso es la mejor se "inscriben" los que quieran y luego vemos el nivel medio de todos y empezamos, trataremos todos los temas referentes a Quake 2 como :

Modularización: El Engine del Quake 2 (idtech2) esta modularizado de una forma bastante peculiar).

Librerias: Quake 2 se divide en librerias, de render y de informacion esta ultima maneja las armas, los enemigos, la IA del juego, los items todo lo que define al juego como si si remplazamos esta libreria por la del heretic 2 por ejemplo el juego seria el heretic 2 (es un ejemplo para hacerme entender).

Cliente: Como se fijaron el ejecutable quake2.exe o quake2 tiene las especificaciones del cliente, el menu, la consola y lo mas importante el ensamblaje de las librerias de render y de información.

Graficos: Es en general als especificaciones de el formato de modelo md2 (modelos) y wal (texturas), es algo muy importante pues puedes saber programar todo pero no obtendras muchos resultados si no entiendes como funcionan los modelos y las texturas en el Quake 2.

Mapas: Preferi ahcer un apartado a este tema para centrarme en el, es bastante complicado empezar a mapear para Quake 2 pero luego le agarras el gustillo y no paras mas.

Estos son todos los temas que tendra este "curso", al final de este curso estaras apto para hacer un MOD o una TC y por que no tu propio juego (como Black Day's en mi caso).

Los que quieran inscribirse solo diganlo aca, si nadie se inscribe pues el tema se pudrira en el foro.

Se necesita :
Un editor de texto, en *nix el vim o el nano bastara, en widnows el notepad bastara favor de no usar el Word.
Conocimietnos de C y programación basica como estructura, variables, funciones, arrays bastaran, cualqueira piensa que es muy complicado pero no lo es tanto cuando lo aprendes.
Un compilador, en *nix bastara con el cc o el gcc en Windows recomiendo el Visual Estudio 6.0.
Un modelador, lo mejor seria el 3d Studio, el Maya o el Blender en su defecto el Milshape 3D.
Un programa grafico, Donde se puede editar y hacer texturas lo ideal seria Photoshop, Corel Draw, Gimp en su defecto Wally 1.16.
Y muchas ganas:P

Antes de comenzar cualquier cosa aviso que yo no soy un maestro ni un genio del tema solo que se como hacerlo y pienso que seria una ayuda para todos hacer esto, para aprender a programar el Quake 2 completamente me bastaron un año y medio, tuve que hacer todo yo como investigar, revisar el codigo, compilar millones de veces para ver que resultado daba hasta que al fin pude entender como funciona totalmente y como agregar funcionalidades, no es solo programación es modelaje, creación de mapas y creación de texturas.

El que quiera inscribirse que me lo haga saber aca, no abusen con los mensajes no creo que te funcione, nadie se va a inscribir con un par o dos me bastan.

Saludos.
"Si el rock es ilegal, metan mi trasero en la carcel" Kurt  Cobain

GaciX 69

Me anoto, y solo hazlo, porque de más que alguien que no se inscribe va a leerlo igual...


haweki

http://www.mastergame.uni.cc/foro

Gamefusion no muere....

kain

Son mas interesados de los que yo pense que habrian, mañana comenzare para dejar tiempo a que los que todavia no se inscriben  y quieren hacerlo lo hagan.

Saludos.
"Si el rock es ilegal, metan mi trasero en la carcel" Kurt  Cobain

kain

Hola

Empezamos, pues al parecer nadie mas se quiere inscribir esperemos que alguien mas lo lea :P

Materiales :

Ganas de leer y capacidad de asimilar.

Modularización : Es conveniente primero definir el termino, es dividir por modulos algo, en este caso es el codigo  ¿Se imaginan todo el codigo Quake 2 en un solo archivo?  seria algo practicamente imposible de editar, casi todo los programas se modularizan, primero una cabecera con las funciones mas complicadas y luego se hacen las llamadas desde otro archivo es un metodo para hacer mas comprensible el codigo.

El Quake 2 esta modularizado de la siguiente manera :

En librerias :

De renderizado :

ref_soft.dll / ref_soft.so : Libreria de render por software, ocupa solo el Microprocesador para renderizar dejando el refresco de imagen a cargo de la tarjeta de video, bastante pobre graficamente especialmente gracias a las texturas de 16 bits, pero en altas resoluciones pierde gran parte de su odio hacia los ojos del jugador, en linux tiene variantes como :

ref_softx.so : Es renderizado por software pero a cargo de las librerias de las X, ya sean X11 o X.org.

ref_softsdl.so : Es renderizado por software pero a cargo de SDL solo graficamente los controles siguen siendo manejados por el Quake 2, pues las SDL ofrecen una completa interfaz de desarrollo de videojuegos incluyendo soporte para Teclados, Joy Pad, Mouse y Sonidos aqui se desaprovecha gran cantidad de esas funcionaldiades relegando a las SDL la funcion de renderizar unicamente.

ref_softxii.so : Renderizado por software pero en terminal con codigo ASCII, muy bonito pero altamente peligroso para los ojos y para los mas debiles de estomago puede causar mareo intenso.

ref_gl.dll / ref_gl.so : La libreria que renderiza por OpenGl pero con las Voodoo solamente, puede renderizar en un ordenador sin voodoos pero puede funcionar bastante lento auqneu con las tarjetas actuales sobre 60 fps se le pude sacar sin el mayor esfuerzo.

ref_glx.dll / refl_glx.so : Libreria de renderizado por OpenGl pero apta para todo tipo de tarjetas incluyendo las Voodoo pero es desaprovecharlas pues con su propia libreria obtienen mucha mas calidad y rendimiento, normalmente en OpenGl renderiza a 8 Bits con uan perdida total de calidad.

game_x86.dll / game_x86.so : La libreria en la que se guarda todo lo referente al juego si quitamos esta libreria y la remplazamos por otra el juego ya puede ir llamandose de otro modo pues no tendra el comprotamiento de los enemigos, las armas, los items, los objetos, los enemigos etc...

Binarios :

quake2.exe / quake2 :El binario del Quake 2 aqui esta la interfaz del menu incluyendo todo lo que dice, la consola de Quake 2 y es el binario que enlaza la funcion de la libreria de renderizado y la de información (de mas esta decir que solo se ocupa una libreria de renderizado, puedes tener varias pero solo se ocupara una).

Esta es mas o menso la modularización del Quake 2, bastante simple y mas que util.

Mañana incluire algunos ejemplos de cada una para que vean como es todo esto.

Saludos.
"Si el rock es ilegal, metan mi trasero en la carcel" Kurt  Cobain

kain

Bueno siguiendo con modlarización, vamos a describir archivo por archivo de la libreria gamex86.dll/gamex86.so primero explicare cual es la metodologia de los nombres :

g_main.c : El inicio con esa G nos indica que es un archivo referente al game, que define el estilo de juego.

m_gunner : El inicio con esa M nos indica que es un archifo referente a los monstruos, define su comportanmiento, arma que lleva, modelo a cargar, vida, velocidad, campo de visión y daño que causa.

p_menu.c : El inicio con esa P nos indica que es un archifo referente al cliente, el menu, el hud, especifica lo que hace que sea el Quake 2 y no el Doom.

q_shared.c : El inicio con esa Q nos indica que es un archivo referente al quake, en este caso trata de los calculos matematicoscomo, concavidades, posiconamiento de un cuerpo en el plano, angulos, caida libre etc...

Esto intento ser una descripcion de el nombramiento de lor archivos en el Quake 2, solo referente a la libreria gamex86.dll/gamex86.so, pues antes de pasar a la siguiente intentare mostrar todo lo referente a esta.

La función de la libreria es especificar los calculos de la fisica, las armas, los enemigos, la Inteligencia Artifical, por medio de un conjutno de funciones, los archivos C en total son 50, los archivos H, cabeceras, en total son 28.

Ahroa describire la funcion de cada fichero, posteriormente ire ampliando la información poco a poco,a gregando ejemplos y algunas formas de programar determinado archivo.

g_ai : Tal como lo dice su nombre eprtenece al conjunto de archivos referentes a la jugabilidad, esto por que trata de la Inteligencia artifial de los enemigos, aqui se especificara como "pensaran" nuestros contricantes.


La estructura es :

· Movimiento.
· De pie.
· Caminando.
· Localizar blanco.
· Rango de visibilidad.
· Encontrando blanco.
· Corriendo con arma blanca.
· Coriendo con misil.
· Corriendo haciendo strafe.
· Decide si ataca o no ataca.
· Corriendo.

Pues esta es la estructura, esta divida por funciones a las que se llama desde otro archivo para poder usarlas.

Ahora mostrare un ejemplo de como se programa este archivo :

Primero lo abrimos con un editor cualquiera, en mi caso uso el Vi en Windows puedes usar el Notepad, la ruta al archivo es SOURCE DEL QUAKE2>GAME>G_AI.C.

Lo que veremos sera algo como esto :

Citar
/*
Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/
// g_ai.c

#include "g_local.h"

qboolean FindTarget (edict_t *self);
extern cvar_t   *maxclients;

qboolean ai_checkattack (edict_t *self, float dist);

qboolean        enemy_vis;
qboolean        enemy_infront;
int                     enemy_range;
float           enemy_yaw;

.....

Pues que tal si queremos mejorar una funcion, la de correr para esquivar mejor los ataques pues nos vamos al lugar de la función :

Esta seria la forma de usar el archivo de IA general, cada monstruo tiene especidficado como ataca y lo demas asi que eso seria la IA especifica.

m_gunner :  La m[/m] delante del arhcivo nos indica que es un monstruo dle juego en este caso el Gunner, el que ves en el priemer nivel con una pistola integrada al cuerpo.

La estructura del codigo es:

Estoy terminando el ejemplo del codigo lo publico entre hoy y mañana.
"Si el rock es ilegal, metan mi trasero en la carcel" Kurt  Cobain

Eye del Cul

Ten en cuenta, Klarkash, que la mayoría de los visitantes del foro son gente no registrada. Hay muchos lectores que no tienen cuentas de usuario ni dejan huella en el foro, pero que lo siguen atentamente. Los usuarios que participamos aquí somos una minoría en comparación con ese público "pasivo".

Lo comento porque muchas veces la gente abre temas en el foro, con mapas, tutoriales y demás, y se desencanta cuando no obtiene respuestas de los demás usuarios. Aunque ningún usuario manifestase interés por lo que se dice, esa impresión de "soledad", por llamarlo así, es engañosa: hay muchos lectores anónimos que pueden interesarse por el tema en cuestión, aunque no lo comenten con un mensaje en el foro.
«Porque buscar a alguien patético en Internet es como buscar caballos en un establo: encontrarás alguno, seguramente» -- Phobos Anomaly

kain

Es cierto, pero como ves seguire con esto, es muy dificl hoy en dai encotnrar información  en español para programar el Quake 2, espero que a  alguien le sirve.

En unr ato mas cuando termine de redactar posteo la continuación de modularización.

Saludos.
"Si el rock es ilegal, metan mi trasero en la carcel" Kurt  Cobain