Mercurial > mm7
annotate UI/UITransition.cpp @ 1754:421c29d4ab3e
UITransition.cpp cleaning(continue)
author | Ritor1 |
---|---|
date | Mon, 30 Sep 2013 17:29:27 +0600 |
parents | b6212ecbc140 |
children | dc5d8edf629a |
rev | line source |
---|---|
1298 | 1 #ifdef _MSC_VER |
2 #define _CRT_SECURE_NO_WARNINGS | |
3 #endif | |
4 | |
5 #include <io.h> | |
6 | |
1299 | 7 #include "..\mm7_data.h" |
8 #include "..\VideoPlayer.h" | |
9 #include "..\MapInfo.h" | |
10 #include "..\GUIWindow.h" | |
11 #include "..\GUIFont.h" | |
12 #include "..\GUIProgressBar.h" | |
13 #include "..\Party.h" | |
14 #include "..\AudioPlayer.h" | |
15 #include "..\Outdoor.h" | |
16 #include "..\LOD.h" | |
17 #include "..\Time.h" | |
18 #include "..\stru159.h" | |
19 #include "..\Events2D.h" | |
20 #include "..\texts.h" | |
1298 | 21 #include "UIHouses.h" |
22 | |
23 | |
24 | |
25 | |
26 //----- (00444839) -------------------------------------------------------- | |
27 void TransitionUI_Load(uint anim_id, uint exit_pic_id, int x, int y, int z, int directiony, int directionx, int a8, const char *pLocationName) | |
28 { | |
29 const char *v15; // eax@14 | |
30 char pContainer[40]; // [sp+Ch] [bp-2Ch]@1 | |
31 | |
32 dword_59117C_teleportx = x; | |
33 dword_591178_teleporty = y; | |
34 dword_591174_teleportz = z; | |
35 dword_591170_teleport_directiony = directiony; | |
36 dword_59116C_teleport_directionx = directionx; | |
37 dword_591168_teleport_speedz = a8; | |
38 dword_591164_teleport_map_name = (char *)pLocationName; | |
39 uCurrentHouse_Animation = anim_id; | |
40 pEventTimer->Pause(); | |
41 pAudioPlayer->StopChannels(-1, -1); | |
42 | |
43 switch (pParty->alignment) | |
44 { | |
45 case PartyAlignment_Good: sprintfex(pContainer, "evt%02d-b", const_2()); break; | |
46 case PartyAlignment_Neutral: sprintfex(pContainer, "evt%02d", const_2()); break; | |
47 case PartyAlignment_Evil: sprintfex(pContainer, "evt%02d-c", const_2()); break; | |
1545 | 48 default: Error("Invalid alignment: %u", pParty->alignment); |
1298 | 49 } |
50 | |
1754 | 51 pTexture_Dialogue_Background = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE)]; |
52 pTexture_outside = pIcons_LOD->LoadTexturePtr(pHouse_ExitPictures[exit_pic_id], TEXTURE_16BIT_PALETTE); | |
1298 | 53 if (anim_id) |
54 { | |
1754 | 55 if ( !IndoorLocation::GetLocationIndex(pLocationName) ) |
1298 | 56 pVideoPlayer->OpenHouseMovie(pAnimatedRooms[p2DEvents[anim_id - 1].uAnimationID].video_name, 1); |
57 } | |
1754 | 58 else if ( !IndoorLocation::GetLocationIndex(pLocationName) ) |
1298 | 59 { |
1754 | 60 if ( pMapStats->GetMapInfo(pCurrentMapName) ) |
61 { | |
62 sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[410], pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)].pName); // "Leave %s" | |
63 pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_Transition, 0, sHouseName.data()); | |
64 //if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId ) | |
65 //PlayHouseSound(anim_id, HouseSound_Greeting); | |
66 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) | |
67 pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); | |
68 if ( IndoorLocation::GetLocationIndex(pLocationName) ) | |
69 uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); | |
70 return; | |
71 } | |
72 strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[79]); | |
73 pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_Transition, 0, sHouseName.data()); | |
74 //if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId ) | |
75 //PlayHouseSound(anim_id, HouseSound_Greeting); | |
76 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) | |
77 pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); | |
78 if ( IndoorLocation::GetLocationIndex(pLocationName) ) | |
79 uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); | |
80 return; | |
1298 | 81 } |
82 v15 = pLocationName; | |
83 if ( *pLocationName == 48 ) | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1299
diff
changeset
|
84 v15 = pCurrentMapName; |
1754 | 85 if ( pMapStats->GetMapInfo(v15) ) |
1298 | 86 { |
1754 | 87 sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[411], pMapStats->pInfos[pMapStats->GetMapInfo(v15)].pName);//Войти в ^Pv[%s] |
88 pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_Transition, 0, sHouseName.data()); | |
89 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) | |
90 pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); | |
91 if ( IndoorLocation::GetLocationIndex(pLocationName) ) | |
92 uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); | |
93 return; | |
1298 | 94 } |
1754 | 95 strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[73]);//Войти |
1298 | 96 pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_Transition, 0, sHouseName.data()); |
1754 | 97 //if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId ) |
98 //PlayHouseSound(anim_id, HouseSound_Greeting); | |
1298 | 99 if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) |
100 pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); | |
1754 | 101 if ( IndoorLocation::GetLocationIndex(pLocationName) ) |
102 uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); | |
1298 | 103 } |
104 | |
105 | |
106 | |
107 | |
108 //----- (00444C8F) -------------------------------------------------------- | |
109 void TravelUI_Load() | |
110 { | |
111 unsigned int v1; // eax@6 | |
112 GUIWindow *result; // eax@9 | |
113 char pContainer[32]; // [sp+0h] [bp-28h]@1 | |
114 | |
115 pEventTimer->Pause(); | |
116 | |
117 switch (pParty->alignment) | |
118 { | |
119 case PartyAlignment_Good: sprintfex(pContainer, "evt%02d-b", const_2()); break; | |
120 case PartyAlignment_Neutral: sprintfex(pContainer, "evt%02d", const_2()); break; | |
121 case PartyAlignment_Evil: sprintfex(pContainer, "evt%02d-c", const_2()); break; | |
1545 | 122 default: Error("Invalid alignment: %u", pParty->alignment); |
1298 | 123 } |
124 | |
125 pTexture_Dialogue_Background = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); | |
126 pTexture_outside = pIcons_LOD->LoadTexturePtr("outside", TEXTURE_16BIT_PALETTE); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1299
diff
changeset
|
127 v1 = pMapStats->GetMapInfo(pCurrentMapName); |
1298 | 128 if ( v1 ) |
129 sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[410], pMapStats->pInfos[v1].pName);// "Leave %s" | |
130 else | |
131 strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[79]);// "Exit" | |
132 pDialogueWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_ChangeLocation, 0, sHouseName.data()); | |
133 } | |
134 | |
135 | |
136 | |
137 //----- (00444DCA) -------------------------------------------------------- | |
138 void TravelUI_Draw() | |
139 { | |
140 unsigned int v0; // edi@1 | |
141 MapInfo *v1; // edi@2 | |
142 signed int v3; // eax@2 | |
143 int v4; // eax@5 | |
144 const char *v5; // [sp-Ch] [bp-90h]@3 | |
145 signed int v6; // [sp-8h] [bp-8Ch]@3 | |
146 GUIWindow v7; // [sp+Ch] [bp-78h]@1 | |
147 char pDestinationMapName[32]; // [sp+60h] [bp-24h]@1 | |
148 unsigned int v9; // [sp+80h] [bp-4h]@1 | |
149 | |
150 memcpy(&v7, pPrimaryWindow, sizeof(v7)); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1299
diff
changeset
|
151 v9 = pMapStats->GetMapInfo(pCurrentMapName); |
1298 | 152 pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.y, pDestinationMapName, 20); |
153 v0 = pMapStats->GetMapInfo(pDestinationMapName); | |
154 pRenderer->DrawTextureIndexed(0x1DDu, 0, pTexture_Dialogue_Background); | |
155 pRenderer->DrawTextureTransparent(0x1D4u, 0, &pIcons_LOD->pTextures[uTextureID_right_panel_loop]); | |
156 pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pTexture_outside); | |
157 pRenderer->DrawTextureIndexed(0x22Cu, 0x1C3u, pIcons_LOD->GetTexture(uTextureID_x_x_u)); | |
158 pRenderer->DrawTextureIndexed(0x1DCu, 0x1C3u, pIcons_LOD->GetTexture(uTextureID_x_ok_u)); | |
159 if ( v0 ) | |
160 { | |
161 v1 = &pMapStats->pInfos[v0]; | |
162 v7.uFrameX = 493; | |
163 v7.uFrameWidth = 126; | |
164 v7.uFrameZ = 366; | |
165 v7.DrawTitleText(pFontCreate, 0, 4u, 0, v1->pName, 3); | |
166 v7.uFrameX = 483; | |
167 v7.uFrameWidth = 148; | |
168 v7.uFrameZ = 334; | |
169 v3 = GetTravelTime(); | |
170 if ( v3 == 1 ) | |
171 { | |
172 v6 = 1; | |
173 v5 = pGlobalTXT_LocalizationStrings[663]; // "It will take %d day to cross to %s." | |
174 } | |
175 else | |
176 { | |
177 v6 = v3; | |
178 v5 = pGlobalTXT_LocalizationStrings[128]; // "It will take %d days to travel to %s." | |
179 } | |
180 sprintfex(pTmpBuf.data(), v5, v6, v1->pName); | |
181 strcat(pTmpBuf.data(), "\n \n"); | |
182 sprintfex(pTmpBuf2.data(), pGlobalTXT_LocalizationStrings[126], pMapStats->pInfos[v9].pName); | |
183 strcat(pTmpBuf.data(), pTmpBuf2.data()); | |
184 v4 = pFontCreate->CalcTextHeight(pTmpBuf.data(), &v7, 0, 0); | |
185 v7.DrawTitleText(pFontCreate, 0, (212 - v4) / 2 + 101, 0, pTmpBuf.data(), 3); | |
186 _unused_5B5924_is_travel_ui_drawn = 1; | |
187 } | |
188 } | |
189 | |
190 | |
191 | |
192 //----- (00444A51) -------------------------------------------------------- | |
193 void TransitionUI_Draw() | |
194 { | |
195 MapInfo *pMapInfo; // esi@5 | |
196 char *v1; // eax@6 | |
197 std::string v3; // [sp-18h] [bp-84h]@11 | |
198 unsigned int v4; // [sp-10h] [bp-7Ch]@12 | |
199 int v5; // [sp-Ch] [bp-78h]@12 | |
200 const char *v6; // [sp-8h] [bp-74h]@11 | |
201 signed int v7; // [sp-4h] [bp-70h]@11 | |
202 GUIWindow v8; // [sp+Ch] [bp-60h]@1 | |
203 unsigned int v9; // [sp+60h] [bp-Ch]@1 | |
204 unsigned int v10; // [sp+64h] [bp-8h]@1 | |
205 int a3; // [sp+6Bh] [bp-1h]@11 | |
206 | |
207 memcpy(&v8, pPrimaryWindow, sizeof(v8)); | |
1477
7ef4b64f6329
* LODFile::LoadBitmaps & LODFile::LoadIconsOrEvents are merged into LODFile::Load
Nomad
parents:
1299
diff
changeset
|
208 v10 = pMapStats->GetMapInfo(pCurrentMapName); |
1298 | 209 v9 = IndoorLocation::GetLocationIndex(dword_591164_teleport_map_name); |
210 pRenderer->DrawTextureIndexed(0x1DDu, 0, pTexture_Dialogue_Background); | |
211 pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0] - 4, pNPCPortraits_y[0][0] - 4, pIcons_LOD->GetTexture(uTextureID_50795C)); | |
212 pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pTexture_outside); | |
213 uTextureID_right_panel_loop = uTextureID_right_panel; | |
214 pRenderer->DrawTextureTransparent(468, 0, pIcons_LOD->GetTexture(uTextureID_right_panel)); | |
215 pRenderer->DrawTextureIndexed(556, 451, pIcons_LOD->GetTexture(uTextureID_x_x_u)); | |
216 pRenderer->DrawTextureIndexed(476, 451, pIcons_LOD->GetTexture(uTextureID_x_ok_u)); | |
217 if ( (pVideoPlayer->AnyMovieLoaded() || v9) && *dword_591164_teleport_map_name != ' ' ) | |
218 v10 = pMapStats->GetMapInfo(dword_591164_teleport_map_name); | |
219 pMapInfo = &pMapStats->pInfos[v10]; | |
220 v8.uFrameX = 493; | |
221 v8.uFrameWidth = 126; | |
222 v8.uFrameZ = 366; | |
223 v8.DrawTitleText(pFontCreate, 0, 5u, 0, pMapInfo->pName, 3); | |
224 v8.uFrameX = 483; | |
225 v8.uFrameWidth = 148; | |
226 v8.uFrameZ = 334; | |
227 | |
228 v1 = ""; | |
229 if ( uCurrentHouse_Animation ) | |
230 { | |
231 v1 = pTransitionStrings[uCurrentHouse_Animation]; | |
232 v4 = (212 - pFontCreate->CalcTextHeight(v1, &v8, 0, 0)) / 2 + 101; | |
233 v8.DrawTitleText(pFontCreate, 0, v4, 0, v1, 3); | |
234 } | |
235 else if ( v10 ) | |
236 { | |
237 sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[409], pMapInfo->pName);// "Do you wish to leave %s?" | |
238 v4 = (212 - pFontCreate->CalcTextHeight(pTmpBuf.data(), &v8, 0, 0)) / 2 + 101; | |
239 v8.DrawTitleText(pFontCreate, 0, v4, 0, pTmpBuf.data(), 3); | |
240 } | |
1545 | 241 else Error("Troubles in da house"); |
1298 | 242 |
243 _unused_5B5924_is_travel_ui_drawn = true; | |
244 } |