kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Sept 24, 2023 23:57:35 GMT 1
I didn't mean to come across as rude, sorry! No worries there olvie, no offense taken. My post also didn't mean to accuse you of that Probably the result of short forum posts and language barriers...
Good news however! I copied and pasted the code into xml-viewer and put it as seen below. Without all the spaces, it's easier to see irregularities and the xml-viewer shows errors in red.
The first <item Secret='-1 lacks a quotation mark, so i guess that's the problem. It shows corrected in the code below. Compared to 1.xml's from my side, they all use double quotation marks "-1" instead of single '-1'. Xml-viewer also puts these in red. However, i have seen 1.xml's with single quotation marks that work fine in BK. <base> <RPG> <KeyName/> <StatsType>Mission</StatsType> <HeaderText>Scenarios\Custom\Missions\aaa_stalingrad_mission\header</HeaderText> <SubheaderText>Scenarios\Custom\Missions\aaa_stalingrad_mission\header</SubheaderText> <DescriptionText>Scenarios\Custom\Missions\aaa_stalingrad_mission\description</DescriptionText> <MapImage>Scenarios\Custom\Missions\aaa_stalingrad_mission\map</MapImage> <MapImageRect x1='0' y1='0' x2='0' y2='0'/> <TemplateMap/></TemplateMap> <FinalMap>aaa_stalingrad_mission</FinalMap> <Objectives> <item Secret='-1' AnchorScriptID='-1'><Header>Scenarios\Custom\Missions\aaa_stalingrad_mission\0h</Header><DescriptionText>Scenarios\Custom\Missions\aaa_stalingrad_mission\0</DescriptionText><PosOnMap x='245' y='245'/></item> <item Secret='-1' AnchorScriptID='-1'><Header>Scenarios\Custom\Missions\aaa_stalingrad_mission\1h</Header><DescriptionText>Scenarios\Custom\Missions\aaa_stalingrad_mission\1</DescriptionText><PosOnMap x='289' y='289'/></item> <item Secret='-1' AnchorScriptID='-1'><Header>Scenarios\Custom\Missions\aaa_stalingrad_mission\2h</Header><DescriptionText>Scenarios\Custom\Missions\aaa_stalingrad_mission\2</DescriptionText><PosOnMap x='289' y='289'/></item> </Objectives> <SettingName><SettingName/><MODName></MODName><MODVersion></MODVersion> </RPG> </base>
|
|
olvie
Potporucnik
Posts: 104
|
Post by olvie on Oct 15, 2023 21:00:57 GMT 1
Thanks for looking over the code! Sorry, I've had a busy couple of weeks and didn't have the chance to get back to the map.
Unfortunately, so far I haven't been able to fix the problem. I've replaced my code with yours, added the new objectives I've scripted since, but nothing has worked so far.
I'll try removing the map entirely to see if it fixes it.
Another problem I've encountered is that, when playtesting the map, units are lagging heavily. Unless I find an answer for this problem, everything else might be futile anyway.
|
|
kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Oct 15, 2023 23:51:32 GMT 1
Sorry to hear it doesn't work. Personally, i would then try replacing the single quotation marks into double ones, also the <MapImageRect like: x1="0"
I believe it to be the most proper way, since xml-viewers show this as green and correct, but i could be wrong; if other gzm-maps have single quotation marks and work fine, then it might not be an issue and not the problem here. Apart from that missing quotation mark, the rest of the 1.xml seemed fine to me.I'll try removing the map entirely to see if it fixes it. A bit unsure what you mean here by removing. To check whether other gzm-maps work well or...? Maybe you want to check whether a unit or an object is causing the problem, right?
Anyway, debugging can be a frustrating business. Make sure to have a back-up of your map, even in xml. When i'm suspicious about a unit, i delete a group of units and check if it then works. If so, you can narrow it down to a single unit. Btw, the same for the xml-version of the map or for a lua-script, i delete parts, see if that works. If not, you can still 'undo' and look further. Do you have a lua-script and is it complex?
Lagging, i believe, is the most difficult nut to crack as it may be caused by sound and videocards (but still caused by something within BK). It could be a unit and maybe an endless repeating function in lua (although i have never seen prove of this in lua). So far, i have only once succeeded in making the game crash through lua, not lag, but who knows...
Another cause of crashing might be, as stupid as it may sound, but i've been there; when rivers are made too long over the map's edges, it can cause a crash. This however, always happens at the moment, you load the map. If i remember correct, you were crashing one step before that, when you open the list of maps.
|
|
olvie
Potporucnik
Posts: 104
|
Post by olvie on Oct 19, 2023 20:56:17 GMT 1
I cannot fix the crashing for now, unfortunately. Maybe I need a clean re-install of GZM. Maybe it's one of the patches that were released since I started making the map. I will try a re-install this weekend and try with the different patches. The map can be launched without crash from the editor. From your experience, do you think this is a sign that it isn't the contents of the map causing the crash?
The good news is, the performance issues are gone. After doing a fresh reboot, the game runs like a charm. I usually just set it to sleep for weeks on end and I'm guessing all the build up clutter became a little much for the old machine.
As I'm doing a play test of the second half of the mission (I'm scripting it in reverse order), I realise that balancing is going to be extremely tough. Does anyone have any rules of thumb when it comes to balancing?
|
|
kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Oct 21, 2023 0:04:36 GMT 1
That's indeed telling something, i think. For 99% i would say yes; it is a sign that it isn't the contents of the map. Apart from maybe a few exceptions... The only thing i can remember right now, is that i once had a unit with a 'corrupt' dds skin file. It showed fine in the editor and the game loaded ok, but in the game every time i scrolled to the unit in view, the game crashed. It's just an example as i don't think this is the case with your map.
Hard to say what is happening here. Unfortunately, i don't have the gzm mod installed and i'm not very familiar with its file/folder structure, otherwise i could ask you to have a look at it myself. Two things, i'm curious to know at this point:
- When you launch from editor, is the 1.xml with objectives and the lua working fine as well?
- When you 'remove' your map from the gzm mod (put it outside the folders instead of delete), can you then get into the game's mission screen and start any other gzm map?
To me, the 1.xml remains a serious 'suspect'. When you click the missions button in BK, it starts loading all 1.xml's and their header texts. If getting into the list and next select a mission and start it, that is usually the point where a map would crash in case of a corrupt unit/object. There BK is loading the actual map.bzm or map.xml.
One thing i noticed looking back at your 1.xml, is that it doesn't contain the <CombatMusics> and <ExplorMusics> tags. I can't say whether they are mandatory or not. All my 1.xml's have the tags. Sure i could test it by removing these and see what happens, but maybe you should just add them and see if that works. I could be wrong about this, but it is different from what i am used to. If all other gzm maps don't have these tags, it might be not mandatory. Personally, i have never deleted tags from within the <RPG> tags, because i always believed they are mandatory. If i don't want music, i would still use <CombatMusics/> and <ExplorMusics/> tags. Yeah, it is. A tenfold testing/playing/editing. I always start testing with a clear view set on the enemy (ChangeWarFog), so i can check its movements and timing and this in non-god mode. Through multiple plays, you'll find out where it needs tweaking. Finally test without view on enemy, as player would do. I use god-mode only if i have get through a chapter or map quickly to check its 'milestones' like transitions or objectives/texts. Just my 2cents.
|
|
olvie
Potporucnik
Posts: 104
|
Post by olvie on Oct 22, 2023 20:33:33 GMT 1
Alright, I (somehow) fixed it... Still not sure what the issue was, but I ended up copying over another existing 1.xml ( keepitsimple Dieppe map, many thanks for the assist) and replacing everything and then it worked. Before that I noticed that both my and your code had the wrong subheader name, but that didn't fix it either (to my great frustration, because I was sure I found the issue). Could it be that the folder name inside scenarios/custom/etc needs to be identical to the map file name? My folder was still called "aaa_stalingrad_mission" but the map name had progressed to "aaa_stalingrad_mission3". I updated the <FinalMap> inside the 1.xml to the current map name, but perhaps the folder name was the issue. In any case, it's working now and I'm relieved! Thank you for sitting down with me and trying to help kaoz, I really appreciate it! My problem is, this is likely to be a 10h+ map (at my speed probably more like 20h) so I need to be economical with my playthroughs. That's also the reason why I'm scripting it backwards, so that every newly added part will be at the beginning. But this comes with its own set of problems. I'm not striving to make a super difficult map, if anything I want the map to be enjoyable without too many reloads. But it's also not supposed to be a walk in the park, it's Stalingrad after all and the player is supposed to feel the struggle. But over the course of so many hours, ~15 objectives and many, many counter attacks, it's really hard to gauge how many troops the player will have left and how many reinforcements are needed. And as I'm making the missions backwards, I'm basically flying blind... Still though, feels good seeing this project through! No matter how good the final product will be, I had fun making it (except for the 1.xml episode but that's over now ) Oh yea, scripting is about 50% done so tentative release date... Christmas or January sometime?
|
|
kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Oct 23, 2023 21:50:42 GMT 1
You're welcome, olvie. I've been there so many times myself and i'm always interested to learn where and why BK is crashing.
The folder name inside scenarios/custom/etc does not need to be identical to the map file name. There's a lot of examples showing so. But doing so, couldn't hurt and i also mostly do it to avoid confusion.
As said previously, BK will load all the 1.xml's when clicking the missions button and you get into the missions list. When starting a specific mission, it will use the <FinalMap> tag from the 1.xml and load the map with the name given there. In case it can't find a bzm or xml with that name, i believe nothing happens and you can click forever. Or maybe you are thrown out of the game, i don't recall precisely.
I would advise to use a very unique name for your folder, especially when you name your folder 'normandy' or 'stalingrad'. If you ever have another map with the exact identical folder name, it is possible that BK will use the wrong folder for your map. Chances this might happen is one in a million, i know, but i have experienced this with the many Stalingrad and Normandy maps that are available. It doesn't cause the game to crash, but will use the wrong minimap and missions. Very weird, very confusing at first, but logic after all. Your aaa_stalingrad_mission name should be unique enough of course. Just sharing my experience in this.
|
|
olvie
Potporucnik
Posts: 104
|
Post by olvie on Oct 23, 2023 22:05:24 GMT 1
In that case, I have no idea what was wrong and I'm just glad it works!
On the other hand, I think I made a big mistake...
When I group tanks and infantry together under the same script id and give them the following order:
function Attack1511()
ChangeFormation(1511, 3);
DisplayTrace("CA 1511");
Cmd(3, 1511, GetScriptAreaParams("wp251"));
QCmd(3, 1511, GetScriptAreaParams("wp540"));
QCmd(3, 1511, GetScriptAreaParams("wp234"));
QCmd(3, 1511, GetScriptAreaParams("wp502"));
Suicide();
end; The infantry is attacking as prompted, but the tanks don't move at all. Could it be that tanks need to have their own script id or else they don't move after the change formation order?
|
|
kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Oct 25, 2023 1:00:19 GMT 1
Tanks don't necessarily need their own scriptID, but it often works better. The Cmd command can be tricky if you mix it with other commands within the same function. I have a feeling that if you would remove the ChangeFormation line, the tanks should also swarm, but it's a guess since i am only seeing this part of the script.
You have to realize that within this function the Cmd and ChangeFormation command will happen/being executed at the very same time. You should be able to see this on the infantry's movement; they change formation while starting to swarm. The ChangeFormation doesn't work for tanks and they missed the Cmd command because of that happening at the same time.
A better example is this:
function Attack1511() LandReinforcement(1511); Cmd(3, 1511, GetScriptAreaParams("wp251")); QCmd(3, 1511, GetScriptAreaParams("wp540")); Suicide(); end;
The landing of reinforcement happens at the same time as the Cmd. It might work on a single unit, but if you have more units, they will not swarm, because they are still being placed when the Cmd command has already passed. When you land like 40 or 50 units at the same, BK needs at least two or three seconds before further lua commands will work properly. And i have much reason to believe this has nothing to do with slower of faster pc's.
The following should work:
function ChangeInf() ChangeFormation(1511, 3); RunScript("Attack1511", 1000); Suicide(); end;
function Attack1511() DisplayTrace("CA 1511"); Cmd(3, 1511, GetScriptAreaParams("wp251")); QCmd(3, 1511, GetScriptAreaParams("wp540")); QCmd(3, 1511, GetScriptAreaParams("wp234")); QCmd(3, 1511, GetScriptAreaParams("wp502")); Suicide(); end;
If you would use the following, i believe the tanks will halt after 9 seconds:
function ChangeInf() ChangeFormation(1511, 3); Suicide(); end;
function Attack1511() DisplayTrace("CA 1511"); Cmd(3, 1511, GetScriptAreaParams("wp251")); QCmd(3, 1511, GetScriptAreaParams("wp540")); QCmd(3, 1511, GetScriptAreaParams("wp234")); QCmd(3, 1511, GetScriptAreaParams("wp502")); RunScript("ChangeInf", 9000); Suicide(); end;
Of course, you could give your tanks another scriptID and then give their own function Attack1211. That should also work. Personally, i would go for this option; i like to have tanks and infantry separated, giving me more control over their timing. On bigger maps, my tanks always run faster than the infantry, therefor i delay their attack a few seconds. But this brings more lua+testing work and maybe more confusion, so do whatever you like
Just keep in mind that BK in accordance with the lua needs time with some specific commands and avoid making them happen at the same time.
|
|
olvie
Potporucnik
Posts: 104
|
Post by olvie on Oct 25, 2023 21:07:55 GMT 1
Ah, I see, thank you! So basically, the commands ChangeFormation and Cmd get applied at the same time and the tanks stop in the moment they get the command ChangeFormation and never start moving. I thought the commands get applied one after another in the order they are scripted, but there we go. Well damn, I need to re-code a lot of counter-attacks now. I thought I was being clever by scripting out one objective, testing it and using that as the basis for most of the other scripts. I thought I'd be smooth sailing from there... But joke's on me, the counter-attack in that objective had no tanks! I feel like giving all tanks new script IDs would have been way more complicated and messed with my numbering system, so I'm glad that's not necessary. No idea why I even gave a finish date, there are probably still many speed bumps ahead... But, when the script does work, it is a very rewarding feeling.
|
|
kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Oct 26, 2023 3:07:15 GMT 1
Which is understandable, but in lua it is, most of the time, not. The Cmd+QCmd is an exception and good example. Here QCmd's will follow the Cmd one after another, like below, in function Attack1511.
The other function Attack1512 will start DisplayTrace, ChangeFormation and Cmd at the exact same time. Being executed that is. The commands within the function are ready to be executed whenever the function is called.function Attack1511() Cmd(3, 1511, GetScriptAreaParams("wp3")); QCmd(3, 1511, GetScriptAreaParams("wp2")); QCmd(3, 1511, GetScriptAreaParams("wp1")); Suicide(); end;
function Attack1512() DisplayTrace("CA 1511"); ChangeFormation(1511, 3); Cmd(3, 1511, GetScriptAreaParams("wp251")); Suicide(); end; Unfortunately, commands cannot be timed with seconds, but (only?) the RunScript command can, so with that, you can time. I would do something like the following:function Trigger_Attack1() if (GetNUnitsInArea(0, "wp251") > 1) or (GetNUnitsInArea(0, "wp540") > 1) then RunScript("Reinforce2001", 1000); RunScript("Reinforce2201", 2000); Suicide(); end; end;
function Reinforce2001() LandReinforcement(2001); RunScript("Attack2001", 3000); RunScript("ChangeInf", 10000); Suicide(); end;
function Reinforce2201() LandReinforcement(2201); RunScript("Attack2201", 9000); Suicide(); end;
function Attack2001() Cmd(3, 2001, GetScriptAreaParams("wp251")); QCmd(3, 2001, GetScriptAreaParams("wp540")); Suicide(); end;
function Attack2201() Cmd(3, 2201, GetScriptAreaParams("wp251")); QCmd(3, 2201, GetScriptAreaParams("wp540")); Suicide(); end;
function ChangeInf() ChangeFormation(2001, 3); Suicide(); end; Yeah, more code... i know, but it's always fun to have a trigger when something needs to happen. Here the player gets in one of the two areas upon which Reinforce2001 (infantry) and Reinforce2201 (tanks) are being called quite immediately. They land and i gave them 3 seconds before they starts swarming and 10s before changing formation. Tanks start swarming after 9s.
But you see, i keep the function with Cmd commands separate from other commands. Commands that have nothing to do with units, like DisplayTrace, will cause no harm, but when giving a specific unit command, like ChangeFormation to tanks, then BK does not compute. And yes, the ChangeFormation apparantly doesn't need to be separate, but i put it apart just to be sure it won't interfere with my Cmd's and to have more control over their timing.It is more complicated. Therefor it is good to have a numbering system. Do test your lua script frequently i would say; i've been there when you do a lot of copy/pasting and changes and next more and more. Suddenly after a month of changes, lua isn't working anymore... darn, typos! So test changes when you can still remember which changes you've made.And definitely more spice to the map!
|
|
kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Oct 29, 2023 3:33:03 GMT 1
but in lua it is, most of the time, not. Ok, i guess i need to add a bit of nuance to the above statement. Shouldn't have said 'most of the time'. In many cases, the order does play an important role in lua.
In the following function, it will, of course, show 'Carpiquet' at the top and 'July' at the bottom on the game screen, but still they appear on the same time, right?
function Info0() DisplayTrace("Carpiquet Airfield"); DisplayTrace("Normandy/Calvados, France"); DisplayTrace("July 4, 1944"); Suicide(); end;
It might not be the 'exact' same time, like i said, but then we're probably talking about milliseconds or such. The following functions show this: AirStrike1 works fine, AirStrike2 sends no planes at all. No game crash either, DisplayTrace and EnableAviation work fine, but the Cmd has been missed or passed.function AirStrike1() EnableAviation(0, 4); Cmd(36, 999, 0, 6816, 6769); DisplayTrace("Typhoons underway"); Suicide(); end;
function AirStrike2() Cmd(36, 998, 0, 4545, 15421); DisplayTrace("Hawkers underway"); EnableAviation(0, 4); Suicide(); end;
So this clearly proves order does matter and the more i think about it now, the more i need to correct my 'exact same time' statement. However, i stand confirmed on the rest i've said and i'm keen to know whether that code worked for you...?
function ChangeInf() ChangeFormation(1511, 3); RunScript("Attack1511", 1000); Suicide(); end;
function Attack1511() DisplayTrace("CA 1511"); Cmd(3, 1511, GetScriptAreaParams("wp251")); QCmd(3, 1511, GetScriptAreaParams("wp540")); QCmd(3, 1511, GetScriptAreaParams("wp234")); QCmd(3, 1511, GetScriptAreaParams("wp502")); Suicide(); end
|
|
olvie
Potporucnik
Posts: 104
|
Post by olvie on Nov 5, 2023 18:22:27 GMT 1
Hi kaoz,
many thanks for clarifying and sorry for the late reply, I hadn't found the time to dive back into BK. Scripting does require a lot more focus than making a map...
I haven't gotten round to making all the changes yet. I've got 1300 lines of code that needs to be reviewed... Since the formation change seems the obvious culprit, I'm thinking of fixing everything at once before attempting another playthrough.
Good thing you mentioned air support, this is something I haven't looked at yet but plan to implement.
A question on the side: can reinforcement groups (and their attached attack scripts) be triggered multiple times? If yes, I'm assuming all units from the previous trigger need to be dead or else they will follow the new move orders?
|
|
kaoz
General
inter faesces et urinam nascimur
Posts: 1,112
|
Post by kaoz on Nov 6, 2023 4:45:45 GMT 1
Again, no worries, no need for sorries (sorry's? seems there's no plural form in english). It is very time consuming and therefor not always compatible with real life. Yeah, you need focus and be 'in it' and then before you know, you are departed for a couple of hours...
So far, i had always put a ChangeFormation command apart in its own function, but i tested the following code, curious to see what would happen:
function Trigger_attack_05() if (GetNUnitsInArea(0, "Airfield") > 1) then RunScript("Attack_126", 3000); RunScript("Attack_127", 1000); RunScript("Attack_128", 2000); RunScript("Attack_129", 3000); Suicide(); end; end; function Attack_126() ChangeFormation(126, 3); Cmd(3, 126, GetScriptAreaParams("Airfield")); QCmd(3, 126, GetScriptAreaParams("Patrol12")); Suicide(); end; function Attack_127() Cmd(3, 127, 9210, 5440); ChangeFormation(127, 3); QCmd(3, 127, 8316, 5666); QCmd(3, 127, 6814, 5808); Suicide(); end; function Attack_128() Cmd(3, 128, 9190, 6179); QCmd(3, 128, 7918, 6609); ChangeFormation(128, 3); QCmd(3, 128, 6823, 6767); Suicide(); end; function Attack_129() Cmd(3, 129, 11419, 6623); QCmd(3, 129, 9224, 7159); QCmd(3, 129, 6816, 7790); ChangeFormation(129, 3); Suicide(); end;
Notice the ChangeFormation being different in order within each (Attack) function. These were only applied to infantry (126>129). All units performed the Cmd and the ChangeFormation immediately, no matter the order. All QCmd's also worked fine. What does bother me now, is that the Trigger function is set to 1, 2 and 3 seconds, but it takes much longer the Attack functions are being executed. That, i think, is weird. Need to test whether putting the ChangeFormation apart, will make a difference or not.Yes, that is possible, but can be 'tricky' at times and might cause looping of the script in some cases. How to explain this will probably make this a long comment... and 'my way' isn't necessarily 'the' way.
It depends on your map and where you want to go with it. Personally, i like the Add Start Commands in the MapEditor. I don't want the whole group going to one point, like Cmd(3, 126, GetScriptAreaParams("Airfield")), as they might all end up in the middle. In the editor, it's easier to lay a path for each specific unit. The only disadvantage of the Add Start Commands, is that they are being executed right away when they land, so unless you want a direct battle, you need to create all these Reinforcements and tell through lua when to land. And then, yes you can script that 'if' all units of group X are dead, land them again. I've used this method so many times (thx to GordonCZ).
function Trigger1001() if (GetNUnitsInScriptGroup(1001, 0) == 0) then RunScript("Reinforce1001", 9000); Suicide(); end; end; function Reinforce1001() LandReinforcement(1001); RunScript("Trigger1001", 19000); Suicide(); end; function Trigger_dp1() if (GetNUnitsInArea(1, "dp1") == 0) and (GetNUnitsInArea(0, "dp1") > 1) then KillScript("Reinforce1001"); KillScript("Trigger1001"); Suicide(); end; end;
Notice the loop between Trigger1001 and Reinforce1001. This loop isn't causing any trouble thanks to the timings. If you would set 9000 and 19000 both to 1 second, you'll end up with a constant stream of reinforcements. That loop will cause trouble.
Ok, that script was used in combination with the Add Start Commands in the MapEditor. So these units land, start swarming their paths and spawn when all of the group is dead. The KillScript will end it once the condition of Trigger_dp1 is fulfilled. The danger in this method is that in case the KillScript is being missed for some reason, you end up with a never ending spawn.
Now what in combination with Lua commands? They will also need time, especially the more, the merrier. So don't mix the LandReinforcement and the Cmd together at the same time, but add some seconds between them.
Also, in theory, using something like RunScript(Reinf_01, 300000, 2) would be simple and perfect. Let's imagine the Reinf_01 function executes the LandReinforcement commands. After 5m it will repeat the RunScript and thus the Reinf_01. And imagine further, Cmd will follow in another function. The repeated landing will go again through these commands. If the previous, first group would still be alive, i expect them to also go through the command, simply because they have the same ScriptID. When using Add Start Commands in the MapEditor this could work fine however.
One disadvantage of reinforcements is the chance of landing on top of the player, especially if player does something unexpected. That always looks stupid. In some cases, i then use a trigger to check whether the player is in that specific landing area or not.
Lately, i've had some maps where i wanted the (enemy) units to be already on the map, wanting them to attack after they've defended. This also to avoid landings on top of player, because the map offers the possibility that player can make it to that landing area. So in this scenario i can't use the Add Start Commands and i'll need to script it in lua.
I've used the above described spawn method so much, i also try to explore other ways. The safest method would be creating unique reinforcements, of course, but that demands more work. I guess i use a specific method according to the group or even single unit's function and even mix them in one map.
|
|
|
Post by charlie72 on Nov 22, 2023 20:19:44 GMT 1
Which parameter controls trench cover for units? I'm using Road to Victory mod and the infantry in trenches is immortal, it takes around 15 minutes to clear one trench with three tanks. I'm thinking of changing to closer to vanilla or GZM value but I can't find the correct parameter in either consts.xml or units
|
|