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