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