📄 st_stuff.c
字号:
st_fragscount += plyr->frags[i];
else
st_fragscount -= plyr->frags[i];
}
// get rid of chat window if up because of message
if (!--st_msgcounter)
st_chat = st_oldchat;
}
void ST_Ticker (void)
{
st_clock++;
st_randomnumber = M_Random();
// WriteDebug("ST_updateWidgets...\n");
ST_updateWidgets();
st_oldhealth = plyr->health;
}
static int st_palette = 0;
void ST_doPaletteStuff(void)
{
int palette;
byte* pal;
int cnt;
int bzc;
cnt = plyr->damagecount;
if (plyr->powers[pw_strength])
{
// slowly fade the berzerk out
bzc = 12 - (plyr->powers[pw_strength]>>6);
if (bzc > cnt)
cnt = bzc;
}
if (cnt)
{
palette = (cnt+7)>>3;
if (palette >= NUMREDPALS)
palette = NUMREDPALS-1;
palette += STARTREDPALS;
}
else if (plyr->bonuscount)
{
palette = (plyr->bonuscount+7)>>3;
if (palette >= NUMBONUSPALS)
palette = NUMBONUSPALS-1;
palette += STARTBONUSPALS;
}
else if ( plyr->powers[pw_ironfeet] > 4*32
|| plyr->powers[pw_ironfeet]&8)
palette = RADIATIONPAL;
else
palette = 0;
if (palette != st_palette)
{
st_palette = palette;
pal = (byte *) W_CacheLumpNum (lu_palette, PU_CACHE)+palette*768;
I_SetPalette (pal);
}
}
void ST_drawWidgets(boolean refresh,
PBUFFER RenderBuffer,
PBUFFER BGBuffer) //DQ
//void ST_drawWidgets(boolean refresh)
{
int i;
// used by w_arms[] widgets
st_armson = st_statusbaron && !deathmatch;
// used by w_frags widget
st_fragson = deathmatch && st_statusbaron;
STlib_updateNum(&w_ready, refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
for (i=0;i<4;i++)
{
STlib_updateNum(&w_ammo[i], refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
STlib_updateNum(&w_maxammo[i], refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
}
STlib_updatePercent(&w_health, refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
STlib_updatePercent(&w_armor, refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
STlib_updateBinIcon(&w_armsbg, refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
for (i=0;i<6;i++)
STlib_updateMultIcon(&w_arms[i], refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
STlib_updateMultIcon(&w_faces, refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
for (i=0;i<3;i++)
STlib_updateMultIcon(&w_keyboxes[i], refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
STlib_updateNum(&w_frags, refresh, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
}
void ST_doRefresh(PBUFFER RenderBuffer,
PBUFFER BGBuffer) //DQ
//void ST_doRefresh(void)
{
st_firsttime = false;
// draw status bar background to off-screen buff
// WriteDebug("ST_refreshBackground...\n");
ST_refreshBackground(RenderBuffer, BGBuffer); //DQ
//ST_refreshBackground();
// and refresh all widgets
// WriteDebug("ST_drawWidgets...\n");
ST_drawWidgets(true, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
}
void ST_diffDraw(PBUFFER RenderBuffer,
PBUFFER BGBuffer) //DQ
//void ST_diffDraw(void)
{
// update all widgets
ST_drawWidgets(false, RenderBuffer /*DQ*/, BGBuffer/*DQ*/);
}
void ST_Drawer (boolean fullscreen,
boolean refresh,
PBUFFER RenderBuffer,
PBUFFER BGBuffer) //DQ
//void ST_Drawer (boolean fullscreen, boolean refresh)
{
// WriteDebug("ST_Drawer - 1...\n");
st_statusbaron = (!fullscreen) || automapactive;
st_firsttime = st_firsttime || refresh;
// WriteDebug("ST_Drawer - ST_doPaletteStuff...\n");
// Do red-/gold-shifts from damage/items
ST_doPaletteStuff();
// WriteDebug("ST_Drawer - ST_doRefresh...\n");
// If just after ST_Start(), refresh all
if (st_firsttime) ST_doRefresh(RenderBuffer/*DQ*/, BGBuffer/*DQ*/);
// Otherwise, update as little as possible
else
{
// WriteDebug("ST_Drawer - ST_diffDraw...\n");
ST_diffDraw(RenderBuffer/*DQ*/, BGBuffer/*DQ*/);
}
}
void ST_loadGraphics(void)
{
int i;
int j;
int facenum;
char namebuf[9];
// Load the numbers, tall and short
for (i=0;i<10;i++)
{
sprintf(namebuf, "STTNUM%d", i);
tallnum[i] = (patch_t *) W_CacheLumpName(namebuf, PU_STATIC);
sprintf(namebuf, "STYSNUM%d", i);
shortnum[i] = (patch_t *) W_CacheLumpName(namebuf, PU_STATIC);
}
// Load percent key.
//Note: why not load STMINUS here, too?
tallpercent = (patch_t *) W_CacheLumpName("STTPRCNT", PU_STATIC);
// key cards
for (i=0;i<NUMCARDS;i++)
{
sprintf(namebuf, "STKEYS%d", i);
keys[i] = (patch_t *) W_CacheLumpName(namebuf, PU_STATIC);
}
// arms background
armsbg = (patch_t *) W_CacheLumpName("STARMS", PU_STATIC);
// arms ownership widgets
for (i=0;i<6;i++)
{
sprintf(namebuf, "STGNUM%d", i+2);
// gray #
arms[i][0] = (patch_t *) W_CacheLumpName(namebuf, PU_STATIC);
// yellow #
arms[i][1] = shortnum[i+2];
}
// face backgrounds for different color players
sprintf(namebuf, "STFB%d", consoleplayer);
faceback = (patch_t *) W_CacheLumpName(namebuf, PU_STATIC);
// status bar background bits
sbar = (patch_t *) W_CacheLumpName("STBAR", PU_STATIC);
// face states
facenum = 0;
for (i=0;i<ST_NUMPAINFACES;i++)
{
for (j=0;j<ST_NUMSTRAIGHTFACES;j++)
{
sprintf(namebuf, "STFST%d%d", i, j);
faces[facenum++] = W_CacheLumpName(namebuf, PU_STATIC);
}
sprintf(namebuf, "STFTR%d0", i); // turn right
faces[facenum++] = W_CacheLumpName(namebuf, PU_STATIC);
sprintf(namebuf, "STFTL%d0", i); // turn left
faces[facenum++] = W_CacheLumpName(namebuf, PU_STATIC);
sprintf(namebuf, "STFOUCH%d", i); // ouch!
faces[facenum++] = W_CacheLumpName(namebuf, PU_STATIC);
sprintf(namebuf, "STFEVL%d", i); // evil grin ;)
faces[facenum++] = W_CacheLumpName(namebuf, PU_STATIC);
sprintf(namebuf, "STFKILL%d", i); // pissed off
faces[facenum++] = W_CacheLumpName(namebuf, PU_STATIC);
}
faces[facenum++] = W_CacheLumpName("STFGOD0", PU_STATIC);
faces[facenum++] = W_CacheLumpName("STFDEAD0", PU_STATIC);
}
void ST_loadData(void)
{
lu_palette = W_GetNumForName ("PLAYPAL");
ST_loadGraphics();
}
void ST_unloadGraphics(void)
{
int i;
// unload the numbers, tall and short
for (i=0;i<10;i++)
{
Z_ChangeTag(tallnum[i], PU_CACHE);
Z_ChangeTag(shortnum[i], PU_CACHE);
}
// unload tall percent
Z_ChangeTag(tallpercent, PU_CACHE);
// unload arms background
Z_ChangeTag(armsbg, PU_CACHE);
// unload gray #'s
for (i=0;i<6;i++)
Z_ChangeTag(arms[i][0], PU_CACHE);
// unload the key cards
for (i=0;i<NUMCARDS;i++)
Z_ChangeTag(keys[i], PU_CACHE);
Z_ChangeTag(sbar, PU_CACHE);
Z_ChangeTag(faceback, PU_CACHE);
for (i=0;i<ST_NUMFACES;i++)
Z_ChangeTag(faces[i], PU_CACHE);
// Note: nobody ain't seen no unloading
// of stminus yet. Dude.
}
void ST_unloadData(void)
{
ST_unloadGraphics();
}
void ST_initData(void)
{
int i;
st_firsttime = true;
plyr = &players[consoleplayer];
st_clock = 0;
st_chatstate = StartChatState;
st_gamestate = FirstPersonState;
st_statusbaron = true;
st_oldchat = st_chat = false;
st_cursoron = false;
st_faceindex = 0;
st_palette = -1;
st_oldhealth = -1;
for (i=0;i<NUMWEAPONS;i++)
oldweaponsowned[i] = plyr->weaponowned[i];
for (i=0;i<3;i++)
keyboxes[i] = -1;
STlib_init();
}
void ST_createWidgets(void)
{
int i;
// ready weapon ammo
STlib_initNum(&w_ready,
ST_AMMOX,
ST_AMMOY,
tallnum,
&plyr->ammo[weaponinfo[plyr->readyweapon].ammo],
&st_statusbaron,
ST_AMMOWIDTH );
// the last weapon type
w_ready.data = plyr->readyweapon;
// health percentage
STlib_initPercent(&w_health,
ST_HEALTHX,
ST_HEALTHY,
tallnum,
&plyr->health,
&st_statusbaron,
tallpercent);
// arms background
STlib_initBinIcon(&w_armsbg,
ST_ARMSBGX,
ST_ARMSBGY,
armsbg,
&st_notdeathmatch,
&st_statusbaron);
// weapons owned
for(i=0;i<6;i++)
{
STlib_initMultIcon(&w_arms[i],
ST_ARMSX+(i%3)*ST_ARMSXSPACE,
ST_ARMSY+(i/3)*ST_ARMSYSPACE,
arms[i], (int *) &plyr->weaponowned[i+1],
&st_armson);
}
// frags sum
STlib_initNum(&w_frags,
ST_FRAGSX,
ST_FRAGSY,
tallnum,
&st_fragscount,
&st_fragson,
ST_FRAGSWIDTH);
// faces
STlib_initMultIcon(&w_faces,
ST_FACESX,
ST_FACESY,
faces,
&st_faceindex,
&st_statusbaron);
// armor percentage - should be colored later
STlib_initPercent(&w_armor,
ST_ARMORX,
ST_ARMORY,
tallnum,
&plyr->armorpoints,
&st_statusbaron, tallpercent);
// keyboxes 0-2
STlib_initMultIcon(&w_keyboxes[0],
ST_KEY0X,
ST_KEY0Y,
keys,
&keyboxes[0],
&st_statusbaron);
STlib_initMultIcon(&w_keyboxes[1],
ST_KEY1X,
ST_KEY1Y,
keys,
&keyboxes[1],
&st_statusbaron);
STlib_initMultIcon(&w_keyboxes[2],
ST_KEY2X,
ST_KEY2Y,
keys,
&keyboxes[2],
&st_statusbaron);
// ammo count (all four kinds)
STlib_initNum(&w_ammo[0],
ST_AMMO0X,
ST_AMMO0Y,
shortnum,
&plyr->ammo[0],
&st_statusbaron,
ST_AMMO0WIDTH);
STlib_initNum(&w_ammo[1],
ST_AMMO1X,
ST_AMMO1Y,
shortnum,
&plyr->ammo[1],
&st_statusbaron,
ST_AMMO1WIDTH);
STlib_initNum(&w_ammo[2],
ST_AMMO2X,
ST_AMMO2Y,
shortnum,
&plyr->ammo[2],
&st_statusbaron,
ST_AMMO2WIDTH);
STlib_initNum(&w_ammo[3],
ST_AMMO3X,
ST_AMMO3Y,
shortnum,
&plyr->ammo[3],
&st_statusbaron,
ST_AMMO3WIDTH);
// max ammo count (all four kinds)
STlib_initNum(&w_maxammo[0],
ST_MAXAMMO0X,
ST_MAXAMMO0Y,
shortnum,
&plyr->maxammo[0],
&st_statusbaron,
ST_MAXAMMO0WIDTH);
STlib_initNum(&w_maxammo[1],
ST_MAXAMMO1X,
ST_MAXAMMO1Y,
shortnum,
&plyr->maxammo[1],
&st_statusbaron,
ST_MAXAMMO1WIDTH);
STlib_initNum(&w_maxammo[2],
ST_MAXAMMO2X,
ST_MAXAMMO2Y,
shortnum,
&plyr->maxammo[2],
&st_statusbaron,
ST_MAXAMMO2WIDTH);
STlib_initNum(&w_maxammo[3],
ST_MAXAMMO3X,
ST_MAXAMMO3Y,
shortnum,
&plyr->maxammo[3],
&st_statusbaron,
ST_MAXAMMO3WIDTH);
}
static boolean st_stopped = true;
void ST_Start (void)
{
if (!st_stopped)
ST_Stop();
ST_initData();
ST_createWidgets();
st_stopped = false;
}
void ST_Stop (void)
{
if (st_stopped)
return;
I_SetPalette (W_CacheLumpNum (lu_palette, PU_CACHE));
st_stopped = true;
}
void ST_Init (void)
{
veryfirsttime = 0;
ST_loadData();
//screens[4] = (byte *) Z_Malloc(ST_WIDTH*ST_HEIGHT, PU_STATIC, 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -