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