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