/* ================== Cmd_God_f Sets client to godmode argv(0) god ================== */ static void Cmd_God_f(edict_t *ent) { if (CheckCheats(ent)) { ent->flags ^= FL_GODMODE; gi.cprintf(ent, PRINT_HIGH, "godmode %s\n", (ent->flags & FL_GODMODE) ? "ON" : "OFF"); } }
/* ================== Cmd_Notarget_f Sets client to notarget argv(0) notarget ================== */ static void Cmd_Notarget_f(edict_t *ent) { if (CheckCheats(ent)) { ent->flags ^= FL_NOTARGET; gi.cprintf(ent, PRINT_HIGH, "notarget %s\n", (ent->flags & FL_NOTARGET) ? "ON" : "OFF"); } }
Word P_Ticker(void) { player_t *pl; /* wait for refresh to latch all needed data before */ /* running the next tick */ gameaction = ga_nothing; /* Game in progress */ Tick1 = FALSE; /* Reset the flags */ Tick2 = FALSE; Tick4 = FALSE; TimeMark1+=ElapsedTime; /* Timer for ticks */ TimeMark2+=ElapsedTime; TimeMark4+=ElapsedTime; if (TimeMark1>=TICKSPERSEC) { /* Now see if the time has passed... */ TimeMark1-=TICKSPERSEC; Tick1 = TRUE; } if (TimeMark2>=(TICKSPERSEC/2)) { TimeMark2-=(TICKSPERSEC/2); Tick2 = TRUE; } if (TimeMark4>=(TICKSPERSEC/4)) { TimeMark4-=(TICKSPERSEC/4); Tick4 = TRUE; } CheckCheats(); /* Handle pause and cheats */ /* Do option screen processing and control reading */ if (gamepaused) { /* If in pause mode, then don't do any game logic */ return gameaction; } /* Run player actions */ pl = &players; if (pl->playerstate == PST_REBORN) { /* Restart player? */ G_DoReborn(); /* Poof!! */ } AM_Control(pl); /* Handle automap controls */ O_Control(pl); /* Handle option controls */ P_PlayerThink(pl); /* Process player in the game */ if (!(players.AutomapFlags & AF_OPTIONSACTIVE)) { RunThinkers(); /* Handle logic for doors, walls etc... */ P_RunMobjBase(); /* Handle critter think logic */ } P_UpdateSpecials(); /* Handle wall and floor animations */ ST_Ticker(); /* Update status bar */ return gameaction; /* may have been set to ga_died, ga_completed, */ /* or ga_secretexit */ }
/* ================== Cmd_Noclip_f argv(0) noclip ================== */ static void Cmd_Noclip_f(edict_t *ent) { if (!CheckCheats(ent)) { return; } if (ent->movetype == MOVETYPE_NOCLIP) { ent->movetype = MOVETYPE_WALK; } else { ent->movetype = MOVETYPE_NOCLIP; } gi.cprintf(ent, PRINT_HIGH, "noclip %s\n", ent->movetype == MOVETYPE_NOCLIP ? "ON" : "OFF"); }
/* ================== Cmd_Give_f Give items to a client ================== */ static void Cmd_Give_f(edict_t *ent) { char *name; gitem_t *it; int index; int i; bool give_all; edict_t *it_ent; if (!CheckCheats(ent)) { return; } name = gi.args(); if (Q_stricmp(name, "all") == 0) give_all = true; else give_all = false; if (give_all || Q_stricmp(gi.argv(1), "health") == 0) { if (gi.argc() == 3) ent->health = atoi(gi.argv(2)); else ent->health = ent->max_health; if (!give_all) return; } if (give_all || Q_stricmp(name, "weapons") == 0) { for (i = 0; i < ITEM_TOTAL; i++) { it = INDEX_ITEM(i); if (!it->pickup) continue; if (!(it->flags & IT_WEAPON)) continue; ent->client->inventory[i] += 1; } if (!give_all) return; } if (give_all || Q_stricmp(name, "ammo") == 0) { for (i = 0; i < ITEM_TOTAL; i++) { it = INDEX_ITEM(i); if (!it->pickup) continue; if (!(it->flags & IT_AMMO)) continue; Add_Ammo(ent, it, 1000); } if (!give_all) return; } if (give_all || Q_stricmp(name, "armor") == 0) { gitem_armor_t *info; ent->client->inventory[ITEM_ARMOR_JACKET] = 0; ent->client->inventory[ITEM_ARMOR_COMBAT] = 0; it = INDEX_ITEM(ITEM_ARMOR_BODY); info = (gitem_armor_t *)it->info; ent->client->inventory[ITEM_ARMOR_BODY] = info->max_count; if (!give_all) return; } if (give_all || Q_stricmp(name, "Power Shield") == 0) { it = INDEX_ITEM(ITEM_POWER_SHIELD); it_ent = G_Spawn(); it_ent->classname = it->classname; SpawnItem(it_ent, it); if (it_ent->inuse) { Touch_Item(it_ent, ent, NULL, NULL); if (it_ent->inuse) G_FreeEdict(it_ent); } if (!give_all) return; } if (give_all) { for (i = 0; i < ITEM_TOTAL; i++) { it = INDEX_ITEM(i); if (!it->pickup) continue; if (it->flags & (IT_ARMOR | IT_WEAPON | IT_AMMO)) continue; ent->client->inventory[i] = 1; } return; } it = FindItem(name); if (!it) { name = gi.argv(1); it = FindItem(name); if (!it) { gi.cprintf(ent, PRINT_HIGH, "unknown item\n"); return; } } if (!it->pickup) { gi.cprintf(ent, PRINT_HIGH, "non-pickup item\n"); return; } index = ITEM_INDEX(it); if (it->flags & IT_AMMO) { if (gi.argc() == 3) ent->client->inventory[index] = atoi(gi.argv(2)); else ent->client->inventory[index] += it->quantity; } else { it_ent = G_Spawn(); it_ent->classname = it->classname; SpawnItem(it_ent, it); if (it_ent->inuse) { Touch_Item(it_ent, ent, NULL, NULL); if (it_ent->inuse) G_FreeEdict(it_ent); } } }