📄 st_stuff.c
字号:
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------//// $Id: st_stuff.c,v 1.17 2001/04/01 17:35:07 bpereira Exp $//// Copyright (C) 1993-1996 by id Software, Inc.// Portions Copyright (C) 1998-2000 by DooM Legacy Team.//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.////// $Log: st_stuff.c,v $// Revision 1.17 2001/04/01 17:35:07 bpereira// no message//// Revision 1.16 2001/03/03 06:17:34 bpereira// no message//// Revision 1.15 2001/02/24 13:35:21 bpereira// no message//// Revision 1.14 2001/02/10 13:05:45 hurdler// no message//// Revision 1.13 2001/01/31 17:14:07 hurdler// Add cv_scalestatusbar in hardware mode//// Revision 1.12 2001/01/25 22:15:44 bpereira// added heretic support//// Revision 1.11 2000/11/02 19:49:37 bpereira// no message//// Revision 1.10 2000/10/04 16:34:51 hurdler// Change a little the presentation of monsters/secrets numbers//// Revision 1.9 2000/10/02 18:25:45 bpereira// no message//// Revision 1.8 2000/10/01 10:18:19 bpereira// no message//// Revision 1.7 2000/10/01 01:12:00 hurdler// Add number of monsters and secrets in overlay//// Revision 1.6 2000/09/28 20:57:18 bpereira// no message//// Revision 1.5 2000/09/25 19:28:15 hurdler// Enable Direct3D support as OpenGL//// Revision 1.4 2000/09/21 16:45:09 bpereira// no message//// Revision 1.3 2000/08/31 14:30:56 bpereira// no message//// Revision 1.2 2000/02/27 00:42:11 hurdler// fix CR+LF problem//// Revision 1.1.1.1 2000/02/22 20:32:33 hurdler// Initial import into CVS (v1.29 pr3)////// DESCRIPTION:// Status bar code.// Does the face/direction indicator animatin.// Does palette indicators as well (red pain/berserk, bright pickup)////-----------------------------------------------------------------------------#include "doomdef.h"#include "am_map.h"#include "g_game.h"#include "m_cheat.h"#include "screen.h"#include "r_local.h"#include "p_local.h"#include "p_inter.h"#include "m_random.h"#include "st_stuff.h"#include "st_lib.h"#include "i_video.h"#include "v_video.h"#include "keys.h"#include "z_zone.h"#include "hu_stuff.h"#ifdef HWRENDER#include "hardware/hw_drv.h"#include "hardware/hw_main.h"#endif//protosvoid ST_createWidgets(void);extern fixed_t waterheight;//// STATUS BAR DATA//// Palette indices.// For damage/bonus red-/gold-shifts#define STARTREDPALS 1#define STARTBONUSPALS 9#define NUMREDPALS 8#define NUMBONUSPALS 4// Radiation suit, green shift.#define RADIATIONPAL 13// N/256*100% probability// that the normal face state will change#define ST_FACEPROBABILITY 96// For Responder#define ST_TOGGLECHAT KEY_ENTER// Location of status bar //added:08-01-98:status bar position changes according to resolution.#define ST_FX 143// Should be set to patch width// for tall numbers later on#define ST_TALLNUMWIDTH (tallnum[0]->width)// Number of status faces.#define ST_NUMPAINFACES 5#define ST_NUMSTRAIGHTFACES 3#define ST_NUMTURNFACES 2#define ST_NUMSPECIALFACES 3#define ST_FACESTRIDE \ (ST_NUMSTRAIGHTFACES+ST_NUMTURNFACES+ST_NUMSPECIALFACES)#define ST_NUMEXTRAFACES 2#define ST_NUMFACES \ (ST_FACESTRIDE*ST_NUMPAINFACES+ST_NUMEXTRAFACES)#define ST_TURNOFFSET (ST_NUMSTRAIGHTFACES)#define ST_OUCHOFFSET (ST_TURNOFFSET + ST_NUMTURNFACES)#define ST_EVILGRINOFFSET (ST_OUCHOFFSET + 1)#define ST_RAMPAGEOFFSET (ST_EVILGRINOFFSET + 1)#define ST_GODFACE (ST_NUMPAINFACES*ST_FACESTRIDE)#define ST_DEADFACE (ST_GODFACE+1)#define ST_FACESX 143#define ST_FACESY (ST_Y+0)#define ST_EVILGRINCOUNT (2*TICRATE)#define ST_STRAIGHTFACECOUNT (TICRATE/2)#define ST_TURNCOUNT (1*TICRATE)#define ST_OUCHCOUNT (1*TICRATE)#define ST_RAMPAGEDELAY (2*TICRATE)#define ST_MUCHPAIN 20// Location and size of statistics,// justified according to widget type.// Problem is, within which space? STbar? Screen?// Note: this could be read in by a lump.// Problem is, is the stuff rendered// into a buffer,// or into the frame buffer?// AMMO number pos.#define ST_AMMOWIDTH 3#define ST_AMMOX 44#define ST_AMMOY (ST_Y+3)// HEALTH number pos.#define ST_HEALTHWIDTH 3#define ST_HEALTHX 90#define ST_HEALTHY (ST_Y+3)// Weapon pos.#define ST_ARMSX 111#define ST_ARMSY (ST_Y+4)#define ST_ARMSBGX 104#define ST_ARMSBGY (ST_Y)#define ST_ARMSXSPACE 12#define ST_ARMSYSPACE 10// Frags pos.#define ST_FRAGSX 138#define ST_FRAGSY (ST_Y+3)#define ST_FRAGSWIDTH 2// ARMOR number pos.#define ST_ARMORWIDTH 3#define ST_ARMORX 221#define ST_ARMORY (ST_Y+3)// Key icon positions.#define ST_KEY0WIDTH 8#define ST_KEY0HEIGHT 5#define ST_KEY0X 239#define ST_KEY0Y (ST_Y+3)#define ST_KEY1WIDTH ST_KEY0WIDTH#define ST_KEY1X 239#define ST_KEY1Y (ST_Y+13)#define ST_KEY2WIDTH ST_KEY0WIDTH#define ST_KEY2X 239#define ST_KEY2Y (ST_Y+23)// Ammunition counter.#define ST_AMMO0WIDTH 3#define ST_AMMO0HEIGHT 6#define ST_AMMO0X 288#define ST_AMMO0Y (ST_Y+5)#define ST_AMMO1WIDTH ST_AMMO0WIDTH#define ST_AMMO1X 288#define ST_AMMO1Y (ST_Y+11)#define ST_AMMO2WIDTH ST_AMMO0WIDTH#define ST_AMMO2X 288#define ST_AMMO2Y (ST_Y+23)#define ST_AMMO3WIDTH ST_AMMO0WIDTH#define ST_AMMO3X 288#define ST_AMMO3Y (ST_Y+17)// Indicate maximum ammunition.// Only needed because backpack exists.#define ST_MAXAMMO0WIDTH 3#define ST_MAXAMMO0HEIGHT 5#define ST_MAXAMMO0X 314#define ST_MAXAMMO0Y (ST_Y+5)#define ST_MAXAMMO1WIDTH ST_MAXAMMO0WIDTH#define ST_MAXAMMO1X 314#define ST_MAXAMMO1Y (ST_Y+11)#define ST_MAXAMMO2WIDTH ST_MAXAMMO0WIDTH#define ST_MAXAMMO2X 314#define ST_MAXAMMO2Y (ST_Y+23)#define ST_MAXAMMO3WIDTH ST_MAXAMMO0WIDTH#define ST_MAXAMMO3X 314#define ST_MAXAMMO3Y (ST_Y+17)//faB: unused stuff from the Doom alpha version ?// pistol//#define ST_WEAPON0X 110//#define ST_WEAPON0Y (ST_Y+4)// shotgun//#define ST_WEAPON1X 122//#define ST_WEAPON1Y (ST_Y+4)// chain gun//#define ST_WEAPON2X 134//#define ST_WEAPON2Y (ST_Y+4)// missile launcher//#define ST_WEAPON3X 110//#define ST_WEAPON3Y (ST_Y+13)// plasma gun//#define ST_WEAPON4X 122//#define ST_WEAPON4Y (ST_Y+13)// bfg//#define ST_WEAPON5X 134//#define ST_WEAPON5Y (ST_Y+13)// WPNS title//#define ST_WPNSX 109//#define ST_WPNSY (ST_Y+23) // DETH title//#define ST_DETHX 109//#define ST_DETHY (ST_Y+23)//Incoming messages window location// #define ST_MSGTEXTX (viewwindowx)// #define ST_MSGTEXTY (viewwindowy+viewheight-18)//#define ST_MSGTEXTX 0//#define ST_MSGTEXTY 0 //added:08-01-98:unused// Dimensions given in characters.#define ST_MSGWIDTH 52// Or shall I say, in lines?#define ST_MSGHEIGHT 1#define ST_OUTTEXTX 0#define ST_OUTTEXTY 6// Width, in characters again.#define ST_OUTWIDTH 52 // Height, in lines.#define ST_OUTHEIGHT 1#define ST_MAPWIDTH \ (strlen(mapnames[(gameepisode-1)*9+(gamemap-1)]))//added:24-01-98:unused ?//#define ST_MAPTITLEX (vid.width - ST_MAPWIDTH * ST_CHATFONTWIDTH)#define ST_MAPTITLEY 0#define ST_MAPHEIGHT 1//added:02-02-98: set true if widgets coords need to be recalculatedboolean st_recalc;// main player in gamestatic player_t* plyr;// ST_Start() has just been calledboolean st_firsttime;// used to execute ST_Init() only oncestatic int veryfirsttime = 1;// used for timingstatic unsigned int st_clock;// used for making messages go awaystatic int st_msgcounter=0;// used when in chatstatic st_chatstateenum_t st_chatstate;// whether left-side main status bar is activeboolean st_statusbaron;// whether status bar chat is activestatic boolean st_chat;// value of st_chat before message popped upstatic boolean st_oldchat;// whether chat window has the cursor onstatic boolean st_cursoron;// !deathmatchstatic boolean st_notdeathmatch;// !deathmatch && st_statusbaronstatic boolean st_armson;// !deathmatchstatic boolean st_fragson;// main bar leftstatic patch_t* sbar;// 0-9, tall numbersstatic patch_t* tallnum[10];// tall % signstatic patch_t* tallpercent;// 0-9, short, yellow (,different!) numbersstatic patch_t* shortnum[10];// 3 key-cards, 3 skullsstatic patch_t* keys[NUMCARDS];// face status patchesstatic patch_t* faces[ST_NUMFACES];// face backgroundstatic patch_t* faceback; // main bar rightstatic patch_t* armsbg;// weapon ownership patchesstatic patch_t* arms[6][2];// ready-weapon widgetstatic st_number_t w_ready; // in deathmatch only, summary of frags statsstatic st_number_t w_frags;// health widgetstatic st_percent_t w_health;// arms backgroundstatic st_binicon_t w_armsbg;// weapon ownership widgetsstatic st_multicon_t w_arms[6];// face status widgetstatic st_multicon_t w_faces;// keycard widgetsstatic st_multicon_t w_keyboxes[3];// armor widgetstatic st_percent_t w_armor;// ammo widgetsstatic st_number_t w_ammo[4];// max ammo widgetsstatic st_number_t w_maxammo[4]; // number of frags so far in deathmatchstatic int st_fragscount;// used to use appopriately pained facestatic int st_oldhealth = -1;// used for evil grinstatic boolean oldweaponsowned[NUMWEAPONS]; // count until face changesstatic int st_facecount = 0;// current face index, used by w_facesstatic int st_faceindex = 0;// holds key-type for each key box on barstatic int keyboxes[3];// a random number per tick
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -