#include "g_local.h"
static void set_classname(edict_t *e, struct field_value value) { e->classname = value.string; }
static struct field_value get_classname(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->classname};
}
static void set_model(edict_t *e, struct field_value value) { e->model = value.string; }
static struct field_value get_model(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->model};
}
static void set_spawnflags(edict_t *e, struct field_value value) { e->spawnflags = value.integer; }
static struct field_value get_spawnflags(const edict_t *e) {
return (struct field_value){.type = F_INT, .integer = e->spawnflags};
}
static void set_speed(edict_t *e, struct field_value value) { e->speed = value.floating; }
static struct field_value get_speed(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->speed};
}
static void set_accel(edict_t *e, struct field_value value) { e->accel = value.floating; }
static struct field_value get_accel(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->accel};
}
static void set_decel(edict_t *e, struct field_value value) { e->decel = value.floating; }
static struct field_value get_decel(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->decel};
}
static void set_target(edict_t *e, struct field_value value) { e->target = value.string; }
static struct field_value get_target(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->target};
}
static void set_targetname(edict_t *e, struct field_value value) { e->targetname = value.string; }
static struct field_value get_targetname(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->targetname};
}
static void set_pathtarget(edict_t *e, struct field_value value) { e->pathtarget = value.string; }
static struct field_value get_pathtarget(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->pathtarget};
}
static void set_deathtarget(edict_t *e, struct field_value value) { e->deathtarget = value.string; }
static struct field_value get_deathtarget(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->deathtarget};
}
static void set_killtarget(edict_t *e, struct field_value value) { e->killtarget = value.string; }
static struct field_value get_killtarget(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->killtarget};
}
static void set_combattarget(edict_t *e, struct field_value value) { e->combattarget = value.string; }
static struct field_value get_combattarget(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->combattarget};
}
static void set_message(edict_t *e, struct field_value value) { e->message = value.string; }
static struct field_value get_message(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->message};
}
static void set_team(edict_t *e, struct field_value value) { e->team = value.string; }
static struct field_value get_team(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->team};
}
static void set_wait(edict_t *e, struct field_value value) { e->wait = value.floating; }
static struct field_value get_wait(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->wait};
}
static void set_delay(edict_t *e, struct field_value value) { e->delay = value.floating; }
static struct field_value get_delay(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->delay};
}
static void set_random(edict_t *e, struct field_value value) { e->random = value.floating; }
static struct field_value get_random(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->random};
}
static void set_move_origin(edict_t *e, struct field_value value) { VectorCopy(value.vector, e->move_origin); }
static struct field_value get_move_origin(const edict_t *e) {
struct field_value v;
v.type = F_VECTOR;
VectorCopy(e->move_origin, v.vector);
return v;
}
static void set_move_angles(edict_t *e, struct field_value value) { VectorCopy(value.vector, e->move_angles); }
static struct field_value get_move_angles(const edict_t *e) {
struct field_value v;
v.type = F_VECTOR;
VectorCopy(e->move_angles, v.vector);
return v;
}
static void set_style(edict_t *e, struct field_value value) { e->style = value.integer; }
static struct field_value get_style(const edict_t *e) {
return (struct field_value){.type = F_INT, .integer = e->style};
}
static void set_count(edict_t *e, struct field_value value) { e->count = value.integer; }
static struct field_value get_count(const edict_t *e) {
return (struct field_value){.type = F_INT, .integer = e->count};
}
static void set_health(edict_t *e, struct field_value value) { dv_set(ent_write_health(e), value.integer); }
static struct field_value get_health(const edict_t *e) {
return (struct field_value){.type = F_INT, .integer = ent_read_health(e)->value};
}
static void set_sounds(edict_t *e, struct field_value value) { e->sounds = value.integer; }
static struct field_value get_sounds(const edict_t *e) {
return (struct field_value){.type = F_INT, .integer = e->sounds};
}
static void set_dmg(edict_t *e, struct field_value value) { e->dmg = value.integer; }
static struct field_value get_dmg(const edict_t *e) { return (struct field_value){.type = F_INT, .integer = e->dmg}; }
static void set_mass(edict_t *e, struct field_value value) { e->mass = value.integer; }
static struct field_value get_mass(const edict_t *e) { return (struct field_value){.type = F_INT, .integer = e->mass}; }
static void set_volume(edict_t *e, struct field_value value) { e->volume = value.floating; }
static struct field_value get_volume(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->volume};
}
static void set_attenuation(edict_t *e, struct field_value value) { e->attenuation = value.floating; }
static struct field_value get_attenuation(const edict_t *e) {
return (struct field_value){.type = F_FLOAT, .floating = e->attenuation};
}
static void set_map(edict_t *e, struct field_value value) { e->map = value.string; }
static struct field_value get_map(const edict_t *e) {
return (struct field_value){.type = F_LSTRING, .string = e->map};
}
static void set_origin(edict_t *e, struct field_value value) { VectorCopy(value.vector, e->s.origin); }
static struct field_value get_origin(const edict_t *e) {
struct field_value v;
v.type = F_VECTOR;
VectorCopy(e->s.origin, v.vector);
return v;
}
static void set_angles(edict_t *e, struct field_value value) { VectorCopy(value.vector, e->s.angles); }
static struct field_value get_angles(const edict_t *e) {
struct field_value v;
v.type = F_VECTOR;
VectorCopy(e->s.angles, v.vector);
return v;
}
static void set_angle(edict_t *e, struct field_value value) { VectorSet(e->s.angles, 0, value.floating, 0); }
static struct field_value get_angle(const edict_t *e) {
return (struct field_value){.type = F_ANGLEHACK, .floating = e->s.angles[1]};
}
static void set_item_spawn(edict_t *e, struct field_value value) { e->item = value.item; }
static void set_lip(spawn_temp_t *st, struct field_value value) { st->lip = value.integer; }
static void set_distance(spawn_temp_t *st, struct field_value value) { st->distance = value.integer; }
static void set_height(spawn_temp_t *st, struct field_value value) { st->height = value.integer; }
static void set_noise(spawn_temp_t *st, struct field_value value) { st->noise = value.string; }
static void set_pausetime(spawn_temp_t *st, struct field_value value) { st->pausetime = value.floating; }
static void set_item_temp(spawn_temp_t *st, struct field_value value) { st->item = value.string; }
static void set_gravity(spawn_temp_t *st, struct field_value value) { st->gravity = value.string; }
static void set_sky(spawn_temp_t *st, struct field_value value) { st->sky = value.string; }
static void set_skyrotate(spawn_temp_t *st, struct field_value value) { st->skyrotate = value.floating; }
static void set_skyaxis(spawn_temp_t *st, struct field_value value) { VectorCopy(value.vector, st->skyaxis); }
static void set_minyaw(spawn_temp_t *st, struct field_value value) { st->minyaw = value.floating; }
static void set_maxyaw(spawn_temp_t *st, struct field_value value) { st->maxyaw = value.floating; }
static void set_minpitch(spawn_temp_t *st, struct field_value value) { st->minpitch = value.floating; }
static void set_maxpitch(spawn_temp_t *st, struct field_value value) { st->maxpitch = value.floating; }
static void set_nextmap(spawn_temp_t *st, struct field_value value) { st->nextmap = value.string; }
field_t fields[] = {{"classname", F_LSTRING, 0, set_classname, get_classname},
{"model", F_LSTRING, 0, set_model, get_model},
{"spawnflags", F_INT, 0, set_spawnflags, get_spawnflags},
{"speed", F_FLOAT, 0, set_speed, get_speed},
{"accel", F_FLOAT, 0, set_accel, get_accel},
{"decel", F_FLOAT, 0, set_decel, get_decel},
{"target", F_LSTRING, 0, set_target, get_target},
{"targetname", F_LSTRING, 0, set_targetname, get_targetname},
{"pathtarget", F_LSTRING, 0, set_pathtarget, get_pathtarget},
{"deathtarget", F_LSTRING, 0, set_deathtarget, get_deathtarget},
{"killtarget", F_LSTRING, 0, set_killtarget, get_killtarget},
{"combattarget", F_LSTRING, 0, set_combattarget, get_combattarget},
{"message", F_LSTRING, 0, set_message, get_message},
{"team", F_LSTRING, 0, set_team, get_team},
{"wait", F_FLOAT, 0, set_wait, get_wait},
{"delay", F_FLOAT, 0, set_delay, get_delay},
{"random", F_FLOAT, 0, set_random, get_random},
{"move_origin", F_VECTOR, 0, set_move_origin, get_move_origin},
{"move_angles", F_VECTOR, 0, set_move_angles, get_move_angles},
{"style", F_INT, 0, set_style, get_style},
{"count", F_INT, 0, set_count, get_count},
{"health", F_INT, 0, set_health, get_health},
{"sounds", F_INT, 0, set_sounds, get_sounds},
{"light", F_IGNORE},
{"dmg", F_INT, 0, set_dmg, get_dmg},
{"mass", F_INT, 0, set_mass, get_mass},
{"volume", F_FLOAT, 0, set_volume, get_volume},
{"attenuation", F_FLOAT, 0, set_attenuation, get_attenuation},
{"map", F_LSTRING, 0, set_map, get_map},
{"origin", F_VECTOR, 0, set_origin, get_origin},
{"angles", F_VECTOR, 0, set_angles, get_angles},
{"angle", F_ANGLEHACK, 0, set_angle, get_angle},
{"lip", F_INT, FFL_SPAWNTEMP, NULL, NULL, set_lip},
{"distance", F_INT, FFL_SPAWNTEMP, NULL, NULL, set_distance},
{"height", F_INT, FFL_SPAWNTEMP, NULL, NULL, set_height},
{"noise", F_LSTRING, FFL_SPAWNTEMP, NULL, NULL, set_noise},
{"pausetime", F_FLOAT, FFL_SPAWNTEMP, NULL, NULL, set_pausetime},
{"item", F_LSTRING, FFL_SPAWNTEMP, NULL, NULL, set_item_temp},
{"item", F_ITEM, 0, set_item_spawn, NULL},
{"gravity", F_LSTRING, FFL_SPAWNTEMP, NULL, NULL, set_gravity},
{"sky", F_LSTRING, FFL_SPAWNTEMP, NULL, NULL, set_sky},
{"skyrotate", F_FLOAT, FFL_SPAWNTEMP, NULL, NULL, set_skyrotate},
{"skyaxis", F_VECTOR, FFL_SPAWNTEMP, NULL, NULL, set_skyaxis},
{"minyaw", F_FLOAT, FFL_SPAWNTEMP, NULL, NULL, set_minyaw},
{"maxyaw", F_FLOAT, FFL_SPAWNTEMP, NULL, NULL, set_maxyaw},
{"minpitch", F_FLOAT, FFL_SPAWNTEMP, NULL, NULL, set_minpitch},
{"maxpitch", F_FLOAT, FFL_SPAWNTEMP, NULL, NULL, set_maxpitch},
{"nextmap", F_LSTRING, FFL_SPAWNTEMP, NULL, NULL, set_nextmap},
{0, 0, 0, 0}
};
void InitGame(void) {
gi.dprintf("==== InitGame ====\n");
gun_x = gi.cvar("gun_x", "0", 0);
gun_y = gi.cvar("gun_y", "0", 0);
gun_z = gi.cvar("gun_z", "0", 0);
sv_rollspeed = gi.cvar("sv_rollspeed", "200", 0);
sv_rollangle = gi.cvar("sv_rollangle", "2", 0);
sv_maxvelocity = gi.cvar("sv_maxvelocity", "2000", 0);
sv_gravity = gi.cvar("sv_gravity", "800", 0);
dedicated = gi.cvar("dedicated", "0", CVAR_NOSET);
sv_cheats = gi.cvar("cheats", "0", CVAR_SERVERINFO | CVAR_LATCH);
gi.cvar("gamename", GAMEVERSION, CVAR_SERVERINFO | CVAR_LATCH);
gi.cvar("gamedate", __DATE__, CVAR_SERVERINFO | CVAR_LATCH);
maxclients = gi.cvar("maxclients", "4", CVAR_SERVERINFO | CVAR_LATCH);
maxspectators = gi.cvar("maxspectators", "4", CVAR_SERVERINFO);
deathmatch = gi.cvar("deathmatch", "0", CVAR_LATCH);
coop = gi.cvar("coop", "0", CVAR_LATCH);
skill = gi.cvar("skill", "1", CVAR_LATCH);
maxentities = gi.cvar("maxentities", "1024", CVAR_LATCH);
dmflags = gi.cvar("dmflags", "0", CVAR_SERVERINFO);
fraglimit = gi.cvar("fraglimit", "0", CVAR_SERVERINFO);
timelimit = gi.cvar("timelimit", "0", CVAR_SERVERINFO);
password = gi.cvar("password", "", CVAR_USERINFO);
spectator_password = gi.cvar("spectator_password", "", CVAR_USERINFO);
filterban = gi.cvar("filterban", "1", 0);
g_select_empty = gi.cvar("g_select_empty", "0", CVAR_ARCHIVE);
run_pitch = gi.cvar("run_pitch", "0.002", 0);
run_roll = gi.cvar("run_roll", "0.005", 0);
bob_up = gi.cvar("bob_up", "0.005", 0);
bob_pitch = gi.cvar("bob_pitch", "0.002", 0);
bob_roll = gi.cvar("bob_roll", "0.002", 0);
flood_msgs = gi.cvar("flood_msgs", "4", 0);
flood_persecond = gi.cvar("flood_persecond", "4", 0);
flood_waitdelay = gi.cvar("flood_waitdelay", "10", 0);
sv_maplist = gi.cvar("sv_maplist", "", 0);
InitItems();
Com_sprintf(game.helpmessage1, sizeof(game.helpmessage1), "");
Com_sprintf(game.helpmessage2, sizeof(game.helpmessage2), "");
game.maxentities = maxentities->value;
g_edicts = gi.TagMalloc(game.maxentities * sizeof(g_edicts[0]), TAG_GAME);
globals.edicts = g_edicts;
globals.max_edicts = game.maxentities;
game.maxclients = maxclients->value;
game.clients = gi.TagMalloc(game.maxclients * sizeof(game.clients[0]), TAG_GAME);
globals.num_edicts = game.maxclients + 1;
}
void WriteGame(char *filename, bool autosave) {
gi.dprintf("unimplemented (WriteGame)");
}
void ReadGame(char *filename) {
gi.error("unimplemented (ReadGame)");
}
void WriteLevel(char *filename) {
gi.dprintf("unimplemented (WriteLevel)");
}
void ReadLevel(char *filename) {
gi.error("unimplemented (ReadLevel)");
}