2008-01-27 15:34:47 +00:00
|
|
|
/*
|
|
|
|
** r_data.cpp
|
|
|
|
**
|
|
|
|
**---------------------------------------------------------------------------
|
|
|
|
** Copyright 1998-2008 Randy Heit
|
|
|
|
** All rights reserved.
|
|
|
|
**
|
|
|
|
** Redistribution and use in source and binary forms, with or without
|
|
|
|
** modification, are permitted provided that the following conditions
|
|
|
|
** are met:
|
|
|
|
**
|
|
|
|
** 1. Redistributions of source code must retain the above copyright
|
|
|
|
** notice, this list of conditions and the following disclaimer.
|
|
|
|
** 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
** notice, this list of conditions and the following disclaimer in the
|
|
|
|
** documentation and/or other materials provided with the distribution.
|
|
|
|
** 3. The name of the author may not be used to endorse or promote products
|
|
|
|
** derived from this software without specific prior written permission.
|
|
|
|
**
|
|
|
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
|
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
|
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
|
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
|
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
|
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
|
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
**---------------------------------------------------------------------------
|
|
|
|
**
|
|
|
|
**
|
|
|
|
*/
|
2008-01-27 11:25:03 +00:00
|
|
|
|
|
|
|
#include "i_system.h"
|
|
|
|
#include "w_wad.h"
|
|
|
|
#include "doomdef.h"
|
|
|
|
#include "r_local.h"
|
|
|
|
#include "r_sky.h"
|
|
|
|
#include "c_dispatch.h"
|
|
|
|
#include "r_data.h"
|
|
|
|
#include "sc_man.h"
|
|
|
|
#include "v_text.h"
|
|
|
|
#include "st_start.h"
|
2008-09-15 23:47:00 +00:00
|
|
|
#include "doomstat.h"
|
|
|
|
#include "r_bsp.h"
|
|
|
|
#include "r_segs.h"
|
|
|
|
#include "v_palette.h"
|
2008-01-27 11:25:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
static int R_CountTexturesX ();
|
|
|
|
static int R_CountLumpTextures (int lumpnum);
|
|
|
|
|
|
|
|
extern void R_DeinitBuildTiles();
|
|
|
|
extern int R_CountBuildTiles();
|
|
|
|
|
2009-04-28 21:31:02 +00:00
|
|
|
struct FakeCmap
|
2008-01-27 11:25:03 +00:00
|
|
|
{
|
|
|
|
char name[8];
|
|
|
|
PalEntry blend;
|
2009-04-28 21:31:02 +00:00
|
|
|
int lump;
|
|
|
|
};
|
2008-01-27 15:34:47 +00:00
|
|
|
|
2009-04-28 21:31:02 +00:00
|
|
|
TArray<FakeCmap> fakecmaps;
|
2008-01-27 11:25:03 +00:00
|
|
|
BYTE *realcolormaps;
|
2009-04-28 21:31:02 +00:00
|
|
|
size_t numfakecmaps;
|
2008-01-27 15:34:47 +00:00
|
|
|
|
|
|
|
//==========================================================================
|
|
|
|
//
|
|
|
|
// R_SetDefaultColormap
|
|
|
|
//
|
|
|
|
//==========================================================================
|
2008-01-27 11:25:03 +00:00
|
|
|
|
|
|
|
void R_SetDefaultColormap (const char *name)
|
|
|
|
{
|
|
|
|
if (strnicmp (fakecmaps[0].name, name, 8) != 0)
|
|
|
|
{
|
|
|
|
int lump, i, j;
|
|
|
|
BYTE map[256];
|
|
|
|
BYTE unremap[256];
|
|
|
|
BYTE remap[256];
|
|
|
|
|
|
|
|
// [RH] If using BUILD's palette, generate the colormap
|
|
|
|
if (Wads.CheckNumForFullName("palette.dat") >= 0 || Wads.CheckNumForFullName("blood.pal") >= 0)
|
|
|
|
{
|
|
|
|
Printf ("Make colormap\n");
|
|
|
|
FDynamicColormap foo;
|
|
|
|
|
|
|
|
foo.Color = 0xFFFFFF;
|
|
|
|
foo.Fade = 0;
|
|
|
|
foo.Maps = realcolormaps;
|
|
|
|
foo.Desaturate = 0;
|
|
|
|
foo.Next = NULL;
|
|
|
|
foo.BuildLights ();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
lump = Wads.CheckNumForName (name, ns_colormaps);
|
|
|
|
if (lump == -1)
|
|
|
|
lump = Wads.CheckNumForName (name, ns_global);
|
|
|
|
FWadLump lumpr = Wads.OpenLumpNum (lump);
|
|
|
|
|
|
|
|
// [RH] The colormap may not have been designed for the specific
|
|
|
|
// palette we are using, so remap it to match the current palette.
|
|
|
|
memcpy (remap, GPalette.Remap, 256);
|
|
|
|
memset (unremap, 0, 256);
|
|
|
|
for (i = 0; i < 256; ++i)
|
|
|
|
{
|
|
|
|
unremap[remap[i]] = i;
|
|
|
|
}
|
|
|
|
// Mapping to color 0 is okay, because the colormap won't be used to
|
|
|
|
// produce a masked texture.
|
|
|
|
remap[0] = 0;
|
|
|
|
for (i = 0; i < NUMCOLORMAPS; ++i)
|
|
|
|
{
|
|
|
|
BYTE *map2 = &realcolormaps[i*256];
|
|
|
|
lumpr.Read (map, 256);
|
|
|
|
for (j = 0; j < 256; ++j)
|
|
|
|
{
|
|
|
|
map2[j] = remap[map[unremap[j]]];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
uppercopy (fakecmaps[0].name, name);
|
|
|
|
fakecmaps[0].blend = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-12-15 16:32:37 +00:00
|
|
|
//==========================================================================
|
|
|
|
//
|
|
|
|
// R_DeinitColormaps
|
|
|
|
//
|
|
|
|
//==========================================================================
|
|
|
|
|
|
|
|
void R_DeinitColormaps ()
|
|
|
|
{
|
|
|
|
fakecmaps.Clear();
|
|
|
|
if (realcolormaps != NULL)
|
|
|
|
{
|
|
|
|
delete[] realcolormaps;
|
|
|
|
realcolormaps = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
2008-01-27 11:25:03 +00:00
|
|
|
//
|
|
|
|
// R_InitColormaps
|
|
|
|
//
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
|
|
|
|
2008-01-27 11:25:03 +00:00
|
|
|
void R_InitColormaps ()
|
|
|
|
{
|
|
|
|
// [RH] Try and convert BOOM colormaps into blending values.
|
|
|
|
// This is a really rough hack, but it's better than
|
|
|
|
// not doing anything with them at all (right?)
|
|
|
|
|
2009-04-28 21:31:02 +00:00
|
|
|
FakeCmap cm;
|
|
|
|
|
2010-12-15 16:32:37 +00:00
|
|
|
R_DeinitColormaps();
|
|
|
|
|
2009-04-28 21:31:02 +00:00
|
|
|
cm.name[0] = 0;
|
|
|
|
cm.blend = 0;
|
|
|
|
fakecmaps.Push(cm);
|
|
|
|
|
|
|
|
DWORD NumLumps = Wads.GetNumLumps();
|
2008-01-27 11:25:03 +00:00
|
|
|
|
2009-04-28 21:31:02 +00:00
|
|
|
for (DWORD i = 0; i < NumLumps; i++)
|
|
|
|
{
|
|
|
|
if (Wads.GetLumpNamespace(i) == ns_colormaps)
|
|
|
|
{
|
|
|
|
char name[9];
|
|
|
|
name[8] = 0;
|
2009-08-30 20:47:04 +00:00
|
|
|
Wads.GetLumpName (name, i);
|
2009-04-28 21:31:02 +00:00
|
|
|
|
Update to ZDoom r1585:
- Added ACS GetChar function.
- Added Gez's submission for polyobjects being able to crush corpses but made
it an explicit MAPINFO option only.
- Changed APlayerPawn::DamageFade to a PalEntry from 3 floats.
- Removed #pragma warnings from cmdlib.h and fixed the places where they were
still triggered.
These #pragmas were responsible for >90% of the GCC warnings that were not
listed in VC++.
- Fixed one bug in the process: DSeqNode::m_Atten was never adjusted when the
parameter handling of the sound functions for attenuation was changed.
Changed m_Atten to a float and fixed the SNDSEQ parser to set proper values.
Also added the option to specify attenuation with direct values in addition
to the predefined names.
- fixed a few Heretic actors:
* The pod generator's attacksound was wrong
* The teleglitter generators need different flags if they are supposed to work
with z-aware spawning of the glitter.
* The knight's axes need the THRUGHOST flag.
- Fixed non-POD passing in G_BuildSaveName() and other things GCC warned
about.
- Added support for imploded zips.
- Fixed: Some missile spawning functions ignored the FastSpeed setting.
- Fixed: P_CheckSwitchRange tried to access a line's backsector without
checking if it is valid.
- Fixed: Fast projectile could not be frozen by the Time freezer.
- Added several new ACS functions: GetActorMomX/Y/Z, GetActorViewHeight,
SetActivator, SetActivatorToTarget.
- Added Species property for actors and separated Hexen's Demon1 and Demon2
into different species.
- Added handling for UDMF user keys.
- Added support for ACS functions that can be defined without recompiling ACC.
- Fixed: The short lump name for embedded files must be cleared so that they
are not found by a normal lump search.
- Added AProp_Notarget actor property.
- Fixed: TraceBleed was missing a NULL pointer check,
- Fixed: P_RandomChaseDir could crash for friendly monsters that belong to
a player which left the game.
- Changed A_PodGrow so that it plays the generator's attack sound instead of
"misc/podgrow".
- Added transference of a select few flags from PowerProtection to its owner.
- Added actor type parameters to A_PodPain() and A_MakePod().
- The savegame path is now passed through NicePath(), since it's user-
specifiable.
- Added save_dir cvar. When non-empty, it controls where savegames go.
- SBARINFO update:
* Added the ability to center things with fullscreenoffsets enabled. Due
to some limitations the syntax is [-]<integer> [+ center].
* Fixed: the translucent flag on drawinventorybar didn't work quite right.
* Fixed: Extremely minor inaccuracy in the Doom SBarInfo code. The
fullscreen inventory bar wasn't scaled correctly.
- fixed: The CHECKSWITCHRANGE line flag was ignored for one sided lines.
- Added more compatibility settings, submitted by Gez.
- Fixed: Doom's fullscreen HUD was limited to 6 keys.
- Made 'next endgame' work again for cases where it is supposed to be
the same as 'next endgame4'.
- GCC nitpick fix: Classes being used as template parameters may not be
defined locally in a function. Fixed FWadFile::SetNamespace for that.
- Improved error reporting for incorrect textures in maps.
- Fixed: When music was stopped this was not set in the global music state.
- Fixed: Friendly monsters did not target enemy players in deathmatch.
- Fixed: Completely empty patches (8 0-bytes) could not be handled by the
texture manager. They now get assigned a new FEmptyTexture object
that is just a 1x1 pixel transparent texture.
- Fixed: Multiple namespace markers of the same type were no longer detected.
- Fixed sprite renaming.
- Maps defined with Hexen-style MAPINFOs now run their scripts in the proper
order.
- Fixed: FWadCollection::CheckNumForName() read the lump each iteration before
checking for the end marker. On 32-bit systems, this is -1, but on 64-bit
systems, it is a very large integer that is highly unlikely to be in mapped
memory.
git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@325 b0f79afe-0144-0410-b225-9a4edf0717df
2009-05-15 18:02:01 +00:00
|
|
|
if (Wads.CheckNumForName (name, ns_colormaps) == (int)i)
|
2009-04-28 21:31:02 +00:00
|
|
|
{
|
|
|
|
strncpy(cm.name, name, 8);
|
|
|
|
cm.blend = 0;
|
2009-08-30 20:47:04 +00:00
|
|
|
cm.lump = i;
|
2009-04-28 21:31:02 +00:00
|
|
|
fakecmaps.Push(cm);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
realcolormaps = new BYTE[256*NUMCOLORMAPS*fakecmaps.Size()];
|
2008-01-27 11:25:03 +00:00
|
|
|
R_SetDefaultColormap ("COLORMAP");
|
|
|
|
|
2009-04-28 21:31:02 +00:00
|
|
|
if (fakecmaps.Size() > 1)
|
2008-01-27 11:25:03 +00:00
|
|
|
{
|
|
|
|
BYTE unremap[256], remap[256], mapin[256];
|
|
|
|
int i;
|
2009-04-28 21:31:02 +00:00
|
|
|
unsigned j;
|
2008-01-27 11:25:03 +00:00
|
|
|
|
|
|
|
memcpy (remap, GPalette.Remap, 256);
|
|
|
|
memset (unremap, 0, 256);
|
|
|
|
for (i = 0; i < 256; ++i)
|
|
|
|
{
|
|
|
|
unremap[remap[i]] = i;
|
|
|
|
}
|
|
|
|
remap[0] = 0;
|
2009-04-28 21:31:02 +00:00
|
|
|
for (j = 1; j < fakecmaps.Size(); j++)
|
2008-01-27 11:25:03 +00:00
|
|
|
{
|
2009-04-28 21:31:02 +00:00
|
|
|
if (Wads.LumpLength (fakecmaps[j].lump) >= (NUMCOLORMAPS+1)*256)
|
2008-01-27 11:25:03 +00:00
|
|
|
{
|
|
|
|
int k, r, g, b;
|
2009-04-28 21:31:02 +00:00
|
|
|
FWadLump lump = Wads.OpenLumpNum (fakecmaps[j].lump);
|
2008-01-27 11:25:03 +00:00
|
|
|
BYTE *const map = realcolormaps + NUMCOLORMAPS*256*j;
|
|
|
|
|
|
|
|
for (k = 0; k < NUMCOLORMAPS; ++k)
|
|
|
|
{
|
|
|
|
BYTE *map2 = &map[k*256];
|
|
|
|
lump.Read (mapin, 256);
|
|
|
|
map2[0] = 0;
|
|
|
|
for (r = 1; r < 256; ++r)
|
|
|
|
{
|
|
|
|
map2[r] = remap[mapin[unremap[r]]];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
r = g = b = 0;
|
|
|
|
|
|
|
|
for (k = 0; k < 256; k++)
|
|
|
|
{
|
|
|
|
r += GPalette.BaseColors[map[k]].r;
|
|
|
|
g += GPalette.BaseColors[map[k]].g;
|
|
|
|
b += GPalette.BaseColors[map[k]].b;
|
|
|
|
}
|
|
|
|
fakecmaps[j].blend = PalEntry (255, r/256, g/256, b/256);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
NormalLight.Maps = realcolormaps;
|
2009-04-28 21:31:02 +00:00
|
|
|
numfakecmaps = fakecmaps.Size();
|
2008-01-27 11:25:03 +00:00
|
|
|
}
|
|
|
|
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
|
|
|
//
|
2008-01-27 11:25:03 +00:00
|
|
|
// [RH] Returns an index into realcolormaps. Multiply it by
|
|
|
|
// 256*NUMCOLORMAPS to find the start of the colormap to use.
|
|
|
|
// WATERMAP is an exception and returns a blending value instead.
|
2008-01-27 15:34:47 +00:00
|
|
|
//
|
|
|
|
//==========================================================================
|
|
|
|
|
2008-01-27 11:25:03 +00:00
|
|
|
DWORD R_ColormapNumForName (const char *name)
|
|
|
|
{
|
|
|
|
if (strnicmp (name, "COLORMAP", 8))
|
|
|
|
{ // COLORMAP always returns 0
|
2009-08-30 20:47:04 +00:00
|
|
|
for(int i=fakecmaps.Size()-1; i > 0; i--)
|
2009-04-28 21:31:02 +00:00
|
|
|
{
|
|
|
|
if (!strnicmp(name, fakecmaps[i].name, 8))
|
|
|
|
{
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!strnicmp (name, "WATERMAP", 8))
|
|
|
|
return MAKEARGB (128,0,0x4f,0xa5);
|
2008-01-27 11:25:03 +00:00
|
|
|
}
|
2009-04-28 21:31:02 +00:00
|
|
|
return 0;
|
2008-01-27 11:25:03 +00:00
|
|
|
}
|
|
|
|
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
|
|
|
//
|
|
|
|
// R_BlendForColormap
|
|
|
|
//
|
|
|
|
//==========================================================================
|
|
|
|
|
2008-01-27 11:25:03 +00:00
|
|
|
DWORD R_BlendForColormap (DWORD map)
|
|
|
|
{
|
|
|
|
return APART(map) ? map :
|
2009-04-28 21:31:02 +00:00
|
|
|
map < fakecmaps.Size() ? DWORD(fakecmaps[map].blend) : 0;
|
2008-01-27 11:25:03 +00:00
|
|
|
}
|
|
|
|
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
2008-01-27 11:25:03 +00:00
|
|
|
//
|
|
|
|
// R_InitData
|
|
|
|
// Locates all the lumps that will be used by all views
|
|
|
|
// Must be called after W_Init.
|
|
|
|
//
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
|
|
|
|
2008-01-27 11:25:03 +00:00
|
|
|
void R_InitData ()
|
|
|
|
{
|
|
|
|
StartScreen->Progress();
|
2008-01-27 15:34:47 +00:00
|
|
|
|
2008-01-27 11:25:03 +00:00
|
|
|
V_InitFonts();
|
|
|
|
StartScreen->Progress();
|
|
|
|
R_InitColormaps ();
|
|
|
|
StartScreen->Progress();
|
|
|
|
}
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
//
|
|
|
|
// R_DeinitData
|
|
|
|
//
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
void R_DeinitData ()
|
|
|
|
{
|
|
|
|
R_DeinitColormaps ();
|
|
|
|
FCanvasTextureInfo::EmptyList();
|
|
|
|
|
|
|
|
// Free openings
|
|
|
|
if (openings != NULL)
|
|
|
|
{
|
2008-02-20 16:51:40 +00:00
|
|
|
M_Free (openings);
|
2008-01-27 11:25:03 +00:00
|
|
|
openings = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Free drawsegs
|
|
|
|
if (drawsegs != NULL)
|
|
|
|
{
|
2008-02-20 16:51:40 +00:00
|
|
|
M_Free (drawsegs);
|
2008-01-27 11:25:03 +00:00
|
|
|
drawsegs = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
//
|
|
|
|
// R_PrecacheLevel
|
|
|
|
//
|
|
|
|
// Preloads all relevant graphics for the level.
|
|
|
|
//
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
void R_PrecacheLevel (void)
|
|
|
|
{
|
|
|
|
BYTE *hitlist;
|
|
|
|
|
|
|
|
if (demoplayback)
|
|
|
|
return;
|
|
|
|
|
|
|
|
hitlist = new BYTE[TexMan.NumTextures()];
|
|
|
|
memset (hitlist, 0, TexMan.NumTextures());
|
|
|
|
|
2010-07-28 23:15:18 +00:00
|
|
|
screen->GetHitlist(hitlist);
|
|
|
|
for (int i = TexMan.NumTextures() - 1; i >= 0; i--)
|
2008-01-27 11:25:03 +00:00
|
|
|
{
|
2008-06-28 13:29:59 +00:00
|
|
|
screen->PrecacheTexture(TexMan.ByIndex(i), hitlist[i]);
|
2008-01-27 11:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
delete[] hitlist;
|
|
|
|
}
|
|
|
|
|
2010-07-28 23:15:18 +00:00
|
|
|
|
|
|
|
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
|
|
|
//
|
|
|
|
// R_GetColumn
|
|
|
|
//
|
|
|
|
//==========================================================================
|
|
|
|
|
2008-01-27 11:25:03 +00:00
|
|
|
const BYTE *R_GetColumn (FTexture *tex, int col)
|
|
|
|
{
|
|
|
|
return tex->GetColumn (col, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-01-27 15:34:47 +00:00
|
|
|
//==========================================================================
|
|
|
|
//
|
|
|
|
// Debug stuff
|
|
|
|
//
|
|
|
|
//==========================================================================
|
2008-01-27 11:25:03 +00:00
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
// Prints the spans generated for a texture. Only needed for debugging.
|
|
|
|
CCMD (printspans)
|
|
|
|
{
|
|
|
|
if (argv.argc() != 2)
|
|
|
|
return;
|
|
|
|
|
2008-06-28 13:29:59 +00:00
|
|
|
FTextureID picnum = TexMan.CheckForTexture (argv[1], FTexture::TEX_Any);
|
|
|
|
if (!picnum.Exists())
|
2008-01-27 11:25:03 +00:00
|
|
|
{
|
|
|
|
Printf ("Unknown texture %s\n", argv[1]);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FTexture *tex = TexMan[picnum];
|
|
|
|
for (int x = 0; x < tex->GetWidth(); ++x)
|
|
|
|
{
|
|
|
|
const FTexture::Span *spans;
|
|
|
|
Printf ("%4d:", x);
|
|
|
|
tex->GetColumn (x, &spans);
|
|
|
|
while (spans->Length != 0)
|
|
|
|
{
|
|
|
|
Printf (" (%4d,%4d)", spans->TopOffset, spans->TopOffset+spans->Length-1);
|
|
|
|
spans++;
|
|
|
|
}
|
|
|
|
Printf ("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
CCMD (picnum)
|
|
|
|
{
|
2008-06-28 13:29:59 +00:00
|
|
|
//int picnum = TexMan.GetTexture (argv[1], FTexture::TEX_Any);
|
|
|
|
//Printf ("%d: %s - %s\n", picnum, TexMan[picnum]->Name, TexMan(picnum)->Name);
|
2008-01-27 11:25:03 +00:00
|
|
|
}
|
|
|
|
#endif
|