Leaderboard
Popular Content
Showing most liked content on 07/31/2025 in Posts
-
6 pointsHOLY MOLY!!! I made another breakthrough as I learn more about the tools with Ghidra, as well creating new script python for output (text files) What I recently used is known as RTTI, which stands for Run-Time Type Information. It helps recovering the class names, shows inheritance and virtual function tables (vtables), and making it possible to link function ack to the classes they belong to! For example, from Looks like I will be doing the same for each DLLs and will update the Modder Resource Library. This is another huge steps, which helps us big times!
-
5 pointsI have spent the week learning how to use Ghidrea, contemplating on how to find the right information, in order, to make sense out of what is shown as disassembled / decompiled functions and variables. WIth AI help, I am able to come up with an idea: 1) Find the class name that is called by associated functions 2) Find the function with associate strings for possible keywords As first step of building the modder resource library. In the link below, you will see vast number of folder with three types of .txt files: _CLASS_FUNCTION_LIST.txt _STRING_LIST - 1.txt _STRING_LIST - 2.txt And inside each folders, for example: FLIGHT -> AVIONICS 60, you will see the files: AVIONICS60_CLASS_FUNCTION_LIST.txt AVIONICS60_STRING_LIST - 1.txt AVIONICS60_STRING_LIST - 2.txt These files give modders a big head start by helping pinpoint the location of relevant functions, and that's the step one. For next steps, it is up to anyone here. I am here to provide what I can product from the ghidra tools. I will continue to update the resource library as I grow the understanding of Ghidra tools and codes shown in it. MODDER RESOURCE LIBRARY v1.1 SF2 -Resource Library v1.1.zip NOTE about v1.1: I have added two folders, you will see in each folders: REFERENCES RTTI References are the one that I used pyton script to extract the name of class called by functions, as well the strings from the functions. RTTI, in other hand, contains the list of class and the assoicated functions, along with the function names restored. However, please note that, there are two or three of DLL that does not have RTTI, I still ran the script to create the list of class with assoicated functions. Hoowever, I am working an interesting next projects: I just recently realized, after seeing how Ghidra symbolized the native C++ into C Pseudocodes and is working on Name Demangling (Converting C++ mangled symbols back to readable C++ codes). Here is an example: ?MyFunc@@YAHH@Z -> int MyFunc(int)) For now, here is notes that AI generated with me while studying various codes: (NOTE: the note below is incomplete. Will be updated eventualy.) CODES NAME DEMANGLING NOTES.txt Cheers!
-
4 pointsWelcome to the Strike Fighter 2 (SF2) Advanced Modding thread! A quick reminder: We mod ethically, honoring ThirdWire’s life passion in creating SF2. All projects here are strictly freeware, transparent, and require a legit copy of SF2 to use any modified DLL files. This thread also serve as the modder resource library that can assist us finding what we seek for advanced modding. Hello everyone! This thread is dedicated to advanced modding, focusing on DLL file editing using tools like Ghidra and other debugging/reverse engineering tools. We have the rules here: - All projects must remain freeware. Payware is a hard NO! - No links or discussion about pirated SF2, period! - We encourage everyone to share knowledge, collaborate, and keep the community spirit alive! We have the great desires to expand the engine beyond the current limitation, from custom HUDs to radar behaviors, etc... This post will be updated through time with more information. Let's have a happy modding!
-
2 pointsHello my friend! Excellent questions, and this is steps I am working on: 1) Finish working on compiling the text files with list of Class and function associated with them. 2) Analyze and make the list of already available codes for full reference of usage for each tyipes of .ini for cockpits and avionics related 3) Start experimenting modifying the DLL files and see if it works on SF2. I do not have the team. I hope, eventually someone will start the team. Eagle114th
-
2 pointsI sunk a Sampan! I made the stock vSampan2 to an groundobject. Gave it NVietnam as nation and it worked properly. More or less. The only small problem is, that the Sampan is moving sidewards on the sea.
-
2 pointsI have deleted all parked aircrafts and helicopters. Perhaps they were the reason for the slideshow experience, which i had on my old computer. I think it would be a good idea, if you would make some addons for DRV terrain with more detailed airfields. Let me first finish the terrain and then you may start with improvements. At the moment i rework the last target areas and check for mistakes, like Flak hidden in houses. And i'm still looking for the "potholes" in the heightfield and fill them up to terrain level. (Needs more time as expected.) Finally i will rework the DRV-movements.ini. And perhaps i get it working that the stock Sampans will act as moving ships on shipping routes. Maybe. I hope that i can finish my work on DRV 2.0 terrain in the third week of August.
-
2 pointsSome days ago Wrench send me the files for Udorn RTAFB. I had to simplify it a little bit, because my old computer had the tendency to make a slide show, when i tried a final landing approach. But now it works as it should. And i hope the differences to the original is not to big. It is a very big base. In the background you see the old Udorn RTAB, which was simply a stock airfield. The differences are enormous.
-
1 pointusing the layout of the original, plus some old maps I found, and not a little guesswork, and Gepard's skills , I think it came out pretty damn good. I have to send you the static EC-121 (camo) and the target ini's locations for their parking spots. If I may make a suggestion, include an alternative _targets.ini, with the full set of items, for those with higher end machines.
-
1 pointTo say it with the words from the movie "Good Morning Vietnam!" Da Da Da Nang!!
-
1 pointwellll sheeeeeet boys, that stadiums gonna be tougher to crack that the Steelers D.........
-
1 pointHello everyone! I’ve been grinding for hours to make sense of these massive codebases, and I have an idea! I’m building a huge resource library with lists of class references and the functions handling strings. These will help us zero in on specific functions in Ghidra. Check out the examples: Avionics 60 Class List Avionics String List I’m working through each DLL, generating text files for all of them. It will take some time, but once done, I’ll start a new thread called "Advanced Modding" with the resource library. Eagle114th
-
1 point
-
1 point
-
1 pointDawn breaks, the sun glistens off an inbound F-105 streaking across North Vietnam....
-
1 pointHello everyone! I have put togehter chains of the classes and functions from Avionics70.DLL. It have taken me a while to dig through the DLL file. WHew! ============================================================================ ------------------------------- FUN_10013f90 ------------------------------- ============================================================================ undefined4 * __thiscall FUN_10013f90(void *this,void *param_1,wchar_t *param_2) { FUN_10013940(this,param_1,param_2); *(undefined ***)this = RadarTargetRangeTextClass::vftable; return (undefined4 *)this; } ============================================================================ ------------------------------- FUN_1001d750 ------------------------------- ============================================================================ undefined4 * __thiscall FUN_10013940(void *this,void *param_1,wchar_t *param_2) { undefined4 uVar1; wchar_t *pwVar2; uint uVar3; int iVar4; float10 fVar5; wchar_t local_21c [260]; void *local_14; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003ea16; local_10 = ExceptionList; ExceptionList = &local_10; local_14 = this; FUN_100135f0(this,param_1,param_2); local_8 = 0; *(undefined ***)this = RadarTextClass::vftable; FUN_100204d0(param_1,param_2,L"Text",L"",(wchar_t *)((int)this + 0x18),0x40,0); FUN_10023470((uint *)((int)this + 0x98),param_1,param_2); local_8 = 1; *(undefined ***)this = RadarTargetTextClass::vftable; *(undefined4 *)((int)this + 0x1a4) = 0; pwVar2 = FUN_100208c0(param_1,param_2,L"TextFormat",0); *(wchar_t **)((int)this + 0x1a4) = pwVar2; FUN_100204d0(param_1,param_2,L"NoTargetText",L"",(wchar_t *)((int)this + 0xa4),0x40,0); FUN_100204d0(param_1,param_2,L"DisplayUnit",L"",local_21c,0x104,0); fVar5 = FUN_10021aa0(local_21c); *(float *)((int)this + 0x9c) = (float)((float10)1 / fVar5); *(undefined4 *)((int)this + 0xa0) = 0x3f800000; uVar3 = FUN_10020590(param_1,param_2,L"ShowOnlyTens",0); if (uVar3 == 0) { uVar3 = FUN_10020590(param_1,param_2,L"ShowOnlyHundreds",0); if (uVar3 == 0) { uVar3 = FUN_10020590(param_1,param_2,L"ShowOnlyThousands",0); if (uVar3 == 0) goto LAB_10013a9e; *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x400000; uVar1 = 0x3a83126f; } else { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x200000; uVar1 = 0x3c23d70a; } } else { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x100000; uVar1 = 0x3dcccccd; } *(undefined4 *)((int)this + 0xa0) = uVar1; LAB_10013a9e: iVar4 = FUN_1001ed70(param_1,param_2,L"ThousandsSeparator"); if (iVar4 != 0) { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x800000; FUN_100204d0(param_1,param_2,L"ThousandsSeparator",L"",(wchar_t *)((int)this + 0x124),0x40,0); } ExceptionList = local_10; return (undefined4 *)this; } ---------------------------------------------------------------------------- ------------------------------- FUN_100135f0 ------------------------------- ---------------------------------------------------------------------------- undefined4 * __thiscall FUN_100135f0(void *this,void *param_1,wchar_t *param_2) { float *pfVar1; uint uVar2; float local_c [2]; *(undefined ***)this = RadarElementClass::vftable; *(undefined4 *)((int)this + 4) = 0; pfVar1 = FUN_10021520(local_c,param_1,param_2,L"Position"); *(float *)((int)this + 8) = *pfVar1; *(float *)((int)this + 0xc) = pfVar1[1]; *(float *)((int)this + 0x10) = *pfVar1; *(float *)((int)this + 0x14) = pfVar1[1]; uVar2 = FUN_10020590(param_1,param_2,L"XOffsetTarget",0); if (uVar2 == 0) { uVar2 = FUN_10020590(param_1,param_2,L"XOffsetAzimuth",0); if (uVar2 != 0) { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 2; } } else { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 1; } uVar2 = FUN_10020590(param_1,param_2,L"YOffsetTarget",0); if (uVar2 != 0) { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x10; return (undefined4 *)this; } uVar2 = FUN_10020590(param_1,param_2,L"YOffsetRange",0); if (uVar2 != 0) { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x20; return (undefined4 *)this; } uVar2 = FUN_10020590(param_1,param_2,L"YOffsetElevation",0); if (uVar2 != 0) { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x40; } return (undefined4 *)this; } ---------------------------------------------------------------------------- ------------------------------- FUN_10021520 ------------------------------- ---------------------------------------------------------------------------- float * __cdecl FUN_10021520(float *param_1,void *param_2,wchar_t *param_3,wchar_t *param_4) { wchar_t *pwVar1; float10 fVar2; wchar_t local_20c [260]; *param_1 = 0.0; param_1[1] = 0.0; FUN_100204d0(param_2,param_3,param_4,L"",local_20c,0x104,0); pwVar1 = _wcschr(local_20c,L','); if (pwVar1 != (wchar_t *)0x0) { *pwVar1 = L'\0'; fVar2 = (float10)FUN_1002bef0(local_20c,(int *)0x0); *param_1 = (float)fVar2; fVar2 = (float10)FUN_1002bef0(pwVar1 + 1,(int *)0x0); param_1[1] = (float)fVar2; } return param_1; } ---------------------------------------------------------------------------- ------------------------------- FUN_10020590 ------------------------------- ---------------------------------------------------------------------------- uint __thiscall FUN_10020590(void *this,wchar_t *param_1,wchar_t *param_2,uint param_3) { bool bVar1; int iVar2; int iVar3; undefined3 extraout_var; undefined3 extraout_var_00; wchar_t *pwVar4; wchar_t local_20c [260]; iVar2 = FUN_10020740((void *)((int)this + 0x208),param_1); if (iVar2 != 0) { iVar2 = *(int *)(*(int *)((int)this + 0x208) + 8); iVar3 = FUN_10020740((void *)(iVar2 + 4),param_2); if (iVar3 != 0) { iVar2 = *(int *)(*(int *)(iVar2 + 4) + 8); goto LAB_100205d4; } } iVar2 = 0; LAB_100205d4: if (iVar2 != 0) { *(undefined4 *)(iVar2 + 4) = 0; FUN_1001e680(local_20c,*(wchar_t **)(iVar2 + 8),0x104); bVar1 = FUN_1001e560(local_20c,*(wchar_t **)((int)this + 0x238),0); if (CONCAT31(extraout_var,bVar1) != 0) { return 1; } bVar1 = FUN_1001e560(local_20c,*(wchar_t **)((int)this + 0x23c),0); if (CONCAT31(extraout_var_00,bVar1) != 0) { return 0; } *(undefined4 *)(iVar2 + 4) = 1; param_3 = (uint)(*(int *)(iVar2 + 0xc) != 0); } if (*(int *)((int)this + 0x22c) != 0) { if (param_3 == 0) { pwVar4 = *(wchar_t **)((int)this + 0x23c); } else { pwVar4 = *(wchar_t **)((int)this + 0x238); } FUN_1001ff80(this,param_1,param_2,pwVar4); } return param_3; } ---------------------------------------------------------------------------- ------------------------------- FUN_10020740 ------------------------------- ---------------------------------------------------------------------------- undefined4 __thiscall FUN_10020740(void *this,wchar_t *param_1) { int iVar1; bool bVar2; int iVar3; undefined3 extraout_var; undefined3 extraout_var_00; if ((0 < *(int *)((int)this + 0xc)) && (iVar3 = FUN_1001e490(param_1), iVar3 == 0)) { /* WARNING: Load size is inaccurate */ if (*this == 0) { *(undefined4 *)this = *(undefined4 *)((int)this + 4); *(undefined4 *)((int)this + 0x10) = 0; } /* WARNING: Load size is inaccurate */ iVar1 = *this; iVar3 = *(int *)((int)this + 0x10); while (iVar1 != 0) { /* WARNING: Load size is inaccurate */ if ((*(undefined4 **)(*this + 8) != (undefined4 *)0x0) && (bVar2 = FUN_1001e560((wchar_t *)**(undefined4 **)(*this + 8),param_1,0), CONCAT31(extraout_var,bVar2) != 0)) { return 1; } /* WARNING: Load size is inaccurate */ *(int *)((int)this + 0x10) = *(int *)((int)this + 0x10) + 1; iVar1 = **this; *(int *)this = iVar1; } *(undefined4 *)((int)this + 0x10) = 0; *(undefined4 *)this = *(undefined4 *)((int)this + 4); if (0 < iVar3) { do { /* WARNING: Load size is inaccurate */ if ((*(undefined4 **)(*this + 8) != (undefined4 *)0x0) && (bVar2 = FUN_1001e560((wchar_t *)**(undefined4 **)(*this + 8),param_1,0), CONCAT31(extraout_var_00,bVar2) != 0)) { return 1; } /* WARNING: Load size is inaccurate */ *(int *)((int)this + 0x10) = *(int *)((int)this + 0x10) + 1; *(undefined4 *)this = **this; } while (*(int *)((int)this + 0x10) < iVar3); } *(undefined4 *)this = 0; *(undefined4 *)((int)this + 0x10) = 0xffffffff; } return 0; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e490 ------------------------------- ---------------------------------------------------------------------------- undefined4 __cdecl FUN_1001e490(short *param_1) { if ((param_1 != (short *)0x0) && (*param_1 != 0)) { return 0; } return 1; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e560 ------------------------------- ---------------------------------------------------------------------------- bool __cdecl FUN_1001e560(wchar_t *param_1,wchar_t *param_2,int param_3) { wchar_t wVar1; bool bVar2; int iVar3; bool bVar4; if ((param_1 == (wchar_t *)0x0) || (*param_1 == L'\0')) { bVar4 = true; } else { bVar4 = false; } if ((param_2 == (wchar_t *)0x0) || (*param_2 == L'\0')) { bVar2 = true; } else { bVar2 = false; } if (bVar4) { if (bVar2) { return true; } } else if (!bVar2) { if (param_3 == 0) { iVar3 = __wcsicmp(param_1,param_2); return (bool)('\x01' - (iVar3 != 0)); } while( true ) { wVar1 = *param_1; bVar4 = (ushort)wVar1 < (ushort)*param_2; if (wVar1 != *param_2) break; if (wVar1 == L'\0') { return true; } wVar1 = param_1[1]; bVar4 = (ushort)wVar1 < (ushort)param_2[1]; if (wVar1 != param_2[1]) break; param_1 = param_1 + 2; param_2 = param_2 + 2; if (wVar1 == L'\0') { return true; } } return 1 - bVar4 == (uint)(bVar4 != 0); } return false; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e680 ------------------------------- ---------------------------------------------------------------------------- wchar_t * __cdecl FUN_1001e680(wchar_t *param_1,wchar_t *param_2,rsize_t param_3) { if (param_1 != (wchar_t *)0x0) { if ((param_2 != (wchar_t *)0x0) && (*param_2 != L'\0')) { _wcsncpy_s(param_1,param_3,param_2,0xffffffff); param_1[param_3 - 1] = L'\0'; return param_1; } *param_1 = L'\0'; } return param_1; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001ff80 ------------------------------- ---------------------------------------------------------------------------- undefined4 __thiscall FUN_1001ff80(void *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3) { int iVar1; int iVar2; wint_t *pwVar3; void *this_00; undefined4 *puVar4; undefined4 uVar5; wchar_t *local_14; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003ee1d; local_10 = ExceptionList; local_14 = *(wchar_t **)((int)this + 0x234); ExceptionList = &local_10; iVar1 = FUN_1001e490(param_3); if (iVar1 == 0) { iVar1 = FUN_10025810((void *)((int)this + 0x21c),param_3); if (iVar1 == 0) goto LAB_100200a9; local_14 = (wchar_t *)FUN_10025790((int)this + 0x21c); } iVar1 = FUN_10020740((void *)((int)this + 0x208),param_1); if (iVar1 != 0) { iVar1 = *(int *)(*(int *)((int)this + 0x208) + 8); iVar2 = FUN_10020740((void *)(iVar1 + 4),param_2); if ((iVar2 != 0) && (iVar1 = *(int *)(*(int *)(iVar1 + 4) + 8), iVar1 != 0)) { *(undefined4 *)(iVar1 + 4) = 0; *(wchar_t **)(iVar1 + 8) = local_14; ExceptionList = local_10; return 1; } } iVar1 = FUN_10025810((void *)((int)this + 0x21c),param_2); if (iVar1 != 0) { pwVar3 = (wint_t *)FUN_10025790((int)this + 0x21c); this_00 = (void *)FUN_1001ddc0(0x14); local_8 = 0; if (this_00 == (void *)0x0) { puVar4 = (undefined4 *)0x0; } else { puVar4 = FUN_1001e9a0(this_00,pwVar3,local_14); } local_8 = 0xffffffff; uVar5 = FUN_1001f5f0(this,param_1,puVar4); ExceptionList = local_10; return uVar5; } LAB_100200a9: FUN_1001df00(); ExceptionList = local_10; return 0; } ---------------------------------------------------------------------------- ------------------------------- FUN_10025810 ------------------------------- ---------------------------------------------------------------------------- undefined4 __thiscall FUN_10025810(void *this,wchar_t *param_1) { rsize_t _SizeInWords; wchar_t wVar1; wchar_t *pwVar2; pwVar2 = param_1; do { wVar1 = *pwVar2; pwVar2 = pwVar2 + 1; } while (wVar1 != L'\0'); _SizeInWords = ((int)pwVar2 - (int)(param_1 + 1) >> 1) + 1; pwVar2 = *(wchar_t **)((int)this + 4); /* WARNING: Load size is inaccurate */ if ((int)(((int)pwVar2 - *this >> 1) + _SizeInWords) <= *(int *)((int)this + 0xc)) { *(wchar_t **)((int)this + 8) = pwVar2; _wcscpy_s(pwVar2,_SizeInWords,param_1); *(int *)((int)this + 4) = *(int *)((int)this + 4) + _SizeInWords * 2; return 1; } return 0; } ---------------------------------------------------------------------------- ------------------------------- FUN_10025790 ------------------------------- ---------------------------------------------------------------------------- undefined4 __fastcall FUN_10025790(int param_1) { return *(undefined4 *)(param_1 + 8); } ---------------------------------------------------------------------------- ------------------------------- FUN_1001ddc0 ------------------------------- ---------------------------------------------------------------------------- void __cdecl FUN_1001ddc0(size_t param_1) { if (DAT_1005b548 != (undefined4 *)0x0) { (**(code **)*DAT_1005b548)(param_1,0,0,DAT_1005b524); return; } _malloc(param_1); return; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e9a0 ------------------------------- ---------------------------------------------------------------------------- undefined4 * __thiscall FUN_1001e9a0(void *this,wint_t *param_1,wchar_t *param_2) { int iVar1; long lVar2; float10 fVar3; *(wint_t **)this = param_1; *(undefined4 *)((int)this + 4) = 0; FUN_1001e8f0(param_1); iVar1 = FUN_1001e490(param_2); if (iVar1 == 0) { *(wchar_t **)((int)this + 8) = param_2; lVar2 = __wtol(param_2); *(long *)((int)this + 0xc) = lVar2; fVar3 = (float10)FUN_1002bef0(param_2,(int *)0x0); *(float *)((int)this + 0x10) = (float)fVar3; FUN_1001e8f0(*(wint_t **)((int)this + 8)); return (undefined4 *)this; } *(undefined4 *)((int)this + 0x10) = 0; *(undefined4 *)((int)this + 8) = 0; *(undefined4 *)((int)this + 0xc) = 0; return (undefined4 *)this; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e8f0 ------------------------------- ---------------------------------------------------------------------------- wint_t * __cdecl FUN_1001e8f0(wint_t *param_1) { if ((param_1 != (wint_t *)0x0) && (*param_1 != 0)) { FUN_1001e820(param_1); FUN_1001e890(param_1); } return param_1; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e820 ------------------------------- ---------------------------------------------------------------------------- wint_t * __cdecl FUN_1001e820(wint_t *param_1) { wint_t wVar1; int iVar2; wint_t *pwVar3; _locale_t unaff_ESI; wint_t *pwVar4; if ((param_1 == (wint_t *)0x0) || (pwVar4 = param_1, *param_1 == 0)) { return param_1; } do { iVar2 = FID_conflict:__iswspace_l(*pwVar4,unaff_ESI); if (iVar2 == 0) break; pwVar4 = pwVar4 + 1; } while (*pwVar4 != 0); if (pwVar4 != param_1) { pwVar3 = param_1; do { wVar1 = *pwVar3; pwVar3 = pwVar3 + 1; } while (wVar1 != 0); iVar2 = (((int)pwVar3 - (int)(param_1 + 1) >> 1) - ((int)pwVar4 - (int)param_1 >> 1)) + 1; pwVar3 = param_1; if (0 < iVar2) { do { *pwVar3 = *(wint_t *)(((int)pwVar4 - (int)param_1) + (int)pwVar3); pwVar3 = pwVar3 + 1; iVar2 = iVar2 + -1; } while (iVar2 != 0); } } return param_1; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e890 ------------------------------- ---------------------------------------------------------------------------- wint_t * __cdecl FUN_1001e890(wint_t *param_1) { int iVar1; wint_t *pwVar2; _locale_t unaff_ESI; wint_t *pwVar3; if ((param_1 != (wint_t *)0x0) && (*param_1 != 0)) { pwVar2 = (wint_t *)0x0; pwVar3 = param_1; if (*param_1 != 0) { do { iVar1 = FID_conflict:__iswspace_l(*pwVar3,unaff_ESI); if (iVar1 == 0) { pwVar2 = pwVar3; } pwVar3 = pwVar3 + 1; } while (*pwVar3 != 0); if (pwVar2 != (wint_t *)0x0) { pwVar2[1] = 0; return param_1; } } *param_1 = 0; } return param_1; } ---------------------------------------------------------------------------- ------------------------------- FUN_1002bef0 ------------------------------- ---------------------------------------------------------------------------- void __cdecl FUN_1002bef0(wchar_t *param_1,int *param_2) { FUN_1002bde8(param_1,param_2,(localeinfo_struct *)0x0); return; } ---------------------------------------------------------------------------- ------------------------------- FUN_1002bde8 ------------------------------- ---------------------------------------------------------------------------- /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void __cdecl FUN_1002bde8(wchar_t *param_1,int *param_2,localeinfo_struct *param_3) { wchar_t _C; uint uVar1; int *piVar2; int iVar3; FLT p_Var4; wchar_t *_Str; localeinfo_struct local_38; int local_30; char local_2c; double local_28; _flt local_20; uint local_8; local_8 = DAT_10057e04 ^ (uint)&stack0xfffffffc; _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)&local_38,param_3); if (param_2 != (int *)0x0) { *param_2 = (int)param_1; } if (param_1 == (wchar_t *)0x0) { piVar2 = __errno(); *piVar2 = 0x16; FUN_1002fef0(); if (local_2c != '\0') { *(uint *)(local_30 + 0x70) = *(uint *)(local_30 + 0x70) & 0xfffffffd; } goto LAB_1002bee1; } _C = *param_1; _Str = param_1; while (iVar3 = _iswctype(_C,8), iVar3 != 0) { _Str = _Str + 1; _C = *_Str; } p_Var4 = __wfltin2(&local_20,_Str,&local_38); if (param_2 != (int *)0x0) { *param_2 = (int)(_Str + p_Var4->nbytes); } uVar1 = p_Var4->flags; if ((uVar1 & 0x240) == 0) { if ((uVar1 & 0x81) == 0) { if (((uVar1 & 0x100) == 0) || (local_28 = 0.0, NAN(p_Var4->dval) == (p_Var4->dval == 0.0))) { local_28 = p_Var4->dval; goto LAB_1002bed1; } } else { local_28 = _DAT_100585d0; if (*_Str == L'-') { local_28 = -_DAT_100585d0; } } piVar2 = __errno(); *piVar2 = 0x22; } else { local_28 = 0.0; if (param_2 != (int *)0x0) { *param_2 = (int)param_1; } } LAB_1002bed1: if (local_2c != '\0') { *(uint *)(local_30 + 0x70) = *(uint *)(local_30 + 0x70) & 0xfffffffd; } LAB_1002bee1: @__security_check_cookie@4(local_8 ^ (uint)&stack0xfffffffc); return; } ---------------------------------------------------------------------------- ------------------------------- FUN_1002fef0 ------------------------------- ---------------------------------------------------------------------------- void FUN_1002fef0(void) { __invalid_parameter((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0); return; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001f5f0 ------------------------------- ---------------------------------------------------------------------------- undefined4 __thiscall FUN_1001f5f0(void *this,wchar_t *param_1,undefined4 *param_2) { int *this_00; int iVar1; undefined4 uVar2; void *this_01; undefined4 *puVar3; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003ed6a; local_10 = ExceptionList; if (param_2 != (undefined4 *)0x0) { this_00 = (int *)((int)this + 0x208); ExceptionList = &local_10; iVar1 = FUN_10020740(this_00,param_1); if (iVar1 == 0) { iVar1 = FUN_10025810((void *)((int)this + 0x21c),param_1); if (iVar1 == 0) { FUN_1001df00(); ExceptionList = local_10; return 0; } uVar2 = FUN_10025790((int)this + 0x21c); this_01 = (void *)FUN_1001ddc0(0x18); local_8 = 0; if (this_01 == (void *)0x0) { puVar3 = (undefined4 *)0x0; } else { puVar3 = FUN_1001f4f0(this_01,uVar2); } local_8 = 0xffffffff; iVar1 = FUN_10020860(this_00,puVar3); if (iVar1 == 0) { FUN_1001df00(); if (puVar3 == (undefined4 *)0x0) { ExceptionList = local_10; return 0; } FUN_1001f550(puVar3); FUN_1001de20(puVar3); } } else { puVar3 = *(undefined4 **)(*this_00 + 8); } if (puVar3 != (undefined4 *)0x0) { iVar1 = FUN_10020740(puVar3 + 1,(wchar_t *)*param_2); if (iVar1 == 0) { FUN_10020860(puVar3 + 1,param_2); } ExceptionList = local_10; return 1; } } ExceptionList = local_10; return 0; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001f4f0 ------------------------------- ---------------------------------------------------------------------------- undefined4 * __thiscall FUN_1001f4f0(void *this,undefined4 param_1) { void *local_10; undefined *puStack_c; undefined4 local_8; puStack_c = &LAB_1003ed40; local_10 = ExceptionList; ExceptionList = &local_10; *(int *)((int)this + 4) = 0; *(undefined4 *)((int)this + 8) = 0; *(undefined4 *)((int)this + 0xc) = 0; *(undefined4 *)((int)this + 0x10) = 0; *(undefined4 *)((int)this + 0x14) = 0xffffffff; local_8 = 0; *(undefined4 *)this = param_1; FUN_10018c50((int *)((int)this + 4)); ExceptionList = local_10; return (undefined4 *)this; } ---------------------------------------------------------------------------- ------------------------------- FUN_10018c50 ------------------------------- ---------------------------------------------------------------------------- void __fastcall FUN_10018c50(int *param_1) { int *piVar1; int *piVar2; int iVar3; *param_1 = param_1[1]; if (param_1[1] == 0) { param_1[4] = -1; return; } do { piVar1 = (int *)*param_1; if (piVar1 == (int *)param_1[1]) { param_1[1] = *piVar1; } else { *(int *)piVar1[1] = *piVar1; } piVar2 = (int *)*param_1; if (piVar2 == (int *)param_1[2]) { iVar3 = piVar2[1]; param_1[4] = param_1[4] + -1; param_1[2] = iVar3; } else { *(int *)(*piVar2 + 4) = piVar2[1]; iVar3 = *(int *)*param_1; } *param_1 = iVar3; if (piVar1 != (int *)0x0) { FUN_1001de20(piVar1); param_1[3] = param_1[3] + -1; } } while (*param_1 != 0); param_1[4] = -1; return; } ---------------------------------------------------------------------------- ------------------------------- FUN_10020860 ------------------------------- ---------------------------------------------------------------------------- undefined4 __thiscall FUN_10020860(void *this,undefined4 param_1) { undefined4 *puVar1; puVar1 = (undefined4 *)FUN_1001ddc0(0xc); if (puVar1 != (undefined4 *)0x0) { *puVar1 = 0; puVar1[1] = 0; puVar1[2] = param_1; *(int *)((int)this + 0xc) = *(int *)((int)this + 0xc) + 1; if (*(int *)((int)this + 4) == 0) { *(undefined4 **)((int)this + 4) = puVar1; } else { **(undefined4 **)((int)this + 8) = puVar1; puVar1[1] = *(undefined4 *)((int)this + 8); } *(undefined4 **)((int)this + 8) = puVar1; *(undefined4 **)this = puVar1; *(int *)((int)this + 0x10) = *(int *)((int)this + 0xc) + -1; return 1; } return 0; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001f550 ------------------------------- ---------------------------------------------------------------------------- void __fastcall FUN_1001f550(undefined4 *param_1) { undefined4 uVar1; int iVar2; void *local_10; undefined *puStack_c; undefined4 local_8; local_10 = ExceptionList; puStack_c = &LAB_1003ed55; ExceptionList = &local_10; param_1[1] = param_1[2]; param_1[5] = (param_1[2] != 0) - 1; iVar2 = param_1[1]; local_8 = 0; while (iVar2 != 0) { if (*(int *)(param_1[1] + 8) != 0) { FUN_1001de20(*(int *)(param_1[1] + 8)); } if ((undefined4 *)param_1[1] != (undefined4 *)0x0) { uVar1 = *(undefined4 *)param_1[1]; param_1[5] = param_1[5] + 1; param_1[1] = uVar1; } iVar2 = param_1[1]; } FUN_10018c50(param_1 + 1); *param_1 = 0; local_8 = 0xffffffff; FUN_10018c50(param_1 + 1); ExceptionList = local_10; return; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001de20 ------------------------------- ---------------------------------------------------------------------------- void __cdecl FUN_1001de20(undefined4 param_1) { if (DAT_1005b548 != (int *)0x0) { (**(code **)(*DAT_1005b548 + 4))(param_1); } return; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001df00 ------------------------------- ---------------------------------------------------------------------------- void FUN_1001df00(void) { return; } ---------------------------------------------------------------------------- ------------------------------- FUN_100204d0 ------------------------------- ---------------------------------------------------------------------------- void __thiscall FUN_100204d0(void *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,wchar_t *param_4, rsize_t param_5,int param_6) { int iVar1; int iVar2; iVar1 = FUN_10020740((void *)((int)this + 0x208),param_1); if (iVar1 != 0) { iVar1 = *(int *)(*(int *)((int)this + 0x208) + 8); iVar2 = FUN_10020740((void *)(iVar1 + 4),param_2); if (iVar2 != 0) { iVar1 = *(int *)(*(int *)(iVar1 + 4) + 8); goto LAB_1002050e; } } iVar1 = 0; LAB_1002050e: if (param_4 != (wchar_t *)0x0) { if (iVar1 == 0) { if (*(int *)((int)this + 0x22c) != 0) { FUN_1001ff80(this,param_1,param_2,param_3); } FUN_1001e680(param_4,param_3,param_5); } else { *(undefined4 *)(iVar1 + 4) = 0; FUN_1001e680(param_4,*(wchar_t **)(iVar1 + 8),param_5); if (param_6 == 1) { FUN_1001e750((wint_t *)param_4); return; } if (param_6 == 2) { FUN_1001e7c0((wint_t *)param_4); return; } } } return; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e750 ------------------------------- ---------------------------------------------------------------------------- wint_t * __cdecl FUN_1001e750(wint_t *param_1) { byte bVar1; wint_t wVar2; int iVar3; _locale_t unaff_ESI; wint_t *pwVar4; if ((param_1 != (wint_t *)0x0) && (pwVar4 = param_1, *param_1 != 0)) { do { iVar3 = FID_conflict:_iswlower(*pwVar4,unaff_ESI); if (iVar3 == 0) { bVar1 = *(byte *)pwVar4; if (((0xdf < bVar1) && (bVar1 < 0xf7)) || ((0xf7 < bVar1 && (bVar1 < 0xfe)))) { *pwVar4 = *pwVar4 - 0x20; } } else { wVar2 = _towupper(*pwVar4); *pwVar4 = wVar2; } pwVar4 = pwVar4 + 1; } while (*pwVar4 != 0); return param_1; } return param_1; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e7c0 ------------------------------- ---------------------------------------------------------------------------- wint_t * __cdecl FUN_1001e7c0(wint_t *param_1) { byte bVar1; wint_t wVar2; int iVar3; wint_t *pwVar4; if ((param_1 != (wint_t *)0x0) && (pwVar4 = param_1, *param_1 != 0)) { do { iVar3 = FID_conflict:__iswupper_l(*pwVar4); if (iVar3 == 0) { bVar1 = *(byte *)pwVar4; if (((0xbf < bVar1) && (bVar1 < 0xd7)) || ((0xd7 < bVar1 && (bVar1 < 0xde)))) { *pwVar4 = *pwVar4 + 0x20; } } else { wVar2 = _towlower(*pwVar4); *pwVar4 = wVar2; } pwVar4 = pwVar4 + 1; } while (*pwVar4 != 0); return param_1; } return param_1; } ---------------------------------------------------------------------------- ------------------------------- FUN_10023470 ------------------------------- ---------------------------------------------------------------------------- undefined4 __cdecl FUN_10023470(uint *param_1,void *param_2,wchar_t *param_3) { bool bVar1; int iVar2; undefined3 extraout_var; uint uVar3; undefined3 extraout_var_00; undefined3 extraout_var_01; undefined3 extraout_var_02; wchar_t local_20c [260]; *param_1 = 0; FUN_100204d0(param_2,param_3,L"HorizontalAlignment",L"",local_20c,0x104,0); iVar2 = FUN_1001e490(local_20c); if (iVar2 == 0) { bVar1 = FUN_1001e560(local_20c,L"CENTER",0); if (CONCAT31(extraout_var,bVar1) == 0) { bVar1 = FUN_1001e560(local_20c,L"RIGHT",0); uVar3 = 4; if (CONCAT31(extraout_var_00,bVar1) == 0) goto LAB_100234fd; } else { uVar3 = 1; } } else { LAB_100234fd: uVar3 = 2; } *param_1 = *param_1 | uVar3; FUN_100204d0(param_2,param_3,L"VerticalAlignment",L"",local_20c,0x104,0); iVar2 = FUN_1001e490(local_20c); if (iVar2 == 0) { bVar1 = FUN_1001e560(local_20c,L"CENTER",0); if (CONCAT31(extraout_var_01,bVar1) != 0) { *param_1 = *param_1 | 0x10; return 1; } bVar1 = FUN_1001e560(local_20c,L"BOTTOM",0); uVar3 = 0x40; if (CONCAT31(extraout_var_02,bVar1) != 0) goto LAB_10023587; } uVar3 = 0x20; LAB_10023587: *param_1 = *param_1 | uVar3; return 1; } ---------------------------------------------------------------------------- ------------------------------- FUN_100208c0 ------------------------------- ---------------------------------------------------------------------------- wchar_t * __cdecl FUN_100208c0(void *param_1,wchar_t *param_2,wchar_t *param_3,int param_4) { int iVar1; wchar_t *pwVar2; wchar_t local_20c [260]; FUN_100204d0(param_1,param_2,param_3,L"",local_20c,0x104,0); iVar1 = FUN_1001e490(local_20c); if (iVar1 != 0) { return (wchar_t *)0x0; } if (param_4 == 1) { FUN_1001e750((wint_t *)local_20c); pwVar2 = FUN_1001e4d0(local_20c); return pwVar2; } if (param_4 == 2) { FUN_1001e7c0((wint_t *)local_20c); } pwVar2 = FUN_1001e4d0(local_20c); return pwVar2; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001e4d0 ------------------------------- ---------------------------------------------------------------------------- wchar_t * __cdecl FUN_1001e4d0(wchar_t *param_1) { rsize_t _SizeInWords; wchar_t wVar1; wchar_t *pwVar2; pwVar2 = (wchar_t *)0x0; if (param_1 != (wchar_t *)0x0) { if (*param_1 == L'\0') { pwVar2 = (wchar_t *)FUN_1001dcd0(2); if (pwVar2 != (wchar_t *)0x0) { *pwVar2 = L'\0'; return pwVar2; } } else { pwVar2 = param_1; do { wVar1 = *pwVar2; pwVar2 = pwVar2 + 1; } while (wVar1 != L'\0'); _SizeInWords = ((int)pwVar2 - (int)(param_1 + 1) >> 1) + 1; if (pwVar2 != (wchar_t *)0x0) { _wcscpy_s(pwVar2,_SizeInWords,param_1); } } } return pwVar2; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001dcd0 ------------------------------- ---------------------------------------------------------------------------- void __cdecl FUN_1001dcd0(undefined4 param_1) { (**(code **)*DAT_1005b548)(param_1,0,0,DAT_1005b524); return; } ---------------------------------------------------------------------------- ------------------------------- FUN_10021aa0 ------------------------------- ---------------------------------------------------------------------------- float10 __cdecl FUN_10021aa0(wchar_t *param_1) { bool bVar1; int iVar2; undefined3 extraout_var; wchar_t *pwVar3; float *pfVar4; float10 fVar5; iVar2 = FUN_1001e490(param_1); if (iVar2 == 0) { pfVar4 = (float *)&DAT_100579a0; iVar2 = FUN_1001e490(u_FEET_100579a4); if (iVar2 == 0) { pwVar3 = u_FEET_100579a4; do { bVar1 = FUN_1001e560(pwVar3,param_1,0); if (CONCAT31(extraout_var,bVar1) != 0) { return (float10)*pfVar4; } pwVar3 = pwVar3 + 10; pfVar4 = pfVar4 + 5; iVar2 = FUN_1001e490(pwVar3); } while (iVar2 == 0); } fVar5 = (float10)FUN_1002bef0(param_1,(int *)0x0); fVar5 = (float10)(float)fVar5; if ((NAN((float10)0) || NAN(fVar5)) == ((float10)0 == fVar5)) { return fVar5; } } return (float10)1; } ---------------------------------------------------------------------------- ------------------------------- FUN_10020590 ------------------------------- ---------------------------------------------------------------------------- uint __thiscall FUN_10020590(void *this,wchar_t *param_1,wchar_t *param_2,uint param_3) { bool bVar1; int iVar2; int iVar3; undefined3 extraout_var; undefined3 extraout_var_00; wchar_t *pwVar4; wchar_t local_20c [260]; iVar2 = FUN_10020740((void *)((int)this + 0x208),param_1); if (iVar2 != 0) { iVar2 = *(int *)(*(int *)((int)this + 0x208) + 8); iVar3 = FUN_10020740((void *)(iVar2 + 4),param_2); if (iVar3 != 0) { iVar2 = *(int *)(*(int *)(iVar2 + 4) + 8); goto LAB_100205d4; } } iVar2 = 0; LAB_100205d4: if (iVar2 != 0) { *(undefined4 *)(iVar2 + 4) = 0; FUN_1001e680(local_20c,*(wchar_t **)(iVar2 + 8),0x104); bVar1 = FUN_1001e560(local_20c,*(wchar_t **)((int)this + 0x238),0); if (CONCAT31(extraout_var,bVar1) != 0) { return 1; } bVar1 = FUN_1001e560(local_20c,*(wchar_t **)((int)this + 0x23c),0); if (CONCAT31(extraout_var_00,bVar1) != 0) { return 0; } *(undefined4 *)(iVar2 + 4) = 1; param_3 = (uint)(*(int *)(iVar2 + 0xc) != 0); } if (*(int *)((int)this + 0x22c) != 0) { if (param_3 == 0) { pwVar4 = *(wchar_t **)((int)this + 0x23c); } else { pwVar4 = *(wchar_t **)((int)this + 0x238); } FUN_1001ff80(this,param_1,param_2,pwVar4); } return param_3; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001ed70 ------------------------------- ---------------------------------------------------------------------------- undefined4 __thiscall FUN_1001ed70(void *this,wchar_t *param_1,wchar_t *param_2) { int iVar1; undefined4 uVar2; iVar1 = FUN_10020740((int *)((int)this + 0x208),param_1); if (iVar1 != 0) { uVar2 = FUN_10020740((void *)(*(int *)(*(int *)((int)this + 0x208) + 8) + 4),param_2); return uVar2; } return 0; } ============================================================================ ------------------------------- FUN_10013b50 ------------------------------- ============================================================================ undefined4 * __thiscall FUN_10013b50(void *this,void *param_1,wchar_t *param_2) { float10 fVar1; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003ea3a; local_10 = ExceptionList; ExceptionList = &local_10; FUN_100136d0(this,param_1,param_2); *(undefined ***)this = RadarHorizonClass::vftable; local_8 = 0; fVar1 = FUN_10020450(param_1,param_2,L"ElevationScale",*(float *)(DAT_10059e28 + 0x50)); *(float *)((int)this + 0x24) = 1.0 / (float)(fVar1 * (float10)0.01745329238474369); ExceptionList = local_10; return (undefined4 *)this; } ---------------------------------------------------------------------------- ------------------------------- FUNCTION ------------------------------- ---------------------------------------------------------------------------- FUN_100136d0 FUN_10020450 ============================================================================ ------------------------------- FUN_10013bd0 ------------------------------- ============================================================================ undefined4 * __thiscall FUN_10013bd0(void *this,void *param_1,wchar_t *param_2) { float fVar1; float10 fVar2; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003ea4c; local_10 = ExceptionList; ExceptionList = &local_10; FUN_100136d0(this,param_1,param_2); *(undefined ***)this = RadarElevationClass::vftable; local_8 = 0; fVar2 = FUN_10020450(param_1,param_2,L"ElevationScale",*(float *)(DAT_10059e28 + 0x50)); fVar1 = 1.0 / (float)(fVar2 * (float10)0.01745329238474369); *(float *)((int)this + 0x24) = fVar1; *(float *)(DAT_10059e28 + 0x50) = fVar1; ExceptionList = local_10; return (undefined4 *)this; } ---------------------------------------------------------------------------- ------------------------------- FUN_100136d0 ------------------------------- ---------------------------------------------------------------------------- undefined4 * __thiscall FUN_100136d0(void *this,void *param_1,wchar_t *param_2) { float fVar1; int iVar2; undefined4 uVar3; float10 fVar4; wchar_t local_21c [260]; void *local_14; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003e9d8; local_10 = ExceptionList; ExceptionList = &local_10; local_14 = this; FUN_100135f0(this,param_1,param_2); local_8 = 0; *(undefined ***)this = RadarImageClass::vftable; *(undefined4 *)((int)this + 0x18) = 0xffffffff; fVar4 = FUN_10020450(param_1,param_2,L"ImageSize",0.0); fVar1 = (float)fVar4; *(float *)((int)this + 0x1c) = fVar1; *(undefined4 *)((int)this + 0x20) = 0; if (0.0 < fVar1 != NAN(fVar1)) { FUN_100204d0(param_1,param_2,L"TextureName",L"",local_21c,0x104,0); iVar2 = FUN_1001e490(local_21c); if (iVar2 == 0) { uVar3 = (**(code **)(*DAT_10059068 + 0x7c))(local_21c,1,1,0); *(undefined4 *)((int)this + 0x18) = uVar3; } iVar2 = FUN_1001ed70(param_1,param_2,L"RotationAngle"); if (iVar2 != 0) { fVar4 = FUN_10020450(param_1,param_2,L"RotationAngle",0.0); *(float *)((int)this + 0x20) = (float)fVar4; if (1.1920929e-07 < ABS((float)fVar4)) { *(uint *)((int)this + 4) = *(uint *)((int)this + 4) | 0x10000; ExceptionList = local_10; return (undefined4 *)this; } } } ExceptionList = local_10; return (undefined4 *)this; } ---------------------------------------------------------------------------- ------------------------------- FUN_10020450 ------------------------------- ---------------------------------------------------------------------------- float10 __thiscall FUN_10020450(void *param_1,wchar_t *param_2,wchar_t *param_3,float param_4) { int iVar1; int iVar2; iVar1 = FUN_10020740((void *)((int)param_1 + 0x208),param_2); if (iVar1 != 0) { iVar1 = *(int *)(*(int *)((int)param_1 + 0x208) + 8); iVar2 = FUN_10020740((void *)(iVar1 + 4),param_3); if ((iVar2 != 0) && (iVar1 = *(int *)(*(int *)(iVar1 + 4) + 8), iVar1 != 0)) { *(undefined4 *)(iVar1 + 4) = 2; return (float10)*(float *)(iVar1 + 0x10); } } if (*(int *)((int)param_1 + 0x22c) != 0) { FUN_1001fe50(param_1,param_2,param_3,param_4); } return (float10)param_4; } ---------------------------------------------------------------------------- ------------------------------- FUN_1001fe50 ------------------------------- ---------------------------------------------------------------------------- undefined4 __thiscall FUN_1001fe50(void *this,wchar_t *param_1,wchar_t *param_2,undefined4 param_3) { int iVar1; int iVar2; wint_t *pwVar3; undefined4 *puVar4; undefined4 uVar5; undefined4 extraout_ECX; undefined4 extraout_EDX; float10 extraout_ST0; ulonglong uVar6; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003ee08; local_10 = ExceptionList; ExceptionList = &local_10; iVar1 = FUN_10020740((void *)((int)this + 0x208),param_1); if (iVar1 != 0) { iVar1 = *(int *)(*(int *)((int)this + 0x208) + 8); iVar2 = FUN_10020740((void *)(iVar1 + 4),param_2); if ((iVar2 != 0) && (iVar1 = *(int *)(*(int *)(iVar1 + 4) + 8), iVar1 != 0)) { *(undefined4 *)(iVar1 + 4) = 2; *(undefined4 *)(iVar1 + 0x10) = param_3; ExceptionList = local_10; return 1; } } iVar1 = FUN_10025810((void *)((int)this + 0x21c),param_2); if (iVar1 != 0) { pwVar3 = (wint_t *)FUN_10025790((int)this + 0x21c); puVar4 = (undefined4 *)FUN_1001ddc0(0x14); local_8 = 0; if (puVar4 == (undefined4 *)0x0) { puVar4 = (undefined4 *)0x0; } else { *puVar4 = pwVar3; puVar4[1] = 2; FUN_1001e8f0(pwVar3); puVar4[2] = 0; uVar6 = FUN_1002a7b0(extraout_ECX,extraout_EDX); puVar4[4] = (float)extraout_ST0; puVar4[3] = (int)uVar6; } local_8 = 0xffffffff; uVar5 = FUN_1001f5f0(this,param_1,puVar4); ExceptionList = local_10; return uVar5; } FUN_1001df00(); ExceptionList = local_10; return 0; } ---------------------------------------------------------------------------- ------------------------------- FUN_1002a7b0 ------------------------------- ---------------------------------------------------------------------------- ulonglong __fastcall FUN_1002a7b0(undefined4 param_1,undefined4 param_2) { ulonglong uVar1; uint uVar2; float fVar3; float10 in_ST0; uint local_20; float fStack_1c; if (DAT_1005d4f4 == 0) { uVar1 = (ulonglong)ROUND(in_ST0); local_20 = (uint)uVar1; fStack_1c = (float)(uVar1 >> 0x20); fVar3 = (float)in_ST0; if ((local_20 != 0) || (fVar3 = fStack_1c, (uVar1 & 0x7fffffff00000000) != 0)) { if ((int)fVar3 < 0) { uVar1 = uVar1 + (0x80000000 < (uint)-(float)(in_ST0 - (float10)(longlong)uVar1)); } else { uVar2 = (uint)(0x80000000 < (uint)(float)(in_ST0 - (float10)(longlong)uVar1)); uVar1 = CONCAT44((int)fStack_1c - (uint)(local_20 < uVar2),local_20 - uVar2); } } return uVar1; } return CONCAT44(param_2,(int)in_ST0); } ============================================================================ ------------------------------- FUN_10013c60 ------------------------------- ============================================================================ undefined4 * __thiscall FUN_10013c60(void *this,void *param_1,wchar_t *param_2) { FUN_100136d0(this,param_1,param_2); *(undefined ***)this = RadarAzimuthClass::vftable; *(uint *)((int)this + 4) = *(uint *)((int)this + 4) & 0xfffffffe | 2; return (undefined4 *)this; } ============================================================================ ------------------------------- FUN_10013c90 ------------------------------- ============================================================================ undefined4 * __thiscall FUN_10013c90(void *this,void *param_1,wchar_t *param_2) { float10 fVar1; wchar_t local_21c [260]; void *local_14; void *local_10; undefined *puStack_c; undefined4 local_8; local_8 = 0xffffffff; puStack_c = &LAB_1003ea66; local_10 = ExceptionList; ExceptionList = &local_10; local_14 = this; FUN_100135f0(this,param_1,param_2); local_8 = 0; *(undefined ***)this = RadarTextClass::vftable; FUN_100204d0(param_1,param_2,L"Text",L"",(wchar_t *)((int)this + 0x18),0x40,0); FUN_10023470((uint *)((int)this + 0x98),param_1,param_2); local_8 = 1; *(undefined ***)this = RadarRangeScaleClass::vftable; FUN_100204d0(param_1,param_2,L"DisplayUnit",L"",local_21c,0x104,0); fVar1 = FUN_10021aa0(local_21c); *(float *)((int)this + 0x9c) = (float)((float10)1 / fVar1); ExceptionList = local_10; return (undefined4 *)this; } ===================================================================== ===================================================================== ------------------------------- NOTES ------------------------------- ===================================================================== ===================================================================== | -------------------- | ----------------------------------------------------------------------- | | **Function** | **What It Creates / Does** | | -------------------- | ----------------------------------------------------------------------- | | `FUN_10013bd0` | Creates **RadarElevationClass** → handles elevation bar drawing | | `FUN_10013f90` | Creates **RadarTargetRangeTextClass** → handles range text like “10 nm” | | `FUN_10013940` | Initializes **RadarTextClass**, then upgrades to `RadarTargetTextClass` | | `FUN_100136d0` | Base class initializer for visual radar components | | `FUN_10020450`, etc. | Load values from INI → `[RadarDisplay]`, `[AvionicsData]`, etc. | | `DAT_10059e28` | Likely a **central render config structure** used across radar visuals |
-
1 pointHOLY MOLY!!!!!!!!!!!!!!!!!!! I found the goldmine, the pieces of the disassembled codess! I was looking into this function: FUN_10013dc0(0x10057620); Then i notice the address 0x10057620, so I went into that, then I landed in the goldmine! I found a large block of codes that handles the .ini, here is the codes:
Important Information
By using this site, you agree to our Terms of Use, Privacy Policy, and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..