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