mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	Fix lots of code for clang-cl compatibility
This commit is contained in:
		
							parent
							
								
									e22d14bd9d
								
							
						
					
					
						commit
						0dc337c9a5
					
				
					 45 changed files with 271 additions and 221 deletions
				
			
		| 
						 | 
				
			
			@ -16,7 +16,6 @@
 | 
			
		|||
 | 
			
		||||
#include "acsvm.hpp"
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
#include "../doomtype.h"
 | 
			
		||||
#include "../doomdef.h"
 | 
			
		||||
#include "../doomstat.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +23,6 @@ extern "C" {
 | 
			
		|||
#include "../r_defs.h"
 | 
			
		||||
#include "../r_state.h"
 | 
			
		||||
#include "../p_spec.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace srb2::acs {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,13 +10,7 @@
 | 
			
		|||
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#define INT32 __int32
 | 
			
		||||
#else
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#define INT32 int32_t
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +141,7 @@
 | 
			
		|||
** CHANGE that if ptrdiff_t is not adequate on your machine. (On most
 | 
			
		||||
** machines, ptrdiff_t gives a good choice between int or long.)
 | 
			
		||||
*/
 | 
			
		||||
#define LUA_INTEGER	INT32
 | 
			
		||||
#define LUA_INTEGER	int32_t
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -418,9 +412,9 @@
 | 
			
		|||
** longs.) Probably you do not need to change this.
 | 
			
		||||
*/
 | 
			
		||||
#if LUAI_BITSINT >= 32
 | 
			
		||||
#define LUAI_UINT32	unsigned int
 | 
			
		||||
#define LUAI_INT32	int
 | 
			
		||||
#define LUAI_MAXINT32	INT_MAX
 | 
			
		||||
#define LUAI_UINT32	uint32_t
 | 
			
		||||
#define LUAI_INT32	int32_t
 | 
			
		||||
#define LUAI_MAXINT32	INT32_MAX
 | 
			
		||||
#define LUAI_UMEM	size_t
 | 
			
		||||
#define LUAI_MEM	ptrdiff_t
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -509,13 +503,13 @@
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
//#define LUA_NUMBER_DOUBLE
 | 
			
		||||
#define LUA_NUMBER	INT32
 | 
			
		||||
#define LUA_NUMBER	int32_t
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ LUAI_UACNUMBER is the result of an 'usual argument conversion'
 | 
			
		||||
@* over a number.
 | 
			
		||||
*/
 | 
			
		||||
#define LUAI_UACNUMBER	INT32
 | 
			
		||||
