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