diff --git a/RA3MP3Playback.py b/RA3MP3Playback.py index b766fc9..7a3af13 100644 --- a/RA3MP3Playback.py +++ b/RA3MP3Playback.py @@ -7,13 +7,13 @@ import random import re import queue import readchar -import winpty +#import winpty import ctypes +import subprocess os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "1" import pygame -#user32 = ctypes.WinDLL("user32", use_last_error=True) kernel32 = ctypes.WinDLL("kernel32", use_last_error=True) # Event to signal shutdown @@ -28,11 +28,13 @@ DEBUG = False # Set True to enable debug overrides DEFAULT_GAME_EXE = r".\qgame.dll" DEFAULT_PLAYLIST = r".\arena\music\playlist.txt" DEFAULT_RA3_MAPS = r".\arena\music\ra3_maps.txt" +DEFAULT_ARENA0_BL = r".\arena\music\arena0_bl.txt" # Debug override paths DEBUG_GAME_EXE = r"D:\GOG Games\Quake III\qgame.dll" DEBUG_PLAYLIST = r"D:\GOG Games\Quake III\arena\music\playlist.txt" DEBUG_RA3_MAPS = r"D:\GOG Games\Quake III\arena\music\ra3_maps.txt" +DEBUG_ARENA0_BL = r"D:\GOG Games\Quake III\arena\music\arena0_bl.txt" # Initial volume VOLUME_STEP = 0.1 # step for W/S volume control @@ -47,7 +49,9 @@ is_ra3 = False is_ra3_map = False is_in_map = False ra3_maps_path = "." +arena0_bl_path = "." playlist = [] +arena0_bl = [] playlist_index = 0 current_mode = "shuffle" # sequential, shuffle, loop volume = 0.5 @@ -75,6 +79,14 @@ ANSI_ESCAPE_RE = re.compile( # ========================================================== # ===================== UTILITY FUNCTIONS ================= +def Check_Arena_Blacklist(arenaline: str) -> bool: + global arena0_bl_path + arena_bl_local = load_arena0_blacklist(arena0_bl_path) + for item in arena_bl_local: + if arenaline.lower().startswith(f"\"arena0\" is:\"{item.lower()}"): + return True + return False + def acquire_single_instance(name: str): handle = kernel32.CreateMutexW( None, # lpMutexAttributes @@ -203,6 +215,19 @@ def load_ra3_maps(path): return set() return maps +def load_arena0_blacklist(path): + maps = set() + try: + with open(path, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if line: + maps.add(line.lower()) + except: + print(f"[DEBUG] Failed to open ra3_maps.txt") + return set() + return maps + def next_track(): global playlist if not playlist: @@ -291,34 +316,59 @@ def change_mode(): # ========================================================== # ==================== QUAKE MONITOR ====================== -def monitor_game(pty_proc): +# def monitor_game(pty_proc): +# #pty version +# global serverstatus_sent + +# buffer = "" + +# while not stop_flag.is_set() or shutdown_event.is_set(): +# try: +# data = pty_proc.read(1024) +# if not data: +# break + +# # Normalize to string +# if isinstance(data, bytes): +# data = data.decode(errors="ignore") + +# buffer += data + +# while "\n" in buffer: +# line, buffer = buffer.split("\n", 1) +# line = strip_ansi(line).strip() +# if line: +# #print(f"[GAME] {line}") +# #print(f"[GAME RAW] {repr(line)}") +# handle_game_line(line, pty_proc) + +# except EOFError or KeyboardInterrupt: +# break + +def monitor_game(proc): + #subprocess version global serverstatus_sent + buffer = b"" - buffer = "" - - while not stop_flag.is_set() or shutdown_event.is_set(): - try: - data = pty_proc.read(1024) - if not data: - break - - # Normalize to string - if isinstance(data, bytes): - data = data.decode(errors="ignore") - - buffer += data - - while "\n" in buffer: - line, buffer = buffer.split("\n", 1) - line = strip_ansi(line).strip() - if line: - #print(f"[GAME] {line}") - #print(f"[GAME RAW] {repr(line)}") - handle_game_line(line, pty_proc) - - except EOFError or KeyboardInterrupt: + while not stop_flag.is_set(): + data = proc.stdout.read(1024) + if not data: break + buffer += data + + while b"\n" in buffer: + line, buffer = buffer.split(b"\n", 1) + try: + line = line.decode(errors="ignore") + except: + continue + + line = strip_ansi(line).strip() + if line: + handle_game_line(line, proc) + + def handle_game_line(line, pty_proc): global volume, current_map, ra3_maps, ra3_maps_path, volumecheck, is_ra3, gametypecheck, is_playing, arenacheck, is_in_map, is_ra3_map, last_arena0 @@ -405,9 +455,15 @@ def handle_game_line(line, pty_proc): threading.Timer(.1, lambda: send_command(pty_proc,f"serverstatus")).start() else: if not same_map: - print(f"[DEBUG] RA3 map detected. Advancing track.") - is_ra3_map = True - next_track() + if not Check_Arena_Blacklist(line): + print(f"[DEBUG] RA3 map detected. Advancing track.") + is_ra3_map = True + next_track() + else: + print(f"[DEBUG] RA3 Arena found on blacklist - disabling music.") + is_ra3_map = False + stop_playback() + elif "mapname" in line.lower() and serverstatus_sent: serverstatus_sent = False current_map = line.split()[-1].lower() @@ -419,15 +475,26 @@ def handle_game_line(line, pty_proc): else: print(f"[DEBUG] Unknown map: {current_map}. Stopping playback.") is_ra3_map = False - stop_playback() + threading.Timer(.3, lambda: stop_playback()).start() + #stop_playback() -def send_command(pty_proc, cmd): +# def send_command(pty_proc, cmd): +# # winpty version +# try: +# pty_proc.write(cmd + "\r\n") +# pty_proc.flush() +# #print(f"[DEBUG] Sent command: {cmd}") +# except Exception as e: +# print(f"[DEBUG] Failed to send command: {e}") + +def send_command(proc, cmd): + #subprocess version try: - pty_proc.write(cmd + "\r\n") - pty_proc.flush() - #print(f"[DEBUG] Sent command: {cmd}") + proc.stdin.write((cmd + "\r\n").encode()) + proc.stdin.flush() except Exception as e: print(f"[DEBUG] Failed to send command: {e}") + # ========================================================== # ==================== KEYBOARD HANDLER =================== @@ -452,7 +519,7 @@ def main(): print("Another instance is already running.") sys.exit(1) - global playlist, ra3_maps, pty_proc, playlist_path, ra3_maps_path + global playlist, ra3_maps, pty_proc, playlist_path, ra3_maps_path, arena0_blacklist, arena0_bl_path print(f"Loading Quake 3 Arena...") @@ -460,17 +527,12 @@ def main(): game_exe = DEBUG_GAME_EXE if DEBUG else DEFAULT_GAME_EXE playlist_path = DEBUG_PLAYLIST if DEBUG else DEFAULT_PLAYLIST ra3_maps_path = DEBUG_RA3_MAPS if DEBUG else DEFAULT_RA3_MAPS - + arena0_bl_path = DEBUG_ARENA0_BL if DEBUG else DEFAULT_ARENA0_BL + # Load playlist and map list playlist = load_playlist(playlist_path) ra3_maps = load_ra3_maps(ra3_maps_path) - - #if not playlist: - # print("Playlist is empty!") - # return - #if not ra3_maps: - # print("RA3 maps list is empty!") - # return + arena0_bl = load_arena0_blacklist(arena0_bl_path) # Initialize pygame mixer pygame.mixer.init() @@ -487,12 +549,23 @@ def main(): watcher_thread = threading.Thread(target=track_watcher, daemon=True) watcher_thread.start() - # Launch quake process via PTY - try: - pty_proc = winpty.PtyProcess.spawn([game_exe, "--showterminalconsole",] + sys.argv[1:] ) - except Exception as e: - print(f"Failed to start game: {e}") - return + # # Launch quake process via PTY + # try: + # pty_proc = winpty.PtyProcess.spawn([game_exe, "--showterminalconsole",] + sys.argv[1:] ) + # except Exception as e: + # print(f"Failed to start game: {e}") + # return + + + # # Launch quake process via subprocess + pty_proc = subprocess.Popen( + [game_exe, "--showterminalconsole"] + sys.argv[1:], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + bufsize=0, # unbuffered + universal_newlines=False +) # Monitor the game output try: @@ -502,7 +575,26 @@ def main(): finally: stop_flag.set() stop_playback() - pty_proc.close() + if pty_proc: + try: + pty_proc.stdin.close() + except: + pass + + try: + pty_proc.stdout.close() + except: + pass + + try: + pty_proc.terminate() + except: + pass + + try: + pty_proc.wait(timeout=5) + except: + pass pygame.mixer.quit() if __name__ == "__main__": diff --git a/RA3MP3Playback.pyproj b/RA3MP3Playback.pyproj index 0198969..96fae7c 100644 --- a/RA3MP3Playback.pyproj +++ b/RA3MP3Playback.pyproj @@ -12,8 +12,7 @@ RA3MP3Playback RA3MP3Playback Standard Python launcher - - + +set fs_game arena False diff --git a/build/RA3WITHMP3/Analysis-00.toc b/build/RA3WITHMP3/Analysis-00.toc index cb01b2c..2d67dc9 100644 --- a/build/RA3WITHMP3/Analysis-00.toc +++ b/build/RA3WITHMP3/Analysis-00.toc @@ -816,9 +816,6 @@ ('multiprocessing.sharedctypes', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\multiprocessing\\sharedctypes.py', 'PYMODULE'), - ('multiprocessing.heap', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\multiprocessing\\heap.py', - 'PYMODULE'), ('multiprocessing.pool', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\multiprocessing\\pool.py', 'PYMODULE'), @@ -990,14 +987,14 @@ ('readchar._base_key', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\readchar\\_base_key.py', 'PYMODULE'), - ('tracemalloc', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\tracemalloc.py', + ('_py_abc', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_py_abc.py', 'PYMODULE'), ('stringprep', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\stringprep.py', 'PYMODULE'), - ('_py_abc', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_py_abc.py', + ('tracemalloc', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\tracemalloc.py', 'PYMODULE'), ('pygame', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\__init__.py', @@ -1070,6 +1067,9 @@ 'PYMODULE'), ('pathlib', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\pathlib.py', + 'PYMODULE'), + ('multiprocessing.heap', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\multiprocessing\\heap.py', 'PYMODULE')], [('winpty\\OpenConsole.exe', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\winpty\\OpenConsole.exe', @@ -1089,47 +1089,47 @@ ('libopusfile-0.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopusfile-0.dll', 'BINARY'), - ('SDL2_mixer.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_mixer.dll', - 'BINARY'), - ('libopus-0.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', - 'BINARY'), - ('libmodplug-1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libmodplug-1.dll', - 'BINARY'), - ('SDL2_image.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_image.dll', - 'BINARY'), - ('libogg-0.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libogg-0.dll', - 'BINARY'), - ('libtiff-5.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libtiff-5.dll', - 'BINARY'), - ('freetype.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\freetype.dll', - 'BINARY'), - ('libjpeg-9.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', - 'BINARY'), - ('portmidi.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\portmidi.dll', + ('zlib1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', 'BINARY'), ('libpng16-16.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libpng16-16.dll', 'BINARY'), - ('zlib1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', + ('SDL2_mixer.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_mixer.dll', + 'BINARY'), + ('SDL2_image.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_image.dll', + 'BINARY'), + ('libmodplug-1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libmodplug-1.dll', + 'BINARY'), + ('libogg-0.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libogg-0.dll', + 'BINARY'), + ('libjpeg-9.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', 'BINARY'), ('SDL2.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2.dll', 'BINARY'), + ('SDL2_ttf.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_ttf.dll', + 'BINARY'), ('libwebp-7.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libwebp-7.dll', 'BINARY'), - ('SDL2_ttf.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_ttf.dll', + ('libopus-0.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', + 'BINARY'), + ('freetype.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\freetype.dll', + 'BINARY'), + ('libtiff-5.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libtiff-5.dll', + 'BINARY'), + ('portmidi.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\portmidi.dll', 'BINARY'), ('pywin32_system32\\pywintypes39.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pywin32_system32\\pywintypes39.dll', @@ -1296,15 +1296,15 @@ ('pygame\\libopus-0.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', 'BINARY'), + ('pygame\\zlib1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', + 'BINARY'), ('pygame\\SDL2.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2.dll', 'BINARY'), ('pygame\\libjpeg-9.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', 'BINARY'), - ('pygame\\zlib1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', - 'BINARY'), ('VCRUNTIME140_1.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\VCRUNTIME140_1.dll', 'BINARY'), @@ -1433,66 +1433,24 @@ ('base_library.zip', 'C:\\Users\\Ed\\source\\repos\\RA3MP3Playback\\build\\RA3WITHMP3\\base_library.zip', 'DATA')], - [('sre_constants', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\sre_constants.py', - 'PYMODULE'), - ('collections.abc', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\collections\\abc.py', - 'PYMODULE'), - ('collections', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\collections\\__init__.py', - 'PYMODULE'), - ('enum', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\enum.py', - 'PYMODULE'), - ('ntpath', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\ntpath.py', - 'PYMODULE'), - ('sre_parse', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\sre_parse.py', + [('operator', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\operator.py', 'PYMODULE'), ('codecs', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\codecs.py', 'PYMODULE'), - ('copyreg', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\copyreg.py', + ('sre_compile', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\sre_compile.py', + 'PYMODULE'), + ('enum', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\enum.py', + 'PYMODULE'), + ('abc', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\abc.py', 'PYMODULE'), ('posixpath', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\posixpath.py', 'PYMODULE'), - ('warnings', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\warnings.py', - 'PYMODULE'), - ('io', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\io.py', - 'PYMODULE'), - ('stat', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\stat.py', - 'PYMODULE'), - ('operator', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\operator.py', - 'PYMODULE'), - ('functools', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\functools.py', - 'PYMODULE'), - ('traceback', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\traceback.py', - 'PYMODULE'), - ('genericpath', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\genericpath.py', - 'PYMODULE'), - ('_bootlocale', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_bootlocale.py', - 'PYMODULE'), - ('linecache', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\linecache.py', - 'PYMODULE'), - ('locale', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\locale.py', - 'PYMODULE'), - ('_weakrefset', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_weakrefset.py', - 'PYMODULE'), ('encodings.zlib_codec', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\encodings\\zlib_codec.py', 'PYMODULE'), @@ -1859,30 +1817,72 @@ ('encodings', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\encodings\\__init__.py', 'PYMODULE'), - ('weakref', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\weakref.py', - 'PYMODULE'), - ('abc', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\abc.py', - 'PYMODULE'), - ('_collections_abc', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_collections_abc.py', - 'PYMODULE'), - ('heapq', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\heapq.py', + ('_bootlocale', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_bootlocale.py', 'PYMODULE'), ('reprlib', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\reprlib.py', 'PYMODULE'), - ('keyword', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\keyword.py', + ('heapq', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\heapq.py', 'PYMODULE'), - ('sre_compile', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\sre_compile.py', + ('genericpath', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\genericpath.py', + 'PYMODULE'), + ('functools', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\functools.py', + 'PYMODULE'), + ('_weakrefset', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_weakrefset.py', + 'PYMODULE'), + ('io', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\io.py', + 'PYMODULE'), + ('sre_constants', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\sre_constants.py', + 'PYMODULE'), + ('sre_parse', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\sre_parse.py', + 'PYMODULE'), + ('linecache', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\linecache.py', + 'PYMODULE'), + ('copyreg', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\copyreg.py', + 'PYMODULE'), + ('weakref', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\weakref.py', + 'PYMODULE'), + ('warnings', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\warnings.py', 'PYMODULE'), ('types', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\types.py', 'PYMODULE'), + ('traceback', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\traceback.py', + 'PYMODULE'), + ('_collections_abc', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\_collections_abc.py', + 'PYMODULE'), + ('stat', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\stat.py', + 'PYMODULE'), + ('ntpath', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\ntpath.py', + 'PYMODULE'), + ('keyword', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\keyword.py', + 'PYMODULE'), + ('collections.abc', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\collections\\abc.py', + 'PYMODULE'), + ('collections', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\collections\\__init__.py', + 'PYMODULE'), + ('locale', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\locale.py', + 'PYMODULE'), ('re', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\re.py', 'PYMODULE'), diff --git a/build/RA3WITHMP3/EXE-00.toc b/build/RA3WITHMP3/EXE-00.toc index d8d8c99..8db878e 100644 --- a/build/RA3WITHMP3/EXE-00.toc +++ b/build/RA3WITHMP3/EXE-00.toc @@ -91,47 +91,47 @@ ('libopusfile-0.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopusfile-0.dll', 'BINARY'), - ('SDL2_mixer.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_mixer.dll', - 'BINARY'), - ('libopus-0.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', - 'BINARY'), - ('libmodplug-1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libmodplug-1.dll', - 'BINARY'), - ('SDL2_image.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_image.dll', - 'BINARY'), - ('libogg-0.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libogg-0.dll', - 'BINARY'), - ('libtiff-5.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libtiff-5.dll', - 'BINARY'), - ('freetype.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\freetype.dll', - 'BINARY'), - ('libjpeg-9.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', - 'BINARY'), - ('portmidi.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\portmidi.dll', + ('zlib1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', 'BINARY'), ('libpng16-16.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libpng16-16.dll', 'BINARY'), - ('zlib1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', + ('SDL2_mixer.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_mixer.dll', + 'BINARY'), + ('SDL2_image.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_image.dll', + 'BINARY'), + ('libmodplug-1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libmodplug-1.dll', + 'BINARY'), + ('libogg-0.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libogg-0.dll', + 'BINARY'), + ('libjpeg-9.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', 'BINARY'), ('SDL2.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2.dll', 'BINARY'), + ('SDL2_ttf.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_ttf.dll', + 'BINARY'), ('libwebp-7.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libwebp-7.dll', 'BINARY'), - ('SDL2_ttf.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_ttf.dll', + ('libopus-0.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', + 'BINARY'), + ('freetype.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\freetype.dll', + 'BINARY'), + ('libtiff-5.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libtiff-5.dll', + 'BINARY'), + ('portmidi.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\portmidi.dll', 'BINARY'), ('pywin32_system32\\pywintypes39.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pywin32_system32\\pywintypes39.dll', @@ -298,15 +298,15 @@ ('pygame\\libopus-0.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', 'BINARY'), + ('pygame\\zlib1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', + 'BINARY'), ('pygame\\SDL2.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2.dll', 'BINARY'), ('pygame\\libjpeg-9.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', 'BINARY'), - ('pygame\\zlib1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', - 'BINARY'), ('VCRUNTIME140_1.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\VCRUNTIME140_1.dll', 'BINARY'), @@ -436,7 +436,7 @@ [], False, False, - 1767911105, + 1767923557, [('run.exe', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\PyInstaller\\bootloader\\Windows-64bit-intel\\run.exe', 'EXECUTABLE')], diff --git a/build/RA3WITHMP3/PKG-00.toc b/build/RA3WITHMP3/PKG-00.toc index 8144db2..e0df562 100644 --- a/build/RA3WITHMP3/PKG-00.toc +++ b/build/RA3WITHMP3/PKG-00.toc @@ -69,47 +69,47 @@ ('libopusfile-0.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopusfile-0.dll', 'BINARY'), - ('SDL2_mixer.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_mixer.dll', - 'BINARY'), - ('libopus-0.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', - 'BINARY'), - ('libmodplug-1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libmodplug-1.dll', - 'BINARY'), - ('SDL2_image.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_image.dll', - 'BINARY'), - ('libogg-0.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libogg-0.dll', - 'BINARY'), - ('libtiff-5.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libtiff-5.dll', - 'BINARY'), - ('freetype.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\freetype.dll', - 'BINARY'), - ('libjpeg-9.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', - 'BINARY'), - ('portmidi.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\portmidi.dll', + ('zlib1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', 'BINARY'), ('libpng16-16.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libpng16-16.dll', 'BINARY'), - ('zlib1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', + ('SDL2_mixer.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_mixer.dll', + 'BINARY'), + ('SDL2_image.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_image.dll', + 'BINARY'), + ('libmodplug-1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libmodplug-1.dll', + 'BINARY'), + ('libogg-0.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libogg-0.dll', + 'BINARY'), + ('libjpeg-9.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', 'BINARY'), ('SDL2.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2.dll', 'BINARY'), + ('SDL2_ttf.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_ttf.dll', + 'BINARY'), ('libwebp-7.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libwebp-7.dll', 'BINARY'), - ('SDL2_ttf.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2_ttf.dll', + ('libopus-0.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', + 'BINARY'), + ('freetype.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\freetype.dll', + 'BINARY'), + ('libtiff-5.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libtiff-5.dll', + 'BINARY'), + ('portmidi.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\portmidi.dll', 'BINARY'), ('pywin32_system32\\pywintypes39.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pywin32_system32\\pywintypes39.dll', @@ -276,15 +276,15 @@ ('pygame\\libopus-0.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libopus-0.dll', 'BINARY'), + ('pygame\\zlib1.dll', + 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', + 'BINARY'), ('pygame\\SDL2.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\SDL2.dll', 'BINARY'), ('pygame\\libjpeg-9.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\libjpeg-9.dll', 'BINARY'), - ('pygame\\zlib1.dll', - 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\pygame\\zlib1.dll', - 'BINARY'), ('VCRUNTIME140_1.dll', 'C:\\Users\\Ed\\AppData\\Local\\Programs\\Python\\Python39\\VCRUNTIME140_1.dll', 'BINARY'), diff --git a/build/RA3WITHMP3/RA3WITHMP3.pkg b/build/RA3WITHMP3/RA3WITHMP3.pkg index fbab81e..1f95d6e 100644 Binary files a/build/RA3WITHMP3/RA3WITHMP3.pkg and b/build/RA3WITHMP3/RA3WITHMP3.pkg differ diff --git a/build/RA3WITHMP3/base_library.zip b/build/RA3WITHMP3/base_library.zip index e8f092a..9119ac1 100644 Binary files a/build/RA3WITHMP3/base_library.zip and b/build/RA3WITHMP3/base_library.zip differ diff --git a/build/RA3WITHMP3/warn-RA3WITHMP3.txt b/build/RA3WITHMP3/warn-RA3WITHMP3.txt index 70a7780..af51747 100644 --- a/build/RA3WITHMP3/warn-RA3WITHMP3.txt +++ b/build/RA3WITHMP3/warn-RA3WITHMP3.txt @@ -18,8 +18,8 @@ missing module named pyimod02_importers - imported by C:\Users\Ed\AppData\Local\ missing module named _posixsubprocess - imported by subprocess (optional), multiprocessing.util (delayed) missing module named grp - imported by shutil (optional), tarfile (optional), pathlib (delayed, optional), subprocess (optional) missing module named pwd - imported by posixpath (delayed, conditional), shutil (optional), tarfile (optional), pathlib (delayed, conditional, optional), subprocess (optional), distutils.util (delayed, conditional, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed) -missing module named org - imported by pickle (optional) -missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional) +missing module named 'org.python' - imported by pickle (optional), xml.sax (delayed, conditional) +missing module named org - imported by copy (optional) missing module named posix - imported by os (conditional, optional), shutil (conditional), importlib._bootstrap_external (conditional) missing module named resource - imported by posix (top-level) missing module named _manylinux - imported by pkg_resources._vendor.packaging.tags (delayed, optional), packaging._manylinux (delayed, optional) diff --git a/build/RA3WITHMP3/xref-RA3WITHMP3.html b/build/RA3WITHMP3/xref-RA3WITHMP3.html index d4822c3..a4e6124 100644 --- a/build/RA3WITHMP3/xref-RA3WITHMP3.html +++ b/build/RA3WITHMP3/xref-RA3WITHMP3.html @@ -157,6 +157,7 @@ imports: • keywordlinecachelocale + • multiprocessing.heapntpathoperatoros @@ -342,7 +343,7 @@ imported by: 'org.python' MissingModule
imported by: - copy + picklexml.sax
@@ -3107,8 +3108,8 @@ imported by: copy SourceModule
imports: - 'org.python' - • copyreg + copyreg + • orgtypesweakref @@ -8077,7 +8078,8 @@ imports:
imported by: - multiprocessing.sharedctypes + RA3MP3Playback.py + • multiprocessing.sharedctypesmultiprocessing.synchronize
@@ -8755,7 +8757,7 @@ imported by: org MissingModule
imported by: - pickle + copy
@@ -9416,14 +9418,14 @@ imported by: pickle SourceModule
imports: - _compat_pickle + 'org.python' + • _compat_pickle_picklecodecscopyregfunctoolsioitertools - • orgpprintrestruct @@ -14099,6 +14101,7 @@ imported by: Package
imports: xml + • xml.parsers.expat
@@ -14124,6 +14127,7 @@ imports: