GUIA DE EDUKE
 • ¿Qué es Eduke?
 • Estructura del puerto
LAS VARIABLES
 • Fundamentos
 • Comandos generales
 • Operaciones Lógicas
 • Variables actualizadas
 • Variables predefinidas
ESTRUCTURAS
 • Introducción
 • Sector
 • Wall
 • Sprite
 • El jugador
 • Userdef
 • Comandos alternativos
NUEVOS ELEMENTOS
 • Switch
 • Eventloadactor
 • Bucles
OTROS COMANDOS
 • Display
 • Proyectiles
 • Otros comandos
EVENTOS
 • Introducción
 • Listado de eventos
MAS INFORMACION
 • Eduke32 Wiki
 • Eduke 2.0 - Oficial
 • Eduke 2.1.1
 • RTCM - Eduke FAQ
 • RTCM - Eduke Guide

Estructura del jugador


Estructura del jugador


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:

typedef struct player_struct
{

long zoom,exitx,exity,loogiex[64],loogiey[64],numloogs,loogcnt;
long posx, posy, posz, horiz, ohoriz, ohorizoff, invdisptime;
long bobposx,bobposy,oposx,oposy,oposz,pyoff,opyoff;
long posxv,posyv,poszv,last_pissed_time,truefz,truecz;
long player_par,visibility;
long bobcounter,weapon_sway;
long pals_time,randomflamex,crack_time;

int32 aim_mode;

short ang,oang,angvel,cursectnum,look_ang,last_extra,subweapon;
short ammo_amount[MAX_WEAPONS],wackedbyactor,frag,fraggedself;

short curr_weapon, last_weapon, tipincs, horizoff, wantweaponfire;
short holoduke_amount,newowner,hurt_delay,hbomb_hold_delay;
short jumping_counter,airleft,knee_incs,access_incs;
short fta,ftq,access_wallnum,access_spritenum;
short kickback_pic,got_access,weapon_ang,firstaid_amount;
short somethingonplayer,on_crane,i,one_parallax_sectnum;
short over_shoulder_on,random_club_frame,fist_incs;
short one_eighty_count,cheat_phase;
short dummyplayersprite,extra_extra8,quick_kick;
short heat_amount,actorsqu,timebeforeexit,customexitsound;

short weaprecs[16],weapreccnt,interface_toggle_flag;

short rotscrnang,dead_flag,show_empty_weapon;
short scuba_amount,jetpack_amount,steroids_amount,shield_amount;
short holoduke_on,pycount,weapon_pos,frag_ps;
short transporter_hold,last_full_weapon,footprintshade,boot_amount;
// transporter_hold if >0, is the time that the player can't move.
// last_pissed_time is the time since the player last pissed...
// used as count-down to getting health from toilet

int scream_voice;

char gm,on_warping_sector,footprintcount;
char hbomb_on,jumping_toggle,rapid_fire_hold,on_ground;
char name[32],inven_icon,buttonpalette;

char jetpack_on,spritebridge,lastrandomspot;
char scuba_on,footprintpal,heat_on;

char holster_weapon,falling_counter;
char gotweapon[MAX_WEAPONS],refresh_inventory,*palette;

char toggle_key_flag,knuckle_incs; // ,select_dir;
char walking_snd_toggle, palookup, hard_landing;
char max_secret_rooms,secret_rooms,/*fire_flag,*/pals[3];
#ifdef EDUKE
short max_actors_killed,actors_killed;
char return_to_center;
#else
char max_actors_killed,actors_killed,return_to_center;
#endif
} ;

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:

 getplayer[ < VARIABLE1 > ].miembro < VARIABLE2 >
 setplayer[ < VARIABLE1 > ].miembro < VARIABLE2 >

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.

Política de privacidad
© Copyright - 2003 - 2013 Dukespana.com
Todos los derechos reservados.