La Prisión: GameData
LA PRISION
Formato de un fichero *.gamedata generado por una compilación de mapa del Editor.
-------------------------------------------------------------------------------------
Notas:
tipo string: un byte indicando el nº de caracteres (incluyendo el 0) + los_caracteres
-------------------------------------------------------------------------------------
Descripción del formato:
////////////////////////////////////////////////////////////////////////
// HABITACIONES
WORD Número de habitaciones en total
WORD Número de departamentos en total (un departamento == n rooms)
---- n departamentos
BYTE habitaciones en este departamento
----- n habitaciones
DWORD (*) ID de la habitación
string (*) Nombre de juego de la habitación
string Nombre interno de la zona para su carga
BYTE safezone (1==safezone, 0==normal)
///////////////////////////////////////////////////////////////////////
// TIENDAS
WORD nº de tiendas en esta habitación
------- n tiendas
string Nombre de la tienda
WORD BotID (referencia para el aspecto de la tienda)
BYTE Estado de animación
WORD ShopID (referencia para los objetos que vende)
float x
float y
float z
float angulo
///////////////////////////////////////////////////////////////////////
// PUERTAS
BYTE (*) número de puertas en la habitación
------- n puertas:
string nombre de la puerta
[struct EDATA_DOOR]
BYTE (*) acceso restringido (0 == libre acceso)
DWORD (*) ID de la habitación destino (0 == no link)
BYTE (*) ID de la puerta destino
if (acceso_restringido==9)
BYTE acceso especial
if (acceso_especial==2)
WORD tipollave
if (acceso_especial==4)
DWORD varID
//////////////////////////////////////////////////////////////////////
// CAMARAS
DWORD boxes info size
BYTE número de cámaras en la habitación
------- n cámaras:
/////////////////////////////////////////////////////////////////
// BOXES
WORD número de boxes en esta cámara
if (n>0)
------- n boxes:
BYTE tipo de box (0==compleja, 1==mirar, 2==gotolink)
BYTE z-order
// polígono
BYTE nº de vértices del polígono de selección
------- n vértices
float x coordenadas 2D del vértice
float y
bool defined
// caja 2D
int x
int y
int ancho
int alto
BYTE boxtype (0==hay mas datos; 1==mirar, 2==gotolink)
if (boxtype==2)
BYTE Direccion de la flecha
float x,y,z Primer Punto
float x,y,z Segundo Punto
<EndOfBox>
if (boxtype!=2)
DWORD ID de la frase para MIRAR
<EndOfBox>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++ LA BOX SE EJECUTA...
bool ¿ejecutar box siempre?
(if NOT)
--------- 3 veces:
[struct EDDATA_BOX_EXEVARS]
DWORD ID de la variable
int valor a comparar
BYTE and/or con la siguiente
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++ AL TERMINAR LA BOX...
BYTE acción a realizar al terminar la ejecución de la box
DWORD sampleid
BYTE nº de variables a activar al terminar la ejecución de la box
------- n variables
[struct EDDATA_BOX_TERMVARS]
DWORD ID de la variable
int valor que debe tomar la variable
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++ USAR <objlink> CON BOX...
bool usarinfo
BYTE defaultaction para el objectlink[0] <sin objeto>
BYTE nº de object links para "usares" (siempre hay como mínimo uno)
------- n objectlinks
BYTE nº de variables a activar cuando el "preso actúa" con este objectlink
------- n variables
DWORD ID de la variable
int valor que debe tomar la variable
WORD ID del tipo de objeto al que corresponde el link
DWORD sampleid
DWORD ID de la frase
bool ¿Hay datos de animación?
(IF true)
[struct EDDATA_BOX_3DANIM]
WORD ID de la animación a lanzar
float orientación del personaje
float x pos x del personaje
float y pos y
float z pos z
[struct EDDATA_BOX_3DHOTPOINT]
float x Hotpoint x
float y Hotpoint y
float z Hotpoint z
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++ ANIMACION 2D DE LA BOX
string fichero de animación a utilizar
(IF string)
DWORD sampleid
BYTE sampletype
[struct EDDATA_BOX_2DANIMDESC]
BYTE fps
BYTE spf
BYTE tipo de reproducción
int x coordx donde debe reproducirse
int y coordy donde debe reproducirse
BYTE nº de frames
------- n frames:
[struct EDDATA_BOX_2DANIMFRAME]
int x
int y
int ancho
int alto
BYTE nº de frames en la secuencia
------- n frames en secuencia
BYTE frameindex
//////////////////////////////////////////////////////////////////
// INFO DE OBJETOS
// *****************************************************************************************************
WORD nº de nombres diferentes de pcx
------- n nombres de pcx
string nombre del pcx (sin el .pcx)
// *****************************************************************************************************
DWORD nº de tipos de objeto
------- n objetos
WORD id del objeto
string Nombre del objeto
*die--> string Nombre del pcx
*nuevo WORD index de la lista de nombres de pcx
BYTE type
BYTE level
BYTE handling
BYTE effect
int modif
DWORD price
*die--> BYTE wholeness
*die--> DWORD charges
BYTE weight
WORD contain <--- balas o carga que utiliza
// *********************************************************************************************
WORD posibilidad de rotura
WORD tipo de objeto resultante de una rotura
BYTE OBJ_LORE | OBJ_NODROP | OBJ_STACKABLE | OBJ_SOLDVOLATILE
#define OBJ_LORE 1
#define OBJ_NODROP 2
#define OBJ_STACKABLE 4
#define OBJ_SOLDVOLATILE 8
WORD delitos que pueden usar este objeto (cada bit activo indica que ese delito puede usarlo)
BYTE soundtype
BYTE weaponskill
BYTE nº de modificadores extra
------- n modificadores
BYTE stat o skill que modifica (si es <100 es un statID - 1, si >=100 es un skillID - 100)
int modificador
// *********************************************************************************************
//////////////////////////////////////////////////////////////////
// INFO DE TIENDAS (supplies)
// *****************************************************************************************************
WORD ignorar (ID que toca para una nueva supply en el editor)
DWORD nº de supplies
------- n supplies
WORD ID del supply
string nombre del supply (se utilizará en varias movidas para el cliente)
BYTE ID de un gfx para el cliente
BYTE stat o skill que requiere el supply (si es <100 es un statID - 1, si >=100 es un skillID - 100)
(por ejemplo el kit de costura pedirá skill COSTURA, o una box-supply pedirá CERRAJERIA)
BYTE puntos de stat/skill que requiere el supply
BYTE tipo de supply
WORD ID del texto de vendor
BYTE hora de disponibilidad del supply (de hora x)
BYTE hora de disponibilidad del supply (a hora x)
WORD ignorar (ID que toca para una nueva combinación en el editor)
WORD nº de combinaciones o quests
------- n combinaciones o quests
WORD ID del quest (se podría ignorar)
bool hidden? (el quest no presenta texto ni se puede seleccionar pero sí tiene un resultado, etc)
BYTE ID del NPC cuyo aspecto hay que adquirir al completar el quest
BYTE Nivel base del quest
bool Bind? Al completar el quest nos bindeamos a esa room, al xyz donde este el jugador en ese momento
BYTE % del nivel base a ganar como experiencia al completar el quest
BYTE skilID - 1 que hay que activar (de 0 a 1) al completar el quest
string nombre del quest (que presentará el cliente en la lista del interface)
WORD tipo de objeto que entrega el personaje al presentar el quest (0==no da objeto)
WORD delitos que tienen acceso a este quest (cada bit activo indica que ese delito tiene acceso)
WORD ID del texto del quest
WORD ID del texto a presentar a completar el quest
WORD nº de objetos que combinan / hay que dar para el quest
------- n objetos
WORD tipo de objeto
DWORD cantidad de ese objeto (podría ser una cantidad de dinero, por eso un DWORD)
WORD nº de objetos resultado de la combinación o del quest
------- n objetos resultado
WORD tipo de objeto
// *****************************************************************************************************
//////////////////////////////////////////////////////////////////
// INFO DE NPCs
// *****************************************************************************************************
WORD nº de modelos diferentes de NPCs
------- n modelos
string nombre del modelo R3D (sin el "_x[012]" del LOD y sin el ".R3D")
WORD nº de nombres diferentes de NPCs
------- n nombres
string gamename de un NPC
DWORD nº de definiciones de mobs/vendors
------- n bots
WORD id del NPC
*die--> string nombre del modelo
*die--> string nombre del bot
*nuevo WORD index de la lista de nombres de modelos
*nuevo WORD index de la lista de nombres de bots
BYTE ID del delito del bot
int dinero que porta el bot
int salud extra
int fuerza extra
int destreza extra
int nivel
int pelea extra
int ID de los textos del bot en combate
BYTE comportamiento del bot (agresividad)
WORD nº de objetos de loot
------- n objetos de loot
WORD tipo de objeto
BYTE unidades (para calcular % de probabilidad de loot)
BOOL no-loot (este objeto lo tiene el bot pero no puede tocar nunca como loot)
WORD tipo de objeto que SIEMPRE debe dar el bot como loot (0==no suelta nada "siempre")
WORD el bot no ataca (cuando sea agresivo) si el jugador lleva el objeto del tipo indicado
WORD sólo le hace daño el objeto arma especificado (es un ID de objeto)
BYTE tipo de arma que le hace daño (slash, blunt, etc).
WORD ID del supply asociado al bot
// *****************************************************************************************************
//////////////////////////////////////////////////////////////////
// INFO DE RUTAS
DWORD nº de rutas en toda la puta prisión
------- n rutas
BYTE al llegar al ultimo punto de ruta (0==ciclo, 1==ping-pong)
DWORD índice de la key que se debe usar como link para el ciclo o el ping-pong
WORD nº de NPCs con spawn en esta ruta
------- n NPCs
WORD ID del NPC
BYTE spawn inicial (0==siempre, 1=no spawnea, condicional)
BYTE orden de spawn (0==secuencial, 1==aleatorio)
WORD pausa (en MINUTOS)
DWORD ID de la variable a chequear para que se produzca un respawn
(si el ID no es 0)
int valor que debe tener la variable para que se produzca el respawn
DWORD ID de la variable que hay que cambiar cuando el NPC MUERA
(si el ID no es 0)
int valor que debe tomar la variable cuando el NPC muera
DWORD ID de la variable que hay que cambiar cuando el NPC SEA ATACADO
(si el ID no es 0)
int valor que debe tomar la variable cuando el NPC sea atacado
BYTE nº de rooms que atraviesa la ruta (si es 1 no hay 'puerta de salida', 0 es inválido)
------- n rooms
DWORD id de la room
BYTE ID de la puerta de entrada
BYTE ID de la puerta de salida (será 0 siempre en la última zona)
WORD nº de keys en esta room (como mínimo siempre 2)
------- n keys
float x
float y
float z
DWORD tiempo de pausa (en milisegundos) (0xffffffff == pausa infinita de la muerte)
float ángulo de orientación (sólo tenerlo en cuenta si la key tiene pausa)
(si no es la primera key)
DWORD ETA para llegar a esta key (en milisegundos)
//////////////////////////////////////////////////////////////////
// VARIABLES
WORD (*) nº de variables globales
------- n variables
DWORD ID de la variable
string nombre que utiliza la variable
WORD nº de Rooms donde las boxes comprueban el estado de esta variable
------- n rooms
DWORD ID de la room a la que informar de un cambio en esta variable
WORD nº de Rooms donde las boxes modifican el estado de esta variable
------- n rooms
DWORD ID de la room donde se puede modificar esta variable
DWORD ID de la variable "dinero" (que resta dinero al jugador)
DWORD ID de la variable "getobj" (por la que el jugador obtiene un objeto)
<EOF>