Night Owl 6 years ago
parent
commit
4b636e1ce3
  1. 1
      .travis.yml
  2. 43
      CMakeLists.txt
  3. 14
      README.md
  4. 28
      appveyor.yml
  5. 2
      cl_dll/Android.mk
  6. 27
      cl_dll/CMakeLists.txt
  7. 2
      cl_dll/GameStudioModelRenderer.cpp
  8. 2
      cl_dll/GameStudioModelRenderer.h
  9. 2
      cl_dll/GameStudioModelRenderer_Sample.cpp
  10. 2
      cl_dll/GameStudioModelRenderer_Sample.h
  11. 2
      cl_dll/StudioModelRenderer.cpp
  12. 2
      cl_dll/StudioModelRenderer.h
  13. 2
      cl_dll/camera.h
  14. 17
      cl_dll/cdll_int.cpp
  15. 3
      cl_dll/cl_util.h
  16. 2
      cl_dll/demo.h
  17. 2
      cl_dll/entity.cpp
  18. 2
      cl_dll/ev_hldm.h
  19. 2
      cl_dll/events.cpp
  20. 2
      cl_dll/eventscripts.h
  21. 3
      cl_dll/flashlight.cpp
  22. 2
      cl_dll/health.cpp
  23. 16
      cl_dll/hud.cpp
  24. 2
      cl_dll/hud.h
  25. 2
      cl_dll/hud_iface.h
  26. 11
      cl_dll/hud_msg.cpp
  27. 2
      cl_dll/hud_redraw.cpp
  28. 2
      cl_dll/hud_servers.cpp
  29. 2
      cl_dll/hud_servers.h
  30. 2
      cl_dll/hud_servers_priv.h
  31. 2
      cl_dll/hud_spectator.cpp
  32. 2
      cl_dll/hud_spectator.h
  33. 2
      cl_dll/in_camera.cpp
  34. 2
      cl_dll/in_defs.h
  35. 2
      cl_dll/input.cpp
  36. 4
      cl_dll/input_goldsource.cpp
  37. 2
      cl_dll/input_mouse.cpp
  38. 2
      cl_dll/kbutton.h
  39. 2
      cl_dll/overview.cpp
  40. 2
      cl_dll/overview.h
  41. 67
      cl_dll/scoreboard.cpp
  42. 2
      cl_dll/studio_util.cpp
  43. 2
      cl_dll/studio_util.h
  44. 8
      cl_dll/text_message.cpp
  45. 2
      cl_dll/tri.cpp
  46. 2
      cl_dll/view.cpp
  47. 2
      cl_dll/view.h
  48. 29
      cmake/VSForceXPToolchain.cmake
  49. 18
      dlls/CMakeLists.txt
  50. 2
      dlls/cbase.h
  51. 4
      dlls/client.cpp
  52. 8
      dlls/lights.cpp
  53. 3
      dlls/monsters.cpp
  54. 8
      dlls/multiplay_gamerules.cpp
  55. 29
      dlls/player.cpp
  56. 2
      dlls/playermonster.cpp
  57. 84
      dlls/sound.cpp
  58. 2
      dlls/squad.h
  59. 2
      dlls/stats.cpp
  60. 2
      dlls/util.cpp
  61. 2
      dlls/util.h
  62. 3
      dlls/world.cpp
  63. 14
      engine/mobility_int.h
  64. 2
      pm_shared/pm_movevars.h
  65. 17
      pm_shared/pm_shared.c
  66. 1
      utils/false_vgui/include/VGUI_Panel.h
  67. 845
      utils/makefont/makefont.cpp
  68. 138
      utils/makefont/makefont.dsp
  69. 3
      utils/makefont/winebuild.sh

1
.travis.yml

@ -22,3 +22,4 @@ script:
- cp dlls/hl.* $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC/dlls - cp dlls/hl.* $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC/dlls
- tar -J -cf $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC.txz $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC - tar -J -cf $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC.txz $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC
- curl --upload-file $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC.txz https://transfer.sh/$TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC.txz - curl --upload-file $TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC.txz https://transfer.sh/$TRAVIS_BRANCH-$TRAVIS_OS_NAME-$CC.txz

43
CMakeLists.txt

@ -21,17 +21,25 @@
# #
cmake_minimum_required(VERSION 2.6.0) cmake_minimum_required(VERSION 2.6.0)
# Install custom module path
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
include(VSForceXPToolchain) # Force XP toolchain for Visual Studio
project (HLSDK-XASH3D) project (HLSDK-XASH3D)
#-------------- #--------------
# USER DEFINES \ # USER DEFINES \
################\ ################\
option(64BIT "Allow 64 Bit builds" OFF)
option(USE_VGUI "Enable VGUI1. UNDONE" OFF) option(USE_VGUI "Enable VGUI1. UNDONE" OFF)
option(USE_VGUI2 "Enable VGUI2. UNDONE" OFF) option(USE_VGUI2 "Enable VGUI2. UNDONE" OFF)
option(USE_VOICEMGR "Enable VOICE MANAGER." OFF) option(USE_VOICEMGR "Enable VOICE MANAGER." OFF)
option(BUILD_CLIENT "Build client dll" ON) option(BUILD_CLIENT "Build client dll" ON)
option(BUILD_SERVER "Build server dll" ON) option(BUILD_SERVER "Build server dll" ON)
option(GOLDSOURCE_SUPPORT "Build goldsource compatible client library" OFF) option(GOLDSOURCE_SUPPORT "Build goldsource compatible client library" OFF)
option(64BIT "Disable auto -m32 appending to compiler flags" OFF)
set(GAMEDIR "valve" CACHE STRING "Gamedir path") set(GAMEDIR "valve" CACHE STRING "Gamedir path")
set(SERVER_INSTALL_DIR "dlls" CACHE STRING "Where put server dll") set(SERVER_INSTALL_DIR "dlls" CACHE STRING "Where put server dll")
set(CLIENT_INSTALL_DIR "cl_dlls" CACHE STRING "Where put client dll") set(CLIENT_INSTALL_DIR "cl_dlls" CACHE STRING "Where put client dll")
@ -43,15 +51,40 @@ set(SERVER_LIBRARY_NAME "hl" CACHE STRING "Library name for Linux/MacOS/Windows"
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
# Build 32-bit Xash on 64-bit, because Xash3D not support this if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT 64BIT)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
if(MSVC) if(MSVC)
error("UNDONE: set 32 build flags") error("UNDONE: set 32 build flags")
else() else()
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
endif() endif()
set(CMAKE_SIZEOF_VOID_P 4)
endif()
if(64BIT AND CMAKE_SIZEOF_VOID_P EQUAL 4)
message(FATAL_ERROR "You enabled XASH_64BIT, but compiler can't create 64 bit code!")
endif()
if(64BIT)
message(STATUS "Building for 64 Bit")
else()
message(STATUS "Building for 32 Bit")
endif()
if (MINGW)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++ -static-libgcc")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--add-stdcall-alias")
endif()
# add_compile_options for older cmake versions
if(${CMAKE_VERSION} VERSION_LESS "3.0.2")
macro(add_compile_options)
set(list_var "${ARGV}")
foreach(arg IN LISTS list_var)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${arg}")
endforeach()
endmacro()
endif() endif()
if(BUILD_CLIENT) if(BUILD_CLIENT)

14
README.md

@ -1,4 +1,4 @@
# Half-Life SDK for Xash3D [![Build Status](https://travis-ci.org/FWGS/hlsdk-xash3d.svg)](https://travis-ci.org/FWGS/hlsdk-xash3d) # Half-Life SDK for Xash3D [![Build Status](https://travis-ci.org/FWGS/hlsdk-xash3d.svg)](https://travis-ci.org/FWGS/hlsdk-xash3d) [![Windows Build Status](https://ci.appveyor.com/api/projects/status/github/FWGS/hlsdk-xash3d?svg=true)](https://ci.appveyor.com/project/a1batross/hlsdk-xash3d)
Half-Life SDK for Xash3D & GoldSource with some fixes. Half-Life SDK for Xash3D & GoldSource with some fixes.
@ -10,6 +10,12 @@ Half-Life SDK for Xash3D & GoldSource with some fixes.
cmake ../ cmake ../
make make
Crosscompiling using mingw:
mkdir build-mingw && cd build-mingw
TOOLCHAIN_PREFIX=i686-w64-mingw32 # check up the actual mingw prefix of your mingw installation
cmake ../ -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER="$TOOLCHAIN_PREFIX-gcc" -DCMAKE_CXX_COMPILER="$TOOLCHAIN_PREFIX-g++"
You may enable or disable some build options by -Dkey=value. All available build options are defined in CMakeLists.txt at root directory. You may enable or disable some build options by -Dkey=value. All available build options are defined in CMakeLists.txt at root directory.
See below if you want to build the GoldSource compatible libraries. See below if you want to build the GoldSource compatible libraries.
@ -31,7 +37,7 @@ These scripts also can be ran via wine:
The libraries built this way are always GoldSource compatible. The libraries built this way are always GoldSource compatible.
There're dsp projects for MVS 6 in `cl_dll` and `dlls` directories, but we don't keep them up-to-date. You're free to adapt them for yourself and try to import into the newer MVS versions. There're dsp projects for Visual Studio 6 in `cl_dll` and `dlls` directories, but we don't keep them up-to-date. You're free to adapt them for yourself and try to import into the newer Visual Studio versions.
#### Using mingw #### Using mingw
@ -44,7 +50,7 @@ TODO
### OS X ### OS X
TODO Nothing here.
### FreeBSD ### FreeBSD
@ -68,6 +74,8 @@ or when using make without cmake:
Unlike original client by Valve the resulting client library will not depend on vgui or SDL2 just like the one that's used in FWGS Xash3d. Unlike original client by Valve the resulting client library will not depend on vgui or SDL2 just like the one that's used in FWGS Xash3d.
Note for **Windows**: it's not possible to create GoldSource compatible libraries using mingw, only msvc builds will work.
Note for **Linux**: GoldSource requires libraries (both client and server) to be compiled with libstdc++ bundled with g++ of major version 4 (versions from 4.6 to 4.9 should work). Note for **Linux**: GoldSource requires libraries (both client and server) to be compiled with libstdc++ bundled with g++ of major version 4 (versions from 4.6 to 4.9 should work).
If your Linux distribution does not provide compatible g++ version you have several options. If your Linux distribution does not provide compatible g++ version you have several options.

28
appveyor.yml

