void PLAYER::snap(int snapping_client) { NETOBJ_CLIENT_INFO *client_info = (NETOBJ_CLIENT_INFO *)snap_new_item(NETOBJTYPE_CLIENT_INFO, client_id, sizeof(NETOBJ_CLIENT_INFO)); str_to_ints(&client_info->name0, 6, server_clientname(client_id)); str_to_ints(&client_info->skin0, 6, skin_name); client_info->use_custom_color = use_custom_color; client_info->color_body = color_body; client_info->color_feet = color_feet; NETOBJ_PLAYER_INFO *info = (NETOBJ_PLAYER_INFO *)snap_new_item(NETOBJTYPE_PLAYER_INFO, client_id, sizeof(NETOBJ_PLAYER_INFO)); info->latency = latency.min; info->latency_flux = latency.max-latency.min; info->local = 0; info->cid = client_id; info->score = score; info->team = team; if(client_id == snapping_client) info->local = 1; if((config.sv_rainbow) || (config.sv_rainbow_admin && authed && rb==true)) { game.players[client_id]->use_custom_color = true; client_info->color_body = rbc; client_info->color_feet = rbc; } }
void GAMECONTROLLER::snap(int snapping_client) { NETOBJ_GAME *gameobj = (NETOBJ_GAME *)snap_new_item(NETOBJTYPE_GAME, 0, sizeof(NETOBJ_GAME)); gameobj->paused = game.world.paused; gameobj->game_over = game_over_tick==-1?0:1; gameobj->sudden_death = sudden_death; gameobj->score_limit = config.sv_scorelimit; gameobj->time_limit = config.sv_timelimit; gameobj->round_start_tick = round_start_tick; gameobj->flags = game_flags; gameobj->warmup = warmup; gameobj->round_num = (strlen(config.sv_maprotation) && config.sv_rounds_per_map) ? config.sv_rounds_per_map : 0; gameobj->round_current = round_count+1; if(snapping_client == -1) { // we are recording a demo, just set the scores gameobj->teamscore_red = teamscore[0]; gameobj->teamscore_blue = teamscore[1]; } else { // TODO: this little hack should be removed gameobj->teamscore_red = is_teamplay() ? teamscore[0] : game.players[snapping_client]->score; gameobj->teamscore_blue = teamscore[1]; } }
void CHARACTER::snap(int snapping_client) { if(networkclipped(snapping_client) || (snapping_client != player->client_id && player->invisible==true)) return; NETOBJ_CHARACTER *character = (NETOBJ_CHARACTER *)snap_new_item(NETOBJTYPE_CHARACTER, player->client_id, sizeof(NETOBJ_CHARACTER)); // write down the core if(game.world.paused) { // no dead reckoning when paused because the client doesn't know // how far to perform the reckoning character->tick = 0; core.write(character); } else { character->tick = reckoning_tick; sendcore.write(character); } if(do_splash) character->jumped = 3; // set emote if (emote_stop < server_tick()) { emote_type = EMOTE_NORMAL; emote_stop = -1; } character->emote = emote_type; character->ammocount = 0; character->health = 0; character->armor = 0; character->weapon = active_weapon; character->attacktick = attack_tick; character->direction = input.direction; if(player->client_id == snapping_client) { character->health = health; character->armor = armor; if(weapons[active_weapon].ammo > 0) character->ammocount = weapons[active_weapon].ammo; } if (character->emote == EMOTE_NORMAL) { if(250 - ((server_tick() - last_action)%(250)) < 5) character->emote = EMOTE_BLINK; } character->player_state = player_state; }
void PROJECTILE::snap(int snapping_client) { float ct = (server_tick()-start_tick)/(float)server_tickspeed(); if(networkclipped(snapping_client, get_pos(ct))) return; NETOBJ_PROJECTILE *proj = (NETOBJ_PROJECTILE *)snap_new_item(NETOBJTYPE_PROJECTILE, id, sizeof(NETOBJ_PROJECTILE)); fill_info(proj); }
void PICKUP::snap(int snapping_client) { if(spawntick != -1) return; NETOBJ_PICKUP *up = (NETOBJ_PICKUP *)snap_new_item(NETOBJTYPE_PICKUP, id, sizeof(NETOBJ_PICKUP)); up->x = (int)pos.x; up->y = (int)pos.y; up->type = type; // TODO: two diffrent types? what gives? up->subtype = subtype; }
void CRATE::snap(int snapping_client) { if(networkclipped(snapping_client)) return; NETOBJ_CRATE *flag = (NETOBJ_CRATE *)snap_new_item(NETOBJTYPE_CRATE, id, sizeof(NETOBJ_CRATE)); flag->x = (int)pos.x; flag->y = (int)pos.y; flag->type = type; flag->grounded = grounded; }
void PLAYER::snap(int snapping_client) { NETOBJ_CLIENT_INFO *client_info = (NETOBJ_CLIENT_INFO *)snap_new_item(NETOBJTYPE_CLIENT_INFO, client_id, sizeof(NETOBJ_CLIENT_INFO)); str_to_ints(&client_info->name0, 6, server_clientname(client_id)); str_to_ints(&client_info->skin0, 6, skin_name); client_info->use_custom_color = use_custom_color; client_info->color_body = color_body; client_info->color_feet = color_feet; NETOBJ_PLAYER_INFO *info = (NETOBJ_PLAYER_INFO *)snap_new_item(NETOBJTYPE_PLAYER_INFO, client_id, sizeof(NETOBJ_PLAYER_INFO)); info->latency = latency.min; info->latency_flux = latency.max-latency.min; info->local = 0; info->cid = client_id; info->score = score; if(client_id == snapping_client) info->local = 1; }
void PLASMA::snap(int snapping_client) { if(networkclipped(snapping_client)) return; NETOBJ_LASER *obj = (NETOBJ_LASER *)snap_new_item(NETOBJTYPE_LASER, id, sizeof(NETOBJ_LASER)); obj->x = (int)pos.x; obj->y = (int)pos.y; obj->from_x = (int)pos.x; obj->from_y = (int)pos.y; obj->start_tick = eval_tick; }
void FLAG::snap(int snapping_client) { NETOBJ_FLAG *flag = (NETOBJ_FLAG *)snap_new_item(NETOBJTYPE_FLAG, team, sizeof(NETOBJ_FLAG)); flag->x = (int)pos.x; flag->y = (int)pos.y; flag->team = team; flag->carried_by = -1; if(at_stand) flag->carried_by = -2; else if(carrying_character && carrying_character->player) flag->carried_by = carrying_character->player->client_id; }
void BUILDING::snap(int snapping_client) { if(networkclipped(snapping_client) || (!game.players[snapping_client]->get_character() && game.players[snapping_client]->selectspawn && (type != B_SPAWN || team != game.players[snapping_client]->team))) return; NETOBJ_BUILDING *building = (NETOBJ_BUILDING *)snap_new_item(NETOBJTYPE_BUILDING, id, sizeof(NETOBJ_BUILDING)); building->x = (int)pos.x; building->y = (int)pos.y; if(!game.players[snapping_client]->get_character() && game.players[snapping_client]->selectspawn) building->health = 0; else building->health = 80*health/maxhealth; building->team = team; building->anim = anim & 0xF; building->anim2 = anim >> 4; building->type = type; building->power = power; building->angle = (int)((angle+pi/2)/(2*pi)*MAX_INT); building->alive = alive; }