diff --git a/CHANGELOG.yml b/CHANGELOG.yml index abc2941bf2..f4eb55522c 100644 --- a/CHANGELOG.yml +++ b/CHANGELOG.yml @@ -8,5 +8,5 @@ upcoming: When being revived, weapons now fade in from the bottom in a non-linear fashion. Purely visual, does not affect hit detection. optout: "set `cg_gunReviveFadeIn` to `0` (default: `1`)" -# TODO - add previous version history -# v82.3.0: [] +# Older releases: see upstream ET: Legacy changelog / release notes; this file +# only tracks fork-facing `upcoming` entries for packaging or announcements. diff --git a/docs/demos/README-serverside-demos_ETL.md b/docs/demos/README-serverside-demos_ETL.md index 1d5f3caad3..cabe7065cd 100644 --- a/docs/demos/README-serverside-demos_ETL.md +++ b/docs/demos/README-serverside-demos_ETL.md @@ -60,8 +60,8 @@ DEV NOTES * The patch architecture is pretty simple: we record every events/entities/playerStates at demo recording, and for playback we just hook at the end of each server frame and overwrite with demo events. This way, demo events always take the upper hand on server's events, but it still allows the server to manage interpolation when there is no demo event. This is why the timescale and cl_freezeDemo functions work with server-side demos. -TODO ----- +Open items (historical) +----------------------- * ExcessivePlus new scoreboard is buggy and shows wrong scores and stats, except when one of the players die (producing and sending a new scoreboard state, so this forces the gamecode to update with the correct scoreboard state from demo). A generic solution might be to: always save the full server/gamecode state at the end of one frame (in sv_demo.c), and then at the beginning of next frame restore the full server/gamecode state. This way, each demo frame would pick up right from the last demo state, guaranteed. Because here the scoreboard bug is probably due to ExcessivePlus having a too high scoreboard refresh rate, so it gets refreshed between demo frames where there is a scoreboard refresh (in other words, E+ is refreshing the scoreboard even though there is no new info: E+ is active in its approach to scoreboard refreshing, whereas ioq3 is passive and waits for real updates). But with this approach, check if timescale and cl_freezeDemo still work (because saving/restoring full server state might break ability to interpolate frames between recorded demo frames). Might want to look into RestoreCmdContext() and SaveCmdContext(). @@ -179,7 +179,7 @@ CHANGELOG (newest to the bottom) * Generations Arena: team management does not work (when a player switch team, he is not affected to the right team) * E+ now real players join the game... * E+ democlients are not spectatable, userinfo is not reliable - now update, specs are spectatable... -* cleaned FIXME +* cleaned (legacy FIXME items addressed in-tree where noted) * clean code * Fix inactivity timers (simulate UserMove or just send a fake usercmd_t) - had to craft a remoteAddress with NET_StringToAdr, because else if we just use Info_SetValueForKey(userinfo, "ip", "localhost") the server would remove the ip key in the userinfo because no real address can be found for democlients. * SV_DemoChangeMaxClients() does not consider privateclients reserved slots when moving clients (eg: with 2 privateslots: 2 -> 12 -> 0) diff --git a/misc/clang-regenerate-luals-definitions.py b/misc/clang-regenerate-luals-definitions.py index 47df7eef68..2604e213ef 100755 --- a/misc/clang-regenerate-luals-definitions.py +++ b/misc/clang-regenerate-luals-definitions.py @@ -15,6 +15,9 @@ from clang import cindex +# Set from cli() when --debug is passed. +_debug = False + TEMPLATE_STANZA = ( f"""-- DO NOT EDIT - THIS FILE IS AUTOGENERATED VIA './etlegacy/misc/generate-lua-definitions.py' -- MANUAL CHANGES WILL BE LOST! @@ -204,7 +207,7 @@ def parse_c_comment_def(line): start_end_marker_found == 2 ), f"Expected to match both a start and an end marker. ['/**', '*/']\n\t{self.c_name} / expected 2 found {start_end_marker_found}" - # TODO - opt + # Ensure every ---@param names a real C parameter. for x in result.params_annotated: assert ( x in result.params @@ -271,8 +274,8 @@ def __str__(self): def print_debug(s): - # TODO - print(s) + if _debug: + print(s) def regenerate(): @@ -325,7 +328,6 @@ def is_g_lua_function(cursor): return ( cursor.kind == cindex.CursorKind.FUNCTION_DECL and cursor.is_definition() - # TODO and (cursor.spelling.startswith("G_Lua") or cursor.spelling.startswith("_et_")) ) @@ -413,7 +415,7 @@ def walk(cursor): elif name.startswith("_et_"): register_definition(cursor, DefinitionType.FUNCTION) else: - pass # TODO - not a function we care about + pass # Non-Lua API symbols under walk(); intentionally ignored. for child in cursor.get_children(): walk(child) @@ -430,7 +432,7 @@ def main(args): index = cindex.Index.create() tu = index.parse( path, - # TODO - settle on flags + # Minimal flags for parsing g_lua.c without a full compile_commands.json. args=[ "-xc", # assume some features @@ -462,6 +464,7 @@ def main(args): def cli(argv): + global _debug import argparse parser = argparse.ArgumentParser( @@ -473,12 +476,12 @@ def cli(argv): parser.add_argument( "-rt", "--run-tests", action="store_true", help="Run unit tests." ) - # TODO parser.add_argument( "-d", "--debug", action="store_true", help="Enable debug logging." ) args = parser.parse_args(argv) + _debug = bool(args.debug) if args.run_tests: from contextlib import contextmanager diff --git a/misc/collect-and-check-gh-build-logs.py b/misc/collect-and-check-gh-build-logs.py index 15a1c3b56b..eadb116ef1 100755 --- a/misc/collect-and-check-gh-build-logs.py +++ b/misc/collect-and-check-gh-build-logs.py @@ -91,8 +91,7 @@ def clean_and_process_file(arch: str, filename: str): ], ) ): - ## skip explicitly ignored warnings - TODO fixup for - ## Windows + # Match EXPLICITLY_IGNORED_WARNINGS[arch] before counting as pertinent. # strip timestamp parts = line.split(sep=" ", maxsplit=1)[1] # split at 'warning:'