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 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 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 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; }