|
|
|
|
Comandos para proyectiles
|
 |
|
|
|
|
Comandos para proyectiles
En otras palabras: uno de los grandes sueños de todo programador de CON que tenga grandes ambiciones en sus proyectos.
|
addweaponvar < var1 > < var2 >
|
Añade al jugador más cercano un arma. El comando funciona de forma similar que addweapon pero con la diferencia de que se usan variables. var1 es la id del arma y var2 es la cantidad de munición.
|
defineprojectile < tilenum > < function > < value >
|
Define un proyectil para ser disparado con el comando shoot y sus variantes. Para usar este comando es necesario que tengas en cuenta las siguientes definiciones:
|
define PROJ_WORKSLIKE 1
define PROJ_SPAWNS 2
define PROJ_SXREPEAT 3
define PROJ_SYREPEAT 4
define PROJ_SOUND 5
define PROJ_ISOUND 6
define PROJ_VEL 7
define PROJ_EXTRA 8
define PROJ_DECAL 9
define PROJ_TRAIL 10
define PROJ_TXREPEAT 11
define PROJ_TYREPEAT 12
define PROJ_TOFFSET 13
define PROJ_TNUM 14
define PROJ_DROP 15
define PROJ_CSTAT 16
define PROJ_CLIPDIST 17
define PROJ_SHADE 18
define PROJ_XREPEAT 19
define PROJ_YREPEAT 20
define PROJ_PAL 21
define PROJ_EXTRA_RAND 22
define PROJ_HITRADIUS 23
define PROJ_VEL_MULT 24
define PROJ_OFFSET 25
define PROJ_BOUNCES 26
define PROJ_BSOUND 27
define PROJ_RANGE 28
|
De todas estas definiciones nos interesara conocer las siguientes:
• PROJ_WORKSLIKE : Esta propiedad nos indica una serie de flags de los proyectiles que indicaran una serie de características del mismo, como por ejemplo, ser sangre o una bala. Recuerda que estas flags se pueden combinar sumando sus valores:
Las posibles flags son:
- define WORKSLIKEBULLET 1
- define WORKSLIKERPG 2
- define WORKSLIKEBOUNCESOFFWALLS 4
- define WORKSLIKEBOUNCESOFFMIRRORS 8
- define WORKSLIKEKNEE 16
- define WORKSLIKEWATERBUBBLES 32
- define WORKSLIKENOENEMYHITS 128
- define WORKSLIKESPIT 256
- define WORKSLIKECOOLEXPLOSION1 512
- define WORKSLIKEBLOOD 1024
- define WORKSLIKELOSESVELOCITY 2048
- define WORKSLIKENOAIM 4096
- define WORKSLIKERANDDECALSIZE 8192
Por el momento no han sido explicadas aunque sus nombres son lo bastante descriptivo como para saber que hacen.
• PROJ_SPAWNS : Es el actor que aparece cuando el proyectil choca, es decir, lo que aparece.
• PROJ_SXREPEAT : Es la dimensión "x" del sprite aparecido (el del spawn).
• PROJ_SYREPEAT : Es la dimensión "y" del sprite aparecido (el del spawn).
• PROJ_SOUND : Es el sonido que se reproduce cuando el proyectil es disparado.
• PROJ_ISOUND : Es el sonido que se reproduce cuando el proyectil impacta en una pared o cara (ignorado en proyectiles con la propiedad de bala (bullet)).
• PROJ_VEL : Velocidad del proyectil. No configurar con valores superiores a 1000. Si quieres más velocidad usa la aceleración.
• PROJ_EXTRA : Propiedad usada para configurar la fuerza del daño del proyectil.
• PROJ_DECAL : Propiedad usada para definir que imagen sale cuando el proyectil impacta, por ejemplo, los agujeros de bala.
• PROJ_TRAIL : Es una propiedad para definir que sprite aparece como cola del proyectil, por ejemplo, en el misil cuando aparecen las explosiones detrás.
• PROJ_DROP : Es la velocidad con la que cae el proyectil, por ejemplo, las granadas. Con números negativos va hacia el suelo.
• PROJ_CSTAT : Propiedades de los sprites: cstat.
• PROJ_PAL : Color del proyectil.
• PROJ_VEL_MULT : Causa una aceleración en el proyectil.
• PROJECTILE_FLAG_RPG_IMPACT : Definido como 32768. Hace que un proyectil tipo RPG cause daño no solo con el impacto directo sino también con el radio (onda expansiva).
|
EJEMPLO
defineprojectile 1653 PROJ_WORKSLIKE 6150
defineprojectile 1653 PROJ_SPAWNS EXPLOSION2
defineprojectile 1653 PROJ_VEL 1000
defineprojectile 1653 PROJ_EXTRA 300
defineprojectile 1653 PROJ_DROP -200
defineprojectile 1653 PROJ_ISOUND PIPEBOMB_EXPLODE
defineprojectile 1653 PROJ_HITRADIUS 2560
defineprojectile 1653 PROJ_BOUNCES 5
defineprojectile 1653 PROJ_OFFSET 224
defineprojectile 1653 PROJ_CLIPDIST 24
defineprojectile 1653 PROJ_TRAIL SMALLSMOKE
En este ejemplo configuramos el WORKSLIKE como:
PROJECTILE_FLAG_NOAIM
PROJECTILE_FLAG_LOSESVELOCITY
PROJECTILE_FLAG_RPG
PROJECTILE_FLAG_BOUNCESOFFWALLS
Es una granada al estilo de las que lanza el enemigo Battlelord.
No apunta automáticamente a enemigos y jugadores.
|
|
eshoot < projectilenumber >
|
Trabaja igual que el comando shoot pero con la diferencia que este pone lo que dispara en la variable interna RETURN. projectilenumber es una constante.
Identico a eshoot pero con una variable.
|
hitscan < var1 > < var2 > < var3 > < var4 > < var5 > < var6 > < var7 > < var8 > < var9 > < var10 > < var11 > < var12 > < var13 > < var14 >
|
Es un comando muy complejo que sirve para obtener mucha informacion. Observa el siguiente ejemplo:
hitscan HITSCAN_X HITSCAN_Y HITSCAN_Z HITSCAN_SECT HITSCAN_VECTX HITSCAN_VECTY HITSCAN_VECTZ HITSCAN_HITSECT HITSCAN_HITWALL HITSCAN_HITSPR HITSCAN_HITX HITSCAN_HITY HITSCAN_HITZ HITSCAN_CLIPDIST
Para obtener los resultados tenemos que calcular primero HITSCAN_X, HITSCAN_Y, HITSCAN_Z, HITSCAN_SECT, HITSCAN_VECTX, HITSCAN_VECTY, HITSCAN_VECTZ y nos devuelve el resto de variables.
Lo que hace este comando es, según los datos, devolvernos en que posiciones x,y,z impactaria, y si impacta contra un pared, un sector o un sprite y con que clipdist lo haría. Tenemos que tener en cuenta a la hora de usar los resultados:
Cuando nos devuelve si impacta contra un sprite, pared o sector nos devuelve unas ID's. La siguiente tabla es bastate intuitiva:
|
IMPACTA CONTRA...
|
ID DEL SECTOR
|
ID DE LA PARED
|
ID DEL SPRITE
|
SI EL VECTOR Z (HITSCAN_VECTZ) ES...
|
|
Un Sprite
|
ID del sector
|
-1
|
ID del sprite
|
No nos interesa su valor
|
|
Una pared
|
ID del sector
|
ID de la pared
|
-1
|
No nos interesa su valor
|
|
El techo
|
ID del sector
|
-1
|
-1
|
Su valor es negativo
|
|
El suelo
|
ID del sector
|
-1
|
-1
|
Su valor es positivo
|
Un ejemplo completo seria el siguiente
|
EJEMPLO
getactor[THISACTOR].x HITSCAN_X
getactor[THISACTOR].y HITSCAN_Y
getactor[THISACTOR].z HITSCAN_Z
getactor[THISACTOR].sectnum HITSCAN_SECT
getactor[THISACTOR].ang ACTOR_ANG
setvar HITSCAN_VECTZ 3200
cos HITSCAN_VECTX ACTOR_ANG
sin HITSCAN_VECTY ACTOR_ANG
hitscan HITSCAN_X HITSCAN_Y HITSCAN_Z HITSCAN_SECT HITSCAN_VECTX HITSCAN_VECTY HITSCAN_VECTZ HITSCAN_HITSECT HITSCAN_HITWALL HITSCAN_HITSPR HITSCAN_HITX HITSCAN_HITY HITSCAN_HITZ HITSCAN_CLIPDIST
En este ejemplo calculamos las primeras variables. Para obtener los vectores "x" e "y" usamos cosenos y senos. Por último, como nuestro proyectil va a tener una velocidad en el eje "Z" constante la configuramos directamente para ahorrarnos problemas (ese valor se corresponde con move MIMOVE -200)
|
|
getprojectile [ < variable1 > ].< variable2 > < variable3 > < variable4 >
|
|
setprojectile [ < variable1 > ].< variable2 > < variable3 > < variable4 >
|
Son usados con el evento definido como 64 (EVENT_GAME). Sirven para acceder al sistema de proyectiles. Afecta a todos los proyectiles del tipo especificado.
|
getthisprojectile [ < variable1 > ].< variable2 > < variable3 > < variable4 >
|
|
setthisprojectile [ < variable1 > ].< variable2 > < variable3 > < variable4 >
|
Son usados con el evento definido como 64 (EVENT_GAME). Sirven para acceder al sistema de proyectiles. Solo afectan al proyectil actual.
Funciona de la misma forma que el comando shoot de Duke Nukem 3D pero con una variable.
|
zshoot < zvel > < projectile >
|
Dispara un proyectil con una velocidad zvel. El valor de zvel puede ser calculado con ldist. Este comando puede ser útil para hacer que los actores disparen apuntando verticalmente a objetos distintos del jugador.
|
gmaxammo < var1 > < var2 >
|
Obtiene la munición máxima especificada para el arma con la ID "var1" y devuelve el resultado en "var2". Las ID's de las armas son los WORKSLIKE de las armas (mira las definiciones de las armas).
|
smaxammo < var1 > < var2 >
|
Configura la munición máxima especificada para el arma con la ID "var1" y con el valor de "var2". Las ID's de las armas son los WORKSLIKE de las armas (mira las definiciones de las armas).
|
|
|
|
| |
|