Mercurial > mm7
annotate mm7_2.cpp @ 2237:d903816e972e
_4B254D_SkillMasteryTeacher adding case, removing nested ifs, adding some comments
author | Grumpy7 |
---|---|
date | Sun, 23 Feb 2014 14:12:07 +0100 |
parents | 6ab7d7c112bb |
children | aff7a7b072b7 |
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(); | |
2215
e9625ad08541
fog fix and change 640,480 - window->GetWidth(), window->GetHeight()
Ritor1
parents:
2212
diff
changeset
|
259 pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), 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; | |
2215
e9625ad08541
fog fix and change 640,480 - window->GetWidth(), window->GetHeight()
Ritor1
parents:
2212
diff
changeset
|
733 window_SpeakInHouse = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), 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; |
2216 | 2864 pAudioPlayer->StopChannels(-1, -1);//îñòàíîâèòü/ïîäãîòîâèòü êàíàë |
2219 | 2865 pMouse->RemoveHoldingItem();//èçáàâèòü êóðñîð îò âåùè |
762 | 2866 |
2867 pIcons_LOD->_inlined_sub2(); | |
2868 | |
2215
e9625ad08541
fog fix and change 640,480 - window->GetWidth(), window->GetHeight()
Ritor1
parents:
2212
diff
changeset
|
2869 pWindow_MainMenu = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), 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); | |
2215
e9625ad08541
fog fix and change 640,480 - window->GetWidth(), window->GetHeight()
Ritor1
parents:
2212
diff
changeset
|
2896 pGUIWindow2 = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), 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 | |
731 | 4149 /*v8 = _4AC1C9_get_cpu_speed(0, (Vec4_int_ *)a2); |
0 | 4150 Rect.left = *(int *)v8; |
4151 Rect.top = *(int *)(v8 + 4); | |
4152 Rect.right = *(int *)(v8 + 8); | |
4153 Rect.bottom = *(int *)(v8 + 12); | |
731 | 4154 uCPUSpeed = Rect.bottom;*/ |
4155 uCPUSpeed = 2048; // about 2GHz | |
4 | 4156 |
2191 | 4157 constructors(); |
4 | 4158 |
2215
e9625ad08541
fog fix and change 640,480 - window->GetWidth(), window->GetHeight()
Ritor1
parents:
2212
diff
changeset
|
4159 if (!MM7_Initialize(640, 480))//çàäà¸òñÿ ðàçìåð îêíà |
734 | 4160 { |
4161 Log::Warning(L"MM init: failed"); | |
4162 pGame->Deinitialize(); | |
4163 return 1; | |
4164 } | |
0 | 4165 |
2216 | 4166 pEventTimer->Pause(); |
4167 | |
4168 SetUserInterface(PartyAlignment_Neutral, false); | |
4169 ShowIntroVideo_and_LoadingScreen(); | |
4170 WriteWindowsRegistryInt("Ran once", 1); | |
4171 dword_6BE364_game_settings_1 |= GAME_SETTINGS_4000; | |
4172 pGame->InitializeGammaController(); | |
4173 SecondaryInitialization(); | |
4174 pRenderer->SetRasterClipRect(0, 0, window->GetWidth() - 1, window->GetHeight() - 1); | |
4175 FinalInitialization(); | |
4176 Log::Warning(L"MM: entering main loop"); | |
4177 while ( 1 ) | |
4178 { | |
4179 MainMenuWindow* main_menu_window = MainMenuWindow::Create(); | |
4180 window->AddControl(main_menu_window); | |
4181 MainMenu_Loop(); | |
4182 uGameState = GAME_STATE_PLAYING; | |
0 | 4183 while ( 1 ) |
4184 { | |
2216 | 4185 if (uGameState == GAME_FINISHED || GetCurrentMenuID() == MENU_EXIT_GAME) |
4186 { | |
4187 pGame->Deinitialize(); | |
4188 return true; | |
4189 } | |
4190 | |
4191 if (GetCurrentMenuID() == MENU_NEWGAME) | |
0 | 4192 { |
2216 | 4193 if ( pAudioPlayer->hAILRedbook ) |
4194 AIL_redbook_stop(pAudioPlayer->hAILRedbook); | |
4195 pParty->Reset(); | |
4196 pOtherOverlayList->Reset(); | |
4197 strcpy(pCurrentMapName, pStartingMapName); | |
4198 pParty->CreateDefaultParty(0); | |
4199 PlayerCreationUI_Initialize(); | |
4200 if ( PlayerCreationUI_Loop() ) | |
982 | 4201 { |
0 | 4202 DeleteCCharFont(); |
2216 | 4203 break; |
2 | 4204 } |
2216 | 4205 DeleteCCharFont(); |
4206 bFlashQuestBook = true; | |
4207 PlayFullscreenMovie(MOVIE_Emerald); | |
4208 //pGame->pCShow->PlayMovie(MOVIE_Emerald, 0); | |
4209 SaveNewGame(); | |
4210 if (bNoMargareth) | |
4211 _449B7E_toggle_bit(pParty->_quest_bits, PARTY_QUEST_EMERALD_MARGARETH_OFF, 1); | |
4212 pGame->Loop(); | |
4213 if (uGameState == GAME_STATE_NEWGAME_OUT_GAMEMENU) | |
101 | 4214 { |
4215 SetCurrentMenuID(MENU_NEWGAME); | |
982 | 4216 uGameState = GAME_STATE_PLAYING; |
0 | 4217 continue; |
101 | 4218 } |
2216 | 4219 else if (uGameState == GAME_STATE_GAME_QUITTING_TO_MAIN_MENU) |
4220 break; | |
4221 assert(false && "Invalid game state"); | |
4222 } | |
4223 if (GetCurrentMenuID() == MENU_CREDITS) | |
4224 { | |
4225 if ( pAudioPlayer->hAILRedbook ) | |
4226 AIL_redbook_stop(pAudioPlayer->hAILRedbook); | |
4227 MainMenuUI_Credits_Loop(); | |
4228 break; | |
4229 } | |
4230 if (GetCurrentMenuID() == MENU_5 || GetCurrentMenuID() == MENU_LoadingProcInMainMenu) | |
4231 { | |
4232 uGameState = GAME_STATE_PLAYING; | |
4233 pGame->Loop(); | |
4234 } | |
4235 else | |
4236 { | |
4237 if (GetCurrentMenuID() == MENU_DebugBLVLevel) | |
907 | 4238 { |
2216 | 4239 pMouse->ChangeActivation(0); |
4240 pParty->Reset(); | |
4241 pParty->CreateDefaultParty(1); | |
4242 | |
4243 __debugbreak(); | |
4244 /*extern void CreateDefaultBLVLevel(); | |
4245 CreateDefaultBLVLevel(); | |
4246 | |
4247 OPENFILENAMEA ofn; | |
4248 if ( !GetOpenFileNameA((LPOPENFILENAMEA)&ofn) ) | |
4249 { | |
4250 pMouse->ChangeActivation(1); | |
4251 break; | |
4252 } | |
4253 _chdir("..\\"); | |
4254 strcpy(pCurrentMapName, ofn.lpstrFileTitle);*/ | |
4255 pMouse->ChangeActivation(1); | |
4256 pGame->Loop(); | |
907 | 4257 } |
0 | 4258 } |
2216 | 4259 if ( uGameState == GAME_STATE_LOADING_GAME ) |
4260 { | |
4261 SetCurrentMenuID(MENU_5); | |
4262 uGameState = GAME_STATE_PLAYING; | |
4263 continue; | |
4264 } | |
4265 if ( uGameState == GAME_STATE_NEWGAME_OUT_GAMEMENU ) | |
0 | 4266 { |
2216 | 4267 SetCurrentMenuID(MENU_NEWGAME); |
4268 uGameState = GAME_STATE_PLAYING; | |
4269 continue; | |
4270 } | |
4271 if ( uGameState == GAME_STATE_GAME_QUITTING_TO_MAIN_MENU)// from the loaded game | |
4272 { | |
4273 pAudioPlayer->StopChannels(-1, -1); | |
4274 uGameState = GAME_STATE_PLAYING; | |
4275 break; | |
0 | 4276 } |
4277 } | |
2216 | 4278 if (!bNoSound && pAudioPlayer->hAILRedbook) |
4279 { | |
4280 pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); | |
4281 AIL_redbook_stop(pAudioPlayer->hAILRedbook); | |
4282 unsigned int startms, end_ms; | |
4283 AIL_redbook_track_info(pAudioPlayer->hAILRedbook, 14, &startms, &end_ms); | |
4284 AIL_redbook_play(pAudioPlayer->hAILRedbook, startms + 1, end_ms); | |
4285 } | |
4286 } | |
2050 | 4287 //lua_close(L); |
0 | 4288 pGame->Deinitialize(); |
734 | 4289 return 1; |
0 | 4290 } |
4291 | |
4292 //----- (004637E0) -------------------------------------------------------- | |
1458 | 4293 char sub_4637E0_is_there_popup_onscreen() |
0 | 4294 { |
4295 return dword_507BF0_is_there_popup_onscreen == 1; | |
4296 } | |
4297 // 507BF0: using guessed type int dword_507BF0_is_there_popup_onscreen; | |
4298 | |
4299 //----- (00466082) -------------------------------------------------------- | |
4300 void MM6_Initialize(const wchar_t *pIniFilename) | |
4301 { | |
4302 //int v0; // eax@1 | |
2151 | 4303 //UINT v1; // eax@18 |
0 | 4304 size_t v2; // eax@31 |
4305 size_t v3; // ebx@32 | |
4306 size_t v4; // edi@36 | |
4307 //char v5[120]; // [sp+Ch] [bp-17Ch]@1 | |
4308 //char String[120]; // [sp+84h] [bp-104h]@32 | |
4309 char pDefaultGroundTexture[16]; // [sp+FCh] [bp-8Ch]@32 | |
4310 //char pIniFilename[120]; // [sp+10Ch] [bp-7Ch]@1 | |
4311 unsigned int v9; // [sp+184h] [bp-4h]@28 | |
4312 | |
4313 //_getcwd(v5, 120); | |
4314 //sprintfex(pIniFilename, "%s\\mm6.ini", v5); | |
4315 viewparams = new ViewingParams; | |
819 | 4316 game_viewport_x = viewparams->uScreen_topL_X = GetPrivateProfileIntW(L"screen", L"vx1", 8, pIniFilename); |
4317 game_viewport_y = viewparams->uScreen_topL_Y = GetPrivateProfileIntW(L"screen", L"vy1", 8, pIniFilename); | |
4318 game_viewport_z = viewparams->uScreen_BttmR_X = GetPrivateProfileIntW(L"screen", L"vx2", 468, pIniFilename); | |
4319 game_viewport_w = viewparams->uScreen_BttmR_Y = GetPrivateProfileIntW(L"screen", L"vy2", 351, pIniFilename); | |
4320 game_viewport_width = game_viewport_z - game_viewport_x; | |
4321 game_viewport_height = game_viewport_w - game_viewport_y + 1; | |
0 | 4322 |
4323 | |
4324 pAudioPlayer = new AudioPlayer; | |
4325 pAudioPlayer->uMixerChannels = GetPrivateProfileIntW(L"settings", L"mixerchannels", 16, pIniFilename); | |
4326 if ( pAudioPlayer->uMixerChannels > 16 ) | |
4327 pAudioPlayer->uMixerChannels = 16; | |
4328 | |
4329 | |
4330 if (GetPrivateProfileIntW(L"debug", L"nomonster", 0, pIniFilename)) | |
2061 | 4331 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_ACTORS; |
2151 | 4332 if (ReadWindowsRegistryInt("startinwindow", 0)) |
2061 | 4333 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_RUN_IN_WIDOW; |
0 | 4334 if (GetPrivateProfileIntW(L"debug", L"showFR", 0, pIniFilename)) |
2061 | 4335 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_0002_SHOW_FR; |
0 | 4336 if (GetPrivateProfileIntW(L"debug", L"nodamage", 0, pIniFilename)) |
2061 | 4337 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_DAMAGE; |
0 | 4338 if (GetPrivateProfileIntW(L"debug", L"nodecoration", 0, pIniFilename)) |
2061 | 4339 dword_6BE368_debug_settings_2 |= DEBUG_SETTINGS_NO_DECORATIONS; |
0 | 4340 |
4341 wchar_t pStartingMapNameW[1024]; | |
4342 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
|
4343 sprintf(pStartingMapName, "%S", pStartingMapNameW); |
0 | 4344 |
4345 v9 = 0; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4346 if ( strlen(pStartingMapName) ) |
0 | 4347 { |
4348 do | |
4349 { | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4350 if ( pStartingMapName[v9] == ' ' ) |
0 | 4351 pStartingMapName[v9] = 0; |
4352 ++v9; | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1467
diff
changeset
|
4353 v2 = strlen(pStartingMapName); |
0 | 4354 } |
4355 while ( v9 < v2 ); | |
4356 } | |
4357 | |
1637 | 4358 pODMRenderParams = new ODMRenderParams; |
4359 pODMRenderParams->outdoor_no_mist = GetPrivateProfileIntW(L"debug", L"noMist", 0, pIniFilename); | |
4360 pODMRenderParams->bNoSky = GetPrivateProfileIntW(L"outdoor", L"nosky", 0, pIniFilename); | |
4361 pODMRenderParams->bDoNotRenderDecorations = GetPrivateProfileIntW(L"render", L"nodecorations", 0, pIniFilename); | |
4362 pODMRenderParams->outdoor_no_wavy_water = GetPrivateProfileIntW(L"outdoor", L"nowavywater", 0, pIniFilename); | |
0 | 4363 outdoor_grid_band_1 = GetPrivateProfileIntW(L"outdoor", L"gridband1", 10, pIniFilename); |
4364 outdoor_grid_band_2 = GetPrivateProfileIntW(L"outdoor", L"gridband2", 15, pIniFilename); | |
4365 outdoor_grid_band_3 = GetPrivateProfileIntW(L"outdoor", L"gridband3", 25, pIniFilename); | |
1637 | 4366 pODMRenderParams->terrain_gamma = GetPrivateProfileIntW(L"outdoor", L"ter_gamma", 0, pIniFilename); |
4367 pODMRenderParams->building_gamme = GetPrivateProfileIntW(L"outdoor", L"bld_gamma", 0, pIniFilename); | |
4368 pODMRenderParams->shading_dist_shade = GetPrivateProfileIntW(L"shading", L"dist_shade", 2048, pIniFilename); | |
4369 pODMRenderParams->shading_dist_shademist = GetPrivateProfileIntW(L"shading", L"dist_shademist", 4096, pIniFilename); | |
1765 | 4370 |
4371 int dist = 0x2000; | |
4372 extern bool new_draw_object_dist; | |
4373 if ( new_draw_object_dist ) | |
4374 dist = 0x6000; | |
4375 pODMRenderParams->shading_dist_mist = GetPrivateProfileIntW(L"shading", L"dist_mist", dist, pIniFilename); | |
0 | 4376 |
4377 wchar_t pDefaultSkyTextureW[1024]; | |
4378 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
|
4379 sprintf(pDefaultSkyTexture.data(), "%S", pDefaultSkyTextureW); |
0 | 4380 |
4381 wchar_t pDefaultGroundTextureW[1024]; | |
4382 GetPrivateProfileStringW(L"textures", L"default", L"dirt", pDefaultGroundTextureW, 0x10u, pIniFilename); | |
4383 sprintf(pDefaultGroundTexture, "%S", pDefaultGroundTextureW); | |
4384 | |
4385 wchar_t pFloat[1024]; | |
4386 GetPrivateProfileStringW(L"debug", L"recmod1", L"1.0", pFloat, 0x10u, pIniFilename); | |
4387 swscanf(pFloat, L"%f", &flt_6BE3A4_debug_recmod1); | |
4388 | |
4389 GetPrivateProfileStringW(L"debug", L"recmod2", L"1.0", pFloat, 0x10u, pIniFilename); | |
4390 swscanf(pFloat, L"%f", &flt_6BE3A8_debug_recmod2); | |
4391 | |
4392 flt_6BE3AC_debug_recmod1_x_1_6 = flt_6BE3A4_debug_recmod1 * 1.666666666666667; | |
4393 | |
4394 v3 = 0; | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4395 if ( strlen(pDefaultSkyTexture.data()) ) |
0 | 4396 { |
4397 do | |
4398 { | |
4399 if ( pDefaultSkyTexture[v3] == ' ' ) | |
4400 pDefaultSkyTexture[v3] = 0; | |
4401 ++v3; | |
4402 } | |
1205
8c02e6f74b29
arrays to std::arrays phase 2 - mm7_data.h converted
Grumpy7
parents:
1203
diff
changeset
|
4403 while ( v3 < strlen(pDefaultSkyTexture.data()) ); |
0 | 4404 } |
4405 v4 = 0; | |
4406 if ( strlen(pDefaultGroundTexture) ) | |
4407 { | |
4408 do | |
4409 { | |
4410 if ( pDefaultGroundTexture[v4] == ' ' ) | |
4411 pDefaultGroundTexture[v4] = 0; | |
4412 ++v4; | |
4413 } | |
4414 while ( v4 < strlen(pDefaultGroundTexture) ); | |
4415 } | |
4416 | |
4417 MM7Initialization(); | |
4418 } | |
4419 | |
4420 //----- (004666D5) -------------------------------------------------------- | |
2151 | 4421 void MM7Initialization() |
0 | 4422 { |
4423 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) | |
4424 { | |
2151 | 4425 /*if (byte_6BE388_graphicsmode == 0) |
0 | 4426 { |
4427 outdoor_grid_band_1 = 10; | |
4428 outdoor_grid_band_2 = 15; | |
4429 outdoor_grid_band_3 = 20; | |
1637 | 4430 pODMRenderParams->shading_dist_mist = 8192; |
4431 pODMRenderParams->bNoSky = false; | |
0 | 4432 LOBYTE(viewparams->field_20) = 0; |
2151 | 4433 }*/ |
1637 | 4434 pODMRenderParams->shading_dist_shade = 2048; |
4435 pODMRenderParams->terrain_gamma = 0; | |
4436 pODMRenderParams->building_gamme = 0; | |
4437 pODMRenderParams->shading_dist_shademist = 4096; | |
4438 pODMRenderParams->outdoor_no_wavy_water = 0; | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1409
diff
changeset
|
4439 //_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
|
4440 { |
1637 | 4441 pODMRenderParams->outdoor_grid_band_3 = outdoor_grid_band_3; |
4442 pODMRenderParams->uPickDepth = outdoor_grid_band_3 * 512; | |
1410
38df78aba732
deleted stru220.h and stru220 (bezier terrain stuff)
Nomad
parents:
1409
diff
changeset
|
4443 } |
0 | 4444 } |
4445 else | |
4446 LOBYTE(viewparams->field_20) = 0; | |
2101 | 4447 pParty->uFlags |= 2; |
692 | 4448 viewparams->uSomeY = viewparams->uScreen_topL_Y; |
4449 viewparams->uSomeX = viewparams->uScreen_topL_X; | |
4450 viewparams->uSomeZ = viewparams->uScreen_BttmR_X; | |
4451 viewparams->uSomeW = viewparams->uScreen_BttmR_Y; | |
4452 | |
4453 pViewport->SetScreen(viewparams->uScreen_topL_X, viewparams->uScreen_topL_Y, viewparams->uScreen_BttmR_X, viewparams->uScreen_BttmR_Y); | |
0 | 4454 if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor ) |
1637 | 4455 pODMRenderParams->Initialize(); |
0 | 4456 } |
4457 | |
4458 //----- (00466C40) -------------------------------------------------------- | |
4459 const wchar_t *MENU_STATE_to_string(MENU_STATE m) | |
4460 { | |
4461 switch (m) | |
4462 { | |
982 | 4463 case -1: return L"-1"; |
4464 case MENU_MAIN: return L"MENU_MAIN"; | |
4465 case MENU_NEWGAME: return L"MENU_NEWGAME"; | |
4466 case MENU_CREDITS: return L"MENU_CREDITS"; | |
4467 case MENU_SAVELOAD: return L"MENU_SAVELOAD"; | |
4468 case MENU_EXIT_GAME: return L"MENU_EXIT_GAME"; | |
4469 case MENU_5: return L"MENU_5"; | |
4470 case MENU_CREATEPARTY: return L"MENU_CREATEPARTY"; | |
165 | 4471 case MENU_NAMEPANELESC: return L"MENU_NAMEPANELESC"; |
982 | 4472 case MENU_CREDITSPROC: return L"MENU_CREDITSPROC"; |
961 | 4473 case MENU_LoadingProcInMainMenu: return L"MENU_LoadingProcInMainMenu"; |
1458 | 4474 case MENU_DebugBLVLevel: return L"MENU_DebugBLVLevel"; |
165 | 4475 case MENU_CREDITSCLOSE: return L"MENU_CREDITSCLOSE"; |
982 | 4476 default: return L"unk"; |
0 | 4477 }; |
4478 }; | |
4479 void SetCurrentMenuID(MENU_STATE uMenu) | |
4480 { | |
2006 | 4481 sCurrentMenuID = uMenu; |
0 | 4482 |
4483 Log::Warning(L"CurrentMenu = %s", MENU_STATE_to_string(uMenu)); | |
4484 } | |
4485 | |
4486 //----- (00466CA0) -------------------------------------------------------- | |
4487 MENU_STATE GetCurrentMenuID() | |
4488 { | |
2006 | 4489 return sCurrentMenuID; |
0 | 4490 } |
4491 | |
4492 | |
4493 //----- (0046A89E) -------------------------------------------------------- | |
1459 | 4494 int __fastcall _46A89E_immolation_effect(int a1, int a2, int a3) |
0 | 4495 { |
4496 int v5; // ebx@3 | |
4497 int v6; // eax@3 | |
4498 int v7; // ebx@3 | |
4499 unsigned int v8; // ecx@3 | |
4500 int v9; // edx@4 | |
4501 unsigned int v10; // edx@6 | |
4502 unsigned int v11; // edx@8 | |
4503 int v13; // ecx@15 | |
4504 int v17; // [sp+Ch] [bp-10h]@3 | |
4505 int v18; // [sp+10h] [bp-Ch]@3 | |
4506 int v19; // [sp+18h] [bp-4h]@1 | |
4507 | |
4508 v19 = 0; | |
2101 | 4509 for ( uint i = 0; i < (signed int)uNumActors; ++i ) |
0 | 4510 { |
2101 | 4511 v5 = abs(pActors[i].vPosition.x - pParty->vPosition.x); |
4512 v17 = abs(pActors[i].vPosition.y - pParty->vPosition.y); | |
4513 v18 = abs(pActors[i].vPosition.z - pParty->vPosition.z); | |
2235
6ab7d7c112bb
adding int_get_vector_length calls where the calls were inlined
Grumpy7
parents:
2219
diff
changeset
|
4514 if ( int_get_vector_length(v5, v17, v18) <= a3 ) |
2101 | 4515 { |
4516 if ( pActors[i].uAIState != Dead && pActors[i].uAIState != Dying && pActors[i].uAIState != Removed | |
4517 && pActors[i].uAIState != Disabled && pActors[i].uAIState != Summoned ) | |
0 | 4518 { |
2101 | 4519 __debugbreak();// *(int *)(a1 + 4 * v13) = i; ÷òî ýòî òàêîå? |
4520 v13 = v19++; | |
4521 *(int *)(a1 + 4 * v13) = i; | |
4522 if ( v19 >= a2 - 1 ) | |
4523 break; | |
0 | 4524 } |
4525 } | |
4526 } | |
4527 return v19; | |
4528 } | |
4529 | |
4530 //----- (0046BDA8) -------------------------------------------------------- | |
1458 | 4531 unsigned int GetGravityStrength() |
0 | 4532 { |
4533 int v0; // eax@1 | |
4534 | |
4535 v0 = ~LOBYTE(pGame->uFlags2) & 8; | |
4536 LOBYTE(v0) = v0 | 2; | |
4537 return (unsigned int)v0 >> 1; | |
4538 } | |
4539 | |
4540 //----- (0046BDC0) -------------------------------------------------------- | |
1458 | 4541 void UpdateUserInput_and_MapSpecificStuff() |
0 | 4542 { |
2061 | 4543 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME) |
0 | 4544 { |
2061 | 4545 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME; |
4546 return; | |
0 | 4547 } |
2061 | 4548 |
630 | 4549 if (uCurrentlyLoadedLevelType == LEVEL_Indoor) |
0 | 4550 BLV_UpdateUserInputAndOther(); |
630 | 4551 else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) |
0 | 4552 ODM_UpdateUserInputAndOther(); |
630 | 4553 |
783 | 4554 area_of_effect__damage_evaluate(); |
0 | 4555 } |
4556 | |
4557 //----- (0046BFFA) -------------------------------------------------------- | |
4558 bool __fastcall _46BFFA_check_object_intercept(unsigned int uLayingItemID, signed int a2) | |
4559 { | |
2101 | 4560 ObjectDesc *object; // ebx@1 |
0 | 4561 unsigned int v8; // eax@19 |
4562 signed int v10; // ebx@19 | |
4563 char *v11; // edx@20 | |
4564 unsigned __int16 v12; // ax@23 | |
4565 int v13; // eax@27 | |
4566 unsigned int v14; // ebx@33 | |
4567 int v16; // eax@36 | |
4568 unsigned int v17; // eax@37 | |
4569 __int16 v18; // di@37 | |
4570 signed int v19; // edx@37 | |
4571 unsigned __int8 v20; // sf@37 | |
4572 char *v21; // ecx@38 | |
4573 unsigned __int16 v22; // ax@41 | |
4574 unsigned int v23; // eax@46 | |
4575 signed int v24; // ebx@46 | |
4576 char *v25; // edx@47 | |
4577 int v26; // edx@54 | |
4578 int v27; // edx@55 | |
4579 int v28; // edx@56 | |
4580 int v29; // edx@57 | |
4581 unsigned __int16 v30; // ax@60 | |
4582 unsigned int v31; // ecx@60 | |
4583 int v32; // edi@60 | |
4584 unsigned int v33; // eax@65 | |
4585 signed int v34; // edx@65 | |
4586 char *v35; // ecx@66 | |
4587 unsigned __int16 v36; // ax@69 | |
4588 int v37; // ST14_4@72 | |
4589 int v38; // eax@72 | |
4590 int v39; // ST10_4@72 | |
4591 int v40; // ST0C_4@72 | |
4592 int v41; // edx@76 | |
4593 int v42; // edx@77 | |
4594 int v43; // edx@78 | |
4595 unsigned __int8 v44; // zf@79 | |
4596 int v45; // edx@79 | |
4597 unsigned __int16 v46; // ax@80 | |
4598 int v47; // eax@81 | |
4599 int v48; // edx@87 | |
4600 int v49; // edx@88 | |
4601 int v50; // edx@89 | |
4602 signed int v52; // ebx@93 | |
4603 char *v53; // edx@94 | |
4604 unsigned __int16 v54; // ax@98 | |
4605 unsigned int v55; // ecx@98 | |
4606 signed int v56; // ebx@98 | |
4607 char *v57; // edx@99 | |
4608 unsigned __int16 v58; // ax@102 | |
4609 unsigned __int16 v59; // ax@107 | |
4610 unsigned int v60; // ecx@107 | |
4611 signed int v61; // ebx@107 | |
4612 char *v62; // edx@108 | |
4613 unsigned __int16 v63; // ax@111 | |
4614 int v64; // ebx@114 | |
4615 signed int v65; // eax@114 | |
4616 unsigned int v66; // edi@123 | |
4617 unsigned __int16 v67; // ax@124 | |
4618 unsigned int v68; // ecx@124 | |
4619 signed int v69; // ebx@124 | |
4620 char *v70; // edx@125 | |
4621 unsigned __int16 v71; // ax@128 | |
4622 unsigned int v72; // ebx@131 | |
4623 int v78; // eax@133 | |
4624 char v79; // zf@139 | |
4625 unsigned int v80; // eax@140 | |
4626 signed int v81; // edx@140 | |
4627 char *v82; // ecx@141 | |
4628 unsigned __int16 v83; // ax@144 | |
4629 unsigned __int16 v84; // ax@151 | |
4630 unsigned int v85; // ecx@151 | |
4631 signed int v86; // ebx@151 | |
4632 char *v87; // edx@152 | |
4633 unsigned __int16 v88; // ax@155 | |
4634 unsigned int v89; // eax@158 | |
4635 int v90; // ST34_4@159 | |
4636 int v91; // eax@159 | |
4637 unsigned int v92; // eax@163 | |
4638 unsigned int v93; // eax@177 | |
4639 char *v94; // ecx@178 | |
4640 unsigned __int16 v95; // ax@181 | |
4641 unsigned __int16 v96; // ax@184 | |
4642 int v97; // eax@185 | |
4643 unsigned __int16 v98; // ax@191 | |
4644 char v100; // ST18_1@198 | |
4645 int v102; // eax@198 | |
4646 signed int v106; // eax@208 | |
4647 unsigned int v107; // edx@220 | |
4648 signed int v108; // ebx@225 | |
4649 unsigned int v109; // eax@234 | |
4650 signed int v110; // ebx@234 | |
4651 char *v111; // ecx@235 | |
4652 unsigned __int16 v112; // ax@238 | |
4653 unsigned __int16 v113; // si@241 | |
4654 int v114; // eax@242 | |
4655 int v115; // eax@245 | |
4656 unsigned __int16 v117; // ax@251 | |
4657 unsigned int v118; // ecx@251 | |
4658 signed int v119; // ebx@251 | |
4659 char *v120; // edx@252 | |
4660 unsigned __int16 v121; // ax@255 | |
4661 unsigned int v122; // eax@260 | |
4662 char *v123; // edx@261 | |
4663 int v124; // eax@267 | |
4664 int v125; // [sp-20h] [bp-4Ch]@28 | |
4665 char v132; // [sp-8h] [bp-34h]@131 | |
4666 char v134; // [sp-4h] [bp-30h]@131 | |
4667 signed int v135; // [sp-4h] [bp-30h]@217 | |
4668 int v136; // [sp+Ch] [bp-20h]@208 | |
4669 int v137; // [sp+10h] [bp-1Ch]@208 | |
4670 signed int v138; // [sp+14h] [bp-18h]@207 | |
4671 signed int v139; // [sp+18h] [bp-14h]@208 | |
4672 char *v140; // [sp+1Ch] [bp-10h]@61 | |
4673 signed int v141; // [sp+1Ch] [bp-10h]@117 | |
4674 unsigned int v142; // [sp+1Ch] [bp-10h]@158 | |
4675 signed int v143; // [sp+1Ch] [bp-10h]@172 | |
4676 char *v144; // [sp+1Ch] [bp-10h]@192 | |
4677 signed int v146; // [sp+20h] [bp-Ch]@60 | |
4678 int v147; // [sp+20h] [bp-Ch]@72 | |
4679 signed int v148; // [sp+20h] [bp-Ch]@158 | |
4680 unsigned __int16 v150; // [sp+20h] [bp-Ch]@208 | |
4681 signed int v152; // [sp+24h] [bp-8h]@208 | |
2101 | 4682 |
4683 //ïðèìåíåíèå: ôàåðáîëò â õðàìå ëóíû | |
4684 object = &pObjectList->pObjects[pSpriteObjects[uLayingItemID].uObjectDescID]; | |
4685 //v151 = PID_TYPE(a2); | |
848 | 4686 if ( PID_TYPE(a2) == OBJECT_Actor) |
4687 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4688 if ( PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Actor |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4689 && !pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].GetActorsRelation(&pActors[PID_ID(a2)]) ) |
0 | 4690 return 1; |
4691 } | |
4692 else | |
4693 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4694 if ( PID_TYPE(a2) == OBJECT_Player && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Player) |
0 | 4695 return 1; |
4696 } | |
4697 if ( pParty->bTurnBasedModeOn == 1 ) | |
4698 { | |
2101 | 4699 if ( pSpriteObjects[uLayingItemID].uAttributes & 4 ) |
0 | 4700 { |
1450 | 4701 --pTurnEngine->pending_actions; |
2101 | 4702 pSpriteObjects[uLayingItemID].uAttributes &= 0xFFFB; |
0 | 4703 } |
4704 } | |
2101 | 4705 if ( PID_TYPE(a2) == OBJECT_BModel && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) != OBJECT_Player) |
1280 | 4706 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4707 if (PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid) < 500) //bugfix PID_ID(v2->spell_caster_pid)==1000 |
2166 | 4708 pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].uAttributes |= 0x40000; |
1280 | 4709 } |
4710 | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4711 //v6 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4712 //v7 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4713 if ( pSpriteObjects[uLayingItemID].uType > 3060 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4714 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4715 if ( pSpriteObjects[uLayingItemID].uType > 6090 ) |
0 | 4716 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4717 if ( pSpriteObjects[uLayingItemID].uType > 8090 ) |
0 | 4718 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4719 if ( pSpriteObjects[uLayingItemID].uType == 9010 ) |
0 | 4720 goto LABEL_247; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4721 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 4722 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4723 if ( pSpriteObjects[uLayingItemID].uType != 9040 ) |
0 | 4724 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4725 if ( pSpriteObjects[uLayingItemID].uType != 9080 ) |
0 | 4726 return 0; |
2101 | 4727 v95 = 0; |
4728 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
4729 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 4730 { |
2101 | 4731 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
4732 v95 = v146; | |
0 | 4733 } |
2101 | 4734 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
4735 if ( !v95 ) | |
4736 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4737 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 4738 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
4739 v102 = 8 * uLayingItemID; | |
4740 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
4741 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4742 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4743 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4744 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
4745 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
4746 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
4747 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4748 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4749 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4750 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4751 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 4752 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4753 return 0; |
0 | 4754 } |
2101 | 4755 sub_43A97E(uLayingItemID, a2); |
4756 ++pSpriteObjects[uLayingItemID].uType; | |
4757 v95 = 0; | |
4758 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4759 { | |
4760 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4761 v95 = v52; | |
4762 } | |
4763 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4764 if ( !v95 ) | |
4765 SpriteObject::OnInteraction(uLayingItemID); | |
4766 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4767 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4768 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4769 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4770 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4771 if ( !v96 ) | |
4772 v97 = 0; | |
4773 else | |
4774 v97 = (signed __int16)v96 + 4; | |
4775 v124 = 8 * uLayingItemID; | |
4776 LOBYTE(v124) = v124 | 2; | |
4777 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4778 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4779 return 0; | |
0 | 4780 } |
4781 LABEL_172: | |
4782 v143 = 17030; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4783 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 4784 { |
4785 case 0x1798u: | |
4786 v143 = 15040; | |
4787 break; | |
4788 case 0xFAAu: | |
4789 v143 = 13010; | |
4790 break; | |
4791 case 0x2346u: | |
4792 v143 = 18030; | |
4793 break; | |
4794 } | |
4795 v138 = 1; | |
2101 | 4796 if ( PID_TYPE(a2) != OBJECT_Actor) |
0 | 4797 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4798 if ( pSpriteObjects[uLayingItemID].uType != 9030 || pSpriteObjects[uLayingItemID].spell_skill != 4 ) |
2101 | 4799 { |
4800 SpriteObject::OnInteraction(uLayingItemID); | |
4801 return 0; | |
4802 } | |
4803 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); | |
0 | 4804 LABEL_233: |
4805 if ( !v138 ) | |
4806 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4807 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 4808 v112 = 0; |
4809 for ( v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110 ) | |
0 | 4810 { |
2101 | 4811 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID ) |
4812 v112 = v110; | |
0 | 4813 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4814 pSpriteObjects[uLayingItemID].uObjectDescID = v112; |
0 | 4815 if ( !v112 ) |
2101 | 4816 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4817 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4818 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4819 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4820 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4821 v113 = pSpriteObjects[uLayingItemID].uSoundID; |
0 | 4822 if ( v113 ) |
4823 v114 = (signed __int16)v113 + 4; | |
4824 else | |
4825 v114 = 0; | |
2101 | 4826 v115 = 8 * uLayingItemID; |
4827 LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4828 v125 = v143 + 1; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4829 pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4830 return 0; |
0 | 4831 } |
2101 | 4832 SpriteObject::OnInteraction(uLayingItemID); |
0 | 4833 return 0; |
4834 } | |
2101 | 4835 v106 = a2; |
0 | 4836 v150 = 0; |
848 | 4837 v139 = PID_ID(v106); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4838 v137 = pSpriteObjects[uLayingItemID].spell_level; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4839 v152 = pSpriteObjects[uLayingItemID].spell_skill; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4840 v136 = pSpriteObjects[uLayingItemID].spell_id; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4841 if ( pSpriteObjects[uLayingItemID].uType == 9030 ) |
0 | 4842 { |
4843 v150 = 2; | |
4844 if ( v152 == 2 ) | |
4845 { | |
4846 v150 = 3; | |
4847 } | |
4848 else | |
4849 { | |
4850 if ( v152 >= 3 ) | |
4851 v150 = 4; | |
4852 } | |
2166 | 4853 pActors[v139].uAttributes |= 0x80000; |
0 | 4854 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4855 if ( pSpriteObjects[uLayingItemID].uType == 6040 ) |
0 | 4856 { |
4857 v135 = 7; | |
4858 } | |
4859 else | |
4860 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4861 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 4862 { |
4863 v135 = 9; | |
4864 } | |
4865 else | |
4866 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4867 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 4868 { |
4869 v107 = v136; | |
4870 LABEL_222: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4871 if ( pSpriteObjects[uLayingItemID].uType != 9030 || v152 != 4 ) |
0 | 4872 { |
4873 v108 = v139; | |
4874 if ( stru_50C198.GetMagicalResistance(&pActors[v139], v107) ) | |
4875 { | |
4876 v138 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4877 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 4878 { |
4879 pActors[v108].uAIState = Standing; | |
4880 pActors[v108].UpdateAnimation(); | |
4881 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4882 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
|
4883 v152, v150, 0, 0); |
0 | 4884 } |
4885 } | |
4886 else | |
4887 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4888 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); |
0 | 4889 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4890 pSpriteObjects[uLayingItemID].spell_level = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4891 pSpriteObjects[uLayingItemID].spell_skill = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4892 pSpriteObjects[uLayingItemID].spell_id = 0; |
0 | 4893 goto LABEL_233; |
4894 } | |
4895 v135 = 10; | |
4896 } | |
4897 } | |
4898 v107 = v135; | |
4899 goto LABEL_222; | |
4900 } | |
2101 | 4901 if ( pSpriteObjects[uLayingItemID].uType == 8090 |
4902 || pSpriteObjects[uLayingItemID].uType == 7030 | |
4903 || pSpriteObjects[uLayingItemID].uType == 7090 || pSpriteObjects[uLayingItemID].uType == 8000 ) | |
4904 { | |
4905 sub_43A97E(uLayingItemID, a2); | |
4906 ++pSpriteObjects[uLayingItemID].uType; | |
4907 v95 = 0; | |
4908 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4909 { | |
4910 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4911 v95 = v52; | |
4912 } | |
4913 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4914 if ( !v95 ) | |
4915 SpriteObject::OnInteraction(uLayingItemID); | |
4916 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4917 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4918 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4919 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4920 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4921 if ( !v96 ) | |
4922 v97 = 0; | |
4923 else | |
4924 v97 = (signed __int16)v96 + 4; | |
4925 v124 = 8 * uLayingItemID; | |
4926 LOBYTE(v124) = v124 | 2; | |
4927 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4928 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4929 return 0; | |
4930 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4931 if ( pSpriteObjects[uLayingItemID].uType == 8010 ) |
0 | 4932 { |
2101 | 4933 if ( PID_TYPE(a2) == 3 |
4934 && MonsterStats::BelongsToSupertype(pActors[PID_ID(a2)].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) ) | |
4935 sub_43A97E(uLayingItemID, a2); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4936 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 4937 //v9 = 0; |
4938 v95 = 0; | |
4939 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 4940 { |
2101 | 4941 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
4942 v95 = v52; | |
0 | 4943 } |
2101 | 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 v92 = uLayingItemID; | |
4957 v124 = 8 * v92; | |
4958 LOBYTE(v124) = v124 | 2; | |
4959 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4960 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4961 return 0; | |
0 | 4962 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4963 v79 = pSpriteObjects[uLayingItemID].uType == 8030; |
0 | 4964 } |
4965 else | |
4966 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4967 if ( pSpriteObjects[uLayingItemID].uType == 6090 ) |
2101 | 4968 { |
4969 sub_43A97E(uLayingItemID, a2); | |
4970 ++pSpriteObjects[uLayingItemID].uType; | |
4971 v95 = 0; | |
4972 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4973 { | |
4974 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4975 v95 = v52; | |
4976 } | |
4977 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4978 if ( !v95 ) | |
4979 SpriteObject::OnInteraction(uLayingItemID); | |
4980 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4981 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4982 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4983 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4984 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4985 if ( !v96 ) | |
4986 v97 = 0; | |
4987 else | |
4988 v97 = (signed __int16)v96 + 4; | |
4989 v124 = 8 * uLayingItemID; | |
4990 LOBYTE(v124) = v124 | 2; | |
4991 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4992 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4993 return 0; | |
4994 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4995 if ( pSpriteObjects[uLayingItemID].uType <= 4070 ) |
0 | 4996 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4997 if ( pSpriteObjects[uLayingItemID].uType != 4070 ) |
0 | 4998 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4999 v48 = pSpriteObjects[uLayingItemID].uType - 3090; |
0 | 5000 if ( v48 ) |
5001 { | |
5002 v49 = v48 - 2; | |
5003 if ( v49 ) | |
5004 { | |
5005 v50 = v49 - 908; | |
2101 | 5006 if ( v49 == 908 ) |
5007 { | |
5008 sub_43A97E(uLayingItemID, a2); | |
5009 ++pSpriteObjects[uLayingItemID].uType; | |
5010 v95 = 0; | |
5011 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5012 { | |
5013 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5014 v95 = v52; | |
5015 } | |
5016 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5017 if ( !v95 ) | |
5018 SpriteObject::OnInteraction(uLayingItemID); | |
5019 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5020 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5021 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5022 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5023 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5024 if ( !v96 ) | |
5025 v97 = 0; | |
5026 else | |
5027 v97 = (signed __int16)v96 + 4; | |
5028 v124 = 8 * uLayingItemID; | |
5029 LOBYTE(v124) = v124 | 2; | |
5030 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5031 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5032 return 0; | |
5033 } | |
0 | 5034 v45 = v50 - 30; |
5035 v44 = v45 == 0; | |
5036 goto LABEL_91; | |
5037 } | |
2101 | 5038 //v9 = 0; |
5039 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType - 1; | |
5040 v58 = 0; | |
5041 for ( v56 = 0; v56 < (signed int)pObjectList->uNumObjects; ++v56 ) | |
0 | 5042 { |
2101 | 5043 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v56].uObjectID ) |
5044 v58 = v56; | |
0 | 5045 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5046 pSpriteObjects[uLayingItemID].uObjectDescID = v58; |
0 | 5047 if ( !v58 ) |
2101 | 5048 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5049 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5050 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5051 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5052 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5053 sub_43A97E(uLayingItemID, a2); |
5054 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
0 | 5055 v16 = 0; |
5056 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5057 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5058 v124 = 8 * uLayingItemID; |
0 | 5059 LOBYTE(v124) = v124 | 2; |
1456 | 5060 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5061 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5062 return 0; |
0 | 5063 } |
2101 | 5064 //v9 = 0; |
5065 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5066 v63 = 0; | |
5067 for ( v61 = 0; v61 < (signed int)pObjectList->uNumObjects; ++v61 ) | |
0 | 5068 { |
2101 | 5069 if ( v59 == pObjectList->pObjects[v61].uObjectID ) |
5070 v63 = v61; | |
0 | 5071 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5072 pSpriteObjects[uLayingItemID].uObjectDescID = v63; |
0 | 5073 if ( !v63 ) |
2101 | 5074 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5075 v64 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5076 v44 = pSpriteObjects[uLayingItemID].spell_skill == 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5077 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5078 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5079 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5080 v65 = 7; |
5081 if ( v44 ) | |
5082 v65 = 9; | |
5083 if ( v65 > 0 ) | |
5084 { | |
5085 v141 = v65; | |
5086 do | |
5087 { | |
2101 | 5088 v64 += (signed int)stru_5C6E00->uIntegerHalfPi / 2; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5089 pSpriteObjects[uLayingItemID].Create(v64, 0, 1000, 0); |
0 | 5090 --v141; |
5091 } | |
5092 while ( v141 ); | |
5093 } | |
2101 | 5094 SpriteObject::OnInteraction(uLayingItemID); |
5095 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5096 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5097 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5098 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5099 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5100 LOBYTE(v124) = v124 | 2; |
1456 | 5101 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5102 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5103 return 0; |
0 | 5104 } |
2101 | 5105 //v66 = 0; |
5106 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5107 return 1; |
2101 | 5108 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5109 v71 = 0; | |
5110 for ( v69 = 0; v69 < (signed int)pObjectList->uNumObjects; ++v69 ) | |
0 | 5111 { |
2101 | 5112 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v69].uObjectID ) |
5113 v71 = v69; | |
0 | 5114 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5115 pSpriteObjects[uLayingItemID].uObjectDescID = v71; |
0 | 5116 if ( !v71 ) |
2101 | 5117 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5118 v134 = 0; |
2101 | 5119 v72 = uLayingItemID; |
0 | 5120 v132 = 0; |
2101 | 5121 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5122 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5123 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5124 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2059 | 5125 AttackerInfo.Add(PID(OBJECT_Item,v72), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5126 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
0 | 5127 v78 = 0; |
5128 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5129 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5130 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2185 | 5131 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
|
5132 return 0; |
0 | 5133 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5134 if ( pSpriteObjects[uLayingItemID].uType == 4090 ) |
0 | 5135 { |
2101 | 5136 //v9 = 0; |
5137 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5138 v88 = 0; | |
5139 for ( v86 = 0; v86 < (signed int)pObjectList->uNumObjects; ++v86 ) | |
0 | 5140 { |
2101 | 5141 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v86].uObjectID ) |
5142 v88 = v86; | |
0 | 5143 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5144 pSpriteObjects[uLayingItemID].uObjectDescID = v88; |
0 | 5145 if ( !v88 ) |
2101 | 5146 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5147 v89 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5148 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5149 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5150 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5151 v142 = v89; |
5152 v148 = 7; | |
5153 do | |
5154 { | |
5155 pRnd->SetRange(-128, 128); | |
5156 v90 = pRnd->GetInRange(); | |
5157 pRnd->SetRange(5, 500); | |
5158 v91 = pRnd->GetInRange(); | |
5159 v142 += (signed int)stru_5C6E00->uIntegerHalfPi >> 1; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5160 pSpriteObjects[uLayingItemID].Create(v90 + v142, 0, v91, 0); |
0 | 5161 --v148; |
5162 } | |
5163 while ( v148 ); | |
2101 | 5164 SpriteObject::OnInteraction(uLayingItemID); |
5165 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5166 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5167 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5168 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5169 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5170 LOBYTE(v124) = v124 | 2; |
1456 | 5171 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id-1] + 1; |
2101 | 5172 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5173 return 0; |
0 | 5174 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5175 if ( pSpriteObjects[uLayingItemID].uType == 4092 ) |
0 | 5176 { |
2101 | 5177 //v66 = 0; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5178 pSpriteObjects[uLayingItemID].uType = 4091; |
2101 | 5179 v83 = 0; |
5180 for ( v81 = 0; v81 < (signed int)pObjectList->uNumObjects; ++v81 ) | |
0 | 5181 { |
2101 | 5182 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v81].uObjectID ) |
5183 v83 = v81; | |
0 | 5184 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5185 pSpriteObjects[uLayingItemID].uObjectDescID = v83; |
0 | 5186 if ( !v83 ) |
2101 | 5187 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5188 v134 = 0; |
2102 | 5189 //v72 = uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5190 v132 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5191 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5192 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5193 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5194 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2102 | 5195 AttackerInfo.Add(PID(OBJECT_Item, uLayingItemID), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5196 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5197 v78 = 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 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5200 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2102 | 5201 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
|
5202 return 0; |
0 | 5203 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5204 if ( pSpriteObjects[uLayingItemID].uType == 4100 || pSpriteObjects[uLayingItemID].uType == 6010 ) |
2101 | 5205 { |
5206 sub_43A97E(uLayingItemID, a2); | |
5207 ++pSpriteObjects[uLayingItemID].uType; | |
5208 v95 = 0; | |
5209 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5210 { | |
5211 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5212 v95 = v52; | |
5213 } | |
5214 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5215 if ( !v95 ) | |
5216 SpriteObject::OnInteraction(uLayingItemID); | |
5217 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5218 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5219 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5220 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5221 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5222 if ( !v96 ) | |
5223 v97 = 0; | |
5224 else | |
5225 v97 = (signed __int16)v96 + 4; | |
5226 v124 = 8 * uLayingItemID; | |
5227 LOBYTE(v124) = v124 | 2; | |
5228 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5229 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5230 return 0; | |
5231 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5232 v79 = pSpriteObjects[uLayingItemID].uType == 6040; |
0 | 5233 } |
5234 if ( !v79 ) | |
5235 return 0; | |
5236 goto LABEL_172; | |
5237 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5238 if ( pSpriteObjects[uLayingItemID].uType == 3060 ) |
2101 | 5239 { |
5240 sub_43A97E(uLayingItemID, a2); | |
5241 ++pSpriteObjects[uLayingItemID].uType; | |
5242 v95 = 0; | |
5243 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5244 { | |
5245 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5246 v95 = v52; | |
5247 } | |
5248 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5249 if ( !v95 ) | |
5250 SpriteObject::OnInteraction(uLayingItemID); | |
5251 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5252 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5253 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5254 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5255 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5256 if ( !v96 ) | |
5257 v97 = 0; | |
5258 else | |
5259 v97 = (signed __int16)v96 + 4; | |
5260 v124 = 8 * uLayingItemID; | |
5261 LOBYTE(v124) = v124 | 2; | |
5262 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5263 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5264 return 0; | |
5265 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5266 if ( pSpriteObjects[uLayingItemID].uType <= 555 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5267 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5268 if ( pSpriteObjects[uLayingItemID].uType == 555 ) |
0 | 5269 { |
2101 | 5270 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5271 ++pSpriteObjects[uLayingItemID].uType; |
0 | 5272 v18 = 0; |
2101 | 5273 v22 = 0; |
5274 v25 = (char *)&pObjectList->pObjects->uObjectID; | |
5275 for ( v24 = 0; v24 < (signed int)pObjectList->uNumObjects; ++v24 ) | |
0 | 5276 { |
2101 | 5277 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v24].uObjectID ) |
5278 v22 = v24; | |
0 | 5279 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5280 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
0 | 5281 if ( v22 == v18 ) |
2101 | 5282 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5283 pSpriteObjects[uLayingItemID].vVelocity.z = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5284 pSpriteObjects[uLayingItemID].vVelocity.y = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5285 pSpriteObjects[uLayingItemID].vVelocity.x = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5286 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; |
0 | 5287 } |
5288 else | |
5289 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5290 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 5291 { |
5292 case 500: | |
5293 case 505: | |
5294 case 510: | |
5295 case 515: | |
5296 case 520: | |
5297 case 525: | |
5298 case 530: | |
5299 case 535: | |
5300 case 540: | |
2101 | 5301 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5302 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5303 v12 = 0; |
5304 for ( v10 = 0; v10 < (signed int)pObjectList->uNumObjects; ++v10 ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5305 { |
2101 | 5306 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v10].uObjectID ) |
5307 v12 = v10; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5308 } |
2101 | 5309 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
5310 if ( !v12 ) | |
5311 SpriteObject::OnInteraction(uLayingItemID); | |
5312 v44 = pSpriteObjects[uLayingItemID].uType == 555; | |
5313 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5314 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5315 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5316 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5317 if ( !v44 ) | |
5318 { | |
5319 v13 = 8 * uLayingItemID; | |
5320 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5321 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
5322 } | |
5323 return 0; | |
0 | 5324 case 545: |
5325 case 550: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5326 if ( pSpriteObjects[uLayingItemID].stru_24.uItemID != 405 && pSpriteObjects[uLayingItemID].stru_24.uSpecEnchantmentType != 3 ) |
0 | 5327 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5328 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5329 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5330 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5331 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5332 sub_43A97E(uLayingItemID, a2); |
5333 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5334 if ( pSpriteObjects[uLayingItemID].uSoundID == 0 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5335 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5336 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5337 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5338 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5339 LOBYTE(v124) = v124 | 2; |
1996 | 5340 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5341 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5342 return 0; |
0 | 5343 } |
5344 v18 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5345 pSpriteObjects[uLayingItemID].uType = 600; |
2101 | 5346 v22 = 0; |
5347 for ( v19 = 0; v19 < (signed int)pObjectList->uNumObjects; ++v19 ) | |
0 | 5348 { |
2101 | 5349 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v19].uObjectID ) |
5350 v22 = v19; | |
0 | 5351 } |
2101 | 5352 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
5353 if ( !v22 ) | |
5354 SpriteObject::OnInteraction(uLayingItemID); | |
5355 pSpriteObjects[uLayingItemID].vVelocity.z = v18; | |
5356 pSpriteObjects[uLayingItemID].vVelocity.y = v18; | |
5357 pSpriteObjects[uLayingItemID].vVelocity.x = v18; | |
5358 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; | |
0 | 5359 default: |
5360 return 0; | |
5361 } | |
2101 | 5362 v12 = 0; |
5363 for ( v10; v10 < (signed int)v8; ++v10 ) | |
0 | 5364 { |
5365 v11 += 56; | |
2101 | 5366 if ( pSpriteObjects[uLayingItemID].uType != *(short *)v11 ) |
5367 v12 = v10; | |
0 | 5368 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5369 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
0 | 5370 if ( !v12 ) |
2101 | 5371 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5372 v44 = pSpriteObjects[uLayingItemID].uType == 555; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5373 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5374 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5375 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5376 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5377 if ( !v44 ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5378 { |
2101 | 5379 v13 = 8 * uLayingItemID; |
5380 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5381 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5382 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5383 } |
0 | 5384 } |
5385 return 0; | |
5386 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5387 if ( pSpriteObjects[uLayingItemID].uType > 1100 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5388 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5389 v41 = pSpriteObjects[uLayingItemID].uType - 2030; |
0 | 5390 if ( !v41 ) |
5391 goto LABEL_247; | |
5392 v42 = v41 - 30; | |
5393 if ( v42 ) | |
5394 { | |
5395 v43 = v42 - 40; | |
2101 | 5396 if ( v42 == 40 ) |
5397 { | |
5398 if ( PID_TYPE(a2) != 3 ) | |
5399 { | |
5400 //v32 = 0; | |
5401 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5402 v46 = 0; | |
5403 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5404 { | |
5405 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5406 v46 = v146; | |
5407 } | |
5408 pSpriteObjects[uLayingItemID].uObjectDescID = v46; | |
5409 if ( !v46 ) | |
5410 SpriteObject::OnInteraction(uLayingItemID); | |
5411 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5412 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5413 v102 = 8 * uLayingItemID; | |
5414 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5415 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5416 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5417 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5418 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5419 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5420 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5421 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5422 v47 = 0; | |
5423 else | |
5424 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5425 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5426 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5427 return 0; | |
5428 } | |
5429 return 1; | |
5430 } | |
0 | 5431 v45 = v43 - 910; |
5432 v44 = v45 == 0; | |
5433 LABEL_91: | |
5434 if ( !v44 && v45 != 20 ) | |
5435 return 0; | |
5436 } | |
2101 | 5437 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5438 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5439 v95 = 0; |
5440 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5441 { |
2101 | 5442 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5443 v95 = v52; | |
0 | 5444 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5445 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
2101 | 5446 if ( !v95 ) |
5447 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5448 v96 = pSpriteObjects[uLayingItemID].uSoundID; |
2101 | 5449 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5450 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5451 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5452 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5453 if ( !v96 ) | |
0 | 5454 v97 = 0; |
5455 else | |
5456 v97 = (signed __int16)v96 + 4; | |
2101 | 5457 v124 = 8 * uLayingItemID; |
5458 LOBYTE(v124) = v124 | 2; | |
5459 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5460 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5461 return 0; | |
5462 } | |
5463 if ( pSpriteObjects[uLayingItemID].uType == 1100 ) | |
5464 { | |
5465 sub_43A97E(uLayingItemID, a2); | |
5466 ++pSpriteObjects[uLayingItemID].uType; | |
5467 v95 = 0; | |
5468 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5469 { | |
5470 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5471 v95 = v52; | |
5472 } | |
5473 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5474 if ( !v95 ) | |
5475 SpriteObject::OnInteraction(uLayingItemID); | |
5476 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5477 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5478 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5479 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5480 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5481 if ( !v96 ) | |
5482 v97 = 0; | |
5483 else | |
5484 v97 = (signed __int16)v96 + 4; | |
5485 v92 = uLayingItemID; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5486 v124 = 8 * v92; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5487 LOBYTE(v124) = v124 | 2; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5488 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5489 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5490 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5491 } |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5492 v26 = pSpriteObjects[uLayingItemID].uType - 600; |
2101 | 5493 if ( pSpriteObjects[uLayingItemID].uType == 600 ) |
0 | 5494 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5495 pSpriteObjects[uLayingItemID].uType = 601; |
2101 | 5496 v36 = 0; |
5497 for ( v34 = 0; v34 < (signed int)pObjectList->uNumObjects; ++v34 ) | |
0 | 5498 { |
2101 | 5499 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v34].uObjectID ) |
5500 v36 = v34; | |
0 | 5501 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5502 pSpriteObjects[uLayingItemID].uObjectDescID = v36; |
0 | 5503 if ( !v36 ) |
2101 | 5504 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5505 v37 = pSpriteObjects[uLayingItemID].vPosition.z; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5506 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
2101 | 5507 v38 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5508 v39 = pSpriteObjects[uLayingItemID].vPosition.y; |
2101 | 5509 LOBYTE(v38) = PID(OBJECT_Item, uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5510 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5511 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5512 v40 = pSpriteObjects[uLayingItemID].vPosition.x; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5513 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5514 v147 = v38; |
2059 | 5515 AttackerInfo.Add(v38, 512, v40, v39, v37, 0, 0); |
2101 | 5516 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) |
5517 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
|
5518 pAudioPlayer->PlaySound(SOUND_8, v147, 0, -1, 0, 0, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5519 return 0; |
0 | 5520 } |
5521 v27 = v26 - 410; | |
2101 | 5522 if ( v26 == 410 ) |
5523 { | |
5524 sub_43A97E(uLayingItemID, a2); | |
5525 ++pSpriteObjects[uLayingItemID].uType; | |
5526 v95 = 0; | |
5527 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5528 { | |
5529 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5530 v95 = v52; | |
5531 } | |
5532 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5533 if ( !v95 ) | |
5534 SpriteObject::OnInteraction(uLayingItemID); | |
5535 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5536 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5537 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5538 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5539 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5540 if ( !v96 ) | |
5541 v97 = 0; | |
5542 else | |
5543 v97 = (signed __int16)v96 + 4; | |
5544 v124 = 8 * uLayingItemID; | |
5545 LOBYTE(v124) = v124 | 2; | |
5546 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5547 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5548 return 0; | |
5549 } | |
0 | 5550 v28 = v27 - 40; |
5551 if ( !v28 ) | |
2101 | 5552 { |
5553 v95 = 0; | |
5554 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5555 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5556 { | |
5557 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5558 v95 = v146; | |
5559 } | |
5560 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5561 if ( !v95 ) | |
5562 SpriteObject::OnInteraction(uLayingItemID); | |
5563 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5564 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5565 v102 = 8 * uLayingItemID; | |
5566 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5567 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5568 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5569 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5570 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5571 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5572 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5573 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5574 v47 = 0; | |
5575 else | |
5576 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5577 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5578 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5579 return 0; | |
5580 } | |
0 | 5581 v29 = v28 - 10; |
5582 if ( v29 ) | |
5583 { | |
5584 if ( v29 != 20 ) | |
5585 return 0; | |
2101 | 5586 if ( PID_TYPE(a2) != 3 ) |
0 | 5587 { |
2101 | 5588 //v32 = 0; |
5589 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5590 v46 = 0; | |
5591 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 5592 { |
2101 | 5593 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
5594 v46 = v146; | |
0 | 5595 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5596 pSpriteObjects[uLayingItemID].uObjectDescID = v46; |
2101 | 5597 if ( !v46 ) |
5598 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5599 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5600 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
5601 v102 = 8 * uLayingItemID; | |
5602 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5603 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5604 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5605 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5606 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5607 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5608 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5609 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5610 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5611 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5612 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5613 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5614 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5615 return 0; |
0 | 5616 } |
5617 return 1; | |
5618 } | |
5619 LABEL_247: | |
2101 | 5620 //v9 = 0; |
5621 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5622 return 1; |
2101 | 5623 if ( PID_TYPE(a2) != 2 ) |
0 | 5624 { |
2101 | 5625 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5626 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5627 v95 = 0; |
5628 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5629 { |
2101 | 5630 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5631 v95 = v52; | |
0 | 5632 } |
2101 | 5633 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
5634 if ( !v95 ) | |
5635 SpriteObject::OnInteraction(uLayingItemID); | |
5636 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5637 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5638 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5639 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5640 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5641 v97 = 0; | |
5642 else | |
5643 v97 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5644 v124 = 8 * uLayingItemID; | |
5645 LOBYTE(v124) = v124 | 2; | |
5646 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5647 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5648 return 0; | |
0 | 5649 } |
2101 | 5650 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5651 v121 = 0; | |
5652 for ( v119 = 0; v119 < (signed int)pObjectList->uNumObjects; ++v119 ) | |
0 | 5653 { |
2101 | 5654 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v119].uObjectID ) |
5655 v121 = v119; | |
0 | 5656 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5657 pSpriteObjects[uLayingItemID].uObjectDescID = v121; |
0 | 5658 if ( !v121 ) |
2101 | 5659 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5660 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5661 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5662 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5663 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5664 v13 = 8 * uLayingItemID; |
5665 LOBYTE(v13) = PID(OBJECT_Item,uLayingItemID); | |
5666 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
0 | 5667 return 0; |
5668 } |