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