mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
All routines are now fully implemented. This was delayed on purpose as some bit buffer functions have changed due to the use of 64bit integers for sizes, and also the coord types. The porting of this has to be done carefully; all reimplemented functions have been changed to feature 64bit integers (where necessary) for syze types, and all values in coordsize.h have been tweaked to reflect the changes in the R5 engine 1:1, allowing us to properly implement the coord bit buffer functions as well.
99 lines
5.0 KiB
C
99 lines
5.0 KiB
C
//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
|
||
//
|
||
// Purpose:
|
||
//
|
||
// $NoKeywords: $
|
||
//
|
||
//===========================================================================//
|
||
|
||
#ifndef COORDSIZE_H
|
||
#define COORDSIZE_H
|
||
#pragma once
|
||
|
||
#include "worldsize.h"
|
||
|
||
// OVERALL Coordinate Size Limits used in COMMON.C MSG_*BitCoord() Routines (and someday the HUD)
|
||
#define COORD_INTEGER_BITS 16
|
||
#define COORD_FRACTIONAL_BITS 5
|
||
#define COORD_DENOMINATOR (1<<(COORD_FRACTIONAL_BITS))
|
||
#define COORD_RESOLUTION (1.0f/(COORD_DENOMINATOR))
|
||
|
||
// Special threshold for networking multiplayer origins
|
||
#define COORD_INTEGER_BITS_MP 11
|
||
#define COORD_FRACTIONAL_BITS_MP_LOWPRECISION 3
|
||
#define COORD_DENOMINATOR_LOWPRECISION (1<<(COORD_FRACTIONAL_BITS_MP_LOWPRECISION))
|
||
#define COORD_RESOLUTION_LOWPRECISION (1.0f/(COORD_DENOMINATOR_LOWPRECISION))
|
||
|
||
#define NORMAL_FRACTIONAL_BITS 11
|
||
#define NORMAL_DENOMINATOR ((1<<(NORMAL_FRACTIONAL_BITS))-1)
|
||
#define NORMAL_RESOLUTION (1.0f/(NORMAL_DENOMINATOR))
|
||
|
||
// this is limited by the network fractional bits used for coords
|
||
// because net coords will be only be accurate to 5 bits fractional
|
||
// Standard collision test epsilon
|
||
// 1/32nd inch collision epsilon
|
||
#define DIST_EPSILON (0.03125)
|
||
|
||
// Verify that coordsize.h and worldsize.h are consistently defined
|
||
#if (MAX_COORD_INTEGER != (1<<COORD_INTEGER_BITS))
|
||
#error MAX_COORD_INTEGER does not match COORD_INTEGER_BITS
|
||
#endif
|
||
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// The following are Bit Packing Diagrams for client/server Coordinate BitField Messages
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// "Coordinates" = +/-16384.9375 (21 Bits Max)
|
||
//
|
||
// | IntegerFlagBit:1 | FractionFlagBit:1 | SignBit:1 | IntegerField:14 | FractionPart:4 | Total
|
||
// --------------------------------------------------------------------------------------------------
|
||
// 0 0 - - - 2
|
||
// 0 1 x - xxxx 7
|
||
// 1 0 x xxxxxxxxxxxxx - 17
|
||
// 1 1 x xxxxxxxxxxxxx xxxx 21
|
||
//
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// "Vec3Coordinate" = Up to 3 Coordinates (66 Bits Max)
|
||
//
|
||
// | NonZeroX:1 | NonZeroY:1 | NonZeroZ:1 | 0..3 "Coordinates" | BitField Total
|
||
// -------------------------------------------------------------------------------
|
||
// 0 0 0 - 3
|
||
// 0 0 1 7..21 Bits 10..24
|
||
// 0 1 0 7..21 Bits 10..24
|
||
// 1 0 0 7..21 Bits 10..24
|
||
// 0 1 1 14..42 Bits 17..45
|
||
// 1 1 0 14..42 Bits 17..45
|
||
// 1 0 1 14..42 Bits 17..45
|
||
// 1 1 1 21..63 Bits 24..66
|
||
//
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// The following are Bit Packing Diagrams for client/server Normal BitField Messages
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// "Normals" = +/-1.0 (12 Bits Total)
|
||
//
|
||
// The only gotcha here is that normalization occurs so that
|
||
// 011111111111 = +1.0 and 1111111111111 = -1.0
|
||
//
|
||
// | SignBit:1 | FractionPart:11 | Total
|
||
// --------------------------------------------------------------------------------------------------
|
||
// 1 xxxxxxxxxxx 12
|
||
//
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// "Vec3Normal" = Up to 3 Coordinates (27 Bits Max)
|
||
//
|
||
// | NonZeroX:1 | NonZeroY:1 | 0..2 "Coordinates" | Z Sign Bit | BitField Total
|
||
// -------------------------------------------------------------------------------
|
||
// 0 0 - x 3
|
||
// 0 1 12 Bits x 14
|
||
// 1 0 12 Bits x 14
|
||
// 1 1 24 Bits x 27
|
||
//
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
#endif // COORDSIZE_H
|