19 #include <KnownFolders.h> 22 #include "../SteamWorks/sdk/public/steam/steam_api.h" 35 sprintf_s(msg,
sizeof(msg),
"m_pddsAvatar[%i]", t);
58 D3DFORMAT format = D3DFMT_A8L8;
61 case 1: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\BODY1.dds");
73 case 7: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\ears1.dds");
75 case 8: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\straight1.dds");
77 case 9: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\HEAD1.dds");
79 case 10: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\noses1.dds");
81 case 11: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\HEAD2.dds");
83 case 12: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\HEAD3.dds");
85 case 13: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\flattop1.dds");
87 case 14: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\HAMMONDS1.dds");
94 sprintf_s(msg,
sizeof(msg),
"m_pddsAvatar[%i]", t);
118 else if (newsex == 2)
136 D3DFORMAT format = D3DFMT_A8L8;
139 case 1: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\BODY1.dds");
141 case 2: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\ears1.dds");
143 case 3: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\HEAD2.dds");
145 case 4: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\HEAD1.dds");
147 case 5: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\noses1.dds");
149 case 6: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\head3.dds");
151 case 7: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\HAIR3-Chantal.dds");
153 case 8: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\HAIR1-MARYMOORE.dds");
155 case 9: wcscpy_s(hullfile, 199, L
"textures\\People\\Female\\HAIR2-Suzette.dds");
157 case 10: wcscpy_s(hullfile, 199, L
"textures\\People\\Male\\HAMMONDS1.dds");
158 format = D3DFMT_DXT3;
164 sprintf_s(msg,
sizeof(msg),
"m_pddsAvatar[%i]", t);
217 SteamAPI_RunCallbacks();
224 #pragma region STATUS_CREATE 227 static char oldSex = -1;
233 if (newSex != oldSex)
258 const int val = _wtoi(str);
261 swprintf_s(str, 4, L
"%i", newval);
273 const int val = _wtoi(str);
276 swprintf_s(str, 4, L
"%i", newval);
286 swprintf_s(str, 4, L
"%.3s",
g_HUD.GetEditBox(
IDC_AGE)->GetText());
289 const int val = _wtoi(str);
290 int newval = min((
int)80, val);
291 newval = max((
int)18, newval);
292 swprintf_s(str, 4, L
"%i", newval);
294 age = (
static_cast<float>(newval) - 18.0f) / 62.0f;
298 #pragma region Set Access 764 #pragma region Validators 765 static int oldfocus = -1;
775 if (oldfocus != newfocus)
780 SPacketBig datapacket = SPacketBig();
781 datapacket.type = 24;
782 sprintf_s(datapacket.msg,
sizeof(datapacket.msg),
"%S",
g_HUD.GetEditBox(
IDC_HANDLE)->GetText());
783 datapacket.array = 0;
784 if (datapacket.msg[0])
794 SPacketBig datapacket = SPacketBig();
795 datapacket.type = 24;
796 sprintf_s(datapacket.msg,
sizeof(datapacket.msg),
"%S",
g_HUD.GetEditBox(
IDC_REFERRAL)->GetText());
797 datapacket.array = 1;
798 if (datapacket.msg[0])
810 SPacketBig datapacket = SPacketBig();
811 datapacket.type = 24;
812 sprintf_s(datapacket.msg,
sizeof(datapacket.msg),
"%S",
g_HUD.GetEditBox(
IDC_CHARNAME)->GetText());
813 datapacket.array = 2;
814 if (datapacket.msg[0])
824 SPacketBig datapacket = SPacketBig();
825 datapacket.type = 24;
826 sprintf_s(datapacket.msg,
sizeof(datapacket.msg),
"%S",
g_HUD.GetEditBox(
IDC_EMAILADDRESS)->GetText());
827 datapacket.array = 3;
828 if (datapacket.msg[0])
841 #pragma region STATUS_LOADING 845 logger->
Log(
"Special OnFrameMove(STATUS_LOADING) called!");
852 #pragma region STATUS_GAME 855 static POINT oldptCursor =
ptCursor;
860 if (DXUTIsWindowed()) ScreenToClient(DXUTGetHWND(), &
ptCursor);
864 if (abs(
ptCursor.x - oldptCursor.x) > 2 ||
865 abs(
ptCursor.y - oldptCursor.y) > 2)
916 m_fSlide += powf((27.0f -
m_fSlide) / 27.0f + 1.0f, 4.0f) * fElapsedTime * 20.0f;
937 if (!
icon[t].mouseover)
974 SetCursor(LoadCursor(
nullptr, IDC_SIZENWSE));
1003 sprintf_s(msg,
sizeof(msg),
"HMI::OnResetDevice() @ displaystage=%i",
game->
displaystage);
1014 logger->
Log(
"HMI::OnResetDevice() g_DialogResourceManager");
1022 logger->
Log(
"HMI::OnResetDevice() g_pFont");
1029 logger->
Log(
"HMI::OnResetDevice() g_pChatFont");
1037 logger->
Log(
"HMI::OnResetDevice() OnDeviceReset");
1042 logger->
Log(
"HMI::OnResetDevice() done!");
1072 if (uMsg == WM_CHAR)
1086 case WM_LBUTTONDBLCLK:
1089 case WM_LBUTTONDOWN:
1155 V_RETURN(D3DXCreateFontW(pd3dDevice, 12, 6, FW_LIGHT, 1,
false, DEFAULT_CHARSET,
1156 OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, FIXED_PITCH | FF_DONTCARE,
1157 L
"DejaVu Sans Mono", &
g_pFont));
1160 V_RETURN(D3DXCreateFontW(pd3dDevice, 16, 6, FW_LIGHT, 1,
false, DEFAULT_CHARSET,
1161 OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, FIXED_PITCH | FF_DONTCARE,
1167 logger->
Log(
"OnCreateDevice called with displaystage between LOGIN and LOADING", Logger::Level::Debug);
1168 for (
int i = 0; i < 20; i++)
1173 logger->
Log(
"OnCreateDevice called with displaystage GAME", Logger::Level::Debug);
1207 size_t startOfLine = 0;
1208 size_t lastGoodSpaceIndex = 0;
1209 for (
size_t i = 0; i < wcslen(message) - startOfLine; i++)
1211 size_t i1 = wcslen(message) - startOfLine - 1;
1214 wcscpy_s(tempStr, 510, &message[startOfLine]);
1228 if (rect.right < 147 && i != i1)
1230 if (tempStr[i] == L
' ' || tempStr[i] == L
'!' || tempStr[i] == L
'。' || tempStr[i] == L
',')
1231 lastGoodSpaceIndex = i;
1236 if (lastGoodSpaceIndex != 0 && i != i1)
1238 if (tempStr[lastGoodSpaceIndex] == L
' ')
1239 tempStr[lastGoodSpaceIndex] = 0;
1241 tempStr[lastGoodSpaceIndex + 1] = 0;
1246 if (lastGoodSpaceIndex != 0)
1247 startOfLine += lastGoodSpaceIndex + 1;
1249 startOfLine += wcslen(tempStr) + 1;
1251 lastGoodSpaceIndex = 0;
1273 command.
name =
"AuralCargoBay";
1418 HUD->GetComboBox(controlId)->AddItem(L
"English",
nullptr);
1422 HUD->GetComboBox(controlId)->AddItem(L
"汉语",
nullptr);
1424 HUD->GetComboBox(controlId)->AddItem(L
"Nederlands",
nullptr);
1425 HUD->GetComboBox(controlId)->AddItem(L
"Français",
nullptr);
1426 HUD->GetComboBox(controlId)->AddItem(L
"Deutsch",
nullptr);
1427 HUD->GetComboBox(controlId)->AddItem(L
"Ελληνικά",
nullptr);
1428 HUD->GetComboBox(controlId)->AddItem(L
"Italiano",
nullptr);
1432 HUD->GetComboBox(controlId)->AddItem(L
"日本語",
nullptr);
1433 HUD->GetComboBox(controlId)->AddItem(L
"한국어",
nullptr);
1435 HUD->GetComboBox(controlId)->AddItem(L
"Portuguese",
nullptr);
1436 HUD->GetComboBox(controlId)->AddItem(L
"Русско",
nullptr);
1437 HUD->GetComboBox(controlId)->AddItem(L
"Español",
nullptr);
1446 HUD->GetComboBox(controlId)->SetSelectedByIndex(templang);
1454 setlocale(LC_ALL,
"Chinese");
break;
1456 setlocale(LC_ALL,
"Dutch");
break;
1458 setlocale(LC_ALL,
"French");
break;
1460 setlocale(LC_ALL,
"German");
break;
1462 setlocale(LC_ALL,
"Greek");
break;
1464 setlocale(LC_ALL,
"Italian");
break;
1466 setlocale(LC_ALL,
"Japanese");
break;
1468 setlocale(LC_ALL,
"Korean");
break;
1470 setlocale(LC_ALL,
"Portuguese");
break;
1472 setlocale(LC_ALL,
"Russian");
break;
1474 setlocale(LC_ALL,
"Spanish");
break;
1476 setlocale(LC_ALL,
"English");
break;
1494 char steamLanguage[99];
1495 strcpy_s(steamLanguage, 99, SteamApps()->GetCurrentGameLanguage());
1514 sprintf_s(msg,
sizeof(msg),
"LoadLanguage() language %i (Steam override '%s')",
game->
config.
language, steamLanguage);
1522 case 0: fopen_s(&file,
"Languages\\english.txt",
"rt, ccs=UTF-8");
1524 case 1: fopen_s(&file,
"Languages\\chinese.txt",
"rt, ccs=UNICODE");
FONT_WIDTH = 14;
1526 case 2: fopen_s(&file,
"Languages\\dutch.txt",
"rt, ccs=UTF-8");
1528 case 3: fopen_s(&file,
"Languages\\french.txt",
"rt, ccs=UTF-8");
1530 case 4: fopen_s(&file,
"Languages\\german.txt",
"rt, ccs=UTF-8");
1532 case 5: fopen_s(&file,
"Languages\\greek.txt",
"rt, ccs=UTF-8");
1534 case 6: fopen_s(&file,
"Languages\\italian.txt",
"rt, ccs=UTF-8");
1536 case 7: fopen_s(&file,
"Languages\\japanese.txt",
"rt, ccs=UNICODE");
FONT_WIDTH = 14;
1538 case 8: fopen_s(&file,
"Languages\\korean.txt",
"rt, ccs=UNICODE");
FONT_WIDTH = 12;
1540 case 9: fopen_s(&file,
"Languages\\portuguese.txt",
"rt, ccs=UTF-8");
1542 case 10: fopen_s(&file,
"Languages\\russian.txt",
"rt, ccs=UTF-8");
1544 case 11: fopen_s(&file,
"Languages\\spanish.txt",
"rt, ccs=UTF-8");
1547 file =
nullptr;
break;
1551 sprintf_s(msg,
sizeof(msg),
"Could not open language file %i!",
game->
config.
language);
1556 fwscanf_s(file, L
"%[^\n]\n", str, 512);
1562 sprintf_s(msg,
sizeof(msg),
"Reached EOF prematurely on language file %i (%i)!",
game->
config.
language, t);
1567 fwscanf_s(file, L
"%[^\n]\n", str, 512);
1570 sprintf_s(msg,
sizeof(msg),
"Reached EOL prematurely on language file %i (%i)!",
game->
config.
language, t);
1574 const auto wcslen1 =
static_cast<short>(wcslen(str));
1575 for (
short q = 1; q < wcslen1; q++)
1577 if (str[q] ==
'/' && (q + 1) < wcslen1 && str[q + 1] ==
'/')
1579 if (q > 0 && str[q - 1] ==
' ')
1584 else if (str[q] ==
'\\' && (q + 1) < wcslen1 && str[q + 1] ==
'n')
1589 else if (str[q] ==
'\\' && (q + 1) < wcslen1 && str[q + 1] ==
't')
1596 str[MAX_TAB_CHARS - 1] = 0;
1605 sprintf_s(msg,
sizeof(msg),
"Error in language file %i at L_TAB_GLOBAL",
game->
config.
language);
1610 sprintf_s(msg,
sizeof(msg),
"Error in language file %i at L_TAB_UNNAMED",
game->
config.
language);
1626 logger->
Log(
"LoadLanguage() successful!");
1634 const long bubblewidth =
FONT_WIDTH *
static_cast<long>(wcslen(msg)) + 1;
1636 rect.left =
ptCursor.x - bubblewidth;
1650 rect.right = rect.left + bubblewidth;
1651 rect.bottom = rect.top + 12;
1654 D3DXVECTOR3 tempvec;
1655 tempvec.x =
static_cast<float>(rect.left) - 1;
1656 tempvec.y =
static_cast<float>(rect.top) - 4;
1660 rect2.right = rect2.left + bubblewidth + 3;
1661 rect2.top = 0; rect2.bottom = 16;
1662 g_pTextSprite->Draw(m_pddsGUILateral, &rect2,
nullptr, &tempvec, 0xFFFFFFFF);
1663 tempvec.x =
static_cast<float>(rect.right);
1664 tempvec.y =
static_cast<float>(rect.top) - 4;
1666 rect2.left = 59; rect2.right = 61;
1667 rect2.top = 0; rect2.bottom = 16;
1668 g_pTextSprite->Draw(m_pddsGUILateral, &rect2,
nullptr, &tempvec, 0xFFFFFFFF);
1671 rect.top = rect.top - 2;
1672 g_pFont->DrawTextW(g_pTextSprite, msg, -1, &rect, DT_LEFT | DT_NOCLIP, 0xFF000000);
1704 _sopen_s(&menudat,
"Save\\gui.cfg", _O_BINARY | _O_RDONLY, _SH_DENYNO, _S_IWRITE);
1708 logger->
Log(R
"(File not yet created: "Save\gui.cfg")"); 1724 logger->
Log(R
"(Loading file: "Save\gui.cfg")"); 1726 int version, unused;
1727 _read(menudat, &version, 4);
1729 _read(menudat, &unused, 4);
1733 _lseek(menudat, (t + 1L) * 512L, SEEK_SET);
1742 _lseek(menudat, 4, SEEK_CUR);
1744 short tabs, activetab;
1745 _read(menudat, &tabs, 2);
1746 _read(menudat, &activetab, 2);
1752 _lseek(menudat, 1, SEEK_CUR);
1754 _lseek(menudat, (t + 1L) * 512L + 256L, SEEK_SET);
1771 _sopen_s(&menudat,
"Save\\gui.cfg", _O_BINARY | _O_CREAT | _O_WRONLY, _SH_DENYNO, _S_IWRITE);
1773 logger->
Log(R
"(SaveConfiguration() could not open or create file: "Save\gui.cfg")", Logger::Level::Warn); 1775 logger->
Log(R
"(Saving file: "Save\gui.cfg")"); 1777 int version = 2, unused = 0;
1778 _write(menudat, &version, 4);
1779 _write(menudat, &unused, 4);
1783 _lseek(menudat, (t + 1L) * 512L, SEEK_SET);
1793 _lseek(menudat, (t + 1L) * 512L + 256L, SEEK_SET);
1826 static bool callsignFocus =
false;
1829 callsignFocus =
false;
1830 g_HUD.GetControl(
IDC_CALLSIGN)->GetElement(0)->dwTextFormat = DT_RIGHT | DT_VCENTER;
1836 callsignFocus =
true;
1839 g_HUD.GetControl(
IDC_CALLSIGN)->GetElement(0)->dwTextFormat = DT_LEFT | DT_VCENTER;
1852 static bool passwordfocus =
false;
1855 passwordfocus =
false;
1861 passwordfocus =
true;
1891 pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
1892 pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);
1893 pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
true);
1896 pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
1898 LPDIRECT3DVERTEXBUFFER9 m_avSnow =
nullptr;
1906 V(m_avSnow->Lock(0, 0, reinterpret_cast<void**>(&vtxs), D3DLOCK_DISCARD));
1908 (*vtxs).
x = 700.0f *
game->
displayscale; (*vtxs).y = 0.0f; (*vtxs).z = 1.0f; (*vtxs).w = 2.0f;
1909 (*vtxs).tu = 1; (*vtxs).tv = 0;
1911 (*vtxs).x = 0.0f; (*vtxs).y = 0.0f; (*vtxs).z = 1.0f; (*vtxs).w = 2.0f;
1912 (*vtxs).tu = 0; (*vtxs).tv = 0;
1915 (*vtxs).tu = 1; (*vtxs).tv = 1;
1917 (*vtxs).x = 0.0f; (*vtxs).y = 500.0f *
game->
displayscale; (*vtxs).z = 1.0f; (*vtxs).w = 2.0f;
1918 (*vtxs).tu = 0; (*vtxs).tv = 1;
1920 V(m_avSnow->Unlock());
1922 V(pd3dDevice->SetStreamSource(0, m_avSnow, 0,
sizeof D3DINSTRUMENT));
1924 D3DXVECTOR4 ambient;
1934 V(pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2));
1939 V(pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
false));
1941 V(pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW));
1943 SAFE_RELEASE(m_avSnow);
1951 sprintf_s(msg,
sizeof(msg),
"HMI::OnRender @ displaystage=%i",
game->
displaystage);
1958 #pragma region STATUS_SPLASH 1961 D3DXMATRIX matScale;
1981 ].distance)), 255, 255, 255)));
1988 D3DXVECTOR3 bill = D3DXVECTOR3(123.0f, 73.0f, 0.0f);
2000 bill = D3DXVECTOR3(234.0f, 207.0f, 0.0f);
2005 rect.left = 245; rect.top = 219; rect.right = rect.bottom = -1;
2037 if (f_temp >= 100.0f)
2057 else if (prepatchdate)
2069 SPacketBig outpacket = SPacketBig();
2070 outpacket.type = 30;
2071 sprintf_s(outpacket.msg,
sizeof(outpacket.msg),
"%s,%i,%i,%i,%i,%llu",
game->
config.
patchdate,
major,
minor,
build,
revision, SteamUser()->GetSteamID().ConvertToUint64());
2079 SPacketBig outpacket = SPacketBig();
2080 outpacket.type = 29;
2081 sprintf_s(outpacket.msg,
sizeof(outpacket.msg),
"%s,%i,%i,%i,%i",
game->
config.
patchdate,
major,
minor,
build,
revision);
2093 logger->
Log(
"Validating installation...");
2100 rect.left = 10; rect.top = 480; rect.right = rect.bottom = 0;
2112 #pragma region STATUS_LOGIN 2115 const float adjfade = max(
fade - 0.4f, 0.0f) * 1.6666666666666666666666666666667f;
2116 D3DXMATRIX matScale;
2123 V(
g_pTextSprite->Draw(
m_pddsGUIRanks,
nullptr,
nullptr,
nullptr, D3DCOLOR_ARGB(static_cast<short>(255.0f * (1.0f - adjfade)), 255, 255, 255)));
2131 bill = D3DXVECTOR3(0.0f, 500.0f * adjfade * adjfade, 0.0f);
2142 rect.left =
static_cast<long>(
cloudmotion); rect.top = 512 - 500 / 2; rect.right = 700 +
static_cast<long>(
cloudmotion); rect.bottom = 512 + 500 / 2;
2143 pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
2146 pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
2154 D3DXMATRIX matTemp, matTemp2;
2155 D3DXMatrixScaling(&matTemp, 0.5f, 0.5f, 1.0f);
2157 matTemp = matTemp * matTemp2;
2167 bill = D3DXVECTOR3(123.0f, 73.0f, 0.0f);
2172 logger->
Log(
"m_pddsGUIScroll (Logo.png) was null trying to render the STATUS_LOGIN page (it is loaded on STATUS_SPLASH)", Logger::Level::Debug);
2180 bill = D3DXVECTOR3(9.0f, 405.0f, 0.0f);
2184 for (
size_t i = 0; i <
motd.size(); i++)
2186 rect.left = 19; rect.top = 417 + 12 * i; rect.right = rect.bottom = 0;
2194 bill = D3DXVECTOR3(94.0f, 221.0f, 0.0f);
2203 g_HUD.EnableKeyboardInput(
true);
2215 g_HUD.GetControl(
IDC_CALLSIGN)->GetElement(0)->dwTextFormat = DT_RIGHT | DT_VCENTER;
2240 static bool oldmouseover =
false;
2254 rect.left = 275; rect.top = 291 + 37; rect.right = 275 + 152; rect.bottom = 291 + 37 + 20;
2261 const float width = 100.0f;
2263 if (percent < 0 || _isnan(percent) || isinf(percent))
2265 sprintf_s(msg,
sizeof msg,
"Found it... musicdone percent was %f", percent);
2270 rect.left = 62; rect.top = 32; rect.right = 62 +
static_cast<long>(width * percent); rect.bottom = 40;
2271 bill = D3DXVECTOR3(300.0f, 315.0f, 0.0f);
2273 rect.left = 62; rect.top = 40; rect.right = 62 +
static_cast<long>(width * (1.0f - percent)); rect.bottom = 48;
2274 bill = D3DXVECTOR3(300.0f + static_cast<long>(width * percent), 315.0f, 0.0f);
2276 rect.left = 299; rect.top = 300; rect.right = 300 +
static_cast<long>(width); rect.bottom = 325;
2285 g_HUD.OnRender(fElapsedTime);
2291 #pragma region STATUS_LOADING 2301 const float tempvar = 18.9565f - 18.1537f * sqrtf(
eyemotion);
2303 D3DXVECTOR3 bill = D3DXVECTOR3(436.0f, 311.5f, 0.0f);
2308 D3DXMATRIX matTemp, matTemp2;
2309 D3DXMatrixScaling(&matTemp, tempvar, tempvar, 1.0f);
2311 matTemp = matTemp * matTemp2;
2323 D3DXMATRIX matScale;
2328 rect.left =
static_cast<long>(
cloudmotion); rect.top = 512 - 500 / 2; rect.right = 700 +
static_cast<long>(
cloudmotion); rect.bottom = 512 + 500 / 2;
2338 logger->
Log(
"furtherdelay is NAN or INF!? WTH", Logger::Level::Debug);
2344 logger->
Log(
"furtherdelay is OOB!? WTH", Logger::Level::Debug);
2353 bill = D3DXVECTOR3(123.0f, 73.0f, 0.0f);
2372 logger->
Log(
"Untyped exception caught calling g_pTextSprite->End() ... calling g_pTextSprite->OnResetDevice()", Logger::Level::Debug);
2373 sprintf_s(msg,
sizeof msg,
"g_pTextSprite %p",
g_pTextSprite);
2386 #pragma region STATUS_GAME 2390 D3DXMATRIX matScale;
2394 V(pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP));
2404 source.bottom = 128;
2405 D3DXVECTOR3 tempvec;
2415 tempcolor = 0xFFFFFFFF;
2417 tempcolor = 0xFFA0A0A0;
2426 rect.top -= 32; rect.bottom -= 32;
2435 rect.top += 32; rect.bottom += 32;
2440 if (
icon[t].mouseover)
2442 if (
icon[t].dialog > -1)
2446 if (
icon[t].dialog == -1)
2453 else if (
icon[t].dialog == -2)
2483 rect.top = 0; rect.bottom = 32;
2485 rect.right = rect.left + 32;
2493 rect.right = rect.bottom = 0;
2502 rect.right = rect.bottom = 0;
2504 swprintf_s(verbiage, 99, L
"Toast ID: %i", -
toastId);
2517 src.top = src.left = 0;
2600 g->
logger->
Log(
"In HMI constructor...");
2607 time_t now = time(
nullptr);
2608 _localtime64_s(&
tm_time, &now);
2658 for (
short t = 0; t < MAX_ONLINEPLAYERS; t++)
2660 ZeroMemory(&
player[t],
sizeof SPlayerData);
2661 player[t].stubbleFreckle = -1;
2664 for (
short t = 0; t < MAX_TAB; t++)
2683 swprintf_s(temp, 16, L
"[VERBIAGE_%i]", t);
2691 const HRESULT hr = SHGetKnownFolderPath(FOLDERID_ProgramData, KF_FLAG_DEFAULT,
nullptr, &str);
2695 char programDataPath[MAX_PATH];
2696 sprintf_s(programDataPath, MAX_PATH,
"%S", str);
2697 const std::string programDataFolder = programDataPath;
2698 char currentWorkingPath[MAX_PATH];
2699 if (!_getcwd(currentWorkingPath, MAX_PATH))
2702 std::string currentWorkingFolder = currentWorkingPath;
2703 isLocal = currentWorkingFolder.find(
"\\Rise Base\\CustomUI") == 2;
2704 isSteam = currentWorkingFolder.find(programDataFolder) != 0 && !
isLocal;
2708 if (SteamAPI_RestartAppIfNecessary(795990))
2710 logger->
Log(
"Working directory is a Steam Library folder but was not launched from Steam... restarting...",
Logger::Fatal);
2713 if (!SteamAPI_Init())
2716 if (!SteamAPI_Init())
2718 logger->
Log(
"The Steam Edition of Rise: The Vieneo Province must be launched from the Steam Client!",
Logger::Fatal);
2732 SteamAPI_Shutdown();
2734 int count1 = 0, count2 = 0;
2735 for (
int t = 0; t < 16384; t++)
2740 if (count1 || count2)
2743 sprintf_s(msg,
sizeof msg,
"My suspicion was correct: %i %i", count1, count2);
2757 float len =
static_cast<float>(wcslen(str));
2758 const int charsToAffect =
static_cast<int>(len * effect);
2759 for (
int i = 0; i < charsToAffect; i++)
2761 const int index =
static_cast<int>(
RandomFloat() * len);
2762 str[index] = 1 +
static_cast<int>(
RandomFloat() * 254.0f);
2771 void CALLBACK
HMI::OnGUIEvent(UINT nEvent,
int nControlID, CDXUTControl*,
void* pUserContext)
2773 HMI* gui =
static_cast<HMI*
>(pUserContext);
2776 sprintf_s(msg,
sizeof(msg),
"HMI::OnGUIEvent(%i) @ displaystage=%i", nControlID, gui->
game->
displaystage);
2797 const QWORD tempmusicleft = BASS_ChannelGetPosition(gui->
sound->
g_pSoundIntro, BASS_POS_BYTE);
2798 if (tempmusicleft == -1)
2800 sprintf_s(msg,
sizeof(msg),
"BASS_ChannelGetPosition: %i", BASS_ErrorGetCode());
2801 gui->
logger->
Log(msg, Logger::Level::Error);
2813 SPacketHuge outpacket;
2816 strcpy_s(outpacket.login.password,
sizeof(outpacket.login.password), gui->
game->
config.
defaultpass);
2817 outpacket.login.unused1 = 0;
2818 outpacket.login.unused2 = 0;
2819 outpacket.login.unused3 = 0;
2820 outpacket.login.unused4 = 0;
2853 system(
"start eula.txt");
2864 if (nEvent == EVENT_COMBOBOX_SELECTION_CHANGED)
2890 swprintf_s(str, 16, L
"%.15s", gui->
g_HUD.GetEditBox(nControlID)->GetText());
2891 gui->
g_HUD.GetEditBox(nControlID)->SetText(str);
2898 D3DXCreateBuffer(65536, &gui->
pBuffer);
2900 LPDIRECT3DSURFACE9 pSurface;
2901 DXUTGetD3D9Device()->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSurface);
2907 D3DXSaveSurfaceToFileInMemory(&gui->
pBuffer, D3DXIFF_JPG, pSurface,
nullptr, &rect);
2908 SAFE_RELEASE(pSurface);
2958 swprintf_s(str, 13, L
"%.12s", gui->
g_HUD.GetEditBox(
IDC_HANDLE)->GetText());
2989 swprintf_s(str, 3, L
"%.2s", gui->
g_HUD.GetEditBox(
IDC_AGE)->GetText());
2990 if (str[0] && str[1])
2992 int val = _wtoi(str);
2995 gui->
age = (
static_cast<float>(val) - 18.0f) / 62.0f;
3004 swprintf_s(str, 4, L
"%.3s", gui->
g_HUD.GetEditBox(nControlID)->GetText());
3005 gui->
g_HUD.GetEditBox(nControlID)->SetText(str);
3027 gui->
logger->
Log(
"Reversed to STATUS_LOGIN");
3040 if (!GetWindowRect(DXUTGetHWND(), &rect))
3042 sprintf_s(msg, 99,
"Error in GetWindowRect: %d", GetLastError());
3050 sprintf_s(msg, 99,
"Error in MoveWindow: %d", GetLastError());
3054 DXUTReset3DEnvironment();
3056 gui->
g_HUD.RemoveAllControls();
3069 SClientPacket outpacket;
3072 outpacket.f_x = 1.0f;
3074 outpacket.f_x = 2.0f;
3076 outpacket.f_x = 0.0f;
3077 outpacket.f_y = (gui->
handleValid == 2) ? 0.0f : 1.0f;
3078 outpacket.f_z = 0.0f;
3079 outpacket.f_w = 0.0f;
3081 gui->
txbuffer +=
sizeof(SClientPacket);
3106 SPacketHuge outpacket;
3108 sprintf_s(outpacket.subscribe.handle,
sizeof(outpacket.subscribe.handle),
"%.12S", gui->
g_HUD.GetEditBox(
IDC_HANDLE)->GetText());
3110 sprintf_s(outpacket.subscribe.password,
sizeof(outpacket.subscribe.password),
"%.15S", gui->
g_HUD.GetEditBox(
IDC_PASSWORD)->GetText());
3112 sprintf_s(outpacket.subscribe.referrer,
sizeof(outpacket.subscribe.referrer),
"%.12S", gui->
g_HUD.GetEditBox(
IDC_REFERRAL)->GetText());
3113 sprintf_s(outpacket.subscribe.characterName,
sizeof(outpacket.subscribe.characterName),
"%.29S", gui->
g_HUD.GetEditBox(
IDC_CHARNAME)->GetText());
3114 sprintf_s(outpacket.subscribe.email,
sizeof(outpacket.subscribe.email),
"%.31S", gui->
g_HUD.GetEditBox(
IDC_EMAILADDRESS)->GetText());
3116 outpacket.subscribe.age =
static_cast<unsigned char>(_wtoi(gui->
g_HUD.GetEditBox(
IDC_AGE)->GetText()));
3117 outpacket.subscribe.context = 0;
3118 outpacket.subscribe.eargroup =
static_cast<short>(gui->
g_HUD.GetSlider(
IDC_EARS)->GetValue());
3119 outpacket.subscribe.eyecolor =
static_cast<unsigned char>(gui->
g_HUD.GetComboBox(
IDC_EYECOLOR)->GetSelectedIndex()) + 1;
3120 outpacket.subscribe.facialhair =
static_cast<short>(gui->
g_HUD.GetSlider(
IDC_FEATURE)->GetValue());
3121 outpacket.subscribe.framegroup =
static_cast<short>(gui->
g_HUD.GetSlider(
IDC_FRAMETYPE)->GetValue());
3122 outpacket.subscribe.haircolor =
static_cast<unsigned char>(gui->
g_HUD.GetComboBox(
IDC_HAIRCOLOR)->GetSelectedIndex()) + 1;
3123 outpacket.subscribe.hairgroup =
static_cast<short>(gui->
g_HUD.GetSlider(
IDC_HAIRSTYLE)->GetValue());
3124 outpacket.subscribe.headgroup =
static_cast<short>(gui->
g_HUD.GetSlider(
IDC_HEAD)->GetValue());
3125 outpacket.subscribe.heightCm =
static_cast<unsigned char>(_wtoi(gui->
g_HUD.GetEditBox(
IDC_HEIGHT)->GetText()));
3126 outpacket.subscribe.jawline =
static_cast<short>(gui->
g_HUD.GetSlider(
IDC_JAWLINE)->GetValue());
3127 outpacket.subscribe.nosegroup =
static_cast<short>(gui->
g_HUD.GetSlider(
IDC_NOSE)->GetValue());
3128 outpacket.subscribe.sex = sex;
3129 outpacket.subscribe.skincolor =
static_cast<unsigned char>(gui->
g_HUD.GetSlider(
IDC_SKINCOLOR)->GetValue());
3130 outpacket.subscribe.skintone =
static_cast<unsigned char>(gui->
g_HUD.GetSlider(
IDC_SKINTONE)->GetValue());
3131 outpacket.subscribe.stubbleFreckle =
static_cast<unsigned char>(gui->
g_HUD.GetSlider(
IDC_STUBBLEFRECKLE)->GetValue());
3133 outpacket.subscribe.vision = 1;
3135 outpacket.subscribe.vision = 2;
3137 outpacket.subscribe.vision = 3;
3138 outpacket.subscribe.weight = static_cast<unsigned char>(_wtoi(gui->
g_HUD.GetEditBox(
IDC_WEIGHT)->GetText()));
3142 if (!outpacket.subscribe.handle[0])
3144 gui->
logger->
Log(
"User got here trying to submit a form with a blank handle!?", Logger::Level::Error);
3147 if (!outpacket.subscribe.email[0])
3149 gui->
logger->
Log(
"User got here trying to submit a form with a blank email!?", Logger::Level::Error);
3160 outpacket.subscribe.addrequest =
false;
3163 outpacket.subscribe.addrequest =
true;
3168 gui->
txbuffer +=
sizeof(SPacketHuge);
3171 strcpy_s(gui->
player[gui->
ourplayerC].characterName, 30, outpacket.subscribe.characterName);
3172 strcpy_s(gui->
player[gui->
ourplayerC].email, 32, outpacket.subscribe.email);
3205 D3DXQUATERNION quaternionTemp;
3206 D3DXQuaternionRotationYawPitchRoll(&quaternionTemp, 0.0f, 0.0f, D3DX_PI);
3225 switch (displaystage)
3306 logger->
Log(
"Loading GUI Textures (Managed)");
3375 if (
player[arrayindex].online)
3378 swprintf_s(str, 199, L
"Player logged off %S",
player[arrayindex].extraText);
3383 player[arrayindex].online =
false;
3384 player[arrayindex].callsign[0] = 0;
3402 logger->
Log(
"Could be this is the problem with blank callsignY2Y2?", Logger::Level::Debug);
3454 sprintf_s(msg,
sizeof(msg),
"Got new owner %i for tab %i channel %i", playerindex, tab,
chatchannel[tab].channel);
3484 for (
size_t i = 0; i < wcslen(msg); i++)
3492 sprintf_s(callsign, 13,
"%.*S", i, msg);
3513 for (
short t = 0; t < MAX_TAB; t++)
3518 if (playerindex < MAX_ONLINEPLAYERS)
3520 for (
short s = 0; s < MAX_ONLINEPLAYERS; s++)
3527 logger->
Log(
"AddChatMessage was disallowed due to DND");
3529 s = MAX_ONLINEPLAYERS;
3541 logger->
Log(
"AddChatMessage was non-tokenized");
3546 memcpy_s(&waypoint,
sizeof(Swaypoint), &msg[2],
sizeof(Swaypoint));
3548 tokenchatline[0] = msg[0];
3549 tokenchatline[1] = msg[1];
3550 memcpy_s(&tokenchatline[2],
STORE_CHAT_SIZE, &waypoint,
sizeof(Swaypoint));
3553 logger->
Log(
"AddChatMessage was tokenized");
3555 if (playerindex == 254)
3557 else if (playerindex == 255)
3566 sprintf_s(charmsg, 999,
"%S", msg);
3588 int sex, serial, rank, context, joined;
3589 const int count = sscanf_s(msg,
"%d,%[^,],%d,%d,%d,%d,%[^\n,],%[^\n]",
3591 player[playerindex].callsign,
sizeof(
player[playerindex].callsign),
3596 player[playerindex].characterName,
sizeof(
player[playerindex].characterName),
3597 player[playerindex].extraText,
sizeof player[playerindex].extraText);
3599 player[playerindex].extraText[0] = 0;
3601 player[playerindex].sex =
static_cast<char>(sex);
3602 player[playerindex].context =
static_cast<char>(context);
3603 player[playerindex].rank =
static_cast<char>(rank);
3605 player[playerindex].serial =
static_cast<unsigned short>(serial);
3606 player[playerindex].createdate =
static_cast<time_t
>(joined);
3609 if (!
player[playerindex].online)
3612 swprintf_s(str, 199, L
"Player logged on %S",
player[playerindex].extraText);
3628 player[playerindex].online =
true;
3632 logger->
Log(
"Could be this is the problem with blank callsign?", Logger::Level::Debug);
3641 int i_temp1, i_temp2, i_temp3, i_temp4, i_temp5, i_temp6;
3642 sscanf_s(msg,
"%[^,],%d,%d,%d,%d,%d,%d",
3643 player[playerindex].allianceName,
sizeof player[playerindex].allianceName, &i_temp1, &i_temp2, &i_temp3, &i_temp4, &i_temp5, &i_temp6);
3644 player[playerindex].allianceHeadId =
static_cast<unsigned short>(i_temp1);
3645 if (!
player[playerindex].allianceHeadId)
3646 player[playerindex].allianceName[0] = 0;
3647 player[playerindex].alignment =
static_cast<char>(i_temp3);
3654 strcpy_s(playerData.allianceName,
sizeof playerData.allianceName,
player[playerindex].allianceName);
3655 playerData.allianceHeadId =
player[playerindex].allianceHeadId;
3657 if (playerData.alignment !=
player[playerindex].alignment)
3659 playerData.alignment =
player[playerindex].alignment;
3660 for (t = 0; t < MAX_SCAN; t++)
3686 sprintf_s(msg,
sizeof(msg),
"Got new title for channel %i: %s", channelId, title);
3688 for (
short t = 1; t < MAX_TAB; t++)
3692 sprintf_s(msg,
sizeof(msg),
"Found tab %i for channel %i title change!", t, channelId);
3694 swprintf_s(
chatchannel[t].title, MAX_TAB_CHARS - 5, L
"%S", title);
3703 void HMI::ChannelInvite(
char* title,
unsigned char whoinvited,
unsigned char channel,
unsigned char players)
const 3706 sprintf_s(msg,
sizeof(msg),
"Got new invite for channel %i player %i: %s", channel, whoinvited, title);
3755 if (d.characterName[0] && d.email[0] &&
3756 d.eargroup && d.eyecolor && d.facialhair && d.framegroup &&
3757 d.haircolor && d.hairgroup && d.headgroup && d.heightCm &&
3758 d.jawline && d.nosegroup && d.skincolor && d.skintone &&
3759 d.vision && d.age && d.hasAvatar && d.sex && d.weight && d.stubbleFreckle != -1 && !d.revisitImmigration)
3765 logger->
Log(
"Leaving DisplayImmigration(): complete profile");
3771 logger->
Log(
"Advancing displaystage: STATUS_CREATE");
3780 g_HUD.RemoveAllControls();
3783 g_HUD.SetScale(1.0f);
3784 g_HUD.EnableKeyboardInput(
true);
3804 g_HUD.GetStatic(
IDC_FORMTEXT)->GetElement(0)->SetFont(2, 0xFF5f5f5d, DT_RIGHT | DT_WORDBREAK | DT_BOTTOM);
3812 g_HUD.GetComboBox(
IDC_LANGUAGE)->GetElement(0)->FontColor.Init(0xFF000000, 0xFF000000);
3819 g_HUD.GetStatic(
IDC_SEX)->GetElement(0)->SetFont(1, 0xFF5f5f5d, DT_LEFT);
3858 g_HUD.GetStatic(
IDC_AGETEXT)->GetElement(0)->SetFont(1, 0xFF5f5f5d, DT_LEFT);
3876 g_HUD.GetComboBox(
IDC_HAIRCOLOR)->GetElement(0)->FontColor.Init(0xFF000000, 0xFF000000);
3879 for (
int i = 0; i < 24; i++)
3901 g_HUD.GetComboBox(
IDC_EYECOLOR)->GetElement(0)->FontColor.Init(0xFF000000, 0xFF000000);
3904 for (
int i = 0; i < 6; i++)
3916 g_HUD.GetStatic(
IDC_VISION)->GetElement(0)->SetFont(1, 0xFF5f5f5d, DT_LEFT);
3917 const int randomVision = rand() % 3 + 1;
3938 g_HUD.GetStatic(
IDC_JAWTEXT)->GetElement(0)->SetFont(1, 0xFF5f5f5d, DT_LEFT);
3960 const int randomStubble = rand() % 101;
3985 g_HUD.GetStatic(
IDC_PROOF)->GetElement(0)->SetFont(1, 0xFF5f5f5d, DT_LEFT);
4001 _localtime64_s(&
tm_time, <ime);
4002 swprintf_s(str, 99, L
"%02i/%02i/%04i",
tm_time.tm_mon + 1,
tm_time.tm_mday,
tm_time.tm_year + 1900 + 225);
4023 if (!GetWindowRect(DXUTGetHWND(), &rect))
4026 sprintf_s(msg, 99,
"Error in GetWindowRect: %d", GetLastError());
4033 const int y =
static_cast<int>(rect.top - (705.0f - 500.0f) * 0.5f *
game->
displayscale);
4035 if (!MoveWindow(DXUTGetHWND(), rect.left, y, width,
height,
true))
4038 sprintf_s(msg, 99,
"Error in MoveWindow: %d", GetLastError());
4042 DXUTReset3DEnvironment();
4050 logger->
Log(
"DisplayImmigration() exit!");
4059 D3DXVECTOR3 tempvec = D3DXVECTOR3(2, 2, 0);
4060 g_pTextSprite->Draw(*tex,
nullptr,
nullptr, &tempvec, 0xFFFFFFFF);
4064 D3DXVECTOR3 tempvec = D3DXVECTOR3(20, 2, 0);
4065 g_pTextSprite->Draw(*tex,
nullptr,
nullptr, &tempvec, 0xFFFFFFFF);
4077 D3DXVECTOR3 tempvec;
4081 DWORD tempcolor = 0;
4085 tempcolor = 0xFFFF9A9C;
4087 tempcolor = 0xFFFDFB43;
4092 rect.left = 194; rect.top = 144; rect.right = 298; rect.bottom = 175;
4093 tempvec = D3DXVECTOR3(194, 144, 0);
4099 char playername[30];
4104 tempcolor = 0xFF9B9A9C;
4108 tempcolor = 0xFFFF9A9C;
4110 tempcolor = 0xFFFDFB43;
4116 rect.left = 299; rect.top = 144; rect.right = 672; rect.bottom = 175;
4117 tempvec = D3DXVECTOR3(299, 144, 0);
4128 tempcolor = 0xFF9B9A9C;
4132 tempcolor = 0xFFFF9A9C;
4134 tempcolor = 0xFFFDFB43;
4140 rect.left = 194; rect.top = 208; rect.right = 542; rect.bottom = 239;
4141 tempvec = D3DXVECTOR3(194, 208, 0);
4148 sprintf_s(callsign, 16,
"%.15S",
g_HUD.GetEditBox(
IDC_HANDLE)->GetText());
4152 tempcolor = 0xFF9B9A9C;
4156 tempcolor = 0xFFFF9A9C;
4158 tempcolor = 0xFFFDFB43;
4164 rect.left = 194; rect.top = 176; rect.right = 349; rect.bottom = 207;
4165 tempvec = D3DXVECTOR3(194, 176, 0);
4176 tempcolor = 0xFFFF9A9C;
4178 tempcolor = 0xFFFDFB43;
4183 rect.left = 350; rect.top = 176; rect.right = 509; rect.bottom = 207;
4184 tempvec = D3DXVECTOR3(350, 176, 0);
4192 if (_strcmpi(password, confirm) != 0 || !confirm[0])
4195 tempcolor = 0xFFFF9A9C;
4200 rect.left = 510; rect.top = 176; rect.right = 672; rect.bottom = 207;
4201 tempvec = D3DXVECTOR3(510, 176, 0);
4210 tempcolor = 0xFFFF9A9C;
4212 tempcolor = 0xFFFDFB43;
4217 rect.left = 33; rect.top = 255; rect.right = 193; rect.bottom = 415;
4218 tempvec = D3DXVECTOR3(33, 255, 0);
4223 char referredby[13];
4228 if (referredby[0] && _strcmpi(callsign, referredby) == 0)
4238 tempcolor = 0xFF9B9A9C;
4242 tempcolor = 0xFFFF9A9C;
4244 tempcolor = 0xFFFDFB43;
4250 rect.left = 194; rect.top = 433; rect.right = 349; rect.bottom = 464;
4251 tempvec = D3DXVECTOR3(194, 433, 0);
4263 swprintf_s(wcdefault, 4, L
"%.2s",
g_HUD.GetEditBox(
IDC_AGE)->GetText());
4264 if (_wtoi(wcdefault) < 18 || _wtoi(wcdefault) > 80)
4267 tempcolor = 0xFFFF9A9C;
4269 tempcolor = 0xFFFDFB43;
4274 rect.left = 543; rect.top = 208; rect.right = 606; rect.bottom = 239;
4275 tempvec = D3DXVECTOR3(543, 208, 0);
4281 swprintf_s(wcdefault, 4, L
"%.3s",
g_HUD.GetEditBox(
IDC_WEIGHT)->GetText());
4285 tempcolor = 0xFFFF9A9C;
4287 tempcolor = 0xFFFDFB43;
4292 rect.left = 607; rect.top = 208; rect.right = 672; rect.bottom = 239;
4293 tempvec = D3DXVECTOR3(607, 208, 0);
4299 swprintf_s(wcdefault, 4, L
"%.3s",
g_HUD.GetEditBox(
IDC_HEIGHT)->GetText());
4303 tempcolor = 0xFFFF9A9C;
4305 tempcolor = 0xFFFDFB43;
4310 rect.left = 194; rect.top = 240; rect.right = 257; rect.bottom = 271;
4311 tempvec = D3DXVECTOR3(194, 240, 0);
4322 tempcolor = 0xFFFF9A9C;
4324 tempcolor = 0xFFFDFB43;
4329 rect.left = 194; rect.top = 176 + 128; rect.right = 349 + 83; rect.bottom = 207 + 128;
4330 tempvec = D3DXVECTOR3(194, 176 + 128, 0);
4335 WCHAR wcdefault3[99], wcdefault4[99];
4339 if (wcscmp(wcdefault3, wcdefault4) != 0 || !wcdefault3[0] || !wcdefault4[0])
4342 tempcolor = 0xFFFF9A9C;
4344 tempcolor = 0xFFFDFB43;
4349 rect.left = 33; rect.top = 656; rect.right = 672; rect.bottom = 689;
4350 tempvec = D3DXVECTOR3(33, 656, 0);
4366 _sopen_s(&skinColorFile,
"Textures\\People\\skincolors.bmp", _O_RDONLY | O_BINARY, _SH_DENYWR, _S_IWRITE);
4367 if (skinColorFile == -1)
4368 logger->
Log(
"Could not find file: Textures\\People\\skincolors.bmp", Logger::Level::Fatal);
4369 unsigned char uch_tempR, uch_tempG, uch_tempB;
4370 unsigned long bpr = 256L * 3L;
4371 unsigned long k = 54L + melanin * 3L + (256L - hemoglobin - 1L) * bpr;
4372 _lseek(skinColorFile, k, SEEK_SET);
4373 _read(skinColorFile, &uch_tempB, 1);
4374 _read(skinColorFile, &uch_tempG, 1);
4375 _read(skinColorFile, &uch_tempR, 1);
4376 _close(skinColorFile);
4377 skintone = D3DCOLOR_ARGB(255, uch_tempR, uch_tempG, uch_tempB);
4380 swprintf_s(str, 99, L
"%.2f", hemoglobin / 255.0f * 0.32f);
4381 rect.left = 211; rect.top = 285;
4383 swprintf_s(str, 99, L
"%03i",
g_HUD.GetSlider(
IDC_HEAD)->GetValue());
4384 rect.left = 211; rect.top = 349;
4386 swprintf_s(str, 99, L
"%03i",
g_HUD.GetSlider(
IDC_NOSE)->GetValue());
4387 rect.left = 211; rect.top = 381;
4390 rect.left = 211; rect.top = 413;
4393 swprintf_s(str, 99, L
"%.2f", melanin / 255.0f * 0.5f);
4394 rect.left = 449; rect.top = 285;
4399 swprintf_s(str, 99, L
"%03i", 450);
4400 rect.left = 449; rect.top = 317;
4403 rect.left = 449; rect.top = 349;
4405 swprintf_s(str, 99, L
"%03i",
g_HUD.GetSlider(
IDC_EARS)->GetValue());
4406 rect.left = 449; rect.top = 381;
4409 rect.left = 449; rect.top = 413;
4412 rect.left = 449; rect.top = 445;
4420 D3DXCOLOR tempcolor;
4423 index = rand() % 24 + 1;
4428 case 1: tempcolor = 0xFF090806;
break;
4429 case 2: tempcolor = 0xFF2C222B;
break;
4430 case 3: tempcolor = 0xFF3B3024;
break;
4431 case 4: tempcolor = 0xFF4E433F;
break;
4432 case 5: tempcolor = 0xFF504444;
break;
4433 case 6: tempcolor = 0xFF6A4E42;
break;
4434 case 7: tempcolor = 0xFF554838;
break;
4435 case 8: tempcolor = 0xFFA7856A;
break;
4436 case 9: tempcolor = 0xFFB89778;
break;
4437 case 10: tempcolor = 0xFFDCD0BA;
break;
4438 case 11: tempcolor = 0xFFDEBC99;
break;
4439 case 12: tempcolor = 0xFF977961;
break;
4440 case 13: tempcolor = 0xFFE6CEA8;
break;
4441 case 14: tempcolor = 0xFFE5C8A8;
break;
4442 case 15: tempcolor = 0xFFA56B46;
break;
4443 case 16: tempcolor = 0xFF91553D;
break;
4444 case 17: tempcolor = 0xFF533D32;
break;
4445 case 18: tempcolor = 0xFF71635A;
break;
4446 case 19: tempcolor = 0xFFB7A69E;
break;
4447 case 20: tempcolor = 0xFFD6C4C2;
break;
4448 case 21: tempcolor = 0xFFFFF5E1;
break;
4449 case 22: tempcolor = 0xFFCABFB1;
break;
4450 case 23: tempcolor = 0xFF8D4A43;
break;
4451 case 24: tempcolor = 0xFFB55239;
break;
4452 default: tempcolor = D3DXCOLOR(0, 0, 0, 0);
break;
4459 D3DXCOLOR tempcolor;
4462 index = rand() % 6 + 1;
4468 case 1: tempcolor = 0xFFB98A32;
break;
4469 case 2: tempcolor = 0xFF9E6C37;
break;
4470 case 3: tempcolor = 0xFFD0B42C;
break;
4471 case 4: tempcolor = 0xFF5C932D;
break;
4472 case 5: tempcolor = 0xFF4C5596;
break;
4473 case 6: tempcolor = 0xFF908293;
break;
4484 fade += fElapsedTime / 6.0f;
4525 else if ((rand() % 500) == 0)
4568 else if (rand() % 5 == 0)
void LoadDIX(const char *prmFilename)
LPDIRECT3DTEXTURE9 m_pddsGUIInterlace
long ResidesLocally(unsigned short serial) const
Sicons icon[(D_ENUMERATION+1)]
static void InitializeDialog(short t)
HMI(GameClass *g, Networking *n, Sound *s)
bool g_bCheckSteamLanguage
SPlayerData LoadPerson(long temprecord) const
LPDIRECT3DTEXTURE9 m_pddsKeycard
void AddSupportChatMessage(const WCHAR *wmsg)
virtual void UpdateMenu(short tab)
D3DXCOLOR GetHairColorAtIndex(int index)
void ProcessCallsignBox()
void LoadCockpitSound(int soundEnum, const char *path, bool force, SoundConfig *device=nullptr)
LPDIRECT3DTEXTURE9 m_pddsGUIRanks
std::vector< Command > commandStream
void ProcessPasswordBox()
void GetVersionText(WCHAR *, int size) const
std::vector< std::wstring > motd
void SendToServer(void *pData, DWORD dwSize, bool bGuaranteed, PacketOrdering order=ORDERING_NONE) const
LPDIRECT3DTEXTURE9 m_pddsLightningAndBackground[3]
std::vector< std::wstring > chatline
bool MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LPDIRECT3DTEXTURE9 m_pddsGUIActions
D3DXVECTOR3 windowlocation
void ChannelInvite(char *title, unsigned char whoinvited, unsigned char channel, unsigned char players) const
LPDIRECT3DTEXTURE9 m_pddsGUIInterlace2
InformationDialog * informationDialog
void SexChangeOperation(char newsex)
void ShowHelpBubble(const WCHAR *msg) const
void PlayerOffline(unsigned char arrayindex)
void DisplaySnow(IDirect3DDevice9 *pd3dDevice, float fade, float fElapsed)
s_network_objects playerships[MAX_SCAN]
static void Initialize(HMI *gui)
SoundConfig soundConfigLegacy
float RollAttitudeRadians
LPDIRECT3DTEXTURE9 m_pddsToast
LPDIRECT3DTEXTURE9 m_pddsToastIcons
D3DXCOLOR GetEyeColorAtIndex(int index)
std::vector< std::wstring > currentToast
LPDIRECT3DVERTEXBUFFER9 VB
LIGHTNINGABOVEGUI lightningabove[ACLlightningguiC]
void SendEvent(EventType eventType, float extent=0.0f) const
CDXUTDialogResourceManager g_DialogResourceManager
std::vector< std::string > chatlineplayer
void DrawRXTXLights(LPDIRECT3DTEXTURE9 *tex) const
void AddChatMessage(WCHAR *msg, unsigned char playerindex, unsigned char channel)
void PlayerLeftChannel(short tab, unsigned char playerindex)
float g_fMouseLastMoveTime
static void CheckDialogMouse()
static DialogBase * dialogs[D_ENUMERATION]
LPDIRECT3DTEXTURE9 m_pddsGUIParts
void AddPlayer(unsigned char tempplayer)
propulsion * ptrPropulsion
void DisplayImmigration(bool refresh)
static void OnDeviceReset()
void GetProgramVersion(int &major, int &minor, int &build, int &revision) const
#define D3DFVF_INSTRUMENT
static short CheckHeight(short t)
static void CALLBACK OnGUIEvent(UINT nEvent, int nControlID, CDXUTControl *pControl, void *pUserContext)
SPlayerData player[MAX_ONLINEPLAYERS]
LPDIRECT3DTEXTURE9 m_pddsCloudBaseMapAndNetwork
void RepairVehicle() const
LPDIRECT3DTEXTURE9 m_pddsGUILateral
void LoadPeopleSounds() const
void FadeIn(float f, float fElapsedTime)
void LoadConfiguration() const
LPDIRECT3DTEXTURE9 m_pddsEasydockAd
static void IconClick(short icon_id)
static short CheckWidth(short dialogid)
void AddPlayer(char *msg, unsigned char playerindex)
void LoadTexture(LPDIRECT3DTEXTURE9 *resource, const std::string &pointerName, const WCHAR *file, D3DFORMAT format=D3DFMT_A8R8G8B8)
void Toast(const WCHAR *message, ActiveHelp activeHelp)
void LightningCalculations(float fElapsedTime)
void TriggerWelcomeApt2() const
const D3DXVECTOR3 centerC
static void RestoreDefaults()
void OnRender(float fElapsedTime, IDirect3DDevice9 *pd3dDevice)
void AddLanguageOptions(UIControlIds controlId, CDXUTDialog *HUD) const
CHATCHANNEL chatchannel[MAX_TAB]
s_polygon_object tempobject
void Log(const char *msg, Level level=Info, int errorCode=0)
void PlayerJoinedChannel(short tab, unsigned char playerindex)
void ChangeChannelName(unsigned char channelId, char *title)
HRESULT OnCreateDevice(IDirect3DDevice9 *pd3dDevice)
float Play(int soundEnum)
void UpdatePresence(const char *prmDetails, const char *prmState, const char *prmLargeImageKey)
ID3DXSprite * g_pTextSprite
static void UpdateScrollBar(short t)
void AddDiscordChatMessage(const WCHAR *msg)
LPDIRECT3DTEXTURE9 m_pddsGUIScrollButton
void OnFrameMove(float fElapsedTime)
void SetPlayerAlignment(char *msg, unsigned char playerindex)
void SavePerson(long temprecord, SPlayerData tempperson) const
void UpdateLoginCreateButtons()
void LoadTextures(GameState displaystage, short loadstage)
InputConfig inputConfigWalkVertical
void AddTrackedResource(const char *name, _D3DPOOL pool=D3DPOOL_MANAGED)
Sscan Get(USHORT vehicleId) const
static void UpdateAllActiveDialogs(float fElapsedTime)
void ChangePlayerProperties(SSubscribeData *prop)
D3DXVECTOR3 windowdefaultlocation
LPDIRECT3DTEXTURE9 m_pddsGUIScroll
std::wstring strings[L_ENUMERATION]
void PlayEx(int soundEnum, bool loop, float volume=1.0f, float frequencyMod=1.0f, float pan=0.0f, bool restart=true)
s_polygon_object LoadDAW(const char *filename) const
void RemovePlayer(short tempplayer)
static short draworder[D_ENUMERATION]
void ChangeChannelOwner(short tab, unsigned char playerindex)
void UpdateTrackedResource(const char *name, int status)
void AddToCallStack(const char *msg)
static void DrawAllActiveDialogs(float fElapsedTime)
void SaveConfiguration() const
void RequestVerbiage(int helpId) const
LPDIRECT3DTEXTURE9 m_pddsAvatar[humantextureC]
InputConfig inputConfigLookLateral
D3DXVECTOR3 windowseeklocation
void GarbleChat(wchar_t *str) const