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