09-13-2024, 06:15 PM
goon's map voting at round start is just how the ci and game systems are set up.
tg derivatives do all of their map loading at round start. they're built and load with an empty map, and then it's loaded in. iirc, this is partially because tg did a whole lot of refactoring around object init that goon hasn't gotten around to yet.
goon has to build it in at compile-time, which is why there are options in the files to switch which map it is. this is reflected in the ci/build system: the map vote triggers a new build of the server, with the config switched to the new map. (the server is also rebuilt whenever new code changes come in through git.)
what this effectively means is that tg loads its map when the server starts: everyone joins, and while they're getting up, setting up their character, etc, the map is being initialized and loaded. monke round starts are about 300 seconds, or five minutes -- ours are 180 seconds (3 minutes).
goon has to do all of that before the server can start. unfortunately, that means it has to have time to build. before byond 515, compile times were about 120-180 seconds, depending on computer speed. byond 515 sped it up a lot, down to about 40-90 seconds.
~
the problems:
there has to be enough time after the map vote resolves to build and deploy the server
once the map vote is over, you have to wait for the server to build and deploy. if you don't, you'll end up with a stale copy, usually the current round's. (back when the testmerge was in, there wasn't any mechanism that told the game that the build was finished, so it was a complete guess... that didn't work most of the time. shortly after that, the feature to notify the game that the build was done was fixed.)
but you also have to account for problems. if you say "eh, 100 seconds should be enough time for the process to finish", what do you do when it doesn't? if it fails to build, or is still in progress, you have to have a backup plan. maybe you wait another 30 seconds in "sudden death" (where you end immediately), maybe you wait a bit longer, who knows.
you don't know when the round will end
typically rounds end after the shuttle is called, it travels to the station, boards, and then leaves. in cases like this, it's easy: maybe fire off the map vote when the shuttle takes off, so you have a minute or so to vote and then extra time to do the build.
...but not all rounds happen like this. some end immediately, like nuke or rev. in that case, where do you put the voting time? do you just extend the round-end timer?
...
my original plan (not really written out anywhere, too ambitious and i figured it would be too controversial):
- map vote moved to the end of the round. you get 30 seconds to pick a map.
- a voting booth is added at centcom, near the art area. voting booths get big "VOTE!!!" counters like the nuke does during active map votes.
- a portal opens from the afterlife bar to centcom, near the voting booth. this allows people who died to go vote, view the art at centcom, and otherwise participate in end-of-round festivities. the game's over, who cares?
- the round end timer becomes 150: 30 seconds of map vote, 120 seconds of build time. it waits for up to 60 seconds if the build didn't finish yet, otherwise it gives up and restarts.
- also, everyone can hear deadchat after the game is over. this isn't related, but i would have added it by now if i was still a coder.
people are rather used to goon's 60 second end-of-rounds, but i think we have a lot of room to increase that, especially if we make the end of a round actually fun and not just "everyone gets to mope on the shuttle for a minute because they get teleported if they leave" (see also this suggestion).
basically:
round end timer: 150 seconds
vote starts after round ends, and lasts 30 seconds (est ~110s build time)
thanks. wyci
tg derivatives do all of their map loading at round start. they're built and load with an empty map, and then it's loaded in. iirc, this is partially because tg did a whole lot of refactoring around object init that goon hasn't gotten around to yet.
goon has to build it in at compile-time, which is why there are options in the files to switch which map it is. this is reflected in the ci/build system: the map vote triggers a new build of the server, with the config switched to the new map. (the server is also rebuilt whenever new code changes come in through git.)
what this effectively means is that tg loads its map when the server starts: everyone joins, and while they're getting up, setting up their character, etc, the map is being initialized and loaded. monke round starts are about 300 seconds, or five minutes -- ours are 180 seconds (3 minutes).
goon has to do all of that before the server can start. unfortunately, that means it has to have time to build. before byond 515, compile times were about 120-180 seconds, depending on computer speed. byond 515 sped it up a lot, down to about 40-90 seconds.
~
the problems:
there has to be enough time after the map vote resolves to build and deploy the server
once the map vote is over, you have to wait for the server to build and deploy. if you don't, you'll end up with a stale copy, usually the current round's. (back when the testmerge was in, there wasn't any mechanism that told the game that the build was finished, so it was a complete guess... that didn't work most of the time. shortly after that, the feature to notify the game that the build was done was fixed.)
but you also have to account for problems. if you say "eh, 100 seconds should be enough time for the process to finish", what do you do when it doesn't? if it fails to build, or is still in progress, you have to have a backup plan. maybe you wait another 30 seconds in "sudden death" (where you end immediately), maybe you wait a bit longer, who knows.
you don't know when the round will end
typically rounds end after the shuttle is called, it travels to the station, boards, and then leaves. in cases like this, it's easy: maybe fire off the map vote when the shuttle takes off, so you have a minute or so to vote and then extra time to do the build.
...but not all rounds happen like this. some end immediately, like nuke or rev. in that case, where do you put the voting time? do you just extend the round-end timer?
...
my original plan (not really written out anywhere, too ambitious and i figured it would be too controversial):
- map vote moved to the end of the round. you get 30 seconds to pick a map.
- a voting booth is added at centcom, near the art area. voting booths get big "VOTE!!!" counters like the nuke does during active map votes.
- a portal opens from the afterlife bar to centcom, near the voting booth. this allows people who died to go vote, view the art at centcom, and otherwise participate in end-of-round festivities. the game's over, who cares?
- the round end timer becomes 150: 30 seconds of map vote, 120 seconds of build time. it waits for up to 60 seconds if the build didn't finish yet, otherwise it gives up and restarts.
- also, everyone can hear deadchat after the game is over. this isn't related, but i would have added it by now if i was still a coder.
people are rather used to goon's 60 second end-of-rounds, but i think we have a lot of room to increase that, especially if we make the end of a round actually fun and not just "everyone gets to mope on the shuttle for a minute because they get teleported if they leave" (see also this suggestion).
basically:
round end timer: 150 seconds
vote starts after round ends, and lasts 30 seconds (est ~110s build time)
thanks. wyci