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