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