Jump to content

Leaderboard


Popular Content

Showing most liked content on 07/31/2025 in all areas

  1. 6 points
    HOLY 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!
  2. 5 points
    I 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!
  3. 4 points
    Welcome 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!
  4. 2 points
    Hello 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
  5. 2 points
    I 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.
  6. 2 points
    I 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.
  7. 2 points
    Some 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.
  8. 1 point
    using 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.
  9. 1 point
    To say it with the words from the movie "Good Morning Vietnam!" Da Da Da Nang!!
  10. 1 point
    wellll sheeeeeet boys, that stadiums gonna be tougher to crack that the Steelers D.........
  11. 1 point
    Hello 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
  12. 1 point
  13. 1 point
  14. 1 point
    Dawn breaks, the sun glistens off an inbound F-105 streaking across North Vietnam....
  15. 1 point
    Hello 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 |
  16. 1 point
    HOLY 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:
  17. 1 point

    Version 4.0.0

    70 downloads

    Mirage F1CE(M) The F1M upgrade was applied to 48 Spanish F1CE/EE. The prototype F1M flew in April 1998, and CASA delivered the remainder between March 1999 and 15 March 2001. The project included a revised cockpit with colour LCDs and a Smart HUD from Sextant Avionique, a Sextant inertial navigation system with GPS interface; NATO-compatible Have Quick 2 secure communications; Mode 4 digital IFF; a defensive aids suite; and flight recorders. The radar was upgraded to Cyrano IVM standard, adding sea search and air to ground ranging modes. F1CE(M) Specifics: Same as F1CE_late plus: Major Cockpit redesign: new HUD Left MFD for radar display, weapon and other configuration pages UFCP Up Front Control Panel AN/ALR-300 RWR miscellaneous others re-layouts and additions GPS antenna for improved Inertial Navigation System double wingtips lights IFF antenna 2 additional SideWinders on P2 outerwings stations. This was most likely experimental and operational use is not confirmed. Added for SF2 fun and gameplay ! Covered units : Ala 14. This addon is and will in all cases remain freeware. Released under CombatAce Fair-Use terms. Enjoy The Mirage F-1 Team.
  18. 1 point

    Version 4.0.0

    164 downloads

    Mirage F1EE(M) The F1M upgrade was applied to 48 Spanish F1CE/EE. The prototype F1M flew in April 1998, and CASA delivered the remainder between March 1999 and 15 March 2001. The project included a revised cockpit with colour LCDs and a Smart HUD from Sextant Avionique, a Sextant inertial navigation system with GPS interface; NATO-compatible Have Quick 2 secure communications; Mode 4 digital IFF; a defensive aids suite; and flight recorders. The radar was upgraded to Cyrano IVM standard, adding sea search and air to ground ranging modes. F1EE(M) Specifics: Same as F1EE_late plus: Major Cockpit redesign: new HUD Left MFD for radar display, weapon and other configuration pages UFCP Up Front Control Panel AN/ALR-300 RWRmiscellaneous others re-layouts and additions GPS antenna for improved Inertial Navigation System double wingtips lights IFF antenna Covered units : Ala 14. This addon is and will in all cases remain freeware. Released under CombatAce Fair-Use terms. Enjoy The Mirage F-1 Team.
  19. 1 point

    Version 1.0.001

    90 downloads

    Panavia Tornado IDS AMI Skinpack This skinpack is only for Guuruu´s Tornado IDS (Italian AF) https://combatace.com/files/file/16920-tornado-ids-italian-af/ It contains 9 brand new skins in NATO & grey camo. Included are 6°, 36° & 50° Stormo. Also included is a new data.ini, wich removes parts, that are not on the real jets. Install: You need the AMI Tornado from Guuruu extract the 7z file and then drop the Aircraft & Decals folder (and all what´s in) into your objects folder of your mod folder. Go Fly. Credits: Guuruu - Basic Tornado Template & creator of the Model Soulfreak - enhanced reworked Templates, skins, brand new decals & ini dance Schapen, Sept. 28th 2024 Carlo "Soulfreak" Heuer
  20. 1 point

    Version 1.0.0

    403 downloads

    nstallation of the Sentraedi Fighter SU-27K: The installation procedure is quite normal, FACILITY: This SU-27K (SU-33) package is for an SF2 installation. Simply copy and paste the items from the included folders into the corresponding folders contained in your Saved Games > ThirdWire folder GRADES: This is a primitive version of the SU-27K Flanker airborne heavy fighter, it is not optimized for ground attacks but can carry a lot of bombs and rockets the model is a SU-35 casing that we once worked with ALEDUCAT and it was never finished, the controls were optimized for vector thrust so it doesn't move some ailerons, today I finished it as a Sukhoi 27k to share it. Create a set of classic double rockets for this model. the chosen cabin is the one created by YEYEYE, the original readme file is added. The missiles that I chose are from a pack of weapons, I don't know who created them but it is appreciated. Hope you enjoy. By pressing the corresponding vectoring keys (vertical thrust) the plane becomes unstable like the SU-57 model, being able to perform the Cobra maneuver. I had planned to create the characters of the series but unfortunately every day it becomes more difficult for me to finish projects to be able to share them with you, it would be of great help if you followed me on my youtube channel https://www.youtube.com/@arielmelo9789/videos I could justify the time invested in my ex-wife hahahaha.
  21. 1 point

    Version 1.1.0

    508 downloads

    Feb 12th 2019 ============= Italian IDS (before MLU) version 1.0 --------------------------------------------------------- Italian Tornado IDS. CAUTION !!!! -------------------- Base LOD is using specular maps. They can really drop fps on slower GPUs [like my GTX 460 ;-)]. If you have this problem, there is archive of LOD without them in plane folder called : IDS-AM faster_no_specular_LOD Unpack and use this one. CAUTION 2: --------------------- Weapons : Since 1988 MBB-Aeritalia recce pod since 1992 AGM-88 since 1995 CLDP laser pod --> LGBs since 1998 JDAM-s Keys: --------- SHIFT+1 -> canopy open SHIFT+2 -> fuel probe SHIFT+3 -> weapon operator cockpit So, the most important part ... CREDITS: Fantastic five 1st. Nothing wouldn't be possible without these guyz : -------------------------------------------------------------------------------------------------------------- ravenclaw_007 - weapons, documentation, 3d lessons, BOZ, pylons yakarov79 - skinning lessons, testing, damages crusader - documentation, testing, avionics, HUD, air search radar baffmeister - flight model 76_IAP - 3d lessons Then Godfather of project: -------------------------------------------- fanatic modder - testing, documentation, flight model, engine datas, inspiration And last not least .. --------------------------------- coupi - hit boxes, damages, testing, GR.1B 12sqn decals and 617 Sqn decals. viper63 - testing, skins, loading and arming screens, pilots durasoul, logan4 - help with weapons, testing florian - some parts and ideas I used in my model from his German Tornado citizen67 - AMI loadouts, stencils, documentation menvra - testing, AMI loadouts spinners - hangar and loading screens svetlin - testing stratos - testing paulopanz - testing .. and all previous Tonka creators. THANK YOU ALL VERY MUCH. guuruu - all bugs ********************************************************************************************************** This is freeware; it CANNOT be distributed unless permissions are granted by myself. The original readmes, if any, and all other pieces of the package MUST remain intact. The names of all contributors, modders, suppliers, etc =MUST= be listed in any new readmes. This package and any part of it may NOT in any way, shape or form be used in any payware additions. ********************************************************************************************************** THIS AIRCRAFT MOD OR ANY PART OF IT MUST NOT BE HOSTED OR POSTED FOR DOWNLOAD ON ANY OTHER WEB SITE WITHOUT MY EXPRESS PERMISSION, OR USED FOR ANY OTHER PURPOSE THAN THIRDWIRE FLIGHT SIMULATORS, AND MUST NOT BE SOLD OR OFFERED FOR SALE BY ITSELF OR WITH ANY OTHER FILES OR MODS. ********************************************************************************************************** Have fun Wojtek
  22. 1 point

    Version 1.1

    3,588 downloads

    BETA! F/A-18A/C. This package is beta and to be honest we are all sick of looking at it. So here is the deal. You find something wrong and the community agrees, send it to me and I will keep the package updated. We just need fresh eyes on it. There is a new pit by Brain32 that is amazing. The Hornet Team: Original Model by BPAO and the Mirage Factory, updated by FastCargo. New pit by Brain32 with Crusader, Brain and CB34 doing the avionics. Skins by Siddog, Dave and EricJ. Crash test Dummy: Caeser Pilots: by Diego Seats: Julhelm and Ravenclaw Weapons by Ravenclaw, wpnssgt and others. Loadouts and variant shred out by CrazyhorseB34 who put a lot of effort into researching this part of the package. Its highly recommended you use the loads he made or you will have problems. If I forgot anyone let me know in a PM and I will correct it. To install: C:\Users\xxxxxxx\Saved Games\ThirdWire\StrikeFighters2 directory.
  23. 1 point

    Version 1.0.0

    203 downloads

    This is the AV-8B Plus Harrier in service with the Spanish Navy, known as EAV-8B Basic modding skills are required to run this mod. (copy/paste, mod folder structure etc.) A fake pilot is needed to run this mod. It is designed for and works only in SF2 series. Skin is in 4096x4096 format. So you can easily resize down. If you have problems running this in game. Resize skins to lower resolutions Animations: 1= canopy open - close 4= refueling probe - beware of a speed limit 3= night vision mode - not really helping but it is there - inside and outside animation. ************************************************************************************ You can exlplore ini files for some additional features like in cockpit "FLIR" feed on HUD . AAQ-28 can be loaded only on station number 5 and centerline AIM-120 can be loaded only on stations 2 and 6. ECM also activates RWR on digital display indicator - even if ECM pod is not loaded. for proper sound work you should add these lines into soundlist.ini SoundFileXXX=USMComm_1 SoundFileXXX=Equalizer [Equalizer] Priority=NORMAL Looped=TRUE NumBuffers=2 3DSound=TRUE DopplerEffect=FALSE MaxDist=1000.000000 MinDist=100.000000 InsideConeAngle=360 OutsideConeAngle=360 ConeOutsideVolume=100 SoundFileXXX=USMComm_1 [USMComm_1] Priority=NORMAL 3DSound=FALSE NumBuffers=1 Looped=TRUE FrequencyControl=FALSE ************************************************************************************ Special thanks to yakarov79 by model-re-model, new cockpit, templates, ini files and templates Ravenclaw - BRU-42 ITER models. ALQ-164 model, weapons. Crusaders - who helped yakarov79 with avionics ini. Sounds taken from sources offering free sound samples. bobrock- the original first version of the standard model Thank to Combatace team for this page
  24. 1 point

    Version 1.0.0

    54 downloads

    What if skin of the Bandinos Su-27 if it were to enter the Parani Air Force. Enjoy! Simply drop the files as adviced in the "ReadMe" text file included. Credits: Torno, for the awesome mod and skin template.
  25. 1 point

    Version 1.5.0

    495 downloads

    April 2020 ========= Marineflieger IDS version 1.50 ------------------------------------------------- Marineflieger Tornado IDS. Version 1.5 looks to be final standart for all my Tonkas. CAUTION !!!! --------------------- Base LOD is using specular maps. They can really drop fps on slower GPUs [like my GTX 460 ;-)]. If you have this problem use files in EXTRAS folder. Just copy it to :/Objects and overwrite. CAUTION 2: -------------------- Weapons : Since 1988 MBB-Aeritalia recce pod since 2000 Litening II laser pod --> LGBs since 2002 AGM-88 CAUTION 3: -------------------- Better check TUTORIALS before you'll delete them ;-) Keys: ---------- SHIFT+1 -> canopy open SHIFT+2 -> fuel probe SHIFT+3 -> weapon operator cockpit SO,THE MOST IMPORTANT PART ... CREDITS: Nothing wouldn't be possible without these guyz : --------------------------------------------------------------------------------- ravenclaw_007 - weapons, documentation, 3d lessons, BOZ, pylons, German loadouts and lot of help yakarov79 - skinning lessons, testing, damages, 3d details baffmeister - flight model, testing coupi - decals, skins, hit boxes, damages, testing crusader - documentation, testing, avionics, HUD, air search radar, loadouts, RWR soulfreak - skins, decals sophocles - testing, sounds spinners - hangar and loading screens florian - some parts and ideas I used in my model from his German Tornado 76_IAP - 3d lessons guuruu - ALL BUGS .. AND ALL PREVIOUS TONKA DEVELOPERS. THANK YOU GUYZ VERY MUCH. Godfather of project: ---------------------------------- fanatic modder - testing, documentation, flight model, engine datas, inspiration, sounds, loadouts ************************************************************************************************* This is freeware; it CANNOT be distributed unless permissions are granted by myself. The original readmes, if any, and all other pieces of the package MUST remain intact. The names of all contributors, modders, suppliers, etc =MUST= be listed in any new readmes. This package and any part of it may NOT in any way, shape or form be used in any payware additions. ************************************************************************************************* THIS AIRCRAFT MOD OR ANY PART OF IT MUST NOT BE HOSTED OR POSTED FOR DOWNLOAD ON ANY OTHER WEB SITE WITHOUT MY EXPRESS PERMISSION, OR USED FOR ANY OTHER PURPOSE THAN THIRDWIRE FLIGHT SIMULATORS, AND MUST NOT BE SOLD OR OFFERED FOR SALE BY ITSELF OR WITH ANY OTHER FILES OR MODS. ************************************************************************************************* Have fun Wojtek
  26. 1 point

    Version 1.0.0

    415 downloads

    AV-8B Plus Harrier Marina Militare This is the AV-8B Plus Harrier in service with the Italian navy. Basic modding skills are required to run this mod. (copy/paste, mod folder structure etc.) A fake pilot is needed to run this mod. It is designed for and works only in SF2 series. Skin is in 4096x4096 format. So you can easily resize down. If you have problems running this in game. Resize skins to lower resolutions All serials are correct for the Italian version of Harrier II. Animations: 1= canopy open - close 4= refueling probe - beware of a speed limit 3= night vision mode - not really helping but it is there - inside and outside animation. ************************************************************************************ You can exlplore ini files for some additional features like in cockpit "FLIR" feed on HUD . AAQ-28 can be loaded only on station number 5 and centerline AIM-120 can be loaded only on stations 2 and 6. ECM also activates RWR on digital display indicator - even if ECM pod is not loaded. If you have yakarov79´s AV-8B Harrier already - some files are same so simply overwrite. for proper sound work you should add these lines into soundlist.ini SoundFileXXX=USMComm_1 SoundFileXXX=Equalizer [Equalizer] Priority=NORMAL Looped=TRUE NumBuffers=2 3DSound=TRUE DopplerEffect=FALSE MaxDist=1000.000000 MinDist=100.000000 InsideConeAngle=360 OutsideConeAngle=360 ConeOutsideVolume=100 SoundFileXXX=USMComm_1 [USMComm_1] Priority=NORMAL 3DSound=FALSE NumBuffers=1 Looped=TRUE FrequencyControl=FALSE ************************************************************************************ Credits. Me - Skin, Decals & ini dance yakarov79 - whole sort of strange things - model-re-model, new cockpit, templates, ini files etc. Ravenclaw - BRU-42 ITER models. ALQ-164 model, weapons. AAQ-28 Pod- I don't remember who made this model - all credits to him and thank you. 331Killerbee - ideas, good words, work on ini files, loadouts, effects etc. Crusaders - who helped yakarov79 with avionics ini. Sounds taken from sources offering free sound samples. bobrock- the original first version of the standard model Schapen, Nov. 24th 2019 Carlo "Soulfreak" Vecchi THIS MODE IS ONLY TO BE DISTRIBUTED AS FREEWARE AND IN NO OTHER CIRCUMSTANCE SHALL IT BE USED, EVEN IN PART OF ANYTHING THAT IS PAYWARE. IN ACCORDANCE WITH THE COMBAT ACE MODDERS AGREEMENT
  27. 1 point

    Version 1.1.0

    665 downloads

    Feb 2nd 2019 ============= GR.1B version 1.00 ------------------------------ RAF Tornado GR.1 with Sea Eagle anti-ship missiles. Keys: -------- SHIFT+1 -> canopy open SHIFT+2 -> fuel probe SHIFT+3 -> weapon operator cockpit So, the most important part ... CREDITS: Fantastic five 1st. Nothing wouldn't be possible without these guyz : ------------------------------------------------------------------------------------------------------------ ravenclaw_007 - weapons, documentation, 3d lessons yakarov79 - skinning lessons, testing, damages crusader - documentation, testing, avionics, HUD, air search radar baffmeister - flight model 76_IAP - 3d lessons Then Godfather of project: ------------------------------------------ fanatic modder - testing, documentation, flight model, engine datas, inspiration And last not least .. ------------------------------- coupi - hit boxes, damages, testing, GR.1B 12sqn decals and 617 Sqn decals. viper63 - testing, skins, loading and arming screens, pilots durasoul, logan4 - help with weapons, testing florian - some parts and ideas I used in my model from his German Tornado citizen67 - AMI loadouts svetlin - testing stratos - testing .. and all previous Tonka creators. THANK YOU ALL VERY MUCH. guuruu - all bugs *********************************************************************************************************** This is freeware; it CANNOT be distributed unless permissions are granted by myself. The original readmes, if any, and all other pieces of the package MUST remain intact. The names of all contributors, modders, suppliers, etc =MUST= be listed in any new readmes. This package and any part of it may NOT in any way, shape or form be used in any payware additions. *********************************************************************************************************** THIS AIRCRAFT MOD OR ANY PART OF IT MUST NOT BE HOSTED OR POSTED FOR DOWNLOAD ON ANY OTHER WEB SITE WITHOUT MY EXPRESS PERMISSION, OR USED FOR ANY OTHER PURPOSE THAN THIRDWIRE FLIGHT SIMULATORS, AND MUST NOT BE SOLD OR OFFERED FOR SALE BY ITSELF OR WITH ANY OTHER FILES OR MODS. *********************************************************************************************************** Have fun Wojtek


×

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..