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