diff --git a/.circleci/config.yml b/.circleci/config.yml
index a2f6ef9d1948e62fbed4e6f2c0ef802170b75046..711be39d76fdfb80c4680bbae19c8dd135af0afb 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -52,7 +52,7 @@ jobs:
           name: Install SDK
           command: apt-get -o Dir::Cache="/root/.cache/apt" -qq -y --no-install-recommends install git build-essential nasm libpng-dev:i386 libsdl2-mixer-dev:i386 libgme-dev:i386 libcurl4-openssl-dev:i386 libopenmpt-dev:i386 gettext ccache wget gcc-multilib upx openssh-client
       - run:
-          name: make md5sum 
+          name: make md5sum
           command: find /root/.cache/apt/archives -type f -print0 | sort -z | xargs -r0 md5sum > /root/.cache/apt_archives.md5
       - save_cache:
           key: v1-SRB2-APT-{{ checksum "/root/.cache/apt_archives.md5" }}
diff --git a/.gitignore b/.gitignore
index 7023aaa80b08949f6d1a1a9d35ff413e5dd02a3a..cd828dc116957ceda70d6c5b8a2b929b158f1f80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,5 @@ Win32_LIB_ASM_Release
 /assets/debian
 /make
 /bin
+/build
+/build.*
diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg
index 5580140737716a175c69bba08b8a51f3422b544c..bf1d45f9dea671c51b6cdeab4dc572c3bfea828b 100644
--- a/extras/conf/SRB2-22.cfg
+++ b/extras/conf/SRB2-22.cfg
@@ -6884,7 +6884,7 @@ thingtypes
 	{
 		color = 10; // Green
 		title = "Tutorial";
-		
+
 		799
 		{
 			title = "Tutorial Plant";
diff --git a/src/b_bot.c b/src/b_bot.c
index 775a13e294cf31e8070a9f6fc51894f91317496c..a12aedcf57ada181060e4daa0bb296b52361fed4 100644
--- a/src/b_bot.c
+++ b/src/b_bot.c
@@ -30,7 +30,7 @@ void B_UpdateBotleader(player_t *player)
 	{
 		if (players[i].bot || players[i].playerstate != PST_LIVE || players[i].spectator || !players[i].mo)
 			continue;
-		
+
 		if (!player->botleader)
 		{
 			player->botleader = &players[i]; // set default
@@ -85,7 +85,7 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
 	boolean stalled = (bmom < scale >> 1) && dist > followthres; // Helps to see if the AI is having trouble catching up
 	boolean samepos = (sonic->x == tails->x && sonic->y == tails->y);
 	boolean blocked = bot->blocked;
-	
+
 	if (!samepos)
 		ang = R_PointToAngle2(tails->x, tails->y, sonic->x, sonic->y);
 
@@ -448,10 +448,10 @@ void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward
 			cmd->forwardmove += MAXPLMOVE<<FRACBITS>>16;
 		if (backward)
 			cmd->forwardmove -= MAXPLMOVE<<FRACBITS>>16;
- 		if (left)
+		if (left)
 			cmd->angleturn += 1280;
 		if (right)
-			cmd->angleturn -= 1280; 
+			cmd->angleturn -= 1280;
 		if (strafeleft)
 			cmd->sidemove -= MAXPLMOVE<<FRACBITS>>16;
 		if (straferight)
@@ -486,7 +486,7 @@ boolean B_CheckRespawn(player_t *player)
 	//We don't have a main player to spawn to!
 	if (!player->botleader)
 		return false;
-	
+
 	sonic = player->botleader->mo;
 	// We can't follow Sonic if he's not around!
 	if (!sonic || sonic->health <= 0)
diff --git a/src/blua/liolib.c b/src/blua/liolib.c
index 5eec97fb4b7b4e5e4f47637b34b0444c1750a334..e029650c0ced525f3bfc56fc9863d9816f6ebb63 100644
--- a/src/blua/liolib.c
+++ b/src/blua/liolib.c
@@ -641,4 +641,3 @@ LUALIB_API int luaopen_io (lua_State *L) {
   lua_pop(L, 1);  /* pop environment for default files */
   return 1;
 }
-
diff --git a/src/d_player.h b/src/d_player.h
index 755926480ae9c2b2b90383659ec079230e48a881..c5c637d37af77a740ac8ecd2d077df331a1590d7 100644
--- a/src/d_player.h
+++ b/src/d_player.h
@@ -344,7 +344,7 @@ typedef struct botmem_s
 {
 	boolean lastForward;
 	boolean lastBlocked;
-	boolean blocked;	
+	boolean blocked;
 	UINT8 catchup_tics;
 	UINT8 thinkstate;
 } botmem_t;
@@ -565,7 +565,7 @@ typedef struct player_s
 	UINT16 lastbuttons;
 	botmem_t botmem;
 	boolean blocked;
-	
+
 	tic_t jointime; // Timer when player joins game to change skin/color
 	tic_t quittime; // Time elapsed since user disconnected, zero if connected
 #ifdef HWRENDER
diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 92076e64407fdfe7b938141627414274bae3d3ca..2bd7c50714a799a1cfbeca1adff237f4db8acc46 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -16,7 +16,7 @@
 
 #ifdef HWRENDER
 #include "hw_glob.h"
-#include "hw_light.h"
+#include "hw_light.h
 #include "hw_drv.h"
 #include "hw_batching.h"
 
@@ -3222,7 +3222,7 @@ static void HWR_Subsector(size_t num)
 					                        *rover->topheight,
 					                        *gl_frontsector->lightlist[light].lightlevel,
 					                        rover->alpha-1 > 255 ? 255 : rover->alpha-1, rover->master->frontsector,
- 					                        HWR_RippleBlend(gl_frontsector, rover, false) | (rover->blend ? HWR_GetBlendModeFlag(rover->blend) : PF_Translucent),
+					                        HWR_RippleBlend(gl_frontsector, rover, false) | (rover->blend ? HWR_GetBlendModeFlag(rover->blend) : PF_Translucent),
 					                        false, *gl_frontsector->lightlist[light].extra_colormap);
 				}
 				else
diff --git a/src/p_enemy.c b/src/p_enemy.c
index 26682ee326207d8c47c2c356592e612250174bea..987e83c5e15c09bcb871aef6ab5e7d3014a8c84a 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -11827,7 +11827,7 @@ void A_FlickyCenter(mobj_t *actor)
 		if (actor->target && P_AproxDistance(actor->target->x - originx, actor->target->y - originy) < actor->extravalue1)
 		{
 			actor->extravalue2 = 1;
-		 	P_TeleportMove(actor, actor->target->x, actor->target->y, actor->target->z);
+			P_TeleportMove(actor, actor->target->x, actor->target->y, actor->target->z);
 		}
 		else if(actor->extravalue2)
 		{
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 17be0300a8984aebc3acb101d09ee92b90d21245..fb3edfa43358ffb0fe1945b18a478670db63d283 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -10477,7 +10477,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
 
 	if (type == MT_NULL)
 	{
-#if 0		
+#if 0
 #ifdef PARANOIA
 		I_Error("Tried to spawn MT_NULL\n");
 #endif
diff --git a/src/p_saveg.c b/src/p_saveg.c
index 99ec58bb97c74080ad171d40a65bbf804c25459c..ab7cf2347277afa1b025223a611f4c06c6c8ca9c 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -202,7 +202,7 @@ static void P_NetArchivePlayers(void)
 		WRITEUINT8(save_p, players[i].botmem.catchup_tics);
 		WRITEUINT8(save_p, players[i].botmem.thinkstate);
 		WRITEUINT8(save_p, players[i].removing);
-		
+
 		WRITEUINT8(save_p, players[i].blocked);
 		WRITEUINT16(save_p, players[i].lastbuttons);
 
@@ -424,7 +424,7 @@ static void P_NetUnArchivePlayers(void)
 		// Bots //
 		//////////
 		players[i].bot = READUINT8(save_p);
-		
+
 		players[i].botmem.lastForward = READUINT8(save_p);
 		players[i].botmem.lastBlocked = READUINT8(save_p);
 		players[i].botmem.catchup_tics = READUINT8(save_p);
@@ -433,7 +433,7 @@ static void P_NetUnArchivePlayers(void)
 
 		players[i].blocked = READUINT8(save_p);
 		players[i].lastbuttons = READUINT16(save_p);
-		
+
 		////////////////////////////
 		// Conveyor Belt Movement //
 		////////////////////////////
diff --git a/src/p_setup.c b/src/p_setup.c
index a1c96bed3f52d39ae4f82eb0bb3168de5c0e78cf..8ec5672d24f2f19790bf78d311a23545864db331 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -1250,7 +1250,7 @@ static void P_LoadSidedefs(UINT8 *data)
 					sd->midtexture = get_number(process);
 				}
 
- 				sd->text = Z_Malloc(7, PU_LEVEL, NULL);
+				sd->text = Z_Malloc(7, PU_LEVEL, NULL);
 				if (isfrontside && !(msd->toptexture[0] == '-' && msd->toptexture[1] == '\0'))
 				{
 					M_Memcpy(process,msd->toptexture,8);
diff --git a/src/p_user.c b/src/p_user.c
index 1f14d96c135b6ca512371caab9ec2e327204206f..0765d3e2624dfd8160a966d47d8e01de41084ee5 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -1,3 +1,4 @@
+
 // SONIC ROBO BLAST 2
 //-----------------------------------------------------------------------------
 // Copyright (C) 1993-1996 by id Software, Inc.
@@ -1518,8 +1519,8 @@ void P_PlayJingle(player_t *player, jingletype_t jingletype)
 	char newmusic[7];
 	strncpy(newmusic, musname, 7);
 #ifdef HAVE_LUA_MUSICPLUS
- 	if(LUAh_MusicJingle(jingletype, newmusic, &musflags, &looping))
- 		return;
+	if(LUAh_MusicJingle(jingletype, newmusic, &musflags, &looping))
+		return;
 #endif
 	newmusic[6] = 0;
 
@@ -1609,7 +1610,7 @@ boolean P_EvaluateMusicStatus(UINT16 status, const char *musname)
 
 		if (result)
 			break;
- 	}
+	}
 
 	return result;
  }
@@ -1666,8 +1667,8 @@ void P_RestoreMusic(player_t *player)
 	else if (!S_RecallMusic(JT_NONE, false)) // go down the stack
 	{
 		CONS_Debug(DBG_BASIC, "Cannot find any music in resume stack!\n");
-	 	S_ChangeMusicEx(mapmusname, mapmusflags, true, mapmusposition, 0, 0);
- 	}
+		S_ChangeMusicEx(mapmusname, mapmusflags, true, mapmusposition, 0, 0);
+	}
 }
 
 //
