1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
// $Id: r_sky.c,v 1.8 2001/08/06 23:57:09 stroggonmeth 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: r_sky.c,v $
// Revision 1.8 2001/08/06 23:57:09 stroggonmeth
// Removed portal code, improved 3D floors in hardware mode.
//
// Revision 1.7 2001/04/02 18:54:32 bpereira
// no message
//
// Revision 1.6 2001/03/21 18:24:39 stroggonmeth
// Misc changes and fixes. Code cleanup
//
// Revision 1.5 2001/03/13 22:14:20 stroggonmeth
// Long time no commit. 3D floors, FraggleScript, portals, ect.
//
// Revision 1.4 2001/01/25 22:15:44 bpereira
// added heretic support
//
// Revision 1.3 2000/09/21 16:45:08 bpereira
// no message
//
// Revision 1.2 2000/02/27 00:42:10 hurdler
// fix CR+LF problem
//
// Revision 1.1.1.1 2000/02/22 20:32:32 hurdler
// Initial import into CVS (v1.29 pr3)
//
//
// DESCRIPTION:
// Sky rendering. The DOOM sky is a texture map like any
// wall, wrapping around. A 1024 columns equal 360 degrees.
// The default sky map is 256 columns and repeats 4 times
// on a 320 screen?
//
//
//-----------------------------------------------------------------------------
#include "doomdef.h"
#include "r_sky.h"
#include "r_local.h"
#include "w_wad.h"
#include "z_zone.h"
#include "p_maputl.h" // P_PointOnLineSide
// SoM: I know I should be moving portals out of r_sky.c and as soon
// as I have time and a I will... But for now, they are mostly used
// for sky boxes anyway so they have a mostly appropriate home here.
//
// sky mapping
//
int skyflatnum;
int skytexture;
int skytexturemid;
fixed_t skyscale;
int skymode=0; // old (0), new (1) (quick fix!)
//
// R_InitSkyMap called at startup, once.
//
void R_InitSkyMap (void)
{
// set at P_LoadSectors
//skyflatnum = R_FlatNumForName ( SKYFLATNAME );
}
// Setup sky draw for old or new skies (new skies = freelook 256x240)
//
// Call at loadlevel after skytexture is set
//
// NOTE: skycolfunc should be set at R_ExecuteSetViewSize ()
// I dont bother because we don't use low detail no more
//
void R_SetupSkyDraw (void)
{
texpatch_t* patches;
patch_t wpatch;
int count;
int height;
int i;
// parse the patches composing sky texture for the tallest one
// patches are usually RSKY1,RSKY2... and unique
// note: the TEXTURES lump doesn't have the taller size of Legacy
// skies, but the patches it use will give the right size
count = textures[skytexture]->patchcount;
patches = &textures[skytexture]->patches[0];
for (height=0,i=0;i<count;i++,patches++)
{
W_ReadLumpHeader (patches->patch, &wpatch, sizeof(patch_t));
wpatch.height = SHORT(wpatch.height);
if (wpatch.height>height)
height = wpatch.height;
}
// DIRTY : should set the routine depending on colormode in screen.c
if (height>128)
{
// horizon line on 256x240 freelook textures of Legacy or heretic
skytexturemid = 200<<FRACBITS;
skymode = 1;
}
else
{
// the horizon line in a 256x128 sky texture
skytexturemid = 100<<FRACBITS;
skymode = 0;
}
// get the right drawer, it was set by screen.c, depending on the
// current video mode bytes per pixel (quick fix)
skycolfunc = skydrawerfunc[skymode];
R_SetSkyScale ();
}
// set the correct scale for the sky at setviewsize
void R_SetSkyScale (void)
{
//fix this quick mess
if (skytexturemid>100<<FRACBITS)
{
// normal aspect ratio corrected scale
skyscale = FixedDiv (FRACUNIT, pspriteyscale);
}
else
{
// double the texture vertically, bleeergh!!
skyscale = FixedDiv (FRACUNIT, pspriteyscale)>>1;
}
}
|