reman3/game_re/gh_fix/r3_BNK_playMovie.cxx

210 lines
7.8 KiB
C++

// AUTO-GENERATED FILE, MOVE TO 'gh_fix' FOLDER PREVENT OVERWRITING!!!!!
#include <r3/binders/auto.h>
#include <gh_global.h>
#include <bink.h>
extern "C" {
undefined FUN_00401270(void); // 00401270 // FUN_00401270 // cdecl
undefined FUN_0047bb20(undefined4 param_1); // 0047bb20 // FUN_0047bb20 // cdecl
HANDLE r3_getDrawSemaphore(void); // 004013f0 // r3_getDrawSemaphore // cdecl
undefined FUN_0047bb10(void); // 0047bb10 // FUN_0047bb10 // cdecl
void r3_validateBinkVideoQuality(
byte videoBpp,
byte wantedVideoQuality); // 00442090 // r3_validateBinkVideoQuality //
// stdcall
BOOL GLD_bGetViewportAttributes(
short param_1, short combinedWindowHandle,
GLD_ViewportAttributes
*out); // 0046f240 // GLD_bGetViewportAttributes // cdecl
int IPT_fn_hGetEntryActionHandle(
const char *param_1); // 00506510 // IPT_fn_hGetEntryActionHandle // cdecl
undefined FUN_0046f680(undefined param_1,
undefined4 param_2); // 0046f680 // FUN_0046f680 // cdecl
undefined FUN_00441f30(void); // 00441f30 // FUN_00441f30 // cdecl
undefined FUN_00470f20(void); // 00470f20 // FUN_00470f20 // cdecl
undefined FUN_0047bfe0(undefined4 param_1); // 0047bfe0 // FUN_0047bfe0 // cdecl
undefined FUN_00485320(undefined4* outPtr, undefined4 param_2,
undefined4 param_3, undefined4 unused); // 00485320 // FUN_00485320 // cdecl
undefined SND_fn_vKillAllObjectSound(
void); // 0040a220 // SND_fn_vKillAllObjectSound // cdecl
undefined *getMoviePath(void); // 0055aa00 // getMoviePath // cdecl
undefined FUN_004420f0(undefined4 param_1); // 004420f0 // FUN_004420f0 // cdecl
undefined r3_binkLoop(void); // 004427a0 // r3_binkLoop // cdecl
undefined FUN_00485400(undefined4 param_1); // 00485400 // FUN_00485400 // cdecl
undefined FUN_004422c0(undefined4 param_1); // 004422c0 // FUN_004422c0 // cdecl
undefined FUN_00444810(void); // 00444810 // FUN_00444810 // cdecl
HBINK r3_binkOpen(char *movieFilename,
ulong flags); // 00442240 // r3_binkOpen // cdecl
void Erm_fn_v_UpdateLastError(
ushort uwStartOfWarningsId, byte ucModuleId, ulong ulChannelId,
ushort uwErrNum, long lDebugData, uchar ucOpenInfoWindow,
uchar ucStopForDebug,
char *szPersonalMsg); // 0043e410 // Erm_fn_v_UpdateLastError // stdcall
undefined FUN_0046f410(uint unused0,
uint unused1); // 0046f410 // FUN_0046f410 // cdecl
void r3_checkMovieDisc(
char *movieName); // 00445a10 // r3_checkMovieDisc // stdcall
undefined FUN_0046ed40(undefined param_1, undefined param_2,
undefined2 param_3); // 0046ed40 // FUN_0046ed40 // cdecl
uint32_t r3_doesMovieHaveSoundtrack(
char *param_1); // 00442130 // r3_doesMovieHaveSoundtrack // cdecl
// 00442330
/* WARNING: Inlined function: FUN_00485390 */
void r3_BNK_playMovie(char *param_1, char param_2, int param_3)
{
uint uVar1;
byte bVar2;
undefined *puVar3;
char *puVar4;
int haveSoundtrack;
longlong lVar5;
longlong lVar6;
float fVar5;
float extraout_ST0;
undefined4 uVar7;
char auStack_1b4[65];
undefined1 auStack_b0[64];
GLD_ViewportAttributes GStack_70;
bVar2 = BYTE_007a2c54;
g_currentBinkMovie.drawSemaphore = (HANDLE)r3_getDrawSemaphore();
DAT_007a2e01 = FUN_0047bb10();
g_StopVideoActionHandle = IPT_fn_hGetEntryActionHandle(s_StopVideo_005bd740);
uVar1 = (uint)bVar2;
DWORD_005bd62c = uVar1;
if (param_2 != '\0') {
SND_fn_vKillAllObjectSound();
}
r3_validateBinkVideoQuality(g_bink_videoBpp, g_bink_realVideoQuality);
haveSoundtrack = FUN_00444810();
BinkSetSoundTrack(haveSoundtrack + 1);
if (param_1 == 0) {
r3_checkMovieDisc(*(char **)(DAT_007a2c4c + 4 + uVar1 * 8));
uVar7 = *(undefined4 *)(DAT_007a2c4c + 4 + uVar1 * 8);
/* maybe, not initialized yet */
puVar3 = getMoviePath();
sprintf((char *)auStack_1b4, s_percent_s_path_2, puVar3, uVar7);
puVar4 = strlwr(auStack_1b4);
haveSoundtrack = r3_doesMovieHaveSoundtrack(puVar4);
if (haveSoundtrack == 0) {
/* BINKIOSIZE | BINKNOSKIP | BINKSNDTRACK */
uVar7 = 0x1084000;
} else {
/* BINKIOSIZE | BINKNOSKIP */
uVar7 = 0x1080000;
}
g_binkHandle = (HBINK)r3_binkOpen(auStack_1b4, uVar7);
if (g_binkHandle != (HBINK)0x0)
goto LAB_00442549;
uVar7 = *(undefined4 *)(DAT_007a2c4c + 4 + uVar1 * 8);
puVar3 = getMoviePath();
sprintf((char *)auStack_1b4, s_percent_s_path_3, 0x5d26a8, puVar3, uVar7);
puVar4 = strlwr((char *)*(uint **)(DAT_007a2c4c + 4 + uVar1 * 8));
haveSoundtrack = r3_doesMovieHaveSoundtrack(puVar4);
if (haveSoundtrack == 0) {
/* BINKNOSKIP | BINKSNDTRACK | BINKPRELOADALL */
uVar7 = 0x86000;
} else {
/* BINKNOSKIP | BINKPRELOADALL */
uVar7 = 0x82000;
}
} else {
/* Similar logic to above */
r3_checkMovieDisc((char *)param_1);
sprintf((char *)auStack_1b4, s_percent_s_path_2, s_Videos_005bd72c,
param_1);
puVar4 = strlwr(auStack_1b4);
haveSoundtrack = r3_doesMovieHaveSoundtrack(puVar4);
if (haveSoundtrack == 0) {
/* BINKIOSIZE | BINKNOSKIP | BINKSNDTRACK */
uVar7 = 0x1084000;
} else {
/* BINKIOSIZE | BINKNOSKIP */
uVar7 = 0x1080000;
}
g_binkHandle = (HBINK)r3_binkOpen(auStack_1b4, uVar7);
if ((g_binkHandle != (HBINK)0x0) ||
(g_currentBinkMovie.movieName[0] == '\0'))
goto LAB_00442549;
/* g_currentBinkMovie.movieName */
sprintf((char *)auStack_1b4, s_percent_s_path_3,
g_currentBinkMovie.movieName, s_Videos_005bd72c, param_1);
puVar4 = strlwr(param_1);
haveSoundtrack = r3_doesMovieHaveSoundtrack(puVar4);
if (haveSoundtrack == 0) {
uVar7 = 0x86000;
} else {
uVar7 = 0x82000;
}
}
g_binkHandle = (HBINK)r3_binkOpen(auStack_1b4, uVar7);
if (g_binkHandle == (HBINK)0x0) {
return;
}
LAB_00442549:
g_binkMovieEnded = 0;
DAT_007a2dbc = 0;
DAT_007a2dc0 = 0;
DAT_007a2da8 = 0;
DAT_007a2dac = 0;
DAT_007a2db0 = 0;
DAT_007a2db8 = 0;
DAT_007a2e14 = 1;
if (g_binkHandle == (HBINK)0x0) {
Erm_fn_v_UpdateLastError(6, g_BNK_moduleId, 0, 7, -1, 0xff, 0xff,
(char *)auStack_1b4);
} else {
DAT_007a2dd4 = g_binkHandle->Width;
FLOAT_007a2dd8 = (float)g_binkHandle->Height;
g_bink_videoBpp = FUN_00485320(&g_binkDestStorage, g_binkHandle->Width,
g_binkHandle->Height, 0);
haveSoundtrack = g_binkDestStorage;
if (g_binkDestStorage != 0) {
r3_validateBinkVideoQuality(g_bink_videoBpp, g_bink_realVideoQuality);
FUN_00485400(haveSoundtrack, 0);
FUN_004420f0(0);
uVar7 = FUN_00401270();
FUN_0046f680(uVar7, 0);
FUN_0046ed40(0, 0, 1);
FUN_0046f410(0, 0xff);
FUN_0046ed40(0, 0, 1);
GLD_bGetViewportAttributes(0, 0, &GStack_70);
fVar5 = (float)DAT_007a2dd4 *
((float)GStack_70.dwWidth / (float)(DAT_007a2dd4 * 2));
extraout_ST0 = (float)(fVar5 + fVar5);
lVar5 = r3_ftol(extraout_ST0);
lVar6 = r3_ftol((float)((float)(uint)FLOAT_007a2dd8 * extraout_ST0));
DAT_007a2ddc = (GStack_70.dwHeight - (int)lVar6) >> 1;
DAT_007a2de0 = DAT_007a2ddc + (int)lVar6;
DAT_007a2de4 = (GStack_70.dwWidth - (int)lVar5) >> 1;
DAT_007a2de8 = DAT_007a2de4 + (int)lVar5;
BinkSetSoundOnOff(g_binkHandle, 1);
if (param_3 == -1) {
param_3 = DAT_007a2dd0;
}
BinkSetVolume(g_binkHandle, param_3);
FUN_0047bfe0(4);
FUN_00470f20();
r3_binkLoop();
g_binkDestStorage = 0;
BinkSetSoundOnOff(g_binkHandle, 0);
FUN_004422c0(g_binkHandle);
g_binkHandle = (HBINK)0x0;
FUN_00441f30();
FUN_0047bb20(4);
uVar7 = FUN_00401270(0, 0);
FUN_0046f680(uVar7);
FUN_0046ed40(0, 0, 3);
FUN_0046f410(0, 0xff);
FUN_0046ed40(0, 0, 3);
return;
}
}
return;
}
}