Wing Commander II
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
stream.cpp
Go to the documentation of this file.
1/*
2 * Game wrappers around the audio streamer.
3 *
4 * Retail object 0x428900-0x428DFF (link order; see docs/ORDER.md).
5 *
6 * A C++ unit: ix_log_printf, which the ix library calls with C++ linkage,
7 * sits between the streamer wrappers, and GetStreamerState follows the
8 * unit's code as a separately aligned COMDAT.
9 */
10#include "game.h"
11
12/* Uninitialized C++ definitions: this unit's .bss, which LINK orders by the
13 * identifiers' hash keys (the spellings follow the original addresses). */
14int g_nStreamerAudioPlaying; /* 0x005b2810 */
15char g_szStreamerDirectory[128]; /* 0x005b2818 */
16char g_15_szLegacyGameDataPath[0x400]; /* 0x005b2898 */
17/* Formatting scratch buffer for ix_log_printf; it fills the 0x450 bytes up
18 * to mono.c's storage. */
19char g_3_szIxLogText[0x450]; /* 0x005b2c98 */
20
21void ix_log_printf(const char *fmt, ...);
22
23/* Called only by UpdateStreamerStoppedFlag; MSVC places the out-of-line copy
24 * after the unit's code as a separately aligned COMDAT. */
25/* Function start: 0x428DE0 */
26inline unsigned int GetStreamerState(void)
27{
28 return g_dwStreamerMode;
29}
30
31/* Function start: 0x428900 */
32void InitializeAudioStreamer(HWND window)
33{
34 if (g_nAudioEnabled == 0)
35 return;
36 ix_streamer_configure(3, (void *)1);
37 ix_streamer_configure(0, window);
40 return;
41}
42
43/* Function start: 0x42894B */
45{
46 if (g_nAudioEnabled == 0)
47 return;
49 return;
50}
51
52/* Function start: 0x428979 */
54{
55 if (g_nAudioEnabled == 0)
56 return;
57 if ((GetStreamerState() & 4) == 0)
59 else
61 return;
62}
63
64/* Function start: 0x4289BF */
65void Streamer_open(const char *streamName)
66{
67 char *streamsDirectory;
68
69 if (g_nAudioEnabled == 0)
70 return;
71 streamsDirectory = LocateStreamsDirOnDisc();
72 sprintf(g_szStreamerDirectory, "%s%s",
73 streamsDirectory, streamName);
74 SoundDebugPrintf("Streamer_open %s\n", g_szStreamerDirectory);
77 return;
78}
79
80/* Function start: 0x428A2F */
81void Streamer_play(void)
82{
83 if (g_nAudioEnabled == 0)
84 return;
85 if (g_nStreamerAudioPlaying == 0) {
88 }
89 return;
90}
91
92/* Function start: 0x428A6D */
93void Streamer_stop(void)
94{
95 if (g_nAudioEnabled == 0)
96 return;
97 if (g_nStreamerAudioPlaying != 0) {
100 }
101 return;
102}
103
104/* Function start: 0x428AAB */
105void SetStreamerIntensity(int intensity)
106{
107 if (g_nAudioEnabled == 0)
108 return;
109 ix_streamer_set_intensity((unsigned char)intensity);
112 return;
113}
114
115/* Function start: 0x428AEB */
116void SetStreamerTrigger(int trigger)
117{
118 if (g_nAudioEnabled == 0)
119 return;
120 ix_streamer_set_trigger((char)trigger);
121 if (trigger >= 0 && g_nStreamerAudioPlaying == 0)
122 ForceStreamerTrigger(trigger);
123 return;
124}
125
126/* Function start: 0x428B3C */
127void ForceStreamerTrigger(int trigger)
128{
129 if (g_nAudioEnabled == 0)
130 return;
131 if (trigger > 0) {
132 ix_streamer_force_trigger((char)trigger);
135 }
136 return;
137}
138
139/* Function start: 0x428B86 */
141{
142 if (g_nAudioEnabled == 0)
143 return;
145 return;
146}
147
148/* Function start: 0x428BAD */
150{
151 if (g_nAudioEnabled == 0)
152 return;
154 return;
155}
156
157/* The ix diagnostic printer. Every ix diagnostic goes through here, 107
158 * call sites, always in pairs:
159 * ix_log_printf("Fatal [%s - %d]:\n", __FILE__, __LINE__);
160 * ix_log_printf("human readable message");
161 * The ix units call it with C++ linkage. */
162#pragma function(strcpy)
163/* Function start: 0x428BD4 */
164void ix_log_printf(const char *fmt, ...)
165{
166 va_list arguments;
167
168 if (fmt != 0) {
169 va_start(arguments, fmt);
170 vsprintf(g_3_szIxLogText, fmt, arguments);
171 va_end(arguments);
172 } else {
173 strcpy(g_3_szIxLogText, "(null)");
174 }
175 OutputDebugStringA(g_3_szIxLogText);
176}
177
178/* The registry key and value names are constant arrays (the original keeps
179 * one copy of each in .rdata, shared by both functions below). */
181 "Software\\Origin Systems\\WC: Kilrathi Saga"; /* 0x0048e070 */
182const char g_szInstalledToValueName[] = "Installed To:"; /* 0x0048e0a0 */
183const char g_szWing1InstalledValueName[] = "Wing 1 Installed"; /* 0x0048e0b0 */
184const char g_szCheaterValueName[] = "Cheater"; /* 0x0048e0c8 */
185
186#pragma function(strcat)
187/* Function start: 0x428C35 */
189{
190 HKEY hKey;
191 DWORD installed;
192 DWORD valueType;
193 DWORD valueSize;
194 char *path;
195
196 path = 0;
197 if (RegOpenKeyExA(HKEY_LOCAL_MACHINE,
199 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) {
200 valueType = REG_SZ;
201 valueSize = sizeof(installed);
202 if (RegQueryValueExA(hKey, g_szWing1InstalledValueName, 0, &valueType,
203 (unsigned char *)&installed,
204 &valueSize) == ERROR_SUCCESS &&
205 installed != 0) {
206 valueType = REG_SZ;
207 valueSize = sizeof(g_15_szLegacyGameDataPath);
208 if (RegQueryValueExA(
209 hKey, g_szInstalledToValueName, 0, &valueType,
210 (unsigned char *)
212 &valueSize) == ERROR_SUCCESS) {
215 "wc1\\gamedat");
216 }
217 }
218 RegCloseKey(hKey);
219 }
220 return path;
221}
222
223/* Function start: 0x428D09 */
225{
226 HKEY key;
227 DWORD type;
228 DWORD length;
229 int enabled = 0;
230
231 if (RegOpenKeyExA(HKEY_LOCAL_MACHINE,
233 0, KEY_ALL_ACCESS, &key) == ERROR_SUCCESS) {
234 type = REG_DWORD;
235 length = sizeof(int);
236 RegQueryValueExA(key, g_szCheaterValueName, 0, &type,
237 (LPBYTE)&enabled, &length);
238 RegCloseKey(key);
239 }
240 if (enabled != 0)
241 OutputDebugStringA("reg cheating\n");
242 else
243 OutputDebugStringA("reg not cheating\n");
244 return enabled;
245}
246
247/* Function start: 0x428DA3 */
248void SetMusicStreamVolume(unsigned short volume)
249{
251 return;
252}
253
254/* Function start: 0x428DBF */
255unsigned int GetMusicStreamVolume(void)
256{
257 return ix_streamer_get_volume();
258}
void ForceStreamerTrigger(int trigger)
Definition stream.cpp:127
void SetMusicStreamVolume(unsigned short volume)
Definition stream.cpp:248
void ix_streamer_set_intensity(unsigned char intensity)
Definition streamer.cpp:383
void SetStreamerIntensity(int intensity)
Definition stream.cpp:105
void InitializeAudioStreamer(HWND window)
Definition stream.cpp:32
int ReadCheaterFlagFromRegistry(void)
Definition stream.cpp:224
void ix_streamer_configure(int option, void *value)
Definition streamer.cpp:99
void SoundDebugPrintf(const char *fmt,...)
Definition mono.c:64
void Streamer_close(void)
Definition stream.cpp:140
void ix_streamer_audio_play(void)
Definition streamer.cpp:333
void Streamer_open(const char *streamName)
Definition stream.cpp:65
void DestroyAudioStreamer(void)
Definition stream.cpp:149
int ix_streamer_open_stream_file(char *path)
Definition streamer.cpp:120
unsigned int GetMusicStreamVolume(void)
Definition stream.cpp:255
char * LocateStreamsDirOnDisc(void)
Definition winmain.c:1222
void ix_streamer_set_trigger(char trigger)
Definition streamer.cpp:399
void ix_streamer_destroy(void)
Definition streamer.cpp:78
char * GetLegacyGameDataPath(void)
Definition stream.cpp:188
void UpdateStreamerStoppedFlag(void)
Definition stream.cpp:53
unsigned short ix_streamer_get_volume(void)
Definition streamer.cpp:487
void SignalAudioMixerWakeEvent(void)
Definition stream.cpp:44
void Streamer_play(void)
Definition stream.cpp:81
int ix_streamer_init(void)
Definition streamer.cpp:48
void SetStreamerTrigger(int trigger)
Definition stream.cpp:116
void ix_streamer_force_trigger(char trigger)
Definition streamer.cpp:420
void ix_streamer_audio_stop(void)
Definition streamer.cpp:346
void ix_streamer_close_stream_file(void)
Definition streamer.cpp:294
void ix_streamer_set_volume(unsigned short volume)
Definition streamer.cpp:471
void Streamer_stop(void)
Definition stream.cpp:93
Shared Win32 declarations, types and library interfaces.
unsigned int g_dwStreamerMode
Definition ix.h:506
int g_nStreamerAudioPlaying
Definition stream.cpp:14
short g_nMusicTrackComplete
Definition music.c:521
char g_15_szLegacyGameDataPath[0x400]
Definition stream.cpp:16
char g_szStreamerDirectory[128]
Definition stream.cpp:15
int g_nAudioEnabled
Definition winmain.c:1349
void ix_log_printf(const char *fmt,...)
Definition stream.cpp:164
const char g_szOriginRegistryKey[]
Definition stream.cpp:180
const char g_szCheaterValueName[]
Definition stream.cpp:184
const char g_szInstalledToValueName[]
Definition stream.cpp:182
unsigned int GetStreamerState(void)
Definition stream.cpp:26
const char g_szWing1InstalledValueName[]
Definition stream.cpp:183
char g_3_szIxLogText[0x450]
Definition stream.cpp:19