Mercurial > mm7
annotate UI/UiGame.cpp @ 1487:cb396f55671e
Слияние
author | Ritor1 |
---|---|
date | Thu, 29 Aug 2013 22:02:00 +0600 |
parents | 47c89461be23 7ef4b64f6329 |
children | ab6bf38b2940 |
rev | line source |
---|---|
1298 | 1 #ifdef _MSC_VER |
2 #define _CRT_SECURE_NO_WARNINGS | |
3 #endif | |
4 | |
5 #include <assert.h> | |
6 | |
1299 | 7 #include "..\Texture.h" |
8 #include "..\MM7.h" | |
1298 | 9 |
1299 | 10 #include "..\Mouse.h" |
11 #include "..\Keyboard.h" | |
12 #include "..\mm7_data.h" | |
1298 | 13 |
1299 | 14 #include "..\Vis.h" |
15 #include "..\MapInfo.h" | |
16 #include "..\Game.h" | |
17 #include "..\GUIWindow.h" | |
18 #include "..\GUIFont.h" | |
19 #include "..\Party.h" | |
20 #include "..\AudioPlayer.h" | |
21 #include "..\Outdoor.h" | |
22 #include "..\LOD.h" | |
23 #include "..\Actor.h" | |
24 #include "..\Viewport.h" | |
25 #include "..\SpriteObject.h" | |
26 #include "..\ObjectList.h" | |
27 #include "..\DecorationList.h" | |
28 #include "..\PlayerFrameTable.h" | |
29 #include "..\stru123.h" | |
30 #include "..\Time.h" | |
31 #include "..\IconFrameTable.h" | |
32 #include "..\TurnEngine.h" | |
33 #include "..\texts.h" | |
1298 | 34 #include "UIHouses.h" |
1299 | 35 #include "..\BSPModel.h" |
1298 | 36 |
37 | |
38 int uTextureID_GameUI_CharSelectionFrame; // 50C98C | |
39 | |
40 //----- (00421D00) -------------------------------------------------------- | |
41 void __fastcall GameUI_OnPlayerPortraitLeftClick(unsigned int uPlayerID) | |
42 { | |
43 //unsigned int v1; // esi@1 | |
44 //int v2; // eax@2 | |
45 //Player *v3; // ecx@2 | |
46 //Player *v4; // ecx@5 | |
47 unsigned int v5; // [sp-4h] [bp-10h]@21 | |
48 | |
49 //v1 = uPlayerID; | |
50 auto player = &pParty->pPlayers[uPlayerID - 1]; | |
51 if (pParty->pPickedItem.uItemID) | |
52 { | |
53 //v3 = player; | |
54 if (auto slot = player->AddItem(-1, pParty->pPickedItem.uItemID)) | |
55 { | |
1384
b51332ab228f
changed a few member variables in Player to slightly less confusing names
Grumpy7
parents:
1362
diff
changeset
|
56 memcpy(&player->pInventoryItemList[slot-1], &pParty->pPickedItem, 0x24u); |
1298 | 57 viewparams->bRedrawGameUI = true; |
58 pMouse->RemoveHoldingItem(); | |
59 return; | |
60 } | |
61 | |
62 if (!player->CanAct()) | |
63 { | |
64 player = pPlayers[uActiveCharacter]; | |
65 } | |
66 if(player->CanAct() || !pPlayers[uActiveCharacter]->CanAct()) | |
67 player->PlaySound(SPEECH_NoRoom, 0); | |
68 } | |
69 | |
70 //LABEL_9: | |
71 if (pCurrentScreen == SCREEN_GAME) | |
72 { | |
73 viewparams->bRedrawGameUI = true; | |
74 if ( uActiveCharacter != uPlayerID ) | |
75 //goto LABEL_27; | |
76 { | |
77 if ( pPlayers[uPlayerID]->uTimeToRecovery ) | |
78 return; | |
79 | |
80 uActiveCharacter = uPlayerID; | |
81 return; | |
82 } | |
83 v5 = 7; | |
84 //LABEL_22: | |
85 pGUIWindow_CurrentMenu = CharacterUI_Initialize(v5); | |
86 return; | |
87 } | |
88 if ( pCurrentScreen == SCREEN_SPELL_BOOK ) | |
89 return; | |
90 if ( pCurrentScreen == SCREEN_CHEST ) | |
91 { | |
92 //LABEL_23: | |
93 viewparams->bRedrawGameUI = true; | |
94 if ( uActiveCharacter == uPlayerID ) | |
95 { | |
96 pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; | |
97 pCurrentScreen = SCREEN_CHEST_INVENTORY; | |
98 //goto LABEL_28; | |
99 uActiveCharacter = uPlayerID; | |
100 return; | |
101 } | |
102 //LABEL_27: | |
103 if ( pPlayers[uPlayerID]->uTimeToRecovery ) | |
104 return; | |
105 //goto LABEL_28; | |
106 uActiveCharacter = uPlayerID; | |
107 return; | |
108 } | |
109 if ( pCurrentScreen != SCREEN_HOUSE ) | |
110 { | |
111 if ( pCurrentScreen == SCREEN_E ) | |
112 { | |
113 //LABEL_28: | |
114 uActiveCharacter = uPlayerID; | |
115 return; | |
116 } | |
117 if ( pCurrentScreen != SCREEN_CHEST_INVENTORY ) | |
118 { | |
119 viewparams->bRedrawGameUI = true; | |
120 uActiveCharacter = uPlayerID; | |
121 if ( pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] == 102 ) | |
122 FillAwardsData(); | |
123 return; | |
124 } | |
125 //goto LABEL_23; | |
126 viewparams->bRedrawGameUI = true; | |
127 if ( uActiveCharacter == uPlayerID ) | |
128 { | |
129 pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; | |
130 pCurrentScreen = SCREEN_CHEST_INVENTORY; | |
131 //goto LABEL_28; | |
132 uActiveCharacter = uPlayerID; | |
133 return; | |
134 } | |
135 //LABEL_27: | |
136 if ( pPlayers[uPlayerID]->uTimeToRecovery ) | |
137 return; | |
138 //goto LABEL_28; | |
139 uActiveCharacter = uPlayerID; | |
140 return; | |
141 } | |
142 if ( window_SpeakInHouse->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS) | |
143 return; | |
144 viewparams->bRedrawGameUI = true; | |
145 if ( uActiveCharacter != uPlayerID ) | |
146 //goto LABEL_28; | |
147 uActiveCharacter = uPlayerID; | |
148 return; | |
149 if (dialog_menu_id == HOUSE_DIALOGUE_SHOP_BUY_STANDARD || dialog_menu_id == HOUSE_DIALOGUE_SHOP_6) | |
150 { | |
151 __debugbreak(); // fix indexing | |
152 pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; | |
153 v5 = 14; | |
154 //goto LABEL_22; | |
155 pGUIWindow_CurrentMenu = CharacterUI_Initialize(v5); | |
156 return; | |
157 } | |
158 } | |
159 // 4E28F8: using guessed type int pCurrentScreen; | |
160 // F8B19C: using guessed type int dword_F8B19C; | |
161 | |
162 //----- (00416B01) -------------------------------------------------------- | |
163 void GameUI_DrawNPCPopup(void *_this)//PopupWindowForBenefitAndJoinText | |
164 { | |
165 int v1; // edi@2 | |
166 int v2; // ecx@2 | |
167 NPCData *v3; // eax@2 | |
168 NPCData *v4; // esi@7 | |
169 NPCData *v5; // eax@16 | |
170 NPCData *v6; // esi@16 | |
171 const CHAR *v7; // eax@18 | |
172 unsigned int v8; // eax@25 | |
173 unsigned int v9; // eax@25 | |
174 const char *v10; // ST14_4@26 | |
175 char *v11; // esi@26 | |
176 const char *v12; // ST18_4@27 | |
177 unsigned __int16 v13; // ax@28 | |
178 char *v14; // eax@28 | |
179 GUIWindow a1; // [sp+Ch] [bp-60h]@23 | |
180 int a2; // [sp+60h] [bp-Ch]@16 | |
181 void *v17; // [sp+64h] [bp-8h]@1 | |
182 LPCSTR lpsz; // [sp+68h] [bp-4h]@6 | |
183 | |
184 v17 = _this; | |
185 if ( bNoNPCHiring != 1 ) | |
186 { | |
187 v1 = 0; | |
188 v2 = 0; | |
189 v3 = pParty->pHirelings; | |
190 /*do | |
191 { | |
192 if ( v3->pName ) | |
193 pTmpBuf[v1++] = v2; | |
194 ++v3; | |
195 ++v2; | |
196 } | |
197 while ( (signed int)v3 < (signed int)&pParty->pPickedItem );*/ | |
198 for (int i = 0; i < 2; ++i) | |
199 { | |
200 if (pParty->pHirelings[i].pName) | |
201 pTmpBuf[v1++] = i; | |
202 } | |
203 lpsz = 0; | |
204 if ( (signed int)pNPCStats->uNumNewNPCs > 0 ) | |
205 { | |
206 /*v4 = pNPCStats->pNewNPCData; | |
207 do | |
208 { | |
209 if ( v4->uFlags & 0x80 | |
210 && (!pParty->pHirelings[0].pName || strcmp(v4->pName, pParty->pHirelings[0].pName)) | |
211 && (!pParty->pHirelings[1].pName || strcmp(v4->pName, pParty->pHirelings[1].pName)) ) | |
212 pTmpBuf[v1++] = (char)lpsz + 2; | |
213 ++lpsz; | |
214 ++v4; | |
215 } | |
216 while ( (signed int)lpsz < (signed int)pNPCStats->uNumNewNPCs );*/ | |
217 for (int i = 0; i < pNPCStats->uNumNewNPCs; ++i) | |
218 { | |
219 if (pNPCStats->pNewNPCData[i].Hired()) | |
220 { | |
221 if (!pParty->pHirelings[0].pName || strcmp((char *)pNPCStats->pNewNPCData[i].pName, (char *)pParty->pHirelings[0].pName)) | |
222 { | |
223 if (!pParty->pHirelings[1].pName || strcmp((char *)pNPCStats->pNewNPCData[i].pName, (char *)pParty->pHirelings[1].pName)) | |
224 pTmpBuf[v1++] = i + 2; | |
225 } | |
226 } | |
227 } | |
228 } | |
229 if ( (signed int)((char *)v17 + (unsigned __int8)pParty->field_709) < v1 ) | |
230 { | |
231 sDialogue_SpeakingActorNPC_ID = -1 - (unsigned __int8)pParty->field_709 - (int)v17; | |
232 v5 = GetNewNPCData(sDialogue_SpeakingActorNPC_ID, &a2); | |
233 v6 = v5; | |
234 if ( v5 ) | |
235 { | |
236 if ( a2 == 57 ) | |
237 v7 = pNPCTopics[512].pText; // Baby dragon | |
238 else | |
239 v7 = (const CHAR *)pNPCStats->pProfessions[v5->uProfession].pBenefits; | |
240 lpsz = v7; | |
241 if ( !v7 ) | |
242 { | |
243 lpsz = (LPCSTR)pNPCStats->pProfessions[v5->uProfession].pJoinText; | |
244 if ( !lpsz ) | |
245 lpsz = ""; | |
246 } | |
247 a1.Hint = 0; | |
248 a1.uFrameX = 38; | |
249 a1.uFrameY = 60; | |
250 a1.uFrameWidth = 276; | |
251 a1.uFrameZ = 313; | |
252 a1.uFrameHeight = pFontArrus->CalcTextHeight(lpsz, &a1, 0, 0) | |
253 + 2 * LOBYTE(pFontArrus->uFontHeight) | |
254 + 24; | |
255 if ( (signed int)a1.uFrameHeight < 130 ) | |
256 a1.uFrameHeight = 130; | |
257 a1.uFrameWidth = 400; | |
258 a1.uFrameZ = a1.uFrameX + 399; | |
259 a1.DrawMessageBox(0); | |
260 sprintfex(pTmpBuf2.data(), "NPC%03d", v6->uPortraitID); | |
261 v8 = pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE); | |
262 pRenderer->DrawTextureIndexed( | |
263 a1.uFrameX + 22, | |
264 a1.uFrameY + 36, | |
265 (Texture *)(v8 != -1 ? &pIcons_LOD->pTextures[v8] : 0)); | |
266 v9 = v6->uProfession; | |
267 if ( v9 ) | |
268 { | |
269 v10 = v6->pName; | |
270 v11 = pTmpBuf.data(); | |
271 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[429], v10, aNPCProfessionNames[v9]); | |
272 } | |
273 else | |
274 { | |
275 v12 = v6->pName; | |
276 v11 = pTmpBuf.data(); | |
277 strcpy(pTmpBuf.data(), v12); | |
278 } | |
279 v13 = TargetColor(0xFFu, 0xFFu, 0x9Bu); | |
280 a1.DrawTitleText(pFontArrus, 0, 0xCu, v13, v11, 3u); | |
281 a1.uFrameWidth -= 24; | |
282 a1.uFrameZ = a1.uFrameX + a1.uFrameWidth - 1; | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1407
diff
changeset
|
283 v14 = BuildDialogueString((char *)lpsz, uActiveCharacter - 1, 0, 0, 0, 0); |
1298 | 284 a1.DrawText(pFontArrus, 100, 36, 0, v14, 0, 0, 0); |
285 } | |
286 } | |
287 } | |
288 } | |
289 | |
290 | |
291 | |
292 //----- (00445D4A) -------------------------------------------------------- | |
293 void GameUI_InitializeDialogue(Actor *actor, int bPlayerSaysHello) | |
294 { | |
295 NPCData *pNPCInfo; // ebp@1 | |
296 int v9; // esi@8 | |
297 int pNumberContacts; // eax@11 | |
298 char pContainer[32]; // [sp+14h] [bp-28h]@3 | |
299 | |
300 dword_A74CDC = -1; | |
301 dword_AE336C = -1; | |
302 pEventTimer->Pause(); | |
303 pMiscTimer->Pause(); | |
304 pAudioPlayer->StopChannels(-1, -1); | |
305 uDialogueType = 0; | |
306 sDialogue_SpeakingActorNPC_ID = actor->sNPC_ID; | |
307 pDialogue_SpeakingActor = actor; | |
308 pNPCInfo = GetNPCData(actor->sNPC_ID); | |
309 if ( (pNPCInfo->uFlags & 3) != 2 ) | |
310 pNPCInfo->uFlags = pNPCInfo->uFlags + 1; | |
311 | |
312 switch (pParty->alignment) | |
313 { | |
314 case PartyAlignment_Good: sprintfex(pContainer, "evt%02d-b", const_2()); break; | |
315 case PartyAlignment_Neutral: sprintfex(pContainer, "evt%02d", const_2()); break; | |
316 case PartyAlignment_Evil: sprintfex(pContainer, "evt%02d-c", const_2()); break; | |
317 } | |
318 | |
319 pDialogueNPCCount = 0; | |
320 uNumDialogueNPCPortraits = 1; | |
321 pTexture_Dialogue_Background = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); | |
322 sprintfex(pContainer, "npc%03u", pNPCInfo->uPortraitID); | |
323 v9 = 0; | |
324 pDialogueNPCPortraits[0] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); | |
325 dword_591084 = areWeLoadingTexture; | |
326 uTextureID_right_panel_loop = uTextureID_right_panel; | |
327 if ( !pNPCInfo->Hired() && pNPCInfo->Location2D >= 0 ) | |
328 { | |
329 if ( (signed int)pParty->GetPartyFame() <= pNPCInfo->fame | |
330 || (pNumberContacts = pNPCInfo->uFlags & 0xFFFFFF7F, (pNumberContacts & 0x80000000u) != 0) ) | |
331 { | |
332 v9 = 1; | |
333 } | |
334 else | |
335 { | |
336 if ( pNumberContacts > 1 ) | |
337 { | |
338 if ( pNumberContacts == 2 ) | |
339 { | |
340 v9 = 3; | |
341 } | |
342 else | |
343 { | |
344 if ( pNumberContacts != 3 ) | |
345 { | |
346 if ( pNumberContacts != 4 ) | |
347 v9 = 1; | |
348 } | |
349 else | |
350 { | |
351 v9 = 2; | |
352 } | |
353 } | |
354 } | |
355 else if ( pNPCInfo->rep ) | |
356 { | |
357 v9 = 2; | |
358 } | |
359 } | |
360 } | |
361 if (sDialogue_SpeakingActorNPC_ID < 0) | |
362 v9 = 4; | |
363 pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_Dialogue, v9, 0);//pNumberContacts = 1, v9 = 0; pNumberContacts = 2, v9 = 3; | |
364 if (pNPCInfo->Hired()) | |
365 { | |
366 if ( !pNPCInfo->bHasUsedTheAbility ) | |
367 { | |
368 if ( pNPCInfo->uProfession >= 10 ) | |
369 { | |
370 if ( pNPCInfo->uProfession <= 12 || pNPCInfo->uProfession > 32 && (pNPCInfo->uProfession <= 34 | |
371 || pNPCInfo->uProfession > 38 && (pNPCInfo->uProfession <= 43 || pNPCInfo->uProfession == 52)) ) | |
372 { | |
373 pDialogueWindow->CreateButton(480, 250, 140, LOBYTE(pFontArrus->uFontHeight) - 3, 1, 0, UIMSG_SelectNPCDialogueOption, 9, 0, "", 0); | |
374 pDialogueWindow->_41D08F_set_keyboard_control_group(4, 1, 0, 1); | |
375 } | |
376 } | |
377 } | |
378 } | |
379 | |
380 pDialogueWindow->CreateButton( 61, 424, 31, 40, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0); | |
381 pDialogueWindow->CreateButton(177, 424, 31, 40, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0); | |
382 pDialogueWindow->CreateButton(292, 424, 31, 40, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0); | |
383 pDialogueWindow->CreateButton(407, 424, 31, 40, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0); | |
384 | |
385 if (bPlayerSaysHello && uActiveCharacter && !pNPCInfo->Hired()) | |
386 { | |
387 if (pParty->uCurrentHour < 5 || pParty->uCurrentHour > 21) | |
388 pPlayers[uActiveCharacter]->PlaySound(SPEECH_GoodEvening, 0); | |
389 else | |
390 pPlayers[uActiveCharacter]->PlaySound(SPEECH_GoodDay, 0); | |
391 } | |
392 } | |
393 | |
394 //----- (00445350) -------------------------------------------------------- | |
395 void GameUI_DrawDialogue() | |
396 { | |
397 NPCData *pNPC; // ebx@2 | |
398 int pGreetType; // eax@2 | |
1393 | 399 //unsigned __int16 v2; // di@2 |
1298 | 400 //unsigned int v3; // eax@2 |
401 char *v4; // esi@3 | |
402 //int v5; // eax@11 | |
403 //char *v6; // ecx@13 | |
404 //char *v7; // eax@16 | |
405 //unsigned int v8; // edi@19 | |
406 //char *v9; // ecx@27 | |
407 char *v10; // eax@29 | |
408 //int v11; // eax@30 | |
409 int v12; // esi@39 | |
410 char *v13; // eax@41 | |
411 GUIButton *v14; // eax@43 | |
412 //GUIButton *v15; // edi@43 | |
413 signed int v16; // eax@44 | |
414 //unsigned int v23; // eax@53 | |
415 //const char *v24; // eax@59 | |
416 //unsigned __int16 v30; // cx@83 | |
417 int v31; // ecx@86 | |
418 int v32; // ebx@93 | |
1393 | 419 //unsigned int v33; // eax@93 |
1298 | 420 GUIWindow *v34; // ecx@93 |
421 int v35; // esi@93 | |
422 int i; // eax@93 | |
423 GUIButton *v37; // eax@94 | |
424 int v38; // eax@95 | |
425 signed int v39; // esi@99 | |
426 signed int v40; // eax@102 | |
427 unsigned int v41; // ebx@102 | |
428 int v42; // edi@102 | |
429 GUIButton *v43; // esi@103 | |
430 int v44; // eax@104 | |
431 unsigned int v45; // ecx@104 | |
432 unsigned __int16 *v46; // edx@104 | |
433 unsigned __int16 v47; // ax@104 | |
434 GUIWindow pWindow; // [sp+4h] [bp-110h]@39 | |
435 int v49; // [sp+Ch] [bp-108h]@39 | |
436 int v50; // [sp+14h] [bp-100h]@39 | |
437 GUIWindow v51; // [sp+58h] [bp-BCh]@2 | |
438 GUIWindow v52; // [sp+ACh] [bp-68h]@42 | |
439 char *Str; // [sp+100h] [bp-14h]@104 | |
440 //int v54; // [sp+104h] [bp-10h]@2 | |
441 //unsigned __int16 *v55; // [sp+108h] [bp-Ch]@82 | |
442 GUIFont *pOutString; // [sp+10Ch] [bp-8h]@39 | |
443 char *pInString=NULL; // [sp+110h] [bp-4h]@32 | |
444 | |
445 if ( !pDialogueWindow ) | |
446 return; | |
447 | |
448 memcpy(&v51, pDialogueWindow, sizeof(v51)); | |
449 pNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID); | |
450 pGreetType = GetGreetType(sDialogue_SpeakingActorNPC_ID); | |
451 v51.uFrameWidth -= 10; | |
452 v51.uFrameZ -= 10; | |
453 //v54 = v1; | |
1393 | 454 //TargetColor(0xFFu, 0xFFu, 0xFFu); |
455 //TargetColor(0xE1u, 0xCDu, 0x23u); | |
456 //v2 = TargetColor(0x15u, 0x99u, 0xE9u); | |
1298 | 457 pRenderer->DrawTextureIndexed(477, 0, pTexture_Dialogue_Background); |
458 pRenderer->DrawTextureTransparent(468, 0, (Texture *)(uTextureID_right_panel_loop != -1 ? &pIcons_LOD->pTextures[uTextureID_right_panel_loop] : 0)); | |
459 pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0] - 4, pNPCPortraits_y[0][0] - 4, (Texture *)(uTextureID_50795C != -1 ? &pIcons_LOD->pTextures[uTextureID_50795C] : 0)); | |
460 pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pDialogueNPCPortraits[0]); | |
461 | |
462 if (pNPC->uProfession) | |
463 { | |
464 assert(pNPC->uProfession < sizeof(aNPCProfessionNames) / sizeof(*aNPCProfessionNames.data())); // sometimes buffer overflows; errors emerge both here and in dialogue text | |
465 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[429], pNPC->pName, aNPCProfessionNames[pNPC->uProfession]);//^Pi[%s] %s | |
466 } | |
467 else | |
468 strcpy(pTmpBuf.data(), pNPC->pName); | |
469 | |
1393 | 470 v51.DrawTitleText(pFontArrus, 483, 112, ui_game_dialogue_npc_name_color, pTmpBuf.data(), 3); |
1298 | 471 pParty->GetPartyFame(); |
472 | |
473 pInString = nullptr; | |
474 switch (uDialogueType) | |
475 { | |
476 case DIALOGUE_13: | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1407
diff
changeset
|
477 pInString = BuildDialogueString(pNPCStats->pProfessions[pNPC->uProfession - 1].pJoinText, uActiveCharacter - 1, 0, 0, 0, 0); |
1298 | 478 break; |
479 | |
480 case DIALOGUE_PROFESSION_DETAILS: | |
481 { | |
482 auto prof = pNPCStats->pProfessions + pNPC->uProfession - 1; | |
483 | |
484 if (dialogue_show_profession_details) | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1407
diff
changeset
|
485 pInString = BuildDialogueString(prof->pBenefits, uActiveCharacter - 1, 0, 0, 0, 0); |
1298 | 486 else if (pNPC->Hired()) |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1407
diff
changeset
|
487 pInString = BuildDialogueString(prof->pDismissText, uActiveCharacter - 1, 0, 0, 0, 0); |
1298 | 488 else |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1407
diff
changeset
|
489 pInString = BuildDialogueString(prof->pJoinText, uActiveCharacter - 1, 0, 0, 0, 0); |
1298 | 490 } |
491 break; | |
492 | |
493 | |
494 case DIALOGUE_ARENA_WELCOME: | |
495 pInString = pGlobalTXT_LocalizationStrings[574]; // "Welcome to the Arena of Life and Death. Remember, you are only allowed one arena combat per visit. To fight an arena battle, select the option that best describes your abilities and return to me- if you survive:" | |
496 break; | |
497 | |
498 case DIALOGUE_ARENA_FIGHT_NOT_OVER_YET: | |
499 pInString = pGlobalTXT_LocalizationStrings[577]; //"Get back in there you wimps:" | |
500 break; | |
501 | |
502 case DIALOGUE_ARENA_REWARD: | |
503 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[576], gold_transaction_amount);// "Congratulations on your win: here's your stuff: %u gold." | |
504 pInString = pTmpBuf.data(); | |
505 break; | |
506 | |
507 case DIALOGUE_ARENA_ALREADY_WON: | |
508 pInString = pGlobalTXT_LocalizationStrings[582]; // "You already won this trip to the Arena:" | |
509 break; | |
510 | |
511 default: | |
512 if (uDialogueType > DIALOGUE_18 && uDialogueType < DIALOGUE_23 && !byte_5B0938[0]) | |
513 { | |
514 pInString = (char *)current_npc_text; | |
515 } | |
516 else if (pGreetType == 1)//QuestNPC_greet | |
517 { | |
518 if (pNPC->greet) | |
519 { | |
520 if ((pNPC->uFlags & 3) == 2) | |
521 pInString = pNPCStats->pNPCGreetings[pNPC->greet - 1].pGreeting2; | |
522 else | |
523 pInString = pNPCStats->pNPCGreetings[pNPC->greet - 1].pGreeting1; | |
524 } | |
525 } | |
526 else if (pGreetType == 2)//HiredNPC_greet | |
527 { | |
528 auto prof = pNPCStats->pProfessions + pNPC->uProfession - 1; | |
529 | |
530 if (pNPC->Hired()) | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1407
diff
changeset
|
531 pInString = BuildDialogueString(prof->pDismissText, uActiveCharacter - 1, 0, 0, 0, 0); |
1298 | 532 else |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1407
diff
changeset
|
533 pInString = BuildDialogueString(prof->pJoinText, uActiveCharacter - 1, 0, 0, 0, 0); |
1298 | 534 } |
535 break; | |
536 } | |
537 | |
538 if (pInString) | |
539 { | |
540 pWindow.uFrameWidth = game_viewport_width; | |
541 pWindow.uFrameZ = 452; | |
542 auto font = pFontArrus; | |
543 v12 = pFontArrus->CalcTextHeight(pInString, &pWindow, 13, 0) + 7; | |
544 if ( 352 - v12 < 8 ) | |
545 { | |
546 font = pFontCreate; | |
547 v12 = pFontCreate->CalcTextHeight(pInString, &pWindow, 13, 0) + 7; | |
548 } | |
549 if (uTextureID_Leather != -1) | |
550 pRenderer->_4A6A68(8, 352 - v12, &pIcons_LOD->pTextures[uTextureID_Leather], pIcons_LOD->pTextures[uTextureID_Leather].uTextureHeight - v12); | |
551 pRenderer->DrawTextureIndexed(8u, 347 - v12, pTexture_591428); | |
552 v13 = FitTextInAWindow(pInString, font, &pWindow, 0xDu, 0); | |
553 pDialogueWindow->DrawText(font, 13, 354 - v12, 0, v13, 0, 0, 0); | |
554 } | |
555 | |
556 | |
557 memcpy(&v52, pDialogueWindow, sizeof(v52)); | |
558 v52.uFrameX = 483; | |
559 v52.uFrameWidth = 148; | |
560 v52.uFrameZ = 334; | |
561 for (int i = v52.pStartingPosActiveItem; | |
562 i < v52.pStartingPosActiveItem + v52.pNumPresenceButton; ++i) | |
563 { | |
564 v14 = v52.GetControl(i); | |
565 //v15 = v14; | |
566 if ( !v14 ) | |
567 break; | |
568 v16 = v14->msg_param; | |
569 | |
570 if ( v16 > 88 ) | |
571 v14->pButtonName[0] = 0; | |
572 else if (v16 == 88) | |
573 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[581]); // Lord | |
574 else if (v16 == 87) | |
575 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[580]); // Knight | |
576 else if (v16 == 86) | |
577 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[579]); // Squire | |
578 else if (v16 == 85) | |
579 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[578]); // Page | |
580 else if (v16 == 77) | |
581 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[407]); // Details | |
582 else if (v16 == 76) | |
583 { | |
584 if (pNPC->Hired()) | |
585 sprintf(v14->pButtonName, (const char*)pGlobalTXT_LocalizationStrings[408], pNPC->pName); // Release %s | |
586 else | |
587 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[406]); // Hire | |
588 } | |
589 else if (v16 == 24) | |
590 { | |
591 __debugbreak(); // learn conditions of this event | |
592 auto topic = pNPCTopics[pNPC->evt_F - 1].pTopic;//(&dword_721660)[8 * v23]; | |
593 if (!topic) | |
594 { | |
595 v14->pButtonName[0] = 0; | |
596 v14->msg_param = 0; | |
597 } | |
598 else | |
599 strcpy(v14->pButtonName, topic); | |
600 } | |
601 else if (v16 == 9) | |
602 strcpy(v14->pButtonName, GetProfessionActionText(pNPC->uProfession)); | |
603 else if (v16 == 19) | |
604 { | |
605 // __debugbreak(); // learn conditions of this event Scavenger Hunt | |
606 auto topic = pNPCTopics[pNPC->evt_A - 1].pTopic;//(&dword_721660)[8 * v23]; | |
607 if (!topic) | |
608 { | |
609 v14->pButtonName[0] = 0; | |
610 v14->msg_param = 0; | |
611 } | |
612 else strcpy(v14->pButtonName, topic); | |
613 } | |
614 else if (v16 == 20) | |
615 { | |
616 //__debugbreak(); // learn conditions of this event instruments | |
617 auto topic = pNPCTopics[pNPC->evt_B - 1].pTopic;//(&dword_721660)[8 * v23]; | |
618 if (!topic) | |
619 { | |
620 v14->pButtonName[0] = 0; | |
621 v14->msg_param = 0; | |
622 } | |
623 else strcpy(v14->pButtonName, topic); | |
624 } | |
625 else if (v16 == 21) | |
626 { | |
627 //__debugbreak(); // learn conditions of this event | |
628 auto topic = pNPCTopics[pNPC->evt_C - 1].pTopic;//(&dword_721660)[8 * v23]; | |
629 if (!topic) | |
630 { | |
631 v14->pButtonName[0] = 0; | |
632 v14->msg_param = 0; | |
633 } | |
634 else strcpy(v14->pButtonName, topic); | |
635 } | |
636 else if (v16 == 22) | |
637 { | |
638 //__debugbreak(); // learn conditions of this event | |
639 auto topic = pNPCTopics[pNPC->evt_D - 1].pTopic;//(&dword_721660)[8 * v23]; | |
640 if (!topic) | |
641 { | |
642 v14->pButtonName[0] = 0; | |
643 v14->msg_param = 0; | |
644 } | |
645 else strcpy(v14->pButtonName, topic); | |
646 } | |
647 else if (v16 == 23) | |
648 { | |
649 //__debugbreak(); // learn conditions of this event | |
650 auto topic = pNPCTopics[pNPC->evt_E - 1].pTopic;//(&dword_721660)[8 * v23]; | |
651 if (!topic) | |
652 { | |
653 v14->pButtonName[0] = 0; | |
654 v14->msg_param = 0; | |
655 } | |
656 else strcpy(v14->pButtonName, topic); | |
657 } | |
658 else if (v16 == 13) | |
659 { | |
660 if (pNPC->Hired()) | |
661 sprintf(v14->pButtonName, pGlobalTXT_LocalizationStrings[408], pNPC->pName); // Release %s | |
662 else | |
663 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[122]); // Join | |
664 } | |
665 else | |
666 v14->pButtonName[0] = 0; | |
667 | |
668 | |
669 if (pParty->field_7B5_in_arena_quest && pParty->field_7B5_in_arena_quest != -1) | |
670 { | |
671 int num_dead_actors = 0; | |
672 pInString = 0; | |
673 for (uint i = 0; i < uNumActors; ++i) | |
674 { | |
675 if (pActors[i].uAIState == Dead || pActors[i].uAIState == Removed || | |
676 pActors[i].uAIState == Disabled) | |
677 ++num_dead_actors; | |
678 else | |
679 { | |
680 int sumonner_type = PID_TYPE(pActors[i].uSummonerID); | |
681 if (sumonner_type == OBJECT_Player) | |
682 ++num_dead_actors; | |
683 } | |
684 } | |
685 if (num_dead_actors == uNumActors) | |
686 strcpy(v14->pButtonName, pGlobalTXT_LocalizationStrings[658]); // Collect Prize | |
687 } | |
688 } | |
689 | |
690 | |
691 v32 = 0; | |
692 v34 = pDialogueWindow; | |
693 //v54 = v33; | |
694 v35 = pDialogueWindow->pStartingPosActiveItem; | |
695 for ( i = v35 + pDialogueWindow->pNumPresenceButton; v35 < i; i = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ) | |
696 { | |
697 v37 = v34->GetControl(v35); | |
698 if ( !v37 ) | |
699 { | |
700 v34 = pDialogueWindow; | |
701 break; | |
702 } | |
703 v38 = pFontArrus->CalcTextHeight(v37->pButtonName, &v52, 0, 0); | |
704 v34 = pDialogueWindow; | |
705 v32 += v38; | |
706 ++v35; | |
707 } | |
708 v39 = v34->pNumPresenceButton; | |
709 if ( v39 ) | |
710 { | |
711 pOutString = (GUIFont *)((174 - v32) / v39); | |
712 if ( (174 - v32) / v39 > 32 ) | |
713 pOutString = (GUIFont *)32; | |
714 int v55 = 1; | |
715 v40 = 174 - (int)pOutString * v39 - v32; | |
716 v41 = v34->pStartingPosActiveItem; | |
717 v42 = v40 / 2 - (signed int)pOutString / 2 + 138; | |
718 if ( (signed int)v41 < (signed int)(v41 + v39) ) | |
719 { | |
720 do | |
721 { | |
722 v43 = v34->GetControl(v41); | |
723 if ( !v43 ) | |
724 break; | |
725 v43->uY = (unsigned int)((char *)pOutString + v42); | |
726 Str = v43->pButtonName; | |
727 v44 = pFontArrus->CalcTextHeight(v43->pButtonName, &v52, 0, 0); | |
728 v45 = v43->uY; | |
729 v46 = (unsigned short *)v55; | |
730 v43->uHeight = v44; | |
731 v42 = v45 + v44 - 1; | |
732 v43->uW = v42; | |
1393 | 733 v47 = ui_game_dialogue_option_highlight_color; |
1298 | 734 if ( (unsigned __int16 *)pDialogueWindow->pCurrentPosActiveItem != v46 ) |
1393 | 735 v47 = ui_game_dialogue_option_normal_color; |
1298 | 736 v52.DrawTitleText(pFontArrus, 0, v45, v47, Str, 3u); |
737 v34 = pDialogueWindow; | |
738 ++v55; | |
739 ++v41; | |
740 } | |
741 while ( (signed int)v41 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ); | |
742 } | |
743 } | |
744 pRenderer->DrawTextureIndexed(471, 445, pIcons_LOD->GetTexture(uExitCancelTextureId)); | |
745 } | |
746 | |
747 | |
748 | |
749 //----- (00444FBE) -------------------------------------------------------- | |
750 void GameUI_DrawBranchlessDialogue() | |
751 { | |
752 //GUIFont *v0; // esi@1 | |
753 int v1; // esi@4 | |
754 char *v2; // eax@6 | |
755 int v3; // edi@12 | |
756 char Str[200]; // [sp+Ch] [bp-120h]@12 | |
757 GUIWindow v5; // [sp+D4h] [bp-58h]@4 | |
758 GUIFont *pFont; // [sp+128h] [bp-4h]@1 | |
759 | |
760 pFont = pFontArrus; | |
761 if ( current_npc_text && !byte_5B0938[0] ) | |
762 strcpy(byte_5B0938.data(), current_npc_text); | |
763 v5.uFrameWidth = game_viewport_width; | |
764 v5.uFrameZ = 452; | |
765 v1 = pFontArrus->CalcTextHeight(byte_5B0938.data(), &v5, 12, 0) + 7; | |
766 if ( 352 - v1 < 8 ) | |
767 { | |
768 pFont = pFontCreate; | |
769 v1 = pFontCreate->CalcTextHeight(byte_5B0938.data(), &v5, 12, 0) + 7; | |
770 } | |
771 pRenderer->_4A6A68(8, 352 - v1, | |
772 pIcons_LOD->GetTexture(uTextureID_Leather), | |
773 pIcons_LOD->GetTexture(uTextureID_Leather)->uTextureHeight - v1); | |
774 pRenderer->DrawTextureIndexed(8, 347 - v1, pTexture_591428); | |
775 v2 = FitTextInAWindow(byte_5B0938.data(), pFont, &v5, 0xCu, 0); | |
776 pGUIWindow2->DrawText(pFont, 12, 354 - v1, 0, v2, 0, 0, 0); | |
777 pRenderer->DrawTextureRGB(0, 0x160u, pTexture_StatusBar); | |
778 if ( pGUIWindow2->receives_keyboard_input_2 != WINDOW_INPUT_IN_PROGRESS) | |
779 { | |
780 if ( pGUIWindow2->receives_keyboard_input_2 == WINDOW_INPUT_CONFIRMED) | |
781 { | |
782 pGUIWindow2->receives_keyboard_input_2 = WINDOW_INPUT_NONE; | |
783 strcpy(GameUI_Footer_TimedString.data(), (const char *)pKeyActionMap->pPressedKeysBuffer); | |
784 LABEL_16: | |
785 sub_4452BB(); | |
786 return; | |
787 } | |
788 if ( pGUIWindow2->receives_keyboard_input_2 != WINDOW_INPUT_CANCELLED) | |
789 return; | |
790 pGUIWindow2->receives_keyboard_input_2 = WINDOW_INPUT_NONE; | |
791 LABEL_15: | |
792 memset(GameUI_Footer_TimedString.data(), 0, 0xC8u); | |
793 goto LABEL_16; | |
794 } | |
795 if ( pGUIWindow2->ptr_1C == (void *)26 ) | |
796 { | |
797 sprintf(Str, "%s %s", GameUI_Footer_TimedString, pKeyActionMap->pPressedKeysBuffer); | |
798 v3 = pFontLucida->GetLineWidth(Str); | |
799 pGUIWindow2->DrawText(pFontLucida, 13, 357, 0, Str, 0, 0, 0); | |
800 pGUIWindow2->DrawFlashingInputCursor(v3 + 13, 357, pFontLucida); | |
801 return; | |
802 } | |
803 if ( pKeyActionMap->pPressedKeysBuffer[0] ) | |
804 { | |
1459 | 805 pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_NONE); |
1298 | 806 goto LABEL_15; |
807 } | |
808 } | |
809 | |
810 | |
811 //----- (004443D5) -------------------------------------------------------- | |
812 const char *GameUI_GetMinimapHintText() | |
813 { | |
814 int v0; // ST20_4@1 | |
815 unsigned int v1; // esi@1 | |
816 signed int v2; // ebx@1 | |
817 double v3; // st7@1 | |
818 int v4; // esi@3 | |
819 int v5; // edi@4 | |
820 int v6; // eax@4 | |
821 int v7; // eax@4 | |
822 BSPModel *v8; // ecx@4 | |
823 unsigned __int8 v9; // zf@5 | |
824 char v10; // sf@5 | |
825 unsigned __int8 v11; // of@5 | |
826 ODMFace *v12; // eax@6 | |
827 __int16 v13; // cx@6 | |
828 const char *v14; // eax@8 | |
829 const char *v15; // edi@8 | |
830 char *result; // eax@12 | |
831 unsigned int v17; // eax@14 | |
832 unsigned int v18; // [sp+Ch] [bp-20h]@1 | |
833 int v19; // [sp+10h] [bp-1Ch]@1 | |
834 int v20; // [sp+14h] [bp-18h]@1 | |
835 char *v21; // [sp+18h] [bp-14h]@1 | |
836 unsigned int pY; // [sp+1Ch] [bp-10h]@1 | |
837 int v23; // [sp+20h] [bp-Ch]@1 | |
838 int v24; // [sp+24h] [bp-8h]@1 | |
839 int pX; // [sp+28h] [bp-4h]@1 | |
840 | |
841 v24 = pParty->vPosition.x; | |
842 v0 = pParty->vPosition.y; | |
843 v1 = pOutdoor->uNumBModels; | |
844 *(float *)&v23 = (double)(signed int)viewparams->uMinimapZoom * 0.000015258789; | |
845 v2 = 0; | |
846 v18 = pOutdoor->uNumBModels; | |
847 v21 = 0; | |
848 pMouse->GetClickPos((unsigned int *)&pX, &pY); | |
849 v3 = 1.0 / *(float *)&v23; | |
850 v23 = pX - 557; | |
851 v19 = (signed __int64)((double)(pX - 557) * v3 + (double)v24); | |
852 v20 = (signed __int64)((double)v0 - (double)(signed int)(pY - 74) * v3); | |
853 if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor || (*(float *)&v23 = 0.0, (signed int)v1 <= 0) ) | |
854 { | |
855 LABEL_14: | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1470
diff
changeset
|
856 v17 = pMapStats->GetMapInfo(pCurrentMapName); |
1298 | 857 if ( v17 == v2 ) |
858 result = "No Maze Info for this maze on file!"; | |
859 else | |
860 result = pMapStats->pInfos[v17].pName; | |
861 } | |
862 else | |
863 { | |
864 v4 = 0; | |
865 while ( 1 ) | |
866 { | |
867 pX = pOutdoor->pBModels[v4].vBoundingCenter.x - v19; | |
868 pY = pOutdoor->pBModels[v4].vBoundingCenter.y - v20; | |
869 v5 = abs((signed)pY); | |
870 v6 = abs((signed)pX); | |
871 v7 = int_get_vector_length(v6, v5, v2); | |
872 v8 = &pOutdoor->pBModels[0]; | |
873 if ( v7 < 2 * pOutdoor->pBModels[v4].sBoundingRadius ) | |
874 { | |
875 v11 = __OFSUB__(pOutdoor->pBModels[v4].uNumFaces, v2); | |
876 v9 = pOutdoor->pBModels[v4].uNumFaces == v2; | |
877 v10 = ((pOutdoor->pBModels[v4].uNumFaces - v2) & 0x80000000u) != 0; | |
878 v24 = v2; | |
879 if ( !((unsigned __int8)(v10 ^ v11) | v9) ) | |
880 { | |
881 do | |
882 { | |
883 v12 = &v8[v4].pFaces[v2 / 0x134u]; | |
884 v13 = v12->sCogTriggeredID; | |
885 if ( v13 ) | |
886 { | |
887 if ( !(BYTE2(v12->uAttributes) & 0x10) ) | |
888 { | |
889 v14 = GetEventHintString(v13); | |
890 v15 = v14; | |
891 if ( v14 ) | |
892 { | |
893 if ( _stricmp(v14, "") ) | |
894 v21 = (char *)v15; | |
895 } | |
896 } | |
897 } | |
898 ++v24; | |
899 v8 = pOutdoor->pBModels; | |
900 v2 += 308; | |
901 } | |
902 while ( v24 < (signed int)pOutdoor->pBModels[v4].uNumFaces ); | |
903 } | |
904 result = v21; | |
905 v2 = 0; | |
906 if ( v21 ) | |
907 break; | |
908 } | |
909 ++v23; | |
910 ++v4; | |
911 if ( v23 >= (signed int)v18 ) | |
912 goto LABEL_14; | |
913 } | |
914 } | |
915 return result; | |
916 } | |
917 | |
918 | |
919 | |
920 | |
921 | |
922 //----- (0041D3B7) -------------------------------------------------------- | |
923 void GameUI_CharacterQuickRecord_Draw(GUIWindow *window, Player *player) | |
924 { | |
925 //Player *pPlayer; // esi@1 | |
926 int v6; // eax@5 | |
927 int v7; // ebx@5 | |
928 //unsigned int v8; // ecx@5 | |
929 int v9; // ebx@5 | |
930 //unsigned int v10; // eax@5 | |
931 //int v11; // eax@5 | |
932 //unsigned int v12; // ecx@5 | |
933 Texture *v13; // eax@6 | |
934 unsigned int v14; // eax@12 | |
935 PlayerFrame *v15; // eax@12 | |
936 //unsigned int v16; // eax@15 | |
937 unsigned int v20; // eax@15 | |
938 unsigned int v24; // eax@15 | |
939 unsigned int v25; // eax@15 | |
940 unsigned __int8 v28; // al@15 | |
941 char *v29; // eax@16 | |
942 __int64 v35; // ST38_8@22 | |
943 int v36; // esi@22 | |
944 unsigned int v38; // eax@22 | |
945 char *v39; // eax@24 | |
946 signed int uFramesetID; // [sp+20h] [bp-8h]@9 | |
947 int uFramesetIDa; // [sp+20h] [bp-8h]@18 | |
948 | |
949 uint numActivePlayerBuffs = 0; | |
950 for (uint i = 0; i < 24; ++i) | |
951 if (player->pPlayerBuffs[i].uExpireTime > 0) | |
952 ++numActivePlayerBuffs; | |
953 | |
954 v6 = pFontArrus->uFontHeight + 162; | |
955 v7 = (numActivePlayerBuffs - 1) * pFontArrus->uFontHeight; | |
956 v9 = v6 + v7; | |
957 window->uFrameHeight = v9; | |
958 window->uFrameZ = window->uFrameWidth + window->uFrameX - 1; | |
959 window->uFrameW = v9 + window->uFrameY - 1; | |
960 window->DrawMessageBox(0); | |
961 | |
1362
d6cf8ead9242
Condition checking functions slightly renamed, some final changes in Player::SetCondition
Grumpy7
parents:
1340
diff
changeset
|
962 if (player->IsEradicated()) |
1298 | 963 v13 = pTexture_PlayerFaceEradicated; |
1362
d6cf8ead9242
Condition checking functions slightly renamed, some final changes in Player::SetCondition
Grumpy7
parents:
1340
diff
changeset
|
964 else if (player->IsDead()) |
1298 | 965 v13 = pTexture_PlayerFaceDead; |
966 else | |
967 { | |
968 uFramesetID = pPlayerFrameTable->GetFrameIdByExpression(player->expression); | |
969 if ( !uFramesetID ) | |
970 uFramesetID = 1; | |
971 if ( player->expression == CHARACTER_EXPRESSION_21) | |
972 { | |
973 v15 = pPlayerFrameTable->GetFrameBy_y(&player->_expression21_frameset, &player->_expression21_animtime, pMiscTimer->uTimeElapsed); | |
974 } | |
975 else | |
976 { | |
977 v14 = pMiscTimer->Time(); | |
978 v15 = pPlayerFrameTable->GetFrameBy_x(uFramesetID, v14); | |
979 } | |
980 player->field_1AA2 = v15->uTextureID - 1; | |
981 v13 = pTextures_PlayerFaces[(unsigned int)window->ptr_1C][v15->uTextureID - 1]; | |
982 } | |
983 | |
984 pRenderer->DrawTextureTransparent(window->uFrameX + 24, window->uFrameY + 24, v13); | |
985 | |
986 sprintfex(pTmpBuf.data(), "\f%05d", ui_character_header_text_color); | |
987 sprintfex(pTmpBuf2.data(), pGlobalTXT_LocalizationStrings[429], player->pName, pClassNames[player->classType]); // "%s the %s" | |
988 strcat(pTmpBuf.data(), pTmpBuf2.data()); | |
989 strcat(pTmpBuf.data(), "\f00000\n"); | |
990 | |
991 v20 = UI_GetHealthManaStringColor(player->sHealth, player->GetMaxHealth()); | |
1393 | 992 sprintfex(pTmpBuf2.data(), "%s : \f%05u%d\f00000 / %d\n", |
993 pGlobalTXT_LocalizationStrings[108], // "Hit Points" | |
994 v20, player->sHealth, player->GetMaxHealth()); | |
1298 | 995 strcat(pTmpBuf.data(), pTmpBuf2.data()); |
996 | |
997 v24 = UI_GetHealthManaStringColor(player->sMana, player->GetMaxMana()); | |
1393 | 998 sprintfex(pTmpBuf2.data(), "%s : \f%05u%d\f00000 / %d\n", |
999 pGlobalTXT_LocalizationStrings[212], // "Spell Points" | |
1000 v24, player->sMana, player->GetMaxMana()); | |
1298 | 1001 strcat(pTmpBuf.data(), pTmpBuf2.data()); |
1002 | |
1003 v25 = player->GetMajorConditionIdx(); | |
1393 | 1004 sprintfex(pTmpBuf2.data(), "%s: \f%05d%s\f00000\n", |
1005 pGlobalTXT_LocalizationStrings[47], // "Condition | |
1006 GetConditionDrawColor(v25), aCharacterConditionNames[v25]); | |
1298 | 1007 strcat(pTmpBuf.data(), pTmpBuf2.data()); |
1008 | |
1009 v28 = player->uQuickSpell; | |
1010 if ( v28 ) | |
1011 v29 = pSpellStats->pInfos[v28].pShortName; | |
1012 else | |
1013 v29 = pGlobalTXT_LocalizationStrings[153]; | |
1014 sprintfex(pTmpBuf2.data(), "%s: %s", pGlobalTXT_LocalizationStrings[172], v29); // "Quick Spell" | |
1015 strcat(pTmpBuf.data(), pTmpBuf2.data()); | |
1016 | |
1017 window->DrawText(pFontArrus, 120, 22, 0, pTmpBuf.data(), 0, 0, 0); | |
1018 | |
1019 uFramesetIDa = 0; | |
1020 for (uint i = 0; i < 24; ++i) | |
1021 { | |
1022 auto buff = player->pPlayerBuffs + i; | |
1023 if (buff->uExpireTime > 0) | |
1024 { | |
1025 v35 = buff->uExpireTime - pParty->uTimePlayed; | |
1026 v36 = uFramesetIDa++ * pFontComic->uFontHeight + 134; | |
1027 v38 = ui_game_character_record_playerbuff_colors[i]; | |
1028 window->DrawText(pFontComic, 52, v36, v38, aSpellNames[20 + i], 0, 0, 0); | |
1029 sub_41D20D_buff_remaining_time_string(v36, window, v35, pFontComic); | |
1030 } | |
1031 } | |
1032 | |
1033 v39 = ""; | |
1034 if ( uFramesetIDa == 0 ) | |
1035 v39 = pGlobalTXT_LocalizationStrings[153]; // "None" | |
1393 | 1036 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[450], v39); // "Active Spells: %s" |
1298 | 1037 window->DrawText(pFontArrus, 14, 114, 0, pTmpBuf.data(), 0, 0, 0); |
1038 } | |
1039 | |
1040 | |
1041 | |
1042 //----- (0041A57E) -------------------------------------------------------- | |
1043 void GameUI_QuickRef_Draw() | |
1044 { | |
1045 //unsigned int v0; // ebx@1 | |
1046 //unsigned int v1; // eax@1 | |
1047 //Player *pPlayer; // ebp@2 | |
1048 //int v3; // eax@6 | |
1049 //int v4; // edi@6 | |
1050 unsigned int v5; // eax@7 | |
1051 unsigned int v6; // edi@9 | |
1052 unsigned int v7; // edi@11 | |
1053 //signed int v8; // eax@13 | |
1054 unsigned int v9; // eax@13 | |
1055 unsigned int v10; // edi@13 | |
1056 //int v11; // eax@15 | |
1057 unsigned int v12; // eax@15 | |
1058 unsigned int v13; // edi@15 | |
1059 //int v14; // eax@17 | |
1060 //int v15; // ST18_4@17 | |
1061 //int v16; // ebx@17 | |
1062 //int v17; // eax@17 | |
1063 unsigned int v18; // eax@17 | |
1064 unsigned int v19; // edi@17 | |
1065 //int v20; // eax@19 | |
1066 unsigned int v21; // edi@19 | |
1067 char *v22; // eax@21 | |
1068 unsigned int v23; // edi@21 | |
1069 //int v24; // eax@23 | |
1070 unsigned int v25; // edi@23 | |
1071 char *v26; // eax@25 | |
1072 unsigned int v27; // edi@25 | |
1073 int v28; // ecx@27 | |
1074 char *v29; // eax@27 | |
1075 signed int v30; // edx@27 | |
1076 unsigned int v31; // edi@31 | |
1077 unsigned int v32; // edi@33 | |
1078 const char *v33; // ST10_4@35 | |
1079 unsigned int v34; // eax@35 | |
1080 unsigned int v35; // edi@35 | |
1081 //unsigned __int8 v36; // al@37 | |
1082 char *v37; // eax@38 | |
1083 int v38; // eax@41 | |
1084 signed int v39; // edi@42 | |
1085 //char *v40; // eax@45 | |
1086 //unsigned int v41; // eax@45 | |
1087 signed int v43; // [sp+10h] [bp-1Ch]@1 | |
1088 unsigned int v44; // [sp+14h] [bp-18h]@2 | |
1089 int v45; // [sp+18h] [bp-14h]@1 | |
1090 //unsigned int v46; // [sp+1Ch] [bp-10h]@1 | |
1091 //unsigned int v47; // [sp+20h] [bp-Ch]@1 | |
1092 unsigned int v48; // [sp+24h] [bp-8h]@33 | |
1093 //unsigned int v49; // [sp+28h] [bp-4h]@1 | |
1094 | |
1095 //v0 = 0; | |
1096 //v47 = TargetColor(0xFFu, 0xFFu, 0x9Bu); | |
1097 //v49 = TargetColor(0xFFu, 0, 0); | |
1098 //v46 = TargetColor(0, 0xFFu, 0); | |
1099 //v1 = pIcons_LOD->LoadTexture("quikref", TEXTURE_16BIT_PALETTE); | |
1100 pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->LoadTexturePtr("quikref", TEXTURE_16BIT_PALETTE)); | |
1101 v43 = 0; | |
1102 v45 = LOBYTE(pFontArrus->uFontHeight) + 1; | |
1103 do | |
1104 { | |
1105 auto player = &pParty->pPlayers[v43]; | |
1106 v44 = 94 * v43 + 89; | |
1107 if ( v43 == 0 ) | |
1108 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, 0x12u, 0, pGlobalTXT_LocalizationStrings[149], 60, 0);//Name | |
1109 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 94 * v43 + 89, 0x12u, ui_character_header_text_color, player->pName, 84, 0); | |
1110 if ( v43 == 0 ) | |
1111 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, 0x2Fu, 0, pGlobalTXT_LocalizationStrings[131], 60, 0); //. | |
1112 sprintf(pTmpBuf.data(), "%lu", player->GetActualLevel()); | |
1113 if ( player->GetActualLevel() <= player->GetBaseLevel()) | |
1114 v5 = player->GetExperienceDisplayColor(); | |
1115 else | |
1116 v5 = ui_character_bonus_text_color; | |
1117 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, 0x2Fu, v5, pTmpBuf.data(), 84, 0); | |
1118 v6 = v45 + 47; | |
1119 if ( v43 == 0 ) | |
1120 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v45 + 47, 0, pGlobalTXT_LocalizationStrings[41], 60, 0);// | |
1121 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v6, 0, pClassNames[player->classType], 84, 0); | |
1122 v7 = v45 + v6; | |
1123 if ( v43 == 0 ) | |
1124 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v7, 0, pGlobalTXT_LocalizationStrings[107], 60, 0);//. | |
1125 sprintf(pTmpBuf.data(), "%d", player->sHealth); | |
1126 v9 = UI_GetHealthManaStringColor(player->sHealth, player->GetMaxHealth()); | |
1127 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v7, v9, pTmpBuf.data(), 84, 0); | |
1128 v10 = v45 + v7; | |
1129 if ( v43 == 0 ) | |
1130 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v10, 0, pGlobalTXT_LocalizationStrings[209], 60, 0);// | |
1131 sprintf(pTmpBuf.data(), "%d", player->sMana); | |
1132 v12 = UI_GetHealthManaStringColor(player->sMana, player->GetMaxMana()); | |
1133 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v10, v12, pTmpBuf.data(), 84, 0); | |
1134 v13 = v45 + v10; | |
1135 if ( v43 == 0 ) | |
1136 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v13, 0, pGlobalTXT_LocalizationStrings[0], 60, 0);// | |
1137 sprintf(pTmpBuf.data(), "%d", player->GetActualAC()); | |
1138 v18 = UI_GetHealthManaStringColor(player->GetActualAC(), player->GetBaseAC()); | |
1139 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v13, v18, pTmpBuf.data(), 84, 0); | |
1140 v19 = v45 + v13; | |
1141 if ( !v43 ) | |
1142 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v19, 0, pGlobalTXT_LocalizationStrings[18], 60, 0);// | |
1143 sprintf(pTmpBuf.data(), "%+d", player->GetActualAttack(0)); | |
1144 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v19, 0, pTmpBuf.data(), 84, 0); | |
1145 v21 = v45 + v19; | |
1146 if ( !v43 ) | |
1147 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v21, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//. | |
1148 v22 = player->GetMeleeDamageString(); | |
1149 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v21, 0, v22, 84, 0); | |
1150 v23 = v45 + v21; | |
1151 if ( !v43 ) | |
1152 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v23, 0, pGlobalTXT_LocalizationStrings[203], 60, 0);// | |
1153 sprintf(pTmpBuf.data(), "%+d", player->GetRangedAttack()); | |
1154 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v23, 0, pTmpBuf.data(), 84, 0); | |
1155 v25 = v45 + v23; | |
1156 if ( !v43 ) | |
1157 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v25, 0, pGlobalTXT_LocalizationStrings[66], 60, 0);//. | |
1158 v26 = player->GetRangedDamageString(); | |
1159 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v25, 0, v26, 84, 0); | |
1160 v27 = v45 + v25; | |
1161 if ( !v43 ) | |
1162 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v27, 0, pGlobalTXT_LocalizationStrings[205], 60, 0);// | |
1163 v28 = 0; | |
1164 v29 = (char *)player->pActiveSkills; | |
1165 v30 = 36; | |
1166 do | |
1167 { | |
1168 if ( *(short *)v29 ) | |
1169 ++v28; | |
1170 v29 += 2; | |
1171 --v30; | |
1172 } | |
1173 while ( v30 ); | |
1174 sprintf(pTmpBuf.data(), "%lu", v28); | |
1175 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v27, 0, pTmpBuf.data(), 84, 0); | |
1176 v31 = v45 + v27; | |
1177 if ( !v43 ) | |
1178 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v31, 0, pGlobalTXT_LocalizationStrings[168], 60, 0);// | |
1179 sprintf(pTmpBuf.data(), "%lu", player->uSkillPoints); | |
1180 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v31, player->uSkillPoints ? ui_character_bonus_text_color : ui_character_default_text_color, pTmpBuf.data(), 84, 0); | |
1181 v32 = v45 + v31; | |
1182 v48 = player->GetMajorConditionIdx(); | |
1183 if ( !v43 ) | |
1184 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v32, 0, pGlobalTXT_LocalizationStrings[45], 60, 0);//. | |
1185 v33 = aCharacterConditionNames[v48]; | |
1186 v34 = GetConditionDrawColor(v48); | |
1187 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v32, v34, v33, 84, 0); | |
1188 v35 = v45 + v32; | |
1189 if ( !v43 ) | |
1190 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x16u, v35, 0, pGlobalTXT_LocalizationStrings[170], 60, 0);//.. | |
1191 if (player->uQuickSpell) | |
1192 v37 = pSpellStats->pInfos[player->uQuickSpell].pShortName; | |
1193 else | |
1194 v37 = pGlobalTXT_LocalizationStrings[153];// | |
1195 pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v35, 0, v37, 84, 0); | |
1196 ++v43; | |
1197 } | |
1198 while ( v43 < 4 ); | |
1199 | |
1200 v38 = GetPartyReputation(); | |
1201 if ( v38 >= 0 ) | |
1202 { | |
1203 if ( v38 <= 5 ) | |
1204 v39 = ui_character_default_text_color; | |
1205 else | |
1206 v39 = ui_character_bonus_text_color_neg; | |
1207 } | |
1208 else | |
1209 v39 = ui_character_bonus_text_color; | |
1210 | |
1211 sprintf(pTmpBuf.data(), "%s: \f%05d%s\f00000", pGlobalTXT_LocalizationStrings[180], v39, GetReputationString(v38));//Reputation | |
1212 pGUIWindow_CurrentMenu->DrawText(pFontArrus, 22, 323, 0, pTmpBuf.data(), 0, 0, 0); | |
1213 | |
1214 sprintf(pTmpBuf.data(), "\r261%s: %d", pGlobalTXT_LocalizationStrings[84], pParty->GetPartyFame());// Fame | |
1215 pGUIWindow_CurrentMenu->DrawText(pFontArrus, 0, 323, 0, pTmpBuf.data(), 0, 0, 0); | |
1216 } | |
1217 | |
1218 | |
1219 | |
1220 //----- (0041AD6E) -------------------------------------------------------- | |
1221 void GameUI_DrawRightPanelItems() | |
1222 { | |
1223 if (GameUI_RightPanel_BookFlashTimer > pParty->uTimePlayed) | |
1224 GameUI_RightPanel_BookFlashTimer = 0; | |
1225 | |
1226 if (pParty->uTimePlayed - GameUI_RightPanel_BookFlashTimer > 128) | |
1227 { | |
1228 GameUI_RightPanel_BookFlashTimer = pParty->uTimePlayed; | |
1229 | |
1230 static bool byte_50697C = false; // 50697C | |
1231 byte_50697C = !byte_50697C; | |
1232 if ( byte_50697C && pCurrentScreen != SCREEN_REST ) | |
1233 { | |
1234 if (bFlashQuestBook) pRenderer->DrawTextureTransparent(493, 355, pIcons_LOD->GetTexture(uTextureID_ib_td1_A)); | |
1235 if (bFlashAutonotesBook) pRenderer->DrawTextureTransparent(527, 353, pIcons_LOD->GetTexture(uTextureID_ib_td2_A)); | |
1236 if (bFlashHistoryBook) pRenderer->DrawTextureTransparent(600, 361, pIcons_LOD->GetTexture(uTextureID_ib_td5_A)); | |
1237 } | |
1238 else | |
1239 { | |
1240 pRenderer->DrawTextureRGB(468, 0, pTexture_RightFrame); | |
1241 GameUI_DrawHiredNPCs(); | |
1242 } | |
1243 } | |
1244 } | |
1245 | |
1246 //----- (0041AEBB) -------------------------------------------------------- | |
1247 void GameUI_DrawFoodAndGold() | |
1248 { | |
1249 int v2; // esi@2 | |
1250 | |
1251 if ( uGameState != GAME_STATE_FINAL_WINDOW ) | |
1252 { | |
1253 v2 = sub_44100D() != 0 ? 381 : 322; | |
1254 sprintf(pTmpBuf.data(), "\r087%lu", pParty->uNumFoodRations); | |
1255 pPrimaryWindow->DrawText(pFontSmallnum, 0, v2, uGameUIFontMain, pTmpBuf.data(), 0, 0, uGameUIFontShadow); | |
1256 sprintf(pTmpBuf.data(), "\r028%lu", pParty->uNumGold); | |
1257 pPrimaryWindow->DrawText(pFontSmallnum, 0, v2, uGameUIFontMain, pTmpBuf.data(), 0, 0, uGameUIFontShadow); | |
1258 } | |
1259 } | |
1260 | |
1261 | |
1262 //----- (0041B0C9) -------------------------------------------------------- | |
1263 void GameUI_DrawLifeManaBars() | |
1264 { | |
1265 double v3; // st7@3 | |
1266 double v7; // st7@25 | |
1267 Texture *v9; // [sp-4h] [bp-30h]@10 | |
1268 Texture *v10; // [sp+Ch] [bp-20h]@1 | |
1269 | |
1270 | |
1271 v10 = pIcons_LOD->GetTexture(uTextureID_BarBlue); | |
1272 | |
1273 for (uint i = 0; i < 4; ++i) | |
1274 { | |
1275 auto player = pParty->pPlayers + i; | |
1276 | |
1277 if (player->sHealth > 0) | |
1278 { | |
1279 int v17 = 0; | |
1280 if (i == 2 || i == 3) | |
1281 v17 = 2; | |
1282 | |
1283 v3 = (double)player->sHealth / (double)player->GetMaxHealth(); | |
1284 if( v3 > 0.5 ) | |
1285 { | |
1286 if ( v3 > 1.0 ) | |
1287 v3 = 1.0; | |
1288 v9 = pIcons_LOD->GetTexture(uTextureID_BarGreen); | |
1289 } | |
1290 else if ( v3 > 0.25 ) | |
1291 v9 = pIcons_LOD->GetTexture(uTextureID_BarYellow); | |
1292 else if ( v3 > 0.0 ) | |
1293 v9 = pIcons_LOD->GetTexture(uTextureID_BarRed); | |
1294 | |
1295 | |
1296 if( v3 > 0.0 ) | |
1297 { | |
1298 pRenderer->SetTextureClipRect(v17 + pHealthBarPos[i], | |
1299 (signed __int64)((1.0 - v3) * v9->uTextureHeight) + 402, | |
1300 v17 + pHealthBarPos[i] + v9->uTextureWidth, | |
1301 v9->uTextureHeight + 402); | |
1302 | |
1303 pRenderer->DrawTextureIndexed(v17 + pHealthBarPos[i], 402, v9); | |
1304 pRenderer->ResetTextureClipRect(); | |
1305 } | |
1306 } | |
1307 | |
1308 | |
1309 if (player->sMana > 0) | |
1310 { | |
1311 v7 = player->sMana / (double)player->GetMaxMana(); | |
1312 if ( v7 > 1.0 ) | |
1313 v7 = 1.0; | |
1314 | |
1315 int v17 = 0; | |
1316 if (i == 2) | |
1317 v17 = 1; | |
1318 | |
1319 pRenderer->SetTextureClipRect(v17 + pManaBarPos[i], | |
1320 (signed __int64)((1.0 - v7) * v10->uTextureHeight) + 402, | |
1321 v17 + pManaBarPos[i] + v10->uTextureWidth, | |
1322 v10->uTextureHeight + 402); | |
1323 pRenderer->DrawTextureIndexed(v17 + pManaBarPos[i], 402, v10); | |
1324 pRenderer->ResetTextureClipRect(); | |
1325 } | |
1326 } | |
1327 } | |
1328 | |
1329 //----- (0041B3B6) -------------------------------------------------------- | |
1330 void GameUI_DrawRightPanel() | |
1331 { | |
1332 pRenderer->DrawTextureTransparent(pViewport->uViewportBR_X, 0, | |
1333 pIcons_LOD->GetTexture(uTextureID_right_panel)); | |
1334 } | |
1335 | |
1336 //----- (0041B3E2) -------------------------------------------------------- | |
1337 void GameUI_DrawRightPanelFrames() | |
1338 { | |
1339 pRenderer->DrawTextureRGB(0, 0, pTexture_TopFrame); | |
1340 pRenderer->DrawTextureRGB(0, 8, pTexture_LeftFrame); | |
1341 pRenderer->DrawTextureRGB(468, 0, pTexture_RightFrame); | |
1342 pRenderer->DrawTextureRGB(0, 352, pTexture_BottomFrame); | |
1343 GameUI_DrawFoodAndGold(); | |
1344 GameUI_DrawRightPanelItems(); | |
1345 } | |
1346 | |
1347 | |
1348 //----- (0041C047) -------------------------------------------------------- | |
1349 void GameUI_Footer_2() | |
1350 { | |
1351 char *v1; // edx@2 | |
1352 int v5; // eax@5 | |
1353 | |
1354 pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar); | |
1355 if (GameUI_Footer_TimeLeft) | |
1356 v1 = GameUI_Footer_TimedString.data(); | |
1357 else | |
1358 { | |
1359 if (!pFooterString[0]) | |
1360 return; | |
1361 v1 = pFooterString.data(); | |
1362 } | |
1363 | |
1364 v5 = pFontLucida->AlignText_Center(450, v1); | |
1365 pPrimaryWindow->DrawText(pFontLucida, v5 + 11, 357, uGameUIFontMain, v1, 0, 0, uGameUIFontShadow); | |
1366 } | |
1367 | |
1368 //----- (0041C0B8) -------------------------------------------------------- | |
1369 void GameUI_SetFooterString(const char *pStr) | |
1370 { | |
1371 const char *v1; // esi@1 | |
1372 int i; // eax@7 | |
1373 int j; // eax@11 | |
1374 | |
1375 v1 = pStr; | |
1376 if ( pStr && strcmp(pStr, "test") && !IsBadStringPtrA(v1, 1) && (*v1 || GameUI_Footer_TimeLeft) ) | |
1377 { | |
1378 if ( GameUI_Footer_TimeLeft ) | |
1379 { | |
1380 for ( i = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); | |
1381 i > 450; | |
1382 i = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()) ) | |
1470 | 1383 GameUI_Footer_TimedString[strlen(GameUI_Footer_TimedString.data()) - 1] = 0; |
1298 | 1384 } |
1385 else | |
1386 { | |
1387 strcpy(pFooterString.data(), v1); | |
1388 for ( j = pFontLucida->GetLineWidth(pFooterString.data()); | |
1389 j > 450; | |
1390 j = pFontLucida->GetLineWidth(pFooterString.data()) ) | |
1470 | 1391 pFooterString[strlen(pFooterString.data()) - 1] = 0; |
1298 | 1392 } |
1393 } | |
1394 } | |
1395 | |
1396 //----- (0041C179) -------------------------------------------------------- | |
1397 void GameUI_Footer() | |
1398 { | |
1399 //unsigned int v0; // ebp@1 | |
1400 char *v1; // edi@5 | |
1401 int v2; // eax@5 | |
1402 unsigned int v3; // esi@5 | |
1403 size_t v4; // eax@6 | |
1404 GUIFont *v5; // ecx@6 | |
1405 int v6; // eax@9 | |
1406 size_t v7; // eax@10 | |
1407 GUIFont *v8; // ecx@10 | |
1408 char v9; // zf@12 | |
1409 //unsigned int v10; // ST08_4@13 | |
1410 int v11; // eax@13 | |
1411 | |
1412 if ( pFooterString[0] || GameUI_Footer_TimeLeft || bForceDrawFooter ) | |
1413 { | |
1414 pRenderer->DrawTextureRGB(0, 352u, pTexture_StatusBar); | |
1415 if ( GameUI_Footer_TimeLeft ) | |
1416 { | |
1417 v1 = GameUI_Footer_TimedString.data(); | |
1418 v2 = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); | |
1419 v3 = 450; | |
1420 while ( v2 > 450 ) | |
1421 { | |
1422 v4 = strlen(GameUI_Footer_TimedString.data()); | |
1423 v5 = pFontLucida; | |
1470 | 1424 GameUI_Footer_TimedString[v4 - 1] = 0; |
1298 | 1425 v2 = pFontLucida->GetLineWidth(GameUI_Footer_TimedString.data()); |
1426 } | |
1427 } | |
1428 else | |
1429 { | |
1430 v1 = pFooterString.data(); | |
1431 v6 = pFontLucida->GetLineWidth(pFooterString.data()); | |
1432 v3 = 450; | |
1433 while ( v6 > 450 ) | |
1434 { | |
1435 v7 = strlen(pFooterString.data()); | |
1436 v8 = pFontLucida; | |
1470 | 1437 pFooterString[v7 - 1] = 0; |
1298 | 1438 v6 = pFontLucida->GetLineWidth(pFooterString.data()); |
1439 } | |
1440 } | |
1441 v9 = *v1 == 0; | |
1442 bForceDrawFooter = 0; | |
1443 if ( !v9 ) | |
1444 { | |
1445 v11 = pFontLucida->AlignText_Center(v3, v1); | |
1446 pPrimaryWindow->DrawText(pFontLucida, v11 + 11, 357, uGameUIFontMain, v1, 0, 0, uGameUIFontShadow); | |
1447 } | |
1448 } | |
1449 } | |
1450 // 5C35BC: using guessed type int bForceDrawFooter; | |
1451 | |
1452 | |
1453 //----- (00420EFF) -------------------------------------------------------- | |
1458 | 1454 void GameUI_WritePointedObjectStatusString() |
1298 | 1455 { |
1456 int v1; // ebx@6 | |
1457 GUIWindow *pWindow; // edi@7 | |
1458 GUIButton *pButton; // ecx@11 | |
1459 Player *pPlayer; // eax@19 | |
1460 char v5; // cl@19 | |
1461 unsigned int v6; // eax@19 | |
1462 int v7; // ecx@19 | |
1463 __int16 v8; // fps@23 | |
1464 unsigned __int8 v9; // c0@23 | |
1465 unsigned __int8 v10; // c3@23 | |
1466 enum UIMessageType pMessageType1; // esi@24 | |
1467 //int v12; // edx@25 | |
1468 char *v13; // ecx@28 | |
1469 int v14; // eax@41 | |
1470 ItemGen *pItemGen; // ecx@44 | |
1471 int v16; // ecx@46 | |
1472 const char *v17; // eax@49 | |
1473 signed int v18; // eax@55 | |
1474 signed int v18b; | |
1475 signed int v19; // ecx@63 | |
1476 BLVFace *pFace; // eax@69 | |
1477 __int16 v21; // ax@70 | |
1478 const char *v22; // eax@72 | |
1479 LevelDecoration *v23; // ecx@75 | |
1480 LevelDecoration *v24; // esi@75 | |
1481 __int16 v25; // ax@75 | |
1482 const char *v26; // ecx@79 | |
1483 Actor *pActor; // ecx@82 | |
1484 char *v28; // esi@82 | |
1485 int v29; // eax@82 | |
1486 signed int v30; // ecx@88 | |
1487 const char *v31; // eax@91 | |
1488 __int16 v32; // fps@109 | |
1489 //unsigned __int8 v33; // c0@109 | |
1490 //unsigned __int8 v34; // c3@109 | |
1491 enum UIMessageType pMessageType2; // esi@110 | |
1492 //int v36; // edx@111 | |
1493 enum UIMessageType pMessageType3; // edx@117 | |
1494 //int v38; // ecx@118 | |
1495 const char *v39; // [sp-8h] [bp-E8h]@20 | |
1496 char *v40; // [sp-8h] [bp-E8h]@83 | |
1497 int v41; // [sp-4h] [bp-E4h]@20 | |
1498 char Str1[200]; // [sp+Ch] [bp-D4h]@129 | |
1499 unsigned int pX; // [sp+D4h] [bp-Ch]@1 | |
1500 unsigned int pY; // [sp+D8h] [bp-8h]@1 | |
1501 unsigned int v45; // [sp+DCh] [bp-4h]@21 | |
1502 | |
1503 v13 = nullptr; | |
1504 | |
1505 pMouse->uPointingObjectID = 0; | |
1506 pMouse->GetClickPos(&pX, &pY); | |
1507 if ( pX < 0 || (signed int)pX > 639 || pY < 0 || (signed int)pY > 479 )//( (pX & 0x80000000u) != 0 || (signed int)pX > 639 || (pY & 0x80000000u) != 0 || (signed int)pY > 479 ) | |
1508 return; | |
1509 if (pCurrentScreen == SCREEN_GAME) | |
1510 { | |
1511 if ( (signed int)pX > 467 || (signed int)pY > 351 ) | |
1512 goto _click_on_game_ui; | |
1513 if ( pRenderer->pRenderD3D ) // inlined mm8::4C1E01 | |
1514 { | |
1515 v18 = pGame->pVisInstance->get_picked_object_zbuf_val(); | |
1516 if ( (signed int)pX < (signed int)pViewport->uScreen_TL_X | |
1517 || (signed int)pX > (signed int)pViewport->uScreen_BR_X | |
1518 || (signed int)pY < (signed int)pViewport->uScreen_TL_Y | |
1519 || (signed int)pY > (signed int)pViewport->uScreen_BR_Y ) | |
1520 v18 = -1; | |
1521 if ( v18 == -1 ) | |
1522 //goto LABEL_61; | |
1523 { | |
1524 pMouse->uPointingObjectID = 0; | |
1525 if ( pMouse->uPointingObjectID == 0 ) | |
1526 { | |
1527 if ( uLastPointedObjectID != 0 ) | |
1528 { | |
1529 pFooterString[0] = 0; | |
1530 bForceDrawFooter = 1; | |
1531 } | |
1532 } | |
1533 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1534 return; | |
1535 } | |
1536 } | |
1537 else | |
1538 { | |
1539 v18 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]]; | |
1540 } | |
1541 pMouse->uPointingObjectID = (unsigned __int16)v18; | |
1542 v19 = (signed)PID_ID(v18); | |
1543 if (PID_TYPE(v18) == OBJECT_Item) | |
1544 { | |
1545 v30 = v19; | |
1546 if ( pObjectList->pObjects[pSpriteObjects[v30].uObjectDescID].uFlags & 0x10 ) | |
1547 //goto LABEL_73; | |
1548 { | |
1549 pMouse->uPointingObjectID = 0; | |
1550 //goto LABEL_50; | |
1551 uLastPointedObjectID = 1; | |
1552 if ( pMouse->uPointingObjectID == 0 ) | |
1553 { | |
1554 if ( uLastPointedObjectID != 0 ) | |
1555 { | |
1556 pFooterString[0] = 0; | |
1557 bForceDrawFooter = 1; | |
1558 } | |
1559 } | |
1560 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1561 return; | |
1562 } | |
1563 if ( v18 >= (signed int)0x2000000u || pParty->pPickedItem.uItemID ) | |
1564 { | |
1565 v22 = pSpriteObjects[v30].stru_24.GetDisplayName(); | |
1566 //LABEL_93: | |
1567 v26 = v22; | |
1568 //goto LABEL_87; | |
1569 GameUI_SetFooterString(v26); | |
1570 if ( pMouse->uPointingObjectID == 0 ) | |
1571 { | |
1572 if ( uLastPointedObjectID != 0 ) | |
1573 { | |
1574 pFooterString[0] = 0; | |
1575 bForceDrawFooter = 1; | |
1576 } | |
1577 } | |
1578 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1579 return; | |
1580 } | |
1581 v31 = pSpriteObjects[v30].stru_24.GetDisplayName(); | |
1582 v28 = pTmpBuf.data(); | |
1583 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[470], v31);// "Get %s" | |
1584 } | |
1585 else | |
1586 { | |
1587 if (PID_TYPE(v18) != OBJECT_Actor) | |
1588 { | |
1589 if (PID_TYPE(v18) == OBJECT_Decoration) | |
1590 { | |
1591 v23 = &pLevelDecorations[v19]; | |
1592 v24 = v23; | |
1593 v25 = v23->field_16_event_id; | |
1594 if ( !v25 ) | |
1595 { | |
1596 if ( v23->IsInteractive() ) | |
1597 v26 = pNPCTopics[stru_5E4C90._decor_events[v24->_idx_in_stru123 - 75] + 379].pTopic; | |
1598 else | |
1599 v26 = pDecorationList->pDecorations[v24->uDecorationDescID].field_20; | |
1600 //goto LABEL_87; | |
1601 GameUI_SetFooterString(v26); | |
1602 if ( pMouse->uPointingObjectID == 0 ) | |
1603 { | |
1604 if ( uLastPointedObjectID != 0 ) | |
1605 { | |
1606 pFooterString[0] = 0; | |
1607 bForceDrawFooter = 1; | |
1608 } | |
1609 } | |
1610 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1611 return; | |
1612 } | |
1613 v22 = GetEventHintString(v25); | |
1614 if ( !v22 ) | |
1615 //goto _return; | |
1616 { | |
1617 if ( pMouse->uPointingObjectID == 0 ) | |
1618 { | |
1619 if ( uLastPointedObjectID != 0 ) | |
1620 { | |
1621 pFooterString[0] = 0; | |
1622 bForceDrawFooter = 1; | |
1623 } | |
1624 } | |
1625 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1626 return; | |
1627 } | |
1628 //goto LABEL_93; | |
1629 v26 = v22; | |
1630 //goto LABEL_87; | |
1631 GameUI_SetFooterString(v26); | |
1632 if ( pMouse->uPointingObjectID == 0 ) | |
1633 { | |
1634 if ( uLastPointedObjectID != 0 ) | |
1635 { | |
1636 pFooterString[0] = 0; | |
1637 bForceDrawFooter = 1; | |
1638 } | |
1639 } | |
1640 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1641 return; | |
1642 } | |
1643 if (PID_TYPE(v18) == OBJECT_BModel) | |
1644 { | |
1645 if ( HIWORD(v18) < 512) | |
1646 { | |
1647 if ( uCurrentlyLoadedLevelType != LEVEL_Indoor) | |
1648 { | |
1649 v18b = (signed int)(unsigned __int16)v18 >> 9; | |
1650 v21 = pOutdoor->pBModels[v18b].pFaces[v19 & 0x3F].sCogTriggeredID; | |
1651 //goto LABEL_71; | |
1652 if ( !v21 || (v22 = GetEventHintString(v21)) == 0 ) | |
1653 //goto LABEL_73; | |
1654 { | |
1655 pMouse->uPointingObjectID = 0; | |
1656 //goto LABEL_50; | |
1657 uLastPointedObjectID = 1; | |
1658 if ( pMouse->uPointingObjectID == 0 ) | |
1659 { | |
1660 if ( uLastPointedObjectID != 0 ) | |
1661 { | |
1662 pFooterString[0] = 0; | |
1663 bForceDrawFooter = 1; | |
1664 } | |
1665 } | |
1666 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1667 return; | |
1668 } | |
1669 //goto LABEL_93; | |
1670 v26 = v22; | |
1671 //goto LABEL_87; | |
1672 GameUI_SetFooterString(v26); | |
1673 if ( pMouse->uPointingObjectID == 0 ) | |
1674 { | |
1675 if ( uLastPointedObjectID != 0 ) | |
1676 { | |
1677 pFooterString[0] = 0; | |
1678 bForceDrawFooter = 1; | |
1679 } | |
1680 } | |
1681 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1682 return; | |
1683 } | |
1684 pFace = &pIndoor->pFaces[v19]; | |
1685 if ( BYTE3(pFace->uAttributes) & 6 ) | |
1686 { | |
1687 v21 = pIndoor->pFaceExtras[pFace->uFaceExtraID].uEventID; | |
1688 //LABEL_71: | |
1689 if ( !v21 || (v22 = GetEventHintString(v21)) == 0 ) | |
1690 //goto LABEL_73; | |
1691 { | |
1692 pMouse->uPointingObjectID = 0; | |
1693 //goto LABEL_50; | |
1694 uLastPointedObjectID = 1; | |
1695 if ( pMouse->uPointingObjectID == 0 ) | |
1696 { | |
1697 if ( uLastPointedObjectID != 0 ) | |
1698 { | |
1699 pFooterString[0] = 0; | |
1700 bForceDrawFooter = 1; | |
1701 } | |
1702 } | |
1703 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1704 return; | |
1705 } | |
1706 //goto LABEL_93; | |
1707 v26 = v22; | |
1708 //goto LABEL_87; | |
1709 GameUI_SetFooterString(v26); | |
1710 if ( pMouse->uPointingObjectID == 0 ) | |
1711 { | |
1712 if ( uLastPointedObjectID != 0 ) | |
1713 { | |
1714 pFooterString[0] = 0; | |
1715 bForceDrawFooter = 1; | |
1716 } | |
1717 } | |
1718 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1719 return; | |
1720 } | |
1721 } | |
1722 //LABEL_73: | |
1723 pMouse->uPointingObjectID = 0; | |
1724 //goto LABEL_50; | |
1725 uLastPointedObjectID = 1; | |
1726 if ( pMouse->uPointingObjectID == 0 ) | |
1727 { | |
1728 if ( uLastPointedObjectID != 0 ) | |
1729 { | |
1730 pFooterString[0] = 0; | |
1731 bForceDrawFooter = 1; | |
1732 } | |
1733 } | |
1734 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1735 return; | |
1736 } | |
1737 //LABEL_61: | |
1738 pMouse->uPointingObjectID = 0; | |
1739 //goto _return; | |
1740 if ( pMouse->uPointingObjectID == 0 ) | |
1741 { | |
1742 if ( uLastPointedObjectID != 0 ) | |
1743 { | |
1744 pFooterString[0] = 0; | |
1745 bForceDrawFooter = 1; | |
1746 } | |
1747 } | |
1748 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1749 return; | |
1750 } | |
1751 if ( v18 >= 335544320 ) | |
1752 //goto LABEL_61; | |
1753 { | |
1754 pMouse->uPointingObjectID = 0; | |
1755 if ( pMouse->uPointingObjectID == 0 ) | |
1756 { | |
1757 if ( uLastPointedObjectID != 0 ) | |
1758 { | |
1759 pFooterString[0] = 0; | |
1760 bForceDrawFooter = 1; | |
1761 } | |
1762 } | |
1763 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1764 return; | |
1765 } | |
1766 pActor = &pActors[v19]; | |
1767 v28 = pTmpBuf.data(); | |
1768 v29 = pActor->dword_000334_unique_name; | |
1769 if ( v29 ) | |
1770 v40 = pMonsterStats->pPlaceStrings[v29]; | |
1771 else | |
1772 v40 = pMonsterStats->pInfos[pActor->pMonsterInfo.uID].pName; | |
1773 strncpy(pTmpBuf.data(), v40, 0x7D0u); | |
1774 } | |
1775 v26 = v28; | |
1776 //LABEL_87: | |
1777 GameUI_SetFooterString(v26); | |
1778 //goto _return; | |
1779 if ( pMouse->uPointingObjectID == 0 ) | |
1780 { | |
1781 if ( uLastPointedObjectID != 0 ) | |
1782 { | |
1783 pFooterString[0] = 0; | |
1784 bForceDrawFooter = 1; | |
1785 } | |
1786 } | |
1787 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1788 return; | |
1789 } | |
1790 v1 = uNumVisibleWindows; | |
1791 if ( uNumVisibleWindows > 0 ) | |
1792 { | |
1793 while ( 1 ) // some other fullscreen ui | |
1794 { | |
1795 pWindow = &pWindowList[pVisibleWindowsIdxs[v1] - 1]; | |
1796 if ( (signed int)pX >= (signed int)pWindow->uFrameX | |
1797 && (signed int)pX <= (signed int)pWindow->uFrameZ | |
1798 && (signed int)pY >= (signed int)pWindow->uFrameY | |
1799 && (signed int)pY <= (signed int)pWindow->uFrameW ) | |
1800 { | |
1801 for ( pButton = pWindow->pControlsHead; ; pButton = pButton->pNext ) | |
1802 { | |
1803 if ( !pButton ) | |
1804 break; | |
1805 if ( pButton->uButtonType == 1 ) | |
1806 { | |
1807 if ( (signed int)pX >= (signed int)pButton->uX | |
1808 && (signed int)pX <= (signed int)pButton->uZ | |
1809 && (signed int)pY >= (signed int)pButton->uY | |
1810 && (signed int)pY <= (signed int)pButton->uW ) | |
1811 { | |
1812 //LABEL_24: | |
1813 pMessageType1 = (UIMessageType)pButton->field_1C; | |
1814 if ( pMessageType1 ) | |
1815 { | |
1816 pMessageQueue_50CBD0->AddMessage(pMessageType1, pButton->msg_param, 0); | |
1817 } | |
1818 //LABEL_28: | |
1819 v13 = pButton->pButtonName; | |
1820 //_set_status_and_ret: | |
1821 GameUI_SetFooterString(v13); | |
1822 //LABEL_131: | |
1823 uLastPointedObjectID = 1; | |
1824 return; | |
1825 } | |
1826 } | |
1827 else | |
1828 { | |
1829 if ( pButton->uButtonType == 2 ) | |
1830 { | |
1831 v45 = pX - pButton->uX; | |
1832 v45 = pY - pButton->uY; | |
1833 if ( (double)(signed int)pButton->uWidth != 0.0 ) | |
1834 { | |
1835 if ( (double)(signed int)pButton->uHeight != 0.0 ) | |
1836 { | |
1837 pMessageType1 = (UIMessageType)pButton->field_1C; | |
1838 if ( pMessageType1 ) | |
1839 { | |
1840 pMessageQueue_50CBD0->AddMessage(pMessageType1, pButton->msg_param, 0); | |
1841 } | |
1842 v13 = pButton->pButtonName; | |
1843 GameUI_SetFooterString(v13); | |
1844 uLastPointedObjectID = 1; | |
1845 return; | |
1846 //} | |
1847 } | |
1848 } | |
1849 } | |
1850 else // click on skill | |
1851 { | |
1852 if ( pButton->uButtonType == 3 | |
1853 && (signed int)pX >= (signed int)pButton->uX | |
1854 && (signed int)pX <= (signed int)pButton->uZ | |
1855 && (signed int)pY >= (signed int)pButton->uY | |
1856 && (signed int)pY <= (signed int)pButton->uW ) | |
1857 { | |
1858 //LABEL_19: | |
1859 pPlayer = pPlayers[uActiveCharacter]; | |
1860 v5 = LOBYTE(pPlayer->pActiveSkills[pButton->msg_param]); | |
1861 v6 = pPlayer->uSkillPoints; | |
1862 v7 = (v5 & 0x3F) + 1; | |
1863 if ( v6 < v7 ) | |
1864 { | |
1865 v41 = v7 - v6; | |
1866 v39 = pGlobalTXT_LocalizationStrings[469];// "You need %d more Skill Points to advance here" | |
1867 } | |
1868 else | |
1869 { | |
1870 v41 = v7; | |
1871 v39 = pGlobalTXT_LocalizationStrings[468];// "Clicking here will spend %d Skill Points" | |
1872 } | |
1873 sprintf(Str1, v39, v41); | |
1874 v13 = Str1; | |
1875 //goto _set_status_and_ret; | |
1876 GameUI_SetFooterString(v13); | |
1877 uLastPointedObjectID = 1; | |
1878 return; | |
1879 } | |
1880 } | |
1881 } | |
1882 } | |
1883 } | |
1884 if ( pWindow->uFrameHeight == 480 ) | |
1885 break; | |
1886 --v1; | |
1887 if ( v1 <= 0 ) | |
1888 { | |
1889 break; | |
1890 } | |
1891 } | |
1892 } | |
1893 if ( uNumVisibleWindows <= 0 || (uNumVisibleWindows > 0 && pWindow->uFrameHeight != 480 && v1 <= 0)) | |
1894 { | |
1895 if ( pCurrentScreen == SCREEN_CHEST ) | |
1896 { | |
1414 | 1897 ChestUI_WritePointedObjectStatusString(); |
1298 | 1898 //goto _return; |
1899 if ( pMouse->uPointingObjectID == 0 ) | |
1900 { | |
1901 if ( uLastPointedObjectID != 0 ) | |
1902 { | |
1903 pFooterString[0] = 0; | |
1904 bForceDrawFooter = 1; | |
1905 } | |
1906 } | |
1907 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1908 return; | |
1909 } | |
1910 if ( pCurrentScreen == SCREEN_HOUSE ) | |
1911 { | |
1912 if ( dialog_menu_id != HOUSE_DIALOGUE_SHOP_BUY_STANDARD | |
1913 || (v16 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]], v16 == 0) | |
1914 || v16 == -65536 ) | |
1915 //goto _return; | |
1916 { | |
1917 if ( pMouse->uPointingObjectID == 0 ) | |
1918 { | |
1919 if ( uLastPointedObjectID != 0 ) | |
1920 { | |
1921 pFooterString[0] = 0; | |
1922 bForceDrawFooter = 1; | |
1923 } | |
1924 } | |
1925 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1926 return; | |
1927 } | |
1928 pItemGen = (ItemGen *)((char *)&pParty->pPickedItem + 36 * (v16 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 4); | |
1929 //LABEL_49: | |
1930 v17 = pItemGen->GetDisplayName(); | |
1931 GameUI_SetFooterString(v17); | |
1932 //LABEL_50: | |
1933 uLastPointedObjectID = 1; | |
1934 //_return: | |
1935 if ( pMouse->uPointingObjectID == 0 ) | |
1936 { | |
1937 if ( uLastPointedObjectID != 0 ) | |
1938 { | |
1939 pFooterString[0] = 0; | |
1940 bForceDrawFooter = 1; | |
1941 } | |
1942 } | |
1943 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1944 return; | |
1945 } | |
1946 if ( (signed int)pY < 350 ) | |
1947 { | |
1948 v14 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]]; | |
1949 if ( v14 == 0 || v14 == -65536 || (unsigned int)v14 >= 0x1388 ) | |
1950 //goto _return; | |
1951 { | |
1952 if ( pMouse->uPointingObjectID == 0 ) | |
1953 { | |
1954 if ( uLastPointedObjectID != 0 ) | |
1955 { | |
1956 pFooterString[0] = 0; | |
1957 bForceDrawFooter = 1; | |
1958 } | |
1959 } | |
1960 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1961 return; | |
1962 } | |
1384
b51332ab228f
changed a few member variables in Player to slightly less confusing names
Grumpy7
parents:
1362
diff
changeset
|
1963 pItemGen = (ItemGen *)&pPlayers[uActiveCharacter]->pInventoryItemList[v14-1]; |
1298 | 1964 //goto LABEL_49; |
1965 v17 = pItemGen->GetDisplayName(); | |
1966 GameUI_SetFooterString(v17); | |
1967 uLastPointedObjectID = 1; | |
1968 if ( pMouse->uPointingObjectID == 0 ) | |
1969 { | |
1970 if ( uLastPointedObjectID != 0 ) | |
1971 { | |
1972 pFooterString[0] = 0; | |
1973 bForceDrawFooter = 1; | |
1974 } | |
1975 } | |
1976 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1977 return; | |
1978 } | |
1979 _click_on_game_ui: | |
1980 if ( (signed int)pX >= (signed int)pWindowList[0].uFrameX | |
1981 && (signed int)pX <= (signed int)pWindowList[0].uFrameZ | |
1982 && (signed int)pY >= (signed int)pWindowList[0].uFrameY | |
1983 && (signed int)pY <= (signed int)pWindowList[0].uFrameW ) | |
1984 { | |
1985 for ( pButton = pWindowList[0].pControlsHead; pButton != (GUIButton *)0; pButton = pButton->pNext ) | |
1986 { | |
1987 if ( pButton->uButtonType == 1 ) | |
1988 { | |
1989 if ( (signed int)pX >= (signed int)pButton->uX | |
1990 && (signed int)pX <= (signed int)pButton->uZ | |
1991 && (signed int)pY >= (signed int)pButton->uY | |
1992 && (signed int)pY <= (signed int)pButton->uW ) | |
1993 { | |
1994 pMessageType3 = (UIMessageType)pButton->field_1C; | |
1995 if ( pMessageType3 == 0 ) // For books | |
1996 //goto LABEL_28; | |
1997 { | |
1998 v13 = pButton->pButtonName; | |
1999 GameUI_SetFooterString(v13); | |
2000 uLastPointedObjectID = 1; | |
2001 return; | |
2002 } | |
2003 | |
2004 pMessageQueue_50CBD0->AddMessage(pMessageType3, pButton->msg_param, 0); | |
2005 //goto LABEL_131; | |
2006 uLastPointedObjectID = 1; | |
2007 return; | |
2008 } | |
2009 } | |
2010 else | |
2011 { | |
2012 if ( pButton->uButtonType == 2 ) | |
2013 { | |
2014 v45 = pX - pButton->uX; | |
2015 v45 = pY - pButton->uY; | |
2016 | |
2017 if (pX >= pButton->uX && pX <= pButton->uZ && | |
2018 pY >= pButton->uY && pY <= pButton->uW) | |
2019 if ( (double)(signed int)pButton->uWidth != 0.0 ) | |
2020 { | |
2021 if ( (double)(signed int)pButton->uHeight != 0.0 ) | |
2022 { | |
2023 //UNDEF(v32); | |
2024 //if ( v33 | v34 ) | |
2025 //{ | |
2026 pMessageType2 = (UIMessageType)pButton->field_1C; | |
2027 if ( pMessageType2 != 0 ) | |
2028 pMessageQueue_50CBD0->AddMessage(pMessageType2, pButton->msg_param, 0); | |
2029 | |
2030 //goto LABEL_28; | |
2031 v13 = pButton->pButtonName; | |
2032 GameUI_SetFooterString(v13); | |
2033 uLastPointedObjectID = 1; | |
2034 return; | |
2035 //} | |
2036 } | |
2037 } | |
2038 } | |
2039 else | |
2040 { | |
2041 if ( pButton->uButtonType == 3 | |
2042 && (signed int)pX >= (signed int)pButton->uX | |
2043 && (signed int)pX <= (signed int)pButton->uZ | |
2044 && (signed int)pY >= (signed int)pButton->uY | |
2045 && (signed int)pY <= (signed int)pButton->uW ) | |
2046 //goto LABEL_19; | |
2047 { | |
2048 pPlayer = pPlayers[uActiveCharacter]; | |
2049 v5 = LOBYTE(pPlayer->pActiveSkills[pButton->msg_param]); | |
2050 v6 = pPlayer->uSkillPoints; | |
2051 v7 = (v5 & 0x3F) + 1; | |
2052 if ( v6 < v7 ) | |
2053 { | |
2054 v41 = v7 - v6; | |
2055 v39 = pGlobalTXT_LocalizationStrings[469];// "You need %d more Skill Points to advance here" | |
2056 } | |
2057 else | |
2058 { | |
2059 v41 = v7; | |
2060 v39 = pGlobalTXT_LocalizationStrings[468];// "Clicking here will spend %d Skill Points" | |
2061 } | |
2062 sprintf(Str1, v39, v41); | |
2063 v13 = Str1; | |
2064 //goto _set_status_and_ret; | |
2065 GameUI_SetFooterString(v13); | |
2066 uLastPointedObjectID = 1; | |
2067 return; | |
2068 } | |
2069 } | |
2070 } | |
2071 } | |
2072 } | |
2073 pMouse->uPointingObjectID = sub_46A99B(); | |
2074 //goto _return; | |
2075 if ( pMouse->uPointingObjectID == 0 ) | |
2076 { | |
2077 if ( uLastPointedObjectID != 0 ) | |
2078 { | |
2079 pFooterString[0] = 0; | |
2080 bForceDrawFooter = 1; | |
2081 } | |
2082 } | |
2083 uLastPointedObjectID = pMouse->uPointingObjectID; | |
2084 return; | |
2085 } | |
2086 } | |
2087 | |
2088 | |
2089 //----- (0044158F) -------------------------------------------------------- | |
2090 void GameUI_DrawCharacterSelectionFrame() | |
2091 { | |
2092 if ( uActiveCharacter ) | |
2093 pRenderer->DrawTextureTransparent(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[uActiveCharacter - 1] - 9, 380, | |
2094 pIcons_LOD->GetTexture(uTextureID_GameUI_CharSelectionFrame)); | |
2095 } | |
2096 | |
2097 | |
2098 | |
2099 //----- (0044162D) -------------------------------------------------------- | |
2100 void GameUI_DrawPartySpells() | |
2101 { | |
2102 unsigned int v0; // ebp@1 | |
2103 //signed int v1; // edi@1 | |
2104 //int v2; // eax@2 | |
2105 //int v3; // ecx@5 | |
2106 //__int16 *v4; // ebx@25 | |
2107 //Player *v5; // edi@26 | |
2108 //unsigned int v6; // [sp-4h] [bp-1Ch]@11 | |
2109 Texture *v7; // [sp-4h] [bp-1Ch]@12 | |
2110 //unsigned int v8; // [sp-4h] [bp-1Ch]@20 | |
2111 Texture *v9; // [sp-4h] [bp-1Ch]@21 | |
2112 //Player **v10; // [sp+10h] [bp-8h]@25 | |
2113 | |
2114 v0 = (signed __int64)((double)GetTickCount() * 0.050000001); | |
2115 //v1 = 0; | |
2116 for (uint i = 0; i < 14; ++i) | |
2117 { | |
2118 //v2 = byte_4E5DD8[v1]; | |
2119 if (pParty->pPartyBuffs[byte_4E5DD8[i]].uExpireTime) | |
2120 { | |
2121 auto tex = pIcons_LOD->GetTexture(pTextureIDs_PartyBuffIcons[i]); | |
2122 //v3 = pTextureIDs_PartyBuffIcons[i]; | |
2123 pRenderer->_4A65CC(pPartySpellbuffsUI_XYs[i][0], | |
2124 pPartySpellbuffsUI_XYs[i][1], tex, tex, | |
2125 v0 + 20 * pPartySpellbuffsUI_smthns[i], 0, 63); | |
2126 } | |
2127 //++v1; | |
2128 } | |
2129 //while ( v1 < 14 ); | |
2130 | |
2131 if (pCurrentScreen == SCREEN_GAME || pCurrentScreen == SCREEN_NPC_DIALOGUE) | |
2132 { | |
2133 if (pParty->FlyActive()) | |
2134 { | |
2135 if ( pParty->bFlying ) | |
2136 v7 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_FlySpell, v0)->uTextureID); | |
2137 else | |
2138 v7 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_FlySpell, 0)->uTextureID); | |
2139 if ( pRenderer->pRenderD3D ) | |
2140 pRenderer->DrawTextureIndexed(8, 8, v7); | |
2141 else | |
2142 pRenderer->DrawTextureTransparent(8, 8, v7); | |
2143 } | |
2144 if (pParty->WaterWalkActive()) | |
2145 { | |
2146 if ( pParty->uFlags & PARTY_FLAGS_1_STANDING_ON_WATER) | |
2147 v9 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, v0)->uTextureID); | |
2148 else | |
2149 v9 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, 0)->uTextureID); | |
2150 if ( pRenderer->pRenderD3D ) | |
2151 pRenderer->DrawTextureIndexed(396u, 8u, v9); | |
2152 else | |
2153 pRenderer->DrawTextureTransparent(396u, 8u, v9); | |
2154 } | |
2155 } | |
2156 | |
2157 for (uint i = 0; i < 4; ++i) | |
2158 { | |
2159 auto player = pParty->pPlayers + i; | |
2160 | |
2161 if (player->pPlayerBuffs[PLAYER_BUFF_HAMMERHANDS].uExpireTime) | |
2162 pRenderer->DrawTextureIndexed(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 427, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_Hammerhands)); | |
2163 if (player->pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime) | |
2164 pRenderer->DrawTextureIndexed(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 393, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_Bless)); | |
2165 if (player->pPlayerBuffs[PLAYER_BUFF_PRESERVATION].uExpireTime) | |
2166 pRenderer->DrawTextureIndexed(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 410, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_Preservation)); | |
2167 if (player->pPlayerBuffs[PLAYER_BUFF_PAIN_REFLECTION].uExpireTime) | |
2168 pRenderer->DrawTextureIndexed(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] + 72, 444, pIcons_LOD->GetTexture(uTextureID_PlayerBuff_PainReflection)); | |
2169 } | |
2170 } | |
2171 | |
2172 | |
2173 | |
2174 //----- (004921C1) -------------------------------------------------------- | |
2175 void GameUI_DrawPortraits(unsigned int _this) | |
2176 { | |
2177 Texture *pFace; // eax@10 | |
2178 unsigned int v7; // eax@17 | |
2179 PlayerFrame *pFrame; // eax@21 | |
2180 unsigned int v9; // eax@27 | |
2181 bool v10; // eax@33 | |
2182 bool v11; // edi@40 | |
2183 bool v12; // edx@43 | |
2184 bool v13; // ecx@46 | |
2185 int v16; // eax@57 | |
2186 int v19; // eax@62 | |
2187 Texture *pPortrait; // [sp-4h] [bp-1Ch]@27 | |
1407 | 2188 //unsigned int v22; // [sp+14h] [bp-4h]@1 |
1298 | 2189 |
1407 | 2190 //v22 = _this; |
1298 | 2191 if ( qword_A750D8 ) |
2192 { | |
2193 qword_A750D8 -= (signed int)pMiscTimer->uTimeElapsed; | |
2194 if ( qword_A750D8 <= 0 ) | |
2195 { | |
1407 | 2196 if ( pPlayers[uSpeakingCharacter]->CanAct() ) |
2197 pPlayers[uSpeakingCharacter]->PlaySound(PlayerSpeechID, 0); | |
1298 | 2198 qword_A750D8 = 0i64; |
2199 } | |
2200 } | |
2201 | |
2202 for (uint i = 0; i < 4; ++i) | |
2203 { | |
1407 | 2204 Player* pPlayer = &pParty->pPlayers[i]; |
1298 | 2205 |
1362
d6cf8ead9242
Condition checking functions slightly renamed, some final changes in Player::SetCondition
Grumpy7
parents:
1340
diff
changeset
|
2206 if (pPlayer->IsEradicated()) |
1298 | 2207 { |
2208 pFace = pTexture_PlayerFaceEradicated; | |
2209 pPortrait = pFace; | |
2210 v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]; | |
2211 if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) | |
2212 pRenderer->_4A6E7E(v9, 0x183u, pPortrait); | |
2213 else | |
2214 pRenderer->DrawTextureTransparent(v9 + 1, 0x184u, pPortrait); | |
2215 auto _v1 = 0; | |
2216 v10 = pPlayer->pPlayerBuffs[14].uExpireTime > 0; | |
2217 if (pPlayer->pPlayerBuffs[1].uExpireTime > 0) | |
2218 _v1 = 1; | |
2219 v11 = pPlayer->pPlayerBuffs[8].uExpireTime > 0; | |
2220 v12 = pPlayer->pPlayerBuffs[7].uExpireTime > 0; | |
2221 v13 = pPlayer->pPlayerBuffs[13].uExpireTime > 0; | |
2222 if ( v13 | v12 | v11 | _v1 | v10 ) | |
2223 sub_441A4E(i); | |
2224 continue; | |
2225 } | |
1362
d6cf8ead9242
Condition checking functions slightly renamed, some final changes in Player::SetCondition
Grumpy7
parents:
1340
diff
changeset
|
2226 if (pPlayer->IsDead()) |
1298 | 2227 { |
2228 pFace = pTexture_PlayerFaceDead; | |
2229 pPortrait = pFace; | |
2230 v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]; | |
2231 if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) | |
2232 pRenderer->_4A6E7E(v9, 0x183u, pPortrait); | |
2233 else | |
2234 pRenderer->DrawTextureTransparent(v9 + 1, 0x184u, pPortrait); | |
2235 auto _v1 = 0; | |
2236 v10 = pPlayer->pPlayerBuffs[14].uExpireTime > 0; | |
2237 if (pPlayer->pPlayerBuffs[1].uExpireTime > 0) | |
2238 _v1 = 1; | |
2239 v11 = pPlayer->pPlayerBuffs[8].uExpireTime > 0; | |
2240 v12 = pPlayer->pPlayerBuffs[7].uExpireTime > 0; | |
2241 v13 = pPlayer->pPlayerBuffs[13].uExpireTime > 0; | |
2242 if ( v13 | v12 | v11 | _v1 | v10 ) | |
2243 sub_441A4E(i); | |
2244 continue; | |
2245 } | |
2246 v7 = 0; | |
2247 for (uint j = 0; j < pPlayerFrameTable->uNumFrames; ++j) | |
2248 if (pPlayerFrameTable->pFrames[j].expression == pPlayer->expression) | |
2249 { | |
2250 v7 = j; | |
2251 break; | |
2252 } | |
2253 if ( v7 == 0 ) | |
2254 v7 = 1; | |
2255 if (pPlayer->expression == CHARACTER_EXPRESSION_21) | |
2256 pFrame = pPlayerFrameTable->GetFrameBy_y(&pPlayer->_expression21_frameset, &pPlayer->_expression21_animtime, pMiscTimer->uTimeElapsed); | |
2257 else | |
2258 pFrame = pPlayerFrameTable->GetFrameBy_x(v7, pPlayer->uExpressionTimePassed); | |
1407 | 2259 if (pPlayer->field_1AA2 != pFrame->uTextureID - 1 || _this ) |
1298 | 2260 { |
2261 pPlayer->field_1AA2 = pFrame->uTextureID - 1; | |
2262 pFace = (Texture *)pTextures_PlayerFaces[i][pPlayer->field_1AA2];//pFace = (Texture *)pTextures_PlayerFaces[i][pFrame->uTextureID]; | |
2263 pPortrait = pFace; | |
2264 v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i]; | |
2265 if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) | |
2266 pRenderer->_4A6E7E(v9, 0x183u, pPortrait); | |
2267 else | |
2268 pRenderer->DrawTextureTransparent(v9 + 1, 0x184u, pPortrait); | |
2269 auto _v1 = 0; | |
2270 v10 = pPlayer->pPlayerBuffs[14].uExpireTime > 0; | |
2271 if (pPlayer->pPlayerBuffs[1].uExpireTime > 0) | |
2272 _v1 = 1; | |
2273 v11 = pPlayer->pPlayerBuffs[8].uExpireTime > 0; | |
2274 v12 = pPlayer->pPlayerBuffs[7].uExpireTime > 0; | |
2275 v13 = pPlayer->pPlayerBuffs[13].uExpireTime > 0; | |
2276 if ( v13 | v12 | v11 | _v1 | v10 ) | |
2277 sub_441A4E(i); | |
2278 continue; | |
2279 } | |
2280 } | |
2281 if ( pParty->bTurnBasedModeOn == 1 ) | |
2282 { | |
1340 | 2283 if ( pTurnEngine->turn_stage != 1 ) |
1298 | 2284 { |
2285 if (PID_TYPE(pTurnEngine->pQueue[0].uPackedID) == OBJECT_Player) | |
2286 { | |
2287 //v14 = 0; | |
2288 if ( pTurnEngine->uActorQueueSize > 0 ) | |
2289 { | |
2290 //v15 = (char *)pTurnEngine->pQueue; | |
2291 for (uint i = 0; i < pTurnEngine->uActorQueueSize; ++i) | |
2292 { | |
2293 auto pElem = pTurnEngine->pQueue + i; | |
2294 | |
2295 if (PID_TYPE(pElem->uPackedID) != OBJECT_Player) | |
2296 break; | |
2297 v16 = dword_5079D0; | |
2298 if ( pParty->uFlags & 0x10 ) | |
2299 { | |
2300 v16 = dword_5079CC; | |
2301 } | |
2302 else | |
2303 { | |
2304 if ( pParty->uFlags & 0x20 ) | |
2305 v16 = dword_5079C8; | |
2306 } | |
2307 pRenderer->DrawTextureTransparent(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[PID_ID(pElem->uPackedID)] - 4, 0x181u, pIcons_LOD->GetTexture(v16)); | |
2308 } | |
2309 } | |
2310 } | |
2311 } | |
2312 } | |
2313 else | |
2314 { | |
2315 for (uint i = 0; i < 4; ++i) | |
2316 { | |
2317 auto pPlayer = pParty->pPlayers + i; | |
2318 if (pPlayer->CanAct() && !pPlayer->uTimeToRecovery) | |
2319 { | |
2320 v19 = dword_5079D0; | |
2321 if ( pParty->uFlags & 0x10 ) | |
2322 { | |
2323 v19 = dword_5079CC; | |
2324 } | |
2325 else | |
2326 { | |
2327 if ( pParty->uFlags & 0x20 ) | |
2328 v19 = dword_5079C8; | |
2329 } | |
2330 pRenderer->DrawTextureTransparent(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] - 4, 0x181u, pIcons_LOD->GetTexture(v19)); | |
2331 } | |
2332 } | |
2333 } | |
2334 } | |
2335 | |
2336 //----- (00441D38) -------------------------------------------------------- | |
2337 void GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int bRedrawOdmMinimap) | |
2338 { | |
2339 int uHeight; // ebx@6 | |
2340 __int16 v11; // cx@11 | |
2341 unsigned int v14; // ebx@23 | |
2342 int v15; // eax@23 | |
2343 __int16 v17; // di@30 | |
2344 double v18; // st7@30 | |
2345 float v19; // ST38_4@30 | |
2346 double v20; // st7@30 | |
2347 double v21; // st6@30 | |
2348 double v22; // st5@33 | |
2349 signed int v27; // eax@37 | |
2350 unsigned __int16 *v28; // ecx@37 | |
2351 signed int v29; // edi@40 | |
2352 //signed int v33; // ebx@50 | |
2353 //unsigned int v34; // eax@50 | |
2354 //signed int v35; // ecx@50 | |
2355 //unsigned __int16 v36; // di@66 | |
2356 int v37; // edi@72 | |
2357 int v38; // ebx@72 | |
2358 __int16 v39; // ax@87 | |
2359 int v40; // edi@91 | |
2360 int v41; // ebx@91 | |
2361 unsigned int v42; // eax@101 | |
2362 unsigned int v43; // ebx@101 | |
2363 unsigned int v44; // ST30_4@101 | |
2364 char *v45; // ebx@106 | |
2365 int v46; // edi@108 | |
2366 int v47; // eax@108 | |
2367 unsigned int v48; // ebx@114 | |
2368 unsigned int v49; // ST64_4@114 | |
2369 //unsigned int v51; // [sp-10h] [bp-64h]@79 | |
2370 unsigned int v52; // [sp-10h] [bp-64h]@100 | |
2371 //unsigned int v53; // [sp-Ch] [bp-60h]@79 | |
2372 unsigned int v54; // [sp-Ch] [bp-60h]@100 | |
2373 //unsigned int v55; // [sp-8h] [bp-5Ch]@77 | |
2374 unsigned int v56; // [sp-8h] [bp-5Ch]@100 | |
2375 //signed int v57; // [sp-4h] [bp-58h]@54 | |
2376 //unsigned __int16 v58; // [sp-4h] [bp-58h]@77 | |
2377 unsigned __int16 v59; // [sp-4h] [bp-58h]@100 | |
2378 //unsigned __int16 v60; // [sp+10h] [bp-44h]@66 | |
2379 //unsigned int v61; // [sp+10h] [bp-44h]@85 | |
2380 //unsigned int v63; // [sp+14h] [bp-40h]@85 | |
2381 //unsigned int v65; // [sp+18h] [bp-3Ch]@85 | |
2382 unsigned int lPitch; // [sp+20h] [bp-34h]@1 | |
2383 unsigned int lPitcha; // [sp+20h] [bp-34h]@23 | |
2384 char *lPitchb; // [sp+20h] [bp-34h]@106 | |
2385 unsigned int v69; // [sp+24h] [bp-30h]@23 | |
2386 signed int v70; // [sp+24h] [bp-30h]@37 | |
2387 //unsigned __int16 uBlue; // [sp+28h] [bp-2Ch]@1 | |
2388 signed int uBluea; // [sp+28h] [bp-2Ch]@37 | |
2389 int v73; // [sp+2Ch] [bp-28h]@30 | |
2390 int v76; // [sp+34h] [bp-20h]@91 | |
2391 int v77; // [sp+34h] [bp-20h]@108 | |
2392 //int v79; // [sp+38h] [bp-1Ch]@72 | |
2393 //char *a2c; // [sp+40h] [bp-14h]@68 | |
2394 signed int uCenterY; // [sp+48h] [bp-Ch]@1 | |
2395 signed int uCenterX; // [sp+4Ch] [bp-8h]@1 | |
2396 signed int uWidth; // [sp+5Ch] [bp+8h]@30 | |
2397 //signed int uZe; // [sp+5Ch] [bp+8h]@67 | |
2398 signed int uZf; // [sp+5Ch] [bp+8h]@85 | |
2399 signed int uZg; // [sp+5Ch] [bp+8h]@105 | |
2400 unsigned int uWa; // [sp+60h] [bp+Ch]@23 | |
2401 float uWb; // [sp+60h] [bp+Ch]@30 | |
2402 unsigned int uWd; // [sp+60h] [bp+Ch]@95 | |
2403 float uZooma; // [sp+64h] [bp+10h]@117 | |
2404 //unsigned int flagsb; // [sp+68h] [bp+14h]@66 | |
2405 Actor *flagsc; // [sp+68h] [bp+14h]@86 | |
2406 //unsigned int flagsd; // [sp+68h] [bp+14h]@105 | |
2407 | |
2408 uCenterX = (uX + uZ) / 2; | |
2409 uCenterY = (uY + uW) / 2; | |
2410 lPitch = pRenderer->uTargetSurfacePitch; | |
2411 //TargetColor(0, 0, 0); | |
2412 //uBlue = TargetColor(0, 0, 0xFFu); | |
2413 auto bWizardEyeActive = pParty->WizardEyeActive(); | |
2414 auto uWizardEyeSkillLevel = pParty->WizardEyeSkillLevel(); | |
2415 if (CheckHiredNPCSpeciality(Cartographer)) | |
2416 { | |
2417 bWizardEyeActive = true; | |
2418 uWizardEyeSkillLevel = 2; | |
2419 } | |
2420 bWizardEyeActive = true; | |
2421 uWizardEyeSkillLevel = 3; | |
2422 pRenderer->SetRasterClipRect(uX, uY, uZ - 1, uW - 1); | |
2423 uHeight = uW - uY; | |
2424 uWidth = uZ - uX; | |
2425 | |
2426 if ( uCurrentlyLoadedLevelType != LEVEL_Indoor) | |
2427 { | |
2428 v17 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2; | |
2429 auto pMapLod0 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0_prolly_alpha_mask; | |
2430 auto pPal = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16; | |
2431 v73 = (1 << (v17 + 16)) / (signed int)uZoom; | |
2432 v18 = (double)(1 << (16 - v17)); | |
2433 v19 = v18; | |
2434 v20 = (double)(pParty->vPosition.x + 32768) / v18; | |
2435 v21 = (double)(32768 - pParty->vPosition.y) / v19; | |
2436 uWb = v21; | |
2437 switch (uZoom) | |
2438 { | |
2439 case 512: | |
2440 { | |
2441 v20 = v20 - (double)(uWidth / 2); | |
2442 v22 = (double)(uHeight / 2); | |
2443 uWb = v21 - v22; | |
2444 } | |
2445 break; | |
2446 | |
2447 case 1024: | |
2448 { | |
2449 v20 = v20 - (double)(uWidth / 4); | |
2450 v22 = (double)(uHeight / 4); | |
2451 uWb = v21 - v22; | |
2452 } | |
2453 break; | |
2454 | |
2455 case 2048: | |
2456 { | |
2457 v20 = v20 - (double)(uWidth / 8); | |
2458 v22 = (double)(uHeight / 8); | |
2459 uWb = v21 - v22; | |
2460 } | |
2461 break; | |
2462 | |
2463 default: assert(false); | |
2464 } | |
2465 assert(sizeof(pOdmMinimap) == 137 * 117 * sizeof(short)); | |
2466 | |
2467 v70 = floorf(v20 * 65536.0 + 0.5f);//LODWORD(v24); | |
2468 uBluea = floorf(uWb * 65536.0 + 0.5f);//LODWORD(v25); | |
2469 v27 = uBluea >> 16; | |
2470 v28 = &pRenderer->pTargetSurface[uX + uY * lPitch]; | |
2471 if (pMapLod0 && bRedrawOdmMinimap) | |
2472 { | |
2473 assert(uWidth == 137 && uHeight == 117); | |
2474 //auto pMinimap = (unsigned __int16 *)pOdmMinimap; | |
2475 | |
2476 auto mapWidth = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uTextureWidth; | |
2477 | |
2478 v29 = v70 >> 16; | |
2479 | |
2480 for (int y = 0; y < uHeight; ++y) | |
2481 { | |
2482 auto pMapLod0Line = &pMapLod0[v27 * mapWidth]; | |
2483 for (int x = 0; x < uWidth; ++x) | |
2484 { | |
2485 //*pMinimap++ = pPal[pMapLod0Line[v29]]; | |
2486 pOdmMinimap[y][x] = pPal[pMapLod0Line[v29]]; | |
2487 v29 = (v70 + x * v73) >> 16; | |
2488 } | |
2489 | |
2490 v29 = v70 >> 16; | |
2491 v28 += 137 - uWidth; | |
2492 uBluea += v73; | |
2493 v27 = uBluea >> 16; | |
2494 } | |
2495 } | |
2496 | |
2497 for (int y = 0; y < 117; ++y) | |
2498 { | |
2499 for (int x = 0; x < 137; ++x) | |
2500 { | |
2501 *v28++ = pOdmMinimap[y][x]; | |
2502 } | |
2503 v28 += lPitch - 137; | |
2504 } | |
2505 uNumBlueFacesInBLVMinimap = 0; | |
2506 } | |
2507 else | |
2508 { | |
2509 pRenderer->FillRectFast(uX, uY, uZ - uX, uHeight, 0xF); | |
2510 uNumBlueFacesInBLVMinimap = 0; | |
2511 | |
2512 for (uint i = 0; i < pIndoor->pMapOutlines->uNumOutlines; ++i) | |
2513 { | |
2514 auto pOutline = &pIndoor->pMapOutlines->pOutlines[i]; | |
2515 | |
2516 auto pFace1 = pIndoor->pFaces + pOutline->uFace1ID; | |
2517 auto pFace2 = pIndoor->pFaces + pOutline->uFace2ID; | |
2518 //v9 = pIndoor->pFaces[pMapVertex->uFace1ID].uAttributes; | |
2519 //v10 = pIndoor->pFaces[pMapVertex->uFace2ID].uAttributes; | |
2520 if (pFace1->Visible() && pFace2->Visible()) | |
2521 { | |
2522 v11 = pOutline->uFlags; | |
2523 if ( v11 & 1 ) | |
2524 goto LABEL_15; | |
2525 if (pFace1->uAttributes & 0x80 || pFace2->uAttributes & 0x80) | |
2526 goto LABEL_ABC; | |
2527 | |
2528 } | |
2529 continue; | |
2530 | |
2531 LABEL_ABC: | |
2532 pOutline->uFlags = v11 | 1; | |
2533 pIndoor->_visible_outlines[i >> 3] |= 1 << (7 - i % 8); | |
2534 | |
2535 LABEL_15: | |
2536 //v12 = &pIndoor->pFaces[pOutline->uFace1ID]; | |
2537 if (bWizardEyeActive && uWizardEyeSkillLevel >= 3 && | |
2538 (pFace1->uAttributes & 0x2000 || pFace2->uAttributes & 0x2000) && | |
2539 (pIndoor->pFaceExtras[pFace1->uFaceExtraID].uEventID || pIndoor->pFaceExtras[pFace2->uFaceExtraID].uEventID)) | |
2540 { | |
2541 if (uNumBlueFacesInBLVMinimap < 49) | |
2542 pBlueFacesInBLVMinimapIDs[uNumBlueFacesInBLVMinimap++] = i; | |
2543 } | |
2544 else | |
2545 { | |
2546 auto _a = (uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x); | |
2547 auto _b = ((unsigned int)((unsigned __int64)_a >> 16) << 16); | |
2548 auto _c = ((signed int)(_b - uZoom * pParty->vPosition.x) >> 16); | |
2549 v69 = uCenterX + _c; | |
2550 v69 = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16); | |
2551 lPitcha = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].y) >> 16) << 16) - uZoom * pParty->vPosition.y) >> 16); | |
2552 uWa = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16); | |
2553 v14 = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].y) >> 16) << 16) - uZoom * pParty->vPosition.y) >> 16); | |
2554 v15 = abs(pOutline->sZ - pParty->vPosition.z) / 8; | |
2555 if ( v15 > 100 ) | |
2556 v15 = 100; | |
2557 pRenderer->RasterLine2D(v69, lPitcha, uWa, v14, viewparams->pPalette[-v15 + 200]); | |
2558 } | |
2559 } | |
2560 | |
2561 | |
2562 for (uint i = 0; i < uNumBlueFacesInBLVMinimap; ++i) | |
2563 { | |
2564 //v16 = (uint *)&pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[uZb]]; | |
2565 auto pOutline = &pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[i]]; | |
2566 pRenderer->RasterLine2D(uCenterX + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom | |
2567 * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16) | |
2568 - uZoom * pParty->vPosition.x) >> 16), | |
2569 uCenterY | |
2570 - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom | |
2571 * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].y) >> 16) << 16) | |
2572 - uZoom * pParty->vPosition.y) >> 16), | |
2573 uCenterX | |
2574 + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom | |
2575 * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].x) >> 16) << 16) | |
2576 - uZoom * pParty->vPosition.x) >> 16), | |
2577 uCenterY | |
2578 - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom | |
2579 * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].y) >> 16) << 16) | |
2580 - uZoom * pParty->vPosition.y) >> 16), | |
2581 ui_game_minimap_outline_color); | |
2582 } | |
2583 } | |
2584 | |
2585 | |
2586 assert(pParty->sRotationY >= 0); | |
2587 float angle = (pParty->sRotationY % 2048) / 2048.0f; | |
2588 const float two_pi = 2.0f * 3.14159f; | |
2589 | |
2590 uint arrow_idx = floorf(0.5f + 7 * angle); | |
2591 pRenderer->DrawTextureTransparent(uCenterX - 3, uCenterY - 3, pIcons_LOD->GetTexture(pTextureIDs_pMapDirs[arrow_idx])); | |
2592 | |
2593 //flagsb = TargetColor(0, 0, 255); | |
2594 //v60 = TargetColor(255, 0, 0); | |
2595 if (bWizardEyeActive) | |
2596 { | |
2597 //uZe = 0; | |
2598 if (uWizardEyeSkillLevel >= 2) | |
2599 for (uint i = 0; i < uNumSpriteObjects; ++i) | |
2600 //if (uNumSpriteObjects > 0) | |
2601 { | |
2602 auto object = &pSpriteObjects[i]; | |
2603 | |
2604 //a2c = (char *)&pSpriteObjects[0].uObjectDescID; | |
2605 //while ( 1 ) | |
2606 //{ | |
2607 if (!object->uType || !object->uObjectDescID) | |
2608 continue; | |
2609 //if (uWizardEyeSkillLevel == 1 | |
2610 v37 = uCenterX + ((unsigned __int64)((object->vPosition.x - pParty->vPosition.x) * (signed __int64)uZoom) >> 16); | |
2611 //v79 = (unsigned __int64)((object->vPosition.y - pParty->vPosition.y) * (signed __int64)(signed int)uZoom) >> 16; | |
2612 //v38 = uCenterY - v79; | |
2613 v38 = uCenterY - ((signed __int64)((object->vPosition.y - pParty->vPosition.y) * (signed __int64)uZoom) >> 16); | |
2614 if (v37 < pRenderer->raster_clip_x || v37 > pRenderer->raster_clip_z || | |
2615 v38 < pRenderer->raster_clip_y || v38 > pRenderer->raster_clip_w) | |
2616 continue; | |
2617 | |
2618 assert(uZoom >= 512); | |
2619 if (pObjectList->pObjects[object->uObjectDescID].uFlags & OBJECT_DESC_UNPICKABLE) | |
2620 { | |
2621 pRenderer->RasterLine2D(v37, v38, v37, v38, ui_game_minimap_projectile_color); | |
2622 } | |
2623 else if (uZoom > 512) | |
2624 { | |
2625 pRenderer->RasterLine2D(v37 - 1, v38 - 1, v37 - 1, v38 + 1, ui_game_minimap_treasure_color); | |
2626 pRenderer->RasterLine2D(v37, v38 - 2, v37, v38 + 1, ui_game_minimap_treasure_color); | |
2627 pRenderer->RasterLine2D(v37 + 1, v38 - 1, v37 + 1, v38 + 1, ui_game_minimap_treasure_color); | |
2628 pRenderer->RasterLine2D(v37 - 2, v38, v37 - 2, v38 + 1, ui_game_minimap_treasure_color); | |
2629 pRenderer->RasterLine2D(v37 + 2, v38, | |
2630 v37 + 2, v38 + 1, ui_game_minimap_treasure_color); | |
2631 } | |
2632 else | |
2633 { | |
2634 pRenderer->RasterLine2D(v37 - 1, v38 - 1, | |
2635 v37 - 1, v38, ui_game_minimap_treasure_color); | |
2636 pRenderer->RasterLine2D(v37, v38 - 1, | |
2637 v37, v38, ui_game_minimap_treasure_color); | |
2638 } | |
2639 //LABEL_82: | |
2640 //LABEL_83: | |
2641 //++uZe; | |
2642 //a2c += 112; | |
2643 //if ( uZe >= (signed int)uNumSpriteObjects ) | |
2644 //{ | |
2645 //goto LABEL_85; | |
2646 //} | |
2647 //} | |
2648 } | |
2649 | |
2650 | |
2651 LABEL_85: | |
2652 //v63 = TargetColor(255, 0, 0); | |
2653 //v61 = TargetColor(0, 255, 0); | |
2654 //v65 = TargetColor(255, 255, 0); | |
2655 uZf = 0; | |
2656 if ( (signed int)uNumActors > 0 ) | |
2657 { | |
2658 flagsc = pActors.data();//[0].uAIState; | |
2659 do | |
2660 { | |
2661 v39 = flagsc->uAIState; | |
2662 if ( flagsc->uAIState != 11 && v39 != 19 && (v39 == 5 || BYTE1(flagsc->uAttributes) & 0x80) ) | |
2663 { | |
2664 v40 = ((unsigned __int64)(( flagsc->vPosition.x - pParty->vPosition.x) | |
2665 * (signed __int64)(signed int)uZoom) >> 16) | |
2666 + uCenterX; | |
2667 v76 = (unsigned __int64)(( flagsc->vPosition.y - pParty->vPosition.y) | |
2668 * (signed __int64)(signed int)uZoom) >> 16; | |
2669 v41 = uCenterY - v76; | |
2670 if ( v40 >= pRenderer->raster_clip_x ) | |
2671 { | |
2672 if ( v40 <= pRenderer->raster_clip_z && v41 >= pRenderer->raster_clip_y && v41 <= pRenderer->raster_clip_w ) | |
2673 { | |
2674 uWd = ui_game_minimap_actor_friendly_color; | |
2675 if ( BYTE3(flagsc->uAttributes) & 1 ) | |
2676 uWd = ui_game_minimap_actor_hostile_color; | |
2677 if ( flagsc->uAIState == Dead) | |
2678 uWd = ui_game_minimap_actor_corpse_color; | |
2679 if ( (signed int)uZoom > 1024 ) | |
2680 { | |
2681 pRenderer->RasterLine2D(v40 - 1, v41 - 2, v40 - 1, v41 + 2, uWd); | |
2682 pRenderer->RasterLine2D(v40, v41 - 2, v40, v41 + 2, uWd); | |
2683 pRenderer->RasterLine2D(v40 + 1, v41 - 2, v40 + 1, v41 + 2, uWd); | |
2684 v42 = v41 + 1; | |
2685 v43 = v41 - 1; | |
2686 v44 = v42; | |
2687 pRenderer->RasterLine2D(v40 - 2, v43, v40 - 2, v42, uWd); | |
2688 v40 += 2; | |
2689 v59 = uWd; | |
2690 v56 = v44; | |
2691 v54 = v40; | |
2692 v52 = v43; | |
2693 } | |
2694 else | |
2695 { | |
2696 pRenderer->RasterLine2D(v40 - 1, v41 - 1, v40 - 1, uCenterY - v76, uWd); | |
2697 v59 = uWd; | |
2698 v56 = uCenterY - v76; | |
2699 v54 = v40; | |
2700 v52 = v41 - 1; | |
2701 } | |
2702 pRenderer->RasterLine2D(v40, v52, v54, v56, v59); | |
2703 } | |
2704 } | |
2705 } | |
2706 ++uZf; | |
2707 ++flagsc; | |
2708 } | |
2709 while ( uZf < (signed int)uNumActors ); | |
2710 } | |
2711 } | |
2712 | |
2713 | |
2714 //flagsd = TargetColor(255, 255, 255); | |
2715 uZg = 0; | |
2716 if ( (signed int)uNumLevelDecorations > 0 ) | |
2717 { | |
2718 v45 = (char *)&pLevelDecorations[0].vPosition; | |
2719 lPitchb = (char *)&pLevelDecorations[0].vPosition; | |
2720 do | |
2721 { | |
2722 if ( *(v45 - 2) & 8 ) | |
2723 { | |
2724 v46 = ((unsigned __int64)((*(int *)v45 - pParty->vPosition.x) * (signed __int64)(signed int)uZoom) >> 16) | |
2725 + uCenterX; | |
2726 v77 = (unsigned __int64)((*((int *)v45 + 1) - pParty->vPosition.y) * (signed __int64)(signed int)uZoom) >> 16; | |
2727 v47 = uCenterY - v77; | |
2728 if ( v46 >= pRenderer->raster_clip_x ) | |
2729 { | |
2730 if ( v46 <= pRenderer->raster_clip_z && v47 >= pRenderer->raster_clip_y && v47 <= pRenderer->raster_clip_w ) | |
2731 { | |
2732 if ( (signed int)uZoom > 512 ) | |
2733 { | |
2734 v48 = v47 + 1; | |
2735 v49 = v47 - 1; | |
2736 pRenderer->RasterLine2D(v46 - 1, v47 - 1, v46 - 1, v47 + 1, ui_game_minimap_decoration_color_1); | |
2737 pRenderer->RasterLine2D(v46, v49, v46, v48, ui_game_minimap_decoration_color_1); | |
2738 pRenderer->RasterLine2D(v46 + 1, v49, v46 + 1, v48, ui_game_minimap_decoration_color_1); | |
2739 v45 = lPitchb; | |
2740 } | |
2741 else | |
2742 { | |
2743 pRenderer->RasterLine2D(v46, uCenterY - v77, v46, uCenterY - v77, ui_game_minimap_decoration_color_1); | |
2744 } | |
2745 } | |
2746 } | |
2747 } | |
2748 ++uZg; | |
2749 v45 += 32; | |
2750 lPitchb = v45; | |
2751 } | |
2752 while ( uZg < (signed int)uNumLevelDecorations ); | |
2753 } | |
2754 pRenderer->DrawTextureTransparent(0x1D4u, 0, pIcons_LOD->GetTexture(dword_5079D8)); | |
2755 uZooma = (double)pParty->sRotationY * 0.1171875; | |
2756 //v50 = uZooma + 6.7553994e15; | |
2757 pRenderer->SetTextureClipRect(541, 0, 567, 480); | |
2758 pRenderer->DrawTextureIndexed(floorf(uZooma + 0.5f) + 285, 136, pIcons_LOD->GetTexture(dword_5079B4)); | |
2759 pRenderer->ResetTextureClipRect(); | |
2760 } | |
2761 | |
2762 //----- (00441498) -------------------------------------------------------- | |
1458 | 2763 void GameUI_DrawTorchlightAndWizardEye() |
1298 | 2764 { |
2765 if (pCurrentScreen == SCREEN_GAME | |
2766 || pCurrentScreen == SCREEN_MENU | |
2767 || pCurrentScreen == SCREEN_OPTIONS | |
2768 || pCurrentScreen == SCREEN_REST | |
2769 || pCurrentScreen == SCREEN_SPELL_BOOK | |
2770 || pCurrentScreen == SCREEN_CHEST | |
2771 || pCurrentScreen == SCREEN_SAVEGAME | |
2772 || pCurrentScreen == SCREEN_LOADGAME | |
2773 || pCurrentScreen == SCREEN_CHEST_INVENTORY | |
2774 || pCurrentScreen == SCREEN_BOOKS | |
2775 || pCurrentScreen == SCREEN_BRANCHLESS_NPC_DIALOG ) | |
2776 { | |
2777 if (pParty->TorchlightActive()) | |
2778 { | |
2779 auto icon = pIconsFrameTable->GetFrame((signed __int16)pUIAnum_Torchlight->uIconID, pEventTimer->Time()); | |
2780 pRenderer->DrawTextureTransparent(pUIAnum_Torchlight->x, pUIAnum_Torchlight->y, pIcons_LOD->GetTexture(icon->uTextureID)); | |
2781 } | |
2782 if (pParty->WizardEyeActive()) | |
2783 { | |
2784 auto icon = pIconsFrameTable->GetFrame((signed __int16)pUIAnim_WizardEye->uIconID, pEventTimer->Time()); | |
2785 pRenderer->DrawTextureTransparent(pUIAnim_WizardEye->x, pUIAnim_WizardEye->y, pIcons_LOD->GetTexture(icon->uTextureID)); | |
2786 } | |
2787 } | |
2788 } | |
2789 // 4E28F8: using guessed type int pCurrentScreen; | |
2790 | |
2791 | |
2792 //----- (00491F87) -------------------------------------------------------- | |
2793 void GameUI_DrawHiredNPCs() | |
2794 { | |
2795 //int v6; // eax@15 | |
2796 char v7; // al@17 | |
2797 unsigned int v8; // eax@18 | |
2798 int v9; // esi@18 | |
2799 int v10; // eax@18 | |
2800 unsigned int v11; // eax@19 | |
2801 unsigned int v12; // esi@19 | |
2802 unsigned int v13; // eax@23 | |
2803 IconFrame *v14; // eax@24 | |
2804 unsigned int v15; // eax@26 | |
2805 char pContainer[20]; // [sp+Ch] [bp-30h]@18 | |
2806 unsigned int v17; // [sp+20h] [bp-1Ch]@19 | |
2807 signed int uFrameID; // [sp+24h] [bp-18h]@19 | |
2808 //int i; // [sp+28h] [bp-14h]@15 | |
2809 unsigned int v20; // [sp+2Ch] [bp-10h]@20 | |
2810 unsigned int v21; // [sp+30h] [bp-Ch]@19 | |
2811 int v22; // [sp+34h] [bp-8h]@2 | |
2812 unsigned __int8 v23; // [sp+3Bh] [bp-1h]@2 | |
2813 | |
2814 if ( bNoNPCHiring != 1 ) | |
2815 { | |
2816 v23 = 0; | |
2817 v22 = 0; | |
2818 /*for (uint i = 0; i < 2; ++i) | |
2819 { | |
2820 if (pParty->pHirelings[i].pName) | |
2821 pTmpBuf[v22++] = i; | |
2822 }*/ | |
2823 if (pParty->pHirelings[0].pName) | |
2824 pTmpBuf[v22++] = 0; | |
2825 if (pParty->pHirelings[1].pName) | |
2826 pTmpBuf[v22++] = 1; | |
2827 | |
2828 for (uint i = 0; i < pNPCStats->uNumNewNPCs; ++i) | |
2829 { | |
2830 if (pNPCStats->pNewNPCData[i].uFlags & 128) | |
2831 { | |
2832 if (!pParty->pHirelings[0].pName || strcmp(pNPCStats->pNewNPCData[i].pName, pParty->pHirelings[0].pName)) | |
2833 { | |
2834 if (!pParty->pHirelings[1].pName || strcmp(pNPCStats->pNewNPCData[i].pName, pParty->pHirelings[1].pName)) | |
2835 pTmpBuf[v22++] = i + 2; | |
2836 } | |
2837 } | |
2838 } | |
2839 | |
2840 //v6 = (unsigned __int8)pParty->field_709; | |
2841 for ( int i = (unsigned __int8)pParty->field_709; i < v22 && v23 < 2; i++ ) | |
2842 { | |
2843 v7 = pTmpBuf[i]; | |
2844 if ( (unsigned __int8)v7 >= 2 ) | |
2845 { | |
2846 sprintf(pContainer, "NPC%03d", pNPCStats->pNPCData[(unsigned __int8)v7 + 499].uPortraitID); | |
2847 v15 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); | |
2848 pRenderer->DrawTextureIndexed(pHiredNPCsIconsOffsetsX[v23], pHiredNPCsIconsOffsetsY[v23], pIcons_LOD->GetTexture(v15)); | |
2849 } | |
2850 else | |
2851 { | |
2852 sprintf(pContainer, "NPC%03d", pParty->pHirelings[(unsigned __int8)v7].uPortraitID); | |
2853 v8 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); | |
2854 v9 = v23; | |
2855 pRenderer->DrawTextureIndexed(pHiredNPCsIconsOffsetsX[v9], pHiredNPCsIconsOffsetsY[v9], pIcons_LOD->GetTexture(v8)); | |
2856 v10 = (unsigned __int8)pTmpBuf[i]; | |
2857 if ( pParty->pHirelings[v10].evt_A == 1 ) | |
2858 { | |
2859 uFrameID = pParty->pHirelings[v10].evt_B; | |
2860 v11 = pHiredNPCsIconsOffsetsX[v9]; | |
2861 v12 = pHiredNPCsIconsOffsetsY[v9]; | |
2862 v17 = v11; | |
2863 v21 = 0; | |
2864 if ( (signed int)pIconsFrameTable->uNumIcons <= 0 ) | |
2865 { | |
2866 LABEL_23: | |
2867 v13 = 0; | |
2868 } | |
2869 else | |
2870 { | |
2871 v20 = 0; | |
2872 while ( _stricmp("spell96", pIconsFrameTable->pIcons[v20 / 0x20].pAnimationName) ) | |
2873 { | |
2874 ++v21; | |
2875 v20 += 32; | |
2876 if ( (signed int)v21 >= (signed int)pIconsFrameTable->uNumIcons ) | |
2877 goto LABEL_23; | |
2878 } | |
2879 v13 = v21; | |
2880 } | |
2881 v14 = pIconsFrameTable->GetFrame(v13, uFrameID); | |
2882 pRenderer->DrawTextureTransparent(v17, v12, &pIcons_LOD->pTextures[v14->uTextureID]); | |
2883 } | |
2884 } | |
2885 ++v23; | |
2886 } | |
2887 } | |
2888 } | |
2889 // 6BE3C5: using guessed type char bNoNPCHiring; | |
2890 | |
2891 //----- (004178FE) -------------------------------------------------------- | |
2892 unsigned int __fastcall UI_GetHealthManaStringColor(signed int a1, signed int a2) | |
2893 { | |
2894 unsigned __int16 v2; // dx@2 | |
2895 unsigned __int16 v3; // cx@2 | |
2896 int v5; // eax@5 | |
2897 unsigned __int16 v6; // [sp-4h] [bp-8h]@2 | |
2898 | |
2899 if ( a1 <= a2 ) | |
2900 { | |
2901 if ( a1 == a2 ) | |
2902 return 0; | |
2903 v5 = 100 * a1 / a2; | |
2904 v3 = 255; | |
2905 if ( v5 >= 25 ) | |
2906 { | |
2907 v6 = 100; | |
2908 v2 = 255; | |
2909 } | |
2910 else | |
2911 { | |
2912 v6 = 0; | |
2913 v2 = 0; | |
2914 } | |
2915 } | |
2916 else | |
2917 { | |
2918 v6 = 0; | |
2919 v2 = 255; | |
2920 v3 = 0; | |
2921 } | |
2922 return TargetColor(v3, v2, v6); | |
2923 } | |
2924 | |
2925 //----- (00417939) -------------------------------------------------------- | |
1458 | 2926 int GetConditionDrawColor(unsigned int uConditionIdx) |
1298 | 2927 { |
1458 | 2928 switch (uConditionIdx) |
1298 | 2929 { |
1458 | 2930 case Condition_Zombie: |
2931 case Condition_Good: | |
2932 return ui_character_condition_normal_color; | |
2933 | |
2934 case Condition_Cursed: | |
2935 case Condition_Weak: | |
2936 case Condition_Fear: | |
2937 case Condition_Drunk: | |
2938 case Condition_Insane: | |
2939 case Condition_Poison1: | |
2940 case Condition_Disease1: | |
2941 return ui_character_condition_light_color; | |
2942 | |
2943 case Condition_Sleep: | |
2944 case Condition_Poison2: | |
2945 case Condition_Disease2: | |
2946 case Condition_Paralyzed: | |
2947 case Condition_Unconcious: | |
2948 return ui_character_condition_moderate_color; | |
2949 | |
2950 case Condition_Poison3: | |
2951 case Condition_Disease3: | |
2952 case Condition_Dead: | |
2953 case Condition_Pertified: | |
2954 case Condition_Eradicated: | |
2955 return ui_character_condition_severe_color; | |
1298 | 2956 } |
1458 | 2957 assert(false && "Invalid condition"); |
1298 | 2958 } |