@ -0,0 +1,28 @@
version: 1.0.{build}
branches:
only:
- master
environment:
matrix:
- os: Visual Studio 2013
GENERATOR_NAME: "Visual Studio 12 2013"
- os: Visual Studio 2015
GENERATOR_NAME: "Visual Studio 14 2015"
# TODO: Uncomment when AppVeyor will provide XP toolchain for VS2017
# - os: Visual Studio 2017
# GENERATOR_NAME: "Visual Studio 15 2017"
clone_folder: c:\projects\xash\hlsdk-xash3d
build:
project: INSTALL.vcxproj
verbosity: normal
configuration:
- Debug
before_build:
- git submodule update --init --recursive
- cmake -G "%GENERATOR_NAME%"

2
cl_dll/Android.mk

@ -78,7 +78,7 @@ SRCS+=./input_xash3d.cpp
SRCS+=./scoreboard.cpp SRCS+=./scoreboard.cpp
SRCS+=./MOTD.cpp SRCS+=./MOTD.cpp
INCLUDES = -I../common -I. -I../game_shared -I../pm_shared -I../engine -I../dlls -I../utils/false_vgui/include INCLUDES = -I../common -I. -I../game_shared -I../pm_shared -I../engine -I../dlls -I../utils/false_vgui/include
DEFINES = -Wno-write-strings -DLINUX -D_LINUX -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -DCLIENT_DLL -w DEFINES = -Wno-write-strings -DLINUX -D_LINUX -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -DCLIENT_DLL -w -D_snprintf=snprintf
LOCAL_C_INCLUDES := $(LOCAL_PATH)/. \ LOCAL_C_INCLUDES := $(LOCAL_PATH)/. \
$(LOCAL_PATH)/../common \ $(LOCAL_PATH)/../common \

27
cl_dll/CMakeLists.txt

@ -25,11 +25,25 @@ project (CLDLL)
set (CLDLL_LIBRARY client) set (CLDLL_LIBRARY client)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-write-strings -DLINUX -D_LINUX -Dstricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -DCLIENT_DLL -w") add_definitions(-DCLIENT_DLL)
if(NOT MSVC)
add_compile_options(-fno-exceptions) # GCC/Clang flag
add_compile_options(-Wno-write-strings) # GCC/Clang flag
add_compile_options(-fvisibility=hidden) # GCC/Clang flag
add_definitions(-D_LINUX -DLINUX) # It seems enough for all non-Win32 systems
add_definitions(-Dstricmp=strcasecmp -Dstrnicmp=strncasecmp)
if(NOT MINGW)
add_definitions(-D_snprintf=snprintf -D_vsnprintf=vsnprintf)
endif()
else()
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
endif()
if (GOLDSOURCE_SUPPORT) if (GOLDSOURCE_SUPPORT)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DGOLDSOURCE_SUPPORT") add_definitions(-DGOLDSOURCE_SUPPORT)
endif() endif()
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set (CLDLL_SOURCES set (CLDLL_SOURCES
ev_hldm.cpp ev_hldm.cpp
@ -100,8 +114,13 @@ set_target_properties (${CLDLL_LIBRARY} PROPERTIES
POSITION_INDEPENDENT_CODE 1) POSITION_INDEPENDENT_CODE 1)
if(APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") if(APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(CLDLL_NAME "client")
if(64BIT)
set(CLDLL_NAME "client64")
endif()
set_target_properties(${CLDLL_LIBRARY} PROPERTIES set_target_properties(${CLDLL_LIBRARY} PROPERTIES
OUTPUT_NAME "client" OUTPUT_NAME ${CLDLL_NAME}
PREFIX "") PREFIX "")
endif() endif()

2
cl_dll/GameStudioModelRenderer.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/GameStudioModelRenderer.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/GameStudioModelRenderer_Sample.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/GameStudioModelRenderer_Sample.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/StudioModelRenderer.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/StudioModelRenderer.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/camera.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

17
cl_dll/cdll_int.cpp

@ -376,7 +376,22 @@ void DLLEXPORT HUD_MobilityInterface( mobile_engfuncs_t *gpMobileEngfuncs )
gMobileEngfuncs = gpMobileEngfuncs; gMobileEngfuncs = gpMobileEngfuncs;
} }
bool isXashFWGS() bool HUD_MessageBox( const char *msg )
{
gEngfuncs.Con_Printf( msg ); // just in case
if( IsXashFWGS() )
{
gMobileEngfuncs->pfnSys_Warn( msg );
return true;
}
// TODO: Load SDL2 and call ShowSimpleMessageBox
return false;
}
bool IsXashFWGS()
{ {
return gMobileEngfuncs != NULL; return gMobileEngfuncs != NULL;
} }

3
cl_dll/cl_util.h

@ -181,5 +181,6 @@ inline void UnpackRGB( int &r, int &g, int &b, unsigned long ulRGB )\
HSPRITE LoadSprite( const char *pszName ); HSPRITE LoadSprite( const char *pszName );
bool isXashFWGS(); bool HUD_MessageBox( const char *msg );
bool IsXashFWGS();
#endif #endif

2
cl_dll/demo.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/entity.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/ev_hldm.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/events.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/eventscripts.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

3
cl_dll/flashlight.cpp

@ -108,6 +108,9 @@ int CHudFlashlight::Draw( float flTime )
int r, g, b, x, y, a; int r, g, b, x, y, a;
wrect_t rc; wrect_t rc;
if( gEngfuncs.IsSpectateOnly() )
return 1;
if( !( gHUD.m_iWeaponBits & ( 1 << ( WEAPON_SUIT ) ) ) ) if( !( gHUD.m_iWeaponBits & ( 1 << ( WEAPON_SUIT ) ) ) )
return 1; return 1;

2
cl_dll/health.cpp

@ -231,6 +231,8 @@ int CHudHealth::Draw( float flTime )
int iHeight = gHUD.m_iFontHeight; int iHeight = gHUD.m_iFontHeight;
int iWidth = HealthWidth / 10; int iWidth = HealthWidth / 10;
UnpackRGB( r, g, b, RGB_YELLOWISH );
FillRGBA( x, y, iWidth, iHeight, r, g, b, a ); FillRGBA( x, y, iWidth, iHeight, r, g, b, a );
} }

16
cl_dll/hud.cpp

@ -381,6 +381,18 @@ void CHud::VidInit( void )
// assumption: number_1, number_2, etc, are all listed and loaded sequentially // assumption: number_1, number_2, etc, are all listed and loaded sequentially
m_HUD_number_0 = GetSpriteIndex( "number_0" ); m_HUD_number_0 = GetSpriteIndex( "number_0" );
if( m_HUD_number_0 == -1 )
{
const char *msg = "There is something wrong with your game data! Please, reinstall\n";
if( HUD_MessageBox( msg ) )
{
gEngfuncs.pfnClientCmd( "quit\n" );
}
return;
}
m_iFontHeight = m_rgrcRects[m_HUD_number_0].bottom - m_rgrcRects[m_HUD_number_0].top; m_iFontHeight = m_rgrcRects[m_HUD_number_0].bottom - m_rgrcRects[m_HUD_number_0].top;
m_Ammo.VidInit(); m_Ammo.VidInit();
@ -513,10 +525,6 @@ int CHud::MsgFunc_SetFOV( const char *pszName, int iSize, void *pbuf )
int newfov = READ_BYTE(); int newfov = READ_BYTE();
int def_fov = CVAR_GET_FLOAT( "default_fov" ); int def_fov = CVAR_GET_FLOAT( "default_fov" );
//Weapon prediction already takes care of changing the fog. ( g_lastFOV ).
//if( cl_lw && cl_lw->value )
// return 1;
g_lastFOV = newfov; g_lastFOV = newfov;
if( newfov == 0 ) if( newfov == 0 )

2
cl_dll/hud.h

@ -230,7 +230,7 @@ public:
void InitHUDData( void ); void InitHUDData( void );
int VidInit( void ); int VidInit( void );
int Draw( float flTime ); int Draw( float flTime );
int DrawPlayers( int xoffset, float listslot, int nameoffset = 0, char *team = NULL ); // returns the ypos where it finishes drawing int DrawPlayers( int xoffset, float listslot, int nameoffset = 0, const char *team = NULL ); // returns the ypos where it finishes drawing
void UserCmd_ShowScores( void ); void UserCmd_ShowScores( void );
void UserCmd_HideScores( void ); void UserCmd_HideScores( void );
int MsgFunc_ScoreInfo( const char *pszName, int iSize, void *pbuf ); int MsgFunc_ScoreInfo( const char *pszName, int iSize, void *pbuf );

2
cl_dll/hud_iface.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

11
cl_dll/hud_msg.cpp

