diff --git a/src/lua_maplib.c b/src/lua_maplib.c
index d8363429196de11440621478b8971a762bbba0f4..975ea1cb177b3f72446440a67c2a9d89ac2916bd 100644
--- a/src/lua_maplib.c
+++ b/src/lua_maplib.c
@@ -1359,15 +1359,19 @@ static int slope_set(lua_State *L)
 	}
 	case slope_zdelta: { // zdelta, this is temp until i figure out wtf to do
 		slope->zdelta = luaL_checkfixed(L, 3);
-		slope->zangle = R_PointToAngle2(0, 0, FRACUNIT, slope->zdelta);
+		slope->zangle = R_PointToAngle2(0, 0, FRACUNIT, -slope->zdelta);
 		P_CalculateSlopeNormal(slope);
 		break;
 	}
-	case slope_zangle: // zangle
-		slope->zangle = luaL_checkangle(L, 3);
-		slope->zdelta = FINETANGENT(slope->zangle>>ANGLETOFINESHIFT);
+	case slope_zangle: { // zangle
+		angle_t zangle = luaL_checkangle(L, 3);
+		if (zangle == ANGLE_90 || zangle == ANGLE_270)
+			return luaL_error(L, "invalid zangle for slope!");
+		slope->zangle = zangle;
+		slope->zdelta = -FINETANGENT(((slope->zangle+ANGLE_90)>>ANGLETOFINESHIFT) & 4095);
 		P_CalculateSlopeNormal(slope);
 		break;
+	}
 	case slope_xydirection: // xydirection
 		slope->xydirection = luaL_checkangle(L, 3);
 		P_CalculateSlopeNormal(slope);