diff --git a/.travis.yml b/.travis.yml
index df89593c4ab62be3b9bd89c2d83162491bf58eee..54c5901d07c591f1a3abf2872d18a8d448ab675a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,6 +2,9 @@ language: c
 sudo: required
 dist: trusty
 
+env:
+- CFLAGS=-Wall -W -Werror
+
 os:
   - linux
   - osx
diff --git a/src/am_map.c b/src/am_map.c
index 70714facb62d07b4dff1edc281d531e03b4bf284..97b7c51642bbea4d87d22d197cd46ed15d986f26 100644
--- a/src/am_map.c
+++ b/src/am_map.c
@@ -30,9 +30,7 @@ static const UINT8 REDRANGE    = 16;
 static const UINT8 GRAYS       = (1*16);
 static const UINT8 GRAYSRANGE  = 16;
 static const UINT8 BROWNS      = (3*16);
-static const UINT8 BROWNRANGE  = 16;
 static const UINT8 YELLOWS     = (7*16);
-static const UINT8 YELLOWRANGE = 8;
 static const UINT8 GREENS      = (10*16);
 static const UINT8 GREENRANGE  = 16;
 static const UINT8 DBLACK      = 31;
@@ -41,11 +39,8 @@ static const UINT8 DWHITE      = 0;
 static const UINT8 NOCLIMBREDS        = 248;
 static const UINT8 NOCLIMBREDRANGE    = 8;
 static const UINT8 NOCLIMBGRAYS       = 204;
-static const UINT8 NOCLIMBGRAYSRANGE  = 4;
 static const UINT8 NOCLIMBBROWNS      = (2*16);
-static const UINT8 NOCLIMBBROWNRANGE  = 16;
 static const UINT8 NOCLIMBYELLOWS     = (11*16);
-static const UINT8 NOCLIMBYELLOWRANGE = 8;
 
 
 #ifdef _NDS
@@ -67,15 +62,10 @@ static const UINT8 NOCLIMBYELLOWRANGE = 8;
 #define TSWALLCOLORS          GRAYS
 #define TSWALLRANGE           GRAYSRANGE
 #define NOCLIMBTSWALLCOLORS   NOCLIMBGRAYS
-#define NOCLIMBTSWALLRANGE    NOCLIMBGRAYSRANGE
 #define FDWALLCOLORS          BROWNS
-#define FDWALLRANGE           BROWNRANGE
 #define NOCLIMBFDWALLCOLORS   NOCLIMBBROWNS
-#define NOCLIMBFDWALLRANGE    NOCLIMBBROWNRANGE
 #define CDWALLCOLORS          YELLOWS
-#define CDWALLRANGE           YELLOWRANGE
 #define NOCLIMBCDWALLCOLORS   NOCLIMBYELLOWS
-#define NOCLIMBCDWALLRANGE    NOCLIMBYELLOWRANGE
 #define THINGCOLORS           GREENS
 #define THINGRANGE            GREENRANGE
 #define SECRETWALLCOLORS      WALLCOLORS
@@ -255,29 +245,6 @@ static AMDRAWFLINEFUNC AM_drawFline;
 
 static void AM_drawFline_soft(const fline_t *fl, INT32 color);
 
-/** Calculates the slope and slope according to the x-axis of a line
-  * segment in map coordinates (with the upright y-axis and all) so
-  * that it can be used with the braindead drawing stuff.
-  *
-  * \param ml The line segment.
-  * \param is Holds the result.
-  */
-static inline void AM_getIslope(const mline_t *ml, islope_t *is)
-{
-	INT32 dx, dy;
-
-	dy = ml->a.y - ml->b.y;
-	dx = ml->b.x - ml->a.x;
-	if (!dy)
-		is->islp = (dx < 0 ? -INT32_MAX : INT32_MAX);
-	else
-		is->islp = FixedDiv(dx, dy);
-	if (!dx)
-		is->slp = (dy < 0 ? -INT32_MAX : INT32_MAX);
-	else
-		is->slp = FixedDiv(dy, dx);
-}
-
 static void AM_activateNewScale(void)
 {
 	m_x += m_w/2;
diff --git a/src/b_bot.c b/src/b_bot.c
index 3072b1d75785d2b2834760c166e08fb10f28e99f..e9b00497e1d55a062748d358027a25d53a689c11 100644
--- a/src/b_bot.c
+++ b/src/b_bot.c
@@ -49,7 +49,7 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm
 		if (sonic->player->pflags & (PF_MACESPIN|PF_ITEMHANG))
 		{
 			cmd->forwardmove = sonic->player->cmd.forwardmove;
-			cmd->angleturn = abs((tails->angle - sonic->angle))>>16;
+			cmd->angleturn = abs((signed)(tails->angle - sonic->angle))>>16;
 			if (sonic->angle < tails->angle)
 				cmd->angleturn = -cmd->angleturn;
 		} else if (dist > FixedMul(512*FRACUNIT, tails->scale))
diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index b0186049a0849327d94620846aa2fa3a0ae245c0..ae26b8deb73db848b28d47a0597fc59ae971bcd6 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -3404,12 +3404,6 @@ static void HWR_ClearSprites(void)
 	gr_visspritecount = 0;
 }
 
