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