Mercurial > mm7
annotate mm7_2.cpp @ 2153:d28d3c006077
Some Render decoupling.
author | Nomad |
---|---|
date | Thu, 09 Jan 2014 02:34:20 +0200 |
parents | d44b7775fc06 |
children | 9bd7522cdbbb |
rev | line source |
---|---|
0 | 1 #include <io.h> |
2 #include <direct.h> | |
1545 | 3 |
4 #include "OSAPI.h" | |
1016 | 5 |
1262 | 6 #include "Texture.h" |
7 #include "mm7_data.h" | |
2152 | 8 #include "mm7_unsorted_subs.h" |
1016 | 9 #include "VideoPlayer.h" |
10 #include "Sprites.h" | |
11 #include "BSPModel.h" | |
12 | |
13 #include "LightmapBuilder.h" | |
14 #include "DecalBuilder.h" | |
15 #include "ParticleEngine.h" | |
16 #include "Mouse.h" | |
17 #include "Keyboard.h" | |
18 #include "CShow.h" | |
19 #include "GammaControl.h" | |
20 #include "stru6.h" | |
21 | |
1935 | 22 #include "Actor.h" |
1016 | 23 #include "Vis.h" |
0 | 24 #include "MapInfo.h" |
25 #include "Game.h" | |
26 #include "GUIWindow.h" | |
27 #include "GUIFont.h" | |
28 #include "Party.h" | |
29 #include "AudioPlayer.h" | |
30 #include "Outdoor.h" | |
1637 | 31 #include "Outdoor_stuff.h" |
0 | 32 #include "Overlays.h" |
33 #include "Arcomage.h" | |
34 #include "LOD.h" | |
35 #include "Actor.h" | |
36 #include "Events.h" | |
37 #include "Viewport.h" | |
38 #include "FrameTableInc.h" | |
2037
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
2035
diff
changeset
|
39 #include "OurMath.h" |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
496
diff
changeset
|
40 #include "SpriteObject.h" |
0 | 41 #include "ObjectList.h" |
42 #include "Chest.h" | |
43 #include "PaletteManager.h" | |
44 #include "DecorationList.h" | |
45 #include "SaveLoad.h" | |
46 #include "stru123.h" | |
522 | 47 #include "stru176.h" |
2044 | 48 #include "Timer.h" |
0 | 49 #include "IconFrameTable.h" |
50 #include "GUIProgressBar.h" | |
51 #include "Bink_Smacker.h" | |
52 #include "PlayerFrameTable.h" | |
53 #include "TurnEngine.h" | |
54 #include "FactionTable.h" | |
55 #include "StorylineTextTable.h" | |
56 #include "Random.h" | |
924 | 57 #include "CastSpellInfo.h" |
0 | 58 #include "stru298.h" |
59 #include "Events2D.h" | |
60 #include "Log.h" | |
1299 | 61 #include "UI\UIHouses.h" |
189 | 62 #include "texts.h" |
522 | 63 #include "MM7.h" |
1262 | 64 #include "Lights.h" |
1815 | 65 #include "NewUI/MainMenu.h" |
1828
35c1e4ff6ba7
party_finds_gold to Party::PartyFindsGold, cleaned up, moved Level/Decoration.h reference out of Indoor.h
Grumpy7
parents:
1826
diff
changeset
|
66 #include "Level/Decoration.h" |
2052 | 67 #include "LuaVM.h" |
68 | |
69 //#include "lib/lua/lua.h" | |
2033 | 70 |
1913 | 71 int __stdcall aWinProc(HWND hWnd, UINT Msg, WPARAM wParam, unsigned int lParam); |
72 int __stdcall InsertMM7CDDialogFunc(HWND hDlg, int a2, __int16 a3, int a4); | |
73 bool __fastcall FindMM7CD(HWND hWnd, char *pCDDrive); | |
74 bool __fastcall Initialize(HINSTANCE hInst, char *pCmdLine); | |
75 | |
76 //----- (004A1780) mm6_chinese--------------------------------------------- | |
77 __int64 fixpoint_div(int a1, int a2) | |
78 { | |
79 return ((__int64)a1 << 16) / a2; | |
80 } | |
81 | |
82 __int64 fixpoint_sub_unknown(int a1, int a2) | |
83 { | |
84 return (((__int64)a1 << 16) * a2) >> 16; | |
85 } | |
86 | |
87 //----- (0042EBBE) -------------------------------------------------------- | |
88 //----- (004453C0) mm6----------------------------------------------------- | |
89 //----- (004A1760) mm6_chinese--------------------------------------------- | |
90 __int64 fixpoint_mul(int a1, int a2) | |
91 { | |
92 return ((__int64)a1 * (__int64)a2) >> 16; | |
93 } | |
94 | |
95 __int64 fixpoint_dot(int x1, int x2, int y1, int y2, int z1, int z2) | |
96 { | |
97 return fixpoint_mul(x1, x2) + | |
98 fixpoint_mul(y1, y2) + | |
99 fixpoint_mul(z1, z2); | |
100 } | |
101 | |
0 | 102 //----- (004BB756) -------------------------------------------------------- |
1413 | 103 int UseNPCSkill(NPCProf profession) |
0 | 104 { |
1413 | 105 switch (profession) |
106 { | |
107 case Healer: | |
108 { | |
109 for (int i = 0; i < 4; ++i) | |
110 pParty->pPlayers[i].sHealth = pParty->pPlayers[i].GetMaxHealth(); | |
111 } | |
112 break; | |
113 | |
114 case ExpertHealer: | |
115 { | |
116 for (int i = 0; i < 4; ++i) | |
117 { | |
1980 | 118 Player* player = &pParty->pPlayers[i]; |
1413 | 119 player->sHealth = player->GetMaxHealth(); |
120 | |
121 for (int j = 0; j < 14; ++j) | |
122 player->pConditions[i] = 0; | |
123 player->pConditions[18] = 0; | |
124 } | |
125 } | |
126 break; | |
127 | |
128 case MasterHealer: | |
129 { | |
130 for (int i = 0; i < 4; ++i) | |
131 { | |
1980 | 132 Player* player = &pParty->pPlayers[i]; |
1413 | 133 player->sHealth = player->GetMaxHealth(); |
134 | |
1980 | 135 int v5 = LODWORD(player->pConditions[19]);//*((int *)v4 - 32); |
136 int v6 = HIDWORD(player->pConditions[19]);//*((int *)v4 - 31); | |
1826 | 137 memset(player->pConditions.data(), 0, 0xA0u); |
1413 | 138 |
139 __debugbreak(); | |
140 *(int *)&player->pActiveSkills[8] = v5; | |
141 *(int *)&player->pActiveSkills[10] = v6; | |
142 } | |
143 } | |
144 break; | |
145 | |
146 case Cook: | |
147 { | |
148 if (pParty->uNumFoodRations >= 13) | |
149 return 1; | |
150 | |
151 Party::GiveFood(1); | |
152 } | |
153 break; | |
154 | |
155 case Chef: | |
156 { | |
157 if (pParty->uNumFoodRations >= 13) | |
158 return 1; | |
159 | |
160 if (pParty->uNumFoodRations == 13) | |
161 Party::GiveFood(1); | |
162 else | |
163 Party::GiveFood(2); | |
164 } | |
165 break; | |
166 | |
167 case WindMaster: | |
0 | 168 { |
1413 | 169 if (uCurrentlyLoadedLevelType == LEVEL_Indoor) |
170 { | |
171 ShowStatusBarString(pGlobalTXT_LocalizationStrings[494], 2); | |
172 pAudioPlayer->PlaySound(SOUND_203, 0, 0, -1, 0, 0, 0, 0); | |
173 } | |
174 else | |
175 { | |
1980 | 176 int v19 = pOtherOverlayList->_4418B1(10008, 203, 0, 65536); |
1413 | 177 pParty->pPartyBuffs[PARTY_BUFF_FLY].Apply(pParty->uTimePlayed + 60 * (256 * 2), 3, 1, v19, 0); |
178 pParty->pPartyBuffs[PARTY_BUFF_FLY].uFlags |= 1u; | |
179 pAudioPlayer->PlaySound(SOUND_11090, 0, 0, -1, 0, 0, 0, 0); | |
180 } | |
181 } | |
182 break; | |
183 | |
184 case WaterMaster: | |
185 { | |
1980 | 186 int v20 = pOtherOverlayList->_4418B1(10005, 201, 0, 65536); |
1413 | 187 pParty->pPartyBuffs[PARTY_BUFF_WATER_WALK].Apply(pParty->uTimePlayed + 60 * (256 * (2 + 1)), 3, 0, v20, 0); |
188 pParty->pPartyBuffs[PARTY_BUFF_WATER_WALK].uFlags |= 1u; | |
189 pAudioPlayer->PlaySound(SOUND_12040, 0, 0, -1, 0, 0, 0, 0); | |
190 } | |
191 break; | |
192 | |
193 case GateMaster: | |
194 { | |
195 pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 0, 0); | |
196 dword_50C9DC = 195; | |
197 ptr_50C9E0 = GetNPCData(sDialogue_SpeakingActorNPC_ID); | |
198 } | |
199 break; | |
200 | |
201 case Acolyte: _42777D_CastSpell_UseWand_ShootArrow(46, 0, 133, 0, 0); break; | |
202 case Piper: _42777D_CastSpell_UseWand_ShootArrow(51, 0, 133, 0, 0); break; | |
203 case FallenWizard: _42777D_CastSpell_UseWand_ShootArrow(86, 0, 133, 0, 0); break; | |
204 | |
205 case Teacher: | |
206 case Instructor: | |
207 case Armsmaster: | |
208 case Weaponsmaster: | |
209 case Apprentice: | |
210 case Mystic: | |
211 case Spellmaster: | |
212 case Trader: | |
213 case Merchant: | |
214 case Scout: | |
215 case Herbalist: | |
216 case Apothecary: | |
217 case Tinker: | |
218 case Locksmith: | |
219 case Fool: | |
220 case ChimneySweep: | |
221 case Porter: | |
222 case QuarterMaster: | |
223 case Factor: | |
224 case Banker: | |
225 case Horseman: | |
226 case Bard: | |
227 case Enchanter: | |
228 case Cartographer: | |
229 case Explorer: | |
230 case Pirate: | |
231 case Squire: | |
232 case Psychic: | |
233 case Gypsy: | |
234 case Diplomat: | |
235 case Duper: | |
236 case Burglar: | |
237 case Acolyte2: | |
238 case Initiate: | |
239 case Prelate: | |
240 case Monk: | |
241 case Sage: | |
242 case Hunter: | |
243 break; | |
244 | |
245 default: | |
246 assert(false && "Invalid enum value"); | |
247 } | |
248 return 0; | |
0 | 249 } |
250 | |
251 //----- (004BBA85) -------------------------------------------------------- | |
1529 | 252 void CheckBountyRespawnAndAward() |
0 | 253 { |
254 int i; // eax@2 | |
1529 | 255 int rand_monster_id; // edx@3 |
0 | 256 |
257 uDialogueType = 83; | |
258 pDialogueWindow->Release(); | |
259 pDialogueWindow = GUIWindow::Create(0, 0, 640, 350, WINDOW_MainMenu, 0, 0); | |
1529 | 260 pBtn_ExitCancel = pDialogueWindow->CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[34],// "Cancel" |
945 | 261 pIcons_LOD->GetTexture(uExitCancelTextureId), 0); |
832 | 262 pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_BuyInShop_Identify_Repair, 0, 0, "", 0); |
1529 | 263 pDialogueWindow->CreateButton(480, 160, 140, 30, 1, 0, UIMSG_0, 83, 0, "", 0); |
972 | 264 pDialogueWindow->_41D08F_set_keyboard_control_group(1, 1, 0, 2); |
747 | 265 dialog_menu_id = HOUSE_DIALOGUE_OTHER; |
1529 | 266 //get new monster for hunting |
1747
cecb080929c4
Party_stru0 renamed to PartyTimeStruct, fixed its members, renamed Party::field_3C to Party::PartyTimes, started Player::SetVariable refactoring start
Grumpy7
parents:
1736
diff
changeset
|
267 if ( pParty->PartyTimes.bountyHunting_next_generation_time[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] < (signed __int64)pParty->uTimePlayed ) |
1529 | 268 { |
269 pParty->monster_for_hunting_killed[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] = false; | |
1747
cecb080929c4
Party_stru0 renamed to PartyTimeStruct, fixed its members, renamed Party::field_3C to Party::PartyTimes, started Player::SetVariable refactoring start
Grumpy7
parents:
1736
diff
changeset
|
270 pParty->PartyTimes.bountyHunting_next_generation_time[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] = (signed __int64)((double)(0x12750000 * (pParty->uCurrentMonth + 12i64 * pParty->uCurrentYear - 14015)) * 0.033333335); |
0 | 271 for ( i = rand(); ; i = rand() ) |
272 { | |
1529 | 273 rand_monster_id = i % 258 + 1; |
274 pParty->monster_id_for_hunting[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] = rand_monster_id; | |
275 if ( (unsigned __int16)rand_monster_id < 0x73u || (unsigned __int16)rand_monster_id > 0x84u ) | |
0 | 276 { |
1529 | 277 if ( ((unsigned __int16)rand_monster_id < 0xEBu || (unsigned __int16)rand_monster_id > 0xFCu) |
278 && ((unsigned __int16)rand_monster_id < 0x85u || (unsigned __int16)rand_monster_id > 0x96u) | |
279 && ((unsigned __int16)rand_monster_id < 0x97u || (unsigned __int16)rand_monster_id > 0xBAu) | |
280 && ((unsigned __int16)rand_monster_id < 0xC4u || (unsigned __int16)rand_monster_id > 0xC6u) ) | |
0 | 281 break; |
282 } | |
283 } | |
284 } | |
1529 | 285 bountyHunting_monster_id_for_hunting = pParty->monster_id_for_hunting[(int)((char *)window_SpeakInHouse->ptr_1C - 102)]; |
286 if ( !pParty->monster_for_hunting_killed[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] ) | |
287 { | |
288 bountyHunting_text = pNPCTopics[351].pText; | |
289 if ( !pParty->monster_id_for_hunting[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] ) | |
290 bountyHunting_text = pNPCTopics[353].pText; | |
291 } | |
292 else//get prize | |
293 { | |
294 if ( pParty->monster_id_for_hunting[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] ) | |
0 | 295 { |
1828
35c1e4ff6ba7
party_finds_gold to Party::PartyFindsGold, cleaned up, moved Level/Decoration.h reference out of Indoor.h
Grumpy7
parents:
1826
diff
changeset
|
296 pParty->PartyFindsGold(100 * pMonsterStats->pInfos[(unsigned __int16)pParty->monster_id_for_hunting[(int)((char *)window_SpeakInHouse->ptr_1C - 102)]].uLevel, 0); |
1529 | 297 for ( uint i = 0; i < 4; ++i ) |
298 pParty->pPlayers[i].SetVariable(VAR_Award, 86); | |
299 pParty->uNumBountiesCollected += 100 * pMonsterStats->pInfos[pParty->monster_id_for_hunting[(int)((char *)window_SpeakInHouse->ptr_1C - 102)]].uLevel; | |
300 pParty->monster_id_for_hunting[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] = 0; | |
301 pParty->monster_for_hunting_killed[(int)((char *)window_SpeakInHouse->ptr_1C - 102)] = false; | |
0 | 302 } |
1529 | 303 bountyHunting_text = pNPCTopics[352].pText; |
304 } | |
0 | 305 } |
306 | |
307 //----- (004BBCDD) -------------------------------------------------------- | |
1914 | 308 void Arena_SelectionFightLevel() |
0 | 309 { |
310 signed int v0; // ebp@3 | |
90 | 311 Actor *v1; // eax@4 |
0 | 312 __int16 v2; // cx@5 |
313 int v3; // esi@8 | |
314 Player *v4; // esi@14 | |
315 GUIButton *v5; // eax@18 | |
316 GUIButton *v6; // esi@19 | |
317 size_t v7; // [sp+10h] [bp-4h]@4 | |
318 | |
319 if ( pParty->field_7B5_in_arena_quest ) | |
320 { | |
321 if ( pParty->field_7B5_in_arena_quest == -1 ) | |
322 { | |
323 uDialogueType = 92; | |
324 } | |
325 else | |
326 { | |
327 v0 = 0; | |
90 | 328 if ( (signed int)uNumActors > 0 ) |
329 { | |
1202 | 330 v1 = pActors.data();//[0].uAIState; |
90 | 331 v7 = uNumActors; |
332 do | |
333 { | |
334 v2 = v1->uAIState; | |
848 | 335 if ( v1->uAIState == Dead || v2 == Removed || v2 == Disabled || (v3 = v1->uSummonerID) != 0 && PID_TYPE(v3) == OBJECT_Player) |
90 | 336 ++v0; |
337 ++v1; | |
338 --v7; | |
339 } | |
340 while ( v7 ); | |
341 } | |
342 if ( v0 >= (signed int)uNumActors || (signed int)uNumActors <= 0) | |
343 { | |
0 | 344 uDialogueType = 91; |
1861
a86c60679949
changing most of party arrays to std::arrays, some minor cleanups in actor.cpp
Grumpy7
parents:
1842
diff
changeset
|
345 v4 = pParty->pPlayers.data(); |
1529 | 346 ++*((char *)&pParty->monster_for_hunting_killed[3] + (unsigned __int8)pParty->field_7B5_in_arena_quest + 1); |
0 | 347 do |
348 { | |
349 v4->SetVariable(VAR_Award, (unsigned __int8)pParty->field_7B5_in_arena_quest + 3); | |
350 ++v4; | |
351 } | |
1861
a86c60679949
changing most of party arrays to std::arrays, some minor cleanups in actor.cpp
Grumpy7
parents:
1842
diff
changeset
|
352 while ( (signed int)v4 < (signed int)pParty->pHirelings.data() ); |
1828
35c1e4ff6ba7
party_finds_gold to Party::PartyFindsGold, cleaned up, moved Level/Decoration.h reference out of Indoor.h
Grumpy7
parents:
1826
diff
changeset
|
353 pParty->PartyFindsGold(gold_transaction_amount, 0); |
0 | 354 pAudioPlayer->PlaySound((SoundID)14060, 0, 0, -1, 0, 0, 0, 0); |
355 pParty->field_7B5_in_arena_quest = -1; | |
356 } | |
357 else | |
358 { | |
359 uDialogueType = 90; | |
360 pParty->vPosition.x = 3849; | |
361 pParty->vPosition.y = 5770; | |
362 pParty->vPosition.z = 1; | |
363 pParty->uFallStartY = 1; | |
364 pParty->sRotationY = 512; | |
365 pParty->sRotationX = 0; | |
366 pParty->uFallSpeed = 0; | |
367 pAudioPlayer->PlaySound((SoundID)14060, 0, 0, -1, 0, 0, 0, 0); | |
368 } | |
369 } | |
370 } | |
371 else | |
372 { | |
373 uDialogueType = 89; | |
374 v5 = pDialogueWindow->pControlsHead; | |
375 if ( v5 ) | |
376 { | |
377 do | |
378 { | |
379 v6 = v5->pNext; | |
1583 | 380 free(v5); |
0 | 381 v5 = v6; |
382 } | |
383 while ( v6 ); | |
384 } | |
385 pDialogueWindow->pControlsHead = 0; | |
386 pDialogueWindow->pControlsTail = 0; | |
387 pDialogueWindow->uNumControls = 0; | |
832 | 388 pBtn_ExitCancel = pDialogueWindow->CreateButton(0x1D7u, 0x1BDu, 0xA9u, 0x23u, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79], |
945 | 389 pIcons_LOD->GetTexture(uExitCancelTextureId), 0); |
832 | 390 pDialogueWindow->CreateButton(0x1E0u, 0xA0u, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 0x55u, 0, "", 0); |
391 pDialogueWindow->CreateButton(0x1E0u, 0xBEu, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 0x56u, 0, "", 0); | |
392 pDialogueWindow->CreateButton(0x1E0u, 0xDCu, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 0x57u, 0, "", 0); | |
393 pDialogueWindow->CreateButton(0x1E0u, 0xFAu, 0x8Cu, 0x1Eu, 1, 0, UIMSG_SelectNPCDialogueOption, 0x58u, 0, "", 0); | |
972 | 394 pDialogueWindow->_41D08F_set_keyboard_control_group(4, 1, 0, 1); |
0 | 395 } |
396 } | |
397 | |
398 //----- (004BC109) -------------------------------------------------------- | |
1458 | 399 void ArenaFight() |
0 | 400 { |
401 int v0; // edi@1 | |
402 char *v1; // eax@7 | |
403 Player *v2; // edi@9 | |
404 int v3; // eax@10 | |
405 signed int v4; // esi@10 | |
2135 | 406 //signed __int64 v5; // qax@18 |
0 | 407 signed int v6; // ebx@34 |
2135 | 408 //char *v7; // edi@34 |
0 | 409 int v8; // eax@37 |
2135 | 410 //int v9; // esi@43 |
411 //int v10; // eax@44 | |
0 | 412 unsigned __int8 v11; // sf@44 |
413 unsigned __int8 v12; // of@44 | |
414 signed int v13; // eax@49 | |
415 int v14; // esi@49 | |
416 int v15; // edx@50 | |
417 int v16; // eax@51 | |
418 signed int v17; // ecx@51 | |
419 int v18; // edx@53 | |
420 int i; // edi@55 | |
421 int monster_y; // ST18_4@56 | |
422 int v21; // eax@56 | |
423 signed int v22; // [sp-4h] [bp-144h]@51 | |
424 __int16 v23[100]; // [sp+Ch] [bp-134h]@39 | |
425 GUIWindow window; // [sp+D4h] [bp-6Ch]@1 | |
426 __int16 monster_ids[6]; // [sp+128h] [bp-18h]@56 | |
427 int v26; // [sp+134h] [bp-Ch]@1 | |
2135 | 428 //int v27; // [sp+138h] [bp-8h]@23 |
0 | 429 int num_monsters; // [sp+13Ch] [bp-4h]@17 |
430 | |
431 v26 = 0; | |
432 pParty->field_7B5_in_arena_quest = uDialogueType; | |
433 memcpy(&window, pDialogueWindow, sizeof(window)); | |
819 | 434 window.uFrameWidth = game_viewport_width; |
0 | 435 window.uFrameZ = 452; |
436 v0 = pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[575], &window, 13, 0) + 7; | |
437 pRenderer->BeginSceneD3D(); | |
438 | |
439 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) | |
440 pIndoor->Draw(); | |
441 else if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) | |
2135 | 442 pOutdoor->Draw(); |
0 | 443 |
444 pRenderer->DrawBillboards_And_MaybeRenderSpecialEffects_And_EndScene(); | |
445 pRenderer->BeginScene(); | |
446 if ( pRenderer->pRenderD3D ) | |
2135 | 447 pRenderer->FillRectFast(pViewport->uViewportTL_X, pViewport->uViewportTL_Y, pViewport->uViewportBR_X - pViewport->uViewportTL_X, |
448 pViewport->uViewportBR_Y - pViewport->uViewportTL_Y + 1, pRenderer->uTargetGMask | pRenderer->uTargetBMask); | |
0 | 449 |
1980 | 450 Texture* pTex = pIcons_LOD->GetTexture(uTextureID_Leather); |
1496 | 451 pRenderer->GetLeather(8, 352 - v0, pTex, pTex->uTextureHeight - v0); |
0 | 452 |
2135 | 453 pRenderer->DrawTextureIndexed(8, 347 - v0, pTexture_591428); |
454 v1 = FitTextInAWindow(pGlobalTXT_LocalizationStrings[575], pFontArrus, &window, 0xDu, 0);//Ïîæàëóéñòà, ïîäîæäèòå ïîêà ÿ âûçûâàþ ñóùåñòâ. Óäà÷è. | |
0 | 455 pDialogueWindow->DrawText(pFontArrus, 13, 354 - v0, 0, v1, 0, 0, 0); |
456 pRenderer->EndScene(); | |
457 pRenderer->Present(); | |
458 pParty->vPosition.x = 3849; | |
459 pParty->vPosition.y = 5770; | |
460 pParty->vPosition.z = 1; | |
461 pParty->uFallStartY = 1; | |
462 pParty->sRotationY = 512; | |
463 pParty->sRotationX = 0; | |
464 pParty->uFallSpeed = 0; | |
437 | 465 /*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 ) |
0 | 466 { |
990 | 467 pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = UIMSG_Escape; |
0 | 468 pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1; |
469 *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0; | |
470 ++pMessageQueue_50CBD0->uNumMessages; | |
437 | 471 }*/ |
472 pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0); | |
2135 | 473 //v2 = pParty->pPlayers.data(); |
474 for ( uint i = 0; i < 4; i++ ) | |
0 | 475 { |
2135 | 476 v3 = pParty->pPlayers[i].GetActualLevel(); |
0 | 477 v4 = v26; |
478 if ( v3 > v26 ) | |
479 { | |
2135 | 480 v26 = pParty->pPlayers[i].GetActualLevel(); |
481 v4 = pParty->pPlayers[i].GetActualLevel(); | |
0 | 482 } |
2135 | 483 //++v2; |
0 | 484 } |
2135 | 485 //while ( (signed int)v2 < (signed int)pParty->pHirelings.data() ); |
486 if ( uDialogueType == DIALOGUE_ARENA_SELECT_PAGE ) | |
0 | 487 { |
488 num_monsters = v4; | |
1416 | 489 v4 /= 2; |
490 } | |
2135 | 491 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_SQUIRE ) |
0 | 492 { |
2135 | 493 //v5 = (signed __int64)((double)v26 * 1.5); |
494 num_monsters = (int)((double)v26 * 1.5); | |
1416 | 495 v4 /= 2; |
496 } | |
2135 | 497 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_KNIGHT ) |
0 | 498 { |
2135 | 499 //LODWORD(v5) = 2 * v4; |
500 num_monsters = 2 * v4; | |
0 | 501 v4 /= 2; |
1416 | 502 } |
2135 | 503 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_CHAMPION ) |
1416 | 504 { |
2135 | 505 num_monsters = 2 * v4; |
506 v4 /= 2; | |
1416 | 507 } |
0 | 508 if ( v4 < 1 ) |
509 v4 = 1; | |
510 if ( v4 > 100 ) | |
511 v4 = 100; | |
512 if ( num_monsters > 100 ) | |
513 num_monsters = 100; | |
514 if ( v4 < 2 ) | |
515 v4 = 2; | |
516 if ( num_monsters < 2 ) | |
517 num_monsters = 2; | |
518 v6 = 0; | |
2135 | 519 //v27 = 1; |
520 //v7 = (char *)&pMonsterStats->pInfos[1].uLevel; | |
521 for ( uint i = 1; i <= 258; i++ ) | |
0 | 522 { |
2135 | 523 if ( pMonsterStats->pInfos[i].uAIType != 1 )//if ( v7[8] != 1 ) |
0 | 524 { |
2135 | 525 if ( !MonsterStats::BelongsToSupertype(pMonsterStats->pInfos[i].uID, MONSTER_SUPERTYPE_8) ) //!MonsterStats::BelongsToSupertype(*((short *)v7 + 22), MONSTER_SUPERTYPE_8) |
0 | 526 { |
2135 | 527 //v8 = (unsigned __int8)pMonsterStats->pInfos[i].uLevel; |
528 if ( pMonsterStats->pInfos[i].uLevel >= v4 ) | |
0 | 529 { |
2135 | 530 if ( pMonsterStats->pInfos[i].uLevel <= num_monsters ) |
531 v23[v6++] = i; | |
0 | 532 } |
533 } | |
534 } | |
2135 | 535 // ++v27; |
536 //v7 += 88; | |
0 | 537 } |
2135 | 538 //while ( (signed int)v7 <= (signed int)&pMonsterStats->pInfos[258].uLevel ); |
0 | 539 num_monsters = 6; |
540 if ( v6 < 6 ) | |
541 num_monsters = v6; | |
2135 | 542 //v9 = 0; |
0 | 543 if ( num_monsters > 0 ) |
544 { | |
2135 | 545 for ( uint i = 0; i < num_monsters; i++ ) |
0 | 546 { |
2135 | 547 //v10 = rand(); |
548 //++v9; | |
549 //v12 = __OFSUB__(v9, num_monsters); | |
550 //v11 = v9 - num_monsters < 0; | |
551 //*((short *)&window.pControlsTail + v9 + 1) = v23[rand() % v6]; | |
552 monster_ids[i] = v23[rand() % v6]; | |
0 | 553 } |
2135 | 554 //while ( v11 ^ v12 ); |
0 | 555 } |
2135 | 556 if ( uDialogueType == DIALOGUE_ARENA_SELECT_PAGE ) |
0 | 557 { |
558 v16 = rand(); | |
559 v17 = 3; | |
560 v22 = 50; | |
1416 | 561 v18 = v16 % v17; |
562 v13 = v22; | |
563 v14 = v18 + 6; | |
564 } | |
2135 | 565 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_SQUIRE ) |
0 | 566 { |
567 v16 = rand(); | |
568 v17 = 7; | |
569 v22 = 100; | |
570 v18 = v16 % v17; | |
571 v13 = v22; | |
572 v14 = v18 + 6; | |
1416 | 573 } |
2135 | 574 else if ( uDialogueType == DIALOGUE_ARENA_SELECT_KNIGHT ) |
0 | 575 { |
576 v15 = rand() % 11; | |
577 v13 = 200; | |
578 v14 = v15 + 10; | |
579 } | |
580 else | |
581 { | |
2135 | 582 if ( uDialogueType == DIALOGUE_ARENA_SELECT_CHAMPION ) |
0 | 583 { |
584 v13 = 500; | |
585 v14 = 20; | |
586 } | |
2135 | 587 //else |
588 //{ | |
589 //v14 = v27; | |
590 //v13 = gold_transaction_amount; | |
591 //} | |
0 | 592 } |
2135 | 593 gold_transaction_amount = v26 * v13; |
594 for ( i = 0; i < v14; ++i ) | |
0 | 595 { |
2135 | 596 //monster_y = pMonsterArenaPlacements[i].y; |
597 //v21 = rand(); | |
598 Actor::_4BBF61_summon_actor(monster_ids[rand() % num_monsters], pMonsterArenaPlacements[i].x, pMonsterArenaPlacements[i].y, 1); | |
0 | 599 } |
600 pAudioPlayer->PlaySound((SoundID)14060, 0, 0, -1, 0, 0, 0, 0); | |
601 } | |
602 | |
603 //----- (004BD8B5) -------------------------------------------------------- | |
1919 | 604 int HouseDialogPressCloseBtn() |
0 | 605 { |
606 if ( pMessageQueue_50CBD0->uNumMessages ) | |
607 pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; | |
1459 | 608 pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_CANCELLED); |
0 | 609 pKeyActionMap->ResetKeys(); |
520
35f28d4c0ff9
GlobalEventInfo changed to LevelDecoration* activeLevelDecoration
Gloval
parents:
519
diff
changeset
|
610 activeLevelDecoration = NULL; |
827 | 611 current_npc_text = 0; |
1917 | 612 if ( pDialogueNPCCount == 0) |
1919 | 613 return 0; |
614 | |
615 if ( dialog_menu_id == HOUSE_DIALOGUE_SHOP_BUY_SPECIAL && ShopTexture ) | |
0 | 616 { |
1919 | 617 ShopTexture->Release(); |
1917 | 618 ShopTexture = 0; |
619 } | |
620 | |
1919 | 621 switch(dialog_menu_id) |
1917 | 622 { |
1919 | 623 case -1: |
624 _4B4224_UpdateNPCTopics((int)((char *)pDialogueNPCCount - 1)); | |
625 pVideoPlayer->_4BF5B2(); | |
626 break; | |
627 | |
628 case HOUSE_DIALOGUE_SHOP_DISPLAY_EQUIPMENT: | |
629 case HOUSE_DIALOGUE_LEARN_SKILLS: | |
630 case HOUSE_DIALOGUE_TAVERN_ARCOMAGE_MAIN: | |
631 pVideoPlayer->_4BF5B2(); | |
632 UI_CreateEndConversationButton(); | |
633 dialog_menu_id = HOUSE_DIALOGUE_MAIN; | |
634 InitializaDialogueOptions(in_current_building_type); | |
635 break; | |
636 | |
637 case HOUSE_DIALOGUE_SHOP_SELL: | |
638 case HOUSE_DIALOGUE_SHOP_IDENTIFY: | |
639 case HOUSE_DIALOGUE_SHOP_REPAIR: | |
640 UI_CreateEndConversationButton(); | |
641 dialog_menu_id = HOUSE_DIALOGUE_SHOP_DISPLAY_EQUIPMENT; | |
642 InitializaDialogueOptions_Shops(in_current_building_type); | |
643 break; | |
644 | |
645 case HOUSE_DIALOGUE_TAVERN_ARCOMAGE_RULES: | |
646 case HOUSE_DIALOGUE_TAVERN_ARCOMAGE_VICTORY_CONDITIONS: | |
647 case HOUSE_DIALOGUE_TAVERN_ARCOMAGE_RESULT: | |
648 pVideoPlayer->_4BF5B2(); | |
649 UI_CreateEndConversationButton(); | |
650 dialog_menu_id = HOUSE_DIALOGUE_TAVERN_ARCOMAGE_MAIN; | |
651 InitializaDialogueOptions_Tavern(in_current_building_type); | |
652 break; | |
653 | |
654 case HOUSE_DIALOGUE_NULL: | |
655 case HOUSE_DIALOGUE_MAIN: | |
656 pDialogueNPCCount = 0; | |
657 pDialogueWindow->Release(); | |
658 dialog_menu_id = HOUSE_DIALOGUE_NULL; | |
659 pDialogueWindow = 0; | |
660 pIcons_LOD->SyncLoadedFilesCount(); | |
661 | |
662 if ( uNumDialogueNPCPortraits == 1 ) | |
663 return 0; | |
664 | |
665 pBtn_ExitCancel = window_SpeakInHouse->pControlsHead; | |
666 if ( uNumDialogueNPCPortraits > 0 ) | |
667 { | |
668 for ( uint i = 0; i < (unsigned int)uNumDialogueNPCPortraits; ++i ) | |
669 { | |
670 HouseNPCPortraitsButtonsList[i] = window_SpeakInHouse->CreateButton(pNPCPortraits_x[uNumDialogueNPCPortraits - 1][i], | |
671 pNPCPortraits_y[uNumDialogueNPCPortraits - 1][i], | |
672 63, 73, 1, 0, UIMSG_ClickHouseNPCPortrait, i, 0, byte_591180[i].data(), 0, 0, 0); | |
673 } | |
674 } | |
675 | |
676 pVideoPlayer->_4BF5B2(); | |
677 break; | |
678 | |
679 default: | |
680 pVideoPlayer->_4BF5B2(); | |
681 dialog_menu_id = HOUSE_DIALOGUE_MAIN; | |
682 InitializaDialogueOptions(in_current_building_type); | |
683 break; | |
0 | 684 } |
1917 | 685 return 1; |
0 | 686 } |
687 | |
688 //----- (004BF91E) -------------------------------------------------------- | |
2061 | 689 unsigned int GameOverMenu(void *ecx0) |
0 | 690 { |
1838 | 691 const char *v1; // eax@2 |
0 | 692 unsigned int result; // eax@3 |
89 | 693 Player *v3; // eax@7 |
1838 | 694 const char *v4; // ST24_4@9 |
0 | 695 int v5; // eax@9 |
1838 | 696 const char *v6; // eax@10 |
697 const char *v7; // edx@10 | |
698 const char *v8; // ecx@12 | |
699 const char *v9; // eax@14 | |
0 | 700 unsigned int v10; // eax@25 |
701 GUIWindow pWindow; // [sp+34h] [bp-9Ch]@1 | |
1532 | 702 //MSG Msg; // [sp+88h] [bp-48h]@22 |
0 | 703 unsigned int v14; // [sp+A4h] [bp-2Ch]@5 |
704 void *v15; // [sp+A8h] [bp-28h]@1 | |
1838 | 705 const char *pInString; // [sp+ACh] [bp-24h]@5 |
0 | 706 unsigned int v17; // [sp+B0h] [bp-20h]@5 |
707 unsigned int v18; // [sp+B4h] [bp-1Ch]@5 | |
708 unsigned int v19; // [sp+B8h] [bp-18h]@5 | |
709 int v20; // [sp+BCh] [bp-14h]@7 | |
89 | 710 Player *i; // [sp+C0h] [bp-10h]@7 |
0 | 711 GUIFont *pFont; // [sp+C4h] [bp-Ch]@1 |
712 unsigned __int64 v23; // [sp+C8h] [bp-8h]@5 | |
713 | |
714 v15 = ecx0; | |
715 | |
716 RGBTexture _this; // [sp+Ch] [bp-C4h]@1 | |
717 //RGBTexture::RGBTexture(&this); | |
718 | |
2061 | 719 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_4000; |
0 | 720 bGameoverLoop = 1; |
721 pVideoPlayer->bStopBeforeSchedule = 0; | |
722 pAudioPlayer->StopChannels(-1, -1); | |
723 pRenderer->BeginScene(); | |
724 pRenderer->ClearBlack(); | |
725 pRenderer->EndScene(); | |
726 pRenderer->Present(); | |
165 | 727 pVideoPlayer->pResetflag = 0; |
484 | 728 _449B57_test_bit(pParty->_quest_bits, 99); |
0 | 729 _this.Load("winbg.pcx", 2); |
730 pRenderer->BeginScene(); | |
731 pRenderer->DrawTextureRGB(0, 0, &_this); | |
732 pRenderer->EndScene(); | |
733 free(_this.pPixels); | |
734 _this.pPixels = 0; | |
336 | 735 window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); |
0 | 736 pWindow.uFrameX = 75; |
737 pWindow.uFrameY = 60; | |
738 pWindow.uFrameWidth = 469; | |
739 pWindow.uFrameHeight = 338; | |
740 pWindow.uFrameZ = 543; | |
741 pWindow.uFrameW = 397; | |
180 | 742 pFont = LoadFont("endgame.fnt", "FONTPAL", NULL); |
1359
60cdc3eac407
_449B57_test_bit(pParty->_quest_bits, 99) and _449B57_test_bit(pParty->_quest_bits, 100) changed to Party::IsPartyGood, Party::IsPartyEvil, respectively
Grumpy7
parents:
1330
diff
changeset
|
743 if ( pParty->IsPartyGood() ) |
2133 | 744 v1 = pGlobalTXT_LocalizationStrings[675];//"Splendid job! With the activation of the Gate, a thousand worlds lie at your feet. Perhaps on one of them you will find the Ancients themselves, and return with the fruits their great civilization has to offer your world and your kingdom." |
0 | 745 else |
746 { | |
1359
60cdc3eac407
_449B57_test_bit(pParty->_quest_bits, 99) and _449B57_test_bit(pParty->_quest_bits, 100) changed to Party::IsPartyGood, Party::IsPartyEvil, respectively
Grumpy7
parents:
1330
diff
changeset
|
747 result = pParty->IsPartyEvil(); |
0 | 748 if ( !(short)result ) |
749 return result; | |
2133 | 750 v1 = pGlobalTXT_LocalizationStrings[676];//"Brilliant! The completion of the Heavenly Forge has provided enough Ancient weapons to crush all resistance to your plans. Soon the world will bow to your every whim! Still, you can't help but wonder what was beyond the Gate the other side was trying so hard to build." |
0 | 751 } |
752 pInString = v1; | |
753 v23 = pParty->uTimePlayed - 138240; | |
754 v19 = (unsigned int)((signed __int64)((double)(pParty->uTimePlayed - 138240) * 0.234375) / 60 / 60) / 0x18; | |
755 v14 = (unsigned int)((signed __int64)((double)(pParty->uTimePlayed - 138240) * 0.234375) / 60 / 60) / 0x18 / 0x1C / 0xC; | |
756 v18 = (unsigned int)((signed __int64)((double)(pParty->uTimePlayed - 138240) * 0.234375) / 60 / 60) / 0x18 / 0x1C % 0xC; | |
757 v17 = v19 % 0x1C; | |
758 if ( !v19 ) | |
759 v19 = 1; | |
760 pRenderer->BeginScene(); | |
2133 | 761 pWindow.DrawTitleText(pFont, 1, 0x23, 1, pGlobalTXT_LocalizationStrings[9], 3);//Congratulations! |
0 | 762 v23 = 0i64; |
763 v20 = 0; | |
2133 | 764 for ( uint i = 0; i < 4; i++ ) |
89 | 765 { |
2133 | 766 sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[129], pParty->pPlayers[i].pName, pParty->pPlayers[i].GetBaseLevel(), pClassNames[pParty->pPlayers[i].classType]);//%s the Level %u %s |
767 pWindow.DrawTitleText(pFont, 1, i * (LOBYTE(pFont->uFontHeight) - 2) + LOBYTE(pFont->uFontHeight) + 46, 1, pTmpBuf.data(), 3); | |
768 v23 += pParty->pPlayers[i].uExperience;//__PAIR__(*(int *)(i - 4), *(int *)(i - 8)); | |
0 | 769 } |
770 v23 = (signed __int64)v23 / v19; | |
2133 | 771 v6 = FitTextInAWindow(pInString, pFont, &pWindow, 0xC, 0); |
772 pWindow.DrawTitleText(pFont, 1, 5 * (LOBYTE(pFont->uFontHeight) + 11), 1, v6, 0); | |
773 strcpy(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[37]);//Total Time: | |
0 | 774 v7 = pGlobalTXT_LocalizationStrings[56]; |
775 if ( v17 != 1 ) | |
776 v7 = pGlobalTXT_LocalizationStrings[57]; | |
777 v8 = pGlobalTXT_LocalizationStrings[146]; | |
778 if ( v18 != 1 ) | |
779 v8 = pGlobalTXT_LocalizationStrings[148]; | |
780 v9 = pGlobalTXT_LocalizationStrings[245]; | |
781 if ( v14 != 1 ) | |
782 v9 = pGlobalTXT_LocalizationStrings[132]; | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
783 sprintf(pTmpBuf2.data(), " %lu %s, %lu %s, %lu %s ", v14, v9, v18, v8, v17, v7); |
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
784 strcat(pTmpBuf.data(), pTmpBuf2.data()); |
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
785 pWindow.DrawTitleText(pFont, 1u, pWindow.uFrameHeight - 2 * LOBYTE(pFont->uFontHeight) - 5, 1u, pTmpBuf.data(), 3u); |
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
786 sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[94], v23); |
2133 | 787 pWindow.DrawTitleText(pFont, 1, pWindow.uFrameHeight, 1u, pTmpBuf.data(), 3); |
2061 | 788 dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000; |
0 | 789 pRenderer->EndScene(); |
790 pRenderer->Present(); | |
2153 | 791 //if ( pRenderer->pRenderD3D ) |
0 | 792 pRenderer->pBeforePresentFunction(); |
2069 | 793 pRenderer->SaveWinnersCertificate("MM7_Win.Pcx"); |
1583 | 794 free(pFont); |
336 | 795 window_SpeakInHouse->Release(); |
796 window_SpeakInHouse = 0; | |
0 | 797 if ( v15 == (void *)2 ) |
798 { | |
799 result = pMessageQueue_50CBD0->uNumMessages; | |
800 } | |
801 else | |
802 { | |
803 LODWORD(v23) = GetTickCount() + 5000; | |
804 while ( (unsigned int)v23 > GetTickCount() ) | |
805 ; | |
1532 | 806 for (MSG msg; PeekMessage(&msg, 0, 0, 0, PM_REMOVE);) |
0 | 807 { |
1532 | 808 if (msg.message == WM_QUIT) |
0 | 809 Game_DeinitializeAndTerminate(0); |
1532 | 810 TranslateMessage(&msg); |
811 DispatchMessage(&msg); | |
0 | 812 } |
813 if ( pMessageQueue_50CBD0->uNumMessages ) | |
814 { | |
815 LOBYTE(v10) = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; | |
816 pMessageQueue_50CBD0->uNumMessages = v10; | |
817 } | |
818 pKeyActionMap->ResetKeys(); | |
819 pKeyActionMap->uLastKeyPressed = 0; | |
820 do | |
821 { | |
1532 | 822 for (MSG msg; PeekMessage(&msg, 0, 0, 0, PM_REMOVE);) |
0 | 823 { |
1532 | 824 if (msg.message == WM_QUIT) |
0 | 825 Game_DeinitializeAndTerminate(0); |
1532 | 826 TranslateMessage(&msg); |
827 DispatchMessage(&msg); | |
0 | 828 } |
829 } | |
830 while ( !pKeyActionMap->uLastKeyPressed ); | |
831 result = pMessageQueue_50CBD0->uNumMessages; | |
832 if ( pMessageQueue_50CBD0->uNumMessages ) | |
833 { | |
834 result = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; | |
835 pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; | |
836 } | |
837 } | |
838 if ( v15 ) | |
839 { | |
437 | 840 /*if ( (signed int)result < 40 ) |
841 { | |
842 pMessageQueue_50CBD0->pMessages[result].eType = UIMSG_Quit; | |
843 }*/ | |
844 pMessageQueue_50CBD0->AddMessage(UIMSG_Quit, 1, 0); | |
0 | 845 } |
846 else | |
847 { | |
437 | 848 pMessageQueue_50CBD0->AddMessage(UIMSG_ShowFinalWindow, 1, 0); |
849 /*if ( (signed int)result < 40 ) | |
850 { | |
851 pMessageQueue_50CBD0->pMessages[result].eType = UIMSG_C5; | |
0 | 852 pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1; |
853 result = 3 * pMessageQueue_50CBD0->uNumMessages + 3; | |
854 *(&pMessageQueue_50CBD0->uNumMessages + result) = 0; | |
855 ++pMessageQueue_50CBD0->uNumMessages; | |
437 | 856 }*/ |
0 | 857 } |
858 bGameoverLoop = 0; | |
859 return result; | |
860 } | |
861 | |
1391
cc9a3a24d61d
Moved stru11, stru12 and some SW Rendering stuff to the archives.
Nomad
parents:
1359
diff
changeset
|
862 |
cc9a3a24d61d
Moved stru11, stru12 and some SW Rendering stuff to the archives.
Nomad
parents:
1359
diff
changeset
|
863 |
cc9a3a24d61d
Moved stru11, stru12 and some SW Rendering stuff to the archives.
Nomad
parents:
1359
diff
changeset
|
864 |
0 | 865 //----- (00451007) -------------------------------------------------------- |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
866 int stru350::sub_451007_scale_image_bicubic(unsigned short *pSrc, int srcWidth, int srcHeight, int srcPitch, //changing this to some library function might be a good idea |
0 | 867 unsigned short *pDst, int dstWidth, int dstHeight, int dstPitch, |
868 int a10, int a11) | |
869 { | |
870 int result; // eax@1 | |
871 float v17; // ST3C_4@12 | |
872 float v18; // ST38_4@12 | |
873 unsigned int v19; // esi@12 | |
874 int v21; // eax@18 | |
875 unsigned int v22; // ecx@25 | |
876 unsigned int v23; // eax@29 | |
1146
b4ade2580ae3
sub_451007_scale_image_bicubic cleanup - some variable renaming, code shuffling
Grumpy7
parents:
1145
diff
changeset
|
877 unsigned int heightRatioPlusOne; // [sp+Ch] [bp-7Ch]@12 |
b4ade2580ae3
sub_451007_scale_image_bicubic cleanup - some variable renaming, code shuffling
Grumpy7
parents:
1145
diff
changeset
|
878 unsigned int widthRatio; // [sp+Ch] [bp-7Ch]@218 |
b4ade2580ae3
sub_451007_scale_image_bicubic cleanup - some variable renaming, code shuffling
Grumpy7
parents:
1145
diff
changeset
|
879 unsigned int heightRatio; // [sp+14h] [bp-74h]@12 |
b4ade2580ae3
sub_451007_scale_image_bicubic cleanup - some variable renaming, code shuffling
Grumpy7
parents:
1145
diff
changeset
|
880 unsigned int widthRatioPlusOne; // [sp+14h] [bp-74h]@218 |
0 | 881 int v160; // [sp+3Ch] [bp-4Ch]@13 |
882 unsigned __int16 *v175; // [sp+4Ch] [bp-3Ch]@13 | |
883 unsigned __int16 *v193; // [sp+5Ch] [bp-2Ch]@7 | |
884 signed int v231; // [sp+78h] [bp-10h]@7 | |
885 __int64 v240; // [sp+7Ch] [bp-Ch]@12 | |
886 unsigned int v251; // [sp+80h] [bp-8h]@218 | |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
887 unsigned int v252; // [sp+84h] [bp-4h]@218 |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
888 float a6s; // [sp+A0h] [bp+18h]@218 |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
889 float a6t; // [sp+A0h] [bp+18h]@218 |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
890 unsigned int a6b; // [sp+A0h] [bp+18h]@218 |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
891 int field_0_bits; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
892 int field_20_bits; |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
893 |
1146
b4ade2580ae3
sub_451007_scale_image_bicubic cleanup - some variable renaming, code shuffling
Grumpy7
parents:
1145
diff
changeset
|
894 int field0value = this->field_0.field_C; |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
895 switch(field0value) |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
896 { |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
897 case 8: field_0_bits = 1; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
898 break; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
899 case 16: field_0_bits = 2; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
900 break; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
901 case 32: field_0_bits = 4; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
902 break; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
903 default: |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
904 return field0value; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
905 } |
1144
f544cd6f7168
sub_451007_scale_image_bicubic cleanup - preparations for further condition body extractions
Grumpy7
parents:
1140
diff
changeset
|
906 int field20value = this->field_20.field_C; |
f544cd6f7168
sub_451007_scale_image_bicubic cleanup - preparations for further condition body extractions
Grumpy7
parents:
1140
diff
changeset
|
907 switch(field20value) |
1129
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
908 { |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
909 case 8: field_20_bits = 1; |
1129
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
910 break; |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
911 case 16: field_20_bits = 2; |
1129
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
912 break; |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
913 case 32: field_20_bits = 4; |
1129
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
914 break; |
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
915 default: |
1144
f544cd6f7168
sub_451007_scale_image_bicubic cleanup - preparations for further condition body extractions
Grumpy7
parents:
1140
diff
changeset
|
916 return field20value; |
1129
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
917 } |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
918 |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
919 result = (int)pDst; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
920 v193 = pDst; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
921 v231 = 0; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
922 if ( dstHeight <= 0 ) |
1129
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
923 return result; |
1600
0016b08ab621
stru350::sub_451007_scale_image_bicubic - fixing a memory access bug
Grumpy7
parents:
1546
diff
changeset
|
924 |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
925 do |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
926 { |
1149
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
927 for (int counter = 0; counter < dstWidth; counter++) |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
928 { |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
929 a6s = (double)counter / (double)dstWidth * (double)srcWidth; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
930 widthRatio = bankersRounding(a6s); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
931 a6t = (double)(counter + 1) / (double)dstWidth * (double)srcWidth; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
932 widthRatioPlusOne = bankersRounding(a6t); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
933 v17 = (double)v231 / (double)dstHeight * (double)srcHeight; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
934 heightRatio = bankersRounding(v17); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
935 v18 = (double)(v231 + 1) / (double)dstHeight * (double)srcHeight; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
936 heightRatioPlusOne = bankersRounding(v18); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
937 v251 = 0; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
938 v19 = (heightRatioPlusOne - heightRatio) * (widthRatioPlusOne - widthRatio); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
939 v252 = 0; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
940 a6b = 0; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
941 v240 = 0i64; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
942 |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
943 v175 = (unsigned short*)((char *)pSrc + field_0_bits * (widthRatio + srcPitch * heightRatio)); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
944 for (int heightDiff = 0; heightDiff < heightRatioPlusOne - heightRatio; heightDiff++) |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
945 { |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
946 int ratioDiff = widthRatioPlusOne - widthRatio; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
947 for(int i = 0; i < ratioDiff; i++) |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
948 { |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
949 if(field0value == 32) |
1600
0016b08ab621
stru350::sub_451007_scale_image_bicubic - fixing a memory access bug
Grumpy7
parents:
1546
diff
changeset
|
950 v21 = _450FB1(((int*)v175)[i]); |
1149
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
951 else if(field0value == 16) |
1600
0016b08ab621
stru350::sub_451007_scale_image_bicubic - fixing a memory access bug
Grumpy7
parents:
1546
diff
changeset
|
952 v21 = _450FB1(((_WORD*)v175)[i]); |
1901 | 953 else if (field0value == 8) |
1600
0016b08ab621
stru350::sub_451007_scale_image_bicubic - fixing a memory access bug
Grumpy7
parents:
1546
diff
changeset
|
954 v21 = _450FB1(((unsigned __int8*)v175)[i]); |
1149
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
955 v240 += ((unsigned int)v21 >> 24); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
956 a6b += BYTE2(v21); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
957 v252 += BYTE1(v21); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
958 v251 += (unsigned __int8)v21; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
959 } |
1901 | 960 if (field0value == 32) |
1149
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
961 v175 += 2 * srcPitch; |
1901 | 962 else if (field0value == 16) |
1149
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
963 v175 += srcPitch; |
1901 | 964 else if (field0value == 8) |
1149
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
965 v175 = (unsigned short*)((char *)v175 + 2 * srcPitch); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
966 } |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
967 v22 = (unsigned int)v240 / ((heightRatioPlusOne - heightRatio) * (widthRatioPlusOne - widthRatio)); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
968 if ( v19 ) |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
969 { |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
970 a6b /= v19; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
971 v252 /= v19; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
972 v251 /= v19; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
973 } |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
974 if ( v22 != 255 ) |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
975 v22 &= 0x7FFFFFFFu; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
976 v23 = _450F55(v251 | ((v252 | ((a6b | (v22 << 8)) << 8)) << 8)); |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
977 *(_DWORD *)v193 = v23; |
05b30ed00d7c
sub_451007_scale_image_bicubic cleanup - changing if+dowhile pair to for
Grumpy7
parents:
1148
diff
changeset
|
978 v193 = (unsigned __int16 *)((char *)v193 + field_20_bits); |
1148
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
979 } |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
980 v193 = (unsigned __int16 *)((char *)v193 + field_20_bits * (dstPitch - dstWidth)); |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
981 ++v231; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
982 result = v231; |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
983 } |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
984 while(v231 < dstHeight); |
ee6bccef32e8
sub_451007_scale_image_bicubic cleanup - final condition collapsing, remaining labels removed, etc
Grumpy7
parents:
1147
diff
changeset
|
985 return result; |
0 | 986 } |
987 | |
988 //----- (0044F57C) -------------------------------------------------------- | |
989 void SpawnEncounter(MapInfo *pMapInfo, SpawnPointMM7 *spawn, int a3, int a4, int a5) | |
990 { | |
991 //MapInfo *v5; // esi@1 | |
992 //SpawnPointMM7 *v6; // ebx@1 | |
993 int v7; // eax@2 | |
994 char v8; // zf@5 | |
995 int v9; // edi@9 | |
996 int v10; // eax@9 | |
997 int v11; // ecx@9 | |
998 int v12; // edx@9 | |
999 int v13; // eax@9 | |
1000 int v14; // eax@14 | |
1001 int v15; // ecx@14 | |
1002 int v16; // eax@19 | |
1003 int v17; // ecx@19 | |
1004 int v18; // esi@31 | |
1005 //int pPosX; // ecx@32 | |
1006 //int v20; // edx@32 | |
1007 //int v21; // eax@32 | |
1008 Actor *pMonster; // esi@35 | |
1009 int v23; // edx@36 | |
1010 signed int v24; // edi@36 | |
1011 int v25; // ecx@36 | |
1012 unsigned __int16 v26; // ax@47 | |
1013 MonsterDesc *v27; // edi@48 | |
1014 signed int v28; // eax@48 | |
1015 __int16 v29; // cx@50 | |
1016 __int16 v30; // ax@50 | |
1017 __int16 v31; // ax@50 | |
1018 int v32; // eax@50 | |
1019 int v33; // edi@50 | |
1020 int v34; // eax@50 | |
1021 int v35; // eax@50 | |
1022 int v36; // eax@50 | |
1023 int v37; // eax@51 | |
1024 int v38; // eax@52 | |
1025 int v39; // edi@52 | |
1026 std::string v40; // [sp-18h] [bp-100h]@60 | |
1027 void *v41; // [sp-14h] [bp-FCh]@50 | |
1028 //void *v42; // [sp-10h] [bp-F8h]@50 | |
1029 //size_t v43; // [sp-Ch] [bp-F4h]@50 | |
1030 const char *v44; // [sp-8h] [bp-F0h]@13 | |
1031 char *pTexture; // [sp-4h] [bp-ECh]@9 | |
1032 char Str[32]; // [sp+Ch] [bp-DCh]@60 | |
1033 char Str2[120]; // [sp+2Ch] [bp-BCh]@29 | |
1034 unsigned int uFaceID; // [sp+A4h] [bp-44h]@52 | |
1035 MonsterInfo *Src; // [sp+A8h] [bp-40h]@50 | |
1036 int v50; // [sp+ACh] [bp-3Ch]@47 | |
1037 char Source[32]; // [sp+B0h] [bp-38h]@20 | |
1038 int v52; // [sp+D0h] [bp-18h]@34 | |
1039 int v53; // [sp+D4h] [bp-14h]@34 | |
1040 int pSector; // [sp+D8h] [bp-10h]@32 | |
1041 int pPosX; // [sp+DCh] [bp-Ch]@32 | |
1042 int v56; // [sp+E0h] [bp-8h]@8 | |
1043 int v57; // [sp+E4h] [bp-4h]@1 | |
1044 | |
1045 //auto a2 = spawn; | |
1046 v57 = 0; | |
1047 //v5 = pMapInfo; | |
1048 //v6 = spawn; | |
1049 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) | |
1050 v7 = pOutdoor->ddm.field_C_alert; | |
1051 else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) | |
1052 v7 = pIndoor->dlv.field_C_alert; | |
1053 else | |
1054 v7 = 0; | |
1055 if (v7) | |
1056 v8 = (spawn->uAttributes & 1) == 0; | |
1057 else | |
1058 v8 = (spawn->uAttributes & 1) == 1; | |
1059 if (v8) | |
1060 return; | |
1061 //result = (void *)(spawn->uIndex - 1); | |
1062 v56 = 1; | |
1063 switch (spawn->uIndex - 1) | |
1064 { | |
1065 case 0u: | |
1066 v9 = pMapInfo->uEncounterMonster1AtLeast; | |
1067 v10 = rand(); | |
1068 v11 = pMapInfo->uEncounterMonster1AtMost; | |
1069 pTexture = pMapInfo->pEncounterMonster1Texture; | |
1070 v12 = v10 % (v11 - v9 + 1); | |
237 | 1071 v13 = pMapInfo->Dif_M1; |
1416 | 1072 v57 = v13; |
1073 v56 = v9 + v12; | |
1074 strcpy(Source, pTexture); | |
1075 break; | |
0 | 1076 case 3u: |
1077 pTexture = pMapInfo->pEncounterMonster1Texture; | |
1078 v44 = "%s A"; | |
1416 | 1079 sprintf(Source, v44, pTexture); |
1080 break; | |
0 | 1081 case 4u: |
1082 pTexture = pMapInfo->pEncounterMonster2Texture; | |
1083 v44 = "%s A"; | |
1416 | 1084 sprintf(Source, v44, pTexture); |
1085 break; | |
0 | 1086 case 5u: |
1087 pTexture = pMapInfo->pEncounterMonster3Texture; | |
1088 v44 = "%s A"; | |
1416 | 1089 sprintf(Source, v44, pTexture); |
1090 break; | |
0 | 1091 case 1u: |
1092 v9 = pMapInfo->uEncounterMonster2AtLeast; | |
1093 v14 = rand(); | |
1094 v15 = pMapInfo->uEncounterMonster2AtMost; | |
1095 pTexture = pMapInfo->pEncounterMonster2Texture; | |
1096 v12 = v14 % (v15 - v9 + 1); | |
237 | 1097 v13 = pMapInfo->Dif_M2; |
1416 | 1098 v57 = v13; |
1099 v56 = v9 + v12; | |
1100 strcpy(Source, pTexture); | |
1101 break; | |
0 | 1102 case 6u: |
1103 pTexture = pMapInfo->pEncounterMonster1Texture; | |
1104 v44 = "%s B"; | |
1416 | 1105 sprintf(Source, v44, pTexture); |
1106 break; | |
0 | 1107 case 7u: |
1108 pTexture = pMapInfo->pEncounterMonster2Texture; | |
1109 v44 = "%s B"; | |
1416 | 1110 sprintf(Source, v44, pTexture); |
1111 break; | |
0 | 1112 case 8u: |
1113 pTexture = pMapInfo->pEncounterMonster3Texture; | |
1114 v44 = "%s B"; | |
1416 | 1115 sprintf(Source, v44, pTexture); |
1116 break; | |
0 | 1117 case 2u: |
1118 v9 = pMapInfo->uEncounterMonster3AtLeast; | |
1119 v16 = rand(); | |
1120 v17 = pMapInfo->uEncounterMonster3AtMost; | |
1121 pTexture = pMapInfo->pEncounterMonster3Texture; | |
1122 v12 = v16 % (v17 - v9 + 1); | |
237 | 1123 v13 = pMapInfo->Dif_M3; |
0 | 1124 v57 = v13; |
1125 v56 = v9 + v12; | |
1126 strcpy(Source, pTexture); | |
1416 | 1127 break; |
0 | 1128 case 9u: |
1129 pTexture = pMapInfo->pEncounterMonster1Texture; | |
1130 v44 = "%s C"; | |
1416 | 1131 sprintf(Source, v44, pTexture); |
1132 break; | |
0 | 1133 case 0xAu: |
1134 pTexture = pMapInfo->pEncounterMonster2Texture; | |
1135 v44 = "%s C"; | |
1416 | 1136 sprintf(Source, v44, pTexture); |
1137 break; | |
0 | 1138 case 0xBu: |
1139 pTexture = pMapInfo->pEncounterMonster3Texture; | |
1140 v44 = "%s C"; | |
1141 sprintf(Source, v44, pTexture); | |
1142 break; | |
1143 default: | |
1144 return; | |
1145 } | |
1416 | 1146 if (Source[0] == '0') |
1147 return; | |
1148 v57 += a3; | |
1149 if ( v57 > 4 ) | |
1150 v57 = 4; | |
1151 strcpy(Str2, Source); | |
1152 if ( a4 ) | |
1153 v56 = a4; | |
1154 v18 = v56; | |
1155 if ( (signed int)(v56 + uNumActors) >= 500 ) | |
1156 return; | |
1157 pSector = 0; | |
1158 pPosX = spawn->vPosition.x; | |
1159 a4 = spawn->vPosition.y; | |
1160 a3 = spawn->vPosition.z; | |
1161 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) | |
1162 pSector = pIndoor->GetSector(spawn->vPosition.x, spawn->vPosition.y, spawn->vPosition.z); | |
1163 v53 = 0; | |
1164 v52 = (((uCurrentlyLoadedLevelType != LEVEL_Outdoor) - 1) & 0x40) + 64; | |
1165 if ( v18 <= 0 ) | |
1166 return; | |
0 | 1167 for (uint i = v53; i < v56; ++i) |
1168 { | |
1169 pMonster = &pActors[uNumActors]; | |
1170 pActors[uNumActors].Reset(); | |
1171 if ( v57 ) | |
1172 { | |
1173 v23 = rand() % 100; | |
1174 v24 = 3; | |
1175 v25 = (unsigned __int16)word_4E8152[3 * v57]; | |
1176 if ( v23 >= v25 ) | |
1177 { | |
1178 if ( v23 < v25 + (unsigned __int16)word_4E8152[3 * v57 + 1] ) | |
1179 v24 = 2; | |
1180 } | |
1181 else | |
1182 { | |
1183 v24 = 1; | |
1184 } | |
1185 if ( v24 == 1 ) | |
1186 { | |
1187 pTexture = Source; | |
1188 v44 = "%s A"; | |
1189 } | |
1190 else | |
1191 { | |
1192 if ( v24 == 2 ) | |
1193 { | |
1194 pTexture = Source; | |
1195 v44 = "%s B"; | |
1196 } | |
1197 else | |
1198 { | |
1199 if ( v24 != 3 ) | |
1416 | 1200 continue; |
0 | 1201 pTexture = Source; |
1202 v44 = "%s C"; | |
1203 } | |
1204 } | |
1205 sprintf(Str2, v44, pTexture); | |
1206 } | |
751 | 1207 v50 = pMonsterList->GetMonsterIDByName(Str2); |
0 | 1208 pTexture = Str2; |
751 | 1209 if ( (signed __int16)v50 == -1 ) |
0 | 1210 { |
1211 sprintf(Str, "Can't create random monster: '%s'! See MapStats.txt and Monsters.txt!", pTexture); | |
1212 MessageBoxA(nullptr, Str, nullptr, 0); | |
1213 ExitProcess(0); | |
1214 } | |
751 | 1215 v27 = &pMonsterList->pMonsters[(signed __int16)v50]; |
1216 v28 = pMonsterStats->FindMonsterByTextureName(pTexture); | |
0 | 1217 if ( !v28 ) |
1218 v28 = 1; | |
1219 Src = &pMonsterStats->pInfos[v28]; | |
1220 strcpy(pMonster->pActorName, Src->pName); | |
1221 pMonster->sCurrentHP = Src->uHP; | |
1222 assert(sizeof(MonsterInfo) == 88); | |
1223 memcpy(&pMonster->pMonsterInfo, Src, sizeof(MonsterInfo)); | |
1224 pMonster->word_000086_some_monster_id = v50 + 1; | |
1225 pMonster->uActorRadius = v27->uMonsterRadius; | |
1226 pMonster->uActorHeight = v27->uMonsterHeight; | |
1227 pMonster->uMovementSpeed = v27->uMovementSpeed; | |
1228 pMonster->vInitialPosition.x = spawn->vPosition.x; | |
1229 pMonster->vPosition.x = spawn->vPosition.x; | |
1230 pMonster->uTetherDistance = 256; | |
1231 pMonster->vInitialPosition.y = a4; | |
1232 pMonster->vPosition.y = a4; | |
1233 pTexture = 0; | |
1234 pMonster->vInitialPosition.z = a3; | |
1235 pMonster->vPosition.z = a3; | |
1236 pMonster->uSectorID = pSector; | |
1237 pMonster->uGroup = spawn->uGroup; | |
1238 pMonster->PrepareSprites((char)pTexture); | |
1239 pMonster->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; | |
1240 v32 = rand(); | |
1241 v33 = v32 % 2048; | |
323 | 1242 v34 = stru_5C6E00->Cos(v32 % 2048); |
0 | 1243 a4 = v34; |
1244 a3 = (unsigned __int64)(v34 * (signed __int64)v52) >> 16; | |
1245 pPosX = a3 + spawn->vPosition.x; | |
323 | 1246 v35 = stru_5C6E00->Sin(v33); |
0 | 1247 a4 = v35; |
1248 a3 = (unsigned __int64)(v35 * (signed __int64)v52) >> 16; | |
1249 a4 = a3 + spawn->vPosition.y; | |
1250 v36 = spawn->vPosition.z; | |
1251 a3 = spawn->vPosition.z; | |
1252 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) | |
1416 | 1253 { |
1254 if ( a5 ) | |
1255 pMonster->uAttributes |= 0x080000; | |
1256 ++uNumActors; | |
1257 continue; | |
1258 } | |
0 | 1259 v37 = pIndoor->GetSector(pPosX, a4, v36); |
1260 if ( v37 == pSector ) | |
1261 { | |
723 | 1262 v38 = BLV_GetFloorLevel(pPosX, a4, a3, v37, &uFaceID); |
0 | 1263 v39 = v38; |
1264 if ( v38 != -30000 ) | |
1265 { | |
1266 if ( abs(v38 - a3) <= 1024 ) | |
1267 { | |
1268 a3 = v39; | |
1269 if ( a5 ) | |
1270 pMonster->uAttributes |= 0x080000; | |
1271 ++uNumActors; | |
1416 | 1272 continue; |
0 | 1273 } |
1274 } | |
1275 } | |
1276 ; | |
1277 //v53 = (char *)v53 + 1; | |
1278 //result = v53; | |
1279 } | |
1280 //while ( (signed int)v53 < v56 ); | |
1281 } | |
1282 | |
1283 //----- (0044FA4C) -------------------------------------------------------- | |
1284 signed int __fastcall sub_44FA4C_spawn_light_elemental(int a1, int a2, int a3) | |
1285 { | |
1286 signed int v3; // ecx@6 | |
90 | 1287 Actor *v4; // edx@7 |
0 | 1288 signed int result; // eax@13 |
1289 Actor *v6; // esi@16 | |
1290 char *v7; // ebx@16 | |
1291 MonsterDesc *v8; // edi@16 | |
1292 unsigned __int16 v9; // ax@16 | |
1293 int v10; // ebx@16 | |
1052 | 1294 //int v11; // edi@16 |
1295 //int v12; // eax@16 | |
1296 //int v13; // ecx@16 | |
1297 //int v14; // ebx@16 | |
0 | 1298 const char *v15; // [sp-4h] [bp-24h]@2 |
1052 | 1299 //unsigned __int16 v16; // [sp+0h] [bp-20h]@1 |
1300 //int v17; // [sp+4h] [bp-1Ch]@1 | |
0 | 1301 unsigned int uFaceID; // [sp+8h] [bp-18h]@16 |
1302 int v19; // [sp+Ch] [bp-14h]@16 | |
1303 size_t v20; // [sp+10h] [bp-10h]@6 | |
1304 int v21; // [sp+14h] [bp-Ch]@14 | |
1052 | 1305 //int v22; // [sp+18h] [bp-8h]@14 |
0 | 1306 unsigned int v23; // [sp+1Ch] [bp-4h]@6 |
1307 | |
1052 | 1308 //v16 = a2; |
1309 //v17 = a1; | |
0 | 1310 if ( a2 == 4 ) |
1311 { | |
1312 v15 = "Elemental Light C"; | |
1313 } | |
1052 | 1314 else if ( a2 == 3 ) |
0 | 1315 v15 = "Elemental Light B"; |
1316 else | |
1317 v15 = "Elemental Light A"; | |
1052 | 1318 |
751 | 1319 v23 = pMonsterList->GetMonsterIDByName(v15); |
0 | 1320 v3 = 0; |
1321 v20 = uNumActors; | |
1322 if ( (signed int)uNumActors > 0 ) | |
1323 { | |
1202 | 1324 v4 = pActors.data();//[0].uAIState; |
90 | 1325 while ( v4->uAIState != Removed ) |
0 | 1326 { |
1052 | 1327 ++v3; |
90 | 1328 ++v4; |
0 | 1329 if ( v3 >= (signed int)uNumActors ) |
90 | 1330 break; |
1331 } | |
1332 if( v3 < (signed int)uNumActors ) | |
1333 v20 = v3; | |
1334 } | |
0 | 1335 if ( v20 != uNumActors || (result = uNumActors + 1, (signed int)(uNumActors + 1) < 500) ) |
1336 { | |
1337 v21 = 0; | |
1052 | 1338 //v22 = pParty->vPosition.z; |
0 | 1339 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) |
1340 v21 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z); | |
1341 v6 = &pActors[v20]; | |
1342 v7 = (char *)&pMonsterStats->pInfos[v23 + 1]; | |
1343 v19 = (((uCurrentlyLoadedLevelType != LEVEL_Outdoor) - 1) & 0x40) + 64; | |
1344 v6->Reset(); | |
1345 v8 = &pMonsterList->pMonsters[v23]; | |
1346 strcpy(v6->pActorName, *(const char **)v7); | |
1347 v6->sCurrentHP = *((short *)v7 + 32); | |
1348 memcpy(&v6->pMonsterInfo, v7, 0x58u); | |
1349 v6->word_000086_some_monster_id = v23 + 1; | |
1350 v6->uActorRadius = v8->uMonsterRadius; | |
1351 v6->uActorHeight = v8->uMonsterHeight; | |
1352 v9 = v8->uMovementSpeed; | |
1353 v6->pMonsterInfo.uTreasureDiceRolls = 0; | |
1354 v6->pMonsterInfo.uTreasureType = 0; | |
1355 v6->pMonsterInfo.uExp = 0; | |
1356 v6->uMovementSpeed = v9; | |
1357 v10 = rand() % 2048; | |
1643 | 1358 //v11 = pParty->vPosition.x + fixpoint_mul(stru_5C6E00->Cos(v10), v19); |
323 | 1359 uFaceID = stru_5C6E00->Sin(v10); |
1052 | 1360 //v12 = pParty->vPosition.y; |
1643 | 1361 //v13 = fixpoint_mul(uFaceID, v19); |
1362 //v14 = pParty->vPosition.y + fixpoint_mul(uFaceID, v19); | |
1052 | 1363 //LOWORD(v12) = v22; |
1643 | 1364 v6->vInitialPosition.x = pParty->vPosition.x + fixpoint_mul(stru_5C6E00->Cos(v10), v19); |
1052 | 1365 v6->vPosition.x = v6->vInitialPosition.x; |
1643 | 1366 v6->vInitialPosition.y = pParty->vPosition.y + fixpoint_mul(uFaceID, v19); |
1052 | 1367 v6->vPosition.y = v6->vInitialPosition.y; |
1368 v6->vInitialPosition.z = pParty->vPosition.z; | |
1369 v6->vPosition.z = v6->vInitialPosition.z; | |
1370 //LOWORD(v12) = v21; | |
0 | 1371 v6->uTetherDistance = 256; |
1052 | 1372 v6->uSectorID = v21; |
0 | 1373 v6->PrepareSprites(0); |
1374 v6->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; | |
1375 v6->uAlly = 9999; | |
1376 v6->uGroup = 0; | |
1377 v6->uCurrentActionTime = 0; | |
1378 v6->uAIState = Summoned; | |
1379 v6->uCurrentActionLength = 256; | |
1380 v6->UpdateAnimation(); | |
1381 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor | |
1052 | 1382 || (result = pIndoor->GetSector(v6->vPosition.x, v6->vPosition.y, v6->vPosition.z), |
0 | 1383 result == v21) |
1052 | 1384 && (result = BLV_GetFloorLevel(v6->vPosition.x, v6->vPosition.y, v6->vPosition.z, result, &uFaceID), result != -30000) |
1385 && (result = abs(result - pParty->vPosition.z), result <= 1024) ) | |
0 | 1386 { |
1387 if ( v20 == uNumActors ) | |
1388 ++uNumActors; | |
1052 | 1389 v6->uSummonerID = PID(OBJECT_Player, a1); |
1948
7fd4bfa175fd
pActorBuffs[2] to pActorBuffs[ACTOR_BUFF_SUMMONED]
Grumpy7
parents:
1935
diff
changeset
|
1390 result = v6->pActorBuffs[ACTOR_BUFF_SUMMONED].Apply(pParty->uTimePlayed + (a3 * 128) / 30.0f, |
1052 | 1391 a2, |
1392 a1, | |
0 | 1393 0, |
1394 0); | |
1395 } | |
1396 } | |
1397 return result; | |
1398 } | |
1399 | |
1400 //----- (0044FFD8) -------------------------------------------------------- | |
1401 int MapInfo::SpawnRandomTreasure(SpawnPointMM7 *a2) | |
1402 { | |
472 | 1403 //MapInfo *v2; // ebx@1 |
1404 //SpawnPointMM7 *v3; // esi@1 | |
1405 //int v4; // eax@1 | |
0 | 1406 int v5; // edx@1 |
1407 int v6; // eax@1 | |
1408 int v7; // ecx@1 | |
1409 int v8; // ebx@1 | |
1410 int v9; // eax@1 | |
1411 signed int v10; // ebx@1 | |
1412 signed int result; // eax@1 | |
1413 signed __int64 v12; // qtt@1 | |
1414 int v13; // ebx@1 | |
1415 int v14; // edx@10 | |
1416 signed int v15; // ebx@20 | |
1417 unsigned __int16 v16; // dx@20 | |
1417 | 1418 ObjectDesc *v17; // ecx@21 |
0 | 1419 unsigned __int16 v18; // ax@24 |
1420 int v19; // ST0C_4@27 | |
1421 int v20; // ST08_4@27 | |
1422 int v21; // ST04_4@27 | |
1423 int v22; // eax@27 | |
1424 signed int v23; // ebx@29 | |
1425 unsigned __int16 v24; // dx@29 | |
1417 | 1426 ObjectDesc *v25; // ecx@30 |
0 | 1427 unsigned __int16 v26; // ax@33 |
472 | 1428 //int v27; // ecx@35 |
1429 //int v28; // eax@35 | |
1430 //int v29; // esi@35 | |
1431 //__int16 v30; // ax@35 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
496
diff
changeset
|
1432 SpriteObject a1a; // [sp+Ch] [bp-7Ch]@1 |
472 | 1433 //int v32; // [sp+7Ch] [bp-Ch]@1 |
1434 //int v33; // [sp+80h] [bp-8h]@1 | |
0 | 1435 int v34; // [sp+84h] [bp-4h]@1 |
1436 | |
472 | 1437 //auto a1 = this; |
1438 //v2 = a1; | |
1439 //v3 = a2; | |
1440 //v4 = rand(); | |
0 | 1441 v34 = 0; |
472 | 1442 v5 = rand() % 100; |
436 | 1443 // v6 = 2 * (v2->Treasure_prob + 7 * v3->uIndex) - 14; |
472 | 1444 v7 = (unsigned __int8)byte_4E8168[a2->uIndex - 1][2 * Treasure_prob]; |
1445 v8 = (unsigned __int8)byte_4E8168[a2->uIndex - 1][2 * Treasure_prob + 1]; | |
1446 //v32 = v5; | |
1447 //v33 = v7; | |
0 | 1448 v9 = rand(); |
472 | 1449 v10 = v8 - v7 + 1; |
0 | 1450 v12 = v9; |
1451 result = v9 / v10; | |
472 | 1452 v13 = v7 + (unsigned __int64)(v12 % v10); |
0 | 1453 if ( v13 < 7 ) |
1454 { | |
472 | 1455 if ( v5 < 20 ) |
0 | 1456 return result; |
472 | 1457 if ( v5 >= 60 ) |
1458 { | |
1459 v19 = a2->vPosition.z; | |
1460 v20 = a2->vPosition.y; | |
1461 v21 = a2->vPosition.x; | |
0 | 1462 v22 = rand(); |
1463 return sub_450521_ProllyDropItemAt(v13, v22 % 27 + 20, v21, v20, v19, 0); | |
1464 } | |
472 | 1465 if ( a2->uIndex == 1 ) |
0 | 1466 { |
1467 v14 = rand() % 51 + 50; | |
1417 | 1468 a1a.stru_24.uItemID = 197; |
1469 v34 = v14; | |
1470 } | |
1471 else if ( a2->uIndex == 2 ) | |
0 | 1472 { |
1417 | 1473 v14 = rand() % 101 + 100; |
1474 a1a.stru_24.uItemID = 197; | |
1475 v34 = v14; | |
1476 } | |
1477 else if ( a2->uIndex == 3 ) | |
0 | 1478 { |
1479 v14 = rand() % 301 + 200; | |
1417 | 1480 a1a.stru_24.uItemID = 198; |
1481 v34 = v14; | |
0 | 1482 } |
1417 | 1483 else if ( a2->uIndex == 4 ) |
0 | 1484 { |
1417 | 1485 v14 = rand() % 501 + 500; |
1486 a1a.stru_24.uItemID = 198; | |
1487 v34 = v14; | |
1488 } | |
1489 else if ( a2->uIndex == 5 ) | |
1490 { | |
1491 v14 = rand() % 1001 + 1000; | |
0 | 1492 a1a.stru_24.uItemID = 199; |
1493 v34 = v14; | |
1494 } | |
1417 | 1495 else if ( a2->uIndex == 6 ) |
1496 { | |
1497 v14 = rand() % 3001 + 2000; | |
1498 a1a.stru_24.uItemID = 199; | |
1499 v34 = v14; | |
1500 } | |
1501 v15 = 0; | |
1502 v16 = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; | |
1503 a1a.uType = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; | |
1504 v18 = 0; | |
1505 for( int i = 0; i < pObjectList->uNumObjects; i++ ) | |
1506 { | |
1507 if ( pObjectList->pObjects[i].uObjectID == v16 ) | |
1508 { | |
1509 v18 = i; | |
1510 break; | |
1511 } | |
1512 } | |
1513 a1a.stru_24.SetIdentified(); | |
1514 a1a.uObjectDescID = v18; | |
1515 a1a.stru_24.uSpecEnchantmentType = v34; | |
0 | 1516 } |
1517 else | |
1518 { | |
1417 | 1519 result = a1a.stru_24.GenerateArtifact(); |
1520 if ( !result ) | |
1521 return result; | |
1522 v23 = 0; | |
1523 v24 = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; | |
1524 a1a.uType = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; | |
1525 v26 = 0; | |
1526 for( int i = 0; i < pObjectList->uNumObjects; i++ ) | |
1527 { | |
1528 if( v24 == pObjectList->pObjects[i].uObjectID ) | |
1529 { | |
1530 v26 = i; | |
1531 break; | |
1532 } | |
1533 } | |
1534 a1a.uObjectDescID = v26; | |
1535 a1a.stru_24.Reset(); | |
1536 } | |
472 | 1537 a1a.vPosition.y = a2->vPosition.y; |
0 | 1538 a1a.uAttributes = 0; |
1539 a1a.uSoundID = 0; | |
1540 a1a.uFacing = 0; | |
472 | 1541 a1a.vPosition.z = a2->vPosition.z; |
1542 a1a.vPosition.x = a2->vPosition.x; | |
822 | 1543 a1a.spell_skill = 0; |
1544 a1a.spell_level = 0; | |
1545 a1a.spell_id = 0; | |
823 | 1546 a1a.spell_target_pid = 0; |
822 | 1547 a1a.spell_caster_pid = 0; |
0 | 1548 a1a.uSpriteFrameID = 0; |
472 | 1549 a1a.uSectorID = pIndoor->GetSector(a2->vPosition.x, a2->vPosition.y, a2->vPosition.z);; |
0 | 1550 return a1a.Create(0, 0, 0, 0); |
1551 } | |
1552 | |
1553 //----- (00450521) -------------------------------------------------------- | |
1459 | 1554 int __fastcall sub_450521_ProllyDropItemAt(int ecx0, signed int a2, int a3, int a4, int a5, unsigned __int16 a6) |
0 | 1555 { |
1556 int v6; // edi@1 | |
1557 int v7; // esi@1 | |
1558 signed int v8; // edi@1 | |
1559 unsigned __int16 v9; // cx@1 | |
1560 char *v10; // edx@2 | |
1561 unsigned __int16 v11; // ax@5 | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
496
diff
changeset
|
1562 SpriteObject a1; // [sp+8h] [bp-70h]@1 |
0 | 1563 |
1564 v6 = ecx0; | |
1565 v7 = a2; | |
1566 pItemsTable->GenerateItem(v6, v7, &a1.stru_24); | |
1567 v8 = 0; | |
1568 v9 = pItemsTable->pItems[a1.stru_24.uItemID].uSpriteID; | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
496
diff
changeset
|
1569 a1.uType = pItemsTable->pItems[a1.stru_24.uItemID].uSpriteID; |
1417 | 1570 v11 = 0; |
1571 for( int i = 0; i < pObjectList->uNumObjects; i++ ) | |
1572 { | |
1573 if( v9 == pObjectList->pObjects[i].uObjectID ) | |
1574 { | |
1575 v11 = i; | |
1576 break; | |
1577 } | |
1578 } | |
0 | 1579 a1.uObjectDescID = v11; |
1580 a1.vPosition.y = a4; | |
1581 a1.vPosition.x = a3; | |
1582 a1.vPosition.z = a5; | |
1583 a1.uFacing = a6; | |
1584 a1.uAttributes = 0; | |
1585 a1.uSectorID = pIndoor->GetSector(a3, a4, a5); | |
1586 a1.uSpriteFrameID = 0; | |
1587 return a1.Create(0, 0, 0, 0); | |
1588 } | |
1589 | |
1590 //----- (0045063B) -------------------------------------------------------- | |
1415 | 1591 int __fastcall _45063B_spawn_some_monster(MapInfo *a1, int a2) |
0 | 1592 { |
1593 signed int v2; // edi@1 | |
1594 Actor *v3; // esi@2 | |
1415 | 1595 //signed __int64 v4; // qax@3 |
0 | 1596 int result; // eax@8 |
1597 int v6; // edi@11 | |
1598 int v7; // ebx@11 | |
1599 int v8; // edi@11 | |
1600 int v9; // ebx@12 | |
1601 int v10; // eax@12 | |
1602 char v11; // zf@16 | |
1603 int v12; // edi@20 | |
1604 int v13; // eax@20 | |
1605 int v14; // ebx@20 | |
1606 int v15; // eax@20 | |
1607 int v16; // eax@20 | |
1608 int v17; // eax@20 | |
1609 int v18; // eax@21 | |
1610 SpawnPointMM7 v19; // [sp+Ch] [bp-38h]@1 | |
1611 int v20; // [sp+24h] [bp-20h]@11 | |
1415 | 1612 //MapInfo *v21; // [sp+28h] [bp-1Ch]@1 |
0 | 1613 int v22; // [sp+2Ch] [bp-18h]@3 |
1614 int v23; // [sp+30h] [bp-14h]@11 | |
1415 | 1615 //int v24; // [sp+34h] [bp-10h]@1 |
0 | 1616 unsigned int uFaceID; // [sp+38h] [bp-Ch]@10 |
1617 int v26; // [sp+3Ch] [bp-8h]@11 | |
1618 int v27; // [sp+40h] [bp-4h]@11 | |
1415 | 1619 |
1620 if (!uNumActors) | |
1621 return 0; | |
1622 | |
1623 //v21 = a1; | |
1624 //v24 = a2; | |
0 | 1625 v2 = 0; |
1202 | 1626 v3 = pActors.data(); |
0 | 1627 while ( 1 ) |
1628 { | |
1415 | 1629 if (v3->pMonsterInfo.uID >= 121 && v3->pMonsterInfo.uID <= 123 || // Dwarf FemaleC A-C |
1630 v3->pMonsterInfo.uID >= 124 && v3->pMonsterInfo.uID <= 126 || // Dwarf MaleA A-C | |
1631 v3->pMonsterInfo.uID >= 133 && v3->pMonsterInfo.uID <= 135 || // Peasant Elf FemaleA A-C | |
1632 !v3->CanAct()) | |
0 | 1633 { |
1415 | 1634 ++v2; |
1635 ++v3; | |
1636 | |
1637 if (v2 >= uNumActors) | |
1638 return 0; | |
1639 | |
1640 continue; | |
0 | 1641 } |
1415 | 1642 |
1643 break; | |
1644 //v22 = v3->pMonsterInfo.uID - 1; | |
1645 //v4 = (signed __int64)((double)v22 * 0.3333333333333333); | |
1646 //if ( (int)v4 != 40 ) | |
1647 //{ | |
1648 // if ( (int)v4 != 41 && (int)v4 != 44 && v3->CanAct() ) | |
1649 // break; | |
1650 //} | |
1651 //++v2; | |
1652 //++v3; | |
1653 //if ( v2 >= (signed int)uNumActors ) | |
1654 // goto LABEL_8; | |
0 | 1655 } |
1656 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) | |
1657 { | |
1658 v22 = 0; | |
1659 uFaceID = 0; | |
1660 while ( 1 ) | |
1661 { | |
1662 ++uFaceID; | |
1663 v6 = rand() % 1024 + 512; | |
1664 v7 = rand() % (signed int)stru_5C6E00->uIntegerDoublePi; | |
323 | 1665 v20 = stru_5C6E00->Cos(v7); |
0 | 1666 v23 = (unsigned __int64)(v20 * (signed __int64)v6) >> 16; |
1667 v19.vPosition.x = pParty->vPosition.x + v23; | |
323 | 1668 v20 = stru_5C6E00->Sin(v7); |
0 | 1669 v23 = (unsigned __int64)(v20 * (signed __int64)v6) >> 16; |
1670 v8 = 0; | |
1415 | 1671 v19.uIndex = a2; |
0 | 1672 v19.vPosition.y = v23 + pParty->vPosition.y; |
1673 v19.vPosition.z = pParty->vPosition.z; | |
1674 v26 = 0; | |
1675 v27 = 0; | |
723 | 1676 v19.vPosition.z = ODM_GetFloorLevel( |
0 | 1677 v19.vPosition.x, |
1678 v23 + pParty->vPosition.y, | |
1679 pParty->vPosition.z, | |
1680 0, | |
1681 &v26, | |
1682 &v27, | |
1683 0); | |
1684 v23 = 0; | |
1416 | 1685 for( int i = 0; i < pOutdoor->uNumBModels; i++ ) |
1686 { | |
1687 v9 = abs(v19.vPosition.y - pOutdoor->pBModels[i].vBoundingCenter.y); | |
1688 v10 = abs(v19.vPosition.x - pOutdoor->pBModels[i].vBoundingCenter.x); | |
1689 if ( int_get_vector_length(v10, v9, 0) < pOutdoor->pBModels[i].sBoundingRadius + 256 ) | |
1690 { | |
1691 v22 = 1; | |
1692 break; | |
1693 } | |
1694 } | |
0 | 1695 v11 = uFaceID == 100; |
1696 if ( uFaceID >= 100 ) | |
1697 break; | |
1698 if ( v22 ) | |
1699 { | |
1700 v11 = uFaceID == 100; | |
1701 break; | |
1702 } | |
1703 } | |
1704 } | |
1705 else | |
1706 { | |
1707 v26 = 0; | |
1708 v22 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z); | |
1709 do | |
1710 { | |
1711 ++v26; | |
1712 v12 = rand() % 512 + 256; | |
1713 v13 = rand(); | |
1714 v14 = v13 % (signed int)stru_5C6E00->uIntegerDoublePi; | |
323 | 1715 v15 = stru_5C6E00->Cos(v13 % (signed int)stru_5C6E00->uIntegerDoublePi); |
0 | 1716 v20 = v15; |
1717 v23 = (unsigned __int64)(v15 * (signed __int64)v12) >> 16; | |
1718 v19.vPosition.x = pParty->vPosition.x + v23; | |
323 | 1719 v16 = stru_5C6E00->Sin(v13 % (signed int)stru_5C6E00->uIntegerDoublePi); |
0 | 1720 v20 = v16; |
1721 v23 = (unsigned __int64)(v16 * (signed __int64)v12) >> 16; | |
1722 v19.vPosition.y = v23 + pParty->vPosition.y; | |
1723 v19.vPosition.z = pParty->vPosition.z; | |
1415 | 1724 v19.uIndex = a2; |
0 | 1725 v17 = pIndoor->GetSector(v19.vPosition.x, v23 + pParty->vPosition.y, pParty->vPosition.z); |
1726 if ( v17 == v22 ) | |
1727 { | |
723 | 1728 v18 = BLV_GetFloorLevel(v19.vPosition.x, v19.vPosition.y, v19.vPosition.z, v17, &uFaceID); |
0 | 1729 v19.vPosition.z = v18; |
1730 if ( v18 != -30000 ) | |
1731 { | |
1732 if ( abs(v18 - pParty->vPosition.z) <= 1024 ) | |
1733 break; | |
1734 } | |
1735 } | |
1736 } | |
1737 while ( v26 < 100 ); | |
1738 v11 = v26 == 100; | |
1739 } | |
1740 if ( v11 ) | |
1741 { | |
1742 result = 0; | |
1743 } | |
1744 else | |
1745 { | |
1415 | 1746 SpawnEncounter(a1, &v19, 0, 0, 1); |
1747 result = a2; | |
0 | 1748 } |
1749 return result; | |
1750 } | |
1751 | |
1752 //----- (00450AAA) -------------------------------------------------------- | |
1753 void RespawnGlobalDecorations() | |
1754 { | |
1822 | 1755 memset(stru_5E4C90_MapPersistVars._decor_events.data(), 0, 125); |
0 | 1756 |
1757 uint decorEventIdx = 0; | |
1758 for (uint i = 0; i < uNumLevelDecorations; ++i) | |
1759 { | |
1980 | 1760 LevelDecoration* decor = &pLevelDecorations[i]; |
0 | 1761 |
1514
965af46e8793
Rename LevelDecoration::field_16_event_id to LevelDecoration::uEventID.
yoctozepto
parents:
1513
diff
changeset
|
1762 if (!decor->uEventID) |
0 | 1763 { |
1764 if (decor->IsInteractive()) | |
1765 { | |
1766 if (decorEventIdx < 124) | |
1767 { | |
1768 decor->_idx_in_stru123 = decorEventIdx + 75; | |
1736
c6fe09a06712
Player::CompareVariable finished, renamed stru_5E4C90 to stru_5E4C90_MapPersistVars, party::field_4A0 to party::CounterEventValues
Grumpy7
parents:
1706
diff
changeset
|
1769 stru_5E4C90_MapPersistVars._decor_events[decorEventIdx++] = decor->GetGlobalEvent(); |
0 | 1770 } |
1771 } | |
1772 } | |
1773 } | |
1774 } | |
1775 | |
1776 //----- (00450B0A) -------------------------------------------------------- | |
1777 bool __fastcall SpawnActor(unsigned int uMonsterID) | |
1778 { | |
1779 unsigned int v1; // ebx@1 | |
1780 bool result; // eax@2 | |
1781 MonsterDesc *v3; // esi@5 | |
1782 MonsterInfo *v4; // edi@5 | |
1783 Vec3_int_ v5; // ST08_12@5 | |
1784 unsigned int v6; // ecx@5 | |
1785 Actor *v7; // eax@7 | |
1786 Actor actor; // [sp+4h] [bp-350h]@5 | |
1787 Vec3_int_ pOut; // [sp+348h] [bp-Ch]@5 | |
1788 | |
1789 v1 = uMonsterID; | |
1790 if ( uNumActors == 499 ) | |
1791 { | |
1792 result = 0; | |
1793 } | |
1794 else | |
1795 { | |
1796 if ( (signed int)uMonsterID >= (signed int)pMonsterList->uNumMonsters ) | |
1797 v1 = 0; | |
1798 v3 = &pMonsterList->pMonsters[v1]; | |
1799 v4 = &pMonsterStats->pInfos[v1 + 1]; | |
1800 memset(&actor, 0, 0x344u); | |
1801 strcpy(actor.pActorName, v4->pName); | |
1802 actor.sCurrentHP = LOWORD(v4->uHP); | |
1803 memcpy(&actor.pMonsterInfo, &pMonsterStats->pInfos[v1 + 1], 0x58u); | |
1804 actor.word_000086_some_monster_id = v1 + 1; | |
1805 actor.uActorRadius = v3->uMonsterRadius; | |
1806 actor.uActorHeight = v3->uMonsterHeight; | |
1807 actor.uMovementSpeed = v3->uMovementSpeed; | |
1808 v5 = pParty->vPosition; | |
1809 Vec3_int_::Rotate(200, pParty->sRotationY, 0, v5, &pOut.x, &pOut.z, &pOut.y); | |
1810 actor.vInitialPosition.x = pOut.x; | |
1811 actor.vPosition.x = pOut.x; | |
1812 actor.uTetherDistance = 256; | |
1813 actor.vInitialPosition.y = LOWORD(pOut.z); | |
1814 actor.vPosition.y = LOWORD(pOut.z); | |
1815 actor.vInitialPosition.z = LOWORD(pOut.y); | |
1816 actor.vPosition.z = LOWORD(pOut.y); | |
1817 pSprites_LOD->DeleteSomeSprites(); | |
1818 pPaletteManager->ResetNonTestLocked(); | |
1819 v6 = uNumActors - 1; | |
1820 if ( dword_5C6DF8 == 1 ) | |
1821 { | |
1822 dword_5C6DF8 = 0; | |
1823 v6 = uNumActors++; | |
1824 } | |
1825 v7 = &pActors[v6]; | |
1826 memcpy(v7, &actor, 0x344u); | |
1827 v7->PrepareSprites(1); | |
1828 result = 1; | |
1829 } | |
1830 return result; | |
1831 } | |
1832 // 5C6DF8: using guessed type int dword_5C6DF8; | |
1833 | |
1834 //----- (00450DA3) -------------------------------------------------------- | |
1458 | 1835 int GetAlertStatus() |
0 | 1836 { |
1837 int result; // eax@2 | |
1838 | |
1839 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) | |
1840 result = pOutdoor->ddm.field_C_alert; | |
1841 else | |
1842 result = uCurrentlyLoadedLevelType == LEVEL_Outdoor ? pIndoor->dlv.field_C_alert : 0; | |
1843 return result; | |
1844 } | |
1845 | |
1846 //----- (00450DDE) -------------------------------------------------------- | |
1847 stru350 *stru350::_450DDE() | |
1848 { | |
1849 _450DF1(&stru_4E82A4, &stru_4E82A4); | |
1850 return this; | |
1851 } | |
1852 | |
1853 //----- (00450DF1) -------------------------------------------------------- | |
1854 bool stru350::_450DF1(const stru355 *p1, const stru355 *p2) | |
1855 { | |
1856 //stru350 *v3; // esi@1 | |
1857 //void *result; // eax@1 | |
1858 unsigned int v5; // ecx@2 | |
1859 int v6; // edi@2 | |
1860 int v7; // edx@2 | |
1861 unsigned int v8; // ecx@8 | |
1862 int v9; // edi@8 | |
1863 int v10; // edx@8 | |
1864 int v11; // ecx@12 | |
1865 int v12; // edi@12 | |
1866 unsigned int v13; // ecx@12 | |
1867 int v14; // edx@12 | |
1868 int v15; // ecx@16 | |
1869 unsigned int v16; // edx@16 | |
1870 int v17; // ecx@16 | |
1871 int v18; // edi@16 | |
1872 char v19; // zf@20 | |
1873 unsigned int v20; // ecx@21 | |
1874 int v21; // edi@21 | |
1875 int v22; // edx@21 | |
1876 unsigned int v23; // ecx@27 | |
1877 int v24; // edi@27 | |
1878 int v25; // edx@27 | |
1879 int v26; // ecx@31 | |
1880 int v27; // edi@31 | |
1881 unsigned int v28; // ecx@31 | |
1882 int v29; // edx@31 | |
1883 int v30; // ebx@35 | |
1884 int v31; // ecx@35 | |
1885 int v32; // edi@35 | |
1886 int v33; // edx@35 | |
1887 unsigned int i; // ecx@35 | |
1888 int v35; // ecx@39 | |
1889 unsigned int v36; // edx@39 | |
1890 int v37; // ecx@39 | |
1891 int v38; // ebx@39 | |
1892 | |
1893 //v3 = this; | |
1894 memcpy(&field_0, p1, sizeof(stru355)); | |
1895 memcpy(&field_20, p2, sizeof(stru355)); | |
1896 //result = memcpy(&v3->field_20, p2, 0x20u); | |
1897 //LOBYTE(result) = 1; | |
1898 if (field_0.field_4 & 1) | |
1899 { | |
1900 v5 = field_0.field_1C; | |
1901 v6 = 0; | |
1902 v7 = 0; | |
1903 while ( !(v5 & 1) ) | |
1904 { | |
1905 ++v6; | |
1906 v5 >>= 1; | |
1907 } | |
1908 do | |
1909 { | |
1910 v5 >>= 1; | |
1911 ++v7; | |
1912 } | |
1913 while ( v5 & 1 ); | |
1914 field_40 = 32 - v7 - v6; | |
1915 } | |
1916 else | |
1917 { | |
1918 field_40 = 0; | |
1919 } | |
1920 v8 = field_0.field_10; | |
1921 v9 = 0; | |
1922 v10 = 0; | |
1923 while ( !(v8 & 1) ) | |
1924 { | |
1925 ++v9; | |
1926 v8 >>= 1; | |
1927 } | |
1928 do | |
1929 { | |
1930 v8 >>= 1; | |
1931 ++v10; | |
1932 } | |
1933 while ( v8 & 1 ); | |
1934 v11 = 24 - v10 - v9; | |
1935 v12 = 0; | |
1936 field_48 = v11; | |
1937 v13 = field_0.field_14; | |
1938 v14 = 0; | |
1939 while ( !(v13 & 1) ) | |
1940 { | |
1941 ++v12; | |
1942 v13 >>= 1; | |
1943 } | |
1944 do | |
1945 { | |
1946 v13 >>= 1; | |
1947 ++v14; | |
1948 } | |
1949 while ( v13 & 1 ); | |
1950 v15 = 16 - v14; | |
1951 v16 = field_0.field_18; | |
1952 field_50 = v15 - v12; | |
1953 v17 = 0; | |
1954 v18 = 0; | |
1955 while ( !(v16 & 1) ) | |
1956 { | |
1957 ++v17; | |
1958 v16 >>= 1; | |
1959 } | |
1960 do | |
1961 { | |
1962 v16 >>= 1; | |
1963 ++v18; | |
1964 } | |
1965 while ( v16 & 1 ); | |
1966 v19 = (field_20.field_4 & 1) == 0; | |
1967 field_58 = v17 - v18 + 8; | |
1968 if ( v19 ) | |
1969 { | |
1970 field_44 = 0; | |
1971 } | |
1972 else | |
1973 { | |
1974 v20 = field_20.field_1C; | |
1975 v21 = 0; | |
1976 v22 = 0; | |
1977 while ( !(v20 & 1) ) | |
1978 { | |
1979 ++v21; | |
1980 v20 >>= 1; | |
1981 } | |
1982 do | |
1983 { | |
1984 v20 >>= 1; | |
1985 ++v22; | |
1986 } | |
1987 while ( v20 & 1 ); | |
1988 field_44 = 32 - v22 - v21; | |
1989 } | |
1990 v23 = field_20.field_10; | |
1991 v24 = 0; | |
1992 v25 = 0; | |
1993 while ( !(v23 & 1) ) | |
1994 { | |
1995 ++v24; | |
1996 v23 >>= 1; | |
1997 } | |
1998 do | |
1999 { | |
2000 v23 >>= 1; | |
2001 ++v25; | |
2002 } | |
2003 while ( v23 & 1 ); | |
2004 v26 = 24 - v25 - v24; | |
2005 v27 = 0; | |
2006 field_4C = v26; | |
2007 v28 = field_20.field_14; | |
2008 v29 = 0; | |
2009 while ( !(v28 & 1) ) | |
2010 { | |
2011 ++v27; | |
2012 v28 >>= 1; | |
2013 } | |
2014 do | |
2015 { | |
2016 v28 >>= 1; | |
2017 ++v29; | |
2018 } | |
2019 while ( v28 & 1 ); | |
2020 v30 = 0; | |
2021 v31 = 16 - v29 - v27; | |
2022 v32 = field_20.field_18; | |
2023 field_54 = v31; | |
2024 v33 = 0; | |
2025 for ( i = v32; !(i & 1); i >>= 1 ) | |
2026 ++v30; | |
2027 do | |
2028 { | |
2029 i >>= 1; | |
2030 ++v33; | |
2031 } | |
2032 while ( i & 1 ); | |
2033 v35 = 32 - v33; | |
2034 v36 = v32; | |
2035 field_5C = v35 - v30; | |
2036 v37 = 0; | |
2037 v38 = 0; | |
2038 while ( !(v36 & 1) ) | |
2039 { | |
2040 ++v37; | |
2041 v36 >>= 1; | |
2042 } | |
2043 do | |
2044 { | |
2045 v36 >>= 1; | |
2046 ++v38; | |
2047 } | |
2048 while ( v36 & 1 ); | |
2049 field_5C = v37 - v38 + 8; | |
2050 return true; | |
2051 } | |
2052 | |
2053 //----- (00450F55) -------------------------------------------------------- | |
2054 unsigned int stru350::_450F55(int a2) | |
2055 { | |
2056 int v2 = a2 & stru_4E82A4.field_1C; | |
2057 if (field_20.field_4 & 1) | |
2058 v2 = (unsigned int)v2 >> this->field_44; | |
2059 return v2 & field_20.field_1C | | |
2060 field_20.field_10 & ((a2 & (unsigned int)stru_4E82A4.field_10) >> field_4C) | | |
2061 field_20.field_14 & ((a2 & (unsigned int)stru_4E82A4.field_14) >> field_54) | | |
2062 field_20.field_18 & ((a2 & (unsigned int)stru_4E82A4.field_18) >> field_5C); | |
2063 } | |
2064 | |
2065 //----- (00450FB1) -------------------------------------------------------- | |
2066 int stru350::_450FB1(int a2) | |
2067 { | |
2068 int v2 = 0; | |
2069 int v4 = field_0.field_4 & 1; | |
2070 if ( v4 ) | |
2071 v2 = a2 & field_0.field_1C; | |
2072 if ( v4 ) | |
2073 v2 <<= field_40; | |
2074 return v2 | ((a2 & field_0.field_10) << field_48) | ((a2 & field_0.field_14) << field_50) | ((a2 & field_0.field_18) << field_58); | |
2075 } | |
2076 | |
2077 //----- (00452442) -------------------------------------------------------- | |
1583 | 2078 unsigned int __fastcall _452442_color_cvt(unsigned __int16 a1, unsigned __int16 a2, int a3, int a4) |
0 | 2079 { |
2080 int v4; // ebx@0 | |
2081 __int16 v5; // ST14_2@1 | |
2082 __int16 v6; // dx@1 | |
2083 int v7; // ecx@1 | |
2084 __int16 v8; // ST10_2@1 | |
2085 int v9; // edi@1 | |
2086 unsigned __int16 v10; // dh@1@1 | |
2087 int v11; // ebx@1 | |
2088 int v12; // ebx@1 | |
2089 __int16 a3a; // [sp+1Ch] [bp+8h]@1 | |
2090 | |
2091 v5 = a2 >> 2; | |
2092 v6 = (unsigned __int16)a4 >> 2; | |
2093 v8 = a1 >> 2; | |
2094 a3a = (unsigned __int16)a3 >> 2; | |
2095 LOWORD(v7) = a3a; | |
2096 v9 = v7; | |
2097 LOWORD(v4) = ((unsigned __int16)a4 >> 2) & 0xE0; | |
2098 LOWORD(v7) = a3a & 0xE0; | |
2099 LOWORD(v9) = v9 & 0x1C00; | |
2100 v11 = v7 + v4; | |
2101 LOWORD(v7) = v5 & 0xE0; | |
2102 v12 = v7 + v11; | |
2103 LOWORD(v7) = v8 & 0xE0; | |
1409
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2104 __debugbreak(); // warning C4700: uninitialized local variable 'v10' used |
848 | 2105 return (PID_TYPE(v8) + PID_TYPE(v5) + PID_TYPE(a3a) + PID_TYPE(v6)) | (v7 + v12) | ((v8 & 0x1C00) |
0 | 2106 + (v5 & 0x1C00) |
2107 + v9 | |
2108 + (__PAIR__(v10, (unsigned __int16)a4 >> 2) & 0x1C00)); | |
2109 } | |
2110 | |
2111 //----- (0045281E) -------------------------------------------------------- | |
2112 // Calculates atan2(y/x) | |
2113 // return value: angle in integer format (multiplier of Pi/1024) | |
2114 unsigned int stru193_math::Atan2(int x, int y) | |
2115 { | |
2116 signed int quadrant; | |
2117 __int64 dividend; | |
2118 int quotient; | |
2119 int lowIdx; | |
2120 int highIdx; | |
2121 int angle; | |
2122 | |
1980 | 2123 int X = x; |
2124 int Y = y; | |
0 | 2125 |
2126 if ( abs(X) < 65536 ) | |
2127 { | |
2128 if ( (abs(Y) >> 15) >= abs(X) ) | |
2129 X = 0; | |
2130 } | |
2131 | |
2132 if ( !X ) | |
2133 { | |
2134 if ( Y > 0 ) | |
2135 { | |
2136 return uIntegerHalfPi; //Pi/2 | |
2137 } | |
2138 else | |
2139 { | |
2140 return uIntegerHalfPi + uIntegerPi; //3*(Pi/2) | |
2141 } | |
2142 } | |
2143 | |
2144 if ( Y ) | |
2145 { | |
2146 if ( X < 0 ) | |
2147 { | |
2148 X = -X; | |
2149 if ( Y > 0 ) | |
2150 { | |
2151 quadrant = 4; | |
2152 } | |
2153 else | |
2154 { | |
2155 quadrant = 3; | |
2156 } | |
2157 } | |
2158 else | |
2159 { | |
2160 if ( Y > 0 ) | |
2161 { | |
2162 quadrant = 1; | |
2163 } | |
2164 else | |
2165 { | |
2166 quadrant = 2; | |
2167 } | |
2168 } | |
2169 | |
2170 if ( Y < 0 ) | |
2171 Y = -Y; | |
2172 | |
2173 LODWORD(dividend) = Y << 16; | |
2174 HIDWORD(dividend) = Y >> 16; | |
2175 quotient = dividend / X; | |
2176 | |
2177 //looks like binary search | |
2178 { | |
2179 int i; | |
2180 highIdx = uIntegerHalfPi; | |
2181 lowIdx = 0; | |
2182 | |
2183 for (i = 0; i < 6; ++i) | |
2184 { | |
2185 if (quotient <= pTanTable[(lowIdx + highIdx) / 2]) | |
2186 highIdx = (lowIdx + highIdx) / 2; | |
2187 else | |
2188 lowIdx = (lowIdx + highIdx) / 2; | |
2189 } | |
2190 } | |
2191 | |
2192 angle = lowIdx + 1; | |
2193 while ( angle < (highIdx - 1) && quotient >= pTanTable[angle] ) | |
2194 ++angle; | |
2195 | |
2196 switch (quadrant) | |
2197 { | |
2198 case 1: //X > 0, Y > 0 | |
2199 return angle; | |
2200 | |
2201 case 2: //X > 0, Y < 0 | |
2202 return uIntegerDoublePi - angle; //2*Pi - angle | |
2203 | |
2204 case 3: //X > 0, Y < 0 | |
2205 return uIntegerPi + angle; //Pi + angle | |
2206 | |
2207 case 4: //X < 0, Y > 0 | |
2208 return uIntegerPi - angle; //Pi - angle | |
2209 } | |
2210 | |
2211 //should newer get here | |
2212 return 0; | |
2213 } | |
2214 | |
2215 if ( X < 0 ) //Y == 0, X < 0 | |
2216 return uIntegerPi; | |
2217 | |
2218 return 0; | |
2219 } | |
2220 | |
2221 //----- (00452969) -------------------------------------------------------- | |
2222 stru193_math::stru193_math() | |
2223 { | |
2224 double v3; // ST18_8@2 | |
1214
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2225 |
0 | 2226 this->pTanTable[0] = 0; |
2227 this->pCosTable[0] = 65536; | |
2228 this->pInvCosTable[0] = 65536; | |
1214
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2229 for(int i = 1; i < (signed int)this->uIntegerHalfPi; i++) |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2230 { |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2231 v3 = (double)i * 3.141592653589793 / (double)uIntegerPi; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2232 pTanTable[i] = (signed __int64)(tan(v3) * (double)this->pCosTable[0] + 0.5); |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2233 pCosTable[i] = (signed __int64)(cos(v3) * (double)this->pCosTable[0] + 0.5); |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2234 pInvCosTable[i] = (signed __int64)(1.0 / cos(v3) * (double)this->pCosTable[0] + 0.5); |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2235 } |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2236 for(int i = this->uIntegerHalfPi; i < 520; i++) |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2237 { |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2238 this->pTanTable[i] = 0xEFFFFFFFu; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2239 this->pCosTable[i] = 0; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2240 this->pInvCosTable[i] = 0xEFFFFFFFu; |
0 | 2241 } |
2242 } | |
2243 | |
2244 //----- (00452A9E) -------------------------------------------------------- | |
295 | 2245 int integer_sqrt(int val) |
0 | 2246 { |
2247 signed int result; // eax@2 | |
295 | 2248 unsigned int v2; // edx@3 |
271 | 2249 unsigned int v3; // edi@3 |
2250 //signed int v4; // ebx@3 | |
0 | 2251 int v5; // esi@4 |
2252 | |
295 | 2253 if (val < 1) |
2254 return val; | |
271 | 2255 |
0 | 2256 v2 = 0; |
295 | 2257 v3 = val; |
0 | 2258 result = 0; |
271 | 2259 //v4 = 16; |
2260 for (uint i = 0; i < 16; ++i) | |
2261 { | |
0 | 2262 result *= 2; |
271 | 2263 v2 = (v3 >> 30) | 4 * v2; |
0 | 2264 v5 = 2 * result + 1; |
2265 v3 *= 4; | |
295 | 2266 if ( v2 >= v5 ) |
0 | 2267 { |
2268 ++result; | |
2269 v2 -= v5; | |
2270 } | |
271 | 2271 //--v4; |
2272 } | |
2273 //while ( v4 ); | |
295 | 2274 if ( val - result * result >= (unsigned int)(result - 1) ) |
0 | 2275 ++result; |
295 | 2276 return result; |
0 | 2277 } |
2278 | |
2152 | 2279 |
0 | 2280 |
2281 //----- (00452B2E) -------------------------------------------------------- | |
2282 int __fastcall GetDiceResult(unsigned int uNumDice, unsigned int uDiceSides) | |
2283 { | |
2284 int v3; // esi@1 | |
2101 | 2285 |
0 | 2286 v3 = 0; |
2287 if ( uDiceSides ) | |
2288 { | |
2101 | 2289 for ( uint i = 0; i < uNumDice; ++i) |
2290 v3 += rand() % uDiceSides + 1; | |
2291 return v3; | |
0 | 2292 } |
2101 | 2293 return 0; |
0 | 2294 } |
2295 | |
2296 //----- (00453F62) -------------------------------------------------------- | |
2297 void MapStats::Initialize() | |
2298 { | |
237 | 2299 char work_str[32]; // [sp+Ch] [bp-34h]@3 |
2300 int work_str_pos; | |
2301 int work_str_len; | |
2302 int i; | |
2303 char* test_string; | |
2304 unsigned char c; | |
2305 bool break_loop; | |
2306 unsigned int temp_str_len; | |
2307 char* tmp_pos; | |
2308 int decode_step; | |
2309 int item_counter; | |
2310 | |
0 | 2311 if ( pMapStatsTXT_Raw ) |
1583 | 2312 free(pMapStatsTXT_Raw); |
237 | 2313 pMapStatsTXT_Raw = NULL; |
0 | 2314 pMapStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("MapStats.txt", 0); |
2315 strtok(pMapStatsTXT_Raw, "\r"); | |
237 | 2316 strtok(NULL, "\r"); |
2317 strtok(NULL, "\r"); | |
2318 | |
2319 for (i=1; i<77; ++i) | |
2320 { | |
2321 test_string = strtok(NULL, "\r") + 1; | |
2322 break_loop = false; | |
2323 decode_step=0; | |
2324 do | |
2325 { | |
2326 c = *(unsigned char*)test_string; | |
2327 temp_str_len = 0; | |
2328 while((c!='\t')&&(c>0)) | |
2329 { | |
2330 ++temp_str_len; | |
2331 c=test_string[temp_str_len]; | |
2332 } | |
2333 tmp_pos=test_string+temp_str_len; | |
2334 if (*tmp_pos == 0) | |
2335 break_loop = true; | |
2336 *tmp_pos = 0; | |
2337 if (temp_str_len) | |
2338 { | |
2339 switch (decode_step) | |
2340 { | |
2341 case 1: | |
2342 pInfos[i].pName = RemoveQuotes(test_string); | |
2343 break; | |
2344 case 2: | |
2345 pInfos[i].pFilename = RemoveQuotes(test_string); | |
2346 break; | |
2347 case 3: | |
2348 pInfos[i].uNumResets = atoi(test_string); | |
2349 break; | |
2350 case 4: | |
2351 pInfos[i].uFirstVisitedAt = atoi(test_string); | |
2352 break; | |
2353 case 5: | |
2354 pInfos[i]._per = atoi(test_string); | |
2355 break; | |
2356 case 6: | |
2357 pInfos[i].uRespawnIntervalDays = atoi(test_string); | |
2358 break; | |
2359 case 7: | |
2360 pInfos[i]._alert_days = atoi(test_string); | |
2361 break; | |
2362 case 8: | |
2363 pInfos[i]._steal_perm = atoi(test_string); | |
2364 break; | |
2365 case 9: | |
2366 pInfos[i].LockX5 = atoi(test_string); | |
2367 break; | |
2368 case 10: | |
2369 pInfos[i].Trap_D20 = atoi(test_string); | |
2370 break; | |
2371 case 11: | |
2372 pInfos[i].Treasure_prob = atoi(test_string); | |
2373 break; | |
2374 case 12: | |
2375 pInfos[i].Encounter_percent = atoi(test_string); | |
2376 break; | |
2377 case 13: | |
2378 pInfos[i].EncM1percent = atoi(test_string); | |
2379 break; | |
2380 case 14: | |
2381 pInfos[i].EncM2percent = atoi(test_string); | |
2382 break; | |
2383 case 15: | |
2384 pInfos[i].EncM3percent = atoi(test_string); | |
2385 break; | |
2386 case 16: | |
2387 pInfos[i].pEncounterMonster1Texture = RemoveQuotes(test_string); | |
2388 break; | |
2389 case 18: | |
2390 pInfos[i].Dif_M1 = atoi(test_string); | |
2391 break; | |
2392 case 19: | |
2393 pInfos[i].uEncounterMonster1AtLeast = 1; | |
2394 pInfos[i].uEncounterMonster1AtMost = 1; | |
2395 strcpy(work_str, test_string); | |
2396 work_str_pos = 0; | |
2397 work_str_len=strlen(work_str); | |
2398 if (work_str_len ) | |
2399 { | |
2400 while (work_str[work_str_pos] != '-' ) | |
2401 { | |
2402 ++work_str_pos; | |
2403 if (work_str_pos >= work_str_len ) | |
2404 break; | |
2405 } | |
2406 work_str[work_str_pos] = 0; | |
2407 pInfos[i].uEncounterMonster1AtLeast = atoi(work_str); | |
2408 if ( work_str_pos < work_str_len ) | |
2409 pInfos[i].uEncounterMonster1AtMost = atoi(&work_str[work_str_pos + 1]); | |
2410 else | |
2411 pInfos[i].uEncounterMonster1AtMost = pInfos[i].uEncounterMonster1AtLeast; | |
2412 } | |
2413 break; | |
2414 case 20: | |
2415 pInfos[i].pEncounterMonster2Texture = RemoveQuotes(test_string); | |
2416 break; | |
2417 case 22: | |
2418 pInfos[i].Dif_M2 = atoi(test_string); | |
2419 break; | |
2420 case 23: | |
2421 pInfos[i].uEncounterMonster2AtLeast = 1; | |
2422 pInfos[i].uEncounterMonster2AtMost = 1; | |
2423 strcpy(work_str, test_string); | |
2424 work_str_pos = 0; | |
2425 work_str_len=strlen(work_str); | |
2426 if (work_str_len ) | |
2427 { | |
2428 while (work_str[work_str_pos] != '-' ) | |
2429 { | |
2430 ++work_str_pos; | |
2431 if (work_str_pos >= work_str_len ) | |
2432 break; | |
2433 } | |
2434 work_str[work_str_pos] = 0; | |
2435 pInfos[i].uEncounterMonster2AtLeast = atoi(work_str); | |
2436 if ( work_str_pos < work_str_len ) | |
2437 pInfos[i].uEncounterMonster2AtMost = atoi(&work_str[work_str_pos + 1]); | |
2438 else | |
2439 pInfos[i].uEncounterMonster2AtMost = pInfos[i].uEncounterMonster2AtLeast; | |
2440 } | |
2441 break; | |
2442 case 24: | |
2443 pInfos[i].pEncounterMonster3Texture = RemoveQuotes(test_string); | |
2444 break; | |
2445 case 26: | |
2446 pInfos[i].Dif_M3 = atoi(test_string); | |
2447 break; | |
2448 case 27: | |
2449 pInfos[i].uEncounterMonster3AtLeast = 1; | |
2450 pInfos[i].uEncounterMonster3AtMost = 1; | |
2451 strcpy(work_str, test_string); | |
2452 work_str_pos = 0; | |
2453 work_str_len=strlen(work_str); | |
2454 if (work_str_len ) | |
2455 { | |
2456 while (work_str[work_str_pos] != '-' ) | |
2457 { | |
2458 ++work_str_pos; | |
2459 if (work_str_pos >= work_str_len ) | |
2460 break; | |
2461 } | |
2462 work_str[work_str_pos] = 0; | |
2463 pInfos[i].uEncounterMonster3AtLeast = atoi(work_str); | |
2464 if ( work_str_pos < work_str_len ) | |
2465 pInfos[i].uEncounterMonster3AtMost = atoi(&work_str[work_str_pos + 1]); | |
2466 else | |
2467 pInfos[i].uEncounterMonster3AtMost = pInfos[i].uEncounterMonster3AtLeast; | |
2468 } | |
2469 break; | |
2470 case 28: | |
2471 pInfos[i].uRedbookTrackID = atoi(test_string); | |
2472 break; | |
2473 case 29: | |
2474 { | |
2475 if ( !strcmp(test_string, "CAVE") ) | |
2476 { | |
2477 pInfos[i].uEAXEnv = 8; | |
2478 break; | |
2479 } | |
2480 if ( !strcmp(test_string, "STONEROOM") ) | |
2481 { | |
2482 pInfos[i].uEAXEnv = 5; | |
2483 break; | |
2484 } | |
2485 if ( !strcmp(test_string, "MOUNTAINS") ) | |
2486 { | |
2487 pInfos[i].uEAXEnv = 17; | |
2488 break; | |
2489 } | |
2490 if ( !strcmp(test_string, "PLAIN") ) | |
2491 { | |
2492 pInfos[i].uEAXEnv = 19; | |
2493 break; | |
2494 } | |
2495 if ( !strcmp(test_string, "FOREST") ) | |
2496 { | |
2497 pInfos[i].uEAXEnv = 15; | |
2498 break; | |
2499 } | |
2500 if ( !strcmp(test_string, "CITY") ) | |
2501 { | |
2502 pInfos[i].uEAXEnv = 16; | |
2503 break; | |
2504 } | |
2505 if ( !strcmp(test_string, "UNDERWATER") ) | |
2506 { | |
2507 pInfos[i].uEAXEnv = 22; | |
2508 break; | |
2509 } | |
2510 if ( !strcmp(test_string, "ARENA") ) | |
2511 { | |
2512 pInfos[i].uEAXEnv = 9; | |
2513 break; | |
2514 } | |
2515 if ( !strcmp(test_string, "GENERIC") ) | |
2516 { | |
2517 pInfos[i].uEAXEnv = 0; | |
2518 break; | |
2519 } | |
2520 if ( !strcmp(test_string, "PADDEDCELL") ) | |
2521 { | |
2522 pInfos[i].uEAXEnv = 1; | |
2523 break; | |
2524 } | |
2525 if ( !strcmp(test_string, "ROOM") ) | |
2526 { | |
2527 pInfos[i].uEAXEnv = 2; | |
2528 break; | |
2529 } | |
2530 if ( !strcmp(test_string, "BATHROOM") ) | |
2531 { | |
2532 pInfos[i].uEAXEnv = 3; | |
2533 break; | |
2534 } | |
2535 if ( !strcmp(test_string, "LIVINGROOM") ) | |
2536 { | |
2537 pInfos[i].uEAXEnv = 4; | |
2538 break; | |
2539 } | |
2540 if ( !strcmp(test_string, "AUDITORIUM") ) | |
2541 { | |
2542 pInfos[i].uEAXEnv = 6; | |
2543 break; | |
2544 } | |
2545 if ( !strcmp(test_string, "CONCERTHALL") ) | |
2546 { | |
2547 pInfos[i].uEAXEnv = 7; | |
2548 break; | |
2549 } | |
2550 if ( !strcmp(test_string, "HANGAR") ) | |
2551 { | |
2552 pInfos[i].uEAXEnv = 10; | |
2553 break; | |
2554 } | |
2555 if ( !strcmp(test_string, "CARPETEDHALLWAY") ) | |
2556 { | |
2557 pInfos[i].uEAXEnv = 11; | |
2558 break; | |
2559 } | |
2560 if ( !strcmp(test_string, "HALLWAY") ) | |
2561 { | |
2562 pInfos[i].uEAXEnv = 12; | |
2563 break; | |
2564 } | |
2565 if ( !strcmp(test_string, "STONECORRIDOR") ) | |
2566 { | |
2567 pInfos[i].uEAXEnv = 13; | |
2568 break; | |
2569 } | |
2570 if ( !strcmp(test_string, "ALLEY") ) | |
2571 { | |
2572 pInfos[i].uEAXEnv = 14; | |
2573 break; | |
2574 } | |
2575 if ( !strcmp(test_string, "QUARRY") ) | |
2576 { | |
2577 pInfos[i].uEAXEnv = 18; | |
2578 break; | |
2579 } | |
2580 if ( !strcmp(test_string, "PARKINGLOT") ) | |
2581 { | |
2582 pInfos[i].uEAXEnv = 20; | |
2583 break; | |
2584 } | |
2585 if ( !strcmp(test_string, "SEWERPIPE") ) | |
2586 { | |
2587 pInfos[i].uEAXEnv = 21; | |
2588 break; | |
2589 } | |
2590 if ( !strcmp(test_string, "DRUGGED") ) | |
2591 { | |
2592 pInfos[i].uEAXEnv = 23; | |
2593 break; | |
2594 } | |
2595 if ( !strcmp(test_string, "DIZZY") ) | |
2596 { | |
2597 pInfos[i].uEAXEnv = 24; | |
2598 break; | |
2599 } | |
2600 if ( !strcmp(test_string, "PSYCHOTIC") ) | |
2601 { | |
2602 pInfos[i].uEAXEnv = 25; | |
2603 break; | |
2604 } | |
2605 pInfos[i].uEAXEnv = 26; | |
2606 | |
2607 } | |
2608 break; | |
2609 } | |
2610 } | |
2611 else | |
2612 { | |
2613 break_loop = true; | |
2614 } | |
2615 ++decode_step; | |
2616 test_string=tmp_pos+1; | |
2617 } while ((decode_step<31)&&!break_loop); | |
2618 } | |
2619 | |
2620 uNumMaps = 77; | |
0 | 2621 } |
2622 // 453F62: using guessed type char Str[32]; | |
2623 | |
2624 //----- (004547A3) -------------------------------------------------------- | |
767 | 2625 MAP_TYPE MapStats::GetMapInfo(const char *Str2) |
2626 { | |
2627 assert(uNumMaps >= 2); | |
2628 | |
2629 for (uint i = 1; i < uNumMaps; ++i) | |
1165
29a8defbad9e
temporary _CRT_SECURE_NO_WARNINGS to remove some warnings
Grumpy7
parents:
1150
diff
changeset
|
2630 if (!_stricmp(pInfos[i].pFilename, Str2)) |
767 | 2631 return (MAP_TYPE)i; |
2632 | |
2633 assert(false && "Map not found!"); | |
0 | 2634 } |
2635 | |
2636 //----- (004547E4) -------------------------------------------------------- | |
2637 void FactionTable::Initialize() | |
2638 { | |
237 | 2639 int i; |
2640 char* test_string; | |
2641 unsigned char c; | |
2642 bool break_loop; | |
2643 unsigned int temp_str_len; | |
2644 char* tmp_pos; | |
2645 int decode_step; | |
2646 int item_counter; | |
2647 | |
0 | 2648 if ( pHostileTXT_Raw ) |
1583 | 2649 free(pHostileTXT_Raw); |
237 | 2650 pHostileTXT_Raw = NULL; |
0 | 2651 pHostileTXT_Raw = (char *)pEvents_LOD->LoadRaw("hostile.txt", 0); |
2652 strtok(pHostileTXT_Raw, "\r"); | |
2101 | 2653 for ( i=0; i < 89; ++i ) |
2654 { | |
2655 test_string = strtok(NULL, "\r") + 1; | |
2656 break_loop = false; | |
2657 decode_step=0; | |
2658 do | |
2659 { | |
2660 c = *(unsigned char*)test_string; | |
2661 temp_str_len = 0; | |
2662 while((c!='\t') && (c > 0)) | |
2663 { | |
2664 ++temp_str_len; | |
2665 c = test_string[temp_str_len]; | |
2666 } | |
2667 tmp_pos=test_string+temp_str_len; | |
2668 if (*tmp_pos == 0) | |
2669 break_loop = true; | |
2670 *tmp_pos = 0; | |
2671 if (temp_str_len) | |
2672 { | |
2673 if ( decode_step >= 1 && decode_step < 90 ) | |
2674 relations[decode_step-1][i] = atoi(test_string); | |
2675 } | |
2676 else | |
2677 break_loop = true; | |
2678 ++decode_step; | |
2679 test_string=tmp_pos+1; | |
2680 } | |
2681 while ((decode_step < 92) && !break_loop ); | |
2682 } | |
237 | 2683 if ( pHostileTXT_Raw) |
0 | 2684 { |
1583 | 2685 free(pHostileTXT_Raw); |
237 | 2686 pHostileTXT_Raw = NULL; |
0 | 2687 } |
2688 } | |
2689 | |
2690 //----- (00458244) -------------------------------------------------------- | |
1783 | 2691 unsigned int SkillToMastery( unsigned int skill_value ) |
1067 | 2692 { |
1064 | 2693 switch (skill_value & 0x1C0) |
983 | 2694 { |
2695 case 0x100: return 4; // Grandmaster | |
2696 case 0x80: return 3; // Master | |
2697 case 0x40: return 2; // Expert | |
2698 case 0x00: return 1; // Normal | |
1409
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2699 } |
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2700 assert(false); |
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2701 return 0; |
0 | 2702 } |
2703 | |
2704 //----- (0045828B) -------------------------------------------------------- | |
2705 unsigned int __fastcall GetSpellColor(signed int a1) | |
2706 { | |
1799 | 2707 if ( a1 == 0 ) |
2069 | 2708 return Color16(0, 0, 0); |
1799 | 2709 if ( a1 < 12 ) |
2069 | 2710 return Color16(255, 85, 0); |
1799 | 2711 if ( a1 < 23 ) |
2069 | 2712 return Color16(150, 212, 255); |
1799 | 2713 if ( a1 < 34 ) |
2069 | 2714 return Color16(0, 128, 255); |
1799 | 2715 if ( a1 < 45 ) |
2069 | 2716 return Color16(128, 128, 128); |
1799 | 2717 if ( a1 < 56 ) |
2069 | 2718 return Color16(225, 225, 225); |
1799 | 2719 if ( a1 < 67 ) |
2069 | 2720 return Color16(235, 15, 255); |
1799 | 2721 if ( a1 < 78 ) |
2069 | 2722 return Color16(255, 128, 0); |
1799 | 2723 if ( a1 < 89 ) |
2069 | 2724 return Color16(255, 255, 155); |
1799 | 2725 if ( a1 < 100 ) |
2069 | 2726 return Color16(192, 192, 240); |
0 | 2727 } |
2728 | |
2729 //----- (004610AA) -------------------------------------------------------- | |
1637 | 2730 void __fastcall PrepareToLoadODM(unsigned int bLoading, ODMRenderParams *a2) |
0 | 2731 { |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
2732 pGameLoadingUI_ProgressBar->Reset(27); |
0 | 2733 pSoundList->_4A9D79(0); |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
2734 uCurrentlyLoadedLevelType = LEVEL_Outdoor; |
2099 | 2735 ODM_LoadAndInitialize(pCurrentMapName, a2); |
2736 if ( !bLoading ) | |
0 | 2737 TeleportToStartingPoint(uLevel_StartingPointType); |
2738 viewparams->_443365(); | |
2739 PlayLevelMusic(); | |
2740 } | |
2741 // 6BE35C: using guessed type int uLevel_StartingPointType; | |
2742 | |
2743 //----- (00461103) -------------------------------------------------------- | |
1640
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2744 void _461103_load_level_sub() |
0 | 2745 { |
2746 //GUIProgressBar *v0; // ebx@1 | |
2747 //signed int v1; // ebp@1 | |
2748 //char *v2; // esi@2 | |
2101 | 2749 //__int16 v3; // cx@3 |
0 | 2750 int v4; // edx@8 |
2751 //size_t v5; // edi@14 | |
2752 signed int v6; // esi@14 | |
2753 //char *v7; // edx@15 | |
2754 signed int v8; // ecx@16 | |
2755 int v9; // ecx@23 | |
2756 MonsterInfo *v10; // ebx@23 | |
2757 //int *v11; // esi@23 | |
2758 int v12; // esi@25 | |
2759 int v13; // eax@26 | |
2760 __int16 v14; // ax@41 | |
2761 //signed int v15; // [sp+10h] [bp-4Ch]@1 | |
2762 //signed int v16; // [sp+10h] [bp-4Ch]@14 | |
2763 signed int v17; // [sp+14h] [bp-48h]@3 | |
2764 signed int v18; // [sp+14h] [bp-48h]@23 | |
2765 int v19; // [sp+18h] [bp-44h]@1 | |
2766 signed int v20; // [sp+18h] [bp-44h]@14 | |
2767 int v21[16]; // [sp+1Ch] [bp-40h]@17 | |
2768 | |
598 | 2769 GenerateItemsInChest(); |
0 | 2770 pGameLoadingUI_ProgressBar->Progress(); |
2101 | 2771 pParty->uFlags |= 2; |
0 | 2772 pParty->field_7B5_in_arena_quest = 0; |
2773 dword_5C6DF8 = 1; | |
291 | 2774 pNPCStats->uNewlNPCBufPos = 0; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
2775 v19 = pMapStats->GetMapInfo(pCurrentMapName); |
0 | 2776 |
2777 //v15 = 0; | |
2778 for (uint i = 0; i < uNumActors; ++i) | |
2779 //if ( (signed int)uNumActors > 0 ) | |
2780 { | |
2099 | 2781 //Actor* pActor = &pActors[i]; |
0 | 2782 //v2 = (char *)&pActors[0].uNPC_ID; |
2783 //do | |
2784 //{ | |
2101 | 2785 //v3 = pActors[i].pMonsterInfo.uID; |
0 | 2786 v17 = 0; |
2099 | 2787 if ( pActors[i].pMonsterInfo.uID >= 115 && pActors[i].pMonsterInfo.uID <= 186 |
2788 || pActors[i].pMonsterInfo.uID >= 232 && pActors[i].pMonsterInfo.uID <= 249 ) | |
0 | 2789 v17 = 1; |
2790 //v1 = 0; | |
2101 | 2791 v4 = (pActors[i].pMonsterInfo.uID - 1) % 3; |
0 | 2792 if ( 2 == v4 ) |
2793 { | |
2099 | 2794 if ( pActors[i].sNPC_ID && pActors[i].sNPC_ID < 5000 ) |
0 | 2795 continue; |
2796 } | |
2797 else | |
2798 { | |
2799 if ( v4 != 1 ) | |
2800 { | |
2099 | 2801 if ( v4 == 0 && pActors[i].sNPC_ID == 0 ) |
2101 | 2802 pActors[i].sNPC_ID = 0; |
2803 continue; | |
0 | 2804 } |
2805 } | |
2099 | 2806 if ( pActors[i].sNPC_ID > 0 && pActors[i].sNPC_ID < 5000 ) |
0 | 2807 continue; |
2808 if ( v17 ) | |
2809 { | |
2101 | 2810 pNPCStats->InitializeAdditionalNPCs(&pNPCStats->pAdditionalNPC[pNPCStats->uNewlNPCBufPos], pActors[i].pMonsterInfo.uID, 0, v19); |
291 | 2811 v14 = LOWORD(pNPCStats->uNewlNPCBufPos) + 5000; |
2812 ++pNPCStats->uNewlNPCBufPos; | |
2099 | 2813 pActors[i].sNPC_ID = v14; |
0 | 2814 continue; |
2815 } | |
2099 | 2816 pActors[i].sNPC_ID = 0; |
0 | 2817 //++v15; |
2818 //v2 += 836; | |
2819 //} | |
2820 //while ( v15 < (signed int)uNumActors ); | |
2821 } | |
2822 | |
2823 pGameLoadingUI_ProgressBar->Progress(); | |
2824 | |
2825 //v5 = uNumActors; | |
2826 v6 = 0; | |
2827 v20 = 0; | |
2828 //v16 = v1; | |
2829 | |
2830 for (uint i = 0; i < uNumActors; ++i) | |
2831 { | |
2832 //v7 = (char *)&pActors[0].pMonsterInfo; | |
2833 //do | |
2834 //{ | |
2101 | 2835 for ( v8 = 0; v8 < v6; ++v8 ) |
2836 { | |
2837 if ( v21[v8] == pActors[i].pMonsterInfo.uID - 1 ) | |
2838 break; | |
2839 } | |
2840 | |
2841 if ( v8 == v6 ) | |
2842 { | |
2843 v21[v6++] = pActors[i].pMonsterInfo.uID - 1; | |
2844 v20 = v6; | |
2845 if ( v6 == 16 ) | |
2846 break; | |
2847 } | |
2848 //++v16; | |
2849 //v7 += 836; | |
0 | 2850 //} |
2851 //while ( v16 < (signed int)v5 ); | |
2852 } | |
2853 | |
2854 pGameLoadingUI_ProgressBar->Progress(); | |
2855 | |
2101 | 2856 for ( int _v0 = 0; _v0 < v6; ++_v0 ) |
0 | 2857 { |
2101 | 2858 for ( v18 = 4; v18; --v18 ) |
2859 pSoundList->LoadSound(pMonsterList->pMonsters[v21[_v0]].pSoundSampleIDs[4 - v18], 0); | |
0 | 2860 v12 = 0; |
2861 do | |
2101 | 2862 v13 = pSoundList->LoadSound(v12++ + word_4EE088_sound_ids[pMonsterStats->pInfos[v21[_v0] + 1].uSpell1ID], 1); |
0 | 2863 while ( v13 ); |
2864 } | |
2865 //v0 = pGameLoadingUI_ProgressBar; | |
2866 //v1 = 0; | |
2867 | |
2868 pGameLoadingUI_ProgressBar->Progress(); | |
2869 | |
2061 | 2870 if (dword_6BE368_debug_settings_2 & DEBUG_SETTINGS_NO_ACTORS) |
0 | 2871 uNumActors = 0; |
2061 | 2872 if ( dword_6BE368_debug_settings_2 & DEBUG_SETTINGS_NO_DECORATIONS) |
0 | 2873 uNumLevelDecorations = 0; |
1459 | 2874 init_event_triggers(); |
0 | 2875 |
2876 pGameLoadingUI_ProgressBar->Progress(); | |
1638
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
2877 |
1640
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2878 pGame->pIndoorCameraD3D->vPartyPos.x = 0; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2879 pGame->pIndoorCameraD3D->vPartyPos.y = 0; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2880 pGame->pIndoorCameraD3D->vPartyPos.z = 100; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2881 pGame->pIndoorCameraD3D->sRotationX = 0; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2882 pGame->pIndoorCameraD3D->sRotationY = 0; |
1638
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
2883 viewparams->bRedrawGameUI = true; |
783 | 2884 uLevel_StartingPointType = MapStartPoint_Party; |
0 | 2885 pSprites_LOD->_461397(); |
2886 pPaletteManager->LockTestAll(); | |
2887 if ( pParty->pPickedItem.uItemID != 0 ) | |
2888 pMouse->SetCursorBitmapFromItemID(pParty->pPickedItem.uItemID); | |
2889 } | |
2890 | |
2891 //----- (004613C4) -------------------------------------------------------- | |
1459 | 2892 void init_event_triggers() |
0 | 2893 { |
1459 | 2894 uint id = pDecorationList->GetDecorIdByName("Event Trigger"); |
2895 | |
2896 num_event_triggers = 0; | |
2897 for (uint i = 0; i < uNumLevelDecorations; ++i) | |
2898 if (pLevelDecorations[i].uDecorationDescID == id) | |
2899 event_triggers[num_event_triggers++] = i; | |
0 | 2900 } |
2901 | |
2902 //----- (004627B7) -------------------------------------------------------- | |
762 | 2903 void MainMenu_Loop() |
0 | 2904 { |
2905 GUIButton *pButton; // eax@27 | |
2906 unsigned int pControlParam; // ecx@35 | |
2907 int v10; // ecx@36 | |
2908 int v11; // ecx@37 | |
2909 unsigned int pY; // [sp-18h] [bp-54h]@39 | |
2910 Texture *pTexture; // [sp-14h] [bp-50h]@39 | |
2911 GUIButton *pButton2; // [sp+0h] [bp-3Ch]@27 | |
2912 GUIWindow *pWindow; // [sp+4h] [bp-38h]@11 | |
2913 | |
151 | 2914 pCurrentScreen = SCREEN_GAME; |
1038 | 2915 |
0 | 2916 pGUIWindow2 = 0; |
2917 pAudioPlayer->StopChannels(-1, -1); | |
2918 pMouse->RemoveHoldingItem(); | |
762 | 2919 |
2920 pIcons_LOD->_inlined_sub2(); | |
2921 | |
165 | 2922 pWindow_MainMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); |
1980 | 2923 Texture* pNew = pIcons_LOD->LoadTexturePtr("title_new", TEXTURE_16BIT_PALETTE); |
2924 Texture* pLoad = pIcons_LOD->LoadTexturePtr("title_load", TEXTURE_16BIT_PALETTE); | |
2925 Texture* pCredits = pIcons_LOD->LoadTexturePtr("title_cred", TEXTURE_16BIT_PALETTE); | |
2926 Texture* pExit = pIcons_LOD->LoadTexturePtr("title_exit", TEXTURE_16BIT_PALETTE); | |
948 | 2927 |
2928 pMainMenu_BtnNew = pWindow_MainMenu->CreateButton(495, 172, pNew->uTextureWidth, pNew->uTextureHeight, 1, 0, UIMSG_MainMenu_ShowPartyCreationWnd, 0, 'N', "", pNew, 0); | |
2929 pMainMenu_BtnLoad = pWindow_MainMenu->CreateButton(495, 227, pLoad->uTextureWidth, pLoad->uTextureHeight, 1, 0, UIMSG_MainMenu_ShowLoadWindow, 1, 'L', "", pLoad, 0); | |
2930 pMainMenu_BtnCredits = pWindow_MainMenu->CreateButton(495, 282, pCredits->uTextureWidth, pCredits->uTextureHeight, 1, 0, UIMSG_ShowCredits, 2, 'C', "", pCredits, 0); | |
2931 pMainMenu_BtnExit = pWindow_MainMenu->CreateButton(495, 337, pExit->uTextureWidth, pExit->uTextureHeight, 1, 0, UIMSG_ExitToWindows, 3, 0, "", pExit, 0); | |
2932 | |
0 | 2933 pTexture_PCX.Release(); |
2934 pTexture_PCX.Load("title.pcx", 0); | |
2935 SetCurrentMenuID(MENU_MAIN); | |
1984 | 2936 SetForegroundWindow(window->GetApiHandle()); |
2937 SendMessageW(window->GetApiHandle(), WM_ACTIVATEAPP, 1, 0); | |
0 | 2938 while (GetCurrentMenuID() == MENU_MAIN || GetCurrentMenuID() == MENU_SAVELOAD) |
2939 { | |
2940 POINT pt; | |
2941 pMouse->GetCursorPos(&pt); | |
2942 pWindow = pWindow_MainMenu; | |
165 | 2943 if ( GetCurrentMenuID() == MENU_SAVELOAD) |
0 | 2944 { |
151 | 2945 if ( pCurrentScreen != SCREEN_LOADGAME ) |
0 | 2946 { |
2947 pTexture_PCX.Release(); | |
2948 pTexture_PCX.Load("lsave640.pcx", 0); | |
2949 pGUIWindow2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); | |
151 | 2950 pCurrentScreen = SCREEN_LOADGAME; |
1033 | 2951 LoadUI_Load(0); |
0 | 2952 } |
2953 pWindow = pGUIWindow_CurrentMenu; | |
2954 } | |
2955 | |
2061 | 2956 for (MSG msg; PeekMessageW(&msg, 0, 0, 0, PM_REMOVE);) |
0 | 2957 { |
2958 if (msg.message == WM_QUIT) | |
2959 Game_DeinitializeAndTerminate(0); | |
2960 TranslateMessage(&msg); | |
2061 | 2961 DispatchMessageW(&msg); |
0 | 2962 } |
2061 | 2963 |
2964 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE) | |
0 | 2965 { |
2966 WaitMessage(); | |
2061 | 2967 continue; |
0 | 2968 } |
2061 | 2969 |
0 | 2970 pRenderer->BeginScene(); |
2971 pRenderer->DrawTextureRGB(0, 0, &pTexture_PCX); | |
1038 | 2972 |
165 | 2973 GUI_MainMenuMessageProc(); |
0 | 2974 GUI_UpdateWindows(); |
1038 | 2975 |
165 | 2976 if (GetCurrentMenuID() != MENU_MAIN) |
2977 { | |
961 | 2978 if (GetCurrentMenuID() == MENU_LoadingProcInMainMenu) |
0 | 2979 { |
1405
c0b273d33338
RemoveTexturesPackFromTextureList and RemoveTexturesFromTextureList
Ritor1
parents:
1404
diff
changeset
|
2980 pIcons_LOD->RemoveTexturesPackFromTextureList(); |
0 | 2981 pGUIWindow_CurrentMenu->Release(); |
2982 pGUIWindow_CurrentMenu = 0; | |
151 | 2983 pCurrentScreen = SCREEN_GAME; |
0 | 2984 viewparams->bRedrawGameUI = 1; |
2985 } | |
2986 } | |
2987 else | |
2988 { | |
1458 | 2989 if ( !pModalWindow )// ??? |
0 | 2990 { |
2991 pButton = pWindow->pControlsHead; | |
2992 for ( pButton = pWindow->pControlsHead; pButton; pButton = pButton->pNext ) | |
2993 { | |
2994 if ( pt.x >= (signed int)pButton->uX && pt.x <= (signed int)pButton->uZ | |
2995 && pt.y >= (signed int)pButton->uY && pt.y <= (signed int)pButton->uW | |
2996 && pWindow == pWindow_MainMenu ) | |
2997 { | |
832 | 2998 pControlParam = pButton->msg_param; |
0 | 2999 switch (pControlParam) // ïîäñâåòêà êíîïîê |
3000 { | |
3001 case 0: | |
3002 pTexture = pNew; | |
3003 pY = 172; | |
3004 break; | |
3005 case 1: | |
3006 pTexture = pLoad; | |
3007 pY = 227; | |
3008 break; | |
3009 case 2: | |
3010 pTexture = pCredits; | |
3011 pY = 282; | |
3012 break; | |
3013 case 3: | |
3014 pTexture = pExit; | |
3015 pY = 337; | |
3016 break; | |
3017 } | |
3018 pRenderer->DrawTextureIndexed(495, pY, pTexture); //ïîäñâåòêà êíîïîê | |
3019 } | |
3020 } | |
3021 } | |
3022 } | |
3023 pRenderer->EndScene(); | |
3024 pRenderer->Present(); | |
3025 } | |
970 | 3026 GUI_MainMenuMessageProc(); |
0 | 3027 pRenderer->BeginScene(); |
3028 GUI_UpdateWindows(); | |
3029 pRenderer->EndScene(); | |
3030 pRenderer->Present(); | |
961 | 3031 pTexture_PCX.Release(); |
0 | 3032 if ( pGUIWindow2 ) |
3033 { | |
3034 pGUIWindow2->Release(); | |
3035 pGUIWindow2 = 0; | |
3036 } | |
3037 pWindow_MainMenu->Release(); | |
1405
c0b273d33338
RemoveTexturesPackFromTextureList and RemoveTexturesFromTextureList
Ritor1
parents:
1404
diff
changeset
|
3038 pIcons_LOD->RemoveTexturesPackFromTextureList(); |
0 | 3039 } |
3040 | |
3041 | |
3042 //----- (00464479) -------------------------------------------------------- | |
1583 | 3043 void ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows() |
0 | 3044 { |
3045 int v0; // esi@9 | |
3046 | |
3047 if (pMouse) | |
3048 pMouse->SetCursorBitmap("MICON1"); | |
3049 | |
3050 pPaletteManager->ResetNonLocked(); | |
3051 pBitmaps_LOD->ReleaseAll2(); | |
3052 pSprites_LOD->DeleteSomeOtherSprites(); | |
3053 pIcons_LOD->ReleaseAll2(); | |
2152 | 3054 |
0 | 3055 if (uCurrentlyLoadedLevelType == LEVEL_Indoor) |
3056 pIndoor->Release(); | |
3057 else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) | |
1583 | 3058 pOutdoor->Release(); |
0 | 3059 |
3060 pAudioPlayer->StopChannels(-1, -1); | |
3061 pSoundList->_4A9D79(0); | |
3062 uCurrentlyLoadedLevelType = LEVEL_null; | |
3063 pSpriteFrameTable->ResetSomeSpriteFlags(); | |
3064 v0 = uNumVisibleWindows; | |
349 | 3065 pParty->armageddon_timer = 0; |
0 | 3066 while ( v0 > 0 ) |
3067 pWindowList[pVisibleWindowsIdxs[v0--] - 1].Release(); | |
3068 } | |
3069 | |
3070 //----- (004646F0) -------------------------------------------------------- | |
1458 | 3071 void PrepareWorld(unsigned int _0_box_loading_1_fullscreen) |
0 | 3072 { |
3073 if ( pRenderer->pRenderD3D ) | |
3074 pGame->pVisInstance->_4C1A02(); | |
3075 pEventTimer->Pause(); | |
3076 pMiscTimer->Pause(); | |
3077 pParty->uFlags = 2; | |
1517 | 3078 CastSpellInfoHelpers::_427D48(); |
0 | 3079 ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows(); |
1458 | 3080 DoPrepareWorld(0, (_0_box_loading_1_fullscreen == 0) + 1); |
0 | 3081 pMiscTimer->Resume(); |
3082 pEventTimer->Resume(); | |
3083 } | |
3084 | |
3085 //----- (00464761) -------------------------------------------------------- | |
1583 | 3086 void Game_DeinitializeAndTerminate(int exitCode) |
0 | 3087 { |
1586 | 3088 SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); |
0 | 3089 ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows(); |
3090 pGame->Deinitialize(); | |
3091 pRenderer->Release2(); | |
1802 | 3092 delete window; |
3093 //if ( !DestroyWindow(hWnd) ) | |
3094 // GetLastError(); | |
1583 | 3095 exit(exitCode); |
0 | 3096 } |
3097 | |
3098 //----- (004647AB) -------------------------------------------------------- | |
762 | 3099 void FinalInitialization() |
0 | 3100 { |
3101 pViewport->SetScreen(viewparams->uSomeX, viewparams->uSomeY, viewparams->uSomeZ, viewparams->uSomeW); | |
2151 | 3102 pViewport->SetFOV(flt_6BE3A0 * 65536.0f); |
0 | 3103 |
1638
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
3104 //pIndoorCamera = new IndoorCamera; |
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
3105 //pIndoorCamera->Initialize(65, viewparams->uScreen_BttmR_X - viewparams->uScreen_topL_X + 1, |
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
3106 // viewparams->uScreen_BttmR_Y - viewparams->uScreen_topL_Y + 1); |
0 | 3107 |
3108 InitializeTurnBasedAnimations(&stru_50C198); | |
762 | 3109 pBitmaps_LOD->_inlined_sub1(); |
3110 pSprites_LOD->_inlined_sub1(); | |
3111 pIcons_LOD->_inlined_sub1(); | |
0 | 3112 } |
3113 // 6BE3A0: using guessed type float flt_6BE3A0; | |
3114 | |
3115 //----- (00464839) -------------------------------------------------------- | |
1583 | 3116 char Is_out15odm_underwater() |
0 | 3117 { |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3118 return _stricmp(pCurrentMapName, "out15.odm") == 0; |
0 | 3119 } |
3120 | |
3121 //----- (00464851) -------------------------------------------------------- | |
1583 | 3122 void SetUnderwaterFog() |
0 | 3123 { |
3124 day_fogrange_1 = 50; | |
3125 day_fogrange_2 = 5000; | |
3126 } | |
3127 | |
3128 //----- (00464866) -------------------------------------------------------- | |
1458 | 3129 void DoPrepareWorld(unsigned int bLoading, int _1_fullscreen_loading_2_box) |
0 | 3130 { |
1458 | 3131 //int v2; // esi@1 |
0 | 3132 char *v3; // eax@1 |
3133 //char *v4; // eax@1 | |
3134 unsigned int v5; // eax@3 | |
3135 //size_t v6; // ecx@10 | |
3136 //char *v7; // eax@11 | |
3137 char Str1[20]; // [sp+Ch] [bp-18h]@1 | |
3138 unsigned int v9; // [sp+20h] [bp-4h]@1 | |
3139 | |
3140 v9 = bLoading; | |
3141 ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows(); | |
3142 pDecalBuilder->Reset(0); | |
1458 | 3143 pGameLoadingUI_ProgressBar->Initialize(_1_fullscreen_loading_2_box == 1 ? GUIProgressBar::TYPE_Fullscreen : |
3144 GUIProgressBar::TYPE_Box); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3145 strcpy(Str1, pCurrentMapName); |
0 | 3146 v3 = strtok(Str1, "."); |
3147 strcpy(Str1, v3); | |
3148 Level_LoadEvtAndStr(Str1); | |
3149 LoadLevel_InitializeLevelEvt(); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3150 strcpy(Str1, pCurrentMapName); |
0 | 3151 _strrev(Str1); |
3152 strtok(Str1, "."); | |
3153 _strrev(Str1); | |
3154 | |
3155 for (uint i = 0; i < 1000; ++i) | |
515
cb0ad52d6a26
LayingItem -> SpriteObject (long-waited rename, old name was inaccurate and confused people)
Nomad
parents:
496
diff
changeset
|
3156 pSpriteObjects[i].uObjectDescID = 0; |
0 | 3157 |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3158 v5 = pMapStats->GetMapInfo(pCurrentMapName); |
1541 | 3159 bUnderwater = false; |
0 | 3160 uLevelMapStatsID = v5; |
3161 pGame->uFlags2 &= 0xFFFFFFF7u; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3162 if ( !_stricmp(pCurrentMapName, "out15.odm") ) |
0 | 3163 { |
1541 | 3164 bUnderwater = true; |
1583 | 3165 pGame->uFlags2 |= GAME_FLAGS_2_ALTER_GRAVITY; |
0 | 3166 } |
831 | 3167 pParty->floor_face_pid = 0; |
1104 | 3168 if ( _stricmp(Str1, "blv") ) |
0 | 3169 PrepareToLoadODM(v9, 0); |
3170 else | |
3171 PrepareToLoadBLV(v9); | |
3172 pAudioPlayer->SetMapEAX(); | |
1459 | 3173 _461103_load_level_sub(); |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3174 if ( !_stricmp(pCurrentMapName, "d11.blv") || !_stricmp(pCurrentMapName, "d10.blv") ) |
0 | 3175 { |
1583 | 3176 //spawning grounds & walls of mist - no loot & exp from monsters |
0 | 3177 |
3178 for (uint i = 0; i < uNumActors; ++i) | |
3179 { | |
3180 pActors[i].pMonsterInfo.uTreasureType = 0; | |
3181 pActors[i].pMonsterInfo.uTreasureDiceRolls = 0; | |
3182 pActors[i].pMonsterInfo.uExp = 0; | |
3183 } | |
3184 } | |
3185 bDialogueUI_InitializeActor_NPC_ID = 0; | |
3186 OnMapLoad(); | |
3187 pGameLoadingUI_ProgressBar->Progress(); | |
1459 | 3188 memset(&pRenderer->pBillboardRenderListD3D, 0, sizeof(pRenderer->pBillboardRenderListD3D)); |
0 | 3189 pGameLoadingUI_ProgressBar->Release(); |
3190 _flushall(); | |
3191 } | |
3192 | |
3193 //----- (004649EF) -------------------------------------------------------- | |
3194 int __fastcall ReadWindowsRegistryInt(const char *pKey, int uDefValue) | |
3195 { | |
3196 int v3; // [sp+4h] [bp-24h]@1 | |
3197 DWORD cbData; // [sp+8h] [bp-20h]@1 | |
3198 LPCSTR lpValueName; // [sp+Ch] [bp-1Ch]@1 | |
3199 DWORD dwDisposition; // [sp+10h] [bp-18h]@2 | |
3200 BYTE Data[4]; // [sp+14h] [bp-14h]@5 | |
3201 HKEY hKey; // [sp+18h] [bp-10h]@1 | |
3202 HKEY phkResult; // [sp+1Ch] [bp-Ch]@1 | |
3203 HKEY v10; // [sp+20h] [bp-8h]@1 | |
3204 HKEY v11; // [sp+24h] [bp-4h]@1 | |
3205 | |
3206 v3 = uDefValue; | |
3207 lpValueName = pKey; | |
3208 v11 = 0; | |
3209 v10 = 0; | |
3210 hKey = 0; | |
3211 phkResult = 0; | |
3212 cbData = 4; | |
27 | 3213 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) )// for 64 bit |
0 | 3214 { |
3215 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) | |
3216 { | |
3217 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v10, &dwDisposition) ) | |
3218 { | |
3219 if ( !RegCreateKeyExA(v10, "1.0", 0, "", 0, 0xF003Fu, 0, &v11, &dwDisposition) ) | |
3220 { | |
3221 if ( RegQueryValueExA(v11, lpValueName, 0, 0, Data, &cbData) ) | |
3222 { | |
3223 *(int *)Data = v3; | |
3224 RegSetValueExA(v11, lpValueName, 0, 4u, Data, 4u); | |
3225 } | |
3226 RegCloseKey(v11); | |
3227 } | |
3228 RegCloseKey(v10); | |
3229 } | |
3230 RegCloseKey(phkResult); | |
3231 } | |
3232 RegCloseKey(hKey); | |
3233 } | |
3234 return *(int *)Data; | |
3235 } | |
3236 | |
3237 //----- (00464B02) -------------------------------------------------------- | |
3238 void __fastcall WriteWindowsRegistryString(const char *pKey, const char *pString) | |
3239 { | |
3240 size_t v2; // eax@5 | |
3241 const char *lpValueName; // [sp+4h] [bp-1Ch]@1 | |
3242 const char *Str; // [sp+8h] [bp-18h]@1 | |
3243 DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 | |
3244 HKEY hKey; // [sp+10h] [bp-10h]@1 | |
3245 HKEY phkResult; // [sp+14h] [bp-Ch]@1 | |
3246 HKEY v8; // [sp+18h] [bp-8h]@1 | |
3247 HKEY v9; // [sp+1Ch] [bp-4h]@1 | |
3248 | |
3249 Str = pString; | |
3250 lpValueName = pKey; | |
3251 v9 = 0; | |
3252 v8 = 0; | |
3253 hKey = 0; | |
3254 phkResult = 0; | |
3255 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) ) | |
3256 { | |
3257 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) | |
3258 { | |
3259 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v8, &dwDisposition) ) | |
3260 { | |
3261 if ( !RegCreateKeyExA(v8, "1.0", 0, "", 0, 0xF003Fu, 0, &v9, &dwDisposition) ) | |
3262 { | |
3263 v2 = strlen(Str); | |
3264 RegSetValueExA(v9, lpValueName, 0, 1u, (const BYTE *)Str, v2 + 1); | |
3265 RegCloseKey(v9); | |
3266 } | |
3267 RegCloseKey(v8); | |
3268 } | |
3269 RegCloseKey(phkResult); | |
3270 } | |
3271 RegCloseKey(hKey); | |
3272 } | |
3273 } | |
3274 | |
3275 //----- (00464BEF) -------------------------------------------------------- | |
3276 void __fastcall ReadWindowsRegistryString(const char *pKeyName, char *pOutString, int uBufLen, const char *pDefaultValue) | |
3277 { | |
3278 LSTATUS (__stdcall *v4)(HKEY); // esi@1 | |
3279 LSTATUS result; // eax@7 | |
3280 DWORD Type; // [sp+Ch] [bp-24h]@5 | |
3281 LPCSTR lpValueName; // [sp+10h] [bp-20h]@1 | |
3282 DWORD cbData; // [sp+14h] [bp-1Ch]@1 | |
3283 LPBYTE Dest; // [sp+18h] [bp-18h]@1 | |
3284 DWORD dwDisposition; // [sp+1Ch] [bp-14h]@2 | |
3285 HKEY phkResult; // [sp+20h] [bp-10h]@1 | |
3286 HKEY hKey; // [sp+24h] [bp-Ch]@1 | |
3287 HKEY v13; // [sp+28h] [bp-8h]@1 | |
3288 HKEY v14; // [sp+2Ch] [bp-4h]@1 | |
3289 | |
3290 cbData = uBufLen; | |
3291 Dest = (LPBYTE)pOutString; | |
3292 lpValueName = pKeyName; | |
3293 v14 = 0; | |
3294 v13 = 0; | |
3295 hKey = 0; | |
3296 phkResult = 0; | |
3297 v4 = RegCloseKey; | |
3298 if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) | |
3299 || RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) | |
3300 || RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v13, &dwDisposition) | |
3301 || RegCreateKeyExA(v13, "1.0", 0, "", 0, 0xF003Fu, 0, &v14, &dwDisposition) ) | |
1416 | 3302 { |
3303 result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); | |
3304 } | |
3305 else if ( RegQueryValueExA(v14, lpValueName, 0, &Type, Dest, &cbData) ) | |
0 | 3306 { |
3307 RegCloseKey(v14); | |
3308 v14 = 0; | |
3309 result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); | |
1416 | 3310 } |
3311 else | |
3312 { | |
3313 v4 = RegCloseKey; | |
3314 RegCloseKey(v14); | |
3315 v14 = 0; | |
3316 RegCloseKey(v13); | |
3317 v13 = 0; | |
3318 RegCloseKey(phkResult); | |
3319 phkResult = 0; | |
3320 result = RegCloseKey(hKey); | |
3321 hKey = 0; | |
3322 } | |
0 | 3323 if ( v14 ) |
3324 result = v4(v14); | |
3325 if ( v13 ) | |
3326 result = v4(v13); | |
3327 if ( hKey ) | |
3328 result = v4(hKey); | |
3329 if ( phkResult ) | |
3330 result = v4(phkResult); | |
3331 } | |
3332 | |
3333 //----- (00464D32) -------------------------------------------------------- | |
3334 void __fastcall WriteWindowsRegistryInt(const char *pKey, int val) | |
3335 { | |
3336 const char *lpValueName; // [sp+4h] [bp-1Ch]@1 | |
3337 BYTE Data[4]; // [sp+8h] [bp-18h]@1 | |
3338 DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 | |
3339 HKEY hKey; // [sp+10h] [bp-10h]@1 | |
3340 HKEY phkResult; // [sp+14h] [bp-Ch]@1 | |
3341 HKEY v7; // [sp+18h] [bp-8h]@1 | |
3342 HKEY v8; // [sp+1Ch] [bp-4h]@1 | |
3343 | |
3344 *(int *)Data = val; | |
3345 lpValueName = pKey; | |
3346 v8 = 0; | |
3347 v7 = 0; | |
3348 hKey = 0; | |
3349 phkResult = 0; | |
3350 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) ) | |
3351 { | |
3352 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) | |
3353 { | |
3354 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v7, &dwDisposition) ) | |
3355 { | |
3356 if ( !RegCreateKeyExA(v7, "1.0", 0, "", 0, 0xF003Fu, 0, &v8, &dwDisposition) ) | |
3357 { | |
2101 | 3358 RegSetValueExA(v8, lpValueName, 0, 4, Data, 4); |
0 | 3359 RegCloseKey(v8); |
3360 } | |
3361 RegCloseKey(v7); | |
3362 } | |
3363 RegCloseKey(phkResult); | |
3364 } | |
3365 RegCloseKey(hKey); | |
3366 } | |
3367 } | |
3368 | |
3369 //----- (00464E17) -------------------------------------------------------- | |
3370 bool __fastcall CheckMM7CD(char c) | |
3371 { | |
3372 char DstBuf[256]; // [sp+Ch] [bp-218h]@1 | |
3373 char strCommand[256]; // [sp+10Ch] [bp-118h]@1 | |
3374 char Filename[20]; // [sp+20Ch] [bp-18h]@1 | |
3375 | |
3376 | |
3377 wchar_t pMagicPath[1024]; | |
1165
29a8defbad9e
temporary _CRT_SECURE_NO_WARNINGS to remove some warnings
Grumpy7
parents:
1150
diff
changeset
|
3378 swprintf(pMagicPath, wcslen(L"%C:\\anims\\magic7.vid"), L"%C:\\anims\\magic7.vid", c); |
0 | 3379 if (GetFileAttributesW(pMagicPath) == -1) |
3380 return false; | |
3381 | |
3382 wsprintfA(strCommand, "open %c: type cdaudio alias CD", c); | |
3383 if (!mciSendStringA(strCommand, DstBuf, 0xFFu, 0)) | |
3384 { | |
3385 wsprintfA(strCommand, "info CD UPC wait"); | |
3386 mciSendStringA(strCommand, DstBuf, 0xFFu, 0); | |
3387 wsprintfA(strCommand, "close CD"); | |
3388 mciSendStringA(strCommand, DstBuf, 0xFFu, 0); | |
3389 } | |
3390 | |
3391 memcpy(Filename, "X:\\anims\\magic7.vid", sizeof(Filename)); | |
3392 *Filename = c; | |
3393 | |
1980 | 3394 FILE* f = fopen(Filename, "rb"); |
0 | 3395 if (!f) |
3396 return false; | |
3397 | |
3398 if (!fseek(f, 0, SEEK_END)) | |
3399 { | |
3400 if (!fseek(f, -100, SEEK_CUR)) | |
3401 fread(DstBuf, 1u, 0x64u, f); | |
3402 | |
3403 fclose(f); | |
3404 return true; | |
3405 } | |
3406 fclose(f); | |
3407 return false; | |
3408 } | |
3409 | |
3410 //----- (00464F1B) -------------------------------------------------------- | |
3411 signed int __stdcall InsertMM7CDDialogFunc(HWND hDlg, int a2, __int16 a3, int a4) | |
3412 { | |
3413 char v4; // zf@3 | |
3414 int v6; // eax@10 | |
3415 int v7; // eax@11 | |
3416 int v8; // eax@12 | |
3417 int v9; // eax@13 | |
3418 BOOL (__stdcall *v10)(HWND, int, LPCSTR); // edi@15 | |
3419 const CHAR *v11; // [sp-Ch] [bp-Ch]@15 | |
3420 INT_PTR v12; // [sp-4h] [bp-4h]@5 | |
3421 | |
3422 if ( a2 == 272 ) | |
3423 { | |
3424 hInsertCDWindow = hDlg; | |
3425 v6 = (GetUserDefaultLangID() & 0x3FF) - 7; | |
3426 if ( v6 ) | |
3427 { | |
3428 v7 = v6 - 3; | |
3429 if ( v7 ) | |
3430 { | |
3431 v8 = v7 - 2; | |
3432 if ( v8 ) | |
3433 { | |
3434 v9 = v8 - 4; | |
3435 if ( v9 ) | |
3436 { | |
3437 if ( v9 != 5 ) | |
3438 return 0; | |
3439 SetWindowTextA(hDlg, "Wloz CD-ROM numer 2"); | |
3440 v10 = SetDlgItemTextA; | |
3441 SetDlgItemTextA(hDlg, 1010, "Wloz CD-ROM numer 2 Might and Magic® VII."); | |
3442 v11 = "Odwolaj"; | |
3443 } | |
3444 else | |
3445 { | |
3446 SetWindowTextA(hDlg, "Inserire il secondo CD"); | |
3447 v10 = SetDlgItemTextA; | |
3448 SetDlgItemTextA(hDlg, 1010, "Inserire il secondo CD di Might and Magic® VII."); | |
3449 v11 = "Annulla"; | |
3450 } | |
3451 } | |
3452 else | |
3453 { | |
3454 SetWindowTextA(hDlg, "Insérez le CD 2"); | |
3455 v10 = SetDlgItemTextA; | |
3456 SetDlgItemTextA(hDlg, 1010, "Insérez Might & Magic® VII CD 2."); | |
3457 v11 = "Supprimer"; | |
3458 } | |
3459 } | |
3460 else | |
3461 { | |
3462 SetWindowTextA(hDlg, "Por favor, inserte disco 2"); | |
3463 v10 = SetDlgItemTextA; | |
3464 SetDlgItemTextA(hDlg, 1010, "Por favor, inserte disco 2 de Might & Magic® VII."); | |
3465 v11 = "Cancelar"; | |
3466 } | |
3467 } | |
3468 else | |
3469 { | |
3470 SetWindowTextA(hDlg, "Bitte CD 2 einlegen"); | |
3471 v10 = SetDlgItemTextA; | |
3472 SetDlgItemTextA(hDlg, 1010, "Bitte CD 2 von Might and Magic® VII einlegen."); | |
3473 v11 = "Abbrechen"; | |
3474 } | |
3475 v10(hDlg, 2, v11); | |
3476 return 0; | |
3477 } | |
3478 if ( a2 == 273 ) | |
3479 { | |
3480 if ( a3 == 2 ) | |
3481 { | |
3482 v12 = 0; | |
3483 EndDialog(hDlg, v12); | |
3484 return 1; | |
3485 } | |
3486 v4 = a3 == 1; | |
3487 } | |
3488 else | |
3489 { | |
3490 v4 = a2 == 1025; | |
3491 } | |
3492 if ( v4 ) | |
3493 { | |
3494 v12 = 1; | |
1416 | 3495 EndDialog(hDlg, v12); |
3496 return 1; | |
0 | 3497 } |
3498 return 0; | |
3499 } | |
3500 | |
3501 //----- (00465061) -------------------------------------------------------- | |
3502 bool __fastcall FindMM7CD(HWND hWnd, char *pCDDrive) | |
3503 { | |
3504 char drive[4] = {'X', ':', '\\', 0}; | |
3505 | |
3506 bool bGotCDFromRegistry = false; | |
3507 | |
3508 HKEY hSoftware = nullptr, | |
3509 hNWC = nullptr, | |
3510 hMM7 = nullptr, | |
3511 hVersion = nullptr; | |
3512 if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hSoftware)) | |
3513 { | |
3514 if (!RegOpenKeyExA(hSoftware, "New World Computing", 0, 0x2001Fu, &hNWC)) | |
3515 { | |
3516 if (!RegOpenKeyExA(hNWC, "Might and Magic VII", 0, 0x2001Fu, &hMM7)) | |
3517 { | |
3518 if (!RegOpenKeyExA(hMM7, "1.0", 0, 0x2001Fu, &hVersion)) | |
3519 { | |
3520 DWORD cbData = 3; | |
3521 if (!RegQueryValueExA(hVersion, "CDDrive", 0, 0, (BYTE *)drive, &cbData)) | |
3522 bGotCDFromRegistry = true; | |
3523 } | |
3524 RegCloseKey(hVersion); | |
3525 } | |
3526 RegCloseKey(hMM7); | |
3527 } | |
3528 RegCloseKey(hNWC); | |
3529 } | |
3530 RegCloseKey(hSoftware); | |
3531 | |
3532 if (bGotCDFromRegistry) | |
3533 if (CheckMM7CD(*drive)) | |
3534 { | |
3535 cMM7GameCDDriveLetter = *drive; | |
3536 return true; | |
3537 } | |
3538 | |
3539 while (true) | |
3540 { | |
3541 for (uint i = 0; i < 26; ++i) | |
3542 { | |
3543 drive[0] = 'A' + i; | |
3544 | |
3545 if (GetDriveTypeA(drive) == DRIVE_CDROM) | |
3546 if (CheckMM7CD(*drive)) | |
3547 { | |
3548 cMM7GameCDDriveLetter = *drive; | |
3549 WriteWindowsRegistryString("CDDrive", drive); | |
3550 return true; | |
3551 } | |
3552 } | |
3553 | |
1802 | 3554 if (DialogBoxParamA(GetModuleHandleW(nullptr), "InsertCD", hWnd, (DLGPROC)InsertMM7CDDialogFunc, 0)) |
0 | 3555 continue; |
3556 return false; | |
3557 } | |
3558 } | |
3559 | |
1655 | 3560 |
3561 | |
0 | 3562 //----- (004651F4) -------------------------------------------------------- |
1655 | 3563 bool MM7_Initialize(int game_width, int game_height) |
0 | 3564 { |
3565 wchar_t pCurrentDir[1024]; | |
3566 _wgetcwd(pCurrentDir, 1024); | |
3567 | |
3568 wchar_t pMM6IniFile[1024]; | |
293 | 3569 wsprintfW(pMM6IniFile, L"%s\\mm6.ini", pCurrentDir); |
0 | 3570 |
3571 bCanLoadFromCD = GetPrivateProfileIntW(L"settings", L"use_cd", 1, pMM6IniFile); | |
3572 if (bNoCD) | |
3573 bCanLoadFromCD = false; | |
3574 if (bCanLoadFromCD) | |
3575 { | |
2151 | 3576 Log::Warning(L"Checking for CD..."); |
1802 | 3577 if (!FindMM7CD(nullptr, &cMM7GameCDDriveLetter)) |
0 | 3578 return false; |
2151 | 3579 Log::Warning(L"...done."); |
0 | 3580 } |
3581 | |
3582 | |
3583 srand(GetTickCount()); | |
1802 | 3584 |
3585 window = OSWindow::Create(L"Might and Magic® Trilogy", game_width, game_height); | |
0 | 3586 |
3587 pRenderer = Render::Create(); | |
3588 if (!pRenderer) | |
3589 { | |
3590 Log::Warning(L"Render creation failed"); | |
3591 return false; | |
3592 } | |
3593 else | |
3594 { | |
2069 | 3595 //bool bWindowMode = ReadWindowsRegistryInt("startinwindow", false); |
1802 | 3596 //uint uDefaultDevice = ReadWindowsRegistryInt("D3D Device", 1); |
0 | 3597 bool bColoredLights = ReadWindowsRegistryInt("Colored Lights", false); |
3598 uint uLevelOfDetail = ReadWindowsRegistryInt("Detail Level", 1); | |
3599 uint bTinting = ReadWindowsRegistryInt("Tinting", 1) != 0; | |
3600 | |
2069 | 3601 if (!pRenderer->Initialize(window, bColoredLights, uLevelOfDetail, bTinting)) |
0 | 3602 { |
3603 Log::Warning(L"Render failed to initialize"); | |
3604 return false; | |
3605 } | |
3606 } | |
492 | 3607 |
351 | 3608 game_starting_year = 1168; |
0 | 3609 |
3610 pParty = new Party; | |
147 | 3611 memset(&pParty->pHirelings, 0, sizeof(pParty->pHirelings)); |
0 | 3612 pParty->uWalkSpeed = GetPrivateProfileIntW(L"debug", L"walkspeed", 384, pMM6IniFile); |
3613 pParty->uDefaultEyelevel = GetPrivateProfileIntW(L"party", L"eyelevel", 160, pMM6IniFile); | |
3614 pParty->sEyelevel = pParty->uDefaultEyelevel; | |
3615 pParty->uDefaultPartyHeight = GetPrivateProfileIntW(L"party", L"height", 192, pMM6IniFile); | |
3616 pParty->uPartyHeight = pParty->uDefaultPartyHeight; | |
2151 | 3617 |
0 | 3618 MM6_Initialize(pMM6IniFile); |
3619 | |
3620 pKeyActionMap = new KeyboardActionMapping; | |
3621 | |
3622 pEventTimer = Timer::Create(); | |
3623 pEventTimer->Initialize(); | |
3624 | |
3625 OnTimer(1); | |
3626 GameUI_StatusBar_UpdateTimedString(1); | |
3627 pGame = Game::Create(); | |
3628 pMouse = pGame->pMouseInstance; | |
1655 | 3629 |
0 | 3630 |
3631 pIcons_LOD = new LODFile_IconsBitmaps; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3632 if (!pIcons_LOD->Load("data\\icons.lod", "icons")) |
0 | 3633 { |
2151 | 3634 MessageBoxW(nullptr, L"Some files are missing\n\nPlease Reinstall.", |
3635 L"Files Missing", MB_ICONEXCLAMATION); | |
0 | 3636 return false; |
3637 } | |
3638 pIcons_LOD->dword_011BA4 = 0; | |
3639 | |
3640 pEvents_LOD = new LODFile_IconsBitmaps; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3641 if (!pEvents_LOD->Load("data\\events.lod", "icons")) |
0 | 3642 { |
2151 | 3643 MessageBoxW(nullptr, L"Some files are missing\n\nPlease Reinstall.", |
3644 L"Files Missing", MB_ICONEXCLAMATION); | |
0 | 3645 return false; |
3646 } | |
3647 | |
3648 InitializeGameText(); | |
3649 | |
3650 pBitmaps_LOD = new LODFile_IconsBitmaps; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3651 if (!pBitmaps_LOD->Load("data\\bitmaps.lod", "bitmaps")) |
0 | 3652 { |
2151 | 3653 MessageBoxA(nullptr, pGlobalTXT_LocalizationStrings[63], |
3654 pGlobalTXT_LocalizationStrings[184], MB_ICONEXCLAMATION); | |
0 | 3655 return false; |
3656 } | |
3657 | |
3658 pSprites_LOD = new LODFile_Sprites; | |
2151 | 3659 if (!pSprites_LOD->LoadSprites("data\\sprites.lod")) |
0 | 3660 { |
3661 MessageBoxA(nullptr, | |
3662 pGlobalTXT_LocalizationStrings[63], | |
3663 pGlobalTXT_LocalizationStrings[184], MB_ICONEXCLAMATION); | |
3664 return false; | |
3665 } | |
3666 | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3667 |
1543 | 3668 #if 0 |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3669 if (_access("../MM_VI/data/icons.lod", 0) == 0) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3670 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3671 pIcons_LOD_mm6 = new LODFile_IconsBitmaps; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3672 if (!pIcons_LOD_mm6->Load("../MM_VI/data/icons.lod", "icons")) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3673 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3674 delete pIcons_LOD_mm6; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3675 pIcons_LOD_mm6 = nullptr; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3676 Log::Warning(L"Unable to load mm6:icons.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3677 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3678 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3679 else |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3680 Log::Warning(L"Unable to find mm6:icons.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3681 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3682 if (_access("../MM_VI/data/bitmaps.lod", 0) == 0) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3683 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3684 pBitmaps_LOD_mm6 = new LODFile_IconsBitmaps; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3685 if (!pBitmaps_LOD_mm6->Load("../MM_VI/data/bitmaps.lod", "bitmaps")) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3686 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3687 delete pBitmaps_LOD_mm6; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3688 pBitmaps_LOD_mm6 = nullptr; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3689 Log::Warning(L"Unable to load mm6:bitmaps.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3690 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3691 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3692 else |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3693 Log::Warning(L"Unable to find mm6:bitmaps.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3694 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3695 auto mm6_sprite_container_name = bUseLoResSprites ? "../MM_VI/data/spriteLO.lod" |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3696 : "../MM_VI/data/sprites.lod"; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3697 if (_access(mm6_sprite_container_name, 0) == 0) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3698 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3699 pSprites_LOD_mm6 = new LODFile_Sprites; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3700 if (!pSprites_LOD_mm6->LoadSprites(mm6_sprite_container_name)) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3701 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3702 delete pSprites_LOD_mm6; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3703 pSprites_LOD_mm6 = nullptr; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3704 Log::Warning(L"Unable to load mm6:sprites.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3705 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3706 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3707 else |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3708 Log::Warning(L"Unable to find mm6:sprites.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3709 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3710 |
1541 | 3711 if (_access("../mm8/data/icons.lod", 0) == 0) |
3712 { | |
3713 pIcons_LOD_mm8 = new LODFile_IconsBitmaps; | |
3714 if (!pIcons_LOD_mm8->Load("../mm8/data/icons.lod", "icons")) | |
3715 { | |
3716 delete pIcons_LOD_mm8; | |
3717 pIcons_LOD_mm8 = nullptr; | |
3718 Log::Warning(L"Unable to load mm8:icons.lod"); | |
3719 } | |
0 | 3720 } |
3721 else | |
1541 | 3722 Log::Warning(L"Unable to find mm8:icons.lod"); |
3723 | |
3724 | |
3725 if (_access("../mm8/data/bitmaps.lod", 0) == 0) | |
3726 { | |
3727 pBitmaps_LOD_mm8 = new LODFile_IconsBitmaps; | |
3728 if (!pBitmaps_LOD_mm8->Load("../mm8/data/bitmaps.lod", "bitmaps")) | |
3729 { | |
3730 delete pBitmaps_LOD_mm8; | |
3731 pBitmaps_LOD_mm8 = nullptr; | |
3732 Log::Warning(L"Unable to load mm8:bitmaps.lod"); | |
3733 } | |
3734 } | |
3735 else | |
3736 Log::Warning(L"Unable to find mm8:bitmaps.lod"); | |
3737 | |
3738 | |
3739 if (_access("../mm8/data/sprites.lod", 0) == 0) | |
3740 { | |
3741 pSprites_LOD_mm8 = new LODFile_Sprites; | |
3742 if (!pSprites_LOD_mm8->LoadSprites("../mm8/data/sprites.lod")) | |
3743 { | |
3744 delete pSprites_LOD_mm8; | |
3745 pSprites_LOD_mm8 = nullptr; | |
3746 Log::Warning(L"Unable to load mm8:sprites.lod"); | |
3747 } | |
3748 } | |
3749 else | |
3750 Log::Warning(L"Unable to find mm8:sprites.lod"); | |
1543 | 3751 #endif |
1541 | 3752 |
0 | 3753 { |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3754 void *sft_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dsft.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3755 *sft_mm8 = nullptr; |
2151 | 3756 void *sft_mm7 = pEvents_LOD->LoadRaw("dsft.bin", 1); |
0 | 3757 pSpriteFrameTable = new SpriteFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3758 pSpriteFrameTable->FromFile(sft_mm6, sft_mm7, sft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3759 free(sft_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3760 free(sft_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3761 free(sft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3762 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3763 void *tft_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dtft.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3764 *tft_mm8 = nullptr; |
2151 | 3765 void *tft_mm7 = pEvents_LOD->LoadRaw("dtft.bin", 1); |
0 | 3766 pTextureFrameTable = new TextureFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3767 pTextureFrameTable->FromFile(tft_mm6, tft_mm7, tft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3768 free(tft_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3769 free(tft_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3770 free(tft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3771 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3772 void *tiles_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dtile.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3773 *tiles_mm8 = nullptr; |
2151 | 3774 void *tiles_mm7 = pEvents_LOD->LoadRaw("dtile.bin", 1); |
0 | 3775 pTileTable = new TileTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3776 pTileTable->FromFile(tiles_mm6, tiles_mm7, tiles_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3777 free(tiles_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3778 free(tiles_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3779 free(tiles_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3780 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3781 void *pft_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dpft.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3782 *pft_mm8 = nullptr; |
2151 | 3783 void *pft_mm7 = pEvents_LOD->LoadRaw("dpft.bin", 1); |
0 | 3784 pPlayerFrameTable = new PlayerFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3785 pPlayerFrameTable->FromFile(pft_mm6, pft_mm7, pft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3786 free(pft_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3787 free(pft_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3788 free(pft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3789 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3790 void *ift_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dift.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3791 *ift_mm8 = nullptr; |
2151 | 3792 void *ift_mm7 = pEvents_LOD->LoadRaw("dift.bin", 1); |
0 | 3793 pIconsFrameTable = new IconFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3794 pIconsFrameTable->FromFile(ift_mm6, ift_mm7, ift_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3795 free(ift_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3796 free(ift_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3797 free(ift_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3798 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3799 void *decs_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("ddeclist.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3800 *decs_mm8 = nullptr; |
2151 | 3801 void *decs_mm7 = pEvents_LOD->LoadRaw("ddeclist.bin", 1); |
0 | 3802 pDecorationList = new DecorationList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3803 pDecorationList->FromFile(decs_mm6, decs_mm7, decs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3804 free(decs_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3805 free(decs_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3806 free(decs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3807 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3808 void *objs_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dobjlist.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3809 *objs_mm8 = nullptr; |
2151 | 3810 void *objs_mm7 = pEvents_LOD->LoadRaw("dobjlist.bin", 1); |
0 | 3811 pObjectList = new ObjectList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3812 pObjectList->FromFile(objs_mm6, objs_mm7, objs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3813 free(objs_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3814 free(objs_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3815 free(objs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3816 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3817 void *mons_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dmonlist.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3818 *mons_mm8 = nullptr; |
2151 | 3819 void *mons_mm7 = pEvents_LOD->LoadRaw("dmonlist.bin", 1); |
0 | 3820 pMonsterList = new MonsterList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3821 pMonsterList->FromFile(mons_mm6, mons_mm7, mons_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3822 free(mons_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3823 free(mons_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3824 free(mons_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3825 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3826 void *chests_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dchest.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3827 *chests_mm8 = nullptr; |
2151 | 3828 void *chests_mm7 = pEvents_LOD->LoadRaw("dchest.bin", 1); |
0 | 3829 pChestList = new ChestList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3830 pChestList->FromFile(chests_mm6, chests_mm7, chests_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3831 free(chests_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3832 free(chests_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3833 free(chests_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3834 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3835 void *overlays_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("doverlay.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3836 *overlays_mm8 = nullptr; |
2151 | 3837 void *overlays_mm7 = pEvents_LOD->LoadRaw("doverlay.bin", 1); |
0 | 3838 pOverlayList = new OverlayList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3839 pOverlayList->FromFile(overlays_mm6, overlays_mm7, overlays_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3840 free(overlays_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3841 free(overlays_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3842 free(overlays_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3843 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3844 void *sounds_mm6 = pIcons_LOD_mm6 ? pIcons_LOD_mm6->LoadRaw("dsounds.bin", 1) : nullptr, |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3845 *sounds_mm8 = nullptr; |
2151 | 3846 void *sounds_mm7 = pEvents_LOD->LoadRaw("dsounds.bin", 1); |
0 | 3847 pSoundList = new SoundList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3848 pSoundList->FromFile(sounds_mm6, sounds_mm7, sounds_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3849 free(sounds_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3850 free(sounds_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3851 free(sounds_mm8); |
0 | 3852 } |
3853 | |
3854 | |
3855 | |
492 | 3856 |
2069 | 3857 if (dword_6BE368_debug_settings_2 & DEBUG_SETTINGS_RUN_IN_WIDOW) |
0 | 3858 { |
2069 | 3859 //window->SetWindowedMode(game_width, game_height); |
3860 pRenderer->SwitchToWindow(); | |
0 | 3861 } |
3862 else | |
3863 { | |
2069 | 3864 __debugbreak(); // Nomad |
3865 window->SetFullscreenMode(); | |
3866 pRenderer->InitializeFullscreen(); | |
0 | 3867 } |
2151 | 3868 |
3869 uSoundVolumeMultiplier = min(9, ReadWindowsRegistryInt("soundflag", 9)); | |
3870 uMusicVolimeMultiplier = min(9, ReadWindowsRegistryInt("musicflag", 9)); | |
3871 uVoicesVolumeMultiplier = min(9, ReadWindowsRegistryInt("CharVoices", 9)); | |
0 | 3872 bShowDamage = ReadWindowsRegistryInt("ShowDamage", 1) != 0; |
2151 | 3873 |
3874 uGammaPos = min(4, ReadWindowsRegistryInt("GammaPos", 4)); | |
0 | 3875 pGame->pGammaController->Initialize(uGammaPos * 0.1 + 0.6); |
3876 | |
3877 if ( ReadWindowsRegistryInt("Bloodsplats", 1) ) | |
591 | 3878 pGame->uFlags2 |= GAME_FLAGS_2_DRAW_BLOODSPLATS; |
0 | 3879 else |
733 | 3880 pGame->uFlags2 &= ~GAME_FLAGS_2_DRAW_BLOODSPLATS; |
0 | 3881 |
3882 uTurnSpeed = ReadWindowsRegistryInt("TurnDelta", 0); | |
3883 | |
3884 if (!bNoSound) | |
1802 | 3885 pAudioPlayer->Initialize(); |
0 | 3886 |
1262 | 3887 pVideoPlayer = new VideoPlayer(); |
1802 | 3888 pVideoPlayer->Initialize(window); |
0 | 3889 |
2061 | 3890 dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000; |
0 | 3891 |
3892 switch ( uTurnSpeed ) | |
3893 { | |
731 | 3894 case 0: // undefined turn option |
1067 | 3895 __debugbreak(); // really shouldn't use this mode |
731 | 3896 uTurnSpeed = (unsigned int)uCPUSpeed < 199 ? 128 : 64; // adjust turn speed to estimated fps |
3897 break; | |
3898 | |
3899 case 1u: // 16x | |
3900 Log::Warning(L"x16 Turn Speed"); // really shouldn't use this mode | |
0 | 3901 uTurnSpeed = 128; |
731 | 3902 break; |
3903 | |
3904 case 2u: // 32x | |
3905 Log::Warning(L"x32 Turn Speed"); // really shouldn't use this mode | |
0 | 3906 uTurnSpeed = 64; |
731 | 3907 break; |
3908 | |
3909 case 3u: // smooth | |
0 | 3910 uTurnSpeed = 0; |
731 | 3911 break; |
3912 } | |
3913 | |
0 | 3914 return true; |
3915 } | |
3916 | |
3917 //----- (00465D0B) -------------------------------------------------------- | |
1802 | 3918 void SecondaryInitialization() |
0 | 3919 { |
2151 | 3920 //__int16 v4; // ax@4 |
3921 //signed int v5; // esi@5 | |
3922 //int v6; // ecx@6 | |
3923 //int v7; // edx@7 | |
3924 //ObjectDesc *v8; // eax@7 | |
3925 //char pContainer[32]; // [sp+10h] [bp-Ch]@9 | |
0 | 3926 |
1802 | 3927 pMouse->Initialize(window); |
0 | 3928 |
3929 pItemsTable = new ItemsTable; | |
3930 pItemsTable->Initialize(); | |
3931 | |
3932 pBitmaps_LOD->dword_011BA8 = 1; | |
2069 | 3933 //pBitmaps_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits); |
3934 pBitmaps_LOD->SetupPalettes(5, 6, 5); | |
3935 //pIcons_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits); | |
3936 pIcons_LOD->SetupPalettes(5, 6, 5); | |
3937 //pPaletteManager->SetColorChannelInfo(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits); | |
3938 pPaletteManager->SetColorChannelInfo(5, 6, 5); | |
762 | 3939 |
3940 pPaletteManager->SetMistColor(128, 128, 128); | |
0 | 3941 pPaletteManager->RecalculateAll(); |
3942 pSprites_LOD->field_ECAC = 1; | |
3943 pObjectList->InitializeSprites(); | |
3944 pOverlayList->InitializeSprites(); | |
3945 if (!bNoSound) | |
3946 pSoundList->Initialize(); | |
3947 | |
3948 | |
3949 for (uint i = 0; i < 4; ++i) | |
3950 { | |
2151 | 3951 static const char *pUIAnimNames[4] = |
3952 { | |
3953 "glow03", "glow05", | |
3954 "torchA", "wizeyeA" | |
3955 }; | |
3956 static unsigned short _4E98D0[4][4] = | |
3957 { | |
3958 {479, 0, 329, 0}, | |
3959 {585, 0, 332, 0}, | |
3960 {468, 0, 0, 0}, | |
3961 {606, 0, 0, 0} | |
3962 }; | |
3963 | |
0 | 3964 pUIAnims[i]->uIconID = pIconsFrameTable->FindIcon(pUIAnimNames[i]); |
3965 pIconsFrameTable->InitializeAnimation(pUIAnims[i]->uIconID); | |
3966 | |
3967 pUIAnims[i]->uAnimLength = 0; | |
3968 pUIAnims[i]->uAnimTime = 0; | |
3969 pUIAnims[i]->x = _4E98D0[i][0]; | |
3970 pUIAnims[i]->y = _4E98D0[i][2]; | |
3971 } | |
3972 | |
2151 | 3973 for (unsigned int i = 0; i < pObjectList->uNumObjects; ++i) |
0 | 3974 { |
2151 | 3975 pObjectList->pObjects[i].uParticleTrailColor = pObjectList->pObjects[i].uParticleTrailColorB | |
3976 ((unsigned int)pObjectList->pObjects[i].uParticleTrailColorG << 8) | | |
3977 ((unsigned int)pObjectList->pObjects[i].uParticleTrailColorR << 16); | |
0 | 3978 } |
2151 | 3979 |
0 | 3980 MainMenuUI_Create(); |
3981 pGame->pStru6Instance->LoadAnimations(); | |
3982 | |
3983 for (uint i = 0; i < 7; ++i) | |
3984 { | |
2151 | 3985 char container_name[64]; |
3986 sprintf(container_name, "HDWTR%03u", i); | |
3987 pRenderer->pHDWaterBitmapIDs[i] = pBitmaps_LOD->LoadTexture(container_name); | |
0 | 3988 } |
3989 | |
3990 pNPCStats = new NPCStats; | |
110 | 3991 memset(pNPCStats->pNPCData, 0, 0x94BCu); |
0 | 3992 pNPCStats->Initialize(); |
3993 | |
3994 Initialize_GlobalEVT(); | |
762 | 3995 pBitmaps_LOD->_inlined_sub0(); |
3996 pSprites_LOD->_inlined_sub0(); | |
0 | 3997 pPaletteManager->LockAll(); |
3998 | |
3999 _mkdir("Saves"); | |
4000 for (uint i = 0; i < 5; ++i) | |
4001 for (uint j = 0; j < 6; ++j) | |
4002 { | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4003 sprintf(pTmpBuf.data(), "data\\lloyd%d%d.pcx", i, j); |
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4004 remove(pTmpBuf.data()); |
0 | 4005 } |
4006 | |
4007 Initialize_GamesLOD_NewLOD(); | |
1051 | 4008 _576E2C_current_minimap_zoom = 512; |
0 | 4009 dword_576E28 = 9; |
4010 } | |
4011 | |
522 | 4012 void IntegrityTest() |
4013 { | |
1869
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4014 static_assert(sizeof(MovieHeader) == 44, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4015 static_assert(sizeof(SoundDesc_mm6) == 112, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4016 static_assert(sizeof(SoundDesc) == 120, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4017 static_assert(sizeof(OverlayDesc) == 8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4018 static_assert(sizeof(ChestDesc) == 36, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4019 static_assert(sizeof(ObjectDesc_mm6) == 52, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4020 static_assert(sizeof(ObjectDesc) == 56, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4021 static_assert(sizeof(DecorationDesc) == 84, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4022 static_assert(sizeof(IconFrame) == 32, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4023 static_assert(sizeof(PlayerFrame) == 10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4024 static_assert(sizeof(TextureFrame) == 20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4025 static_assert(sizeof(SpriteFrame) == 60, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4026 static_assert(sizeof(RenderVertexSoft) == 0x30, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4027 static_assert(sizeof(RenderBillboard) == 0x34, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4028 static_assert(sizeof(Texture) == 0x48, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4029 static_assert(sizeof(RGBTexture) == 0x28, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4030 static_assert(sizeof(LODFile_IconsBitmaps) == 0x11BB8 + 4, "Wrong type size"); // + virtual dtor ptr |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4031 static_assert(sizeof(AudioPlayer) == 0xC84, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4032 static_assert(sizeof(SoundDesc) == 0x78, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4033 static_assert(sizeof(stru339_spell_sound) == 0xAFD8, "Wrong type size"); |
2137
d24ee391fd1f
libavcodec playing movies and houses, loops not working yet
zipi
parents:
2135
diff
changeset
|
4034 //static_assert(sizeof(VideoPlayer) == 0x108 + 4, "Wrong type size"); |
1869
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4035 static_assert(sizeof(MovieHeader) == 0x2C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4036 static_assert(sizeof(DecorationDesc) == 0x54, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4037 static_assert(sizeof(ObjectDesc) == 0x38, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4038 static_assert(sizeof(OverlayDesc) == 0x8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4039 static_assert(sizeof(ChestDesc) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4040 static_assert(sizeof(TileDesc) == 0x1A, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4041 static_assert(sizeof(MonsterDesc_mm6) == 148, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4042 static_assert(sizeof(MonsterDesc) == 152, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4043 static_assert(sizeof(Timer) == 0x28, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4044 static_assert(sizeof(OtherOverlay) == 0x14, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4045 static_assert(sizeof(ItemGen) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4046 static_assert(sizeof(SpriteObject) == 0x70, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4047 static_assert(sizeof(ItemDesc) == 0x30, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4048 static_assert(sizeof(ItemsTable) == 0x117A0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4049 static_assert(sizeof(Chest) == 0x14CC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4050 static_assert(sizeof(MapInfo) == 0x44, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4051 static_assert(sizeof(SpellInfo) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4052 static_assert(sizeof(SpellData) == 0x14, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4053 static_assert(sizeof(SpellBuff) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4054 static_assert(sizeof(AIDirection) == 0x1C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4055 static_assert(sizeof(ActorJob) == 0xC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4056 static_assert(sizeof(Actor) == 0x344, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4057 static_assert(sizeof(LevelDecoration) == 0x20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4058 static_assert(sizeof(KeyboardActionMapping) == 0x20C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4059 static_assert(sizeof(UIAnimation) == 0xD, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4060 static_assert(sizeof(SpawnPointMM7) == 0x18, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4061 static_assert(sizeof(ODMFace) == 0x134, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4062 static_assert(sizeof(BSPNode) == 0x8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4063 static_assert(sizeof(BSPModel) == 0xBC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4064 static_assert(sizeof(OutdoorLocation) == 0x1C28C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4065 static_assert(sizeof(BLVFace) == 0x60, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4066 static_assert(sizeof(BLVFaceExtra) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4067 static_assert(sizeof(BLVSector) == 0x74, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4068 static_assert(sizeof(BLVLightMM7) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4069 static_assert(sizeof(BLVDoor) == 0x50, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4070 static_assert(sizeof(IndoorLocation) == 0x690, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4071 //static_assert(sizeof(ODMRenderParams) == 0x74, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4072 static_assert(sizeof(Mouse) == 0x114, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4073 static_assert(sizeof(Particle_sw) == 0x68, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4074 static_assert(sizeof(Particle) == 0x68, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4075 static_assert(sizeof(ParticleEngine) == 0xE430, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4076 static_assert(sizeof(Lightmap) == 0xC1C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4077 static_assert(sizeof(LightmapBuilder) == 0x3CBC38, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4078 static_assert(sizeof(Vis_SelectionList) == 0x2008, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4079 static_assert(sizeof(Vis) == 0x20D0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4080 static_assert(sizeof(PlayerBuffAnim) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4081 static_assert(sizeof(ProjectileAnim) == 0x1C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4082 static_assert(sizeof(stru6) == 0x5F8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4083 static_assert(sizeof(IndoorCameraD3D_Vec3) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4084 static_assert(sizeof(IndoorCameraD3D_Vec4) == 0x18, "Wrong type size"); //should be 14 (10 vec3 + 4 vdtor) but 18 coz of his +4 from own vdtor, but it is odd since vdtor already present from vec3 |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4085 //static_assert(sizeof(IndoorCameraD3D) == 0x1A1384, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4086 static_assert(sizeof(StationaryLight) == 0xC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4087 static_assert(sizeof(LightsStack_StationaryLight_) == 0x12C8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4088 static_assert(sizeof(MobileLight) == 0x12, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4089 static_assert(sizeof(LightsStack_MobileLight_) == 0x1C28, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4090 static_assert(sizeof(Game) == 0xE78, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4091 static_assert(sizeof(stru141_actor_collision_object) == 0xA8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4092 static_assert(sizeof(ActionQueue) == 0x7C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4093 static_assert(sizeof(NPCData) == 0x4C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4094 static_assert(sizeof(NPCStats) == 0x17FFC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4095 static_assert(sizeof(BspRenderer) == 0x53740, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4096 static_assert(sizeof(PaletteManager) == 0x267AF0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4097 static_assert(sizeof(ViewingParams) == 0x26C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4098 //static_assert(sizeof(IndoorCamera) == 0x50, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4099 static_assert(sizeof(Bloodsplat) == 0x28, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4100 static_assert(sizeof(BloodsplatContainer) == 0xA0C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4101 static_assert(sizeof(TrailParticle) == 0x18, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4102 static_assert(sizeof(EventIndex) == 0xC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4103 static_assert(sizeof(_2devent) == 0x34, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4104 static_assert(sizeof(stru176) == 0x20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4105 static_assert(sizeof(SavegameHeader) == 0x64, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4106 static_assert(sizeof(SavegameList) == 0x3138, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4107 static_assert(sizeof(StorylineText) == 0x160, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4108 static_assert(sizeof(FactionTable) == 0x1EF1, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4109 static_assert(sizeof(Decal) == 0xC20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4110 static_assert(sizeof(DecalBuilder) == 0x30C038, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4111 static_assert(sizeof(MonsterInfo) == 0x58, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4112 static_assert(sizeof(MonsterStats) == 0x5BA0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4113 static_assert(sizeof(RenderD3D) == 0x148, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4114 // static_assert(sizeof(Render) == 0x129844, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4115 static_assert(sizeof(Player) == 0x1B3C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4116 static_assert(sizeof(PartyTimeStruct) == 0x678, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4117 static_assert(sizeof(Party) == 0x16238, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4118 static_assert(sizeof(GUIButton) == 0xBC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4119 static_assert(sizeof(GUIWindow) == 0x54, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4120 static_assert(sizeof(GUIProgressBar) == 0x1B8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4121 static_assert(sizeof(GUIFont) == 0x1020, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4122 // static_assert(sizeof(stru262_TurnBased) == 0x40, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4123 static_assert(sizeof(ArcomageGame) == 0xFB, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4124 static_assert(sizeof(CastSpellInfo) == 0x14, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4125 static_assert(sizeof(ArcomageCard) == 0x6C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4126 static_assert(sizeof(stru320) == 0x3FC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4127 static_assert(sizeof(TravelInfo) == 0x20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4128 static_assert(sizeof(stru336) == 0x798, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4129 static_assert(sizeof(Vec3_short_) == 6, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4130 static_assert(sizeof(BLVFace) == 96, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4131 static_assert(sizeof(BLVFaceExtra) == 36, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4132 static_assert(sizeof(BLVSector) == 116, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4133 static_assert(sizeof(LevelDecoration) == 32, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4134 static_assert(sizeof(BLVLightMM7) == 16, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4135 static_assert(sizeof(BSPNode) == 8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4136 static_assert(sizeof(SpawnPointMM7) == 24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4137 static_assert(sizeof(DDM_DLV_Header) == 40, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4138 static_assert(sizeof(Actor) == 836, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4139 static_assert(sizeof(SpriteObject) == 112, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4140 static_assert(sizeof(Chest) == 5324, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4141 static_assert(sizeof(stru123) == 0xC8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4142 static_assert(sizeof(BLVMapOutline) == 12, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4143 static_assert(sizeof(LODSprite) == 0x28, "Wrong type size"); |
522 | 4144 } |
4145 | |
168 | 4146 bool new_sky = false; |
1765 | 4147 bool new_draw_object_dist = true; |
2128 | 4148 bool change_seasons = false; |
894 | 4149 bool all_magic = true; |
1511 | 4150 bool wizard_eye = false; |
1837 | 4151 bool debug_information = false; |
4152 bool show_picked_face = false; | |
1507 | 4153 bool draw_debug_line = false; |
2082 | 4154 bool new_speed = false; |
2043
2ccf638342d6
int max_flight_height and GetCeilingHeight function
Ritor1
parents:
2042
diff
changeset
|
4155 int max_flight_height = 4000; |
2034 | 4156 |
2037
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
2035
diff
changeset
|
4157 |
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
2035
diff
changeset
|
4158 |
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
2035
diff
changeset
|
4159 |
0 | 4160 //----- (00462C94) -------------------------------------------------------- |
4161 bool MM_Main(const wchar_t *pCmdLine) | |
4162 { | |
522 | 4163 IntegrityTest(); |
1706 | 4164 |
246 | 4165 char test[1024]; |
522 | 4166 sprintfex(test, "^Pi[%s]: çíàõàð^R[ü;êà;]", "Çîëòàí"); |
4167 | |
2052 | 4168 lua = new LuaVM; |
4169 lua->Initialize(); | |
2031 | 4170 |
1052 | 4171 bool bNoMargareth = false; |
0 | 4172 if (pCmdLine && *pCmdLine) |
4173 { | |
2061 | 4174 //if (wcsstr(pCmdLine, L"-usedefs")) |
4175 // bDebugResouces = 1; | |
0 | 4176 if (wcsstr(pCmdLine, L"-window")) |
2061 | 4177 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_RUN_IN_WIDOW; |
0 | 4178 |
4179 if (wcsstr(pCmdLine, L"-nointro")) | |
4180 bNoIntro = true;//dword_6BE364_game_settings_1 |= 4; | |
4181 if (wcsstr(pCmdLine, L"-nologo")) | |
4182 bNoLogo = true;//dword_6BE364_game_settings_1 |= 8; | |
4183 if (wcsstr(pCmdLine, L"-nosound")) | |
4184 bNoSound = true; //dword_6BE364_game_settings_1 |= 0x10; | |
4185 | |
4186 bWalkSound = ReadWindowsRegistryInt("WalkSound", 1) != 0; | |
4187 if (wcsstr(pCmdLine, L"-nowalksound")) | |
4188 bWalkSound = false;//dword_6BE364_game_settings_1 |= 0x20; | |
256 | 4189 if (wcsstr(pCmdLine, L"-novideo")) |
0 | 4190 { |
2061 | 4191 dword_6BE364_game_settings_1 |= GAME_SETTINGS_NO_HOUSE_ANIM; |
0 | 4192 bNoVideo = true; |
4193 } | |
4194 if (wcsstr(pCmdLine, L"-nocd")) | |
4195 bNoCD = true; | |
168 | 4196 if (wcsstr(pCmdLine, L"-new_sky")) |
4197 new_sky = true; | |
1052 | 4198 if (wcsstr(pCmdLine, L"-nomarg")) |
4199 bNoMargareth = true; | |
0 | 4200 } |
4201 | |
4202 | |
731 | 4203 /*v8 = _4AC1C9_get_cpu_speed(0, (Vec4_int_ *)a2); |
0 | 4204 Rect.left = *(int *)v8; |
4205 Rect.top = *(int *)(v8 + 4); | |
4206 Rect.right = *(int *)(v8 + 8); | |
4207 Rect.bottom = *(int *)(v8 + 12); | |
731 | 4208 uCPUSpeed = Rect.bottom;*/ |
4209 uCPUSpeed = 2048; // about 2GHz | |
4 | 4210 |
2035 | 4211 //constructors(); |
4 | 4212 |
1655 | 4213 if (!MM7_Initialize(640, 480)) |
734 | 4214 { |
4215 Log::Warning(L"MM init: failed"); | |
4216 pGame->Deinitialize(); | |
4217 return 1; | |
4218 } | |
0 | 4219 |
4220 pEventTimer->Pause(); | |
1397 | 4221 |
373 | 4222 SetUserInterface(PartyAlignment_Neutral, false); |
0 | 4223 ShowIntroVideo_and_LoadingScreen(); |
4224 WriteWindowsRegistryInt("Ran once", 1); | |
2061 | 4225 dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000; |
0 | 4226 pGame->InitializeGammaController(); |
4227 SecondaryInitialization(); | |
1541 | 4228 pRenderer->SetRasterClipRect(0, 0, 639, 479); |
0 | 4229 FinalInitialization(); |
4230 | |
4231 Log::Warning(L"MM: entering main loop"); | |
4232 while ( 1 ) | |
4233 { | |
1980 | 4234 MainMenuWindow* main_menu_window = MainMenuWindow::Create(); |
1815 | 4235 window->AddControl(main_menu_window); |
4236 | |
165 | 4237 MainMenu_Loop(); |
982 | 4238 uGameState = GAME_STATE_PLAYING; |
0 | 4239 while ( 1 ) |
4240 { | |
2098 | 4241 if (uGameState == GAME_FINISHED || GetCurrentMenuID() == MENU_EXIT_GAME) |
982 | 4242 { |
4243 pGame->Deinitialize(); | |
4244 return true; | |
4245 } | |
4246 | |
165 | 4247 if (GetCurrentMenuID() == MENU_NEWGAME) |
0 | 4248 { |
4249 if ( pAudioPlayer->hAILRedbook ) | |
165 | 4250 AIL_redbook_stop(pAudioPlayer->hAILRedbook); |
4251 pParty->Reset(); | |
783 | 4252 pOtherOverlayList->Reset(); |
4253 | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4254 strcpy(pCurrentMapName, pStartingMapName); |
165 | 4255 pParty->CreateDefaultParty(0); |
0 | 4256 PlayerCreationUI_Initialize(); |
165 | 4257 if ( PlayerCreationUI_Loop() ) |
0 | 4258 { |
4259 DeleteCCharFont(); | |
165 | 4260 break; |
0 | 4261 } |
4262 DeleteCCharFont(); | |
4263 bFlashQuestBook = true; | |
1397 | 4264 PlayFullscreenMovie(MOVIE_Emerald); |
4265 //pGame->pCShow->PlayMovie(MOVIE_Emerald, 0); | |
837 | 4266 SaveNewGame(); |
1052 | 4267 |
4268 if (bNoMargareth) | |
4269 _449B7E_toggle_bit(pParty->_quest_bits, PARTY_QUEST_EMERALD_MARGARETH_OFF, 1); | |
165 | 4270 pGame->Loop(); |
982 | 4271 |
4272 if (uGameState == GAME_STATE_NEWGAME_OUT_GAMEMENU) | |
165 | 4273 { |
4274 SetCurrentMenuID(MENU_NEWGAME); | |
982 | 4275 uGameState = GAME_STATE_PLAYING; |
165 | 4276 continue; |
4277 } | |
982 | 4278 else if (uGameState == GAME_STATE_GAME_QUITTING_TO_MAIN_MENU) |
4279 break; | |
4280 | |
4281 assert(false && "Invalid game state"); | |
165 | 4282 } |
4283 if (GetCurrentMenuID() == MENU_CREDITS) | |
0 | 4284 { |
4285 if ( pAudioPlayer->hAILRedbook ) | |
165 | 4286 AIL_redbook_stop(pAudioPlayer->hAILRedbook); |
1033 | 4287 MainMenuUI_Credits_Loop(); |
0 | 4288 break; |
4289 } | |
961 | 4290 if (GetCurrentMenuID() == MENU_5 || GetCurrentMenuID() == MENU_LoadingProcInMainMenu) |
2 | 4291 { |
982 | 4292 uGameState = GAME_STATE_PLAYING; |
1416 | 4293 pGame->Loop(); |
2 | 4294 } |
4 | 4295 else |
961 | 4296 { |
1458 | 4297 if (GetCurrentMenuID() == MENU_DebugBLVLevel) |
1416 | 4298 { |
4299 pMouse->Activate(0); | |
4300 | |
4301 pParty->Reset(); | |
4302 pParty->CreateDefaultParty(1); | |
1545 | 4303 |
4304 __debugbreak(); | |
4305 /*extern void CreateDefaultBLVLevel(); | |
1458 | 4306 CreateDefaultBLVLevel(); |
4307 | |
1545 | 4308 OPENFILENAMEA ofn; |
1416 | 4309 if ( !GetOpenFileNameA((LPOPENFILENAMEA)&ofn) ) |
4310 { | |
4311 pMouse->Activate(1); | |
4312 break; | |
4313 } | |
4314 _chdir("..\\"); | |
1545 | 4315 strcpy(pCurrentMapName, ofn.lpstrFileTitle);*/ |
1416 | 4316 pMouse->Activate(1); |
4317 pGame->Loop(); | |
4318 } | |
492 | 4319 } |
1214
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
4320 if ( uGameState == GAME_STATE_LOADING_GAME ) |
961 | 4321 { |
982 | 4322 SetCurrentMenuID(MENU_5); |
4323 uGameState = GAME_STATE_PLAYING; | |
0 | 4324 continue; |
961 | 4325 } |
165 | 4326 if ( uGameState == GAME_STATE_NEWGAME_OUT_GAMEMENU ) |
101 | 4327 { |
4328 SetCurrentMenuID(MENU_NEWGAME); | |
982 | 4329 uGameState = GAME_STATE_PLAYING; |
0 | 4330 continue; |
101 | 4331 } |
907 | 4332 if ( uGameState == GAME_STATE_GAME_QUITTING_TO_MAIN_MENU)// from the loaded game |
4333 { | |
0 | 4334 pAudioPlayer->StopChannels(-1, -1); |
982 | 4335 uGameState = GAME_STATE_PLAYING; |
0 | 4336 break; |
907 | 4337 } |
0 | 4338 } |
4339 if (!bNoSound && pAudioPlayer->hAILRedbook) | |
4340 { | |
328 | 4341 pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); |
0 | 4342 AIL_redbook_stop(pAudioPlayer->hAILRedbook); |
1541 | 4343 unsigned int startms, end_ms; |
0 | 4344 AIL_redbook_track_info(pAudioPlayer->hAILRedbook, 0xE, &startms, &end_ms); |
4345 AIL_redbook_play(pAudioPlayer->hAILRedbook, startms + 1, end_ms); | |
4346 } | |
4347 } | |
2050 | 4348 //lua_close(L); |
0 | 4349 pGame->Deinitialize(); |
734 | 4350 return 1; |
0 | 4351 } |
4352 | |
4353 //----- (004637E0) -------------------------------------------------------- | |
1458 | 4354 char sub_4637E0_is_there_popup_onscreen() |
0 | 4355 { |
4356 return dword_507BF0_is_there_popup_onscreen == 1; | |
4357 } | |
4358 // 507BF0: using guessed type int dword_507BF0_is_there_popup_onscreen; | |
4359 | |
4360 //----- (00466082) -------------------------------------------------------- | |
4361 void MM6_Initialize(const wchar_t *pIniFilename) | |
4362 { | |
4363 //int v0; // eax@1 | |
2151 | 4364 //UINT v1; // eax@18 |
0 | 4365 size_t v2; // eax@31 |
4366 size_t v3; // ebx@32 | |
4367 size_t v4; // edi@36 | |
4368 //char v5[120]; // [sp+Ch] [bp-17Ch]@1 | |
4369 //char String[120]; // [sp+84h] [bp-104h]@32 | |
4370 char pDefaultGroundTexture[16]; // [sp+FCh] [bp-8Ch]@32 | |
4371 //char pIniFilename[120]; // [sp+10Ch] [bp-7Ch]@1 | |
4372 unsigned int v9; // [sp+184h] [bp-4h]@28 | |
4373 | |
4374 //_getcwd(v5, 120); | |
4375 //sprintfex(pIniFilename, "%s\\mm6.ini", v5); | |
4376 viewparams = new ViewingParams; | |
819 | 4377 game_viewport_x = viewparams->uScreen_topL_X = GetPrivateProfileIntW(L"screen", L"vx1", 8, pIniFilename); |
4378 game_viewport_y = viewparams->uScreen_topL_Y = GetPrivateProfileIntW(L"screen", L"vy1", 8, pIniFilename); | |
4379 game_viewport_z = viewparams->uScreen_BttmR_X = GetPrivateProfileIntW(L"screen", L"vx2", 468, pIniFilename); | |
4380 game_viewport_w = viewparams->uScreen_BttmR_Y = GetPrivateProfileIntW(L"screen", L"vy2", 351, pIniFilename); | |
4381 game_viewport_width = game_viewport_z - game_viewport_x; | |
4382 game_viewport_height = game_viewport_w - game_viewport_y + 1; | |
0 | 4383 |
4384 | |
4385 pAudioPlayer = new AudioPlayer; | |
4386 pAudioPlayer->uMixerChannels = GetPrivateProfileIntW(L"settings", L"mixerchannels", 16, pIniFilename); | |
4387 if ( pAudioPlayer->uMixerChannels > 16 ) | |
4388 pAudioPlayer->uMixerChannels = 16; | |
4389 | |
4390 | |
4391 if (GetPrivateProfileIntW(L"debug", L"nomonster", 0, pIniFilename)) | |
2061 | 4392 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_ACTORS; |
2151 | 4393 if (ReadWindowsRegistryInt("startinwindow", 0)) |
2061 | 4394 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_RUN_IN_WIDOW; |
0 | 4395 if (GetPrivateProfileIntW(L"debug", L"showFR", 0, pIniFilename)) |
2061 | 4396 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_0002_SHOW_FR; |
0 | 4397 if (GetPrivateProfileIntW(L"debug", L"nodamage", 0, pIniFilename)) |
2061 | 4398 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_DAMAGE; |
0 | 4399 if (GetPrivateProfileIntW(L"debug", L"nodecoration", 0, pIniFilename)) |
2061 | 4400 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_DECORATIONS; |
0 | 4401 |
4402 wchar_t pStartingMapNameW[1024]; | |
4403 GetPrivateProfileStringW(L"file", L"startmap", L"out01.odm", pStartingMapNameW, 0x20u, pIniFilename); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4404 sprintf(pStartingMapName, "%S", pStartingMapNameW); |
0 | 4405 |
4406 v9 = 0; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4407 if ( strlen(pStartingMapName) ) |
0 | 4408 { |
4409 do | |
4410 { | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4411 if ( pStartingMapName[v9] == ' ' ) |
0 | 4412 pStartingMapName[v9] = 0; |
4413 ++v9; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4414 v2 = strlen(pStartingMapName); |
0 | 4415 } |
4416 while ( v9 < v2 ); | |
4417 } | |
4418 | |
1637 | 4419 pODMRenderParams = new ODMRenderParams; |
4420 pODMRenderParams->outdoor_no_mist = GetPrivateProfileIntW(L"debug", L"noMist", 0, pIniFilename); | |
4421 pODMRenderParams->bNoSky = GetPrivateProfileIntW(L"outdoor", L"nosky", 0, pIniFilename); | |
4422 pODMRenderParams->bDoNotRenderDecorations = GetPrivateProfileIntW(L"render", L"nodecorations", 0, pIniFilename); | |
4423 pODMRenderParams->outdoor_no_wavy_water = GetPrivateProfileIntW(L"outdoor", L"nowavywater", 0, pIniFilename); | |
0 | 4424 outdoor_grid_band_1 = GetPrivateProfileIntW(L"outdoor", L"gridband1", 10, pIniFilename); |
4425 outdoor_grid_band_2 = GetPrivateProfileIntW(L"outdoor", L"gridband2", 15, pIniFilename); | |
4426 outdoor_grid_band_3 = GetPrivateProfileIntW(L"outdoor", L"gridband3", 25, pIniFilename); | |
1637 | 4427 pODMRenderParams->terrain_gamma = GetPrivateProfileIntW(L"outdoor", L"ter_gamma", 0, pIniFilename); |
4428 pODMRenderParams->building_gamme = GetPrivateProfileIntW(L"outdoor", L"bld_gamma", 0, pIniFilename); | |
4429 pODMRenderParams->shading_dist_shade = GetPrivateProfileIntW(L"shading", L"dist_shade", 2048, pIniFilename); | |
4430 pODMRenderParams->shading_dist_shademist = GetPrivateProfileIntW(L"shading", L"dist_shademist", 4096, pIniFilename); | |
1765 | 4431 |
4432 int dist = 0x2000; | |
4433 extern bool new_draw_object_dist; | |
4434 if ( new_draw_object_dist ) | |
4435 dist = 0x6000; | |
4436 pODMRenderParams->shading_dist_mist = GetPrivateProfileIntW(L"shading", L"dist_mist", dist, pIniFilename); | |
0 | 4437 |
4438 wchar_t pDefaultSkyTextureW[1024]; | |
4439 GetPrivateProfileStringW(L"textures", L"sky", L"plansky1", pDefaultSkyTextureW, 0x10u, pIniFilename); | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4440 sprintf(pDefaultSkyTexture.data(), "%S", pDefaultSkyTextureW); |
0 | 4441 |
4442 wchar_t pDefaultGroundTextureW[1024]; | |
4443 GetPrivateProfileStringW(L"textures", L"default", L"dirt", pDefaultGroundTextureW, 0x10u, pIniFilename); | |
4444 sprintf(pDefaultGroundTexture, "%S", pDefaultGroundTextureW); | |
4445 | |
4446 wchar_t pFloat[1024]; | |
4447 GetPrivateProfileStringW(L"debug", L"recmod1", L"1.0", pFloat, 0x10u, pIniFilename); | |
4448 swscanf(pFloat, L"%f", &flt_6BE3A4_debug_recmod1); | |
4449 | |
4450 GetPrivateProfileStringW(L"debug", L"recmod2", L"1.0", pFloat, 0x10u, pIniFilename); | |
4451 swscanf(pFloat, L"%f", &flt_6BE3A8_debug_recmod2); | |
4452 | |
4453 flt_6BE3AC_debug_recmod1_x_1_6 = flt_6BE3A4_debug_recmod1 * 1.666666666666667; | |
4454 | |
4455 v3 = 0; | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4456 if ( strlen(pDefaultSkyTexture.data()) ) |
0 | 4457 { |
4458 do | |
4459 { | |
4460 if ( pDefaultSkyTexture[v3] == ' ' ) | |
4461 pDefaultSkyTexture[v3] = 0; | |
4462 ++v3; | |
4463 } | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4464 while ( v3 < strlen(pDefaultSkyTexture.data()) ); |
0 | 4465 } |
4466 v4 = 0; | |
4467 if ( strlen(pDefaultGroundTexture) ) | |
4468 { | |
4469 do | |
4470 { | |
4471 if ( pDefaultGroundTexture[v4] == ' ' ) | |
4472 pDefaultGroundTexture[v4] = 0; | |
4473 ++v4; | |
4474 } | |
4475 while ( v4 < strlen(pDefaultGroundTexture) ); | |
4476 } | |
4477 | |
4478 MM7Initialization(); | |
4479 } | |
4480 | |
4481 //----- (004666D5) -------------------------------------------------------- | |
2151 | 4482 void MM7Initialization() |
0 | 4483 { |
4484 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) | |
4485 { | |
2151 | 4486 /*if (byte_6BE388_graphicsmode == 0) |
0 | 4487 { |
4488 outdoor_grid_band_1 = 10; | |
4489 outdoor_grid_band_2 = 15; | |
4490 outdoor_grid_band_3 = 20; | |
1637 | 4491 pODMRenderParams->shading_dist_mist = 8192; |
4492 pODMRenderParams->bNoSky = false; | |
0 | 4493 LOBYTE(viewparams->field_20) = 0; |
2151 | 4494 }*/ |
1637 | 4495 pODMRenderParams->shading_dist_shade = 2048; |
4496 pODMRenderParams->terrain_gamma = 0; | |
4497 pODMRenderParams->building_gamme = 0; | |
4498 pODMRenderParams->shading_dist_shademist = 4096; | |
4499 pODMRenderParams->outdoor_no_wavy_water = 0; | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1409
diff
changeset
|
4500 //_47F4D3_initialize_terrain_bezier_stuff(outdoor_grid_band_1, outdoor_grid_band_2, outdoor_grid_band_3); |
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1409
diff
changeset
|
4501 { |
1637 | 4502 pODMRenderParams->outdoor_grid_band_3 = outdoor_grid_band_3; |
4503 pODMRenderParams->uPickDepth = outdoor_grid_band_3 * 512; | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1409
diff
changeset
|
4504 } |
0 | 4505 } |
4506 else | |
4507 { | |
4508 LOBYTE(viewparams->field_20) = 0; | |
4509 } | |
2101 | 4510 pParty->uFlags |= 2; |
692 | 4511 viewparams->uSomeY = viewparams->uScreen_topL_Y; |
4512 viewparams->uSomeX = viewparams->uScreen_topL_X; | |
4513 viewparams->uSomeZ = viewparams->uScreen_BttmR_X; | |
4514 viewparams->uSomeW = viewparams->uScreen_BttmR_Y; | |
4515 | |
4516 pViewport->SetScreen(viewparams->uScreen_topL_X, viewparams->uScreen_topL_Y, viewparams->uScreen_BttmR_X, viewparams->uScreen_BttmR_Y); | |
0 | 4517 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) |
1637 | 4518 pODMRenderParams->Initialize(); |
0 | 4519 } |
4520 | |
4521 //----- (00466C40) -------------------------------------------------------- | |
4522 const wchar_t *MENU_STATE_to_string(MENU_STATE m) | |
4523 { | |
4524 switch (m) | |
4525 { | |
982 | 4526 case -1: return L"-1"; |
4527 case MENU_MAIN: return L"MENU_MAIN"; | |
4528 case MENU_NEWGAME: return L"MENU_NEWGAME"; | |
4529 case MENU_CREDITS: return L"MENU_CREDITS"; | |
4530 case MENU_SAVELOAD: return L"MENU_SAVELOAD"; | |
4531 case MENU_EXIT_GAME: return L"MENU_EXIT_GAME"; | |
4532 case MENU_5: return L"MENU_5"; | |
4533 case MENU_CREATEPARTY: return L"MENU_CREATEPARTY"; | |
165 | 4534 case MENU_NAMEPANELESC: return L"MENU_NAMEPANELESC"; |
982 | 4535 case MENU_CREDITSPROC: return L"MENU_CREDITSPROC"; |
961 | 4536 case MENU_LoadingProcInMainMenu: return L"MENU_LoadingProcInMainMenu"; |
1458 | 4537 case MENU_DebugBLVLevel: return L"MENU_DebugBLVLevel"; |
165 | 4538 case MENU_CREDITSCLOSE: return L"MENU_CREDITSCLOSE"; |
982 | 4539 default: return L"unk"; |
0 | 4540 }; |
4541 }; | |
4542 void SetCurrentMenuID(MENU_STATE uMenu) | |
4543 { | |
2006 | 4544 sCurrentMenuID = uMenu; |
0 | 4545 |
4546 Log::Warning(L"CurrentMenu = %s", MENU_STATE_to_string(uMenu)); | |
4547 } | |
4548 | |
4549 //----- (00466CA0) -------------------------------------------------------- | |
4550 MENU_STATE GetCurrentMenuID() | |
4551 { | |
2006 | 4552 return sCurrentMenuID; |
0 | 4553 } |
4554 | |
4555 | |
4556 //----- (0046A6AC) -------------------------------------------------------- | |
1459 | 4557 int __fastcall _46A6AC_spell_render(int a1, int a2, int a3) |
0 | 4558 { |
4559 int result; // eax@2 | |
4560 int *v5; // esi@6 | |
4561 unsigned int v6; // ebx@6 | |
4562 signed int v7; // edi@9 | |
4563 int i; // eax@14 | |
4564 int v10; // ecx@19 | |
4565 unsigned int v13; // [sp+8h] [bp-10h]@4 | |
4566 int *v15; // [sp+10h] [bp-8h]@4 | |
4567 int v16; // [sp+14h] [bp-4h]@3 | |
4568 | |
4569 if ( pRenderer->pRenderD3D ) | |
4570 { | |
1459 | 4571 result = _46A6AC_spell_render_d3d(a1, a2, a3); |
0 | 4572 } |
4573 else | |
4574 { | |
1459 | 4575 __debugbreak(); // SW render never called |
0 | 4576 v16 = 0; |
692 | 4577 if ( (signed int)viewparams->uScreen_topL_Y < (signed int)viewparams->uScreen_BttmR_Y ) |
4578 { | |
4579 v15 = &pRenderer->pActiveZBuffer[viewparams->uScreen_topL_X + 640 * viewparams->uScreen_topL_Y]; | |
4580 v13 = ((viewparams->uScreen_BttmR_Y - viewparams->uScreen_topL_Y - 1) >> 1) + 1; | |
2101 | 4581 for ( v13; v13; --v13 ) |
0 | 4582 { |
2101 | 4583 if ( (signed int)viewparams->uScreen_topL_X < (signed int)viewparams->uScreen_BttmR_X ) |
0 | 4584 { |
4585 v5 = v15; | |
2101 | 4586 v6 = ((viewparams->uScreen_BttmR_X - viewparams->uScreen_topL_X - 1) >> 1) + 1; |
4587 for ( v6; v6; --v6 ) | |
0 | 4588 { |
848 | 4589 if ( PID_TYPE(*(char *)v5) == OBJECT_Actor) |
0 | 4590 { |
4591 if ( *v5 <= a3 << 16 ) | |
4592 { | |
848 | 4593 v7 = PID_ID((signed int)(unsigned __int16)*v5); |
2101 | 4594 if ( pActors[v7].uAIState != Dead && pActors[v7].uAIState != Dying && pActors[v7].uAIState != Removed |
4595 && pActors[v7].uAIState != Summoned && pActors[v7].uAIState != Disabled ) | |
0 | 4596 { |
2101 | 4597 for ( i = 0; i < v16; ++i ) |
0 | 4598 { |
2101 | 4599 if ( *(int *)(a1 + 4 * i) == v7 ) |
4600 break; | |
4601 } | |
4602 if ( i == v16 ) | |
4603 { | |
4604 if ( i < a2 - 1 ) | |
0 | 4605 { |
2101 | 4606 v10 = v16++; |
4607 *(int *)(a1 + 4 * v10) = v7; | |
0 | 4608 } |
4609 } | |
4610 } | |
4611 } | |
4612 } | |
4613 v5 += 2; | |
4614 } | |
4615 } | |
4616 v15 += 1280; | |
4617 } | |
4618 } | |
4619 result = v16; | |
4620 } | |
4621 return result; | |
4622 } | |
4623 | |
4624 //----- (0046A7C8) -------------------------------------------------------- | |
1459 | 4625 int __fastcall _46A6AC_spell_render_d3d(int a1, int a2, int a3) |
0 | 4626 { |
4627 unsigned int v3; // eax@2 | |
4628 unsigned int v5; // eax@2 | |
4629 unsigned int v6; // eax@4 | |
4630 int v10; // ecx@11 | |
4631 unsigned int v12; // [sp+10h] [bp-14h]@1 | |
4632 int v15; // [sp+1Ch] [bp-8h]@1 | |
4633 unsigned int a1a; // [sp+20h] [bp-4h]@1 | |
4634 | |
4635 v15 = 0; | |
4636 v12 = pRenderer->GetBillboardDrawListSize(); | |
2101 | 4637 if ( (signed int)pRenderer->GetBillboardDrawListSize() > 0 ) |
0 | 4638 { |
2101 | 4639 for ( a1a = 0; (signed int)a1a < (signed int)v12; ++a1a ) |
0 | 4640 { |
4641 v3 = pRenderer->GetParentBillboardID(a1a); | |
194 | 4642 v5 = (unsigned __int16)pBillboardRenderList[v3].object_pid; |
848 | 4643 if ( PID_TYPE(v5) == OBJECT_Actor) |
0 | 4644 { |
2101 | 4645 if ( pBillboardRenderList[v3].sZValue <= (unsigned int)(a3 << 16) ) |
0 | 4646 { |
848 | 4647 v6 = PID_ID(v5); |
2101 | 4648 if ( pActors[v6].uAIState != Dead && pActors[v6].uAIState != Dying && pActors[v6].uAIState != Removed |
4649 && pActors[v6].uAIState != Disabled && pActors[v6].uAIState != Summoned ) | |
1038 | 4650 { |
2101 | 4651 if ( pGame->pVisInstance->DoesRayIntersectBillboard((double)a3, a1a) ) |
1038 | 4652 { |
2101 | 4653 if ( v15 < a2 - 1 ) |
0 | 4654 { |
2101 | 4655 __debugbreak();// *(int *)(a1 + 4 * v10) = v6; ÷òî ýòî òàêîå? |
4656 v10 = v15++; | |
4657 *(int *)(a1 + 4 * v10) = v6; | |
0 | 4658 } |
4659 } | |
4660 } | |
4661 } | |
4662 } | |
4663 } | |
4664 } | |
4665 return v15; | |
4666 } | |
4667 | |
4668 //----- (0046A89E) -------------------------------------------------------- | |
1459 | 4669 int __fastcall _46A89E_immolation_effect(int a1, int a2, int a3) |
0 | 4670 { |
4671 int v5; // ebx@3 | |
4672 int v6; // eax@3 | |
4673 int v7; // ebx@3 | |
4674 unsigned int v8; // ecx@3 | |
4675 int v9; // edx@4 | |
4676 unsigned int v10; // edx@6 | |
4677 unsigned int v11; // edx@8 | |
4678 int v13; // ecx@15 | |
4679 int v17; // [sp+Ch] [bp-10h]@3 | |
4680 int v18; // [sp+10h] [bp-Ch]@3 | |
4681 int v19; // [sp+18h] [bp-4h]@1 | |
4682 | |
4683 v19 = 0; | |
2101 | 4684 for ( uint i = 0; i < (signed int)uNumActors; ++i ) |
0 | 4685 { |
2101 | 4686 v5 = abs(pActors[i].vPosition.x - pParty->vPosition.x); |
4687 v17 = abs(pActors[i].vPosition.y - pParty->vPosition.y); | |
4688 v18 = abs(pActors[i].vPosition.z - pParty->vPosition.z); | |
4689 v6 = v5; | |
4690 v7 = v17; | |
4691 v8 = v18; | |
4692 if ( v6 < v17 ) | |
0 | 4693 { |
2101 | 4694 v9 = v6; |
4695 v6 = v17; | |
4696 v7 = v9; | |
4697 } | |
4698 if ( v6 < v18 ) | |
4699 { | |
4700 v10 = v6; | |
4701 v6 = v18; | |
4702 v8 = v10; | |
4703 } | |
4704 if ( v7 < (signed int)v8 ) | |
4705 { | |
4706 v11 = v8; | |
4707 v8 = v7; | |
4708 v7 = v11; | |
4709 } | |
4710 if ( (signed int)(((unsigned int)(11 * v7) >> 5) + (v8 >> 2) + v6) <= a3 ) | |
4711 { | |
4712 if ( pActors[i].uAIState != Dead && pActors[i].uAIState != Dying && pActors[i].uAIState != Removed | |
4713 && pActors[i].uAIState != Disabled && pActors[i].uAIState != Summoned ) | |
0 | 4714 { |
2101 | 4715 __debugbreak();// *(int *)(a1 + 4 * v13) = i; ÷òî ýòî òàêîå? |
4716 v13 = v19++; | |
4717 *(int *)(a1 + 4 * v13) = i; | |
4718 if ( v19 >= a2 - 1 ) | |
4719 break; | |
0 | 4720 } |
4721 } | |
4722 } | |
4723 return v19; | |
4724 } | |
4725 | |
4726 //----- (0046BDA8) -------------------------------------------------------- | |
1458 | 4727 unsigned int GetGravityStrength() |
0 | 4728 { |
4729 int v0; // eax@1 | |
4730 | |
4731 v0 = ~LOBYTE(pGame->uFlags2) & 8; | |
4732 LOBYTE(v0) = v0 | 2; | |
4733 return (unsigned int)v0 >> 1; | |
4734 } | |
4735 | |
4736 //----- (0046BDC0) -------------------------------------------------------- | |
1458 | 4737 void UpdateUserInput_and_MapSpecificStuff() |
0 | 4738 { |
2061 | 4739 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME) |
0 | 4740 { |
2061 | 4741 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME; |
4742 return; | |
0 | 4743 } |
2061 | 4744 |
630 | 4745 if (uCurrentlyLoadedLevelType == LEVEL_Indoor) |
0 | 4746 BLV_UpdateUserInputAndOther(); |
630 | 4747 else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) |
0 | 4748 ODM_UpdateUserInputAndOther(); |
630 | 4749 |
783 | 4750 area_of_effect__damage_evaluate(); |
0 | 4751 } |
4752 | |
4753 //----- (0046BFFA) -------------------------------------------------------- | |
4754 bool __fastcall _46BFFA_check_object_intercept(unsigned int uLayingItemID, signed int a2) | |
4755 { | |
2101 | 4756 ObjectDesc *object; // ebx@1 |
0 | 4757 unsigned int v8; // eax@19 |
4758 signed int v10; // ebx@19 | |
4759 char *v11; // edx@20 | |
4760 unsigned __int16 v12; // ax@23 | |
4761 int v13; // eax@27 | |
4762 unsigned int v14; // ebx@33 | |
4763 int v16; // eax@36 | |
4764 unsigned int v17; // eax@37 | |
4765 __int16 v18; // di@37 | |
4766 signed int v19; // edx@37 | |
4767 unsigned __int8 v20; // sf@37 | |
4768 char *v21; // ecx@38 | |
4769 unsigned __int16 v22; // ax@41 | |
4770 unsigned int v23; // eax@46 | |
4771 signed int v24; // ebx@46 | |
4772 char *v25; // edx@47 | |
4773 int v26; // edx@54 | |
4774 int v27; // edx@55 | |
4775 int v28; // edx@56 | |
4776 int v29; // edx@57 | |
4777 unsigned __int16 v30; // ax@60 | |
4778 unsigned int v31; // ecx@60 | |
4779 int v32; // edi@60 | |
4780 unsigned int v33; // eax@65 | |
4781 signed int v34; // edx@65 | |
4782 char *v35; // ecx@66 | |
4783 unsigned __int16 v36; // ax@69 | |
4784 int v37; // ST14_4@72 | |
4785 int v38; // eax@72 | |
4786 int v39; // ST10_4@72 | |
4787 int v40; // ST0C_4@72 | |
4788 int v41; // edx@76 | |
4789 int v42; // edx@77 | |
4790 int v43; // edx@78 | |
4791 unsigned __int8 v44; // zf@79 | |
4792 int v45; // edx@79 | |
4793 unsigned __int16 v46; // ax@80 | |
4794 int v47; // eax@81 | |
4795 int v48; // edx@87 | |
4796 int v49; // edx@88 | |
4797 int v50; // edx@89 | |
4798 signed int v52; // ebx@93 | |
4799 char *v53; // edx@94 | |
4800 unsigned __int16 v54; // ax@98 | |
4801 unsigned int v55; // ecx@98 | |
4802 signed int v56; // ebx@98 | |
4803 char *v57; // edx@99 | |
4804 unsigned __int16 v58; // ax@102 | |
4805 unsigned __int16 v59; // ax@107 | |
4806 unsigned int v60; // ecx@107 | |
4807 signed int v61; // ebx@107 | |
4808 char *v62; // edx@108 | |
4809 unsigned __int16 v63; // ax@111 | |
4810 int v64; // ebx@114 | |
4811 signed int v65; // eax@114 | |
4812 unsigned int v66; // edi@123 | |
4813 unsigned __int16 v67; // ax@124 | |
4814 unsigned int v68; // ecx@124 | |
4815 signed int v69; // ebx@124 | |
4816 char *v70; // edx@125 | |
4817 unsigned __int16 v71; // ax@128 | |
4818 unsigned int v72; // ebx@131 | |
4819 int v78; // eax@133 | |
4820 char v79; // zf@139 | |
4821 unsigned int v80; // eax@140 | |
4822 signed int v81; // edx@140 | |
4823 char *v82; // ecx@141 | |
4824 unsigned __int16 v83; // ax@144 | |
4825 unsigned __int16 v84; // ax@151 | |
4826 unsigned int v85; // ecx@151 | |
4827 signed int v86; // ebx@151 | |
4828 char *v87; // edx@152 | |
4829 unsigned __int16 v88; // ax@155 | |
4830 unsigned int v89; // eax@158 | |
4831 int v90; // ST34_4@159 | |
4832 int v91; // eax@159 | |
4833 unsigned int v92; // eax@163 | |
4834 unsigned int v93; // eax@177 | |
4835 char *v94; // ecx@178 | |
4836 unsigned __int16 v95; // ax@181 | |
4837 unsigned __int16 v96; // ax@184 | |
4838 int v97; // eax@185 | |
4839 unsigned __int16 v98; // ax@191 | |
4840 char v100; // ST18_1@198 | |
4841 int v102; // eax@198 | |
4842 signed int v106; // eax@208 | |
4843 unsigned int v107; // edx@220 | |
4844 signed int v108; // ebx@225 | |
4845 unsigned int v109; // eax@234 | |
4846 signed int v110; // ebx@234 | |
4847 char *v111; // ecx@235 | |
4848 unsigned __int16 v112; // ax@238 | |
4849 unsigned __int16 v113; // si@241 | |
4850 int v114; // eax@242 | |
4851 int v115; // eax@245 | |
4852 unsigned __int16 v117; // ax@251 | |
4853 unsigned int v118; // ecx@251 | |
4854 signed int v119; // ebx@251 | |
4855 char *v120; // edx@252 | |
4856 unsigned __int16 v121; // ax@255 | |
4857 unsigned int v122; // eax@260 | |
4858 char *v123; // edx@261 | |
4859 int v124; // eax@267 | |
4860 int v125; // [sp-20h] [bp-4Ch]@28 | |
4861 char v132; // [sp-8h] [bp-34h]@131 | |
4862 char v134; // [sp-4h] [bp-30h]@131 | |
4863 signed int v135; // [sp-4h] [bp-30h]@217 | |
4864 int v136; // [sp+Ch] [bp-20h]@208 | |
4865 int v137; // [sp+10h] [bp-1Ch]@208 | |
4866 signed int v138; // [sp+14h] [bp-18h]@207 | |
4867 signed int v139; // [sp+18h] [bp-14h]@208 | |
4868 char *v140; // [sp+1Ch] [bp-10h]@61 | |
4869 signed int v141; // [sp+1Ch] [bp-10h]@117 | |
4870 unsigned int v142; // [sp+1Ch] [bp-10h]@158 | |
4871 signed int v143; // [sp+1Ch] [bp-10h]@172 | |
4872 char *v144; // [sp+1Ch] [bp-10h]@192 | |
4873 signed int v146; // [sp+20h] [bp-Ch]@60 | |
4874 int v147; // [sp+20h] [bp-Ch]@72 | |
4875 signed int v148; // [sp+20h] [bp-Ch]@158 | |
4876 unsigned __int16 v150; // [sp+20h] [bp-Ch]@208 | |
4877 signed int v152; // [sp+24h] [bp-8h]@208 | |
2101 | 4878 |
4879 //ïðèìåíåíèå: ôàåðáîëò â õðàìå ëóíû | |
4880 object = &pObjectList->pObjects[pSpriteObjects[uLayingItemID].uObjectDescID]; | |
4881 //v151 = PID_TYPE(a2); | |
848 | 4882 if ( PID_TYPE(a2) == OBJECT_Actor) |
4883 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4884 if ( PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Actor |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4885 && !pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].GetActorsRelation(&pActors[PID_ID(a2)]) ) |
0 | 4886 return 1; |
4887 } | |
4888 else | |
4889 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4890 if ( PID_TYPE(a2) == OBJECT_Player && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Player) |
0 | 4891 return 1; |
4892 } | |
4893 if ( pParty->bTurnBasedModeOn == 1 ) | |
4894 { | |
2101 | 4895 if ( pSpriteObjects[uLayingItemID].uAttributes & 4 ) |
0 | 4896 { |
1450 | 4897 --pTurnEngine->pending_actions; |
2101 | 4898 pSpriteObjects[uLayingItemID].uAttributes &= 0xFFFB; |
0 | 4899 } |
4900 } | |
2101 | 4901 if ( PID_TYPE(a2) == OBJECT_BModel && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) != OBJECT_Player) |
1280 | 4902 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4903 if (PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid) < 500) //bugfix PID_ID(v2->spell_caster_pid)==1000 |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4904 BYTE2(pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].uAttributes) |= 4; |
1280 | 4905 } |
4906 | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4907 //v6 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4908 //v7 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4909 if ( pSpriteObjects[uLayingItemID].uType > 3060 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4910 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4911 if ( pSpriteObjects[uLayingItemID].uType > 6090 ) |
0 | 4912 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4913 if ( pSpriteObjects[uLayingItemID].uType > 8090 ) |
0 | 4914 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4915 if ( pSpriteObjects[uLayingItemID].uType == 9010 ) |
0 | 4916 goto LABEL_247; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4917 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 4918 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4919 if ( pSpriteObjects[uLayingItemID].uType != 9040 ) |
0 | 4920 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4921 if ( pSpriteObjects[uLayingItemID].uType != 9080 ) |
0 | 4922 return 0; |
2101 | 4923 v95 = 0; |
4924 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
4925 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 4926 { |
2101 | 4927 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
4928 v95 = v146; | |
0 | 4929 } |
2101 | 4930 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
4931 if ( !v95 ) | |
4932 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4933 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 4934 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
4935 v102 = 8 * uLayingItemID; | |
4936 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
4937 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4938 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4939 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4940 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
4941 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
4942 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
4943 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4944 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4945 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4946 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4947 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 4948 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4949 return 0; |
0 | 4950 } |
2101 | 4951 sub_43A97E(uLayingItemID, a2); |
4952 ++pSpriteObjects[uLayingItemID].uType; | |
4953 v95 = 0; | |
4954 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4955 { | |
4956 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4957 v95 = v52; | |
4958 } | |
4959 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4960 if ( !v95 ) | |
4961 SpriteObject::OnInteraction(uLayingItemID); | |
4962 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4963 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4964 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4965 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4966 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4967 if ( !v96 ) | |
4968 v97 = 0; | |
4969 else | |
4970 v97 = (signed __int16)v96 + 4; | |
4971 v124 = 8 * uLayingItemID; | |
4972 LOBYTE(v124) = v124 | 2; | |
4973 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4974 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4975 return 0; | |
0 | 4976 } |
4977 LABEL_172: | |
4978 v143 = 17030; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4979 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 4980 { |
4981 case 0x1798u: | |
4982 v143 = 15040; | |
4983 break; | |
4984 case 0xFAAu: | |
4985 v143 = 13010; | |
4986 break; | |
4987 case 0x2346u: | |
4988 v143 = 18030; | |
4989 break; | |
4990 } | |
4991 v138 = 1; | |
2101 | 4992 if ( PID_TYPE(a2) != OBJECT_Actor) |
0 | 4993 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4994 if ( pSpriteObjects[uLayingItemID].uType != 9030 || pSpriteObjects[uLayingItemID].spell_skill != 4 ) |
2101 | 4995 { |
4996 SpriteObject::OnInteraction(uLayingItemID); | |
4997 return 0; | |
4998 } | |
4999 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); | |
0 | 5000 LABEL_233: |
5001 if ( !v138 ) | |
5002 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5003 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5004 v112 = 0; |
5005 for ( v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110 ) | |
0 | 5006 { |
2101 | 5007 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID ) |
5008 v112 = v110; | |
0 | 5009 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5010 pSpriteObjects[uLayingItemID].uObjectDescID = v112; |
0 | 5011 if ( !v112 ) |
2101 | 5012 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5013 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5014 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5015 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5016 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5017 v113 = pSpriteObjects[uLayingItemID].uSoundID; |
0 | 5018 if ( v113 ) |
5019 v114 = (signed __int16)v113 + 4; | |
5020 else | |
5021 v114 = 0; | |
2101 | 5022 v115 = 8 * uLayingItemID; |
5023 LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5024 v125 = v143 + 1; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5025 pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5026 return 0; |
0 | 5027 } |
2101 | 5028 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5029 return 0; |
5030 } | |
2101 | 5031 v106 = a2; |
0 | 5032 v150 = 0; |
848 | 5033 v139 = PID_ID(v106); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5034 v137 = pSpriteObjects[uLayingItemID].spell_level; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5035 v152 = pSpriteObjects[uLayingItemID].spell_skill; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5036 v136 = pSpriteObjects[uLayingItemID].spell_id; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5037 if ( pSpriteObjects[uLayingItemID].uType == 9030 ) |
0 | 5038 { |
5039 v150 = 2; | |
5040 if ( v152 == 2 ) | |
5041 { | |
5042 v150 = 3; | |
5043 } | |
5044 else | |
5045 { | |
5046 if ( v152 >= 3 ) | |
5047 v150 = 4; | |
5048 } | |
5049 BYTE2(pActors[v139].uAttributes) |= 8u; | |
5050 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5051 if ( pSpriteObjects[uLayingItemID].uType == 6040 ) |
0 | 5052 { |
5053 v135 = 7; | |
5054 } | |
5055 else | |
5056 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5057 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 5058 { |
5059 v135 = 9; | |
5060 } | |
5061 else | |
5062 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5063 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 5064 { |
5065 v107 = v136; | |
5066 LABEL_222: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5067 if ( pSpriteObjects[uLayingItemID].uType != 9030 || v152 != 4 ) |
0 | 5068 { |
5069 v108 = v139; | |
5070 if ( stru_50C198.GetMagicalResistance(&pActors[v139], v107) ) | |
5071 { | |
5072 v138 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5073 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 5074 { |
5075 pActors[v108].uAIState = Standing; | |
5076 pActors[v108].UpdateAnimation(); | |
5077 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5078 pActors[v108].pActorBuffs[v136].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v137 << 7) * 0.033333335), |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5079 v152, v150, 0, 0); |
0 | 5080 } |
5081 } | |
5082 else | |
5083 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5084 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); |
0 | 5085 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5086 pSpriteObjects[uLayingItemID].spell_level = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5087 pSpriteObjects[uLayingItemID].spell_skill = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5088 pSpriteObjects[uLayingItemID].spell_id = 0; |
0 | 5089 goto LABEL_233; |
5090 } | |
5091 v135 = 10; | |
5092 } | |
5093 } | |
5094 v107 = v135; | |
5095 goto LABEL_222; | |
5096 } | |
2101 | 5097 if ( pSpriteObjects[uLayingItemID].uType == 8090 |
5098 || pSpriteObjects[uLayingItemID].uType == 7030 | |
5099 || pSpriteObjects[uLayingItemID].uType == 7090 || pSpriteObjects[uLayingItemID].uType == 8000 ) | |
5100 { | |
5101 sub_43A97E(uLayingItemID, a2); | |
5102 ++pSpriteObjects[uLayingItemID].uType; | |
5103 v95 = 0; | |
5104 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5105 { | |
5106 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5107 v95 = v52; | |
5108 } | |
5109 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5110 if ( !v95 ) | |
5111 SpriteObject::OnInteraction(uLayingItemID); | |
5112 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5113 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5114 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5115 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5116 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5117 if ( !v96 ) | |
5118 v97 = 0; | |
5119 else | |
5120 v97 = (signed __int16)v96 + 4; | |
5121 v124 = 8 * uLayingItemID; | |
5122 LOBYTE(v124) = v124 | 2; | |
5123 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5124 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5125 return 0; | |
5126 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5127 if ( pSpriteObjects[uLayingItemID].uType == 8010 ) |
0 | 5128 { |
2101 | 5129 if ( PID_TYPE(a2) == 3 |
5130 && MonsterStats::BelongsToSupertype(pActors[PID_ID(a2)].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) ) | |
5131 sub_43A97E(uLayingItemID, a2); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5132 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5133 //v9 = 0; |
5134 v95 = 0; | |
5135 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5136 { |
2101 | 5137 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5138 v95 = v52; | |
0 | 5139 } |
2101 | 5140 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
5141 if ( !v95 ) | |
5142 SpriteObject::OnInteraction(uLayingItemID); | |
5143 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5144 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5145 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5146 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5147 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5148 if ( !v96 ) | |
5149 v97 = 0; | |
5150 else | |
5151 v97 = (signed __int16)v96 + 4; | |
5152 v92 = uLayingItemID; | |
5153 v124 = 8 * v92; | |
5154 LOBYTE(v124) = v124 | 2; | |
5155 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5156 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5157 return 0; | |
0 | 5158 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5159 v79 = pSpriteObjects[uLayingItemID].uType == 8030; |
0 | 5160 } |
5161 else | |
5162 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5163 if ( pSpriteObjects[uLayingItemID].uType == 6090 ) |
2101 | 5164 { |
5165 sub_43A97E(uLayingItemID, a2); | |
5166 ++pSpriteObjects[uLayingItemID].uType; | |
5167 v95 = 0; | |
5168 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5169 { | |
5170 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5171 v95 = v52; | |
5172 } | |
5173 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5174 if ( !v95 ) | |
5175 SpriteObject::OnInteraction(uLayingItemID); | |
5176 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5177 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5178 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5179 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5180 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5181 if ( !v96 ) | |
5182 v97 = 0; | |
5183 else | |
5184 v97 = (signed __int16)v96 + 4; | |
5185 v124 = 8 * uLayingItemID; | |
5186 LOBYTE(v124) = v124 | 2; | |
5187 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5188 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5189 return 0; | |
5190 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5191 if ( pSpriteObjects[uLayingItemID].uType <= 4070 ) |
0 | 5192 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5193 if ( pSpriteObjects[uLayingItemID].uType != 4070 ) |
0 | 5194 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5195 v48 = pSpriteObjects[uLayingItemID].uType - 3090; |
0 | 5196 if ( v48 ) |
5197 { | |
5198 v49 = v48 - 2; | |
5199 if ( v49 ) | |
5200 { | |
5201 v50 = v49 - 908; | |
2101 | 5202 if ( v49 == 908 ) |
5203 { | |
5204 sub_43A97E(uLayingItemID, a2); | |
5205 ++pSpriteObjects[uLayingItemID].uType; | |
5206 v95 = 0; | |
5207 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5208 { | |
5209 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5210 v95 = v52; | |
5211 } | |
5212 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5213 if ( !v95 ) | |
5214 SpriteObject::OnInteraction(uLayingItemID); | |
5215 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5216 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5217 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5218 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5219 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5220 if ( !v96 ) | |
5221 v97 = 0; | |
5222 else | |
5223 v97 = (signed __int16)v96 + 4; | |
5224 v124 = 8 * uLayingItemID; | |
5225 LOBYTE(v124) = v124 | 2; | |
5226 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5227 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5228 return 0; | |
5229 } | |
0 | 5230 v45 = v50 - 30; |
5231 v44 = v45 == 0; | |
5232 goto LABEL_91; | |
5233 } | |
2101 | 5234 //v9 = 0; |
5235 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType - 1; | |
5236 v58 = 0; | |
5237 for ( v56 = 0; v56 < (signed int)pObjectList->uNumObjects; ++v56 ) | |
0 | 5238 { |
2101 | 5239 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v56].uObjectID ) |
5240 v58 = v56; | |
0 | 5241 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5242 pSpriteObjects[uLayingItemID].uObjectDescID = v58; |
0 | 5243 if ( !v58 ) |
2101 | 5244 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5245 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5246 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5247 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5248 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5249 sub_43A97E(uLayingItemID, a2); |
5250 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
0 | 5251 v16 = 0; |
5252 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5253 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5254 v124 = 8 * uLayingItemID; |
0 | 5255 LOBYTE(v124) = v124 | 2; |
1456 | 5256 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5257 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5258 return 0; |
0 | 5259 } |
2101 | 5260 //v9 = 0; |
5261 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5262 v63 = 0; | |
5263 for ( v61 = 0; v61 < (signed int)pObjectList->uNumObjects; ++v61 ) | |
0 | 5264 { |
2101 | 5265 if ( v59 == pObjectList->pObjects[v61].uObjectID ) |
5266 v63 = v61; | |
0 | 5267 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5268 pSpriteObjects[uLayingItemID].uObjectDescID = v63; |
0 | 5269 if ( !v63 ) |
2101 | 5270 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5271 v64 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5272 v44 = pSpriteObjects[uLayingItemID].spell_skill == 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5273 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5274 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5275 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5276 v65 = 7; |
5277 if ( v44 ) | |
5278 v65 = 9; | |
5279 if ( v65 > 0 ) | |
5280 { | |
5281 v141 = v65; | |
5282 do | |
5283 { | |
2101 | 5284 v64 += (signed int)stru_5C6E00->uIntegerHalfPi / 2; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5285 pSpriteObjects[uLayingItemID].Create(v64, 0, 1000, 0); |
0 | 5286 --v141; |
5287 } | |
5288 while ( v141 ); | |
5289 } | |
2101 | 5290 SpriteObject::OnInteraction(uLayingItemID); |
5291 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5292 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5293 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5294 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5295 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5296 LOBYTE(v124) = v124 | 2; |
1456 | 5297 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5298 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5299 return 0; |
0 | 5300 } |
2101 | 5301 //v66 = 0; |
5302 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5303 return 1; |
2101 | 5304 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5305 v71 = 0; | |
5306 for ( v69 = 0; v69 < (signed int)pObjectList->uNumObjects; ++v69 ) | |
0 | 5307 { |
2101 | 5308 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v69].uObjectID ) |
5309 v71 = v69; | |
0 | 5310 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5311 pSpriteObjects[uLayingItemID].uObjectDescID = v71; |
0 | 5312 if ( !v71 ) |
2101 | 5313 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5314 v134 = 0; |
2101 | 5315 v72 = uLayingItemID; |
0 | 5316 v132 = 0; |
2101 | 5317 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5318 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5319 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5320 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2059 | 5321 AttackerInfo.Add(PID(OBJECT_Item,v72), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5322 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
0 | 5323 v78 = 0; |
5324 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5325 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5326 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5327 pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, v66, -1, v66, v78, v66, v66); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5328 return 0; |
0 | 5329 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5330 if ( pSpriteObjects[uLayingItemID].uType == 4090 ) |
0 | 5331 { |
2101 | 5332 //v9 = 0; |
5333 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5334 v88 = 0; | |
5335 for ( v86 = 0; v86 < (signed int)pObjectList->uNumObjects; ++v86 ) | |
0 | 5336 { |
2101 | 5337 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v86].uObjectID ) |
5338 v88 = v86; | |
0 | 5339 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5340 pSpriteObjects[uLayingItemID].uObjectDescID = v88; |
0 | 5341 if ( !v88 ) |
2101 | 5342 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5343 v89 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5344 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5345 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5346 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5347 v142 = v89; |
5348 v148 = 7; | |
5349 do | |
5350 { | |
5351 pRnd->SetRange(-128, 128); | |
5352 v90 = pRnd->GetInRange(); | |
5353 pRnd->SetRange(5, 500); | |
5354 v91 = pRnd->GetInRange(); | |
5355 v142 += (signed int)stru_5C6E00->uIntegerHalfPi >> 1; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5356 pSpriteObjects[uLayingItemID].Create(v90 + v142, 0, v91, 0); |
0 | 5357 --v148; |
5358 } | |
5359 while ( v148 ); | |
2101 | 5360 SpriteObject::OnInteraction(uLayingItemID); |
5361 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5362 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5363 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5364 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5365 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5366 LOBYTE(v124) = v124 | 2; |
1456 | 5367 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id-1] + 1; |
2101 | 5368 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5369 return 0; |
0 | 5370 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5371 if ( pSpriteObjects[uLayingItemID].uType == 4092 ) |
0 | 5372 { |
2101 | 5373 //v66 = 0; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5374 pSpriteObjects[uLayingItemID].uType = 4091; |
2101 | 5375 v83 = 0; |
5376 for ( v81 = 0; v81 < (signed int)pObjectList->uNumObjects; ++v81 ) | |
0 | 5377 { |
2101 | 5378 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v81].uObjectID ) |
5379 v83 = v81; | |
0 | 5380 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5381 pSpriteObjects[uLayingItemID].uObjectDescID = v83; |
0 | 5382 if ( !v83 ) |
2101 | 5383 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5384 v134 = 0; |
2102 | 5385 //v72 = uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5386 v132 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5387 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5388 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5389 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5390 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2102 | 5391 AttackerInfo.Add(PID(OBJECT_Item, uLayingItemID), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5392 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5393 v78 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5394 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5395 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5396 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2102 | 5397 pAudioPlayer->PlaySound((SoundID)v125, pSpriteObjects[uLayingItemID].vPosition.x, 0, -1, 0, v78, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5398 return 0; |
0 | 5399 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5400 if ( pSpriteObjects[uLayingItemID].uType == 4100 || pSpriteObjects[uLayingItemID].uType == 6010 ) |
2101 | 5401 { |
5402 sub_43A97E(uLayingItemID, a2); | |
5403 ++pSpriteObjects[uLayingItemID].uType; | |
5404 v95 = 0; | |
5405 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5406 { | |
5407 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5408 v95 = v52; | |
5409 } | |
5410 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5411 if ( !v95 ) | |
5412 SpriteObject::OnInteraction(uLayingItemID); | |
5413 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5414 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5415 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5416 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5417 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5418 if ( !v96 ) | |
5419 v97 = 0; | |
5420 else | |
5421 v97 = (signed __int16)v96 + 4; | |
5422 v124 = 8 * uLayingItemID; | |
5423 LOBYTE(v124) = v124 | 2; | |
5424 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5425 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5426 return 0; | |
5427 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5428 v79 = pSpriteObjects[uLayingItemID].uType == 6040; |
0 | 5429 } |
5430 if ( !v79 ) | |
5431 return 0; | |
5432 goto LABEL_172; | |
5433 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5434 if ( pSpriteObjects[uLayingItemID].uType == 3060 ) |
2101 | 5435 { |
5436 sub_43A97E(uLayingItemID, a2); | |
5437 ++pSpriteObjects[uLayingItemID].uType; | |
5438 v95 = 0; | |
5439 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5440 { | |
5441 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5442 v95 = v52; | |
5443 } | |
5444 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5445 if ( !v95 ) | |
5446 SpriteObject::OnInteraction(uLayingItemID); | |
5447 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5448 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5449 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5450 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5451 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5452 if ( !v96 ) | |
5453 v97 = 0; | |
5454 else | |
5455 v97 = (signed __int16)v96 + 4; | |
5456 v124 = 8 * uLayingItemID; | |
5457 LOBYTE(v124) = v124 | 2; | |
5458 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5459 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5460 return 0; | |
5461 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5462 if ( pSpriteObjects[uLayingItemID].uType <= 555 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5463 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5464 if ( pSpriteObjects[uLayingItemID].uType == 555 ) |
0 | 5465 { |
2101 | 5466 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5467 ++pSpriteObjects[uLayingItemID].uType; |
0 | 5468 v18 = 0; |
2101 | 5469 v22 = 0; |
5470 v25 = (char *)&pObjectList->pObjects->uObjectID; | |
5471 for ( v24 = 0; v24 < (signed int)pObjectList->uNumObjects; ++v24 ) | |
0 | 5472 { |
2101 | 5473 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v24].uObjectID ) |
5474 v22 = v24; | |
0 | 5475 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5476 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
0 | 5477 if ( v22 == v18 ) |
2101 | 5478 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5479 pSpriteObjects[uLayingItemID].vVelocity.z = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5480 pSpriteObjects[uLayingItemID].vVelocity.y = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5481 pSpriteObjects[uLayingItemID].vVelocity.x = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5482 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; |
0 | 5483 } |
5484 else | |
5485 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5486 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 5487 { |
5488 case 500: | |
5489 case 505: | |
5490 case 510: | |
5491 case 515: | |
5492 case 520: | |
5493 case 525: | |
5494 case 530: | |
5495 case 535: | |
5496 case 540: | |
2101 | 5497 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5498 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5499 v12 = 0; |
5500 for ( v10 = 0; v10 < (signed int)pObjectList->uNumObjects; ++v10 ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5501 { |
2101 | 5502 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v10].uObjectID ) |
5503 v12 = v10; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5504 } |
2101 | 5505 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
5506 if ( !v12 ) | |
5507 SpriteObject::OnInteraction(uLayingItemID); | |
5508 v44 = pSpriteObjects[uLayingItemID].uType == 555; | |
5509 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5510 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5511 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5512 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5513 if ( !v44 ) | |
5514 { | |
5515 v13 = 8 * uLayingItemID; | |
5516 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5517 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
5518 } | |
5519 return 0; | |
0 | 5520 case 545: |
5521 case 550: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5522 if ( pSpriteObjects[uLayingItemID].stru_24.uItemID != 405 && pSpriteObjects[uLayingItemID].stru_24.uSpecEnchantmentType != 3 ) |
0 | 5523 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5524 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5525 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5526 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5527 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5528 sub_43A97E(uLayingItemID, a2); |
5529 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5530 if ( pSpriteObjects[uLayingItemID].uSoundID == 0 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5531 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5532 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5533 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5534 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5535 LOBYTE(v124) = v124 | 2; |
1996 | 5536 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5537 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5538 return 0; |
0 | 5539 } |
5540 v18 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5541 pSpriteObjects[uLayingItemID].uType = 600; |
2101 | 5542 v22 = 0; |
5543 for ( v19 = 0; v19 < (signed int)pObjectList->uNumObjects; ++v19 ) | |
0 | 5544 { |
2101 | 5545 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v19].uObjectID ) |
5546 v22 = v19; | |
0 | 5547 } |
2101 | 5548 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
5549 if ( !v22 ) | |
5550 SpriteObject::OnInteraction(uLayingItemID); | |
5551 pSpriteObjects[uLayingItemID].vVelocity.z = v18; | |
5552 pSpriteObjects[uLayingItemID].vVelocity.y = v18; | |
5553 pSpriteObjects[uLayingItemID].vVelocity.x = v18; | |
5554 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; | |
0 | 5555 default: |
5556 return 0; | |
5557 } | |
2101 | 5558 v12 = 0; |
5559 for ( v10; v10 < (signed int)v8; ++v10 ) | |
0 | 5560 { |
5561 v11 += 56; | |
2101 | 5562 if ( pSpriteObjects[uLayingItemID].uType != *(short *)v11 ) |
5563 v12 = v10; | |
0 | 5564 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5565 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
0 | 5566 if ( !v12 ) |
2101 | 5567 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5568 v44 = pSpriteObjects[uLayingItemID].uType == 555; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5569 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5570 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5571 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5572 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5573 if ( !v44 ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5574 { |
2101 | 5575 v13 = 8 * uLayingItemID; |
5576 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5577 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5578 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5579 } |
0 | 5580 } |
5581 return 0; | |
5582 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5583 if ( pSpriteObjects[uLayingItemID].uType > 1100 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5584 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5585 v41 = pSpriteObjects[uLayingItemID].uType - 2030; |
0 | 5586 if ( !v41 ) |
5587 goto LABEL_247; | |
5588 v42 = v41 - 30; | |
5589 if ( v42 ) | |
5590 { | |
5591 v43 = v42 - 40; | |
2101 | 5592 if ( v42 == 40 ) |
5593 { | |
5594 if ( PID_TYPE(a2) != 3 ) | |
5595 { | |
5596 //v32 = 0; | |
5597 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5598 v46 = 0; | |
5599 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5600 { | |
5601 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5602 v46 = v146; | |
5603 } | |
5604 pSpriteObjects[uLayingItemID].uObjectDescID = v46; | |
5605 if ( !v46 ) | |
5606 SpriteObject::OnInteraction(uLayingItemID); | |
5607 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5608 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5609 v102 = 8 * uLayingItemID; | |
5610 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5611 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5612 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5613 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5614 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5615 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5616 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5617 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5618 v47 = 0; | |
5619 else | |
5620 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5621 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5622 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5623 return 0; | |
5624 } | |
5625 return 1; | |
5626 } | |
0 | 5627 v45 = v43 - 910; |
5628 v44 = v45 == 0; | |
5629 LABEL_91: | |
5630 if ( !v44 && v45 != 20 ) | |
5631 return 0; | |
5632 } | |
2101 | 5633 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5634 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5635 v95 = 0; |
5636 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5637 { |
2101 | 5638 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5639 v95 = v52; | |
0 | 5640 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5641 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
2101 | 5642 if ( !v95 ) |
5643 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5644 v96 = pSpriteObjects[uLayingItemID].uSoundID; |
2101 | 5645 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5646 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5647 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5648 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5649 if ( !v96 ) | |
0 | 5650 v97 = 0; |
5651 else | |
5652 v97 = (signed __int16)v96 + 4; | |
2101 | 5653 v124 = 8 * uLayingItemID; |
5654 LOBYTE(v124) = v124 | 2; | |
5655 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5656 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5657 return 0; | |
5658 } | |
5659 if ( pSpriteObjects[uLayingItemID].uType == 1100 ) | |
5660 { | |
5661 sub_43A97E(uLayingItemID, a2); | |
5662 ++pSpriteObjects[uLayingItemID].uType; | |
5663 v95 = 0; | |
5664 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5665 { | |
5666 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5667 v95 = v52; | |
5668 } | |
5669 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5670 if ( !v95 ) | |
5671 SpriteObject::OnInteraction(uLayingItemID); | |
5672 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5673 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5674 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5675 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5676 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5677 if ( !v96 ) | |
5678 v97 = 0; | |
5679 else | |
5680 v97 = (signed __int16)v96 + 4; | |
5681 v92 = uLayingItemID; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5682 v124 = 8 * v92; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5683 LOBYTE(v124) = v124 | 2; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5684 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5685 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5686 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5687 } |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5688 v26 = pSpriteObjects[uLayingItemID].uType - 600; |
2101 | 5689 if ( pSpriteObjects[uLayingItemID].uType == 600 ) |
0 | 5690 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5691 pSpriteObjects[uLayingItemID].uType = 601; |
2101 | 5692 v36 = 0; |
5693 for ( v34 = 0; v34 < (signed int)pObjectList->uNumObjects; ++v34 ) | |
0 | 5694 { |
2101 | 5695 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v34].uObjectID ) |
5696 v36 = v34; | |
0 | 5697 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5698 pSpriteObjects[uLayingItemID].uObjectDescID = v36; |
0 | 5699 if ( !v36 ) |
2101 | 5700 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5701 v37 = pSpriteObjects[uLayingItemID].vPosition.z; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5702 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
2101 | 5703 v38 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5704 v39 = pSpriteObjects[uLayingItemID].vPosition.y; |
2101 | 5705 LOBYTE(v38) = PID(OBJECT_Item, uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5706 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5707 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5708 v40 = pSpriteObjects[uLayingItemID].vPosition.x; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5709 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5710 v147 = v38; |
2059 | 5711 AttackerInfo.Add(v38, 512, v40, v39, v37, 0, 0); |
2101 | 5712 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) |
5713 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5714 pAudioPlayer->PlaySound(SOUND_8, v147, 0, -1, 0, 0, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5715 return 0; |
0 | 5716 } |
5717 v27 = v26 - 410; | |
2101 | 5718 if ( v26 == 410 ) |
5719 { | |
5720 sub_43A97E(uLayingItemID, a2); | |
5721 ++pSpriteObjects[uLayingItemID].uType; | |
5722 v95 = 0; | |
5723 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5724 { | |
5725 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5726 v95 = v52; | |
5727 } | |
5728 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5729 if ( !v95 ) | |
5730 SpriteObject::OnInteraction(uLayingItemID); | |
5731 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5732 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5733 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5734 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5735 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5736 if ( !v96 ) | |
5737 v97 = 0; | |
5738 else | |
5739 v97 = (signed __int16)v96 + 4; | |
5740 v124 = 8 * uLayingItemID; | |
5741 LOBYTE(v124) = v124 | 2; | |
5742 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5743 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5744 return 0; | |
5745 } | |
0 | 5746 v28 = v27 - 40; |
5747 if ( !v28 ) | |
2101 | 5748 { |
5749 v95 = 0; | |
5750 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5751 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5752 { | |
5753 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5754 v95 = v146; | |
5755 } | |
5756 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5757 if ( !v95 ) | |
5758 SpriteObject::OnInteraction(uLayingItemID); | |
5759 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5760 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5761 v102 = 8 * uLayingItemID; | |
5762 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5763 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5764 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5765 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5766 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5767 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5768 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5769 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5770 v47 = 0; | |
5771 else | |
5772 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5773 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5774 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5775 return 0; | |
5776 } | |
0 | 5777 v29 = v28 - 10; |
5778 if ( v29 ) | |
5779 { | |
5780 if ( v29 != 20 ) | |
5781 return 0; | |
2101 | 5782 if ( PID_TYPE(a2) != 3 ) |
0 | 5783 { |
2101 | 5784 //v32 = 0; |
5785 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5786 v46 = 0; | |
5787 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 5788 { |
2101 | 5789 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
5790 v46 = v146; | |
0 | 5791 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5792 pSpriteObjects[uLayingItemID].uObjectDescID = v46; |
2101 | 5793 if ( !v46 ) |
5794 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5795 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5796 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
5797 v102 = 8 * uLayingItemID; | |
5798 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5799 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5800 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5801 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5802 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5803 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5804 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5805 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5806 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5807 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5808 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5809 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5810 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5811 return 0; |
0 | 5812 } |
5813 return 1; | |
5814 } | |
5815 LABEL_247: | |
2101 | 5816 //v9 = 0; |
5817 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5818 return 1; |
2101 | 5819 if ( PID_TYPE(a2) != 2 ) |
0 | 5820 { |
2101 | 5821 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5822 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5823 v95 = 0; |
5824 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5825 { |
2101 | 5826 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5827 v95 = v52; | |
0 | 5828 } |
2101 | 5829 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
5830 if ( !v95 ) | |
5831 SpriteObject::OnInteraction(uLayingItemID); | |
5832 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5833 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5834 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5835 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5836 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5837 v97 = 0; | |
5838 else | |
5839 v97 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5840 v124 = 8 * uLayingItemID; | |
5841 LOBYTE(v124) = v124 | 2; | |
5842 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5843 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5844 return 0; | |
0 | 5845 } |
2101 | 5846 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5847 v121 = 0; | |
5848 for ( v119 = 0; v119 < (signed int)pObjectList->uNumObjects; ++v119 ) | |
0 | 5849 { |
2101 | 5850 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v119].uObjectID ) |
5851 v121 = v119; | |
0 | 5852 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5853 pSpriteObjects[uLayingItemID].uObjectDescID = v121; |
0 | 5854 if ( !v121 ) |
2101 | 5855 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5856 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5857 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5858 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5859 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5860 v13 = 8 * uLayingItemID; |
5861 LOBYTE(v13) = PID(OBJECT_Item,uLayingItemID); | |
5862 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
0 | 5863 return 0; |
5864 } |