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