diff --git a/lib/Paths.hs b/lib/Paths.hs
index b849cf612981eb6a1f0c252bafb322ab824260d7..83c065f962d1682a16c1c6d4fcce54fbc9d4d752 100644
--- a/lib/Paths.hs
+++ b/lib/Paths.hs
@@ -68,3 +68,9 @@ isOldStyle (Path _ text frag) = path =~ ("{<.+>*}" :: Text)
   where path = case frag of
           Just f -> text <> f
           _ -> text
+
+getExtension :: RelPath -> Text
+getExtension (Path _ text frag) = case length splitted of
+  0 -> ""
+  _ -> last splitted
+  where splitted = T.splitOn "." text
diff --git a/lib/Properties.hs b/lib/Properties.hs
index c278351427d679fdac84079400e9c3b166e958eb..c106b9f968448b0df66813129523d3bb7d91c7ac 100644
--- a/lib/Properties.hs
+++ b/lib/Properties.hs
@@ -11,7 +11,7 @@ module Properties (checkMap, checkTileset, checkLayer) where
 
 
 import           Control.Monad (forM_, unless, when)
-import           Data.Text     (Text, isPrefixOf, intercalate)
+import           Data.Text     (Text, intercalate, isPrefixOf)
 import qualified Data.Vector   as V
 import           Tiled         (Layer (..), Object (..), Property (..),
                                 PropertyValue (..), Tile (..), Tiledmap (..),
@@ -35,7 +35,8 @@ import           LintConfig    (LintConfig (..))
 import           LintWriter    (LintWriter, adjust, askContext, askFileDepth,
                                 complain, dependsOn, forbid, lintConfig,
                                 offersBadge, offersEntrypoint, suggest, warn)
-import           Paths         (PathResult (..), RelPath (..), parsePath, isOldStyle)
+import           Paths         (PathResult (..), RelPath (..), getExtension,
+                                isOldStyle, parsePath)
 import           Types         (Dep (Link, Local, LocalMap, MapLink))
 import           Uris          (SubstError (..), applySubst)
 
@@ -323,10 +324,17 @@ checkTileLayerProperty p@(Property name _value) = case name of
       forbidEmptyLayer
       unwrapURI (Proxy @"map") p
         (dependsOn . MapLink)
-        (\path -> do
-            if isOldStyle path
-              then complain "Old-Style inter-repository links (using {<placeholder>}) cannot be used at rC3 2021; please use world:// instead (cf. howto.rc3.world)."
-              else dependsOn . LocalMap $ path)
+        $ \path ->
+          let ext = getExtension path in
+          if | isOldStyle path ->
+               complain "Old-Style inter-repository links (using {<placeholder>}) \
+                        \cannot be used at rC3 2021; please use world:// instead \
+                        \(cf. howto.rc3.world)."
+             | ext == "tmx" ->
+                 complain "Cannot use .tmx map format; use Tiled's json export instead."
+             | ext /= "json" ->
+                 complain "All exit links must link to .json files."
+             | otherwise -> dependsOn . LocalMap $ path
     "exitSceneUrl" ->
       deprecatedUseInstead "exitUrl"
     "exitInstance" ->