We have no idea why, but support has recently been bombarded by requests for the limits of various systems in the Iron Engine. Thus, I have taken the time to compile a list of as many as a I could within my breakfast and lunch timeframe. I will add more as requested as this is certainly not comprehensive. I hope it helps
enum { MaxNumWeaponBanks = 4 };enum { MAX_NUM_MESHES = 400 };enum { MAX_NUM_FILE_TEXTURES = 1000 };enum { MAX_NUM_FILE_CUBE_TEXTURES = 10 };
enum { MAX_SOUNDDATA = 2000 };enum { MAX_SOUNDIDS_PER_TYPE = 6 };
static const int MAXNUMALTERNATES = 4; //sound alternates
enum { MAX_NUM_ICONS = 2000 };
enum { MaxNumSegments = 20 }; //exhaust trailsenum { MaxNumTrails = 4 }; //exhaust trails
struct MaxNumLinearPathEffects{enum {Value = 1000};};struct MaxNumBeamEffects{enum {Value = 1000};};struct MaxNumAttachedWeaponFireEffects{enum {Value = 2000};};struct MaxNumAttachedWeaponHitEffects{enum {Value = 2000};};struct MaxNumAttachedWeaponCriticalEffects{enum {Value = 200};};struct MaxNumAttachedPersistentDamageEffects{enum {Value = 200};};struct MaxNumAttachedBuffEffects{enum {Value = 1000};};struct MaxNumAttachedExhaustEffects{enum {Value = 1000};};struct MaxNumAttachedExplosionEffects{enum {Value = 200};};struct MaxNumShieldEffects{enum {Value = 1000};};struct MaxNumMissileEffects{enum {Value = 1000};};struct MaxNumTrailEffects{enum {Value = 250};};
enum { MAX_NUM_PARTICLES = 6000 };enum { MAX_NUM_PARTICLE_SIMULATIONS = 2000 };enum { MAX_NUM_EMITTERS_PER_SIMULATION = 10 };enum { MAX_NUM_AFFECTORS_PER_SIMULATION = 15 };
enum { MAX_NUM_RESEARCH_TIERS = 8 };enum { MAX_NUM_RESEARCH_TRACK_SIZE = 8 };enum { MAX_NUM_BUFF_LEVELS = 3 };enum { MAX_NUM_EXPERIENCE_LEVELS = 10 };
enum { CapitalShipMaxFlairEffectCount = 10 };enum { FrigateMaxFlairEffectCount = 10 };enum { PlanetModuleOrbitMaxFlairEffectCount = 10 };enum { StarBaseMaxFlairEffectCount = 25 };enum { CannonShellMaxFlairEffectCount = 1 };enum { StarMaxFlairEffectCount = 1 };enum { PlanetMaxFlairEffectCount = 10 };enum { SpaceMineMaxFlairEffectCount = 1 };
enum {MaxNumWeapons = 3};enum {MaxWeaponPointCount = 20}; //per weapon per bank (so 3 * 4 * 20 = 240 total)
enum {MaxNumPersistentDamageEffectDefinitions = 6};
enum {MaxBuffEffectMeshPointsPerAttachPoint = 25};
enum {MaxStageCount = 10}; (Starbase Upgrades)enum {MaxStageCount = 10}; (Planet Upgrades)
enum{MaxNumAbilities = 5};enum{MaxBombEffectPointCount = 10};enum{MaxNumBuffInstantActions = 5};enum{MaxNumBuffPeriodicActions = 2};enum{MaxMeshNames = 12};enum{MaxNumSpecificDebris = 2};enum{MaxNumPersistentDamageEffectsPerDef = 10};enum{MaxNumSquadTypes = 4};enum{MaxNumHangarPoints = 10};enum{MaxSkyboxMeshNames = 10};enum{MaxNumUpgrades = 9}; //starbase upgradesenum{MaxSpawnShipsRandomEntityCount = 5};enum{MaxNormalPlayerCount = 10};enum{MaxAvailablePlayerColorCount = MaxNormalPlayerCount};enum{MaxFleetSubjectLevels = 9};enum{MaxPlanetAsteroidCount = 500};enum{MaxTextures = 4}; //dust cloudsenum{MaxParticlesPerTexture = 200}; //dust cloudsenum{MaxNumFarStarPointGroups = 3};enum{MaxNumFarStarPoints = 40};enum{MaxNumHalos = 10};enum{MaxNumPlanetElevatorConnections = 5};enum{MaxNumClusters = 50}; //planet elevatorsenum{MaxNumElevators = MaxNumClusters * NumElevatorsPerCluster};enum{MaxNumStars = 50}; //background starsenum{MaxNumStarTextures = 10}; //background starsenum{MaxNumExhaustPoints = 10}; //exhaust trailsenum{MaxNumEffects = 200}; //exhaust trailsenum{MaxNumUniqueTextures = 2}; //exhaust trailsenum{MaxSubExplosionCount = 12};
Did you actually try the 3gb switch for XP32??? I used 3GB for a while back in the spring so I could play Civ IV on large maps, but I started getting mysterious crashes in Sins where it would reboot my computer (happened rarely on large maps). I didn't make the connection at first, but after a huge amount of troubleshooting everything I could think of, I realized it might be the 3GB memory setting, I removed it, and sure enough no more crashes. Civ IV worked great with the 3GB setting, however. Luckily, Sins doesn't need it to play.
Blair
for the 1000 textures limit is that the total of all CL, DA and NM .dds files referenced in meshes? does this take into account that some ships may have 256x256 textures and some may have 2048x2048 textures? my assumption is that it is a memory limit protection for texture swapping, but I could easily destroy that with 2048x2048 textures
is that also a a run time limit for races currently loaded in the current game? or is it limited to any time the game runs and what is previously loaded?
similar wth meshes, do shield meshes count to this 400 limit? what actually counts? This limit seems really low if the stock game has around 360 meshes, especially if a mod includes a number of races along with the stock races (IE seven sins)
1000 covers everything, brushes (ui elements), cl, da and nm etc. But at the highest point, Sins only ever has 767 textures loaded. The size of the textures is a different situation.
I added this is for your other post: static const int MAXNUMALTERNATES = 4; //sound alternates.
You can see all this with the dev build under overlays->textures.
some that I would like to see expanded-
mesh count- double it 800.
texture count- double it to 2000
Particle file counts- 50% more (1.5x current)
more research tiers/tracks (up to 15/16).
Additional buff levels; mainly for research (5 is good)
more weapon types per ship. Five is good.
More that low... sins use 320 mesh... if you add Entrenchment, it is 61 mesh more... remain only 19 mesh !!! Not enough for create a single race with unique mesh...
1000 covers everything, brushes (ui elements), cl, da and nm etc. But at the highest point, Sins only ever has 767 textures loaded.
The 767 is with or without Entrenchment ( who add a few more textures ) ?
For this texture limit problem, there is maybe some workaround... recently, i have make a bomber and a fighter ( different mesh ) for the Evil Tesla pirate mod who share the same 512*512 textures ... for all the Vorlon ship from the B5 mod, i plan to use one single texture 2048*2048...
At the extreme, people can combine 4 texture from frigate/cruiser ( 1024*1024 ) on a single 2048*2048 texture...
Much of my mods will use races that employ the 'modular hull' concept; that is, much like modern navies, air forces, and armies, different ship hulls will be equipped with variable loadouts.
I would like to explain my reaction to that statement:
1. blinks
2. rereads line
3. jaw drops
4. speechless
5. nervous laughter
6. tears of joy
7. maniacal laughing
8. happiness
I think it goes without saying, but... but.. THANK YOU IC!
if a mesh is not loaded do the textures not get loaded as well? or is the textures directory indexed and parsed by itself?
I keep getting a MaxCout > Count message and then occasionally will get a DirectXAsser (!Failed(dxVerifyHR)]
Context: Can't create Texture ....... .dds
HE: (E_OUTOFMEMORY) - Ran out of memory
I am adding 4 races (and would at least like to add 4 more)
the 4 races have 343 new textures totalling 365 mb
and 138 .mesh files (with roughly half being shield meshes) totalling 172 mb (most races have 6-9 of each slot filled out, and I haven't even included custom meshes for buildings) I'd expect a rough scaling equivalent to this for the other races
if I am not going to use the stock races can I just exclude them from the entity.manifest and then their resources are ignored? this still may leave me a bit short when I add the other races though so I support an increase to resource limitations. If I understand this right if a entity isn't in the entity def then the mesh it calls should not be loaded and therefore its textures should not be loaded as well?
If it's in the manifest it will get loaded along with everything referenced in it. Remove the native stuff from the manifest to get more room. I obviously can't increase the 2gigs available but if removing stuff from the manifest still leads to you running out of various resources, let me know specifically what they are and I'll see if they can come up in the next update (or for Diplomacy).
thanks for the quick response, I guess I'm going total conversion for this mod
wow thanks for the info! [e digicons](\(\[/e]
now if only we could find a way to animate turrets for those guns. and make those turrets targetable.
these limits helped a lot in figuring our a bunch of my minidumps !!
Blair,
I KNEW THERE WERE MESH AND TEXTURE HARD CODES!
Wow, I wish I saw this post earlier. This EXPLAINS everything. Well, as you know, the 7 DEADLY SINS mod takes the engine to the breaking point then, with over 7 races, and many ships per race! Wow.
You have my vote for at least a slight extension in the MESH limit and TEXTURE limit, like you did for the sounds. PLEASE make this happen if you can. Because of this, I may also have to go total conversion, and take every last once of vanilla ships out. If you can make more room in the game engine, or find some way to only make a entity/mesh/texture LOAD ON DEMAND, then that would help us modders who are making these huge mods.
Thanks for all this info!!!!!!! Wish I knew it a year ago LOL!
DANMAN
I've been away for awhile, so I hope this isn't considered posting to a dead thread.
At any rate, I've been a programmer for decades, so I may be be able to give you an answer. The game is probably programmed in C or C++. Both of these languages are strictly and statically-typed. In general, sizes and dimensions of things like arrays must be known at compile-time. There are exceptions (you can dynamically allocate an array), but you certainly don't want to ever exceed the array boundary (this would result in a nasty memory access violation, segmentation fault, crash, etc.), thus you code a limit.
Another reason to code a limit is that there may be hundreds of places in the code where the value of "such and such" (number of research tiers, for instance) is referenced. Thus, any time the devs need to mod the game (a patch, an expansion, etc), they may need to modify that value (for instance, a new research tier is added for an expansion). It is exceedingly tedious, difficult, and error-prone to hunt through millions of lines of code looking for the value of "such and such" in order to change it. A solution is to hard code 1 line at the top of the program that says "ResearchTiers=8" and use the constant "ResearchTiers" throughout the entire code. Whenver this value needs to be changed throughout the code, you change it in ONE PLACE (at the top of the code), and it is magically changed everywhere else.
There could be many more reasons to hard code limits. Those are two.
Not sure about it since sins relay a lot on .NET for several thing... maybe they use C#...
Both of these languages are strictly and statically-typed. In general, sizes and dimensions of things like arrays must be known at compile-time. There are exceptions (you can dynamically allocate an array), but you certainly don't want to ever exceed the array boundary (this would result in a nasty memory access violation, segmentation fault, crash, etc.), thus you code a limit.
About dynamic array : http://www.uow.edu.au/~lukes/TEXTBOOK/notes-cpp/newdelete/50dynamalloc.html
But more interesting is the dynamic change of the array boundary : http://www.uow.edu.au/~lukes/TEXTBOOK/notes-cpp/newdelete/55dynexample.html
Only problem with dynamic array is that it make the code more complex and with time some memory fragmentation can appear... one dynamic array is not a problem but hundred of them lead to problem with time...
But if C# is used, you have the ArrayList class. With ArrayList, you no longer need to worry about freeing up memory after allocation of memory and array bound overflow.More, the Count property of the ArrayList class to retrieve the number of element in it is very convenient since you do not have to book keep the number of element in this array.
Hardcode limit is not a problem for the original sins game... my first version of sins was without mod button... so, i think that modding is a option added later and limit are mainly problem for mod... due to the success of sins and the numerous mod for it, i am almost sure that the code for a Sins II will somehow build in a different way... never forget that sins was out 2 year ago, and that the dev stage have long time before the release... a lot of thing are possible now who was not possible several year ago...
You cannot ask a programmer to change million of code line for a patch or expension... yes, multicore is possible... yes, 64 bits is possible... yes, dynamic array is possible... but it will ask a fully remake from scratch for the game engine... not really a job for a patch or cheap expension at a few $$$...
By the way, if really needed, there is some work around for the texture limit... the limit of texture is related to the number of them, not the size... frigate/cruiser use texture who are 1024*1024... nothing stop you to put 4 1024*1024 texture in one single 2048*2048 texture... UV will need to be remake but the result will be 4 mesh using one single texture... by the way, i can certify that these method work... for the Evil Tesla mod, i have made two different mesh ( one fighter and one bomber ) using the same map ( 512*512 )... for the B5 mod, i plan to use one single texture ( 2048*2048 ) for all ship...it is simply a other way for create model, XSI will complain that some poly share the same zone of the texture but on screen, the result will be good...
Hey, long time ago, some genious guy have found a method for make moving part on ship via the particule system... it was something never plan by Stardock/Ironclad but it work...
For huge mod, a work around is possible too... unfortunaly, i am not a good enough programmer for make it... what about a dynamic mod with a piece of software who is run before launch Sins... having a "seed" directory with hundred of race... the pre-launch software allow you to choice some of them for a game ( max 10 player/race ) and create a mod in a dynamic way before launch sins itself and enable the mod with the selected race... all data from the non used race will never be loaded since it will never be in the dynamic mod... i know that so piece of software will not be simple, that it can be slow ( need to make in a automatic way what modder make manually when they merge two race in a single mod )... until now, modder have always work inside sins, never think about add a layer around it...
Yes, i know, i have crazy idea but these grazy idea are usually possible ( not easy but possible )... it is already some time that i think create so launcher with a scripting language... unfortunaly, my coding knowledge in sins is very limited and my scripting knowledge is limited to Linux system...
thoumsin, a simpler way is for minimods of each race, a mod for the planets, and enable the planets & each race that is wanted,while I do know programming, in vb6 and earlier versions of basic, batch files AND z80 assembly/machine language, the program to do this sort of thing would be quite complex and probably need to be rewritten for each mod and patch.
harpo
In fact, it is each mod who need to be rewritten... so piece software can only work if all modders who create race use the same system... by example, a lot of modders modify the original TGA with the race picture in place of create a new tga for their own race....
For the same reasons, speed for create a dynamic mod will be a big problem... since there is not general convention in the naming of file, each entity, mesh, brush file will need to be read and analyse... Having a common naming convention will help and allow a big part of the work to be made at file level, without the need of read and analyse the file...
The first step can be make a mod creator who respect some simple rules...
Patch and update will be a real problem... but soon, the last expension called Diplomacy will be released, certainly followed by a few patch... once this done, Stardock will move to something other , maybe a sins II... but it will become the perfect time for create tools without the fear of modify them at each update...
Your simple way already exist, it is the stacking of mod but it don't work very good since a lot of mod have files who have the same name but different content... not really the fault of the stacking system but the fault of modders who don't follow any "universal" method of work
My previous post was mainly for show that limit can have some work around... can be very very difficult in some case but not impossible... at the extreme limit, a team of programmer can create a new core engine who is able to use entity file, mesh, brush, all the data file from sins... will ask year of work but it is possible...
Hmm... the mesh limit will be a major problem for me if its not upped to allow for at least a hundred or two hundred more meshes. Same with textures, although I have already exceeded the 1000 limit and haven't had major issues yet.
I can't really remove native elements (a.k.a do the total conversion) because The Last Stand was envisioned as an "expansion mod" from the beginning. So in order to do this properly I really need more than just a dozen free mesh slots... a single race takes up more than thirty just with base meshes for ships and structures, and I plan on adding three.
Like Danman, I wish I knew this a year ago...
I just want to confirm that if an entity is NOT on the manifest then its related assets (mesh/textures/particles/sounds, ability's buff's, etc etc) do NOT load in game, correct?
So if i remove all tech, advent and vasari assets from the manifests then i pretty much have a "clean slate" to work with, Correct?
Does sins load all of is mesh's, and textures (including stock and the mod folders) at once or only as needed? I am puzzled at why a fresh map with no units except the starter units requires 2 gigs of ram on max settings.
Does this mean with these limits that i am stuck with basically enough mesh/texture slots for only 3 factions (if i mimic how the sins factions are set up exactly)?
I am with Manshooter. I wish someone would have stickied this on the mod forum a long time ago. Now i feel like i wasted over a years worth of my time with something that will be impossible to finish with these limits. I understand why they are there. I delt with far worse hardcode limits in HW1. I just wish i KNEW about them.
At least up the mesh limit. 400 is no where near enough for 6 separate factions. I can get around the texture limit easily, but in order to have more than 3 factions we must have a higher mesh limit.
These limits explain much of why SoA 2 is having issues, but why would a mod with just as many assets if not more than vanilla sins would run fine up until 1.041? Did you change something to force a dump if the limits are hit? We over the limits for quite some time with no issues up until now.
A way to get around the texture limit... Have more than one mesh share the same texture (even if you combine 2 separate units textures into one sheet, and re-uv map the models).
The mesh limit will be problematic unless you have multiple units referencing the same mesh.
multiple units for one mesh is something that is done in modern militaries (technically, as they use the same basic hull design for different options).
I like that idea the most.
Anyways, my ideal limits-
MaxNumWeaponTypes- 5
MaxNumFlairPoints- 50-100 (depending on performance issues)
MaxNumMeshes- 800-1000
MaxNumTextures- 2000-3000
MaxNumSquadTypes- 5
MaxNumWeaponBanks- 6 (add a Dorsal (UP) and Ventral (DOWN) bank plz)
MaxNumResearchTiers- 10-15
MaxNumResearchTracks- maybe 9. 8 seems good.
MaxNumBuffLevels- 4 or more. However, this should be something hardcoded in that, only researchable abilities can have more than 3 levels. CapShip abilities (Intrinsic source type) can only have 3.
enum { MaxNumTrails = 4 }; //exhaust trails
...
enum{MaxNumExhaustPoints = 10}; //exhaust trails
Ok, I'm a little confused about these two. First of all, what is the first one referring to? Secondly, if the exhast point limit is 10 (I don't see anything to suggest that it is different for strike craft), the why does the game minidump whenever I add more than five exhaust points to a strike craft? I want to put a total of six on this particular type of fighter. I can put five on with no problems, but once I put the 6th on, whenever I get the camera close to the fighters, the game minidumps. I could "hack" the engines on using flair points, but those don't seem to work with fighters. Any suggestions?
So, still no support to have capital ship names for anything but the vanilla races (referring to English.str). Was really looking forward to something more.
Waited a year for this information we have
There are many great features available to you once you register, including:
Sign in or Create Account