mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-01-23 13:14:51 +00:00
Merge branch 'sohl1.2' into zombie-x
This commit is contained in:
commit
2f64528c26
51
README.md
51
README.md
@ -76,7 +76,7 @@ git clone --recursive https://github.com/FWGS/hlsdk-portable
|
|||||||
|
|
||||||
# Build Instructions
|
# Build Instructions
|
||||||
|
|
||||||
## Windows
|
## Windows x86.
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ cmake -G "Visual Studio 16 2019" -A Win32 -B build
|
|||||||
|
|
||||||
After the configuration step, `HLSDK-PORTABLE.sln` should appear in the `build` directory. You can open this solution in Visual Studio and continue developing there.
|
After the configuration step, `HLSDK-PORTABLE.sln` should appear in the `build` directory. You can open this solution in Visual Studio and continue developing there.
|
||||||
|
|
||||||
## Windows. Using Microsoft Visual Studio 6
|
## Windows x86. Using Microsoft Visual Studio 6
|
||||||
|
|
||||||
Microsoft Visual Studio 6 is very old, but if you still have it installed, you can use it to build this hlsdk. There are no project files, but two `.bat` files, for server and client libraries. They require variable **MSVCDir** to be set to the installation path of Visual Studio:
|
Microsoft Visual Studio 6 is very old, but if you still have it installed, you can use it to build this hlsdk. There are no project files, but two `.bat` files, for server and client libraries. They require variable **MSVCDir** to be set to the installation path of Visual Studio:
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ cd dlls && compile.bat && cd ../cl_dll && compile.bat
|
|||||||
|
|
||||||
`hl.dll` and `client.dll` will appear in `dlls/` and `cl_dll/` diretories. The libraries built with msvc6 should be compatible with Windows XP.
|
`hl.dll` and `client.dll` will appear in `dlls/` and `cl_dll/` diretories. The libraries built with msvc6 should be compatible with Windows XP.
|
||||||
|
|
||||||
## Linux. Using Steam Runtime in chroot
|
## Linux x86. Portable steam-compatible build using Steam Runtime in chroot
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ schroot --chroot steamrt_scout_i386 -- cmake -B build-in-steamrt -S .
|
|||||||
schroot --chroot steamrt_scout_i386 -- cmake --build build-in-steamrt
|
schroot --chroot steamrt_scout_i386 -- cmake --build build-in-steamrt
|
||||||
```
|
```
|
||||||
|
|
||||||
## Linux. Build without Steam Runtime
|
## Linux x86. Portable steam-compatible build without Steam Runtime
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ cmake .. -DCMAKE_C_FLAGS="-static-libstdc++ -static-libgcc"
|
|||||||
```
|
```
|
||||||
To ensure portability it's still better to build using Steam Runtime or another chroot of some older distro.
|
To ensure portability it's still better to build using Steam Runtime or another chroot of some older distro.
|
||||||
|
|
||||||
## Linux. Build in your own chroot
|
## Linux x86. Portable steam-compatible build in your own chroot
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
@ -237,13 +237,46 @@ schroot --chroot jessie -- cmake --build build-in-chroot
|
|||||||
|
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
## Other platforms
|
## Nintendo Switch
|
||||||
|
|
||||||
Building on other Unix-like platforms (e.g. FreeBSD) is supported.
|
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
Install C and C++ compilers (like gcc or clang), cmake and make (or gmake)
|
1. Set up [`dkp-pacman`](https://devkitpro.org/wiki/devkitPro_pacman).
|
||||||
|
2. Install dependency packages:
|
||||||
|
```
|
||||||
|
sudo dkp-pacman -S switch-dev dkp-toolchain-vars switch-mesa switch-libdrm_nouveau switch-sdl2
|
||||||
|
```
|
||||||
|
3. Make sure the `DEVKITPRO` environment variable is set to the devkitPro SDK root:
|
||||||
|
```
|
||||||
|
export DEVKITPRO=/opt/devkitpro
|
||||||
|
```
|
||||||
|
4. Install libsolder:
|
||||||
|
```
|
||||||
|
source $DEVKITPRO/switchvars.sh
|
||||||
|
git clone https://github.com/fgsfdsfgs/libsolder.git
|
||||||
|
make -C libsolder install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building using CMake
|
||||||
|
```
|
||||||
|
mkdir build && cd build
|
||||||
|
aarch64-none-elf-cmake -G"Unix Makefiles" -DCMAKE_PROJECT_HLSDK-PORTABLE_INCLUDE="$DEVKITPRO/portlibs/switch/share/SolderShim.cmake" ..
|
||||||
|
make -j
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building using waf
|
||||||
|
```
|
||||||
|
./waf configure -T release --nswitch
|
||||||
|
./waf build
|
||||||
|
```
|
||||||
|
|
||||||
|
## Other platforms
|
||||||
|
|
||||||
|
Building on other architectures (e.g x86_64 or arm) and POSIX-compliant OSes (e.g. FreeBSD) is supported.
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
Install C and C++ compilers (like gcc or clang), cmake and make.
|
||||||
|
|
||||||
### Building
|
### Building
|
||||||
|
|
||||||
|
@ -150,6 +150,7 @@ extern cvar_t *cl_pitchspeed;
|
|||||||
extern cvar_t *cl_movespeedkey;
|
extern cvar_t *cl_movespeedkey;
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
|
static cvar_t* m_rawinput = NULL;
|
||||||
static double s_flRawInputUpdateTime = 0.0f;
|
static double s_flRawInputUpdateTime = 0.0f;
|
||||||
static bool m_bRawInput = false;
|
static bool m_bRawInput = false;
|
||||||
static bool m_bMouseThread = false;
|
static bool m_bMouseThread = false;
|
||||||
@ -158,7 +159,6 @@ bool isMouseRelative = false;
|
|||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
#include "progdefs.h"
|
#include "progdefs.h"
|
||||||
extern globalvars_t *gpGlobals;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int CL_IsDead( void );
|
int CL_IsDead( void );
|
||||||
@ -386,7 +386,7 @@ void IN_SetMouseMode(bool enable)
|
|||||||
if (mouseparmsvalid)
|
if (mouseparmsvalid)
|
||||||
restore_spi = SystemParametersInfo (SPI_SETMOUSE, 0, newmouseparms, 0);
|
restore_spi = SystemParametersInfo (SPI_SETMOUSE, 0, newmouseparms, 0);
|
||||||
|
|
||||||
m_bRawInput = CVAR_GET_FLOAT( "m_rawinput" ) != 0;
|
m_bRawInput = m_rawinput && m_rawinput->value != 0;
|
||||||
if(m_bRawInput)
|
if(m_bRawInput)
|
||||||
{
|
{
|
||||||
#if USE_SDL2
|
#if USE_SDL2
|
||||||
@ -781,13 +781,14 @@ void GoldSourceInput::IN_GetMouseDelta( int *pOutX, int *pOutY)
|
|||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
// update m_bRawInput occasionally:
|
// update m_bRawInput occasionally:
|
||||||
if ( gpGlobals && gpGlobals->time - s_flRawInputUpdateTime > 1.0f )
|
const float currentTime = gEngfuncs.GetClientTime();
|
||||||
|
if ( currentTime - s_flRawInputUpdateTime > 1.0f || s_flRawInputUpdateTime == 0.0f )
|
||||||
{
|
{
|
||||||
s_flRawInputUpdateTime = gpGlobals->time;
|
s_flRawInputUpdateTime = currentTime;
|
||||||
|
|
||||||
bool lockEntered = MouseThread_ActiveLock_Enter();
|
bool lockEntered = MouseThread_ActiveLock_Enter();
|
||||||
|
|
||||||
m_bRawInput = CVAR_GET_FLOAT( "m_rawinput" ) != 0;
|
m_bRawInput = m_rawinput && m_rawinput->value != 0;
|
||||||
|
|
||||||
if(m_bRawInput && !isMouseRelative)
|
if(m_bRawInput && !isMouseRelative)
|
||||||
{
|
{
|
||||||
@ -1571,7 +1572,8 @@ void GoldSourceInput::IN_Init (void)
|
|||||||
m_customaccel_exponent = gEngfuncs.pfnRegisterVariable ( "m_customaccel_exponent", "1", FCVAR_ARCHIVE );
|
m_customaccel_exponent = gEngfuncs.pfnRegisterVariable ( "m_customaccel_exponent", "1", FCVAR_ARCHIVE );
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
m_bRawInput = CVAR_GET_FLOAT( "m_rawinput" ) != 0;
|
m_rawinput = gEngfuncs.pfnGetCvarPointer("m_rawinput");
|
||||||
|
m_bRawInput = m_rawinput && m_rawinput->value != 0;
|
||||||
m_bMouseThread = gEngfuncs.CheckParm ("-mousethread", NULL ) != NULL;
|
m_bMouseThread = gEngfuncs.CheckParm ("-mousethread", NULL ) != NULL;
|
||||||
m_mousethread_sleep = gEngfuncs.pfnRegisterVariable ( "m_mousethread_sleep", "1", FCVAR_ARCHIVE ); // default to less than 1000 Hz
|
m_mousethread_sleep = gEngfuncs.pfnRegisterVariable ( "m_mousethread_sleep", "1", FCVAR_ARCHIVE ); // default to less than 1000 Hz
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ check_symbol_exists(XASH_SERENITY "build.h" XASH_SERENITY)
|
|||||||
check_symbol_exists(XASH_WIN32 "build.h" XASH_WIN32)
|
check_symbol_exists(XASH_WIN32 "build.h" XASH_WIN32)
|
||||||
check_symbol_exists(XASH_WIN64 "build.h" XASH_WIN64)
|
check_symbol_exists(XASH_WIN64 "build.h" XASH_WIN64)
|
||||||
check_symbol_exists(XASH_X86 "build.h" XASH_X86)
|
check_symbol_exists(XASH_X86 "build.h" XASH_X86)
|
||||||
|
check_symbol_exists(XASH_NSWITCH "build.h" XASH_NSWITCH)
|
||||||
unset(CMAKE_REQUIRED_INCLUDES)
|
unset(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
|
||||||
# engine/common/build.c
|
# engine/common/build.c
|
||||||
@ -63,6 +64,8 @@ elseif(XASH_HAIKU)
|
|||||||
set(BUILDOS "haiku")
|
set(BUILDOS "haiku")
|
||||||
elseif(XASH_SERENITY)
|
elseif(XASH_SERENITY)
|
||||||
set(BUILDOS "serenityos")
|
set(BUILDOS "serenityos")
|
||||||
|
elseif(XASH_NSWITCH)
|
||||||
|
set(BUILDOS "nswitch")
|
||||||
else()
|
else()
|
||||||
message(SEND_ERROR "Place your operating system name here! If this is a mistake, try to fix conditions above and report a bug")
|
message(SEND_ERROR "Place your operating system name here! If this is a mistake, try to fix conditions above and report a bug")
|
||||||
endif()
|
endif()
|
||||||
|
@ -238,7 +238,7 @@ void GetSequenceInfo( void *pmodel, entvars_t *pev, float *pflFrameRate, float *
|
|||||||
|
|
||||||
mstudioseqdesc_t *pseqdesc;
|
mstudioseqdesc_t *pseqdesc;
|
||||||
|
|
||||||
if( pev->sequence >= pstudiohdr->numseq )
|
if( pev->sequence < 0 || pev->sequence >= pstudiohdr->numseq )
|
||||||
{
|
{
|
||||||
*pflFrameRate = 0.0f;
|
*pflFrameRate = 0.0f;
|
||||||
*pflGroundSpeed = 0.0f;
|
*pflGroundSpeed = 0.0f;
|
||||||
@ -265,7 +265,7 @@ int GetSequenceFlags( void *pmodel, entvars_t *pev )
|
|||||||
studiohdr_t *pstudiohdr;
|
studiohdr_t *pstudiohdr;
|
||||||
|
|
||||||
pstudiohdr = (studiohdr_t *)pmodel;
|
pstudiohdr = (studiohdr_t *)pmodel;
|
||||||
if( !pstudiohdr || pev->sequence >= pstudiohdr->numseq )
|
if( !pstudiohdr || pev->sequence < 0 || pev->sequence >= pstudiohdr->numseq )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
mstudioseqdesc_t *pseqdesc;
|
mstudioseqdesc_t *pseqdesc;
|
||||||
@ -279,7 +279,7 @@ int GetAnimationEvent( void *pmodel, entvars_t *pev, MonsterEvent_t *pMonsterEve
|
|||||||
studiohdr_t *pstudiohdr;
|
studiohdr_t *pstudiohdr;
|
||||||
|
|
||||||
pstudiohdr = (studiohdr_t *)pmodel;
|
pstudiohdr = (studiohdr_t *)pmodel;
|
||||||
if( !pstudiohdr || pev->sequence >= pstudiohdr->numseq || !pMonsterEvent )
|
if( !pstudiohdr || pev->sequence < 0 || pev->sequence >= pstudiohdr->numseq || !pMonsterEvent )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
mstudioseqdesc_t *pseqdesc;
|
mstudioseqdesc_t *pseqdesc;
|
||||||
@ -379,7 +379,7 @@ float SetBlending( void *pmodel, entvars_t *pev, int iBlender, float flValue )
|
|||||||
studiohdr_t *pstudiohdr;
|
studiohdr_t *pstudiohdr;
|
||||||
|
|
||||||
pstudiohdr = (studiohdr_t *)pmodel;
|
pstudiohdr = (studiohdr_t *)pmodel;
|
||||||
if( !pstudiohdr )
|
if( !pstudiohdr || pev->sequence < 0 || pev->sequence >= pstudiohdr->numseq )
|
||||||
return flValue;
|
return flValue;
|
||||||
|
|
||||||
mstudioseqdesc_t *pseqdesc;
|
mstudioseqdesc_t *pseqdesc;
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "func_break.h"
|
#include "func_break.h"
|
||||||
#include "decals.h"
|
#include "decals.h"
|
||||||
#include "explode.h"
|
#include "explode.h"
|
||||||
|
#include "game.h"
|
||||||
|
|
||||||
extern DLL_GLOBAL Vector g_vecAttackDir;
|
extern DLL_GLOBAL Vector g_vecAttackDir;
|
||||||
|
|
||||||
@ -1108,12 +1109,24 @@ void CPushable::Move( CBaseEntity *pOther, int push )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// g-cont. fix pushable acceleration bug (reverted as it used in mods)
|
|
||||||
if( pOther->IsPlayer() )
|
if( pOther->IsPlayer() )
|
||||||
{
|
{
|
||||||
// Don't push unless the player is pushing forward and NOT use (pull)
|
// g-cont. fix pushable acceleration bug (now implemented as cvar)
|
||||||
if( push && !( pevToucher->button & ( IN_FORWARD | IN_USE ) ) )
|
if (pushablemode.value == 1)
|
||||||
return;
|
{
|
||||||
|
// Allow player push when moving right, left and back too
|
||||||
|
if ( push && !(pevToucher->button & (IN_FORWARD|IN_MOVERIGHT|IN_MOVELEFT|IN_BACK)) )
|
||||||
|
return;
|
||||||
|
// Require player walking back when applying '+use' on pushable
|
||||||
|
if ( !push && !(pevToucher->button & (IN_BACK)) )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Don't push unless the player is pushing forward and NOT use (pull)
|
||||||
|
if( push && !( pevToucher->button & ( IN_FORWARD | IN_USE ) ) )
|
||||||
|
return;
|
||||||
|
}
|
||||||
playerTouch = 1;
|
playerTouch = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,6 +276,7 @@ TYPEDESCRIPTION CFuncTank::m_SaveData[] =
|
|||||||
DEFINE_FIELD( CFuncTank, m_iszFireMaster, FIELD_STRING ), //LRC
|
DEFINE_FIELD( CFuncTank, m_iszFireMaster, FIELD_STRING ), //LRC
|
||||||
DEFINE_FIELD( CFuncTank, m_iszLocusFire, FIELD_STRING ), //LRC
|
DEFINE_FIELD( CFuncTank, m_iszLocusFire, FIELD_STRING ), //LRC
|
||||||
DEFINE_FIELD( CFuncTank, m_pFireProxy, FIELD_CLASSPTR ), //LRC
|
DEFINE_FIELD( CFuncTank, m_pFireProxy, FIELD_CLASSPTR ), //LRC
|
||||||
|
DEFINE_FIELD( CFuncTank, m_iTankClass, FIELD_INTEGER ),
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_SAVERESTORE( CFuncTank, CBaseEntity )
|
IMPLEMENT_SAVERESTORE( CFuncTank, CBaseEntity )
|
||||||
|
@ -39,6 +39,7 @@ cvar_t satchelfix = { "satchelfix", "0", FCVAR_SERVER };
|
|||||||
cvar_t explosionfix = { "explosionfix", "0", FCVAR_SERVER };
|
cvar_t explosionfix = { "explosionfix", "0", FCVAR_SERVER };
|
||||||
cvar_t monsteryawspeedfix = { "monsteryawspeedfix", "1", FCVAR_SERVER };
|
cvar_t monsteryawspeedfix = { "monsteryawspeedfix", "1", FCVAR_SERVER };
|
||||||
cvar_t corpsephysics = { "corpsephysics", "0", FCVAR_SERVER };
|
cvar_t corpsephysics = { "corpsephysics", "0", FCVAR_SERVER };
|
||||||
|
cvar_t pushablemode = { "pushablemode", "0", FCVAR_SERVER };
|
||||||
cvar_t forcerespawn = { "mp_forcerespawn","1", FCVAR_SERVER };
|
cvar_t forcerespawn = { "mp_forcerespawn","1", FCVAR_SERVER };
|
||||||
cvar_t flashlight = { "mp_flashlight","1", FCVAR_SERVER };
|
cvar_t flashlight = { "mp_flashlight","1", FCVAR_SERVER };
|
||||||
cvar_t aimcrosshair = { "mp_autocrosshair","1", FCVAR_SERVER };
|
cvar_t aimcrosshair = { "mp_autocrosshair","1", FCVAR_SERVER };
|
||||||
@ -629,6 +630,7 @@ void GameDLLInit( void )
|
|||||||
CVAR_REGISTER( &explosionfix );
|
CVAR_REGISTER( &explosionfix );
|
||||||
CVAR_REGISTER( &monsteryawspeedfix );
|
CVAR_REGISTER( &monsteryawspeedfix );
|
||||||
CVAR_REGISTER( &corpsephysics );
|
CVAR_REGISTER( &corpsephysics );
|
||||||
|
CVAR_REGISTER( &pushablemode );
|
||||||
CVAR_REGISTER( &forcerespawn );
|
CVAR_REGISTER( &forcerespawn );
|
||||||
CVAR_REGISTER( &flashlight );
|
CVAR_REGISTER( &flashlight );
|
||||||
CVAR_REGISTER( &aimcrosshair );
|
CVAR_REGISTER( &aimcrosshair );
|
||||||
|
@ -33,6 +33,7 @@ extern cvar_t satchelfix;
|
|||||||
extern cvar_t explosionfix;
|
extern cvar_t explosionfix;
|
||||||
extern cvar_t monsteryawspeedfix;
|
extern cvar_t monsteryawspeedfix;
|
||||||
extern cvar_t corpsephysics;
|
extern cvar_t corpsephysics;
|
||||||
|
extern cvar_t pushablemode;
|
||||||
extern cvar_t forcerespawn;
|
extern cvar_t forcerespawn;
|
||||||
extern cvar_t flashlight;
|
extern cvar_t flashlight;
|
||||||
extern cvar_t aimcrosshair;
|
extern cvar_t aimcrosshair;
|
||||||
|
@ -1365,6 +1365,7 @@ public:
|
|||||||
|
|
||||||
int m_iszAmtFactor;
|
int m_iszAmtFactor;
|
||||||
};
|
};
|
||||||
|
LINK_ENTITY_TO_CLASS( render_fader, CRenderFxFader )
|
||||||
|
|
||||||
TYPEDESCRIPTION CRenderFxFader::m_SaveData[] =
|
TYPEDESCRIPTION CRenderFxFader::m_SaveData[] =
|
||||||
{
|
{
|
||||||
@ -1385,6 +1386,7 @@ IMPLEMENT_SAVERESTORE(CRenderFxFader,CBaseEntity);
|
|||||||
void CRenderFxFader :: Spawn( void )
|
void CRenderFxFader :: Spawn( void )
|
||||||
{
|
{
|
||||||
SetThink(&CRenderFxFader :: FadeThink );
|
SetThink(&CRenderFxFader :: FadeThink );
|
||||||
|
pev->classname = MAKE_STRING("render_fader");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRenderFxFader :: FadeThink( void )
|
void CRenderFxFader :: FadeThink( void )
|
||||||
@ -4613,6 +4615,7 @@ void CTriggerMotion::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYP
|
|||||||
class CMotionThread : public CPointEntity
|
class CMotionThread : public CPointEntity
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
void Spawn();
|
||||||
void Think( void );
|
void Think( void );
|
||||||
|
|
||||||
virtual int Save( CSave &save );
|
virtual int Save( CSave &save );
|
||||||
@ -4626,7 +4629,7 @@ public:
|
|||||||
EHANDLE m_hLocus;
|
EHANDLE m_hLocus;
|
||||||
EHANDLE m_hTarget;
|
EHANDLE m_hTarget;
|
||||||
};
|
};
|
||||||
LINK_ENTITY_TO_CLASS( motion_thread, CPointEntity );
|
LINK_ENTITY_TO_CLASS( motion_thread, CMotionThread );
|
||||||
|
|
||||||
TYPEDESCRIPTION CMotionThread::m_SaveData[] =
|
TYPEDESCRIPTION CMotionThread::m_SaveData[] =
|
||||||
{
|
{
|
||||||
@ -4640,6 +4643,11 @@ TYPEDESCRIPTION CMotionThread::m_SaveData[] =
|
|||||||
|
|
||||||
IMPLEMENT_SAVERESTORE(CMotionThread,CPointEntity);
|
IMPLEMENT_SAVERESTORE(CMotionThread,CPointEntity);
|
||||||
|
|
||||||
|
void CMotionThread::Spawn() //AJH
|
||||||
|
{
|
||||||
|
pev->classname = MAKE_STRING("motion_thread"); //We need this for save/restore to work
|
||||||
|
}
|
||||||
|
|
||||||
void CMotionThread::Think( void )
|
void CMotionThread::Think( void )
|
||||||
{
|
{
|
||||||
if( m_hLocus == 0 || m_hTarget == 0 )
|
if( m_hLocus == 0 || m_hTarget == 0 )
|
||||||
@ -4848,6 +4856,7 @@ void CMotionManager::Affect( CBaseEntity *pTarget, CBaseEntity *pActivator )
|
|||||||
|
|
||||||
CMotionThread *pThread = GetClassPtr( (CMotionThread*)NULL );
|
CMotionThread *pThread = GetClassPtr( (CMotionThread*)NULL );
|
||||||
if (pThread == NULL) return; //error?
|
if (pThread == NULL) return; //error?
|
||||||
|
pThread->Spawn();
|
||||||
pThread->m_hLocus = pActivator;
|
pThread->m_hLocus = pActivator;
|
||||||
pThread->m_hTarget = pTarget;
|
pThread->m_hTarget = pTarget;
|
||||||
pThread->m_iszPosition = m_iszPosition;
|
pThread->m_iszPosition = m_iszPosition;
|
||||||
|
@ -146,7 +146,6 @@ public:
|
|||||||
#define EAGEL_MAX_CLIP 12
|
#define EAGEL_MAX_CLIP 12
|
||||||
#define PYTHON_MAX_CLIP 8
|
#define PYTHON_MAX_CLIP 8
|
||||||
#define MP5_MAX_CLIP 60
|
#define MP5_MAX_CLIP 60
|
||||||
#define MP5_DEFAULT_AMMO 25
|
|
||||||
#define SHOTGUN_MAX_CLIP 8
|
#define SHOTGUN_MAX_CLIP 8
|
||||||
#define CROSSBOW_MAX_CLIP 6
|
#define CROSSBOW_MAX_CLIP 6
|
||||||
#define RPG_MAX_CLIP 1
|
#define RPG_MAX_CLIP 1
|
||||||
@ -172,7 +171,6 @@ public:
|
|||||||
#define EAGEL_DEFAULT_GIVE 12
|
#define EAGEL_DEFAULT_GIVE 12
|
||||||
#define PYTHON_DEFAULT_GIVE 6
|
#define PYTHON_DEFAULT_GIVE 6
|
||||||
#define MP5_DEFAULT_GIVE 25
|
#define MP5_DEFAULT_GIVE 25
|
||||||
#define MP5_DEFAULT_AMMO 25
|
|
||||||
#define MP5_M203_DEFAULT_GIVE 0
|
#define MP5_M203_DEFAULT_GIVE 0
|
||||||
#define SHOTGUN_DEFAULT_GIVE 12
|
#define SHOTGUN_DEFAULT_GIVE 12
|
||||||
#define SHOTGUNA_DEFAULT_GIVE 12
|
#define SHOTGUNA_DEFAULT_GIVE 12
|
||||||
|
@ -79,6 +79,7 @@ For more information, please refer to <http://unlicense.org/>
|
|||||||
#undef XASH_WIN32
|
#undef XASH_WIN32
|
||||||
#undef XASH_WIN64
|
#undef XASH_WIN64
|
||||||
#undef XASH_X86
|
#undef XASH_X86
|
||||||
|
#undef XASH_NSWITCH
|
||||||
|
|
||||||
//================================================================
|
//================================================================
|
||||||
//
|
//
|
||||||
@ -96,6 +97,10 @@ For more information, please refer to <http://unlicense.org/>
|
|||||||
#if defined(_WIN64)
|
#if defined(_WIN64)
|
||||||
#define XASH_WIN64 1
|
#define XASH_WIN64 1
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined __SWITCH__
|
||||||
|
#define XASH_NSWITCH 1
|
||||||
|
#define XASH_LITTLE_ENDIAN 1
|
||||||
|
#define XASH_POSIX 1
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
#define XASH_LINUX 1
|
#define XASH_LINUX 1
|
||||||
#if defined(__ANDROID__)
|
#if defined(__ANDROID__)
|
||||||
@ -134,7 +139,7 @@ For more information, please refer to <http://unlicense.org/>
|
|||||||
#error "Place your operating system name here! If this is a mistake, try to fix conditions above and report a bug"
|
#error "Place your operating system name here! If this is a mistake, try to fix conditions above and report a bug"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined XASH_ANDROID || defined XASH_IOS
|
#if defined XASH_ANDROID || defined XASH_IOS || defined XASH_NSWITCH
|
||||||
#define XASH_MOBILE_PLATFORM 1
|
#define XASH_MOBILE_PLATFORM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ DEFINES = [
|
|||||||
'XASH_WIN32',
|
'XASH_WIN32',
|
||||||
'XASH_WIN64',
|
'XASH_WIN64',
|
||||||
'XASH_X86',
|
'XASH_X86',
|
||||||
|
'XASH_NSWITCH',
|
||||||
]
|
]
|
||||||
|
|
||||||
def configure(conf):
|
def configure(conf):
|
||||||
@ -92,6 +93,8 @@ def configure(conf):
|
|||||||
buildos = "haiku"
|
buildos = "haiku"
|
||||||
elif conf.env.XASH_SERENITY:
|
elif conf.env.XASH_SERENITY:
|
||||||
buildos = "serenityos"
|
buildos = "serenityos"
|
||||||
|
elif conf.env.XASH_NSWITCH:
|
||||||
|
buildos = "nswitch"
|
||||||
else:
|
else:
|
||||||
conf.fatal("Place your operating system name in build.h and library_naming.py!\n"
|
conf.fatal("Place your operating system name in build.h and library_naming.py!\n"
|
||||||
"If this is a mistake, try to fix conditions above and report a bug")
|
"If this is a mistake, try to fix conditions above and report a bug")
|
||||||
|
@ -30,6 +30,8 @@ ANDROID_NDK_API_MIN = { 10: 3, 19: 16, 20: 16, 23: 16, 25: 19 } # minimal API le
|
|||||||
ANDROID_STPCPY_API_MIN = 21 # stpcpy() introduced in SDK 21
|
ANDROID_STPCPY_API_MIN = 21 # stpcpy() introduced in SDK 21
|
||||||
ANDROID_64BIT_API_MIN = 21 # minimal API level that supports 64-bit targets
|
ANDROID_64BIT_API_MIN = 21 # minimal API level that supports 64-bit targets
|
||||||
|
|
||||||
|
NSWITCH_ENVVARS = ['DEVKITPRO']
|
||||||
|
|
||||||
# This class does support ONLY r10e and r19c/r20 NDK
|
# This class does support ONLY r10e and r19c/r20 NDK
|
||||||
class Android:
|
class Android:
|
||||||
ctx = None # waf context
|
ctx = None # waf context
|
||||||
@ -348,14 +350,100 @@ class Android:
|
|||||||
ldflags += ['-march=armv5te']
|
ldflags += ['-march=armv5te']
|
||||||
return ldflags
|
return ldflags
|
||||||
|
|
||||||
def options(opt):
|
class NintendoSwitch:
|
||||||
android = opt.add_option_group('Android options')
|
ctx = None # waf context
|
||||||
android.add_option('--android', action='store', dest='ANDROID_OPTS', default=None,
|
arch = "arm64"
|
||||||
help='enable building for android, format: --android=<arch>,<toolchain>,<api>, example: --android=armeabi-v7a-hard,4.9,9')
|
dkp_dir = None
|
||||||
|
portlibs_dir = None
|
||||||
|
dka64_dir = None
|
||||||
|
libnx_dir = None
|
||||||
|
|
||||||
magx = opt.add_option_group('MotoMAGX options')
|
def __init__(self, ctx):
|
||||||
magx.add_option('--enable-magx', action = 'store_true', dest = 'MAGX', default = False,
|
self.ctx = ctx
|
||||||
help = 'enable targetting for MotoMAGX phones [default: %default]')
|
|
||||||
|
for i in NSWITCH_ENVVARS:
|
||||||
|
self.dkp_dir = os.getenv(i)
|
||||||
|
if self.dkp_dir != None:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
ctx.fatal('Set %s environment variable pointing to the DEVKITPRO home!' %
|
||||||
|
' or '.join(NSWITCH_ENVVARS))
|
||||||
|
|
||||||
|
self.dkp_dir = os.path.abspath(self.dkp_dir)
|
||||||
|
|
||||||
|
self.dka64_dir = os.path.join(self.dkp_dir, 'devkitA64')
|
||||||
|
if not os.path.exists(self.dka64_dir):
|
||||||
|
ctx.fatal('devkitA64 not found in `%s`. Install devkitA64!' % self.dka64_dir)
|
||||||
|
|
||||||
|
self.libnx_dir = os.path.join(self.dkp_dir, 'libnx')
|
||||||
|
if not os.path.exists(self.libnx_dir):
|
||||||
|
ctx.fatal('libnx not found in `%s`. Install libnx!' % self.libnx_dir)
|
||||||
|
|
||||||
|
self.portlibs_dir = os.path.join(self.dkp_dir, 'portlibs', 'switch')
|
||||||
|
if not os.path.exists(self.portlibs_dir):
|
||||||
|
ctx.fatal('No Switch libraries found in `%s`!' % self.portlibs_dir)
|
||||||
|
|
||||||
|
def gen_toolchain_prefix(self):
|
||||||
|
return 'aarch64-none-elf-'
|
||||||
|
|
||||||
|
def gen_gcc_toolchain_path(self):
|
||||||
|
return os.path.join(self.dka64_dir, 'bin', self.gen_toolchain_prefix())
|
||||||
|
|
||||||
|
def cc(self):
|
||||||
|
return self.gen_gcc_toolchain_path() + 'gcc'
|
||||||
|
|
||||||
|
def cxx(self):
|
||||||
|
return self.gen_gcc_toolchain_path() + 'g++'
|
||||||
|
|
||||||
|
def strip(self):
|
||||||
|
return self.gen_gcc_toolchain_path() + 'strip'
|
||||||
|
|
||||||
|
def pkgconfig(self):
|
||||||
|
# counter-intuitively, this motherfucker is in portlibs/switch/bin
|
||||||
|
return os.path.join(self.portlibs_dir, 'bin', self.gen_toolchain_prefix() + 'pkg-config')
|
||||||
|
|
||||||
|
def cflags(self, cxx = False):
|
||||||
|
cflags = []
|
||||||
|
# arch flags
|
||||||
|
cflags += ['-D__SWITCH__', '-march=armv8-a+crc+crypto', '-mtune=cortex-a57', '-mtp=soft', '-ftls-model=local-exec', '-fPIE']
|
||||||
|
# help the linker out
|
||||||
|
cflags += ['-ffunction-sections', '-fdata-sections']
|
||||||
|
# base include dirs
|
||||||
|
cflags += ['-isystem %s/include' % self.libnx_dir, '-I%s/include' % self.portlibs_dir]
|
||||||
|
if cxx:
|
||||||
|
# while these are supported, they could fuck up the crappy dynamic linker
|
||||||
|
cflags += ['-fno-exceptions', '-fno-rtti']
|
||||||
|
# the game wants GNU extensions
|
||||||
|
cflags += ['-std=gnu++17', '-D_GNU_SOURCE']
|
||||||
|
else:
|
||||||
|
cflags += ['-std=gnu11', '-D_GNU_SOURCE']
|
||||||
|
return cflags
|
||||||
|
|
||||||
|
# they go before object list
|
||||||
|
def linkflags(self):
|
||||||
|
linkflags = ['-fPIE', '-specs=%s/switch.specs' % self.libnx_dir]
|
||||||
|
# libsolder only supports sysv hashes and we need to build everything with -rdynamic
|
||||||
|
linkflags += ['-Wl,--hash-style=sysv', '-rdynamic']
|
||||||
|
# avoid pulling in and exposing mesa's internals, that crashes it for some god forsaken reason
|
||||||
|
linkflags += ['-Wl,--exclude-libs=libglapi.a', '-Wl,--exclude-libs=libdrm_nouveau.a']
|
||||||
|
return linkflags
|
||||||
|
|
||||||
|
def ldflags(self):
|
||||||
|
# NOTE: shared libraries should be built without standard libs, so that they could import their contents from the NRO,
|
||||||
|
# but executables, including the SDL2 sanity check, will generally require libstdc++ and libm, which we will add manually
|
||||||
|
ldflags = [] # ['-lm', '-lstdc++']
|
||||||
|
return ldflags
|
||||||
|
|
||||||
|
def options(opt):
|
||||||
|
xc = opt.add_option_group('Cross compile options')
|
||||||
|
xc.add_option('--android', action='store', dest='ANDROID_OPTS', default=None,
|
||||||
|
help='enable building for android, format: --android=<arch>,<toolchain>,<api>, example: --android=armeabi-v7a-hard,4.9,9')
|
||||||
|
xc.add_option('--enable-magx', action='store_true', dest='MAGX', default=False,
|
||||||
|
help='enable building for Motorola MAGX [default: %default]')
|
||||||
|
xc.add_option('--enable-msvc-wine', action='store_true', dest='MSVC_WINE', default=False,
|
||||||
|
help='enable building with MSVC using Wine [default: %default]')
|
||||||
|
xc.add_option('--nswitch', action='store_true', dest='NSWITCH', default = False,
|
||||||
|
help ='enable building for Nintendo Switch [default: %default]')
|
||||||
|
|
||||||
def configure(conf):
|
def configure(conf):
|
||||||
if conf.options.ANDROID_OPTS:
|
if conf.options.ANDROID_OPTS:
|
||||||
@ -389,18 +477,42 @@ def configure(conf):
|
|||||||
conf.msg('... C/C++ flags', ' '.join(android.cflags()).replace(android.ndk_home, '$NDK/'))
|
conf.msg('... C/C++ flags', ' '.join(android.cflags()).replace(android.ndk_home, '$NDK/'))
|
||||||
conf.msg('... link flags', ' '.join(android.linkflags()).replace(android.ndk_home, '$NDK/'))
|
conf.msg('... link flags', ' '.join(android.linkflags()).replace(android.ndk_home, '$NDK/'))
|
||||||
conf.msg('... ld flags', ' '.join(android.ldflags()).replace(android.ndk_home, '$NDK/'))
|
conf.msg('... ld flags', ' '.join(android.ldflags()).replace(android.ndk_home, '$NDK/'))
|
||||||
|
|
||||||
# conf.env.ANDROID_OPTS = android
|
|
||||||
conf.env.DEST_OS2 = 'android'
|
|
||||||
elif conf.options.MAGX:
|
elif conf.options.MAGX:
|
||||||
# useless to change toolchain path, as toolchain meant to be placed in this path
|
# useless to change toolchain path, as toolchain meant to be placed in this path
|
||||||
toolchain_path = '/opt/toolchains/motomagx/arm-eabi2/lib/'
|
toolchain_path = '/opt/toolchains/motomagx/arm-eabi2/lib/'
|
||||||
conf.env.INCLUDES_MAGX = [toolchain_path + i for i in ['ezx-z6/include', 'qt-2.3.8/include']]
|
conf.env.INCLUDES_MAGX = [toolchain_path + i for i in ['ezx-z6/include', 'qt-2.3.8/include']]
|
||||||
conf.env.LIBPATH_MAGX = [toolchain_path + i for i in ['ezx-z6/lib', 'qt-2.3.8/lib']]
|
conf.env.LIBPATH_MAGX = [toolchain_path + i for i in ['ezx-z6/lib', 'qt-2.3.8/lib']]
|
||||||
conf.env.LINKFLAGS_MAGX = ['-Wl,-rpath-link=' + i for i in conf.env.LIBPATH_MAGX]
|
conf.env.LINKFLAGS_MAGX = ['-Wl,-rpath-link=' + i for i in conf.env.LIBPATH_MAGX]
|
||||||
|
elif conf.options.MSVC_WINE:
|
||||||
|
try:
|
||||||
|
toolchain_path = conf.environ['MSVC_WINE_PATH']
|
||||||
|
except KeyError:
|
||||||
|
conf.fatal('Set MSVC_WINE_PATH environment variable to the MSVC toolchain root!')
|
||||||
|
|
||||||
|
conf.environ['CC'] = conf.environ['CXX'] = os.path.join(toolchain_path, 'bin', conf.env.MSVC_TARGETS[0], 'cl')
|
||||||
|
conf.environ['LINK_CXX'] = os.path.join(toolchain_path, 'bin', conf.env.MSVC_TARGETS[0], 'link')
|
||||||
|
conf.environ['AR'] = os.path.join(toolchain_path, 'bin', conf.env.MSVC_TARGETS[0], 'lib')
|
||||||
|
conf.environ['WINRC'] = os.path.join(toolchain_path, 'bin', conf.env.MSVC_TARGETS[0], 'rc')
|
||||||
|
conf.env.DEST_OS = 'win32'
|
||||||
|
conf.env.DEST_CPU = conf.env.MSVC_TARGETS[0]
|
||||||
|
conf.env.COMPILER_CXX = conf.env.COMPILER_CC = 'msvc'
|
||||||
|
elif conf.options.NSWITCH:
|
||||||
|
conf.nswitch = nswitch = NintendoSwitch(conf)
|
||||||
|
conf.environ['CC'] = nswitch.cc()
|
||||||
|
conf.environ['CXX'] = nswitch.cxx()
|
||||||
|
conf.environ['STRIP'] = nswitch.strip()
|
||||||
|
conf.env.PKGCONFIG = nswitch.pkgconfig()
|
||||||
|
conf.env.CFLAGS += nswitch.cflags()
|
||||||
|
conf.env.CXXFLAGS += nswitch.cflags(True)
|
||||||
|
conf.env.LINKFLAGS += nswitch.linkflags()
|
||||||
|
conf.env.LDFLAGS += nswitch.ldflags()
|
||||||
|
conf.env.HAVE_M = True
|
||||||
|
conf.env.LIB_M = ['m']
|
||||||
|
conf.env.DEST_OS = 'nswitch'
|
||||||
|
|
||||||
conf.env.MAGX = conf.options.MAGX
|
conf.env.MAGX = conf.options.MAGX
|
||||||
MACRO_TO_DESTOS = OrderedDict({ '__ANDROID__' : 'android' })
|
conf.env.MSVC_WINE = conf.options.MSVC_WINE
|
||||||
|
MACRO_TO_DESTOS = OrderedDict({ '__ANDROID__' : 'android', '__SWITCH__' : 'nswitch' })
|
||||||
for k in c_config.MACRO_TO_DESTOS:
|
for k in c_config.MACRO_TO_DESTOS:
|
||||||
MACRO_TO_DESTOS[k] = c_config.MACRO_TO_DESTOS[k] # ordering is important
|
MACRO_TO_DESTOS[k] = c_config.MACRO_TO_DESTOS[k] # ordering is important
|
||||||
c_config.MACRO_TO_DESTOS = MACRO_TO_DESTOS
|
c_config.MACRO_TO_DESTOS = MACRO_TO_DESTOS
|
||||||
@ -433,11 +545,17 @@ compiler_cxx_configure = getattr(compiler_cxx, 'configure')
|
|||||||
compiler_c_configure = getattr(compiler_c, 'configure')
|
compiler_c_configure = getattr(compiler_c, 'configure')
|
||||||
|
|
||||||
def patch_compiler_cxx_configure(conf):
|
def patch_compiler_cxx_configure(conf):
|
||||||
compiler_cxx_configure(conf)
|
if not conf.env.MSVC_WINE:
|
||||||
|
compiler_cxx_configure(conf)
|
||||||
|
else:
|
||||||
|
conf.load('msvc', funs='no_autodetect')
|
||||||
post_compiler_cxx_configure(conf)
|
post_compiler_cxx_configure(conf)
|
||||||
|
|
||||||
def patch_compiler_c_configure(conf):
|
def patch_compiler_c_configure(conf):
|
||||||
compiler_c_configure(conf)
|
if not conf.env.MSVC_WINE:
|
||||||
|
compiler_c_configure(conf)
|
||||||
|
else:
|
||||||
|
conf.load('msvc', funs='no_autodetect')
|
||||||
post_compiler_c_configure(conf)
|
post_compiler_c_configure(conf)
|
||||||
|
|
||||||
setattr(compiler_cxx, 'configure', patch_compiler_cxx_configure)
|
setattr(compiler_cxx, 'configure', patch_compiler_cxx_configure)
|
||||||
|
11
wscript
11
wscript
@ -74,8 +74,10 @@ def configure(conf):
|
|||||||
conf.load('msvs msdev strip_on_install')
|
conf.load('msvs msdev strip_on_install')
|
||||||
|
|
||||||
if conf.env.DEST_OS == 'android':
|
if conf.env.DEST_OS == 'android':
|
||||||
conf.options.GOLDSRC = False
|
conf.options.GOLDSRC = conf.env.GOLDSRC = False
|
||||||
conf.env.SERVER_NAME = 'server' # can't be any other name, until specified
|
conf.env.SERVER_NAME = 'server' # can't be any other name, until specified
|
||||||
|
elif conf.env.DEST_OS == 'nswitch':
|
||||||
|
conf.options.GOLDSRC = conf.env.GOLDSRC = False
|
||||||
|
|
||||||
if conf.env.MAGX:
|
if conf.env.MAGX:
|
||||||
enforce_pic = False
|
enforce_pic = False
|
||||||
@ -148,6 +150,13 @@ def configure(conf):
|
|||||||
cflags += conf.filter_cflags(compiler_optional_flags + c_compiler_optional_flags, cflags)
|
cflags += conf.filter_cflags(compiler_optional_flags + c_compiler_optional_flags, cflags)
|
||||||
cxxflags += conf.filter_cxxflags(compiler_optional_flags, cflags)
|
cxxflags += conf.filter_cxxflags(compiler_optional_flags, cflags)
|
||||||
|
|
||||||
|
# on the Switch, allow undefined symbols by default, which is needed for libsolder to work
|
||||||
|
# additionally, shared libs are linked without libc
|
||||||
|
if conf.env.DEST_OS == 'nswitch':
|
||||||
|
linkflags.remove('-Wl,--no-undefined')
|
||||||
|
conf.env.append_unique('LINKFLAGS_cshlib', ['-nostdlib', '-nostartfiles'])
|
||||||
|
conf.env.append_unique('LINKFLAGS_cxxshlib', ['-nostdlib', '-nostartfiles'])
|
||||||
|
|
||||||
conf.env.append_unique('CFLAGS', cflags)
|
conf.env.append_unique('CFLAGS', cflags)
|
||||||
conf.env.append_unique('CXXFLAGS', cxxflags)
|
conf.env.append_unique('CXXFLAGS', cxxflags)
|
||||||
conf.env.append_unique('LINKFLAGS', linkflags)
|
conf.env.append_unique('LINKFLAGS', linkflags)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user