diff --git a/src/r_skins.c b/src/r_skins.c
index cd53128d2297558c48ed7d79d026d081f0c1b8a1..92fd6cfae29be2e90c7c55a69aa62fdc58511a6f 100644
--- a/src/r_skins.c
+++ b/src/r_skins.c
@@ -236,7 +236,7 @@ boolean R_SkinUsable(INT32 playernum, INT32 skinnum)
 		// Force 2.
 		return true;
 	}
-	
+
 	if (metalrecording && skinnum == 5)
 	{
 		// Force 3.
diff --git a/src/s_sound.c b/src/s_sound.c
index 7e61e8a5585843240f5da219ab726157d35232a6..fc5f51da797e572b6a57ad4690440218f5ec88fd 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -2259,9 +2259,9 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32
 		return;
 	newmusic[6] = 0;
 
- 	// No Music (empty string)
+	// No Music (empty string)
 	if (newmusic[0] == 0)
- 	{
+	{
 		if (prefadems)
 			I_FadeSong(0, prefadems, &S_StopMusic);
 		else
@@ -2279,7 +2279,7 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32
 	}
 	else if (strnicmp(music_name, newmusic, 6) || (mflags & MUSIC_FORCERESET) ||
 		(midipref != currentmidi && S_PrefAvailable(midipref, newmusic)))
- 	{
+	{
 		CONS_Debug(DBG_DETAILED, "Now playing song %s\n", newmusic);
 
 		S_StopMusic();
@@ -2302,7 +2302,7 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32
 	{
 		I_SetSongPosition(position);
 		I_FadeSong(100, fadeinms, NULL);
- 	}
+}
 	else // reset volume to 100 with same music
 	{
 		I_StopFadingSong();
diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c
index a27a5ebd2687b9e7c6dee529e3a40aa9c76f54e1..ae661761ca8334ea8d95c2e174f6de022cacdf3a 100644
--- a/src/sdl/i_video.c
+++ b/src/sdl/i_video.c
@@ -1,3 +1,4 @@
+
 // Emacs style mode select   -*- C++ -*-
 // SONIC ROBO BLAST 2
 //-----------------------------------------------------------------------------
@@ -1068,7 +1069,7 @@ void I_GetEvent(void)
 				// update the menu
 				if (currentMenu == &OP_JoystickSetDef)
 					M_SetupJoystickMenu(0);
-			 	break;
+				break;
 			case SDL_QUIT:
 				LUA_HookBool(true, HOOK(GameQuit));
 				I_Quit();
diff --git a/tools/masterserver/structure.sql b/tools/masterserver/structure.sql
index 013c223839813b45cc51454ac4031b3444f9eb60..d431419aa96b3ce3c120f32099f65cf4ab402bf5 100644
--- a/tools/masterserver/structure.sql
+++ b/tools/masterserver/structure.sql
@@ -90,7 +90,7 @@ CREATE TABLE `ms_versions` (
   `mod_vstring` varchar(45) NOT NULL DEFAULT 'v1.0',
   `mod_codebase` int(10) unsigned NOT NULL DEFAULT 205,
   `mod_name` varchar(255) NOT NULL DEFAULT 'Default MOD Name',
-  `mod_url` text NOT NULL 
+  `mod_url` text NOT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 
 --
@@ -118,4 +118,4 @@ COMMIT;
 
 /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
 /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
\ No newline at end of file
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;