2019-05-15 16:52:37 +02:00
# pragma once
# define _CRT_SECURE_NO_WARNINGS
# define _USE_MATH_DEFINES
# pragma warning(disable: 4244) // int to float
# pragma warning(disable: 4800) // int to bool
2019-05-29 18:06:33 +02:00
# pragma warning(disable: 4305) // double to float
2019-05-15 16:52:37 +02:00
# pragma warning(disable: 4838) // narrowing conversion
2019-05-24 19:58:32 +02:00
# pragma warning(disable: 4996) // POSIX names
2019-05-15 16:52:37 +02:00
# include <stdint.h>
# include <math.h>
# include <assert.h>
# include <new>
2019-05-30 13:35:13 +02:00
# ifdef WITHD3D
# include <Windows.h>
# include <d3d8types.h>
# endif
2019-05-15 16:52:37 +02:00
# include <rwcore.h>
# include <rpworld.h>
# define rwVENDORID_ROCKSTAR 0x0253F2
2019-05-30 00:47:33 +02:00
// Get rid of bullshit windows definitions, we're not running on an 8086
# ifdef far
# undef far
# endif
# ifdef near
# undef near
# endif
typedef uint8_t uint8 , UInt8 ;
typedef int8_t int8 , Int8 ;
typedef uint16_t uint16 , UInt16 ;
typedef int16_t int16 , Int16 ;
typedef uint32_t uint32 , UInt32 ;
typedef int32_t int32 , Int32 ;
2019-05-15 16:52:37 +02:00
typedef uintptr_t uintptr ;
2019-05-30 00:47:33 +02:00
typedef uint64_t uint64 , UInt64 ;
typedef int64_t int64 , Int64 ;
2019-06-01 23:17:39 +02:00
// hardcode ucs-2
typedef uint16_t wchar , WChar ;
2019-05-15 16:52:37 +02:00
2019-05-30 00:47:33 +02:00
typedef float Float ;
typedef double Double ;
typedef bool Bool ;
2019-05-29 02:52:30 +02:00
typedef char Char ;
2019-05-15 16:52:37 +02:00
# define nil NULL
# include "config.h"
# define ALIGNPTR(p) (void*)((((uintptr)(void*)p) + sizeof(void*)-1) & ~(sizeof(void*)-1))
// little hack
extern void * * rwengine ;
# define RwEngineInstance (*rwengine)
2019-05-31 19:02:26 +02:00
# include "skel\skeleton.h"
2019-05-15 16:52:37 +02:00
# define SCREENW (RsGlobal.maximumWidth)
# define SCREENH (RsGlobal.maximumHeight)
2019-05-29 02:52:30 +02:00
# define DEFAULT_SCREEN_WIDTH (640)
# define DEFAULT_SCREEN_HEIGHT (448)
# define SCREEN_WIDTH Float(RsGlobal.width)
# define SCREEN_HEIGHT Float(RsGlobal.height)
2019-05-30 00:47:33 +02:00
# define SCREEN_STRETCH_X(a) Float((a) * (SCREEN_WIDTH / Float(DEFAULT_SCREEN_WIDTH)))
# define SCREEN_STRETCH_Y(a) Float((a) * (SCREEN_HEIGHT / Float(DEFAULT_SCREEN_HEIGHT)))
# define SCREEN_FROM_RIGHT(a) Float(SCREEN_WIDTH - SCREEN_STRETCH_X(a))
# define SCREEN_FROM_BOTTOM(a) Float(SCREEN_HEIGHT - SCREEN_STRETCH_Y(a))
2019-05-29 02:52:30 +02:00
2019-05-24 19:58:32 +02:00
char * GetUserDirectory ( void ) ;
2019-05-15 16:52:37 +02:00
struct GlobalScene
{
RpWorld * world ;
RwCamera * camera ;
} ;
extern GlobalScene & Scene ;
# include "math/Vector.h"
# include "math/Vector2D.h"
# include "math/Matrix.h"
# include "math/Rect.h"
class CRGBA
{
public :
2019-05-29 02:52:30 +02:00
union
{
uint32 color32 ;
struct { uint8 r , g , b , a ; } ;
struct { uint8 red , green , blue , alpha ; } ;
# ifdef RWCORE_H
struct { RwRGBA rwRGBA ; } ;
# endif
} ;
2019-05-15 16:52:37 +02:00
CRGBA ( void ) { }
CRGBA ( uint8 r , uint8 g , uint8 b , uint8 a ) : r ( r ) , g ( g ) , b ( b ) , a ( a ) { }
2019-05-29 02:52:30 +02:00
# ifdef RWCORE_H
2019-05-30 00:47:33 +02:00
operator RwRGBA & ( void ) {
2019-05-29 02:52:30 +02:00
return rwRGBA ;
}
2019-05-30 00:47:33 +02:00
operator RwRGBA * ( void ) {
2019-05-29 02:52:30 +02:00
return & rwRGBA ;
}
2019-05-30 00:47:33 +02:00
operator RwRGBA ( void ) const {
2019-05-29 02:52:30 +02:00
return rwRGBA ;
}
# endif
2019-05-15 16:52:37 +02:00
} ;
2019-05-30 00:47:33 +02:00
# define clamp(v, low, high) ((v)<(low) ? (low) : (v)>(high) ? (high) : (v))
2019-05-29 02:52:30 +02:00
2019-05-30 00:47:33 +02:00
inline float sq ( float x ) { return x * x ; }
# define SQR(x) ((x) * (x))
2019-05-29 02:52:30 +02:00
2019-05-15 16:52:37 +02:00
# define PI M_PI
2019-05-29 02:52:30 +02:00
# define DEGTORAD(x) ((x) * PI / 180.0f)
# define RADTODEG(x) ((x) * 180.0f / PI)
2019-05-15 16:52:37 +02:00
2019-05-30 23:49:06 +02:00
# if USE_PS2_RAND == TRUE
# define MYRAND_MAX 65535
# else
# define MYRAND_MAX 32767
# endif
2019-05-15 16:52:37 +02:00
int myrand ( void ) ;
void mysrand ( unsigned int seed ) ;
2019-06-02 05:00:38 +02:00
# define debug(f, ...) printf("[DBG]: " f "\n", __VA_ARGS__)
# define DEV(f, ...) printf("[DEV]: " f "", __VA_ARGS__)
2019-05-29 02:52:30 +02:00
# define ASSERT assert
2019-05-15 16:52:37 +02:00
2019-05-29 20:02:58 +02:00
# define _TODO(x)
# define _TODOCONST(x) (x)
2019-05-15 16:52:37 +02:00
2019-05-29 20:02:58 +02:00
# define VALIDATE_SIZE(struc, size) static_assert(sizeof(struc) == size, "Invalid structure size of " #struc)
# define VALIDATE_OFFSET(struc, member, offset) static_assert(offsetof(struc, member) == offset, "The offset of " #member " in " #struc " is not " #offset "...")
2019-05-30 00:47:33 +02:00
# define PERCENT(x, p) ((Float(x) * (Float(p) / 100.0f)))
2019-05-29 02:52:30 +02:00
# define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
2019-05-30 00:47:33 +02:00
# define BIT(num) (1<<(num))