mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-02-28 22:11:08 +00:00
that animated icons can be done with it. - Changed FImageCollection to use a TArray to hold its data. - Fixed: SetChanHeadSettings did an assignment instead of comparing the channel ID witg CHAN_CEILING. - Changed sound sequence names for animated doors to FNames. - Automatically fixed: DCeiling didn't properly serialize its texture id. - Replaced integers as texture ID representation with a specific new type to track down all potentially incorrect uses and remaining WORDs used for texture IDs so that more than 32767 or 65535 textures can be defined. SVN r1036 (trunk)
126 lines
3.4 KiB
C++
126 lines
3.4 KiB
C++
// Emacs style mode select -*- C++ -*-
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Id:$
|
|
//
|
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
|
//
|
|
// This source is available for distribution and/or modification
|
|
// only under the terms of the DOOM Source Code License as
|
|
// published by id Software. All rights reserved.
|
|
//
|
|
// The source is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
|
|
// for more details.
|
|
//
|
|
// $Log:$
|
|
//
|
|
// DESCRIPTION:
|
|
// Sky rendering. The DOOM sky is a texture map like any
|
|
// wall, wrapping around. 1024 columns equal 360 degrees.
|
|
// The default sky map is 256 columns and repeats 4 times
|
|
// on a 320 screen.
|
|
//
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
// Needed for FRACUNIT.
|
|
#include "m_fixed.h"
|
|
#include "r_data.h"
|
|
#include "c_cvars.h"
|
|
#include "g_level.h"
|
|
#include "r_sky.h"
|
|
#include "r_main.h"
|
|
#include "v_text.h"
|
|
#include "gi.h"
|
|
|
|
//
|
|
// sky mapping
|
|
//
|
|
FTextureID skyflatnum;
|
|
FTextureID sky1texture, sky2texture;
|
|
fixed_t skytexturemid;
|
|
fixed_t skyscale;
|
|
int skystretch;
|
|
fixed_t skyheight;
|
|
fixed_t skyiscale;
|
|
|
|
int sky1shift, sky2shift;
|
|
fixed_t sky1pos=0, sky1speed=0;
|
|
fixed_t sky2pos=0, sky2speed=0;
|
|
|
|
// [RH] Stretch sky texture if not taller than 128 pixels?
|
|
CUSTOM_CVAR (Bool, r_stretchsky, true, CVAR_ARCHIVE)
|
|
{
|
|
R_InitSkyMap ();
|
|
}
|
|
|
|
extern "C" int detailxshift, detailyshift;
|
|
extern fixed_t freelookviewheight;
|
|
|
|
//==========================================================================
|
|
//
|
|
// R_InitSkyMap
|
|
//
|
|
// Called whenever the view size changes.
|
|
//
|
|
//==========================================================================
|
|
|
|
void R_InitSkyMap ()
|
|
{
|
|
fixed_t fskyheight;
|
|
FTexture *skytex1, *skytex2;
|
|
|
|
skytex1 = TexMan[sky1texture];
|
|
skytex2 = TexMan[sky2texture];
|
|
|
|
if (skytex1 == NULL)
|
|
return;
|
|
|
|
if ((level.flags & LEVEL_DOUBLESKY) && skytex1->GetHeight() != skytex2->GetHeight())
|
|
{
|
|
Printf (TEXTCOLOR_BOLD "Both sky textures must be the same height." TEXTCOLOR_NORMAL "\n");
|
|
sky2texture = sky1texture;
|
|
}
|
|
|
|
fskyheight = skytex1->GetHeight() << FRACBITS;
|
|
if (skytex1->GetScaledHeight() <= 128)
|
|
{
|
|
skytexturemid = r_Yaspect/2*FRACUNIT;
|
|
skystretch = (r_stretchsky
|
|
&& level.IsFreelookAllowed()
|
|
&& !(level.flags & LEVEL_FORCENOSKYSTRETCH)) ? 1 : 0;
|
|
}
|
|
else
|
|
{
|
|
skytexturemid = 199 * skytex1->yScale;
|
|
skystretch = 0;
|
|
// At heights above 600 pixels, the sky is drawn slightly too low.
|
|
if (SCREENHEIGHT > 600)
|
|
{
|
|
skytexturemid += FRACUNIT;
|
|
}
|
|
}
|
|
skyheight = fskyheight << skystretch;
|
|
|
|
if (viewwidth && viewheight)
|
|
{
|
|
skyiscale = (r_Yaspect*FRACUNIT) / (((freelookviewheight<<detailxshift) * viewwidth) / (viewwidth<<detailxshift));
|
|
skyscale = ((((freelookviewheight<<detailxshift) * viewwidth) / (viewwidth<<detailxshift)) << FRACBITS) /
|
|
(r_Yaspect);
|
|
|
|
skyiscale = Scale (skyiscale, FieldOfView, 2048);
|
|
skyscale = Scale (skyscale, 2048, FieldOfView);
|
|
}
|
|
|
|
// The (standard Doom) sky map is 256*128*4 maps.
|
|
sky1shift = 22+skystretch-16;
|
|
sky2shift = 22+skystretch-16;
|
|
if (skytex1->WidthBits >= 9)
|
|
sky1shift -= skystretch;
|
|
if (skytex2->WidthBits >= 9)
|
|
sky2shift -= skystretch;
|
|
}
|
|
|