diff --git a/src/lua_script.c b/src/lua_script.c
index fa87f80dc197b3e216a73b6ac9a60ceb6be14243..be6b20032ba5f16ffcd36bc8a152dfa721d5c88b 100644
--- a/src/lua_script.c
+++ b/src/lua_script.c
@@ -715,11 +715,15 @@ static void ArchiveExtVars(void *pointer, const char *ptype)
 	for (i = 0; lua_next(gL, -2); i++)
 		lua_pop(gL, 1);
 
-	if (i == 0 && !fastcmp(ptype,"player")) // skip anything that has an empty table and isn't a player.
+	// skip anything that has an empty table and isn't a player.
+	if (i == 0)
 	{
+		if (fastcmp(ptype,"player")) // always include players even if they have no extra variables
+			WRITEUINT16(save_p, 0);
 		lua_pop(gL, 1);
 		return;
 	}
+
 	if (fastcmp(ptype,"mobj")) // mobjs must write their mobjnum as a header
 		WRITEUINT32(save_p, ((mobj_t *)pointer)->mobjnum);
 	WRITEUINT16(save_p, i);