Este es el momento de adentrarse en una estructura con cierto grado de dificultad debido a la gran cantidad de variables. Es la estructura del jugador. Antes que nada expondremos su definición en C, y así introducirnos en ella:
Con esto no pretendo asustar a nadie, simplemente hacer una idea de lo complejo que puede llegar a ser Eduke. Hay que tener en cuenta que el programador de CON no va a llegar utilizar todas esas variables, simplemente, las que necesite, pero tampoco hay que olvidarse de ellas. Para ello ayúdate de la tabla de variables que expondré un poco mas abajo, pero primero los comandos que te dan acceso a la estructura:
Llegada a esta parte del documento, ya sabrás la estructura seguida, y puedes observar la similitud entre todos los comandos. Las variables del jugador son:
|
Variable
|
uso
|
|
i
|
Es la id del sprite del jugador
|
|
inven_icon
|
Devuelve el valor del icono actual del inventario. Si es 0 significa que no hay icono
|
|
invdisptime
|
Contador para el display del icono cuando presionas las teclas de mover derecha y mover izquierda. Se configura con 32
|
|
shield_amount
|
Configura la cantidad de armadura
|
|
steroids_amount
|
Configura la cantidad de esteroides (inventario)
|
|
jetpack_amount
|
Configura la cantidad de jetpack (inventario)
|
|
scuba_amount
|
Configura la cantidad del equipo de submarinismo (inventario)
|
|
airleft
|
Cantidad de aire del jugador cuando no hay equipo de submarinismo y esta bajo agua. Es configura con 390 inicialmente. Cuando llega 0 coge los valores de vida, y la variable extra_extra8 es incrementada con valores de 32
|
|
heat_amount
|
Configura la cantidad de las gafas de visión nocturna (inventario)
|
|
holoduke_amount
|
Configura la cantidad del holoduke (inventario)
|
|
firstaid_amount
|
Configura la cantidad de equipo de primeros auxilios (inventario)
|
|
boot_amount
|
Configura la cantidad de las botas (inventario)
|
|
holoduke_on
|
Configura la activación del holoduke. 2 Para cuando esta activado, si no es así será -1, aunque no es muy buena idea configurarlo
|
|
scuba_on
|
1 Para cuando esta activado y 0 para cuando no esta el jugado en el agua o si la cantidad de equipo de submarinismo se ha terminado
|
|
jetpack_on
|
Tiene un trabajo diferente a los anteriores. Su valor cambia cuando esta activado y devuelve 0. El valor parece cambiar de 0 a 2 a 8 cuando esta activado
|
|
heat_on
|
1 si esta activado (gafas de visión nocturna)
|
|
hbomb_on
|
Se configura 1 si la bomba ha sido lanzada (la pipebomb) y se prepara el detonador. Si fuera configurada para que explote por tiempo, el valor 1 se mantendrá siempre
|
|
over_shoulder_on
|
Modo de vista (cuando presionas F7) Si el valor es 1 significa ON. Si el valor es 0 significa OFF
|
|
look_ang
|
Es el ángulo de vista del jugador. (por ejemplo, cuando presionas las teclas de mirar derecha o mirar izquierda)
|
|
ang
|
El ángulo donde estas mirando.
|
|
oang
|
Ultimo ángulo donde estabas mirando. Usado para las interpolaciones de las imágenes (frames). NO ALTERAR
|
|
actors_killed
|
Número de enemigos muertos (que has matado)
|
|
max_actors_killed
|
Número máximo de enemigos para matar
|
|
secret_rooms
|
Número de habitaciones secretas. Ahora con eduke se puede alterar el número de habitaciones secretas descubiertas, sumando 1 al valor de la variable agregaremos 1 habitación secreta en la cuenta
|
|
max_secret_rooms
|
Número de habitaciones secretas que puedes descubrir
|
|
player_par
|
El tiempo que el jugador ha tardado en acabar el nivel
|
|
holster_weapon
|
1 si esconde el arma. Configúrala para hacer un efecto parecido al de la tecla esconder arma excepto si la animación no es ejecutada y aparece dibujada
|
|
curr_weapon
|
Es el valor del arma que esta siendo utilizada
|
|
last_weapon
|
Ultima arma usada. Se utiliza por si cambias a un arma que no tiene munición, entonces se pondrá el arma last_weapon. Cogerá el valor -1 si no hay anterior arma o si el arma se cambia con éxito
|
|
rapid_fire_hole
|
0 a menos que estés presionando el disparo mientras llevas una pipebomb. No parece suceder nada si la modificas
|
|
transporter_hold
|
Similar al comando lockplayer. Bloquea el movimiento del jugador durante el tiempo del teletransporte
|
|
weapon_sway
|
Es el valor configurado se refiere a una posición en el patrón del sacudimiento del arma. (Efecto del arma cuando el jugador se mueve (hacia arriba y hacia abajo para simular el movimiento)
|
|
bobcounter
|
Almacena el valor de weapon_sway cuando el sacudimiento finaliza y devuelve su valor cuando el sacudimiento comienza otra vez de modo que el sacudimiento continua en su posición pasada
|
|
footprintpal
|
Color usado para las actuales pisadas
|
|
footprintshade
|
Configura la sombra de tus pisadas
|
|
footprintcount
|
Contador para el número de pisadas que tu haces
|
|
crack_time
|
Contador para la animación de crujir los nudillos
|
|
last_pissed_time
|
Contador para el uso del baño. Con ello determina si da vida al usarlo o no cuando lo usas otra vez
|
|
newowner
|
La id del actor de la vista de la cámara que esta siendo usada. Si no esta siendo usada será -1. Configúrala para forzar la vista a la vista de la cámara del actor apropiado con esa id. Si está forzada una tentativa de moverse o presionas escape forzará la vista de la cámara a la vista del jugador. Así si es forzado te aconsejo detectar una tentativa, romper la visión forzada y permitir una vuelta a la visión normal.
|
|
quick_kick
|
Aparece para almacenar la información de si aprietas el botón de quick_kick o no (tecla rápida de la patada)
|
|
cheat_phase
|
0 si no pasa nada. -1 cuando aprietas la " M " y 1 si aprietas la " S ". Es para los trucos. En Duke Nukem es DN, por lo que puedes deducir que MS, equivale a DN cuando introduces los trucos.
|
|
somethingonplayer
|
Es para el enemigo smiler. 0 significa que lo tienes pegado a la cara, -1 significa que no lo esta
|
|
on_ground
|
1 significa que estas pisando tierra, 0 si no lo estas haciendo
|
|
on_crane
|
1 si estas en una grúa, -1 si no lo estas. Configúralo 1 para trabar al jugador en una grúa. La grúa es el sprite que aparece en el episodio 1, que fundamentalmente coge barriles.
|
|
jumping_toggle
|
1 si estas saltando, 0 si no lo estas
|
|
jumping_counter
|
Cuenta la longitud de tiempo que el jugador puede estar saltando
|
|
cursectnum
|
Es el sector donde se encuentra el jugador
|
|
spritebridge
|
Será 1 si estas en un sprite con renderización horizontal (que a veces se utiliza de puente, para que pase el jugador)
|
|
zoom
|
Es el zoom del mapa. Su valor inicial es 768, el valor mínimo es 48 y el máximo 2048
|
|
exitx
|
Fija la pared x, que contiene el sector con lotag -1 ( = 65535 ). Sin embargo, no es usado por el código esta variable
|
|
exity
|
Fija la pared y, que contiene el sector con lotag -1 ( = 65535 ). Sin embargo, no es usado por el código esta variable
|
|
loogiex[64]
|
Posición aleatoria x del escupitajo del enemigo lizard. Actualmente no es posible cambiarla
|
|
loogiey[64]
|
Posición aleatoria y del escupitajo del enemigo lizard. Actualmente no es posible cambiarla
|
|
numloogs
|
Es configurado como 3, un número aleatorio de 0 a 8 de escupitajos mostrados en la pantalla.
|
|
loogcnt
|
Se configura como 96. Es el contador para el display de escupitajos.
|
|
posx
|
Posición x del jugador
|
|
posy
|
Posición y del jugador
|
|
posz
|
Posición z del jugador
|
|
oposx
|
Antigua posición x del jugador. Usado para las interpolaciones de las imágenes (frames). NO ALTERAR
|
|
oposy
|
Antigua posición y del jugador. Usado para las interpolaciones de las imágenes (frames). NO ALTERAR
|
|
oposz
|
Antigua posición z del jugador. Usado para las interpolaciones de las imágenes (frames). NO ALTERAR
|
|
horiz
|
Valor de la vista hacia arriba o hacia abajo del jugador. Añadido a horizoff para obtener la vista del jugador
|
|
horizoff
|
El jugador mira hacia arriba o hacia abajo basándose en la inclinación del sector
|
|
ohoriz
|
Valor antiguo de la vista. Usado para las interpolaciones de las imágenes (frames). NO ALTERAR
|
|
ohorizoff
|
Valor antiguo de la vista. Usado para las interpolaciones de las imágenes (frames). NO ALTERAR
|
|
bobposx
|
Para sectores que rotan. Usado para calcula la velocidad del jugador que se mueve alrededor del circulo.
|
|
bobposy
|
Para sectores que rotan. Usado para calcula la velocidad del jugador que se mueve alrededor del circulo.
|
|
bobposy
|
Para sectores que rotan. Usado para calcula la velocidad del jugador que se mueve alrededor del circulo.
|
|
truefz
|
Valor z del suelo del sector. Es modificado por el SE con lotag 17 (ascensor)
|
|
truecz
|
Valor z del techo del sector. Es modificado por el SE con lotag 17 (ascensor)
|
|
visibility
|
Visibilidad del jugador. Si esta cerca de una explosión se configura como -127 (valor máximo es negativo). Armas sin flag NOVISIBLE se configuran como 0. Esta variable no es usada en Duke, probablemente servirá para que te detecten los enemigos
|
|
*palette
|
Puntero para la compensación de la paleta en la memoria.
|
|
posxv
|
Desconocido su uso
|
|
posyv
|
Desconocido su uso
|
|
poszv
|
Desconocido su uso
|
|
randomflamex
|
Esta variable esta en desuso. Puedes hacer con ella lo que quieras.
|
|
weapon_ang
|
Es usada como una compensación negativa desde la posición del display del arma. No será configurada por cualquier otro código. Aparece ser una tentativa falsa en la sacudida de la arma que nunca consiguió ser utilizada o quitarla.
|
|
refresh_inventory
|
Inicialmente es 0 cuando el mapa se carga. Si se configura con un valor distinto de 0 entonces 'inventoryleft' se realiza una vez y refresh_inventory se reajusta a cero.
|
|
angvel
|
Desconocido su uso
|
|
wackedbyactor
|
Es una ID del sprite. Se guarda que el actor mato al jugador. Inicialmente -1 cuando el mapa es cargado o el jugador reseteado.
|
|
frag_ps
|
La id del jugador que mata al jugador concurrente. Inicialmente es igual que la id del propio jugador
|
|
frag
|
El número de frags que tiene el jugador
|
|
fraggedself
|
El número de suicidios que tiene el jugador
|
|
pals_time
|
Obtiene el primer número del comando PALFROM. Contador de la cantidad de tiempo que la pantalla estuvo iluminada.
|
|
pals[3]
|
Pals[0-2] obtiene los valores rojo, verde, azul para las paletas de las iluminaciones
|
|
last_full_weapon
|
Inicialmente 0. Se configura con el valor del arma previa cuando el jugador coge una nueva arma
|
|
subweapon
|
Esta flag es configurada si last_full_weapon era el shrinker que es de otra manera cero. Esto se determina si se está utilizando el expander o no.
|
|
show_empty_weapon
|
Contador configurado como 32, cuando el jugador coge una arma.
|
|
on_warping_sector
|
Inicialmente 0, se configura 1 por un transporter sector effector, y reseteada como 0 cuando se procesa
|
|
ammo_amount[MAX_WEAPONS]
|
Especifica la cantidad de munición para cada arma
|
|
gotweapon[MAX_WEAPONS]
|
Desconocido, aunque se cree que especifica que con ello obtenemos las armas que el jugador a cogido.
|
|
extra
|
Salud del jugador
|
|
last_extra
|
Valor previo a extra
|
|
tipincs
|
Contador para la animación de pagar (mano con el billete). Configurada como 26 por el comando de CON tip e inicia la animación si el valor no es 0
|
|
wantweaponfire
|
Id del arma seleccionada
|
|
hurt_delay
|
Produce un retraso para los objetos que hacen daño al jugador. CACTUS retrasa 16. Debajo de 8 no retrasa nada. (¿Rebote del jugador al chocar?)
|
|
hbomb_hold_delay
|
Es usado para propósitos de display. Es mayor que 0 cuando el jugador está lanzando una pipebomb. Secuencia a través de la animación y entonces resetea a 0
|
|
knee_incs
|
Usado para el control de secuencias de la animación de la patada. El máximo valor por animación es 0. Si es distinto de 0 cuenta hacia arriba. Se resetea a 0 después de alcanzar 15.
|
|
access_incs
|
Similar a tip_incs pero para la animación del acceso con tarjeta. Si es distinto de 0 la cuenta va hacia arriba. El máximo valor es 20. Cuando usas una pared o sprite que necesita acceso, comprueba que el jugador este en el correcto acceso, entonces la animación empieza y esta variable se configura como 1.Tambien configura a access_walnum o access_spritenum. Para sprites, la paleta de objetivo y tarjeta deben de ser del mismo color.
|
|
access_wallnum
|
mira access_incs
|
|
access_spritenum
|
mira access_incs
|
|
fta
|
Contador para el display del quote
|
|
ftq
|
Id del quote que esta en pantalla
|
|
kickback_pic
|
Desconocido su uso
|
|
got_access
|
Desconocido su uso
|
|
one_parallax_sectnum
|
Para SE con lotag 13, el ceilingpicnum y ceilingshade del sector se configura a este ceilingpicnum y ceilingshade. Esto solamente viene para el jugador de id 0. Esto es configurado para el jugador 0 solamente cuando el nivel cargado con el primer sector cargado con ceilingstat con el bit 0 configurado.
|
|
random_club_frame
|
Inicialmente 0. El comentario en el código dice 'Glowing'.... .En WW2GI hace incremento se 64 cada imagen si contiene flag WEAPON_FLAG_GLOWS el arma. Si es distinto de 0 no te dejara disparar la escopeta. Cuando están en pantalla las armas shrinker o grower el gráfico SHRINKER +2 es dibujado usando este modificador, entonces el arma se modifica normalmente
|
|
fist_incs
|
Es un contador hacia arriba distinto de 0. Usado para el dibuja en pantalla de la secuencia del gráfico FIST. Configúralo a 1 para empezar la animación.
|
|
one_eighty_count
|
Si one_eighty_count es menor que 0, se suma 128 a one_eighty_count y a ang. Es configurado en TURNAROUND como -1024. Para simular el movimiento completo se hizo durante EVENT_TURNAROUND cuando one_eighty_count era -1024
|
|
dummyplayersprite
|
Cuando te encuentras bajo el agua, un dummyplayersprite de PLAYERUNDERWATER aparece (se realiza un spawn). La id del sprite es reproducida en la simulación del sprite del jugador. El sprite hace que siga la posición del jugador. El sprite se elimina cuando sale el jugador fuera del agua
|
|
extra_extra8
|
Inicialmente 0. Es el daño causado al jugador dividido entre 256. Si no hay daño la variable no estará limpia. Posteriormente será modificado por la cantidad de armadura (shield_amount).
|
|
actorsqu
|
Inicialmente -1. Es para el Actor Squished (actor aplastado). Este es el actor sobre el que estas caminando cuando ellos están aplastados. Cuando knee_incs es mayor a 0, entonces el jugador hace cara al aplastado. El actor esta muerto cuando knee_incs es mayor a 15. En multiplayer tu puedes auto aplastar a otros jugadores que están aplastados. Esto se hará configurando knee_incs = 1; weapon_pos = -1; actorsqu = ps[otherp].i; Esta configuración se hace en un comando de CON, pstomp
|
|
timebeforeexit
|
Contador hacia abajo. En 26*5 todos los sonidos serán detenidos y se reproduce customexitsound si es mayor a 0. También aparecerá en pantalla el quote 102. Todos los jugadores serán configurados como si hubieran acabado el nivel y se configura el siguiente para cargar
|
|
customexitsound
|
Desconocido su uso
|
|
weaprecs[16]
|
Usado y configurado por el comando de CON ifgetweaponce
|
|
weapreccnt
|
Desconocido su uso
|
|
interface_toggle_flag
|
Sirve para rehacer comandos desde que están siendo procesados cuando el menú sale. Configuralo 0 para permitir el procesado normal. 1 para desactivarlos. Util en multiplayer, cuando ha empezado el juego.
|
|
rotscrnang
|
Es el control del ángulo de giro de la cámara. Para simular el LOOKLEFT, hay que restar 152 desde la variable look_ang y sumar 24 a rotscrnang
|
|
dead_flag
|
Inicialmente 0, sirve para controlar de una sola vez el proceso cuando muere el jugador. Cuando la vida (extra) es menor que 0, entonces dead_flag es chequeado y configurado
|
|
pycount
|
Se usa para modificar pyoff. Se incrementa el ángulo, que es usado para obtener el seno para obtener pyoff son incrementos de 32 o 52 dependiendo de si el jugador tiene activado el jetpack, etc...
|
|
pyoff
|
Mirar pycount
|
|
opyoff
|
Configura el valor antiguo de pyoff. Usado para las interpolaciones de las imágenes (frames). NO ALTERAR
|
|
weapon_pos
|
Es usado para la imagen en pantalla del arma. Cuando se configura como -9, se para la cuenta y se chequea para resetearse a otra arma cuando estaba configurado con un valor distinto de 0. Es un decremento hasta que alcanza 0 ó -9. Se usa para levantar y bajar de la arma en la pantalla cuando esta el gráfico del arma.
|
|
gm
|
Es el modo de juego (Singleplayer, dukematch, cooperativa, si estas en el menú...). Sus valores son: 1 para el menú, 2 para reproducir la demo (archivos .dmo), 4 para cargar el juego (MODE_EOL) 8 para el final del nivel, 16 para escribir un mensaje en el chat, 32 para resetear el nivel, 64 para escoger a quien envías el mensaje y 128 para el juego finalizado (para que salga del juego)
|
|
name[32]
|
Para el nombre del jugador. No se usa esta variable.
|
|
buttonpalette
|
Obtiene el color del nukebutton cuando se pulsa. Es usado cuando fist_incs alcanza el valor 42 y calcula el siguiente nivel
|
|
lastrandomspot
|
Inicialmente 0. No se usa esta variable.
|
|
toggle_key_flag
|
Para las cosas que se usan con la tecla espacio, cámaras, bolas de billar, etc...
|
|
knuckle_incs
|
Inicialmente 1. Es usado para la animación del los nudillos, cuando el jugador esta parado (totalclock>1024), entonces la animación empieza. Cuando llega a 22 o disparas una arma se resetea a 0.
|
|
select_dir
|
No se usa ni es inicializada
|
|
walking_snd_toggle
|
Inicialmente 0. Contador hacia abajo distinto de 0 que es usado para retrasar el sonido de las pisadas para que ocurra cualquier otra imagen
|
|
palookup
|
Parece ser usado como una paleta cuando el sector no tiene paleta configurada. Es el color/equipo del jugador. Cuando el juego es cargado, se configura como la paleta del jugador si es distinta de 0, entonces se hacen incremento desde 9 hasta 16 y vuelve otra vez
|
|
hard_landing
|
Es un contador hacia abajo distinto de 0, cuando el jugador aterriza en tierra con una velocidad grande, hard_landing es configurado con la velocidad. Esto causa una despedida hacia abajo si hay un aterrizaje duro en la tierra
|
|
fire_flag
|
Desconocido su uso
|
|
reloading
|
Añadido en Eduke32, no explicado pero se intuye que es para indicar que el jugador recarga. Es 1 cuando recarga el jugador y 0 cuando no lo está.
|
|
movement_lock
|
Sirve para bloquear el movimiento del jugador.
|
|
sound_pitch
|
No explicado hasta la fecha.
|