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