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