-static inline void HWR_ResetVisSpriteChunks(void)
-{
-	memset(gr_visspritechunks, 0, sizeof(gr_visspritechunks));
-}
-
-
 // --------------------------------------------------------------------------
 // HWR_NewVisSprite
 // --------------------------------------------------------------------------
diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c
index 0745b9a008ddeea934de0132df1c0aeb50a288ff..a160be67b1c15925929dd31c920d8842e341829c 100644
--- a/src/hardware/hw_md2.c
+++ b/src/hardware/hw_md2.c
@@ -406,191 +406,6 @@ static md2_model_t *md2_readModel(const char *filename)
 	return model;
 }
 
-/*
- * center model
- */
-static inline void md2_getBoundingBox (md2_model_t *model, float *minmax)
-{
-	size_t i;
-	float minx, maxx;
-	float miny, maxy;
-	float minz, maxz;
-
-	minx = miny = minz = 999999.0f;
-	maxx = maxy = maxz = -999999.0f;
-
-	/* get bounding box */
-	for (i = 0; i < model->header.numVertices; i++)
-	{
-		md2_triangleVertex_t *v = &model->frames[0].vertices[i];
-
-		if (v->vertex[0] < minx)
-			minx = v->vertex[0];
-		else if (v->vertex[0] > maxx)
-			maxx = v->vertex[0];
-
-		if (v->vertex[1] < miny)
-			miny = v->vertex[1];
-		else if (v->vertex[1] > maxy)
-			maxy = v->vertex[1];
-
-		if (v->vertex[2] < minz)
-			minz = v->vertex[2];
-		else if (v->vertex[2] > maxz)
-			maxz = v->vertex[2];
-	}
-
-	minmax[0] = minx;
-	minmax[1] = maxx;
-	minmax[2] = miny;
-	minmax[3] = maxy;
-	minmax[4] = minz;
-	minmax[5] = maxz;
-}
-
-static inline INT32 md2_getAnimationCount(md2_model_t *model)
-{
-	size_t i, pos;
-	INT32 j = 0, count;
-	char name[16], last[16];
-
-	strcpy(last, model->frames[0].name);
-	pos = strlen(last) - 1;
-	while (last[pos] >= '0' && last[pos] <= '9' && j < 2)
-	{
-		pos--;
-		j++;
-	}
-	last[pos + 1] = '\0';
-
-	count = 0;
-
-	for (i = 0; i <= model->header.numFrames; i++)
-	{
-		if (i == model->header.numFrames)
-			strcpy(name, ""); // some kind of a sentinel
-		else
-			strcpy(name, model->frames[i].name);
-		pos = strlen(name) - 1;
-		j = 0;
-		while (name[pos] >= '0' && name[pos] <= '9' && j < 2)
-		{
-			pos--;
-			j++;
-		}
-		name[pos + 1] = '\0';
-
-		if (strcmp(last, name))
-		{
-			strcpy(last, name);
-			count++;
-		}
-	}
-
-	return count;
-}
-
-static inline const char * md2_getAnimationName (md2_model_t *model, INT32 animation)
-{
-	size_t i, pos;
-	INT32 j = 0, count;
-	static char last[32];
-	char name[32];
-
-	strcpy(last, model->frames[0].name);
-	pos = strlen(last) - 1;
-	while (last[pos] >= '0' && last[pos] <= '9' && j < 2)
-	{
-		pos--;
-		j++;
-	}
-	last[pos + 1] = '\0';
-
-	count = 0;
-
-	for (i = 0; i <= model->header.numFrames; i++)
-	{
-		if (i == model->header.numFrames)
-			strcpy(name, ""); // some kind of a sentinel
-		else
-			strcpy(name, model->frames[i].name);
-		pos = strlen(name) - 1;
-		j = 0;
-		while (name[pos] >= '0' && name[pos] <= '9' && j < 2)
-		{
-			pos--;
-			j++;
-		}
-		name[pos + 1] = '\0';
-
-		if (strcmp(last, name))
-		{
-			if (count == animation)
-				return last;
-
-			strcpy(last, name);
-			count++;
-		}
-	}
-
-	return 0;
-}
-
-static inline void md2_getAnimationFrames(md2_model_t *model,
-	INT32 animation, INT32 *startFrame, INT32 *endFrame)
-{
-	size_t i, pos;
-	INT32 j = 0, count, numFrames, frameCount;
-	char name[16], last[16];
-
-	strcpy(last, model->frames[0].name);
-	pos = strlen(last) - 1;
-	while (last[pos] >= '0' && last[pos] <= '9' && j < 2)
-	{
-		pos--;
-		j++;
-	}
-	last[pos + 1] = '\0';
-
-	count = 0;
-	numFrames = 0;
-	frameCount = 0;
-
-	for (i = 0; i <= model->header.numFrames; i++)
-	{
-		if (i == model->header.numFrames)
-			strcpy(name, ""); // some kind of a sentinel
-		else
-			strcpy(name, model->frames[i].name);
-		pos = strlen(name) - 1;
-		j = 0;
-		while (name[pos] >= '0' && name[pos] <= '9' && j < 2)
-		{
-			pos--;
-			j++;
-		}
-		name[pos + 1] = '\0';
-
-		if (strcmp(last, name))
-		{
-			strcpy(last, name);
-
-			if (count == animation)
-			{
-				*startFrame = frameCount - numFrames;
-				*endFrame = frameCount - 1;
-				return;
-			}
-
-			count++;
-			numFrames = 0;
-		}
-		frameCount++;
-		numFrames++;
-	}
-	*startFrame = *endFrame = 0;
-}
-
 static inline void md2_printModelInfo (md2_model_t *model)
 {
 #if 0
diff --git a/src/lua_hudlib.c b/src/lua_hudlib.c
index 19390d50df00d5b811b330b349949726399ac884..d5947489aebfedf657f12334ff2e898461848fcb 100644
--- a/src/lua_hudlib.c
+++ b/src/lua_hudlib.c
@@ -408,7 +408,7 @@ static int libd_drawPaddedNum(lua_State *L)
 	HUDONLY
 	x = luaL_checkinteger(L, 1);
 	y = luaL_checkinteger(L, 2);
-	num = abs(luaL_checkinteger(L, 3));
+	num = labs(luaL_checkinteger(L, 3));
 	digits = luaL_optinteger(L, 4, 2);
 	flags = luaL_optinteger(L, 5, 0);
 	flags &= ~V_PARAMMASK; // Don't let crashes happen.
diff --git a/src/m_cheat.c b/src/m_cheat.c
index 8cea4c6ae1ea743e6d998792c550977d1252a70d..c8a19666b0acd2e46d6537b468d7eceb839bef7d 100644
--- a/src/m_cheat.c
+++ b/src/m_cheat.c
@@ -161,26 +161,6 @@ static UINT8 cht_CheckCheat(cheatseq_t *cht, char key)
 	return rc;
 }
 
