void boss_spawn_tank (edict_t *ent) { char userinfo[MAX_INFO_STRING]; //edict_t *tank; //gi.dprintf("boss_spawn_tank()\n"); if (G_EntExists(ent->owner) && (ent->owner->mtype == BOSS_TANK)) { G_PrintGreenText(va("%s got bored and left the game.", ent->client->pers.netname)); BecomeTE(ent->owner); ent->svflags &= ~SVF_NOCLIENT; ent->viewheight = 22; ent->movetype = MOVETYPE_WALK; ent->solid = SOLID_BBOX; ent->takedamage = DAMAGE_AIM; // recover player info memcpy(userinfo, ent->client->pers.userinfo, sizeof(userinfo)); InitClientPersistant(ent->client); ClientUserinfoChanged(ent, userinfo); modify_max(ent); Pick_respawnweapon(ent); ent->owner = NULL; return; } CreateBoss(ent); }
void boss_spawn_tank (edict_t *ent) { char userinfo[MAX_INFO_STRING], *message; //edict_t *tank; //gi.dprintf("boss_spawn_tank()\n"); if (G_EntExists(ent->owner) && (ent->owner->mtype == BOSS_TANK)) { message = HiPrint(va("%s got bored and left the game.", ent->client->pers.netname)); gi.bprintf(PRINT_HIGH, "%s\n", message); V_Free(message); BecomeTE(ent->owner); ent->svflags &= ~SVF_NOCLIENT; ent->viewheight = 22; ent->movetype = MOVETYPE_WALK; ent->solid = SOLID_BBOX; ent->takedamage = DAMAGE_AIM; // recover player info memcpy(userinfo, ent->client->pers.userinfo, sizeof(userinfo)); InitClientPersistant(ent->client); ClientUserinfoChanged(ent, userinfo); modify_max(ent); Pick_respawnweapon(ent); ent->owner = NULL; return; } CreateBoss(ent); /* message = HiPrint(va("A level %d boss known as %s has spawned!", average_player_level, ent->client->pers.netname)); gi.bprintf(PRINT_HIGH, "%s\n", message); // create the tank entity that the player will pilot tank = G_Spawn(); tank->classname = "boss"; tank->solid = SOLID_BBOX; tank->takedamage = DAMAGE_YES; tank->movetype = MOVETYPE_STEP; tank->clipmask = MASK_MONSTERSOLID; tank->svflags |= SVF_MONSTER; tank->activator = ent; tank->die = boss_tank_die; tank->think = boss_tank_think; tank->mass = 500; tank->monsterinfo.level = average_player_level; tank->health = TANK_INITIAL_HEALTH+TANK_ADDON_HEALTH*tank->monsterinfo.level; tank->max_health = tank->health; tank->mtype = BOSS_TANK; tank->pain = boss_pain; tank->flags |= FL_CHASEABLE; // 3.65 indicates entity can be chase cammed // set up pointers tank->owner = ent; ent->owner = tank; tank->s.modelindex = gi.modelindex ("models/monsters/tank/tris.md2"); VectorSet (tank->mins, -24, -24, -16); VectorSet (tank->maxs, 24, 24, 64); tank->s.skinnum = 2; // commander skin VectorCopy(ent->s.angles, tank->s.angles); tank->s.angles[PITCH] = 0; // monsters don't use pitch tank->nextthink = level.time + FRAMETIME; VectorCopy(ent->s.origin, tank->s.origin); VectorCopy(ent->s.old_origin, tank->s.old_origin); // link up entities gi.linkentity(tank); gi.linkentity(ent); // make the player into a ghost ent->svflags |= SVF_NOCLIENT; ent->viewheight = 0; ent->movetype = MOVETYPE_NOCLIP; ent->solid = SOLID_NOT; ent->takedamage = DAMAGE_NO; ent->client->ps.gunindex = 0; memset (ent->client->pers.inventory, 0, sizeof(ent->client->pers.inventory)); ent->client->pers.weapon = NULL; */ }