Page 1 of 1

qfiles.h

Posted: Wed Jan 20, 2010 8:55 am
by sock
Heya, I am really new to the Q3 code base and trying to find my way around where things are stored and what sort of limits exist with the default Q3 base (1.32b). I am trying to understand what exactly makes up a BSP file and what sort of limits exist before I hopefully hit them. I found the following in the file qfiles.h:

Code: Select all

// there shouldn't be any problem with increasing these values at the
// expense of more memory allocation in the utilities
#define	MAX_MAP_MODELS		0x400
#define	MAX_MAP_BRUSHES		0x8000
#define	MAX_MAP_ENTITIES	0x800
#define	MAX_MAP_ENTSTRING	0x40000
#define	MAX_MAP_SHADERS		0x400

#define	MAX_MAP_AREAS		0x100	// MAX_MAP_AREA_BYTES in q_shared must match!
#define	MAX_MAP_FOGS		0x100
#define	MAX_MAP_PLANES		0x20000
#define	MAX_MAP_NODES		0x20000
#define	MAX_MAP_BRUSHSIDES	0x20000
#define	MAX_MAP_LEAFS		0x20000
#define	MAX_MAP_LEAFFACES	0x20000
#define	MAX_MAP_LEAFBRUSHES 0x40000
#define	MAX_MAP_PORTALS		0x20000
#define	MAX_MAP_LIGHTING	0x800000
#define	MAX_MAP_LIGHTGRID	0x800000
#define	MAX_MAP_VISIBILITY	0x200000

#define	MAX_MAP_DRAW_SURFS	0x20000
#define	MAX_MAP_DRAW_VERTS	0x80000
#define	MAX_MAP_DRAW_INDEXES	0x80000
I have a really large BSP file (@30Mb) and I still want to add more to it but I have no idea if I am close to any of the above limits because I don't have information or tools to tell me what I have in my BSP file. I assumed (read somewhere) that the actual Q3 BSP file size was limited to 30Mb but this is not true because I compiled a BSP last night is was 30.3Mb and it runs fine.

My question is: How can I find out how close I am to the above limits? Does anyone know of a tool that can audit or tell me the contents / size of my BSP file?

Re: qfiles.h

Posted: Wed Jan 20, 2010 5:06 pm
by bitWISE
Those are hex values so you could just use something like the windows calculator to convert them. And I think q3map2 outputs the totals while it runs doesn't it? Maybe the -v flag would show you.

Re: qfiles.h

Posted: Thu Jan 21, 2010 8:38 am
by sock
Here are the values in decimal for reference:

Code: Select all

// there shouldn't be any problem with increasing these values at the
// expense of more memory allocation in the utilities
#define	MAX_MAP_MODELS		0x400			// 1024
#define	MAX_MAP_BRUSHES		0x8000	// 32768
#define	MAX_MAP_ENTITIES	0x800			// 2048
#define	MAX_MAP_ENTSTRING	0x40000		// 262144
#define	MAX_MAP_SHADERS		0x400		// 1024

#define	MAX_MAP_AREAS		0x100	// MAX_MAP_AREA_BYTES in q_shared must match!
#define	MAX_MAP_FOGS		0x100			// 256
#define	MAX_MAP_PLANES		0x20000		// 131072
#define	MAX_MAP_NODES		0x20000		// 131072
#define	MAX_MAP_BRUSHSIDES	0x20000	// 131072
#define	MAX_MAP_LEAFS		0x20000		// 131072
#define	MAX_MAP_LEAFFACES	0x20000		// 131072
#define	MAX_MAP_LEAFBRUSHES 0x40000	// 262144
#define	MAX_MAP_PORTALS		0x20000	// 131072
#define	MAX_MAP_LIGHTING	0x800000		// 8388608
#define	MAX_MAP_LIGHTGRID	0x800000		// 8388608
#define	MAX_MAP_VISIBILITY	0x200000	// 2097152