@ -23,6 +23,7 @@
#define MAX_CLIENTS 32 #define MAX_CLIENTS 32
extern float g_lastFOV; // Vit_amiN
/// USER-DEFINED SERVER MESSAGE HANDLERS /// USER-DEFINED SERVER MESSAGE HANDLERS
@ -46,6 +47,10 @@ int CHud::MsgFunc_ResetHUD( const char *pszName, int iSize, void *pbuf )
// reset concussion effect // reset concussion effect
m_iConcussionEffect = 0; m_iConcussionEffect = 0;
// Vit_amiN: reset the FOV
m_iFOV = 0; // default_fov
g_lastFOV = 0.0f;
return 1; return 1;
} }
@ -102,10 +107,14 @@ int CHud::MsgFunc_Damage( const char *pszName, int iSize, void *pbuf )
int CHud::MsgFunc_Concuss( const char *pszName, int iSize, void *pbuf ) int CHud::MsgFunc_Concuss( const char *pszName, int iSize, void *pbuf )
{ {
int r, g, b;
BEGIN_READ( pbuf, iSize ); BEGIN_READ( pbuf, iSize );
m_iConcussionEffect = READ_BYTE(); m_iConcussionEffect = READ_BYTE();
if( m_iConcussionEffect ) if( m_iConcussionEffect )
this->m_StatusIcons.EnableIcon( "dmg_concuss", 255, 160, 0 ); {
UnpackRGB( r, g, b, RGB_YELLOWISH ); // Vit_amiN: fixed
this->m_StatusIcons.EnableIcon( "dmg_concuss", r, g, b );
}
else else
this->m_StatusIcons.DisableIcon( "dmg_concuss" ); this->m_StatusIcons.DisableIcon( "dmg_concuss" );
return 1; return 1;

2
cl_dll/hud_redraw.cpp

@ -235,7 +235,7 @@ int CHud::DrawHudString( int xpos, int ypos, int iMaxX, const char *szIt, int r,
int DrawUtfString( int xpos, int ypos, int iMaxX, const char *szIt, int r, int g, int b ) int DrawUtfString( int xpos, int ypos, int iMaxX, const char *szIt, int r, int g, int b )
{ {
if (isXashFWGS()) if (IsXashFWGS())
{ {
// xash3d: reset unicode state // xash3d: reset unicode state
gEngfuncs.pfnVGUI2DrawCharacterAdditive( 0, 0, 0, 0, 0, 0, 0 ); gEngfuncs.pfnVGUI2DrawCharacterAdditive( 0, 0, 0, 0, 0, 0, 0 );

2
cl_dll/hud_servers.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/hud_servers.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/hud_servers_priv.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/hud_spectator.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/hud_spectator.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/in_camera.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/in_defs.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/input.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

4
cl_dll/input_goldsource.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //
@ -1368,7 +1368,7 @@ void IN_JoyMove ( float frametime, usercmd_t *cmd )
// y=ax^b; where a = 300 and b = 1.3 // y=ax^b; where a = 300 and b = 1.3
// also x values are in increments of 800 (so this is factored out) // also x values are in increments of 800 (so this is factored out)
// then bounds check result to level out excessively high spin rates // then bounds check result to level out excessively high spin rates
fTemp = 300.0 * pow(abs(fAxisValue) / 800.0, 1.3); fTemp = 300.0 * pow(fabs(fAxisValue) / 800.0, 1.3);
if (fTemp > 14000.0) if (fTemp > 14000.0)
fTemp = 14000.0; fTemp = 14000.0;
// restore direction information // restore direction information

2
cl_dll/input_mouse.cpp

@ -69,7 +69,7 @@ void IN_Shutdown( void )
void IN_Init( void ) void IN_Init( void )
{ {
#ifdef SUPPORT_GOLDSOURCE_INPUT #ifdef SUPPORT_GOLDSOURCE_INPUT
if (isXashFWGS()) { if (IsXashFWGS()) {
gEngfuncs.Con_Printf( "FWGS Xash3D input is in use\n" ); gEngfuncs.Con_Printf( "FWGS Xash3D input is in use\n" );
currentInput = &fwgsInput; currentInput = &fwgsInput;
} else { } else {

2
cl_dll/kbutton.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/overview.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/overview.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

67
cl_dll/scoreboard.cpp

@ -92,17 +92,18 @@ We have a minimum width of 1-320 - we could have the field widths scale with it?
// X positions // X positions
// relative to the side of the scoreboard // relative to the side of the scoreboard
#define NAME_RANGE_MIN -65 #define NAME_RANGE_MIN 20
#define NAME_RANGE_MAX 180 #define NAME_RANGE_MAX 145
#define KILLS_RANGE_MIN 165 #define NAME_RANGE_MODIFIER 120
#define KILLS_RANGE_MAX 205 #define KILLS_RANGE_MIN 130
#define DIVIDER_POS 215 #define KILLS_RANGE_MAX 170
#define DEATHS_RANGE_MIN 220 #define DIVIDER_POS 180
#define DEATHS_RANGE_MAX 245 #define DEATHS_RANGE_MIN 185
#define PING_RANGE_MIN 280 #define DEATHS_RANGE_MAX 210
#define PING_RANGE_MAX 330 #define PING_RANGE_MIN 245
#define PL_RANGE_MIN 350 #define PING_RANGE_MAX 295
#define PL_RANGE_MAX 410 #define PL_RANGE_MIN 315
#define PL_RANGE_MAX 375
int SCOREBOARD_WIDTH = 320; int SCOREBOARD_WIDTH = 320;
@ -128,11 +129,11 @@ int CHudScoreboard::Draw( float fTime )
if( cl_showpacketloss && cl_showpacketloss->value && ( ScreenWidth >= 400 ) ) if( cl_showpacketloss && cl_showpacketloss->value && ( ScreenWidth >= 400 ) )
{ {
can_show_packetloss = 1; can_show_packetloss = 1;
SCOREBOARD_WIDTH = 400; SCOREBOARD_WIDTH = ( ScreenWidth >= 520 ) ? ( 400 - NAME_RANGE_MODIFIER ) : 400;
} }
else else
{ {
SCOREBOARD_WIDTH = 320; SCOREBOARD_WIDTH = ( ScreenWidth >= 440 ) ? ( 320 - NAME_RANGE_MODIFIER ) : 320;
} }
// just sort the list on the fly // just sort the list on the fly
@ -145,7 +146,14 @@ int CHudScoreboard::Draw( float fTime )
int xpos = NAME_RANGE_MIN + xpos_rel; int xpos = NAME_RANGE_MIN + xpos_rel;
FAR_RIGHT = can_show_packetloss ? PL_RANGE_MAX : PING_RANGE_MAX; FAR_RIGHT = can_show_packetloss ? PL_RANGE_MAX : PING_RANGE_MAX;
FAR_RIGHT += 125; FAR_RIGHT += 5;
if( ( ScreenWidth >= 440 && !can_show_packetloss ) || ( ScreenWidth >= 520 && can_show_packetloss ) )
{
xpos -= NAME_RANGE_MODIFIER;
FAR_RIGHT += NAME_RANGE_MODIFIER;
}
if( cl_scoreboard_bg && cl_scoreboard_bg->value ) if( cl_scoreboard_bg && cl_scoreboard_bg->value )
gHUD.DrawDarkRectangle( xpos - 5, ypos - 5, FAR_RIGHT, ROW_RANGE_MAX ); gHUD.DrawDarkRectangle( xpos - 5, ypos - 5, FAR_RIGHT, ROW_RANGE_MAX );
if( !gHUD.m_Teamplay ) if( !gHUD.m_Teamplay )
@ -165,7 +173,7 @@ int CHudScoreboard::Draw( float fTime )
list_slot += 1.2; list_slot += 1.2;
ypos = ROW_RANGE_MIN + ( list_slot * ROW_GAP ); ypos = ROW_RANGE_MIN + ( list_slot * ROW_GAP );
xpos = NAME_RANGE_MIN + xpos_rel; // xpos = NAME_RANGE_MIN + xpos_rel;
FillRGBA( xpos - 4, ypos, FAR_RIGHT -2, 1, 255, 140, 0, 255 ); // draw the seperator line FillRGBA( xpos - 4, ypos, FAR_RIGHT -2, 1, 255, 140, 0, 255 ); // draw the seperator line
list_slot += 0.8; list_slot += 0.8;
@ -266,12 +274,18 @@ int CHudScoreboard::Draw( float fTime )
break; break;
xpos = NAME_RANGE_MIN + xpos_rel; xpos = NAME_RANGE_MIN + xpos_rel;
if( ( ScreenWidth >= 440 && !can_show_packetloss ) || ( ScreenWidth >= 520 && can_show_packetloss ) )
{
xpos -= NAME_RANGE_MODIFIER;
}
int r = 255, g = 225, b = 55; // draw the stuff kinda yellowish int r = 255, g = 225, b = 55; // draw the stuff kinda yellowish
if( team_info->ownteam ) // if it is their team, draw the background different color if( team_info->ownteam ) // if it is their team, draw the background different color
{ {
// overlay the background in blue, then draw the score text over it // overlay the background in blue, then draw the score text over it
FillRGBA( NAME_RANGE_MIN + xpos_rel - 5, ypos, FAR_RIGHT, ROW_GAP, 0, 0, 255, 70 ); FillRGBA( xpos - 5, ypos, FAR_RIGHT, ROW_GAP, 0, 0, 255, 70 );
} }
// draw their name (left to right) // draw their name (left to right)
@ -323,7 +337,7 @@ int CHudScoreboard::Draw( float fTime )
extern float *GetClientColor( int client ); extern float *GetClientColor( int client );
// returns the ypos where it finishes drawing // returns the ypos where it finishes drawing
int CHudScoreboard::DrawPlayers( int xpos_rel, float list_slot, int nameoffset, char *team ) int CHudScoreboard::DrawPlayers( int xpos_rel, float list_slot, int nameoffset, const char *team )
{ {
int can_show_packetloss = 0; int can_show_packetloss = 0;
int FAR_RIGHT; int FAR_RIGHT;
@ -340,7 +354,12 @@ int CHudScoreboard::DrawPlayers( int xpos_rel, float list_slot, int nameoffset,
} }
FAR_RIGHT = can_show_packetloss ? PL_RANGE_MAX : PING_RANGE_MAX; FAR_RIGHT = can_show_packetloss ? PL_RANGE_MAX : PING_RANGE_MAX;
FAR_RIGHT += 125; FAR_RIGHT += 5;
if( ( ScreenWidth >= 440 && !can_show_packetloss ) || ( ScreenWidth >= 520 && can_show_packetloss ) )
{
FAR_RIGHT += NAME_RANGE_MODIFIER;
}
// draw the players, in order, and restricted to team if set // draw the players, in order, and restricted to team if set
while( 1 ) while( 1 )
@ -380,6 +399,12 @@ int CHudScoreboard::DrawPlayers( int xpos_rel, float list_slot, int nameoffset,
break; break;
int xpos = NAME_RANGE_MIN + xpos_rel; int xpos = NAME_RANGE_MIN + xpos_rel;
if( ( ScreenWidth >= 440 && !can_show_packetloss ) || ( ScreenWidth >= 520 && can_show_packetloss ) )
{
xpos -= NAME_RANGE_MODIFIER;
}
int r = 255, g = 255, b = 255; int r = 255, g = 255, b = 255;
float *colors = GetClientColor( best_player ); float *colors = GetClientColor( best_player );
r *= colors[0], g *= colors[1], b *= colors[2]; r *= colors[0], g *= colors[1], b *= colors[2];
@ -388,18 +413,18 @@ int CHudScoreboard::DrawPlayers( int xpos_rel, float list_slot, int nameoffset,
if( pl_info->thisplayer ) if( pl_info->thisplayer )
{ {
// green is the suicide color? i wish this could do grey... // green is the suicide color? i wish this could do grey...
FillRGBA( NAME_RANGE_MIN + xpos_rel - 5, ypos, FAR_RIGHT, ROW_GAP, 80, 155, 0, 70 ); FillRGBA( xpos - 5, ypos, FAR_RIGHT, ROW_GAP, 80, 155, 0, 70 );
} }
else else
{ {
// Highlight the killers name - overlay the background in red, then draw the score text over it // Highlight the killers name - overlay the background in red, then draw the score text over it
FillRGBA( NAME_RANGE_MIN + xpos_rel - 5, ypos, FAR_RIGHT, ROW_GAP, 255, 0, 0, ( (float)15 * (float)( m_fLastKillTime - gHUD.m_flTime ) ) ); FillRGBA( xpos - 5, ypos, FAR_RIGHT, ROW_GAP, 255, 0, 0, ( (float)15 * (float)( m_fLastKillTime - gHUD.m_flTime ) ) );
} }
} }
else if( pl_info->thisplayer ) // if it is their name, draw it a different color else if( pl_info->thisplayer ) // if it is their name, draw it a different color
{ {
// overlay the background in blue, then draw the score text over it // overlay the background in blue, then draw the score text over it
FillRGBA( NAME_RANGE_MIN + xpos_rel - 5, ypos, FAR_RIGHT, ROW_GAP, 0, 0, 255, 70 ); FillRGBA( xpos - 5, ypos, FAR_RIGHT, ROW_GAP, 0, 0, 255, 70 );
} }
// draw their name (left to right) // draw their name (left to right)

2
cl_dll/studio_util.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/studio_util.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

8
cl_dll/text_message.cpp

@ -181,20 +181,20 @@ int CHudTextMessage::MsgFunc_TextMsg( const char *pszName, int iSize, void *pbuf
switch( msg_dest ) switch( msg_dest )
{ {
case HUD_PRINTCENTER: case HUD_PRINTCENTER:
snprintf( psz, MSG_BUF_SIZE, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] ); _snprintf( psz, MSG_BUF_SIZE, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] );
CenterPrint( ConvertCRtoNL( psz ) ); CenterPrint( ConvertCRtoNL( psz ) );
break; break;
case HUD_PRINTNOTIFY: case HUD_PRINTNOTIFY:
psz[0] = 1; // mark this message to go into the notify buffer psz[0] = 1; // mark this message to go into the notify buffer
snprintf( psz + 1, MSG_BUF_SIZE - 1, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] ); _snprintf( psz + 1, MSG_BUF_SIZE - 1, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] );
ConsolePrint( ConvertCRtoNL( psz ) ); ConsolePrint( ConvertCRtoNL( psz ) );
break; break;
case HUD_PRINTTALK: case HUD_PRINTTALK:
snprintf( psz, MSG_BUF_SIZE, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] ); _snprintf( psz, MSG_BUF_SIZE, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] );
gHUD.m_SayText.SayTextPrint( ConvertCRtoNL( psz ), MSG_BUF_SIZE ); gHUD.m_SayText.SayTextPrint( ConvertCRtoNL( psz ), MSG_BUF_SIZE );
break; break;
case HUD_PRINTCONSOLE: case HUD_PRINTCONSOLE:
snprintf( psz, MSG_BUF_SIZE, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] ); _snprintf( psz, MSG_BUF_SIZE, szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4] );
ConsolePrint( ConvertCRtoNL( psz ) ); ConsolePrint( ConvertCRtoNL( psz ) );
break; break;
} }

2
cl_dll/tri.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/view.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

2
cl_dll/view.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

29
cmake/VSForceXPToolchain.cmake

@ -0,0 +1,29 @@
if(WIN32)
# Windows XP compatible platform toolset. Must be set before project(),
# otherwise change of CMAKE_*_TOOLSET will take no effect.
# We get VS version from the generator name because neither MSVC* nor other
# variables that describe the compiler aren't available before project().
if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([0-9]+)")
if(${CMAKE_MATCH_1} LESS 11)
# Nothing. Older VS does support XP by default.
elseif(${CMAKE_MATCH_1} EQUAL 11)
# Visual Studio 11 2012
set(CMAKE_GENERATOR_TOOLSET "v110_xp" CACHE STRING "CMAKE_GENERATOR_TOOLSET" FORCE)
set(CMAK_VS_PLATFORM_TOOLSET "v110_xp" CACHE STRING "CMAKE_VS_PLATFORM_TOOLSET" FORCE)
elseif (${CMAKE_MATCH_1} EQUAL 12)
# Visual Studio 12 2013
set(CMAKE_GENERATOR_TOOLSET "v120_xp" CACHE STRING "CMAKE_GENERATOR_TOOLSET" FORCE)
set(CMAKE_VS_PLATFORM_TOOLSET "v120_xp" CACHE STRING "CMAKE_VS_PLATFORM_TOOLSET" FORCE)
elseif (${CMAKE_MATCH_1} EQUAL 14)
# Visual Studio 14 2015
set(CMAKE_GENERATOR_TOOLSET "v140_xp" CACHE STRING "CMAKE_GENERATOR_TOOLSET" FORCE)
set(CMAKE_VS_PLATFORM_TOOLSET "v140_xp" CACHE STRING "CMAKE_VS_PLATFORM_TOOLSET" FORCE)
elseif (${CMAKE_MATCH_1} EQUAL 15)
# Visual Studio 15 2017
set(CMAKE_GENERATOR_TOOLSET "v141_xp" CACHE STRING "CMAKE_GENERATOR_TOOLSET" FORCE)
set(CMAKE_VS_PLATFORM_TOOLSET "v141_xp" CACHE STRING "CMAKE_VS_PLATFORM_TOOLSET" FORCE)
else()
message(WARNING "WARNING: You maybe building without Windows XP compability. See which toolchain version Visual Studio provides, and say cmake to use it: cmake -G \"Visual Studio XX\" -T \"vXXX_xp\"")
endif()
endif()
endif()

18
dlls/CMakeLists.txt

@ -25,8 +25,15 @@ project (SVDLL)
set (SVDLL_LIBRARY server) set (SVDLL_LIBRARY server)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LINUX -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -fno-exceptions -w") if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") add_compile_options(-fno-exceptions) # GCC/Clang flag
add_compile_options(-Wno-invalid-offsetof) # GCC/Clang flag
add_compile_options(-fvisibility=hidden) # GCC/Clang flag
add_definitions(-D_LINUX) # It seems enough for all non-Win32 systems
add_definitions(-Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf )
else()
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
endif()
set (SVDLL_SOURCES set (SVDLL_SOURCES
agrunt.cpp agrunt.cpp
@ -167,8 +174,13 @@ set_target_properties (${SVDLL_LIBRARY} PROPERTIES
POSITION_INDEPENDENT_CODE 1) POSITION_INDEPENDENT_CODE 1)
if(APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") if(APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(SVDLL_NAME "${SERVER_LIBRARY_NAME}")
if(64BIT)
set(SVDLL_NAME "${SERVER_LIBRARY_NAME}64")
endif()
set_target_properties(${SVDLL_LIBRARY} PROPERTIES set_target_properties(${SVDLL_LIBRARY} PROPERTIES
OUTPUT_NAME ${SERVER_LIBRARY_NAME} OUTPUT_NAME ${SVDLL_NAME}
PREFIX "") PREFIX "")
endif() endif()

2
dlls/cbase.h

@ -283,7 +283,7 @@ public:
#ifdef _DEBUG #ifdef _DEBUG
void FunctionCheck( void *pFunction, char *name ) void FunctionCheck( void *pFunction, char *name )
{ {
if( pFunction && !NAME_FOR_FUNCTION( (size_t)( pFunction ) ) ) if( pFunction && !NAME_FOR_FUNCTION( pFunction ) )
ALERT( at_error, "No EXPORT: %s:%s (%08lx)\n", STRING( pev->classname ), name, (size_t)pFunction ); ALERT( at_error, "No EXPORT: %s:%s (%08lx)\n", STRING( pev->classname ), name, (size_t)pFunction );
} }

4
dlls/client.cpp

@ -108,7 +108,7 @@ void ClientDisconnect( edict_t *pEntity )
char text[256] = ""; char text[256] = "";
if( pEntity->v.netname ) if( pEntity->v.netname )
snprintf( text, sizeof(text), "- %s has left the game\n", STRING( pEntity->v.netname ) ); _snprintf( text, sizeof(text), "- %s has left the game\n", STRING( pEntity->v.netname ) );
MESSAGE_BEGIN( MSG_ALL, gmsgSayText, NULL ); MESSAGE_BEGIN( MSG_ALL, gmsgSayText, NULL );
WRITE_BYTE( ENTINDEX( pEntity ) ); WRITE_BYTE( ENTINDEX( pEntity ) );
WRITE_STRING( text ); WRITE_STRING( text );
@ -660,7 +660,7 @@ void ClientUserInfoChanged( edict_t *pEntity, char *infobuffer )
if( gpGlobals->maxClients > 1 ) if( gpGlobals->maxClients > 1 )
{ {
char text[256]; char text[256];
snprintf( text, 256, "* %s changed name to %s\n", STRING( pEntity->v.netname ), g_engfuncs.pfnInfoKeyValue( infobuffer, "name" ) ); _snprintf( text, 256, "* %s changed name to %s\n", STRING( pEntity->v.netname ), g_engfuncs.pfnInfoKeyValue( infobuffer, "name" ) );
MESSAGE_BEGIN( MSG_ALL, gmsgSayText, NULL ); MESSAGE_BEGIN( MSG_ALL, gmsgSayText, NULL );
WRITE_BYTE( ENTINDEX( pEntity ) ); WRITE_BYTE( ENTINDEX( pEntity ) );
WRITE_STRING( text ); WRITE_STRING( text );

8
dlls/lights.cpp

@ -155,10 +155,10 @@ void CEnvLight::KeyValue( KeyValueData* pkvd )
} }
else if( j == 4 ) else if( j == 4 )
{ {
v /= 255; float vf = v / 255.0f;
r *= v; r *= vf;
g *= v; g *= vf;
b *= v; b *= vf;
} }
// simulate qrad direct, ambient,and gamma adjustments, as well as engine scaling // simulate qrad direct, ambient,and gamma adjustments, as well as engine scaling

3
dlls/monsters.cpp

@ -2118,7 +2118,8 @@ void CBaseMonster::StartMonster( void )
SetThink( &CBaseMonster::CallMonsterThink ); SetThink( &CBaseMonster::CallMonsterThink );
pev->nextthink += RANDOM_FLOAT( 0.1, 0.4 ); // spread think times. pev->nextthink += RANDOM_FLOAT( 0.1, 0.4 ); // spread think times.
if( !FStringNull( pev->targetname ) )// wait until triggered // Vit_amiN: fixed -- now it doesn't touch any scripted_sequence target
if( !FStringNull( pev->targetname ) && !m_pCine )// wait until triggered
{ {
SetState( MONSTERSTATE_IDLE ); SetState( MONSTERSTATE_IDLE );
// UNDONE: Some scripted sequence monsters don't have an idle? // UNDONE: Some scripted sequence monsters don't have an idle?

8
dlls/multiplay_gamerules.cpp

@ -1662,8 +1662,8 @@ void CHalfLifeMultiplay::SendMOTDToClient( edict_t *client )
{ {
// read from the MOTD.txt file // read from the MOTD.txt file
int length, char_count = 0; int length, char_count = 0;
const char *pFileList; char *pFileList;
const char *aFileList = pFileList = (const char*)LOAD_FILE_FOR_ME( CVAR_GET_STRING( "motdfile" ), &length ); char *aFileList = pFileList = (char*)LOAD_FILE_FOR_ME( CVAR_GET_STRING( "motdfile" ), &length );
// send the server name // send the server name
MESSAGE_BEGIN( MSG_ONE, gmsgServerName, NULL, client ); MESSAGE_BEGIN( MSG_ONE, gmsgServerName, NULL, client );
@ -1691,10 +1691,10 @@ void CHalfLifeMultiplay::SendMOTDToClient( edict_t *client )
if( char_count < MAX_MOTD_LENGTH ) if( char_count < MAX_MOTD_LENGTH )
pFileList = aFileList + char_count; pFileList = aFileList + char_count;
else else
pFileList = 0; *pFileList = 0;
MESSAGE_BEGIN( MSG_ONE, gmsgMOTD, NULL, client ); MESSAGE_BEGIN( MSG_ONE, gmsgMOTD, NULL, client );
WRITE_BYTE( pFileList ? FALSE : TRUE ); // FALSE means there is still more message to come WRITE_BYTE( *pFileList ? FALSE : TRUE ); // FALSE means there is still more message to come
WRITE_STRING( chunk ); WRITE_STRING( chunk );
MESSAGE_END(); MESSAGE_END();
} }

29
dlls/player.cpp

@ -787,6 +787,9 @@ void CBasePlayer::PackDeadPlayerItems( void )
void CBasePlayer::RemoveAllItems( BOOL removeSuit ) void CBasePlayer::RemoveAllItems( BOOL removeSuit )
{ {
int i;
CBasePlayerItem *pPendingItem;
if( m_pActiveItem ) if( m_pActiveItem )
{ {
ResetAutoaim(); ResetAutoaim();
@ -800,8 +803,8 @@ void CBasePlayer::RemoveAllItems( BOOL removeSuit )
if( m_pTank != 0 ) if( m_pTank != 0 )
m_pTank->Use( this, this, USE_OFF, 0 ); m_pTank->Use( this, this, USE_OFF, 0 );
int i; m_iTrain = TRAIN_NEW; // turn off train
CBasePlayerItem *pPendingItem;
for( i = 0; i < MAX_ITEM_TYPES; i++ ) for( i = 0; i < MAX_ITEM_TYPES; i++ )
{ {
m_pActiveItem = m_rgpPlayerItems[i]; m_pActiveItem = m_rgpPlayerItems[i];
@ -1403,7 +1406,7 @@ void CBasePlayer::StartObserver( Vector vecPosition, Vector vecViewAngle )
MESSAGE_END(); MESSAGE_END();
// Setup flags // Setup flags
m_iHideHUD = ( HIDEHUD_HEALTH | HIDEHUD_WEAPONS ); m_iHideHUD = ( HIDEHUD_HEALTH | HIDEHUD_FLASHLIGHT | HIDEHUD_WEAPONS );
m_afPhysicsFlags |= PFLAG_OBSERVER; m_afPhysicsFlags |= PFLAG_OBSERVER;
pev->effects = EF_NODRAW; pev->effects = EF_NODRAW;
pev->view_ofs = g_vecZero; pev->view_ofs = g_vecZero;
@ -1842,6 +1845,7 @@ void CBasePlayer::PreThink( void )
{ {
CBaseEntity *pTrain = CBaseEntity::Instance( pev->groundentity ); CBaseEntity *pTrain = CBaseEntity::Instance( pev->groundentity );
float vel; float vel;
int iGearId; // Vit_amiN: keeps the train control HUD in sync
if( !pTrain ) if( !pTrain )
{ {
@ -1882,10 +1886,12 @@ void CBasePlayer::PreThink( void )
pTrain->Use( this, this, USE_SET, (float)vel ); pTrain->Use( this, this, USE_SET, (float)vel );
} }
if( vel ) iGearId = TrainSpeed( pTrain->pev->speed, pTrain->pev->impulse );
if( iGearId != ( m_iTrain & 0x0F ) ) // Vit_amiN: speed changed
{ {
m_iTrain = TrainSpeed( (int)pTrain->pev->speed, pTrain->pev->impulse ); m_iTrain = iGearId;
m_iTrain |= TRAIN_ACTIVE|TRAIN_NEW; m_iTrain |= TRAIN_ACTIVE | TRAIN_NEW;
} }
} }
else if( m_iTrain & TRAIN_ACTIVE ) else if( m_iTrain & TRAIN_ACTIVE )
@ -2903,6 +2909,8 @@ void CBasePlayer::Precache( void )
if( gInitHUD ) if( gInitHUD )
m_fInitHUD = TRUE; m_fInitHUD = TRUE;
pev->fov = m_iFOV; // Vit_amiN: restore the FOV on level change or map/saved game load
} }
int CBasePlayer::Save( CSave &save ) int CBasePlayer::Save( CSave &save )
@ -3315,6 +3323,8 @@ void CBasePlayer::ForceClientDllUpdate( void )
{ {
m_iClientHealth = -1; m_iClientHealth = -1;
m_iClientBattery = -1; m_iClientBattery = -1;
m_iClientHideHUD = -1; // Vit_amiN: forcing to update
m_iClientFOV = -1; // Vit_amiN: force client weapons to be sent
m_iTrain |= TRAIN_NEW; // Force new train message. m_iTrain |= TRAIN_NEW; // Force new train message.
m_fWeapon = FALSE; // Force weapon send m_fWeapon = FALSE; // Force weapon send
m_fKnownItem = FALSE; // Force weaponinit messages. m_fKnownItem = FALSE; // Force weaponinit messages.
@ -3905,6 +3915,11 @@ void CBasePlayer::UpdateClientData( void )
WRITE_BYTE( m_iFlashBattery ); WRITE_BYTE( m_iFlashBattery );
MESSAGE_END(); MESSAGE_END();
// Vit_amiN: the geiger state could run out of sync, too
MESSAGE_BEGIN( MSG_ONE, gmsgGeigerRange, NULL, pev );
WRITE_BYTE( 0 );
MESSAGE_END();
InitStatusBar(); InitStatusBar();
} }
@ -3950,7 +3965,7 @@ void CBasePlayer::UpdateClientData( void )
m_iClientHealth = (int)pev->health; m_iClientHealth = (int)pev->health;
} }
if( pev->armorvalue != m_iClientBattery ) if( (int)pev->armorvalue != m_iClientBattery )
{ {
m_iClientBattery = (int)pev->armorvalue; m_iClientBattery = (int)pev->armorvalue;

2
dlls/playermonster.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: New version of the slider bar // Purpose: New version of the slider bar
// //

84
dlls/sound.cpp

@ -1458,14 +1458,6 @@ void EMIT_GROUPNAME_SUIT( edict_t *entity, const char *groupname )
// texture name to a material type. Play footstep sound based // texture name to a material type. Play footstep sound based
// on material type. // on material type.
int fTextureTypeInit = FALSE;
#define CTEXTURESMAX 512 // max number of textures loaded
int gcTextures = 0;
char grgszTextureName[CTEXTURESMAX][CBTEXTURENAMEMAX]; // texture names
char grgchTextureType[CTEXTURESMAX]; // parallel array of texture types
// open materials.txt, get size, alloc space, // open materials.txt, get size, alloc space,
// save in array. Only works first time called, // save in array. Only works first time called,
// ignored on subsequent calls. // ignored on subsequent calls.
@ -1517,87 +1509,17 @@ static char *memfgets( byte *pMemFile, int fileSize, int &filePos, char *pBuffer
return NULL; return NULL;
} }
void TEXTURETYPE_Init()
{
char buffer[512];
int i, j;
byte *pMemFile;
int fileSize, filePos = 0;
if( fTextureTypeInit )
return;
memset( &( grgszTextureName[0][0] ), 0, CTEXTURESMAX * CBTEXTURENAMEMAX );
memset( grgchTextureType, 0, CTEXTURESMAX );
gcTextures = 0;
pMemFile = g_engfuncs.pfnLoadFileForMe( "sound/materials.txt", &fileSize );
if( !pMemFile )
return;
memset( buffer, 0, 512 );
// for each line in the file...
while( memfgets( pMemFile, fileSize, filePos, buffer, 511 ) != NULL && ( gcTextures < CTEXTURESMAX) )
{
// skip whitespace
i = 0;
while( buffer[i] && isspace( buffer[i] ) )
i++;
if( !buffer[i] )
continue;
// skip comment lines
if( buffer[i] == '/' || !isalpha( buffer[i] ) )
continue;
// get texture type
grgchTextureType[gcTextures] = toupper( buffer[i++] );
// skip whitespace
while( buffer[i] && isspace( buffer[i] ) )
i++;
if( !buffer[i] )
continue;
// get sentence name
j = i;
while( buffer[j] && !isspace( buffer[j] ) )
j++;
if( !buffer[j] )
continue;
// null-terminate name and save in sentences array
j = Q_min( j, CBTEXTURENAMEMAX - 1 + i );
buffer[j] = 0;
strcpy( &( grgszTextureName[gcTextures++][0] ), &( buffer[i] ) );
}
g_engfuncs.pfnFreeFile( pMemFile );
fTextureTypeInit = TRUE;
}
// given texture name, find texture type // given texture name, find texture type
// if not found, return type 'concrete' // if not found, return type 'concrete'
// NOTE: this routine should ONLY be called if the // NOTE: this routine should ONLY be called if the
// current texture under the player changes! // current texture under the player changes!
extern "C" char PM_FindTextureType( char *name );
char TEXTURETYPE_Find( char *name ) char TEXTURETYPE_Find( char *name )
{ {
// CONSIDER: pre-sort texture names and perform faster binary search here return PM_FindTextureType(name);
for( int i = 0; i < gcTextures; i++ )
{
if( !strnicmp( name, &( grgszTextureName[i][0] ), CBTEXTURENAMEMAX - 1 ) )
return grgchTextureType[i];
}
return CHAR_TEX_CONCRETE;
} }
// play a strike sound based on the texture that was hit by the attack traceline. VecSrc/VecEnd are the // play a strike sound based on the texture that was hit by the attack traceline. VecSrc/VecEnd are the

2
dlls/squad.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: New version of the slider bar // Purpose: New version of the slider bar
// //

2
dlls/stats.cpp

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: New version of the slider bar // Purpose: New version of the slider bar
// //

2
dlls/util.cpp

@ -1192,7 +1192,7 @@ float UTIL_Approach( float target, float value, float speed )
float UTIL_ApproachAngle( float target, float value, float speed ) float UTIL_ApproachAngle( float target, float value, float speed )
{ {
target = UTIL_AngleMod( target ); target = UTIL_AngleMod( target );
value = UTIL_AngleMod( target ); value = UTIL_AngleMod( value );
float delta = target - value; float delta = target - value;

2
dlls/util.h

@ -40,7 +40,7 @@ extern globalvars_t *gpGlobals;
#define STRING(offset) (const char *)(gpGlobals->pStringBase + (int)offset) #define STRING(offset) (const char *)(gpGlobals->pStringBase + (int)offset)
#if !defined XASH_64BIT || defined(CLIENT_DLL) #if !defined XASH_64BIT || defined(CLIENT_DLL)
#define MAKE_STRING(str) ((int)str - (int)STRING(0)) #define MAKE_STRING(str) ((int)(long int)str - (int)(long int)STRING(0))
#else #else
static inline int MAKE_STRING(const char *szValue) static inline int MAKE_STRING(const char *szValue)
{ {

3
dlls/world.cpp

@ -500,9 +500,6 @@ void CWorld::Precache( void )
// ok to call this multiple times, calls after first are ignored. // ok to call this multiple times, calls after first are ignored.
SENTENCEG_Init(); SENTENCEG_Init();
// init texture type array from materials.txt
TEXTURETYPE_Init();
// the area based ambient sounds MUST be the first precache_sounds // the area based ambient sounds MUST be the first precache_sounds
// player precaches // player precaches
W_Precache(); // get weapon precaches W_Precache(); // get weapon precaches

14
engine/mobility_int.h

@ -65,13 +65,21 @@ typedef struct mobile_engfuncs_s
void (*pfnTouchSetClientOnly)( unsigned char state ); void (*pfnTouchSetClientOnly)( unsigned char state );
// Clean defaults list // Clean defaults list
void (*pfnTouchResetDefaultButtons)(); void (*pfnTouchResetDefaultButtons)( void );
// Draw scaled font for client
int (*pfnDrawScaledCharacter)( int x, int y, int number, int r, int g, int b, float scale );
void (*pfnSys_Warn)( const char *format, ... );
// Get native object for current platform.
// Pass NULL to arguments to receive an array of available objects or NULL if nothing
void *(*pfnGetNativeObject)( const char *obj );
void (*pfnSetCustomClientID)( const char *id );
// To be continued... // To be continued...
} mobile_engfuncs_t; } mobile_engfuncs_t;
extern mobile_engfuncs_t *gMobileEngfuncs;
// function exported from client // function exported from client
// returns 0 on no error otherwise error // returns 0 on no error otherwise error
typedef int (*pfnMobilityInterface)( mobile_engfuncs_t *gMobileEngfuncs ); typedef int (*pfnMobilityInterface)( mobile_engfuncs_t *gMobileEngfuncs );

2
pm_shared/pm_movevars.h

@ -1,4 +1,4 @@
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ //========= Copyright (c) 1996-2002, Valve LLC, All rights reserved. ============
// //
// Purpose: // Purpose:
// //

17
pm_shared/pm_shared.c

@ -168,24 +168,23 @@ void PM_InitTextureTypes()
char buffer[512]; char buffer[512];
int i, j; int i, j;
byte *pMemFile; byte *pMemFile;
int fileSize, filePos; int fileSize, filePos = 0;
static qboolean bTextureTypeInit = false; static qboolean bTextureTypeInit = false;
if( bTextureTypeInit ) if( bTextureTypeInit )
return; return;
memset(&( grgszTextureName[0][0] ), 0, CTEXTURESMAX * CBTEXTURENAMEMAX ); memset(&( grgszTextureName[0][0] ), 0, sizeof( grgszTextureName ) );
memset( grgchTextureType, 0, CTEXTURESMAX ); memset( grgchTextureType, 0, sizeof( grgchTextureType ) );
gcTextures = 0; gcTextures = 0;
fileSize = pmove->COM_FileSize( "sound/materials.txt" ); pMemFile = pmove->COM_LoadFile( "sound/materials.txt", 5, &fileSize );
pMemFile = pmove->COM_LoadFile( "sound/materials.txt", 5, NULL );
if( !pMemFile ) if( !pMemFile )
return; return;
memset( buffer, 0, 512 ); memset( buffer, 0, sizeof( buffer ) );
filePos = 0;
// for each line in the file... // for each line in the file...
while( pmove->memfgets( pMemFile, fileSize, &filePos, buffer, 511 ) != NULL && (gcTextures < CTEXTURESMAX ) ) while( pmove->memfgets( pMemFile, fileSize, &filePos, buffer, 511 ) != NULL && (gcTextures < CTEXTURESMAX ) )
{ {
@ -3312,8 +3311,8 @@ void PM_Move( struct playermove_s *ppmove, int server )
pmove->flags &= ~FL_ONGROUND; pmove->flags &= ~FL_ONGROUND;
} }
// In single player, reset friction after each movement to FrictionModifier Triggers work still. // Reset friction after each movement to FrictionModifier Triggers work still.
if( !pmove->multiplayer && ( pmove->movetype == MOVETYPE_WALK ) ) if( pmove->movetype == MOVETYPE_WALK )
{ {
pmove->friction = 1.0f; pmove->friction = 1.0f;
} }

1
utils/false_vgui/include/VGUI_Panel.h

@ -219,7 +219,6 @@ private:
bool _paintBorderEnabled; bool _paintBorderEnabled;
bool _paintBackgroundEnabled; bool _paintBackgroundEnabled;
bool _paintEnabled; bool _paintEnabled;
friend class Panel;
friend class App; friend class App;
friend class SurfaceBase; friend class SurfaceBase;
friend class Image; friend class Image;

845
utils/makefont/makefont.cpp

@ -0,0 +1,845 @@
/***
*
* 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.
*
****/
#define _NOENUMQBOOL
#include <windows.h>
extern "C"
{
#include "cmdlib.h"
#include "wadlib.h"
}
#include "qfont.h"
#define DEFAULT_FONT "Arial"
#define FONT_TAG 6 // Font's are the 6th tag after the TYP_LUMPY base ( 64 )...i.e., type == 70
BOOL bItalic = FALSE;
BOOL bBold = FALSE;
BOOL bUnderline = FALSE;
char fontname[ 256 ];
int pointsize[3] = { 9, 11, 15 };
/*
=================
zeromalloc
Allocates and zeroes memory
=================
*/
void *zeromalloc( size_t size )
{
unsigned char *pbuffer;
pbuffer = ( unsigned char * )malloc( size );
if ( !pbuffer )
{
printf( "Failed on allocation of %i bytes", size );
exit( -1 );
}
memset( pbuffer, 0, size );
return ( void * )pbuffer;
}
/*
=================
Draw_SetupConsolePalette
Set's the palette to full brightness ( 192 ) and
set's up palette entry 0 -- black
=================
*/
void Draw_SetupConsolePalette( unsigned char *pal )
{
unsigned char *pPalette;
int i;
pPalette = pal;
*(short *)pPalette = 3 * 256;
pPalette += sizeof( short );
for ( i = 0; i < 256; i++ )
{
pPalette[3 * i + 0 ] = i;
pPalette[3 * i + 1 ] = i;
pPalette[3 * i + 2 ] = i;
}
// Set palette zero correctly
pPalette[ 0 ] = 0;
pPalette[ 1 ] = 0;
pPalette[ 2 ] = 0;
}
//DJXX added for debugging
BOOL WriteDIB(LPTSTR szFile, HANDLE hDIB)
{
BITMAPFILEHEADER hdr;
LPBITMAPINFOHEADER lpbi;
if (!hDIB)
return FALSE;
FILE *file;
file = SafeOpenWrite(szFile);
lpbi = (LPBITMAPINFOHEADER)hDIB;
int nColors = 1 << lpbi->biBitCount;
// Fill in the fields of the file header
hdr.bfType = ((WORD)('M' << 8) | 'B'); // is always "BM"
hdr.bfSize = GlobalSize(hDIB) + sizeof(hdr);
printf("WriteDIB. Error code = %i\n",GetLastError());
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = (DWORD)(sizeof(hdr)+lpbi->biSize +
nColors * sizeof(RGBQUAD));
// Write the file header
SafeWrite(file, &hdr, sizeof(hdr));
// Write the DIB header and the bits
SafeWrite(file, lpbi, GlobalSize(hDIB));
fclose(file);
return TRUE;
}
/*
=================
CreateProportionalConsoleFont
Renders TT font into memory dc and creates appropriate qfont_t structure
=================
*/
//DJXX: New version, draws chararacters closely to each other without spaces
// YWB: Sigh, VC 6.0's global optimizer causes weird stack fixups in release builds. Disable the globabl optimizer for this function.
#pragma optimize( "g", off )
qfont_t *CreateProportionalConsoleFont(char *pszFont, int nPointSize, BOOL bItalic, BOOL bUnderline, BOOL bBold, int *outsize)
{
HDC hdc;
HDC hmemDC;
HBITMAP hbm, oldbm;
RECT rc;
HFONT fnt, oldfnt;
TEXTMETRIC tm;
int startchar = 32;
int c;
int i, j;
int x, y;
int nScans;
unsigned char *bits;
BITMAPINFO tempbmi;
BITMAPINFO *pbmi;
BITMAPINFOHEADER *pbmheader;
unsigned char *pqdata;
unsigned char *pCur;
int x1, y1;
unsigned char *pPalette;
qfont_t *pqf = NULL;
int fullsize;
int w = 16;
//int h = (128 - 32) / 16;
int h = (256 - 32) / 16;
int charheight = nPointSize + 5;
int charwidth = 16;//now used only for calculating width of wad texture
int fontcharwidth;
int edge = 1;
RECT rcChar;
boolean lShadow = true;//draw shadow instead of outline
// Create the font
fnt = CreateFont(-nPointSize, 0, 0, 0, bBold ? FW_HEAVY : FW_MEDIUM, bItalic, bUnderline, 0, /*ANSI_CHARSET*/DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, VARIABLE_PITCH | FF_DONTCARE, pszFont);
bits = NULL;
fullsize = sizeof(qfont_t)-4 + (/*128*/256 * w * charwidth) + sizeof(short)+768 + 64;
// Store off final size
*outsize = fullsize;
pqf = (qfont_t *)zeromalloc(fullsize);
pqdata = (unsigned char *)pqf + sizeof(qfont_t)-4;
pPalette = pqdata + (/*128*/256 * w * charwidth);
// Configure palette
Draw_SetupConsolePalette(pPalette);
hdc = GetDC(NULL);
hmemDC = CreateCompatibleDC(hdc);
oldfnt = (HFONT)SelectObject(hmemDC, fnt);
if (GetTextMetrics(hmemDC, &tm))
{
fontcharwidth = tm.tmMaxCharWidth;
if (fontcharwidth % 2)//hack: on odd values of fontcharwidth, bitmaps pixel check gives false triggering
fontcharwidth++;
}
else {
fontcharwidth = charwidth;
}
if (lShadow)
charheight += edge;//adding 1 pixel to bottom for shadowing
rc.top = 0;
rc.left = 0;
rc.right = fontcharwidth * w;
rc.bottom = charheight * h;
hbm = CreateBitmap(fontcharwidth * w, charheight * h, 1, 1, NULL);
oldbm = (HBITMAP)SelectObject(hmemDC, hbm);
SetTextColor(hmemDC, 0x00ffffff);
SetBkMode(hmemDC, TRANSPARENT);
// Paint black background
FillRect(hmemDC, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));
// Draw character set into memory DC
for (j = 0; j < h; j++)
{
for (i = 0; i < w; i++)
{
x = i * fontcharwidth;
y = j * charheight;
c = (unsigned char)(startchar + j * w + i);
// Only draw printable characters, of course
//if ( isprint( c ) && c <= 127 )
{
// Draw it.
rcChar.left = x + 1;
rcChar.top = y + 1;
rcChar.right = x + fontcharwidth - 1;
rcChar.bottom = y + charheight - 1;
DrawText(hmemDC, (char *)&c, 1, &rcChar, DT_NOPREFIX | DT_LEFT);
}
}
}
// Now turn the qfont into raw format
memset(&tempbmi, 0, sizeof(BITMAPINFO));
pbmheader = (BITMAPINFOHEADER *)&tempbmi;
pbmheader->biSize = sizeof(BITMAPINFOHEADER);
pbmheader->biWidth = w * fontcharwidth;
pbmheader->biHeight = -h * charheight;
pbmheader->biPlanes = 1;
pbmheader->biBitCount = 1;
pbmheader->biCompression = BI_RGB;
// Find out how big the bitmap is
nScans = GetDIBits(hmemDC, hbm, 0, h * charheight, NULL, &tempbmi, DIB_RGB_COLORS);
// Allocate space for all bits
pbmi = (BITMAPINFO *)zeromalloc(sizeof (BITMAPINFOHEADER)+2 * sizeof(RGBQUAD)+pbmheader->biSizeImage);
memcpy(pbmi, &tempbmi, sizeof(BITMAPINFO));
bits = (unsigned char *)pbmi + sizeof(BITMAPINFOHEADER)+2 * sizeof(RGBQUAD);
// Now read in bits
nScans = GetDIBits(hmemDC, hbm, 0, h * charheight, bits, pbmi, DIB_RGB_COLORS);
if (nScans > 0)
{
#if 0 //for debugging
char sz[128];//DJXX write dib to file
sprintf(sz, "font_%s_%i.bmp", pszFont, nPointSize);
WriteDIB(sz, pbmi);
#endif
// Now convert to proper raw format
//
// Now get results from dib
pqf->height = /*128*/256; // Always set to 128
pqf->width = charwidth;
pqf->rowheight = charheight;
pqf->rowcount = h;
pCur = pqdata;
// Set everything to index 255 ( 0xff ) == transparent
memset(pCur, 0xFF, w * charwidth * pqf->height);
int k = 0, dest_x = 0, dest_y = 0;
for (j = 0; j < h; j++)
for (i = 0; i < w; i++)
{
int rightmost, leftmost, realcharwidth;
x = i * fontcharwidth;
y = j * charheight;
//c = (char)( startchar + j * w + i ); here was memory bug
c = (unsigned char)(startchar + j * w + i);
rightmost = 0;
leftmost = fontcharwidth;
//Calculate real width of the character
for (y1 = 0; y1 < charheight; y1++)
for (x1 = 0; x1 < fontcharwidth; x1++)
{
int src_offset;
src_offset = (y + y1) * w * fontcharwidth + x + x1;
if (bits[src_offset >> 3] & (1 << (7 - src_offset & 7)))//on odd values of fontcharwidth this check gives false triggering
{
if (x1 > rightmost)
rightmost = x1;
if (x1 < leftmost)
leftmost = x1;
}
}
if (leftmost > rightmost)//empty characters
{
leftmost = 0;
rightmost = 7;
} else {
rightmost += edge;
if (!lShadow)
leftmost -= edge;
}
realcharwidth = rightmost - leftmost + 1;
pqf->fontinfo[c].charwidth = realcharwidth;
if (dest_x + realcharwidth >= w * charwidth)//if it not fits on current line then carry it to the next line
{
dest_x = 0;
k++;
}
dest_y = k * charheight;
pqf->fontinfo[c].startoffset = dest_y * w * charwidth + dest_x;
if (lShadow)
{
int shift = edge;
//Draw shadow by shifting character to 1 pixel right and down
for (y1 = 0; y1 < charheight; y1++)
for (x1 = 0; x1 < realcharwidth; x1++)
{
int src_offset, dest_offset;
src_offset = (y + y1) * w * fontcharwidth + x + x1 + leftmost;
dest_offset = (dest_y + shift + y1) * w * charwidth + (dest_x + shift + x1);
// Dest
pCur = pqdata + dest_offset;
if (bits[src_offset >> 3] & (1 << (7 - src_offset & 7)))
{
// Near Black
//pCur[0] = 32;
pCur[0] = 0;//full black so shadow remains black even it's coloured text
}
}
}
else
{
// Put black pixels below and to the right of each pixel(outline)
for (y1 = edge; y1 < charheight - edge; y1++)
for (x1 = 0; x1 < realcharwidth; x1++)
{
int src_offset, dest_offset;
int xx0, yy0;
dest_offset = (dest_y + y1) * w * charwidth + (dest_x + x1);
// Dest
pCur = pqdata + dest_offset;
for (xx0 = -edge; xx0 <= edge; xx0++)
for (yy0 = -edge; yy0 <= edge; yy0++)
{
src_offset = (y + y1 + yy0) * w * fontcharwidth + x + x1 + xx0 + leftmost;//adding shift
if (bits[src_offset >> 3] & (1 << (7 - src_offset & 7)))
{
// Near Black
pCur[0] = 32;
}
}
}
}
// Now copy in the actual font pixels
for (y1 = 0; y1 < charheight; y1++)
for (x1 = 0; x1 < realcharwidth; x1++)
{
int src_offset, dest_offset;
src_offset = (y + y1) * w * fontcharwidth + x + x1 + leftmost;
dest_offset = (dest_y + y1) * w * charwidth + (dest_x + x1);
// Dest
pCur = pqdata + dest_offset;
if (bits[src_offset >> 3] & (1 << (7 - src_offset & 7)))
{
pCur[0] = 192;
}
}
dest_x += realcharwidth;
}
}
// Free memory bits
free(pbmi);
SelectObject(hmemDC, oldfnt);
DeleteObject(fnt);
SelectObject(hmemDC, oldbm);
DeleteObject(hbm);
DeleteDC(hmemDC);
ReleaseDC(NULL, hdc);
return pqf;
}
#pragma optimize( "g", on )
/*
=================
CreateConsoleFont
Renders TT font into memory dc and creates appropriate qfont_t structure
=================
*/
//DJXX: original version, just added drawing of locale characters and fixed memory bug.
// YWB: Sigh, VC 6.0's global optimizer causes weird stack fixups in release builds. Disable the globabl optimizer for this function.
#pragma optimize( "g", off )
qfont_t *CreateConsoleFont( char *pszFont, int nPointSize, BOOL bItalic, BOOL bUnderline, BOOL bBold, int *outsize )
{
HDC hdc;
HDC hmemDC;
HBITMAP hbm, oldbm;
RECT rc;
HFONT fnt, oldfnt;
int startchar = 32;
int c;
int i, j;
int x, y;
int nScans;
unsigned char *bits;
BITMAPINFO tempbmi;
BITMAPINFO *pbmi;
BITMAPINFOHEADER *pbmheader;
unsigned char *pqdata;
unsigned char *pCur;
int x1, y1;
unsigned char *pPalette;
qfont_t *pqf = NULL;
int fullsize;
int w = 16;
//int h = (128-32)/16;
int h = (256 - 32) / 16;
int charheight = nPointSize + 5;
int charwidth = 16;
RECT rcChar;
// Create the font
fnt = CreateFont( -nPointSize, 0, 0, 0, bBold ? FW_HEAVY : FW_MEDIUM, bItalic, bUnderline, 0, /*ANSI_CHARSET*/DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, VARIABLE_PITCH | FF_DONTCARE, pszFont );
bits = NULL;
fullsize = sizeof( qfont_t ) - 4 + ( /*128*/256 * w * charwidth ) + sizeof(short) + 768 + 64;
// Store off final size
*outsize = fullsize;
pqf = ( qfont_t * )zeromalloc( fullsize );
pqdata = (unsigned char *)pqf + sizeof( qfont_t ) - 4;
pPalette = pqdata + ( /*128*/256 * w * charwidth);
// Configure palette
Draw_SetupConsolePalette( pPalette );
hdc = GetDC( NULL );
hmemDC = CreateCompatibleDC( hdc );
rc.top = 0;
rc.left = 0;
rc.right = charwidth * w;
rc.bottom = charheight * h;
hbm = CreateBitmap( charwidth * w, charheight * h, 1, 1, NULL );
oldbm = (HBITMAP)SelectObject( hmemDC, hbm );
oldfnt = (HFONT)SelectObject( hmemDC, fnt );
SetTextColor( hmemDC, 0x00ffffff );
SetBkMode( hmemDC, TRANSPARENT );
// Paint black background
FillRect( hmemDC, &rc, (HBRUSH)GetStockObject( BLACK_BRUSH ) );
// Draw character set into memory DC
for ( j = 0; j < h; j++ )
{
for ( i = 0; i < w; i++ )
{
x = i * charwidth;
y = j * charheight;
c = (unsigned char)( startchar + j * w + i );
// Only draw printable characters, of course
//if ( isprint( c ) && c <= 127 )
{
// Draw it.
rcChar.left = x + 1;
rcChar.top = y + 1;
rcChar.right = x + charwidth - 1;
rcChar.bottom = y + charheight - 1;
DrawText( hmemDC, (char *)&c, 1, &rcChar, DT_NOPREFIX | DT_LEFT );
}
}
}
// Now turn the qfont into raw format
memset( &tempbmi, 0, sizeof( BITMAPINFO ) );
pbmheader = ( BITMAPINFOHEADER * )&tempbmi;
pbmheader->biSize = sizeof( BITMAPINFOHEADER );
pbmheader->biWidth = w * charwidth;
pbmheader->biHeight = -h * charheight;
pbmheader->biPlanes = 1;
pbmheader->biBitCount = 1;
pbmheader->biCompression = BI_RGB;
// Find out how big the bitmap is
nScans = GetDIBits( hmemDC, hbm, 0, h * charheight, NULL, &tempbmi, DIB_RGB_COLORS );
// Allocate space for all bits
pbmi = ( BITMAPINFO * )zeromalloc( sizeof ( BITMAPINFOHEADER ) + 2 * sizeof( RGBQUAD ) + pbmheader->biSizeImage );
memcpy( pbmi, &tempbmi, sizeof( BITMAPINFO ) );
bits = ( unsigned char * )pbmi + sizeof( BITMAPINFOHEADER ) + 2 * sizeof( RGBQUAD );
// Now read in bits
nScans = GetDIBits( hmemDC, hbm, 0, h * charheight, bits, pbmi, DIB_RGB_COLORS );
if ( nScans > 0 )
{
#if 0 //for debugging
char sz[128];//DJXX write dib to file
sprintf(sz, "font_%s_%i.bmp", pszFont, nPointSize);
WriteDIB(sz, pbmi);
#endif
// Now convert to proper raw format
//
// Now get results from dib
pqf->height = /*128*/256; // Always set to 128
pqf->width = charwidth;
pqf->rowheight = charheight;
pqf->rowcount = h;
pCur = pqdata;
// Set everything to index 255 ( 0xff ) == transparent
memset( pCur, 0xFF, w * charwidth * pqf->height );
for ( j = 0; j < h; j++ )
{
for ( i = 0; i < w; i++ )
{
int edge = 1;
int bestwidth;
x = i * charwidth;
y = j * charheight;
//c = (char)( startchar + j * w + i ); here was memory bug
c = (unsigned char)(startchar + j * w + i);
pqf->fontinfo[ c ].charwidth = charwidth;
pqf->fontinfo[ c ].startoffset = y * w * charwidth + x;
bestwidth = 0;
// In this first pass, place the black drop shadow so characters draw ok in the engine against
// most backgrounds.
// YWB: FIXME, apply a box filter and enable blending?
#if 0//DJXX: we already did that for a whole image by memset
// Make it all transparent for starters
for ( y1 = 0; y1 < charheight; y1++ )
{
for ( x1 = 0; x1 < charwidth; x1++ )
{
int offset;
offset = ( y + y1 ) * w * charwidth + x + x1 ;
// Dest
pCur = pqdata + offset;
// Assume transparent
pCur[0] = 255;
}
}
#endif
// Put black pixels below and to the right of each pixel
for ( y1 = edge; y1 < charheight - edge; y1++ )
{
for ( x1 = 0; x1 < charwidth; x1++ )
{
int offset;
int srcoffset;
int xx0, yy0;
offset = ( y + y1 ) * w * charwidth + x + x1 ;
// Dest
pCur = pqdata + offset;
for ( xx0 = -edge; xx0 <= edge; xx0++ )
{
for ( yy0 = -edge; yy0 <= edge; yy0++ )
{
srcoffset = ( y + y1 + yy0 ) * w * charwidth + x + x1 + xx0;
if ( bits[ srcoffset >> 3 ] & ( 1 << ( 7 - srcoffset & 7 ) ) )
{
// Near Black
pCur[0] = 32;
}
}
}
}
}
// Now copy in the actual font pixels
for ( y1 = 0; y1 < charheight; y1++ )
{
for ( x1 = 0; x1 < charwidth; x1++ )
{
int offset;
offset = ( y + y1 ) * w * charwidth + x + x1;
// Dest
pCur = pqdata + offset;
if ( bits[ offset >> 3 ] & ( 1 << ( 7 - offset & 7 ) ) )
{
if ( x1 > bestwidth )
{
bestwidth = x1;
}
// Full color
// FIXME: Enable true palette support in engine?
pCur[0] = 192;
}
}
}
// bestwidth += 1;
/*
// Now blend it
for ( y1 = 0; y1 < charheight; y1++ )
{
for ( x1 = 0; x1 < charwidth; x1++ )
{
int offset;
offset = ( y + y1 ) * w * charwidth + x + x1;
// Dest
pCur = pqdata + offset;
if ( bits[ offset >> 3 ] & ( 1 << ( 7 - offset & 7 ) ) )
{
if ( x1 > bestwidth )
{
bestwidth = x1;
}
// Full color
// FIXME: Enable true palette support in engine?
pCur[0] = 192;
}
}
}
*/
// Space character width
if ( c == 32 )
{
bestwidth = 8;
}
else
{
// Small characters needs can be padded a bit so they don't run into each other
if ( bestwidth <= 14 )
{
bestwidth += 2;
}
}
// Store off width
pqf->fontinfo[ c ].charwidth = bestwidth;
}
}
}
// Free memory bits
free ( pbmi );
SelectObject( hmemDC, oldfnt );
DeleteObject( fnt );
SelectObject( hmemDC, oldbm );
DeleteObject( hbm );
DeleteDC( hmemDC );
ReleaseDC( NULL, hdc );
return pqf;
}
#pragma optimize( "g", on )
/*
=================
main
=================
*/
int main(int argc, char* argv[])
{
int i;
DWORD start, end;
char destfile[1024];
char sz[ 32 ];
int outsize[ 3 ];
qfont_t *fonts[ 3 ];
strcpy( fontname, DEFAULT_FONT );
printf("makefont.exe Version 2.0 by valve and DJXX (%s)\n", __DATE__ );
printf ("----- Creating Console Font ----\n");
for (i=1 ; i<argc ; i++)
{
if (!strcmp(argv[i],"-font"))
{
strcpy( fontname, argv[i+1] );
i++;
}
else if (!strcmp(argv[i],"-pointsizes"))
{
if ( i + 3 >= argc )
{
Error( "Makefont: Insufficient point sizes specified\n" );
}
pointsize[0] = atoi( argv[i+1] );
pointsize[1] = atoi( argv[i+2] );
pointsize[2] = atoi( argv[i+3] );
i += 3;
}
else if (!strcmp(argv[i],"-italic"))
{
bItalic = TRUE;
printf ( "italic set\n");
}
else if (!strcmp(argv[i],"-bold"))
{
bBold = TRUE;
printf ( "bold set\n");
}
else if (!strcmp(argv[i],"-underline"))
{
bUnderline = TRUE;
printf ( "underline set\n");
}
else if ( argv[i][0] == '-' )
{
Error ("Unknown option \"%s\"", argv[i]);
}
else
break;
}
if ( i != argc - 1 )
{
Error ("usage: makefont [-font \"fontname\"] [-italic] [-underline] [-bold] [-pointsizes sm med lg] outfile");
}
printf( "Creating %i, %i, and %i point %s fonts\n", pointsize[0], pointsize[1], pointsize[2], fontname );
start = timeGetTime();
// Create the fonts
for ( i = 0 ; i < 3; i++ )
{
fonts[ i ] = CreateProportionalConsoleFont( fontname, pointsize[i], bItalic, bUnderline, bBold, &outsize[ i ] );
//fonts[i] = CreateConsoleFont(fontname, pointsize[i], bItalic, bUnderline, bBold, &outsize[i]);
}
// Create wad file
strcpy (destfile, argv[argc - 1]);
StripExtension (destfile);
DefaultExtension (destfile, ".wad");
NewWad( destfile, false );
// Add fonts as lumps
for ( i = 0; i < 3; i++ )
{
sprintf( sz, "font%i", i );
AddLump( sz, fonts[ i ], outsize[ i ], TYP_LUMPY + FONT_TAG, false );
}
// Store results as a WAD3
// NOTE: ( should be named fonts.wad in the valve\ subdirectory )
WriteWad( 3 );
// Clean up memory
for ( i = 0 ; i < 3; i++ )
{
free( fonts[ i ] );
}
end = timeGetTime ();
printf ( "%5.5f seconds elapsed\n", (float)( end - start )/1000.0 );
// Display for a second since it might not be running from command prompt
Sleep( 1000 );
return 0;
}

138
utils/makefont/makefont.dsp

@ -0,0 +1,138 @@
# Microsoft Developer Studio Project File - Name="makefont" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=makefont - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "makefont.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "makefont.mak" CFG="makefont - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "makefont - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "makefont - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "makefont - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /W3 /GX /Zi /O2 /I "../../common" /I "../common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX"qfont.h" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:console /debug /machine:I386
# Begin Special Build Tool
TargetPath=.\Release\makefont.exe
SOURCE="$(InputPath)"
PostBuild_Desc=Copyint to valve\
PostBuild_Cmds=xcopy $(TargetPath) ..\..\..\valve /r /i
# End Special Build Tool
!ELSEIF "$(CFG)" == "makefont - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../common" /I "../common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX"qfont.h" /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# Begin Special Build Tool
TargetPath=.\Debug\makefont.exe
SOURCE="$(InputPath)"
PostBuild_Desc=Copyint to valve\
PostBuild_Cmds=xcopy $(TargetPath) ..\..\..\valve /r /i
# End Special Build Tool
!ENDIF
# Begin Target
# Name "makefont - Win32 Release"
# Name "makefont - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\common\cmdlib.c
# End Source File
# Begin Source File
SOURCE=.\makefont.cpp
# End Source File
# Begin Source File
SOURCE=..\common\wadlib.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\common\cmdlib.h
# End Source File
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
# Begin Source File
SOURCE=..\common\wadlib.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# Begin Source File
SOURCE=.\ReadMe.txt
# End Source File
# End Target
# End Project

3
utils/makefont/winebuild.sh

@ -0,0 +1,3 @@
#!/bin/sh
winegcc -g -m32 makefont.cpp ../common/wadlib.c ../common/cmdlib.c -I../common/ -I../../common/ -mwindows -mno-cygwin -lwinmm -fno-stack-protector
Loading…
Cancel
Save