mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/master'
This commit is contained in:
		
						commit
						a230368c3d
					
				
					 14 changed files with 103 additions and 53 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,7 @@
 | 
			
		|||
Here it is! SRB2 v2.1.7 source code!
 | 
			
		||||
Here it is! SRB2 v2.1.8 source code!
 | 
			
		||||
(why do we keep the version number up to date
 | 
			
		||||
	when everything else in this file is hilariously old?
 | 
			
		||||
	- Inuyasha)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Win32 with Visual C (6SP6+Processor Pack OR 7)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8489,7 +8489,10 @@ static inline int lib_getenum(lua_State *L)
 | 
			
		|||
	// DYNAMIC variables too!!
 | 
			
		||||
	// Try not to add anything that would break netgames or timeattack replays here.
 | 
			
		||||
	// You know, like consoleplayer, displayplayer, secondarydisplayplayer, or gametime.
 | 
			
		||||
	if (fastcmp(word,"maptol")) {
 | 
			
		||||
	if (fastcmp(word,"gamemap")) {
 | 
			
		||||
		lua_pushinteger(L, gamemap);
 | 
			
		||||
		return 1;
 | 
			
		||||
	} else if (fastcmp(word,"maptol")) {
 | 
			
		||||
		lua_pushinteger(L, maptol);
 | 
			
		||||
		return 1;
 | 
			
		||||
	} else if (fastcmp(word,"mariomode")) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,8 +144,8 @@ extern FILE *logstream;
 | 
			
		|||
#define VERSIONSTRING "Trunk"
 | 
			
		||||
#else
 | 
			
		||||
#define VERSION    201 // Game version
 | 
			
		||||
#define SUBVERSION 7  // more precise version number
 | 
			
		||||
#define VERSIONSTRING "v2.1.7"
 | 
			
		||||
#define SUBVERSION 8  // more precise version number
 | 
			
		||||
#define VERSIONSTRING "v2.1.8"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Modification options
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +201,7 @@ extern FILE *logstream;
 | 
			
		|||
// it's only for detection of the version the player is using so the MS can alert them of an update.
 | 
			
		||||
// Only set it higher, not lower, obviously.
 | 
			
		||||
// Note that we use this to help keep internal testing in check; this is why v2.1.0 is not version "1".
 | 
			
		||||
#define MODVERSION 12
 | 
			
		||||
#define MODVERSION 13
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -179,6 +179,9 @@ void HWR_DrawFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
 | 
			
		|||
	if (option & V_NOSCALESTART)
 | 
			
		||||
		sdupx = sdupy = 2.0f;
 | 
			
		||||
 | 
			
		||||
	if (option & V_SPLITSCREEN)
 | 
			
		||||
		sdupy /= 2.0f;
 | 
			
		||||
 | 
			
		||||
	if (option & V_FLIP) // Need to flip both this and sow
 | 
			
		||||
	{
 | 
			
		||||
		v[0].x = v[3].x = (cx*sdupx-(gpatch->width-gpatch->leftoffset)*pdupx)/vid.width - 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1459,7 +1459,7 @@ static int lib_sSoundPlaying(lua_State *L)
 | 
			
		|||
 | 
			
		||||
static int lib_gBuildMapName(lua_State *L)
 | 
			
		||||
{
 | 
			
		||||
	INT32 map = luaL_checkinteger(L, 1);
 | 
			
		||||
	INT32 map = luaL_optinteger(L, 1, gamemap);
 | 
			
		||||
	//HUDSAFE
 | 
			
		||||
	lua_pushstring(L, G_BuildMapName(map));
 | 
			
		||||
	return 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -1484,7 +1484,7 @@ static int lib_gExitLevel(lua_State *L)
 | 
			
		|||
 | 
			
		||||
static int lib_gIsSpecialStage(lua_State *L)
 | 
			
		||||
{
 | 
			
		||||
	INT32 mapnum = luaL_checkinteger(L, 1);
 | 
			
		||||
	INT32 mapnum = luaL_optinteger(L, 1, gamemap);
 | 
			
		||||
	//HUDSAFE
 | 
			
		||||
	lua_pushboolean(L, G_IsSpecialStage(mapnum));
 | 
			
		||||
	return 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,14 +30,21 @@ void Got_Luacmd(UINT8 **cp, INT32 playernum)
 | 
			
		|||
{
 | 
			
		||||
	UINT8 i, argc, flags;
 | 
			
		||||
	char buf[256];
 | 
			
		||||
	I_Assert(gL != NULL);
 | 
			
		||||
 | 
			
		||||
	// don't use I_Assert here, goto the deny code below
 | 
			
		||||
	// to clean up and kick people who try nefarious exploits
 | 
			
		||||
	// like sending random junk lua commands to crash the server
 | 
			
		||||
 | 
			
		||||
	if (!gL) goto deny;
 | 
			
		||||
	lua_getfield(gL, LUA_REGISTRYINDEX, "COM_Command"); // push COM_Command
 | 
			
		||||
	I_Assert(lua_istable(gL, -1));
 | 
			
		||||
	if (!lua_istable(gL, -1)) goto deny;
 | 
			
		||||
 | 
			
		||||
	argc = READUINT8(*cp);
 | 
			
		||||
	READSTRINGN(*cp, buf, 255);
 | 
			
		||||
	strlwr(buf); // must lowercase buffer
 | 
			
		||||
	lua_getfield(gL, -1, buf); // push command info table
 | 
			
		||||
	I_Assert(lua_istable(gL, -1));
 | 
			
		||||
	if (!lua_istable(gL, -1)) goto deny;
 | 
			
		||||
 | 
			
		||||
	lua_remove(gL, -2); // pop COM_Command
 | 
			
		||||
 | 
			
		||||
	lua_rawgeti(gL, -1, 2); // push flags from command info table
 | 
			
		||||
| 
						 | 
				
			
			@ -47,26 +54,16 @@ void Got_Luacmd(UINT8 **cp, INT32 playernum)
 | 
			
		|||
		flags = (UINT8)lua_tointeger(gL, -1);
 | 
			
		||||
	lua_pop(gL, 1); // pop flags
 | 
			
		||||
 | 
			
		||||
	if (flags & 1 && playernum != serverplayer && playernum != adminplayer)
 | 
			
		||||
	{
 | 
			
		||||
		// not from server or remote admin, must be hacked/buggy client
 | 
			
		||||
		CONS_Alert(CONS_WARNING, M_GetText("Illegal lua command received from %s\n"), player_names[playernum]);
 | 
			
		||||
 | 
			
		||||
		lua_pop(gL, 1); // pop command info table
 | 
			
		||||
 | 
			
		||||
		if (server)
 | 
			
		||||
		{
 | 
			
		||||
			XBOXSTATIC UINT8 bufn[2];
 | 
			
		||||
 | 
			
		||||
			bufn[0] = (UINT8)playernum;
 | 
			
		||||
			bufn[1] = KICK_MSG_CON_FAIL;
 | 
			
		||||
			SendNetXCmd(XD_KICK, &bufn, 2);
 | 
			
		||||
		}
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	// requires server/admin and the player is not one of them
 | 
			
		||||
	if ((flags & 1) && playernum != serverplayer && playernum != adminplayer)
 | 
			
		||||
		goto deny;
 | 
			
		||||
 | 
			
		||||
	lua_rawgeti(gL, -1, 1); // push function from command info table
 | 
			
		||||
	I_Assert(lua_isfunction(gL, -1));
 | 
			
		||||
 | 
			
		||||
	// although honestly this should be true anyway
 | 
			
		||||
	// BUT GODDAMNIT I SAID NO I_ASSERTS SO NO I_ASSERTS IT IS
 | 
			
		||||
	if (!lua_isfunction(gL, -1)) goto deny;
 | 
			
		||||
 | 
			
		||||
	lua_remove(gL, -2); // pop command info table
 | 
			
		||||
 | 
			
		||||
	LUA_PushUserdata(gL, &players[playernum], META_PLAYER);
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +73,20 @@ void Got_Luacmd(UINT8 **cp, INT32 playernum)
 | 
			
		|||
		lua_pushstring(gL, buf);
 | 
			
		||||
	}
 | 
			
		||||
	LUA_Call(gL, (int)argc); // argc is 1-based, so this will cover the player we passed too.
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
deny:
 | 
			
		||||
	//must be hacked/buggy client
 | 
			
		||||
	lua_settop(gL, 0); // clear stack
 | 
			
		||||
	CONS_Alert(CONS_WARNING, M_GetText("Illegal lua command received from %s\n"), player_names[playernum]);
 | 
			
		||||
	if (server)
 | 
			
		||||
	{
 | 
			
		||||
		XBOXSTATIC UINT8 bufn[2];
 | 
			
		||||
 | 
			
		||||
		bufn[0] = (UINT8)playernum;
 | 
			
		||||
		bufn[1] = KICK_MSG_CON_FAIL;
 | 
			
		||||
		SendNetXCmd(XD_KICK, &bufn, 2);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Wrapper for COM_AddCommand commands
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -145,6 +145,7 @@ static int lib_addHook(lua_State *L)
 | 
			
		|||
			lua_pushvalue(L, 2);
 | 
			
		||||
			lua_rawseti(L, -2, hook);
 | 
			
		||||
		}
 | 
			
		||||
		hooksAvailable[hook/8] |= 1<<(hook%8);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +187,6 @@ static int lib_addHook(lua_State *L)
 | 
			
		|||
	if (subfield)
 | 
			
		||||
		Z_Free(subfield);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	hooksAvailable[hook/8] |= 1<<(hook%8);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -344,8 +344,16 @@ static int player_set(lua_State *L)
 | 
			
		|||
	if (hud_running)
 | 
			
		||||
		return luaL_error(L, "Do not alter player_t in HUD rendering code!");
 | 
			
		||||
 | 
			
		||||
	if (fastcmp(field,"mo"))
 | 
			
		||||
		plr->mo = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ));
 | 
			
		||||
	if (fastcmp(field,"mo")) {
 | 
			
		||||
		if (!lua_isnil(L, 3))
 | 
			
		||||
		{
 | 
			
		||||
			plr->mo->player = NULL;
 | 
			
		||||
			plr->mo = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ));
 | 
			
		||||
			plr->mo->player = plr;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			return luaL_error(L, "player.mo should not be nil!");
 | 
			
		||||
	}
 | 
			
		||||
	else if (fastcmp(field,"cmd"))
 | 
			
		||||
		return NOSET;
 | 
			
		||||
	else if (fastcmp(field,"playerstate"))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -351,16 +351,28 @@ static void GIF_lzw(void)
 | 
			
		|||
			scrbuf_pos = scrbuf_linebegin;
 | 
			
		||||
		}
 | 
			
		||||
		// Just a bit of overflow prevention
 | 
			
		||||
		// We leave ourselves 40 bits of space JUST IN CASE the
 | 
			
		||||
		// end of data is right here, as that's EXACTLY how much
 | 
			
		||||
		// the end of data could require at worst
 | 
			
		||||
		if (gifbwr_bufsize >= 250)
 | 
			
		||||
		if (gifbwr_bufsize >= 248)
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	if (scrbuf_pos > scrbuf_writeend)
 | 
			
		||||
	{
 | 
			
		||||
		// 4.15.14 - I failed to account for the possibility that
 | 
			
		||||
		// these two writes could possibly cause minbits increases.
 | 
			
		||||
		// Luckily, we have a guarantee that the first byte CANNOT exceed
 | 
			
		||||
		// the maximum possible code.  So, we do a minbits check here...
 | 
			
		||||
		if (giflzw_nextCodeToAssign++ > (1 << gifbwr_bits_min))
 | 
			
		||||
			++gifbwr_bits_min; // out of room, extend minbits
 | 
			
		||||
		GIF_bwrwrite(giflzw_workingCode);
 | 
			
		||||
 | 
			
		||||
		// And luckily once more, if the data marker somehow IS at
 | 
			
		||||
		// MAXCODE it doesn't matter, because it still marks the
 | 
			
		||||
		// end of the stream and thus no extending will happen!
 | 
			
		||||
		// But still, we need to check minbits again...
 | 
			
		||||
		if (giflzw_nextCodeToAssign++ > (1 << gifbwr_bits_min))
 | 
			
		||||
			++gifbwr_bits_min; // out of room, extend minbits
 | 
			
		||||
		GIF_bwrwrite(GIFLZW_DATAEND);
 | 
			
		||||
 | 
			
		||||
		// Okay, the flush is safe at least.
 | 
			
		||||
		GIF_bwrflush();
 | 
			
		||||
		gif_writeover = 1;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -527,7 +539,8 @@ static void GIF_framewrite(void)
 | 
			
		|||
		while (!gif_writeover)
 | 
			
		||||
		{
 | 
			
		||||
			GIF_lzw(); // main lzw packing loop
 | 
			
		||||
			if ((size_t)(p - gifframe_data) + gifbwr_bufsize > gifframe_size)
 | 
			
		||||
 | 
			
		||||
			if ((size_t)(p - gifframe_data) + gifbwr_bufsize + 1 >= gifframe_size)
 | 
			
		||||
			{
 | 
			
		||||
				INT32 temppos = p - gifframe_data;
 | 
			
		||||
				gifframe_data = Z_Realloc(gifframe_data, (gifframe_size *= 2), PU_STATIC, NULL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2865,6 +2865,13 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
 | 
			
		|||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
#ifdef HAVE_BLUA
 | 
			
		||||
	else if (target->flags & MF_ENEMY)
 | 
			
		||||
	{
 | 
			
		||||
		if (LUAh_MobjDamage(target, inflictor, source, damage) || P_MobjWasRemoved(target))
 | 
			
		||||
			return true;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	player = target->player;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3030,7 +3037,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	// Killing dead. Just for kicks.
 | 
			
		||||
	if (cv_killingdead.value && source && source->player && P_Random() < 80)
 | 
			
		||||
	// Require source and inflictor be player.  Don't hurt for firing rings.
 | 
			
		||||
	if (cv_killingdead.value && (source && source->player) && (inflictor && inflictor->player) && P_Random() < 80)
 | 
			
		||||
		P_DamageMobj(source, target, target, 1);
 | 
			
		||||
 | 
			
		||||
	// do the damage
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								src/p_mobj.c
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								src/p_mobj.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -5883,6 +5883,20 @@ void P_MobjThinker(mobj_t *mobj)
 | 
			
		|||
				mobj->fuse--;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case MT_PLAYER:
 | 
			
		||||
			/// \todo Have the player's dead body completely finish its animation even if they've already respawned.
 | 
			
		||||
			if (!(mobj->flags2 & MF2_DONTDRAW))
 | 
			
		||||
			{
 | 
			
		||||
				if (mobj->player && mobj->player->deadtimer > 3*TICRATE)
 | 
			
		||||
				{ // Go away.
 | 
			
		||||
					/// \todo Actually go ahead and remove mobj completely, and fix any bugs and crashes doing this creates. Chasecam should stop moving, and F12 should never return to it.
 | 
			
		||||
					mobj->momz = 0;
 | 
			
		||||
					mobj->flags2 |= MF2_DONTDRAW;
 | 
			
		||||
				}
 | 
			
		||||
				else // Apply gravity to fall downwards.
 | 
			
		||||
					P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2325,7 +2325,7 @@ boolean P_SetupLevel(boolean skipprecip)
 | 
			
		|||
 | 
			
		||||
	if (cv_runscripts.value && mapheaderinfo[gamemap-1]->scriptname[0] != '#')
 | 
			
		||||
	{
 | 
			
		||||
		if (!mapheaderinfo[gamemap-1]->levelflags & LF_SCRIPTISFILE)
 | 
			
		||||
		if (!(mapheaderinfo[gamemap-1]->levelflags & LF_SCRIPTISFILE))
 | 
			
		||||
		{
 | 
			
		||||
			lumpnum_t lumpnum;
 | 
			
		||||
			char newname[9];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								src/p_user.c
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								src/p_user.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -7772,19 +7772,6 @@ static void P_DeathThink(player_t *player)
 | 
			
		|||
		return;
 | 
			
		||||
 | 
			
		||||
	P_CalcHeight(player);
 | 
			
		||||
 | 
			
		||||
	/// \todo Do all this physics stuff in a seperate thinker to be run by the mobj itself, and have your dead body completely finish its animation even if you've already respawned.
 | 
			
		||||
	if (!(player->mo->flags2 & MF2_DONTDRAW))
 | 
			
		||||
	{
 | 
			
		||||
		if (player->deadtimer > 3*TICRATE)
 | 
			
		||||
		{ // Go away.
 | 
			
		||||
			/// \todo Actually go ahead and remove player->mo completely, and fix any bugs and crashes doing this creates. Chasecam should stop moving, and F12 should never return to it.
 | 
			
		||||
			player->mo->momz = 0;
 | 
			
		||||
			player->mo->flags2 |= MF2_DONTDRAW;
 | 
			
		||||
		}
 | 
			
		||||
		else // Apply gravity to fall downwards.
 | 
			
		||||
			P_SetObjectMomZ(player->mo, -2*FRACUNIT/3, true);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1214,7 +1214,7 @@
 | 
			
		|||
		C01FCF4B08A954540054247B /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 2.1.7;
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 2.1.8;
 | 
			
		||||
				GCC_PREPROCESSOR_DEFINITIONS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					NORMALSRB2,
 | 
			
		||||
| 
						 | 
				
			
			@ -1226,7 +1226,7 @@
 | 
			
		|||
		C01FCF4C08A954540054247B /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 2.1.7;
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 2.1.8;
 | 
			
		||||
				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 | 
			
		||||
				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 | 
			
		||||
				GCC_PREPROCESSOR_DEFINITIONS = (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue