• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.
This is what I got, I will send you the bmp formats by email, check them out.

Load_1024_V4.jpg
bg_start_V4.jpg

P.S. Forgot, problem with bg_frontend. How to make these frames. And I have an idea to add a world map here, but I can't find a suitable one. Need retro. Like this
1940-world-map.jpg
 
Last edited:
There's no riddle there. For characters that meet the condition
SPOILER: PSEUDOCODE1
allowed only
SPOILER: PSEUDOCODE2
Cyrillic: Я - 0xFF, Ф - 0xF4, К - 0xEA - and others meet the conditions (see pseudocode1) and are not on this list (see pseudocode2)

This is what can be seen from disassembly. This behavior is only for the file db\\unitnames.csv.
Why they introduced such restrictions for characters - I have no idea
Meow, teach me how to disassemble. I would fix it. In the licensed russian version of the game (HOI2, HOI2DD, HOI2Arma) there are no differences in the launcher at all, but there is full support for the Cyrillic alphabet. And that's why I can't understand how it works. Magic? So far I have successfully changed screens and launcher:p
 
Last edited:
Meow, teach me how to disassemble. I would fix it. In the licensed russian version of the game (HOI2, HOI2DD, HOI2Arma) there are no differences in the launcher at all, but there is full support for the Cyrillic alphabet. And that's why I can't understand how it works. Magic? So far I have successfully changed screens and launcher:p

Using HEX editor change the byte 00 at address 156CA9 (0x00156CA9) to byte 01 in the file AODGame.exe (1.12)
This will disable incorrect limitation for characters in the file unitnames.csv
 
Last edited:
  • 1Like
Reactions:
Using HEX editor change the byte 00 at address 156CA9 (0x00156CA9) to byte 01 in the file AODGame.exe (1.12)
This will disable incorrect limitation for characters in the file unitnames.csv
What?! You've got to be kidding, it can't be that simple! Now...
o_O штоооооо!!!! wat! But how? It works! Now I’ll have to search all over the forum and like your posts! But how did you understand that this is a line? How can this even be understood? I tried to reveal this for two years, and you just came and said it. Thank you!
 
  • 1
Reactions:
Game engine works with one-byte text. One-byte text files store numbers (codes, indexes) of symbol in codepage table
cp1251.gif
wcp1252.gif

0-32 - codes of operation
33-255 - codes of characters

Game engine fonts (gfx\fonts\) support character from 33 to 255.
For example,
  • current game language english, loading text file contains character code 255, using gfx\fonts\Eurostilecond10.bmp will be displaying - ÿ
  • current game language russain, loading text file contains character code 255, using gfx\fonts\kyr\Eurostilecond10.bmp will be displaying - я
And in version 1.07 everything worked fine. Then, for some reason, incorrect restrictions were introduced in the game engine source code for the code of characters that are loaded from unitnames.csv.
My edit of the exe file (address valid only for current 1.12) makes it so that any characters pass this check.
 
Last edited:
  • 1Like
Reactions:
Game engine works with one-byte text. One-byte text files store numbers (codes, indexes) of symbol in codepage table
SPOILER: CODEPAGES 1251
SPOILER: CODEPAGES 1252

0-32 - codes of operation
33-255 - codes of characters

Game engine fonts (gfx\fonts\) support character from 33 to 255.
For example,
  • current game language english, loading text file contains character code 255, using gfx\fonts\Eurostilecond10.bmp will be displaying - ÿ
  • current game language russain, loading text file contains character code 255, using gfx\fonts\kyr\Eurostilecond10.bmp will be displaying - я
And in version 1.07 everything worked fine. Then, for some reason, incorrect restrictions were introduced in the game engine source code for the code of characters that are loaded from unitnames.csv.
My edit of the exe file (address valid only for current 1.12) makes it so that any characters pass this check.
Moreover, in the Russian version they go to the gfx\fonts\kyr folder. Yes, I looked at all these tables. Yes, I saw that on Russian forums in 1.07 they did not know about this problem.
I just couldn’t understand: there are character tables (the complete Russian alphabet) and how the program processes them. And why certain characters did not pass the test. I understood correctly that if I roll back the game to 1.09 on Steam, this change will not work. The address will change
 
Last edited:
Moreover, in the Russian version they go to the gfx\fonts\kyr folder. Yes, I looked at all these tables. Yes, I saw that on Russian forums in 1.07 they did not know about this problem.
I just couldn’t understand: there are character tables (the complete Russian alphabet) and how the program processes them. And why certain characters did not pass the test. I understood correctly that if I roll back the game to 1.09 on Steam, this change will not work. The address will change
Yes, the address will change. For every version of exe file need disassembly them and find address of this incorrect restrictions for the code of characters


sub_42E450(v17, "db\\unitnames.csv");
LOBYTE(v28) = 3;
v23 = sub_42E6A0(v17);
for ( i = 0; i < v23; ++i )
{
sub_42E640(String1);
v4 = sub_4A6B60(String1);
sub_42E640(String1);
v26 = 0;
if ( !stricmp(String1, "BB") )
{
v26 = 21;
}
else if ( !stricmp(String1, "CV") )
{
v26 = 26;
}
else if ( !stricmp(String1, "CA") )
{
v26 = 23;
}
else if ( !stricmp(String1, "CL") )
{
v26 = 22;
}
else if ( !stricmp(String1, "BC") )
{
v26 = 24;
}
else if ( !stricmp(String1, "DD") )
{
v26 = 25;
}
else if ( !stricmp(String1, "Inf") )
{
v26 = 0;
}
else if ( !stricmp(String1, "Cav") )
{
v26 = 1;
}
else if ( !stricmp(String1, "Mot") )
{
v26 = 2;
}
else if ( !stricmp(String1, "Mec") )
{
v26 = 3;
}
else if ( !stricmp(String1, "L Arm") )
{
v26 = 4;
}
else if ( !stricmp(String1, off_6E2FD0) )
{
v26 = 5;
}
else if ( !stricmp(String1, off_6E2FCC) )
{
v26 = 6;
}
else if ( !stricmp(String1, off_6E2FD8) )
{
v26 = 7;
}
else if ( !stricmp(String1, off_6E2FD4) )
{
v26 = 8;
}
else if ( !stricmp(String1, off_6E2FE0) )
{
v26 = 9;
}
else if ( !stricmp(String1, "CAS") )
{
v26 = 17;
}
else if ( !stricmp(String1, "HQ") )
{
v26 = 10;
}
else if ( !stricmp(String1, "Int F") )
{
v26 = 13;
}
else if ( !stricmp(String1, "Fig") )
{
v26 = 12;
}
else if ( !stricmp(String1, "Esc F") )
{
v26 = 15;
}
else if ( !stricmp(String1, off_6E3040) )
{
v26 = 14;
}
else if ( !stricmp(String1, "Tac") )
{
v26 = 15;
}
else if ( !stricmp(String1, "Nav") )
{
v26 = 16;
}
else if ( !stricmp(String1, off_6E3044) )
{
v26 = 18;
}
else if ( !stricmp(String1, "SS") )
{
v26 = 28;
}
else if ( !stricmp(String1, "NS") )
{
v26 = 29;
}
else if ( !stricmp(String1, "TP") )
{
v26 = 30;
}
else if ( !stricmp(String1, "V1") )
{
v26 = 19;
}
else if ( !stricmp(String1, "V2") )
{
v26 = 20;
}
else if ( !stricmp(String1, "Mil") )
{
v26 = 11;
}
else
{
v26 = atoi(String1);
}
sub_42E640(String1);
v22 = String1;
v7 = &String1[1];
v22 += strlen(v22);
v6 = ++v22 - &String1[1];
v18 = v22 - &String1[1];
v5 = (void *)unknown_libname_15(v22 - &String1[1] + 1);
v20[0] = v5;
v19 = 0;
for ( j = 0; j < v18; ++j )
{
v25 = 0; //change this to v25 = 1;
v27 = String1[j];
if ( *(_BYTE *)(sub_433240(dword_2B6225C) + 1056) )
v25 = 1;
if ( !v25 )
{
if ( v27 < 97 || v27 > 122 )
{
if ( v27 < 65 || v27 > 90 )
{
if ( v27 < 48 || v27 > 57 )
{
v20[1] = (void *)(v27 + 111);
switch ( v27 )
{
case -111:
case -110:
case -102:
case -76:
case -60:
case -59:
case -56:
case -55:
case -43:
case -42:
case -40:
case -36:
case -33:
case -32:
case -31:
case -29:
case -28:
case -27:
case -26:
case -25:
case -24:
case -23:
case -21:
case -19:
case -15:
case -13:
case -11:
case -10:
case -8:
case -7:
case -6:
case -4:
case 32:
case 33:
case 39:
case 40:
case 41:
case 45:
case 46:
case 47:
case 96:
v25 = 1;
break;
default:
break;
}
}
else
{
v25 = 1;
}
}
else
{
v25 = 1;
}
}
else
{
v25 = 1;
}
}
//if pass this check then charecter will be displayed
if ( v25 )
*((_BYTE *)v20[0] + v19++) = v27;
}
 
Last edited:
  • 1Like
Reactions:
Yes, the address will change. For every version of exe file need disassembly them and find address of this incorrect restrictions for the code of characters
Now I understand. I have no idea how the executive file is assembled. I imagine that there are resources, there is something external - for example TurboPascal, C++, and it collects these resources in the exe. But why are some files, for example events or parameters, located separately, and something inside the exe (for example, a battle of ships at sea and distance - km (this km can only be changed through hex to km-км) or spies (1of1) or convoys (convoys to). But how to link the game engine here?
 
And your example with notepad++ in your regional version of Windows. Windows has "Language of Non Unicode Program" setting and for other language versions of Windows it will be slightly different.
I can't answer your questions since I just recently (for 1.13 release) was able to access the C++ code. UTF sure would have been nice.
 
  • 1Like
Reactions:
I didn't really like the screen of the armored vehicles - it's yellow.
The overlay colors are done in the USA Army's color for those certain branches (e.g. blue = infantry, yellow = armor, red = engineers, etc.).
Since the code already looks at the ..\gfx\skins directory for country specific graphics, I'm planning to have it look there for the any country specific technology backgrounds. So a SOV/RUS country could have T-34, T-44...T90t, etc. in it's armor screen.
Same for the bg_... launch screen. So I'm going to add a bit of code that looks at the ..\gfx directory for a language specific launch screen. So we currently have:
• Load_1024.bmp
• Load_1280.bmp
The logic is simple. If language is set to 7, in the settings.cfg file, then it will check to see if a Load_1024_7.bmp or Load_1280_7.bmp exists and if so use that as the launch screen.
 
  • 1Like
Reactions:
Sorry, I didn't know about the US Army floral designations! Fine. The idea is very good, different screens for different localizations! Wow, technology screens for every country! Sounds great!
 
The technical teams are finally readyo_O. It wasn't very easy. More difficult than government ministers. I think my horizons have expanded a little. There are controversial points. Compared to the original HOI2, there are twice as many technology groups!
 
Yes, a lot of new technologies, groups, and teams. I had a hard time translating any text that was an abbreviation. That's where people like you, native speakers, really help. Thanks!!
 
  • 1Like
Reactions:
Yes, a lot of new technologies, groups, and teams. I had a hard time translating any text that was an abbreviation. That's where people like you, native speakers, really help. Thanks!!
Honestly, I don’t think you have to do the translation :) In fact, it was an extremely difficult task - many US/UK organizations... How to put it correctly... If you translate them directly, then in Russian it’s just a bunch of words - I had to search through Wiki, log in through VPN and look for various information. But if the organizations of the USA and Great Britain are still known, then the Eastern European abbreviations are hard mode, and the Latin American and African ones are on the verge of the impossible, I didn’t find much. And in the end I came to the conclusion that the abveriations should be left as is. For example IBM. In Russia everyone is used to this. They don't write "Ай Би Эм" anywhere. This looks very ugly. Eastern European languages are a bit similar and I could understand what "VZ Zastava" means - it will be like that, only in Cyrillic letters "АЗ Застава". There is also a problem with Russian technical teams. As Tom Hanks said, dictatorships love long names and, as a result, the everlasting names “Red Banner and Powerful Machine-Building Plant Lenin #56” or the abbreviation of the KPPPP MMRM. Besides this, there is the following problem. These are aircraft carriers in 1.13. When I tried to translate of aircraft carrier technologies, I was faced with the fact that there are simply no Russian analogues, but there are none, because we do not have aircraft carriers, and these are technical terms. I can't understand the research steps, what they meanI tried to find a schematic diagram of an aircraft carrier, with captions and explanations, but I couldn’t find it.
 
Wow! one learns something everyday. I never knew. I'm curious, how do they describe USA's Super Carriers? I only know that the Kiev class ships were called Heavy Aviation Cruiser (Тяжелые авианесущие крейсера).
 
In Russian Wikipedia it’s not like that at all. The articles are very short. Apparently you need to look for special Soviet/Russian literature. But I'm sure I can find technical terms in Russian. Yes, the Soviet aircraft carrier is not exactly what was produced in the USA. It has a very small aircraft fleet and a very short deck with an imperfect catapult and strong missile armament. And all because for a long time the prevailing point of view was that an aircraft carrier is a “weapon of capitalists,” apparently the presence of missiles and submarines was very reassuring.