Properly bound lua displayplayers and displayplayers.iterate to splitscreen

This is fixes crashes in replays because splitscreen displayplayers are
initialized to INT32_MAX there.
This commit is contained in:
James R 2020-05-15 14:21:25 -07:00
parent f856f18233
commit 7e0b605f34

View file

@ -118,7 +118,7 @@ static int lib_iterateDisplayplayers(lua_State *L)
for (i++; i < MAXSPLITSCREENPLAYERS; i++) for (i++; i < MAXSPLITSCREENPLAYERS; i++)
{ {
if (!playeringame[displayplayers[i]] || i > splitscreen) if (i > splitscreen || !playeringame[displayplayers[i]])
return 0; // Stop! There are no more players for us to go through. There will never be a player gap in displayplayers. return 0; // Stop! There are no more players for us to go through. There will never be a player gap in displayplayers.
if (!players[displayplayers[i]].mo) if (!players[displayplayers[i]].mo)
@ -139,6 +139,8 @@ static int lib_getDisplayplayers(lua_State *L)
lua_Integer i = luaL_checkinteger(L, 2); lua_Integer i = luaL_checkinteger(L, 2);
if (i < 0 || i >= MAXSPLITSCREENPLAYERS) if (i < 0 || i >= MAXSPLITSCREENPLAYERS)
return luaL_error(L, "displayplayers[] index %d out of range (0 - %d)", i, MAXSPLITSCREENPLAYERS-1); return luaL_error(L, "displayplayers[] index %d out of range (0 - %d)", i, MAXSPLITSCREENPLAYERS-1);
if (i > splitscreen)
return 0;
if (!playeringame[displayplayers[i]]) if (!playeringame[displayplayers[i]])
return 0; return 0;
if (!players[displayplayers[i]].mo) if (!players[displayplayers[i]].mo)