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