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