Mercurial > mm7
comparison GUI/UI/Books/UISpellBook.cpp @ 2501:0ff6a9e9bf7f
GUI folger
author | Ritor1 |
---|---|
date | Fri, 19 Sep 2014 04:21:12 +0600 |
parents | |
children | a77c34acdbc9 |
comparison
equal
deleted
inserted
replaced
2500:952025b157aa | 2501:0ff6a9e9bf7f |
---|---|
1 #define _CRT_SECURE_NO_WARNINGS | |
2 #include "..\..\..\Engine/MM7.h" | |
3 #include "..\..\..\Engine/Graphics/Render.h" | |
4 #include "..\..\..\Mouse.h" | |
5 #include "..\UIBooks.h" | |
6 #include "..\..\..\GUIWindow.h" | |
7 #include "..\..\..\GUIFont.h" | |
8 #include "..\..\..\Engine/Party.h" | |
9 #include "..\..\..\AudioPlayer.h" | |
10 #include "..\..\..\Engine/LOD.h" | |
11 #include "..\..\..\Engine/Graphics/Viewport.h" | |
12 #include "..\..\..\Engine/texts.h" | |
13 #include "..\..\..\Engine/mm7_data.h" | |
14 | |
15 std::array<char *, 9> spellbook_texture_filename_suffices = {{"f", "a", "w", "e", "s", "m", "b", "l", "d"}}; // weak | |
16 | |
17 //----- (00411300) -------------------------------------------------------- | |
18 void LoadSpellbook(unsigned int spell_school) | |
19 { | |
20 char pContainer[20]; // [sp+Ch] [bp-1Ch]@7 | |
21 | |
22 byte_506550 = 0; | |
23 if ( pPlayers[uActiveCharacter]->uQuickSpell && (unsigned __int8)pPlayers[uActiveCharacter]->uQuickSpell / 11 == spell_school ) | |
24 quick_spell_at_page = (unsigned __int8)pPlayers[uActiveCharacter]->uQuickSpell - 11 * spell_school; | |
25 else | |
26 quick_spell_at_page = 0; | |
27 | |
28 for (uint i = 1; i <= 11; ++i) | |
29 { | |
30 if (pPlayers[uActiveCharacter]->spellbook.pChapters[spell_school].bIsSpellAvailable[i - 1]) | |
31 { | |
32 sprintf(pContainer, "SB%sS%02d", spellbook_texture_filename_suffices[spell_school], pSpellbookSpellIndices[spell_school][i]); | |
33 SBPageSSpellsTextureList[i] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); | |
34 | |
35 sprintf(pContainer, "SB%sC%02d", spellbook_texture_filename_suffices[spell_school], pSpellbookSpellIndices[spell_school][i]); | |
36 SBPageCSpellsTextureList[i] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); | |
37 } | |
38 } | |
39 } | |
40 | |
41 //----- (00411597) -------------------------------------------------------- | |
42 void OnCloseBook() | |
43 { | |
44 free(pSpellFont); | |
45 pSpellFont = nullptr; | |
46 free(pBookFont); | |
47 pBookFont = nullptr; | |
48 free(pBook2Font); | |
49 pBook2Font = nullptr; | |
50 free(pAutonoteFont); | |
51 pAutonoteFont = nullptr; | |
52 pTexture_mapbordr->Release(); | |
53 pAudioPlayer->PlaySound(SOUND_CloseBook, 0, 0, -1, 0, 0, 0, 0); | |
54 pIcons_LOD->RemoveTexturesPackFromTextureList(); | |
55 dword_506364 = 0; | |
56 } | |
57 | |
58 //----- (00412AF9) -------------------------------------------------------- | |
59 static void BookUI_Spellbook_DrawCurrentSchoolBackground() | |
60 { | |
61 int pTexID = 0; | |
62 if ( uActiveCharacter ) | |
63 pTexID = pParty->pPlayers[uActiveCharacter - 1].lastOpenedSpellbookPage; | |
64 pRenderer->DrawTextureIndexed(8, 8, pSpellBookPagesTextr[pTexID]); | |
65 pRenderer->DrawTextureIndexed(476, 450, pSBQuickSpellBtnTextr); | |
66 pRenderer->DrawTextureIndexed(561, 450, pSpellBookCloseBtnTextr); | |
67 } | |
68 | |
69 //----- (00412B58) -------------------------------------------------------- | |
70 void DrawSpellBookContent(Player *player) | |
71 { | |
72 Texture *PendingTexture; // edi@1 | |
73 Texture *pTexture; // edx@5 | |
74 int v10; // eax@13 | |
75 unsigned int pX_coord; // esi@18 | |
76 unsigned int pY_coord; // edi@18 | |
77 Texture *pPageTexture; // eax@21 | |
78 // signed int v22; // [sp-4h] [bp-24h]@22 | |
79 POINT a2; // [sp+18h] [bp-8h]@13 | |
80 | |
81 static unsigned int texture_tab_coord1[9][2]= | |
82 {{406, 9}, {406, 46}, {406, 84}, {406,121}, {407,158}, {405, 196}, {405, 234}, {405, 272}, {405,309} }; | |
83 | |
84 static unsigned int texture_tab_coord0[9][2]= | |
85 {{415, 10}, {415, 46}, {415, 83}, {415,121}, {415,158}, {416, 196}, {416, 234}, {416, 271}, {416,307} }; | |
86 | |
87 BookUI_Spellbook_DrawCurrentSchoolBackground(); | |
88 | |
89 PendingTexture = pIcons_LOD->GetTexture(pIcons_LOD->FindTextureByName("Pending")); | |
90 pRenderer->ClearZBuffer(0, 479); | |
91 if ( (11 * player->lastOpenedSpellbookPage) || ((11 * player->lastOpenedSpellbookPage) + 11) )//??? maybe structure need fix | |
92 { | |
93 for ( uint i = 1; i <= 11; ++i ) | |
94 { | |
95 if (player->_achieved_awards_bits[(11 * player->lastOpenedSpellbookPage) + i + 63] ) | |
96 { | |
97 if ( SBPageSSpellsTextureList[i] != PendingTexture ) | |
98 { | |
99 if ( quick_spell_at_page == i ) | |
100 pTexture = SBPageCSpellsTextureList[i]; | |
101 else | |
102 pTexture = SBPageSSpellsTextureList[i]; | |
103 if ( pTexture->pLevelOfDetail0_prolly_alpha_mask ) | |
104 { | |
105 pX_coord = pViewport->uViewportTL_X + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Xpos; | |
106 pY_coord = pViewport->uViewportTL_Y + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Ypos; | |
107 if ( pTexture->pBits & 0x200 ) | |
108 pRenderer->DrawTextureTransparent(pX_coord, pY_coord, pTexture); | |
109 else | |
110 pRenderer->DrawTextureIndexed(pX_coord, pY_coord, pTexture); | |
111 pRenderer->DrawMaskToZBuffer(pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Xpos, | |
112 pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Ypos, pTexture, i); | |
113 } | |
114 } | |
115 } | |
116 } | |
117 } | |
118 | |
119 pMouse->GetCursorPos(&a2); | |
120 v10 = pRenderer->pActiveZBuffer[a2.x + pSRZBufferLineOffsets[a2.y]] & 0xFFFF; | |
121 if ( v10 ) | |
122 { | |
123 if ( SBPageCSpellsTextureList[v10]->pLevelOfDetail0_prolly_alpha_mask ) | |
124 { | |
125 pX_coord = pViewport->uViewportTL_X + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][v10]].Xpos; | |
126 pY_coord = pViewport->uViewportTL_Y + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][v10]].Ypos; | |
127 if ( SBPageCSpellsTextureList[v10]->pBits & 0x200 ) | |
128 pRenderer->DrawTextureTransparent(pX_coord, pY_coord, SBPageCSpellsTextureList[v10]); | |
129 else | |
130 pRenderer->DrawTextureIndexed(pX_coord, pY_coord, SBPageCSpellsTextureList[v10]); | |
131 } | |
132 } | |
133 //pX_coord = (unsigned int)&player->pActiveSkills[PLAYER_SKILL_FIRE]; | |
134 //pY_coord = (unsigned int)&player->pActiveSkills[PLAYER_SKILL_FIRE]; | |
135 for ( uint i = 0; i < 9; i++ ) | |
136 { | |
137 if ( player->pActiveSkills[PLAYER_SKILL_FIRE + i] ) | |
138 { | |
139 if ( player->lastOpenedSpellbookPage == i ) | |
140 { | |
141 pPageTexture = pTextures_tabs[i][1]; | |
142 pX_coord = texture_tab_coord1[i][0]; | |
143 pY_coord = texture_tab_coord1[i][1]; | |
144 } | |
145 else | |
146 { | |
147 pPageTexture = pTextures_tabs[i][0]; | |
148 pX_coord = texture_tab_coord0[i][0]; | |
149 pY_coord = texture_tab_coord0[i][1]; | |
150 } | |
151 pRenderer->DrawTextureTransparent(pX_coord, pY_coord, pPageTexture); | |
152 } | |
153 } | |
154 } |