Wing Commander II
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
taperec.c
Go to the documentation of this file.
1/*
2 * Canned-scene tape recorder.
3 *
4 * Retail object 0x401A10-0x40243B (link order; see docs/ORDER.md).
5 */
6#include "game.h"
7
8void *g_pHighMemoryBlockA = 0; /* 0x004901f8 */
9unsigned short g_wHighMemoryBlockBytes = 0xd4e4; /* 0x004901fc */
10void *g_pHighMemoryBlockB = 0; /* 0x00490200 */
11char g_szCannedSceneTapeFile[9] = "tape.tmp"; /* 0x00490208 */
12short g_nCannedSceneBufferNearCapacityFlag = 0; /* 0x00490214 */
13short g_nCannedSceneSegmentEndFrame = -1; /* 0x00490218 */
14short g_nCannedSceneMode = 0; /* 0x0049021c */
15short g_nCannedSceneStateRecordMarker = 0; /* 0x00490220 */
16
17extern unsigned int g_dwCannedSceneSnapshotEnd; /* 0x004961a4 */
18
19/* Function start: 0x401A10 */
31
32/* Function start: 0x401A62 */
34{
36 short index;
37
38 for (index = 0; index < 70; index++)
43 header->nextFrame = -1;
44 header->byteCount = 0x29a;
45}
46
47/* Function start: 0x401ACB */
49{
50 FixedVector savedUp;
51 FixedVector savedPoint;
52 FixedVector savedForward;
53 int savedView;
54 FixedVector savedVelocity;
55
57 return;
58 if (g_nCannedSceneMode != 0) {
59 savedPoint = g_aShipPosition[EYE_OBJECT];
60 savedVelocity = g_aShipVelocity[EYE_OBJECT];
61 savedUp = g_aShipUpVector[EYE_OBJECT];
62 savedForward = g_aShipForwardVector[EYE_OBJECT];
63 savedView = g_nCurrentView;
66 g_aShipPosition[EYE_OBJECT] = savedPoint;
67 g_aShipVelocity[EYE_OBJECT] = savedVelocity;
68 g_aShipUpVector[EYE_OBJECT] = savedUp;
69 g_aShipForwardVector[EYE_OBJECT] = savedForward;
70 g_nCurrentView = savedView;
71 } else {
74 }
76}
77
78/* Function start: 0x401C1A */
80{
81 if ((int)(unsigned short)g_wHighMemoryBlockBytes - 1000 <=
82 (int)(unsigned short)g_3_nCannedSceneWriteIndex) {
83 if ((int)(unsigned short)g_wHighMemoryBlockBytes <=
84 (int)(unsigned short)g_3_nCannedSceneWriteIndex) {
86 }
88 }
89}
90
91/* Function start: 0x401C72 */
93{
95 return 0;
96 if (g_anShipCloakState[obj] == 1 &&
98 return 7;
99 else if (g_anShipCloakState[obj] == 0 &&
100 g_asShipCloakCooldown[obj] == 40)
101 return 8;
103 return 2;
104 if (g_asShipTactic[obj] == TACTIC_WARP_IN)
105 return 3;
106 switch (g_aeSpecialManeuver[obj]) {
107 case 1:
108 return 1;
109 default:
110 return 0;
111 }
112}
113
114/* Function start: 0x401D79 */
116{
117 FixedVector recordedVelocity;
118 FixedVector recordedForward;
120 int objectMode;
121 FixedVector recordedUp;
122
125 return;
126 {
129 objectMode = GetCannedSceneObjectMode(obj);
130 if ((unsigned short)g_1_asCannedSceneFrameStarts[obj] !=
131 0xffff) {
132 record = (CannedSceneObjectStateRecord *)(
133 (unsigned int)(unsigned short)
136 recordedVelocity = record->velocity;
137 recordedUp = record->up;
138 recordedForward = record->forward;
139 if (equ_vector(&g_aShipVelocity[obj],
140 &recordedVelocity) != 0 &&
142 &recordedUp) != 0 &&
144 &recordedForward) != 0 &&
145 record->mode == objectMode)
146 return;
147 }
149 record = (CannedSceneObjectStateRecord *)(
150 (unsigned int)(unsigned short)g_3_nCannedSceneWriteIndex +
154 if (0) {
156 printf("ship script error: segment wrap");
157 getch();
158 exit(1);
159 }
160 record->opcode = 0;
161 record->frame = g_nSpaceFrame;
162 record->object = (signed char)obj;
163 record->velocity = g_aShipVelocity[obj];
164 record->forward = g_aShipForwardVector[obj];
165 record->up = g_aShipUpVector[obj];
166 record->mode = objectMode;
167 record->endMarker = -1;
168 record->nextOffset = 0x29b;
170 (unsigned short)g_3_nCannedSceneWriteIndex + 0x2f);
172 }
173}
174
175/* Function start: 0x401FDD */
176void RecordCannedSceneObjectEvent(short obj, int event)
177{
179
182 return;
185 record = (CannedSceneObjectEventRecord *)(
186 (unsigned int)(unsigned short)
189 if (0) {
191 printf("master script error: segment wrap");
192 getch();
193 exit(1);
194 }
195 record->opcode = 3;
196 record->event = event;
197 record->frame = g_nSpaceFrame;
198 record->object = (signed char)obj;
199 switch (event) {
200 case 0:
201 record->position = g_aShipPosition[obj];
202 record->velocity = g_aShipVelocity[obj];
203 record->objectType = g_asObjectType[obj];
204 record->owner = g_acObjectOwner[obj];
205 record->counter = g_asObjectCounter[obj];
206 record->scale = g_asObjectScale[obj];
207 record->endMarker = -1;
208 record->nextOffset = 0x29c;
209 break;
210 case 1:
211 record->endMarker = -1;
212 record->nextOffset = 0x29f;
213 break;
214 case 3:
215 record->endMarker = -1;
216 record->nextOffset = 0x2a0;
217 break;
218 default:
219 break;
220 }
222 (unsigned short)g_3_nCannedSceneWriteIndex + 0x2a);
224}
225
226/* Function start: 0x4021A7 */
227void RecordCannedSceneBriefingCharacter(signed char character,
228 signed char pose,
229 short animationFrame)
230{
232
235 return;
239 (unsigned int)(unsigned short)
242 record->opcode = 1;
243 record->frame = g_nSpaceFrame;
244 record->character = character;
245 record->pose = pose;
246 record->animationFrame = animationFrame;
247 record->endMarker = -1;
248 record->nextOffset = 0x29d;
250 (unsigned short)g_3_nCannedSceneWriteIndex + 0xa);
252}
253
254/* Function start: 0x402258 */
255void RecordMusicCommandHook(int track, int command, short enabled)
256{
258
259 return;
262 return;
266 (unsigned int)(unsigned short)g_3_nCannedSceneWriteIndex +
268 record->opcode = 2;
269 record->frame = g_nSpaceFrame;
270 record->track = track;
271 record->command = command;
272 record->enabled = enabled;
273 record->endMarker = -1;
274 record->nextOffset = 0x29e;
276 (unsigned short)g_3_nCannedSceneWriteIndex + 0x10);
278}
279
280/* Function start: 0x40230E */
282{
283 short file;
284
286 if (file == -1)
288 WriteDataFileAtOffset((unsigned short)file,
293 CloseDataFile((unsigned short)file);
294}
295
296/* Function start: 0x402385 */
298{
299 short file;
300
302 if (file == -1)
304 WriteDataFileAtOffset((unsigned short)file,
306 2, &g_nSpaceFrame);
308 WriteDataFileAtOffset((unsigned short)file,
313 (unsigned short)file, g_4_nCannedSceneFileOffset,
314 (unsigned int)(unsigned short)g_3_nCannedSceneWriteIndex,
317 (unsigned short)g_3_nCannedSceneWriteIndex;
318 CloseDataFile((unsigned short)file);
319}
320
321/* Linker commons defined here. LINK lays a unit's commons out by the
322 * identifiers' hash keys, so these spellings follow the original addresses. */
323short g_3_nCannedSceneWriteIndex; /* 0x005d3fa8 */
325int g_4_nCannedSceneFileOffset; /* 0x005d3fac */
326void *g_1_pCannedSceneStateBlockRef; /* 0x005d3fb0 */
328short g_1_asCannedSceneFrameStarts[70]; /* 0x005d3fc0 */
329short g_5_nCannedSceneFrameCount; /* 0x005d404c */
void RecordMusicCommandHook(int track, int command, short enabled)
Definition taperec.c:255
short WriteDataFileAtOffset(unsigned short fd, int offset, unsigned int length, const void *data)
Definition datafile.c:28
short LogMemoryUsage(void)
Definition main.c:24
int GetCannedSceneObjectMode(short obj)
Definition taperec.c:92
void HandleCannedSceneBufferBoundary(void)
Definition taperec.c:48
void ReportFatalErrorCode(const char *errorCode)
Definition message.c:29
void CheckCannedSceneBufferCapacity(void)
Definition taperec.c:79
void RecordCannedSceneObjectState(short obj)
Definition taperec.c:115
void FlushCannedSceneRecordingBuffer(void)
Definition taperec.c:297
short OpenDataFileOrDie(const char *path)
Definition datafile.c:13
short CreateDataFile(const char *path)
Definition datafile.c:46
void LoadCannedScenePlaybackBuffer(void)
Definition replay.c:219
void CloseDataFile(unsigned short fd)
Definition datafile.c:22
void RecordCannedSceneObjectEvent(short obj, int event)
Definition taperec.c:176
void WriteTapeInitialState(void)
Definition taperec.c:281
short equ_vector(const FixedVector *left, const FixedVector *right)
Definition geom.c:182
void RecordCannedSceneBriefingCharacter(signed char character, signed char pose, short animationFrame)
Definition taperec.c:227
void InitializeCannedSceneFrameIndex(void)
Definition taperec.c:33
DwordPtr IdentityDword(DwordPtr value)
Definition eventmgr.c:1491
void ResetCannedSceneRecording(void)
Definition taperec.c:20
void ResetCannedScenePlaybackBuffer(void)
Definition replay.c:17
Shared Win32 declarations, types and library interfaces.
unsigned int DwordPtr
Definition game.h:45
#define CANNED_SCENE_SNAPSHOT_BYTES
Definition game.h:61
#define EYE_OBJECT
Definition game_data.h:1580
@ OBJECT_CLASS_SHIP
Definition game_data.h:49
@ TACTIC_WARP_OUT
Definition game_data.h:159
@ TACTIC_WARP_IN
Definition game_data.h:160
short g_asShipCloakCooldown[10]
Definition viewrect.c:180
short g_1_asCannedSceneFrameStarts[70]
Definition taperec.c:328
short g_78_bHighMemoryBuffersSetState
Definition cockpt.c:3839
int g_nCurrentView
Definition spc.c:11
short g_aeObjectClass[SPACE_OBJECT_COUNT]
Definition viewrect.c:125
short g_asObjectType[SPACE_OBJECT_COUNT]
Definition viewrect.c:124
short g_nCannedSceneRecordedFrameCountNumber
Definition taperec.c:324
DwordPtr g_dwHighMemoryParagraphValue
Definition taperec.c:327
FixedVector g_aShipForwardVector[SPACE_OBJECT_COUNT]
Definition viewrect.c:107
short g_asShipCloakElapsedFrames[10]
Definition viewrect.c:181
short g_aeSpecialManeuver[12]
Definition viewrect.c:141
unsigned short g_asObjectScale[SPACE_OBJECT_COUNT]
Definition viewrect.c:115
short g_nCannedSceneBufferNearCapacityFlag
Definition taperec.c:12
signed char g_acObjectOwner[SPACE_OBJECT_COUNT]
Definition viewrect.c:122
short g_nSpaceFrame
Definition viewrect.c:32
short g_asShipTactic[12]
Definition viewrect.c:168
short g_3_nCannedSceneWriteIndex
Definition taperec.c:323
unsigned short g_wHighMemoryBlockBytes
Definition taperec.c:9
int g_anShipCloakState[10]
Definition viewrect.c:179
FixedVector g_aShipPosition[SPACE_OBJECT_COUNT]
Definition viewrect.c:108
FixedVector g_aShipUpVector[SPACE_OBJECT_COUNT]
Definition viewrect.c:106
FixedVector g_aShipVelocity[SPACE_OBJECT_COUNT]
Definition viewrect.c:109
int g_4_nCannedSceneFileOffset
Definition taperec.c:325
unsigned int g_dwCannedSceneSnapshotStart
Definition viewrect.c:31
void * g_1_pCannedSceneStateBlockRef
Definition taperec.c:326
void * g_pHighMemoryBlockA
Definition taperec.c:8
char g_szCannedSceneTapeFile[9]
Definition taperec.c:11
short g_nCannedSceneSegmentEndFrame
Definition taperec.c:13
void * g_pHighMemoryBlockB
Definition taperec.c:10
short g_5_nCannedSceneFrameCount
Definition taperec.c:329
short g_asObjectCounter[SPACE_OBJECT_COUNT]
Definition viewrect.c:110
short g_nCannedSceneMode
Definition taperec.c:14
short g_nCannedSceneStateRecordMarker
Definition taperec.c:15
unsigned int g_dwCannedSceneSnapshotEnd
Definition viewrect.c:200
unsigned int byteCount
Definition game_data.h:615