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