You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.3 KiB
102 lines
2.3 KiB
/*** |
|
* |
|
* Copyright (c) 1996-2002, Valve LLC. All rights reserved. |
|
* |
|
* This product contains software technology licensed from Id |
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. |
|
* All Rights Reserved. |
|
* |
|
* Use, distribution, and modification of this source code and/or resulting |
|
* object code is restricted to non-commercial enhancements to products from |
|
* Valve LLC. All other use, distribution, or modification is prohibited |
|
* without written permission from Valve LLC. |
|
* |
|
****/ |
|
|
|
#include "hud.h" |
|
#include "cl_util.h" |
|
#include "demo.h" |
|
#include "demo_api.h" |
|
#include <memory.h> |
|
|
|
int g_demosniper = 0; |
|
int g_demosniperdamage = 0; |
|
float g_demosniperorg[3]; |
|
float g_demosniperangles[3]; |
|
float g_demozoom; |
|
|
|
// FIXME: There should be buffer helper functions to avoid all of the *(int *)& crap. |
|
|
|
extern "C" |
|
{ |
|
void DLLEXPORT Demo_ReadBuffer( int size, unsigned char *buffer ); |
|
} |
|
|
|
/* |
|
===================== |
|
Demo_WriteBuffer |
|
|
|
Write some data to the demo stream |
|
===================== |
|
*/ |
|
void Demo_WriteBuffer( int type, int size, unsigned char *buffer ) |
|
{ |
|
int pos = 0; |
|
unsigned char buf[32 * 1024]; |
|
*(int *)&buf[pos] = type; |
|
pos += sizeof(int); |
|
|
|
memcpy( &buf[pos], buffer, size ); |
|
|
|
// Write full buffer out |
|
gEngfuncs.pDemoAPI->WriteBuffer( size + sizeof(int), buf ); |
|
} |
|
|
|
/* |
|
===================== |
|
Demo_ReadBuffer |
|
|
|
Engine wants us to parse some data from the demo stream |
|
===================== |
|
*/ |
|
void DLLEXPORT Demo_ReadBuffer( int size, unsigned char *buffer ) |
|
{ |
|
int type; |
|
int i = 0; |
|
|
|
type = *(int *)buffer; |
|
i += sizeof(int); |
|
switch( type ) |
|
{ |
|
case TYPE_SNIPERDOT: |
|
g_demosniper = *(int *)&buffer[i]; |
|
i += sizeof(int); |
|
|
|
if( g_demosniper ) |
|
{ |
|
g_demosniperdamage = *(int *)&buffer[i]; |
|
i += sizeof(int); |
|
|
|
g_demosniperangles[0] = *(float *)&buffer[i]; |
|
i += sizeof(float); |
|
g_demosniperangles[1] = *(float *)&buffer[i]; |
|
i += sizeof(float); |
|
g_demosniperangles[2] = *(float *)&buffer[i]; |
|
i += sizeof(float); |
|
g_demosniperorg[0] = *(float *)&buffer[i]; |
|
i += sizeof(float); |
|
g_demosniperorg[1] = *(float *)&buffer[i]; |
|
i += sizeof(float); |
|
g_demosniperorg[2] = *(float *)&buffer[i]; |
|
i += sizeof(float); |
|
} |
|
break; |
|
case TYPE_ZOOM: |
|
g_demozoom = *(float *)&buffer[i]; |
|
i += sizeof(float); |
|
break; |
|
default: |
|
gEngfuncs.Con_DPrintf( "Unknown demo buffer type, skipping.\n" ); |
|
break; |
|
} |
|
}
|
|
|