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