@Bloc (second mod of Bannerlord and couple of others made by him) in Turkish forum, he said it is [near] impossible for a modder to that. His post is too much technical for me to translate. By any chance, releasing of modding tools changed this(I know you said modding tools would not help this situation)?
Uh, that was not quite what I said. I can translate that to English to be clear.
You asked me if we will be able to see a mod that generates this.
Tl;dr: in theory, maybe, in practice not possible.
Long answer: Gameplay code calls Engine methods which is embedded inside the C++ engine. Reverse engineering C++ is not possible. It is possible to tweak HEX code but it's not possible to read it's content directly like we do for C# .dll files. You can still get the main logic, but it's hard. You can perhaps modify it. At best, someone can look into terrain.bin files and understand/decode it's content for readable language. Then that person would have full charge on changing the content of the file and create them on the fly. So logic would be, having a one static file where you can always change it's content and a mod where changes the battle map logic to always open that particular terrain. And terrain itself will be auto generated by other code piece and written into .bin file. What's the bad side of this? Longer battle load times. Possible HDD/SSD usage due to fact that you need to rewrite contents of several .bin files. But currently no one knows how that .bin files are generated and how to read them. So currently its not possible.
will require expertise regarding C#
Not quite. Terrain generation is hard regardless of the language of your choosing. Its up to how you decode their bin files. Then you need knowledge about terrain generation in general. You can create basic perlin noise, distort it and then use that as your heightmap and perhaps apply a hydraulic erosion on the fly before writing onto the file. But again, at the end, you need to decode the bin files. Here is a reverse-engineered snipped from RGL to see how terrain nodes are generated( obviously this is not 100% legal so I won't post entire functional code - although I cant since it's 2,198,608 lines )
C++:
*reinterpret_cast<void***>(&rsi10) = reinterpret_cast<void**>(static_cast<uint32_t>(dl));
*reinterpret_cast<int32_t*>(reinterpret_cast<int64_t>(&rsi10) + 4) = 0;
rdi11 = rcx;
_0rglVarString_QEAA_AEBV0_Z(reinterpret_cast<int64_t>(rbp4) - 8);
_0rglBuffer_QEAA_XZ(reinterpret_cast<int64_t>(rbp4) - 64);
_0rglVarString_QEAA_AEBV0_Z(reinterpret_cast<int64_t>(rbp4) + 32, reinterpret_cast<int64_t>(rbp4) - 8);
append_rglVarString_QEAAXPEBD_Z(reinterpret_cast<int64_t>(rbp4) + 32, "/terrain.bin");
rsp12 = reinterpret_cast<void*>(reinterpret_cast<uint64_t>(rsp5) - 8 + 8 - 8 + 8 - 8 + 8 - 8 + 8);
_0rglNative_file_QEAA_XZ(reinterpret_cast<uint64_t>(rsp12) + 80, "/terrain.bin");
rax13 = reinterpret_cast<void**>(char_p_rglString_base_QEBAPEBDXZ(reinterpret_cast<int64_t>(rbp4) + 32, "/terrain.bin"));
rsp14 = reinterpret_cast<void*>(reinterpret_cast<uint64_t>(rsp12) - 8 + 8 - 8 + 8);
rdx15 = rax13;
*reinterpret_cast<int32_t*>(&r9_16) = 0x104;
*reinterpret_cast<int32_t*>(&r9_16 + 4) = 0;
r8_17 = reinterpret_cast<void**>(5);
*reinterpret_cast<int32_t*>(&r8_17 + 4) = 0;
open_rglNative_file_QEAA_NPEBDHH_Z(reinterpret_cast<uint64_t>(rsp14) + 80, rdx15, 5, 0x104);
rsp18 = reinterpret_cast<void*>(reinterpret_cast<uint64_t>(rsp14) - 8 + 8);
if (!*reinterpret_cast<signed char*>(&rsi10) && (al19 = reinterpret_cast<signed char>(is_valid_rglNative_file_QEAA_NXZ(reinterpret_cast<uint64_t>(rsp18) + 80, rdx15, 5, 0x104)), rsp18 = reinterpret_cast<void*>(reinterpret_cast<uint64_t>(rsp18) - 8 + 8), !!al19)) {
r8_17 = reinterpret_cast<void**>(4);
*reinterpret_cast<int32_t*>(&r8_17 + 4) = 0;
rdx15 = reinterpret_cast<void**>(reinterpret_cast<uint64_t>(rsp18) + 88);
read_rglNative_file_QEAA_KPEAX_K_Z(reinterpret_cast<uint64_t>(rsp18) + 80, rdx15, 4, 0x104);
rsp18 = reinterpret_cast<void*>(reinterpret_cast<uint64_t>(rsp18) - 8 + 8);
....
So yeah you get the idea, it's basically unreadable. It's also copyrighted etc, so don't reverse engineer stuff. It's bad. If TW decides to give us a chance about how to decode that stuff, we could have a chance.
For your case, other solution I can offer is the following:
Create huge maps in editor, randomize the position and rotation. So that even though some features of map will be same, it will be hard to recognize because of the randomized positions as well as the randomized maps. This big maps increases the loading time, but eh, that's a trade off.
The next patch may alleviate this issue somewhat through the introduction of additional battle terrains. Auto-generated terrains are not something we are currently exploring, but we intend to continue adding a range of custom battle terrains.
Any plan to have something where we can `read` the contents of the .bin files to create our own tools for scene creation? Since it's out of discussion for TW to have autogenerated maps, perhaps community create something like I mentioned above. But we need to decode those .bin files first.