summaryrefslogtreecommitdiff
path: root/csrc/media_init.c
blob: d73c4dc80f1bb71028b281853ac268483260bb43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "global.h"

IDirectDraw *pddraw; // 0x0048a0d8

DDSURFACEDESC sfdesc1; // 0x0048a068
IDirectDrawSurface *pddrawsf1; // 0x0048a0dc
IDirectDrawSurface *pddrawsf2; // 0x0048a0e0
IDirectDrawSurface *pddrawsf3; // 0x004762cc

int mkf_data; // 0x48a0e4
int mkf_speaking; // 0x48a054
int mkf_panel; // 0x48a05c
int mkf_effect; // 0x48a058

HHOOK ghook; // 0x48a050

void direct_sound_init(int a0)
{
}

void fcn_0044f935()
{
	sfdesc1.dwFlags = 7;
	sfdesc1.ddsCaps = 0x840;
	sfdesc1.dwWidth = 0x200;
	sfdesc1.dwHeight = 200;

	(*pddraw)->CreateSurface(pddraw, &sfdesc1, &pddrawsf3, NULL);
	(*pddrawsf3)->Lock(pddrawsf3, NULL, &sfdesc1, 1, NULL);
	memcpy(*(uint32_t*)0x48a08c, 0, 0x32000);
	(*pddrawsf3)->Unlock(pddrawsf3, NULL);
}

void fcn_0045175d()
{
	DDPIXELFORMAT fmt;
	fmt.dwSize = 0x20;
	(*pddrawsf1)->GetPixelFormat(pddrawsf1, &fmt);
	if (fmt.DUMMYUNIONNAME2.dwRBitMask == 0x7c00
			&& fmt.DUMMYUNIONNAME3.dwGBitMask == 0x03e0)
		dw_47637c = 0;

	if (fmt.DUMMYUNIONNAME2.dwRBitMask == 0xf800
			&& fmt.DUMMYUNIONNAME3.dwGBitMask == 0x07e0)
		dw_47637c = 1;

	if (fmt.DUMMYUNIONNAME2.dwRBitMask == 0x001f
			&& fmt.DUMMYUNIONNAME3.dwGBitMask == 0x07e0)
		dw_47637c = 2;

	if (fmt.DUMMYUNIONNAME2.dwRBitMask == 0x0f00
			&& fmt.DUMMYUNIONNAME3.dwGBitMask == 0x00f0)
		dw_47637c = 3;
}

bool initialize()
{
	direct_sound_init(0);
	HRESULT res = DirectDrawCreate(NULL, &pddraw, NULL);
	if (res != 0) {
		MessageBoxA(0, "DirectDraw Initial Error!", "ERROR", 16);
		return 0;
	}
	(*pddraw)->SetCooperativeLevel(pddraw, gwindowHandle, 17);
	if ((*pddraw)->SetDisplayMode(pddraw, 640, 480, 16) != 0) {
		MessageBoxA(0, "DirectDraw SetMode Error!", "ERROR", 16);
		return 0;
	}
	sfdesc1.dwSize = 0x6c;
	sfdesc1.dwFlags = 1;
	sfdesc1.ddsCaps = 0x200;
	(*pddraw)->CreateSurface(pddraw, &sfdesc1, &pddrawsf1, NULL);

	(*pddrawsf1)->Restore(pddrawsf1);
	(*pddrawsf1)->Lock(pddrawsf1, NULL, &sfdesc1, 1, NULL);
	dw_48a060 = sfdesc1.DUMMYUNIONNAME1.dwLinearSize;
	(*pddrawsf1)->Unlock(pddrawsf1, NULL);
	sfdesc1.dwFlags = 7;
	sfdesc1.ddsCaps = 0x840;
	sfdesc1.dwWidth = 640;
	sfdesc1.dwHeight = 480;
	(*pddraw)->CreateSurface(pddraw, &sfdesc1, &pddrawsf2, NULL);
	srand(GetTicketCount());
	fcn_0044f935();
	fcn_0045175d();
	mkf_data = load_mkf("data.mkf");
	mkf_speaking = load_mkf("speaking.mkf");
	mkf_panel = load_mkf("panel.mkf");
	mkf_effect = load_mkf("effect.mkf");
	fcn_00454176(0x48231a);
	config_rich4();
	ghook = SetWindowsHookExA(WH_KEYBOARD, fcn_401010, ghInstance, 0);
	ShowCursor_fa();
	mciSendStringA_5ba();
	fcn_004021f8(0x29, 1, 0);
	b_46caf8 = 0;
	b_46caf9 = 0;
	b_46cafd = 0;
	mid_status[5] = 0;
	memset(0x4990f0, 0, 4);
	dw_474938 = malloc(387200);
	dw_474930 = dw_474934 = dw_48a010 = dw_46cad8 = 0;
	b_47e771 = 0;
	return 1;
}