comparison GUI/UI/UIArena.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 _CRTDBG_MAP_ALLOC
2 #include <stdlib.h>
3 #include <crtdbg.h>
4
5 #define _CRT_SECURE_NO_WARNINGS
6
7 #include "../../Engine/mm7_data.h"
8 #include "../../Engine/Graphics/Sprites.h"
9
10 #include "../../GUIWindow.h"
11 #include "../../GUIFont.h"
12 #include "../../Engine/Party.h"
13 #include "../../AudioPlayer.h"
14 #include "../../Engine/Graphics/Outdoor.h"
15 #include "../../Engine/LOD.h"
16 #include "../../Engine/Objects/Actor.h"
17 #include "../../Engine/Events.h"
18 #include "../../Engine/Graphics/Viewport.h"
19 #include "../../Engine/texts.h"
20 #include "../../Engine/MM7.h"
21
22 std::array<Vec2_int_, 20> pMonsterArenaPlacements =
23 {{
24 Vec2_int_(1524, 8332),
25 Vec2_int_(2186, 8844),
26 Vec2_int_(3219, 9339),
27 Vec2_int_(4500, 9339),
28 Vec2_int_(5323, 9004),
29 Vec2_int_(0x177D, 0x2098),
30 Vec2_int_(0x50B, 0x1E15),
31 Vec2_int_(0x18FF, 0x1E15),
32 Vec2_int_(0x50B, 0xD69),
33 Vec2_int_(0x18FF, 0x1B15),
34 Vec2_int_(0x50B, 0x1021),
35 Vec2_int_(0x18FF, 0x1848),
36 Vec2_int_(0x50B, 0x12D7),
37 Vec2_int_(0x18FF, 0x15A3),
38 Vec2_int_(0x50B, 0x14DB),
39 Vec2_int_(0x18FF, 0x12D7),
40 Vec2_int_(0x50B, 0x1848),
41 Vec2_int_(0x18FF, 0x1021),
42 Vec2_int_(0x50B, 0x1B15),
43 Vec2_int_(0x18FF, 0xD69),
44 }}
45 ;
46
47 //----- (004BBCDD) --------------------------------------------------------
48 void Arena_SelectionFightLevel()
49 {
50 signed int v0; // ebp@3
51 GUIButton *v5; // eax@18
52 GUIButton *v6; // esi@19
53
54 if ( pParty->field_7B5_in_arena_quest )
55 {
56 if ( pParty->field_7B5_in_arena_quest == -1 )
57 {
58 uDialogueType = DIALOGUE_ARENA_ALREADY_WON;
59 }
60 else
61 {
62 v0 = 0;
63 for (size_t i = 0; i < uNumActors; i++ )
64 {
65 if ( pActors[i].uAIState == Dead
66 || pActors[i].uAIState == Removed
67 || pActors[i].uAIState == Disabled
68 || pActors[i].uSummonerID != 0 && PID_TYPE(pActors[i].uSummonerID) == OBJECT_Player)
69 ++v0;
70 }
71 if ( v0 >= (signed int)uNumActors || (signed int)uNumActors <= 0)
72 {
73 uDialogueType = DIALOGUE_ARENA_REWARD;
74 ++*((char *)&pParty->monster_for_hunting_killed[3] + (unsigned __int8)pParty->field_7B5_in_arena_quest + 1);//Ritor1:I dont know
75 for ( uint i= 0; i < 4; i++ )
76 pParty->pPlayers[i].SetVariable(VAR_Award, (unsigned __int8)pParty->field_7B5_in_arena_quest + 3);
77 pParty->PartyFindsGold(gold_transaction_amount, 0);
78 pAudioPlayer->PlaySound(SOUND_Arena_Welcome, 0, 0, -1, 0, 0, 0, 0);
79 pParty->field_7B5_in_arena_quest = -1;
80 }
81 else
82 {
83 uDialogueType = DIALOGUE_ARENA_WELCOME;
84 pParty->vPosition.x = 3849;
85 pParty->vPosition.y = 5770;
86 pParty->vPosition.z = 1;
87 pParty->uFallStartY = 1;
88 pParty->sRotationY = 512;
89 pParty->sRotationX = 0;
90 pParty->uFallSpeed = 0;
91 pAudioPlayer->PlaySound(SOUND_Arena_Welcome, 0, 0, -1, 0, 0, 0, 0);
92 }
93 }
94 }
95 else
96 {
97 uDialogueType = DIALOGUE_ARENA_WELCOME;
98 v5 = pDialogueWindow->pControlsHead;
99 if ( v5 )
100 {
101 do
102 {
103 v6 = v5->pNext;
104 free(v5);
105 v5 = v6;
106 }
107 while ( v6 );
108 }
109 pDialogueWindow->pControlsHead = 0;
110 pDialogueWindow->pControlsTail = 0;
111 pDialogueWindow->uNumControls = 0;
112 pBtn_ExitCancel = pDialogueWindow->CreateButton(471, 445, 0xA9u, 0x23u, 1, 0, UIMSG_Escape, 0, 0,
113 pGlobalTXT_LocalizationStrings[79], //Close, Закрыть
114 pIcons_LOD->GetTexture(uExitCancelTextureId), 0);
115 pDialogueWindow->CreateButton(480, 160, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 85, 0, "", 0);
116 pDialogueWindow->CreateButton(480, 190, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 86, 0, "", 0);
117 pDialogueWindow->CreateButton(480, 220, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 87, 0, "", 0);
118 pDialogueWindow->CreateButton(480, 250, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 88, 0, "", 0);
119 pDialogueWindow->_41D08F_set_keyboard_control_group(4, 1, 0, 1);
120 }
121 }
122
123
124 //----- (004BC109) --------------------------------------------------------
125 void ArenaFight()
126 {
127 int v0; // edi@1
128 char *v1; // eax@7
129 int v3; // eax@10
130 signed int v4; // esi@10
131 signed int v6; // ebx@34
132 signed int v13; // eax@49
133 int v14; // esi@49
134 int v15; // edx@50
135 int v16; // eax@51
136 signed int v17; // ecx@51
137 int v18; // edx@53
138 int i; // edi@55
139 signed int v22; // [sp-4h] [bp-144h]@51
140 __int16 v23[100]; // [sp+Ch] [bp-134h]@39
141 GUIWindow window; // [sp+D4h] [bp-6Ch]@1
142 __int16 monster_ids[6]; // [sp+128h] [bp-18h]@56
143 int v26; // [sp+134h] [bp-Ch]@1
144 int num_monsters; // [sp+13Ch] [bp-4h]@17
145
146 v26 = 0;
147 pParty->field_7B5_in_arena_quest = uDialogueType;
148 memcpy(&window, pDialogueWindow, sizeof(window));
149 window.uFrameWidth = game_viewport_width;
150 window.uFrameZ = 452;
151 v0 = pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[575], &window, 13, 0) + 7;// Пожалуйста, подождите пока я вызываю существ. Удачи.
152 pRenderer->BeginSceneD3D();
153
154 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
155 pIndoor->Draw();
156 else if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
157 pOutdoor->Draw();
158
159 pRenderer->DrawBillboards_And_MaybeRenderSpecialEffects_And_EndScene();
160 pRenderer->BeginScene();
161 //if ( pRenderer->pRenderD3D )
162 pRenderer->FillRectFast(pViewport->uViewportTL_X, pViewport->uViewportTL_Y,
163 pViewport->uViewportBR_X - pViewport->uViewportTL_X,
164 pViewport->uViewportBR_Y - pViewport->uViewportTL_Y + 1,
165 0x7FF);
166
167 Texture* pTex = pIcons_LOD->GetTexture(uTextureID_Leather);
168 pRenderer->GetLeather(8, 352 - v0, pTex, pTex->uTextureHeight - v0);
169
170 pRenderer->DrawTextureIndexed(8, 347 - v0, pTexture_591428);
171 v1 = FitTextInAWindow(pGlobalTXT_LocalizationStrings[575], pFontArrus, &window, 0xDu, 0);//Пожалуйста, подождите пока я вызываю существ. Удачи.
172 pDialogueWindow->DrawText(pFontArrus, 13, 354 - v0, 0, v1, 0, 0, 0);
173 pRenderer->EndScene();
174 pRenderer->Present();
175 pParty->vPosition.x = 3849;
176 pParty->vPosition.y = 5770;
177 pParty->vPosition.z = 1;
178 pParty->uFallStartY = 1;
179 pParty->sRotationY = 512;
180 pParty->sRotationX = 0;
181 pParty->uFallSpeed = 0;
182 /*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
183 {
184 pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = UIMSG_Escape;
185 pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1;
186 *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
187 ++pMessageQueue_50CBD0->uNumMessages;
188 }*/
189 pMessageQueue_50CBD0->AddGUIMessage(UIMSG_Escape, 1, 0);
190 //v2 = pParty->pPlayers.data();
191 for ( uint i = 0; i < 4; i++ )
192 {
193 v3 = pParty->pPlayers[i].GetActualLevel();
194 v4 = v26;
195 if ( v3 > v26 )
196 {
197 v26 = pParty->pPlayers[i].GetActualLevel();
198 v4 = pParty->pPlayers[i].GetActualLevel();
199 }
200 //++v2;
201 }
202 //while ( (signed int)v2 < (signed int)pParty->pHirelings.data() );
203 if ( uDialogueType == DIALOGUE_ARENA_SELECT_PAGE )
204 {
205 num_monsters = v4;
206 v4 /= 2;
207 }
208 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_SQUIRE )
209 {
210 //v5 = (signed __int64)((double)v26 * 1.5);
211 num_monsters = (int)((double)v26 * 1.5);
212 v4 /= 2;
213 }
214 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_KNIGHT )
215 {
216 //LODWORD(v5) = 2 * v4;
217 num_monsters = 2 * v4;
218 v4 /= 2;
219 }
220 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_CHAMPION )
221 {
222 num_monsters = 2 * v4;
223 v4 /= 2;
224 }
225 if ( v4 < 1 )
226 v4 = 1;
227 if ( v4 > 100 )
228 v4 = 100;
229 if ( num_monsters > 100 )
230 num_monsters = 100;
231 if ( v4 < 2 )
232 v4 = 2;
233 if ( num_monsters < 2 )
234 num_monsters = 2;
235 v6 = 0;
236 //v27 = 1;
237 //v7 = (char *)&pMonsterStats->pInfos[1].uLevel;
238 for ( uint i = 1; i <= 258; i++ )
239 {
240 if ( pMonsterStats->pInfos[i].uAIType != 1 )//if ( v7[8] != 1 )
241 {
242 if ( !MonsterStats::BelongsToSupertype(pMonsterStats->pInfos[i].uID, MONSTER_SUPERTYPE_8) ) //!MonsterStats::BelongsToSupertype(*((short *)v7 + 22), MONSTER_SUPERTYPE_8)
243 {
244 //v8 = (unsigned __int8)pMonsterStats->pInfos[i].uLevel;
245 if ( pMonsterStats->pInfos[i].uLevel >= v4 )
246 {
247 if ( pMonsterStats->pInfos[i].uLevel <= num_monsters )
248 v23[v6++] = i;
249 }
250 }
251 }
252 // ++v27;
253 //v7 += 88;
254 }
255 //while ( (signed int)v7 <= (signed int)&pMonsterStats->pInfos[258].uLevel );
256 num_monsters = 6;
257 if ( v6 < 6 )
258 num_monsters = v6;
259 //v9 = 0;
260 if ( num_monsters > 0 )
261 {
262 for ( uint i = 0; i < num_monsters; i++ )
263 {
264 //v10 = rand();
265 //++v9;
266 //v12 = __OFSUB__(v9, num_monsters);
267 //v11 = v9 - num_monsters < 0;
268 //*((short *)&window.pControlsTail + v9 + 1) = v23[rand() % v6];
269 monster_ids[i] = v23[rand() % v6];
270 }
271 //while ( v11 ^ v12 );
272 }
273 if ( uDialogueType == DIALOGUE_ARENA_SELECT_PAGE )
274 {
275 v16 = rand();
276 v17 = 3;
277 v22 = 50;
278 v18 = v16 % v17;
279 v13 = v22;
280 v14 = v18 + 6;
281 }
282 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_SQUIRE )
283 {
284 v16 = rand();
285 v17 = 7;
286 v22 = 100;
287 v18 = v16 % v17;
288 v13 = v22;
289 v14 = v18 + 6;
290 }
291 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_KNIGHT )
292 {
293 v15 = rand() % 11;
294 v13 = 200;
295 v14 = v15 + 10;
296 }
297 else
298 {
299 if ( uDialogueType == DIALOGUE_ARENA_SELECT_CHAMPION )
300 {
301 v13 = 500;
302 v14 = 20;
303 }
304 //else
305 //{
306 //v14 = v27;
307 //v13 = gold_transaction_amount;
308 //}
309 }
310 gold_transaction_amount = v26 * v13;
311 for ( i = 0; i < v14; ++i )
312 Actor::Arena_summon_actor(monster_ids[rand() % num_monsters], pMonsterArenaPlacements[i].x, pMonsterArenaPlacements[i].y, 1);
313 pAudioPlayer->PlaySound(SOUND_Arena_Welcome, 0, 0, -1, 0, 0, 0, 0);
314 }