⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st_stuff.c

📁 Nxdoom真的满好用的
💻 C
📖 第 1 页 / 共 3 页
字号:
cheatseq_t	cheat_clev = { cheat_clev_seq, 0 };cheatseq_t	cheat_mypos = { cheat_mypos_seq, 0 };// extern char*	mapnames[];//// STATUS BAR CODE//void ST_Stop(void);void ST_refreshBackground(void){    if (st_statusbaron)    {	V_DrawPatch(ST_X, 0, BG, sbar);	if (netgame)	    V_DrawPatch(ST_FX, 0, BG, faceback);	V_CopyRect(ST_X, 0, BG, ST_WIDTH, ST_HEIGHT, ST_X, ST_Y, FG);    }}// Respond to keyboard input events,//  intercept cheats.booleanST_Responder (event_t* ev){  int		i;      // Filter automap on/off.  if (ev->type == ev_keyup      && ((ev->data1 & 0xffff0000) == AM_MSGHEADER))  {    switch(ev->data1)    {      case AM_MSGENTERED:	st_gamestate = AutomapState;	st_firsttime = true;	break;	      case AM_MSGEXITED:	//	fprintf(stderr, "AM exited\n");	st_gamestate = FirstPersonState;	break;    }  }  // if a user keypress...  else if (ev->type == ev_keydown)  {    if (!netgame)    {      // b. - enabled for more debug fun.      // if (gameskill != sk_nightmare) {            // 'dqd' cheat for toggleable god mode      if (cht_CheckCheat(&cheat_god, ev->data1))      {	plyr->cheats ^= CF_GODMODE;	if (plyr->cheats & CF_GODMODE)	{	  if (plyr->mo)	    plyr->mo->health = 100;	  	  plyr->health = 100;	  plyr->message = STSTR_DQDON;	}	else 	  plyr->message = STSTR_DQDOFF;      }      // 'fa' cheat for killer fucking arsenal      else if (cht_CheckCheat(&cheat_ammonokey, ev->data1))      {	plyr->armorpoints = 200;	plyr->armortype = 2;		for (i=0;i<NUMWEAPONS;i++)	  plyr->weaponowned[i] = true;		for (i=0;i<NUMAMMO;i++)	  plyr->ammo[i] = plyr->maxammo[i];		plyr->message = STSTR_FAADDED;      }      // 'kfa' cheat for key full ammo      else if (cht_CheckCheat(&cheat_ammo, ev->data1))      {	plyr->armorpoints = 200;	plyr->armortype = 2;		for (i=0;i<NUMWEAPONS;i++)	  plyr->weaponowned[i] = true;		for (i=0;i<NUMAMMO;i++)	  plyr->ammo[i] = plyr->maxammo[i];		for (i=0;i<NUMCARDS;i++)	  plyr->cards[i] = true;		plyr->message = STSTR_KFAADDED;      }      // 'mus' cheat for changing music      else if (cht_CheckCheat(&cheat_mus, ev->data1))      {		char	buf[3];	int		musnum;		plyr->message = STSTR_MUS;	cht_GetParam(&cheat_mus, buf);		if (gamemode == commercial)	{	  musnum = mus_runnin + (buf[0]-'0')*10 + buf[1]-'0' - 1;	  	  if (((buf[0]-'0')*10 + buf[1]-'0') > 35)	    plyr->message = STSTR_NOMUS;	  else	    S_ChangeMusic(musnum, 1);	}	else	{	  musnum = mus_e1m1 + (buf[0]-'1')*9 + (buf[1]-'1');	  	  if (((buf[0]-'1')*9 + buf[1]-'1') > 31)	    plyr->message = STSTR_NOMUS;	  else	    S_ChangeMusic(musnum, 1);	}      }      // Simplified, accepting both "noclip" and "idspispopd".      // no clipping mode cheat      else if ( cht_CheckCheat(&cheat_noclip, ev->data1) 		|| cht_CheckCheat(&cheat_commercial_noclip,ev->data1) )      {		plyr->cheats ^= CF_NOCLIP;		if (plyr->cheats & CF_NOCLIP)	  plyr->message = STSTR_NCON;	else	  plyr->message = STSTR_NCOFF;      }      // 'behold?' power-up cheats      for (i=0;i<6;i++)      {	if (cht_CheckCheat(&cheat_powerup[i], ev->data1))	{	  if (!plyr->powers[i])	    P_GivePower( plyr, i);	  else if (i!=pw_strength)	    plyr->powers[i] = 1;	  else	    plyr->powers[i] = 0;	  	  plyr->message = STSTR_BEHOLDX;	}      }            // 'behold' power-up menu      if (cht_CheckCheat(&cheat_powerup[6], ev->data1))      {	plyr->message = STSTR_BEHOLD;      }      // 'choppers' invulnerability & chainsaw      else if (cht_CheckCheat(&cheat_choppers, ev->data1))      {	plyr->weaponowned[wp_chainsaw] = true;	plyr->powers[pw_invulnerability] = true;	plyr->message = STSTR_CHOPPERS;      }      // 'mypos' for player position      else if (cht_CheckCheat(&cheat_mypos, ev->data1))      {	static char	buf[ST_MSGWIDTH];	sprintf(buf, "ang=0x%x;x,y=(0x%x,0x%x)",		players[consoleplayer].mo->angle,		players[consoleplayer].mo->x,		players[consoleplayer].mo->y);	plyr->message = buf;      }    }        // 'clev' change-level cheat    if (cht_CheckCheat(&cheat_clev, ev->data1))    {      char		buf[3];      int		epsd;      int		map;            cht_GetParam(&cheat_clev, buf);            if (gamemode == commercial)      {	epsd = 0;	map = (buf[0] - '0')*10 + buf[1] - '0';      }      else      {	epsd = buf[0] - '0';	map = buf[1] - '0';      }      // Catch invalid maps.      if (epsd < 1)	return false;      if (map < 1)	return false;            // Ohmygod - this is not going to work.      if ((gamemode == retail)	  && ((epsd > 4) || (map > 9)))	return false;      if ((gamemode == registered)	  && ((epsd > 3) || (map > 9)))	return false;      if ((gamemode == shareware)	  && ((epsd > 1) || (map > 9)))	return false;      if ((gamemode == commercial)	&& (( epsd > 1) || (map > 34)))	return false;      // So be it.      plyr->message = STSTR_CLEV;      G_DeferedInitNew(gameskill, epsd, map);    }      }  return false;}int ST_calcPainOffset(void){    int		health;    static int	lastcalc;    static int	oldhealth = -1;        health = plyr->health > 100 ? 100 : plyr->health;    if (health != oldhealth)    {	lastcalc = ST_FACESTRIDE * (((100 - health) * ST_NUMPAINFACES) / 101);	oldhealth = health;    }    return lastcalc;}//// This is a not-very-pretty routine which handles//  the face states and their timing.// the precedence of expressions is://  dead > evil grin > turned head > straight ahead//void ST_updateFaceWidget(void){    int		i;    angle_t	badguyangle;    angle_t	diffang;    static int	lastattackdown = -1;    static int	priority = 0;    boolean	doevilgrin;    if (priority < 10)    {	// dead	if (!plyr->health)	{	    priority = 9;	    st_faceindex = ST_DEADFACE;	    st_facecount = 1;	}    }    if (priority < 9)    {	if (plyr->bonuscount)	{	    // picking up bonus	    doevilgrin = false;	    for (i=0;i<NUMWEAPONS;i++)	    {		if (oldweaponsowned[i] != plyr->weaponowned[i])		{		    doevilgrin = true;		    oldweaponsowned[i] = plyr->weaponowned[i];		}	    }	    if (doevilgrin) 	    {		// evil grin if just picked up weapon		priority = 8;		st_facecount = ST_EVILGRINCOUNT;		st_faceindex = ST_calcPainOffset() + ST_EVILGRINOFFSET;	    }	}    }      if (priority < 8)    {	if (plyr->damagecount	    && plyr->attacker	    && plyr->attacker != plyr->mo)	{	    // being attacked	    priority = 7;	    	    if (plyr->health - st_oldhealth > ST_MUCHPAIN)	    {		st_facecount = ST_TURNCOUNT;		st_faceindex = ST_calcPainOffset() + ST_OUCHOFFSET;	    }	    else	    {		badguyangle = R_PointToAngle2(plyr->mo->x,					      plyr->mo->y,					      plyr->attacker->x,					      plyr->attacker->y);				if (badguyangle > plyr->mo->angle)		{		    // whether right or left		    diffang = badguyangle - plyr->mo->angle;		    i = diffang > ANG180; 		}		else		{		    // whether left or right		    diffang = plyr->mo->angle - badguyangle;		    i = diffang <= ANG180; 		} // confusing, aint it?				st_facecount = ST_TURNCOUNT;		st_faceindex = ST_calcPainOffset();				if (diffang < ANG45)		{		    // head-on    		    st_faceindex += ST_RAMPAGEOFFSET;		}		else if (i)		{		    // turn face right		    st_faceindex += ST_TURNOFFSET;		}		else		{		    // turn face left		    st_faceindex += ST_TURNOFFSET+1;		}	    }	}    }      if (priority < 7)    {	// getting hurt because of your own damn stupidity	if (plyr->damagecount)	{	    if (plyr->health - st_oldhealth > ST_MUCHPAIN)	    {		priority = 7;		st_facecount = ST_TURNCOUNT;		st_faceindex = ST_calcPainOffset() + ST_OUCHOFFSET;	    }	    else	    {		priority = 6;		st_facecount = ST_TURNCOUNT;		st_faceindex = ST_calcPainOffset() + ST_RAMPAGEOFFSET;	    }	}    }      if (priority < 6)    {	// rapid firing	if (plyr->attackdown)	{	    if (lastattackdown==-1)		lastattackdown = ST_RAMPAGEDELAY;	    else if (!--lastattackdown)	    {		priority = 5;		st_faceindex = ST_calcPainOffset() + ST_RAMPAGEOFFSET;		st_facecount = 1;		lastattackdown = 1;	    }	}	else	    lastattackdown = -1;    }      if (priority < 5)    {	// invulnerability	if ((plyr->cheats & CF_GODMODE)	    || plyr->powers[pw_invulnerability])	{	    priority = 4;	    st_faceindex = ST_GODFACE;	    st_facecount = 1;	}    }    // look left or look right if the facecount has timed out    if (!st_facecount)    {	st_faceindex = ST_calcPainOffset() + (st_randomnumber % 3);	st_facecount = ST_STRAIGHTFACECOUNT;	priority = 0;    }    st_facecount--;}void ST_updateWidgets(void){    static int	largeammo = 1994; // means "n/a"    int		i;    // must redirect the pointer if the ready weapon has changed.    //  if (w_ready.data != plyr->readyweapon)    //  {    if (weaponinfo[plyr->readyweapon].ammo == am_noammo)	w_ready.num = &largeammo;    else	w_ready.num = &plyr->ammo[weaponinfo[plyr->readyweapon].ammo];    //{    // static int tic=0;    // static int dir=-1;    // if (!(tic&15))    //   plyr->ammo[weaponinfo[plyr->readyweapon].ammo]+=dir;    // if (plyr->ammo[weaponinfo[plyr->readyweapon].ammo] == -100)    //   dir = 1;    // tic++;    // }    w_ready.data = plyr->readyweapon;    // if (*w_ready.on)    //  STlib_updateNum(&w_ready, true);    // refresh weapon change    //  }    // update keycard multiple widgets    for (i=0;i<3;i++)    {	keyboxes[i] = plyr->cards[i] ? i : -1;	if (plyr->cards[i+3])	    keyboxes[i] = i+3;    }    // refresh everything if this is him coming back to life    ST_updateFaceWidget();    // used by the w_armsbg widget    st_notdeathmatch = !deathmatch;        // used by w_arms[] widgets    st_armson = st_statusbaron && !deathmatch;     // used by w_frags widget    st_fragson = deathmatch && st_statusbaron;     st_fragscount = 0;    for (i=0 ; i<MAXPLAYERS ; i++)    {	if (i != consoleplayer)	    st_fragscount += plyr->frags[i];	else	    st_fragscount -= plyr->frags[i];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -