Programa de edicion 3d->3dsmax, Maya, Blender, o cualquiera que pueda exportar a formato .OBJ o .3ds Photoshop. Plugin para photoshop para crear archivos .PAA .PAC http://www.kegetys.fi/dl.php/tools07072010.zip aca dentro del rar abren la carpeta paaplug y copian el contenido en la carpeta de plugins del photoshop Oxygen2 el editor de addons para ARMA2 y el compilador BINPBO ftp://downloads.bistudio.com/Tools/BI_E ... ols.zipACA ESTAN TODAS LAS HERRAMIENTAS PARA EL ARMA2 pero lo que nos compete es el OXYGEN2 Y EL BIN PBO Modelo de ejemplo del ARMA2, yo tomo el de un tutorial hecho por Christian.1987 de armaholic http://www.armaholic.com/page.php?id=10795 tambien se puede usar los modelos de ejemplo del ARMA1
PASO NUMERO1 Extraccion y organizacion de las carpetas Abrimos el rar y lo descomprimimos en algun lugar donde queramos trabajar. Abrimos la carpeta y vamos a @Test_weapon.tutorial->Unbin addon to bin -> y llegamos a TEST_WEAPON, esta es la carpeta que nos importa, recomiendo copiarla y renombrarla, yo la voy a renombrar "MI_RIFLE". Dentro de esta carpeta tenemos: La carpeta "DETAIL", ahi hay texturas de detalle para el supershader, lo podemos ignorar solo guarda texturas del modelo, podria llamarse "TEXTURAS_DETALLES". La carpeta "EQUIP", tiene una sola textura llamada gui.paa que es la foto que vemos del arma cuando abrimos nuestro inventario en el juego!
La carpeta MAT y TEX, tienen archivos .rvmatt y texturas correspondientemente, en lo que a mi respecta si la texturas se rutean bien, podriamos tener la carpeta "detail" "mat" y "tex" en una sola carpeta llamada "texturas", la equip tambien se podria poner pero es como es para los menues es mas facil tenerla separada. Luego tenemos el archivo model.cfg este define las partes de nuestro rifle y sus movimientos. el archivo config.cpp define las propiedades de nuestra arma, que municion usa, sonidos, nombre, modelo3d y demas. Despues tenemso el modelo "test_m16A4.p3d" sobre este vamos a trabajar nuestro modelo.
PASO 2
Exportar el modelo previamente preparado una pequeña foto explicativa de que tiene el modelo o deberia tener dependiendo del rifle
lo importante esta marcado ahi, el alza y el guion es lo necesario para apuntar nada raro, el cargador, el gatillo y el cerrojo(que en realidad no es el cerrojo sino la corredera, nose porque le puse cerrojo) son las partes mobiles, el gatillo gira cuando se dispara, el cerrojo o corredera se mueve hacia atras cuando se dispara y permanece atras cuando se recarga y el cargador "desaparece" cuando recargamos, lo importante a notar al hacer el modelo es que sean objetos o subojetos separados para despues poder moverse independientemente. El modelo vamos a exportarlo cerca de la carpeta del ejemplo, en formato "gw::OBJ-EXporter(*.Obj)" es un formato comun esta asi en 3dsmax, osea formato .OBJ. Con eso deberiamos terminar con el editor 3d. Nuestra textura hecha en photoshop no deberia dar mucho problema, una vez le cargaron el plugin al photoshop o si ya lo tenian cargado, le mandan "guardar como" y en el formato le damos "PAAplug", lo vamos a mandar a la carpeta de textura que nos guste dentro de la carpeta "MI_RIFLE", yo voy a usar la carpeta "TEX", nos va a parecer varias opciones lo importante es destiladar el filter alpha
otra opcion es exportar .TGA de 24bits pero es preferible el .PAA
PASO 3
IMPORTAR A OXYGEN2 y preparar el modelo Abrimos el Oxygen y cargamos el test_m16a4.p3d de la carpeta "mi_rifle" Vemos el modelo del m16, yo les recomiendo vayan a la ventanita de los LODS y con el boton derecho del mouse le dan y ponen "NEW" y eso crea el LOD "6.000" clickean y nuestro m16 se pone amarillo; Esto quiere decir que no hay nada en LOD comparado con el LOD 1.000, se entiende? sirve para comparar con el lod original. Ahora importamos nuestro modelo! vamos a File->import->Obj File y cargamos nuestro rifle! Nos aparece import properties, tildamos "invert x" y le damos Ok(esto es porque generalmente importa nuestro modelo espejado de izquierda a derecha!) Si todo va como creo que va tienen un super riflesote, y girado 90º de lo que deberia! Eso se soluciona con las dos herramientas SCALE y ROTATE, usadas de una a la vez.
seleccionamos el arma y se tiene que poner toda roja(fijense en la foto el boton seleccionar y con el botton izq del mouse) y tocamos el boton ROTATE Nos aparece 3 casillas que es lo que nos va a importar vamos ala del medio y le damos -90 y si la alineacion esta como en mi modelo eso ya lo soluciona, sino prueben devuelta hasta que quede alineado igual que el M16
despues seleccionamos y vamos a SCALE
a esas tres variables les tenemos que dar un numero menor a 1(para poder achicar el arma) o mayor a 1(para poder agrandar el arma) lo importante es que siempre pongan en las tres casillas el mismo numero porque sino se deforma! vaya probando con 0.5 hasta que se acerquen al tamaño del arma, cuando mas cerca de 1 menos achica osea que cuando va quedando del mismo tamaño agrandamos el numero a 0.9 el objeto de referencia es el gatillo o la empuñadura del arma porque los soldados tienen todos el mismo tamaño de mano y por lo tanto eso es lo importante, tambien tendria que alinearse donde iria la segunda mano del soldado si nuestro rifle queda muy alto tambien va a quedar muy alto en el juego. si tienen que moverlo, lo selecionan y lo mueven con boton derecho del mouse y si quiren rotarlo lo rotan con CRTL+BOTONDERECHO del mouse. Yo en mi caso para el tutorial hice el modelo con una sola textura asi que seria facil retexturizar, voy a suponer que tienen muchas texturas, asi que abrimos el "TEXTURE LIBRARY" apretando ALT+T o en windows->texture library ahi a la derecha nos aparece una lista con las texturas usadas en este LOD, en mi caso 01__default (es el nombre que le dio el 3dsmax )
le dan CRTL y clickean es seleciona la parte que tiene esa textura asignada, una vez lo tienen aprietan la tecla "E"
tocan ahi y buscan su textura, le dan todo ok y su modelo ya tiene la textura asignada, ustedes hagan lo mismo con cada objeto que tenga una textura diferente
notese que tengo activado el modo DIRECTX y las opciones, nada mas aprieten los botones marcados en la imagen.
Ahora como ven en la imagen hay varias secciones, lo que tenemos que hacer es cambiarles el nombre para que puedan ser animados despues en el model.cfg, por ejemplo al objeto que es el gatillo, lo renombran para saber que eso es el gatillo, pueden usar la nomenclatura en ingles o en español(trigger o gatillo) les recomiendo que usen trigger porque en este ejemplo el model.cfg ya esta animado y esta como trigger pero igual lo voy a explicar asi que como gusten. Yo lo voy a poner en ingles para que encaje en el model.cfg sin menores modificaciones gatillo=trigger corredera=bolt cartucho=magazine Ahora tienen que ir al LOD 1.000 y buscar en las secciones "proxy:: zasleh_proxy01" o algo asi lo seleccionan y le dan CTRL+C para copiarlo vuelven al LOD 6.000 y le dan CTRL+V, estos proxy son referencias a modelos externos, en este caso el zasleh es basicamente el DESTELLO que hace el arma al disparar, lo que tienen que hacer es moverlo adelante del cañon de nuestra arma.
Ahora borran el LOD 1.000 lo seleccionan y le dan DELETE, vamos al 6.000 donde esta nuestro rifle sano y salvo y le damos "properties" tambien con el boton derecho
tocan resolution y le ponen 1, entonces nuestro lod pasa de ser 6.000 a ser 1.000, eso quiere decir que entre 0 y 1 metro se va a ver nuestro rifle y mas lejos se vera el M16; medio raro no? bueno la ide aes que el resto de los lods sean reemplazados con nuestro rifle tambien pero con cada vez menos poligonos, por otro lado el lod VIEWPILOT es como el jugador ve su rifle este puede tener mas calidad, es importante tambien borrar el view pilot actual, hacer una copia de nuestro lod(AHORA 1.000 antes 6.000) y a esa copia(probablemente tambien se llame 6.000) darle properties y seleccionar viewpilot, osea tenemos 2 lods con nuestro rifle, 1.000 y view pilot, despues si tienen mas cariño hacen los demas y les borran las partes mas chicas primero para generar lods de baja calidad.
Ahora tienen que ir al LOD memory! ahi estan los puntos logicos necesarios para que nuestre rifle funcione lindo, osea ejes de rotacion y tranlasion, y puntos logicos "de donde salen las balas", "de donde salen los casquillos" y "donde pone el ojo el jugador para puntar", lo que tenemos que hacer es ALINEAR estos puntos segun nuestra arma lo requiera. EYE= es el "donde el jugador pone el ojo para apuntar", es bastante facil, tenemos que alinearlo al nivel del ALZA, que tan lejos o cerca depende de ustedes. nabojnicestart y nabojniceend = esto esta en checoingles, es "de donde sale el casquillo" y "hacia donde va" respectivamente deberia ir en la salida de las balas pero mi rifle no tiene por lo que lo voy a poner cerca de la corredera. konec hlavne y usti hlavne= ESTOS SON MUY IMPORTANTES, son el "Donde empieza el cañon" y "donde termina el cañon" respectivamente estos tienen que estar bien alineados o los tiros les van a salir para cualquier lado, simplemente alinenlo con el cañon. trigger_axis="eje del gatillo" es el eje sobre el que gira el gatillo, solo alinenlo donde en su rifle gire el gatillo Bolt_axis="eje de translacion de la corredera", ponganla entre donde esta la corredera y hacia donde va..
ESO ES TODO SOBRE EL MODELO MASOMENOS O POR LO MENOS LO IMPORTANTE PASO NUMERO 4 Definir partes del modelo y animaciones Vamos a nuestra carpeta "mi_rifle" o "test_weapon" segun como lo hayan hecho, y abrimos el MODEL.CFG con el block de notas, wordpad o alguna IDE de programacion. Y nos encontramos con lo siguiente!
Class skeleton es por asi decirlo, el "DONDE" va a estar nuestro esqueleto, siempre que se va a hacer un esqueleto nuevo se abre el class skeleton. mas abajo tenemos el class default, el class default es el prototipo de esqueleto mas simple de todos y va a ser la base de nuestro esqueleto, en teoria un si quiere podria buscar otros prototipos de esqueletos(por ejemplo el esqueleto del m16 del ARMA2), el class default no esta abierto para editarse sino que se invoca para usarlo como referencia. Abajo de eso esta el class test_weapon, que en principio es una copia del class default, eso se lo define asi "class Test_Weapon: Default" fijense que despues del nombre del esqueleto pone "dos puntos( : )" seguido de default, es quiere decir, "esto es igual a default" pero con excepcion de lo que le agreguemos. Veamos lo que hay dentro del test_weapon
el isDiscrete=0; si no me equivoco es como lo que decia antes sobre la invocacion como referencia, el default es discrete=1 porque no va a ser editado y el test_Weapon es discrete 0 porque va a ser editado(es decir abierto o cerrado) skeletonInherit="default"; basicamente carga el esqueleto del default, ahora parece irrelevante pero cuando se trabaja con vehiculos es mas importante ya que se pueden cargar el esqueleto del A10 o de cualquier avion o vehiculo.
en skeletonBones se definen las partes mobiles del modelo, estas tienen que coincidir con lo que hemos puesto en el oxygen2 en la parte de secciones
Algo importante a notar: los bones(huesos) se los define entre comillas
Código:
"mi_hueso"
seguido de una coma
Código:
"mi_hueso",
y ahi despues de la coma puede ir un par de comillas vacias y otra coma si no es el ultimo hueso a definir,
Código:
"mi_hueso","",
ahora supongamos que tenemos una parte movil que depende de otra parte movil! por ejemplo una torre de un tanque, la torre gira sobre su eje, pero el cañon se mueve sobre la torre, eso se definiria asi:
Código:
"mi_torre","", "mi_cañon","mi_torre"
es decir el cañon se mueve con la torre, pero la torre se mueve sobre su eje, asi que es muy importante definirlo bien en uno u otro caso! AHI TERMINARIA LA EXPLICACION DEL CfgSkeleton, PASAMOS AL CFGMODELS
Código:
class cfgModels { class Default { sectionsInherit=""; sections[] = {}; skeletonName = ""; };
class Test_Weapon : Default { sectionsInherit="Default"; sections[]= { "zasleh" }; skeletonName="Test_Weapon"; class Animations { class Test_Weapon_bolt_action { type="translationX"; source="reload"; selection="bolt"; axis=""; memory="false"; animPeriod=0; minValue=0; maxValue=0.10; }; class Test_Weapon_bolt_empty { type="translationx"; source="isEmpty"; selection="bolt"; axis=""; memory="false"; animPeriod=0; minValue=0; maxValue=0.10; }; class Test_Weapon_magazine_hide { type="hide"; source="reloadMagazine"; selection="magazine"; minValue=0.200000; maxValue=0.250000; hideValue=0.100000; }; }; }; class Test_M16a4 : Test_Weapon{}; };
nuevamente class cfgmodels, es "DONDE" ponemos la definicion de las animaciones de nuestro modelo, nuevamente tenemos un class default, pero esta vez son animaciones, fijense que en vez de tener el "skeletonbones" tiene "skeletonname", el skeletonname es eso, el skeleton que definimos ANTES.
Nuevamente Test_weapon es una copia de default, la sectionInherit, son las secciones heredadas en castellano es decir no solo es una copia de default sino que tambien sus secciones tienen el mismo nombre, el sections, son partes que tienen que se usadas por el juego y que no son animaciones, principalmente son efectos, en este caso el "zasleh" es la llamarada que habiamos copiado. Ahora viene lo interesante, el class animations es "DONDE" definimos nuestras animaciones, veamos esto
translation esto se mueve pero en vez de en un eje dimensional se mueve en un eje predefinido en el memoryLOD del modelo y cargado por la variable axis (AXIS="MI_EJE";) este eje son dos puntos por los cuales se va a mover el objecto rotation esto rota el objeto tambien en un eje predefinido en el MEMORYLOD del modelo se aplica lo mismo pero piensenlo como un tornillo, el eje es el tornillo el objeto es la tuerca! rotationX rotationY rotationZ translationX translationY translationZ. talvez haya mas pero no recuerdo
el source=reload, es el momento en el que se corre la animacion, en este ejemplo cuando se recarga, es dificil saber los tipos de source que existen, la mejor forma es ver los ejemplos de BIS http://www.armaholic.com/page.php?id=2804 el selection, es el hueso definido el el cfgSkeleton y tambien es el selection del modelo en el OXYGEN, asi que tienen que coincidir, al mismo tiempo se puede poner el nombre que quiera a voluntad siempre y cuando coincidan los 3, osea la selection se puede llamar "pepito" siempre y cuando este en el modelo, en el cfgskeleton y en la animacion. el axis=""; es un EJE creado en el modelo, en el MEMORYLOD, en este caso esta vacion porque el tipo de animacion es TRANSLATIONX osea se mueve sobre una dimension no sobre un EJE. Teoricamente se puede usar mucho rotationX o translationX o etc, pero es lo va a hacer girar sobre su propio centro, osea si queremos una PUERTA hay que usar el rotation+axis porque sino la puerta gira sobre su propio centro en vez de por la bisagra. memory=false basicamente dice que no hay que lea el memorylod, osea que no hay EJE que leer. el animationperiod, es el tiempo en segundo entre la repeticion de la animacion, se usa principalmente para animaciones personalizadas o esteticas, por ejemplo un radar girando, pero aca no tiene utilidad, la animacion va a durar lo que dure source=RELOAD; el minValue y maxValue son es cuanto se mueve en relacion al estado de la animacion, si la animcion no corre el minimo, si corre el maximo. Esas son unas pocas de todas las propiedades del animations, fijense en la animacion class Test_Weapon_magazine_hide, tiene como type=hide, osea que se esconde una parte del modelo y tambien tiene hideValue=0.100000; osea depende del tipo de animacion las propiedades que tenga, por eso tienen que SIEMPRE FIJARSE EN LOS EJEMPLOS DE BIS
ahora vamos a una de las ultimas lineas del MODEL.CFG una muy importante
Código:
class Test_M16a4 : Test_Weapon{};
aca se define TEST_M16a4, ese nombre es importante porque tiene que coincidir con el archivo del modelo, "test_m16a4.p3d" si no coinciden los nombres no funcionan las animaciones, esto nos puede sacar un dolor de cabeza porque capaz hicimos casi todo bien y no vemos las animaciones probablemente sea por esto, ahora yo guarde mi modelo como test_rifle.p3d, asi que voy a borrar class Test_M16a4 : Test_Weapon{}; y lo voy a reemplazar con class Test_rifle : Test_Weapon{}; y si dios quiere terminamos con el model.cfg PASO NUMERO 5 Config.cpp y las caracteristica funcionales de nuestra arma El config.cpp es donde describimos las funciones practicas de nuestra arma, aca se pueden definir muchas cosas incluyendo proyectiles(osea como una bala vuela y su decaimiento fuerza de impacto y efecto) pero hacer un tipo de municion nueva es muy complicado debido a la fisica asi que nos vamos remitir a lo que es el arma con municion ya creada
Código:
class CfgPatches { class Test_Weapon { Units[] = {}; weapons[]= { "Test_Weapon", }; requiredVersion = 1.000000; requiredAddons[]= {}; }; };
class CfgWeapons { class M16a4;
class Test_M16a4 : M16a4 { displayName = "Test Weapon"; model = "\Test_Weapon\Test_M16a4.p3d"; picture = "\Test_Weapon\Equip\gui.paa"; }; };
class cfgVehicles { class ReammoBox; //Extended
class TestWeaponBox : ReammoBox { scope = 2; accuracy = 1000; displayName = "Test Weapon Box"; model = "\ca\weapons\AmmoBoxes\USBasicWeapons.p3d";
class TransportMagazines { class 20Rnd_556x45_Stanag { magazine = "20Rnd_556x45_Stanag"; count = 200; }; };
class TransportWeapons { class Test_M16a4 { weapon = "Test_M16a4"; count = 12; }; }; }; };
en este caso el codigo esta divido en tres partes "class CfgPatches","class CfgWeapons","class cfgVehicles". el cfgpatches es por asi decirlo el PAQUETE donde se carga nuestro addon, nuestro conjunto de cosas, dentro del cfgpatches tenemos nuestro paquete
class test_weapon es el nombre de nuestro paquete, le vamos cambiar el nombre porque sino entra en conflicto con otros que se llamen igual lo vamos a llamar test_rifle abajo tenemos la linea "Units[] = {};" esto se refiere a los soldados o vehiculos que podemos agregar, en esta caso ninguno ya que estamos creando un arma. abajo ahora si nuestra arma
Código:
weapons[]= { "Test_Weapon", };
al test_weapon le vamos a poner tambien el nombre test_rifle, fijense que NO tiene porque coincidir el nombre del PAQUETE, puede llamarse armita1 si queremos. despues tenemos requiredVersion = 1.000000; requiredAddons[]= {}; requiered version se refiere a la version del ARMA2 necesaria para correr el juego, en general no es importante a menos que tenga algo especifico de las nuevas versiones de arma2. el requieredaddons es mas importante, se refiere a que otro mod u otro paquete de modificaciones se necesita para nuestra addon, por ejemplo si estuviesemos usando algunas cosas del ACE por ejemplo la capacidad de usar el bipode, lo conveniente seria poner el nombre del addon del ACE donde estan las armas, esto hace que cuando alguien intente jugar con nuestro rifle y no tenga el ACE le salte un cartel al arrancar el juego que dice algo como "esta addon necesita esta otra addon", ahora si ustedes no lo ponen PERO igualmente toman algo de otro addon va a correr igual si es que tienen el otro addon cargado, es decir esto sirve de aviso para las demas personas. LES TIENE QUE HABER QUEDADO ASI
Código:
class CfgPatches { class Test_Rifle { Units[] = {}; weapons[]= { "Test_Rifle", }; requiredVersion = 1.000000; requiredAddons[]= {}; }; };
ahora el cfgWeapons
Código:
class CfgWeapons { class M16a4;
class Test_M16a4 : M16a4 { displayName = "Test Weapon"; model = "\Test_Weapon\Test_M16a4.p3d"; picture = "\Test_Weapon\Equip\gui.paa"; }; };
el cfgWeapons es donde definimos nuestras armas nuevas. abajo se hace la invocacion del M16A4, eso mas adelante va a hacer que nuestra arma use la municion del m16, sus sonido, su tiempo de disparo y de recarga, es decir va a ser igual en todo excepto en lo que modifiquemos. abajo esta la definicion de nuestro rifle dice class test_m16a4: M16A4, como dije antes le indica que es una copia, tenemos que cambiar el test_m16a4 por test_rifle. ahora veamos adentro, tenemos la linea
Código:
displayName = "Test Weapon";
esto es en nombre que aparece en el juego y editor, vamos a cambiar "test weapon" por "mi riflesote" o como gusten que aparesca en el juego. despues tenemos
Código:
model = "\Test_Weapon\Test_M16a4.p3d";
este es el modelo que editamos previamente pero esta mal la ruta y el nombre, tiene que quedar asi!
Código:
model = "\mi_rifle\Test_rifle.p3d";
si esto esta mal simplemente no aparecera el modelo del arma y nos tirar un pequeño error que dice que no puede encontrar el archivo. despuest tenemos
Código:
picture = "\Test_Weapon\Equip\gui.paa";
esta es la textura que explique al principio del tutorial, es la foto que vemos del arma en nuestro inventario, yo no la modifique por lo que aparecera el M16, si quieren modificar
la textura, busquen el archivo tierenlo al photoshop y luego pongan una foto de su arma encima, vayan a channels y borren alpha channel y luego al guardar el archivo guardenlo con alpha filter!
en culquier caso hay que cambiar la ruta a
Código:
picture = "\mi_rifle\Equip\gui.paa";
hasta ahi tenemos nuestra arma nueva, pero no tenemos como llegar a ella en el juego, para eso sigue la siguiente parte.
Código:
class cfgVehicles { class ReammoBox; //Extended
class TestWeaponBox : ReammoBox { scope = 2; accuracy = 1000; displayName = "Test Weapon Box"; model = "\ca\weapons\AmmoBoxes\USBasicWeapons.p3d";
class TransportMagazines { class 20Rnd_556x45_Stanag { magazine = "20Rnd_556x45_Stanag"; count = 200; }; };
class TransportWeapons { class Test_M16a4 { weapon = "Test_M16a4"; count = 12; }; }; }; };
el cfgvehicles es donde se guardarian nuestros vehiculos, pero tambien sirve para las cajas de armas! el class ReammoBox; es una invocacion a una caja de armas generica. despues tenemos TestWeaponBox : ReammoBox, que es una nueva caja de armas que es una copia de la que invocamos, le deberiamos cambiar en nombre a testriflebox. despues tenemos esto
el scope indica si aparece en el editor, para el que no quiera manejarse con numeros, que le ponga "public" si aparece en el editor o "private" si no a parece. ni idea de que es accuracy aplicado a una caja. nuevamente tenemos el displayname que es el nombre de la caja en el juego y editor. luego tenemos el model que es el modelo de la caja, como no hicimos uno nuevo le dejamos el que tiene. abajo tenenemos
Código:
class TransportMagazines { class 20Rnd_556x45_Stanag { magazine = "20Rnd_556x45_Stanag"; count = 200; }; };
el classtransportmagazines esto se refiere a las municiones que se llevan dentro de la caja, el calss 20Rnd_556x45_stanag(el primero que aparece) es un nombre cualquiera pero es preferible que coincida con la municion que queremos(?), ahora dentro tenemos magazine="20Rnd_556x45_Stanag"; esto es el nombre de la municion del m16 y tiene que ser una municion existente. abajo tenemos count=200; esta es la cantidad de cartuchos que llevamos. y abajo tenemos
Código:
class TransportWeapons { class Test_M16a4 { weapon = "Test_M16a4"; count = 12; }; };
esto es muy parecido a lo anterior pero con las armas, lo importante aca es cambiar la linea weapon="test_m16a4" por weapon="test_rifle". una vez hecho eso tenemos que compilar todo con el BINPBO, lo importante es que binarizemos la carpeta mi_rifle y no todo
No puede abrir nuevos temas en este Foro No puede responder a temas en este Foro No puede editar sus mensajes en este Foro No puede borrar sus mensajes en este Foro