-static inline void cht_GetParam(cheatseq_t *cht, char *buffer)
-{
-	UINT8 *p;
-	UINT8 c;
-
-	p = cht->sequence;
-	while (*(p++) != 1)
-		;
-
-	do
-	{
-		c = *p;
-		*(buffer++) = c;
-		*(p++) = 0;
-	} while (c && *p != 0xff);
-
-	if (*p == 0xff)
-		*buffer = 0;
-}
-
 boolean cht_Responder(event_t *ev)
 {
 	UINT8 ret = 0, ch = 0;
diff --git a/src/mserv.c b/src/mserv.c
index 568474d73e1219d46395dc4e832419ababab81a9..c47d149ee5c1f7f560a30e94e85340470f94a166 100644
--- a/src/mserv.c
+++ b/src/mserv.c
@@ -351,33 +351,6 @@ static INT32 GetServersList(void)
 }
 #endif
 
-/** Get the MOTD from the master server.
-  */
-static inline INT32 GetMSMOTD(void)
-{
-	msg_t msg;
-	INT32 count = 0;
-
-	msg.type = GET_MOTD_MSG;
-	msg.length = 0;
-	if (MS_Write(&msg) < 0)
-		return MS_WRITE_ERROR;
-
-	while (MS_Read(&msg) >= 0)
-	{
-		if (!msg.length)
-		{
-			if (!count)
-				CONS_Alert(CONS_NOTICE, M_GetText("No servers currently running.\n"));
-			return MS_NO_ERROR;
-		}
-		count++;
-		CONS_Printf("%s",msg.buffer);
-	}
-
-	return MS_READ_ERROR;
-}
-
 //
 // MS_Connect()
 //
