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