Mercurial > mm7
annotate mm7_2.cpp @ 2221:c69013c186c7
for video
author | Ritor1 |
---|---|
date | Tue, 18 Feb 2014 16:18:20 +0600 |
parents | e6771956e74a |
children | 6ab7d7c112bb |
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); | |
4514 v6 = v5; | |
4515 v7 = v17; | |
4516 v8 = v18; | |
4517 if ( v6 < v17 ) | |
0 | 4518 { |
2101 | 4519 v9 = v6; |
4520 v6 = v17; | |
4521 v7 = v9; | |
4522 } | |
4523 if ( v6 < v18 ) | |
4524 { | |
4525 v10 = v6; | |
4526 v6 = v18; | |
4527 v8 = v10; | |
4528 } | |
4529 if ( v7 < (signed int)v8 ) | |
4530 { | |
4531 v11 = v8; | |
4532 v8 = v7; | |
4533 v7 = v11; | |
4534 } | |
4535 if ( (signed int)(((unsigned int)(11 * v7) >> 5) + (v8 >> 2) + v6) <= a3 ) | |
4536 { | |
4537 if ( pActors[i].uAIState != Dead && pActors[i].uAIState != Dying && pActors[i].uAIState != Removed | |
4538 && pActors[i].uAIState != Disabled && pActors[i].uAIState != Summoned ) | |
0 | 4539 { |
2101 | 4540 __debugbreak();// *(int *)(a1 + 4 * v13) = i; ÷òî ýòî òàêîå? |
4541 v13 = v19++; | |
4542 *(int *)(a1 + 4 * v13) = i; | |
4543 if ( v19 >= a2 - 1 ) | |
4544 break; | |
0 | 4545 } |
4546 } | |
4547 } | |
4548 return v19; | |
4549 } | |
4550 | |
4551 //----- (0046BDA8) -------------------------------------------------------- | |
1458 | 4552 unsigned int GetGravityStrength() |
0 | 4553 { |
4554 int v0; // eax@1 | |
4555 | |
4556 v0 = ~LOBYTE(pGame->uFlags2) & 8; | |
4557 LOBYTE(v0) = v0 | 2; | |
4558 return (unsigned int)v0 >> 1; | |
4559 } | |
4560 | |
4561 //----- (0046BDC0) -------------------------------------------------------- | |
1458 | 4562 void UpdateUserInput_and_MapSpecificStuff() |
0 | 4563 { |
2061 | 4564 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME) |
0 | 4565 { |
2061 | 4566 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_0080_SKIP_USER_INPUT_THIS_FRAME; |
4567 return; | |
0 | 4568 } |
2061 | 4569 |
630 | 4570 if (uCurrentlyLoadedLevelType == LEVEL_Indoor) |
0 | 4571 BLV_UpdateUserInputAndOther(); |
630 | 4572 else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) |
0 | 4573 ODM_UpdateUserInputAndOther(); |
630 | 4574 |
783 | 4575 area_of_effect__damage_evaluate(); |
0 | 4576 } |
4577 | |
4578 //----- (0046BFFA) -------------------------------------------------------- | |
4579 bool __fastcall _46BFFA_check_object_intercept(unsigned int uLayingItemID, signed int a2) | |
4580 { | |
2101 | 4581 ObjectDesc *object; // ebx@1 |
0 | 4582 unsigned int v8; // eax@19 |
4583 signed int v10; // ebx@19 | |
4584 char *v11; // edx@20 | |
4585 unsigned __int16 v12; // ax@23 | |
4586 int v13; // eax@27 | |
4587 unsigned int v14; // ebx@33 | |
4588 int v16; // eax@36 | |
4589 unsigned int v17; // eax@37 | |
4590 __int16 v18; // di@37 | |
4591 signed int v19; // edx@37 | |
4592 unsigned __int8 v20; // sf@37 | |
4593 char *v21; // ecx@38 | |
4594 unsigned __int16 v22; // ax@41 | |
4595 unsigned int v23; // eax@46 | |
4596 signed int v24; // ebx@46 | |
4597 char *v25; // edx@47 | |
4598 int v26; // edx@54 | |
4599 int v27; // edx@55 | |
4600 int v28; // edx@56 | |
4601 int v29; // edx@57 | |
4602 unsigned __int16 v30; // ax@60 | |
4603 unsigned int v31; // ecx@60 | |
4604 int v32; // edi@60 | |
4605 unsigned int v33; // eax@65 | |
4606 signed int v34; // edx@65 | |
4607 char *v35; // ecx@66 | |
4608 unsigned __int16 v36; // ax@69 | |
4609 int v37; // ST14_4@72 | |
4610 int v38; // eax@72 | |
4611 int v39; // ST10_4@72 | |
4612 int v40; // ST0C_4@72 | |
4613 int v41; // edx@76 | |
4614 int v42; // edx@77 | |
4615 int v43; // edx@78 | |
4616 unsigned __int8 v44; // zf@79 | |
4617 int v45; // edx@79 | |
4618 unsigned __int16 v46; // ax@80 | |
4619 int v47; // eax@81 | |
4620 int v48; // edx@87 | |
4621 int v49; // edx@88 | |
4622 int v50; // edx@89 | |
4623 signed int v52; // ebx@93 | |
4624 char *v53; // edx@94 | |
4625 unsigned __int16 v54; // ax@98 | |
4626 unsigned int v55; // ecx@98 | |
4627 signed int v56; // ebx@98 | |
4628 char *v57; // edx@99 | |
4629 unsigned __int16 v58; // ax@102 | |
4630 unsigned __int16 v59; // ax@107 | |
4631 unsigned int v60; // ecx@107 | |
4632 signed int v61; // ebx@107 | |
4633 char *v62; // edx@108 | |
4634 unsigned __int16 v63; // ax@111 | |
4635 int v64; // ebx@114 | |
4636 signed int v65; // eax@114 | |
4637 unsigned int v66; // edi@123 | |
4638 unsigned __int16 v67; // ax@124 | |
4639 unsigned int v68; // ecx@124 | |
4640 signed int v69; // ebx@124 | |
4641 char *v70; // edx@125 | |
4642 unsigned __int16 v71; // ax@128 | |
4643 unsigned int v72; // ebx@131 | |
4644 int v78; // eax@133 | |
4645 char v79; // zf@139 | |
4646 unsigned int v80; // eax@140 | |
4647 signed int v81; // edx@140 | |
4648 char *v82; // ecx@141 | |
4649 unsigned __int16 v83; // ax@144 | |
4650 unsigned __int16 v84; // ax@151 | |
4651 unsigned int v85; // ecx@151 | |
4652 signed int v86; // ebx@151 | |
4653 char *v87; // edx@152 | |
4654 unsigned __int16 v88; // ax@155 | |
4655 unsigned int v89; // eax@158 | |
4656 int v90; // ST34_4@159 | |
4657 int v91; // eax@159 | |
4658 unsigned int v92; // eax@163 | |
4659 unsigned int v93; // eax@177 | |
4660 char *v94; // ecx@178 | |
4661 unsigned __int16 v95; // ax@181 | |
4662 unsigned __int16 v96; // ax@184 | |
4663 int v97; // eax@185 | |
4664 unsigned __int16 v98; // ax@191 | |
4665 char v100; // ST18_1@198 | |
4666 int v102; // eax@198 | |
4667 signed int v106; // eax@208 | |
4668 unsigned int v107; // edx@220 | |
4669 signed int v108; // ebx@225 | |
4670 unsigned int v109; // eax@234 | |
4671 signed int v110; // ebx@234 | |
4672 char *v111; // ecx@235 | |
4673 unsigned __int16 v112; // ax@238 | |
4674 unsigned __int16 v113; // si@241 | |
4675 int v114; // eax@242 | |
4676 int v115; // eax@245 | |
4677 unsigned __int16 v117; // ax@251 | |
4678 unsigned int v118; // ecx@251 | |
4679 signed int v119; // ebx@251 | |
4680 char *v120; // edx@252 | |
4681 unsigned __int16 v121; // ax@255 | |
4682 unsigned int v122; // eax@260 | |
4683 char *v123; // edx@261 | |
4684 int v124; // eax@267 | |
4685 int v125; // [sp-20h] [bp-4Ch]@28 | |
4686 char v132; // [sp-8h] [bp-34h]@131 | |
4687 char v134; // [sp-4h] [bp-30h]@131 | |
4688 signed int v135; // [sp-4h] [bp-30h]@217 | |
4689 int v136; // [sp+Ch] [bp-20h]@208 | |
4690 int v137; // [sp+10h] [bp-1Ch]@208 | |
4691 signed int v138; // [sp+14h] [bp-18h]@207 | |
4692 signed int v139; // [sp+18h] [bp-14h]@208 | |
4693 char *v140; // [sp+1Ch] [bp-10h]@61 | |
4694 signed int v141; // [sp+1Ch] [bp-10h]@117 | |
4695 unsigned int v142; // [sp+1Ch] [bp-10h]@158 | |
4696 signed int v143; // [sp+1Ch] [bp-10h]@172 | |
4697 char *v144; // [sp+1Ch] [bp-10h]@192 | |
4698 signed int v146; // [sp+20h] [bp-Ch]@60 | |
4699 int v147; // [sp+20h] [bp-Ch]@72 | |
4700 signed int v148; // [sp+20h] [bp-Ch]@158 | |
4701 unsigned __int16 v150; // [sp+20h] [bp-Ch]@208 | |
4702 signed int v152; // [sp+24h] [bp-8h]@208 | |
2101 | 4703 |
4704 //ïðèìåíåíèå: ôàåðáîëò â õðàìå ëóíû | |
4705 object = &pObjectList->pObjects[pSpriteObjects[uLayingItemID].uObjectDescID]; | |
4706 //v151 = PID_TYPE(a2); | |
848 | 4707 if ( PID_TYPE(a2) == OBJECT_Actor) |
4708 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4709 if ( PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Actor |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4710 && !pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].GetActorsRelation(&pActors[PID_ID(a2)]) ) |
0 | 4711 return 1; |
4712 } | |
4713 else | |
4714 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4715 if ( PID_TYPE(a2) == OBJECT_Player && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) == OBJECT_Player) |
0 | 4716 return 1; |
4717 } | |
4718 if ( pParty->bTurnBasedModeOn == 1 ) | |
4719 { | |
2101 | 4720 if ( pSpriteObjects[uLayingItemID].uAttributes & 4 ) |
0 | 4721 { |
1450 | 4722 --pTurnEngine->pending_actions; |
2101 | 4723 pSpriteObjects[uLayingItemID].uAttributes &= 0xFFFB; |
0 | 4724 } |
4725 } | |
2101 | 4726 if ( PID_TYPE(a2) == OBJECT_BModel && PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid) != OBJECT_Player) |
1280 | 4727 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4728 if (PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid) < 500) //bugfix PID_ID(v2->spell_caster_pid)==1000 |
2166 | 4729 pActors[PID_ID(pSpriteObjects[uLayingItemID].spell_caster_pid)].uAttributes |= 0x40000; |
1280 | 4730 } |
4731 | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4732 //v6 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4733 //v7 = v2->uType; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4734 if ( pSpriteObjects[uLayingItemID].uType > 3060 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4735 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4736 if ( pSpriteObjects[uLayingItemID].uType > 6090 ) |
0 | 4737 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4738 if ( pSpriteObjects[uLayingItemID].uType > 8090 ) |
0 | 4739 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4740 if ( pSpriteObjects[uLayingItemID].uType == 9010 ) |
0 | 4741 goto LABEL_247; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4742 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 4743 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4744 if ( pSpriteObjects[uLayingItemID].uType != 9040 ) |
0 | 4745 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4746 if ( pSpriteObjects[uLayingItemID].uType != 9080 ) |
0 | 4747 return 0; |
2101 | 4748 v95 = 0; |
4749 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
4750 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 4751 { |
2101 | 4752 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
4753 v95 = v146; | |
0 | 4754 } |
2101 | 4755 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
4756 if ( !v95 ) | |
4757 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4758 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 4759 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
4760 v102 = 8 * uLayingItemID; | |
4761 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
4762 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4763 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4764 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4765 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
4766 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
4767 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
4768 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4769 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4770 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4771 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4772 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 4773 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4774 return 0; |
0 | 4775 } |
2101 | 4776 sub_43A97E(uLayingItemID, a2); |
4777 ++pSpriteObjects[uLayingItemID].uType; | |
4778 v95 = 0; | |
4779 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4780 { | |
4781 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4782 v95 = v52; | |
4783 } | |
4784 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4785 if ( !v95 ) | |
4786 SpriteObject::OnInteraction(uLayingItemID); | |
4787 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4788 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4789 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4790 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4791 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4792 if ( !v96 ) | |
4793 v97 = 0; | |
4794 else | |
4795 v97 = (signed __int16)v96 + 4; | |
4796 v124 = 8 * uLayingItemID; | |
4797 LOBYTE(v124) = v124 | 2; | |
4798 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4799 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4800 return 0; | |
0 | 4801 } |
4802 LABEL_172: | |
4803 v143 = 17030; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4804 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 4805 { |
4806 case 0x1798u: | |
4807 v143 = 15040; | |
4808 break; | |
4809 case 0xFAAu: | |
4810 v143 = 13010; | |
4811 break; | |
4812 case 0x2346u: | |
4813 v143 = 18030; | |
4814 break; | |
4815 } | |
4816 v138 = 1; | |
2101 | 4817 if ( PID_TYPE(a2) != OBJECT_Actor) |
0 | 4818 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4819 if ( pSpriteObjects[uLayingItemID].uType != 9030 || pSpriteObjects[uLayingItemID].spell_skill != 4 ) |
2101 | 4820 { |
4821 SpriteObject::OnInteraction(uLayingItemID); | |
4822 return 0; | |
4823 } | |
4824 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); | |
0 | 4825 LABEL_233: |
4826 if ( !v138 ) | |
4827 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4828 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 4829 v112 = 0; |
4830 for ( v110 = 0; v110 < (signed int)pObjectList->uNumObjects; ++v110 ) | |
0 | 4831 { |
2101 | 4832 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v110].uObjectID ) |
4833 v112 = v110; | |
0 | 4834 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4835 pSpriteObjects[uLayingItemID].uObjectDescID = v112; |
0 | 4836 if ( !v112 ) |
2101 | 4837 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4838 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4839 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4840 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4841 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4842 v113 = pSpriteObjects[uLayingItemID].uSoundID; |
0 | 4843 if ( v113 ) |
4844 v114 = (signed __int16)v113 + 4; | |
4845 else | |
4846 v114 = 0; | |
2101 | 4847 v115 = 8 * uLayingItemID; |
4848 LOBYTE(v115) = PID(OBJECT_Item, uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4849 v125 = v143 + 1; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4850 pAudioPlayer->PlaySound((SoundID)v125, v115, 0, -1, 0, v114, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4851 return 0; |
0 | 4852 } |
2101 | 4853 SpriteObject::OnInteraction(uLayingItemID); |
0 | 4854 return 0; |
4855 } | |
2101 | 4856 v106 = a2; |
0 | 4857 v150 = 0; |
848 | 4858 v139 = PID_ID(v106); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4859 v137 = pSpriteObjects[uLayingItemID].spell_level; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4860 v152 = pSpriteObjects[uLayingItemID].spell_skill; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4861 v136 = pSpriteObjects[uLayingItemID].spell_id; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4862 if ( pSpriteObjects[uLayingItemID].uType == 9030 ) |
0 | 4863 { |
4864 v150 = 2; | |
4865 if ( v152 == 2 ) | |
4866 { | |
4867 v150 = 3; | |
4868 } | |
4869 else | |
4870 { | |
4871 if ( v152 >= 3 ) | |
4872 v150 = 4; | |
4873 } | |
2166 | 4874 pActors[v139].uAttributes |= 0x80000; |
0 | 4875 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4876 if ( pSpriteObjects[uLayingItemID].uType == 6040 ) |
0 | 4877 { |
4878 v135 = 7; | |
4879 } | |
4880 else | |
4881 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4882 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 4883 { |
4884 v135 = 9; | |
4885 } | |
4886 else | |
4887 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4888 if ( pSpriteObjects[uLayingItemID].uType != 9030 ) |
0 | 4889 { |
4890 v107 = v136; | |
4891 LABEL_222: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4892 if ( pSpriteObjects[uLayingItemID].uType != 9030 || v152 != 4 ) |
0 | 4893 { |
4894 v108 = v139; | |
4895 if ( stru_50C198.GetMagicalResistance(&pActors[v139], v107) ) | |
4896 { | |
4897 v138 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4898 if ( pSpriteObjects[uLayingItemID].uType == 8030 ) |
0 | 4899 { |
4900 pActors[v108].uAIState = Standing; | |
4901 pActors[v108].UpdateAnimation(); | |
4902 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4903 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
|
4904 v152, v150, 0, 0); |
0 | 4905 } |
4906 } | |
4907 else | |
4908 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4909 pSpriteObjects[uLayingItemID]._46BEF1_apply_spells_aoe(); |
0 | 4910 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4911 pSpriteObjects[uLayingItemID].spell_level = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4912 pSpriteObjects[uLayingItemID].spell_skill = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4913 pSpriteObjects[uLayingItemID].spell_id = 0; |
0 | 4914 goto LABEL_233; |
4915 } | |
4916 v135 = 10; | |
4917 } | |
4918 } | |
4919 v107 = v135; | |
4920 goto LABEL_222; | |
4921 } | |
2101 | 4922 if ( pSpriteObjects[uLayingItemID].uType == 8090 |
4923 || pSpriteObjects[uLayingItemID].uType == 7030 | |
4924 || pSpriteObjects[uLayingItemID].uType == 7090 || pSpriteObjects[uLayingItemID].uType == 8000 ) | |
4925 { | |
4926 sub_43A97E(uLayingItemID, a2); | |
4927 ++pSpriteObjects[uLayingItemID].uType; | |
4928 v95 = 0; | |
4929 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4930 { | |
4931 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4932 v95 = v52; | |
4933 } | |
4934 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4935 if ( !v95 ) | |
4936 SpriteObject::OnInteraction(uLayingItemID); | |
4937 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4938 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4939 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4940 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4941 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4942 if ( !v96 ) | |
4943 v97 = 0; | |
4944 else | |
4945 v97 = (signed __int16)v96 + 4; | |
4946 v124 = 8 * uLayingItemID; | |
4947 LOBYTE(v124) = v124 | 2; | |
4948 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4949 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4950 return 0; | |
4951 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4952 if ( pSpriteObjects[uLayingItemID].uType == 8010 ) |
0 | 4953 { |
2101 | 4954 if ( PID_TYPE(a2) == 3 |
4955 && MonsterStats::BelongsToSupertype(pActors[PID_ID(a2)].pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) ) | |
4956 sub_43A97E(uLayingItemID, a2); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4957 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 4958 //v9 = 0; |
4959 v95 = 0; | |
4960 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 4961 { |
2101 | 4962 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
4963 v95 = v52; | |
0 | 4964 } |
2101 | 4965 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
4966 if ( !v95 ) | |
4967 SpriteObject::OnInteraction(uLayingItemID); | |
4968 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
4969 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
4970 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
4971 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
4972 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
4973 if ( !v96 ) | |
4974 v97 = 0; | |
4975 else | |
4976 v97 = (signed __int16)v96 + 4; | |
4977 v92 = uLayingItemID; | |
4978 v124 = 8 * v92; | |
4979 LOBYTE(v124) = v124 | 2; | |
4980 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
4981 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
4982 return 0; | |
0 | 4983 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4984 v79 = pSpriteObjects[uLayingItemID].uType == 8030; |
0 | 4985 } |
4986 else | |
4987 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
4988 if ( pSpriteObjects[uLayingItemID].uType == 6090 ) |
2101 | 4989 { |
4990 sub_43A97E(uLayingItemID, a2); | |
4991 ++pSpriteObjects[uLayingItemID].uType; | |
4992 v95 = 0; | |
4993 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
4994 { | |
4995 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
4996 v95 = v52; | |
4997 } | |
4998 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
4999 if ( !v95 ) | |
5000 SpriteObject::OnInteraction(uLayingItemID); | |
5001 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5002 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5003 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5004 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5005 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5006 if ( !v96 ) | |
5007 v97 = 0; | |
5008 else | |
5009 v97 = (signed __int16)v96 + 4; | |
5010 v124 = 8 * uLayingItemID; | |
5011 LOBYTE(v124) = v124 | 2; | |
5012 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5013 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5014 return 0; | |
5015 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5016 if ( pSpriteObjects[uLayingItemID].uType <= 4070 ) |
0 | 5017 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5018 if ( pSpriteObjects[uLayingItemID].uType != 4070 ) |
0 | 5019 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5020 v48 = pSpriteObjects[uLayingItemID].uType - 3090; |
0 | 5021 if ( v48 ) |
5022 { | |
5023 v49 = v48 - 2; | |
5024 if ( v49 ) | |
5025 { | |
5026 v50 = v49 - 908; | |
2101 | 5027 if ( v49 == 908 ) |
5028 { | |
5029 sub_43A97E(uLayingItemID, a2); | |
5030 ++pSpriteObjects[uLayingItemID].uType; | |
5031 v95 = 0; | |
5032 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5033 { | |
5034 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5035 v95 = v52; | |
5036 } | |
5037 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5038 if ( !v95 ) | |
5039 SpriteObject::OnInteraction(uLayingItemID); | |
5040 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5041 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5042 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5043 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5044 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5045 if ( !v96 ) | |
5046 v97 = 0; | |
5047 else | |
5048 v97 = (signed __int16)v96 + 4; | |
5049 v124 = 8 * uLayingItemID; | |
5050 LOBYTE(v124) = v124 | 2; | |
5051 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5052 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5053 return 0; | |
5054 } | |
0 | 5055 v45 = v50 - 30; |
5056 v44 = v45 == 0; | |
5057 goto LABEL_91; | |
5058 } | |
2101 | 5059 //v9 = 0; |
5060 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType - 1; | |
5061 v58 = 0; | |
5062 for ( v56 = 0; v56 < (signed int)pObjectList->uNumObjects; ++v56 ) | |
0 | 5063 { |
2101 | 5064 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v56].uObjectID ) |
5065 v58 = v56; | |
0 | 5066 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5067 pSpriteObjects[uLayingItemID].uObjectDescID = v58; |
0 | 5068 if ( !v58 ) |
2101 | 5069 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5070 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5071 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5072 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5073 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5074 sub_43A97E(uLayingItemID, a2); |
5075 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
0 | 5076 v16 = 0; |
5077 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5078 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5079 v124 = 8 * uLayingItemID; |
0 | 5080 LOBYTE(v124) = v124 | 2; |
1456 | 5081 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5082 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5083 return 0; |
0 | 5084 } |
2101 | 5085 //v9 = 0; |
5086 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5087 v63 = 0; | |
5088 for ( v61 = 0; v61 < (signed int)pObjectList->uNumObjects; ++v61 ) | |
0 | 5089 { |
2101 | 5090 if ( v59 == pObjectList->pObjects[v61].uObjectID ) |
5091 v63 = v61; | |
0 | 5092 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5093 pSpriteObjects[uLayingItemID].uObjectDescID = v63; |
0 | 5094 if ( !v63 ) |
2101 | 5095 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5096 v64 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5097 v44 = pSpriteObjects[uLayingItemID].spell_skill == 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5098 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5099 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5100 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5101 v65 = 7; |
5102 if ( v44 ) | |
5103 v65 = 9; | |
5104 if ( v65 > 0 ) | |
5105 { | |
5106 v141 = v65; | |
5107 do | |
5108 { | |
2101 | 5109 v64 += (signed int)stru_5C6E00->uIntegerHalfPi / 2; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5110 pSpriteObjects[uLayingItemID].Create(v64, 0, 1000, 0); |
0 | 5111 --v141; |
5112 } | |
5113 while ( v141 ); | |
5114 } | |
2101 | 5115 SpriteObject::OnInteraction(uLayingItemID); |
5116 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5117 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5118 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5119 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5120 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5121 LOBYTE(v124) = v124 | 2; |
1456 | 5122 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5123 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5124 return 0; |
0 | 5125 } |
2101 | 5126 //v66 = 0; |
5127 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5128 return 1; |
2101 | 5129 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5130 v71 = 0; | |
5131 for ( v69 = 0; v69 < (signed int)pObjectList->uNumObjects; ++v69 ) | |
0 | 5132 { |
2101 | 5133 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v69].uObjectID ) |
5134 v71 = v69; | |
0 | 5135 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5136 pSpriteObjects[uLayingItemID].uObjectDescID = v71; |
0 | 5137 if ( !v71 ) |
2101 | 5138 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5139 v134 = 0; |
2101 | 5140 v72 = uLayingItemID; |
0 | 5141 v132 = 0; |
2101 | 5142 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5143 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5144 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5145 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2059 | 5146 AttackerInfo.Add(PID(OBJECT_Item,v72), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5147 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
0 | 5148 v78 = 0; |
5149 else | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5150 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5151 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2185 | 5152 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
|
5153 return 0; |
0 | 5154 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5155 if ( pSpriteObjects[uLayingItemID].uType == 4090 ) |
0 | 5156 { |
2101 | 5157 //v9 = 0; |
5158 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 2; | |
5159 v88 = 0; | |
5160 for ( v86 = 0; v86 < (signed int)pObjectList->uNumObjects; ++v86 ) | |
0 | 5161 { |
2101 | 5162 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v86].uObjectID ) |
5163 v88 = v86; | |
0 | 5164 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5165 pSpriteObjects[uLayingItemID].uObjectDescID = v88; |
0 | 5166 if ( !v88 ) |
2101 | 5167 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5168 v89 = pSpriteObjects[uLayingItemID].uFacing - stru_5C6E00->uIntegerDoublePi; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5169 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5170 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5171 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
0 | 5172 v142 = v89; |
5173 v148 = 7; | |
5174 do | |
5175 { | |
5176 pRnd->SetRange(-128, 128); | |
5177 v90 = pRnd->GetInRange(); | |
5178 pRnd->SetRange(5, 500); | |
5179 v91 = pRnd->GetInRange(); | |
5180 v142 += (signed int)stru_5C6E00->uIntegerHalfPi >> 1; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5181 pSpriteObjects[uLayingItemID].Create(v90 + v142, 0, v91, 0); |
0 | 5182 --v148; |
5183 } | |
5184 while ( v148 ); | |
2101 | 5185 SpriteObject::OnInteraction(uLayingItemID); |
5186 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5187 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5188 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5189 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5190 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5191 LOBYTE(v124) = v124 | 2; |
1456 | 5192 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id-1] + 1; |
2101 | 5193 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5194 return 0; |
0 | 5195 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5196 if ( pSpriteObjects[uLayingItemID].uType == 4092 ) |
0 | 5197 { |
2101 | 5198 //v66 = 0; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5199 pSpriteObjects[uLayingItemID].uType = 4091; |
2101 | 5200 v83 = 0; |
5201 for ( v81 = 0; v81 < (signed int)pObjectList->uNumObjects; ++v81 ) | |
0 | 5202 { |
2101 | 5203 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v81].uObjectID ) |
5204 v83 = v81; | |
0 | 5205 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5206 pSpriteObjects[uLayingItemID].uObjectDescID = v83; |
0 | 5207 if ( !v83 ) |
2101 | 5208 SpriteObject::OnInteraction(uLayingItemID); |
0 | 5209 v134 = 0; |
2102 | 5210 //v72 = uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5211 v132 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5212 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5213 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5214 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5215 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
2102 | 5216 AttackerInfo.Add(PID(OBJECT_Item, uLayingItemID), 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v132, v134); |
2101 | 5217 if ( !pSpriteObjects[uLayingItemID].uSoundID ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5218 v78 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5219 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5220 v78 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5221 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2102 | 5222 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
|
5223 return 0; |
0 | 5224 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5225 if ( pSpriteObjects[uLayingItemID].uType == 4100 || pSpriteObjects[uLayingItemID].uType == 6010 ) |
2101 | 5226 { |
5227 sub_43A97E(uLayingItemID, a2); | |
5228 ++pSpriteObjects[uLayingItemID].uType; | |
5229 v95 = 0; | |
5230 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5231 { | |
5232 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5233 v95 = v52; | |
5234 } | |
5235 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5236 if ( !v95 ) | |
5237 SpriteObject::OnInteraction(uLayingItemID); | |
5238 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5239 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5240 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5241 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5242 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5243 if ( !v96 ) | |
5244 v97 = 0; | |
5245 else | |
5246 v97 = (signed __int16)v96 + 4; | |
5247 v124 = 8 * uLayingItemID; | |
5248 LOBYTE(v124) = v124 | 2; | |
5249 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5250 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5251 return 0; | |
5252 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5253 v79 = pSpriteObjects[uLayingItemID].uType == 6040; |
0 | 5254 } |
5255 if ( !v79 ) | |
5256 return 0; | |
5257 goto LABEL_172; | |
5258 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5259 if ( pSpriteObjects[uLayingItemID].uType == 3060 ) |
2101 | 5260 { |
5261 sub_43A97E(uLayingItemID, a2); | |
5262 ++pSpriteObjects[uLayingItemID].uType; | |
5263 v95 = 0; | |
5264 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5265 { | |
5266 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5267 v95 = v52; | |
5268 } | |
5269 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5270 if ( !v95 ) | |
5271 SpriteObject::OnInteraction(uLayingItemID); | |
5272 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5273 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5274 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5275 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5276 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5277 if ( !v96 ) | |
5278 v97 = 0; | |
5279 else | |
5280 v97 = (signed __int16)v96 + 4; | |
5281 v124 = 8 * uLayingItemID; | |
5282 LOBYTE(v124) = v124 | 2; | |
5283 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5284 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5285 return 0; | |
5286 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5287 if ( pSpriteObjects[uLayingItemID].uType <= 555 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5288 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5289 if ( pSpriteObjects[uLayingItemID].uType == 555 ) |
0 | 5290 { |
2101 | 5291 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5292 ++pSpriteObjects[uLayingItemID].uType; |
0 | 5293 v18 = 0; |
2101 | 5294 v22 = 0; |
5295 v25 = (char *)&pObjectList->pObjects->uObjectID; | |
5296 for ( v24 = 0; v24 < (signed int)pObjectList->uNumObjects; ++v24 ) | |
0 | 5297 { |
2101 | 5298 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v24].uObjectID ) |
5299 v22 = v24; | |
0 | 5300 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5301 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
0 | 5302 if ( v22 == v18 ) |
2101 | 5303 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5304 pSpriteObjects[uLayingItemID].vVelocity.z = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5305 pSpriteObjects[uLayingItemID].vVelocity.y = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5306 pSpriteObjects[uLayingItemID].vVelocity.x = v18; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5307 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; |
0 | 5308 } |
5309 else | |
5310 { | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5311 switch ( pSpriteObjects[uLayingItemID].uType ) |
0 | 5312 { |
5313 case 500: | |
5314 case 505: | |
5315 case 510: | |
5316 case 515: | |
5317 case 520: | |
5318 case 525: | |
5319 case 530: | |
5320 case 535: | |
5321 case 540: | |
2101 | 5322 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5323 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5324 v12 = 0; |
5325 for ( v10 = 0; v10 < (signed int)pObjectList->uNumObjects; ++v10 ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5326 { |
2101 | 5327 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v10].uObjectID ) |
5328 v12 = v10; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5329 } |
2101 | 5330 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
5331 if ( !v12 ) | |
5332 SpriteObject::OnInteraction(uLayingItemID); | |
5333 v44 = pSpriteObjects[uLayingItemID].uType == 555; | |
5334 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5335 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5336 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5337 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5338 if ( !v44 ) | |
5339 { | |
5340 v13 = 8 * uLayingItemID; | |
5341 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5342 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
5343 } | |
5344 return 0; | |
0 | 5345 case 545: |
5346 case 550: | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5347 if ( pSpriteObjects[uLayingItemID].stru_24.uItemID != 405 && pSpriteObjects[uLayingItemID].stru_24.uSpecEnchantmentType != 3 ) |
0 | 5348 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5349 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5350 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5351 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5352 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5353 sub_43A97E(uLayingItemID, a2); |
5354 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5355 if ( pSpriteObjects[uLayingItemID].uSoundID == 0 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5356 v16 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5357 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5358 v16 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
2101 | 5359 v124 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5360 LOBYTE(v124) = v124 | 2; |
1996 | 5361 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id] + 1; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5362 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v16, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5363 return 0; |
0 | 5364 } |
5365 v18 = 0; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5366 pSpriteObjects[uLayingItemID].uType = 600; |
2101 | 5367 v22 = 0; |
5368 for ( v19 = 0; v19 < (signed int)pObjectList->uNumObjects; ++v19 ) | |
0 | 5369 { |
2101 | 5370 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v19].uObjectID ) |
5371 v22 = v19; | |
0 | 5372 } |
2101 | 5373 pSpriteObjects[uLayingItemID].uObjectDescID = v22; |
5374 if ( !v22 ) | |
5375 SpriteObject::OnInteraction(uLayingItemID); | |
5376 pSpriteObjects[uLayingItemID].vVelocity.z = v18; | |
5377 pSpriteObjects[uLayingItemID].vVelocity.y = v18; | |
5378 pSpriteObjects[uLayingItemID].vVelocity.x = v18; | |
5379 pSpriteObjects[uLayingItemID].uSpriteFrameID = v18; | |
0 | 5380 default: |
5381 return 0; | |
5382 } | |
2101 | 5383 v12 = 0; |
5384 for ( v10; v10 < (signed int)v8; ++v10 ) | |
0 | 5385 { |
5386 v11 += 56; | |
2101 | 5387 if ( pSpriteObjects[uLayingItemID].uType != *(short *)v11 ) |
5388 v12 = v10; | |
0 | 5389 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5390 pSpriteObjects[uLayingItemID].uObjectDescID = v12; |
0 | 5391 if ( !v12 ) |
2101 | 5392 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5393 v44 = pSpriteObjects[uLayingItemID].uType == 555; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5394 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5395 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5396 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5397 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5398 if ( !v44 ) |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5399 { |
2101 | 5400 v13 = 8 * uLayingItemID; |
5401 LOBYTE(v13) = PID(OBJECT_Item, uLayingItemID); | |
5402 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5403 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5404 } |
0 | 5405 } |
5406 return 0; | |
5407 } | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5408 if ( pSpriteObjects[uLayingItemID].uType > 1100 ) |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5409 { |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5410 v41 = pSpriteObjects[uLayingItemID].uType - 2030; |
0 | 5411 if ( !v41 ) |
5412 goto LABEL_247; | |
5413 v42 = v41 - 30; | |
5414 if ( v42 ) | |
5415 { | |
5416 v43 = v42 - 40; | |
2101 | 5417 if ( v42 == 40 ) |
5418 { | |
5419 if ( PID_TYPE(a2) != 3 ) | |
5420 { | |
5421 //v32 = 0; | |
5422 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5423 v46 = 0; | |
5424 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5425 { | |
5426 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5427 v46 = v146; | |
5428 } | |
5429 pSpriteObjects[uLayingItemID].uObjectDescID = v46; | |
5430 if ( !v46 ) | |
5431 SpriteObject::OnInteraction(uLayingItemID); | |
5432 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5433 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5434 v102 = 8 * uLayingItemID; | |
5435 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5436 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5437 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5438 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5439 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5440 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5441 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5442 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5443 v47 = 0; | |
5444 else | |
5445 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5446 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5447 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5448 return 0; | |
5449 } | |
5450 return 1; | |
5451 } | |
0 | 5452 v45 = v43 - 910; |
5453 v44 = v45 == 0; | |
5454 LABEL_91: | |
5455 if ( !v44 && v45 != 20 ) | |
5456 return 0; | |
5457 } | |
2101 | 5458 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5459 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5460 v95 = 0; |
5461 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5462 { |
2101 | 5463 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5464 v95 = v52; | |
0 | 5465 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5466 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
2101 | 5467 if ( !v95 ) |
5468 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5469 v96 = pSpriteObjects[uLayingItemID].uSoundID; |
2101 | 5470 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
5471 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5472 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5473 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5474 if ( !v96 ) | |
0 | 5475 v97 = 0; |
5476 else | |
5477 v97 = (signed __int16)v96 + 4; | |
2101 | 5478 v124 = 8 * uLayingItemID; |
5479 LOBYTE(v124) = v124 | 2; | |
5480 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5481 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5482 return 0; | |
5483 } | |
5484 if ( pSpriteObjects[uLayingItemID].uType == 1100 ) | |
5485 { | |
5486 sub_43A97E(uLayingItemID, a2); | |
5487 ++pSpriteObjects[uLayingItemID].uType; | |
5488 v95 = 0; | |
5489 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5490 { | |
5491 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5492 v95 = v52; | |
5493 } | |
5494 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5495 if ( !v95 ) | |
5496 SpriteObject::OnInteraction(uLayingItemID); | |
5497 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5498 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5499 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5500 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5501 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5502 if ( !v96 ) | |
5503 v97 = 0; | |
5504 else | |
5505 v97 = (signed __int16)v96 + 4; | |
5506 v92 = uLayingItemID; | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5507 v124 = 8 * v92; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5508 LOBYTE(v124) = v124 | 2; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5509 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5510 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5511 return 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5512 } |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5513 v26 = pSpriteObjects[uLayingItemID].uType - 600; |
2101 | 5514 if ( pSpriteObjects[uLayingItemID].uType == 600 ) |
0 | 5515 { |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5516 pSpriteObjects[uLayingItemID].uType = 601; |
2101 | 5517 v36 = 0; |
5518 for ( v34 = 0; v34 < (signed int)pObjectList->uNumObjects; ++v34 ) | |
0 | 5519 { |
2101 | 5520 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v34].uObjectID ) |
5521 v36 = v34; | |
0 | 5522 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5523 pSpriteObjects[uLayingItemID].uObjectDescID = v36; |
0 | 5524 if ( !v36 ) |
2101 | 5525 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5526 v37 = pSpriteObjects[uLayingItemID].vPosition.z; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5527 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
2101 | 5528 v38 = 8 * uLayingItemID; |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5529 v39 = pSpriteObjects[uLayingItemID].vPosition.y; |
2101 | 5530 LOBYTE(v38) = PID(OBJECT_Item, uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5531 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5532 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5533 v40 = pSpriteObjects[uLayingItemID].vPosition.x; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5534 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
0 | 5535 v147 = v38; |
2059 | 5536 AttackerInfo.Add(v38, 512, v40, v39, v37, 0, 0); |
2101 | 5537 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) |
5538 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
|
5539 pAudioPlayer->PlaySound(SOUND_8, v147, 0, -1, 0, 0, 0, 0); |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5540 return 0; |
0 | 5541 } |
5542 v27 = v26 - 410; | |
2101 | 5543 if ( v26 == 410 ) |
5544 { | |
5545 sub_43A97E(uLayingItemID, a2); | |
5546 ++pSpriteObjects[uLayingItemID].uType; | |
5547 v95 = 0; | |
5548 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
5549 { | |
5550 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) | |
5551 v95 = v52; | |
5552 } | |
5553 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5554 if ( !v95 ) | |
5555 SpriteObject::OnInteraction(uLayingItemID); | |
5556 v96 = pSpriteObjects[uLayingItemID].uSoundID; | |
5557 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5558 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5559 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5560 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5561 if ( !v96 ) | |
5562 v97 = 0; | |
5563 else | |
5564 v97 = (signed __int16)v96 + 4; | |
5565 v124 = 8 * uLayingItemID; | |
5566 LOBYTE(v124) = v124 | 2; | |
5567 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5568 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5569 return 0; | |
5570 } | |
0 | 5571 v28 = v27 - 40; |
5572 if ( !v28 ) | |
2101 | 5573 { |
5574 v95 = 0; | |
5575 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5576 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
5577 { | |
5578 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) | |
5579 v95 = v146; | |
5580 } | |
5581 pSpriteObjects[uLayingItemID].uObjectDescID = v95; | |
5582 if ( !v95 ) | |
5583 SpriteObject::OnInteraction(uLayingItemID); | |
5584 v100 = pSpriteObjects[uLayingItemID].field_61; | |
5585 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5586 v102 = 8 * uLayingItemID; | |
5587 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5588 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5589 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5590 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5591 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5592 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5593 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5594 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5595 v47 = 0; | |
5596 else | |
5597 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5598 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5599 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); | |
5600 return 0; | |
5601 } | |
0 | 5602 v29 = v28 - 10; |
5603 if ( v29 ) | |
5604 { | |
5605 if ( v29 != 20 ) | |
5606 return 0; | |
2101 | 5607 if ( PID_TYPE(a2) != 3 ) |
0 | 5608 { |
2101 | 5609 //v32 = 0; |
5610 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; | |
5611 v46 = 0; | |
5612 for ( v146 = 0; v146 < (signed int)pObjectList->uNumObjects; ++v146 ) | |
0 | 5613 { |
2101 | 5614 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v146].uObjectID ) |
5615 v46 = v146; | |
0 | 5616 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5617 pSpriteObjects[uLayingItemID].uObjectDescID = v46; |
2101 | 5618 if ( !v46 ) |
5619 SpriteObject::OnInteraction(uLayingItemID); | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5620 v100 = pSpriteObjects[uLayingItemID].field_61; |
2101 | 5621 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
5622 v102 = 8 * uLayingItemID; | |
5623 LOBYTE(v102) = PID(OBJECT_Item, uLayingItemID); | |
5624 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5625 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5626 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5627 AttackerInfo.Add(v102, 512, pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, v100, 0); | |
5628 if (object->uFlags & OBJECT_DESC_TRIAL_PARTICLE) | |
5629 trail_particle_generator.GenerateTrailParticles(pSpriteObjects[uLayingItemID].vPosition.x, pSpriteObjects[uLayingItemID].vPosition.y, pSpriteObjects[uLayingItemID].vPosition.z, object->uParticleTrailColor); | |
5630 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5631 v47 = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5632 else |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5633 v47 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5634 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; |
2101 | 5635 pAudioPlayer->PlaySound((SoundID)v125, v102, 0, -1, 0, v47, 0, 0); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5636 return 0; |
0 | 5637 } |
5638 return 1; | |
5639 } | |
5640 LABEL_247: | |
2101 | 5641 //v9 = 0; |
5642 if ( PID_TYPE(a2) == 6 || PID_TYPE(a2) == 5 || !PID_TYPE(a2) ) | |
0 | 5643 return 1; |
2101 | 5644 if ( PID_TYPE(a2) != 2 ) |
0 | 5645 { |
2101 | 5646 sub_43A97E(uLayingItemID, a2); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5647 ++pSpriteObjects[uLayingItemID].uType; |
2101 | 5648 v95 = 0; |
5649 for ( v52 = 0; v52 < (signed int)pObjectList->uNumObjects; ++v52 ) | |
0 | 5650 { |
2101 | 5651 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v52].uObjectID ) |
5652 v95 = v52; | |
0 | 5653 } |
2101 | 5654 pSpriteObjects[uLayingItemID].uObjectDescID = v95; |
5655 if ( !v95 ) | |
5656 SpriteObject::OnInteraction(uLayingItemID); | |
5657 pSpriteObjects[uLayingItemID].vVelocity.z = 0; | |
5658 pSpriteObjects[uLayingItemID].vVelocity.y = 0; | |
5659 pSpriteObjects[uLayingItemID].vVelocity.x = 0; | |
5660 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; | |
5661 if ( !pSpriteObjects[uLayingItemID].uSoundID ) | |
5662 v97 = 0; | |
5663 else | |
5664 v97 = (signed __int16)pSpriteObjects[uLayingItemID].uSoundID + 4; | |
5665 v124 = 8 * uLayingItemID; | |
5666 LOBYTE(v124) = v124 | 2; | |
5667 v125 = word_4EE088_sound_ids[pSpriteObjects[uLayingItemID].spell_id - 1] + 1; | |
5668 pAudioPlayer->PlaySound((SoundID)v125, v124, 0, -1, 0, v97, 0, 0); | |
5669 return 0; | |
0 | 5670 } |
2101 | 5671 pSpriteObjects[uLayingItemID].uType = pSpriteObjects[uLayingItemID].uType + 1; |
5672 v121 = 0; | |
5673 for ( v119 = 0; v119 < (signed int)pObjectList->uNumObjects; ++v119 ) | |
0 | 5674 { |
2101 | 5675 if ( pSpriteObjects[uLayingItemID].uType == pObjectList->pObjects[v119].uObjectID ) |
5676 v121 = v119; | |
0 | 5677 } |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5678 pSpriteObjects[uLayingItemID].uObjectDescID = v121; |
0 | 5679 if ( !v121 ) |
2101 | 5680 SpriteObject::OnInteraction(uLayingItemID); |
1429
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5681 pSpriteObjects[uLayingItemID].vVelocity.z = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5682 pSpriteObjects[uLayingItemID].vVelocity.y = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5683 pSpriteObjects[uLayingItemID].vVelocity.x = 0; |
c7489dd19f88
BuildingType_Tavern and CastSpellInfo_PushCastSpellInfo fix
Ritor1
parents:
1417
diff
changeset
|
5684 pSpriteObjects[uLayingItemID].uSpriteFrameID = 0; |
2101 | 5685 v13 = 8 * uLayingItemID; |
5686 LOBYTE(v13) = PID(OBJECT_Item,uLayingItemID); | |
5687 pAudioPlayer->PlaySound(SOUND_8, v13, 0, -1, 0, 0, 0, 0); | |
0 | 5688 return 0; |
5689 } |