#define	MAX_MAP_DRAW_SURFS	0x20000	// 131072
#define	MAX_MAP_DRAW_VERTS	0x80000	// 524288
#define	MAX_MAP_DRAW_INDEXES	0x80000	// 524288
I did check the /verbose option for the q3map2 compiler and it produces a mountain of stuff to look through. I was hoping that someone had created a simple utility to check the stats of a BSP against the q3 engine limits. Part of the problem with the /v option is that the terminalogy is different between the list above and the additional complier output. For example metasurfaces and luxels?

I checked the q3 source and it says the BSP is split into 17 lumps with some of them linked to the above code limits, are there no totals in the BSP file to say how much is in each lump section? Maybe to compare to the above list?

Re: qfiles.h

Posted: Thu Jan 21, 2010 8:53 am
by Silicone_Milk
I believe you're looking for -info

"q3map2.exe -info [path to .bsp file]

Here's an output of a random bsp:

Code: Select all

4 models              160
24 shaders         1728
892 brushes      10704
6147 brushsides 73764
0 fogs                     0
1976 planes       31616
61 entdata          3675

354 nodes          12744
359 leafs            17232
968 leafsurfaces    3872
1314 leafbrushes   5256

131 drawsurfaces 19388
673 drawverts     53840
420 drawindexes    1680

0 lightmaps                0
0 lightgrid                  0
  visibility 

  total               181280
                            177 KB
                               0 MB

Re: qfiles.h

Posted: Thu Jan 21, 2010 10:01 am
by sock
yep thats it, perfect thanks :)

My current bsp info:

Code: Select all

Abstracted BSP file components (*actual sizes may differ)
      253 models            10120
      282 shaders           20304
    25993 brushes          311916
   262979 brushsides      3155748 *
        0 fogs                  0
   128068 planes          2049088
      953 entdata          130555

     2661 nodes             95796
     2915 leafs            139920
    48733 leafsurfaces     194932
    40329 leafbrushes      161316

    32142 drawsurfaces    4757016 *
   267426 drawverts      21394080 *
   216594 drawindexes      866376

      192 lightmaps       9437184
    30753 lightgrid        922590 *
          visibility       111008

          total          30988084
                            30261 KB
                               29 MB
---------------------------------
        0 seconds elapsed

Re: qfiles.h

Posted: Thu Jan 21, 2010 1:06 pm
by ^misantropia^
192 lightmaps... stock Q3 crashes after 256 lightmaps, ioquake3 hard-limits it (patch by yours truly; I didn't expect anyone to even get remotely close to that limit).

Re: qfiles.h

Posted: Thu Jan 21, 2010 2:26 pm
by sock
I recently created a map called focal point for a competition and that map had 266 lightmaps, bsp info:

Code: Select all

C:/Program Files/Quake III Arena/baseq3/maps/focal_final.bsp
Abstracted BSP file components (*actual sizes may differ)
       16 models              640
       56 shaders            4032
     4557 brushes           54684
    38674 brushsides       464088 *
        0 fogs                  0
    11704 planes           187264
       94 entdata            7643

     1081 nodes             38916
     1098 leafs             52704
    12138 leafsurfaces      48552
    10289 leafbrushes       41156

     3941 drawsurfaces     583268 *
    28153 drawverts       2252240 *
    13710 drawindexes       54840

      266 lightmaps      13074432
     7714 lightgrid        231420 *
          visibility        37016

          total          15621780
                            15255 KB
                               14 MB
The competition version of the map loads with surfaces missing in IOquake which I posted about on the IOQ3 forums and sadly no one replied. You submitting a patch to limit the lightmaps sort of answers my question I posted on the forums. Strangely enough the above map works fine with Q3 pointrelease 1.16n and 1.32b, so I am not sure how it can crash with excessive lightmaps. :confused:

Re: qfiles.h

Posted: Thu Jan 21, 2010 3:53 pm
by ^misantropia^
As soon as you start crossing that 256 limit, the engine begins overwriting internal buffers. This might or might not result in a crash (it's non-deterministic) but it is always a Bad Thing.

Re: qfiles.h

Posted: Fri Mar 19, 2010 10:52 pm
by ^misantropia^
sock, I filed it as a bug: http://bugzilla.icculus.org/show_bug.cgi?id=4578

I expect to see it fixed soon(ish).