From b46e14102dfb0047cc7a62fbe7fa0091b9963a3e Mon Sep 17 00:00:00 2001 From: Toontown Super <108632596+ToontownSuperForeverMVP@users.noreply.github.com> Date: Sat, 20 Dec 2025 11:07:26 -0500 Subject: [PATCH] Added new options --- PPYTHON_PATH | 2 +- toontown/shtiker/OptionsPage.py | 140 +++++++++++++++++++++++++++++++- win32/start_ai_server.bat | 4 +- win32/start_astron_server.bat | 2 +- win32/start_game.bat | 4 +- win32/start_uberdog_server.bat | 4 +- 6 files changed, 147 insertions(+), 9 deletions(-) diff --git a/PPYTHON_PATH b/PPYTHON_PATH index 8fba67b..c10ab96 100644 --- a/PPYTHON_PATH +++ b/PPYTHON_PATH @@ -1 +1 @@ -"C:\Users\SuperKey\Documents\GitHub\open-toontown\panda3d\python\ppython.exe" \ No newline at end of file +Panda3D\python\ppython.exe \ No newline at end of file diff --git a/toontown/shtiker/OptionsPage.py b/toontown/shtiker/OptionsPage.py index bfbb1d7..dc5d84e 100644 --- a/toontown/shtiker/OptionsPage.py +++ b/toontown/shtiker/OptionsPage.py @@ -163,8 +163,14 @@ class OptionsTabPage(DirectFrame): self.ToonChatSounds_Label = DirectLabel(parent=self, relief=None, text='', text_align=TextNode.ALeft, text_scale=options_text_scale, text_wordwrap=15, pos=(leftMargin, 0, textStartHeight - 2 * textRowHeight + 0.025)) self.ToonChatSounds_Label.setScale(0.9) self.TKeyOnlyChat_Label = DirectLabel(parent=self, relief=None, text='', text_align=TextNode.ALeft, text_scale=options_text_scale, text_wordwrap=15, pos=(leftMargin, 0, textStartHeight - 7 * textRowHeight)) + # New QOL options + self.ShowFPS_Label = DirectLabel(parent=self, relief=None, text='Show FPS Counter', text_align=TextNode.ALeft, text_scale=options_text_scale, text_wordwrap=15, pos=(leftMargin, 0, textStartHeight - 8 * textRowHeight)) + self.MouseSensitivity_Label = DirectLabel(parent=self, relief=None, text='Mouse Sensitivity', text_align=TextNode.ALeft, text_scale=options_text_scale, text_wordwrap=15, pos=(leftMargin, 0, textStartHeight - 9 * textRowHeight)) + self.CameraFOV_Label = DirectLabel(parent=self, relief=None, text='Camera FOV', text_align=TextNode.ALeft, text_scale=options_text_scale, text_wordwrap=15, pos=(leftMargin, 0, textStartHeight - 10 * textRowHeight)) + self.SmoothAnimations_Label = DirectLabel(parent=self, relief=None, text='', text_align=TextNode.ALeft, text_scale=options_text_scale, text_wordwrap=15, pos=(leftMargin, 0, textStartHeight - 11 * textRowHeight)) + self.ShowNametags_Label = DirectLabel(parent=self, relief=None, text='', text_align=TextNode.ALeft, text_scale=options_text_scale, text_wordwrap=15, pos=(leftMargin, 0, textStartHeight - 12 * textRowHeight)) # Controls info - WASD and Arrow keys both work - self.Controls_Label = DirectLabel(parent=self, relief=None, text='Controls: WASD and Arrow Keys supported', text_align=TextNode.ALeft, text_scale=options_text_scale * 0.9, text_wordwrap=20, pos=(leftMargin, 0, textStartHeight - 8 * textRowHeight)) + self.Controls_Label = DirectLabel(parent=self, relief=None, text='Controls: WASD and Arrow Keys, F9 for Screenshot', text_align=TextNode.ALeft, text_scale=options_text_scale * 0.75, text_wordwrap=25, pos=(leftMargin, 0, textStartHeight - 13 * textRowHeight)) # Music volume slider self.Music_toggleSlider = DirectSlider(parent=self, relief=DGG.FLAT, range=(0, 100), value=100, pageSize=5, pos=(buttonbase_xcoord + 0.2, 0.0, buttonbase_ycoord), scale=0.5, command=self.__setMusicVolume) self.Music_volumeLabel = DirectLabel(parent=self, relief=None, text='100%', text_scale=options_text_scale * 0.8, pos=(buttonbase_xcoord + 0.5, 0.0, buttonbase_ycoord)) @@ -188,6 +194,14 @@ class OptionsTabPage(DirectFrame): guiButton.find('**/QuitBtn_UP')), image3_color=Vec4(0.5, 0.5, 0.5, 0.5), image_scale=button_image_scale, text='', text3_fg=(0.5, 0.5, 0.5, 0.75), text_scale=options_text_scale, text_pos=button_textpos, pos=(buttonbase_xcoord, 0.0, buttonbase_ycoord - textRowHeight * 2 + 0.025), command=self.__doToggleToonChatSounds) self.ToonChatSounds_toggleButton.setScale(0.8) self.TKeyOnlyChat_toggleButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=button_image_scale, text='', text_scale=options_text_scale, text_pos=button_textpos, pos=(buttonbase_xcoord, 0.0, buttonbase_ycoord - textRowHeight * 7), command=self.__doToggleTKeyOnlyChat) + # New QOL option controls + self.ShowFPS_toggleButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=button_image_scale, text='', text_scale=options_text_scale, text_pos=button_textpos, pos=(buttonbase_xcoord, 0.0, buttonbase_ycoord - textRowHeight * 8), command=self.__doToggleShowFPS) + self.MouseSensitivity_Slider = DirectSlider(parent=self, relief=DGG.FLAT, range=(0.5, 2.0), value=1.0, pageSize=0.1, pos=(buttonbase_xcoord + 0.2, 0.0, buttonbase_ycoord - textRowHeight * 9), scale=0.5, command=self.__setMouseSensitivity) + self.MouseSensitivity_valueLabel = DirectLabel(parent=self, relief=None, text='1.0x', text_scale=options_text_scale * 0.8, pos=(buttonbase_xcoord + 0.5, 0.0, buttonbase_ycoord - textRowHeight * 9)) + self.CameraFOV_Slider = DirectSlider(parent=self, relief=DGG.FLAT, range=(40, 90), value=52.5, pageSize=1, pos=(buttonbase_xcoord + 0.2, 0.0, buttonbase_ycoord - textRowHeight * 10), scale=0.5, command=self.__setCameraFOV) + self.CameraFOV_valueLabel = DirectLabel(parent=self, relief=None, text='52.5°', text_scale=options_text_scale * 0.8, pos=(buttonbase_xcoord + 0.5, 0.0, buttonbase_ycoord - textRowHeight * 10)) + self.SmoothAnimations_toggleButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=button_image_scale, text='', text_scale=options_text_scale, text_pos=button_textpos, pos=(buttonbase_xcoord, 0.0, buttonbase_ycoord - textRowHeight * 11), command=self.__doToggleSmoothAnimations) + self.ShowNametags_toggleButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=button_image_scale, text='', text_scale=options_text_scale, text_pos=button_textpos, pos=(buttonbase_xcoord, 0.0, buttonbase_ycoord - textRowHeight * 12), command=self.__doToggleShowNametags) self.speedChatStyleText = SpeedChat.SpeedChat(name='OptionsPageStyleText', structure=[2000], backgroundModelName='phase_3/models/gui/ChatPanel', guiModelName='phase_3.5/models/gui/speedChatGui') self.speedChatStyleText.setScale(self.speed_chat_scale) self.speedChatStyleText.setPos(0.37, 0, buttonbase_ycoord - textRowHeight * 6 + 0.03) @@ -208,6 +222,12 @@ class OptionsTabPage(DirectFrame): self.__setDisplaySettings() self.__setToonChatSoundsButton() self.__setTKeyOnlyChatButton() + # Initialize new QOL settings + self.__setShowFPSButton() + self.__setMouseSensitivitySlider() + self.__setCameraFOVSlider() + self.__setSmoothAnimationsButton() + self.__setShowNametagsButton() self.speedChatStyleText.enter() self.speedChatStyleIndex = base.localAvatar.getSpeedChatStyleIndex() self.updateSpeedChatStyle() @@ -261,6 +281,27 @@ class OptionsTabPage(DirectFrame): self.speedChatStyleText.exit() self.speedChatStyleText.destroy() del self.speedChatStyleText + # Clean up new QOL widgets + self.ShowFPS_toggleButton.destroy() + del self.ShowFPS_toggleButton + del self.ShowFPS_Label + self.MouseSensitivity_Slider.destroy() + self.MouseSensitivity_valueLabel.destroy() + del self.MouseSensitivity_Slider + del self.MouseSensitivity_valueLabel + del self.MouseSensitivity_Label + self.CameraFOV_Slider.destroy() + self.CameraFOV_valueLabel.destroy() + del self.CameraFOV_Slider + del self.CameraFOV_valueLabel + del self.CameraFOV_Label + self.SmoothAnimations_toggleButton.destroy() + del self.SmoothAnimations_toggleButton + del self.SmoothAnimations_Label + self.ShowNametags_toggleButton.destroy() + del self.ShowNametags_toggleButton + del self.ShowNametags_Label + del self.Controls_Label self.currentSizeIndex = None return @@ -381,6 +422,103 @@ class OptionsTabPage(DirectFrame): self.TKeyOnlyChat_Label['text'] = 'T-Key Only Chat: OFF' self.TKeyOnlyChat_toggleButton['text'] = TTLocalizer.OptionsPageToggleOn + def __doToggleShowFPS(self): + messenger.send('wakeup') + showFPS = base.settings.getSetting('show-fps', False) + base.settings.updateSetting('show-fps', not showFPS) + base.setFrameRateMeter(not showFPS) + self.settingsChanged = 1 + self.__setShowFPSButton() + + def __setShowFPSButton(self): + showFPS = base.settings.getSetting('show-fps', False) + if showFPS: + self.ShowFPS_Label['text'] = 'FPS Counter: ON' + self.ShowFPS_toggleButton['text'] = TTLocalizer.OptionsPageToggleOff + base.setFrameRateMeter(True) + else: + self.ShowFPS_Label['text'] = 'FPS Counter: OFF' + self.ShowFPS_toggleButton['text'] = TTLocalizer.OptionsPageToggleOn + base.setFrameRateMeter(False) + + def __setMouseSensitivity(self): + messenger.send('wakeup') + sensitivity = round(self.MouseSensitivity_Slider['value'], 1) + self.MouseSensitivity_valueLabel['text'] = '%.1fx' % sensitivity + base.settings.updateSetting('mouse-sensitivity', sensitivity) + # Apply to camera control if it exists + if hasattr(base, 'mouseSensitivity'): + base.mouseSensitivity = sensitivity + self.settingsChanged = 1 + + def __setMouseSensitivitySlider(self): + sensitivity = base.settings.getSetting('mouse-sensitivity', 1.0) + self.MouseSensitivity_Slider['value'] = sensitivity + self.MouseSensitivity_valueLabel['text'] = '%.1fx' % sensitivity + if hasattr(base, 'mouseSensitivity'): + base.mouseSensitivity = sensitivity + + def __setCameraFOV(self): + messenger.send('wakeup') + fov = round(self.CameraFOV_Slider['value'], 1) + self.CameraFOV_valueLabel['text'] = '%.1f°' % fov + base.settings.updateSetting('camera-fov', fov) + # Apply FOV to camera + if hasattr(base, 'camLens'): + base.camLens.setFov(fov) + self.settingsChanged = 1 + + def __setCameraFOVSlider(self): + fov = base.settings.getSetting('camera-fov', 52.5) + self.CameraFOV_Slider['value'] = fov + self.CameraFOV_valueLabel['text'] = '%.1f°' % fov + if hasattr(base, 'camLens'): + base.camLens.setFov(fov) + + def __doToggleSmoothAnimations(self): + messenger.send('wakeup') + smoothAnims = base.settings.getSetting('smooth-animations', True) + base.settings.updateSetting('smooth-animations', not smoothAnims) + # Apply smooth animations setting + if hasattr(base, 'transitions'): + base.transitions.setUseBlend(not smoothAnims) + self.settingsChanged = 1 + self.__setSmoothAnimationsButton() + + def __setSmoothAnimationsButton(self): + smoothAnims = base.settings.getSetting('smooth-animations', True) + if smoothAnims: + self.SmoothAnimations_Label['text'] = 'Smooth Animations: ON' + self.SmoothAnimations_toggleButton['text'] = TTLocalizer.OptionsPageToggleOff + else: + self.SmoothAnimations_Label['text'] = 'Smooth Animations: OFF' + self.SmoothAnimations_toggleButton['text'] = TTLocalizer.OptionsPageToggleOn + + def __doToggleShowNametags(self): + messenger.send('wakeup') + showNametags = base.settings.getSetting('show-nametags', True) + base.settings.updateSetting('show-nametags', not showNametags) + # Apply nametag visibility + if hasattr(base, 'cr') and hasattr(base.cr, 'doFindAll'): + avatars = base.cr.doFindAll('DistributedToon') + for avatar in avatars: + if hasattr(avatar, 'nametag3d'): + if not showNametags: + avatar.nametag3d.hide() + else: + avatar.nametag3d.show() + self.settingsChanged = 1 + self.__setShowNametagsButton() + + def __setShowNametagsButton(self): + showNametags = base.settings.getSetting('show-nametags', True) + if showNametags: + self.ShowNametags_Label['text'] = 'Show Nametags: ON' + self.ShowNametags_toggleButton['text'] = TTLocalizer.OptionsPageToggleOff + else: + self.ShowNametags_Label['text'] = 'Show Nametags: OFF' + self.ShowNametags_toggleButton['text'] = TTLocalizer.OptionsPageToggleOn + def __doDisplaySettings(self): if self.displaySettings == None: self.displaySettings = DisplaySettingsDialog.DisplaySettingsDialog() diff --git a/win32/start_ai_server.bat b/win32/start_ai_server.bat index ad78ecc..57e2bfb 100644 --- a/win32/start_ai_server.bat +++ b/win32/start_ai_server.bat @@ -1,12 +1,12 @@ @echo off title Open Toontown - AI (District) Server -cd.. +cd /d %~dp0.. rem Read the contents of PPYTHON_PATH into %PPYTHON_PATH%: set /P PPYTHON_PATH=