Mercurial > mm7
annotate mm7_2.cpp @ 2214:20995bb8895a
GameResultsApply() full refactored
author | Ritor1 |
---|---|
date | Thu, 13 Feb 2014 23:02:32 +0600 |
parents | e18200fcfb50 |
children | e9625ad08541 |
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(); | |
2197 | 140 *(int *)&player->pActiveSkills[PLAYER_SKILL_SHIELD] = v5; |
141 *(int *)&player->pActiveSkills[PLAYER_SKILL_CHAIN] = v6; | |
1413 | 142 } |
143 } | |
144 break; | |
145 | |
2197 | 146 case Cook://Ïîâàð |
1413 | 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 if ( dstHeight <= 0 ) |
1129
9362028fccd1
sub_451007_scale_image_bicubic cleanup - extracting common bodies from conditions
Grumpy7
parents:
1128
diff
changeset
|
920 return result; |
1600
0016b08ab621
stru350::sub_451007_scale_image_bicubic - fixing a memory access bug
Grumpy7
parents:
1546
diff
changeset
|
921 |
2212 | 922 //do |
923 for ( v231 = 0; v231 < dstHeight; v231++ ) | |
1148
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)); |
2212 | 979 //++v231; |
1148
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 } |
2212 | 982 //while(v231 < dstHeight); |
1148
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 int result; // eax@8 | |
1585 int v6; // edi@11 | |
1586 int v7; // ebx@11 | |
1587 int v8; // edi@11 | |
1588 int v9; // ebx@12 | |
1589 int v10; // eax@12 | |
1590 char v11; // zf@16 | |
1591 int v12; // edi@20 | |
1592 int v13; // eax@20 | |
1593 int v14; // ebx@20 | |
1594 int v15; // eax@20 | |
1595 int v16; // eax@20 | |
1596 int v17; // eax@20 | |
1597 int v18; // eax@21 | |
1598 SpawnPointMM7 v19; // [sp+Ch] [bp-38h]@1 | |
1599 int v22; // [sp+2Ch] [bp-18h]@3 | |
1600 unsigned int uFaceID; // [sp+38h] [bp-Ch]@10 | |
1601 int v26; // [sp+3Ch] [bp-8h]@11 | |
1602 int v27; // [sp+40h] [bp-4h]@11 | |
1415 | 1603 |
1604 if (!uNumActors) | |
1605 return 0; | |
1606 | |
2207 | 1607 for ( uint mon_id = 0; mon_id < uNumActors; ++mon_id ) |
0 | 1608 { |
2207 | 1609 if ((pActors[mon_id].pMonsterInfo.uID < 121 || pActors[mon_id].pMonsterInfo.uID > 123) && // Dwarf FemaleC A-C |
1610 (pActors[mon_id].pMonsterInfo.uID < 124 || pActors[mon_id].pMonsterInfo.uID > 126) && // Dwarf MaleA A-C | |
1611 (pActors[mon_id].pMonsterInfo.uID < 133 || pActors[mon_id].pMonsterInfo.uID > 135) && // Peasant Elf FemaleA A-C | |
1612 pActors[mon_id].CanAct()) | |
0 | 1613 { |
2207 | 1614 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) |
1615 { | |
1616 v22 = 0; | |
1617 uint face_id = 0; | |
1618 for ( face_id; face_id < 100; ++face_id ) | |
1619 { | |
1620 v6 = rand() % 1024 + 512; | |
1621 v7 = rand() % (signed int)stru_5C6E00->uIntegerDoublePi; | |
1622 v19.vPosition.x = pParty->vPosition.x + fixpoint_mul(stru_5C6E00->Cos(v7), v6); | |
1623 v8 = 0; | |
1624 v19.uIndex = a2; | |
1625 v19.vPosition.y = fixpoint_mul(stru_5C6E00->Sin(v7), v6) + pParty->vPosition.y; | |
1626 v19.vPosition.z = pParty->vPosition.z; | |
1627 v26 = 0; | |
1628 v27 = 0; | |
1629 v19.vPosition.z = ODM_GetFloorLevel(v19.vPosition.x, v19.vPosition.y, pParty->vPosition.z, 0, &v26, &v27, 0); | |
1630 for( int i = 0; i < pOutdoor->uNumBModels; i++ ) | |
1631 { | |
1632 v9 = abs(v19.vPosition.y - pOutdoor->pBModels[i].vBoundingCenter.y); | |
1633 v10 = abs(v19.vPosition.x - pOutdoor->pBModels[i].vBoundingCenter.x); | |
1634 if ( int_get_vector_length(v10, v9, 0) < pOutdoor->pBModels[i].sBoundingRadius + 256 ) | |
1635 { | |
1636 v22 = 1; | |
1637 break; | |
1638 } | |
1639 } | |
1640 if ( v22 ) | |
1641 { | |
1642 v11 = face_id == 100; | |
1643 break; | |
1644 } | |
1645 } | |
1646 v11 = face_id == 100; | |
1647 } | |
1648 else if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) | |
1649 { | |
1650 v22 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z); | |
1651 for ( uint i = 0; i < 100; ++i ) | |
1652 { | |
1653 v12 = rand() % 512 + 256; | |
1654 v13 = rand(); | |
1655 v14 = v13 % (signed int)stru_5C6E00->uIntegerDoublePi; | |
1656 v15 = stru_5C6E00->Cos(v13 % (signed int)stru_5C6E00->uIntegerDoublePi); | |
1657 v19.vPosition.x = pParty->vPosition.x + fixpoint_mul(v15, v12); | |
1658 v16 = stru_5C6E00->Sin(v13 % (signed int)stru_5C6E00->uIntegerDoublePi); | |
1659 v19.vPosition.y = fixpoint_mul(v16, v12) + pParty->vPosition.y; | |
1660 v19.vPosition.z = pParty->vPosition.z; | |
1661 v19.uIndex = a2; | |
1662 v17 = pIndoor->GetSector(v19.vPosition.x, v19.vPosition.y, pParty->vPosition.z); | |
1663 if ( v17 == v22 ) | |
1664 { | |
1665 v18 = BLV_GetFloorLevel(v19.vPosition.x, v19.vPosition.y, v19.vPosition.z, v17, &uFaceID); | |
1666 v19.vPosition.z = v18; | |
1667 if ( v18 != -30000 ) | |
1668 { | |
1669 if ( abs(v18 - pParty->vPosition.z) <= 1024 ) | |
1670 break; | |
1671 } | |
1672 } | |
1673 } | |
1674 v11 = v26 == 100; | |
1675 } | |
1676 if ( v11 ) | |
1677 result = 0; | |
1678 else | |
1679 { | |
1680 SpawnEncounter(a1, &v19, 0, 0, 1); | |
1681 result = a2; | |
1682 } | |
0 | 1683 } |
1415 | 1684 |
2207 | 1685 //break; |
1415 | 1686 //v22 = v3->pMonsterInfo.uID - 1; |
1687 //v4 = (signed __int64)((double)v22 * 0.3333333333333333); | |
1688 //if ( (int)v4 != 40 ) | |
1689 //{ | |
1690 // if ( (int)v4 != 41 && (int)v4 != 44 && v3->CanAct() ) | |
1691 // break; | |
1692 //} | |
1693 //++v2; | |
1694 //++v3; | |
1695 //if ( v2 >= (signed int)uNumActors ) | |
1696 // goto LABEL_8; | |
0 | 1697 } |
1698 return result; | |
1699 } | |
1700 | |
1701 //----- (00450AAA) -------------------------------------------------------- | |
1702 void RespawnGlobalDecorations() | |
1703 { | |
1822 | 1704 memset(stru_5E4C90_MapPersistVars._decor_events.data(), 0, 125); |
0 | 1705 |
1706 uint decorEventIdx = 0; | |
1707 for (uint i = 0; i < uNumLevelDecorations; ++i) | |
1708 { | |
1980 | 1709 LevelDecoration* decor = &pLevelDecorations[i]; |
0 | 1710 |
1514
965af46e8793
Rename LevelDecoration::field_16_event_id to LevelDecoration::uEventID.
yoctozepto
parents:
1513
diff
changeset
|
1711 if (!decor->uEventID) |
0 | 1712 { |
1713 if (decor->IsInteractive()) | |
1714 { | |
1715 if (decorEventIdx < 124) | |
1716 { | |
1717 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
|
1718 stru_5E4C90_MapPersistVars._decor_events[decorEventIdx++] = decor->GetGlobalEvent(); |
0 | 1719 } |
1720 } | |
1721 } | |
1722 } | |
1723 } | |
1724 | |
1725 //----- (00450B0A) -------------------------------------------------------- | |
1726 bool __fastcall SpawnActor(unsigned int uMonsterID) | |
1727 { | |
1728 unsigned int v1; // ebx@1 | |
1729 bool result; // eax@2 | |
1730 MonsterDesc *v3; // esi@5 | |
1731 MonsterInfo *v4; // edi@5 | |
1732 Vec3_int_ v5; // ST08_12@5 | |
1733 unsigned int v6; // ecx@5 | |
1734 Actor *v7; // eax@7 | |
1735 Actor actor; // [sp+4h] [bp-350h]@5 | |
1736 Vec3_int_ pOut; // [sp+348h] [bp-Ch]@5 | |
1737 | |
1738 v1 = uMonsterID; | |
1739 if ( uNumActors == 499 ) | |
1740 { | |
1741 result = 0; | |
1742 } | |
1743 else | |
1744 { | |
1745 if ( (signed int)uMonsterID >= (signed int)pMonsterList->uNumMonsters ) | |
1746 v1 = 0; | |
1747 v3 = &pMonsterList->pMonsters[v1]; | |
1748 v4 = &pMonsterStats->pInfos[v1 + 1]; | |
1749 memset(&actor, 0, 0x344u); | |
1750 strcpy(actor.pActorName, v4->pName); | |
1751 actor.sCurrentHP = LOWORD(v4->uHP); | |
1752 memcpy(&actor.pMonsterInfo, &pMonsterStats->pInfos[v1 + 1], 0x58u); | |
1753 actor.word_000086_some_monster_id = v1 + 1; | |
1754 actor.uActorRadius = v3->uMonsterRadius; | |
1755 actor.uActorHeight = v3->uMonsterHeight; | |
1756 actor.uMovementSpeed = v3->uMovementSpeed; | |
1757 v5 = pParty->vPosition; | |
1758 Vec3_int_::Rotate(200, pParty->sRotationY, 0, v5, &pOut.x, &pOut.z, &pOut.y); | |
1759 actor.vInitialPosition.x = pOut.x; | |
1760 actor.vPosition.x = pOut.x; | |
1761 actor.uTetherDistance = 256; | |
1762 actor.vInitialPosition.y = LOWORD(pOut.z); | |
1763 actor.vPosition.y = LOWORD(pOut.z); | |
1764 actor.vInitialPosition.z = LOWORD(pOut.y); | |
1765 actor.vPosition.z = LOWORD(pOut.y); | |
1766 pSprites_LOD->DeleteSomeSprites(); | |
1767 pPaletteManager->ResetNonTestLocked(); | |
1768 v6 = uNumActors - 1; | |
1769 if ( dword_5C6DF8 == 1 ) | |
1770 { | |
1771 dword_5C6DF8 = 0; | |
1772 v6 = uNumActors++; | |
1773 } | |
1774 v7 = &pActors[v6]; | |
1775 memcpy(v7, &actor, 0x344u); | |
1776 v7->PrepareSprites(1); | |
1777 result = 1; | |
1778 } | |
1779 return result; | |
1780 } | |
1781 // 5C6DF8: using guessed type int dword_5C6DF8; | |
1782 | |
1783 //----- (00450DA3) -------------------------------------------------------- | |
1458 | 1784 int GetAlertStatus() |
0 | 1785 { |
1786 int result; // eax@2 | |
1787 | |
1788 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) | |
1789 result = pOutdoor->ddm.field_C_alert; | |
1790 else | |
1791 result = uCurrentlyLoadedLevelType == LEVEL_Outdoor ? pIndoor->dlv.field_C_alert : 0; | |
1792 return result; | |
1793 } | |
1794 | |
1795 //----- (00450DDE) -------------------------------------------------------- | |
1796 stru350 *stru350::_450DDE() | |
1797 { | |
1798 _450DF1(&stru_4E82A4, &stru_4E82A4); | |
1799 return this; | |
1800 } | |
1801 | |
1802 //----- (00450DF1) -------------------------------------------------------- | |
1803 bool stru350::_450DF1(const stru355 *p1, const stru355 *p2) | |
1804 { | |
1805 //stru350 *v3; // esi@1 | |
1806 //void *result; // eax@1 | |
1807 unsigned int v5; // ecx@2 | |
1808 int v6; // edi@2 | |
1809 int v7; // edx@2 | |
1810 unsigned int v8; // ecx@8 | |
1811 int v9; // edi@8 | |
1812 int v10; // edx@8 | |
1813 int v11; // ecx@12 | |
1814 int v12; // edi@12 | |
1815 unsigned int v13; // ecx@12 | |
1816 int v14; // edx@12 | |
1817 int v15; // ecx@16 | |
1818 unsigned int v16; // edx@16 | |
1819 int v17; // ecx@16 | |
1820 int v18; // edi@16 | |
1821 char v19; // zf@20 | |
1822 unsigned int v20; // ecx@21 | |
1823 int v21; // edi@21 | |
1824 int v22; // edx@21 | |
1825 unsigned int v23; // ecx@27 | |
1826 int v24; // edi@27 | |
1827 int v25; // edx@27 | |
1828 int v26; // ecx@31 | |
1829 int v27; // edi@31 | |
1830 unsigned int v28; // ecx@31 | |
1831 int v29; // edx@31 | |
1832 int v30; // ebx@35 | |
1833 int v31; // ecx@35 | |
1834 int v32; // edi@35 | |
1835 int v33; // edx@35 | |
1836 unsigned int i; // ecx@35 | |
1837 int v35; // ecx@39 | |
1838 unsigned int v36; // edx@39 | |
1839 int v37; // ecx@39 | |
1840 int v38; // ebx@39 | |
1841 | |
1842 //v3 = this; | |
1843 memcpy(&field_0, p1, sizeof(stru355)); | |
1844 memcpy(&field_20, p2, sizeof(stru355)); | |
1845 //result = memcpy(&v3->field_20, p2, 0x20u); | |
1846 //LOBYTE(result) = 1; | |
1847 if (field_0.field_4 & 1) | |
1848 { | |
1849 v5 = field_0.field_1C; | |
1850 v6 = 0; | |
1851 v7 = 0; | |
1852 while ( !(v5 & 1) ) | |
1853 { | |
1854 ++v6; | |
1855 v5 >>= 1; | |
1856 } | |
1857 do | |
1858 { | |
1859 v5 >>= 1; | |
1860 ++v7; | |
1861 } | |
1862 while ( v5 & 1 ); | |
1863 field_40 = 32 - v7 - v6; | |
1864 } | |
1865 else | |
1866 { | |
1867 field_40 = 0; | |
1868 } | |
1869 v8 = field_0.field_10; | |
1870 v9 = 0; | |
1871 v10 = 0; | |
1872 while ( !(v8 & 1) ) | |
1873 { | |
1874 ++v9; | |
1875 v8 >>= 1; | |
1876 } | |
1877 do | |
1878 { | |
1879 v8 >>= 1; | |
1880 ++v10; | |
1881 } | |
1882 while ( v8 & 1 ); | |
1883 v11 = 24 - v10 - v9; | |
1884 v12 = 0; | |
1885 field_48 = v11; | |
1886 v13 = field_0.field_14; | |
1887 v14 = 0; | |
1888 while ( !(v13 & 1) ) | |
1889 { | |
1890 ++v12; | |
1891 v13 >>= 1; | |
1892 } | |
1893 do | |
1894 { | |
1895 v13 >>= 1; | |
1896 ++v14; | |
1897 } | |
1898 while ( v13 & 1 ); | |
1899 v15 = 16 - v14; | |
1900 v16 = field_0.field_18; | |
1901 field_50 = v15 - v12; | |
1902 v17 = 0; | |
1903 v18 = 0; | |
1904 while ( !(v16 & 1) ) | |
1905 { | |
1906 ++v17; | |
1907 v16 >>= 1; | |
1908 } | |
1909 do | |
1910 { | |
1911 v16 >>= 1; | |
1912 ++v18; | |
1913 } | |
1914 while ( v16 & 1 ); | |
1915 v19 = (field_20.field_4 & 1) == 0; | |
1916 field_58 = v17 - v18 + 8; | |
1917 if ( v19 ) | |
1918 { | |
1919 field_44 = 0; | |
1920 } | |
1921 else | |
1922 { | |
1923 v20 = field_20.field_1C; | |
1924 v21 = 0; | |
1925 v22 = 0; | |
1926 while ( !(v20 & 1) ) | |
1927 { | |
1928 ++v21; | |
1929 v20 >>= 1; | |
1930 } | |
1931 do | |
1932 { | |
1933 v20 >>= 1; | |
1934 ++v22; | |
1935 } | |
1936 while ( v20 & 1 ); | |
1937 field_44 = 32 - v22 - v21; | |
1938 } | |
1939 v23 = field_20.field_10; | |
1940 v24 = 0; | |
1941 v25 = 0; | |
1942 while ( !(v23 & 1) ) | |
1943 { | |
1944 ++v24; | |
1945 v23 >>= 1; | |
1946 } | |
1947 do | |
1948 { | |
1949 v23 >>= 1; | |
1950 ++v25; | |
1951 } | |
1952 while ( v23 & 1 ); | |
1953 v26 = 24 - v25 - v24; | |
1954 v27 = 0; | |
1955 field_4C = v26; | |
1956 v28 = field_20.field_14; | |
1957 v29 = 0; | |
1958 while ( !(v28 & 1) ) | |
1959 { | |
1960 ++v27; | |
1961 v28 >>= 1; | |
1962 } | |
1963 do | |
1964 { | |
1965 v28 >>= 1; | |
1966 ++v29; | |
1967 } | |
1968 while ( v28 & 1 ); | |
1969 v30 = 0; | |
1970 v31 = 16 - v29 - v27; | |
1971 v32 = field_20.field_18; | |
1972 field_54 = v31; | |
1973 v33 = 0; | |
1974 for ( i = v32; !(i & 1); i >>= 1 ) | |
1975 ++v30; | |
1976 do | |
1977 { | |
1978 i >>= 1; | |
1979 ++v33; | |
1980 } | |
1981 while ( i & 1 ); | |
1982 v35 = 32 - v33; | |
1983 v36 = v32; | |
1984 field_5C = v35 - v30; | |
1985 v37 = 0; | |
1986 v38 = 0; | |
1987 while ( !(v36 & 1) ) | |
1988 { | |
1989 ++v37; | |
1990 v36 >>= 1; | |
1991 } | |
1992 do | |
1993 { | |
1994 v36 >>= 1; | |
1995 ++v38; | |
1996 } | |
1997 while ( v36 & 1 ); | |
1998 field_5C = v37 - v38 + 8; | |
1999 return true; | |
2000 } | |
2001 | |
2002 //----- (00450F55) -------------------------------------------------------- | |
2003 unsigned int stru350::_450F55(int a2) | |
2004 { | |
2005 int v2 = a2 & stru_4E82A4.field_1C; | |
2006 if (field_20.field_4 & 1) | |
2007 v2 = (unsigned int)v2 >> this->field_44; | |
2008 return v2 & field_20.field_1C | | |
2009 field_20.field_10 & ((a2 & (unsigned int)stru_4E82A4.field_10) >> field_4C) | | |
2010 field_20.field_14 & ((a2 & (unsigned int)stru_4E82A4.field_14) >> field_54) | | |
2011 field_20.field_18 & ((a2 & (unsigned int)stru_4E82A4.field_18) >> field_5C); | |
2012 } | |
2013 | |
2014 //----- (00450FB1) -------------------------------------------------------- | |
2015 int stru350::_450FB1(int a2) | |
2016 { | |
2017 int v2 = 0; | |
2018 int v4 = field_0.field_4 & 1; | |
2019 if ( v4 ) | |
2020 v2 = a2 & field_0.field_1C; | |
2021 if ( v4 ) | |
2022 v2 <<= field_40; | |
2023 return v2 | ((a2 & field_0.field_10) << field_48) | ((a2 & field_0.field_14) << field_50) | ((a2 & field_0.field_18) << field_58); | |
2024 } | |
2025 | |
2026 //----- (00452442) -------------------------------------------------------- | |
1583 | 2027 unsigned int __fastcall _452442_color_cvt(unsigned __int16 a1, unsigned __int16 a2, int a3, int a4) |
0 | 2028 { |
2029 int v4; // ebx@0 | |
2030 __int16 v5; // ST14_2@1 | |
2031 __int16 v6; // dx@1 | |
2032 int v7; // ecx@1 | |
2033 __int16 v8; // ST10_2@1 | |
2034 int v9; // edi@1 | |
2035 unsigned __int16 v10; // dh@1@1 | |
2036 int v11; // ebx@1 | |
2037 int v12; // ebx@1 | |
2038 __int16 a3a; // [sp+1Ch] [bp+8h]@1 | |
2039 | |
2040 v5 = a2 >> 2; | |
2041 v6 = (unsigned __int16)a4 >> 2; | |
2042 v8 = a1 >> 2; | |
2043 a3a = (unsigned __int16)a3 >> 2; | |
2044 LOWORD(v7) = a3a; | |
2045 v9 = v7; | |
2046 LOWORD(v4) = ((unsigned __int16)a4 >> 2) & 0xE0; | |
2047 LOWORD(v7) = a3a & 0xE0; | |
2048 LOWORD(v9) = v9 & 0x1C00; | |
2049 v11 = v7 + v4; | |
2050 LOWORD(v7) = v5 & 0xE0; | |
2051 v12 = v7 + v11; | |
2052 LOWORD(v7) = v8 & 0xE0; | |
1409
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2053 __debugbreak(); // warning C4700: uninitialized local variable 'v10' used |
848 | 2054 return (PID_TYPE(v8) + PID_TYPE(v5) + PID_TYPE(a3a) + PID_TYPE(v6)) | (v7 + v12) | ((v8 & 0x1C00) |
0 | 2055 + (v5 & 0x1C00) |
2056 + v9 | |
2057 + (__PAIR__(v10, (unsigned __int16)a4 >> 2) & 0x1C00)); | |
2058 } | |
2059 | |
2060 //----- (0045281E) -------------------------------------------------------- | |
2061 // Calculates atan2(y/x) | |
2062 // return value: angle in integer format (multiplier of Pi/1024) | |
2063 unsigned int stru193_math::Atan2(int x, int y) | |
2064 { | |
2065 signed int quadrant; | |
2066 __int64 dividend; | |
2067 int quotient; | |
2068 int lowIdx; | |
2069 int highIdx; | |
2070 int angle; | |
2071 | |
1980 | 2072 int X = x; |
2073 int Y = y; | |
0 | 2074 |
2075 if ( abs(X) < 65536 ) | |
2076 { | |
2077 if ( (abs(Y) >> 15) >= abs(X) ) | |
2078 X = 0; | |
2079 } | |
2080 | |
2081 if ( !X ) | |
2082 { | |
2083 if ( Y > 0 ) | |
2084 { | |
2085 return uIntegerHalfPi; //Pi/2 | |
2086 } | |
2087 else | |
2088 { | |
2089 return uIntegerHalfPi + uIntegerPi; //3*(Pi/2) | |
2090 } | |
2091 } | |
2092 | |
2093 if ( Y ) | |
2094 { | |
2095 if ( X < 0 ) | |
2096 { | |
2097 X = -X; | |
2098 if ( Y > 0 ) | |
2099 { | |
2100 quadrant = 4; | |
2101 } | |
2102 else | |
2103 { | |
2104 quadrant = 3; | |
2105 } | |
2106 } | |
2107 else | |
2108 { | |
2109 if ( Y > 0 ) | |
2110 { | |
2111 quadrant = 1; | |
2112 } | |
2113 else | |
2114 { | |
2115 quadrant = 2; | |
2116 } | |
2117 } | |
2118 | |
2119 if ( Y < 0 ) | |
2120 Y = -Y; | |
2121 | |
2122 LODWORD(dividend) = Y << 16; | |
2123 HIDWORD(dividend) = Y >> 16; | |
2124 quotient = dividend / X; | |
2125 | |
2126 //looks like binary search | |
2127 { | |
2128 int i; | |
2129 highIdx = uIntegerHalfPi; | |
2130 lowIdx = 0; | |
2131 | |
2132 for (i = 0; i < 6; ++i) | |
2133 { | |
2134 if (quotient <= pTanTable[(lowIdx + highIdx) / 2]) | |
2135 highIdx = (lowIdx + highIdx) / 2; | |
2136 else | |
2137 lowIdx = (lowIdx + highIdx) / 2; | |
2138 } | |
2139 } | |
2140 | |
2141 angle = lowIdx + 1; | |
2142 while ( angle < (highIdx - 1) && quotient >= pTanTable[angle] ) | |
2143 ++angle; | |
2144 | |
2145 switch (quadrant) | |
2146 { | |
2147 case 1: //X > 0, Y > 0 | |
2148 return angle; | |
2149 | |
2150 case 2: //X > 0, Y < 0 | |
2151 return uIntegerDoublePi - angle; //2*Pi - angle | |
2152 | |
2153 case 3: //X > 0, Y < 0 | |
2154 return uIntegerPi + angle; //Pi + angle | |
2155 | |
2156 case 4: //X < 0, Y > 0 | |
2157 return uIntegerPi - angle; //Pi - angle | |
2158 } | |
2159 | |
2160 //should newer get here | |
2161 return 0; | |
2162 } | |
2163 | |
2164 if ( X < 0 ) //Y == 0, X < 0 | |
2165 return uIntegerPi; | |
2166 | |
2167 return 0; | |
2168 } | |
2169 | |
2170 //----- (00452969) -------------------------------------------------------- | |
2171 stru193_math::stru193_math() | |
2172 { | |
2173 double v3; // ST18_8@2 | |
1214
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2174 |
0 | 2175 this->pTanTable[0] = 0; |
2176 this->pCosTable[0] = 65536; | |
2177 this->pInvCosTable[0] = 65536; | |
1214
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2178 for(int i = 1; i < (signed int)this->uIntegerHalfPi; i++) |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2179 { |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2180 v3 = (double)i * 3.141592653589793 / (double)uIntegerPi; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2181 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
|
2182 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
|
2183 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
|
2184 } |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2185 for(int i = this->uIntegerHalfPi; i < 520; i++) |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2186 { |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2187 this->pTanTable[i] = 0xEFFFFFFFu; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2188 this->pCosTable[i] = 0; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
2189 this->pInvCosTable[i] = 0xEFFFFFFFu; |
0 | 2190 } |
2191 } | |
2192 | |
2193 //----- (00452A9E) -------------------------------------------------------- | |
295 | 2194 int integer_sqrt(int val) |
0 | 2195 { |
2196 signed int result; // eax@2 | |
295 | 2197 unsigned int v2; // edx@3 |
271 | 2198 unsigned int v3; // edi@3 |
2199 //signed int v4; // ebx@3 | |
0 | 2200 int v5; // esi@4 |
2201 | |
295 | 2202 if (val < 1) |
2203 return val; | |
271 | 2204 |
0 | 2205 v2 = 0; |
295 | 2206 v3 = val; |
0 | 2207 result = 0; |
271 | 2208 //v4 = 16; |
2209 for (uint i = 0; i < 16; ++i) | |
2210 { | |
0 | 2211 result *= 2; |
271 | 2212 v2 = (v3 >> 30) | 4 * v2; |
0 | 2213 v5 = 2 * result + 1; |
2214 v3 *= 4; | |
295 | 2215 if ( v2 >= v5 ) |
0 | 2216 { |
2217 ++result; | |
2218 v2 -= v5; | |
2219 } | |
271 | 2220 //--v4; |
2221 } | |
2222 //while ( v4 ); | |
295 | 2223 if ( val - result * result >= (unsigned int)(result - 1) ) |
0 | 2224 ++result; |
295 | 2225 return result; |
0 | 2226 } |
2227 | |
2228 //----- (00452B2E) -------------------------------------------------------- | |
2229 int __fastcall GetDiceResult(unsigned int uNumDice, unsigned int uDiceSides) | |
2230 { | |
2231 int v3; // esi@1 | |
2101 | 2232 |
0 | 2233 v3 = 0; |
2234 if ( uDiceSides ) | |
2235 { | |
2101 | 2236 for ( uint i = 0; i < uNumDice; ++i) |
2237 v3 += rand() % uDiceSides + 1; | |
2238 return v3; | |
0 | 2239 } |
2101 | 2240 return 0; |
0 | 2241 } |
2242 | |
2243 //----- (00453F62) -------------------------------------------------------- | |
2244 void MapStats::Initialize() | |
2245 { | |
237 | 2246 char work_str[32]; // [sp+Ch] [bp-34h]@3 |
2247 int work_str_pos; | |
2248 int work_str_len; | |
2249 int i; | |
2250 char* test_string; | |
2251 unsigned char c; | |
2252 bool break_loop; | |
2253 unsigned int temp_str_len; | |
2254 char* tmp_pos; | |
2255 int decode_step; | |
2256 int item_counter; | |
2257 | |
0 | 2258 if ( pMapStatsTXT_Raw ) |
1583 | 2259 free(pMapStatsTXT_Raw); |
237 | 2260 pMapStatsTXT_Raw = NULL; |
0 | 2261 pMapStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("MapStats.txt", 0); |
2262 strtok(pMapStatsTXT_Raw, "\r"); | |
237 | 2263 strtok(NULL, "\r"); |
2264 strtok(NULL, "\r"); | |
2265 | |
2266 for (i=1; i<77; ++i) | |
2267 { | |
2268 test_string = strtok(NULL, "\r") + 1; | |
2269 break_loop = false; | |
2270 decode_step=0; | |
2271 do | |
2272 { | |
2273 c = *(unsigned char*)test_string; | |
2274 temp_str_len = 0; | |
2275 while((c!='\t')&&(c>0)) | |
2276 { | |
2277 ++temp_str_len; | |
2278 c=test_string[temp_str_len]; | |
2279 } | |
2280 tmp_pos=test_string+temp_str_len; | |
2281 if (*tmp_pos == 0) | |
2282 break_loop = true; | |
2283 *tmp_pos = 0; | |
2284 if (temp_str_len) | |
2285 { | |
2286 switch (decode_step) | |
2287 { | |
2288 case 1: | |
2289 pInfos[i].pName = RemoveQuotes(test_string); | |
2290 break; | |
2291 case 2: | |
2292 pInfos[i].pFilename = RemoveQuotes(test_string); | |
2293 break; | |
2294 case 3: | |
2295 pInfos[i].uNumResets = atoi(test_string); | |
2296 break; | |
2297 case 4: | |
2298 pInfos[i].uFirstVisitedAt = atoi(test_string); | |
2299 break; | |
2300 case 5: | |
2301 pInfos[i]._per = atoi(test_string); | |
2302 break; | |
2303 case 6: | |
2304 pInfos[i].uRespawnIntervalDays = atoi(test_string); | |
2305 break; | |
2306 case 7: | |
2307 pInfos[i]._alert_days = atoi(test_string); | |
2308 break; | |
2309 case 8: | |
2310 pInfos[i]._steal_perm = atoi(test_string); | |
2311 break; | |
2312 case 9: | |
2313 pInfos[i].LockX5 = atoi(test_string); | |
2314 break; | |
2315 case 10: | |
2316 pInfos[i].Trap_D20 = atoi(test_string); | |
2317 break; | |
2318 case 11: | |
2319 pInfos[i].Treasure_prob = atoi(test_string); | |
2320 break; | |
2321 case 12: | |
2322 pInfos[i].Encounter_percent = atoi(test_string); | |
2323 break; | |
2324 case 13: | |
2325 pInfos[i].EncM1percent = atoi(test_string); | |
2326 break; | |
2327 case 14: | |
2328 pInfos[i].EncM2percent = atoi(test_string); | |
2329 break; | |
2330 case 15: | |
2331 pInfos[i].EncM3percent = atoi(test_string); | |
2332 break; | |
2333 case 16: | |
2334 pInfos[i].pEncounterMonster1Texture = RemoveQuotes(test_string); | |
2335 break; | |
2336 case 18: | |
2337 pInfos[i].Dif_M1 = atoi(test_string); | |
2338 break; | |
2339 case 19: | |
2340 pInfos[i].uEncounterMonster1AtLeast = 1; | |
2341 pInfos[i].uEncounterMonster1AtMost = 1; | |
2342 strcpy(work_str, test_string); | |
2343 work_str_pos = 0; | |
2344 work_str_len=strlen(work_str); | |
2345 if (work_str_len ) | |
2346 { | |
2347 while (work_str[work_str_pos] != '-' ) | |
2348 { | |
2349 ++work_str_pos; | |
2350 if (work_str_pos >= work_str_len ) | |
2351 break; | |
2352 } | |
2353 work_str[work_str_pos] = 0; | |
2354 pInfos[i].uEncounterMonster1AtLeast = atoi(work_str); | |
2355 if ( work_str_pos < work_str_len ) | |
2356 pInfos[i].uEncounterMonster1AtMost = atoi(&work_str[work_str_pos + 1]); | |
2357 else | |
2358 pInfos[i].uEncounterMonster1AtMost = pInfos[i].uEncounterMonster1AtLeast; | |
2359 } | |
2360 break; | |
2361 case 20: | |
2362 pInfos[i].pEncounterMonster2Texture = RemoveQuotes(test_string); | |
2363 break; | |
2364 case 22: | |
2365 pInfos[i].Dif_M2 = atoi(test_string); | |
2366 break; | |
2367 case 23: | |
2368 pInfos[i].uEncounterMonster2AtLeast = 1; | |
2369 pInfos[i].uEncounterMonster2AtMost = 1; | |
2370 strcpy(work_str, test_string); | |
2371 work_str_pos = 0; | |
2372 work_str_len=strlen(work_str); | |
2373 if (work_str_len ) | |
2374 { | |
2375 while (work_str[work_str_pos] != '-' ) | |
2376 { | |
2377 ++work_str_pos; | |
2378 if (work_str_pos >= work_str_len ) | |
2379 break; | |
2380 } | |
2381 work_str[work_str_pos] = 0; | |
2382 pInfos[i].uEncounterMonster2AtLeast = atoi(work_str); | |
2383 if ( work_str_pos < work_str_len ) | |
2384 pInfos[i].uEncounterMonster2AtMost = atoi(&work_str[work_str_pos + 1]); | |
2385 else | |
2386 pInfos[i].uEncounterMonster2AtMost = pInfos[i].uEncounterMonster2AtLeast; | |
2387 } | |
2388 break; | |
2389 case 24: | |
2390 pInfos[i].pEncounterMonster3Texture = RemoveQuotes(test_string); | |
2391 break; | |
2392 case 26: | |
2393 pInfos[i].Dif_M3 = atoi(test_string); | |
2394 break; | |
2395 case 27: | |
2396 pInfos[i].uEncounterMonster3AtLeast = 1; | |
2397 pInfos[i].uEncounterMonster3AtMost = 1; | |
2398 strcpy(work_str, test_string); | |
2399 work_str_pos = 0; | |
2400 work_str_len=strlen(work_str); | |
2401 if (work_str_len ) | |
2402 { | |
2403 while (work_str[work_str_pos] != '-' ) | |
2404 { | |
2405 ++work_str_pos; | |
2406 if (work_str_pos >= work_str_len ) | |
2407 break; | |
2408 } | |
2409 work_str[work_str_pos] = 0; | |
2410 pInfos[i].uEncounterMonster3AtLeast = atoi(work_str); | |
2411 if ( work_str_pos < work_str_len ) | |
2412 pInfos[i].uEncounterMonster3AtMost = atoi(&work_str[work_str_pos + 1]); | |
2413 else | |
2414 pInfos[i].uEncounterMonster3AtMost = pInfos[i].uEncounterMonster3AtLeast; | |
2415 } | |
2416 break; | |
2417 case 28: | |
2418 pInfos[i].uRedbookTrackID = atoi(test_string); | |
2419 break; | |
2420 case 29: | |
2421 { | |
2422 if ( !strcmp(test_string, "CAVE") ) | |
2423 { | |
2424 pInfos[i].uEAXEnv = 8; | |
2425 break; | |
2426 } | |
2427 if ( !strcmp(test_string, "STONEROOM") ) | |
2428 { | |
2429 pInfos[i].uEAXEnv = 5; | |
2430 break; | |
2431 } | |
2432 if ( !strcmp(test_string, "MOUNTAINS") ) | |
2433 { | |
2434 pInfos[i].uEAXEnv = 17; | |
2435 break; | |
2436 } | |
2437 if ( !strcmp(test_string, "PLAIN") ) | |
2438 { | |
2439 pInfos[i].uEAXEnv = 19; | |
2440 break; | |
2441 } | |
2442 if ( !strcmp(test_string, "FOREST") ) | |
2443 { | |
2444 pInfos[i].uEAXEnv = 15; | |
2445 break; | |
2446 } | |
2447 if ( !strcmp(test_string, "CITY") ) | |
2448 { | |
2449 pInfos[i].uEAXEnv = 16; | |
2450 break; | |
2451 } | |
2452 if ( !strcmp(test_string, "UNDERWATER") ) | |
2453 { | |
2454 pInfos[i].uEAXEnv = 22; | |
2455 break; | |
2456 } | |
2457 if ( !strcmp(test_string, "ARENA") ) | |
2458 { | |
2459 pInfos[i].uEAXEnv = 9; | |
2460 break; | |
2461 } | |
2462 if ( !strcmp(test_string, "GENERIC") ) | |
2463 { | |
2464 pInfos[i].uEAXEnv = 0; | |
2465 break; | |
2466 } | |
2467 if ( !strcmp(test_string, "PADDEDCELL") ) | |
2468 { | |
2469 pInfos[i].uEAXEnv = 1; | |
2470 break; | |
2471 } | |
2472 if ( !strcmp(test_string, "ROOM") ) | |
2473 { | |
2474 pInfos[i].uEAXEnv = 2; | |
2475 break; | |
2476 } | |
2477 if ( !strcmp(test_string, "BATHROOM") ) | |
2478 { | |
2479 pInfos[i].uEAXEnv = 3; | |
2480 break; | |
2481 } | |
2482 if ( !strcmp(test_string, "LIVINGROOM") ) | |
2483 { | |
2484 pInfos[i].uEAXEnv = 4; | |
2485 break; | |
2486 } | |
2487 if ( !strcmp(test_string, "AUDITORIUM") ) | |
2488 { | |
2489 pInfos[i].uEAXEnv = 6; | |
2490 break; | |
2491 } | |
2492 if ( !strcmp(test_string, "CONCERTHALL") ) | |
2493 { | |
2494 pInfos[i].uEAXEnv = 7; | |
2495 break; | |
2496 } | |
2497 if ( !strcmp(test_string, "HANGAR") ) | |
2498 { | |
2499 pInfos[i].uEAXEnv = 10; | |
2500 break; | |
2501 } | |
2502 if ( !strcmp(test_string, "CARPETEDHALLWAY") ) | |
2503 { | |
2504 pInfos[i].uEAXEnv = 11; | |
2505 break; | |
2506 } | |
2507 if ( !strcmp(test_string, "HALLWAY") ) | |
2508 { | |
2509 pInfos[i].uEAXEnv = 12; | |
2510 break; | |
2511 } | |
2512 if ( !strcmp(test_string, "STONECORRIDOR") ) | |
2513 { | |
2514 pInfos[i].uEAXEnv = 13; | |
2515 break; | |
2516 } | |
2517 if ( !strcmp(test_string, "ALLEY") ) | |
2518 { | |
2519 pInfos[i].uEAXEnv = 14; | |
2520 break; | |
2521 } | |
2522 if ( !strcmp(test_string, "QUARRY") ) | |
2523 { | |
2524 pInfos[i].uEAXEnv = 18; | |
2525 break; | |
2526 } | |
2527 if ( !strcmp(test_string, "PARKINGLOT") ) | |
2528 { | |
2529 pInfos[i].uEAXEnv = 20; | |
2530 break; | |
2531 } | |
2532 if ( !strcmp(test_string, "SEWERPIPE") ) | |
2533 { | |
2534 pInfos[i].uEAXEnv = 21; | |
2535 break; | |
2536 } | |
2537 if ( !strcmp(test_string, "DRUGGED") ) | |
2538 { | |
2539 pInfos[i].uEAXEnv = 23; | |
2540 break; | |
2541 } | |
2542 if ( !strcmp(test_string, "DIZZY") ) | |
2543 { | |
2544 pInfos[i].uEAXEnv = 24; | |
2545 break; | |
2546 } | |
2547 if ( !strcmp(test_string, "PSYCHOTIC") ) | |
2548 { | |
2549 pInfos[i].uEAXEnv = 25; | |
2550 break; | |
2551 } | |
2552 pInfos[i].uEAXEnv = 26; | |
2553 | |
2554 } | |
2555 break; | |
2556 } | |
2557 } | |
2558 else | |
2559 { | |
2560 break_loop = true; | |
2561 } | |
2562 ++decode_step; | |
2563 test_string=tmp_pos+1; | |
2564 } while ((decode_step<31)&&!break_loop); | |
2565 } | |
2566 | |
2567 uNumMaps = 77; | |
0 | 2568 } |
2569 // 453F62: using guessed type char Str[32]; | |
2570 | |
2571 //----- (004547A3) -------------------------------------------------------- | |
767 | 2572 MAP_TYPE MapStats::GetMapInfo(const char *Str2) |
2573 { | |
2574 assert(uNumMaps >= 2); | |
2575 | |
2576 for (uint i = 1; i < uNumMaps; ++i) | |
1165
29a8defbad9e
temporary _CRT_SECURE_NO_WARNINGS to remove some warnings
Grumpy7
parents:
1150
diff
changeset
|
2577 if (!_stricmp(pInfos[i].pFilename, Str2)) |
767 | 2578 return (MAP_TYPE)i; |
2579 | |
2580 assert(false && "Map not found!"); | |
0 | 2581 } |
2582 | |
2583 //----- (004547E4) -------------------------------------------------------- | |
2584 void FactionTable::Initialize() | |
2585 { | |
237 | 2586 int i; |
2587 char* test_string; | |
2588 unsigned char c; | |
2589 bool break_loop; | |
2590 unsigned int temp_str_len; | |
2591 char* tmp_pos; | |
2592 int decode_step; | |
2593 int item_counter; | |
2594 | |
0 | 2595 if ( pHostileTXT_Raw ) |
1583 | 2596 free(pHostileTXT_Raw); |
237 | 2597 pHostileTXT_Raw = NULL; |
0 | 2598 pHostileTXT_Raw = (char *)pEvents_LOD->LoadRaw("hostile.txt", 0); |
2599 strtok(pHostileTXT_Raw, "\r"); | |
2101 | 2600 for ( i=0; i < 89; ++i ) |
2601 { | |
2602 test_string = strtok(NULL, "\r") + 1; | |
2603 break_loop = false; | |
2604 decode_step=0; | |
2605 do | |
2606 { | |
2607 c = *(unsigned char*)test_string; | |
2608 temp_str_len = 0; | |
2609 while((c!='\t') && (c > 0)) | |
2610 { | |
2611 ++temp_str_len; | |
2612 c = test_string[temp_str_len]; | |
2613 } | |
2614 tmp_pos=test_string+temp_str_len; | |
2615 if (*tmp_pos == 0) | |
2616 break_loop = true; | |
2617 *tmp_pos = 0; | |
2618 if (temp_str_len) | |
2619 { | |
2620 if ( decode_step >= 1 && decode_step < 90 ) | |
2621 relations[decode_step-1][i] = atoi(test_string); | |
2622 } | |
2623 else | |
2624 break_loop = true; | |
2625 ++decode_step; | |
2626 test_string=tmp_pos+1; | |
2627 } | |
2628 while ((decode_step < 92) && !break_loop ); | |
2629 } | |
237 | 2630 if ( pHostileTXT_Raw) |
0 | 2631 { |
1583 | 2632 free(pHostileTXT_Raw); |
237 | 2633 pHostileTXT_Raw = NULL; |
0 | 2634 } |
2635 } | |
2636 | |
2637 //----- (00458244) -------------------------------------------------------- | |
1783 | 2638 unsigned int SkillToMastery( unsigned int skill_value ) |
1067 | 2639 { |
1064 | 2640 switch (skill_value & 0x1C0) |
983 | 2641 { |
2642 case 0x100: return 4; // Grandmaster | |
2643 case 0x80: return 3; // Master | |
2644 case 0x40: return 2; // Expert | |
2645 case 0x00: return 1; // Normal | |
1409
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2646 } |
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2647 assert(false); |
c9e3b93ec570
Highlighted locations with "using uninitialized variable" warning.
Nomad
parents:
1408
diff
changeset
|
2648 return 0; |
0 | 2649 } |
2650 | |
2651 //----- (0045828B) -------------------------------------------------------- | |
2652 unsigned int __fastcall GetSpellColor(signed int a1) | |
2653 { | |
1799 | 2654 if ( a1 == 0 ) |
2069 | 2655 return Color16(0, 0, 0); |
1799 | 2656 if ( a1 < 12 ) |
2069 | 2657 return Color16(255, 85, 0); |
1799 | 2658 if ( a1 < 23 ) |
2069 | 2659 return Color16(150, 212, 255); |
1799 | 2660 if ( a1 < 34 ) |
2069 | 2661 return Color16(0, 128, 255); |
1799 | 2662 if ( a1 < 45 ) |
2069 | 2663 return Color16(128, 128, 128); |
1799 | 2664 if ( a1 < 56 ) |
2069 | 2665 return Color16(225, 225, 225); |
1799 | 2666 if ( a1 < 67 ) |
2069 | 2667 return Color16(235, 15, 255); |
1799 | 2668 if ( a1 < 78 ) |
2069 | 2669 return Color16(255, 128, 0); |
1799 | 2670 if ( a1 < 89 ) |
2069 | 2671 return Color16(255, 255, 155); |
1799 | 2672 if ( a1 < 100 ) |
2069 | 2673 return Color16(192, 192, 240); |
0 | 2674 } |
2675 | |
2676 //----- (004610AA) -------------------------------------------------------- | |
1637 | 2677 void __fastcall PrepareToLoadODM(unsigned int bLoading, ODMRenderParams *a2) |
0 | 2678 { |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
2679 pGameLoadingUI_ProgressBar->Reset(27); |
0 | 2680 pSoundList->_4A9D79(0); |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
2681 uCurrentlyLoadedLevelType = LEVEL_Outdoor; |
2099 | 2682 ODM_LoadAndInitialize(pCurrentMapName, a2); |
2683 if ( !bLoading ) | |
0 | 2684 TeleportToStartingPoint(uLevel_StartingPointType); |
2685 viewparams->_443365(); | |
2686 PlayLevelMusic(); | |
2687 } | |
2688 // 6BE35C: using guessed type int uLevel_StartingPointType; | |
2689 | |
2690 //----- (00461103) -------------------------------------------------------- | |
1640
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2691 void _461103_load_level_sub() |
0 | 2692 { |
2693 //GUIProgressBar *v0; // ebx@1 | |
2694 //signed int v1; // ebp@1 | |
2695 //char *v2; // esi@2 | |
2101 | 2696 //__int16 v3; // cx@3 |
0 | 2697 int v4; // edx@8 |
2698 //size_t v5; // edi@14 | |
2699 signed int v6; // esi@14 | |
2700 //char *v7; // edx@15 | |
2701 signed int v8; // ecx@16 | |
2702 int v9; // ecx@23 | |
2703 MonsterInfo *v10; // ebx@23 | |
2704 //int *v11; // esi@23 | |
2705 int v12; // esi@25 | |
2706 int v13; // eax@26 | |
2707 __int16 v14; // ax@41 | |
2708 //signed int v15; // [sp+10h] [bp-4Ch]@1 | |
2709 //signed int v16; // [sp+10h] [bp-4Ch]@14 | |
2710 signed int v17; // [sp+14h] [bp-48h]@3 | |
2711 signed int v18; // [sp+14h] [bp-48h]@23 | |
2712 int v19; // [sp+18h] [bp-44h]@1 | |
2713 signed int v20; // [sp+18h] [bp-44h]@14 | |
2714 int v21[16]; // [sp+1Ch] [bp-40h]@17 | |
2715 | |
598 | 2716 GenerateItemsInChest(); |
0 | 2717 pGameLoadingUI_ProgressBar->Progress(); |
2101 | 2718 pParty->uFlags |= 2; |
0 | 2719 pParty->field_7B5_in_arena_quest = 0; |
2720 dword_5C6DF8 = 1; | |
291 | 2721 pNPCStats->uNewlNPCBufPos = 0; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
2722 v19 = pMapStats->GetMapInfo(pCurrentMapName); |
0 | 2723 |
2724 //v15 = 0; | |
2725 for (uint i = 0; i < uNumActors; ++i) | |
2726 //if ( (signed int)uNumActors > 0 ) | |
2727 { | |
2099 | 2728 //Actor* pActor = &pActors[i]; |
0 | 2729 //v2 = (char *)&pActors[0].uNPC_ID; |
2730 //do | |
2731 //{ | |
2101 | 2732 //v3 = pActors[i].pMonsterInfo.uID; |
0 | 2733 v17 = 0; |
2099 | 2734 if ( pActors[i].pMonsterInfo.uID >= 115 && pActors[i].pMonsterInfo.uID <= 186 |
2735 || pActors[i].pMonsterInfo.uID >= 232 && pActors[i].pMonsterInfo.uID <= 249 ) | |
0 | 2736 v17 = 1; |
2737 //v1 = 0; | |
2101 | 2738 v4 = (pActors[i].pMonsterInfo.uID - 1) % 3; |
0 | 2739 if ( 2 == v4 ) |
2740 { | |
2099 | 2741 if ( pActors[i].sNPC_ID && pActors[i].sNPC_ID < 5000 ) |
0 | 2742 continue; |
2743 } | |
2744 else | |
2745 { | |
2746 if ( v4 != 1 ) | |
2747 { | |
2099 | 2748 if ( v4 == 0 && pActors[i].sNPC_ID == 0 ) |
2101 | 2749 pActors[i].sNPC_ID = 0; |
2750 continue; | |
0 | 2751 } |
2752 } | |
2099 | 2753 if ( pActors[i].sNPC_ID > 0 && pActors[i].sNPC_ID < 5000 ) |
0 | 2754 continue; |
2755 if ( v17 ) | |
2756 { | |
2101 | 2757 pNPCStats->InitializeAdditionalNPCs(&pNPCStats->pAdditionalNPC[pNPCStats->uNewlNPCBufPos], pActors[i].pMonsterInfo.uID, 0, v19); |
291 | 2758 v14 = LOWORD(pNPCStats->uNewlNPCBufPos) + 5000; |
2759 ++pNPCStats->uNewlNPCBufPos; | |
2099 | 2760 pActors[i].sNPC_ID = v14; |
0 | 2761 continue; |
2762 } | |
2099 | 2763 pActors[i].sNPC_ID = 0; |
0 | 2764 //++v15; |
2765 //v2 += 836; | |
2766 //} | |
2767 //while ( v15 < (signed int)uNumActors ); | |
2768 } | |
2769 | |
2770 pGameLoadingUI_ProgressBar->Progress(); | |
2771 | |
2772 //v5 = uNumActors; | |
2773 v6 = 0; | |
2774 v20 = 0; | |
2775 //v16 = v1; | |
2776 | |
2777 for (uint i = 0; i < uNumActors; ++i) | |
2778 { | |
2779 //v7 = (char *)&pActors[0].pMonsterInfo; | |
2780 //do | |
2781 //{ | |
2101 | 2782 for ( v8 = 0; v8 < v6; ++v8 ) |
2783 { | |
2784 if ( v21[v8] == pActors[i].pMonsterInfo.uID - 1 ) | |
2785 break; | |
2786 } | |
2787 | |
2788 if ( v8 == v6 ) | |
2789 { | |
2790 v21[v6++] = pActors[i].pMonsterInfo.uID - 1; | |
2791 v20 = v6; | |
2792 if ( v6 == 16 ) | |
2793 break; | |
2794 } | |
2795 //++v16; | |
2796 //v7 += 836; | |
0 | 2797 //} |
2798 //while ( v16 < (signed int)v5 ); | |
2799 } | |
2800 | |
2801 pGameLoadingUI_ProgressBar->Progress(); | |
2802 | |
2101 | 2803 for ( int _v0 = 0; _v0 < v6; ++_v0 ) |
0 | 2804 { |
2101 | 2805 for ( v18 = 4; v18; --v18 ) |
2806 pSoundList->LoadSound(pMonsterList->pMonsters[v21[_v0]].pSoundSampleIDs[4 - v18], 0); | |
0 | 2807 v12 = 0; |
2808 do | |
2101 | 2809 v13 = pSoundList->LoadSound(v12++ + word_4EE088_sound_ids[pMonsterStats->pInfos[v21[_v0] + 1].uSpell1ID], 1); |
0 | 2810 while ( v13 ); |
2811 } | |
2812 //v0 = pGameLoadingUI_ProgressBar; | |
2813 //v1 = 0; | |
2814 | |
2815 pGameLoadingUI_ProgressBar->Progress(); | |
2816 | |
2061 | 2817 if (dword_6BE368_debug_settings_2 & DEBUG_SETTINGS_NO_ACTORS) |
0 | 2818 uNumActors = 0; |
2061 | 2819 if ( dword_6BE368_debug_settings_2 & DEBUG_SETTINGS_NO_DECORATIONS) |
0 | 2820 uNumLevelDecorations = 0; |
1459 | 2821 init_event_triggers(); |
0 | 2822 |
2823 pGameLoadingUI_ProgressBar->Progress(); | |
1638
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
2824 |
1640
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2825 pGame->pIndoorCameraD3D->vPartyPos.x = 0; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2826 pGame->pIndoorCameraD3D->vPartyPos.y = 0; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2827 pGame->pIndoorCameraD3D->vPartyPos.z = 100; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2828 pGame->pIndoorCameraD3D->sRotationX = 0; |
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1638
diff
changeset
|
2829 pGame->pIndoorCameraD3D->sRotationY = 0; |
1638
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
2830 viewparams->bRedrawGameUI = true; |
783 | 2831 uLevel_StartingPointType = MapStartPoint_Party; |
0 | 2832 pSprites_LOD->_461397(); |
2833 pPaletteManager->LockTestAll(); | |
2834 if ( pParty->pPickedItem.uItemID != 0 ) | |
2835 pMouse->SetCursorBitmapFromItemID(pParty->pPickedItem.uItemID); | |
2836 } | |
2837 | |
2838 //----- (004613C4) -------------------------------------------------------- | |
1459 | 2839 void init_event_triggers() |
0 | 2840 { |
1459 | 2841 uint id = pDecorationList->GetDecorIdByName("Event Trigger"); |
2842 | |
2843 num_event_triggers = 0; | |
2844 for (uint i = 0; i < uNumLevelDecorations; ++i) | |
2845 if (pLevelDecorations[i].uDecorationDescID == id) | |
2846 event_triggers[num_event_triggers++] = i; | |
0 | 2847 } |
2848 | |
2849 //----- (004627B7) -------------------------------------------------------- | |
762 | 2850 void MainMenu_Loop() |
0 | 2851 { |
2852 GUIButton *pButton; // eax@27 | |
2853 unsigned int pControlParam; // ecx@35 | |
2854 int v10; // ecx@36 | |
2855 int v11; // ecx@37 | |
2856 unsigned int pY; // [sp-18h] [bp-54h]@39 | |
2857 Texture *pTexture; // [sp-14h] [bp-50h]@39 | |
2858 GUIButton *pButton2; // [sp+0h] [bp-3Ch]@27 | |
2859 GUIWindow *pWindow; // [sp+4h] [bp-38h]@11 | |
2860 | |
151 | 2861 pCurrentScreen = SCREEN_GAME; |
1038 | 2862 |
0 | 2863 pGUIWindow2 = 0; |
2864 pAudioPlayer->StopChannels(-1, -1); | |
2865 pMouse->RemoveHoldingItem(); | |
762 | 2866 |
2867 pIcons_LOD->_inlined_sub2(); | |
2868 | |
165 | 2869 pWindow_MainMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); |
1980 | 2870 Texture* pNew = pIcons_LOD->LoadTexturePtr("title_new", TEXTURE_16BIT_PALETTE); |
2871 Texture* pLoad = pIcons_LOD->LoadTexturePtr("title_load", TEXTURE_16BIT_PALETTE); | |
2872 Texture* pCredits = pIcons_LOD->LoadTexturePtr("title_cred", TEXTURE_16BIT_PALETTE); | |
2873 Texture* pExit = pIcons_LOD->LoadTexturePtr("title_exit", TEXTURE_16BIT_PALETTE); | |
948 | 2874 |
2875 pMainMenu_BtnNew = pWindow_MainMenu->CreateButton(495, 172, pNew->uTextureWidth, pNew->uTextureHeight, 1, 0, UIMSG_MainMenu_ShowPartyCreationWnd, 0, 'N', "", pNew, 0); | |
2876 pMainMenu_BtnLoad = pWindow_MainMenu->CreateButton(495, 227, pLoad->uTextureWidth, pLoad->uTextureHeight, 1, 0, UIMSG_MainMenu_ShowLoadWindow, 1, 'L', "", pLoad, 0); | |
2877 pMainMenu_BtnCredits = pWindow_MainMenu->CreateButton(495, 282, pCredits->uTextureWidth, pCredits->uTextureHeight, 1, 0, UIMSG_ShowCredits, 2, 'C', "", pCredits, 0); | |
2878 pMainMenu_BtnExit = pWindow_MainMenu->CreateButton(495, 337, pExit->uTextureWidth, pExit->uTextureHeight, 1, 0, UIMSG_ExitToWindows, 3, 0, "", pExit, 0); | |
2879 | |
0 | 2880 pTexture_PCX.Release(); |
2881 pTexture_PCX.Load("title.pcx", 0); | |
2882 SetCurrentMenuID(MENU_MAIN); | |
1984 | 2883 SetForegroundWindow(window->GetApiHandle()); |
2884 SendMessageW(window->GetApiHandle(), WM_ACTIVATEAPP, 1, 0); | |
0 | 2885 while (GetCurrentMenuID() == MENU_MAIN || GetCurrentMenuID() == MENU_SAVELOAD) |
2886 { | |
2887 POINT pt; | |
2888 pMouse->GetCursorPos(&pt); | |
2889 pWindow = pWindow_MainMenu; | |
165 | 2890 if ( GetCurrentMenuID() == MENU_SAVELOAD) |
0 | 2891 { |
151 | 2892 if ( pCurrentScreen != SCREEN_LOADGAME ) |
0 | 2893 { |
2894 pTexture_PCX.Release(); | |
2895 pTexture_PCX.Load("lsave640.pcx", 0); | |
2896 pGUIWindow2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0); | |
151 | 2897 pCurrentScreen = SCREEN_LOADGAME; |
1033 | 2898 LoadUI_Load(0); |
0 | 2899 } |
2900 pWindow = pGUIWindow_CurrentMenu; | |
2901 } | |
2902 | |
2061 | 2903 for (MSG msg; PeekMessageW(&msg, 0, 0, 0, PM_REMOVE);) |
0 | 2904 { |
2905 if (msg.message == WM_QUIT) | |
2906 Game_DeinitializeAndTerminate(0); | |
2907 TranslateMessage(&msg); | |
2061 | 2908 DispatchMessageW(&msg); |
0 | 2909 } |
2061 | 2910 |
2911 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE) | |
0 | 2912 { |
2913 WaitMessage(); | |
2061 | 2914 continue; |
0 | 2915 } |
2061 | 2916 |
0 | 2917 pRenderer->BeginScene(); |
2918 pRenderer->DrawTextureRGB(0, 0, &pTexture_PCX); | |
1038 | 2919 |
165 | 2920 GUI_MainMenuMessageProc(); |
0 | 2921 GUI_UpdateWindows(); |
1038 | 2922 |
165 | 2923 if (GetCurrentMenuID() != MENU_MAIN) |
2924 { | |
961 | 2925 if (GetCurrentMenuID() == MENU_LoadingProcInMainMenu) |
0 | 2926 { |
1405
c0b273d33338
RemoveTexturesPackFromTextureList and RemoveTexturesFromTextureList
Ritor1
parents:
1404
diff
changeset
|
2927 pIcons_LOD->RemoveTexturesPackFromTextureList(); |
0 | 2928 pGUIWindow_CurrentMenu->Release(); |
2929 pGUIWindow_CurrentMenu = 0; | |
151 | 2930 pCurrentScreen = SCREEN_GAME; |
0 | 2931 viewparams->bRedrawGameUI = 1; |
2932 } | |
2933 } | |
2934 else | |
2935 { | |
1458 | 2936 if ( !pModalWindow )// ??? |
0 | 2937 { |
2938 pButton = pWindow->pControlsHead; | |
2939 for ( pButton = pWindow->pControlsHead; pButton; pButton = pButton->pNext ) | |
2940 { | |
2941 if ( pt.x >= (signed int)pButton->uX && pt.x <= (signed int)pButton->uZ | |
2942 && pt.y >= (signed int)pButton->uY && pt.y <= (signed int)pButton->uW | |
2943 && pWindow == pWindow_MainMenu ) | |
2944 { | |
832 | 2945 pControlParam = pButton->msg_param; |
0 | 2946 switch (pControlParam) // ïîäñâåòêà êíîïîê |
2947 { | |
2948 case 0: | |
2949 pTexture = pNew; | |
2950 pY = 172; | |
2951 break; | |
2952 case 1: | |
2953 pTexture = pLoad; | |
2954 pY = 227; | |
2955 break; | |
2956 case 2: | |
2957 pTexture = pCredits; | |
2958 pY = 282; | |
2959 break; | |
2960 case 3: | |
2961 pTexture = pExit; | |
2962 pY = 337; | |
2963 break; | |
2964 } | |
2965 pRenderer->DrawTextureIndexed(495, pY, pTexture); //ïîäñâåòêà êíîïîê | |
2966 } | |
2967 } | |
2968 } | |
2969 } | |
2970 pRenderer->EndScene(); | |
2971 pRenderer->Present(); | |
2972 } | |
970 | 2973 GUI_MainMenuMessageProc(); |
0 | 2974 pRenderer->BeginScene(); |
2975 GUI_UpdateWindows(); | |
2976 pRenderer->EndScene(); | |
2977 pRenderer->Present(); | |
961 | 2978 pTexture_PCX.Release(); |
0 | 2979 if ( pGUIWindow2 ) |
2980 { | |
2981 pGUIWindow2->Release(); | |
2982 pGUIWindow2 = 0; | |
2983 } | |
2984 pWindow_MainMenu->Release(); | |
1405
c0b273d33338
RemoveTexturesPackFromTextureList and RemoveTexturesFromTextureList
Ritor1
parents:
1404
diff
changeset
|
2985 pIcons_LOD->RemoveTexturesPackFromTextureList(); |
0 | 2986 } |
2987 | |
2988 | |
2989 //----- (00464479) -------------------------------------------------------- | |
1583 | 2990 void ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows() |
0 | 2991 { |
2992 int v0; // esi@9 | |
2993 | |
2994 if (pMouse) | |
2995 pMouse->SetCursorBitmap("MICON1"); | |
2996 | |
2997 pPaletteManager->ResetNonLocked(); | |
2998 pBitmaps_LOD->ReleaseAll2(); | |
2999 pSprites_LOD->DeleteSomeOtherSprites(); | |
3000 pIcons_LOD->ReleaseAll2(); | |
2152 | 3001 |
0 | 3002 if (uCurrentlyLoadedLevelType == LEVEL_Indoor) |
3003 pIndoor->Release(); | |
3004 else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) | |
1583 | 3005 pOutdoor->Release(); |
0 | 3006 |
3007 pAudioPlayer->StopChannels(-1, -1); | |
3008 pSoundList->_4A9D79(0); | |
3009 uCurrentlyLoadedLevelType = LEVEL_null; | |
3010 pSpriteFrameTable->ResetSomeSpriteFlags(); | |
3011 v0 = uNumVisibleWindows; | |
349 | 3012 pParty->armageddon_timer = 0; |
0 | 3013 while ( v0 > 0 ) |
3014 pWindowList[pVisibleWindowsIdxs[v0--] - 1].Release(); | |
3015 } | |
3016 | |
3017 //----- (004646F0) -------------------------------------------------------- | |
1458 | 3018 void PrepareWorld(unsigned int _0_box_loading_1_fullscreen) |
0 | 3019 { |
2154 | 3020 //if ( pRenderer->pRenderD3D ) |
0 | 3021 pGame->pVisInstance->_4C1A02(); |
3022 pEventTimer->Pause(); | |
3023 pMiscTimer->Pause(); | |
3024 pParty->uFlags = 2; | |
1517 | 3025 CastSpellInfoHelpers::_427D48(); |
0 | 3026 ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows(); |
1458 | 3027 DoPrepareWorld(0, (_0_box_loading_1_fullscreen == 0) + 1); |
0 | 3028 pMiscTimer->Resume(); |
3029 pEventTimer->Resume(); | |
3030 } | |
3031 | |
3032 //----- (00464761) -------------------------------------------------------- | |
1583 | 3033 void Game_DeinitializeAndTerminate(int exitCode) |
0 | 3034 { |
1586 | 3035 SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); |
0 | 3036 ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows(); |
3037 pGame->Deinitialize(); | |
2155 | 3038 pRenderer->Release(); |
1802 | 3039 delete window; |
3040 //if ( !DestroyWindow(hWnd) ) | |
3041 // GetLastError(); | |
1583 | 3042 exit(exitCode); |
0 | 3043 } |
3044 | |
3045 //----- (004647AB) -------------------------------------------------------- | |
762 | 3046 void FinalInitialization() |
0 | 3047 { |
3048 pViewport->SetScreen(viewparams->uSomeX, viewparams->uSomeY, viewparams->uSomeZ, viewparams->uSomeW); | |
2151 | 3049 pViewport->SetFOV(flt_6BE3A0 * 65536.0f); |
0 | 3050 |
1638
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
3051 //pIndoorCamera = new IndoorCamera; |
ccde94f02b75
class IndoorCamera split into BLVRenderParams and ODMRenderParams
Nomad
parents:
1637
diff
changeset
|
3052 //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
|
3053 // viewparams->uScreen_BttmR_Y - viewparams->uScreen_topL_Y + 1); |
0 | 3054 |
3055 InitializeTurnBasedAnimations(&stru_50C198); | |
762 | 3056 pBitmaps_LOD->_inlined_sub1(); |
3057 pSprites_LOD->_inlined_sub1(); | |
3058 pIcons_LOD->_inlined_sub1(); | |
0 | 3059 } |
3060 // 6BE3A0: using guessed type float flt_6BE3A0; | |
3061 | |
3062 //----- (00464839) -------------------------------------------------------- | |
1583 | 3063 char Is_out15odm_underwater() |
0 | 3064 { |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3065 return _stricmp(pCurrentMapName, "out15.odm") == 0; |
0 | 3066 } |
3067 | |
3068 //----- (00464851) -------------------------------------------------------- | |
1583 | 3069 void SetUnderwaterFog() |
0 | 3070 { |
3071 day_fogrange_1 = 50; | |
3072 day_fogrange_2 = 5000; | |
3073 } | |
3074 | |
3075 //----- (00464866) -------------------------------------------------------- | |
1458 | 3076 void DoPrepareWorld(unsigned int bLoading, int _1_fullscreen_loading_2_box) |
0 | 3077 { |
1458 | 3078 //int v2; // esi@1 |
0 | 3079 char *v3; // eax@1 |
3080 //char *v4; // eax@1 | |
3081 unsigned int v5; // eax@3 | |
3082 //size_t v6; // ecx@10 | |
3083 //char *v7; // eax@11 | |
3084 char Str1[20]; // [sp+Ch] [bp-18h]@1 | |
3085 unsigned int v9; // [sp+20h] [bp-4h]@1 | |
3086 | |
3087 v9 = bLoading; | |
3088 ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows(); | |
3089 pDecalBuilder->Reset(0); | |
1458 | 3090 pGameLoadingUI_ProgressBar->Initialize(_1_fullscreen_loading_2_box == 1 ? GUIProgressBar::TYPE_Fullscreen : |
3091 GUIProgressBar::TYPE_Box); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3092 strcpy(Str1, pCurrentMapName); |
0 | 3093 v3 = strtok(Str1, "."); |
3094 strcpy(Str1, v3); | |
3095 Level_LoadEvtAndStr(Str1); | |
3096 LoadLevel_InitializeLevelEvt(); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3097 strcpy(Str1, pCurrentMapName); |
0 | 3098 _strrev(Str1); |
3099 strtok(Str1, "."); | |
3100 _strrev(Str1); | |
3101 | |
3102 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
|
3103 pSpriteObjects[i].uObjectDescID = 0; |
0 | 3104 |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3105 v5 = pMapStats->GetMapInfo(pCurrentMapName); |
1541 | 3106 bUnderwater = false; |
0 | 3107 uLevelMapStatsID = v5; |
3108 pGame->uFlags2 &= 0xFFFFFFF7u; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3109 if ( !_stricmp(pCurrentMapName, "out15.odm") ) |
0 | 3110 { |
1541 | 3111 bUnderwater = true; |
1583 | 3112 pGame->uFlags2 |= GAME_FLAGS_2_ALTER_GRAVITY; |
0 | 3113 } |
831 | 3114 pParty->floor_face_pid = 0; |
1104 | 3115 if ( _stricmp(Str1, "blv") ) |
0 | 3116 PrepareToLoadODM(v9, 0); |
3117 else | |
3118 PrepareToLoadBLV(v9); | |
3119 pAudioPlayer->SetMapEAX(); | |
1459 | 3120 _461103_load_level_sub(); |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3121 if ( !_stricmp(pCurrentMapName, "d11.blv") || !_stricmp(pCurrentMapName, "d10.blv") ) |
0 | 3122 { |
1583 | 3123 //spawning grounds & walls of mist - no loot & exp from monsters |
0 | 3124 |
3125 for (uint i = 0; i < uNumActors; ++i) | |
3126 { | |
3127 pActors[i].pMonsterInfo.uTreasureType = 0; | |
3128 pActors[i].pMonsterInfo.uTreasureDiceRolls = 0; | |
3129 pActors[i].pMonsterInfo.uExp = 0; | |
3130 } | |
3131 } | |
3132 bDialogueUI_InitializeActor_NPC_ID = 0; | |
3133 OnMapLoad(); | |
3134 pGameLoadingUI_ProgressBar->Progress(); | |
1459 | 3135 memset(&pRenderer->pBillboardRenderListD3D, 0, sizeof(pRenderer->pBillboardRenderListD3D)); |
0 | 3136 pGameLoadingUI_ProgressBar->Release(); |
3137 _flushall(); | |
3138 } | |
3139 | |
3140 //----- (004649EF) -------------------------------------------------------- | |
3141 int __fastcall ReadWindowsRegistryInt(const char *pKey, int uDefValue) | |
3142 { | |
3143 int v3; // [sp+4h] [bp-24h]@1 | |
3144 DWORD cbData; // [sp+8h] [bp-20h]@1 | |
3145 LPCSTR lpValueName; // [sp+Ch] [bp-1Ch]@1 | |
3146 DWORD dwDisposition; // [sp+10h] [bp-18h]@2 | |
3147 BYTE Data[4]; // [sp+14h] [bp-14h]@5 | |
3148 HKEY hKey; // [sp+18h] [bp-10h]@1 | |
3149 HKEY phkResult; // [sp+1Ch] [bp-Ch]@1 | |
3150 HKEY v10; // [sp+20h] [bp-8h]@1 | |
3151 HKEY v11; // [sp+24h] [bp-4h]@1 | |
3152 | |
3153 v3 = uDefValue; | |
3154 lpValueName = pKey; | |
3155 v11 = 0; | |
3156 v10 = 0; | |
3157 hKey = 0; | |
3158 phkResult = 0; | |
3159 cbData = 4; | |
27 | 3160 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WOW64_32KEY, &hKey) )// for 64 bit |
0 | 3161 { |
3162 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) | |
3163 { | |
3164 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v10, &dwDisposition) ) | |
3165 { | |
3166 if ( !RegCreateKeyExA(v10, "1.0", 0, "", 0, 0xF003Fu, 0, &v11, &dwDisposition) ) | |
3167 { | |
3168 if ( RegQueryValueExA(v11, lpValueName, 0, 0, Data, &cbData) ) | |
3169 { | |
3170 *(int *)Data = v3; | |
3171 RegSetValueExA(v11, lpValueName, 0, 4u, Data, 4u); | |
3172 } | |
3173 RegCloseKey(v11); | |
3174 } | |
3175 RegCloseKey(v10); | |
3176 } | |
3177 RegCloseKey(phkResult); | |
3178 } | |
3179 RegCloseKey(hKey); | |
3180 } | |
3181 return *(int *)Data; | |
3182 } | |
3183 | |
3184 //----- (00464B02) -------------------------------------------------------- | |
3185 void __fastcall WriteWindowsRegistryString(const char *pKey, const char *pString) | |
3186 { | |
3187 size_t v2; // eax@5 | |
3188 const char *lpValueName; // [sp+4h] [bp-1Ch]@1 | |
3189 const char *Str; // [sp+8h] [bp-18h]@1 | |
3190 DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 | |
3191 HKEY hKey; // [sp+10h] [bp-10h]@1 | |
3192 HKEY phkResult; // [sp+14h] [bp-Ch]@1 | |
3193 HKEY v8; // [sp+18h] [bp-8h]@1 | |
3194 HKEY v9; // [sp+1Ch] [bp-4h]@1 | |
3195 | |
3196 Str = pString; | |
3197 lpValueName = pKey; | |
3198 v9 = 0; | |
3199 v8 = 0; | |
3200 hKey = 0; | |
3201 phkResult = 0; | |
3202 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) ) | |
3203 { | |
3204 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) | |
3205 { | |
3206 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v8, &dwDisposition) ) | |
3207 { | |
3208 if ( !RegCreateKeyExA(v8, "1.0", 0, "", 0, 0xF003Fu, 0, &v9, &dwDisposition) ) | |
3209 { | |
3210 v2 = strlen(Str); | |
3211 RegSetValueExA(v9, lpValueName, 0, 1u, (const BYTE *)Str, v2 + 1); | |
3212 RegCloseKey(v9); | |
3213 } | |
3214 RegCloseKey(v8); | |
3215 } | |
3216 RegCloseKey(phkResult); | |
3217 } | |
3218 RegCloseKey(hKey); | |
3219 } | |
3220 } | |
3221 | |
3222 //----- (00464BEF) -------------------------------------------------------- | |
3223 void __fastcall ReadWindowsRegistryString(const char *pKeyName, char *pOutString, int uBufLen, const char *pDefaultValue) | |
3224 { | |
3225 LSTATUS (__stdcall *v4)(HKEY); // esi@1 | |
3226 LSTATUS result; // eax@7 | |
3227 DWORD Type; // [sp+Ch] [bp-24h]@5 | |
3228 LPCSTR lpValueName; // [sp+10h] [bp-20h]@1 | |
3229 DWORD cbData; // [sp+14h] [bp-1Ch]@1 | |
3230 LPBYTE Dest; // [sp+18h] [bp-18h]@1 | |
3231 DWORD dwDisposition; // [sp+1Ch] [bp-14h]@2 | |
3232 HKEY phkResult; // [sp+20h] [bp-10h]@1 | |
3233 HKEY hKey; // [sp+24h] [bp-Ch]@1 | |
3234 HKEY v13; // [sp+28h] [bp-8h]@1 | |
3235 HKEY v14; // [sp+2Ch] [bp-4h]@1 | |
3236 | |
3237 cbData = uBufLen; | |
3238 Dest = (LPBYTE)pOutString; | |
3239 lpValueName = pKeyName; | |
3240 v14 = 0; | |
3241 v13 = 0; | |
3242 hKey = 0; | |
3243 phkResult = 0; | |
3244 v4 = RegCloseKey; | |
3245 if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) | |
3246 || RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) | |
3247 || RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v13, &dwDisposition) | |
3248 || RegCreateKeyExA(v13, "1.0", 0, "", 0, 0xF003Fu, 0, &v14, &dwDisposition) ) | |
1416 | 3249 { |
3250 result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); | |
3251 } | |
3252 else if ( RegQueryValueExA(v14, lpValueName, 0, &Type, Dest, &cbData) ) | |
0 | 3253 { |
3254 RegCloseKey(v14); | |
3255 v14 = 0; | |
3256 result = (LSTATUS)strncpy((char *)Dest, pDefaultValue, uBufLen); | |
1416 | 3257 } |
3258 else | |
3259 { | |
3260 v4 = RegCloseKey; | |
3261 RegCloseKey(v14); | |
3262 v14 = 0; | |
3263 RegCloseKey(v13); | |
3264 v13 = 0; | |
3265 RegCloseKey(phkResult); | |
3266 phkResult = 0; | |
3267 result = RegCloseKey(hKey); | |
3268 hKey = 0; | |
3269 } | |
0 | 3270 if ( v14 ) |
3271 result = v4(v14); | |
3272 if ( v13 ) | |
3273 result = v4(v13); | |
3274 if ( hKey ) | |
3275 result = v4(hKey); | |
3276 if ( phkResult ) | |
3277 result = v4(phkResult); | |
3278 } | |
3279 | |
3280 //----- (00464D32) -------------------------------------------------------- | |
3281 void __fastcall WriteWindowsRegistryInt(const char *pKey, int val) | |
3282 { | |
3283 const char *lpValueName; // [sp+4h] [bp-1Ch]@1 | |
3284 BYTE Data[4]; // [sp+8h] [bp-18h]@1 | |
3285 DWORD dwDisposition; // [sp+Ch] [bp-14h]@2 | |
3286 HKEY hKey; // [sp+10h] [bp-10h]@1 | |
3287 HKEY phkResult; // [sp+14h] [bp-Ch]@1 | |
3288 HKEY v7; // [sp+18h] [bp-8h]@1 | |
3289 HKEY v8; // [sp+1Ch] [bp-4h]@1 | |
3290 | |
3291 *(int *)Data = val; | |
3292 lpValueName = pKey; | |
3293 v8 = 0; | |
3294 v7 = 0; | |
3295 hKey = 0; | |
3296 phkResult = 0; | |
3297 if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) ) | |
3298 { | |
3299 if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) | |
3300 { | |
3301 if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v7, &dwDisposition) ) | |
3302 { | |
3303 if ( !RegCreateKeyExA(v7, "1.0", 0, "", 0, 0xF003Fu, 0, &v8, &dwDisposition) ) | |
3304 { | |
2101 | 3305 RegSetValueExA(v8, lpValueName, 0, 4, Data, 4); |
0 | 3306 RegCloseKey(v8); |
3307 } | |
3308 RegCloseKey(v7); | |
3309 } | |
3310 RegCloseKey(phkResult); | |
3311 } | |
3312 RegCloseKey(hKey); | |
3313 } | |
3314 } | |
3315 | |
3316 //----- (00464E17) -------------------------------------------------------- | |
3317 bool __fastcall CheckMM7CD(char c) | |
3318 { | |
3319 char DstBuf[256]; // [sp+Ch] [bp-218h]@1 | |
3320 char strCommand[256]; // [sp+10Ch] [bp-118h]@1 | |
3321 char Filename[20]; // [sp+20Ch] [bp-18h]@1 | |
3322 | |
3323 | |
3324 wchar_t pMagicPath[1024]; | |
1165
29a8defbad9e
temporary _CRT_SECURE_NO_WARNINGS to remove some warnings
Grumpy7
parents:
1150
diff
changeset
|
3325 swprintf(pMagicPath, wcslen(L"%C:\\anims\\magic7.vid"), L"%C:\\anims\\magic7.vid", c); |
0 | 3326 if (GetFileAttributesW(pMagicPath) == -1) |
3327 return false; | |
3328 | |
3329 wsprintfA(strCommand, "open %c: type cdaudio alias CD", c); | |
3330 if (!mciSendStringA(strCommand, DstBuf, 0xFFu, 0)) | |
3331 { | |
3332 wsprintfA(strCommand, "info CD UPC wait"); | |
3333 mciSendStringA(strCommand, DstBuf, 0xFFu, 0); | |
3334 wsprintfA(strCommand, "close CD"); | |
3335 mciSendStringA(strCommand, DstBuf, 0xFFu, 0); | |
3336 } | |
3337 | |
3338 memcpy(Filename, "X:\\anims\\magic7.vid", sizeof(Filename)); | |
3339 *Filename = c; | |
3340 | |
1980 | 3341 FILE* f = fopen(Filename, "rb"); |
0 | 3342 if (!f) |
3343 return false; | |
3344 | |
3345 if (!fseek(f, 0, SEEK_END)) | |
3346 { | |
3347 if (!fseek(f, -100, SEEK_CUR)) | |
3348 fread(DstBuf, 1u, 0x64u, f); | |
3349 | |
3350 fclose(f); | |
3351 return true; | |
3352 } | |
3353 fclose(f); | |
3354 return false; | |
3355 } | |
3356 | |
3357 //----- (00464F1B) -------------------------------------------------------- | |
3358 signed int __stdcall InsertMM7CDDialogFunc(HWND hDlg, int a2, __int16 a3, int a4) | |
3359 { | |
3360 char v4; // zf@3 | |
3361 int v6; // eax@10 | |
3362 int v7; // eax@11 | |
3363 int v8; // eax@12 | |
3364 int v9; // eax@13 | |
3365 BOOL (__stdcall *v10)(HWND, int, LPCSTR); // edi@15 | |
3366 const CHAR *v11; // [sp-Ch] [bp-Ch]@15 | |
3367 INT_PTR v12; // [sp-4h] [bp-4h]@5 | |
3368 | |
3369 if ( a2 == 272 ) | |
3370 { | |
3371 hInsertCDWindow = hDlg; | |
3372 v6 = (GetUserDefaultLangID() & 0x3FF) - 7; | |
3373 if ( v6 ) | |
3374 { | |
3375 v7 = v6 - 3; | |
3376 if ( v7 ) | |
3377 { | |
3378 v8 = v7 - 2; | |
3379 if ( v8 ) | |
3380 { | |
3381 v9 = v8 - 4; | |
3382 if ( v9 ) | |
3383 { | |
3384 if ( v9 != 5 ) | |
3385 return 0; | |
3386 SetWindowTextA(hDlg, "Wloz CD-ROM numer 2"); | |
3387 v10 = SetDlgItemTextA; | |
3388 SetDlgItemTextA(hDlg, 1010, "Wloz CD-ROM numer 2 Might and Magic® VII."); | |
3389 v11 = "Odwolaj"; | |
3390 } | |
3391 else | |
3392 { | |
3393 SetWindowTextA(hDlg, "Inserire il secondo CD"); | |
3394 v10 = SetDlgItemTextA; | |
3395 SetDlgItemTextA(hDlg, 1010, "Inserire il secondo CD di Might and Magic® VII."); | |
3396 v11 = "Annulla"; | |
3397 } | |
3398 } | |
3399 else | |
3400 { | |
3401 SetWindowTextA(hDlg, "Insérez le CD 2"); | |
3402 v10 = SetDlgItemTextA; | |
3403 SetDlgItemTextA(hDlg, 1010, "Insérez Might & Magic® VII CD 2."); | |
3404 v11 = "Supprimer"; | |
3405 } | |
3406 } | |
3407 else | |
3408 { | |
3409 SetWindowTextA(hDlg, "Por favor, inserte disco 2"); | |
3410 v10 = SetDlgItemTextA; | |
3411 SetDlgItemTextA(hDlg, 1010, "Por favor, inserte disco 2 de Might & Magic® VII."); | |
3412 v11 = "Cancelar"; | |
3413 } | |
3414 } | |
3415 else | |
3416 { | |
3417 SetWindowTextA(hDlg, "Bitte CD 2 einlegen"); | |
3418 v10 = SetDlgItemTextA; | |
3419 SetDlgItemTextA(hDlg, 1010, "Bitte CD 2 von Might and Magic® VII einlegen."); | |
3420 v11 = "Abbrechen"; | |
3421 } | |
3422 v10(hDlg, 2, v11); | |
3423 return 0; | |
3424 } | |
3425 if ( a2 == 273 ) | |
3426 { | |
3427 if ( a3 == 2 ) | |
3428 { | |
3429 v12 = 0; | |
3430 EndDialog(hDlg, v12); | |
3431 return 1; | |
3432 } | |
3433 v4 = a3 == 1; | |
3434 } | |
3435 else | |
3436 { | |
3437 v4 = a2 == 1025; | |
3438 } | |
3439 if ( v4 ) | |
3440 { | |
3441 v12 = 1; | |
1416 | 3442 EndDialog(hDlg, v12); |
3443 return 1; | |
0 | 3444 } |
3445 return 0; | |
3446 } | |
3447 | |
3448 //----- (00465061) -------------------------------------------------------- | |
3449 bool __fastcall FindMM7CD(HWND hWnd, char *pCDDrive) | |
3450 { | |
3451 char drive[4] = {'X', ':', '\\', 0}; | |
3452 | |
3453 bool bGotCDFromRegistry = false; | |
3454 | |
3455 HKEY hSoftware = nullptr, | |
3456 hNWC = nullptr, | |
3457 hMM7 = nullptr, | |
3458 hVersion = nullptr; | |
3459 if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hSoftware)) | |
3460 { | |
3461 if (!RegOpenKeyExA(hSoftware, "New World Computing", 0, 0x2001Fu, &hNWC)) | |
3462 { | |
3463 if (!RegOpenKeyExA(hNWC, "Might and Magic VII", 0, 0x2001Fu, &hMM7)) | |
3464 { | |
3465 if (!RegOpenKeyExA(hMM7, "1.0", 0, 0x2001Fu, &hVersion)) | |
3466 { | |
3467 DWORD cbData = 3; | |
3468 if (!RegQueryValueExA(hVersion, "CDDrive", 0, 0, (BYTE *)drive, &cbData)) | |
3469 bGotCDFromRegistry = true; | |
3470 } | |
3471 RegCloseKey(hVersion); | |
3472 } | |
3473 RegCloseKey(hMM7); | |
3474 } | |
3475 RegCloseKey(hNWC); | |
3476 } | |
3477 RegCloseKey(hSoftware); | |
3478 | |
3479 if (bGotCDFromRegistry) | |
3480 if (CheckMM7CD(*drive)) | |
3481 { | |
3482 cMM7GameCDDriveLetter = *drive; | |
3483 return true; | |
3484 } | |
3485 | |
3486 while (true) | |
3487 { | |
3488 for (uint i = 0; i < 26; ++i) | |
3489 { | |
3490 drive[0] = 'A' + i; | |
3491 | |
3492 if (GetDriveTypeA(drive) == DRIVE_CDROM) | |
3493 if (CheckMM7CD(*drive)) | |
3494 { | |
3495 cMM7GameCDDriveLetter = *drive; | |
3496 WriteWindowsRegistryString("CDDrive", drive); | |
3497 return true; | |
3498 } | |
3499 } | |
3500 | |
1802 | 3501 if (DialogBoxParamA(GetModuleHandleW(nullptr), "InsertCD", hWnd, (DLGPROC)InsertMM7CDDialogFunc, 0)) |
0 | 3502 continue; |
3503 return false; | |
3504 } | |
3505 } | |
3506 | |
1655 | 3507 |
3508 | |
0 | 3509 //----- (004651F4) -------------------------------------------------------- |
1655 | 3510 bool MM7_Initialize(int game_width, int game_height) |
0 | 3511 { |
3512 wchar_t pCurrentDir[1024]; | |
3513 _wgetcwd(pCurrentDir, 1024); | |
3514 | |
3515 wchar_t pMM6IniFile[1024]; | |
293 | 3516 wsprintfW(pMM6IniFile, L"%s\\mm6.ini", pCurrentDir); |
0 | 3517 |
3518 bCanLoadFromCD = GetPrivateProfileIntW(L"settings", L"use_cd", 1, pMM6IniFile); | |
3519 if (bNoCD) | |
3520 bCanLoadFromCD = false; | |
3521 if (bCanLoadFromCD) | |
3522 { | |
2151 | 3523 Log::Warning(L"Checking for CD..."); |
1802 | 3524 if (!FindMM7CD(nullptr, &cMM7GameCDDriveLetter)) |
0 | 3525 return false; |
2151 | 3526 Log::Warning(L"...done."); |
0 | 3527 } |
3528 | |
3529 | |
3530 srand(GetTickCount()); | |
1802 | 3531 |
3532 window = OSWindow::Create(L"Might and Magic® Trilogy", game_width, game_height); | |
0 | 3533 |
3534 pRenderer = Render::Create(); | |
3535 if (!pRenderer) | |
3536 { | |
3537 Log::Warning(L"Render creation failed"); | |
3538 return false; | |
3539 } | |
3540 else | |
3541 { | |
2069 | 3542 //bool bWindowMode = ReadWindowsRegistryInt("startinwindow", false); |
1802 | 3543 //uint uDefaultDevice = ReadWindowsRegistryInt("D3D Device", 1); |
0 | 3544 bool bColoredLights = ReadWindowsRegistryInt("Colored Lights", false); |
3545 uint uLevelOfDetail = ReadWindowsRegistryInt("Detail Level", 1); | |
3546 uint bTinting = ReadWindowsRegistryInt("Tinting", 1) != 0; | |
3547 | |
2069 | 3548 if (!pRenderer->Initialize(window, bColoredLights, uLevelOfDetail, bTinting)) |
0 | 3549 { |
3550 Log::Warning(L"Render failed to initialize"); | |
3551 return false; | |
3552 } | |
3553 } | |
492 | 3554 |
351 | 3555 game_starting_year = 1168; |
0 | 3556 |
3557 pParty = new Party; | |
147 | 3558 memset(&pParty->pHirelings, 0, sizeof(pParty->pHirelings)); |
0 | 3559 pParty->uWalkSpeed = GetPrivateProfileIntW(L"debug", L"walkspeed", 384, pMM6IniFile); |
3560 pParty->uDefaultEyelevel = GetPrivateProfileIntW(L"party", L"eyelevel", 160, pMM6IniFile); | |
3561 pParty->sEyelevel = pParty->uDefaultEyelevel; | |
3562 pParty->uDefaultPartyHeight = GetPrivateProfileIntW(L"party", L"height", 192, pMM6IniFile); | |
3563 pParty->uPartyHeight = pParty->uDefaultPartyHeight; | |
2151 | 3564 |
0 | 3565 MM6_Initialize(pMM6IniFile); |
3566 | |
3567 pKeyActionMap = new KeyboardActionMapping; | |
3568 | |
3569 pEventTimer = Timer::Create(); | |
3570 pEventTimer->Initialize(); | |
3571 | |
3572 OnTimer(1); | |
3573 GameUI_StatusBar_UpdateTimedString(1); | |
3574 pGame = Game::Create(); | |
3575 pMouse = pGame->pMouseInstance; | |
1655 | 3576 |
0 | 3577 |
3578 pIcons_LOD = new LODFile_IconsBitmaps; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3579 if (!pIcons_LOD->Load("data\\icons.lod", "icons")) |
0 | 3580 { |
2151 | 3581 MessageBoxW(nullptr, L"Some files are missing\n\nPlease Reinstall.", |
3582 L"Files Missing", MB_ICONEXCLAMATION); | |
0 | 3583 return false; |
3584 } | |
3585 pIcons_LOD->dword_011BA4 = 0; | |
3586 | |
3587 pEvents_LOD = new LODFile_IconsBitmaps; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3588 if (!pEvents_LOD->Load("data\\events.lod", "icons")) |
0 | 3589 { |
2151 | 3590 MessageBoxW(nullptr, L"Some files are missing\n\nPlease Reinstall.", |
3591 L"Files Missing", MB_ICONEXCLAMATION); | |
0 | 3592 return false; |
3593 } | |
3594 | |
3595 InitializeGameText(); | |
3596 | |
3597 pBitmaps_LOD = new LODFile_IconsBitmaps; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3598 if (!pBitmaps_LOD->Load("data\\bitmaps.lod", "bitmaps")) |
0 | 3599 { |
2151 | 3600 MessageBoxA(nullptr, pGlobalTXT_LocalizationStrings[63], |
3601 pGlobalTXT_LocalizationStrings[184], MB_ICONEXCLAMATION); | |
0 | 3602 return false; |
3603 } | |
3604 | |
3605 pSprites_LOD = new LODFile_Sprites; | |
2151 | 3606 if (!pSprites_LOD->LoadSprites("data\\sprites.lod")) |
0 | 3607 { |
3608 MessageBoxA(nullptr, | |
3609 pGlobalTXT_LocalizationStrings[63], | |
3610 pGlobalTXT_LocalizationStrings[184], MB_ICONEXCLAMATION); | |
3611 return false; | |
3612 } | |
3613 | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3614 |
1543 | 3615 #if 0 |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3616 if (_access("../MM_VI/data/icons.lod", 0) == 0) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3617 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3618 pIcons_LOD_mm6 = new LODFile_IconsBitmaps; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3619 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
|
3620 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3621 delete pIcons_LOD_mm6; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3622 pIcons_LOD_mm6 = nullptr; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3623 Log::Warning(L"Unable to load mm6:icons.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3624 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3625 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3626 else |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3627 Log::Warning(L"Unable to find mm6:icons.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3628 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3629 if (_access("../MM_VI/data/bitmaps.lod", 0) == 0) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3630 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3631 pBitmaps_LOD_mm6 = new LODFile_IconsBitmaps; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3632 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
|
3633 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3634 delete pBitmaps_LOD_mm6; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3635 pBitmaps_LOD_mm6 = nullptr; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3636 Log::Warning(L"Unable to load mm6:bitmaps.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3637 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3638 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3639 else |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3640 Log::Warning(L"Unable to find mm6:bitmaps.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3641 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3642 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
|
3643 : "../MM_VI/data/sprites.lod"; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3644 if (_access(mm6_sprite_container_name, 0) == 0) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3645 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3646 pSprites_LOD_mm6 = new LODFile_Sprites; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3647 if (!pSprites_LOD_mm6->LoadSprites(mm6_sprite_container_name)) |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3648 { |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3649 delete pSprites_LOD_mm6; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3650 pSprites_LOD_mm6 = nullptr; |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3651 Log::Warning(L"Unable to load mm6:sprites.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3652 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3653 } |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3654 else |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3655 Log::Warning(L"Unable to find mm6:sprites.lod"); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3656 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3657 |
1541 | 3658 if (_access("../mm8/data/icons.lod", 0) == 0) |
3659 { | |
3660 pIcons_LOD_mm8 = new LODFile_IconsBitmaps; | |
3661 if (!pIcons_LOD_mm8->Load("../mm8/data/icons.lod", "icons")) | |
3662 { | |
3663 delete pIcons_LOD_mm8; | |
3664 pIcons_LOD_mm8 = nullptr; | |
3665 Log::Warning(L"Unable to load mm8:icons.lod"); | |
3666 } | |
0 | 3667 } |
3668 else | |
1541 | 3669 Log::Warning(L"Unable to find mm8:icons.lod"); |
3670 | |
3671 | |
3672 if (_access("../mm8/data/bitmaps.lod", 0) == 0) | |
3673 { | |
3674 pBitmaps_LOD_mm8 = new LODFile_IconsBitmaps; | |
3675 if (!pBitmaps_LOD_mm8->Load("../mm8/data/bitmaps.lod", "bitmaps")) | |
3676 { | |
3677 delete pBitmaps_LOD_mm8; | |
3678 pBitmaps_LOD_mm8 = nullptr; | |
3679 Log::Warning(L"Unable to load mm8:bitmaps.lod"); | |
3680 } | |
3681 } | |
3682 else | |
3683 Log::Warning(L"Unable to find mm8:bitmaps.lod"); | |
3684 | |
3685 | |
3686 if (_access("../mm8/data/sprites.lod", 0) == 0) | |
3687 { | |
3688 pSprites_LOD_mm8 = new LODFile_Sprites; | |
3689 if (!pSprites_LOD_mm8->LoadSprites("../mm8/data/sprites.lod")) | |
3690 { | |
3691 delete pSprites_LOD_mm8; | |
3692 pSprites_LOD_mm8 = nullptr; | |
3693 Log::Warning(L"Unable to load mm8:sprites.lod"); | |
3694 } | |
3695 } | |
3696 else | |
3697 Log::Warning(L"Unable to find mm8:sprites.lod"); | |
1543 | 3698 #endif |
1541 | 3699 |
0 | 3700 { |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3701 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
|
3702 *sft_mm8 = nullptr; |
2151 | 3703 void *sft_mm7 = pEvents_LOD->LoadRaw("dsft.bin", 1); |
0 | 3704 pSpriteFrameTable = new SpriteFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3705 pSpriteFrameTable->FromFile(sft_mm6, sft_mm7, sft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3706 free(sft_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3707 free(sft_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3708 free(sft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3709 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3710 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
|
3711 *tft_mm8 = nullptr; |
2151 | 3712 void *tft_mm7 = pEvents_LOD->LoadRaw("dtft.bin", 1); |
0 | 3713 pTextureFrameTable = new TextureFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3714 pTextureFrameTable->FromFile(tft_mm6, tft_mm7, tft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3715 free(tft_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3716 free(tft_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3717 free(tft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3718 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3719 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
|
3720 *tiles_mm8 = nullptr; |
2151 | 3721 void *tiles_mm7 = pEvents_LOD->LoadRaw("dtile.bin", 1); |
0 | 3722 pTileTable = new TileTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3723 pTileTable->FromFile(tiles_mm6, tiles_mm7, tiles_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3724 free(tiles_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3725 free(tiles_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3726 free(tiles_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3727 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3728 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
|
3729 *pft_mm8 = nullptr; |
2151 | 3730 void *pft_mm7 = pEvents_LOD->LoadRaw("dpft.bin", 1); |
0 | 3731 pPlayerFrameTable = new PlayerFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3732 pPlayerFrameTable->FromFile(pft_mm6, pft_mm7, pft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3733 free(pft_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3734 free(pft_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3735 free(pft_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3736 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3737 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
|
3738 *ift_mm8 = nullptr; |
2151 | 3739 void *ift_mm7 = pEvents_LOD->LoadRaw("dift.bin", 1); |
0 | 3740 pIconsFrameTable = new IconFrameTable; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3741 pIconsFrameTable->FromFile(ift_mm6, ift_mm7, ift_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3742 free(ift_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3743 free(ift_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3744 free(ift_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3745 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3746 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
|
3747 *decs_mm8 = nullptr; |
2151 | 3748 void *decs_mm7 = pEvents_LOD->LoadRaw("ddeclist.bin", 1); |
0 | 3749 pDecorationList = new DecorationList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3750 pDecorationList->FromFile(decs_mm6, decs_mm7, decs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3751 free(decs_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3752 free(decs_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3753 free(decs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3754 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3755 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
|
3756 *objs_mm8 = nullptr; |
2151 | 3757 void *objs_mm7 = pEvents_LOD->LoadRaw("dobjlist.bin", 1); |
0 | 3758 pObjectList = new ObjectList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3759 pObjectList->FromFile(objs_mm6, objs_mm7, objs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3760 free(objs_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3761 free(objs_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3762 free(objs_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3763 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3764 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
|
3765 *mons_mm8 = nullptr; |
2151 | 3766 void *mons_mm7 = pEvents_LOD->LoadRaw("dmonlist.bin", 1); |
0 | 3767 pMonsterList = new MonsterList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3768 pMonsterList->FromFile(mons_mm6, mons_mm7, mons_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3769 free(mons_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3770 free(mons_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3771 free(mons_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3772 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3773 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
|
3774 *chests_mm8 = nullptr; |
2151 | 3775 void *chests_mm7 = pEvents_LOD->LoadRaw("dchest.bin", 1); |
0 | 3776 pChestList = new ChestList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3777 pChestList->FromFile(chests_mm6, chests_mm7, chests_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3778 free(chests_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3779 free(chests_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3780 free(chests_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3781 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3782 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
|
3783 *overlays_mm8 = nullptr; |
2151 | 3784 void *overlays_mm7 = pEvents_LOD->LoadRaw("doverlay.bin", 1); |
0 | 3785 pOverlayList = new OverlayList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3786 pOverlayList->FromFile(overlays_mm6, overlays_mm7, overlays_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3787 free(overlays_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3788 free(overlays_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3789 free(overlays_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3790 |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3791 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
|
3792 *sounds_mm8 = nullptr; |
2151 | 3793 void *sounds_mm7 = pEvents_LOD->LoadRaw("dsounds.bin", 1); |
0 | 3794 pSoundList = new SoundList; |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3795 pSoundList->FromFile(sounds_mm6, sounds_mm7, sounds_mm8); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3796 free(sounds_mm6); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3797 free(sounds_mm7); |
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
3798 free(sounds_mm8); |
0 | 3799 } |
3800 | |
3801 | |
3802 | |
492 | 3803 |
2069 | 3804 if (dword_6BE368_debug_settings_2 & DEBUG_SETTINGS_RUN_IN_WIDOW) |
0 | 3805 { |
2069 | 3806 //window->SetWindowedMode(game_width, game_height); |
3807 pRenderer->SwitchToWindow(); | |
0 | 3808 } |
3809 else | |
3810 { | |
2069 | 3811 __debugbreak(); // Nomad |
3812 window->SetFullscreenMode(); | |
3813 pRenderer->InitializeFullscreen(); | |
0 | 3814 } |
2151 | 3815 |
3816 uSoundVolumeMultiplier = min(9, ReadWindowsRegistryInt("soundflag", 9)); | |
3817 uMusicVolimeMultiplier = min(9, ReadWindowsRegistryInt("musicflag", 9)); | |
3818 uVoicesVolumeMultiplier = min(9, ReadWindowsRegistryInt("CharVoices", 9)); | |
0 | 3819 bShowDamage = ReadWindowsRegistryInt("ShowDamage", 1) != 0; |
2151 | 3820 |
3821 uGammaPos = min(4, ReadWindowsRegistryInt("GammaPos", 4)); | |
0 | 3822 pGame->pGammaController->Initialize(uGammaPos * 0.1 + 0.6); |
3823 | |
3824 if ( ReadWindowsRegistryInt("Bloodsplats", 1) ) | |
591 | 3825 pGame->uFlags2 |= GAME_FLAGS_2_DRAW_BLOODSPLATS; |
0 | 3826 else |
733 | 3827 pGame->uFlags2 &= ~GAME_FLAGS_2_DRAW_BLOODSPLATS; |
0 | 3828 |
3829 uTurnSpeed = ReadWindowsRegistryInt("TurnDelta", 0); | |
3830 | |
3831 if (!bNoSound) | |
1802 | 3832 pAudioPlayer->Initialize(); |
0 | 3833 |
1262 | 3834 pVideoPlayer = new VideoPlayer(); |
1802 | 3835 pVideoPlayer->Initialize(window); |
0 | 3836 |
2061 | 3837 dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000; |
0 | 3838 |
3839 switch ( uTurnSpeed ) | |
3840 { | |
731 | 3841 case 0: // undefined turn option |
1067 | 3842 __debugbreak(); // really shouldn't use this mode |
731 | 3843 uTurnSpeed = (unsigned int)uCPUSpeed < 199 ? 128 : 64; // adjust turn speed to estimated fps |
3844 break; | |
3845 | |
3846 case 1u: // 16x | |
3847 Log::Warning(L"x16 Turn Speed"); // really shouldn't use this mode | |
0 | 3848 uTurnSpeed = 128; |
731 | 3849 break; |
3850 | |
3851 case 2u: // 32x | |
3852 Log::Warning(L"x32 Turn Speed"); // really shouldn't use this mode | |
0 | 3853 uTurnSpeed = 64; |
731 | 3854 break; |
3855 | |
3856 case 3u: // smooth | |
0 | 3857 uTurnSpeed = 0; |
731 | 3858 break; |
3859 } | |
3860 | |
0 | 3861 return true; |
3862 } | |
3863 | |
3864 //----- (00465D0B) -------------------------------------------------------- | |
1802 | 3865 void SecondaryInitialization() |
0 | 3866 { |
2151 | 3867 //__int16 v4; // ax@4 |
3868 //signed int v5; // esi@5 | |
3869 //int v6; // ecx@6 | |
3870 //int v7; // edx@7 | |
3871 //ObjectDesc *v8; // eax@7 | |
3872 //char pContainer[32]; // [sp+10h] [bp-Ch]@9 | |
0 | 3873 |
1802 | 3874 pMouse->Initialize(window); |
0 | 3875 |
3876 pItemsTable = new ItemsTable; | |
3877 pItemsTable->Initialize(); | |
3878 | |
2154 | 3879 //pBitmaps_LOD->can_load_hardware_sprites = 1; |
2069 | 3880 //pBitmaps_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits); |
3881 pBitmaps_LOD->SetupPalettes(5, 6, 5); | |
3882 //pIcons_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits); | |
3883 pIcons_LOD->SetupPalettes(5, 6, 5); | |
3884 //pPaletteManager->SetColorChannelInfo(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits); | |
3885 pPaletteManager->SetColorChannelInfo(5, 6, 5); | |
762 | 3886 |
3887 pPaletteManager->SetMistColor(128, 128, 128); | |
0 | 3888 pPaletteManager->RecalculateAll(); |
2154 | 3889 //pSprites_LOD->can_load_hardware_sprites = 1; |
0 | 3890 pObjectList->InitializeSprites(); |
3891 pOverlayList->InitializeSprites(); | |
3892 if (!bNoSound) | |
3893 pSoundList->Initialize(); | |
3894 | |
3895 | |
3896 for (uint i = 0; i < 4; ++i) | |
3897 { | |
2151 | 3898 static const char *pUIAnimNames[4] = |
3899 { | |
3900 "glow03", "glow05", | |
3901 "torchA", "wizeyeA" | |
3902 }; | |
3903 static unsigned short _4E98D0[4][4] = | |
3904 { | |
3905 {479, 0, 329, 0}, | |
3906 {585, 0, 332, 0}, | |
3907 {468, 0, 0, 0}, | |
3908 {606, 0, 0, 0} | |
3909 }; | |
3910 | |
0 | 3911 pUIAnims[i]->uIconID = pIconsFrameTable->FindIcon(pUIAnimNames[i]); |
3912 pIconsFrameTable->InitializeAnimation(pUIAnims[i]->uIconID); | |
3913 | |
3914 pUIAnims[i]->uAnimLength = 0; | |
3915 pUIAnims[i]->uAnimTime = 0; | |
3916 pUIAnims[i]->x = _4E98D0[i][0]; | |
3917 pUIAnims[i]->y = _4E98D0[i][2]; | |
3918 } | |
3919 | |
2151 | 3920 for (unsigned int i = 0; i < pObjectList->uNumObjects; ++i) |
0 | 3921 { |
2151 | 3922 pObjectList->pObjects[i].uParticleTrailColor = pObjectList->pObjects[i].uParticleTrailColorB | |
3923 ((unsigned int)pObjectList->pObjects[i].uParticleTrailColorG << 8) | | |
3924 ((unsigned int)pObjectList->pObjects[i].uParticleTrailColorR << 16); | |
0 | 3925 } |
2151 | 3926 |
0 | 3927 MainMenuUI_Create(); |
3928 pGame->pStru6Instance->LoadAnimations(); | |
3929 | |
3930 for (uint i = 0; i < 7; ++i) | |
3931 { | |
2151 | 3932 char container_name[64]; |
3933 sprintf(container_name, "HDWTR%03u", i); | |
3934 pRenderer->pHDWaterBitmapIDs[i] = pBitmaps_LOD->LoadTexture(container_name); | |
0 | 3935 } |
3936 | |
3937 pNPCStats = new NPCStats; | |
110 | 3938 memset(pNPCStats->pNPCData, 0, 0x94BCu); |
0 | 3939 pNPCStats->Initialize(); |
3940 | |
3941 Initialize_GlobalEVT(); | |
762 | 3942 pBitmaps_LOD->_inlined_sub0(); |
3943 pSprites_LOD->_inlined_sub0(); | |
0 | 3944 pPaletteManager->LockAll(); |
3945 | |
3946 _mkdir("Saves"); | |
3947 for (uint i = 0; i < 5; ++i) | |
3948 for (uint j = 0; j < 6; ++j) | |
3949 { | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
3950 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
|
3951 remove(pTmpBuf.data()); |
0 | 3952 } |
3953 | |
3954 Initialize_GamesLOD_NewLOD(); | |
1051 | 3955 _576E2C_current_minimap_zoom = 512; |
0 | 3956 dword_576E28 = 9; |
3957 } | |
3958 | |
522 | 3959 void IntegrityTest() |
3960 { | |
1869
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3961 static_assert(sizeof(MovieHeader) == 44, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3962 static_assert(sizeof(SoundDesc_mm6) == 112, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3963 static_assert(sizeof(SoundDesc) == 120, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3964 static_assert(sizeof(OverlayDesc) == 8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3965 static_assert(sizeof(ChestDesc) == 36, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3966 static_assert(sizeof(ObjectDesc_mm6) == 52, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3967 static_assert(sizeof(ObjectDesc) == 56, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3968 static_assert(sizeof(DecorationDesc) == 84, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3969 static_assert(sizeof(IconFrame) == 32, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3970 static_assert(sizeof(PlayerFrame) == 10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3971 static_assert(sizeof(TextureFrame) == 20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3972 static_assert(sizeof(SpriteFrame) == 60, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3973 static_assert(sizeof(RenderVertexSoft) == 0x30, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3974 static_assert(sizeof(RenderBillboard) == 0x34, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3975 static_assert(sizeof(Texture) == 0x48, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3976 static_assert(sizeof(RGBTexture) == 0x28, "Wrong type size"); |
2154 | 3977 //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
|
3978 static_assert(sizeof(AudioPlayer) == 0xC84, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3979 static_assert(sizeof(SoundDesc) == 0x78, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3980 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
|
3981 //static_assert(sizeof(VideoPlayer) == 0x108 + 4, "Wrong type size"); |
1869
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3982 static_assert(sizeof(MovieHeader) == 0x2C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3983 static_assert(sizeof(DecorationDesc) == 0x54, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3984 static_assert(sizeof(ObjectDesc) == 0x38, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3985 static_assert(sizeof(OverlayDesc) == 0x8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3986 static_assert(sizeof(ChestDesc) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3987 static_assert(sizeof(TileDesc) == 0x1A, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3988 static_assert(sizeof(MonsterDesc_mm6) == 148, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3989 static_assert(sizeof(MonsterDesc) == 152, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3990 static_assert(sizeof(Timer) == 0x28, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3991 static_assert(sizeof(OtherOverlay) == 0x14, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3992 static_assert(sizeof(ItemGen) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3993 static_assert(sizeof(SpriteObject) == 0x70, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3994 static_assert(sizeof(ItemDesc) == 0x30, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3995 static_assert(sizeof(ItemsTable) == 0x117A0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3996 static_assert(sizeof(Chest) == 0x14CC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3997 static_assert(sizeof(MapInfo) == 0x44, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3998 static_assert(sizeof(SpellInfo) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
3999 static_assert(sizeof(SpellData) == 0x14, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4000 static_assert(sizeof(SpellBuff) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4001 static_assert(sizeof(AIDirection) == 0x1C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4002 static_assert(sizeof(ActorJob) == 0xC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4003 static_assert(sizeof(Actor) == 0x344, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4004 static_assert(sizeof(LevelDecoration) == 0x20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4005 static_assert(sizeof(KeyboardActionMapping) == 0x20C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4006 static_assert(sizeof(UIAnimation) == 0xD, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4007 static_assert(sizeof(SpawnPointMM7) == 0x18, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4008 static_assert(sizeof(ODMFace) == 0x134, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4009 static_assert(sizeof(BSPNode) == 0x8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4010 static_assert(sizeof(BSPModel) == 0xBC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4011 static_assert(sizeof(OutdoorLocation) == 0x1C28C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4012 static_assert(sizeof(BLVFace) == 0x60, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4013 static_assert(sizeof(BLVFaceExtra) == 0x24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4014 static_assert(sizeof(BLVSector) == 0x74, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4015 static_assert(sizeof(BLVLightMM7) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4016 static_assert(sizeof(BLVDoor) == 0x50, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4017 static_assert(sizeof(IndoorLocation) == 0x690, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4018 //static_assert(sizeof(ODMRenderParams) == 0x74, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4019 static_assert(sizeof(Mouse) == 0x114, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4020 static_assert(sizeof(Particle_sw) == 0x68, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4021 static_assert(sizeof(Particle) == 0x68, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4022 static_assert(sizeof(ParticleEngine) == 0xE430, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4023 static_assert(sizeof(Lightmap) == 0xC1C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4024 static_assert(sizeof(LightmapBuilder) == 0x3CBC38, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4025 static_assert(sizeof(Vis_SelectionList) == 0x2008, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4026 static_assert(sizeof(Vis) == 0x20D0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4027 static_assert(sizeof(PlayerBuffAnim) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4028 static_assert(sizeof(ProjectileAnim) == 0x1C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4029 static_assert(sizeof(stru6) == 0x5F8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4030 static_assert(sizeof(IndoorCameraD3D_Vec3) == 0x10, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4031 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
|
4032 //static_assert(sizeof(IndoorCameraD3D) == 0x1A1384, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4033 static_assert(sizeof(StationaryLight) == 0xC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4034 static_assert(sizeof(LightsStack_StationaryLight_) == 0x12C8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4035 static_assert(sizeof(MobileLight) == 0x12, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4036 static_assert(sizeof(LightsStack_MobileLight_) == 0x1C28, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4037 static_assert(sizeof(Game) == 0xE78, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4038 static_assert(sizeof(stru141_actor_collision_object) == 0xA8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4039 static_assert(sizeof(ActionQueue) == 0x7C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4040 static_assert(sizeof(NPCData) == 0x4C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4041 static_assert(sizeof(NPCStats) == 0x17FFC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4042 static_assert(sizeof(BspRenderer) == 0x53740, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4043 static_assert(sizeof(PaletteManager) == 0x267AF0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4044 static_assert(sizeof(ViewingParams) == 0x26C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4045 //static_assert(sizeof(IndoorCamera) == 0x50, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4046 static_assert(sizeof(Bloodsplat) == 0x28, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4047 static_assert(sizeof(BloodsplatContainer) == 0xA0C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4048 static_assert(sizeof(TrailParticle) == 0x18, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4049 static_assert(sizeof(EventIndex) == 0xC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4050 static_assert(sizeof(_2devent) == 0x34, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4051 static_assert(sizeof(stru176) == 0x20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4052 static_assert(sizeof(SavegameHeader) == 0x64, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4053 static_assert(sizeof(SavegameList) == 0x3138, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4054 static_assert(sizeof(StorylineText) == 0x160, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4055 static_assert(sizeof(FactionTable) == 0x1EF1, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4056 static_assert(sizeof(Decal) == 0xC20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4057 static_assert(sizeof(DecalBuilder) == 0x30C038, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4058 static_assert(sizeof(MonsterInfo) == 0x58, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4059 static_assert(sizeof(MonsterStats) == 0x5BA0, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4060 static_assert(sizeof(RenderD3D) == 0x148, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4061 // static_assert(sizeof(Render) == 0x129844, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4062 static_assert(sizeof(Player) == 0x1B3C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4063 static_assert(sizeof(PartyTimeStruct) == 0x678, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4064 static_assert(sizeof(Party) == 0x16238, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4065 static_assert(sizeof(GUIButton) == 0xBC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4066 static_assert(sizeof(GUIWindow) == 0x54, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4067 static_assert(sizeof(GUIProgressBar) == 0x1B8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4068 static_assert(sizeof(GUIFont) == 0x1020, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4069 // static_assert(sizeof(stru262_TurnBased) == 0x40, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4070 static_assert(sizeof(ArcomageGame) == 0xFB, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4071 static_assert(sizeof(CastSpellInfo) == 0x14, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4072 static_assert(sizeof(ArcomageCard) == 0x6C, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4073 static_assert(sizeof(stru320) == 0x3FC, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4074 static_assert(sizeof(TravelInfo) == 0x20, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4075 static_assert(sizeof(stru336) == 0x798, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4076 static_assert(sizeof(Vec3_short_) == 6, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4077 static_assert(sizeof(BLVFace) == 96, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4078 static_assert(sizeof(BLVFaceExtra) == 36, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4079 static_assert(sizeof(BLVSector) == 116, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4080 static_assert(sizeof(LevelDecoration) == 32, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4081 static_assert(sizeof(BLVLightMM7) == 16, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4082 static_assert(sizeof(BSPNode) == 8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4083 static_assert(sizeof(SpawnPointMM7) == 24, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4084 static_assert(sizeof(DDM_DLV_Header) == 40, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4085 static_assert(sizeof(Actor) == 836, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4086 static_assert(sizeof(SpriteObject) == 112, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4087 static_assert(sizeof(Chest) == 5324, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4088 static_assert(sizeof(stru123) == 0xC8, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4089 static_assert(sizeof(BLVMapOutline) == 12, "Wrong type size"); |
bc7a6ee34316
IntegrityTest size tests changed to static_asserts
Grumpy7
parents:
1861
diff
changeset
|
4090 static_assert(sizeof(LODSprite) == 0x28, "Wrong type size"); |
522 | 4091 } |
4092 | |
168 | 4093 bool new_sky = false; |
1765 | 4094 bool new_draw_object_dist = true; |
2128 | 4095 bool change_seasons = false; |
894 | 4096 bool all_magic = true; |
1511 | 4097 bool wizard_eye = false; |
1837 | 4098 bool debug_information = false; |
4099 bool show_picked_face = false; | |
1507 | 4100 bool draw_debug_line = false; |
2173 | 4101 bool new_speed = true; |
2043
2ccf638342d6
int max_flight_height and GetCeilingHeight function
Ritor1
parents:
2042
diff
changeset
|
4102 int max_flight_height = 4000; |
2034 | 4103 |
2037
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
2035
diff
changeset
|
4104 |
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
2035
diff
changeset
|
4105 |
7a9477135943
Renamed Math.h -> OurMath.h (file resolution was sometimes ambiguous)
Nomad
parents:
2035
diff
changeset
|
4106 |
0 | 4107 //----- (00462C94) -------------------------------------------------------- |
4108 bool MM_Main(const wchar_t *pCmdLine) | |
4109 { | |
522 | 4110 IntegrityTest(); |
1706 | 4111 |
246 | 4112 char test[1024]; |
522 | 4113 sprintfex(test, "^Pi[%s]: çíàõàð^R[ü;êà;]", "Çîëòàí"); |
4114 | |
2052 | 4115 lua = new LuaVM; |
4116 lua->Initialize(); | |
2031 | 4117 |
1052 | 4118 bool bNoMargareth = false; |
0 | 4119 if (pCmdLine && *pCmdLine) |
4120 { | |
2061 | 4121 //if (wcsstr(pCmdLine, L"-usedefs")) |
4122 // bDebugResouces = 1; | |
0 | 4123 if (wcsstr(pCmdLine, L"-window")) |
2061 | 4124 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_RUN_IN_WIDOW; |
0 | 4125 |
4126 if (wcsstr(pCmdLine, L"-nointro")) | |
4127 bNoIntro = true;//dword_6BE364_game_settings_1 |= 4; | |
4128 if (wcsstr(pCmdLine, L"-nologo")) | |
4129 bNoLogo = true;//dword_6BE364_game_settings_1 |= 8; | |
4130 if (wcsstr(pCmdLine, L"-nosound")) | |
4131 bNoSound = true; //dword_6BE364_game_settings_1 |= 0x10; | |
4132 | |
4133 bWalkSound = ReadWindowsRegistryInt("WalkSound", 1) != 0; | |
4134 if (wcsstr(pCmdLine, L"-nowalksound")) | |
4135 bWalkSound = false;//dword_6BE364_game_settings_1 |= 0x20; | |
256 | 4136 if (wcsstr(pCmdLine, L"-novideo")) |
0 | 4137 { |
2061 | 4138 dword_6BE364_game_settings_1 |= GAME_SETTINGS_NO_HOUSE_ANIM; |
0 | 4139 bNoVideo = true; |
4140 } | |
4141 if (wcsstr(pCmdLine, L"-nocd")) | |
4142 bNoCD = true; | |
168 | 4143 if (wcsstr(pCmdLine, L"-new_sky")) |
4144 new_sky = true; | |
1052 | 4145 if (wcsstr(pCmdLine, L"-nomarg")) |
4146 bNoMargareth = true; | |
0 | 4147 } |
4148 | |
4149 | |
731 | 4150 /*v8 = _4AC1C9_get_cpu_speed(0, (Vec4_int_ *)a2); |
0 | 4151 Rect.left = *(int *)v8; |
4152 Rect.top = *(int *)(v8 + 4); | |
4153 Rect.right = *(int *)(v8 + 8); | |
4154 Rect.bottom = *(int *)(v8 + 12); | |
731 | 4155 uCPUSpeed = Rect.bottom;*/ |
4156 uCPUSpeed = 2048; // about 2GHz | |
4 | 4157 |
2191 | 4158 constructors(); |
4 | 4159 |
1655 | 4160 if (!MM7_Initialize(640, 480)) |
734 | 4161 { |
4162 Log::Warning(L"MM init: failed"); | |
4163 pGame->Deinitialize(); | |
4164 return 1; | |
4165 } | |
0 | 4166 |
4167 pEventTimer->Pause(); | |
1397 | 4168 |
373 | 4169 SetUserInterface(PartyAlignment_Neutral, false); |
0 | 4170 ShowIntroVideo_and_LoadingScreen(); |
4171 WriteWindowsRegistryInt("Ran once", 1); | |
2061 | 4172 dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000; |
0 | 4173 pGame->InitializeGammaController(); |
4174 SecondaryInitialization(); | |
1541 | 4175 pRenderer->SetRasterClipRect(0, 0, 639, 479); |
0 | 4176 FinalInitialization(); |
4177 | |
4178 Log::Warning(L"MM: entering main loop"); | |
4179 while ( 1 ) | |
4180 { | |
1980 | 4181 MainMenuWindow* main_menu_window = MainMenuWindow::Create(); |
1815 | 4182 window->AddControl(main_menu_window); |
4183 | |
165 | 4184 MainMenu_Loop(); |
982 | 4185 uGameState = GAME_STATE_PLAYING; |
0 | 4186 while ( 1 ) |
4187 { | |
2098 | 4188 if (uGameState == GAME_FINISHED || GetCurrentMenuID() == MENU_EXIT_GAME) |
982 | 4189 { |
4190 pGame->Deinitialize(); | |
4191 return true; | |
4192 } | |
4193 | |
165 | 4194 if (GetCurrentMenuID() == MENU_NEWGAME) |
0 | 4195 { |
4196 if ( pAudioPlayer->hAILRedbook ) | |
165 | 4197 AIL_redbook_stop(pAudioPlayer->hAILRedbook); |
4198 pParty->Reset(); | |
783 | 4199 pOtherOverlayList->Reset(); |
4200 | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4201 strcpy(pCurrentMapName, pStartingMapName); |
165 | 4202 pParty->CreateDefaultParty(0); |
0 | 4203 PlayerCreationUI_Initialize(); |
165 | 4204 if ( PlayerCreationUI_Loop() ) |
0 | 4205 { |
4206 DeleteCCharFont(); | |
165 | 4207 break; |
0 | 4208 } |
4209 DeleteCCharFont(); | |
4210 bFlashQuestBook = true; | |
1397 | 4211 PlayFullscreenMovie(MOVIE_Emerald); |
4212 //pGame->pCShow->PlayMovie(MOVIE_Emerald, 0); | |
837 | 4213 SaveNewGame(); |
1052 | 4214 |
4215 if (bNoMargareth) | |
4216 _449B7E_toggle_bit(pParty->_quest_bits, PARTY_QUEST_EMERALD_MARGARETH_OFF, 1); | |
165 | 4217 pGame->Loop(); |
982 | 4218 |
4219 if (uGameState == GAME_STATE_NEWGAME_OUT_GAMEMENU) | |
165 | 4220 { |
4221 SetCurrentMenuID(MENU_NEWGAME); | |
982 | 4222 uGameState = GAME_STATE_PLAYING; |
165 | 4223 continue; |
4224 } | |
982 | 4225 else if (uGameState == GAME_STATE_GAME_QUITTING_TO_MAIN_MENU) |
4226 break; | |
4227 | |
4228 assert(false && "Invalid game state"); | |
165 | 4229 } |
4230 if (GetCurrentMenuID() == MENU_CREDITS) | |
0 | 4231 { |
4232 if ( pAudioPlayer->hAILRedbook ) | |
165 | 4233 AIL_redbook_stop(pAudioPlayer->hAILRedbook); |
1033 | 4234 MainMenuUI_Credits_Loop(); |
0 | 4235 break; |
4236 } | |
961 | 4237 if (GetCurrentMenuID() == MENU_5 || GetCurrentMenuID() == MENU_LoadingProcInMainMenu) |
2 | 4238 { |
982 | 4239 uGameState = GAME_STATE_PLAYING; |
1416 | 4240 pGame->Loop(); |
2 | 4241 } |
4 | 4242 else |
961 | 4243 { |
1458 | 4244 if (GetCurrentMenuID() == MENU_DebugBLVLevel) |
1416 | 4245 { |
4246 pMouse->Activate(0); | |
4247 | |
4248 pParty->Reset(); | |
4249 pParty->CreateDefaultParty(1); | |
1545 | 4250 |
4251 __debugbreak(); | |
4252 /*extern void CreateDefaultBLVLevel(); | |
1458 | 4253 CreateDefaultBLVLevel(); |
4254 | |
1545 | 4255 OPENFILENAMEA ofn; |
1416 | 4256 if ( !GetOpenFileNameA((LPOPENFILENAMEA)&ofn) ) |
4257 { | |
4258 pMouse->Activate(1); | |
4259 break; | |
4260 } | |
4261 _chdir("..\\"); | |
1545 | 4262 strcpy(pCurrentMapName, ofn.lpstrFileTitle);*/ |
1416 | 4263 pMouse->Activate(1); |
4264 pGame->Loop(); | |
4265 } | |
492 | 4266 } |
1214
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1205
diff
changeset
|
4267 if ( uGameState == GAME_STATE_LOADING_GAME ) |
961 | 4268 { |
982 | 4269 SetCurrentMenuID(MENU_5); |
4270 uGameState = GAME_STATE_PLAYING; | |
0 | 4271 continue; |
961 | 4272 } |
165 | 4273 if ( uGameState == GAME_STATE_NEWGAME_OUT_GAMEMENU ) |
101 | 4274 { |
4275 SetCurrentMenuID(MENU_NEWGAME); | |
982 | 4276 uGameState = GAME_STATE_PLAYING; |
0 | 4277 continue; |
101 | 4278 } |
907 | 4279 if ( uGameState == GAME_STATE_GAME_QUITTING_TO_MAIN_MENU)// from the loaded game |
4280 { | |
0 | 4281 pAudioPlayer->StopChannels(-1, -1); |
982 | 4282 uGameState = GAME_STATE_PLAYING; |
0 | 4283 break; |
907 | 4284 } |
0 | 4285 } |
4286 if (!bNoSound && pAudioPlayer->hAILRedbook) | |
4287 { | |
328 | 4288 pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); |
0 | 4289 AIL_redbook_stop(pAudioPlayer->hAILRedbook); |
1541 | 4290 unsigned int startms, end_ms; |
0 | 4291 AIL_redbook_track_info(pAudioPlayer->hAILRedbook, 0xE, &startms, &end_ms); |
4292 AIL_redbook_play(pAudioPlayer->hAILRedbook, startms + 1, end_ms); | |
4293 } | |
4294 } | |
2050 | 4295 //lua_close(L); |
0 | 4296 pGame->Deinitialize(); |
734 | 4297 return 1; |
0 | 4298 } |
4299 | |
4300 //----- (004637E0) -------------------------------------------------------- | |
1458 | 4301 char sub_4637E0_is_there_popup_onscreen() |
0 | 4302 { |
4303 return dword_507BF0_is_there_popup_onscreen == 1; | |
4304 } | |
4305 // 507BF0: using guessed type int dword_507BF0_is_there_popup_onscreen; | |
4306 | |
4307 //----- (00466082) -------------------------------------------------------- | |
4308 void MM6_Initialize(const wchar_t *pIniFilename) | |
4309 { | |
4310 //int v0; // eax@1 | |
2151 | 4311 //UINT v1; // eax@18 |
0 | 4312 size_t v2; // eax@31 |
4313 size_t v3; // ebx@32 | |
4314 size_t v4; // edi@36 | |
4315 //char v5[120]; // [sp+Ch] [bp-17Ch]@1 | |
4316 //char String[120]; // [sp+84h] [bp-104h]@32 | |
4317 char pDefaultGroundTexture[16]; // [sp+FCh] [bp-8Ch]@32 | |
4318 //char pIniFilename[120]; // [sp+10Ch] [bp-7Ch]@1 | |
4319 unsigned int v9; // [sp+184h] [bp-4h]@28 | |
4320 | |
4321 //_getcwd(v5, 120); | |
4322 //sprintfex(pIniFilename, "%s\\mm6.ini", v5); | |
4323 viewparams = new ViewingParams; | |
819 | 4324 game_viewport_x = viewparams->uScreen_topL_X = GetPrivateProfileIntW(L"screen", L"vx1", 8, pIniFilename); |
4325 game_viewport_y = viewparams->uScreen_topL_Y = GetPrivateProfileIntW(L"screen", L"vy1", 8, pIniFilename); | |
4326 game_viewport_z = viewparams->uScreen_BttmR_X = GetPrivateProfileIntW(L"screen", L"vx2", 468, pIniFilename); | |
4327 game_viewport_w = viewparams->uScreen_BttmR_Y = GetPrivateProfileIntW(L"screen", L"vy2", 351, pIniFilename); | |
4328 game_viewport_width = game_viewport_z - game_viewport_x; | |
4329 game_viewport_height = game_viewport_w - game_viewport_y + 1; | |
0 | 4330 |
4331 | |
4332 pAudioPlayer = new AudioPlayer; | |
4333 pAudioPlayer->uMixerChannels = GetPrivateProfileIntW(L"settings", L"mixerchannels", 16, pIniFilename); | |
4334 if ( pAudioPlayer->uMixerChannels > 16 ) | |
4335 pAudioPlayer->uMixerChannels = 16; | |
4336 | |
4337 | |
4338 if (GetPrivateProfileIntW(L"debug", L"nomonster", 0, pIniFilename)) | |
2061 | 4339 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_ACTORS; |
2151 | 4340 if (ReadWindowsRegistryInt("startinwindow", 0)) |
2061 | 4341 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_RUN_IN_WIDOW; |
0 | 4342 if (GetPrivateProfileIntW(L"debug", L"showFR", 0, pIniFilename)) |
2061 | 4343 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_0002_SHOW_FR; |
0 | 4344 if (GetPrivateProfileIntW(L"debug", L"nodamage", 0, pIniFilename)) |
2061 | 4345 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_DAMAGE; |
0 | 4346 if (GetPrivateProfileIntW(L"debug", L"nodecoration", 0, pIniFilename)) |
2061 | 4347 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_DECORATIONS; |
0 | 4348 |
4349 wchar_t pStartingMapNameW[1024]; | |
4350 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
|
4351 sprintf(pStartingMapName, "%S", pStartingMapNameW); |
0 | 4352 |
4353 v9 = 0; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4354 if ( strlen(pStartingMapName) ) |
0 | 4355 { |
4356 do | |
4357 { | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4358 if ( pStartingMapName[v9] == ' ' ) |
0 | 4359 pStartingMapName[v9] = 0; |
4360 ++v9; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4361 v2 = strlen(pStartingMapName); |
0 | 4362 } |
4363 while ( v9 < v2 ); | |
4364 } | |
4365 | |
1637 | 4366 pODMRenderParams = new ODMRenderParams; |
4367 pODMRenderParams->outdoor_no_mist = GetPrivateProfileIntW(L"debug", L"noMist", 0, pIniFilename); | |
4368 pODMRenderParams->bNoSky = GetPrivateProfileIntW(L"outdoor", L"nosky", 0, pIniFilename); | |
4369 pODMRenderParams->bDoNotRenderDecorations = GetPrivateProfileIntW(L"render", L"nodecorations", 0, pIniFilename); | |
4370 pODMRenderParams->outdoor_no_wavy_water = GetPrivateProfileIntW(L"outdoor", L"nowavywater", 0, pIniFilename); | |
0 | 4371 outdoor_grid_band_1 = GetPrivateProfileIntW(L"outdoor", L"gridband1", 10, pIniFilename); |
4372 outdoor_grid_band_2 = GetPrivateProfileIntW(L"outdoor", L"gridband2", 15, pIniFilename); | |
4373 outdoor_grid_band_3 = GetPrivateProfileIntW(L"outdoor", L"gridband3", 25, pIniFilename); | |
1637 | 4374 pODMRenderParams->terrain_gamma = GetPrivateProfileIntW(L"outdoor", L"ter_gamma", 0, pIniFilename); |
4375 pODMRenderParams->building_gamme = GetPrivateProfileIntW(L"outdoor", L"bld_gamma", 0, pIniFilename); | |
4376 pODMRenderParams->shading_dist_shade = GetPrivateProfileIntW(L"shading", L"dist_shade", 2048, pIniFilename); | |
4377 pODMRenderParams->shading_dist_shademist = GetPrivateProfileIntW(L"shading", L"dist_shademist", 4096, pIniFilename); | |
1765 | 4378 |
4379 int dist = 0x2000; | |
4380 extern bool new_draw_object_dist; | |
4381 if ( new_draw_object_dist ) | |
4382 dist = 0x6000; | |
4383 pODMRenderParams->shading_dist_mist = GetPrivateProfileIntW(L"shading", L"dist_mist", dist, pIniFilename); | |
0 | 4384 |
4385 wchar_t pDefaultSkyTextureW[1024]; | |
4386 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
|
4387 sprintf(pDefaultSkyTexture.data(), "%S", pDefaultSkyTextureW); |
0 | 4388 |
4389 wchar_t pDefaultGroundTextureW[1024]; | |
4390 GetPrivateProfileStringW(L"textures", L"default", L"dirt", pDefaultGroundTextureW, 0x10u, pIniFilename); | |
4391 sprintf(pDefaultGroundTexture, "%S", pDefaultGroundTextureW); | |
4392 | |
4393 wchar_t pFloat[1024]; | |
4394 GetPrivateProfileStringW(L"debug", L"recmod1", L"1.0", pFloat, 0x10u, pIniFilename); | |
4395 swscanf(pFloat, L"%f", &flt_6BE3A4_debug_recmod1); | |
4396 | |
4397 GetPrivateProfileStringW(L"debug", L"recmod2", L"1.0", pFloat, 0x10u, pIniFilename); | |
4398 swscanf(pFloat, L"%f", &flt_6BE3A8_debug_recmod2); | |
4399 | |
4400 flt_6BE3AC_debug_recmod1_x_1_6 = flt_6BE3A4_debug_recmod1 * 1.666666666666667; | |
4401 | |
4402 v3 = 0; | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4403 if ( strlen(pDefaultSkyTexture.data()) ) |
0 | 4404 { |
4405 do | |
4406 { | |
4407 if ( pDefaultSkyTexture[v3] == ' ' ) | |
4408 pDefaultSkyTexture[v3] = 0; | |
4409 ++v3; | |
4410 } | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4411 while ( v3 < strlen(pDefaultSkyTexture.data()) ); |
0 | 4412 } |
4413 v4 = 0; | |
4414 if ( strlen(pDefaultGroundTexture) ) | |
4415 { | |
4416 do | |
4417 { | |
4418 if ( pDefaultGroundTexture[v4] == ' ' ) | |
4419 pDefaultGroundTexture[v4] = 0; | |
4420 ++v4; | |
4421 } | |
4422 while ( v4 < strlen(pDefaultGroundTexture) ); | |
4423 } | |
4424 | |
4425 MM7Initialization(); | |
4426 } | |
4427 | |
4428 //----- (004666D5) -------------------------------------------------------- | |
2151 | 4429 void MM7Initialization() |
0 | 4430 { |
4431 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) | |
4432 { | |
2151 | 4433 /*if (byte_6BE388_graphicsmode == 0) |
0 | 4434 { |
4435 outdoor_grid_band_1 = 10; | |
4436 outdoor_grid_band_2 = 15; | |
4437 outdoor_grid_band_3 = 20; | |
1637 | 4438 pODMRenderParams->shading_dist_mist = 8192; |
4439 pODMRenderParams->bNoSky = false; | |
0 | 4440 LOBYTE(viewparams->field_20) = 0; |
2151 | 4441 }*/ |
1637 | 4442 pODMRenderParams->shading_dist_shade = 2048; |
4443 pODMRenderParams->terrain_gamma = 0; | |
4444 pODMRenderParams->building_gamme = 0; | |
4445 pODMRenderParams->shading_dist_shademist = 4096; | |
4446 pODMRenderParams->outdoor_no_wavy_water = 0; | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1409
diff
changeset
|
4447 //_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
|
4448 { |
1637 | 4449 pODMRenderParams->outdoor_grid_band_3 = outdoor_grid_band_3; |
4450 pODMRenderParams->uPickDepth = outdoor_grid_band_3 * 512; | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1409
diff
changeset
|
4451 } |
0 | 4452 } |
4453 else | |
4454 { | |
4455 LOBYTE(viewparams->field_20) = 0; | |
4456 } | |
2101 | 4457 pParty->uFlags |= 2; |
692 | 4458 viewparams->uSomeY = viewparams->uScreen_topL_Y; |
4459 viewparams->uSomeX = viewparams->uScreen_topL_X; | |
4460 viewparams->uSomeZ = viewparams->uScreen_BttmR_X; | |
4461 viewparams->uSomeW = viewparams->uScreen_BttmR_Y; | |
4462 | |
4463 pViewport->SetScreen(viewparams->uScreen_topL_X, viewparams->uScreen_topL_Y, viewparams->uScreen_BttmR_X, viewparams->uScreen_BttmR_Y); | |
0 | 4464 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) |
1637 | 4465 pODMRenderParams->Initialize(); |
0 | 4466 } |
4467 | |
4468 //----- (00466C40) -------------------------------------------------------- | |
4469 const wchar_t *MENU_STATE_to_string(MENU_STATE m) | |
4470 { | |
4471 switch (m) | |
4472 { | |
982 | 4473 case -1: return L"-1"; |
4474 case MENU_MAIN: return L"MENU_MAIN"; | |
4475 case MENU_NEWGAME: return L"MENU_NEWGAME"; | |
4476 case MENU_CREDITS: return L"MENU_CREDITS"; | |
4477 case MENU_SAVELOAD: return L"MENU_SAVELOAD"; | |
4478 case MENU_EXIT_GAME: return L"MENU_EXIT_GAME"; | |
4479 case MENU_5: return L"MENU_5"; | |
4480 case MENU_CREATEPARTY: return L"MENU_CREATEPARTY"; | |
165 | 4481 case MENU_NAMEPANELESC: return L"MENU_NAMEPANELESC"; |
982 | 4482 case MENU_CREDITSPROC: return L"MENU_CREDITSPROC"; |
961 | 4483 case MENU_LoadingProcInMainMenu: return L"MENU_LoadingProcInMainMenu"; |
1458 | 4484 case MENU_DebugBLVLevel: return L"MENU_DebugBLVLevel"; |
165 | 4485 case MENU_CREDITSCLOSE: return L"MENU_CREDITSCLOSE"; |
982 | 4486 default: return L"unk"; |
0 | 4487 }; |
4488 }; | |
4489 void SetCurrentMenuID(MENU_STATE uMenu) | |
4490 { | |
2006 | 4491 sCurrentMenuID = uMenu; |
0 | 4492 |
4493 Log::Warning(L"CurrentMenu = %s", MENU_STATE_to_string(uMenu)); | |
4494 } | |
4495 | |
4496 //----- (00466CA0) -------------------------------------------------------- | |
4497 MENU_STATE GetCurrentMenuID() | |
4498 { | |
2006 | 4499 return sCurrentMenuID; |
0 | 4500 } |
4501 | |
4502 | |
4503 //----- (0046A89E) -------------------------------------------------------- | |
1459 | 4504 int __fastcall _46A89E_immolation_effect(int a1, int a2, int a3) |
0 | 4505 { |
4506 int v5; // ebx@3 | |
4507 int v6; // eax@3 | |
4508 int v7; // ebx@3 | |
4509 unsigned int v8; // ecx@3 | |
4510 int v9; // edx@4 | |
4511 unsigned int v10; // edx@6 | |
4512 unsigned int v11; // edx@8 | |
4513 int v13; // ecx@15 | |
4514 int v17; // [sp+Ch] [bp-10h]@3 | |
4515 int v18; // [sp+10h] [bp-Ch]@3 | |
4516 int v19; // [sp+18h] [bp-4h]@1 | |
4517 | |
4518 v19 = 0; | |
2101 | 4519 for ( uint i = 0; i < (signed int)uNumActors; ++i ) |
0 | 4520 { |
2101 | 4521 v5 = abs(pActors[i].vPosition.x - pParty->vPosition.x); |
4522 v17 = abs(pActors[i].vPosition.y - pParty->vPosition.y); | |
4523 v18 = abs(pActors[i].vPosition.z - pParty->vPosition.z); | |
4524 v6 = v5; | |
4525 v7 = v17; | |
4526 v8 = v18; | |
4527 if ( v6 < v17 ) | |
0 | 4528 { |
2101 | 4529 v9 = v6; |
4530 v6 = v17; | |
4531 v7 = v9; | |
4532 } | |
4533 if ( v6 < v18 ) | |
4534 { | |
4535 v10 = v6; | |
4536 v6 = v18; | |
4537 v8 = v10; | |
4538 } | |
4539 if ( v7 < (signed int)v8 ) | |
4540 { | |
4541 v11 = v8; | |
4542 v8 = v7; | |
4543 v7 = v11; | |
4544 } | |
4545 if ( (signed int)(((unsigned int)(11 * v7) >> 5) + (v8 >> 2) + v6) <= a3 ) | |
4546 { | |
4547 if ( pActors[i].uAIState != Dead && pActors[i].uAIState != Dying && pActors[i].uAIState != Removed | |
4548 && pActors[i].uAIState != Disabled && pActors[i].uAIState != Summoned ) | |
0 | 4549 { |
2101 | 4550 __debugbreak();// *(int *)(a1 + 4 * v13) = i; ÷òî ýòî òàêîå? |
4551 v13 = v19++; | |
4552 *(int *)(a1 + 4 * v13) = i; | |
4553 if ( v19 >= a2 - 1 ) | |
4554 break; | |
0 | 4555 } |
4556 } | |
4557 } | |
4558 return v19; | |
4559 } | |
4560 | |
4561 //----- (0046BDA8) -------------------------------------------------------- | |
1458 | 4562 unsigned int GetGravityStrength() |
0 | 4563 { |
4564 int v0; // eax@1 | |
4565 | |
4566 v0 = ~LOBYTE(pGame->uFlags2) & 8; | |
4567 LOBYTE(v0) = v0 | 2; | |
4568 return (unsigned int)v0 >> 1; | |
4569 } | |
4570 | |
4571 //----- (0046BDC0) -------------------------------------------------------- | |
1458 | 4572 void UpdateUserInput_and_MapSpecificStuff() |
0 | 4573 { |
2061 | 4574 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME) |
0 | 4575 { |
2061 | 4576 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME; |
4577 return; | |
0 | 4578 } |
2061 | 4579 |
630 | 4580 if (uCurrentlyLoadedLevelType == LEVEL_Indoor) |
0 | 4581 BLV_UpdateUserInputAndOther(); |
630 | 4582 else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) |
0 | 4583 ODM_UpdateUserInputAndOther(); |
630 | 4584 |
783 | 4585 area_of_effect__damage_evaluate(); |
0 | 4586 } |
4587 | |
4588 //----- (0046BFFA) -------------------------------------------------------- | |
4589 bool __fastcall _46BFFA_check_object_intercept(unsigned int uLayingItemID, signed int a2) | |
4590 { | |
2101 | 4591 ObjectDesc *object; // ebx@1 |
0 | 4592 unsigned int v8; // eax@19 |
4593 signed int v10; // ebx@19 | |
4594 char *v11; // edx@20 | |
4595 unsigned __int16 v12; // ax@23 | |
4596 int v13; // eax@27 | |
4597 unsigned int v14; // ebx@33 | |
4598 int v16; // eax@36 | |
4599 unsigned int v17; // eax@37 | |
4600 __int16 v18; // di@37 | |
4601 signed int v19; // edx@37 | |
4602 unsigned __int8 v20; // sf@37 | |
4603 char *v21; // ecx@38 | |
4604 unsigned __int16 v22; // ax@41 | |
4605 unsigned int v23; // eax@46 | |
4606 signed int v24; // ebx@46 | |
4607 char *v25; // edx@47 | |
4608 int v26; // edx@54 | |
4609 int v27; // edx@55 | |
4610 int v28; // edx@56 | |
4611 int v29; // edx@57 | |
4612 unsigned __int16 v30; // ax@60 | |
4613 unsigned int v31; // ecx@60 | |
4614 int v32; // edi@60 | |
4615 unsigned int v33; // eax@65 | |
4616 signed int v34; // edx@65 | |
4617 char *v35; // ecx@66 | |
4618 unsigned __int16 v36; // ax@69 | |
4619 int v37; // ST14_4@72 | |
4620 int v38; // eax@72 | |
4621 int v39; // ST10_4@72 | |
4622 int v40; // ST0C_4@72 | |
4623 int v41; // edx@76 | |
4624 int v42; // edx@77 | |
4625 int v43; // edx@78 | |
4626 unsigned __int8 v44; // zf@79 | |
4627 int v45; // edx@79 | |
4628 unsigned __int16 v46; // ax@80 | |
4629 int v47; // eax@81 | |
4630 int v48; // edx@87 | |
4631 int v49; // edx@88 | |
4632 int v50; // edx@89 | |
4633 signed int v52; // ebx@93 | |
4634 char *v53; // edx@94 | |
4635 unsigned __int16 v54; // ax@98 | |
4636 unsigned int v55; // ecx@98 | |
4637 signed int v56; // ebx@98 | |
4638 char *v57; // edx@99 | |
4639 unsigned __int16 v58; // ax@102 | |
4640 unsigned __int16 v59; // ax@107 | |
4641 unsigned int v60; // ecx@107 | |
4642 signed int v61; // ebx@107 | |
4643 char *v62; // edx@108 | |
4644 unsigned __int16 v63; // ax@111 | |
4645 int v64; // ebx@114 | |
4646 signed int v65; // eax@114 | |
4647 unsigned int v66; // edi@123 | |
4648 unsigned __int16 v67; // ax@124 | |
4649 unsigned int v68; // ecx@124 | |
4650 signed int v69; // ebx@124 | |
4651 char *v70; // edx@125 | |
4652 unsigned __int16 v71; // ax@128 | |
4653 unsigned int v72; // ebx@131 | |
4654 int v78; // eax@133 | |
4655 char v79; // zf@139 | |
4656 unsigned int v80; // eax@140 | |
4657 signed int v81; // edx@140 | |
4658 char *v82; // ecx@141 | |
4659 unsigned __int16 v83; // ax@144 | |
4660 unsigned __int16 v84; // ax@151 | |
4661 unsigned int v85; // ecx@151 | |
4662 signed int v86; // ebx@151 | |
4663 char *v87; // edx@152 | |
4664 unsigned __int16 v88; // ax@155 | |
4665 unsigned int v89; // eax@158 | |
4666 int v90; // ST34_4@159 | |
4667 int v91; // eax@159 | |
4668 unsigned int v92; // eax@163 | |
4669 unsigned int v93; // eax@177 | |
4670 char *v94; // ecx@178 | |
4671 unsigned __int16 v95; // ax@181 | |
4672 unsigned __int16 v96; // ax@184 | |
4673 int v97; // eax@185 | |
4674 unsigned __int16 v98; // ax@191 | |
4675 char v100; // ST18_1@198 | |
4676 int v102; // eax@198 | |
4677 signed int v106; // eax@208 | |
4678 unsigned int v107; // edx@220 | |
4679 signed int v108; // ebx@225 | |
4680 unsigned int v109; // eax@234 | |
4681 signed int v110; // ebx@234 | |
4682 char *v111; // ecx@235 | |
4683 unsigned __int16 v112; // ax@238 | |
4684 unsigned __int16 v113; // si@241 | |
4685 int v114; // eax@242 | |
4686 int v115; // eax@245 | |
4687 unsigned __int16 v117; // ax@251 | |
4688 unsigned int v118; // ecx@251 | |
4689 signed int v119; // ebx@251 | |
4690 char *v120; // edx@252 | |
4691 unsigned __int16 v121; // ax@255 | |
4692 unsigned int v122; // eax@260 | |
4693 char *v123; // edx@261 | |
4694 int v124; // eax@267 | |
4695 int v125; // [sp-20h] [bp-4Ch]@28 | |
4696 char v132; // [sp-8h] [bp-34h]@131 | |
4697 char v134; // [sp-4h] [bp-30h]@131 | |
4698 signed int v135; // [sp-4h] [bp-30h]@217 | |
4699 int v136; // [sp+Ch] [bp-20h]@208 | |
4700 int v137; // [sp+10h] [bp-1Ch]@208 | |
4701 signed int v138; // [sp+14h] [bp-18h]@207 | |
4702 signed int v139; // [sp+18h] [bp-14h]@208 | |
4703 char *v140; // [sp+1Ch] [bp-10h]@61 | |
4704 signed int v141; // [sp+1Ch] [bp-10h]@117 | |
4705 unsigned int v142; // [sp+1Ch] [bp-10h]@158 | |
4706 signed int v143; // [sp+1Ch] [bp-10h]@172 | |
4707 char *v144; // [sp+1Ch] [bp-10h]@192 | |
4708 signed int v146; // [sp+20h] [bp-Ch]@60 | |
4709 int v147; // [sp+20h] [bp-Ch]@72 | |
4710 signed int v148; // [sp+20h] [bp-Ch]@158 | |
4711 unsigned __int16 v150; // [sp+20h] [bp-Ch]@208 | |
4712 signed int v152; // [sp+24h] [bp-8h]@208 | |
2101 | 4713 |
4714 //ïðèìåíåíèå: ôàåðáîëò â õðàìå ëóíû | |
4715 object = &pObjectList->pObjects[pSpriteObjects[uLayingItemID].uObjectDescID]; | |
4716 //v151 = PID_TYPE(a2); | |
848 | 4717 if ( PID_TYPE(a2) == OBJECT_Actor) |
4718 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4719 if ( PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Actor |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4720 && !pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].GetActorsRelation(&pActors[PID_ID(a2)]) ) |
0 | 4721 return 1; |
4722 } | |
4723 else | |
4724 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4725 if ( PID_TYPE(a2) == OBJECT_Player && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Player) |
0 | 4726 return 1; |
4727 } | |
4728 if ( pParty->bTurnBasedModeOn == 1 ) | |
4729 { | |
2101 | 4730 if ( pSpriteObjects[uLayingItemID].uAttributes & 4 ) |
0 | 4731 { |
1450 | 4732 --pTurnEngine->pending_actions; |
2101 | 4733 pSpriteObjects[uLayingItemID].uAttributes &= 0xFFFB; |
0 | 4734 } |
4735 } | |
2101 | 4736 if ( PID_TYPE(a2) == OBJECT_BModel && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) != OBJECT_Player) |
1280 | 4737 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4738 if (PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid) < 500) //bugfix PID_ID(v2->spell_caster_pid)==1000 |
2166 | 4739 pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].uAttributes |= 0x40000; |
1280 | 4740 } |
4741 | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4742 //v6 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4743 //v7 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4744 if ( pSpriteObjects[uLayingItemID].uType > 3060 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4745 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4746 if ( pSpriteObjects[uLayingItemID].uType > 6090 ) |
0 | 4747 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4748 if ( pSpriteObjects[uLayingItemID].uType > 8090 ) |
0 | 4749 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4750 if ( pSpriteObjects[uLayingItemID].uType == 9010 ) |
0 | 4751 goto LABEL_247; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4752 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 4753 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4754 if ( pSpriteObjects[uLayingItemID].uType != 9040 ) |
0 | 4755 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4756 if ( pSpriteObjects[uLayingItemID].uType != 9080 ) |
0 | 4757 return 0; |
2101 | 4758 v95 = 0; |
4759 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
4760 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 4761 { |
2101 | 4762 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
4763 v95 = v146; | |
0 | 4764 } |
2101 | 4765 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
4766 if ( !v95 ) | |
4767 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4768 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 4769 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
4770 v102 = 8 * uLayingItemID; | |
4771 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
4772 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4773 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4774 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4775 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
4776 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
4777 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
4778 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4779 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4780 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4781 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4782 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 4783 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4784 return 0; |
0 | 4785 } |
2101 | 4786 sub_43A97E(uLayingItemID, a2); |
4787 ++pSpriteObjects[uLayingItemID].uType; | |
4788 v95 = 0; | |
4789 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4790 { | |
4791 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4792 v95 = v52; | |
4793 } | |
4794 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4795 if ( !v95 ) | |
4796 SpriteObject::OnInteraction(uLayingItemID); | |
4797 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4798 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4799 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4800 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4801 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4802 if ( !v96 ) | |
4803 v97 = 0; | |
4804 else | |
4805 v97 = (signed __int16)v96 + 4; | |
4806 v124 = 8 * uLayingItemID; | |
4807 LOBYTE(v124) = v124 | 2; | |
4808 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4809 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4810 return 0; | |
0 | 4811 } |
4812 LABEL_172: | |
4813 v143 = 17030; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4814 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 4815 { |
4816 case 0x1798u: | |
4817 v143 = 15040; | |
4818 break; | |
4819 case 0xFAAu: | |
4820 v143 = 13010; | |
4821 break; | |
4822 case 0x2346u: | |
4823 v143 = 18030; | |
4824 break; | |
4825 } | |
4826 v138 = 1; | |
2101 | 4827 if ( PID_TYPE(a2) != OBJECT_Actor) |
0 | 4828 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4829 if ( pSpriteObjects[uLayingItemID].uType != 9030 || pSpriteObjects[uLayingItemID].spell_skill != 4 ) |
2101 | 4830 { |
4831 SpriteObject::OnInteraction(uLayingItemID); | |
4832 return 0; | |
4833 } | |
4834 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); | |
0 | 4835 LABEL_233: |
4836 if ( !v138 ) | |
4837 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4838 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 4839 v112 = 0; |
4840 for ( v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110 ) | |
0 | 4841 { |
2101 | 4842 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID ) |
4843 v112 = v110; | |
0 | 4844 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4845 pSpriteObjects[uLayingItemID].uObjectDescID = v112; |
0 | 4846 if ( !v112 ) |
2101 | 4847 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4848 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4849 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4850 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4851 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4852 v113 = pSpriteObjects[uLayingItemID].uSoundID; |
0 | 4853 if ( v113 ) |
4854 v114 = (signed __int16)v113 + 4; | |
4855 else | |
4856 v114 = 0; | |
2101 | 4857 v115 = 8 * uLayingItemID; |
4858 LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4859 v125 = v143 + 1; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4860 pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4861 return 0; |
0 | 4862 } |
2101 | 4863 SpriteObject::OnInteraction(uLayingItemID); |
0 | 4864 return 0; |
4865 } | |
2101 | 4866 v106 = a2; |
0 | 4867 v150 = 0; |
848 | 4868 v139 = PID_ID(v106); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4869 v137 = pSpriteObjects[uLayingItemID].spell_level; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4870 v152 = pSpriteObjects[uLayingItemID].spell_skill; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4871 v136 = pSpriteObjects[uLayingItemID].spell_id; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4872 if ( pSpriteObjects[uLayingItemID].uType == 9030 ) |
0 | 4873 { |
4874 v150 = 2; | |
4875 if ( v152 == 2 ) | |
4876 { | |
4877 v150 = 3; | |
4878 } | |
4879 else | |
4880 { | |
4881 if ( v152 >= 3 ) | |
4882 v150 = 4; | |
4883 } | |
2166 | 4884 pActors[v139].uAttributes |= 0x80000; |
0 | 4885 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4886 if ( pSpriteObjects[uLayingItemID].uType == 6040 ) |
0 | 4887 { |
4888 v135 = 7; | |
4889 } | |
4890 else | |
4891 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4892 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 4893 { |
4894 v135 = 9; | |
4895 } | |
4896 else | |
4897 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4898 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 4899 { |
4900 v107 = v136; | |
4901 LABEL_222: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4902 if ( pSpriteObjects[uLayingItemID].uType != 9030 || v152 != 4 ) |
0 | 4903 { |
4904 v108 = v139; | |
4905 if ( stru_50C198.GetMagicalResistance(&pActors[v139], v107) ) | |
4906 { | |
4907 v138 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4908 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 4909 { |
4910 pActors[v108].uAIState = Standing; | |
4911 pActors[v108].UpdateAnimation(); | |
4912 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4913 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
|
4914 v152, v150, 0, 0); |
0 | 4915 } |
4916 } | |
4917 else | |
4918 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4919 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); |
0 | 4920 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4921 pSpriteObjects[uLayingItemID].spell_level = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4922 pSpriteObjects[uLayingItemID].spell_skill = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4923 pSpriteObjects[uLayingItemID].spell_id = 0; |
0 | 4924 goto LABEL_233; |
4925 } | |
4926 v135 = 10; | |
4927 } | |
4928 } | |
4929 v107 = v135; | |
4930 goto LABEL_222; | |
4931 } | |
2101 | 4932 if ( pSpriteObjects[uLayingItemID].uType == 8090 |
4933 || pSpriteObjects[uLayingItemID].uType == 7030 | |
4934 || pSpriteObjects[uLayingItemID].uType == 7090 || pSpriteObjects[uLayingItemID].uType == 8000 ) | |
4935 { | |
4936 sub_43A97E(uLayingItemID, a2); | |
4937 ++pSpriteObjects[uLayingItemID].uType; | |
4938 v95 = 0; | |
4939 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4940 { | |
4941 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4942 v95 = v52; | |
4943 } | |
4944 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4945 if ( !v95 ) | |
4946 SpriteObject::OnInteraction(uLayingItemID); | |
4947 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4948 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4949 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4950 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4951 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4952 if ( !v96 ) | |
4953 v97 = 0; | |
4954 else | |
4955 v97 = (signed __int16)v96 + 4; | |
4956 v124 = 8 * uLayingItemID; | |
4957 LOBYTE(v124) = v124 | 2; | |
4958 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4959 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4960 return 0; | |
4961 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4962 if ( pSpriteObjects[uLayingItemID].uType == 8010 ) |
0 | 4963 { |
2101 | 4964 if ( PID_TYPE(a2) == 3 |
4965 && MonsterStats::BelongsToSupertype(pActors[PID_ID(a2)].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) ) | |
4966 sub_43A97E(uLayingItemID, a2); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4967 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 4968 //v9 = 0; |
4969 v95 = 0; | |
4970 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 4971 { |
2101 | 4972 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
4973 v95 = v52; | |
0 | 4974 } |
2101 | 4975 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
4976 if ( !v95 ) | |
4977 SpriteObject::OnInteraction(uLayingItemID); | |
4978 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4979 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4980 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4981 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4982 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4983 if ( !v96 ) | |
4984 v97 = 0; | |
4985 else | |
4986 v97 = (signed __int16)v96 + 4; | |
4987 v92 = uLayingItemID; | |
4988 v124 = 8 * v92; | |
4989 LOBYTE(v124) = v124 | 2; | |
4990 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4991 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4992 return 0; | |
0 | 4993 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4994 v79 = pSpriteObjects[uLayingItemID].uType == 8030; |
0 | 4995 } |
4996 else | |
4997 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4998 if ( pSpriteObjects[uLayingItemID].uType == 6090 ) |
2101 | 4999 { |
5000 sub_43A97E(uLayingItemID, a2); | |
5001 ++pSpriteObjects[uLayingItemID].uType; | |
5002 v95 = 0; | |
5003 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5004 { | |
5005 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5006 v95 = v52; | |
5007 } | |
5008 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5009 if ( !v95 ) | |
5010 SpriteObject::OnInteraction(uLayingItemID); | |
5011 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5012 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5013 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5014 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5015 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5016 if ( !v96 ) | |
5017 v97 = 0; | |
5018 else | |
5019 v97 = (signed __int16)v96 + 4; | |
5020 v124 = 8 * uLayingItemID; | |
5021 LOBYTE(v124) = v124 | 2; | |
5022 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5023 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5024 return 0; | |
5025 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5026 if ( pSpriteObjects[uLayingItemID].uType <= 4070 ) |
0 | 5027 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5028 if ( pSpriteObjects[uLayingItemID].uType != 4070 ) |
0 | 5029 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5030 v48 = pSpriteObjects[uLayingItemID].uType - 3090; |
0 | 5031 if ( v48 ) |
5032 { | |
5033 v49 = v48 - 2; | |
5034 if ( v49 ) | |
5035 { | |
5036 v50 = v49 - 908; | |
2101 | 5037 if ( v49 == 908 ) |
5038 { | |
5039 sub_43A97E(uLayingItemID, a2); | |
5040 ++pSpriteObjects[uLayingItemID].uType; | |
5041 v95 = 0; | |
5042 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5043 { | |
5044 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5045 v95 = v52; | |
5046 } | |
5047 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5048 if ( !v95 ) | |
5049 SpriteObject::OnInteraction(uLayingItemID); | |
5050 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5051 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5052 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5053 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5054 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5055 if ( !v96 ) | |
5056 v97 = 0; | |
5057 else | |
5058 v97 = (signed __int16)v96 + 4; | |
5059 v124 = 8 * uLayingItemID; | |
5060 LOBYTE(v124) = v124 | 2; | |
5061 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5062 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5063 return 0; | |
5064 } | |
0 | 5065 v45 = v50 - 30; |
5066 v44 = v45 == 0; | |
5067 goto LABEL_91; | |
5068 } | |
2101 | 5069 //v9 = 0; |
5070 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType - 1; | |
5071 v58 = 0; | |
5072 for ( v56 = 0; v56 < (signed int)pObjectList->uNumObjects; ++v56 ) | |
0 | 5073 { |
2101 | 5074 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v56].uObjectID ) |
5075 v58 = v56; | |
0 | 5076 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5077 pSpriteObjects[uLayingItemID].uObjectDescID = v58; |
0 | 5078 if ( !v58 ) |
2101 | 5079 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5080 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5081 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5082 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5083 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5084 sub_43A97E(uLayingItemID, a2); |
5085 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
0 | 5086 v16 = 0; |
5087 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5088 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5089 v124 = 8 * uLayingItemID; |
0 | 5090 LOBYTE(v124) = v124 | 2; |
1456 | 5091 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5092 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5093 return 0; |
0 | 5094 } |
2101 | 5095 //v9 = 0; |
5096 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5097 v63 = 0; | |
5098 for ( v61 = 0; v61 < (signed int)pObjectList->uNumObjects; ++v61 ) | |
0 | 5099 { |
2101 | 5100 if ( v59 == pObjectList->pObjects[v61].uObjectID ) |
5101 v63 = v61; | |
0 | 5102 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5103 pSpriteObjects[uLayingItemID].uObjectDescID = v63; |
0 | 5104 if ( !v63 ) |
2101 | 5105 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5106 v64 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5107 v44 = pSpriteObjects[uLayingItemID].spell_skill == 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5108 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5109 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5110 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5111 v65 = 7; |
5112 if ( v44 ) | |
5113 v65 = 9; | |
5114 if ( v65 > 0 ) | |
5115 { | |
5116 v141 = v65; | |
5117 do | |
5118 { | |
2101 | 5119 v64 += (signed int)stru_5C6E00->uIntegerHalfPi / 2; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5120 pSpriteObjects[uLayingItemID].Create(v64, 0, 1000, 0); |
0 | 5121 --v141; |
5122 } | |
5123 while ( v141 ); | |
5124 } | |
2101 | 5125 SpriteObject::OnInteraction(uLayingItemID); |
5126 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5127 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5128 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5129 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5130 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5131 LOBYTE(v124) = v124 | 2; |
1456 | 5132 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5133 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5134 return 0; |
0 | 5135 } |
2101 | 5136 //v66 = 0; |
5137 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5138 return 1; |
2101 | 5139 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5140 v71 = 0; | |
5141 for ( v69 = 0; v69 < (signed int)pObjectList->uNumObjects; ++v69 ) | |
0 | 5142 { |
2101 | 5143 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v69].uObjectID ) |
5144 v71 = v69; | |
0 | 5145 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5146 pSpriteObjects[uLayingItemID].uObjectDescID = v71; |
0 | 5147 if ( !v71 ) |
2101 | 5148 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5149 v134 = 0; |
2101 | 5150 v72 = uLayingItemID; |
0 | 5151 v132 = 0; |
2101 | 5152 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5153 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5154 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5155 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2059 | 5156 AttackerInfo.Add(PID(OBJECT_Item,v72), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5157 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
0 | 5158 v78 = 0; |
5159 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5160 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5161 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2185 | 5162 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
|
5163 return 0; |
0 | 5164 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5165 if ( pSpriteObjects[uLayingItemID].uType == 4090 ) |
0 | 5166 { |
2101 | 5167 //v9 = 0; |
5168 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5169 v88 = 0; | |
5170 for ( v86 = 0; v86 < (signed int)pObjectList->uNumObjects; ++v86 ) | |
0 | 5171 { |
2101 | 5172 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v86].uObjectID ) |
5173 v88 = v86; | |
0 | 5174 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5175 pSpriteObjects[uLayingItemID].uObjectDescID = v88; |
0 | 5176 if ( !v88 ) |
2101 | 5177 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5178 v89 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5179 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5180 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5181 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5182 v142 = v89; |
5183 v148 = 7; | |
5184 do | |
5185 { | |
5186 pRnd->SetRange(-128, 128); | |
5187 v90 = pRnd->GetInRange(); | |
5188 pRnd->SetRange(5, 500); | |
5189 v91 = pRnd->GetInRange(); | |
5190 v142 += (signed int)stru_5C6E00->uIntegerHalfPi >> 1; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5191 pSpriteObjects[uLayingItemID].Create(v90 + v142, 0, v91, 0); |
0 | 5192 --v148; |
5193 } | |
5194 while ( v148 ); | |
2101 | 5195 SpriteObject::OnInteraction(uLayingItemID); |
5196 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5197 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5198 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5199 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5200 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5201 LOBYTE(v124) = v124 | 2; |
1456 | 5202 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id-1] + 1; |
2101 | 5203 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5204 return 0; |
0 | 5205 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5206 if ( pSpriteObjects[uLayingItemID].uType == 4092 ) |
0 | 5207 { |
2101 | 5208 //v66 = 0; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5209 pSpriteObjects[uLayingItemID].uType = 4091; |
2101 | 5210 v83 = 0; |
5211 for ( v81 = 0; v81 < (signed int)pObjectList->uNumObjects; ++v81 ) | |
0 | 5212 { |
2101 | 5213 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v81].uObjectID ) |
5214 v83 = v81; | |
0 | 5215 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5216 pSpriteObjects[uLayingItemID].uObjectDescID = v83; |
0 | 5217 if ( !v83 ) |
2101 | 5218 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5219 v134 = 0; |
2102 | 5220 //v72 = uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5221 v132 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5222 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5223 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5224 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5225 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2102 | 5226 AttackerInfo.Add(PID(OBJECT_Item, uLayingItemID), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5227 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5228 v78 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5229 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5230 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5231 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2102 | 5232 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
|
5233 return 0; |
0 | 5234 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5235 if ( pSpriteObjects[uLayingItemID].uType == 4100 || pSpriteObjects[uLayingItemID].uType == 6010 ) |
2101 | 5236 { |
5237 sub_43A97E(uLayingItemID, a2); | |
5238 ++pSpriteObjects[uLayingItemID].uType; | |
5239 v95 = 0; | |
5240 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5241 { | |
5242 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5243 v95 = v52; | |
5244 } | |
5245 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5246 if ( !v95 ) | |
5247 SpriteObject::OnInteraction(uLayingItemID); | |
5248 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5249 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5250 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5251 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5252 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5253 if ( !v96 ) | |
5254 v97 = 0; | |
5255 else | |
5256 v97 = (signed __int16)v96 + 4; | |
5257 v124 = 8 * uLayingItemID; | |
5258 LOBYTE(v124) = v124 | 2; | |
5259 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5260 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5261 return 0; | |
5262 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5263 v79 = pSpriteObjects[uLayingItemID].uType == 6040; |
0 | 5264 } |
5265 if ( !v79 ) | |
5266 return 0; | |
5267 goto LABEL_172; | |
5268 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5269 if ( pSpriteObjects[uLayingItemID].uType == 3060 ) |
2101 | 5270 { |
5271 sub_43A97E(uLayingItemID, a2); | |
5272 ++pSpriteObjects[uLayingItemID].uType; | |
5273 v95 = 0; | |
5274 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5275 { | |
5276 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5277 v95 = v52; | |
5278 } | |
5279 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5280 if ( !v95 ) | |
5281 SpriteObject::OnInteraction(uLayingItemID); | |
5282 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5283 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5284 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5285 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5286 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5287 if ( !v96 ) | |
5288 v97 = 0; | |
5289 else | |
5290 v97 = (signed __int16)v96 + 4; | |
5291 v124 = 8 * uLayingItemID; | |
5292 LOBYTE(v124) = v124 | 2; | |
5293 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5294 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5295 return 0; | |
5296 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5297 if ( pSpriteObjects[uLayingItemID].uType <= 555 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5298 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5299 if ( pSpriteObjects[uLayingItemID].uType == 555 ) |
0 | 5300 { |
2101 | 5301 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5302 ++pSpriteObjects[uLayingItemID].uType; |
0 | 5303 v18 = 0; |
2101 | 5304 v22 = 0; |
5305 v25 = (char *)&pObjectList->pObjects->uObjectID; | |
5306 for ( v24 = 0; v24 < (signed int)pObjectList->uNumObjects; ++v24 ) | |
0 | 5307 { |
2101 | 5308 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v24].uObjectID ) |
5309 v22 = v24; | |
0 | 5310 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5311 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
0 | 5312 if ( v22 == v18 ) |
2101 | 5313 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5314 pSpriteObjects[uLayingItemID].vVelocity.z = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5315 pSpriteObjects[uLayingItemID].vVelocity.y = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5316 pSpriteObjects[uLayingItemID].vVelocity.x = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5317 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; |
0 | 5318 } |
5319 else | |
5320 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5321 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 5322 { |
5323 case 500: | |
5324 case 505: | |
5325 case 510: | |
5326 case 515: | |
5327 case 520: | |
5328 case 525: | |
5329 case 530: | |
5330 case 535: | |
5331 case 540: | |
2101 | 5332 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5333 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5334 v12 = 0; |
5335 for ( v10 = 0; v10 < (signed int)pObjectList->uNumObjects; ++v10 ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5336 { |
2101 | 5337 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v10].uObjectID ) |
5338 v12 = v10; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5339 } |
2101 | 5340 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
5341 if ( !v12 ) | |
5342 SpriteObject::OnInteraction(uLayingItemID); | |
5343 v44 = pSpriteObjects[uLayingItemID].uType == 555; | |
5344 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5345 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5346 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5347 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5348 if ( !v44 ) | |
5349 { | |
5350 v13 = 8 * uLayingItemID; | |
5351 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5352 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
5353 } | |
5354 return 0; | |
0 | 5355 case 545: |
5356 case 550: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5357 if ( pSpriteObjects[uLayingItemID].stru_24.uItemID != 405 && pSpriteObjects[uLayingItemID].stru_24.uSpecEnchantmentType != 3 ) |
0 | 5358 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5359 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5360 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5361 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5362 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5363 sub_43A97E(uLayingItemID, a2); |
5364 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5365 if ( pSpriteObjects[uLayingItemID].uSoundID == 0 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5366 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5367 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5368 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5369 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5370 LOBYTE(v124) = v124 | 2; |
1996 | 5371 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5372 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5373 return 0; |
0 | 5374 } |
5375 v18 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5376 pSpriteObjects[uLayingItemID].uType = 600; |
2101 | 5377 v22 = 0; |
5378 for ( v19 = 0; v19 < (signed int)pObjectList->uNumObjects; ++v19 ) | |
0 | 5379 { |
2101 | 5380 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v19].uObjectID ) |
5381 v22 = v19; | |
0 | 5382 } |
2101 | 5383 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
5384 if ( !v22 ) | |
5385 SpriteObject::OnInteraction(uLayingItemID); | |
5386 pSpriteObjects[uLayingItemID].vVelocity.z = v18; | |
5387 pSpriteObjects[uLayingItemID].vVelocity.y = v18; | |
5388 pSpriteObjects[uLayingItemID].vVelocity.x = v18; | |
5389 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; | |
0 | 5390 default: |
5391 return 0; | |
5392 } | |
2101 | 5393 v12 = 0; |
5394 for ( v10; v10 < (signed int)v8; ++v10 ) | |
0 | 5395 { |
5396 v11 += 56; | |
2101 | 5397 if ( pSpriteObjects[uLayingItemID].uType != *(short *)v11 ) |
5398 v12 = v10; | |
0 | 5399 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5400 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
0 | 5401 if ( !v12 ) |
2101 | 5402 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5403 v44 = pSpriteObjects[uLayingItemID].uType == 555; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5404 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5405 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5406 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5407 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5408 if ( !v44 ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5409 { |
2101 | 5410 v13 = 8 * uLayingItemID; |
5411 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5412 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5413 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5414 } |
0 | 5415 } |
5416 return 0; | |
5417 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5418 if ( pSpriteObjects[uLayingItemID].uType > 1100 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5419 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5420 v41 = pSpriteObjects[uLayingItemID].uType - 2030; |
0 | 5421 if ( !v41 ) |
5422 goto LABEL_247; | |
5423 v42 = v41 - 30; | |
5424 if ( v42 ) | |
5425 { | |
5426 v43 = v42 - 40; | |
2101 | 5427 if ( v42 == 40 ) |
5428 { | |
5429 if ( PID_TYPE(a2) != 3 ) | |
5430 { | |
5431 //v32 = 0; | |
5432 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5433 v46 = 0; | |
5434 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5435 { | |
5436 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5437 v46 = v146; | |
5438 } | |
5439 pSpriteObjects[uLayingItemID].uObjectDescID = v46; | |
5440 if ( !v46 ) | |
5441 SpriteObject::OnInteraction(uLayingItemID); | |
5442 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5443 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5444 v102 = 8 * uLayingItemID; | |
5445 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5446 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5447 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5448 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5449 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5450 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5451 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5452 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5453 v47 = 0; | |
5454 else | |
5455 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5456 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5457 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5458 return 0; | |
5459 } | |
5460 return 1; | |
5461 } | |
0 | 5462 v45 = v43 - 910; |
5463 v44 = v45 == 0; | |
5464 LABEL_91: | |
5465 if ( !v44 && v45 != 20 ) | |
5466 return 0; | |
5467 } | |
2101 | 5468 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5469 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5470 v95 = 0; |
5471 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5472 { |
2101 | 5473 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5474 v95 = v52; | |
0 | 5475 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5476 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
2101 | 5477 if ( !v95 ) |
5478 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5479 v96 = pSpriteObjects[uLayingItemID].uSoundID; |
2101 | 5480 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5481 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5482 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5483 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5484 if ( !v96 ) | |
0 | 5485 v97 = 0; |
5486 else | |
5487 v97 = (signed __int16)v96 + 4; | |
2101 | 5488 v124 = 8 * uLayingItemID; |
5489 LOBYTE(v124) = v124 | 2; | |
5490 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5491 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5492 return 0; | |
5493 } | |
5494 if ( pSpriteObjects[uLayingItemID].uType == 1100 ) | |
5495 { | |
5496 sub_43A97E(uLayingItemID, a2); | |
5497 ++pSpriteObjects[uLayingItemID].uType; | |
5498 v95 = 0; | |
5499 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5500 { | |
5501 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5502 v95 = v52; | |
5503 } | |
5504 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5505 if ( !v95 ) | |
5506 SpriteObject::OnInteraction(uLayingItemID); | |
5507 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5508 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5509 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5510 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5511 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5512 if ( !v96 ) | |
5513 v97 = 0; | |
5514 else | |
5515 v97 = (signed __int16)v96 + 4; | |
5516 v92 = uLayingItemID; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5517 v124 = 8 * v92; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5518 LOBYTE(v124) = v124 | 2; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5519 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5520 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5521 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5522 } |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5523 v26 = pSpriteObjects[uLayingItemID].uType - 600; |
2101 | 5524 if ( pSpriteObjects[uLayingItemID].uType == 600 ) |
0 | 5525 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5526 pSpriteObjects[uLayingItemID].uType = 601; |
2101 | 5527 v36 = 0; |
5528 for ( v34 = 0; v34 < (signed int)pObjectList->uNumObjects; ++v34 ) | |
0 | 5529 { |
2101 | 5530 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v34].uObjectID ) |
5531 v36 = v34; | |
0 | 5532 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5533 pSpriteObjects[uLayingItemID].uObjectDescID = v36; |
0 | 5534 if ( !v36 ) |
2101 | 5535 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5536 v37 = pSpriteObjects[uLayingItemID].vPosition.z; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5537 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
2101 | 5538 v38 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5539 v39 = pSpriteObjects[uLayingItemID].vPosition.y; |
2101 | 5540 LOBYTE(v38) = PID(OBJECT_Item, uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5541 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5542 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5543 v40 = pSpriteObjects[uLayingItemID].vPosition.x; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5544 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5545 v147 = v38; |
2059 | 5546 AttackerInfo.Add(v38, 512, v40, v39, v37, 0, 0); |
2101 | 5547 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) |
5548 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
|
5549 pAudioPlayer->PlaySound(SOUND_8, v147, 0, -1, 0, 0, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5550 return 0; |
0 | 5551 } |
5552 v27 = v26 - 410; | |
2101 | 5553 if ( v26 == 410 ) |
5554 { | |
5555 sub_43A97E(uLayingItemID, a2); | |
5556 ++pSpriteObjects[uLayingItemID].uType; | |
5557 v95 = 0; | |
5558 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5559 { | |
5560 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5561 v95 = v52; | |
5562 } | |
5563 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5564 if ( !v95 ) | |
5565 SpriteObject::OnInteraction(uLayingItemID); | |
5566 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5567 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5568 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5569 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5570 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5571 if ( !v96 ) | |
5572 v97 = 0; | |
5573 else | |
5574 v97 = (signed __int16)v96 + 4; | |
5575 v124 = 8 * uLayingItemID; | |
5576 LOBYTE(v124) = v124 | 2; | |
5577 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5578 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5579 return 0; | |
5580 } | |
0 | 5581 v28 = v27 - 40; |
5582 if ( !v28 ) | |
2101 | 5583 { |
5584 v95 = 0; | |
5585 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5586 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5587 { | |
5588 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5589 v95 = v146; | |
5590 } | |
5591 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5592 if ( !v95 ) | |
5593 SpriteObject::OnInteraction(uLayingItemID); | |
5594 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5595 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5596 v102 = 8 * uLayingItemID; | |
5597 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5598 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5599 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5600 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5601 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5602 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5603 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5604 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5605 v47 = 0; | |
5606 else | |
5607 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5608 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5609 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5610 return 0; | |
5611 } | |
0 | 5612 v29 = v28 - 10; |
5613 if ( v29 ) | |
5614 { | |
5615 if ( v29 != 20 ) | |
5616 return 0; | |
2101 | 5617 if ( PID_TYPE(a2) != 3 ) |
0 | 5618 { |
2101 | 5619 //v32 = 0; |
5620 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5621 v46 = 0; | |
5622 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 5623 { |
2101 | 5624 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
5625 v46 = v146; | |
0 | 5626 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5627 pSpriteObjects[uLayingItemID].uObjectDescID = v46; |
2101 | 5628 if ( !v46 ) |
5629 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5630 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5631 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
5632 v102 = 8 * uLayingItemID; | |
5633 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5634 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5635 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5636 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5637 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5638 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5639 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5640 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5641 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5642 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5643 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5644 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5645 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5646 return 0; |
0 | 5647 } |
5648 return 1; | |
5649 } | |
5650 LABEL_247: | |
2101 | 5651 //v9 = 0; |
5652 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5653 return 1; |
2101 | 5654 if ( PID_TYPE(a2) != 2 ) |
0 | 5655 { |
2101 | 5656 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5657 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5658 v95 = 0; |
5659 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5660 { |
2101 | 5661 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5662 v95 = v52; | |
0 | 5663 } |
2101 | 5664 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
5665 if ( !v95 ) | |
5666 SpriteObject::OnInteraction(uLayingItemID); | |
5667 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5668 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5669 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5670 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5671 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5672 v97 = 0; | |
5673 else | |
5674 v97 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5675 v124 = 8 * uLayingItemID; | |
5676 LOBYTE(v124) = v124 | 2; | |
5677 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5678 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5679 return 0; | |
0 | 5680 } |
2101 | 5681 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5682 v121 = 0; | |
5683 for ( v119 = 0; v119 < (signed int)pObjectList->uNumObjects; ++v119 ) | |
0 | 5684 { |
2101 | 5685 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v119].uObjectID ) |
5686 v121 = v119; | |
0 | 5687 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5688 pSpriteObjects[uLayingItemID].uObjectDescID = v121; |
0 | 5689 if ( !v121 ) |
2101 | 5690 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5691 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5692 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5693 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5694 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5695 v13 = 8 * uLayingItemID; |
5696 LOBYTE(v13) = PID(OBJECT_Item,uLayingItemID); | |
5697 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
0 | 5698 return 0; |
5699 } |