#define LUAI_UACNUMBER int32_t
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1238,90 +1238,93 @@ static JsonValue parse_number(const Token& token)
 | 
			
		|||
		throw JsonParseError("only sign present on number");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const char* integral_start = s.begin();
 | 
			
		||||
	const char* integral_end;
 | 
			
		||||
	const char* decimal = nullptr;
 | 
			
		||||
	while (!s.empty())
 | 
			
		||||
	std::string_view::const_iterator integral_start = s.begin();
 | 
			
		||||
	std::string_view::const_iterator integral_end;
 | 
			
		||||
	bool decimal_found = false;
 | 
			
		||||
	std::string_view::const_iterator decimal;
 | 
			
		||||
	size_t pos = 0;
 | 
			
		||||
	while (pos < s.size())
 | 
			
		||||
	{
 | 
			
		||||
		if (s[0] == '.')
 | 
			
		||||
		if (s[pos] == '.')
 | 
			
		||||
		{
 | 
			
		||||
			decimal = s.begin();
 | 
			
		||||
			integral_end = s.begin();
 | 
			
		||||
			s.remove_prefix(1);
 | 
			
		||||
			decimal_found = true;
 | 
			
		||||
			decimal = std::next(s.begin(), pos);
 | 
			
		||||
			integral_end = std::next(s.begin(), pos);
 | 
			
		||||
			pos += 1;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		else if (s[0] < '0' || s[0] > '9')
 | 
			
		||||
		else if (s[pos] < '0' || s[pos] > '9')
 | 
			
		||||
		{
 | 
			
		||||
			integral_end = s.begin() - 1;
 | 
			
		||||
			integral_end = std::next(s.begin(), pos - 1);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		integral_end = s.begin() + 1;
 | 
			
		||||
		s.remove_prefix(1);
 | 
			
		||||
		integral_end = std::next(s.begin(), pos + 1);
 | 
			
		||||
		pos += 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const char* decimal_start = s.end();
 | 
			
		||||
	const char* decimal_end = s.end();
 | 
			
		||||
	const char* exponent_start = s.end();
 | 
			
		||||
	const char* exponent_end = s.end();
 | 
			
		||||
	std::string_view::const_iterator decimal_start = s.end();
 | 
			
		||||
	std::string_view::const_iterator decimal_end = s.end();
 | 
			
		||||
	std::string_view::const_iterator exponent_start = s.end();
 | 
			
		||||
	std::string_view::const_iterator exponent_end = s.end();
 | 
			
		||||
	bool should_have_exponent = false;
 | 
			
		||||
	if (decimal != nullptr && (decimal + 1) < s.end())
 | 
			
		||||
	if (decimal_found && (decimal + 1) < s.end())
 | 
			
		||||
	{
 | 
			
		||||
		decimal_start = decimal + 1;
 | 
			
		||||
	}
 | 
			
		||||
	while (!s.empty())
 | 
			
		||||
	while (pos < s.size())
 | 
			
		||||
	{
 | 
			
		||||
		// ingest decimal
 | 
			
		||||
		if (s[0] == 'E' || s[0] == 'e')
 | 
			
		||||
		if (s[pos] == 'E' || s[pos] == 'e')
 | 
			
		||||
		{
 | 
			
		||||
			if (decimal_start != s.end()) decimal_end = s.begin();
 | 
			
		||||
			exponent_start = s.begin() + 1;
 | 
			
		||||
			exponent_start = std::next(s.begin(), pos + 1);
 | 
			
		||||
			should_have_exponent = true;
 | 
			
		||||
			s.remove_prefix(1);
 | 
			
		||||
			pos += 1;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		else if ((s[0] < '0' || s[0] > '9') && s[0] != '+' && s[0] != '-')
 | 
			
		||||
		else if ((s[pos] < '0' || s[pos] > '9') && s[pos] != '+' && s[pos] != '-')
 | 
			
		||||
		{
 | 
			
		||||
			throw JsonParseError("invalid character after decimal");
 | 
			
		||||
		}
 | 
			
		||||
		decimal_end = s.begin() + 1;
 | 
			
		||||
		s.remove_prefix(1);
 | 
			
		||||
		decimal_end = std::next(s.begin(), pos + 1);
 | 
			
		||||
		pos += 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bool exponent_negative = false;
 | 
			
		||||
 | 
			
		||||
	if (should_have_exponent)
 | 
			
		||||
	{
 | 
			
		||||
		if (s.empty())
 | 
			
		||||
		if (pos >= s.size())
 | 
			
		||||
		{
 | 
			
		||||
			throw JsonParseError("exponent started but not specified");
 | 
			
		||||
		}
 | 
			
		||||
		bool exponent_was_signed = false;
 | 
			
		||||
		while (!s.empty())
 | 
			
		||||
		{
 | 
			
		||||
			if (s[0] == '-')
 | 
			
		||||
			if (s[pos] == '-')
 | 
			
		||||
			{
 | 
			
		||||
				if (exponent_was_signed) throw JsonParseError("multiple signs on exponent");
 | 
			
		||||
				exponent_negative = true;
 | 
			
		||||
				exponent_start++;
 | 
			
		||||
				exponent_was_signed = true;
 | 
			
		||||
				s.remove_prefix(1);
 | 
			
		||||
				pos += 1;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			else if (s[0] == '+')
 | 
			
		||||
			else if (s[pos] == '+')
 | 
			
		||||
			{
 | 
			
		||||
				if (exponent_was_signed) throw JsonParseError("multiple signs on exponent");
 | 
			
		||||
				exponent_start++;
 | 
			
		||||
				exponent_was_signed = true;
 | 
			
		||||
				s.remove_prefix(1);
 | 
			
		||||
				pos += 1;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (s[0] < '0' || s[0] > '9')
 | 
			
		||||
			if (s[pos] < '0' || s[pos] > '9')
 | 
			
		||||
			{
 | 
			
		||||
				throw JsonParseError("invalid character after exponent");
 | 
			
		||||
			}
 | 
			
		||||
			exponent_end = s.begin() + 1;
 | 
			
		||||
			s.remove_prefix(1);
 | 
			
		||||
			exponent_end = std::next(s.begin(), pos + 1);
 | 
			
		||||
			pos += 1;
 | 
			
		||||
		}
 | 
			
		||||
		if ((exponent_end - exponent_start) == 0)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -1329,9 +1332,21 @@ static JsonValue parse_number(const Token& token)
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	std::string_view integral_view { integral_start, (size_t)(integral_end - integral_start) };
 | 
			
		||||
	std::string_view decimal_view { decimal_start, (size_t)(decimal_end - decimal_start) };
 | 
			
		||||
	std::string_view exponent_view { exponent_start, (size_t)(exponent_end - exponent_start) };
 | 
			
		||||
	std::string_view integral_view = "";
 | 
			
		||||
	if (integral_start != s.end())
 | 
			
		||||
	{
 | 
			
		||||
		integral_view = std::string_view { &*integral_start, (size_t)(integral_end - integral_start) };
 | 
			
		||||
	}
 | 
			
		||||
	std::string_view decimal_view = "";
 | 
			
		||||
	if (decimal_start != s.end())
 | 
			
		||||
	{
 | 
			
		||||
		decimal_view = std::string_view { &*decimal_start, (size_t)(decimal_end - decimal_start) };
 | 
			
		||||
	}
 | 
			
		||||
	std::string_view exponent_view = "";
 | 
			
		||||
	if (exponent_start != s.end())
 | 
			
		||||
	{
 | 
			
		||||
		std::string_view { &*exponent_start, (size_t)(exponent_end - exponent_start) };
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (should_have_exponent && decimal_start != s.end() && decimal_view.empty())
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -171,11 +171,13 @@ String& String::insert(size_type index, const char* s, size_type count)
 | 
			
		|||
 | 
			
		||||
String& String::insert(size_type index, std::string_view str)
 | 
			
		||||
{
 | 
			
		||||
	return insert(index, str.begin(), (size_type)str.size());
 | 
			
		||||
	if (str.empty()) return *this;
 | 
			
		||||
	return insert(index, &*str.begin(), (size_type)str.size());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String& String::insert(size_type index, std::string_view str, size_t s_index, size_t count)
 | 
			
		||||
{
 | 
			
		||||
	if (str.empty()) return *this;
 | 
			
		||||
	if (s_index > str.size())
 | 
			
		||||
	{
 | 
			
		||||
		throw std::out_of_range("s_index > str.size()");
 | 
			
		||||
| 
						 | 
				
			
			@ -343,7 +345,7 @@ String& String::replace(const_iterator first, const_iterator last, std::string_v
 | 
			
		|||
	{
 | 
			
		||||
		throw std::out_of_range("string replacement range out of bounds");
 | 
			
		||||
	}
 | 
			
		||||
	size_type index = first - data_.data();
 | 
			
		||||
	size_type index = &*first - data_.data();
 | 
			
		||||
	size_type count = last - first;
 | 
			
		||||
 | 
			
		||||
	return replace(index, count, str);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -230,7 +230,10 @@ public:
 | 
			
		|||
			size_t count_destroyed = 0;
 | 
			
		||||
			for (auto itr = itr_begin; itr != itr_end; itr++)
 | 
			
		||||
			{
 | 
			
		||||
				itr->~T();
 | 
			
		||||
				if constexpr (std::is_destructible_v<T>)
 | 
			
		||||
				{
 | 
			
		||||
					(*itr).~T();
 | 
			
		||||
				}
 | 
			
		||||
				count_destroyed++;
 | 
			
		||||
			}
 | 
			
		||||
			size_ = s;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -292,7 +292,8 @@ const auto GraphicsDriver = consvar_t::Builder(cvlist_graphics_driver).save();
 | 
			
		|||
// Player local, not available on dedicated servers.
 | 
			
		||||
// These usually save...
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
consvar_t cv_addons_md5 = Player("addons_md5", "Name").values({{0, "Name"}, {1, "Contents"}});
 | 
			
		||||
consvar_t cv_addons_search_case = Player("addons_search_case", "No").yes_no();
 | 
			
		||||
consvar_t cv_addons_search_type = Player("addons_search_type", "Anywhere").values({{0, "Start"}, {1, "Anywhere"}});
 | 
			
		||||
| 
						 | 
				
			
			@ -1543,7 +1544,7 @@ consvar_t cv_globalsaturation;
 | 
			
		|||
consvar_t cv_rgamma, cv_ygamma, cv_ggamma, cv_cgamma, cv_bgamma, cv_mgamma;
 | 
			
		||||
consvar_t cv_rhue, cv_yhue, cv_ghue, cv_chue, cv_bhue, cv_mhue;
 | 
			
		||||
consvar_t cv_rsaturation, cv_ysaturation, cv_gsaturation, cv_csaturation, cv_bsaturation, cv_msaturation;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
// This function can be used for more advanced cvar
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,8 @@
 | 
			
		|||
#ifndef __D_PLAYER__
 | 
			
		||||
#define __D_PLAYER__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
// The player data structure depends on a number
 | 
			
		||||
// of other structs: items (internal inventory),
 | 
			
		||||
// animation states (closely tied to the sprites
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,10 +66,16 @@ extern "C" {
 | 
			
		|||
 | 
			
		||||
// If you don't disable ALL debug first, you get ALL debug enabled
 | 
			
		||||
#if !defined (NDEBUG)
 | 
			
		||||
#ifndef PACKETDROP
 | 
			
		||||
#define PACKETDROP
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef PARANOIA
 | 
			
		||||
#define PARANOIA
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef ZDEBUG
 | 
			
		||||
#define ZDEBUG
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Uncheck this to compile debugging code
 | 
			
		||||
//#ifndef PARANOIA
 | 
			
		||||
| 
						 | 
				
			
			@ -90,7 +96,9 @@ extern char logfilename[1024];
 | 
			
		|||
 | 
			
		||||
//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
 | 
			
		||||
#ifdef DEVELOP
 | 
			
		||||
#ifndef PARANOIA
 | 
			
		||||
#define PARANOIA // On by default for DEVELOP builds
 | 
			
		||||
#endif
 | 
			
		||||
#define VERSIONSTRING "Development EXE"
 | 
			
		||||
#define VERSIONSTRING_RC "Development EXE" "\0"
 | 
			
		||||
// most interface strings are ignored in development mode.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,48 +23,20 @@ extern "C" {
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
//#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define RPC_NO_WINDOWS_H
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
// win32 sucks
 | 
			
		||||
#undef min
 | 
			
		||||
#undef max
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* 7.18.1.1  Exact-width integer types */
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
// libopenmpt.h will include stdint.h later;
 | 
			
		||||
// include it now so that INT8_MAX etc. don't get redefined
 | 
			
		||||
#ifdef HAVE_OPENMPT
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define UINT8 unsigned __int8
 | 
			
		||||
#define SINT8 signed __int8
 | 
			
		||||
 | 
			
		||||
#define UINT16 unsigned __int16
 | 
			
		||||
#define INT16 __int16
 | 
			
		||||
 | 
			
		||||
#define INT32 __int32
 | 
			
		||||
#define UINT32 unsigned __int32
 | 
			
		||||
 | 
			
		||||
#define INT64  __int64
 | 
			
		||||
#define UINT64 unsigned __int64
 | 
			
		||||
 | 
			
		||||
typedef long ssize_t;
 | 
			
		||||
 | 
			
		||||
/* Older Visual C++ headers don't have the Win64-compatible typedefs... */
 | 
			
		||||
#if (_MSC_VER <= 1200)
 | 
			
		||||
	#ifndef DWORD_PTR
 | 
			
		||||
		#define DWORD_PTR DWORD
 | 
			
		||||
	#endif
 | 
			
		||||
	#ifndef PDWORD_PTR
 | 
			
		||||
		#define PDWORD_PTR PDWORD
 | 
			
		||||
	#endif
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#define __STDC_LIMIT_MACROS
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#ifndef _MSC_VER
 | 
			
		||||
#define UINT8 uint8_t
 | 
			
		||||
#define SINT8 int8_t
 | 
			
		||||
 | 
			
		||||
#define UINT16 uint16_t
 | 
			
		||||
#define INT16 int16_t
 | 
			
		||||
| 
						 | 
				
			
			@ -75,6 +47,8 @@ typedef long ssize_t;
 | 
			
		|||
#define UINT64 uint64_t
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define SINT8 int8_t
 | 
			
		||||
 | 
			
		||||
#ifdef __APPLE_CC__
 | 
			
		||||
#define DIRECTFULLSCREEN 1
 | 
			
		||||
#define DEBUG_LOG
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
#include <dirent.h>
 | 
			
		||||
#endif
 | 
			
		||||
#if defined (_WIN32) && !defined (_XBOX)
 | 
			
		||||
//#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define RPC_NO_WINDOWS_H
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +147,7 @@ opendir (const CHAR *szPath)
 | 
			
		|||
 | 
			
		||||
  /* Allocate enough space to store DIR structure and the complete
 | 
			
		||||
   * directory path given. */
 | 
			
		||||
  nd = (DIR *) malloc (sizeof (DIR) + (strlen(szFullPath) + strlen (SLASH) +
 | 
			
		||||
  nd = (DIR *) malloc (sizeof (DIR) + (strlen(szFullPath) +
 | 
			
		||||
			 strlen(PATHSEP) + 1) * sizeof (CHAR));
 | 
			
		||||
 | 
			
		||||
  if (!nd)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -123,6 +123,7 @@ static char demoname[MAX_WADPATH];
 | 
			
		|||
static savebuffer_t demobuf = {0};
 | 
			
		||||
static UINT8 *demotime_p, *demoinfo_p, *demoattack_p, *demosplits_p;
 | 
			
		||||
static UINT16 demoflags;
 | 
			
		||||
extern "C" boolean demosynced;
 | 
			
		||||
boolean demosynced = true; // console warning message
 | 
			
		||||
 | 
			
		||||
struct demovars_s demo;
 | 
			
		||||
| 
						 | 
				
			
			@ -1683,6 +1684,11 @@ skippedghosttic:
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
extern consvar_t cv_netdemosize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// G_RecordDemo
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -1691,8 +1697,6 @@ void G_RecordDemo(const char *name)
 | 
			
		|||
	if (demo.recording)
 | 
			
		||||
		G_CheckDemoStatus();
 | 
			
		||||
 | 
			
		||||
	extern consvar_t cv_netdemosize;
 | 
			
		||||
 | 
			
		||||
	INT32 maxsize;
 | 
			
		||||
 | 
			
		||||
	strcpy(demoname, name);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1867,6 +1867,8 @@ void G_UpdateAllPlayerPreferences(void)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern boolean demosynced;
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// G_Ticker
 | 
			
		||||
// Make ticcmd_ts for the players.
 | 
			
		||||
| 
						 | 
				
			
			@ -1883,7 +1885,6 @@ void G_Ticker(boolean run)
 | 
			
		|||
 | 
			
		||||
	P_MapStart();
 | 
			
		||||
 | 
			
		||||
	extern boolean demosynced;
 | 
			
		||||
	if (demo.playback && staffsync && !demosynced)
 | 
			
		||||
	{
 | 
			
		||||
		G_ClearRetryFlag();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@
 | 
			
		|||
/// \brief OpenGL API for Sonic Robo Blast 2
 | 
			
		||||
 | 
			
		||||
#if defined (_WIN32)
 | 
			
		||||
//#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define RPC_NO_WINDOWS_H
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -278,7 +278,7 @@ void PatchAtlasCache::pack(Rhi& rhi)
 | 
			
		|||
					atlas.entries_.insert_or_assign(patch, std::move(entry));
 | 
			
		||||
					patch_lookup_.insert_or_assign(patch, atlas_index);
 | 
			
		||||
					patches_to_upload_.insert(patch);
 | 
			
		||||
					rects.erase(itr);
 | 
			
		||||
					itr = rects.erase(itr);
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				++itr;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								src/i_tcp.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/i_tcp.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -399,7 +399,7 @@ void Command_Numnodes(void)
 | 
			
		|||
				connected, ingame);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static boolean hole_punch(ssize_t c)
 | 
			
		||||
static boolean hole_punch(ptrdiff_t c)
 | 
			
		||||
{
 | 
			
		||||
	if (c == 10 && holepunchpacket->magic == hole_punch_magic)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -425,7 +425,7 @@ static boolean SOCK_Get(void)
 | 
			
		|||
{
 | 
			
		||||
	size_t n;
 | 
			
		||||
	int j;
 | 
			
		||||
	ssize_t c;
 | 
			
		||||
	ptrdiff_t c;
 | 
			
		||||
	mysockaddr_t fromaddress;
 | 
			
		||||
	socklen_t fromlen;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -534,7 +534,7 @@ static boolean SOCK_CanGet(void)
 | 
			
		|||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static inline ssize_t SOCK_SendToAddr(SOCKET_TYPE socket, mysockaddr_t *sockaddr)
 | 
			
		||||
static inline ptrdiff_t SOCK_SendToAddr(SOCKET_TYPE socket, mysockaddr_t* sockaddr)
 | 
			
		||||
{
 | 
			
		||||
	socklen_t d4 = (socklen_t)sizeof(struct sockaddr_in);
 | 
			
		||||
#ifdef HAVE_IPV6
 | 
			
		||||
| 
						 | 
				
			
			@ -556,8 +556,8 @@ static inline ssize_t SOCK_SendToAddr(SOCKET_TYPE socket, mysockaddr_t *sockaddr
 | 
			
		|||
 | 
			
		||||
static void SOCK_Send(void)
 | 
			
		||||
{
 | 
			
		||||
	ssize_t c = ERRSOCKET;
 | 
			
		||||
	size_t i, j;
 | 
			
		||||
	ptrdiff_t c = ERRSOCKET;
 | 
			
		||||
	ptrdiff_t i, j;
 | 
			
		||||
 | 
			
		||||
	if (!nodeconnected[doomcom->remotenode])
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@
 | 
			
		|||
#ifndef __SRB2_IO_STREAMS_HPP__
 | 
			
		||||
#define __SRB2_IO_STREAMS_HPP__
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
#include <stdexcept>
 | 
			
		||||
#include <type_traits>
 | 
			
		||||
| 
						 | 
				
			
			@ -408,9 +409,9 @@ public:
 | 
			
		|||
		if (head_ >= span_.size())
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		const auto begin = buffer.begin();
 | 
			
		||||
		const auto end = std::copy(
 | 
			
		||||
			span_.begin() + head_, span_.begin() + head_ + std::min(buffer.size(), span_.size() - head_), begin);
 | 
			
		||||
		auto begin = buffer.begin();
 | 
			
		||||
		auto end = std::copy(
 | 
			
		||||
			span_.begin() + head_, span_.begin() + head_ + std::min<size_t>(buffer.size(), span_.size() - head_), begin);
 | 
			
		||||
		head_ += std::distance(begin, end);
 | 
			
		||||
		return std::distance(begin, end);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -419,9 +420,9 @@ public:
 | 
			
		|||
		if (head_ >= span_.size())
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		const auto begin = span_.begin() + head_;
 | 
			
		||||
		const auto end =
 | 
			
		||||
			std::copy(buffer.begin(), buffer.begin() + std::min(span_.size() - head_, buffer.size()), begin);
 | 
			
		||||
		auto begin = span_.begin() + head_;
 | 
			
		||||
		auto end =
 | 
			
		||||
			std::copy(buffer.begin(), buffer.begin() + std::min<size_t>(span_.size() - head_, buffer.size()), begin);
 | 
			
		||||
		head_ += std::distance(begin, end);
 | 
			
		||||
		return std::distance(begin, end);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -501,9 +502,9 @@ public:
 | 
			
		|||
		if (head_ >= vec_.size())
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		const auto begin = buffer.begin();
 | 
			
		||||
		const auto end =
 | 
			
		||||
			std::copy(vec_.begin() + head_, vec_.begin() + head_ + std::min(buffer.size(), vec_.size() - head_), begin);
 | 
			
		||||
		auto begin = buffer.begin();
 | 
			
		||||
		auto end =
 | 
			
		||||
			std::copy(vec_.begin() + head_, vec_.begin() + head_ + std::min<size_t>(buffer.size(), vec_.size() - head_), begin);
 | 
			
		||||
		head_ += std::distance(begin, end);
 | 
			
		||||
		return std::distance(begin, end);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -514,9 +515,9 @@ public:
 | 
			
		|||
			vec_.resize(head_ + buffer_size);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		const auto begin = vec_.begin() + head_;
 | 
			
		||||
		const auto end =
 | 
			
		||||
			std::copy(buffer.begin(), buffer.begin() + std::min(vec_.size() - head_, buffer.size()), begin);
 | 
			
		||||
		auto begin = vec_.begin() + head_;
 | 
			
		||||
		auto end =
 | 
			
		||||
			std::copy(buffer.begin(), buffer.begin() + std::min<size_t>(vec_.size() - head_, buffer.size()), begin);
 | 
			
		||||
		head_ += std::distance(begin, end);
 | 
			
		||||
		return std::distance(begin, end);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -901,7 +902,7 @@ public:
 | 
			
		|||
			StreamSize bytesread = inner_.read(readspan);
 | 
			
		||||
			buf_.resize(prereadsize + bytesread);
 | 
			
		||||
 | 
			
		||||
			StreamSize tocopyfrombuf = std::min(buffer.size(), buf_.size());
 | 
			
		||||
			StreamSize tocopyfrombuf = std::min<StreamSize>(buffer.size(), buf_.size());
 | 
			
		||||
			std::copy(buf_.begin(), std::next(buf_.begin(), tocopyfrombuf), buffer.begin());
 | 
			
		||||
			buffer = buffer.subspan(tocopyfrombuf);
 | 
			
		||||
			totalread += tocopyfrombuf;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,6 +55,8 @@ angle_t K_GetCollideAngle(mobj_t *t1, mobj_t *t2)
 | 
			
		|||
	return R_PointToAngle2(0, 0, momux, momuy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" consvar_t cv_debugpickmeup;
 | 
			
		||||
 | 
			
		||||
boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
 | 
			
		||||
{
 | 
			
		||||
	boolean damageitem = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +77,6 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
 | 
			
		|||
	if (t1->type == MT_BALLHOGBOOM && t2->type == MT_BALLHOGBOOM)
 | 
			
		||||
		return true; // Ballhogs don't collide with eachother
 | 
			
		||||
 | 
			
		||||
	extern consvar_t cv_debugpickmeup;
 | 
			
		||||
	if (t1->type == MT_BALLHOGBOOM && t2->type == MT_PLAYER && t1->target == t2 && !cv_debugpickmeup.value)
 | 
			
		||||
		return true; // Allied hog explosion, not snatchable but shouldn't damage
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -258,6 +259,8 @@ static inline boolean PIT_SSMineChecks(mobj_t *thing)
 | 
			
		|||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" consvar_t cv_debugpickmeup;
 | 
			
		||||
 | 
			
		||||
static inline BlockItReturn_t PIT_SSMineSearch(mobj_t *thing)
 | 
			
		||||
{
 | 
			
		||||
	if (grenade == NULL || P_MobjWasRemoved(grenade))
 | 
			
		||||
| 
						 | 
				
			
			@ -276,8 +279,6 @@ static inline BlockItReturn_t PIT_SSMineSearch(mobj_t *thing)
 | 
			
		|||
		return BMIT_CONTINUE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	extern consvar_t cv_debugpickmeup;
 | 
			
		||||
 | 
			
		||||
	if (!cv_debugpickmeup.value)
 | 
			
		||||
	{
 | 
			
		||||
		if (grenade->target && !P_MobjWasRemoved(grenade->target))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1149,6 +1149,8 @@ boolean K_CanChangeRules(boolean allowdemos)
 | 
			
		|||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" consvar_t cv_forcebots;
 | 
			
		||||
 | 
			
		||||
/*--------------------------------------------------
 | 
			
		||||
	boolean K_BotDefaultSpectator(player_t *player);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1156,8 +1158,6 @@ boolean K_CanChangeRules(boolean allowdemos)
 | 
			
		|||
--------------------------------------------------*/
 | 
			
		||||
boolean K_BotDefaultSpectator(void)
 | 
			
		||||
{
 | 
			
		||||
	extern consvar_t cv_forcebots;
 | 
			
		||||
 | 
			
		||||
	if (cv_forcebots.value)
 | 
			
		||||
	{
 | 
			
		||||
		return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5834,7 +5834,7 @@ position_t K_GetKartObjectPosToMinimapPos(fixed_t objx, fixed_t objy)
 | 
			
		|||
	if (encoremode)
 | 
			
		||||
		amnumxpos = -amnumxpos;
 | 
			
		||||
 | 
			
		||||
	return (position_t){amnumxpos, amnumypos};
 | 
			
		||||
	return position_t{amnumxpos, amnumypos};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void K_drawKartMinimapIcon(fixed_t objx, fixed_t objy, INT32 hudx, INT32 hudy, INT32 flags, patch_t *icon, UINT8 *colormap)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								src/k_menu.h
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/k_menu.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1631,4 +1631,28 @@ const char *M_GetDiscordName(discordRequest_t *r);
 | 
			
		|||
} // extern "C"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
namespace srb2
 | 
			
		||||
{
 | 
			
		||||
constexpr inline itemaction_t itemaction(menu_t* menu)
 | 
			
		||||
{
 | 
			
		||||
	itemaction_t ret {};
 | 
			
		||||
	ret.submenu = menu;
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
constexpr inline itemaction_t itemaction(consvar_t* consvar)
 | 
			
		||||
{
 | 
			
		||||
	itemaction_t ret {};
 | 
			
		||||
	ret.cvar = consvar;
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
constexpr inline itemaction_t itemaction(void (*routine)(INT32 choice))
 | 
			
		||||
{
 | 
			
		||||
	itemaction_t ret {};
 | 
			
		||||
	ret.routine = routine;
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif //__K_MENU__
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6712,7 +6712,7 @@ static void M_CacheAddonPatches(void)
 | 
			
		|||
void M_DrawAddons(void)
 | 
			
		||||
{
 | 
			
		||||
	INT32 x, y;
 | 
			
		||||
	ssize_t i, m;
 | 
			
		||||
	ptrdiff_t i, m;
 | 
			
		||||
	const UINT8 *flashcol = NULL;
 | 
			
		||||
	UINT8 hilicol;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6763,7 +6763,7 @@ void M_DrawAddons(void)
 | 
			
		|||
		i = 0;
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		ssize_t q = m;
 | 
			
		||||
		ptrdiff_t q = m;
 | 
			
		||||
		m = ((2*numaddonsshown + 1) * m)/sizedirmenu;
 | 
			
		||||
		if (dir_on[menudepthleft] <= numaddonsshown) // all the way up
 | 
			
		||||
			i = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -6777,7 +6777,7 @@ void M_DrawAddons(void)
 | 
			
		|||
 | 
			
		||||
	// get bottom...
 | 
			
		||||
	m = dir_on[menudepthleft] + numaddonsshown + 1;
 | 
			
		||||
	if (m > (ssize_t)sizedirmenu)
 | 
			
		||||
	if (m > (ptrdiff_t) sizedirmenu)
 | 
			
		||||
		m = sizedirmenu;
 | 
			
		||||
 | 
			
		||||
	// then compute top and adjust bottom if needed!
 | 
			
		||||
| 
						 | 
				
			
			@ -6830,7 +6830,7 @@ void M_DrawAddons(void)
 | 
			
		|||
		y += addonsseperation;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (m != (ssize_t)sizedirmenu)
 | 
			
		||||
	if (m != (ptrdiff_t) sizedirmenu)
 | 
			
		||||
		V_DrawMenuString(19, y-12 + (skullAnimCounter/5), highlightflags, "\x1B");
 | 
			
		||||
 | 
			
		||||
	if (m < (2*numaddonsshown + 1))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
 | 
			
		||||
extern "C" consvar_t cv_dummyprofilefov, cv_fov[MAXSPLITSCREENPLAYERS];
 | 
			
		||||
 | 
			
		||||
CV_PossibleValue_t lastprofile_cons_t[] = {{-1, "MIN"}, {MAXPROFILES, "MAX"}, {0, NULL}};
 | 
			
		||||
extern "C" CV_PossibleValue_t lastprofile_cons_t[] = {{-1, "MIN"}, {MAXPROFILES, "MAX"}, {0, NULL}};
 | 
			
		||||
 | 
			
		||||
// List of all the profiles.
 | 
			
		||||
static profile_t *profilesList[MAXPROFILES+1]; // +1 because we're gonna add a default "GUEST' profile.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,9 +17,7 @@
 | 
			
		|||
#define __M_FIXED__
 | 
			
		||||
 | 
			
		||||
#include "doomtype.h"
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,12 +21,12 @@
 | 
			
		|||
#pragma GCC diagnostic ignored "-Wclobbered"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <filesystem>
 | 
			
		||||
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <filesystem>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
// Extended map support.
 | 
			
		||||
| 
						 | 
				
			
			@ -115,14 +115,17 @@ typedef off_t off64_t;
 | 
			
		|||
 #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern "C" CV_PossibleValue_t lossless_recorder_cons_t[];
 | 
			
		||||
CV_PossibleValue_t lossless_recorder_cons_t[] = {{MM_GIF, "GIF"}, {MM_APNG, "aPNG"}, {MM_SCREENSHOT, "Screenshots"}, {0, NULL}};
 | 
			
		||||
 | 
			
		||||
extern "C" CV_PossibleValue_t zlib_mem_level_t[];
 | 
			
		||||
CV_PossibleValue_t zlib_mem_level_t[] = {
 | 
			
		||||
	{1, "(Min Memory) 1"},
 | 
			
		||||
	{2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"},
 | 
			
		||||
	{8, "(Optimal) 8"}, //libpng Default
 | 
			
		||||
	{9, "(Max Memory) 9"}, {0, NULL}};
 | 
			
		||||
 | 
			
		||||
extern "C" CV_PossibleValue_t zlib_level_t[];
 | 
			
		||||
CV_PossibleValue_t zlib_level_t[] = {
 | 
			
		||||
	{0, "No Compression"},  //Z_NO_COMPRESSION
 | 
			
		||||
	{1, "(Fastest) 1"}, //Z_BEST_SPEED
 | 
			
		||||
| 
						 | 
				
			
			@ -132,6 +135,7 @@ CV_PossibleValue_t zlib_level_t[] = {
 | 
			
		|||
	{9, "(Maximum) 9"}, //Z_BEST_COMPRESSION
 | 
			
		||||
	{0, NULL}};
 | 
			
		||||
 | 
			
		||||
extern "C" CV_PossibleValue_t zlib_strategy_t[];
 | 
			
		||||
CV_PossibleValue_t zlib_strategy_t[] = {
 | 
			
		||||
	{0, "Normal"}, //Z_DEFAULT_STRATEGY
 | 
			
		||||
	{1, "Filtered"}, //Z_FILTERED
 | 
			
		||||
| 
						 | 
				
			
			@ -140,6 +144,7 @@ CV_PossibleValue_t zlib_strategy_t[] = {
 | 
			
		|||
	{4, "Fixed"}, //Z_FIXED
 | 
			
		||||
	{0, NULL}};
 | 
			
		||||
 | 
			
		||||
extern "C" CV_PossibleValue_t zlib_window_bits_t[];
 | 
			
		||||
CV_PossibleValue_t zlib_window_bits_t[] = {
 | 
			
		||||
#ifdef WBITS_8_OK
 | 
			
		||||
	{8, "256"},
 | 
			
		||||
| 
						 | 
				
			
			@ -618,6 +623,8 @@ void Command_ChangeConfig_f(void)
 | 
			
		|||
	COM_BufAddText(va("loadconfig \"%s\"\n", COM_Argv(1)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" struct CVarList* cvlist_execversion;
 | 
			
		||||
 | 
			
		||||
/** Loads the default config file.
 | 
			
		||||
  *
 | 
			
		||||
  * \sa Command_LoadConfig_f
 | 
			
		||||
| 
						 | 
				
			
			@ -645,7 +652,6 @@ void M_FirstLoadConfig(void)
 | 
			
		|||
 | 
			
		||||
	// register execversion here before we load any configs
 | 
			
		||||
	{
 | 
			
		||||
		extern struct CVarList *cvlist_execversion;
 | 
			
		||||
		CV_RegisterList(cvlist_execversion);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,7 +68,7 @@ typedef u_int32_t md5_uint32;
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
#undef __P
 | 
			
		||||
#if defined (__STDC__) && __STDC__
 | 
			
		||||
#if (defined (__STDC__) && __STDC__) || _MSC_VER
 | 
			
		||||
#define	__P(x) x
 | 
			
		||||
#else
 | 
			
		||||
#define	__P(x) ()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,14 +53,12 @@ float Options::get<float>(const char* option) const
 | 
			
		|||
template <typename T>
 | 
			
		||||
consvar_t Options::values(const char* default_value, const Range<T> range, std::map<std::string_view, T> list)
 | 
			
		||||
{
 | 
			
		||||
	constexpr bool is_float = std::is_floating_point_v<T>;
 | 
			
		||||
 | 
			
		||||
	const std::size_t min_max_size = (range.min || range.max) ? 2 : 0;
 | 
			
		||||
	auto* arr = new CV_PossibleValue_t[list.size() + min_max_size + 1];
 | 
			
		||||
 | 
			
		||||
	auto cast = [](T n)
 | 
			
		||||
	{
 | 
			
		||||
		if constexpr (is_float)
 | 
			
		||||
		if constexpr (std::is_floating_point_v<T>)
 | 
			
		||||
		{
 | 
			
		||||
			return FloatToFixed(n);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +92,7 @@ consvar_t Options::values(const char* default_value, const Range<T> range, std::
 | 
			
		|||
 | 
			
		||||
	int32_t flags = CV_SAVE;
 | 
			
		||||
 | 
			
		||||
	if constexpr (is_float)
 | 
			
		||||
	if constexpr (std::is_floating_point_v<T>)
 | 
			
		||||
	{
 | 
			
		||||
		flags |= CV_FLOAT;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,17 +98,17 @@ void M_FavoriteReplay(INT32 c)
 | 
			
		|||
// extras menu: replay hut
 | 
			
		||||
menuitem_t EXTRAS_EggTV[] =
 | 
			
		||||
{
 | 
			
		||||
	{IT_STRING | IT_CALL, "WATCH REPLAY", NULL, NULL, {.routine = [](auto) { g_egg_tv->watch(); }}, 0, 0},
 | 
			
		||||
	{IT_STRING | IT_CALL, "STANDINGS", NULL, NULL, {.routine = [](auto) { g_egg_tv->standings(); }}, 0, 0},
 | 
			
		||||
	{IT_STRING | IT_CALL, "FAVORITE", NULL, NULL, {.routine = M_FavoriteReplay}, 0, 0},
 | 
			
		||||
	{IT_STRING | IT_CALL, "WATCH REPLAY", NULL, NULL, srb2::itemaction([](auto) -> void { g_egg_tv->watch(); }), 0, 0 },
 | 
			
		||||
	{IT_STRING | IT_CALL, "STANDINGS", NULL, NULL, srb2::itemaction([](auto) { g_egg_tv->standings(); }), 0, 0},
 | 
			
		||||
	{IT_STRING | IT_CALL, "FAVORITE", NULL, NULL, srb2::itemaction(M_FavoriteReplay), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_SPACE},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "DELETE REPLAY", NULL, NULL, {.routine = M_DeleteReplay}, 0, 0},
 | 
			
		||||
	{IT_STRING | IT_CALL, "DELETE REPLAY", NULL, NULL, srb2::itemaction(M_DeleteReplay), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_SPACE},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "GO BACK", NULL, NULL, {.routine = [](auto) { g_egg_tv->back(); }}, 0, 0},
 | 
			
		||||
	{IT_STRING | IT_CALL, "GO BACK", NULL, NULL, srb2::itemaction([](auto) { g_egg_tv->back(); }), 0, 0},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
menu_t EXTRAS_EggTVDef =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -129,31 +129,31 @@ static menuitem_t MAIN_Goner[] =
 | 
			
		|||
{
 | 
			
		||||
	{IT_STRING | IT_CVAR | IT_CV_STRING, "PASSWORD",
 | 
			
		||||
		"ATTEMPT ADMINISTRATOR ACCESS.", NULL,
 | 
			
		||||
		{.cvar = &cv_dummyextraspassword}, 0, 0},
 | 
			
		||||
		srb2::itemaction(& cv_dummyextraspassword), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "EXIT PROGRAM",
 | 
			
		||||
		"CONCLUDE OBSERVATIONS NOW.", NULL,
 | 
			
		||||
		{.routine = M_QuitSRB2}, 0, 0},
 | 
			
		||||
		srb2::itemaction(M_QuitSRB2), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "VIDEO OPTIONS",
 | 
			
		||||
		"CONFIGURE OCULAR PATHWAYS.", NULL,
 | 
			
		||||
		{.routine = M_VideoOptions}, 0, 0},
 | 
			
		||||
		srb2::itemaction(M_VideoOptions), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "SOUND OPTIONS",
 | 
			
		||||
		"CALIBRATE AURAL DATASTREAM.", NULL,
 | 
			
		||||
		{.routine = M_SoundOptions}, 0, 0},
 | 
			
		||||
		srb2::itemaction(M_SoundOptions), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "PROFILE SETUP",
 | 
			
		||||
		"ASSIGN VEHICLE INPUTS.", NULL,
 | 
			
		||||
		{.routine = M_GonerProfile}, 0, 0},
 | 
			
		||||
		srb2::itemaction(M_GonerProfile), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "MAKE CHOICE",
 | 
			
		||||
		"PREPARE FOR INTEGRATION?", NULL,
 | 
			
		||||
		{.routine = M_GonerChoice}, 0, 0},
 | 
			
		||||
		srb2::itemaction(M_GonerChoice), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "START GAME",
 | 
			
		||||
		"I WILL SUCCEED.", NULL,
 | 
			
		||||
		{.routine = M_GonerConclude}, 0, 0},
 | 
			
		||||
		srb2::itemaction(M_GonerConclude), 0, 0},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
menu_t MAIN_GonerDef = {
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +183,7 @@ static menuitem_t MAIN_GonerChoice[] =
 | 
			
		|||
		"\n"
 | 
			
		||||
		"This is a structured, back-to-basics tutorial\n"
 | 
			
		||||
		"that will likely take ""\x88""10-20 minutes""\x80"" of your time.",
 | 
			
		||||
		NULL, {.routine = M_GonerTutorial}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(M_GonerTutorial), 0, 0},
 | 
			
		||||
 | 
			
		||||
	//{IT_STRING, NULL, NULL, NULL, {.routine = M_QuitSRB2}, 0, 0}, // will be replaced
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +194,7 @@ static menuitem_t MAIN_GonerChoice[] =
 | 
			
		|||
		"\n"
 | 
			
		||||
		"You can ""\x88""exit immediately""\x80"" and get to racing...\n"
 | 
			
		||||
		"or spend ""\x88""as long as you want""\x80"" in the playground!",
 | 
			
		||||
		NULL, {.routine = M_GonerPlayground}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(M_GonerPlayground), 0, 0},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static menu_t MAIN_GonerChoiceDef = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,25 +100,25 @@ menuitem_t OPTIONS_ProfileAccessibility[] = {
 | 
			
		|||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Rumble", "For gamepad users - should your device rumble?",
 | 
			
		||||
		NULL, {.cvar = &cv_dummyprofilerumble}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_dummyprofilerumble), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Auto Roulette", "Item roulette auto-stops on a random result.",
 | 
			
		||||
		NULL, {.cvar = &cv_dummyprofileautoroulette}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_dummyprofileautoroulette), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Auto Ring", "Auto-use rings to maintain momentum.",
 | 
			
		||||
		NULL, {.cvar = &cv_dummyprofileautoring}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_dummyprofileautoring), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Kickstart Accel", "Hold A to auto-accel. Tap it to cancel.",
 | 
			
		||||
		NULL, {.cvar = &cv_dummyprofilekickstart}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_dummyprofilekickstart), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Lite Steer", "Hold DOWN on d-pad/keyboard for shallow turns.",
 | 
			
		||||
		NULL, {.cvar = &cv_dummyprofilelitesteer}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_dummyprofilelitesteer), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Strict Fastfall", "Fastfall only with the Spindash button.",
 | 
			
		||||
		NULL, {.cvar = &cv_dummyprofilestrictfastfall}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_dummyprofilestrictfastfall), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Field of View", "Higher FOV lets you see more.",
 | 
			
		||||
		NULL, {.cvar = &cv_dummyprofilefov}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_dummyprofilefov), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_SPACE | IT_NOTHING, NULL,  NULL,
 | 
			
		||||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
| 
						 | 
				
			
			@ -127,19 +127,19 @@ menuitem_t OPTIONS_ProfileAccessibility[] = {
 | 
			
		|||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Minimum Input Delay", "Practice for online play! 0 = instant response.",
 | 
			
		||||
		NULL, {.cvar = &cv_mindelay}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_mindelay), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Screen Tilting", "View rotation on inclines.",
 | 
			
		||||
		NULL, {.cvar = &cv_tilting}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_tilting), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Reduce Effects", "If overwhelmed, hide less-important particle cues.",
 | 
			
		||||
		NULL, {.cvar = &cv_reducevfx}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_reducevfx), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Screenshake", "Adjust shake intensity from hazards and offroad.",
 | 
			
		||||
		NULL, {.cvar = &cv_screenshake}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_screenshake), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Input Display", "Show virtual controller on the HUD.",
 | 
			
		||||
		NULL, {.cvar = &cv_drawinput}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_drawinput), 0, 0},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
menu_t OPTIONS_ProfileAccessibilityDef = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -285,16 +285,16 @@ menuitem_t OPTIONS_Sound[] =
 | 
			
		|||
{
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_ARROWS | IT_CV_SLIDER, "Volume", "Loudness of all game audio.",
 | 
			
		||||
		NULL, {.routine = slider_routine}, 0, Slider::kMasterVolume},
 | 
			
		||||
		NULL, srb2::itemaction(slider_routine), 0, Slider::kMasterVolume},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_ARROWS | IT_CV_SLIDER, "SFX Volume", "Loudness of sound effects.",
 | 
			
		||||
		NULL, {.routine = slider_routine}, 0, Slider::kSfxVolume},
 | 
			
		||||
		NULL, srb2::itemaction(slider_routine), 0, Slider::kSfxVolume},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_ARROWS | IT_CV_SLIDER, "Music Volume", "Loudness of music.",
 | 
			
		||||
		NULL, {.routine = slider_routine}, 0, Slider::kMusicVolume},
 | 
			
		||||
		NULL, srb2::itemaction(slider_routine), 0, Slider::kMusicVolume},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_ARROWS | IT_CV_SLIDER, "Voice Volume", "Loudness of voice chat.",
 | 
			
		||||
		NULL, {.routine = slider_routine}, 0, Slider::kVoiceVolume},
 | 
			
		||||
		NULL, srb2::itemaction(slider_routine), 0, Slider::kVoiceVolume},
 | 
			
		||||
 | 
			
		||||
	{IT_SPACE | IT_NOTHING, NULL,  NULL,
 | 
			
		||||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
| 
						 | 
				
			
			@ -303,19 +303,19 @@ menuitem_t OPTIONS_Sound[] =
 | 
			
		|||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Chat Notifications", "Play a sound effect when chat messages appear.",
 | 
			
		||||
		NULL, {.cvar = &cv_chatnotifications}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_chatnotifications), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Character Voices", "Characters speak when interacting on the course.",
 | 
			
		||||
		NULL, {.cvar = &cv_kartvoices}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_kartvoices), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Follower Horns", NULL, // set in init_routine
 | 
			
		||||
		NULL, {.cvar = &cv_karthorns}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_karthorns), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Continuous Attack Music", "Keep music playing seamlessly when retrying in Attack modes.",
 | 
			
		||||
		NULL, {.cvar = &cv_continuousmusic}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_continuousmusic), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Streamer-Safe Music", "Only play music safe for video platforms.",
 | 
			
		||||
		NULL, {.cvar = &cv_streamersafemusic}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_streamersafemusic), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_SPACE | IT_DYBIGSPACE, NULL,  NULL,
 | 
			
		||||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
| 
						 | 
				
			
			@ -324,16 +324,16 @@ menuitem_t OPTIONS_Sound[] =
 | 
			
		|||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Hear Tabbed-out", "Keep playing game audio when the window is out of focus (FOCUS LOST).",
 | 
			
		||||
		NULL, {.cvar = &cv_bgaudio}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_bgaudio), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Mixing Buffer Size", "Audio buffer size. Higher is faster but more delay.",
 | 
			
		||||
		NULL, {.cvar = &cv_soundmixingbuffersize}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_soundmixingbuffersize), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_SPACE | IT_NOTHING, NULL,  NULL,
 | 
			
		||||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CALL, "\x85" "Restart Audio", "Reboot the game's audio system.",
 | 
			
		||||
		NULL, {.routine = restartaudio_routine}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(restartaudio_routine), 0, 0},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
menu_t OPTIONS_SoundDef = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,25 +17,25 @@
 | 
			
		|||
menuitem_t OPTIONS_Voice[] =
 | 
			
		||||
{
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Mute Self", "Whether your voice is transmitted or not.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_selfmute}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_selfmute), 0, 0 },
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Deafen Self", "Choose to opt-in to voice chat at all, for yourself.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_selfdeafen}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_selfdeafen), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Input Mode", "When to transmit your own voice.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_mode}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_mode), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Input Amplifier", "Amplify your voice, in decibels. Negative values are quieter.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_inputamp}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_inputamp), 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Input Noise Suppression", "Suppress background noise from your voice.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_denoise}, 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Input Sensitivity", "Voice higher than this threshold will transmit, in decibels.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_activationthreshold}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_activationthreshold), 0, 0 },
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Voice Loopback", "Play your own voice back simultaneously.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_loopback}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_loopback), 0, 0 },
 | 
			
		||||
 | 
			
		||||
	{IT_SPACE | IT_NOTHING, NULL,  NULL,
 | 
			
		||||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
| 
						 | 
				
			
			@ -44,10 +44,10 @@ menuitem_t OPTIONS_Voice[] =
 | 
			
		|||
		NULL, {NULL}, 0, 0},
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Server Voice Chat", "All voice chat will be enabled on your server.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_allowservervoice}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_allowservervoice), 0, 0 },
 | 
			
		||||
 | 
			
		||||
	{IT_STRING | IT_CVAR, "Proximity Effects", "Player voices will be adjusted relative to you.",
 | 
			
		||||
		NULL, {.cvar = &cv_voice_proximity}, 0, 0},
 | 
			
		||||
		NULL, srb2::itemaction(&cv_voice_proximity), 0, 0 },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void draw_routine()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ void list_cvars()
 | 
			
		|||
			height += 16;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		g_menu.push_back(menuitem_t {status, var->name, var->description, nullptr, {.cvar = var}, 0, height});
 | 
			
		||||
		g_menu.push_back(menuitem_t{ status, var->name, var->description, nullptr, srb2::itemaction(var), 0, height });
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +146,7 @@ void list_commands()
 | 
			
		|||
		if (flags & COM_NOSHOWHELP)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		g_menu.push_back(menuitem_t {IT_STRING | IT_CALL, cmd->name, "No information available for commands. Press to execute.", nullptr, {.routine = call}, 0, 8});
 | 
			
		||||
		g_menu.push_back(menuitem_t{ IT_STRING | IT_CALL, cmd->name, "No information available for commands. Press to execute.", nullptr, srb2::itemaction(call), 0, 8 });
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ void list_cvars()
 | 
			
		|||
			height += 16;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		g_menu.push_back(menuitem_t {status, var->name, var->description, nullptr, {.cvar = var}, 0, height});
 | 
			
		||||
		g_menu.push_back(menuitem_t {status, var->name, var->description, nullptr, srb2::itemaction(var), 0, height});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ void list_commands()
 | 
			
		|||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		g_menu.push_back(menuitem_t {IT_STRING | IT_CALL, cmd->name, nullptr, nullptr, {.routine = call}, 0, 8});
 | 
			
		||||
		g_menu.push_back(menuitem_t {IT_STRING | IT_CALL, cmd->name, nullptr, nullptr, srb2::itemaction(call), 0, 8});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ using srb2::math::Fixed;
 | 
			
		|||
using srb2::Mobj;
 | 
			
		||||
using srb2::MobjList;
 | 
			
		||||
 | 
			
		||||
extern consvar_t cv_battleufotest;
 | 
			
		||||
extern "C" consvar_t cv_battleufotest;
 | 
			
		||||
 | 
			
		||||
extern mobj_t* svg_battleUfoSpawners;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ public:
 | 
			
		|||
 | 
			
		||||
		Spawner* spawner = next(g_battleufo.previousId);
 | 
			
		||||
		UFO* ufo = static_cast<UFO*>(P_SpawnMobjFromMobj(spawner, 0, 0, 250*FRACUNIT - ofs, MT_BATTLEUFO));
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		K_AddMessage("Crack the Combat UFO!", true, false);
 | 
			
		||||
		S_StartSound(NULL, sfx_mbs54);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -291,4 +291,4 @@ INT32 Obj_BattleUFOSpawnerID(const mobj_t *spawner)
 | 
			
		|||
mobj_t *Obj_GetNextUFOSpawner(void)
 | 
			
		||||
{
 | 
			
		||||
	return g_spawners.next(g_battleufo.previousId);
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,18 +59,24 @@ namespace
 | 
			
		|||
 | 
			
		||||
struct LineOnDemand : line_t
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
	vertex_t v1_data_;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	LineOnDemand(const line_t* line) {}
 | 
			
		||||
 | 
			
		||||
	LineOnDemand(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2) :
 | 
			
		||||
		line_t {
 | 
			
		||||
			.v1 = &v1_data_,
 | 
			
		||||
			.dx = x2 - x1,
 | 
			
		||||
			.dy = y2 - y1,
 | 
			
		||||
			.bbox = {max(y1, y2), min(y1, y2), min(x1, x2), max(x1, x2)},
 | 
			
		||||
		},
 | 
			
		||||
		v1_data_ {.x = x1, .y = y1}
 | 
			
		||||
		line_t {},
 | 
			
		||||
		v1_data_{ x1, y1 }
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
		v1 = &v1_data_;
 | 
			
		||||
		dx = x2 - x1;
 | 
			
		||||
		dy = y2 - y1;
 | 
			
		||||
		bbox[0] = max(y1, y2);
 | 
			
		||||
		bbox[1] = min(y1, y2);
 | 
			
		||||
		bbox[2] = min(x1, x2);
 | 
			
		||||
		bbox[3] = max(x1, x2);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	LineOnDemand(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2, fixed_t r) : LineOnDemand(x1, y1, x2, y2)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -91,9 +97,6 @@ struct LineOnDemand : line_t
 | 
			
		|||
		return bbox[BOXTOP] >= other.bbox[BOXBOTTOM] && bbox[BOXBOTTOM] <= other.bbox[BOXTOP] &&
 | 
			
		||||
			bbox[BOXLEFT] <= other.bbox[BOXRIGHT] && bbox[BOXRIGHT] >= other.bbox[BOXLEFT];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	vertex_t v1_data_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct Checkpoint : mobj_t
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7606,6 +7606,8 @@ void P_SetupLevelSky(const char *skytexname, boolean global)
 | 
			
		|||
static const char *maplumpname;
 | 
			
		||||
lumpnum_t lastloadedmaplumpnum; // for comparative savegame
 | 
			
		||||
 | 
			
		||||
extern "C" boolean blockreset;
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// P_LevelInitStuff
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -7618,7 +7620,6 @@ static void P_InitLevelSettings(void)
 | 
			
		|||
 | 
			
		||||
	leveltime = 0;
 | 
			
		||||
	modulothing = 0;
 | 
			
		||||
	extern boolean blockreset;
 | 
			
		||||
	blockreset = 0;
 | 
			
		||||
 | 
			
		||||
	P_SetFreezeLevel(false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1686,7 +1686,7 @@ static void R_ProjectBoundingBox(mobj_t *thing, vissprite_t *vis)
 | 
			
		|||
fixed_t R_GetSpriteDirectionalLighting(angle_t angle)
 | 
			
		||||
{
 | 
			
		||||
	// Copied from P_UpdateSegLightOffset
 | 
			
		||||
	const UINT8 contrast = std::min(std::max(0, maplighting.contrast - maplighting.backlight), UINT8_MAX);
 | 
			
		||||
	const UINT8 contrast = std::min<UINT8>(std::max(0, maplighting.contrast - maplighting.backlight), UINT8_MAX);
 | 
			
		||||
	const fixed_t contrastFixed = ((fixed_t)contrast) * FRACUNIT;
 | 
			
		||||
 | 
			
		||||
	fixed_t light = FRACUNIT;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,9 +83,9 @@ if("${CMAKE_SYSTEM_NAME}" MATCHES Windows)
 | 
			
		|||
	target_link_libraries(SRB2SDL2 PRIVATE
 | 
			
		||||
		ws2_32
 | 
			
		||||
	)
 | 
			
		||||
	target_compile_options(SRB2SDL2 PRIVATE
 | 
			
		||||
		-U_WINDOWS
 | 
			
		||||
	)
 | 
			
		||||
	# target_compile_options(SRB2SDL2 PRIVATE
 | 
			
		||||
	# 	-U_WINDOWS
 | 
			
		||||
	# )
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ static void InitLogging(void)
 | 
			
		|||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#if defined(_WIN32) && !defined(_MSC_VER)
 | 
			
		||||
static void init_exchndl()
 | 
			
		||||
{
 | 
			
		||||
	HMODULE exchndl_module = LoadLibraryA("exchndl.dll");
 | 
			
		||||
| 
						 | 
				
			
			@ -212,6 +212,10 @@ static void init_exchndl()
 | 
			
		|||
	if (pfnExcHndlInit != NULL)
 | 
			
		||||
		(pfnExcHndlInit)();
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
static void init_exchndl()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
| 
						 | 
				
			
			@ -351,6 +355,13 @@ int main(int argc, char **argv)
 | 
			
		|||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
int WINAPI WinMain(HINSTANCE pInstance, HINSTANCE pPrevInstance, LPSTR lpCmdLine, int nShowCmd)
 | 
			
		||||
{
 | 
			
		||||
	return main(__argc, __argv);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void* operator new(size_t count)
 | 
			
		||||
{
 | 
			
		||||
	auto p = malloc(count);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@
 | 
			
		|||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define RPC_NO_WINDOWS_H
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#include "../doomtype.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -1729,6 +1730,8 @@ static INT32 errorcount = 0;
 | 
			
		|||
*/
 | 
			
		||||
static boolean shutdowning = false;
 | 
			
		||||
 | 
			
		||||
extern "C" consvar_t cv_fuzz;
 | 
			
		||||
 | 
			
		||||
void I_Error(const char *error, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list argptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -1813,7 +1816,6 @@ void I_Error(const char *error, ...)
 | 
			
		|||
	I_ShutdownGraphics();
 | 
			
		||||
	I_ShutdownInput();
 | 
			
		||||
 | 
			
		||||
	extern consvar_t cv_fuzz;
 | 
			
		||||
	if (!cv_fuzz.value)
 | 
			
		||||
		I_ShowErrorMessageBox(buffer, false);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1974,7 +1976,7 @@ void I_GetDiskFreeSpace(INT64 *freespace)
 | 
			
		|||
 | 
			
		||||
	if (!testwin95)
 | 
			
		||||
	{
 | 
			
		||||
		*(void**)&pfnGetDiskFreeSpaceEx = FUNCPTRCAST(GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA"));
 | 
			
		||||
		pfnGetDiskFreeSpaceEx = reinterpret_cast<decltype(pfnGetDiskFreeSpaceEx)>(GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA"));
 | 
			
		||||
		testwin95 = true;
 | 
			
		||||
	}
 | 
			
		||||
	if (pfnGetDiskFreeSpaceEx)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,8 @@
 | 
			
		|||
#include "SDL.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define RPC_NO_WINDOWS_H
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#pragma warning(default : 4214 4244)
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -348,9 +350,10 @@ static INT32 Impl_SDL_Scancode_To_Keycode(SDL_Scancode code)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" consvar_t cv_alwaysgrabmouse;
 | 
			
		||||
 | 
			
		||||
static boolean IgnoreMouse(void)
 | 
			
		||||
{
 | 
			
		||||
	extern consvar_t cv_alwaysgrabmouse;
 | 
			
		||||
	if (cv_alwaysgrabmouse.value)
 | 
			
		||||
		return false;
 | 
			
		||||
	if (menuactive)
 | 
			
		||||
| 
						 | 
				
			
			@ -1517,6 +1520,8 @@ static void Impl_VideoSetupBuffer(void)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" CVarList* cvlist_graphics_driver;
 | 
			
		||||
 | 
			
		||||
void I_StartupGraphics(void)
 | 
			
		||||
{
 | 
			
		||||
	if (dedicated)
 | 
			
		||||
| 
						 | 
				
			
			@ -1531,10 +1536,7 @@ void I_StartupGraphics(void)
 | 
			
		|||
	COM_AddCommand ("vid_info", VID_Command_Info_f);
 | 
			
		||||
	COM_AddCommand ("vid_modelist", VID_Command_ModeList_f);
 | 
			
		||||
	COM_AddCommand ("vid_mode", VID_Command_Mode_f);
 | 
			
		||||
	{
 | 
			
		||||
		extern CVarList *cvlist_graphics_driver;
 | 
			
		||||
		CV_RegisterList(cvlist_graphics_driver);
 | 
			
		||||
	}
 | 
			
		||||
	CV_RegisterList(cvlist_graphics_driver);
 | 
			
		||||
	disable_mouse = static_cast<SDL_bool>(M_CheckParm("-nomouse"));
 | 
			
		||||
	disable_fullscreen = M_CheckParm("-win") ? SDL_TRUE : SDL_FALSE;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1380,11 +1380,11 @@ static INT32 ST_ServerSplash_OpacityFlag(INT32 opacity)
 | 
			
		|||
	return (NUMTRANSMAPS - opacity) << V_ALPHASHIFT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define SPLASH_LEN ((FRACUNIT * TICRATE) * 3)
 | 
			
		||||
#define SPLASH_WAIT ((FRACUNIT * TICRATE) / 2)
 | 
			
		||||
 | 
			
		||||
void ST_DrawServerSplash(boolean timelimited)
 | 
			
		||||
{
 | 
			
		||||
	static const fixed_t SPLASH_LEN = (FRACUNIT * TICRATE) * 3;
 | 
			
		||||
	static const fixed_t SPLASH_WAIT = (FRACUNIT * TICRATE) / 2;
 | 
			
		||||
 | 
			
		||||
	static fixed_t splashTime = -SPLASH_WAIT;
 | 
			
		||||
	static char prevContext[8] = {0};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,8 +61,10 @@ UINT8 *screens[5];
 | 
			
		|||
 | 
			
		||||
#define huecoloursteps 4
 | 
			
		||||
 | 
			
		||||
extern "C" CV_PossibleValue_t hue_cons_t[];
 | 
			
		||||
CV_PossibleValue_t hue_cons_t[] = {{0, "MIN"}, {(huecoloursteps*6)-1, "MAX"}, {0, NULL}};
 | 
			
		||||
 | 
			
		||||
extern "C" CV_PossibleValue_t constextsize_cons_t[];
 | 
			
		||||
CV_PossibleValue_t constextsize_cons_t[] = {
 | 
			
		||||
	{V_NOSCALEPATCH, "Small"}, {V_SMALLSCALEPATCH, "Medium"}, {V_MEDSCALEPATCH, "Large"}, {0, "Huge"},
 | 
			
		||||
	{0, NULL}};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
#include <winuser.h>
 | 
			
		||||
#include <winres.h>
 | 
			
		||||
 | 
			
		||||
//Microsoft Developer Studio generated resource script.
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -75,11 +75,9 @@ END
 | 
			
		|||
// Version
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "../doomdef.h" // Needed for version string
 | 
			
		||||
 | 
			
		||||
VS_VERSION_INFO VERSIONINFO
 | 
			
		||||
 FILEVERSION 2,2,0,0
 | 
			
		||||
 PRODUCTVERSION 2,2,0,0
 | 
			
		||||
 FILEVERSION 2,4,0,0
 | 
			
		||||
 PRODUCTVERSION 2,4,0,0
 | 
			
		||||
 FILEFLAGSMASK 0x3fL
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
 FILEFLAGS 0x1L
 | 
			
		||||
| 
						 | 
				
			
			@ -97,14 +95,14 @@ BEGIN
 | 
			
		|||
            VALUE "Comments", "Go go-karting with Dr. Robotnik!\0"
 | 
			
		||||
            VALUE "CompanyName", "Kart Krew Dev\0"
 | 
			
		||||
            VALUE "FileDescription", "Dr. Robotnik's Ring Racers\0"
 | 
			
		||||
            VALUE "FileVersion", VERSIONSTRING_RC
 | 
			
		||||
            VALUE "FileVersion", "2.4"
 | 
			
		||||
            VALUE "InternalName", "ringracers\0"
 | 
			
		||||
            VALUE "LegalCopyright", "Copyright 2018-2024 Kart Krew Dev\0"
 | 
			
		||||
            VALUE "LegalTrademarks", "Dr. Robotnik and related characters are trademarks of Sega.\0"
 | 
			
		||||
            VALUE "OriginalFilename", "ringracers.exe\0"
 | 
			
		||||
            VALUE "PrivateBuild", "\0"
 | 
			
		||||
            VALUE "ProductName", "Dr. Robotnik's Ring Racers\0"
 | 
			
		||||
            VALUE "ProductVersion", VERSIONSTRING_RC
 | 
			
		||||
            VALUE "ProductVersion", "2.4"
 | 
			
		||||
            VALUE "SpecialBuild", "\0"
 | 
			
		||||
        END
 | 
			
		||||
    END
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2516,6 +2516,8 @@ void Y_PlayIntermissionMusic(void)
 | 
			
		|||
		Music_Play("intermission");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" boolean blockreset;
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Y_StartIntermission
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -2538,7 +2540,6 @@ void Y_StartIntermission(void)
 | 
			
		|||
		I_Error("endtic is dirty");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	extern boolean blockreset;
 | 
			
		||||
	blockreset = false;
 | 
			
		||||
 | 
			
		||||
	// set player Power Level type
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue