Unlock menu after failed join; remove contact damage; cover clean disconnects
ci / verify (push) Successful in 45s
ci / verify (push) Successful in 45s
A failed connection left the connect buttons disabled forever. _show_menu() returned early when a menu already existed, so the set_busy(false) that re-enables them never ran on the way back from _abort_connect -- the player was locked out of both joining and hosting with no way out but a restart. Also guards against a second attempt stacking on an in-flight one. Contact damage is gone as a concept: nothing in this game hurts you by touching it, because every threat should be a bullet you can see and dodge. The Stalker walked at you and dealt contact damage and nothing else, so it now carries a point-blank shotgun instead -- five pellets, 62 degrees, 18-tick lifetime for about 78px of reach, so it still has to close and leaves nothing lingering. tests/unit/test_content.gd asserts every hostile enemy has an emitter, so a new enemy cannot quietly reintroduce the mechanic. The menu's "Disconnect" DOES get the anti-cheese protection -- verified, not assumed. It calls Net.shutdown(), the socket closes, and the server takes the same linkdead path as a SIGKILL, because the channel is keyed on the socket closing rather than on how it closed. Made permanent: a --leave-after bot flag and two smoke assertions covering the polite exit alongside the hard kill, so a future "clean leave" message that skipped the channel would fail a test. The menu now says so out loud in a dungeon -- the mechanic only reads as fair if the cost is known before clicking. 103 tests, 12 smoke assertions; check.sh, test.sh and smoke.sh all pass.
This commit is contained in:
@@ -17,6 +17,11 @@ static var bot_client: bool = false
|
||||
static var autoquit_ticks: int = 0
|
||||
## Skip the menu and connect straight away. Implied by --bot.
|
||||
static var autojoin: bool = false
|
||||
## Bot harness only: gracefully disconnect after this many ticks inside a
|
||||
## dungeon, the way the in-game menu's "Disconnect" button does. Lets the smoke
|
||||
## test cover the clean-exit path as well as a hard kill -- both must be caught
|
||||
## by the same server-side escape channel.
|
||||
static var bot_leave_after: int = 0
|
||||
## Skip the menu and start a listen server (host + local player).
|
||||
static var listen: bool = false
|
||||
## Server-side dev switch: new dungeons open straight onto the boss, skipping
|
||||
@@ -38,6 +43,10 @@ static func parse(argv: PackedStringArray = PackedStringArray()) -> void:
|
||||
autojoin = true
|
||||
"--join":
|
||||
autojoin = true
|
||||
"--leave-after":
|
||||
i += 1
|
||||
if i < argv.size():
|
||||
bot_leave_after = int(argv[i])
|
||||
"--listen":
|
||||
listen = true
|
||||
"--boss-rush":
|
||||
|
||||
Reference in New Issue
Block a user