diff --git a/src/p_map.c b/src/p_map.c
index 1aa8bc391cac84a118de6f356cf581358920e110..bcb3c08a98c7c027576131774369c2b788302821 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -2507,8 +2507,8 @@ isblocking:
 
 			climbangle += (ANGLE_90 * (whichside ? -1 : 1));
 
-			if (((!slidemo->player->climbing && abs((slidemo->angle - ANGLE_90 - climbline)) < ANGLE_45)
-			|| (slidemo->player->climbing == 1 && abs((slidemo->angle - climbline)) < ANGLE_135))
+			if (((!slidemo->player->climbing && abs((signed)(slidemo->angle - ANGLE_90 - climbline)) < ANGLE_45)
+			|| (slidemo->player->climbing == 1 && abs((signed)(slidemo->angle - climbline)) < ANGLE_135))
 			&& P_IsClimbingValid(slidemo->player, climbangle))
 			{
 				slidemo->angle = climbangle;
diff --git a/src/p_maputl.c b/src/p_maputl.c
index 48dd54e8da8efbcebfc6183d9fa817698a2f54e8..2aa6678119e4a9a971cb4765c03c324e8832ba80 100644
--- a/src/p_maputl.c
+++ b/src/p_maputl.c
@@ -34,21 +34,6 @@ fixed_t P_AproxDistance(fixed_t dx, fixed_t dy)
 	return dx + dy - (dy>>1);
 }
 
-//
-// P_PartialDistance
-// Useful only for iterations finding the 'closest point'
-//
-FUNCMATH static inline fixed_t P_PartialDistance(fixed_t dx, fixed_t dy)
-{
-	dx >>= FRACBITS;
-	dy >>= FRACBITS;
-
-	dx *= dx;
-	dy *= dy;
-
-	return dx + dy;
-}
-
 //
 // P_ClosestPointOnLine
 // Finds the closest point on a given line to the supplied point
diff --git a/src/p_spec.c b/src/p_spec.c
index 8228c60b3e5e085276d9a0ca23a420798b5adbcb..a292a8bb0343471285c4b75da425933ba4700f74 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -102,7 +102,7 @@ static void Add_Pusher(pushertype_e type, fixed_t x_mag, fixed_t y_mag, mobj_t *
 static void Add_MasterDisappearer(tic_t appeartime, tic_t disappeartime, tic_t offset, INT32 line, INT32 sourceline);
 static void P_AddBlockThinker(sector_t *sec, line_t *sourceline);
 static void P_AddFloatThinker(sector_t *sec, INT32 tag, line_t *sourceline);
-static void P_AddBridgeThinker(line_t *sourceline, sector_t *sec);
+//static void P_AddBridgeThinker(line_t *sourceline, sector_t *sec);
 static void P_AddFakeFloorsByLine(size_t line, ffloortype_e ffloorflags, thinkerlist_t *secthinkers);
 static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec);
 static void Add_Friction(INT32 friction, INT32 movefactor, INT32 affectee, INT32 referrer);
@@ -593,6 +593,7 @@ void P_SetupLevelFlatAnims(void)
 // UTILITIES
 //
 
+#if 0
 /** Gets a side from a sector line.
   *
   * \param currentSector Sector the line is in.
@@ -632,6 +633,7 @@ static inline boolean twoSided(INT32 sector, INT32 line)
 {
 	return (sectors[sector].lines[line])->sidenum[1] != 0xffff;
 }
+#endif
 
 /** Finds sector next to current.
   *
@@ -5050,6 +5052,7 @@ static void P_AddFloatThinker(sector_t *sec, INT32 tag, line_t *sourceline)
   * \sa P_SpawnSpecials, T_BridgeThinker
   * \author SSNTails <http://www.ssntails.org>
   */
+/*
 static inline void P_AddBridgeThinker(line_t *sourceline, sector_t *sec)
 {
 	levelspecthink_t *bridge;
@@ -5072,6 +5075,7 @@ static inline void P_AddBridgeThinker(line_t *sourceline, sector_t *sec)
 	bridge->vars[4] = sourceline->tag; // Start tag
 	bridge->vars[5] = (sides[sourceline->sidenum[0]].textureoffset>>FRACBITS); // End tag
 }
+*/
 
 /** Adds a Mario block thinker, which changes the block's texture between blank
   * and ? depending on whether it has contents.
diff --git a/src/p_user.c b/src/p_user.c
index ce68e2d61665a1c382b2524f3d7d69d92e82fb5e..6053ad1e5dab9772ea4783f8a5f999c72f232543 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -7899,9 +7899,9 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
 		if (player == &players[consoleplayer])
 		{
 			if (focusangle >= localangle)
-				localangle += abs((focusangle - localangle))>>5;
+				localangle += abs((signed)(focusangle - localangle))>>5;
 			else
-				localangle -= abs((focusangle - localangle))>>5;
+				localangle -= abs((signed)(focusangle - localangle))>>5;
 		}
 	}
 	else if (P_AnalogMove(player)) // Analog
diff --git a/src/r_things.c b/src/r_things.c
index 9a8b1319bd1ee226c5f238fae706233152d28483..c5f3c524505eccebeca58914cd8da9379a163bdf 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -550,11 +550,6 @@ void R_ClearSprites(void)
 	visspritecount = clippedvissprites = 0;
 }
 
-static inline void R_ResetVisSpriteChunks(void)
-{
-	memset(visspritechunks, 0, sizeof(visspritechunks));
-}
-
 //
 // R_NewVisSprite
 //
diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c
index 963310a261546984379b7fe105e761fb8c7d351a..0f9fa58a8ef44079c5112aa186682fbdf9f7df77 100644
--- a/src/sdl/i_video.c
+++ b/src/sdl/i_video.c
@@ -126,8 +126,6 @@ static       Uint8       BitsPerPixel = 16;
 #endif
 Uint16      realwidth = BASEVIDWIDTH;
 Uint16      realheight = BASEVIDHEIGHT;
-static const Uint32      surfaceFlagsW = 0/*|SDL_RESIZABLE*/;
-static const Uint32      surfaceFlagsF = 0;
 static       SDL_bool    mousegrabok = SDL_TRUE;
 #define HalfWarpMouse(x,y) SDL_WarpMouseInWindow(window, (Uint16)(x/2),(Uint16)(y/2))
 static       SDL_bool    videoblitok = SDL_FALSE;
@@ -1252,17 +1250,6 @@ static inline boolean I_SkipFrame(void)
 	}
 }
 
-static inline SDL_bool SDLmatchVideoformat(void)
-{
-	const SDL_PixelFormat *vidformat = vidSurface->format;
-	const INT32 vfBPP = vidformat?vidformat->BitsPerPixel:0;
-	return (((vfBPP == 8 && vid.bpp == 1 &&
-	 !vidformat->Rmask && !vidformat->Gmask && !vidformat->Bmask) ||
-	 (vfBPP == 15 && vid.bpp == 2 && vidformat->Rmask == 0x7C00 &&
-	 vidformat->Gmask == 0x03E0 && vidformat->Bmask == 0x001F )) &&
-	 !vidformat->Amask && (vidSurface->flags & SDL_RLEACCEL) == 0);
-}
-
 //
 // I_FinishUpdate
 //