Mercurial > mm7
annotate UI/UiGame.cpp @ 2008:591024ad7269
Footer text for items fix
author | Ritor1 |
---|---|
date | Sat, 09 Nov 2013 00:15:18 +0600 |
parents | 985fff9fb62d |
children | 37f42cfc881d |
rev | line source |
---|---|
1298 | 1 #ifdef _MSC_VER |
2 #define _CRT_SECURE_NO_WARNINGS | |
3 #endif | |
4 | |
1299 | 5 #include "..\Texture.h" |
6 #include "..\MM7.h" | |
1298 | 7 |
1299 | 8 #include "..\Mouse.h" |
9 #include "..\Keyboard.h" | |
10 #include "..\mm7_data.h" | |
1298 | 11 |
1299 | 12 #include "..\Vis.h" |
13 #include "..\MapInfo.h" | |
14 #include "..\Game.h" | |
15 #include "..\GUIWindow.h" | |
16 #include "..\GUIFont.h" | |
17 #include "..\Party.h" | |
18 #include "..\AudioPlayer.h" | |
19 #include "..\Outdoor.h" | |
20 #include "..\LOD.h" | |
21 #include "..\Actor.h" | |
22 #include "..\Viewport.h" | |
23 #include "..\SpriteObject.h" | |
24 #include "..\ObjectList.h" | |
25 #include "..\DecorationList.h" | |
26 #include "..\PlayerFrameTable.h" | |
27 #include "..\stru123.h" | |
28 #include "..\Time.h" | |
29 #include "..\IconFrameTable.h" | |
30 #include "..\TurnEngine.h" | |
31 #include "..\texts.h" | |
1298 | 32 #include "UIHouses.h" |
1299 | 33 #include "..\BSPModel.h" |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
34 #include "..\Math.h" |
1828
35c1e4ff6ba7
party_finds_gold to Party::PartyFindsGold, cleaned up, moved Level/Decoration.h reference out of Indoor.h
Grumpy7
parents:
1827
diff
changeset
|
35 #include "..\Level/Decoration.h" |
1298 | 36 |
37 | |
38 int uTextureID_GameUI_CharSelectionFrame; // 50C98C | |
39 | |
40 //----- (00421D00) -------------------------------------------------------- | |
41 void __fastcall GameUI_OnPlayerPortraitLeftClick(unsigned int uPlayerID) | |
42 { | |
1980 | 43 Player* player = &pParty->pPlayers[uPlayerID - 1]; |
1298 | 44 if (pParty->pPickedItem.uItemID) |
45 { | |
1980 | 46 if (int slot = player->AddItem(-1, pParty->pPickedItem.uItemID)) |
1298 | 47 { |
1384
b51332ab228f
changed a few member variables in Player to slightly less confusing names
Grumpy7
parents:
1362
diff
changeset
|
48 memcpy(&player->pInventoryItemList[slot-1], &pParty->pPickedItem, 0x24u); |
1298 | 49 viewparams->bRedrawGameUI = true; |
50 pMouse->RemoveHoldingItem(); | |
51 return; | |
52 } | |
53 | |
54 if (!player->CanAct()) | |
55 { | |
56 player = pPlayers[uActiveCharacter]; | |
57 } | |
1496 | 58 if( player->CanAct() || !pPlayers[uActiveCharacter]->CanAct() ) |
59 player->PlaySound(SPEECH_NoRoom, 0); | |
1298 | 60 } |
61 | |
62 if (pCurrentScreen == SCREEN_GAME) | |
63 { | |
64 viewparams->bRedrawGameUI = true; | |
65 if ( uActiveCharacter != uPlayerID ) | |
66 { | |
67 if ( pPlayers[uPlayerID]->uTimeToRecovery ) | |
68 return; | |
69 | |
70 uActiveCharacter = uPlayerID; | |
71 return; | |
72 } | |
1496 | 73 pGUIWindow_CurrentMenu = CharacterUI_Initialize(7); |
1298 | 74 return; |
75 } | |
76 if ( pCurrentScreen == SCREEN_SPELL_BOOK ) | |
77 return; | |
78 if ( pCurrentScreen == SCREEN_CHEST ) | |
79 { | |
80 viewparams->bRedrawGameUI = true; | |
81 if ( uActiveCharacter == uPlayerID ) | |
82 { | |
83 pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; | |
84 pCurrentScreen = SCREEN_CHEST_INVENTORY; | |
85 uActiveCharacter = uPlayerID; | |
86 return; | |
87 } | |
88 if ( pPlayers[uPlayerID]->uTimeToRecovery ) | |
89 return; | |
90 uActiveCharacter = uPlayerID; | |
91 return; | |
92 } | |
93 if ( pCurrentScreen != SCREEN_HOUSE ) | |
94 { | |
95 if ( pCurrentScreen == SCREEN_E ) | |
96 { | |
97 uActiveCharacter = uPlayerID; | |
98 return; | |
99 } | |
100 if ( pCurrentScreen != SCREEN_CHEST_INVENTORY ) | |
101 { | |
102 viewparams->bRedrawGameUI = true; | |
103 uActiveCharacter = uPlayerID; | |
104 if ( pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] == 102 ) | |
105 FillAwardsData(); | |
106 return; | |
107 } | |
108 viewparams->bRedrawGameUI = true; | |
109 if ( uActiveCharacter == uPlayerID ) | |
110 { | |
111 pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; | |
112 pCurrentScreen = SCREEN_CHEST_INVENTORY; | |
113 uActiveCharacter = uPlayerID; | |
114 return; | |
115 } | |
116 if ( pPlayers[uPlayerID]->uTimeToRecovery ) | |
117 return; | |
118 uActiveCharacter = uPlayerID; | |
119 return; | |
120 } | |
121 if ( window_SpeakInHouse->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS) | |
122 return; | |
123 viewparams->bRedrawGameUI = true; | |
124 if ( uActiveCharacter != uPlayerID ) | |
125 uActiveCharacter = uPlayerID; | |
126 return; | |
127 if (dialog_menu_id == HOUSE_DIALOGUE_SHOP_BUY_STANDARD || dialog_menu_id == HOUSE_DIALOGUE_SHOP_6) | |
128 { | |
129 __debugbreak(); // fix indexing | |
130 pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103; | |
1496 | 131 pGUIWindow_CurrentMenu = CharacterUI_Initialize(14); |
1298 | 132 return; |
133 } | |
134 } | |
135 // 4E28F8: using guessed type int pCurrentScreen; | |
136 // F8B19C: using guessed type int dword_F8B19C; | |
137 | |
138 //----- (00416B01) -------------------------------------------------------- | |
139 void GameUI_DrawNPCPopup(void *_this)//PopupWindowForBenefitAndJoinText | |
140 { | |
141 int v1; // edi@2 | |
1496 | 142 NPCData *pNPC; // eax@16 |
143 const CHAR *pText; // eax@18 | |
1298 | 144 char *v11; // esi@26 |
1496 | 145 GUIWindow popup_window; // [sp+Ch] [bp-60h]@23 |
1298 | 146 int a2; // [sp+60h] [bp-Ch]@16 |
147 LPCSTR lpsz; // [sp+68h] [bp-4h]@6 | |
148 | |
149 if ( bNoNPCHiring != 1 ) | |
150 { | |
151 v1 = 0; | |
152 /*do | |
153 { | |
154 if ( v3->pName ) | |
155 pTmpBuf[v1++] = v2; | |
156 ++v3; | |
157 ++v2; | |
158 } | |
159 while ( (signed int)v3 < (signed int)&pParty->pPickedItem );*/ | |
160 for (int i = 0; i < 2; ++i) | |
161 { | |
162 if (pParty->pHirelings[i].pName) | |
163 pTmpBuf[v1++] = i; | |
164 } | |
165 lpsz = 0; | |
166 if ( (signed int)pNPCStats->uNumNewNPCs > 0 ) | |
167 { | |
168 /*v4 = pNPCStats->pNewNPCData; | |
169 do | |
170 { | |
171 if ( v4->uFlags & 0x80 | |
172 && (!pParty->pHirelings[0].pName || strcmp(v4->pName, pParty->pHirelings[0].pName)) | |
173 && (!pParty->pHirelings[1].pName || strcmp(v4->pName, pParty->pHirelings[1].pName)) ) | |
174 pTmpBuf[v1++] = (char)lpsz + 2; | |
175 ++lpsz; | |
176 ++v4; | |
177 } | |
178 while ( (signed int)lpsz < (signed int)pNPCStats->uNumNewNPCs );*/ | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
179 for ( uint i = 0; i < pNPCStats->uNumNewNPCs; ++i ) |
1298 | 180 { |
181 if (pNPCStats->pNewNPCData[i].Hired()) | |
182 { | |
183 if (!pParty->pHirelings[0].pName || strcmp((char *)pNPCStats->pNewNPCData[i].pName, (char *)pParty->pHirelings[0].pName)) | |
184 { | |
185 if (!pParty->pHirelings[1].pName || strcmp((char *)pNPCStats->pNewNPCData[i].pName, (char *)pParty->pHirelings[1].pName)) | |
186 pTmpBuf[v1++] = i + 2; | |
187 } | |
188 } | |
189 } | |
190 } | |
1793
4dee76d79c78
dword_5B65CC to npcIdToDismissAfterDialogue, Party::field_709 to Party::hirelingScrollPosition
Grumpy7
parents:
1758
diff
changeset
|
191 if ( (signed int)((char *)_this + pParty->hirelingScrollPosition) < v1 ) |
1298 | 192 { |
1793
4dee76d79c78
dword_5B65CC to npcIdToDismissAfterDialogue, Party::field_709 to Party::hirelingScrollPosition
Grumpy7
parents:
1758
diff
changeset
|
193 sDialogue_SpeakingActorNPC_ID = -1 - pParty->hirelingScrollPosition - (int)_this; |
1496 | 194 pNPC = GetNewNPCData(sDialogue_SpeakingActorNPC_ID, &a2); |
195 if ( pNPC ) | |
1298 | 196 { |
197 if ( a2 == 57 ) | |
1496 | 198 pText = pNPCTopics[512].pText; // Baby dragon |
1298 | 199 else |
1496 | 200 pText = (const CHAR *)pNPCStats->pProfessions[pNPC->uProfession].pBenefits; |
201 lpsz = pText; | |
202 if ( !pText ) | |
1298 | 203 { |
1496 | 204 lpsz = (LPCSTR)pNPCStats->pProfessions[pNPC->uProfession].pJoinText; |
1298 | 205 if ( !lpsz ) |
206 lpsz = ""; | |
207 } | |
1496 | 208 popup_window.Hint = 0; |
209 popup_window.uFrameX = 38; | |
210 popup_window.uFrameY = 60; | |
211 popup_window.uFrameWidth = 276; | |
212 popup_window.uFrameZ = 313; | |
213 popup_window.uFrameHeight = pFontArrus->CalcTextHeight(lpsz, &popup_window, 0, 0) + 2 * LOBYTE(pFontArrus->uFontHeight) + 24; | |
214 if ( (signed int)popup_window.uFrameHeight < 130 ) | |
215 popup_window.uFrameHeight = 130; | |
216 popup_window.uFrameWidth = 400; | |
217 popup_window.uFrameZ = popup_window.uFrameX + 399; | |
218 popup_window.DrawMessageBox(0); | |
219 sprintfex(pTmpBuf2.data(), "NPC%03d", pNPC->uPortraitID); | |
220 pRenderer->DrawTextureIndexed(popup_window.uFrameX + 22, popup_window.uFrameY + 36, | |
221 (Texture *)(pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE) != -1 | |
222 ? &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf2.data(), TEXTURE_16BIT_PALETTE)] : 0)); | |
223 if ( pNPC->uProfession ) | |
1298 | 224 { |
225 v11 = pTmpBuf.data(); | |
1496 | 226 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[429], pNPC->pName, aNPCProfessionNames[pNPC->uProfession]); |
1298 | 227 } |
228 else | |
229 { | |
230 v11 = pTmpBuf.data(); | |
1496 | 231 strcpy(pTmpBuf.data(), pNPC->pName); |
1298 | 232 } |
1496 | 233 popup_window.DrawTitleText(pFontArrus, 0, 12, TargetColor(0xFFu, 0xFFu, 0x9Bu), v11, 3); |
234 popup_window.uFrameWidth -= 24; | |
235 popup_window.uFrameZ = popup_window.uFrameX + popup_window.uFrameWidth - 1; | |
236 popup_window.DrawText(pFontArrus, 100, 36, 0, BuildDialogueString((char *)lpsz, uActiveCharacter - 1, 0, 0, 0, 0), 0, 0, 0); | |
1298 | 237 } |
238 } | |
239 } | |
240 } | |
241 | |
242 //----- (00445D4A) -------------------------------------------------------- | |
243 void GameUI_InitializeDialogue(Actor *actor, int bPlayerSaysHello) | |
244 { | |
245 NPCData *pNPCInfo; // ebp@1 | |
246 int v9; // esi@8 | |
247 int pNumberContacts; // eax@11 | |
248 char pContainer[32]; // [sp+14h] [bp-28h]@3 | |
249 | |
250 dword_A74CDC = -1; | |
251 dword_AE336C = -1; | |
252 pEventTimer->Pause(); | |
253 pMiscTimer->Pause(); | |
254 pAudioPlayer->StopChannels(-1, -1); | |
255 uDialogueType = 0; | |
256 sDialogue_SpeakingActorNPC_ID = actor->sNPC_ID; | |
257 pDialogue_SpeakingActor = actor; | |
258 pNPCInfo = GetNPCData(actor->sNPC_ID); | |
259 if ( (pNPCInfo->uFlags & 3) != 2 ) | |
260 pNPCInfo->uFlags = pNPCInfo->uFlags + 1; | |
261 | |
262 switch (pParty->alignment) | |
263 { | |
264 case PartyAlignment_Good: sprintfex(pContainer, "evt%02d-b", const_2()); break; | |
265 case PartyAlignment_Neutral: sprintfex(pContainer, "evt%02d", const_2()); break; | |
266 case PartyAlignment_Evil: sprintfex(pContainer, "evt%02d-c", const_2()); break; | |
267 } | |
268 | |
269 pDialogueNPCCount = 0; | |
270 uNumDialogueNPCPortraits = 1; | |
271 pTexture_Dialogue_Background = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); | |
272 sprintfex(pContainer, "npc%03u", pNPCInfo->uPortraitID); | |
273 v9 = 0; | |
274 pDialogueNPCPortraits[0] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); | |
275 dword_591084 = areWeLoadingTexture; | |
276 uTextureID_right_panel_loop = uTextureID_right_panel; | |
277 if ( !pNPCInfo->Hired() && pNPCInfo->Location2D >= 0 ) | |
278 { | |
279 if ( (signed int)pParty->GetPartyFame() <= pNPCInfo->fame | |
280 || (pNumberContacts = pNPCInfo->uFlags & 0xFFFFFF7F, (pNumberContacts & 0x80000000u) != 0) ) | |
281 { | |
282 v9 = 1; | |
283 } | |
284 else | |
285 { | |
286 if ( pNumberContacts > 1 ) | |
287 { | |
288 if ( pNumberContacts == 2 ) | |
289 { | |
290 v9 = 3; | |
291 } | |
292 else | |
293 { | |
294 if ( pNumberContacts != 3 ) | |
295 { | |
296 if ( pNumberContacts != 4 ) | |
297 v9 = 1; | |
298 } | |
299 else | |
300 { | |
301 v9 = 2; | |
302 } | |
303 } | |
304 } | |
305 else if ( pNPCInfo->rep ) | |
306 { | |
307 v9 = 2; | |
308 } | |
309 } | |
310 } | |
311 if (sDialogue_SpeakingActorNPC_ID < 0) | |
312 v9 = 4; | |
313 pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_Dialogue, v9, 0);//pNumberContacts = 1, v9 = 0; pNumberContacts = 2, v9 = 3; | |
314 if (pNPCInfo->Hired()) | |
315 { | |
316 if ( !pNPCInfo->bHasUsedTheAbility ) | |
317 { | |
318 if ( pNPCInfo->uProfession >= 10 ) | |
319 { | |
320 if ( pNPCInfo->uProfession <= 12 || pNPCInfo->uProfession > 32 && (pNPCInfo->uProfession <= 34 | |
321 || pNPCInfo->uProfession > 38 && (pNPCInfo->uProfession <= 43 || pNPCInfo->uProfession == 52)) ) | |
322 { | |
323 pDialogueWindow->CreateButton(480, 250, 140, LOBYTE(pFontArrus->uFontHeight) - 3, 1, 0, UIMSG_SelectNPCDialogueOption, 9, 0, "", 0); | |
324 pDialogueWindow->_41D08F_set_keyboard_control_group(4, 1, 0, 1); | |
325 } | |
326 } | |
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: | |
424 if (uDialogueType > DIALOGUE_18 && uDialogueType < DIALOGUE_23 && !byte_5B0938[0]) | |
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 | |
1155 BLVFace *pFace; // eax@69 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1156 const char *pText; // ecx@79 |
1298 | 1157 char *v28; // esi@82 |
1158 enum UIMessageType pMessageType2; // esi@110 | |
1159 enum UIMessageType pMessageType3; // edx@117 | |
1160 char Str1[200]; // [sp+Ch] [bp-D4h]@129 | |
1161 unsigned int pX; // [sp+D4h] [bp-Ch]@1 | |
1162 unsigned int pY; // [sp+D8h] [bp-8h]@1 | |
1163 unsigned int v45; // [sp+DCh] [bp-4h]@21 | |
1164 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1165 int interaction_distance_limit = 512; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1166 |
1298 | 1167 pMouse->uPointingObjectID = 0; |
1168 pMouse->GetClickPos(&pX, &pY); | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1169 if ( pX < 0 || pX > 639 || pY < 0 || pY > 479 ) |
1298 | 1170 return; |
1171 if (pCurrentScreen == SCREEN_GAME) | |
1172 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1173 if ( pX > 467 || pY > 351 ) |
1298 | 1174 goto _click_on_game_ui; |
1175 if ( pRenderer->pRenderD3D ) // inlined mm8::4C1E01 | |
1176 { | |
1177 v18 = pGame->pVisInstance->get_picked_object_zbuf_val(); | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1178 if ( pX < (unsigned int)pViewport->uScreen_TL_X || pX > (unsigned int)pViewport->uScreen_BR_X |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1179 || pY < (unsigned int)pViewport->uScreen_TL_Y || pY > (unsigned int)pViewport->uScreen_BR_Y ) |
1298 | 1180 v18 = -1; |
1181 if ( v18 == -1 ) | |
1182 { | |
1183 pMouse->uPointingObjectID = 0; | |
1184 if ( pMouse->uPointingObjectID == 0 ) | |
1185 { | |
1186 if ( uLastPointedObjectID != 0 ) | |
1187 { | |
1188 pFooterString[0] = 0; | |
1189 bForceDrawFooter = 1; | |
1190 } | |
1191 } | |
1192 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1193 return; | |
1194 } | |
1195 } | |
1196 else | |
1197 v18 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]]; | |
1198 pMouse->uPointingObjectID = (unsigned __int16)v18; | |
1199 v19 = (signed)PID_ID(v18); | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1200 //For Items------------------------------------ |
1298 | 1201 if (PID_TYPE(v18) == OBJECT_Item) |
1202 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1203 if ( pObjectList->pObjects[pSpriteObjects[v19].uObjectDescID].uFlags & 0x10 ) |
1298 | 1204 { |
1205 pMouse->uPointingObjectID = 0; | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1206 pFooterString[0] = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1207 bForceDrawFooter = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1208 uLastPointedObjectID = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1209 return; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1210 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1211 if ( v18 >= (signed int)0x2000000u || pParty->pPickedItem.uItemID ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1212 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1213 GameUI_SetFooterString(pSpriteObjects[v19].stru_24.GetDisplayName()); |
1298 | 1214 if ( pMouse->uPointingObjectID == 0 ) |
1215 { | |
1216 if ( uLastPointedObjectID != 0 ) | |
1217 { | |
1218 pFooterString[0] = 0; | |
1219 bForceDrawFooter = 1; | |
1220 } | |
1221 } | |
1222 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1223 return; | |
1224 } | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1225 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[470], pSpriteObjects[v19].stru_24.GetDisplayName());// "Get %s" |
2008 | 1226 GameUI_SetFooterString(pTmpBuf.data()); |
1227 if ( pMouse->uPointingObjectID == 0 ) | |
1228 { | |
1229 if ( uLastPointedObjectID != 0 ) | |
1230 { | |
1231 pFooterString[0] = 0; | |
1232 bForceDrawFooter = 1; | |
1233 } | |
1234 } | |
1235 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1236 return; | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1237 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1238 //For Decorations---------------------------------- |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1239 if (PID_TYPE(v18) == OBJECT_Decoration) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1240 { |
1526 | 1241 if ( !pLevelDecorations[v19].uEventID ) |
1298 | 1242 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1243 if ( pLevelDecorations[v19].IsInteractive() ) |
1736
c6fe09a06712
Player::CompareVariable finished, renamed stru_5E4C90 to stru_5E4C90_MapPersistVars, party::field_4A0 to party::CounterEventValues
Grumpy7
parents:
1722
diff
changeset
|
1244 pText = pNPCTopics[stru_5E4C90_MapPersistVars._decor_events[pLevelDecorations[v19]._idx_in_stru123 - 75] + 379].pTopic;//íåâåðíî äëÿ êîñòðà |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1245 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1246 pText = pDecorationList->pDecorations[pLevelDecorations[v19].uDecorationDescID].field_20; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1247 GameUI_SetFooterString(pText); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1248 if ( pMouse->uPointingObjectID == 0 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1249 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1250 if ( uLastPointedObjectID != 0 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1251 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1252 pFooterString[0] = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1253 bForceDrawFooter = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1254 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1255 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1256 uLastPointedObjectID = pMouse->uPointingObjectID; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1257 return; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1258 } |
1526 | 1259 if ( !GetEventHintString(pLevelDecorations[v19].uEventID) ) |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1260 { |
1298 | 1261 if ( pMouse->uPointingObjectID == 0 ) |
1262 { | |
1263 if ( uLastPointedObjectID != 0 ) | |
1264 { | |
1265 pFooterString[0] = 0; | |
1266 bForceDrawFooter = 1; | |
1267 } | |
1268 } | |
1269 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1270 return; | |
1271 } | |
1526 | 1272 GameUI_SetFooterString(GetEventHintString(pLevelDecorations[v19].uEventID)); |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1273 if ( pMouse->uPointingObjectID == 0 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1274 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1275 if ( uLastPointedObjectID != 0 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1276 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1277 pFooterString[0] = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1278 bForceDrawFooter = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1279 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1280 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1281 uLastPointedObjectID = pMouse->uPointingObjectID; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1282 return; |
1298 | 1283 } |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1284 //For 3D Model------------------------------------- |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1285 if (PID_TYPE(v18) == OBJECT_BModel) |
1298 | 1286 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1287 if ( HIWORD(v18) < interaction_distance_limit ) |
1298 | 1288 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1289 if ( uCurrentlyLoadedLevelType != LEVEL_Indoor) |
1298 | 1290 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1291 v18b = (signed int)(unsigned __int16)v18 >> 9; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1292 if ( !pOutdoor->pBModels[v18b].pFaces[v19 & 0x3F].sCogTriggeredID |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1293 || !GetEventHintString(pOutdoor->pBModels[v18b].pFaces[v19 & 0x3F].sCogTriggeredID) ) |
1298 | 1294 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1295 pMouse->uPointingObjectID = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1296 pFooterString[0] = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1297 bForceDrawFooter = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1298 uLastPointedObjectID = 0; |
1298 | 1299 return; |
1300 } | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1301 GameUI_SetFooterString(GetEventHintString(pOutdoor->pBModels[v18b].pFaces[v19 & 0x3F].sCogTriggeredID)); |
1298 | 1302 if ( pMouse->uPointingObjectID == 0 ) |
1303 { | |
1304 if ( uLastPointedObjectID != 0 ) | |
1305 { | |
1306 pFooterString[0] = 0; | |
1307 bForceDrawFooter = 1; | |
1308 } | |
1309 } | |
1310 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1311 return; | |
1312 } | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1313 pFace = &pIndoor->pFaces[v19]; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1314 if ( BYTE3(pFace->uAttributes) & 6 ) |
1298 | 1315 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1316 if ( !pIndoor->pFaceExtras[pFace->uFaceExtraID].uEventID |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1317 || !GetEventHintString(pIndoor->pFaceExtras[pFace->uFaceExtraID].uEventID) ) |
1298 | 1318 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1319 pMouse->uPointingObjectID = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1320 pFooterString[0] = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1321 bForceDrawFooter = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1322 uLastPointedObjectID = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1323 return; |
1298 | 1324 } |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1325 GameUI_SetFooterString(GetEventHintString(pIndoor->pFaceExtras[pFace->uFaceExtraID].uEventID)); |
1298 | 1326 if ( pMouse->uPointingObjectID == 0 ) |
1327 { | |
1328 if ( uLastPointedObjectID != 0 ) | |
1329 { | |
1330 pFooterString[0] = 0; | |
1331 bForceDrawFooter = 1; | |
1332 } | |
1333 } | |
1334 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1335 return; | |
1336 } | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1337 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1338 pMouse->uPointingObjectID = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1339 pFooterString[0] = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1340 bForceDrawFooter = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1341 uLastPointedObjectID = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1342 return; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1343 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1344 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1345 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1346 if (PID_TYPE(v18) != OBJECT_Actor) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1347 { |
1298 | 1348 pMouse->uPointingObjectID = 0; |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1349 if ( uLastPointedObjectID != 0 ) |
1298 | 1350 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1351 pFooterString[0] = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1352 bForceDrawFooter = 1; |
1298 | 1353 } |
1354 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1355 return; | |
1356 } | |
1357 if ( v18 >= 335544320 ) | |
1358 { | |
1359 pMouse->uPointingObjectID = 0; | |
1360 if ( pMouse->uPointingObjectID == 0 ) | |
1361 { | |
1362 if ( uLastPointedObjectID != 0 ) | |
1363 { | |
1364 pFooterString[0] = 0; | |
1365 bForceDrawFooter = 1; | |
1366 } | |
1367 } | |
1368 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1369 return; | |
1370 } | |
1371 v28 = pTmpBuf.data(); | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1372 if ( pActors[v19].dword_000334_unique_name ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1373 pText = pMonsterStats->pPlaceStrings[pActors[v19].dword_000334_unique_name]; |
1298 | 1374 else |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1375 pText = pMonsterStats->pInfos[pActors[v19].pMonsterInfo.uID].pName; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1376 strncpy(pTmpBuf.data(), pText, 0x7D0u); |
1298 | 1377 } |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1378 GameUI_SetFooterString(v28); |
1298 | 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 v1 = uNumVisibleWindows; | |
1391 if ( uNumVisibleWindows > 0 ) | |
1392 { | |
1393 while ( 1 ) // some other fullscreen ui | |
1394 { | |
1395 pWindow = &pWindowList[pVisibleWindowsIdxs[v1] - 1]; | |
1396 if ( (signed int)pX >= (signed int)pWindow->uFrameX | |
1397 && (signed int)pX <= (signed int)pWindow->uFrameZ | |
1398 && (signed int)pY >= (signed int)pWindow->uFrameY | |
1399 && (signed int)pY <= (signed int)pWindow->uFrameW ) | |
1400 { | |
1401 for ( pButton = pWindow->pControlsHead; ; pButton = pButton->pNext ) | |
1402 { | |
1403 if ( !pButton ) | |
1404 break; | |
1405 if ( pButton->uButtonType == 1 ) | |
1406 { | |
1407 if ( (signed int)pX >= (signed int)pButton->uX | |
1408 && (signed int)pX <= (signed int)pButton->uZ | |
1409 && (signed int)pY >= (signed int)pButton->uY | |
1410 && (signed int)pY <= (signed int)pButton->uW ) | |
1411 { | |
1412 pMessageType1 = (UIMessageType)pButton->field_1C; | |
1413 if ( pMessageType1 ) | |
1414 { | |
1415 pMessageQueue_50CBD0->AddMessage(pMessageType1, pButton->msg_param, 0); | |
1416 } | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1417 GameUI_SetFooterString(pButton->pButtonName); |
1298 | 1418 uLastPointedObjectID = 1; |
1419 return; | |
1420 } | |
1421 } | |
1422 else | |
1423 { | |
1424 if ( pButton->uButtonType == 2 ) | |
1425 { | |
1426 v45 = pX - pButton->uX; | |
1427 v45 = pY - pButton->uY; | |
1428 if ( (double)(signed int)pButton->uWidth != 0.0 ) | |
1429 { | |
1430 if ( (double)(signed int)pButton->uHeight != 0.0 ) | |
1431 { | |
1432 pMessageType1 = (UIMessageType)pButton->field_1C; | |
1433 if ( pMessageType1 ) | |
1434 { | |
1435 pMessageQueue_50CBD0->AddMessage(pMessageType1, pButton->msg_param, 0); | |
1436 } | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1437 GameUI_SetFooterString(pButton->pButtonName); |
1298 | 1438 uLastPointedObjectID = 1; |
1439 return; | |
1440 //} | |
1441 } | |
1442 } | |
1443 } | |
1444 else // click on skill | |
1445 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1446 if ( pButton->uButtonType == 3 && pX >= pButton->uX && pX <= pButton->uZ && pY >= pButton->uY && pY <= pButton->uW ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1447 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1448 v7 = (LOBYTE(pPlayers[uActiveCharacter]->pActiveSkills[pButton->msg_param]) & 0x3F) + 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1449 if ( pPlayers[uActiveCharacter]->uSkillPoints < v7 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1450 sprintf(Str1, pGlobalTXT_LocalizationStrings[469], v7 - pPlayers[uActiveCharacter]->uSkillPoints);// "You need %d more Skill Points to advance here" |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1451 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1452 sprintf(Str1, pGlobalTXT_LocalizationStrings[468], v7);// "Clicking here will spend %d Skill Points" |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1453 GameUI_SetFooterString(Str1); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1454 uLastPointedObjectID = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1455 return; |
1298 | 1456 } |
1457 } | |
1458 } | |
1459 } | |
1460 } | |
1461 if ( pWindow->uFrameHeight == 480 ) | |
1462 break; | |
1463 --v1; | |
1464 if ( v1 <= 0 ) | |
1465 { | |
1466 break; | |
1467 } | |
1468 } | |
1469 } | |
1470 if ( uNumVisibleWindows <= 0 || (uNumVisibleWindows > 0 && pWindow->uFrameHeight != 480 && v1 <= 0)) | |
1471 { | |
1472 if ( pCurrentScreen == SCREEN_CHEST ) | |
1473 { | |
1414 | 1474 ChestUI_WritePointedObjectStatusString(); |
1298 | 1475 if ( pMouse->uPointingObjectID == 0 ) |
1476 { | |
1477 if ( uLastPointedObjectID != 0 ) | |
1478 { | |
1479 pFooterString[0] = 0; | |
1480 bForceDrawFooter = 1; | |
1481 } | |
1482 } | |
1483 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1484 return; | |
1485 } | |
1486 if ( pCurrentScreen == SCREEN_HOUSE ) | |
1487 { | |
1488 if ( dialog_menu_id != HOUSE_DIALOGUE_SHOP_BUY_STANDARD | |
1489 || (v16 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]], v16 == 0) | |
1490 || v16 == -65536 ) | |
1491 { | |
1492 if ( pMouse->uPointingObjectID == 0 ) | |
1493 { | |
1494 if ( uLastPointedObjectID != 0 ) | |
1495 { | |
1496 pFooterString[0] = 0; | |
1497 bForceDrawFooter = 1; | |
1498 } | |
1499 } | |
1500 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1501 return; | |
1502 } | |
1503 pItemGen = (ItemGen *)((char *)&pParty->pPickedItem + 36 * (v16 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 4); | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1504 GameUI_SetFooterString(pItemGen->GetDisplayName()); |
1298 | 1505 uLastPointedObjectID = 1; |
1506 if ( pMouse->uPointingObjectID == 0 ) | |
1507 { | |
1508 if ( uLastPointedObjectID != 0 ) | |
1509 { | |
1510 pFooterString[0] = 0; | |
1511 bForceDrawFooter = 1; | |
1512 } | |
1513 } | |
1514 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1515 return; | |
1516 } | |
1517 if ( (signed int)pY < 350 ) | |
1518 { | |
1519 v14 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]]; | |
1520 if ( v14 == 0 || v14 == -65536 || (unsigned int)v14 >= 0x1388 ) | |
1521 { | |
1522 if ( pMouse->uPointingObjectID == 0 ) | |
1523 { | |
1524 if ( uLastPointedObjectID != 0 ) | |
1525 { | |
1526 pFooterString[0] = 0; | |
1527 bForceDrawFooter = 1; | |
1528 } | |
1529 } | |
1530 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1531 return; | |
1532 } | |
1384
b51332ab228f
changed a few member variables in Player to slightly less confusing names
Grumpy7
parents:
1362
diff
changeset
|
1533 pItemGen = (ItemGen *)&pPlayers[uActiveCharacter]->pInventoryItemList[v14-1]; |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1534 GameUI_SetFooterString(pItemGen->GetDisplayName()); |
1298 | 1535 uLastPointedObjectID = 1; |
1536 if ( pMouse->uPointingObjectID == 0 ) | |
1537 { | |
1538 if ( uLastPointedObjectID != 0 ) | |
1539 { | |
1540 pFooterString[0] = 0; | |
1541 bForceDrawFooter = 1; | |
1542 } | |
1543 } | |
1544 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1545 return; | |
1546 } | |
1547 _click_on_game_ui: | |
1548 if ( (signed int)pX >= (signed int)pWindowList[0].uFrameX | |
1549 && (signed int)pX <= (signed int)pWindowList[0].uFrameZ | |
1550 && (signed int)pY >= (signed int)pWindowList[0].uFrameY | |
1551 && (signed int)pY <= (signed int)pWindowList[0].uFrameW ) | |
1552 { | |
1553 for ( pButton = pWindowList[0].pControlsHead; pButton != (GUIButton *)0; pButton = pButton->pNext ) | |
1554 { | |
1555 if ( pButton->uButtonType == 1 ) | |
1556 { | |
1557 if ( (signed int)pX >= (signed int)pButton->uX | |
1558 && (signed int)pX <= (signed int)pButton->uZ | |
1559 && (signed int)pY >= (signed int)pButton->uY | |
1560 && (signed int)pY <= (signed int)pButton->uW ) | |
1561 { | |
1562 pMessageType3 = (UIMessageType)pButton->field_1C; | |
1563 if ( pMessageType3 == 0 ) // For books | |
1564 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1565 GameUI_SetFooterString(pButton->pButtonName); |
1298 | 1566 uLastPointedObjectID = 1; |
1567 return; | |
1568 } | |
1569 | |
1570 pMessageQueue_50CBD0->AddMessage(pMessageType3, pButton->msg_param, 0); | |
1571 uLastPointedObjectID = 1; | |
1572 return; | |
1573 } | |
1574 } | |
1575 else | |
1576 { | |
1577 if ( pButton->uButtonType == 2 ) | |
1578 { | |
1579 v45 = pX - pButton->uX; | |
1580 v45 = pY - pButton->uY; | |
1581 | |
1582 if (pX >= pButton->uX && pX <= pButton->uZ && | |
1583 pY >= pButton->uY && pY <= pButton->uW) | |
1584 if ( (double)(signed int)pButton->uWidth != 0.0 ) | |
1585 { | |
1586 if ( (double)(signed int)pButton->uHeight != 0.0 ) | |
1587 { | |
1588 //UNDEF(v32); | |
1589 //if ( v33 | v34 ) | |
1590 //{ | |
1591 pMessageType2 = (UIMessageType)pButton->field_1C; | |
1592 if ( pMessageType2 != 0 ) | |
1593 pMessageQueue_50CBD0->AddMessage(pMessageType2, pButton->msg_param, 0); | |
1594 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1595 GameUI_SetFooterString(pButton->pButtonName); |
1298 | 1596 uLastPointedObjectID = 1; |
1597 return; | |
1598 //} | |
1599 } | |
1600 } | |
1601 } | |
1602 else | |
1603 { | |
1604 if ( pButton->uButtonType == 3 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1605 && pX >= pButton->uX && pX <= pButton->uZ |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1606 && pY >= pButton->uY && pY <= pButton->uW ) |
1298 | 1607 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1608 v7 = (LOBYTE(pPlayers[uActiveCharacter]->pActiveSkills[pButton->msg_param]) & 0x3F) + 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1609 if ( pPlayers[uActiveCharacter]->uSkillPoints < v7 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1610 sprintf(Str1, pGlobalTXT_LocalizationStrings[469], v7 - pPlayers[uActiveCharacter]->uSkillPoints);// "You need %d more Skill Points to advance here" |
1298 | 1611 else |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1612 sprintf(Str1, pGlobalTXT_LocalizationStrings[468], v7);// "Clicking here will spend %d Skill Points" |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1613 GameUI_SetFooterString(Str1); |
1298 | 1614 uLastPointedObjectID = 1; |
1615 return; | |
1616 } | |
1617 } | |
1618 } | |
1619 } | |
1620 } | |
1621 pMouse->uPointingObjectID = sub_46A99B(); | |
1622 if ( pMouse->uPointingObjectID == 0 ) | |
1623 { | |
1624 if ( uLastPointedObjectID != 0 ) | |
1625 { | |
1626 pFooterString[0] = 0; | |
1627 bForceDrawFooter = 1; | |
1628 } | |
1629 } | |
1630 uLastPointedObjectID = pMouse->uPointingObjectID; | |
1631 return; | |
1632 } | |
1633 } | |
1634 | |
1635 //----- (0044158F) -------------------------------------------------------- | |
1636 void GameUI_DrawCharacterSelectionFrame() | |
1637 { | |
1638 if ( uActiveCharacter ) | |
1639 pRenderer->DrawTextureTransparent(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[uActiveCharacter - 1] - 9, 380, | |
1640 pIcons_LOD->GetTexture(uTextureID_GameUI_CharSelectionFrame)); | |
1641 } | |
1642 | |
1643 //----- (0044162D) -------------------------------------------------------- | |
1644 void GameUI_DrawPartySpells() | |
1645 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1646 unsigned int v0; // ebp@1 |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1647 Texture *v7; // [sp-4h] [bp-1Ch]@12 |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1648 Texture *v9; // [sp-4h] [bp-1Ch]@21 |
1298 | 1649 |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1650 v0 = (signed __int64)((double)GetTickCount() * 0.050000001); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1651 //v1 = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1652 for (uint i = 0; i < 14; ++i) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1653 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1654 //v2 = byte_4E5DD8[v1]; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1655 if (pParty->pPartyBuffs[byte_4E5DD8[i]].uExpireTime) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1656 { |
1980 | 1657 Texture* tex = pIcons_LOD->GetTexture(pTextureIDs_PartyBuffIcons[i]); |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1658 //v3 = pTextureIDs_PartyBuffIcons[i]; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1659 pRenderer->_4A65CC(pPartySpellbuffsUI_XYs[i][0], |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1660 pPartySpellbuffsUI_XYs[i][1], tex, tex, |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1661 v0 + 20 * pPartySpellbuffsUI_smthns[i], 0, 63); |
1298 | 1662 } |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1663 //++v1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1664 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1665 //while ( v1 < 14 ); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1666 if (pCurrentScreen == SCREEN_GAME || pCurrentScreen == SCREEN_NPC_DIALOGUE) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1667 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1668 if (pParty->FlyActive()) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1669 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1670 if ( pParty->bFlying ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1671 v7 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_FlySpell, v0)->uTextureID); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1672 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1673 v7 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_FlySpell, 0)->uTextureID); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1674 if ( pRenderer->pRenderD3D ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1675 pRenderer->DrawTextureIndexed(8, 8, v7); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1676 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1677 pRenderer->DrawTextureTransparent(8, 8, v7); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1678 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1679 if ( pParty->WaterWalkActive() ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1680 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1681 if ( pParty->uFlags & PARTY_FLAGS_1_STANDING_ON_WATER ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1682 v9 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, v0)->uTextureID); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1683 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1684 v9 = pIcons_LOD->GetTexture(pIconsFrameTable->GetFrame(uIconIdx_WaterWalk, 0)->uTextureID); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1685 if ( pRenderer->pRenderD3D ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1686 pRenderer->DrawTextureIndexed(396, 8, v9); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1687 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1688 pRenderer->DrawTextureTransparent(396, 8, v9); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1689 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1690 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1691 for (uint i = 0; i < 4; ++i) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1692 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1693 if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_HAMMERHANDS].uExpireTime ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1694 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
|
1695 if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1696 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
|
1697 if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_PRESERVATION].uExpireTime ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1698 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
|
1699 if ( pParty->pPlayers[i].pPlayerBuffs[PLAYER_BUFF_PAIN_REFLECTION].uExpireTime ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1700 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
|
1701 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1702 } |
1298 | 1703 |
1704 //----- (004921C1) -------------------------------------------------------- | |
1705 void GameUI_DrawPortraits(unsigned int _this) | |
1706 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1707 unsigned int face_expression_ID; // eax@17 |
1298 | 1708 PlayerFrame *pFrame; // eax@21 |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1709 int pTextureID; // eax@57 |
1298 | 1710 Texture *pPortrait; // [sp-4h] [bp-1Ch]@27 |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1711 |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1712 if ( qword_A750D8 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1713 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1714 qword_A750D8 -= (signed int)pMiscTimer->uTimeElapsed; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1715 if ( qword_A750D8 <= 0 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1716 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1717 if ( pPlayers[uSpeakingCharacter]->CanAct() ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1718 pPlayers[uSpeakingCharacter]->PlaySound(PlayerSpeechID, 0); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1719 qword_A750D8 = 0i64; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1720 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1721 } |
1298 | 1722 |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1723 for (uint i = 0; i < 4; ++i) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1724 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1725 Player* pPlayer = &pParty->pPlayers[i]; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1726 if ( pPlayer->IsEradicated() ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1727 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1728 pPortrait = pTexture_PlayerFaceEradicated; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1729 if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1730 pRenderer->_4A6E7E(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i], 388, pPortrait); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1731 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1732 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
|
1733 if ( pPlayer->pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HASTE].uExpireTime |
1822 | 1734 | 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
|
1735 | pPlayer->pPlayerBuffs[PLAYER_BUFF_STONESKIN].uExpireTime ) |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1736 sub_441A4E(i); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1737 continue; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1738 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1739 if (pPlayer->IsDead()) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1740 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1741 pPortrait = pTexture_PlayerFaceDead; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1742 if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1743 pRenderer->_4A6E7E(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i], 388, pPortrait); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1744 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1745 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
|
1746 if ( pPlayer->pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HASTE].uExpireTime |
1822 | 1747 | 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
|
1748 | pPlayer->pPlayerBuffs[PLAYER_BUFF_STONESKIN].uExpireTime ) |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1749 sub_441A4E(i); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1750 continue; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1751 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1752 face_expression_ID = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1753 for ( uint j = 0; j < pPlayerFrameTable->uNumFrames; ++j ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1754 if ( pPlayerFrameTable->pFrames[j].expression == pPlayer->expression ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1755 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1756 face_expression_ID = j; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1757 break; |
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 if ( face_expression_ID == 0 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1760 face_expression_ID = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1761 if (pPlayer->expression == CHARACTER_EXPRESSION_21) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1762 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
|
1763 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1764 pFrame = pPlayerFrameTable->GetFrameBy_x(face_expression_ID, pPlayer->uExpressionTimePassed); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1765 if (pPlayer->field_1AA2 != pFrame->uTextureID - 1 || _this ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1766 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1767 pPlayer->field_1AA2 = pFrame->uTextureID - 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1768 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
|
1769 if ( pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].uExpireTime ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1770 pRenderer->_4A6E7E(pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i], 388, pPortrait); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1771 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1772 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
|
1773 if ( pPlayer->pPlayerBuffs[PLAYER_BUFF_BLESS].uExpireTime | pPlayer->pPlayerBuffs[PLAYER_BUFF_HASTE].uExpireTime |
1822 | 1774 | 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
|
1775 | pPlayer->pPlayerBuffs[PLAYER_BUFF_STONESKIN].uExpireTime ) |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1776 sub_441A4E(i); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1777 continue; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1778 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1779 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1780 if ( pParty->bTurnBasedModeOn == 1 ) |
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 ( pTurnEngine->turn_stage != 1 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1783 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1784 if (PID_TYPE(pTurnEngine->pQueue[0].uPackedID) == OBJECT_Player) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1785 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1786 if ( pTurnEngine->uActorQueueSize > 0 ) |
1298 | 1787 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1788 for (uint i = 0; i < (uint)pTurnEngine->uActorQueueSize; ++i) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1789 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1790 if (PID_TYPE(pTurnEngine->pQueue[i].uPackedID) != OBJECT_Player) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1791 break; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1792 pTextureID = dword_5079D0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1793 if ( pParty->uFlags & 0x10 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1794 pTextureID = dword_5079CC; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1795 else |
1298 | 1796 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1797 if ( pParty->uFlags & 0x20 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1798 pTextureID = dword_5079C8; |
1298 | 1799 } |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1800 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
|
1801 } |
1298 | 1802 } |
1523
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 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1805 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1806 else |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1807 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1808 for (uint i = 0; i < 4; ++i) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1809 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1810 if (pParty->pPlayers[i].CanAct() && !pParty->pPlayers[i].uTimeToRecovery) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1811 { |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1812 pTextureID = dword_5079D0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1813 if ( pParty->uFlags & 0x10 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1814 pTextureID = dword_5079CC; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1815 else |
1298 | 1816 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1817 if ( pParty->uFlags & 0x20 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1818 pTextureID = dword_5079C8; |
1298 | 1819 } |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1820 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
|
1821 } |
1298 | 1822 } |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1823 } |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1824 } |
1298 | 1825 |
1826 //----- (00441D38) -------------------------------------------------------- | |
1827 void GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int bRedrawOdmMinimap) | |
1828 { | |
1829 int uHeight; // ebx@6 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1830 unsigned int pW; // ebx@23 |
1298 | 1831 int v15; // eax@23 |
1832 double v20; // st7@30 | |
1833 signed int v27; // eax@37 | |
1834 unsigned __int16 *v28; // ecx@37 | |
1835 signed int v29; // edi@40 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1836 int pPoint_X; // edi@72 |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1837 int pPoint_Y; // ebx@72 |
1298 | 1838 unsigned int lPitch; // [sp+20h] [bp-34h]@1 |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1839 unsigned int pY; // [sp+20h] [bp-34h]@23 |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1840 unsigned int pX; // [sp+24h] [bp-30h]@23 |
1298 | 1841 signed int v70; // [sp+24h] [bp-30h]@37 |
1842 signed int uBluea; // [sp+28h] [bp-2Ch]@37 | |
1843 int v73; // [sp+2Ch] [bp-28h]@30 | |
1844 signed int uCenterY; // [sp+48h] [bp-Ch]@1 | |
1845 signed int uCenterX; // [sp+4Ch] [bp-8h]@1 | |
1846 signed int uWidth; // [sp+5Ch] [bp+8h]@30 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1847 unsigned int pZ; // [sp+60h] [bp+Ch]@23 |
1298 | 1848 float uWb; // [sp+60h] [bp+Ch]@30 |
1507 | 1849 unsigned int pColor; |
1298 | 1850 |
1851 uCenterX = (uX + uZ) / 2; | |
1852 uCenterY = (uY + uW) / 2; | |
1853 lPitch = pRenderer->uTargetSurfacePitch; | |
1980 | 1854 bool bWizardEyeActive = pParty->WizardEyeActive(); |
1855 int uWizardEyeSkillLevel = pParty->WizardEyeSkillLevel(); | |
1505 | 1856 if ( CheckHiredNPCSpeciality(Cartographer) ) |
1298 | 1857 { |
1858 bWizardEyeActive = true; | |
1859 uWizardEyeSkillLevel = 2; | |
1860 } | |
1505 | 1861 extern bool wizard_eye; |
1862 if ( wizard_eye ) | |
1863 { | |
1298 | 1864 bWizardEyeActive = true; |
1865 uWizardEyeSkillLevel = 3; | |
1505 | 1866 } |
1298 | 1867 pRenderer->SetRasterClipRect(uX, uY, uZ - 1, uW - 1); |
1868 uHeight = uW - uY; | |
1869 uWidth = uZ - uX; | |
1870 | |
1507 | 1871 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor) |
1298 | 1872 { |
1980 | 1873 uchar* pMapLod0 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0_prolly_alpha_mask; |
1874 ushort* pPal = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16; | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1875 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
|
1876 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
|
1877 uWb = (double)(32768 - pParty->vPosition.y) / (double)(1 << (16 - pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2)); |
1298 | 1878 switch (uZoom) |
1879 { | |
1880 case 512: | |
1881 { | |
1882 v20 = v20 - (double)(uWidth / 2); | |
1507 | 1883 uWb = uWb - (double)(uHeight / 2); |
1298 | 1884 } |
1885 break; | |
1886 case 1024: | |
1887 { | |
1888 v20 = v20 - (double)(uWidth / 4); | |
1507 | 1889 uWb = uWb - (double)(uHeight / 4); |
1298 | 1890 } |
1891 break; | |
1892 case 2048: | |
1893 { | |
1894 v20 = v20 - (double)(uWidth / 8); | |
1507 | 1895 uWb = uWb - (double)(uHeight / 8); |
1298 | 1896 } |
1897 break; | |
1898 default: assert(false); | |
1899 } | |
1900 assert(sizeof(pOdmMinimap) == 137 * 117 * sizeof(short)); | |
1901 | |
1902 v70 = floorf(v20 * 65536.0 + 0.5f);//LODWORD(v24); | |
1903 uBluea = floorf(uWb * 65536.0 + 0.5f);//LODWORD(v25); | |
1904 v27 = uBluea >> 16; | |
1905 v28 = &pRenderer->pTargetSurface[uX + uY * lPitch]; | |
1906 if (pMapLod0 && bRedrawOdmMinimap) | |
1907 { | |
1908 assert(uWidth == 137 && uHeight == 117); | |
1909 //auto pMinimap = (unsigned __int16 *)pOdmMinimap; | |
1910 | |
1980 | 1911 ushort mapWidth = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uTextureWidth; |
1298 | 1912 |
1507 | 1913 v29 = v70 >> 16; |
1914 for (int y = 0; y < uHeight; ++y) | |
1915 { | |
1980 | 1916 uchar* pMapLod0Line = &pMapLod0[v27 * mapWidth]; |
1507 | 1917 for (int x = 0; x < uWidth; ++x) |
1918 { | |
1919 //*pMinimap++ = pPal[pMapLod0Line[v29]]; | |
1920 pOdmMinimap[y][x] = pPal[pMapLod0Line[v29]]; | |
1921 v29 = (v70 + x * v73) >> 16; | |
1922 } | |
1923 v29 = v70 >> 16; | |
1924 v28 += 137 - uWidth; | |
1925 uBluea += v73; | |
1926 v27 = uBluea >> 16; | |
1927 } | |
1298 | 1928 } |
1929 | |
1930 for (int y = 0; y < 117; ++y) | |
1931 { | |
1932 for (int x = 0; x < 137; ++x) | |
1933 { | |
1934 *v28++ = pOdmMinimap[y][x]; | |
1935 } | |
1936 v28 += lPitch - 137; | |
1937 } | |
1938 uNumBlueFacesInBLVMinimap = 0; | |
1939 } | |
1507 | 1940 else// uCurrentlyLoadedLevelType == LEVEL_Indoor |
1298 | 1941 { |
1942 pRenderer->FillRectFast(uX, uY, uZ - uX, uHeight, 0xF); | |
1943 uNumBlueFacesInBLVMinimap = 0; | |
1944 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1945 for (uint i = 0; i < (uint)pIndoor->pMapOutlines->uNumOutlines; ++i) |
1298 | 1946 { |
1980 | 1947 BLVMapOutline* pOutline = &pIndoor->pMapOutlines->pOutlines[i]; |
1948 BLVFace* pFace1 = pIndoor->pFaces + pOutline->uFace1ID; | |
1949 BLVFace* pFace2 = pIndoor->pFaces + pOutline->uFace2ID; | |
1298 | 1950 //v9 = pIndoor->pFaces[pMapVertex->uFace1ID].uAttributes; |
1951 //v10 = pIndoor->pFaces[pMapVertex->uFace2ID].uAttributes; | |
1952 if (pFace1->Visible() && pFace2->Visible()) | |
1953 { | |
1507 | 1954 if ( pOutline->uFlags & 1 ) |
1298 | 1955 goto LABEL_15; |
1956 if (pFace1->uAttributes & 0x80 || pFace2->uAttributes & 0x80) | |
1957 goto LABEL_ABC; | |
1958 } | |
1959 continue; | |
1960 | |
1961 LABEL_ABC: | |
1507 | 1962 pOutline->uFlags = pOutline->uFlags | 1; |
1963 pIndoor->_visible_outlines[i >> 3] |= 1 << (7 - i % 8); | |
1298 | 1964 |
1965 LABEL_15: | |
1507 | 1966 //v12 = &pIndoor->pFaces[pOutline->uFace1ID]; |
1967 if (bWizardEyeActive && uWizardEyeSkillLevel >= 3 && | |
1968 (pFace1->uAttributes & 0x2000 || pFace2->uAttributes & 0x2000) && | |
1969 (pIndoor->pFaceExtras[pFace1->uFaceExtraID].uEventID || pIndoor->pFaceExtras[pFace2->uFaceExtraID].uEventID)) | |
1970 { | |
1971 if (uNumBlueFacesInBLVMinimap < 49) | |
1972 pBlueFacesInBLVMinimapIDs[uNumBlueFacesInBLVMinimap++] = i; | |
1973 } | |
1974 else | |
1975 { | |
1980 | 1976 long long _a = (uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x); |
1977 uint _b = ((unsigned int)((unsigned __int64)_a >> 16) << 16); | |
1978 int _c = ((signed int)(_b - uZoom * pParty->vPosition.x) >> 16); | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1979 pX = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1980 pY = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].y) >> 16) << 16) - uZoom * pParty->vPosition.y) >> 16); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1981 pZ = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1982 pW = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].y) >> 16) << 16) - uZoom * pParty->vPosition.y) >> 16); |
1507 | 1983 v15 = abs(pOutline->sZ - pParty->vPosition.z) / 8; |
1984 if ( v15 > 100 ) | |
1985 v15 = 100; | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1986 pRenderer->RasterLine2D(pX, pY, pZ, pW, viewparams->pPalette[-v15 + 200]); |
1507 | 1987 } |
1298 | 1988 } |
1507 | 1989 |
1990 for (uint i = 0; i < uNumBlueFacesInBLVMinimap; ++i) | |
1298 | 1991 { |
1980 | 1992 BLVMapOutline* pOutline = &pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[i]]; |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
1993 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
|
1994 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
|
1995 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
|
1996 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
|
1997 pRenderer->RasterLine2D(pX, pY, pZ, pW, ui_game_minimap_outline_color); |
1298 | 1998 } |
1999 } | |
2000 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2001 //draw arrow on the minimap(include. Ritor1) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2002 uint arrow_idx; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2003 unsigned int rotate = pParty->sRotationY & stru_5C6E00->uDoublePiMask; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2004 if ( (signed int)rotate <= 1920 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2005 arrow_idx = 6; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2006 if ( (signed int)rotate < 1664 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2007 arrow_idx = 5; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2008 if ( (signed int)rotate <= 1408 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2009 arrow_idx = 4; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2010 if ( (signed int)rotate < 1152 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2011 arrow_idx = 3; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2012 if ( (signed int)rotate <= 896 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2013 arrow_idx = 2; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2014 if ( (signed int)rotate < 640 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2015 arrow_idx = 1; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2016 if ( (signed int)rotate <= 384 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2017 arrow_idx = 0; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2018 if ( (signed int)rotate < 128 || (signed int)rotate > 1920 ) |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2019 arrow_idx = 7; |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2020 pRenderer->DrawTextureTransparent(uCenterX - 3, uCenterY - 3, pIcons_LOD->GetTexture(pTextureIDs_pMapDirs[arrow_idx]));//ñòðåëêà |
1298 | 2021 |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2022 //draw objects on the minimap |
1507 | 2023 if ( bWizardEyeActive ) |
1298 | 2024 { |
1507 | 2025 if ( uWizardEyeSkillLevel >= 2 ) |
2026 { | |
2027 for ( uint i = 0; i < uNumSpriteObjects; ++i ) | |
1298 | 2028 { |
1507 | 2029 if ( !pSpriteObjects[i].uType || !pSpriteObjects[i].uObjectDescID ) |
2030 continue; | |
2031 //if (uWizardEyeSkillLevel == 1 | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2032 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
|
2033 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
|
2034 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
|
2035 pPoint_Y >= pRenderer->raster_clip_y && pPoint_Y <= pRenderer->raster_clip_w) |
1298 | 2036 { |
1507 | 2037 if (pObjectList->pObjects[pSpriteObjects[i].uObjectDescID].uFlags & OBJECT_DESC_UNPICKABLE) |
1298 | 2038 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2039 pRenderer->RasterLine2D(pPoint_X, pPoint_Y, pPoint_X, pPoint_Y, ui_game_minimap_projectile_color); |
1298 | 2040 } |
1507 | 2041 else if ( uZoom > 512 ) |
1298 | 2042 { |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2043 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
|
2044 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
|
2045 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
|
2046 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
|
2047 pRenderer->RasterLine2D(pPoint_X + 2, pPoint_Y, pPoint_X + 2, pPoint_Y + 1, ui_game_minimap_treasure_color); |
1507 | 2048 } |
2049 else | |
2050 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2051 pRenderer->RasterLine2D(pPoint_X - 1, pPoint_Y - 1, pPoint_X - 1, pPoint_Y, ui_game_minimap_treasure_color); |
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2052 pRenderer->RasterLine2D(pPoint_X, pPoint_Y - 1, pPoint_X, pPoint_Y, ui_game_minimap_treasure_color); |
1298 | 2053 } |
2054 } | |
2055 } | |
2056 } | |
1507 | 2057 for ( uint i = 0; i < uNumActors; ++i )//draw actors(îòðèñîâêà ìîíñòðîâ è íïñ) |
2058 { | |
2059 if ( pActors[i].uAIState != Removed && pActors[i].uAIState != Disabled | |
2060 && (pActors[i].uAIState == Dead || BYTE1(pActors[i].uAttributes) & 0x80) ) | |
2061 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2062 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
|
2063 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
|
2064 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
|
2065 && pPoint_Y >= pRenderer->raster_clip_y && pPoint_Y <= pRenderer->raster_clip_w ) |
1507 | 2066 { |
2067 pColor = ui_game_minimap_actor_friendly_color; | |
2068 if ( BYTE3(pActors[i].uAttributes) & 1 ) | |
2069 pColor = ui_game_minimap_actor_hostile_color; | |
2070 if ( pActors[i].uAIState == Dead) | |
2071 pColor = ui_game_minimap_actor_corpse_color; | |
2072 if ( uZoom > 1024 ) | |
2073 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2074 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
|
2075 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
|
2076 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
|
2077 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
|
2078 pRenderer->RasterLine2D(pPoint_X + 2, pPoint_Y - 1, pPoint_X + 2, pPoint_Y + 1, pColor); |
1507 | 2079 } |
2080 else | |
2081 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2082 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
|
2083 pRenderer->RasterLine2D(pPoint_X, pPoint_Y - 1, pPoint_X, pPoint_Y, pColor); |
1507 | 2084 } |
2085 } | |
2086 } | |
2087 } | |
2088 for ( uint i = 0; i < (signed int)uNumLevelDecorations; ++i )//draw items(îòðèñîâêà ïðåäìåòîâ) | |
2089 { | |
2090 if ( pLevelDecorations[i].uFlags & 8 ) | |
2091 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2092 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
|
2093 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
|
2094 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
|
2095 && pPoint_Y >= pRenderer->raster_clip_y && pPoint_Y <= pRenderer->raster_clip_w ) |
1507 | 2096 { |
2097 if ( (signed int)uZoom > 512 ) | |
2098 { | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2099 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
|
2100 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
|
2101 pRenderer->RasterLine2D(pPoint_X + 1, pPoint_Y - 1, pPoint_X + 1, pPoint_Y + 1, ui_game_minimap_decoration_color_1); |
1507 | 2102 } |
2103 else | |
1523
53265d238d94
interaction_distance_limit for 3DModel in DrawStatusText
Ritor1
parents:
1509
diff
changeset
|
2104 pRenderer->RasterLine2D(pPoint_X, pPoint_Y, pPoint_X, pPoint_Y, ui_game_minimap_decoration_color_1); |
1507 | 2105 } |
2106 } | |
2107 } | |
1298 | 2108 } |
1507 | 2109 pRenderer->DrawTextureTransparent(468, 0, pIcons_LOD->GetTexture(uTextureID_Minimap_Loop));//draw minimap_loop |
1298 | 2110 pRenderer->SetTextureClipRect(541, 0, 567, 480); |
1507 | 2111 pRenderer->DrawTextureIndexed(floorf(((double)pParty->sRotationY * 0.1171875) + 0.5f) + 285, 136, pIcons_LOD->GetTexture(uTextureID_Compas));//draw compas |
1298 | 2112 pRenderer->ResetTextureClipRect(); |
2113 } | |
2114 | |
2115 //----- (00441498) -------------------------------------------------------- | |
1458 | 2116 void GameUI_DrawTorchlightAndWizardEye() |
1505 | 2117 { |
2118 if (pCurrentScreen == SCREEN_GAME | |
2119 || pCurrentScreen == SCREEN_MENU | |
2120 || pCurrentScreen == SCREEN_OPTIONS | |
2121 || pCurrentScreen == SCREEN_REST | |
2122 || pCurrentScreen == SCREEN_SPELL_BOOK | |
2123 || pCurrentScreen == SCREEN_CHEST | |
2124 || pCurrentScreen == SCREEN_SAVEGAME | |
2125 || pCurrentScreen == SCREEN_LOADGAME | |
2126 || pCurrentScreen == SCREEN_CHEST_INVENTORY | |
2127 || pCurrentScreen == SCREEN_BOOKS | |
2128 || pCurrentScreen == SCREEN_BRANCHLESS_NPC_DIALOG ) | |
2129 { | |
2130 if (pParty->TorchlightActive()) | |
1298 | 2131 { |
1980 | 2132 IconFrame* icon = pIconsFrameTable->GetFrame((signed __int16)pUIAnum_Torchlight->uIconID, pEventTimer->Time()); |
1505 | 2133 pRenderer->DrawTextureTransparent(pUIAnum_Torchlight->x, pUIAnum_Torchlight->y, pIcons_LOD->GetTexture(icon->uTextureID)); |
1298 | 2134 } |
1505 | 2135 if (pParty->WizardEyeActive()) |
2136 { | |
1980 | 2137 IconFrame* icon = pIconsFrameTable->GetFrame((signed __int16)pUIAnim_WizardEye->uIconID, pEventTimer->Time()); |
1505 | 2138 pRenderer->DrawTextureTransparent(pUIAnim_WizardEye->x, pUIAnim_WizardEye->y, pIcons_LOD->GetTexture(icon->uTextureID)); |
2139 } | |
2140 } | |
2141 } | |
1298 | 2142 // 4E28F8: using guessed type int pCurrentScreen; |
2143 | |
2144 | |
2145 //----- (00491F87) -------------------------------------------------------- | |
2146 void GameUI_DrawHiredNPCs() | |
2147 { | |
2148 unsigned int v13; // eax@23 | |
2149 char pContainer[20]; // [sp+Ch] [bp-30h]@18 | |
2150 signed int uFrameID; // [sp+24h] [bp-18h]@19 | |
2151 int v22; // [sp+34h] [bp-8h]@2 | |
1505 | 2152 unsigned __int8 pNPC_limit_ID; // [sp+3Bh] [bp-1h]@2 |
1298 | 2153 |
2154 if ( bNoNPCHiring != 1 ) | |
2155 { | |
1505 | 2156 pNPC_limit_ID = 0; |
1298 | 2157 v22 = 0; |
2158 if (pParty->pHirelings[0].pName) | |
2159 pTmpBuf[v22++] = 0; | |
2160 if (pParty->pHirelings[1].pName) | |
2161 pTmpBuf[v22++] = 1; | |
2162 | |
2163 for (uint i = 0; i < pNPCStats->uNumNewNPCs; ++i) | |
2164 { | |
2165 if (pNPCStats->pNewNPCData[i].uFlags & 128) | |
2166 { | |
2167 if (!pParty->pHirelings[0].pName || strcmp(pNPCStats->pNewNPCData[i].pName, pParty->pHirelings[0].pName)) | |
2168 { | |
2169 if (!pParty->pHirelings[1].pName || strcmp(pNPCStats->pNewNPCData[i].pName, pParty->pHirelings[1].pName)) | |
2170 pTmpBuf[v22++] = i + 2; | |
2171 } | |
2172 } | |
2173 } | |
2174 | |
1793
4dee76d79c78
dword_5B65CC to npcIdToDismissAfterDialogue, Party::field_709 to Party::hirelingScrollPosition
Grumpy7
parents:
1758
diff
changeset
|
2175 for ( int i = pParty->hirelingScrollPosition; i < v22 && pNPC_limit_ID < 2; i++ ) |
1298 | 2176 { |
1505 | 2177 if ( (unsigned __int8)pTmpBuf[i] >= 2 ) |
1298 | 2178 { |
1505 | 2179 sprintf(pContainer, "NPC%03d", pNPCStats->pNPCData[(unsigned __int8)pTmpBuf[i] + 499].uPortraitID); |
2180 pRenderer->DrawTextureIndexed(pHiredNPCsIconsOffsetsX[pNPC_limit_ID], pHiredNPCsIconsOffsetsY[pNPC_limit_ID], | |
2181 pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE))); | |
1298 | 2182 } |
2183 else | |
2184 { | |
1505 | 2185 sprintf(pContainer, "NPC%03d", pParty->pHirelings[(unsigned __int8)pTmpBuf[i]].uPortraitID); |
2186 pRenderer->DrawTextureIndexed(pHiredNPCsIconsOffsetsX[pNPC_limit_ID], pHiredNPCsIconsOffsetsY[pNPC_limit_ID], | |
2187 pIcons_LOD->GetTexture(pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE))); | |
2188 if ( pParty->pHirelings[(unsigned __int8)pTmpBuf[i]].evt_A == 1 ) | |
1298 | 2189 { |
1505 | 2190 uFrameID = pParty->pHirelings[(unsigned __int8)pTmpBuf[i]].evt_B; |
2191 v13 = 0; | |
1802 | 2192 if (pIconsFrameTable->uNumIcons) |
1298 | 2193 { |
1505 | 2194 for ( v13 = 0; v13 < pIconsFrameTable->uNumIcons; ++v13 ) |
1298 | 2195 { |
1505 | 2196 if ( !_stricmp("spell96", pIconsFrameTable->pIcons[v13].pAnimationName) ) |
2197 break; | |
1298 | 2198 } |
2199 } | |
1505 | 2200 pRenderer->DrawTextureTransparent(pHiredNPCsIconsOffsetsX[pNPC_limit_ID], pHiredNPCsIconsOffsetsY[pNPC_limit_ID], |
2201 &pIcons_LOD->pTextures[pIconsFrameTable->GetFrame(v13, uFrameID)->uTextureID]); | |
1298 | 2202 } |
2203 } | |
1505 | 2204 ++pNPC_limit_ID; |
1298 | 2205 } |
2206 } | |
2207 } | |
2208 // 6BE3C5: using guessed type char bNoNPCHiring; | |
2209 | |
2210 //----- (004178FE) -------------------------------------------------------- | |
1507 | 2211 unsigned int UI_GetHealthManaAndOtherQualitiesStringColor(signed int current_pos, signed int base_pos) |
1298 | 2212 { |
1507 | 2213 unsigned __int16 R, G, B; |
1298 | 2214 |
1507 | 2215 if ( current_pos <= base_pos ) |
1298 | 2216 { |
1507 | 2217 if ( current_pos == base_pos )//White |
1298 | 2218 return 0; |
1507 | 2219 if ( 100 * current_pos / base_pos >= 25 )//Yellow( current_pos > 1/4 ) |
2220 R = 255, G = 255, B = 100; | |
2221 else//Red( current_pos < 1/4 ) | |
2222 R = 255, G = 0, B = 0; | |
1298 | 2223 } |
1507 | 2224 else//Green |
2225 R = 0, G = 255, B = 0; | |
2226 return TargetColor(R, G, B); | |
1298 | 2227 } |
2228 | |
2229 //----- (00417939) -------------------------------------------------------- | |
1458 | 2230 int GetConditionDrawColor(unsigned int uConditionIdx) |
1298 | 2231 { |
1458 | 2232 switch (uConditionIdx) |
1298 | 2233 { |
1458 | 2234 case Condition_Zombie: |
2235 case Condition_Good: | |
2236 return ui_character_condition_normal_color; | |
2237 | |
2238 case Condition_Cursed: | |
2239 case Condition_Weak: | |
2240 case Condition_Fear: | |
2241 case Condition_Drunk: | |
2242 case Condition_Insane: | |
2243 case Condition_Poison1: | |
2244 case Condition_Disease1: | |
2245 return ui_character_condition_light_color; | |
2246 | |
2247 case Condition_Sleep: | |
2248 case Condition_Poison2: | |
2249 case Condition_Disease2: | |
2250 case Condition_Paralyzed: | |
2251 case Condition_Unconcious: | |
2252 return ui_character_condition_moderate_color; | |
2253 | |
2254 case Condition_Poison3: | |
2255 case Condition_Disease3: | |
2256 case Condition_Dead: | |
2257 case Condition_Pertified: | |
2258 case Condition_Eradicated: | |
2259 return ui_character_condition_severe_color; | |
1298 | 2260 } |
1802 | 2261 Error("Invalid condition (%u)", uConditionIdx); |
1298 | 2262 } |