If You've Had Allocblock:full...

KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
<div class="IPBDescription">I need your help</div> I'm doing some testing on a possible cause for allocblock:full specific to NS maps - It's a general error, but I believe that I've found a slight correlation on one possible cause that <i>might</i> make it more common in NS mapping. Consider this an offer to help you fix the problem if you don't like the sound of donating a map to 'research.' <!--emo&:)--><img src='http://www.unknownworlds.com/forums/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif'><!--endemo-->

PM me or e-mail me (aweldon@planethalflife.com) if you think you can help. I'll be testing some on my own maps (old versions of Eclipse, in particular), but I'll need more info than just that to come to any conclusions.

Comments

  • OlljOllj our themepark-stalking nightmare Fade Join Date: 2002-12-12 Member: 10696Members
    edited March 2003
    I once had alloc block full because of "too much" or "too big" info_mapinfo brushes.
    cost me 2 days to find and fix that.

    whenever you get allocblockfull and dont know why, delete some ns_specific entity groups.
  • KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
    That's exactly my theory - large info_location brushes result in more memory required to run the map.

    I've asked Flay to make info_locations z-axis independent in 1.1, but I'd like to get some more information on this before then. It also appears that there can be some notable .bsp file size reductions with smaller info_location entities (i.e. only 32 units high or something as opposed to 512 or 768+ depending on level layout and size).
  • KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
    Oh my...

    First test subject, old build of Eclipse 1.0. I was correct in assuming that it would encounter allocblock:full unchanged. This served as test 1, ns_eclipse_alloctest. ns_eclipse_alloctest2 was an identical version of the map with all info_locations resized to be 32 units tall and placed at ground level of the respective areas (or approximately, in the case of locations with multiple elevations).

    ns_eclipse_alloctest failed to load due to allocblock:full. This was expected, and normal. File size was 6,114 kb.
    ns_eclipse_alloctest2 loaded perfectly. This was also expected. File size was 5,153 kb, almost an entire megabyte smaller than the first test. This was expected, but <b>not</b> to this extent.

    Flayra has told me that he'll get info_locations to be Z-axis independent ASAP in time for 1.1. I would imagine if other official maps are adjusted accordingly that we could see up to 6-7 megs of space optimized, depending on other factors such as textures, entity reduction, additions, etc. I should also note that there was no adverse effect on plane counts in making these adjustments (as the info_locations no longer lined up with each other): the count was equal in both bsps. I plan on further reducing the height of the info_locations to 8 units in Eclipse 1.1, and I would recommend this size as the optimal compromise between small size and ease of manipulation.
  • KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
    edited March 2003
    Comparisons between compile logs, changes marked in red:

    ns_eclipse_alloctest:
    <!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
    Object names  Objects/Maxobjs  Memory / Maxmem  Fullness
    ------------  ---------------  ---------------  --------
    models            248/400        15872/25600    (62.0%)
    planes          18820/32767     376400/655340   (57.4%)
    <span style='color:red'>vertexes        21800/65535     261600/786420   (33.3%)</span>
    nodes            8692/32767     208608/786408   (26.5%)
    texinfos         4181/32767     167240/1310680  (12.8%)
    <span style='color:red'>faces           15952/65535     319040/1310700  (24.3%)</span>
    clipnodes       23692/32767     189536/262136   (72.3%)
    leaves           5091/8192      142548/229376   (62.1%)
    <span style='color:red'>marksurfaces    20456/65535      40912/131070   (31.2%)</span>
    surfedges       71169/512000    284676/2048000  (13.9%)
    <span style='color:red'>edges           37989/256000    151956/1024000  (14.8%)</span>
    texdata          [variable]    1010016/4194304  (24.1%)
    <span style='color:red'>lightdata        [variable]    2971869/4194304  (70.9%)</span>
    visdata          [variable]      65347/2097152  ( 3.1%)
    entdata          [variable]      54288/524288   (10.4%)
    105 textures referenced
    <span style='color:red'>=== Total BSP file data space used: 6259908 bytes ===</span>
    1496.68 seconds elapsed [24m 56s]<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

    ns_eclipse_alloctest2:
    <!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
    Object names  Objects/Maxobjs  Memory / Maxmem  Fullness
    ------------  ---------------  ---------------  --------
    models            248/400        15872/25600    (62.0%)
    planes          18820/32767     376400/655340   (57.4%)
    <span style='color:red'>vertexes        20406/65535     244872/786420   (31.1%)</span>
    nodes            8692/32767     208608/786408   (26.5%)
    texinfos         4179/32767     167160/1310680  (12.8%)
    <span style='color:red'>faces           14575/65535     291500/1310700  (22.2%)</span>
    clipnodes       23692/32767     189536/262136   (72.3%)
    leaves           5091/8192      142548/229376   (62.1%)
    <span style='color:red'>marksurfaces    19079/65535      38158/131070   (29.1%)</span>
    surfedges       65627/512000    262508/2048000  (12.8%)
    <span style='color:red'>edges           35218/256000    140872/1024000  (13.8%)</span>
    texdata          [variable]    1010016/4194304  (24.1%)
    <span style='color:red'>lightdata        [variable]    2068740/4194304  (49.3%)</span>
    visdata          [variable]      65347/2097152  ( 3.1%)
    entdata          [variable]      54288/524288   (10.4%)
    105 textures referenced
    <span style='color:red'>=== Total BSP file data space used: 5276425 bytes ===</span>
    860.02 seconds elapsed [14m 20s]<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

    The lightdata is a result of erroneous judgement on my part - texturing info_locations with aaatrigger instead of null. Upon talking to Merkaba and seeing these results, that should be a flat-out given that all info_locations be null textured. Most other differences are rather negligible, save for file size.
  • InsaneInsane Anomaly Join Date: 2002-05-13 Member: 605Members, Super Administrators, Forum Admins, NS1 Playtester, Forum Moderators, NS2 Developer, Constellation, NS2 Playtester, Squad Five Blue, NS2 Map Tester, Subnautica Developer, Pistachionauts, Future Perfect Developer
    Ahah. Useful info there. Well done, KFS <!--emo&:D--><img src='http://www.unknownworlds.com/forums/html/emoticons/biggrin.gif' border='0' style='vertical-align:middle' alt='biggrin.gif'><!--endemo-->
  • RedfordRedford Monorailcatfjord Join Date: 2002-04-28 Member: 528Members, NS1 Playtester
    To my knowledge, since you need to be touching the location ent to display the location name, would making multiple location brushes to cover multilevel areas (that are no longer covered by a single tall location brush) create certain difficulties?
  • masterswordmanmasterswordman Join Date: 2002-12-21 Member: 11303Members
    Not for mappers they won't
  • KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
    With Z-axis independence, info_locations won't be able to overlap. It may be possible to have the brushes amended so that if one brush is over another, the area above the top one is defined as one location and the area below the second as another. I'm not sure, though.

    With the revised changes, you won't have to touch the info_location brushes; you'll just need to be within their x/y coordinates.
  • tommy14tommy14 Join Date: 2002-11-15 Member: 8839Members
    Kudos on your valuable research so far!

    a further thought: the info location is usually a block brush of aaatrigger texture.

    i have heard stories of scaling/stretching aaatrigger texture (& SKY & {invisible texture) 4x helps reduce allocblock also, i can't see why, but if you want to test it to see if it has any effect also, feel free.
  • MouseMouse The Lighter Side of Pessimism Join Date: 2002-03-02 Member: 263Members, NS1 Playtester, Forum Moderators, Squad Five Blue, Reinforced - Shadow, WC 2013 - Shadow
    edited March 2003
    I've been texturing my info_locations with the seethrough texture so I can easily tell them apart from other entities in VHE.
    2 questions from this.

    1)Does the seethrough texture have any special properties?
    2)Should I use the null texture instead?

    [EDIT] and on a side note, at one point I had Allocblock:full with hydrosity and I got rid of it by deleting my info_locations
  • MerkabaMerkaba Digital Harmony Join Date: 2002-01-24 Member: 22Members, Retired Developer, NS1 Playtester
    By texturing your info_locations (and indeed any non-visible brush entity) with the NULL texture, you can be sure that no lightmap/surface data is recorded to the BSP. You can only gain. If anyone has any problems doing this though, please let us know...(I've not had any problems yet)
  • KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
    I'll be trying this myself in the next compiles I make of Eclipse and Veil over the next few days.
  • HeistHeist Join Date: 2002-11-09 Member: 7922Members
    Thankyou so much.. I was wondering why my light data jumped a whole lot....
    info_locations huh.. Good Job
  • KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
    Would it be helpful if I took the information spread across this thread and turned it into a more concise article dealing with the use of info_locations for maps post-1.1? I know all the info is here, but I just want to make it easy on people just finding out about this. <!--emo&:)--><img src='http://www.unknownworlds.com/forums/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif'><!--endemo-->
  • MouseMouse The Lighter Side of Pessimism Join Date: 2002-03-02 Member: 263Members, NS1 Playtester, Forum Moderators, Squad Five Blue, Reinforced - Shadow, WC 2013 - Shadow
    Yeah, sounds like a good idea KFS.


    BTW, while we are on the subject of obscure compile errors, I got MAX_SWITCHED_LIGHTS on hydrosity once and this was with no dynamic lights in the map at all. After a bit of digging I discovered it is a commonish Q3 engine compile error which is caused by dynamic lights in the level (which the Q3 engine can't handle).
    But in my case it was caused by <i>the env_custom_particles entity</i> . I managed to fix it by deleting the names of all the env_custom_particles that weren't triggered by anything.
  • devilblocksdevilblocks Join Date: 2002-02-04 Member: 162Members, NS1 Playtester, Contributor
    Unforunately, the dreaded allocblock full is often the worst error message to receive. You might as well get a "General Protection fault" since it is sooo incredibly unhelpful. Barring something obvious like going over compile limits, the allocblock full just means you somehow managed to run over all the memory available and there's no sure way to fix it. KT_214 has/had that problem alot and its really hard to add or even change things (or it was at least) without getting that stupid error.
  • CageyCagey Ex-Unknown Worlds Programmer Join Date: 2002-11-15 Member: 8829Members, Retired Developer, NS1 Playtester, Constellation
    edited March 2003
    <!--QuoteBegin--Merkaba+Mar 18 2003, 08:58 PM--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (Merkaba @ Mar 18 2003, 08:58 PM)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> By texturing your info_locations (and indeed any non-visible brush entity) with the NULL texture, you can be sure that no lightmap/surface data is recorded to the BSP. You can only gain. If anyone has any problems doing this though, please let us know...(I've not had any problems yet) <!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
    Sounds like something that could easily be done at the tool level, too. My next release of HLCSG will have a config file that contains a list of entity names and target names... if the targetname or classname of an entity is matched to the appropriate section, I'll automatically substitute the null texture for every face on the brush so that the mapper can use whatever texture they want in the editor but still get the benefit of the null texturing in the final map... this will be on a switch.

    Initial default classname list to convert (full listing of invisible vanilla HL ents are included as well as NS):

    env_bubbles
    func_ladder
    func_monsterclip
    func_mortarfield
    trigger_autosave
    trigger_cdaudio
    trigger_changelevel
    trigger_endsection
    trigger_gravity
    trigger_hurt
    trigger_monsterjump
    trigger_multiple
    trigger_once
    trigger_push
    trigger_teleport
    trigger_transition

    -----

    func_nobuild
    info_join_autoassign
    info_join_team
    info_location
    info_spectate
    trigger_presence

    If you spot an invisible entity I'm missing or if I've got an entity in there that doesn't belong, let me know. The targetname check would allow things like using a func_illusionary to define the area for an env_custom_particles and have its faces stripped by the tools when its name is matched.

    I'll also read from a file named after the map being compiled if you want to customize this on a per-map basis.

    EDIT: forgot two of the most common triggers... doh.
  • CageyCagey Ex-Unknown Worlds Programmer Join Date: 2002-11-15 Member: 8829Members, Retired Developer, NS1 Playtester, Constellation
    <!--QuoteBegin--KungFuSquirrel+Mar 18 2003, 11:15 AM--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (KungFuSquirrel @ Mar 18 2003, 11:15 AM)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Comparisons between compile logs, changes marked in red:

    ns_eclipse_alloctest:
    <!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->

    <snip>

    <span style='color:red'>lightdata        [variable]    2971869/4194304  (70.9%)

    </span><snip>

    1496.68 seconds elapsed [24m 56s]<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

    ns_eclipse_alloctest2:
    <!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->

    <snip>

    <span style='color:red'>lightdata        [variable]    2068740/4194304  (49.3%)</span>

    <snip>

    860.02 seconds elapsed [14m 20s]<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd--><!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
    saved yourself a lot of time by not calculating transfer lists on invisible patches, too...
  • KungFuSquirrelKungFuSquirrel Basher of Muttons Join Date: 2002-01-26 Member: 103Members, NS1 Playtester, Contributor
    <!--QuoteBegin--devilblocks+Mar 19 2003, 08:32 AM--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (devilblocks @ Mar 19 2003, 08:32 AM)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> Unforunately, the dreaded allocblock full is often the worst error message to receive. You might as well get a "General Protection fault" since it is sooo incredibly unhelpful. Barring something obvious like going over compile limits, the allocblock full just means you somehow managed to run over all the memory available and there's no sure way to fix it. KT_214 has/had that problem alot and its really hard to add or even change things (or it was at least) without getting that stupid error. <!--QuoteEnd--> </td></tr></table><span class='postcolor'> <!--QuoteEEnd-->
    Did you not notice the fact that we've confirmed one likely cause of it in relation to NS mapping? :X I have no doubt that this is what causes the error to be more common than it should be in regards to NS mapping.
  • YamazakiYamazaki Join Date: 2002-01-24 Member: 21Members, NS1 Playtester, Contributor
    "If you spot an invisible entity I'm missing or if I've got an entity in there that doesn't belong, let me know. The targetname check would allow things like using a func_illusionary to define the area for an env_custom_particles and have its faces stripped by the tools when its name is matched."

    Actually, Cagey, don't implement this part. I can see situations where a func_illusionary might be intended to be visible and be a particle generation source. I'm creating some holographic effects for a computer AI lab, and to save on entities I'm using visible sources create particles.

    Focus on the entities that will never ever be visible, specifically the ones with no rendering properties built in.
  • CageyCagey Ex-Unknown Worlds Programmer Join Date: 2002-11-15 Member: 8829Members, Retired Developer, NS1 Playtester, Constellation
    <!--QuoteBegin--Yamazaki+Mar 19 2003, 11:46 AM--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (Yamazaki @ Mar 19 2003, 11:46 AM)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> I can see situations where a func_illusionary might be intended to be visible and be a particle generation source. I'm creating some holographic effects for a computer AI lab, and to save on entities I'm using visible sources create particles.


    Focus on the entities that will never ever be visible, specifically the ones with no rendering properties built in. <!--QuoteEnd--> </td></tr></table><span class='postcolor'> <!--QuoteEEnd-->
    Actually, that's why I'm allowing exclusion by targetname as well as classname -- by default items like func_illusionary aren't changed... if you specifically add the targetname of the func_illusionary to the file, it will be converted--nothing is going to be hardcoded, so the mapper will have complete control over the effect.

    In the particle system example, if the func_illusionary was named "particle2_origin" and the mapper added "particle2_origin" to the list of strings in the input file, it would be converted--otherwise, it would remain untouched. I'm not doing any detection of entity relationships for decision making--as you noted entity relationships alone often don't provide enough information. If a mapper wanted to convert every func_illusionary (not sure why you'd want to do this, but for the sake of illustration humor me <!--emo&:)--><img src='http://www.unknownworlds.com/forums/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif'><!--endemo-->), the classname could be used instead of all of the targetnames.

    I've actually decided to make this option something that uses a file based switch (-nullify <filename>) rather than using a standard config file because the tools already have two areas to specify information (command line and map entity) and it'd be asking a lot to add a third place for users to check. The file format is simply a newline delimited list of strings that are matched against classname and targetname fields of entities.

    I wrote the addition last night--it was a pretty simple item to implement. I'm testing it to make sure it's not causing any unforseen problems, and I'll be releasing it later in the week, possibly with some other CSG enhancements.
  • MerkabaMerkaba Digital Harmony Join Date: 2002-01-24 Member: 22Members, Retired Developer, NS1 Playtester
    Inputting the names for those types of entities (func_illusionaries) seems like more trouble to me than simply texturing them NULL in the first place. Are there any other benefits that you've coded in besides simply texturing the brushes with NULL?
  • venomusvenomus Join Date: 2002-11-16 Member: 8951Members
    Hmmm, there is some nice revealing information in this thread which could save me a lot of time. I'm working on an absolutely frigging huge NS map, and it's a constant war against the compile errors. As soon as you fix one, another pops up, possibly one which you thought you sorted out a while ago!
    I have had a few allocblock:full encounters, so far always when there was a leak to fix. For me switching to software mode allowed the map to load, just so I could look at the pointfile.
  • masterswordmanmasterswordman Join Date: 2002-12-21 Member: 11303Members
    This post needs a sticky.

    STICKY PLEASE, report it to a mod.
Sign In or Register to comment.